Hi james

While playing with the feature I came accross this behaviour.
When calling an upsert 
We go through Phoenixruntime. executeStatements.
here we call 
first stmt.getParameterMetaData();
and then stmt.execute()

the stmt.getParameterMetaData(); calls the statement.compilePlan which is an ExecutableUpsertStatement
and ExecutableUpsertStatement.compilePlan create an UpsertCompiler and calls compile on it.

 int the previous Phoenixruntime. executeStatements. after stmt.getParameterMetaData();
we call stmt.execute(), this on calls the ExecutableUpsertStatement.execute -> executeUpdate and this calls 
compilePlan(getParameters()) so ends up creatting another upsert compiler and calling compile on it again.

I'm not sure if this is the intended behaviour or if I have miss read things. However with dynamic columns this leads to me trying to add the dynamic columns twice in the createtableref since it ends up being called twice. For now I have solved this by checking tha if a column with the same datatype already exists I ignore the dynamic column add.

Thanks for you help