mksqlite  2.5
A MATLAB interface to SQLite
Controlling access rights
sqlite_test_access_mode

Contents

function sqlite_test_access_mode
    clear all
    close all
    clc
    dummy = mksqlite('version mex');
    fprintf( '\n\n' );


    % name of test database
    db_name = 'sql_test_access2.db';

    % delete database file, if exists
    if exist( db_name, 'file' )
        delete( db_name );
    end
mksqlite Version 2.5 build: 133, ein MATLAB Interface zu SQLite
(c) 2008-2017 by Martin Kortmann <mail@kortmann.de>
                 Andreas Martin  <andimartin@users.sourceforge.net>
basierend auf SQLite Version 3.16.2 - http://www.sqlite.org
mksqlite verwendet:
 - DEELX perl kompatible regex engine Version 1.3 (Sswater@gmail.com)
 - BLOSC/LZ4 1.3.0-rc3.dev zur Datenkompression (Francesc Alted / Yann Collett) 
 - MD5 Message-Digest Algorithm (RFC 1321) Implementierung von Alexander Peslyak
   
Platform: PCWIN64, little endian



Without write access the following command will fail...

    try
        s = 'mksqlite( ''open'', db_name, ''RO'' );';
        fprintf( [s,'\n'] );
        eval( s ); % Try to create database with read-only-access (single-thread)
        error( 'Test failed!' )
    catch
        % test succeeds, if we ran into this block
        fprintf( 'Catch block: Unable to create database with read-only-access, test succeeded!\n' );
    end

    % mksqlite( 'open', db_name ) opens the database with default access rights
    % and is the same as:
    % mksqlite( 'open', db_name, 'RWC', 'Single' )
mksqlite( 'open', db_name, 'RO' );
Catch block: Unable to create database with read-only-access, test succeeded!

Create database with some records

    mksqlite( 'open', db_name ); % Open with read/write-access (single-thread)

    % create a table with a single column and insert one record
    mksqlite( 'CREATE TABLE data (Col_1)' );
    mksqlite( 'insert into data (Col_1) values( "A String")' );
    mksqlite( 'close' );
    fprintf( 'Database with one record (%s) has been created\n', db_name );
Database with one record (sql_test_access2.db) has been created

Now since the database is existing, we're able to open it with read-only access:

    fprintf( 'Open database with read-only access:\n' );
    s = 'mksqlite( ''open'', db_name, ''RO'' );'; % Open read-only (single-thread)
    fprintf( [s,'\n'] );
    eval( s );
Open database with read-only access:
mksqlite( 'open', db_name, 'RO' );

Write access to the database should not be possible:

    try
        s = 'mksqlite( ''insert into data (Col_1) values( "A String")'' );';
        fprintf( [s,'\n'] );
        eval( s );
        error( 'Test failed!' )
    catch
        % test succeeds, if we ran into this block
        fprintf( 'Catch block: Write access denied, test succeeded!\n' );
    end
mksqlite( 'insert into data (Col_1) values( "A String")' );
Catch block: Write access denied, test succeeded!

Now open database in multithreading mode (without further tests

    fprintf( 'Open database in multithreading modes...\n');
    mksqlite( 0, 'close' ); % Close all open databases
    mksqlite( 'open', db_name, 'RW', 'Multi' ); % Open in multithread-mode (File must exist! 'RWC' otherwise)
    mksqlite( 0, 'close' ); % Close all open databases
    mksqlite( 'open', db_name, 'RW', 'Serial' ); % Open in multithread-mode (serialized)
    mksqlite( 0, 'close' ); % Close all open databases

    % No error should have occured
    fprintf( 'Tests successfully done.\n' );
Open database in multithreading modes...
Tests successfully done.