activerecord-sqlserver-adapter 7.1.1 → 7.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.devcontainer/Dockerfile +30 -0
- data/.devcontainer/boot.sh +22 -0
- data/.devcontainer/devcontainer.json +38 -0
- data/.devcontainer/docker-compose.yml +37 -0
- data/CHANGELOG.md +6 -0
- data/README.md +42 -4
- data/RUNNING_UNIT_TESTS.md +3 -4
- data/VERSION +1 -1
- data/lib/active_record/connection_adapters/sqlserver/core_ext/preloader.rb +2 -0
- data/lib/arel/visitors/sqlserver.rb +4 -5
- data/test/cases/fetch_test_sqlserver.rb +19 -0
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3a248aa6570f730031990568b0f9efb68b92995fd218e43e03d806192756e29
|
4
|
+
data.tar.gz: a6c68a2c9320d5c510cb223fa6d175946e099503a42e4f3d40cb4c39cda386c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34ac63c0508d2874b4e9b535688138749472ed6817ace45ffa887c7fb0b40739d276da48a6f4962e12ae6f1e8547fc66d004740e8cbdf77f745386b060456111
|
7
|
+
data.tar.gz: 46c1c6351facef6559cdaacf9e7f6ab99b6e788a73e2d7701b72de6d957c680270b1e774fffdcf1ab7e9af1a4616de17e0a8ac3f9745b9792b4ee0c521485df6
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.191.1/containers/ruby/.devcontainer/base.Dockerfile
|
2
|
+
|
3
|
+
# [Choice] Ruby version: 3, 3.0, 2, 2.7, 2.6
|
4
|
+
ARG VARIANT="3"
|
5
|
+
FROM mcr.microsoft.com/devcontainers/ruby:${VARIANT}
|
6
|
+
|
7
|
+
# TinyTDS
|
8
|
+
RUN apt-get -y install libc6-dev \
|
9
|
+
&& wget http://www.freetds.org/files/stable/freetds-1.1.32.tar.gz \
|
10
|
+
&& tar -xzf freetds-1.1.32.tar.gz \
|
11
|
+
&& cd freetds-1.1.32 \
|
12
|
+
&& ./configure --prefix=/usr/local --with-tdsver=7.3 \
|
13
|
+
&& make \
|
14
|
+
&& make install
|
15
|
+
|
16
|
+
# Install the SQL Server command-line tools
|
17
|
+
RUN curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc \
|
18
|
+
&& curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list \
|
19
|
+
&& apt-get update \
|
20
|
+
&& ACCEPT_EULA=Y apt-get install -y mssql-tools18 unixodbc-dev \
|
21
|
+
&& echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc \
|
22
|
+
&& echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> /root/.bashrc
|
23
|
+
|
24
|
+
# Add the SQL Server main Gemfile and install the gems.
|
25
|
+
RUN mkdir -p /tmp/activerecord-sqlserver-adapter
|
26
|
+
COPY Gemfile VERSION activerecord-sqlserver-adapter.gemspec /tmp/activerecord-sqlserver-adapter/
|
27
|
+
RUN cd /tmp/activerecord-sqlserver-adapter \
|
28
|
+
&& bundle install \
|
29
|
+
&& rm -rf /tmp/activerecord-sqlserver-adapter
|
30
|
+
RUN chown -R vscode:vscode /usr/local/rvm
|
@@ -0,0 +1,22 @@
|
|
1
|
+
sudo chown -R vscode:vscode /usr/local/bundle
|
2
|
+
|
3
|
+
# Wait for 5 seconds to make sure SQL Server came up.
|
4
|
+
sleep 5
|
5
|
+
|
6
|
+
# Setup test databases and users.
|
7
|
+
/opt/mssql-tools18/bin/sqlcmd -C -S sqlserver -U sa -P "MSSQLadmin!" <<SQL
|
8
|
+
CREATE DATABASE [activerecord_unittest];
|
9
|
+
CREATE DATABASE [activerecord_unittest2];
|
10
|
+
GO
|
11
|
+
CREATE LOGIN [rails] WITH PASSWORD = '', CHECK_POLICY = OFF, DEFAULT_DATABASE = [activerecord_unittest];
|
12
|
+
GO
|
13
|
+
USE [activerecord_unittest];
|
14
|
+
CREATE USER [rails] FOR LOGIN [rails];
|
15
|
+
GO
|
16
|
+
EXEC sp_addrolemember N'db_owner', N'rails';
|
17
|
+
EXEC master..sp_addsrvrolemember @loginame = N'rails', @rolename = N'sysadmin';
|
18
|
+
GO
|
19
|
+
SQL
|
20
|
+
|
21
|
+
# Mark directory as safe in Git so that commands run without warnings.
|
22
|
+
git config --global --add safe.directory /workspaces/activerecord-sqlserver-adapter
|
@@ -0,0 +1,38 @@
|
|
1
|
+
// For format details, see https://aka.ms/devcontainer.json.
|
2
|
+
{
|
3
|
+
"name": "ActiveRecord SQL Server Adapter project development",
|
4
|
+
"dockerComposeFile": "docker-compose.yml",
|
5
|
+
"service": "activerecord-sqlserver-adapter",
|
6
|
+
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
|
7
|
+
|
8
|
+
// Features to add to the dev container. More info: https://containers.dev/features.
|
9
|
+
"features": {
|
10
|
+
"ghcr.io/devcontainers/features/github-cli:1": {
|
11
|
+
"version": "latest"
|
12
|
+
}
|
13
|
+
},
|
14
|
+
|
15
|
+
"containerEnv": {
|
16
|
+
"ACTIVERECORD_UNITTEST_HOST": "sqlserver"
|
17
|
+
},
|
18
|
+
|
19
|
+
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
20
|
+
// This can be used to network with other containers or the host.
|
21
|
+
// "forwardPorts": [3000, 5432],
|
22
|
+
|
23
|
+
// Use 'postCreateCommand' to run commands after the container is created.
|
24
|
+
"postCreateCommand": ".devcontainer/boot.sh",
|
25
|
+
|
26
|
+
// Configure tool-specific properties.
|
27
|
+
"customizations": {
|
28
|
+
"vscode": {
|
29
|
+
// Add the IDs of extensions you want installed when the container is created.
|
30
|
+
"extensions": [
|
31
|
+
"Shopify.ruby-lsp"
|
32
|
+
]
|
33
|
+
}
|
34
|
+
},
|
35
|
+
|
36
|
+
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
|
37
|
+
// "remoteUser": "root"
|
38
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
version: '3'
|
2
|
+
|
3
|
+
services:
|
4
|
+
activerecord-sqlserver-adapter:
|
5
|
+
build:
|
6
|
+
context: ..
|
7
|
+
dockerfile: .devcontainer/Dockerfile
|
8
|
+
|
9
|
+
volumes:
|
10
|
+
- ../..:/workspaces:cached
|
11
|
+
|
12
|
+
# Overrides default command so things don't shut down after the process ends.
|
13
|
+
command: sleep infinity
|
14
|
+
|
15
|
+
# Runs app on the same network as the database container, allows "forwardPorts" in devcontainer.json function.
|
16
|
+
networks:
|
17
|
+
- default
|
18
|
+
|
19
|
+
depends_on:
|
20
|
+
- sqlserver
|
21
|
+
|
22
|
+
# Use "forwardPorts" in **devcontainer.json** to forward an app port locally.
|
23
|
+
# (Adding the "ports" property to this file will not forward from a Codespace.)
|
24
|
+
|
25
|
+
sqlserver:
|
26
|
+
image: mcr.microsoft.com/mssql/server:2022-latest
|
27
|
+
restart: unless-stopped
|
28
|
+
networks:
|
29
|
+
- default
|
30
|
+
ports:
|
31
|
+
- "1433:1433"
|
32
|
+
environment:
|
33
|
+
MSSQL_SA_PASSWORD: MSSQLadmin!
|
34
|
+
ACCEPT_EULA: Y
|
35
|
+
|
36
|
+
networks:
|
37
|
+
default:
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -13,7 +13,7 @@ Interested in older versions? We follow a rational versioning policy that tracks
|
|
13
13
|
|
14
14
|
| Adapter Version | Rails Version | Support | Branch |
|
15
15
|
|-----------------|---------------|---------|--------------------------------------------------------------------------------------------------|
|
16
|
-
| `7.1.
|
16
|
+
| `7.1.2` | `7.1.x` | Active | [main](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/main) |
|
17
17
|
| `7.0.5.1` | `7.0.x` | Active | [7-0-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/7-0-stable) |
|
18
18
|
| `6.1.3.0` | `6.1.x` | Active | [6-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/6-1-stable) |
|
19
19
|
| `6.0.3` | `6.0.x` | Ended | [6-0-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/6-0-stable) |
|
@@ -183,11 +183,49 @@ gem 'activerecord-sqlserver-adapter'
|
|
183
183
|
|
184
184
|
## Contributing
|
185
185
|
|
186
|
-
|
186
|
+
Please contribute to the project by submitting bug fixes and features. To make sure your fix/feature has
|
187
|
+
a high chance of being added, please include tests in your pull request. To run the tests you will need to
|
188
|
+
setup your development environment.
|
187
189
|
|
188
|
-
|
189
|
-
* Gitter: https://gitter.im/rails-sqlserver/activerecord-sqlserver-adapter
|
190
|
+
## Setting Up Your Development Environment
|
190
191
|
|
192
|
+
To run the test suite you can use any of the following methods below. See [RUNNING_UNIT_TESTS](RUNNING_UNIT_TESTS.md) for
|
193
|
+
more detailed information on running unit tests.
|
194
|
+
|
195
|
+
### Dev Container CLI
|
196
|
+
|
197
|
+
With [Docker](https://www.docker.com) and [npm](https://github.com/npm/cli) installed, you can run [Dev Container CLI](https://github.com/devcontainers/cli) to
|
198
|
+
utilize the [`.devcontainer`](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/main/.devcontainer) configuration from the command line.
|
199
|
+
|
200
|
+
```bash
|
201
|
+
$ npm install -g @devcontainers/cli
|
202
|
+
$ cd rails
|
203
|
+
$ devcontainer up --workspace-folder .
|
204
|
+
$ devcontainer exec --workspace-folder . bash
|
205
|
+
```
|
206
|
+
|
207
|
+
From within the container, you can run the tests using the following command:
|
208
|
+
|
209
|
+
```bash
|
210
|
+
$ bundle install
|
211
|
+
$ bundle exec rake test
|
212
|
+
```
|
213
|
+
|
214
|
+
_Note: The setup we use is based on the [Rails Dev Container setup.](https://guides.rubyonrails.org/contributing_to_ruby_on_rails.html#using-dev-container-cli)_
|
215
|
+
|
216
|
+
### VirtualBox & Vagrant
|
217
|
+
|
218
|
+
The [activerecord-sqlserver-adapter-dev-box](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter-dev-box)
|
219
|
+
is a Vagrant/VirtualBox virtual machine that has MS SQL Server installed. However, the
|
220
|
+
activerecord-sqlserver-adapter-dev-box uses Vagrant and Virtual Box which will not work on Macs with Apple silicon.
|
221
|
+
|
222
|
+
### Local Development
|
223
|
+
|
224
|
+
See the [RUNNING_UNIT_TESTS](RUNNING_UNIT_TESTS.md) file for the details of how to run the unit tests locally.
|
225
|
+
|
226
|
+
## Community
|
227
|
+
|
228
|
+
There is a [Gitter channel](https://gitter.im/rails-sqlserver/activerecord-sqlserver-adapter) for the project where you are free to ask questions about the project.
|
191
229
|
|
192
230
|
## Credits & Contributions
|
193
231
|
|
data/RUNNING_UNIT_TESTS.md
CHANGED
@@ -1,9 +1,8 @@
|
|
1
|
+
# How To Run The Tests Locally
|
1
2
|
|
2
|
-
|
3
|
+
The following is a description of how to run the tests for the SQL Server adapter on a local environment.
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
## MS SQL SERVER
|
5
|
+
## MS SQL Server instance
|
7
6
|
|
8
7
|
If you don't have easy access to MS SQL Server, you can set up a Vagrant/VirtualBox virtual machine with MS SQL Server. [Here's how](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter-dev-box).
|
9
8
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
7.1.
|
1
|
+
7.1.2
|
@@ -213,7 +213,7 @@ module Arel
|
|
213
213
|
|
214
214
|
def visit_Orders_And_Let_Fetch_Happen(o, collector)
|
215
215
|
make_Fetch_Possible_And_Deterministic o
|
216
|
-
|
216
|
+
if o.orders.any?
|
217
217
|
collector << " ORDER BY "
|
218
218
|
len = o.orders.length - 1
|
219
219
|
o.orders.each_with_index { |x, i|
|
@@ -261,15 +261,14 @@ module Arel
|
|
261
261
|
|
262
262
|
def make_Fetch_Possible_And_Deterministic(o)
|
263
263
|
return if o.limit.nil? && o.offset.nil?
|
264
|
+
return if o.orders.any?
|
264
265
|
|
265
266
|
t = table_From_Statement o
|
266
267
|
pk = primary_Key_From_Table t
|
267
268
|
return unless pk
|
268
269
|
|
269
|
-
|
270
|
-
|
271
|
-
o.orders = [pk.asc]
|
272
|
-
end
|
270
|
+
# Prefer deterministic vs a simple `(SELECT NULL)` expr.
|
271
|
+
o.orders = [pk.asc]
|
273
272
|
end
|
274
273
|
|
275
274
|
def distinct_One_As_One_Is_So_Not_Fetch(o)
|
@@ -42,6 +42,25 @@ class FetchTestSqlserver < ActiveRecord::TestCase
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
+
describe "FROM subquery" do
|
46
|
+
let(:from_sql) { "(SELECT [books].* FROM [books]) [books]" }
|
47
|
+
|
48
|
+
it "SQL generated correctly for FROM subquery if order provided" do
|
49
|
+
query = Book.from(from_sql).order(:id).limit(5)
|
50
|
+
|
51
|
+
assert_equal query.to_sql, "SELECT [books].* FROM (SELECT [books].* FROM [books]) [books] ORDER BY [books].[id] ASC OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY"
|
52
|
+
assert_equal query.to_a.count, 5
|
53
|
+
end
|
54
|
+
|
55
|
+
it "exception thrown if FROM subquery is provided without an order" do
|
56
|
+
query = Book.from(from_sql).limit(5)
|
57
|
+
|
58
|
+
assert_raise(ActiveRecord::StatementInvalid) do
|
59
|
+
query.to_sql
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
45
64
|
protected
|
46
65
|
|
47
66
|
def create_10_books
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-sqlserver-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.1.
|
4
|
+
version: 7.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ken Collins
|
@@ -15,7 +15,7 @@ authors:
|
|
15
15
|
autorequire:
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
|
-
date: 2024-01-
|
18
|
+
date: 2024-01-23 00:00:00.000000000 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: activerecord
|
@@ -53,6 +53,10 @@ executables: []
|
|
53
53
|
extensions: []
|
54
54
|
extra_rdoc_files: []
|
55
55
|
files:
|
56
|
+
- ".devcontainer/Dockerfile"
|
57
|
+
- ".devcontainer/boot.sh"
|
58
|
+
- ".devcontainer/devcontainer.json"
|
59
|
+
- ".devcontainer/docker-compose.yml"
|
56
60
|
- ".editorconfig"
|
57
61
|
- ".github/issue_template.md"
|
58
62
|
- ".github/workflows/ci.yml"
|
@@ -235,8 +239,8 @@ licenses:
|
|
235
239
|
- MIT
|
236
240
|
metadata:
|
237
241
|
bug_tracker_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/issues
|
238
|
-
changelog_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/v7.1.
|
239
|
-
source_code_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/v7.1.
|
242
|
+
changelog_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/v7.1.2/CHANGELOG.md
|
243
|
+
source_code_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/v7.1.2
|
240
244
|
post_install_message:
|
241
245
|
rdoc_options: []
|
242
246
|
require_paths:
|