Skip to content

Commit

Permalink
Merge pull request #11 from Tightdb/development
Browse files Browse the repository at this point in the history
Subtable assigment issue fixed.
  • Loading branch information
kspangsege committed Oct 16, 2013
2 parents d7388a6 + 121e5d9 commit 8773ec5
Show file tree
Hide file tree
Showing 8 changed files with 279 additions and 97 deletions.
144 changes: 73 additions & 71 deletions doc/ref/data/dyn_table_ref.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -559,78 +559,80 @@ CATEGORIES :

# TODO: change name to findFirst* ?

TITLE : find*
SUMMARY : Find first matching row.
DESCR : The method finds the first occurence of a given value in a column.
SIGNATURE: |
(size_t)findBool:(size_t)col_ndx value:(BOOL)value
(size_t)findInt:(size_t)col_ndx value:(int64_t)value
(size_t)findFloat:(size_t)col_ndx value:(float)value
(size_t)findDouble:(size_t)col_ndx value:(double)value
(size_t)findDate:(size_t)col_ndx value:(time_t)value
(size_t)findString:(size_t)col_ndx value:(NSString *)value
(size_t)findBinary:(size_t)col_ndx value:(TightdbBinary *)value
PARAMS:
- NAME : col_ndx
TYPES : size_t
DESCR : *g_dyn_table_find_first_xxx_parm1_descr
- NAME : value
TYPES : [BOOL, int64_t, float, double, time_t, NSString, const char*]
DESCR : *g_dyn_table_find_first_xxx_parm2_descr
RETURN:
TYPES : size_t
# jjepsen: might be redundant (use a query?)
# TITLE : find*
# SUMMARY : Find first matching row.
# DESCR : The method finds the first occurence of a given value in a column.
# SIGNATURE: |
# (size_t)findBool:(size_t)col_ndx value:(BOOL)value
# (size_t)findInt:(size_t)col_ndx value:(int64_t)value
# (size_t)findFloat:(size_t)col_ndx value:(float)value
# (size_t)findDouble:(size_t)col_ndx value:(double)value
# (size_t)findDate:(size_t)col_ndx value:(time_t)value
# (size_t)findString:(size_t)col_ndx value:(NSString *)value
# (size_t)findBinary:(size_t)col_ndx value:(TightdbBinary *)value
# PARAMS:
# - NAME : col_ndx
# TYPES : size_t
# DESCR : *g_dyn_table_find_first_xxx_parm1_descr
# - NAME : value
# TYPES : [BOOL, int64_t, float, double, time_t, NSString, const char*]
# DESCR : *g_dyn_table_find_first_xxx_parm2_descr
# RETURN:
# TYPES : size_t
#TODO: is that the same in objc?
DESCR : "The row index or <code>tightdb::not_found</code> (equal to <code>std::size_t(-1)</code>) if there is no match."
EXAMPLES:
- CODE : ex_objc_dyn_table_find_first_xxx
DESCR :

- g_dyn_table_find_all_bool_const:
IGNORE : ""
- g_dyn_table_find_all_int_const:
IGNORE : ""
- g_dyn_table_find_all_date_const:
IGNORE : ""
- g_dyn_table_find_all_string_const:
IGNORE : ""
- g_dyn_table_find_all_float_const:
IGNORE : ""
- g_dyn_table_find_all_double_const:
IGNORE : ""

- g_dyn_table_find_all_bool:
TODO : soon
- g_dyn_table_find_all_date:
TODO : soon
- g_dyn_table_find_all_string:
TODO : soon
- g_dyn_table_find_all_float:
TODO : soon
- g_dyn_table_find_all_double:
TODO : soon
- g_dyn_table_find_all_int:
TODO : soon # See FIXME in the code.
NAMES : findAll
TITLE : findAll*
SUMMARY : *g_dyn_table_find_all_xxx_summary
DESCR : >
The method finds all occurences of a given value in a specific column.
The rows are returned as a {@link class_dyn_tableview} object.
SIGNATURE: |
(TightdbView *)findAll:(TightdbView *)view column:(size_t)col_ndx value:(int64_t)value
PARAMS:
- NAME : col_ndx
TYPES : size_t
DESCR : *g_dyn_table_find_all_xxx_parm1_descr
- NAME : value
TYPES : [BOOL, int64_t, float, double, time_t, NSString]
DESCR : *g_dyn_table_find_all_xxx_parm2_descr
RETURN:
TYPES : TightdbView *
DESCR : *g_dyn_table_find_all_xxx_return_descr
EXAMPLES:
- CODE : ex_objc_dyn_table_find_all_xxx
DESCR :
# DESCR : "The row index or <code>tightdb::not_found</code> (equal to <code>std::size_t(-1)</code>) if there is no match."
# EXAMPLES:
# - CODE : ex_objc_dyn_table_find_first_xxx
# DESCR :

# - g_dyn_table_find_all_bool_const:
# IGNORE : ""
# - g_dyn_table_find_all_int_const:
# IGNORE : ""
# - g_dyn_table_find_all_date_const:
# IGNORE : ""
# - g_dyn_table_find_all_string_const:
# IGNORE : ""
# - g_dyn_table_find_all_float_const:
# IGNORE : ""
# - g_dyn_table_find_all_double_const:
# IGNORE : ""

# jjepsen: might be redundant, removing from docs, but still included in binding.
# - g_dyn_table_find_all_bool:
# TODO : soon
# - g_dyn_table_find_all_date:
# TODO : soon
# - g_dyn_table_find_all_string:
# TODO : soon
# - g_dyn_table_find_all_float:
# TODO : soon
# - g_dyn_table_find_all_double:
# TODO : soon
# - g_dyn_table_find_all_int:
# TODO : soon # See FIXME in the code.
# NAMES : findAll
# TITLE : findAll*
# SUMMARY : *g_dyn_table_find_all_xxx_summary
# DESCR : >
# The method finds all occurences of a given value in a specific column.
# The rows are returned as a {@link class_dyn_tableview} object.
# SIGNATURE: |
# (TightdbView *)findAll:(TightdbView *)view column:(size_t)col_ndx value:(int64_t)value
# PARAMS:
# - NAME : col_ndx
# TYPES : size_t
# DESCR : *g_dyn_table_find_all_xxx_parm1_descr
# - NAME : value
# TYPES : [BOOL, int64_t, float, double, time_t, NSString]
# DESCR : *g_dyn_table_find_all_xxx_parm2_descr
# RETURN:
# TYPES : TightdbView *
# DESCR : *g_dyn_table_find_all_xxx_return_descr
# EXAMPLES:
# - CODE : ex_objc_dyn_table_find_all_xxx
# DESCR :

- g_dyn_table_find_sorted_int:
TODO : later
Expand Down
5 changes: 5 additions & 0 deletions src/tightdb/objc/cursor.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,18 +39,22 @@
-(BOOL)setFloat:(float)value inColumn:(size_t)colNdx error:(NSError *__autoreleasing *)error;
-(BOOL)setDouble:(double)value inColumn:(size_t)colNdx;
-(BOOL)setDouble:(double)value inColumn:(size_t)colNdx error:(NSError *__autoreleasing *)error;
-(BOOL)setDate:(time_t)value inColumn:(size_t)colNdx;
-(BOOL)setBinary:(TightdbBinary *)value inColumn:(size_t)colNdx;
-(BOOL)setBinary:(TightdbBinary *)value inColumn:(size_t)colNdx error:(NSError *__autoreleasing *)error;
-(BOOL)setMixed:(TightdbMixed *)value inColumn:(size_t)colNdx;
-(BOOL)setMixed:(TightdbMixed *)value inColumn:(size_t)colNdx error:(NSError *__autoreleasing *)error;
-(BOOL)setTable:(TightdbTable *)value inColumn:(size_t)colNdx;

-(int64_t)getIntInColumn:(size_t)colNdx;
-(NSString *)getStringInColumn:(size_t)colNdx;
-(BOOL)getBoolInColumn:(size_t)colNdx;
-(float)getFloatInColumn:(size_t)colNdx;
-(double)getDoubleInColumn:(size_t)colNdx;
-(time_t)getDateInColumn:(size_t)colNdx;
-(TightdbBinary *)getBinaryInColumn:(size_t)colNdx;
-(TightdbMixed *)getMixedInColumn:(size_t)colNdx;
-(TightdbTable *)getTableInColumn:(size_t)colNdx;

@end

Expand Down Expand Up @@ -84,6 +88,7 @@
-(time_t)getDate;
-(BOOL)setDate:(time_t)value;
-(BOOL)setDate:(time_t)value error:(NSError *__autoreleasing *)error;
-(BOOL)setSubtable:(TightdbTable *)subtable;
-(id)getSubtable:(Class)obj;
-(TightdbMixed *)getMixed;
-(BOOL)setMixed:(TightdbMixed *)value;
Expand Down
26 changes: 26 additions & 0 deletions src/tightdb/objc/cursor_objc.mm
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,11 @@ -(double)getDoubleInColumn:(size_t)colNdx
return [_table getDouble:colNdx ndx:_ndx];
}

-(time_t)getDateInColumn:(size_t)colNdx
{
return [_table getDate:colNdx ndx:_ndx];
}

-(TightdbBinary *)getBinaryInColumn:(size_t)colNdx
{
return [_table getBinary:colNdx ndx:_ndx];
Expand All @@ -85,6 +90,12 @@ -(TightdbMixed *)getMixedInColumn:(size_t)colNdx
return [_table getMixed:colNdx ndx:_ndx];
}

-(TightdbTable *)getTableInColumn:(size_t)colNdx
{
return [_table getSubtable:colNdx ndx:_ndx];
}


-(BOOL)setInt:(int64_t)value inColumn:(size_t)colNdx
{
return [self setInt:value inColumn:colNdx error:nil];
Expand Down Expand Up @@ -135,6 +146,11 @@ -(BOOL)setDouble:(double)value inColumn:(size_t)colNdx error:(NSError *__autorel
return [_table setDouble:colNdx ndx:_ndx value:value error:error];
}

-(BOOL)setDate:(time_t)value inColumn:(size_t)colNdx
{
return [_table setDate:colNdx ndx:_ndx value:value];
}

-(BOOL)setBinary:(TightdbBinary *)value inColumn:(size_t)colNdx
{
return [self setBinary:value inColumn:colNdx error:nil];
Expand All @@ -155,6 +171,11 @@ -(BOOL)setMixed:(TightdbMixed *)value inColumn:(size_t)colNdx error:(NSError *__
return [_table setMixed:colNdx ndx:_ndx value:value error:error];
}

-(BOOL)setTable:(TightdbTable *)value inColumn:(size_t)colNdx
{
return [_table setSubtable:colNdx ndx:_ndx withTable:value];
}

@end


Expand Down Expand Up @@ -295,6 +316,11 @@ -(id)getSubtable:(Class)obj
return [_cursor.table getSubtable:_columnId ndx:_cursor.ndx withClass:obj];
}

-(BOOL)setSubtable:(TightdbTable *)subtable
{
return [_cursor.table setSubtable:_columnId ndx:_cursor.ndx withTable:subtable];
}

-(TightdbMixed *)getMixed
{
return [_cursor.table getMixed:_columnId ndx:_cursor.ndx];
Expand Down
8 changes: 5 additions & 3 deletions src/tightdb/objc/helper_macros.h
Original file line number Diff line number Diff line change
Expand Up @@ -182,16 +182,18 @@


#define TIGHTDB_CURSOR_PROPERTY_DEF_SUBTABLE(name, type) \
@property (readonly) type *name; \
@property type *name; \
-(type *)name; \

#define TIGHTDB_CURSOR_PROPERTY_IMPL_SUBTABLE(name, type) \
-(type *)name \
{ \
return [_##name getSubtable:[type class]]; \
} \


-(void)set##name:(type *)subtable \
{ \
[_##name setSubtable:subtable]; \
} \

// TIGHTDB_QUERY_ACCESSOR

Expand Down
1 change: 1 addition & 0 deletions src/tightdb/objc/table.h
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,7 @@
-(BOOL)insertSubtable:(size_t)colNdx ndx:(size_t)ndx error:(NSError *__autoreleasing *)error;
-(BOOL)clearSubtable:(size_t)colNdx ndx:(size_t)ndx;
-(BOOL)clearSubtable:(size_t)colNdx ndx:(size_t)ndx error:(NSError *__autoreleasing *)error;
-(BOOL)setSubtable:(size_t)col_ndx ndx:(size_t)ndx withTable:(TightdbTable *)subtable;

// Mixed
-(TightdbMixed *)getMixed:(size_t)colNdx ndx:(size_t)ndx;
Expand Down
29 changes: 26 additions & 3 deletions src/tightdb/objc/table_objc.mm
Original file line number Diff line number Diff line change
Expand Up @@ -548,10 +548,24 @@ -(BOOL)isEqual:(TightdbTable *)other
return *_table == *other->_table;
}

-(BOOL)setSubtable:(size_t)col_ndx ndx:(size_t)ndx withTable:(TightdbTable *)subtable
{
// TODO: Use core method for checking the equality of two table specs. Even in the typed interface
// the user might add columns (_checkType for typed and spec against spec for dynamic).

const tightdb::DataType t = _table->get_column_type(col_ndx);
if (t == tightdb::type_Table) {
// TODO: Handle any exeptions from core lib.
_table->set_subtable(col_ndx, ndx, &subtable.getTable);
return YES;
} else
return NO;
}

-(TightdbTable *)getSubtable:(size_t)col_ndx ndx:(size_t)ndx
{
const tightdb::DataType t = _table->get_column_type(col_ndx);
if (t != tightdb::type_Table && t != tightdb::type_Mixed) return nil;
if (t != tightdb::type_Table) return nil;
tightdb::TableRef r = _table->get_subtable(col_ndx, ndx);
if (!r) return nil;
TightdbTable *table = [[TightdbTable alloc] _initRaw];
Expand All @@ -566,7 +580,7 @@ -(TightdbTable *)getSubtable:(size_t)col_ndx ndx:(size_t)ndx
-(id)getSubtable:(size_t)col_ndx ndx:(size_t)ndx withClass:(__unsafe_unretained Class)classObj
{
const tightdb::DataType t = _table->get_column_type(col_ndx);
if (t != tightdb::type_Table && t != tightdb::type_Mixed) return nil;
if (t != tightdb::type_Table) return nil;
tightdb::TableRef r = _table->get_subtable(col_ndx, ndx);
if (!r) return nil;
TightdbTable *table = [[classObj alloc] _initRaw];
Expand Down Expand Up @@ -1174,7 +1188,16 @@ -(TightdbMixed *)getMixed:(size_t)col_ndx ndx:(size_t)row_ndx
tightdb::Mixed tmp = _table->get_mixed(col_ndx, row_ndx);
TightdbMixed *mixed = [TightdbMixed mixedWithMixed:tmp];
if ([mixed getType] == tightdb_Table) {
[mixed setTable:[self getSubtable:col_ndx ndx:row_ndx]];
tightdb::TableRef r = _table->get_subtable(col_ndx, row_ndx);
if (!r) return nil;
TightdbTable *table = [[TightdbTable alloc] _initRaw];
if (TIGHTDB_UNLIKELY(!table)) return nil;
[table setTable:move(r)];
[table setParent:self];
[table setReadOnly:_readOnly];
if (![table _checkType]) return nil;

[mixed setTable:table];
}
return mixed;
}
Expand Down
3 changes: 2 additions & 1 deletion src/tightdb/objc/test/query.m
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,8 @@ - (void)testFind
STAssertEquals([[[table where] column:0 isBetweenInt:20 and_:40] find:4], (size_t)5, @"find");
STAssertEquals([[[table where] column:0 isBetweenInt:20 and_:40] find:6], (size_t)-1, @"find");
STAssertEquals([[[table where] column:0 isBetweenInt:20 and_:40] find:3], (size_t)3, @"find");
STAssertEquals([[[table where] column:0 isBetweenInt:20 and_:40] find:-1], (size_t)-1, @"find");
// jjepsen: disabled this test, perhaps it's not relevant after query sematics update.
//STAssertEquals([[[table where] column:0 isBetweenInt:20 and_:40] find:-1], (size_t)-1, @"find");
}


Expand Down
Loading

0 comments on commit 8773ec5

Please sign in to comment.