Revision history for UR
0.47 2018-08-06T14:26:31Z
Fixed test breakage from changes in the JSON serialzer for Views
Fixed test breakage from behavior changes in Perl 5.26 and 5.28
Other misc bug fixes
0.46 2017-03-24T19:40:54Z
Documentation fixes
Bug fixes for the mysql data source
0.45 2016-09-21T22:48:23Z
UR now supports Roles. See the docs in UR::Role.
-limit and -offset are now handled in the database where possible.
Added method fatal_message() to the base class. Acts like
error_message(), but as an exception instead of just a print.
Software transactions can have custom validators.
Lots of bug fixes
0.44 2015-06-30T21:21:44Z
Added UR::Context::AutoUnloadPool - a mechanism for automatically
unloading objects when a leaving a scope.
Added methods to UR::Object::Type to introspect methods names relating
to is_many properties.
The MetaDB no longer tracks owner/schema. Classes using tables not
in the default schema should have their table_name listed as
"schema.table".
Added copy() constructor to UR::Object
Removed old, deprecated filter parser for turning text into a
UR::BoolExpr within UR::Object::Command::List
Meta-params like -order_by are now allowed in a delegated property's
where clase.
Retrieving values for doubly-delegated properties is more efficient.
An id-by delegated property can point to a class with multiple ID
properties. The linking value is the composite ID.
Observers now have a 'once' property. Setting it to true ensures the
callback will only ever fire one time. The Observer is deleted.
Properties can have a 'calculated_default' subref. Works like
default_value, but the return value from the subref is the default
value rather than have a hardcoded default.
Fixes to work with newer versions of SQLite
Added __rollback__() to UR::Object, called when the base Context
rolls-back. Subclasses can override this to provide special
behavior during rollback. The override should also call
SUPER::__rollback__().
0.43 2014-07-03T14:13:27Z
Set objects now have member_iterator() method.
Data loaded from an RDBMS during the life of a program can be copied
to an alternate database.
Use the "C" collation with PostgreSQL when doing an order-by on a
text-type column to match how UR will sort cached objects using
perl's cmp.
Singleton accessors can be called on the class as well as the instance.
Class initializer is more strict about what is a valid property name;
it must be a valid function name.
Added UR::Value::JSON class. Its "id" is a JSON-encoded string of the
instance's properties and values.
Added UR::Context::Transaction::eval() and do() functions to wrap
software transactions around blocks.
Added UR::DataSource::RDBMSRetriableOperations mixin class to allow
RDBMSs to control whether failed DB operations should be retried.
Added signals for when a data source fails a query or commit, and
when the handle is created or disconnected.
Added signal to UR::Context for when synchronizing to the datasources
has succeeded or failed.
Added 'isa' operator to boolean expressions. Evaluates to true if the
attribute isa the given class.
Fixed a bug where a Set object's value for an aggregate would be incorrect
if cached member objects' values change.
Fixed a bug where UR objects frozen in boolean expressions could cause
database rows to be deleted when thawed.
UR's class browser (ur sys class-browser) is working again.
0.42 2014-06-26T22:12:56Z
Test releases to try out our new release system with minilla
0.41 2013-03-18
above.pm now imports symbols into the caller's package
Fix for database connections after fork() in the child process
Fixes for command-line parsing, implied property metadata and database joins
Many test updates to work on more architectures
0.40 2013-02-25
RDBMS data sources now have infrastructure for comparing text and
non-text columns during a join. When a number or date column
is joined with a text column, the non-text column is converted
with the to_char() function in the Oracle data source.
An object-type property's default_value can now be specified using a
hashref of keys/values.
Property definitions can now include example_values - a listref of
values shown to the user in the autogenerated documentation.
Documentation for the Object Lister base command is expanded.
0.392 2013-01-31
Changed the name for the Yapp driver package to avoid a CPAN warning
about unauthorized use of their namespace
0.39 2013-01-30
Better support for PostgreSQL. It is now on par with Oracle.
New datasource UR::DataSource::Filesystem. It obsoletes UR::DataSource::File
and UR::DataSource::FileMux, and is more flexible.
Classes can specify a query hint when they are used as the primary
class of a get() or when they are involved in a join.
BoolExprs with an or-clause now support hints and order-by correctly.
Messaging methods (error_message(), status_message(), etc) now trigger
observers of the same name. This means any number of message
observers can be attached at any point in the class hierarchy.
Using chained delegated properties with the dot-syntax (object.delegate.prop)
is accepted in more places.
Better support for queries using direct SQL.
Many fixes for the Boolean Expression syntax parser. Besides fixing
bugs, it now supports more operators and understands 'offset' and
'limit'.
Support for defining a property that is an alias for another.
Fixes for remaining connected to databases after fork().
Optimization for the case where a delegation goes through an abstract
class with no data source and back to the original data source. It
now does one query instead of many.
Improvements to the Command API documentation.
Removed some deps on XML-related modules.
0.38 2012-03-28
Bug fixes to support C3 inheritance on the Mac correctly.
Rich extensions to primitive/value data-types for files, etc.
Optimization for very large in-clauses.
Database updates now infer table structure from class meta-data instead of leaning on database metadata when inserting (update and delete already do this).
Bug fixes to the new boolean expression parser.
Fixes to complex inheritance in RDBMS data.
Fix to sorting issues in older Perl 5.8.
Bug fixes to boolean expressions with values which are non-UR objects
Smarter query plans when the join table is variable (not supported in SQL, but in the API), leading to multiple database queries where necessary.
0.37 2012-02-03
Added a proper parser for generating Boolean Expressions from text
strings. The object lister commands (UR::Object::Command::List)
use it to process the --filter, and it can be used directly
through the method UR::BoolExpr::resolve_for_string(). See the
UR::BoolExpr pod for more info.
Or-type Boolean Expressions now support -order, and can be the filter
for iterators.
Important Bugfixes:
* Better error messages when a module fails to load properly
during autoloading.
* Class methods called on Set instances are dispatched to the
proper class instead of called on the Set's members.
* Values in an SQL in-clause are escaped using DBI's quote() method.
0.36 2012-01-05
Fix for 'like' clause's escape string on PostgreSQL
Speed improvement for class initialization by normalizing metadata
more efficiently and only calculating the cached data for
property_meta_for_name() once.
Workaround for a bug in Perl 5.8 involving sorters by avoiding method
calls inside some sort subs
Fully deprecate the old Subscription API in favor of the new Observer api
UR::Value classes use UR::DataSource::Default and the normal loading
mechanism. Previously, UR::Values used a special codepath to get
loaded into memory
Add a json perspective for available views
Allow descending sorts in order-by. For example:
my @o = Some::Class->get(prop => 'value', -order => ['field1','-field2']
To get all objects where prop is equal to the string 'value', first
sorted by field1 in ascending order, then by field2 in descending
order
Standardize sorting results on columns with NULLs by having NULL/undef
always appears at the end for ascending sorts. Previously, the
order depended on the data source's behavior. Oracle and
PostgreSQL put them at the end, while MySQL, SQLite and cached
get()s put them at the beginning.
Fix exit code for 'ur test run' when the --lsf arg is used. It used
always return a false value (1). Now it returns true (0) if all
tests pass, and false (1) if any one test fails.
UR::Object now implements the messaging API that used to be in Command
(error_message, dump_error_messages, etc). The old messaging API
is now deprecated.
0.35 2011-10-28
Queries with the -recurse option are suppored for all datasources, not
just those that support recursive queries directly
Make the object listers more user-friendly by implicitly putting '%'
wildcards on either side of the user-supplied 'like' filter
Update to the latest version of Getopt::Complete for command-line completion
Object Set fixes (non-datasource expressable filters)
Bugfixes for queries involving multiple joins to the same table with
different join conditions
Queries with -offset/-limit and -page are now supported.
Query efficiency improvements:
* id_by properties with a know data_type have special code in
the bridging logic to handle them more efficiently
* large in-clause testing uses a binary search instead of linear
for cached objects
* no longer indexing delegated properties results in fewer unnecessary
queries during loading
* remove unnecessary rule evaluations against loaded objects
* When a query includes a filter or -hints for a calculated property,
implicitly add its calculate_from properties to the -hints list
* Rules in the query cache are always normalized, which makes
many lookups faster
* Fix a bug where rules in the query cache related to in-clause
queries were malformed, resulting in fewer queries to the data source
Command module fixes:
* running with --help no longer emits error messages about other
missing params
* Help output only lists properties that are is_input or is_param
Deleted objects hanging around as UR::DeletedRefs are recycled if the
original object gets re-created
0.34 2011-07-26
New class (Command::SubCommandFactory) which can act as a factory for a
tree of sub-commands
Remove the distinction between older and newer versions of DBD::SQLite
installed on the system. If you have SQLite databases (including
MetaDBs) with names like "*sqlite3n*", they will need to be
renamed to "*sqlite3*".
Make the tests emit fewer messages to the terminal when run in the
harness; improve coverage on non-Intel/Linux systems.
0.33 2011-06-30
New environment variable (UR_DBI_SUMMARIZE_SQL) to help find query
optimization targets
View aspects for objects' primitive values use the appropriate UR::Value
View classes
Query engine remembers cases where a left join matches nothing, and skips
asking the datasource on subsequent similar queries
Committing a software transaction now performs the same data consistancy
checking as the top-level transaction.
Improved document auto-generation for Command classes
Improved SQLite Data Source schema introspection
Updated database handling for Pg and mysql table case sensitivity
UR's developer tools (ur command-line tool) can operate on non-standard
source tree layouts, and can be forced to operate on a namespace
with a command-line option
Support for using a chain of properties in queries ('a.b.c like' => $v)
Set operations normalized: min, max, sum, count
Set-to-set relaying is now correctly lazy
Objects previously loaded from the database, and later deleted from the
database, are now detected as deleted and handled as another type of
change to be merged with in-memory changes.
0.32 (skipped)
0.31 (skipped)
0.30 2011-03-07
re-package 0.29 with versions correctly set
0.29 2011-03-07
query/iteration engine now solves n+1 in the one-to-many case as well as many-to-one
query optimization where the join table is variable across rows in a single resultset
automated manual page creation for commands
reduced deps (removed UR::Time)
0.28 2011-01-23
fix to the installer which caused a failure during docs generation
improvements to man page generation
0.27 2011-01-22
updated build process autogenerates man pages
0.26 2011-01-16
yet another refactoring to ensure VERSION appears on all modules
fixes for tests which fail only in the install harness
0.25 2011-01-15
Updated docs.
0.24 2011-01-15
Updated deps to compile fully on a new OSX installation (requires XCode).
0.22 2011-01-12
VERSION refactoring for cleaner uploads
0.20 2011-01-11
faster compile (<.5s)
faster object creation
faster install
documentation polish
0.19 2010-12-24
faster compile
faster query cache resolution
leaner meta-data
less build deps, build dep fixes
hideable commands
fixes for newer sqlite API
revamped UR::BoolExpr API
new command tree
0.18 2010-12-10
Bugfix for queries involving subclasses without tables
Preliminary support for building debian packages
Bugfixes for queries with the 'in' and 'not in' operators
Object cache indexing sped up by replacing regexes with direct string comparisons
0.17 2010-11-10
Fixed bug with default datasources dumping debug info during queries.
Deprecated old parts of the UR::Object API.
Bugfixes for MySQL data sources with handling of between and like operators, and table/column name case sensitivity
MySQL data sources will complain if the 'lower_case_table_names' setting is not set to 1
Bugfixes for FileMux data sources to return objects from iterators in correct sorted order
File data sources remember their file offsets more often to improve seeking
Bugfixes for handling is_many values passed in during create()
New class for JSON-formatted Set views
More consistent behavior during evaluation of BoolExprs with is_many values and undef/NULL values
Bugfixes for handling observers during software transaction commit and rollback
Addition of a new UR::Change type (external_change) to track non-UR entities that need undo-ing during a rollback
0.16 2010-09-27
File datasources build an on-the-fly index to improve its ability to seek within the file
Initial support for classes to supply custom logic for loading data
Compile-time speed improvements
Bug fixes for SQL generation with indirect properties, and the object cache pruner
0.15 2010-08-03
Improved 'ur update classes' interaction with MySQL databases
Integration with Getopt::Complete for bash command-line tab completion
0.14 2010-07-26
Metadata about data source entities (tables, columns, etc) is autodiscovered within commit() if it doesn't already exist in the MetaDB
The new View API now has working default toolkits for HTML, Text, XML and XSL. The old Viewer API has been removed.
Smarter property merging when the Context reloads an already cached object and the data in the data source has changed
Added a built-in 'product' calculation property type
Calculated properties can now be memoized
subclassify_by for an abstract class can now be a regular, indirect or calculated property
New environment variable UR_CONTEXT_MONITOR_QUERY for printing Context/query info to stdout
SQLite data sources can initialize themselves even if the sqlite3 executable cannot be found
Test harness improvements: --junit and --color options, control-C stops tests and reports results
'use lib' within an autoloaded module stays in effect after the module is loaded
0.13 2010-02-21
Circular foreign key constraints between tables are now handled smartly handled in UR::DataSource::RDBMS.
New meta-property properties: id_class_by, order_by, specify_by.
Updated autogenerated Command documentation.
Formalized the __extend_namespace__ callback for dynamic class creation.
New Command::DynamicSubCommands class makes command trees for a group of classes easy.
The new view API is available. The old "viewer" API is still available in this release, but is deprecated.
0.12 2009-09-09
'ur test run' can now run tests in parallel and can submit tests as jobs to LSF
Command modules now have support for Getopt::Complete for bash tab-completion
Bugfixes related to saving objects to File data sources.
Several more fixes for merging between database and in-memory objects.
Property names beginning with an underscore are now handled properly during rule
and object creation
0.11 2009-07-30
Fix bug in merge between database/in-memory data sets with changes.
0.10 2009-07-22
Updates to the UR::Object::Type MOP documentation.
Other documentation cleanup and file cleanup.
0.9 2009-06-19
Additional build fixes.
0.8 2009-06-17
David's build fixes.
0.7 2009-06-10
Fix to build process: the distribution will work if you do not have Module::Install installed.
0.6 2009-06-07
Fixed to build process: actually install the "ur" executable.
0.5 2009-06-06
Updates to POD. Additional API updates to UR::Object.
0.4 2009-06-04
Updates to POD. Extensive API updates to UR::Object.
0.3 2009-05-29
Fixed memory leak in cache pruner, and added additional debugging environment variable.
Additional laziness on file-based data-sources.
Updated lots of POD.
Switched to version numbers without zero padding!
0.02 2009-05-23
Cleanup of initial deployment issues.
UR uses a non-default version of Class::Autouse. This is now a special file to prevent problems with the old version.
Links to old DBIx::Class modules are now gone.
Updated boolean expression API.
0.01 2009-05-07
First public release for Lambda Lounge language shootout.