UNPKG

jaydata

Version:

Cross-platform HTML5 data-management, JavaScript Language Query (JSLQ) support for OData, SQLite, WebSQL, IndexedDB, YQL and Facebook (packaged for Node.JS)

186 lines (170 loc) 8.45 kB
'use strict'; var _core = require('../../../../core.js'); var _core2 = _interopRequireDefault(_core); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } _core2.default.Class.define('$data.storageProviders.YQL.YQLProvider', _core2.default.StorageProviderBase, null, { constructor: function constructor(cfg) { var provider = this; this.SqlCommands = []; this.context = {}; this.extendedCreateNew = []; this.providerConfiguration = _core2.default.typeSystem.extend({ YQLFormat: "format=json", YQLQueryUrl: "http://query.yahooapis.com/v1/public/yql?q=", YQLEnv: '', resultPath: ["query", "results"], resultSkipFirstLevel: true }, cfg); this.initializeStore = function (callBack) { callBack = _core2.default.PromiseHandlerBase.createCallbackSettings(callBack); callBack.success(this.context); }; }, AuthenticationProvider: { dataType: '$data.Authentication.AuthenticationBase', enumerable: false }, supportedDataTypes: { value: [_core2.default.Integer, _core2.default.Number, _core2.default.Date, _core2.default.String, _core2.default.Boolean, _core2.default.Blob, _core2.default.Array], writable: false }, supportedFieldOperations: { value: { 'contains': { dataType: _core2.default.String, allowedIn: _core2.default.Expressions.FilterExpression, mapTo: ' LIKE ', expressionInParameter: false, parameters: [{ name: 'inStatement', dataType: _core2.default.String, prefix: '%', suffix: '%' }] }, 'startsWith': { dataType: _core2.default.String, allowedIn: _core2.default.Expressions.FilterExpression, mapTo: ' LIKE ', expressionInParameter: false, parameters: [{ name: 'inStatement', dataType: _core2.default.String, suffix: '%' }] }, 'endsWith': { dataType: _core2.default.String, allowedIn: _core2.default.Expressions.FilterExpression, mapTo: ' LIKE ', expressionInParameter: false, parameters: [{ name: 'inStatement', dataType: _core2.default.String, prefix: '%' }] } }, enumerable: true, writable: true }, supportedBinaryOperators: { value: { equal: { mapTo: ' = ', dataType: _core2.default.Boolean, allowedIn: _core2.default.Expressions.FilterExpression }, notEqual: { mapTo: ' != ', dataType: _core2.default.Boolean, allowedIn: _core2.default.Expressions.FilterExpression }, equalTyped: { mapTo: ' = ', dataType: _core2.default.Boolean, allowedIn: _core2.default.Expressions.FilterExpression }, notEqualTyped: { mapTo: ' != ', dataType: _core2.default.Boolean, allowedIn: _core2.default.Expressions.FilterExpression }, greaterThan: { mapTo: ' > ', dataType: _core2.default.Boolean, allowedIn: _core2.default.Expressions.FilterExpression }, greaterThanOrEqual: { mapTo: ' >= ', dataType: _core2.default.Boolean, allowedIn: _core2.default.Expressions.FilterExpression }, lessThan: { mapTo: ' < ', dataType: _core2.default.Boolean, allowedIn: _core2.default.Expressions.FilterExpression }, lessThenOrEqual: { mapTo: ' <= ', dataType: _core2.default.Boolean, allowedIn: _core2.default.Expressions.FilterExpression }, or: { mapTo: ' OR ', dataType: _core2.default.Boolean, allowedIn: _core2.default.Expressions.FilterExpression }, and: { mapTo: ' AND ', dataType: _core2.default.Boolean, allowedIn: _core2.default.Expressions.FilterExpression }, "in": { mapTo: " IN ", dataType: _core2.default.Boolean, resolvableType: [_core2.default.Array, _core2.default.Queryable], allowedIn: _core2.default.Expressions.FilterExpression } } }, supportedUnaryOperators: { value: {} }, supportedSetOperations: { value: { filter: {}, map: {}, forEach: {}, toArray: {}, single: {}, take: {}, skip: {}, orderBy: {}, orderByDescending: {}, first: {} }, enumerable: true, writable: true }, fieldConverter: { value: _core2.default.YQLConverter }, executeQuery: function executeQuery(query, callBack) { var self = this; callBack = _core2.default.PromiseHandlerBase.createCallbackSettings(callBack); var schema = query.defaultType; var entitSetDefinition = query.context.getType().memberDefinitions.asArray().filter(function (m) { return m.elementType == schema; })[0] || {}; var ctx = this.context; if (!this.AuthenticationProvider) this.AuthenticationProvider = new _core2.default.Authentication.Anonymous({}); var sql; try { sql = this._compile(query); } catch (e) { callBack.error(e); return; } var includes = []; var requestData = { url: this.providerConfiguration.YQLQueryUrl + encodeURIComponent(sql.queryText) + "&" + this.providerConfiguration.YQLFormat + (this.providerConfiguration.YQLEnv ? "&env=" + this.providerConfiguration.YQLEnv : ""), dataType: "JSON", success: function success(data, textStatus, jqXHR) { var resultData = self._preProcessData(data, entitSetDefinition); if (resultData == false) { callBack.success(query); return; } query.rawDataList = resultData; if (entitSetDefinition.anonymousResult) { query.rawDataList = resultData; callBack.success(query); return; } else { var compiler = _core.Container.createModelBinderConfigCompiler(query, []); compiler.Visit(query.expression); } callBack.success(query); }, error: function error(jqXHR, textStatus, errorThrow) { var errorData = {}; try { errorData = JSON.parse(jqXHR.responseText).error; } catch (e) { errorData = errorThrow + ': ' + jqXHR.responseText; } callBack.error(errorData); } }; this.context.prepareRequest.call(this, requestData); this.AuthenticationProvider.CreateRequest(requestData); }, _preProcessData: function _preProcessData(jsonResult, entityDef) { var resultData = jsonResult; var depths = entityDef.resultPath != undefined ? entityDef.resultPath : this.providerConfiguration.resultPath; for (var i = 0; i < depths.length; i++) { if (resultData[depths[i]]) resultData = resultData[depths[i]];else { return false; } } var skipFirstLevel = entityDef.resultSkipFirstLevel != undefined ? entityDef.resultSkipFirstLevel : this.providerConfiguration.resultSkipFirstLevel; if (skipFirstLevel == true) { var keys = Object.keys(resultData); if (keys.length == 1 && (resultData[keys[0]] instanceof Array || !entityDef.anonymousResult)) resultData = resultData[keys[0]]; } if (resultData.length) { return resultData; } else return [resultData]; }, _compile: function _compile(query) { var sqlText = _core.Container.createYQLCompiler().compile(query); return sqlText; }, getTraceString: function getTraceString(query) { if (!this.AuthenticationProvider) this.AuthenticationProvider = new _core2.default.Authentication.Anonymous({}); var sqlText = this._compile(query); return sqlText; }, setContext: function setContext(ctx) { this.context = ctx; }, saveChanges: function saveChanges(callBack) { _core.Guard.raise(new _core.Exception("Not Implemented", "Not Implemented")); } }, null); _core2.default.StorageProviderBase.registerProvider("YQL", _core2.default.storageProviders.YQL.YQLProvider);