MarcoPolo - Types
When you store data on the database, OrientDB sets it using the typing conventions of Java. In turn, when MarcoPolo retrieves data from OrientDB, the return values use the typing conventions of Elixir. This ensures that the Erlang VM can understand these return values.
Typing in Java is somewhat more granular than it is in Elixir. For instance, where Elixir has the integer, Java has the 2-byte short, the 4-byte integer, and the 8-byte long. Records created in MarcoPolo encode Elixir integers as the 4-byte Java integers. In cases where you want to take advantage of Java typing in data storage or simply use the more granular types available in that language, you can set the type you want MarcoPolo to use when sending data to OrientDB.
Typing in MarcoPolo
In any situation where you send data from your application to OrientDB, MarcoPolo converts the internal type in Elixir to a default type in Java. So, for instance, if you set a boolean value on a record it gets set in OrientDB as the java.lang.Boolean
type.
Java types that you retrieve from OrientDB are converted to their approximate Elixir type. So, if you query OrientDB and retrieve an instance of java.lang.Long
it is set in your application as an Elixir integer.
You can also force the type to store on OrientDB by using a tuple, where the first value is the type you want and the second the value you want to set. For instance,
data = {:long, 944}
Here, an integer in your application is sent to OrientDB as a long integer. When your application retrieves a long integer, it is set on your application as an integer.
Numeric Types
- Integers:
83
or{:int, 83
- Typed in OrientDB as
java.lang.Integer
orint
- Returned to MarcoPolo as
83
- Typed in OrientDB as
- Short Integers:
{:short, 83}
- Typed in OrientDB as
java.lang.Short
orshort
- Returned to MarcoPolo as
83
- Typed in OrientDB as
- Long Integer:
{:long, 83}
- Typed in OrientDB as
java.lang.Long
orlong
- Returned to MarcoPolo as
83
- Typed in OrientDB as
- Doubles:
3.14
- Typed in OrientDB as
java.lang.Double
ordouble
- Returned to MarcoPolo as
3.14
- Typed in OrientDB as
- Floats:
{:float, 3.14}
- Typed in OrientDB as
java.lang.Float
orfloat
- Returned to MarcoPolo as
3.14
- Typed in OrientDB as
- Decimals: Using Decimal,
Decimal.new(3.14)
- Typed in OrientDB as
java.math.BigDecimal
- Returned to MarcoPolo as
Decimal.new(3.14)
- Typed in OrientDB as
Date and Time Types
- Date: Using Date,
%MarcoPolo.Date{year: 2017, month: 5, day: 5}
- Typed in OrientDB as
java.util.Date
- Returned to MarcoPolo as
%MarcoPolo.Date{year: 2017 month: 5 day: 5}
- Typed in OrientDB as
- DateTime: Using DateTime,
%MarcoPolo.DateTime{year: 2017,i month: 5, day: 5, hour: 15, minute: 30, sec: 0, msec: 0}
- Typed in OrientDB as
java.util.Date
- Returned to MarcoPolo as
%MarcoPolo.DateTime{year: 2017,i month: 5, day: 5, hour: 15, minute: 30, sec: 0, msec: 0}
- Typed in OrientDB as
Embedded Types
- Document: Using Document,
%MarcoPolo.Document{}
- Typed in OrientDB as
ORecord
- Returned to MarcoPolo as the same value.
- Typed in OrientDB as
- List:
[1, "foo", {:float, 3.14}]
- Typed in OrientDB as
List<Object>
- Returned ot MarcoPolo as
[1, "foo", 3.14
- Typed in OrientDB as
- Hash Set:
#HashSet<[2, 1]>
- Typed in OrientDB as
Set<Object>
- Returned to MarcoPolo as
#HashSet<[2, 1]>
- Typed in OrientDB as
- Map:
%{"foo" => true}
- Typed in OrientDB as
Map<String, ORecord>
- Returned to MarcoPolo as
%{"foo" => true}
- Typed in OrientDB as
Link Types
- Link: Using RID,
%MarcoPolo.RID{cluster_id: 21, position: 3}
- Typed in OrientDB as
ORID
- Returned to MarcoPolo as
%MarcoPolo.RID{cluster_id: 21, position: 3}
- Typed in OrientDB as
- Link List:
{:link_list, [%MarcoPolo.RID{}, ...]}
- Typed in OrientDB as
List<ORID>
- Returned to MarcoPolo as
{:link_list, [%MarcoPolo.RID{}, ...]}
- Typed in OrientDB as
- Link Set:
{:link_set, #HashSet<%MarcoPolo.RID{}, ...>}
- Typed in OrientDB as
SET<ORID>
- Returned to MarcoPolo as
{:link_set, #HashSet<%MarcoPolo.RID{}, ...>}
- Typed in OrientDB as
- Link Map:
{:link_map, %{"foo" => %MarcoPolo.RID{}, ...}}
- Typed in OrientDB as
Map<String, ORID>
- Returned to MarcoPolo as
{:link_map, %{"foo" => %MarcoPolo.RID{}, ...}}
- Typed in OrientDB as
Other Types
- Binary:
{:binary, <<7, 2>>
- Typed in OrientDB as
byte[]
- Returned to MarcoPolo as
<<7, 2>>
- Typed in OrientDB as
- Boolean:
true
orfalse
- Typed in OrientDB as
java.lang.Boolean
- Returned to MarcoPolo as same value.
- Typed in OrientDB as
- String:
"foo"
or<<1, 2, 3>>
- Typed in OrientDB as
java.lang.String
- Returned to MarcoPolo as the same value.
- Typed in OrientDB as