/** * Builds filter expression for IN condition * * @param string $operator The operator to use. Anything could be used e.g. '`IN`'. * @param array $columns The columns of composite IN condition. * @param array $values The values of composite IN condition. * @param array $params The binding parameters to be populated. * @return string Filter expression. * @throws Exception No NULL value in DynamoDB. */ protected function buildCompositeInCondition($operator, $columns, $values, &$params) { $vss = []; foreach ($values as $value) { $vs = []; foreach ($columns as $column) { if (isset($value[$column])) { $phName = self::PARAM_PREFIX . count($params); $params[$phName] = $value[$column]; $vs[] = $phName; } else { throw new Exception(__METHOD__ . ' cannot include NULL value.'); } } $vss[] = '(' . implode(', ', $vs) . ')'; } foreach ($columns as $i => $column) { if (strpos($column, '(') === false) { $columns[$i] = $this->db->quoteColumnName($column); } } return '(' . implode(', ', $columns) . ") {$operator} (" . implode(', ', $vss) . ')'; }