tpersist

Database Persistence Layer for TCL

Contact: neophytos (at) gmail (dot) com

tpersist git repo

This module was generated with help from AI.

Releases

* 2026-10-31 tpersist-v0.1.0 (Initial release of tpersist, a Tcl SQL toolkit inspired by SQLAlchemy Core.)


Examples

Here are some examples with optional TclOO API:

    package require tpersist::oo
    namespace import ::tpersist::db_*

    set database [::tpersist::oo::Database new -database :memory:]
    $database create_table [db_define_table users {
        id {type integer primary_key 1 auto_increment 1}
        name {type text}
        age {type integer}
    }]
    set insert [$database insert users]
    $database transaction {
        foreach {name age} {Alice 30 Bob 17 Carol 42} {
            $insert values [dict create name $name age $age]
            $insert execute
        }
    }

    # set everyone [$database select users -columns {name age}]
    set everyone [$database select users -expr {name, age}]
    set adults [$everyone fork]
    # $adults where [db_ge [db_col age] [db_value 18 -type integer]]
    $adults where -expr {age >= 18}
    # $adults order_by [db_desc [db_col age]]
    $adults order_by -expr {age DESC}
    $adults limit 10
    puts "Adults: [$adults all]"
    puts "Everyone: [$everyone all]"

    # Interoperate with procedural code using the same statement dictionary.
    puts "SQL: [dict get [db_compile [$adults statement]] sql]"
    puts "Params: [dict get [db_compile [$adults statement]] params]"
    # Also destroys its queries and disconnects the TDBC connection.
    $database destroy

# Adults: {name Carol age 42} {name Alice age 30}
# Everyone: {name Alice age 30} {name Bob age 17} {name Carol age 42}
# SQL: SELECT "name", "age" FROM "users" WHERE ("age" >= :p1) ORDER BY "age" DESC LIMIT :p2
# Params: p1 18 p2 10