Skip to content

Commit 084aa0f

Browse files
Merge branch '25-date-nano' into release-3.0.0-alpha2
2 parents 0af469e + 3b20e87 commit 084aa0f

File tree

4 files changed

+67
-3
lines changed

4 files changed

+67
-3
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.objectbox.annotation;
2+
3+
/**
4+
* Use with {@link Type @Type} to specify how a property value is stored in the database.
5+
* <p>
6+
* This is e.g. useful for integer types that can mean different things depending on interpretation.
7+
* For example a 64-bit long value might be interpreted as time in milliseconds, or as time in nanoseconds.
8+
*/
9+
public enum DatabaseType {
10+
11+
/**
12+
* High precision time stored as a 64-bit long representing nanoseconds since 1970-01-01 (unix epoch).
13+
*/
14+
DateNano
15+
16+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Copyright 2019 ObjectBox Ltd. All rights reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package io.objectbox.annotation;
18+
19+
import java.lang.annotation.ElementType;
20+
import java.lang.annotation.Retention;
21+
import java.lang.annotation.RetentionPolicy;
22+
import java.lang.annotation.Target;
23+
24+
/**
25+
* Specifies the database type of an annotated property as one of {@link DatabaseType}.
26+
*/
27+
@Retention(RetentionPolicy.CLASS)
28+
@Target({ElementType.FIELD})
29+
public @interface Type {
30+
31+
DatabaseType value();
32+
33+
}

objectbox-java/src/main/java/io/objectbox/model/PropertyFlags.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,5 +82,13 @@ private PropertyFlags() { }
8282
* Note: Don't combine with ID, they are always unsigned internally.
8383
*/
8484
public static final int UNSIGNED = 8192;
85+
/**
86+
* By defining an ID companion property, the entity type uses a special ID encoding scheme involving this property
87+
* in addition to the ID.
88+
*
89+
* For Time Series IDs, a companion property of type Date or DateNano represents the exact timestamp.
90+
* (Future idea: string hash IDs, with a String companion property to store the full string ID).
91+
*/
92+
public static final int ID_COMPANION = 16384;
8593
}
8694

objectbox-java/src/main/java/io/objectbox/model/PropertyType.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818

1919
package io.objectbox.model;
2020

21+
/**
22+
* Basic type of a property
23+
*/
2124
public final class PropertyType {
2225
private PropertyType() { }
2326
/**
@@ -34,14 +37,17 @@ private PropertyType() { }
3437
public static final short Double = 8;
3538
public static final short String = 9;
3639
/**
37-
* Internally stored as a 64 bit long(?)
40+
* Date/time stored as a 64 bit long representing milliseconds since 1970-01-01 (unix epoch)
3841
*/
3942
public static final short Date = 10;
4043
/**
4144
* Relation to another entity
4245
*/
4346
public static final short Relation = 11;
44-
public static final short Reserved1 = 12;
47+
/**
48+
* High precision date/time stored as a 64 bit long representing nanoseconds since 1970-01-01 (unix epoch)
49+
*/
50+
public static final short DateNano = 12;
4551
public static final short Reserved2 = 13;
4652
public static final short Reserved3 = 14;
4753
public static final short Reserved4 = 15;
@@ -61,8 +67,9 @@ private PropertyType() { }
6167
public static final short DoubleVector = 29;
6268
public static final short StringVector = 30;
6369
public static final short DateVector = 31;
70+
public static final short DateNanoVector = 32;
6471

65-
public static final String[] names = { "Unknown", "Bool", "Byte", "Short", "Char", "Int", "Long", "Float", "Double", "String", "Date", "Relation", "Reserved1", "Reserved2", "Reserved3", "Reserved4", "Reserved5", "Reserved6", "Reserved7", "Reserved8", "Reserved9", "Reserved10", "BoolVector", "ByteVector", "ShortVector", "CharVector", "IntVector", "LongVector", "FloatVector", "DoubleVector", "StringVector", "DateVector", };
72+
public static final String[] names = { "Unknown", "Bool", "Byte", "Short", "Char", "Int", "Long", "Float", "Double", "String", "Date", "Relation", "DateNano", "Reserved2", "Reserved3", "Reserved4", "Reserved5", "Reserved6", "Reserved7", "Reserved8", "Reserved9", "Reserved10", "BoolVector", "ByteVector", "ShortVector", "CharVector", "IntVector", "LongVector", "FloatVector", "DoubleVector", "StringVector", "DateVector", "DateNanoVector", };
6673

6774
public static String name(int e) { return names[e]; }
6875
}

0 commit comments

Comments
 (0)