lib/qreport/report_runner.rb in qreport-0.0.6 vs lib/qreport/report_runner.rb in qreport-0.0.7

- old
+ new

@@ -22,23 +22,23 @@ @arguments = report_run.arguments || { } @error = @error_1 = @error_2 = nrows = nil Connection.current = connection - conn.transaction do - # Create a report row sequence: - run "CREATE TEMPORARY SEQUENCE qr_row_seq" - end - # Rewrite query to create result table rows: self.arguments = arguments.merge(:qr_run_id => conn.safe_sql("nextval('qr_row_seq')")) report_run.report_sql = report_sql(sql) + conn.transaction do + # Create a report row sequence: + run "DROP SEQUENCE IF EXISTS qr_row_seq" + run "CREATE TEMPORARY SEQUENCE qr_row_seq" # Infer base columns, if not specified. if report_run.base_columns.empty? infer_base_columns! end + end # Construct report_table name from column names and types: report_table = report_run.report_table unless report_run.id @@ -51,10 +51,14 @@ unless error # Run query into report table: begin conn.transaction do + # Create a report row sequence: + run "DROP SEQUENCE IF EXISTS qr_row_seq" + run "CREATE TEMPORARY SEQUENCE qr_row_seq" + unless conn.table_exists? report_table result = run "CREATE TABLE #{report_table} AS #{report_run.report_sql}", :arguments => arguments, :verbose => @verbose run "CREATE INDEX #{report_table}_i1 ON #{report_table} (qr_run_id)" run "CREATE INDEX #{report_table}_i2 ON #{report_table} (qr_run_row)" @@ -75,19 +79,21 @@ # Get the number of report run rows: unless nrows || error result = report_run._select :COLUMNS => 'COUNT(*) AS "nrows"' #, :verbose => true nrows = result.rows[0]["nrows"] || (raise Error, "cannot determine nrows") end + + run "DROP SEQUENCE IF EXISTS qr_row_seq" # pp result result = nil end # transaction rescue ::StandardError => exc @error = @error_2 = exc end # transaction end conn.transaction do - run "DROP SEQUENCE qr_row_seq" unless error_1 + run "DROP SEQUENCE IF EXISTS qr_row_seq" # Update stats: report_run.finished_at = Time.now.utc report_run.nrows = nrows.to_i report_run.error = error