Skip to content

[Bug] incorrect conversion of batch insertion in Datastore #875

Description

@dg3feiko

Env

Node: 2.3.3
gcloud: 0.21.0

Problem

for single insert

var res;

        data = [
            {
                name: "foo",
                value: {
                    bar: [
                        {hello: 1},
                        {hello: 2}
                    ]
                }
            }
        ];

        //save to datastore
        res = yield dataset.saveAsync([
                {
                    key: dataset.key({
                        path: ['MyKind', "123"]
                    }),
                    data: data
                },

            ]
        );

        res = yield dataset.getAsync(
            dataset.key(['MyKind', "123"])
        );

        console.log(JSON.stringify(res, null, 2));

output

{
  "key": {
    "path": [
      "MyKind",
      123
    ]
  },
  "data": {
    "foo": {
      "bar": [
        {
          "hello": 1
        },
        {
          "hello": 2
        }
      ]
    }
  }
}

but for multiple inserts

var res;

        data = [
            {
                name: "foo",
                value: {
                    bar: [
                        {hello: 1},
                        {hello: 2}
                    ]
                }
            }
        ];

        //save to datastore
        res = yield dataset.saveAsync([
                {
                    key: dataset.key({
                        path: ['MyKind', "123"]
                    }),
                    data: data
                },
                {
                    key: dataset.key({
                        path: ['MyKind', "234"]
                    }),
                    data: data
                }
            ]
        );

        res = yield dataset.getAsync(
            dataset.key(['MyKind', "123"])
        );

        console.log(JSON.stringify(res, null, 2));

the output is

{
  "key": {
    "path": [
      "MyKind",
      123
    ]
  },
  "data": {
    "foo": {
      "entity_value": {
        "property": [
          {
            "name": "bar",
            "value": {
              "list_value": [
                {
                  "entity_value": {
                    "property": [
                      {
                        "name": "hello",
                        "value": {
                          "integer_value": 1
                        }
                      }
                    ]
                  },
                  "indexed": false
                },
                {
                  "entity_value": {
                    "property": [
                      {
                        "name": "hello",
                        "value": {
                          "integer_value": 2
                        }
                      }
                    ]
                  },
                  "indexed": false
                }
              ]
            }
          }
        ]
      },
      "indexed": false
    }
  }
}

Activity

  1. dg3feiko commented on Sep 20, 2015

    @dg3feiko
    Author

    for single insert
    the raw request body is

    {
        "mutation": {
            "insert": [],
            "update": [],
            "upsert": [
                {
                    "property": [
                        {
                            "name": "foo",
                            "value": {
                                "entity_value": {
                                    "property": [
                                        {
                                            "name": "bar",
                                            "value": {
                                                "list_value": [
                                                    {
                                                        "entity_value": {
                                                            "property": [
                                                                {
                                                                    "name": "hello",
                                                                    "value": {
                                                                        "integer_value": 1
                                                                    }
                                                                }
                                                            ]
                                                        },
                                                        "indexed": false
                                                    },
                                                    {
                                                        "entity_value": {
                                                            "property": [
                                                                {
                                                                    "name": "hello",
                                                                    "value": {
                                                                        "integer_value": 2
                                                                    }
                                                                }
                                                            ]
                                                        },
                                                        "indexed": false
                                                    }
                                                ]
                                            }
                                        }
                                    ]
                                },
                                "indexed": false
                            }
                        }
                    ],
                    "key": {
                        "path_element": [
                            {
                                "kind": "MyKind",
                                "id": "123"
                            }
                        ]
                    }
                }
            ],
            "insert_auto_id": []
        }
    }

    for multiple one
    the body is

    {
        "mutation": {
            "insert": [],
            "update": [],
            "upsert": [
                {
                    "property": [
                        {
                            "name": "foo",
                            "value": {
                                "entity_value": {
                                    "property": [
                                        {
                                            "name": "entity_value",
                                            "value": {
                                                "entity_value": {
                                                    "property": [
                                                        {
                                                            "name": "property",
                                                            "value": {
                                                                "list_value": [
                                                                    {
                                                                        "entity_value": {
                                                                            "property": [
                                                                                {
                                                                                    "name": "name",
                                                                                    "value": {
                                                                                        "string_value": "bar"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "value",
                                                                                    "value": {
                                                                                        "entity_value": {
                                                                                            "property": [
                                                                                                {
                                                                                                    "name": "list_value",
                                                                                                    "value": {
                                                                                                        "list_value": [
                                                                                                            {
                                                                                                                "entity_value": {
                                                                                                                    "property": [
                                                                                                                        {
                                                                                                                            "name": "entity_value",
                                                                                                                            "value": {
                                                                                                                                "entity_value": {
                                                                                                                                    "property": [
                                                                                                                                        {
                                                                                                                                            "name": "property",
                                                                                                                                            "value": {
                                                                                                                                                "list_value": [
                                                                                                                                                    {
                                                                                                                                                        "entity_value": {
                                                                                                                                                            "property": [
                                                                                                                                                                {
                                                                                                                                                                    "name": "name",
                                                                                                                                                                    "value": {
                                                                                                                                                                        "string_value": "hello"
                                                                                                                                                                    }
                                                                                                                                                                },
                                                                                                                                                                {
                                                                                                                                                                    "name": "value",
                                                                                                                                                                    "value": {
                                                                                                                                                                        "entity_value": {
                                                                                                                                                                            "property": [
                                                                                                                                                                                {
                                                                                                                                                                                    "name": "integer_value",
                                                                                                                                                                                    "value": {
                                                                                                                                                                                        "integer_value": 1
                                                                                                                                                                                    }
                                                                                                                                                                                }
                                                                                                                                                                            ]
                                                                                                                                                                        },
                                                                                                                                                                        "indexed": false
                                                                                                                                                                    }
                                                                                                                                                                }
                                                                                                                                                            ]
                                                                                                                                                        },
                                                                                                                                                        "indexed": false
                                                                                                                                                    }
                                                                                                                                                ]
                                                                                                                                            }
                                                                                                                                        }
                                                                                                                                    ]
                                                                                                                                },
                                                                                                                                "indexed": false
                                                                                                                            }
                                                                                                                        },
                                                                                                                        {
                                                                                                                            "name": "indexed",
                                                                                                                            "value": {
                                                                                                                                "boolean_value": false
                                                                                                                            }
                                                                                                                        }
                                                                                                                    ]
                                                                                                                },
                                                                                                                "indexed": false
                                                                                                            },
                                                                                                            {
                                                                                                                "entity_value": {
                                                                                                                    "property": [
                                                                                                                        {
                                                                                                                            "name": "entity_value",
                                                                                                                            "value": {
                                                                                                                                "entity_value": {
                                                                                                                                    "property": [
                                                                                                                                        {
                                                                                                                                            "name": "property",
                                                                                                                                            "value": {
                                                                                                                                                "list_value": [
                                                                                                                                                    {
                                                                                                                                                        "entity_value": {
                                                                                                                                                            "property": [
                                                                                                                                                                {
                                                                                                                                                                    "name": "name",
                                                                                                                                                                    "value": {
                                                                                                                                                                        "string_value": "hello"
                                                                                                                                                                    }
                                                                                                                                                                },
                                                                                                                                                                {
                                                                                                                                                                    "name": "value",
                                                                                                                                                                    "value": {
                                                                                                                                                                        "entity_value": {
                                                                                                                                                                            "property": [
                                                                                                                                                                                {
                                                                                                                                                                                    "name": "integer_value",
                                                                                                                                                                                    "value": {
                                                                                                                                                                                        "integer_value": 2
                                                                                                                                                                                    }
                                                                                                                                                                                }
                                                                                                                                                                            ]
                                                                                                                                                                        },
                                                                                                                                                                        "indexed": false
                                                                                                                                                                    }
                                                                                                                                                                }
                                                                                                                                                            ]
                                                                                                                                                        },
                                                                                                                                                        "indexed": false
                                                                                                                                                    }
                                                                                                                                                ]
                                                                                                                                            }
                                                                                                                                        }
                                                                                                                                    ]
                                                                                                                                },
                                                                                                                                "indexed": false
                                                                                                                            }
                                                                                                                        },
                                                                                                                        {
                                                                                                                            "name": "indexed",
                                                                                                                            "value": {
                                                                                                                                "boolean_value": false
                                                                                                                            }
                                                                                                                        }
                                                                                                                    ]
                                                                                                                },
                                                                                                                "indexed": false
                                                                                                            }
                                                                                                        ]
                                                                                                    }
                                                                                                }
                                                                                            ]
                                                                                        },
                                                                                        "indexed": false
                                                                                    }
                                                                                }
                                                                            ]
                                                                        },
                                                                        "indexed": false
                                                                    }
                                                                ]
                                                            }
                                                        }
                                                    ]
                                                },
                                                "indexed": false
                                            }
                                        },
                                        {
                                            "name": "indexed",
                                            "value": {
                                                "boolean_value": false
                                            }
                                        }
                                    ]
                                },
                                "indexed": false
                            }
                        }
                    ],
                    "key": {
                        "path_element": [
                            {
                                "kind": "MyKind",
                                "id": "123"
                            }
                        ]
                    }
                },
                {
                    "property": [
                        {
                            "name": "foo",
                            "value": {
                                "entity_value": {
                                    "property": [
                                        {
                                            "name": "entity_value",
                                            "value": {
                                                "entity_value": {
                                                    "property": [
                                                        {
                                                            "name": "property",
                                                            "value": {
                                                                "list_value": [
                                                                    {
                                                                        "entity_value": {
                                                                            "property": [
                                                                                {
                                                                                    "name": "name",
                                                                                    "value": {
                                                                                        "string_value": "bar"
                                                                                    }
                                                                                },
                                                                                {
                                                                                    "name": "value",
                                                                                    "value": {
                                                                                        "entity_value": {
                                                                                            "property": [
                                                                                                {
                                                                                                    "name": "list_value",
                                                                                                    "value": {
                                                                                                        "list_value": [
                                                                                                            {
                                                                                                                "entity_value": {
                                                                                                                    "property": [
                                                                                                                        {
                                                                                                                            "name": "entity_value",
                                                                                                                            "value": {
                                                                                                                                "entity_value": {
                                                                                                                                    "property": [
                                                                                                                                        {
                                                                                                                                            "name": "property",
                                                                                                                                            "value": {
                                                                                                                                                "list_value": [
                                                                                                                                                    {
                                                                                                                                                        "entity_value": {
                                                                                                                                                            "property": [
                                                                                                                                                                {
                                                                                                                                                                    "name": "name",
                                                                                                                                                                    "value": {
                                                                                                                                                                        "string_value": "hello"
                                                                                                                                                                    }
                                                                                                                                                                },
                                                                                                                                                                {
                                                                                                                                                                    "name": "value",
                                                                                                                                                                    "value": {
                                                                                                                                                                        "entity_value": {
                                                                                                                                                                            "property": [
                                                                                                                                                                                {
                                                                                                                                                                                    "name": "integer_value",
                                                                                                                                                                                    "value": {
                                                                                                                                                                                        "integer_value": 1
                                                                                                                                                                                    }
                                                                                                                                                                                }
                                                                                                                                                                            ]
                                                                                                                                                                        },
                                                                                                                                                                        "indexed": false
                                                                                                                                                                    }
                                                                                                                                                                }
                                                                                                                                                            ]
                                                                                                                                                        },
                                                                                                                                                        "indexed": false
                                                                                                                                                    }
                                                                                                                                                ]
                                                                                                                                            }
                                                                                                                                        }
                                                                                                                                    ]
                                                                                                                                },
                                                                                                                                "indexed": false
                                                                                                                            }
                                                                                                                        },
                                                                                                                        {
                                                                                                                            "name": "indexed",
                                                                                                                            "value": {
                                                                                                                                "boolean_value": false
                                                                                                                            }
                                                                                                                        }
                                                                                                                    ]
                                                                                                                },
                                                                                                                "indexed": false
                                                                                                            },
                                                                                                            {
                                                                                                                "entity_value": {
                                                                                                                    "property": [
                                                                                                                        {
                                                                                                                            "name": "entity_value",
                                                                                                                            "value": {
                                                                                                                                "entity_value": {
                                                                                                                                    "property": [
                                                                                                                                        {
                                                                                                                                            "name": "property",
                                                                                                                                            "value": {
                                                                                                                                                "list_value": [
                                                                                                                                                    {
                                                                                                                                                        "entity_value": {
                                                                                                                                                            "property": [
                                                                                                                                                                {
                                                                                                                                                                    "name": "name",
                                                                                                                                                                    "value": {
                                                                                                                                                                        "string_value": "hello"
                                                                                                                                                                    }
                                                                                                                                                                },
                                                                                                                                                                {
                                                                                                                                                                    "name": "value",
                                                                                                                                                                    "value": {
                                                                                                                                                                        "entity_value": {
                                                                                                                                                                            "property": [
                                                                                                                                                                                {
                                                                                                                                                                                    "name": "integer_value",
                                                                                                                                                                                    "value": {
                                                                                                                                                                                        "integer_value": 2
                                                                                                                                                                                    }
                                                                                                                                                                                }
                                                                                                                                                                            ]
                                                                                                                                                                        },
                                                                                                                                                                        "indexed": false
                                                                                                                                                                    }
                                                                                                                                                                }
                                                                                                                                                            ]
                                                                                                                                                        },
                                                                                                                                                        "indexed": false
                                                                                                                                                    }
                                                                                                                                                ]
                                                                                                                                            }
                                                                                                                                        }
                                                                                                                                    ]
                                                                                                                                },
                                                                                                                                "indexed": false
                                                                                                                            }
                                                                                                                        },
                                                                                                                        {
                                                                                                                            "name": "indexed",
                                                                                                                            "value": {
                                                                                                                                "boolean_value": false
                                                                                                                            }
                                                                                                                        }
                                                                                                                    ]
                                                                                                                },
                                                                                                                "indexed": false
                                                                                                            }
                                                                                                        ]
                                                                                                    }
                                                                                                }
                                                                                            ]
                                                                                        },
                                                                                        "indexed": false
                                                                                    }
                                                                                }
                                                                            ]
                                                                        },
                                                                        "indexed": false
                                                                    }
                                                                ]
                                                            }
                                                        }
                                                    ]
                                                },
                                                "indexed": false
                                            }
                                        },
                                        {
                                            "name": "indexed",
                                            "value": {
                                                "boolean_value": false
                                            }
                                        }
                                    ]
                                },
                                "indexed": false
                            }
                        }
                    ],
                    "key": {
                        "path_element": [
                            {
                                "kind": "MyKind",
                                "id": "234"
                            }
                        ]
                    }
                }
            ],
            "insert_auto_id": []
        }
    }
  2. added
    api: datastoreIssues related to the Datastore API.
    type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.
    on Sep 20, 2015
  3. stephenplusplus commented on Sep 21, 2015

    @stephenplusplus
    Contributor

    Fix incoming!

  4. added a commit that references this issue on Mar 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

api: datastoreIssues related to the Datastore API.type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions