Releases: rom-rb/rom-sql
2.1.0
v2.1.0 2017-10-23
Added
- Support for PG's range types (v-kolesnikov)
- Support for PG's
ltree(GustavoCaso + solnic) - Support for the
FILTERclause (flash-gordon)
Fixed
- Schema inference works with primary keys that have custom types (ie an enum PK column) (v-kolesnikov)
- Ruby warnings are gone (solnic)
2.0.0
v2.0.0 2017-10-18
Added
-
Support for schema plugins (flash-gordon)
-
Support for auto migrations (flash-gordon)
-
Add DLS for describing table indexes (flash-gordon)
schema do indexes do index :name, name: :unique_name, unique: true index :props, type: :gin index :name, name: :long_names_only, predicate: 'length(name) > 10' index :user_id, :title, name: :composite_idx end end
-
Support for composite indexes in the auto-restrictions plugin (flash-gordon)
-
SQL::Gateway#callcalls a SQL function (flash-gordon)gateway.(:upper, 'foo') # => "FOO" gateway.(:pg_advisory_xact_lock, 1234) # => nil
-
SQL::Gateway#runexecutes a SQL string, e.g. a DDL statement (flash-gordon)gateway.run('set session IntervalStyle to default')
-
SQL::Relation#existsjoins a relation with theEXISTSoperator (flash-gordon)users.exists(posts) # => users with posts
-
Support for processing a relation in batches (flash-gordon)
users.each_batch(size: 100) do |rel| rel. command(:update). call(name: users[:first_name].concat(users[:last_name]) end
-
SQL::Relation#importinserts data from another relation using theINSERT ... AS SELECTsyntax which is often far more effective than row-by-row processing and an ordinary multi-insert. Relations defined on another gateway are also supported, and in this case, the implementation falls back to the multi-insert strategy (flash-gordon)users.import(authors.select { first_name.concat(last_name).as(:name) })
-
Support for
tinytext,text,mediumtext, and `longtext data types in MySQL (panthomakos) -
The new
pg_explainplugin for getting query plans on PostgreSQL (flash-gordon)users.by_pk(1).explain(format: :json, analyze: true)
-
Support for window function calls
employees.select { [dep_no, salary, int::avg(salary).over(partition: dep_no, order: id).as(:avg_salary)] }
-
Function result can be negated, also
ROM::SQL::Function#notwas added (flash-gordon)users.where { !lower(name).is('John') } users.where { lower(name).not('John') }
Changed
- [BREAKING] based on rom 4.0 now (flash-gordon + solnic)
- [BREAKING]
Associatescommand plugin requires associations now (solnic) - [BREAKING]
Command#transactionis gone in favor ofRelation#transaction(solnic) - [BREAKING]
PG::JSONArray,PG::JSONBArray,PG::JSONHash, andPG::JSONBHashtypes were dropped, usePG::JSONandPG::JSONBinstead (flash-gordon) - [BREAKING] The
pg_hstoreextension now doesn't get loaded automatically, use the:extensionoption to load it on config initialization (flash-gordon) ManyToOneno longer uses a join (solnic)AutoCombineandAutoWrapplugins were removed as this functionality is provided by core API (solnic)- Foreign keys are indexed by default (flash-gordon)
- Schemas are qualified by default (solnic)
PG::JSON,PG::JSONB, andPG::Arraynow all have read types so that they return plain Hash/Array values instead of Sequel's wrappers (flash-gordon)
Fixed
- Self-ref associations work correctly with custom FKs (solnic)
- Aliased associations with custom FKs work correctly (solnic)
- Defining a custom dataset block no longer prevents default views like
by_pkto be defined (solnic) Relation#groupuses canonical schema now (solnic)
v1.3.5
v1.3.3
Added
-
Relation#lock, row-level locking using theSELECT FOR UPDATEclause (flash-gordon) -
getandget_textmethods for thePG::JSONtype (flash-gordon) -
Support for converting data type with
CASTusing the function DSL (flash-gordon)users.select { string::cast(id, 'varchar').as(:id_str) }
-
Support for
EXISTS(v-kolesnikov)subquery = tasks.where(tasks[:user_id].qualified => users[:id].qualified) users.where { exists(subquery) }
Fixed
- Fixed a regression introduced in v1.3.2 caused by doing way more work processing the default dataset (flash-gordon)
v1.3.2
Added
- Support for filtering with a SQL function in the
WHEREclause. Be sure you're using it wisely and don't call it on large datasets ;) (flash-gordon) Voidtype for calling functions without returning value (flash-gordon)- Support for
PG::Arraytransformations and queries (flash-gordon)
Fixed
- A bunch of warnings from Sequel 4.46
v1.3.1
v1.3.0
Added
- New
Relation#exist?predicate checks if the relation has at least one tuple (flash-gordon) - Support for JSONB transformations and queries using native DSL (flash-gordon)
- Add
ROM::SQL::Attribute#notfor negated boolean equality expressions (AMHOL) - Add
ROM::SQL::Attribute#!for negated attribute's sql expressions (solnic) - Inferrer gets limit constraints for string data types and stores them in type's meta (v-kolesnikov)
Fixed
- Fixed usage of PostgreSQL's commands with a composite relation (flash-gordon)
- Translation of
true/false/nilequality checks tois/is notSQL statements inROM::SQL::Attribute#is(AMHOL) associatescommand plugin coerces parent collections to hashes correctly (aarek+solnic)by_pkworks correctly even when PK is not projected (solnic)
Changed
-
Global private interface
SQL::Gateway.instancehas been deprecated. Now if you run migrations
with ROM you should set up a ROM config in thedb:setuptask with something similar tonamespace :db task :setup do ROM::SQL::RakeSupport.env = ROM::Configuration.new(:sql, ENV['DATABASE_URL']) end end
v1.2.2
v1.2.1
Fixed
- Allow for joining by a
RelationProxyinstance fromrom-repository(davydovanton)
v1.2.0
Added
- Support for configuring multiple associations for a command (solnic)
- Support for passing parent tuple(s) as
parentoption inCommand#with_association(solnic) - Support for join using assocation name (flash-gordon)