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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 37948541011832b1a59e31f718e9466d24dabad96afe8d5a04df5a86836020b1
4
- data.tar.gz: a04d36a0fff2b66ac7ee5e107f71db44403da51248c9b71733709142121fe7c9
3
+ metadata.gz: d3fee141a77cfae7d1e17ef5ca2db7bd30c39370356b4bf8834b9182b54e2894
4
+ data.tar.gz: c13b8c2d6ef29d3aed91b98951f0ea945945a8f1ae37facce2802dde5e292ac7
5
5
  SHA512:
6
- metadata.gz: d14ec582868bd20f83e32c0c9da717bd564d6b8109849cc884b137d0e6e7edac2698a213444870b4664d33dbd7b67f20d7291f1110fb03316b9a7b5741b87bde
7
- data.tar.gz: 01d25b3be537702501e6850dec6c6924d8d36afda69f7d9dab57e43dba9a07b2025eb6792e233fdc1c89c31fdb5aa4d7b858be6343c50306d338d4c772841dfa
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.0.20-linux-glibc2.12-x86_64.tar.xz みたいなファイルを展開した中には入ってるはずです。
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
- % patch -p1 < $GEM_HOME/gems/mrubyudf-0.*/misc/mruby-shared.patch
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
- % export MRUBY_PATH=/path/to/mruby
35
+ % MRUBY_PATH=$(pwd)/bin
38
36
  ```
39
37
 
40
38
  関数本体を作ります。ここではフィボナッチ数を返す fib() 関数を fib.rb ファイルとして作ります。
41
39
 
42
40
  ```ruby
43
- LONG_LONG_MAX = 9223372036854775807
44
-
41
+ FIXNUM_MAX = 2**62-1
45
42
  def fib(n)
46
- b = 1
47
- c = 0
48
- n.times do
49
- a, b = b, c
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/bin/mruby -r ./fib.rb -e 'p fib(10)'
53
+ % $MRUBY_PATH/mruby -r ./fib.rb -e 'p fib(10)'
61
54
  55
62
- % $MRUBY_PATH/bin/mruby -r ./fib.rb -e 'p fib(92)'
63
- 7540113804746346429
64
- % $MRUBY_PATH/bin/mruby -r ./fib.rb -e 'p fib(93)'
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
- [2] -e:1
67
- [1] -e:6:in fib
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.04 sec)
105
+ 1 row in set (0.01 sec)
116
106
 
117
- mysql> select fib(92);
107
+ mysql> select fib(90);
118
108
  +---------------------+
119
- | fib(92) |
109
+ | fib(90) |
120
110
  +---------------------+
121
- | 7540113804746346429 |
111
+ | 2880067194370816120 |
122
112
  +---------------------+
123
- 1 row in set (0.04 sec)
113
+ 1 row in set (0.01 sec)
124
114
 
125
- mysql> select fib(93);
115
+ mysql> select fib(91);
126
116
  +---------+
127
- | fib(93) |
117
+ | fib(91) |
128
118
  +---------+
129
119
  | NULL |
130
120
  +---------+
131
- 1 row in set (0.04 sec)
121
+ 1 row in set (0.00 sec)
132
122
  ```
133
123
 
134
124
  関数が要らなくなったら破棄します。
data/example/fib.rb CHANGED
@@ -1,12 +1,7 @@
1
- LONG_LONG_MAX = 9223372036854775807
2
-
1
+ FIXNUM_MAX = 2**62-1
3
2
  def fib(n)
4
- b = 1
5
- c = 0
6
- n.times do
7
- a, b = b, c
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
@@ -1,3 +1,3 @@
1
1
  class MrubyUdf
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
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.1.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: 2020-05-02 00:00:00.000000000 Z
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.1.2
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: []