Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id AC3C22004F1 for ; Wed, 30 Aug 2017 22:04:11 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id AAF5B169E58; Wed, 30 Aug 2017 20:04:11 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 0047D169E4A for ; Wed, 30 Aug 2017 22:04:10 +0200 (CEST) Received: (qmail 59418 invoked by uid 500); 30 Aug 2017 20:04:10 -0000 Mailing-List: contact dev-help@quickstep.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@quickstep.incubator.apache.org Delivered-To: mailing list dev@quickstep.incubator.apache.org Received: (qmail 59139 invoked by uid 99); 30 Aug 2017 20:04:07 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 30 Aug 2017 20:04:07 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id 15DD4C1B4F for ; Wed, 30 Aug 2017 20:04:07 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -4.021 X-Spam-Level: X-Spam-Status: No, score=-4.021 tagged_above=-999 required=6.31 tests=[KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-0.001] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id jewdW05YtKYa for ; Wed, 30 Aug 2017 20:04:06 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with SMTP id CD4BF6125F for ; Wed, 30 Aug 2017 20:04:05 +0000 (UTC) Received: (qmail 58367 invoked by uid 99); 30 Aug 2017 20:04:05 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 30 Aug 2017 20:04:05 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 07690F559C; Wed, 30 Aug 2017 20:04:01 +0000 (UTC) From: zuyu To: dev@quickstep.incubator.apache.org Reply-To: dev@quickstep.incubator.apache.org References: In-Reply-To: Subject: [GitHub] incubator-quickstep pull request #291: Add "COPY TO" operator for exporting ... Content-Type: text/plain Message-Id: <20170830200402.07690F559C@git1-us-west.apache.org> Date: Wed, 30 Aug 2017 20:04:01 +0000 (UTC) archived-at: Wed, 30 Aug 2017 20:04:11 -0000 Github user zuyu commented on a diff in the pull request: https://github.com/apache/incubator-quickstep/pull/291#discussion_r136162361 --- Diff: query_optimizer/resolver/Resolver.cpp --- @@ -418,27 +455,157 @@ L::LogicalPtr Resolver::resolve(const ParseStatement &parse_query) { } L::LogicalPtr Resolver::resolveCopyFrom( - const ParseStatementCopyFrom ©_from_statement) { - // Default parameters. - std::string column_delimiter_ = "\t"; - bool escape_strings_ = true; + const ParseStatementCopy ©_from_statement) { + DCHECK(copy_from_statement.getCopyDirection() == ParseStatementCopy::kFrom); + const PtrList *params = copy_from_statement.params(); - const ParseCopyFromParams *params = copy_from_statement.params(); + BulkIOFormat file_format = BulkIOFormat::kText; if (params != nullptr) { - if (params->delimiter != nullptr) { - column_delimiter_ = params->delimiter->value(); - if (column_delimiter_.size() != 1) { - THROW_SQL_ERROR_AT(params->delimiter) - << "DELIMITER is not a single character"; + for (const ParseKeyValue ¶m : *params) { + const std::string &key = ToLower(param.key()->value()); + if (key == "format") { + const ParseString *parse_format = GetKeyValueString(param); + const std::string format = ToLower(parse_format->value()); + // TODO(jianqiao): Support other bulk load formats such as CSV. + if (format != "text") { + THROW_SQL_ERROR_AT(parse_format) << "Unsupported file format: " << format; + } + // Update file_format when other formats get supported. + break; + } + } + } + + std::unique_ptr options = + std::make_unique(file_format); + if (params != nullptr) { + for (const ParseKeyValue ¶m : *params) { + const std::string &key = ToLower(param.key()->value()); + if (key == "delimiter") { + const ParseString *parse_delimiter = GetKeyValueString(param); + const std::string &delimiter = parse_delimiter->value(); + if (delimiter.size() != 1) { --- End diff -- Should we change to `1u` to avoid unsign-vs-sign-compare warning? --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastructure@apache.org or file a JIRA ticket with INFRA. ---