Issue 1:
when execute sql that likes follow

INSERT INTO stock_age (

tenant_id,

warehouse_no,

sku_no,

lot_no,

package_no,

owner_no,

product_level,

md5_value,

qty

)

VALUES

(

'T123456',

'26',

'S011',

'1',

'1',

'ownerNo',

'1',

'asdsdfdfdfd',

5

)

ON DUPLICATE KEY

UPDATE

qty = IFNULL(qty, 0) + 1

report error:

Cause: java.sql.SQLException: No value specified for parameter 10

; bad SQL grammar []; nested exception is java.sql.SQLException: No value specified for parameter 10

Caused by: java.sql.SQLException: No value specified for parameter 10

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:996)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:924)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:870)

at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2281)

at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2261)

at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2191)

at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1165)

at org.apache.commons.dbcp2.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:198)

at org.apache.commons.dbcp2.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:198)

at org.apache.shardingsphere.shardingjdbc.executor.SQLExecuteCallbackFactory$2.executeSQL(SQLExecuteCallbackFactory.java:64)

at org.apache.shardingsphere.shardingjdbc.executor.SQLExecuteCallbackFactory$2.executeSQL(SQLExecuteCallbackFactory.java:60)

at org.apache.shardingsphere.core.execute.sql.execute.SQLExecuteCallback.execute0(SQLExecuteCallback.java:79)

at org.apache.shardingsphere.core.execute.sql.execute.SQLExecuteCallback.execute(SQLExecuteCallback.java:61)

at org.apache.shardingsphere.core.execute.engine.ShardingExecuteEngine.syncGroupExecute(ShardingExecuteEngine.java:125)

at org.apache.shardingsphere.core.execute.engine.ShardingExecuteEngine.parallelExecute(ShardingExecuteEngine.java:102)

at org.apache.shardingsphere.core.execute.engine.ShardingExecuteEngine.groupExecute(ShardingExecuteEngine.java:83)

at org.apache.shardingsphere.core.execute.sql.execute.SQLExecuteTemplate.executeGroup(SQLExecuteTemplate.java:73)

at org.apache.shardingsphere.core.execute.sql.execute.SQLExecuteTemplate.executeGroup(SQLExecuteTemplate.java:56)

at org.apache.shardingsphere.shardingjdbc.executor.AbstractStatementExecutor.executeCallback(AbstractStatementExecutor.java:140)

at org.apache.shardingsphere.shardingjdbc.executor.PreparedStatementExecutor.execute(PreparedStatementExecutor.java:153)

at org.apache.shardingsphere.shardingjdbc.jdbc.core.statement.ShardingPreparedStatement.execute(ShardingPreparedStatement.java:192)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

Which version of ShardingSphere did you use?

4.0.1

Which project did you use? Sharding-JDBC or Sharding-Proxy?

Sharding-JDBC

Issue 2:
The sharding-proxy and sharding-scaling modules are both use MySQL protocol, there are lots of duplicated codes.

It is better to create a new module to process database protocol. The tasks are:

Create shardingsphere-database-protocol module

Create shardingsphere-mysql-protocol submodule

Create shardingsphere-postgresql-protocol submodule

Merge sharding-proxy and sharding-scaling's mysql protocol part.

Move sharding-proxy's postgresql protocol part.