Bläddra i källkod

Fix invalid signature in sqlite.hdll (#485) (#513)

* Fix signature for result_get in sqlite lib

* Add test case for sqlite lib
tobil4sk 3 år sedan
förälder
incheckning
f327a87c00

+ 6 - 6
libs/sqlite/sqlite.c

@@ -116,7 +116,7 @@ HL_PRIM sqlite_result *HL_NAME(request)(sqlite_database *db, vbyte *sql ) {
 	r = (sqlite_result*)hl_gc_alloc_finalizer(sizeof(sqlite_result));
 	r->finalize = HL_NAME(finalize_result);
 	r->db = NULL;
-	
+
 	if( sqlite3_prepare16_v2(db->db, sql, -1, &r->r, &tl) != SQLITE_OK ) {
 		HL_NAME(error)(db->db, false);
 	}
@@ -150,7 +150,7 @@ HL_PRIM sqlite_result *HL_NAME(request)(sqlite_database *db, vbyte *sql ) {
 					hl_buffer_str(b, sqlite3_column_name16(r->r,i));
 					hl_buffer_str(b, USTR(" and "));
 					hl_buffer_str(b, sqlite3_column_name16(r->r,j));
-					
+
 					sqlite3_finalize(r->r);
 					hl_error("%s",hl_buffer_content(b, NULL));
 				}
@@ -161,7 +161,7 @@ HL_PRIM sqlite_result *HL_NAME(request)(sqlite_database *db, vbyte *sql ) {
 	// changes in an update/delete
 	if( db->last != NULL )
 		HL_NAME(finalize_request)(db->last, false);
-	
+
 	db->last = r;
 	return db->last;
 }
@@ -246,11 +246,11 @@ HL_PRIM varray *HL_NAME(result_next)( sqlite_result *r ) {
 				int size = sqlite3_column_bytes(r->r, i);
 				vbyte *blob = (vbyte *)sqlite3_column_blob(r->r, i);
 				vbyte *vb = hl_copy_bytes(blob, size+1);
-				
+
 				varray *bytes_data = hl_alloc_array(&hlt_dyn, 2);
 				hl_aptr(bytes_data, vdynamic*)[0] = hl_make_dyn(&vb, &hlt_bytes);
 				hl_aptr(bytes_data, vdynamic*)[1] = hl_make_dyn(&size, &hlt_i32);
-				
+
 				v = hl_make_dyn(&bytes_data, &hlt_array);
 				break;
 			}
@@ -326,7 +326,7 @@ DEFINE_PRIM(_RESULT,     request, _CONNECTION _BYTES);
 DEFINE_PRIM(_I32,        last_id, _CONNECTION);
 
 DEFINE_PRIM(_ARR,          result_next,      _RESULT);
-DEFINE_PRIM(_NULL(_BYTES), result_get,       _RESULT _I32);
+DEFINE_PRIM(_BYTES,        result_get,       _RESULT _I32);
 DEFINE_PRIM(_NULL(_I32),   result_get_int,   _RESULT _I32);
 DEFINE_PRIM(_NULL(_F64),   result_get_float, _RESULT _I32);
 DEFINE_PRIM(_NULL(_I32),   result_get_length, _RESULT);

+ 3 - 0
libs/sqlite/test/bin/.gitignore

@@ -1,2 +1,5 @@
 *.c
+*.h
 *.b
+
+hlc.json

+ 9 - 9
libs/sqlite/test/classes/BasicTestCase.hx → libs/sqlite/test/src/BasicTestCase.hx

@@ -12,26 +12,26 @@ class BasicTestCase extends TestCase
 {
 	var file : String;
 	var cnx : Connection;
-	
+
 	public function new( )
 	{
 		super();
-		
+
 		file = 'basic.sqlite';
 	}
-	
+
 	public function testOpen( ) : Void
 	{
 		cnx = Sqlite.open(file);
 		assertFalse(cnx == null);
 		assertTrue(FileSystem.exists(file));
 	}
-	
+
 	public function testDbName( ) : Void
 	{
 		assertEquals("SQLite", cnx.dbName());
 	}
-	
+
 	public function testTransaction( ) : Void
 	{
 		cnx.startTransaction();
@@ -40,22 +40,22 @@ class BasicTestCase extends TestCase
 		cnx.commit();
 		assertEquals(1, 1);
 	}
-	
+
 	public function testSelect( ) : Void
 	{
 		var res : ResultSet = cnx.request("SELECT 1 as a");
 		assertFalse(res == null);
-		
+
 		assertTrue(res.hasNext());
 		var vals = res.next();
 		assertFalse(vals == null);
 		assertEquals(1, vals.a);
 	}
-	
+
 	public function testClose( ) : Void
 	{
 		cnx.close();
 		assertTrue(FileSystem.exists(file));
 		FileSystem.deleteFile(file);
 	}
-}
+}

+ 13 - 13
libs/sqlite/test/classes/ExceptionTestCase.hx → libs/sqlite/test/src/ExceptionTestCase.hx

@@ -10,35 +10,35 @@ class ExceptionTestCase extends TestCase
 {
 	var file : String;
 	var cnx : Connection;
-	
+
 	override public function setup( ) : Void
 	{
 		super.setup();
-		
+
 		file = '${currentTest.classname}-${currentTest.method}.sqlite';
 		cnx = Sqlite.open(file);
-		
+
 		cnx.request('DROP TABLE IF EXISTS t1');
 		cnx.request('CREATE TABLE t1(i int, f float, t text, bl blob, bo bool)');
-		
+
 		cnx.request('INSERT INTO  t1 VALUES(1, 0.1, "hello", "\x11", 1)');
 		cnx.request('INSERT INTO  t1 VALUES(2, 0.00002, "goodbye", "\x1111", 0)');
 		cnx.request('INSERT INTO  t1 VALUES(3, 0.000000003, "Привет!", "\x111111", 1)');
 	}
-	
+
 	override public function tearDown( ) : Void
 	{
 		super.tearDown();
-		
+
 		cnx.close();
 		FileSystem.deleteFile(file);
 	}
-	
+
 	public function testSqlError( ) : Void
 	{
 		var sql : String = 'SELECT * FRM t1';
 		var expected : String = 'SQLite error: near "FRM": syntax error';
-		
+
 		var msg : String = null;
 		try
 		{
@@ -48,15 +48,15 @@ class ExceptionTestCase extends TestCase
 		{
 			msg = Std.string(e);
 		}
-		
+
 		assertEquals(expected, msg);
 	}
-	
+
 	public function testSameField( ) : Void
 	{
 		var sql : String = 'SELECT i as a, f as a FROM t1';
 		var expected : String = 'SQLite error: Same field is two times in the request: $sql';
-		
+
 		var msg : String = null;
 		try
 		{
@@ -66,7 +66,7 @@ class ExceptionTestCase extends TestCase
 		{
 			msg = Std.string(e);
 		}
-		
+
 		assertEquals(expected, msg);
 	}
-}
+}

+ 6 - 6
libs/sqlite/test/classes/Main.hx → libs/sqlite/test/src/Main.hx

@@ -7,7 +7,7 @@ class Main
 	{
 		var r = new haxe.unit.TestRunner();
 		r.add(new BasicTestCase());
-		r.add(new ResulSetTestCase());
+		r.add(new ResultSetTestCase());
 		r.add(new ExceptionTestCase());
 		r.run();
 	}
@@ -16,22 +16,22 @@ class Main
 	{
 		var cnx : Connection = Sqlite.open('test.sqlite');
 		cnx.close();
-		
+
 		if( FileSystem.exists('test2.sqlite') )
 			FileSystem.deleteFile('test2.sqlite');
-		
+
 		var cnx : Connection = Sqlite.open('test2.sqlite');
 		cnx.request('CREATE TABLE t1(a int, b text)');
 		cnx.request('INSERT INTO t1 VALUES(1,"hello")');
 		cnx.request('INSERT INTO t1 VALUES(2,"goodbye")');
 		cnx.request('INSERT INTO t1 VALUES(3,"howdy!")');
-		
+
 		var res = cnx.request('SELECT a as column_name_a, b as field_name_b, * FROM t1 ORDER BY a');
 		trace(res.getFieldsNames());
 		for ( r in res )
 			trace(r);
-		
+
 		cnx.close();
 	}
 	*/
-}
+}

+ 36 - 23
libs/sqlite/test/classes/ResulSetTestCase.hx → libs/sqlite/test/src/ResultSetTestCase.hx

@@ -8,40 +8,40 @@ import sys.db.Sqlite;
 import sys.db.ResultSet;
 
 
-class ResulSetTestCase extends TestCase
+class ResultSetTestCase extends TestCase
 {
 	var file : String;
 	var cnx : Connection;
-	
+
 	override public function setup( ) : Void
 	{
 		super.setup();
-		
+
 		file = '${currentTest.classname}-${currentTest.method}.sqlite';
 		cnx = Sqlite.open(file);
-		
+
 		cnx.request('DROP TABLE IF EXISTS t1');
 		cnx.request('CREATE TABLE t1(i int, f float, t text, bl blob, bo bool)');
-		
+
 		cnx.request('INSERT INTO  t1 VALUES(1, 0.1, "hello", "\x11", 1)');
 		cnx.request('INSERT INTO  t1 VALUES(2, 0.00002, "goodbye", "\x1111", 0)');
 		cnx.request('INSERT INTO  t1 VALUES(3, 0.000000003, "Привет!", "\x111111", 1)');
 	}
-	
+
 	override public function tearDown( ) : Void
 	{
 		super.tearDown();
-		
+
 		cnx.close();
 		FileSystem.deleteFile(file);
 	}
-	
+
 	public function testLength( ) : Void
 	{
 		var res : ResultSet = cnx.request('SELECT * FROM t1');
 		assertFalse(res == null);
 		assertTrue(res.hasNext());
-		
+
 		assertEquals(3, res.length);
 	}
 	public function testFieldsLen( ) : Void
@@ -49,70 +49,83 @@ class ResulSetTestCase extends TestCase
 		var res : ResultSet = cnx.request('SELECT * FROM t1 WHERE i = 1');
 		assertFalse(res == null);
 		assertTrue(res.hasNext());
-		
+
 		assertEquals(5, res.nfields);
 		var fields = res.getFieldsNames();
 		assertFalse(fields == null);
 		assertEquals(res.nfields, fields.length);
 	}
-	
+
 	public function testFieldsName( ) : Void
 	{
 		var res : ResultSet = cnx.request('SELECT * FROM t1 WHERE i = 1');
 		assertFalse(res == null);
 		assertTrue(res.hasNext());
-		
+
 		var fields = res.getFieldsNames();
-		
+
 		assertEquals('i', fields[0]);
 		assertEquals('f', fields[1]);
 		assertEquals('t', fields[2]);
 		assertEquals('bl', fields[3]);
 		assertEquals('bo', fields[4]);
 	}
-	
+
+	public function testGetResult( ) : Void
+	{
+		var res : ResultSet = cnx.request('SELECT * FROM t1 WHERE i = 1');
+		assertFalse(res == null);
+		assertTrue(res.hasNext());
+
+		assertEquals(1, res.getIntResult(0));
+		assertEquals(0.1, res.getFloatResult(1));
+		assertEquals("hello", res.getResult(2));
+		assertEquals("\x11", res.getResult(3));
+		assertEquals(1, res.getIntResult(4));
+	}
+
 	public function testFieldsVal1( ) : Void
 	{
 		var res : ResultSet = cnx.request('SELECT * FROM t1 WHERE i = 1');
 		assertFalse(res == null);
 		assertTrue(res.hasNext());
-		
+
 		var vals = res.next();
-		
+
 		assertEquals(1, vals.i);
 		assertEquals(0.1, vals.f);
 		assertEquals("hello", vals.t);
 		assertEquals("\x11", vals.bl);
 		assertEquals(true, vals.bo);
 	}
-	
+
 	public function testFieldsVal2( ) : Void
 	{
 		var res : ResultSet = cnx.request('SELECT * FROM t1 WHERE i = 2');
 		assertFalse(res == null);
 		assertTrue(res.hasNext());
-		
+
 		var vals = res.next();
-		
+
 		assertEquals(2, vals.i);
 		assertEquals(0.00002, vals.f);
 		assertEquals("goodbye", vals.t);
 		assertEquals("\x1111", vals.bl);
 		assertEquals(false, vals.bo);
 	}
-	
+
 	public function testFieldsVal3( ) : Void
 	{
 		var res : ResultSet = cnx.request('SELECT * FROM t1 WHERE i = 3');
 		assertFalse(res == null);
 		assertTrue(res.hasNext());
-		
+
 		var vals = res.next();
-		
+
 		assertEquals(3, vals.i);
 		assertEquals(0.000000003, vals.f);
 		assertEquals("Привет!", vals.t);
 		assertEquals("\x111111", vals.bl);
 		assertEquals(true, vals.bo);
 	}
-}
+}

+ 4 - 5
libs/sqlite/test/test.hxml

@@ -1,10 +1,9 @@
--cp classes
--cp ../std/
+-cp src
 -main Main
+-lib hx3compat
+
+--each
 -hl bin/_main.c
 
 --next
-
--cp classes
--main Main
 -hl bin/test.b