You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by kw...@apache.org on 2017/08/31 04:29:16 UTC

[01/12] incubator-impala git commit: KUDU-1865: Avoid heap allocation for payload slices

Repository: incubator-impala
Updated Branches:
  refs/heads/master 9e03e9332 -> 30129c453


KUDU-1865: Avoid heap allocation for payload slices

As shown in KUDU-1865, the heap allocation for the temporary
vector for the slices for holding the serialized payload is
introducing measurable overhead under heavy load. This change
replaces the heap allocation with a stack allocation of an
array of size TransferLimits::kMaxPayloadSlices. With this
change, we saw 10%~15% improvement under heavy workload.

Change-Id: I4470d34ba48db5edaeb66d9e739e0c8942004d86
Reviewed-on: http://gerrit.cloudera.org:8080/7471
Tested-by: Kudu Jenkins
Reviewed-by: Todd Lipcon <to...@apache.org>
Reviewed-on: http://gerrit.cloudera.org:8080/7744
Reviewed-by: Dan Hecht <dh...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/701cd503
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/701cd503
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/701cd503

Branch: refs/heads/master
Commit: 701cd503e749993d65646336ecbc09b8b8df695e
Parents: 9e03e93
Author: Michael Ho <kw...@cloudera.com>
Authored: Wed Jul 19 20:15:03 2017 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Wed Aug 30 22:05:47 2017 +0000

----------------------------------------------------------------------
 be/src/kudu/rpc/connection.cc    | 18 +++++++-----------
 be/src/kudu/rpc/connection.h     |  4 ----
 be/src/kudu/rpc/inbound_call.cc  | 20 ++++++++++++--------
 be/src/kudu/rpc/inbound_call.h   |  5 +++--
 be/src/kudu/rpc/outbound_call.cc | 17 ++++++++++++-----
 be/src/kudu/rpc/outbound_call.h  |  3 ++-
 be/src/kudu/rpc/transfer.cc      | 26 +++++++++++++-------------
 be/src/kudu/rpc/transfer.h       | 14 ++++++++++----
 8 files changed, 59 insertions(+), 48 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/701cd503/be/src/kudu/rpc/connection.cc
----------------------------------------------------------------------
diff --git a/be/src/kudu/rpc/connection.cc b/be/src/kudu/rpc/connection.cc
index 7a519e3..bc7446e 100644
--- a/be/src/kudu/rpc/connection.cc
+++ b/be/src/kudu/rpc/connection.cc
@@ -336,13 +336,8 @@ void Connection::QueueOutboundCall(const shared_ptr<OutboundCall> &call) {
   call->set_call_id(call_id);
 
   // Serialize the actual bytes to be put on the wire.
-  slices_tmp_.clear();
-  Status s = call->SerializeTo(&slices_tmp_);
-  if (PREDICT_FALSE(!s.ok())) {
-    call->SetFailed(s, negotiation_complete_ ? Phase::REMOTE_CALL
-                                             : Phase::CONNECTION_NEGOTIATION);
-    return;
-  }
+  TransferPayload tmp_slices;
+  size_t n_slices = call->SerializeTo(&tmp_slices);
 
   call->SetQueued();
 
@@ -400,7 +395,7 @@ void Connection::QueueOutboundCall(const shared_ptr<OutboundCall> &call) {
   TransferCallbacks *cb = new CallTransferCallbacks(call, this);
   awaiting_response_[call_id] = car.release();
   QueueOutbound(gscoped_ptr<OutboundTransfer>(
-      OutboundTransfer::CreateForCallRequest(call_id, slices_tmp_, cb)));
+      OutboundTransfer::CreateForCallRequest(call_id, tmp_slices, n_slices, cb)));
 }
 
 // Callbacks for sending an RPC call response from the server.
@@ -471,14 +466,15 @@ void Connection::QueueResponseForCall(gscoped_ptr<InboundCall> call) {
   // eventually runs in the reactor thread will take care of calling
   // ResponseTransferCallbacks::NotifyTransferAborted.
 
-  std::vector<Slice> slices;
-  call->SerializeResponseTo(&slices);
+  TransferPayload tmp_slices;
+  size_t n_slices = call->SerializeResponseTo(&tmp_slices);
 
   TransferCallbacks *cb = new ResponseTransferCallbacks(std::move(call), this);
   // After the response is sent, can delete the InboundCall object.
   // We set a dummy call ID and required feature set, since these are not needed
   // when sending responses.
-  gscoped_ptr<OutboundTransfer> t(OutboundTransfer::CreateForCallResponse(slices, cb));
+  gscoped_ptr<OutboundTransfer> t(
+      OutboundTransfer::CreateForCallResponse(tmp_slices, n_slices, cb));
 
   QueueTransferTask *task = new QueueTransferTask(std::move(t), this);
   reactor_thread_->reactor()->ScheduleReactorTask(task);

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/701cd503/be/src/kudu/rpc/connection.h
----------------------------------------------------------------------
diff --git a/be/src/kudu/rpc/connection.h b/be/src/kudu/rpc/connection.h
index 3d23826..7f16b7b 100644
--- a/be/src/kudu/rpc/connection.h
+++ b/be/src/kudu/rpc/connection.h
@@ -330,10 +330,6 @@ class Connection : public RefCountedThreadSafe<Connection> {
   // Starts as Status::OK, gets set to a shutdown status upon Shutdown().
   Status shutdown_status_;
 
-  // Temporary vector used when serializing - avoids an allocation
-  // when serializing calls.
-  std::vector<Slice> slices_tmp_;
-
   // RPC features supported by the remote end of the connection.
   std::set<RpcFeatureFlag> remote_features_;
 

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/701cd503/be/src/kudu/rpc/inbound_call.cc
----------------------------------------------------------------------
diff --git a/be/src/kudu/rpc/inbound_call.cc b/be/src/kudu/rpc/inbound_call.cc
index aba9977..d1c27b7 100644
--- a/be/src/kudu/rpc/inbound_call.cc
+++ b/be/src/kudu/rpc/inbound_call.cc
@@ -175,16 +175,20 @@ void InboundCall::SerializeResponseBuffer(const MessageLite& response,
                                  &response_hdr_buf_);
 }
 
-void InboundCall::SerializeResponseTo(vector<Slice>* slices) const {
+size_t InboundCall::SerializeResponseTo(TransferPayload* slices) const {
   TRACE_EVENT0("rpc", "InboundCall::SerializeResponseTo");
-  CHECK_GT(response_hdr_buf_.size(), 0);
-  CHECK_GT(response_msg_buf_.size(), 0);
-  slices->reserve(slices->size() + 2 + outbound_sidecars_.size());
-  slices->push_back(Slice(response_hdr_buf_));
-  slices->push_back(Slice(response_msg_buf_));
-  for (const unique_ptr<RpcSidecar>& car : outbound_sidecars_) {
-    slices->push_back(car->AsSlice());
+  DCHECK_GT(response_hdr_buf_.size(), 0);
+  DCHECK_GT(response_msg_buf_.size(), 0);
+  size_t n_slices = 2 + outbound_sidecars_.size();
+  DCHECK_LE(n_slices, slices->size());
+  auto slice_iter = slices->begin();
+  *slice_iter++ = Slice(response_hdr_buf_);
+  *slice_iter++ = Slice(response_msg_buf_);
+  for (auto& sidecar : outbound_sidecars_) {
+    *slice_iter++ = sidecar->AsSlice();
   }
+  DCHECK_EQ(slice_iter - slices->begin(), n_slices);
+  return n_slices;
 }
 
 Status InboundCall::AddOutboundSidecar(unique_ptr<RpcSidecar> car, int* idx) {

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/701cd503/be/src/kudu/rpc/inbound_call.h
----------------------------------------------------------------------
diff --git a/be/src/kudu/rpc/inbound_call.h b/be/src/kudu/rpc/inbound_call.h
index 6bed18f..84e6745 100644
--- a/be/src/kudu/rpc/inbound_call.h
+++ b/be/src/kudu/rpc/inbound_call.h
@@ -119,9 +119,10 @@ class InboundCall {
                                    const google::protobuf::MessageLite& app_error_pb,
                                    ErrorStatusPB* err);
 
-  // Serialize the response packet for the finished call.
+  // Serialize the response packet for the finished call into 'slices'.
   // The resulting slices refer to memory in this object.
-  void SerializeResponseTo(std::vector<Slice>* slices) const;
+  // Returns the number of slices in the serialized response.
+  size_t SerializeResponseTo(TransferPayload* slices) const;
 
   // See RpcContext::AddRpcSidecar()
   Status AddOutboundSidecar(std::unique_ptr<RpcSidecar> car, int* idx);

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/701cd503/be/src/kudu/rpc/outbound_call.cc
----------------------------------------------------------------------
diff --git a/be/src/kudu/rpc/outbound_call.cc b/be/src/kudu/rpc/outbound_call.cc
index aab29d3..bcc39c3 100644
--- a/be/src/kudu/rpc/outbound_call.cc
+++ b/be/src/kudu/rpc/outbound_call.cc
@@ -99,7 +99,7 @@ OutboundCall::~OutboundCall() {
   DVLOG(4) << "OutboundCall " << this << " destroyed with state_: " << StateName(state_);
 }
 
-Status OutboundCall::SerializeTo(vector<Slice>* slices) {
+size_t OutboundCall::SerializeTo(TransferPayload* slices) {
   DCHECK_LT(0, request_buf_.size())
       << "Must call SetRequestPayload() before SerializeTo()";
 
@@ -116,10 +116,16 @@ Status OutboundCall::SerializeTo(vector<Slice>* slices) {
   serialization::SerializeHeader(
       header_, sidecar_byte_size_ + request_buf_.size(), &header_buf_);
 
-  slices->push_back(Slice(header_buf_));
-  slices->push_back(Slice(request_buf_));
-  for (const unique_ptr<RpcSidecar>& car : sidecars_) slices->push_back(car->AsSlice());
-  return Status::OK();
+  size_t n_slices = 2 + sidecars_.size();
+  DCHECK_LE(n_slices, slices->size());
+  auto slice_iter = slices->begin();
+  *slice_iter++ = Slice(header_buf_);
+  *slice_iter++ = Slice(request_buf_);
+  for (auto& sidecar : sidecars_) {
+    *slice_iter++ = sidecar->AsSlice();
+  }
+  DCHECK_EQ(slice_iter - slices->begin(), n_slices);
+  return n_slices;
 }
 
 void OutboundCall::SetRequestPayload(const Message& req,
@@ -127,6 +133,7 @@ void OutboundCall::SetRequestPayload(const Message& req,
   DCHECK_EQ(-1, sidecar_byte_size_);
 
   sidecars_ = move(sidecars);
+  DCHECK_LE(sidecars_.size(), TransferLimits::kMaxSidecars);
 
   // Compute total size of sidecar payload so that extra space can be reserved as part of
   // the request body.

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/701cd503/be/src/kudu/rpc/outbound_call.h
----------------------------------------------------------------------
diff --git a/be/src/kudu/rpc/outbound_call.h b/be/src/kudu/rpc/outbound_call.h
index ba2df27..221c368 100644
--- a/be/src/kudu/rpc/outbound_call.h
+++ b/be/src/kudu/rpc/outbound_call.h
@@ -156,7 +156,8 @@ class OutboundCall {
 
   // Serialize the call for the wire. Requires that SetRequestPayload()
   // is called first. This is called from the Reactor thread.
-  Status SerializeTo(std::vector<Slice>* slices);
+  // Returns the number of slices in the serialized call.
+  size_t SerializeTo(TransferPayload* slices);
 
   // Mark in the call that cancellation has been requested. If the call hasn't yet
   // started sending or has finished sending the RPC request but is waiting for a

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/701cd503/be/src/kudu/rpc/transfer.cc
----------------------------------------------------------------------
diff --git a/be/src/kudu/rpc/transfer.cc b/be/src/kudu/rpc/transfer.cc
index d24e94d..d660869 100644
--- a/be/src/kudu/rpc/transfer.cc
+++ b/be/src/kudu/rpc/transfer.cc
@@ -135,32 +135,32 @@ string InboundTransfer::StatusAsString() const {
   return Substitute("$0/$1 bytes received", cur_offset_, total_length_);
 }
 
-OutboundTransfer* OutboundTransfer::CreateForCallRequest(
-    int32_t call_id,
-    const std::vector<Slice> &payload,
-    TransferCallbacks *callbacks) {
-  return new OutboundTransfer(call_id, payload, callbacks);
+OutboundTransfer* OutboundTransfer::CreateForCallRequest(int32_t call_id,
+                                                         const TransferPayload &payload,
+                                                         size_t n_payload_slices,
+                                                         TransferCallbacks *callbacks) {
+  return new OutboundTransfer(call_id, payload, n_payload_slices, callbacks);
 }
 
-OutboundTransfer* OutboundTransfer::CreateForCallResponse(const std::vector<Slice> &payload,
+OutboundTransfer* OutboundTransfer::CreateForCallResponse(const TransferPayload &payload,
+                                                          size_t n_payload_slices,
                                                           TransferCallbacks *callbacks) {
-  return new OutboundTransfer(kInvalidCallId, payload, callbacks);
+  return new OutboundTransfer(kInvalidCallId, payload, n_payload_slices, callbacks);
 }
 
-
 OutboundTransfer::OutboundTransfer(int32_t call_id,
-                                   const std::vector<Slice> &payload,
+                                   const TransferPayload &payload,
+                                   size_t n_payload_slices,
                                    TransferCallbacks *callbacks)
   : cur_slice_idx_(0),
     cur_offset_in_slice_(0),
     callbacks_(callbacks),
     call_id_(call_id),
     aborted_(false) {
-  CHECK(!payload.empty());
 
-  n_payload_slices_ = payload.size();
-  CHECK_LE(n_payload_slices_, arraysize(payload_slices_));
-  for (int i = 0; i < payload.size(); i++) {
+  n_payload_slices_ = n_payload_slices;
+  CHECK_LE(n_payload_slices_, payload_slices_.size());
+  for (int i = 0; i < n_payload_slices; i++) {
     payload_slices_[i] = payload[i];
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/701cd503/be/src/kudu/rpc/transfer.h
----------------------------------------------------------------------
diff --git a/be/src/kudu/rpc/transfer.h b/be/src/kudu/rpc/transfer.h
index 671347a..2a2b726 100644
--- a/be/src/kudu/rpc/transfer.h
+++ b/be/src/kudu/rpc/transfer.h
@@ -18,6 +18,7 @@
 #ifndef KUDU_RPC_TRANSFER_H
 #define KUDU_RPC_TRANSFER_H
 
+#include <array>
 #include <boost/intrusive/list.hpp>
 #include <gflags/gflags.h>
 #include <set>
@@ -56,6 +57,8 @@ class TransferLimits {
   DISALLOW_IMPLICIT_CONSTRUCTORS(TransferLimits);
 };
 
+typedef std::array<Slice, TransferLimits::kMaxPayloadSlices> TransferPayload;
+
 // This class is used internally by the RPC layer to represent an inbound
 // transfer in progress.
 //
@@ -119,12 +122,14 @@ class OutboundTransfer : public boost::intrusive::list_base_hook<> {
 
   // Create an outbound transfer for a call request.
   static OutboundTransfer* CreateForCallRequest(int32_t call_id,
-                                                const std::vector<Slice> &payload,
+                                                const TransferPayload &payload,
+                                                size_t n_payload_slices,
                                                 TransferCallbacks *callbacks);
 
   // Create an outbound transfer for a call response.
   // See above for details.
-  static OutboundTransfer* CreateForCallResponse(const std::vector<Slice> &payload,
+  static OutboundTransfer* CreateForCallResponse(const TransferPayload &payload,
+                                                 size_t n_payload_slices,
                                                  TransferCallbacks *callbacks);
 
   // Destruct the transfer. A transfer object should never be deallocated
@@ -162,12 +167,13 @@ class OutboundTransfer : public boost::intrusive::list_base_hook<> {
 
  private:
   OutboundTransfer(int32_t call_id,
-                   const std::vector<Slice> &payload,
+                   const TransferPayload& payload,
+                   size_t n_payload_slices,
                    TransferCallbacks *callbacks);
 
   // Slices to send. Uses an array here instead of a vector to avoid an expensive
   // vector construction (improved performance a couple percent).
-  Slice payload_slices_[TransferLimits::kMaxPayloadSlices];
+  TransferPayload payload_slices_;
   size_t n_payload_slices_;
 
   // The current slice that is being sent.


[08/12] incubator-impala git commit: Bump Kudu version to 1c70e5d

Posted by kw...@apache.org.
Bump Kudu version to 1c70e5d

Change-Id: I39eee4dc1541adfda0743a5a064dbd2eae6f3d48
Reviewed-on: http://gerrit.cloudera.org:8080/7903
Reviewed-by: Matthew Jacobs <mj...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/ec2ba02d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/ec2ba02d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/ec2ba02d

Branch: refs/heads/master
Commit: ec2ba02d1668fb7f604fb3b40db54ef76d98798f
Parents: 8aaf9ec
Author: Thomas Tauber-Marshall <tm...@cloudera.com>
Authored: Wed Aug 30 14:14:22 2017 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Thu Aug 31 01:50:41 2017 +0000

----------------------------------------------------------------------
 bin/impala-config.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/ec2ba02d/bin/impala-config.sh
----------------------------------------------------------------------
diff --git a/bin/impala-config.sh b/bin/impala-config.sh
index 5e988f4..9002e3b 100755
--- a/bin/impala-config.sh
+++ b/bin/impala-config.sh
@@ -72,7 +72,7 @@ fi
 # moving to a different build of the toolchain, e.g. when a version is bumped or a
 # compile option is changed. The build id can be found in the output of the toolchain
 # build jobs, it is constructed from the build number and toolchain git hash prefix.
-export IMPALA_TOOLCHAIN_BUILD_ID=454-bc68b18991
+export IMPALA_TOOLCHAIN_BUILD_ID=457-22902e9fb8
 # Versions of toolchain dependencies.
 # -----------------------------------
 export IMPALA_AVRO_VERSION=1.7.4-p4
@@ -120,7 +120,7 @@ if [[ $OSTYPE == "darwin"* ]]; then
 fi
 
 # Kudu version in the toolchain; provides libkudu_client.so and minicluster binaries.
-export IMPALA_KUDU_VERSION=44a820b
+export IMPALA_KUDU_VERSION=1c70e5d
 
 # Kudu version used to identify Java client jar from maven
 export KUDU_JAVA_VERSION=1.5.0-cdh5.13.0-SNAPSHOT


[06/12] incubator-impala git commit: IMPALA-5617: Include full workload name in tpch_nested query filenames

Posted by kw...@apache.org.
IMPALA-5617: Include full workload name in tpch_nested query filenames

The concurrent test driver did not pick them up because the name
prefix did not match the workload dirname.  The query test driver
used a hardcoded prefix.

Testing done: Ran tests/stress/concurrent_select.py,
tests/query_test/test_tpch_nested_queries.py locally; latter
passed, former hit IMPALA-5855 after correctly locating all 22
new tpch_nested query files.

Change-Id: Ie067b201ae20b4f4c61a98be7ac1ec5a3f8febd8
Reviewed-on: http://gerrit.cloudera.org:8080/7891
Reviewed-by: Michael Brown <mi...@cloudera.com>
Reviewed-by: David Knupp <dk...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/95f5fb75
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/95f5fb75
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/95f5fb75

Branch: refs/heads/master
Commit: 95f5fb7548df92e20cd2eb2d67e84447fa224ab1
Parents: 701cd50
Author: Tim Wood <tw...@cloudera.com>
Authored: Tue Aug 29 18:08:25 2017 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Thu Aug 31 01:08:40 2017 +0000

----------------------------------------------------------------------
 .../workloads/tpch_nested/queries/tpch-q1.test  |    32 -
 .../workloads/tpch_nested/queries/tpch-q10.test |    58 -
 .../workloads/tpch_nested/queries/tpch-q11.test |  1086 -
 .../workloads/tpch_nested/queries/tpch-q12.test |    36 -
 .../workloads/tpch_nested/queries/tpch-q13.test |    68 -
 .../workloads/tpch_nested/queries/tpch-q14.test |    21 -
 .../workloads/tpch_nested/queries/tpch-q15.test |    38 -
 .../workloads/tpch_nested/queries/tpch-q16.test | 18345 -----------------
 .../workloads/tpch_nested/queries/tpch-q17.test |    25 -
 .../workloads/tpch_nested/queries/tpch-q18.test |    81 -
 .../workloads/tpch_nested/queries/tpch-q19.test |    43 -
 .../workloads/tpch_nested/queries/tpch-q2.test  |   147 -
 .../workloads/tpch_nested/queries/tpch-q20.test |   226 -
 .../workloads/tpch_nested/queries/tpch-q21.test |   145 -
 .../workloads/tpch_nested/queries/tpch-q22.test |    46 -
 .../workloads/tpch_nested/queries/tpch-q3.test  |    38 -
 .../workloads/tpch_nested/queries/tpch-q4.test  |    33 -
 .../workloads/tpch_nested/queries/tpch-q5.test  |    33 -
 .../workloads/tpch_nested/queries/tpch-q6.test  |    17 -
 .../workloads/tpch_nested/queries/tpch-q7.test  |    47 -
 .../workloads/tpch_nested/queries/tpch-q8.test  |    43 -
 .../workloads/tpch_nested/queries/tpch-q9.test  |   211 -
 .../tpch_nested/queries/tpch_nested-q1.test     |    32 +
 .../tpch_nested/queries/tpch_nested-q10.test    |    58 +
 .../tpch_nested/queries/tpch_nested-q11.test    |  1086 +
 .../tpch_nested/queries/tpch_nested-q12.test    |    36 +
 .../tpch_nested/queries/tpch_nested-q13.test    |    68 +
 .../tpch_nested/queries/tpch_nested-q14.test    |    21 +
 .../tpch_nested/queries/tpch_nested-q15.test    |    38 +
 .../tpch_nested/queries/tpch_nested-q16.test    | 18345 +++++++++++++++++
 .../tpch_nested/queries/tpch_nested-q17.test    |    25 +
 .../tpch_nested/queries/tpch_nested-q18.test    |    81 +
 .../tpch_nested/queries/tpch_nested-q19.test    |    43 +
 .../tpch_nested/queries/tpch_nested-q2.test     |   147 +
 .../tpch_nested/queries/tpch_nested-q20.test    |   226 +
 .../tpch_nested/queries/tpch_nested-q21.test    |   145 +
 .../tpch_nested/queries/tpch_nested-q22.test    |    46 +
 .../tpch_nested/queries/tpch_nested-q3.test     |    38 +
 .../tpch_nested/queries/tpch_nested-q4.test     |    33 +
 .../tpch_nested/queries/tpch_nested-q5.test     |    33 +
 .../tpch_nested/queries/tpch_nested-q6.test     |    17 +
 .../tpch_nested/queries/tpch_nested-q7.test     |    47 +
 .../tpch_nested/queries/tpch_nested-q8.test     |    43 +
 .../tpch_nested/queries/tpch_nested-q9.test     |   211 +
 tests/query_test/test_tpch_nested_queries.py    |    44 +-
 45 files changed, 20841 insertions(+), 20841 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q1.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q1.test b/testdata/workloads/tpch_nested/queries/tpch-q1.test
deleted file mode 100644
index e0ff4e9..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q1.test
+++ /dev/null
@@ -1,32 +0,0 @@
-====
----- QUERY: TPCH-Q1
-# Q1 - Pricing Summary Report Query
-select
-  l_returnflag,
-  l_linestatus,
-  sum(l_quantity) as sum_qty,
-  sum(l_extendedprice) as sum_base_price,
-  sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
-  sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
-  avg(l_quantity) as avg_qty,
-  avg(l_extendedprice) as avg_price,
-  avg(l_discount) as avg_disc,
-  count(*) as count_order
-from
-  customer.c_orders.o_lineitems
-where
-  l_shipdate <= '1998-09-02'
-group by
-  l_returnflag,
-  l_linestatus
-order by
-  l_returnflag,
-  l_linestatus
----- RESULTS
-'A','F',37734107.00,56586554400.73,53758257134.8700,55909065222.827692,25.52,38273.12,0.04,1478493
-'N','F',991417.00,1487504710.38,1413082168.0541,1469649223.194375,25.51,38284.46,0.05,38854
-'N','O',74476040.00,111701729697.74,106118230307.6056,110367043872.497010,25.50,38249.11,0.04,2920374
-'R','F',37719753.00,56568041380.90,53741292684.6040,55889619119.831932,25.50,38250.85,0.05,1478870
----- TYPES
-string, string, decimal, decimal, decimal, decimal, decimal, decimal, decimal, bigint
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q10.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q10.test b/testdata/workloads/tpch_nested/queries/tpch-q10.test
deleted file mode 100644
index 7fb2170..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q10.test
+++ /dev/null
@@ -1,58 +0,0 @@
-====
----- QUERY: TPCH-Q10
-# Q10 - Returned Item Reporting Query
-# Converted select from multiple tables to joins
-select
-  c_custkey,
-  c_name,
-  sum(l_extendedprice * (1 - l_discount)) as revenue,
-  c_acctbal,
-  n_name,
-  c_address,
-  c_phone,
-  c_comment
-from
-  customer c,
-  c.c_orders o,
-  o.o_lineitems l,
-  region.r_nations n
-where
-  o_orderdate >= '1993-10-01'
-  and o_orderdate < '1994-01-01'
-  and l_returnflag = 'R'
-  and c_nationkey = n_nationkey
-group by
-  c_custkey,
-  c_name,
-  c_acctbal,
-  c_phone,
-  n_name,
-  c_address,
-  c_comment
-order by
-  revenue desc
-limit 20
----- RESULTS
-57040,'Customer#000057040',734235.2455,632.87,'JAPAN','Eioyzjf4pp','22-895-641-3466','sits. slyly regular requests sleep alongside of the regular inst'
-143347,'Customer#000143347',721002.6948,2557.47,'EGYPT','1aReFYv,Kw4','14-742-935-3718','ggle carefully enticing requests. final deposits use bold, bold pinto beans. ironic, idle re'
-60838,'Customer#000060838',679127.3077,2454.77,'BRAZIL','64EaJ5vMAHWJlBOxJklpNc2RJiWE','12-913-494-9813',' need to boost against the slyly regular account'
-101998,'Customer#000101998',637029.5667,3790.89,'UNITED KINGDOM','01c9CILnNtfOQYmZj','33-593-865-6378','ress foxes wake slyly after the bold excuses. ironic platelets are furiously carefully bold theodolites'
-125341,'Customer#000125341',633508.0860,4983.51,'GERMANY','S29ODD6bceU8QSuuEJznkNaK','17-582-695-5962','arefully even depths. blithely even excuses sleep furiously. foxes use except the dependencies. ca'
-25501,'Customer#000025501',620269.7849,7725.04,'ETHIOPIA','  W556MXuoiaYCCZamJI,Rn0B4ACUGdkQ8DZ','15-874-808-6793','he pending instructions wake carefully at the pinto beans. regular, final instructions along the slyly fina'
-115831,'Customer#000115831',596423.8672,5098.10,'FRANCE','rFeBbEEyk dl ne7zV5fDrmiq1oK09wV7pxqCgIc','16-715-386-3788','l somas sleep. furiously final deposits wake blithely regular pinto b'
-84223,'Customer#000084223',594998.0239,528.65,'UNITED KINGDOM','nAVZCs6BaWap rrM27N 2qBnzc5WBauxbA','33-442-824-8191',' slyly final deposits haggle regular, pending dependencies. pending escapades wake '
-54289,'Customer#000054289',585603.3918,5583.02,'IRAN','vXCxoCsU0Bad5JQI ,oobkZ','20-834-292-4707','ely special foxes are quickly finally ironic p'
-39922,'Customer#000039922',584878.1134,7321.11,'GERMANY','Zgy4s50l2GKN4pLDPBU8m342gIw6R','17-147-757-8036','y final requests. furiously final foxes cajole blithely special platelets. f'
-6226,'Customer#000006226',576783.7606,2230.09,'UNITED KINGDOM','8gPu8,NPGkfyQQ0hcIYUGPIBWc,ybP5g,','33-657-701-3391','ending platelets along the express deposits cajole carefully final '
-922,'Customer#000000922',576767.5333,3869.25,'GERMANY','Az9RFaut7NkPnc5zSD2PwHgVwr4jRzq','17-945-916-9648','luffily fluffy deposits. packages c'
-147946,'Customer#000147946',576455.1320,2030.13,'ALGERIA','iANyZHjqhyy7Ajah0pTrYyhJ','10-886-956-3143','ithely ironic deposits haggle blithely ironic requests. quickly regu'
-115640,'Customer#000115640',569341.1933,6436.10,'ARGENTINA','Vtgfia9qI 7EpHgecU1X','11-411-543-4901','ost slyly along the patterns; pinto be'
-73606,'Customer#000073606',568656.8578,1785.67,'JAPAN','xuR0Tro5yChDfOCrjkd2ol','22-437-653-6966','he furiously regular ideas. slowly'
-110246,'Customer#000110246',566842.9815,7763.35,'VIETNAM','7KzflgX MDOq7sOkI','31-943-426-9837','egular deposits serve blithely above the fl'
-142549,'Customer#000142549',563537.2368,5085.99,'INDONESIA','ChqEoK43OysjdHbtKCp6dKqjNyvvi9','19-955-562-2398','sleep pending courts. ironic deposits against the carefully unusual platelets cajole carefully express accounts.'
-146149,'Customer#000146149',557254.9865,1791.55,'ROMANIA','s87fvzFQpU','29-744-164-6487',' of the slyly silent accounts. quickly final accounts across the '
-52528,'Customer#000052528',556397.3509,551.79,'ARGENTINA','NFztyTOR10UOJ','11-208-192-3205',' deposits hinder. blithely pending asymptotes breach slyly regular re'
-23431,'Customer#000023431',554269.5360,3381.86,'ROMANIA','HgiV0phqhaIa9aydNoIlb','29-915-458-2654','nusual, even instructions: furiously stealthy n'
----- TYPES
-bigint, string, decimal, decimal, string, string, string, string
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q11.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q11.test b/testdata/workloads/tpch_nested/queries/tpch-q11.test
deleted file mode 100644
index 780b206..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q11.test
+++ /dev/null
@@ -1,1086 +0,0 @@
-====
----- QUERY: TPCH-Q11
-# Q11 - Important Stock Identification
-# Modifications: query was rewritten to not have a subquery in the having clause
-select
-  *
-from (
-  select
-    ps_partkey,
-    sum(ps_supplycost * ps_availqty) as value
-  from
-    supplier s,
-    s.s_partsupps ps,
-    region.r_nations n
-  where
-    s_nationkey = n_nationkey
-    and n_name = 'GERMANY'
-  group by
-    ps_partkey
-) as inner_query
-where
-  value > (
-    select
-      sum(ps_supplycost * ps_availqty) * 0.0001
-    from
-      supplier s,
-      s.s_partsupps ps,
-      region.r_nations n
-    where
-      s_nationkey = n_nationkey
-      and n_name = 'GERMANY'
-  )
-order by
-  value desc
----- RESULTS
-129760,17538456.86
-166726,16503353.92
-191287,16474801.97
-161758,16101755.54
-34452,15983844.72
-139035,15907078.34
-9403,15451755.62
-154358,15212937.88
-38823,15064802.86
-85606,15053957.15
-33354,14408297.40
-154747,14407580.68
-82865,14235489.78
-76094,14094247.04
-222,13937777.74
-121271,13908336.00
-55221,13716120.47
-22819,13666434.28
-76281,13646853.68
-85298,13581154.93
-85158,13554904.00
-139684,13535538.72
-31034,13498025.25
-87305,13482847.04
-10181,13445148.75
-62323,13411824.30
-26489,13377256.38
-96493,13339057.83
-56548,13329014.97
-55576,13306843.35
-159751,13306614.48
-92406,13287414.50
-182636,13223726.74
-199969,13135288.21
-62865,13001926.94
-7284,12945298.19
-197867,12944510.52
-11562,12931575.51
-75165,12916918.12
-97175,12911283.50
-140840,12896562.23
-65241,12890600.46
-166120,12876927.22
-9035,12863828.70
-144616,12853549.30
-176723,12832309.74
-170884,12792136.58
-29790,12723300.33
-95213,12555483.73
-183873,12550533.05
-171235,12476538.30
-21533,12437821.32
-17290,12432159.50
-156397,12260623.50
-122611,12222812.98
-139155,12220319.25
-146316,12215800.61
-171381,12199734.52
-198633,12078226.95
-167417,12046637.62
-59512,12043468.76
-31688,12034893.64
-159586,12001505.84
-8993,11963814.30
-120302,11857707.55
-43536,11779340.52
-9552,11776909.16
-86223,11772205.08
-53776,11758669.65
-131285,11616953.74
-91628,11611114.83
-169644,11567959.72
-182299,11567462.05
-33107,11453818.76
-104184,11436657.44
-67027,11419127.14
-176869,11371451.71
-30885,11369674.79
-54420,11345076.88
-72240,11313951.05
-178708,11294635.17
-81298,11273686.13
-158324,11243442.72
-117095,11242535.24
-176793,11237733.38
-86091,11177793.79
-116033,11145434.36
-129058,11119112.20
-193714,11104706.39
-117195,11077217.96
-49851,11043701.78
-19791,11030662.62
-75800,11012401.62
-161562,10996371.69
-10119,10980015.75
-39185,10970042.56
-47223,10950022.13
-175594,10942923.05
-111295,10893675.61
-155446,10852764.57
-156391,10839810.38
-40884,10837234.19
-141288,10837130.21
-152388,10830977.82
-33449,10830858.72
-149035,10826130.02
-162620,10814275.68
-118324,10791788.10
-38932,10777541.75
-121294,10764225.22
-48721,10762582.49
-63342,10740132.60
-5614,10724668.80
-62266,10711143.10
-100202,10696675.55
-197741,10688560.72
-169178,10648522.80
-5271,10639392.65
-34499,10584177.10
-71108,10569117.56
-137132,10539880.47
-78451,10524873.24
-150827,10503810.48
-107237,10488030.84
-101727,10473558.10
-58708,10466280.44
-89768,10465477.22
-146493,10444291.58
-55424,10444006.48
-16560,10425574.74
-133114,10415097.90
-195810,10413625.20
-76673,10391977.18
-97305,10390890.57
-134210,10387210.02
-188536,10386529.92
-122255,10335760.32
-2682,10312966.10
-43814,10303086.61
-34767,10290405.18
-165584,10273705.89
-2231,10270415.55
-111259,10263256.56
-195578,10239795.82
-21093,10217531.30
-29856,10216932.54
-133686,10213345.76
-87745,10185509.40
-135153,10179379.70
-11773,10167410.84
-76316,10165151.70
-123076,10161225.78
-91894,10130462.19
-39741,10128387.52
-111753,10119780.98
-142729,10104748.89
-116775,10097750.42
-102589,10034784.36
-186268,10012181.57
-44545,10000286.48
-23307,9966577.50
-124281,9930018.90
-69604,9925730.64
-21971,9908982.03
-58148,9895894.40
-16532,9886529.90
-159180,9883744.43
-74733,9877582.88
-35173,9858275.92
-7116,9856881.02
-124620,9838589.14
-122108,9829949.35
-67200,9828690.69
-164775,9821424.44
-9039,9816447.72
-14912,9803102.20
-190906,9791315.70
-130398,9781674.27
-119310,9776927.21
-10132,9770930.78
-107211,9757586.25
-113958,9757065.50
-37009,9748362.69
-66746,9743528.76
-134486,9731922.00
-15945,9731096.45
-55307,9717745.80
-56362,9714922.83
-57726,9711792.10
-57256,9708621.00
-112292,9701653.08
-87514,9699492.53
-174206,9680562.02
-72865,9679043.34
-114357,9671017.44
-112807,9665019.21
-115203,9661018.73
-177454,9658906.35
-161275,9634313.71
-61893,9617095.44
-122219,9604888.20
-183427,9601362.58
-59158,9599705.96
-61931,9584918.98
-5532,9579964.14
-20158,9576714.38
-167199,9557413.08
-38869,9550279.53
-86949,9541943.70
-198544,9538613.92
-193762,9538238.94
-108807,9536247.16
-168324,9535647.99
-115588,9532195.04
-141372,9529702.14
-175120,9526068.66
-163851,9522808.83
-160954,9520359.45
-117757,9517882.80
-52594,9508325.76
-60960,9498843.06
-70272,9495775.62
-44050,9495515.36
-152213,9494756.96
-121203,9492601.30
-70114,9491012.30
-167588,9484741.11
-136455,9476241.78
-4357,9464355.64
-6786,9463632.57
-61345,9455336.70
-160826,9446754.84
-71275,9440138.40
-77746,9439118.35
-91289,9437472.00
-56723,9435102.16
-86647,9434604.18
-131234,9432120.00
-198129,9427651.36
-165530,9426193.68
-69233,9425053.92
-6243,9423304.66
-90110,9420422.70
-191980,9419368.36
-38461,9419316.07
-167873,9419024.49
-159373,9416950.15
-128707,9413428.50
-45267,9410863.78
-48460,9409793.93
-197672,9406887.68
-60884,9403442.40
-15209,9403245.31
-138049,9401262.10
-199286,9391770.70
-19629,9391236.40
-134019,9390615.15
-169475,9387639.58
-165918,9379510.44
-135602,9374251.54
-162323,9367566.51
-96277,9360850.68
-98336,9359671.29
-119781,9356395.73
-34440,9355365.00
-57362,9355180.10
-167236,9352973.84
-38463,9347530.94
-86749,9346826.44
-170007,9345699.90
-193087,9343744.00
-150383,9332576.75
-60932,9329582.02
-128420,9328206.35
-162145,9327722.88
-55686,9320304.40
-163080,9304916.96
-160583,9303515.92
-118153,9298606.56
-152634,9282184.57
-84731,9276586.92
-119989,9273814.20
-114584,9269698.65
-131817,9268570.08
-29068,9256583.88
-44116,9255922.00
-115818,9253311.91
-103388,9239218.08
-186118,9236209.12
-155809,9235410.84
-147003,9234847.99
-27769,9232511.64
-112779,9231927.36
-124851,9228982.68
-158488,9227216.40
-83328,9224792.20
-136797,9222927.09
-141730,9216370.68
-87304,9215695.50
-156004,9215557.90
-140740,9215329.20
-100648,9212185.08
-174774,9211718.00
-37644,9211578.60
-48807,9209496.24
-95940,9207948.40
-141586,9206699.22
-147248,9205654.95
-61372,9205228.76
-52970,9204415.95
-26430,9203710.51
-28504,9201669.20
-25810,9198878.50
-125329,9198688.50
-167867,9194022.72
-134767,9191444.72
-127745,9191271.56
-69208,9187110.00
-155222,9186469.16
-196916,9182995.82
-195590,9176353.12
-169155,9175176.09
-81558,9171946.50
-185136,9171293.04
-114790,9168509.10
-194142,9165836.61
-167639,9161165.00
-11241,9160789.46
-82628,9160155.54
-41399,9148338.00
-30755,9146196.84
-6944,9143574.58
-6326,9138803.16
-101296,9135657.62
-181479,9121093.30
-76898,9120983.10
-64274,9118745.25
-175826,9117387.99
-142215,9116876.88
-103415,9113128.62
-119765,9110768.79
-107624,9108837.45
-84215,9105257.36
-73774,9102651.92
-173972,9102069.00
-69817,9095513.88
-86943,9092253.00
-138859,9087719.30
-162273,9085296.48
-175945,9080401.21
-16836,9075715.44
-70224,9075265.95
-139765,9074755.89
-30319,9073233.10
-3851,9072657.24
-181271,9070631.52
-162184,9068835.78
-81683,9067258.47
-153028,9067010.51
-123324,9061870.95
-186481,9058608.30
-167680,9052908.76
-165293,9050545.70
-122148,9046298.17
-138604,9045840.80
-78851,9044822.60
-137280,9042355.34
-8823,9040855.10
-163900,9040848.48
-75600,9035392.45
-81676,9031999.40
-46033,9031460.58
-194917,9028500.00
-133936,9026949.02
-33182,9024971.10
-34220,9021485.39
-20118,9019942.60
-178258,9019881.66
-15560,9017687.28
-111425,9016198.56
-95942,9015585.12
-132709,9015240.15
-39731,9014746.95
-154307,9012571.20
-23769,9008157.60
-93328,9007211.20
-142826,8998297.44
-188792,8996014.00
-68703,8994982.22
-145280,8990941.05
-150725,8985686.16
-172046,8982469.52
-70476,8967629.50
-124988,8966805.22
-17937,8963319.76
-177372,8954873.64
-137994,8950916.79
-84019,8950039.98
-40389,8946158.20
-69187,8941054.14
-4863,8939044.92
-50465,8930503.14
-43686,8915543.84
-131352,8909053.59
-198916,8906940.03
-135932,8905282.95
-104673,8903682.00
-152308,8903244.08
-135298,8900323.20
-156873,8899429.10
-157454,8897339.20
-75415,8897068.09
-46325,8895569.09
-1966,8895117.06
-24576,8895034.75
-19425,8890156.60
-169735,8890085.56
-32225,8889829.28
-124537,8889770.71
-146327,8887836.23
-121562,8887740.40
-44731,8882444.95
-93141,8881850.88
-187871,8873506.18
-71709,8873057.28
-151913,8869321.17
-33786,8868955.39
-35902,8868126.06
-23588,8867769.90
-24508,8867616.00
-161282,8866661.43
-188061,8862304.00
-132847,8862082.00
-166843,8861200.80
-30609,8860214.73
-56191,8856546.96
-160740,8852685.43
-71229,8846106.99
-91208,8845541.28
-10995,8845306.56
-78094,8839938.29
-36489,8838538.10
-198437,8836494.84
-151693,8833807.64
-185367,8829791.37
-65682,8820622.89
-65421,8819329.24
-122225,8816821.86
-85330,8811013.16
-64555,8810643.12
-104188,8808211.02
-54411,8805703.40
-39438,8805282.56
-70795,8800060.92
-20383,8799073.28
-21952,8798624.19
-63584,8796590.00
-158768,8796422.95
-166588,8796214.38
-120600,8793558.06
-157202,8788287.88
-55358,8786820.75
-168322,8786670.73
-25143,8786324.80
-5368,8786274.14
-114025,8786201.12
-97744,8785315.94
-164327,8784503.86
-76542,8782613.28
-4731,8772846.70
-157590,8772006.45
-154276,8771733.91
-28705,8771576.64
-100226,8769455.00
-179195,8769185.16
-184355,8768118.05
-120408,8768011.12
-63145,8761991.96
-53135,8753491.80
-173071,8750508.80
-41087,8749436.79
-194830,8747438.40
-43496,8743359.30
-30235,8741611.00
-26391,8741399.64
-191816,8740258.72
-47616,8737229.68
-152101,8734432.76
-163784,8730514.34
-5134,8728424.64
-155241,8725429.86
-188814,8724182.40
-140782,8720378.75
-153141,8719407.51
-169373,8718609.06
-41335,8714773.80
-197450,8714617.32
-87004,8714017.79
-181804,8712257.76
-122814,8711119.14
-109939,8709193.16
-98094,8708780.04
-74630,8708040.75
-197291,8706519.09
-184173,8705467.45
-192175,8705411.12
-19471,8702536.12
-18052,8702155.70
-135560,8698137.72
-152791,8697325.80
-170953,8696909.19
-116137,8696687.17
-7722,8696589.40
-49788,8694846.71
-13252,8694822.42
-12633,8694559.36
-193438,8690426.72
-17326,8689329.16
-96124,8679794.58
-143802,8676626.48
-30389,8675826.60
-75250,8675257.14
-72613,8673524.94
-123520,8672456.25
-325,8667741.28
-167291,8667556.18
-150119,8663403.54
-88420,8663355.40
-179784,8653021.34
-130884,8651970.00
-172611,8648217.00
-85373,8647796.22
-122717,8646758.54
-113431,8646348.34
-66015,8643349.40
-33141,8643243.18
-69786,8637396.92
-181857,8637393.28
-122939,8636378.00
-196223,8635391.02
-50532,8632648.24
-58102,8632614.54
-93581,8632372.36
-52804,8632109.25
-755,8627091.68
-16597,8623357.05
-119041,8622397.00
-89050,8621185.98
-98696,8620784.82
-94399,8620524.00
-151295,8616671.02
-56417,8613450.35
-121322,8612948.23
-126883,8611373.42
-29155,8610163.64
-114530,8608471.74
-131007,8607394.82
-128715,8606833.62
-72522,8601479.98
-144061,8595718.74
-83503,8595034.20
-112199,8590717.44
-9227,8587350.42
-116318,8585910.66
-41248,8585559.64
-159398,8584821.00
-105966,8582308.79
-137876,8580641.30
-122272,8580400.77
-195717,8577278.10
-165295,8571121.92
-5840,8570728.74
-120860,8570610.44
-66692,8567540.52
-135596,8563276.31
-150576,8562794.10
-7500,8562393.84
-107716,8561541.56
-100611,8559995.85
-171192,8557390.08
-107660,8556696.60
-13461,8556545.12
-90310,8555131.51
-141493,8553782.93
-71286,8552682.00
-136423,8551300.76
-54241,8550785.25
-120325,8549976.60
-424,8547527.10
-196543,8545907.09
-13042,8542717.18
-58332,8536074.69
-9191,8535663.92
-134357,8535429.90
-96207,8534900.60
-92292,8530618.78
-181093,8528303.52
-105064,8527491.60
-59635,8526854.08
-136974,8524351.56
-126694,8522783.37
-6247,8522606.90
-139447,8522521.92
-96313,8520949.92
-108454,8520916.25
-181254,8519496.10
-71117,8519223.00
-131703,8517215.28
-59312,8510568.36
-2903,8509960.35
-102838,8509527.69
-162806,8508906.05
-41527,8508222.36
-118416,8505858.36
-180203,8505024.16
-14773,8500598.28
-140446,8499514.24
-199641,8497362.59
-109240,8494617.12
-150268,8494188.38
-45310,8492380.65
-36552,8490733.60
-199690,8490145.80
-185353,8488726.68
-163615,8484985.01
-196520,8483545.04
-133438,8483482.35
-77285,8481442.32
-55824,8476893.90
-76753,8475522.12
-46129,8472717.96
-28358,8472515.50
-9317,8472145.32
-33823,8469721.44
-39055,8469145.07
-91471,8468874.56
-142299,8466039.55
-97672,8464119.80
-134712,8461781.79
-157988,8460123.20
-102284,8458652.44
-73533,8458453.32
-90599,8457874.86
-112160,8457863.36
-124792,8457633.70
-66097,8457573.15
-165271,8456969.01
-146925,8454887.91
-164277,8454838.50
-131290,8454811.20
-179386,8450909.90
-90486,8447873.86
-175924,8444421.66
-185922,8442394.88
-38492,8436438.32
-172511,8436287.34
-139539,8434180.29
-11926,8433199.52
-55889,8431449.88
-163068,8431116.40
-138772,8428406.36
-126821,8425180.68
-22091,8420687.88
-55981,8419434.38
-100960,8419403.46
-172568,8417955.21
-63135,8415945.53
-137651,8413170.35
-191353,8413039.84
-62988,8411571.48
-103417,8411541.12
-12052,8411519.28
-104260,8408516.55
-157129,8405730.08
-77254,8405537.22
-112966,8403512.89
-168114,8402764.56
-49940,8402328.20
-52017,8398753.60
-176179,8398087.00
-100215,8395906.61
-61256,8392811.20
-15366,8388907.80
-109479,8388027.20
-66202,8386522.83
-81707,8385761.19
-51727,8385426.40
-9980,8382754.62
-174403,8378575.73
-54558,8378041.92
-3141,8377378.22
-134829,8377105.52
-145056,8376920.76
-194020,8375157.64
-7117,8373982.27
-120146,8373796.20
-126843,8370761.28
-62117,8369493.44
-111221,8367525.81
-159337,8366092.26
-173903,8365428.48
-136438,8364065.45
-56684,8363198.00
-137597,8363185.94
-20039,8361138.24
-121326,8359635.52
-48435,8352863.10
-1712,8349107.00
-167190,8347238.70
-32113,8346452.04
-40580,8342983.32
-74785,8342519.13
-14799,8342236.75
-177291,8341736.83
-198956,8340370.65
-69179,8338465.99
-118764,8337616.56
-128814,8336435.56
-82729,8331766.88
-152048,8330638.99
-171085,8326259.50
-126730,8325974.40
-77525,8323282.50
-170653,8322840.50
-5257,8320350.78
-67350,8318987.56
-109008,8317836.54
-199043,8316603.54
-139969,8316551.54
-22634,8316531.24
-173309,8315750.25
-10887,8315019.36
-42392,8312895.96
-126040,8312623.20
-101590,8304555.42
-46891,8302192.12
-138721,8301745.62
-113715,8301533.20
-78778,8299685.64
-142908,8299447.77
-64419,8297631.80
-21396,8296272.27
-4180,8295646.92
-63534,8295383.67
-135957,8294389.86
-30126,8291920.32
-158427,8288938.00
-14545,8288395.92
-75548,8288287.20
-64473,8286137.44
-149553,8285714.88
-151284,8283526.65
-171091,8282934.36
-194256,8278985.34
-952,8276136.00
-121541,8275390.26
-177664,8275315.20
-51117,8274504.30
-66770,8273407.80
-37238,8272728.06
-46679,8270486.55
-165852,8268312.60
-99458,8266564.47
-114519,8265493.54
-7231,8264881.50
-19033,8264826.56
-125123,8262732.65
-18642,8261578.99
-50386,8261380.05
-193770,8259578.82
-7276,8258101.60
-178045,8253904.15
-49033,8253696.23
-187195,8251334.58
-10590,8249227.40
-143779,8247057.70
-35205,8245675.17
-19729,8245081.60
-144946,8240479.80
-123786,8239581.24
-70843,8237973.20
-112437,8236907.52
-5436,8236039.57
-163754,8235471.16
-115945,8234811.36
-27918,8233957.88
-105712,8233571.86
-41007,8229431.79
-40476,8226640.41
-145620,8221371.60
-7771,8220413.33
-86424,8215572.61
-129137,8215478.40
-76020,8210495.36
-140213,8209831.80
-32379,8208338.88
-130616,8207715.75
-195469,8206609.80
-191805,8205147.75
-90906,8200951.20
-170910,8195558.01
-105399,8193122.63
-123798,8192385.97
-90218,8191689.16
-114766,8189339.54
-11289,8187354.72
-178308,8185750.50
-71271,8185519.24
-1115,8184903.38
-152636,8184530.72
-151619,8182909.05
-116943,8181072.69
-28891,8181051.54
-47049,8180955.00
-158827,8180470.90
-92620,8179671.55
-20814,8176953.54
-179323,8176795.55
-193453,8174343.94
-56888,8173342.00
-28087,8169876.30
-164254,8169632.35
-57661,8168848.16
-7363,8167538.05
-164499,8167512.08
-197557,8165940.45
-5495,8164805.22
-966,8163824.79
-98435,8161771.45
-127227,8161344.92
-194100,8160978.78
-40134,8160358.08
-107341,8159952.05
-6790,8158792.66
-43851,8157101.40
-51295,8156419.20
-69512,8151537.00
-164274,8149869.93
-130854,8145338.85
-186865,8143586.82
-176629,8141411.20
-193739,8141377.77
-6810,8139822.60
-27732,8136724.96
-50616,8134089.82
-123908,8128920.54
-140994,8128470.82
-99039,8128290.78
-62735,8124940.50
-47829,8122796.50
-192635,8122687.57
-192429,8119268.00
-145812,8119165.63
-42896,8118529.80
-146877,8118266.16
-60882,8116095.04
-18254,8114783.04
-165464,8114571.80
-57936,8111927.25
-52226,8110723.32
-128571,8106788.80
-100308,8105837.04
-8872,8102395.62
-58867,8102033.19
-145153,8100222.84
-172088,8098138.20
-59398,8095845.45
-89395,8093576.10
-171961,8093538.00
-88736,8090762.16
-174053,8090350.11
-102237,8089103.22
-43041,8086537.90
-110219,8085296.90
-126738,8084199.20
-44787,8083628.40
-31277,8083580.76
-93595,8082188.80
-189040,8080257.21
-59851,8079024.24
-175100,8077904.01
-43429,8076729.96
-154199,8074940.76
-60963,8073894.40
-8768,8072760.96
-66095,8071421.70
-111552,8068184.48
-24563,8067500.40
-16167,8067495.24
-12662,8067248.85
-94540,8063727.16
-23308,8063463.18
-27390,8062823.25
-130660,8062787.48
-8608,8062411.16
-181552,8062008.30
-199319,8060248.56
-55475,8058850.92
-142711,8057926.58
-103499,8056978.00
-105943,8056698.75
-8432,8053052.16
-149392,8049675.69
-101248,8048855.49
-140962,8047260.70
-87101,8046651.83
-133107,8046476.73
-45126,8045924.40
-87508,8042966.39
-124711,8042722.72
-173169,8042224.41
-175161,8041331.98
-167787,8040075.78
-3242,8038855.53
-114789,8038628.35
-43833,8038545.83
-141198,8035110.72
-137248,8034109.35
-96673,8033491.20
-32180,8032380.72
-166493,8031902.40
-66959,8031839.40
-85628,8029693.44
-110971,8029469.70
-130395,8027463.92
-7757,8026840.37
-178446,8025379.09
-41295,8024785.53
-100956,8024179.30
-131917,8021604.78
-24224,8020463.52
-2073,8020009.64
-121622,8018462.17
-14357,8016906.30
-135601,8016209.44
-58458,8016192.52
-73036,8015799.00
-184722,8015680.31
-151664,8014821.96
-195090,8012680.20
-162609,8011241.00
-83532,8009753.85
-50166,8007137.89
-181562,8006805.96
-175165,8005319.76
-62500,8005316.28
-36342,8004333.40
-128435,8004242.88
-92516,8003836.80
-30802,8003710.88
-107418,8000430.30
-46620,7999778.35
-191803,7994734.15
-106343,7993087.76
-59362,7990397.46
-8329,7990052.90
-75133,7988244.00
-179023,7986829.62
-135899,7985726.64
-5824,7985340.02
-148579,7984889.56
-95888,7984735.72
-9791,7982699.79
-170437,7982370.72
-39782,7977858.24
-20605,7977556.00
-28682,7976960.00
-42172,7973399.00
-56137,7971405.40
-64729,7970769.72
-98643,7968603.73
-153787,7967535.58
-8932,7967222.19
-20134,7965713.28
-197635,7963507.58
-80408,7963312.17
-37728,7961875.68
-26624,7961772.31
-44736,7961144.10
-29763,7960605.03
-36147,7959463.68
-146040,7957587.66
-115469,7957485.14
-142276,7956790.63
-181280,7954037.35
-115096,7953047.55
-109650,7952258.73
-93862,7951992.24
-158325,7950728.30
-55952,7950387.06
-122397,7947106.27
-28114,7946945.72
-11966,7945197.48
-47814,7944083.00
-85096,7943691.06
-51657,7943593.77
-196680,7943578.89
-13141,7942730.34
-193327,7941036.25
-152612,7940663.71
-139680,7939242.36
-31134,7938318.30
-45636,7937240.85
-56694,7936015.95
-8114,7933921.88
-71518,7932261.69
-72922,7930400.64
-146699,7929167.40
-92387,7928972.67
-186289,7928786.19
-95952,7927972.78
-196514,7927180.70
-4403,7925729.04
-2267,7925649.37
-45924,7925047.68
-11493,7916722.23
-104478,7916253.60
-166794,7913842.00
-161995,7910874.27
-23538,7909752.06
-41093,7909579.92
-112073,7908617.57
-92814,7908262.50
-88919,7907992.50
-79753,7907933.88
-108765,7905338.98
-146530,7905336.60
-71475,7903367.58
-36289,7901946.50
-61739,7900794.00
-52338,7898638.08
-194299,7898421.24
-105235,7897829.94
-77207,7897752.72
-96712,7897575.27
-10157,7897046.25
-171154,7896814.50
-79373,7896186.00
-113808,7893353.88
-27901,7892952.00
-128820,7892882.72
-25891,7890511.20
-122819,7888881.02
-154731,7888301.33
-101674,7879324.60
-51968,7879102.21
-72073,7877736.11
-5182,7874521.73
----- TYPES
-BIGINT, decimal
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q12.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q12.test b/testdata/workloads/tpch_nested/queries/tpch-q12.test
deleted file mode 100644
index a49754f..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q12.test
+++ /dev/null
@@ -1,36 +0,0 @@
-====
----- QUERY: TPCH-Q12
-# Q12 - Shipping Mode and Order Priority Query
-select
-  l_shipmode,
-  sum(case
-    when o_orderpriority = '1-URGENT'
-      or o_orderpriority = '2-HIGH'
-    then 1
-    else 0
-  end) as high_line_count,
-  sum(case
-    when o_orderpriority <> '1-URGENT'
-      and o_orderpriority <> '2-HIGH'
-    then 1
-    else 0
-  end) as low_line_count
-from
-  customer.c_orders o,
-  o.o_lineitems l
-where
-  l_shipmode in ('MAIL', 'SHIP')
-  and l_commitdate < l_receiptdate
-  and l_shipdate < l_commitdate
-  and l_receiptdate >= '1994-01-01'
-  and l_receiptdate < '1995-01-01'
-group by
-  l_shipmode
-order by
-  l_shipmode
----- RESULTS
-'MAIL',6202,9324
-'SHIP',6200,9262
----- TYPES
-string, bigint, bigint
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q13.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q13.test b/testdata/workloads/tpch_nested/queries/tpch-q13.test
deleted file mode 100644
index af93fe8..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q13.test
+++ /dev/null
@@ -1,68 +0,0 @@
-====
----- QUERY: TPCH-Q13
-# Q13 - Customer Distribution Query
-select
-  c_count,
-  count(*) as custdist
-from (
-  select
-    c_custkey,
-    count(o_orderkey) as c_count
-  from
-    customer c left outer join c.c_orders on (
-      o_comment not like '%special%requests%'
-    )
-  group by
-    c_custkey
-  ) as c_orders
-group by
-  c_count
-order by
-  custdist desc,
-  c_count desc
----- RESULTS
-0,50005
-9,6641
-10,6532
-11,6014
-8,5937
-12,5639
-13,5024
-19,4793
-7,4687
-17,4587
-18,4529
-20,4516
-15,4505
-14,4446
-16,4273
-21,4190
-22,3623
-6,3265
-23,3225
-24,2742
-25,2086
-5,1948
-26,1612
-27,1179
-4,1007
-28,893
-29,593
-3,415
-30,376
-31,226
-32,148
-2,134
-33,75
-34,50
-35,37
-1,17
-36,14
-38,5
-37,5
-40,4
-41,2
-39,1
----- TYPES
-BIGINT, BIGINT
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q14.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q14.test b/testdata/workloads/tpch_nested/queries/tpch-q14.test
deleted file mode 100644
index b4c66ff..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q14.test
+++ /dev/null
@@ -1,21 +0,0 @@
-====
----- QUERY: TPCH-Q14
-# Q14 - Promotion Effect
-select
-  100.00 * sum(case
-    when p_type like 'PROMO%'
-    then l_extendedprice * (1 - l_discount)
-    else 0.0
-    end) / sum(l_extendedprice * (1 - l_discount)) as promo_revenue
-from
-  customer.c_orders.o_lineitems l,
-  part p
-where
-  l_partkey = p_partkey
-  and l_shipdate >= '1995-09-01'
-  and l_shipdate < '1995-10-01'
----- RESULTS
-16.380778
----- TYPES
-decimal
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q15.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q15.test b/testdata/workloads/tpch_nested/queries/tpch-q15.test
deleted file mode 100644
index 08569ca..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q15.test
+++ /dev/null
@@ -1,38 +0,0 @@
-====
----- QUERY: TPCH-Q15
-# Q15 - Top Supplier Query
-with revenue_view as (
-  select
-    l_suppkey as supplier_no,
-    sum(l_extendedprice * (1 - l_discount)) as total_revenue
-  from
-    customer.c_orders.o_lineitems l
-  where
-    l_shipdate >= '1996-01-01'
-    and l_shipdate < '1996-04-01'
-  group by
-    l_suppkey)
-select
-  s_suppkey,
-  s_name,
-  s_address,
-  s_phone,
-  total_revenue
-from
-  supplier,
-  revenue_view
-where
-  s_suppkey = supplier_no
-  and total_revenue = (
-    select
-      max(total_revenue)
-    from
-      revenue_view
-    )
-order by
-  s_suppkey
----- RESULTS
-8449,'Supplier#000008449','Wp34zim9qYFbVctdW','20-469-856-8873',1772627.2087
----- TYPES
-BIGINT, STRING, STRING, STRING, DECIMAL
-====


[11/12] incubator-impala git commit: IMPALA-5816: xfail wildcard TLS cert tests

Posted by kw...@apache.org.
IMPALA-5816: xfail wildcard TLS cert tests

Wildcard support is not uniform across all platforms that Impala is
tested on. This patch xfails the wildcard tests in test_client_ssl.

A follow-up change will generate certificates on a per-host basis, which
should allow compatible wildcard certs to be generated for all platforms.

Change-Id: I86148739aa1c66c817eed8b727f68cfc08c178ed
Reviewed-on: http://gerrit.cloudera.org:8080/7908
Reviewed-by: Sailesh Mukil <sa...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/c163ac14
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/c163ac14
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/c163ac14

Branch: refs/heads/master
Commit: c163ac1468e4d878c3516ec933c69fb66851af01
Parents: 3a41c21
Author: Henry Robinson <he...@cloudera.com>
Authored: Wed Aug 30 15:17:47 2017 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Thu Aug 31 02:50:16 2017 +0000

----------------------------------------------------------------------
 tests/custom_cluster/test_client_ssl.py | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/c163ac14/tests/custom_cluster/test_client_ssl.py
----------------------------------------------------------------------
diff --git a/tests/custom_cluster/test_client_ssl.py b/tests/custom_cluster/test_client_ssl.py
index 487b802..b9b2096 100644
--- a/tests/custom_cluster/test_client_ssl.py
+++ b/tests/custom_cluster/test_client_ssl.py
@@ -111,10 +111,11 @@ class TestClientSsl(CustomClusterTestSuite):
 
   # Test that the shell can connect to a TLS1.2 only cluster, and for good measure
   # restrict the cipher suite to just one choice.
-  TLS_V12_ARGS = ("--ssl_server_certificate=%s/wildcard-cert.pem "
-                  "--ssl_private_key=%s/wildcard-cert.key "
+  TLS_V12_ARGS = ("--ssl_client_ca_certificate=%s/server-cert.pem "
+                  "--ssl_server_certificate=%s/server-cert.pem "
+                  "--ssl_private_key=%s/server-key.pem "
+                  "--hostname=localhost " # Required to match hostname in certificate"
                   "--ssl_minimum_version=tlsv1.2 "
-                  "--ssl_client_ca_certificate=%s/wildcardCA.pem "
                   "--ssl_cipher_list=AES128-GCM-SHA256 "
                   % (CERT_DIR, CERT_DIR, CERT_DIR))
 
@@ -124,13 +125,14 @@ class TestClientSsl(CustomClusterTestSuite):
                                     catalogd_args=TLS_V12_ARGS)
   @pytest.mark.skipif(HAS_LEGACY_OPENSSL, reason=SKIP_SSL_MSG)
   def test_tls_v12(self, vector):
-    self._validate_positive_cases("%s/wildcardCA.pem" % self.CERT_DIR)
+    self._validate_positive_cases("%s/server-cert.pem" % self.CERT_DIR)
 
   @pytest.mark.execute_serially
   @CustomClusterTestSuite.with_args(impalad_args=SSL_WILDCARD_ARGS,
                                     statestored_args=SSL_WILDCARD_ARGS,
                                     catalogd_args=SSL_WILDCARD_ARGS)
   @pytest.mark.skipif(HAS_LEGACY_OPENSSL, reason=SKIP_SSL_MSG)
+  @pytest.mark.xfail(run=True, reason="Inconsistent wildcard support on target platforms")
   def test_wildcard_ssl(self, vector):
     """ Test for IMPALA-3159: Test with a certificate which has a wildcard for the
     CommonName.
@@ -144,6 +146,7 @@ class TestClientSsl(CustomClusterTestSuite):
                                     statestored_args=SSL_WILDCARD_SAN_ARGS,
                                     catalogd_args=SSL_WILDCARD_SAN_ARGS)
   @pytest.mark.skipif(HAS_LEGACY_OPENSSL, reason=SKIP_SSL_MSG)
+  @pytest.mark.xfail(run=True, reason="Inconsistent wildcard support on target platforms")
   def test_wildcard_san_ssl(self, vector):
     """ Test for IMPALA-3159: Test with a certificate which has a wildcard as a SAN. """
 


[03/12] incubator-impala git commit: IMPALA-5617: Include full workload name in tpch_nested query filenames

Posted by kw...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q16.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q16.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q16.test
new file mode 100644
index 0000000..155e2b1
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q16.test
@@ -0,0 +1,18345 @@
+====
+---- QUERY: TPCH-Q16
+# Q16 - Parts/Supplier Relation Query
+select
+  p_brand,
+  p_type,
+  p_size,
+  count(distinct s_suppkey) as supplier_cnt
+from
+  supplier s,
+  s.s_partsupps ps,
+  part p
+where
+  p_partkey = ps_partkey
+  and p_brand <> 'Brand#45'
+  and p_type not like 'MEDIUM POLISHED%'
+  and p_size in (49, 14, 23, 45, 19, 3, 36, 9)
+  and s_comment not like '%Customer%Complaints%'
+group by
+  p_brand,
+  p_type,
+  p_size
+order by
+  supplier_cnt desc,
+  p_brand,
+  p_type,
+  p_size
+---- RESULTS
+'Brand#41','MEDIUM BRUSHED TIN',3,28
+'Brand#54','STANDARD BRUSHED COPPER',14,27
+'Brand#11','STANDARD BRUSHED TIN',23,24
+'Brand#11','STANDARD BURNISHED BRASS',36,24
+'Brand#15','MEDIUM ANODIZED NICKEL',3,24
+'Brand#15','SMALL ANODIZED BRASS',45,24
+'Brand#15','SMALL BURNISHED NICKEL',19,24
+'Brand#21','MEDIUM ANODIZED COPPER',3,24
+'Brand#22','SMALL BRUSHED NICKEL',3,24
+'Brand#22','SMALL BURNISHED BRASS',19,24
+'Brand#25','MEDIUM BURNISHED COPPER',36,24
+'Brand#31','PROMO POLISHED COPPER',36,24
+'Brand#33','LARGE POLISHED TIN',23,24
+'Brand#33','PROMO POLISHED STEEL',14,24
+'Brand#35','PROMO BRUSHED NICKEL',14,24
+'Brand#41','ECONOMY BRUSHED STEEL',9,24
+'Brand#41','ECONOMY POLISHED TIN',19,24
+'Brand#41','LARGE PLATED COPPER',36,24
+'Brand#42','ECONOMY PLATED BRASS',3,24
+'Brand#42','STANDARD POLISHED TIN',49,24
+'Brand#43','PROMO BRUSHED TIN',3,24
+'Brand#43','SMALL ANODIZED COPPER',36,24
+'Brand#44','STANDARD POLISHED NICKEL',3,24
+'Brand#52','ECONOMY PLATED TIN',14,24
+'Brand#52','STANDARD BURNISHED NICKEL',3,24
+'Brand#53','MEDIUM ANODIZED STEEL',14,24
+'Brand#14','PROMO ANODIZED NICKEL',45,23
+'Brand#32','ECONOMY PLATED BRASS',9,23
+'Brand#52','SMALL ANODIZED COPPER',3,23
+'Brand#11','ECONOMY BRUSHED COPPER',45,20
+'Brand#11','ECONOMY PLATED BRASS',23,20
+'Brand#11','LARGE BRUSHED COPPER',49,20
+'Brand#11','LARGE POLISHED COPPER',49,20
+'Brand#12','STANDARD ANODIZED TIN',49,20
+'Brand#12','STANDARD PLATED BRASS',19,20
+'Brand#13','ECONOMY BRUSHED BRASS',9,20
+'Brand#13','ECONOMY BURNISHED STEEL',14,20
+'Brand#13','LARGE BURNISHED NICKEL',19,20
+'Brand#13','MEDIUM BURNISHED COPPER',36,20
+'Brand#13','SMALL BRUSHED TIN',45,20
+'Brand#13','STANDARD ANODIZED COPPER',3,20
+'Brand#13','STANDARD PLATED NICKEL',23,20
+'Brand#14','ECONOMY ANODIZED COPPER',14,20
+'Brand#14','ECONOMY PLATED TIN',36,20
+'Brand#14','ECONOMY POLISHED NICKEL',3,20
+'Brand#14','MEDIUM ANODIZED NICKEL',3,20
+'Brand#14','SMALL POLISHED TIN',14,20
+'Brand#15','MEDIUM ANODIZED COPPER',9,20
+'Brand#15','MEDIUM PLATED TIN',23,20
+'Brand#15','PROMO PLATED BRASS',14,20
+'Brand#15','SMALL ANODIZED COPPER',45,20
+'Brand#15','SMALL PLATED COPPER',49,20
+'Brand#15','STANDARD PLATED TIN',3,20
+'Brand#21','LARGE ANODIZED COPPER',36,20
+'Brand#21','LARGE BRUSHED TIN',3,20
+'Brand#21','MEDIUM ANODIZED COPPER',14,20
+'Brand#21','PROMO BRUSHED TIN',36,20
+'Brand#21','PROMO POLISHED NICKEL',45,20
+'Brand#21','SMALL ANODIZED COPPER',9,20
+'Brand#21','SMALL POLISHED NICKEL',23,20
+'Brand#22','LARGE ANODIZED COPPER',36,20
+'Brand#22','LARGE BRUSHED COPPER',49,20
+'Brand#22','PROMO ANODIZED TIN',49,20
+'Brand#22','PROMO POLISHED BRASS',45,20
+'Brand#22','SMALL BURNISHED STEEL',45,20
+'Brand#23','MEDIUM ANODIZED STEEL',45,20
+'Brand#23','PROMO POLISHED STEEL',23,20
+'Brand#23','STANDARD BRUSHED TIN',14,20
+'Brand#23','STANDARD PLATED NICKEL',36,20
+'Brand#24','PROMO PLATED COPPER',49,20
+'Brand#24','PROMO PLATED STEEL',49,20
+'Brand#24','PROMO POLISHED STEEL',9,20
+'Brand#24','STANDARD BRUSHED TIN',36,20
+'Brand#25','LARGE ANODIZED BRASS',3,20
+'Brand#25','PROMO BURNISHED TIN',3,20
+'Brand#31','ECONOMY POLISHED NICKEL',3,20
+'Brand#31','MEDIUM PLATED TIN',45,20
+'Brand#31','SMALL ANODIZED STEEL',14,20
+'Brand#32','ECONOMY ANODIZED COPPER',36,20
+'Brand#32','ECONOMY BRUSHED NICKEL',49,20
+'Brand#32','LARGE ANODIZED TIN',19,20
+'Brand#32','MEDIUM BURNISHED COPPER',19,20
+'Brand#32','SMALL ANODIZED STEEL',45,20
+'Brand#33','ECONOMY POLISHED COPPER',19,20
+'Brand#33','PROMO PLATED NICKEL',14,20
+'Brand#33','SMALL POLISHED TIN',9,20
+'Brand#33','STANDARD ANODIZED BRASS',49,20
+'Brand#33','STANDARD BURNISHED BRASS',45,20
+'Brand#34','ECONOMY BRUSHED NICKEL',49,20
+'Brand#34','LARGE BRUSHED BRASS',19,20
+'Brand#34','SMALL BRUSHED TIN',3,20
+'Brand#34','STANDARD PLATED COPPER',9,20
+'Brand#35','LARGE ANODIZED NICKEL',3,20
+'Brand#35','MEDIUM ANODIZED BRASS',45,20
+'Brand#35','MEDIUM ANODIZED STEEL',23,20
+'Brand#35','PROMO ANODIZED COPPER',49,20
+'Brand#35','SMALL POLISHED COPPER',14,20
+'Brand#41','LARGE ANODIZED STEEL',3,20
+'Brand#41','LARGE BRUSHED NICKEL',23,20
+'Brand#41','LARGE BURNISHED COPPER',3,20
+'Brand#41','MEDIUM PLATED STEEL',19,20
+'Brand#41','SMALL BURNISHED COPPER',23,20
+'Brand#42','MEDIUM BURNISHED BRASS',14,20
+'Brand#42','SMALL BURNISHED COPPER',3,20
+'Brand#43','ECONOMY POLISHED COPPER',9,20
+'Brand#43','SMALL PLATED STEEL',3,20
+'Brand#43','STANDARD BURNISHED TIN',23,20
+'Brand#44','LARGE ANODIZED STEEL',23,20
+'Brand#44','PROMO ANODIZED TIN',23,20
+'Brand#51','ECONOMY BRUSHED BRASS',49,20
+'Brand#51','ECONOMY POLISHED NICKEL',9,20
+'Brand#51','MEDIUM BRUSHED TIN',9,20
+'Brand#51','MEDIUM PLATED BRASS',9,20
+'Brand#51','PROMO BURNISHED BRASS',9,20
+'Brand#51','SMALL PLATED NICKEL',49,20
+'Brand#51','STANDARD ANODIZED NICKEL',49,20
+'Brand#51','STANDARD BRUSHED COPPER',3,20
+'Brand#52','ECONOMY ANODIZED BRASS',3,20
+'Brand#52','ECONOMY BRUSHED COPPER',49,20
+'Brand#52','LARGE ANODIZED NICKEL',45,20
+'Brand#52','MEDIUM ANODIZED TIN',23,20
+'Brand#52','MEDIUM BURNISHED TIN',45,20
+'Brand#52','SMALL PLATED COPPER',36,20
+'Brand#52','STANDARD ANODIZED BRASS',45,20
+'Brand#53','ECONOMY PLATED COPPER',45,20
+'Brand#53','PROMO ANODIZED COPPER',49,20
+'Brand#53','PROMO BRUSHED COPPER',23,20
+'Brand#53','PROMO PLATED TIN',19,20
+'Brand#53','PROMO POLISHED NICKEL',3,20
+'Brand#53','SMALL ANODIZED STEEL',9,20
+'Brand#53','SMALL BRUSHED COPPER',3,20
+'Brand#53','SMALL BRUSHED NICKEL',3,20
+'Brand#54','ECONOMY PLATED STEEL',9,20
+'Brand#54','ECONOMY POLISHED TIN',3,20
+'Brand#54','SMALL BRUSHED BRASS',19,20
+'Brand#55','MEDIUM ANODIZED COPPER',3,20
+'Brand#55','PROMO BURNISHED STEEL',14,20
+'Brand#55','PROMO POLISHED NICKEL',49,20
+'Brand#55','STANDARD ANODIZED BRASS',19,20
+'Brand#55','STANDARD BURNISHED COPPER',45,20
+'Brand#43','ECONOMY ANODIZED TIN',3,19
+'Brand#11','ECONOMY ANODIZED BRASS',14,16
+'Brand#11','ECONOMY ANODIZED BRASS',23,16
+'Brand#11','ECONOMY ANODIZED COPPER',14,16
+'Brand#11','ECONOMY BRUSHED BRASS',49,16
+'Brand#11','ECONOMY BRUSHED STEEL',19,16
+'Brand#11','ECONOMY BURNISHED NICKEL',23,16
+'Brand#11','LARGE ANODIZED COPPER',14,16
+'Brand#11','LARGE BRUSHED TIN',45,16
+'Brand#11','LARGE BURNISHED COPPER',23,16
+'Brand#11','LARGE BURNISHED NICKEL',36,16
+'Brand#11','LARGE PLATED STEEL',14,16
+'Brand#11','MEDIUM BRUSHED NICKEL',14,16
+'Brand#11','MEDIUM BRUSHED STEEL',49,16
+'Brand#11','MEDIUM BURNISHED NICKEL',49,16
+'Brand#11','MEDIUM BURNISHED TIN',3,16
+'Brand#11','MEDIUM PLATED COPPER',9,16
+'Brand#11','PROMO ANODIZED BRASS',19,16
+'Brand#11','PROMO ANODIZED BRASS',49,16
+'Brand#11','PROMO ANODIZED STEEL',45,16
+'Brand#11','PROMO PLATED BRASS',45,16
+'Brand#11','SMALL ANODIZED TIN',45,16
+'Brand#11','SMALL BRUSHED STEEL',49,16
+'Brand#11','SMALL BURNISHED COPPER',19,16
+'Brand#11','SMALL BURNISHED COPPER',45,16
+'Brand#11','SMALL BURNISHED NICKEL',14,16
+'Brand#11','SMALL POLISHED NICKEL',36,16
+'Brand#11','STANDARD ANODIZED BRASS',19,16
+'Brand#11','STANDARD ANODIZED COPPER',14,16
+'Brand#11','STANDARD BRUSHED STEEL',45,16
+'Brand#11','STANDARD POLISHED NICKEL',23,16
+'Brand#12','ECONOMY ANODIZED TIN',14,16
+'Brand#12','ECONOMY BRUSHED COPPER',9,16
+'Brand#12','ECONOMY BRUSHED COPPER',36,16
+'Brand#12','ECONOMY BURNISHED BRASS',9,16
+'Brand#12','ECONOMY BURNISHED NICKEL',36,16
+'Brand#12','LARGE ANODIZED BRASS',14,16
+'Brand#12','LARGE ANODIZED COPPER',9,16
+'Brand#12','LARGE ANODIZED STEEL',23,16
+'Brand#12','LARGE BURNISHED TIN',36,16
+'Brand#12','LARGE PLATED COPPER',49,16
+'Brand#12','LARGE POLISHED COPPER',49,16
+'Brand#12','MEDIUM PLATED COPPER',19,16
+'Brand#12','MEDIUM PLATED NICKEL',23,16
+'Brand#12','PROMO ANODIZED BRASS',45,16
+'Brand#12','PROMO ANODIZED STEEL',49,16
+'Brand#12','PROMO BURNISHED STEEL',9,16
+'Brand#12','SMALL BRUSHED NICKEL',36,16
+'Brand#12','SMALL BRUSHED TIN',45,16
+'Brand#12','STANDARD ANODIZED BRASS',3,16
+'Brand#12','STANDARD ANODIZED NICKEL',14,16
+'Brand#12','STANDARD BRUSHED BRASS',3,16
+'Brand#12','STANDARD BRUSHED TIN',9,16
+'Brand#12','STANDARD BRUSHED TIN',36,16
+'Brand#12','STANDARD POLISHED COPPER',9,16
+'Brand#13','ECONOMY ANODIZED STEEL',45,16
+'Brand#13','ECONOMY POLISHED BRASS',3,16
+'Brand#13','LARGE BRUSHED NICKEL',23,16
+'Brand#13','LARGE BURNISHED NICKEL',9,16
+'Brand#13','MEDIUM BRUSHED STEEL',49,16
+'Brand#13','MEDIUM BURNISHED NICKEL',49,16
+'Brand#13','MEDIUM PLATED BRASS',49,16
+'Brand#13','PROMO ANODIZED BRASS',14,16
+'Brand#13','PROMO ANODIZED COPPER',3,16
+'Brand#13','SMALL ANODIZED STEEL',45,16
+'Brand#13','SMALL BURNISHED STEEL',19,16
+'Brand#13','SMALL PLATED BRASS',36,16
+'Brand#13','STANDARD ANODIZED BRASS',23,16
+'Brand#13','STANDARD ANODIZED STEEL',23,16
+'Brand#13','STANDARD BURNISHED BRASS',9,16
+'Brand#13','STANDARD PLATED NICKEL',9,16
+'Brand#13','STANDARD PLATED TIN',23,16
+'Brand#14','ECONOMY BRUSHED STEEL',3,16
+'Brand#14','ECONOMY PLATED NICKEL',9,16
+'Brand#14','ECONOMY PLATED STEEL',9,16
+'Brand#14','ECONOMY POLISHED NICKEL',19,16
+'Brand#14','LARGE ANODIZED COPPER',14,16
+'Brand#14','LARGE BRUSHED NICKEL',19,16
+'Brand#14','LARGE POLISHED STEEL',3,16
+'Brand#14','LARGE POLISHED TIN',23,16
+'Brand#14','MEDIUM BURNISHED COPPER',3,16
+'Brand#14','PROMO ANODIZED STEEL',36,16
+'Brand#14','PROMO PLATED BRASS',9,16
+'Brand#14','PROMO PLATED NICKEL',49,16
+'Brand#14','PROMO POLISHED BRASS',19,16
+'Brand#14','PROMO POLISHED STEEL',19,16
+'Brand#14','PROMO POLISHED TIN',45,16
+'Brand#14','SMALL BRUSHED BRASS',14,16
+'Brand#14','SMALL BURNISHED COPPER',45,16
+'Brand#14','STANDARD BRUSHED TIN',19,16
+'Brand#14','STANDARD PLATED COPPER',45,16
+'Brand#14','STANDARD PLATED TIN',9,16
+'Brand#14','STANDARD POLISHED TIN',49,16
+'Brand#15','ECONOMY BRUSHED STEEL',19,16
+'Brand#15','LARGE BRUSHED BRASS',14,16
+'Brand#15','LARGE BRUSHED STEEL',14,16
+'Brand#15','LARGE BURNISHED NICKEL',3,16
+'Brand#15','LARGE PLATED COPPER',49,16
+'Brand#15','PROMO ANODIZED NICKEL',3,16
+'Brand#15','PROMO BURNISHED TIN',49,16
+'Brand#15','PROMO PLATED STEEL',3,16
+'Brand#15','PROMO POLISHED STEEL',49,16
+'Brand#15','SMALL BRUSHED COPPER',9,16
+'Brand#15','SMALL BRUSHED NICKEL',23,16
+'Brand#15','SMALL PLATED BRASS',49,16
+'Brand#15','STANDARD ANODIZED COPPER',45,16
+'Brand#15','STANDARD BRUSHED COPPER',14,16
+'Brand#15','STANDARD PLATED TIN',36,16
+'Brand#21','ECONOMY ANODIZED STEEL',45,16
+'Brand#21','ECONOMY BRUSHED COPPER',9,16
+'Brand#21','ECONOMY POLISHED STEEL',19,16
+'Brand#21','LARGE ANODIZED STEEL',14,16
+'Brand#21','MEDIUM ANODIZED STEEL',36,16
+'Brand#21','PROMO POLISHED BRASS',14,16
+'Brand#21','PROMO POLISHED TIN',49,16
+'Brand#21','SMALL BRUSHED COPPER',3,16
+'Brand#21','SMALL PLATED STEEL',45,16
+'Brand#21','SMALL PLATED TIN',45,16
+'Brand#21','STANDARD POLISHED STEEL',36,16
+'Brand#22','ECONOMY BRUSHED BRASS',9,16
+'Brand#22','ECONOMY BRUSHED NICKEL',36,16
+'Brand#22','ECONOMY POLISHED TIN',36,16
+'Brand#22','LARGE BRUSHED COPPER',19,16
+'Brand#22','LARGE BRUSHED TIN',36,16
+'Brand#22','LARGE POLISHED COPPER',19,16
+'Brand#22','MEDIUM ANODIZED BRASS',23,16
+'Brand#22','MEDIUM ANODIZED NICKEL',9,16
+'Brand#22','MEDIUM BRUSHED NICKEL',14,16
+'Brand#22','MEDIUM PLATED NICKEL',23,16
+'Brand#22','PROMO ANODIZED TIN',45,16
+'Brand#22','PROMO POLISHED STEEL',49,16
+'Brand#22','SMALL BRUSHED NICKEL',45,16
+'Brand#22','SMALL POLISHED BRASS',36,16
+'Brand#22','SMALL POLISHED STEEL',9,16
+'Brand#22','STANDARD BURNISHED BRASS',45,16
+'Brand#22','STANDARD BURNISHED NICKEL',3,16
+'Brand#22','STANDARD PLATED BRASS',9,16
+'Brand#23','ECONOMY BRUSHED TIN',49,16
+'Brand#23','ECONOMY BURNISHED COPPER',45,16
+'Brand#23','ECONOMY BURNISHED NICKEL',19,16
+'Brand#23','ECONOMY BURNISHED TIN',9,16
+'Brand#23','ECONOMY PLATED BRASS',9,16
+'Brand#23','ECONOMY PLATED COPPER',14,16
+'Brand#23','LARGE ANODIZED STEEL',23,16
+'Brand#23','LARGE ANODIZED STEEL',49,16
+'Brand#23','LARGE BURNISHED COPPER',23,16
+'Brand#23','LARGE POLISHED NICKEL',9,16
+'Brand#23','MEDIUM BRUSHED STEEL',3,16
+'Brand#23','PROMO ANODIZED COPPER',19,16
+'Brand#23','PROMO ANODIZED TIN',3,16
+'Brand#23','PROMO BURNISHED COPPER',14,16
+'Brand#23','PROMO PLATED BRASS',3,16
+'Brand#23','SMALL ANODIZED BRASS',23,16
+'Brand#23','SMALL BRUSHED BRASS',45,16
+'Brand#23','SMALL POLISHED TIN',3,16
+'Brand#23','STANDARD BURNISHED COPPER',19,16
+'Brand#23','STANDARD BURNISHED NICKEL',49,16
+'Brand#23','STANDARD PLATED BRASS',9,16
+'Brand#23','STANDARD PLATED COPPER',45,16
+'Brand#23','STANDARD POLISHED BRASS',9,16
+'Brand#24','ECONOMY ANODIZED BRASS',3,16
+'Brand#24','ECONOMY BRUSHED COPPER',36,16
+'Brand#24','ECONOMY BRUSHED STEEL',14,16
+'Brand#24','ECONOMY POLISHED COPPER',36,16
+'Brand#24','ECONOMY POLISHED NICKEL',3,16
+'Brand#24','LARGE ANODIZED BRASS',23,16
+'Brand#24','LARGE BURNISHED BRASS',45,16
+'Brand#24','LARGE BURNISHED STEEL',14,16
+'Brand#24','LARGE PLATED TIN',9,16
+'Brand#24','MEDIUM BRUSHED NICKEL',49,16
+'Brand#24','MEDIUM BURNISHED STEEL',3,16
+'Brand#24','PROMO BURNISHED COPPER',49,16
+'Brand#24','PROMO BURNISHED STEEL',49,16
+'Brand#24','PROMO POLISHED STEEL',23,16
+'Brand#24','SMALL ANODIZED NICKEL',19,16
+'Brand#24','STANDARD BURNISHED COPPER',19,16
+'Brand#24','STANDARD BURNISHED STEEL',36,16
+'Brand#24','STANDARD PLATED NICKEL',23,16
+'Brand#24','STANDARD PLATED TIN',49,16
+'Brand#25','ECONOMY ANODIZED COPPER',14,16
+'Brand#25','ECONOMY BURNISHED NICKEL',9,16
+'Brand#25','ECONOMY PLATED TIN',14,16
+'Brand#25','ECONOMY POLISHED TIN',45,16
+'Brand#25','LARGE ANODIZED STEEL',9,16
+'Brand#25','LARGE ANODIZED TIN',45,16
+'Brand#25','LARGE BRUSHED NICKEL',36,16
+'Brand#25','LARGE BURNISHED NICKEL',14,16
+'Brand#25','LARGE POLISHED STEEL',19,16
+'Brand#25','MEDIUM BRUSHED COPPER',9,16
+'Brand#25','MEDIUM BURNISHED COPPER',49,16
+'Brand#25','MEDIUM BURNISHED TIN',3,16
+'Brand#25','MEDIUM PLATED STEEL',9,16
+'Brand#25','PROMO ANODIZED BRASS',49,16
+'Brand#25','PROMO ANODIZED STEEL',19,16
+'Brand#25','PROMO ANODIZED TIN',23,16
+'Brand#25','PROMO BURNISHED COPPER',49,16
+'Brand#25','PROMO POLISHED COPPER',14,16
+'Brand#25','SMALL ANODIZED COPPER',23,16
+'Brand#25','SMALL BRUSHED STEEL',23,16
+'Brand#25','SMALL POLISHED COPPER',23,16
+'Brand#25','STANDARD BURNISHED STEEL',23,16
+'Brand#25','STANDARD BURNISHED TIN',3,16
+'Brand#25','STANDARD BURNISHED TIN',36,16
+'Brand#25','STANDARD PLATED BRASS',45,16
+'Brand#25','STANDARD PLATED COPPER',49,16
+'Brand#31','ECONOMY ANODIZED BRASS',45,16
+'Brand#31','ECONOMY BRUSHED COPPER',14,16
+'Brand#31','ECONOMY BRUSHED COPPER',36,16
+'Brand#31','LARGE ANODIZED STEEL',45,16
+'Brand#31','LARGE BURNISHED NICKEL',45,16
+'Brand#31','LARGE PLATED TIN',14,16
+'Brand#31','LARGE POLISHED COPPER',49,16
+'Brand#31','MEDIUM ANODIZED NICKEL',49,16
+'Brand#31','MEDIUM BURNISHED BRASS',19,16
+'Brand#31','PROMO ANODIZED NICKEL',14,16
+'Brand#31','PROMO BRUSHED TIN',45,16
+'Brand#31','PROMO BURNISHED STEEL',36,16
+'Brand#31','SMALL ANODIZED NICKEL',23,16
+'Brand#31','SMALL BRUSHED NICKEL',14,16
+'Brand#31','SMALL BRUSHED TIN',19,16
+'Brand#31','SMALL PLATED NICKEL',23,16
+'Brand#31','SMALL POLISHED BRASS',23,16
+'Brand#31','SMALL POLISHED TIN',14,16
+'Brand#31','SMALL POLISHED TIN',45,16
+'Brand#31','STANDARD BRUSHED COPPER',45,16
+'Brand#31','STANDARD POLISHED STEEL',36,16
+'Brand#32','ECONOMY BRUSHED STEEL',9,16
+'Brand#32','ECONOMY PLATED STEEL',14,16
+'Brand#32','LARGE ANODIZED BRASS',36,16
+'Brand#32','LARGE BURNISHED NICKEL',36,16
+'Brand#32','LARGE PLATED BRASS',36,16
+'Brand#32','LARGE PLATED STEEL',23,16
+'Brand#32','MEDIUM BRUSHED BRASS',49,16
+'Brand#32','MEDIUM BRUSHED TIN',9,16
+'Brand#32','MEDIUM PLATED COPPER',36,16
+'Brand#32','PROMO ANODIZED TIN',36,16
+'Brand#32','PROMO BRUSHED BRASS',9,16
+'Brand#32','PROMO BURNISHED STEEL',36,16
+'Brand#32','PROMO PLATED STEEL',3,16
+'Brand#32','PROMO PLATED TIN',45,16
+'Brand#32','SMALL BURNISHED TIN',49,16
+'Brand#32','SMALL PLATED NICKEL',36,16
+'Brand#32','SMALL POLISHED NICKEL',36,16
+'Brand#32','SMALL POLISHED STEEL',9,16
+'Brand#32','SMALL POLISHED TIN',36,16
+'Brand#32','STANDARD ANODIZED COPPER',14,16
+'Brand#32','STANDARD ANODIZED TIN',9,16
+'Brand#32','STANDARD BURNISHED COPPER',45,16
+'Brand#32','STANDARD BURNISHED COPPER',49,16
+'Brand#32','STANDARD POLISHED BRASS',14,16
+'Brand#32','STANDARD POLISHED STEEL',14,16
+'Brand#33','ECONOMY ANODIZED STEEL',49,16
+'Brand#33','ECONOMY PLATED BRASS',36,16
+'Brand#33','ECONOMY PLATED COPPER',19,16
+'Brand#33','ECONOMY POLISHED NICKEL',19,16
+'Brand#33','LARGE ANODIZED STEEL',45,16
+'Brand#33','LARGE ANODIZED TIN',45,16
+'Brand#33','LARGE BURNISHED COPPER',45,16
+'Brand#33','LARGE POLISHED STEEL',3,16
+'Brand#33','MEDIUM ANODIZED BRASS',23,16
+'Brand#33','MEDIUM ANODIZED NICKEL',3,16
+'Brand#33','MEDIUM ANODIZED TIN',14,16
+'Brand#33','MEDIUM BRUSHED COPPER',49,16
+'Brand#33','MEDIUM BURNISHED COPPER',9,16
+'Brand#33','PROMO BURNISHED BRASS',9,16
+'Brand#33','PROMO BURNISHED BRASS',19,16
+'Brand#33','PROMO PLATED STEEL',49,16
+'Brand#33','SMALL ANODIZED BRASS',36,16
+'Brand#33','SMALL BRUSHED BRASS',3,16
+'Brand#33','SMALL BRUSHED STEEL',9,16
+'Brand#33','SMALL POLISHED BRASS',14,16
+'Brand#33','SMALL POLISHED COPPER',36,16
+'Brand#33','SMALL POLISHED NICKEL',19,16
+'Brand#33','STANDARD ANODIZED BRASS',9,16
+'Brand#33','STANDARD ANODIZED TIN',3,16
+'Brand#33','STANDARD BURNISHED NICKEL',49,16
+'Brand#33','STANDARD PLATED NICKEL',49,16
+'Brand#33','STANDARD POLISHED BRASS',9,16
+'Brand#33','STANDARD POLISHED BRASS',14,16
+'Brand#33','STANDARD POLISHED COPPER',49,16
+'Brand#33','STANDARD POLISHED STEEL',3,16
+'Brand#34','ECONOMY BURNISHED BRASS',14,16
+'Brand#34','ECONOMY POLISHED STEEL',36,16
+'Brand#34','LARGE BRUSHED BRASS',23,16
+'Brand#34','LARGE PLATED BRASS',36,16
+'Brand#34','LARGE PLATED TIN',3,16
+'Brand#34','LARGE POLISHED COPPER',14,16
+'Brand#34','MEDIUM ANODIZED COPPER',36,16
+'Brand#34','MEDIUM BRUSHED STEEL',23,16
+'Brand#34','MEDIUM PLATED NICKEL',23,16
+'Brand#34','PROMO BRUSHED NICKEL',45,16
+'Brand#34','PROMO POLISHED TIN',3,16
+'Brand#34','SMALL ANODIZED NICKEL',14,16
+'Brand#34','SMALL BURNISHED TIN',3,16
+'Brand#34','SMALL POLISHED NICKEL',36,16
+'Brand#34','STANDARD ANODIZED STEEL',9,16
+'Brand#34','STANDARD BURNISHED NICKEL',19,16
+'Brand#34','STANDARD BURNISHED NICKEL',23,16
+'Brand#34','STANDARD POLISHED COPPER',23,16
+'Brand#35','ECONOMY ANODIZED COPPER',36,16
+'Brand#35','ECONOMY BURNISHED NICKEL',19,16
+'Brand#35','ECONOMY BURNISHED TIN',9,16
+'Brand#35','ECONOMY PLATED STEEL',14,16
+'Brand#35','LARGE ANODIZED BRASS',9,16
+'Brand#35','LARGE ANODIZED COPPER',49,16
+'Brand#35','LARGE ANODIZED NICKEL',9,16
+'Brand#35','LARGE BRUSHED TIN',49,16
+'Brand#35','LARGE BURNISHED COPPER',23,16
+'Brand#35','LARGE BURNISHED NICKEL',9,16
+'Brand#35','LARGE BURNISHED STEEL',3,16
+'Brand#35','LARGE PLATED COPPER',19,16
+'Brand#35','MEDIUM BRUSHED STEEL',23,16
+'Brand#35','MEDIUM PLATED NICKEL',23,16
+'Brand#35','PROMO BRUSHED NICKEL',19,16
+'Brand#35','SMALL ANODIZED BRASS',45,16
+'Brand#35','SMALL BRUSHED TIN',49,16
+'Brand#41','ECONOMY ANODIZED STEEL',49,16
+'Brand#41','ECONOMY PLATED STEEL',3,16
+'Brand#41','ECONOMY PLATED TIN',3,16
+'Brand#41','ECONOMY POLISHED STEEL',19,16
+'Brand#41','ECONOMY POLISHED STEEL',45,16
+'Brand#41','LARGE ANODIZED BRASS',36,16
+'Brand#41','LARGE BURNISHED BRASS',23,16
+'Brand#41','LARGE POLISHED BRASS',36,16
+'Brand#41','LARGE POLISHED NICKEL',3,16
+'Brand#41','MEDIUM BURNISHED TIN',3,16
+'Brand#41','MEDIUM PLATED STEEL',3,16
+'Brand#41','PROMO PLATED BRASS',9,16
+'Brand#41','PROMO PLATED STEEL',36,16
+'Brand#41','PROMO POLISHED STEEL',36,16
+'Brand#41','PROMO POLISHED TIN',19,16
+'Brand#41','SMALL ANODIZED COPPER',23,16
+'Brand#41','SMALL ANODIZED STEEL',45,16
+'Brand#41','SMALL BRUSHED NICKEL',45,16
+'Brand#41','SMALL BURNISHED NICKEL',36,16
+'Brand#41','SMALL POLISHED NICKEL',9,16
+'Brand#41','SMALL POLISHED STEEL',45,16
+'Brand#41','SMALL POLISHED TIN',14,16
+'Brand#41','STANDARD BRUSHED NICKEL',45,16
+'Brand#42','ECONOMY BRUSHED STEEL',14,16
+'Brand#42','ECONOMY BURNISHED STEEL',9,16
+'Brand#42','ECONOMY BURNISHED STEEL',45,16
+'Brand#42','LARGE ANODIZED TIN',23,16
+'Brand#42','LARGE BRUSHED STEEL',14,16
+'Brand#42','LARGE BURNISHED NICKEL',19,16
+'Brand#42','LARGE PLATED STEEL',45,16
+'Brand#42','LARGE POLISHED STEEL',14,16
+'Brand#42','MEDIUM ANODIZED STEEL',14,16
+'Brand#42','MEDIUM ANODIZED TIN',19,16
+'Brand#42','MEDIUM BRUSHED COPPER',9,16
+'Brand#42','MEDIUM BRUSHED STEEL',14,16
+'Brand#42','MEDIUM BURNISHED COPPER',49,16
+'Brand#42','MEDIUM BURNISHED NICKEL',23,16
+'Brand#42','MEDIUM BURNISHED TIN',49,16
+'Brand#42','PROMO ANODIZED NICKEL',49,16
+'Brand#42','PROMO ANODIZED STEEL',49,16
+'Brand#42','PROMO BURNISHED TIN',49,16
+'Brand#42','SMALL ANODIZED BRASS',23,16
+'Brand#42','SMALL ANODIZED NICKEL',19,16
+'Brand#42','SMALL ANODIZED TIN',49,16
+'Brand#42','SMALL PLATED COPPER',23,16
+'Brand#42','STANDARD ANODIZED BRASS',9,16
+'Brand#42','STANDARD ANODIZED NICKEL',9,16
+'Brand#42','STANDARD BRUSHED STEEL',49,16
+'Brand#42','STANDARD BRUSHED TIN',45,16
+'Brand#42','STANDARD PLATED TIN',23,16
+'Brand#43','ECONOMY BRUSHED STEEL',23,16
+'Brand#43','ECONOMY PLATED TIN',49,16
+'Brand#43','ECONOMY POLISHED TIN',14,16
+'Brand#43','LARGE BRUSHED COPPER',9,16
+'Brand#43','LARGE BURNISHED STEEL',9,16
+'Brand#43','LARGE PLATED BRASS',14,16
+'Brand#43','LARGE PLATED BRASS',19,16
+'Brand#43','LARGE PLATED NICKEL',45,16
+'Brand#43','MEDIUM ANODIZED COPPER',49,16
+'Brand#43','PROMO BRUSHED BRASS',36,16
+'Brand#43','PROMO BRUSHED STEEL',49,16
+'Brand#43','PROMO PLATED BRASS',45,16
+'Brand#43','SMALL BURNISHED COPPER',19,16
+'Brand#43','SMALL BURNISHED TIN',23,16
+'Brand#43','SMALL BURNISHED TIN',45,16
+'Brand#43','SMALL PLATED COPPER',23,16
+'Brand#43','SMALL POLISHED STEEL',19,16
+'Brand#43','STANDARD ANODIZED TIN',45,16
+'Brand#43','STANDARD PLATED BRASS',3,16
+'Brand#44','ECONOMY ANODIZED BRASS',45,16
+'Brand#44','ECONOMY BRUSHED TIN',45,16
+'Brand#44','ECONOMY PLATED COPPER',23,16
+'Brand#44','ECONOMY PLATED STEEL',3,16
+'Brand#44','LARGE BRUSHED BRASS',9,16
+'Brand#44','LARGE PLATED BRASS',49,16
+'Brand#44','LARGE PLATED STEEL',14,16
+'Brand#44','LARGE POLISHED TIN',19,16
+'Brand#44','MEDIUM ANODIZED NICKEL',9,16
+'Brand#44','MEDIUM ANODIZED TIN',49,16
+'Brand#44','MEDIUM BRUSHED NICKEL',36,16
+'Brand#44','MEDIUM BURNISHED NICKEL',23,16
+'Brand#44','MEDIUM BURNISHED NICKEL',45,16
+'Brand#44','MEDIUM PLATED BRASS',9,16
+'Brand#44','MEDIUM PLATED STEEL',49,16
+'Brand#44','PROMO BURNISHED TIN',3,16
+'Brand#44','SMALL ANODIZED COPPER',9,16
+'Brand#44','SMALL ANODIZED STEEL',14,16
+'Brand#44','SMALL BRUSHED STEEL',19,16
+'Brand#44','SMALL BRUSHED TIN',14,16
+'Brand#44','SMALL BURNISHED STEEL',23,16
+'Brand#44','SMALL PLATED STEEL',19,16
+'Brand#44','STANDARD ANODIZED NICKEL',45,16
+'Brand#44','STANDARD ANODIZED STEEL',19,16
+'Brand#44','STANDARD BRUSHED COPPER',36,16
+'Brand#44','STANDARD PLATED BRASS',49,16
+'Brand#44','STANDARD PLATED NICKEL',45,16
+'Brand#44','STANDARD PLATED STEEL',36,16
+'Brand#51','ECONOMY ANODIZED STEEL',9,16
+'Brand#51','ECONOMY BRUSHED STEEL',23,16
+'Brand#51','ECONOMY PLATED STEEL',9,16
+'Brand#51','LARGE BURNISHED COPPER',14,16
+'Brand#51','LARGE PLATED BRASS',3,16
+'Brand#51','LARGE PLATED BRASS',36,16
+'Brand#51','LARGE PLATED BRASS',49,16
+'Brand#51','LARGE POLISHED BRASS',3,16
+'Brand#51','LARGE POLISHED NICKEL',19,16
+'Brand#51','MEDIUM ANODIZED BRASS',9,16
+'Brand#51','MEDIUM ANODIZED TIN',9,16
+'Brand#51','MEDIUM PLATED BRASS',14,16
+'Brand#51','PROMO BURNISHED NICKEL',14,16
+'Brand#51','PROMO BURNISHED TIN',9,16
+'Brand#51','PROMO PLATED NICKEL',14,16
+'Brand#51','SMALL ANODIZED COPPER',45,16
+'Brand#51','SMALL BURNISHED COPPER',36,16
+'Brand#51','SMALL BURNISHED TIN',9,16
+'Brand#51','STANDARD BURNISHED STEEL',45,16
+'Brand#51','STANDARD BURNISHED TIN',9,16
+'Brand#51','STANDARD PLATED BRASS',36,16
+'Brand#51','STANDARD PLATED STEEL',45,16
+'Brand#52','ECONOMY BRUSHED NICKEL',3,16
+'Brand#52','ECONOMY BURNISHED COPPER',9,16
+'Brand#52','ECONOMY BURNISHED STEEL',14,16
+'Brand#52','LARGE ANODIZED BRASS',23,16
+'Brand#52','LARGE BRUSHED BRASS',14,16
+'Brand#52','LARGE BURNISHED TIN',23,16
+'Brand#52','MEDIUM ANODIZED COPPER',23,16
+'Brand#52','PROMO BRUSHED STEEL',36,16
+'Brand#52','PROMO PLATED COPPER',14,16
+'Brand#52','SMALL PLATED COPPER',3,16
+'Brand#52','STANDARD BRUSHED COPPER',14,16
+'Brand#52','STANDARD BURNISHED BRASS',14,16
+'Brand#52','STANDARD BURNISHED BRASS',19,16
+'Brand#52','STANDARD POLISHED NICKEL',36,16
+'Brand#53','ECONOMY ANODIZED BRASS',19,16
+'Brand#53','LARGE BRUSHED COPPER',14,16
+'Brand#53','LARGE BRUSHED NICKEL',45,16
+'Brand#53','LARGE BURNISHED COPPER',36,16
+'Brand#53','LARGE PLATED COPPER',36,16
+'Brand#53','LARGE PLATED STEEL',36,16
+'Brand#53','LARGE PLATED TIN',14,16
+'Brand#53','LARGE POLISHED BRASS',14,16
+'Brand#53','LARGE POLISHED STEEL',49,16
+'Brand#53','MEDIUM BRUSHED NICKEL',49,16
+'Brand#53','MEDIUM BURNISHED BRASS',3,16
+'Brand#53','MEDIUM BURNISHED COPPER',49,16
+'Brand#53','PROMO ANODIZED COPPER',36,16
+'Brand#53','PROMO ANODIZED NICKEL',3,16
+'Brand#53','PROMO BURNISHED STEEL',9,16
+'Brand#53','PROMO PLATED COPPER',3,16
+'Brand#53','SMALL ANODIZED TIN',9,16
+'Brand#53','STANDARD PLATED BRASS',23,16
+'Brand#54','ECONOMY BRUSHED BRASS',45,16
+'Brand#54','ECONOMY BRUSHED COPPER',14,16
+'Brand#54','LARGE ANODIZED NICKEL',49,16
+'Brand#54','LARGE BURNISHED BRASS',49,16
+'Brand#54','LARGE BURNISHED COPPER',19,16
+'Brand#54','LARGE POLISHED NICKEL',36,16
+'Brand#54','PROMO BURNISHED TIN',19,16
+'Brand#54','PROMO PLATED BRASS',49,16
+'Brand#54','PROMO POLISHED TIN',23,16
+'Brand#54','SMALL ANODIZED COPPER',14,16
+'Brand#54','SMALL BRUSHED COPPER',9,16
+'Brand#54','SMALL PLATED NICKEL',9,16
+'Brand#54','STANDARD ANODIZED COPPER',49,16
+'Brand#54','STANDARD ANODIZED TIN',14,16
+'Brand#54','STANDARD BRUSHED COPPER',45,16
+'Brand#54','STANDARD PLATED COPPER',23,16
+'Brand#54','STANDARD PLATED COPPER',45,16
+'Brand#54','STANDARD POLISHED BRASS',19,16
+'Brand#54','STANDARD POLISHED STEEL',14,16
+'Brand#55','ECONOMY BRUSHED TIN',36,16
+'Brand#55','ECONOMY POLISHED TIN',14,16
+'Brand#55','LARGE PLATED BRASS',9,16
+'Brand#55','LARGE POLISHED STEEL',9,16
+'Brand#55','MEDIUM BURNISHED TIN',36,16
+'Brand#55','PROMO ANODIZED BRASS',14,16
+'Brand#55','PROMO ANODIZED COPPER',14,16
+'Brand#55','SMALL BURNISHED STEEL',9,16
+'Brand#55','STANDARD POLISHED COPPER',19,16
+'Brand#23','PROMO POLISHED COPPER',36,15
+'Brand#33','PROMO POLISHED STEEL',9,15
+'Brand#34','LARGE BURNISHED BRASS',23,15
+'Brand#41','PROMO ANODIZED BRASS',49,15
+'Brand#11','ECONOMY ANODIZED NICKEL',14,12
+'Brand#11','ECONOMY ANODIZED NICKEL',23,12
+'Brand#11','ECONOMY ANODIZED STEEL',36,12
+'Brand#11','ECONOMY ANODIZED TIN',14,12
+'Brand#11','ECONOMY BRUSHED COPPER',14,12
+'Brand#11','ECONOMY BURNISHED BRASS',36,12
+'Brand#11','ECONOMY BURNISHED COPPER',3,12
+'Brand#11','ECONOMY BURNISHED COPPER',49,12
+'Brand#11','ECONOMY PLATED COPPER',3,12
+'Brand#11','ECONOMY PLATED COPPER',19,12
+'Brand#11','ECONOMY PLATED NICKEL',14,12
+'Brand#11','ECONOMY POLISHED COPPER',14,12
+'Brand#11','ECONOMY POLISHED TIN',23,12
+'Brand#11','LARGE ANODIZED NICKEL',9,12
+'Brand#11','LARGE ANODIZED STEEL',23,12
+'Brand#11','LARGE ANODIZED TIN',36,12
+'Brand#11','LARGE BRUSHED BRASS',19,12
+'Brand#11','LARGE BRUSHED STEEL',19,12
+'Brand#11','LARGE BRUSHED STEEL',36,12
+'Brand#11','LARGE BURNISHED BRASS',3,12
+'Brand#11','LARGE PLATED TIN',19,12
+'Brand#11','MEDIUM ANODIZED BRASS',45,12
+'Brand#11','MEDIUM BRUSHED BRASS',3,12
+'Brand#11','MEDIUM BRUSHED BRASS',23,12
+'Brand#11','MEDIUM BRUSHED BRASS',45,12
+'Brand#11','MEDIUM BRUSHED NICKEL',36,12
+'Brand#11','MEDIUM BRUSHED STEEL',19,12
+'Brand#11','MEDIUM BRUSHED STEEL',23,12
+'Brand#11','MEDIUM BURNISHED NICKEL',23,12
+'Brand#11','MEDIUM BURNISHED STEEL',9,12
+'Brand#11','MEDIUM PLATED BRASS',14,12
+'Brand#11','MEDIUM PLATED COPPER',3,12
+'Brand#11','MEDIUM PLATED STEEL',14,12
+'Brand#11','PROMO ANODIZED BRASS',45,12
+'Brand#11','PROMO BRUSHED NICKEL',9,12
+'Brand#11','PROMO BRUSHED STEEL',45,12
+'Brand#11','PROMO BURNISHED BRASS',23,12
+'Brand#11','PROMO BURNISHED COPPER',23,12
+'Brand#11','PROMO BURNISHED NICKEL',36,12
+'Brand#11','PROMO PLATED BRASS',14,12
+'Brand#11','PROMO PLATED COPPER',14,12
+'Brand#11','PROMO PLATED STEEL',49,12
+'Brand#11','PROMO PLATED TIN',3,12
+'Brand#11','PROMO POLISHED COPPER',14,12
+'Brand#11','PROMO POLISHED NICKEL',3,12
+'Brand#11','PROMO POLISHED STEEL',3,12
+'Brand#11','PROMO POLISHED STEEL',23,12
+'Brand#11','PROMO POLISHED TIN',14,12
+'Brand#11','SMALL ANODIZED BRASS',49,12
+'Brand#11','SMALL ANODIZED COPPER',49,12
+'Brand#11','SMALL ANODIZED NICKEL',9,12
+'Brand#11','SMALL ANODIZED STEEL',45,12
+'Brand#11','SMALL BURNISHED BRASS',19,12
+'Brand#11','SMALL BURNISHED BRASS',49,12
+'Brand#11','SMALL BURNISHED NICKEL',9,12
+'Brand#11','SMALL BURNISHED NICKEL',49,12
+'Brand#11','SMALL PLATED COPPER',45,12
+'Brand#11','SMALL PLATED NICKEL',45,12
+'Brand#11','SMALL PLATED TIN',36,12
+'Brand#11','SMALL POLISHED BRASS',14,12
+'Brand#11','SMALL POLISHED BRASS',19,12
+'Brand#11','SMALL POLISHED STEEL',3,12
+'Brand#11','SMALL POLISHED STEEL',36,12
+'Brand#11','STANDARD ANODIZED COPPER',49,12
+'Brand#11','STANDARD BRUSHED COPPER',23,12
+'Brand#11','STANDARD BRUSHED NICKEL',9,12
+'Brand#11','STANDARD BURNISHED BRASS',19,12
+'Brand#11','STANDARD BURNISHED COPPER',9,12
+'Brand#11','STANDARD PLATED STEEL',19,12
+'Brand#11','STANDARD PLATED TIN',45,12
+'Brand#11','STANDARD POLISHED STEEL',9,12
+'Brand#11','STANDARD POLISHED STEEL',19,12
+'Brand#11','STANDARD POLISHED TIN',14,12
+'Brand#12','ECONOMY ANODIZED BRASS',49,12
+'Brand#12','ECONOMY ANODIZED COPPER',14,12
+'Brand#12','ECONOMY ANODIZED NICKEL',19,12
+'Brand#12','ECONOMY ANODIZED NICKEL',45,12
+'Brand#12','ECONOMY BRUSHED BRASS',23,12
+'Brand#12','ECONOMY BRUSHED STEEL',9,12
+'Brand#12','ECONOMY BRUSHED TIN',3,12
+'Brand#12','ECONOMY BRUSHED TIN',19,12
+'Brand#12','ECONOMY BURNISHED BRASS',19,12
+'Brand#12','ECONOMY BURNISHED COPPER',49,12
+'Brand#12','ECONOMY BURNISHED STEEL',9,12
+'Brand#12','ECONOMY BURNISHED STEEL',36,12
+'Brand#12','ECONOMY PLATED BRASS',3,12
+'Brand#12','ECONOMY PLATED NICKEL',9,12
+'Brand#12','ECONOMY PLATED TIN',45,12
+'Brand#12','ECONOMY POLISHED NICKEL',45,12
+'Brand#12','ECONOMY POLISHED STEEL',9,12
+'Brand#12','ECONOMY POLISHED STEEL',19,12
+'Brand#12','ECONOMY POLISHED TIN',14,12
+'Brand#12','LARGE ANODIZED COPPER',19,12
+'Brand#12','LARGE ANODIZED NICKEL',49,12
+'Brand#12','LARGE ANODIZED TIN',49,12
+'Brand#12','LARGE BRUSHED BRASS',9,12
+'Brand#12','LARGE BRUSHED BRASS',23,12
+'Brand#12','LARGE BRUSHED BRASS',49,12
+'Brand#12','LARGE BURNISHED NICKEL',45,12
+'Brand#12','LARGE PLATED BRASS',3,12
+'Brand#12','LARGE POLISHED BRASS',23,12
+'Brand#12','LARGE POLISHED COPPER',19,12
+'Brand#12','MEDIUM ANODIZED BRASS',3,12
+'Brand#12','MEDIUM ANODIZED COPPER',9,12
+'Brand#12','MEDIUM BRUSHED BRASS',14,12
+'Brand#12','MEDIUM BRUSHED BRASS',23,12
+'Brand#12','MEDIUM BRUSHED BRASS',45,12
+'Brand#12','MEDIUM BRUSHED COPPER',23,12
+'Brand#12','MEDIUM BRUSHED NICKEL',14,12
+'Brand#12','MEDIUM BRUSHED TIN',14,12
+'Brand#12','MEDIUM BRUSHED TIN',36,12
+'Brand#12','MEDIUM BURNISHED BRASS',19,12
+'Brand#12','MEDIUM PLATED BRASS',23,12
+'Brand#12','MEDIUM PLATED NICKEL',45,12
+'Brand#12','MEDIUM PLATED STEEL',19,12
+'Brand#12','MEDIUM PLATED TIN',23,12
+'Brand#12','PROMO BRUSHED COPPER',36,12
+'Brand#12','PROMO BRUSHED STEEL',19,12
+'Brand#12','PROMO BRUSHED STEEL',45,12
+'Brand#12','PROMO PLATED COPPER',14,12
+'Brand#12','PROMO PLATED STEEL',19,12
+'Brand#12','PROMO POLISHED COPPER',45,12
+'Brand#12','PROMO POLISHED STEEL',45,12
+'Brand#12','PROMO POLISHED TIN',3,12
+'Brand#12','PROMO POLISHED TIN',14,12
+'Brand#12','SMALL ANODIZED BRASS',9,12
+'Brand#12','SMALL ANODIZED STEEL',14,12
+'Brand#12','SMALL BRUSHED BRASS',36,12
+'Brand#12','SMALL BRUSHED NICKEL',3,12
+'Brand#12','SMALL BRUSHED NICKEL',9,12
+'Brand#12','SMALL BURNISHED BRASS',14,12
+'Brand#12','SMALL BURNISHED BRASS',23,12
+'Brand#12','SMALL BURNISHED TIN',14,12
+'Brand#12','SMALL POLISHED NICKEL',23,12
+'Brand#12','STANDARD ANODIZED COPPER',45,12
+'Brand#12','STANDARD BRUSHED COPPER',3,12
+'Brand#12','STANDARD BRUSHED NICKEL',23,12
+'Brand#12','STANDARD BRUSHED STEEL',3,12
+'Brand#12','STANDARD BRUSHED TIN',45,12
+'Brand#12','STANDARD BURNISHED BRASS',14,12
+'Brand#12','STANDARD BURNISHED COPPER',3,12
+'Brand#12','STANDARD BURNISHED COPPER',45,12
+'Brand#12','STANDARD BURNISHED STEEL',9,12
+'Brand#12','STANDARD BURNISHED TIN',3,12
+'Brand#12','STANDARD PLATED COPPER',49,12
+'Brand#12','STANDARD PLATED NICKEL',19,12
+'Brand#12','STANDARD PLATED NICKEL',45,12
+'Brand#12','STANDARD PLATED STEEL',19,12
+'Brand#12','STANDARD PLATED STEEL',36,12
+'Brand#12','STANDARD POLISHED BRASS',45,12
+'Brand#13','ECONOMY ANODIZED BRASS',36,12
+'Brand#13','ECONOMY ANODIZED BRASS',45,12
+'Brand#13','ECONOMY ANODIZED COPPER',14,12
+'Brand#13','ECONOMY ANODIZED NICKEL',14,12
+'Brand#13','ECONOMY ANODIZED NICKEL',19,12
+'Brand#13','ECONOMY ANODIZED TIN',23,12
+'Brand#13','ECONOMY BRUSHED BRASS',45,12
+'Brand#13','ECONOMY BRUSHED NICKEL',45,12
+'Brand#13','ECONOMY BURNISHED BRASS',3,12
+'Brand#13','ECONOMY BURNISHED COPPER',19,12
+'Brand#13','ECONOMY BURNISHED NICKEL',36,12
+'Brand#13','ECONOMY PLATED COPPER',49,12
+'Brand#13','ECONOMY PLATED NICKEL',3,12
+'Brand#13','ECONOMY PLATED NICKEL',19,12
+'Brand#13','ECONOMY PLATED STEEL',23,12
+'Brand#13','ECONOMY POLISHED STEEL',19,12
+'Brand#13','ECONOMY POLISHED STEEL',36,12
+'Brand#13','LARGE ANODIZED BRASS',49,12
+'Brand#13','LARGE ANODIZED TIN',9,12
+'Brand#13','LARGE ANODIZED TIN',19,12
+'Brand#13','LARGE BRUSHED BRASS',3,12
+'Brand#13','LARGE BRUSHED COPPER',9,12
+'Brand#13','LARGE BRUSHED NICKEL',3,12
+'Brand#13','LARGE BURNISHED COPPER',45,12
+'Brand#13','LARGE PLATED COPPER',23,12
+'Brand#13','LARGE PLATED COPPER',36,12
+'Brand#13','LARGE PLATED NICKEL',23,12
+'Brand#13','LARGE PLATED NICKEL',49,12
+'Brand#13','LARGE PLATED STEEL',14,12
+'Brand#13','LARGE PLATED TIN',9,12
+'Brand#13','LARGE POLISHED BRASS',49,12
+'Brand#13','LARGE POLISHED STEEL',9,12
+'Brand#13','MEDIUM ANODIZED NICKEL',3,12
+'Brand#13','MEDIUM ANODIZED NICKEL',36,12
+'Brand#13','MEDIUM ANODIZED NICKEL',45,12
+'Brand#13','MEDIUM ANODIZED STEEL',9,12
+'Brand#13','MEDIUM ANODIZED STEEL',14,12
+'Brand#13','MEDIUM BRUSHED BRASS',9,12
+'Brand#13','MEDIUM BRUSHED COPPER',3,12
+'Brand#13','MEDIUM BRUSHED COPPER',14,12
+'Brand#13','MEDIUM BRUSHED STEEL',19,12
+'Brand#13','MEDIUM BRUSHED TIN',19,12
+'Brand#13','MEDIUM BURNISHED NICKEL',36,12
+'Brand#13','MEDIUM PLATED BRASS',9,12
+'Brand#13','PROMO ANODIZED COPPER',45,12
+'Brand#13','PROMO BRUSHED NICKEL',23,12
+'Brand#13','PROMO BRUSHED STEEL',45,12
+'Brand#13','PROMO BRUSHED TIN',3,12
+'Brand#13','PROMO BURNISHED BRASS',19,12
+'Brand#13','PROMO BURNISHED COPPER',19,12
+'Brand#13','PROMO BURNISHED NICKEL',3,12
+'Brand#13','PROMO BURNISHED NICKEL',49,12
+'Brand#13','PROMO PLATED COPPER',3,12
+'Brand#13','PROMO PLATED NICKEL',3,12
+'Brand#13','PROMO PLATED STEEL',45,12
+'Brand#13','PROMO POLISHED NICKEL',3,12
+'Brand#13','PROMO POLISHED STEEL',14,12
+'Brand#13','SMALL ANODIZED BRASS',49,12
+'Brand#13','SMALL ANODIZED COPPER',36,12
+'Brand#13','SMALL ANODIZED TIN',9,12
+'Brand#13','SMALL ANODIZED TIN',23,12
+'Brand#13','SMALL BRUSHED COPPER',14,12
+'Brand#13','SMALL BRUSHED COPPER',45,12
+'Brand#13','SMALL BURNISHED NICKEL',3,12
+'Brand#13','SMALL PLATED BRASS',45,12
+'Brand#13','SMALL PLATED NICKEL',45,12
+'Brand#13','SMALL PLATED TIN',14,12
+'Brand#13','SMALL POLISHED BRASS',49,12
+'Brand#13','SMALL POLISHED NICKEL',19,12
+'Brand#13','STANDARD BRUSHED BRASS',14,12
+'Brand#13','STANDARD BRUSHED COPPER',23,12
+'Brand#13','STANDARD BURNISHED COPPER',3,12
+'Brand#13','STANDARD BURNISHED COPPER',23,12
+'Brand#13','STANDARD BURNISHED COPPER',45,12
+'Brand#13','STANDARD BURNISHED STEEL',3,12
+'Brand#13','STANDARD BURNISHED STEEL',19,12
+'Brand#13','STANDARD BURNISHED TIN',23,12
+'Brand#13','STANDARD PLATED BRASS',14,12
+'Brand#13','STANDARD PLATED COPPER',45,12
+'Brand#13','STANDARD PLATED NICKEL',45,12
+'Brand#13','STANDARD PLATED STEEL',9,12
+'Brand#13','STANDARD POLISHED BRASS',19,12
+'Brand#13','STANDARD POLISHED NICKEL',19,12
+'Brand#14','ECONOMY ANODIZED COPPER',9,12
+'Brand#14','ECONOMY ANODIZED NICKEL',49,12
+'Brand#14','ECONOMY ANODIZED STEEL',45,12
+'Brand#14','ECONOMY BRUSHED BRASS',23,12
+'Brand#14','ECONOMY BRUSHED COPPER',19,12
+'Brand#14','ECONOMY BRUSHED COPPER',45,12
+'Brand#14','ECONOMY BRUSHED NICKEL',36,12
+'Brand#14','ECONOMY BRUSHED TIN',14,12
+'Brand#14','ECONOMY BURNISHED COPPER',9,12
+'Brand#14','ECONOMY BURNISHED COPPER',23,12
+'Brand#14','ECONOMY BURNISHED STEEL',9,12
+'Brand#14','ECONOMY BURNISHED STEEL',14,12
+'Brand#14','ECONOMY PLATED BRASS',9,12
+'Brand#14','ECONOMY POLISHED BRASS',19,12
+'Brand#14','ECONOMY POLISHED COPPER',23,12
+'Brand#14','ECONOMY POLISHED STEEL',45,12
+'Brand#14','LARGE ANODIZED COPPER',49,12
+'Brand#14','LARGE ANODIZED NICKEL',23,12
+'Brand#14','LARGE ANODIZED NICKEL',45,12
+'Brand#14','LARGE ANODIZED STEEL',9,12
+'Brand#14','LARGE BRUSHED COPPER',14,12
+'Brand#14','LARGE BRUSHED TIN',3,12
+'Brand#14','LARGE BRUSHED TIN',45,12
+'Brand#14','LARGE BURNISHED COPPER',49,12
+'Brand#14','LARGE PLATED BRASS',19,12
+'Brand#14','LARGE PLATED COPPER',3,12
+'Brand#14','LARGE PLATED NICKEL',36,12
+'Brand#14','MEDIUM ANODIZED STEEL',36,12
+'Brand#14','MEDIUM BRUSHED BRASS',9,12
+'Brand#14','MEDIUM BRUSHED TIN',19,12
+'Brand#14','MEDIUM BURNISHED BRASS',49,12
+'Brand#14','MEDIUM BURNISHED COPPER',14,12
+'Brand#14','MEDIUM BURNISHED NICKEL',36,12
+'Brand#14','MEDIUM BURNISHED STEEL',3,12
+'Brand#14','MEDIUM BURNISHED STEEL',19,12
+'Brand#14','MEDIUM PLATED COPPER',36,12
+'Brand#14','MEDIUM PLATED TIN',49,12
+'Brand#14','PROMO ANODIZED NICKEL',36,12
+'Brand#14','PROMO BRUSHED COPPER',14,12
+'Brand#14','PROMO BURNISHED NICKEL',14,12
+'Brand#14','PROMO PLATED COPPER',45,12
+'Brand#14','PROMO PLATED NICKEL',36,12
+'Brand#14','PROMO PLATED STEEL',9,12
+'Brand#14','PROMO PLATED TIN',19,12
+'Brand#14','PROMO PLATED TIN',45,12
+'Brand#14','PROMO PLATED TIN',49,12
+'Brand#14','PROMO POLISHED BRASS',9,12
+'Brand#14','PROMO POLISHED COPPER',14,12
+'Brand#14','PROMO POLISHED NICKEL',9,12
+'Brand#14','SMALL ANODIZED NICKEL',45,12
+'Brand#14','SMALL ANODIZED TIN',45,12
+'Brand#14','SMALL BRUSHED NICKEL',19,12
+'Brand#14','SMALL BRUSHED TIN',19,12
+'Brand#14','SMALL BURNISHED STEEL',9,12
+'Brand#14','SMALL BURNISHED STEEL',36,12
+'Brand#14','SMALL PLATED BRASS',23,12
+'Brand#14','SMALL PLATED COPPER',9,12
+'Brand#14','SMALL PLATED STEEL',23,12
+'Brand#14','SMALL POLISHED BRASS',3,12
+'Brand#14','SMALL POLISHED BRASS',9,12
+'Brand#14','SMALL POLISHED COPPER',36,12
+'Brand#14','SMALL POLISHED NICKEL',49,12
+'Brand#14','SMALL POLISHED STEEL',14,12
+'Brand#14','SMALL POLISHED TIN',49,12
+'Brand#14','STANDARD ANODIZED STEEL',49,12
+'Brand#14','STANDARD BRUSHED BRASS',3,12
+'Brand#14','STANDARD BRUSHED STEEL',49,12
+'Brand#14','STANDARD BURNISHED BRASS',23,12
+'Brand#14','STANDARD PLATED NICKEL',49,12
+'Brand#14','STANDARD POLISHED COPPER',36,12
+'Brand#14','STANDARD POLISHED COPPER',45,12
+'Brand#15','ECONOMY ANODIZED TIN',19,12
+'Brand#15','ECONOMY BRUSHED NICKEL',14,12
+'Brand#15','ECONOMY BURNISHED STEEL',19,12
+'Brand#15','ECONOMY PLATED NICKEL',9,12
+'Brand#15','ECONOMY PLATED STEEL',3,12
+'Brand#15','ECONOMY PLATED STEEL',19,12
+'Brand#15','ECONOMY PLATED TIN',9,12
+'Brand#15','ECONOMY POLISHED COPPER',36,12
+'Brand#15','ECONOMY POLISHED NICKEL',45,12
+'Brand#15','LARGE ANODIZED BRASS',19,12
+'Brand#15','LARGE ANODIZED STEEL',14,12
+'Brand#15','LARGE ANODIZED TIN',23,12
+'Brand#15','LARGE BRUSHED BRASS',19,12
+'Brand#15','LARGE BRUSHED BRASS',49,12
+'Brand#15','LARGE BURNISHED BRASS',3,12
+'Brand#15','LARGE BURNISHED BRASS',23,12
+'Brand#15','LARGE BURNISHED COPPER',9,12
+'Brand#15','LARGE BURNISHED COPPER',49,12
+'Brand#15','LARGE BURNISHED STEEL',9,12
+'Brand#15','LARGE PLATED BRASS',9,12
+'Brand#15','MEDIUM BRUSHED BRASS',14,12
+'Brand#15','MEDIUM BRUSHED NICKEL',14,12
+'Brand#15','MEDIUM BRUSHED NICKEL',19,12
+'Brand#15','MEDIUM BRUSHED STEEL',36,12
+'Brand#15','MEDIUM BRUSHED TIN',14,12
+'Brand#15','MEDIUM BURNISHED STEEL',3,12
+'Brand#15','MEDIUM PLATED TIN',9,12
+'Brand#15','MEDIUM PLATED TIN',45,12
+'Brand#15','PROMO BRUSHED BRASS',36,12
+'Brand#15','PROMO BRUSHED STEEL',9,12
+'Brand#15','PROMO BURNISHED NICKEL',9,12
+'Brand#15','PROMO PLATED COPPER',36,12
+'Brand#15','PROMO POLISHED BRASS',14,12
+'Brand#15','PROMO POLISHED COPPER',9,12
+'Brand#15','PROMO POLISHED NICKEL',36,12
+'Brand#15','PROMO POLISHED TIN',49,12
+'Brand#15','SMALL ANODIZED STEEL',45,12
+'Brand#15','SMALL BRUSHED BRASS',45,12
+'Brand#15','SMALL BRUSHED COPPER',14,12
+'Brand#15','SMALL BRUSHED COPPER',19,12
+'Brand#15','SMALL BRUSHED NICKEL',36,12
+'Brand#15','SMALL BURNISHED BRASS',3,12
+'Brand#15','SMALL PLATED COPPER',19,12
+'Brand#15','SMALL PLATED COPPER',23,12
+'Brand#15','SMALL PLATED NICKEL',19,12
+'Brand#15','SMALL POLISHED BRASS',45,12
+'Brand#15','SMALL POLISHED NICKEL',19,12
+'Brand#15','SMALL POLISHED NICKEL',23,12
+'Brand#15','SMALL POLISHED TIN',3,12
+'Brand#15','SMALL POLISHED TIN',49,12
+'Brand#15','STANDARD ANODIZED NICKEL',3,12
+'Brand#15','STANDARD ANODIZED STEEL',19,12
+'Brand#15','STANDARD ANODIZED TIN',36,12
+'Brand#15','STANDARD BRUSHED BRASS',49,12
+'Brand#15','STANDARD BRUSHED COPPER',49,12
+'Brand#15','STANDARD BRUSHED NICKEL',3,12
+'Brand#15','STANDARD BRUSHED STEEL',19,12
+'Brand#15','STANDARD BURNISHED BRASS',19,12
+'Brand#15','STANDARD BURNISHED COPPER',14,12
+'Brand#15','STANDARD BURNISHED COPPER',36,12
+'Brand#15','STANDARD BURNISHED TIN',49,12
+'Brand#15','STANDARD PLATED COPPER',14,12
+'Brand#15','STANDARD PLATED STEEL',3,12
+'Brand#15','STANDARD PLATED TIN',9,12
+'Brand#15','STANDARD PLATED TIN',45,12
+'Brand#15','STANDARD POLISHED TIN',14,12
+'Brand#21','ECONOMY ANODIZED STEEL',19,12
+'Brand#21','ECONOMY BRUSHED COPPER',14,12
+'Brand#21','ECONOMY BRUSHED NICKEL',23,12
+'Brand#21','ECONOMY BRUSHED STEEL',45,12
+'Brand#21','ECONOMY BRUSHED TIN',19,12
+'Brand#21','ECONOMY BURNISHED BRASS',19,12
+'Brand#21','ECONOMY BURNISHED COPPER',45,12
+'Brand#21','ECONOMY BURNISHED STEEL',9,12
+'Brand#21','ECONOMY BURNISHED STEEL',14,12
+'Brand#21','ECONOMY BURNISHED TIN',49,12
+'Brand#21','ECONOMY PLATED BRASS',49,12
+'Brand#21','ECONOMY PLATED COPPER',14,12
+'Brand#21','ECONOMY PLATED NICKEL',3,12
+'Brand#21','ECONOMY PLATED STEEL',9,12
+'Brand#21','ECONOMY PLATED TIN',19,12
+'Brand#21','ECONOMY PLATED TIN',23,12
+'Brand#21','ECONOMY POLISHED BRASS',9,12
+'Brand#21','ECONOMY POLISHED STEEL',14,12
+'Brand#21','LARGE ANODIZED COPPER',3,12
+'Brand#21','LARGE ANODIZED TIN',3,12
+'Brand#21','LARGE ANODIZED TIN',14,12
+'Brand#21','LARGE ANODIZED TIN',45,12
+'Brand#21','LARGE BRUSHED COPPER',23,12
+'Brand#21','LARGE BRUSHED NICKEL',36,12
+'Brand#21','LARGE BRUSHED STEEL',23,12
+'Brand#21','LARGE BRUSHED TIN',45,12
+'Brand#21','LARGE BRUSHED TIN',49,12
+'Brand#21','LARGE BURNISHED BRASS',14,12
+'Brand#21','LARGE BURNISHED NICKEL',14,12
+'Brand#21','LARGE BURNISHED STEEL',19,12
+'Brand#21','LARGE PLATED BRASS',14,12
+'Brand#21','LARGE PLATED COPPER',19,12
+'Brand#21','LARGE PLATED COPPER',49,12
+'Brand#21','LARGE POLISHED COPPER',14,12
+'Brand#21','LARGE POLISHED STEEL',45,12
+'Brand#21','MEDIUM ANODIZED NICKEL',3,12
+'Brand#21','MEDIUM ANODIZED STEEL',14,12
+'Brand#21','MEDIUM BRUSHED BRASS',23,12
+'Brand#21','MEDIUM BURNISHED COPPER',49,12
+'Brand#21','MEDIUM BURNISHED NICKEL',9,12
+'Brand#21','MEDIUM BURNISHED TIN',9,12
+'Brand#21','MEDIUM PLATED BRASS',36,12
+'Brand#21','MEDIUM PLATED NICKEL',36,12
+'Brand#21','MEDIUM PLATED STEEL',36,12
+'Brand#21','MEDIUM PLATED TIN',9,12
+'Brand#21','PROMO ANODIZED BRASS',9,12
+'Brand#21','PROMO ANODIZED COPPER',9,12
+'Brand#21','PROMO ANODIZED NICKEL',19,12
+'Brand#21','PROMO ANODIZED STEEL',36,12
+'Brand#21','PROMO ANODIZED TIN',45,12
+'Brand#21','PROMO BRUSHED NICKEL',9,12
+'Brand#21','PROMO BRUSHED STEEL',14,12
+'Brand#21','PROMO BRUSHED STEEL',19,12
+'Brand#21','PROMO BRUSHED STEEL',45,12
+'Brand#21','PROMO BRUSHED TIN',14,12
+'Brand#21','PROMO BURNISHED COPPER',3,12
+'Brand#21','PROMO BURNISHED STEEL',14,12
+'Brand#21','PROMO PLATED BRASS',36,12
+'Brand#21','PROMO PLATED COPPER',49,12
+'Brand#21','PROMO PLATED TIN',45,12
+'Brand#21','PROMO POLISHED COPPER',9,12
+'Brand#21','PROMO POLISHED COPPER',19,12
+'Brand#21','PROMO POLISHED NICKEL',23,12
+'Brand#21','PROMO POLISHED STEEL',3,12
+'Brand#21','PROMO POLISHED STEEL',9,12
+'Brand#21','PROMO POLISHED TIN',9,12
+'Brand#21','PROMO POLISHED TIN',14,12
+'Brand#21','PROMO POLISHED TIN',19,12
+'Brand#21','SMALL BRUSHED NICKEL',9,12
+'Brand#21','SMALL BRUSHED NICKEL',45,12
+'Brand#21','SMALL BRUSHED STEEL',3,12
+'Brand#21','SMALL BRUSHED STEEL',9,12
+'Brand#21','SMALL BRUSHED TIN',14,12
+'Brand#21','SMALL PLATED BRASS',36,12
+'Brand#21','SMALL PLATED COPPER',14,12
+'Brand#21','SMALL PLATED COPPER',23,12
+'Brand#21','SMALL POLISHED NICKEL',9,12
+'Brand#21','SMALL POLISHED STEEL',3,12
+'Brand#21','STANDARD ANODIZED NICKEL',3,12
+'Brand#21','STANDARD ANODIZED NICKEL',19,12
+'Brand#21','STANDARD BRUSHED BRASS',9,12
+'Brand#21','STANDARD BRUSHED NICKEL',23,12
+'Brand#21','STANDARD BRUSHED NICKEL',45,12
+'Brand#21','STANDARD BURNISHED BRASS',49,12
+'Brand#21','STANDARD PLATED COPPER',45,12
+'Brand#21','STANDARD PLATED NICKEL',49,12
+'Brand#21','STANDARD PLATED STEEL',36,12
+'Brand#21','STANDARD PLATED TIN',9,12
+'Brand#21','STANDARD POLISHED COPPER',49,12
+'Brand#22','ECONOMY ANODIZED COPPER',36,12
+'Brand#22','ECONOMY ANODIZED COPPER',45,12
+'Brand#22','ECONOMY ANODIZED NICKEL',45,12
+'Brand#22','ECONOMY ANODIZED STEEL',45,12
+'Brand#22','ECONOMY ANODIZED TIN',49,12
+'Brand#22','ECONOMY BRUSHED STEEL',45,12
+'Brand#22','ECONOMY BRUSHED TIN',49,12
+'Brand#22','ECONOMY BURNISHED BRASS',19,12
+'Brand#22','ECONOMY BURNISHED BRASS',23,12
+'Brand#22','ECONOMY BURNISHED BRASS',45,12
+'Brand#22','ECONOMY BURNISHED COPPER',3,12
+'Brand#22','ECONOMY BURNISHED COPPER',9,12
+'Brand#22','ECONOMY BURNISHED COPPER',49,12
+'Brand#22','ECONOMY BURNISHED NICKEL',14,12
+'Brand#22','ECONOMY BURNISHED NICKEL',23,12
+'Brand#22','ECONOMY BURNISHED STEEL',23,12
+'Brand#22','ECONOMY BURNISHED STEEL',45,12
+'Brand#22','ECONOMY BURNISHED STEEL',49,12
+'Brand#22','ECONOMY BURNISHED TIN',9,12
+'Brand#22','ECONOMY BURNISHED TIN',19,12
+'Brand#22','ECONOMY PLATED BRASS',36,12
+'Brand#22','ECONOMY PLATED COPPER',3,12
+'Brand#22','ECONOMY PLATED STEEL',23,12
+'Brand#22','ECONOMY POLISHED COPPER',14,12
+'Brand#22','ECONOMY POLISHED TIN',49,12
+'Brand#22','LARGE ANODIZED NICKEL',14,12
+'Brand#22','LARGE ANODIZED TIN',14,12
+'Brand#22','LARGE BRUSHED BRASS',9,12
+'Brand#22','LARGE BRUSHED BRASS',49,12
+'Brand#22','LARGE BRUSHED COPPER',14,12
+'Brand#22','LARGE BRUSHED STEEL',19,12
+'Brand#22','LARGE BRUSHED TIN',23,12
+'Brand#22','LARGE BURNISHED BRASS',14,12
+'Brand#22','LARGE BURNISHED TIN',36,12
+'Brand#22','LARGE PLATED STEEL',9,12
+'Brand#22','LARGE PLATED TIN',49,12
+'Brand#22','LARGE POLISHED COPPER',23,12
+'Brand#22','LARGE POLISHED NICKEL',19,12
+'Brand#22','LARGE POLISHED NICKEL',23,12
+'Brand#22','LARGE POLISHED STEEL',3,12
+'Brand#22','MEDIUM ANODIZED COPPER',19,12
+'Brand#22','MEDIUM ANODIZED NICKEL',45,12
+'Brand#22','MEDIUM BRUSHED NICKEL',9,12
+'Brand#22','MEDIUM BRUSHED STEEL',3,12
+'Brand#22','MEDIUM PLATED BRASS',36,12
+'Brand#22','MEDIUM PLATED NICKEL',14,12
+'Brand#22','PROMO ANODIZED COPPER',45,12
+'Brand#22','PROMO ANODIZED STEEL',36,12
+'Brand#22','PROMO BURNISHED BRASS',3,12
+'Brand#22','PROMO BURNISHED BRASS',23,12
+'Brand#22','PROMO BURNISHED STEEL',3,12
+'Brand#22','PROMO PLATED BRASS',14,12
+'Brand#22','PROMO POLISHED BRASS',14,12
+'Brand#22','PROMO POLISHED COPPER',3,12
+'Brand#22','PROMO POLISHED COPPER',23,12
+'Brand#22','PROMO POLISHED NICKEL',19,12
+'Brand#22','PROMO POLISHED NICKEL',36,12
+'Brand#22','PROMO POLISHED STEEL',36,12
+'Brand#22','SMALL ANODIZED COPPER',9,12
+'Brand#22','SMALL ANODIZED STEEL',19,12
+'Brand#22','SMALL ANODIZED TIN',19,12
+'Brand#22','SMALL ANODIZED TIN',49,12
+'Brand#22','SMALL BRUSHED COPPER',36,12
+'Brand#22','SMALL BRUSHED TIN',45,12
+'Brand#22','SMALL BURNISHED COPPER',49,12
+'Brand#22','SMALL BURNISHED NICKEL',9,12
+'Brand#22','SMALL PLATED BRASS',9,12
+'Brand#22','SMALL PLATED COPPER',3,12
+'Brand#22','SMALL POLISHED NICKEL',9,12
+'Brand#22','SMALL POLISHED NICKEL',49,12
+'Brand#22','SMALL POLISHED STEEL',49,12
+'Brand#22','STANDARD ANODIZED BRASS',23,12
+'Brand#22','STANDARD ANODIZED STEEL',49,12
+'Brand#22','STANDARD BRUSHED BRASS',36,12
+'Brand#22','STANDARD BRUSHED TIN',19,12
+'Brand#22','STANDARD BRUSHED TIN',49,12
+'Brand#22','STANDARD BURNISHED TIN',14,12
+'Brand#22','STANDARD PLATED BRASS',45,12
+'Brand#22','STANDARD PLATED COPPER',36,12
+'Brand#22','STANDARD PLATED NICKEL',9,12
+'Brand#22','STANDARD PLATED STEEL',36,12
+'Brand#22','STANDARD PLATED STEEL',49,12
+'Brand#22','STANDARD PLATED TIN',3,12
+'Brand#22','STANDARD PLATED TIN',36,12
+'Brand#22','STANDARD PLATED TIN',49,12
+'Brand#22','STANDARD POLISHED BRASS',19,12
+'Brand#22','STANDARD POLISHED COPPER',9,12
+'Brand#22','STANDARD POLISHED NICKEL',19,12
+'Brand#22','STANDARD POLISHED STEEL',9,12
+'Brand#22','STANDARD POLISHED TIN',45,12
+'Brand#23','ECONOMY ANODIZED BRASS',36,12
+'Brand#23','ECONOMY ANODIZED NICKEL',9,12
+'Brand#23','ECONOMY ANODIZED STEEL',49,12
+'Brand#23','ECONOMY BRUSHED COPPER',3,12
+'Brand#23','ECONOMY BRUSHED COPPER',49,12
+'Brand#23','ECONOMY BRUSHED NICKEL',23,12
+'Brand#23','ECONOMY BURNISHED STEEL',49,12
+'Brand#23','ECONOMY BURNISHED TIN',3,12
+'Brand#23','ECONOMY PLATED STEEL',14,12
+'Brand#23','ECONOMY PLATED TIN',49,12
+'Brand#23','ECONOMY POLISHED COPPER',23,12
+'Brand#23','ECONOMY POLISHED NICKEL',36,12
+'Brand#23','ECONOMY POLISHED TIN',3,12
+'Brand#23','LARGE ANODIZED TIN',14,12
+'Brand#23','LARGE BURNISHED STEEL',23,12
+'Brand#23','LARGE BURNISHED TIN',19,12
+'Brand#23','LARGE PLATED COPPER',14,12
+'Brand#23','LARGE PLATED STEEL',9,12
+'Brand#23','LARGE POLISHED BRASS',19,12
+'Brand#23','LARGE POLISHED COPPER',45,12
+'Brand#23','LARGE POLISHED COPPER',49,12
+'Brand#23','LARGE POLISHED TIN',3,12
+'Brand#23','MEDIUM BRUSHED BRASS',9,12
+'Brand#23','MEDIUM BRUSHED COPPER',3,12
+'Brand#23','MEDIUM BRUSHED NICKEL',23,12
+'Brand#23','MEDIUM BRUSHED NICKEL',36,12
+'Brand#23','MEDIUM BURNISHED COPPER',9,12
+'Brand#23','MEDIUM BURNISHED COPPER',19,12
+'Brand#23','MEDIUM PLATED COPPER',19,12
+'Brand#23','MEDIUM PLATED STEEL',14,12
+'Brand#23','PROMO ANODIZED BRASS',9,12
+'Brand#23','PROMO ANODIZED BRASS',19,12
+'Brand#23','PROMO ANODIZED NICKEL',3,12
+'Brand#23','PROMO ANODIZED STEEL',36,12
+'Brand#23','PROMO BRUSHED COPPER',36,12
+'Brand#23','PROMO BURNISHED BRASS',9,12
+'Brand#23','PROMO BURNISHED STEEL',9,12
+'Brand#23','PROMO BURNISHED TIN',3,12
+'Brand#23','PROMO BURNISHED TIN',45,12
+'Brand#23','PROMO PLATED BRASS',19,12
+'Brand#23','PROMO PLATED BRASS',23,12
+'Brand#23','PROMO PLATED BRASS',49,12
+'Brand#23','PROMO PLATED NICKEL',3,12
+'Brand#23','PROMO PLATED TIN',14,12
+'Brand#23','PROMO POLISHED TIN',45,12
+'Brand#23','SMALL ANODIZED STEEL',3,12
+'Brand#23','SMALL ANODIZED TIN',45,12
+'Brand#23','SMALL BRUSHED BRASS',19,12
+'Brand#23','SMALL BRUSHED STEEL',3,12
+'Brand#23','SMALL BURNISHED BRASS',14,12
+'Brand#23','SMALL BURNISHED COPPER',36,12
+'Brand#23','SMALL BURNISHED STEEL',45,12
+'Brand#23','SMALL PLATED BRASS',49,12
+'Brand#23','SMALL PLATED STEEL',23,12
+'Brand#23','SMALL PLATED TIN',14,12
+'Brand#23','SMALL POLISHED COPPER',49,12
+'Brand#23','SMALL POLISHED TIN',23,12
+'Brand#23','STANDARD ANODIZED BRASS',23,12
+'Brand#23','STANDARD ANODIZED TIN',3,12
+'Brand#23','STANDARD ANODIZED TIN',45,12
+'Brand#23','STANDARD BRUSHED BRASS',3,12
+'Brand#23','STANDARD BRUSHED STEEL',9,12
+'Brand#23','STANDARD BRUSHED TIN',19,12
+'Brand#23','STANDARD PLATED BRASS',3,12
+'Brand#23','STANDARD PLATED NICKEL',49,12
+'Brand#23','STANDARD PLATED TIN',9,12
+'Brand#23','STANDARD PLATED TIN',19,12
+'Brand#23','STANDARD POLISHED STEEL',23,12
+'Brand#23','STANDARD POLISHED TIN',23,12
+'Brand#24','ECONOMY ANODIZED BRASS',19,12
+'Brand#24','ECONOMY ANODIZED COPPER',36,12
+'Brand#24','ECONOMY ANODIZED COPPER',49,12
+'Brand#24','ECONOMY ANODIZED NICKEL',3,12
+'Brand#24','ECONOMY ANODIZED STEEL',23,12
+'Brand#24','ECONOMY ANODIZED STEEL',45,12
+'Brand#24','ECONOMY BRUSHED STEEL',9,12
+'Brand#24','ECONOMY BRUSHED TIN',49,12
+'Brand#24','ECONOMY BURNISHED BRASS',14,12
+'Brand#24','ECONOMY BURNISHED COPPER',3,12
+'Brand#24','ECONOMY BURNISHED COPPER',19,12
+'Brand#24','ECONOMY BURNISHED STEEL',45,12
+'Brand#24','ECONOMY PLATED COPPER',49,12
+'Brand#24','ECONOMY PLATED STEEL',45,12
+'Brand#24','ECONOMY POLISHED BRASS',23,12
+'Brand#24','ECONOMY POLISHED STEEL',14,12
+'Brand#24','ECONOMY POLISHED TIN',14,12
+'Brand#24','ECONOMY POLISHED TIN',45,12
+'Brand#24','ECONOMY POLISHED TIN',49,12
+'Brand#24','LARGE ANODIZED BRASS',3,12
+'Brand#24','LARGE ANODIZED BRASS',45,12
+'Brand#24','LARGE BRUSHED BRASS',14,12
+'Brand#24','LARGE BRUSHED BRASS',45,12
+'Brand#24','LARGE BRUSHED STEEL',23,12
+'Brand#24','LARGE BRUSHED STEEL',45,12
+'Brand#24','LARGE BURNISHED STEEL',3,12
+'Brand#24','LARGE BURNISHED TIN',23,12
+'Brand#24','LARGE PLATED COPPER',23,12
+'Brand#24','LARGE PLATED STEEL',3,12
+'Brand#24','LARGE POLISHED COPPER',9,12
+'Brand#24','LARGE POLISHED TIN',14,12
+'Brand#24','MEDIUM ANODIZED BRASS',14,12
+'Brand#24','MEDIUM BRUSHED NICKEL',9,12
+'Brand#24','MEDIUM BRUSHED NICKEL',36,12
+'Brand#24','MEDIUM BRUSHED STEEL',23,12
+'Brand#24','MEDIUM BRUSHED STEEL',49,12
+'Brand#24','MEDIUM BURNISHED BRASS',36,12
+'Brand#24','MEDIUM BURNISHED STEEL',49,12
+'Brand#24','MEDIUM BURNISHED TIN',23,12
+'Brand#24','MEDIUM PLATED BRASS',3,12
+'Brand#24','MEDIUM PLATED NICKEL',36,12
+'Brand#24','PROMO ANODIZED NICKEL',19,12
+'Brand#24','PROMO ANODIZED NICKEL',45,12
+'Brand#24','PROMO ANODIZED TIN',14,12
+'Brand#24','PROMO BRUSHED COPPER',23,12
+'Brand#24','PROMO BRUSHED COPPER',49,12
+'Brand#24','PROMO BRUSHED NICKEL',3,12
+'Brand#24','PROMO BURNISHED BRASS',36,12
+'Brand#24','PROMO BURNISHED STEEL',14,12
+'Brand#24','PROMO BURNISHED TIN',14,12
+'Brand#24','PROMO PLATED STEEL',3,12
+'Brand#24','PROMO POLISHED BRASS',3,12
+'Brand#24','PROMO POLISHED BRASS',14,12
+'Brand#24','PROMO POLISHED COPPER',45,12
+'Brand#24','SMALL ANODIZED COPPER',3,12
+'Brand#24','SMALL ANODIZED NICKEL',23,12
+'Brand#24','SMALL BRUSHED BRASS',45,12
+'Brand#24','SMALL BRUSHED COPPER',9,12
+'Brand#24','SMALL BRUSHED NICKEL',49,12
+'Brand#24','SMALL BURNISHED BRASS',3,12
+'Brand#24','SMALL BURNISHED BRASS',14,12
+'Brand#24','SMALL BURNISHED COPPER',19,12
+'Brand#24','SMALL BURNISHED NICKEL',9,12
+'Brand#24','SMALL PLATED BRASS',3,12
+'Brand#24','SMALL PLATED BRASS',14,12
+'Brand#24','SMALL PLATED NICKEL',14,12
+'Brand#24','SMALL POLISHED BRASS',3,12
+'Brand#24','SMALL POLISHED NICKEL',19,12
+'Brand#24','SMALL POLISHED TIN',9,12
+'Brand#24','STANDARD ANODIZED TIN',49,12
+'Brand#24','STANDARD BRUSHED BRASS',14,12
+'Brand#24','STANDARD BRUSHED BRASS',23,12
+'Brand#24','STANDARD BRUSHED NICKEL',19,12
+'Brand#24','STANDARD BRUSHED STEEL',23,12
+'Brand#24','STANDARD PLATED BRASS',36,12
+'Brand#24','STANDARD PLATED COPPER',49,12
+'Brand#24','STANDARD PLATED NICKEL',36,12
+'Brand#24','STANDARD POLISHED BRASS',9,12
+'Brand#24','STANDARD POLISHED COPPER',9,12
+'Brand#25','ECONOMY ANODIZED STEEL',14,12
+'Brand#25','ECONOMY ANODIZED STEEL',45,12
+'Brand#25','ECONOMY BRUSHED NICKEL',9,12
+'Brand#25','ECONOMY BRUSHED STEEL',3,12
+'Brand#25','ECONOMY BRUSHED TIN',14,12
+'Brand#25','ECONOMY PLATED COPPER',3,12
+'Brand#25','ECONOMY PLATED NICKEL',19,12
+'Brand#25','ECONOMY PLATED STEEL',9,12
+'Brand#25','ECONOMY POLISHED BRASS',3,12
+'Brand#25','ECONOMY POLISHED BRASS',9,12
+'Brand#25','ECONOMY POLISHED NICKEL',3,12
+'Brand#25','LARGE ANODIZED BRASS',14,12
+'Brand#25','LARGE ANODIZED BRASS',23,12
+'Brand#25','LARGE ANODIZED COPPER',19,12
+'Brand#25','LARGE ANODIZED COPPER',36,12
+'Brand#25','LARGE BRUSHED BRASS',19,12
+'Brand#25','LARGE BRUSHED NICKEL',49,12
+'Brand#25','LARGE BRUSHED STEEL',36,12
+'Brand#25','LARGE BRUSHED TIN',3,12
+'Brand#25','LARGE BRUSHED TIN',9,12
+'Brand#25','LARGE BURNISHED BRASS',23,12
+'Brand#25','LARGE BURNISHED STEEL',36,12
+'Brand#25','LARGE BURNISHED TIN',14,12
+'Brand#25','LARGE BURNISHED TIN',36,12
+'Brand#25','LARGE PLATED NICKEL',45,12
+'Brand#25','LARGE PLATED TIN',23,12
+'Brand#25','MEDIUM ANODIZED BRASS',3,12
+'Brand#25','MEDIUM ANODIZED BRASS',9,12
+'Brand#25','MEDIUM ANODIZED BRASS',14,12
+'Brand#25','MEDIUM ANODIZED BRASS',19,12
+'Brand#25','MEDIUM ANODIZED STEEL',36,12
+'Brand#25','MEDIUM ANODIZED TIN',3,12
+'Brand#25','MEDIUM BRUSHED BRASS',14,12
+'Brand#25','MEDIUM BRUSHED BRASS',49,12
+'Brand#25','MEDIUM BRUSHED TIN',9,12
+'Brand#25','MEDIUM BRUSHED TIN',49,12
+'Brand#25','MEDIUM BURNISHED STEEL',36,12
+'Brand#25','MEDIUM PLATED COPPER',14,12
+'Brand#25','MEDIUM PLATED COPPER',23,12
+'Brand#25','MEDIUM PLATED STEEL',36,12
+'Brand#25','MEDIUM PLATED TIN',14,12
+'Brand#25','PROMO ANODIZED COPPER',3,12
+'Brand#25','PROMO ANODIZED NICKEL',23,12
+'Brand#25','PROMO ANODIZED TIN',36,12
+'Brand#25','PROMO BURNISHED COPPER',19,12
+'Brand#25','PROMO BURNISHED COPPER',36,12
+'Brand#25','PROMO BURNISHED COPPER',45,12
+'Brand#25','PROMO BURNISHED STEEL',9,12
+'Brand#25','PROMO PLATED BRASS',9,12
+'Brand#25','PROMO POLISHED BRASS',3,12
+'Brand#25','PROMO POLISHED BRASS',49,12
+'Brand#25','PROMO POLISHED NICKEL',36,12
+'Brand#25','PROMO POLISHED STEEL',45,12
+'Brand#25','SMALL ANODIZED COPPER',45,12
+'Brand#25','SMALL ANODIZED TIN',14,12
+'Brand#25','SMALL BRUSHED COPPER',14,12
+'Brand#25','SMALL BURNISHED BRASS',3,12
+'Brand#25','SMALL BURNISHED NICKEL',45,12
+'Brand#25','SMALL BURNISHED STEEL',14,12
+'Brand#25','SMALL PLATED BRASS',19,12
+'Brand#25','SMALL PLATED BRASS',49,12
+'Brand#25','SMALL PLATED COPPER',23,12
+'Brand#25','SMALL PLATED TIN',3,12
+'Brand#25','SMALL POLISHED COPPER',9,12
+'Brand#25','STANDARD BRUSHED TIN',45,12
+'Brand#25','STANDARD BURNISHED BRASS',3,12
+'Brand#25','STANDARD BURNISHED BRASS',14,12
+'Brand#25','STANDARD BURNISHED NICKEL',36,12
+'Brand#25','STANDARD PLATED COPPER',9,12
+'Brand#25','STANDARD PLATED COPPER',23,12
+'Brand#25','STANDARD PLATED NICKEL',36,12
+'Brand#25','STANDARD PLATED NICKEL',49,12
+'Brand#25','STANDARD PLATED TIN',36,12
+'Brand#25','STANDARD POLISHED COPPER',23,12
+'Brand#25','STANDARD POLISHED NICKEL',45,12
+'Brand#25','STANDARD POLISHED TIN',3,12
+'Brand#31','ECONOMY ANODIZED BRASS',19,12
+'Brand#31','ECONOMY ANODIZED TIN',36,12
+'Brand#31','ECONOMY BRUSHED NICKEL',14,12
+'Brand#31','ECONOMY BURNISHED COPPER',14,12
+'Brand#31','ECONOMY BURNISHED NICKEL',19,12
+'Brand#31','ECONOMY PLATED NICKEL',9,12
+'Brand#31','ECONOMY POLISHED COPPER',3,12
+'Brand#31','ECONOMY POLISHED TIN',36,12
+'Brand#31','LARGE ANODIZED COPPER',3,12
+'Brand#31','LARGE ANODIZED COPPER',14,12
+'Brand#31','LARGE ANODIZED STEEL',36,12
+'Brand#31','LARGE ANODIZED TIN',3,12
+'Brand#31','LARGE BRUSHED BRASS',36,12
+'Brand#31','LARGE BRUSHED NICKEL',19,12
+'Brand#31','LARGE BRUSHED STEEL',36,12
+'Brand#31','LARGE BRUSHED TIN',14,12
+'Brand#31','LARGE BURNISHED BRASS',36,12
+'Brand#31','LARGE BURNISHED NICKEL',14,12
+'Brand#31','LARGE PLATED STEEL',23,12
+'Brand#31','LARGE POLISHED BRASS',9,12
+'Brand#31','LARGE POLISHED STEEL',45,12
+'Brand#31','MEDIUM ANODIZED STEEL',14,12
+'Brand#31','MEDIUM ANODIZED TIN',9,12
+'Brand#31','MEDIUM ANODIZED TIN',23,12
+'Brand#31','MEDIUM BRUSHED BRASS',23,12
+'Brand#31','MEDIUM BRUSHED STEEL',3,12
+'Brand#31','MEDIUM BURNISHED BRASS',14,12
+'Brand#31','MEDIUM BURNISHED STEEL',9,12
+'Brand#31','PROMO ANODIZED COPPER',14,12
+'Brand#31','PROMO ANODIZED TIN',36,12
+'Brand#31','PROMO BRUSHED BRASS',3,12
+'Brand#31','PROMO BRUSHED COPPER',23,12
+'Brand#31','PROMO BRUSHED STEEL',23,12
+'Brand#31','PROMO BURNISHED BRASS',49,12
+'Brand#31','PROMO BURNISHED STEEL',3,12
+'Brand#31','PROMO PLATED BRASS',36,12
+'Brand#31','PROMO POLISHED NICKEL',49,12
+'Brand#31','SMALL ANODIZED COPPER',3,12
+'Brand#31','SMALL ANODIZED NICKEL',9,12
+'Brand#31','SMALL ANODIZED TIN',3,12
+'Brand#31','SMALL BRUSHED COPPER',14,12
+'Brand#31','SMALL BRUSHED COPPER',19,12
+'Brand#31','SMALL BRUSHED NICKEL',3,12
+'Brand#31','SMALL BRUSHED NICKEL',23,12
+'Brand#31','SMALL BRUSHED NICKEL',36,12
+'Brand#31','SMALL BURNISHED BRASS',3,12
+'Brand#31','SMALL BURNISHED NICKEL',9,12
+'Brand#31','SMALL BURNISHED TIN',23,12
+'Brand#31','SMALL PLATED STEEL',19,12
+'Brand#31','SMALL PLATED STEEL',23,12
+'Brand#31','SMALL POLISHED STEEL',3,12
+'Brand#31','STANDARD ANODIZED BRASS',45,12
+'Brand#31','STANDARD ANODIZED NICKEL',3,12
+'Brand#31','STANDARD BRUSHED COPPER',3,12
+'Brand#31','STANDARD BURNISHED STEEL',45,12
+'Brand#31','STANDARD PLATED BRASS',3,12
+'Brand#31','STANDARD PLATED BRASS',19,12
+'Brand#31','STANDARD PLATED STEEL',19,12
+'Brand#31','STANDARD POLISHED BRASS',23,12
+'Brand#31','STANDARD POLISHED COPPER',45,12
+'Brand#32','ECONOMY ANODIZED BRASS',14,12
+'Brand#32','ECONOMY ANODIZED STEEL',23,12
+'Brand#32','ECONOMY ANODIZED STEEL',49,12
+'Brand#32','ECONOMY ANODIZED TIN',23,12
+'Brand#32','ECONOMY BRUSHED NICKEL',3,12
+'Brand#32','ECONOMY BRUSHED STEEL',36,12
+'Brand#32','ECONOMY BRUSHED TIN',19,12
+'Brand#32','ECONOMY BURNISHED TIN',19,12
+'Brand#32','ECONOMY PLATED BRASS',19,12
+'Brand#32','ECONOMY PLATED NICKEL',23,12
+'Brand#32','ECONOMY PLATED TIN',45,12
+'Brand#32','LARGE ANODIZED NICKEL',3,12
+'Brand#32','LARGE ANODIZED STEEL',14,12
+'Brand#32','LARGE BRUSHED BRASS',45,12
+'Brand#32','LARGE BRUSHED NICKEL',3,12
+'Brand#32','LARGE BRUSHED STEEL',45,12
+'Brand#32','LARGE BRUSHED TIN',19,12
+'Brand#32','LARGE PLATED BRASS',3,12
+'Brand#32','LARGE PLATED BRASS',9,12
+'Brand#32','LARGE POLISHED COPPER',19,12
+'Brand#32','LARGE POLISHED NICKEL',3,12
+'Brand#32','MEDIUM ANODIZED COPPER',45,12
+'Brand#32','MEDIUM ANODIZED STEEL',19,12
+'Brand#32','MEDIUM ANODIZED STEEL',49,12
+'Brand#32','MEDIUM ANODIZED TIN',45,12
+'Brand#32','MEDIUM ANODIZED TIN',49,12
+'Brand#32','MEDIUM BURNISHED BRASS',23,12
+'Brand#32','MEDIUM BURNISHED NICKEL',23,12
+'Brand#32','MEDIUM PLATED BRASS',49,12
+'Brand#32','MEDIUM PLATED TIN',3,12
+'Brand#32','PROMO ANODIZED NICKEL',49,12
+'Brand#32','PROMO BRUSHED COPPER',45,12
+'Brand#32','PROMO BRUSHED STEEL',23,12
+'Brand#32','PROMO BRUSHED STEEL',49,12
+'Brand#32','PROMO BRUSHED TIN',14,12
+'Brand#32','PROMO BRUSHED TIN',36,12
+'Brand#32','PROMO BURNISHED NICKEL',45,12
+'Brand#32','PROMO BURNISHED TIN',49,12
+'Brand#32','PROMO PLATED COPPER',49,12
+'Brand#32','PROMO PLATED STEEL',49,12
+'Brand#32','PROMO POLISHED STEEL',49,12
+'Brand#32','PROMO POLISHED TIN',19,12
+'Brand#32','PROMO POLISHED TIN',23,12
+'Brand#32','PROMO POLISHED TIN',45,12
+'Brand#32','SMALL ANODIZED NICKEL',9,12
+'Brand#32','SMALL BRUSHED TIN',3,12
+'Brand#32','SMALL BRUSHED TIN',9,12
+'Brand#32','SMALL BURNISHED TIN',23,12
+'Brand#32','SMALL BURNISHED TIN',36,12
+'Brand#32','SMALL PLATED BRASS',36,12
+'Brand#32','SMALL PLATED COPPER',14,12
+'Brand#32','SMALL PLATED COPPER',45,12
+'Brand#32','SMALL PLATED STEEL',36,12
+'Brand#32','SMALL PLATED TIN',14,12
+'Brand#32','SMALL POLISHED NICKEL',45,12
+'Brand#32','SMALL POLISHED STEEL',23,12
+'Brand#32','SMALL POLISHED STEEL',36,12
+'Brand#32','STANDARD ANODIZED NICKEL',9,12
+'Brand#32','STANDARD ANODIZED STEEL',3,12
+'Brand#32','STANDARD ANODIZED TIN',14,12
+'Brand#32','STANDARD ANODIZED TIN',19,12
+'Brand#32','STANDARD BRUSHED BRASS',14,12
+'Brand#32','STANDARD BRUSHED STEEL',14,12
+'Brand#32','STANDARD BRUSHED TIN',9,12
+'Brand#32','STANDARD BURNISHED BRASS',45,12
+'Brand#32','STANDARD BURNISHED COPPER',3,12
+'Brand#32','STANDARD BURNISHED NICKEL',3,12
+'Brand#32','STANDARD PLATED STEEL',9,12
+'Brand#32','STANDARD PLATED STEEL',49,12
+'Brand#32','STANDARD POLISHED COPPER',36,12
+'Brand#33','ECONOMY ANODIZED NICKEL',36,12
+'Brand#33','ECONOMY ANODIZED STEEL',23,12
+'Brand#33','ECONOMY ANODIZED STEEL',45,12
+'Brand#33','ECONOMY BURNISHED NICKEL',14,12
+'Brand#33','ECONOMY BURNISHED TIN',45,12
+'Brand#33','ECONOMY PLATED STEEL',3,12
+'Brand#33','ECONOMY PLATED TIN',3,12
+'Brand#33','ECONOMY PLATED TIN',9,12
+'Brand#33','ECONOMY POLISHED BRASS',3,12
+'Brand#33','ECONOMY POLISHED BRASS',14,12
+'Brand#33','LARGE ANODIZED BRASS',3,12
+'Brand#33','LARGE ANODIZED BRASS',36,12
+'Brand#33','LARGE ANODIZED NICKEL',23,12
+'Brand#33','LARGE ANODIZED STEEL',3,12
+'Brand#33','LARGE ANODIZED TIN',36,12
+'Brand#33','LARGE BRUSHED BRASS',23,12
+'Brand#33','LARGE BRUSHED STEEL',3,12
+'Brand#33','LARGE BRUSHED TIN',36,12
+'Brand#33','LARGE BURNISHED BRASS',19,12
+'Brand#33','LARGE BURNISHED BRASS',49,12
+'Brand#33','LARGE PLATED NICKEL',9,12
+'Brand#33','LARGE PLATED NICKEL',19,12
+'Brand#33','LARGE POLISHED BRASS',9,12
+'Brand#33','LARGE POLISHED NICKEL',45,12
+'Brand#33','MEDIUM ANODIZED NICKEL',19,12
+'Brand#33','MEDIUM ANODIZED TIN',49,12
+'Brand#33','MEDIUM BRUSHED BRASS',45,12
+'Brand#33','MEDIUM BRUSHED NICKEL',14,12
+'Brand#33','MEDIUM BRUSHED STEEL',14,12
+'Brand#33','MEDIUM BRUSHED STEEL',36,12
+'Brand#33','MEDIUM BURNISHED BRASS',49,12
+'Brand#33','MEDIUM BURNISHED TIN',3,12
+'Brand#33','MEDIUM BURNISHED TIN',49,12
+'Brand#33','MEDIUM PLATED STEEL',3,12
+'Brand#33','MEDIUM PLATED TIN',23,12
+'Brand#33','PROMO ANODIZED STEEL',23,12
+'Brand#33','PROMO ANODIZED TIN',9,12
+'Brand#33','PROMO ANODIZED TIN',49,12
+'Brand#33','PROMO BRUSHED BRASS',3,12
+'Brand#33','PROMO BRUSHED BRASS',19,12
+'Brand#33','PROMO BRUSHED TIN',49,12
+'Brand#33','PROMO BURNISHED NICKEL',23,12
+'Brand#33','PROMO BURNISHED TIN',3,12
+'Brand#33','PROMO BURNISHED TIN',19,12
+'Brand#33','PROMO BURNISHED TIN',23,12
+'Brand#33','PROMO BURNISHED TIN',36,12
+'Brand#33','PROMO BURNISHED TIN',49,12
+'Brand#33','PROMO PLATED BRASS',23,12
+'Brand#33','PROMO PLATED BRASS',36,12
+'Brand#33','PROMO POLISHED COPPER',3,12
+'Brand#33','PROMO POLISHED NICKEL',3,12
+'Brand#33','PROMO POLISHED STEEL',23,12
+'Brand#33','SMALL ANODIZED STEEL',14,12
+'Brand#33','SMALL ANODIZED STEEL',49,12
+'Brand#33','SMALL ANODIZED TIN',19,12
+'Brand#33','SMALL BRUSHED BRASS',36,12
+'Brand#33','SMALL BRUSHED NICKEL',19,12
+'Brand#33','SMALL BRUSHED NICKEL',45,12
+'Brand#33','SMALL BURNISHED BRASS',36,12
+'Brand#33','SMALL BURNISHED TIN',9,12
+'Brand#33','SMALL PLATED BRASS',14,12
+'Brand#33','SMALL PLATED NICKEL',49,12
+'Brand#33','SMALL PLATED STEEL',3,12
+'Brand#33','SMALL POLISHED NICKEL',9,12
+'Brand#33','STANDARD ANODIZED STEEL',14,12
+'Brand#33','STANDARD ANODIZED STEEL',45,12
+'Brand#33','STANDARD ANODIZED TIN',9,12
+'Brand#33','STANDARD BRUSHED BRASS',19,12
+'Brand#33','STANDARD BRUSHED NICKEL',14,12
+'Brand#33','STANDARD BURNISHED BRASS',9,12
+'Brand#33','STANDARD BURNISHED TIN',23,12
+'Brand#33','STANDARD POLISHED STEEL',45,12
+'Brand#34','ECONOMY ANODIZED NICKEL',9,12
+'Brand#34','ECONOMY ANODIZED NICKEL',49,12
+'Brand#34','ECONOMY ANODIZED STEEL',45,12
+'Brand#34','ECONOMY BURNISHED COPPER',9,12
+'Brand#34','ECONOMY BURNISHED COPPER',23,12
+'Brand#34','ECONOMY BURNISHED COPPER',36,12
+'Brand#34','ECONOMY BURNISHED NICKEL',19,12
+'Brand#34','ECONOMY BURNISHED NICKEL',49,12
+'Brand#34','ECONOMY BURNISHED STEEL',9,12
+'Brand#34','ECONOMY BURNISHED TIN',14,12
+'Brand#34','ECONOMY PLATED BRASS',3,12
+'Brand#34','ECONOMY PLATED COPPER',3,12
+'Brand#34','ECONOMY PLATED TIN',3,12
+'Brand#34','ECONOMY PLATED TIN',14,12
+'Brand#34','ECONOMY POLISHED TIN',36,12
+'Brand#34','LARGE ANODIZED COPPER',3,12
+'Brand#34','LARGE ANODIZED NICKEL',3,12
+'Brand#34','LARGE ANODIZED NICKEL',49,12
+'Brand#34','LARGE BRUSHED COPPER',36,12
+'Brand#34','LARGE BRUSHED NICKEL',19,12
+'Brand#34','LARGE BRUSHED NICKEL',49,12
+'Brand#34','LARGE BURNISHED COPPER',23,12
+'Brand#34','LARGE BURNISHED NICKEL',23,12
+'Brand#34','LARGE BURNISHED TIN',14,12
+'Brand#34','LARGE BURNISHED TIN',23,12
+'Brand#34','LARGE BURNISHED TIN',49,12
+'Brand#34','LARGE PLATED COPPER',9,12
+'Brand#34','LARGE PLATED TIN',14,12
+'Brand#34','LARGE POLISHED BRASS',3,12
+'Brand#34','LARGE POLISHED BRASS',45,12
+'Brand#34','LARGE POLISHED COPPER',3,12
+'Brand#34','LARGE POLISHED NICKEL',3,12
+'Brand#34','LARGE POLISHED NICKEL',49,12
+'Brand#34','MEDIUM ANODIZED BRASS',45,12
+'Brand#34','MEDIUM BRUSHED BRASS',49,12
+'Brand#34','MEDIUM BRUSHED COPPER',9,12
+'Brand#34','MEDIUM BRUSHED COPPER',23,12
+'Brand#34','MEDIUM BRUSHED NICKEL',9,12
+'Brand#34','MEDIUM BRUSHED STEEL',45,12
+'Brand#34','MEDIUM BRUSHED TIN',36,12
+'Brand#34','MEDIUM BURNISHED BRASS',14,12
+'Brand#34','MEDIUM BURNISHED NICKEL',3,12
+'Brand#34','MEDIUM PLATED BRASS',23,12
+'Brand#34','PROMO ANODIZED NICKEL',3,12
+'Brand#34','PROMO BRUSHED COPPER',49,12
+'Brand#34','PROMO BRUSHED NICKEL',49,12
+'Brand#34','PROMO BURNISHED STEEL',14,12
+'Brand#34','PROMO PLATED BRASS',3,12
+'Brand#34','PROMO PLATED BRASS',36,12
+'Brand#34','PROMO PLATED TIN',49,12
+'Brand#34','PROMO POLISHED BRASS',14,12
+'Brand#34','PROMO POLISHED COPPER',23,12
+'Brand#34','PROMO POLISHED NICKEL',49,12
+'Brand#34','SMALL ANODIZED BRASS',19,12
+'Brand#34','SMALL ANODIZED COPPER',14,12
+'Brand#34','SMALL ANODIZED STEEL',19,12
+'Brand#34','SMALL ANODIZED TIN',9,12
+'Brand#34','SMALL BRUSHED COPPER',14,12
+'Brand#34','SMALL BURNISHED BRASS',9,12
+'Brand#34','SMALL BURNISHED BRASS',23,12
+'Brand#34','SMALL BURNISHED COPPER',9,12
+'Brand#34','SMALL BURNISHED COPPER',36,12
+'Brand#34','SMALL BURNISHED NICKEL',9,12
+'Brand#34','SMALL BURNISHED NICKEL',14,12
+'Brand#34','SMALL BURNISHED NICKEL',36,12
+'Brand#34','SMALL BURNISHED STEEL',14,12
+'Brand#34','SMALL PLATED BRASS',14,12
+'Brand#34','SMALL PLATED TIN',45,12
+'Brand#34','SMALL POLISHED STEEL',19,12
+'Brand#34','STANDARD ANODIZED BRASS',36,12
+'Brand#34','STANDARD ANODIZED TIN',3,12
+'Brand#34','STANDARD ANODIZED TIN',14,12
+'Brand#34','STANDARD BRUSHED BRASS',36,12
+'Brand#34','STANDARD BRUSHED COPPER',3,12
+'Brand#34','STANDARD BRUSHED STEEL',23,12
+'Brand#34','STANDARD BRUSHED TIN',45,12
+'Brand#34','STANDARD BURNISHED STEEL',14,12
+'Brand#34','STANDARD BURNISHED TIN',45,12
+'Brand#34','STANDARD POLISHED COPPER',14,12
+'Brand#35','ECONOMY ANODIZED BRASS',14,12
+'Brand#35','ECONOMY ANODIZED COPPER',19,12
+'Brand#35','ECONOMY ANODIZED NICKEL',14,12
+'Brand#35','ECONOMY ANODIZED STEEL',14,12
+'Brand#35','ECONOMY ANODIZED STEEL',45,12
+'Brand#35','ECONOMY BRUSHED BRASS',36,12
+'Brand#35','ECONOMY BRUSHED NICKEL',49,12
+'Brand#35','ECONOMY BURNISHED BRASS',19,12
+'Brand#35','ECONOMY BURNISHED BRASS',36,12
+'Brand#35','ECONOMY BURNISHED STEEL',36,12
+'Brand#35','ECONOMY PLATED TIN',45,12
+'Brand#35','ECONOMY PLATED TIN',49,12
+'Brand#35','ECONOMY POLISHED COPPER',9,12
+'Brand#35','ECONOMY POLISHED NICKEL',23,12
+'Brand#35','ECONOMY POLISHED STEEL',9,12
+'Brand#35','ECONOMY POLISHED TIN',23,12
+'Brand#35','LARGE ANODIZED BRASS',3,12
+'Brand#35','LARGE ANODIZED BRASS',45,12
+'Brand#35','LARGE ANODIZED COPPER',19,12
+'Brand#35','LARGE ANODIZED COPPER',36,12
+'Brand#35','LARGE ANODIZED STEEL',45,12
+'Brand#35','LARGE ANODIZED TIN',45,12
+'Brand#35','LARGE BRUSHED COPPER',23,12
+'Brand#35','LARGE BRUSHED NICKEL',36,12
+'Brand#35','LARGE BRUSHED STEEL',3,12
+'Brand#35','LARGE BRUSHED TIN',36,12
+'Brand#35','LARGE BURNISHED BRASS',45,12
+'Brand#35','LARGE BURNISHED STEEL',9,12
+'Brand#35','LARGE BURNISHED STEEL',45,12
+'Brand#35','LARGE BURNISHED TIN',49,12
+'Brand#35','LARGE PLATED BRASS',3,12
+'Brand#35','LARGE PLATED BRASS',23,12
+'Brand#35','LARGE PLATED STEEL',19,12
+'Brand#35','LARGE PLATED STEEL',49,12
+'Brand#35','MEDIUM ANODIZED TIN',3,12
+'Brand#35','MEDIUM BRUSHED BRASS',49,12
+'Brand#35','MEDIUM BRUSHED COPPER',14,12
+'Brand#35','MEDIUM BRUSHED NICKEL',3,12
+'Brand#35','MEDIUM BRUSHED STEEL',45,12
+'Brand#35','MEDIUM BURNISHED STEEL',19,12
+'Brand#35','MEDIUM PLATED NICKEL',45,12
+'Brand#35','MEDIUM PLATED STEEL',3,12
+'Brand#35','MEDIUM PLATED TIN',36,12
+'Brand#35','PROMO ANODIZED BRASS',14,12
+'Brand#35','PROMO ANODIZED STEEL',3,12
+'Brand#35','PROMO ANODIZED STEEL',23,12
+'Brand#35','PROMO ANODIZED TIN',49,12
+'Brand#35','PROMO BRUSHED COPPER',9,12
+'Brand#35','PROMO BRUSHED COPPER',23,12
+'Brand#35','PROMO BRUSHED STEEL',36,12
+'Brand#35','PROMO BURNISHED NICKEL',19,12
+'Brand#35','PROMO BURNISHED STEEL',3,12
+'Brand#35','PROMO BURNISHED STEEL',14,12
+'Brand#35','PROMO BURNISHED STEEL',49,12
+'Brand#35','PROMO BURNISHED TIN',9,12
+'Brand#35','PROMO BURNISHED TIN',14,12
+'Brand#35','PROMO POLISHED BRASS',19,12
+'Brand#35','PROMO POLISHED COPPER',49,12
+'Brand#35','PROMO POLISHED NICKEL',49,12
+'Brand#35','PROMO POLISHED STEEL',9,12
+'Brand#35','PROMO POLISHED TIN',36,12
+'Brand#35','SMALL ANODIZED BRASS',9,12
+'Brand#35','SMALL ANODIZED BRASS',19,12
+'Brand#35','SMALL BRUSHED NICKEL',19,12
+'Brand#35','SMALL BRUSHED STEEL',45,12
+'Brand#35','SMALL BRUSHED TIN',45,12
+'Brand#35','SMALL BURNISHED BRASS',9,12
+'Brand#35','SMALL BURNISHED BRASS',23,12
+'Brand#35','SMALL BURNISHED BRASS',36,12
+'Brand#35','SMALL BURNISHED BRASS',49,12
+'Brand#35','SMALL BURNISHED COPPER',45,12
+'Brand#35','SMALL PLATED BRASS',9,12
+'Brand#35','SMALL PLATED BRASS',36,12
+'Brand#35','SMALL PLATED TIN',36,12
+'Brand#35','STANDARD ANODIZED TIN',3,12
+'Brand#35','STANDARD ANODIZED TIN',9,12
+'Brand#35','STANDARD BURNISHED BRASS',36,12
+'Brand#35','STANDARD BURNISHED STEEL',49,12
+'Brand#35','STANDARD PLATED BRASS',49,12
+'Brand#35','STANDARD PLATED COPPER',9,12
+'Brand#35','STANDARD PLATED NICKEL',23,12
+'Brand#35','STANDARD PLATED NICKEL',49,12
+'Brand#35','STANDARD PLATED STEEL',23,12
+'Brand#35','STANDARD PLATED TIN',45,12
+'Brand#35','STANDARD POLISHED STEEL',23,12
+'Brand#35','STANDARD POLISHED TIN',3,12
+'Brand#41','ECONOMY ANODIZED BRASS',45,12
+'Brand#41','ECONOMY ANODIZED TIN',14,12
+'Brand#41','ECONOMY BRUSHED BRASS',23,12
+'Brand#41','ECONOMY BRUSHED NICKEL',49,12
+'Brand#41','ECONOMY BRUSHED STEEL',36,12
+'Brand#41','ECONOMY BRUSHED TIN',45,12
+'Brand#41','ECONOMY BURNISHED COPPER',3,12
+'Brand#41','ECONOMY BURNISHED COPPER',45,12
+'Brand#41','ECONOMY PLATED NICKEL',23,12
+'Brand#41','ECONOMY PLATED STEEL',36,12
+'Brand#41','ECONOMY PLATED TIN',23,12
+'Brand#41','ECONOMY POLISHED BRASS',36,12
+'Brand#41','ECONOMY POLISHED COPPER',49,12
+'Brand#41','ECONOMY POLISHED NICKEL',9,12
+'Brand#41','ECONOMY POLISHED NICKEL',19,12
+'Brand#41','ECONOMY POLISHED NICKEL',23,12
+'Brand#41','ECONOMY POLISHED STEEL',49,12
+'Brand#41','LARGE ANODIZED BRASS',14,12
+'Brand#41','LARGE ANODIZED BRASS',23,12
+'Brand#41','LARGE ANODIZED COPPER',36,12
+'Brand#41','LARGE ANODIZED STEEL',23,12
+'Brand#41','LARGE BRUSHED BRASS',9,12
+'Brand#41','LARGE BRUSHED COPPER',23,12
+'Brand#41','LARGE BURNISHED BRASS',36,12
+'Brand#41','LARGE BURNISHED STEEL',23,12
+'Brand#41','LARGE PLATED NICKEL',14,12
+'Brand#41','LARGE POLISHED BRASS',45,12
+'Brand#41','LARGE POLISHED COPPER',23,12
+'Brand#41','LARGE POLISHED COPPER',36,12
+'Brand#41','LARGE POLISHED STEEL',3,12
+'Brand#41','LARGE POLISHED STEEL',9,12
+'Brand#41','MEDIUM ANODIZED NICKEL',3,12
+'Brand#41','MEDIUM ANODIZED TIN',3,12
+'Brand#41','MEDIUM BURNISHED COPPER',23,12
+'Brand#41','MEDIUM BURNISHED TIN',14,12
+'Brand#41','MEDIUM BURNISHED TIN',45,12
+'Brand#41','MEDIUM PLATED BRASS',19,12
+'Brand#41','MEDIUM PLATED COPPER',19,12
+'Brand#41','MEDIUM PLATED COPPER',45,12
+'Brand#41','PROMO ANODIZED BRASS',14,12
+'Brand#41','PROMO ANODIZED NICKEL',49,12
+'Brand#41','PROMO ANODIZED TIN',9,12
+'Brand#41','PROMO BURNISHED COPPER',49,12
+'Brand#41','PROMO BURNISHED TIN',14,12
+'Brand#41','PROMO PLATED NICKEL',14,12
+'Brand#41','PROMO PLATED STEEL',45,12
+'Brand#41','PROMO PLATED TIN',3,12
+'Brand#41','PROMO PLATED TIN',36,12
+'Brand#41','PROMO POLISHED COPPER',23,12
+'Brand#41','PROMO POLISHED NICKEL',19,12
+'Brand#41','SMALL ANODIZED BRASS',3,12
+'Brand#41','SMALL ANODIZED COPPER',14,12
+'Brand#41','SMALL ANODIZED NICKEL',36,12
+'Brand#41','SMALL BRUSHED STEEL',36,12
+'Brand#41','SMALL BRUSHED TIN',14,12
+'Brand#41','SMALL BURNISHED TIN',3,12
+'Brand#41','SMALL PLATED BRASS',14,12
+'Brand#41','SMALL PLATED STEEL',14,12
+'Brand#41','SMALL POLISHED COPPER',36,12
+'Brand#41','SMALL POLISHED TIN',36,12
+'Brand#41','STANDARD ANODIZED BRASS',3,12
+'Brand#41','STANDARD ANODIZED BRASS',36,12
+'Brand#41','STANDARD ANODIZED COPPER',14,12
+'Brand#41','STANDARD ANODIZED NICKEL',36,12
+'Brand#41','STANDARD BURNISHED STEEL',9,12
+'Brand#41','STANDARD BURNISHED TIN',3,12
+'Brand#41','STANDARD PLATED BRASS',45,12
+'Brand#41','STANDARD PLATED COPPER',49,12
+'Brand#41','STANDARD POLISHED COPPER',23,12
+'Brand#41','STANDARD POLISHED NICKEL',3,12
+'Brand#42','ECONOMY ANODIZED BRASS',36,12
+'Brand#42','ECONOMY ANODIZED STEEL',9,12
+'Brand#42','ECONOMY BRUSHED NICKEL',45,12
+'Brand#42','ECONOMY BRUSHED TIN',14,12
+'Brand#42','ECONOMY BURNISHED NICKEL',49,12
+'Brand#42','ECONOMY BURNISHED STEEL',49,12
+'Brand#42','ECONOMY BURNISHED TIN',19,12
+'Brand#42','ECONOMY PLATED COPPER',14,12
+'Brand#42','ECONOMY PLATED NICKEL',9,12
+'Brand#42','ECONOMY POLISHED COPPER',9,12
+'Brand#42','LARGE ANODIZED BRASS',49,12
+'Brand#42','LARGE ANODIZED COPPER',36,12
+'Brand#42','LARGE BURNISHED COPPER',9,12
+'Brand#42','LARGE BURNISHED COPPER',19,12
+'Brand#42','LARGE BURNISHED TIN',9,12
+'Brand#42','LARGE PLATED BRASS',23,12
+'Brand#42','LARGE PLATED BRASS',36,12
+'Brand#42','LARGE PLATED NICKEL',23,12
+'Brand#42','LARGE PLATED TIN',9,12
+'Brand#42','LARGE PLATED TIN',19,12
+'Brand#42','LARGE POLISHED BRASS',36,12
+'Brand#42','LARGE POLISHED STEEL',9,12
+'Brand#42','LARGE POLISHED STEEL',45,12
+'Brand#42','LARGE POLISHED TIN',14,12
+'Brand#42','MEDIUM ANODIZED NICKEL',19,12
+'Brand#42','MEDIUM ANODIZED STEEL',23,12
+'Brand#42','MEDIUM ANODIZED TIN',49,12
+'Brand#42','MEDIUM BRUSHED NICKEL',9,12
+'Brand#42','MEDIUM BRUSHED STEEL',19,12
+'Brand#42','MEDIUM BRUSHED TIN',14,12
+'Brand#42','MEDIUM BURNISHED BRASS',36,12
+'Brand#42','MEDIUM BURNISHED NICKEL',36,12
+'Brand#42','MEDIUM BURNISHED STEEL',49,12
+'Brand#42','MEDIUM PLATED BRASS',36,12
+'Brand#42','MEDIUM PLATED COPPER',36,12
+'Brand#42','MEDIUM PLATED COPPER',45,12
+'Brand#42','MEDIUM PLATED STEEL',3,12
+'Brand#42','MEDIUM PLATED TIN',45,12
+'Brand#42','PROMO ANODIZED TIN',23,12
+'Brand#42','PROMO BRUSHED BRASS',19,12
+'Brand#42','PROMO BRUSHED NICKEL',3,12
+'Brand#42','PROMO BRUSHED TIN',45,12
+'Brand#42','PROMO BURNISHED BRASS',19,12
+'Brand#42','PROMO BURNISHED NICKEL',3,12
+'Brand#42','PROMO BURNISHED TIN',9,12
+'Brand#42','PROMO PLATED BRASS',14,12
+'Brand#42','PROMO PLATED BRASS',23,12
+'Brand#42','PROMO PLATED STEEL',19,12
+'Brand#42','PROMO POLISHED STEEL',45,12
+'Brand#42','SMALL ANODIZED BRASS',36,12
+'Brand#42','SMALL BRUSHED BRASS',36,12
+'Brand#42','SMALL BURNISHED BRASS',3,12
+'Brand#42','SMALL BURNISHED BRASS',36,12
+'Brand#42','SMALL BURNISHED STEEL',23,12
+'Brand#42','SMALL BURNISHED TIN',9,12
+'Brand#42','SMALL BURNISHED TIN',49,12
+'Brand#42','SMALL PLATED COPPER',9,12
+'Brand#42','SMALL PLATED COPPER',19,12
+'Brand#42','SMALL POLISHED BRASS',3,12
+'Brand#42','SMALL POLISHED COPPER',36,12
+'Brand#42','SMALL POLISHED NICKEL',23,12
+'Brand#42','STANDARD ANODIZED BRASS',23,12
+'Brand#42','STANDARD ANODIZED COPPER',45,12
+'Brand#42','STANDARD ANODIZED STEEL',23,12
+'Brand#42','STANDARD ANODIZED TIN',23,12
+'Brand#42','STANDARD BRUSHED TIN',3,12
+'Brand#42','STANDARD BURNISHED COPPER',36,12
+'Brand#42','STANDARD BURNISHED TIN',23,12
+'Brand#42','STANDARD PLATED COPPER',9,12
+'Brand#42','STANDARD PLATED TIN',3,12
+'Brand#42','STANDARD POLISHED NICKEL',9,12
+'Brand#42','STANDARD POLISHED STEEL',14,12
+'Brand#43','ECONOMY ANODIZED BRASS',14,12
+'Brand#43','ECONOMY ANODIZED COPPER',9,12
+'Brand#43','ECONOMY ANODIZED COPPER',19,12
+'Brand#43','ECONOMY ANODIZED COPPER',45,12
+'Brand#43','ECONOMY BRUSHED STEEL',9,12
+'Brand#43','ECONOMY BRUSHED STEEL',14,12
+'Brand#43','ECONOMY BRUSHED STEEL',36,12
+'Brand#43','ECONOMY BRUSHED STEEL',45,12
+'Brand#43','ECONOMY BRUSHED TIN',49,12
+'Brand#43','ECONOMY BURNISHED BRASS',3,12
+'Brand#43','ECONOMY BURNISHED BRASS',49,12
+'Brand#43','ECONOMY BURNISHED NICKEL',3,12
+'Brand#43','ECONOMY BURNISHED NICKEL',36,12
+'Brand#43','ECONOMY BURNISHED STEEL',9,12
+'Brand#43','ECONOMY BURNISHED TIN',19,12
+'Brand#43','ECONOMY PLATED COPPER',3,12
+'Brand#43','ECONOMY PLATED STEEL',3,12
+'Brand#43','ECONOMY POLISHED BRASS',45,12
+'Brand#43','ECONOMY POLISHED NICKEL',45,12
+'Brand#43','ECONOMY POLISHED TIN',49,12
+'Brand#43','LARGE ANODIZED TIN',14,12
+'Brand#43','LARGE BRUSHED NICKEL',23,12
+'Brand#43','LARGE BRUSHED STEEL',45,12
+'Brand#43','LARGE BURNISHED COPPER',14,12
+'Brand#43','LARGE BURNISHED NICKEL',3,12
+'Brand#43','LARGE BURNISHED STEEL',3,12
+'Brand#43','LARGE BURNISHED TIN',45,12
+'Brand#43','LARGE PLATED TIN',9,12
+'Brand#43','LARGE POLISHED BRASS',9,12
+'Brand#43','LARGE POLISHED COPPER',23,12
+'Brand#43','LARGE POLISHED NICKEL',9,12
+'Brand#43','LARGE POLISHED TIN',45,12
+'Brand#43','MEDIUM ANODIZED BRASS',14,12
+'Brand#43','MEDIUM ANODIZED BRASS',19,12
+'Brand#43','MEDIUM ANODIZED BRASS',36,12
+'Brand#43','MEDIUM ANODIZED COPPER',45,12
+'Brand#43','MEDIUM ANODIZED NICKEL',36,12
+'Brand#43','MEDIUM BRUSHED BRASS',45,12
+'Brand#43','MEDIUM BURNISHED BRASS',36,12
+'Brand#43','MEDIUM BURNISHED BRASS',45,12
+'Brand#43','MEDIUM BURNISHED BRASS',49,12
+'Brand#43','MEDIUM BURNISHED COPPER',3,12
+'Brand#43','MEDIUM BURNISHED COPPER',14,12
+'Brand#43','MEDIUM PLATED BRASS',3,12
+'Brand#43','MEDIUM PLATED BRASS',49,12
+'Brand#43','MEDIUM PLATED COPPER',19,12
+'Brand#43','PROMO ANODIZED NICKEL',19,12
+'Brand#43','PROMO ANODIZED STEEL',9,12
+'Brand#43','PROMO ANODIZED TIN',9,12
+'Brand#43','PROMO BRUSHED NICKEL',23,12
+'Brand#43','PROMO BRUSHED TIN',49,12
+'Brand#43','PROMO BURNISHED STEEL',36,12
+'Brand#43','PROMO BURNISHED STEEL',45,12
+'Brand#43','PROMO BURNISHED TIN',14,12
+'Brand#43','PROMO PLATED NICKEL',9,12
+'Brand#43','PROMO PLATED NICKEL',14,12
+'Brand#43','PROMO PLATED STEEL',9,12
+'Brand#43','PROMO POLISHED COPPER',23,12
+'Brand#43','PROMO POLISHED NICKEL',3,12
+'Brand#43','PROMO POLISHED STEEL',3,12
+'Brand#43','PROMO POLISHED STEEL',36,12
+'Brand#43','SMALL ANODIZED NICKEL',3,12
+'Brand#43','SMALL ANODIZED NICKEL',23,12
+'Brand#43','SMALL BRUSHED BRASS',49,12
+'Brand#43','SMALL BRUSHED COPPER',36,12
+'Brand#43','SMALL BRUSHED NICKEL',36,12
+'Brand#43','SMALL BRUSHED STEEL',9,12
+'Brand#43','SMALL BURNISHED COPPER',49,12
+'Brand#43','SMALL BURNISHED NICKEL',45,12
+'Brand#43','SMALL PLATED BRASS',36,12
+'Brand#43','SMALL PLATED COPPER',9,12
+'Brand#43','SMALL PLATED COPPER',49,12
+'Brand#43','SMALL POLISHED NICKEL',14,12
+'Brand#43','SMALL POLISHED TIN',49,12
+'Brand#43','STANDARD ANODIZED BRASS',36,12
+'Brand#43','STANDARD ANODIZED NICKEL',14,12
+'Brand#43','STANDARD ANODIZED TIN',9,12
+'Brand#43','STANDARD ANODIZED TIN',49,12
+'Brand#43','STANDARD BRUSHED BRASS',3,12
+'Brand#43','STANDARD BRUSHED COPPER',19,12
+'Brand#43','STANDARD BURNISHED STEEL',23,12
+'Brand#43','STANDARD BURNISHED TIN',14,12
+'Brand#43','STANDARD PLATED BRASS',19,12
+'Brand#43','STANDARD PLATED NICKEL',14,12
+'Brand#43','STANDARD PLATED NICKEL',23,12
+'Brand#43','STANDARD PLATED NICKEL',36,12
+'Brand#43','STANDARD POLISHED COPPER',3,12
+'Brand#43','STANDARD POLISHED STEEL',36,12
+'Brand#43','STANDARD POLISHED TIN',9,12
+'Brand#44','ECONOMY ANODIZED COPPER',9,12
+'Brand#44','ECONOMY ANODIZED NICKEL',36,12
+'Brand#44','ECONOMY ANODIZED STEEL',14,12
+'Brand#44','ECONOMY BRUSHED COPPER',19,12
+'Brand#44','ECONOMY BURNISHED STEEL',45,12
+'Brand#44','ECONOMY POLISHED TIN',36,12
+'Brand#44','ECONOMY POLISHED TIN',49,12
+'Brand#44','LARGE ANODIZED TIN',3,12
+'Brand#44','LARGE BRUSHED COPPER',36,12
+'Brand#44','LARGE BRUSHED STEEL',36,12
+'Brand#44','LARGE BRUSHED TIN',3,12
+'Brand#44','LARGE BRUSHED TIN',19,12
+'Brand#44','LARGE BURNISHED BRASS',19,12
+'Brand#44','LARGE BURNISHED BRASS',49,12
+'Brand#44','LARGE BURNISHED NICKEL',9,12
+'Brand#44','LARGE PLATED BRASS',9,12
+'Brand#44','LARGE PLATED NICKEL',3,12
+'Brand#44','LARGE PLATED NICKEL',14,12
+'Brand#44','LARGE PLATED NICKEL',36,12
+'Brand#44','MEDIUM ANODIZED BRASS',23,12
+'Brand#44','MEDIUM ANODIZED COPPER',45,12
+'Brand#44','MEDIUM ANODIZED TIN',9,12
+'Brand#44','MEDIUM BRUSHED BRASS',49,12
+'Brand#44','MEDIUM BRUSHED COPPER',3,12
+'Brand#44','MEDIUM BRUSHED COPPER',9,12
+'Brand#44','MEDIUM BRUSHED COPPER',36,12
+'Brand#44','MEDIUM BURNISHED COPPER',36,12
+'Brand#44','MEDIUM BURNISHED NICKEL',36,12
+'Brand#44','MEDIUM PLATED STEEL',19,12
+'Brand#44','MEDIUM PLATED TIN',23,12
+'Brand#44','MEDIUM PLATED TIN',36,12
+'Brand#44','PROMO ANODIZED BRASS',9,12
+'Brand#44','PROMO ANODIZED COPPER',19,12
+'Brand#44','PROMO ANODIZED NICKEL',19,12
+'Brand#44','PROMO ANODIZED STEEL',36,12
+'Brand#44','PROMO BRUSHED NICKEL',3,12
+'Brand#44','PROMO BURNISHED BRASS',19,12
+'Brand#44','PROMO BURNISHED NICKEL',49,12
+'Brand#44','PROMO PLATED BRASS',19,12
+'Brand#44','PROMO PLATED STEEL',14,12
+'Brand#44','PROMO PLATED STEEL',36,12
+'Brand#44','PROMO POLISHED COPPER',14,12
+'Brand#44','PROMO POLISHED COPPER',23,12
+'Brand#44','PROMO POLISHED COPPER',45,12
+'Brand#44','PROMO POLISHED STEEL',36,12
+'Brand#44','SMALL ANODIZED STEEL',36,12
+'Brand#44','SMALL BRUSHED COPPER',19,12
+'Brand#44','SMALL BRUSHED COPPER',45,12
+'Brand#44','SMALL BRUSHED NICKEL',3,12
+'Brand#44','SMALL BRUSHED NICKEL',9,12
+'Brand#44','SMALL BURNISHED COPPER',14,12
+'Brand#44','SMALL BURNISHED NICKEL',3,12
+'Brand#44','SMALL BURNISHED TIN',3,12
+'Brand#44','SMALL BURNISHED TIN',36,12
+'Brand#44','SMALL PLATED BRASS',23,12
+'Brand#44','SMALL PLATED BRASS',49,12
+'Brand#44','SMALL PLATED STEEL',3,12
+'Brand#44','SMALL PLATED STEEL',45,12
+'Brand#44','SMALL POLISHED BRASS',3,12
+'Brand#44','SMALL POLISHED COPPER',14,12
+'Brand#44','STANDARD ANODIZED BRASS',3,12
+'Brand#44','STANDARD ANODIZED BRASS',14,12
+'Brand#44','STANDARD ANODIZED COPPER',45,12
+'Brand#44','STANDARD ANODIZED NICKEL',9,12
+'Brand#44','STANDARD ANODIZED NICKEL',36,12
+'Brand#44','STANDARD ANODIZED TIN',9,12
+'Brand#44','STANDARD BRUSHED BRASS',9,12
+'Brand#44','STANDARD BRUSHED COPPER',23,12
+'Brand#44','STANDARD BRUSHED TIN',49,12
+'Brand#44','STANDARD BURNISHED COPPER',3,12
+'Brand#44','STANDARD BURNISHED COPPER',49,12
+'Brand#44','STANDARD BURNISHED STEEL',23,12
+'Brand#44','STANDARD BURNISHED TIN',36,12
+'Brand#44','STANDARD PLATED COPPER',14,12
+'Brand#44','STANDARD PLATED COPPER',45,12
+'Brand#44','STANDARD PLATED TIN',9,12
+'Brand#44','STANDARD PLATED TIN',23,12
+'Brand#44','STANDARD POLISHED BRASS',14,12
+'Brand#44','STANDARD POLISHED NICKEL',19,12
+'Brand#51','ECONOMY ANODIZED BRASS',9,12
+'Brand#51','ECONOMY ANODIZED BRASS',36,12
+'Brand#51','ECONOMY ANODIZED BRASS',45,12
+'Brand#51','ECONOMY ANODIZED COPPER',19,12
+'Brand#51','ECONOMY ANODIZED NICKEL',14,12
+'Brand#51','ECONOMY ANODIZED TIN',9,12
+'Brand#51','ECONOMY BRUSHED STEEL',36,12
+'Brand#51','ECONOMY BRUSHED STEEL',45,12
+'Brand#51','ECONOMY BRUSHED TIN',36,12
+'Brand#51','ECONOMY BURNISHED COPPER',45,12
+'Brand#51','ECONOMY PLATED STEEL',19,12
+'Brand#51','ECONOMY PLATED STEEL',23,12
+'Brand#51','ECONOMY PLATED TIN',45,12
+'Brand#51','LARGE ANODIZED COPPER',19,12
+'Brand#51','LARGE BRUSHED COPPER',36,12
+'Brand#51','LARGE BRUSHED NICKEL',49,12
+'Brand#51','LARGE BURNISHED STEEL',3,12
+'Brand#51','LARGE PLATED COPPER',9,12
+'Brand#51','LARGE PLATED NICKEL',45,12
+'Brand#51','LARGE PLATED TIN',19,12
+'Brand#51','LARGE PLATED TIN',23,12
+'Brand#51','LARGE POLISHED COPPER',3,12
+'Brand#51','LARGE POLISHED COPPER',23,12
+'Brand#51','MEDIUM ANODIZED NICKEL',3,12
+'Brand#51','MEDIUM ANODIZED NICKEL',19,12
+'Brand#51','MEDIUM ANODIZED NICKEL',23,12
+'Brand#51','MEDIUM ANODIZED STEEL',14,12
+'Brand#51','MEDIUM ANODIZED TIN',14,12
+'Brand#51','MEDIUM BRUSHED COPPER',49,12
+'Brand#51','MEDIUM BRUSHED TIN',49,12
+'Brand#51','MEDIUM BURNISHED BRASS',36,12
+'Brand#51','MEDIUM BURNISHED NICKEL',14,12
+'Brand#51','MEDIUM BURNISHED NICKEL',49,12
+'Brand#51','MEDIUM PLATED NICKEL',45,12
+'Brand#51','PROMO ANODIZED BRASS',3,12
+'Brand#51','PROMO ANODIZED COPPER',23,12
+'Brand#51','PROMO ANODIZED NICKEL',9,12
+'Brand#51','PROMO ANODIZED NICKEL',14,12
+'Brand#51','PROMO ANODIZED TIN',23,12
+'Brand#51','PROMO ANODIZED TIN',49,12
+'Brand#51','PROMO BRUSHED BRASS',23,12
+'Brand#51','PROMO BRUSHED COPPER',19,12
+'Brand#51','PROMO BRUSHED STEEL',36,12
+'Brand#51','PROMO BRUSHED TIN',3,12
+'Brand#51','PROMO BURNISHED COPPER',3,12
+'Brand#51','PROMO BURNISHED COPPER',19,12
+'Brand#51','PROMO PLATED COPPER',9,12
+'Brand#51','PROMO PLATED STEEL',45,12
+'Brand#51','PROMO PLATED TIN',14,12
+'Brand#51','SMALL ANODIZED NICKEL',9,12
+'Brand#51','SMALL BRUSHED BRASS',19,12
+'Brand#51','SMALL BRUSHED NICKEL',3,12
+'Brand#51','SMALL BRUSHED T

<TRUNCATED>


[02/12] incubator-impala git commit: IMPALA-5617: Include full workload name in tpch_nested query filenames

Posted by kw...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q17.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q17.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q17.test
new file mode 100644
index 0000000..d4b59f3
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q17.test
@@ -0,0 +1,25 @@
+====
+---- QUERY: TPCH-Q17
+# Q17 - Small-Quantity-Order Revenue Query
+select
+  sum(l_extendedprice) / 7.0 as avg_yearly
+from
+  customer.c_orders.o_lineitems l,
+  part p
+where
+  p_partkey = l_partkey
+  and p_brand = 'Brand#23'
+  and p_container = 'MED BOX'
+  and l_quantity < (
+    select
+      0.2 * avg(l_quantity)
+    from
+      customer.c_orders.o_lineitems l
+    where
+      l_partkey = p_partkey
+  )
+---- RESULTS
+348406.05
+---- TYPES
+decimal
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q18.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q18.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q18.test
new file mode 100644
index 0000000..658af2a
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q18.test
@@ -0,0 +1,81 @@
+====
+---- QUERY: TPCH-Q18
+# Q18 - Large Value Customer Query
+select
+  c_name,
+  c_custkey,
+  o_orderkey,
+  o_orderdate,
+  o_totalprice,
+  sum_quantity
+from
+  customer c,
+  c.c_orders o,
+  (select sum(l_quantity) sum_quantity from o.o_lineitems) l
+where
+  sum_quantity > 300
+order by
+  o_totalprice desc,
+  o_orderdate
+limit 100
+---- RESULTS
+'Customer#000128120',128120,4722021,'1994-04-07',544089.09,323.00
+'Customer#000144617',144617,3043270,'1997-02-12',530604.44,317.00
+'Customer#000013940',13940,2232932,'1997-04-13',522720.61,304.00
+'Customer#000066790',66790,2199712,'1996-09-30',515531.82,327.00
+'Customer#000046435',46435,4745607,'1997-07-03',508047.99,309.00
+'Customer#000015272',15272,3883783,'1993-07-28',500241.33,302.00
+'Customer#000146608',146608,3342468,'1994-06-12',499794.58,303.00
+'Customer#000096103',96103,5984582,'1992-03-16',494398.79,312.00
+'Customer#000024341',24341,1474818,'1992-11-15',491348.26,302.00
+'Customer#000137446',137446,5489475,'1997-05-23',487763.25,311.00
+'Customer#000107590',107590,4267751,'1994-11-04',485141.38,301.00
+'Customer#000050008',50008,2366755,'1996-12-09',483891.26,302.00
+'Customer#000015619',15619,3767271,'1996-08-07',480083.96,318.00
+'Customer#000077260',77260,1436544,'1992-09-12',479499.43,307.00
+'Customer#000109379',109379,5746311,'1996-10-10',478064.11,302.00
+'Customer#000054602',54602,5832321,'1997-02-09',471220.08,307.00
+'Customer#000105995',105995,2096705,'1994-07-03',469692.58,307.00
+'Customer#000148885',148885,2942469,'1992-05-31',469630.44,313.00
+'Customer#000114586',114586,551136,'1993-05-19',469605.59,308.00
+'Customer#000105260',105260,5296167,'1996-09-06',469360.57,303.00
+'Customer#000147197',147197,1263015,'1997-02-02',467149.67,320.00
+'Customer#000064483',64483,2745894,'1996-07-04',466991.35,304.00
+'Customer#000136573',136573,2761378,'1996-05-31',461282.73,301.00
+'Customer#000016384',16384,502886,'1994-04-12',458378.92,312.00
+'Customer#000117919',117919,2869152,'1996-06-20',456815.92,317.00
+'Customer#000012251',12251,735366,'1993-11-24',455107.26,309.00
+'Customer#000120098',120098,1971680,'1995-06-14',453451.23,308.00
+'Customer#000066098',66098,5007490,'1992-08-07',453436.16,304.00
+'Customer#000117076',117076,4290656,'1997-02-05',449545.85,301.00
+'Customer#000129379',129379,4720454,'1997-06-07',448665.79,303.00
+'Customer#000126865',126865,4702759,'1994-11-07',447606.65,320.00
+'Customer#000088876',88876,983201,'1993-12-30',446717.46,304.00
+'Customer#000036619',36619,4806726,'1995-01-17',446704.09,328.00
+'Customer#000141823',141823,2806245,'1996-12-29',446269.12,310.00
+'Customer#000053029',53029,2662214,'1993-08-13',446144.49,302.00
+'Customer#000018188',18188,3037414,'1995-01-25',443807.22,308.00
+'Customer#000066533',66533,29158,'1995-10-21',443576.50,305.00
+'Customer#000037729',37729,4134341,'1995-06-29',441082.97,309.00
+'Customer#000003566',3566,2329187,'1998-01-04',439803.36,304.00
+'Customer#000045538',45538,4527553,'1994-05-22',436275.31,305.00
+'Customer#000081581',81581,4739650,'1995-11-04',435405.90,305.00
+'Customer#000119989',119989,1544643,'1997-09-20',434568.25,320.00
+'Customer#000003680',3680,3861123,'1998-07-03',433525.97,301.00
+'Customer#000113131',113131,967334,'1995-12-15',432957.75,301.00
+'Customer#000141098',141098,565574,'1995-09-24',430986.69,301.00
+'Customer#000093392',93392,5200102,'1997-01-22',425487.51,304.00
+'Customer#000015631',15631,1845057,'1994-05-12',419879.59,302.00
+'Customer#000112987',112987,4439686,'1996-09-17',418161.49,305.00
+'Customer#000012599',12599,4259524,'1998-02-12',415200.61,304.00
+'Customer#000105410',105410,4478371,'1996-03-05',412754.51,302.00
+'Customer#000149842',149842,5156581,'1994-05-30',411329.35,302.00
+'Customer#000010129',10129,5849444,'1994-03-21',409129.85,309.00
+'Customer#000069904',69904,1742403,'1996-10-19',408513.00,305.00
+'Customer#000017746',17746,6882,'1997-04-09',408446.93,303.00
+'Customer#000013072',13072,1481925,'1998-03-15',399195.47,301.00
+'Customer#000082441',82441,857959,'1994-02-07',382579.74,305.00
+'Customer#000088703',88703,2995076,'1994-01-30',363812.12,302.00
+---- TYPES
+STRING, BIGINT, BIGINT, STRING, DECIMAL, DECIMAL
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q19.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q19.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q19.test
new file mode 100644
index 0000000..6bbe4f8
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q19.test
@@ -0,0 +1,43 @@
+====
+---- QUERY: TPCH-Q19
+# Q19 - Discounted Revenue Query
+select
+  sum(l_extendedprice * (1 - l_discount)) as revenue
+from
+  customer.c_orders.o_lineitems l,
+  part p
+where
+  p_partkey = l_partkey
+  and (
+    (
+      p_brand = 'Brand#12'
+      and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG')
+      and l_quantity >= 1 and l_quantity <= 11
+      and p_size between 1 and 5
+      and l_shipmode in ('AIR', 'AIR REG')
+      and l_shipinstruct = 'DELIVER IN PERSON'
+    )
+    or
+    (
+      p_brand = 'Brand#23'
+      and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK')
+      and l_quantity >= 10 and l_quantity <= 20
+      and p_size between 1 and 10
+      and l_shipmode in ('AIR', 'AIR REG')
+      and l_shipinstruct = 'DELIVER IN PERSON'
+    )
+    or
+    (
+      p_brand = 'Brand#34'
+      and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG')
+      and l_quantity >= 20 and l_quantity <= 30
+      and p_size between 1 and 15
+      and l_shipmode in ('AIR', 'AIR REG')
+      and l_shipinstruct = 'DELIVER IN PERSON'
+    )
+  )
+---- RESULTS
+3083843.0578
+---- TYPES
+decimal
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q2.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q2.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q2.test
new file mode 100644
index 0000000..0ef4768
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q2.test
@@ -0,0 +1,147 @@
+====
+---- QUERY: TPCH-Q2
+# Q2 - Minimum Cost Supplier Query
+select
+  s_acctbal,
+  s_name,
+  n_name,
+  p_partkey,
+  p_mfgr,
+  s_address,
+  s_phone,
+  s_comment
+from
+  supplier s,
+  s.s_partsupps ps,
+  part p,
+  region r,
+  r.r_nations n
+where
+  p_partkey = ps_partkey
+  and p_size = 15
+  and p_type like '%BRASS'
+  and s_nationkey = n_nationkey
+  and r_name = 'EUROPE'
+  and ps_supplycost = (
+    select
+      min(ps_supplycost)
+    from
+      supplier s,
+      s.s_partsupps ps,
+      region r,
+      r.r_nations n
+    where
+      p_partkey = ps_partkey
+      and s_nationkey = n_nationkey
+      and r_name = 'EUROPE'
+    )
+order by
+  s_acctbal desc,
+  n_name,
+  s_name,
+  p_partkey
+limit 100
+---- RESULTS
+9938.53,'Supplier#000005359','UNITED KINGDOM',185358,'Manufacturer#4','QKuHYh,vZGiwu2FWEJoLDx04','33-429-790-6131','uriously regular requests hag'
+9937.84,'Supplier#000005969','ROMANIA',108438,'Manufacturer#1','ANDENSOSmk,miq23Xfb5RWt6dvUcvt6Qa','29-520-692-3537','efully express instructions. regular requests against the slyly fin'
+9936.22,'Supplier#000005250','UNITED KINGDOM',249,'Manufacturer#4','B3rqp0xbSEim4Mpy2RH J','33-320-228-2957','etect about the furiously final accounts. slyly ironic pinto beans sleep inside the furiously'
+9923.77,'Supplier#000002324','GERMANY',29821,'Manufacturer#4','y3OD9UywSTOk','17-779-299-1839','ackages boost blithely. blithely regular deposits c'
+9871.22,'Supplier#000006373','GERMANY',43868,'Manufacturer#5','J8fcXWsTqM','17-813-485-8637','etect blithely bold asymptotes. fluffily ironic platelets wake furiously; blit'
+9870.78,'Supplier#000001286','GERMANY',81285,'Manufacturer#2','YKA,E2fjiVd7eUrzp2Ef8j1QxGo2DFnosaTEH','17-516-924-4574',' regular accounts. furiously unusual courts above the fi'
+9870.78,'Supplier#000001286','GERMANY',181285,'Manufacturer#4','YKA,E2fjiVd7eUrzp2Ef8j1QxGo2DFnosaTEH','17-516-924-4574',' regular accounts. furiously unusual courts above the fi'
+9852.52,'Supplier#000008973','RUSSIA',18972,'Manufacturer#2','t5L67YdBYYH6o,Vz24jpDyQ9','32-188-594-7038','rns wake final foxes. carefully unusual depende'
+9847.83,'Supplier#000008097','RUSSIA',130557,'Manufacturer#2','xMe97bpE69NzdwLoX','32-375-640-3593',' the special excuses. silent sentiments serve carefully final ac'
+9847.57,'Supplier#000006345','FRANCE',86344,'Manufacturer#1','VSt3rzk3qG698u6ld8HhOByvrTcSTSvQlDQDag','16-886-766-7945','ges. slyly regular requests are. ruthless, express excuses cajole blithely across the unu'
+9847.57,'Supplier#000006345','FRANCE',173827,'Manufacturer#2','VSt3rzk3qG698u6ld8HhOByvrTcSTSvQlDQDag','16-886-766-7945','ges. slyly regular requests are. ruthless, express excuses cajole blithely across the unu'
+9836.93,'Supplier#000007342','RUSSIA',4841,'Manufacturer#4','JOlK7C1,7xrEZSSOw','32-399-414-5385','blithely carefully bold theodolites. fur'
+9817.10,'Supplier#000002352','RUSSIA',124815,'Manufacturer#2','4LfoHUZjgjEbAKw TgdKcgOc4D4uCYw','32-551-831-1437','wake carefully alongside of the carefully final ex'
+9817.10,'Supplier#000002352','RUSSIA',152351,'Manufacturer#3','4LfoHUZjgjEbAKw TgdKcgOc4D4uCYw','32-551-831-1437','wake carefully alongside of the carefully final ex'
+9739.86,'Supplier#000003384','FRANCE',138357,'Manufacturer#2','o,Z3v4POifevE k9U1b 6J1ucX,I','16-494-913-5925','s after the furiously bold packages sleep fluffily idly final requests: quickly final'
+9721.95,'Supplier#000008757','UNITED KINGDOM',156241,'Manufacturer#3','Atg6GnM4dT2','33-821-407-2995','eep furiously sauternes; quickl'
+9681.33,'Supplier#000008406','RUSSIA',78405,'Manufacturer#1',',qUuXcftUl','32-139-873-8571','haggle slyly regular excuses. quic'
+9643.55,'Supplier#000005148','ROMANIA',107617,'Manufacturer#1','kT4ciVFslx9z4s79p Js825','29-252-617-4850','final excuses. final ideas boost quickly furiously speci'
+9624.82,'Supplier#000001816','FRANCE',34306,'Manufacturer#3','e7vab91vLJPWxxZnewmnDBpDmxYHrb','16-392-237-6726','e packages are around the special ideas. special, pending foxes us'
+9624.78,'Supplier#000009658','ROMANIA',189657,'Manufacturer#1','oE9uBgEfSS4opIcepXyAYM,x','29-748-876-2014','ronic asymptotes wake bravely final'
+9612.94,'Supplier#000003228','ROMANIA',120715,'Manufacturer#2','KDdpNKN3cWu7ZSrbdqp7AfSLxx,qWB','29-325-784-8187','warhorses. quickly even deposits sublate daringly ironic instructions. slyly blithe t'
+9612.94,'Supplier#000003228','ROMANIA',198189,'Manufacturer#4','KDdpNKN3cWu7ZSrbdqp7AfSLxx,qWB','29-325-784-8187','warhorses. quickly even deposits sublate daringly ironic instructions. slyly blithe t'
+9571.83,'Supplier#000004305','ROMANIA',179270,'Manufacturer#2','qNHZ7WmCzygwMPRDO9Ps','29-973-481-1831','kly carefully express asymptotes. furiou'
+9558.10,'Supplier#000003532','UNITED KINGDOM',88515,'Manufacturer#4','EOeuiiOn21OVpTlGguufFDFsbN1p0lhpxHp','33-152-301-2164',' foxes. quickly even excuses use. slyly special foxes nag bl'
+9492.79,'Supplier#000005975','GERMANY',25974,'Manufacturer#5','S6mIiCTx82z7lV','17-992-579-4839','arefully pending accounts. blithely regular excuses boost carefully carefully ironic p'
+9461.05,'Supplier#000002536','UNITED KINGDOM',20033,'Manufacturer#1','8mmGbyzaU 7ZS2wJumTibypncu9pNkDc4FYA','33-556-973-5522','. slyly regular deposits wake slyly. furiously regular warthogs are.'
+9453.01,'Supplier#000000802','ROMANIA',175767,'Manufacturer#1',',6HYXb4uaHITmtMBj4Ak57Pd','29-342-882-6463','gular frets. permanently special multipliers believe blithely alongs'
+9408.65,'Supplier#000007772','UNITED KINGDOM',117771,'Manufacturer#4','AiC5YAH,gdu0i7','33-152-491-1126','nag against the final requests. furiously unusual packages cajole blit'
+9359.61,'Supplier#000004856','ROMANIA',62349,'Manufacturer#5','HYogcF3Jb yh1','29-334-870-9731','y ironic theodolites. blithely sile'
+9357.45,'Supplier#000006188','UNITED KINGDOM',138648,'Manufacturer#1','g801,ssP8wpTk4Hm','33-583-607-1633','ously always regular packages. fluffily even accounts beneath the furiously final pack'
+9352.04,'Supplier#000003439','GERMANY',170921,'Manufacturer#4','qYPDgoiBGhCYxjgC','17-128-996-4650',' according to the carefully bold ideas'
+9312.97,'Supplier#000007807','RUSSIA',90279,'Manufacturer#5','oGYMPCk9XHGB2PBfKRnHA','32-673-872-5854','ecial packages among the pending, even requests use regula'
+9312.97,'Supplier#000007807','RUSSIA',100276,'Manufacturer#5','oGYMPCk9XHGB2PBfKRnHA','32-673-872-5854','ecial packages among the pending, even requests use regula'
+9280.27,'Supplier#000007194','ROMANIA',47193,'Manufacturer#3','zhRUQkBSrFYxIAXTfInj vyGRQjeK','29-318-454-2133','o beans haggle after the furiously unusual deposits. carefully silent dolphins cajole carefully'
+9274.80,'Supplier#000008854','RUSSIA',76346,'Manufacturer#3','1xhLoOUM7I3mZ1mKnerw OSqdbb4QbGa','32-524-148-5221','y. courts do wake slyly. carefully ironic platelets haggle above the slyly regular the'
+9249.35,'Supplier#000003973','FRANCE',26466,'Manufacturer#1','d18GiDsL6Wm2IsGXM,RZf1jCsgZAOjNYVThTRP4','16-722-866-1658','uests are furiously. regular tithes through the regular, final accounts cajole furiously above the q'
+9249.35,'Supplier#000003973','FRANCE',33972,'Manufacturer#1','d18GiDsL6Wm2IsGXM,RZf1jCsgZAOjNYVThTRP4','16-722-866-1658','uests are furiously. regular tithes through the regular, final accounts cajole furiously above the q'
+9208.70,'Supplier#000007769','ROMANIA',40256,'Manufacturer#5','rsimdze 5o9P Ht7xS','29-964-424-9649','lites was quickly above the furiously ironic requests. slyly even foxes against the blithely bold '
+9201.47,'Supplier#000009690','UNITED KINGDOM',67183,'Manufacturer#5','CB BnUTlmi5zdeEl7R7','33-121-267-9529','e even, even foxes. blithely ironic packages cajole regular packages. slyly final ide'
+9192.10,'Supplier#000000115','UNITED KINGDOM',85098,'Manufacturer#3','nJ 2t0f7Ve,wL1,6WzGBJLNBUCKlsV','33-597-248-1220','es across the carefully express accounts boost caref'
+9189.98,'Supplier#000001226','GERMANY',21225,'Manufacturer#4','qsLCqSvLyZfuXIpjz','17-725-903-1381',' deposits. blithely bold excuses about the slyly bold forges wake '
+9128.97,'Supplier#000004311','RUSSIA',146768,'Manufacturer#5','I8IjnXd7NSJRs594RxsRR0','32-155-440-7120','refully. blithely unusual asymptotes haggle '
+9104.83,'Supplier#000008520','GERMANY',150974,'Manufacturer#4','RqRVDgD0ER J9 b41vR2,3','17-728-804-1793','ly about the blithely ironic depths. slyly final theodolites among the fluffily bold ideas print'
+9101.00,'Supplier#000005791','ROMANIA',128254,'Manufacturer#5','zub2zCV,jhHPPQqi,P2INAjE1zI n66cOEoXFG','29-549-251-5384','ts. notornis detect blithely above the carefully bold requests. blithely even package'
+9094.57,'Supplier#000004582','RUSSIA',39575,'Manufacturer#1','WB0XkCSG3r,mnQ n,h9VIxjjr9ARHFvKgMDf','32-587-577-1351','jole. regular accounts sleep blithely frets. final pinto beans play furiously past the '
+8996.87,'Supplier#000004702','FRANCE',102191,'Manufacturer#5','8XVcQK23akp','16-811-269-8946','ickly final packages along the express plat'
+8996.14,'Supplier#000009814','ROMANIA',139813,'Manufacturer#2','af0O5pg83lPU4IDVmEylXZVqYZQzSDlYLAmR','29-995-571-8781',' dependencies boost quickly across the furiously pending requests! unusual dolphins play sl'
+8968.42,'Supplier#000010000','ROMANIA',119999,'Manufacturer#5','aTGLEusCiL4F PDBdv665XBJhPyCOB0i','29-578-432-2146','ly regular foxes boost slyly. quickly special waters boost carefully ironi'
+8936.82,'Supplier#000007043','UNITED KINGDOM',109512,'Manufacturer#1','FVajceZInZdbJE6Z9XsRUxrUEpiwHDrOXi,1Rz','33-784-177-8208','efully regular courts. furiousl'
+8929.42,'Supplier#000008770','FRANCE',173735,'Manufacturer#4','R7cG26TtXrHAP9 HckhfRi','16-242-746-9248','cajole furiously unusual requests. quickly stealthy requests are. '
+8920.59,'Supplier#000003967','ROMANIA',26460,'Manufacturer#1','eHoAXe62SY9','29-194-731-3944','aters. express, pending instructions sleep. brave, r'
+8920.59,'Supplier#000003967','ROMANIA',173966,'Manufacturer#2','eHoAXe62SY9','29-194-731-3944','aters. express, pending instructions sleep. brave, r'
+8913.96,'Supplier#000004603','UNITED KINGDOM',137063,'Manufacturer#2','OUzlvMUr7n,utLxmPNeYKSf3T24OXskxB5','33-789-255-7342',' haggle slyly above the furiously regular pinto beans. even '
+8877.82,'Supplier#000007967','FRANCE',167966,'Manufacturer#5','A3pi1BARM4nx6R,qrwFoRPU','16-442-147-9345','ously foxes. express, ironic requests im'
+8862.24,'Supplier#000003323','ROMANIA',73322,'Manufacturer#3','W9 lYcsC9FwBqk3ItL','29-736-951-3710','ly pending ideas sleep about the furiously unu'
+8841.59,'Supplier#000005750','ROMANIA',100729,'Manufacturer#5','Erx3lAgu0g62iaHF9x50uMH4EgeN9hEG','29-344-502-5481','gainst the pinto beans. fluffily unusual dependencies affix slyly even deposits.'
+8781.71,'Supplier#000003121','ROMANIA',13120,'Manufacturer#5','wNqTogx238ZYCamFb,50v,bj 4IbNFW9Bvw1xP','29-707-291-5144','s wake quickly ironic ideas'
+8754.24,'Supplier#000009407','UNITED KINGDOM',179406,'Manufacturer#4','CHRCbkaWcf5B','33-903-970-9604','e ironic requests. carefully even foxes above the furious'
+8691.06,'Supplier#000004429','UNITED KINGDOM',126892,'Manufacturer#2','k,BQms5UhoAF1B2Asi,fLib','33-964-337-5038','efully express deposits kindle after the deposits. final '
+8655.99,'Supplier#000006330','RUSSIA',193810,'Manufacturer#2','UozlaENr0ytKe2w6CeIEWFWn iO3S8Rae7Ou','32-561-198-3705','symptotes use about the express dolphins. requests use after the express platelets. final, ex'
+8638.36,'Supplier#000002920','RUSSIA',75398,'Manufacturer#1','Je2a8bszf3L','32-122-621-7549','ly quickly ironic requests. even requests whithout t'
+8638.36,'Supplier#000002920','RUSSIA',170402,'Manufacturer#3','Je2a8bszf3L','32-122-621-7549','ly quickly ironic requests. even requests whithout t'
+8607.69,'Supplier#000006003','UNITED KINGDOM',76002,'Manufacturer#2','EH9wADcEiuenM0NR08zDwMidw,52Y2RyILEiA','33-416-807-5206','ar, pending accounts. pending depende'
+8569.52,'Supplier#000005936','RUSSIA',5935,'Manufacturer#5','jXaNZ6vwnEWJ2ksLZJpjtgt0bY2a3AU','32-644-251-7916','. regular foxes nag carefully atop the regular, silent deposits. quickly regular packages '
+8564.12,'Supplier#000000033','GERMANY',110032,'Manufacturer#1','gfeKpYw3400L0SDywXA6Ya1Qmq1w6YB9f3R','17-138-897-9374','n sauternes along the regular asymptotes are regularly along the '
+8553.82,'Supplier#000003979','ROMANIA',143978,'Manufacturer#4','BfmVhCAnCMY3jzpjUMy4CNWs9 HzpdQR7INJU','29-124-646-4897','ic requests wake against the blithely unusual accounts. fluffily r'
+8517.23,'Supplier#000009529','RUSSIA',37025,'Manufacturer#5','e44R8o7JAIS9iMcr','32-565-297-8775','ove the even courts. furiously special platelets '
+8517.23,'Supplier#000009529','RUSSIA',59528,'Manufacturer#2','e44R8o7JAIS9iMcr','32-565-297-8775','ove the even courts. furiously special platelets '
+8503.70,'Supplier#000006830','RUSSIA',44325,'Manufacturer#4','BC4WFCYRUZyaIgchU 4S','32-147-878-5069','pades cajole. furious packages among the carefully express excuses boost furiously across th'
+8457.09,'Supplier#000009456','UNITED KINGDOM',19455,'Manufacturer#1','7SBhZs8gP1cJjT0Qf433YBk','33-858-440-4349','cing requests along the furiously unusual deposits promise among the furiously unus'
+8441.40,'Supplier#000003817','FRANCE',141302,'Manufacturer#2','hU3fz3xL78','16-339-356-5115','ely even ideas. ideas wake slyly furiously unusual instructions. pinto beans sleep ag'
+8432.89,'Supplier#000003990','RUSSIA',191470,'Manufacturer#1','wehBBp1RQbfxAYDASS75MsywmsKHRVdkrvNe6m','32-839-509-9301','ep furiously. packages should have to haggle slyly across the deposits. furiously regu'
+8431.40,'Supplier#000002675','ROMANIA',5174,'Manufacturer#1','HJFStOu9R5NGPOegKhgbzBdyvrG2yh8w','29-474-643-1443','ithely express pinto beans. blithely even foxes haggle. furiously regular theodol'
+8407.04,'Supplier#000005406','RUSSIA',162889,'Manufacturer#4','j7 gYF5RW8DC5UrjKC','32-626-152-4621','r the blithely regular packages. slyly ironic theodoli'
+8386.08,'Supplier#000008518','FRANCE',36014,'Manufacturer#3','2jqzqqAVe9crMVGP,n9nTsQXulNLTUYoJjEDcqWV','16-618-780-7481','blithely bold pains are carefully platelets. finally regular pinto beans sleep carefully special'
+8376.52,'Supplier#000005306','UNITED KINGDOM',190267,'Manufacturer#5','9t8Y8 QqSIsoADPt6NLdk,TP5zyRx41oBUlgoGc9','33-632-514-7931','ly final accounts sleep special, regular requests. furiously regular'
+8348.74,'Supplier#000008851','FRANCE',66344,'Manufacturer#4','nWxi7GwEbjhw1','16-796-240-2472',' boldly final deposits. regular, even instructions detect slyly. fluffily unusual pinto bea'
+8338.58,'Supplier#000007269','FRANCE',17268,'Manufacturer#4','ZwhJSwABUoiB04,3','16-267-277-4365','iously final accounts. even pinto beans cajole slyly regular'
+8328.46,'Supplier#000001744','ROMANIA',69237,'Manufacturer#5','oLo3fV64q2,FKHa3p,qHnS7Yzv,ps8','29-330-728-5873','ep carefully-- even, careful packages are slyly along t'
+8307.93,'Supplier#000003142','GERMANY',18139,'Manufacturer#1','dqblvV8dCNAorGlJ','17-595-447-6026','olites wake furiously regular decoys. final requests nod '
+8231.61,'Supplier#000009558','RUSSIA',192000,'Manufacturer#2','mcdgen,yT1iJDHDS5fV','32-762-137-5858',' foxes according to the furi'
+8152.61,'Supplier#000002731','ROMANIA',15227,'Manufacturer#4',' nluXJCuY1tu','29-805-463-2030',' special requests. even, regular warhorses affix among the final gr'
+8109.09,'Supplier#000009186','FRANCE',99185,'Manufacturer#1','wgfosrVPexl9pEXWywaqlBMDYYf','16-668-570-1402','tions haggle slyly about the sil'
+8102.62,'Supplier#000003347','UNITED KINGDOM',18344,'Manufacturer#5','m CtXS2S16i','33-454-274-8532','egrate with the slyly bold instructions. special foxes haggle silently among the'
+8046.07,'Supplier#000008780','FRANCE',191222,'Manufacturer#3','AczzuE0UK9osj ,Lx0Jmh','16-473-215-6395','onic platelets cajole after the regular instructions. permanently bold excuses'
+8042.09,'Supplier#000003245','RUSSIA',135705,'Manufacturer#4','Dh8Ikg39onrbOL4DyTfGw8a9oKUX3d9Y','32-836-132-8872','osits. packages cajole slyly. furiously regular deposits cajole slyly. q'
+8042.09,'Supplier#000003245','RUSSIA',150729,'Manufacturer#1','Dh8Ikg39onrbOL4DyTfGw8a9oKUX3d9Y','32-836-132-8872','osits. packages cajole slyly. furiously regular deposits cajole slyly. q'
+7992.40,'Supplier#000006108','FRANCE',118574,'Manufacturer#1','8tBydnTDwUqfBfFV4l3','16-974-998-8937',' ironic ideas? fluffily even instructions wake. blithel'
+7980.65,'Supplier#000001288','FRANCE',13784,'Manufacturer#4','zE,7HgVPrCn','16-646-464-8247','ully bold courts. escapades nag slyly. furiously fluffy theodo'
+7950.37,'Supplier#000008101','GERMANY',33094,'Manufacturer#5','kkYvL6IuvojJgTNG IKkaXQDYgx8ILohj','17-627-663-8014','arefully unusual requests x-ray above the quickly final deposits. '
+7937.93,'Supplier#000009012','ROMANIA',83995,'Manufacturer#2','iUiTziH,Ek3i4lwSgunXMgrcTzwdb','29-250-925-9690','to the blithely ironic deposits nag sly'
+7914.45,'Supplier#000001013','RUSSIA',125988,'Manufacturer#2','riRcntps4KEDtYScjpMIWeYF6mNnR','32-194-698-3365',' busily bold packages are dolphi'
+7912.91,'Supplier#000004211','GERMANY',159180,'Manufacturer#5','2wQRVovHrm3,v03IKzfTd,1PYsFXQFFOG','17-266-947-7315','ay furiously regular platelets. cou'
+7912.91,'Supplier#000004211','GERMANY',184210,'Manufacturer#4','2wQRVovHrm3,v03IKzfTd,1PYsFXQFFOG','17-266-947-7315','ay furiously regular platelets. cou'
+7894.56,'Supplier#000007981','GERMANY',85472,'Manufacturer#4','NSJ96vMROAbeXP','17-963-404-3760','ic platelets affix after the furiously'
+7887.08,'Supplier#000009792','GERMANY',164759,'Manufacturer#3','Y28ITVeYriT3kIGdV2K8fSZ V2UqT5H1Otz','17-988-938-4296','ckly around the carefully fluffy theodolites. slyly ironic pack'
+7871.50,'Supplier#000007206','RUSSIA',104695,'Manufacturer#1','3w fNCnrVmvJjE95sgWZzvW','32-432-452-7731','ironic requests. furiously final theodolites cajole. final, express packages sleep. quickly reg'
+7852.45,'Supplier#000005864','RUSSIA',8363,'Manufacturer#4','WCNfBPZeSXh3h,c','32-454-883-3821','usly unusual pinto beans. brave ideas sleep carefully quickly ironi'
+7850.66,'Supplier#000001518','UNITED KINGDOM',86501,'Manufacturer#1','ONda3YJiHKJOC','33-730-383-3892','ifts haggle fluffily pending pai'
+7843.52,'Supplier#000006683','FRANCE',11680,'Manufacturer#4','2Z0JGkiv01Y00oCFwUGfviIbhzCdy','16-464-517-8943',' express, final pinto beans x-ray slyly asymptotes. unusual, unusual'
+---- TYPES
+DECIMAL, STRING, STRING, BIGINT, STRING, STRING, STRING, STRING
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q20.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q20.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q20.test
new file mode 100644
index 0000000..87b1dcd
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q20.test
@@ -0,0 +1,226 @@
+====
+---- QUERY: TPCH-Q20
+# Q20 - Potential Part Promotion Query
+# Note: Tricky rewrite from the original to avoid mixing
+# correlated and uncorrelated table refs in a subquery.
+select distinct
+  s_name,
+  s_address
+from
+  supplier s,
+  s.s_partsupps ps,
+  region.r_nations n
+where
+  ps_partkey in (
+      select
+        p_partkey
+      from
+        part p
+      where
+        p_name like 'forest%'
+  )
+  and ps_availqty > (
+      select
+        0.5 * sum(l_quantity)
+      from
+        customer.c_orders.o_lineitems l
+      where
+        l_partkey = ps_partkey
+        and l_suppkey = s_suppkey
+        and l_shipdate >= '1994-01-01'
+        and l_shipdate < '1995-01-01'
+  )
+  and s_nationkey = n_nationkey
+  and n_name = 'CANADA'
+order by
+  s_name
+---- RESULTS
+'Supplier#000000020','iybAE,RmTymrZVYaFZva2SH,j'
+'Supplier#000000091','YV45D7TkfdQanOOZ7q9QxkyGUapU1oOWU6q3'
+'Supplier#000000205','rF uV8d0JNEk'
+'Supplier#000000285','Br7e1nnt1yxrw6ImgpJ7YdhFDjuBf'
+'Supplier#000000287','7a9SP7qW5Yku5PvSg'
+'Supplier#000000354','w8fOo5W,aS'
+'Supplier#000000378','FfbhyCxWvcPrO8ltp9'
+'Supplier#000000402','i9Sw4DoyMhzhKXCH9By,AYSgmD'
+'Supplier#000000530','0qwCMwobKY OcmLyfRXlagA8ukENJv,'
+'Supplier#000000555','TfB,a5bfl3Ah 3Z 74GqnNs6zKVGM'
+'Supplier#000000640','mvvtlQKsTOsJj5Ihk7,cq'
+'Supplier#000000729','pqck2ppy758TQpZCUAjPvlU55K3QjfL7Bi'
+'Supplier#000000736','l6i2nMwVuovfKnuVgaSGK2rDy65DlAFLegiL7'
+'Supplier#000000761','zlSLelQUj2XrvTTFnv7WAcYZGvvMTx882d4'
+'Supplier#000000887','urEaTejH5POADP2ARrf'
+'Supplier#000000935','ij98czM 2KzWe7dDTOxB8sq0UfCdvrX'
+'Supplier#000000975',',AC e,tBpNwKb5xMUzeohxlRn, hdZJo73gFQF8y'
+'Supplier#000001263','rQWr6nf8ZhB2TAiIDIvo5Io'
+'Supplier#000001367','42YSkFcAXMMcucsqeEefOE4HeCC'
+'Supplier#000001426','bPOCc086oFm8sLtS,fGrH'
+'Supplier#000001446','lch9HMNU1R7a0LIybsUodVknk6'
+'Supplier#000001500','wDmF5xLxtQch9ctVu,'
+'Supplier#000001602','uKNWIeafaM644'
+'Supplier#000001626','UhxNRzUu1dtFmp0'
+'Supplier#000001682','pXTkGxrTQVyH1Rr'
+'Supplier#000001700','7hMlCof1Y5zLFg'
+'Supplier#000001726','TeRY7TtTH24sEword7yAaSkjx8'
+'Supplier#000001730','Rc8e,1Pybn r6zo0VJIEiD0UD vhk'
+'Supplier#000001746','qWsendlOekQG1aW4uq06uQaCm51se8lirv7 hBRd'
+'Supplier#000001806','M934fuZSnLW'
+'Supplier#000001855','MWk6EAeozXb'
+'Supplier#000001931','FpJbMU2h6ZR2eBv8I9NIxF'
+'Supplier#000002022',' dwebGX7Id2pc25YvY33'
+'Supplier#000002036','20ytTtVObjKUUI2WCB0A'
+'Supplier#000002096','kuxseyLtq QPLXxm9ZUrnB6Kkh92JtK5cQzzXNU '
+'Supplier#000002117','MRtkgKolHJ9Wh X9J,urANHKDzvjr'
+'Supplier#000002204','uYmlr46C06udCqanj0KiRsoTQakZsEyssL'
+'Supplier#000002218','nODZw5q4dx kp0K5'
+'Supplier#000002243','nSOEV3JeOU79'
+'Supplier#000002245','hz2qWXWVjOyKhqPYMoEwz6zFkrTaDM'
+'Supplier#000002282','ES21K9dxoW1I1TzWCj7ekdlNwSWnv1Z  6mQ,BKn'
+'Supplier#000002303','nCoWfpB6YOymbgOht7ltfklpkHl'
+'Supplier#000002331','WRh2w5WFvRg7Z0S1AvSvHCL'
+'Supplier#000002373','RzHSxOTQmElCjxIBiVA52Z JB58rJhPRylR'
+'Supplier#000002419','qydBQd14I5l5mVXa4fYY'
+'Supplier#000002571','JZUugz04c iJFLrlGsz9O N,W 1rVHNIReyq'
+'Supplier#000002585','CsPoKpw2QuTY4AV1NkWuttneIa4SN'
+'Supplier#000002629','0Bw,q5Zp8su9XrzoCngZ3cAEXZwZ'
+'Supplier#000002721','HVdFAN2JHMQSpKm'
+'Supplier#000002730','lIFxR4fzm31C6,muzJwl84z'
+'Supplier#000002775','yDclaDaBD4ihH'
+'Supplier#000002799','lwr, 6L3gdfc79PQut,4XO6nQsTJY63cAyYO'
+'Supplier#000002934','m,trBENywSArwg3DhB'
+'Supplier#000002941','Naddba 8YTEKekZyP0'
+'Supplier#000003028','jouzgX0WZjhNMWLaH4fy'
+'Supplier#000003095','HxON3jJhUi3zjt,r mTD'
+'Supplier#000003143','hdolgh608uTkHh7t6qfSqkifKaiFjnCH'
+'Supplier#000003185','hMa535Cbf2mj1Nw4OWOKWVrsK0VdDkJURrdjSIJe'
+'Supplier#000003189','DWdPxt7 RnkZv6VOByR0em'
+'Supplier#000003201','E87yws6I,t0qNs4QW7UzExKiJnJDZWue'
+'Supplier#000003213','pxrRP4irQ1VoyfQ,dTf3'
+'Supplier#000003275','9xO4nyJ2QJcX6vGf'
+'Supplier#000003288','EDdfNt7E5Uc,xLTupoIgYL4yY7ujh,'
+'Supplier#000003314','jnisU8MzqO4iUB3zsPcrysMw3DDUojS4q7LD'
+'Supplier#000003373','iy8VM48ynpc3N2OsBwAvhYakO2us9R1bi'
+'Supplier#000003421','Sh3dt9W5oeofFWovnFhrg,'
+'Supplier#000003422','DJoCEapUeBXoV1iYiCcPFQvzsTv2ZI960'
+'Supplier#000003441','zvFJIzS,oUuShHjpcX'
+'Supplier#000003590','sy79CMLxqb,Cbo'
+'Supplier#000003607','lNqFHQYjwSAkf'
+'Supplier#000003625','qY588W0Yk5iaUy1RXTgNrEKrMAjBYHcKs'
+'Supplier#000003723','jZEp0OEythCLcS OmJSrFtxJ66bMlzSp'
+'Supplier#000003849','KgbZEaRk,6Q3mWvwh6uptrs1KRUHg 0'
+'Supplier#000003894','vvGC rameLOk'
+'Supplier#000003941','Pmb05mQfBMS618O7WKqZJ 9vyv'
+'Supplier#000004059','umEYZSq9RJ2WEzdsv9meU8rmqwzVLRgiZwC'
+'Supplier#000004207','tF64pwiOM4IkWjN3mS,e06WuAjLx'
+'Supplier#000004236','dl,HPtJmGipxYsSqn9wmqkuWjst,mCeJ8O6T'
+'Supplier#000004278','bBddbpBxIVp Di9'
+'Supplier#000004281','1OwPHh Pgiyeus,iZS5eA23JDOipwk'
+'Supplier#000004304','hQCAz59k,HLlp2CKUrcBIL'
+'Supplier#000004346','S3076LEOwo'
+'Supplier#000004406','Ah0ZaLu6VwufPWUz,7kbXgYZhauEaHqGIg'
+'Supplier#000004430','yvSsKNSTL5HLXBET4luOsPNLxKzAMk'
+'Supplier#000004527','p pVXCnxgcklWF6A1o3OHY3qW6'
+'Supplier#000004655','67NqBc4 t3PG3F8aO IsqWNq4kGaPowYL'
+'Supplier#000004851','Rj,x6IgLT7kBL99nqp'
+'Supplier#000004871',',phpt6AWEnUS8t4Avb50rFfdg7O9c6nU8xxv8eC5'
+'Supplier#000004884','42Z1uLye9nsn6aTGBNd dI8 x'
+'Supplier#000004975','GPq5PMKY6Wy'
+'Supplier#000005076','Xl7h9ifgvIHmqxFLgWfHK4Gjav BkP'
+'Supplier#000005195','Woi3b2ZaicPh ZSfu1EfXhE'
+'Supplier#000005256','Onc3t57VAMchm,pmoVLaU8bONni9NsuaM PzMMFz'
+'Supplier#000005257','f9g8SEHB7obMj3QXAjXS2vfYY22'
+'Supplier#000005300','gXG28YqpxU'
+'Supplier#000005323','tMCkdqbDoyNo8vMIkzjBqYexoRAuv,T6 qzcu'
+'Supplier#000005386','Ub6AAfHpWLWP'
+'Supplier#000005426','9Dz2OVT1q sb4BK71ljQ1XjPBYRPvO'
+'Supplier#000005465','63cYZenZBRZ613Q1FaoG0,smnC5zl9'
+'Supplier#000005484','saFdOR qW7AFY,3asPqiiAa11Mo22pCoN0BtPrKo'
+'Supplier#000005505','d2sbjG43KwMPX'
+'Supplier#000005506','On f5ypzoWgB'
+'Supplier#000005631','14TVrjlzo2SJEBYCDgpMwTlvwSqC'
+'Supplier#000005642','ZwKxAv3V40tW E8P7Qwu,zlu,kPsL'
+'Supplier#000005686','f2RBKec2T1NIi7yS M'
+'Supplier#000005730','5rkb0PSews HvxkL8JaD41UpnSF2cg8H1'
+'Supplier#000005736','2dq XTYhtYWSfp'
+'Supplier#000005737','dmEWcS32C3kx,d,B95 OmYn48'
+'Supplier#000005797',',o,OebwRbSDmVl9gN9fpWPCiqB UogvlSR'
+'Supplier#000005875','lK,sYiGzB94hSyHy9xvSZFbVQNCZe2LXZuGbS'
+'Supplier#000005974','REhR5jE,lLusQXvf54SwYySgsSSVFhu'
+'Supplier#000006059','4m0cv8MwJ9yX2vlwI Z'
+'Supplier#000006065','UiI2Cy3W4Tu5sLk LuvXLRy6KihlGv'
+'Supplier#000006093','KJNUg1odUT2wtCS2s6PrH3D6fd'
+'Supplier#000006099','aZilwQKYDTVPoK'
+'Supplier#000006109','rY5gbfh3dKHnylcQUTPGCwnbe'
+'Supplier#000006217','RVN23SYT9jenUeaWGXUd'
+'Supplier#000006297','73VRDOO56GUCyvc40oYJ'
+'Supplier#000006435','xIgE69XszYbnO4Eon7cHHO8y'
+'Supplier#000006463','7 wkdj2EO49iotley2kmIM ADpLSszGV3RNWj'
+'Supplier#000006478','bQYPnj9lpmW3U'
+'Supplier#000006521','b9 2zjHzxR'
+'Supplier#000006642','N,CUclSqRLJcS8zQ'
+'Supplier#000006659','iTLsnvD8D2GzWNUv kRInwRjk5rDeEmfup1'
+'Supplier#000006669','NQ4Yryj624p7K53'
+'Supplier#000006748','rC,2rEn8gKDIS5Q0dJEoiF'
+'Supplier#000006761','n4jhxGMqB5prD1HhpLvwrWStOLlla'
+'Supplier#000006808','HGd2Xo 9nEcHJhZvXjXxWKIpApT'
+'Supplier#000006858','fnlINT885vBBhsWwTGiZ0o22thwGY16h GHJj21'
+'Supplier#000006946','To6Slo0GJTqcIvD'
+'Supplier#000006949','mLxYUJhsGcLtKe ,GFirNu183AvT'
+'Supplier#000007072','2tRyX9M1a 4Rcm57s779F1ANG9jlpK'
+'Supplier#000007098','G3j8g0KC4OcbAu2OVoPHrXQWMCUdjq8wgCHOExu'
+'Supplier#000007132','xonvn0KAQIL3p8kYk HC1FSSDSUSTC'
+'Supplier#000007135','ls DoKV7V5ulfQy9V'
+'Supplier#000007147','Xzb16kC63wmLVYexUEgB0hXFvHkjT5iPpq'
+'Supplier#000007160','TqDGBULB3cTqIT6FKDvm9BS4e4v,zwYiQPb'
+'Supplier#000007169','tEc95D2moN9S84nd55O,dlnW'
+'Supplier#000007278','I2ae3rS7KVF8GVHtB'
+'Supplier#000007365','51xhROLvQMJ05DndtZWt'
+'Supplier#000007398','V8eE6oZ00OFNU,'
+'Supplier#000007402','4UVv58ery1rjmqSR5'
+'Supplier#000007448','yhhpWiJi7EJ6Q5VCaQ'
+'Supplier#000007458','BYuucapYkptZl6fnd2QaDyZmI9gR1Ih16e'
+'Supplier#000007477','9m9j0wfhWzCvVHxkU,PpAxwSH0h'
+'Supplier#000007509','q8,V6LJRoHJjHcOuSG7aLTMg'
+'Supplier#000007561','rMcFg2530VC'
+'Supplier#000007616','R IovIqzDi3,QHnaqZk1xS4hGAgelhP4yj'
+'Supplier#000007760','JsPE18PvcdFTK'
+'Supplier#000007801','69fi,U1r6enUb '
+'Supplier#000007865','5cDGCS,T6N'
+'Supplier#000007885','u3sicchh5ZpyTUpN1cJKNcAoabIWgY'
+'Supplier#000007926','ErzCF80K9Uy'
+'Supplier#000007998','LnASFBfYRFOo9d6d,asBvVq9Lo2P'
+'Supplier#000008090','eonbJZvoDFYBNUinYfp6yERIg'
+'Supplier#000008224','TWxt9f,LVER'
+'Supplier#000008231','IK7eGw Yj90sTdpsP,vcqWxLB'
+'Supplier#000008243','2AyePMkDqmzVzjGTizXthFLo8h EiudCMxOmIIG'
+'Supplier#000008323','75I18sZmASwm POeheRMdj9tmpyeQ,BfCXN5BIAb'
+'Supplier#000008366','h778cEj14BuW9OEKlvPTWq4iwASR6EBBXN7zeS8'
+'Supplier#000008532','Uc29q4,5xVdDOF87UZrxhr4xWS0ihEUXuh'
+'Supplier#000008595','MH0iB73GQ3z UW3O DbCbqmc'
+'Supplier#000008610','SgVgP90vP452sUNTgzL9zKwXHXAzV6tV'
+'Supplier#000008683','gLuGcugfpJSeGQARnaHNCaWnGaqsNnjyl20'
+'Supplier#000008705','aE,trRNdPx,4yinTD9O3DebDIp'
+'Supplier#000008742','HmPlQEzKCPEcTUL14,kKq'
+'Supplier#000008841','I 85Lu1sekbg2xrSIzm0'
+'Supplier#000008872','8D 45GgxJO2OwwYP9S4AaXJKvDwPfLM'
+'Supplier#000008879','rDSA,D9oPM,65NMWEFrmGKAu'
+'Supplier#000008967','2kwEHyMG 7FwozNImAUE6mH0hYtqYculJM'
+'Supplier#000008972','w2vF6 D5YZO3visPXsqVfLADTK'
+'Supplier#000009032','qK,trB6Sdy4Dz1BRUFNy'
+'Supplier#000009043','57OPvKH4qyXIZ7IzYeCaw11a5N1Ki9f1WWmVQ,'
+'Supplier#000009278','RqYTzgxj93CLX 0mcYfCENOefD'
+'Supplier#000009326','XmiC,uy36B9,fb0zhcjaagiXQutg'
+'Supplier#000009430','igRqmneFt '
+'Supplier#000009549','h3RVchUf8MzY46IzbZ0ng09'
+'Supplier#000009601','51m637bO,Rw5DnHWFUvLacRx9'
+'Supplier#000009709','rRnCbHYgDgl9PZYnyWKVYSUW0vKg'
+'Supplier#000009753','wLhVEcRmd7PkJF4FBnGK7Z'
+'Supplier#000009799',' 4wNjXGa4OKWl'
+'Supplier#000009811','E3iuyq7UnZxU7oPZIe2Gu6'
+'Supplier#000009812','APFRMy3lCbgFga53n5t9DxzFPQPgnjrGt32'
+'Supplier#000009846','57sNwJJ3PtBDu,hMPP5QvpcOcSNRXn3PypJJrh'
+'Supplier#000009899','7XdpAHrzr1t,UQFZE'
+'Supplier#000009974','7wJ,J5DKcxSU4Kp1cQLpbcAvB5AsvKT'
+---- TYPES
+string, string
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q21.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q21.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q21.test
new file mode 100644
index 0000000..24c1c41
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q21.test
@@ -0,0 +1,145 @@
+====
+---- QUERY: TPCH-Q21
+# Q21 - Suppliers Who Kept Orders Waiting Query
+select
+  s_name,
+  count(*) as numwait
+from
+  supplier s,
+  customer c,
+  c.c_orders o,
+  o.o_lineitems l1,
+  region.r_nations n
+where
+  s_suppkey = l1.l_suppkey
+  and o_orderstatus = 'F'
+  and l1.l_receiptdate > l1.l_commitdate
+  and exists (
+    select
+      *
+    from
+      o.o_lineitems l2
+    where
+      l2.l_suppkey <> l1.l_suppkey
+  )
+  and not exists (
+    select
+      *
+    from
+      o.o_lineitems l3
+    where
+      l3.l_suppkey <> l1.l_suppkey
+      and l3.l_receiptdate > l3.l_commitdate
+  )
+  and s_nationkey = n_nationkey
+  and n_name = 'SAUDI ARABIA'
+group by
+  s_name
+order by
+  numwait desc,
+  s_name
+limit 100
+---- RESULTS
+'Supplier#000002829',20
+'Supplier#000005808',18
+'Supplier#000000262',17
+'Supplier#000000496',17
+'Supplier#000002160',17
+'Supplier#000002301',17
+'Supplier#000002540',17
+'Supplier#000003063',17
+'Supplier#000005178',17
+'Supplier#000008331',17
+'Supplier#000002005',16
+'Supplier#000002095',16
+'Supplier#000005799',16
+'Supplier#000005842',16
+'Supplier#000006450',16
+'Supplier#000006939',16
+'Supplier#000009200',16
+'Supplier#000009727',16
+'Supplier#000000486',15
+'Supplier#000000565',15
+'Supplier#000001046',15
+'Supplier#000001047',15
+'Supplier#000001161',15
+'Supplier#000001336',15
+'Supplier#000001435',15
+'Supplier#000003075',15
+'Supplier#000003335',15
+'Supplier#000005649',15
+'Supplier#000006027',15
+'Supplier#000006795',15
+'Supplier#000006800',15
+'Supplier#000006824',15
+'Supplier#000007131',15
+'Supplier#000007382',15
+'Supplier#000008913',15
+'Supplier#000009787',15
+'Supplier#000000633',14
+'Supplier#000001960',14
+'Supplier#000002323',14
+'Supplier#000002490',14
+'Supplier#000002993',14
+'Supplier#000003101',14
+'Supplier#000004489',14
+'Supplier#000005435',14
+'Supplier#000005583',14
+'Supplier#000005774',14
+'Supplier#000007579',14
+'Supplier#000008180',14
+'Supplier#000008695',14
+'Supplier#000009224',14
+'Supplier#000000357',13
+'Supplier#000000436',13
+'Supplier#000000610',13
+'Supplier#000000788',13
+'Supplier#000000889',13
+'Supplier#000001062',13
+'Supplier#000001498',13
+'Supplier#000002056',13
+'Supplier#000002312',13
+'Supplier#000002344',13
+'Supplier#000002596',13
+'Supplier#000002615',13
+'Supplier#000002978',13
+'Supplier#000003048',13
+'Supplier#000003234',13
+'Supplier#000003727',13
+'Supplier#000003806',13
+'Supplier#000004472',13
+'Supplier#000005236',13
+'Supplier#000005906',13
+'Supplier#000006241',13
+'Supplier#000006326',13
+'Supplier#000006384',13
+'Supplier#000006394',13
+'Supplier#000006624',13
+'Supplier#000006629',13
+'Supplier#000006682',13
+'Supplier#000006737',13
+'Supplier#000006825',13
+'Supplier#000007021',13
+'Supplier#000007417',13
+'Supplier#000007497',13
+'Supplier#000007602',13
+'Supplier#000008134',13
+'Supplier#000008234',13
+'Supplier#000009435',13
+'Supplier#000009436',13
+'Supplier#000009564',13
+'Supplier#000009896',13
+'Supplier#000000379',12
+'Supplier#000000673',12
+'Supplier#000000762',12
+'Supplier#000000811',12
+'Supplier#000000821',12
+'Supplier#000001337',12
+'Supplier#000001916',12
+'Supplier#000001925',12
+'Supplier#000002039',12
+'Supplier#000002357',12
+'Supplier#000002483',12
+---- TYPES
+string, bigint
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q22.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q22.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q22.test
new file mode 100644
index 0000000..0312be3
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q22.test
@@ -0,0 +1,46 @@
+====
+---- QUERY: TPCH-Q22
+# Q22 - Global Sales Opportunity Query
+select
+  cntrycode,
+  count(*) as numcust,
+  sum(c_acctbal) as totacctbal
+from (
+  select
+    substr(c_phone, 1, 2) as cntrycode,
+    c_acctbal
+  from
+    customer c
+  where
+    substr(c_phone, 1, 2) in ('13', '31', '23', '29', '30', '18', '17')
+    and c_acctbal > (
+      select
+        avg(c_acctbal)
+      from
+        customer c
+      where
+        c_acctbal > 0.00
+        and substr(c_phone, 1, 2) in ('13', '31', '23', '29', '30', '18', '17')
+      )
+    and not exists (
+      select
+        o_orderkey
+      from
+        c.c_orders
+    )
+  ) as custsale
+group by
+  cntrycode
+order by
+  cntrycode
+---- RESULTS
+'13',888,6737713.99
+'17',861,6460573.72
+'18',964,7236687.40
+'23',892,6701457.95
+'29',948,7158866.63
+'30',909,6808436.13
+'31',922,6806670.18
+---- TYPES
+string, bigint, decimal
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q3.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q3.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q3.test
new file mode 100644
index 0000000..0c5b4e8
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q3.test
@@ -0,0 +1,38 @@
+====
+---- QUERY: TPCH-Q3
+# Q3 - Shipping Priority Query
+select
+  o_orderkey,
+  sum(l_extendedprice * (1 - l_discount)) as revenue,
+  o_orderdate,
+  o_shippriority
+from
+  customer c,
+  c.c_orders o,
+  o.o_lineitems l
+where
+  c_mktsegment = 'BUILDING'
+  and o_orderdate < '1995-03-15'
+  and l_shipdate > '1995-03-15'
+group by
+  o_orderkey,
+  o_orderdate,
+  o_shippriority
+order by
+  revenue desc,
+  o_orderdate
+limit 10
+---- RESULTS
+2456423,406181.0111,'1995-03-05',0
+3459808,405838.6989,'1995-03-04',0
+492164,390324.0610,'1995-02-19',0
+1188320,384537.9359,'1995-03-09',0
+2435712,378673.0558,'1995-02-26',0
+4878020,378376.7952,'1995-03-12',0
+5521732,375153.9215,'1995-03-13',0
+2628192,373133.3094,'1995-02-22',0
+993600,371407.4595,'1995-03-05',0
+2300070,367371.1452,'1995-03-13',0
+---- TYPES
+BIGINT, DECIMAL, STRING, INT
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q4.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q4.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q4.test
new file mode 100644
index 0000000..4b9d960
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q4.test
@@ -0,0 +1,33 @@
+====
+---- QUERY: TPCH-Q4
+# Q4 - Order Priority Checking Query
+select
+  o_orderpriority,
+  count(*) as order_count
+from
+  customer c,
+  c.c_orders o
+where
+  o_orderdate >= '1993-07-01'
+  and o_orderdate < '1993-10-01'
+  and exists (
+    select
+      *
+    from
+      o.o_lineitems
+    where
+      l_commitdate < l_receiptdate
+    )
+group by
+  o_orderpriority
+order by
+  o_orderpriority
+---- RESULTS
+'1-URGENT',10594
+'2-HIGH',10476
+'3-MEDIUM',10410
+'4-NOT SPECIFIED',10556
+'5-LOW',10487
+---- TYPES
+string, bigint
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q5.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q5.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q5.test
new file mode 100644
index 0000000..fa66e09
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q5.test
@@ -0,0 +1,33 @@
+====
+---- QUERY: TPCH-Q5
+# Q5 - Local Supplier Volume Query
+select
+  n_name,
+  sum(l_extendedprice * (1 - l_discount)) as revenue
+from
+  customer c,
+  c.c_orders o,
+  o.o_lineitems l,
+  supplier s,
+  region r,
+  r.r_nations n
+where
+  l_suppkey = s_suppkey
+  and c_nationkey = s_nationkey
+  and s_nationkey = n_nationkey
+  and r_name = 'ASIA'
+  and o_orderdate >= '1994-01-01'
+  and o_orderdate < '1995-01-01'
+group by
+  n_name
+order by
+  revenue desc
+---- RESULTS
+'INDONESIA',55502041.1697
+'VIETNAM',55295086.9967
+'CHINA',53724494.2566
+'INDIA',52035512.0002
+'JAPAN',45410175.6954
+---- TYPES
+string, decimal
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q6.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q6.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q6.test
new file mode 100644
index 0000000..efb43e8
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q6.test
@@ -0,0 +1,17 @@
+====
+---- QUERY: TPCH-Q6
+# Q6 - Forecasting Revenue Change Query
+select
+  sum(l_extendedprice * l_discount) as revenue
+from
+  customer.c_orders.o_lineitems
+where
+  l_shipdate >= '1994-01-01'
+  and l_shipdate < '1995-01-01'
+  and l_discount between 0.05 and 0.07
+  and l_quantity < 24
+---- RESULTS
+123141078.2283
+---- TYPES
+decimal
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q7.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q7.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q7.test
new file mode 100644
index 0000000..0c5878d
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q7.test
@@ -0,0 +1,47 @@
+====
+---- QUERY: TPCH-Q7
+# Q7 - Volume Shipping Query
+select
+  supp_nation,
+  cust_nation,
+  l_year,
+  sum(volume) as revenue
+from (
+  select
+    n1.n_name as supp_nation,
+    n2.n_name as cust_nation,
+    year(l_shipdate) as l_year,
+    l_extendedprice * (1 - l_discount) as volume
+  from
+    customer c,
+    c.c_orders o,
+    o.o_lineitems l,
+    supplier s,
+    region.r_nations n1,
+    region.r_nations n2
+  where
+    s_suppkey = l_suppkey
+    and s_nationkey = n1.n_nationkey
+    and c_nationkey = n2.n_nationkey
+    and (
+      (n1.n_name = 'FRANCE' and n2.n_name = 'GERMANY')
+      or (n1.n_name = 'GERMANY' and n2.n_name = 'FRANCE')
+    )
+    and l_shipdate between '1995-01-01' and '1996-12-31'
+  ) as shipping
+group by
+  supp_nation,
+  cust_nation,
+  l_year
+order by
+  supp_nation,
+  cust_nation,
+  l_year
+---- RESULTS
+'FRANCE','GERMANY',1995,54639732.7336
+'FRANCE','GERMANY',1996,54633083.3076
+'GERMANY','FRANCE',1995,52531746.6697
+'GERMANY','FRANCE',1996,52520549.0224
+---- TYPES
+STRING, STRING, INT, DECIMAL
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q8.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q8.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q8.test
new file mode 100644
index 0000000..94d91a6
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q8.test
@@ -0,0 +1,43 @@
+====
+---- QUERY: TPCH-Q8
+# Q8 - National Market Share Query
+select
+  o_year,
+  sum(case
+    when nation = 'BRAZIL'
+    then volume
+    else 0
+  end) / sum(volume) as mkt_share
+from (
+  select
+    year(o_orderdate) as o_year,
+    l_extendedprice * (1 - l_discount) as volume,
+    n2.n_name as nation
+  from
+    customer c,
+    c.c_orders o,
+    o.o_lineitems l,
+    supplier s,
+    part p,
+    region r,
+    r.r_nations n1,
+    region.r_nations n2
+  where
+    p_partkey = l_partkey
+    and s_suppkey = l_suppkey
+    and c_nationkey = n1.n_nationkey
+    and r_name = 'AMERICA'
+    and s_nationkey = n2.n_nationkey
+    and o_orderdate between '1995-01-01' and '1996-12-31'
+    and p_type = 'ECONOMY ANODIZED STEEL'
+  ) as all_nations
+group by
+  o_year
+order by
+  o_year
+---- RESULTS
+1995,0.0344
+1996,0.0414
+---- TYPES
+int, decimal
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q9.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q9.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q9.test
new file mode 100644
index 0000000..0290433
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q9.test
@@ -0,0 +1,211 @@
+====
+---- QUERY: TPCH-Q9
+# Q9 - Product Type Measure Query
+select
+  nation,
+  o_year,
+  sum(amount) as sum_profit
+from(
+  select
+    n_name as nation,
+    year(o_orderdate) as o_year,
+    l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity as amount
+  from
+    customer.c_orders o,
+    o.o_lineitems l,
+    supplier s,
+    s.s_partsupps ps,
+    part p,
+    region.r_nations n
+  where
+    s_suppkey = l_suppkey
+    and ps_partkey = l_partkey
+    and p_partkey = l_partkey
+    and s_nationkey = n_nationkey
+    and p_name like '%green%'
+  ) as profit
+group by
+  nation,
+  o_year
+order by
+  nation,
+  o_year desc
+---- RESULTS
+'ALGERIA',1998,27136900.1803
+'ALGERIA',1997,48611833.4962
+'ALGERIA',1996,48285482.6782
+'ALGERIA',1995,44402273.5999
+'ALGERIA',1994,48694008.0668
+'ALGERIA',1993,46044207.7838
+'ALGERIA',1992,45636849.4881
+'ARGENTINA',1998,28341663.7848
+'ARGENTINA',1997,47143964.1176
+'ARGENTINA',1996,45255278.6021
+'ARGENTINA',1995,45631769.2054
+'ARGENTINA',1994,48268856.3547
+'ARGENTINA',1993,48605593.6162
+'ARGENTINA',1992,46654240.7487
+'BRAZIL',1998,26527736.3960
+'BRAZIL',1997,45640660.7677
+'BRAZIL',1996,45090647.1630
+'BRAZIL',1995,44015888.5132
+'BRAZIL',1994,44854218.8932
+'BRAZIL',1993,45766603.7379
+'BRAZIL',1992,45280216.8027
+'CANADA',1998,26828985.3944
+'CANADA',1997,44849954.3186
+'CANADA',1996,46307936.1108
+'CANADA',1995,47311993.0441
+'CANADA',1994,46691491.9596
+'CANADA',1993,46634791.1121
+'CANADA',1992,45873849.6882
+'CHINA',1998,27510180.1657
+'CHINA',1997,46123865.4097
+'CHINA',1996,49532807.0601
+'CHINA',1995,46734651.4838
+'CHINA',1994,46397896.6097
+'CHINA',1993,49634673.9463
+'CHINA',1992,46949457.6426
+'EGYPT',1998,28401491.7968
+'EGYPT',1997,47674857.6783
+'EGYPT',1996,47745727.5450
+'EGYPT',1995,45897160.6783
+'EGYPT',1994,47194895.2280
+'EGYPT',1993,49133627.6471
+'EGYPT',1992,47000574.5027
+'ETHIOPIA',1998,25135046.1377
+'ETHIOPIA',1997,43010596.0838
+'ETHIOPIA',1996,43636287.1922
+'ETHIOPIA',1995,43575757.3343
+'ETHIOPIA',1994,41597208.5283
+'ETHIOPIA',1993,42622804.1616
+'ETHIOPIA',1992,44385735.6813
+'FRANCE',1998,26210392.2804
+'FRANCE',1997,42392969.4731
+'FRANCE',1996,43306317.9749
+'FRANCE',1995,46377408.4328
+'FRANCE',1994,43447352.9922
+'FRANCE',1993,43729961.0639
+'FRANCE',1992,44052308.4290
+'GERMANY',1998,25991257.1071
+'GERMANY',1997,43968355.8079
+'GERMANY',1996,45882074.8049
+'GERMANY',1995,43314338.3077
+'GERMANY',1994,44616995.4369
+'GERMANY',1993,45126645.9113
+'GERMANY',1992,44361141.2107
+'INDIA',1998,29626417.2379
+'INDIA',1997,51386111.3448
+'INDIA',1996,47571018.5122
+'INDIA',1995,49344062.2829
+'INDIA',1994,50106952.4261
+'INDIA',1993,48112766.6987
+'INDIA',1992,47914303.1234
+'INDONESIA',1998,27734909.6763
+'INDONESIA',1997,44593812.9863
+'INDONESIA',1996,44746729.8078
+'INDONESIA',1995,45593622.6993
+'INDONESIA',1994,45988483.8772
+'INDONESIA',1993,46147963.7895
+'INDONESIA',1992,45185777.0688
+'IRAN',1998,26661608.9301
+'IRAN',1997,45019114.1696
+'IRAN',1996,45891397.0992
+'IRAN',1995,44414285.2348
+'IRAN',1994,43696360.4795
+'IRAN',1993,45362775.8094
+'IRAN',1992,43052338.4143
+'IRAQ',1998,31188498.1914
+'IRAQ',1997,48585307.5222
+'IRAQ',1996,50036593.8404
+'IRAQ',1995,48774801.7275
+'IRAQ',1994,48795847.2310
+'IRAQ',1993,47435691.5082
+'IRAQ',1992,47562355.6571
+'JAPAN',1998,24694102.1720
+'JAPAN',1997,42377052.3454
+'JAPAN',1996,40267778.9094
+'JAPAN',1995,40925317.4650
+'JAPAN',1994,41159518.3058
+'JAPAN',1993,39589074.2771
+'JAPAN',1992,39113493.9052
+'JORDAN',1998,23489867.7893
+'JORDAN',1997,41615962.6619
+'JORDAN',1996,41860855.4684
+'JORDAN',1995,39931672.0908
+'JORDAN',1994,40707555.4638
+'JORDAN',1993,39060405.4658
+'JORDAN',1992,41657604.2684
+'KENYA',1998,25566337.4303
+'KENYA',1997,43108847.9024
+'KENYA',1996,43482953.5430
+'KENYA',1995,42517988.9814
+'KENYA',1994,43612479.4523
+'KENYA',1993,42724038.7571
+'KENYA',1992,43217106.2068
+'MOROCCO',1998,24915496.8756
+'MOROCCO',1997,42698382.8550
+'MOROCCO',1996,42986113.5049
+'MOROCCO',1995,42316089.1593
+'MOROCCO',1994,43458604.6029
+'MOROCCO',1993,42672288.0699
+'MOROCCO',1992,42800781.6415
+'MOZAMBIQUE',1998,28279876.0301
+'MOZAMBIQUE',1997,51159216.2298
+'MOZAMBIQUE',1996,48072525.0645
+'MOZAMBIQUE',1995,48905200.6007
+'MOZAMBIQUE',1994,46092076.2805
+'MOZAMBIQUE',1993,48555926.2669
+'MOZAMBIQUE',1992,47809075.1192
+'PERU',1998,26713966.2678
+'PERU',1997,48324008.6011
+'PERU',1996,50310008.8629
+'PERU',1995,49647080.9629
+'PERU',1994,46420910.2773
+'PERU',1993,51536906.2487
+'PERU',1992,47711665.3137
+'ROMANIA',1998,27271993.1010
+'ROMANIA',1997,45063059.1953
+'ROMANIA',1996,47492335.0323
+'ROMANIA',1995,45710636.2909
+'ROMANIA',1994,46088041.1066
+'ROMANIA',1993,47515092.5613
+'ROMANIA',1992,44111439.8044
+'RUSSIA',1998,27935323.7271
+'RUSSIA',1997,48222347.2924
+'RUSSIA',1996,47553559.4932
+'RUSSIA',1995,46755990.0976
+'RUSSIA',1994,48000515.6191
+'RUSSIA',1993,48569624.5082
+'RUSSIA',1992,47672831.5329
+'SAUDI ARABIA',1998,27113516.8424
+'SAUDI ARABIA',1997,46690468.9649
+'SAUDI ARABIA',1996,47775782.6670
+'SAUDI ARABIA',1995,46657107.8287
+'SAUDI ARABIA',1994,48181672.8100
+'SAUDI ARABIA',1993,45692556.4438
+'SAUDI ARABIA',1992,48924913.2717
+'UNITED KINGDOM',1998,26366682.8786
+'UNITED KINGDOM',1997,44518130.1851
+'UNITED KINGDOM',1996,45539729.6166
+'UNITED KINGDOM',1995,46845879.3390
+'UNITED KINGDOM',1994,43081609.5737
+'UNITED KINGDOM',1993,44770146.7555
+'UNITED KINGDOM',1992,44123402.5484
+'UNITED STATES',1998,27826593.6825
+'UNITED STATES',1997,46638572.3648
+'UNITED STATES',1996,46688280.5474
+'UNITED STATES',1995,48951591.6156
+'UNITED STATES',1994,45099092.0598
+'UNITED STATES',1993,46181600.5278
+'UNITED STATES',1992,46168214.0901
+'VIETNAM',1998,27281931.0011
+'VIETNAM',1997,48735914.1796
+'VIETNAM',1996,47824595.9040
+'VIETNAM',1995,48235135.8016
+'VIETNAM',1994,47729256.3324
+'VIETNAM',1993,45352676.8672
+'VIETNAM',1992,47846355.6485
+---- TYPES
+STRING, INT, DECIMAL
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/tests/query_test/test_tpch_nested_queries.py
----------------------------------------------------------------------
diff --git a/tests/query_test/test_tpch_nested_queries.py b/tests/query_test/test_tpch_nested_queries.py
index 28e6ac3..84c7b46 100644
--- a/tests/query_test/test_tpch_nested_queries.py
+++ b/tests/query_test/test_tpch_nested_queries.py
@@ -34,67 +34,67 @@ class TestTpchNestedQuery(ImpalaTestSuite):
         v.get_value('table_format').file_format in ['parquet'])
 
   def test_tpch_q1(self, vector):
-    self.run_test_case('tpch-q1', vector)
+    self.run_test_case(self.get_workload() + '-q1', vector)
 
   def test_tpch_q2(self, vector):
-    self.run_test_case('tpch-q2', vector)
+    self.run_test_case(self.get_workload() + '-q2', vector)
 
   def test_tpch_q3(self, vector):
-    self.run_test_case('tpch-q3', vector)
+    self.run_test_case(self.get_workload() + '-q3', vector)
 
   def test_tpch_q4(self, vector):
-    self.run_test_case('tpch-q4', vector)
+    self.run_test_case(self.get_workload() + '-q4', vector)
 
   def test_tpch_q5(self, vector):
-    self.run_test_case('tpch-q5', vector)
+    self.run_test_case(self.get_workload() + '-q5', vector)
 
   def test_tpch_q6(self, vector):
-    self.run_test_case('tpch-q6', vector)
+    self.run_test_case(self.get_workload() + '-q6', vector)
 
   def test_tpch_q7(self, vector):
-    self.run_test_case('tpch-q7', vector)
+    self.run_test_case(self.get_workload() + '-q7', vector)
 
   def test_tpch_q8(self, vector):
-    self.run_test_case('tpch-q8', vector)
+    self.run_test_case(self.get_workload() + '-q8', vector)
 
   def test_tpch_q9(self, vector):
-    self.run_test_case('tpch-q9', vector)
+    self.run_test_case(self.get_workload() + '-q9', vector)
 
   def test_tpch_q10(self, vector):
-    self.run_test_case('tpch-q10', vector)
+    self.run_test_case(self.get_workload() + '-q10', vector)
 
   def test_tpch_q11(self, vector):
-    self.run_test_case('tpch-q11', vector)
+    self.run_test_case(self.get_workload() + '-q11', vector)
 
   def test_tpch_q12(self, vector):
-    self.run_test_case('tpch-q12', vector)
+    self.run_test_case(self.get_workload() + '-q12', vector)
 
   def test_tpch_q13(self, vector):
-    self.run_test_case('tpch-q13', vector)
+    self.run_test_case(self.get_workload() + '-q13', vector)
 
   def test_tpch_q14(self, vector):
-    self.run_test_case('tpch-q14', vector)
+    self.run_test_case(self.get_workload() + '-q14', vector)
 
   def test_tpch_q15(self, vector):
-    self.run_test_case('tpch-q15', vector)
+    self.run_test_case(self.get_workload() + '-q15', vector)
 
   def test_tpch_q16(self, vector):
-    self.run_test_case('tpch-q16', vector)
+    self.run_test_case(self.get_workload() + '-q16', vector)
 
   def test_tpch_q17(self, vector):
-    self.run_test_case('tpch-q17', vector)
+    self.run_test_case(self.get_workload() + '-q17', vector)
 
   def test_tpch_q18(self, vector):
-    self.run_test_case('tpch-q18', vector)
+    self.run_test_case(self.get_workload() + '-q18', vector)
 
   def test_tpch_q19(self, vector):
-    self.run_test_case('tpch-q19', vector)
+    self.run_test_case(self.get_workload() + '-q19', vector)
 
   def test_tpch_q20(self, vector):
-    self.run_test_case('tpch-q20', vector)
+    self.run_test_case(self.get_workload() + '-q20', vector)
 
   def test_tpch_q21(self, vector):
-    self.run_test_case('tpch-q21', vector)
+    self.run_test_case(self.get_workload() + '-q21', vector)
 
   def test_tpch_q22(self, vector):
-    self.run_test_case('tpch-q22', vector)
+    self.run_test_case(self.get_workload() + '-q22', vector)


[05/12] incubator-impala git commit: IMPALA-5617: Include full workload name in tpch_nested query filenames

Posted by kw...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q16.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q16.test b/testdata/workloads/tpch_nested/queries/tpch-q16.test
deleted file mode 100644
index 155e2b1..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q16.test
+++ /dev/null
@@ -1,18345 +0,0 @@
-====
----- QUERY: TPCH-Q16
-# Q16 - Parts/Supplier Relation Query
-select
-  p_brand,
-  p_type,
-  p_size,
-  count(distinct s_suppkey) as supplier_cnt
-from
-  supplier s,
-  s.s_partsupps ps,
-  part p
-where
-  p_partkey = ps_partkey
-  and p_brand <> 'Brand#45'
-  and p_type not like 'MEDIUM POLISHED%'
-  and p_size in (49, 14, 23, 45, 19, 3, 36, 9)
-  and s_comment not like '%Customer%Complaints%'
-group by
-  p_brand,
-  p_type,
-  p_size
-order by
-  supplier_cnt desc,
-  p_brand,
-  p_type,
-  p_size
----- RESULTS
-'Brand#41','MEDIUM BRUSHED TIN',3,28
-'Brand#54','STANDARD BRUSHED COPPER',14,27
-'Brand#11','STANDARD BRUSHED TIN',23,24
-'Brand#11','STANDARD BURNISHED BRASS',36,24
-'Brand#15','MEDIUM ANODIZED NICKEL',3,24
-'Brand#15','SMALL ANODIZED BRASS',45,24
-'Brand#15','SMALL BURNISHED NICKEL',19,24
-'Brand#21','MEDIUM ANODIZED COPPER',3,24
-'Brand#22','SMALL BRUSHED NICKEL',3,24
-'Brand#22','SMALL BURNISHED BRASS',19,24
-'Brand#25','MEDIUM BURNISHED COPPER',36,24
-'Brand#31','PROMO POLISHED COPPER',36,24
-'Brand#33','LARGE POLISHED TIN',23,24
-'Brand#33','PROMO POLISHED STEEL',14,24
-'Brand#35','PROMO BRUSHED NICKEL',14,24
-'Brand#41','ECONOMY BRUSHED STEEL',9,24
-'Brand#41','ECONOMY POLISHED TIN',19,24
-'Brand#41','LARGE PLATED COPPER',36,24
-'Brand#42','ECONOMY PLATED BRASS',3,24
-'Brand#42','STANDARD POLISHED TIN',49,24
-'Brand#43','PROMO BRUSHED TIN',3,24
-'Brand#43','SMALL ANODIZED COPPER',36,24
-'Brand#44','STANDARD POLISHED NICKEL',3,24
-'Brand#52','ECONOMY PLATED TIN',14,24
-'Brand#52','STANDARD BURNISHED NICKEL',3,24
-'Brand#53','MEDIUM ANODIZED STEEL',14,24
-'Brand#14','PROMO ANODIZED NICKEL',45,23
-'Brand#32','ECONOMY PLATED BRASS',9,23
-'Brand#52','SMALL ANODIZED COPPER',3,23
-'Brand#11','ECONOMY BRUSHED COPPER',45,20
-'Brand#11','ECONOMY PLATED BRASS',23,20
-'Brand#11','LARGE BRUSHED COPPER',49,20
-'Brand#11','LARGE POLISHED COPPER',49,20
-'Brand#12','STANDARD ANODIZED TIN',49,20
-'Brand#12','STANDARD PLATED BRASS',19,20
-'Brand#13','ECONOMY BRUSHED BRASS',9,20
-'Brand#13','ECONOMY BURNISHED STEEL',14,20
-'Brand#13','LARGE BURNISHED NICKEL',19,20
-'Brand#13','MEDIUM BURNISHED COPPER',36,20
-'Brand#13','SMALL BRUSHED TIN',45,20
-'Brand#13','STANDARD ANODIZED COPPER',3,20
-'Brand#13','STANDARD PLATED NICKEL',23,20
-'Brand#14','ECONOMY ANODIZED COPPER',14,20
-'Brand#14','ECONOMY PLATED TIN',36,20
-'Brand#14','ECONOMY POLISHED NICKEL',3,20
-'Brand#14','MEDIUM ANODIZED NICKEL',3,20
-'Brand#14','SMALL POLISHED TIN',14,20
-'Brand#15','MEDIUM ANODIZED COPPER',9,20
-'Brand#15','MEDIUM PLATED TIN',23,20
-'Brand#15','PROMO PLATED BRASS',14,20
-'Brand#15','SMALL ANODIZED COPPER',45,20
-'Brand#15','SMALL PLATED COPPER',49,20
-'Brand#15','STANDARD PLATED TIN',3,20
-'Brand#21','LARGE ANODIZED COPPER',36,20
-'Brand#21','LARGE BRUSHED TIN',3,20
-'Brand#21','MEDIUM ANODIZED COPPER',14,20
-'Brand#21','PROMO BRUSHED TIN',36,20
-'Brand#21','PROMO POLISHED NICKEL',45,20
-'Brand#21','SMALL ANODIZED COPPER',9,20
-'Brand#21','SMALL POLISHED NICKEL',23,20
-'Brand#22','LARGE ANODIZED COPPER',36,20
-'Brand#22','LARGE BRUSHED COPPER',49,20
-'Brand#22','PROMO ANODIZED TIN',49,20
-'Brand#22','PROMO POLISHED BRASS',45,20
-'Brand#22','SMALL BURNISHED STEEL',45,20
-'Brand#23','MEDIUM ANODIZED STEEL',45,20
-'Brand#23','PROMO POLISHED STEEL',23,20
-'Brand#23','STANDARD BRUSHED TIN',14,20
-'Brand#23','STANDARD PLATED NICKEL',36,20
-'Brand#24','PROMO PLATED COPPER',49,20
-'Brand#24','PROMO PLATED STEEL',49,20
-'Brand#24','PROMO POLISHED STEEL',9,20
-'Brand#24','STANDARD BRUSHED TIN',36,20
-'Brand#25','LARGE ANODIZED BRASS',3,20
-'Brand#25','PROMO BURNISHED TIN',3,20
-'Brand#31','ECONOMY POLISHED NICKEL',3,20
-'Brand#31','MEDIUM PLATED TIN',45,20
-'Brand#31','SMALL ANODIZED STEEL',14,20
-'Brand#32','ECONOMY ANODIZED COPPER',36,20
-'Brand#32','ECONOMY BRUSHED NICKEL',49,20
-'Brand#32','LARGE ANODIZED TIN',19,20
-'Brand#32','MEDIUM BURNISHED COPPER',19,20
-'Brand#32','SMALL ANODIZED STEEL',45,20
-'Brand#33','ECONOMY POLISHED COPPER',19,20
-'Brand#33','PROMO PLATED NICKEL',14,20
-'Brand#33','SMALL POLISHED TIN',9,20
-'Brand#33','STANDARD ANODIZED BRASS',49,20
-'Brand#33','STANDARD BURNISHED BRASS',45,20
-'Brand#34','ECONOMY BRUSHED NICKEL',49,20
-'Brand#34','LARGE BRUSHED BRASS',19,20
-'Brand#34','SMALL BRUSHED TIN',3,20
-'Brand#34','STANDARD PLATED COPPER',9,20
-'Brand#35','LARGE ANODIZED NICKEL',3,20
-'Brand#35','MEDIUM ANODIZED BRASS',45,20
-'Brand#35','MEDIUM ANODIZED STEEL',23,20
-'Brand#35','PROMO ANODIZED COPPER',49,20
-'Brand#35','SMALL POLISHED COPPER',14,20
-'Brand#41','LARGE ANODIZED STEEL',3,20
-'Brand#41','LARGE BRUSHED NICKEL',23,20
-'Brand#41','LARGE BURNISHED COPPER',3,20
-'Brand#41','MEDIUM PLATED STEEL',19,20
-'Brand#41','SMALL BURNISHED COPPER',23,20
-'Brand#42','MEDIUM BURNISHED BRASS',14,20
-'Brand#42','SMALL BURNISHED COPPER',3,20
-'Brand#43','ECONOMY POLISHED COPPER',9,20
-'Brand#43','SMALL PLATED STEEL',3,20
-'Brand#43','STANDARD BURNISHED TIN',23,20
-'Brand#44','LARGE ANODIZED STEEL',23,20
-'Brand#44','PROMO ANODIZED TIN',23,20
-'Brand#51','ECONOMY BRUSHED BRASS',49,20
-'Brand#51','ECONOMY POLISHED NICKEL',9,20
-'Brand#51','MEDIUM BRUSHED TIN',9,20
-'Brand#51','MEDIUM PLATED BRASS',9,20
-'Brand#51','PROMO BURNISHED BRASS',9,20
-'Brand#51','SMALL PLATED NICKEL',49,20
-'Brand#51','STANDARD ANODIZED NICKEL',49,20
-'Brand#51','STANDARD BRUSHED COPPER',3,20
-'Brand#52','ECONOMY ANODIZED BRASS',3,20
-'Brand#52','ECONOMY BRUSHED COPPER',49,20
-'Brand#52','LARGE ANODIZED NICKEL',45,20
-'Brand#52','MEDIUM ANODIZED TIN',23,20
-'Brand#52','MEDIUM BURNISHED TIN',45,20
-'Brand#52','SMALL PLATED COPPER',36,20
-'Brand#52','STANDARD ANODIZED BRASS',45,20
-'Brand#53','ECONOMY PLATED COPPER',45,20
-'Brand#53','PROMO ANODIZED COPPER',49,20
-'Brand#53','PROMO BRUSHED COPPER',23,20
-'Brand#53','PROMO PLATED TIN',19,20
-'Brand#53','PROMO POLISHED NICKEL',3,20
-'Brand#53','SMALL ANODIZED STEEL',9,20
-'Brand#53','SMALL BRUSHED COPPER',3,20
-'Brand#53','SMALL BRUSHED NICKEL',3,20
-'Brand#54','ECONOMY PLATED STEEL',9,20
-'Brand#54','ECONOMY POLISHED TIN',3,20
-'Brand#54','SMALL BRUSHED BRASS',19,20
-'Brand#55','MEDIUM ANODIZED COPPER',3,20
-'Brand#55','PROMO BURNISHED STEEL',14,20
-'Brand#55','PROMO POLISHED NICKEL',49,20
-'Brand#55','STANDARD ANODIZED BRASS',19,20
-'Brand#55','STANDARD BURNISHED COPPER',45,20
-'Brand#43','ECONOMY ANODIZED TIN',3,19
-'Brand#11','ECONOMY ANODIZED BRASS',14,16
-'Brand#11','ECONOMY ANODIZED BRASS',23,16
-'Brand#11','ECONOMY ANODIZED COPPER',14,16
-'Brand#11','ECONOMY BRUSHED BRASS',49,16
-'Brand#11','ECONOMY BRUSHED STEEL',19,16
-'Brand#11','ECONOMY BURNISHED NICKEL',23,16
-'Brand#11','LARGE ANODIZED COPPER',14,16
-'Brand#11','LARGE BRUSHED TIN',45,16
-'Brand#11','LARGE BURNISHED COPPER',23,16
-'Brand#11','LARGE BURNISHED NICKEL',36,16
-'Brand#11','LARGE PLATED STEEL',14,16
-'Brand#11','MEDIUM BRUSHED NICKEL',14,16
-'Brand#11','MEDIUM BRUSHED STEEL',49,16
-'Brand#11','MEDIUM BURNISHED NICKEL',49,16
-'Brand#11','MEDIUM BURNISHED TIN',3,16
-'Brand#11','MEDIUM PLATED COPPER',9,16
-'Brand#11','PROMO ANODIZED BRASS',19,16
-'Brand#11','PROMO ANODIZED BRASS',49,16
-'Brand#11','PROMO ANODIZED STEEL',45,16
-'Brand#11','PROMO PLATED BRASS',45,16
-'Brand#11','SMALL ANODIZED TIN',45,16
-'Brand#11','SMALL BRUSHED STEEL',49,16
-'Brand#11','SMALL BURNISHED COPPER',19,16
-'Brand#11','SMALL BURNISHED COPPER',45,16
-'Brand#11','SMALL BURNISHED NICKEL',14,16
-'Brand#11','SMALL POLISHED NICKEL',36,16
-'Brand#11','STANDARD ANODIZED BRASS',19,16
-'Brand#11','STANDARD ANODIZED COPPER',14,16
-'Brand#11','STANDARD BRUSHED STEEL',45,16
-'Brand#11','STANDARD POLISHED NICKEL',23,16
-'Brand#12','ECONOMY ANODIZED TIN',14,16
-'Brand#12','ECONOMY BRUSHED COPPER',9,16
-'Brand#12','ECONOMY BRUSHED COPPER',36,16
-'Brand#12','ECONOMY BURNISHED BRASS',9,16
-'Brand#12','ECONOMY BURNISHED NICKEL',36,16
-'Brand#12','LARGE ANODIZED BRASS',14,16
-'Brand#12','LARGE ANODIZED COPPER',9,16
-'Brand#12','LARGE ANODIZED STEEL',23,16
-'Brand#12','LARGE BURNISHED TIN',36,16
-'Brand#12','LARGE PLATED COPPER',49,16
-'Brand#12','LARGE POLISHED COPPER',49,16
-'Brand#12','MEDIUM PLATED COPPER',19,16
-'Brand#12','MEDIUM PLATED NICKEL',23,16
-'Brand#12','PROMO ANODIZED BRASS',45,16
-'Brand#12','PROMO ANODIZED STEEL',49,16
-'Brand#12','PROMO BURNISHED STEEL',9,16
-'Brand#12','SMALL BRUSHED NICKEL',36,16
-'Brand#12','SMALL BRUSHED TIN',45,16
-'Brand#12','STANDARD ANODIZED BRASS',3,16
-'Brand#12','STANDARD ANODIZED NICKEL',14,16
-'Brand#12','STANDARD BRUSHED BRASS',3,16
-'Brand#12','STANDARD BRUSHED TIN',9,16
-'Brand#12','STANDARD BRUSHED TIN',36,16
-'Brand#12','STANDARD POLISHED COPPER',9,16
-'Brand#13','ECONOMY ANODIZED STEEL',45,16
-'Brand#13','ECONOMY POLISHED BRASS',3,16
-'Brand#13','LARGE BRUSHED NICKEL',23,16
-'Brand#13','LARGE BURNISHED NICKEL',9,16
-'Brand#13','MEDIUM BRUSHED STEEL',49,16
-'Brand#13','MEDIUM BURNISHED NICKEL',49,16
-'Brand#13','MEDIUM PLATED BRASS',49,16
-'Brand#13','PROMO ANODIZED BRASS',14,16
-'Brand#13','PROMO ANODIZED COPPER',3,16
-'Brand#13','SMALL ANODIZED STEEL',45,16
-'Brand#13','SMALL BURNISHED STEEL',19,16
-'Brand#13','SMALL PLATED BRASS',36,16
-'Brand#13','STANDARD ANODIZED BRASS',23,16
-'Brand#13','STANDARD ANODIZED STEEL',23,16
-'Brand#13','STANDARD BURNISHED BRASS',9,16
-'Brand#13','STANDARD PLATED NICKEL',9,16
-'Brand#13','STANDARD PLATED TIN',23,16
-'Brand#14','ECONOMY BRUSHED STEEL',3,16
-'Brand#14','ECONOMY PLATED NICKEL',9,16
-'Brand#14','ECONOMY PLATED STEEL',9,16
-'Brand#14','ECONOMY POLISHED NICKEL',19,16
-'Brand#14','LARGE ANODIZED COPPER',14,16
-'Brand#14','LARGE BRUSHED NICKEL',19,16
-'Brand#14','LARGE POLISHED STEEL',3,16
-'Brand#14','LARGE POLISHED TIN',23,16
-'Brand#14','MEDIUM BURNISHED COPPER',3,16
-'Brand#14','PROMO ANODIZED STEEL',36,16
-'Brand#14','PROMO PLATED BRASS',9,16
-'Brand#14','PROMO PLATED NICKEL',49,16
-'Brand#14','PROMO POLISHED BRASS',19,16
-'Brand#14','PROMO POLISHED STEEL',19,16
-'Brand#14','PROMO POLISHED TIN',45,16
-'Brand#14','SMALL BRUSHED BRASS',14,16
-'Brand#14','SMALL BURNISHED COPPER',45,16
-'Brand#14','STANDARD BRUSHED TIN',19,16
-'Brand#14','STANDARD PLATED COPPER',45,16
-'Brand#14','STANDARD PLATED TIN',9,16
-'Brand#14','STANDARD POLISHED TIN',49,16
-'Brand#15','ECONOMY BRUSHED STEEL',19,16
-'Brand#15','LARGE BRUSHED BRASS',14,16
-'Brand#15','LARGE BRUSHED STEEL',14,16
-'Brand#15','LARGE BURNISHED NICKEL',3,16
-'Brand#15','LARGE PLATED COPPER',49,16
-'Brand#15','PROMO ANODIZED NICKEL',3,16
-'Brand#15','PROMO BURNISHED TIN',49,16
-'Brand#15','PROMO PLATED STEEL',3,16
-'Brand#15','PROMO POLISHED STEEL',49,16
-'Brand#15','SMALL BRUSHED COPPER',9,16
-'Brand#15','SMALL BRUSHED NICKEL',23,16
-'Brand#15','SMALL PLATED BRASS',49,16
-'Brand#15','STANDARD ANODIZED COPPER',45,16
-'Brand#15','STANDARD BRUSHED COPPER',14,16
-'Brand#15','STANDARD PLATED TIN',36,16
-'Brand#21','ECONOMY ANODIZED STEEL',45,16
-'Brand#21','ECONOMY BRUSHED COPPER',9,16
-'Brand#21','ECONOMY POLISHED STEEL',19,16
-'Brand#21','LARGE ANODIZED STEEL',14,16
-'Brand#21','MEDIUM ANODIZED STEEL',36,16
-'Brand#21','PROMO POLISHED BRASS',14,16
-'Brand#21','PROMO POLISHED TIN',49,16
-'Brand#21','SMALL BRUSHED COPPER',3,16
-'Brand#21','SMALL PLATED STEEL',45,16
-'Brand#21','SMALL PLATED TIN',45,16
-'Brand#21','STANDARD POLISHED STEEL',36,16
-'Brand#22','ECONOMY BRUSHED BRASS',9,16
-'Brand#22','ECONOMY BRUSHED NICKEL',36,16
-'Brand#22','ECONOMY POLISHED TIN',36,16
-'Brand#22','LARGE BRUSHED COPPER',19,16
-'Brand#22','LARGE BRUSHED TIN',36,16
-'Brand#22','LARGE POLISHED COPPER',19,16
-'Brand#22','MEDIUM ANODIZED BRASS',23,16
-'Brand#22','MEDIUM ANODIZED NICKEL',9,16
-'Brand#22','MEDIUM BRUSHED NICKEL',14,16
-'Brand#22','MEDIUM PLATED NICKEL',23,16
-'Brand#22','PROMO ANODIZED TIN',45,16
-'Brand#22','PROMO POLISHED STEEL',49,16
-'Brand#22','SMALL BRUSHED NICKEL',45,16
-'Brand#22','SMALL POLISHED BRASS',36,16
-'Brand#22','SMALL POLISHED STEEL',9,16
-'Brand#22','STANDARD BURNISHED BRASS',45,16
-'Brand#22','STANDARD BURNISHED NICKEL',3,16
-'Brand#22','STANDARD PLATED BRASS',9,16
-'Brand#23','ECONOMY BRUSHED TIN',49,16
-'Brand#23','ECONOMY BURNISHED COPPER',45,16
-'Brand#23','ECONOMY BURNISHED NICKEL',19,16
-'Brand#23','ECONOMY BURNISHED TIN',9,16
-'Brand#23','ECONOMY PLATED BRASS',9,16
-'Brand#23','ECONOMY PLATED COPPER',14,16
-'Brand#23','LARGE ANODIZED STEEL',23,16
-'Brand#23','LARGE ANODIZED STEEL',49,16
-'Brand#23','LARGE BURNISHED COPPER',23,16
-'Brand#23','LARGE POLISHED NICKEL',9,16
-'Brand#23','MEDIUM BRUSHED STEEL',3,16
-'Brand#23','PROMO ANODIZED COPPER',19,16
-'Brand#23','PROMO ANODIZED TIN',3,16
-'Brand#23','PROMO BURNISHED COPPER',14,16
-'Brand#23','PROMO PLATED BRASS',3,16
-'Brand#23','SMALL ANODIZED BRASS',23,16
-'Brand#23','SMALL BRUSHED BRASS',45,16
-'Brand#23','SMALL POLISHED TIN',3,16
-'Brand#23','STANDARD BURNISHED COPPER',19,16
-'Brand#23','STANDARD BURNISHED NICKEL',49,16
-'Brand#23','STANDARD PLATED BRASS',9,16
-'Brand#23','STANDARD PLATED COPPER',45,16
-'Brand#23','STANDARD POLISHED BRASS',9,16
-'Brand#24','ECONOMY ANODIZED BRASS',3,16
-'Brand#24','ECONOMY BRUSHED COPPER',36,16
-'Brand#24','ECONOMY BRUSHED STEEL',14,16
-'Brand#24','ECONOMY POLISHED COPPER',36,16
-'Brand#24','ECONOMY POLISHED NICKEL',3,16
-'Brand#24','LARGE ANODIZED BRASS',23,16
-'Brand#24','LARGE BURNISHED BRASS',45,16
-'Brand#24','LARGE BURNISHED STEEL',14,16
-'Brand#24','LARGE PLATED TIN',9,16
-'Brand#24','MEDIUM BRUSHED NICKEL',49,16
-'Brand#24','MEDIUM BURNISHED STEEL',3,16
-'Brand#24','PROMO BURNISHED COPPER',49,16
-'Brand#24','PROMO BURNISHED STEEL',49,16
-'Brand#24','PROMO POLISHED STEEL',23,16
-'Brand#24','SMALL ANODIZED NICKEL',19,16
-'Brand#24','STANDARD BURNISHED COPPER',19,16
-'Brand#24','STANDARD BURNISHED STEEL',36,16
-'Brand#24','STANDARD PLATED NICKEL',23,16
-'Brand#24','STANDARD PLATED TIN',49,16
-'Brand#25','ECONOMY ANODIZED COPPER',14,16
-'Brand#25','ECONOMY BURNISHED NICKEL',9,16
-'Brand#25','ECONOMY PLATED TIN',14,16
-'Brand#25','ECONOMY POLISHED TIN',45,16
-'Brand#25','LARGE ANODIZED STEEL',9,16
-'Brand#25','LARGE ANODIZED TIN',45,16
-'Brand#25','LARGE BRUSHED NICKEL',36,16
-'Brand#25','LARGE BURNISHED NICKEL',14,16
-'Brand#25','LARGE POLISHED STEEL',19,16
-'Brand#25','MEDIUM BRUSHED COPPER',9,16
-'Brand#25','MEDIUM BURNISHED COPPER',49,16
-'Brand#25','MEDIUM BURNISHED TIN',3,16
-'Brand#25','MEDIUM PLATED STEEL',9,16
-'Brand#25','PROMO ANODIZED BRASS',49,16
-'Brand#25','PROMO ANODIZED STEEL',19,16
-'Brand#25','PROMO ANODIZED TIN',23,16
-'Brand#25','PROMO BURNISHED COPPER',49,16
-'Brand#25','PROMO POLISHED COPPER',14,16
-'Brand#25','SMALL ANODIZED COPPER',23,16
-'Brand#25','SMALL BRUSHED STEEL',23,16
-'Brand#25','SMALL POLISHED COPPER',23,16
-'Brand#25','STANDARD BURNISHED STEEL',23,16
-'Brand#25','STANDARD BURNISHED TIN',3,16
-'Brand#25','STANDARD BURNISHED TIN',36,16
-'Brand#25','STANDARD PLATED BRASS',45,16
-'Brand#25','STANDARD PLATED COPPER',49,16
-'Brand#31','ECONOMY ANODIZED BRASS',45,16
-'Brand#31','ECONOMY BRUSHED COPPER',14,16
-'Brand#31','ECONOMY BRUSHED COPPER',36,16
-'Brand#31','LARGE ANODIZED STEEL',45,16
-'Brand#31','LARGE BURNISHED NICKEL',45,16
-'Brand#31','LARGE PLATED TIN',14,16
-'Brand#31','LARGE POLISHED COPPER',49,16
-'Brand#31','MEDIUM ANODIZED NICKEL',49,16
-'Brand#31','MEDIUM BURNISHED BRASS',19,16
-'Brand#31','PROMO ANODIZED NICKEL',14,16
-'Brand#31','PROMO BRUSHED TIN',45,16
-'Brand#31','PROMO BURNISHED STEEL',36,16
-'Brand#31','SMALL ANODIZED NICKEL',23,16
-'Brand#31','SMALL BRUSHED NICKEL',14,16
-'Brand#31','SMALL BRUSHED TIN',19,16
-'Brand#31','SMALL PLATED NICKEL',23,16
-'Brand#31','SMALL POLISHED BRASS',23,16
-'Brand#31','SMALL POLISHED TIN',14,16
-'Brand#31','SMALL POLISHED TIN',45,16
-'Brand#31','STANDARD BRUSHED COPPER',45,16
-'Brand#31','STANDARD POLISHED STEEL',36,16
-'Brand#32','ECONOMY BRUSHED STEEL',9,16
-'Brand#32','ECONOMY PLATED STEEL',14,16
-'Brand#32','LARGE ANODIZED BRASS',36,16
-'Brand#32','LARGE BURNISHED NICKEL',36,16
-'Brand#32','LARGE PLATED BRASS',36,16
-'Brand#32','LARGE PLATED STEEL',23,16
-'Brand#32','MEDIUM BRUSHED BRASS',49,16
-'Brand#32','MEDIUM BRUSHED TIN',9,16
-'Brand#32','MEDIUM PLATED COPPER',36,16
-'Brand#32','PROMO ANODIZED TIN',36,16
-'Brand#32','PROMO BRUSHED BRASS',9,16
-'Brand#32','PROMO BURNISHED STEEL',36,16
-'Brand#32','PROMO PLATED STEEL',3,16
-'Brand#32','PROMO PLATED TIN',45,16
-'Brand#32','SMALL BURNISHED TIN',49,16
-'Brand#32','SMALL PLATED NICKEL',36,16
-'Brand#32','SMALL POLISHED NICKEL',36,16
-'Brand#32','SMALL POLISHED STEEL',9,16
-'Brand#32','SMALL POLISHED TIN',36,16
-'Brand#32','STANDARD ANODIZED COPPER',14,16
-'Brand#32','STANDARD ANODIZED TIN',9,16
-'Brand#32','STANDARD BURNISHED COPPER',45,16
-'Brand#32','STANDARD BURNISHED COPPER',49,16
-'Brand#32','STANDARD POLISHED BRASS',14,16
-'Brand#32','STANDARD POLISHED STEEL',14,16
-'Brand#33','ECONOMY ANODIZED STEEL',49,16
-'Brand#33','ECONOMY PLATED BRASS',36,16
-'Brand#33','ECONOMY PLATED COPPER',19,16
-'Brand#33','ECONOMY POLISHED NICKEL',19,16
-'Brand#33','LARGE ANODIZED STEEL',45,16
-'Brand#33','LARGE ANODIZED TIN',45,16
-'Brand#33','LARGE BURNISHED COPPER',45,16
-'Brand#33','LARGE POLISHED STEEL',3,16
-'Brand#33','MEDIUM ANODIZED BRASS',23,16
-'Brand#33','MEDIUM ANODIZED NICKEL',3,16
-'Brand#33','MEDIUM ANODIZED TIN',14,16
-'Brand#33','MEDIUM BRUSHED COPPER',49,16
-'Brand#33','MEDIUM BURNISHED COPPER',9,16
-'Brand#33','PROMO BURNISHED BRASS',9,16
-'Brand#33','PROMO BURNISHED BRASS',19,16
-'Brand#33','PROMO PLATED STEEL',49,16
-'Brand#33','SMALL ANODIZED BRASS',36,16
-'Brand#33','SMALL BRUSHED BRASS',3,16
-'Brand#33','SMALL BRUSHED STEEL',9,16
-'Brand#33','SMALL POLISHED BRASS',14,16
-'Brand#33','SMALL POLISHED COPPER',36,16
-'Brand#33','SMALL POLISHED NICKEL',19,16
-'Brand#33','STANDARD ANODIZED BRASS',9,16
-'Brand#33','STANDARD ANODIZED TIN',3,16
-'Brand#33','STANDARD BURNISHED NICKEL',49,16
-'Brand#33','STANDARD PLATED NICKEL',49,16
-'Brand#33','STANDARD POLISHED BRASS',9,16
-'Brand#33','STANDARD POLISHED BRASS',14,16
-'Brand#33','STANDARD POLISHED COPPER',49,16
-'Brand#33','STANDARD POLISHED STEEL',3,16
-'Brand#34','ECONOMY BURNISHED BRASS',14,16
-'Brand#34','ECONOMY POLISHED STEEL',36,16
-'Brand#34','LARGE BRUSHED BRASS',23,16
-'Brand#34','LARGE PLATED BRASS',36,16
-'Brand#34','LARGE PLATED TIN',3,16
-'Brand#34','LARGE POLISHED COPPER',14,16
-'Brand#34','MEDIUM ANODIZED COPPER',36,16
-'Brand#34','MEDIUM BRUSHED STEEL',23,16
-'Brand#34','MEDIUM PLATED NICKEL',23,16
-'Brand#34','PROMO BRUSHED NICKEL',45,16
-'Brand#34','PROMO POLISHED TIN',3,16
-'Brand#34','SMALL ANODIZED NICKEL',14,16
-'Brand#34','SMALL BURNISHED TIN',3,16
-'Brand#34','SMALL POLISHED NICKEL',36,16
-'Brand#34','STANDARD ANODIZED STEEL',9,16
-'Brand#34','STANDARD BURNISHED NICKEL',19,16
-'Brand#34','STANDARD BURNISHED NICKEL',23,16
-'Brand#34','STANDARD POLISHED COPPER',23,16
-'Brand#35','ECONOMY ANODIZED COPPER',36,16
-'Brand#35','ECONOMY BURNISHED NICKEL',19,16
-'Brand#35','ECONOMY BURNISHED TIN',9,16
-'Brand#35','ECONOMY PLATED STEEL',14,16
-'Brand#35','LARGE ANODIZED BRASS',9,16
-'Brand#35','LARGE ANODIZED COPPER',49,16
-'Brand#35','LARGE ANODIZED NICKEL',9,16
-'Brand#35','LARGE BRUSHED TIN',49,16
-'Brand#35','LARGE BURNISHED COPPER',23,16
-'Brand#35','LARGE BURNISHED NICKEL',9,16
-'Brand#35','LARGE BURNISHED STEEL',3,16
-'Brand#35','LARGE PLATED COPPER',19,16
-'Brand#35','MEDIUM BRUSHED STEEL',23,16
-'Brand#35','MEDIUM PLATED NICKEL',23,16
-'Brand#35','PROMO BRUSHED NICKEL',19,16
-'Brand#35','SMALL ANODIZED BRASS',45,16
-'Brand#35','SMALL BRUSHED TIN',49,16
-'Brand#41','ECONOMY ANODIZED STEEL',49,16
-'Brand#41','ECONOMY PLATED STEEL',3,16
-'Brand#41','ECONOMY PLATED TIN',3,16
-'Brand#41','ECONOMY POLISHED STEEL',19,16
-'Brand#41','ECONOMY POLISHED STEEL',45,16
-'Brand#41','LARGE ANODIZED BRASS',36,16
-'Brand#41','LARGE BURNISHED BRASS',23,16
-'Brand#41','LARGE POLISHED BRASS',36,16
-'Brand#41','LARGE POLISHED NICKEL',3,16
-'Brand#41','MEDIUM BURNISHED TIN',3,16
-'Brand#41','MEDIUM PLATED STEEL',3,16
-'Brand#41','PROMO PLATED BRASS',9,16
-'Brand#41','PROMO PLATED STEEL',36,16
-'Brand#41','PROMO POLISHED STEEL',36,16
-'Brand#41','PROMO POLISHED TIN',19,16
-'Brand#41','SMALL ANODIZED COPPER',23,16
-'Brand#41','SMALL ANODIZED STEEL',45,16
-'Brand#41','SMALL BRUSHED NICKEL',45,16
-'Brand#41','SMALL BURNISHED NICKEL',36,16
-'Brand#41','SMALL POLISHED NICKEL',9,16
-'Brand#41','SMALL POLISHED STEEL',45,16
-'Brand#41','SMALL POLISHED TIN',14,16
-'Brand#41','STANDARD BRUSHED NICKEL',45,16
-'Brand#42','ECONOMY BRUSHED STEEL',14,16
-'Brand#42','ECONOMY BURNISHED STEEL',9,16
-'Brand#42','ECONOMY BURNISHED STEEL',45,16
-'Brand#42','LARGE ANODIZED TIN',23,16
-'Brand#42','LARGE BRUSHED STEEL',14,16
-'Brand#42','LARGE BURNISHED NICKEL',19,16
-'Brand#42','LARGE PLATED STEEL',45,16
-'Brand#42','LARGE POLISHED STEEL',14,16
-'Brand#42','MEDIUM ANODIZED STEEL',14,16
-'Brand#42','MEDIUM ANODIZED TIN',19,16
-'Brand#42','MEDIUM BRUSHED COPPER',9,16
-'Brand#42','MEDIUM BRUSHED STEEL',14,16
-'Brand#42','MEDIUM BURNISHED COPPER',49,16
-'Brand#42','MEDIUM BURNISHED NICKEL',23,16
-'Brand#42','MEDIUM BURNISHED TIN',49,16
-'Brand#42','PROMO ANODIZED NICKEL',49,16
-'Brand#42','PROMO ANODIZED STEEL',49,16
-'Brand#42','PROMO BURNISHED TIN',49,16
-'Brand#42','SMALL ANODIZED BRASS',23,16
-'Brand#42','SMALL ANODIZED NICKEL',19,16
-'Brand#42','SMALL ANODIZED TIN',49,16
-'Brand#42','SMALL PLATED COPPER',23,16
-'Brand#42','STANDARD ANODIZED BRASS',9,16
-'Brand#42','STANDARD ANODIZED NICKEL',9,16
-'Brand#42','STANDARD BRUSHED STEEL',49,16
-'Brand#42','STANDARD BRUSHED TIN',45,16
-'Brand#42','STANDARD PLATED TIN',23,16
-'Brand#43','ECONOMY BRUSHED STEEL',23,16
-'Brand#43','ECONOMY PLATED TIN',49,16
-'Brand#43','ECONOMY POLISHED TIN',14,16
-'Brand#43','LARGE BRUSHED COPPER',9,16
-'Brand#43','LARGE BURNISHED STEEL',9,16
-'Brand#43','LARGE PLATED BRASS',14,16
-'Brand#43','LARGE PLATED BRASS',19,16
-'Brand#43','LARGE PLATED NICKEL',45,16
-'Brand#43','MEDIUM ANODIZED COPPER',49,16
-'Brand#43','PROMO BRUSHED BRASS',36,16
-'Brand#43','PROMO BRUSHED STEEL',49,16
-'Brand#43','PROMO PLATED BRASS',45,16
-'Brand#43','SMALL BURNISHED COPPER',19,16
-'Brand#43','SMALL BURNISHED TIN',23,16
-'Brand#43','SMALL BURNISHED TIN',45,16
-'Brand#43','SMALL PLATED COPPER',23,16
-'Brand#43','SMALL POLISHED STEEL',19,16
-'Brand#43','STANDARD ANODIZED TIN',45,16
-'Brand#43','STANDARD PLATED BRASS',3,16
-'Brand#44','ECONOMY ANODIZED BRASS',45,16
-'Brand#44','ECONOMY BRUSHED TIN',45,16
-'Brand#44','ECONOMY PLATED COPPER',23,16
-'Brand#44','ECONOMY PLATED STEEL',3,16
-'Brand#44','LARGE BRUSHED BRASS',9,16
-'Brand#44','LARGE PLATED BRASS',49,16
-'Brand#44','LARGE PLATED STEEL',14,16
-'Brand#44','LARGE POLISHED TIN',19,16
-'Brand#44','MEDIUM ANODIZED NICKEL',9,16
-'Brand#44','MEDIUM ANODIZED TIN',49,16
-'Brand#44','MEDIUM BRUSHED NICKEL',36,16
-'Brand#44','MEDIUM BURNISHED NICKEL',23,16
-'Brand#44','MEDIUM BURNISHED NICKEL',45,16
-'Brand#44','MEDIUM PLATED BRASS',9,16
-'Brand#44','MEDIUM PLATED STEEL',49,16
-'Brand#44','PROMO BURNISHED TIN',3,16
-'Brand#44','SMALL ANODIZED COPPER',9,16
-'Brand#44','SMALL ANODIZED STEEL',14,16
-'Brand#44','SMALL BRUSHED STEEL',19,16
-'Brand#44','SMALL BRUSHED TIN',14,16
-'Brand#44','SMALL BURNISHED STEEL',23,16
-'Brand#44','SMALL PLATED STEEL',19,16
-'Brand#44','STANDARD ANODIZED NICKEL',45,16
-'Brand#44','STANDARD ANODIZED STEEL',19,16
-'Brand#44','STANDARD BRUSHED COPPER',36,16
-'Brand#44','STANDARD PLATED BRASS',49,16
-'Brand#44','STANDARD PLATED NICKEL',45,16
-'Brand#44','STANDARD PLATED STEEL',36,16
-'Brand#51','ECONOMY ANODIZED STEEL',9,16
-'Brand#51','ECONOMY BRUSHED STEEL',23,16
-'Brand#51','ECONOMY PLATED STEEL',9,16
-'Brand#51','LARGE BURNISHED COPPER',14,16
-'Brand#51','LARGE PLATED BRASS',3,16
-'Brand#51','LARGE PLATED BRASS',36,16
-'Brand#51','LARGE PLATED BRASS',49,16
-'Brand#51','LARGE POLISHED BRASS',3,16
-'Brand#51','LARGE POLISHED NICKEL',19,16
-'Brand#51','MEDIUM ANODIZED BRASS',9,16
-'Brand#51','MEDIUM ANODIZED TIN',9,16
-'Brand#51','MEDIUM PLATED BRASS',14,16
-'Brand#51','PROMO BURNISHED NICKEL',14,16
-'Brand#51','PROMO BURNISHED TIN',9,16
-'Brand#51','PROMO PLATED NICKEL',14,16
-'Brand#51','SMALL ANODIZED COPPER',45,16
-'Brand#51','SMALL BURNISHED COPPER',36,16
-'Brand#51','SMALL BURNISHED TIN',9,16
-'Brand#51','STANDARD BURNISHED STEEL',45,16
-'Brand#51','STANDARD BURNISHED TIN',9,16
-'Brand#51','STANDARD PLATED BRASS',36,16
-'Brand#51','STANDARD PLATED STEEL',45,16
-'Brand#52','ECONOMY BRUSHED NICKEL',3,16
-'Brand#52','ECONOMY BURNISHED COPPER',9,16
-'Brand#52','ECONOMY BURNISHED STEEL',14,16
-'Brand#52','LARGE ANODIZED BRASS',23,16
-'Brand#52','LARGE BRUSHED BRASS',14,16
-'Brand#52','LARGE BURNISHED TIN',23,16
-'Brand#52','MEDIUM ANODIZED COPPER',23,16
-'Brand#52','PROMO BRUSHED STEEL',36,16
-'Brand#52','PROMO PLATED COPPER',14,16
-'Brand#52','SMALL PLATED COPPER',3,16
-'Brand#52','STANDARD BRUSHED COPPER',14,16
-'Brand#52','STANDARD BURNISHED BRASS',14,16
-'Brand#52','STANDARD BURNISHED BRASS',19,16
-'Brand#52','STANDARD POLISHED NICKEL',36,16
-'Brand#53','ECONOMY ANODIZED BRASS',19,16
-'Brand#53','LARGE BRUSHED COPPER',14,16
-'Brand#53','LARGE BRUSHED NICKEL',45,16
-'Brand#53','LARGE BURNISHED COPPER',36,16
-'Brand#53','LARGE PLATED COPPER',36,16
-'Brand#53','LARGE PLATED STEEL',36,16
-'Brand#53','LARGE PLATED TIN',14,16
-'Brand#53','LARGE POLISHED BRASS',14,16
-'Brand#53','LARGE POLISHED STEEL',49,16
-'Brand#53','MEDIUM BRUSHED NICKEL',49,16
-'Brand#53','MEDIUM BURNISHED BRASS',3,16
-'Brand#53','MEDIUM BURNISHED COPPER',49,16
-'Brand#53','PROMO ANODIZED COPPER',36,16
-'Brand#53','PROMO ANODIZED NICKEL',3,16
-'Brand#53','PROMO BURNISHED STEEL',9,16
-'Brand#53','PROMO PLATED COPPER',3,16
-'Brand#53','SMALL ANODIZED TIN',9,16
-'Brand#53','STANDARD PLATED BRASS',23,16
-'Brand#54','ECONOMY BRUSHED BRASS',45,16
-'Brand#54','ECONOMY BRUSHED COPPER',14,16
-'Brand#54','LARGE ANODIZED NICKEL',49,16
-'Brand#54','LARGE BURNISHED BRASS',49,16
-'Brand#54','LARGE BURNISHED COPPER',19,16
-'Brand#54','LARGE POLISHED NICKEL',36,16
-'Brand#54','PROMO BURNISHED TIN',19,16
-'Brand#54','PROMO PLATED BRASS',49,16
-'Brand#54','PROMO POLISHED TIN',23,16
-'Brand#54','SMALL ANODIZED COPPER',14,16
-'Brand#54','SMALL BRUSHED COPPER',9,16
-'Brand#54','SMALL PLATED NICKEL',9,16
-'Brand#54','STANDARD ANODIZED COPPER',49,16
-'Brand#54','STANDARD ANODIZED TIN',14,16
-'Brand#54','STANDARD BRUSHED COPPER',45,16
-'Brand#54','STANDARD PLATED COPPER',23,16
-'Brand#54','STANDARD PLATED COPPER',45,16
-'Brand#54','STANDARD POLISHED BRASS',19,16
-'Brand#54','STANDARD POLISHED STEEL',14,16
-'Brand#55','ECONOMY BRUSHED TIN',36,16
-'Brand#55','ECONOMY POLISHED TIN',14,16
-'Brand#55','LARGE PLATED BRASS',9,16
-'Brand#55','LARGE POLISHED STEEL',9,16
-'Brand#55','MEDIUM BURNISHED TIN',36,16
-'Brand#55','PROMO ANODIZED BRASS',14,16
-'Brand#55','PROMO ANODIZED COPPER',14,16
-'Brand#55','SMALL BURNISHED STEEL',9,16
-'Brand#55','STANDARD POLISHED COPPER',19,16
-'Brand#23','PROMO POLISHED COPPER',36,15
-'Brand#33','PROMO POLISHED STEEL',9,15
-'Brand#34','LARGE BURNISHED BRASS',23,15
-'Brand#41','PROMO ANODIZED BRASS',49,15
-'Brand#11','ECONOMY ANODIZED NICKEL',14,12
-'Brand#11','ECONOMY ANODIZED NICKEL',23,12
-'Brand#11','ECONOMY ANODIZED STEEL',36,12
-'Brand#11','ECONOMY ANODIZED TIN',14,12
-'Brand#11','ECONOMY BRUSHED COPPER',14,12
-'Brand#11','ECONOMY BURNISHED BRASS',36,12
-'Brand#11','ECONOMY BURNISHED COPPER',3,12
-'Brand#11','ECONOMY BURNISHED COPPER',49,12
-'Brand#11','ECONOMY PLATED COPPER',3,12
-'Brand#11','ECONOMY PLATED COPPER',19,12
-'Brand#11','ECONOMY PLATED NICKEL',14,12
-'Brand#11','ECONOMY POLISHED COPPER',14,12
-'Brand#11','ECONOMY POLISHED TIN',23,12
-'Brand#11','LARGE ANODIZED NICKEL',9,12
-'Brand#11','LARGE ANODIZED STEEL',23,12
-'Brand#11','LARGE ANODIZED TIN',36,12
-'Brand#11','LARGE BRUSHED BRASS',19,12
-'Brand#11','LARGE BRUSHED STEEL',19,12
-'Brand#11','LARGE BRUSHED STEEL',36,12
-'Brand#11','LARGE BURNISHED BRASS',3,12
-'Brand#11','LARGE PLATED TIN',19,12
-'Brand#11','MEDIUM ANODIZED BRASS',45,12
-'Brand#11','MEDIUM BRUSHED BRASS',3,12
-'Brand#11','MEDIUM BRUSHED BRASS',23,12
-'Brand#11','MEDIUM BRUSHED BRASS',45,12
-'Brand#11','MEDIUM BRUSHED NICKEL',36,12
-'Brand#11','MEDIUM BRUSHED STEEL',19,12
-'Brand#11','MEDIUM BRUSHED STEEL',23,12
-'Brand#11','MEDIUM BURNISHED NICKEL',23,12
-'Brand#11','MEDIUM BURNISHED STEEL',9,12
-'Brand#11','MEDIUM PLATED BRASS',14,12
-'Brand#11','MEDIUM PLATED COPPER',3,12
-'Brand#11','MEDIUM PLATED STEEL',14,12
-'Brand#11','PROMO ANODIZED BRASS',45,12
-'Brand#11','PROMO BRUSHED NICKEL',9,12
-'Brand#11','PROMO BRUSHED STEEL',45,12
-'Brand#11','PROMO BURNISHED BRASS',23,12
-'Brand#11','PROMO BURNISHED COPPER',23,12
-'Brand#11','PROMO BURNISHED NICKEL',36,12
-'Brand#11','PROMO PLATED BRASS',14,12
-'Brand#11','PROMO PLATED COPPER',14,12
-'Brand#11','PROMO PLATED STEEL',49,12
-'Brand#11','PROMO PLATED TIN',3,12
-'Brand#11','PROMO POLISHED COPPER',14,12
-'Brand#11','PROMO POLISHED NICKEL',3,12
-'Brand#11','PROMO POLISHED STEEL',3,12
-'Brand#11','PROMO POLISHED STEEL',23,12
-'Brand#11','PROMO POLISHED TIN',14,12
-'Brand#11','SMALL ANODIZED BRASS',49,12
-'Brand#11','SMALL ANODIZED COPPER',49,12
-'Brand#11','SMALL ANODIZED NICKEL',9,12
-'Brand#11','SMALL ANODIZED STEEL',45,12
-'Brand#11','SMALL BURNISHED BRASS',19,12
-'Brand#11','SMALL BURNISHED BRASS',49,12
-'Brand#11','SMALL BURNISHED NICKEL',9,12
-'Brand#11','SMALL BURNISHED NICKEL',49,12
-'Brand#11','SMALL PLATED COPPER',45,12
-'Brand#11','SMALL PLATED NICKEL',45,12
-'Brand#11','SMALL PLATED TIN',36,12
-'Brand#11','SMALL POLISHED BRASS',14,12
-'Brand#11','SMALL POLISHED BRASS',19,12
-'Brand#11','SMALL POLISHED STEEL',3,12
-'Brand#11','SMALL POLISHED STEEL',36,12
-'Brand#11','STANDARD ANODIZED COPPER',49,12
-'Brand#11','STANDARD BRUSHED COPPER',23,12
-'Brand#11','STANDARD BRUSHED NICKEL',9,12
-'Brand#11','STANDARD BURNISHED BRASS',19,12
-'Brand#11','STANDARD BURNISHED COPPER',9,12
-'Brand#11','STANDARD PLATED STEEL',19,12
-'Brand#11','STANDARD PLATED TIN',45,12
-'Brand#11','STANDARD POLISHED STEEL',9,12
-'Brand#11','STANDARD POLISHED STEEL',19,12
-'Brand#11','STANDARD POLISHED TIN',14,12
-'Brand#12','ECONOMY ANODIZED BRASS',49,12
-'Brand#12','ECONOMY ANODIZED COPPER',14,12
-'Brand#12','ECONOMY ANODIZED NICKEL',19,12
-'Brand#12','ECONOMY ANODIZED NICKEL',45,12
-'Brand#12','ECONOMY BRUSHED BRASS',23,12
-'Brand#12','ECONOMY BRUSHED STEEL',9,12
-'Brand#12','ECONOMY BRUSHED TIN',3,12
-'Brand#12','ECONOMY BRUSHED TIN',19,12
-'Brand#12','ECONOMY BURNISHED BRASS',19,12
-'Brand#12','ECONOMY BURNISHED COPPER',49,12
-'Brand#12','ECONOMY BURNISHED STEEL',9,12
-'Brand#12','ECONOMY BURNISHED STEEL',36,12
-'Brand#12','ECONOMY PLATED BRASS',3,12
-'Brand#12','ECONOMY PLATED NICKEL',9,12
-'Brand#12','ECONOMY PLATED TIN',45,12
-'Brand#12','ECONOMY POLISHED NICKEL',45,12
-'Brand#12','ECONOMY POLISHED STEEL',9,12
-'Brand#12','ECONOMY POLISHED STEEL',19,12
-'Brand#12','ECONOMY POLISHED TIN',14,12
-'Brand#12','LARGE ANODIZED COPPER',19,12
-'Brand#12','LARGE ANODIZED NICKEL',49,12
-'Brand#12','LARGE ANODIZED TIN',49,12
-'Brand#12','LARGE BRUSHED BRASS',9,12
-'Brand#12','LARGE BRUSHED BRASS',23,12
-'Brand#12','LARGE BRUSHED BRASS',49,12
-'Brand#12','LARGE BURNISHED NICKEL',45,12
-'Brand#12','LARGE PLATED BRASS',3,12
-'Brand#12','LARGE POLISHED BRASS',23,12
-'Brand#12','LARGE POLISHED COPPER',19,12
-'Brand#12','MEDIUM ANODIZED BRASS',3,12
-'Brand#12','MEDIUM ANODIZED COPPER',9,12
-'Brand#12','MEDIUM BRUSHED BRASS',14,12
-'Brand#12','MEDIUM BRUSHED BRASS',23,12
-'Brand#12','MEDIUM BRUSHED BRASS',45,12
-'Brand#12','MEDIUM BRUSHED COPPER',23,12
-'Brand#12','MEDIUM BRUSHED NICKEL',14,12
-'Brand#12','MEDIUM BRUSHED TIN',14,12
-'Brand#12','MEDIUM BRUSHED TIN',36,12
-'Brand#12','MEDIUM BURNISHED BRASS',19,12
-'Brand#12','MEDIUM PLATED BRASS',23,12
-'Brand#12','MEDIUM PLATED NICKEL',45,12
-'Brand#12','MEDIUM PLATED STEEL',19,12
-'Brand#12','MEDIUM PLATED TIN',23,12
-'Brand#12','PROMO BRUSHED COPPER',36,12
-'Brand#12','PROMO BRUSHED STEEL',19,12
-'Brand#12','PROMO BRUSHED STEEL',45,12
-'Brand#12','PROMO PLATED COPPER',14,12
-'Brand#12','PROMO PLATED STEEL',19,12
-'Brand#12','PROMO POLISHED COPPER',45,12
-'Brand#12','PROMO POLISHED STEEL',45,12
-'Brand#12','PROMO POLISHED TIN',3,12
-'Brand#12','PROMO POLISHED TIN',14,12
-'Brand#12','SMALL ANODIZED BRASS',9,12
-'Brand#12','SMALL ANODIZED STEEL',14,12
-'Brand#12','SMALL BRUSHED BRASS',36,12
-'Brand#12','SMALL BRUSHED NICKEL',3,12
-'Brand#12','SMALL BRUSHED NICKEL',9,12
-'Brand#12','SMALL BURNISHED BRASS',14,12
-'Brand#12','SMALL BURNISHED BRASS',23,12
-'Brand#12','SMALL BURNISHED TIN',14,12
-'Brand#12','SMALL POLISHED NICKEL',23,12
-'Brand#12','STANDARD ANODIZED COPPER',45,12
-'Brand#12','STANDARD BRUSHED COPPER',3,12
-'Brand#12','STANDARD BRUSHED NICKEL',23,12
-'Brand#12','STANDARD BRUSHED STEEL',3,12
-'Brand#12','STANDARD BRUSHED TIN',45,12
-'Brand#12','STANDARD BURNISHED BRASS',14,12
-'Brand#12','STANDARD BURNISHED COPPER',3,12
-'Brand#12','STANDARD BURNISHED COPPER',45,12
-'Brand#12','STANDARD BURNISHED STEEL',9,12
-'Brand#12','STANDARD BURNISHED TIN',3,12
-'Brand#12','STANDARD PLATED COPPER',49,12
-'Brand#12','STANDARD PLATED NICKEL',19,12
-'Brand#12','STANDARD PLATED NICKEL',45,12
-'Brand#12','STANDARD PLATED STEEL',19,12
-'Brand#12','STANDARD PLATED STEEL',36,12
-'Brand#12','STANDARD POLISHED BRASS',45,12
-'Brand#13','ECONOMY ANODIZED BRASS',36,12
-'Brand#13','ECONOMY ANODIZED BRASS',45,12
-'Brand#13','ECONOMY ANODIZED COPPER',14,12
-'Brand#13','ECONOMY ANODIZED NICKEL',14,12
-'Brand#13','ECONOMY ANODIZED NICKEL',19,12
-'Brand#13','ECONOMY ANODIZED TIN',23,12
-'Brand#13','ECONOMY BRUSHED BRASS',45,12
-'Brand#13','ECONOMY BRUSHED NICKEL',45,12
-'Brand#13','ECONOMY BURNISHED BRASS',3,12
-'Brand#13','ECONOMY BURNISHED COPPER',19,12
-'Brand#13','ECONOMY BURNISHED NICKEL',36,12
-'Brand#13','ECONOMY PLATED COPPER',49,12
-'Brand#13','ECONOMY PLATED NICKEL',3,12
-'Brand#13','ECONOMY PLATED NICKEL',19,12
-'Brand#13','ECONOMY PLATED STEEL',23,12
-'Brand#13','ECONOMY POLISHED STEEL',19,12
-'Brand#13','ECONOMY POLISHED STEEL',36,12
-'Brand#13','LARGE ANODIZED BRASS',49,12
-'Brand#13','LARGE ANODIZED TIN',9,12
-'Brand#13','LARGE ANODIZED TIN',19,12
-'Brand#13','LARGE BRUSHED BRASS',3,12
-'Brand#13','LARGE BRUSHED COPPER',9,12
-'Brand#13','LARGE BRUSHED NICKEL',3,12
-'Brand#13','LARGE BURNISHED COPPER',45,12
-'Brand#13','LARGE PLATED COPPER',23,12
-'Brand#13','LARGE PLATED COPPER',36,12
-'Brand#13','LARGE PLATED NICKEL',23,12
-'Brand#13','LARGE PLATED NICKEL',49,12
-'Brand#13','LARGE PLATED STEEL',14,12
-'Brand#13','LARGE PLATED TIN',9,12
-'Brand#13','LARGE POLISHED BRASS',49,12
-'Brand#13','LARGE POLISHED STEEL',9,12
-'Brand#13','MEDIUM ANODIZED NICKEL',3,12
-'Brand#13','MEDIUM ANODIZED NICKEL',36,12
-'Brand#13','MEDIUM ANODIZED NICKEL',45,12
-'Brand#13','MEDIUM ANODIZED STEEL',9,12
-'Brand#13','MEDIUM ANODIZED STEEL',14,12
-'Brand#13','MEDIUM BRUSHED BRASS',9,12
-'Brand#13','MEDIUM BRUSHED COPPER',3,12
-'Brand#13','MEDIUM BRUSHED COPPER',14,12
-'Brand#13','MEDIUM BRUSHED STEEL',19,12
-'Brand#13','MEDIUM BRUSHED TIN',19,12
-'Brand#13','MEDIUM BURNISHED NICKEL',36,12
-'Brand#13','MEDIUM PLATED BRASS',9,12
-'Brand#13','PROMO ANODIZED COPPER',45,12
-'Brand#13','PROMO BRUSHED NICKEL',23,12
-'Brand#13','PROMO BRUSHED STEEL',45,12
-'Brand#13','PROMO BRUSHED TIN',3,12
-'Brand#13','PROMO BURNISHED BRASS',19,12
-'Brand#13','PROMO BURNISHED COPPER',19,12
-'Brand#13','PROMO BURNISHED NICKEL',3,12
-'Brand#13','PROMO BURNISHED NICKEL',49,12
-'Brand#13','PROMO PLATED COPPER',3,12
-'Brand#13','PROMO PLATED NICKEL',3,12
-'Brand#13','PROMO PLATED STEEL',45,12
-'Brand#13','PROMO POLISHED NICKEL',3,12
-'Brand#13','PROMO POLISHED STEEL',14,12
-'Brand#13','SMALL ANODIZED BRASS',49,12
-'Brand#13','SMALL ANODIZED COPPER',36,12
-'Brand#13','SMALL ANODIZED TIN',9,12
-'Brand#13','SMALL ANODIZED TIN',23,12
-'Brand#13','SMALL BRUSHED COPPER',14,12
-'Brand#13','SMALL BRUSHED COPPER',45,12
-'Brand#13','SMALL BURNISHED NICKEL',3,12
-'Brand#13','SMALL PLATED BRASS',45,12
-'Brand#13','SMALL PLATED NICKEL',45,12
-'Brand#13','SMALL PLATED TIN',14,12
-'Brand#13','SMALL POLISHED BRASS',49,12
-'Brand#13','SMALL POLISHED NICKEL',19,12
-'Brand#13','STANDARD BRUSHED BRASS',14,12
-'Brand#13','STANDARD BRUSHED COPPER',23,12
-'Brand#13','STANDARD BURNISHED COPPER',3,12
-'Brand#13','STANDARD BURNISHED COPPER',23,12
-'Brand#13','STANDARD BURNISHED COPPER',45,12
-'Brand#13','STANDARD BURNISHED STEEL',3,12
-'Brand#13','STANDARD BURNISHED STEEL',19,12
-'Brand#13','STANDARD BURNISHED TIN',23,12
-'Brand#13','STANDARD PLATED BRASS',14,12
-'Brand#13','STANDARD PLATED COPPER',45,12
-'Brand#13','STANDARD PLATED NICKEL',45,12
-'Brand#13','STANDARD PLATED STEEL',9,12
-'Brand#13','STANDARD POLISHED BRASS',19,12
-'Brand#13','STANDARD POLISHED NICKEL',19,12
-'Brand#14','ECONOMY ANODIZED COPPER',9,12
-'Brand#14','ECONOMY ANODIZED NICKEL',49,12
-'Brand#14','ECONOMY ANODIZED STEEL',45,12
-'Brand#14','ECONOMY BRUSHED BRASS',23,12
-'Brand#14','ECONOMY BRUSHED COPPER',19,12
-'Brand#14','ECONOMY BRUSHED COPPER',45,12
-'Brand#14','ECONOMY BRUSHED NICKEL',36,12
-'Brand#14','ECONOMY BRUSHED TIN',14,12
-'Brand#14','ECONOMY BURNISHED COPPER',9,12
-'Brand#14','ECONOMY BURNISHED COPPER',23,12
-'Brand#14','ECONOMY BURNISHED STEEL',9,12
-'Brand#14','ECONOMY BURNISHED STEEL',14,12
-'Brand#14','ECONOMY PLATED BRASS',9,12
-'Brand#14','ECONOMY POLISHED BRASS',19,12
-'Brand#14','ECONOMY POLISHED COPPER',23,12
-'Brand#14','ECONOMY POLISHED STEEL',45,12
-'Brand#14','LARGE ANODIZED COPPER',49,12
-'Brand#14','LARGE ANODIZED NICKEL',23,12
-'Brand#14','LARGE ANODIZED NICKEL',45,12
-'Brand#14','LARGE ANODIZED STEEL',9,12
-'Brand#14','LARGE BRUSHED COPPER',14,12
-'Brand#14','LARGE BRUSHED TIN',3,12
-'Brand#14','LARGE BRUSHED TIN',45,12
-'Brand#14','LARGE BURNISHED COPPER',49,12
-'Brand#14','LARGE PLATED BRASS',19,12
-'Brand#14','LARGE PLATED COPPER',3,12
-'Brand#14','LARGE PLATED NICKEL',36,12
-'Brand#14','MEDIUM ANODIZED STEEL',36,12
-'Brand#14','MEDIUM BRUSHED BRASS',9,12
-'Brand#14','MEDIUM BRUSHED TIN',19,12
-'Brand#14','MEDIUM BURNISHED BRASS',49,12
-'Brand#14','MEDIUM BURNISHED COPPER',14,12
-'Brand#14','MEDIUM BURNISHED NICKEL',36,12
-'Brand#14','MEDIUM BURNISHED STEEL',3,12
-'Brand#14','MEDIUM BURNISHED STEEL',19,12
-'Brand#14','MEDIUM PLATED COPPER',36,12
-'Brand#14','MEDIUM PLATED TIN',49,12
-'Brand#14','PROMO ANODIZED NICKEL',36,12
-'Brand#14','PROMO BRUSHED COPPER',14,12
-'Brand#14','PROMO BURNISHED NICKEL',14,12
-'Brand#14','PROMO PLATED COPPER',45,12
-'Brand#14','PROMO PLATED NICKEL',36,12
-'Brand#14','PROMO PLATED STEEL',9,12
-'Brand#14','PROMO PLATED TIN',19,12
-'Brand#14','PROMO PLATED TIN',45,12
-'Brand#14','PROMO PLATED TIN',49,12
-'Brand#14','PROMO POLISHED BRASS',9,12
-'Brand#14','PROMO POLISHED COPPER',14,12
-'Brand#14','PROMO POLISHED NICKEL',9,12
-'Brand#14','SMALL ANODIZED NICKEL',45,12
-'Brand#14','SMALL ANODIZED TIN',45,12
-'Brand#14','SMALL BRUSHED NICKEL',19,12
-'Brand#14','SMALL BRUSHED TIN',19,12
-'Brand#14','SMALL BURNISHED STEEL',9,12
-'Brand#14','SMALL BURNISHED STEEL',36,12
-'Brand#14','SMALL PLATED BRASS',23,12
-'Brand#14','SMALL PLATED COPPER',9,12
-'Brand#14','SMALL PLATED STEEL',23,12
-'Brand#14','SMALL POLISHED BRASS',3,12
-'Brand#14','SMALL POLISHED BRASS',9,12
-'Brand#14','SMALL POLISHED COPPER',36,12
-'Brand#14','SMALL POLISHED NICKEL',49,12
-'Brand#14','SMALL POLISHED STEEL',14,12
-'Brand#14','SMALL POLISHED TIN',49,12
-'Brand#14','STANDARD ANODIZED STEEL',49,12
-'Brand#14','STANDARD BRUSHED BRASS',3,12
-'Brand#14','STANDARD BRUSHED STEEL',49,12
-'Brand#14','STANDARD BURNISHED BRASS',23,12
-'Brand#14','STANDARD PLATED NICKEL',49,12
-'Brand#14','STANDARD POLISHED COPPER',36,12
-'Brand#14','STANDARD POLISHED COPPER',45,12
-'Brand#15','ECONOMY ANODIZED TIN',19,12
-'Brand#15','ECONOMY BRUSHED NICKEL',14,12
-'Brand#15','ECONOMY BURNISHED STEEL',19,12
-'Brand#15','ECONOMY PLATED NICKEL',9,12
-'Brand#15','ECONOMY PLATED STEEL',3,12
-'Brand#15','ECONOMY PLATED STEEL',19,12
-'Brand#15','ECONOMY PLATED TIN',9,12
-'Brand#15','ECONOMY POLISHED COPPER',36,12
-'Brand#15','ECONOMY POLISHED NICKEL',45,12
-'Brand#15','LARGE ANODIZED BRASS',19,12
-'Brand#15','LARGE ANODIZED STEEL',14,12
-'Brand#15','LARGE ANODIZED TIN',23,12
-'Brand#15','LARGE BRUSHED BRASS',19,12
-'Brand#15','LARGE BRUSHED BRASS',49,12
-'Brand#15','LARGE BURNISHED BRASS',3,12
-'Brand#15','LARGE BURNISHED BRASS',23,12
-'Brand#15','LARGE BURNISHED COPPER',9,12
-'Brand#15','LARGE BURNISHED COPPER',49,12
-'Brand#15','LARGE BURNISHED STEEL',9,12
-'Brand#15','LARGE PLATED BRASS',9,12
-'Brand#15','MEDIUM BRUSHED BRASS',14,12
-'Brand#15','MEDIUM BRUSHED NICKEL',14,12
-'Brand#15','MEDIUM BRUSHED NICKEL',19,12
-'Brand#15','MEDIUM BRUSHED STEEL',36,12
-'Brand#15','MEDIUM BRUSHED TIN',14,12
-'Brand#15','MEDIUM BURNISHED STEEL',3,12
-'Brand#15','MEDIUM PLATED TIN',9,12
-'Brand#15','MEDIUM PLATED TIN',45,12
-'Brand#15','PROMO BRUSHED BRASS',36,12
-'Brand#15','PROMO BRUSHED STEEL',9,12
-'Brand#15','PROMO BURNISHED NICKEL',9,12
-'Brand#15','PROMO PLATED COPPER',36,12
-'Brand#15','PROMO POLISHED BRASS',14,12
-'Brand#15','PROMO POLISHED COPPER',9,12
-'Brand#15','PROMO POLISHED NICKEL',36,12
-'Brand#15','PROMO POLISHED TIN',49,12
-'Brand#15','SMALL ANODIZED STEEL',45,12
-'Brand#15','SMALL BRUSHED BRASS',45,12
-'Brand#15','SMALL BRUSHED COPPER',14,12
-'Brand#15','SMALL BRUSHED COPPER',19,12
-'Brand#15','SMALL BRUSHED NICKEL',36,12
-'Brand#15','SMALL BURNISHED BRASS',3,12
-'Brand#15','SMALL PLATED COPPER',19,12
-'Brand#15','SMALL PLATED COPPER',23,12
-'Brand#15','SMALL PLATED NICKEL',19,12
-'Brand#15','SMALL POLISHED BRASS',45,12
-'Brand#15','SMALL POLISHED NICKEL',19,12
-'Brand#15','SMALL POLISHED NICKEL',23,12
-'Brand#15','SMALL POLISHED TIN',3,12
-'Brand#15','SMALL POLISHED TIN',49,12
-'Brand#15','STANDARD ANODIZED NICKEL',3,12
-'Brand#15','STANDARD ANODIZED STEEL',19,12
-'Brand#15','STANDARD ANODIZED TIN',36,12
-'Brand#15','STANDARD BRUSHED BRASS',49,12
-'Brand#15','STANDARD BRUSHED COPPER',49,12
-'Brand#15','STANDARD BRUSHED NICKEL',3,12
-'Brand#15','STANDARD BRUSHED STEEL',19,12
-'Brand#15','STANDARD BURNISHED BRASS',19,12
-'Brand#15','STANDARD BURNISHED COPPER',14,12
-'Brand#15','STANDARD BURNISHED COPPER',36,12
-'Brand#15','STANDARD BURNISHED TIN',49,12
-'Brand#15','STANDARD PLATED COPPER',14,12
-'Brand#15','STANDARD PLATED STEEL',3,12
-'Brand#15','STANDARD PLATED TIN',9,12
-'Brand#15','STANDARD PLATED TIN',45,12
-'Brand#15','STANDARD POLISHED TIN',14,12
-'Brand#21','ECONOMY ANODIZED STEEL',19,12
-'Brand#21','ECONOMY BRUSHED COPPER',14,12
-'Brand#21','ECONOMY BRUSHED NICKEL',23,12
-'Brand#21','ECONOMY BRUSHED STEEL',45,12
-'Brand#21','ECONOMY BRUSHED TIN',19,12
-'Brand#21','ECONOMY BURNISHED BRASS',19,12
-'Brand#21','ECONOMY BURNISHED COPPER',45,12
-'Brand#21','ECONOMY BURNISHED STEEL',9,12
-'Brand#21','ECONOMY BURNISHED STEEL',14,12
-'Brand#21','ECONOMY BURNISHED TIN',49,12
-'Brand#21','ECONOMY PLATED BRASS',49,12
-'Brand#21','ECONOMY PLATED COPPER',14,12
-'Brand#21','ECONOMY PLATED NICKEL',3,12
-'Brand#21','ECONOMY PLATED STEEL',9,12
-'Brand#21','ECONOMY PLATED TIN',19,12
-'Brand#21','ECONOMY PLATED TIN',23,12
-'Brand#21','ECONOMY POLISHED BRASS',9,12
-'Brand#21','ECONOMY POLISHED STEEL',14,12
-'Brand#21','LARGE ANODIZED COPPER',3,12
-'Brand#21','LARGE ANODIZED TIN',3,12
-'Brand#21','LARGE ANODIZED TIN',14,12
-'Brand#21','LARGE ANODIZED TIN',45,12
-'Brand#21','LARGE BRUSHED COPPER',23,12
-'Brand#21','LARGE BRUSHED NICKEL',36,12
-'Brand#21','LARGE BRUSHED STEEL',23,12
-'Brand#21','LARGE BRUSHED TIN',45,12
-'Brand#21','LARGE BRUSHED TIN',49,12
-'Brand#21','LARGE BURNISHED BRASS',14,12
-'Brand#21','LARGE BURNISHED NICKEL',14,12
-'Brand#21','LARGE BURNISHED STEEL',19,12
-'Brand#21','LARGE PLATED BRASS',14,12
-'Brand#21','LARGE PLATED COPPER',19,12
-'Brand#21','LARGE PLATED COPPER',49,12
-'Brand#21','LARGE POLISHED COPPER',14,12
-'Brand#21','LARGE POLISHED STEEL',45,12
-'Brand#21','MEDIUM ANODIZED NICKEL',3,12
-'Brand#21','MEDIUM ANODIZED STEEL',14,12
-'Brand#21','MEDIUM BRUSHED BRASS',23,12
-'Brand#21','MEDIUM BURNISHED COPPER',49,12
-'Brand#21','MEDIUM BURNISHED NICKEL',9,12
-'Brand#21','MEDIUM BURNISHED TIN',9,12
-'Brand#21','MEDIUM PLATED BRASS',36,12
-'Brand#21','MEDIUM PLATED NICKEL',36,12
-'Brand#21','MEDIUM PLATED STEEL',36,12
-'Brand#21','MEDIUM PLATED TIN',9,12
-'Brand#21','PROMO ANODIZED BRASS',9,12
-'Brand#21','PROMO ANODIZED COPPER',9,12
-'Brand#21','PROMO ANODIZED NICKEL',19,12
-'Brand#21','PROMO ANODIZED STEEL',36,12
-'Brand#21','PROMO ANODIZED TIN',45,12
-'Brand#21','PROMO BRUSHED NICKEL',9,12
-'Brand#21','PROMO BRUSHED STEEL',14,12
-'Brand#21','PROMO BRUSHED STEEL',19,12
-'Brand#21','PROMO BRUSHED STEEL',45,12
-'Brand#21','PROMO BRUSHED TIN',14,12
-'Brand#21','PROMO BURNISHED COPPER',3,12
-'Brand#21','PROMO BURNISHED STEEL',14,12
-'Brand#21','PROMO PLATED BRASS',36,12
-'Brand#21','PROMO PLATED COPPER',49,12
-'Brand#21','PROMO PLATED TIN',45,12
-'Brand#21','PROMO POLISHED COPPER',9,12
-'Brand#21','PROMO POLISHED COPPER',19,12
-'Brand#21','PROMO POLISHED NICKEL',23,12
-'Brand#21','PROMO POLISHED STEEL',3,12
-'Brand#21','PROMO POLISHED STEEL',9,12
-'Brand#21','PROMO POLISHED TIN',9,12
-'Brand#21','PROMO POLISHED TIN',14,12
-'Brand#21','PROMO POLISHED TIN',19,12
-'Brand#21','SMALL BRUSHED NICKEL',9,12
-'Brand#21','SMALL BRUSHED NICKEL',45,12
-'Brand#21','SMALL BRUSHED STEEL',3,12
-'Brand#21','SMALL BRUSHED STEEL',9,12
-'Brand#21','SMALL BRUSHED TIN',14,12
-'Brand#21','SMALL PLATED BRASS',36,12
-'Brand#21','SMALL PLATED COPPER',14,12
-'Brand#21','SMALL PLATED COPPER',23,12
-'Brand#21','SMALL POLISHED NICKEL',9,12
-'Brand#21','SMALL POLISHED STEEL',3,12
-'Brand#21','STANDARD ANODIZED NICKEL',3,12
-'Brand#21','STANDARD ANODIZED NICKEL',19,12
-'Brand#21','STANDARD BRUSHED BRASS',9,12
-'Brand#21','STANDARD BRUSHED NICKEL',23,12
-'Brand#21','STANDARD BRUSHED NICKEL',45,12
-'Brand#21','STANDARD BURNISHED BRASS',49,12
-'Brand#21','STANDARD PLATED COPPER',45,12
-'Brand#21','STANDARD PLATED NICKEL',49,12
-'Brand#21','STANDARD PLATED STEEL',36,12
-'Brand#21','STANDARD PLATED TIN',9,12
-'Brand#21','STANDARD POLISHED COPPER',49,12
-'Brand#22','ECONOMY ANODIZED COPPER',36,12
-'Brand#22','ECONOMY ANODIZED COPPER',45,12
-'Brand#22','ECONOMY ANODIZED NICKEL',45,12
-'Brand#22','ECONOMY ANODIZED STEEL',45,12
-'Brand#22','ECONOMY ANODIZED TIN',49,12
-'Brand#22','ECONOMY BRUSHED STEEL',45,12
-'Brand#22','ECONOMY BRUSHED TIN',49,12
-'Brand#22','ECONOMY BURNISHED BRASS',19,12
-'Brand#22','ECONOMY BURNISHED BRASS',23,12
-'Brand#22','ECONOMY BURNISHED BRASS',45,12
-'Brand#22','ECONOMY BURNISHED COPPER',3,12
-'Brand#22','ECONOMY BURNISHED COPPER',9,12
-'Brand#22','ECONOMY BURNISHED COPPER',49,12
-'Brand#22','ECONOMY BURNISHED NICKEL',14,12
-'Brand#22','ECONOMY BURNISHED NICKEL',23,12
-'Brand#22','ECONOMY BURNISHED STEEL',23,12
-'Brand#22','ECONOMY BURNISHED STEEL',45,12
-'Brand#22','ECONOMY BURNISHED STEEL',49,12
-'Brand#22','ECONOMY BURNISHED TIN',9,12
-'Brand#22','ECONOMY BURNISHED TIN',19,12
-'Brand#22','ECONOMY PLATED BRASS',36,12
-'Brand#22','ECONOMY PLATED COPPER',3,12
-'Brand#22','ECONOMY PLATED STEEL',23,12
-'Brand#22','ECONOMY POLISHED COPPER',14,12
-'Brand#22','ECONOMY POLISHED TIN',49,12
-'Brand#22','LARGE ANODIZED NICKEL',14,12
-'Brand#22','LARGE ANODIZED TIN',14,12
-'Brand#22','LARGE BRUSHED BRASS',9,12
-'Brand#22','LARGE BRUSHED BRASS',49,12
-'Brand#22','LARGE BRUSHED COPPER',14,12
-'Brand#22','LARGE BRUSHED STEEL',19,12
-'Brand#22','LARGE BRUSHED TIN',23,12
-'Brand#22','LARGE BURNISHED BRASS',14,12
-'Brand#22','LARGE BURNISHED TIN',36,12
-'Brand#22','LARGE PLATED STEEL',9,12
-'Brand#22','LARGE PLATED TIN',49,12
-'Brand#22','LARGE POLISHED COPPER',23,12
-'Brand#22','LARGE POLISHED NICKEL',19,12
-'Brand#22','LARGE POLISHED NICKEL',23,12
-'Brand#22','LARGE POLISHED STEEL',3,12
-'Brand#22','MEDIUM ANODIZED COPPER',19,12
-'Brand#22','MEDIUM ANODIZED NICKEL',45,12
-'Brand#22','MEDIUM BRUSHED NICKEL',9,12
-'Brand#22','MEDIUM BRUSHED STEEL',3,12
-'Brand#22','MEDIUM PLATED BRASS',36,12
-'Brand#22','MEDIUM PLATED NICKEL',14,12
-'Brand#22','PROMO ANODIZED COPPER',45,12
-'Brand#22','PROMO ANODIZED STEEL',36,12
-'Brand#22','PROMO BURNISHED BRASS',3,12
-'Brand#22','PROMO BURNISHED BRASS',23,12
-'Brand#22','PROMO BURNISHED STEEL',3,12
-'Brand#22','PROMO PLATED BRASS',14,12
-'Brand#22','PROMO POLISHED BRASS',14,12
-'Brand#22','PROMO POLISHED COPPER',3,12
-'Brand#22','PROMO POLISHED COPPER',23,12
-'Brand#22','PROMO POLISHED NICKEL',19,12
-'Brand#22','PROMO POLISHED NICKEL',36,12
-'Brand#22','PROMO POLISHED STEEL',36,12
-'Brand#22','SMALL ANODIZED COPPER',9,12
-'Brand#22','SMALL ANODIZED STEEL',19,12
-'Brand#22','SMALL ANODIZED TIN',19,12
-'Brand#22','SMALL ANODIZED TIN',49,12
-'Brand#22','SMALL BRUSHED COPPER',36,12
-'Brand#22','SMALL BRUSHED TIN',45,12
-'Brand#22','SMALL BURNISHED COPPER',49,12
-'Brand#22','SMALL BURNISHED NICKEL',9,12
-'Brand#22','SMALL PLATED BRASS',9,12
-'Brand#22','SMALL PLATED COPPER',3,12
-'Brand#22','SMALL POLISHED NICKEL',9,12
-'Brand#22','SMALL POLISHED NICKEL',49,12
-'Brand#22','SMALL POLISHED STEEL',49,12
-'Brand#22','STANDARD ANODIZED BRASS',23,12
-'Brand#22','STANDARD ANODIZED STEEL',49,12
-'Brand#22','STANDARD BRUSHED BRASS',36,12
-'Brand#22','STANDARD BRUSHED TIN',19,12
-'Brand#22','STANDARD BRUSHED TIN',49,12
-'Brand#22','STANDARD BURNISHED TIN',14,12
-'Brand#22','STANDARD PLATED BRASS',45,12
-'Brand#22','STANDARD PLATED COPPER',36,12
-'Brand#22','STANDARD PLATED NICKEL',9,12
-'Brand#22','STANDARD PLATED STEEL',36,12
-'Brand#22','STANDARD PLATED STEEL',49,12
-'Brand#22','STANDARD PLATED TIN',3,12
-'Brand#22','STANDARD PLATED TIN',36,12
-'Brand#22','STANDARD PLATED TIN',49,12
-'Brand#22','STANDARD POLISHED BRASS',19,12
-'Brand#22','STANDARD POLISHED COPPER',9,12
-'Brand#22','STANDARD POLISHED NICKEL',19,12
-'Brand#22','STANDARD POLISHED STEEL',9,12
-'Brand#22','STANDARD POLISHED TIN',45,12
-'Brand#23','ECONOMY ANODIZED BRASS',36,12
-'Brand#23','ECONOMY ANODIZED NICKEL',9,12
-'Brand#23','ECONOMY ANODIZED STEEL',49,12
-'Brand#23','ECONOMY BRUSHED COPPER',3,12
-'Brand#23','ECONOMY BRUSHED COPPER',49,12
-'Brand#23','ECONOMY BRUSHED NICKEL',23,12
-'Brand#23','ECONOMY BURNISHED STEEL',49,12
-'Brand#23','ECONOMY BURNISHED TIN',3,12
-'Brand#23','ECONOMY PLATED STEEL',14,12
-'Brand#23','ECONOMY PLATED TIN',49,12
-'Brand#23','ECONOMY POLISHED COPPER',23,12
-'Brand#23','ECONOMY POLISHED NICKEL',36,12
-'Brand#23','ECONOMY POLISHED TIN',3,12
-'Brand#23','LARGE ANODIZED TIN',14,12
-'Brand#23','LARGE BURNISHED STEEL',23,12
-'Brand#23','LARGE BURNISHED TIN',19,12
-'Brand#23','LARGE PLATED COPPER',14,12
-'Brand#23','LARGE PLATED STEEL',9,12
-'Brand#23','LARGE POLISHED BRASS',19,12
-'Brand#23','LARGE POLISHED COPPER',45,12
-'Brand#23','LARGE POLISHED COPPER',49,12
-'Brand#23','LARGE POLISHED TIN',3,12
-'Brand#23','MEDIUM BRUSHED BRASS',9,12
-'Brand#23','MEDIUM BRUSHED COPPER',3,12
-'Brand#23','MEDIUM BRUSHED NICKEL',23,12
-'Brand#23','MEDIUM BRUSHED NICKEL',36,12
-'Brand#23','MEDIUM BURNISHED COPPER',9,12
-'Brand#23','MEDIUM BURNISHED COPPER',19,12
-'Brand#23','MEDIUM PLATED COPPER',19,12
-'Brand#23','MEDIUM PLATED STEEL',14,12
-'Brand#23','PROMO ANODIZED BRASS',9,12
-'Brand#23','PROMO ANODIZED BRASS',19,12
-'Brand#23','PROMO ANODIZED NICKEL',3,12
-'Brand#23','PROMO ANODIZED STEEL',36,12
-'Brand#23','PROMO BRUSHED COPPER',36,12
-'Brand#23','PROMO BURNISHED BRASS',9,12
-'Brand#23','PROMO BURNISHED STEEL',9,12
-'Brand#23','PROMO BURNISHED TIN',3,12
-'Brand#23','PROMO BURNISHED TIN',45,12
-'Brand#23','PROMO PLATED BRASS',19,12
-'Brand#23','PROMO PLATED BRASS',23,12
-'Brand#23','PROMO PLATED BRASS',49,12
-'Brand#23','PROMO PLATED NICKEL',3,12
-'Brand#23','PROMO PLATED TIN',14,12
-'Brand#23','PROMO POLISHED TIN',45,12
-'Brand#23','SMALL ANODIZED STEEL',3,12
-'Brand#23','SMALL ANODIZED TIN',45,12
-'Brand#23','SMALL BRUSHED BRASS',19,12
-'Brand#23','SMALL BRUSHED STEEL',3,12
-'Brand#23','SMALL BURNISHED BRASS',14,12
-'Brand#23','SMALL BURNISHED COPPER',36,12
-'Brand#23','SMALL BURNISHED STEEL',45,12
-'Brand#23','SMALL PLATED BRASS',49,12
-'Brand#23','SMALL PLATED STEEL',23,12
-'Brand#23','SMALL PLATED TIN',14,12
-'Brand#23','SMALL POLISHED COPPER',49,12
-'Brand#23','SMALL POLISHED TIN',23,12
-'Brand#23','STANDARD ANODIZED BRASS',23,12
-'Brand#23','STANDARD ANODIZED TIN',3,12
-'Brand#23','STANDARD ANODIZED TIN',45,12
-'Brand#23','STANDARD BRUSHED BRASS',3,12
-'Brand#23','STANDARD BRUSHED STEEL',9,12
-'Brand#23','STANDARD BRUSHED TIN',19,12
-'Brand#23','STANDARD PLATED BRASS',3,12
-'Brand#23','STANDARD PLATED NICKEL',49,12
-'Brand#23','STANDARD PLATED TIN',9,12
-'Brand#23','STANDARD PLATED TIN',19,12
-'Brand#23','STANDARD POLISHED STEEL',23,12
-'Brand#23','STANDARD POLISHED TIN',23,12
-'Brand#24','ECONOMY ANODIZED BRASS',19,12
-'Brand#24','ECONOMY ANODIZED COPPER',36,12
-'Brand#24','ECONOMY ANODIZED COPPER',49,12
-'Brand#24','ECONOMY ANODIZED NICKEL',3,12
-'Brand#24','ECONOMY ANODIZED STEEL',23,12
-'Brand#24','ECONOMY ANODIZED STEEL',45,12
-'Brand#24','ECONOMY BRUSHED STEEL',9,12
-'Brand#24','ECONOMY BRUSHED TIN',49,12
-'Brand#24','ECONOMY BURNISHED BRASS',14,12
-'Brand#24','ECONOMY BURNISHED COPPER',3,12
-'Brand#24','ECONOMY BURNISHED COPPER',19,12
-'Brand#24','ECONOMY BURNISHED STEEL',45,12
-'Brand#24','ECONOMY PLATED COPPER',49,12
-'Brand#24','ECONOMY PLATED STEEL',45,12
-'Brand#24','ECONOMY POLISHED BRASS',23,12
-'Brand#24','ECONOMY POLISHED STEEL',14,12
-'Brand#24','ECONOMY POLISHED TIN',14,12
-'Brand#24','ECONOMY POLISHED TIN',45,12
-'Brand#24','ECONOMY POLISHED TIN',49,12
-'Brand#24','LARGE ANODIZED BRASS',3,12
-'Brand#24','LARGE ANODIZED BRASS',45,12
-'Brand#24','LARGE BRUSHED BRASS',14,12
-'Brand#24','LARGE BRUSHED BRASS',45,12
-'Brand#24','LARGE BRUSHED STEEL',23,12
-'Brand#24','LARGE BRUSHED STEEL',45,12
-'Brand#24','LARGE BURNISHED STEEL',3,12
-'Brand#24','LARGE BURNISHED TIN',23,12
-'Brand#24','LARGE PLATED COPPER',23,12
-'Brand#24','LARGE PLATED STEEL',3,12
-'Brand#24','LARGE POLISHED COPPER',9,12
-'Brand#24','LARGE POLISHED TIN',14,12
-'Brand#24','MEDIUM ANODIZED BRASS',14,12
-'Brand#24','MEDIUM BRUSHED NICKEL',9,12
-'Brand#24','MEDIUM BRUSHED NICKEL',36,12
-'Brand#24','MEDIUM BRUSHED STEEL',23,12
-'Brand#24','MEDIUM BRUSHED STEEL',49,12
-'Brand#24','MEDIUM BURNISHED BRASS',36,12
-'Brand#24','MEDIUM BURNISHED STEEL',49,12
-'Brand#24','MEDIUM BURNISHED TIN',23,12
-'Brand#24','MEDIUM PLATED BRASS',3,12
-'Brand#24','MEDIUM PLATED NICKEL',36,12
-'Brand#24','PROMO ANODIZED NICKEL',19,12
-'Brand#24','PROMO ANODIZED NICKEL',45,12
-'Brand#24','PROMO ANODIZED TIN',14,12
-'Brand#24','PROMO BRUSHED COPPER',23,12
-'Brand#24','PROMO BRUSHED COPPER',49,12
-'Brand#24','PROMO BRUSHED NICKEL',3,12
-'Brand#24','PROMO BURNISHED BRASS',36,12
-'Brand#24','PROMO BURNISHED STEEL',14,12
-'Brand#24','PROMO BURNISHED TIN',14,12
-'Brand#24','PROMO PLATED STEEL',3,12
-'Brand#24','PROMO POLISHED BRASS',3,12
-'Brand#24','PROMO POLISHED BRASS',14,12
-'Brand#24','PROMO POLISHED COPPER',45,12
-'Brand#24','SMALL ANODIZED COPPER',3,12
-'Brand#24','SMALL ANODIZED NICKEL',23,12
-'Brand#24','SMALL BRUSHED BRASS',45,12
-'Brand#24','SMALL BRUSHED COPPER',9,12
-'Brand#24','SMALL BRUSHED NICKEL',49,12
-'Brand#24','SMALL BURNISHED BRASS',3,12
-'Brand#24','SMALL BURNISHED BRASS',14,12
-'Brand#24','SMALL BURNISHED COPPER',19,12
-'Brand#24','SMALL BURNISHED NICKEL',9,12
-'Brand#24','SMALL PLATED BRASS',3,12
-'Brand#24','SMALL PLATED BRASS',14,12
-'Brand#24','SMALL PLATED NICKEL',14,12
-'Brand#24','SMALL POLISHED BRASS',3,12
-'Brand#24','SMALL POLISHED NICKEL',19,12
-'Brand#24','SMALL POLISHED TIN',9,12
-'Brand#24','STANDARD ANODIZED TIN',49,12
-'Brand#24','STANDARD BRUSHED BRASS',14,12
-'Brand#24','STANDARD BRUSHED BRASS',23,12
-'Brand#24','STANDARD BRUSHED NICKEL',19,12
-'Brand#24','STANDARD BRUSHED STEEL',23,12
-'Brand#24','STANDARD PLATED BRASS',36,12
-'Brand#24','STANDARD PLATED COPPER',49,12
-'Brand#24','STANDARD PLATED NICKEL',36,12
-'Brand#24','STANDARD POLISHED BRASS',9,12
-'Brand#24','STANDARD POLISHED COPPER',9,12
-'Brand#25','ECONOMY ANODIZED STEEL',14,12
-'Brand#25','ECONOMY ANODIZED STEEL',45,12
-'Brand#25','ECONOMY BRUSHED NICKEL',9,12
-'Brand#25','ECONOMY BRUSHED STEEL',3,12
-'Brand#25','ECONOMY BRUSHED TIN',14,12
-'Brand#25','ECONOMY PLATED COPPER',3,12
-'Brand#25','ECONOMY PLATED NICKEL',19,12
-'Brand#25','ECONOMY PLATED STEEL',9,12
-'Brand#25','ECONOMY POLISHED BRASS',3,12
-'Brand#25','ECONOMY POLISHED BRASS',9,12
-'Brand#25','ECONOMY POLISHED NICKEL',3,12
-'Brand#25','LARGE ANODIZED BRASS',14,12
-'Brand#25','LARGE ANODIZED BRASS',23,12
-'Brand#25','LARGE ANODIZED COPPER',19,12
-'Brand#25','LARGE ANODIZED COPPER',36,12
-'Brand#25','LARGE BRUSHED BRASS',19,12
-'Brand#25','LARGE BRUSHED NICKEL',49,12
-'Brand#25','LARGE BRUSHED STEEL',36,12
-'Brand#25','LARGE BRUSHED TIN',3,12
-'Brand#25','LARGE BRUSHED TIN',9,12
-'Brand#25','LARGE BURNISHED BRASS',23,12
-'Brand#25','LARGE BURNISHED STEEL',36,12
-'Brand#25','LARGE BURNISHED TIN',14,12
-'Brand#25','LARGE BURNISHED TIN',36,12
-'Brand#25','LARGE PLATED NICKEL',45,12
-'Brand#25','LARGE PLATED TIN',23,12
-'Brand#25','MEDIUM ANODIZED BRASS',3,12
-'Brand#25','MEDIUM ANODIZED BRASS',9,12
-'Brand#25','MEDIUM ANODIZED BRASS',14,12
-'Brand#25','MEDIUM ANODIZED BRASS',19,12
-'Brand#25','MEDIUM ANODIZED STEEL',36,12
-'Brand#25','MEDIUM ANODIZED TIN',3,12
-'Brand#25','MEDIUM BRUSHED BRASS',14,12
-'Brand#25','MEDIUM BRUSHED BRASS',49,12
-'Brand#25','MEDIUM BRUSHED TIN',9,12
-'Brand#25','MEDIUM BRUSHED TIN',49,12
-'Brand#25','MEDIUM BURNISHED STEEL',36,12
-'Brand#25','MEDIUM PLATED COPPER',14,12
-'Brand#25','MEDIUM PLATED COPPER',23,12
-'Brand#25','MEDIUM PLATED STEEL',36,12
-'Brand#25','MEDIUM PLATED TIN',14,12
-'Brand#25','PROMO ANODIZED COPPER',3,12
-'Brand#25','PROMO ANODIZED NICKEL',23,12
-'Brand#25','PROMO ANODIZED TIN',36,12
-'Brand#25','PROMO BURNISHED COPPER',19,12
-'Brand#25','PROMO BURNISHED COPPER',36,12
-'Brand#25','PROMO BURNISHED COPPER',45,12
-'Brand#25','PROMO BURNISHED STEEL',9,12
-'Brand#25','PROMO PLATED BRASS',9,12
-'Brand#25','PROMO POLISHED BRASS',3,12
-'Brand#25','PROMO POLISHED BRASS',49,12
-'Brand#25','PROMO POLISHED NICKEL',36,12
-'Brand#25','PROMO POLISHED STEEL',45,12
-'Brand#25','SMALL ANODIZED COPPER',45,12
-'Brand#25','SMALL ANODIZED TIN',14,12
-'Brand#25','SMALL BRUSHED COPPER',14,12
-'Brand#25','SMALL BURNISHED BRASS',3,12
-'Brand#25','SMALL BURNISHED NICKEL',45,12
-'Brand#25','SMALL BURNISHED STEEL',14,12
-'Brand#25','SMALL PLATED BRASS',19,12
-'Brand#25','SMALL PLATED BRASS',49,12
-'Brand#25','SMALL PLATED COPPER',23,12
-'Brand#25','SMALL PLATED TIN',3,12
-'Brand#25','SMALL POLISHED COPPER',9,12
-'Brand#25','STANDARD BRUSHED TIN',45,12
-'Brand#25','STANDARD BURNISHED BRASS',3,12
-'Brand#25','STANDARD BURNISHED BRASS',14,12
-'Brand#25','STANDARD BURNISHED NICKEL',36,12
-'Brand#25','STANDARD PLATED COPPER',9,12
-'Brand#25','STANDARD PLATED COPPER',23,12
-'Brand#25','STANDARD PLATED NICKEL',36,12
-'Brand#25','STANDARD PLATED NICKEL',49,12
-'Brand#25','STANDARD PLATED TIN',36,12
-'Brand#25','STANDARD POLISHED COPPER',23,12
-'Brand#25','STANDARD POLISHED NICKEL',45,12
-'Brand#25','STANDARD POLISHED TIN',3,12
-'Brand#31','ECONOMY ANODIZED BRASS',19,12
-'Brand#31','ECONOMY ANODIZED TIN',36,12
-'Brand#31','ECONOMY BRUSHED NICKEL',14,12
-'Brand#31','ECONOMY BURNISHED COPPER',14,12
-'Brand#31','ECONOMY BURNISHED NICKEL',19,12
-'Brand#31','ECONOMY PLATED NICKEL',9,12
-'Brand#31','ECONOMY POLISHED COPPER',3,12
-'Brand#31','ECONOMY POLISHED TIN',36,12
-'Brand#31','LARGE ANODIZED COPPER',3,12
-'Brand#31','LARGE ANODIZED COPPER',14,12
-'Brand#31','LARGE ANODIZED STEEL',36,12
-'Brand#31','LARGE ANODIZED TIN',3,12
-'Brand#31','LARGE BRUSHED BRASS',36,12
-'Brand#31','LARGE BRUSHED NICKEL',19,12
-'Brand#31','LARGE BRUSHED STEEL',36,12
-'Brand#31','LARGE BRUSHED TIN',14,12
-'Brand#31','LARGE BURNISHED BRASS',36,12
-'Brand#31','LARGE BURNISHED NICKEL',14,12
-'Brand#31','LARGE PLATED STEEL',23,12
-'Brand#31','LARGE POLISHED BRASS',9,12
-'Brand#31','LARGE POLISHED STEEL',45,12
-'Brand#31','MEDIUM ANODIZED STEEL',14,12
-'Brand#31','MEDIUM ANODIZED TIN',9,12
-'Brand#31','MEDIUM ANODIZED TIN',23,12
-'Brand#31','MEDIUM BRUSHED BRASS',23,12
-'Brand#31','MEDIUM BRUSHED STEEL',3,12
-'Brand#31','MEDIUM BURNISHED BRASS',14,12
-'Brand#31','MEDIUM BURNISHED STEEL',9,12
-'Brand#31','PROMO ANODIZED COPPER',14,12
-'Brand#31','PROMO ANODIZED TIN',36,12
-'Brand#31','PROMO BRUSHED BRASS',3,12
-'Brand#31','PROMO BRUSHED COPPER',23,12
-'Brand#31','PROMO BRUSHED STEEL',23,12
-'Brand#31','PROMO BURNISHED BRASS',49,12
-'Brand#31','PROMO BURNISHED STEEL',3,12
-'Brand#31','PROMO PLATED BRASS',36,12
-'Brand#31','PROMO POLISHED NICKEL',49,12
-'Brand#31','SMALL ANODIZED COPPER',3,12
-'Brand#31','SMALL ANODIZED NICKEL',9,12
-'Brand#31','SMALL ANODIZED TIN',3,12
-'Brand#31','SMALL BRUSHED COPPER',14,12
-'Brand#31','SMALL BRUSHED COPPER',19,12
-'Brand#31','SMALL BRUSHED NICKEL',3,12
-'Brand#31','SMALL BRUSHED NICKEL',23,12
-'Brand#31','SMALL BRUSHED NICKEL',36,12
-'Brand#31','SMALL BURNISHED BRASS',3,12
-'Brand#31','SMALL BURNISHED NICKEL',9,12
-'Brand#31','SMALL BURNISHED TIN',23,12
-'Brand#31','SMALL PLATED STEEL',19,12
-'Brand#31','SMALL PLATED STEEL',23,12
-'Brand#31','SMALL POLISHED STEEL',3,12
-'Brand#31','STANDARD ANODIZED BRASS',45,12
-'Brand#31','STANDARD ANODIZED NICKEL',3,12
-'Brand#31','STANDARD BRUSHED COPPER',3,12
-'Brand#31','STANDARD BURNISHED STEEL',45,12
-'Brand#31','STANDARD PLATED BRASS',3,12
-'Brand#31','STANDARD PLATED BRASS',19,12
-'Brand#31','STANDARD PLATED STEEL',19,12
-'Brand#31','STANDARD POLISHED BRASS',23,12
-'Brand#31','STANDARD POLISHED COPPER',45,12
-'Brand#32','ECONOMY ANODIZED BRASS',14,12
-'Brand#32','ECONOMY ANODIZED STEEL',23,12
-'Brand#32','ECONOMY ANODIZED STEEL',49,12
-'Brand#32','ECONOMY ANODIZED TIN',23,12
-'Brand#32','ECONOMY BRUSHED NICKEL',3,12
-'Brand#32','ECONOMY BRUSHED STEEL',36,12
-'Brand#32','ECONOMY BRUSHED TIN',19,12
-'Brand#32','ECONOMY BURNISHED TIN',19,12
-'Brand#32','ECONOMY PLATED BRASS',19,12
-'Brand#32','ECONOMY PLATED NICKEL',23,12
-'Brand#32','ECONOMY PLATED TIN',45,12
-'Brand#32','LARGE ANODIZED NICKEL',3,12
-'Brand#32','LARGE ANODIZED STEEL',14,12
-'Brand#32','LARGE BRUSHED BRASS',45,12
-'Brand#32','LARGE BRUSHED NICKEL',3,12
-'Brand#32','LARGE BRUSHED STEEL',45,12
-'Brand#32','LARGE BRUSHED TIN',19,12
-'Brand#32','LARGE PLATED BRASS',3,12
-'Brand#32','LARGE PLATED BRASS',9,12
-'Brand#32','LARGE POLISHED COPPER',19,12
-'Brand#32','LARGE POLISHED NICKEL',3,12
-'Brand#32','MEDIUM ANODIZED COPPER',45,12
-'Brand#32','MEDIUM ANODIZED STEEL',19,12
-'Brand#32','MEDIUM ANODIZED STEEL',49,12
-'Brand#32','MEDIUM ANODIZED TIN',45,12
-'Brand#32','MEDIUM ANODIZED TIN',49,12
-'Brand#32','MEDIUM BURNISHED BRASS',23,12
-'Brand#32','MEDIUM BURNISHED NICKEL',23,12
-'Brand#32','MEDIUM PLATED BRASS',49,12
-'Brand#32','MEDIUM PLATED TIN',3,12
-'Brand#32','PROMO ANODIZED NICKEL',49,12
-'Brand#32','PROMO BRUSHED COPPER',45,12
-'Brand#32','PROMO BRUSHED STEEL',23,12
-'Brand#32','PROMO BRUSHED STEEL',49,12
-'Brand#32','PROMO BRUSHED TIN',14,12
-'Brand#32','PROMO BRUSHED TIN',36,12
-'Brand#32','PROMO BURNISHED NICKEL',45,12
-'Brand#32','PROMO BURNISHED TIN',49,12
-'Brand#32','PROMO PLATED COPPER',49,12
-'Brand#32','PROMO PLATED STEEL',49,12
-'Brand#32','PROMO POLISHED STEEL',49,12
-'Brand#32','PROMO POLISHED TIN',19,12
-'Brand#32','PROMO POLISHED TIN',23,12
-'Brand#32','PROMO POLISHED TIN',45,12
-'Brand#32','SMALL ANODIZED NICKEL',9,12
-'Brand#32','SMALL BRUSHED TIN',3,12
-'Brand#32','SMALL BRUSHED TIN',9,12
-'Brand#32','SMALL BURNISHED TIN',23,12
-'Brand#32','SMALL BURNISHED TIN',36,12
-'Brand#32','SMALL PLATED BRASS',36,12
-'Brand#32','SMALL PLATED COPPER',14,12
-'Brand#32','SMALL PLATED COPPER',45,12
-'Brand#32','SMALL PLATED STEEL',36,12
-'Brand#32','SMALL PLATED TIN',14,12
-'Brand#32','SMALL POLISHED NICKEL',45,12
-'Brand#32','SMALL POLISHED STEEL',23,12
-'Brand#32','SMALL POLISHED STEEL',36,12
-'Brand#32','STANDARD ANODIZED NICKEL',9,12
-'Brand#32','STANDARD ANODIZED STEEL',3,12
-'Brand#32','STANDARD ANODIZED TIN',14,12
-'Brand#32','STANDARD ANODIZED TIN',19,12
-'Brand#32','STANDARD BRUSHED BRASS',14,12
-'Brand#32','STANDARD BRUSHED STEEL',14,12
-'Brand#32','STANDARD BRUSHED TIN',9,12
-'Brand#32','STANDARD BURNISHED BRASS',45,12
-'Brand#32','STANDARD BURNISHED COPPER',3,12
-'Brand#32','STANDARD BURNISHED NICKEL',3,12
-'Brand#32','STANDARD PLATED STEEL',9,12
-'Brand#32','STANDARD PLATED STEEL',49,12
-'Brand#32','STANDARD POLISHED COPPER',36,12
-'Brand#33','ECONOMY ANODIZED NICKEL',36,12
-'Brand#33','ECONOMY ANODIZED STEEL',23,12
-'Brand#33','ECONOMY ANODIZED STEEL',45,12
-'Brand#33','ECONOMY BURNISHED NICKEL',14,12
-'Brand#33','ECONOMY BURNISHED TIN',45,12
-'Brand#33','ECONOMY PLATED STEEL',3,12
-'Brand#33','ECONOMY PLATED TIN',3,12
-'Brand#33','ECONOMY PLATED TIN',9,12
-'Brand#33','ECONOMY POLISHED BRASS',3,12
-'Brand#33','ECONOMY POLISHED BRASS',14,12
-'Brand#33','LARGE ANODIZED BRASS',3,12
-'Brand#33','LARGE ANODIZED BRASS',36,12
-'Brand#33','LARGE ANODIZED NICKEL',23,12
-'Brand#33','LARGE ANODIZED STEEL',3,12
-'Brand#33','LARGE ANODIZED TIN',36,12
-'Brand#33','LARGE BRUSHED BRASS',23,12
-'Brand#33','LARGE BRUSHED STEEL',3,12
-'Brand#33','LARGE BRUSHED TIN',36,12
-'Brand#33','LARGE BURNISHED BRASS',19,12
-'Brand#33','LARGE BURNISHED BRASS',49,12
-'Brand#33','LARGE PLATED NICKEL',9,12
-'Brand#33','LARGE PLATED NICKEL',19,12
-'Brand#33','LARGE POLISHED BRASS',9,12
-'Brand#33','LARGE POLISHED NICKEL',45,12
-'Brand#33','MEDIUM ANODIZED NICKEL',19,12
-'Brand#33','MEDIUM ANODIZED TIN',49,12
-'Brand#33','MEDIUM BRUSHED BRASS',45,12
-'Brand#33','MEDIUM BRUSHED NICKEL',14,12
-'Brand#33','MEDIUM BRUSHED STEEL',14,12
-'Brand#33','MEDIUM BRUSHED STEEL',36,12
-'Brand#33','MEDIUM BURNISHED BRASS',49,12
-'Brand#33','MEDIUM BURNISHED TIN',3,12
-'Brand#33','MEDIUM BURNISHED TIN',49,12
-'Brand#33','MEDIUM PLATED STEEL',3,12
-'Brand#33','MEDIUM PLATED TIN',23,12
-'Brand#33','PROMO ANODIZED STEEL',23,12
-'Brand#33','PROMO ANODIZED TIN',9,12
-'Brand#33','PROMO ANODIZED TIN',49,12
-'Brand#33','PROMO BRUSHED BRASS',3,12
-'Brand#33','PROMO BRUSHED BRASS',19,12
-'Brand#33','PROMO BRUSHED TIN',49,12
-'Brand#33','PROMO BURNISHED NICKEL',23,12
-'Brand#33','PROMO BURNISHED TIN',3,12
-'Brand#33','PROMO BURNISHED TIN',19,12
-'Brand#33','PROMO BURNISHED TIN',23,12
-'Brand#33','PROMO BURNISHED TIN',36,12
-'Brand#33','PROMO BURNISHED TIN',49,12
-'Brand#33','PROMO PLATED BRASS',23,12
-'Brand#33','PROMO PLATED BRASS',36,12
-'Brand#33','PROMO POLISHED COPPER',3,12
-'Brand#33','PROMO POLISHED NICKEL',3,12
-'Brand#33','PROMO POLISHED STEEL',23,12
-'Brand#33','SMALL ANODIZED STEEL',14,12
-'Brand#33','SMALL ANODIZED STEEL',49,12
-'Brand#33','SMALL ANODIZED TIN',19,12
-'Brand#33','SMALL BRUSHED BRASS',36,12
-'Brand#33','SMALL BRUSHED NICKEL',19,12
-'Brand#33','SMALL BRUSHED NICKEL',45,12
-'Brand#33','SMALL BURNISHED BRASS',36,12
-'Brand#33','SMALL BURNISHED TIN',9,12
-'Brand#33','SMALL PLATED BRASS',14,12
-'Brand#33','SMALL PLATED NICKEL',49,12
-'Brand#33','SMALL PLATED STEEL',3,12
-'Brand#33','SMALL POLISHED NICKEL',9,12
-'Brand#33','STANDARD ANODIZED STEEL',14,12
-'Brand#33','STANDARD ANODIZED STEEL',45,12
-'Brand#33','STANDARD ANODIZED TIN',9,12
-'Brand#33','STANDARD BRUSHED BRASS',19,12
-'Brand#33','STANDARD BRUSHED NICKEL',14,12
-'Brand#33','STANDARD BURNISHED BRASS',9,12
-'Brand#33','STANDARD BURNISHED TIN',23,12
-'Brand#33','STANDARD POLISHED STEEL',45,12
-'Brand#34','ECONOMY ANODIZED NICKEL',9,12
-'Brand#34','ECONOMY ANODIZED NICKEL',49,12
-'Brand#34','ECONOMY ANODIZED STEEL',45,12
-'Brand#34','ECONOMY BURNISHED COPPER',9,12
-'Brand#34','ECONOMY BURNISHED COPPER',23,12
-'Brand#34','ECONOMY BURNISHED COPPER',36,12
-'Brand#34','ECONOMY BURNISHED NICKEL',19,12
-'Brand#34','ECONOMY BURNISHED NICKEL',49,12
-'Brand#34','ECONOMY BURNISHED STEEL',9,12
-'Brand#34','ECONOMY BURNISHED TIN',14,12
-'Brand#34','ECONOMY PLATED BRASS',3,12
-'Brand#34','ECONOMY PLATED COPPER',3,12
-'Brand#34','ECONOMY PLATED TIN',3,12
-'Brand#34','ECONOMY PLATED TIN',14,12
-'Brand#34','ECONOMY POLISHED TIN',36,12
-'Brand#34','LARGE ANODIZED COPPER',3,12
-'Brand#34','LARGE ANODIZED NICKEL',3,12
-'Brand#34','LARGE ANODIZED NICKEL',49,12
-'Brand#34','LARGE BRUSHED COPPER',36,12
-'Brand#34','LARGE BRUSHED NICKEL',19,12
-'Brand#34','LARGE BRUSHED NICKEL',49,12
-'Brand#34','LARGE BURNISHED COPPER',23,12
-'Brand#34','LARGE BURNISHED NICKEL',23,12
-'Brand#34','LARGE BURNISHED TIN',14,12
-'Brand#34','LARGE BURNISHED TIN',23,12
-'Brand#34','LARGE BURNISHED TIN',49,12
-'Brand#34','LARGE PLATED COPPER',9,12
-'Brand#34','LARGE PLATED TIN',14,12
-'Brand#34','LARGE POLISHED BRASS',3,12
-'Brand#34','LARGE POLISHED BRASS',45,12
-'Brand#34','LARGE POLISHED COPPER',3,12
-'Brand#34','LARGE POLISHED NICKEL',3,12
-'Brand#34','LARGE POLISHED NICKEL',49,12
-'Brand#34','MEDIUM ANODIZED BRASS',45,12
-'Brand#34','MEDIUM BRUSHED BRASS',49,12
-'Brand#34','MEDIUM BRUSHED COPPER',9,12
-'Brand#34','MEDIUM BRUSHED COPPER',23,12
-'Brand#34','MEDIUM BRUSHED NICKEL',9,12
-'Brand#34','MEDIUM BRUSHED STEEL',45,12
-'Brand#34','MEDIUM BRUSHED TIN',36,12
-'Brand#34','MEDIUM BURNISHED BRASS',14,12
-'Brand#34','MEDIUM BURNISHED NICKEL',3,12
-'Brand#34','MEDIUM PLATED BRASS',23,12
-'Brand#34','PROMO ANODIZED NICKEL',3,12
-'Brand#34','PROMO BRUSHED COPPER',49,12
-'Brand#34','PROMO BRUSHED NICKEL',49,12
-'Brand#34','PROMO BURNISHED STEEL',14,12
-'Brand#34','PROMO PLATED BRASS',3,12
-'Brand#34','PROMO PLATED BRASS',36,12
-'Brand#34','PROMO PLATED TIN',49,12
-'Brand#34','PROMO POLISHED BRASS',14,12
-'Brand#34','PROMO POLISHED COPPER',23,12
-'Brand#34','PROMO POLISHED NICKEL',49,12
-'Brand#34','SMALL ANODIZED BRASS',19,12
-'Brand#34','SMALL ANODIZED COPPER',14,12
-'Brand#34','SMALL ANODIZED STEEL',19,12
-'Brand#34','SMALL ANODIZED TIN',9,12
-'Brand#34','SMALL BRUSHED COPPER',14,12
-'Brand#34','SMALL BURNISHED BRASS',9,12
-'Brand#34','SMALL BURNISHED BRASS',23,12
-'Brand#34','SMALL BURNISHED COPPER',9,12
-'Brand#34','SMALL BURNISHED COPPER',36,12
-'Brand#34','SMALL BURNISHED NICKEL',9,12
-'Brand#34','SMALL BURNISHED NICKEL',14,12
-'Brand#34','SMALL BURNISHED NICKEL',36,12
-'Brand#34','SMALL BURNISHED STEEL',14,12
-'Brand#34','SMALL PLATED BRASS',14,12
-'Brand#34','SMALL PLATED TIN',45,12
-'Brand#34','SMALL POLISHED STEEL',19,12
-'Brand#34','STANDARD ANODIZED BRASS',36,12
-'Brand#34','STANDARD ANODIZED TIN',3,12
-'Brand#34','STANDARD ANODIZED TIN',14,12
-'Brand#34','STANDARD BRUSHED BRASS',36,12
-'Brand#34','STANDARD BRUSHED COPPER',3,12
-'Brand#34','STANDARD BRUSHED STEEL',23,12
-'Brand#34','STANDARD BRUSHED TIN',45,12
-'Brand#34','STANDARD BURNISHED STEEL',14,12
-'Brand#34','STANDARD BURNISHED TIN',45,12
-'Brand#34','STANDARD POLISHED COPPER',14,12
-'Brand#35','ECONOMY ANODIZED BRASS',14,12
-'Brand#35','ECONOMY ANODIZED COPPER',19,12
-'Brand#35','ECONOMY ANODIZED NICKEL',14,12
-'Brand#35','ECONOMY ANODIZED STEEL',14,12
-'Brand#35','ECONOMY ANODIZED STEEL',45,12
-'Brand#35','ECONOMY BRUSHED BRASS',36,12
-'Brand#35','ECONOMY BRUSHED NICKEL',49,12
-'Brand#35','ECONOMY BURNISHED BRASS',19,12
-'Brand#35','ECONOMY BURNISHED BRASS',36,12
-'Brand#35','ECONOMY BURNISHED STEEL',36,12
-'Brand#35','ECONOMY PLATED TIN',45,12
-'Brand#35','ECONOMY PLATED TIN',49,12
-'Brand#35','ECONOMY POLISHED COPPER',9,12
-'Brand#35','ECONOMY POLISHED NICKEL',23,12
-'Brand#35','ECONOMY POLISHED STEEL',9,12
-'Brand#35','ECONOMY POLISHED TIN',23,12
-'Brand#35','LARGE ANODIZED BRASS',3,12
-'Brand#35','LARGE ANODIZED BRASS',45,12
-'Brand#35','LARGE ANODIZED COPPER',19,12
-'Brand#35','LARGE ANODIZED COPPER',36,12
-'Brand#35','LARGE ANODIZED STEEL',45,12
-'Brand#35','LARGE ANODIZED TIN',45,12
-'Brand#35','LARGE BRUSHED COPPER',23,12
-'Brand#35','LARGE BRUSHED NICKEL',36,12
-'Brand#35','LARGE BRUSHED STEEL',3,12
-'Brand#35','LARGE BRUSHED TIN',36,12
-'Brand#35','LARGE BURNISHED BRASS',45,12
-'Brand#35','LARGE BURNISHED STEEL',9,12
-'Brand#35','LARGE BURNISHED STEEL',45,12
-'Brand#35','LARGE BURNISHED TIN',49,12
-'Brand#35','LARGE PLATED BRASS',3,12
-'Brand#35','LARGE PLATED BRASS',23,12
-'Brand#35','LARGE PLATED STEEL',19,12
-'Brand#35','LARGE PLATED STEEL',49,12
-'Brand#35','MEDIUM ANODIZED TIN',3,12
-'Brand#35','MEDIUM BRUSHED BRASS',49,12
-'Brand#35','MEDIUM BRUSHED COPPER',14,12
-'Brand#35','MEDIUM BRUSHED NICKEL',3,12
-'Brand#35','MEDIUM BRUSHED STEEL',45,12
-'Brand#35','MEDIUM BURNISHED STEEL',19,12
-'Brand#35','MEDIUM PLATED NICKEL',45,12
-'Brand#35','MEDIUM PLATED STEEL',3,12
-'Brand#35','MEDIUM PLATED TIN',36,12
-'Brand#35','PROMO ANODIZED BRASS',14,12
-'Brand#35','PROMO ANODIZED STEEL',3,12
-'Brand#35','PROMO ANODIZED STEEL',23,12
-'Brand#35','PROMO ANODIZED TIN',49,12
-'Brand#35','PROMO BRUSHED COPPER',9,12
-'Brand#35','PROMO BRUSHED COPPER',23,12
-'Brand#35','PROMO BRUSHED STEEL',36,12
-'Brand#35','PROMO BURNISHED NICKEL',19,12
-'Brand#35','PROMO BURNISHED STEEL',3,12
-'Brand#35','PROMO BURNISHED STEEL',14,12
-'Brand#35','PROMO BURNISHED STEEL',49,12
-'Brand#35','PROMO BURNISHED TIN',9,12
-'Brand#35','PROMO BURNISHED TIN',14,12
-'Brand#35','PROMO POLISHED BRASS',19,12
-'Brand#35','PROMO POLISHED COPPER',49,12
-'Brand#35','PROMO POLISHED NICKEL',49,12
-'Brand#35','PROMO POLISHED STEEL',9,12
-'Brand#35','PROMO POLISHED TIN',36,12
-'Brand#35','SMALL ANODIZED BRASS',9,12
-'Brand#35','SMALL ANODIZED BRASS',19,12
-'Brand#35','SMALL BRUSHED NICKEL',19,12
-'Brand#35','SMALL BRUSHED STEEL',45,12
-'Brand#35','SMALL BRUSHED TIN',45,12
-'Brand#35','SMALL BURNISHED BRASS',9,12
-'Brand#35','SMALL BURNISHED BRASS',23,12
-'Brand#35','SMALL BURNISHED BRASS',36,12
-'Brand#35','SMALL BURNISHED BRASS',49,12
-'Brand#35','SMALL BURNISHED COPPER',45,12
-'Brand#35','SMALL PLATED BRASS',9,12
-'Brand#35','SMALL PLATED BRASS',36,12
-'Brand#35','SMALL PLATED TIN',36,12
-'Brand#35','STANDARD ANODIZED TIN',3,12
-'Brand#35','STANDARD ANODIZED TIN',9,12
-'Brand#35','STANDARD BURNISHED BRASS',36,12
-'Brand#35','STANDARD BURNISHED STEEL',49,12
-'Brand#35','STANDARD PLATED BRASS',49,12
-'Brand#35','STANDARD PLATED COPPER',9,12
-'Brand#35','STANDARD PLATED NICKEL',23,12
-'Brand#35','STANDARD PLATED NICKEL',49,12
-'Brand#35','STANDARD PLATED STEEL',23,12
-'Brand#35','STANDARD PLATED TIN',45,12
-'Brand#35','STANDARD POLISHED STEEL',23,12
-'Brand#35','STANDARD POLISHED TIN',3,12
-'Brand#41','ECONOMY ANODIZED BRASS',45,12
-'Brand#41','ECONOMY ANODIZED TIN',14,12
-'Brand#41','ECONOMY BRUSHED BRASS',23,12
-'Brand#41','ECONOMY BRUSHED NICKEL',49,12
-'Brand#41','ECONOMY BRUSHED STEEL',36,12
-'Brand#41','ECONOMY BRUSHED TIN',45,12
-'Brand#41','ECONOMY BURNISHED COPPER',3,12
-'Brand#41','ECONOMY BURNISHED COPPER',45,12
-'Brand#41','ECONOMY PLATED NICKEL',23,12
-'Brand#41','ECONOMY PLATED STEEL',36,12
-'Brand#41','ECONOMY PLATED TIN',23,12
-'Brand#41','ECONOMY POLISHED BRASS',36,12
-'Brand#41','ECONOMY POLISHED COPPER',49,12
-'Brand#41','ECONOMY POLISHED NICKEL',9,12
-'Brand#41','ECONOMY POLISHED NICKEL',19,12
-'Brand#41','ECONOMY POLISHED NICKEL',23,12
-'Brand#41','ECONOMY POLISHED STEEL',49,12
-'Brand#41','LARGE ANODIZED BRASS',14,12
-'Brand#41','LARGE ANODIZED BRASS',23,12
-'Brand#41','LARGE ANODIZED COPPER',36,12
-'Brand#41','LARGE ANODIZED STEEL',23,12
-'Brand#41','LARGE BRUSHED BRASS',9,12
-'Brand#41','LARGE BRUSHED COPPER',23,12
-'Brand#41','LARGE BURNISHED BRASS',36,12
-'Brand#41','LARGE BURNISHED STEEL',23,12
-'Brand#41','LARGE PLATED NICKEL',14,12
-'Brand#41','LARGE POLISHED BRASS',45,12
-'Brand#41','LARGE POLISHED COPPER',23,12
-'Brand#41','LARGE POLISHED COPPER',36,12
-'Brand#41','LARGE POLISHED STEEL',3,12
-'Brand#41','LARGE POLISHED STEEL',9,12
-'Brand#41','MEDIUM ANODIZED NICKEL',3,12
-'Brand#41','MEDIUM ANODIZED TIN',3,12
-'Brand#41','MEDIUM BURNISHED COPPER',23,12
-'Brand#41','MEDIUM BURNISHED TIN',14,12
-'Brand#41','MEDIUM BURNISHED TIN',45,12
-'Brand#41','MEDIUM PLATED BRASS',19,12
-'Brand#41','MEDIUM PLATED COPPER',19,12
-'Brand#41','MEDIUM PLATED COPPER',45,12
-'Brand#41','PROMO ANODIZED BRASS',14,12
-'Brand#41','PROMO ANODIZED NICKEL',49,12
-'Brand#41','PROMO ANODIZED TIN',9,12
-'Brand#41','PROMO BURNISHED COPPER',49,12
-'Brand#41','PROMO BURNISHED TIN',14,12
-'Brand#41','PROMO PLATED NICKEL',14,12
-'Brand#41','PROMO PLATED STEEL',45,12
-'Brand#41','PROMO PLATED TIN',3,12
-'Brand#41','PROMO PLATED TIN',36,12
-'Brand#41','PROMO POLISHED COPPER',23,12
-'Brand#41','PROMO POLISHED NICKEL',19,12
-'Brand#41','SMALL ANODIZED BRASS',3,12
-'Brand#41','SMALL ANODIZED COPPER',14,12
-'Brand#41','SMALL ANODIZED NICKEL',36,12
-'Brand#41','SMALL BRUSHED STEEL',36,12
-'Brand#41','SMALL BRUSHED TIN',14,12
-'Brand#41','SMALL BURNISHED TIN',3,12
-'Brand#41','SMALL PLATED BRASS',14,12
-'Brand#41','SMALL PLATED STEEL',14,12
-'Brand#41','SMALL POLISHED COPPER',36,12
-'Brand#41','SMALL POLISHED TIN',36,12
-'Brand#41','STANDARD ANODIZED BRASS',3,12
-'Brand#41','STANDARD ANODIZED BRASS',36,12
-'Brand#41','STANDARD ANODIZED COPPER',14,12
-'Brand#41','STANDARD ANODIZED NICKEL',36,12
-'Brand#41','STANDARD BURNISHED STEEL',9,12
-'Brand#41','STANDARD BURNISHED TIN',3,12
-'Brand#41','STANDARD PLATED BRASS',45,12
-'Brand#41','STANDARD PLATED COPPER',49,12
-'Brand#41','STANDARD POLISHED COPPER',23,12
-'Brand#41','STANDARD POLISHED NICKEL',3,12
-'Brand#42','ECONOMY ANODIZED BRASS',36,12
-'Brand#42','ECONOMY ANODIZED STEEL',9,12
-'Brand#42','ECONOMY BRUSHED NICKEL',45,12
-'Brand#42','ECONOMY BRUSHED TIN',14,12
-'Brand#42','ECONOMY BURNISHED NICKEL',49,12
-'Brand#42','ECONOMY BURNISHED STEEL',49,12
-'Brand#42','ECONOMY BURNISHED TIN',19,12
-'Brand#42','ECONOMY PLATED COPPER',14,12
-'Brand#42','ECONOMY PLATED NICKEL',9,12
-'Brand#42','ECONOMY POLISHED COPPER',9,12
-'Brand#42','LARGE ANODIZED BRASS',49,12
-'Brand#42','LARGE ANODIZED COPPER',36,12
-'Brand#42','LARGE BURNISHED COPPER',9,12
-'Brand#42','LARGE BURNISHED COPPER',19,12
-'Brand#42','LARGE BURNISHED TIN',9,12
-'Brand#42','LARGE PLATED BRASS',23,12
-'Brand#42','LARGE PLATED BRASS',36,12
-'Brand#42','LARGE PLATED NICKEL',23,12
-'Brand#42','LARGE PLATED TIN',9,12
-'Brand#42','LARGE PLATED TIN',19,12
-'Brand#42','LARGE POLISHED BRASS',36,12
-'Brand#42','LARGE POLISHED STEEL',9,12
-'Brand#42','LARGE POLISHED STEEL',45,12
-'Brand#42','LARGE POLISHED TIN',14,12
-'Brand#42','MEDIUM ANODIZED NICKEL',19,12
-'Brand#42','MEDIUM ANODIZED STEEL',23,12
-'Brand#42','MEDIUM ANODIZED TIN',49,12
-'Brand#42','MEDIUM BRUSHED NICKEL',9,12
-'Brand#42','MEDIUM BRUSHED STEEL',19,12
-'Brand#42','MEDIUM BRUSHED TIN',14,12
-'Brand#42','MEDIUM BURNISHED BRASS',36,12
-'Brand#42','MEDIUM BURNISHED NICKEL',36,12
-'Brand#42','MEDIUM BURNISHED STEEL',49,12
-'Brand#42','MEDIUM PLATED BRASS',36,12
-'Brand#42','MEDIUM PLATED COPPER',36,12
-'Brand#42','MEDIUM PLATED COPPER',45,12
-'Brand#42','MEDIUM PLATED STEEL',3,12
-'Brand#42','MEDIUM PLATED TIN',45,12
-'Brand#42','PROMO ANODIZED TIN',23,12
-'Brand#42','PROMO BRUSHED BRASS',19,12
-'Brand#42','PROMO BRUSHED NICKEL',3,12
-'Brand#42','PROMO BRUSHED TIN',45,12
-'Brand#42','PROMO BURNISHED BRASS',19,12
-'Brand#42','PROMO BURNISHED NICKEL',3,12
-'Brand#42','PROMO BURNISHED TIN',9,12
-'Brand#42','PROMO PLATED BRASS',14,12
-'Brand#42','PROMO PLATED BRASS',23,12
-'Brand#42','PROMO PLATED STEEL',19,12
-'Brand#42','PROMO POLISHED STEEL',45,12
-'Brand#42','SMALL ANODIZED BRASS',36,12
-'Brand#42','SMALL BRUSHED BRASS',36,12
-'Brand#42','SMALL BURNISHED BRASS',3,12
-'Brand#42','SMALL BURNISHED BRASS',36,12
-'Brand#42','SMALL BURNISHED STEEL',23,12
-'Brand#42','SMALL BURNISHED TIN',9,12
-'Brand#42','SMALL BURNISHED TIN',49,12
-'Brand#42','SMALL PLATED COPPER',9,12
-'Brand#42','SMALL PLATED COPPER',19,12
-'Brand#42','SMALL POLISHED BRASS',3,12
-'Brand#42','SMALL POLISHED COPPER',36,12
-'Brand#42','SMALL POLISHED NICKEL',23,12
-'Brand#42','STANDARD ANODIZED BRASS',23,12
-'Brand#42','STANDARD ANODIZED COPPER',45,12
-'Brand#42','STANDARD ANODIZED STEEL',23,12
-'Brand#42','STANDARD ANODIZED TIN',23,12
-'Brand#42','STANDARD BRUSHED TIN',3,12
-'Brand#42','STANDARD BURNISHED COPPER',36,12
-'Brand#42','STANDARD BURNISHED TIN',23,12
-'Brand#42','STANDARD PLATED COPPER',9,12
-'Brand#42','STANDARD PLATED TIN',3,12
-'Brand#42','STANDARD POLISHED NICKEL',9,12
-'Brand#42','STANDARD POLISHED STEEL',14,12
-'Brand#43','ECONOMY ANODIZED BRASS',14,12
-'Brand#43','ECONOMY ANODIZED COPPER',9,12
-'Brand#43','ECONOMY ANODIZED COPPER',19,12
-'Brand#43','ECONOMY ANODIZED COPPER',45,12
-'Brand#43','ECONOMY BRUSHED STEEL',9,12
-'Brand#43','ECONOMY BRUSHED STEEL',14,12
-'Brand#43','ECONOMY BRUSHED STEEL',36,12
-'Brand#43','ECONOMY BRUSHED STEEL',45,12
-'Brand#43','ECONOMY BRUSHED TIN',49,12
-'Brand#43','ECONOMY BURNISHED BRASS',3,12
-'Brand#43','ECONOMY BURNISHED BRASS',49,12
-'Brand#43','ECONOMY BURNISHED NICKEL',3,12
-'Brand#43','ECONOMY BURNISHED NICKEL',36,12
-'Brand#43','ECONOMY BURNISHED STEEL',9,12
-'Brand#43','ECONOMY BURNISHED TIN',19,12
-'Brand#43','ECONOMY PLATED COPPER',3,12
-'Brand#43','ECONOMY PLATED STEEL',3,12
-'Brand#43','ECONOMY POLISHED BRASS',45,12
-'Brand#43','ECONOMY POLISHED NICKEL',45,12
-'Brand#43','ECONOMY POLISHED TIN',49,12
-'Brand#43','LARGE ANODIZED TIN',14,12
-'Brand#43','LARGE BRUSHED NICKEL',23,12
-'Brand#43','LARGE BRUSHED STEEL',45,12
-'Brand#43','LARGE BURNISHED COPPER',14,12
-'Brand#43','LARGE BURNISHED NICKEL',3,12
-'Brand#43','LARGE BURNISHED STEEL',3,12
-'Brand#43','LARGE BURNISHED TIN',45,12
-'Brand#43','LARGE PLATED TIN',9,12
-'Brand#43','LARGE POLISHED BRASS',9,12
-'Brand#43','LARGE POLISHED COPPER',23,12
-'Brand#43','LARGE POLISHED NICKEL',9,12
-'Brand#43','LARGE POLISHED TIN',45,12
-'Brand#43','MEDIUM ANODIZED BRASS',14,12
-'Brand#43','MEDIUM ANODIZED BRASS',19,12
-'Brand#43','MEDIUM ANODIZED BRASS',36,12
-'Brand#43','MEDIUM ANODIZED COPPER',45,12
-'Brand#43','MEDIUM ANODIZED NICKEL',36,12
-'Brand#43','MEDIUM BRUSHED BRASS',45,12
-'Brand#43','MEDIUM BURNISHED BRASS',36,12
-'Brand#43','MEDIUM BURNISHED BRASS',45,12
-'Brand#43','MEDIUM BURNISHED BRASS',49,12
-'Brand#43','MEDIUM BURNISHED COPPER',3,12
-'Brand#43','MEDIUM BURNISHED COPPER',14,12
-'Brand#43','MEDIUM PLATED BRASS',3,12
-'Brand#43','MEDIUM PLATED BRASS',49,12
-'Brand#43','MEDIUM PLATED COPPER',19,12
-'Brand#43','PROMO ANODIZED NICKEL',19,12
-'Brand#43','PROMO ANODIZED STEEL',9,12
-'Brand#43','PROMO ANODIZED TIN',9,12
-'Brand#43','PROMO BRUSHED NICKEL',23,12
-'Brand#43','PROMO BRUSHED TIN',49,12
-'Brand#43','PROMO BURNISHED STEEL',36,12
-'Brand#43','PROMO BURNISHED STEEL',45,12
-'Brand#43','PROMO BURNISHED TIN',14,12
-'Brand#43','PROMO PLATED NICKEL',9,12
-'Brand#43','PROMO PLATED NICKEL',14,12
-'Brand#43','PROMO PLATED STEEL',9,12
-'Brand#43','PROMO POLISHED COPPER',23,12
-'Brand#43','PROMO POLISHED NICKEL',3,12
-'Brand#43','PROMO POLISHED STEEL',3,12
-'Brand#43','PROMO POLISHED STEEL',36,12
-'Brand#43','SMALL ANODIZED NICKEL',3,12
-'Brand#43','SMALL ANODIZED NICKEL',23,12
-'Brand#43','SMALL BRUSHED BRASS',49,12
-'Brand#43','SMALL BRUSHED COPPER',36,12
-'Brand#43','SMALL BRUSHED NICKEL',36,12
-'Brand#43','SMALL BRUSHED STEEL',9,12
-'Brand#43','SMALL BURNISHED COPPER',49,12
-'Brand#43','SMALL BURNISHED NICKEL',45,12
-'Brand#43','SMALL PLATED BRASS',36,12
-'Brand#43','SMALL PLATED COPPER',9,12
-'Brand#43','SMALL PLATED COPPER',49,12
-'Brand#43','SMALL POLISHED NICKEL',14,12
-'Brand#43','SMALL POLISHED TIN',49,12
-'Brand#43','STANDARD ANODIZED BRASS',36,12
-'Brand#43','STANDARD ANODIZED NICKEL',14,12
-'Brand#43','STANDARD ANODIZED TIN',9,12
-'Brand#43','STANDARD ANODIZED TIN',49,12
-'Brand#43','STANDARD BRUSHED BRASS',3,12
-'Brand#43','STANDARD BRUSHED COPPER',19,12
-'Brand#43','STANDARD BURNISHED STEEL',23,12
-'Brand#43','STANDARD BURNISHED TIN',14,12
-'Brand#43','STANDARD PLATED BRASS',19,12
-'Brand#43','STANDARD PLATED NICKEL',14,12
-'Brand#43','STANDARD PLATED NICKEL',23,12
-'Brand#43','STANDARD PLATED NICKEL',36,12
-'Brand#43','STANDARD POLISHED COPPER',3,12
-'Brand#43','STANDARD POLISHED STEEL',36,12
-'Brand#43','STANDARD POLISHED TIN',9,12
-'Brand#44','ECONOMY ANODIZED COPPER',9,12
-'Brand#44','ECONOMY ANODIZED NICKEL',36,12
-'Brand#44','ECONOMY ANODIZED STEEL',14,12
-'Brand#44','ECONOMY BRUSHED COPPER',19,12
-'Brand#44','ECONOMY BURNISHED STEEL',45,12
-'Brand#44','ECONOMY POLISHED TIN',36,12
-'Brand#44','ECONOMY POLISHED TIN',49,12
-'Brand#44','LARGE ANODIZED TIN',3,12
-'Brand#44','LARGE BRUSHED COPPER',36,12
-'Brand#44','LARGE BRUSHED STEEL',36,12
-'Brand#44','LARGE BRUSHED TIN',3,12
-'Brand#44','LARGE BRUSHED TIN',19,12
-'Brand#44','LARGE BURNISHED BRASS',19,12
-'Brand#44','LARGE BURNISHED BRASS',49,12
-'Brand#44','LARGE BURNISHED NICKEL',9,12
-'Brand#44','LARGE PLATED BRASS',9,12
-'Brand#44','LARGE PLATED NICKEL',3,12
-'Brand#44','LARGE PLATED NICKEL',14,12
-'Brand#44','LARGE PLATED NICKEL',36,12
-'Brand#44','MEDIUM ANODIZED BRASS',23,12
-'Brand#44','MEDIUM ANODIZED COPPER',45,12
-'Brand#44','MEDIUM ANODIZED TIN',9,12
-'Brand#44','MEDIUM BRUSHED BRASS',49,12
-'Brand#44','MEDIUM BRUSHED COPPER',3,12
-'Brand#44','MEDIUM BRUSHED COPPER',9,12
-'Brand#44','MEDIUM BRUSHED COPPER',36,12
-'Brand#44','MEDIUM BURNISHED COPPER',36,12
-'Brand#44','MEDIUM BURNISHED NICKEL',36,12
-'Brand#44','MEDIUM PLATED STEEL',19,12
-'Brand#44','MEDIUM PLATED TIN',23,12
-'Brand#44','MEDIUM PLATED TIN',36,12
-'Brand#44','PROMO ANODIZED BRASS',9,12
-'Brand#44','PROMO ANODIZED COPPER',19,12
-'Brand#44','PROMO ANODIZED NICKEL',19,12
-'Brand#44','PROMO ANODIZED STEEL',36,12
-'Brand#44','PROMO BRUSHED NICKEL',3,12
-'Brand#44','PROMO BURNISHED BRASS',19,12
-'Brand#44','PROMO BURNISHED NICKEL',49,12
-'Brand#44','PROMO PLATED BRASS',19,12
-'Brand#44','PROMO PLATED STEEL',14,12
-'Brand#44','PROMO PLATED STEEL',36,12
-'Brand#44','PROMO POLISHED COPPER',14,12
-'Brand#44','PROMO POLISHED COPPER',23,12
-'Brand#44','PROMO POLISHED COPPER',45,12
-'Brand#44','PROMO POLISHED STEEL',36,12
-'Brand#44','SMALL ANODIZED STEEL',36,12
-'Brand#44','SMALL BRUSHED COPPER',19,12
-'Brand#44','SMALL BRUSHED COPPER',45,12
-'Brand#44','SMALL BRUSHED NICKEL',3,12
-'Brand#44','SMALL BRUSHED NICKEL',9,12
-'Brand#44','SMALL BURNISHED COPPER',14,12
-'Brand#44','SMALL BURNISHED NICKEL',3,12
-'Brand#44','SMALL BURNISHED TIN',3,12
-'Brand#44','SMALL BURNISHED TIN',36,12
-'Brand#44','SMALL PLATED BRASS',23,12
-'Brand#44','SMALL PLATED BRASS',49,12
-'Brand#44','SMALL PLATED STEEL',3,12
-'Brand#44','SMALL PLATED STEEL',45,12
-'Brand#44','SMALL POLISHED BRASS',3,12
-'Brand#44','SMALL POLISHED COPPER',14,12
-'Brand#44','STANDARD ANODIZED BRASS',3,12
-'Brand#44','STANDARD ANODIZED BRASS',14,12
-'Brand#44','STANDARD ANODIZED COPPER',45,12
-'Brand#44','STANDARD ANODIZED NICKEL',9,12
-'Brand#44','STANDARD ANODIZED NICKEL',36,12
-'Brand#44','STANDARD ANODIZED TIN',9,12
-'Brand#44','STANDARD BRUSHED BRASS',9,12
-'Brand#44','STANDARD BRUSHED COPPER',23,12
-'Brand#44','STANDARD BRUSHED TIN',49,12
-'Brand#44','STANDARD BURNISHED COPPER',3,12
-'Brand#44','STANDARD BURNISHED COPPER',49,12
-'Brand#44','STANDARD BURNISHED STEEL',23,12
-'Brand#44','STANDARD BURNISHED TIN',36,12
-'Brand#44','STANDARD PLATED COPPER',14,12
-'Brand#44','STANDARD PLATED COPPER',45,12
-'Brand#44','STANDARD PLATED TIN',9,12
-'Brand#44','STANDARD PLATED TIN',23,12
-'Brand#44','STANDARD POLISHED BRASS',14,12
-'Brand#44','STANDARD POLISHED NICKEL',19,12
-'Brand#51','ECONOMY ANODIZED BRASS',9,12
-'Brand#51','ECONOMY ANODIZED BRASS',36,12
-'Brand#51','ECONOMY ANODIZED BRASS',45,12
-'Brand#51','ECONOMY ANODIZED COPPER',19,12
-'Brand#51','ECONOMY ANODIZED NICKEL',14,12
-'Brand#51','ECONOMY ANODIZED TIN',9,12
-'Brand#51','ECONOMY BRUSHED STEEL',36,12
-'Brand#51','ECONOMY BRUSHED STEEL',45,12
-'Brand#51','ECONOMY BRUSHED TIN',36,12
-'Brand#51','ECONOMY BURNISHED COPPER',45,12
-'Brand#51','ECONOMY PLATED STEEL',19,12
-'Brand#51','ECONOMY PLATED STEEL',23,12
-'Brand#51','ECONOMY PLATED TIN',45,12
-'Brand#51','LARGE ANODIZED COPPER',19,12
-'Brand#51','LARGE BRUSHED COPPER',36,12
-'Brand#51','LARGE BRUSHED NICKEL',49,12
-'Brand#51','LARGE BURNISHED STEEL',3,12
-'Brand#51','LARGE PLATED COPPER',9,12
-'Brand#51','LARGE PLATED NICKEL',45,12
-'Brand#51','LARGE PLATED TIN',19,12
-'Brand#51','LARGE PLATED TIN',23,12
-'Brand#51','LARGE POLISHED COPPER',3,12
-'Brand#51','LARGE POLISHED COPPER',23,12
-'Brand#51','MEDIUM ANODIZED NICKEL',3,12
-'Brand#51','MEDIUM ANODIZED NICKEL',19,12
-'Brand#51','MEDIUM ANODIZED NICKEL',23,12
-'Brand#51','MEDIUM ANODIZED STEEL',14,12
-'Brand#51','MEDIUM ANODIZED TIN',14,12
-'Brand#51','MEDIUM BRUSHED COPPER',49,12
-'Brand#51','MEDIUM BRUSHED TIN',49,12
-'Brand#51','MEDIUM BURNISHED BRASS',36,12
-'Brand#51','MEDIUM BURNISHED NICKEL',14,12
-'Brand#51','MEDIUM BURNISHED NICKEL',49,12
-'Brand#51','MEDIUM PLATED NICKEL',45,12
-'Brand#51','PROMO ANODIZED BRASS',3,12
-'Brand#51','PROMO ANODIZED COPPER',23,12
-'Brand#51','PROMO ANODIZED NICKEL',9,12
-'Brand#51','PROMO ANODIZED NICKEL',14,12
-'Brand#51','PROMO ANODIZED TIN',23,12
-'Brand#51','PROMO ANODIZED TIN',49,12
-'Brand#51','PROMO BRUSHED BRASS',23,12
-'Brand#51','PROMO BRUSHED COPPER',19,12
-'Brand#51','PROMO BRUSHED STEEL',36,12
-'Brand#51','PROMO BRUSHED TIN',3,12
-'Brand#51','PROMO BURNISHED COPPER',3,12
-'Brand#51','PROMO BURNISHED COPPER',19,12
-'Brand#51','PROMO PLATED COPPER',9,12
-'Brand#51','PROMO PLATED STEEL',45,12
-'Brand#51','PROMO PLATED TIN',14,12
-'Brand#51','SMALL ANODIZED NICKEL',9,12
-'Brand#51','SMALL BRUSHED BRASS',19,12
-'Brand#51','SMALL BRUSHED NICKEL',3,12
-'Brand#51','SMALL BRUSHED TIN',19,12
-'Brand#51','S

<TRUNCATED>


[07/12] incubator-impala git commit: Updates several .gitignore files.

Posted by kw...@apache.org.
Updates several .gitignore files.

Ran into these when compiling (generated files from kudu),
eclipse setup, and testing.

Change-Id: Ife446e40756864f2a19ae4393ac503d17d91996b
Reviewed-on: http://gerrit.cloudera.org:8080/7902
Reviewed-by: Michael Brown <mi...@cloudera.com>
Reviewed-by: Michael Ho <kw...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/8aaf9ec1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/8aaf9ec1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/8aaf9ec1

Branch: refs/heads/master
Commit: 8aaf9ec1fb5a0eab4b3a62eff35101cd07890938
Parents: 95f5fb7
Author: Vuk Ercegovac <ve...@cloudera.com>
Authored: Wed Aug 30 12:16:51 2017 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Thu Aug 31 01:40:47 2017 +0000

----------------------------------------------------------------------
 .gitignore          | 5 ++---
 be/.gitignore       | 5 +++++
 fe/.gitignore       | 1 +
 testdata/.gitignore | 2 +-
 tests/.gitignore    | 5 +++++
 5 files changed, 14 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/8aaf9ec1/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 51a619a..e757b27 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,9 +38,8 @@ Testing/
 llvm-ir/
 shell/gen-py/
 shell/build/
-tests/build
-tests/results
-tests/test-hive-udfs/target/
+benchmark_results*.json
+target
 
 avro_schemas/
 logs/

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/8aaf9ec1/be/.gitignore
----------------------------------------------------------------------
diff --git a/be/.gitignore b/be/.gitignore
index 026df8c..61a2279 100644
--- a/be/.gitignore
+++ b/be/.gitignore
@@ -6,6 +6,11 @@ build
 generated-sources/**/*
 src/common/version.cc
 src/kudu/util/protoc-gen-insertions
+src/kudu/rpc/protoc-gen-krpc
+*.proxy.h
+*.proxy.cc
+*.service.h
+*.service.cc
 *.pb.h
 *.pb.cc
 

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/8aaf9ec1/fe/.gitignore
----------------------------------------------------------------------
diff --git a/fe/.gitignore b/fe/.gitignore
index 97aba73..6a1675d 100644
--- a/fe/.gitignore
+++ b/fe/.gitignore
@@ -4,6 +4,7 @@ target
 .classpath
 .settings
 .project
+*.launch
 
 # IntelliJ artifacts
 .idea

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/8aaf9ec1/testdata/.gitignore
----------------------------------------------------------------------
diff --git a/testdata/.gitignore b/testdata/.gitignore
index ff11b82..e05079c 100644
--- a/testdata/.gitignore
+++ b/testdata/.gitignore
@@ -19,7 +19,7 @@ target
 HBaseAllTypesError
 HBaseAllTypesErrorNoNulls
 
-# Impala test data (not in repo, manually copied)
+# Impala test data (not in repo, manually copied or linked)
 impala-data
 data/test-warehouse
 

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/8aaf9ec1/tests/.gitignore
----------------------------------------------------------------------
diff --git a/tests/.gitignore b/tests/.gitignore
index f9053a1..3e37ef8 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -1,3 +1,8 @@
 results
 build
 aux_*
+.cache
+results
+test-hive-udfs/target/
+resource_management
+


[10/12] incubator-impala git commit: KUDU-2091: Certificates with intermediate CA's do not work with Kudu

Posted by kw...@apache.org.
KUDU-2091: Certificates with intermediate CA's do not work with Kudu

Kudu previously did not recognize chain certificates. This patch
enables support for chain certificates by changing the Cert class'
underlying data type to STACK_OF(X509) instead of just X509.

STACK_OF(X509) allows multiple certificates to be held by the same
pointer. When we are presented with a file or a string that contains
multiple X509 certificates, they will be stored inside this
STACK_OF(X509) object.

When we call AddTrustedCertificate(Cert&), we iterate through the
STACK_OF(X509) contained in the Cert and add each one individually to
the X509_STORE for later verification.

Currently, IPKI does not make use of this ability and still works
with single certificates. DCHECKS are added to make sure that multiple
X509 certificates are not accidentally added to a Cert object.
Although this patch provides a general framework to use chain
certificates, if we want to use IPKI with chain certificates,
additional functionality will need to be added with clearer APIs.

External PKI makes use of this ability to add a chain CA if necessary.

Testing: A new test is added to rpc-test that uses a chain CA. This
test does not work without this patch.

Change-Id: I7334a5b2f1643848152562bbb1dee27b5290e83f
Reviewed-on: http://gerrit.cloudera.org:8080/7662
Reviewed-by: Todd Lipcon <to...@apache.org>
Tested-by: Todd Lipcon <to...@apache.org>
Reviewed-on: http://gerrit.cloudera.org:8080/7746
Reviewed-by: Sailesh Mukil <sa...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/3a41c21e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/3a41c21e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/3a41c21e

Branch: refs/heads/master
Commit: 3a41c21e1780798636e4290d126d4daf10fe96e9
Parents: 7b6ad28
Author: Sailesh Mukil <sa...@apache.org>
Authored: Wed Aug 2 22:39:27 2017 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Thu Aug 31 02:15:42 2017 +0000

----------------------------------------------------------------------
 be/src/kudu/rpc/rpc-test.cc                |  32 +++-
 be/src/kudu/security/ca/cert_management.cc |   4 +-
 be/src/kudu/security/cert.cc               |  70 ++++++--
 be/src/kudu/security/cert.h                |  36 +++--
 be/src/kudu/security/openssl_util.cc       |  65 ++++++++
 be/src/kudu/security/openssl_util.h        |  16 ++
 be/src/kudu/security/test/test_certs.cc    | 207 ++++++++++++++++++++++++
 be/src/kudu/security/test/test_certs.h     |  13 +-
 be/src/kudu/security/tls_context.cc        |  37 +++--
 be/src/kudu/security/tls_handshake.cc      |   6 +-
 10 files changed, 431 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/3a41c21e/be/src/kudu/rpc/rpc-test.cc
----------------------------------------------------------------------
diff --git a/be/src/kudu/rpc/rpc-test.cc b/be/src/kudu/rpc/rpc-test.cc
index 38ad357..3989558 100644
--- a/be/src/kudu/rpc/rpc-test.cc
+++ b/be/src/kudu/rpc/rpc-test.cc
@@ -154,6 +154,30 @@ TEST_P(TestRpc, TestCall) {
   }
 }
 
+TEST_P(TestRpc, TestCallWithChainCert) {
+  bool enable_ssl = GetParam();
+  // We're only interested in running this test with TLS enabled.
+  if (!enable_ssl) return;
+
+  ASSERT_OK(security::CreateTestSSLCertSignedByChain(GetTestDataDirectory(),
+                                                     &FLAGS_rpc_certificate_file,
+                                                     &FLAGS_rpc_private_key_file,
+                                                     &FLAGS_rpc_ca_certificate_file));
+  // Set up server.
+  Sockaddr server_addr;
+  StartTestServer(&server_addr, enable_ssl);
+
+  // Set up client.
+  SCOPED_TRACE(strings::Substitute("Connecting to $0", server_addr.ToString()));
+  shared_ptr<Messenger> client_messenger(CreateMessenger("Client", 1, enable_ssl));
+  Proxy p(client_messenger, server_addr, GenericCalculatorService::static_service_name());
+  ASSERT_STR_CONTAINS(p.ToString(), strings::Substitute("kudu.rpc.GenericCalculatorService@"
+                                                            "{remote=$0, user_credentials=",
+                                                        server_addr.ToString()));
+
+  ASSERT_OK(DoTestSyncCall(p, GenericCalculatorService::kAddMethodName));
+}
+
 // Test making successful RPC calls while using a TLS certificate with a password protected
 // private key.
 TEST_P(TestRpc, TestCallWithPasswordProtectedKey) {
@@ -162,7 +186,7 @@ TEST_P(TestRpc, TestCallWithPasswordProtectedKey) {
   if (!enable_ssl) return;
 
   string passwd;
-  CHECK_OK(security::CreateTestSSLCertWithEncryptedKey(GetTestDataDirectory(),
+  ASSERT_OK(security::CreateTestSSLCertWithEncryptedKey(GetTestDataDirectory(),
                                                        &FLAGS_rpc_certificate_file,
                                                        &FLAGS_rpc_private_key_file,
                                                        &passwd));
@@ -173,16 +197,14 @@ TEST_P(TestRpc, TestCallWithPasswordProtectedKey) {
   StartTestServer(&server_addr, enable_ssl);
 
   // Set up client.
-  LOG(INFO) << "Connecting to " << server_addr.ToString();
+  SCOPED_TRACE(strings::Substitute("Connecting to $0", server_addr.ToString()));
   shared_ptr<Messenger> client_messenger(CreateMessenger("Client", 1, enable_ssl));
   Proxy p(client_messenger, server_addr, GenericCalculatorService::static_service_name());
   ASSERT_STR_CONTAINS(p.ToString(), strings::Substitute("kudu.rpc.GenericCalculatorService@"
                                                             "{remote=$0, user_credentials=",
                                                         server_addr.ToString()));
 
-  for (int i = 0; i < 10; i++) {
-    ASSERT_OK(DoTestSyncCall(p, GenericCalculatorService::kAddMethodName));
-  }
+  ASSERT_OK(DoTestSyncCall(p, GenericCalculatorService::kAddMethodName));
 }
 
 // Test that using a TLS certificate with a password protected private key and providing

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/3a41c21e/be/src/kudu/security/ca/cert_management.cc
----------------------------------------------------------------------
diff --git a/be/src/kudu/security/ca/cert_management.cc b/be/src/kudu/security/ca/cert_management.cc
index c63eb10..09e59cd 100644
--- a/be/src/kudu/security/ca/cert_management.cc
+++ b/be/src/kudu/security/ca/cert_management.cc
@@ -306,7 +306,7 @@ Status CertSigner::Sign(const CertSignRequest& req, Cert* ret) const {
   auto x509 = ssl_make_unique(X509_new());
   RETURN_NOT_OK(FillCertTemplateFromRequest(req.GetRawData(), x509.get()));
   RETURN_NOT_OK(DoSign(EVP_sha256(), exp_interval_sec_, x509.get()));
-  ret->AdoptRawData(x509.release());
+  ret->AdoptX509(x509.release());
 
   return Status::OK();
 }
@@ -397,7 +397,7 @@ Status CertSigner::DoSign(const EVP_MD* digest, int32_t exp_seconds,
 
   // If we have a CA cert, then the CA is the issuer.
   // Otherwise, we are self-signing so the target cert is also the issuer.
-  X509* issuer_cert = ca_cert_ ? ca_cert_->GetRawData() : ret;
+  X509* issuer_cert = ca_cert_ ? ca_cert_->GetEndOfChainX509() : ret;
   X509_NAME* issuer_name = X509_get_subject_name(issuer_cert);
   OPENSSL_RET_NOT_OK(X509_set_issuer_name(ret, issuer_name),
       "error setting issuer name");

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/3a41c21e/be/src/kudu/security/cert.cc
----------------------------------------------------------------------
diff --git a/be/src/kudu/security/cert.cc b/be/src/kudu/security/cert.cc
index dabf2d3..262bc91 100644
--- a/be/src/kudu/security/cert.cc
+++ b/be/src/kudu/security/cert.cc
@@ -67,8 +67,17 @@ int GetKuduKerberosPrincipalOidNid() {
   return nid;
 }
 
+X509* Cert::GetEndOfChainX509() const {
+  CHECK_GT(chain_len(), 0);
+  return sk_X509_value(data_.get(), chain_len() - 1);
+}
+
 Status Cert::FromString(const std::string& data, DataFormat format) {
-  return ::kudu::security::FromString(data, format, &data_);
+  RETURN_NOT_OK(::kudu::security::FromString(data, format, &data_));
+  if (sk_X509_num(data_.get()) < 1) {
+    return Status::RuntimeError("Certificate chain is empty. Expected at least one certificate.");
+  }
+  return Status::OK();
 }
 
 Status Cert::ToString(std::string* data, DataFormat format) const {
@@ -76,20 +85,24 @@ Status Cert::ToString(std::string* data, DataFormat format) const {
 }
 
 Status Cert::FromFile(const std::string& fpath, DataFormat format) {
-  return ::kudu::security::FromFile(fpath, format, &data_);
+  RETURN_NOT_OK(::kudu::security::FromFile(fpath, format, &data_));
+  if (sk_X509_num(data_.get()) < 1) {
+    return Status::RuntimeError("Certificate chain is empty. Expected at least one certificate.");
+  }
+  return Status::OK();
 }
 
 string Cert::SubjectName() const {
-  return X509NameToString(X509_get_subject_name(data_.get()));
+  return X509NameToString(X509_get_subject_name(GetEndOfChainX509()));
 }
 
 string Cert::IssuerName() const {
-  return X509NameToString(X509_get_issuer_name(data_.get()));
+  return X509NameToString(X509_get_issuer_name(GetEndOfChainX509()));
 }
 
 boost::optional<string> Cert::UserId() const {
   SCOPED_OPENSSL_NO_PENDING_ERRORS;
-  X509_NAME* name = X509_get_subject_name(data_.get());
+  X509_NAME* name = X509_get_subject_name(GetEndOfChainX509());
   char buf[1024];
   int len = X509_NAME_get_text_by_NID(name, NID_userId, buf, arraysize(buf));
   if (len < 0) return boost::none;
@@ -100,7 +113,7 @@ vector<string> Cert::Hostnames() const {
   SCOPED_OPENSSL_NO_PENDING_ERRORS;
   vector<string> result;
   auto gens = ssl_make_unique(reinterpret_cast<GENERAL_NAMES*>(X509_get_ext_d2i(
-      data_.get(), NID_subject_alt_name, nullptr, nullptr)));
+      GetEndOfChainX509(), NID_subject_alt_name, nullptr, nullptr)));
   if (gens) {
     for (int i = 0; i < sk_GENERAL_NAME_num(gens.get()); ++i) {
       GENERAL_NAME* gen = sk_GENERAL_NAME_value(gens.get(), i);
@@ -120,9 +133,9 @@ vector<string> Cert::Hostnames() const {
 
 boost::optional<string> Cert::KuduKerberosPrincipal() const {
   SCOPED_OPENSSL_NO_PENDING_ERRORS;
-  int idx = X509_get_ext_by_NID(data_.get(), GetKuduKerberosPrincipalOidNid(), -1);
+  int idx = X509_get_ext_by_NID(GetEndOfChainX509(), GetKuduKerberosPrincipalOidNid(), -1);
   if (idx < 0) return boost::none;
-  X509_EXTENSION* ext = X509_get_ext(data_.get(), idx);
+  X509_EXTENSION* ext = X509_get_ext(GetEndOfChainX509(), idx);
   ASN1_OCTET_STRING* octet_str = X509_EXTENSION_get_data(ext);
   const unsigned char* octet_str_data = octet_str->data;
   long len; // NOLINT(runtime/int)
@@ -138,7 +151,7 @@ boost::optional<string> Cert::KuduKerberosPrincipal() const {
 
 Status Cert::CheckKeyMatch(const PrivateKey& key) const {
   SCOPED_OPENSSL_NO_PENDING_ERRORS;
-  OPENSSL_RET_NOT_OK(X509_check_private_key(data_.get(), key.GetRawData()),
+  OPENSSL_RET_NOT_OK(X509_check_private_key(GetEndOfChainX509(), key.GetRawData()),
                      "certificate does not match private key");
   return Status::OK();
 }
@@ -149,12 +162,12 @@ Status Cert::GetServerEndPointChannelBindings(string* channel_bindings) const {
   // (hash) algorithm, and the public key type which signed the cert.
 
 #if OPENSSL_VERSION_NUMBER >= 0x10002000L
-  int signature_nid = X509_get_signature_nid(data_.get());
+  int signature_nid = X509_get_signature_nid(GetEndOfChainX509());
 #else
   // Older version of OpenSSL appear not to have a public way to get the
   // signature digest method from a certificate. Instead, we reach into the
   // 'private' internals.
-  int signature_nid = OBJ_obj2nid(data_->sig_alg->algorithm);
+  int signature_nid = OBJ_obj2nid(GetEndOfChainX509()->sig_alg->algorithm);
 #endif
 
   // Retrieve the digest algorithm type.
@@ -201,18 +214,43 @@ Status Cert::GetServerEndPointChannelBindings(string* channel_bindings) const {
   return Status::OK();
 }
 
-void Cert::AdoptAndAddRefRawData(X509* data) {
+void Cert::AdoptAndAddRefRawData(RawDataType* data) {
+  DCHECK_EQ(sk_X509_num(data), 1);
+  X509* cert = sk_X509_value(data, sk_X509_num(data) - 1);
+
+  DCHECK(cert);
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+  CHECK_GT(CRYPTO_add(&cert->references, 1, CRYPTO_LOCK_X509), 1) << "X509 use-after-free detected";
+#else
+  OPENSSL_CHECK_OK(X509_up_ref(cert)) << "X509 use-after-free detected: " << GetOpenSSLErrors();
+#endif
+  // We copy the STACK_OF() object, but the copy and the original both internally point to the
+  // same elements.
+  AdoptRawData(sk_X509_dup(data));
+}
+
+void Cert::AdoptX509(X509* cert) {
+  // Free current STACK_OF(X509).
+  sk_X509_pop_free(data_.get(), X509_free);
+  // Allocate new STACK_OF(X509) and populate with 'cert'.
+  STACK_OF(X509)* sk = sk_X509_new_null();
+  DCHECK(sk);
+  sk_X509_push(sk, cert);
+  AdoptRawData(sk);
+}
+
+void Cert::AdoptAndAddRefX509(X509* cert) {
 #if OPENSSL_VERSION_NUMBER < 0x10100000L
-  CHECK_GT(CRYPTO_add(&data->references, 1, CRYPTO_LOCK_X509), 1) << "X509 use-after-free detected";
+  CHECK_GT(CRYPTO_add(&cert->references, 1, CRYPTO_LOCK_X509), 1) << "X509 use-after-free detected";
 #else
-  OPENSSL_CHECK_OK(X509_up_ref(data)) << "X509 use-after-free detected: " << GetOpenSSLErrors();
+  OPENSSL_CHECK_OK(X509_up_ref(cert)) << "X509 use-after-free detected: " << GetOpenSSLErrors();
 #endif
-  AdoptRawData(data);
+  AdoptX509(cert);
 }
 
 Status Cert::GetPublicKey(PublicKey* key) const {
   SCOPED_OPENSSL_NO_PENDING_ERRORS;
-  EVP_PKEY* raw_key = X509_get_pubkey(data_.get());
+  EVP_PKEY* raw_key = X509_get_pubkey(GetEndOfChainX509());
   OPENSSL_RET_IF_NULL(raw_key, "unable to get certificate public key");
   key->AdoptRawData(raw_key);
   return Status::OK();

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/3a41c21e/be/src/kudu/security/cert.h
----------------------------------------------------------------------
diff --git a/be/src/kudu/security/cert.h b/be/src/kudu/security/cert.h
index 2facb2c..4d93d1b 100644
--- a/be/src/kudu/security/cert.h
+++ b/be/src/kudu/security/cert.h
@@ -40,37 +40,53 @@ std::string X509NameToString(X509_NAME* name);
 // our Kerberos principal in IPKI certs.
 int GetKuduKerberosPrincipalOidNid();
 
-class Cert : public RawDataWrapper<X509> {
+// A wrapper class around the STACK_OF(X509) object. This can either hold one certificate or
+// a chain of certificates.
+// TODO(unknown): Currently, there isn't a mechanism to add to the chain. Implement it when needed.
+class Cert : public RawDataWrapper<STACK_OF(X509)> {
  public:
   Status FromString(const std::string& data, DataFormat format) WARN_UNUSED_RESULT;
   Status ToString(std::string* data, DataFormat format) const WARN_UNUSED_RESULT;
   Status FromFile(const std::string& fpath, DataFormat format) WARN_UNUSED_RESULT;
 
+  int chain_len() const { return sk_X509_num(data_.get()); }
+
   std::string SubjectName() const;
   std::string IssuerName() const;
 
-  // Return DNS names from the SAN extension field.
+  // Return DNS names from the SAN extension field of the end-user cert.
   std::vector<std::string> Hostnames() const;
 
-  // Return the 'userId' extension of this cert, if set.
+  // Return the 'userId' extension of the end-user cert, if set.
   boost::optional<std::string> UserId() const;
 
-  // Return the Kerberos principal encoded in this certificate, if set.
+  // Return the Kerberos principal encoded in the end-user certificate, if set.
   boost::optional<std::string> KuduKerberosPrincipal() const;
 
-  // Check whether the specified private key matches the certificate.
-  // Return Status::OK() if key match the certificate.
+  // Check whether the specified private key matches the end-user certificate.
+  // Return Status::OK() if key match the end-user certificate.
   Status CheckKeyMatch(const PrivateKey& key) const WARN_UNUSED_RESULT;
 
-  // Returns the 'tls-server-end-point' channel bindings for the certificate as
+  // Returns the 'tls-server-end-point' channel bindings for the end-user certificate as
   // specified in RFC 5929.
   Status GetServerEndPointChannelBindings(std::string* channel_bindings) const WARN_UNUSED_RESULT;
 
-  // Adopts the provided X509 certificate, and increments the reference count.
-  void AdoptAndAddRefRawData(X509* data);
+  // Adopts the provided STACK_OF(X509), and increments the reference count of the X509 cert
+  // contained within it. Currently, only one certificate should be contained in the stack.
+  void AdoptAndAddRefRawData(RawDataType* data);
+
+  // Adopts the provided X509 certificate, and replaces the current underlying STACK_OF(X509).
+  void AdoptX509(X509* cert);
 
-  // Returns the certificate's public key.
+  // Adopts the provided X509 certificate, increments its reference count and replaces the current
+  // underlying STACK_OF(X509).
+  void AdoptAndAddRefX509(X509* cert);
+
+  // Returns the end-user certificate's public key.
   Status GetPublicKey(PublicKey* key) const WARN_UNUSED_RESULT;
+
+  // Get the last certificate in the chain, otherwise known as the 'end-user' certificate.
+  X509* GetEndOfChainX509() const;
 };
 
 class CertSignRequest : public RawDataWrapper<X509_REQ> {

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/3a41c21e/be/src/kudu/security/openssl_util.cc
----------------------------------------------------------------------
diff --git a/be/src/kudu/security/openssl_util.cc b/be/src/kudu/security/openssl_util.cc
index dce93fc..1d9de7d 100644
--- a/be/src/kudu/security/openssl_util.cc
+++ b/be/src/kudu/security/openssl_util.cc
@@ -34,6 +34,7 @@
 #include "kudu/util/debug/leakcheck_disabler.h"
 #include "kudu/util/errno.h"
 #include "kudu/util/mutex.h"
+#include "kudu/util/scoped_cleanup.h"
 #include "kudu/util/status.h"
 #include "kudu/util/subprocess.h"
 #include "kudu/util/thread.h"
@@ -138,6 +139,70 @@ void DoInitializeOpenSSL() {
 
 } // anonymous namespace
 
+// Reads a STACK_OF(X509) from the BIO and returns it.
+STACK_OF(X509)* PEM_read_STACK_OF_X509(BIO* bio, void* /* unused */, pem_password_cb* /* unused */,
+    void* /* unused */) {
+  // Extract information from the chain certificate.
+  STACK_OF(X509_INFO)* info = PEM_X509_INFO_read_bio(bio, nullptr, nullptr, nullptr);
+  if (!info) return nullptr;
+  auto cleanup = MakeScopedCleanup([&]() {
+    sk_X509_INFO_pop_free(info, X509_INFO_free);
+  });
+
+  // Initialize the Stack.
+  STACK_OF(X509)* sk = sk_X509_new_null();
+
+  // Iterate through the chain certificate and add each one to the stack.
+  for (int i = 0; i < sk_X509_INFO_num(info); ++i) {
+    X509_INFO *stack_item = sk_X509_INFO_value(info, i);
+    sk_X509_push(sk, stack_item->x509);
+    // We don't want the ScopedCleanup to free the x509 certificates as well since we will
+    // use it as a part of the STACK_OF(X509) object to be returned, so we set it to nullptr.
+    // We will take the responsibility of freeing it when we are done with the STACK_OF(X509).
+    stack_item->x509 = nullptr;
+  }
+  return sk;
+}
+
+// Writes a STACK_OF(X509) to the BIO.
+int PEM_write_STACK_OF_X509(BIO* bio, STACK_OF(X509)* obj) {
+  int chain_len = sk_X509_num(obj);
+  // Iterate through the stack and add each one to the BIO.
+  for (int i = 0; i < chain_len; ++i) {
+    X509* cert_item = sk_X509_value(obj, i);
+    int ret = PEM_write_bio_X509(bio, cert_item);
+    if (ret <= 0) return ret;
+  }
+  return 1;
+}
+
+// Reads a single X509 certificate and returns a STACK_OF(X509) with the single certificate.
+STACK_OF(X509)* DER_read_STACK_OF_X509(BIO* bio, void* /* unused */) {
+  // We don't support chain certificates written in DER format.
+  auto x = ssl_make_unique(d2i_X509_bio(bio, nullptr));
+  if (!x) return nullptr;
+  STACK_OF(X509)* sk = sk_X509_new_null();
+  if (sk_X509_push(sk, x.get()) == 0) {
+    return nullptr;
+  }
+  x.release();
+  return sk;
+}
+
+// Writes a single X509 certificate that it gets from the STACK_OF(X509) 'obj'.
+int DER_write_STACK_OF_X509(BIO* bio, STACK_OF(X509)* obj) {
+  int chain_len = sk_X509_num(obj);
+  // We don't support chain certificates written in DER format.
+  DCHECK_EQ(chain_len, 1);
+  X509* cert_item = sk_X509_value(obj, 0);
+  if (cert_item == nullptr) return 0;
+  return i2d_X509_bio(bio, cert_item);
+}
+
+void free_STACK_OF_X509(STACK_OF(X509)* sk) {
+  sk_X509_pop_free(sk, X509_free);
+}
+
 Status DisableOpenSSLInitialization() {
   if (g_disable_ssl_init) return Status::OK();
   if (g_ssl_is_initialized) {

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/3a41c21e/be/src/kudu/security/openssl_util.h
----------------------------------------------------------------------
diff --git a/be/src/kudu/security/openssl_util.h b/be/src/kudu/security/openssl_util.h
index f5cd817..b53a60b 100644
--- a/be/src/kudu/security/openssl_util.h
+++ b/be/src/kudu/security/openssl_util.h
@@ -121,6 +121,22 @@ template<> struct SslTypeTraits<X509> {
   static constexpr auto kWritePemFunc = &PEM_write_bio_X509;
   static constexpr auto kWriteDerFunc = &i2d_X509_bio;
 };
+
+// SslTypeTraits functions for Type STACK_OF(X509)
+STACK_OF(X509)* PEM_read_STACK_OF_X509(BIO* bio, void* /* unused */,
+    pem_password_cb* /* unused */, void* /* unused */);
+int PEM_write_STACK_OF_X509(BIO* bio, STACK_OF(X509)* obj);
+STACK_OF(X509)* DER_read_STACK_OF_X509(BIO* bio, void* /* unused */);
+int DER_write_STACK_OF_X509(BIO* bio, STACK_OF(X509)* obj);
+void free_STACK_OF_X509(STACK_OF(X509)* sk);
+
+template<> struct SslTypeTraits<STACK_OF(X509)> {
+  static constexpr auto kFreeFunc = &free_STACK_OF_X509;
+  static constexpr auto kReadPemFunc = &PEM_read_STACK_OF_X509;
+  static constexpr auto kReadDerFunc = &DER_read_STACK_OF_X509;
+  static constexpr auto kWritePemFunc = &PEM_write_STACK_OF_X509;
+  static constexpr auto kWriteDerFunc = &DER_write_STACK_OF_X509;
+};
 template<> struct SslTypeTraits<X509_EXTENSION> {
   static constexpr auto kFreeFunc = &X509_EXTENSION_free;
 };

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/3a41c21e/be/src/kudu/security/test/test_certs.cc
----------------------------------------------------------------------
diff --git a/be/src/kudu/security/test/test_certs.cc b/be/src/kudu/security/test/test_certs.cc
index 8b10cad..d7abb3e 100644
--- a/be/src/kudu/security/test/test_certs.cc
+++ b/be/src/kudu/security/test/test_certs.cc
@@ -496,5 +496,212 @@ TOQYXv+dMtOkYg==
   return Status::OK();
 }
 
+//
+// These certificates were generated by following the steps outlined in this tutorial
+// for creating the Root CA, Intermediate CA and end-user cert:
+// https://raymii.org/s/tutorials/ \
+// OpenSSL_command_line_Root_and_Intermediate_CA_including_OCSP_CRL%20and_revocation.html
+//
+// The parts relating to the OSCP and CRL were omitted.
+Status CreateTestSSLCertSignedByChain(const string& dir,
+                                      string* cert_file,
+                                      string* key_file,
+                                      string* ca_cert_file) {
+  const char* kCert = R"(
+-----BEGIN CERTIFICATE-----
+MIIFizCCA3OgAwIBAgICEAAwDQYJKoZIhvcNAQEFBQAwUTEXMBUGA1UEAwwOSW50
+ZXJtZWRpYXRlQ0ExCzAJBgNVBAgMAkNBMQswCQYDVQQGEwJVUzENMAsGA1UECgwE
+QWNtZTENMAsGA1UECwwES3VkdTAeFw0xNzA4MTEyMTM4MDZaFw00NDEyMjYyMTM4
+MDZaMEwxEjAQBgNVBAMMCWxvY2FsaG9zdDELMAkGA1UECAwCQ0ExCzAJBgNVBAYT
+AlVTMQ0wCwYDVQQKDARBY21lMQ0wCwYDVQQLDARLdWR1MIICIjANBgkqhkiG9w0B
+AQEFAAOCAg8AMIICCgKCAgEAqevNYH73n4kARZtMsHRucdKmqVd/xxztMlK5VOor
+ERUBhKVVOw3kpDrN9z80ldIkpOrtrfE7Ame/nA9v4k6P3minPEm1qCA/kvaAodtT
+4HjAkrPc+fto6VO6+aUV6l+ckAV/79lOuc7AutNlvvPtBQQcgOKvlNUSRKwM7ndy
+dO4ZAa+uP9Wtsd0gl8b5F3P8vwevD3a0+iDvwSd3pi2s/BeVgRwvOxJzud8ipZ/A
+ZmZN8Df9nHw5lsqLdNnqHXjTVCNXLnYXQC4gKU56fzyZL595liuefyQxiGY+dCCn
+CpqlSsHboJVC/F3OaQi3xVRTB5l2Nwb149EIadwCF0OulZCuYljJ5y9H2bECXEjP
+e5aOdz9d8W3/T7p9vBKWctToeCpqKXUd+8RPudh0D0sUHuwQ4u4S1K6X+eK+gGhT
+HOnPwt+P8ytG0M463z5Gh9feW9ZDIYoiFckheFBAHxsgDWhjYpFmYireLLXMbyaM
+s5v/AxPNRAsx3vAAd0M0vGOpdgEJ9V1MsKmxkPO/tDC3zmnv6uJhtJfrOAKxwiGC
+fDe4IoSC6H5fTxeAgw6BG5onS1UPLADL8NA/M1y8qiSCZS/5S0cHoJp5AxDfZSSR
+O49ispjqcONRwckcRJ5Pbl0IA+wGyg2DuI9LaqS5kKWp5AE8VCLPz7yepDkRnnjO
+3m8CAwEAAaNyMHAwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUZBZLZZaUfyIK/8B7
+GIIWDqeEvDgwHwYDVR0jBBgwFoAU8KctfaqAq0887CHqDsIC0Rkg7oQwCwYDVR0P
+BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBBQUAA4ICAQA3
+XJXk9CbzdZUQugPI43LY88g+WjbTJfc/KtPSkHN3GjBBh8C0He7A2tp6Xj/LELmx
+crq62FzcFBnq8/iSdFITaYWRo0V/mXlpv2cpPebtwqbARCXUHGvF4/dGk/kw7uK/
+ohZJbeNySuQmQ5SQyfTdVA30Z0OSZ4jp24jC8uME7L8XOcFDgCRw01QNOISpi/5J
+BqeuFihmu/odYMHiEJdCXqe+4qIFfTh0mbgQ57l/geZm0K8uCEiOdTzSMoO8YdO2
+tm6EGNnc4yrVywjIHIvSy6YtNzd4ZM1a1CkEfPvGwe/wI1DI/zl3aJ721kcMPken
+rgEA4xXTPh6gZNMELIGZfu/mOTCFObe8rrh4QSaW4L+xa/VrLEnQRxuXAYGnmDWF
+e79aA+uXdS4+3OysNgEf4qDBt/ZquS/31DBdfJ59VfXWxp2yxMcGhcfiOdnx2Jy5
+KO8wdpXJA/7uwTJzsjLrIgfZnserOiBwE4luaHhDmKDGNVQvhkMq5tdtMdzuwn3/
+n6P1UwbFPiRGIzEAo0SSC1PRT8phv+5y0B1+gcj/peFymZVE+gRcrv9irVQqUpAY
+Lo9xrClAJ2xx4Ouz1GprKPoHdVyqtgcLXN4Oyi8Tehu96Zf6GytSEfTXsbQp+GgR
+TGRhKnDySjPhLp/uObfVwioyuAyA5mVCwjsZ/cvUUA==
+-----END CERTIFICATE-----
+)";
+  const char* kKey = R"(
+-----BEGIN RSA PRIVATE KEY-----
+MIIJKAIBAAKCAgEAqevNYH73n4kARZtMsHRucdKmqVd/xxztMlK5VOorERUBhKVV
+Ow3kpDrN9z80ldIkpOrtrfE7Ame/nA9v4k6P3minPEm1qCA/kvaAodtT4HjAkrPc
++fto6VO6+aUV6l+ckAV/79lOuc7AutNlvvPtBQQcgOKvlNUSRKwM7ndydO4ZAa+u
+P9Wtsd0gl8b5F3P8vwevD3a0+iDvwSd3pi2s/BeVgRwvOxJzud8ipZ/AZmZN8Df9
+nHw5lsqLdNnqHXjTVCNXLnYXQC4gKU56fzyZL595liuefyQxiGY+dCCnCpqlSsHb
+oJVC/F3OaQi3xVRTB5l2Nwb149EIadwCF0OulZCuYljJ5y9H2bECXEjPe5aOdz9d
+8W3/T7p9vBKWctToeCpqKXUd+8RPudh0D0sUHuwQ4u4S1K6X+eK+gGhTHOnPwt+P
+8ytG0M463z5Gh9feW9ZDIYoiFckheFBAHxsgDWhjYpFmYireLLXMbyaMs5v/AxPN
+RAsx3vAAd0M0vGOpdgEJ9V1MsKmxkPO/tDC3zmnv6uJhtJfrOAKxwiGCfDe4IoSC
+6H5fTxeAgw6BG5onS1UPLADL8NA/M1y8qiSCZS/5S0cHoJp5AxDfZSSRO49ispjq
+cONRwckcRJ5Pbl0IA+wGyg2DuI9LaqS5kKWp5AE8VCLPz7yepDkRnnjO3m8CAwEA
+AQKCAgAE3oL2Hu1Nnwlo9ThPXibEEDtCYwWAWS3a4U/6RPOS+70dZfd5R76jjiPU
+z/TbzjfKmgjRkTYVrY9qE28rVwD8aJdSPPJ9rN7lgTbSbIyMxCkQiyLr7u5ksUeM
+W9Sy8KZ14hJ2dw2weWJAeEpUHH1QRXvjnZtWcnyhhySfuMCI5UHGMJiXr7HYhPOo
+JcWBjItTlg7ILKim+kakjFL7aheo6awZFQutb6vtSZ2ejWNgC9Jz7cbQsyabUZaJ
+dK0mxw2XPaQD6tJjvm6hgGQ2PTBOkw1S5lEWZ50bwYJMpZrjzOarq751bZGL1cxS
+ajOJ7g6rCxS+Iu7s5lKNZgaRUBkymATYccoigfZDR//fHKAmdgjgPstqy1NJL+uX
+bIuNE0bR+mBM2JQzNjPIcE67PG+0aQdO4dj0TnTzkTP1JSsa6Tz4ckOUgt7IBK8j
+ilCQpHgOB900hXC6xVRnAaU/uuSYEtfi2eFBKHT02OqH51yNZ2jsgOQJCvxNrrdI
+OmA0AaZ2tVXTTXe6qebaNjjp2cziiO5ma+5mdI1vmLQAA9v0micO+eKp/pi5e0r6
+j+9uyR2Oo4qnHg04TIfDyglW3uKz1eI0RPfBN/dx3WLpydxKeywXPH6EzfBFk8pz
+ST2sy+1ZN4vn0bDSTjSLsLBW+xBKYINqKkBD2Kg6B7aeNINjEQKCAQEA4BQByyZV
+9va91T+rQiNPifuI4PKgmLTl0wxM1Jg/H4YCyLtuEkmuvwfeAjaUaUuk2MDs3xfQ
+4pu8vtAnDapq5vJ/lMg0m3+NIwoks+xee9F//M4du9j67USvX5Qw/6Cnx1zAvrWR
+TyZncKUocQowcXM9VU0xcv4qVCMaH5F5Q/1VvG7uAtGCnB8TOHzV7GUaj9xxSqDc
+f3+p9BzsecpPZsdpVi01dQbCKi9neZwFv1Vr3MvieNDOGqSGn8X5EjSHY5PzCaXL
+S+/HoFWOSzWcuNdzKJRjVkC8U+eHoEabaRnD47dfJntN3qOQ6Mwf6P2jMN9GqlQu
+DQlvpMxBwQT1/QKCAQEAwiC4hr6EZKaLmeZBLggsS+oifHReXQy6tf2n7kCAwAgL
++65K8UW+YUtQyHL6UFfD27vvW5yp6LZxMRUD3ghguHPMQcejgoQTfGmth1bCb9tx
+zqfxuWUoNauqZiP4/kgxoh815Kt+kC8BRCXNIWjH38zxY+ncv0b4oKP7lYna/7Xk
+URLmMFr92QVAydRxY9kQTHQTCd+ZQrFT97xEoosgzkKhmynSfWNx7ymYmCrHzscA
+TutpD26u4CA4Wh4ZdVPEF10lGR531SAFEqXCkaUvIfwPphPmOtum2LZdEYho9C76
+71kLzzoJOJUNo2L9ORd5I4tOrMT0tmN+MpS1cPXb2wKCAQAu3aBeZ9807vhXQKDG
+DXKWTmibe8OBDNzAnmL3V/xj0HiGmUT1SDnnNHMHjXjO6QZKW1dvdaC3tJDua8Sv
+RARl1zQ93v25xBy1xmpUw0wjo3acXlOztTcOJv5zBCCXZneQ5+JcQMdqgYLC+ZgS
+xGnLYKnkTGfaQDSEMm9FSPzO7o5fAeh/6Gfj1VAE0X9AmQjMK/P6Atj7Ra07JE2F
+T3355h0u6/exST+U6SNAORSupuQPYwkz8aAZzG1nv1VPrHLgrdH4I5f4gucCrsI7
+ErR7qHwqcZaxNIrvFY61Q+8/NSdWWkTpXIK13Qny1raZ2WqnTxuNhlu3WFDka+AY
+ybvVAoIBACOaxL1R7A5ZzXjolkPPE/DIfJK+9R+z2frPDyHPis2trCT5Dp254PUP
+Tz20eNyLfEys53WyAifAbnpGFHOArdymwGvAJekmODy1VTJhY0AIy5LPkrIiL4HI
+fnRFXMGmlBPcDZJnMctYE69gD4N1KFOPzyY4Gliqt6ce7GG86wHDZqDICpgL2EsZ
+f4yE/lcF1Mtw7pz8+asVwwTI7v2w7s9lwSYoQYbl2lu3EVm3XvY54YCYBKjj8AcD
+YdKFer3eIzT1zHwS7n+UY9nLtSfpV/+vr18Sf0OETdGpgOBaWIWQqE2F03iqeE58
+aAfze+YgvAMc5c0iQo/BJ8A3LiANt8kCggEBAK8cFEBm+Z1g5s1IaWxqTIylR5XF
+5RFty9HyUXtkAd2d1qVzBaBG3SXg4cRsW0EhcUV2XP3iTFIPXEEABRRu5U6DEal6
+wQclrhfP4hiRQHp2Ny6jDj70NCSeUmyEu2lmwEJJYsDSOCnVmtt+qlgmk4yI1Dua
+nXhLcPLqopuhEZs2V/l2Q6E5i4vrs71Y7of+vsAvvt42Vx5wsGdPQihc5E1MI7GB
+hxmQys1MwG3Jyd7Zk88MVNveASeEIc7UAmr/TGL+RIv4bxNi/1HrgekBf1jnFUU3
+4fsdqKy0W+rOgOlGN8TX7NYCz3B41UEiyf+/gZ/TcLKAyGnoAO727Ngayqo=
+-----END RSA PRIVATE KEY-----
+)";
+  const char* kCaChainCert = R"(
+-----BEGIN CERTIFICATE-----
+MIIJfzCCBWegAwIBAgIJAOquFl/JjmRLMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV
+BAYTAlVTMQswCQYDVQQIDAJDQTELMAkGA1UEBwwCU0YxDTALBgNVBAoMBEFjbWUx
+DTALBgNVBAsMBEt1ZHUxDzANBgNVBAMMBlJPT1RDQTAeFw0xNzA4MTEyMTMyMTla
+Fw00NDEyMjcyMTMyMTlaMFYxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTELMAkG
+A1UEBwwCU0YxDTALBgNVBAoMBEFjbWUxDTALBgNVBAsMBEt1ZHUxDzANBgNVBAMM
+BlJPT1RDQTCCBCIwDQYJKoZIhvcNAQEBBQADggQPADCCBAoCggQBAOHxuOsGDBJt
+quCb+lrJ3uXvvBv6f1w1aP+WqDEqveQlOi68sV/DVUR3s+en/MHA5jYAVo2D+eR7
+v/zjrAzCeqCpipbDcxA2e00+kggGHc1BoLtXXTPPCcTQt/0jjX26GXlaJRrY5MAy
+ZJ35vkJ5wCTw7DttfyRzR/RplI6DfO3t2kkSFpSsjGFJZQRZn/L2OM8Ii/tEhede
+UP/Rv8KIKM2+P9RS0VIutiI+/mOpH0QZHHEgnHy7x/CcNCd+wDG516YoJXp9c/1n
+aRLK+jA0bNCf0ZktMpuifoFzpNJ3pvDkjgTLhbiMkS8VKc66Z/Mv0EVOrdiMla/X
+0OSWqEZctxIcVIGDbMqngy62dghMBmxpVkfNmu6RqyS3HmPFrhRXJIIogdBo8mdJ
+xFCCvOgA6suaZnQtQC0mlRi5XGnTocpeHYUZ1c1hO2ZdVrFTh3atJsD80kVYxYuK
+YMq3QaK2zZUK6TUIFue1UqLf2dpIFzskLY6bEVob7Rdl8AHdFBJ8cGOyYKpG+rwO
+n3XQudt8YwDUCvw+8MGRXQiwUnzT/3gSuLNjlQOdcqN78wT5mdp6QZwareptyRwT
+yk/wWnfZlcFO33aPnUhvzzI5TzTB6EqG+3oNYkuXXy/glvOFluyQcPfsYXVOnXOj
+xF0hjKcpx10KQSvXjT9SRYr8NcOC7Yjy3f+WF+nwV+EzevqC2iTr1u8ymqUvpgFJ
+snvO8G/tycfxrwjI/4IghBgwqhcqD4wp/NleXy3A7GE3kFusL10i1bjwxBlz5qER
+uKaxU164HXPl4gv+Qt3eGqJE8KHDwTp8x+619S0+Gd8fY6Yj6/v9WyDef0SKGscm
+t3iqYNA39yNHAj++cjcCrJwBfINVvnTsVFKsCwUpjVuNOGRfZv0uHLAv6LaePQk5
+FKHwlLlPRx7ZcwHpkzTvp/ixYPb/cNJOw8fVW5CoWXYEzDUJY0oU8BWlQNHQ/e4q
+V7Yxa/vourUUvOACDzyQ6hCO95dQdDMCDQqC2VVL45+TUJ3eU1gDHge4T2js/qL8
+iJ+auZapiZjUQzLFse4XkgDrkMrD4fkOQOw4x9AhJF/SrnI8UPNjNOmAyOlqGTdd
+IyLesKXgnOGASSmc7JRk+YBpu9PQXIgHHQZIao1zPGP5k/ylp8XPYitC9MKzRRam
+67aJmutJxEtw7VJhoyz5m5LhLysPLY+R01+QqZK9/7qwWaX6PvMmm42zq9YKncOM
+cC/4eAPnwbj6yhpFoaUD5qzloci3+tvYgb+wr3f1F9SPrpe5xJz3NTXdQj8FsGjl
+ShL+bybUQ7wzZQObUhWtXSayagQg1MAxUCn7Aglmo/A/1+teacyuCEIbrhmODYM3
+Okji9gmGv+cCAwEAAaNQME4wHQYDVR0OBBYEFE/9XKaDey5kC8f3bCeUHW46abbo
+MB8GA1UdIwQYMBaAFE/9XKaDey5kC8f3bCeUHW46abboMAwGA1UdEwQFMAMBAf8w
+DQYJKoZIhvcNAQELBQADggQBAMXuMpJzYV3QMH780os0dZyJ+zi4FETVjAWFAPME
+qzN27W0L9+HZcGpz5i5FLdmc0F3u1cyCrJ4nCCWMrEIVmrLInFRaH1u9HUO78jPw
+Uw/MZLF+sf7uE8IAdVzLQG0A3QjAVoOX3IEOxEaQYYlVQHonyq2pBt8mkGqiPI3R
+E9cTnP/R1Ncd1wZkFL/n5qSNGTr/eg1O/jFB5xH96xm18Z7HgJDku2JCKQK6kqTM
+B7LjAFwWzTg8cnewVFRzIvJe83w9lHs1SW3R9fz7fIEBbZQ3z+n1cSj5jDjaT1+U
+YWTj+gAklZT4M/vImXF0XqbZytUOqe16HfBInc0G/kakUIcs6le2hmfhccJdG25I
+e5TH6ZdMumt7//hVPBPN5fhYKc2uHpzbtmxUjuKG8Na8/w+y2O+sW5CfpNtrYLyB
+WATHGtBB3ckBAICLlhoQiY/ku9r6BfczI86MbSy5vG5CD2sYGhVEl3PQXAnvBKax
+svZS3z9f16SZm61FWwz+r0XCe7LBiKe9YpODyE8lFDymZyW0vKYzDLzCy/mXhU/j
+locrf5r4YK0cOxNQC/jK7MLDFxPQbYg2SuAPW4DF2QzgKn2RuatdOB12S05afawj
+bhrbikIfEtD3erUMMJwaV9dxhHL835rfexxbRzBCdbjWg7Qiw4r8+PJB/mSSvsVO
+RAI02p8IqW5O+iXkU4V2Mapzdpo6b8O6TplHRXbRxWuen87g87KHhgZaC6TmWgvT
+It3ARZx3tkBoJwf41ELmWcakqiT9aQslc5weafw3SZp6+w0QU0qqFwCFLJWHETa5
+/PVHDEkBoXDMnqMlu7E9PUks4Op9T2f7bNy94GZXRbSp2VKjV68sds739DhVIZ+M
+MIaEutz3UndEuGGlcVuqXlda+H5xp57RnMZSKbT240kGdci51WahhfkX7dLY6c/b
+jaNWyGSfM+wFlky97t7ANbPP85SDgrrSyb6rTIt1zU2c5+vvjNVvDhlS6n7ls/Pi
+lMWWs5Ka66E8oZFwYygfIiEv6FcNWrSZ/vCMuS02WJovsZd4YrYtNbpkx6shaA5t
+BOIpuelPbQNPlOaJ+YnRuuppomPnXx5X3RlHld7xsExHDNsi57H0PBDq/W5O1S4t
+rHm3SItJQ4ndFHBGjZ7kSOyHtCLWZ8cB75sPduVC2PnRL/kt3tmfFFVsUurLGz4n
+wgCg1OuflNcc9wIF8lZMjm0TZkQMGYBIfBA7x8/Vs2XSFuaT9vbWoC07LXftl13g
+HsMg1UUSqnMBUQStG42lbVFF1yIfPZThEPxD2RJTCw8FTLBmNrJyBsZ0BGagwe1C
+KH5H1VGmllMdZDHOamHHKA8mEDI4eAKY3HoOS4rfioT8Tks=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIHmDCCA4CgAwIBAgICEAAwDQYJKoZIhvcNAQEFBQAwVjELMAkGA1UEBhMCVVMx
+CzAJBgNVBAgMAkNBMQswCQYDVQQHDAJTRjENMAsGA1UECgwEQWNtZTENMAsGA1UE
+CwwES3VkdTEPMA0GA1UEAwwGUk9PVENBMB4XDTE3MDgxMTIxMzUzNVoXDTQ0MTIy
+NzIxMzUzNVowUTEXMBUGA1UEAwwOSW50ZXJtZWRpYXRlQ0ExCzAJBgNVBAgMAkNB
+MQswCQYDVQQGEwJVUzENMAsGA1UECgwEQWNtZTENMAsGA1UECwwES3VkdTCCAiIw
+DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM1X35LT/eBWBt0Uqqh3DSUyY3K8
+HLIlX3ZXg2Nx6y8yqhw5UGVFZl0uYBDo2DSlTl4sey+AxLIbpQI9ArRA+xqmFynV
+jheB9otudnA8hVwi/e9o+m+VSjG+HPRjSS5hwdPgpJG8DCPSmGyUUFtf3v0NxkUq
+Is+fB5qhQ36aQkI+MwQsSlHR+YrrKKVnE3f911wr9OScQP5KHjrZLQex8OmpWD9G
+v4P9jfVSUwmNEXXjmXDhNG/1R4ofX6HogZR6lBmRNGbcjjWRZQmPrOe9YcdkMLD0
+CdaUyKikqqW6Ilxs7scfuCGqwBWqh66tY18MBMHnt0bL26atTPduKYqulJ1pijio
+DUrzqtAzm7PirqPZ4aOJ9PNjdQs9zH3Zad3pcjfjpdKj4a/asX0st631J5jE6MLB
+LcbAerb/Csr/+tD0TOxwWlA+p/6wPb8ECflQLkvDDEY5BrRGdqYDpEOdm1F9DWQh
+y0RB8rWJMkxC/tTqYHfeaphzCxndLRsZQKVcPiqWCT7b431umIjPaDhsykNlcU3N
+f0V7V/fLY6wwuACngS0BLQuMrXy5FyhmWnUBeWwHfAeTxCkHlF+cVT6wHmeOuGbC
+c1piq7O7puKdC3UjO7Nn+WoOb2B6Qm/dajHpj5myxYJa5tGQGeUnWPwjjMQR557k
+HzugGAzkuG1ASQrhAgMBAAGjdTBzMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
+FPCnLX2qgKtPPOwh6g7CAtEZIO6EMB8GA1UdIwQYMBaAFE/9XKaDey5kC8f3bCeU
+HW46abboMAsGA1UdDwQEAwIBpjATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG
+9w0BAQUFAAOCBAEAIaD2yzjTFdn61A4Qi+ek3fBJaDNQZytd0rHb49v3T+mdj/MI
+yShI1qezDFkg2FP1LfNgjuQl/T+g0BloXatAhZ/dj20Y8oN6bmilV+r2YLJbvbTn
+3hI+MxNf3Ue3FmIrwKK3QdkWcDBURpyYaDO71oxPl9QNfdhWCGHB/oWKU2y4Qt/O
+aPy+CmBAZEclX+hsdUBDJG5vuujpv4myCFwpLgFKNQX3XqCPLc4SRjfyla2YmeZv
+j7KKYh8XOWBbBF0BnWD94WzUDIBmFlUfS32aJTvd7tVaWXwH8rGwDfLN8i05UD9G
+zc3uuFH+UdzWVymk/4svKIPlB2nw9vPV8hvRRah0yFN3EQqAF0vQtwVJF/VwtZdg
+ahH0DykYTf7cKtFXE40xB7YgwDLXd3UiXfo3USW28uKqsrO52xYuUTBn+xkilds1
+tNKwtpXFWP2PUk92ficxoqi1cJnHxIIt5HKskFPgfIpzkpR8IM/vsom1a5fn4TT1
+aJbO5FsZTXQMxFLYWiSOMhTZMp3iNduxMYPosngjjKPEIkTQHKkedpF+CAGIMOKE
+BVa0vHyF34laKMMDT8d9yxwBJLqjlBohNsLLZa/Y90ThaMw+QYn/GZATB+7ng+ip
+VdGAQrghsGSxP+47HZ6WgBrlRdUWN1d1tlN2NBMHLucpbra5THGzl5MlaSVBYZb6
+yXI+2lwcTnnEkKv2zoA4ZHWdtLn/b1y4NKNg205TA+sOZcl6B1BgMe/rFuXdZe9Q
+/b6Tjz65qL4y1ByBVBJNhQQairw6cypHzwzC3w6ub1ZXtFqnTlU8fFcHGeOyydYS
+NfoepF0w2v0ounqD+6rN1CH/ERVb4FCEN19HQ3z+rAj19z2h6m/l5QEKI7bz8ghD
+8yxyqJz+L9XpfOo1yZfHQJckilY6BBIGWyeetJBmvkwv2WPt+3pX1u7h5LkvNRj2
+3fItf486zqtzUi+i/E//rS4gD/rRr4a85U8GSfp3LSAbtmfC0LNYUYA9Dcc0LSpl
+9alNuEpBHSHXlCVh4bcOb0L9n5XNdMcUYBo14hQdP0K1G7TounuAXFKYIQeyNyoi
+OAZ+eb7Y2xNnkY/ps/kyhsZgOJyiDZhdcruK3FIUGYlg5aVjQTB8H0c3/5SZnSky
+6779yMKztFXj9ctYU0YyJXWdF0xP/vi1gjQx/hJnDfXFfIOmeJdQSC08BGyK/PeC
+8zAS380bgzOza/eBL6IK0RqytbWgdoLrUQQfa1+f7AQxDDdoOkUenM0HSWjKfCuG
+m1/N7KUDHtnjVIHWqRefTPg1/tQjVY8/zgxN8MyAy+D95y4rawjsJf1dL6c0+zGv
+Wd40Cr+wAdHKN6t/oransoxu0EZ3HcSOI1umFg==
+-----END CERTIFICATE-----
+)";
+
+  *cert_file = JoinPathSegments(dir, "test.cert");
+  *key_file = JoinPathSegments(dir, "test.key");
+  *ca_cert_file = JoinPathSegments(dir, "testchainca.cert");
+
+  RETURN_NOT_OK(WriteStringToFile(Env::Default(), kCert, *cert_file));
+  RETURN_NOT_OK(WriteStringToFile(Env::Default(), kKey, *key_file));
+  RETURN_NOT_OK(WriteStringToFile(Env::Default(), kCaChainCert, *ca_cert_file));
+  return Status::OK();
+}
+
 } // namespace security
 } // namespace kudu

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/3a41c21e/be/src/kudu/security/test/test_certs.h
----------------------------------------------------------------------
diff --git a/be/src/kudu/security/test/test_certs.h b/be/src/kudu/security/test/test_certs.h
index 75e658e..89d1654 100644
--- a/be/src/kudu/security/test/test_certs.h
+++ b/be/src/kudu/security/test/test_certs.h
@@ -64,9 +64,16 @@ Status CreateTestSSLCertWithPlainKey(const std::string& dir,
 // Same as the CreateTestSSLCertWithPlainKey() except that the private key is
 // encrypted with a password that is returned in 'key_password'.
 Status CreateTestSSLCertWithEncryptedKey(const std::string& dir,
-                                          std::string* cert_file,
-                                          std::string* key_file,
-                                          std::string* key_password);
+                                         std::string* cert_file,
+                                         std::string* key_file,
+                                         std::string* key_password);
+
+// Same as the CreateTestSSLCertWithPlainKey() except that the 'cert_file' is
+// signed by a CA chain.
+Status CreateTestSSLCertSignedByChain(const std::string& dir,
+                                      std::string* cert_file,
+                                      std::string* key_file,
+                                      std::string* ca_cert_file);
 
 } // namespace security
 } // namespace kudu

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/3a41c21e/be/src/kudu/security/tls_context.cc
----------------------------------------------------------------------
diff --git a/be/src/kudu/security/tls_context.cc b/be/src/kudu/security/tls_context.cc
index 353d1ed..ce7b3d8 100644
--- a/be/src/kudu/security/tls_context.cc
+++ b/be/src/kudu/security/tls_context.cc
@@ -176,7 +176,7 @@ Status TlsContext::VerifyCertChainUnlocked(const Cert& cert) {
   X509_STORE* store = SSL_CTX_get_cert_store(ctx_.get());
   auto store_ctx = ssl_make_unique<X509_STORE_CTX>(X509_STORE_CTX_new());
 
-  OPENSSL_RET_NOT_OK(X509_STORE_CTX_init(store_ctx.get(), store, cert.GetRawData(), nullptr),
+  OPENSSL_RET_NOT_OK(X509_STORE_CTX_init(store_ctx.get(), store, cert.GetEndOfChainX509(), nullptr),
                      "could not init X509_STORE_CTX");
   int rc = X509_verify_cert(store_ctx.get());
   if (rc != 1) {
@@ -220,7 +220,7 @@ Status TlsContext::UseCertificateAndKey(const Cert& cert, const PrivateKey& key)
 
   OPENSSL_RET_NOT_OK(SSL_CTX_use_PrivateKey(ctx_.get(), key.GetRawData()),
                      "failed to use private key");
-  OPENSSL_RET_NOT_OK(SSL_CTX_use_certificate(ctx_.get(), cert.GetRawData()),
+  OPENSSL_RET_NOT_OK(SSL_CTX_use_certificate(ctx_.get(), cert.GetEndOfChainX509()),
                      "failed to use certificate");
   has_cert_ = true;
   return Status::OK();
@@ -248,17 +248,22 @@ Status TlsContext::AddTrustedCertificate(const Cert& cert) {
 
   unique_lock<RWMutex> lock(lock_);
   auto* cert_store = SSL_CTX_get_cert_store(ctx_.get());
-  int rc = X509_STORE_add_cert(cert_store, cert.GetRawData());
-  if (rc <= 0) {
-    // Ignore the common case of re-adding a cert that is already in the
-    // trust store.
-    auto err = ERR_peek_error();
-    if (ERR_GET_LIB(err) == ERR_LIB_X509 &&
-        ERR_GET_REASON(err) == X509_R_CERT_ALREADY_IN_HASH_TABLE) {
-      ERR_clear_error();
-      return Status::OK();
+
+  // Iterate through the certificate chain and add each individual certificate to the store.
+  for (int i = 0; i < cert.chain_len(); ++i) {
+    X509* inner_cert = sk_X509_value(cert.GetRawData(), i);
+    int rc = X509_STORE_add_cert(cert_store, inner_cert);
+    if (rc <= 0) {
+      // Ignore the common case of re-adding a cert that is already in the
+      // trust store.
+      auto err = ERR_peek_error();
+      if (ERR_GET_LIB(err) == ERR_LIB_X509 &&
+          ERR_GET_REASON(err) == X509_R_CERT_ALREADY_IN_HASH_TABLE) {
+        ERR_clear_error();
+        return Status::OK();
+      }
+      OPENSSL_RET_NOT_OK(rc, "failed to add trusted certificate");
     }
-    OPENSSL_RET_NOT_OK(rc, "failed to add trusted certificate");
   }
   trusted_cert_count_ += 1;
   return Status::OK();
@@ -279,7 +284,7 @@ Status TlsContext::DumpTrustedCerts(vector<string>* cert_ders) const {
     X509_OBJECT* obj = sk_X509_OBJECT_value(cert_store->objs, i);
     if (obj->type != X509_LU_X509) continue;
     Cert c;
-    c.AdoptAndAddRefRawData(obj->data.x509);
+    c.AdoptAndAddRefX509(obj->data.x509);
     string der;
     RETURN_NOT_OK(c.ToString(&der, DataFormat::DER));
     ret.emplace_back(std::move(der));
@@ -344,7 +349,7 @@ Status TlsContext::GenerateSelfSignedCertAndKey() {
   // a leak. Calling this nonsense X509_check_ca() forces the X509 extensions to
   // get cached, so we don't hit the race later. 'VerifyCertChain' also has the
   // effect of triggering the racy codepath.
-  ignore_result(X509_check_ca(cert.GetRawData()));
+  ignore_result(X509_check_ca(cert.GetEndOfChainX509()));
   ERR_clear_error(); // in case it left anything on the queue.
 
   // Step 4: Adopt the new key and cert.
@@ -352,7 +357,7 @@ Status TlsContext::GenerateSelfSignedCertAndKey() {
   CHECK(!has_cert_);
   OPENSSL_RET_NOT_OK(SSL_CTX_use_PrivateKey(ctx_.get(), key.GetRawData()),
                      "failed to use private key");
-  OPENSSL_RET_NOT_OK(SSL_CTX_use_certificate(ctx_.get(), cert.GetRawData()),
+  OPENSSL_RET_NOT_OK(SSL_CTX_use_certificate(ctx_.get(), cert.GetEndOfChainX509()),
                      "failed to use certificate");
   has_cert_ = true;
   csr_ = std::move(csr);
@@ -392,7 +397,7 @@ Status TlsContext::AdoptSignedCert(const Cert& cert) {
     return Status::RuntimeError("certificate public key does not match the CSR public key");
   }
 
-  OPENSSL_RET_NOT_OK(SSL_CTX_use_certificate(ctx_.get(), cert.GetRawData()),
+  OPENSSL_RET_NOT_OK(SSL_CTX_use_certificate(ctx_.get(), cert.GetEndOfChainX509()),
                      "failed to use certificate");
 
   // This should never fail since we already compared the cert's public key

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/3a41c21e/be/src/kudu/security/tls_handshake.cc
----------------------------------------------------------------------
diff --git a/be/src/kudu/security/tls_handshake.cc b/be/src/kudu/security/tls_handshake.cc
index b4e3937..0be46e0 100644
--- a/be/src/kudu/security/tls_handshake.cc
+++ b/be/src/kudu/security/tls_handshake.cc
@@ -139,7 +139,7 @@ Status TlsHandshake::Verify(const Socket& socket) const {
   }
 
   // Get the peer certificate.
-  X509* cert = remote_cert_.GetRawData();
+  X509* cert = remote_cert_.GetEndOfChainX509();
   if (!cert) {
     if (SSL_get_verify_mode(ssl_.get()) & SSL_VERIFY_FAIL_IF_NO_PEER_CERT) {
       return Status::NotAuthorized("Handshake failed: unable to retreive peer certificate");
@@ -187,12 +187,12 @@ Status TlsHandshake::GetCerts() {
   if (cert) {
     // For whatever reason, SSL_get_certificate (unlike SSL_get_peer_certificate)
     // does not increment the X509's reference count.
-    local_cert_.AdoptAndAddRefRawData(cert);
+    local_cert_.AdoptAndAddRefX509(cert);
   }
 
   cert = SSL_get_peer_certificate(ssl_.get());
   if (cert) {
-    remote_cert_.AdoptRawData(cert);
+    remote_cert_.AdoptX509(cert);
   }
   return Status::OK();
 }



[12/12] incubator-impala git commit: IMPALA-5653: Remove "unlimited" process mem_limit option

Posted by kw...@apache.org.
IMPALA-5653: Remove "unlimited" process mem_limit option

This was deprecated in 2.10. Now we can disable it.

Testing:
Started a minicluster with --mem_limit="" and --mem_limit=-1,
confirmed that it didn't start up and logged a reasonable
error in both cases.

  E0825 09:23:59.749104 32708 impalad-main.cc:95] Impalad services did
    not start correctly, exiting.  Error: The process memory limit
    (--mem_limit) must be a positive bytes value or percentage: -1

Change-Id: Ifb235ae34ce8d2aff37f0fa0c218419da01b30f3
Reviewed-on: http://gerrit.cloudera.org:8080/7828
Reviewed-by: Dan Hecht <dh...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/30129c45
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/30129c45
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/30129c45

Branch: refs/heads/master
Commit: 30129c4535e3505bb203c3f84e2d3da7c73f1117
Parents: c163ac1
Author: Tim Armstrong <ta...@cloudera.com>
Authored: Fri Aug 25 09:15:37 2017 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Thu Aug 31 03:42:46 2017 +0000

----------------------------------------------------------------------
 be/src/runtime/exec-env.cc | 26 ++++++++++----------------
 1 file changed, 10 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/30129c45/be/src/runtime/exec-env.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/exec-env.cc b/be/src/runtime/exec-env.cc
index 0d7518a..2907768 100644
--- a/be/src/runtime/exec-env.cc
+++ b/be/src/runtime/exec-env.cc
@@ -221,7 +221,6 @@ Status ExecEnv::StartServices() {
   // memory limit either based on the available physical memory, or if overcommitting
   // is turned off, we use the memory commit limit from /proc/meminfo (see
   // IMPALA-1690).
-  // --mem_limit="" means no memory limit. TODO: IMPALA-5653: remove this mode
   int64_t bytes_limit = 0;
   bool is_percent;
   int64_t system_mem;
@@ -246,15 +245,11 @@ Status ExecEnv::StartServices() {
     system_mem = MemInfo::physical_mem();
     bytes_limit = ParseUtil::ParseMemSpec(FLAGS_mem_limit, &is_percent, system_mem);
   }
-  // ParseMemSpec returns 0 to mean unlimited.
-  bool no_process_mem_limit = bytes_limit == 0;
-  if (no_process_mem_limit) {
-    LOG(WARNING) << "Configured with unlimited process memory limit (--mem_limit='"
-                 << FLAGS_mem_limit << "'). Starting in the next Impala release, "
-                 << "a process memory limit must always be specified. See IMPALA-5653.";
-  }
-  if (bytes_limit < 0) {
-    return Status("Failed to parse mem limit from '" + FLAGS_mem_limit + "'.");
+  // ParseMemSpec() returns -1 for invalid input and 0 to mean unlimited. From Impala
+  // 2.11 onwards we do not support unlimited process memory limits.
+  if (bytes_limit <= 0) {
+    return Status(Substitute("The process memory limit (--mem_limit) must be a positive "
+          "bytes value or percentage: $0", FLAGS_mem_limit));
   }
 
   if (!BitUtil::IsPowerOf2(FLAGS_min_buffer_size)) {
@@ -262,10 +257,10 @@ Status ExecEnv::StartServices() {
         "--min_buffer_size must be a power-of-two: $0", FLAGS_min_buffer_size));
   }
   int64_t buffer_pool_limit = ParseUtil::ParseMemSpec(FLAGS_buffer_pool_limit,
-      &is_percent, no_process_mem_limit ? system_mem : bytes_limit);
+      &is_percent, bytes_limit);
   if (buffer_pool_limit <= 0) {
     return Status(Substitute("Invalid --buffer_pool_limit value, must be a percentage or "
-          "positive bytes value: $0", FLAGS_buffer_pool_limit));
+          "positive bytes value or percentage: $0", FLAGS_buffer_pool_limit));
   }
   buffer_pool_limit = BitUtil::RoundDown(buffer_pool_limit, FLAGS_min_buffer_size);
 
@@ -273,7 +268,7 @@ Status ExecEnv::StartServices() {
       &is_percent, buffer_pool_limit);
   if (clean_pages_limit <= 0) {
     return Status(Substitute("Invalid --buffer_pool_clean_pages_limit value, must be a percentage or "
-          "positive bytes value: $0", FLAGS_buffer_pool_clean_pages_limit));
+          "positive bytes value or percentage: $0", FLAGS_buffer_pool_clean_pages_limit));
   }
   InitBufferPool(FLAGS_min_buffer_size, buffer_pool_limit, clean_pages_limit);
 
@@ -283,9 +278,8 @@ Status ExecEnv::StartServices() {
   RETURN_IF_ERROR(RegisterMemoryMetrics(
       metrics_.get(), true, buffer_reservation_.get(), buffer_pool_.get()));
 
-  // Limit of -1 means no memory limit.
-  mem_tracker_.reset(new MemTracker(AggregateMemoryMetrics::TOTAL_USED,
-      no_process_mem_limit ? -1 : bytes_limit, "Process"));
+  mem_tracker_.reset(
+      new MemTracker(AggregateMemoryMetrics::TOTAL_USED, bytes_limit, "Process"));
   // Add BufferPool MemTrackers for cached memory that is not tracked against queries
   // but is included in process memory consumption.
   obj_pool_->Add(new MemTracker(BufferPoolMetric::FREE_BUFFER_BYTES, -1,


[04/12] incubator-impala git commit: IMPALA-5617: Include full workload name in tpch_nested query filenames

Posted by kw...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q17.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q17.test b/testdata/workloads/tpch_nested/queries/tpch-q17.test
deleted file mode 100644
index d4b59f3..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q17.test
+++ /dev/null
@@ -1,25 +0,0 @@
-====
----- QUERY: TPCH-Q17
-# Q17 - Small-Quantity-Order Revenue Query
-select
-  sum(l_extendedprice) / 7.0 as avg_yearly
-from
-  customer.c_orders.o_lineitems l,
-  part p
-where
-  p_partkey = l_partkey
-  and p_brand = 'Brand#23'
-  and p_container = 'MED BOX'
-  and l_quantity < (
-    select
-      0.2 * avg(l_quantity)
-    from
-      customer.c_orders.o_lineitems l
-    where
-      l_partkey = p_partkey
-  )
----- RESULTS
-348406.05
----- TYPES
-decimal
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q18.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q18.test b/testdata/workloads/tpch_nested/queries/tpch-q18.test
deleted file mode 100644
index 658af2a..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q18.test
+++ /dev/null
@@ -1,81 +0,0 @@
-====
----- QUERY: TPCH-Q18
-# Q18 - Large Value Customer Query
-select
-  c_name,
-  c_custkey,
-  o_orderkey,
-  o_orderdate,
-  o_totalprice,
-  sum_quantity
-from
-  customer c,
-  c.c_orders o,
-  (select sum(l_quantity) sum_quantity from o.o_lineitems) l
-where
-  sum_quantity > 300
-order by
-  o_totalprice desc,
-  o_orderdate
-limit 100
----- RESULTS
-'Customer#000128120',128120,4722021,'1994-04-07',544089.09,323.00
-'Customer#000144617',144617,3043270,'1997-02-12',530604.44,317.00
-'Customer#000013940',13940,2232932,'1997-04-13',522720.61,304.00
-'Customer#000066790',66790,2199712,'1996-09-30',515531.82,327.00
-'Customer#000046435',46435,4745607,'1997-07-03',508047.99,309.00
-'Customer#000015272',15272,3883783,'1993-07-28',500241.33,302.00
-'Customer#000146608',146608,3342468,'1994-06-12',499794.58,303.00
-'Customer#000096103',96103,5984582,'1992-03-16',494398.79,312.00
-'Customer#000024341',24341,1474818,'1992-11-15',491348.26,302.00
-'Customer#000137446',137446,5489475,'1997-05-23',487763.25,311.00
-'Customer#000107590',107590,4267751,'1994-11-04',485141.38,301.00
-'Customer#000050008',50008,2366755,'1996-12-09',483891.26,302.00
-'Customer#000015619',15619,3767271,'1996-08-07',480083.96,318.00
-'Customer#000077260',77260,1436544,'1992-09-12',479499.43,307.00
-'Customer#000109379',109379,5746311,'1996-10-10',478064.11,302.00
-'Customer#000054602',54602,5832321,'1997-02-09',471220.08,307.00
-'Customer#000105995',105995,2096705,'1994-07-03',469692.58,307.00
-'Customer#000148885',148885,2942469,'1992-05-31',469630.44,313.00
-'Customer#000114586',114586,551136,'1993-05-19',469605.59,308.00
-'Customer#000105260',105260,5296167,'1996-09-06',469360.57,303.00
-'Customer#000147197',147197,1263015,'1997-02-02',467149.67,320.00
-'Customer#000064483',64483,2745894,'1996-07-04',466991.35,304.00
-'Customer#000136573',136573,2761378,'1996-05-31',461282.73,301.00
-'Customer#000016384',16384,502886,'1994-04-12',458378.92,312.00
-'Customer#000117919',117919,2869152,'1996-06-20',456815.92,317.00
-'Customer#000012251',12251,735366,'1993-11-24',455107.26,309.00
-'Customer#000120098',120098,1971680,'1995-06-14',453451.23,308.00
-'Customer#000066098',66098,5007490,'1992-08-07',453436.16,304.00
-'Customer#000117076',117076,4290656,'1997-02-05',449545.85,301.00
-'Customer#000129379',129379,4720454,'1997-06-07',448665.79,303.00
-'Customer#000126865',126865,4702759,'1994-11-07',447606.65,320.00
-'Customer#000088876',88876,983201,'1993-12-30',446717.46,304.00
-'Customer#000036619',36619,4806726,'1995-01-17',446704.09,328.00
-'Customer#000141823',141823,2806245,'1996-12-29',446269.12,310.00
-'Customer#000053029',53029,2662214,'1993-08-13',446144.49,302.00
-'Customer#000018188',18188,3037414,'1995-01-25',443807.22,308.00
-'Customer#000066533',66533,29158,'1995-10-21',443576.50,305.00
-'Customer#000037729',37729,4134341,'1995-06-29',441082.97,309.00
-'Customer#000003566',3566,2329187,'1998-01-04',439803.36,304.00
-'Customer#000045538',45538,4527553,'1994-05-22',436275.31,305.00
-'Customer#000081581',81581,4739650,'1995-11-04',435405.90,305.00
-'Customer#000119989',119989,1544643,'1997-09-20',434568.25,320.00
-'Customer#000003680',3680,3861123,'1998-07-03',433525.97,301.00
-'Customer#000113131',113131,967334,'1995-12-15',432957.75,301.00
-'Customer#000141098',141098,565574,'1995-09-24',430986.69,301.00
-'Customer#000093392',93392,5200102,'1997-01-22',425487.51,304.00
-'Customer#000015631',15631,1845057,'1994-05-12',419879.59,302.00
-'Customer#000112987',112987,4439686,'1996-09-17',418161.49,305.00
-'Customer#000012599',12599,4259524,'1998-02-12',415200.61,304.00
-'Customer#000105410',105410,4478371,'1996-03-05',412754.51,302.00
-'Customer#000149842',149842,5156581,'1994-05-30',411329.35,302.00
-'Customer#000010129',10129,5849444,'1994-03-21',409129.85,309.00
-'Customer#000069904',69904,1742403,'1996-10-19',408513.00,305.00
-'Customer#000017746',17746,6882,'1997-04-09',408446.93,303.00
-'Customer#000013072',13072,1481925,'1998-03-15',399195.47,301.00
-'Customer#000082441',82441,857959,'1994-02-07',382579.74,305.00
-'Customer#000088703',88703,2995076,'1994-01-30',363812.12,302.00
----- TYPES
-STRING, BIGINT, BIGINT, STRING, DECIMAL, DECIMAL
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q19.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q19.test b/testdata/workloads/tpch_nested/queries/tpch-q19.test
deleted file mode 100644
index 6bbe4f8..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q19.test
+++ /dev/null
@@ -1,43 +0,0 @@
-====
----- QUERY: TPCH-Q19
-# Q19 - Discounted Revenue Query
-select
-  sum(l_extendedprice * (1 - l_discount)) as revenue
-from
-  customer.c_orders.o_lineitems l,
-  part p
-where
-  p_partkey = l_partkey
-  and (
-    (
-      p_brand = 'Brand#12'
-      and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG')
-      and l_quantity >= 1 and l_quantity <= 11
-      and p_size between 1 and 5
-      and l_shipmode in ('AIR', 'AIR REG')
-      and l_shipinstruct = 'DELIVER IN PERSON'
-    )
-    or
-    (
-      p_brand = 'Brand#23'
-      and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK')
-      and l_quantity >= 10 and l_quantity <= 20
-      and p_size between 1 and 10
-      and l_shipmode in ('AIR', 'AIR REG')
-      and l_shipinstruct = 'DELIVER IN PERSON'
-    )
-    or
-    (
-      p_brand = 'Brand#34'
-      and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG')
-      and l_quantity >= 20 and l_quantity <= 30
-      and p_size between 1 and 15
-      and l_shipmode in ('AIR', 'AIR REG')
-      and l_shipinstruct = 'DELIVER IN PERSON'
-    )
-  )
----- RESULTS
-3083843.0578
----- TYPES
-decimal
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q2.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q2.test b/testdata/workloads/tpch_nested/queries/tpch-q2.test
deleted file mode 100644
index 0ef4768..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q2.test
+++ /dev/null
@@ -1,147 +0,0 @@
-====
----- QUERY: TPCH-Q2
-# Q2 - Minimum Cost Supplier Query
-select
-  s_acctbal,
-  s_name,
-  n_name,
-  p_partkey,
-  p_mfgr,
-  s_address,
-  s_phone,
-  s_comment
-from
-  supplier s,
-  s.s_partsupps ps,
-  part p,
-  region r,
-  r.r_nations n
-where
-  p_partkey = ps_partkey
-  and p_size = 15
-  and p_type like '%BRASS'
-  and s_nationkey = n_nationkey
-  and r_name = 'EUROPE'
-  and ps_supplycost = (
-    select
-      min(ps_supplycost)
-    from
-      supplier s,
-      s.s_partsupps ps,
-      region r,
-      r.r_nations n
-    where
-      p_partkey = ps_partkey
-      and s_nationkey = n_nationkey
-      and r_name = 'EUROPE'
-    )
-order by
-  s_acctbal desc,
-  n_name,
-  s_name,
-  p_partkey
-limit 100
----- RESULTS
-9938.53,'Supplier#000005359','UNITED KINGDOM',185358,'Manufacturer#4','QKuHYh,vZGiwu2FWEJoLDx04','33-429-790-6131','uriously regular requests hag'
-9937.84,'Supplier#000005969','ROMANIA',108438,'Manufacturer#1','ANDENSOSmk,miq23Xfb5RWt6dvUcvt6Qa','29-520-692-3537','efully express instructions. regular requests against the slyly fin'
-9936.22,'Supplier#000005250','UNITED KINGDOM',249,'Manufacturer#4','B3rqp0xbSEim4Mpy2RH J','33-320-228-2957','etect about the furiously final accounts. slyly ironic pinto beans sleep inside the furiously'
-9923.77,'Supplier#000002324','GERMANY',29821,'Manufacturer#4','y3OD9UywSTOk','17-779-299-1839','ackages boost blithely. blithely regular deposits c'
-9871.22,'Supplier#000006373','GERMANY',43868,'Manufacturer#5','J8fcXWsTqM','17-813-485-8637','etect blithely bold asymptotes. fluffily ironic platelets wake furiously; blit'
-9870.78,'Supplier#000001286','GERMANY',81285,'Manufacturer#2','YKA,E2fjiVd7eUrzp2Ef8j1QxGo2DFnosaTEH','17-516-924-4574',' regular accounts. furiously unusual courts above the fi'
-9870.78,'Supplier#000001286','GERMANY',181285,'Manufacturer#4','YKA,E2fjiVd7eUrzp2Ef8j1QxGo2DFnosaTEH','17-516-924-4574',' regular accounts. furiously unusual courts above the fi'
-9852.52,'Supplier#000008973','RUSSIA',18972,'Manufacturer#2','t5L67YdBYYH6o,Vz24jpDyQ9','32-188-594-7038','rns wake final foxes. carefully unusual depende'
-9847.83,'Supplier#000008097','RUSSIA',130557,'Manufacturer#2','xMe97bpE69NzdwLoX','32-375-640-3593',' the special excuses. silent sentiments serve carefully final ac'
-9847.57,'Supplier#000006345','FRANCE',86344,'Manufacturer#1','VSt3rzk3qG698u6ld8HhOByvrTcSTSvQlDQDag','16-886-766-7945','ges. slyly regular requests are. ruthless, express excuses cajole blithely across the unu'
-9847.57,'Supplier#000006345','FRANCE',173827,'Manufacturer#2','VSt3rzk3qG698u6ld8HhOByvrTcSTSvQlDQDag','16-886-766-7945','ges. slyly regular requests are. ruthless, express excuses cajole blithely across the unu'
-9836.93,'Supplier#000007342','RUSSIA',4841,'Manufacturer#4','JOlK7C1,7xrEZSSOw','32-399-414-5385','blithely carefully bold theodolites. fur'
-9817.10,'Supplier#000002352','RUSSIA',124815,'Manufacturer#2','4LfoHUZjgjEbAKw TgdKcgOc4D4uCYw','32-551-831-1437','wake carefully alongside of the carefully final ex'
-9817.10,'Supplier#000002352','RUSSIA',152351,'Manufacturer#3','4LfoHUZjgjEbAKw TgdKcgOc4D4uCYw','32-551-831-1437','wake carefully alongside of the carefully final ex'
-9739.86,'Supplier#000003384','FRANCE',138357,'Manufacturer#2','o,Z3v4POifevE k9U1b 6J1ucX,I','16-494-913-5925','s after the furiously bold packages sleep fluffily idly final requests: quickly final'
-9721.95,'Supplier#000008757','UNITED KINGDOM',156241,'Manufacturer#3','Atg6GnM4dT2','33-821-407-2995','eep furiously sauternes; quickl'
-9681.33,'Supplier#000008406','RUSSIA',78405,'Manufacturer#1',',qUuXcftUl','32-139-873-8571','haggle slyly regular excuses. quic'
-9643.55,'Supplier#000005148','ROMANIA',107617,'Manufacturer#1','kT4ciVFslx9z4s79p Js825','29-252-617-4850','final excuses. final ideas boost quickly furiously speci'
-9624.82,'Supplier#000001816','FRANCE',34306,'Manufacturer#3','e7vab91vLJPWxxZnewmnDBpDmxYHrb','16-392-237-6726','e packages are around the special ideas. special, pending foxes us'
-9624.78,'Supplier#000009658','ROMANIA',189657,'Manufacturer#1','oE9uBgEfSS4opIcepXyAYM,x','29-748-876-2014','ronic asymptotes wake bravely final'
-9612.94,'Supplier#000003228','ROMANIA',120715,'Manufacturer#2','KDdpNKN3cWu7ZSrbdqp7AfSLxx,qWB','29-325-784-8187','warhorses. quickly even deposits sublate daringly ironic instructions. slyly blithe t'
-9612.94,'Supplier#000003228','ROMANIA',198189,'Manufacturer#4','KDdpNKN3cWu7ZSrbdqp7AfSLxx,qWB','29-325-784-8187','warhorses. quickly even deposits sublate daringly ironic instructions. slyly blithe t'
-9571.83,'Supplier#000004305','ROMANIA',179270,'Manufacturer#2','qNHZ7WmCzygwMPRDO9Ps','29-973-481-1831','kly carefully express asymptotes. furiou'
-9558.10,'Supplier#000003532','UNITED KINGDOM',88515,'Manufacturer#4','EOeuiiOn21OVpTlGguufFDFsbN1p0lhpxHp','33-152-301-2164',' foxes. quickly even excuses use. slyly special foxes nag bl'
-9492.79,'Supplier#000005975','GERMANY',25974,'Manufacturer#5','S6mIiCTx82z7lV','17-992-579-4839','arefully pending accounts. blithely regular excuses boost carefully carefully ironic p'
-9461.05,'Supplier#000002536','UNITED KINGDOM',20033,'Manufacturer#1','8mmGbyzaU 7ZS2wJumTibypncu9pNkDc4FYA','33-556-973-5522','. slyly regular deposits wake slyly. furiously regular warthogs are.'
-9453.01,'Supplier#000000802','ROMANIA',175767,'Manufacturer#1',',6HYXb4uaHITmtMBj4Ak57Pd','29-342-882-6463','gular frets. permanently special multipliers believe blithely alongs'
-9408.65,'Supplier#000007772','UNITED KINGDOM',117771,'Manufacturer#4','AiC5YAH,gdu0i7','33-152-491-1126','nag against the final requests. furiously unusual packages cajole blit'
-9359.61,'Supplier#000004856','ROMANIA',62349,'Manufacturer#5','HYogcF3Jb yh1','29-334-870-9731','y ironic theodolites. blithely sile'
-9357.45,'Supplier#000006188','UNITED KINGDOM',138648,'Manufacturer#1','g801,ssP8wpTk4Hm','33-583-607-1633','ously always regular packages. fluffily even accounts beneath the furiously final pack'
-9352.04,'Supplier#000003439','GERMANY',170921,'Manufacturer#4','qYPDgoiBGhCYxjgC','17-128-996-4650',' according to the carefully bold ideas'
-9312.97,'Supplier#000007807','RUSSIA',90279,'Manufacturer#5','oGYMPCk9XHGB2PBfKRnHA','32-673-872-5854','ecial packages among the pending, even requests use regula'
-9312.97,'Supplier#000007807','RUSSIA',100276,'Manufacturer#5','oGYMPCk9XHGB2PBfKRnHA','32-673-872-5854','ecial packages among the pending, even requests use regula'
-9280.27,'Supplier#000007194','ROMANIA',47193,'Manufacturer#3','zhRUQkBSrFYxIAXTfInj vyGRQjeK','29-318-454-2133','o beans haggle after the furiously unusual deposits. carefully silent dolphins cajole carefully'
-9274.80,'Supplier#000008854','RUSSIA',76346,'Manufacturer#3','1xhLoOUM7I3mZ1mKnerw OSqdbb4QbGa','32-524-148-5221','y. courts do wake slyly. carefully ironic platelets haggle above the slyly regular the'
-9249.35,'Supplier#000003973','FRANCE',26466,'Manufacturer#1','d18GiDsL6Wm2IsGXM,RZf1jCsgZAOjNYVThTRP4','16-722-866-1658','uests are furiously. regular tithes through the regular, final accounts cajole furiously above the q'
-9249.35,'Supplier#000003973','FRANCE',33972,'Manufacturer#1','d18GiDsL6Wm2IsGXM,RZf1jCsgZAOjNYVThTRP4','16-722-866-1658','uests are furiously. regular tithes through the regular, final accounts cajole furiously above the q'
-9208.70,'Supplier#000007769','ROMANIA',40256,'Manufacturer#5','rsimdze 5o9P Ht7xS','29-964-424-9649','lites was quickly above the furiously ironic requests. slyly even foxes against the blithely bold '
-9201.47,'Supplier#000009690','UNITED KINGDOM',67183,'Manufacturer#5','CB BnUTlmi5zdeEl7R7','33-121-267-9529','e even, even foxes. blithely ironic packages cajole regular packages. slyly final ide'
-9192.10,'Supplier#000000115','UNITED KINGDOM',85098,'Manufacturer#3','nJ 2t0f7Ve,wL1,6WzGBJLNBUCKlsV','33-597-248-1220','es across the carefully express accounts boost caref'
-9189.98,'Supplier#000001226','GERMANY',21225,'Manufacturer#4','qsLCqSvLyZfuXIpjz','17-725-903-1381',' deposits. blithely bold excuses about the slyly bold forges wake '
-9128.97,'Supplier#000004311','RUSSIA',146768,'Manufacturer#5','I8IjnXd7NSJRs594RxsRR0','32-155-440-7120','refully. blithely unusual asymptotes haggle '
-9104.83,'Supplier#000008520','GERMANY',150974,'Manufacturer#4','RqRVDgD0ER J9 b41vR2,3','17-728-804-1793','ly about the blithely ironic depths. slyly final theodolites among the fluffily bold ideas print'
-9101.00,'Supplier#000005791','ROMANIA',128254,'Manufacturer#5','zub2zCV,jhHPPQqi,P2INAjE1zI n66cOEoXFG','29-549-251-5384','ts. notornis detect blithely above the carefully bold requests. blithely even package'
-9094.57,'Supplier#000004582','RUSSIA',39575,'Manufacturer#1','WB0XkCSG3r,mnQ n,h9VIxjjr9ARHFvKgMDf','32-587-577-1351','jole. regular accounts sleep blithely frets. final pinto beans play furiously past the '
-8996.87,'Supplier#000004702','FRANCE',102191,'Manufacturer#5','8XVcQK23akp','16-811-269-8946','ickly final packages along the express plat'
-8996.14,'Supplier#000009814','ROMANIA',139813,'Manufacturer#2','af0O5pg83lPU4IDVmEylXZVqYZQzSDlYLAmR','29-995-571-8781',' dependencies boost quickly across the furiously pending requests! unusual dolphins play sl'
-8968.42,'Supplier#000010000','ROMANIA',119999,'Manufacturer#5','aTGLEusCiL4F PDBdv665XBJhPyCOB0i','29-578-432-2146','ly regular foxes boost slyly. quickly special waters boost carefully ironi'
-8936.82,'Supplier#000007043','UNITED KINGDOM',109512,'Manufacturer#1','FVajceZInZdbJE6Z9XsRUxrUEpiwHDrOXi,1Rz','33-784-177-8208','efully regular courts. furiousl'
-8929.42,'Supplier#000008770','FRANCE',173735,'Manufacturer#4','R7cG26TtXrHAP9 HckhfRi','16-242-746-9248','cajole furiously unusual requests. quickly stealthy requests are. '
-8920.59,'Supplier#000003967','ROMANIA',26460,'Manufacturer#1','eHoAXe62SY9','29-194-731-3944','aters. express, pending instructions sleep. brave, r'
-8920.59,'Supplier#000003967','ROMANIA',173966,'Manufacturer#2','eHoAXe62SY9','29-194-731-3944','aters. express, pending instructions sleep. brave, r'
-8913.96,'Supplier#000004603','UNITED KINGDOM',137063,'Manufacturer#2','OUzlvMUr7n,utLxmPNeYKSf3T24OXskxB5','33-789-255-7342',' haggle slyly above the furiously regular pinto beans. even '
-8877.82,'Supplier#000007967','FRANCE',167966,'Manufacturer#5','A3pi1BARM4nx6R,qrwFoRPU','16-442-147-9345','ously foxes. express, ironic requests im'
-8862.24,'Supplier#000003323','ROMANIA',73322,'Manufacturer#3','W9 lYcsC9FwBqk3ItL','29-736-951-3710','ly pending ideas sleep about the furiously unu'
-8841.59,'Supplier#000005750','ROMANIA',100729,'Manufacturer#5','Erx3lAgu0g62iaHF9x50uMH4EgeN9hEG','29-344-502-5481','gainst the pinto beans. fluffily unusual dependencies affix slyly even deposits.'
-8781.71,'Supplier#000003121','ROMANIA',13120,'Manufacturer#5','wNqTogx238ZYCamFb,50v,bj 4IbNFW9Bvw1xP','29-707-291-5144','s wake quickly ironic ideas'
-8754.24,'Supplier#000009407','UNITED KINGDOM',179406,'Manufacturer#4','CHRCbkaWcf5B','33-903-970-9604','e ironic requests. carefully even foxes above the furious'
-8691.06,'Supplier#000004429','UNITED KINGDOM',126892,'Manufacturer#2','k,BQms5UhoAF1B2Asi,fLib','33-964-337-5038','efully express deposits kindle after the deposits. final '
-8655.99,'Supplier#000006330','RUSSIA',193810,'Manufacturer#2','UozlaENr0ytKe2w6CeIEWFWn iO3S8Rae7Ou','32-561-198-3705','symptotes use about the express dolphins. requests use after the express platelets. final, ex'
-8638.36,'Supplier#000002920','RUSSIA',75398,'Manufacturer#1','Je2a8bszf3L','32-122-621-7549','ly quickly ironic requests. even requests whithout t'
-8638.36,'Supplier#000002920','RUSSIA',170402,'Manufacturer#3','Je2a8bszf3L','32-122-621-7549','ly quickly ironic requests. even requests whithout t'
-8607.69,'Supplier#000006003','UNITED KINGDOM',76002,'Manufacturer#2','EH9wADcEiuenM0NR08zDwMidw,52Y2RyILEiA','33-416-807-5206','ar, pending accounts. pending depende'
-8569.52,'Supplier#000005936','RUSSIA',5935,'Manufacturer#5','jXaNZ6vwnEWJ2ksLZJpjtgt0bY2a3AU','32-644-251-7916','. regular foxes nag carefully atop the regular, silent deposits. quickly regular packages '
-8564.12,'Supplier#000000033','GERMANY',110032,'Manufacturer#1','gfeKpYw3400L0SDywXA6Ya1Qmq1w6YB9f3R','17-138-897-9374','n sauternes along the regular asymptotes are regularly along the '
-8553.82,'Supplier#000003979','ROMANIA',143978,'Manufacturer#4','BfmVhCAnCMY3jzpjUMy4CNWs9 HzpdQR7INJU','29-124-646-4897','ic requests wake against the blithely unusual accounts. fluffily r'
-8517.23,'Supplier#000009529','RUSSIA',37025,'Manufacturer#5','e44R8o7JAIS9iMcr','32-565-297-8775','ove the even courts. furiously special platelets '
-8517.23,'Supplier#000009529','RUSSIA',59528,'Manufacturer#2','e44R8o7JAIS9iMcr','32-565-297-8775','ove the even courts. furiously special platelets '
-8503.70,'Supplier#000006830','RUSSIA',44325,'Manufacturer#4','BC4WFCYRUZyaIgchU 4S','32-147-878-5069','pades cajole. furious packages among the carefully express excuses boost furiously across th'
-8457.09,'Supplier#000009456','UNITED KINGDOM',19455,'Manufacturer#1','7SBhZs8gP1cJjT0Qf433YBk','33-858-440-4349','cing requests along the furiously unusual deposits promise among the furiously unus'
-8441.40,'Supplier#000003817','FRANCE',141302,'Manufacturer#2','hU3fz3xL78','16-339-356-5115','ely even ideas. ideas wake slyly furiously unusual instructions. pinto beans sleep ag'
-8432.89,'Supplier#000003990','RUSSIA',191470,'Manufacturer#1','wehBBp1RQbfxAYDASS75MsywmsKHRVdkrvNe6m','32-839-509-9301','ep furiously. packages should have to haggle slyly across the deposits. furiously regu'
-8431.40,'Supplier#000002675','ROMANIA',5174,'Manufacturer#1','HJFStOu9R5NGPOegKhgbzBdyvrG2yh8w','29-474-643-1443','ithely express pinto beans. blithely even foxes haggle. furiously regular theodol'
-8407.04,'Supplier#000005406','RUSSIA',162889,'Manufacturer#4','j7 gYF5RW8DC5UrjKC','32-626-152-4621','r the blithely regular packages. slyly ironic theodoli'
-8386.08,'Supplier#000008518','FRANCE',36014,'Manufacturer#3','2jqzqqAVe9crMVGP,n9nTsQXulNLTUYoJjEDcqWV','16-618-780-7481','blithely bold pains are carefully platelets. finally regular pinto beans sleep carefully special'
-8376.52,'Supplier#000005306','UNITED KINGDOM',190267,'Manufacturer#5','9t8Y8 QqSIsoADPt6NLdk,TP5zyRx41oBUlgoGc9','33-632-514-7931','ly final accounts sleep special, regular requests. furiously regular'
-8348.74,'Supplier#000008851','FRANCE',66344,'Manufacturer#4','nWxi7GwEbjhw1','16-796-240-2472',' boldly final deposits. regular, even instructions detect slyly. fluffily unusual pinto bea'
-8338.58,'Supplier#000007269','FRANCE',17268,'Manufacturer#4','ZwhJSwABUoiB04,3','16-267-277-4365','iously final accounts. even pinto beans cajole slyly regular'
-8328.46,'Supplier#000001744','ROMANIA',69237,'Manufacturer#5','oLo3fV64q2,FKHa3p,qHnS7Yzv,ps8','29-330-728-5873','ep carefully-- even, careful packages are slyly along t'
-8307.93,'Supplier#000003142','GERMANY',18139,'Manufacturer#1','dqblvV8dCNAorGlJ','17-595-447-6026','olites wake furiously regular decoys. final requests nod '
-8231.61,'Supplier#000009558','RUSSIA',192000,'Manufacturer#2','mcdgen,yT1iJDHDS5fV','32-762-137-5858',' foxes according to the furi'
-8152.61,'Supplier#000002731','ROMANIA',15227,'Manufacturer#4',' nluXJCuY1tu','29-805-463-2030',' special requests. even, regular warhorses affix among the final gr'
-8109.09,'Supplier#000009186','FRANCE',99185,'Manufacturer#1','wgfosrVPexl9pEXWywaqlBMDYYf','16-668-570-1402','tions haggle slyly about the sil'
-8102.62,'Supplier#000003347','UNITED KINGDOM',18344,'Manufacturer#5','m CtXS2S16i','33-454-274-8532','egrate with the slyly bold instructions. special foxes haggle silently among the'
-8046.07,'Supplier#000008780','FRANCE',191222,'Manufacturer#3','AczzuE0UK9osj ,Lx0Jmh','16-473-215-6395','onic platelets cajole after the regular instructions. permanently bold excuses'
-8042.09,'Supplier#000003245','RUSSIA',135705,'Manufacturer#4','Dh8Ikg39onrbOL4DyTfGw8a9oKUX3d9Y','32-836-132-8872','osits. packages cajole slyly. furiously regular deposits cajole slyly. q'
-8042.09,'Supplier#000003245','RUSSIA',150729,'Manufacturer#1','Dh8Ikg39onrbOL4DyTfGw8a9oKUX3d9Y','32-836-132-8872','osits. packages cajole slyly. furiously regular deposits cajole slyly. q'
-7992.40,'Supplier#000006108','FRANCE',118574,'Manufacturer#1','8tBydnTDwUqfBfFV4l3','16-974-998-8937',' ironic ideas? fluffily even instructions wake. blithel'
-7980.65,'Supplier#000001288','FRANCE',13784,'Manufacturer#4','zE,7HgVPrCn','16-646-464-8247','ully bold courts. escapades nag slyly. furiously fluffy theodo'
-7950.37,'Supplier#000008101','GERMANY',33094,'Manufacturer#5','kkYvL6IuvojJgTNG IKkaXQDYgx8ILohj','17-627-663-8014','arefully unusual requests x-ray above the quickly final deposits. '
-7937.93,'Supplier#000009012','ROMANIA',83995,'Manufacturer#2','iUiTziH,Ek3i4lwSgunXMgrcTzwdb','29-250-925-9690','to the blithely ironic deposits nag sly'
-7914.45,'Supplier#000001013','RUSSIA',125988,'Manufacturer#2','riRcntps4KEDtYScjpMIWeYF6mNnR','32-194-698-3365',' busily bold packages are dolphi'
-7912.91,'Supplier#000004211','GERMANY',159180,'Manufacturer#5','2wQRVovHrm3,v03IKzfTd,1PYsFXQFFOG','17-266-947-7315','ay furiously regular platelets. cou'
-7912.91,'Supplier#000004211','GERMANY',184210,'Manufacturer#4','2wQRVovHrm3,v03IKzfTd,1PYsFXQFFOG','17-266-947-7315','ay furiously regular platelets. cou'
-7894.56,'Supplier#000007981','GERMANY',85472,'Manufacturer#4','NSJ96vMROAbeXP','17-963-404-3760','ic platelets affix after the furiously'
-7887.08,'Supplier#000009792','GERMANY',164759,'Manufacturer#3','Y28ITVeYriT3kIGdV2K8fSZ V2UqT5H1Otz','17-988-938-4296','ckly around the carefully fluffy theodolites. slyly ironic pack'
-7871.50,'Supplier#000007206','RUSSIA',104695,'Manufacturer#1','3w fNCnrVmvJjE95sgWZzvW','32-432-452-7731','ironic requests. furiously final theodolites cajole. final, express packages sleep. quickly reg'
-7852.45,'Supplier#000005864','RUSSIA',8363,'Manufacturer#4','WCNfBPZeSXh3h,c','32-454-883-3821','usly unusual pinto beans. brave ideas sleep carefully quickly ironi'
-7850.66,'Supplier#000001518','UNITED KINGDOM',86501,'Manufacturer#1','ONda3YJiHKJOC','33-730-383-3892','ifts haggle fluffily pending pai'
-7843.52,'Supplier#000006683','FRANCE',11680,'Manufacturer#4','2Z0JGkiv01Y00oCFwUGfviIbhzCdy','16-464-517-8943',' express, final pinto beans x-ray slyly asymptotes. unusual, unusual'
----- TYPES
-DECIMAL, STRING, STRING, BIGINT, STRING, STRING, STRING, STRING
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q20.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q20.test b/testdata/workloads/tpch_nested/queries/tpch-q20.test
deleted file mode 100644
index 87b1dcd..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q20.test
+++ /dev/null
@@ -1,226 +0,0 @@
-====
----- QUERY: TPCH-Q20
-# Q20 - Potential Part Promotion Query
-# Note: Tricky rewrite from the original to avoid mixing
-# correlated and uncorrelated table refs in a subquery.
-select distinct
-  s_name,
-  s_address
-from
-  supplier s,
-  s.s_partsupps ps,
-  region.r_nations n
-where
-  ps_partkey in (
-      select
-        p_partkey
-      from
-        part p
-      where
-        p_name like 'forest%'
-  )
-  and ps_availqty > (
-      select
-        0.5 * sum(l_quantity)
-      from
-        customer.c_orders.o_lineitems l
-      where
-        l_partkey = ps_partkey
-        and l_suppkey = s_suppkey
-        and l_shipdate >= '1994-01-01'
-        and l_shipdate < '1995-01-01'
-  )
-  and s_nationkey = n_nationkey
-  and n_name = 'CANADA'
-order by
-  s_name
----- RESULTS
-'Supplier#000000020','iybAE,RmTymrZVYaFZva2SH,j'
-'Supplier#000000091','YV45D7TkfdQanOOZ7q9QxkyGUapU1oOWU6q3'
-'Supplier#000000205','rF uV8d0JNEk'
-'Supplier#000000285','Br7e1nnt1yxrw6ImgpJ7YdhFDjuBf'
-'Supplier#000000287','7a9SP7qW5Yku5PvSg'
-'Supplier#000000354','w8fOo5W,aS'
-'Supplier#000000378','FfbhyCxWvcPrO8ltp9'
-'Supplier#000000402','i9Sw4DoyMhzhKXCH9By,AYSgmD'
-'Supplier#000000530','0qwCMwobKY OcmLyfRXlagA8ukENJv,'
-'Supplier#000000555','TfB,a5bfl3Ah 3Z 74GqnNs6zKVGM'
-'Supplier#000000640','mvvtlQKsTOsJj5Ihk7,cq'
-'Supplier#000000729','pqck2ppy758TQpZCUAjPvlU55K3QjfL7Bi'
-'Supplier#000000736','l6i2nMwVuovfKnuVgaSGK2rDy65DlAFLegiL7'
-'Supplier#000000761','zlSLelQUj2XrvTTFnv7WAcYZGvvMTx882d4'
-'Supplier#000000887','urEaTejH5POADP2ARrf'
-'Supplier#000000935','ij98czM 2KzWe7dDTOxB8sq0UfCdvrX'
-'Supplier#000000975',',AC e,tBpNwKb5xMUzeohxlRn, hdZJo73gFQF8y'
-'Supplier#000001263','rQWr6nf8ZhB2TAiIDIvo5Io'
-'Supplier#000001367','42YSkFcAXMMcucsqeEefOE4HeCC'
-'Supplier#000001426','bPOCc086oFm8sLtS,fGrH'
-'Supplier#000001446','lch9HMNU1R7a0LIybsUodVknk6'
-'Supplier#000001500','wDmF5xLxtQch9ctVu,'
-'Supplier#000001602','uKNWIeafaM644'
-'Supplier#000001626','UhxNRzUu1dtFmp0'
-'Supplier#000001682','pXTkGxrTQVyH1Rr'
-'Supplier#000001700','7hMlCof1Y5zLFg'
-'Supplier#000001726','TeRY7TtTH24sEword7yAaSkjx8'
-'Supplier#000001730','Rc8e,1Pybn r6zo0VJIEiD0UD vhk'
-'Supplier#000001746','qWsendlOekQG1aW4uq06uQaCm51se8lirv7 hBRd'
-'Supplier#000001806','M934fuZSnLW'
-'Supplier#000001855','MWk6EAeozXb'
-'Supplier#000001931','FpJbMU2h6ZR2eBv8I9NIxF'
-'Supplier#000002022',' dwebGX7Id2pc25YvY33'
-'Supplier#000002036','20ytTtVObjKUUI2WCB0A'
-'Supplier#000002096','kuxseyLtq QPLXxm9ZUrnB6Kkh92JtK5cQzzXNU '
-'Supplier#000002117','MRtkgKolHJ9Wh X9J,urANHKDzvjr'
-'Supplier#000002204','uYmlr46C06udCqanj0KiRsoTQakZsEyssL'
-'Supplier#000002218','nODZw5q4dx kp0K5'
-'Supplier#000002243','nSOEV3JeOU79'
-'Supplier#000002245','hz2qWXWVjOyKhqPYMoEwz6zFkrTaDM'
-'Supplier#000002282','ES21K9dxoW1I1TzWCj7ekdlNwSWnv1Z  6mQ,BKn'
-'Supplier#000002303','nCoWfpB6YOymbgOht7ltfklpkHl'
-'Supplier#000002331','WRh2w5WFvRg7Z0S1AvSvHCL'
-'Supplier#000002373','RzHSxOTQmElCjxIBiVA52Z JB58rJhPRylR'
-'Supplier#000002419','qydBQd14I5l5mVXa4fYY'
-'Supplier#000002571','JZUugz04c iJFLrlGsz9O N,W 1rVHNIReyq'
-'Supplier#000002585','CsPoKpw2QuTY4AV1NkWuttneIa4SN'
-'Supplier#000002629','0Bw,q5Zp8su9XrzoCngZ3cAEXZwZ'
-'Supplier#000002721','HVdFAN2JHMQSpKm'
-'Supplier#000002730','lIFxR4fzm31C6,muzJwl84z'
-'Supplier#000002775','yDclaDaBD4ihH'
-'Supplier#000002799','lwr, 6L3gdfc79PQut,4XO6nQsTJY63cAyYO'
-'Supplier#000002934','m,trBENywSArwg3DhB'
-'Supplier#000002941','Naddba 8YTEKekZyP0'
-'Supplier#000003028','jouzgX0WZjhNMWLaH4fy'
-'Supplier#000003095','HxON3jJhUi3zjt,r mTD'
-'Supplier#000003143','hdolgh608uTkHh7t6qfSqkifKaiFjnCH'
-'Supplier#000003185','hMa535Cbf2mj1Nw4OWOKWVrsK0VdDkJURrdjSIJe'
-'Supplier#000003189','DWdPxt7 RnkZv6VOByR0em'
-'Supplier#000003201','E87yws6I,t0qNs4QW7UzExKiJnJDZWue'
-'Supplier#000003213','pxrRP4irQ1VoyfQ,dTf3'
-'Supplier#000003275','9xO4nyJ2QJcX6vGf'
-'Supplier#000003288','EDdfNt7E5Uc,xLTupoIgYL4yY7ujh,'
-'Supplier#000003314','jnisU8MzqO4iUB3zsPcrysMw3DDUojS4q7LD'
-'Supplier#000003373','iy8VM48ynpc3N2OsBwAvhYakO2us9R1bi'
-'Supplier#000003421','Sh3dt9W5oeofFWovnFhrg,'
-'Supplier#000003422','DJoCEapUeBXoV1iYiCcPFQvzsTv2ZI960'
-'Supplier#000003441','zvFJIzS,oUuShHjpcX'
-'Supplier#000003590','sy79CMLxqb,Cbo'
-'Supplier#000003607','lNqFHQYjwSAkf'
-'Supplier#000003625','qY588W0Yk5iaUy1RXTgNrEKrMAjBYHcKs'
-'Supplier#000003723','jZEp0OEythCLcS OmJSrFtxJ66bMlzSp'
-'Supplier#000003849','KgbZEaRk,6Q3mWvwh6uptrs1KRUHg 0'
-'Supplier#000003894','vvGC rameLOk'
-'Supplier#000003941','Pmb05mQfBMS618O7WKqZJ 9vyv'
-'Supplier#000004059','umEYZSq9RJ2WEzdsv9meU8rmqwzVLRgiZwC'
-'Supplier#000004207','tF64pwiOM4IkWjN3mS,e06WuAjLx'
-'Supplier#000004236','dl,HPtJmGipxYsSqn9wmqkuWjst,mCeJ8O6T'
-'Supplier#000004278','bBddbpBxIVp Di9'
-'Supplier#000004281','1OwPHh Pgiyeus,iZS5eA23JDOipwk'
-'Supplier#000004304','hQCAz59k,HLlp2CKUrcBIL'
-'Supplier#000004346','S3076LEOwo'
-'Supplier#000004406','Ah0ZaLu6VwufPWUz,7kbXgYZhauEaHqGIg'
-'Supplier#000004430','yvSsKNSTL5HLXBET4luOsPNLxKzAMk'
-'Supplier#000004527','p pVXCnxgcklWF6A1o3OHY3qW6'
-'Supplier#000004655','67NqBc4 t3PG3F8aO IsqWNq4kGaPowYL'
-'Supplier#000004851','Rj,x6IgLT7kBL99nqp'
-'Supplier#000004871',',phpt6AWEnUS8t4Avb50rFfdg7O9c6nU8xxv8eC5'
-'Supplier#000004884','42Z1uLye9nsn6aTGBNd dI8 x'
-'Supplier#000004975','GPq5PMKY6Wy'
-'Supplier#000005076','Xl7h9ifgvIHmqxFLgWfHK4Gjav BkP'
-'Supplier#000005195','Woi3b2ZaicPh ZSfu1EfXhE'
-'Supplier#000005256','Onc3t57VAMchm,pmoVLaU8bONni9NsuaM PzMMFz'
-'Supplier#000005257','f9g8SEHB7obMj3QXAjXS2vfYY22'
-'Supplier#000005300','gXG28YqpxU'
-'Supplier#000005323','tMCkdqbDoyNo8vMIkzjBqYexoRAuv,T6 qzcu'
-'Supplier#000005386','Ub6AAfHpWLWP'
-'Supplier#000005426','9Dz2OVT1q sb4BK71ljQ1XjPBYRPvO'
-'Supplier#000005465','63cYZenZBRZ613Q1FaoG0,smnC5zl9'
-'Supplier#000005484','saFdOR qW7AFY,3asPqiiAa11Mo22pCoN0BtPrKo'
-'Supplier#000005505','d2sbjG43KwMPX'
-'Supplier#000005506','On f5ypzoWgB'
-'Supplier#000005631','14TVrjlzo2SJEBYCDgpMwTlvwSqC'
-'Supplier#000005642','ZwKxAv3V40tW E8P7Qwu,zlu,kPsL'
-'Supplier#000005686','f2RBKec2T1NIi7yS M'
-'Supplier#000005730','5rkb0PSews HvxkL8JaD41UpnSF2cg8H1'
-'Supplier#000005736','2dq XTYhtYWSfp'
-'Supplier#000005737','dmEWcS32C3kx,d,B95 OmYn48'
-'Supplier#000005797',',o,OebwRbSDmVl9gN9fpWPCiqB UogvlSR'
-'Supplier#000005875','lK,sYiGzB94hSyHy9xvSZFbVQNCZe2LXZuGbS'
-'Supplier#000005974','REhR5jE,lLusQXvf54SwYySgsSSVFhu'
-'Supplier#000006059','4m0cv8MwJ9yX2vlwI Z'
-'Supplier#000006065','UiI2Cy3W4Tu5sLk LuvXLRy6KihlGv'
-'Supplier#000006093','KJNUg1odUT2wtCS2s6PrH3D6fd'
-'Supplier#000006099','aZilwQKYDTVPoK'
-'Supplier#000006109','rY5gbfh3dKHnylcQUTPGCwnbe'
-'Supplier#000006217','RVN23SYT9jenUeaWGXUd'
-'Supplier#000006297','73VRDOO56GUCyvc40oYJ'
-'Supplier#000006435','xIgE69XszYbnO4Eon7cHHO8y'
-'Supplier#000006463','7 wkdj2EO49iotley2kmIM ADpLSszGV3RNWj'
-'Supplier#000006478','bQYPnj9lpmW3U'
-'Supplier#000006521','b9 2zjHzxR'
-'Supplier#000006642','N,CUclSqRLJcS8zQ'
-'Supplier#000006659','iTLsnvD8D2GzWNUv kRInwRjk5rDeEmfup1'
-'Supplier#000006669','NQ4Yryj624p7K53'
-'Supplier#000006748','rC,2rEn8gKDIS5Q0dJEoiF'
-'Supplier#000006761','n4jhxGMqB5prD1HhpLvwrWStOLlla'
-'Supplier#000006808','HGd2Xo 9nEcHJhZvXjXxWKIpApT'
-'Supplier#000006858','fnlINT885vBBhsWwTGiZ0o22thwGY16h GHJj21'
-'Supplier#000006946','To6Slo0GJTqcIvD'
-'Supplier#000006949','mLxYUJhsGcLtKe ,GFirNu183AvT'
-'Supplier#000007072','2tRyX9M1a 4Rcm57s779F1ANG9jlpK'
-'Supplier#000007098','G3j8g0KC4OcbAu2OVoPHrXQWMCUdjq8wgCHOExu'
-'Supplier#000007132','xonvn0KAQIL3p8kYk HC1FSSDSUSTC'
-'Supplier#000007135','ls DoKV7V5ulfQy9V'
-'Supplier#000007147','Xzb16kC63wmLVYexUEgB0hXFvHkjT5iPpq'
-'Supplier#000007160','TqDGBULB3cTqIT6FKDvm9BS4e4v,zwYiQPb'
-'Supplier#000007169','tEc95D2moN9S84nd55O,dlnW'
-'Supplier#000007278','I2ae3rS7KVF8GVHtB'
-'Supplier#000007365','51xhROLvQMJ05DndtZWt'
-'Supplier#000007398','V8eE6oZ00OFNU,'
-'Supplier#000007402','4UVv58ery1rjmqSR5'
-'Supplier#000007448','yhhpWiJi7EJ6Q5VCaQ'
-'Supplier#000007458','BYuucapYkptZl6fnd2QaDyZmI9gR1Ih16e'
-'Supplier#000007477','9m9j0wfhWzCvVHxkU,PpAxwSH0h'
-'Supplier#000007509','q8,V6LJRoHJjHcOuSG7aLTMg'
-'Supplier#000007561','rMcFg2530VC'
-'Supplier#000007616','R IovIqzDi3,QHnaqZk1xS4hGAgelhP4yj'
-'Supplier#000007760','JsPE18PvcdFTK'
-'Supplier#000007801','69fi,U1r6enUb '
-'Supplier#000007865','5cDGCS,T6N'
-'Supplier#000007885','u3sicchh5ZpyTUpN1cJKNcAoabIWgY'
-'Supplier#000007926','ErzCF80K9Uy'
-'Supplier#000007998','LnASFBfYRFOo9d6d,asBvVq9Lo2P'
-'Supplier#000008090','eonbJZvoDFYBNUinYfp6yERIg'
-'Supplier#000008224','TWxt9f,LVER'
-'Supplier#000008231','IK7eGw Yj90sTdpsP,vcqWxLB'
-'Supplier#000008243','2AyePMkDqmzVzjGTizXthFLo8h EiudCMxOmIIG'
-'Supplier#000008323','75I18sZmASwm POeheRMdj9tmpyeQ,BfCXN5BIAb'
-'Supplier#000008366','h778cEj14BuW9OEKlvPTWq4iwASR6EBBXN7zeS8'
-'Supplier#000008532','Uc29q4,5xVdDOF87UZrxhr4xWS0ihEUXuh'
-'Supplier#000008595','MH0iB73GQ3z UW3O DbCbqmc'
-'Supplier#000008610','SgVgP90vP452sUNTgzL9zKwXHXAzV6tV'
-'Supplier#000008683','gLuGcugfpJSeGQARnaHNCaWnGaqsNnjyl20'
-'Supplier#000008705','aE,trRNdPx,4yinTD9O3DebDIp'
-'Supplier#000008742','HmPlQEzKCPEcTUL14,kKq'
-'Supplier#000008841','I 85Lu1sekbg2xrSIzm0'
-'Supplier#000008872','8D 45GgxJO2OwwYP9S4AaXJKvDwPfLM'
-'Supplier#000008879','rDSA,D9oPM,65NMWEFrmGKAu'
-'Supplier#000008967','2kwEHyMG 7FwozNImAUE6mH0hYtqYculJM'
-'Supplier#000008972','w2vF6 D5YZO3visPXsqVfLADTK'
-'Supplier#000009032','qK,trB6Sdy4Dz1BRUFNy'
-'Supplier#000009043','57OPvKH4qyXIZ7IzYeCaw11a5N1Ki9f1WWmVQ,'
-'Supplier#000009278','RqYTzgxj93CLX 0mcYfCENOefD'
-'Supplier#000009326','XmiC,uy36B9,fb0zhcjaagiXQutg'
-'Supplier#000009430','igRqmneFt '
-'Supplier#000009549','h3RVchUf8MzY46IzbZ0ng09'
-'Supplier#000009601','51m637bO,Rw5DnHWFUvLacRx9'
-'Supplier#000009709','rRnCbHYgDgl9PZYnyWKVYSUW0vKg'
-'Supplier#000009753','wLhVEcRmd7PkJF4FBnGK7Z'
-'Supplier#000009799',' 4wNjXGa4OKWl'
-'Supplier#000009811','E3iuyq7UnZxU7oPZIe2Gu6'
-'Supplier#000009812','APFRMy3lCbgFga53n5t9DxzFPQPgnjrGt32'
-'Supplier#000009846','57sNwJJ3PtBDu,hMPP5QvpcOcSNRXn3PypJJrh'
-'Supplier#000009899','7XdpAHrzr1t,UQFZE'
-'Supplier#000009974','7wJ,J5DKcxSU4Kp1cQLpbcAvB5AsvKT'
----- TYPES
-string, string
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q21.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q21.test b/testdata/workloads/tpch_nested/queries/tpch-q21.test
deleted file mode 100644
index 24c1c41..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q21.test
+++ /dev/null
@@ -1,145 +0,0 @@
-====
----- QUERY: TPCH-Q21
-# Q21 - Suppliers Who Kept Orders Waiting Query
-select
-  s_name,
-  count(*) as numwait
-from
-  supplier s,
-  customer c,
-  c.c_orders o,
-  o.o_lineitems l1,
-  region.r_nations n
-where
-  s_suppkey = l1.l_suppkey
-  and o_orderstatus = 'F'
-  and l1.l_receiptdate > l1.l_commitdate
-  and exists (
-    select
-      *
-    from
-      o.o_lineitems l2
-    where
-      l2.l_suppkey <> l1.l_suppkey
-  )
-  and not exists (
-    select
-      *
-    from
-      o.o_lineitems l3
-    where
-      l3.l_suppkey <> l1.l_suppkey
-      and l3.l_receiptdate > l3.l_commitdate
-  )
-  and s_nationkey = n_nationkey
-  and n_name = 'SAUDI ARABIA'
-group by
-  s_name
-order by
-  numwait desc,
-  s_name
-limit 100
----- RESULTS
-'Supplier#000002829',20
-'Supplier#000005808',18
-'Supplier#000000262',17
-'Supplier#000000496',17
-'Supplier#000002160',17
-'Supplier#000002301',17
-'Supplier#000002540',17
-'Supplier#000003063',17
-'Supplier#000005178',17
-'Supplier#000008331',17
-'Supplier#000002005',16
-'Supplier#000002095',16
-'Supplier#000005799',16
-'Supplier#000005842',16
-'Supplier#000006450',16
-'Supplier#000006939',16
-'Supplier#000009200',16
-'Supplier#000009727',16
-'Supplier#000000486',15
-'Supplier#000000565',15
-'Supplier#000001046',15
-'Supplier#000001047',15
-'Supplier#000001161',15
-'Supplier#000001336',15
-'Supplier#000001435',15
-'Supplier#000003075',15
-'Supplier#000003335',15
-'Supplier#000005649',15
-'Supplier#000006027',15
-'Supplier#000006795',15
-'Supplier#000006800',15
-'Supplier#000006824',15
-'Supplier#000007131',15
-'Supplier#000007382',15
-'Supplier#000008913',15
-'Supplier#000009787',15
-'Supplier#000000633',14
-'Supplier#000001960',14
-'Supplier#000002323',14
-'Supplier#000002490',14
-'Supplier#000002993',14
-'Supplier#000003101',14
-'Supplier#000004489',14
-'Supplier#000005435',14
-'Supplier#000005583',14
-'Supplier#000005774',14
-'Supplier#000007579',14
-'Supplier#000008180',14
-'Supplier#000008695',14
-'Supplier#000009224',14
-'Supplier#000000357',13
-'Supplier#000000436',13
-'Supplier#000000610',13
-'Supplier#000000788',13
-'Supplier#000000889',13
-'Supplier#000001062',13
-'Supplier#000001498',13
-'Supplier#000002056',13
-'Supplier#000002312',13
-'Supplier#000002344',13
-'Supplier#000002596',13
-'Supplier#000002615',13
-'Supplier#000002978',13
-'Supplier#000003048',13
-'Supplier#000003234',13
-'Supplier#000003727',13
-'Supplier#000003806',13
-'Supplier#000004472',13
-'Supplier#000005236',13
-'Supplier#000005906',13
-'Supplier#000006241',13
-'Supplier#000006326',13
-'Supplier#000006384',13
-'Supplier#000006394',13
-'Supplier#000006624',13
-'Supplier#000006629',13
-'Supplier#000006682',13
-'Supplier#000006737',13
-'Supplier#000006825',13
-'Supplier#000007021',13
-'Supplier#000007417',13
-'Supplier#000007497',13
-'Supplier#000007602',13
-'Supplier#000008134',13
-'Supplier#000008234',13
-'Supplier#000009435',13
-'Supplier#000009436',13
-'Supplier#000009564',13
-'Supplier#000009896',13
-'Supplier#000000379',12
-'Supplier#000000673',12
-'Supplier#000000762',12
-'Supplier#000000811',12
-'Supplier#000000821',12
-'Supplier#000001337',12
-'Supplier#000001916',12
-'Supplier#000001925',12
-'Supplier#000002039',12
-'Supplier#000002357',12
-'Supplier#000002483',12
----- TYPES
-string, bigint
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q22.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q22.test b/testdata/workloads/tpch_nested/queries/tpch-q22.test
deleted file mode 100644
index 0312be3..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q22.test
+++ /dev/null
@@ -1,46 +0,0 @@
-====
----- QUERY: TPCH-Q22
-# Q22 - Global Sales Opportunity Query
-select
-  cntrycode,
-  count(*) as numcust,
-  sum(c_acctbal) as totacctbal
-from (
-  select
-    substr(c_phone, 1, 2) as cntrycode,
-    c_acctbal
-  from
-    customer c
-  where
-    substr(c_phone, 1, 2) in ('13', '31', '23', '29', '30', '18', '17')
-    and c_acctbal > (
-      select
-        avg(c_acctbal)
-      from
-        customer c
-      where
-        c_acctbal > 0.00
-        and substr(c_phone, 1, 2) in ('13', '31', '23', '29', '30', '18', '17')
-      )
-    and not exists (
-      select
-        o_orderkey
-      from
-        c.c_orders
-    )
-  ) as custsale
-group by
-  cntrycode
-order by
-  cntrycode
----- RESULTS
-'13',888,6737713.99
-'17',861,6460573.72
-'18',964,7236687.40
-'23',892,6701457.95
-'29',948,7158866.63
-'30',909,6808436.13
-'31',922,6806670.18
----- TYPES
-string, bigint, decimal
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q3.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q3.test b/testdata/workloads/tpch_nested/queries/tpch-q3.test
deleted file mode 100644
index 0c5b4e8..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q3.test
+++ /dev/null
@@ -1,38 +0,0 @@
-====
----- QUERY: TPCH-Q3
-# Q3 - Shipping Priority Query
-select
-  o_orderkey,
-  sum(l_extendedprice * (1 - l_discount)) as revenue,
-  o_orderdate,
-  o_shippriority
-from
-  customer c,
-  c.c_orders o,
-  o.o_lineitems l
-where
-  c_mktsegment = 'BUILDING'
-  and o_orderdate < '1995-03-15'
-  and l_shipdate > '1995-03-15'
-group by
-  o_orderkey,
-  o_orderdate,
-  o_shippriority
-order by
-  revenue desc,
-  o_orderdate
-limit 10
----- RESULTS
-2456423,406181.0111,'1995-03-05',0
-3459808,405838.6989,'1995-03-04',0
-492164,390324.0610,'1995-02-19',0
-1188320,384537.9359,'1995-03-09',0
-2435712,378673.0558,'1995-02-26',0
-4878020,378376.7952,'1995-03-12',0
-5521732,375153.9215,'1995-03-13',0
-2628192,373133.3094,'1995-02-22',0
-993600,371407.4595,'1995-03-05',0
-2300070,367371.1452,'1995-03-13',0
----- TYPES
-BIGINT, DECIMAL, STRING, INT
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q4.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q4.test b/testdata/workloads/tpch_nested/queries/tpch-q4.test
deleted file mode 100644
index 4b9d960..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q4.test
+++ /dev/null
@@ -1,33 +0,0 @@
-====
----- QUERY: TPCH-Q4
-# Q4 - Order Priority Checking Query
-select
-  o_orderpriority,
-  count(*) as order_count
-from
-  customer c,
-  c.c_orders o
-where
-  o_orderdate >= '1993-07-01'
-  and o_orderdate < '1993-10-01'
-  and exists (
-    select
-      *
-    from
-      o.o_lineitems
-    where
-      l_commitdate < l_receiptdate
-    )
-group by
-  o_orderpriority
-order by
-  o_orderpriority
----- RESULTS
-'1-URGENT',10594
-'2-HIGH',10476
-'3-MEDIUM',10410
-'4-NOT SPECIFIED',10556
-'5-LOW',10487
----- TYPES
-string, bigint
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q5.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q5.test b/testdata/workloads/tpch_nested/queries/tpch-q5.test
deleted file mode 100644
index fa66e09..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q5.test
+++ /dev/null
@@ -1,33 +0,0 @@
-====
----- QUERY: TPCH-Q5
-# Q5 - Local Supplier Volume Query
-select
-  n_name,
-  sum(l_extendedprice * (1 - l_discount)) as revenue
-from
-  customer c,
-  c.c_orders o,
-  o.o_lineitems l,
-  supplier s,
-  region r,
-  r.r_nations n
-where
-  l_suppkey = s_suppkey
-  and c_nationkey = s_nationkey
-  and s_nationkey = n_nationkey
-  and r_name = 'ASIA'
-  and o_orderdate >= '1994-01-01'
-  and o_orderdate < '1995-01-01'
-group by
-  n_name
-order by
-  revenue desc
----- RESULTS
-'INDONESIA',55502041.1697
-'VIETNAM',55295086.9967
-'CHINA',53724494.2566
-'INDIA',52035512.0002
-'JAPAN',45410175.6954
----- TYPES
-string, decimal
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q6.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q6.test b/testdata/workloads/tpch_nested/queries/tpch-q6.test
deleted file mode 100644
index efb43e8..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q6.test
+++ /dev/null
@@ -1,17 +0,0 @@
-====
----- QUERY: TPCH-Q6
-# Q6 - Forecasting Revenue Change Query
-select
-  sum(l_extendedprice * l_discount) as revenue
-from
-  customer.c_orders.o_lineitems
-where
-  l_shipdate >= '1994-01-01'
-  and l_shipdate < '1995-01-01'
-  and l_discount between 0.05 and 0.07
-  and l_quantity < 24
----- RESULTS
-123141078.2283
----- TYPES
-decimal
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q7.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q7.test b/testdata/workloads/tpch_nested/queries/tpch-q7.test
deleted file mode 100644
index 0c5878d..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q7.test
+++ /dev/null
@@ -1,47 +0,0 @@
-====
----- QUERY: TPCH-Q7
-# Q7 - Volume Shipping Query
-select
-  supp_nation,
-  cust_nation,
-  l_year,
-  sum(volume) as revenue
-from (
-  select
-    n1.n_name as supp_nation,
-    n2.n_name as cust_nation,
-    year(l_shipdate) as l_year,
-    l_extendedprice * (1 - l_discount) as volume
-  from
-    customer c,
-    c.c_orders o,
-    o.o_lineitems l,
-    supplier s,
-    region.r_nations n1,
-    region.r_nations n2
-  where
-    s_suppkey = l_suppkey
-    and s_nationkey = n1.n_nationkey
-    and c_nationkey = n2.n_nationkey
-    and (
-      (n1.n_name = 'FRANCE' and n2.n_name = 'GERMANY')
-      or (n1.n_name = 'GERMANY' and n2.n_name = 'FRANCE')
-    )
-    and l_shipdate between '1995-01-01' and '1996-12-31'
-  ) as shipping
-group by
-  supp_nation,
-  cust_nation,
-  l_year
-order by
-  supp_nation,
-  cust_nation,
-  l_year
----- RESULTS
-'FRANCE','GERMANY',1995,54639732.7336
-'FRANCE','GERMANY',1996,54633083.3076
-'GERMANY','FRANCE',1995,52531746.6697
-'GERMANY','FRANCE',1996,52520549.0224
----- TYPES
-STRING, STRING, INT, DECIMAL
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q8.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q8.test b/testdata/workloads/tpch_nested/queries/tpch-q8.test
deleted file mode 100644
index 94d91a6..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q8.test
+++ /dev/null
@@ -1,43 +0,0 @@
-====
----- QUERY: TPCH-Q8
-# Q8 - National Market Share Query
-select
-  o_year,
-  sum(case
-    when nation = 'BRAZIL'
-    then volume
-    else 0
-  end) / sum(volume) as mkt_share
-from (
-  select
-    year(o_orderdate) as o_year,
-    l_extendedprice * (1 - l_discount) as volume,
-    n2.n_name as nation
-  from
-    customer c,
-    c.c_orders o,
-    o.o_lineitems l,
-    supplier s,
-    part p,
-    region r,
-    r.r_nations n1,
-    region.r_nations n2
-  where
-    p_partkey = l_partkey
-    and s_suppkey = l_suppkey
-    and c_nationkey = n1.n_nationkey
-    and r_name = 'AMERICA'
-    and s_nationkey = n2.n_nationkey
-    and o_orderdate between '1995-01-01' and '1996-12-31'
-    and p_type = 'ECONOMY ANODIZED STEEL'
-  ) as all_nations
-group by
-  o_year
-order by
-  o_year
----- RESULTS
-1995,0.0344
-1996,0.0414
----- TYPES
-int, decimal
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch-q9.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch-q9.test b/testdata/workloads/tpch_nested/queries/tpch-q9.test
deleted file mode 100644
index 0290433..0000000
--- a/testdata/workloads/tpch_nested/queries/tpch-q9.test
+++ /dev/null
@@ -1,211 +0,0 @@
-====
----- QUERY: TPCH-Q9
-# Q9 - Product Type Measure Query
-select
-  nation,
-  o_year,
-  sum(amount) as sum_profit
-from(
-  select
-    n_name as nation,
-    year(o_orderdate) as o_year,
-    l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity as amount
-  from
-    customer.c_orders o,
-    o.o_lineitems l,
-    supplier s,
-    s.s_partsupps ps,
-    part p,
-    region.r_nations n
-  where
-    s_suppkey = l_suppkey
-    and ps_partkey = l_partkey
-    and p_partkey = l_partkey
-    and s_nationkey = n_nationkey
-    and p_name like '%green%'
-  ) as profit
-group by
-  nation,
-  o_year
-order by
-  nation,
-  o_year desc
----- RESULTS
-'ALGERIA',1998,27136900.1803
-'ALGERIA',1997,48611833.4962
-'ALGERIA',1996,48285482.6782
-'ALGERIA',1995,44402273.5999
-'ALGERIA',1994,48694008.0668
-'ALGERIA',1993,46044207.7838
-'ALGERIA',1992,45636849.4881
-'ARGENTINA',1998,28341663.7848
-'ARGENTINA',1997,47143964.1176
-'ARGENTINA',1996,45255278.6021
-'ARGENTINA',1995,45631769.2054
-'ARGENTINA',1994,48268856.3547
-'ARGENTINA',1993,48605593.6162
-'ARGENTINA',1992,46654240.7487
-'BRAZIL',1998,26527736.3960
-'BRAZIL',1997,45640660.7677
-'BRAZIL',1996,45090647.1630
-'BRAZIL',1995,44015888.5132
-'BRAZIL',1994,44854218.8932
-'BRAZIL',1993,45766603.7379
-'BRAZIL',1992,45280216.8027
-'CANADA',1998,26828985.3944
-'CANADA',1997,44849954.3186
-'CANADA',1996,46307936.1108
-'CANADA',1995,47311993.0441
-'CANADA',1994,46691491.9596
-'CANADA',1993,46634791.1121
-'CANADA',1992,45873849.6882
-'CHINA',1998,27510180.1657
-'CHINA',1997,46123865.4097
-'CHINA',1996,49532807.0601
-'CHINA',1995,46734651.4838
-'CHINA',1994,46397896.6097
-'CHINA',1993,49634673.9463
-'CHINA',1992,46949457.6426
-'EGYPT',1998,28401491.7968
-'EGYPT',1997,47674857.6783
-'EGYPT',1996,47745727.5450
-'EGYPT',1995,45897160.6783
-'EGYPT',1994,47194895.2280
-'EGYPT',1993,49133627.6471
-'EGYPT',1992,47000574.5027
-'ETHIOPIA',1998,25135046.1377
-'ETHIOPIA',1997,43010596.0838
-'ETHIOPIA',1996,43636287.1922
-'ETHIOPIA',1995,43575757.3343
-'ETHIOPIA',1994,41597208.5283
-'ETHIOPIA',1993,42622804.1616
-'ETHIOPIA',1992,44385735.6813
-'FRANCE',1998,26210392.2804
-'FRANCE',1997,42392969.4731
-'FRANCE',1996,43306317.9749
-'FRANCE',1995,46377408.4328
-'FRANCE',1994,43447352.9922
-'FRANCE',1993,43729961.0639
-'FRANCE',1992,44052308.4290
-'GERMANY',1998,25991257.1071
-'GERMANY',1997,43968355.8079
-'GERMANY',1996,45882074.8049
-'GERMANY',1995,43314338.3077
-'GERMANY',1994,44616995.4369
-'GERMANY',1993,45126645.9113
-'GERMANY',1992,44361141.2107
-'INDIA',1998,29626417.2379
-'INDIA',1997,51386111.3448
-'INDIA',1996,47571018.5122
-'INDIA',1995,49344062.2829
-'INDIA',1994,50106952.4261
-'INDIA',1993,48112766.6987
-'INDIA',1992,47914303.1234
-'INDONESIA',1998,27734909.6763
-'INDONESIA',1997,44593812.9863
-'INDONESIA',1996,44746729.8078
-'INDONESIA',1995,45593622.6993
-'INDONESIA',1994,45988483.8772
-'INDONESIA',1993,46147963.7895
-'INDONESIA',1992,45185777.0688
-'IRAN',1998,26661608.9301
-'IRAN',1997,45019114.1696
-'IRAN',1996,45891397.0992
-'IRAN',1995,44414285.2348
-'IRAN',1994,43696360.4795
-'IRAN',1993,45362775.8094
-'IRAN',1992,43052338.4143
-'IRAQ',1998,31188498.1914
-'IRAQ',1997,48585307.5222
-'IRAQ',1996,50036593.8404
-'IRAQ',1995,48774801.7275
-'IRAQ',1994,48795847.2310
-'IRAQ',1993,47435691.5082
-'IRAQ',1992,47562355.6571
-'JAPAN',1998,24694102.1720
-'JAPAN',1997,42377052.3454
-'JAPAN',1996,40267778.9094
-'JAPAN',1995,40925317.4650
-'JAPAN',1994,41159518.3058
-'JAPAN',1993,39589074.2771
-'JAPAN',1992,39113493.9052
-'JORDAN',1998,23489867.7893
-'JORDAN',1997,41615962.6619
-'JORDAN',1996,41860855.4684
-'JORDAN',1995,39931672.0908
-'JORDAN',1994,40707555.4638
-'JORDAN',1993,39060405.4658
-'JORDAN',1992,41657604.2684
-'KENYA',1998,25566337.4303
-'KENYA',1997,43108847.9024
-'KENYA',1996,43482953.5430
-'KENYA',1995,42517988.9814
-'KENYA',1994,43612479.4523
-'KENYA',1993,42724038.7571
-'KENYA',1992,43217106.2068
-'MOROCCO',1998,24915496.8756
-'MOROCCO',1997,42698382.8550
-'MOROCCO',1996,42986113.5049
-'MOROCCO',1995,42316089.1593
-'MOROCCO',1994,43458604.6029
-'MOROCCO',1993,42672288.0699
-'MOROCCO',1992,42800781.6415
-'MOZAMBIQUE',1998,28279876.0301
-'MOZAMBIQUE',1997,51159216.2298
-'MOZAMBIQUE',1996,48072525.0645
-'MOZAMBIQUE',1995,48905200.6007
-'MOZAMBIQUE',1994,46092076.2805
-'MOZAMBIQUE',1993,48555926.2669
-'MOZAMBIQUE',1992,47809075.1192
-'PERU',1998,26713966.2678
-'PERU',1997,48324008.6011
-'PERU',1996,50310008.8629
-'PERU',1995,49647080.9629
-'PERU',1994,46420910.2773
-'PERU',1993,51536906.2487
-'PERU',1992,47711665.3137
-'ROMANIA',1998,27271993.1010
-'ROMANIA',1997,45063059.1953
-'ROMANIA',1996,47492335.0323
-'ROMANIA',1995,45710636.2909
-'ROMANIA',1994,46088041.1066
-'ROMANIA',1993,47515092.5613
-'ROMANIA',1992,44111439.8044
-'RUSSIA',1998,27935323.7271
-'RUSSIA',1997,48222347.2924
-'RUSSIA',1996,47553559.4932
-'RUSSIA',1995,46755990.0976
-'RUSSIA',1994,48000515.6191
-'RUSSIA',1993,48569624.5082
-'RUSSIA',1992,47672831.5329
-'SAUDI ARABIA',1998,27113516.8424
-'SAUDI ARABIA',1997,46690468.9649
-'SAUDI ARABIA',1996,47775782.6670
-'SAUDI ARABIA',1995,46657107.8287
-'SAUDI ARABIA',1994,48181672.8100
-'SAUDI ARABIA',1993,45692556.4438
-'SAUDI ARABIA',1992,48924913.2717
-'UNITED KINGDOM',1998,26366682.8786
-'UNITED KINGDOM',1997,44518130.1851
-'UNITED KINGDOM',1996,45539729.6166
-'UNITED KINGDOM',1995,46845879.3390
-'UNITED KINGDOM',1994,43081609.5737
-'UNITED KINGDOM',1993,44770146.7555
-'UNITED KINGDOM',1992,44123402.5484
-'UNITED STATES',1998,27826593.6825
-'UNITED STATES',1997,46638572.3648
-'UNITED STATES',1996,46688280.5474
-'UNITED STATES',1995,48951591.6156
-'UNITED STATES',1994,45099092.0598
-'UNITED STATES',1993,46181600.5278
-'UNITED STATES',1992,46168214.0901
-'VIETNAM',1998,27281931.0011
-'VIETNAM',1997,48735914.1796
-'VIETNAM',1996,47824595.9040
-'VIETNAM',1995,48235135.8016
-'VIETNAM',1994,47729256.3324
-'VIETNAM',1993,45352676.8672
-'VIETNAM',1992,47846355.6485
----- TYPES
-STRING, INT, DECIMAL
-====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q1.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q1.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q1.test
new file mode 100644
index 0000000..e0ff4e9
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q1.test
@@ -0,0 +1,32 @@
+====
+---- QUERY: TPCH-Q1
+# Q1 - Pricing Summary Report Query
+select
+  l_returnflag,
+  l_linestatus,
+  sum(l_quantity) as sum_qty,
+  sum(l_extendedprice) as sum_base_price,
+  sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
+  sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
+  avg(l_quantity) as avg_qty,
+  avg(l_extendedprice) as avg_price,
+  avg(l_discount) as avg_disc,
+  count(*) as count_order
+from
+  customer.c_orders.o_lineitems
+where
+  l_shipdate <= '1998-09-02'
+group by
+  l_returnflag,
+  l_linestatus
+order by
+  l_returnflag,
+  l_linestatus
+---- RESULTS
+'A','F',37734107.00,56586554400.73,53758257134.8700,55909065222.827692,25.52,38273.12,0.04,1478493
+'N','F',991417.00,1487504710.38,1413082168.0541,1469649223.194375,25.51,38284.46,0.05,38854
+'N','O',74476040.00,111701729697.74,106118230307.6056,110367043872.497010,25.50,38249.11,0.04,2920374
+'R','F',37719753.00,56568041380.90,53741292684.6040,55889619119.831932,25.50,38250.85,0.05,1478870
+---- TYPES
+string, string, decimal, decimal, decimal, decimal, decimal, decimal, decimal, bigint
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q10.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q10.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q10.test
new file mode 100644
index 0000000..7fb2170
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q10.test
@@ -0,0 +1,58 @@
+====
+---- QUERY: TPCH-Q10
+# Q10 - Returned Item Reporting Query
+# Converted select from multiple tables to joins
+select
+  c_custkey,
+  c_name,
+  sum(l_extendedprice * (1 - l_discount)) as revenue,
+  c_acctbal,
+  n_name,
+  c_address,
+  c_phone,
+  c_comment
+from
+  customer c,
+  c.c_orders o,
+  o.o_lineitems l,
+  region.r_nations n
+where
+  o_orderdate >= '1993-10-01'
+  and o_orderdate < '1994-01-01'
+  and l_returnflag = 'R'
+  and c_nationkey = n_nationkey
+group by
+  c_custkey,
+  c_name,
+  c_acctbal,
+  c_phone,
+  n_name,
+  c_address,
+  c_comment
+order by
+  revenue desc
+limit 20
+---- RESULTS
+57040,'Customer#000057040',734235.2455,632.87,'JAPAN','Eioyzjf4pp','22-895-641-3466','sits. slyly regular requests sleep alongside of the regular inst'
+143347,'Customer#000143347',721002.6948,2557.47,'EGYPT','1aReFYv,Kw4','14-742-935-3718','ggle carefully enticing requests. final deposits use bold, bold pinto beans. ironic, idle re'
+60838,'Customer#000060838',679127.3077,2454.77,'BRAZIL','64EaJ5vMAHWJlBOxJklpNc2RJiWE','12-913-494-9813',' need to boost against the slyly regular account'
+101998,'Customer#000101998',637029.5667,3790.89,'UNITED KINGDOM','01c9CILnNtfOQYmZj','33-593-865-6378','ress foxes wake slyly after the bold excuses. ironic platelets are furiously carefully bold theodolites'
+125341,'Customer#000125341',633508.0860,4983.51,'GERMANY','S29ODD6bceU8QSuuEJznkNaK','17-582-695-5962','arefully even depths. blithely even excuses sleep furiously. foxes use except the dependencies. ca'
+25501,'Customer#000025501',620269.7849,7725.04,'ETHIOPIA','  W556MXuoiaYCCZamJI,Rn0B4ACUGdkQ8DZ','15-874-808-6793','he pending instructions wake carefully at the pinto beans. regular, final instructions along the slyly fina'
+115831,'Customer#000115831',596423.8672,5098.10,'FRANCE','rFeBbEEyk dl ne7zV5fDrmiq1oK09wV7pxqCgIc','16-715-386-3788','l somas sleep. furiously final deposits wake blithely regular pinto b'
+84223,'Customer#000084223',594998.0239,528.65,'UNITED KINGDOM','nAVZCs6BaWap rrM27N 2qBnzc5WBauxbA','33-442-824-8191',' slyly final deposits haggle regular, pending dependencies. pending escapades wake '
+54289,'Customer#000054289',585603.3918,5583.02,'IRAN','vXCxoCsU0Bad5JQI ,oobkZ','20-834-292-4707','ely special foxes are quickly finally ironic p'
+39922,'Customer#000039922',584878.1134,7321.11,'GERMANY','Zgy4s50l2GKN4pLDPBU8m342gIw6R','17-147-757-8036','y final requests. furiously final foxes cajole blithely special platelets. f'
+6226,'Customer#000006226',576783.7606,2230.09,'UNITED KINGDOM','8gPu8,NPGkfyQQ0hcIYUGPIBWc,ybP5g,','33-657-701-3391','ending platelets along the express deposits cajole carefully final '
+922,'Customer#000000922',576767.5333,3869.25,'GERMANY','Az9RFaut7NkPnc5zSD2PwHgVwr4jRzq','17-945-916-9648','luffily fluffy deposits. packages c'
+147946,'Customer#000147946',576455.1320,2030.13,'ALGERIA','iANyZHjqhyy7Ajah0pTrYyhJ','10-886-956-3143','ithely ironic deposits haggle blithely ironic requests. quickly regu'
+115640,'Customer#000115640',569341.1933,6436.10,'ARGENTINA','Vtgfia9qI 7EpHgecU1X','11-411-543-4901','ost slyly along the patterns; pinto be'
+73606,'Customer#000073606',568656.8578,1785.67,'JAPAN','xuR0Tro5yChDfOCrjkd2ol','22-437-653-6966','he furiously regular ideas. slowly'
+110246,'Customer#000110246',566842.9815,7763.35,'VIETNAM','7KzflgX MDOq7sOkI','31-943-426-9837','egular deposits serve blithely above the fl'
+142549,'Customer#000142549',563537.2368,5085.99,'INDONESIA','ChqEoK43OysjdHbtKCp6dKqjNyvvi9','19-955-562-2398','sleep pending courts. ironic deposits against the carefully unusual platelets cajole carefully express accounts.'
+146149,'Customer#000146149',557254.9865,1791.55,'ROMANIA','s87fvzFQpU','29-744-164-6487',' of the slyly silent accounts. quickly final accounts across the '
+52528,'Customer#000052528',556397.3509,551.79,'ARGENTINA','NFztyTOR10UOJ','11-208-192-3205',' deposits hinder. blithely pending asymptotes breach slyly regular re'
+23431,'Customer#000023431',554269.5360,3381.86,'ROMANIA','HgiV0phqhaIa9aydNoIlb','29-915-458-2654','nusual, even instructions: furiously stealthy n'
+---- TYPES
+bigint, string, decimal, decimal, string, string, string, string
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q11.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q11.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q11.test
new file mode 100644
index 0000000..780b206
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q11.test
@@ -0,0 +1,1086 @@
+====
+---- QUERY: TPCH-Q11
+# Q11 - Important Stock Identification
+# Modifications: query was rewritten to not have a subquery in the having clause
+select
+  *
+from (
+  select
+    ps_partkey,
+    sum(ps_supplycost * ps_availqty) as value
+  from
+    supplier s,
+    s.s_partsupps ps,
+    region.r_nations n
+  where
+    s_nationkey = n_nationkey
+    and n_name = 'GERMANY'
+  group by
+    ps_partkey
+) as inner_query
+where
+  value > (
+    select
+      sum(ps_supplycost * ps_availqty) * 0.0001
+    from
+      supplier s,
+      s.s_partsupps ps,
+      region.r_nations n
+    where
+      s_nationkey = n_nationkey
+      and n_name = 'GERMANY'
+  )
+order by
+  value desc
+---- RESULTS
+129760,17538456.86
+166726,16503353.92
+191287,16474801.97
+161758,16101755.54
+34452,15983844.72
+139035,15907078.34
+9403,15451755.62
+154358,15212937.88
+38823,15064802.86
+85606,15053957.15
+33354,14408297.40
+154747,14407580.68
+82865,14235489.78
+76094,14094247.04
+222,13937777.74
+121271,13908336.00
+55221,13716120.47
+22819,13666434.28
+76281,13646853.68
+85298,13581154.93
+85158,13554904.00
+139684,13535538.72
+31034,13498025.25
+87305,13482847.04
+10181,13445148.75
+62323,13411824.30
+26489,13377256.38
+96493,13339057.83
+56548,13329014.97
+55576,13306843.35
+159751,13306614.48
+92406,13287414.50
+182636,13223726.74
+199969,13135288.21
+62865,13001926.94
+7284,12945298.19
+197867,12944510.52
+11562,12931575.51
+75165,12916918.12
+97175,12911283.50
+140840,12896562.23
+65241,12890600.46
+166120,12876927.22
+9035,12863828.70
+144616,12853549.30
+176723,12832309.74
+170884,12792136.58
+29790,12723300.33
+95213,12555483.73
+183873,12550533.05
+171235,12476538.30
+21533,12437821.32
+17290,12432159.50
+156397,12260623.50
+122611,12222812.98
+139155,12220319.25
+146316,12215800.61
+171381,12199734.52
+198633,12078226.95
+167417,12046637.62
+59512,12043468.76
+31688,12034893.64
+159586,12001505.84
+8993,11963814.30
+120302,11857707.55
+43536,11779340.52
+9552,11776909.16
+86223,11772205.08
+53776,11758669.65
+131285,11616953.74
+91628,11611114.83
+169644,11567959.72
+182299,11567462.05
+33107,11453818.76
+104184,11436657.44
+67027,11419127.14
+176869,11371451.71
+30885,11369674.79
+54420,11345076.88
+72240,11313951.05
+178708,11294635.17
+81298,11273686.13
+158324,11243442.72
+117095,11242535.24
+176793,11237733.38
+86091,11177793.79
+116033,11145434.36
+129058,11119112.20
+193714,11104706.39
+117195,11077217.96
+49851,11043701.78
+19791,11030662.62
+75800,11012401.62
+161562,10996371.69
+10119,10980015.75
+39185,10970042.56
+47223,10950022.13
+175594,10942923.05
+111295,10893675.61
+155446,10852764.57
+156391,10839810.38
+40884,10837234.19
+141288,10837130.21
+152388,10830977.82
+33449,10830858.72
+149035,10826130.02
+162620,10814275.68
+118324,10791788.10
+38932,10777541.75
+121294,10764225.22
+48721,10762582.49
+63342,10740132.60
+5614,10724668.80
+62266,10711143.10
+100202,10696675.55
+197741,10688560.72
+169178,10648522.80
+5271,10639392.65
+34499,10584177.10
+71108,10569117.56
+137132,10539880.47
+78451,10524873.24
+150827,10503810.48
+107237,10488030.84
+101727,10473558.10
+58708,10466280.44
+89768,10465477.22
+146493,10444291.58
+55424,10444006.48
+16560,10425574.74
+133114,10415097.90
+195810,10413625.20
+76673,10391977.18
+97305,10390890.57
+134210,10387210.02
+188536,10386529.92
+122255,10335760.32
+2682,10312966.10
+43814,10303086.61
+34767,10290405.18
+165584,10273705.89
+2231,10270415.55
+111259,10263256.56
+195578,10239795.82
+21093,10217531.30
+29856,10216932.54
+133686,10213345.76
+87745,10185509.40
+135153,10179379.70
+11773,10167410.84
+76316,10165151.70
+123076,10161225.78
+91894,10130462.19
+39741,10128387.52
+111753,10119780.98
+142729,10104748.89
+116775,10097750.42
+102589,10034784.36
+186268,10012181.57
+44545,10000286.48
+23307,9966577.50
+124281,9930018.90
+69604,9925730.64
+21971,9908982.03
+58148,9895894.40
+16532,9886529.90
+159180,9883744.43
+74733,9877582.88
+35173,9858275.92
+7116,9856881.02
+124620,9838589.14
+122108,9829949.35
+67200,9828690.69
+164775,9821424.44
+9039,9816447.72
+14912,9803102.20
+190906,9791315.70
+130398,9781674.27
+119310,9776927.21
+10132,9770930.78
+107211,9757586.25
+113958,9757065.50
+37009,9748362.69
+66746,9743528.76
+134486,9731922.00
+15945,9731096.45
+55307,9717745.80
+56362,9714922.83
+57726,9711792.10
+57256,9708621.00
+112292,9701653.08
+87514,9699492.53
+174206,9680562.02
+72865,9679043.34
+114357,9671017.44
+112807,9665019.21
+115203,9661018.73
+177454,9658906.35
+161275,9634313.71
+61893,9617095.44
+122219,9604888.20
+183427,9601362.58
+59158,9599705.96
+61931,9584918.98
+5532,9579964.14
+20158,9576714.38
+167199,9557413.08
+38869,9550279.53
+86949,9541943.70
+198544,9538613.92
+193762,9538238.94
+108807,9536247.16
+168324,9535647.99
+115588,9532195.04
+141372,9529702.14
+175120,9526068.66
+163851,9522808.83
+160954,9520359.45
+117757,9517882.80
+52594,9508325.76
+60960,9498843.06
+70272,9495775.62
+44050,9495515.36
+152213,9494756.96
+121203,9492601.30
+70114,9491012.30
+167588,9484741.11
+136455,9476241.78
+4357,9464355.64
+6786,9463632.57
+61345,9455336.70
+160826,9446754.84
+71275,9440138.40
+77746,9439118.35
+91289,9437472.00
+56723,9435102.16
+86647,9434604.18
+131234,9432120.00
+198129,9427651.36
+165530,9426193.68
+69233,9425053.92
+6243,9423304.66
+90110,9420422.70
+191980,9419368.36
+38461,9419316.07
+167873,9419024.49
+159373,9416950.15
+128707,9413428.50
+45267,9410863.78
+48460,9409793.93
+197672,9406887.68
+60884,9403442.40
+15209,9403245.31
+138049,9401262.10
+199286,9391770.70
+19629,9391236.40
+134019,9390615.15
+169475,9387639.58
+165918,9379510.44
+135602,9374251.54
+162323,9367566.51
+96277,9360850.68
+98336,9359671.29
+119781,9356395.73
+34440,9355365.00
+57362,9355180.10
+167236,9352973.84
+38463,9347530.94
+86749,9346826.44
+170007,9345699.90
+193087,9343744.00
+150383,9332576.75
+60932,9329582.02
+128420,9328206.35
+162145,9327722.88
+55686,9320304.40
+163080,9304916.96
+160583,9303515.92
+118153,9298606.56
+152634,9282184.57
+84731,9276586.92
+119989,9273814.20
+114584,9269698.65
+131817,9268570.08
+29068,9256583.88
+44116,9255922.00
+115818,9253311.91
+103388,9239218.08
+186118,9236209.12
+155809,9235410.84
+147003,9234847.99
+27769,9232511.64
+112779,9231927.36
+124851,9228982.68
+158488,9227216.40
+83328,9224792.20
+136797,9222927.09
+141730,9216370.68
+87304,9215695.50
+156004,9215557.90
+140740,9215329.20
+100648,9212185.08
+174774,9211718.00
+37644,9211578.60
+48807,9209496.24
+95940,9207948.40
+141586,9206699.22
+147248,9205654.95
+61372,9205228.76
+52970,9204415.95
+26430,9203710.51
+28504,9201669.20
+25810,9198878.50
+125329,9198688.50
+167867,9194022.72
+134767,9191444.72
+127745,9191271.56
+69208,9187110.00
+155222,9186469.16
+196916,9182995.82
+195590,9176353.12
+169155,9175176.09
+81558,9171946.50
+185136,9171293.04
+114790,9168509.10
+194142,9165836.61
+167639,9161165.00
+11241,9160789.46
+82628,9160155.54
+41399,9148338.00
+30755,9146196.84
+6944,9143574.58
+6326,9138803.16
+101296,9135657.62
+181479,9121093.30
+76898,9120983.10
+64274,9118745.25
+175826,9117387.99
+142215,9116876.88
+103415,9113128.62
+119765,9110768.79
+107624,9108837.45
+84215,9105257.36
+73774,9102651.92
+173972,9102069.00
+69817,9095513.88
+86943,9092253.00
+138859,9087719.30
+162273,9085296.48
+175945,9080401.21
+16836,9075715.44
+70224,9075265.95
+139765,9074755.89
+30319,9073233.10
+3851,9072657.24
+181271,9070631.52
+162184,9068835.78
+81683,9067258.47
+153028,9067010.51
+123324,9061870.95
+186481,9058608.30
+167680,9052908.76
+165293,9050545.70
+122148,9046298.17
+138604,9045840.80
+78851,9044822.60
+137280,9042355.34
+8823,9040855.10
+163900,9040848.48
+75600,9035392.45
+81676,9031999.40
+46033,9031460.58
+194917,9028500.00
+133936,9026949.02
+33182,9024971.10
+34220,9021485.39
+20118,9019942.60
+178258,9019881.66
+15560,9017687.28
+111425,9016198.56
+95942,9015585.12
+132709,9015240.15
+39731,9014746.95
+154307,9012571.20
+23769,9008157.60
+93328,9007211.20
+142826,8998297.44
+188792,8996014.00
+68703,8994982.22
+145280,8990941.05
+150725,8985686.16
+172046,8982469.52
+70476,8967629.50
+124988,8966805.22
+17937,8963319.76
+177372,8954873.64
+137994,8950916.79
+84019,8950039.98
+40389,8946158.20
+69187,8941054.14
+4863,8939044.92
+50465,8930503.14
+43686,8915543.84
+131352,8909053.59
+198916,8906940.03
+135932,8905282.95
+104673,8903682.00
+152308,8903244.08
+135298,8900323.20
+156873,8899429.10
+157454,8897339.20
+75415,8897068.09
+46325,8895569.09
+1966,8895117.06
+24576,8895034.75
+19425,8890156.60
+169735,8890085.56
+32225,8889829.28
+124537,8889770.71
+146327,8887836.23
+121562,8887740.40
+44731,8882444.95
+93141,8881850.88
+187871,8873506.18
+71709,8873057.28
+151913,8869321.17
+33786,8868955.39
+35902,8868126.06
+23588,8867769.90
+24508,8867616.00
+161282,8866661.43
+188061,8862304.00
+132847,8862082.00
+166843,8861200.80
+30609,8860214.73
+56191,8856546.96
+160740,8852685.43
+71229,8846106.99
+91208,8845541.28
+10995,8845306.56
+78094,8839938.29
+36489,8838538.10
+198437,8836494.84
+151693,8833807.64
+185367,8829791.37
+65682,8820622.89
+65421,8819329.24
+122225,8816821.86
+85330,8811013.16
+64555,8810643.12
+104188,8808211.02
+54411,8805703.40
+39438,8805282.56
+70795,8800060.92
+20383,8799073.28
+21952,8798624.19
+63584,8796590.00
+158768,8796422.95
+166588,8796214.38
+120600,8793558.06
+157202,8788287.88
+55358,8786820.75
+168322,8786670.73
+25143,8786324.80
+5368,8786274.14
+114025,8786201.12
+97744,8785315.94
+164327,8784503.86
+76542,8782613.28
+4731,8772846.70
+157590,8772006.45
+154276,8771733.91
+28705,8771576.64
+100226,8769455.00
+179195,8769185.16
+184355,8768118.05
+120408,8768011.12
+63145,8761991.96
+53135,8753491.80
+173071,8750508.80
+41087,8749436.79
+194830,8747438.40
+43496,8743359.30
+30235,8741611.00
+26391,8741399.64
+191816,8740258.72
+47616,8737229.68
+152101,8734432.76
+163784,8730514.34
+5134,8728424.64
+155241,8725429.86
+188814,8724182.40
+140782,8720378.75
+153141,8719407.51
+169373,8718609.06
+41335,8714773.80
+197450,8714617.32
+87004,8714017.79
+181804,8712257.76
+122814,8711119.14
+109939,8709193.16
+98094,8708780.04
+74630,8708040.75
+197291,8706519.09
+184173,8705467.45
+192175,8705411.12
+19471,8702536.12
+18052,8702155.70
+135560,8698137.72
+152791,8697325.80
+170953,8696909.19
+116137,8696687.17
+7722,8696589.40
+49788,8694846.71
+13252,8694822.42
+12633,8694559.36
+193438,8690426.72
+17326,8689329.16
+96124,8679794.58
+143802,8676626.48
+30389,8675826.60
+75250,8675257.14
+72613,8673524.94
+123520,8672456.25
+325,8667741.28
+167291,8667556.18
+150119,8663403.54
+88420,8663355.40
+179784,8653021.34
+130884,8651970.00
+172611,8648217.00
+85373,8647796.22
+122717,8646758.54
+113431,8646348.34
+66015,8643349.40
+33141,8643243.18
+69786,8637396.92
+181857,8637393.28
+122939,8636378.00
+196223,8635391.02
+50532,8632648.24
+58102,8632614.54
+93581,8632372.36
+52804,8632109.25
+755,8627091.68
+16597,8623357.05
+119041,8622397.00
+89050,8621185.98
+98696,8620784.82
+94399,8620524.00
+151295,8616671.02
+56417,8613450.35
+121322,8612948.23
+126883,8611373.42
+29155,8610163.64
+114530,8608471.74
+131007,8607394.82
+128715,8606833.62
+72522,8601479.98
+144061,8595718.74
+83503,8595034.20
+112199,8590717.44
+9227,8587350.42
+116318,8585910.66
+41248,8585559.64
+159398,8584821.00
+105966,8582308.79
+137876,8580641.30
+122272,8580400.77
+195717,8577278.10
+165295,8571121.92
+5840,8570728.74
+120860,8570610.44
+66692,8567540.52
+135596,8563276.31
+150576,8562794.10
+7500,8562393.84
+107716,8561541.56
+100611,8559995.85
+171192,8557390.08
+107660,8556696.60
+13461,8556545.12
+90310,8555131.51
+141493,8553782.93
+71286,8552682.00
+136423,8551300.76
+54241,8550785.25
+120325,8549976.60
+424,8547527.10
+196543,8545907.09
+13042,8542717.18
+58332,8536074.69
+9191,8535663.92
+134357,8535429.90
+96207,8534900.60
+92292,8530618.78
+181093,8528303.52
+105064,8527491.60
+59635,8526854.08
+136974,8524351.56
+126694,8522783.37
+6247,8522606.90
+139447,8522521.92
+96313,8520949.92
+108454,8520916.25
+181254,8519496.10
+71117,8519223.00
+131703,8517215.28
+59312,8510568.36
+2903,8509960.35
+102838,8509527.69
+162806,8508906.05
+41527,8508222.36
+118416,8505858.36
+180203,8505024.16
+14773,8500598.28
+140446,8499514.24
+199641,8497362.59
+109240,8494617.12
+150268,8494188.38
+45310,8492380.65
+36552,8490733.60
+199690,8490145.80
+185353,8488726.68
+163615,8484985.01
+196520,8483545.04
+133438,8483482.35
+77285,8481442.32
+55824,8476893.90
+76753,8475522.12
+46129,8472717.96
+28358,8472515.50
+9317,8472145.32
+33823,8469721.44
+39055,8469145.07
+91471,8468874.56
+142299,8466039.55
+97672,8464119.80
+134712,8461781.79
+157988,8460123.20
+102284,8458652.44
+73533,8458453.32
+90599,8457874.86
+112160,8457863.36
+124792,8457633.70
+66097,8457573.15
+165271,8456969.01
+146925,8454887.91
+164277,8454838.50
+131290,8454811.20
+179386,8450909.90
+90486,8447873.86
+175924,8444421.66
+185922,8442394.88
+38492,8436438.32
+172511,8436287.34
+139539,8434180.29
+11926,8433199.52
+55889,8431449.88
+163068,8431116.40
+138772,8428406.36
+126821,8425180.68
+22091,8420687.88
+55981,8419434.38
+100960,8419403.46
+172568,8417955.21
+63135,8415945.53
+137651,8413170.35
+191353,8413039.84
+62988,8411571.48
+103417,8411541.12
+12052,8411519.28
+104260,8408516.55
+157129,8405730.08
+77254,8405537.22
+112966,8403512.89
+168114,8402764.56
+49940,8402328.20
+52017,8398753.60
+176179,8398087.00
+100215,8395906.61
+61256,8392811.20
+15366,8388907.80
+109479,8388027.20
+66202,8386522.83
+81707,8385761.19
+51727,8385426.40
+9980,8382754.62
+174403,8378575.73
+54558,8378041.92
+3141,8377378.22
+134829,8377105.52
+145056,8376920.76
+194020,8375157.64
+7117,8373982.27
+120146,8373796.20
+126843,8370761.28
+62117,8369493.44
+111221,8367525.81
+159337,8366092.26
+173903,8365428.48
+136438,8364065.45
+56684,8363198.00
+137597,8363185.94
+20039,8361138.24
+121326,8359635.52
+48435,8352863.10
+1712,8349107.00
+167190,8347238.70
+32113,8346452.04
+40580,8342983.32
+74785,8342519.13
+14799,8342236.75
+177291,8341736.83
+198956,8340370.65
+69179,8338465.99
+118764,8337616.56
+128814,8336435.56
+82729,8331766.88
+152048,8330638.99
+171085,8326259.50
+126730,8325974.40
+77525,8323282.50
+170653,8322840.50
+5257,8320350.78
+67350,8318987.56
+109008,8317836.54
+199043,8316603.54
+139969,8316551.54
+22634,8316531.24
+173309,8315750.25
+10887,8315019.36
+42392,8312895.96
+126040,8312623.20
+101590,8304555.42
+46891,8302192.12
+138721,8301745.62
+113715,8301533.20
+78778,8299685.64
+142908,8299447.77
+64419,8297631.80
+21396,8296272.27
+4180,8295646.92
+63534,8295383.67
+135957,8294389.86
+30126,8291920.32
+158427,8288938.00
+14545,8288395.92
+75548,8288287.20
+64473,8286137.44
+149553,8285714.88
+151284,8283526.65
+171091,8282934.36
+194256,8278985.34
+952,8276136.00
+121541,8275390.26
+177664,8275315.20
+51117,8274504.30
+66770,8273407.80
+37238,8272728.06
+46679,8270486.55
+165852,8268312.60
+99458,8266564.47
+114519,8265493.54
+7231,8264881.50
+19033,8264826.56
+125123,8262732.65
+18642,8261578.99
+50386,8261380.05
+193770,8259578.82
+7276,8258101.60
+178045,8253904.15
+49033,8253696.23
+187195,8251334.58
+10590,8249227.40
+143779,8247057.70
+35205,8245675.17
+19729,8245081.60
+144946,8240479.80
+123786,8239581.24
+70843,8237973.20
+112437,8236907.52
+5436,8236039.57
+163754,8235471.16
+115945,8234811.36
+27918,8233957.88
+105712,8233571.86
+41007,8229431.79
+40476,8226640.41
+145620,8221371.60
+7771,8220413.33
+86424,8215572.61
+129137,8215478.40
+76020,8210495.36
+140213,8209831.80
+32379,8208338.88
+130616,8207715.75
+195469,8206609.80
+191805,8205147.75
+90906,8200951.20
+170910,8195558.01
+105399,8193122.63
+123798,8192385.97
+90218,8191689.16
+114766,8189339.54
+11289,8187354.72
+178308,8185750.50
+71271,8185519.24
+1115,8184903.38
+152636,8184530.72
+151619,8182909.05
+116943,8181072.69
+28891,8181051.54
+47049,8180955.00
+158827,8180470.90
+92620,8179671.55
+20814,8176953.54
+179323,8176795.55
+193453,8174343.94
+56888,8173342.00
+28087,8169876.30
+164254,8169632.35
+57661,8168848.16
+7363,8167538.05
+164499,8167512.08
+197557,8165940.45
+5495,8164805.22
+966,8163824.79
+98435,8161771.45
+127227,8161344.92
+194100,8160978.78
+40134,8160358.08
+107341,8159952.05
+6790,8158792.66
+43851,8157101.40
+51295,8156419.20
+69512,8151537.00
+164274,8149869.93
+130854,8145338.85
+186865,8143586.82
+176629,8141411.20
+193739,8141377.77
+6810,8139822.60
+27732,8136724.96
+50616,8134089.82
+123908,8128920.54
+140994,8128470.82
+99039,8128290.78
+62735,8124940.50
+47829,8122796.50
+192635,8122687.57
+192429,8119268.00
+145812,8119165.63
+42896,8118529.80
+146877,8118266.16
+60882,8116095.04
+18254,8114783.04
+165464,8114571.80
+57936,8111927.25
+52226,8110723.32
+128571,8106788.80
+100308,8105837.04
+8872,8102395.62
+58867,8102033.19
+145153,8100222.84
+172088,8098138.20
+59398,8095845.45
+89395,8093576.10
+171961,8093538.00
+88736,8090762.16
+174053,8090350.11
+102237,8089103.22
+43041,8086537.90
+110219,8085296.90
+126738,8084199.20
+44787,8083628.40
+31277,8083580.76
+93595,8082188.80
+189040,8080257.21
+59851,8079024.24
+175100,8077904.01
+43429,8076729.96
+154199,8074940.76
+60963,8073894.40
+8768,8072760.96
+66095,8071421.70
+111552,8068184.48
+24563,8067500.40
+16167,8067495.24
+12662,8067248.85
+94540,8063727.16
+23308,8063463.18
+27390,8062823.25
+130660,8062787.48
+8608,8062411.16
+181552,8062008.30
+199319,8060248.56
+55475,8058850.92
+142711,8057926.58
+103499,8056978.00
+105943,8056698.75
+8432,8053052.16
+149392,8049675.69
+101248,8048855.49
+140962,8047260.70
+87101,8046651.83
+133107,8046476.73
+45126,8045924.40
+87508,8042966.39
+124711,8042722.72
+173169,8042224.41
+175161,8041331.98
+167787,8040075.78
+3242,8038855.53
+114789,8038628.35
+43833,8038545.83
+141198,8035110.72
+137248,8034109.35
+96673,8033491.20
+32180,8032380.72
+166493,8031902.40
+66959,8031839.40
+85628,8029693.44
+110971,8029469.70
+130395,8027463.92
+7757,8026840.37
+178446,8025379.09
+41295,8024785.53
+100956,8024179.30
+131917,8021604.78
+24224,8020463.52
+2073,8020009.64
+121622,8018462.17
+14357,8016906.30
+135601,8016209.44
+58458,8016192.52
+73036,8015799.00
+184722,8015680.31
+151664,8014821.96
+195090,8012680.20
+162609,8011241.00
+83532,8009753.85
+50166,8007137.89
+181562,8006805.96
+175165,8005319.76
+62500,8005316.28
+36342,8004333.40
+128435,8004242.88
+92516,8003836.80
+30802,8003710.88
+107418,8000430.30
+46620,7999778.35
+191803,7994734.15
+106343,7993087.76
+59362,7990397.46
+8329,7990052.90
+75133,7988244.00
+179023,7986829.62
+135899,7985726.64
+5824,7985340.02
+148579,7984889.56
+95888,7984735.72
+9791,7982699.79
+170437,7982370.72
+39782,7977858.24
+20605,7977556.00
+28682,7976960.00
+42172,7973399.00
+56137,7971405.40
+64729,7970769.72
+98643,7968603.73
+153787,7967535.58
+8932,7967222.19
+20134,7965713.28
+197635,7963507.58
+80408,7963312.17
+37728,7961875.68
+26624,7961772.31
+44736,7961144.10
+29763,7960605.03
+36147,7959463.68
+146040,7957587.66
+115469,7957485.14
+142276,7956790.63
+181280,7954037.35
+115096,7953047.55
+109650,7952258.73
+93862,7951992.24
+158325,7950728.30
+55952,7950387.06
+122397,7947106.27
+28114,7946945.72
+11966,7945197.48
+47814,7944083.00
+85096,7943691.06
+51657,7943593.77
+196680,7943578.89
+13141,7942730.34
+193327,7941036.25
+152612,7940663.71
+139680,7939242.36
+31134,7938318.30
+45636,7937240.85
+56694,7936015.95
+8114,7933921.88
+71518,7932261.69
+72922,7930400.64
+146699,7929167.40
+92387,7928972.67
+186289,7928786.19
+95952,7927972.78
+196514,7927180.70
+4403,7925729.04
+2267,7925649.37
+45924,7925047.68
+11493,7916722.23
+104478,7916253.60
+166794,7913842.00
+161995,7910874.27
+23538,7909752.06
+41093,7909579.92
+112073,7908617.57
+92814,7908262.50
+88919,7907992.50
+79753,7907933.88
+108765,7905338.98
+146530,7905336.60
+71475,7903367.58
+36289,7901946.50
+61739,7900794.00
+52338,7898638.08
+194299,7898421.24
+105235,7897829.94
+77207,7897752.72
+96712,7897575.27
+10157,7897046.25
+171154,7896814.50
+79373,7896186.00
+113808,7893353.88
+27901,7892952.00
+128820,7892882.72
+25891,7890511.20
+122819,7888881.02
+154731,7888301.33
+101674,7879324.60
+51968,7879102.21
+72073,7877736.11
+5182,7874521.73
+---- TYPES
+BIGINT, decimal
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q12.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q12.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q12.test
new file mode 100644
index 0000000..a49754f
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q12.test
@@ -0,0 +1,36 @@
+====
+---- QUERY: TPCH-Q12
+# Q12 - Shipping Mode and Order Priority Query
+select
+  l_shipmode,
+  sum(case
+    when o_orderpriority = '1-URGENT'
+      or o_orderpriority = '2-HIGH'
+    then 1
+    else 0
+  end) as high_line_count,
+  sum(case
+    when o_orderpriority <> '1-URGENT'
+      and o_orderpriority <> '2-HIGH'
+    then 1
+    else 0
+  end) as low_line_count
+from
+  customer.c_orders o,
+  o.o_lineitems l
+where
+  l_shipmode in ('MAIL', 'SHIP')
+  and l_commitdate < l_receiptdate
+  and l_shipdate < l_commitdate
+  and l_receiptdate >= '1994-01-01'
+  and l_receiptdate < '1995-01-01'
+group by
+  l_shipmode
+order by
+  l_shipmode
+---- RESULTS
+'MAIL',6202,9324
+'SHIP',6200,9262
+---- TYPES
+string, bigint, bigint
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q13.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q13.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q13.test
new file mode 100644
index 0000000..af93fe8
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q13.test
@@ -0,0 +1,68 @@
+====
+---- QUERY: TPCH-Q13
+# Q13 - Customer Distribution Query
+select
+  c_count,
+  count(*) as custdist
+from (
+  select
+    c_custkey,
+    count(o_orderkey) as c_count
+  from
+    customer c left outer join c.c_orders on (
+      o_comment not like '%special%requests%'
+    )
+  group by
+    c_custkey
+  ) as c_orders
+group by
+  c_count
+order by
+  custdist desc,
+  c_count desc
+---- RESULTS
+0,50005
+9,6641
+10,6532
+11,6014
+8,5937
+12,5639
+13,5024
+19,4793
+7,4687
+17,4587
+18,4529
+20,4516
+15,4505
+14,4446
+16,4273
+21,4190
+22,3623
+6,3265
+23,3225
+24,2742
+25,2086
+5,1948
+26,1612
+27,1179
+4,1007
+28,893
+29,593
+3,415
+30,376
+31,226
+32,148
+2,134
+33,75
+34,50
+35,37
+1,17
+36,14
+38,5
+37,5
+40,4
+41,2
+39,1
+---- TYPES
+BIGINT, BIGINT
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q14.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q14.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q14.test
new file mode 100644
index 0000000..b4c66ff
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q14.test
@@ -0,0 +1,21 @@
+====
+---- QUERY: TPCH-Q14
+# Q14 - Promotion Effect
+select
+  100.00 * sum(case
+    when p_type like 'PROMO%'
+    then l_extendedprice * (1 - l_discount)
+    else 0.0
+    end) / sum(l_extendedprice * (1 - l_discount)) as promo_revenue
+from
+  customer.c_orders.o_lineitems l,
+  part p
+where
+  l_partkey = p_partkey
+  and l_shipdate >= '1995-09-01'
+  and l_shipdate < '1995-10-01'
+---- RESULTS
+16.380778
+---- TYPES
+decimal
+====

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/95f5fb75/testdata/workloads/tpch_nested/queries/tpch_nested-q15.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/tpch_nested/queries/tpch_nested-q15.test b/testdata/workloads/tpch_nested/queries/tpch_nested-q15.test
new file mode 100644
index 0000000..08569ca
--- /dev/null
+++ b/testdata/workloads/tpch_nested/queries/tpch_nested-q15.test
@@ -0,0 +1,38 @@
+====
+---- QUERY: TPCH-Q15
+# Q15 - Top Supplier Query
+with revenue_view as (
+  select
+    l_suppkey as supplier_no,
+    sum(l_extendedprice * (1 - l_discount)) as total_revenue
+  from
+    customer.c_orders.o_lineitems l
+  where
+    l_shipdate >= '1996-01-01'
+    and l_shipdate < '1996-04-01'
+  group by
+    l_suppkey)
+select
+  s_suppkey,
+  s_name,
+  s_address,
+  s_phone,
+  total_revenue
+from
+  supplier,
+  revenue_view
+where
+  s_suppkey = supplier_no
+  and total_revenue = (
+    select
+      max(total_revenue)
+    from
+      revenue_view
+    )
+order by
+  s_suppkey
+---- RESULTS
+8449,'Supplier#000008449','Wp34zim9qYFbVctdW','20-469-856-8873',1772627.2087
+---- TYPES
+BIGINT, STRING, STRING, STRING, DECIMAL
+====


[09/12] incubator-impala git commit: IMPALA-4856, IMPALA-4872: Include KRPC services in plan fragment's destinations

Posted by kw...@apache.org.
IMPALA-4856, IMPALA-4872: Include KRPC services in plan fragment's destinations

This change allows Impala to publish the IP address and port
information of KRPC services if it's enabled via the flag
use_krpc. The information is included in a new field in the
backend descriptor published as statestore updates. Scheduler
will also include this information in the destinations of plan
fragments. Also updated the mini-cluster startup script to assign
KRPC ports to Impalad instances.

This patch also takes into account of a problem found in
IMPALA-5795. In particular, the backend descriptor of the
coordinator may not be found in the backend map in the
scheduler if coordinator is not an executor (i.e. dedicated
coordinator). The fix to also check against the local backend
descriptor.

This patch is partially based on an abandoned patch by Henry Robinson.

Testing done: ran core tests with a patch which ignores the use_krpc
flag to exercise the code in scheduler.

Change-Id: I8707bfb5028bbe81d2a042fcf3e6e19f4b719a72
Reviewed-on: http://gerrit.cloudera.org:8080/7760
Reviewed-by: Michael Ho <kw...@cloudera.com>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/7b6ad283
Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/7b6ad283
Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/7b6ad283

Branch: refs/heads/master
Commit: 7b6ad283f46d31aa953d4d44e142b0bc6b0afbb4
Parents: ec2ba02
Author: Michael Ho <kw...@cloudera.com>
Authored: Fri Aug 18 20:29:37 2017 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Thu Aug 31 02:09:54 2017 +0000

----------------------------------------------------------------------
 be/src/common/global-flags.cc              |  5 +-
 be/src/runtime/exec-env.cc                 | 22 +++++----
 be/src/runtime/exec-env.h                  | 10 +++-
 be/src/scheduling/backend-config.cc        | 16 ++++++-
 be/src/scheduling/backend-config.h         | 11 +++--
 be/src/scheduling/scheduler-test-util.cc   |  7 ++-
 be/src/scheduling/scheduler.cc             | 63 +++++++++++++++++--------
 be/src/scheduling/scheduler.h              | 34 ++++++++-----
 be/src/service/impala-server.cc            | 10 ++--
 be/src/testutil/in-process-servers.cc      | 13 +++--
 be/src/testutil/in-process-servers.h       |  2 +-
 be/src/util/network-util.cc                |  6 +++
 be/src/util/network-util.h                 |  3 ++
 bin/start-impala-cluster.py                |  4 +-
 common/thrift/ImpalaInternalService.thrift |  7 ++-
 common/thrift/StatestoreService.thrift     |  5 +-
 16 files changed, 158 insertions(+), 60 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/7b6ad283/be/src/common/global-flags.cc
----------------------------------------------------------------------
diff --git a/be/src/common/global-flags.cc b/be/src/common/global-flags.cc
index 9404148..ccffcb3 100644
--- a/be/src/common/global-flags.cc
+++ b/be/src/common/global-flags.cc
@@ -35,7 +35,10 @@ DEFINE_string(hostname, "", "Hostname to use for this daemon, also used as part
               "the Kerberos principal, if enabled. If not set, the system default will be"
               " used");
 
-DEFINE_int32(be_port, 22000, "port on which ImpalaInternalService is exported");
+DEFINE_int32(be_port, 22000,
+    "port on which thrift based ImpalaInternalService is exported");
+DEFINE_int32_hidden(krpc_port, 29000,
+    "port on which KRPC based ImpalaInternalService is exported");
 
 // Kerberos is enabled if and only if principal is set.
 DEFINE_string(principal, "", "Kerberos principal. If set, both client and backend network"

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/7b6ad283/be/src/runtime/exec-env.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/exec-env.cc b/be/src/runtime/exec-env.cc
index 02d07e8..0d7518a 100644
--- a/be/src/runtime/exec-env.cc
+++ b/be/src/runtime/exec-env.cc
@@ -76,7 +76,7 @@ DEFINE_int32(state_store_subscriber_port, 23000,
 DEFINE_int32(num_hdfs_worker_threads, 16,
     "(Advanced) The number of threads in the global HDFS operation pool");
 DEFINE_bool(disable_admission_control, false, "Disables admission control.");
-DEFINE_bool_hidden(use_krpc, false, "Used to indicate whether to use Kudu RPC for the "
+DEFINE_bool_hidden(use_krpc, false, "Used to indicate whether to use KRPC for the "
     "DataStream subsystem, or the Thrift RPC layer instead. Defaults to false. "
     "KRPC not yet supported");
 
@@ -84,6 +84,7 @@ DECLARE_int32(state_store_port);
 DECLARE_int32(num_threads_per_core);
 DECLARE_int32(num_cores);
 DECLARE_int32(be_port);
+DECLARE_int32(krpc_port);
 DECLARE_string(mem_limit);
 DECLARE_string(buffer_pool_limit);
 DECLARE_string(buffer_pool_clean_pages_limit);
@@ -136,11 +137,13 @@ struct ExecEnv::KuduClientPtr {
 ExecEnv* ExecEnv::exec_env_ = nullptr;
 
 ExecEnv::ExecEnv()
-  : ExecEnv(FLAGS_hostname, FLAGS_be_port, FLAGS_state_store_subscriber_port,
-        FLAGS_webserver_port, FLAGS_state_store_host, FLAGS_state_store_port) {}
+  : ExecEnv(FLAGS_hostname, FLAGS_be_port, FLAGS_krpc_port,
+        FLAGS_state_store_subscriber_port, FLAGS_webserver_port,
+        FLAGS_state_store_host, FLAGS_state_store_port) {}
 
-ExecEnv::ExecEnv(const string& hostname, int backend_port, int subscriber_port,
-    int webserver_port, const string& statestore_host, int statestore_port)
+ExecEnv::ExecEnv(const string& hostname, int backend_port, int krpc_port,
+    int subscriber_port, int webserver_port, const string& statestore_host,
+    int statestore_port)
   : obj_pool_(new ObjectPool),
     metrics_(new MetricGroup("impala-metrics")),
     impalad_client_cache_(
@@ -165,7 +168,8 @@ ExecEnv::ExecEnv(const string& hostname, int backend_port, int subscriber_port,
     async_rpc_pool_(new CallableThreadPool("rpc-pool", "async-rpc-sender", 8, 10000)),
     query_exec_mgr_(new QueryExecMgr()),
     enable_webserver_(FLAGS_enable_webserver && webserver_port > 0),
-    backend_address_(MakeNetworkAddress(hostname, backend_port)) {
+    backend_address_(MakeNetworkAddress(hostname, backend_port)),
+    krpc_port_(krpc_port) {
 
   if (FLAGS_use_krpc) {
     stream_mgr_.reset(new KrpcDataStreamMgr(metrics_.get()));
@@ -185,7 +189,7 @@ ExecEnv::ExecEnv(const string& hostname, int backend_port, int subscriber_port,
 
   if (FLAGS_is_coordinator) {
     scheduler_.reset(new Scheduler(statestore_subscriber_.get(),
-        statestore_subscriber_->id(), backend_address_, metrics_.get(), webserver_.get(),
+        statestore_subscriber_->id(), metrics_.get(), webserver_.get(),
         request_pool_service_.get()));
   }
 
@@ -332,7 +336,9 @@ Status ExecEnv::StartServices() {
     LOG(INFO) << "Not starting webserver";
   }
 
-  if (scheduler_ != nullptr) RETURN_IF_ERROR(scheduler_->Init());
+  if (scheduler_ != nullptr) {
+    RETURN_IF_ERROR(scheduler_->Init(backend_address_, krpc_port_));
+  }
   if (admission_controller_ != nullptr) RETURN_IF_ERROR(admission_controller_->Init());
 
   // Get the fs.defaultFS value set in core-site.xml and assign it to

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/7b6ad283/be/src/runtime/exec-env.h
----------------------------------------------------------------------
diff --git a/be/src/runtime/exec-env.h b/be/src/runtime/exec-env.h
index 9e925a1..25d1055 100644
--- a/be/src/runtime/exec-env.h
+++ b/be/src/runtime/exec-env.h
@@ -69,8 +69,9 @@ class ExecEnv {
  public:
   ExecEnv();
 
-  ExecEnv(const std::string& hostname, int backend_port, int subscriber_port,
-      int webserver_port, const std::string& statestore_host, int statestore_port);
+  ExecEnv(const std::string& hostname, int backend_port, int krpc_port,
+      int subscriber_port, int webserver_port, const std::string& statestore_host,
+      int statestore_port);
 
   /// Returns the first created exec env instance. In a normal impalad, this is
   /// the only instance. In test setups with multiple ExecEnv's per process,
@@ -126,6 +127,8 @@ class ExecEnv {
 
   const TNetworkAddress& backend_address() const { return backend_address_; }
 
+  int krpc_port() const { return krpc_port_; }
+
   /// Initializes the exec env for running FE tests.
   Status InitForFeTests() WARN_UNUSED_RESULT;
 
@@ -187,6 +190,9 @@ class ExecEnv {
   /// Address of the Impala backend server instance
   TNetworkAddress backend_address_;
 
+  /// Port number on which all KRPC-based services are exported.
+  int krpc_port_;
+
   /// fs.defaultFs value set in core-site.xml
   std::string default_fs_;
 

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/7b6ad283/be/src/scheduling/backend-config.cc
----------------------------------------------------------------------
diff --git a/be/src/scheduling/backend-config.cc b/be/src/scheduling/backend-config.cc
index e5c6824..715ec34 100644
--- a/be/src/scheduling/backend-config.cc
+++ b/be/src/scheduling/backend-config.cc
@@ -75,15 +75,27 @@ void BackendConfig::RemoveBackend(const TBackendDescriptor& be_desc) {
 bool BackendConfig::LookUpBackendIp(const Hostname& hostname, IpAddr* ip) const {
   // Check if hostname is already a valid IP address.
   if (backend_map_.find(hostname) != backend_map_.end()) {
-    if (ip) *ip = hostname;
+    if (ip != nullptr) *ip = hostname;
     return true;
   }
   auto it = backend_ip_map_.find(hostname);
   if (it != backend_ip_map_.end()) {
-    if (ip) *ip = it->second;
+    if (ip != nullptr) *ip = it->second;
     return true;
   }
   return false;
 }
 
+const TBackendDescriptor* BackendConfig::LookUpBackendDesc(
+    const TNetworkAddress& host) const {
+  IpAddr ip;
+  if (LIKELY(LookUpBackendIp(host.hostname, &ip))) {
+    const BackendConfig::BackendList& be_list = GetBackendListForHost(ip);
+    for (const TBackendDescriptor& desc : be_list) {
+      if (desc.address == host) return &desc;
+    }
+  }
+  return nullptr;
+}
+
 }  // end ns impala

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/7b6ad283/be/src/scheduling/backend-config.h
----------------------------------------------------------------------
diff --git a/be/src/scheduling/backend-config.h b/be/src/scheduling/backend-config.h
index 25f8292..c7cbbcd 100644
--- a/be/src/scheduling/backend-config.h
+++ b/be/src/scheduling/backend-config.h
@@ -52,11 +52,16 @@ class BackendConfig {
   /// Look up the IP address of 'hostname' in the internal backend maps and return
   /// whether the lookup was successful. If 'hostname' itself is a valid IP address and
   /// is contained in backend_map_, then it is copied to 'ip' and true is returned. 'ip'
-  /// can be NULL if the caller only wants to check whether the lookup succeeds. Use this
-  /// method to resolve datanode hostnames to IP addresses during scheduling, to prevent
-  /// blocking on the OS.
+  /// can be nullptr if the caller only wants to check whether the lookup succeeds. Use
+  /// this method to resolve datanode hostnames to IP addresses during scheduling, to
+  /// prevent blocking on the OS.
   bool LookUpBackendIp(const Hostname& hostname, IpAddr* ip) const;
 
+  /// Look up the backend descriptor for the backend with hostname 'host'.
+  /// Returns nullptr if it's not found. The returned descriptor should not
+  /// be retained beyond the lifetime of this BackendConfig.
+  const TBackendDescriptor* LookUpBackendDesc(const TNetworkAddress& host) const;
+
   int NumBackends() const { return backend_map_.size(); }
 
  private:

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/7b6ad283/be/src/scheduling/scheduler-test-util.cc
----------------------------------------------------------------------
diff --git a/be/src/scheduling/scheduler-test-util.cc b/be/src/scheduling/scheduler-test-util.cc
index b9b2c6e..841bc24 100644
--- a/be/src/scheduling/scheduler-test-util.cc
+++ b/be/src/scheduling/scheduler-test-util.cc
@@ -20,11 +20,14 @@
 #include <boost/unordered_set.hpp>
 
 #include "common/names.h"
+#include "runtime/exec-env.h"
 #include "scheduling/scheduler.h"
 
 using namespace impala;
 using namespace impala::test;
 
+DECLARE_int32(krpc_port);
+
 /// Sample 'n' elements without replacement from the set [0..N-1].
 /// This is an implementation of "Algorithm R" by J. Vitter.
 void SampleN(int n, int N, vector<int>* out) {
@@ -507,9 +510,9 @@ void SchedulerWrapper::InitializeScheduler() {
   scheduler_backend_address.hostname = scheduler_host.ip;
   scheduler_backend_address.port = scheduler_host.be_port;
 
-  scheduler_.reset(new Scheduler(nullptr, scheduler_backend_id, scheduler_backend_address,
+  scheduler_.reset(new Scheduler(nullptr, scheduler_backend_id,
       &metrics_, nullptr, nullptr));
-  const Status status = scheduler_->Init();
+  const Status status = scheduler_->Init(scheduler_backend_address, FLAGS_krpc_port);
   DCHECK(status.ok()) << "Scheduler init failed in test";
   // Initialize the scheduler backend maps.
   SendFullMembershipMap();

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/7b6ad283/be/src/scheduling/scheduler.cc
----------------------------------------------------------------------
diff --git a/be/src/scheduling/scheduler.cc b/be/src/scheduling/scheduler.cc
index 1c39230..f6e323f 100644
--- a/be/src/scheduling/scheduler.cc
+++ b/be/src/scheduling/scheduler.cc
@@ -43,8 +43,7 @@ using boost::algorithm::join;
 using namespace apache::thrift;
 using namespace strings;
 
-DECLARE_int32(be_port);
-DECLARE_string(hostname);
+DECLARE_bool(use_krpc);
 
 namespace impala {
 
@@ -56,28 +55,25 @@ static const string NUM_BACKENDS_KEY("simple-scheduler.num-backends");
 const string Scheduler::IMPALA_MEMBERSHIP_TOPIC("impala-membership");
 
 Scheduler::Scheduler(StatestoreSubscriber* subscriber, const string& backend_id,
-    const TNetworkAddress& backend_address, MetricGroup* metrics, Webserver* webserver,
-    RequestPoolService* request_pool_service)
+    MetricGroup* metrics, Webserver* webserver, RequestPoolService* request_pool_service)
   : executors_config_(std::make_shared<const BackendConfig>()),
     metrics_(metrics->GetOrCreateChildGroup("scheduler")),
     webserver_(webserver),
     statestore_subscriber_(subscriber),
     local_backend_id_(backend_id),
     thrift_serializer_(false),
-    total_assignments_(nullptr),
-    total_local_assignments_(nullptr),
-    initialized_(nullptr),
     request_pool_service_(request_pool_service) {
-  local_backend_descriptor_.address = backend_address;
 }
 
-Status Scheduler::Init() {
+Status Scheduler::Init(const TNetworkAddress& backend_address, int krpc_port) {
   LOG(INFO) << "Starting scheduler";
 
-  // Figure out what our IP address is, so that each subscriber
-  // doesn't have to resolve it on every heartbeat.
+  // Figure out what our IP address is, so that each subscriber doesn't have to resolve
+  // it on every heartbeat. KRPC also assumes that the address is resolved already.
+  // May as well do it up front to avoid frequent DNS requests.
+  local_backend_descriptor_.address = backend_address;
   IpAddr ip;
-  const Hostname& hostname = local_backend_descriptor_.address.hostname;
+  const Hostname& hostname = backend_address.hostname;
   Status status = HostnameToIpAddr(hostname, &ip);
   if (!status.ok()) {
     VLOG(1) << status.GetDetail();
@@ -88,6 +84,12 @@ Status Scheduler::Init() {
   local_backend_descriptor_.ip_address = ip;
   LOG(INFO) << "Scheduler using " << ip << " as IP address";
 
+  if (FLAGS_use_krpc) {
+    // KRPC expects address to have been resolved already.
+    TNetworkAddress krpc_svc_addr = MakeNetworkAddress(ip, krpc_port);
+    local_backend_descriptor_.__set_krpc_address(krpc_svc_addr);
+  }
+
   coord_only_backend_config_.AddBackend(local_backend_descriptor_);
 
   if (statestore_subscriber_ != nullptr) {
@@ -222,10 +224,22 @@ void Scheduler::SetExecutorsConfig(const ExecutorsConfigPtr& executors_config) {
   executors_config_ = executors_config;
 }
 
-Status Scheduler::ComputeScanRangeAssignment(QuerySchedule* schedule) {
+const TBackendDescriptor& Scheduler::LookUpBackendDesc(
+    const BackendConfig& executor_config, const TNetworkAddress& host) {
+  const TBackendDescriptor* desc = executor_config.LookUpBackendDesc(host);
+  if (desc == nullptr) {
+    // Local host may not be in executor_config if it's a dedicated coordinator.
+    DCHECK_EQ(host, local_backend_descriptor_.address);
+    DCHECK(!local_backend_descriptor_.is_executor);
+    desc = &local_backend_descriptor_;
+  }
+  return *desc;
+}
+
+Status Scheduler::ComputeScanRangeAssignment(
+    const BackendConfig& executor_config, QuerySchedule* schedule) {
   RuntimeProfile::Counter* total_assignment_timer =
       ADD_TIMER(schedule->summary_profile(), "ComputeScanRangeAssignmentTimer");
-  ExecutorsConfigPtr executor_config = GetExecutorsConfig();
   const TQueryExecRequest& exec_request = schedule->request();
   for (const TPlanExecInfo& plan_exec_info : exec_request.plan_exec_info) {
     for (const auto& entry : plan_exec_info.per_node_scan_ranges) {
@@ -248,7 +262,7 @@ Status Scheduler::ComputeScanRangeAssignment(QuerySchedule* schedule) {
       FragmentScanRangeAssignment* assignment =
           &schedule->GetFragmentExecParams(fragment.idx)->scan_range_assignment;
       RETURN_IF_ERROR(
-          ComputeScanRangeAssignment(*executor_config, node_id, node_replica_preference,
+          ComputeScanRangeAssignment(executor_config, node_id, node_replica_preference,
               node_random_replica, entry.second, exec_request.host_list, exec_at_coord,
               schedule->query_options(), total_assignment_timer, assignment));
       schedule->IncNumScanRanges(entry.second.size());
@@ -257,7 +271,8 @@ Status Scheduler::ComputeScanRangeAssignment(QuerySchedule* schedule) {
   return Status::OK();
 }
 
-void Scheduler::ComputeFragmentExecParams(QuerySchedule* schedule) {
+void Scheduler::ComputeFragmentExecParams(
+    const BackendConfig& executor_config, QuerySchedule* schedule) {
   const TQueryExecRequest& exec_request = schedule->request();
 
   // for each plan, compute the FInstanceExecParams for the tree of fragments
@@ -282,7 +297,14 @@ void Scheduler::ComputeFragmentExecParams(QuerySchedule* schedule) {
       for (int i = 0; i < dest_params->instance_exec_params.size(); ++i) {
         TPlanFragmentDestination& dest = src_params->destinations[i];
         dest.__set_fragment_instance_id(dest_params->instance_exec_params[i].instance_id);
-        dest.__set_server(dest_params->instance_exec_params[i].host);
+        const TNetworkAddress& host = dest_params->instance_exec_params[i].host;
+        dest.__set_server(host);
+        if (FLAGS_use_krpc) {
+          const TBackendDescriptor& desc = LookUpBackendDesc(executor_config, host);
+          DCHECK(desc.__isset.krpc_address);
+          DCHECK(IsResolvedAddress(desc.krpc_address));
+          dest.__set_krpc_server(desc.krpc_address);
+        }
       }
 
       // enumerate senders consecutively;
@@ -679,8 +701,11 @@ void Scheduler::GetScanHosts(TPlanNodeId scan_id, const FragmentExecParams& para
 }
 
 Status Scheduler::Schedule(QuerySchedule* schedule) {
-  RETURN_IF_ERROR(ComputeScanRangeAssignment(schedule));
-  ComputeFragmentExecParams(schedule);
+  // Make a copy of the executor_config upfront to avoid using inconsistent views
+  // between ComputeScanRangeAssignment() and ComputeFragmentExecParams().
+  ExecutorsConfigPtr config_ptr = GetExecutorsConfig();
+  RETURN_IF_ERROR(ComputeScanRangeAssignment(*config_ptr, schedule));
+  ComputeFragmentExecParams(*config_ptr, schedule);
   ComputeBackendExecParams(schedule);
 #ifndef NDEBUG
   schedule->Validate();

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/7b6ad283/be/src/scheduling/scheduler.h
----------------------------------------------------------------------
diff --git a/be/src/scheduling/scheduler.h b/be/src/scheduling/scheduler.h
index 07e0cfc..d1a22f8 100644
--- a/be/src/scheduling/scheduler.h
+++ b/be/src/scheduling/scheduler.h
@@ -78,15 +78,17 @@ class Scheduler {
   /// Initialize with a subscription manager that we can register with for updates to the
   /// set of available backends.
   ///  - backend_id - unique identifier for this Impala backend (usually a host:port)
-  ///  - backend_address - the address that this backend listens on
   Scheduler(StatestoreSubscriber* subscriber, const std::string& backend_id,
-      const TNetworkAddress& backend_address, MetricGroup* metrics, Webserver* webserver,
+      MetricGroup* metrics, Webserver* webserver,
       RequestPoolService* request_pool_service);
 
-  /// Initialises the scheduler, acquiring all resources needed to make scheduling
+  /// Initializes the scheduler, acquiring all resources needed to make scheduling
   /// decisions once this method returns. Register with the subscription manager if
-  /// required.
-  impala::Status Init();
+  /// required. Also initializes the local backend descriptor. Returns error status
+  /// on failure. 'backend_address' is the address of thrift based ImpalaInternalService
+  /// of this backend. 'krpc_port' is the port on which KRPC based ImpalaInternalService
+  /// is exported.
+  Status Init(const TNetworkAddress& backend_address, int krpc_port);
 
   /// Populates given query schedule and assigns fragments to hosts based on scan
   /// ranges in the query exec request.
@@ -300,14 +302,14 @@ class Scheduler {
   ThriftSerializer thrift_serializer_;
 
   /// Locality metrics
-  IntCounter* total_assignments_;
-  IntCounter* total_local_assignments_;
+  IntCounter* total_assignments_ = nullptr;
+  IntCounter* total_local_assignments_ = nullptr;
 
   /// Initialization metric
-  BooleanProperty* initialized_;
+  BooleanProperty* initialized_ = nullptr;
 
   /// Current number of executors
-  IntGauge* num_fragment_instances_metric_;
+  IntGauge* num_fragment_instances_metric_ = nullptr;
 
   /// Used for user-to-pool resolution and looking up pool configurations. Not owned by
   /// us.
@@ -318,6 +320,12 @@ class Scheduler {
   ExecutorsConfigPtr GetExecutorsConfig() const;
   void SetExecutorsConfig(const ExecutorsConfigPtr& executors_config);
 
+  /// Returns the backend descriptor corresponding to 'host' which could be a remote
+  /// backend or the local host itself. The returned descriptor should not be retained
+  /// beyond the lifetime of 'executor_config'.
+  const TBackendDescriptor& LookUpBackendDesc(
+      const BackendConfig& executor_config, const TNetworkAddress& host);
+
   /// Called asynchronously when an update is received from the subscription manager
   void UpdateMembership(const StatestoreSubscriber::TopicDeltaMap& incoming_topic_deltas,
       std::vector<TTopicDelta>* subscriber_topic_updates);
@@ -331,7 +339,9 @@ class Scheduler {
   /// Unpartitioned fragments are assigned to the coordinator. Populate the schedule's
   /// fragment_exec_params_ with the resulting scan range assignment.
   /// We have a benchmark for this method in be/src/benchmarks/scheduler-benchmark.cc.
-  Status ComputeScanRangeAssignment(QuerySchedule* schedule);
+  /// 'executor_config' is the executor configuration to use for scheduling.
+  Status ComputeScanRangeAssignment(const BackendConfig& executor_config,
+      QuerySchedule* schedule);
 
   /// Process the list of scan ranges of a single plan node and compute scan range
   /// assignments (returned in 'assignment'). The result is a mapping from hosts to their
@@ -407,7 +417,9 @@ class Scheduler {
   /// TQueryExecRequest.plan_exec_info.
   /// This includes the routing information (destinations, per_exch_num_senders,
   /// sender_id)
-  void ComputeFragmentExecParams(QuerySchedule* schedule);
+  /// 'executor_config' is the executor configuration to use for scheduling.
+  void ComputeFragmentExecParams(const BackendConfig& executor_config,
+      QuerySchedule* schedule);
 
   /// Recursively create FInstanceExecParams and set per_node_scan_ranges for
   /// fragment_params and its input fragments via a depth-first traversal.

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/7b6ad283/be/src/service/impala-server.cc
----------------------------------------------------------------------
diff --git a/be/src/service/impala-server.cc b/be/src/service/impala-server.cc
index fb1d0e6..4d55c85 100644
--- a/be/src/service/impala-server.cc
+++ b/be/src/service/impala-server.cc
@@ -110,6 +110,7 @@ DECLARE_string(authorized_proxy_user_config);
 DECLARE_string(authorized_proxy_user_config_delimiter);
 DECLARE_bool(abort_on_config_error);
 DECLARE_bool(disk_spill_encryption);
+DECLARE_bool(use_krpc);
 
 DEFINE_int32(beeswax_port, 21000, "port on which Beeswax client requests are served");
 DEFINE_int32(hs2_port, 21050, "port on which HiveServer2 client requests are served");
@@ -921,7 +922,7 @@ void ImpalaServer::PrepareQueryContext(TQueryCtx* query_ctx) {
   local_timestamp.UtcToLocal();
   query_ctx->__set_now_string(local_timestamp.ToString());
   query_ctx->__set_start_unix_millis(UnixMillis());
-  query_ctx->__set_coord_address(MakeNetworkAddress(FLAGS_hostname, FLAGS_be_port));
+  query_ctx->__set_coord_address(ExecEnv::GetInstance()->backend_address());
 
   // Creating a random_generator every time is not free, but
   // benchmarks show it to be slightly cheaper than contending for a
@@ -1641,8 +1642,7 @@ void ImpalaServer::AddLocalBackendToStatestore(
   TBackendDescriptor local_backend_descriptor;
   local_backend_descriptor.__set_is_coordinator(FLAGS_is_coordinator);
   local_backend_descriptor.__set_is_executor(FLAGS_is_executor);
-  local_backend_descriptor.__set_address(
-      MakeNetworkAddress(FLAGS_hostname, FLAGS_be_port));
+  local_backend_descriptor.__set_address(exec_env_->backend_address());
   IpAddr ip;
   const Hostname& hostname = local_backend_descriptor.address.hostname;
   Status status = HostnameToIpAddr(hostname, &ip);
@@ -1653,6 +1653,10 @@ void ImpalaServer::AddLocalBackendToStatestore(
     return;
   }
   local_backend_descriptor.ip_address = ip;
+  if (FLAGS_use_krpc) {
+    TNetworkAddress krpc_address = MakeNetworkAddress(ip, exec_env_->krpc_port());
+    local_backend_descriptor.__set_krpc_address(krpc_address);
+  }
   subscriber_topic_updates->emplace_back(TTopicDelta());
   TTopicDelta& update = subscriber_topic_updates->back();
   update.topic_name = Scheduler::IMPALA_MEMBERSHIP_TOPIC;

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/7b6ad283/be/src/testutil/in-process-servers.cc
----------------------------------------------------------------------
diff --git a/be/src/testutil/in-process-servers.cc b/be/src/testutil/in-process-servers.cc
index 4fecfb3..5b2a4e5 100644
--- a/be/src/testutil/in-process-servers.cc
+++ b/be/src/testutil/in-process-servers.cc
@@ -35,6 +35,7 @@
 DECLARE_string(ssl_server_certificate);
 DECLARE_string(ssl_private_key);
 DECLARE_int32(be_port);
+DECLARE_int32(krpc_port);
 
 using namespace apache::thrift;
 using namespace impala;
@@ -49,6 +50,10 @@ InProcessImpalaServer* InProcessImpalaServer::StartWithEphemeralPorts(
     // backend interface.
     FLAGS_be_port = backend_port;
 
+    int krpc_port = FindUnusedEphemeralPort(&used_ports);
+    if (krpc_port == -1) continue;
+    FLAGS_krpc_port = krpc_port;
+
     int subscriber_port = FindUnusedEphemeralPort(&used_ports);
     if (subscriber_port == -1) continue;
 
@@ -62,7 +67,7 @@ InProcessImpalaServer* InProcessImpalaServer::StartWithEphemeralPorts(
     if (hs2_port == -1) continue;
 
     InProcessImpalaServer* impala =
-        new InProcessImpalaServer("localhost", backend_port, subscriber_port,
+        new InProcessImpalaServer("localhost", backend_port, krpc_port, subscriber_port,
             webserver_port, statestore_host, statestore_port);
     // Start the daemon and check if it works, if not delete the current server object and
     // pick a new set of ports
@@ -79,14 +84,14 @@ InProcessImpalaServer* InProcessImpalaServer::StartWithEphemeralPorts(
 }
 
 InProcessImpalaServer::InProcessImpalaServer(const string& hostname, int backend_port,
-    int subscriber_port, int webserver_port, const string& statestore_host,
+    int krpc_port, int subscriber_port, int webserver_port, const string& statestore_host,
     int statestore_port)
     : hostname_(hostname), backend_port_(backend_port),
       beeswax_port_(0),
       hs2_port_(0),
       impala_server_(NULL),
-      exec_env_(new ExecEnv(hostname, backend_port, subscriber_port, webserver_port,
-          statestore_host, statestore_port)) {
+      exec_env_(new ExecEnv(hostname, backend_port, krpc_port, subscriber_port,
+          webserver_port, statestore_host, statestore_port)) {
 }
 
 Status InProcessImpalaServer::SetCatalogInitialized() {

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/7b6ad283/be/src/testutil/in-process-servers.h
----------------------------------------------------------------------
diff --git a/be/src/testutil/in-process-servers.h b/be/src/testutil/in-process-servers.h
index 03b02f3..d22c441 100644
--- a/be/src/testutil/in-process-servers.h
+++ b/be/src/testutil/in-process-servers.h
@@ -42,7 +42,7 @@ class InProcessImpalaServer {
  public:
   /// Initialises the server, but does not start any network-attached
   /// services or run any threads.
-  InProcessImpalaServer(const std::string& hostname, int backend_port,
+  InProcessImpalaServer(const std::string& hostname, int backend_port, int krpc_port,
                         int subscriber_port, int webserver_port,
                         const std::string& statestore_host, int statestore_port);
 

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/7b6ad283/be/src/util/network-util.cc
----------------------------------------------------------------------
diff --git a/be/src/util/network-util.cc b/be/src/util/network-util.cc
index 6228a0b..1a9ce53 100644
--- a/be/src/util/network-util.cc
+++ b/be/src/util/network-util.cc
@@ -28,6 +28,7 @@
 #include <vector>
 #include <boost/algorithm/string.hpp>
 
+#include "kudu/util/net/sockaddr.h"
 #include "util/debug-util.h"
 #include "util/error-util.h"
 #include <util/string-parser.h>
@@ -113,6 +114,11 @@ Status HostnameToIpAddr(const Hostname& hostname, IpAddr* ip){
   return Status::OK();
 }
 
+bool IsResolvedAddress(const TNetworkAddress& addr) {
+  kudu::Sockaddr sock;
+  return sock.ParseString(addr.hostname, addr.port).ok();
+}
+
 bool FindFirstNonLocalhost(const vector<string>& addresses, string* addr) {
   for (const string& candidate: addresses) {
     if (candidate != LOCALHOST) {

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/7b6ad283/be/src/util/network-util.h
----------------------------------------------------------------------
diff --git a/be/src/util/network-util.h b/be/src/util/network-util.h
index 1783589..e964f5c 100644
--- a/be/src/util/network-util.h
+++ b/be/src/util/network-util.h
@@ -28,6 +28,9 @@ typedef std::string Hostname;
 /// Type to store IPv4 addresses.
 typedef std::string IpAddr;
 
+/// Returns true if 'addr' is a fully resolved IP address, rather than a fqdn + port.
+bool IsResolvedAddress(const TNetworkAddress& addr);
+
 /// Looks up all IP addresses associated with a given hostname and returns one of them via
 /// 'address'. If the IP addresses of a host don't change, then subsequent calls will
 /// always return the same address. Returns an error status if any system call failed,

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/7b6ad283/bin/start-impala-cluster.py
----------------------------------------------------------------------
diff --git a/bin/start-impala-cluster.py b/bin/start-impala-cluster.py
index c253ca8..af960d9 100755
--- a/bin/start-impala-cluster.py
+++ b/bin/start-impala-cluster.py
@@ -94,7 +94,7 @@ CATALOGD_PATH = os.path.join(IMPALA_HOME,
 MINI_IMPALA_CLUSTER_PATH = IMPALAD_PATH + " -in-process"
 
 IMPALA_SHELL = os.path.join(IMPALA_HOME, 'bin/impala-shell.sh')
-IMPALAD_PORTS = ("-beeswax_port=%d -hs2_port=%d  -be_port=%d "
+IMPALAD_PORTS = ("-beeswax_port=%d -hs2_port=%d  -be_port=%d -krpc_port=%d "
                  "-state_store_subscriber_port=%d -webserver_port=%d")
 JVM_ARGS = "-jvm_debug_port=%s -jvm_args=%s"
 BE_LOGGING_ARGS = "-log_filename=%s -log_dir=%s -v=%s -logbufsecs=5 -max_log_files=%s"
@@ -187,10 +187,12 @@ def build_impalad_port_args(instance_num):
   BASE_BEESWAX_PORT = 21000
   BASE_HS2_PORT = 21050
   BASE_BE_PORT = 22000
+  BASE_KRPC_PORT = 29000
   BASE_STATE_STORE_SUBSCRIBER_PORT = 23000
   BASE_WEBSERVER_PORT = 25000
   return IMPALAD_PORTS % (BASE_BEESWAX_PORT + instance_num, BASE_HS2_PORT + instance_num,
                           BASE_BE_PORT + instance_num,
+                          BASE_KRPC_PORT + instance_num,
                           BASE_STATE_STORE_SUBSCRIBER_PORT + instance_num,
                           BASE_WEBSERVER_PORT + instance_num)
 

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/7b6ad283/common/thrift/ImpalaInternalService.thrift
----------------------------------------------------------------------
diff --git a/common/thrift/ImpalaInternalService.thrift b/common/thrift/ImpalaInternalService.thrift
index 54fcdaf..39df289 100644
--- a/common/thrift/ImpalaInternalService.thrift
+++ b/common/thrift/ImpalaInternalService.thrift
@@ -350,7 +350,7 @@ struct TQueryCtx {
   // Process ID of the impalad to which the user is connected.
   5: required i32 pid
 
-  // Initiating coordinator.
+  // The initiating coordinator's address of its thrift based ImpalaInternalService.
   // TODO: determine whether we can get this somehow via the Thrift rpc mechanism.
   6: optional Types.TNetworkAddress coord_address
 
@@ -404,8 +404,11 @@ struct TPlanFragmentDestination {
   // the globally unique fragment instance id
   1: required Types.TUniqueId fragment_instance_id
 
-  // ... which is being executed on this server
+  // IP address + port of the thrift based ImpalaInteralService on the destination
   2: required Types.TNetworkAddress server
+
+  // IP address + port of the KRPC based ImpalaInternalService on the destination
+  3: optional Types.TNetworkAddress krpc_server
 }
 
 // Context to collect information, which is shared among all instances of that plan

http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/7b6ad283/common/thrift/StatestoreService.thrift
----------------------------------------------------------------------
diff --git a/common/thrift/StatestoreService.thrift b/common/thrift/StatestoreService.thrift
index 90400b2..60a0d0d 100644
--- a/common/thrift/StatestoreService.thrift
+++ b/common/thrift/StatestoreService.thrift
@@ -50,7 +50,7 @@ struct TPoolStats {
 // all other Impalads in the cluster. Impalads can act as coordinators, executors or
 // both.
 struct TBackendDescriptor {
-  // Network address of the Impala service on this backend
+  // Network address of the thrift based ImpalaInternalService on this backend
   1: required Types.TNetworkAddress address;
 
   // IP address corresponding to address.hostname. Explicitly including this saves the
@@ -68,6 +68,9 @@ struct TBackendDescriptor {
 
   // True if the debug webserver is secured (for correctly generating links)
   6: optional bool secure_webserver;
+
+  // IP address + port of KRPC based ImpalaInternalService on this backend
+  7: optional Types.TNetworkAddress krpc_address;
 }
 
 // Description of a single entry in a topic