sqlbench 0.1.61__tar.gz → 0.1.62__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sqlbench-0.1.61 → sqlbench-0.1.62}/PKG-INFO +1 -1
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/qt/tabs/sql_tab.py +20 -6
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/version.py +1 -1
- {sqlbench-0.1.61 → sqlbench-0.1.62}/.github/workflows/pypi-publish.yml +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/.gitignore +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/CLAUDE.md +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/Makefile +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/PYQT_MIGRATION_FEATURES.md +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/README.md +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/pyproject.toml +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/requirements.txt +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/__init__.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/__main__.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/adapters.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/app.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/database.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/dialogs/__init__.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/dialogs/connection_dialog.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/dialogs/regex_builder_dialog.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/launcher.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/qt/__init__.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/qt/connection_tree.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/qt/dialogs/__init__.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/qt/dialogs/connection_dialog.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/qt/dialogs/query_manager_dialog.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/qt/dialogs/record_viewer_dialog.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/qt/dialogs/regex_builder_dialog.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/qt/dialogs/settings_dialog.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/qt/icons.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/qt/main_window.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/qt/syntax.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/qt/tab_widget.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/qt/tabs/__init__.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/qt/tabs/spool_tab.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/qt/theme.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/resources/db_ibmi.png +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/resources/db_mysql.png +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/resources/db_postgresql.png +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/resources/db_unknown.png +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/resources/sqlbench.png +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/tabs/__init__.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/tabs/spool_tab.py +0 -0
- {sqlbench-0.1.61 → sqlbench-0.1.62}/sqlbench/tabs/sql_tab.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlbench
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.62
|
|
4
4
|
Summary: A multi-database SQL workbench with support for IBM i, MySQL, and PostgreSQL
|
|
5
5
|
Project-URL: Homepage, https://github.com/jpsteil/sqlbench
|
|
6
6
|
Project-URL: Repository, https://github.com/jpsteil/sqlbench
|
|
@@ -134,7 +134,7 @@ def _make_icon(shape: str, color: str = "#ddd", size: int = 18) -> QIcon:
|
|
|
134
134
|
class QueryWorker(QThread):
|
|
135
135
|
"""Background thread for query execution."""
|
|
136
136
|
|
|
137
|
-
finished = pyqtSignal(object, object, float, float, int) # results, description, exec_time, fetch_time, total_rows
|
|
137
|
+
finished = pyqtSignal(object, object, float, float, int, int) # results, description, exec_time, fetch_time, total_rows, rowcount
|
|
138
138
|
error = pyqtSignal(str)
|
|
139
139
|
row_count = pyqtSignal(int)
|
|
140
140
|
|
|
@@ -212,16 +212,17 @@ class QueryWorker(QThread):
|
|
|
212
212
|
description = cursor.description
|
|
213
213
|
if total_rows == 0:
|
|
214
214
|
total_rows = len(rows)
|
|
215
|
+
rowcount = 0
|
|
215
216
|
else:
|
|
216
217
|
rows = []
|
|
217
218
|
description = None
|
|
218
|
-
|
|
219
|
+
rowcount = cursor.rowcount if cursor.rowcount >= 0 else 0
|
|
219
220
|
|
|
220
221
|
fetch_time = time.time() - fetch_start
|
|
221
222
|
cursor.close()
|
|
222
223
|
|
|
223
224
|
if not self._cancelled:
|
|
224
|
-
self.finished.emit(rows, description, exec_time, fetch_time, total_rows)
|
|
225
|
+
self.finished.emit(rows, description, exec_time, fetch_time, total_rows, rowcount)
|
|
225
226
|
|
|
226
227
|
except Exception as e:
|
|
227
228
|
if not self._cancelled:
|
|
@@ -1463,7 +1464,7 @@ class SQLTab(QWidget):
|
|
|
1463
1464
|
|
|
1464
1465
|
def _on_query_finished(self, rows: List, description: Any,
|
|
1465
1466
|
exec_time: float, fetch_time: float,
|
|
1466
|
-
total_rows: int = 0) -> None:
|
|
1467
|
+
total_rows: int = 0, rowcount: int = 0) -> None:
|
|
1467
1468
|
"""Handle query completion."""
|
|
1468
1469
|
self._exit_script_mode()
|
|
1469
1470
|
self._reset_buttons()
|
|
@@ -1471,11 +1472,12 @@ class SQLTab(QWidget):
|
|
|
1471
1472
|
# Log to database
|
|
1472
1473
|
try:
|
|
1473
1474
|
db = _get_db()
|
|
1475
|
+
log_row_count = len(rows) if rows else rowcount
|
|
1474
1476
|
db.log_query(
|
|
1475
1477
|
self.connection_name,
|
|
1476
1478
|
self._last_sql,
|
|
1477
1479
|
duration=exec_time + fetch_time,
|
|
1478
|
-
row_count=
|
|
1480
|
+
row_count=log_row_count,
|
|
1479
1481
|
status="success"
|
|
1480
1482
|
)
|
|
1481
1483
|
except Exception as e:
|
|
@@ -1511,6 +1513,18 @@ class SQLTab(QWidget):
|
|
|
1511
1513
|
f"Showing {start:,}-{end:,} of {self._total_rows:,} row(s) "
|
|
1512
1514
|
f"(Page {self._current_page} of {total_pages}){edit_status}"
|
|
1513
1515
|
)
|
|
1516
|
+
elif description is None and rowcount >= 0:
|
|
1517
|
+
# Non-SELECT statement (UPDATE/DELETE/INSERT)
|
|
1518
|
+
sql_upper = self._last_sql.strip().upper()
|
|
1519
|
+
if sql_upper.startswith("INSERT"):
|
|
1520
|
+
status = f"{rowcount} row(s) inserted"
|
|
1521
|
+
elif sql_upper.startswith("UPDATE"):
|
|
1522
|
+
status = f"{rowcount} row(s) updated"
|
|
1523
|
+
elif sql_upper.startswith("DELETE"):
|
|
1524
|
+
status = f"{rowcount} row(s) deleted"
|
|
1525
|
+
else:
|
|
1526
|
+
status = f"{rowcount} row(s) affected"
|
|
1527
|
+
self.results_status.setText(status)
|
|
1514
1528
|
else:
|
|
1515
1529
|
self.results_status.setText("No results")
|
|
1516
1530
|
|
|
@@ -1655,7 +1669,7 @@ class SQLTab(QWidget):
|
|
|
1655
1669
|
|
|
1656
1670
|
def _on_page_loaded(self, rows: List, description: Any,
|
|
1657
1671
|
exec_time: float, fetch_time: float,
|
|
1658
|
-
total_rows: int = 0) -> None:
|
|
1672
|
+
total_rows: int = 0, rowcount: int = 0) -> None:
|
|
1659
1673
|
"""Handle page load completion."""
|
|
1660
1674
|
self._exit_script_mode()
|
|
1661
1675
|
self._reset_buttons()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|