3 import static java.lang.Math.toIntExact;
5 import java.math.BigDecimal;
7 import java.util.ArrayList;
8 import java.util.Arrays;
12 import ai.heavy.thrift.server.*;
20 throw new SQLException(
"Elements[] cannot be null");
24 Class<?> elements_class = elements.getClass().getComponentType();
42 checkClass(elements_class, java.sql.Time.class);
45 checkClass(elements_class, java.sql.Timestamp.class);
48 checkClass(elements_class, java.sql.Date.class);
67 throw new AssertionError(
type.toString());
78 return HeavyAIType.toJava(
type);
87 public Object
getArray(
long start,
int size)
throws SQLException {
89 return Arrays.copyOfRange(
elements, toIntExact(start), size);
98 public ResultSet
getResultSet(
long start,
int size)
throws SQLException {
101 ArrayList<TColumnType> columnTypes =
new ArrayList<>(2);
103 new TTypeInfo(TDatumType.BIGINT, TEncodingType.NONE,
false,
false, 0, 0, 0);
104 columnTypes.add(
new TColumnType(
"INDEX", idxType,
false,
"",
false,
false, 0));
107 int precision = (
type == TDatumType.TIMESTAMP ||
type == TDatumType.TIME
108 ||
type == TDatumType.DATE
111 TTypeInfo valueType =
112 new TTypeInfo(
type, TEncodingType.NONE,
true,
false, precision, 0, 0);
113 columnTypes.add(
new TColumnType(
"VALUE", valueType,
false,
"",
false,
false, 1));
115 Long[] indexes =
new Long[size];
117 for (
int i = 0; i < size; ++i) {
118 indexes[i] = (long) (i + 1);
120 TColumnData idxData =
new TColumnData(Arrays.asList(indexes), null, null, null);
121 ArrayList<Boolean> idxNulls =
new ArrayList<>(size);
122 for (
int i = 0; i < size; ++i) {
123 idxNulls.add(Boolean.FALSE);
126 TColumnData valuesData;
127 Long[] int_values =
new Long[size];
129 String[] string_values =
new String[size];
130 boolean is_real =
false, is_string =
false;
131 ArrayList<Boolean> valueNulls =
new ArrayList<>(size);
132 for (
int i = toIntExact(start); i < start + size; ++i) {
134 valueNulls.add(
true);
136 valueNulls.add(
false);
139 int_values[i] = ((Byte)
elements[i]).longValue();
142 int_values[i] = ((Short)
elements[i]).longValue();
151 int_values[i] =
elements[i] == Boolean.TRUE ? 1l : 0l;
157 int_values[i] = ((Timestamp)
elements[i]).getTime();
168 real_values[i] = ((BigDecimal)
elements[i]).doubleValue();
180 string_values[i] = (String)
elements[i];
183 throw new AssertionError(
type.toString());
188 valuesData =
new TColumnData(null, Arrays.asList(real_values), null, null);
189 }
else if (is_string) {
190 valuesData =
new TColumnData(null, null, Arrays.asList(string_values), null);
192 valuesData =
new TColumnData(Arrays.asList(int_values), null, null, null);
195 ArrayList<TColumn> columns =
new ArrayList<>(2);
196 columns.add(
new TColumn(idxData, idxNulls));
197 columns.add(
new TColumn(valuesData, valueNulls));
198 TRowSet rowSet =
new TRowSet(columnTypes, null, columns,
true);
199 TQueryResult
result =
new TQueryResult(rowSet, 0, 0,
"",
"",
true, TQueryType.READ);
204 public void free() throws SQLException {
222 StringBuilder sb =
new StringBuilder(
"{");
227 sb.append(
"NULL").
append(
", ");
230 if (elements.length > 0) {
231 sb.delete(sb.length() - 2, sb.length());
234 return sb.toString();
237 String arr_str = Arrays.toString(
elements);
238 return "{" + arr_str.substring(1, arr_str.length() - 1) +
"}";
245 public ResultSet
getResultSet(
long start,
int size, Map<String, Class<?>> map)
246 throws SQLException {
247 throw new UnsupportedOperationException(
"Not supported yet,"
248 +
" line:" +
new Throwable().getStackTrace()[0].getLineNumber()
249 +
" class:" +
new Throwable().getStackTrace()[0].getClassName()
250 +
" method:" +
new Throwable().getStackTrace()[0].getMethodName());
254 public ResultSet
getResultSet(Map<String, Class<?>> map) throws SQLException {
255 throw new UnsupportedOperationException(
"Not supported yet,"
256 +
" line:" +
new Throwable().getStackTrace()[0].getLineNumber()
257 +
" class:" +
new Throwable().getStackTrace()[0].getClassName()
258 +
" method:" +
new Throwable().getStackTrace()[0].getMethodName());
262 public Object
getArray(
long start,
int size, Map<String, Class<?>> map)
263 throws SQLException {
264 throw new UnsupportedOperationException(
"Not supported yet,"
265 +
" line:" +
new Throwable().getStackTrace()[0].getLineNumber()
266 +
" class:" +
new Throwable().getStackTrace()[0].getClassName()
267 +
" method:" +
new Throwable().getStackTrace()[0].getMethodName());
271 public Object
getArray(Map<String, Class<?>> map) throws SQLException {
272 throw new UnsupportedOperationException(
"Not supported yet,"
273 +
" line:" +
new Throwable().getStackTrace()[0].getLineNumber()
274 +
" class:" +
new Throwable().getStackTrace()[0].getClassName()
275 +
" method:" +
new Throwable().getStackTrace()[0].getMethodName());
278 private void checkSize(
int start,
int size)
throws SQLException {
279 if (start < 0 || start >=
elements.length || start + size >
elements.length) {
280 throw new SQLException(
"Array length = " +
Integer.toString(
elements.length)
281 +
", slice start index = " + Integer.toString(start)
282 +
", slice length = " +
Integer.toString(size));
286 private void checkClass(Class<?> given, Class<?> expected)
throws SQLException {
287 if (!expected.isAssignableFrom(given)) {
288 throw new SQLException(
"For array of " +
getBaseTypeName() +
", elements of type "
289 + expected +
" are expected. Got " + given +
" instead");
Object getArray(long start, int size)
void checkSize(int start, int size)
size_t append(FILE *f, const size_t size, const int8_t *buf)
Appends the specified number of bytes to the end of the file f from buf.
HeavyAIArray(TDatumType type, Object[] elements)
ResultSet getResultSet(long start, int size, Map< String, Class<?>> map)
Object getArray(Map< String, Class<?>> map)
ResultSet getResultSet(Map< String, Class<?>> map)
void checkClass(Class<?> given, Class<?> expected)
Object getArray(long start, int size, Map< String, Class<?>> map)
ResultSet getResultSet(long start, int size)