Re: SummaryHelper not setting replacements

2013-06-24 Thread Jay Bourland
Thomas - I have verified that the code now runs clean. Thank you for fixing it. 
And thank you for reviving this project. I looked at migrating to Hibernate or 
one of the other ORM's but I really like Torque much better.


Jay


On Jun 24, 2013, at 1:30 AM, Thomas Fox  wrote:

>> Hi Thomas - Here's the problem code. The plain select works fine,
>> but asking for the count causes an error to be thrown if I use the
>> non-hack method.
> 
> I think I have found and fixed the problem. If you want you can try the
> current trunk.
> Thanks for reporting the error !
> 
>Thomas
> 
>> 
>>   /**
>>* Get a List of the dogs that earned all of a list of titles in
>> a given year
>>* @param titles array of titles to be searched.
>>* @param year four digit year to be searched
>>* @return a List of dogs that earned the titles
>>* @throws TorqueException if something goes wrong
>>*/
>>   public static List doFindDogsWithAllTitles( String[] titles,
>> String year ) throws TorqueException {
>>  Criteria crit = getCriteriaDogsWithAllTitles( titles, year );
>>  crit.addAscendingOrderByColumn( REG_NAME );
>> 
>>  return doSelect( crit );
>>   }
>> 
>>   /**
>>* Get a count of the dogs that earned all of a list of titles in
>> a given year
>>* @param titles array of titles to be searched.
>>* @param year four digit year to be searched
>>* @return number of dogs that earned the titles
>>* @throws TorqueException if something goes wrong
>>*/
>>   public static int doFindCountWithAllTitles( String[] titles,
>> String year ) throws TorqueException {
>>  //TODO: Remove Hack once issue fixed
>>  Criteria crit = getCriteriaDogsWithAllTitlesHack( titles, year );
>> 
>>  SummaryHelper summary = new SummaryHelper();
>> 
>>  summary.addAggregate( "count", new Count( DogPeer.DOG_ID ) );
>>  List results = summary.summarize( crit );
>>  return Integer.parseInt( results.get( 0 ).get( "count" ).toString
> () );
>>   }
>> 
>>   /**
>>* Create a criteria to search for the dogs that earned all of an
>> array of titles in a given year
>>* @param titles array of titles to be searched.
>>* @param year four digit year to be searched
>>* @return the Criteria to be used for the request
>>*/
>>   private static Criteria getCriteriaDogsWithAllTitles( String[]
>> titles, String year ) {
>>  String startDate = null, endDate = null;
>>  try{
>> int yr = Integer.parseInt( year )+1;
>> //They year is valid if we get here.
>> startDate = year+"-01-01";
>> endDate = Integer.toString( yr ) + "-01-01";
>>  } catch( NumberFormatException nfe ) {
>> //ignore
>>  }
>> 
>>  Criteria crit = new Criteria();
>>  int idx = 1;
>>  for( String str : titles ) {
>> String alias = "t"+Integer.toString( idx );
>> crit.addAlias( alias, "title" );
>> crit.addJoin( DogPeer.DOG_ID, new ColumnImpl( alias + "." +
>> TitlePeer.DOG_ID.getColumnName() ) );
>> crit.where( new ColumnImpl( alias + "." +
>> TitlePeer.TITLE.getColumnName() ), str );
>> if( startDate != null ) {
>>Column aliasDate = new ColumnImpl( alias + "." +
>> TitlePeer.TITLE_DATE.getColumnName() );
>>crit.where( aliasDate, startDate, Criteria.GREATER_EQUAL );
>>crit.where( aliasDate, endDate, Criteria.LESS_THAN );
>> }
>> ++idx;
>>  }
>>  return crit;
>>   }
>> 
>>   /**
>>* forces a non-prepared statement to get around SummaryHelper bug
>>* @param titles array of titles that the dog must have
>>* @param year year to be searched
>>* @return a Criteria object with the appropriate query
>>*/
>>   private static Criteria getCriteriaDogsWithAllTitlesHack( String
>> [] titles, String year ) {
>>  String startDate = null, endDate = null;
>>  try{
>> int yr = Integer.parseInt( year )+1;
>> //They year is valid if we get here.
>> startDate = year+"-01-01";
>> endDate = Integer.toString( yr ) + "-01-01";
>>  } catch( NumberFormatException nfe ) {
>> //ignore
>>  }
>> 
>>  Criteria crit = new Criteria();
>>  int idx = 1;
>>  for( String str : titles ) {
>> String alias = "t"+Integer.toString( idx );
>> crit.addAlias( alias, "title" );
>> crit.addJoin( DogPeer.DOG_ID, new ColumnImpl( alias + "." +
>> TitlePeer.DOG_ID.getColumnName() ) );
>> crit.whereVerbatimSql( alias + "." +
>> TitlePeer.TITLE.getColumnName() + "='" + str + "'", null );
>> if( startDate != null ) {
>>Column aliasDate = new ColumnImpl( alias + "." +
>> TitlePeer.TITLE_DATE.getColumnName() );
>>crit.whereVerbatimSql( alias + "." +
>> TitlePeer.TITLE_DATE.getColumnName() + ">='" + startDate + "'", null );
>>crit.whereVerbatimSql( alias + "." +
>> TitlePeer.TITLE_DATE.getColumnName() + "<'" + endDate + "'", null );
>> }
>>  

Re: SummaryHelper not setting replacements

2013-06-24 Thread Thomas Fox
> Hi Thomas - Here's the problem code. The plain select works fine,
> but asking for the count causes an error to be thrown if I use the
> non-hack method.

I think I have found and fixed the problem. If you want you can try the
current trunk.
Thanks for reporting the error !

Thomas

>
>/**
> * Get a List of the dogs that earned all of a list of titles in
> a given year
> * @param titles array of titles to be searched.
> * @param year four digit year to be searched
> * @return a List of dogs that earned the titles
> * @throws TorqueException if something goes wrong
> */
>public static List doFindDogsWithAllTitles( String[] titles,
> String year ) throws TorqueException {
>   Criteria crit = getCriteriaDogsWithAllTitles( titles, year );
>   crit.addAscendingOrderByColumn( REG_NAME );
>
>   return doSelect( crit );
>}
>
>/**
> * Get a count of the dogs that earned all of a list of titles in
> a given year
> * @param titles array of titles to be searched.
> * @param year four digit year to be searched
> * @return number of dogs that earned the titles
> * @throws TorqueException if something goes wrong
> */
>public static int doFindCountWithAllTitles( String[] titles,
> String year ) throws TorqueException {
>   //TODO: Remove Hack once issue fixed
>   Criteria crit = getCriteriaDogsWithAllTitlesHack( titles, year );
>
>   SummaryHelper summary = new SummaryHelper();
>
>   summary.addAggregate( "count", new Count( DogPeer.DOG_ID ) );
>   List results = summary.summarize( crit );
>   return Integer.parseInt( results.get( 0 ).get( "count" ).toString
() );
>}
>
>/**
> * Create a criteria to search for the dogs that earned all of an
> array of titles in a given year
> * @param titles array of titles to be searched.
> * @param year four digit year to be searched
> * @return the Criteria to be used for the request
> */
>private static Criteria getCriteriaDogsWithAllTitles( String[]
> titles, String year ) {
>   String startDate = null, endDate = null;
>   try{
>  int yr = Integer.parseInt( year )+1;
>  //They year is valid if we get here.
>  startDate = year+"-01-01";
>  endDate = Integer.toString( yr ) + "-01-01";
>   } catch( NumberFormatException nfe ) {
>  //ignore
>   }
>
>   Criteria crit = new Criteria();
>   int idx = 1;
>   for( String str : titles ) {
>  String alias = "t"+Integer.toString( idx );
>  crit.addAlias( alias, "title" );
>  crit.addJoin( DogPeer.DOG_ID, new ColumnImpl( alias + "." +
> TitlePeer.DOG_ID.getColumnName() ) );
>  crit.where( new ColumnImpl( alias + "." +
> TitlePeer.TITLE.getColumnName() ), str );
>  if( startDate != null ) {
> Column aliasDate = new ColumnImpl( alias + "." +
> TitlePeer.TITLE_DATE.getColumnName() );
> crit.where( aliasDate, startDate, Criteria.GREATER_EQUAL );
> crit.where( aliasDate, endDate, Criteria.LESS_THAN );
>  }
>  ++idx;
>   }
>   return crit;
>}
>
>/**
> * forces a non-prepared statement to get around SummaryHelper bug
> * @param titles array of titles that the dog must have
> * @param year year to be searched
> * @return a Criteria object with the appropriate query
> */
>private static Criteria getCriteriaDogsWithAllTitlesHack( String
> [] titles, String year ) {
>   String startDate = null, endDate = null;
>   try{
>  int yr = Integer.parseInt( year )+1;
>  //They year is valid if we get here.
>  startDate = year+"-01-01";
>  endDate = Integer.toString( yr ) + "-01-01";
>   } catch( NumberFormatException nfe ) {
>  //ignore
>   }
>
>   Criteria crit = new Criteria();
>   int idx = 1;
>   for( String str : titles ) {
>  String alias = "t"+Integer.toString( idx );
>  crit.addAlias( alias, "title" );
>  crit.addJoin( DogPeer.DOG_ID, new ColumnImpl( alias + "." +
> TitlePeer.DOG_ID.getColumnName() ) );
>  crit.whereVerbatimSql( alias + "." +
> TitlePeer.TITLE.getColumnName() + "='" + str + "'", null );
>  if( startDate != null ) {
> Column aliasDate = new ColumnImpl( alias + "." +
> TitlePeer.TITLE_DATE.getColumnName() );
> crit.whereVerbatimSql( alias + "." +
> TitlePeer.TITLE_DATE.getColumnName() + ">='" + startDate + "'", null );
> crit.whereVerbatimSql( alias + "." +
> TitlePeer.TITLE_DATE.getColumnName() + "<'" + endDate + "'", null );
>  }
>  ++idx;
>   }
>   return crit;
>}
>
>
> On Jun 12, 2013, at 12:59 AM, Thomas Fox 
wrote:
>
> >
>
|>

> > |Jay Bourland wrote:
|
> >
>
|-

Re: SummaryHelper not setting replacements

2013-06-20 Thread Jay Bourland
Hi Thomas - Here's the problem code. The plain select works fine, but asking 
for the count causes an error to be thrown if I use the non-hack method.

   /**
* Get a List of the dogs that earned all of a list of titles in a given year
* @param titles array of titles to be searched.
* @param year four digit year to be searched
* @return a List of dogs that earned the titles
* @throws TorqueException if something goes wrong
*/
   public static List doFindDogsWithAllTitles( String[] titles, String 
year ) throws TorqueException {
  Criteria crit = getCriteriaDogsWithAllTitles( titles, year );
  crit.addAscendingOrderByColumn( REG_NAME );

  return doSelect( crit );
   }

   /**
* Get a count of the dogs that earned all of a list of titles in a given 
year
* @param titles array of titles to be searched.
* @param year four digit year to be searched
* @return number of dogs that earned the titles
* @throws TorqueException if something goes wrong
*/
   public static int doFindCountWithAllTitles( String[] titles, String year ) 
throws TorqueException {
  //TODO: Remove Hack once issue fixed
  Criteria crit = getCriteriaDogsWithAllTitlesHack( titles, year );

  SummaryHelper summary = new SummaryHelper();

  summary.addAggregate( "count", new Count( DogPeer.DOG_ID ) );
  List results = summary.summarize( crit );
  return Integer.parseInt( results.get( 0 ).get( "count" ).toString() );
   }

   /**
* Create a criteria to search for the dogs that earned all of an array of 
titles in a given year
* @param titles array of titles to be searched.
* @param year four digit year to be searched
* @return the Criteria to be used for the request
*/
   private static Criteria getCriteriaDogsWithAllTitles( String[] titles, 
String year ) {
  String startDate = null, endDate = null;
  try{
 int yr = Integer.parseInt( year )+1;
 //They year is valid if we get here.
 startDate = year+"-01-01";
 endDate = Integer.toString( yr ) + "-01-01";
  } catch( NumberFormatException nfe ) {
 //ignore
  }

  Criteria crit = new Criteria();
  int idx = 1;
  for( String str : titles ) {
 String alias = "t"+Integer.toString( idx );
 crit.addAlias( alias, "title" );
 crit.addJoin( DogPeer.DOG_ID, new ColumnImpl( alias + "." + 
TitlePeer.DOG_ID.getColumnName() ) );
 crit.where( new ColumnImpl( alias + "." + 
TitlePeer.TITLE.getColumnName() ), str );
 if( startDate != null ) {
Column aliasDate = new ColumnImpl( alias + "." + 
TitlePeer.TITLE_DATE.getColumnName() );
crit.where( aliasDate, startDate, Criteria.GREATER_EQUAL );
crit.where( aliasDate, endDate, Criteria.LESS_THAN );
 }
 ++idx;
  }
  return crit;
   }

   /**
* forces a non-prepared statement to get around SummaryHelper bug
* @param titles array of titles that the dog must have
* @param year year to be searched
* @return a Criteria object with the appropriate query
*/
   private static Criteria getCriteriaDogsWithAllTitlesHack( String[] titles, 
String year ) {
  String startDate = null, endDate = null;
  try{
 int yr = Integer.parseInt( year )+1;
 //They year is valid if we get here.
 startDate = year+"-01-01";
 endDate = Integer.toString( yr ) + "-01-01";
  } catch( NumberFormatException nfe ) {
 //ignore
  }

  Criteria crit = new Criteria();
  int idx = 1;
  for( String str : titles ) {
 String alias = "t"+Integer.toString( idx );
 crit.addAlias( alias, "title" );
 crit.addJoin( DogPeer.DOG_ID, new ColumnImpl( alias + "." + 
TitlePeer.DOG_ID.getColumnName() ) );
 crit.whereVerbatimSql( alias + "." + TitlePeer.TITLE.getColumnName() + 
"='" + str + "'", null );
 if( startDate != null ) {
Column aliasDate = new ColumnImpl( alias + "." + 
TitlePeer.TITLE_DATE.getColumnName() );
crit.whereVerbatimSql( alias + "." + 
TitlePeer.TITLE_DATE.getColumnName() + ">='" + startDate + "'", null );
crit.whereVerbatimSql( alias + "." + 
TitlePeer.TITLE_DATE.getColumnName() + "<'" + endDate + "'", null );
 }
 ++idx;
  }
  return crit;
   }


On Jun 12, 2013, at 12:59 AM, Thomas Fox  wrote:

> |>
> |Jay Bourland wrote:  
>|
> |>
>> ---|
>  | An:   |
>> ---|
> 
> 
> 
>> I'm

RE: SummaryHelper not setting replacements

2013-06-12 Thread Thomas Fox
|>
|Jay Bourland wrote:
 |
|>
  >---|
  | An:   |
  >---|



> I'm trying to convert an old Torque site to version 4. I'm running
> into a problem with using a count() function. The code looks like this:
>
>   Criteria crit = getCriteriaDogsWithAllTitles( titles, year );
>
>   SummaryHelper summary = new SummaryHelper();
>
>   summary.addAggregate( "count", new Count( DogPeer.DOG_ID ) );
>   List results = summary.summarize( crit );
>
> When summarize() is executed, I get a
> "jdbc4.MySQLSyntaxErrorException: You have an error in your SQL
> syntax" exception. The Criteria is good and works fine with a
> doSelect(). It appears that the summarize converts the Criteria to a
> string without adding in the replacements for the parameters in the
> prepared statement.

Can you please provide an example how you construct a crit which fails ?

> Also, if I take the string from the
> queryStatement and replace the '?' with values, the statement runs
> fine from an interactive MySQL session. When I compare the code in
> SummaryHelper.summarize() to BasePeerImpl.doSelect() the code to set
> the replacements is present in doSelect but not in summarize.
>
> What's the best way to report this?

Please file a jira issue at

https://issues.apache.org/jira/browse/TORQUE/

As a workaround, you can try
   crit.addSelectColumn(new org.apache.torque.util.functions.Count
("*"));
   int count = SomePeer.doSelectSingleRecord(crit, new
org.apache.torque.om.mapper.IntegerMapper());

instead of
   summary.addAggregate( "count", new Count( DogPeer.DOG_ID ) );
   List results = summary.summarize( crit );

Thomas


-
To unsubscribe, e-mail: torque-user-unsubscr...@db.apache.org
For additional commands, e-mail: torque-user-h...@db.apache.org