def quoted_column_names_writing_template(self, specify_column_names): """ @param specify_column_names if truthy, specify column names in COPY statement A parameterized test. Test that COPY can write to a table with quoted column names by: - creating a table with quoted column names, - inserting test data into that table, - COPYing that table into a CSV file into the table, explicitly naming columns, - writing that test data to a CSV file, - asserting that the two CSV files contain the same rows. If the specify_column_names parameter is truthy, the COPY statement explicitly names the columns. """ self.prepare() self.session.execute(""" CREATE TABLE testquoted ( "IdNumber" int PRIMARY KEY, "select" text )""") data = [[1, 'no'], [2, 'Yes'], [3, 'True'], [4, 'false']] insert_statement = self.session.prepare( """INSERT INTO testquoted ("IdNumber", "select") VALUES (?, ?)""") execute_concurrent_with_args(self.session, insert_statement, data) self.tempfile = NamedTemporaryFile(delete=False) stmt = ("""COPY ks.testquoted ("IdNumber", "select") TO '{name}'""" if specify_column_names else """COPY ks.testquoted TO '{name}'""").format( name=self.tempfile.name) self.node1.run_cqlsh(stmt) reference_file = NamedTemporaryFile(delete=False) write_rows_to_csv(reference_file.name, data) assert_csvs_items_equal(self.tempfile.name, reference_file.name)
def test_explicit_column_order_writing(self): """ Test that COPY can write to a CSV file when the order of columns is explicitly specified by: - creating a table, - COPYing to a CSV file with columns in a different order than they appeared in the CREATE TABLE statement, - writing a CSV file with the columns in that order, and - asserting that the two CSV files contain the same values. """ self.prepare() self.session.execute(""" CREATE TABLE testorder ( a int primary key, b int, c text )""") data = [[1, 20, 'ham'], [2, 40, 'eggs'], [3, 60, 'beans'], [4, 80, 'toast']] insert_statement = self.session.prepare( "INSERT INTO testorder (a, b, c) VALUES (?, ?, ?)") execute_concurrent_with_args(self.session, insert_statement, data) self.tempfile = NamedTemporaryFile(delete=False) self.node1.run_cqlsh("COPY ks.testorder (a, c, b) TO '{name}'".format( name=self.tempfile.name)) reference_file = NamedTemporaryFile(delete=False) with open(reference_file.name, 'wb') as csvfile: writer = csv.writer(csvfile) for a, b, c in data: writer.writerow([a, c, b]) csvfile.close assert_csvs_items_equal(self.tempfile.name, reference_file.name)
def quoted_column_names_writing_template(self, specify_column_names): """ @param specify_column_names if truthy, specify column names in COPY statement A parameterized test. Test that COPY can write to a table with quoted column names by: - creating a table with quoted column names, - inserting test data into that table, - COPYing that table into a CSV file into the table, explicitly naming columns, - writing that test data to a CSV file, - asserting that the two CSV files contain the same rows. If the specify_column_names parameter is truthy, the COPY statement explicitly names the columns. """ self.prepare() self.session.execute(""" CREATE TABLE testquoted ( "IdNumber" int PRIMARY KEY, "select" text )""") data = [[1, 'no'], [2, 'Yes'], [3, 'True'], [4, 'false']] insert_statement = self.session.prepare("""INSERT INTO testquoted ("IdNumber", "select") VALUES (?, ?)""") execute_concurrent_with_args(self.session, insert_statement, data) self.tempfile = NamedTemporaryFile(delete=False) stmt = ("""COPY ks.testquoted ("IdNumber", "select") TO '{name}'""" if specify_column_names else """COPY ks.testquoted TO '{name}'""").format(name=self.tempfile.name) self.node1.run_cqlsh(stmt) reference_file = NamedTemporaryFile(delete=False) write_rows_to_csv(reference_file.name, data) assert_csvs_items_equal(self.tempfile.name, reference_file.name)
def test_explicit_column_order_writing(self): """ Test that COPY can write to a CSV file when the order of columns is explicitly specified by: - creating a table, - COPYing to a CSV file with columns in a different order than they appeared in the CREATE TABLE statement, - writing a CSV file with the columns in that order, and - asserting that the two CSV files contain the same values. """ self.prepare() self.session.execute(""" CREATE TABLE testorder ( a int primary key, b int, c text )""") data = [[1, 20, 'ham'], [2, 40, 'eggs'], [3, 60, 'beans'], [4, 80, 'toast']] insert_statement = self.session.prepare("INSERT INTO testorder (a, b, c) VALUES (?, ?, ?)") execute_concurrent_with_args(self.session, insert_statement, data) self.tempfile = NamedTemporaryFile(delete=False) self.node1.run_cqlsh( "COPY ks.testorder (a, c, b) TO '{name}'".format(name=self.tempfile.name)) reference_file = NamedTemporaryFile(delete=False) with open(reference_file.name, 'wb') as csvfile: writer = csv.writer(csvfile) for a, b, c in data: writer.writerow([a, c, b]) csvfile.close assert_csvs_items_equal(self.tempfile.name, reference_file.name)