TDBO - Tcl DataBase Object
TDBO is a Tcl package, named tdbo, that provides an object oriented access to records (or tuples) in a table/view of a Relational Database Management Systems. It provides a framework to abstract schema definition of a table/view in a data-access-object class (e.g., Employee, PurchaseItem etc.). At any given point in time, a data-access-object instance maps to a record in a table. Data-access-objects can make use of
add
, get
, save
and delete
methods to perform CRUD operations on records of a table/view.
TDBO supports connectivity to SQLite, MySQL / MariaDB and PostgreSQL database systems. However, it is designed to plugin support for other database systems easily. Support for other databases will be added in future.
TDBO package can be obtained from GitHub: https://github.com/nagarajanchinnasamy/tdbo. If you would like to contribute by adding support to a new database, please send in your pull request.
Dependency
TDBO is based on IncrTcl, an object oriented extension of Tcl. TDBO depends on installation of following Tcl packages:
- Tcl 8.5 or later
- logger (part of Tcllib)
- IncrTcl
- SQLite 3 and sqlite3 Tcl package (for SQLite database connectivity)
- MySQL / MariaDB and mysqltcl (for MySQL / MariaDB database connectivity)
- PostgreSQL and Pgtcl package (for PostgreSQL database connectivity)
Getting Started
Simple steps to use this package are:
- Load tdbo package using: package require tdbo
- Define your application object by inheriting tdbo::DBObject
# Employee Definition itcl::class Employee { inherit tdbo::DBObject # db argument is an instance of tdbo::SQLite class constructor {db args} {tdbo::DBObject::constructor $db} { configure {*}$args } # Implementing this proc is mandatory to return # name of the table/view. proc schema_name {} { return "employeeTable" } # public variables correspond to fields in the database table public variable id public variable name public variable rollno # define primary key, unique and sequence/autoincrement fields protected method _define_primarykey {} { define_primarykey id } protected method _define_autoincrement {} { define_autoincrement id } protected method _define_unique {} { define_unique {rollno} } }
- Now in your main application, instantiate a database connectivity implementation:
set db [tdbo::SQLite #auto -location mytest/test.db] $db open
- Create instances of Employee and start using it transparently:
Employee emp $db -name "new employee" -rollno "MK12345" # insert the record. After addition the id is automatically populated. emp1 add # modify the record emp1 configure -name "new updated employee" emp1 save # delete the record emp1 delete # query about another employee with rollno "MK67890" emp clear emp configure -rollno "MK67890" emp get puts [emp cget]
For more details please refer to the documentation in doc folder and examples in demo folder of the package.