Class: PG::Result

Inherits:
Object
  • Object
show all
Defined in:
lib/tep/pg.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rh) ⇒ Result

Returns a new instance of Result.



614
615
616
# File 'lib/tep/pg.rb', line 614

def initialize(rh)
  @rh = rh
end

Instance Attribute Details

#rhObject

Returns the value of attribute rh.



612
613
614
# File 'lib/tep/pg.rb', line 612

def rh
  @rh
end

Instance Method Details

#clearObject



788
789
790
791
792
793
794
# File 'lib/tep/pg.rb', line 788

def clear
  if @rh >= 0
    Pg.tep_pg_clear(@rh)
    @rh = -1
  end
  0
end

#cmd_statusObject



638
639
640
# File 'lib/tep/pg.rb', line 638

def cmd_status
  @rh < 0 ? "" : Pg.tep_pg_cmd_status(@rh)
end

#cmd_tuplesObject



648
649
650
# File 'lib/tep/pg.rb', line 648

def cmd_tuples
  @rh < 0 ? 0 : Pg.tep_pg_cmd_tuples(@rh)
end

#column_values(col) ⇒ Object



733
734
735
736
737
738
739
740
741
742
743
# File 'lib/tep/pg.rb', line 733

def column_values(col)
  out = [""]
  out.delete_at(0)
  n = ntuples
  i = 0
  while i < n
    out.push(getvalue(i, col))
    i += 1
  end
  out
end

#eachObject

Hash-yielding iteration – matches ruby-pg’s #each. Pre-builds the field-name array to skip a per-row fname call. The Hash shape is pinned to str_str_hash via a seed in lib/tep.rb; without that seed spinel widens to poly_poly_hash on first use.



770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
# File 'lib/tep/pg.rb', line 770

def each
  flds = fields
  n = ntuples
  w = flds.length
  i = 0
  while i < n
    row = Tep.str_hash
    j = 0
    while j < w
      row[flds[j]] = getvalue(i, j)
      j += 1
    end
    yield row
    i += 1
  end
  self
end

#each_rowObject

Array-yielding iteration. Cleaner shape than #each for hot paths – no Hash allocation per row.



747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
# File 'lib/tep/pg.rb', line 747

def each_row
  n = ntuples
  w = nfields
  i = 0
  while i < n
    row = [""]
    row.delete_at(0)
    j = 0
    while j < w
      row.push(getvalue(i, j))
      j += 1
    end
    yield row
    i += 1
  end
  self
end

#error_field(code) ⇒ Object



634
635
636
# File 'lib/tep/pg.rb', line 634

def error_field(code)
  @rh < 0 ? "" : Pg.tep_pg_result_error_field(@rh, code)
end

#error_messageObject



630
631
632
# File 'lib/tep/pg.rb', line 630

def error_message
  @rh < 0 ? "" : Pg.tep_pg_result_error_message(@rh)
end

#fformat(col) ⇒ Object



676
677
678
# File 'lib/tep/pg.rb', line 676

def fformat(col)
  @rh < 0 ? 0 : Pg.tep_pg_fformat(@rh, col)
end

#fieldsObject



701
702
703
704
705
706
707
708
709
710
711
# File 'lib/tep/pg.rb', line 701

def fields
  out = [""]
  out.delete_at(0)
  w = nfields
  j = 0
  while j < w
    out.push(fname(j))
    j += 1
  end
  out
end

#fmod(col) ⇒ Object



680
681
682
# File 'lib/tep/pg.rb', line 680

def fmod(col)
  @rh < 0 ? -1 : Pg.tep_pg_fmod(@rh, col)
end

#fname(col) ⇒ Object



664
665
666
# File 'lib/tep/pg.rb', line 664

def fname(col)
  @rh < 0 ? "" : Pg.tep_pg_fname(@rh, col)
end

#fnumber(name) ⇒ Object



668
669
670
# File 'lib/tep/pg.rb', line 668

def fnumber(name)
  @rh < 0 ? -1 : Pg.tep_pg_fnumber(@rh, name)
end

#ftype(col) ⇒ Object



672
673
674
# File 'lib/tep/pg.rb', line 672

def ftype(col)
  @rh < 0 ? 0 : Pg.tep_pg_ftype(@rh, col)
end

#getisnull(row, col) ⇒ Object



688
689
690
# File 'lib/tep/pg.rb', line 688

def getisnull(row, col)
  @rh < 0 ? true : Pg.tep_pg_getisnull(@rh, row, col) == 1
end

#getlength(row, col) ⇒ Object



692
693
694
# File 'lib/tep/pg.rb', line 692

def getlength(row, col)
  @rh < 0 ? 0 : Pg.tep_pg_getlength(@rh, row, col)
end

#getvalue(row, col) ⇒ Object



684
685
686
# File 'lib/tep/pg.rb', line 684

def getvalue(row, col)
  @rh < 0 ? "" : Pg.tep_pg_getvalue(@rh, row, col)
end

#nfieldsObject



656
657
658
# File 'lib/tep/pg.rb', line 656

def nfields
  @rh < 0 ? 0 : Pg.tep_pg_nfields(@rh)
end

#ntuplesObject



652
653
654
# File 'lib/tep/pg.rb', line 652

def ntuples
  @rh < 0 ? 0 : Pg.tep_pg_ntuples(@rh)
end

#num_fieldsObject



662
# File 'lib/tep/pg.rb', line 662

def num_fields; nfields; end

#num_tuplesObject

ruby-pg aliases for ntuples / nfields.



661
# File 'lib/tep/pg.rb', line 661

def num_tuples; ntuples; end

#ok?Boolean

True when the query reached the server and produced a non-error result (rows, command success, or empty query). Inspect ‘error_message` / `error_field(5)` on a non-ok result.

Returns:

  • (Boolean)


625
626
627
628
# File 'lib/tep/pg.rb', line 625

def ok?
  st = status
  st == Pg::RES_TUPLES || st == Pg::RES_COMMAND || st == Pg::RES_EMPTY
end

#sql_stateObject

ruby-pg’s PG::Result#error_field shortcut: 5-char SQLSTATE string. Empty when the result isn’t an error.



644
645
646
# File 'lib/tep/pg.rb', line 644

def sql_state
  error_field(PG::DIAG_SQLSTATE)
end

#statusObject



618
619
620
# File 'lib/tep/pg.rb', line 618

def status
  @rh < 0 ? Pg::RES_ERROR : Pg.tep_pg_result_status(@rh)
end

#value(row, col) ⇒ Object

ruby-pg’s #value is an alias for #getvalue.



697
698
699
# File 'lib/tep/pg.rb', line 697

def value(row, col)
  getvalue(row, col)
end

#valuesObject



713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
# File 'lib/tep/pg.rb', line 713

def values
  rows = [[""]]
  rows.delete_at(0)
  n = ntuples
  w = nfields
  i = 0
  while i < n
    row = [""]
    row.delete_at(0)
    j = 0
    while j < w
      row.push(getvalue(i, j))
      j += 1
    end
    rows.push(row)
    i += 1
  end
  rows
end