2017-04-01 09:19:00 +00:00
# include <Functions/FunctionFactory.h>
# include <Functions/FunctionsConversion.h>
2014-08-22 00:57:20 +00:00
namespace DB
{
2016-08-17 07:40:06 +00:00
void throwExceptionForIncompletelyParsedValue (
2017-12-02 02:47:12 +00:00
ReadBuffer & read_buffer , Block & block , size_t result )
2016-08-17 07:40:06 +00:00
{
2017-07-31 21:39:24 +00:00
const IDataType & to_type = * block . getByPosition ( result ) . type ;
2016-08-17 07:40:06 +00:00
2017-07-31 21:39:24 +00:00
WriteBufferFromOwnString message_buf ;
message_buf < < " Cannot parse string " < < quote < < String ( read_buffer . buffer ( ) . begin ( ) , read_buffer . buffer ( ) . size ( ) )
< < " as " < < to_type . getName ( )
< < " : syntax error " ;
2016-08-17 07:40:06 +00:00
2017-07-31 21:39:24 +00:00
if ( read_buffer . offset ( ) )
message_buf < < " at position " < < read_buffer . offset ( )
< < " (parsed just " < < quote < < String ( read_buffer . buffer ( ) . begin ( ) , read_buffer . offset ( ) ) < < " ) " ;
else
message_buf < < " at begin of string " ;
2016-08-17 07:40:06 +00:00
2018-09-07 14:37:26 +00:00
if ( isNumber ( to_type ) )
2018-05-10 15:20:19 +00:00
message_buf < < " . Note: there are to " < < to_type . getName ( ) < < " OrZero and to " < < to_type . getName ( ) < < " OrNull functions, which returns zero/NULL instead of throwing exception. " ;
2016-08-17 07:40:06 +00:00
2017-07-31 21:39:24 +00:00
throw Exception ( message_buf . str ( ) , ErrorCodes : : CANNOT_PARSE_TEXT ) ;
2016-08-17 07:40:06 +00:00
}
2014-08-22 00:57:20 +00:00
void registerFunctionsConversion ( FunctionFactory & factory )
{
2017-04-01 07:20:54 +00:00
factory . registerFunction < FunctionToUInt8 > ( ) ;
factory . registerFunction < FunctionToUInt16 > ( ) ;
factory . registerFunction < FunctionToUInt32 > ( ) ;
factory . registerFunction < FunctionToUInt64 > ( ) ;
factory . registerFunction < FunctionToInt8 > ( ) ;
factory . registerFunction < FunctionToInt16 > ( ) ;
factory . registerFunction < FunctionToInt32 > ( ) ;
factory . registerFunction < FunctionToInt64 > ( ) ;
factory . registerFunction < FunctionToFloat32 > ( ) ;
factory . registerFunction < FunctionToFloat64 > ( ) ;
2017-10-30 02:18:06 +00:00
2018-08-22 16:16:39 +00:00
factory . registerFunction < FunctionToDecimal32 > ( ) ;
factory . registerFunction < FunctionToDecimal64 > ( ) ;
2018-08-22 17:26:11 +00:00
factory . registerFunction < FunctionToDecimal128 > ( ) ;
2018-08-21 18:25:38 +00:00
2017-04-01 07:20:54 +00:00
factory . registerFunction < FunctionToDate > ( ) ;
factory . registerFunction < FunctionToDateTime > ( ) ;
2017-07-04 10:42:53 +00:00
factory . registerFunction < FunctionToUUID > ( ) ;
2017-04-01 07:20:54 +00:00
factory . registerFunction < FunctionToString > ( ) ;
factory . registerFunction < FunctionToFixedString > ( ) ;
2017-10-30 02:18:06 +00:00
2017-04-01 07:20:54 +00:00
factory . registerFunction < FunctionToUnixTimestamp > ( ) ;
2018-06-07 20:25:38 +00:00
factory . registerFunction < FunctionBuilderCast > ( FunctionFactory : : CaseInsensitive ) ;
2017-10-30 02:18:06 +00:00
2017-04-01 07:20:54 +00:00
factory . registerFunction < FunctionToUInt8OrZero > ( ) ;
factory . registerFunction < FunctionToUInt16OrZero > ( ) ;
factory . registerFunction < FunctionToUInt32OrZero > ( ) ;
factory . registerFunction < FunctionToUInt64OrZero > ( ) ;
factory . registerFunction < FunctionToInt8OrZero > ( ) ;
factory . registerFunction < FunctionToInt16OrZero > ( ) ;
factory . registerFunction < FunctionToInt32OrZero > ( ) ;
factory . registerFunction < FunctionToInt64OrZero > ( ) ;
factory . registerFunction < FunctionToFloat32OrZero > ( ) ;
factory . registerFunction < FunctionToFloat64OrZero > ( ) ;
2018-02-11 23:57:07 +00:00
factory . registerFunction < FunctionToDateOrZero > ( ) ;
factory . registerFunction < FunctionToDateTimeOrZero > ( ) ;
2017-10-30 02:18:06 +00:00
2017-12-25 05:22:33 +00:00
factory . registerFunction < FunctionToUInt8OrNull > ( ) ;
factory . registerFunction < FunctionToUInt16OrNull > ( ) ;
factory . registerFunction < FunctionToUInt32OrNull > ( ) ;
factory . registerFunction < FunctionToUInt64OrNull > ( ) ;
factory . registerFunction < FunctionToInt8OrNull > ( ) ;
factory . registerFunction < FunctionToInt16OrNull > ( ) ;
factory . registerFunction < FunctionToInt32OrNull > ( ) ;
factory . registerFunction < FunctionToInt64OrNull > ( ) ;
factory . registerFunction < FunctionToFloat32OrNull > ( ) ;
factory . registerFunction < FunctionToFloat64OrNull > ( ) ;
2018-02-11 23:57:07 +00:00
factory . registerFunction < FunctionToDateOrNull > ( ) ;
factory . registerFunction < FunctionToDateTimeOrNull > ( ) ;
factory . registerFunction < FunctionParseDateTimeBestEffort > ( ) ;
factory . registerFunction < FunctionParseDateTimeBestEffortOrZero > ( ) ;
factory . registerFunction < FunctionParseDateTimeBestEffortOrNull > ( ) ;
2017-12-25 05:22:33 +00:00
2017-10-30 02:18:06 +00:00
factory . registerFunction < FunctionConvert < DataTypeInterval , NameToIntervalSecond , PositiveMonotonicity > > ( ) ;
factory . registerFunction < FunctionConvert < DataTypeInterval , NameToIntervalMinute , PositiveMonotonicity > > ( ) ;
factory . registerFunction < FunctionConvert < DataTypeInterval , NameToIntervalHour , PositiveMonotonicity > > ( ) ;
factory . registerFunction < FunctionConvert < DataTypeInterval , NameToIntervalDay , PositiveMonotonicity > > ( ) ;
factory . registerFunction < FunctionConvert < DataTypeInterval , NameToIntervalWeek , PositiveMonotonicity > > ( ) ;
factory . registerFunction < FunctionConvert < DataTypeInterval , NameToIntervalMonth , PositiveMonotonicity > > ( ) ;
2018-12-18 13:16:48 +00:00
factory . registerFunction < FunctionConvert < DataTypeInterval , NameToIntervalQuarter , PositiveMonotonicity > > ( ) ;
2017-10-30 02:18:06 +00:00
factory . registerFunction < FunctionConvert < DataTypeInterval , NameToIntervalYear , PositiveMonotonicity > > ( ) ;
2014-08-22 00:57:20 +00:00
}
}