mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 15:12:02 +00:00
Fix incorrect nullable columns reporting in MySQL binary protocol
This commit is contained in:
parent
a5a7a16096
commit
9e3ba55070
@ -39,8 +39,7 @@ public class MySQLJavaClientTest {
|
||||
|
||||
// useServerPrepStmts=true -> COM_STMT_PREPARE + COM_STMT_EXECUTE -> binary
|
||||
// useServerPrepStmts=false -> COM_QUERY -> text
|
||||
String jdbcUrl = String.format("jdbc:mysql://%s:%s/%s?useSSL=false&useServerPrepStmts=%s",
|
||||
host, port, database, binary);
|
||||
String jdbcUrl = String.format("jdbc:mysql://%s:%s/%s?useSSL=false&useServerPrepStmts=%s", host, port, database, binary);
|
||||
|
||||
try {
|
||||
Class.forName("com.mysql.cj.jdbc.Driver");
|
||||
@ -67,21 +66,21 @@ public class MySQLJavaClientTest {
|
||||
int rowNum = 1;
|
||||
while (rs.next()) {
|
||||
System.out.printf("Row #%d\n", rowNum++);
|
||||
System.out.printf("%s, value: %d\n", getMysqlType(rs, "i8"), rs.getInt("i8"));
|
||||
System.out.printf("%s, value: %d\n", getMysqlType(rs, "i16"), rs.getInt("i16"));
|
||||
System.out.printf("%s, value: %d\n", getMysqlType(rs, "i32"), rs.getInt("i32"));
|
||||
System.out.printf("%s, value: %d\n", getMysqlType(rs, "i64"), rs.getLong("i64"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "i128"), rs.getString("i128"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "i256"), rs.getString("i256"));
|
||||
System.out.printf("%s, value: %d\n", getMysqlType(rs, "ui8"), rs.getInt("ui8"));
|
||||
System.out.printf("%s, value: %d\n", getMysqlType(rs, "ui16"), rs.getInt("ui16"));
|
||||
System.out.printf("%s, value: %d\n", getMysqlType(rs, "ui32"), rs.getLong("ui32"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "ui64"), rs.getString("ui64"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "ui128"), rs.getString("ui128"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "ui256"), rs.getString("ui256"));
|
||||
System.out.printf("%s, value: %f\n", getMysqlType(rs, "f32"), rs.getFloat("f32"));
|
||||
System.out.printf("%s, value: %f\n", getMysqlType(rs, "f64"), rs.getFloat("f64"));
|
||||
System.out.printf("%s, value: %b\n", getMysqlType(rs, "b"), rs.getBoolean("b"));
|
||||
System.out.printf("%s, value: %d, wasNull: %b\n", getMysqlType(rs, "i8"), rs.getInt("i8"), rs.wasNull());
|
||||
System.out.printf("%s, value: %d, wasNull: %b\n", getMysqlType(rs, "i16"), rs.getInt("i16"), rs.wasNull());
|
||||
System.out.printf("%s, value: %d, wasNull: %b\n", getMysqlType(rs, "i32"), rs.getInt("i32"), rs.wasNull());
|
||||
System.out.printf("%s, value: %d, wasNull: %b\n", getMysqlType(rs, "i64"), rs.getLong("i64"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "i128"), rs.getString("i128"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "i256"), rs.getString("i256"), rs.wasNull());
|
||||
System.out.printf("%s, value: %d, wasNull: %b\n", getMysqlType(rs, "ui8"), rs.getInt("ui8"), rs.wasNull());
|
||||
System.out.printf("%s, value: %d, wasNull: %b\n", getMysqlType(rs, "ui16"), rs.getInt("ui16"), rs.wasNull());
|
||||
System.out.printf("%s, value: %d, wasNull: %b\n", getMysqlType(rs, "ui32"), rs.getLong("ui32"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "ui64"), rs.getString("ui64"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "ui128"), rs.getString("ui128"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "ui256"), rs.getString("ui256"), rs.wasNull());
|
||||
System.out.printf("%s, value: %f, wasNull: %b\n", getMysqlType(rs, "f32"), rs.getFloat("f32"), rs.wasNull());
|
||||
System.out.printf("%s, value: %f, wasNull: %b\n", getMysqlType(rs, "f64"), rs.getFloat("f64"), rs.wasNull());
|
||||
System.out.printf("%s, value: %b, wasNull: %b\n", getMysqlType(rs, "b"), rs.getBoolean("b"), rs.wasNull());
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
@ -92,10 +91,10 @@ public class MySQLJavaClientTest {
|
||||
int rowNum = 1;
|
||||
while (rs.next()) {
|
||||
System.out.printf("Row #%d\n", rowNum++);
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "s"), rs.getString("s"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "sn"), rs.getString("sn"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "lc"), rs.getString("lc"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "nlc"), rs.getString("nlc"));
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "s"), rs.getString("s"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "sn"), rs.getString("sn"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "lc"), rs.getString("lc"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "nlc"), rs.getString("nlc"), rs.wasNull());
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
@ -106,10 +105,10 @@ public class MySQLJavaClientTest {
|
||||
int rowNum = 1;
|
||||
while (rs.next()) {
|
||||
System.out.printf("Row #%d\n", rowNum++);
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "ilc"), rs.getInt("ilc"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "dlc"), rs.getDate("dlc"));
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "ilc"), rs.getInt("ilc"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "dlc"), rs.getDate("dlc"), rs.wasNull());
|
||||
// NULL int is represented as zero
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "ni"), rs.getInt("ni"));
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "ni"), rs.getInt("ni"), rs.wasNull());
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
@ -120,12 +119,11 @@ public class MySQLJavaClientTest {
|
||||
int rowNum = 1;
|
||||
while (rs.next()) {
|
||||
System.out.printf("Row #%d\n", rowNum++);
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "d32"), rs.getBigDecimal("d32").toPlainString());
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "d64"), rs.getBigDecimal("d64").toPlainString());
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "d128_native"),
|
||||
rs.getBigDecimal("d128_native").toPlainString());
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "d128_text"), rs.getString("d128_text"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "d256"), rs.getString("d256"));
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "d32"), rs.getBigDecimal("d32").toPlainString(), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "d64"), rs.getBigDecimal("d64").toPlainString(), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "d128_native"), rs.getBigDecimal("d128_native").toPlainString(), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "d128_text"), rs.getString("d128_text"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "d256"), rs.getString("d256"), rs.wasNull());
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
@ -136,12 +134,12 @@ public class MySQLJavaClientTest {
|
||||
int rowNum = 1;
|
||||
while (rs.next()) {
|
||||
System.out.printf("Row #%d\n", rowNum++);
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "d"), rs.getDate("d"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "d32"), rs.getDate("d32"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "dt"), rs.getTimestamp("dt"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "dt64_3"), rs.getTimestamp("dt64_3"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "dt64_6"), rs.getTimestamp("dt64_6"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "dt64_9"), rs.getTimestamp("dt64_9"));
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "d"), rs.getDate("d"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "d32"), rs.getDate("d32"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "dt"), rs.getTimestamp("dt"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "dt64_3"), rs.getTimestamp("dt64_3"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "dt64_6"), rs.getTimestamp("dt64_6"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "dt64_9"), rs.getTimestamp("dt64_9"), rs.wasNull());
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
@ -152,13 +150,13 @@ public class MySQLJavaClientTest {
|
||||
int rowNum = 1;
|
||||
while (rs.next()) {
|
||||
System.out.printf("Row #%d\n", rowNum++);
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "dt64_0"), rs.getTimestamp("dt64_0"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "dt64_1"), rs.getTimestamp("dt64_1"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "dt64_2"), rs.getTimestamp("dt64_2"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "dt64_4"), rs.getTimestamp("dt64_4"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "dt64_5"), rs.getTimestamp("dt64_5"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "dt64_7"), rs.getTimestamp("dt64_7"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "dt64_8"), rs.getTimestamp("dt64_8"));
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "dt64_0"), rs.getTimestamp("dt64_0"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "dt64_1"), rs.getTimestamp("dt64_1"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "dt64_2"), rs.getTimestamp("dt64_2"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "dt64_4"), rs.getTimestamp("dt64_4"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "dt64_5"), rs.getTimestamp("dt64_5"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "dt64_7"), rs.getTimestamp("dt64_7"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "dt64_8"), rs.getTimestamp("dt64_8"), rs.wasNull());
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
@ -169,8 +167,8 @@ public class MySQLJavaClientTest {
|
||||
int rowNum = 1;
|
||||
while (rs.next()) {
|
||||
System.out.printf("Row #%d\n", rowNum++);
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "dt"), rs.getTimestamp("dt"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "dt64_3"), rs.getTimestamp("dt64_3"));
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "dt"), rs.getTimestamp("dt"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "dt64_3"), rs.getTimestamp("dt64_3"), rs.wasNull());
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
@ -181,10 +179,10 @@ public class MySQLJavaClientTest {
|
||||
int rowNum = 1;
|
||||
while (rs.next()) {
|
||||
System.out.printf("Row #%d\n", rowNum++);
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "a"), rs.getString("a"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "u"), rs.getString("u"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "t"), rs.getString("t"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "m"), rs.getString("m"));
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "a"), rs.getString("a"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "u"), rs.getString("u"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "t"), rs.getString("t"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "m"), rs.getString("m"), rs.wasNull());
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
@ -196,17 +194,15 @@ public class MySQLJavaClientTest {
|
||||
int rowNum = 1;
|
||||
while (rs.next()) {
|
||||
System.out.printf("Row #%d\n", rowNum++);
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "f"), rs.getFloat("f"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "d"), rs.getDate("d"));
|
||||
System.out.printf("%s, value: %s\n", getMysqlType(rs, "dt"), rs.getTimestamp("dt"));
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "f"), rs.getFloat("f"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "d"), rs.getDate("d"), rs.wasNull());
|
||||
System.out.printf("%s, value: %s, wasNull: %b\n", getMysqlType(rs, "dt"), rs.getTimestamp("dt"), rs.wasNull());
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
private static String getMysqlType(ResultSet rs, String columnLabel) throws SQLException {
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
return String.format("%s type is %s", columnLabel,
|
||||
MysqlType.getByJdbcType(meta.getColumnType(rs.findColumn(columnLabel))));
|
||||
return String.format("%s type is %s", columnLabel, MysqlType.getByJdbcType(meta.getColumnType(rs.findColumn(columnLabel))));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -12,8 +12,7 @@ namespace MySQLProtocol
|
||||
namespace MySQLUtils
|
||||
{
|
||||
|
||||
DecimalUtils::DecimalComponents<DateTime64>
|
||||
getNormalizedDateTime64Components(DataTypePtr data_type, ColumnPtr col, size_t row_num)
|
||||
DecimalUtils::DecimalComponents<DateTime64> getNormalizedDateTime64Components(DataTypePtr data_type, ColumnPtr col, size_t row_num)
|
||||
{
|
||||
const auto * date_time_type = typeid_cast<const DataTypeDateTime64 *>(data_type.get());
|
||||
|
||||
@ -52,14 +51,6 @@ getNormalizedDateTime64Components(DataTypePtr data_type, ColumnPtr col, size_t r
|
||||
|
||||
return components;
|
||||
};
|
||||
|
||||
ColumnPtr getBaseColumn(const DB::Columns & columns, size_t i)
|
||||
{
|
||||
ColumnPtr col = columns[i]->convertToFullIfNeeded();
|
||||
if (col->isNullable())
|
||||
return assert_cast<const ColumnNullable &>(*col).getNestedColumnPtr();
|
||||
return col;
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
#include "Core/DecimalFunctions.h"
|
||||
#include "DataTypes/IDataType.h"
|
||||
#include "base/types.h"
|
||||
|
||||
namespace DB
|
||||
{
|
||||
@ -13,10 +12,6 @@ namespace MySQLUtils
|
||||
/// Splits DateTime64 column data at a certain row number into whole and fractional part
|
||||
/// Additionally, normalizes the fractional part as if it was scale 6 for MySQL compatibility purposes
|
||||
DecimalUtils::DecimalComponents<DateTime64> getNormalizedDateTime64Components(DataTypePtr data_type, ColumnPtr col, size_t row_num);
|
||||
|
||||
/// If a column is ColumnSparse/ColumnLowCardinality/ColumnNullable, it is unwrapped in a correct order;
|
||||
/// otherwise, the original column is returned
|
||||
ColumnPtr getBaseColumn(const DB::Columns & columns, size_t i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,20 +4,15 @@
|
||||
#include <Core/MySQL/PacketsProtocolBinary.h>
|
||||
#include "Common/LocalDate.h"
|
||||
#include "Common/LocalDateTime.h"
|
||||
#include "Columns/ColumnLowCardinality.h"
|
||||
#include "Columns/ColumnNullable.h"
|
||||
#include "Columns/ColumnVector.h"
|
||||
#include "Columns/ColumnsDateTime.h"
|
||||
#include "Core/DecimalFunctions.h"
|
||||
#include "DataTypes/DataTypeDateTime64.h"
|
||||
#include "DataTypes/DataTypeLowCardinality.h"
|
||||
#include "DataTypes/DataTypeNullable.h"
|
||||
#include "DataTypes/DataTypesNumber.h"
|
||||
#include "Formats/FormatSettings.h"
|
||||
#include "IO/WriteBufferFromString.h"
|
||||
#include "MySQLUtils.h"
|
||||
#include "base/DayNum.h"
|
||||
#include "base/Decimal.h"
|
||||
#include "base/types.h"
|
||||
|
||||
namespace DB
|
||||
@ -30,17 +25,21 @@ ResultSetRow::ResultSetRow(const Serializations & serializations_, const DataTyp
|
||||
: row_num(row_num_), columns(columns_), data_types(data_types_), serializations(serializations_)
|
||||
{
|
||||
payload_size = 1 + null_bitmap_size;
|
||||
FormatSettings format_settings;
|
||||
static FormatSettings format_settings;
|
||||
for (size_t i = 0; i < columns.size(); ++i)
|
||||
{
|
||||
ColumnPtr col = MySQLUtils::getBaseColumn(columns, i);
|
||||
if (col->isNullAt(row_num))
|
||||
ColumnPtr col = columns[i]->convertToFullIfNeeded();
|
||||
if (col->isNullable())
|
||||
{
|
||||
// See https://dev.mysql.com/doc/dev/mysql-server/8.1.0/page_protocol_binary_resultset.html#sect_protocol_binary_resultset_row
|
||||
size_t byte = (i + 2) / 8;
|
||||
int bit = 1 << ((i + 2) % 8);
|
||||
null_bitmap[byte] |= bit;
|
||||
continue; // NULLs are stored in the null bitmap only
|
||||
if (columns[i]->isNullAt(row_num))
|
||||
{
|
||||
// See https://dev.mysql.com/doc/dev/mysql-server/8.1.0/page_protocol_binary_resultset.html#sect_protocol_binary_resultset_row
|
||||
size_t byte = (i + 2) / 8;
|
||||
int bit = 1 << ((i + 2) % 8);
|
||||
null_bitmap[byte] |= bit;
|
||||
continue; // NULLs are stored in the null bitmap only
|
||||
}
|
||||
col = assert_cast<const ColumnNullable &>(*col).getNestedColumnPtr();
|
||||
}
|
||||
|
||||
DataTypePtr data_type = removeLowCardinalityAndNullable(data_types[i]);
|
||||
@ -145,9 +144,13 @@ void ResultSetRow::writePayloadImpl(WriteBuffer & buffer) const
|
||||
buffer.write(null_bitmap.data(), null_bitmap_size);
|
||||
for (size_t i = 0; i < columns.size(); ++i)
|
||||
{
|
||||
ColumnPtr col = MySQLUtils::getBaseColumn(columns, i);
|
||||
if (col->isNullAt(row_num))
|
||||
continue;
|
||||
ColumnPtr col = columns[i]->convertToFullIfNeeded();
|
||||
if (col->isNullable())
|
||||
{
|
||||
if (columns[i]->isNullAt(row_num))
|
||||
continue;
|
||||
col = assert_cast<const ColumnNullable &>(*col).getNestedColumnPtr();
|
||||
}
|
||||
|
||||
DataTypePtr data_type = removeLowCardinalityAndNullable(data_types[i]);
|
||||
TypeIndex type_index = data_type->getTypeId();
|
||||
|
@ -1,3 +1,4 @@
|
||||
#include <Columns/ColumnNullable.h>
|
||||
#include <Core/MySQL/PacketsProtocolText.h>
|
||||
#include <IO/ReadHelpers.h>
|
||||
#include <IO/WriteBufferFromString.h>
|
||||
@ -5,8 +6,8 @@
|
||||
#include "Common/assert_cast.h"
|
||||
#include "Core/MySQL/IMySQLWritePacket.h"
|
||||
#include "DataTypes/DataTypeLowCardinality.h"
|
||||
#include "DataTypes/DataTypeNullable.h"
|
||||
#include "DataTypes/DataTypesDecimal.h"
|
||||
|
||||
#include "MySQLUtils.h"
|
||||
|
||||
namespace DB
|
||||
@ -36,7 +37,9 @@ ResultSetRow::ResultSetRow(const Serializations & serializations, const DataType
|
||||
else if (type_index == TypeIndex::DateTime64)
|
||||
{
|
||||
WriteBufferFromOwnString ostr;
|
||||
ColumnPtr col = MySQLUtils::getBaseColumn(columns, i);
|
||||
ColumnPtr col = columns[i]->convertToFullIfNeeded();
|
||||
if (col->isNullable())
|
||||
col = assert_cast<const ColumnNullable &>(*col).getNestedColumnPtr();
|
||||
auto components = MySQLUtils::getNormalizedDateTime64Components(data_type, col, row_num);
|
||||
writeDateTimeText<'-', ':', ' '>(LocalDateTime(components.whole, DateLUT::instance(getDateTimeTimezone(*data_type))), ostr);
|
||||
ostr.write('.');
|
||||
|
133
tests/integration/test_mysql_protocol/java_client.reference
Normal file
133
tests/integration/test_mysql_protocol/java_client.reference
Normal file
@ -0,0 +1,133 @@
|
||||
### testSimpleDataTypes
|
||||
Row #1
|
||||
i8 type is TINYINT, value: -128, wasNull: false
|
||||
i16 type is SMALLINT, value: -32768, wasNull: false
|
||||
i32 type is INT, value: -2147483648, wasNull: false
|
||||
i64 type is BIGINT, value: -9223372036854775808, wasNull: false
|
||||
i128 type is CHAR, value: -170141183460469231731687303715884105728, wasNull: false
|
||||
i256 type is CHAR, value: -57896044618658097711785492504343953926634992332820282019728792003956564819968, wasNull: false
|
||||
ui8 type is TINYINT, value: 120, wasNull: false
|
||||
ui16 type is SMALLINT, value: 1234, wasNull: false
|
||||
ui32 type is INT, value: 51234, wasNull: false
|
||||
ui64 type is BIGINT, value: 421342, wasNull: false
|
||||
ui128 type is CHAR, value: 15324355, wasNull: false
|
||||
ui256 type is CHAR, value: 41345135123432, wasNull: false
|
||||
f32 type is FLOAT, value: -0.796896, wasNull: false
|
||||
f64 type is DOUBLE, value: -0.113259, wasNull: false
|
||||
b type is TINYINT, value: true, wasNull: false
|
||||
Row #2
|
||||
i8 type is TINYINT, value: 127, wasNull: false
|
||||
i16 type is SMALLINT, value: 32767, wasNull: false
|
||||
i32 type is INT, value: 2147483647, wasNull: false
|
||||
i64 type is BIGINT, value: 9223372036854775807, wasNull: false
|
||||
i128 type is CHAR, value: 170141183460469231731687303715884105727, wasNull: false
|
||||
i256 type is CHAR, value: 57896044618658097711785492504343953926634992332820282019728792003956564819967, wasNull: false
|
||||
ui8 type is TINYINT, value: 255, wasNull: false
|
||||
ui16 type is SMALLINT, value: 65535, wasNull: false
|
||||
ui32 type is INT, value: 4294967295, wasNull: false
|
||||
ui64 type is BIGINT, value: 18446744073709551615, wasNull: false
|
||||
ui128 type is CHAR, value: 340282366920938463463374607431768211455, wasNull: false
|
||||
ui256 type is CHAR, value: 115792089237316195423570985008687907853269984665640564039457584007913129639935, wasNull: false
|
||||
f32 type is FLOAT, value: 1.234000, wasNull: false
|
||||
f64 type is DOUBLE, value: 3.352451, wasNull: false
|
||||
b type is TINYINT, value: false, wasNull: false
|
||||
|
||||
### testStringTypes
|
||||
Row #1
|
||||
s type is CHAR, value: 42, wasNull: false
|
||||
sn type is CHAR, value: null, wasNull: true
|
||||
lc type is CHAR, value: test, wasNull: false
|
||||
nlc type is CHAR, value: null, wasNull: true
|
||||
Row #2
|
||||
s type is CHAR, value: foo, wasNull: false
|
||||
sn type is CHAR, value: bar, wasNull: false
|
||||
lc type is CHAR, value: qaz, wasNull: false
|
||||
nlc type is CHAR, value: qux, wasNull: false
|
||||
|
||||
### testLowCardinalityAndNullableTypes
|
||||
Row #1
|
||||
ilc type is INT, value: -54, wasNull: false
|
||||
dlc type is DATE, value: 1970-01-01, wasNull: false
|
||||
ni type is INT, value: 144, wasNull: false
|
||||
Row #2
|
||||
ilc type is INT, value: 42, wasNull: false
|
||||
dlc type is DATE, value: 2011-02-05, wasNull: false
|
||||
ni type is INT, value: 0, wasNull: true
|
||||
|
||||
### testDecimalTypes
|
||||
Row #1
|
||||
d32 type is DECIMAL, value: -1.55, wasNull: false
|
||||
d64 type is DECIMAL, value: 6.03, wasNull: false
|
||||
d128_native type is DECIMAL, value: 5, wasNull: false
|
||||
d128_text type is CHAR, value: -1224124.23423, wasNull: false
|
||||
d256 type is CHAR, value: -54342.3, wasNull: false
|
||||
Row #2
|
||||
d32 type is DECIMAL, value: 1234567.89, wasNull: false
|
||||
d64 type is DECIMAL, value: 123456789123456.789, wasNull: false
|
||||
d128_native type is DECIMAL, value: 12345678912345678912.1234567891, wasNull: false
|
||||
d128_text type is CHAR, value: 1234567.8912345678912345678911234567891, wasNull: false
|
||||
d256 type is CHAR, value: 12345678912345678912345678911234567891234567891234567891.12345678911234567891, wasNull: false
|
||||
|
||||
### testMiscTypes
|
||||
Row #1
|
||||
a type is CHAR, value: ['foo','bar'], wasNull: false
|
||||
u type is CHAR, value: 5da5038d-788f-48c6-b510-babb41c538d3, wasNull: false
|
||||
t type is CHAR, value: (42,'qaz'), wasNull: false
|
||||
m type is CHAR, value: {'qux':144,'text':255}, wasNull: false
|
||||
|
||||
### testDateTypes
|
||||
Row #1
|
||||
d type is DATE, value: 1970-01-01, wasNull: false
|
||||
d32 type is DATE, value: 1900-01-01, wasNull: false
|
||||
dt type is TIMESTAMP, value: 1970-01-01 00:00:00.0, wasNull: false
|
||||
dt64_3 type is TIMESTAMP, value: 1900-01-01 00:00:00.001, wasNull: false
|
||||
dt64_6 type is TIMESTAMP, value: 1900-01-01 00:00:00.000001, wasNull: false
|
||||
dt64_9 type is TIMESTAMP, value: 1900-01-01 00:00:00.0, wasNull: false
|
||||
Row #2
|
||||
d type is DATE, value: 2149-06-06, wasNull: false
|
||||
d32 type is DATE, value: 2178-04-16, wasNull: false
|
||||
dt type is TIMESTAMP, value: 2106-02-07 06:28:15.0, wasNull: false
|
||||
dt64_3 type is TIMESTAMP, value: 2106-02-07 06:28:15.123, wasNull: false
|
||||
dt64_6 type is TIMESTAMP, value: 2106-02-07 06:28:15.123456, wasNull: false
|
||||
dt64_9 type is TIMESTAMP, value: 2106-02-07 06:28:15.123456, wasNull: false
|
||||
|
||||
### testUnusualDateTime64Scales
|
||||
Row #1
|
||||
dt64_0 type is TIMESTAMP, value: 2022-04-13 03:17:45.0, wasNull: false
|
||||
dt64_1 type is TIMESTAMP, value: 2022-04-13 03:17:45.1, wasNull: false
|
||||
dt64_2 type is TIMESTAMP, value: 2022-04-13 03:17:45.12, wasNull: false
|
||||
dt64_4 type is TIMESTAMP, value: 2022-04-13 03:17:45.1234, wasNull: false
|
||||
dt64_5 type is TIMESTAMP, value: 2022-04-13 03:17:45.12345, wasNull: false
|
||||
dt64_7 type is TIMESTAMP, value: 2022-04-13 03:17:45.123456, wasNull: false
|
||||
dt64_8 type is TIMESTAMP, value: 2022-04-13 03:17:45.123456, wasNull: false
|
||||
Row #2
|
||||
dt64_0 type is TIMESTAMP, value: 2022-04-13 03:17:45.0, wasNull: false
|
||||
dt64_1 type is TIMESTAMP, value: 2022-04-13 03:17:45.1, wasNull: false
|
||||
dt64_2 type is TIMESTAMP, value: 2022-04-13 03:17:45.01, wasNull: false
|
||||
dt64_4 type is TIMESTAMP, value: 2022-04-13 03:17:45.0001, wasNull: false
|
||||
dt64_5 type is TIMESTAMP, value: 2022-04-13 03:17:45.00001, wasNull: false
|
||||
dt64_7 type is TIMESTAMP, value: 2022-04-13 03:17:45.0, wasNull: false
|
||||
dt64_8 type is TIMESTAMP, value: 2022-04-13 03:17:45.0, wasNull: false
|
||||
|
||||
### testDateTimeTimezones
|
||||
Row #1
|
||||
dt type is TIMESTAMP, value: 1970-01-01 01:00:00.0, wasNull: false
|
||||
dt64_3 type is TIMESTAMP, value: 1969-12-31 16:00:00.0, wasNull: false
|
||||
Row #2
|
||||
dt type is TIMESTAMP, value: 2022-09-04 20:31:05.0, wasNull: false
|
||||
dt64_3 type is TIMESTAMP, value: 2022-09-04 20:31:05.022, wasNull: false
|
||||
|
||||
### testSuspiciousNullableLowCardinalityTypes
|
||||
Row #1
|
||||
f type is FLOAT, value: 1.0, wasNull: false
|
||||
d type is DATE, value: 2022-04-15, wasNull: false
|
||||
dt type is TIMESTAMP, value: 2021-06-04 13:55:11.0, wasNull: false
|
||||
Row #2
|
||||
f type is FLOAT, value: 3.14, wasNull: false
|
||||
d type is DATE, value: 1970-01-01, wasNull: false
|
||||
dt type is TIMESTAMP, value: 1970-01-01 00:00:00.0, wasNull: false
|
||||
Row #3
|
||||
f type is FLOAT, value: 0.0, wasNull: true
|
||||
d type is DATE, value: null, wasNull: true
|
||||
dt type is TIMESTAMP, value: null, wasNull: true
|
||||
|
@ -1,129 +0,0 @@
|
||||
### testSimpleDataTypes
|
||||
Row #1
|
||||
i8 type is TINYINT, value: -128
|
||||
i16 type is SMALLINT, value: -32768
|
||||
i32 type is INT, value: -2147483648
|
||||
i64 type is BIGINT, value: -9223372036854775808
|
||||
i128 type is CHAR, value: -170141183460469231731687303715884105728
|
||||
i256 type is CHAR, value: -57896044618658097711785492504343953926634992332820282019728792003956564819968
|
||||
ui8 type is TINYINT, value: 120
|
||||
ui16 type is SMALLINT, value: 1234
|
||||
ui32 type is INT, value: 51234
|
||||
ui64 type is BIGINT, value: 421342
|
||||
ui128 type is CHAR, value: 15324355
|
||||
ui256 type is CHAR, value: 41345135123432
|
||||
f32 type is FLOAT, value: -0.796896
|
||||
f64 type is DOUBLE, value: -0.113259
|
||||
b type is TINYINT, value: true
|
||||
Row #2
|
||||
i8 type is TINYINT, value: 127
|
||||
i16 type is SMALLINT, value: 32767
|
||||
i32 type is INT, value: 2147483647
|
||||
i64 type is BIGINT, value: 9223372036854775807
|
||||
i128 type is CHAR, value: 170141183460469231731687303715884105727
|
||||
i256 type is CHAR, value: 57896044618658097711785492504343953926634992332820282019728792003956564819967
|
||||
ui8 type is TINYINT, value: 255
|
||||
ui16 type is SMALLINT, value: 65535
|
||||
ui32 type is INT, value: 4294967295
|
||||
ui64 type is BIGINT, value: 18446744073709551615
|
||||
ui128 type is CHAR, value: 340282366920938463463374607431768211455
|
||||
ui256 type is CHAR, value: 115792089237316195423570985008687907853269984665640564039457584007913129639935
|
||||
f32 type is FLOAT, value: 1.234000
|
||||
f64 type is DOUBLE, value: 3.352451
|
||||
b type is TINYINT, value: false
|
||||
|
||||
### testStringTypes
|
||||
Row #1
|
||||
s type is CHAR, value: 42
|
||||
sn type is CHAR, value: ᴺᵁᴸᴸ
|
||||
lc type is CHAR, value: test
|
||||
nlc type is CHAR, value: ᴺᵁᴸᴸ
|
||||
Row #2
|
||||
s type is CHAR, value: foo
|
||||
sn type is CHAR, value: bar
|
||||
lc type is CHAR, value: qaz
|
||||
nlc type is CHAR, value: qux
|
||||
|
||||
### testLowCardinalityAndNullableTypes
|
||||
Row #1
|
||||
ilc type is INT, value: -54
|
||||
dlc type is DATE, value: 1970-01-01
|
||||
ni type is INT, value: 144
|
||||
Row #2
|
||||
ilc type is INT, value: 42
|
||||
dlc type is DATE, value: 2011-02-05
|
||||
ni type is INT, value: 0
|
||||
|
||||
### testDecimalTypes
|
||||
Row #1
|
||||
d32 type is DECIMAL, value: -1.55
|
||||
d64 type is DECIMAL, value: 6.03
|
||||
d128_native type is DECIMAL, value: 5
|
||||
d128_text type is CHAR, value: -1224124.23423
|
||||
d256 type is CHAR, value: -54342.3
|
||||
Row #2
|
||||
d32 type is DECIMAL, value: 1234567.89
|
||||
d64 type is DECIMAL, value: 123456789123456.789
|
||||
d128_native type is DECIMAL, value: 12345678912345678912.1234567891
|
||||
d128_text type is CHAR, value: 1234567.8912345678912345678911234567891
|
||||
d256 type is CHAR, value: 12345678912345678912345678911234567891234567891234567891.12345678911234567891
|
||||
|
||||
### testMiscTypes
|
||||
Row #1
|
||||
a type is CHAR, value: ['foo','bar']
|
||||
u type is CHAR, value: 5da5038d-788f-48c6-b510-babb41c538d3
|
||||
t type is CHAR, value: (42,'qaz')
|
||||
m type is CHAR, value: {'qux':144,'text':255}
|
||||
|
||||
### testDateTypes
|
||||
Row #1
|
||||
d type is DATE, value: 1970-01-01
|
||||
d32 type is DATE, value: 1900-01-01
|
||||
dt type is TIMESTAMP, value: 1970-01-01 00:00:00.0
|
||||
dt64_3 type is TIMESTAMP, value: 1900-01-01 00:00:00.001
|
||||
dt64_6 type is TIMESTAMP, value: 1900-01-01 00:00:00.000001
|
||||
dt64_9 type is TIMESTAMP, value: 1900-01-01 00:00:00.0
|
||||
Row #2
|
||||
d type is DATE, value: 2149-06-06
|
||||
d32 type is DATE, value: 2178-04-16
|
||||
dt type is TIMESTAMP, value: 2106-02-07 06:28:15.0
|
||||
dt64_3 type is TIMESTAMP, value: 2106-02-07 06:28:15.123
|
||||
dt64_6 type is TIMESTAMP, value: 2106-02-07 06:28:15.123456
|
||||
dt64_9 type is TIMESTAMP, value: 2106-02-07 06:28:15.123456
|
||||
|
||||
### testUnusualDateTime64Scales
|
||||
Row #1
|
||||
dt64_0 type is TIMESTAMP, value: 2022-04-13 03:17:45.0
|
||||
dt64_1 type is TIMESTAMP, value: 2022-04-13 03:17:45.1
|
||||
dt64_2 type is TIMESTAMP, value: 2022-04-13 03:17:45.12
|
||||
dt64_4 type is TIMESTAMP, value: 2022-04-13 03:17:45.1234
|
||||
dt64_5 type is TIMESTAMP, value: 2022-04-13 03:17:45.12345
|
||||
dt64_7 type is TIMESTAMP, value: 2022-04-13 03:17:45.123456
|
||||
dt64_8 type is TIMESTAMP, value: 2022-04-13 03:17:45.123456
|
||||
Row #2
|
||||
dt64_0 type is TIMESTAMP, value: 2022-04-13 03:17:45.0
|
||||
dt64_1 type is TIMESTAMP, value: 2022-04-13 03:17:45.1
|
||||
dt64_2 type is TIMESTAMP, value: 2022-04-13 03:17:45.01
|
||||
dt64_4 type is TIMESTAMP, value: 2022-04-13 03:17:45.0001
|
||||
dt64_5 type is TIMESTAMP, value: 2022-04-13 03:17:45.00001
|
||||
dt64_7 type is TIMESTAMP, value: 2022-04-13 03:17:45.0
|
||||
dt64_8 type is TIMESTAMP, value: 2022-04-13 03:17:45.0
|
||||
|
||||
### testDateTimeTimezones
|
||||
Row #1
|
||||
dt type is TIMESTAMP, value: 1970-01-01 01:00:00.0
|
||||
dt64_3 type is TIMESTAMP, value: 1969-12-31 16:00:00.0
|
||||
Row #2
|
||||
dt type is TIMESTAMP, value: 2022-09-04 20:31:05.0
|
||||
dt64_3 type is TIMESTAMP, value: 2022-09-04 20:31:05.022
|
||||
|
||||
### testSuspiciousNullableLowCardinalityTypes
|
||||
Row #1
|
||||
f type is FLOAT, value: 1.0
|
||||
d type is DATE, value: 2022-04-15
|
||||
dt type is TIMESTAMP, value: 2021-06-04 13:55:11.0
|
||||
Row #2
|
||||
f type is FLOAT, value: 3.14
|
||||
d type is DATE, value: 1970-01-01
|
||||
dt type is TIMESTAMP, value: 1970-01-01 00:00:00.0
|
||||
|
@ -145,4 +145,5 @@ CREATE OR REPLACE TABLE suspicious_nullable_low_cardinality_types
|
||||
|
||||
INSERT INTO suspicious_nullable_low_cardinality_types
|
||||
VALUES (1, '2022-04-15', '2021-06-04 13:55:11'),
|
||||
(3.14, '1970-01-01', '1970-01-01 00:00:00');
|
||||
(3.14, '1970-01-01', '1970-01-01 00:00:00'),
|
||||
(NULL, NULL, NULL);
|
||||
|
@ -1,129 +0,0 @@
|
||||
### testSimpleDataTypes
|
||||
Row #1
|
||||
i8 type is TINYINT, value: -128
|
||||
i16 type is SMALLINT, value: -32768
|
||||
i32 type is INT, value: -2147483648
|
||||
i64 type is BIGINT, value: -9223372036854775808
|
||||
i128 type is CHAR, value: -170141183460469231731687303715884105728
|
||||
i256 type is CHAR, value: -57896044618658097711785492504343953926634992332820282019728792003956564819968
|
||||
ui8 type is TINYINT, value: 120
|
||||
ui16 type is SMALLINT, value: 1234
|
||||
ui32 type is INT, value: 51234
|
||||
ui64 type is BIGINT, value: 421342
|
||||
ui128 type is CHAR, value: 15324355
|
||||
ui256 type is CHAR, value: 41345135123432
|
||||
f32 type is FLOAT, value: -0.796896
|
||||
f64 type is DOUBLE, value: -0.113259
|
||||
b type is TINYINT, value: true
|
||||
Row #2
|
||||
i8 type is TINYINT, value: 127
|
||||
i16 type is SMALLINT, value: 32767
|
||||
i32 type is INT, value: 2147483647
|
||||
i64 type is BIGINT, value: 9223372036854775807
|
||||
i128 type is CHAR, value: 170141183460469231731687303715884105727
|
||||
i256 type is CHAR, value: 57896044618658097711785492504343953926634992332820282019728792003956564819967
|
||||
ui8 type is TINYINT, value: 255
|
||||
ui16 type is SMALLINT, value: 65535
|
||||
ui32 type is INT, value: 4294967295
|
||||
ui64 type is BIGINT, value: 18446744073709551615
|
||||
ui128 type is CHAR, value: 340282366920938463463374607431768211455
|
||||
ui256 type is CHAR, value: 115792089237316195423570985008687907853269984665640564039457584007913129639935
|
||||
f32 type is FLOAT, value: 1.234000
|
||||
f64 type is DOUBLE, value: 3.352451
|
||||
b type is TINYINT, value: false
|
||||
|
||||
### testStringTypes
|
||||
Row #1
|
||||
s type is CHAR, value: 42
|
||||
sn type is CHAR, value: null
|
||||
lc type is CHAR, value: test
|
||||
nlc type is CHAR, value: null
|
||||
Row #2
|
||||
s type is CHAR, value: foo
|
||||
sn type is CHAR, value: bar
|
||||
lc type is CHAR, value: qaz
|
||||
nlc type is CHAR, value: qux
|
||||
|
||||
### testLowCardinalityAndNullableTypes
|
||||
Row #1
|
||||
ilc type is INT, value: -54
|
||||
dlc type is DATE, value: 1970-01-01
|
||||
ni type is INT, value: 144
|
||||
Row #2
|
||||
ilc type is INT, value: 42
|
||||
dlc type is DATE, value: 2011-02-05
|
||||
ni type is INT, value: 0
|
||||
|
||||
### testDecimalTypes
|
||||
Row #1
|
||||
d32 type is DECIMAL, value: -1.55
|
||||
d64 type is DECIMAL, value: 6.03
|
||||
d128_native type is DECIMAL, value: 5
|
||||
d128_text type is CHAR, value: -1224124.23423
|
||||
d256 type is CHAR, value: -54342.3
|
||||
Row #2
|
||||
d32 type is DECIMAL, value: 1234567.89
|
||||
d64 type is DECIMAL, value: 123456789123456.789
|
||||
d128_native type is DECIMAL, value: 12345678912345678912.1234567891
|
||||
d128_text type is CHAR, value: 1234567.8912345678912345678911234567891
|
||||
d256 type is CHAR, value: 12345678912345678912345678911234567891234567891234567891.12345678911234567891
|
||||
|
||||
### testMiscTypes
|
||||
Row #1
|
||||
a type is CHAR, value: ['foo','bar']
|
||||
u type is CHAR, value: 5da5038d-788f-48c6-b510-babb41c538d3
|
||||
t type is CHAR, value: (42,'qaz')
|
||||
m type is CHAR, value: {'qux':144,'text':255}
|
||||
|
||||
### testDateTypes
|
||||
Row #1
|
||||
d type is DATE, value: 1970-01-01
|
||||
d32 type is DATE, value: 1900-01-01
|
||||
dt type is TIMESTAMP, value: 1970-01-01 00:00:00.0
|
||||
dt64_3 type is TIMESTAMP, value: 1900-01-01 00:00:00.001
|
||||
dt64_6 type is TIMESTAMP, value: 1900-01-01 00:00:00.000001
|
||||
dt64_9 type is TIMESTAMP, value: 1900-01-01 00:00:00.0
|
||||
Row #2
|
||||
d type is DATE, value: 2149-06-06
|
||||
d32 type is DATE, value: 2178-04-16
|
||||
dt type is TIMESTAMP, value: 2106-02-07 06:28:15.0
|
||||
dt64_3 type is TIMESTAMP, value: 2106-02-07 06:28:15.123
|
||||
dt64_6 type is TIMESTAMP, value: 2106-02-07 06:28:15.123456
|
||||
dt64_9 type is TIMESTAMP, value: 2106-02-07 06:28:15.123456
|
||||
|
||||
### testUnusualDateTime64Scales
|
||||
Row #1
|
||||
dt64_0 type is TIMESTAMP, value: 2022-04-13 03:17:45.0
|
||||
dt64_1 type is TIMESTAMP, value: 2022-04-13 03:17:45.1
|
||||
dt64_2 type is TIMESTAMP, value: 2022-04-13 03:17:45.12
|
||||
dt64_4 type is TIMESTAMP, value: 2022-04-13 03:17:45.1234
|
||||
dt64_5 type is TIMESTAMP, value: 2022-04-13 03:17:45.12345
|
||||
dt64_7 type is TIMESTAMP, value: 2022-04-13 03:17:45.123456
|
||||
dt64_8 type is TIMESTAMP, value: 2022-04-13 03:17:45.123456
|
||||
Row #2
|
||||
dt64_0 type is TIMESTAMP, value: 2022-04-13 03:17:45.0
|
||||
dt64_1 type is TIMESTAMP, value: 2022-04-13 03:17:45.1
|
||||
dt64_2 type is TIMESTAMP, value: 2022-04-13 03:17:45.01
|
||||
dt64_4 type is TIMESTAMP, value: 2022-04-13 03:17:45.0001
|
||||
dt64_5 type is TIMESTAMP, value: 2022-04-13 03:17:45.00001
|
||||
dt64_7 type is TIMESTAMP, value: 2022-04-13 03:17:45.0
|
||||
dt64_8 type is TIMESTAMP, value: 2022-04-13 03:17:45.0
|
||||
|
||||
### testDateTimeTimezones
|
||||
Row #1
|
||||
dt type is TIMESTAMP, value: 1970-01-01 01:00:00.0
|
||||
dt64_3 type is TIMESTAMP, value: 1969-12-31 16:00:00.0
|
||||
Row #2
|
||||
dt type is TIMESTAMP, value: 2022-09-04 20:31:05.0
|
||||
dt64_3 type is TIMESTAMP, value: 2022-09-04 20:31:05.022
|
||||
|
||||
### testSuspiciousNullableLowCardinalityTypes
|
||||
Row #1
|
||||
f type is FLOAT, value: 1.0
|
||||
d type is DATE, value: 2022-04-15
|
||||
dt type is TIMESTAMP, value: 2021-06-04 13:55:11.0
|
||||
Row #2
|
||||
f type is FLOAT, value: 3.14
|
||||
d type is DATE, value: 1970-01-01
|
||||
dt type is TIMESTAMP, value: 1970-01-01 00:00:00.0
|
||||
|
@ -799,7 +799,7 @@ def test_java_client_text(started_cluster, java_container):
|
||||
demux=True,
|
||||
)
|
||||
|
||||
with open(os.path.join(SCRIPT_DIR, "java_client_text.reference")) as fp:
|
||||
with open(os.path.join(SCRIPT_DIR, "java_client.reference")) as fp:
|
||||
reference = fp.read()
|
||||
|
||||
assert stdout.decode() == reference
|
||||
@ -813,7 +813,7 @@ def test_java_client_binary(started_cluster, java_container):
|
||||
demux=True,
|
||||
)
|
||||
|
||||
with open(os.path.join(SCRIPT_DIR, "java_client_binary.reference")) as fp:
|
||||
with open(os.path.join(SCRIPT_DIR, "java_client.reference")) as fp:
|
||||
reference = fp.read()
|
||||
|
||||
assert stdout.decode() == reference
|
||||
|
Loading…
Reference in New Issue
Block a user