* PLyObject_FromJsonbValue * * Transform JsonbValue to PyObject. */
| 96 | * Transform JsonbValue to PyObject. |
| 97 | */ |
| 98 | static PyObject * |
| 99 | PLyObject_FromJsonbValue(JsonbValue *jsonbValue) |
| 100 | { |
| 101 | switch (jsonbValue->type) |
| 102 | { |
| 103 | case jbvNull: |
| 104 | Py_RETURN_NONE; |
| 105 | |
| 106 | case jbvBinary: |
| 107 | return PLyObject_FromJsonbContainer(jsonbValue->val.binary.data); |
| 108 | |
| 109 | case jbvNumeric: |
| 110 | { |
| 111 | Datum num; |
| 112 | char *str; |
| 113 | |
| 114 | num = NumericGetDatum(jsonbValue->val.numeric); |
| 115 | str = DatumGetCString(DirectFunctionCall1(numeric_out, num)); |
| 116 | |
| 117 | return PyObject_CallFunction(decimal_constructor, "s", str); |
| 118 | } |
| 119 | |
| 120 | case jbvString: |
| 121 | return PLyString_FromJsonbValue(jsonbValue); |
| 122 | |
| 123 | case jbvBool: |
| 124 | if (jsonbValue->val.boolean) |
| 125 | Py_RETURN_TRUE; |
| 126 | else |
| 127 | Py_RETURN_FALSE; |
| 128 | |
| 129 | default: |
| 130 | elog(ERROR, "unexpected jsonb value type: %d", jsonbValue->type); |
| 131 | return NULL; |
| 132 | } |
| 133 | } |
| 134 | |
| 135 | /* |
| 136 | * PLyObject_FromJsonbContainer |
no test coverage detected