mirror of
https://github.com/discourse/discourse.git
synced 2024-11-24 20:51:50 +08:00
5f64fd0a21
Introduce new patterns for direct sql that are safe and fast. MiniSql is not prone to memory bloat that can happen with direct PG usage. It also has an extremely fast materializer and very a convenient API - DB.exec(sql, *params) => runs sql returns row count - DB.query(sql, *params) => runs sql returns usable objects (not a hash) - DB.query_hash(sql, *params) => runs sql returns an array of hashes - DB.query_single(sql, *params) => runs sql and returns a flat one dimensional array - DB.build(sql) => returns a sql builder See more at: https://github.com/discourse/mini_sql
48 lines
1.4 KiB
Ruby
48 lines
1.4 KiB
Ruby
require "rails_helper"
|
|
|
|
describe HasSearchData do
|
|
context "belongs to its model" do
|
|
before do
|
|
DB.exec("create temporary table model_items(id SERIAL primary key)")
|
|
DB.exec("create temporary table model_item_search_data(model_item_id int primary key, search_data tsvector, raw_data text, locale text)")
|
|
|
|
class ModelItem < ActiveRecord::Base
|
|
has_one :model_item_search_data, dependent: :destroy
|
|
end
|
|
|
|
class ModelItemSearchData < ActiveRecord::Base
|
|
include HasSearchData
|
|
end
|
|
end
|
|
|
|
after do
|
|
DB.exec("drop table model_items")
|
|
DB.exec("drop table model_item_search_data")
|
|
|
|
# import is making my life hard, we need to nuke this out of orbit
|
|
des = ActiveSupport::DescendantsTracker.class_variable_get :@@direct_descendants
|
|
des[ActiveRecord::Base].delete(ModelItem)
|
|
des[ActiveRecord::Base].delete(ModelItemSearchData)
|
|
end
|
|
|
|
let(:item) do
|
|
item = ModelItem.create!
|
|
item.create_model_item_search_data!(
|
|
model_item_id: item.id,
|
|
search_data: 'a',
|
|
raw_data: 'a',
|
|
locale: 'en')
|
|
item
|
|
end
|
|
|
|
it 'sets its primary key into asscoiated model' do
|
|
expect(ModelItemSearchData.primary_key).to eq 'model_item_id'
|
|
end
|
|
|
|
it 'can access the model' do
|
|
record_id = item.id
|
|
expect(ModelItemSearchData.find_by(model_item_id: record_id).model_item_id).to eq record_id
|
|
end
|
|
end
|
|
end
|