diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 1633499..a4a7832 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -10068,7 +10068,37 @@ a_expr:		c_expr									{ $$ = $1; }
 			| a_expr subquery_Op sub_type '(' a_expr ')'		%prec Op
 				{
 					if ($3 == ANY_SUBLINK)
-						$$ = (Node *) makeA_Expr(AEXPR_OP_ANY, $2, $1, $5, @2);
+					{
+						bool expandLike = false;
+						/* convert expr of type "a like any(array[1,2])" into
+						 * "a like 1 or a like 2"
+						 */
+						if (strcmp(NameListToString($2),"~~")==0)
+						{
+							ListCell *lc;
+							if (IsA($5, A_ArrayExpr))
+							{
+								Node *res = NULL;
+								A_ArrayExpr *arr_expr = (A_ArrayExpr *)$5;
+								foreach (lc, arr_expr->elements)
+								{
+									Node *tmp = NULL;
+									Node *element = (Node*)lfirst(lc);
+									expandLike = true;
+									tmp = (Node *) makeSimpleA_Expr(AEXPR_OP, "~~", $1, element, @2);
+									if (res)
+										res = (Node*) makeA_Expr(AEXPR_OR, NIL, res, tmp, @2);
+									else
+										res = tmp;
+								}
+								$$ = res;
+							}
+
+						}
+						/* also handles array with zero elements */
+						if (!expandLike)
+							$$ = (Node *) makeA_Expr(AEXPR_OP_ANY, $2, $1, $5, @2);
+					}
 					else
 						$$ = (Node *) makeA_Expr(AEXPR_OP_ALL, $2, $1, $5, @2);
 				}