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