From a430f267f987c130bbf28b76d695062084ba093c Mon Sep 17 00:00:00 2001 From: rtrimana Date: Fri, 6 Jan 2017 09:02:26 -0800 Subject: [PATCH] Fixing MySQL query parsing bug for IoTRelation; adjusting MySQL queries for new interfaces; backing up database --- iotjava/iotinstaller/TableRelation.java | 7 ++++++- localconfig/mysql/alarmSet.config | 2 +- localconfig/mysql/audioRooms.config | 2 +- localconfig/mysql/camSet.config | 4 +++- localconfig/mysql/cameraSet.config | 2 +- localconfig/mysql/cameras.config | 2 +- localconfig/mysql/gpsSet.config | 2 +- localconfig/mysql/gwSet.config | 2 +- localconfig/mysql/lawnCameraRelation.config | 4 ++-- .../mysql/lawnMoistureSensorRelation.config | 4 ++-- localconfig/mysql/lawnSet.config | 2 +- .../mysql/lawnSprinklerRelation.config | 6 +++--- localconfig/mysql/mainRoomLightBulbs.config | 2 +- localconfig/mysql/moistureSensorsSet.config | 2 +- localconfig/mysql/roomCameraRel.config | 6 ++++-- localconfig/mysql/roomMainBulbRel.config | 6 ++++-- localconfig/mysql/roomSensorRelation.config | 4 ++-- localconfig/mysql/roomSet.config | 2 +- localconfig/mysql/roomSpeakerRel.config | 4 ++-- localconfig/mysql/rooms.config | 2 +- localconfig/mysql/smartSensorsSet.config | 2 +- localconfig/mysql/speakerSet.config | 2 +- others/Mysql/IoTMain.gz | Bin 5206 -> 5220 bytes 23 files changed, 41 insertions(+), 30 deletions(-) diff --git a/iotjava/iotinstaller/TableRelation.java b/iotjava/iotinstaller/TableRelation.java index 3b8f9ac..f6babbb 100644 --- a/iotjava/iotinstaller/TableRelation.java +++ b/iotjava/iotinstaller/TableRelation.java @@ -207,7 +207,12 @@ public class TableRelation extends TableSet { // Scan WHERE for either IoTSet or IoTRelation if (strScan.equals("WHERE")) { // The next token is definitely the WHERE statement - strScan = scanFile.next(); + strScan = ""; + String strWhere = scanFile.next(); + while (!strWhere.equals(";")) { + strScan = strScan + " " + strWhere; + strWhere = scanFile.next(); + } this.setWhereCondition(strScan); } } diff --git a/localconfig/mysql/alarmSet.config b/localconfig/mysql/alarmSet.config index a321ced..40e745a 100644 --- a/localconfig/mysql/alarmSet.config +++ b/localconfig/mysql/alarmSet.config @@ -1,3 +1,3 @@ SELECT * FROM -Alarm +AlarmSmart ; diff --git a/localconfig/mysql/audioRooms.config b/localconfig/mysql/audioRooms.config index 61a95ee..de84beb 100644 --- a/localconfig/mysql/audioRooms.config +++ b/localconfig/mysql/audioRooms.config @@ -1,5 +1,5 @@ SELECT * FROM -Room +RoomSmart WHERE TYPE='AudioRoom' ; diff --git a/localconfig/mysql/camSet.config b/localconfig/mysql/camSet.config index 939eb25..5798c17 100644 --- a/localconfig/mysql/camSet.config +++ b/localconfig/mysql/camSet.config @@ -1,3 +1,5 @@ SELECT * FROM -Camera +CameraSmart +WHERE +ID='CM1' ; diff --git a/localconfig/mysql/cameraSet.config b/localconfig/mysql/cameraSet.config index 7e16ba1..a061abc 100644 --- a/localconfig/mysql/cameraSet.config +++ b/localconfig/mysql/cameraSet.config @@ -1,5 +1,5 @@ SELECT * FROM -Camera +CameraSmart WHERE ID='CM1' ; diff --git a/localconfig/mysql/cameras.config b/localconfig/mysql/cameras.config index 939eb25..083ca82 100644 --- a/localconfig/mysql/cameras.config +++ b/localconfig/mysql/cameras.config @@ -1,3 +1,3 @@ SELECT * FROM -Camera +CameraSmart ; diff --git a/localconfig/mysql/gpsSet.config b/localconfig/mysql/gpsSet.config index cde5488..1059359 100644 --- a/localconfig/mysql/gpsSet.config +++ b/localconfig/mysql/gpsSet.config @@ -1,3 +1,3 @@ SELECT * FROM -GPSGateway +GPSGatewaySmart ; diff --git a/localconfig/mysql/gwSet.config b/localconfig/mysql/gwSet.config index a506d4c..0dcca8c 100644 --- a/localconfig/mysql/gwSet.config +++ b/localconfig/mysql/gwSet.config @@ -1,3 +1,3 @@ SELECT * FROM -WeatherGateway +WeatherGatewaySmart ; diff --git a/localconfig/mysql/lawnCameraRelation.config b/localconfig/mysql/lawnCameraRelation.config index 137a132..a7c9f33 100644 --- a/localconfig/mysql/lawnCameraRelation.config +++ b/localconfig/mysql/lawnCameraRelation.config @@ -1,6 +1,6 @@ SELECT RELATION FROM FIRST -Lawn +LawnSmart OTHER -Camera +CameraSmart ; diff --git a/localconfig/mysql/lawnMoistureSensorRelation.config b/localconfig/mysql/lawnMoistureSensorRelation.config index 5a72f79..d441f4f 100644 --- a/localconfig/mysql/lawnMoistureSensorRelation.config +++ b/localconfig/mysql/lawnMoistureSensorRelation.config @@ -1,6 +1,6 @@ SELECT RELATION FROM FIRST -Lawn +LawnSmart OTHER -MoistureSensor +MoistureSensorSmart ; diff --git a/localconfig/mysql/lawnSet.config b/localconfig/mysql/lawnSet.config index c507f89..58fb02e 100644 --- a/localconfig/mysql/lawnSet.config +++ b/localconfig/mysql/lawnSet.config @@ -1,3 +1,3 @@ SELECT * FROM -Lawn +LawnSmart ; diff --git a/localconfig/mysql/lawnSprinklerRelation.config b/localconfig/mysql/lawnSprinklerRelation.config index 9be34c7..5da7318 100644 --- a/localconfig/mysql/lawnSprinklerRelation.config +++ b/localconfig/mysql/lawnSprinklerRelation.config @@ -1,8 +1,8 @@ SELECT RELATION FROM FIRST -Lawn +LawnSmart OTHER -Sprinkler +SprinklerSmart WHERE -ID_DESTINATION='SP2' +ID_DESTINATION='SP1' ; diff --git a/localconfig/mysql/mainRoomLightBulbs.config b/localconfig/mysql/mainRoomLightBulbs.config index 11171b0..19bf452 100644 --- a/localconfig/mysql/mainRoomLightBulbs.config +++ b/localconfig/mysql/mainRoomLightBulbs.config @@ -1,3 +1,3 @@ SELECT * FROM -LightBulb +LightBulbSmart ; diff --git a/localconfig/mysql/moistureSensorsSet.config b/localconfig/mysql/moistureSensorsSet.config index ef7d5a7..2ca21e2 100644 --- a/localconfig/mysql/moistureSensorsSet.config +++ b/localconfig/mysql/moistureSensorsSet.config @@ -1,3 +1,3 @@ SELECT * FROM -MoistureSensor +MoistureSensorSmart ; diff --git a/localconfig/mysql/roomCameraRel.config b/localconfig/mysql/roomCameraRel.config index 3297815..231f2cd 100644 --- a/localconfig/mysql/roomCameraRel.config +++ b/localconfig/mysql/roomCameraRel.config @@ -1,6 +1,8 @@ SELECT RELATION FROM FIRST -Room +RoomSmart OTHER -Camera +CameraSmart +WHERE +TYPE_SOURCE LIKE 'LabRoom%' ; diff --git a/localconfig/mysql/roomMainBulbRel.config b/localconfig/mysql/roomMainBulbRel.config index 5f82a4b..1b94d14 100644 --- a/localconfig/mysql/roomMainBulbRel.config +++ b/localconfig/mysql/roomMainBulbRel.config @@ -1,6 +1,8 @@ SELECT RELATION FROM FIRST -Room +RoomSmart OTHER -LightBulb +LightBulbSmart +WHERE +TYPE_SOURCE LIKE 'LabRoom%' ; diff --git a/localconfig/mysql/roomSensorRelation.config b/localconfig/mysql/roomSensorRelation.config index 52a7dce..4ca1794 100644 --- a/localconfig/mysql/roomSensorRelation.config +++ b/localconfig/mysql/roomSensorRelation.config @@ -1,6 +1,6 @@ SELECT RELATION FROM FIRST -Room +RoomSmart OTHER -SmartthingsSensor +SmartthingsSensorSmart ; diff --git a/localconfig/mysql/roomSet.config b/localconfig/mysql/roomSet.config index 6f5dc60..873a333 100644 --- a/localconfig/mysql/roomSet.config +++ b/localconfig/mysql/roomSet.config @@ -1,5 +1,5 @@ SELECT * FROM -Room +RoomSmart WHERE TYPE='HomeRoom' ; diff --git a/localconfig/mysql/roomSpeakerRel.config b/localconfig/mysql/roomSpeakerRel.config index 3f88688..5f40cbd 100644 --- a/localconfig/mysql/roomSpeakerRel.config +++ b/localconfig/mysql/roomSpeakerRel.config @@ -1,6 +1,6 @@ SELECT RELATION FROM FIRST -Room +RoomSmart OTHER -Speaker +SpeakerSmart ; diff --git a/localconfig/mysql/rooms.config b/localconfig/mysql/rooms.config index a085212..0749e75 100644 --- a/localconfig/mysql/rooms.config +++ b/localconfig/mysql/rooms.config @@ -1,5 +1,5 @@ SELECT * FROM -Room +RoomSmart WHERE TYPE='LabRoom' ; diff --git a/localconfig/mysql/smartSensorsSet.config b/localconfig/mysql/smartSensorsSet.config index be13609..68774b6 100644 --- a/localconfig/mysql/smartSensorsSet.config +++ b/localconfig/mysql/smartSensorsSet.config @@ -1,3 +1,3 @@ SELECT * FROM -SmartthingsSensor +SmartthingsSensorSmart ; diff --git a/localconfig/mysql/speakerSet.config b/localconfig/mysql/speakerSet.config index 7ebde92..2a8eacf 100644 --- a/localconfig/mysql/speakerSet.config +++ b/localconfig/mysql/speakerSet.config @@ -1,3 +1,3 @@ SELECT * FROM -Speaker +SpeakerSmart ; diff --git a/others/Mysql/IoTMain.gz b/others/Mysql/IoTMain.gz index 0c9918cbd035331e598ac8cf61d242efc79c8881..1842ea2bc9b8029af4f6ccb908a16e909c6a3e0c 100644 GIT binary patch literal 5220 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 literal 5206 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