Add available bookings scripts and results
This commit is contained in:
30
sql/add_valid_booking.sql
Normal file
30
sql/add_valid_booking.sql
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
-- available bookings - task 3
|
||||||
|
-- changes:
|
||||||
|
-- changed BookingDate (Reserved) data type from date to datetime, because I assumed that Little Lemon
|
||||||
|
-- allows wants bookings per day and table - a table is considered blocked for 2 hours
|
||||||
|
-- added CustomerID and EmployeeID input parameters
|
||||||
|
-- noqa: disable=CP03,LT02,RF03
|
||||||
|
--
|
||||||
|
create procedure AddValidBooking (
|
||||||
|
in Reserved datetime, in TableNumber int, in CustomerID int, in EmployeeID int
|
||||||
|
)
|
||||||
|
begin
|
||||||
|
start transaction;
|
||||||
|
|
||||||
|
if TableIsFree(Reserved, TableNumber) then
|
||||||
|
insert into Bookings (Reserved, TableNumber, CustomerID, EmployeeID) values (
|
||||||
|
Reserved, TableNumber, CustomerID, EmployeeID
|
||||||
|
);
|
||||||
|
commit;
|
||||||
|
select concat(
|
||||||
|
"Table ", TableNumber,
|
||||||
|
" was free - booking accepted (BookingID=", (select last_insert_id()), ')'
|
||||||
|
) as BookingStatus;
|
||||||
|
else
|
||||||
|
rollback;
|
||||||
|
select concat(
|
||||||
|
"Table ", TableNumber,
|
||||||
|
" is already booked - booking cancelled"
|
||||||
|
) as BookingStatus;
|
||||||
|
end if;
|
||||||
|
end
|
||||||
97
sql/available_booking_results.txt
Normal file
97
sql/available_booking_results.txt
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
# Task 1
|
||||||
|
> source ./example_bookings.sql
|
||||||
|
> select * from `Bookings` where `BookingID` between 11 and 14
|
||||||
|
+-----------+---------------------+-------------+------------+------------+
|
||||||
|
| BookingID | Reserved | TableNumber | CustomerID | EmployeeID |
|
||||||
|
+-----------+---------------------+-------------+------------+------------+
|
||||||
|
| 11 | 2022-10-14 18:00:00 | 5 | 1 | 1 |
|
||||||
|
| 12 | 2022-11-12 19:30:00 | 3 | 3 | 1 |
|
||||||
|
| 13 | 2022-10-11 18:45:00 | 2 | 2 | 1 |
|
||||||
|
| 14 | 2022-10-13 19:15:00 | 2 | 1 | 1 |
|
||||||
|
+-----------+---------------------+-------------+------------+------------+
|
||||||
|
|
||||||
|
# Task 2
|
||||||
|
> delimiter $
|
||||||
|
> source ./table_is_free.sql
|
||||||
|
> source ./check_booking.sql
|
||||||
|
> delimiter ;
|
||||||
|
> call CheckBooking("2022-11-12 18:15:00", 3, @IsFree);
|
||||||
|
+---------------------------+
|
||||||
|
| BookingStatus |
|
||||||
|
+---------------------------+
|
||||||
|
| Table 3 is already booked |
|
||||||
|
+---------------------------+
|
||||||
|
> select @IsFree;
|
||||||
|
+---------+
|
||||||
|
| @IsFree |
|
||||||
|
+---------+
|
||||||
|
| 0 |
|
||||||
|
+---------+
|
||||||
|
> call CheckBooking("2022-11-12 17:15:00", 3, @IsFree);
|
||||||
|
+-----------------+
|
||||||
|
| BookingStatus |
|
||||||
|
+-----------------+
|
||||||
|
| Table 3 is free |
|
||||||
|
+-----------------+
|
||||||
|
> select @IsFree;
|
||||||
|
+---------+
|
||||||
|
| @IsFree |
|
||||||
|
+---------+
|
||||||
|
| 1 |
|
||||||
|
+---------+
|
||||||
|
|
||||||
|
# Task 3
|
||||||
|
> delimiter $
|
||||||
|
> source ./add_valid_booking.sql
|
||||||
|
> delimiter ;
|
||||||
|
> call AddValidBooking("2022-11-12 18:15:00", 3, 4, 1);
|
||||||
|
+-----------------------------------------------+
|
||||||
|
| BookingStatus |
|
||||||
|
+-----------------------------------------------+
|
||||||
|
| Table 3 is already booked - booking cancelled |
|
||||||
|
+-----------------------------------------------+
|
||||||
|
> select * from `Bookings`
|
||||||
|
+-----------+---------------------+-------------+------------+------------+
|
||||||
|
| BookingID | Reserved | TableNumber | CustomerID | EmployeeID |
|
||||||
|
+-----------+---------------------+-------------+------------+------------+
|
||||||
|
| 1 | 2024-11-14 18:00:00 | 1 | 3 | 1 |
|
||||||
|
| 2 | 2024-11-14 19:30:00 | 2 | 2 | 1 |
|
||||||
|
| 3 | 2024-11-14 18:45:00 | 3 | 4 | 1 |
|
||||||
|
| 4 | 2024-11-14 19:15:00 | 4 | 1 | 2 |
|
||||||
|
| 5 | 2024-11-14 18:30:00 | 5 | 6 | 2 |
|
||||||
|
| 6 | 2024-11-14 19:00:00 | 6 | 5 | 2 |
|
||||||
|
| 7 | 2024-11-15 18:15:00 | 1 | 7 | 5 |
|
||||||
|
| 8 | 2024-11-15 19:45:00 | 2 | 8 | 5 |
|
||||||
|
| 9 | 2024-11-15 18:30:00 | 3 | 9 | 2 |
|
||||||
|
| 10 | 2024-11-15 19:00:00 | 4 | 10 | 5 |
|
||||||
|
| 11 | 2022-10-14 18:00:00 | 5 | 1 | 1 |
|
||||||
|
| 12 | 2022-11-12 19:30:00 | 3 | 3 | 1 |
|
||||||
|
| 13 | 2022-10-11 18:45:00 | 2 | 2 | 1 |
|
||||||
|
| 14 | 2022-10-13 19:15:00 | 2 | 1 | 1 |
|
||||||
|
+-----------+---------------------+-------------+------------+------------+
|
||||||
|
> call AddValidBooking("2022-11-12 17:15:00", 3, 4, 1);
|
||||||
|
+----------------------------------------------------+
|
||||||
|
| BookingStatus |
|
||||||
|
+----------------------------------------------------+
|
||||||
|
| Table 3 was free - booking accepted (BookingID=15) |
|
||||||
|
+----------------------------------------------------+
|
||||||
|
> select * from `Bookings`
|
||||||
|
+-----------+---------------------+-------------+------------+------------+
|
||||||
|
| BookingID | Reserved | TableNumber | CustomerID | EmployeeID |
|
||||||
|
+-----------+---------------------+-------------+------------+------------+
|
||||||
|
| 1 | 2024-11-14 18:00:00 | 1 | 3 | 1 |
|
||||||
|
| 2 | 2024-11-14 19:30:00 | 2 | 2 | 1 |
|
||||||
|
| 3 | 2024-11-14 18:45:00 | 3 | 4 | 1 |
|
||||||
|
| 4 | 2024-11-14 19:15:00 | 4 | 1 | 2 |
|
||||||
|
| 5 | 2024-11-14 18:30:00 | 5 | 6 | 2 |
|
||||||
|
| 6 | 2024-11-14 19:00:00 | 6 | 5 | 2 |
|
||||||
|
| 7 | 2024-11-15 18:15:00 | 1 | 7 | 5 |
|
||||||
|
| 8 | 2024-11-15 19:45:00 | 2 | 8 | 5 |
|
||||||
|
| 9 | 2024-11-15 18:30:00 | 3 | 9 | 2 |
|
||||||
|
| 10 | 2024-11-15 19:00:00 | 4 | 10 | 5 |
|
||||||
|
| 11 | 2022-10-14 18:00:00 | 5 | 1 | 1 |
|
||||||
|
| 12 | 2022-11-12 19:30:00 | 3 | 3 | 1 |
|
||||||
|
| 13 | 2022-10-11 18:45:00 | 2 | 2 | 1 |
|
||||||
|
| 14 | 2022-10-13 19:15:00 | 2 | 1 | 1 |
|
||||||
|
| 15 | 2022-11-12 17:15:00 | 3 | 4 | 1 |
|
||||||
|
+-----------+---------------------+-------------+------------+------------+
|
||||||
10
sql/check_booking.sql
Normal file
10
sql/check_booking.sql
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
-- available bookings - task 2
|
||||||
|
-- changes:
|
||||||
|
-- changed BookingDate (Reserved) data type from date to datetime, because I assumed that Little Lemon
|
||||||
|
-- allows wants bookings per day and table - a table is considered blocked for 2 hours
|
||||||
|
-- noqa: disable=CP03,LT02,RF03
|
||||||
|
create procedure CheckBooking (in Reserved datetime, in TableNumber int, out IsFree boolean) --
|
||||||
|
begin
|
||||||
|
set IsFree = TableIsFree(Reserved, TableNumber);
|
||||||
|
select concat("Table ", TableNumber, " is ", if(IsFree, "free", "already booked")) as BookingStatus;
|
||||||
|
end
|
||||||
12
sql/example_bookings.sql
Normal file
12
sql/example_bookings.sql
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
-- available bookings - task 1
|
||||||
|
-- changes:
|
||||||
|
-- changed BookingDate (Reserved) data type from date to datetime, because I assumed that Little Lemon
|
||||||
|
-- allows wants bookings per day and table - a table is considered blocked for 2 hours
|
||||||
|
-- changed BookingID range from 1-4 to 11-14, because there are already 10 Bookings in my test data set
|
||||||
|
-- added arbitrary EmployeeID that corresponds to the Employee that handled the booking process
|
||||||
|
-- noqa: disable=CP03
|
||||||
|
insert into Bookings (BookingID, Reserved, TableNumber, CustomerID, EmployeeID) values
|
||||||
|
(11, '2022-10-14 18:00:00', 5, 1, 1),
|
||||||
|
(12, '2022-11-12 19:30:00', 3, 3, 1),
|
||||||
|
(13, '2022-10-11 18:45:00', 2, 2, 1),
|
||||||
|
(14, '2022-10-13 19:15:00', 2, 1, 1);
|
||||||
17
sql/table_is_free.sql
Normal file
17
sql/table_is_free.sql
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
-- available bookings - task 2
|
||||||
|
-- changes:
|
||||||
|
-- changed BookingDate (Reserved) data type from date to datetime, because I assumed that Little Lemon
|
||||||
|
-- allows wants bookings per day and table - a table is considered blocked for 2 hours
|
||||||
|
-- noqa: disable=CP03,LT02,RF03
|
||||||
|
create function TableIsFree(Reserved datetime, TableNumber int)
|
||||||
|
returns boolean
|
||||||
|
deterministic
|
||||||
|
begin
|
||||||
|
return (select not exists (
|
||||||
|
select BookingID
|
||||||
|
from Bookings as B
|
||||||
|
where
|
||||||
|
abs(timestampdiff(second, B.Reserved, Reserved)) < 2 * 60 * 60
|
||||||
|
and B.TableNumber = TableNumber
|
||||||
|
));
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user