// Setup SQLIte specific object for routines static void init_all(Interp interp) { Sqlite3.Sqlite3_Init(interp); Sqlite3.Sqlitetestbackup_Init(interp); Sqlite3.Sqlitetestfuzzer_Init(interp); Sqlite3.Sqliteconfig_Init(interp); Sqlite3.Sqlitetest_autoext_Init(interp); Sqlite3.Sqlitetest_func_Init(interp); Sqlite3.Sqlitetest_hexio_Init(interp); Sqlite3.Sqlitetest_malloc_Init(interp); Sqlite3.Sqlitetest_mutex_Init(interp); Sqlite3.Sqlitetestintarray_Init(interp); Sqlite3.Sqlitetestschema_Init(interp); Sqlite3.SqlitetestStat_Init(interp); Sqlite3.Sqlitetesttclvar_Init(interp); Sqlite3.Sqlitetestwholenumber_Init(interp); Sqlite3.Sqlitetest1_Init(interp); Sqlite3.Sqlitetest2_Init(interp); Sqlite3.Sqlitetest3_Init(interp); Sqlite3.Sqlitetest8_Init(interp); Sqlite3.Sqlitetest9_Init(interp); Sqlite3.Md5_Init(interp); }
/* ** 2009 July 17 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains code to implement the "sqlite" test harness ** which runs TCL commands for testing the C#-SQLite port. ** ** $Header$ */ public static void Main(string[] args) { // Array of command-line argument strings. { string fileName = null; // Create the interpreter. This will also create the built-in // Tcl commands. Interp interp = new Interp(); // Make command-line arguments available in the Tcl variables "argc" // and "argv". If the first argument doesn't start with a "-" then // strip it off and use it as the name of a script file to process. // We also set the argv0 and TCL.Tcl_interactive vars here. if ((args.Length > 0) && !(args[0].StartsWith("-"))) { fileName = args[0]; } TclObject argv = TclList.newInstance(); argv.preserve(); try { int i = 0; int argc = args.Length; if ((System.Object)fileName == null) { interp.setVar("argv0", "tcl.lang.Shell", TCL.VarFlag.GLOBAL_ONLY); interp.setVar("tcl_interactive", "1", TCL.VarFlag.GLOBAL_ONLY); } else { interp.setVar("argv0", fileName, TCL.VarFlag.GLOBAL_ONLY); interp.setVar("tcl_interactive", "0", TCL.VarFlag.GLOBAL_ONLY); i++; argc--; } for (; i < args.Length; i++) { TclList.append(interp, argv, TclString.newInstance(args[i])); } interp.setVar("argv", argv, TCL.VarFlag.GLOBAL_ONLY); interp.setVar("argc", System.Convert.ToString(argc), TCL.VarFlag.GLOBAL_ONLY); } catch (TclException e) { throw new TclRuntimeError("unexpected TclException: " + e.Message); } finally { argv.release(); } // Setup SQLIte specific object for routines Sqlite3.Sqlite3_Init(interp); Sqlite3.Sqlitetestbackup_Init(interp); Sqlite3.Sqliteconfig_Init(interp); Sqlite3.Sqlitetest_autoext_Init(interp); Sqlite3.Sqlitetest_func_Init(interp); Sqlite3.Sqlitetest_hexio_Init(interp); Sqlite3.Sqlitetest_malloc_Init(interp); Sqlite3.Sqlitetest_mutex_Init(interp); Sqlite3.Sqlitetest1_Init(interp); Sqlite3.Sqlitetest2_Init(interp); Sqlite3.Sqlitetest3_Init(interp); Sqlite3.Sqlitetest6_Init(interp); Sqlite3.Sqlitetest9_Init(interp); Sqlite3.Md5_Init(interp); // Normally we would do application specific initialization here. // However, that feature is not currently supported. // If a script file was specified then just source that file // and quit. Console.WriteLine(" C#-SQLite version " + Sqlite3.sqlite3_version); Console.WriteLine("An independent reimplementation of the SQLite software library"); Console.WriteLine("=============================================================="); Console.WriteLine(""); if ((System.Object)fileName != null) { try { interp.evalFile(fileName); } catch (TclException e) { TCL.CompletionCode code = e.getCompletionCode(); if (code == TCL.CompletionCode.RETURN) { code = interp.updateReturnInfo(); if (code != TCL.CompletionCode.OK) { System.Console.Error.WriteLine("command returned bad code: " + code); if (tcl.lang.ConsoleThread.debug) { System.Diagnostics.Debug.WriteLine("command returned bad code: " + code); } } } else if (code == TCL.CompletionCode.ERROR) { System.Console.Error.WriteLine(interp.getResult().ToString()); if (tcl.lang.ConsoleThread.debug) { System.Diagnostics.Debug.WriteLine(interp.getResult().ToString()); } System.Diagnostics.Debug.Assert(false, interp.getResult().ToString()); } else if (code != TCL.CompletionCode.EXIT) { System.Console.Error.WriteLine("command returned bad code: " + code); if (tcl.lang.ConsoleThread.debug) { System.Diagnostics.Debug.WriteLine("command returned bad code: " + code); } } } // Note that if the above interp.evalFile() returns the main // thread will exit. This may bring down the VM and stop // the execution of Tcl. // // If the script needs to handle events, it must call // vwait or do something similar. // // Note that the script can create AWT widgets. This will // start an AWT event handling thread and keep the VM up. However, // the interpreter thread (the same as the main thread) would // have exited and no Tcl scripts can be executed. interp.dispose(); Sqlite3.sqlite3_shutdown(); System.Environment.Exit(0); } if ((System.Object)fileName == null) { // We are running in interactive mode. Start the ConsoleThread // that loops, grabbing stdin and passing it to the interp. ConsoleThread consoleThread = new ConsoleThread(interp); consoleThread.IsBackground = true; consoleThread.Start(); // Loop forever to handle user input events in the command line. Notifier notifier = interp.getNotifier(); while (true) { // process events until "exit" is called. notifier.doOneEvent(TCL.ALL_EVENTS); } } } }