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.



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

def initialize(rh)
  @rh = rh
end

Instance Attribute Details

#rhObject

Returns the value of attribute rh.



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

def rh
  @rh
end

Instance Method Details

#clearObject



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

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

#cmd_statusObject



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

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

#cmd_tuplesObject



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

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

#column_values(col) ⇒ Object



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

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.



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

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.



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

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



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

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

#error_messageObject



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

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

#fformat(col) ⇒ Object



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

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

#fieldsObject



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

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



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

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

#fname(col) ⇒ Object



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

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

#fnumber(name) ⇒ Object



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

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

#ftype(col) ⇒ Object



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

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

#getisnull(row, col) ⇒ Object



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

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

#getlength(row, col) ⇒ Object



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

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

#getvalue(row, col) ⇒ Object



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

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

#nfieldsObject



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

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

#ntuplesObject



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

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

#num_fieldsObject



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

def num_fields; nfields; end

#num_tuplesObject

ruby-pg aliases for ntuples / nfields.



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

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)


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

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.



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

def sql_state
  error_field(PG::DIAG_SQLSTATE)
end

#statusObject



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

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.



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

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

#valuesObject



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

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