Build result rows to be given to the template
authorKarl O. Pinc <kop@karlpinc.com>
Fri, 16 Aug 2024 22:59:52 +0000 (17:59 -0500)
committerKarl O. Pinc <kop@karlpinc.com>
Fri, 16 Aug 2024 22:59:52 +0000 (17:59 -0500)
src/pgwui_sql/views/sql.py

index 8a64811e96c2f19eef158e090495e47ce6d40a61..e55733a88ae85854752e902969faadbbbf229aee 100644 (file)
@@ -79,10 +79,30 @@ class SQLForm(pgwui_core.forms.UploadFormBaseMixin,
 
 @attrs.define()
 class SQLResult():
-    pass
+    data = attrs.field(default=None)
+    type = attrs.field(default=None)
+
+    def build_statusmessage_row(self, cur):
+        self.type = 'status'
+        self.data = cur.statusmessage
+        return self
+
+    def build_rowcount_row(self, cur):
+        self.type = 'status'
+        self.data = f'{cur.rowcount} rows affected'
+        return self
+
+    def build_data_row(self, data):
+        self.type = 'data'
+        self.data = data
+        return self
+
+    def build_header_row(self, cur):
+        self.type = 'header'
+        self.data = [col.name for col in cur.description]
+        return self
 
 
-@attrs.define()
 class ExecuteSQL(pgwui_core.core.DataLineProcessor):
     '''
     Attributes:
@@ -104,12 +124,17 @@ class ExecuteSQL(pgwui_core.core.DataLineProcessor):
         cur = self.cur
         cur.execute(self.uf.data)
 
+        sql_results = self.uh.sql_results
         nextset = True
         while nextset is True:
+            first = True
             while (row := cur.fetchone()) is not None:
-                sql_result = SQLResult()
-                sql_result.build(cur, row)
-                self.uh.sql_results.append(sql_result)
+                if first:
+                    sql_results.append(SQLResult().build_header_row(cur))
+                    first = False
+                sql_results.append(SQLResult().build_data_row(row))
+            sql_results.append(SQLResult().build_statusmessage_row(cur))
+            sql_results.append(SQLResult().build_rowcount_row(cur))
             nextset = cur.nextset()