Posted to tcl by tomk at Tue Nov 16 02:41:33 GMT 2010view pretty
package require TclOO package require sqlite3 package require tdbc::sqlite3 ## ## CREATE DATABASES ## ::tdbc::sqlite3::connection create db [file normalize [file join . db.sqlite3]] ## ## JOINS ## puts "" set stmtHandle [db prepare { CREATE TABLE department ( DepartmentID int UNIQUE, DepartmentName varchar(25) ); CREATE TABLE employee ( LastName varchar(25), DepartmentID int, FOREIGN KEY (DepartmentID) REFERENCES department(DepartmentID) ); }] ${stmtHandle} execute set recs { {31 Sales} {33 Engineering} {34 Clerical} {35 Marketing} } set stmtHandle [db prepare {INSERT INTO department VALUES(:id,:name)}] foreach rec ${recs} { lassign ${rec} id name ${stmtHandle} execute } set recs { {Rafferty 31} {Jones 33} {Steinberg 33} {Robinson 34} {Smith 34} {John NULL} } set stmtHandle [db prepare {INSERT INTO employee VALUES(:name,:id)}] foreach rec ${recs} { lassign ${rec} name id ${stmtHandle} execute } puts "- employee -" puts [join [db allrows -as lists -- {SELECT * FROM employee}] \n] puts "- department -" puts [join [db allrows -as lists -- {SELECT * FROM department}] \n] puts "- inner join -" puts [join [db allrows -as lists -- { SELECT employee.LastName, employee.DepartmentID, department.DepartmentName, department.DepartmentID FROM employee INNER JOIN department ON employee.DepartmentID=department.DepartmentID }] \n] puts "- cross join -" puts [join [db allrows -as lists -- { SELECT employee.LastName, employee.DepartmentID, department.DepartmentName, department.DepartmentID FROM employee JOIN department; }] \n] ## ## DELETE TABLES ## set stmtHandle [db prepare { DROP TABLE t1; DROP TABLE t2; }] ## ## RESULT ## if 0 { [tom]$ tclsh main2.tcl - employee - Rafferty 31 Jones 33 Steinberg 33 Robinson 34 Smith 34 John NULL - department - 31 Sales 33 Engineering 34 Clerical 35 Marketing - inner join - Rafferty 31 Sales 31 Jones 33 Engineering 33 Steinberg 33 Engineering 33 Robinson 34 Clerical 34 Smith 34 Clerical 34 - cross join - Rafferty 31 Sales 31 Rafferty 33 Engineering 33 Rafferty 34 Clerical 34 Rafferty 35 Marketing 35 Jones 31 Sales 31 Jones 33 Engineering 33 Jones 34 Clerical 34 Jones 35 Marketing 35 Steinberg 31 Sales 31 Steinberg 33 Engineering 33 Steinberg 34 Clerical 34 Steinberg 35 Marketing 35 Robinson 31 Sales 31 Robinson 33 Engineering 33 Robinson 34 Clerical 34 Robinson 35 Marketing 35 Smith 31 Sales 31 Smith 33 Engineering 33 Smith 34 Clerical 34 Smith 35 Marketing 35 John 31 Sales 31 John 33 Engineering 33 John 34 Clerical 34 John 35 Marketing 35 [tom]$ }