INT32 bson2csv( CHAR delChar, CHAR delField, CHAR *pbson, CHAR **ppBuffer, INT32 *pCSVSize, BOOLEAN includeBinary, BOOLEAN includeRegex ) { INT32 rc = SDB_OK ; BOOLEAN isFirst = TRUE ; bson_type fieldType ; bson_iterator it ; bson_iterator_from_buffer( &it, pbson ) ; while ( bson_iterator_next( &it ) ) { fieldType = bson_iterator_type( &it ) ; if ( BSON_EOO == fieldType ) { break ; } if ( isFirst ) { isFirst = FALSE ; } else { rc = _appendString( delChar, &delField, 1, ppBuffer, pCSVSize ) ; if ( rc ) { goto error ; } } if ( BSON_UNDEFINED == fieldType ) { continue ; } rc = _appendValue( delChar, &it, ppBuffer, pCSVSize, includeBinary, includeRegex ) ; if ( rc ) { goto error ; } } done: return rc ; error: goto done ; }
result_t _format(const char* sql, const v8::FunctionCallbackInfo<v8::Value>& args, bool mysql, bool mssql, exlib::string& retVal) { exlib::string str; const char *p, *p1; int32_t cnt = 1; while (*sql) { p = p1 = sql; while (*p1 && *p1 != '?') p1++; str.append(p, p1 - p); if (*p1) { p1++; if (cnt < args.Length()) { v8::Local<v8::Value> v = args[cnt]; if (v->IsFunction()) return CHECK_ERROR(CALL_E_INVALIDARG); obj_ptr<Buffer_base> bin = Buffer_base::getInstance(v); if (bin) { exlib::string s; if (mssql) { str.append("0x", 2); bin->hex(s); str.append(s); } else { str.append("x\'", 2); bin->hex(s); str.append(s); str += '\''; } } else if (v->IsArray()) { v8::Local<v8::Array> a = v8::Local<v8::Array>::Cast(v); int32_t len = a->Length(); int32_t i; str += '('; for (i = 0; i < len; i++) { v8::Local<v8::Value> v1 = a->Get(i); if (i > 0) str += ','; _appendValue(str, v1, mysql); } str += ')'; } else _appendValue(str, v, mysql); } else str.append("\'\'", 2); cnt++; } sql = p1; } retVal = str; return 0; }