Return-Path: X-Original-To: apmail-cassandra-commits-archive@www.apache.org Delivered-To: apmail-cassandra-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 794ED18033 for ; Tue, 22 Mar 2016 20:52:49 +0000 (UTC) Received: (qmail 51834 invoked by uid 500); 22 Mar 2016 20:52:48 -0000 Delivered-To: apmail-cassandra-commits-archive@cassandra.apache.org Received: (qmail 51760 invoked by uid 500); 22 Mar 2016 20:52:48 -0000 Mailing-List: contact commits-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cassandra.apache.org Delivered-To: mailing list commits@cassandra.apache.org Received: (qmail 51524 invoked by uid 99); 22 Mar 2016 20:52:48 -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; Tue, 22 Mar 2016 20:52:48 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 3EAEAE08E7; Tue, 22 Mar 2016 20:52:48 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: yukim@apache.org To: commits@cassandra.apache.org Date: Tue, 22 Mar 2016 20:52:52 -0000 Message-Id: <787390d621324ad58c02ea96eb620667@git.apache.org> In-Reply-To: <9feae047c4fb4aca998d16faefdb2b92@git.apache.org> References: <9feae047c4fb4aca998d16faefdb2b92@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [05/13] cassandra git commit: cqlsh: COPY FROM should check that explicit column names are valid cqlsh: COPY FROM should check that explicit column names are valid patch by Stefania Alborghetti; reviewed by Paulo Motta for CASSANDRA-11333 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c74df401 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c74df401 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c74df401 Branch: refs/heads/cassandra-3.0 Commit: c74df401768fe25eb80f9d328cad974c8ab220ad Parents: b06bcf7 Author: Stefania Alborghetti Authored: Wed Mar 16 17:42:54 2016 +0800 Committer: Yuki Morishita Committed: Tue Mar 22 15:49:20 2016 -0500 ---------------------------------------------------------------------- CHANGES.txt | 1 + pylib/cqlshlib/copyutil.py | 43 +++++++++++++++++++++++++++++++---------- 2 files changed, 34 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/c74df401/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index bcdf189..e4db50e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.2.6 + * cqlsh: COPY FROM should check that explicit column names are valid (CASSANDRA-11333) * Add -Dcassandra.start_gossip startup option (CASSANDRA-10809) * Fix UTF8Validator.validate() for modified UTF-8 (CASSANDRA-10748) * Clarify that now() function is calculated on the coordinator node in CQL documentation (CASSANDRA-10900) http://git-wip-us.apache.org/repos/asf/cassandra/blob/c74df401/pylib/cqlshlib/copyutil.py ---------------------------------------------------------------------- diff --git a/pylib/cqlshlib/copyutil.py b/pylib/cqlshlib/copyutil.py index 2755dd5..d08a4fd 100644 --- a/pylib/cqlshlib/copyutil.py +++ b/pylib/cqlshlib/copyutil.py @@ -152,6 +152,7 @@ class CopyTask(object): self.shell = shell self.ks = ks self.table = table + self.table_meta = self.shell.get_table_meta(self.ks, self.table) self.local_dc = shell.conn.metadata.get_host(shell.hostname).datacenter self.fname = safe_normpath(fname) self.protocol_version = protocol_version @@ -386,6 +387,20 @@ class CopyTask(object): debug=shell.debug ) + def validate_columns(self): + shell = self.shell + + if not self.columns: + shell.printerr("No column specified") + return False + + for c in self.columns: + if c not in self.table_meta.columns: + shell.printerr('Invalid column name %s' % (c,)) + return False + + return True + def update_params(self, params, i): """ Add the communication channels to the parameters to be passed to the worker process: @@ -515,8 +530,7 @@ class ExportTask(CopyTask): shell.printerr('Unrecognized COPY TO options: %s' % ', '.join(self.options.unrecognized.keys())) return - if not self.columns: - shell.printerr("No column specified") + if not self.validate_columns(): return 0 ranges = self.get_ranges() @@ -987,7 +1001,6 @@ class ImportTask(CopyTask): options = self.options self.skip_columns = [c.strip() for c in self.options.copy['skipcols'].split(',')] self.valid_columns = [c for c in self.columns if c not in self.skip_columns] - self.table_meta = self.shell.get_table_meta(self.ks, self.table) self.receive_meter = RateMeter(log_fcn=self.printmsg, update_interval=options.copy['reportfrequency'], log_file=options.copy['ratefile']) @@ -1001,6 +1014,22 @@ class ImportTask(CopyTask): ret['valid_columns'] = self.valid_columns return ret + def validate_columns(self): + if not CopyTask.validate_columns(self): + return False + + shell = self.shell + if not self.valid_columns: + shell.printerr("No valid column specified") + return False + + for c in self.table_meta.primary_key: + if c.name not in self.valid_columns: + shell.printerr("Primary key column '%s' missing or skipped" % (c.name,)) + return False + + return True + def run(self): shell = self.shell @@ -1008,15 +1037,9 @@ class ImportTask(CopyTask): shell.printerr('Unrecognized COPY FROM options: %s' % ', '.join(self.options.unrecognized.keys())) return - if not self.valid_columns: - shell.printerr("No column specified") + if not self.validate_columns(): return 0 - for c in self.table_meta.primary_key: - if c.name not in self.valid_columns: - shell.printerr("Primary key column '%s' missing or skipped" % (c.name,)) - return 0 - self.printmsg("\nStarting copy of %s.%s with columns %s." % (self.ks, self.table, self.valid_columns)) try: