Запрос работает в Sqlite со строками.Когда VAR передается на запрос в Tcl, он ломается - PullRequest
0 голосов
/ 16 июля 2010

У меня есть база данных Sqlite notes со схемой Toxi (таблица Notes, таблица Tags, таблица Note-has-Tag, называемая "fkeys")Есть другая нить, которая идет в это, и запрос этого, это очень подробно.Интерфейс или "front end" - это скрипт Tcl, запускаемый из Tclsh.Версия Tcl работает просто отлично, если у меня только 1 аргумент и нет INTERSECT.В SqliteManager работает INTERSECT (но 2 аргумента заменяются литеральными строками).Почему это ломается?Сначала сообщение об ошибке:

% can't read "rowid": no such variable

, затем код:

proc gn {args} {

package require sqlite3
sqlite3 db jaysnotes.sqlite

set tagsofar [db eval {select tag_text from tag}]
puts "Tags so far: $tagsofar"

if {$args eq ""} {
puts "Enter 1 or more tags separated by spaces"
gets stdin taglist
} else {
set taglist $args}

set taglist [split $taglist " "]

# note (note_txt, timestamp)
# tag (tag_text)
# fkeys (note_id ,tag_id)


set srchtxt0 [lindex $taglist 0]
if {[llength $taglist] > 1}  {
set srchtxt1 [lindex $taglist 1]
} else {set srchtxt1 $srchtxt0}

db eval {
  SELECT DISTINCT n.rowid, n.note_txt, n.timestamp
  FROM note n
  JOIN fkeys f
  ON n.rowid = f.note_id
  JOIN tag t
  ON t.rowid = f.tag_id
  WHERE t.tag_text = $srchtxt0
INTERSECT  
  SELECT DISTINCT n.rowid, n.note_txt, n.timestamp
  FROM note n
  JOIN fkeys f
  ON n.rowid = f.note_id
  JOIN tag t
  ON t.rowid = f.tag_id
  WHERE t.tag_text = $srchtxt1      

  ORDER BY timestamp;} {puts "NOTE $rowid: $note_txt"
            puts "DATE: $timestamp\n"}

}

1 Ответ

0 голосов
/ 16 июля 2010

Не берите в голову, как только я изменил 2 строки, чтобы "как ....", вот так:

 SELECT DISTINCT n.rowid as rowid, n.note_txt as note_txt, n.timestamp as timestamp

Все работало.Извините, что потратил ваше время.Надеюсь, кому-то это выгодно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...