From e3847e89be4395002bdcaabdf642f3e1812c060a Mon Sep 17 00:00:00 2001 From: Nelson-He Date: Mon, 22 May 2023 11:05:13 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8A=A0=E8=A7=A3?= =?UTF-8?q?=E5=AF=86=E7=A4=BA=E4=BE=8B=E7=9A=84=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wasm/examples/encrypt_decrypt/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wasm/examples/encrypt_decrypt/Cargo.toml b/wasm/examples/encrypt_decrypt/Cargo.toml index 68cc424..37f5500 100644 --- a/wasm/examples/encrypt_decrypt/Cargo.toml +++ b/wasm/examples/encrypt_decrypt/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -opengauss_bindgen = { version = "0", path = "../../bindgen" } +opengauss_bindgen = "0.1.0" magic-crypt = "3.1" [lib] -- Gitee From ab6d82b99db61751a9d5932de98f416e6603801c Mon Sep 17 00:00:00 2001 From: Nelson-He Date: Mon, 22 May 2023 14:26:27 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E5=88=9B=E5=BB=BAODD=E6=BC=94=E7=A4=BA?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E5=92=8C=E6=BC=94=E7=A4=BA=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odd/encrypt_decrypt/1_compile_to_wasm | 10 ++++++++++ odd/encrypt_decrypt/2_create_extension | 1 + odd/encrypt_decrypt/3_load_wasm_func | 1 + odd/encrypt_decrypt/4_create_user_table | 5 +++++ odd/encrypt_decrypt/5_init_secret_key | 2 ++ odd/encrypt_decrypt/6_create_trigger_func | 8 ++++++++ odd/encrypt_decrypt/7_create_trigger | 1 + odd/encrypt_decrypt/8_insert_user_data | 11 +++++++++++ odd/encrypt_decrypt/9_check_result | 1 + odd/encrypt_decrypt/Cargo.toml | 13 +++++++++++++ odd/encrypt_decrypt/src/lib.rs | 15 +++++++++++++++ odd/fib/1_compile_to_wasm | 9 +++++++++ odd/fib/2_create_sql_func | 20 ++++++++++++++++++++ odd/fib/3_load_wasm_func | 1 + odd/fib/Cargo.toml | 12 ++++++++++++ odd/fib/src/lib.rs | 20 ++++++++++++++++++++ wasm/examples/encrypt_decrypt/README | 7 ++++--- 17 files changed, 134 insertions(+), 3 deletions(-) create mode 100755 odd/encrypt_decrypt/1_compile_to_wasm create mode 100644 odd/encrypt_decrypt/2_create_extension create mode 100644 odd/encrypt_decrypt/3_load_wasm_func create mode 100644 odd/encrypt_decrypt/4_create_user_table create mode 100644 odd/encrypt_decrypt/5_init_secret_key create mode 100644 odd/encrypt_decrypt/6_create_trigger_func create mode 100644 odd/encrypt_decrypt/7_create_trigger create mode 100644 odd/encrypt_decrypt/8_insert_user_data create mode 100644 odd/encrypt_decrypt/9_check_result create mode 100644 odd/encrypt_decrypt/Cargo.toml create mode 100644 odd/encrypt_decrypt/src/lib.rs create mode 100755 odd/fib/1_compile_to_wasm create mode 100644 odd/fib/2_create_sql_func create mode 100644 odd/fib/3_load_wasm_func create mode 100644 odd/fib/Cargo.toml create mode 100644 odd/fib/src/lib.rs diff --git a/odd/encrypt_decrypt/1_compile_to_wasm b/odd/encrypt_decrypt/1_compile_to_wasm new file mode 100755 index 0000000..1aba075 --- /dev/null +++ b/odd/encrypt_decrypt/1_compile_to_wasm @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -e + +echo "cargo build --release --target wasm32-unknown-unknown" +cargo build --release --target wasm32-unknown-unknown + +echo "wasm-opt -Os target/wasm32-unknown-unknown/release/opengauss_encrypt_decrypt.wasm -o encrypt_decrypt.wasm" +wasm-opt -Os target/wasm32-unknown-unknown/release/opengauss_encrypt_decrypt.wasm -o encrypt_decrypt.wasm + diff --git a/odd/encrypt_decrypt/2_create_extension b/odd/encrypt_decrypt/2_create_extension new file mode 100644 index 0000000..a548835 --- /dev/null +++ b/odd/encrypt_decrypt/2_create_extension @@ -0,0 +1 @@ +CREATE EXTENSION wasm_executor; diff --git a/odd/encrypt_decrypt/3_load_wasm_func b/odd/encrypt_decrypt/3_load_wasm_func new file mode 100644 index 0000000..875395f --- /dev/null +++ b/odd/encrypt_decrypt/3_load_wasm_func @@ -0,0 +1 @@ +SELECT wasm_new_instance('/home/opengauss/odd/encrypt_decrypt/encrypt_decrypt.wasm', 'gs'); diff --git a/odd/encrypt_decrypt/4_create_user_table b/odd/encrypt_decrypt/4_create_user_table new file mode 100644 index 0000000..d262edf --- /dev/null +++ b/odd/encrypt_decrypt/4_create_user_table @@ -0,0 +1,5 @@ +CREATE TABLE users ( + username TEXT PRIMARY KEY, + email TEXT, + passwd TEXT +); diff --git a/odd/encrypt_decrypt/5_init_secret_key b/odd/encrypt_decrypt/5_init_secret_key new file mode 100644 index 0000000..cf9bdea --- /dev/null +++ b/odd/encrypt_decrypt/5_init_secret_key @@ -0,0 +1,2 @@ +CREATE TABLE secrets(secret text); +INSERT INTO secrets VALUES ('s3cretk3y'); diff --git a/odd/encrypt_decrypt/6_create_trigger_func b/odd/encrypt_decrypt/6_create_trigger_func new file mode 100644 index 0000000..69bc2c4 --- /dev/null +++ b/odd/encrypt_decrypt/6_create_trigger_func @@ -0,0 +1,8 @@ +CREATE OR REPLACE FUNCTION encrypt_password() RETURNS TRIGGER AS +$$ + DECLARE + BEGIN + UPDATE users SET passwd = gs_encrypt(NEW.passwd, (SELECT secret FROM secrets LIMIT 1)) WHERE username = NEW.username; + RETURN NEW; + END +$$LANGUAGE PLPGSQL; diff --git a/odd/encrypt_decrypt/7_create_trigger b/odd/encrypt_decrypt/7_create_trigger new file mode 100644 index 0000000..0be0972 --- /dev/null +++ b/odd/encrypt_decrypt/7_create_trigger @@ -0,0 +1 @@ +CREATE TRIGGER encrypt_passwd_trigger AFTER INSERT ON users FOR EACH ROW EXECUTE PROCEDURE encrypt_password(); diff --git a/odd/encrypt_decrypt/8_insert_user_data b/odd/encrypt_decrypt/8_insert_user_data new file mode 100644 index 0000000..05be3b9 --- /dev/null +++ b/odd/encrypt_decrypt/8_insert_user_data @@ -0,0 +1,11 @@ +INSERT INTO users VALUES + ('nel', 'nel@xx.com', 'nelson_passwd'); +INSERT INTO users VALUES + ('mic', 'mic@xx.com', 'mickle_passwd'); +INSERT INTO users VALUES + ('jay', 'jay@xx.com', 'jackson_passwd'); +INSERT INTO users VALUES + ('lily', 'lily@xx.com', 'lily_passwd'); +INSERT INTO users VALUES + ('anna', 'anna@xx.com', 'anna_passwd'); + diff --git a/odd/encrypt_decrypt/9_check_result b/odd/encrypt_decrypt/9_check_result new file mode 100644 index 0000000..da2c923 --- /dev/null +++ b/odd/encrypt_decrypt/9_check_result @@ -0,0 +1 @@ +SELECT username, passwd, gs_decrypt(passwd, (SELECT secret FROM secrets LIMIT 1)) AS decrypted FROM users; diff --git a/odd/encrypt_decrypt/Cargo.toml b/odd/encrypt_decrypt/Cargo.toml new file mode 100644 index 0000000..37f5500 --- /dev/null +++ b/odd/encrypt_decrypt/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "opengauss_encrypt_decrypt" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +opengauss_bindgen = "0.1.0" +magic-crypt = "3.1" + +[lib] +crate-type = ["cdylib"] diff --git a/odd/encrypt_decrypt/src/lib.rs b/odd/encrypt_decrypt/src/lib.rs new file mode 100644 index 0000000..847e89a --- /dev/null +++ b/odd/encrypt_decrypt/src/lib.rs @@ -0,0 +1,15 @@ +use opengauss_bindgen::*; +use magic_crypt::{new_magic_crypt, MagicCryptTrait}; + +#[opengauss_bindgen::opengauss_bindgen] +pub fn encrypt(data: String, key: String) -> String { + let mc = new_magic_crypt!(key, 256); + mc.encrypt_str_to_base64(data) +} + +#[opengauss_bindgen::opengauss_bindgen] +pub fn decrypt(data: String, key: String) -> String { + let mc = new_magic_crypt!(key, 256); + mc.decrypt_base64_to_string(data) + .unwrap_or("[ACCESS DENIED]".to_owned()) +} diff --git a/odd/fib/1_compile_to_wasm b/odd/fib/1_compile_to_wasm new file mode 100755 index 0000000..97e2c55 --- /dev/null +++ b/odd/fib/1_compile_to_wasm @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +set -e + +echo "cargo build --release --target wasm32-unknown-unknown" +cargo build --release --target wasm32-unknown-unknown + +echo "wasm-opt -Os target/wasm32-unknown-unknown/release/fib.wasm -o fib.wasm" +wasm-opt -Os target/wasm32-unknown-unknown/release/fib.wasm -o fib.wasm diff --git a/odd/fib/2_create_sql_func b/odd/fib/2_create_sql_func new file mode 100644 index 0000000..dcdef58 --- /dev/null +++ b/odd/fib/2_create_sql_func @@ -0,0 +1,20 @@ +CREATE OR REPLACE FUNCTION sql_fib (n integer) RETURNS decimal AS $$ +DECLARE + counter bigint := 1; + i decimal := 0; + j decimal := 1; +BEGIN + IF (n <= 1) THEN + RETURN n; + END IF; + + WHILE counter <= n LOOP + counter := counter + 1; + SELECT j, i + j INTO i, j; + END LOOP; + + RETURN i; +END; +$$ LANGUAGE plpgsql; + + diff --git a/odd/fib/3_load_wasm_func b/odd/fib/3_load_wasm_func new file mode 100644 index 0000000..a967901 --- /dev/null +++ b/odd/fib/3_load_wasm_func @@ -0,0 +1 @@ +SELECT wasm_new_instance('/home/opengauss/odd/fib/fib.wasm', 'gs'); diff --git a/odd/fib/Cargo.toml b/odd/fib/Cargo.toml new file mode 100644 index 0000000..a3bfce9 --- /dev/null +++ b/odd/fib/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "fib" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +opengauss_bindgen = "0.1.0" + +[lib] +crate-type = ["cdylib"] diff --git a/odd/fib/src/lib.rs b/odd/fib/src/lib.rs new file mode 100644 index 0000000..821e520 --- /dev/null +++ b/odd/fib/src/lib.rs @@ -0,0 +1,20 @@ +use opengauss_bindgen::*; + +#[opengauss_bindgen::opengauss_bindgen] +fn fib(n: u64) -> u64 { + if n <= 1 { + n + } else { + let mut accumulator = 0; + let mut last = 0; + let mut current = 1; + + for _i in 1..n { + accumulator = last + current; + last = current; + current = accumulator; + } + + accumulator + } +} diff --git a/wasm/examples/encrypt_decrypt/README b/wasm/examples/encrypt_decrypt/README index d72c98d..a962c3f 100644 --- a/wasm/examples/encrypt_decrypt/README +++ b/wasm/examples/encrypt_decrypt/README @@ -1,11 +1,12 @@ + CREATE EXTENSION wasm_executor; SELECT wasm_new_instance('/home/opengauss/encrypt_decrypt.wasm', 'gs'); CREATE TABLE users ( -username TEXT PRIMARY KEY, -email TEXT, -passwd TEXT + username TEXT PRIMARY KEY, + email TEXT, + passwd TEXT ); CREATE TABLE secrets(secret text); -- Gitee From 021e49fb0605cbac59c8ce25f3b58f5d0c1ab46d Mon Sep 17 00:00:00 2001 From: Nelson-He Date: Mon, 22 May 2023 14:42:25 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=87=BD=E6=95=B0=E7=9A=84=E6=AD=A5=E9=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odd/encrypt_decrypt/{9_check_result => 10_check_result} | 0 odd/encrypt_decrypt/4_show_exported_func | 1 + odd/encrypt_decrypt/{4_create_user_table => 5_create_user_table} | 0 odd/encrypt_decrypt/{5_init_secret_key => 6_init_secret_key} | 0 .../{6_create_trigger_func => 7_create_trigger_func} | 0 odd/encrypt_decrypt/{7_create_trigger => 8_create_trigger} | 0 odd/encrypt_decrypt/{8_insert_user_data => 9_insert_user_data} | 0 odd/fib/4_show_exported_func | 1 + 8 files changed, 2 insertions(+) rename odd/encrypt_decrypt/{9_check_result => 10_check_result} (100%) create mode 100644 odd/encrypt_decrypt/4_show_exported_func rename odd/encrypt_decrypt/{4_create_user_table => 5_create_user_table} (100%) rename odd/encrypt_decrypt/{5_init_secret_key => 6_init_secret_key} (100%) rename odd/encrypt_decrypt/{6_create_trigger_func => 7_create_trigger_func} (100%) rename odd/encrypt_decrypt/{7_create_trigger => 8_create_trigger} (100%) rename odd/encrypt_decrypt/{8_insert_user_data => 9_insert_user_data} (100%) create mode 100644 odd/fib/4_show_exported_func diff --git a/odd/encrypt_decrypt/9_check_result b/odd/encrypt_decrypt/10_check_result similarity index 100% rename from odd/encrypt_decrypt/9_check_result rename to odd/encrypt_decrypt/10_check_result diff --git a/odd/encrypt_decrypt/4_show_exported_func b/odd/encrypt_decrypt/4_show_exported_func new file mode 100644 index 0000000..3c40ca2 --- /dev/null +++ b/odd/encrypt_decrypt/4_show_exported_func @@ -0,0 +1 @@ +select * from wasm.exported_functions; diff --git a/odd/encrypt_decrypt/4_create_user_table b/odd/encrypt_decrypt/5_create_user_table similarity index 100% rename from odd/encrypt_decrypt/4_create_user_table rename to odd/encrypt_decrypt/5_create_user_table diff --git a/odd/encrypt_decrypt/5_init_secret_key b/odd/encrypt_decrypt/6_init_secret_key similarity index 100% rename from odd/encrypt_decrypt/5_init_secret_key rename to odd/encrypt_decrypt/6_init_secret_key diff --git a/odd/encrypt_decrypt/6_create_trigger_func b/odd/encrypt_decrypt/7_create_trigger_func similarity index 100% rename from odd/encrypt_decrypt/6_create_trigger_func rename to odd/encrypt_decrypt/7_create_trigger_func diff --git a/odd/encrypt_decrypt/7_create_trigger b/odd/encrypt_decrypt/8_create_trigger similarity index 100% rename from odd/encrypt_decrypt/7_create_trigger rename to odd/encrypt_decrypt/8_create_trigger diff --git a/odd/encrypt_decrypt/8_insert_user_data b/odd/encrypt_decrypt/9_insert_user_data similarity index 100% rename from odd/encrypt_decrypt/8_insert_user_data rename to odd/encrypt_decrypt/9_insert_user_data diff --git a/odd/fib/4_show_exported_func b/odd/fib/4_show_exported_func new file mode 100644 index 0000000..3c40ca2 --- /dev/null +++ b/odd/fib/4_show_exported_func @@ -0,0 +1 @@ +select * from wasm.exported_functions; -- Gitee From 2805e2c09f5642d5c5fa0305b6a0b65a7a11cb28 Mon Sep 17 00:00:00 2001 From: Nelson-He Date: Mon, 22 May 2023 15:34:55 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E4=BC=98=E5=8C=96ODD=20demo=E6=BC=94?= =?UTF-8?q?=E7=A4=BA=E6=AD=A5=E9=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odd/fib/5_timing_sql | 14 ++++++++++++++ odd/fib/6_timing_wasm | 14 ++++++++++++++ odd/fib/src/lib.rs | 2 -- 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 odd/fib/5_timing_sql create mode 100644 odd/fib/6_timing_wasm diff --git a/odd/fib/5_timing_sql b/odd/fib/5_timing_sql new file mode 100644 index 0000000..c574eec --- /dev/null +++ b/odd/fib/5_timing_sql @@ -0,0 +1,14 @@ +\timing + +select sql_fib(10); + +select sql_fib(30); + +select sql_fib(50); + +select sql_fib(70); + +select sql_fib(90); + +\timing + diff --git a/odd/fib/6_timing_wasm b/odd/fib/6_timing_wasm new file mode 100644 index 0000000..63a9362 --- /dev/null +++ b/odd/fib/6_timing_wasm @@ -0,0 +1,14 @@ +\timing + +select gs_fib(10); + +select gs_fib(30); + +select gs_fib(50); + +select gs_fib(70); + +select gs_fib(90); + +\timing + diff --git a/odd/fib/src/lib.rs b/odd/fib/src/lib.rs index 821e520..3eb7704 100644 --- a/odd/fib/src/lib.rs +++ b/odd/fib/src/lib.rs @@ -1,5 +1,3 @@ -use opengauss_bindgen::*; - #[opengauss_bindgen::opengauss_bindgen] fn fib(n: u64) -> u64 { if n <= 1 { -- Gitee From 92a20320645dad67941addec24f925bce5ede816 Mon Sep 17 00:00:00 2001 From: Nelson-He Date: Tue, 23 May 2023 15:21:40 +0800 Subject: [PATCH 5/7] rename wasm_executor to wasmengine --- README.md | 4 +- odd/encrypt_decrypt/1_create_extension | 1 + .../{1_compile_to_wasm => 2_compile_to_wasm} | 0 odd/encrypt_decrypt/2_create_extension | 1 - wasm/Makefile | 8 +-- wasm/examples/encrypt_decrypt/README | 2 +- ...executor--1.0.sql => wasm_engine--1.0.sql} | 0 ...m_executor.control => wasm_engine.control} | 2 +- wasm/{wasm_executor.cpp => wasm_engine.cpp} | 58 +++++++++---------- 9 files changed, 38 insertions(+), 38 deletions(-) create mode 100644 odd/encrypt_decrypt/1_create_extension rename odd/encrypt_decrypt/{1_compile_to_wasm => 2_compile_to_wasm} (100%) delete mode 100644 odd/encrypt_decrypt/2_create_extension rename wasm/{wasm_executor--1.0.sql => wasm_engine--1.0.sql} (100%) rename wasm/{wasm_executor.control => wasm_engine.control} (76%) rename wasm/{wasm_executor.cpp => wasm_engine.cpp} (88%) diff --git a/README.md b/README.md index ea0380b..86fac6a 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ You can install the wasmedge as simple as Refer to [https://wasmedge.org/book/en/quick_start/install.html](https://wasmedge.org/book/en/quick_start/install.html) for more details. -After that, run `CREATE EXTENSION wasm_executor` in a +After that, run `CREATE EXTENSION wasm_engine` in a openGauss shell. One new function will appear: `wasm_new_instance`; It must be called with the absolute path to the shared library. It looks like this: @@ -40,7 +40,7 @@ $ # Install the extension in the opengauss $ make install $ # Activate and initialize the extension. -$ gsql -d postgres -c 'CREATE EXTENSION wasm_executor' +$ gsql -d postgres -c 'CREATE EXTENSION wasm_engine' ``` And you are ready to go! diff --git a/odd/encrypt_decrypt/1_create_extension b/odd/encrypt_decrypt/1_create_extension new file mode 100644 index 0000000..9f91557 --- /dev/null +++ b/odd/encrypt_decrypt/1_create_extension @@ -0,0 +1 @@ +CREATE EXTENSION wasm_engine; diff --git a/odd/encrypt_decrypt/1_compile_to_wasm b/odd/encrypt_decrypt/2_compile_to_wasm similarity index 100% rename from odd/encrypt_decrypt/1_compile_to_wasm rename to odd/encrypt_decrypt/2_compile_to_wasm diff --git a/odd/encrypt_decrypt/2_create_extension b/odd/encrypt_decrypt/2_create_extension deleted file mode 100644 index a548835..0000000 --- a/odd/encrypt_decrypt/2_create_extension +++ /dev/null @@ -1 +0,0 @@ -CREATE EXTENSION wasm_executor; diff --git a/wasm/Makefile b/wasm/Makefile index ed62f59..3fc2b99 100644 --- a/wasm/Makefile +++ b/wasm/Makefile @@ -1,10 +1,10 @@ # contrib/wasm/Makefile -MODULE_big = wasm_executor -OBJS= wasm_executor.o +MODULE_big = wasm_engine +OBJS= wasm_engine.o -EXTENSION = wasm_executor -DATA = wasm_executor--1.0.sql +EXTENSION = wasm_engine +DATA = wasm_engine--1.0.sql SHLIB_LINK_INTERNAL = $(libpq) SHLIB_LINK += -lwasmedge diff --git a/wasm/examples/encrypt_decrypt/README b/wasm/examples/encrypt_decrypt/README index a962c3f..79534f4 100644 --- a/wasm/examples/encrypt_decrypt/README +++ b/wasm/examples/encrypt_decrypt/README @@ -1,5 +1,5 @@ -CREATE EXTENSION wasm_executor; +CREATE EXTENSION wasm_engine; SELECT wasm_new_instance('/home/opengauss/encrypt_decrypt.wasm', 'gs'); diff --git a/wasm/wasm_executor--1.0.sql b/wasm/wasm_engine--1.0.sql similarity index 100% rename from wasm/wasm_executor--1.0.sql rename to wasm/wasm_engine--1.0.sql diff --git a/wasm/wasm_executor.control b/wasm/wasm_engine.control similarity index 76% rename from wasm/wasm_executor.control rename to wasm/wasm_engine.control index 35e09a0..b0a37f8 100755 --- a/wasm/wasm_executor.control +++ b/wasm/wasm_engine.control @@ -1,5 +1,5 @@ # wasm_executor extension comment = 'wasm runtime executor for opengauss based on wasmtime' default_version = '1.0' -module_pathname = '$libdir/wasm_executor' +module_pathname = '$libdir/wasm_engine' relocatable = true diff --git a/wasm/wasm_executor.cpp b/wasm/wasm_engine.cpp similarity index 88% rename from wasm/wasm_executor.cpp rename to wasm/wasm_engine.cpp index e699962..904c86f 100644 --- a/wasm/wasm_executor.cpp +++ b/wasm/wasm_engine.cpp @@ -71,7 +71,7 @@ static WasmVM* find_wasm_vm(int64 instanceid) } itor++; } - // elog(DEBUG1, "wasm_executor: not find instance info for instanceid %ld", instanceid); + // elog(DEBUG1, "wasm_engine: not find instance info for instanceid %ld", instanceid); return NULL; } @@ -84,7 +84,7 @@ static std::vector* find_exported_func_list(int64 instanceid) } itor++; } - // elog(DEBUG1, "wasm_executor: not find exported func info for instanceid %ld", instanceid); + // elog(DEBUG1, "wasm_engine: not find exported func info for instanceid %ld", instanceid); return NULL; } @@ -99,7 +99,7 @@ static int64 wasm_invoke_function(char *instanceid_str, char* funcname, std::vec int64 instanceid = atol(instanceid_str); WasmVM* wasmVM = find_wasm_vm(instanceid); if (wasmVM == NULL) { - ereport(ERROR, (errmsg("wasm_executor: instance with id %ld is not find", instanceid))); + ereport(ERROR, (errmsg("wasm_engine: instance with id %ld is not find", instanceid))); } WasmEdge_Value params[args.size()]; @@ -112,7 +112,7 @@ static int64 wasm_invoke_function(char *instanceid_str, char* funcname, std::vec WasmEdge_Result ret = WasmEdge_VMExecute(wasmVM->vm_context, wasm_func, params, args.size(), result, 1); if (!WasmEdge_ResultOK(ret)) { WasmEdge_StringDelete(wasm_func); - ereport(ERROR, (errmsg("wasm_executor: call func %s failed", funcname))); + ereport(ERROR, (errmsg("wasm_engine: call func %s failed", funcname))); } int64 ret_val = 0; ret_val = WasmEdge_ValueGetI64(result[0]); @@ -127,7 +127,7 @@ static char* wasm_invoke_function2(char *instanceid_str, char* funcname, std::ve int64 instanceid = atol(instanceid_str); WasmVM* wasmVM = find_wasm_vm(instanceid); if (wasmVM == NULL) { - ereport(ERROR, (errmsg("wasm_executor: instance with id %ld is not find", instanceid))); + ereport(ERROR, (errmsg("wasm_engine: instance with id %ld is not find", instanceid))); } WasmEdge_VMContext *vm_context = wasmVM->vm_context; @@ -152,7 +152,7 @@ static char* wasm_invoke_function2(char *instanceid_str, char* funcname, std::ve res = WasmEdge_VMExecute(vm_context, wasmedge_func_name, malloc_param, 1, results, 1); WasmEdge_StringDelete(wasmedge_func_name); if (!WasmEdge_ResultOK(res)) { - ereport(ERROR, (errmsg("wasm_executor: call opengauss malloc failed"))); + ereport(ERROR, (errmsg("wasm_engine: call opengauss malloc failed"))); } mem_offset = WasmEdge_ValueGetI32(results[0]); @@ -167,7 +167,7 @@ static char* wasm_invoke_function2(char *instanceid_str, char* funcname, std::ve res = WasmEdge_VMExecute(vm_context, wasmedge_func_name, params, args.size(), results, 1); WasmEdge_StringDelete(wasmedge_func_name); if (!WasmEdge_ResultOK(res)) { - ereport(ERROR, (errmsg("wasm_executor: call func %s failed", funcname))); + ereport(ERROR, (errmsg("wasm_engine: call func %s failed", funcname))); } int type_offset = WasmEdge_ValueGetI32(results[0]); @@ -196,14 +196,14 @@ static void wasm_export_funcs_query(int64 instanceid, TupleFuncState* inter_call { WasmVM *wasmVM = find_wasm_vm(instanceid); if (wasmVM == NULL) { - ereport(ERROR, (errmsg("wasm_executor: instance with id %ld is not find", instanceid))); + ereport(ERROR, (errmsg("wasm_engine: instance with id %ld is not find", instanceid))); } std::vector* functions = find_exported_func_list(instanceid); if (functions != NULL) { inter_call_data->currindex = functions->begin(); inter_call_data->lastindex = functions->end(); - //elog(DEBUG1, "wasm_executor:find exported func info for instanceid %ld", instanceid); + //elog(DEBUG1, "wasm_engine:find exported func info for instanceid %ld", instanceid); return; } @@ -220,20 +220,20 @@ static void wasm_export_funcs_query(int64 instanceid, TupleFuncState* inter_call for (unsigned int i = 0; i < rel_func_num && i < BUF_LEN; ++i) { char tmp_buffer[BUF_LEN] = {0}; uint32_t func_name_len = WasmEdge_StringCopy(func_name_list[i], tmp_buffer, sizeof(tmp_buffer)); - // elog(DEBUG1, "wasm_executor: exported function string length: %u, name: %s\n", func_name_len, tmp_buffer); + // elog(DEBUG1, "wasm_engine: exported function string length: %u, name: %s\n", func_name_len, tmp_buffer); if (strcmp(tmp_buffer, malloc_func) == 0) { - // elog(DEBUG1, "wasm_executor: opengauss_malloc is not need to export to user\n"); + // elog(DEBUG1, "wasm_engine: opengauss_malloc is not need to export to user\n"); continue; } uint32_t param_nums = WasmEdge_FunctionTypeGetParametersLength(func_type_list[i]); if (param_nums > MAX_PARAMS) { - ereport(ERROR, (errmsg("wasm_executor: func %s has more than 10 params which not support", tmp_buffer))); + ereport(ERROR, (errmsg("wasm_engine: func %s has more than 10 params which not support", tmp_buffer))); } uint32_t return_num = WasmEdge_FunctionTypeGetReturnsLength(func_type_list[i]); if (return_num > MAX_RETURNS) { - ereport(ERROR, (errmsg("wasm_executor: func %s has more than 1 return value which not support", tmp_buffer))); + ereport(ERROR, (errmsg("wasm_engine: func %s has more than 1 return value which not support", tmp_buffer))); } WasmFuncInfo *funcinfo = new(std::nothrow)WasmFuncInfo(); @@ -246,7 +246,7 @@ static void wasm_export_funcs_query(int64 instanceid, TupleFuncState* inter_call } else if (param_buffer[j] == WasmEdge_ValType_I64) { funcinfo->inputs.push_back("bigint"); } else { - ereport(ERROR, (errmsg("wasm_executor: not support the value type(%d) for now", param_buffer[j]))); + ereport(ERROR, (errmsg("wasm_engine: not support the value type(%d) for now", param_buffer[j]))); } } @@ -256,7 +256,7 @@ static void wasm_export_funcs_query(int64 instanceid, TupleFuncState* inter_call } else if (param_buffer[0] == WasmEdge_ValType_I64) { funcinfo->outputs = "bigint"; } else { - ereport(ERROR, (errmsg("wasm_executor: not support the value type(%d) for now", param_buffer[0]))); + ereport(ERROR, (errmsg("wasm_engine: not support the value type(%d) for now", param_buffer[0]))); } funcinfo->funcname = std::string(tmp_buffer, func_name_len); @@ -265,7 +265,7 @@ static void wasm_export_funcs_query(int64 instanceid, TupleFuncState* inter_call inter_call_data->currindex = functions->begin(); inter_call_data->lastindex = functions->end(); - // elog(DEBUG1, "wasm_executor:init exported func info for instanceid %ld", instanceid); + // elog(DEBUG1, "wasm_engine:init exported func info for instanceid %ld", instanceid); } static WasmVM* create_wasm_instance_internal(char* filepath) @@ -278,19 +278,19 @@ static WasmVM* create_wasm_instance_internal(char* filepath) WasmEdge_Result result = WasmEdge_VMLoadWasmFromFile(vm_cxt, filepath); if (!WasmEdge_ResultOK(result)) { WasmEdge_ConfigureDelete(config_context); - ereport(ERROR, (errmsg("wasm_executor: failed to load %s", filepath))); + ereport(ERROR, (errmsg("wasm_engine: failed to load %s", filepath))); } result = WasmEdge_VMValidate(vm_cxt); if (!WasmEdge_ResultOK(result)) { WasmEdge_ConfigureDelete(config_context); - ereport(ERROR, (errmsg("wasm_executor: wasm file validation failed %s", WasmEdge_ResultGetMessage(result)))); + ereport(ERROR, (errmsg("wasm_engine: wasm file validation failed %s", WasmEdge_ResultGetMessage(result)))); } result = WasmEdge_VMInstantiate(vm_cxt); if (!WasmEdge_ResultOK(result)) { WasmEdge_ConfigureDelete(config_context); - ereport(ERROR, (errmsg("wasm_executor: wasm vm initialize failed: %s", WasmEdge_ResultGetMessage(result)))); + ereport(ERROR, (errmsg("wasm_engine: wasm vm initialize failed: %s", WasmEdge_ResultGetMessage(result)))); } WasmEdge_ConfigureDelete(config_context); @@ -311,11 +311,11 @@ Datum wasm_create_instance(PG_FUNCTION_ARGS) if (!superuser()) ereport(ERROR, - (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), (errmsg("wasm_executor: must be system admin to create wasm instance")))); + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), (errmsg("wasm_engine: must be system admin to create wasm instance")))); WasmVM *wasmVM = find_wasm_vm(uuid); if (wasmVM != NULL) { - ereport(NOTICE, (errmsg("wasm_executor: instance already created for %s", filepath))); + ereport(NOTICE, (errmsg("wasm_engine: instance already created for %s", filepath))); return UInt32GetDatum(uuid); } @@ -333,14 +333,14 @@ Datum wasm_drop_instance(PG_FUNCTION_ARGS) if (!superuser()) ereport(ERROR, - (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), (errmsg("wasm_executor: must be system admin to delete wasm instance")))); + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), (errmsg("wasm_engine: must be system admin to delete wasm instance")))); std::map::iterator institor = instances.begin(); while (institor != instances.end() && institor->first != instanceid) { institor++; } if (institor == instances.end()) { - ereport(ERROR, (errmsg("wasm_executor:instance with id=%ld not exist", instanceid))); + ereport(ERROR, (errmsg("wasm_engine:instance with id=%ld not exist", instanceid))); } module_path = CStringGetTextDatum((institor->second->wasm_file).c_str()); instances.erase(institor); @@ -368,7 +368,7 @@ Datum wasm_get_instances(PG_FUNCTION_ARGS) /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) - elog(ERROR, "wasm_executor: return type must be a row type"); + elog(ERROR, "wasm_engine: return type must be a row type"); inter_call_data->tupd = tupdesc; inter_call_data->currindex = instances.begin(); @@ -421,7 +421,7 @@ Datum wasm_get_exported_functions(PG_FUNCTION_ARGS) /* Build a tuple descriptor for our result type */ if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) - elog(ERROR, "wasm_executor: return type must be a row type"); + elog(ERROR, "wasm_engine: return type must be a row type"); inter_call_data->tupd = tupdesc; wasm_export_funcs_query(instanceid, inter_call_data); @@ -579,17 +579,17 @@ Datum wasm_invoke_function_text_2(PG_FUNCTION_ARGS) void _PG_init(void) { /** - * When openGauss start up and load the wasm_executor.so, it should call + * When openGauss start up and load the wasm_engine.so, it should call * this function to check whether it has created instances. * If has, call the create instance interface to restore them. */ int ret; if ((ret = SPI_connect()) < 0) { - elog(ERROR, "wasm_executor: SPI_connect returned %d", ret); + elog(ERROR, "wasm_engine: SPI_connect returned %d", ret); } if ((ret = SPI_exec("SELECT id, wasm_file FROM wasm.instances", 0)) < 0) { - elog(ERROR, "wasm_executor: SPI_connect exec query failed: %d", ret); + elog(ERROR, "wasm_engine: SPI_connect exec query failed: %d", ret); } if (SPI_tuptable) { @@ -608,4 +608,4 @@ void _PG_init(void) } SPI_finish(); -} \ No newline at end of file +} -- Gitee From 543d40b72608994a4534e88f7b37b45c3f224818 Mon Sep 17 00:00:00 2001 From: Nelson-He Date: Tue, 23 May 2023 17:03:23 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E4=BC=98=E5=8C=96ODD=E6=BC=94=E7=A4=BA?= =?UTF-8?q?=E5=9C=BA=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odd/encrypt_decrypt/10_check_result | 1 - odd/encrypt_decrypt/1_create_extension | 1 - odd/encrypt_decrypt/1_init_user_env | 9 ++++++++ odd/encrypt_decrypt/2_create_extension | 2 ++ ...{2_compile_to_wasm => 3_compile_load_show} | 11 ++++++++-- odd/encrypt_decrypt/3_load_wasm_func | 1 - odd/encrypt_decrypt/4_create_trigger | 16 ++++++++++++++ odd/encrypt_decrypt/4_show_exported_func | 1 - odd/encrypt_decrypt/5_create_user_table | 5 ----- odd/encrypt_decrypt/5_insert_show | 9 ++++++++ odd/encrypt_decrypt/6_init_secret_key | 2 -- odd/encrypt_decrypt/7_create_trigger_func | 8 ------- odd/encrypt_decrypt/8_create_trigger | 1 - odd/encrypt_decrypt/9_insert_user_data | 11 ---------- .../{2_create_sql_func => 1_create_sql_func} | 4 +++- ...{1_compile_to_wasm => 2_compile_load_show} | 4 ++++ odd/fib/3_load_wasm_func | 1 - odd/fib/3_sql_benchmark | 3 +++ odd/fib/4_show_exported_func | 1 - odd/fib/4_wasm_benchmark | 2 ++ odd/fib/5_compare_results | 22 +++++++++++++++++++ odd/fib/6_timing_wasm | 14 ------------ odd/fib/{5_timing_sql => sql_benchmark.sql} | 4 +--- odd/fib/wasm_benchmark.sql | 13 +++++++++++ 24 files changed, 93 insertions(+), 53 deletions(-) delete mode 100644 odd/encrypt_decrypt/10_check_result delete mode 100644 odd/encrypt_decrypt/1_create_extension create mode 100755 odd/encrypt_decrypt/1_init_user_env create mode 100755 odd/encrypt_decrypt/2_create_extension rename odd/encrypt_decrypt/{2_compile_to_wasm => 3_compile_load_show} (64%) delete mode 100644 odd/encrypt_decrypt/3_load_wasm_func create mode 100755 odd/encrypt_decrypt/4_create_trigger delete mode 100644 odd/encrypt_decrypt/4_show_exported_func delete mode 100644 odd/encrypt_decrypt/5_create_user_table create mode 100755 odd/encrypt_decrypt/5_insert_show delete mode 100644 odd/encrypt_decrypt/6_init_secret_key delete mode 100644 odd/encrypt_decrypt/7_create_trigger_func delete mode 100644 odd/encrypt_decrypt/8_create_trigger delete mode 100644 odd/encrypt_decrypt/9_insert_user_data rename odd/fib/{2_create_sql_func => 1_create_sql_func} (87%) mode change 100644 => 100755 rename odd/fib/{1_compile_to_wasm => 2_compile_load_show} (65%) delete mode 100644 odd/fib/3_load_wasm_func create mode 100755 odd/fib/3_sql_benchmark delete mode 100644 odd/fib/4_show_exported_func create mode 100755 odd/fib/4_wasm_benchmark create mode 100755 odd/fib/5_compare_results delete mode 100644 odd/fib/6_timing_wasm rename odd/fib/{5_timing_sql => sql_benchmark.sql} (92%) create mode 100644 odd/fib/wasm_benchmark.sql diff --git a/odd/encrypt_decrypt/10_check_result b/odd/encrypt_decrypt/10_check_result deleted file mode 100644 index da2c923..0000000 --- a/odd/encrypt_decrypt/10_check_result +++ /dev/null @@ -1 +0,0 @@ -SELECT username, passwd, gs_decrypt(passwd, (SELECT secret FROM secrets LIMIT 1)) AS decrypted FROM users; diff --git a/odd/encrypt_decrypt/1_create_extension b/odd/encrypt_decrypt/1_create_extension deleted file mode 100644 index 9f91557..0000000 --- a/odd/encrypt_decrypt/1_create_extension +++ /dev/null @@ -1 +0,0 @@ -CREATE EXTENSION wasm_engine; diff --git a/odd/encrypt_decrypt/1_init_user_env b/odd/encrypt_decrypt/1_init_user_env new file mode 100755 index 0000000..8fb83bf --- /dev/null +++ b/odd/encrypt_decrypt/1_init_user_env @@ -0,0 +1,9 @@ +gsql -d opengauss -e -c "CREATE TABLE users ( + username TEXT PRIMARY KEY, + email TEXT, + passwd TEXT +);" + +gsql -d opengauss -e -c "CREATE TABLE secrets(secret text); +INSERT INTO secrets VALUES ('s3cretk3y');" + diff --git a/odd/encrypt_decrypt/2_create_extension b/odd/encrypt_decrypt/2_create_extension new file mode 100755 index 0000000..d26ee4c --- /dev/null +++ b/odd/encrypt_decrypt/2_create_extension @@ -0,0 +1,2 @@ +gsql -d opengauss -e -c 'CREATE EXTENSION wasm_engine;' + diff --git a/odd/encrypt_decrypt/2_compile_to_wasm b/odd/encrypt_decrypt/3_compile_load_show similarity index 64% rename from odd/encrypt_decrypt/2_compile_to_wasm rename to odd/encrypt_decrypt/3_compile_load_show index 1aba075..eaea896 100755 --- a/odd/encrypt_decrypt/2_compile_to_wasm +++ b/odd/encrypt_decrypt/3_compile_load_show @@ -1,5 +1,3 @@ -#!/usr/bin/env bash - set -e echo "cargo build --release --target wasm32-unknown-unknown" @@ -8,3 +6,12 @@ cargo build --release --target wasm32-unknown-unknown echo "wasm-opt -Os target/wasm32-unknown-unknown/release/opengauss_encrypt_decrypt.wasm -o encrypt_decrypt.wasm" wasm-opt -Os target/wasm32-unknown-unknown/release/opengauss_encrypt_decrypt.wasm -o encrypt_decrypt.wasm +gsql -d opengauss -e -c "SELECT wasm_new_instance('/home/opengauss/odd/encrypt_decrypt/encrypt_decrypt.wasm', 'gs');" + +gsql -d opengauss -e -c "select * from wasm.exported_functions;" + + + + + + diff --git a/odd/encrypt_decrypt/3_load_wasm_func b/odd/encrypt_decrypt/3_load_wasm_func deleted file mode 100644 index 875395f..0000000 --- a/odd/encrypt_decrypt/3_load_wasm_func +++ /dev/null @@ -1 +0,0 @@ -SELECT wasm_new_instance('/home/opengauss/odd/encrypt_decrypt/encrypt_decrypt.wasm', 'gs'); diff --git a/odd/encrypt_decrypt/4_create_trigger b/odd/encrypt_decrypt/4_create_trigger new file mode 100755 index 0000000..1f8d9ce --- /dev/null +++ b/odd/encrypt_decrypt/4_create_trigger @@ -0,0 +1,16 @@ +gsql -d opengauss -e -c "CREATE OR REPLACE FUNCTION encrypt_password() +RETURNS TRIGGER AS +$$ + DECLARE + BEGIN + UPDATE users SET passwd = gs_encrypt(NEW.passwd, + (SELECT secret FROM secrets LIMIT 1)) + WHERE username = NEW.username; + RETURN NEW; + END +$$LANGUAGE PLPGSQL;" + +gsql -d opengauss -e -c "CREATE TRIGGER encrypt_passwd_trigger AFTER + INSERT ON users +FOR EACH ROW EXECUTE PROCEDURE encrypt_password();" + diff --git a/odd/encrypt_decrypt/4_show_exported_func b/odd/encrypt_decrypt/4_show_exported_func deleted file mode 100644 index 3c40ca2..0000000 --- a/odd/encrypt_decrypt/4_show_exported_func +++ /dev/null @@ -1 +0,0 @@ -select * from wasm.exported_functions; diff --git a/odd/encrypt_decrypt/5_create_user_table b/odd/encrypt_decrypt/5_create_user_table deleted file mode 100644 index d262edf..0000000 --- a/odd/encrypt_decrypt/5_create_user_table +++ /dev/null @@ -1,5 +0,0 @@ -CREATE TABLE users ( - username TEXT PRIMARY KEY, - email TEXT, - passwd TEXT -); diff --git a/odd/encrypt_decrypt/5_insert_show b/odd/encrypt_decrypt/5_insert_show new file mode 100755 index 0000000..5774144 --- /dev/null +++ b/odd/encrypt_decrypt/5_insert_show @@ -0,0 +1,9 @@ +gsql -d opengauss -e -c "INSERT INTO users VALUES ('nel', 'nel@xx.com', 'nelson_passwd'); +INSERT INTO users VALUES ('mic', 'mic@xx.com', 'mickle_passwd'); +INSERT INTO users VALUES ('jay', 'jay@xx.com', 'jackson_passwd'); +INSERT INTO users VALUES ('lily', 'lily@xx.com', 'lily_passwd'); +INSERT INTO users VALUES ('anna', 'anna@xx.com', 'anna_passwd');" + +gsql -d opengauss -e -c "SELECT username, passwd, gs_decrypt(passwd, + (SELECT secret FROM secrets LIMIT 1)) AS decrypted +FROM users;" diff --git a/odd/encrypt_decrypt/6_init_secret_key b/odd/encrypt_decrypt/6_init_secret_key deleted file mode 100644 index cf9bdea..0000000 --- a/odd/encrypt_decrypt/6_init_secret_key +++ /dev/null @@ -1,2 +0,0 @@ -CREATE TABLE secrets(secret text); -INSERT INTO secrets VALUES ('s3cretk3y'); diff --git a/odd/encrypt_decrypt/7_create_trigger_func b/odd/encrypt_decrypt/7_create_trigger_func deleted file mode 100644 index 69bc2c4..0000000 --- a/odd/encrypt_decrypt/7_create_trigger_func +++ /dev/null @@ -1,8 +0,0 @@ -CREATE OR REPLACE FUNCTION encrypt_password() RETURNS TRIGGER AS -$$ - DECLARE - BEGIN - UPDATE users SET passwd = gs_encrypt(NEW.passwd, (SELECT secret FROM secrets LIMIT 1)) WHERE username = NEW.username; - RETURN NEW; - END -$$LANGUAGE PLPGSQL; diff --git a/odd/encrypt_decrypt/8_create_trigger b/odd/encrypt_decrypt/8_create_trigger deleted file mode 100644 index 0be0972..0000000 --- a/odd/encrypt_decrypt/8_create_trigger +++ /dev/null @@ -1 +0,0 @@ -CREATE TRIGGER encrypt_passwd_trigger AFTER INSERT ON users FOR EACH ROW EXECUTE PROCEDURE encrypt_password(); diff --git a/odd/encrypt_decrypt/9_insert_user_data b/odd/encrypt_decrypt/9_insert_user_data deleted file mode 100644 index 05be3b9..0000000 --- a/odd/encrypt_decrypt/9_insert_user_data +++ /dev/null @@ -1,11 +0,0 @@ -INSERT INTO users VALUES - ('nel', 'nel@xx.com', 'nelson_passwd'); -INSERT INTO users VALUES - ('mic', 'mic@xx.com', 'mickle_passwd'); -INSERT INTO users VALUES - ('jay', 'jay@xx.com', 'jackson_passwd'); -INSERT INTO users VALUES - ('lily', 'lily@xx.com', 'lily_passwd'); -INSERT INTO users VALUES - ('anna', 'anna@xx.com', 'anna_passwd'); - diff --git a/odd/fib/2_create_sql_func b/odd/fib/1_create_sql_func old mode 100644 new mode 100755 similarity index 87% rename from odd/fib/2_create_sql_func rename to odd/fib/1_create_sql_func index dcdef58..8f11b51 --- a/odd/fib/2_create_sql_func +++ b/odd/fib/1_create_sql_func @@ -1,3 +1,5 @@ + +gsql -d opengauss -e -c ' CREATE OR REPLACE FUNCTION sql_fib (n integer) RETURNS decimal AS $$ DECLARE counter bigint := 1; @@ -15,6 +17,6 @@ BEGIN RETURN i; END; -$$ LANGUAGE plpgsql; +$$ LANGUAGE plpgsql;' diff --git a/odd/fib/1_compile_to_wasm b/odd/fib/2_compile_load_show similarity index 65% rename from odd/fib/1_compile_to_wasm rename to odd/fib/2_compile_load_show index 97e2c55..9fc804b 100755 --- a/odd/fib/1_compile_to_wasm +++ b/odd/fib/2_compile_load_show @@ -7,3 +7,7 @@ cargo build --release --target wasm32-unknown-unknown echo "wasm-opt -Os target/wasm32-unknown-unknown/release/fib.wasm -o fib.wasm" wasm-opt -Os target/wasm32-unknown-unknown/release/fib.wasm -o fib.wasm + +gsql -d opengauss -e -c "SELECT wasm_new_instance('/home/opengauss/odd/fib/fib.wasm', 'ws');" + +gsql -d opengauss -e -c "select * from wasm.exported_functions;" diff --git a/odd/fib/3_load_wasm_func b/odd/fib/3_load_wasm_func deleted file mode 100644 index a967901..0000000 --- a/odd/fib/3_load_wasm_func +++ /dev/null @@ -1 +0,0 @@ -SELECT wasm_new_instance('/home/opengauss/odd/fib/fib.wasm', 'gs'); diff --git a/odd/fib/3_sql_benchmark b/odd/fib/3_sql_benchmark new file mode 100755 index 0000000..7219c11 --- /dev/null +++ b/odd/fib/3_sql_benchmark @@ -0,0 +1,3 @@ + +gsql -d opengauss -e -f ./sql_benchmark.sql | tee ./sql.log + diff --git a/odd/fib/4_show_exported_func b/odd/fib/4_show_exported_func deleted file mode 100644 index 3c40ca2..0000000 --- a/odd/fib/4_show_exported_func +++ /dev/null @@ -1 +0,0 @@ -select * from wasm.exported_functions; diff --git a/odd/fib/4_wasm_benchmark b/odd/fib/4_wasm_benchmark new file mode 100755 index 0000000..50ff989 --- /dev/null +++ b/odd/fib/4_wasm_benchmark @@ -0,0 +1,2 @@ + +gsql -d opengauss -e -f ./wasm_benchmark.sql | tee ./wasm.log diff --git a/odd/fib/5_compare_results b/odd/fib/5_compare_results new file mode 100755 index 0000000..1032fea --- /dev/null +++ b/odd/fib/5_compare_results @@ -0,0 +1,22 @@ +#!/bin/bash + +INPUTS=(0 10 30 50 70 90) + +grep "Time: " ./sql.log | awk -F ":" '{print $2}' > ./sql.time +grep "Time: " ./wasm.log | awk -F ":" '{print $2}' > ./wasm.time + +echo "| INPUT | PLPGSQL | WASM |" +echo "---------------------------------------" + +for line in `seq 1 5` +do + sql_time_tmp=`sed -n "${line}p" ./sql.time` + wasm_time_tmp=`sed -n "${line}p" ./wasm.time` + echo "| ${INPUTS[${line}]} | ${sql_time_tmp} | ${wasm_time_tmp} |" +done + +echo "---------------------------------------" + + +rm -f ./sql.time +rm -f ./wasm.time diff --git a/odd/fib/6_timing_wasm b/odd/fib/6_timing_wasm deleted file mode 100644 index 63a9362..0000000 --- a/odd/fib/6_timing_wasm +++ /dev/null @@ -1,14 +0,0 @@ -\timing - -select gs_fib(10); - -select gs_fib(30); - -select gs_fib(50); - -select gs_fib(70); - -select gs_fib(90); - -\timing - diff --git a/odd/fib/5_timing_sql b/odd/fib/sql_benchmark.sql similarity index 92% rename from odd/fib/5_timing_sql rename to odd/fib/sql_benchmark.sql index c574eec..9c59a0b 100644 --- a/odd/fib/5_timing_sql +++ b/odd/fib/sql_benchmark.sql @@ -1,3 +1,4 @@ + \timing select sql_fib(10); @@ -9,6 +10,3 @@ select sql_fib(50); select sql_fib(70); select sql_fib(90); - -\timing - diff --git a/odd/fib/wasm_benchmark.sql b/odd/fib/wasm_benchmark.sql new file mode 100644 index 0000000..73dc9f8 --- /dev/null +++ b/odd/fib/wasm_benchmark.sql @@ -0,0 +1,13 @@ + +\timing + +select ws_fib(10); + +select ws_fib(30); + +select ws_fib(50); + +select ws_fib(70); + +select ws_fib(90); + -- Gitee From 70092bbd82afa78163675611cd9f526679091fb3 Mon Sep 17 00:00:00 2001 From: Nelson-He Date: Tue, 23 May 2023 17:48:47 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E8=B0=83?= =?UTF-8?q?=E7=94=A8fib=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- odd/fib/2_compile_load_show | 4 ++++ odd/fib/5_compare_results | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/odd/fib/2_compile_load_show b/odd/fib/2_compile_load_show index 9fc804b..c0cca5f 100755 --- a/odd/fib/2_compile_load_show +++ b/odd/fib/2_compile_load_show @@ -11,3 +11,7 @@ wasm-opt -Os target/wasm32-unknown-unknown/release/fib.wasm -o fib.wasm gsql -d opengauss -e -c "SELECT wasm_new_instance('/home/opengauss/odd/fib/fib.wasm', 'ws');" gsql -d opengauss -e -c "select * from wasm.exported_functions;" + +gsql -d opengauss -c "select ws_fib(1);" -q -o ./init.log + +rm -f ./init.log diff --git a/odd/fib/5_compare_results b/odd/fib/5_compare_results index 1032fea..81f28b2 100755 --- a/odd/fib/5_compare_results +++ b/odd/fib/5_compare_results @@ -5,7 +5,7 @@ INPUTS=(0 10 30 50 70 90) grep "Time: " ./sql.log | awk -F ":" '{print $2}' > ./sql.time grep "Time: " ./wasm.log | awk -F ":" '{print $2}' > ./wasm.time -echo "| INPUT | PLPGSQL | WASM |" +echo "| INPUT | PLPGSQL | WASM |" echo "---------------------------------------" for line in `seq 1 5` -- Gitee