Commit Graph

925 Commits

Author SHA1 Message Date
Charlie Groves cd9854a8ca Ignore dist and target 2011-03-23 22:16:37 +00:00
Charlie Groves 8d56a93538 Meh, I was wrong in r841. Because the target version is 1.6, anything that tries to build against
depot with a 1.5 compiler is going to blow up with a mismatched version. Go back to 1.5 in build.xml
and pom.xml, but leave Eclipse using a 1.6 JVM. This means if anyone regenerates the m2eclipse
configuration, this will break in Eclipse again. Lame.
2011-03-23 22:09:29 +00:00
Charlie Groves 7129295906 Updates from running genrecord 2011-03-23 20:42:45 +00:00
Charlie Groves 1a2967b31f yohoho no longer cares if depot is built with 1.6, so build with that since we're using 1.6's Connection.createArrayOf in PostgreSQL4Builder. Sneak a ooo-buildification in with the compiler version bump. 2011-03-23 20:42:00 +00:00
Charlie Groves 1be9961245 Crap, missed a few 2011-03-23 01:44:48 +00:00
Charlie Groves 2dbfaa0ee6 Remove an @Override from an interface as that isn't 1.5 compatible, and remove some unused imports 2011-03-23 01:43:52 +00:00
Michael Bayne ad4f2c9970 Changed expressions that deal with count() results to Number because Postgres
in its burning desire to support the amazing four hundred billion rows, returns
a Long for count expressions.

Clients using selectCount() won't be impacted, but clients doing more complex
counting are going to have to sprinkle in some .intValue() calls.
2011-02-28 22:58:38 +00:00
Michael Bayne 677de3da03 Added notNull() at Ray's request. 2011-02-28 19:12:52 +00:00
Andrzej Kapolka 89927523bc Let byte enum columns be nullable. 2011-02-21 20:58:34 +00:00
Michael Bayne 86476b4494 Now that we accept a list of SQL statements to be executed individually (and
committed after each statement), I no longer need to manually handle table
population.
2011-02-18 18:25:34 +00:00
Michael Bayne 687de42168 Added needed import. 2011-02-18 18:24:40 +00:00
Michael Bayne 8499fc1c06 Implemented a framework for testing database migrations. Unfortunately, I am
not filled with ideas on how to programmatically verify that the primary key
migration I've just created a test for is actually working. I can visually
inspect the logging output, but that's not useful for catching potential future
regressions.
2011-02-18 01:53:38 +00:00
Michael Bayne 62fb0eac99 Allow a name and a series of initialization statements to be provided when
creating a persistence context.
2011-02-18 01:53:30 +00:00
Michael Bayne 2565a292d1 Have the trivial fetcher do no stats updating by default. 2011-02-18 01:53:23 +00:00
Michael Bayne e59b20dd56 Report the pkName in both cases, and do so using valid Java code. 2011-02-18 00:40:48 +00:00
Michael Bayne adf914e156 Wired up handling of primary key changes (with some reorganization of a patch
from Nathan). If we need to add our primary key, we do so, if we need to remove
it, we do so, and only then do we consider whether we need to migrate it (in
which case we drop and re-add it).
2011-02-18 00:35:58 +00:00
Michael Bayne 8670d0e109 Support creation of arrays of stock enum values (which are turned into
strings). From Jamie.
2011-02-16 02:13:35 +00:00
Par Winzell 10e97b55c9 PostgreSQL gets very confused when date_part() is used in a GROUP BY and the part bit isn't a constant. It doesn't recognize the selected values as being identical to the grouped-by values, and throws an error. So we use a literal here. 2011-02-15 23:21:11 +00:00
Michael Bayne 6603fb7d81 Patches from Jamie:
1. DateFuncs.dayOfWeek and dayOfMonth can now be used on Timestamp. +FromDate
variants exist for using on Date.

2. hour, minute, second, etc. are now typed Number to cope with differing
opinions on the part of the underlying SQL drivers as to whether to return
Double, Long, Integer or something else.
2011-02-15 22:20:53 +00:00
Michael Bayne 51aa221606 Use the platform's line separator when generating code from templates. This
assumes that the depot.jar in question was created on a LF-only platform, but
that's probably a safe bet.
2011-02-12 00:26:56 +00:00
Ray Greenwell d59717d025 No longer lazily initialized. 2011-02-10 17:28:39 +00:00
Par Winzell 5c52a84916 I can think of no reason why this was ever allowed to be null. 2011-02-10 17:21:06 +00:00
Michael Bayne b8fec6cab5 Fixed a problem with binding transformed values in updatePartial.
When we go to bind values in an update statement, we either have:

- field names and a pojo from which to extract them, in which case
  transformation happens naturally when we extract the current value from the
  pojo

- value expressions (like 1, or "bob") which we were previously just binding
  directly to the statement, which was wrong because they need to first be
  transformed in the case where the field in question has an @Transform
  annotation; now we get the field marshaller for the field in question and
  pass the raw value to it, so that it can do the necessary transformations in
  writeToStatement()

- other expressions (like LiteralExp("true") or or IntervalExp or anything else
  where the database is involved in computing the final value to be assigned to
  the column).

This last case still holds the potential for badness with regard to transformed
fields. We can't magically transform the value to be stored into a field if the
database is computing the ultimate value. Say, for a contrived example, that
you had a record where you stored an int column as a String for shits and
giggles:

public class MyRecord {
    @Transform(IntToStringTransformer.class)
    public int someValue;
}

someValue will be a string column in the database, owing to the
IntToStringTransformer converting the int to a String.

Now you come along and think to yourself, "Hey, I want to store the current
minute in my  'int' field." and you write something like:

updatePartial(MyRecord.class, MyRecord.SOME_VALUE,
    DateFuncs.minute(Exps.literal(new Timestamp(System.currentTimeMillis()))));

Well, that's going to end up trying to stuff an int-valued expression (computed
by the database) into a String field, and the shit will hit the fan.

I can't really think of a non-contrived situation where this is likely to bite
us in the ass, but I don't especially like grass covered pits like this lying
around, waiting for someone to unsuspectingly step into them.

I could fail if you try to update a transformed field with anything other than
a ValueExp (or the current value from a pojo), but that would prevent you from
doing something potentially useful and safe like copying one field to another,
which both use the same transformation.
2011-02-05 00:22:53 +00:00
Michael Bayne 9aba944105 Clean up after ourselves. 2011-02-04 18:16:22 +00:00
Michael Bayne 6c9d372510 Removed a final annotation that I had slipped in for testing. 2011-02-04 18:14:45 +00:00
Michael Bayne 71d3577074 Ur doin it wrong. The transforming field marshaller needs to operate on F (the
non-persistent type), and transform in getFromSet/writeToStatement, rather than
operate on T (the persistent type) and transform in
getFromObject/writeToObject.

This makes the newly added test in TransformTest work, rather than fail, as it
did previously.
2011-02-04 18:14:15 +00:00
Michael Bayne ea676d5b9e Added Tuple2.toMap for those times when you really want a map from a to b
rather than a list of (a, b).
2011-01-31 17:50:18 +00:00
Charlie Groves 80a34a035f Deploy a sources jar along with the code jar for IDE-happiness 2011-01-20 00:42:33 +00:00
Ray Greenwell f4b25369ff Bugfix. 2011-01-18 21:52:47 +00:00
Ray Greenwell 8e3a690b79 Fixed one little thing that bothered me: null enum values could
safely be stored, but if rehydrated into a Set then an EnumSet would
be created and that can't store nulls.
So, check to see if the encoded String has any nulls in it and
have the builder create a HashSet instead.
2011-01-18 21:37:38 +00:00
Ray Greenwell b32c6753c1 Added EnumIterable, which can be used to transform an Iterable
containing Enums. It extends StringBase, so the enums are stored
similarly to how a Set<String> is stored, and not based on ordinal.
2011-01-17 22:20:25 +00:00
Charlie Groves 354ed1aba2 Use m2eclipse for Eclipse configuration 2011-01-11 23:46:04 +00:00
Michael Bayne db0961a866 Nixed more obsolete references to build-ivy.xml. 2011-01-07 22:44:58 +00:00
Michael Bayne 9d37e15a55 Nixed obsolete reference to build-ivy.xml. 2011-01-07 22:44:25 +00:00
Michael Bayne a0999fb8a4 [maven-release-plugin] prepare for next development iteration 2011-01-07 22:31:59 +00:00
Michael Bayne e0a55fc3a8 [maven-release-plugin] prepare release depot-1.2 2011-01-07 22:31:45 +00:00
Michael Bayne 16919c056b Use the latest stable samskivert: 1.2. 2011-01-07 22:27:35 +00:00
Michael Bayne 0040e18536 DRY: lib.name -> ant.project.name. 2011-01-07 22:15:17 +00:00
Charlie Groves 63816b421c Don't complain that indices created by hsqldb are stale 2011-01-05 20:24:29 +00:00
Michael Bayne 1b21df9994 Added Funcs.countStar() because it's such a common SQL operation. 2010-12-18 18:01:57 +00:00
Michael Bayne 5dc96f1ac0 We need to ascend or descend on a particular column. 2010-12-18 17:47:31 +00:00
Michael Bayne 2796b3992d Stop calling me Shirley. 2010-12-18 17:37:23 +00:00
Michael Bayne 5809a5e8c6 New deal: every time you call a builder method, a copy of the Query is created,
so that partially constructed queries can be reused without any special care
being taken by the caller. I also switched to the use of a functional list
internally to make this whole process more pleasant and efficient.
2010-12-18 17:32:31 +00:00
Michael Bayne 7d99928d7c Maven makes using version ranges too annoying by constantly checking for new
versions with the repository.

Why, Maven, do you not offer an option to not go searching numerous sources on
the Internet every time I run a build? (And then timing out when some of those
sources are behind firewalls and I'm not running vpn at the moment.) Indeed,
why would that not be the default?
2010-12-18 17:30:57 +00:00
Par Winzell 0fd6f66181 This was very confused. Unique columns are automatically indexed. Thus we should certainly not create an explicit index when we encounter a unique column, as we were doing, and we will even go so far as to forbid an explicit index. 2010-12-15 03:25:40 +00:00
Par Winzell f81b338cd9 Check for stale indexes, too. Use our knowledge of full text indexes to better decide if a column or index is internal to Depot's or the DB's workings. Finally, allow com.samskivert.depot.verifyschema to be set, forcing a staleness check (which slows down initialization somewhat). 2010-12-15 02:58:55 +00:00
Michael Bayne 15cab8a6e2 Exclude impl packages and document only public members. 2010-12-14 17:16:14 +00:00
Michael Bayne 367c10cc52 Javadoc fixes. 2010-12-14 17:09:43 +00:00
Michael Bayne d0919f8239 Correctify the documentation for selectInto(). 2010-12-14 16:41:16 +00:00
Charlie Groves d34ee233f7 Boil some plates, whatever that means 2010-12-13 20:58:42 +00:00