- Check if two expressions types are equals
If not then check if one can be implicit casted to the other 
- Checks if all values has the same type
If they have the same type, return it or return None 
- Check That function call arguments types are matches the parameter types
Return a Diagnostic Error if anything is wrong 
- Check if expression type and data type are equals
If not then check if one can be implicit casted to the other 
- Return the expected  DataType-  depending on the prefix unary operator 
- Resolve the return type of Std or Aggregation function and re resolve it if it variant or dynamic 
- Check that all selected fields types are defined correctly in selected tables
Return the columns classified for each table
Return a Diagnostic Error if anything is wrong 
- Type check the right hand side of prefix unary expression
Return Equals, Error, or new expression after implicit casting 
- Check that all projection columns are valid for this table name
Return a Diagnostic Error if anything is wrong 
- Return a  Diagnostic-  with common type mismatch error message