2014-01-25 2 views
0

У меня есть таблица и видом на основании таблицы:различного поведения названия столбцов между столом и видом

require 'sequel' 

db = Sequel.sqlite 
db.create_table(:t1){ 
    String :f1 
    String :f2 
} 
db.create_view(:v1, db[:t1].select(:f1)) 

Если создать набор данных на основе таблицы, имя поля в наборе данных таблица являются то же самое (:f1):

sel = db[:t1].select(:f1) 
p sel.sql  #"SELECT `f1` FROM `t1`" 
p sel.columns#[:f1] 

Но если бы я сделать то же самое с точки зрения, имя столбца изменяется с :f1 на :"'f1'" (смотрите пример кода для правильного значения, я должен изменить немного для уценки)

sel = db[:v1].select(:f1) 
p sel.sql   #"SELECT `f1` FROM `v1`" 
p sel.columns #[:"`f1`"] 

Как я могу избежать такого поведения?

Моя среда:

  • Win 7
  • Руби 1.9.3
  • Sequel камень версия "4.6.0".
  • sqlite3-1.3.7-x86-mingw32

ответ

1

Я попробовал ваш код в консоли рельсы в новом рельсы приложения (3.2.15) с продолжением добавил (4.6.0), и я не видел, что поведение. Не уверен, что, но что-то BORKED на вашей установке:

db = Sequel.sqlite 
# => #<Sequel::SQLite::Database: {:adapter=>:sqlite}> 
db.create_table(:t1){ 
    String :f1 
    String :f2 
} 
# => nil 
db.create_view(:v1, db[:t1].select(:f1)) 
# => nil 
sel = db[:t1].select(:f1) 
# => #<Sequel::SQLite::Dataset: "SELECT `f1` FROM `t1`"> 
p sel.sql 
# "SELECT `f1` FROM `t1`" 
# => "SELECT `f1` FROM `t1`" 
p sel.columns#[:f1] 
# [:f1] 
# => [:f1] 
sel = db[:v1].select(:f1) 
# => #<Sequel::SQLite::Dataset: "SELECT `f1` FROM `v1`"> 
p sel.sql 
# "SELECT `f1` FROM `v1`" 
# => "SELECT `f1` FROM `v1`" 
p sel.columns #[:"`f1`"] 
# [:f1] 
# => [:f1] 
+1

Спасибо, вы помогли мне;) Я использовал 'sqlite3-1.3.7-x86-mingw32' и обновлена' sqlite3-1.3.8-x86- mingw32' - Теперь моя проблема исчезла. – knut

+0

рад, что смогу помочь –

+0

Причина, по которой он работает с sqlite3-1.3.8-x86-mingw32, а не предыдущей версией, заключается в том, что они обновили встроенный SQLite с 3.7.13 до 3.7.17 (я думаю). Это была ошибка в более старых версиях SQLite. –

Смежные вопросы