| sqltype.tablePrimaryKey | `TIMESTAMP` | No | type of `time` column for newly created item tables |
| sqltype.tablePrimaryValue | `NOW()` | No | value of `time` column for newly inserted rows |
| numberDecimalcount | 3 | No | for Itemtype "Number" default decimal digit count |
+| itemsManageTable | `items` | No | items manage table. For Migration from MySQL Persistence, set to `Items`. |
| tableNamePrefix | `item` | No | table name prefix. For Migration from MySQL Persistence, set to `Item`. |
| tableUseRealItemNames | `false` | No | table name prefix generation. When set to `true`, real item names are used for table names and `tableNamePrefix` is ignored. When set to `false`, the `tableNamePrefix` is used to generate table names with sequential numbers. |
| tableCaseSensitiveItemNames | `false` | No | table name case. This setting is only applicable when `tableUseRealItemNames` is `true`. When set to `true`, item name case is preserved in table names and no prefix or suffix is added. When set to `false`, table names are lower cased and a numeric suffix is added. Please read [this](#case-sensitive-item-names) before enabling. |
url=jdbc:mysql://192.168.0.1:3306/testMysql
user=test
password=test
+itemsManageTable=Items
tableNamePrefix=Item
tableUseRealItemNames=false
tableIdDigitCount=0
The SQL data type used depends on the openHAB item type, and allows the item state to be recovered back into openHAB in the same way it was stored.
With this *per-item* layout, the scalability and easy maintenance of the database is ensured, even if large amounts of data must be managed.
-To rename existing tables, use the parameters `tableUseRealItemNames` and `tableIdDigitCount` in the configuration.
+To rename existing tables, use the parameters `tableNamePrefix`, `tableUseRealItemNames`, `tableIdDigitCount` and `tableCaseSensitiveItemNames` in the configuration.
+
+Please be aware that changing the name of `itemsManageTable` is not supported by the migration.
+If this is changed, the table must be renamed manually according to new configured name.
### Number Precision
private int numberDecimalcount = 3;
private boolean tableUseRealItemNames = false;
private boolean tableCaseSensitiveItemNames = false;
+ private String itemsManageTable = "items";
private String tableNamePrefix = "item";
private int tableIdDigitCount = 4;
private boolean rebuildTableNames = false;
logger.debug("JDBC::updateConfig: errReconnectThreshold={}", errReconnectThreshold);
}
+ String mt = (String) configuration.get("itemsManageTable");
+ if (mt != null && !mt.isBlank()) {
+ itemsManageTable = mt;
+ logger.debug("JDBC::updateConfig: itemsManageTable={}", itemsManageTable);
+ }
+
String np = (String) configuration.get("tableNamePrefix");
if (np != null && !np.isBlank()) {
tableNamePrefix = np;
return serviceName;
}
+ public String getItemsManageTable() {
+ return itemsManageTable;
+ }
+
public String getTableNamePrefix() {
return tableNamePrefix;
}
private boolean ifItemsTableExists() throws JdbcSQLException {
logger.debug("JDBC::ifItemsTableExists");
long timerStart = System.currentTimeMillis();
- boolean res = conf.getDBDAO().doIfTableExists(new ItemsVO());
+ ItemsVO vo = new ItemsVO();
+ vo.setItemsManageTable(conf.getItemsManageTable());
+ boolean res = conf.getDBDAO().doIfTableExists(vo);
logTime("doIfTableExists", timerStart, System.currentTimeMillis());
return res;
}
private List<ItemsVO> getItemIDTableNames() throws JdbcSQLException {
logger.debug("JDBC::getItemIDTableNames");
long timerStart = System.currentTimeMillis();
- List<ItemsVO> vo = conf.getDBDAO().doGetItemIDTableNames(new ItemsVO());
+ ItemsVO isvo = new ItemsVO();
+ isvo.setItemsManageTable(conf.getItemsManageTable());
+ List<ItemsVO> vo = conf.getDBDAO().doGetItemIDTableNames(isvo);
logTime("getItemIDTableNames", timerStart, System.currentTimeMillis());
return vo;
}
protected List<ItemsVO> getItemTables() throws JdbcSQLException {
logger.debug("JDBC::getItemTables");
long timerStart = System.currentTimeMillis();
- ItemsVO vo = new ItemsVO();
- vo.setJdbcUriDatabaseName(conf.getDbName());
- List<ItemsVO> vol = conf.getDBDAO().doGetItemTables(vo);
+ ItemsVO isvo = new ItemsVO();
+ isvo.setJdbcUriDatabaseName(conf.getDbName());
+ isvo.setItemsManageTable(conf.getItemsManageTable());
+ List<ItemsVO> vol = conf.getDBDAO().doGetItemTables(isvo);
logTime("getItemTables", timerStart, System.currentTimeMillis());
return vol;
}
* DATABASE TABLEHANDLING *
**************************/
protected void checkDBSchema() throws JdbcSQLException {
+ ItemsVO vo = new ItemsVO();
+ vo.setItemsManageTable(conf.getItemsManageTable());
+
if (!conf.getTableUseRealCaseSensitiveItemNames()) {
- createItemsTableIfNot(new ItemsVO());
+ createItemsTableIfNot(vo);
}
if (conf.getRebuildTableNames()) {
formatTableNames();
if (conf.getTableUseRealCaseSensitiveItemNames()) {
- dropItemsTableIfExists(new ItemsVO());
+ dropItemsTableIfExists(vo);
}
logger.info(
"JDBC::checkDBSchema: Rebuild complete, configure the 'rebuildTableNames' setting to 'false' to stop rebuilds on startup");
logger.debug("JDBC::getTable: no table found for item '{}' in itemNameToTableNameMap", itemName);
int itemId = 0;
- ItemsVO isvo;
- ItemVO ivo;
if (!conf.getTableUseRealCaseSensitiveItemNames()) {
// Create a new entry in items table
- isvo = new ItemsVO();
+ ItemsVO isvo = new ItemsVO();
isvo.setItemName(itemName);
+ isvo.setItemsManageTable(conf.getItemsManageTable());
isvo = createNewEntryInItemsTable(isvo);
itemId = isvo.getItemId();
if (itemId == 0) {
// Create table for item
String dataType = conf.getDBDAO().getDataType(item);
- ivo = new ItemVO(tableName, itemName);
+ ItemVO ivo = new ItemVO(tableName, itemName);
ivo.setDbType(dataType);
ivo = createItemTable(ivo);
logger.debug("JDBC::getTable: Table created for item '{}' with dataType {} in SQL database.", itemName,
for (String itemName : itemTables) {
ItemsVO isvo = new ItemsVO();
isvo.setItemName(itemName);
+ isvo.setItemsManageTable(conf.getItemsManageTable());
isvo = createNewEntryInItemsTable(isvo);
int itemId = isvo.getItemId();
if (itemId == 0) {
}
}
} else {
- String itemsManageTable = new ItemsVO().getItemsManageTable();
+ String itemsManageTable = conf.getItemsManageTable();
Map<Integer, String> itemIdToItemNameMap = new HashMap<>();
for (ItemsVO vo : itemIdTableNames) {
<!--
# T A B L E O P E R A T I O N S
+ # Items Manage Table (optional, default: "items")
+ # for Migration from MYSQL-Bundle set to 'Items'.
+ #itemsManageTable=Items
+
# Tablename Prefix String (optional, default: "item")
# for Migration from MYSQL-Bundle set to 'Item'.
#tableNamePrefix=Item
# USE WITH CARE! Deactivate after Renaming is done!
#rebuildTableNames=true
-->
+ <parameter name="itemsManageTable" type="text">
+ <label>Items Manage Table</label>
+ <description><![CDATA[Items Manage Table <br>(optional, default: "items"). <br>
+ For migration from MYSQL-Bundle set to 'Items'.]]></description>
+ </parameter>
<parameter name="tableNamePrefix" type="text">
<label>Tablename Prefix String</label>
<description><![CDATA[Tablename prefix string <br>(optional, default: "item"). <br>