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 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: []