clickhouse-odbc icon indicating copy to clipboard operation
clickhouse-odbc copied to clipboard

How can I workaround Malformed message: Too many header fields error?

Open hidekoji opened this issue 5 years ago • 2 comments

After executing a SQL query, I'm getting "Too many header fields" error.

nanodbc/nanodbc.cpp:1655: HY000: Malformed message: Too many header fields 

I googled it but I couldn't figure out what's this Too many header fields means. Could you elaborate on what does the error means and the possible workaround for this?

In the ODBC trace log file, I see below:

Rserve          2b34-2c98	ENTER SQLSetStmtAttr 
		SQLHSTMT            0x000000000E4E2270
		SQLINTEGER                   0 <SQL_ATTR_QUERY_TIMEOUT>
		SQLPOINTER                 0
		SQLINTEGER                   0 

Rserve          2b34-2c98	EXIT  SQLSetStmtAttr  with return code 0 (SQL_SUCCESS)
		SQLHSTMT            0x000000000E4E2270
		SQLINTEGER                   0 <SQL_ATTR_QUERY_TIMEOUT>
		SQLPOINTER                 0
		SQLINTEGER                   0 

Rserve          2b34-2c98	ENTER SQLNumParams 
		HSTMT               0x000000000E4E2270
		SWORD *             0x000000000061564E

Rserve          2b34-2c98	EXIT  SQLNumParams  with return code 0 (SQL_SUCCESS)
		HSTMT               0x000000000E4E2270
		SWORD *             0x000000000061564E (0)

Rserve          2b34-2c98	ENTER SQLFreeStmt 
		HSTMT               0x000000000E4E2270
		UWORD                        0 <SQL_CLOSE>

Rserve          2b34-2c98	EXIT  SQLFreeStmt  with return code 0 (SQL_SUCCESS)
		HSTMT               0x000000000E4E2270
		UWORD                        0 <SQL_CLOSE>

Rserve          2b34-2c98	ENTER SQLSetStmtAttr 
		SQLHSTMT            0x000000000E4E2270
		SQLINTEGER                  22 <SQL_ATTR_PARAMSET_SIZE>
		SQLPOINTER                 1
		SQLINTEGER                   0 

Rserve          2b34-2c98	EXIT  SQLSetStmtAttr  with return code 0 (SQL_SUCCESS)
		SQLHSTMT            0x000000000E4E2270
		SQLINTEGER                  22 <SQL_ATTR_PARAMSET_SIZE>
		SQLPOINTER                 1
		SQLINTEGER                   0 

Rserve          2b34-2c98	ENTER SQLSetStmtAttr 
		SQLHSTMT            0x000000000E4E2270
		SQLINTEGER                   0 <SQL_ATTR_QUERY_TIMEOUT>
		SQLPOINTER                 0
		SQLINTEGER                   0 

Rserve          2b34-2c98	EXIT  SQLSetStmtAttr  with return code 0 (SQL_SUCCESS)
		SQLHSTMT            0x000000000E4E2270
		SQLINTEGER                   0 <SQL_ATTR_QUERY_TIMEOUT>
		SQLPOINTER                 0
		SQLINTEGER                   0 

Rserve          2b34-2c98	ENTER SQLExecute 
		HSTMT               0x000000000E4E2270

Rserve          2b34-2c98	EXIT  SQLExecute  with return code -1 (SQL_ERROR)
		HSTMT               0x000000000E4E2270

		DIAG [HY000] Malformed message: Too many header fields (1) 

SQL DBMS VER: "01.00.0000" SQL_ODBC_VER: "03.80.0000" SQL_DRIVER_VER: "1.1.9.20201226"

hidekoji avatar Feb 26 '21 23:02 hidekoji

This error comes from the HTTP client implementation code. Can you reproduce the same query using curl in verbose mode, it should show a lot of HTTP headers received from the ClickHouse server. Post them here.

traceon avatar Feb 28 '21 13:02 traceon

Thank you for the update. So it seems this error happens when I try the relatively long SQL query but works ok for a short SQL query. Do you have a limit of the SQL query length?

I'll post a curl output when it's ready.

hidekoji avatar Mar 12 '21 18:03 hidekoji