Uniqodo Query Language (UQL) documentation

Simple English-like language for writing conditions and rules that must evaluate to either true or
false.

Operators

OperatorDescriptionExample
==Equal tobasketRoomNight == 3
!=Not equal toproductCategory != "fashion"
>Greater thanbasketTotal > 100
<Less thanbasketTotal < 100
>=Greater than or equal tobasketTotal >= 70
<=Less than or equal toquantity <= 2
inCheck value is in a list"wifi" in basketRoomExtras
notInCheck value is NOT in a list"kitchen" notIn categories
matchMatch a stringhotelName match "Croydon"
&&, ANDLogical ANDbasketRoomNight >= 3 && customerType == "new"
||, ORLogical OR(basketTotal >= 70 || quantity <= 2)
dateLtDate less than(checkInDate dateLt "20-10-2017")
dateGtDate greater thancheckOutDate dateGt "31-12-2017"
dateEqDate equalscheckOutDate dateEq "31-05-2017"

Functions

All date functions and operators accept some English representation of dates in place of the actual numeric date string e.g. “yesterday”, "last day of this month", "last day of last month", “tomorrow”, “7 days ago”, “now”, “last Friday”, “next Monday”, “+3 days” (means 3 days from now or in the future), “+1 hour” (means 1 hour from now), “-2 hours” (2 hours ago), “+1 week 2 days 4 hours 2 seconds”.

FunctionDescriptionParametersExamples
dateDiff(date1, date2, unit)Difference in days between two dates. The underlying logic subtracts date1 from date2 i.e. date2 - date1. The expression evaluates to a positive value if date2 is greater than date1 otherwise returns a negative value.date1 - date string
date2 - date string
unit (optional) - the unit for the returned value i.e. days, hours, minutes or seconds. Defaults to days.
dateDiff(“20-04-2017”, “21-04-2017”) == 1
* this evaluates to true because the result of the expression is 1
dateDiff(“21-04-2017”, “20-04-2017”) == 1
* evaluates to false because the result is -1 from (“20-04-2017” - “21-04-2017”)
dateDiff(“now”, checkInDate) == 7
* Checks whether the variable checkInDate is 7 days from now
dateDiff(“21-04-2017 13:00”, “21-04-2017 18:00”, “hours”) == 5
* Evaluates to true
dateModify(dateToModify, modifier)Add or remove value from a datedateToModify - correctly formatted date string
Modifier - value to add or remove. See the comment about English representation of dates above
dateModify(“24-04-2017”, “-2 days”)
* returns “22-04-2017”
dateModify(“24-04-2017”, “+3 hours”)
* returns “24-04-2017 03:00:00”
dateInRange(dateToCheck, startDate, endDate, startDateModifier, endDateModifier)Checks whether a date is within a range of datesdateToCheck - the date to look for within the range
startDate - the start of the date range
endDate - end of the date range
Optional params:
startDateModifier - add days to the start date
endDateModifier - add days to the end date
dateInRange(“23-04-2017”, checkInDate, checkOutDate)
dateInRange(checkInDate, “next week”, “last day of this month”)
* checkInDate within next week and last day of current month
dateInRange(“01-05-2017”, checkInDate, checkOutDate, 0, -1)
* adds 0 to start date and -1 to checkOutDate i.e. use a day before the end date as the end of the range
dateNotInRange(dateToCheck, startDate, endDate, startDateModifier, endDateModifier)Checks a date is NOT within the specified start and end datessame as dateInRangesame as dateInRange
consecutiveDays(daysToCheck, startDate, endDate, startDateModifier, endDateModifier)Checks two consecutive days are within a set date rangeSame as containsDayconsecutiveDays(“Friday,Saturday,Sunday”, checkInDate, checkOutDate)
* Checks if the checkInDate and checkOutDate consecutively contains Friday, Saturday and Sunday
days(startDate, endDate, startDateModifier, endDateModifier)Returns an array of days in the date periodstartDate - the start of the date range
endDate - end of the date range
Optional params:
startDateModifier - add days to the start date
endDateModifier - add days to the end date. Use -1 to exclude the endDate in the check
Can be used with the in and notIn operators.
“Sunday” **in** days( checkInDate, checkOutDate)
* Checks whether the period between the checkInDate and the checkOutDate variables contain a Sunday
“Sunday” **notIn** days(checkInDate, checkOutDate, 0, -1)
* Checks that 'Sunday' is not in the date period checked. Also exclude the checkOutDate from the check.
dateLimit(itemCode, startDate, endDate, limits)Returns a number - the lowest limit for the item code over the date rangestartDate - the start of the date range
endDate - end of the date range
Limits - array populated with limits from the database
dateLimit(hotelCode, checkIn, checkout, limits);

Advanced Examples

  • basketRoomNight >= 3 && ("wifi" in basketRoomExtras || "lateOut" in basketRoomExtras)
  • true if basketRoomNight is greater than or equals 3 AND either "lateOut" or "wifi" exists in basketRoomExtras
  • basketRoomNight == 5 || hotelName match "Croydon"
  • true if basketRoomNight is exactly 5 OR the text "Croydon" exists in the hotelName value
  • customerType != "business" && basketRoomCheckIn == "01/02/2017"
  • true if customerType is not "business" AND basketRoomCheckIn value is exactly "01/02/2017"
  • (productCategory in ["clothing", "kitchen"] && basketTotal > 100.00) || (customerType =="new")
  • true if productCategory is either "clothing" or "kitchen" AND basketTotal is more than 100.00. Also evaluates to true if customerType is "new"
  • totalNumberOfProducts in ["5", "4", "3"] && customerRegion == "EU"
  • (dateInRange(dateModify(“now”, “+1 day”), checkInDate, checkOutDate) && “01-05-2017” dateEq checkInDate) OR (hotelName match "Guildford")

Guidelines

  1. String values must be quoted, integer values must NOT be quoted e.g. "wifi", "new", 22, 10. Words not quoted in the rule text are treated as variables e.g. productCategory
  2. Independent conditions must be grouped using parenthesis ()
  3. Array of values must be enclosed in square brackets []​ and items separated by comma e.g. ["breakfast", "GB123", 3]
  4. Every keyword (operators, functions, values and variables) must be followed by a space before adding the next keyword
  5. Only supported operators and functions can be used

Promotion & Code Data Items

The list of promotion and code data items that can be used as variables in UQL. These data are
fetched and made available to the UQL parser before the rule is evaluated.

ParameterExample ValueComment
uqlPromotionStartDate"2017-05-04 00:00:00"The promotion start date
uqlPromotionEndDate"2017-05-31 00:00:00"The promotion end date
uqlPromotionTotalRedemption900The total number of redemptions for a promotion
uqlPromotionLastRedemptionDate"2017-05-09 13:51:54"The last time a code was redeemed
uqlPromotionTotalRevenue2,900.00Promotion’s sum of order values/transaction amount
uqlPromotionTotalDiscount230.00Total discount issued on the promotion
uqlCodeClaimDate"2017-05-09 13:46:41"Unique code claim/issue date
uqlCodeTotalRevenue100.55Sum of order values/transaction amount for this code usage
uqlCodeTotalDiscount200.50The amount of discount issued from redeeming this code during the promotion
uqlCodeTotalRedemption1Number of times a code has been redeemed
uqlCodeLastRedemptionDate"2017-05-09 13:51:54"The last time a code was redeemed
uqlCustomIdentifierE.g. an email addressThe uploaded merchant’s validation custom data identifier column
uqlCustomP1...uqlCustomP10Any value, including datesThe uploaded merchant’s validation custom data items 1 up 10