@@ -14,7 +14,7 @@ afterAll(() => {
1414 if ( existsSync ( TEST_DIR ) ) rmSync ( TEST_DIR , { recursive : true , force : true } ) ;
1515} ) ;
1616
17- describe ( "MicroDB - Edge Cases" , ( ) => {
17+ describe ( "MicroSQL - Edge Cases" , ( ) => {
1818 let db : MicroSQL ;
1919
2020 beforeEach ( ( ) => {
@@ -166,4 +166,82 @@ describe("MicroDB - Edge Cases", () => {
166166 const result = db . query ( `SELECT name FROM users WHERE name LIKE "alice"` ) ;
167167 expect ( result ) . toHaveLength ( 3 ) ;
168168 } ) ;
169- } ) ;
169+ it ( "handles INNER JOIN" , ( ) => {
170+ db . query ( `INSERT INTO users (id, name) VALUES (1, "Alice")` ) ;
171+ db . query ( `INSERT INTO users (id, name) VALUES (2, "Bob")` ) ;
172+ db . query ( `INSERT INTO orders (id, user_id, product) VALUES (1, 1, "Laptop")` ) ;
173+ db . query ( `INSERT INTO orders (id, user_id, product) VALUES (2, 1, "Mouse")` ) ;
174+ db . query ( `INSERT INTO orders (id, user_id, product) VALUES (3, 2, "Keyboard")` ) ;
175+
176+ const result = db . query (
177+ `SELECT users.name, orders.product FROM users JOIN orders ON users.id = orders.user_id`
178+ ) ;
179+
180+ expect ( result ) . toHaveLength ( 3 ) ;
181+ expect ( result ) . toEqual ( [
182+ { "users.name" : "Alice" , "orders.product" : "Laptop" } ,
183+ { "users.name" : "Alice" , "orders.product" : "Mouse" } ,
184+ { "users.name" : "Bob" , "orders.product" : "Keyboard" }
185+ ] ) ;
186+ } ) ;
187+
188+ it ( "handles INNER JOIN with INNER keyword" , ( ) => {
189+ db . query ( `INSERT INTO users (id, name) VALUES (1, "Alice")` ) ;
190+ db . query ( `INSERT INTO orders (id, user_id, product) VALUES (1, 1, "Laptop")` ) ;
191+
192+ const result = db . query (
193+ `SELECT users.name, orders.product FROM users INNER JOIN orders ON users.id = orders.user_id`
194+ ) ;
195+
196+ expect ( result ) . toHaveLength ( 1 ) ;
197+ expect ( result [ 0 ] ) . toEqual ( { "users.name" : "Alice" , "orders.product" : "Laptop" } ) ;
198+ } ) ;
199+
200+ it ( "handles LEFT JOIN" , ( ) => {
201+ db . query ( `INSERT INTO users (id, name) VALUES (1, "Alice")` ) ;
202+ db . query ( `INSERT INTO users (id, name) VALUES (2, "Bob")` ) ;
203+ db . query ( `INSERT INTO users (id, name) VALUES (3, "Carol")` ) ;
204+ db . query ( `INSERT INTO orders (id, user_id, product) VALUES (1, 1, "Laptop")` ) ;
205+ db . query ( `INSERT INTO orders (id, user_id, product) VALUES (2, 1, "Mouse")` ) ;
206+
207+ const result = db . query (
208+ `SELECT users.name, orders.product FROM users LEFT JOIN orders ON users.id = orders.user_id`
209+ ) ;
210+
211+ expect ( result ) . toHaveLength ( 4 ) ;
212+ expect ( result . map ( r => r [ "users.name" ] ) . sort ( ) ) . toEqual ( [ "Alice" , "Alice" , "Bob" , "Carol" ] ) ;
213+
214+ const bobOrder = result . find ( r => r [ "users.name" ] === "Bob" ) ;
215+ expect ( bobOrder [ "orders.product" ] ) . toBeUndefined ( ) ;
216+ } ) ;
217+
218+ it ( "handles JOIN with WHERE clause" , ( ) => {
219+ db . query ( `INSERT INTO users (id, name, age) VALUES (1, "Alice", 25)` ) ;
220+ db . query ( `INSERT INTO users (id, name, age) VALUES (2, "Bob", 30)` ) ;
221+ db . query ( `INSERT INTO orders (id, user_id, product) VALUES (1, 1, "Laptop")` ) ;
222+ db . query ( `INSERT INTO orders (id, user_id, product) VALUES (2, 2, "Mouse")` ) ;
223+
224+ const result = db . query (
225+ `SELECT users.name, orders.product FROM users JOIN orders ON users.id = orders.user_id WHERE users.age > 25`
226+ ) ;
227+
228+ expect ( result ) . toHaveLength ( 1 ) ;
229+ expect ( result [ 0 ] ) . toEqual ( { "users.name" : "Bob" , "orders.product" : "Mouse" } ) ;
230+ } ) ;
231+
232+ it ( "handles JOIN with ORDER BY and LIMIT" , ( ) => {
233+ db . query ( `INSERT INTO users (id, name) VALUES (1, "Alice")` ) ;
234+ db . query ( `INSERT INTO users (id, name) VALUES (2, "Bob")` ) ;
235+ db . query ( `INSERT INTO orders (id, user_id, product, price) VALUES (1, 1, "Laptop", 1000)` ) ;
236+ db . query ( `INSERT INTO orders (id, user_id, product, price) VALUES (2, 1, "Mouse", 20)` ) ;
237+ db . query ( `INSERT INTO orders (id, user_id, product, price) VALUES (3, 2, "Keyboard", 50)` ) ;
238+
239+ const result = db . query (
240+ `SELECT users.name, orders.product, orders.price FROM users JOIN orders ON users.id = orders.user_id ORDER BY orders.price DESC LIMIT 2`
241+ ) ;
242+
243+ expect ( result ) . toHaveLength ( 2 ) ;
244+ expect ( result [ 0 ] [ "orders.product" ] ) . toBe ( "Laptop" ) ;
245+ expect ( result [ 1 ] [ "orders.product" ] ) . toBe ( "Keyboard" ) ;
246+ } ) ;
247+ } )
0 commit comments