bin: move test tool to jadb executable as subcommand
This commit is contained in:
parent
a0ef42d6dc
commit
a27925d359
@ -1,39 +1,101 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:ffi';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:args/args.dart';
|
||||
import 'package:args/command_runner.dart';
|
||||
import 'package:jadb/_data_ingestion/jmdict/parser.dart';
|
||||
import 'package:jadb/_data_ingestion/kanjidic/parser.dart';
|
||||
import 'package:jadb/_data_ingestion/radkfile/parser.dart';
|
||||
import 'package:jadb/search.dart';
|
||||
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
||||
import 'package:sqlite3/open.dart';
|
||||
|
||||
ArgParser argParser() {
|
||||
final parser = ArgParser();
|
||||
parser.addOption(
|
||||
void addLibsqliteArg(ArgParser argParser) {
|
||||
argParser.addOption(
|
||||
'libsqlite',
|
||||
help:
|
||||
'Path to the SQLite library. This is used to load the SQLite library dynamically.',
|
||||
valueHelp: 'PATH',
|
||||
defaultsTo: Platform.environment['LIBSQLITE_PATH'],
|
||||
);
|
||||
return parser;
|
||||
}
|
||||
|
||||
Future<void> main(List<String> arguments) async {
|
||||
final parser = argParser();
|
||||
final ArgResults args = parser.parse(arguments);
|
||||
void addJadbArg(ArgParser argParser) {
|
||||
argParser.addOption(
|
||||
'jadb',
|
||||
abbr: 'f',
|
||||
help: 'Path to the SQLite database file.',
|
||||
valueHelp: 'PATH',
|
||||
mandatory: true,
|
||||
);
|
||||
}
|
||||
|
||||
if (args.option('libsqlite') == null) {
|
||||
print(parser.usage);
|
||||
exit(64);
|
||||
class CreateDb extends Command {
|
||||
final name = "create-db";
|
||||
final description = "Create the database";
|
||||
|
||||
CreateDb() {
|
||||
addLibsqliteArg(argParser);
|
||||
}
|
||||
|
||||
final db = await createDatabaseFactoryFfi(ffiInit: () {
|
||||
open.overrideForAll(() => DynamicLibrary.open(args.option('libsqlite')!));
|
||||
}).openDatabase(Directory.current.uri.resolve('jadb.sqlite').path);
|
||||
Future<void> run() async {
|
||||
if (argResults!.option('libsqlite') == null) {
|
||||
print(argParser.usage);
|
||||
exit(64);
|
||||
}
|
||||
|
||||
await addDataFromJMdict(db);
|
||||
await addDataFromRADKFILE(db);
|
||||
await addDataFromKANJIDIC(db);
|
||||
final db = await createDatabaseFactoryFfi(ffiInit: () {
|
||||
open.overrideForAll(
|
||||
() => DynamicLibrary.open(argResults!.option('libsqlite')!));
|
||||
}).openDatabase(Directory.current.uri.resolve('jadb.sqlite').path);
|
||||
|
||||
await addDataFromJMdict(db);
|
||||
await addDataFromRADKFILE(db);
|
||||
await addDataFromKANJIDIC(db);
|
||||
}
|
||||
}
|
||||
|
||||
class QueryKanji extends Command {
|
||||
final name = "query-kanji";
|
||||
final description = "Query the database for kanji data";
|
||||
|
||||
QueryKanji() {
|
||||
addLibsqliteArg(argParser);
|
||||
addJadbArg(argParser);
|
||||
}
|
||||
|
||||
Future<void> run() async {
|
||||
if (argResults!.option('libsqlite') == null ||
|
||||
!argResults!.wasParsed('jadb')) {
|
||||
print(argParser.usage);
|
||||
exit(64);
|
||||
}
|
||||
|
||||
final db = await createDatabaseFactoryFfi(ffiInit: () {
|
||||
open.overrideForAll(
|
||||
() => DynamicLibrary.open(argResults!.option('libsqlite')!));
|
||||
}).openDatabase(
|
||||
Directory.current.uri.resolve(argResults!.option('jadb')!).path);
|
||||
|
||||
final result = await JaDBConnection(db).searchKanji('漢');
|
||||
|
||||
if (result == null) {
|
||||
print("No such kanji");
|
||||
} else {
|
||||
print(JsonEncoder.withIndent(' ').convert(result.toJson()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> main(List<String> args) async {
|
||||
final runner = CommandRunner(
|
||||
'jadb',
|
||||
"CLI tool to help creating and testing the jadb database",
|
||||
);
|
||||
|
||||
runner.addCommand(CreateDb());
|
||||
runner.addCommand(QueryKanji());
|
||||
|
||||
runner.run(args);
|
||||
}
|
||||
|
@ -1,50 +0,0 @@
|
||||
import 'dart:ffi';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:args/args.dart';
|
||||
import 'package:jadb/search.dart';
|
||||
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
||||
import 'package:sqlite3/open.dart';
|
||||
|
||||
ArgParser argParser() {
|
||||
final parser = ArgParser();
|
||||
|
||||
parser.addOption(
|
||||
'libsqlite',
|
||||
help:
|
||||
'Path to the SQLite library. This is used to load the SQLite library dynamically.',
|
||||
valueHelp: 'PATH',
|
||||
defaultsTo: Platform.environment['LIBSQLITE_PATH'],
|
||||
);
|
||||
|
||||
parser.addOption(
|
||||
'jadb',
|
||||
help: 'Path to the SQLite database file.',
|
||||
valueHelp: 'PATH',
|
||||
mandatory: true,
|
||||
);
|
||||
|
||||
return parser;
|
||||
}
|
||||
|
||||
Future<void> main(List<String> arguments) async {
|
||||
final parser = argParser();
|
||||
final ArgResults args = parser.parse(arguments);
|
||||
|
||||
if (args.option('libsqlite') == null || !args.wasParsed('jadb')) {
|
||||
print(parser.usage);
|
||||
exit(64);
|
||||
}
|
||||
|
||||
final db = await createDatabaseFactoryFfi(ffiInit: () {
|
||||
open.overrideForAll(() => DynamicLibrary.open(args.option('libsqlite')!));
|
||||
}).openDatabase(Directory.current.uri.resolve(args.option('jadb')!).path);
|
||||
|
||||
final result = await JaDBConnection(db).searchKanji('漢');
|
||||
|
||||
if (result == null) {
|
||||
print("No such kanji");
|
||||
} else {
|
||||
print(result.toJson().toString());
|
||||
}
|
||||
}
|
@ -16,6 +16,7 @@ stdenvNoCC.mkDerivation {
|
||||
database-tool
|
||||
sqlite
|
||||
];
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
@ -28,7 +29,7 @@ stdenvNoCC.mkDerivation {
|
||||
sqlite3 jadb.sqlite < "$migration"
|
||||
done
|
||||
|
||||
"${lib.getExe database-tool}" --libsqlite "${sqlite.out}/lib/libsqlite3.so"
|
||||
"${lib.getExe database-tool}" create-db --libsqlite "${sqlite.out}/lib/libsqlite3.so"
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
@ -19,7 +19,6 @@ dev_dependencies:
|
||||
|
||||
executables:
|
||||
jadb: jadb
|
||||
test: test_tool
|
||||
|
||||
topics:
|
||||
- database
|
||||
|
Loading…
x
Reference in New Issue
Block a user