Skip to content

Feat/ODBC Browser, History Table ODBC, New Parameter Table#2063

Open
MatthewReed303 wants to merge 21 commits intofrangoteam:masterfrom
MatthewReed303:feat/odbc-browser
Open

Feat/ODBC Browser, History Table ODBC, New Parameter Table#2063
MatthewReed303 wants to merge 21 commits intofrangoteam:masterfrom
MatthewReed303:feat/odbc-browser

Conversation

@MatthewReed303
Copy link
Collaborator

ODBC Browser and Enhanced Table Features

This PR introduces comprehensive ODBC database integration and enhanced table functionality to FUXA SCADA.

Key Features Added:

ODBC Browser

  • New ODBC browser component for database exploration and query building
  • Support for browsing database schemas, tables, and columns
  • Query builder service with SQL syntax assistance
  • Column definition analysis (types, constraints, relationships)

Database Integration

  • ODBC driver handling and database connection support
  • Date formatting utilities for ODBC queries
  • Enhanced DB support with proper data type handling

New Parameter Table Type

  • Complete parameter table implementation with full backend support
  • CRUD operations for parameter management
  • SQLite and ODBC datasource integration
  • Auto-write functionality on application startup

Table Enhancements

  • Improved history table with chunked data loading for large datasets
  • Hash-based data integrity checks
  • Enhanced UI with better styling and user experience
  • Optimized large data handling and auto-refresh capabilities

Technical Changes:

  • Added ODBC device runtime support for different database types
  • New API endpoints for parameter table management
  • Enhanced table components with advanced features
  • Improved data persistence and caching mechanisms

MatthewReed303 and others added 21 commits October 30, 2025 10:02
- Add separate toolbar color properties (background, text, button) distinct from header colors
- Update all toolbar elements (buttons, selectors, filter, paginator) to use toolbar colors
- Add row selection tag setting with proper typing: bool for selection state, number for row index, JSON string for row data
- Add hover/focus effects for filter input matching toolbar styling
- Reorganize property panel with toolbar section after row settings
- Add translations for new toolbar color properties
- Various styling improvements and consistency fixes
…tions

Co-authored-by: MatthewReed303 <63492864+MatthewReed303@users.noreply.github.com>
Co-authored-by: MatthewReed303 <63492864+MatthewReed303@users.noreply.github.com>
Co-authored-by: MatthewReed303 <63492864+MatthewReed303@users.noreply.github.com>
Co-authored-by: MatthewReed303 <63492864+MatthewReed303@users.noreply.github.com>
…ion interface

Co-authored-by: MatthewReed303 <63492864+MatthewReed303@users.noreply.github.com>
@concept10
Copy link
Contributor

500,000 LOC on this PR. Wow (ridiculous IMO no matter the added functionality) but that's just me.

@unocelli
Copy link
Member

Nice work on this feature — it’s a pretty big addition 👍

As a first pass, I’d fix a couple of high-level things before we go deeper:

1. Build artifacts

Please remove the generated build files from the PR.

2. Security (ODBC / DB access)

Since this introduces quite a bit of database and ODBC logic, we should double-check the security side — especially how queries are handled on the server.

Where possible, we should prefer parameterized queries instead of building SQL strings dynamically. For example:

const query = `SELECT * FROM users WHERE id = ${userId}`;

would be safer as:

const query = `SELECT * FROM users WHERE id = ?`;
const result = await connection.query(query, [userId]);

This way the driver handles escaping and we reduce injection risks.
For dynamic identifiers (like table names), we should make sure they are resolved server-side from a controlled source rather than trusting raw client input.

3. ODBC device access

The API lets the client choose the storage type and ODBC device. We should make sure this follows the same authorization pattern used in similar endpoints — i.e. enforce the check when authorization is configured, just like we do elsewhere.

Once this is clarified/adjusted, we can go through the implementation in more detail.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants