Problem · Design

In-Memory SQL with CSV Initialization

HardMicrosoftFULLTIMEONSITE INTERVIEW
See Microsoft 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.

Examples
01 · Example 1
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"]
return = ["Alice", "Alice,30", "Charlie,22"]

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

02 · Example 2
csv = "name,age\nAlice,30\nBob,25"
commands = ["DELETE WHERE name=Alice", "SELECT name,age WHERE age=25"]
return = ["Bob,25"]

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

Constraints
  • 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.
More Microsoft problems
drafts saved locally
public String[] runInMemorySql(String csv, String[] commands) {
    // write your code here
}
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"]
expected["Alice", "Alice", "30", "Charlie", "22"]
sign in to submit