private void LoadToFunction(string tableName, string key, ScriptRunnerResult runnerResult, List <string> partitions = null)
        {
            if (key == null)
            {
                ThrowLoadParameterIsMandatory(nameof(key));
            }

            var result = runnerResult.TranslateToObject(Context);
            var props  = new List <OlapColumn>(result.Count);
            var prop   = new BlittableJsonReaderObject.PropertyDetails();

            for (var i = 0; i < result.Count; i++)
            {
                result.GetPropertyByIndex(i, ref prop);
                props.Add(new OlapColumn
                {
                    Name  = prop.Name,
                    Value = prop.Value,
                    Type  = prop.Token
                });
            }

            var olapItem = new ToOlapItem(Current)
            {
                Properties = props
            };

            var transformed = GetOrAdd(tableName, key, partitions);

            transformed.AddItem(olapItem);

            _stats.IncrementBatchSize(result.Size);
        }
Exemple #2
0
        protected override void LoadToFunction(string collectionName, ScriptRunnerResult document)
        {
            if (collectionName == null)
            {
                ThrowLoadParameterIsMandatory(nameof(collectionName));
            }
            string id;

            if (_script.IsLoadedToDefaultCollection(Current, collectionName))
            {
                id = Current.DocumentId;
            }
            else
            {
                id = GetPrefixedId(Current.DocumentId, collectionName, OperationType.Put);

                var metadata = document.GetOrCreate(Constants.Documents.Metadata.Key);
                metadata.Put(Constants.Documents.Metadata.Collection, collectionName, false);
                metadata.Put(Constants.Documents.Metadata.Id, id, false);
            }

            var transformed = document.TranslateToObject(Context);

            var transformResult = Context.ReadObject(transformed, id);

            _commands.Add(new PutCommandDataWithBlittableJson(id, null, transformResult));
        }
        protected override void LoadToFunction(string indexName, ScriptRunnerResult document)
        {
            if (indexName == null)
            {
                ThrowLoadParameterIsMandatory(nameof(indexName));
            }

            var result = document.TranslateToObject(Context);


            var index = GetOrAdd(indexName);

            if (result.TryGet(index.DocumentIdProperty, out object _) == false)
            {
                result.Modifications = new DynamicJsonValue
                {
                    [index.DocumentIdProperty] = ElasticSearchEtl.LowerCaseDocumentIdProperty(Current.Document.Id)
                };
            }

            index.Inserts.Add(new ElasticSearchItem(Current)
            {
                TransformationResult = result
            });
        }
Exemple #4
0
        protected override void LoadToFunction(string collectionName, ScriptRunnerResult document)
        {
            if (collectionName == null)
            {
                ThrowLoadParameterIsMandatory(nameof(collectionName));
            }

            string id;
            var    loadedToDifferentCollection = false;

            if (_script.IsLoadedToDefaultCollection(Current, collectionName))
            {
                id = Current.DocumentId;
            }
            else
            {
                id = GetPrefixedId(Current.DocumentId, collectionName);
                loadedToDifferentCollection = true;
            }

            var metadata = document.GetOrCreate(Constants.Documents.Metadata.Key);

            if (loadedToDifferentCollection || metadata.HasProperty(Constants.Documents.Metadata.Collection) == false)
            {
                metadata.Put(Constants.Documents.Metadata.Collection, collectionName, throwOnError: true);
            }

            if (metadata.HasProperty(Constants.Documents.Metadata.Attachments))
            {
                metadata.Delete(Constants.Documents.Metadata.Attachments, throwOnError: true);
            }

            if (metadata.HasProperty(Constants.Documents.Metadata.Counters))
            {
                metadata.Delete(Constants.Documents.Metadata.Counters, throwOnError: true);
            }

            var transformed = document.TranslateToObject(Context);

            var transformResult = Context.ReadObject(transformed, id);

            _currentRun.Put(id, document.Instance, transformResult);

            if (_transformation.IsAddingAttachments)
            {
                var docInstance = (ObjectInstance)document.Instance;

                docInstance.DefineOwnProperty(Transformation.AddAttachment, _addAttachmentMethod, throwOnError: true);
            }

            if (_transformation.IsAddingCounters)
            {
                var docInstance = (ObjectInstance)document.Instance;

                docInstance.DefineOwnProperty(Transformation.AddCounter, _addCounterMethod, throwOnError: true);
            }
        }
Exemple #5
0
        protected override void LoadToFunction(string tableName, ScriptRunnerResult cols)
        {
            if (tableName == null)
            {
                ThrowLoadParameterIsMandatory(nameof(tableName));
            }

            var result  = cols.TranslateToObject(Context);
            var columns = new List <SqlColumn>(result.Count);
            var prop    = new BlittableJsonReaderObject.PropertyDetails();

            for (var i = 0; i < result.Count; i++)
            {
                result.GetPropertyByIndex(i, ref prop);

                var sqlColumn = new SqlColumn
                {
                    Id    = prop.Name,
                    Value = prop.Value,
                    Type  = prop.Token
                };


                if (_transformation.HasLoadAttachment &&
                    prop.Token == BlittableJsonToken.String && IsLoadAttachment(prop.Value as LazyStringValue, out var attachmentName))
                {
                    Stream attachmentStream;
                    using (Slice.From(Context.Allocator, Current.Document.ChangeVector, out var cv))
                    {
                        attachmentStream = Database.DocumentsStorage.AttachmentsStorage.GetAttachment(
                            Context,
                            Current.DocumentId,
                            attachmentName,
                            AttachmentType.Document,
                            cv)
                                           ?.Stream ?? Stream.Null;
                    }

                    sqlColumn.Type  = 0;
                    sqlColumn.Value = attachmentStream;
                }

                columns.Add(sqlColumn);
            }

            GetOrAdd(tableName).Inserts.Add(new ToSqlItem(Current)
            {
                Columns = columns
            });
        }
Exemple #6
0
        public static string ConvertResultToString(ScriptRunnerResult result)
        {
            var ms = new MemoryStream();

            using (var ctx = JsonOperationContext.ShortTermSingleUse())
                using (var writer = new BlittableJsonTextWriter(ctx, ms))
                {
                    writer.WriteStartObject();

                    writer.WritePropertyName("Result");

                    if (result.IsNull)
                    {
                        writer.WriteNull();
                    }
                    else if (result.RawJsValue.IsBoolean())
                    {
                        writer.WriteBool(result.RawJsValue.AsBoolean());
                    }
                    else if (result.RawJsValue.IsString())
                    {
                        writer.WriteString(result.RawJsValue.AsString());
                    }
                    else if (result.RawJsValue.IsDate())
                    {
                        var date = result.RawJsValue.AsDate();
                        writer.WriteString(date.ToDateTime().ToString("O"));
                    }
                    else if (result.RawJsValue.IsNumber())
                    {
                        writer.WriteDouble(result.RawJsValue.AsNumber());
                    }
                    else
                    {
                        writer.WriteObject(result.TranslateToObject(ctx));
                    }

                    writer.WriteEndObject();
                    writer.Flush();
                }

            var str = Encoding.UTF8.GetString(ms.ToArray());

            return(str);
        }
Exemple #7
0
        protected override void LoadToFunction(string tableName, ScriptRunnerResult cols)
        {
            if (tableName == null)
            {
                ThrowLoadParameterIsMandatory(nameof(tableName));
            }

            var result  = cols.TranslateToObject(Context);
            var columns = new List <SqlColumn>(result.Count);
            var prop    = new BlittableJsonReaderObject.PropertyDetails();

            for (var i = 0; i < result.Count; i++)
            {
                result.GetPropertyByIndex(i, ref prop);

                var sqlColumn = new SqlColumn
                {
                    Id    = prop.Name,
                    Value = prop.Value,
                    Type  = prop.Token
                };

                if (_transformation.IsLoadingAttachments &&
                    prop.Token == BlittableJsonToken.String && IsLoadAttachment(prop.Value as LazyStringValue, out var attachmentName))
                {
                    var attachment = _loadedAttachments[attachmentName].Dequeue();

                    sqlColumn.Type  = 0;
                    sqlColumn.Value = attachment.Stream;

                    _stats.IncrementBatchSize(attachment.Stream.Length);
                }

                columns.Add(sqlColumn);
            }

            GetOrAdd(tableName).Inserts.Add(new ToSqlItem(Current)
            {
                Columns = columns
            });

            _stats.IncrementBatchSize(result.Size);
        }
        protected override void LoadToFunction(string collectionName, ScriptRunnerResult document)
        {
            if (collectionName == null)
            {
                ThrowLoadParameterIsMandatory(nameof(collectionName));
            }

            string id;
            var    loadedToDifferentCollection = false;

            if (_script.IsLoadedToDefaultCollection(Current, collectionName))
            {
                id = Current.DocumentId;
            }
            else
            {
                id = GetPrefixedId(Current.DocumentId, collectionName);
                loadedToDifferentCollection = true;
            }

            var metadata = document.GetOrCreate(Constants.Documents.Metadata.Key);

            if (loadedToDifferentCollection || metadata.HasProperty(Constants.Documents.Metadata.Collection) == false)
            {
                metadata.Put(Constants.Documents.Metadata.Collection, collectionName, throwOnError: true);
            }

            if (metadata.HasProperty(Constants.Documents.Metadata.Id) == false)
            {
                metadata.Put(Constants.Documents.Metadata.Id, id, throwOnError: true);
            }

            if (metadata.HasProperty(Constants.Documents.Metadata.Attachments))
            {
                metadata.Delete(Constants.Documents.Metadata.Attachments, throwOnError: true);
            }

            var transformed = document.TranslateToObject(Context);

            var transformResult = Context.ReadObject(transformed, id);

            _commands.Add(new PutCommandDataWithBlittableJson(id, null, transformResult));
        }