This is an automated email from the ASF dual-hosted git repository.
mblow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git
The following commit(s) were added to refs/heads/master by this push:
new ac1cf9208a [ASTERIXDB-3511][COMP] Avoid creating DataOutputStream
twice for closed fields
ac1cf9208a is described below
commit ac1cf9208a82ff367edc17144279d2836624c941
Author: AnkitPrabhu <[email protected]>
AuthorDate: Mon Sep 30 16:03:33 2024 +0530
[ASTERIXDB-3511][COMP] Avoid creating DataOutputStream twice for closed
fields
- user model changes: no
- storage format changes: no
- interface changes: no
Ext-ref: MB-61971
Change-Id: I5f1c6936c6601000de5faad496ee6a765cbb14d9
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18923
Integration-Tests: Jenkins <[email protected]>
Tested-by: Jenkins <[email protected]>
Reviewed-by: Ali Alsuliman <[email protected]>
---
.../om/pointables/ARecordVisitablePointable.java | 33 ++++++++++------------
1 file changed, 15 insertions(+), 18 deletions(-)
diff --git
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/ARecordVisitablePointable.java
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/ARecordVisitablePointable.java
index e418542a75..440fd6f220 100644
---
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/ARecordVisitablePointable.java
+++
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/ARecordVisitablePointable.java
@@ -100,6 +100,8 @@ public class ARecordVisitablePointable extends
AbstractVisitablePointable {
LinkedHashSet<String> allOrderedFields =
inputType.getAllOrderedFields();
if (allOrderedFields != null) {
numFields = allOrderedFields.size();
+ int index = 0;
+ int nameInClosedField = 0;
for (String field : allOrderedFields) {
int nameStart = typeBos.size();
typeDos.writeByte(ATypeTag.SERIALIZED_STRING_TYPE_TAG);
@@ -109,29 +111,24 @@ public class ARecordVisitablePointable extends
AbstractVisitablePointable {
typeNameReference.set(typeBos.getByteArray(), nameStart,
nameEnd - nameStart);
fieldNames.add(typeNameReference);
fieldValues.add(missingReference);
- }
- }
-
- int index = 0;
- for (int i = 0; i < numberOfSchemaFields; i++) {
- // add type name Reference (including a string type tag)
- int nameStart = typeBos.size();
- typeDos.writeByte(ATypeTag.SERIALIZED_STRING_TYPE_TAG);
- utf8Writer.writeUTF8(fieldNameStrs[i], typeDos);
- int nameEnd = typeBos.size();
- IVisitablePointable typeNameReference =
AFlatValuePointable.FACTORY.create(null);
- typeNameReference.set(typeBos.getByteArray(), nameStart,
nameEnd - nameStart);
- for (; index < numFields; index++) {
- if (fieldNames.get(index).equals(typeNameReference)) {
- break;
+ if (nameInClosedField < numberOfSchemaFields &&
field.equals(fieldNameStrs[nameInClosedField])) {
+ reverseLookupClosedFields.add(index);
+ nameInClosedField++;
}
+ index++;
}
- if (index == numFields) {
+ } else {
+ for (int i = 0; i < numberOfSchemaFields; i++) {
+ // add type name Reference (including a string type tag)
+ int nameStart = typeBos.size();
+ typeDos.writeByte(ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ utf8Writer.writeUTF8(fieldNameStrs[i], typeDos);
+ int nameEnd = typeBos.size();
+ IVisitablePointable typeNameReference =
AFlatValuePointable.FACTORY.create(null);
+ typeNameReference.set(typeBos.getByteArray(), nameStart,
nameEnd - nameStart);
fieldNames.add(typeNameReference);
reverseLookupClosedFields.add(fieldNames.size() - 1);
- continue;
}
- reverseLookupClosedFields.add(index);
}
// initialize a constant: null value bytes reference