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.



628
629
630
# File 'lib/tep/pg.rb', line 628

def initialize(rh)
  @rh = rh
end

Instance Attribute Details

#rhObject

Returns the value of attribute rh.



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

def rh
  @rh
end

Instance Method Details

#clearObject



802
803
804
805
806
807
808
# File 'lib/tep/pg.rb', line 802

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

#cmd_statusObject



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

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

#cmd_tuplesObject



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

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

#column_values(col) ⇒ Object



747
748
749
750
751
752
753
754
755
756
757
# File 'lib/tep/pg.rb', line 747

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.



784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
# File 'lib/tep/pg.rb', line 784

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.



761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
# File 'lib/tep/pg.rb', line 761

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



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

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

#error_messageObject



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

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

#fformat(col) ⇒ Object



690
691
692
# File 'lib/tep/pg.rb', line 690

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

#fieldsObject



715
716
717
718
719
720
721
722
723
724
725
# File 'lib/tep/pg.rb', line 715

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



694
695
696
# File 'lib/tep/pg.rb', line 694

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

#fname(col) ⇒ Object



678
679
680
# File 'lib/tep/pg.rb', line 678

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

#fnumber(name) ⇒ Object



682
683
684
# File 'lib/tep/pg.rb', line 682

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

#ftype(col) ⇒ Object



686
687
688
# File 'lib/tep/pg.rb', line 686

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

#getisnull(row, col) ⇒ Object



702
703
704
# File 'lib/tep/pg.rb', line 702

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

#getlength(row, col) ⇒ Object



706
707
708
# File 'lib/tep/pg.rb', line 706

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

#getvalue(row, col) ⇒ Object



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

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

#nfieldsObject



670
671
672
# File 'lib/tep/pg.rb', line 670

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

#ntuplesObject



666
667
668
# File 'lib/tep/pg.rb', line 666

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

#num_fieldsObject



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

def num_fields; nfields; end

#num_tuplesObject

ruby-pg aliases for ntuples / nfields.



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

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)


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

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.



658
659
660
# File 'lib/tep/pg.rb', line 658

def sql_state
  error_field(PG::DIAG_SQLSTATE)
end

#statusObject



632
633
634
# File 'lib/tep/pg.rb', line 632

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.



711
712
713
# File 'lib/tep/pg.rb', line 711

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

#valuesObject



727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
# File 'lib/tep/pg.rb', line 727

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