rhodes 2.2.6 → 2.3.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +20 -0
- data/README.md +46 -0
- data/Rakefile +85 -80
- data/bin/rhodes +2 -2
- data/bin/rhogen +1 -1
- data/doc/application.txt +277 -0
- data/doc/bb-css.txt +209 -0
- data/doc/build.txt +785 -0
- data/doc/configuration.txt +236 -0
- data/doc/connect-to-web-services.txt +282 -0
- data/doc/contributing.txt +64 -0
- data/doc/css-framework.txt +144 -0
- data/doc/device-caps.txt +1152 -0
- data/doc/extensions.txt +528 -0
- data/doc/files.txt +4 -0
- data/doc/generator.txt +141 -0
- data/doc/install.txt +35 -0
- data/doc/introduction.txt +88 -0
- data/doc/rhom.txt +826 -0
- data/doc/standard-css.txt +392 -0
- data/doc/synchronization.txt +542 -0
- data/doc/test-log-debug.txt +148 -0
- data/doc/tutorial.txt +136 -0
- data/doc/ui.txt +766 -0
- data/installer/EnvVarUpdate.nsh +328 -0
- data/installer/README.html +81 -0
- data/installer/RHOSYNC-LICENSE.txt +675 -0
- data/installer/icon.ico +0 -0
- data/installer/instant-rhodes.nsi +427 -0
- data/lib/build/jake.rb +15 -1
- data/lib/extensions/barcode/ext/barcode/platform/android/jni/src/imageprovider.cpp +1 -1
- data/lib/extensions/barcode/ext/barcode/platform/bb/Barcode6.files +45 -0
- data/lib/extensions/barcode/ext/barcode/platform/bb/Rakefile +6 -0
- data/lib/extensions/barcode/ext/barcode/platform/bb/barcode6.jdp +92 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/Barcode.xcodeproj/project.pbxproj +7 -4
- data/lib/extensions/barcode/ext/barcode/platform/iphone/Rakefile +2 -1
- data/lib/extensions/barcode/ext/barcode/platform/wm/src/wm_imageprovider.cpp +1 -1
- data/lib/extensions/digest-sha1/ext/build.bat +1 -0
- data/lib/extensions/digest-sha1/ext/digest-sha1.vcproj +335 -0
- data/lib/extensions/esri/ext/build +17 -0
- data/lib/extensions/esri/ext/build.bat +29 -0
- data/lib/extensions/esri/ext/esri/platform/iphone/Classes/ESRIViewFactory.h +7 -0
- data/lib/extensions/esri/ext/esri/platform/iphone/Classes/ESRIViewFactory.mm +58 -0
- data/lib/extensions/esri/ext/esri/platform/iphone/Classes/ESRIViewFactoryRegister.mm +22 -0
- data/lib/extensions/esri/ext/esri/platform/iphone/Classes/ESRIViewManager.h +21 -0
- data/lib/extensions/esri/ext/esri/platform/iphone/Classes/ESRIViewManager.mm +32 -0
- data/lib/extensions/esri/ext/esri/platform/iphone/Classes/InitESRI.c +5 -0
- data/lib/extensions/esri/ext/esri/platform/iphone/Classes/MapViewControllerESRI.h +143 -0
- data/lib/extensions/esri/ext/esri/platform/iphone/Classes/MapViewControllerESRI.m +919 -0
- data/lib/extensions/esri/ext/esri/platform/iphone/ESRI.xcodeproj/project.pbxproj +320 -0
- data/lib/extensions/esri/ext/esri/platform/iphone/ESRI_Prefix.pch +7 -0
- data/lib/extensions/esri/ext/esri/platform/iphone/Rakefile +76 -0
- data/lib/extensions/esri/ext.yml +3 -0
- data/lib/extensions/net-http/monitor.rb +265 -0
- data/lib/extensions/net-http/net/ftp.rb +981 -0
- data/lib/extensions/net-http/thread.rb +367 -0
- data/lib/extensions/rhocgi/cgi.rb +16 -0
- data/lib/extensions/rhospec/rhospec.rb +118 -0
- data/lib/framework/base64.rb +91 -0
- data/lib/framework/builtinME.rb +13 -10
- data/lib/framework/ostruct.rb +145 -0
- data/lib/framework/res/back_btn.wm.png +0 -0
- data/lib/framework/res/blue_pushpin.wm.png +0 -0
- data/lib/framework/res/blue_pushpin_small.wm.png +0 -0
- data/lib/framework/res/callout.wm.png +0 -0
- data/lib/framework/res/callout_link.wm.png +0 -0
- data/lib/framework/res/forward_btn.wm.png +0 -0
- data/lib/framework/res/home_btn.wm.png +0 -0
- data/lib/framework/res/options_btn.wm.png +0 -0
- data/lib/framework/res/refresh_btn.wm.png +0 -0
- data/lib/framework/rho/render.rb +5 -2
- data/lib/framework/rho/rho.rb +320 -50
- data/lib/framework/rho/rhoapplication.rb +48 -10
- data/lib/framework/rho/rhonativeviewmanager.rb +73 -0
- data/lib/framework/rho/rhosupport.rb +15 -1
- data/lib/framework/rho/rhotabbar.rb +29 -0
- data/lib/framework/rho/rhotoolbar.rb +17 -0
- data/lib/framework/rho/rhoutils.rb +22 -6
- data/lib/framework/rhodes.rb +1 -1
- data/lib/framework/rholang/rhomsg_de.rb +4 -3
- data/lib/framework/rholang/rhomsg_en.rb +1 -0
- data/lib/framework/rholang/rhomsg_es.rb +1 -0
- data/lib/framework/rholang/rhomsg_it.rb +1 -0
- data/lib/framework/rhom/rhom.rb +31 -10
- data/lib/framework/rhom/rhom_db_adapter.rb +33 -23
- data/lib/framework/rhom/rhom_object_factory.rb +465 -249
- data/lib/framework/rhom/rhom_source.rb +22 -7
- data/lib/framework/version.rb +1 -1
- data/lib/rhodes.rb +1 -1
- data/platform/android/Rhodes/AndroidManifest.xml +83 -20
- data/platform/android/Rhodes/gen/com/rhomobile/rhodes/R.java +5 -0
- data/platform/android/Rhodes/jni/include/rhodes/RhoClassFactory.h +2 -0
- data/platform/android/Rhodes/jni/include/rhodes/details/rhojava.inc +9 -5
- data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesAppOptions.h +53 -0
- data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesService.h +46 -56
- data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_SplashScreen.h +10 -0
- data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_mapview_MapView.h +93 -0
- data/platform/android/Rhodes/jni/include/rhodes/rhocryptimpl.h +38 -0
- data/platform/android/Rhodes/jni/include/rhodes.h +64 -8
- data/platform/android/Rhodes/jni/src/RhoClassFactory.cpp +6 -0
- data/platform/android/Rhodes/jni/src/alert.cpp +5 -11
- data/platform/android/Rhodes/jni/src/bluetooth.cpp +66 -29
- data/platform/android/Rhodes/jni/src/callbacks.cpp +24 -21
- data/platform/android/Rhodes/jni/src/camera.cpp +2 -6
- data/platform/android/Rhodes/jni/src/datetimepicker.cpp +13 -11
- data/platform/android/Rhodes/jni/src/event.cpp +9 -15
- data/platform/android/Rhodes/jni/src/fileapi.cpp +13 -27
- data/platform/android/Rhodes/jni/src/logconf.cpp +3 -3
- data/platform/android/Rhodes/jni/src/mapview.cpp +696 -16
- data/platform/android/Rhodes/jni/src/menu.cpp +3 -3
- data/platform/android/Rhodes/jni/src/nativebar.cpp +55 -4
- data/platform/android/Rhodes/jni/src/nativeview.cpp +33 -0
- data/platform/android/Rhodes/jni/src/phonebook.cpp +6 -11
- data/platform/android/Rhodes/jni/src/rhoconf.cpp +4 -4
- data/platform/android/Rhodes/jni/src/rhocryptimpl.cpp +87 -0
- data/platform/android/Rhodes/jni/src/rhodes.cpp +55 -34
- data/platform/android/Rhodes/jni/src/ringtones.cpp +2 -3
- data/platform/android/Rhodes/jni/src/signature.cpp +3 -5
- data/platform/android/Rhodes/jni/src/splashscreen.cpp +7 -0
- data/platform/android/Rhodes/jni/src/sslimpl.cpp +17 -20
- data/platform/android/Rhodes/jni/src/webview.cpp +13 -12
- data/platform/android/Rhodes/res/drawable/callout.png +0 -0
- data/platform/android/Rhodes/res/drawable/callout_link.png +0 -0
- data/platform/android/Rhodes/res/drawable/signature_cancel.png +0 -0
- data/platform/android/Rhodes/res/drawable/signature_clear.png +0 -0
- data/platform/android/Rhodes/res/drawable/signature_ok.png +0 -0
- data/platform/android/Rhodes/res/layout/datetime.xml +4 -0
- data/platform/android/Rhodes/res/layout/signature.xml +24 -17
- data/platform/android/Rhodes/res/layout/status_bar_ongoing_event_progress_bar.xml +102 -0
- data/platform/android/Rhodes/res/values/strings.xml +1 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/AndroidR.java +6 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/Base64.java +575 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/BaseActivity.java +83 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/NativeBar.java +21 -3
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushReceiver.java +23 -15
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushService.java +2 -2
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhoCryptImpl.java +151 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhoMenu.java +2 -2
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesActivity.java +372 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesAppOptions.java +11 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesApplication.java +58 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +705 -523
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RingtoneManager.java +1 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/SplashScreen.java +167 -85
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/Utils.java +36 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/WebView.java +4 -2
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java +33 -20
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/IRhoBluetoothManager.java +2 -6
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManager.java +2 -24
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManagerNew.java +106 -36
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManagerOld.java +15 -58
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothSession.java +0 -7
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/Camera.java +6 -4
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/FileList.java +4 -3
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCapture.java +91 -27
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/datetime/DateTimePicker.java +6 -3
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/datetime/DateTimePickerScreen.java +275 -42
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/EventStore.java +1 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/file/RhoFileApi.java +1 -3
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocationImpl.java +1 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/MainView.java +1 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +120 -43
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/TabbedMainView.java +518 -28
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/AnnotationsOverlay.java +2 -2
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/GoogleMapView.java +434 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/MapTouch.java +20 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/MapView.java +296 -336
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/MultiTouchHandler.java +111 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/OneTouchHandler.java +77 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/TouchHandler.java +10 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/nativeview/RhoNativeViewManager.java +0 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Contact.java +5 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorNew.java +1 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorOld.java +1 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/signature/ImageCapture.java +6 -11
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/signature/Signature.java +6 -4
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/signature/SignatureView.java +0 -7
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/ui/LogViewDialog.java +9 -4
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/util/PerformOnUiThread.java +8 -8
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/ChromeClientNew.java +5 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/ChromeClientOld.java +11 -7
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/RhoWebSettingsNew.java +3 -5
- data/platform/android/build/RhodesSRC_build.files +32 -23
- data/platform/android/build/android.rake +28 -11
- data/platform/android/build/androidcommon.rb +2 -0
- data/platform/android/build/librhocommon_build.files +9 -5
- data/platform/android/build/librhodes_build.files +1 -0
- data/platform/android/build/libruby_build.files +1 -0
- data/platform/bb/Hsqldb/Hsqldb.jdp +0 -2
- data/platform/bb/Hsqldb/src/com/rho/db/HsqlDBResult.java +10 -2
- data/platform/bb/Hsqldb/src/com/rho/db/HsqlDBStorage.java +37 -5
- data/platform/bb/Hsqldb/src/org/hsqldb/Column.java +5 -5
- data/platform/bb/Hsqldb/src/org/hsqldb/Expression.java +1 -1
- data/platform/bb/Hsqldb/src/org/hsqldb/Function.java +73 -78
- data/platform/bb/Hsqldb/src/org/hsqldb/Library.java +288 -8
- data/platform/bb/RubyVM/RubyVM.jdp +3 -0
- data/platform/bb/RubyVM/src/com/rho/FilePath.java +13 -1
- data/platform/bb/RubyVM/src/com/rho/IRhoRubyHelper.java +2 -2
- data/platform/bb/RubyVM/src/com/rho/RhoAppAdapter.java +12 -0
- data/platform/bb/RubyVM/src/com/rho/RhoClassFactory.java +18 -1
- data/platform/bb/RubyVM/src/com/rho/RhoConf.java +128 -108
- data/platform/bb/RubyVM/src/com/rho/RhoLogConf.java +9 -10
- data/platform/bb/RubyVM/src/com/rho/RhoLogger.java +16 -1
- data/platform/bb/RubyVM/src/com/rho/RhoProfiler.java +1 -1
- data/platform/bb/RubyVM/src/com/rho/RhoRuby.java +20 -0
- data/platform/bb/RubyVM/src/com/rho/RhodesApp.java +5 -2
- data/platform/bb/RubyVM/src/com/rho/ThreadQueue.java +65 -46
- data/platform/bb/RubyVM/src/com/rho/db/DBAdapter.java +192 -50
- data/platform/bb/RubyVM/src/com/rho/db/DBAttrManager.java +8 -114
- data/platform/bb/RubyVM/src/com/rho/db/DBException.java +1 -1
- data/platform/bb/RubyVM/src/com/rho/db/IDBCallback.java +1 -1
- data/platform/bb/RubyVM/src/com/rho/db/IDBResult.java +5 -3
- data/platform/bb/RubyVM/src/com/rho/db/IDBStorage.java +5 -1
- data/platform/bb/RubyVM/src/com/rho/file/FileAccessBB.java +109 -0
- data/platform/bb/RubyVM/src/com/rho/file/RhoFile.java +85 -0
- data/platform/bb/RubyVM/src/com/rho/net/NetRequest.java +12 -4
- data/platform/bb/RubyVM/src/com/rho/net/NetResponse.java +5 -0
- data/platform/bb/RubyVM/src/com/rho/net/RhoConnection.java +37 -23
- data/platform/bb/RubyVM/src/com/rho/net/URI.java +84 -0
- data/platform/bb/RubyVM/src/com/rho/sync/ClientRegister.java +1 -1
- data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +119 -61
- data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +61 -24
- data/platform/bb/RubyVM/src/com/rho/sync/SyncSource.java +108 -54
- data/platform/bb/RubyVM/src/com/rho/sync/SyncThread.java +121 -163
- data/platform/bb/RubyVM/src/com/xruby/GeneratedMethods/RubyString_Methods.java +23 -0
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyMutex.java +1 -1
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyRange.java +3 -1
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyRegexp.java +3 -1
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyString.java +208 -25
- data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyTime.java +3 -1
- data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RhoSupport.java +5 -1
- data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RubyAPI.java +12 -5
- data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RubyID.java +1 -0
- data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RubyKernelModule.java +16 -0
- data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RubyKernelModule_Methods.java +5 -0
- data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RubyValue.java +1 -1
- data/platform/bb/RubyVM/src/com/xruby/runtime/stdlib/RubyStringIO.java +4 -1
- data/platform/bb/{Hsqldb → RubyVM}/src/j2me/math/Number.java +33 -0
- data/platform/bb/build/RubyVM_build.files +3 -0
- data/platform/bb/build/bb.rake +140 -62
- data/platform/bb/build/hsqldb_build.files +0 -2
- data/platform/bb/build/rhodes_build.files +5 -0
- data/platform/bb/rhodes/platform/4.7/com/rho/RhoMainScreen.java +43 -7
- data/platform/bb/rhodes/platform/5.0/com/rho/BrowserAdapter5.java +23 -2
- data/platform/bb/rhodes/platform/5.0/com/rho/RhodesApplicationPlatform.java +5 -0
- data/platform/bb/rhodes/platform/5.0/com/rho/db/SqliteCopyResult.java +143 -0
- data/platform/bb/rhodes/platform/5.0/com/rho/db/SqliteResult.java +269 -0
- data/platform/bb/rhodes/platform/5.0/com/rho/db/SqliteStorage.java +446 -0
- data/platform/bb/rhodes/platform/common/com/rho/BrowserAdapter5.java +3 -0
- data/platform/bb/rhodes/platform/common/com/rho/RhoMainScreen.java +12 -2
- data/platform/bb/rhodes/platform/common/com/rho/db/SqliteCopyResult.java +2 -0
- data/platform/bb/rhodes/platform/common/com/rho/db/SqliteResult.java +2 -0
- data/platform/bb/rhodes/platform/common/com/rho/db/SqliteStorage.java +2 -0
- data/platform/bb/rhodes/resources/mappin.png +0 -0
- data/platform/bb/rhodes/rhodes.jdp +3 -0
- data/platform/bb/rhodes/src/com/rho/BrowserAdapter.java +21 -18
- data/platform/bb/rhodes/src/com/rho/BrowserAdapter5.java +150 -0
- data/platform/bb/rhodes/src/com/rho/IBrowserAdapter.java +1 -0
- data/platform/bb/rhodes/src/com/rho/RhoMainScreen.java +63 -4
- data/platform/bb/rhodes/src/com/rho/RhoRubyHelper.java +6 -5
- data/platform/bb/rhodes/src/com/rho/RhodesApplicationPlatform.java +242 -2
- data/platform/bb/rhodes/src/com/rho/db/SqliteCopyResult.java +143 -0
- data/platform/bb/rhodes/src/com/rho/db/SqliteResult.java +269 -0
- data/platform/bb/rhodes/src/com/rho/db/SqliteStorage.java +446 -0
- data/platform/bb/rhodes/src/com/rho/file/Jsr75File.java +1 -1
- data/platform/bb/rhodes/src/com/rho/net/NetworkAccess.java +71 -14
- data/platform/bb/rhodes/src/com/rho/net/bb/BBHttpConnection.java +4 -2
- data/platform/bb/rhodes/src/com/rho/rubyext/Alert.java +28 -12
- data/platform/bb/rhodes/src/com/rho/rubyext/System.java +100 -4
- data/platform/bb/rhodes/src/com/rho/rubyext/WebView.java +3 -2
- data/platform/bb/rhodes/src/com/rho/rubyext/XMLParser.java +1 -1
- data/platform/bb/rhodes/src/rhomobile/NativeBar.java +32 -0
- data/platform/bb/rhodes/src/rhomobile/PushListeningThread.java +9 -2
- data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +174 -41
- data/platform/bb/rhodes/src/rhomobile/datetime/DateTimePicker.java +52 -3
- data/platform/bb/rhodes/src/rhomobile/datetime/DateTimeScreen.java +33 -1
- data/platform/bb/rhodes/src/rhomobile/mapview/Annotation.java +2 -14
- data/platform/bb/rhodes/src/rhomobile/mapview/ESRIMapField.java +686 -0
- data/platform/bb/rhodes/src/rhomobile/mapview/ESRIMapProvider.java +14 -0
- data/platform/bb/rhodes/src/rhomobile/mapview/GeoCoding.java +13 -0
- data/platform/bb/rhodes/src/rhomobile/mapview/GoogleGeoCoding.java +174 -0
- data/platform/bb/rhodes/src/rhomobile/mapview/GoogleMapField.java +104 -330
- data/platform/bb/rhodes/src/rhomobile/mapview/MapTools.java +79 -0
- data/platform/bb/rhodes/src/rhomobile/mapview/MapView.java +35 -12
- data/platform/bb/rhodes/src/rhomobile/mapview/MapViewParent.java +2 -1
- data/platform/bb/rhodes/src/rhomobile/mapview/MapViewScreen.java +336 -44
- data/platform/bb/rhodes/src/rhomobile/mapview/RhoMapField.java +3 -6
- data/platform/iphone/Classes/AppManager/AppManager.m +19 -4
- data/platform/iphone/Classes/DateTime.h +4 -0
- data/platform/iphone/Classes/DateTime.m +1 -1
- data/platform/iphone/Classes/DateTimePicker.m +8 -1
- data/platform/iphone/Classes/DateTimePickerDelegate.m +7 -1
- data/platform/iphone/Classes/Event/Event.m +2 -2
- data/platform/iphone/Classes/MapView/MapViewController.h +4 -1
- data/platform/iphone/Classes/MapView/MapViewController.m +6 -46
- data/platform/iphone/Classes/MapView/MapViewManager.h +26 -0
- data/platform/iphone/Classes/MapView/MapViewManager.m +172 -0
- data/platform/iphone/Classes/NativeBar.h +34 -0
- data/platform/iphone/Classes/NativeBar.m +131 -26
- data/platform/iphone/Classes/NativeView/NVDelegate.h +26 -0
- data/platform/iphone/Classes/NativeView/NVDelegate.m +40 -0
- data/platform/iphone/Classes/NativeView/NVViewController.h +24 -0
- data/platform/iphone/Classes/NativeView/NVViewController.m +90 -0
- data/platform/iphone/Classes/NativeView/RhoNativeViewManager.mm +449 -0
- data/platform/iphone/Classes/{RhoNativeViewManagerOC.h → NativeView/RhoNativeViewManagerOC.h} +15 -0
- data/platform/iphone/Classes/RhoAlert.m +3 -3
- data/platform/iphone/Classes/RhoMainView.h +3 -0
- data/platform/iphone/Classes/Rhodes.h +6 -2
- data/platform/iphone/Classes/Rhodes.m +47 -79
- data/platform/iphone/Classes/Signature/SignatureViewController.m +1 -0
- data/platform/iphone/Classes/SimpleMainView.h +18 -1
- data/platform/iphone/Classes/SimpleMainView.m +180 -35
- data/platform/iphone/Classes/SplitView/LeftViewController.h +1 -1
- data/platform/iphone/Classes/SplitView/LeftViewController.m +13 -7
- data/platform/iphone/Classes/SplitView/RightViewController.h +1 -1
- data/platform/iphone/Classes/SplitView/RightViewController.m +26 -11
- data/platform/iphone/Classes/SplitView/SplittedMainView.h +1 -6
- data/platform/iphone/Classes/SplitView/SplittedMainView.m +14 -52
- data/platform/iphone/Classes/TabbedMainView.h +25 -3
- data/platform/iphone/Classes/TabbedMainView.m +340 -14
- data/platform/iphone/ESRI/BluePushpin.png +0 -0
- data/platform/iphone/ESRI/BluePushpin@2x.png +0 -0
- data/platform/iphone/ESRI/esri.png +0 -0
- data/platform/iphone/ESRI/esri@2x.png +0 -0
- data/platform/iphone/Info.plist +1 -1
- data/platform/iphone/RhoLib/RhoLib.xcodeproj/project.pbxproj +26 -3
- data/platform/iphone/rbuild/iphone.rake +100 -4
- data/platform/iphone/rhorubylib/rhorubylib.xcodeproj/project.pbxproj +12 -0
- data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +116 -12
- data/platform/shared/SyncClient/SyncClient.cpp +29 -3
- data/platform/shared/SyncClient/SyncClient.h +2 -1
- data/platform/shared/common/IRhoClassFactory.h +3 -0
- data/platform/shared/common/IRhoCrypt.h +16 -0
- data/platform/shared/common/IRhoThreadImpl.h +1 -0
- data/platform/shared/common/RhoAppAdapter.h +2 -0
- data/platform/shared/common/RhoConf.cpp +97 -46
- data/platform/shared/common/RhoConf.h +14 -13
- data/platform/shared/common/RhoFile.cpp +10 -0
- data/platform/shared/common/RhoFile.h +1 -0
- data/platform/shared/common/RhoMath.cpp +43 -0
- data/platform/shared/common/RhoMath.h +27 -0
- data/platform/shared/common/RhoNativeViewManager.h +27 -1
- data/platform/shared/common/RhoPort.h +11 -0
- data/platform/shared/common/RhoStd.h +5 -0
- data/platform/shared/common/RhoThread.cpp +1 -1
- data/platform/shared/common/RhoThread.h +1 -1
- data/platform/shared/common/RhodesApp.cpp +381 -139
- data/platform/shared/common/RhodesApp.h +24 -10
- data/platform/shared/common/RhodesAppBase.cpp +72 -1
- data/platform/shared/common/RhodesAppBase.h +5 -1
- data/platform/shared/common/SplashScreen.h +4 -4
- data/platform/shared/common/ThreadQueue.cpp +44 -17
- data/platform/shared/common/ThreadQueue.h +4 -0
- data/platform/shared/common/app_build_configs.c +0 -1
- data/platform/shared/common/iphone/RhoClassfactory.h +6 -0
- data/platform/shared/common/iphone/RhoCryptImpl.h +47 -0
- data/platform/shared/common/iphone/RhoCryptImpl.mm +286 -0
- data/platform/shared/common/map/ESRIMapEngine.cpp +921 -0
- data/platform/shared/common/map/ESRIMapEngine.h +255 -0
- data/platform/shared/common/map/GoogleMapEngine.cpp +160 -0
- data/platform/shared/common/map/GoogleMapEngine.h +52 -0
- data/platform/shared/common/map/MapEngine.cpp +304 -0
- data/platform/shared/common/map/MapEngine.h +214 -0
- data/platform/shared/db/DBAdapter.cpp +147 -18
- data/platform/shared/db/DBAdapter.h +38 -12
- data/platform/shared/db/DBAttrManager.cpp +4 -3
- data/platform/shared/db/DBAttrManager.h +7 -7
- data/platform/shared/db/res/db/syncdb.triggers +0 -5
- data/platform/shared/db/res/db/syncdb_java.triggers +21 -0
- data/platform/shared/json/JSONIterator.cpp +11 -1
- data/platform/shared/json/JSONIterator.h +1 -0
- data/platform/shared/logging/RhoLogConf.cpp +29 -12
- data/platform/shared/net/CURLNetRequest.cpp +80 -25
- data/platform/shared/net/CURLNetRequest.h +6 -2
- data/platform/shared/net/HttpServer.cpp +12 -6
- data/platform/shared/net/HttpServer.h +2 -1
- data/platform/shared/net/INetRequest.h +1 -0
- data/platform/shared/ruby/ext/alert/alert.i +5 -0
- data/platform/shared/ruby/ext/alert/alert_wrap.c +439 -108
- data/platform/shared/ruby/ext/datetimepicker/datetimepicker.i +42 -0
- data/platform/shared/ruby/ext/datetimepicker/datetimepicker_wrap.c +521 -120
- data/platform/shared/ruby/ext/nativebar/nativebar.i +16 -0
- data/platform/shared/ruby/ext/nativebar/nativebar_wrap.c +623 -128
- data/platform/shared/ruby/ext/nativeviewmanager/nativeviewmanager.i +18 -0
- data/platform/shared/ruby/ext/nativeviewmanager/nativeviewmanager_wrap.c +2321 -0
- data/platform/shared/ruby/ext/rho/extensions.c +0 -1
- data/platform/shared/ruby/ext/rho/rhoruby.c +53 -0
- data/platform/shared/ruby/ext/rho/rhoruby.h +6 -0
- data/platform/shared/ruby/ext/sqlite3_api/sqlite3_api_wrap.c +6 -3
- data/platform/shared/ruby/ext/syncengine/syncengine.i +9 -1
- data/platform/shared/ruby/ext/syncengine/syncengine_wrap.c +61 -0
- data/platform/shared/ruby/ext/system/system.i +4 -0
- data/platform/shared/ruby/ext/system/system_wrap.c +33 -5
- data/platform/shared/rubyext/RhoAppAdapter.cpp +11 -1
- data/platform/shared/rubyext/System.cpp +9 -0
- data/platform/shared/rubyext/WebView.h +1 -0
- data/platform/shared/sqlite/crypto.c +907 -0
- data/platform/shared/sqlite/sqlite3.c +6 -0
- data/platform/shared/sync/SyncEngine.cpp +49 -19
- data/platform/shared/sync/SyncEngine.h +0 -1
- data/platform/shared/sync/SyncNotify.cpp +14 -5
- data/platform/shared/sync/SyncNotify.h +2 -2
- data/platform/shared/sync/SyncSource.cpp +79 -33
- data/platform/shared/sync/SyncSource.h +1 -0
- data/platform/shared/sync/SyncThread.cpp +26 -11
- data/platform/shared/xruby/src/com/xruby/compiler/codedom/StringExpression.java +4 -2
- data/platform/wm/RhoLib/RhoLib.vcproj +108 -72
- data/platform/wm/build/wm.rake +6 -0
- data/platform/wm/rhodes/Alert.cpp +4 -3
- data/platform/wm/rhodes/Alert.h +1 -1
- data/platform/wm/rhodes/DateTimePicker.cpp +30 -3
- data/platform/wm/rhodes/DateTimePicker.h +9 -1
- data/platform/wm/rhodes/MainWindow.cpp +121 -61
- data/platform/wm/rhodes/MainWindow.h +29 -4
- data/platform/wm/rhodes/MapView/Graphics.cpp +547 -0
- data/platform/wm/rhodes/MapView/Graphics.h +136 -0
- data/platform/wm/rhodes/MapView/MapViewManager.cpp +391 -0
- data/platform/wm/rhodes/MapView/MapViewManager.h +158 -0
- data/platform/wm/rhodes/RhoCryptImpl.cpp +248 -0
- data/platform/wm/rhodes/RhoCryptImpl.h +51 -0
- data/platform/wm/rhodes/RhoNativeViewManager.cpp +208 -0
- data/platform/wm/rhodes/Rhodes.cpp +94 -102
- data/platform/wm/rhodes/Rhodes.rc +27 -0
- data/platform/wm/rhodes/SyncStatusDlg.cpp +1 -0
- data/platform/wm/rhodes/SyncStatusDlg.h +2 -1
- data/platform/wm/rhodes/bluetooth/Bluetooth.cpp +7 -4
- data/platform/wm/rhodes/camera/Camera.cpp +36 -15
- data/platform/wm/rhodes/camera/Camera.h +0 -4
- data/platform/wm/rhodes/resource.h +10 -2
- data/platform/wm/rhodes/rho/common/RhoClassFactory.cpp +7 -0
- data/platform/wm/rhodes/rho/common/RhoClassFactory.h +1 -0
- data/platform/wm/rhodes/rho/net/NetRequestImpl.cpp +10 -2
- data/platform/wm/rhodes/rho/net/NetRequestImpl.h +10 -0
- data/platform/wm/rhodes/rho/rubyext/NativeToolbar.cpp +513 -0
- data/platform/wm/rhodes/rho/rubyext/NativeToolbar.h +74 -0
- data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +22 -10
- data/platform/wm/rhodes/rho/rubyext/WebView.cpp +5 -0
- data/platform/wm/rhodes/rhodes.vcproj +38 -2
- data/platform/wm/rhodes/stdafx.h +2 -1
- data/platform/wm/rubylib/rubylib.vcproj +12 -0
- data/rakefile.rb +85 -80
- data/res/build-tools/iphonesim/Source/iPhoneSimulator.m +14 -3
- data/res/build-tools/iphonesim/build/Release/iphonesim +0 -0
- data/res/build-tools/iphonesim/iphonesim.xcodeproj/project.pbxproj +2 -0
- data/res/build-tools/xruby-0.3.3.jar +0 -0
- data/res/generators/templates/application/app/application.rb +2 -2
- data/res/generators/templates/application/app/helpers/application_helper.rb +1 -1
- data/res/generators/templates/application/public/css/android.css +1 -0
- data/res/generators/templates/application/public/jqtouch/jquery.1.3.2.min.js +1 -1
- data/res/generators/templates/application/rhoconfig.txt +66 -14
- data/rhodes.gemspec +3 -3
- data/spec/framework_spec/app/spec/core/file/expand_path_spec.rb +7 -3
- data/spec/framework_spec/build.yml +1 -1
- data/spec/phone_spec/Rakefile +1 -0
- data/spec/phone_spec/app/Account/account.rb +2 -0
- data/spec/phone_spec/app/Account_s/account_s.rb +7 -0
- data/spec/phone_spec/app/spec/{fixtures → array/fixtures}/classes.rb +0 -0
- data/spec/phone_spec/app/spec/{array_pack_spec.rb → array/pack_spec.rb} +2 -1
- data/spec/phone_spec/app/spec/bulksync_spec.rb +1 -0
- data/spec/phone_spec/app/spec/contacts_spec.rb +2 -0
- data/spec/phone_spec/app/spec/rho_spec.rb +34 -233
- data/spec/phone_spec/app/spec/rhom_object_spec.rb +396 -87
- data/spec/phone_spec/app/spec/string/element_set_spec.rb +251 -0
- data/spec/phone_spec/app/spec/string/end_with_spec.rb +49 -0
- data/spec/phone_spec/app/spec/string/fixtures/classes.rb +27 -0
- data/spec/phone_spec/app/spec/{lstrip_spec.rb → string/lstrip_spec.rb} +0 -0
- data/spec/phone_spec/app/spec/string/replace_spec.rb +52 -0
- data/spec/phone_spec/app/spec/{rstrip_spec.rb → string/rstrip_spec.rb} +0 -0
- data/spec/phone_spec/app/spec/string/slice_spec.rb +473 -0
- data/spec/phone_spec/app/spec/string/split_spec.rb +302 -0
- data/spec/phone_spec/app/spec/string/start_with_spec.rb +48 -0
- data/spec/phone_spec/app/spec/{strip_spec.rb → string/strip_spec.rb} +0 -0
- data/spec/phone_spec/app/spec/syncengine_spec.rb +30 -1
- data/spec/phone_spec/app/spec_runner.rb +15 -7
- data/spec/phone_spec/build.yml +2 -2
- metadata +154 -25
- data/README.textile +0 -45
- data/platform/android/Rhodes/AndroidManifest.full.xml +0 -62
- data/platform/android/Rhodes/gen/com/rhomobile/rhodes/Manifest.java +0 -14
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhoActivity.java +0 -20
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +0 -193
- data/platform/bb/Hsqldb/src/com/rho/file/FileAccessBB.java +0 -25
- data/platform/bb/RubyVM/src/com/rho/AppBuildConfig.java +0 -22
- data/platform/bb/RubyVM/src/com/rho/Capabilities.java +0 -6
- data/platform/bb/RubyVM/src/com/rho/Extensions.java +0 -11
- data/platform/iphone/Classes/RhoNativeViewManager.mm +0 -226
@@ -23,7 +23,17 @@
|
|
23
23
|
#require 'rho/rhosupport'
|
24
24
|
|
25
25
|
module Rhom
|
26
|
-
|
26
|
+
|
27
|
+
def self.any_model_changed?
|
28
|
+
::Rho::RHO.get_db_partitions.each_value do |db|
|
29
|
+
result = db.execute_sql("SELECT object FROM changed_values LIMIT 1 OFFSET 0" )
|
30
|
+
|
31
|
+
return true if result && result.length > 0
|
32
|
+
end
|
33
|
+
|
34
|
+
false
|
35
|
+
end
|
36
|
+
|
27
37
|
class RhomObjectFactory
|
28
38
|
|
29
39
|
def initialize
|
@@ -121,7 +131,7 @@ module Rhom
|
|
121
131
|
res = db.select_from_table('object_values','object', {"source_id"=>get_source_id}, {"distinct"=>true}).length
|
122
132
|
end
|
123
133
|
|
124
|
-
res
|
134
|
+
res.to_i()
|
125
135
|
end
|
126
136
|
|
127
137
|
def backend_refresh_time
|
@@ -157,6 +167,104 @@ module Rhom
|
|
157
167
|
Rho::RhoConfig.sources[get_source_name]['source_id'].to_s
|
158
168
|
end
|
159
169
|
|
170
|
+
def convertOpToStr(val_op, value)
|
171
|
+
res = ""
|
172
|
+
if val_op == 'IN' or val_op == 'in'
|
173
|
+
|
174
|
+
if value.is_a?(String)
|
175
|
+
value = value.split(",")
|
176
|
+
value.each do |item|
|
177
|
+
item.strip!
|
178
|
+
if (item.start_with?("\"") && item.end_with?("\"")) ||
|
179
|
+
(item.start_with?("\'") && item.end_with?("\'"))
|
180
|
+
item.slice!(0)
|
181
|
+
item.chop!
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
if value.is_a?(Array)
|
188
|
+
svalue = ""
|
189
|
+
value.each do |item|
|
190
|
+
svalue += ',' if svalue.length() > 0
|
191
|
+
svalue += "\'#{item}\'"
|
192
|
+
end
|
193
|
+
res += val_op + ' ( ' + svalue + ' )'
|
194
|
+
else
|
195
|
+
raise ArgumentError, 'IN parameters should be String or Array'
|
196
|
+
end
|
197
|
+
else
|
198
|
+
res += val_op + ' ' + ::Rhom::RhomDbAdapter.get_value_for_sql_stmt(value, false)
|
199
|
+
end
|
200
|
+
|
201
|
+
res
|
202
|
+
end
|
203
|
+
|
204
|
+
def convertSqlConditionToStr(cond, op)
|
205
|
+
if cond.is_a?(String)
|
206
|
+
return cond
|
207
|
+
end
|
208
|
+
|
209
|
+
if cond.is_a?(Array) && !op
|
210
|
+
condition_str = cond[0].split(/\?/).each_with_index { |param,i|
|
211
|
+
param << cond[i+1].to_s
|
212
|
+
}.join(' ').to_s
|
213
|
+
|
214
|
+
puts "condition_str : #{condition_str}"
|
215
|
+
return condition_str
|
216
|
+
end
|
217
|
+
|
218
|
+
nil
|
219
|
+
end
|
220
|
+
|
221
|
+
def convertConditionToStatement(cond, op, sql, vals)
|
222
|
+
if cond.is_a?(Array)
|
223
|
+
|
224
|
+
return unless op
|
225
|
+
|
226
|
+
sqlRes = ""
|
227
|
+
valsRes = []
|
228
|
+
cond.each do |item|
|
229
|
+
sqlRes += ' ' + op + ' ' if sqlRes.length() > 0
|
230
|
+
|
231
|
+
sqlCond = ""
|
232
|
+
valsCond = []
|
233
|
+
convertConditionToStatement(item[:conditions], item[:op], sqlCond, valsCond )
|
234
|
+
|
235
|
+
sqlRes << "(" + sqlCond + ")"
|
236
|
+
valsRes.concat(valsCond)
|
237
|
+
end
|
238
|
+
|
239
|
+
sql << sqlRes
|
240
|
+
vals.concat(valsRes)
|
241
|
+
|
242
|
+
return
|
243
|
+
end
|
244
|
+
|
245
|
+
return if !cond.is_a?(Hash)
|
246
|
+
|
247
|
+
bSimpleHash = true
|
248
|
+
op = "AND" unless op
|
249
|
+
cond.each do |key, value|
|
250
|
+
if key.is_a?(Hash)
|
251
|
+
sqlCond, valsCond = makeCondWhereEx(key, value, nil)
|
252
|
+
|
253
|
+
sql << ' ' + op + ' ' if !bSimpleHash
|
254
|
+
sql << sqlCond
|
255
|
+
vals.concat(valsCond)
|
256
|
+
|
257
|
+
bSimpleHash = false
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
if bSimpleHash
|
262
|
+
sqlCond, valsCond = ::Rhom::RhomDbAdapter.make_where_params(cond,'AND')
|
263
|
+
sql << sqlCond
|
264
|
+
vals.concat(valsCond)
|
265
|
+
end
|
266
|
+
end
|
267
|
+
=begin
|
160
268
|
def convertConditionToStr(cond, op, condition_hash)
|
161
269
|
if cond.is_a?(String)
|
162
270
|
return cond
|
@@ -199,15 +307,8 @@ module Rhom
|
|
199
307
|
else
|
200
308
|
condition_str += "\"" + attrib_name + "\""
|
201
309
|
end
|
202
|
-
condition_str += ' '
|
203
|
-
|
204
|
-
if val_op == 'IN' or val_op == 'in'
|
205
|
-
svalue = ::Rhom::RhomDbAdapter.get_value_for_sql_stmt(value)
|
206
|
-
condition_str += val_op + ' ( ' + svalue[1,svalue.length()-2] + ' )'
|
207
|
-
else
|
208
|
-
condition_str += val_op + ' ' + ::Rhom::RhomDbAdapter.get_value_for_sql_stmt(value)
|
209
|
-
end
|
210
310
|
|
311
|
+
condition_str += ' ' + convertOpToStr(val_op, value)
|
211
312
|
end
|
212
313
|
|
213
314
|
end
|
@@ -219,7 +320,7 @@ module Rhom
|
|
219
320
|
|
220
321
|
condition_str
|
221
322
|
end
|
222
|
-
|
323
|
+
=end
|
223
324
|
def makeCondWhere(key,value,srcid_value)
|
224
325
|
sql = ""
|
225
326
|
val_op = '='
|
@@ -237,12 +338,7 @@ module Rhom
|
|
237
338
|
sql << " AND source_id=" + srcid_value
|
238
339
|
sql << " AND " + (val_func.length > 0 ? val_func + "(value)" : "value") + ' '
|
239
340
|
|
240
|
-
|
241
|
-
svalue = ::Rhom::RhomDbAdapter.get_value_for_sql_stmt(value)
|
242
|
-
sql << val_op + ' ( ' + svalue[1,svalue.length()-2] + ' )'
|
243
|
-
else
|
244
|
-
sql << val_op + ' ' + ::Rhom::RhomDbAdapter.get_value_for_sql_stmt(value)
|
245
|
-
end
|
341
|
+
sql << convertOpToStr(val_op, value)
|
246
342
|
|
247
343
|
sql
|
248
344
|
end
|
@@ -263,18 +359,39 @@ module Rhom
|
|
263
359
|
attrib_name = key
|
264
360
|
end
|
265
361
|
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
362
|
+
if srcid_value.nil?
|
363
|
+
sql << (val_func.length > 0 ? val_func + "(#{attrib_name})" : "#{attrib_name}") + ' '
|
364
|
+
else
|
365
|
+
sql << "attrib=?"
|
366
|
+
vals << attrib_name
|
367
|
+
sql << " AND source_id=?"
|
368
|
+
vals << srcid_value
|
369
|
+
sql << " AND " + (val_func.length > 0 ? val_func + "(value)" : "value") + ' '
|
370
|
+
end
|
271
371
|
|
272
372
|
if val_op == 'IN' or val_op == 'in'
|
273
|
-
|
274
|
-
|
373
|
+
|
374
|
+
if value.is_a?(String)
|
375
|
+
value = value.split(",")
|
376
|
+
value.each do |item|
|
377
|
+
item.strip!
|
378
|
+
if item.start_with?("\"") && item.end_with?("\"")
|
379
|
+
item.slice!(0)
|
380
|
+
item.chop!
|
381
|
+
end
|
382
|
+
end
|
383
|
+
|
384
|
+
end
|
385
|
+
|
386
|
+
if value.is_a?(Array)
|
387
|
+
sql << val_op + " ( #{Array.new( value.length(), '?').join(',')} )"
|
388
|
+
vals.concat( value )
|
389
|
+
else
|
390
|
+
raise ArgumentError, 'IN parameters should be String or Array'
|
391
|
+
end
|
275
392
|
else
|
276
393
|
sql << val_op + " ?"
|
277
|
-
vals << value
|
394
|
+
vals << value #.to_s
|
278
395
|
end
|
279
396
|
|
280
397
|
return sql, vals
|
@@ -495,31 +612,31 @@ module Rhom
|
|
495
612
|
sql = ""
|
496
613
|
values = []
|
497
614
|
|
498
|
-
if attribs
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
else
|
615
|
+
#if attribs
|
616
|
+
# nonExistAttrs = attribs.dup
|
617
|
+
# nonExistAttrs.delete(obj['attrib']) if obj['attrib']
|
618
|
+
|
619
|
+
# if nonExistAttrs.length > 0
|
620
|
+
# sql << "SELECT attrib,value FROM object_values WHERE object=? AND source_id=?"
|
621
|
+
# values << obj['object']
|
622
|
+
# values << get_source_id
|
623
|
+
#
|
624
|
+
# quests = ""
|
625
|
+
# nonExistAttrs.each do |attr|
|
626
|
+
# quests << ',' if quests.length() > 0
|
627
|
+
# quests << '?'
|
628
|
+
# values << attr
|
629
|
+
# end
|
630
|
+
#
|
631
|
+
# sql << " AND attrib IN (#{quests})"
|
632
|
+
# end
|
633
|
+
#else
|
517
634
|
sql << "SELECT attrib,value FROM object_values WHERE \n"
|
518
635
|
sql << "object=? AND source_id=?"
|
519
636
|
|
520
637
|
values << obj['object']
|
521
638
|
values << get_source_id
|
522
|
-
end
|
639
|
+
#end
|
523
640
|
|
524
641
|
#puts "get attribs: #{sql}"
|
525
642
|
listAttrs = sql.length > 0 ? db.execute_sql(sql,values) : []
|
@@ -527,15 +644,20 @@ module Rhom
|
|
527
644
|
new_obj = self.new({:object=>"#{obj['object']}"})
|
528
645
|
#new_obj.vars.merge!({:object=>"#{obj['object']}"})
|
529
646
|
|
530
|
-
if attribs && obj['attrib']
|
647
|
+
#if attribs && obj['attrib']
|
531
648
|
#new_obj.vars.merge!( {obj['attrib'].to_sym()=>obj['value'] }) if obj['value']
|
532
|
-
|
533
|
-
end
|
649
|
+
# new_obj.vars[obj['attrib'].to_sym()] = obj['value'] if obj['value']
|
650
|
+
#end
|
534
651
|
|
535
652
|
listAttrs.each do |attrValHash|
|
536
653
|
attrName = attrValHash['attrib']
|
537
654
|
attrVal = attrValHash['value']
|
538
655
|
#new_obj.vars.merge!( { attrName.to_sym()=>attrVal } ) if attrVal
|
656
|
+
|
657
|
+
if attribs && attribs != '*'
|
658
|
+
next unless attribs.include? (attrName)
|
659
|
+
end
|
660
|
+
|
539
661
|
new_obj.vars[attrName.to_sym()] = attrVal if attrVal
|
540
662
|
|
541
663
|
#nonExistAttrs.delete(attrName) if nonExistAttrs
|
@@ -597,7 +719,7 @@ module Rhom
|
|
597
719
|
vx = x.vars[order_attr.to_sym()]
|
598
720
|
vy = y.vars[order_attr.to_sym()]
|
599
721
|
res = vx && vy ? (block_given? ? yield(vx,vy): vx <=> vy) : 0
|
600
|
-
res *= -1 if order_dir && order_dir == 'DESC'
|
722
|
+
res *= -1 if order_dir && order_dir.upcase() == 'DESC'
|
601
723
|
end
|
602
724
|
|
603
725
|
res
|
@@ -605,7 +727,7 @@ module Rhom
|
|
605
727
|
elsif block_given?
|
606
728
|
ret_list.sort! { |x,y|
|
607
729
|
res = yield(x,y)
|
608
|
-
res *= -1 if order_dir && order_dir == 'DESC'
|
730
|
+
res *= -1 if order_dir && order_dir.upcase() == 'DESC'
|
609
731
|
res
|
610
732
|
}
|
611
733
|
end
|
@@ -681,13 +803,13 @@ module Rhom
|
|
681
803
|
|
682
804
|
# do we have conditions?
|
683
805
|
# if so, add them to the query
|
684
|
-
condition_hash = nil
|
806
|
+
#condition_hash = nil
|
685
807
|
select_arr = nil
|
686
808
|
condition_str = nil
|
687
809
|
order_dir=""
|
688
810
|
nSrcID = get_source_id.to_i
|
689
811
|
if args[1]
|
690
|
-
condition_str =
|
812
|
+
condition_str = convertSqlConditionToStr(args[1][:conditions], args[1][:op]) if args[1][:conditions]
|
691
813
|
|
692
814
|
if args[1][:per_page] #and args[1][:offset]
|
693
815
|
limit = args[1][:per_page].to_i
|
@@ -717,11 +839,12 @@ module Rhom
|
|
717
839
|
# | 3560c0a0-ef58-2f40-68a5-48f39f63741b |A.G. Parr PLC 37862 |Entertainment|
|
718
840
|
if select_arr
|
719
841
|
attribs = select_arr
|
720
|
-
attribs = attribs | condition_hash.keys if condition_hash
|
842
|
+
#attribs = attribs | condition_hash.keys if condition_hash
|
721
843
|
else
|
722
844
|
attribs = '*'
|
723
845
|
end
|
724
846
|
|
847
|
+
order_manually = false
|
725
848
|
if attribs and attribs.length > 0
|
726
849
|
sql = ""
|
727
850
|
list = []
|
@@ -729,7 +852,7 @@ module Rhom
|
|
729
852
|
|
730
853
|
if !is_schema_source()
|
731
854
|
objects = nil
|
732
|
-
if !
|
855
|
+
if !condition_str
|
733
856
|
#srcid_value = ::Rhom::RhomDbAdapter.get_value_for_sql_stmt(get_source_id)
|
734
857
|
values = []
|
735
858
|
|
@@ -741,18 +864,28 @@ module Rhom
|
|
741
864
|
if !args[1][:dont_ignore_missed_attribs]
|
742
865
|
sql << "SELECT object FROM object_values WHERE source_id=? "
|
743
866
|
sql << " AND attrib=? ORDER BY \"value\" " + ( order_dir ? order_dir : "")
|
744
|
-
values <<
|
867
|
+
values << nSrcID
|
745
868
|
values << order_attr
|
746
869
|
end
|
747
870
|
else
|
748
871
|
#it is more effective to use old find here
|
749
872
|
if attribs && attribs != '*' && attribs.length() != 0 && !args[1][:dont_ignore_missed_attribs]
|
750
|
-
|
751
|
-
|
752
|
-
|
873
|
+
sql << "SELECT object FROM object_values WHERE attrib=? AND source_id=?"
|
874
|
+
values << nSrcID
|
875
|
+
values << attribs[0]
|
753
876
|
else
|
877
|
+
if limit == 1 && offset == 0
|
878
|
+
sql = "SELECT object FROM object_values WHERE source_id=?"
|
879
|
+
values << nSrcID
|
880
|
+
elsif strLimit
|
881
|
+
sql = "SELECT distinct(object) FROM object_values WHERE source_id=?"
|
882
|
+
values << nSrcID
|
883
|
+
end
|
884
|
+
|
754
885
|
#sql << "SELECT distinct(object) FROM object_values WHERE source_id=" << srcid_value
|
755
886
|
end
|
887
|
+
|
888
|
+
order_manually = !order_attr.nil?
|
756
889
|
end
|
757
890
|
|
758
891
|
if sql.length() > 0
|
@@ -772,23 +905,27 @@ module Rhom
|
|
772
905
|
sql2 = "SELECT attrib,value FROM object_values WHERE object=? AND source_id=?"
|
773
906
|
values2 = []
|
774
907
|
values2 << object_id
|
775
|
-
values2 <<
|
908
|
+
values2 << nSrcID
|
776
909
|
|
777
|
-
if attribs && attribs != '*'
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
|
785
|
-
|
786
|
-
end
|
910
|
+
#if attribs && attribs != '*'
|
911
|
+
# quests = ""
|
912
|
+
# attribs.each do |attr|
|
913
|
+
# quests << ',' if quests.length() > 0
|
914
|
+
# quests << '?'
|
915
|
+
# values2 << attr
|
916
|
+
# end
|
917
|
+
#
|
918
|
+
# sql2 << " AND attrib IN (#{quests})"
|
919
|
+
#end
|
787
920
|
|
788
921
|
item_attribs = db.execute_sql(sql2, values2)
|
789
922
|
if item_attribs && item_attribs.length() > 0
|
790
923
|
new_item = {'object'=>object_id }
|
791
924
|
item_attribs.each do |item|
|
925
|
+
if attribs && attribs != '*'
|
926
|
+
next unless attribs.include? (item['attrib'])
|
927
|
+
end
|
928
|
+
|
792
929
|
new_item[item['attrib']] = item['value']
|
793
930
|
end
|
794
931
|
|
@@ -801,52 +938,79 @@ module Rhom
|
|
801
938
|
end
|
802
939
|
|
803
940
|
if objects.nil?
|
804
|
-
|
805
|
-
if attribs == "*"
|
806
|
-
attribs = SyncEngine.get_src_attrs(Rho::RhoConfig.sources[get_source_name]['partition'].to_s, nSrcID)
|
807
|
-
end
|
808
|
-
|
809
|
-
if attribs and attribs.length > 0
|
810
|
-
sql << "SELECT * FROM (\n" if condition_hash or condition_str
|
811
|
-
sql << "SELECT object, \n"
|
812
|
-
#attribs.reject! {|attrib| select_arr.index(attrib).nil?} if select_arr
|
813
|
-
attribs.each do |attrib|
|
814
|
-
unless attrib.nil? or attrib.length == 0 or ::Rhom::RhomObject.method_name_reserved?(attrib)
|
815
|
-
sql << "MAX(CASE WHEN attrib = '#{attrib}' THEN value ELSE NULL END) AS \'#{attrib}\',\n"
|
816
|
-
end
|
817
|
-
end
|
818
|
-
sql.chomp!
|
819
|
-
sql.chop!
|
820
|
-
sql << " FROM object_values ov \n"
|
821
|
-
sql << "where " + ::Rhom::RhomDbAdapter.where_str(where_cond) + "\n" if where_cond and where_cond.length > 0
|
822
|
-
sql << "group by object\n"
|
823
|
-
sql << "order by " + make_sql_order(args[1]) if !block_given? && order_attr
|
824
|
-
#sql << ") WHERE " + ::Rhom::RhomDbAdapter.where_str(condition_hash) if condition_hash
|
825
|
-
sql << ") WHERE " + condition_str if condition_str
|
826
|
-
sql << strLimit if strLimit
|
827
|
-
|
828
|
-
#puts "Database query start"
|
829
|
-
list = db.execute_sql(sql)
|
830
|
-
#puts "Database query end"
|
831
|
-
end
|
832
|
-
end
|
833
941
|
|
942
|
+
if !condition_str && !(args[1] && args[1][:dont_ignore_missed_attribs])
|
943
|
+
sql = "SELECT object, attrib, value FROM object_values WHERE source_id=? order by object"
|
944
|
+
values = [nSrcID]
|
945
|
+
objects = db.execute_sql(sql, values)
|
946
|
+
|
947
|
+
new_item = nil
|
948
|
+
objects.each do |item|
|
949
|
+
if ( !new_item || new_item['object'] != item['object'])
|
950
|
+
list << new_item if new_item
|
951
|
+
new_item = {'object'=>item['object'] }
|
952
|
+
end
|
953
|
+
|
954
|
+
new_item[item['attrib']] = item['value'] if item['value']
|
955
|
+
end
|
956
|
+
list << new_item if new_item
|
957
|
+
|
958
|
+
order_manually = !order_attr.nil?
|
959
|
+
else
|
960
|
+
|
961
|
+
if attribs == "*"
|
962
|
+
raise ArgumentError, "Use Rhom advanced find syntax or specify :select parameter when use sql queries!"
|
963
|
+
#attribs = SyncEngine.get_src_attrs(Rho::RhoConfig.sources[get_source_name]['partition'].to_s, nSrcID)
|
964
|
+
end
|
965
|
+
|
966
|
+
if attribs and attribs.length > 0
|
967
|
+
sql << "SELECT * FROM (\n" if condition_str
|
968
|
+
sql << "SELECT object, \n"
|
969
|
+
#attribs.reject! {|attrib| select_arr.index(attrib).nil?} if select_arr
|
970
|
+
attribs.each do |attrib|
|
971
|
+
unless attrib.nil? or attrib.length == 0 or ::Rhom::RhomObject.method_name_reserved?(attrib)
|
972
|
+
sql << "MAX(CASE WHEN attrib = '#{attrib}' THEN value ELSE NULL END) AS \'#{attrib}\',\n"
|
973
|
+
end
|
974
|
+
end
|
975
|
+
sql.chomp!
|
976
|
+
sql.chop!
|
977
|
+
sql << " FROM object_values ov \n"
|
978
|
+
sql << "where " + ::Rhom::RhomDbAdapter.where_str(where_cond) + "\n" if where_cond and where_cond.length > 0
|
979
|
+
sql << "group by object\n"
|
980
|
+
sql << "order by " + make_sql_order(args[1]) if !block_given? && order_attr
|
981
|
+
#sql << ") WHERE " + ::Rhom::RhomDbAdapter.where_str(condition_hash) if condition_hash
|
982
|
+
sql << ") WHERE " + condition_str if condition_str
|
983
|
+
sql << strLimit if strLimit
|
984
|
+
|
985
|
+
#puts "Database query start"
|
986
|
+
list = db.execute_sql(sql)
|
987
|
+
#puts "Database query end"
|
988
|
+
end
|
989
|
+
end
|
990
|
+
end
|
834
991
|
else #schema source
|
835
992
|
attribs = attribs.join(',') if attribs.is_a?(Array)
|
836
993
|
|
837
994
|
sql << "SELECT #{attribs} FROM #{get_schema_table_name}"
|
995
|
+
vals = []
|
838
996
|
if where_cond and where_cond.length > 0
|
839
997
|
sql << " WHERE " + ::Rhom::RhomDbAdapter.where_str(where_cond)
|
840
|
-
|
841
|
-
sql << " WHERE " +
|
842
|
-
|
998
|
+
elsif condition_str
|
999
|
+
sql << " WHERE " + condition_str
|
1000
|
+
elsif args[1] && args[1][:conditions]
|
1001
|
+
sqlCond = ""
|
1002
|
+
convertConditionToStatement(args[1][:conditions], args[1][:op], sqlCond, vals)
|
1003
|
+
#condHash = {}
|
1004
|
+
#sqlCond = convertConditionToStr(args[1][:conditions], args[1][:op], condHash)
|
1005
|
+
|
1006
|
+
sql << " WHERE " + sqlCond if sqlCond.length() > 0
|
843
1007
|
end
|
844
1008
|
|
845
1009
|
sql << " order by " + make_sql_order(args[1]) if !block_given? && order_attr
|
846
1010
|
sql << strLimit if strLimit
|
847
1011
|
|
848
1012
|
#puts "Database query start" #: #{sql}"
|
849
|
-
list = db.execute_sql(sql)
|
1013
|
+
list = db.execute_sql(sql, vals)
|
850
1014
|
#puts "Database query end"
|
851
1015
|
|
852
1016
|
end
|
@@ -872,7 +1036,7 @@ module Rhom
|
|
872
1036
|
puts "Processing rhom objects end, no attributes found."
|
873
1037
|
end
|
874
1038
|
|
875
|
-
if block_given?
|
1039
|
+
if block_given? || order_manually
|
876
1040
|
order_array(ret_list, order_attr, order_dir, &block)
|
877
1041
|
ret_list = ret_list.slice(offset,limit) if limit
|
878
1042
|
end
|
@@ -926,40 +1090,94 @@ module Rhom
|
|
926
1090
|
end
|
927
1091
|
|
928
1092
|
# deletes all records matching conditions (optionally nil)
|
929
|
-
def delete_all(
|
930
|
-
|
1093
|
+
def delete_all(*args)
|
931
1094
|
db = ::Rho::RHO.get_src_db(get_source_name)
|
932
1095
|
tableName = is_schema_source() ? get_schema_table_name : 'object_values'
|
1096
|
+
op = 'AND'
|
1097
|
+
op = args[0][:op].upcase if args && args[0] && args[0][:op]
|
1098
|
+
conditions = args[0][:conditions] if args && args[0] && args[0][:conditions]
|
1099
|
+
|
933
1100
|
begin
|
934
1101
|
db.start_transaction
|
935
|
-
|
936
|
-
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
|
941
|
-
|
942
|
-
|
943
|
-
|
944
|
-
|
945
|
-
|
946
|
-
|
947
|
-
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
|
952
|
-
|
953
|
-
|
1102
|
+
|
1103
|
+
if is_schema_source()
|
1104
|
+
|
1105
|
+
vals = []
|
1106
|
+
sqlCond = ""
|
1107
|
+
convertConditionToStatement(conditions, op, sqlCond, vals)
|
1108
|
+
|
1109
|
+
if is_sync_source()
|
1110
|
+
sql = "SELECT object FROM #{tableName}"
|
1111
|
+
#sql << " WHERE " + ::Rhom::RhomDbAdapter.where_str(condition_hash) if condition_hash
|
1112
|
+
#sql << " WHERE " + condition_str if condition_str
|
1113
|
+
sql << " WHERE " + sqlCond if sqlCond.length() > 0
|
1114
|
+
listObjs = db.execute_sql(sql, vals)
|
1115
|
+
|
1116
|
+
listObjs.each do |item|
|
1117
|
+
|
1118
|
+
db.delete_from_table('changed_values', {'object'=>item['object'], "source_id"=>get_source_id(), "sent"=>0})
|
1119
|
+
|
1120
|
+
attrsList = db.select_from_table(tableName, '*', {"object"=>item['object']})
|
1121
|
+
attrsList[0].each do |attrName, attrValue|
|
1122
|
+
next if attrName == 'object'
|
1123
|
+
|
1124
|
+
db.insert_into_table('changed_values',
|
1125
|
+
{"source_id"=>get_source_id(), "object"=>item['object'],
|
1126
|
+
"attrib"=> attrName, "value"=>attrValue,
|
1127
|
+
"update_type"=>'delete'})
|
1128
|
+
end
|
1129
|
+
|
1130
|
+
sql = "DELETE FROM #{tableName} WHERE object=?"
|
1131
|
+
values = [ item['object'] ]
|
1132
|
+
|
1133
|
+
db.execute_sql(sql,values)
|
1134
|
+
end
|
1135
|
+
|
1136
|
+
else #just delete objects
|
1137
|
+
sql = "DELETE FROM #{tableName}"
|
1138
|
+
#sql << " WHERE " + ::Rhom::RhomDbAdapter.where_str(condition_hash) if condition_hash
|
1139
|
+
#sql << " WHERE " + condition_str if condition_str
|
1140
|
+
sql << " WHERE " + sqlCond if sqlCond.length() > 0
|
1141
|
+
db.execute_sql(sql, vals)
|
1142
|
+
end
|
954
1143
|
else
|
955
|
-
|
956
|
-
|
1144
|
+
listObjs = []
|
1145
|
+
|
1146
|
+
if !conditions
|
1147
|
+
if is_sync_source()
|
1148
|
+
listObjs = db.execute_sql("SELECT DISTINCT(object) FROM #{tableName} WHERE source_id=?", get_source_id() )
|
1149
|
+
else
|
1150
|
+
db.delete_from_table(tableName, {"source_id"=>get_source_id()} )
|
1151
|
+
end
|
1152
|
+
elsif conditions.is_a?(Hash)
|
1153
|
+
listObjs = find_objects(conditions, op, nil, 0, nil)
|
957
1154
|
else
|
958
|
-
|
1155
|
+
listObjs = find_objects_ex(conditions, op, nil, 0, nil)
|
959
1156
|
end
|
1157
|
+
|
1158
|
+
listObjs.each do |item|
|
1159
|
+
|
1160
|
+
if is_sync_source()
|
1161
|
+
db.delete_from_table('changed_values', {'object'=>item['object'], "source_id"=>get_source_id(), "sent"=>0})
|
1162
|
+
|
1163
|
+
attrsList = db.select_from_table(tableName, '*', {"object"=>item['object'], "source_id"=>get_source_id()})
|
1164
|
+
attrsList.each do |attrName|
|
1165
|
+
db.insert_into_table('changed_values',
|
1166
|
+
{"source_id"=>get_source_id(), "object"=>item['object'],
|
1167
|
+
"attrib"=> attrName['attrib'], "value"=>attrName['value'],
|
1168
|
+
"update_type"=>'delete'})
|
1169
|
+
end
|
1170
|
+
end
|
1171
|
+
|
1172
|
+
sql = "DELETE FROM #{tableName} WHERE \n"
|
1173
|
+
sql << "object=? AND source_id=?"
|
960
1174
|
|
961
|
-
|
962
|
-
|
1175
|
+
values = []
|
1176
|
+
values << item['object']
|
1177
|
+
values << get_source_id
|
1178
|
+
|
1179
|
+
db.execute_sql(sql,values)
|
1180
|
+
end
|
963
1181
|
end
|
964
1182
|
db.commit
|
965
1183
|
|
@@ -976,70 +1194,11 @@ module Rhom
|
|
976
1194
|
def create(obj)
|
977
1195
|
new_obj = self.new(obj)
|
978
1196
|
|
979
|
-
|
980
|
-
nSrcID = get_source_id
|
981
|
-
obj = new_obj.object
|
982
|
-
src_name = get_source_name
|
983
|
-
db_partition = Rho::RhoConfig.sources[src_name]['partition'].to_s
|
984
|
-
isSchemaSrc = is_schema_source()
|
985
|
-
tableName = isSchemaSrc ? get_schema_table_name() : 'object_values'
|
986
|
-
db = ::Rho::RHO.get_src_db(src_name)
|
987
|
-
begin
|
988
|
-
db.start_transaction
|
989
|
-
|
990
|
-
if isSchemaSrc
|
991
|
-
db.insert_into_table(tableName, new_obj.vars, {:source_id=>true})
|
992
|
-
end
|
993
|
-
|
994
|
-
if is_sync_source() || !isSchemaSrc
|
995
|
-
new_obj.vars.each do |key_a,value|
|
996
|
-
key = key_a.to_s
|
997
|
-
next if ::Rhom::RhomObject.method_name_reserved?(key)
|
998
|
-
|
999
|
-
val = value.to_s #self.inst_strip_braces(value.to_s)
|
1000
|
-
|
1001
|
-
# add rows excluding object, source_id and update_type
|
1002
|
-
fields = {"source_id"=>nSrcID,
|
1003
|
-
"object"=>obj,
|
1004
|
-
"attrib"=>key,
|
1005
|
-
"value"=>val,
|
1006
|
-
"update_type"=>update_type}
|
1007
|
-
fields = new_obj.is_blob_attrib(db_partition, nSrcID, key) ? fields.merge!({"attrib_type" => "blob.file"}) : fields
|
1008
|
-
|
1009
|
-
db.insert_into_table('changed_values', fields) if is_sync_source()
|
1010
|
-
fields.delete("update_type")
|
1011
|
-
fields.delete("attrib_type")
|
1012
|
-
|
1013
|
-
db.insert_into_table(tableName, fields) if !isSchemaSrc
|
1014
|
-
end
|
1015
|
-
end
|
1016
|
-
|
1017
|
-
db.commit
|
1018
|
-
rescue Exception => e
|
1019
|
-
puts 'create Exception: ' + e.inspect
|
1020
|
-
db.rollback
|
1021
|
-
|
1022
|
-
raise
|
1023
|
-
end
|
1197
|
+
new_obj.create
|
1024
1198
|
|
1025
|
-
new_obj
|
1026
|
-
end
|
1199
|
+
new_obj
|
1200
|
+
end
|
1027
1201
|
|
1028
|
-
private
|
1029
|
-
|
1030
|
-
# get hash of conditions in sql form
|
1031
|
-
def get_conditions_hash(conditions=nil)
|
1032
|
-
if conditions
|
1033
|
-
condition_hash = {}
|
1034
|
-
conditions.each do |key,value|
|
1035
|
-
condition_hash.merge!('attrib' => key.to_s, 'value' => value.to_s)
|
1036
|
-
end
|
1037
|
-
condition_hash
|
1038
|
-
else
|
1039
|
-
nil
|
1040
|
-
end
|
1041
|
-
end
|
1042
|
-
|
1043
1202
|
end #class methods
|
1044
1203
|
|
1045
1204
|
# if app server does not support oo in inserts.
|
@@ -1134,6 +1293,42 @@ module Rhom
|
|
1134
1293
|
#return attrib_name == "image_uri"
|
1135
1294
|
end
|
1136
1295
|
|
1296
|
+
def create
|
1297
|
+
nSrcID = self.get_inst_source_id
|
1298
|
+
obj = self.object
|
1299
|
+
src_name = get_inst_source_name
|
1300
|
+
tableName = is_inst_schema_source() ? get_inst_schema_table_name() : 'object_values'
|
1301
|
+
isSchemaSrc = is_inst_schema_source()
|
1302
|
+
db = ::Rho::RHO.get_src_db(src_name)
|
1303
|
+
begin
|
1304
|
+
db.start_transaction
|
1305
|
+
|
1306
|
+
db.insert_into_table('changed_values',
|
1307
|
+
{'update_type'=>'create', 'attrib'=>'object', "source_id"=>nSrcID,"object"=>obj} ) if is_inst_sync_source()
|
1308
|
+
|
1309
|
+
if isSchemaSrc
|
1310
|
+
db.insert_into_table(tableName, self.vars, {:source_id=>true})
|
1311
|
+
else
|
1312
|
+
self.vars.each do |key_a,value|
|
1313
|
+
key = key_a.to_s
|
1314
|
+
next if ::Rhom::RhomObject.method_name_reserved?(key)
|
1315
|
+
|
1316
|
+
val = value.to_s #self.inst_strip_braces(value.to_s)
|
1317
|
+
|
1318
|
+
db.insert_into_table(tableName, {"source_id"=>nSrcID, "object"=>obj, "attrib"=>key, "value"=>val })
|
1319
|
+
end
|
1320
|
+
end
|
1321
|
+
|
1322
|
+
db.commit
|
1323
|
+
rescue Exception => e
|
1324
|
+
puts 'create Exception: ' + e.inspect
|
1325
|
+
db.rollback
|
1326
|
+
|
1327
|
+
raise
|
1328
|
+
end
|
1329
|
+
|
1330
|
+
end
|
1331
|
+
|
1137
1332
|
# saves the current object to the database as a create type
|
1138
1333
|
def save
|
1139
1334
|
# iterate over each instance variable and insert create row to table
|
@@ -1143,28 +1338,50 @@ module Rhom
|
|
1143
1338
|
db_partition = Rho::RhoConfig.sources[get_inst_source_name]['partition'].to_s
|
1144
1339
|
tableName = is_inst_schema_source() ? get_inst_schema_table_name() : 'object_values'
|
1145
1340
|
isSchemaSrc = is_inst_schema_source()
|
1341
|
+
|
1342
|
+
#call create if item does not exists
|
1343
|
+
is_new_item = false
|
1344
|
+
begin
|
1345
|
+
db.lock_db()
|
1346
|
+
if isSchemaSrc
|
1347
|
+
existing_attribs = db.execute_sql("SELECT object FROM #{tableName} WHERE object=? LIMIT 1 OFFSET 0",obj)
|
1348
|
+
else
|
1349
|
+
existing_attribs = db.execute_sql("SELECT object FROM #{tableName} WHERE object=? AND source_id=? LIMIT 1 OFFSET 0",obj,nSrcID)
|
1350
|
+
end
|
1351
|
+
|
1352
|
+
unless existing_attribs && existing_attribs.length > 0
|
1353
|
+
is_new_item = true
|
1354
|
+
create();
|
1355
|
+
end
|
1356
|
+
|
1357
|
+
db.unlock_db
|
1358
|
+
rescue Exception => e
|
1359
|
+
puts 'save Exception: ' + e.inspect
|
1360
|
+
db.unlock_db
|
1361
|
+
|
1362
|
+
raise
|
1363
|
+
end
|
1364
|
+
|
1365
|
+
return if is_new_item
|
1366
|
+
|
1146
1367
|
begin
|
1147
1368
|
db.start_transaction
|
1148
1369
|
|
1149
|
-
|
1370
|
+
update_type = 'update'
|
1371
|
+
ignore_changed_values = true
|
1372
|
+
resUpdateType = nil
|
1150
1373
|
if is_inst_sync_source()
|
1151
|
-
|
1152
|
-
|
1153
|
-
|
1154
|
-
|
1374
|
+
resUpdateType = db.select_from_table('changed_values', 'update_type', {"object"=>obj, "source_id"=>nSrcID, 'sent'=>0})
|
1375
|
+
update_type = resUpdateType[0]['update_type'] if resUpdateType && resUpdateType.length > 0
|
1376
|
+
ignore_changed_values = update_type=='create'
|
1377
|
+
|
1378
|
+
if is_inst_full_update
|
1379
|
+
unless resUpdateType && resUpdateType.length > 0
|
1380
|
+
db.insert_into_table('changed_values', {"source_id"=>nSrcID, "object"=>obj, "attrib"=>'object', "value"=>"", "update_type"=>update_type})
|
1381
|
+
end
|
1382
|
+
ignore_changed_values = update_type=='update'
|
1155
1383
|
end
|
1156
|
-
|
1157
|
-
if result && result.length > 0
|
1158
|
-
resUpdateType = is_inst_sync_source() ? db.select_from_table('changed_values', 'update_type', {"object"=>obj, "source_id"=>nSrcID, 'sent'=>0}) : nil
|
1159
|
-
if resUpdateType && resUpdateType.length > 0
|
1160
|
-
update_type = resUpdateType[0]['update_type']
|
1161
|
-
else
|
1162
|
-
update_type = 'update'
|
1163
|
-
end
|
1164
|
-
else
|
1165
|
-
update_type = 'create'
|
1166
|
-
end
|
1167
|
-
end
|
1384
|
+
end
|
1168
1385
|
|
1169
1386
|
self.vars.each do |key_a,value|
|
1170
1387
|
key = key_a.to_s
|
@@ -1206,14 +1423,14 @@ module Rhom
|
|
1206
1423
|
|
1207
1424
|
if isModified
|
1208
1425
|
|
1209
|
-
|
1426
|
+
unless ignore_changed_values
|
1210
1427
|
resUpdateType = db.select_from_table('changed_values', 'update_type', {"object"=>obj, "attrib"=>key, "source_id"=>nSrcID, 'sent'=>0})
|
1211
1428
|
if resUpdateType && resUpdateType.length > 0
|
1212
|
-
|
1213
|
-
|
1429
|
+
db.update_into_table('changed_values', {"value"=>val}, {"object"=>obj, "attrib"=>key, "source_id"=>nSrcID})
|
1430
|
+
else
|
1431
|
+
db.insert_into_table('changed_values', fields)
|
1214
1432
|
end
|
1215
|
-
|
1216
|
-
db.insert_into_table('changed_values', fields)
|
1433
|
+
|
1217
1434
|
end
|
1218
1435
|
|
1219
1436
|
if isSchemaSrc
|
@@ -1223,7 +1440,7 @@ module Rhom
|
|
1223
1440
|
end
|
1224
1441
|
end
|
1225
1442
|
else
|
1226
|
-
db.insert_into_table('changed_values', fields)
|
1443
|
+
db.insert_into_table('changed_values', fields) unless ignore_changed_values
|
1227
1444
|
fields.delete("update_type")
|
1228
1445
|
fields.delete("attrib_type")
|
1229
1446
|
|
@@ -1254,17 +1471,26 @@ module Rhom
|
|
1254
1471
|
update_type='update'
|
1255
1472
|
nSrcID = self.get_inst_source_id
|
1256
1473
|
db = ::Rho::RHO.get_src_db(get_inst_source_name)
|
1474
|
+
db_partition = Rho::RhoConfig.sources[get_inst_source_name]['partition'].to_s
|
1257
1475
|
tableName = is_inst_schema_source() ? get_inst_schema_table_name() : 'object_values'
|
1258
1476
|
begin
|
1477
|
+
|
1259
1478
|
db.start_transaction
|
1260
|
-
|
1261
|
-
|
1262
|
-
|
1263
|
-
|
1264
|
-
|
1265
|
-
|
1479
|
+
|
1480
|
+
ignore_changed_values = true
|
1481
|
+
if is_inst_sync_source()
|
1482
|
+
resUpdateType = db.select_from_table('changed_values', 'update_type', {"object"=>obj, "source_id"=>nSrcID, 'sent'=>0})
|
1483
|
+
update_type = resUpdateType[0]['update_type'] if resUpdateType && resUpdateType.length > 0
|
1484
|
+
ignore_changed_values = update_type=='create'
|
1485
|
+
|
1486
|
+
if is_inst_full_update
|
1487
|
+
unless resUpdateType && resUpdateType.length > 0
|
1488
|
+
db.insert_into_table('changed_values', {"source_id"=>nSrcID, "object"=>obj, "attrib"=>'object', "value"=>"", "update_type"=>update_type})
|
1489
|
+
end
|
1490
|
+
ignore_changed_values = update_type=='update'
|
1491
|
+
end
|
1266
1492
|
end
|
1267
|
-
|
1493
|
+
|
1268
1494
|
attrs.each do |attrib,val|
|
1269
1495
|
attrib = attrib.to_s.gsub(/@/,"")
|
1270
1496
|
next if ::Rhom::RhomObject.method_name_reserved?(attrib)
|
@@ -1273,32 +1499,19 @@ module Rhom
|
|
1273
1499
|
new_val = val.to_s #self.inst_strip_braces(val.to_s)
|
1274
1500
|
isModified = false
|
1275
1501
|
|
1276
|
-
|
1277
|
-
|
1278
|
-
|
1279
|
-
|
1280
|
-
|
1281
|
-
|
1282
|
-
|
1283
|
-
|
1284
|
-
end
|
1285
|
-
if isModified && old_val && new_val.nil? && old_val.to_s().length == 0
|
1286
|
-
isModified = false
|
1287
|
-
end
|
1502
|
+
old_val = self.send attrib.to_sym unless ::Rhom::RhomObject.method_name_reserved?(attrib)
|
1503
|
+
|
1504
|
+
isModified = old_val != new_val
|
1505
|
+
if isModified && new_val && old_val.nil? && new_val.to_s().length == 0
|
1506
|
+
isModified = false
|
1507
|
+
end
|
1508
|
+
if isModified && old_val && new_val.nil? && old_val.to_s().length == 0
|
1509
|
+
isModified = false
|
1288
1510
|
end
|
1289
1511
|
|
1290
1512
|
# if the object's value doesn't match the database record
|
1291
1513
|
# then we procede with update
|
1292
1514
|
if isModified
|
1293
|
-
# only one update at a time
|
1294
|
-
resUpdateType = is_inst_sync_source() ? db.select_from_table('changed_values', 'update_type', {"object"=>obj, "source_id"=>nSrcID, 'sent'=>0}) : nil
|
1295
|
-
if resUpdateType && resUpdateType.length > 0
|
1296
|
-
update_type = resUpdateType[0]['update_type']
|
1297
|
-
db.delete_from_table('changed_values', {"object"=>obj, "attrib"=>attrib, "source_id"=>nSrcID, "sent"=>0})
|
1298
|
-
end
|
1299
|
-
|
1300
|
-
# add to syncengine queue
|
1301
|
-
|
1302
1515
|
if is_inst_schema_source()
|
1303
1516
|
result = db.select_from_table(tableName, 'object', {"object"=>obj})
|
1304
1517
|
|
@@ -1319,16 +1532,19 @@ module Rhom
|
|
1319
1532
|
|
1320
1533
|
end
|
1321
1534
|
|
1322
|
-
|
1323
|
-
|
1324
|
-
|
1325
|
-
|
1326
|
-
|
1327
|
-
|
1535
|
+
unless ignore_changed_values
|
1536
|
+
|
1537
|
+
if resUpdateType && resUpdateType.length > 0
|
1538
|
+
db.delete_from_table('changed_values', {"object"=>obj, "attrib"=>attrib, "source_id"=>nSrcID, "sent"=>0})
|
1539
|
+
end
|
1540
|
+
|
1541
|
+
attrib_type = is_blob_attrib(db_partition, nSrcID, attrib) ? "blob.file" : ""
|
1542
|
+
db.insert_into_table('changed_values', {"source_id"=>nSrcID, "object"=>obj, "attrib"=>attrib,
|
1543
|
+
"value"=>new_val, "update_type"=>update_type, "attrib_type"=>attrib_type })
|
1328
1544
|
end
|
1329
1545
|
|
1330
1546
|
# update in-memory object
|
1331
|
-
self.vars[attrib.to_sym()] = new_val unless is_inst_full_update
|
1547
|
+
self.vars[attrib.to_sym()] = new_val #unless is_inst_full_update
|
1332
1548
|
end
|
1333
1549
|
end
|
1334
1550
|
|