[
https://issues.apache.org/jira/browse/IGNITE-4575?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16012378#comment-16012378
]
Vladimir Ozerov commented on IGNITE-4575:
-----------------------------------------
[~skalashnikov], my comments:
1) {{BinaryClassDescriptor.enumMap}} - I am not sure this is correct place to
store enum map, because it essentially duplicate to what is stored in metadata.
I walked through it's usages, and it is only used in two places immediately
after descriptor creation, so it is better to remove this field;
2) {{BinaryEnumObjectImpl.ctor}} - {{arr\[0\] ==
GridBinaryMarshaller.BINARY_ENUM}} looks wrong to me; you should pass only
unwrapped array here, or array+offset, which points to start of real enum. See
{{BinaryObjectImpl}} where the same idea is utilized.
3) {{BinaryEnumObjectImpl.enumName}} - as this method might be on hot paths, it
should generate little to no garbage and be as lightweight as possible; it is
better to expose some more internals to avoid {{BinaryMetadata -> BinaryType}}
conversion.
4) {{BinaryEnumObjectImpl.enumName}} - IDEA shows me a warning about possible
NPE in case type is null;
5) {{BinaryTypeImpl}} - cached values should be in {{BinaryMetadata}}, which is
created only once, not in {{BinaryType}}, which can be created multiple times
in different places
6) {{BinaryMetadata.VERSION}} - let's change it to byte, so that it will take
only 1 byte instead of 4 (it will not change frequently)
7) {{BinaryMetadata.getEnumOrdinalByName}} - check for empty name is invalid
here; empty or null names are not allowed, so we must thrown an exception, but
not here, but rather somewhere in {{BinaryEnumObjectImpl}}.
8) {{BinaryWriteMode}} - I think {{BINARY_ENUM}} must be mapped to {{ENUM}}
just like {{BinaryObjectImpl}} mapped to {{OBJ}} (see
{{BINARY_OBJ(GridBinaryMarshaller.OBJ)}})
9) {{BinaryUtils.mergeMetadata}} - {{changed}} flag should be set to {{true}}
only in case something really changed
10) {{BinaryWriterExImpl.doWriteBinaryEnum}} - if {{typeId !=
GridBinaryMarshaller.UNREGISTERED_TYPE_ID}} which is the most common case, we
can unsafely allocate 9 bytes intead of 5, and write ordinal in unsafe manner
as well
> Implement in Ignite wrapper for enums based on H2 user value type
> -----------------------------------------------------------------
>
> Key: IGNITE-4575
> URL: https://issues.apache.org/jira/browse/IGNITE-4575
> Project: Ignite
> Issue Type: Task
> Components: sql
> Reporter: Alexander Paschenko
> Assignee: Sergey Kalashnikov
> Labels: important
> Fix For: 2.1
>
>
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)