git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@812 f203690c-595d-4dc9-a70b-905162fa7fd2tags/jackcess-2.0.1
@@ -6,8 +6,6 @@ Missing pieces: | |||
* MEDIUM | |||
- implement table creation w/ complex columns | |||
* MEDIUM | |||
- implement (optional) foreign key enforcement | |||
* MEDIUM | |||
- implement write support for properties | |||
* EASY | |||
- implement table, column, index renaming | |||
@@ -26,15 +24,7 @@ Refactor goals: | |||
- clean up javadocs | |||
- enhance public api classes | |||
* add @usage tags to util classes | |||
* change CodecHandler usage to handle not-inline decoding | |||
- pass filename to CodecHandler, enable pwd callbacks CallbackHandler | |||
- pass custom context to CodecHandler? | |||
- rework CryptCodecProvider to have custom | |||
javax.security.auth.callback.CallbackHandler which is only invoked if | |||
password is definitely required. | |||
- implement page buffering in PageChannel | |||
* need to implement logical flushing in update code (startUpdate/finishUpdate) | |||
- refactor free-space handlers Table/Column? | |||
- implement "lazy" usage maps (load on first usage)? | |||
- implement some OLE support | |||
- add typed getter methods to Row |
@@ -2170,7 +2170,7 @@ public class ColumnImpl implements Column, Comparable<ColumnImpl> { | |||
if(TableImpl.rowFitsOnDataPage(dataLength, lvalPage, getFormat())) { | |||
// the current page has space | |||
return lvalPage; | |||
} | |||
} | |||
} | |||
// need new page |
@@ -1792,28 +1792,29 @@ public class TableImpl implements Table | |||
TempPageHolder rowBufferH) | |||
throws IOException | |||
{ | |||
// find last data page (Not bothering to check other pages for free | |||
// space.) | |||
// find last data page (Not bothering to check other pages for free | |||
// space.) | |||
UsageMap.PageCursor revPageCursor = ownedPages.cursor(); | |||
revPageCursor.afterLast(); | |||
while(true) { | |||
int tmpPageNumber = revPageCursor.getPreviousPage(); | |||
if(tmpPageNumber < 0) { | |||
break; | |||
} | |||
revPageCursor.afterLast(); | |||
while(true) { | |||
int tmpPageNumber = revPageCursor.getPreviousPage(); | |||
if(tmpPageNumber < 0) { | |||
break; | |||
} | |||
// only use if actually listed in free space pages | |||
if(!freeSpacePages.containsPageNumber(tmpPageNumber)) { | |||
continue; | |||
} | |||
ByteBuffer dataPage = rowBufferH.setPage(ownedPages.getPageChannel(), | |||
tmpPageNumber); | |||
if(dataPage.get() == PageTypes.DATA) { | |||
// found last data page, only use if actually listed in free space | |||
// pages | |||
if(freeSpacePages.containsPageNumber(tmpPageNumber)) { | |||
return dataPage; | |||
} | |||
} | |||
if(dataPage.get() == PageTypes.DATA) { | |||
// found last data page with free space | |||
return dataPage; | |||
} | |||
} | |||
return null; | |||
} | |||
} | |||
/** | |||
* Updates the table definition after rows are modified. |
@@ -327,13 +327,6 @@ public class UsageMap | |||
_handler.addOrRemovePageNumber(pageNumber, true, false); | |||
} | |||
/** | |||
* Remove a page number from this usage map | |||
*/ | |||
public void removePageNumber(int pageNumber) throws IOException { | |||
removePageNumber(pageNumber, false); | |||
} | |||
/** | |||
* Remove a page number from this usage map | |||
*/ | |||
@@ -681,7 +674,7 @@ public class UsageMap | |||
} | |||
// lastly, remove the new page | |||
removePageNumber(newPageNumber); | |||
removePageNumber(newPageNumber, false); | |||
} | |||
} | |||