Implement JSON mode.
FossilOrigin-Name: c3b6339162a4feb6de9828d613bf2c5a43f2b0e5dead9cf5c24cf78ac821b305
This commit is contained in:
@@ -404,6 +404,7 @@ static void qrfEncodeText(Qrf *p, sqlite3_str *pOut, const char *zTxt){
|
||||
if( i>0 ){
|
||||
sqlite3_str_append(pOut, (const char*)z, i);
|
||||
}
|
||||
if( z[i]==0 ) break;
|
||||
switch( z[i] ){
|
||||
case '"': sqlite3_str_append(pOut, "\\\"", 2); break;
|
||||
case '\\': sqlite3_str_append(pOut, "\\\\", 2); break;
|
||||
@@ -1124,6 +1125,20 @@ static void qrfInitialize(
|
||||
sz = sizeof(sqlite3_qrf_spec);
|
||||
memcpy(&p->spec, pSpec, sz);
|
||||
if( p->spec.zNull==0 ) p->spec.zNull = "";
|
||||
switch( p->spec.eFormat ){
|
||||
case QRF_MODE_List: {
|
||||
if( p->spec.zColumnSep==0 ) p->spec.zColumnSep = "|";
|
||||
if( p->spec.zRowSep==0 ) p->spec.zRowSep = "\n";
|
||||
break;
|
||||
}
|
||||
case QRF_MODE_Json: {
|
||||
p->spec.zColumnSep = ",";
|
||||
p->spec.eQuote = QRF_TXT_Json;
|
||||
p->spec.eBlob = QRF_BLOB_Json;
|
||||
p->spec.zNull = "null";
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( p->spec.eBlob==QRF_BLOB_Auto ){
|
||||
switch( p->spec.eQuote ){
|
||||
case QRF_TXT_Sql: p->spec.eBlob = QRF_BLOB_Sql; break;
|
||||
@@ -1153,6 +1168,22 @@ static void qrfOneSimpleRow(Qrf *p){
|
||||
/* No-op */
|
||||
break;
|
||||
}
|
||||
case QRF_MODE_Json: {
|
||||
if( p->nRow==0 ){
|
||||
sqlite3_str_append(p->pOut, "[{", 2);
|
||||
}else{
|
||||
sqlite3_str_append(p->pOut, "},\n{", 4);
|
||||
}
|
||||
for(i=0; i<p->nCol; i++){
|
||||
const char *zCName = sqlite3_column_name(p->pStmt, i);
|
||||
if( i>0 ) sqlite3_str_append(p->pOut, ",", 1);
|
||||
qrfEncodeText(p, p->pOut, zCName);
|
||||
sqlite3_str_append(p->pOut, ":", 1);
|
||||
qrfRenderValue(p, p->pOut, i);
|
||||
}
|
||||
qrfWrite(p);
|
||||
break;
|
||||
}
|
||||
default: { /* QRF_MODE_List */
|
||||
if( p->nRow==0 && p->spec.bShowCNames ){
|
||||
for(i=0; i<p->nCol; i++){
|
||||
@@ -1185,6 +1216,11 @@ static void qrfFinalize(Qrf *p){
|
||||
qrfWrite(p);
|
||||
break;
|
||||
}
|
||||
case QRF_MODE_Json: {
|
||||
sqlite3_str_append(p->pOut, "}]\n", 3);
|
||||
qrfWrite(p);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( p->spec.pzOutput ){
|
||||
*p->spec.pzOutput = sqlite3_str_finish(p->pOut);
|
||||
|
||||
12
manifest
12
manifest
@@ -1,5 +1,5 @@
|
||||
C Assigned\swidths\sand\salignments\son\scolumns.
|
||||
D 2025-10-22T21:24:17.507
|
||||
C Implement\sJSON\smode.
|
||||
D 2025-10-23T16:22:01.504
|
||||
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
@@ -417,7 +417,7 @@ F ext/misc/windirent.h 02211ce51f3034c675f2dbf4d228194d51b3ee05734678bad5106fff6
|
||||
F ext/misc/zipfile.c 09e6e3a3ff40a99677de3c0bc6569bd5f4709b1844ac3d1c1452a456c5a62f1c
|
||||
F ext/misc/zorder.c bddff2e1b9661a90c95c2a9a9c7ecd8908afab5763256294dd12d609d4664eee
|
||||
F ext/qrf/qrf-tester.c 4212d01e1408591c6e6b081d119e125c97efea5a2f97f4ff05c28b8a5e1272bc
|
||||
F ext/qrf/qrf.c 7a7ffe0839f36618dd16139c9452b609732a374fa56010cf6f69850b60255ca1
|
||||
F ext/qrf/qrf.c a28c67a3b94877c622f089a70b2b5229460dcc4efb14cf4fd46320a1b8a24ee5
|
||||
F ext/qrf/qrf.h 8ad45ac2a8661010c936778bb017cb691fddf2fe27546feb28ca67a0f88967e3
|
||||
F ext/qrf/qrf.md 4eea619191dab7bbf483eff3fe3b074a07d7c8c50bc86070a4485797d386d1ff
|
||||
F ext/rbu/rbu.c 801450b24eaf14440d8fd20385aacc751d5c9d6123398df41b1b5aa804bf4ce8
|
||||
@@ -2175,8 +2175,8 @@ F tool/version-info.c 33d0390ef484b3b1cb685d59362be891ea162123cea181cb8e6d2cf6dd
|
||||
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
|
||||
F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
|
||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||
P ed1c8a62ff6985845a2b664f12752f97404b0449e4290d8604a215406590290c
|
||||
R 225cfbc7236ef4dc95d19fc105dec938
|
||||
P f6359f2fa776ef04449660a3452fdf7ee943523bf3290f3c0e15693962bca1db
|
||||
R e501606c5f55a19731b28d802dbcbb18
|
||||
U drh
|
||||
Z bcc06565d01477b5bd4c299226559b64
|
||||
Z 064a6cc1daa2659726b38baf8932124c
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
||||
@@ -1 +1 @@
|
||||
f6359f2fa776ef04449660a3452fdf7ee943523bf3290f3c0e15693962bca1db
|
||||
c3b6339162a4feb6de9828d613bf2c5a43f2b0e5dead9cf5c24cf78ac821b305
|
||||
|
||||
Reference in New Issue
Block a user