1616import com .devexperts .io .Marshalled ;
1717import com .devexperts .qd .SerialFieldType ;
1818import com .devexperts .qd .util .*;
19- import com .devexperts .util .SystemProperties ;
2019import com .devexperts .util .TimeUtil ;
2120
2221enum FieldType {
@@ -50,13 +49,36 @@ enum FieldType {
5049 .addAccess (Access .createWithAccessPattern ("" , "int" , "0" , "getInt(cursor, %s)" , "setInt(cursor, %s, %s)" ))
5150 .setMapper (new DecimalMapper (int .class ))
5251 ),
53- INT_AS_DOUBLE (new Builder () // TODO this field type is more appropriate to name SIZE as it is tied to size type configuration
54- .addField (new Field (false , "dxscheme.size" ))
52+ SIZE (new Builder ()
53+ .addField (new Field (false , SerialFieldType . COMPACT_INT , "dxscheme.size" ))
5554 .addAccess (Access .createWithAccessPattern ("" , "int" , "0" , "getAsInt(cursor, %s)" , "setAsInt(cursor, %s, %s)" ))
5655 .addAccess (Access .createWithAccessPattern ("Double" , "double" , "Double.NaN" , "getAsDouble(cursor, %s)" , "setAsDouble(cursor, %s, %s)" ))
57- .addAccess (Access .createWithAccessPattern ("Decimal" , "int" , "0" , "getAsDecimal(cursor, %s)" , "setAsDecimal(cursor, %s, %s)" ))
56+ .addAccess (Access .createWithAccessPattern ("Decimal" , "int" , "0" , "getAsTinyDecimal(cursor, %s)" , "setAsTinyDecimal(cursor, %s, %s)" ))
57+ .addAccess (Access .createWithAccessPattern ("WideDecimal" , "long" , "0" , "getAsWideDecimal(cursor, %s)" , "setAsWideDecimal(cursor, %s, %s)" ))
5858 .setMapper (new DefaultMapper ("Double" , double .class ))
5959 ),
60+ VOLUME (new Builder ()
61+ .addField (new Field (false , SerialFieldType .DECIMAL , "dxscheme.volume" , "dxscheme.size" ))
62+ .addAccess (Access .createWithAccessPattern ("" , "long" , "0" , "getAsLong(cursor, %s)" , "setAsLong(cursor, %s, %s)" ))
63+ .addAccess (Access .createWithAccessPattern ("Double" , "double" , "Double.NaN" , "getAsDouble(cursor, %s)" , "setAsDouble(cursor, %s, %s)" ))
64+ .addAccess (Access .createWithAccessPattern ("Decimal" , "int" , "0" , "getAsTinyDecimal(cursor, %s)" , "setAsTinyDecimal(cursor, %s, %s)" ))
65+ .addAccess (Access .createWithAccessPattern ("WideDecimal" , "long" , "0" , "getAsWideDecimal(cursor, %s)" , "setAsWideDecimal(cursor, %s, %s)" ))
66+ .setMapper (new DefaultMapper ("Double" , double .class ))
67+ ),
68+ PRICE (new Builder ()
69+ .addField (new Field (false , SerialFieldType .DECIMAL , "dxscheme.price" ))
70+ .addAccess (Access .createWithAccessPattern ("" , "double" , "Double.NaN" , "getAsDouble(cursor, %s)" , "setAsDouble(cursor, %s, %s)" ))
71+ .addAccess (Access .createWithAccessPattern ("Decimal" , "int" , "0" , "getAsTinyDecimal(cursor, %s)" , "setAsTinyDecimal(cursor, %s, %s)" ))
72+ .addAccess (Access .createWithAccessPattern ("WideDecimal" , "long" , "0" , "getAsWideDecimal(cursor, %s)" , "setAsWideDecimal(cursor, %s, %s)" ))
73+ .setMapper (new DefaultMapper (double .class ))
74+ ),
75+ TURNOVER (new Builder ()
76+ .addField (new Field (false , SerialFieldType .DECIMAL , "dxscheme.turnover" , "dxscheme.price" ))
77+ .addAccess (Access .createWithAccessPattern ("" , "double" , "Double.NaN" , "getAsDouble(cursor, %s)" , "setAsDouble(cursor, %s, %s)" ))
78+ .addAccess (Access .createWithAccessPattern ("Decimal" , "int" , "0" , "getAsTinyDecimal(cursor, %s)" , "setAsTinyDecimal(cursor, %s, %s)" ))
79+ .addAccess (Access .createWithAccessPattern ("WideDecimal" , "long" , "0" , "getAsWideDecimal(cursor, %s)" , "setAsWideDecimal(cursor, %s, %s)" ))
80+ .setMapper (new DefaultMapper (double .class ))
81+ ),
6082 DECIMAL_AS_DOUBLE (new Builder ()
6183 .addField (new Field (false , SerialFieldType .DECIMAL ))
6284 .addAccess (Access .createWithAccessPattern ("" , "double" , "Double.NaN" , "Decimal.toDouble(getInt(cursor, %s))" , "setInt(cursor, %s, Decimal.compose(%s))" ))
@@ -72,14 +94,6 @@ enum FieldType {
7294 .addImport (new ClassName (Decimal .class ))
7395 .setMapper (new DecimalMapper (long .class ))
7496 ),
75- DECIMAL_AS_LONG_AS_DOUBLE (new Builder ()
76- .addField (new Field (false , SerialFieldType .DECIMAL ))
77- .addAccess (Access .createWithAccessPattern ("" , "long" , "0" , "(long)Decimal.toDouble(getInt(cursor, %s))" , "setInt(cursor, %s, Decimal.composeDecimal(%s, 0))" ))
78- .addAccess (Access .createWithAccessPattern ("Double" , "double" , "Double.NaN" , "Decimal.toDouble(getInt(cursor, %s))" , "setInt(cursor, %s, Decimal.compose(%s))" ))
79- .addAccess (Access .createWithAccessPattern ("Decimal" , "int" , "0" , "getInt(cursor, %s)" , "setInt(cursor, %s, %s)" ))
80- .addImport (new ClassName (Decimal .class ))
81- .setMapper (new DefaultMapper ("Double" , double .class ))
82- ),
8397 DECIMAL_OR_INT_AS_LONG (new Builder ()
8498 .addField (new Field (false , SerialFieldType .DECIMAL ))
8599 .addVariable (new Variable (true , "boolean" , "IsDecimal" ) {
@@ -271,22 +285,22 @@ static final class Field {
271285 final boolean required ;
272286 final boolean isObject ;
273287 final SerialFieldType serialType ;
274- final String typeSelector ;
288+ final String [] typeSelectors ;
275289 final String suffix ;
276290
277291 Field (boolean isObject , SerialFieldType serialType ) {
278- this (true , isObject , serialType , null , "" );
292+ this (true , isObject , "" , serialType );
279293 }
280294
281- Field (boolean isObject , String typeSelector ) {
282- this (true , isObject , null , typeSelector , "" );
295+ Field (boolean isObject , SerialFieldType serialType , String ... typeSelectors ) {
296+ this (true , isObject , "" , serialType , typeSelectors );
283297 }
284298
285- Field (boolean required , boolean isObject , SerialFieldType serialType , String typeSelector , String suffix ) {
299+ Field (boolean required , boolean isObject , String suffix , SerialFieldType serialType , String ... typeSelectors ) {
286300 this .required = required ;
287301 this .isObject = isObject ;
288302 this .serialType = serialType ;
289- this .typeSelector = typeSelector ;
303+ this .typeSelectors = typeSelectors ;
290304 this .suffix = suffix ;
291305 }
292306
0 commit comments