pg_jruby 0.14.1.rc2-java → 0.17.1-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +2 -0
  4. data/BSDL +22 -0
  5. data/ChangeLog +0 -0
  6. data/Contributors.rdoc +45 -0
  7. data/History.rdoc +270 -0
  8. data/LICENSE +56 -0
  9. data/Manifest.txt +51 -5
  10. data/POSTGRES +23 -0
  11. data/README-OS_X.rdoc +68 -0
  12. data/README-Windows.rdoc +67 -0
  13. data/README.ja.rdoc +14 -0
  14. data/README.rdoc +52 -94
  15. data/Rakefile +181 -73
  16. data/Rakefile.cross +273 -0
  17. data/ext/errorcodes.def +931 -0
  18. data/ext/errorcodes.rb +99 -0
  19. data/ext/errorcodes.txt +463 -0
  20. data/ext/extconf.rb +97 -0
  21. data/ext/gvl_wrappers.c +13 -0
  22. data/ext/gvl_wrappers.h +253 -0
  23. data/ext/pg.c +545 -0
  24. data/ext/pg.h +156 -0
  25. data/ext/pg_connection.c +3643 -0
  26. data/ext/pg_errors.c +89 -0
  27. data/ext/pg_result.c +920 -0
  28. data/ext/vc/pg.sln +26 -0
  29. data/ext/vc/pg_18/pg.vcproj +216 -0
  30. data/ext/vc/pg_19/pg_19.vcproj +209 -0
  31. data/lib/pg.rb +12 -18
  32. data/lib/pg/connection.rb +117 -10
  33. data/lib/pg/exceptions.rb +2 -8
  34. data/lib/pg/result.rb +6 -1
  35. data/lib/pg_ext.jar +0 -0
  36. data/sample/array_insert.rb +20 -0
  37. data/sample/async_api.rb +106 -0
  38. data/sample/async_copyto.rb +39 -0
  39. data/sample/async_mixed.rb +56 -0
  40. data/sample/check_conn.rb +21 -0
  41. data/sample/copyfrom.rb +81 -0
  42. data/sample/copyto.rb +19 -0
  43. data/sample/cursor.rb +21 -0
  44. data/sample/disk_usage_report.rb +186 -0
  45. data/sample/issue-119.rb +94 -0
  46. data/sample/losample.rb +69 -0
  47. data/sample/minimal-testcase.rb +17 -0
  48. data/sample/notify_wait.rb +72 -0
  49. data/sample/pg_statistics.rb +294 -0
  50. data/sample/replication_monitor.rb +231 -0
  51. data/sample/test_binary_values.rb +33 -0
  52. data/sample/wal_shipper.rb +434 -0
  53. data/sample/warehouse_partitions.rb +320 -0
  54. data/spec/data/expected_trace.out +26 -0
  55. data/spec/data/random_binary_data +0 -0
  56. data/spec/lib/helpers.rb +350 -0
  57. data/spec/pg/connection_spec.rb +1276 -0
  58. data/spec/pg/result_spec.rb +345 -0
  59. data/spec/pg_spec.rb +44 -0
  60. metadata +136 -90
  61. metadata.gz.sig +0 -0
  62. data/CHANGELOG.rdoc +0 -7
  63. data/bin/pg +0 -3
@@ -0,0 +1,23 @@
1
+ PostgreSQL Database Management System
2
+ (formerly known as Postgres, then as Postgres95)
3
+
4
+ Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
5
+
6
+ Portions Copyright (c) 1994, The Regents of the University of California
7
+
8
+ Permission to use, copy, modify, and distribute this software and its
9
+ documentation for any purpose, without fee, and without a written agreement
10
+ is hereby granted, provided that the above copyright notice and this
11
+ paragraph and the following two paragraphs appear in all copies.
12
+
13
+ IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
14
+ DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
15
+ LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
16
+ DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE
17
+ POSSIBILITY OF SUCH DAMAGE.
18
+
19
+ THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
20
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
21
+ AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
22
+ ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO
23
+ PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
@@ -0,0 +1,68 @@
1
+ = Compiling on MacOS X
2
+
3
+ The EnterpriseDB packages are the recommended PostgreSQL installations to use
4
+ with MacOS X. They eliminate most or all of the issues with getting 'pg'
5
+ installed, linked correctly, and running.
6
+
7
+ == Segfaults and SSL Support
8
+
9
+ If you need a custom installation of PostgreSQL, you should ensure that you
10
+ either compile it against the same version of OpenSSL as the OpenSSL extension
11
+ of the Ruby you'll be using, or compile it without SSL support. If you fail to
12
+ do this, you will likely see segfaults when you use 'pg' and the 'openssl'
13
+ extension at the same time. You can see what library it's linked against using
14
+ 'otool -L'; for example, on my 10.7 machine I use for 'pg' development:
15
+
16
+ $ otool -L /System/Library/Frameworks/Ruby.framework/Versions\
17
+ /1.8/usr/lib/ruby/1.8/universal-darwin11.0/openssl.bundle
18
+
19
+ /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/\
20
+ lib/ruby/1.8/universal-darwin11.0/openssl.bundle:
21
+ /System/Library/Frameworks/Ruby.framework/Versions/1.8/\
22
+ usr/lib/libruby.1.dylib (compatibility version 1.8.0, \
23
+ current version 1.8.7)
24
+ /usr/lib/libssl.0.9.8.dylib (compatibility version 0.9.8, \
25
+ current version 0.9.8)
26
+ /usr/lib/libcrypto.0.9.8.dylib (compatibility version 0.9.8, \
27
+ current version 0.9.8)
28
+ /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, \
29
+ current version 159.0.0)
30
+
31
+
32
+ == Dealing with Installation Problems
33
+
34
+ If you are building/installing pg on MacOS X, and the installation doesn't
35
+ work at first, here are a few things you can try.
36
+
37
+ === pg_config
38
+
39
+ The first thing you should do is ensure that the 'pg_config' tool that comes
40
+ with Postgres is in your path. If it isn't, or the one that's first in your
41
+ path isn't the one that was installed with the Postgres you want to build
42
+ against, you can specify the path to it with the --with-pg-config option.
43
+
44
+ For example, if you're using the Ruby binary that comes with OSX, and
45
+ PostgreSQL 9.0.x installed from MacPorts, do:
46
+
47
+ gem install -- --with-pg-config=/opt/local/lib/postgresql90/bin/pg_config
48
+
49
+ === ARCHFLAGS and Universal Binaries
50
+
51
+ OS X supports both architecture-specific binaries (e.g. i386), as well as
52
+ universal binaries (i.e. i386 & ppc). If Ruby is built as a universal binary
53
+ and PostgreSQL is not, you need to specify the path to the appropriate
54
+ pg_config binary or set the environment variable ARCHFLAGS appropriately.
55
+
56
+ Alternatively, if the build system can't figure out which architectures it
57
+ should include, you may need to set the 'ARCHFLAGS' environment variable
58
+ explicitly:
59
+
60
+ sudo env ARCHFLAGS='-arch x86_64' gem install pg
61
+
62
+ or, if you're building from source:
63
+
64
+ rake compile ARCHFLAGS="-arch x86_64"
65
+
66
+ Note that the recommended EnterpriseDB packages are correctly compiled as
67
+ universal binaries, and don't need any of these workarounds.
68
+
@@ -0,0 +1,67 @@
1
+ = Compiling 'pg' on MS Windows
2
+
3
+ In order to build this extension on MS Windows you will need a couple things.
4
+
5
+ First, a compiler. For the one click installer this means you should either
6
+ use VC++ 6.0 or the compiler that comes with cygwin or mingw if you're
7
+ building on that platform.
8
+
9
+ If you've built Ruby yourself, you should use the same compiler to build
10
+ this library that you used to build Ruby.
11
+
12
+ Second, PostgreSQL. Be sure you installed it with the development header
13
+ files if you installed it using the standard PostgreSQL installer for
14
+ Windows. If you didn't, you can run the installer again, select "modify",
15
+ and then select the 'development headers' option to install them.
16
+
17
+ I recommend making sure that 'pg_config.exe' is in your PATH. The PostgreSQL
18
+ installer for Windows does not necessarily update your PATH when it installs
19
+ itself, so you may need to do this manually. This isn't strictly necessary,
20
+ however.
21
+
22
+ In order to build ruby-pg, just run 'rake'. If the pg_config.exe executable
23
+ is not in your PATH, you'll need to explicitly point ruby-pg to where your
24
+ PostgreSQL headers and libraries are with something like this:
25
+
26
+ rake --with-pg-dir=c:/progra~1/postgr~1/8.3
27
+
28
+ Adjust your path accordingly. BE SURE TO USE THE SHORT PATH NAMES! If you
29
+ try to use a path with spaces in it, the nmake.exe program will choke.
30
+
31
+
32
+ == Cross compiling for mswin32
33
+
34
+ Using rake-compiler a cross compiled pg gem can be build on a Linux or MacOS X
35
+ host for the win32 platform. The generated gem is statically linked against
36
+ libpq and libssl. OpenSSL and PostgreSQL are downloaded and compiled from the
37
+ sources. There are no runtime dependencies to any but the standard Windows
38
+ DLLs.
39
+
40
+ Install mingw32 using the instructions in rake-compiler's README.
41
+ For Debian/Ubuntu it is <tt>apt-get install gcc-mingw32</tt> .
42
+ Use ruby-1.8.7 for the following commands.
43
+
44
+ Download and cross compile ruby 1.8 and 1.9 for win32 with:
45
+
46
+ rake-compiler cross-ruby VERSION=1.8.7-p352
47
+ rake-compiler cross-ruby VERSION=1.9.2-p290
48
+
49
+ Download and cross compile pg for win32:
50
+
51
+ rake cross native gem
52
+
53
+ or with custom versions:
54
+
55
+ rake cross native gem RUBY_CC_VERSION=1.8.7:1.9.2 \
56
+ OPENSSL_VERSION=1.0.0e POSTGRESQL_VERSION=9.1.1
57
+
58
+ If everything works, there should be pg-VERSION-x86-mingw32.gem in the pkg
59
+ directory.
60
+
61
+
62
+ == Reporting Problems
63
+
64
+ If you have any problems you can submit them via
65
+ [the project's issue-tracker][bitbucket]. And submit questions, problems, or
66
+ solutions, so that it can be improved.
67
+
@@ -0,0 +1,14 @@
1
+ = pg
2
+
3
+ home :: https://bitbucket.org/ged/ruby-pg
4
+ mirror :: https://github.com/ged/ruby-pg
5
+ docs :: http://deveiate.org/code/pg
6
+
7
+
8
+ == Description
9
+
10
+ This file needs a translation of the English README. Pull requests, patches, or
11
+ volunteers gladly accepted.
12
+
13
+ Until such time, please accept my sincere apologies for not knowing Japanese.
14
+
@@ -1,125 +1,83 @@
1
1
  = pg
2
2
 
3
- * https://github.com/headius/jruby-pg
4
-
5
- == DESCRIPTION:
6
-
7
- This is a native implementation of the Postsgres protocol written
8
- entirely in Java. The project was started by @headius as a ruby-pg
9
- replacement for JRuby that uses the JDBC driver and private API of
10
- Postgres. Unfortunately ruby-pg (which uses libpq under the hood)
11
- exposed a lot of features of Postgres that were impossible to
12
- implement or were complicated given the nature of the JDBC and the
13
- encapsulation of many features that are exposed in ruby-pg.
14
-
15
- *WARNING* this gem is not production ready yet. There are many
16
- bugs that needs to be fixed and more testing. So please checkout
17
- the code and submit pull requests with some fixes. If your Java-Fu
18
- isn't that great you can still contribute by submitting test cases
19
- and We'll be happy to fix them.
20
-
21
- == FEATURES:
22
-
23
- * A ruby-pg drop in replacement for JRuby
24
- * Async operations are supported
25
- * Large Object API
26
- * SSL connections
27
- * Copy operations
28
- * Zero dependencies on other jars and gems
29
- * All active record test suite pass (except 5 tests see PROBLEMS).
3
+ This is a JRuby gem replacement for ruby-pg. The gem should be a
4
+ drop-in replacement for ruby-pg version 0.17.1. If you see any
5
+ inconsistency please open an issue
6
+ {here}(https://github.com/headius/jruby-pg/issues)
30
7
 
31
- == How To Install
8
+ = Documentation
32
9
 
33
- Install via RubyGems:
10
+ For documentation please refair to the MRI pg gem docs which you can
11
+ find {here}(http://www.rubydoc.info/gems/pg/0.17.1/PG). The original
12
+ ruby-pg project can be found {here on github}(https://github.com/ged/ruby-pg)
34
13
 
35
- gem install --prerelease pg_jruby
14
+ == Build Status
36
15
 
37
- Note: the pg (for jruby) gem is still a release candidate.
16
+ {<img src="https://travis-ci.org/ged/ruby-pg.png?branch=master" alt="Build Status" />}[https://travis-ci.org/ged/ruby-pg]
38
17
 
39
- == PROBLEMS:
40
18
 
41
- * Due to a bug in JRuby Array#delete
42
- (https://github.com/jruby/jruby/issues/411) you'll need JRuby 1.7.1
43
- or later.
44
- * Due to a bug in the json gem
45
- (https://github.com/flori/json/pull/152) and (https://github.com/flori/json/pull/155)
46
- you'll need gem version
47
- 1.7.7 or later.
48
- * We currently have some failing tests when we run the activerecord test suite.
49
- The failing tests are due to the inconsistencies between JRuby and MRI (see
50
- https://github.com/jruby/jruby/issues/540 and https://github.com/jruby/jruby/pull/539)
51
- * The current implementation targets postgres protocol V3 (introduced in v 7.4)
52
- only. I'll wait until someone ask for support of earlier versions.
53
- * Run pg_search test suites on this implementation
54
- * lo_import and lo_export are not implemented yet
55
- * More Documentation especially in the parts that deal with the protocol.
56
- * Profiling the library would be awesome, but will try to get it running first
57
- then optimize.
58
- * JRuby 1.6.x (1.8 mode) needs to be tested.
19
+ == Requirements
59
20
 
60
- == REQUIREMENTS:
21
+ * JRuby 1.7.1 or later (due to https://github.com/jruby/jruby/issues/411)
22
+ * JRuby in 1.9 or 2.0 mode
23
+ * json gem 1.7.7 or later (see https://github.com/flori/json/pull/152 and
24
+ https://github.com/flori/json/pull/155)
25
+ * Postgresql 7.4 or higher
61
26
 
62
- * Just a Postgres server and the gem.
27
+ The gem has been tested with the following:
63
28
 
64
- == DEVELOPERS:
29
+ * JRuby 1.7.18
30
+ * PostgreSQL 9.3.6
65
31
 
66
- You'll need postgres to be installed on your system. In order for you
67
- to be able to run rails test suite, you'll also need the +hstore+ extension
68
- which is also available in the +postgresql-contrib+ Ubuntu package (see
69
- http://www.postgresql.org/docs/9.0/static/hstore.html
70
- for more info) and +postgresql-server-dev+ to get the pg_config binary.
32
+ It may work with earlier versions of Ruby/PostgreSQL as well, but those are
33
+ not regularly tested.
71
34
 
72
- You'll also need to create a new super user using your username and no password. You can
73
- use the following command to do that:
74
35
 
75
- $ sudo -u postgres createuser -s <insert your username here>
36
+ == How To Install
37
+
38
+ Install via RubyGems:
76
39
 
77
- You'll also need to add the following line in the your pg_hba.conf (in order to disable password authentication):
40
+ gem install pg_jruby
78
41
 
79
- host all <insert your username here> 127.0.0.1/32 trust
42
+ Install via Bundler, in your gemfile add the following:
80
43
 
81
- After checking out the source, run:
44
+ # Please note that the 1.0 is necessary to let bundler do its dependency management, as there is no .gemspec in the source.
45
+ gem 'pg_jruby', '0.17.1', :platform => :jruby, :git => 'git://github.com/headius/jruby-pg.git', :branch => :master
82
46
 
83
- $ rake
47
+ == Copying
84
48
 
85
- This task will install any missing dependencies, run the tests/specs.
49
+ Copyright (c) 1997-2013 by the authors.
86
50
 
87
- There are currently two test suites that run, the ruby-pg specs and
88
- more specs targetted towards the JRuby implementation details in
89
- jruby-spec. When you run `rake` both test suites are merged under
90
- the 'spec' directory.
51
+ === MRI contributors
91
52
 
92
- You can set +PG_TEST_SLL+ to 1, e.g.
53
+ * Jeff Davis <ruby-pg@j-davis.com>
54
+ * Guy Decoux (ts) <decoux@moulon.inra.fr>
55
+ * Michael Granger <ged@FaerieMUD.org>
56
+ * Lars Kanis <lars@greiz-reinsdorf.de>
57
+ * Dave Lee
58
+ * Eiji Matsumoto <usagi@ruby.club.or.jp>
59
+ * Yukihiro Matsumoto <matz@ruby-lang.org>
60
+ * Noboru Saitou <noborus@netlab.jp>
93
61
 
94
- $ PG_TEST_SLL=1 rake
62
+ === JRuby contributors
95
63
 
96
- to run the entire test suite using SSL sockets instead of plain sockets. Also
64
+ * John Shahid <jvshahid@gmail.com>
97
65
 
98
- $ test_all.sh
66
+ You may redistribute this software under the same terms as Ruby itself; see
67
+ http://www.ruby-lang.org/en/LICENSE.txt or the LICENSE file in the source
68
+ for details.
99
69
 
100
- runs the test suite with and without SSL.
70
+ Portions of the code are from the PostgreSQL project, and are distributed
71
+ under the terms of the PostgreSQL license, included in the file POSTGRES.
101
72
 
102
- == LICENSE:
73
+ Portions copyright LAIKA, Inc.
103
74
 
104
- (The MIT License)
105
75
 
106
- Copyright (c) 2012 John V. Shahid and Charles Nutter.
76
+ == Acknowledgments
107
77
 
108
- Permission is hereby granted, free of charge, to any person obtaining
109
- a copy of this software and associated documentation files (the
110
- 'Software'), to deal in the Software without restriction, including
111
- without limitation the rights to use, copy, modify, merge, publish,
112
- distribute, sublicense, and/or sell copies of the Software, and to
113
- permit persons to whom the Software is furnished to do so, subject to
114
- the following conditions:
78
+ See Contributors.rdoc for the many additional fine people that have contributed
79
+ to this library over the years.
115
80
 
116
- The above copyright notice and this permission notice shall be
117
- included in all copies or substantial portions of the Software.
81
+ We are thankful to the people at the ruby-list and ruby-dev mailing lists.
82
+ And to the people who developed PostgreSQL.
118
83
 
119
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
120
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
121
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
122
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
123
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
124
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
125
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile CHANGED
@@ -1,96 +1,204 @@
1
- # -*- ruby -*-
1
+ #!/usr/bin/env rake
2
+ #-*- ruby -*-
2
3
 
3
- require 'rubygems'
4
- require 'hoe'
5
- require 'git'
6
- require 'logger'
4
+ require 'rbconfig'
5
+ require 'pathname'
6
+ require 'tmpdir'
7
7
 
8
- Hoe.plugin :gemspec
8
+ begin
9
+ require 'rake/extensiontask'
10
+ rescue LoadError
11
+ abort "This Rakefile requires rake-compiler (gem install rake-compiler)"
12
+ end
13
+
14
+ begin
15
+ require 'hoe'
16
+ rescue LoadError
17
+ abort "This Rakefile requires hoe (gem install hoe)"
18
+ end
19
+
20
+ require 'rake/clean'
21
+
22
+ # Build directory constants
23
+ BASEDIR = Pathname( __FILE__ ).dirname
24
+ SPECDIR = BASEDIR + 'spec'
25
+ LIBDIR = BASEDIR + 'lib'
26
+ EXTDIR = BASEDIR + 'ext'
27
+ PKGDIR = BASEDIR + 'pkg'
28
+ TMPDIR = BASEDIR + 'tmp'
29
+
30
+ DLEXT = RbConfig::CONFIG['DLEXT']
31
+ EXT = LIBDIR + "pg_ext.#{DLEXT}"
32
+
33
+ TEST_DIRECTORY = BASEDIR + "tmp_test_specs"
34
+
35
+ CLOBBER.include( TEST_DIRECTORY.to_s )
36
+ CLEAN.include( PKGDIR.to_s, TMPDIR.to_s )
37
+
38
+ # Set up Hoe plugins
39
+ Hoe.plugin :mercurial
40
+ Hoe.plugin :signing
41
+ Hoe.plugin :deveiate
9
42
  Hoe.plugin :bundler
10
- Hoe.plugin :test
11
43
 
12
- HOE = Hoe.spec 'pg_jruby' do
13
- self.readme_file = ['README', ENV['HLANG'], 'rdoc'].compact.join('.')
14
- self.history_file = ['CHANGELOG', ENV['HLANG'], 'rdoc'].compact.join('.')
44
+ Hoe.plugins.delete :rubyforge
45
+ Hoe.plugins.delete :compiler
46
+
47
+ def jruby?
48
+ RUBY_PLATFORM =~ /java/
49
+ end
50
+
51
+ # Hoe specification
52
+ $hoespec = Hoe.spec 'pg_jruby' do
53
+ self.history_file = 'History.rdoc'
54
+ self.extra_rdoc_files = Rake::FileList[ '*.rdoc' ]
55
+ self.extra_rdoc_files.include( 'POSTGRES', 'LICENSE' )
56
+ self.extra_rdoc_files.include( 'ext/*.c' )
57
+
58
+ self.developer 'John Shahid', 'jvshahid@gmail.com'
59
+
60
+ self.dependency 'rake-compiler', '~> 0.9', :developer
61
+ self.dependency 'hoe', '~> 3.5.1', :developer
62
+ self.dependency 'hoe-deveiate', '~> 0.2', :developer
63
+ self.dependency 'hoe-bundler', '~> 1.0', :developer
64
+
65
+ self.spec_extras[:licenses] = ['BSD', 'Ruby', 'GPL']
66
+ self.spec_extras[:extensions] = [ 'ext/extconf.rb' ] unless jruby?
15
67
 
16
- developer('Charles Nutter', 'headius@headius.com')
17
- developer('John Shahid', 'jvshahid@gmail.com')
68
+ self.spec_extras[:files] = Proc.new do |f|
69
+ self.spec_extras[:files] = f << 'lib/pg_ext.jar'
70
+ end
18
71
 
19
- self.extra_dev_deps += [
20
- ["hoe-bundler", ">= 1.1"],
21
- ["hoe-gemspec", ">= 1.0"],
22
- ["rake", ">= 0.9"],
23
- ["rake-compiler", "= 0.8.0"],
24
- ["git"],
25
- ["logger"],
26
- ["rspec"]
27
- ]
72
+ self.require_ruby_version( '>= 1.8.7' )
28
73
 
29
- self.license 'MIT'
30
- self.spec_extras = { :platform => 'java' }
74
+ self.hg_sign_tags = true if self.respond_to?( :hg_sign_tags= )
75
+ self.check_history_on_release = true if self.respond_to?( :check_history_on_release= )
76
+ self.spec_extras[:rdoc_options] = [
77
+ '-f', 'fivefish',
78
+ '-t', 'pg: The Ruby Interface to PostgreSQL',
79
+ '-m', 'README.rdoc',
80
+ ]
31
81
 
32
- self.clean_globs = ['spec/*', 'tmp_test_specs', 'tmp']
82
+ self.rdoc_locations << "deveiate:/usr/local/www/public/code/#{remote_rdoc_dir}"
83
+ self.spec_extras[:platform] = 'java' if jruby?
33
84
  end
34
85
 
35
- require "rake/javaextensiontask"
36
- Rake::JavaExtensionTask.new("pg_ext", HOE.spec) do |ext|
37
- jruby_home = RbConfig::CONFIG['prefix']
38
- ext.ext_dir = 'ext/java'
39
- ext.lib_dir = 'lib'
40
- jars = ["#{jruby_home}/lib/jruby.jar"] + FileList['lib/*.jar']
41
- ext.classpath = jars.map { |x| File.expand_path x }.join ':'
86
+ if jruby?
87
+ require "rake/javaextensiontask"
88
+
89
+ Rake::JavaExtensionTask.new("pg_ext", $hoespec.spec) do |ext|
90
+ ext.ext_dir = 'ext/java'
91
+ ext.lib_dir = 'lib'
92
+ end
93
+ else
94
+ load 'Rakefile.cross'
95
+
96
+ # Rake-compiler task
97
+ Rake::ExtensionTask.new do |ext|
98
+ ext.name = 'pg_ext'
99
+ ext.gem_spec = $hoespec.spec
100
+ ext.ext_dir = 'ext'
101
+ ext.lib_dir = 'lib'
102
+ ext.source_pattern = "*.{c,h}"
103
+ ext.cross_compile = true
104
+ ext.cross_platform = CrossLibraries.map &:for_platform
105
+
106
+ ext.cross_config_options += CrossLibraries.map do |lib|
107
+ {
108
+ lib.for_platform => [
109
+ "--with-pg-include=#{lib.static_postgresql_libdir}",
110
+ "--with-opt-include=#{lib.static_postgresql_incdir}",
111
+ "--with-pg-lib=#{lib.static_postgresql_libdir}",
112
+ "--with-opt-lib=#{lib.static_openssl_builddir}",
113
+ ]
114
+ }
115
+ end
116
+ end
42
117
  end
43
118
 
44
- def remote
45
- "git://github.com/jvshahid/ruby-pg.git"
119
+ ENV['VERSION'] ||= $hoespec.spec.version.to_s
120
+
121
+ # Tests should pass before checking in
122
+ task 'hg:precheckin' => [ :check_history, :check_manifest, :spec ]
123
+
124
+ # Support for 'rvm specs'
125
+ task :specs => :spec
126
+
127
+ # Compile before testing
128
+ task :spec => :compile
129
+
130
+ # gem-testers support
131
+ task :test do
132
+ # rake-compiler always wants to copy the compiled extension into lib/, but
133
+ # we don't want testers to have to re-compile, especially since that
134
+ # often fails because they can't (and shouldn't have to) write to tmp/ in
135
+ # the installed gem dir. So we clear the task rake-compiler set up
136
+ # to break the dependency between :spec and :compile when running under
137
+ # rubygems-test, and then run :spec.
138
+ Rake::Task[ EXT.to_s ].clear
139
+ Rake::Task[ :spec ].execute
46
140
  end
47
141
 
48
- desc 'fetch the specs from the ruby-pg repo'
49
- task 'get-ruby-pg-specs' do
50
- if Dir.glob('spec/*').empty?
51
- FileUtils.rm_rf '/tmp/checkout'
52
- g = Git.clone(remote, '/tmp/checkout', :log => Logger.new(STDOUT))
53
- g.checkout('fix_path_to_pg_binaries')
54
- FileUtils.cp_r Dir.glob('/tmp/checkout/spec/*'), 'spec/'
55
- end
142
+ desc "Turn on warnings and debugging in the build."
143
+ task :maint do
144
+ ENV['MAINTAINER_MODE'] = 'yes'
56
145
  end
57
146
 
58
- desc "make sure the spec directory has the latest ruby-pg and jruby-pg specs"
59
- task :'sync-files' => 'get-ruby-pg-specs'
147
+ ENV['RUBY_CC_VERSION'] ||= '1.8.7:1.9.2:2.0.0'
148
+
149
+ # Make the ChangeLog update if the repo has changed since it was last built
150
+ file '.hg/branch' do
151
+ warn "WARNING: You need the Mercurial repo to update the ChangeLog"
152
+ end
153
+ file 'ChangeLog' do |task|
154
+ if File.exist?('.hg/branch')
155
+ $stderr.puts "Updating the changelog..."
156
+ begin
157
+ content = make_changelog()
158
+ rescue NameError
159
+ abort "Packaging tasks require the hoe-mercurial plugin (gem install hoe-mercurial)"
160
+ end
161
+ File.open( task.name, 'w', 0644 ) do |fh|
162
+ fh.print( content )
163
+ end
164
+ else
165
+ touch 'ChangeLog'
166
+ end
167
+ end
60
168
 
61
- Rake::Task[:spec].prerequisites << 'sync-files'
62
- Rake::Task[:spec].prerequisites << :compile
63
- Rake::Task[:spec].prerequisites << :java_debug
64
- Rake::Task[:spec].prerequisites << :import_certs
169
+ # Rebuild the ChangeLog immediately before release
170
+ task :prerelease => 'ChangeLog'
65
171
 
66
- desc "import server certificates"
67
- task :import_certs do
68
- puts "Importing server certificates now, don't freak out, this will need sudo access."
69
- puts "For more info on what this is doing take a look at certs/import_key.sh"
70
- system 'certs/import_key.sh'
172
+
173
+ desc "Stop any Postmaster instances that remain after testing."
174
+ task :cleanup_testing_dbs do
175
+ require 'spec/lib/helpers'
176
+ PgTestingHelpers.stop_existing_postmasters()
177
+ Rake::Task[:clean].invoke
71
178
  end
72
179
 
73
- # sync specs from jruby-spec to spec/jruby
74
- target_dir = 'spec/jruby'
75
- directory target_dir
76
- Dir.chdir 'jruby-spec' do
77
- Dir.glob('**/*').each do |f|
78
- file_name = "jruby-spec/#{f}"
79
- new_name = "#{target_dir}/#{f}"
80
- t = file new_name => [file_name, target_dir] do |t|
81
- if File.directory? file_name
82
- FileUtils.mkpath new_name
83
- else
84
- puts "copying #{file_name} to #{new_name}, pwd: #{Dir.pwd}"
85
- FileUtils.chmod 0644, new_name if File.exist?(new_name)
86
- FileUtils.cp file_name, new_name
87
- File.chmod 0444, new_name
88
- end
89
- end
90
- Rake::Task[:'sync-files'].prerequisites << t
180
+ desc "Update list of server error codes"
181
+ task :update_error_codes do
182
+ URL_ERRORCODES_TXT = "http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob_plain;f=src/backend/utils/errcodes.txt;hb=HEAD"
183
+
184
+ ERRORCODES_TXT = "ext/errorcodes.txt"
185
+ sh "wget #{URL_ERRORCODES_TXT.inspect} -O #{ERRORCODES_TXT.inspect} || curl #{URL_ERRORCODES_TXT.inspect} -o #{ERRORCODES_TXT.inspect}"
186
+ end
187
+
188
+ def error_codes_file
189
+ if jruby?
190
+ return 'ext/java/Errors.java'
91
191
  end
192
+ 'ext/errorcodes.def'
92
193
  end
93
- task :java_debug do
94
- ENV['JAVA_OPTS'] = '-Xdebug -Xrunjdwp:transport=dt_socket,address=8080,server=y,suspend=n' if ENV['JAVA_DEBUG'] == '1'
194
+
195
+ file error_codes_file => ['ext/errorcodes.rb', 'ext/errorcodes.txt'] do
196
+ ruby 'ext/errorcodes.rb', 'ext/errorcodes.txt', error_codes_file
197
+ end
198
+
199
+ file 'ext/pg_errors.c' => ['ext/errorcodes.def'] do
200
+ # trigger compilation of changed errorcodes.def
201
+ touch 'ext/pg_errors.c'
95
202
  end
96
- # vim: syntax=ruby
203
+
204
+ file 'ext/java/PgExtService.java' => error_codes_file