mrubyudf 0.1.0 → 0.2.0
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.
- checksums.yaml +4 -4
- data/README.md +26 -36
- data/example/fib.rb +5 -10
- data/lib/mrubyudf/version.rb +1 -1
- data/misc/shared.rb +12 -0
- metadata +4 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d3fee141a77cfae7d1e17ef5ca2db7bd30c39370356b4bf8834b9182b54e2894
|
|
4
|
+
data.tar.gz: c13b8c2d6ef29d3aed91b98951f0ea945945a8f1ae37facce2802dde5e292ac7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ea9bb25e910aa1cbd6c886992309d429b8ee53925af72c301b425f16f62cfcb84a23766a262ad49cb294a8d25afc2ba85b06bbe7807becbd4d02fb8a5541c1cd
|
|
7
|
+
data.tar.gz: 1dad8b1f783d89d67174df3a8992ebcd9ab17a60e70170025e1a0aec7a0d71988044e81f91118d6f7b0ef66254eb8f4cdefaaa23a9533184b213a9e815450b88
|
data/README.md
CHANGED
|
@@ -12,60 +12,52 @@
|
|
|
12
12
|
|
|
13
13
|
mysql_config コマンドと MySQL のヘッダファイルが必要です。
|
|
14
14
|
|
|
15
|
-
mysql-8.
|
|
15
|
+
mysql-8.4.2-linux-glibc2.28-x86_64.tar.xz みたいなファイルを展開した中には入ってるはずです。
|
|
16
16
|
|
|
17
17
|
それ以外の場合は MySQL 開発環境のインストールが必要になるかも知れません。
|
|
18
18
|
Ubuntu の場合は libmysqlclient-dev パッケージをインストールすればいいと思います。
|
|
19
19
|
|
|
20
20
|
## 使い方
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
まず mruby をインストールする必要があります。mruby を動的リンクにするためのパッチをあてて make します。
|
|
22
|
+
まず mruby をインストールする必要があります。mruby を動的リンクにするため config を指定して make します。
|
|
24
23
|
|
|
25
24
|
```sh
|
|
26
25
|
% git clone git@github.com:mruby/mruby.git
|
|
27
26
|
% cd mruby
|
|
28
|
-
%
|
|
29
|
-
% make
|
|
27
|
+
% MRUBY_CONFIG=$GEM_HOME/gems/mrubyudf-0.2.0/misc/shared.rb make
|
|
30
28
|
```
|
|
31
29
|
|
|
32
30
|
うまくいかない場合は頑張ってください。
|
|
33
31
|
|
|
34
|
-
この mruby ディレクトリを MRUBY_PATH
|
|
32
|
+
この mruby ディレクトリを MRUBY_PATH 変数に設定しておきます。
|
|
35
33
|
|
|
36
34
|
```sh
|
|
37
|
-
%
|
|
35
|
+
% MRUBY_PATH=$(pwd)/bin
|
|
38
36
|
```
|
|
39
37
|
|
|
40
38
|
関数本体を作ります。ここではフィボナッチ数を返す fib() 関数を fib.rb ファイルとして作ります。
|
|
41
39
|
|
|
42
40
|
```ruby
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
FIXNUM_MAX = 2**62-1
|
|
45
42
|
def fib(n)
|
|
46
|
-
b = 1
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
c = a + b
|
|
51
|
-
raise 'Overflow' if c > LONG_LONG_MAX
|
|
52
|
-
end
|
|
53
|
-
c
|
|
43
|
+
a, b = 1, 0
|
|
44
|
+
n.times { a, b = b, a + b }
|
|
45
|
+
raise 'Overflow' if b > FIXNUM_MAX
|
|
46
|
+
b
|
|
54
47
|
end
|
|
55
48
|
```
|
|
56
49
|
|
|
57
50
|
mruby で実行して動きを確かめます。
|
|
58
51
|
|
|
59
52
|
```sh
|
|
60
|
-
% $MRUBY_PATH/
|
|
53
|
+
% $MRUBY_PATH/mruby -r ./fib.rb -e 'p fib(10)'
|
|
61
54
|
55
|
|
62
|
-
% $MRUBY_PATH/
|
|
63
|
-
|
|
64
|
-
% $MRUBY_PATH/
|
|
55
|
+
% $MRUBY_PATH/mruby -r ./fib.rb -e 'p fib(90)'
|
|
56
|
+
2880067194370816120
|
|
57
|
+
% $MRUBY_PATH/mruby -r ./fib.rb -e 'p fib(91)'
|
|
65
58
|
trace (most recent call last):
|
|
66
|
-
[
|
|
67
|
-
|
|
68
|
-
-e:9:in fib: Overflow (RuntimeError)
|
|
59
|
+
[1] -e:1
|
|
60
|
+
./fib.rb:5:in fib: Overflow (RuntimeError)
|
|
69
61
|
```
|
|
70
62
|
|
|
71
63
|
関数名、戻り値の型、引数の型等の情報を fib.spec ファイルで次のような感じで作ります。
|
|
@@ -83,7 +75,7 @@ end
|
|
|
83
75
|
コンパイル。
|
|
84
76
|
|
|
85
77
|
```sh
|
|
86
|
-
% mrubyudf fib.spec
|
|
78
|
+
% PATH=$MRUBY_PATH:$PATH mrubyudf fib.spec
|
|
87
79
|
```
|
|
88
80
|
|
|
89
81
|
うまくいけば fib.so ファイルができます。
|
|
@@ -91,9 +83,7 @@ end
|
|
|
91
83
|
これを MySQL のプラグインディレクトリにコピーします。
|
|
92
84
|
|
|
93
85
|
```sh
|
|
94
|
-
% mysql_config --plugindir
|
|
95
|
-
/usr/local/mysql/lib/plugin
|
|
96
|
-
% sudo cp fib.so /usr/local/mysql/lib/plugin/
|
|
86
|
+
% sudo cp fib.so $(mysql_config --plugindir)
|
|
97
87
|
```
|
|
98
88
|
|
|
99
89
|
MySQL に組み込みます。一度やっておけば mysqld を再起動しても自動的に組み込まれます。
|
|
@@ -112,23 +102,23 @@ mysql> select fib(10);
|
|
|
112
102
|
+---------+
|
|
113
103
|
| 55 |
|
|
114
104
|
+---------+
|
|
115
|
-
1 row in set (0.
|
|
105
|
+
1 row in set (0.01 sec)
|
|
116
106
|
|
|
117
|
-
mysql> select fib(
|
|
107
|
+
mysql> select fib(90);
|
|
118
108
|
+---------------------+
|
|
119
|
-
| fib(
|
|
109
|
+
| fib(90) |
|
|
120
110
|
+---------------------+
|
|
121
|
-
|
|
|
111
|
+
| 2880067194370816120 |
|
|
122
112
|
+---------------------+
|
|
123
|
-
1 row in set (0.
|
|
113
|
+
1 row in set (0.01 sec)
|
|
124
114
|
|
|
125
|
-
mysql> select fib(
|
|
115
|
+
mysql> select fib(91);
|
|
126
116
|
+---------+
|
|
127
|
-
| fib(
|
|
117
|
+
| fib(91) |
|
|
128
118
|
+---------+
|
|
129
119
|
| NULL |
|
|
130
120
|
+---------+
|
|
131
|
-
1 row in set (0.
|
|
121
|
+
1 row in set (0.00 sec)
|
|
132
122
|
```
|
|
133
123
|
|
|
134
124
|
関数が要らなくなったら破棄します。
|
data/example/fib.rb
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
FIXNUM_MAX = 2**62-1
|
|
3
2
|
def fib(n)
|
|
4
|
-
b = 1
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
c = a + b
|
|
9
|
-
raise 'Overflow' if c > LONG_LONG_MAX
|
|
10
|
-
end
|
|
11
|
-
c
|
|
3
|
+
a, b = 1, 0
|
|
4
|
+
n.times { a, b = b, a + b }
|
|
5
|
+
raise 'Overflow' if b > FIXNUM_MAX
|
|
6
|
+
b
|
|
12
7
|
end
|
data/lib/mrubyudf/version.rb
CHANGED
data/misc/shared.rb
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
MRuby::Build.new do |conf|
|
|
2
|
+
@exts.library = '.so'
|
|
3
|
+
conf.gembox 'default'
|
|
4
|
+
conf.toolchain
|
|
5
|
+
conf.cc do |cc|
|
|
6
|
+
cc.flags = '-fPIC'
|
|
7
|
+
end
|
|
8
|
+
conf.archiver do |archiver|
|
|
9
|
+
archiver.command = 'gcc'
|
|
10
|
+
archiver.archive_options = '-shared -o %{outfile} %{objs}'
|
|
11
|
+
end
|
|
12
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mrubyudf
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- TOMITA Masahiro
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 2024-10-13 00:00:00.000000000 Z
|
|
12
11
|
dependencies: []
|
|
13
12
|
description: Create MySQL UDF using mruby
|
|
14
13
|
email:
|
|
@@ -43,13 +42,13 @@ files:
|
|
|
43
42
|
- lib/mrubyudf/template.rb
|
|
44
43
|
- lib/mrubyudf/version.rb
|
|
45
44
|
- misc/mruby-shared.patch
|
|
45
|
+
- misc/shared.rb
|
|
46
46
|
- mrubyudf.gemspec
|
|
47
47
|
homepage: https://github.com/tmtm/mrubyudf
|
|
48
48
|
licenses: []
|
|
49
49
|
metadata:
|
|
50
50
|
homepage_uri: https://github.com/tmtm/mrubyudf
|
|
51
51
|
source_code_uri: https://github.com/tmtm/mrubyudf
|
|
52
|
-
post_install_message:
|
|
53
52
|
rdoc_options: []
|
|
54
53
|
require_paths:
|
|
55
54
|
- lib
|
|
@@ -64,8 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
64
63
|
- !ruby/object:Gem::Version
|
|
65
64
|
version: '0'
|
|
66
65
|
requirements: []
|
|
67
|
-
rubygems_version: 3.
|
|
68
|
-
signing_key:
|
|
66
|
+
rubygems_version: 3.6.0.dev
|
|
69
67
|
specification_version: 4
|
|
70
68
|
summary: Create MySQL UDF using mruby
|
|
71
69
|
test_files: []
|