@@ -482,6 +482,43 @@ impl<'self> NormalPostgresStatement<'self> {
482482 }
483483 })
484484 }
485+
486+ fn lazy_query<'a>(&'a self, row_limit: uint, params: &[&ToSql])
487+ -> PostgresResult<'a> {
488+ match self.try_lazy_query(row_limit, params) {
489+ Ok(result) => result,
490+ Err(err) => fail2!(" Error executing query: { } ", err.to_str())
491+ }
492+ }
493+
494+ fn try_lazy_query<'a>(&'a self, _row_limit: uint, params: &[&ToSql])
495+ -> Result<PostgresResult<'a>, PostgresDbError> {
496+ match self.execute(" ", params) {
497+ Some(err) => {
498+ return Err(err);
499+ }
500+ None => ()
501+ }
502+
503+ let mut data = ~[];
504+ loop {
505+ match_read_message_or_fail!(self.conn, {
506+ EmptyQueryResponse |
507+ CommandComplete {_} => {
508+ break;
509+ },
510+ DataRow { row } => data.push(row)
511+ })
512+ }
513+ self.conn.wait_for_ready();
514+
515+ // we're going to be popping off
516+ data.reverse();
517+ Ok(PostgresResult {
518+ stmt: self,
519+ data: data,
520+ })
521+ }
485522}
486523
487524impl<'self> PostgresStatement for NormalPostgresStatement<'self> {
@@ -535,39 +572,12 @@ impl<'self> PostgresStatement for NormalPostgresStatement<'self> {
535572
536573 fn query<'a>(&'a self, params: &[&ToSql])
537574 -> PostgresResult<'a> {
538- match self.try_query(params) {
539- Ok(result) => result,
540- Err(err) => fail2!(" Error running query: { } ", err.to_str())
541- }
575+ self.lazy_query(0, params)
542576 }
543577
544578 fn try_query<'a>(&'a self, params: &[&ToSql])
545579 -> Result<PostgresResult<'a>, PostgresDbError> {
546- match self.execute(" ", params) {
547- Some(err) => {
548- return Err(err);
549- }
550- None => ()
551- }
552-
553- let mut data = ~[];
554- loop {
555- match_read_message_or_fail!(self.conn, {
556- EmptyQueryResponse |
557- CommandComplete {_} => {
558- break;
559- },
560- DataRow { row } => data.push(row)
561- })
562- }
563- self.conn.wait_for_ready();
564-
565- // we're going to be popping off
566- data.reverse();
567- Ok(PostgresResult {
568- stmt: self,
569- data: data,
570- })
580+ self.try_lazy_query(0, params)
571581 }
572582
573583 fn find_col_named(&self, col: &str) -> Option<uint> {
@@ -608,6 +618,18 @@ impl<'self> PostgresStatement for TransactionalPostgresStatement<'self> {
608618 }
609619}
610620
621+ impl<'self> TransactionalPostgresStatement<'self> {
622+ pub fn lazy_query<'a>(&'a self, row_limit: uint, params: &[&ToSql])
623+ -> PostgresResult<'a> {
624+ self.stmt.lazy_query(row_limit, params)
625+ }
626+
627+ pub fn try_lazy_query<'a>(&'a self, row_limit: uint, params: &[&ToSql])
628+ -> Result<PostgresResult<'a>, PostgresDbError> {
629+ self.try_lazy_query(row_limit, params)
630+ }
631+ }
632+
611633pub struct PostgresResult<'self> {
612634 priv stmt: &'self NormalPostgresStatement<'self>,
613635 priv data: ~[~[Option<~[u8]>]]
0 commit comments