@@ -294,103 +294,103 @@ |
||
| 294 | 294 | public function onFunctionCallExpression($functionDescription, $params) |
| 295 | 295 | { |
| 296 | 296 | switch ($functionDescription->functionName) { |
| 297 | - case ODataConstants::STRFUN_COMPARE: |
|
| 298 | - return "STRCMP($params[0]; $params[1])"; |
|
| 299 | - break; |
|
| 300 | - case ODataConstants::STRFUN_ENDSWITH: |
|
| 301 | - return "(($params[1]) = RIGHT(($params[0]), LEN($params[1])))"; |
|
| 302 | - break; |
|
| 303 | - case ODataConstants::STRFUN_INDEXOF: |
|
| 304 | - // In SQLServer the index of string starts from 1, but in OData |
|
| 305 | - // the string start with index 0, so the below subtraction of 1 |
|
| 306 | - return "(CHARINDEX($params[1], $params[0]) - 1)"; |
|
| 307 | - break; |
|
| 308 | - case ODataConstants::STRFUN_REPLACE: |
|
| 309 | - return "REPLACE($params[0], $params[1], $params[2])"; |
|
| 310 | - break; |
|
| 311 | - case ODataConstants::STRFUN_STARTSWITH: |
|
| 312 | - return "(($params[1]) = LEFT(($params[0]), LEN($params[1])))"; |
|
| 313 | - break; |
|
| 314 | - case ODataConstants::STRFUN_TOLOWER: |
|
| 315 | - return "LOWER($params[0])"; |
|
| 316 | - break; |
|
| 317 | - case ODataConstants::STRFUN_TOUPPER: |
|
| 318 | - return "UPPER($params[0])"; |
|
| 319 | - break; |
|
| 320 | - case ODataConstants::STRFUN_TRIM: |
|
| 321 | - // OData supports trim function |
|
| 322 | - // We don't have the same function SQL Server, so use SQL functions LTRIM and RTRIM together |
|
| 323 | - // to achieve TRIM functionality. |
|
| 324 | - return "RTRIM(LTRIM($params[0]))"; |
|
| 325 | - break; |
|
| 326 | - case ODataConstants::STRFUN_SUBSTRING: |
|
| 327 | - if (count($params) == 3) { |
|
| 328 | - // 3 Param version of OData substring |
|
| 329 | - return "SUBSTRING($params[0], $params[1] + 1, $params[2])"; |
|
| 330 | - } else { |
|
| 331 | - // 2 Params version of OData substring |
|
| 332 | - // We don't have the same function for SQL Server, we have only: |
|
| 297 | + case ODataConstants::STRFUN_COMPARE: |
|
| 298 | + return "STRCMP($params[0]; $params[1])"; |
|
| 299 | + break; |
|
| 300 | + case ODataConstants::STRFUN_ENDSWITH: |
|
| 301 | + return "(($params[1]) = RIGHT(($params[0]), LEN($params[1])))"; |
|
| 302 | + break; |
|
| 303 | + case ODataConstants::STRFUN_INDEXOF: |
|
| 304 | + // In SQLServer the index of string starts from 1, but in OData |
|
| 305 | + // the string start with index 0, so the below subtraction of 1 |
|
| 306 | + return "(CHARINDEX($params[1], $params[0]) - 1)"; |
|
| 307 | + break; |
|
| 308 | + case ODataConstants::STRFUN_REPLACE: |
|
| 309 | + return "REPLACE($params[0], $params[1], $params[2])"; |
|
| 310 | + break; |
|
| 311 | + case ODataConstants::STRFUN_STARTSWITH: |
|
| 312 | + return "(($params[1]) = LEFT(($params[0]), LEN($params[1])))"; |
|
| 313 | + break; |
|
| 314 | + case ODataConstants::STRFUN_TOLOWER: |
|
| 315 | + return "LOWER($params[0])"; |
|
| 316 | + break; |
|
| 317 | + case ODataConstants::STRFUN_TOUPPER: |
|
| 318 | + return "UPPER($params[0])"; |
|
| 319 | + break; |
|
| 320 | + case ODataConstants::STRFUN_TRIM: |
|
| 321 | + // OData supports trim function |
|
| 322 | + // We don't have the same function SQL Server, so use SQL functions LTRIM and RTRIM together |
|
| 323 | + // to achieve TRIM functionality. |
|
| 324 | + return "RTRIM(LTRIM($params[0]))"; |
|
| 325 | + break; |
|
| 326 | + case ODataConstants::STRFUN_SUBSTRING: |
|
| 327 | + if (count($params) == 3) { |
|
| 328 | + // 3 Param version of OData substring |
|
| 329 | + return "SUBSTRING($params[0], $params[1] + 1, $params[2])"; |
|
| 330 | + } else { |
|
| 331 | + // 2 Params version of OData substring |
|
| 332 | + // We don't have the same function for SQL Server, we have only: |
|
| 333 | 333 | |
| 334 | - // SUBSTRING ( value_expression , start_expression , length_expression ) |
|
| 335 | - // http://msdn.microsoft.com/en-us/library/ms187748.aspx |
|
| 334 | + // SUBSTRING ( value_expression , start_expression , length_expression ) |
|
| 335 | + // http://msdn.microsoft.com/en-us/library/ms187748.aspx |
|
| 336 | 336 | |
| 337 | - // If the sum of start_expression and length_expression is greater than the number of characters |
|
| 338 | - // in value_expression, the whole value expression beginning at start_expression is returned |
|
| 339 | - // In OData substring function the index start from 0, in SQL Server its from 1 |
|
| 340 | - return "SUBSTRING($params[0], $params[1] + 1, LEN($params[0]))"; |
|
| 341 | - } |
|
| 342 | - break; |
|
| 343 | - case ODataConstants::STRFUN_SUBSTRINGOF: |
|
| 344 | - return "(CHARINDEX($params[0], $params[1]) != 0)"; |
|
| 345 | - break; |
|
| 346 | - case ODataConstants::STRFUN_CONCAT: |
|
| 347 | - return "$params[0] + $params[1]"; |
|
| 348 | - break; |
|
| 349 | - case ODataConstants::STRFUN_LENGTH: |
|
| 350 | - return "LEN($params[0])"; |
|
| 351 | - break; |
|
| 352 | - case ODataConstants::GUIDFUN_EQUAL: |
|
| 353 | - return "($params[0] = $params[1])"; |
|
| 354 | - break; |
|
| 355 | - case ODataConstants::DATETIME_COMPARE: |
|
| 356 | - return "DATETIMECMP($params[0]; $params[1])"; |
|
| 357 | - break; |
|
| 358 | - case ODataConstants::DATETIME_YEAR: |
|
| 359 | - return "YEAR($params[0])"; |
|
| 360 | - break; |
|
| 361 | - case ODataConstants::DATETIME_MONTH: |
|
| 362 | - return "MONTH($params[0])"; |
|
| 363 | - break; |
|
| 364 | - case ODataConstants::DATETIME_DAY: |
|
| 365 | - return "DAY($params[0])"; |
|
| 366 | - break; |
|
| 367 | - case ODataConstants::DATETIME_HOUR: |
|
| 368 | - return "DATENAME(HOUR, $params[0])"; |
|
| 369 | - break; |
|
| 370 | - case ODataConstants::DATETIME_MINUTE: |
|
| 371 | - return "DATENAME(MINUTE, $params[0])"; |
|
| 372 | - break; |
|
| 373 | - case ODataConstants::DATETIME_SECOND: |
|
| 374 | - return "DATENAME(SECOND, $params[0])"; |
|
| 375 | - break; |
|
| 376 | - case ODataConstants::MATHFUN_ROUND: |
|
| 377 | - return "ROUND($params[0], $this->_default_round)"; |
|
| 378 | - break; |
|
| 379 | - case ODataConstants::MATHFUN_CEILING: |
|
| 380 | - return "CEILING($params[0])"; |
|
| 381 | - break; |
|
| 382 | - case ODataConstants::MATHFUN_FLOOR: |
|
| 383 | - return "FLOOR($params[0])"; |
|
| 384 | - break; |
|
| 385 | - case ODataConstants::BINFUL_EQUAL: |
|
| 386 | - return "($params[0] = $params[1])"; |
|
| 387 | - break; |
|
| 337 | + // If the sum of start_expression and length_expression is greater than the number of characters |
|
| 338 | + // in value_expression, the whole value expression beginning at start_expression is returned |
|
| 339 | + // In OData substring function the index start from 0, in SQL Server its from 1 |
|
| 340 | + return "SUBSTRING($params[0], $params[1] + 1, LEN($params[0]))"; |
|
| 341 | + } |
|
| 342 | + break; |
|
| 343 | + case ODataConstants::STRFUN_SUBSTRINGOF: |
|
| 344 | + return "(CHARINDEX($params[0], $params[1]) != 0)"; |
|
| 345 | + break; |
|
| 346 | + case ODataConstants::STRFUN_CONCAT: |
|
| 347 | + return "$params[0] + $params[1]"; |
|
| 348 | + break; |
|
| 349 | + case ODataConstants::STRFUN_LENGTH: |
|
| 350 | + return "LEN($params[0])"; |
|
| 351 | + break; |
|
| 352 | + case ODataConstants::GUIDFUN_EQUAL: |
|
| 353 | + return "($params[0] = $params[1])"; |
|
| 354 | + break; |
|
| 355 | + case ODataConstants::DATETIME_COMPARE: |
|
| 356 | + return "DATETIMECMP($params[0]; $params[1])"; |
|
| 357 | + break; |
|
| 358 | + case ODataConstants::DATETIME_YEAR: |
|
| 359 | + return "YEAR($params[0])"; |
|
| 360 | + break; |
|
| 361 | + case ODataConstants::DATETIME_MONTH: |
|
| 362 | + return "MONTH($params[0])"; |
|
| 363 | + break; |
|
| 364 | + case ODataConstants::DATETIME_DAY: |
|
| 365 | + return "DAY($params[0])"; |
|
| 366 | + break; |
|
| 367 | + case ODataConstants::DATETIME_HOUR: |
|
| 368 | + return "DATENAME(HOUR, $params[0])"; |
|
| 369 | + break; |
|
| 370 | + case ODataConstants::DATETIME_MINUTE: |
|
| 371 | + return "DATENAME(MINUTE, $params[0])"; |
|
| 372 | + break; |
|
| 373 | + case ODataConstants::DATETIME_SECOND: |
|
| 374 | + return "DATENAME(SECOND, $params[0])"; |
|
| 375 | + break; |
|
| 376 | + case ODataConstants::MATHFUN_ROUND: |
|
| 377 | + return "ROUND($params[0], $this->_default_round)"; |
|
| 378 | + break; |
|
| 379 | + case ODataConstants::MATHFUN_CEILING: |
|
| 380 | + return "CEILING($params[0])"; |
|
| 381 | + break; |
|
| 382 | + case ODataConstants::MATHFUN_FLOOR: |
|
| 383 | + return "FLOOR($params[0])"; |
|
| 384 | + break; |
|
| 385 | + case ODataConstants::BINFUL_EQUAL: |
|
| 386 | + return "($params[0] = $params[1])"; |
|
| 387 | + break; |
|
| 388 | 388 | case 'is_null': |
| 389 | 389 | return "is_null($params[0])"; |
| 390 | 390 | break; |
| 391 | 391 | |
| 392 | - default: |
|
| 393 | - throw new \InvalidArgumentException('onFunctionCallExpression'); |
|
| 392 | + default: |
|
| 393 | + throw new \InvalidArgumentException('onFunctionCallExpression'); |
|
| 394 | 394 | } |
| 395 | 395 | } |
| 396 | 396 | |