@Override
    public List<Object> getUpdateValues() {
        if (ast.getTop() != null) {
            //deal with top sql
            dealTop(ast);
        }
        List<SQLUpdateSetItem> updateSetItems = ast.getItems();
        List<Object> list = new ArrayList<>(updateSetItems.size());
        for (SQLUpdateSetItem updateSetItem : updateSetItems) {
            SQLExpr expr = updateSetItem.getValue();
            if (expr instanceof SQLNullExpr) {
                list.add(Null.get());
            } else if (expr instanceof SQLValuableExpr) {
                list.add(((SQLValuableExpr) expr).getValue());
            } else if (expr instanceof SQLVariantRefExpr) {
                //add '?'
                list.add(((SQLVariantRefExpr) expr).getName());
            } else if (expr instanceof SQLMethodInvokeExpr) {
                list.add(SqlMethodExpr.get());
            } else if (expr instanceof SQLDefaultExpr) {
                list.add(SqlDefaultExpr.get());
            } else if (expr instanceof SQLSequenceExpr) {
                //Supported only since 2012 version of SQL Server,use next value for
                SQLSequenceExpr sequenceExpr = (SQLSequenceExpr) expr;
                String sequence = sequenceExpr.getSequence().getSimpleName();
                String function = sequenceExpr.getFunction().name;
                list.add(new SqlSequenceExpr(sequence, function));
            } else {
                wrapSQLParsingException(expr);
            }
        }
        return list;
    }
@Test
    public void testGetUpdateValues() {
        // test with normal
        String sql = "update t set a = ?, b = ?, c = ?";
        SQLStatement sqlStatement = getSQLStatement(sql);

        SqlServerUpdateRecognizer recognizer = new SqlServerUpdateRecognizer(sql, sqlStatement);
        List<Object> updateValues = recognizer.getUpdateValues();
        Assertions.assertEquals(updateValues.size(), 3);

        // test with values
        sql = "update t set a = 1, b = 2, c = 3";
        sqlStatement = getSQLStatement(sql);

        recognizer = new SqlServerUpdateRecognizer(sql, sqlStatement);
        updateValues = recognizer.getUpdateValues();
        Assertions.assertEquals(updateValues.size(), 3);

        // test with default、method、NULL
        sql = "update t set a = default, b = now(), c = null";
        sqlStatement = getSQLStatement(sql);

        recognizer = new SqlServerUpdateRecognizer(sql, sqlStatement);
        updateValues = recognizer.getUpdateValues();
        Assertions.assertEquals(updateValues.size(), 3);

        // test with sequence
        sql = "update t set a = next value for t1.id";
        sqlStatement = getSQLStatement(sql);

        recognizer = new SqlServerUpdateRecognizer(sql, sqlStatement);
        updateValues = recognizer.getUpdateValues();
        Assertions.assertEquals(updateValues.size(), 1);

        //test with top
        Assertions.assertThrows(NotSupportYetException.class, () -> {
            String s = "update top(1) t set a = ?";
            SQLStatement sqlStatement1 = getSQLStatement(s);

            SqlServerUpdateRecognizer sqlServerUpdateRecognizer = new SqlServerUpdateRecognizer(s, sqlStatement1);
            sqlServerUpdateRecognizer.getUpdateValues();
        });

        // test with error
        Assertions.assertThrows(SQLParsingException.class, () -> {
            String s = "update t set a = ?";
            SQLStatement sqlStatement1 = getSQLStatement(s);
            SQLUpdateStatement sqlUpdateStatement = (SQLUpdateStatement) sqlStatement1;
            List<SQLUpdateSetItem> updateSetItems = sqlUpdateStatement.getItems();
            for (SQLUpdateSetItem updateSetItem : updateSetItems) {
                updateSetItem.setValue(new MySqlOrderingExpr());
            }
            SqlServerUpdateRecognizer sqlServerUpdateRecognizer = new SqlServerUpdateRecognizer(s, sqlUpdateStatement);
            sqlServerUpdateRecognizer.getUpdateValues();
        });
    }