On 9/1/17 8:45pm, Nikita Timofeev wrote: > But your feedback is pushing me towards the solution that I didn't > want to use initially: > to introduce some abstract FluentSelect with descendants like > ObjectSelect and ColumnSelect. > Where ColumnSelect can be used directly or can be created within > column() or columns() method call in ObjectSelect (as you suggested in > the first place). > > Additional benefit of this new query that it can provide a nice > shortcut for the COUNT(*) query: > > long count = ColumnSelect.query(Artist.class, Property.COUNT) > .where(Artist.ARTIST_NAME.like("artist%")) > .selectOne(context);
> And here is example for several properties: > > Object[] nameAndDate = ColumnSelect.query(Artist.class, > Artist.ARTIST_NAME, Artist.DATE_OF_BIRTH) > .orderBy(Artist.ARTIST_NAME.asc()) > .selectFirst(context); I'm not convinced adding the columns to the constructor is any clearer than explicit columns() calls. > or > > Object[] nameAndDate = ColumnSelect.query(Artist.class) > .columns(Artist.ARTIST_NAME) > .columns(Artist.DATE_OF_BIRTH) > .orderBy(Artist.ARTIST_NAME.asc()) > .selectFirst(context); > > Do you think that this is a more clear way of doing columns queries? > Or it is excessive for the purpose of avoiding limitation of multiple > column() method calls? What are the issues we are trying to solve here? 1. Mixing columns() and column() is broken. 2. Simpler syntax for count() and max() frequently used methods I can't easily see how to solve (1) except by always returning List<Object[]> even if Object[] only contains a single element (if there is just one column). Then we only have column() which can take a collection of properties or vargs list of properties. For (2), your idea of Property.COUNT as a special constructor of this type of property then starts to be what you didn't want: Property class which knows about SQL expressions. But do we care about this purity over a clean and simple API for users? Ari -- --------------------------> Aristedes Maniatis GPG fingerprint CBFB 84B4 738D 4E87 5E5C 5EFA EF6A 7D2E 3E49 102A