41dfabc | Anthony Brummett | 13 February 2012, 18:38:36 UTC | Added method for resolving values for properties in path spec without values in the rule In the property replacement step, it adds info about where the inserted globs (*) are. _replace_glob_with_values_in_pathname() takes that info, and figures out what the possible values are using glob() which taking care not to guess at property values for globs put in the original spec string. | 19 October 2012, 19:52:23 UTC |
ffe8815 | Anthony Brummett | 13 February 2012, 18:37:49 UTC | whitespace | 19 October 2012, 19:52:23 UTC |
a6c7aec | Anthony Brummett | 13 February 2012, 18:36:32 UTC | Change scheme for recording where we've added pathname globs Storing it as a sorted list of lists makes later processing easier | 19 October 2012, 19:52:22 UTC |
3092512 | Anthony Brummett | 13 February 2012, 18:35:53 UTC | Fix regex matching method calls in path spec | 19 October 2012, 19:52:22 UTC |
d41cd22 | Anthony Brummett | 10 February 2012, 22:20:10 UTC | First commit for UR::DataSource::Filesystem Basic replacement of property values from rule is working | 19 October 2012, 19:52:22 UTC |
ba6508e | Thomas Mooney | 15 August 2012, 17:25:01 UTC | Fix typo s/sue/use/. | 15 August 2012, 17:25:01 UTC |
8858df0 | Anthony Brummett | 15 August 2012, 15:09:58 UTC | Fix for bug introduced in 1416f2 An errant 'my' made the rule undefined when using the filterable singular accessor Also added test to cover the filterable accessors | 15 August 2012, 15:09:58 UTC |
39e0bbc | Anthony Brummett | 09 August 2012, 16:12:19 UTC | Merge branch 'indirect-ro-refactor' New code to handle a non-standard many-to-many relationship where one half of the many-to-many is defined as a plain reverse_as, and the matching half is the regular via(many)-to Also handles a via/to property that is via this non-standard property | 09 August 2012, 16:12:19 UTC |
1416f29 | Anthony Brummett | 09 August 2012, 16:03:32 UTC | Expand the use of the same optimization in 9846be for the singular version of is-many accessors, add_* and remove_* | 09 August 2012, 16:03:32 UTC |
b846d55 | Anthony Brummett | 08 August 2012, 22:03:54 UTC | Fix indirect property value resolution for another corner case If property A is via B, and B is part of a many-to-many relationship defined using reverse_as (instead of the usual via an is_many property), then we now handle it by using the default/basic bridging closures. Also, remember the right @property_names to call when resolving the indirection | 08 August 2012, 22:03:54 UTC |
fcb0d47 | Anthony Brummett | 08 August 2012, 21:34:45 UTC | Changes to the experimental indirect accessor code Don't use the fancy code for UR::* classes (recursion problems) Don't use a collector sub for UR::Value when a join's foreign_class_name is a UR::Value class Finally, don't install a real sub in the package's namespace, since this is still experimental | 08 August 2012, 21:34:45 UTC |
d176ee1 | Anthony Brummett | 08 August 2012, 21:31:09 UTC | whitespace | 08 August 2012, 21:31:09 UTC |
3091364 | Anthony Brummett | 08 August 2012, 21:05:06 UTC | Improve error message | 08 August 2012, 21:05:06 UTC |
a96a3f2 | Anthony Brummett | 08 August 2012, 21:03:48 UTC | Fix $UR::Context::initialized The setup method wasn't setting it to true Also, make the var package-global, so others can know when the context is fully set up | 08 August 2012, 21:03:48 UTC |
c0a3d3b | Anthony Brummett | 08 August 2012, 18:34:49 UTC | Experiment with a new indirect accessor implementation The old code has if/else conditions to try and handle different situations. It doesn't handle the case where the indirect accessor is via a non-standard reverse-as many-to-many relationship. This new code just gets the join list and builds a list of closures that can get from here to there. It doesn't yet work in the general case (especially during bootstrapping), so it sets up a special accessor prop_new() for testing | 08 August 2012, 18:34:49 UTC |
00e89d0 | Anthony Brummett | 08 August 2012, 18:32:49 UTC | whitespace | 08 August 2012, 18:32:49 UTC |
7bc1fd7 | Anthony Brummett | 07 August 2012, 21:14:57 UTC | Handle handle an odd many-to-many relationship Normal many-to-many relationships involve a pair of properties: 1) an is-many property to retrieve the bridge objects 2) an is-many, via-to property through the bridges to get the other things And usually, you'd use this pattern on both sides of the many-to-many relationship so either entity can get the set of related things. This patch allows one side or the other (but not both) to specify the relationship as a plain is-many relationship involving a reverse_as: class Driver { has_many => [ cars => { is => 'Car', reverse_as => 'drivers' } # didn't work before ] } and class Car { has_many => [ car_drivers => { is => 'CarDriver', reverse_as => 'car' }, drivers => { is => 'Driver, via => 'car_drivers', to => 'driver' } ] } | 07 August 2012, 21:14:57 UTC |
0251eb7 | Anthony Brummett | 07 August 2012, 20:55:16 UTC | _concrete_property_meta_for_class_and_name() now handles property names with dots things like delegated.other_id | 07 August 2012, 20:55:16 UTC |
82858ff | Scott Smith | 07 August 2012, 19:23:35 UTC | moved a _get_class_data_for_loading in queryplan up to before table/column mapping is examined since some subclasses rewrite that mapping in that method | 07 August 2012, 19:23:35 UTC |
b98a4a2 | Anthony Brummett | 07 August 2012, 18:36:10 UTC | Exception message improvements | 07 August 2012, 18:36:10 UTC |
9ec82f4 | Anthony Brummett | 06 August 2012, 20:28:33 UTC | rename the test to reflect what it does now | 06 August 2012, 20:28:33 UTC |
1c7533d | Anthony Brummett | 06 August 2012, 20:24:47 UTC | Fix for previous commit 'Make is_many accessors more efficient' If a parent class' reverse_as points to an id_class_by property, and the accessor is called on a member of the child class, the id_class_by value needs to be determined from the invoking object, not from the class the property is defined on. | 06 August 2012, 20:24:47 UTC |
9846be4 | Anthony Brummett | 03 August 2012, 21:08:44 UTC | Make is_many accessors more efficient The first time the accessor is called, it makes up a rule in order to get the template for later calls. For the first call, it now just uses the already created rule, instead of re-makign the rule from the template | 03 August 2012, 21:08:44 UTC |
79e8ad6 | Anthony Brummett | 02 August 2012, 21:51:39 UTC | Merge branch 'raw-sql-fix' | 02 August 2012, 21:51:39 UTC |
676dde4 | Anthony Brummett | 02 August 2012, 21:34:59 UTC | More tests around missing ID columns | 02 August 2012, 21:50:22 UTC |
2101e0e | Anthony Brummett | 02 August 2012, 21:31:06 UTC | Be a bit more efficient when figuring out if all the ID columns are present | 02 August 2012, 21:31:06 UTC |
d858241 | Anthony Brummett | 02 August 2012, 21:23:16 UTC | Be more efficient when fetching IDs in a get() with sql Use fetchall_arrayref() with a slice containing only the ID columns. Get the class' ID resolver ahead of time and call it directly in the inner loop | 02 August 2012, 21:23:16 UTC |
58dfd92 | Anthony Brummett | 02 August 2012, 20:39:16 UTC | Throw an exception if the params supplied doesn't match the number of placeholders | 02 August 2012, 20:41:36 UTC |
3ee23ac | Anthony Brummett | 02 August 2012, 20:35:53 UTC | Allow the raw sql filter to have placeholders It's a hack for now (misusing the 'in' operator). Instead the BoolExpr should have a -sql metafilter. UR::DS::RDBMS::_resolve_ids_from_class_name_and_sql() already handled this | 02 August 2012, 20:38:33 UTC |
15ec562 | Anthony Brummett | 02 August 2012, 20:24:23 UTC | Throw an exception if the SQL supplied does not have all the pk columns | 02 August 2012, 20:24:23 UTC |
975bf18 | Anthony Brummett | 02 August 2012, 20:13:56 UTC | Make queries via 'sql' more efficient Keep the accumulated IDs in a hash instead of a list Don't pass around (potentially large) lists of IDs. Only pass around listrefs | 02 August 2012, 20:13:56 UTC |
56e8802 | David Morton | 02 August 2012, 20:09:45 UTC | Add 'ur show subclasses' command | 02 August 2012, 20:09:45 UTC |
57b5b85 | Anthony Brummett | 02 August 2012, 20:09:30 UTC | Put the var in the proper scope | 02 August 2012, 20:09:30 UTC |
4a487d3 | Anthony Brummett | 02 August 2012, 20:09:03 UTC | Make the SQL prepare error better | 02 August 2012, 20:09:03 UTC |
f88445c | Anthony Brummett | 27 July 2012, 21:18:26 UTC | BoolExpr string parser can now detect a partially parsed string Previously, resolve_for_string() could not tell the difference between a string that parses completely, and a string that some of the contents parses, and that parse produces a correct tree. This change lets the parser's caller see what text has not been consumed after parsing is complete | 27 July 2012, 21:18:26 UTC |
da8cee8 | Anthony Brummett | 27 July 2012, 21:03:29 UTC | Allow + as a character matching the WORD roken in the BoolExpr text parser | 27 July 2012, 21:03:29 UTC |
d8d42d3 | Anthony Brummett | 27 July 2012, 16:36:04 UTC | Improve error message | 27 July 2012, 16:36:04 UTC |
fe954f0 | Justin Lolofie | 26 July 2012, 19:36:28 UTC | fixed the last line of help for 'genome tools'... There can be a hash in the command entry point class that acts as a map between commands perl modules. I updated the method that tries to resolve the original command name to be aware of that misdirection. | 26 July 2012, 19:36:28 UTC |
8e1979a | Anthony Brummett | 24 July 2012, 19:37:47 UTC | Test for previous commit b8c4868 (where clause fix) | 24 July 2012, 19:37:47 UTC |
2e44c21 | apregier | 24 July 2012, 15:01:32 UTC | Use isa instead of string comparison to determine type of id_by property | 24 July 2012, 15:06:01 UTC |
b8c4868 | Anthony Brummett | 23 July 2012, 20:58:47 UTC | Fix for joins involving UR::Value classes and where clauses If a join goes through a Value class, and the join has a 'where' clause, preserve the 'where' after the splice takes place | 23 July 2012, 20:58:47 UTC |
28b2cde | Anthony Brummett | 23 July 2012, 20:56:54 UTC | Fix bug involving turning a forward join into a reverse join Previously, it was moving 'where' clauses from position n to position n+1 in the list. The right thing to do is to move it from pos n to n-1. The fix was to put off reversing the list until after the fixups have been applied. | 23 July 2012, 20:56:54 UTC |
9fa5149 | Scott Smith | 17 July 2012, 18:40:09 UTC | fixed old occurances of UR::Namespace::Command::Describe > ::Show::Properties | 17 July 2012, 18:40:09 UTC |
2cf810a | Scott Smith | 17 July 2012, 18:13:06 UTC | updated "ur show schema" to drive on class names | 17 July 2012, 18:13:06 UTC |
c2d5d4a | Scott Smith | 17 July 2012, 16:22:34 UTC | renamed "ur describe" to "ur show properties" in the docs | 17 July 2012, 16:22:34 UTC |
e5b5a04 | Scott Smith | 17 July 2012, 16:18:10 UTC | mad "ur show schema" and renamed "ur describe" as "ur show properties" | 17 July 2012, 16:18:10 UTC |
c354ae7 | Scott Smith | 17 July 2012, 16:17:02 UTC | added support for optionally dumping all DDL for a table, not just a delta | 17 July 2012, 16:17:02 UTC |
bd2ff17 | Scott Smith | 15 July 2012, 22:57:00 UTC | make is_transactional optional on classes since the core meta-data needs seens to need those to be undef | 15 July 2012, 22:57:00 UTC |
37715d8 | Scott Smith | 15 July 2012, 22:12:22 UTC | Revert "Don't check objects for errors until after verifying that they have a datasource. This saves a lot of time on no-op commits from Command objects." This reverts commit 742fad01546b7403039988838b443d708fb58228. | 15 July 2012, 22:12:22 UTC |
742fad0 | Scott Smith | 15 July 2012, 22:09:53 UTC | Don't check objects for errors until after verifying that they have a datasource. This saves a lot of time on no-op commits from Command objects. | 15 July 2012, 22:09:53 UTC |
f555164 | Ben Oberkfell | 12 July 2012, 22:04:58 UTC | Detect bad use of select() in modules. | 12 July 2012, 22:04:58 UTC |
e224260 | Anthony Brummett | 09 July 2012, 20:47:24 UTC | Fix docs The man page for the 'ur' command line tool is 'man ur' not 'man UR::Manual::UR' | 09 July 2012, 20:47:24 UTC |
1d4fc8a | Anthony Brummett | 06 July 2012, 18:53:35 UTC | Fix BoolExpr bug recognizing >= and <= | 06 July 2012, 18:53:35 UTC |
5334f66 | Anthony Brummett | 06 July 2012, 18:45:56 UTC | add 'is null' and 'is not null' to the BoolExpr text parser 'is undef' and 'is not undef' are synonyms We're using the special 'is null' keyword to distinguish the cases: prop=undef (meaning match the string "undef") prop is null (meaning the value is null/undef) | 06 July 2012, 18:45:56 UTC |
8eaa5e4 | Anthony Brummett | 06 July 2012, 18:34:34 UTC | Add 'true' and 'false' operators to the BoolExpr string parser | 06 July 2012, 18:36:34 UTC |
8d487f0 | Anthony Brummett | 06 July 2012, 18:16:27 UTC | Allow 'offset' and 'limit' in the BoolExpr syntax parser | 06 July 2012, 18:16:27 UTC |
9fa8120 | Anthony Brummett | 29 June 2012, 21:03:51 UTC | Another alias property fix. Some property definitions are sloppy and look something like this: prop => { is => 'Some::Class' }, Note that there's no id_by, so the property is expected to hold the reference directly, instead of having another property hold the ID. This fixes the alias resolver to do the work by hand in these cases | 29 June 2012, 21:03:51 UTC |
5174f6d | Anthony Brummett | 29 June 2012, 16:48:22 UTC | Merge branch 'master' into alias-fix | 29 June 2012, 16:48:22 UTC |
ef05796 | Anthony Brummett | 29 June 2012, 16:26:41 UTC | Alias property fix get() with a dot-syntax operator wasn't working when one or more of the named properties were aliases. The underlying property_meta_for_name() calls the join logic in UR::Object::Join which didn't know what to do with alias properties. | 29 June 2012, 16:48:08 UTC |
b5bceb9 | Anthony Brummett | 29 June 2012, 15:28:09 UTC | Don't re-get data we already have | 29 June 2012, 15:28:09 UTC |
06bb59d | Anthony Brummett | 29 June 2012, 15:27:16 UTC | typo | 29 June 2012, 15:27:16 UTC |
d5e71fd | Adam Coffman | 28 June 2012, 20:49:45 UTC | add text view for boolean type | 28 June 2012, 20:49:45 UTC |
f81f4ff | Adam Coffman | 28 June 2012, 19:49:27 UTC | Make boolean a subclass of Text | 28 June 2012, 19:49:27 UTC |
7c25087 | Anthony Brummett | 28 June 2012, 16:10:29 UTC | Make the test pass UR::Object::Type::resolve_property_aliases keeps a cache of answers. The test needs to remove the hash key | 28 June 2012, 16:10:29 UTC |
ea22df0 | Anthony Brummett | 27 June 2012, 18:55:31 UTC | Update class initializer docs to talk about alias properties | 27 June 2012, 18:55:31 UTC |
745be50 | Anthony Brummett | 27 June 2012, 18:15:52 UTC | Cleanup remove commented-out lines, debugging code, breakpoint, etc | 27 June 2012, 18:15:52 UTC |
8ff8682 | Anthony Brummett | 27 June 2012, 18:01:49 UTC | Fix for unaliasing logic If the property string is a dot-property (prop1.prop2), the old code would incorrectly replace prop1.prop2 with prop2. The new code uses a new method on the class meta that caches results | 27 June 2012, 18:01:49 UTC |
58a3cf6 | Anthony Brummett | 27 June 2012, 16:45:36 UTC | Fix for unalising logic If the thing we're unalising isn't a property of the class, keep the same string in that position. This is to handle cases where the key is something like '-recurse' or '-order' | 27 June 2012, 16:45:36 UTC |
2fcd6d7 | Anthony Brummett | 27 June 2012, 15:36:46 UTC | When unalasing properties, work when the operator is more than one word This happens in cases like 'property_name not in' | 27 June 2012, 15:36:46 UTC |
6ed8f3f | Anthony Brummett | 27 June 2012, 15:13:41 UTC | Support making one property an alias for another Use a property definition like this: alias_prop => { via => '__self__', to => 'real_prop' } Some tests are still failing | 27 June 2012, 15:13:41 UTC |
4562448 | Anthony Brummett | 26 June 2012, 21:59:08 UTC | Collapse a bunch of single my() into two Might shave a couple clock cycles | 26 June 2012, 21:59:08 UTC |
bf8072a | Anthony Brummett | 26 June 2012, 21:58:10 UTC | Change several Carp::confess() to Carp::croak() So there are less stack dumps | 26 June 2012, 21:58:10 UTC |
268896b | Anthony Brummett | 26 June 2012, 19:47:21 UTC | Be more careful with "truth" while loading objects The loading process tests the truth of objects during the loading process with code like if ($some_object) {... Objects with overloaded stringify behavior can return false in checks like these if the object stringifies as something false (like "" or "0") even if $some_object is a valid object The fix is to be diligent to test for defined() in the proper places | 26 June 2012, 19:47:21 UTC |
5365d79 | Anthony Brummett | 26 June 2012, 19:46:24 UTC | Rewrite to make more functional | 26 June 2012, 19:46:24 UTC |
f62bdc5 | Scott Smith | 25 June 2012, 15:22:05 UTC | UR::DataSource::RDBMS now caches its belief as to the correct sequence generator on a per-class basis, saving considerable time when constructing large sets of objects. | 25 June 2012, 15:22:05 UTC |
beea89a | Nathan Nutter | 21 June 2012, 19:36:34 UTC | validate param string before assuming it is an ID | 21 June 2012, 19:36:43 UTC |
7c97001 | Thomas Mooney | 20 June 2012, 19:27:40 UTC | return instead of dying to eliminate extra error message when nothing found. | 20 June 2012, 19:27:40 UTC |
31a5aa7 | Thomas Mooney | 20 June 2012, 19:27:02 UTC | Quiet warning in middle of join resolution. | 20 June 2012, 19:27:02 UTC |
9d36f57 | Ben Oberkfell | 18 June 2012, 18:16:22 UTC | remove superfluous get() call in finish_up_after_fork | 18 June 2012, 18:16:22 UTC |
1c69b14 | Ben Oberkfell | 14 June 2012, 21:38:27 UTC | fix on forking and properly disconnecting database handles. | 14 June 2012, 21:38:27 UTC |
1f2f526 | Anthony Brummett | 06 June 2012, 19:53:32 UTC | Work even if the # of linking properties is different For object accessor properties, if the number of id_by properties does not match the number of id properties (meaning it holds the composite ID value that refers to an instance of a class with multiple ID properties), then trap the exception and print out something that's still useful | 06 June 2012, 19:53:32 UTC |
c25f9d3 | Anthony Brummett | 05 June 2012, 15:03:11 UTC | Better error message when a class' "is" is invalid | 05 June 2012, 15:03:11 UTC |
735868b | Anthony Brummett | 04 June 2012, 20:15:29 UTC | Allow a child class to define a columned property even if it does not directly have a table_name This might occur if a parent class has a table_name, but one of the table's columns does not have a mathcing property in that parent class; only one (or more) of the child classes have a property for that column. | 04 June 2012, 20:15:29 UTC |
777d7a9 | Anthony Brummett | 30 May 2012, 21:35:19 UTC | Always try getting by ID first It shouldn't matter what the format of the value is, or the type of the property. This allows the Command modules with an object accessor to retrieve an object even if the ID-linking property does not have a defined data type (like UR::Value subclasses) | 30 May 2012, 21:35:19 UTC |
715abd2 | Anthony Brummett | 30 May 2012, 21:31:00 UTC | Re-throw the exception in most cases The eval was masking a syntax error in an autoloaded module. It still needs an eval because of the invalid BoolExpr error in the case of asking for objects with a non-sensical filter | 30 May 2012, 21:33:53 UTC |
a87ed6a | Anthony Brummett | 30 May 2012, 20:42:38 UTC | Change the parent of UR::Value::Number to UR::Value::Text It matches what Perl does with numbers A recent commit for the Join logic started emitting a lot of warnings about incompatible/discrepant joins when we had a generic bridge table with a value_id with type Text pointing to a class with a numeric ID. | 30 May 2012, 20:42:38 UTC |
7a75e15 | Anthony Brummett | 30 May 2012, 19:33:09 UTC | Re-word warning message for clarity | 30 May 2012, 19:33:09 UTC |
63b042f | Scott Smith | 27 May 2012, 18:59:01 UTC | fixed warning message | 27 May 2012, 18:59:01 UTC |
aa5382c | Anthony Brummett | 24 May 2012, 19:46:54 UTC | Merge commit '231f9331acd8f8b9e9b502039a06e303898ce674' into fix-object-hints | 24 May 2012, 19:46:54 UTC |
541bdcb | Anthony Brummett | 24 May 2012, 19:11:03 UTC | Add a comment about why a previous commit commented a line out | 24 May 2012, 19:11:03 UTC |
3adbf59 | Anthony Brummett | 24 May 2012, 19:10:47 UTC | Make the warning message better | 24 May 2012, 19:10:47 UTC |
39f842b | Anthony Brummett | 24 May 2012, 19:09:47 UTC | remove unnecessary call to class() The called method works the same as a class or object method | 24 May 2012, 19:09:47 UTC |
f9bd74e | Scott Smith | 24 May 2012, 07:58:19 UTC | QueryPlan now handles hints to object properties correctly. The code which iterates over delegated properties during query plan construction now cleanly separates the joining part from the filtering part of each loop. | 24 May 2012, 07:58:19 UTC |
f9bae31 | Scott Smith | 24 May 2012, 07:26:21 UTC | UR::Object::Join now recognizes increased type specificity on a via/where/to property. class Person { has => [ pets => { is => 'Animal', reverse_as => 'owner' }, cats => { via => 'pets', where => { species => 'cat' }, to => '__self__' is => 'Cat' }, dogs => { via => 'pets', where => { species => 'dog' }, to => '__self__' is => 'Dog' }, }; Joins to "cats" now rewrite their hop through "pets" to make a real join even if "pets" does not have a table, and the table for cats and docs are different. | 24 May 2012, 07:26:21 UTC |
231f933 | Anthony Brummett | 23 May 2012, 21:27:04 UTC | Remove commented-out line | 23 May 2012, 21:27:04 UTC |
7e4588d | Anthony Brummett | 23 May 2012, 21:18:10 UTC | Fail a little earlier if a property meta is missing | 23 May 2012, 21:18:10 UTC |
c006e4b | apregier | 21 May 2012, 20:16:21 UTC | Remove breakpoint | 21 May 2012, 20:16:21 UTC |
99c8b87 | Scott Smith | 21 May 2012, 16:50:36 UTC | ensure that joins to table with LOB columns get correct LOB handling | 21 May 2012, 16:50:36 UTC |
e415e32 | Scott Smith | 17 May 2012, 21:37:48 UTC | Updated the QueryPlan to not complain about joining to things via UR::Object id, even when there are no id_properties mapping to explicit database columns. In this case queries are merely inefficient instead of impossible. | 17 May 2012, 21:37:48 UTC |
c2dbb22 | Scott Smith | 17 May 2012, 20:17:41 UTC | cosmetic cleanup of warnings in test 87e | 17 May 2012, 20:17:41 UTC |