1 /*
2  * Copyright (C) 2019, HuntLabs
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 
18 module hunt.database.base.impl.ArrayTuple;
19 
20 import hunt.database.base.Tuple;
21 // import io.vertx.core.buffer.Buffer;
22 
23 // import java.math.BigDecimal;
24 // import java.time.*;
25 // import java.time.temporal.Temporal;
26 // import java.util.ArrayList;
27 // import java.util.Collection;
28 // import java.util.UUID;
29 
30 import hunt.collection.ArrayList;
31 import hunt.collection.Collection;
32 
33 import std.conv;
34 import std.concurrency : initOnce;
35 import std.variant;
36 
37 /**
38 */
39 class ArrayTuple : ArrayList!(Variant), Tuple {
40 
41     static Tuple EMPTY() {
42         __gshared Tuple inst;
43         return initOnce!inst(new ArrayTuple(0));
44     }
45 
46     this(int len) {
47         super(len);
48     }
49 
50     this(Collection!(Variant) c) {
51         super(c);
52     }
53 
54     override int size() {
55         return super.size();
56     }
57 
58     override void clear() {
59         super.clear();
60     }
61 
62 
63     // override
64     // <T> T get(Class!(T) type, int pos) {
65     //     throw new UnsupportedOperationException();
66     // }
67 
68     // override
69     // <T> T[] getValues(Class!(T) type, int pos) {
70     //     throw new UnsupportedOperationException();
71     // }
72 
73     override
74     bool getBoolean(int pos) {
75         Variant v = get(pos);
76         if(v == null) {
77             return bool.init;
78         }else{
79             return v.get!bool();
80         }
81     }
82 
83     Variant getValue(int pos) {
84         return get(pos);
85     }
86 
87     override
88     short getShort(int pos) {
89         Variant v = get(pos);
90         if(v == null) {
91             return short.init;
92         }else{
93             return v.get!short();
94         }
95     }
96 
97     override
98     int getInteger(int pos) {
99         Variant v = get(pos);
100         if(v == null) {
101             return 0;
102         }
103 
104         if(v.type == typeid(int)) {
105             return v.get!int();
106         } else {
107             string str = v.toString();
108             return to!int(str);
109         }
110     }
111 
112     override
113     long getLong(int pos) {
114         Variant v = get(pos);
115         if(v == null) {
116             return long.init;
117         }else{
118             return v.get!long();
119         }
120         
121         // Object val = get(pos);
122         // if (val instanceof Long) {
123         //     return (Long) val;
124         // } else if (val instanceof Number) {
125         //     return ((Number) val).longValue();
126         // }
127         // return null;
128     }
129 
130     override
131     float getFloat(int pos) {
132         Variant v = get(pos);
133         if(v == null) {
134             return float.init;
135         }else{
136             return v.get!float();
137         }
138         // Object val = get(pos);
139         // if (val instanceof Float) {
140         //     return (Float) val;
141         // } else if (val instanceof Number) {
142         //     return ((Number) val).floatValue();
143         // }
144         // return null;
145     }
146 
147     override
148     double getDouble(int pos) {
149         Variant v = get(pos);
150         if(v == null) {
151             return double.init;
152         }else{
153             return v.get!double();
154         }
155         // Object val = get(pos);
156         // if (val instanceof Double) {
157         //     return (Double) val;
158         // } else if (val instanceof Number) {
159         //     return ((Number) val).doubleValue();
160         // }
161         // return null;
162     }
163 
164     // override
165     // BigDecimal getBigDecimal(int pos) {
166     //     Object val = get(pos);
167     //     if (val instanceof BigDecimal) {
168     //         return (BigDecimal) val;
169     //     } else if (val instanceof Number) {
170     //         return new BigDecimal(val.toString());
171     //     }
172     //     return null;
173     // }
174 
175     // override
176     // Integer[] getIntegerArray(int pos) {
177     //     Object val = get(pos);
178     //     if (val instanceof Integer[]) {
179     //         return (Integer[]) val;
180     //     } else {
181     //         return null;
182     //     }
183     // }
184 
185     // override
186     // Boolean[] getBooleanArray(int pos) {
187     //     Object val = get(pos);
188     //     if (val instanceof Boolean[]) {
189     //         return (Boolean[]) val;
190     //     } else {
191     //         return null;
192     //     }
193     // }
194 
195     // override
196     // Short[] getShortArray(int pos) {
197     //     Object val = get(pos);
198     //     if (val instanceof Short[]) {
199     //         return (Short[]) val;
200     //     } else {
201     //         return null;
202     //     }
203     // }
204 
205     // override
206     // Long[] getLongArray(int pos) {
207     //     Object val = get(pos);
208     //     if (val instanceof Long[]) {
209     //         return (Long[]) val;
210     //     } else {
211     //         return null;
212     //     }
213     // }
214 
215     // override
216     // Float[] getFloatArray(int pos) {
217     //     Object val = get(pos);
218     //     if (val instanceof Float[]) {
219     //         return (Float[]) val;
220     //     } else {
221     //         return null;
222     //     }
223     // }
224 
225     // override
226     // Double[] getDoubleArray(int pos) {
227     //     Object val = get(pos);
228     //     if (val instanceof Double[]) {
229     //         return (Double[]) val;
230     //     } else {
231     //         return null;
232     //     }
233     // }
234 
235     // override
236     // String[] getStringArray(int pos) {
237     //     Object val = get(pos);
238     //     if (val instanceof String[]) {
239     //         return (String[]) val;
240     //     } else {
241     //         return null;
242     //     }
243     // }
244 
245     // override
246     // LocalDate[] getLocalDateArray(int pos) {
247     //     Object val = get(pos);
248     //     if (val instanceof LocalDate[]) {
249     //         return (LocalDate[]) val;
250     //     } else {
251     //         return null;
252     //     }
253     // }
254 
255     // override
256     // LocalTime[] getLocalTimeArray(int pos) {
257     //     Object val = get(pos);
258     //     if (val instanceof LocalTime[]) {
259     //         return (LocalTime[]) val;
260     //     } else {
261     //         return null;
262     //     }
263     // }
264 
265     // override
266     // OffsetTime[] getOffsetTimeArray(int pos) {
267     //     Object val = get(pos);
268     //     if (val instanceof OffsetTime[]) {
269     //         return (OffsetTime[]) val;
270     //     } else {
271     //         return null;
272     //     }
273     // }
274 
275     // override
276     // LocalDateTime[] getLocalDateTimeArray(int pos) {
277     //     Object val = get(pos);
278     //     if (val instanceof LocalDateTime[]) {
279     //         return (LocalDateTime[]) val;
280     //     } else {
281     //         return null;
282     //     }
283     // }
284 
285     // override
286     // OffsetDateTime[] getOffsetDateTimeArray(int pos) {
287     //     Object val = get(pos);
288     //     if (val instanceof OffsetDateTime[]) {
289     //         return (OffsetDateTime[]) val;
290     //     } else {
291     //         return null;
292     //     }
293     // }
294 
295     // override
296     // Buffer[] getBufferArray(int pos) {
297     //     Object val = get(pos);
298     //     if (val instanceof Buffer[]) {
299     //         return (Buffer[]) val;
300     //     } else {
301     //         return null;
302     //     }
303     // }
304 
305     // override
306     // UUID[] getUUIDArray(int pos) {
307     //     Object val = get(pos);
308     //     if (val instanceof UUID[]) {
309     //         return (UUID[]) val;
310     //     } else {
311     //         return null;
312     //     }
313     // }
314 
315     override
316     string getString(int pos) {
317         Variant v = get(pos);
318         if(v == null) {
319             return string.init;
320         }else{
321             return v.get!string();
322         }
323         // Object val = get(pos);
324         // if (val instanceof String) {
325         //     return (String) val;
326         // }
327         // return null;
328     }
329 
330     override
331     byte[] getBuffer(int pos) {
332         Variant v = get(pos);
333         if(v == null) {
334             return [];
335         }else{
336             return v.get!(byte[])();
337         }
338         // Object val = get(pos);
339         // if (val instanceof Buffer) {
340         //     return (Buffer) val;
341         // }
342         // return null;
343     }
344 
345     // override
346     // Temporal getTemporal(int pos) {
347     //     Object val = get(pos);
348     //     if (val instanceof Temporal) {
349     //         return (Temporal) val;
350     //     }
351     //     return null;
352     // }
353 
354     // override
355     // LocalDate getLocalDate(int pos) {
356     //     Object val = get(pos);
357     //     if (val instanceof LocalDate) {
358     //         return (LocalDate) val;
359     //     }
360     //     return null;
361     // }
362 
363     // override
364     // LocalTime getLocalTime(int pos) {
365     //     Object val = get(pos);
366     //     if (val instanceof LocalTime) {
367     //         return (LocalTime) val;
368     //     }
369     //     return null;
370     // }
371 
372     // override
373     // LocalDateTime getLocalDateTime(int pos) {
374     //     Object val = get(pos);
375     //     if (val instanceof LocalDateTime) {
376     //         return (LocalDateTime) val;
377     //     }
378     //     return null;
379     // }
380 
381     // override
382     // OffsetTime getOffsetTime(int pos) {
383     //     Object val = get(pos);
384     //     if (val instanceof OffsetTime) {
385     //         return (OffsetTime) val;
386     //     }
387     //     return null;
388     // }
389 
390     // override
391     // OffsetDateTime getOffsetDateTime(int pos) {
392     //     Object val = get(pos);
393     //     if (val instanceof OffsetDateTime) {
394     //         return (OffsetDateTime) val;
395     //     }
396     //     return null;
397     // }
398 
399     // override
400     // UUID getUUID(int pos) {
401     //     Object val = get(pos);
402     //     if (val instanceof UUID) {
403     //         return (UUID) val;
404     //     }
405     //     return null;
406     // }
407 
408     // override
409     // Tuple addBoolean(Boolean value) {
410     //     add(value);
411     //     return this;
412     // }
413 
414     override
415     Tuple addValue(ref Variant value) {
416         add(value);
417         return this;
418     }
419 
420     // override
421     // Tuple addShort(Short value) {
422     //     add(value);
423     //     return this;
424     // }
425 
426     // override
427     // Tuple addInteger(Integer value) {
428     //     add(value);
429     //     return this;
430     // }
431 
432     // override
433     // Tuple addLong(Long value) {
434     //     add(value);
435     //     return this;
436     // }
437 
438     // override
439     // Tuple addFloat(Float value) {
440     //     add(value);
441     //     return this;
442     // }
443 
444     // override
445     // Tuple addDouble(Double value) {
446     //     add(value);
447     //     return this;
448     // }
449 
450     // override
451     // Tuple addString(String value) {
452     //     add(value);
453     //     return this;
454     // }
455 
456     // override
457     // Tuple addBuffer(Buffer value) {
458     //     add(value);
459     //     return this;
460     // }
461 
462     // override
463     // Tuple addTemporal(Temporal value) {
464     //     add(value);
465     //     return this;
466     // }
467 
468     // override
469     // Tuple addLocalDate(LocalDate value) {
470     //     add(value);
471     //     return this;
472     // }
473 
474     // override
475     // Tuple addLocalTime(LocalTime value) {
476     //     add(value);
477     //     return this;
478     // }
479 
480     // override
481     // Tuple addLocalDateTime(LocalDateTime value) {
482     //     add(value);
483     //     return this;
484     // }
485 
486     // override
487     // Tuple addOffsetTime(OffsetTime value) {
488     //     add(value);
489     //     return this;
490     // }
491 
492     // override
493     // Tuple addOffsetDateTime(OffsetDateTime value) {
494     //     add(value);
495     //     return this;
496     // }
497 
498     // override
499     // Tuple addUUID(UUID value) {
500     //     add(value);
501     //     return this;
502     // }
503 
504     // override
505     // Tuple addBigDecimal(BigDecimal value) {
506     //     add(value);
507     //     return this;
508     // }
509 
510     // override
511     // Tuple addIntegerArray(Integer[] value) {
512     //     add(value);
513     //     return this;
514     // }
515 
516     // override
517     // Tuple addBooleanArray(Boolean[] value) {
518     //     add(value);
519     //     return this;
520     // }
521 
522     // override
523     // Tuple addShortArray(Short[] value) {
524     //     add(value);
525     //     return this;
526     // }
527 
528     // override
529     // Tuple addLongArray(Long[] value) {
530     //     add(value);
531     //     return this;
532     // }
533 
534     // override
535     // Tuple addFloatArray(Float[] value) {
536     //     add(value);
537     //     return this;
538     // }
539 
540     // override
541     // Tuple addDoubleArray(Double[] value) {
542     //     add(value);
543     //     return this;
544     // }
545 
546     // override
547     // Tuple addStringArray(String[] value) {
548     //     add(value);
549     //     return this;
550     // }
551 
552     // override
553     // Tuple addLocalDateArray(LocalDate[] value) {
554     //     add(value);
555     //     return this;
556     // }
557 
558     // override
559     // Tuple addLocalTimeArray(LocalTime[] value) {
560     //     add(value);
561     //     return this;
562     // }
563 
564     // override
565     // Tuple addOffsetTimeArray(OffsetTime[] value) {
566     //     add(value);
567     //     return this;
568     // }
569 
570     // override
571     // Tuple addLocalDateTimeArray(LocalDateTime[] value) {
572     //     add(value);
573     //     return this;
574     // }
575 
576     // override
577     // Tuple addOffsetDateTimeArray(OffsetDateTime[] value) {
578     //     add(value);
579     //     return this;
580     // }
581 
582     // override
583     // Tuple addBufferArray(Buffer[] value) {
584     //     add(value);
585     //     return this;
586     // }
587 
588     // override
589     // Tuple addUUIDArray(UUID[] value) {
590     //     add(value);
591     //     return this;
592     // }
593 
594     // override
595     // <T> Tuple addValues(T[] value) {
596     //     add(value);
597     //     return this;
598     // }
599 }