FastPrepFastPrep
Problem Brief

In-Memory SQL with CSV Initialization

FULLTIMEONSITE INTERVIEW
See Microsoft online assessment and hiring insights

Implement a small in-memory table engine that begins with a CSV string and then executes a sequence of SQL-like commands.

The first row of the CSV contains column names. Remaining rows contain data. Fields are comma-separated; quoted fields may contain commas and escaped double quotes.

Support the following commands:

  • SELECT col1,col2,... WHERE col=value: return matching rows with the selected columns joined by commas
  • INSERT value1,value2,...: append one row
  • DELETE WHERE col=value: delete every matching row

Process commands in order and return every output row produced by the SELECT commands.

Function Description

Complete the function runInMemorySql in the editor below.

runInMemorySql has the following parameters:

  1. String csv: the initial table contents
  2. String[] commands: the commands to execute in order

Returns

String[]: the output rows produced by all SELECT commands, in order.

1Example 1

Input
csv = "name,age,city\nAlice,30,NY\nBob,25,SF", commands = ["SELECT name WHERE city=NY", "INSERT Charlie,22,NY", "SELECT name,age WHERE city=NY"]
Output
["Alice", "Alice,30", "Charlie,22"]
Explanation

The first query matches Alice. After inserting Charlie, the second query returns both NY rows in table order.

2Example 2

Input
csv = "name,age\nAlice,30\nBob,25", commands = ["DELETE WHERE name=Alice", "SELECT name,age WHERE age=25"]
Output
["Bob,25"]
Explanation

Deleting Alice leaves only Bob, who matches the final query.

Constraints

Limits and guarantees your solution can rely on.

  • The total number of rows plus commands can be as large as 10^5.
  • Quoted CSV fields may contain commas and doubled quotes.
  • Only equality filters are required for this problem version.
public String[] runInMemorySql(String csv, String[] commands) {
    // write your code here
}
Input

csv

"name,age,city\nAlice,30,NY\nBob,25,SF"

commands

["SELECT name WHERE city=NY", "INSERT Charlie,22,NY", "SELECT name,age WHERE city=NY"]

Output

["Alice", "Alice", "30", "Charlie", "22"]

Sign in to submit your solution.