|
| 1 | +from decimal import Decimal |
1 | 2 | from importlib.util import find_spec |
| 3 | +from random import randint |
2 | 4 |
|
3 | 5 | import dolphindb as ddb |
4 | 6 | import dolphindb.settings as keys |
@@ -1179,3 +1181,82 @@ def test_upload_table_arrow_array_vector_contain_empty(self): |
1179 | 1181 | assertPlus(self.__class__.conn.run(f"typestr({k}[`a])=={v['expect_typestr']}")) |
1180 | 1182 | if 'expect_value' in v: |
1181 | 1183 | assertPlus(self.__class__.conn.run(f"{k}=={v['expect_value']}")) |
| 1184 | + |
| 1185 | + @pytest.mark.parametrize('script,expect,dtype,type', [ |
| 1186 | + ["true false 00b", [True, False, None], "object", keys.DT_BOOL], |
| 1187 | + ["0c 127c -127c 00c", [0, 127, -127, np.nan], "object", keys.DT_CHAR], |
| 1188 | + ["0h 32767h -32767h 00h", [0, 32767, -32767, np.nan], "object", keys.DT_SHORT], |
| 1189 | + ["0i 2147483647i -2147483647i 00i", [0, 2147483647, -2147483647, np.nan], "object", keys.DT_INT], |
| 1190 | + ["0l 9223372036854775807l -9223372036854775807l 00l", [0, 9223372036854775807, -9223372036854775807, np.nan], |
| 1191 | + "object", keys.DT_LONG], |
| 1192 | + ["1970.01.01d 1970.01.02d 00d", |
| 1193 | + [np.datetime64('1970-01-01', 'D'), np.datetime64('1970-01-02', 'D'), np.datetime64('nat', 'D')], |
| 1194 | + 'datetime64[ns]', keys.DT_DATE], |
| 1195 | + ["1970.01M 1970.02M 00M", |
| 1196 | + [np.datetime64('1970-01', 'M'), np.datetime64('1970-02', 'M'), np.datetime64('nat', 'M')], 'datetime64[ns]', |
| 1197 | + keys.DT_MONTH], |
| 1198 | + ["00:00:00.000t 00:00:00.001t 00t", |
| 1199 | + [np.datetime64('1970-01-01T00:00:00.000', 'ms'), np.datetime64('1970-01-01T00:00:00.001', 'ms'), |
| 1200 | + np.datetime64('nat', 'ms')], 'datetime64[ns]', keys.DT_TIME], |
| 1201 | + ["00:00m 00:01m 00m", |
| 1202 | + [np.datetime64('1970-01-01T00:00', 'm'), np.datetime64('1970-01-01T00:01', 'm'), np.datetime64('nat', 'm')], |
| 1203 | + 'datetime64[ns]', keys.DT_MINUTE], |
| 1204 | + ["00:00:00s 00:00:01s 00s", |
| 1205 | + [np.datetime64('1970-01-01T00:00:00', 's'), np.datetime64('1970-01-01T00:00:01', 's'), |
| 1206 | + np.datetime64('nat', 's')], 'datetime64[ns]', keys.DT_SECOND], |
| 1207 | + ["1970.01.01T00:00:00D 1970.01.01T00:00:01D 00D", |
| 1208 | + [np.datetime64('1970-01-01T00:00:00', 's'), np.datetime64('1970-01-01T00:00:01', 's'), |
| 1209 | + np.datetime64('nat', 's')], 'datetime64[ns]', keys.DT_DATETIME], |
| 1210 | + ["1970.01.01 00:00:00.000T 1970.01.01 00:00:00.001T 00T", |
| 1211 | + [np.datetime64('1970-01-01T00:00:00.000', 'ms'), np.datetime64('1970-01-01T00:00:00.001', 'ms'), |
| 1212 | + np.datetime64('nat', 'ms')], 'datetime64[ns]', keys.DT_TIMESTAMP], |
| 1213 | + ["00:00:00.000000000n 00:00:00.000000001n 00n", |
| 1214 | + [np.datetime64('1970-01-01T00:00:00.000000000', 'ns'), np.datetime64('1970-01-01T00:00:00.000000001', 'ns'), |
| 1215 | + np.datetime64('nat', 'ns')], "datetime64[ns]", keys.DT_NANOTIME], |
| 1216 | + ["1970.01.01 00:00:00.000000000N 1970.01.01 00:00:00.000000001N 00N", |
| 1217 | + [np.datetime64('1970-01-01T00:00:00.000000000', 'ns'), np.datetime64('1970-01-01T00:00:00.000000001', 'ns'), |
| 1218 | + np.datetime64('nat', 'ns')], "datetime64[ns]", keys.DT_NANOTIMESTAMP], |
| 1219 | + ["0.0f 3.14f 00f", [0., 3.14, np.nan], np.float32, keys.DT_FLOAT], |
| 1220 | + ["0.0F 3.14F 00F", [0., 3.14, np.nan], np.float64, keys.DT_DOUBLE], |
| 1221 | + ["'abc!@#中文 123' \"\"", ['abc!@#中文 123', ''], "object", keys.DT_STRING], |
| 1222 | + ["[uuid('5d212a78-cc48-e3b1-4235-b4d91473ee87'),uuid('00000000-0000-0000-0000-000000000000')]", |
| 1223 | + ['5d212a78-cc48-e3b1-4235-b4d91473ee87', '00000000-0000-0000-0000-000000000000'], "object", keys.DT_UUID], |
| 1224 | + ["[datehour('1970.01.01T00'),datehour(NULL)]", [np.datetime64('1970-01-01T00', 'h'), np.datetime64('nat', 'h')], |
| 1225 | + "datetime64[ns]", keys.DT_DATEHOUR], |
| 1226 | + ["[ipaddr('127.0.0.1'),ipaddr('0.0.0.0')]", ['127.0.0.1', '0.0.0.0'], "object", keys.DT_IPADDR], |
| 1227 | + ["[int128('e1671797c52e15f763380b45e841ec32'),int128('00000000000000000000000000000000')]", |
| 1228 | + ['e1671797c52e15f763380b45e841ec32', '00000000000000000000000000000000'], "object", keys.DT_INT128], |
| 1229 | + ["[blob('abc!@#中文 123'),blob('')]", ['abc!@#中文 123'.encode(), b''], "object", keys.DT_BLOB], |
| 1230 | + ["[decimal32(\"0\",3),decimal32('3.141',3)]", [Decimal('0.000'), Decimal('3.141')], "object", |
| 1231 | + [keys.DT_DECIMAL32, 3]], |
| 1232 | + ["[decimal64(\"0\",3),decimal64('3.141',3)]", [Decimal('0.000'), Decimal('3.141')], "object", |
| 1233 | + [keys.DT_DECIMAL64, 3]], |
| 1234 | + ["[decimal128(\"0\",3),decimal128('3.141',3)]", [Decimal('0.000'), Decimal('3.141')], "object", |
| 1235 | + [keys.DT_DECIMAL64, 3]], |
| 1236 | + ["array(BOOL[]).append!([[true,false,00b],[true],[false],[00b]])", |
| 1237 | + [np.array([True, False, None]), np.array([True]), np.array([False]), np.array([None])], "object", |
| 1238 | + keys.DT_BOOL_ARRAY], |
| 1239 | + ], ids=["BOOL", "CHAR", "SHORT", "INT", "LONG", "DATE", "MONTH", "TIME", "MINUTE", "SECOND", "DATETIME", |
| 1240 | + "TIMESTAMP", "NANOTIME", "NANOTIMESTAMP", "FLOAT", "DOUBLE", "STRING", "UUID", "DATEHOUR", "IPADDR", |
| 1241 | + "INT128", "BLOB", "DECIMAL32", "DECIMAL64", "DECIMAL128", "BOOL_ARRAY"]) |
| 1242 | + def test_upload_table_ge_65535(self, script, expect, dtype, type): |
| 1243 | + n = 200000 |
| 1244 | + index = [randint(0, len(expect) - 1) for i in range(n)] |
| 1245 | + conn = ddb.Session(HOST, PORT, USER, PASSWD) |
| 1246 | + data = pd.DataFrame({'c_type': pd.Series([expect[i] for i in index], dtype=dtype)}) |
| 1247 | + data.__DolphinDB_Type__ = { |
| 1248 | + "c_type": type |
| 1249 | + } |
| 1250 | + conn.upload({"index": index, "data": data}) |
| 1251 | + assert conn.run(f""" |
| 1252 | + x = {script} |
| 1253 | + col = array(x,capacity={n}) |
| 1254 | + for (i in index){{ |
| 1255 | + if (type(x)<64){{ |
| 1256 | + col.append!(x[i]) |
| 1257 | + }} else {{ |
| 1258 | + col.append!(x[i,]) |
| 1259 | + }} |
| 1260 | + }} |
| 1261 | + eqObj(col,data[`c_type]) |
| 1262 | + """) |
0 commit comments