Skip to content

yixuaz/CMU-15445

Repository files navigation

CMU-15445

Schedule site https://15445.courses.cs.cmu.edu/fall2018/schedule.html

Study blog for cmu 15 445 https://www.jianshu.com/nb/36265841

cmu_15445_2017.rar is the project origin source file.

cmu_15445_2017_done.rar is the project solution(including 4 projects). make sure pass all the tests including (tuple.test,vtable.test...)

Target

1. Correctness

My Solution make sure cover as most test cases as possible.

  • project 1 14 tests

  • project 2 ~30 tests

  • project 3 20 tests

  • project 4 9 tests And pass at least 1000 times for project 2&3&4

  • make check

16/16 Test #16: virtual_table_test ............... Passed 0.72 sec

100% tests passed, 0 tests failed out of 16

Total Test time (real) = 38.21 sec

[100%] Built target check

2. Simple and Understandable

  • Concise code is always my aim.

Blog [chinese]

  • Lab 3: Concurrency Control Lack info when using 2018 project documentation, so change to 2017
  • Lab 4: Logging & Recovery Lack info during using 2018 project documentation, so change to 2017

For self-study, take care using it if u are a student

Every student has to work individually on this assignment. Students are allowed to discuss high-level details about the project with others. Students are not allowed to copy the contents of a white-board after a group meeting with other students. Students are not allowed to copy the solutions from another colleague.

Origin Readme

Build

mkdir build
cd build
cmake ..
make

Debug mode:

cmake -DCMAKE_BUILD_TYPE=Debug ..
make

Testing

cd build
//make sure u setup libvtable.so
vim /etc/ld.so.conf
//add one line for /where/you/install/lib
sudo ldconfig
make check

Run virtual table extension in SQLite

Start SQLite with:

cd build
./bin/sqlite3

In SQLite, load virtual table extension with:

.load ./lib/libvtable.dylib

or load libvtable.so (Linux), libvtable.dll (Windows)

Create virtual table:
1.The first input parameter defines the virtual table schema. Please follow the format of (column_name [space] column_type) seperated by comma. We only support basic data types including INTEGER, BIGINT, SMALLINT, BOOLEAN, DECIMAL and VARCHAR.
2.The second parameter define the index schema. Please follow the format of (index_name [space] indexed_column_names) seperated by comma.

sqlite> CREATE VIRTUAL TABLE foo USING vtable('a int, b varchar(13)','foo_pk a')

After creating virtual table:
Type in any sql statements as you want.

sqlite> INSERT INTO foo values(1,'hello');
sqlite> SELECT * FROM foo ORDER BY a;
a           b         
----------  ----------
1           hello   

See Run-Time Loadable Extensions and CREATE VIRTUAL TABLE for further information.

Virtual table API

https://sqlite.org/vtab.html

TODO

  • update: when size exceed that page, table heap returns false and delete/insert tuple (rid will change and need to delete/insert from index)
  • delete empty page from table heap when delete tuple
  • implement delete table, with empty page bitmap in disk manager (how to persistent?)
  • index: unique/dup key, variable key