mrubyudf 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|