aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/sql_algebra.rb2
-rw-r--r--lib/sql_algebra/extensions/base.rb54
-rw-r--r--lib/sql_algebra/extensions/hash.rb7
-rw-r--r--lib/sql_algebra/relations/relation.rb15
-rw-r--r--lib/sql_algebra/sql_builder/equals_condition_builder.rb2
-rw-r--r--lib/sql_algebra/sql_builder/order_builder.rb2
-rw-r--r--spec/integration/debug.log1581
-rw-r--r--spec/integration/scratch_spec.rb246
-rw-r--r--spec/spec_helper.rb2
-rw-r--r--spec/sql_builder/conditions_spec.rb2
-rw-r--r--spec/sql_builder/select_builder_spec.rb2
11 files changed, 287 insertions, 1628 deletions
diff --git a/lib/sql_algebra.rb b/lib/sql_algebra.rb
index 475bb23138..fbd053541c 100644
--- a/lib/sql_algebra.rb
+++ b/lib/sql_algebra.rb
@@ -34,6 +34,8 @@ require 'sql_algebra/predicates/match_predicate'
require 'sql_algebra/extensions/range'
require 'sql_algebra/extensions/object'
require 'sql_algebra/extensions/array'
+require 'sql_algebra/extensions/base'
+require 'sql_algebra/extensions/hash'
require 'sql_algebra/sql_builder/sql_builder'
require 'sql_algebra/sql_builder/select_builder'
diff --git a/lib/sql_algebra/extensions/base.rb b/lib/sql_algebra/extensions/base.rb
index 0143caf23d..0dbdef703f 100644
--- a/lib/sql_algebra/extensions/base.rb
+++ b/lib/sql_algebra/extensions/base.rb
@@ -1,15 +1,47 @@
class ActiveRecord::Base
- def self.bring_forth(record, includes = [])
- object = cache.get(record % klass.primary_key) { Klass.instantiate(record % Klass.attributes) }
- includes.each do |include|
- case include
- when Symbol
- object.send(association = include).bring_forth(record)
- when Hash
- include.each do |association, nested_associations|
- object.send(association).bring_forth(record, nested_associations)
- end
- end
+ class << self
+ def cache
+ @identity_map ||= IdentityMap.new
end
+
+ def relation
+ @relation ||= TableRelation.new(table_name)
+ end
+ end
+
+ class IdentityMap
+ def initialize
+ @map = {}
+ end
+
+ def get(record, &block)
+ @map[record] ||= yield
+ end
+ end
+end
+
+class ActiveRecord::Associations::BelongsToAssociation
+ def instantiate(record, joins = [])
+ @target = proxy_reflection.klass.instantiate(record, joins)
+ loaded
+ end
+
+ # this basically disables belongs_to from loading themselves
+ def reload
+ @target = 'hack'
+ end
+end
+
+class ActiveRecord::Associations::AssociationCollection
+ def instantiate(record, joins = [])
+ @target << proxy_reflection.klass.instantiate(record, joins)
+ loaded # technically, this isn't true. doesn't matter though
+ end
+end
+
+class ActiveRecord::Associations::HasManyThroughAssociation
+ def instantiate(record, joins = [])
+ @target << proxy_reflection.klass.instantiate(record, joins)
+ loaded # again, not really true.
end
end \ No newline at end of file
diff --git a/lib/sql_algebra/extensions/hash.rb b/lib/sql_algebra/extensions/hash.rb
new file mode 100644
index 0000000000..c83ee0d04f
--- /dev/null
+++ b/lib/sql_algebra/extensions/hash.rb
@@ -0,0 +1,7 @@
+class Hash
+ def alias(&block)
+ inject({}) do |aliased, (key, value)|
+ aliased.merge(yield(key) => value)
+ end
+ end
+end \ No newline at end of file
diff --git a/lib/sql_algebra/relations/relation.rb b/lib/sql_algebra/relations/relation.rb
index 13742cb570..8efe0c7d9f 100644
--- a/lib/sql_algebra/relations/relation.rb
+++ b/lib/sql_algebra/relations/relation.rb
@@ -1,4 +1,17 @@
class Relation
+ module Iteration
+ include Enumerable
+
+ def each(&block)
+ connection.select_all(to_s).each(&block)
+ end
+
+ def first
+ connection.select_one(to_s)
+ end
+ end
+ include Iteration
+
module Operations
def <=>(other)
InnerJoinOperation.new(self, other)
@@ -60,7 +73,7 @@ class Relation
end
end
delegate :to_s, :to => :to_sql
-
+
protected
def attributes; [] end
def joins; [] end
diff --git a/lib/sql_algebra/sql_builder/equals_condition_builder.rb b/lib/sql_algebra/sql_builder/equals_condition_builder.rb
index 70067c20ca..cfa919c34c 100644
--- a/lib/sql_algebra/sql_builder/equals_condition_builder.rb
+++ b/lib/sql_algebra/sql_builder/equals_condition_builder.rb
@@ -5,7 +5,7 @@ class EqualsConditionBuilder < SqlBuilder
end
def column(table, column, aliaz = nil)
- @operands << (aliaz ? quote(aliaz) : "#{quote_table_name(table)}.#{quote_column_name(column)}")
+ @operands << "#{quote_table_name(table)}.#{quote_column_name(column)}"
end
def value(value)
diff --git a/lib/sql_algebra/sql_builder/order_builder.rb b/lib/sql_algebra/sql_builder/order_builder.rb
index 43f705faf0..66a8cfdba9 100644
--- a/lib/sql_algebra/sql_builder/order_builder.rb
+++ b/lib/sql_algebra/sql_builder/order_builder.rb
@@ -5,7 +5,7 @@ class OrderBuilder < SqlBuilder
end
def column(table, column, aliaz = nil)
- @orders << (aliaz ? quote(aliaz) : "#{quote_table_name(table)}.#{quote_column_name(column)}")
+ @orders << "#{quote_table_name(table)}.#{quote_column_name(column)}"
end
def to_s
diff --git a/spec/integration/debug.log b/spec/integration/debug.log
index 9b5b08cc20..e69de29bb2 100644
--- a/spec/integration/debug.log
+++ b/spec/integration/debug.log
@@ -1,1581 +0,0 @@
-# Logfile created on Tue Jan 01 18:37:24 -0800 2008 by logger.rb/1.5.2.9
- SQL (0.000147) SET SQL_AUTO_IS_NULL=0
- SQL (0.010719) SHOW FIELDS FROM `users`
- SQL (0.002219) SHOW FIELDS FROM `photos`
- SQL (0.001538) SHOW FIELDS FROM `users`
- SQL (0.002551) SHOW FIELDS FROM `photos`
- SQL (0.001835) SHOW FIELDS FROM `cameras`
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.010748) SHOW FIELDS FROM `users`
- SQL (0.002223) SHOW FIELDS FROM `photos`
- SQL (0.002938) SHOW FIELDS FROM `users`
- SQL (0.002466) SHOW FIELDS FROM `photos`
- SQL (0.001493) SHOW FIELDS FROM `cameras`
- SQL (0.000116) SET SQL_AUTO_IS_NULL=0
- SQL (0.010722) SHOW FIELDS FROM `users`
- SQL (0.002196) SHOW FIELDS FROM `photos`
- SQL (0.001528) SHOW FIELDS FROM `users`
- SQL (0.001373) SHOW FIELDS FROM `photos`
- SQL (0.001372) SHOW FIELDS FROM `cameras`
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.001599) SHOW FIELDS FROM `users`
- SQL (0.012868) SHOW FIELDS FROM `photos`
- SQL (0.001681) SHOW FIELDS FROM `users`
- SQL (0.002253) SHOW FIELDS FROM `photos`
- SQL (0.002186) SHOW FIELDS FROM `cameras`
- SQL (0.000147) SET SQL_AUTO_IS_NULL=0
- SQL (0.010737) SHOW FIELDS FROM `users`
- SQL (0.002277) SHOW FIELDS FROM `photos`
- SQL (0.001517) SHOW FIELDS FROM `users`
- SQL (0.001368) SHOW FIELDS FROM `photos`
- SQL (0.001481) SHOW FIELDS FROM `cameras`
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.010719) SHOW FIELDS FROM `users`
- SQL (0.002651) SHOW FIELDS FROM `photos`
- SQL (0.001464) SHOW FIELDS FROM `users`
- SQL (0.001504) SHOW FIELDS FROM `photos`
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.010820) SHOW FIELDS FROM `users`
- SQL (0.002194) SHOW FIELDS FROM `photos`
- SQL (0.001565) SHOW FIELDS FROM `users`
- SQL (0.001282) SHOW FIELDS FROM `photos`
- SQL (0.000147) SET SQL_AUTO_IS_NULL=0
- SQL (0.010719) SHOW FIELDS FROM `users`
- SQL (0.002103) SHOW FIELDS FROM `photos`
- SQL (0.001468) SHOW FIELDS FROM `users`
- SQL (0.001526) SHOW FIELDS FROM `photos`
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.010648) SHOW FIELDS FROM `users`
- SQL (0.002458) SHOW FIELDS FROM `photos`
- SQL (0.001525) SHOW FIELDS FROM `users`
- SQL (0.001571) SHOW FIELDS FROM `photos`
- SQL (0.001274) SHOW FIELDS FROM `users`
- SQL (0.001527) SHOW FIELDS FROM `photos`
- SQL (0.000130) SET SQL_AUTO_IS_NULL=0
- SQL (0.010705) SHOW FIELDS FROM `users`
- SQL (0.002444) SHOW FIELDS FROM `photos`
- SQL (0.001608) SHOW FIELDS FROM `users`
- SQL (0.001488) SHOW FIELDS FROM `photos`
- SQL (0.001462) SHOW FIELDS FROM `users`
- SQL (0.001492) SHOW FIELDS FROM `photos`
- SQL (0.015956) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.001676) SHOW TABLES
- User Columns (0.001593) SHOW FIELDS FROM `users`
- SQL (0.000144) SET SQL_AUTO_IS_NULL=0
- SQL (0.010771) SHOW FIELDS FROM `users`
- SQL (0.002480) SHOW FIELDS FROM `photos`
- SQL (0.001474) SHOW FIELDS FROM `users`
- SQL (0.001357) SHOW FIELDS FROM `photos`
- SQL (0.011769) SHOW FIELDS FROM `users`
- SQL (0.001586) SHOW FIELDS FROM `photos`
- SQL (0.000232) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000120) SET SQL_AUTO_IS_NULL=0
- SQL (0.010804) SHOW FIELDS FROM `users`
- SQL (0.002188) SHOW FIELDS FROM `photos`
- SQL (0.001478) SHOW FIELDS FROM `users`
- SQL (0.001550) SHOW FIELDS FROM `photos`
- SQL (0.001413) SHOW FIELDS FROM `users`
- SQL (0.001515) SHOW FIELDS FROM `photos`
- SQL (0.000251) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000147) SET SQL_AUTO_IS_NULL=0
- SQL (0.010826) SHOW FIELDS FROM `users`
- SQL (0.002353) SHOW FIELDS FROM `photos`
- SQL (0.001500) SHOW FIELDS FROM `users`
- SQL (0.001522) SHOW FIELDS FROM `photos`
- SQL (0.001438) SHOW FIELDS FROM `users`
- SQL (0.001436) SHOW FIELDS FROM `photos`
- SQL (0.000266) SELECT *
-FROM users
-WHERE users.id = 1
- User Columns (0.001396) SHOW FIELDS FROM `users`
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.010772) SHOW FIELDS FROM `users`
- SQL (0.002268) SHOW FIELDS FROM `photos`
- SQL (0.001566) SHOW FIELDS FROM `users`
- SQL (0.001390) SHOW FIELDS FROM `photos`
- SQL (0.001466) SHOW FIELDS FROM `users`
- SQL (0.001600) SHOW FIELDS FROM `photos`
- SQL (0.000247) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.010742) SHOW FIELDS FROM `users`
- SQL (0.002382) SHOW FIELDS FROM `photos`
- SQL (0.001490) SHOW FIELDS FROM `users`
- SQL (0.001505) SHOW FIELDS FROM `photos`
- SQL (0.001846) SHOW FIELDS FROM `users`
- SQL (0.001491) SHOW FIELDS FROM `photos`
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.010798) SHOW FIELDS FROM `users`
- SQL (0.002447) SHOW FIELDS FROM `photos`
- SQL (0.001557) SHOW FIELDS FROM `users`
- SQL (0.001387) SHOW FIELDS FROM `photos`
- SQL (0.001469) SHOW FIELDS FROM `users`
- SQL (0.001394) SHOW FIELDS FROM `photos`
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.010727) SHOW FIELDS FROM `users`
- SQL (0.002213) SHOW FIELDS FROM `photos`
- SQL (0.001491) SHOW FIELDS FROM `users`
- SQL (0.001407) SHOW FIELDS FROM `photos`
- SQL (0.001457) SHOW FIELDS FROM `users`
- SQL (0.001529) SHOW FIELDS FROM `photos`
- SQL (0.000247) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000320) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000135) SET SQL_AUTO_IS_NULL=0
- SQL (0.010663) SHOW FIELDS FROM `users`
- SQL (0.002319) SHOW FIELDS FROM `photos`
- SQL (0.001467) SHOW FIELDS FROM `users`
- SQL (0.001319) SHOW FIELDS FROM `photos`
- SQL (0.010583) SHOW FIELDS FROM `users`
- SQL (0.001805) SHOW FIELDS FROM `photos`
- SQL (0.000290) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000271) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.010733) SHOW FIELDS FROM `users`
- SQL (0.002277) SHOW FIELDS FROM `photos`
- SQL (0.001500) SHOW FIELDS FROM `users`
- SQL (0.001387) SHOW FIELDS FROM `photos`
- SQL (0.001421) SHOW FIELDS FROM `users`
- SQL (0.001726) SHOW FIELDS FROM `photos`
- SQL (0.000261) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000261) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- Photo Columns (0.001432) SHOW FIELDS FROM `photos`
- SQL (0.000134) SET SQL_AUTO_IS_NULL=0
- SQL (0.010759) SHOW FIELDS FROM `users`
- SQL (0.002287) SHOW FIELDS FROM `photos`
- SQL (0.001424) SHOW FIELDS FROM `users`
- SQL (0.001550) SHOW FIELDS FROM `photos`
- SQL (0.001342) SHOW FIELDS FROM `cameras`
- SQL (0.001545) SHOW FIELDS FROM `users`
- SQL (0.001488) SHOW FIELDS FROM `photos`
- SQL (0.000249) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000290) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000139) SET SQL_AUTO_IS_NULL=0
- SQL (0.010766) SHOW FIELDS FROM `users`
- SQL (0.002183) SHOW FIELDS FROM `photos`
- SQL (0.001465) SHOW FIELDS FROM `users`
- SQL (0.001492) SHOW FIELDS FROM `photos`
- SQL (0.012690) SHOW FIELDS FROM `cameras`
- SQL (0.001591) SHOW FIELDS FROM `users`
- SQL (0.001740) SHOW FIELDS FROM `photos`
- SQL (0.000261) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000262) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000110) SET SQL_AUTO_IS_NULL=0
- SQL (0.010751) SHOW FIELDS FROM `users`
- SQL (0.002343) SHOW FIELDS FROM `photos`
- SQL (0.001476) SHOW FIELDS FROM `users`
- SQL (0.001513) SHOW FIELDS FROM `photos`
- SQL (0.001495) SHOW FIELDS FROM `cameras`
- SQL (0.001569) SHOW FIELDS FROM `users`
- SQL (0.001497) SHOW FIELDS FROM `photos`
- SQL (0.000249) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.028671) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.010774) SHOW FIELDS FROM `users`
- SQL (0.002229) SHOW FIELDS FROM `photos`
- SQL (0.001532) SHOW FIELDS FROM `users`
- SQL (0.001526) SHOW FIELDS FROM `photos`
- SQL (0.001463) SHOW FIELDS FROM `cameras`
- SQL (0.001558) SHOW FIELDS FROM `users`
- SQL (0.001479) SHOW FIELDS FROM `photos`
- SQL (0.000253) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000248) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000141) SET SQL_AUTO_IS_NULL=0
- SQL (0.010731) SHOW FIELDS FROM `users`
- SQL (0.002167) SHOW FIELDS FROM `photos`
- SQL (0.001370) SHOW FIELDS FROM `users`
- SQL (0.001523) SHOW FIELDS FROM `photos`
- SQL (0.001275) SHOW FIELDS FROM `cameras`
- SQL (0.001480) SHOW FIELDS FROM `users`
- SQL (0.001193) SHOW FIELDS FROM `photos`
- SQL (0.000228) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000228) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.011242) SHOW FIELDS FROM `users`
- SQL (0.001695) SHOW FIELDS FROM `photos`
- SQL (0.001744) SHOW FIELDS FROM `users`
- SQL (0.001452) SHOW FIELDS FROM `photos`
- SQL (0.001419) SHOW FIELDS FROM `cameras`
- SQL (0.001378) SHOW FIELDS FROM `users`
- SQL (0.002561) SHOW FIELDS FROM `photos`
- SQL (0.000923) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000275) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000157) SET SQL_AUTO_IS_NULL=0
- SQL (0.010515) SHOW FIELDS FROM `users`
- SQL (0.002311) SHOW FIELDS FROM `photos`
- SQL (0.002045) SHOW FIELDS FROM `users`
- SQL (0.001878) SHOW FIELDS FROM `photos`
- SQL (0.001586) SHOW FIELDS FROM `cameras`
- SQL (0.001397) SHOW FIELDS FROM `users`
- SQL (0.001944) SHOW FIELDS FROM `photos`
- SQL (0.000453) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000283) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.010759) SHOW FIELDS FROM `users`
- SQL (0.002066) SHOW FIELDS FROM `photos`
- SQL (0.001582) SHOW FIELDS FROM `users`
- SQL (0.001459) SHOW FIELDS FROM `photos`
- SQL (0.001418) SHOW FIELDS FROM `cameras`
- SQL (0.001367) SHOW FIELDS FROM `users`
- SQL (0.001849) SHOW FIELDS FROM `photos`
- SQL (0.001231) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000357) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.010706) SHOW FIELDS FROM `users`
- SQL (0.002375) SHOW FIELDS FROM `photos`
- SQL (0.001616) SHOW FIELDS FROM `users`
- SQL (0.001826) SHOW FIELDS FROM `photos`
- SQL (0.001508) SHOW FIELDS FROM `cameras`
- SQL (0.001638) SHOW FIELDS FROM `users`
- SQL (0.001719) SHOW FIELDS FROM `photos`
- SQL (0.001674) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000337) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000114) SET SQL_AUTO_IS_NULL=0
- SQL (0.010717) SHOW FIELDS FROM `users`
- SQL (0.002698) SHOW FIELDS FROM `photos`
- SQL (0.001432) SHOW FIELDS FROM `users`
- SQL (0.001686) SHOW FIELDS FROM `photos`
- SQL (0.001403) SHOW FIELDS FROM `cameras`
- SQL (0.001809) SHOW FIELDS FROM `users`
- SQL (0.001590) SHOW FIELDS FROM `photos`
- SQL (0.000540) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000341) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.010746) SHOW FIELDS FROM `users`
- SQL (0.002455) SHOW FIELDS FROM `photos`
- SQL (0.001483) SHOW FIELDS FROM `users`
- SQL (0.001588) SHOW FIELDS FROM `photos`
- SQL (0.001513) SHOW FIELDS FROM `cameras`
- SQL (0.001247) SHOW FIELDS FROM `users`
- SQL (0.001527) SHOW FIELDS FROM `photos`
- SQL (0.000227) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000252) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000142) SET SQL_AUTO_IS_NULL=0
- SQL (0.010735) SHOW FIELDS FROM `users`
- SQL (0.002400) SHOW FIELDS FROM `photos`
- SQL (0.001299) SHOW FIELDS FROM `users`
- SQL (0.001451) SHOW FIELDS FROM `photos`
- SQL (0.001173) SHOW FIELDS FROM `cameras`
- SQL (0.001530) SHOW FIELDS FROM `users`
- SQL (0.001793) SHOW FIELDS FROM `photos`
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.010758) SHOW FIELDS FROM `users`
- SQL (0.002271) SHOW FIELDS FROM `photos`
- SQL (0.001485) SHOW FIELDS FROM `users`
- SQL (0.001578) SHOW FIELDS FROM `photos`
- SQL (0.001492) SHOW FIELDS FROM `cameras`
- SQL (0.001389) SHOW FIELDS FROM `users`
- SQL (0.001391) SHOW FIELDS FROM `photos`
- SQL (0.000249) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000170) SET SQL_AUTO_IS_NULL=0
- SQL (0.010733) SHOW FIELDS FROM `users`
- SQL (0.002313) SHOW FIELDS FROM `photos`
- SQL (0.001469) SHOW FIELDS FROM `users`
- SQL (0.001593) SHOW FIELDS FROM `photos`
- SQL (0.001511) SHOW FIELDS FROM `cameras`
- SQL (0.001484) SHOW FIELDS FROM `users`
- SQL (0.001478) SHOW FIELDS FROM `photos`
- SQL (0.000232) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000148) SET SQL_AUTO_IS_NULL=0
- SQL (0.010796) SHOW FIELDS FROM `users`
- SQL (0.001970) SHOW FIELDS FROM `photos`
- SQL (0.001558) SHOW FIELDS FROM `users`
- SQL (0.001440) SHOW FIELDS FROM `photos`
- SQL (0.001354) SHOW FIELDS FROM `cameras`
- SQL (0.001544) SHOW FIELDS FROM `users`
- SQL (0.001405) SHOW FIELDS FROM `photos`
- SQL (0.000239) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000111) SET SQL_AUTO_IS_NULL=0
- SQL (0.010751) SHOW FIELDS FROM `users`
- SQL (0.002354) SHOW FIELDS FROM `photos`
- SQL (0.001463) SHOW FIELDS FROM `users`
- SQL (0.001588) SHOW FIELDS FROM `photos`
- SQL (0.001505) SHOW FIELDS FROM `cameras`
- SQL (0.001464) SHOW FIELDS FROM `users`
- SQL (0.001509) SHOW FIELDS FROM `photos`
- SQL (0.000235) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000133) SET SQL_AUTO_IS_NULL=0
- SQL (0.010651) SHOW FIELDS FROM `users`
- SQL (0.002468) SHOW FIELDS FROM `photos`
- SQL (0.001364) SHOW FIELDS FROM `users`
- SQL (0.001503) SHOW FIELDS FROM `photos`
- SQL (0.001543) SHOW FIELDS FROM `cameras`
- SQL (0.001452) SHOW FIELDS FROM `users`
- SQL (0.001445) SHOW FIELDS FROM `photos`
- SQL (0.000228) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000147) SET SQL_AUTO_IS_NULL=0
- SQL (0.330787) SHOW FIELDS FROM `users`
- SQL (0.002584) SHOW FIELDS FROM `photos`
- SQL (0.001456) SHOW FIELDS FROM `users`
- SQL (0.001621) SHOW FIELDS FROM `photos`
- SQL (0.001475) SHOW FIELDS FROM `cameras`
- SQL (0.001481) SHOW FIELDS FROM `users`
- SQL (0.001552) SHOW FIELDS FROM `photos`
- SQL (0.000226) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000144) SET SQL_AUTO_IS_NULL=0
- SQL (0.010706) SHOW FIELDS FROM `users`
- SQL (0.002394) SHOW FIELDS FROM `photos`
- SQL (0.001322) SHOW FIELDS FROM `users`
- SQL (0.001656) SHOW FIELDS FROM `photos`
- SQL (0.001495) SHOW FIELDS FROM `cameras`
- SQL (0.001498) SHOW FIELDS FROM `users`
- SQL (0.001510) SHOW FIELDS FROM `photos`
- SQL (0.000222) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.010785) SHOW FIELDS FROM `users`
- SQL (0.002249) SHOW FIELDS FROM `photos`
- SQL (0.001469) SHOW FIELDS FROM `users`
- SQL (0.001410) SHOW FIELDS FROM `photos`
- SQL (0.001666) SHOW FIELDS FROM `cameras`
- SQL (0.001627) SHOW FIELDS FROM `users`
- SQL (0.002215) SHOW FIELDS FROM `photos`
- SQL (0.000942) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000149) SET SQL_AUTO_IS_NULL=0
- SQL (0.010774) SHOW FIELDS FROM `users`
- SQL (0.001649) SHOW FIELDS FROM `photos`
- SQL (0.001497) SHOW FIELDS FROM `users`
- SQL (0.001457) SHOW FIELDS FROM `photos`
- SQL (0.001345) SHOW FIELDS FROM `cameras`
- SQL (0.001298) SHOW FIELDS FROM `users`
- SQL (0.001849) SHOW FIELDS FROM `photos`
- SQL (0.000967) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000143) SET SQL_AUTO_IS_NULL=0
- SQL (0.010724) SHOW FIELDS FROM `users`
- SQL (0.002360) SHOW FIELDS FROM `photos`
- SQL (0.001570) SHOW FIELDS FROM `users`
- SQL (0.001733) SHOW FIELDS FROM `photos`
- SQL (0.001487) SHOW FIELDS FROM `cameras`
- SQL (0.001624) SHOW FIELDS FROM `users`
- SQL (0.001840) SHOW FIELDS FROM `photos`
- SQL (0.001080) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000148) SET SQL_AUTO_IS_NULL=0
- SQL (0.010885) SHOW FIELDS FROM `users`
- SQL (0.002106) SHOW FIELDS FROM `photos`
- SQL (0.001603) SHOW FIELDS FROM `users`
- SQL (0.001575) SHOW FIELDS FROM `photos`
- SQL (0.001529) SHOW FIELDS FROM `cameras`
- SQL (0.001517) SHOW FIELDS FROM `users`
- SQL (0.001556) SHOW FIELDS FROM `photos`
- SQL (0.000260) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.010689) SHOW FIELDS FROM `users`
- SQL (0.002034) SHOW FIELDS FROM `photos`
- SQL (0.001430) SHOW FIELDS FROM `users`
- SQL (0.001590) SHOW FIELDS FROM `photos`
- SQL (0.001434) SHOW FIELDS FROM `cameras`
- SQL (0.001543) SHOW FIELDS FROM `users`
- SQL (0.001597) SHOW FIELDS FROM `photos`
- SQL (0.001103) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000143) SET SQL_AUTO_IS_NULL=0
- SQL (0.010735) SHOW FIELDS FROM `users`
- SQL (0.002171) SHOW FIELDS FROM `photos`
- SQL (0.001553) SHOW FIELDS FROM `users`
- SQL (0.001586) SHOW FIELDS FROM `photos`
- SQL (0.001520) SHOW FIELDS FROM `cameras`
- SQL (0.001441) SHOW FIELDS FROM `users`
- SQL (0.001560) SHOW FIELDS FROM `photos`
- SQL (0.001796) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.010772) SHOW FIELDS FROM `users`
- SQL (0.002291) SHOW FIELDS FROM `photos`
- SQL (0.001505) SHOW FIELDS FROM `users`
- SQL (0.001466) SHOW FIELDS FROM `photos`
- SQL (0.002032) SHOW FIELDS FROM `cameras`
- SQL (0.001543) SHOW FIELDS FROM `users`
- SQL (0.001434) SHOW FIELDS FROM `photos`
- SQL (0.000147) SET SQL_AUTO_IS_NULL=0
- SQL (0.010845) SHOW FIELDS FROM `users`
- SQL (0.002185) SHOW FIELDS FROM `photos`
- SQL (0.001479) SHOW FIELDS FROM `users`
- SQL (0.001551) SHOW FIELDS FROM `photos`
- SQL (0.001459) SHOW FIELDS FROM `cameras`
- SQL (0.001521) SHOW FIELDS FROM `users`
- SQL (0.001392) SHOW FIELDS FROM `photos`
- SQL (0.000222) SELECT photos.user_id, photos.camera_id, photos.id
-FROM photos 
- SQL (0.000246) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000136) SET SQL_AUTO_IS_NULL=0
- SQL (0.010662) SHOW FIELDS FROM `users`
- SQL (0.002267) SHOW FIELDS FROM `photos`
- SQL (0.001467) SHOW FIELDS FROM `users`
- SQL (0.001437) SHOW FIELDS FROM `photos`
- SQL (0.001355) SHOW FIELDS FROM `cameras`
- SQL (0.001506) SHOW FIELDS FROM `users`
- SQL (0.012944) SHOW FIELDS FROM `photos`
- SQL (0.000256) SELECT *
-FROM photos 
- SQL (0.000271) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.010682) SHOW FIELDS FROM `users`
- SQL (0.002485) SHOW FIELDS FROM `photos`
- SQL (0.001454) SHOW FIELDS FROM `users`
- SQL (0.001588) SHOW FIELDS FROM `photos`
- SQL (0.001480) SHOW FIELDS FROM `cameras`
- SQL (0.001539) SHOW FIELDS FROM `users`
- SQL (0.001735) SHOW FIELDS FROM `photos`
- SQL (0.000111) SET SQL_AUTO_IS_NULL=0
- SQL (0.010744) SHOW FIELDS FROM `users`
- SQL (0.002250) SHOW FIELDS FROM `photos`
- SQL (0.001491) SHOW FIELDS FROM `users`
- SQL (0.001534) SHOW FIELDS FROM `photos`
- SQL (0.001499) SHOW FIELDS FROM `cameras`
- SQL (0.001482) SHOW FIELDS FROM `users`
- SQL (0.001496) SHOW FIELDS FROM `photos`
- SQL (0.000165) SET SQL_AUTO_IS_NULL=0
- SQL (0.010840) SHOW FIELDS FROM `users`
- SQL (0.002301) SHOW FIELDS FROM `photos`
- SQL (0.001598) SHOW FIELDS FROM `users`
- SQL (0.001456) SHOW FIELDS FROM `photos`
- SQL (0.001241) SHOW FIELDS FROM `cameras`
- SQL (0.001479) SHOW FIELDS FROM `users`
- SQL (0.000887) SHOW FIELDS FROM `photos`
- SQL (0.000137) SET SQL_AUTO_IS_NULL=0
- SQL (0.010721) SHOW FIELDS FROM `users`
- SQL (0.002243) SHOW FIELDS FROM `photos`
- SQL (0.001485) SHOW FIELDS FROM `users`
- SQL (0.001592) SHOW FIELDS FROM `photos`
- SQL (0.001519) SHOW FIELDS FROM `cameras`
- SQL (0.001480) SHOW FIELDS FROM `users`
- SQL (0.001534) SHOW FIELDS FROM `photos`
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.010748) SHOW FIELDS FROM `users`
- SQL (0.002303) SHOW FIELDS FROM `photos`
- SQL (0.001459) SHOW FIELDS FROM `users`
- SQL (0.001580) SHOW FIELDS FROM `photos`
- SQL (0.001584) SHOW FIELDS FROM `cameras`
- SQL (0.001507) SHOW FIELDS FROM `users`
- SQL (0.001526) SHOW FIELDS FROM `photos`
- SQL (0.000139) SET SQL_AUTO_IS_NULL=0
- SQL (0.001564) SHOW FIELDS FROM `users`
- SQL (0.001517) SHOW FIELDS FROM `photos`
- SQL (0.001405) SHOW FIELDS FROM `users`
- SQL (0.001516) SHOW FIELDS FROM `photos`
- SQL (0.001704) SHOW FIELDS FROM `cameras`
- SQL (0.001583) SHOW FIELDS FROM `users`
- SQL (0.001579) SHOW FIELDS FROM `photos`
- SQL (0.000135) SET SQL_AUTO_IS_NULL=0
- SQL (0.010720) SHOW FIELDS FROM `users`
- SQL (0.002156) SHOW FIELDS FROM `photos`
- SQL (0.001639) SHOW FIELDS FROM `users`
- SQL (0.001434) SHOW FIELDS FROM `photos`
- SQL (0.001357) SHOW FIELDS FROM `cameras`
- SQL (0.001513) SHOW FIELDS FROM `users`
- SQL (0.001474) SHOW FIELDS FROM `photos`
- SQL (0.000147) SET SQL_AUTO_IS_NULL=0
- SQL (0.010719) SHOW FIELDS FROM `users`
- SQL (0.002256) SHOW FIELDS FROM `photos`
- SQL (0.001531) SHOW FIELDS FROM `users`
- SQL (0.001453) SHOW FIELDS FROM `photos`
- SQL (0.001388) SHOW FIELDS FROM `cameras`
- SQL (0.001494) SHOW FIELDS FROM `users`
- SQL (0.001101) SHOW FIELDS FROM `photos`
- SQL (0.000219) SELECT users.id
-FROM users
-WHERE users.id = 1
- SQL (0.000157) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.011477) SHOW FIELDS FROM `users`
- SQL (0.002257) SHOW FIELDS FROM `photos`
- SQL (0.001520) SHOW FIELDS FROM `users`
- SQL (0.001410) SHOW FIELDS FROM `photos`
- SQL (0.001383) SHOW FIELDS FROM `cameras`
- SQL (0.001505) SHOW FIELDS FROM `users`
- SQL (0.001462) SHOW FIELDS FROM `photos`
- SQL (0.000222) SELECT users.id
-FROM users
-WHERE users.id = 1
- SQL (0.000197) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000148) SET SQL_AUTO_IS_NULL=0
- SQL (0.010701) SHOW FIELDS FROM `users`
- SQL (0.002382) SHOW FIELDS FROM `photos`
- SQL (0.001523) SHOW FIELDS FROM `users`
- SQL (0.001558) SHOW FIELDS FROM `photos`
- SQL (0.001494) SHOW FIELDS FROM `cameras`
- SQL (0.001467) SHOW FIELDS FROM `users`
- SQL (0.001516) SHOW FIELDS FROM `photos`
- SQL (0.000129) SET SQL_AUTO_IS_NULL=0
- SQL (0.010711) SHOW FIELDS FROM `users`
- SQL (0.002382) SHOW FIELDS FROM `photos`
- SQL (0.001495) SHOW FIELDS FROM `users`
- SQL (0.001445) SHOW FIELDS FROM `photos`
- SQL (0.001363) SHOW FIELDS FROM `cameras`
- SQL (0.001557) SHOW FIELDS FROM `users`
- SQL (0.001433) SHOW FIELDS FROM `photos`
- SQL (0.000000) Mysql::Error: Unknown column 'photos.id' in 'field list': SELECT photos.id
-FROM users
-WHERE users.id = 1
- SQL (0.000132) SET SQL_AUTO_IS_NULL=0
- SQL (0.010902) SHOW FIELDS FROM `users`
- SQL (0.002079) SHOW FIELDS FROM `photos`
- SQL (0.001455) SHOW FIELDS FROM `users`
- SQL (0.001626) SHOW FIELDS FROM `photos`
- SQL (0.012539) SHOW FIELDS FROM `cameras`
- SQL (0.001557) SHOW FIELDS FROM `users`
- SQL (0.001437) SHOW FIELDS FROM `photos`
- SQL (0.000255) SELECT users.id
-FROM users
-WHERE users.id = 1
- SQL (0.000225) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000148) SET SQL_AUTO_IS_NULL=0
- SQL (0.010766) SHOW FIELDS FROM `users`
- SQL (0.002370) SHOW FIELDS FROM `photos`
- SQL (0.001453) SHOW FIELDS FROM `users`
- SQL (0.001556) SHOW FIELDS FROM `photos`
- SQL (0.001492) SHOW FIELDS FROM `cameras`
- SQL (0.001243) SHOW FIELDS FROM `users`
- SQL (0.001527) SHOW FIELDS FROM `photos`
- SQL (0.000151) SET SQL_AUTO_IS_NULL=0
- SQL (0.010730) SHOW FIELDS FROM `users`
- SQL (0.002308) SHOW FIELDS FROM `photos`
- SQL (0.001489) SHOW FIELDS FROM `users`
- SQL (0.001571) SHOW FIELDS FROM `photos`
- SQL (0.001345) SHOW FIELDS FROM `cameras`
- SQL (0.001456) SHOW FIELDS FROM `users`
- SQL (0.001161) SHOW FIELDS FROM `photos`
- SQL (0.000215) SELECT users.id
-FROM users
-WHERE users.id = 1
- SQL (0.000261) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000139) SET SQL_AUTO_IS_NULL=0
- SQL (0.010683) SHOW FIELDS FROM `users`
- SQL (0.002298) SHOW FIELDS FROM `photos`
- SQL (0.001478) SHOW FIELDS FROM `users`
- SQL (0.001413) SHOW FIELDS FROM `photos`
- SQL (0.001521) SHOW FIELDS FROM `cameras`
- SQL (0.001462) SHOW FIELDS FROM `users`
- SQL (0.001509) SHOW FIELDS FROM `photos`
- SQL (0.001637) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000136) SET SQL_AUTO_IS_NULL=0
- SQL (0.010714) SHOW FIELDS FROM `users`
- SQL (0.002255) SHOW FIELDS FROM `photos`
- SQL (0.001471) SHOW FIELDS FROM `users`
- SQL (0.001491) SHOW FIELDS FROM `photos`
- SQL (0.001494) SHOW FIELDS FROM `cameras`
- SQL (0.001537) SHOW FIELDS FROM `users`
- SQL (0.001500) SHOW FIELDS FROM `photos`
- SQL (0.000144) SET SQL_AUTO_IS_NULL=0
- SQL (0.010658) SHOW FIELDS FROM `users`
- SQL (0.002047) SHOW FIELDS FROM `photos`
- SQL (0.001307) SHOW FIELDS FROM `users`
- SQL (0.001529) SHOW FIELDS FROM `photos`
- SQL (0.001380) SHOW FIELDS FROM `cameras`
- SQL (0.001558) SHOW FIELDS FROM `users`
- SQL (0.000851) SHOW FIELDS FROM `photos`
- SQL (0.000135) SET SQL_AUTO_IS_NULL=0
- SQL (0.010643) SHOW FIELDS FROM `users`
- SQL (0.002531) SHOW FIELDS FROM `photos`
- SQL (0.001449) SHOW FIELDS FROM `users`
- SQL (0.001423) SHOW FIELDS FROM `photos`
- SQL (0.001522) SHOW FIELDS FROM `cameras`
- SQL (0.001515) SHOW FIELDS FROM `users`
- SQL (0.001581) SHOW FIELDS FROM `photos`
- SQL (0.000147) SET SQL_AUTO_IS_NULL=0
- SQL (0.010786) SHOW FIELDS FROM `users`
- SQL (0.002348) SHOW FIELDS FROM `photos`
- SQL (0.001476) SHOW FIELDS FROM `users`
- SQL (0.001604) SHOW FIELDS FROM `photos`
- SQL (0.001380) SHOW FIELDS FROM `cameras`
- SQL (0.001484) SHOW FIELDS FROM `users`
- SQL (0.001383) SHOW FIELDS FROM `photos`
- SQL (0.000117) SET SQL_AUTO_IS_NULL=0
- SQL (0.010702) SHOW FIELDS FROM `users`
- SQL (0.002339) SHOW FIELDS FROM `photos`
- SQL (0.001304) SHOW FIELDS FROM `users`
- SQL (0.001578) SHOW FIELDS FROM `photos`
- SQL (0.001470) SHOW FIELDS FROM `cameras`
- SQL (0.001524) SHOW FIELDS FROM `users`
- SQL (0.001554) SHOW FIELDS FROM `photos`
- SQL (0.000144) SET SQL_AUTO_IS_NULL=0
- SQL (0.010746) SHOW FIELDS FROM `users`
- SQL (0.002433) SHOW FIELDS FROM `photos`
- SQL (0.001489) SHOW FIELDS FROM `users`
- SQL (0.001530) SHOW FIELDS FROM `photos`
- SQL (0.001540) SHOW FIELDS FROM `cameras`
- SQL (0.001528) SHOW FIELDS FROM `users`
- SQL (0.001524) SHOW FIELDS FROM `photos`
- SQL (0.000393) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000149) SET SQL_AUTO_IS_NULL=0
- SQL (0.010676) SHOW FIELDS FROM `users`
- SQL (0.002224) SHOW FIELDS FROM `photos`
- SQL (0.001456) SHOW FIELDS FROM `users`
- SQL (0.001773) SHOW FIELDS FROM `photos`
- SQL (0.001509) SHOW FIELDS FROM `cameras`
- SQL (0.001473) SHOW FIELDS FROM `users`
- SQL (0.001511) SHOW FIELDS FROM `photos`
- SQL (0.000274) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.010825) SHOW FIELDS FROM `users`
- SQL (0.002358) SHOW FIELDS FROM `photos`
- SQL (0.001492) SHOW FIELDS FROM `users`
- SQL (0.001578) SHOW FIELDS FROM `photos`
- SQL (0.001702) SHOW FIELDS FROM `cameras`
- SQL (0.001495) SHOW FIELDS FROM `users`
- SQL (0.001778) SHOW FIELDS FROM `photos`
- SQL (0.000348) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000113) SET SQL_AUTO_IS_NULL=0
- SQL (0.010701) SHOW FIELDS FROM `users`
- SQL (0.002380) SHOW FIELDS FROM `photos`
- SQL (0.001329) SHOW FIELDS FROM `users`
- SQL (0.001403) SHOW FIELDS FROM `photos`
- SQL (0.001409) SHOW FIELDS FROM `cameras`
- SQL (0.001458) SHOW FIELDS FROM `users`
- SQL (0.001486) SHOW FIELDS FROM `photos`
- SQL (0.000562) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000134) SET SQL_AUTO_IS_NULL=0
- SQL (0.010761) SHOW FIELDS FROM `users`
- SQL (0.002300) SHOW FIELDS FROM `photos`
- SQL (0.001565) SHOW FIELDS FROM `users`
- SQL (0.001514) SHOW FIELDS FROM `photos`
- SQL (0.001377) SHOW FIELDS FROM `cameras`
- SQL (0.001553) SHOW FIELDS FROM `users`
- SQL (0.001454) SHOW FIELDS FROM `photos`
- SQL (0.000319) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000156) SET SQL_AUTO_IS_NULL=0
- SQL (0.010664) SHOW FIELDS FROM `users`
- SQL (0.002495) SHOW FIELDS FROM `photos`
- SQL (0.001454) SHOW FIELDS FROM `users`
- SQL (0.001569) SHOW FIELDS FROM `photos`
- SQL (0.001277) SHOW FIELDS FROM `cameras`
- SQL (0.001250) SHOW FIELDS FROM `users`
- SQL (0.001543) SHOW FIELDS FROM `photos`
- SQL (0.000263) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000143) SET SQL_AUTO_IS_NULL=0
- SQL (0.010756) SHOW FIELDS FROM `users`
- SQL (0.002397) SHOW FIELDS FROM `photos`
- SQL (0.001731) SHOW FIELDS FROM `users`
- SQL (0.001443) SHOW FIELDS FROM `photos`
- SQL (0.001366) SHOW FIELDS FROM `cameras`
- SQL (0.001472) SHOW FIELDS FROM `users`
- SQL (0.001420) SHOW FIELDS FROM `photos`
- SQL (0.000148) SET SQL_AUTO_IS_NULL=0
- SQL (0.010705) SHOW FIELDS FROM `users`
- SQL (0.002368) SHOW FIELDS FROM `photos`
- SQL (0.001556) SHOW FIELDS FROM `users`
- SQL (0.001472) SHOW FIELDS FROM `photos`
- SQL (0.001455) SHOW FIELDS FROM `cameras`
- SQL (0.001475) SHOW FIELDS FROM `users`
- SQL (0.002127) SHOW FIELDS FROM `photos`
- SQL (0.001414) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.010742) SHOW FIELDS FROM `users`
- SQL (0.002380) SHOW FIELDS FROM `photos`
- SQL (0.001634) SHOW FIELDS FROM `users`
- SQL (0.001587) SHOW FIELDS FROM `photos`
- SQL (0.001452) SHOW FIELDS FROM `cameras`
- SQL (0.001454) SHOW FIELDS FROM `users`
- SQL (0.001514) SHOW FIELDS FROM `photos`
- SQL (0.000135) SET SQL_AUTO_IS_NULL=0
- SQL (0.010668) SHOW FIELDS FROM `users`
- SQL (0.002191) SHOW FIELDS FROM `photos`
- SQL (0.001521) SHOW FIELDS FROM `users`
- SQL (0.001418) SHOW FIELDS FROM `photos`
- SQL (0.001330) SHOW FIELDS FROM `cameras`
- SQL (0.001474) SHOW FIELDS FROM `users`
- SQL (0.001406) SHOW FIELDS FROM `photos`
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.010693) SHOW FIELDS FROM `users`
- SQL (0.002296) SHOW FIELDS FROM `photos`
- SQL (0.001485) SHOW FIELDS FROM `users`
- SQL (0.001604) SHOW FIELDS FROM `photos`
- SQL (0.001479) SHOW FIELDS FROM `cameras`
- SQL (0.001660) SHOW FIELDS FROM `users`
- SQL (0.001632) SHOW FIELDS FROM `photos`
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.010678) SHOW FIELDS FROM `users`
- SQL (0.002302) SHOW FIELDS FROM `photos`
- SQL (0.001501) SHOW FIELDS FROM `users`
- SQL (0.001360) SHOW FIELDS FROM `photos`
- SQL (0.001353) SHOW FIELDS FROM `cameras`
- SQL (0.001562) SHOW FIELDS FROM `users`
- SQL (0.001542) SHOW FIELDS FROM `photos`
- SQL (0.000147) SET SQL_AUTO_IS_NULL=0
- SQL (0.010704) SHOW FIELDS FROM `users`
- SQL (0.002335) SHOW FIELDS FROM `photos`
- SQL (0.001425) SHOW FIELDS FROM `users`
- SQL (0.001468) SHOW FIELDS FROM `photos`
- SQL (0.001469) SHOW FIELDS FROM `cameras`
- SQL (0.001573) SHOW FIELDS FROM `users`
- SQL (0.001489) SHOW FIELDS FROM `photos`
- SQL (0.000148) SET SQL_AUTO_IS_NULL=0
- SQL (0.010787) SHOW FIELDS FROM `users`
- SQL (0.002303) SHOW FIELDS FROM `photos`
- SQL (0.001529) SHOW FIELDS FROM `users`
- SQL (0.001689) SHOW FIELDS FROM `photos`
- SQL (0.001503) SHOW FIELDS FROM `cameras`
- SQL (0.001463) SHOW FIELDS FROM `users`
- SQL (0.001487) SHOW FIELDS FROM `photos`
- SQL (0.000149) SET SQL_AUTO_IS_NULL=0
- SQL (0.010737) SHOW FIELDS FROM `users`
- SQL (0.002412) SHOW FIELDS FROM `photos`
- SQL (0.001487) SHOW FIELDS FROM `users`
- SQL (0.001547) SHOW FIELDS FROM `photos`
- SQL (0.001571) SHOW FIELDS FROM `cameras`
- SQL (0.001482) SHOW FIELDS FROM `users`
- SQL (0.001395) SHOW FIELDS FROM `photos`
- SQL (0.000481) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.010918) SHOW FIELDS FROM `users`
- SQL (0.001957) SHOW FIELDS FROM `photos`
- SQL (0.001485) SHOW FIELDS FROM `users`
- SQL (0.001498) SHOW FIELDS FROM `photos`
- SQL (0.001374) SHOW FIELDS FROM `cameras`
- SQL (0.001461) SHOW FIELDS FROM `users`
- SQL (0.001923) SHOW FIELDS FROM `photos`
- SQL (0.000233) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000232) SELECT photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.011208) SHOW FIELDS FROM `users`
- SQL (0.002172) SHOW FIELDS FROM `photos`
- SQL (0.001453) SHOW FIELDS FROM `users`
- SQL (0.001526) SHOW FIELDS FROM `photos`
- SQL (0.001666) SHOW FIELDS FROM `cameras`
- SQL (0.001273) SHOW FIELDS FROM `users`
- SQL (0.001845) SHOW FIELDS FROM `photos`
- SQL (0.000270) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000133) SET SQL_AUTO_IS_NULL=0
- SQL (0.010785) SHOW FIELDS FROM `users`
- SQL (0.002207) SHOW FIELDS FROM `photos`
- SQL (0.001480) SHOW FIELDS FROM `users`
- SQL (0.001563) SHOW FIELDS FROM `photos`
- SQL (0.001459) SHOW FIELDS FROM `cameras`
- SQL (0.001206) SHOW FIELDS FROM `users`
- SQL (0.001250) SHOW FIELDS FROM `photos`
- SQL (0.000224) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000227) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000192) SET SQL_AUTO_IS_NULL=0
- SQL (0.010546) SHOW FIELDS FROM `users`
- SQL (0.002397) SHOW FIELDS FROM `photos`
- SQL (0.002065) SHOW FIELDS FROM `users`
- SQL (0.001381) SHOW FIELDS FROM `photos`
- SQL (0.000979) SHOW FIELDS FROM `cameras`
- SQL (0.001410) SHOW FIELDS FROM `users`
- SQL (0.001516) SHOW FIELDS FROM `photos`
- SQL (0.000216) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000240) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.010781) SHOW FIELDS FROM `users`
- SQL (0.002045) SHOW FIELDS FROM `photos`
- SQL (0.001462) SHOW FIELDS FROM `users`
- SQL (0.001712) SHOW FIELDS FROM `photos`
- SQL (0.001383) SHOW FIELDS FROM `cameras`
- SQL (0.001934) SHOW FIELDS FROM `users`
- SQL (0.001974) SHOW FIELDS FROM `photos`
- SQL (0.000277) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000266) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.010789) SHOW FIELDS FROM `users`
- SQL (0.002174) SHOW FIELDS FROM `photos`
- SQL (0.001549) SHOW FIELDS FROM `users`
- SQL (0.001406) SHOW FIELDS FROM `photos`
- SQL (0.001380) SHOW FIELDS FROM `cameras`
- SQL (0.001590) SHOW FIELDS FROM `users`
- SQL (0.001465) SHOW FIELDS FROM `photos`
- SQL (0.000236) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000260) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000148) SET SQL_AUTO_IS_NULL=0
- SQL (0.010729) SHOW FIELDS FROM `users`
- SQL (0.002288) SHOW FIELDS FROM `photos`
- SQL (0.001373) SHOW FIELDS FROM `users`
- SQL (0.001594) SHOW FIELDS FROM `photos`
- SQL (0.001516) SHOW FIELDS FROM `cameras`
- SQL (0.001470) SHOW FIELDS FROM `users`
- SQL (0.001653) SHOW FIELDS FROM `photos`
- SQL (0.000249) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000324) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.010695) SHOW FIELDS FROM `users`
- SQL (0.002188) SHOW FIELDS FROM `photos`
- SQL (0.001450) SHOW FIELDS FROM `users`
- SQL (0.001569) SHOW FIELDS FROM `photos`
- SQL (0.001437) SHOW FIELDS FROM `cameras`
- SQL (0.001780) SHOW FIELDS FROM `users`
- SQL (0.002270) SHOW FIELDS FROM `photos`
- SQL (0.001585) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000325) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000151) SET SQL_AUTO_IS_NULL=0
- SQL (0.010721) SHOW FIELDS FROM `users`
- SQL (0.002947) SHOW FIELDS FROM `photos`
- SQL (0.001515) SHOW FIELDS FROM `users`
- SQL (0.001270) SHOW FIELDS FROM `photos`
- SQL (0.001479) SHOW FIELDS FROM `cameras`
- SQL (0.001428) SHOW FIELDS FROM `users`
- SQL (0.001953) SHOW FIELDS FROM `photos`
- SQL (0.000253) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000279) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.010670) SHOW FIELDS FROM `users`
- SQL (0.002111) SHOW FIELDS FROM `photos`
- SQL (0.001460) SHOW FIELDS FROM `users`
- SQL (0.001578) SHOW FIELDS FROM `photos`
- SQL (0.001576) SHOW FIELDS FROM `cameras`
- SQL (0.001497) SHOW FIELDS FROM `users`
- SQL (0.001326) SHOW FIELDS FROM `photos`
- SQL (0.000235) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000250) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.001613) SHOW FIELDS FROM `users`
- SQL (0.001535) SHOW FIELDS FROM `photos`
- SQL (0.001418) SHOW FIELDS FROM `users`
- SQL (0.001545) SHOW FIELDS FROM `photos`
- SQL (0.001536) SHOW FIELDS FROM `cameras`
- SQL (0.001527) SHOW FIELDS FROM `users`
- SQL (0.001497) SHOW FIELDS FROM `photos`
- SQL (0.000230) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000227) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000134) SET SQL_AUTO_IS_NULL=0
- SQL (0.011304) SHOW FIELDS FROM `users`
- SQL (0.002381) SHOW FIELDS FROM `photos`
- SQL (0.001508) SHOW FIELDS FROM `users`
- SQL (0.001665) SHOW FIELDS FROM `photos`
- SQL (0.001498) SHOW FIELDS FROM `cameras`
- SQL (0.001503) SHOW FIELDS FROM `users`
- SQL (0.001514) SHOW FIELDS FROM `photos`
- SQL (0.000225) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000231) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000134) SET SQL_AUTO_IS_NULL=0
- SQL (0.010747) SHOW FIELDS FROM `users`
- SQL (0.002111) SHOW FIELDS FROM `photos`
- SQL (0.001510) SHOW FIELDS FROM `users`
- SQL (0.001581) SHOW FIELDS FROM `photos`
- SQL (0.001428) SHOW FIELDS FROM `cameras`
- SQL (0.001507) SHOW FIELDS FROM `users`
- SQL (0.001808) SHOW FIELDS FROM `photos`
- SQL (0.000247) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000237) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.010702) SHOW FIELDS FROM `users`
- SQL (0.002320) SHOW FIELDS FROM `photos`
- SQL (0.001504) SHOW FIELDS FROM `users`
- SQL (0.001589) SHOW FIELDS FROM `photos`
- SQL (0.001555) SHOW FIELDS FROM `cameras`
- SQL (0.002636) SHOW FIELDS FROM `users`
- SQL (0.001766) SHOW FIELDS FROM `photos`
- SQL (0.000239) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000281) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000115) SET SQL_AUTO_IS_NULL=0
- SQL (0.011377) SHOW FIELDS FROM `users`
- SQL (0.002266) SHOW FIELDS FROM `photos`
- SQL (0.001512) SHOW FIELDS FROM `users`
- SQL (0.001553) SHOW FIELDS FROM `photos`
- SQL (0.001686) SHOW FIELDS FROM `cameras`
- SQL (0.001487) SHOW FIELDS FROM `users`
- SQL (0.001520) SHOW FIELDS FROM `photos`
- SQL (0.000223) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000233) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000133) SET SQL_AUTO_IS_NULL=0
- SQL (0.011494) SHOW FIELDS FROM `users`
- SQL (0.002092) SHOW FIELDS FROM `photos`
- SQL (0.001556) SHOW FIELDS FROM `cameras`
- SQL (0.001490) SHOW FIELDS FROM `users`
- SQL (0.001594) SHOW FIELDS FROM `photos`
- SQL (0.001273) SHOW FIELDS FROM `cameras`
- SQL (0.001512) SHOW FIELDS FROM `users`
- SQL (0.001362) SHOW FIELDS FROM `photos`
- SQL (0.001476) SHOW FIELDS FROM `cameras`
- SQL (0.000227) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000335) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.001514) SHOW FIELDS FROM `users`
- SQL (0.001589) SHOW FIELDS FROM `photos`
- SQL (0.001412) SHOW FIELDS FROM `cameras`
- SQL (0.000110) SET SQL_AUTO_IS_NULL=0
- SQL (0.010696) SHOW FIELDS FROM `users`
- SQL (0.002449) SHOW FIELDS FROM `photos`
- SQL (0.001558) SHOW FIELDS FROM `cameras`
- SQL (0.001720) SHOW FIELDS FROM `users`
- SQL (0.001577) SHOW FIELDS FROM `photos`
- SQL (0.001420) SHOW FIELDS FROM `cameras`
- SQL (0.009109) SHOW FIELDS FROM `users`
- SQL (0.001770) SHOW FIELDS FROM `photos`
- SQL (0.001409) SHOW FIELDS FROM `cameras`
- SQL (0.000247) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000305) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- User Columns (0.001429) SHOW FIELDS FROM `users`
- SQL (0.001503) SHOW FIELDS FROM `users`
- SQL (0.001595) SHOW FIELDS FROM `photos`
- SQL (0.001775) SHOW FIELDS FROM `cameras`
- SQL (0.000137) SET SQL_AUTO_IS_NULL=0
- SQL (0.010741) SHOW FIELDS FROM `users`
- SQL (0.002217) SHOW FIELDS FROM `photos`
- SQL (0.001614) SHOW FIELDS FROM `cameras`
- SQL (0.001277) SHOW FIELDS FROM `users`
- SQL (0.001394) SHOW FIELDS FROM `photos`
- SQL (0.001412) SHOW FIELDS FROM `cameras`
- SQL (0.001534) SHOW FIELDS FROM `users`
- SQL (0.001595) SHOW FIELDS FROM `photos`
- SQL (0.001771) SHOW FIELDS FROM `cameras`
- SQL (0.000246) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000287) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.001537) SHOW FIELDS FROM `users`
- SQL (0.001578) SHOW FIELDS FROM `photos`
- SQL (0.001351) SHOW FIELDS FROM `cameras`
- SQL (0.000124) SET SQL_AUTO_IS_NULL=0
- SQL (0.010755) SHOW FIELDS FROM `users`
- SQL (0.002276) SHOW FIELDS FROM `photos`
- SQL (0.001312) SHOW FIELDS FROM `cameras`
- SQL (0.002071) SHOW FIELDS FROM `users`
- SQL (0.001613) SHOW FIELDS FROM `photos`
- SQL (0.001271) SHOW FIELDS FROM `cameras`
- SQL (0.001665) SHOW FIELDS FROM `users`
- SQL (0.001605) SHOW FIELDS FROM `photos`
- SQL (0.001360) SHOW FIELDS FROM `cameras`
- SQL (0.000247) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000303) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- User Columns (0.001449) SHOW FIELDS FROM `users`
- SQL (0.001510) SHOW FIELDS FROM `users`
- SQL (0.001413) SHOW FIELDS FROM `photos`
- SQL (0.001546) SHOW FIELDS FROM `cameras`
- SQL (0.000115) SET SQL_AUTO_IS_NULL=0
- SQL (0.001542) SHOW FIELDS FROM `users`
- SQL (0.001224) SHOW FIELDS FROM `photos`
- SQL (0.001201) SHOW FIELDS FROM `cameras`
- SQL (0.001325) SHOW FIELDS FROM `users`
- SQL (0.001269) SHOW FIELDS FROM `photos`
- SQL (0.001364) SHOW FIELDS FROM `cameras`
- SQL (0.001517) SHOW FIELDS FROM `users`
- SQL (0.001422) SHOW FIELDS FROM `photos`
- SQL (0.001674) SHOW FIELDS FROM `cameras`
- SQL (0.000270) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000269) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- User Columns (0.008183) SHOW FIELDS FROM `users`
- Photo Columns (0.001576) SHOW FIELDS FROM `photos`
- SQL (0.001595) SHOW FIELDS FROM `users`
- SQL (0.001461) SHOW FIELDS FROM `photos`
- SQL (0.001327) SHOW FIELDS FROM `cameras`
- SQL (0.000129) SET SQL_AUTO_IS_NULL=0
- SQL (0.001503) SHOW FIELDS FROM `users`
- SQL (0.001544) SHOW FIELDS FROM `photos`
- SQL (0.001444) SHOW FIELDS FROM `cameras`
- SQL (0.001509) SHOW FIELDS FROM `users`
- SQL (0.001593) SHOW FIELDS FROM `photos`
- SQL (0.001422) SHOW FIELDS FROM `cameras`
- SQL (0.001487) SHOW FIELDS FROM `users`
- SQL (0.001996) SHOW FIELDS FROM `photos`
- SQL (0.001380) SHOW FIELDS FROM `cameras`
- SQL (0.000275) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000279) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- User Columns (0.001516) SHOW FIELDS FROM `users`
- SQL (0.001449) SHOW FIELDS FROM `users`
- SQL (0.001558) SHOW FIELDS FROM `photos`
- SQL (0.001347) SHOW FIELDS FROM `cameras`
- SQL (0.000133) SET SQL_AUTO_IS_NULL=0
- SQL (0.010735) SHOW FIELDS FROM `users`
- SQL (0.002173) SHOW FIELDS FROM `photos`
- SQL (0.001449) SHOW FIELDS FROM `cameras`
- SQL (0.001510) SHOW FIELDS FROM `users`
- SQL (0.001410) SHOW FIELDS FROM `photos`
- SQL (0.001592) SHOW FIELDS FROM `cameras`
- SQL (0.001570) SHOW FIELDS FROM `users`
- SQL (0.001423) SHOW FIELDS FROM `photos`
- SQL (0.001301) SHOW FIELDS FROM `cameras`
- SQL (0.000287) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000301) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- User Columns (0.001475) SHOW FIELDS FROM `users`
- Photo Columns (0.001465) SHOW FIELDS FROM `photos`
- SQL (0.001633) SHOW FIELDS FROM `users`
- SQL (0.001467) SHOW FIELDS FROM `photos`
- SQL (0.001332) SHOW FIELDS FROM `cameras`
- SQL (0.000132) SET SQL_AUTO_IS_NULL=0
- SQL (0.010888) SHOW FIELDS FROM `users`
- SQL (0.002202) SHOW FIELDS FROM `photos`
- SQL (0.001500) SHOW FIELDS FROM `cameras`
- SQL (0.001457) SHOW FIELDS FROM `users`
- SQL (0.001593) SHOW FIELDS FROM `photos`
- SQL (0.001424) SHOW FIELDS FROM `cameras`
- SQL (0.001492) SHOW FIELDS FROM `users`
- SQL (0.001520) SHOW FIELDS FROM `photos`
- SQL (0.001480) SHOW FIELDS FROM `cameras`
- SQL (0.000290) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000263) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- SQL (0.000320) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- User Columns (0.001896) SHOW FIELDS FROM `users`
- SQL (0.001262) SHOW FIELDS FROM `users`
- SQL (0.001675) SHOW FIELDS FROM `photos`
- SQL (0.001409) SHOW FIELDS FROM `cameras`
- SQL (0.000130) SET SQL_AUTO_IS_NULL=0
- SQL (0.010691) SHOW FIELDS FROM `users`
- SQL (0.002363) SHOW FIELDS FROM `photos`
- SQL (0.001590) SHOW FIELDS FROM `cameras`
- SQL (0.001560) SHOW FIELDS FROM `users`
- SQL (0.013103) SHOW FIELDS FROM `photos`
- SQL (0.001597) SHOW FIELDS FROM `cameras`
- SQL (0.001491) SHOW FIELDS FROM `users`
- SQL (0.001553) SHOW FIELDS FROM `photos`
- SQL (0.001368) SHOW FIELDS FROM `cameras`
- SQL (0.000300) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.001508) SHOW FIELDS FROM `users`
- SQL (0.001583) SHOW FIELDS FROM `photos`
- SQL (0.001442) SHOW FIELDS FROM `cameras`
- SQL (0.000132) SET SQL_AUTO_IS_NULL=0
- SQL (0.010756) SHOW FIELDS FROM `users`
- SQL (0.002320) SHOW FIELDS FROM `photos`
- SQL (0.001416) SHOW FIELDS FROM `cameras`
- SQL (0.001507) SHOW FIELDS FROM `users`
- SQL (0.012716) SHOW FIELDS FROM `photos`
- SQL (0.001406) SHOW FIELDS FROM `cameras`
- SQL (0.001353) SHOW FIELDS FROM `users`
- SQL (0.001440) SHOW FIELDS FROM `photos`
- SQL (0.001263) SHOW FIELDS FROM `cameras`
- SQL (0.000233) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000259) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- User Columns (0.001394) SHOW FIELDS FROM `users`
- SQL (0.001487) SHOW FIELDS FROM `users`
- SQL (0.001837) SHOW FIELDS FROM `photos`
- SQL (0.001501) SHOW FIELDS FROM `cameras`
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.001575) SHOW FIELDS FROM `users`
- SQL (0.001415) SHOW FIELDS FROM `photos`
- SQL (0.001483) SHOW FIELDS FROM `cameras`
- SQL (0.000820) SHOW FIELDS FROM `users`
- SQL (0.001526) SHOW FIELDS FROM `photos`
- SQL (0.001093) SHOW FIELDS FROM `cameras`
- SQL (0.001526) SHOW FIELDS FROM `users`
- SQL (0.001631) SHOW FIELDS FROM `photos`
- SQL (0.001346) SHOW FIELDS FROM `cameras`
- SQL (0.000282) SELECT *
-FROM users
-WHERE users.id = 1
- SQL (0.000281) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- User Columns (0.001235) SHOW FIELDS FROM `users`
- Photo Columns (0.001422) SHOW FIELDS FROM `photos`
- SQL (0.001607) SHOW FIELDS FROM `users`
- SQL (0.001685) SHOW FIELDS FROM `photos`
- SQL (0.001318) SHOW FIELDS FROM `cameras`
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.010894) SHOW FIELDS FROM `users`
- SQL (0.002240) SHOW FIELDS FROM `photos`
- SQL (0.001487) SHOW FIELDS FROM `cameras`
- SQL (0.001578) SHOW FIELDS FROM `users`
- SQL (0.001582) SHOW FIELDS FROM `photos`
- SQL (0.001418) SHOW FIELDS FROM `cameras`
- SQL (0.001528) SHOW FIELDS FROM `users`
- SQL (0.001577) SHOW FIELDS FROM `photos`
- SQL (0.001215) SHOW FIELDS FROM `cameras`
- SQL (0.000251) SELECT *
-FROM users
-WHERE users.id = 1
- User Columns (0.001387) SHOW FIELDS FROM `users`
- SQL (0.000296) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- Photo Columns (0.001457) SHOW FIELDS FROM `photos`
- SQL (0.001421) SHOW FIELDS FROM `users`
- SQL (0.001431) SHOW FIELDS FROM `photos`
- SQL (0.001485) SHOW FIELDS FROM `cameras`
- SQL (0.000145) SET SQL_AUTO_IS_NULL=0
- SQL (0.010759) SHOW FIELDS FROM `users`
- SQL (0.002325) SHOW FIELDS FROM `photos`
- SQL (0.001391) SHOW FIELDS FROM `cameras`
- SQL (0.001545) SHOW FIELDS FROM `users`
- SQL (0.001442) SHOW FIELDS FROM `photos`
- SQL (0.001285) SHOW FIELDS FROM `cameras`
- SQL (0.001287) SHOW FIELDS FROM `users`
- SQL (0.001565) SHOW FIELDS FROM `photos`
- SQL (0.001098) SHOW FIELDS FROM `cameras`
- SQL (0.000215) SELECT *
-FROM users
-WHERE users.id = 1
- User Columns (0.001362) SHOW FIELDS FROM `users`
- SQL (0.000283) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- Photo Columns (0.001459) SHOW FIELDS FROM `photos`
- SQL (0.001404) SHOW FIELDS FROM `users`
- SQL (0.001554) SHOW FIELDS FROM `photos`
- SQL (0.001531) SHOW FIELDS FROM `cameras`
- SQL (0.000146) SET SQL_AUTO_IS_NULL=0
- SQL (0.010611) SHOW FIELDS FROM `users`
- SQL (0.002560) SHOW FIELDS FROM `photos`
- SQL (0.001457) SHOW FIELDS FROM `cameras`
- SQL (0.001439) SHOW FIELDS FROM `users`
- SQL (0.001575) SHOW FIELDS FROM `photos`
- SQL (0.001422) SHOW FIELDS FROM `cameras`
- SQL (0.001475) SHOW FIELDS FROM `users`
- SQL (0.001563) SHOW FIELDS FROM `photos`
- SQL (0.001389) SHOW FIELDS FROM `cameras`
- SQL (0.000213) SELECT *
-FROM users
-WHERE users.id = 1
- User Columns (0.001375) SHOW FIELDS FROM `users`
- SQL (0.000251) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- Photo Columns (0.001417) SHOW FIELDS FROM `photos`
- SQL (0.001395) SHOW FIELDS FROM `users`
- SQL (0.001539) SHOW FIELDS FROM `photos`
- SQL (0.001552) SHOW FIELDS FROM `cameras`
- SQL (0.000113) SET SQL_AUTO_IS_NULL=0
- SQL (0.010659) SHOW FIELDS FROM `users`
- SQL (0.002496) SHOW FIELDS FROM `photos`
- SQL (0.001466) SHOW FIELDS FROM `cameras`
- SQL (0.001519) SHOW FIELDS FROM `users`
- SQL (0.001591) SHOW FIELDS FROM `photos`
- SQL (0.001455) SHOW FIELDS FROM `cameras`
- SQL (0.001502) SHOW FIELDS FROM `users`
- SQL (0.001543) SHOW FIELDS FROM `photos`
- SQL (0.001432) SHOW FIELDS FROM `cameras`
- SQL (0.000225) SELECT *
-FROM users
-WHERE users.id = 1
- User Columns (0.001376) SHOW FIELDS FROM `users`
- SQL (0.000266) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- Photo Columns (0.001440) SHOW FIELDS FROM `photos`
- SQL (0.001105) SHOW FIELDS FROM `users`
- SQL (0.001152) SHOW FIELDS FROM `photos`
- SQL (0.001384) SHOW FIELDS FROM `cameras`
- SQL (0.000127) SET SQL_AUTO_IS_NULL=0
- SQL (0.010753) SHOW FIELDS FROM `users`
- SQL (0.002275) SHOW FIELDS FROM `photos`
- SQL (0.001708) SHOW FIELDS FROM `cameras`
- SQL (0.001413) SHOW FIELDS FROM `users`
- SQL (0.001552) SHOW FIELDS FROM `photos`
- SQL (0.001604) SHOW FIELDS FROM `cameras`
- SQL (0.001482) SHOW FIELDS FROM `users`
- SQL (0.001500) SHOW FIELDS FROM `photos`
- SQL (0.001349) SHOW FIELDS FROM `cameras`
- SQL (0.000227) SELECT *
-FROM users
-WHERE users.id = 1
- User Columns (0.001386) SHOW FIELDS FROM `users`
- SQL (0.000269) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- Photo Columns (0.001425) SHOW FIELDS FROM `photos`
- SQL (0.001065) SHOW FIELDS FROM `users`
- SQL (0.001438) SHOW FIELDS FROM `photos`
- SQL (0.001376) SHOW FIELDS FROM `cameras`
- SQL (0.000107) SET SQL_AUTO_IS_NULL=0
- SQL (0.010766) SHOW FIELDS FROM `users`
- SQL (0.002300) SHOW FIELDS FROM `photos`
- SQL (0.001306) SHOW FIELDS FROM `cameras`
- SQL (0.001562) SHOW FIELDS FROM `users`
- SQL (0.001725) SHOW FIELDS FROM `photos`
- SQL (0.001356) SHOW FIELDS FROM `cameras`
- SQL (0.001539) SHOW FIELDS FROM `users`
- SQL (0.001465) SHOW FIELDS FROM `photos`
- SQL (0.001345) SHOW FIELDS FROM `cameras`
- SQL (0.000303) SELECT *
-FROM users
-WHERE users.id = 1
- User Columns (0.001553) SHOW FIELDS FROM `users`
- SQL (0.000299) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- Photo Columns (0.001329) SHOW FIELDS FROM `photos`
- SQL (0.001422) SHOW FIELDS FROM `users`
- SQL (0.001414) SHOW FIELDS FROM `photos`
- SQL (0.001429) SHOW FIELDS FROM `cameras`
- SQL (0.000349) SELECT *
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id LEFT OUTER JOIN cameras ON photos.camera_id = cameras.id
-WHERE users.id = 1
- SQL (0.000109) SET SQL_AUTO_IS_NULL=0
- SQL (0.010688) SHOW FIELDS FROM `users`
- SQL (0.002247) SHOW FIELDS FROM `photos`
- SQL (0.001542) SHOW FIELDS FROM `cameras`
- SQL (0.001432) SHOW FIELDS FROM `users`
- SQL (0.001390) SHOW FIELDS FROM `photos`
- SQL (0.001428) SHOW FIELDS FROM `cameras`
- SQL (0.001641) SHOW FIELDS FROM `users`
- SQL (0.001602) SHOW FIELDS FROM `photos`
- SQL (0.001426) SHOW FIELDS FROM `cameras`
- SQL (0.000253) SELECT *
-FROM users
-WHERE users.id = 1
- User Columns (0.001398) SHOW FIELDS FROM `users`
- SQL (0.000304) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- Photo Columns (0.001457) SHOW FIELDS FROM `photos`
- SQL (0.001298) SHOW FIELDS FROM `users`
- SQL (0.001539) SHOW FIELDS FROM `photos`
- SQL (0.001487) SHOW FIELDS FROM `cameras`
- SQL (0.000139) SET SQL_AUTO_IS_NULL=0
- SQL (0.001575) SHOW FIELDS FROM `users`
- SQL (0.001596) SHOW FIELDS FROM `photos`
- SQL (0.001406) SHOW FIELDS FROM `cameras`
- SQL (0.001432) SHOW FIELDS FROM `users`
- SQL (0.001640) SHOW FIELDS FROM `photos`
- SQL (0.001465) SHOW FIELDS FROM `cameras`
- SQL (0.001463) SHOW FIELDS FROM `users`
- SQL (0.001577) SHOW FIELDS FROM `photos`
- SQL (0.001434) SHOW FIELDS FROM `cameras`
- SQL (0.000258) SELECT *
-FROM users
-WHERE users.id = 1
- User Columns (0.001417) SHOW FIELDS FROM `users`
- SQL (0.000338) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- Photo Columns (0.001542) SHOW FIELDS FROM `photos`
- SQL (0.001474) SHOW FIELDS FROM `users`
- SQL (0.001582) SHOW FIELDS FROM `photos`
- SQL (0.001524) SHOW FIELDS FROM `cameras`
- SQL (0.000112) SET SQL_AUTO_IS_NULL=0
- SQL (0.016053) SHOW FIELDS FROM `users`
- SQL (0.001843) SHOW FIELDS FROM `photos`
- SQL (0.001493) SHOW FIELDS FROM `cameras`
- SQL (0.001376) SHOW FIELDS FROM `users`
- SQL (0.001547) SHOW FIELDS FROM `photos`
- SQL (0.001670) SHOW FIELDS FROM `cameras`
- SQL (0.001504) SHOW FIELDS FROM `users`
- SQL (0.001756) SHOW FIELDS FROM `photos`
- SQL (0.001567) SHOW FIELDS FROM `cameras`
- SQL (0.001476) SHOW FIELDS FROM `users`
- SQL (0.001574) SHOW FIELDS FROM `photos`
- SQL (0.001402) SHOW FIELDS FROM `cameras`
- SQL (0.001565) SHOW FIELDS FROM `users`
- SQL (0.001346) SHOW FIELDS FROM `photos`
- SQL (0.001424) SHOW FIELDS FROM `cameras`
- SQL (0.001447) SHOW FIELDS FROM `users`
- SQL (0.001570) SHOW FIELDS FROM `photos`
- SQL (0.001502) SHOW FIELDS FROM `cameras`
- SQL (0.000244) SELECT *
-FROM users
-WHERE users.id = 1
- User Columns (0.001413) SHOW FIELDS FROM `users`
- SQL (0.000304) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- Photo Columns (0.001471) SHOW FIELDS FROM `photos`
- SQL (0.034694) SHOW FIELDS FROM `users`
- SQL (0.001709) SHOW FIELDS FROM `photos`
- SQL (0.001407) SHOW FIELDS FROM `cameras`
- SQL (0.000109) SET SQL_AUTO_IS_NULL=0
- SQL (0.010677) SHOW FIELDS FROM `users`
- SQL (0.002292) SHOW FIELDS FROM `photos`
- SQL (0.001455) SHOW FIELDS FROM `cameras`
- SQL (0.001467) SHOW FIELDS FROM `users`
- SQL (0.001537) SHOW FIELDS FROM `photos`
- SQL (0.001429) SHOW FIELDS FROM `cameras`
- SQL (0.001476) SHOW FIELDS FROM `users`
- SQL (0.001679) SHOW FIELDS FROM `photos`
- SQL (0.001440) SHOW FIELDS FROM `cameras`
- SQL (0.001147) SHOW FIELDS FROM `users`
- SQL (0.001687) SHOW FIELDS FROM `photos`
- SQL (0.001424) SHOW FIELDS FROM `cameras`
- SQL (0.001509) SHOW FIELDS FROM `users`
- SQL (0.001622) SHOW FIELDS FROM `photos`
- SQL (0.001417) SHOW FIELDS FROM `cameras`
- SQL (0.001430) SHOW FIELDS FROM `users`
- SQL (0.001540) SHOW FIELDS FROM `photos`
- SQL (0.001420) SHOW FIELDS FROM `cameras`
- SQL (0.000244) SELECT *
-FROM users
-WHERE users.id = 1
- User Columns (0.001374) SHOW FIELDS FROM `users`
- SQL (0.000288) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- Photo Columns (0.001449) SHOW FIELDS FROM `photos`
- SQL (0.034463) SHOW FIELDS FROM `users`
- SQL (0.001751) SHOW FIELDS FROM `photos`
- SQL (0.002051) SHOW FIELDS FROM `cameras`
- SQL (0.000108) SET SQL_AUTO_IS_NULL=0
- SQL (0.010738) SHOW FIELDS FROM `users`
- SQL (0.002251) SHOW FIELDS FROM `photos`
- SQL (0.001306) SHOW FIELDS FROM `cameras`
- SQL (0.001717) SHOW FIELDS FROM `users`
- SQL (0.001554) SHOW FIELDS FROM `photos`
- SQL (0.001364) SHOW FIELDS FROM `cameras`
- SQL (0.001622) SHOW FIELDS FROM `users`
- SQL (0.001490) SHOW FIELDS FROM `photos`
- SQL (0.001310) SHOW FIELDS FROM `cameras`
- SQL (0.001666) SHOW FIELDS FROM `users`
- SQL (0.002175) SHOW FIELDS FROM `photos`
- SQL (0.001601) SHOW FIELDS FROM `cameras`
- SQL (0.001647) SHOW FIELDS FROM `users`
- SQL (0.002284) SHOW FIELDS FROM `photos`
- SQL (0.001156) SHOW FIELDS FROM `cameras`
- SQL (0.001447) SHOW FIELDS FROM `users`
- SQL (0.001549) SHOW FIELDS FROM `photos`
- SQL (0.001431) SHOW FIELDS FROM `cameras`
- SQL (0.000391) SELECT *
-FROM users
-WHERE users.id = 1
- User Columns (0.001439) SHOW FIELDS FROM `users`
- SQL (0.000284) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- Photo Columns (0.001431) SHOW FIELDS FROM `photos`
- SQL (0.036129) SHOW FIELDS FROM `users`
- SQL (0.001678) SHOW FIELDS FROM `photos`
- SQL (0.001446) SHOW FIELDS FROM `cameras`
- SQL (0.000111) SET SQL_AUTO_IS_NULL=0
- SQL (0.010686) SHOW FIELDS FROM `users`
- SQL (0.002498) SHOW FIELDS FROM `photos`
- SQL (0.001549) SHOW FIELDS FROM `cameras`
- SQL (0.001496) SHOW FIELDS FROM `users`
- SQL (0.001586) SHOW FIELDS FROM `photos`
- SQL (0.001451) SHOW FIELDS FROM `cameras`
- SQL (0.001455) SHOW FIELDS FROM `users`
- SQL (0.001648) SHOW FIELDS FROM `photos`
- SQL (0.001364) SHOW FIELDS FROM `cameras`
- SQL (0.001406) SHOW FIELDS FROM `users`
- SQL (0.001501) SHOW FIELDS FROM `photos`
- SQL (0.001399) SHOW FIELDS FROM `cameras`
- SQL (0.001388) SHOW FIELDS FROM `users`
- SQL (0.001888) SHOW FIELDS FROM `photos`
- SQL (0.001454) SHOW FIELDS FROM `cameras`
- SQL (0.001570) SHOW FIELDS FROM `users`
- SQL (0.002665) SHOW FIELDS FROM `photos`
- SQL (0.001922) SHOW FIELDS FROM `cameras`
- SQL (0.001160) SELECT *
-FROM users
-WHERE users.id = 1
- User Columns (0.001117) SHOW FIELDS FROM `users`
- SQL (0.001219) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- Photo Columns (0.001255) SHOW FIELDS FROM `photos`
- SQL (0.034678) SHOW FIELDS FROM `users`
- SQL (0.001684) SHOW FIELDS FROM `photos`
- SQL (0.001242) SHOW FIELDS FROM `cameras`
- SQL (0.000110) SET SQL_AUTO_IS_NULL=0
- SQL (0.010673) SHOW FIELDS FROM `users`
- SQL (0.002380) SHOW FIELDS FROM `photos`
- SQL (0.001444) SHOW FIELDS FROM `cameras`
- SQL (0.001580) SHOW FIELDS FROM `users`
- SQL (0.001158) SHOW FIELDS FROM `photos`
- SQL (0.001358) SHOW FIELDS FROM `cameras`
- SQL (0.002625) SHOW FIELDS FROM `users`
- SQL (0.002378) SHOW FIELDS FROM `photos`
- SQL (0.001774) SHOW FIELDS FROM `cameras`
- SQL (0.002249) SHOW FIELDS FROM `users`
- SQL (0.001218) SHOW FIELDS FROM `photos`
- SQL (0.002117) SHOW FIELDS FROM `cameras`
- SQL (0.001795) SHOW FIELDS FROM `users`
- SQL (0.002656) SHOW FIELDS FROM `photos`
- SQL (0.001412) SHOW FIELDS FROM `cameras`
- SQL (0.001415) SHOW FIELDS FROM `users`
- SQL (0.001519) SHOW FIELDS FROM `photos`
- SQL (0.001043) SHOW FIELDS FROM `cameras`
- SQL (0.000346) SELECT *
-FROM users
-WHERE users.id = 1
- User Columns (0.001560) SHOW FIELDS FROM `users`
- SQL (0.000297) SELECT photos.user_id, photos.camera_id, photos.id
-FROM users LEFT OUTER JOIN photos ON users.id = photos.user_id
-WHERE users.id = 1
- Photo Columns (0.001471) SHOW FIELDS FROM `photos`
- SQL (0.001420) SHOW FIELDS FROM `users`
- SQL (0.001463) SHOW FIELDS FROM `photos`
- SQL (0.001395) SHOW FIELDS FROM `cameras`
diff --git a/spec/integration/scratch_spec.rb b/spec/integration/scratch_spec.rb
index 32ee98d361..b5d27f1dc2 100644
--- a/spec/integration/scratch_spec.rb
+++ b/spec/integration/scratch_spec.rb
@@ -1,42 +1,226 @@
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
-describe 'Relational Algebra' do
+describe 'ActiveRelation', 'Proposed refactoring to ActiveRecord, introducing both a SQL
+ builder and a Relational Algebra to mediate connections
+ between ActiveRecord and the database. The goal of the
+ refactoring is to remove code duplication concerning AR
+ associations; remove complexity surrounding eager loading;
+ comprehensively solve quoting issues; remove the with_scope
+ merging logic; minimize the need for with_scope in general;
+ simplify the implementation of plugins like HasFinder and
+ ActsAsParanoid; introduce an identity map; and allow for
+ query optimization. All this while effectively not changing
+ the public interface of ActiveRecord.
+ The Relational Algebra makes these ambitious goals
+ possible. There\'s no need to be scared by the math, it\'s
+ actually quite simple. Relational Algebras have some nice
+ advantages over flexible SQL builders like Sequel and and
+ SqlAlchemy (a beautiful Python library). Principally, a
+ relation is writable as well as readable. This obviates the
+ :create with_scope, and perhaps also
+ #set_belongs_to_association_for.
+ With so much complexity removed from ActiveRecord, I
+ propose a mild reconsideration of the architecture of Base,
+ AssocationProxy, AssociationCollection, and so forth. These
+ should all be understood as \'Repositories\': a factory that
+ given a relation can manufacture objects, and given an object
+ can manipulate a relation. This may sound trivial, but I
+ think it has the potential to make the code much smaller and
+ more consistent.' do
before do
- @users = TableRelation.new(:users)
- @photos = TableRelation.new(:photos)
- @cameras = TableRelation.new(:cameras)
- @user = @users.select(@users[:id] == 1)
- @user_photos = (@user << @photos).on(@user[:id] == @photos[:user_id])
- @user_cameras = (@user_photos << @cameras).on(@user_photos[:camera_id] == @cameras[:id])
+ class User < ActiveRecord::Base; has_many :photos end
+ class Photo < ActiveRecord::Base; belongs_to :camera end
+ class Camera < ActiveRecord::Base; end
end
- it 'simulates User.has_many :photos' do
- @user_photos.project(*@photos.attributes).to_s.should be_like("""
- SELECT `photos`.`id`, `photos`.`user_id`, `photos`.`camera_id`
- FROM `users`
- LEFT OUTER JOIN `photos`
- ON `users`.`id` = `photos`.`user_id`
- WHERE
- `users`.`id` = 1
- """)
+ before do
+ # Rather than being associated with a table, an ActiveRecord is now associated with
+ # a relation.
+ @users = User.relation
+ @photos = Photo.relation
+ @cameras = Camera.relation
+ # A first taste of a Relational Algebra: User.find(1)
+ # == is overridden on attributes to return a predicate, not true or false
+ @user = @users.select(@users[:id] == 1)
+ end
+
+ # In a Relational Algebra, the various ActiveRecord associations become a simple
+ # mapping from one relation to another. The Reflection object parameterizes the
+ # mapping.
+ def user_has_many_photos(user_relation)
+ primary_key = User.reflections[:photos].klass.primary_key.to_sym
+ foreign_key = User.reflections[:photos].primary_key_name.to_sym
+
+ # << is the left outer join operator
+ (user_relation << @photos).on(user_relation[primary_key] == @photos[foreign_key])
+ end
+
+ def photo_belongs_to_camera(photo_relation)
+ primary_key = Photo.reflections[:camera].klass.primary_key.to_sym
+ foreign_key = Photo.reflections[:camera].primary_key_name.to_sym
+
+ (photo_relation << @cameras).on(photo_relation[foreign_key] == @cameras[primary_key])
end
+
+ describe 'Relational Algebra', 'a relational algebra allows the implementation of
+ associations like has_many to be specified once,
+ regardless of eager-joins, has_many :through, and so
+ forth' do
+ it 'generates the query for User.has_many :photos' do
+ user_photos = user_has_many_photos(@user)
+ # the 'project' operator limits the columns that come back from the query.
+ # Note how all the operators are compositional: 'project' is applied to a query
+ # that previously had been joined and selected.
+ user_photos.project(*@photos.attributes).to_s.should be_like("""
+ SELECT `photos`.`id`, `photos`.`user_id`, `photos`.`camera_id`
+ FROM `users`
+ LEFT OUTER JOIN `photos`
+ ON `users`.`id` = `photos`.`user_id`
+ WHERE
+ `users`.`id` = 1
+ """)
+ # Also note the correctly quoted columns and tables. In this instance the
+ # MysqlAdapter from ActiveRecord is used to do the escaping.
+ end
- it 'simulates a User.has_many :cameras :through => :photos' do
- @user_cameras.project(*@cameras.attributes).to_s.should be_like("""
- SELECT `cameras`.`id`
- FROM `users`
- LEFT OUTER JOIN `photos`
- ON `users`.`id` = `photos`.`user_id`
- LEFT OUTER JOIN `cameras`
- ON `photos`.`camera_id` = `cameras`.`id`
- WHERE
- `users`.`id` = 1
- """)
+ it 'generates the query for User.has_many :cameras :through => :photos' do
+ # note, again, the compositionality of the operators:
+ user_cameras = photo_belongs_to_camera(user_has_many_photos(@user))
+ user_cameras.project(*@cameras.attributes).to_s.should be_like("""
+ SELECT `cameras`.`id`
+ FROM `users`
+ LEFT OUTER JOIN `photos`
+ ON `users`.`id` = `photos`.`user_id`
+ LEFT OUTER JOIN `cameras`
+ ON `photos`.`camera_id` = `cameras`.`id`
+ WHERE
+ `users`.`id` = 1
+ """)
+ end
+
+ it 'generates the query for an eager join for a collection using the same logic as
+ for an association on an individual row' do
+ users_cameras = photo_belongs_to_camera(user_has_many_photos(@users))
+ users_cameras.to_s.should be_like("""
+ SELECT `users`.`name`, `users`.`id`, `photos`.`id`, `photos`.`user_id`, `photos`.`camera_id`, `cameras`.`id`
+ FROM `users`
+ LEFT OUTER JOIN `photos`
+ ON `users`.`id` = `photos`.`user_id`
+ LEFT OUTER JOIN `cameras`
+ ON `photos`.`camera_id` = `cameras`.`id`
+ """)
+ end
+
+ it 'is trivial to disambiguate columns' do
+ users_cameras = photo_belongs_to_camera(user_has_many_photos(@users)).qualify
+ users_cameras.to_s.should be_like("""
+ SELECT `users`.`name` AS 'users.name', `users`.`id` AS 'users.id', `photos`.`id` AS 'photos.id', `photos`.`user_id` AS 'photos.user_id', `photos`.`camera_id` AS 'photos.camera_id', `cameras`.`id` AS 'cameras.id'
+ FROM `users`
+ LEFT OUTER JOIN `photos`
+ ON `users`.`id` = `photos`.`user_id`
+ LEFT OUTER JOIN `cameras`
+ ON `photos`.`camera_id` = `cameras`.`id`
+ """)
+ end
+
+ it 'obviates the need for with_scope merging logic since, e.g.,
+ `with_scope :conditions => ...` is just a #select operation on the relation' do
+ end
+
+ it 'may eliminate the need for with_scope altogether since the associations no longer
+ need it: the relation underlying the association fully encapsulates the scope' do
+ end
end
+
+ describe 'Repository', 'ActiveRecord::Base, HasManyAssociation, and so forth are
+ all repositories: given a relation, they manufacture objects' do
+ before do
+ class << ActiveRecord::Base; public :instantiate end
+ end
- it '' do
- # p @user_cameras.qualify.to_s
- #
- # @users.rename()
+ it 'manufactures objects' do
+ User.instantiate(@users.first).attributes.should == {"name" => "hai", "id" => 1}
+ end
+
+ it 'frees ActiveRecords from being tied to tables' do
+ pending # pending, but trivial to implement:
+
+ class User < ActiveRecord::Base
+ # acts_as_paranoid without alias_method_chain:
+ set_relation @users.select(@users[:deleted_at] != nil)
+ end
+
+ class Person < ActiveRecord::Base
+ set_relation @accounts.join(@profiles).on(@accounts[:id] == @profiles[:account_id])
+ end
+ # I know this sounds crazy, but even writes are possible in the last example.
+ # calling #save on a person can write to two tables!
+ end
+
+ describe 'the n+1 problem' do
+ describe 'the eager join algorithm is vastly simpler' do
+ it 'three active records are loaded with only one query' do
+ # using 'rr' mocking framework: the real #select_all is called, but we assert
+ # that it only happens once:
+ mock.proxy(ActiveRecord::Base.connection).select_all.with_any_args.once
+ users_cameras = photo_belongs_to_camera(user_has_many_photos(@users)).qualify
+ user = User.instantiate(users_cameras.first, [:photos => [:camera]])
+ user.photos.first.camera.attributes.should == {"id" => 1}
+ end
+
+ before do
+ class << ActiveRecord::Base
+ # An identity map makes this algorithm efficient.
+ def instantiate_with_cache(record)
+ cache.get(record) { instantiate_without_cache(record) }
+ end
+ alias_method_chain :instantiate, :cache
+
+ # for each row in the result set, which may contain data from n tables,
+ # - instantiate that slice of the data corresponding to the current class
+ # - recusively walk the dependency chain and repeat.
+ def instantiate_with_joins(data, joins = [])
+ record = unqualify(data)
+ returning instantiate_without_joins(record) do |object|
+ joins.each do |join|
+ case join
+ when Symbol
+ object.send(association = join).instantiate(data)
+ when Hash
+ join.each do |association, nested_associations|
+ object.send(association).instantiate(data, nested_associations)
+ end
+ end
+ end
+ end
+ end
+ alias_method_chain :instantiate, :joins
+
+ private
+ # Sometimes, attributes are qualified to remove ambiguity. Here, bring back
+ # ambiguity by translating 'users.id' to 'id' so we can call #attributes=.
+ # This code should work correctly if the attributes are qualified or not.
+ def unqualify(qualified_attributes)
+ qualified_attributes_for_this_class = qualified_attributes. \
+ slice(*relation.attributes.collect(&:qualified_name))
+ qualified_attributes_for_this_class.alias do |qualified_name|
+ qualified_name.split('.')[1] || qualified_name # the latter means it must not really be qualified
+ end
+ end
+ end
+ end
+
+ it "is possible to be smarter about eager loading. DataMapper is smart enough
+ to notice when you do users.each { |u| u.photos } and make this two queries
+ rather than n+1: the first invocation of #photos is lazy but it preloads
+ photos for all subsequent users. This is substantially easier with the
+ Algebra since we can do @user.join(@photos).on(...) and transform that to
+ @users.join(@photos).on(...), relying on the IdentityMap to eliminate
+ the n+1 problem. This is somewhat similar to ActiveRecordContext but it
+ works with every association type, not just belongs_to." do
+ pending
+ end
+ end
+ end
end
end \ No newline at end of file
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index edace54f58..8d90e0dd51 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,5 +1,6 @@
require 'rubygems'
require 'spec'
+require 'rr'
require File.join(File.dirname(__FILE__), '..', 'lib', 'sql_algebra')
require File.join(File.dirname(__FILE__), 'spec_helpers', 'be_like')
@@ -24,4 +25,5 @@ end
Spec::Runner.configure do |config|
config.include(BeLikeMatcher)
+ config.mock_with :rr
end \ No newline at end of file
diff --git a/spec/sql_builder/conditions_spec.rb b/spec/sql_builder/conditions_spec.rb
index c1cae902c1..dc44cedc85 100644
--- a/spec/sql_builder/conditions_spec.rb
+++ b/spec/sql_builder/conditions_spec.rb
@@ -10,7 +10,7 @@ describe ConditionsBuilder do
column(:c, :d, 'e')
end
end.to_s.should be_like("""
- `a`.`b` = 'e'
+ `a`.`b` = `c`.`d`
""")
end
end
diff --git a/spec/sql_builder/select_builder_spec.rb b/spec/sql_builder/select_builder_spec.rb
index 060c642c1b..122539967e 100644
--- a/spec/sql_builder/select_builder_spec.rb
+++ b/spec/sql_builder/select_builder_spec.rb
@@ -87,7 +87,7 @@ describe SelectBuilder do
end.to_s.should be_like("""
SELECT *
FROM `users`
- ORDER BY `users`.`id`, 'alias'
+ ORDER BY `users`.`id`, `users`.`created_at`
""")
end
end