sabman (owner)

Revisions

gist: 224762 Download_button fork
public
Description:
schema_oracle_spatial.rb - experimenting with oracle spatial and activerecord connections
Public Clone URL: git://gist.github.com/224762.git
Embed All Files: show embed
schema_oracle_spatial.rb #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
$:.unshift(File.join(File.dirname(__FILE__), 'spatial_adapter', 'lib'))
$:.unshift(File.join(File.dirname(__FILE__), '..', 'utils'))
 
require 'rubygems'
require 'pp'
require 'active_record'
require 'active_record/connection_adapters/oracle_enhanced_adapter'
require 'geo_ruby'
require 'oci8'
require 'sdo_geometry.rb'
 
include GeoRuby::SimpleFeatures
 
DB_CONFIG = YAML.load_file('database.yml')
 
# ============= Connect to oracle spatial development database =============
begin
  class DevDb < ActiveRecord::Base
    establish_connection(DB_CONFIG['development'])
    execute("ALTER SESSION set NLS_DATE_FORMAT ='DD-MON-FXYYYY'")
  end
rescue Exception => e
  pp "#{e.message}: might I recommend iSQL to fix this" if e.is_a?(OCISuccessWithInfo)
  pp e.message
end
 
# ============= Connect to oracle spatial production database =============
begin
  class ProdDb < ActiveRecord::Base
    establish_connection(DB_CONFIG['production'])
    execute("ALTER SESSION set NLS_DATE_FORMAT ='DD-MON-FXYYYY'")
  end
rescue Exception => e
  pp "#{e.message}: might I recommend iSQL to fix this" if e.is_a?(OCISuccessWithInfo)
  pp e.message
end
 
#ActiveRecord::Base.connection.disable_dbms_output
# ==============================================================
# add spatial support from georuby and common spatial adapter
# These should be added AFTER the AR connection is established otherwise you will get
# "uninitialized constant ActiveRecord::..." error
require 'common_spatial_adapter' # WARNING: MAKE SURE THIS IS AFTER AR CONNECTION IS ESTABLISHED
#include SpatialAdapter
 
 
ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.class_eval do
  include SpatialAdapter
 
  alias :original_native_database_types :native_database_types
  def native_database_types
    original_native_database_types.merge!(geometry_data_types)
  end
  
  alias :original_quote :quote
  #Redefines the quote method to add behaviour for when a Geometry is encountered
  def quote(value, column = nil)
    if value.kind_of?(GeoRuby::SimpleFeatures::Geometry)
      value.as_sdo_geometry
    else
      original_quote(value,column)
    end
  end
end
 
 
module Dev
  class MySample < DevDb
    set_table_name :my_samples
    set_sequence_name :autogenerated
    set_primary_key :sampleno
  end
 
  class Sample < DevDb
    set_table_name :samples
    set_sequence_name :autogenerated
    set_primary_key :sampleno
  end
end
 
module Prod
 
  class Survey < ProdDb
    set_table_name :surveys
    set_primary_key :eno
    has_many :samples
  end
 
  class Sample < ProdDb
    set_table_name :samples
    set_sequence_name :autogenerated
    set_primary_key :sampleno
    set_date_columns :entrydate, :qadate, :acquiredate, :confid_until, :lastupdate
    has_many :sample_data
    belongs_to :survey, :foreign_key => :eno
  end
 
  class SampleData < ProdDb
    set_table_name :sampledata
    set_sequence_name :autogenerated
    set_primary_key :datano
    belongs_to :sample, :foreign_key => :sampleno
  end
 
end