diff --git a/native/cpp/CommonCpp/DatabaseManagers/entities/Nullable.h b/native/cpp/CommonCpp/DatabaseManagers/entities/Nullable.h new file mode 100644 --- /dev/null +++ b/native/cpp/CommonCpp/DatabaseManagers/entities/Nullable.h @@ -0,0 +1,38 @@ +#pragma once + +#include +#include + +namespace comm { + +template struct Nullable { + T value; + bool isNull; + + Nullable() : value(T()), isNull(true) { + } + + Nullable(const std::unique_ptr &ptr) + : value((ptr) ? *ptr : T()), isNull(!ptr) { + } + + Nullable &operator=(const std::unique_ptr &ptr) { + if (ptr) { + value = *ptr; + isNull = false; + } else { + value = T(); + isNull = true; + } + return *this; + } + + std::unique_ptr resetValue() const { + return isNull ? nullptr : std::make_unique(value); + } +}; + +using NullableString = Nullable; +using NullableInt = Nullable; + +} // namespace comm diff --git a/web/cpp/SQLiteQueryExecutorBindings.cpp b/web/cpp/SQLiteQueryExecutorBindings.cpp --- a/web/cpp/SQLiteQueryExecutorBindings.cpp +++ b/web/cpp/SQLiteQueryExecutorBindings.cpp @@ -1,4 +1,6 @@ #include "SQLiteQueryExecutor.cpp" +#include "entities/Nullable.h" + #include #include @@ -7,6 +9,10 @@ using namespace emscripten; EMSCRIPTEN_BINDINGS(SQLiteQueryExecutor) { + value_object("NullableString") + .field("value", &NullableString::value) + .field("isNull", &NullableString::isNull); + value_object("Draft") .field("key", &Draft::key) .field("text", &Draft::text); diff --git a/web/database/_generated/comm-query-executor.js b/web/database/_generated/comm-query-executor.js --- a/web/database/_generated/comm-query-executor.js +++ b/web/database/_generated/comm-query-executor.js @@ -133,13 +133,13 @@ 0}:function(h,n){return n};R(a,{name:b,fromWireType:g,toWireType:c,argPackAdvance:8,readValueFromPointer:gc(b,f,0!==d),ab:null})},c:function(a,b,c){function d(g){g>>=2;var k=E;return new f(va,k[g+1],k[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=S(c);R(a,{name:c,fromWireType:d,argPackAdvance:8,readValueFromPointer:d},{ud:!0})},y:function(a,b){b=S(b);var c="std::string"===b;R(a,{name:b,fromWireType:function(d){var f=E[d>>2],g=d+4;if(c)for(var k= g,h=0;h<=f;++h){var n=g+h;if(h==f||0==z[n]){k=y(k,n-k);if(void 0===q)var q=k;else q+=String.fromCharCode(0),q+=k;k=n+1}}else{q=Array(f);for(h=0;h>2]=k;if(c&& g)ta(f,z,n,k+1);else if(g)for(g=0;gwa;var h=1}else 4===b&&(d=lc,f=mc,g=nc,k=()=>E,h=2);R(a,{name:c,fromWireType:function(n){for(var q=E[n>>2],p=k(),r,v=n+4,l=0;l<=q;++l){var t=n+4+l*b;if(l== -q||0==p[t>>h])v=d(v,t-v),void 0===r?r=v:(r+=String.fromCharCode(0),r+=v),v=t+b}X(n);return r},toWireType:function(n,q){"string"!=typeof q&&T("Cannot pass non-string to C++ string type "+c);var p=g(q),r=wc(4+p+b);E[r>>2]=p>>h;f(q,r+4,p+b);null!==n&&n.push(X,r);return r},argPackAdvance:8,readValueFromPointer:mb,ab:function(n){X(n)}})},j:function(a,b,c,d,f,g){kb[a]={name:S(b),lc:W(c,d),jb:W(f,g),Fc:[]}},g:function(a,b,c,d,f,g,k,h,n,q){kb[a].Fc.push({ld:S(b),td:c,Kb:W(d,f),sd:g,Md:k,Ld:W(h,n),Nd:q})}, +q||0==p[t>>h])v=d(v,t-v),void 0===r?r=v:(r+=String.fromCharCode(0),r+=v),v=t+b}X(n);return r},toWireType:function(n,q){"string"!=typeof q&&T("Cannot pass non-string to C++ string type "+c);var p=g(q),r=wc(4+p+b);E[r>>2]=p>>h;f(q,r+4,p+b);null!==n&&n.push(X,r);return r},argPackAdvance:8,readValueFromPointer:mb,ab:function(n){X(n)}})},i:function(a,b,c,d,f,g){kb[a]={name:S(b),lc:W(c,d),jb:W(f,g),Fc:[]}},g:function(a,b,c,d,f,g,k,h,n,q){kb[a].Fc.push({ld:S(b),td:c,Kb:W(d,f),sd:g,Md:k,Ld:W(h,n),Nd:q})}, ea:function(a,b){b=S(b);R(a,{xd:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},w:function(){return Date.now()},z:function(a,b,c){a=ec(a);b=oc(b,"emval::as");var d=[],f=Sb(d);E[c>>2]=f;return b.toWireType(d,a)},ka:function(a,b,c,d){a=rc[a];b=ec(b);c=qc(c);a(b,c,null,d)},ia:dc,ja:function(a,b){var c=tc(a,b),d=c[0];b=d.name+"_$"+c.slice(1).map(function(p){return p.name}).join("_")+"$";var f=uc[b];if(void 0!==f)return f;f=["retType"];for(var g=[d],k="",h=0;h>2]=a.getSeconds();D[b+4>>2]=a.getMinutes();D[b+8>>2]=a.getHours();D[b+12>>2]=a.getDate();D[b+16>>2]=a.getMonth();D[b+20>>2]=a.getFullYear()-1900;D[b+24>>2]=a.getDay(); var c=new Date(a.getFullYear(),0,1);D[b+28>>2]=(a.getTime()-c.getTime())/864E5|0;D[b+36>>2]=-(60*a.getTimezoneOffset());var d=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();c=c.getTimezoneOffset();D[b+32>>2]=(d!=c&&a.getTimezoneOffset()==Math.min(c,d))|0},N:function(a,b,c,d,f,g){try{var k=M.lb(d);if(!k)return-8;var h=M.qb(k,a,f,b,c),n=h.La;D[g>>2]=h.tc;return n}catch(q){if("undefined"==typeof M||!(q instanceof M.Ga))throw q;return-q.Ma}},O:function(a,b,c,d,f,g){try{var k=M.lb(f);if(k&&c&2){var h= z.slice(a,a+b);M.zb(k,h,g,b,d)}}catch(n){if("undefined"==typeof M||!(n instanceof M.Ga))throw n;return-n.Ma}},aa:yc,k:function(){x("")},K:function(){return 2147483648},v:zc,l:function(a){var b=z.length;a>>>=0;if(2147483648=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);var f=Math;d=Math.max(a,d);f=f.min.call(f,2147483648,d+(65536-d%65536)%65536);a:{try{pa.grow(f-va.byteLength+65535>>>16);za();var g=1;break a}catch(k){}g=void 0}if(g)return!0}return!1},Q:function(a,b){var c= -0;Bc().forEach(function(d,f){var g=b+c;f=E[a+4*f>>2]=g;for(g=0;g>0]=d.charCodeAt(g);A[f>>0]=0;c+=d.length+1});return 0},R:function(a,b){var c=Bc();E[a>>2]=c.length;var d=0;c.forEach(function(f){d+=f.length+1});E[b>>2]=d;return 0},i:function(a){try{var b=P(a);M.close(b);return 0}catch(c){if("undefined"==typeof M||!(c instanceof M.Ga))throw c;return c.Ma}},I:function(a,b){try{var c=P(a);A[b>>0]=c.tty?2:M.Sa(c.mode)?3:M.yb(c.mode)?7:4;return 0}catch(d){if("undefined"==typeof M||!(d instanceof +0;Bc().forEach(function(d,f){var g=b+c;f=E[a+4*f>>2]=g;for(g=0;g>0]=d.charCodeAt(g);A[f>>0]=0;c+=d.length+1});return 0},R:function(a,b){var c=Bc();E[a>>2]=c.length;var d=0;c.forEach(function(f){d+=f.length+1});E[b>>2]=d;return 0},j:function(a){try{var b=P(a);M.close(b);return 0}catch(c){if("undefined"==typeof M||!(c instanceof M.Ga))throw c;return c.Ma}},I:function(a,b){try{var c=P(a);A[b>>0]=c.tty?2:M.Sa(c.mode)?3:M.yb(c.mode)?7:4;return 0}catch(d){if("undefined"==typeof M||!(d instanceof M.Ga))throw d;return d.Ma}},t:function(a,b,c,d){try{a:{var f=P(a);a=b;for(var g=b=0;g>2],h=E[a+4>>2];a+=8;var n=M.read(f,A,k,h,void 0);if(0>n){var q=-1;break a}b+=n;if(n>2]=q;return 0}catch(p){if("undefined"==typeof M||!(p instanceof M.Ga))throw p;return p.Ma}},C:function(a,b,c,d,f){try{b=c+2097152>>>0<4194305-!!b?(b>>>0)+4294967296*c:NaN;if(isNaN(b))return 61;var g=P(a);M.cb(g,b,d);G=[g.position>>>0,(F=g.position,1<=+Math.abs(F)?0>>0:~~+Math.ceil((F-+(~~F>>>0))/4294967296)>>>0:0)];D[f>>2]=G[0];D[f+4>>2]=G[1];g.ac&&0===b&&0===d&&(g.ac=null);return 0}catch(k){if("undefined"==typeof M||!(k instanceof M.Ga))throw k;return k.Ma}},T:function(a){try{var b=P(a);return b.Ka&&b.Ka.fsync?-b.Ka.fsync(b):0}catch(c){if("undefined"==typeof M||!(c instanceof M.Ga))throw c;return c.Ma}},p:function(a,b,c,d){try{a:{var f=P(a);a=b;for(var g=b=0;g>2],h=E[a+4>>2];a+=8;var n=M.write(f,A,k,h,void 0);if(0>n){var q= -1;break a}b+=n}q=b}E[d>>2]=q;return 0}catch(p){if("undefined"==typeof M||!(p instanceof M.Ga))throw p;return p.Ma}},F:function(){},G:function(a,b,c,d){return Gc(a,b,c,d)}},Z=function(){function a(c){e.asm=c.exports;pa=e.asm.ma;za();Aa=e.asm.ra;Ca.unshift(e.asm.na);Ka("wasm-instantiate")}var b={a:Lc};Ja("wasm-instantiate");if(e.instantiateWasm)try{return e.instantiateWasm(b,a)}catch(c){return u("Module.instantiateWasm callback failed with error: "+c),!1}b=Na(b);a(b[0]);return e.asm}(); diff --git a/web/database/_generated/comm_query_executor.wasm b/web/database/_generated/comm_query_executor.wasm index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@ = { + +value: T, + +isNull: boolean, +}; + +export type NullableString = Nullable; + +export type NullableInt = Nullable;