From cb8de80f15ef7246868dfcb0f12e2183d6177161 Mon Sep 17 00:00:00 2001 From: Rakhi Prathap Date: Tue, 5 Aug 2025 12:00:01 +0530 Subject: [PATCH 01/10] add xattrs --- .../n1ql-language-reference/set-clause.png | Bin 11078 -> 18261 bytes .../n1ql-language-reference/unset-attr.png | Bin 0 -> 9399 bytes .../n1ql-language-reference/unset-clause.png | Bin 6753 -> 5192 bytes .../pages/n1ql-language-reference/insert.adoc | 26 +++++++++++++++++- .../pages/n1ql-language-reference/update.adoc | 12 +++++++- modules/n1ql/partials/grammar/dml.ebnf | 15 ++++++++-- 6 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 modules/n1ql/assets/images/n1ql-language-reference/unset-attr.png diff --git a/modules/n1ql/assets/images/n1ql-language-reference/set-clause.png b/modules/n1ql/assets/images/n1ql-language-reference/set-clause.png index d37791c89320670517b2256988cc39e73c3fab59..2c7e07f452be09130120096315915eb9f5040148 100644 GIT binary patch literal 18261 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�}#+pc7;V*@()drWb-#o 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 ah24Kg53{WcfE2_+LCHueN>qy*1^+)?x~W0{ diff --git a/modules/n1ql/assets/images/n1ql-language-reference/unset-attr.png b/modules/n1ql/assets/images/n1ql-language-reference/unset-attr.png new file mode 100644 index 0000000000000000000000000000000000000000..8386850773ddae24dcbfd2968b6f6a545bf98eeb GIT binary patch literal 9399 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 @igV;27*5dYIUJrj%n zlX3KWL(Rin^}>x-!r=sls*(}>hYo1lhw1bBKQu)6_ZnxD{UJ8oj{0cA zq`hJ?xuIsx;i*oT^*hwum(*yQ2hN2w>EQOb89lrZsM)l3UWuL{rq9cI<=V9H#qg5T z+}H1K=~_6M|44w>Nm2ntS0Ss;<3e6JmXbh#`)N*AxylZHO)rSLgSj^WYT^6KL6jCg z38E*6eq8&e`X%<#M2sd|+U-Cbo>>TQ?~u)P=XmY~p30o#AH9QDMk0^Ol_t>dlX&OE zeN^ZUg*XvHpY;1=xZ2cP_etYK*D`W!L42{8DH#;dW!7uc!?9iqzF7YFla%cA^8mb& z^5{P?Yq_gR3cV@M1W$)w5CrgFi%Gq77SQEAXP#-=+_6%M86(GPy0xEE=5Bj-DEf5= zWUKA?9=YryZ<36bQL8;A1-%_0i5q>KGB7JWA(`6q?Re=la0mb-Y2Xz-er|mb&ht){9aC^<6(_|5`>0PzAH~MGVyN|Ux(1l z4VCTVX;5aFA7>(RD<}r`8pE?w5~QXL_{SD+nj-Y5lleB}K(3*(5htw8Ckt#qkq&Jh1KIQEz?z;ujb)nFW6hI*`PiNm0v_r*6q4x%l$3CTiA zPuqd`UMiNUupK|O)>Ak^iAm+*e;kXf36*05C$QL6!+j2`H9YJCO7lE#U!Y%K)sO1O z<3*H%@m4uZHiJfNs1=9V?(dfu$J1ol{!q-ko{GLoz9=r6P8t#{l-o7xoeI;A6mrLl z8*1yNJVXW&D)ay&CAKG%&^lOfOu$!(imq5h%GJY7uvdhC?^d_^uA9(Th<&6}zPCh0 z1z(Zbgw{5-Fh#-__JwFu80~|xBh$^K97z9Q3MyTMGYs8mYQ3>PFe&(9AZd*45J@(! z5n=La5rsm;SGRi*@nrN7k@tn4GVO0nIKQa%u5!6{a(#*W!Meu##(R$luPf`u z3vy4-p<~GbS3RiR6yg!J7i@nkh`;nv9|t$N!D=m5*jK`1SDS9!1|{s9n>=iOPNhj1 zIsDyM4ZaKXgx;Dsda&-2D9H|Vw~Pk#cF+dVQafJ@_}z+B}rEUc-$)*2DdR_1_$ZA0omaAN!$=r*9=Cr`Okivu4VUijER3kP;c( ztFyAoNrY&S9`3(wq!+fEjab>~OtKf~ObTh&zairhW7?HUYKK_`G!d~&VtlaYFi@0O zn2tKVnH779b=teqJN#btBdWeZ#wr6D1um`@yL&a_CDb`og08%}DzU=LtMQE>FaF7h z;kR5f%T=&-?3Qx)r&LD8TLMv#B%i6HG>HNO+;cYLJfv%@uXY-IBl0-(sXMdnYhc{< zdSXMs<*>u>Une!xz)~khqR^5J^G$rmAKdDUd-yQ@w@i>`L(V_@w~nl zPrctF21r~3d=8_-djfV!r-Pt1D{W$1cSlwSKy` zxCfpiq~WSh)v52Hs9*OP=g&HTHd#|Qw!RcCd|MSRo-N>i^FxB|buuCmsonSc73enQ z-ks64-9QY?f+17T2L-LWg7+47?!a&IWp*u!u$`dr>gao(!p;ta(l};>9WwI)Yp>vF zk#3Is6~NyhOE~+h_y}X39Oxyv3}*b6*hz4a;}dwVSZxrO8mJxWAeLTApErU3wEK&f z#rb7{q^FuMbcrDYELw31cx$7Mxt#ZgLa?^R%kTJ@V|N@vD73sF@58ZCs^zME)uVoM z*N`4Cb${=b=MgilD>+qUMUL7Tz0R6YtdNeIChns2E9B+pyi5j!7%;Nc{3hPKS($Un{TDs%AewWx?bu9dtY~H=`w_?Z=CPYHNYT?3=t*EH}M>ZD^mkuc?rkaq~ zK9YNwk<9`BArH{Q$*CJsda(WZbUoY~-JHK=(J8Ar7MXwMZ1{nr38S{G`0yx65{GA* zB!V&fo`h$G!s>HnfyZO>>lKcB$}&Avo3O#lMPCxBU>8OTii>Sj)g~iYyitoOtFDKy zVrl&wZ+H7J#=gsM!TEtuNbn5^}_I|!BWO>fLhTc;eta00NB3D|6N38-3SQm z9%*H)T@wJt6)>+emSqP}X#ZYjw z@~qFmnvkr37aTyos3Rv6O(h;7weqQZI(y~A7o&~}=yI?j>+M`R(a6Lkg**GaJ*S#V_~7>KK*J zxB4TP`!mh#V!k_2jHUKu!g^KzpW+5dl7!~u^Ze446ytc8KMITaleqKLOfmsjD`iqw zpNkYSf2etQssEzih*it%7ql`E%B+gj~OtC|Gw)0?YEYe zZo8g!FP`RnGpDOX4df~8v2B01{a1Oz>?XcPv~3=={QOGkZ_8!~<(HH3i%vAN4ecu* zXZ&UZIG17HVV}A8>geW_kD{bnL}V;hxa1WFC0~r^*vFw&)M86H)S-ciL_jZ8R?H{PgU8qB%{q@rG zPp=Me?WB`LZx<8~|4`L{K+s2-i*(3Or>(V`p^7`Wy3*>NPoyN+vojzunustzlpfUXrFE9NPfmDM{O(U{w zD8Gd@-avoAz`a5m9v`T>+}R;@f_@C=8=u$+fxaCLwL5Zm^ zpK2qhf2ziDS8P>%AvLNtOCO~{!)V(=asAotFFlQ>0<693paYkt)fbuhtA4jotaCrZ zs_5yyiC&5PRZqsz2v1^)2BZta$)jWSm8-q$^JS z(&_!&z24&7VST{7D~CA$sCw>!s2|4*s}T#LDLOCHgc>&c-ju`95tsQET&rYc!VP_G zU@CH)+r7PqW^H~xhb^2Y5H>BREQdXwhhcbO9AW>f5TD^yQAtuvQdnuoi4HjM5aY5N zg7s7hhAI`P_upCidm|UU<_>p{fvyu-!WBKa@BiF;kS4uutxcoX{%Kgn33qaRZX)*P z#Cj_ZMqOAovX2)I-hUH{!llqCJD!^J?3Et}2IZ~oPIFLm6~0idCZF~~MW zj9RodG%k)~Y*OH%EOh6~XoNbAOIKz6qjD@j-hJ87t!58VViysM!!R`)g@j4x%-0Dn zkKAt-M*EmohI`&jt<2a&hzO}tQ5f&pC(N|eT%MJI?Vh;MtJiWk8zc_;|P~A!?An*?~At zbX--t`K@VAKJq$jeRzt1Hao?uRD zl!uX1;;@_SUu!xrq!b-V!c)p+sn|>$jZ>(kl@u1&0>OdyY~Z4h6IBROas@aY#+_>J zR~C2my0J~Av)-+BP`wdW2qKwnR`dKD)6&}O$=wzS)L=+MVApqc?)IrzjL;nRJ-#{T zHX#$P<(dz<6H@Z^n}HKePi_`eOr2_1VNX{QxFUcqh|C9X9jpTkUC}^N&w#-W_wc-f zCHULznFOvRpSA0Lp#j;ke`IrLtanTCOE}~Ed^CPltZ;6i2*GttV%W28t|7A=gwf&} zB7(uj@uur27ZID)mG()nB#i>Vld8^!ZWq>zl`b{gL(lUZ+#Empv!`9Z&XGsv0&vqe zzZSAk3~Ezz_B%R3k1easJ>8WlG5&T*(?`{Y`K(nmQHISOzbq|I$^s3-@=GDL;)^A0j zIT&;Yfu*?5(<;_g{*rmd%|Zxi+q}^4866w|Ea>u&W#|vs^;}eKIV&lRzW?~~2Sg*p zP}dI*5g^c1;D3|N;P5nJbMBI{J$9Fp;=Ice7T+ENKRxCR^SHxOo%Z@}yKKKkL>@71 z8{UQD|B8FSw>2PdKj*X{J(NeEvq!T|hj|wrqc-VC^j;dUoLV(oQeVaS7<#=hptI#Q zhXtQ9yEh?z6oxy*F8alNv{_WyCwGgdjz-Msd>4>QseUWI6Ex+OmyuqiS7m4&+v5;D z+nqN)2jh>!V)@)SNkhcPEE2&2{JV=!!GhUkJz5d`c7sT;mK^?F<%;NbcbB&W7i#^Z$4k_q zkA7XT@!r^@?JYT~?J)qj9FgR_6g3oKn!!?;RryBJ^qpV_93BuOJXF>S_fFn6T?jU z5){M14!xWhCK0T433I~+MvzXxj}st0p9P>K3H108Ges5pwjy-R%u?HRK^p0fr{g8} z{wrMpbniqA3a(->Sjp2at$!tsFB=fxz6bFnG`k}~2EsU2{SpuZgaBhX`(DlTC%*&KJIp=Pf! zmYM1%%&UFdH1W1ffN(Jo3@)8d9q{2ahv85NWm)npWMsvaEm?u@fo%^8>7%q;TRUBI zb5*ONdpfg?*I#dW471AT1p`ZuTi&@xJ}(0h;o)t{_F!;RZ2b4IHxI(bi@QOztv^I~ zkP{4bb0`sis1dwPlr;H_l5Imm05)9G%Xis)Dfh!k*avQ|RXZX7 zJ}-tH=BA25dt2kP zaVZrao(?U)M5#w&LG%-X_xL;;bTV~oY+|wbJio!1>^l%n1I;kd&ZOD4Ie98%<&+~t znS<|7q^M1dWy{u>KFdSg6hO?HM%rd!*>w;%0c z3*S-p^5ApniydsVX&Je=OesrZLG&@#1qDD=syCBu22hg>UQzmFH(D5Xg(2m>c7rf~V}X@hj?%xn)lz6qlpc(1w~ z8hk`4O=3Y9I57!DZj*f-yCm*eQ$@GNl!eJ-M`ARkHi-pcz~tqte@q5BnRQ9rp6=E) zGZN%TwRnV5o5X@JVDgKrBz9KDT@ts8W4#DjurQNS+i;Lm5)e(%Y6M7SUGuzNUA%$- zTM3mv5(|Q83rUS-VM-}MZU{lN2YSwj#DX9Q5(|PL`X$t7(MRFWFh~U~fPhKt?@$(8 z(F@-)_VHk6NHm0}e@8M4H&||6&`NOl@-_TMVnOJg2_rB}Ex~q)7GA8>eanj8HklSt zcf}$(5YXtm0$-0WL4IKsT%1hdI!O0tGcH}H&m=Tt5gN!XpAW6 zu}EOEJOsJBW4)CE>ogKvWcj=3auiNdp9Rrri-NU6fr5Z#thIixp-^-cnYk)aC?<@y z#iX%zlnGq`&qto0JYRYK@_Z(-AUXwWc|K#4k0YWH)Lq9s7k*QmzWAg&Wk45Go39_& z<}--}(Lwj4f98cO?*SFv`zB|I@+LfoT4LsXj+6=AKyChd_tXn`)MwEL5MRiW;F~i^ zQ0XN;sia+xe82ge2NVh^Bsz3amX=jhhIJ60zdoM$ruGHAZofl9mPH>x04A}YQ~HX} z+R{j!SJZZw$3Qz{*jOrbiu*=VF=bfiGW(R6-{gi6e;t7}?8BHLa7}OKuDPNxJ*&J+ z&Nb|}n{~4#Xy>h5;ubugd47{v5FN$Av=rI;ip?X)D`yx7JRf)9HNvq97rsP7U5%)R#gj+Jpax`O=ksz3&nwkR*D26tZ5AIEiXtB zBo;&`3B9WMv9v<{%&PV0g-^e_4qf{&cpt@Me{0S(7779T*ss4J!z+}+h6O#8MckH% zDD3w2&`S3nj^7b*G*Lcrj6G&gbHOk-OSn2)G}^XYrAACbF~Y9o;zURW6N}QO-u6Cb zRrpCHcuGm5s*_j{eGlbz{CC_)Azf3Y2|OE?En`8qZ)fs83g&vSx!Hmg%P(ESPn4?U ze})i!)xuyETq465Hv2yo@+1NxB|s{(63SZGyp*j=WFo=0{Z0Uk#Siq#ac=|(1z8qE z-{(?|>o8yZ3Rlhh3A3POHiHD_O*XX<1QfF6d_dYjuAo?G*cQJT)n^J?^ z5P~2G5(|PLNGu3~Ah93_g2aL#2oei|e;`OK2!bH7AP9nJOs{z;OHi&<91OkqVpMd& zvY7ayq4`Bs#<}?_gB#k;&c;}6ZmKA>w>3V?zc|G|Bx7jTK;w_iUe<7Jm z2KJVv^4u<};d;V%$_lb9I&Dn|8>9!e9ooNTN94k#3*4|}{dgED4BIo}0>{HB4_iFF zc$hpOC~@M>fY?Z1Z()J*s^&OVo&HIkwPwf`MvvA^E)=`=-&pwfH^*byd^dv^il*@E z;n%f&(?k<9BgqfGo>)QEh9I%%e}L=3THJ+OU-yOgaGO4z$o%>~+c;4smrHk!CBYy_ zEOc-`lq(fMCsVgBWvy;s7m9|0@%Y1cOXL#Cf0%_ahl(CSV$lxxU5~ir67$9LhV-k% zUbSR6cTMD40sDQt;HFRgrJ~$#kn~i3_lQ_T#S|`|J#A2*>!WB3e!UY$e>?EpmP4c0 z5zi~9-vtw@M}413E@D2b`i)q`Bow(#_I2!+nLTT&GoSEpSWf0&oYGUYd1V$oGo&5S zy;N9$SDf5_BNlo2Dw9D@X8kg=J>9MAjLDqZPt)mx1huwj2FoS77nuYjnGX`%Z^R8vre`o3=PF8r75-lcERq6-up%j1%J#lF9p{#qn;20X&`iRzT zt=AQ;Mu1e-_OmHkt$+o8sY#dj)_TEfn58)X?GLHge=HRvhg#wNzl}s@t_sh-6(O$k zaI?gR>%7GID^Z2muq_HhT`jP6{U~u+VR1FKe;tog7jjTgR1GJ4e`B}~GQ(r@24ng? z4mk322KF3IYIZKp15NSHiym0@MntRUJJ0V9JpJhHJ8kQ(TM%F?(bGe5f&|By>ThGS zo6yHQJ2Nu#5fzh)2c~zEwC-mBD=lxP80v^{& zFzAiwl#9!S+Gct{0GY@aS|4pwJixN}3%qCZL9rm%K^>=~?=4&L_rq;lY{WX)<7F_O* zEYfH&pGEpz(@5J|-`jX?OC+XFuy3|JI3!yX3L_&a!jAaC%tR(GzaCeN^Oy4*ZR_i0 zgX6oKTlTr(e}53Cdk!aK-G{$p*j*O*HE>3UT~K`)Yb=k}GV$C!W(1U1qLI{HX}xVn z5SA~QQD5m!p8XwWrbd`FVFYf(XF_>74ld4i*cW(Kv=rB@nhS4F*P05No`?T_eFEtj zd9b&$6f5dP-nK>{q zHfnZWYPA+0efk|TvkFjNQHh~$&RG4FKP)ZHaO{6d*1%NZtAI0bV8@+$-$?v$JY3wa zF5V~DHN_`pp}4plce>c))Gt>t%-y-uBGpmGjleuMSt}DTQFqTpxB6Qr63hW`X=tZP zoA|!+f7(dXSfmHI`Jv1Dp2pVN2;)cDB0Eoojh|j`w%)u(8&OrI#iMI3;vc(ih?c_8 zAp`K|MRzqecXKMR^^4g0aQZ?ndNa(TIL_RWZA^X6jq}8m?mF%#{|;iV-K}wkf=^$; zuc6W6{EhewtlzX3yZ4=h-_%i}AS_?~2{g=%f8$}%^3AZZHpjBX(=o)=5y7Xfi2I#8 zAB8pRzQD{GWAHo^mkVJr*swVO5{X2N!`MiU!Gr9@Ad|G*?WWeKQC?mtR_-MWry?pk z6>DDkqNbeK4uDK1h0{Q5F^&Nirf{&gVlJYzK3*eMqe8=D@H#vHwXg3&PHrIz3QD^@ ze_!3*Va)2=nhrxxSr9O+>L@Fv#TkCs^rNI&u ze_!v7`=2<6uaBg_-nwy%<2Pv_rcH3b*|1!MUdb1O*y-qGiXHEc!#!hc8;FGpTRxAe z|G)b2yD?)@@4h=35rq$YMj%Nd;Ltb^e<;~>zgC8Dt1={3Y+ zj#++V;4yq~jj7IT?VVr#+$i3f^S=|j|Mdc-((ZZxYZ0?HlZL@nBZX&eXXX-C-y-GA zqPTQjKX*Zz)?apM$C($tsi`H=F0rV$ZGkINK0aj|>(y!`vV)p-MdiQMe<3vL%V-S` zcT22VG6bLPjTb|sibLbCZiO$m z`quxqFjsU*;pnPwN3f)u!+z#SwW6=fkJBUY7Q8+?4SQRAJhOZz9(d?& z(M7n2xgV=n_+t=rS#HE-;H~%e;oZ&qZ>7Ik>(88VYbGusOPqIfuoA_Be~ZMkFYORr z9WT#2nG3|M8LjR~?O<=ISD|PtzY}idU&Fj~Vs1f#Y}UoHXm17KnPh39Kyhg`lG4gCxwh^mr`MRhHdZZH;B_m9 z)4;!{e+I~+%XGsJasrrpuv zKD^`d!*$+Rx;CuQ^2nHCJh~>7xgz%P@v;#++>V~i6xYpV$7x7RVhR4Z`h5L=e(UsK zo5q4@%s}SrheyQ0fBo(|keHl}h${)0b^n+)_sh;HL@cu)xFF1!;w>&)zhSR9^?zWj z=!%RPHAL)BsIF4u1amd!%p50nQ1aWS6{;%HN@@yWk`fU&Uxb~Xdr=Qp!vd_CKbSNc1gY{a`3+?wFL z`q%k*^_{OUe}4MQu(h^8L2(&oO!gMV!e^8l?jGWZ2{T?6M`Zrx_y@4IZk{(!{^@=^ zx_k@9PI*Zb4Bk)Ckd;r)!r$K5h4()S#EPZ&W93u+@b?>wsdL^CJ5cxST-(>Os?GXa zyR22wkkpzfXl&dt%e-Et`=Lb2OcFK>`XIve@_n{wp zy&Iy-XZ834O{HZjxD2w>`B*tOi%?lv4QD6YM*SO{vhqsg7nCs9(HaV)#vXH4c7f=w zaLc1L)U3p3<`lq&366z%^FEJ~k_vVV6`UMx8l8`kT;8GpbvVBpd{(cA+>j2{Uw*fQ ziv~O4f7R@~Ywjh=Wf*e1NZMN89dHZ4Oiz6X`izT!Sg|@=&G*agkRrbq_yOC5(rI#>BdPFP+m@5j?f3wQ_WrBzOcC+4PWZ)pOze?=Hv=StxmDZ&^e^@VtiXcH^ zaU1xMenv)8Wk673ze?=aHa8f_Pyl}nHJFMZL1NJcd`Q2Y0kNv9F$Mi1p|^Y$N^V8KT##UUz!1c^l(@UcIus)a|Mf9Im6uL}kjiUSR;C<#I&K)9|SF(HV4DHfd2 ztC}B6E7Z@dT7O>n^sDRWYke5JkK(a4XBrEIfPL)OUy$JyDt?3^(c`12M?_(_uZLE; z_i+4iDT?BdzuS|xmm*1*}|X_f3sYrModC6!mi}vL`Vh`izXjS;X=W`Q6Rxn zN&_2JogjM6dkN!4Vm7o0l+=7`&a_XZGVh~ct_PdWW){Wrh->(%H=k}-ePe?#>`~NZ zz2!tQa}nq4gafRY@?rfPB&>q57PyiHZv7Y;Sh|+75|PfXC5#n~tE}d^N+rl;TvxJ~ z2}O8sKl#j?*vNyk12$0g)_>ZP8=?=@tuf8#^O3r02jH2-tPTDqvZ1{nZXpOLWarIC o6bfV3#6~4`W)cKJ5dDGw2iNS6{d8w1J^%m!07*qoM6N<$g16rD-~a#s literal 6753 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 diff --git a/modules/n1ql/pages/n1ql-language-reference/insert.adoc b/modules/n1ql/pages/n1ql-language-reference/insert.adoc index fa2df61e7..f54f3ced6 100644 --- a/modules/n1ql/pages/n1ql-language-reference/insert.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/insert.adoc @@ -230,13 +230,20 @@ You can insert NULL, empty, or MISSING values. options:: [Optional] An object representing the metadata to be set for the inserted document. -Only the `expiration` attribute has any effect; any other attributes are ignored. +Only the listed attribute have any effect; any other attributes are ignored. expiration::: An integer, or an expression resolving to an integer, representing the {document-expiration}[document expiration] in seconds. + If the document expiration is not specified, it defaults to `0`, meaning the document expiration is the same as the {bucket-expiration}[bucket or collection expiration]. +xattrs::: +An object containing extended attribute (XATTR) names as top-level keys and their corresponding JSON values. ++ +The object does not replace all existing extended attributes. +It only includes attributes you want to add or update, and you must provide the complete value for each attribute. +You cannot make partial updates to only nested fields as the entire top-level value is replaced. + For examples illustrating the VALUES clause, see <>. [[insert-select]] @@ -988,6 +995,23 @@ curl -v http://localhost:8093/query/service -u Administrator:password \ ---- ==== +[[example-xattr]] +.Insert a document with XATTRs +==== +Insert a document into the `airline` keyspace with extended attributes (XATTRs). + +.Query +[source,sqlpp] +---- +INSERT INTO airline (KEY, VALUE, OPTIONS) + VALUES ("airline:1402", + { "callsign": "MY-AIR", + "country": "United States", + "type": "airline" }, + { "xattrs": { "metadata": { "created_by": "admin", "created_at": "2025-08-05" } } }); +---- +==== + [#insert-explain-plan] == Explain Plan diff --git a/modules/n1ql/pages/n1ql-language-reference/update.adoc b/modules/n1ql/pages/n1ql-language-reference/update.adoc index 4c091d361..8ba2be394 100644 --- a/modules/n1ql/pages/n1ql-language-reference/update.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/update.adoc @@ -191,14 +191,24 @@ include::partial$grammar/dml.ebnf[tag=unset-clause] image::n1ql-language-reference/unset-clause.png["Syntax diagram: refer to source code listing", align=left] +[source,ebnf] +---- +include::partial$grammar/dml.ebnf[tag=unset-attr] +---- + +image::n1ql-language-reference/unset-attr.png["Syntax diagram: refer to source code listing", align=left] + Removes the specified attribute from the document. -[horizontal.compact] +[horizontal] path:: A <> specifying the attribute to be removed. update-for:: <> icon:caret-down[] +meta:: A META().xattrs. expression specifying the extended attribute (XATTR) of the document being updated. +Individual fields in composite XATTR values may be referenced directly through the nested path. + [NOTE] You cannot use the UNSET clause to unset the document expiration. To unset the document expiration, set the document expiration to `0`. diff --git a/modules/n1ql/partials/grammar/dml.ebnf b/modules/n1ql/partials/grammar/dml.ebnf index 423ee2a61..7e3cca847 100644 --- a/modules/n1ql/partials/grammar/dml.ebnf +++ b/modules/n1ql/partials/grammar/dml.ebnf @@ -144,14 +144,23 @@ returning-clause ::= 'RETURNING' (result-expr (',' result-expr)* | /* end::returning-clause[] */ /* tag::set-clause[] */ -set-clause ::= 'SET' ( meta '=' expiration | path '=' expr update-for? ) - ( ',' ( meta '=' expiration | path '=' expr update-for? ) )* +set-clause ::= 'SET' ( meta '=' expiration | + 'meta().' 'xattrs.' identifier ('.' identifier)* '=' expr | + path '=' expr update-for? ) + ( ',' ( meta '=' expiration | + 'meta().' 'xattrs.' identifier ('.' identifier)* '=' expr | + path '=' expr update-for? ) )* /* end::set-clause[] */ /* tag::unset-clause[] */ -unset-clause ::= 'UNSET' path update-for? (',' path update-for?)* +unset-clause ::= 'UNSET' unset-attr ( ',' unset-attr )* /* end::unset-clause[] */ +/* tag::unset-attr[] */ +unset-attr ::= path update-for? + | meta '.' xattrs '.' xattr-name ( '.' path )? +/* end::unset-attr[] */ + /* tag::update-for[] */ update-for ::= ('FOR' (name-var ':')? var ('IN' | 'WITHIN') path (',' (name-var ':')? var ('IN' | 'WITHIN') path)* )+ From 6d665f7e3179d91bceaa54d315633f2fdb2402ec Mon Sep 17 00:00:00 2001 From: Rakhi Prathap Date: Wed, 6 Aug 2025 11:45:40 +0530 Subject: [PATCH 02/10] Update multiple pages --- .../n1ql-language-reference/set-clause.png | Bin 18261 -> 12552 bytes .../n1ql-language-reference/unset-clause.png | Bin 5192 -> 8661 bytes modules/n1ql/examples/dml/set-xattr.jsonc | 17 +++++ modules/n1ql/examples/dml/set-xattr.n1ql | 8 +++ modules/n1ql/examples/dml/unset-xattr.n1ql | 3 + .../indexing-meta-info.adoc | 4 ++ .../pages/n1ql-language-reference/insert.adoc | 8 +-- .../n1ql-language-reference/metafun.adoc | 10 +++ .../pages/n1ql-language-reference/update.adoc | 62 ++++++++++++++---- .../pages/n1ql-language-reference/upsert.adoc | 11 +++- modules/n1ql/partials/grammar/dml.ebnf | 15 +---- 11 files changed, 108 insertions(+), 30 deletions(-) create mode 100644 modules/n1ql/examples/dml/set-xattr.jsonc create mode 100644 modules/n1ql/examples/dml/set-xattr.n1ql create mode 100644 modules/n1ql/examples/dml/unset-xattr.n1ql diff --git a/modules/n1ql/assets/images/n1ql-language-reference/set-clause.png b/modules/n1ql/assets/images/n1ql-language-reference/set-clause.png index 2c7e07f452be09130120096315915eb9f5040148..fb5547fc4c69a37239925b81fda6c4426df22460 100644 GIT binary patch literal 12552 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�}#+pc7;V*@()drWb-#o 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 RP@5^xWF?ir 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 diff --git a/modules/n1ql/examples/dml/set-xattr.jsonc b/modules/n1ql/examples/dml/set-xattr.jsonc new file mode 100644 index 000000000..3d39c7612 --- /dev/null +++ b/modules/n1ql/examples/dml/set-xattr.jsonc @@ -0,0 +1,17 @@ +[{ + "a": { + "airportname": "San Francisco Intl", + "city": "San Francisco", + "country": "United States", + "faa": "SFO", + "geo": { + "alt": 13, + "lat": 37.618972, + "lon": -122.374889 + }, + "icao": "KSFO", + "id": 3469, + "type": "airport", + "tz": "America/Los_Angeles" + } +}] \ No newline at end of file diff --git a/modules/n1ql/examples/dml/set-xattr.n1ql b/modules/n1ql/examples/dml/set-xattr.n1ql new file mode 100644 index 000000000..fe1d1d663 --- /dev/null +++ b/modules/n1ql/examples/dml/set-xattr.n1ql @@ -0,0 +1,8 @@ +UPDATE airport AS a +SET META(a).xattrs.metadata = { + "lastUpdatedBy": "Admin", + "reviewed": true, + "notes": "Updated terminal info" +} +WHERE a.faa = "SFO" +RETURNING a; \ No newline at end of file diff --git a/modules/n1ql/examples/dml/unset-xattr.n1ql b/modules/n1ql/examples/dml/unset-xattr.n1ql new file mode 100644 index 000000000..e0b8436dc --- /dev/null +++ b/modules/n1ql/examples/dml/unset-xattr.n1ql @@ -0,0 +1,3 @@ +UPDATE airport AS a +UNSET META(a).xattrs.metadata +WHERE a.faa = "SFO"; \ No newline at end of file diff --git a/modules/n1ql/pages/n1ql-language-reference/indexing-meta-info.adoc b/modules/n1ql/pages/n1ql-language-reference/indexing-meta-info.adoc index 78a4453f4..292b9f8ef 100644 --- a/modules/n1ql/pages/n1ql-language-reference/indexing-meta-info.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/indexing-meta-info.adoc @@ -24,8 +24,12 @@ Note that this property gives correct results only when used in a xref:n1ql-lang id:: include::./metafun.adoc[tag=metadata-id] +xattrs:: +include::./metafun.adoc[tag=metadata-xattr] + The `META()` function does not require a keyspace parameter when creating an index, since it implicitly uses the keyspace being indexed. + == Examples include::ROOT:partial$query-context.adoc[tag=section] diff --git a/modules/n1ql/pages/n1ql-language-reference/insert.adoc b/modules/n1ql/pages/n1ql-language-reference/insert.adoc index f54f3ced6..8873130cb 100644 --- a/modules/n1ql/pages/n1ql-language-reference/insert.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/insert.adoc @@ -238,11 +238,11 @@ An integer, or an expression resolving to an integer, representing the {document If the document expiration is not specified, it defaults to `0`, meaning the document expiration is the same as the {bucket-expiration}[bucket or collection expiration]. xattrs::: -An object containing extended attribute (XATTR) names as top-level keys and their corresponding JSON values. +An object containing top-level extended attribute (XATTR) names and their corresponding JSON values. +It includes only the attributes you want to add or update, and does not replace all existing attributes. + -The object does not replace all existing extended attributes. -It only includes attributes you want to add or update, and you must provide the complete value for each attribute. -You cannot make partial updates to only nested fields as the entire top-level value is replaced. +You must provide the complete value for each attribute. +You cannot specify only the nested fields within an attribute, as the insert operation sets the full value at the top-level. For examples illustrating the VALUES clause, see <>. diff --git a/modules/n1ql/pages/n1ql-language-reference/metafun.adoc b/modules/n1ql/pages/n1ql-language-reference/metafun.adoc index 97412bfb0..e99ea4461 100644 --- a/modules/n1ql/pages/n1ql-language-reference/metafun.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/metafun.adoc @@ -1026,6 +1026,16 @@ type::: Value for the type of document; currently only `json` is supported. This property is not indexable. If you attempt to build an index on this property, an error is returned. +[[meta-xattr]] +xattrs::: +// tag::metadata-xattr[] +Value representing extended attributes (XATTRs) of a document. +To access XATTRs, use the syntax `META().xattrs.`, where `` can be a top-level key or a subpath within the `xattrs` object. +Attempting to select the entire `META().xattrs` object will return an empty result. ++ +While you can create an index on a specific extended attribute like `META().xattrs.attr1`, you cannot create an index on the entire `META().xattrs` object itself. +// end::metadata-xattr[] + === Return Value The bare function returns a JSON object containing the specified document's metadata. diff --git a/modules/n1ql/pages/n1ql-language-reference/update.adoc b/modules/n1ql/pages/n1ql-language-reference/update.adoc index 8ba2be394..df4a281c2 100644 --- a/modules/n1ql/pages/n1ql-language-reference/update.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/update.adoc @@ -8,6 +8,7 @@ :logical-hierarchy: xref:n1ql-intro/queriesandresults.adoc#logical-hierarchy :document-expiration: xref:java-sdk:howtos:kv-operations.adoc#document-expiration :meta: xref:n1ql-language-reference/metafun.adoc#meta +:meta-xattr: xref:n1ql-language-reference/metafun.adoc#meta-xattr :returning-clause: xref:n1ql-language-reference/insert.adoc#returning-clause :use-keys-clause: xref:n1ql-language-reference/hints.adoc#use-keys-clause :preserve_expiry: xref:n1ql:n1ql-manage/query-settings.adoc#preserve_expiry @@ -168,15 +169,25 @@ The value may be a generic expression term, a subquery, or an expression that re update-for:: <> icon:caret-down[] -The SET clause also supports alternative arguments which enable you to set the expiration of the document. +The SET clause also supports alternative arguments which enable you to set the expiration and extended attributes of the document. [horizontal] -meta:: -A {meta}[META().expiration] expression specifying the expiration property of the document being updated. +meta:: -expiration:: +A META() expression specifying the document metadata. ++ +To set the expiration property, use {meta}[META().expiration]. +To set extended attributes (XATTR), use {meta-xattr}[META().xattrs.[.path\]] + +expiration::: An integer, or an expression resolving to an integer, representing the {document-expiration}[document expiration] in seconds. +xattrs::: +An object containing one or more extended attribute (XATTR) names as top-level keys and their corresponding JSON values. ++ +You must provide the complete value for each attribute. +You cannot specify only the nested fields within an attribute as the entire top-level value is updated. + [NOTE] If the document expiration is not specified, the document expiration is set according to the request-level {preserve_expiry}[preserve_expiry] parameter. If this is `true`, the existing document expiration is preserved; if `false`, the document expiration defaults to `0`, meaning the document expiration is the same as the {bucket-expiration}[bucket or collection expiration]. @@ -191,13 +202,6 @@ include::partial$grammar/dml.ebnf[tag=unset-clause] image::n1ql-language-reference/unset-clause.png["Syntax diagram: refer to source code listing", align=left] -[source,ebnf] ----- -include::partial$grammar/dml.ebnf[tag=unset-attr] ----- - -image::n1ql-language-reference/unset-attr.png["Syntax diagram: refer to source code listing", align=left] - Removes the specified attribute from the document. [horizontal] @@ -206,8 +210,12 @@ A <> specifying the attribute to be removed. update-for:: <> icon:caret-down[] -meta:: A META().xattrs. expression specifying the extended attribute (XATTR) of the document being updated. -Individual fields in composite XATTR values may be referenced directly through the nested path. +meta-xattr:: +An expression specifying the extended attribute (XATTR) to be removed. +The format is {meta-xattr}[META().xattrs.[.path\]], where: +* `` is the top-level key of the XATTR object. +* `path` is an optional subpath within the XATTR object. +You can directly reference individual fields in composite XATTR values through the nested path. [NOTE] You cannot use the UNSET clause to unset the document expiration. @@ -420,3 +428,31 @@ Alternatively, if the request-level {preserve_expiry}[preserve_expiry] parameter include::example$dml/update-unset-expire-alt.n1ql[] ---- ==== + +[[example-10]] +.Update a document and set an extended attribute (XATTR) +==== + +.Query +[source,sqlpp] +---- +include::example$dml/set-xattr.n1ql[] +---- + +.Result +[source,json] +---- +include::example$dml/set-xattr.jsonc[] +---- +==== + +[[example-11]] +.Update a document and unset an extended attribute (XATTR) +==== + +.Query +[source,sqlpp] +---- +include::example$dml/unset-xattr.n1ql[] +---- +==== diff --git a/modules/n1ql/pages/n1ql-language-reference/upsert.adoc b/modules/n1ql/pages/n1ql-language-reference/upsert.adoc index 9cc2c18bc..100883026 100644 --- a/modules/n1ql/pages/n1ql-language-reference/upsert.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/upsert.adoc @@ -181,8 +181,17 @@ Also enables you to set the {document-expiration}[expiration] of the upserted do For details, refer to {values-clause}[VALUES Clause]. [NOTE] -When updating a document, if the document expiration is not specified, the document expiration is set according to the request-level {preserve_expiry}[preserve_expiry] parameter. +==== +When updating a document: + +* If the document expiration is not specified, the document expiration is set according to the request-level {preserve_expiry}[preserve_expiry] parameter. If this is `true`, the existing document expiration is preserved; if `false`, the document expiration defaults to `0`, meaning the document expiration is the same as the {bucket-expiration}[bucket or collection expiration]. +* For extended attributes (XATTRs), the object includes only the attributes you want to add or update, and does not replace all existing attributes. +You must provide the complete value for each attribute. +You cannot specify only the nested fields within an attribute as the entire top-level value is updated. ++ +For example, if an existing XATTR named `a` has the value `{"b":1}`, an upsert operation with the option `{"xattrs":{"a":{"c":1}}}` completely replaces the value of `a` with `{"c":1}`. +==== [[insert-select]] === Insert Select diff --git a/modules/n1ql/partials/grammar/dml.ebnf b/modules/n1ql/partials/grammar/dml.ebnf index 7e3cca847..fa4f80c73 100644 --- a/modules/n1ql/partials/grammar/dml.ebnf +++ b/modules/n1ql/partials/grammar/dml.ebnf @@ -144,23 +144,14 @@ returning-clause ::= 'RETURNING' (result-expr (',' result-expr)* | /* end::returning-clause[] */ /* tag::set-clause[] */ -set-clause ::= 'SET' ( meta '=' expiration | - 'meta().' 'xattrs.' identifier ('.' identifier)* '=' expr | - path '=' expr update-for? ) - ( ',' ( meta '=' expiration | - 'meta().' 'xattrs.' identifier ('.' identifier)* '=' expr | - path '=' expr update-for? ) )* +set-clause ::= 'SET' ( path '=' expr update-for? | meta '=' ( expiration | xattrs ) ) + ( ',' ( path '=' expr update-for? | meta '=' ( expiration | xattrs ) ) )* /* end::set-clause[] */ /* tag::unset-clause[] */ -unset-clause ::= 'UNSET' unset-attr ( ',' unset-attr )* +unset-clause ::= 'UNSET' ( path update-for? | meta-xattr ) ( ',' ( path update-for? | meta-xattr ) )* /* end::unset-clause[] */ -/* tag::unset-attr[] */ -unset-attr ::= path update-for? - | meta '.' xattrs '.' xattr-name ( '.' path )? -/* end::unset-attr[] */ - /* tag::update-for[] */ update-for ::= ('FOR' (name-var ':')? var ('IN' | 'WITHIN') path (',' (name-var ':')? var ('IN' | 'WITHIN') path)* )+ From c905fe3ad9d3a6651eea59d1a65fce472175390c Mon Sep 17 00:00:00 2001 From: Rakhi Prathap Date: Wed, 6 Aug 2025 13:21:09 +0530 Subject: [PATCH 03/10] More changes --- .../n1ql-language-reference/unset-attr.png | Bin 9399 -> 0 bytes .../pages/n1ql-language-reference/insert.adoc | 11 ++++++----- .../pages/n1ql-language-reference/metafun.adoc | 11 ++++++++--- .../pages/n1ql-language-reference/update.adoc | 16 ++++++---------- .../pages/n1ql-language-reference/upsert.adoc | 5 +++-- 5 files changed, 23 insertions(+), 20 deletions(-) delete mode 100644 modules/n1ql/assets/images/n1ql-language-reference/unset-attr.png diff --git a/modules/n1ql/assets/images/n1ql-language-reference/unset-attr.png b/modules/n1ql/assets/images/n1ql-language-reference/unset-attr.png deleted file mode 100644 index 8386850773ddae24dcbfd2968b6f6a545bf98eeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9399 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 @igV;27*5dYIUJrj%n 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. @@ -996,9 +997,9 @@ curl -v http://localhost:8093/query/service -u Administrator:password \ ==== [[example-xattr]] -.Insert a document with XATTRs +.Insert a document with an extended attribute (XATTR) ==== -Insert a document into the `airline` keyspace with extended attributes (XATTRs). +Insert a document into the `airline` keyspace with an extended attribute, `metadata`. .Query [source,sqlpp] diff --git a/modules/n1ql/pages/n1ql-language-reference/metafun.adoc b/modules/n1ql/pages/n1ql-language-reference/metafun.adoc index e99ea4461..32b5ba7ae 100644 --- a/modules/n1ql/pages/n1ql-language-reference/metafun.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/metafun.adoc @@ -1026,14 +1026,19 @@ type::: Value for the type of document; currently only `json` is supported. This property is not indexable. If you attempt to build an index on this property, an error is returned. -[[meta-xattr]] xattrs::: // tag::metadata-xattr[] Value representing extended attributes (XATTRs) of a document. -To access XATTRs, use the syntax `META().xattrs.`, where `` can be a top-level key or a subpath within the `xattrs` object. ++ +-- +To access XATTRs, use the syntax `META().xattrs.[.]`, where: + +* `` is a top-level attribute name or key of the XATTR object. +* `` is an optional subpath within that attribute. +-- Attempting to select the entire `META().xattrs` object will return an empty result. + -While you can create an index on a specific extended attribute like `META().xattrs.attr1`, you cannot create an index on the entire `META().xattrs` object itself. +Also, while you can create an index on a specific extended attribute like `META().xattrs.attr1`, you cannot create an index on the entire `META().xattrs` object itself. // end::metadata-xattr[] === Return Value diff --git a/modules/n1ql/pages/n1ql-language-reference/update.adoc b/modules/n1ql/pages/n1ql-language-reference/update.adoc index df4a281c2..82d0d3b38 100644 --- a/modules/n1ql/pages/n1ql-language-reference/update.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/update.adoc @@ -8,7 +8,6 @@ :logical-hierarchy: xref:n1ql-intro/queriesandresults.adoc#logical-hierarchy :document-expiration: xref:java-sdk:howtos:kv-operations.adoc#document-expiration :meta: xref:n1ql-language-reference/metafun.adoc#meta -:meta-xattr: xref:n1ql-language-reference/metafun.adoc#meta-xattr :returning-clause: xref:n1ql-language-reference/insert.adoc#returning-clause :use-keys-clause: xref:n1ql-language-reference/hints.adoc#use-keys-clause :preserve_expiry: xref:n1ql:n1ql-manage/query-settings.adoc#preserve_expiry @@ -160,7 +159,7 @@ image::n1ql-language-reference/set-clause.png["Syntax diagram: refer to source c Specifies the value for an attribute to be changed. -[horizontal] +[horizontal.compact] path:: A <> specifying the attribute to be changed. @@ -177,16 +176,13 @@ meta:: A META() expression specifying the document metadata. + To set the expiration property, use {meta}[META().expiration]. -To set extended attributes (XATTR), use {meta-xattr}[META().xattrs.[.path\]] +To set extended attributes (XATTR), use {meta}[META().xattrs.[.path\]] expiration::: An integer, or an expression resolving to an integer, representing the {document-expiration}[document expiration] in seconds. xattrs::: -An object containing one or more extended attribute (XATTR) names as top-level keys and their corresponding JSON values. -+ -You must provide the complete value for each attribute. -You cannot specify only the nested fields within an attribute as the entire top-level value is updated. +An object containing one or more extended attribute (XATTR) names as top-level keys and their corresponding JSON values. [NOTE] If the document expiration is not specified, the document expiration is set according to the request-level {preserve_expiry}[preserve_expiry] parameter. @@ -212,9 +208,9 @@ update-for:: <> icon:caret-down[] meta-xattr:: An expression specifying the extended attribute (XATTR) to be removed. -The format is {meta-xattr}[META().xattrs.[.path\]], where: -* `` is the top-level key of the XATTR object. -* `path` is an optional subpath within the XATTR object. +The format is {meta-xattr}[META().xattrs.[.\]], where: +* `` is a top-level attribute name or key of the XATTR object. +* `` is an optional subpath within that attribute. You can directly reference individual fields in composite XATTR values through the nested path. [NOTE] diff --git a/modules/n1ql/pages/n1ql-language-reference/upsert.adoc b/modules/n1ql/pages/n1ql-language-reference/upsert.adoc index 100883026..81a8aaf51 100644 --- a/modules/n1ql/pages/n1ql-language-reference/upsert.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/upsert.adoc @@ -186,9 +186,10 @@ When updating a document: * If the document expiration is not specified, the document expiration is set according to the request-level {preserve_expiry}[preserve_expiry] parameter. If this is `true`, the existing document expiration is preserved; if `false`, the document expiration defaults to `0`, meaning the document expiration is the same as the {bucket-expiration}[bucket or collection expiration]. -* For extended attributes (XATTRs), the object includes only the attributes you want to add or update, and does not replace all existing attributes. +* For extended attributes (XATTRs), the object includes only the attributes you want to add or update. +It does not affect other existing attributes. You must provide the complete value for each attribute. -You cannot specify only the nested fields within an attribute as the entire top-level value is updated. +You cannot specify only the individual nested fields, as each attribute is updated as a whole. + For example, if an existing XATTR named `a` has the value `{"b":1}`, an upsert operation with the option `{"xattrs":{"a":{"c":1}}}` completely replaces the value of `a` with `{"c":1}`. ==== From c02b2f597ccbdb98003a1ccf9feae10373b82fca Mon Sep 17 00:00:00 2001 From: Rakhi Prathap Date: Wed, 6 Aug 2025 13:31:09 +0530 Subject: [PATCH 04/10] More changes --- modules/n1ql/pages/n1ql-language-reference/update.adoc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/n1ql/pages/n1ql-language-reference/update.adoc b/modules/n1ql/pages/n1ql-language-reference/update.adoc index 82d0d3b38..92ed2ff8a 100644 --- a/modules/n1ql/pages/n1ql-language-reference/update.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/update.adoc @@ -159,7 +159,7 @@ image::n1ql-language-reference/set-clause.png["Syntax diagram: refer to source c Specifies the value for an attribute to be changed. -[horizontal.compact] +[horizontal] path:: A <> specifying the attribute to be changed. @@ -176,7 +176,8 @@ meta:: A META() expression specifying the document metadata. + To set the expiration property, use {meta}[META().expiration]. -To set extended attributes (XATTR), use {meta}[META().xattrs.[.path\]] ++ +To set extended attributes (XATTR), use {meta}[META().xattrs.[.\]] expiration::: An integer, or an expression resolving to an integer, representing the {document-expiration}[document expiration] in seconds. @@ -208,7 +209,7 @@ update-for:: <> icon:caret-down[] meta-xattr:: An expression specifying the extended attribute (XATTR) to be removed. -The format is {meta-xattr}[META().xattrs.[.\]], where: +The format is {meta}[META().xattrs.[.\]], where: * `` is a top-level attribute name or key of the XATTR object. * `` is an optional subpath within that attribute. You can directly reference individual fields in composite XATTR values through the nested path. From f5601ed03848a3444a44bb25046fbd339cef67ad Mon Sep 17 00:00:00 2001 From: Rakhi Prathap Date: Wed, 6 Aug 2025 14:03:40 +0530 Subject: [PATCH 05/10] Update the Insert Select section --- modules/n1ql/pages/n1ql-language-reference/insert.adoc | 10 +++++++++- modules/n1ql/pages/n1ql-language-reference/update.adoc | 5 ++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/modules/n1ql/pages/n1ql-language-reference/insert.adoc b/modules/n1ql/pages/n1ql-language-reference/insert.adoc index ad941cf52..77d89d053 100644 --- a/modules/n1ql/pages/n1ql-language-reference/insert.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/insert.adoc @@ -271,13 +271,21 @@ If the VALUE is omitted, the entire JSON document generated by the SELECT statem options:: [Optional] An object representing the metadata to be set for the inserted document. -Only the `expiration` attribute has any effect; any other attributes are ignored. +Only the listed attributes have any effect; any other attributes are ignored. expiration::: An integer, or an expression resolving to an integer, representing the {document-expiration}[document expiration] in seconds. + If the document expiration is not specified, it defaults to `0`, meaning the document expiration is the same as the {bucket-expiration}[bucket or collection expiration]. +xattrs::: +An object containing top-level extended attribute (XATTR) names and their corresponding JSON values. ++ +The object only includes the attributes you want to add or update. It does not affect other existing attributes. ++ +You must provide the complete value for each attribute. +You cannot specify only the individual nested fields, as each attribute is updated as a whole. + select:: <> icon:caret-down[] [[select-statement]] diff --git a/modules/n1ql/pages/n1ql-language-reference/update.adoc b/modules/n1ql/pages/n1ql-language-reference/update.adoc index 92ed2ff8a..58eaa0535 100644 --- a/modules/n1ql/pages/n1ql-language-reference/update.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/update.adoc @@ -209,11 +209,14 @@ update-for:: <> icon:caret-down[] meta-xattr:: An expression specifying the extended attribute (XATTR) to be removed. ++ +-- The format is {meta}[META().xattrs.[.\]], where: + * `` is a top-level attribute name or key of the XATTR object. * `` is an optional subpath within that attribute. You can directly reference individual fields in composite XATTR values through the nested path. - +-- [NOTE] You cannot use the UNSET clause to unset the document expiration. To unset the document expiration, set the document expiration to `0`. From 64cecc046d1e7fc243edf7b241d234ef4d6d2296 Mon Sep 17 00:00:00 2001 From: Rakhi Prathap Date: Wed, 6 Aug 2025 14:15:09 +0530 Subject: [PATCH 06/10] Update UPSERT --- .../n1ql/pages/n1ql-language-reference/upsert.adoc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/modules/n1ql/pages/n1ql-language-reference/upsert.adoc b/modules/n1ql/pages/n1ql-language-reference/upsert.adoc index 81a8aaf51..d83e91cf1 100644 --- a/modules/n1ql/pages/n1ql-language-reference/upsert.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/upsert.adoc @@ -209,8 +209,18 @@ Also enables you to set the {document-expiration}[expiration] of the upserted do For details, refer to {insert-select}[Insert Select]. [NOTE] -When updating a document, if the document expiration is not specified, the document expiration is set according to the request-level {preserve_expiry}[preserve_expiry] parameter. +==== +When updating a document: + +* If the document expiration is not specified, the document expiration is set according to the request-level {preserve_expiry}[preserve_expiry] parameter. If this is `true`, the existing document expiration is preserved; if `false`, the document expiration defaults to `0`, meaning the document expiration is the same as the {bucket-expiration}[bucket or collection expiration]. +* For extended attributes (XATTRs), the object includes only the attributes you want to add or update. +It does not affect other existing attributes. +You must provide the complete value for each attribute. +You cannot specify only the individual nested fields, as each attribute is updated as a whole. ++ +For example, if an existing XATTR named `a` has the value `{"b":1}`, an upsert operation with the option `{"xattrs":{"a":{"c":1}}}` completely replaces the value of `a` with `{"c":1}`. +==== //// [[select-statement]] From 0df9f2584d69065d31fe211eae28f3cf36a23310 Mon Sep 17 00:00:00 2001 From: Rakhi Prathap Date: Wed, 6 Aug 2025 17:49:22 +0530 Subject: [PATCH 07/10] Add notes to highlight the 8.0 changes --- .../indexing-meta-info.adoc | 2 ++ .../pages/n1ql-language-reference/insert.adoc | 14 +++++---- .../n1ql-language-reference/metafun.adoc | 5 ++-- .../pages/n1ql-language-reference/upsert.adoc | 30 +++++++------------ 4 files changed, 23 insertions(+), 28 deletions(-) diff --git a/modules/n1ql/pages/n1ql-language-reference/indexing-meta-info.adoc b/modules/n1ql/pages/n1ql-language-reference/indexing-meta-info.adoc index 292b9f8ef..ee3eb55ca 100644 --- a/modules/n1ql/pages/n1ql-language-reference/indexing-meta-info.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/indexing-meta-info.adoc @@ -26,6 +26,8 @@ include::./metafun.adoc[tag=metadata-id] xattrs:: include::./metafun.adoc[tag=metadata-xattr] ++ +NOTE: Starting with Couchbase Server 8.0, you can index any number of XATTR fields using the xref:n1ql:n1ql-language-reference/createindex.adoc[CREATE INDEX] statement. The `META()` function does not require a keyspace parameter when creating an index, since it implicitly uses the keyspace being indexed. diff --git a/modules/n1ql/pages/n1ql-language-reference/insert.adoc b/modules/n1ql/pages/n1ql-language-reference/insert.adoc index 77d89d053..c0258226c 100644 --- a/modules/n1ql/pages/n1ql-language-reference/insert.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/insert.adoc @@ -240,10 +240,11 @@ If the document expiration is not specified, it defaults to `0`, meaning the doc xattrs::: An object containing top-level extended attribute (XATTR) names and their corresponding JSON values. + -The object only includes the attributes you want to add or update. It does not affect other existing attributes. +The object includes only the attributes you want to add or update and does not affect other existing attributes. +For each atttribute, you must provide its complete value. +You cannot specify or update individual nested fields, as each attribute is updated as a whole. + -You must provide the complete value for each attribute. -You cannot specify only the individual nested fields, as each attribute is updated as a whole. +NOTE: Starting with Couchbase Server 8.0, you can include up to 15 XATTRs per query. For examples illustrating the VALUES clause, see <>. @@ -281,10 +282,11 @@ If the document expiration is not specified, it defaults to `0`, meaning the doc xattrs::: An object containing top-level extended attribute (XATTR) names and their corresponding JSON values. + -The object only includes the attributes you want to add or update. It does not affect other existing attributes. +The object includes only the attributes you want to add or update and does not affect other existing attributes. +For each atttribute, you must provide its complete value. +You cannot specify or update individual nested fields, as each attribute is updated as a whole. + -You must provide the complete value for each attribute. -You cannot specify only the individual nested fields, as each attribute is updated as a whole. +NOTE: Starting with Couchbase Server 8.0, you can include up to 15 XATTRs per query. select:: <> icon:caret-down[] diff --git a/modules/n1ql/pages/n1ql-language-reference/metafun.adoc b/modules/n1ql/pages/n1ql-language-reference/metafun.adoc index 32b5ba7ae..89bb7d5c9 100644 --- a/modules/n1ql/pages/n1ql-language-reference/metafun.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/metafun.adoc @@ -1036,10 +1036,11 @@ To access XATTRs, use the syntax `META().xattrs.[.]`, where: * `` is a top-level attribute name or key of the XATTR object. * `` is an optional subpath within that attribute. -- -Attempting to select the entire `META().xattrs` object will return an empty result. + -Also, while you can create an index on a specific extended attribute like `META().xattrs.attr1`, you cannot create an index on the entire `META().xattrs` object itself. +While you can create an index on a specific extended attribute like `META().xattrs.attr1`, you cannot create an index on the entire `META().xattrs` object itself. // end::metadata-xattr[] ++ +Attempting to select the entire `META().xattrs` object will return an empty result. === Return Value diff --git a/modules/n1ql/pages/n1ql-language-reference/upsert.adoc b/modules/n1ql/pages/n1ql-language-reference/upsert.adoc index d83e91cf1..eba0975be 100644 --- a/modules/n1ql/pages/n1ql-language-reference/upsert.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/upsert.adoc @@ -182,16 +182,11 @@ For details, refer to {values-clause}[VALUES Clause]. [NOTE] ==== -When updating a document: - -* If the document expiration is not specified, the document expiration is set according to the request-level {preserve_expiry}[preserve_expiry] parameter. -If this is `true`, the existing document expiration is preserved; if `false`, the document expiration defaults to `0`, meaning the document expiration is the same as the {bucket-expiration}[bucket or collection expiration]. -* For extended attributes (XATTRs), the object includes only the attributes you want to add or update. -It does not affect other existing attributes. -You must provide the complete value for each attribute. -You cannot specify only the individual nested fields, as each attribute is updated as a whole. -+ -For example, if an existing XATTR named `a` has the value `{"b":1}`, an upsert operation with the option `{"xattrs":{"a":{"c":1}}}` completely replaces the value of `a` with `{"c":1}`. +* When updating a document, if the document expiration is not specified, the document expiration is set according to the request-level preserve_expiry parameter. If this is true, the existing document expiration is preserved; if false, the document expiration defaults to 0, meaning the document expiration is the same as the bucket or collection expiration. + +* When adding or updating extended attributes (XATTRs), you must provide the complete value for each attribute. +You cannot specify or update individual nested fields, as each attribute is updated as a whole. +For example, if an existing XATTR named `a` has the value `{"b":1}`, an UPSERT operation with the option `{"xattrs":{"a":{"c":1}}}` completely replaces the value of `a` with `{"c":1}`. ==== [[insert-select]] @@ -210,16 +205,11 @@ For details, refer to {insert-select}[Insert Select]. [NOTE] ==== -When updating a document: - -* If the document expiration is not specified, the document expiration is set according to the request-level {preserve_expiry}[preserve_expiry] parameter. -If this is `true`, the existing document expiration is preserved; if `false`, the document expiration defaults to `0`, meaning the document expiration is the same as the {bucket-expiration}[bucket or collection expiration]. -* For extended attributes (XATTRs), the object includes only the attributes you want to add or update. -It does not affect other existing attributes. -You must provide the complete value for each attribute. -You cannot specify only the individual nested fields, as each attribute is updated as a whole. -+ -For example, if an existing XATTR named `a` has the value `{"b":1}`, an upsert operation with the option `{"xattrs":{"a":{"c":1}}}` completely replaces the value of `a` with `{"c":1}`. +* When updating a document, if the document expiration is not specified, the document expiration is set according to the request-level preserve_expiry parameter. If this is true, the existing document expiration is preserved; if false, the document expiration defaults to 0, meaning the document expiration is the same as the bucket or collection expiration. + +* When adding or updating extended attributes (XATTRs), you must provide the complete value for each attribute. +You cannot specify or update individual nested fields, as each attribute is updated as a whole. +For example, if an existing XATTR named `a` has the value `{"b":1}`, an UPSERT operation with the option `{"xattrs":{"a":{"c":1}}}` completely replaces the value of `a` with `{"c":1}`. ==== //// From a8a1de05083c43d375dcb269651b78428b6d4c5d Mon Sep 17 00:00:00 2001 From: Rakhi Prathap Date: Mon, 11 Aug 2025 18:50:56 +0530 Subject: [PATCH 08/10] Add a note to metafun.adoc --- modules/n1ql/pages/n1ql-language-reference/metafun.adoc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/n1ql/pages/n1ql-language-reference/metafun.adoc b/modules/n1ql/pages/n1ql-language-reference/metafun.adoc index 89bb7d5c9..2e56138dc 100644 --- a/modules/n1ql/pages/n1ql-language-reference/metafun.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/metafun.adoc @@ -1041,6 +1041,8 @@ While you can create an index on a specific extended attribute like `META().xatt // end::metadata-xattr[] + Attempting to select the entire `META().xattrs` object will return an empty result. ++ +NOTE: Starting with Couchbase Server 8.0, you can include up to 15 XATTRs per query. === Return Value From bc197648fcddfe1965f485020df2f21414d848ad Mon Sep 17 00:00:00 2001 From: Rakhi Prathap Date: Mon, 11 Aug 2025 18:57:58 +0530 Subject: [PATCH 09/10] Remove an extra space --- .../n1ql/pages/n1ql-language-reference/indexing-meta-info.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/n1ql/pages/n1ql-language-reference/indexing-meta-info.adoc b/modules/n1ql/pages/n1ql-language-reference/indexing-meta-info.adoc index ee3eb55ca..13e9f29f4 100644 --- a/modules/n1ql/pages/n1ql-language-reference/indexing-meta-info.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/indexing-meta-info.adoc @@ -27,7 +27,7 @@ include::./metafun.adoc[tag=metadata-id] xattrs:: include::./metafun.adoc[tag=metadata-xattr] + -NOTE: Starting with Couchbase Server 8.0, you can index any number of XATTR fields using the xref:n1ql:n1ql-language-reference/createindex.adoc[CREATE INDEX] statement. +NOTE: Starting with Couchbase Server 8.0, you can index any number of XATTR fields using the xref:n1ql:n1ql-language-reference/createindex.adoc[CREATE INDEX] statement. The `META()` function does not require a keyspace parameter when creating an index, since it implicitly uses the keyspace being indexed. From c0219993e385aa3cd8026eb4e26acc0c07ad8b21 Mon Sep 17 00:00:00 2001 From: Rakhi Prathap Date: Tue, 12 Aug 2025 09:58:01 +0530 Subject: [PATCH 10/10] Fix formatting and language errors --- modules/n1ql/pages/n1ql-language-reference/insert.adoc | 4 ++-- modules/n1ql/pages/n1ql-language-reference/update.adoc | 8 ++++---- modules/n1ql/pages/n1ql-language-reference/upsert.adoc | 6 ++++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/modules/n1ql/pages/n1ql-language-reference/insert.adoc b/modules/n1ql/pages/n1ql-language-reference/insert.adoc index c0258226c..4e3d16961 100644 --- a/modules/n1ql/pages/n1ql-language-reference/insert.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/insert.adoc @@ -230,7 +230,7 @@ You can insert NULL, empty, or MISSING values. options:: [Optional] An object representing the metadata to be set for the inserted document. -Only the listed attribute have any effect; any other attributes are ignored. +Only the listed attributes have any effect; the statement ignores the others. expiration::: An integer, or an expression resolving to an integer, representing the {document-expiration}[document expiration] in seconds. @@ -272,7 +272,7 @@ If the VALUE is omitted, the entire JSON document generated by the SELECT statem options:: [Optional] An object representing the metadata to be set for the inserted document. -Only the listed attributes have any effect; any other attributes are ignored. +Only the listed attributes have any effect; the statement ignores the others. expiration::: An integer, or an expression resolving to an integer, representing the {document-expiration}[document expiration] in seconds. diff --git a/modules/n1ql/pages/n1ql-language-reference/update.adoc b/modules/n1ql/pages/n1ql-language-reference/update.adoc index 58eaa0535..71deb5c39 100644 --- a/modules/n1ql/pages/n1ql-language-reference/update.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/update.adoc @@ -181,14 +181,14 @@ To set extended attributes (XATTR), use {meta}[META().xattrs.[. expiration::: An integer, or an expression resolving to an integer, representing the {document-expiration}[document expiration] in seconds. - -xattrs::: -An object containing one or more extended attribute (XATTR) names as top-level keys and their corresponding JSON values. - ++ [NOTE] If the document expiration is not specified, the document expiration is set according to the request-level {preserve_expiry}[preserve_expiry] parameter. If this is `true`, the existing document expiration is preserved; if `false`, the document expiration defaults to `0`, meaning the document expiration is the same as the {bucket-expiration}[bucket or collection expiration]. +xattrs::: +An object containing one or more extended attribute (XATTR) names as top-level keys and their corresponding JSON values. + [[unset-clause]] === UNSET Clause diff --git a/modules/n1ql/pages/n1ql-language-reference/upsert.adoc b/modules/n1ql/pages/n1ql-language-reference/upsert.adoc index eba0975be..85335d0c1 100644 --- a/modules/n1ql/pages/n1ql-language-reference/upsert.adoc +++ b/modules/n1ql/pages/n1ql-language-reference/upsert.adoc @@ -182,7 +182,8 @@ For details, refer to {values-clause}[VALUES Clause]. [NOTE] ==== -* When updating a document, if the document expiration is not specified, the document expiration is set according to the request-level preserve_expiry parameter. If this is true, the existing document expiration is preserved; if false, the document expiration defaults to 0, meaning the document expiration is the same as the bucket or collection expiration. +* When updating a document, if the document expiration is not specified, the document expiration is set according to the request-level {preserve_expiry}[preserve_expiry] parameter. +If this is `true`, the existing document expiration is preserved; if `false`, the document expiration defaults to `0`, meaning the document expiration is the same as the {bucket-expiration}[bucket or collection expiration]. * When adding or updating extended attributes (XATTRs), you must provide the complete value for each attribute. You cannot specify or update individual nested fields, as each attribute is updated as a whole. @@ -205,7 +206,8 @@ For details, refer to {insert-select}[Insert Select]. [NOTE] ==== -* When updating a document, if the document expiration is not specified, the document expiration is set according to the request-level preserve_expiry parameter. If this is true, the existing document expiration is preserved; if false, the document expiration defaults to 0, meaning the document expiration is the same as the bucket or collection expiration. +* When updating a document, if the document expiration is not specified, the document expiration is set according to the request-level {preserve_expiry}[preserve_expiry] parameter. +If this is `true`, the existing document expiration is preserved; if `false`, the document expiration defaults to `0`, meaning the document expiration is the same as the {bucket-expiration}[bucket or collection expiration]. * When adding or updating extended attributes (XATTRs), you must provide the complete value for each attribute. You cannot specify or update individual nested fields, as each attribute is updated as a whole.