File: database.tcl

package info (click to toggle)
pfm 2.0.8-3
  • links: PTS
  • area: main
  • in suites: bookworm, bullseye, buster, sid, trixie
  • size: 1,032 kB
  • sloc: tcl: 5,486; sql: 4,835; makefile: 29; sh: 1
file content (124 lines) | stat: -rw-r--r-- 3,891 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# database.tcl

proc getFormsReports {db tabType} {
	switch $tabType {
		forms {
			set query "SELECT name FROM pfm_form WHERE showform ORDER BY name"
		}
		design {
			set query "SELECT name FROM pfm_form WHERE NOT showform ORDER BY name"
		}
		reports {
			set query "SELECT name, description FROM pfm_report ORDER BY name"
		}
	}
	if {![$db select_query_list $query numTuples headerList formsList errorMsg]} then {
		set formsList {}
		# pfm_message [mc getFormList $errorMsg] {.}
	}
	return $formsList
}

proc getFormDef {db formName parent formDefName} {
	upvar $formDefName formDef
	set query {SELECT name, tablename, sqlselect, sqlfrom, groupby, showform, }
	append query {"view", pkey, sqlorderby, sqllimit }
	append query {FROM pfm_form }
	append query "WHERE name = '$formName'"
	if {[$db select_query_list $query numTuples attribList resultList errorMsg]} then {
		if {$numTuples == 1} then {
			set status 1
			set idx 0
			foreach attrib $attribList {
				set formDef($attrib) [lindex $resultList 0 $idx]
				incr idx
			}
		} else {
			pfm_message [mc getFormFailed $formName "numTuples = $numTuples"] $parent
			set status 0
		}
	} else {
		pfm_message [mc getFormFailed $formName $errorMsg] $parent
		set status 0
	}
	return $status
}

proc getAttribDef {db formName parent attribDefName attribListName modAttribListName} {
	upvar $attribDefName attribDef
	upvar $attribListName attribList
	upvar $modAttribListName modAttribList
	set attribList {}
	set modAttribList {}
	set query {SELECT attribute, typeofattrib, typeofget, sqlselect, nr, valuelist, "default" }
	append query "FROM pfm_attribute WHERE form = '${formName}' "
	append query {ORDER BY nr}
	if {[$db select_query $query numTuples resultArray errorMsg]} then {
		set status 1
		for {set tuple 0} {$tuple < $numTuples} {incr tuple} {
			set attrib [string trim $resultArray($tuple,attribute)]
			lappend attribList $attrib
			foreach property {typeofattrib typeofget sqlselect nr valuelist default} {
				set attribDef($attrib,$property) \
					[string trim $resultArray($tuple,$property)]
			}
			if {($attribDef($attrib,typeofget) ne {tgReadOnly}) || \
				($attribDef($attrib,default) ne {})} then {
					lappend modAttribList $attrib
			}
		}
	} else {
		pfm_message [mc getAttribFailed $formName $errorMsg] $parent
		set status 0
	}
	return $status
}

proc getLinkDef {db formName parent linkDefName lastLinkName} {
	upvar $linkDefName linkDef
	upvar $lastLinkName lastLink
	set query {SELECT linkname, sqlwhere, orderby, displayattrib, toform}
	append query " FROM pfm_link WHERE fromform = '$formName'"
	append query { ORDER BY linkname}
	if {[$db select_query $query numTuples linkDef errorMsg]} then {
		set lastLink [expr $numTuples - 1]
		set status 1
	} else {
		set status 0
		pfm_message [mc getLinkDefFailed $formName $errorMsg] $parent
	}
	return $status
}

proc check_pfm_tables {tablesInstalledName dbVersionName} {
	upvar $tablesInstalledName tablesInstalled
	upvar $dbVersionName dbVersion

	set query {SELECT COUNT(*) AS nr_of_tables FROM pg_tables }
	append query {WHERE tablename IN ('pfm_form', 'pfm_attribute', }
	append query {'pfm_value', 'pfm_value_list', 'pfm_link', }
	append query {'pfm_report', 'pfm_section')}
	if {[$::dbObject select_query_list $query numTuples names \
			resultList errMsg]} then {
		set tablesInstalled [lindex $resultList 0 0]
		if {$tablesInstalled > 0} then {
			set query {SELECT version FROM pfm_version ORDER BY seqnr DESC}
			if {[$::dbObject select_query_list $query numTuples names \
					resultList errMsg]} then {
				set dbVersion [lindex $resultList 0 0]
			} else {
				# versions 1.0.4 and earlier did not have pfm_version table
				set dbVersion {1.0.4}
				pfm_message "${query}\n${errMsg}" {.}
			}
		} else {
			set dbVersion {}
		}
	} else {
		set dbVersion {}
		set tablesInstalled 0
		pfm_message "${query}\n${errMsg}" {.}
	}
	return
}