pg 1.2.0-x86-mingw32 → 1.3.0.rc1-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/.appveyor.yml +36 -0
  4. data/.gems +6 -0
  5. data/.github/workflows/binary-gems.yml +80 -0
  6. data/.github/workflows/source-gem.yml +129 -0
  7. data/.gitignore +13 -0
  8. data/.hgsigs +34 -0
  9. data/.hgtags +41 -0
  10. data/.irbrc +23 -0
  11. data/.pryrc +23 -0
  12. data/.tm_properties +21 -0
  13. data/.travis.yml +49 -0
  14. data/Gemfile +14 -0
  15. data/History.rdoc +98 -7
  16. data/Manifest.txt +0 -1
  17. data/README.rdoc +9 -8
  18. data/Rakefile +31 -140
  19. data/Rakefile.cross +54 -56
  20. data/certs/ged.pem +24 -0
  21. data/ext/errorcodes.def +8 -0
  22. data/ext/errorcodes.txt +3 -1
  23. data/ext/extconf.rb +90 -19
  24. data/ext/gvl_wrappers.c +4 -0
  25. data/ext/gvl_wrappers.h +23 -0
  26. data/ext/pg.c +35 -1
  27. data/ext/pg.h +18 -0
  28. data/ext/pg_coder.c +90 -24
  29. data/ext/pg_connection.c +538 -279
  30. data/ext/pg_copy_coder.c +45 -15
  31. data/ext/pg_record_coder.c +38 -9
  32. data/ext/pg_result.c +70 -34
  33. data/ext/pg_text_decoder.c +1 -1
  34. data/ext/pg_text_encoder.c +6 -6
  35. data/ext/pg_tuple.c +47 -21
  36. data/ext/pg_type_map.c +41 -8
  37. data/ext/pg_type_map_all_strings.c +14 -1
  38. data/ext/pg_type_map_by_class.c +50 -21
  39. data/ext/pg_type_map_by_column.c +64 -28
  40. data/ext/pg_type_map_by_mri_type.c +47 -18
  41. data/ext/pg_type_map_by_oid.c +52 -23
  42. data/ext/pg_type_map_in_ruby.c +50 -19
  43. data/ext/pg_util.c +2 -2
  44. data/lib/2.5/pg_ext.so +0 -0
  45. data/lib/2.6/pg_ext.so +0 -0
  46. data/lib/2.7/pg_ext.so +0 -0
  47. data/lib/3.0/pg_ext.so +0 -0
  48. data/lib/pg/basic_type_map_based_on_result.rb +47 -0
  49. data/lib/pg/basic_type_map_for_queries.rb +193 -0
  50. data/lib/pg/basic_type_map_for_results.rb +81 -0
  51. data/lib/pg/basic_type_registry.rb +296 -0
  52. data/lib/pg/coder.rb +1 -1
  53. data/lib/pg/connection.rb +369 -56
  54. data/lib/pg/version.rb +4 -0
  55. data/lib/pg.rb +38 -24
  56. data/lib/x86-mingw32/libpq.dll +0 -0
  57. data/misc/openssl-pg-segfault.rb +31 -0
  58. data/misc/postgres/History.txt +9 -0
  59. data/misc/postgres/Manifest.txt +5 -0
  60. data/misc/postgres/README.txt +21 -0
  61. data/misc/postgres/Rakefile +21 -0
  62. data/misc/postgres/lib/postgres.rb +16 -0
  63. data/misc/ruby-pg/History.txt +9 -0
  64. data/misc/ruby-pg/Manifest.txt +5 -0
  65. data/misc/ruby-pg/README.txt +21 -0
  66. data/misc/ruby-pg/Rakefile +21 -0
  67. data/misc/ruby-pg/lib/ruby/pg.rb +16 -0
  68. data/pg.gemspec +32 -0
  69. data/sample/array_insert.rb +20 -0
  70. data/sample/async_api.rb +106 -0
  71. data/sample/async_copyto.rb +39 -0
  72. data/sample/async_mixed.rb +56 -0
  73. data/sample/check_conn.rb +21 -0
  74. data/sample/copydata.rb +71 -0
  75. data/sample/copyfrom.rb +81 -0
  76. data/sample/copyto.rb +19 -0
  77. data/sample/cursor.rb +21 -0
  78. data/sample/disk_usage_report.rb +177 -0
  79. data/sample/issue-119.rb +94 -0
  80. data/sample/losample.rb +69 -0
  81. data/sample/minimal-testcase.rb +17 -0
  82. data/sample/notify_wait.rb +72 -0
  83. data/sample/pg_statistics.rb +285 -0
  84. data/sample/replication_monitor.rb +222 -0
  85. data/sample/test_binary_values.rb +33 -0
  86. data/sample/wal_shipper.rb +434 -0
  87. data/sample/warehouse_partitions.rb +311 -0
  88. data.tar.gz.sig +0 -0
  89. metadata +83 -232
  90. metadata.gz.sig +0 -0
  91. data/ChangeLog +0 -0
  92. data/lib/2.2/pg_ext.so +0 -0
  93. data/lib/2.3/pg_ext.so +0 -0
  94. data/lib/2.4/pg_ext.so +0 -0
  95. data/lib/libpq.dll +0 -0
  96. data/lib/pg/basic_type_mapping.rb +0 -522
  97. data/spec/data/expected_trace.out +0 -26
  98. data/spec/data/random_binary_data +0 -0
  99. data/spec/helpers.rb +0 -382
  100. data/spec/pg/basic_type_mapping_spec.rb +0 -645
  101. data/spec/pg/connection_spec.rb +0 -1911
  102. data/spec/pg/connection_sync_spec.rb +0 -41
  103. data/spec/pg/result_spec.rb +0 -681
  104. data/spec/pg/tuple_spec.rb +0 -333
  105. data/spec/pg/type_map_by_class_spec.rb +0 -138
  106. data/spec/pg/type_map_by_column_spec.rb +0 -226
  107. data/spec/pg/type_map_by_mri_type_spec.rb +0 -136
  108. data/spec/pg/type_map_by_oid_spec.rb +0 -149
  109. data/spec/pg/type_map_in_ruby_spec.rb +0 -164
  110. data/spec/pg/type_map_spec.rb +0 -22
  111. data/spec/pg/type_spec.rb +0 -1123
  112. data/spec/pg_spec.rb +0 -50
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2023df7a37c1bc32c0230dafb138bee3b75925795d72c3f90eddf9ac003909b2
4
- data.tar.gz: e7d81f034652c74afbc959cd5b52900fe5971446b6f03cf71260f31c9c16c19a
3
+ metadata.gz: 49763e0db47d44589822e73cdae4872837d89e73e3ba4b1389141f9dc9807525
4
+ data.tar.gz: be1a3c7c5a97dad436143c098476a74582b3645c1b74396d9e4b30b4117d2cf6
5
5
  SHA512:
6
- metadata.gz: 5721da83eb1dbed2d307f3d17f012ecc34b545de1c091d5c0720b68cb9662978cc01fed10efadc40d3233e24e0f4030e09621dfaba109e636fcdf721afac17f9
7
- data.tar.gz: 90ac26e0be824fce47b2e389e61a9a81b812980aa02d23f6e720b4f0d10fd59c44bba1f004d9af8da2b3a6ea90c217f3ef6032a815da9b0338f6fc2a7851bcf8
6
+ metadata.gz: 9303ff9fa7e83b79076286e1f1ea26dd91378259c4f4ab158945090cc195316d3e4eabbd922121809c5dc209361c5ff7bbf05d49d9aadc81720210530696e0b6
7
+ data.tar.gz: 1621d3a45be7ea0c1ae941a7017587ab1804be4b2661832040536a03480d858933171008677376edc5cc278483c0b961902d19342c24314cfea9e360ce4a3946
checksums.yaml.gz.sig CHANGED
Binary file
data/.appveyor.yml ADDED
@@ -0,0 +1,36 @@
1
+ image: Visual Studio 2019
2
+
3
+ init:
4
+ - set PATH=C:/Ruby%ruby_version%/bin;c:/Program Files/Git/cmd;c:/Windows/system32;C:/Windows/System32/WindowsPowerShell/v1.0;C:/Program Files/Mercurial
5
+ - set RUBYOPT=--verbose
6
+ install:
7
+ - ps: |
8
+ if ($env:RUBYDOWNLOAD -ne $null) {
9
+ $(new-object net.webclient).DownloadFile("https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-head-$env:RUBYDOWNLOAD.exe", "$pwd/ruby-setup.exe")
10
+ cmd /c ruby-setup.exe /verysilent /dir=C:/Ruby$env:ruby_version
11
+ }
12
+ - ruby --version
13
+ - gem --version
14
+ - gem install bundler --conservative
15
+ - bundle install
16
+ - ps: |
17
+ if ($env:PGVERSION -ne $null)
18
+ {
19
+ $(new-object net.webclient).DownloadFile('http://get.enterprisedb.com/postgresql/postgresql-' + $env:PGVERSION + '.exe', 'C:/postgresql-setup.exe')
20
+ cmd /c "C:/postgresql-setup.exe" --mode unattended --extract-only 1
21
+ }
22
+ $env:PATH = 'C:/Program Files/PostgreSQL/' + $env:PGVER + '/bin;' + $env:PATH
23
+ $env:PATH = 'C:/Program Files (x86)/PostgreSQL/' + $env:PGVER + '/bin;' + $env:PATH
24
+ build_script:
25
+ - bundle exec rake -rdevkit compile --trace
26
+ test_script:
27
+ - bundle exec rake test PG_DEBUG=0
28
+ environment:
29
+ matrix:
30
+ - ruby_version: "head"
31
+ RUBYDOWNLOAD: x86
32
+ PGVERSION: 10.16-1-windows
33
+ PGVER: 10
34
+ - ruby_version: "25"
35
+ PGVERSION: 9.3.25-1-windows
36
+ PGVER: 9.3
data/.gems ADDED
@@ -0,0 +1,6 @@
1
+ # .gems generated gem export file. Note that any env variable settings will be missing. Append these after using a ';' field separator
2
+ rake-compiler -v1.1.0
3
+ rake-compiler-dock -v1.0.0
4
+ hoe-deveiate -v0.10.0
5
+ hoe-bundler -v1.3.0
6
+
@@ -0,0 +1,80 @@
1
+ name: Build and test binary gems
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ job_build_x64:
7
+ name: build
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - uses: actions/checkout@v2
11
+ - name: Set up Ruby
12
+ uses: ruby/setup-ruby@v1
13
+ with:
14
+ ruby-version: "3.0"
15
+ - run: bundle install
16
+
17
+ - name: Create a dummy cert to satisfy the build
18
+ run: |
19
+ mkdir -p ~/.gem/
20
+ ruby -ropenssl -e "puts OpenSSL::PKey::RSA.new(2048).to_pem" > ~/.gem/gem-private_key.pem
21
+ gem cert --build travis-ci@dummy.org --private-key ~/.gem/gem-private_key.pem
22
+ cp gem-public_cert.pem ~/.gem/gem-public_cert.pem
23
+
24
+ - name: Build binary gem
25
+ run: bundle exec rake gem:windows:x64-mingw32
26
+
27
+ - name: Upload binary gem
28
+ uses: actions/upload-artifact@v2
29
+ with:
30
+ name: binary-gem
31
+ path: pkg/*.gem
32
+
33
+ job_test_binary:
34
+ name: Test on Windows
35
+ needs: job_build_x64
36
+ strategy:
37
+ fail-fast: false
38
+ matrix:
39
+ include:
40
+ - ruby: "3.0"
41
+ PGVERSION: 14.0-1-windows-x64
42
+ PGVER: "14"
43
+ - ruby: "2.5"
44
+ PGVERSION: 10.16-1-windows
45
+ PGVER: "10"
46
+
47
+ runs-on: windows-latest
48
+ env:
49
+ PGVERSION: ${{ matrix.PGVERSION }}
50
+ PGVER: ${{ matrix.PGVER }}
51
+ steps:
52
+ - uses: actions/checkout@v2
53
+ - name: Set up Ruby
54
+ uses: ruby/setup-ruby@v1
55
+ with:
56
+ ruby-version: ${{ matrix.ruby }}
57
+
58
+ - name: Download gem from build job
59
+ uses: actions/download-artifact@v2
60
+ with:
61
+ name: binary-gem
62
+
63
+ - name: Download PostgreSQL
64
+ run: |
65
+ Add-Type -AssemblyName System.IO.Compression.FileSystem
66
+ function Unzip {
67
+ param([string]$zipfile, [string]$outpath)
68
+ [System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
69
+ }
70
+
71
+ $(new-object net.webclient).DownloadFile("http://get.enterprisedb.com/postgresql/postgresql-$env:PGVERSION-binaries.zip", "postgresql-binaries.zip")
72
+ Unzip "postgresql-binaries.zip" "."
73
+ echo "$pwd/pgsql/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
74
+ echo "PGUSER=$env:USERNAME" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
75
+ echo "PGPASSWORD=" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
76
+
77
+ - run: bundle install
78
+ - run: gem install --local *.gem --verbose
79
+ - name: Run specs
80
+ run: ruby -rpg -S rspec spec/**/*_spec.rb
@@ -0,0 +1,129 @@
1
+ name: Build and test source gem
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ job_build_gem:
7
+ name: build
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - uses: actions/checkout@v2
11
+ - name: Set up Ruby
12
+ uses: ruby/setup-ruby@v1
13
+ with:
14
+ ruby-version: "3.0"
15
+
16
+ - name: Build source gem
17
+ run: gem build pg.gemspec
18
+
19
+ - name: Upload source gem
20
+ uses: actions/upload-artifact@v2
21
+ with:
22
+ name: source-gem
23
+ path: "*.gem"
24
+
25
+ job_test_gem:
26
+ name: Test built gem
27
+ needs: job_build_gem
28
+ strategy:
29
+ fail-fast: false
30
+ matrix:
31
+ include:
32
+ - os: windows
33
+ ruby: "head"
34
+ PGVERSION: 14.0-1-windows-x64
35
+ PGVER: "14"
36
+ - os: windows
37
+ ruby: "2.5"
38
+ PGVERSION: 9.3.25-1-windows-x64
39
+ PGVER: "9.3"
40
+ - os: ubuntu
41
+ ruby: "head"
42
+ PGVER: "14"
43
+ - os: ubuntu
44
+ ruby: "3.0"
45
+ PGVER: "12"
46
+ - os: ubuntu
47
+ ruby: "2.5"
48
+ PGVER: "9.3"
49
+ - os: ubuntu
50
+ ruby: "truffleruby"
51
+ PGVER: "13"
52
+ - os: ubuntu
53
+ ruby: "truffleruby-head"
54
+ PGVER: "14"
55
+ - os: macos
56
+ ruby: "head"
57
+ PGVERSION: 13.2-1-osx
58
+ PGVER: "13"
59
+
60
+ runs-on: ${{ matrix.os }}-latest
61
+ env:
62
+ PGVERSION: ${{ matrix.PGVERSION }}
63
+ PGVER: ${{ matrix.PGVER }}
64
+
65
+ steps:
66
+ - uses: actions/checkout@v2
67
+ - name: Set up Ruby
68
+ uses: MSP-Greg/ruby-setup-ruby@win-ucrt
69
+ with:
70
+ ruby-version: ${{ matrix.ruby }}
71
+
72
+ - name: Download gem from build job
73
+ uses: actions/download-artifact@v2
74
+ with:
75
+ name: source-gem
76
+
77
+ - name: Install required packages Windows
78
+ if: matrix.os == 'windows'
79
+ shell: cmd
80
+ run: ridk exec sh -c "pacman --sync --needed --noconfirm ${MINGW_PACKAGE_PREFIX}-gcc"
81
+
82
+ - name: Download PostgreSQL Windows
83
+ if: matrix.os == 'windows'
84
+ run: |
85
+ Add-Type -AssemblyName System.IO.Compression.FileSystem
86
+ function Unzip {
87
+ param([string]$zipfile, [string]$outpath)
88
+ [System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
89
+ }
90
+
91
+ $(new-object net.webclient).DownloadFile("http://get.enterprisedb.com/postgresql/postgresql-$env:PGVERSION-binaries.zip", "postgresql-binaries.zip")
92
+ Unzip "postgresql-binaries.zip" "."
93
+ echo "$pwd/pgsql/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
94
+ echo "PGUSER=$env:USERNAME" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
95
+ echo "PGPASSWORD=" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
96
+
97
+ - name: Download PostgreSQL Ubuntu
98
+ if: matrix.os == 'ubuntu'
99
+ run: |
100
+ echo "deb http://apt.postgresql.org/pub/repos/apt/ focal-pgdg main $PGVER" | sudo tee -a /etc/apt/sources.list.d/pgdg.list
101
+ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
102
+ sudo apt -y update
103
+ sudo apt -y --allow-downgrades install postgresql-$PGVER libpq5=$PGVER* libpq-dev=$PGVER*
104
+ echo /usr/lib/postgresql/$PGVER/bin >> $GITHUB_PATH
105
+
106
+ - name: Download PostgreSQL Macos
107
+ if: matrix.os == 'macos'
108
+ run: |
109
+ wget https://get.enterprisedb.com/postgresql/postgresql-$PGVERSION-binaries.zip && \
110
+ unzip postgresql-$PGVERSION-binaries.zip && \
111
+ echo `pwd`/pgsql/bin >> $GITHUB_PATH
112
+
113
+ - run: bundle install
114
+
115
+ - run: gem install --local *.gem --verbose
116
+
117
+ - name: Run specs
118
+ continue-on-error: ${{ matrix.ruby == 'truffleruby' }}
119
+ env:
120
+ PG_DEBUG: 0
121
+ run: ruby -rpg -S rspec spec/**/*_spec.rb -cfdoc
122
+
123
+ - name: Print logs if job failed
124
+ if: ${{ failure() && matrix.os == 'windows' }}
125
+ run: ridk exec cat tmp_test_specs/*.log
126
+
127
+ - name: Print logs if job failed
128
+ if: ${{ failure() && matrix.os != 'windows' }}
129
+ run: cat tmp_test_specs/*.log
data/.gitignore ADDED
@@ -0,0 +1,13 @@
1
+ *.lock
2
+ /.test_symlink
3
+ /build/
4
+ /doc/
5
+ /lib/*.bundle
6
+ /lib/*.so
7
+ /lib/2.*/
8
+ /pkg/
9
+ /tmp/
10
+ /tmp_test_specs/
11
+ /vendor/
12
+ /lib/libpq.dll
13
+ /lib/pg/postgresql_lib_path.rb
data/.hgsigs ADDED
@@ -0,0 +1,34 @@
1
+ 872063e42b129af10539f73b3c083ad8a031f961 0 iEYEABECAAYFAkuKoCoACgkQ+zlz4UKpE6QzewCgrFcSsAwju/KpZ8myuWexlcSbe04AmwWCbf4HM95tDXdFvsvzeegPg8AS
2
+ 3993015a841e43c9cd9d1321819cbf5e74264f1d 0 iEYEABECAAYFAkz2ycMACgkQ+zlz4UKpE6SYjQCgi/1Ik2rntK2dU93Hb91wYh0Yv4sAoKxEXVuXaEIAiwB4vSQ/7JQGIBzM
3
+ 230ea3e68db2360548097542c4856dec4c3cd97a 0 iEYEABECAAYFAk03CpAACgkQ+zlz4UKpE6SPAgCfbRwKmAgHTmrudSoC09c37Tuyff0AnRHrSaqKhiCO7KlX5UJq6x0ttoKH
4
+ 24aa7899c6966ce349c8e4f2a87b17c3e943ff56 0 iEYEABECAAYFAk2s1wQACgkQ+zlz4UKpE6SkLQCdHOS5yxoUFguEo885HkDyOZg4Y7wAoMVofhwOUHVQ6djXr0hgAmahI1lW
5
+ 19b551f972e27dcfa281b92914e2a98661243206 0 iEYEABECAAYFAk7f51sACgkQ+zlz4UKpE6RkYACg0WZjt1crbi72DQYs3kYKSYRflNYAnA80+VVwmMUQiWuFuQ+7gbiUPCyY
6
+ f72b14d349bf385c769aacfddbea7a0e60ff5e9e 0 iEYEABECAAYFAk8CFCIACgkQ+zlz4UKpE6QbYACgyLQwHPQH50sGVgzTD3y13XKwi38AoIrF5zSOiMXAeL+sk++iwDYV4ddW
7
+ f3dfdb6929b70ddd3bb952757bdfb199e6916245 0 iEYEABECAAYFAk8Di+MACgkQ+zlz4UKpE6TVvwCg+ibuW22lRdnOIrRF2V4am7b4YxYAn0bDEnP93JX6qKAaU8kcoCrTKDXp
8
+ b67309d3ccf2f9de56535e01f58c7af994426827 0 iEYEABECAAYFAk8iJKkACgkQ+zlz4UKpE6SjUQCgpItY5hW5NyVkfL5+nkRhJqaetQMAoJQQkNPL2jQLgJREfj3PtMBbn2VG
9
+ 0e7f0c2451e55855b4a90efce8db0cafbf04b26f 0 iEYEABECAAYFAk8kb0cACgkQ+zlz4UKpE6RpxgCfQDV3zq2N+zle1XLKoXGMr7EK19IAnR3llz7WPf2j9lqXdZjw4xtl0XBk
10
+ 9c262b875047f9acfedb63396a262ab5a5b101ca 0 iEYEABECAAYFAk80EvkACgkQ+zlz4UKpE6SUHQCeJuJMb8+k8ynIDPSmcKHL/a5gD6AAoPXMns9HF2c3XwtS1CMRf6rcZp3e
11
+ 1ba641824000abbf1b22000772815c24e9b5f6d9 0 iEYEABECAAYFAk84LSUACgkQ+zlz4UKpE6RlPQCgiGZbYJFbeWEAdehVUrIZdU7sRe4AoOgESbvEWynP4X0OKbvdC9rLchYl
12
+ 41e071bdd6ed970887d4ed4da59fdfa62003c39e 0 iEYEABECAAYFAk9FXikACgkQ+zlz4UKpE6TB8ACgt/VSo/kJMg9UVLKd5UUPBPjbgOIAn0DJuOla9GF85mW74sEkCOqE6Ada
13
+ a45710f8db303c400200017242589562936fcf1b 0 iEYEABECAAYFAk/l/kgACgkQ+zlz4UKpE6QCkwCg049BpW4kSvaKuICyvKokeoXbNiAAoPWAaiDuK6xjZhqGSuuGVWMmCRwk
14
+ 52d22b060501ab90a89b3a758aca8ce70ad05231 0 iEYEABECAAYFAlBDfn8ACgkQ+zlz4UKpE6R3GACgzLiZ+fyM4Hx8/Qp9fyWF+mHk4FQAn3P3Y06AHadVvKwyksrAgKk/33LV
15
+ 384fcbc92366ca0108b6c0984d861ffef2d38570 0 iEYEABECAAYFAlFRsM4ACgkQ+zlz4UKpE6TYXgCgksacYvWJ5dhx9oYFRR+oSH6wPgwAoJ3QO01zfiDbBz6Z9Mxy7tNi3jx6
16
+ 0bfb6ff650be2d003af3d0fc6c75be16369605e1 0 iEYEABECAAYFAlFjCYkACgkQ+zlz4UKpE6RldACg77Rp2I4vYUXpFakUrYq6uSfPLLQAn266JL6CiQG44cSroW+Mgz4CZgJn
17
+ 4e0606f5f5aab87855860a3eeaf4c9eaaea77f09 0 iEYEABECAAYFAlHuizwACgkQ+zlz4UKpE6QphACg4FNFwvVju9wk6PC6vwkY8cZRtvkAn1nDR0pbto9xMdMUqhJxOc5Dqisr
18
+ eed93df350a6cc657d5151bd3aa29ab427fba7cc 0 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
data/.hgtags ADDED
@@ -0,0 +1,41 @@
1
+ 7fbe4187e9e53e58baf6cd7c1c21e3a3c5b920e5 0.8.0
2
+ da726282493c57b4ef8e5be1a21e98cc028fda4c 0.9.0
3
+ 1822a169c4fecac402335a64a484b5dc053994a3 0.10.0
4
+ 1822a169c4fecac402335a64a484b5dc053994a3 v0.10.0
5
+ 1822a169c4fecac402335a64a484b5dc053994a3 0.10.0
6
+ 0000000000000000000000000000000000000000 0.10.0
7
+ de10b5d8e4429d22790976ec4de89f209e882906 v0.10.1
8
+ 3cb8e57c6c80737c714dd7607a144ef12074c4fe v0.11.0
9
+ da726282493c57b4ef8e5be1a21e98cc028fda4c v0.9.0
10
+ 7fbe4187e9e53e58baf6cd7c1c21e3a3c5b920e5 v0.8.0
11
+ b767401684d8a4051230874b0686a54537b10e2f v0.12.0
12
+ 21f84883e5c206a3f2890905af68e08a0046ba1c v0.12.1
13
+ 88bd78632f86f696dd3fa8904c1d3180216378cc v0.12.2
14
+ 7b2da7e0815cce834cd60f9747209923952876ec v0.13.0
15
+ 9e60b2c477cde450a088161ca8f3d72b52531aaf v0.13.1
16
+ c79cd308363d614f7ba32fd86294c9aa3117c361 v0.13.2
17
+ 634e0a42a1010fc1dcd279fb28506873a47090c1 v0.14.0
18
+ 2d83ce956f971c3aeb145c9ad68f426e78b852dd v0.14.1
19
+ 065fd1f0e9dda58557de0efb2deb138e93ba7632 v0.15.0
20
+ 4692c20bcbdeadd8a31283e234464c6e1c43765d v0.15.1
21
+ def8f41a76726cf7239ff6dbaa2828a881f93451 v0.16.0
22
+ 30da9c169efc3985ad0464936483c229faba0e33 v0.17.0
23
+ 78846e47d87b7ed5bb7397116070692b1cfa87d7 v0.17.1
24
+ cfb2bfc0f66181e67768c4313bcce473292a0825 v0.18.0
25
+ f97dd6cb4f34da6a62c4339887249115c7c25b9c v0.18.1
26
+ 22a361201fd1d387d59a066b179124694a446f38 v0.18.2
27
+ 01c42c68797e724507b76056b98981cb30748a36 v0.18.3
28
+ 94ef4830540d8fa74b8912118fb8065f4a6a3563 v0.18.4
29
+ 94ef4830540d8fa74b8912118fb8065f4a6a3563 v0.18.4
30
+ 0000000000000000000000000000000000000000 v0.18.4
31
+ 0000000000000000000000000000000000000000 v0.18.4
32
+ f61127650cd00a1154c591dcde85ebac01f2be9f v0.18.4
33
+ bd2aaa2c5797de78435977a1c60e450d6f22811b v0.19.0
34
+ e5eb92cca97abc0c6fc168acfad993c2ad314589 v0.20.0
35
+ deae742eacfa985bd20f47a12a8fee6ce2e0447c v0.21.0
36
+ 9a388d1023ec145cb00e6e16f3a8cabd3cc81d16 v1.0.0
37
+ 319c00d9d59e24ce06493715cff2701e3a2a8990 v1.1.0
38
+ c80083c5e395451d612d43323c40317eb63bcb54 v1.1.1
39
+ f54d10c5d98fd06d6fc70896107319901ae374ae v1.1.2
40
+ c7035371f972982c1716daf61861b9dde15de03e v1.1.3
41
+ 11d3487e303cf0fc6af48086f3e9c0b1c8283039 v1.1.4
data/.irbrc ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/ruby -*- ruby -*-
2
+
3
+ BEGIN {
4
+ require 'pathname'
5
+ require 'rbconfig'
6
+
7
+ basedir = Pathname.new( __FILE__ ).dirname.expand_path
8
+ libdir = basedir + "lib"
9
+
10
+ puts ">>> Adding #{libdir} to load path..."
11
+ $LOAD_PATH.unshift( libdir.to_s )
12
+ }
13
+
14
+
15
+ # Try to require the 'pg' library
16
+ begin
17
+ $stderr.puts "Loading pg..."
18
+ require 'pg'
19
+ rescue => e
20
+ $stderr.puts "Ack! pg library failed to load: #{e.message}\n\t" +
21
+ e.backtrace.join( "\n\t" )
22
+ end
23
+
data/.pryrc ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/ruby -*- ruby -*-
2
+
3
+ BEGIN {
4
+ require 'pathname'
5
+ require 'rbconfig'
6
+
7
+ basedir = Pathname.new( __FILE__ ).dirname.expand_path
8
+ libdir = basedir + "lib"
9
+
10
+ puts ">>> Adding #{libdir} to load path..."
11
+ $LOAD_PATH.unshift( libdir.to_s )
12
+ }
13
+
14
+
15
+ # Try to require the 'pg' library
16
+ begin
17
+ $stderr.puts "Loading pg..."
18
+ require 'pg'
19
+ rescue => e
20
+ $stderr.puts "Ack! pg library failed to load: #{e.message}\n\t" +
21
+ e.backtrace.join( "\n\t" )
22
+ end
23
+
data/.tm_properties ADDED
@@ -0,0 +1,21 @@
1
+ # Settings
2
+ projectDirectory = "$CWD"
3
+ windowTitle = "${CWD/^.*\///} «$TM_DISPLAYNAME»"
4
+ excludeInFileChooser = {$exclude,.hg}
5
+ exclude = {$exclude,tmp,tmp_test_specs}
6
+
7
+ TM_MAKE = 'rake'
8
+ TM_MAKE_FILE = '${projectDirectory}/Rakefile'
9
+
10
+ [ source ]
11
+ softTabs = false
12
+ tabSize = 4
13
+
14
+ [ source.ruby ]
15
+ softTabs = false
16
+ tabSize = 4
17
+
18
+ [ source.ruby.rspec ]
19
+ softTabs = false
20
+ tabSize = 4
21
+
data/.travis.yml ADDED
@@ -0,0 +1,49 @@
1
+ sudo: required
2
+ dist: focal
3
+ services:
4
+ - docker
5
+ language: ruby
6
+ matrix:
7
+ include:
8
+ # i386: Intel 32-bit
9
+ - name: i386
10
+
11
+ language: generic
12
+ env:
13
+ - PGPATH="/usr/lib/postgresql/10/bin"
14
+ before_install: |
15
+ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes &&
16
+ docker build --rm --build-arg PGPATH="${PGPATH}" -t ruby-pg -f spec/env/Dockerfile.i386 .
17
+ script: |
18
+ docker run --rm -t --network=host ruby-pg
19
+
20
+ - rvm: "2.5"
21
+ env:
22
+ - "PGVERSION=9.3"
23
+ # Use Ubuntu-16.04 since postgresql-9.3 depends on openssl-1.0.0, which isn't available in 20.04
24
+ dist: xenial
25
+ - rvm: ruby-head
26
+ env:
27
+ - "PGVERSION=14"
28
+ - rvm: truffleruby
29
+ env:
30
+ - "PGVERSION=14"
31
+
32
+ allow_failures:
33
+ - rvm: ruby-head
34
+ fast_finish: true
35
+
36
+ before_install:
37
+ - bundle install
38
+ # Download and install postgresql version to test against in /opt (for non-cross compile only)
39
+ - echo "deb http://apt.postgresql.org/pub/repos/apt/ ${TRAVIS_DIST}-pgdg main $PGVERSION" | sudo tee -a /etc/apt/sources.list.d/pgdg.list
40
+ - wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
41
+ - sudo apt -y update
42
+ - sudo apt -y --allow-downgrades install postgresql-$PGVERSION libpq5=$PGVERSION* libpq-dev=$PGVERSION*
43
+ - export PATH=/usr/lib/postgresql/$PGVERSION/bin:$PATH
44
+
45
+ script:
46
+ - bundle exec rake compile test PG_DEBUG=0
47
+
48
+ after_failure:
49
+ - "find tmp -name mkmf.log | xargs cat"
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ # -*- ruby -*-
2
+
3
+ # Specify your gem's runtime dependencies in pg.gemspec
4
+ gemspec
5
+
6
+ source "https://rubygems.org/"
7
+
8
+ group :development, :test do
9
+ gem "bundler", ">= 1.16", "< 3.0"
10
+ gem "rake-compiler", "~> 1.0"
11
+ gem "rake-compiler-dock", "~> 1.0"
12
+ gem "rdoc", "~> 5.1"
13
+ gem "rspec", "~> 3.5"
14
+ end
data/History.rdoc CHANGED
@@ -1,3 +1,94 @@
1
+ == v1.3.0 [YYY-MM-DD] Michael Granger <ged@FaerieMUD.org>
2
+
3
+ Install Enhancements:
4
+ - Print some install help if libpq wasn't found. #396
5
+ This should help to pick the necessary package without googling.
6
+ - Update Windows fat binary gem to OpenSSL-1.1.1l and PostgreSQL-14.0.
7
+ - Add a binary gem for Ruby 3.0.
8
+ - Make the library path of libpq available in ruby as PG::POSTGRESQL_LIB_PATH and add it to the search paths on Windows similar to +rpath+ on Unix systems. #373
9
+ - Fall back to pkg-config if pg_config is not found. #380
10
+ - Add option to extconf.rb to disable nogvl-wrapping of libpq functions.
11
+ All methods (except PG::Connection.ping) are nonblocking now, so that GVL unlock is in theory no longer necessary.
12
+ However it can have some advantage in concurrency, so that GVL unlock is still enabled by default.
13
+ Use:
14
+ - gem inst pg -- --disable-gvl-unlock
15
+
16
+ API Enhancements:
17
+ - Add full compatibility to Fiber.scheduler introduced in Ruby-3.0. #397
18
+ - Add async_connect and async_send methods and add specific specs for Fiber.scheduler #342
19
+ - Add async_get_result and async_get_last_result
20
+ - Add async_get_copy_data
21
+ - Implement async_put_copy_data/async_put_copy_end
22
+ - Implement async_reset method using the nonblocking libpq API
23
+ - Add async_set_client_encoding which is compatible to scheduler
24
+ - Add async_cancel as a nonblocking version of conn#cancel
25
+ - Add async_encrypt_password
26
+ - Run Connection.ping in a second thread.
27
+ - Make discard_results scheduler friendly
28
+ - Do all socket waiting through the conn.socket_io object.
29
+ - Avoid PG.connect blocking while address resolution by automatically providing the +hostaddr+ parameter.
30
+ - Add support for pipeline mode of PostgreSQL-14. #401
31
+ - Allow specification of multiple hosts in PostgreSQL URI. #387
32
+ - Add new method conn.backend_key - used to implement our own cancel method.
33
+
34
+ Type cast enhancements:
35
+ - Add PG::BasicTypeMapForQueries::BinaryData for encoding of bytea columns. #348
36
+ - Reduce time to build coder maps and permit to reuse them for several type maps per PG::BasicTypeRegistry::CoderMapsBundle.new(conn) . #376
37
+ - Make BasicTypeRegistry a class and use a global default instance of it.
38
+ Now a local type registry can be instanciated and given to the type map, to avoid changing shared global states.
39
+ - Allow PG::BasicTypeMapForQueries to take a Proc as callback for undefined types.
40
+
41
+ Other Enhancements:
42
+ - Convert all PG classes implemented in C to TypedData objects. #349
43
+ - Support ObjectSpace.memsize_of(obj) on all classes implemented in C. #393
44
+ - Make all PG objects implemented in C memory moveable and therefore GC.compact friendly. #349
45
+ - Update errorcodes and error classes to PostgreSQL-14.0.
46
+ - Add better support for logical replication. #339
47
+ - Change conn.socket_io to read+write mode and to a BasicSocket object instead of IO.
48
+ - Use rb_io_wait() and the conn.socket_io object if available and remove Windows specific wait functions.
49
+ Fall back to rb_wait_for_single_fd() on ruby < 3.0, which works on Windows as well.
50
+
51
+ Bugfixes:
52
+ - Release GVL while calling PQping which is a blocking method, but it didn't release GVL so far.
53
+ - Fix Connection#transaction to no longer block on interrupts, for instance when pressing Ctrl-C and cancel a running query. #390
54
+ - Avoid casting of OIDs to fix compat with Redshift database. #369
55
+ - Call conn.block before each conn.get_result call to avoid possible blocking in case of a slow network and multiple query results.
56
+
57
+ Deprecated:
58
+ - Add deprecation warning to PG::BasicTypeRegistry.register_type and siblings.
59
+
60
+ Removed:
61
+ - Remove support of ruby-2.2, 2.3 and 2.4. Minimum is ruby-2.5 now.
62
+ - Remove support for PostgreSQL-9.2. Minimum is PostgreSQL-9.3 now.
63
+
64
+ Repository:
65
+ - Replace Hoe by Bundler for gem packaging
66
+ - Add Github Actions CI and testing of source and binary gems.
67
+
68
+
69
+ == v1.2.3 [2020-03-18] Michael Granger <ged@FaerieMUD.org>
70
+
71
+ Bugfixes:
72
+
73
+ - Fix possible segfault at `PG::Coder#encode`, `decode` or their implicit calls through
74
+ a typemap after GC.compact. #327
75
+ - Fix possible segfault in `PG::TypeMapByClass` after GC.compact. #328
76
+
77
+
78
+ == v1.2.2 [2020-01-06] Michael Granger <ged@FaerieMUD.org>
79
+
80
+ Enhancements:
81
+
82
+ - Add a binary gem for Ruby 2.7.
83
+
84
+
85
+ == v1.2.1 [2020-01-02] Michael Granger <ged@FaerieMUD.org>
86
+
87
+ Enhancements:
88
+
89
+ - Added internal API for sequel_pg compatibility.
90
+
91
+
1
92
  == v1.2.0 [2019-12-20] Michael Granger <ged@FaerieMUD.org>
2
93
 
3
94
  Repository:
@@ -31,7 +122,7 @@ Other enhancements:
31
122
  - Improve performance of PG::Result#stream_each_tuple .
32
123
  - Store client encoding in data part of PG::Connection and PG::Result objects, so that we no longer use ruby's internal encoding bits. #280
33
124
  - Update Windows fat binary gem to OpenSSL-1.1.1d and PostgreSQL-12.1.
34
- - Add support for TruffleRuby. It is regulary tested as part of our CI.
125
+ - Add support for TruffleRuby. It is regularly tested as part of our CI.
35
126
  - Enable +frozen_string_literal+ in all pg's ruby files
36
127
 
37
128
  Bugfixes:
@@ -94,10 +185,10 @@ Deprecated (disable warnings per PG_SKIP_DEPRECATION_WARNING=1):
94
185
  - Forwarding conn.async_exec_params to conn.async_exec is deprecated.
95
186
 
96
187
  PG::Connection enhancements:
97
- - Provide PG::Connection#sync_* and PG::Connection#async_* query methods for explicit calling syncronous or asynchronous libpq API.
188
+ - Provide PG::Connection#sync_* and PG::Connection#async_* query methods for explicit calling synchronous or asynchronous libpq API.
98
189
  - Make PG::Connection#exec and siblings switchable between sync and async API per PG::Connection.async_api= and change the default to async flavors.
99
190
  - Add async flavors of exec_params, prepare, exec_prepared, describe_prepared and describe_portal.
100
- They are identical to their syncronous counterpart, but make use of PostgreSQL's async API.
191
+ They are identical to their synchronous counterpart, but make use of PostgreSQL's async API.
101
192
  - Replace `rb_thread_fd_select()` by faster `rb_wait_for_single_fd()` in `conn.block` and `conn.async_exec` .
102
193
  - Add PG::Connection#discard_results .
103
194
  - Raise an ArgumentError for strings containing zero bytes by #escape, #escape_literal, #escape_identifier, #quote_ident and PG::TextEncoder::Identifier. These methods previously truncated strings.
@@ -252,7 +343,7 @@ Bugfixes:
252
343
  - Revert addition of PG::Connection#hostaddr [#202].
253
344
  - Fix decoding of fractional timezones and timestamps [#203]
254
345
  - Fixes for non-C99 compilers
255
- - Avoid possible symbol name clash when linking againt static libpq.
346
+ - Avoid possible symbol name clash when linking against static libpq.
256
347
 
257
348
 
258
349
  == v0.18.1 [2015-01-05] Michael Granger <ged@FaerieMUD.org>
@@ -288,7 +379,7 @@ Enhancements:
288
379
  Bugfixes:
289
380
 
290
381
  - Fix compatibility with signal handlers defined in Ruby. This reverts
291
- cancelation of queries running on top of the blocking libpq API (like
382
+ cancellation of queries running on top of the blocking libpq API (like
292
383
  Connection#exec) in case of signals. As an alternative the #async_exec
293
384
  can be used, which is reverted to use the non-blocking API, again.
294
385
  - Wrap PQcancel to be called without GVL. It internally waits for
@@ -366,7 +457,7 @@ Enhancements:
366
457
 
367
458
  - Tested under Ruby 2.0.0p0.
368
459
  - Add single row mode of PostgreSQL 9.2.
369
- - Set fallback_application_name to programm name $0. Thanks to Will Leinweber
460
+ - Set fallback_application_name to program name $0. Thanks to Will Leinweber
370
461
  for the patch.
371
462
  - Release Ruby's GVL while calls to blocking libpq functions to allow better
372
463
  concurrency in threaded applications.
@@ -374,7 +465,7 @@ Enhancements:
374
465
  - Make use of rb_thread_fd_select() on Ruby 1.9 and avoid deprecated
375
466
  rb_thread_select().
376
467
  - Add an example of how to insert array data using a prepared statement (#145).
377
- - Add continous integration tests on travis-ci.org.
468
+ - Add continuous integration tests on travis-ci.org.
378
469
  - Add PG::Result#each_row for iterative over result sets by row. Thanks to
379
470
  Aaron Patterson for the patch.
380
471
  - Add a PG::Connection#socket_io method for fetching a (non-autoclosing) IO