| 409 | |
| 410 | |
| 411 | static void |
| 412 | WriterSingleQual(pgbson_writer *writer, Expr *qual) |
| 413 | { |
| 414 | List *args; |
| 415 | const MongoQueryOperator *operator = GetMongoQueryOperatorFromIndexOrRuntimeExpr( |
| 416 | (Node *) qual, &args); |
| 417 | |
| 418 | if (list_length(args) != 2 || operator->operatorType == QUERY_OPERATOR_UNKNOWN) |
| 419 | { |
| 420 | /* Check if it's for the shard_key_value or object_id */ |
| 421 | if (IsA(qual, OpExpr)) |
| 422 | { |
| 423 | OpExpr *opExpr = (OpExpr *) qual; |
| 424 | if (IsA(linitial(opExpr->args), Var)) |
| 425 | { |
| 426 | Var *firstVar = (Var *) linitial(opExpr->args); |
| 427 | if (firstVar->varno == INDEX_VAR && |
| 428 | firstVar->varattno == |
| 429 | DOCUMENT_DATA_TABLE_SHARD_KEY_VALUE_VAR_ATTR_NUMBER && |
| 430 | firstVar->vartype == INT8OID) |
| 431 | { |
| 432 | return; |
| 433 | } |
| 434 | else if (firstVar->varno == INDEX_VAR && |
| 435 | firstVar->varattno == |
| 436 | DOCUMENT_DATA_TABLE_OBJECT_ID_VAR_ATTR_NUMBER && |
| 437 | firstVar->vartype == BsonTypeId()) |
| 438 | { |
| 439 | /* Object_Id qual - write as object_id filter */ |
| 440 | Expr *secondArg = lsecond(opExpr->args); |
| 441 | if (IsA(secondArg, Const)) |
| 442 | { |
| 443 | Const *secondConst = (Const *) secondArg; |
| 444 | pgbsonelement secondElement; |
| 445 | PgbsonToSinglePgbsonElementWithCollation(DatumGetPgBson( |
| 446 | secondConst-> |
| 447 | constvalue), |
| 448 | &secondElement); |
| 449 | |
| 450 | const char *operatorName = "$unknown"; |
| 451 | if (opExpr->opno == BsonEqualOperatorId()) |
| 452 | { |
| 453 | operatorName = "$eq"; |
| 454 | } |
| 455 | else if (opExpr->opno == BsonLessThanOperatorId()) |
| 456 | { |
| 457 | operatorName = "$lt"; |
| 458 | } |
| 459 | else if (opExpr->opno == BsonLessThanEqualOperatorId()) |
| 460 | { |
| 461 | operatorName = "$lte"; |
| 462 | } |
| 463 | else if (opExpr->opno == BsonGreaterThanOperatorId()) |
| 464 | { |
| 465 | operatorName = "$gt"; |
| 466 | } |
| 467 | else if (opExpr->opno == BsonGreaterThanEqualOperatorId()) |
| 468 | { |
no test coverage detected