#pragma once // undo these tokens to use numeric_limits below #include "stdafx.h" #include namespace mssql { using namespace std; class QueryOperationParams; class BoundDatum { public: bool bind(Local &p); void reserve_column_type(SQLSMALLINT type, size_t& len, const size_t row_count); bool get_defined_precision() const { return definedPrecision; } bool get_defined_scale() const { return definedScale; } Local unbind() const; vector & get_ind_vec() { return _indvec; } char *getErr() const { return err; } shared_ptr get_storage() { return _storage; } BoundDatum() : js_type(JS_UNKNOWN), c_type(0), sql_type(0), param_size(0), max_length(0), digits(0), buffer(nullptr), buffer_len(0), param_type(SQL_PARAM_INPUT), offset(0), is_bcp(false), ordinal_position(0), bcp_terminator_len(0), bcp_terminator(NULL), is_tvp(false), is_money(false), tvp_no_cols(0), definedPrecision(false), definedScale(false), err(nullptr) { _indvec = vector(1); _storage = make_shared(); _params = nullptr; } BoundDatum(shared_ptr params) : BoundDatum() { _params = params; } enum JS_TYPE { JS_UNKNOWN, JS_NULL, JS_STRING, JS_BOOLEAN, JS_INT, JS_UINT, JS_NUMBER, JS_DATE, JS_BUFFER }; JS_TYPE js_type; SQLSMALLINT c_type; SQLSMALLINT sql_type; SQLULEN param_size; SQLULEN max_length; SQLSMALLINT digits; SQLPOINTER buffer; SQLLEN buffer_len; uint16_t param_type; int32_t offset; bool is_bcp; int32_t bcp_version; uint32_t ordinal_position; SQLULEN bcp_terminator_len; LPCBYTE bcp_terminator; bool is_tvp; bool is_money; int tvp_no_cols; wstring name; private: vector _indvec; shared_ptr _storage; shared_ptr _params; bool definedPrecision; bool definedScale; char * err; void bind_null(const Local & p); void bind_null_array(const Local & p); void reserve_null(SQLLEN len); void bind_long_var_binary(Local & p); void bind_w_long_var_char(const Local & p); void bind_w_var_char(const Local & p); void bind_w_var_char(const Local& p, int precision); void reserve_w_var_char_array(size_t max_str_len, size_t array_len); void bind_w_var_char_array(const Local & p); void bind_w_var_char_array_bcp(const Local & p); void bind_boolean(const Local & p); void reserve_boolean(SQLLEN len); void bind_boolean_array(const Local & p); void bind_small_int(const Local & p); void bind_tiny_int(const Local & p); void bind_numeric(const Local & p); void bind_numeric_struct(double d, SQL_NUMERIC_STRUCT & ns); void bind_numeric_array(const Local & p); void reserve_numeric(SQLLEN len); void bind_int8(const Local & p); void reserve_int8(SQLLEN len); void bind_int8_array(const Local & p); void bind_int16(const Local & p); void reserve_int16(SQLLEN len); void bind_int16_array(const Local & p); void bind_int32(const Local & p); void reserve_int32(SQLLEN len); void bind_int32_array(const Local & p); void bind_uint32(const Local & p); void reserve_uint32(SQLLEN len); void bind_uint32_array(const Local & p); void bind_integer(const Local& p); void reserve_integer(SQLLEN len); void bind_integer_array(const Local & p); void reserve_big_integer(SQLLEN len); void bind_float(const Local & p); void bind_real(const Local & p); void bind_decimal(const Local& p); void reserve_decimal(SQLLEN len); void bind_decimal_array(const Local& p); void bind_double(const Local& p); void reserve_double(SQLLEN len); void bind_double_array(const Local & p); void bind_time(const Local & p); void bind_time_array(const Local & p); void reserve_time(SQLLEN len); void bind_date(const Local & p); void bind_date_array(const Local & p); void reserve_date(SQLLEN len); void bind_time_stamp(const Local & p); void bind_time_stamp_array(const Local & p); void reserve_time_stamp(SQLLEN len); void bind_time_stamp_offset(const Local & p); void reserve_time_stamp_offset(SQLLEN len); void bind_time_stamp_offset_array(const Local & p); void bind_number(const Local & p); void bind_number_array(const Local & p); void bind_tvp(Local & p); void bind_binary( Local & p); void bind_binary_array(const Local & p); void bind_binary_array_bcp(const Local & p); void reserve_binary_array(size_t max_obj_len, size_t array_len); void bind_var_binary( Local & p); void bind_var_binary_array(const Local & p); void bind_var_binary_array_bcp(const Local & p); void reserve_var_binary_array(size_t max_obj_len, size_t array_len); bool bind_datum_type(Local& p); bool bind(Local o, const char* if_str, uint16_t type); bool bind_object(Local &p); bool bind_array(Local &pp); bool proc_bind(Local &p, Local &v); void bind_char(const Local & pp); void bind_var_char(const Local & p); void bind_var_char_array_bcp(const Local& p); void bind_var_char_array(const Local& p); void bind_var_char(const Local & p, int precision); void reserve_var_char_array(size_t precision, size_t array_len); bool user_bind(Local &p, Local &v); void assign_precision(Local &pv); void sql_longvarbinary(Local pp); void sql_integer(Local pp); void sql_wvarchar(Local pp); void sql_wlongvarchar(Local pp); void sql_bit(Local pp); void sql_bigint(Local pp); void sql_double(Local pp); void sql_float(Local pp); void sql_real(Local pp); void sql_tinyint(Local pp); void sql_smallint(Local pp); void sql_decimal(const Local pp); void sql_numeric(Local pp); void sql_char(Local pp); void sql_varchar(Local pp); void sql_ss_time2(Local pp); void sql_type_date(Local pp); void sql_type_timestamp(Local pp); void sql_ss_timestampoffset(Local pp); void sql_varbinary(Local pp); void sql_binary(Local pp); size_t get_default_size(size_t len) const; static Local unbind_null(); Local unbind_string() const; Local unbind_double() const; Local unbind_boolean() const; Local unbind_int32() const; Local unbind_uint32() const; Local unbind_number() const; Local unbind_date() const; }; }