static int calculateSize()

in src/main/java/com/google/cloud/spanner/pgadapter/utils/MutationWriter.java [459:545]


  static int calculateSize(Mutation mutation) {
    int size = 0;
    for (Value value : mutation.getValues()) {
      if (value.isNull()) {
        size++;
        continue;
      }

      switch (value.getType().getCode()) {
        case BOOL:
          size++;
          break;
        case FLOAT32:
          size += 4;
          break;
        case FLOAT64:
        case INT64:
          size += 8;
          break;
        case PG_NUMERIC:
          size += value.getString().length();
          break;
        case STRING:
        case PG_JSONB:
          // Assume four bytes per character to be on the safe side.
          size += value.getString().length() * 4;
          break;
        case BYTES:
          size += value.getBytes().length();
          break;
        case TIMESTAMP:
          size += 30;
          break;
        case DATE:
          size += 10;
          break;
        case ARRAY:
          switch (value.getType().getArrayElementType().getCode()) {
            case BOOL:
              size += value.getBoolArray().size();
              break;
            case FLOAT32:
              size += value.getFloat32Array().size() * 4;
              break;
            case FLOAT64:
              size += value.getFloat64Array().size() * 8;
              break;
            case INT64:
              size += value.getInt64Array().size() * 8;
              break;
            case PG_NUMERIC:
              for (String s : value.getStringArray()) {
                size += s == null ? 8 : s.length();
              }
              break;
            case PG_JSONB:
            case STRING:
              for (String s : value.getStringArray()) {
                size += s == null ? 8 : s.length() * 4;
              }
              break;
            case BYTES:
              for (ByteArray b : value.getBytesArray()) {
                size += b == null ? 8 : b.length();
              }
              break;
            case TIMESTAMP:
              size += value.getTimestampArray().size() * 30;
              break;
            case DATE:
              size += value.getDateArray().size() * 10;
              break;
            case ARRAY:
            case NUMERIC:
            case JSON:
            case STRUCT:
              break;
          }
          break;
        case NUMERIC:
        case JSON:
        case STRUCT:
          break;
      }
    }
    return size;
  }