Take a look at the processing for UPSERT VALUES in UpsertCompiler starting at line 562. The processing you do will be pretty similar to this, maybe even to point where you could refactor this code. The only difference is that the "column" we're dealing with has a primitive type, while yours will be of an a ARRAY type. So you'd want to use the ARRAY element type instead of the column data type directly.  The types of things this code handles include:

* Dealing with ParseNodes that are bind variables (including tracking/updating the parameter metadata)
* Dealing with occurrences of NEXT VALUE FOR or CURRENT VALUE FOR expressions
* Dealing with occurrences of CURRENT_DATE (by using an ExpressionCompiler derived visitor and calling evaluate on each compiled ParseNode
* Dealing with coercing to the correct type (though perhaps your PArrayDataType.instantiatePhoenixArray() handles that?)
* Error checking for type compatibility and size compatibility