From bd19e0682b89316c2e6045c69a2a2ab8bb3b117f Mon Sep 17 00:00:00 2001 From: Dian Afif Date: Tue, 14 Jul 2026 22:50:46 +0400 Subject: [PATCH] update --- .../_build/dev/lib/bandit/.mix/compile.elixir | Bin 0 -> 13428 bytes .../dev/lib/bandit/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/dev/lib/bandit/.mix/compile.fetch | 0 .../bandit/ebin/Elixir.Bandit.Adapter.beam | Bin 0 -> 26200 bytes .../ebin/Elixir.Bandit.Application.beam | Bin 0 -> 2616 bytes .../lib/bandit/ebin/Elixir.Bandit.Clock.beam | Bin 0 -> 5000 bytes .../ebin/Elixir.Bandit.Compression.beam | Bin 0 -> 15992 bytes .../ebin/Elixir.Bandit.DelegatingHandler.beam | Bin 0 -> 19276 bytes .../bandit/ebin/Elixir.Bandit.Extractor.beam | Bin 0 -> 10664 bytes .../ebin/Elixir.Bandit.HTTP1.Handler.beam | Bin 0 -> 25732 bytes .../ebin/Elixir.Bandit.HTTP1.Socket.beam | Bin 0 -> 4420 bytes .../ebin/Elixir.Bandit.HTTP2.Connection.beam | Bin 0 -> 43460 bytes ...r.Bandit.HTTP2.Errors.ConnectionError.beam | Bin 0 -> 3696 bytes ...lixir.Bandit.HTTP2.Errors.StreamError.beam | Bin 0 -> 3796 bytes .../ebin/Elixir.Bandit.HTTP2.Errors.beam | Bin 0 -> 5260 bytes .../ebin/Elixir.Bandit.HTTP2.FlowControl.beam | Bin 0 -> 3276 bytes ...lixir.Bandit.HTTP2.Frame.Continuation.beam | Bin 0 -> 4760 bytes .../ebin/Elixir.Bandit.HTTP2.Frame.Data.beam | Bin 0 -> 5652 bytes .../ebin/Elixir.Bandit.HTTP2.Frame.Flags.beam | Bin 0 -> 4880 bytes .../Elixir.Bandit.HTTP2.Frame.Goaway.beam | Bin 0 -> 4764 bytes .../Elixir.Bandit.HTTP2.Frame.Headers.beam | Bin 0 -> 8556 bytes .../ebin/Elixir.Bandit.HTTP2.Frame.Ping.beam | Bin 0 -> 4908 bytes .../Elixir.Bandit.HTTP2.Frame.Priority.beam | Bin 0 -> 4964 bytes ...Elixir.Bandit.HTTP2.Frame.PushPromise.beam | Bin 0 -> 2340 bytes .../Elixir.Bandit.HTTP2.Frame.RstStream.beam | Bin 0 -> 4700 bytes ...zable.Bandit.HTTP2.Frame.Continuation.beam | Bin 0 -> 4572 bytes ....Serializable.Bandit.HTTP2.Frame.Data.beam | Bin 0 -> 4828 bytes ...erializable.Bandit.HTTP2.Frame.Goaway.beam | Bin 0 -> 3732 bytes ...rializable.Bandit.HTTP2.Frame.Headers.beam | Bin 0 -> 5180 bytes ....Serializable.Bandit.HTTP2.Frame.Ping.beam | Bin 0 -> 3984 bytes ...ializable.Bandit.HTTP2.Frame.Priority.beam | Bin 0 -> 3720 bytes ...alizable.Bandit.HTTP2.Frame.RstStream.beam | Bin 0 -> 3552 bytes ...ializable.Bandit.HTTP2.Frame.Settings.beam | Bin 0 -> 5196 bytes ...zable.Bandit.HTTP2.Frame.WindowUpdate.beam | Bin 0 -> 3620 bytes ...lixir.Bandit.HTTP2.Frame.Serializable.beam | Bin 0 -> 5700 bytes .../Elixir.Bandit.HTTP2.Frame.Settings.beam | Bin 0 -> 7888 bytes .../Elixir.Bandit.HTTP2.Frame.Unknown.beam | Bin 0 -> 3980 bytes ...lixir.Bandit.HTTP2.Frame.WindowUpdate.beam | Bin 0 -> 4784 bytes .../ebin/Elixir.Bandit.HTTP2.Frame.beam | Bin 0 -> 5956 bytes .../ebin/Elixir.Bandit.HTTP2.Handler.beam | Bin 0 -> 31464 bytes .../ebin/Elixir.Bandit.HTTP2.Settings.beam | Bin 0 -> 3464 bytes .../ebin/Elixir.Bandit.HTTP2.Stream.beam | Bin 0 -> 7204 bytes .../Elixir.Bandit.HTTP2.StreamCollection.beam | Bin 0 -> 7292 bytes .../Elixir.Bandit.HTTP2.StreamProcess.beam | Bin 0 -> 8072 bytes .../bandit/ebin/Elixir.Bandit.HTTPError.beam | Bin 0 -> 3640 bytes ...dit.HTTPTransport.Bandit.HTTP1.Socket.beam | Bin 0 -> 41640 bytes ...dit.HTTPTransport.Bandit.HTTP2.Stream.beam | Bin 0 -> 38844 bytes .../ebin/Elixir.Bandit.HTTPTransport.beam | Bin 0 -> 9888 bytes .../bandit/ebin/Elixir.Bandit.Headers.beam | Bin 0 -> 7992 bytes .../ebin/Elixir.Bandit.InitialHandler.beam | Bin 0 -> 22376 bytes .../lib/bandit/ebin/Elixir.Bandit.Logger.beam | Bin 0 -> 4660 bytes .../ebin/Elixir.Bandit.PhoenixAdapter.beam | Bin 0 -> 6664 bytes .../bandit/ebin/Elixir.Bandit.Pipeline.beam | Bin 0 -> 15396 bytes .../Elixir.Bandit.PrimitiveOps.WebSocket.beam | Bin 0 -> 3608 bytes .../ebin/Elixir.Bandit.SocketHelpers.beam | Bin 0 -> 5756 bytes .../bandit/ebin/Elixir.Bandit.Telemetry.beam | Bin 0 -> 11456 bytes .../lib/bandit/ebin/Elixir.Bandit.Trace.beam | Bin 0 -> 13828 bytes .../ebin/Elixir.Bandit.TransportError.beam | Bin 0 -> 3612 bytes .../Elixir.Bandit.WebSocket.Connection.beam | Bin 0 -> 23884 bytes .../Elixir.Bandit.WebSocket.Frame.Binary.beam | Bin 0 -> 3740 bytes ...andit.WebSocket.Frame.ConnectionClose.beam | Bin 0 -> 6632 bytes ...r.Bandit.WebSocket.Frame.Continuation.beam | Bin 0 -> 4024 bytes .../Elixir.Bandit.WebSocket.Frame.Ping.beam | Bin 0 -> 4776 bytes .../Elixir.Bandit.WebSocket.Frame.Pong.beam | Bin 0 -> 4776 bytes ...lizable.Bandit.WebSocket.Frame.Binary.beam | Bin 0 -> 3616 bytes ...andit.WebSocket.Frame.ConnectionClose.beam | Bin 0 -> 4820 bytes ...e.Bandit.WebSocket.Frame.Continuation.beam | Bin 0 -> 3572 bytes ...ializable.Bandit.WebSocket.Frame.Ping.beam | Bin 0 -> 3444 bytes ...ializable.Bandit.WebSocket.Frame.Pong.beam | Bin 0 -> 3444 bytes ...ializable.Bandit.WebSocket.Frame.Text.beam | Bin 0 -> 3588 bytes ...r.Bandit.WebSocket.Frame.Serializable.beam | Bin 0 -> 5676 bytes .../Elixir.Bandit.WebSocket.Frame.Text.beam | Bin 0 -> 3724 bytes .../ebin/Elixir.Bandit.WebSocket.Frame.beam | Bin 0 -> 15392 bytes .../ebin/Elixir.Bandit.WebSocket.Handler.beam | Bin 0 -> 24732 bytes .../Elixir.Bandit.WebSocket.Handshake.beam | Bin 0 -> 7752 bytes ...ir.Bandit.WebSocket.PerMessageDeflate.beam | Bin 0 -> 14952 bytes ...ebSocket.Socket.ThousandIsland.Socket.beam | Bin 0 -> 6796 bytes .../ebin/Elixir.Bandit.WebSocket.Socket.beam | Bin 0 -> 6240 bytes ...ir.Bandit.WebSocket.UpgradeValidation.beam | Bin 0 -> 5352 bytes .../dev/lib/bandit/ebin/Elixir.Bandit.beam | Bin 0 -> 21936 bytes phoenix/_build/dev/lib/bandit/ebin/bandit.app | 81 + .../lib/cc_precompiler/.mix/compile.elixir | Bin 0 -> 4706 bytes .../cc_precompiler/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../dev/lib/cc_precompiler/.mix/compile.fetch | 0 ...lixir.CCPrecompiler.CompilationScript.beam | Bin 0 -> 1904 bytes .../Elixir.CCPrecompiler.UniversalBinary.beam | Bin 0 -> 4548 bytes .../ebin/Elixir.CCPrecompiler.beam | Bin 0 -> 28948 bytes .../cc_precompiler/ebin/cc_precompiler.app | 9 + .../dev/lib/db_connection/.mix/compile.elixir | Bin 0 -> 7484 bytes .../lib/db_connection/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../dev/lib/db_connection/.mix/compile.fetch | 0 .../ebin/Elixir.DBConnection.App.beam | Bin 0 -> 3052 bytes .../ebin/Elixir.DBConnection.Backoff.beam | Bin 0 -> 11244 bytes .../ebin/Elixir.DBConnection.Connection.beam | Bin 0 -> 39792 bytes .../Elixir.DBConnection.ConnectionError.beam | Bin 0 -> 4544 bytes ...ixir.DBConnection.ConnectionPool.Pool.beam | Bin 0 -> 5420 bytes .../Elixir.DBConnection.ConnectionPool.beam | Bin 0 -> 28544 bytes .../ebin/Elixir.DBConnection.EncodeError.beam | Bin 0 -> 3500 bytes .../ebin/Elixir.DBConnection.Holder.beam | Bin 0 -> 26460 bytes .../ebin/Elixir.DBConnection.LogEntry.beam | Bin 0 -> 5940 bytes ...Elixir.DBConnection.Ownership.Manager.beam | Bin 0 -> 35664 bytes .../Elixir.DBConnection.Ownership.Proxy.beam | Bin 0 -> 24220 bytes .../ebin/Elixir.DBConnection.Ownership.beam | Bin 0 -> 6888 bytes .../Elixir.DBConnection.OwnershipError.beam | Bin 0 -> 3676 bytes .../ebin/Elixir.DBConnection.Pool.beam | Bin 0 -> 2308 bytes .../Elixir.DBConnection.PrepareStream.beam | Bin 0 -> 3036 bytes .../ebin/Elixir.DBConnection.Query.beam | Bin 0 -> 6912 bytes .../ebin/Elixir.DBConnection.Stream.beam | Bin 0 -> 2988 bytes .../ebin/Elixir.DBConnection.Task.beam | Bin 0 -> 4644 bytes ...Elixir.DBConnection.TelemetryListener.beam | Bin 0 -> 10616 bytes .../Elixir.DBConnection.TransactionError.beam | Bin 0 -> 4896 bytes .../ebin/Elixir.DBConnection.Util.beam | Bin 0 -> 3660 bytes .../ebin/Elixir.DBConnection.Watcher.beam | Bin 0 -> 9120 bytes .../ebin/Elixir.DBConnection.beam | Bin 0 -> 66552 bytes ...Enumerable.DBConnection.PrepareStream.beam | Bin 0 -> 3712 bytes ...Elixir.Enumerable.DBConnection.Stream.beam | Bin 0 -> 3644 bytes .../lib/db_connection/ebin/db_connection.app | 31 + .../dev/lib/decimal/.mix/compile.elixir | Bin 0 -> 5012 bytes .../dev/lib/decimal/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/dev/lib/decimal/.mix/compile.fetch | 0 .../decimal/ebin/Elixir.Decimal.Context.beam | Bin 0 -> 6376 bytes .../decimal/ebin/Elixir.Decimal.Error.beam | Bin 0 -> 4276 bytes .../decimal/ebin/Elixir.Decimal.Macros.beam | Bin 0 -> 2224 bytes .../dev/lib/decimal/ebin/Elixir.Decimal.beam | Bin 0 -> 123244 bytes .../decimal/ebin/Elixir.Inspect.Decimal.beam | Bin 0 -> 2660 bytes .../ebin/Elixir.JSON.Encoder.Decimal.beam | Bin 0 -> 2624 bytes .../ebin/Elixir.String.Chars.Decimal.beam | Bin 0 -> 2472 bytes .../_build/dev/lib/decimal/ebin/decimal.app | 11 + .../dev/lib/dns_cluster/.mix/compile.elixir | Bin 0 -> 4404 bytes .../lib/dns_cluster/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../dev/lib/dns_cluster/.mix/compile.fetch | 0 .../ebin/Elixir.DNSCluster.Resolver.beam | Bin 0 -> 3948 bytes .../dns_cluster/ebin/Elixir.DNSCluster.beam | Bin 0 -> 17828 bytes .../dev/lib/dns_cluster/ebin/dns_cluster.app | 7 + .../_build/dev/lib/ecto/.mix/compile.elixir | Bin 0 -> 14720 bytes .../dev/lib/ecto/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/dev/lib/ecto/.mix/compile.fetch | 0 .../ebin/Elixir.Ecto.Adapter.Queryable.beam | Bin 0 -> 5720 bytes .../ecto/ebin/Elixir.Ecto.Adapter.Schema.beam | Bin 0 -> 3504 bytes .../ebin/Elixir.Ecto.Adapter.Storage.beam | Bin 0 -> 2256 bytes .../ebin/Elixir.Ecto.Adapter.Transaction.beam | Bin 0 -> 2268 bytes .../lib/ecto/ebin/Elixir.Ecto.Adapter.beam | Bin 0 -> 4460 bytes .../ecto/ebin/Elixir.Ecto.Application.beam | Bin 0 -> 2500 bytes .../Elixir.Ecto.Association.BelongsTo.beam | Bin 0 -> 17716 bytes .../ebin/Elixir.Ecto.Association.Has.beam | Bin 0 -> 24444 bytes .../Elixir.Ecto.Association.HasThrough.beam | Bin 0 -> 9636 bytes .../Elixir.Ecto.Association.ManyToMany.beam | Bin 0 -> 32344 bytes .../Elixir.Ecto.Association.NotLoaded.beam | Bin 0 -> 3080 bytes .../ecto/ebin/Elixir.Ecto.Association.beam | Bin 0 -> 36684 bytes .../lib/ecto/ebin/Elixir.Ecto.CastError.beam | Bin 0 -> 4720 bytes .../ecto/ebin/Elixir.Ecto.ChangeError.beam | Bin 0 -> 3464 bytes .../ebin/Elixir.Ecto.Changeset.Relation.beam | Bin 0 -> 38940 bytes .../lib/ecto/ebin/Elixir.Ecto.Changeset.beam | Bin 0 -> 169852 bytes .../ebin/Elixir.Ecto.ConstraintError.beam | Bin 0 -> 6164 bytes .../lib/ecto/ebin/Elixir.Ecto.Embedded.beam | Bin 0 -> 22972 bytes .../dev/lib/ecto/ebin/Elixir.Ecto.Enum.beam | Bin 0 -> 14732 bytes .../Elixir.Ecto.InvalidChangesetError.beam | Bin 0 -> 6140 bytes .../ebin/Elixir.Ecto.InvalidURLError.beam | Bin 0 -> 4412 bytes .../ecto/ebin/Elixir.Ecto.MigrationError.beam | Bin 0 -> 3484 bytes .../dev/lib/ecto/ebin/Elixir.Ecto.Multi.beam | Bin 0 -> 44312 bytes .../Elixir.Ecto.MultiplePrimaryKeyError.beam | Bin 0 -> 4860 bytes .../Elixir.Ecto.MultipleResultsError.beam | Bin 0 -> 4388 bytes .../Elixir.Ecto.NoPrimaryKeyFieldError.beam | Bin 0 -> 4288 bytes .../Elixir.Ecto.NoPrimaryKeyValueError.beam | Bin 0 -> 4272 bytes .../ecto/ebin/Elixir.Ecto.NoResultsError.beam | Bin 0 -> 4228 bytes .../ebin/Elixir.Ecto.ParameterizedType.beam | Bin 0 -> 9288 bytes .../lib/ecto/ebin/Elixir.Ecto.Query.API.beam | Bin 0 -> 21436 bytes .../ebin/Elixir.Ecto.Query.BooleanExpr.beam | Bin 0 -> 3004 bytes .../ebin/Elixir.Ecto.Query.Builder.CTE.beam | Bin 0 -> 14012 bytes ...Elixir.Ecto.Query.Builder.Combination.beam | Bin 0 -> 5136 bytes .../Elixir.Ecto.Query.Builder.Distinct.beam | Bin 0 -> 8612 bytes .../Elixir.Ecto.Query.Builder.Dynamic.beam | Bin 0 -> 11336 bytes .../Elixir.Ecto.Query.Builder.Filter.beam | Bin 0 -> 18620 bytes .../ebin/Elixir.Ecto.Query.Builder.From.beam | Bin 0 -> 17864 bytes .../Elixir.Ecto.Query.Builder.GroupBy.beam | Bin 0 -> 11500 bytes .../ebin/Elixir.Ecto.Query.Builder.Join.beam | Bin 0 -> 30216 bytes ...Elixir.Ecto.Query.Builder.LimitOffset.beam | Bin 0 -> 11288 bytes .../ebin/Elixir.Ecto.Query.Builder.Lock.beam | Bin 0 -> 5524 bytes .../Elixir.Ecto.Query.Builder.OrderBy.beam | Bin 0 -> 20808 bytes .../Elixir.Ecto.Query.Builder.Preload.beam | Bin 0 -> 16848 bytes .../Elixir.Ecto.Query.Builder.Select.beam | Bin 0 -> 35164 bytes .../Elixir.Ecto.Query.Builder.Update.beam | Bin 0 -> 13704 bytes .../Elixir.Ecto.Query.Builder.Windows.beam | Bin 0 -> 14780 bytes .../ecto/ebin/Elixir.Ecto.Query.Builder.beam | Bin 0 -> 101336 bytes .../ecto/ebin/Elixir.Ecto.Query.ByExpr.beam | Bin 0 -> 2896 bytes .../ebin/Elixir.Ecto.Query.CastError.beam | Bin 0 -> 4120 bytes .../ebin/Elixir.Ecto.Query.CompileError.beam | Bin 0 -> 3532 bytes .../ebin/Elixir.Ecto.Query.DynamicExpr.beam | Bin 0 -> 2848 bytes .../ecto/ebin/Elixir.Ecto.Query.FromExpr.beam | Bin 0 -> 3084 bytes .../ecto/ebin/Elixir.Ecto.Query.JoinExpr.beam | Bin 0 -> 3444 bytes .../ebin/Elixir.Ecto.Query.LimitExpr.beam | Bin 0 -> 2936 bytes .../ecto/ebin/Elixir.Ecto.Query.Planner.beam | Bin 0 -> 139468 bytes .../ebin/Elixir.Ecto.Query.QueryExpr.beam | Bin 0 -> 2812 bytes .../ebin/Elixir.Ecto.Query.SelectExpr.beam | Bin 0 -> 3220 bytes .../ecto/ebin/Elixir.Ecto.Query.Tagged.beam | Bin 0 -> 2728 bytes .../ecto/ebin/Elixir.Ecto.Query.Values.beam | Bin 0 -> 6728 bytes .../ebin/Elixir.Ecto.Query.WindowAPI.beam | Bin 0 -> 8084 bytes .../ecto/ebin/Elixir.Ecto.Query.WithExpr.beam | Bin 0 -> 2652 bytes .../dev/lib/ecto/ebin/Elixir.Ecto.Query.beam | Bin 0 -> 68076 bytes .../lib/ecto/ebin/Elixir.Ecto.QueryError.beam | Bin 0 -> 5228 bytes .../ecto/ebin/Elixir.Ecto.Queryable.Atom.beam | Bin 0 -> 3680 bytes .../ebin/Elixir.Ecto.Queryable.BitString.beam | Bin 0 -> 4320 bytes .../Elixir.Ecto.Queryable.Ecto.Query.beam | Bin 0 -> 2448 bytes .../Elixir.Ecto.Queryable.Ecto.SubQuery.beam | Bin 0 -> 4212 bytes .../ebin/Elixir.Ecto.Queryable.Tuple.beam | Bin 0 -> 4528 bytes .../lib/ecto/ebin/Elixir.Ecto.Queryable.beam | Bin 0 -> 6716 bytes .../lib/ecto/ebin/Elixir.Ecto.Repo.Assoc.beam | Bin 0 -> 9160 bytes .../ecto/ebin/Elixir.Ecto.Repo.Preloader.beam | Bin 0 -> 44916 bytes .../ecto/ebin/Elixir.Ecto.Repo.Queryable.beam | Bin 0 -> 37620 bytes .../ecto/ebin/Elixir.Ecto.Repo.Registry.beam | Bin 0 -> 8496 bytes .../ecto/ebin/Elixir.Ecto.Repo.Schema.beam | Bin 0 -> 71292 bytes .../ebin/Elixir.Ecto.Repo.Supervisor.beam | Bin 0 -> 17372 bytes .../ebin/Elixir.Ecto.Repo.Transaction.beam | Bin 0 -> 6356 bytes .../dev/lib/ecto/ebin/Elixir.Ecto.Repo.beam | Bin 0 -> 65260 bytes .../ecto/ebin/Elixir.Ecto.Schema.Loader.beam | Bin 0 -> 7268 bytes .../ebin/Elixir.Ecto.Schema.Metadata.beam | Bin 0 -> 3688 bytes .../dev/lib/ecto/ebin/Elixir.Ecto.Schema.beam | Bin 0 -> 76976 bytes .../ebin/Elixir.Ecto.StaleEntryError.beam | Bin 0 -> 5024 bytes .../lib/ecto/ebin/Elixir.Ecto.SubQuery.beam | Bin 0 -> 3068 bytes .../ecto/ebin/Elixir.Ecto.SubQueryError.beam | Bin 0 -> 4744 bytes .../dev/lib/ecto/ebin/Elixir.Ecto.Type.beam | Bin 0 -> 74032 bytes .../dev/lib/ecto/ebin/Elixir.Ecto.UUID.beam | Bin 0 -> 38748 bytes .../_build/dev/lib/ecto/ebin/Elixir.Ecto.beam | Bin 0 -> 20560 bytes ...ir.Inspect.Ecto.Association.NotLoaded.beam | Bin 0 -> 3160 bytes .../ebin/Elixir.Inspect.Ecto.Changeset.beam | Bin 0 -> 5968 bytes ...Elixir.Inspect.Ecto.Query.DynamicExpr.beam | Bin 0 -> 5844 bytes .../ecto/ebin/Elixir.Inspect.Ecto.Query.beam | Bin 0 -> 25296 bytes .../Elixir.Inspect.Ecto.Schema.Metadata.beam | Bin 0 -> 3384 bytes ...ON.Encoder.Ecto.Association.NotLoaded.beam | Bin 0 -> 4108 bytes ...xir.JSON.Encoder.Ecto.Schema.Metadata.beam | Bin 0 -> 3868 bytes ...on.Encoder.Ecto.Association.NotLoaded.beam | Bin 0 -> 4116 bytes ...ir.Jason.Encoder.Ecto.Schema.Metadata.beam | Bin 0 -> 3884 bytes .../dev/lib/ecto/ebin/Elixir.Mix.Ecto.beam | Bin 0 -> 9648 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Create.beam | Bin 0 -> 4876 bytes .../ecto/ebin/Elixir.Mix.Tasks.Ecto.Drop.beam | Bin 0 -> 6356 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Gen.Repo.beam | Bin 0 -> 7608 bytes .../lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.beam | Bin 0 -> 3132 bytes phoenix/_build/dev/lib/ecto/ebin/ecto.app | 92 + .../dev/lib/ecto_sql/.mix/compile.elixir | Bin 0 -> 8892 bytes .../dev/lib/ecto_sql/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../dev/lib/ecto_sql/.mix/compile.fetch | 0 ....Collectable.Ecto.Adapters.SQL.Stream.beam | Bin 0 -> 3420 bytes .../ebin/Elixir.Ecto.Adapter.Migration.beam | Bin 0 -> 3324 bytes .../ebin/Elixir.Ecto.Adapter.Structure.beam | Bin 0 -> 2672 bytes .../ebin/Elixir.Ecto.Adapters.MyXQL.beam | Bin 0 -> 40008 bytes .../ebin/Elixir.Ecto.Adapters.Postgres.beam | Bin 0 -> 40552 bytes .../Elixir.Ecto.Adapters.SQL.Application.beam | Bin 0 -> 2788 bytes .../Elixir.Ecto.Adapters.SQL.Connection.beam | Bin 0 -> 4580 bytes ....Ecto.Adapters.SQL.Sandbox.Connection.beam | Bin 0 -> 8952 bytes .../Elixir.Ecto.Adapters.SQL.Sandbox.beam | Bin 0 -> 19204 bytes .../ebin/Elixir.Ecto.Adapters.SQL.Stream.beam | Bin 0 -> 3524 bytes .../ebin/Elixir.Ecto.Adapters.SQL.beam | Bin 0 -> 164624 bytes .../ebin/Elixir.Ecto.Adapters.Tds.beam | Bin 0 -> 23048 bytes .../ebin/Elixir.Ecto.Migration.Command.beam | Bin 0 -> 2916 bytes .../Elixir.Ecto.Migration.Constraint.beam | Bin 0 -> 3500 bytes .../ebin/Elixir.Ecto.Migration.Index.beam | Bin 0 -> 4432 bytes .../ebin/Elixir.Ecto.Migration.Reference.beam | Bin 0 -> 4056 bytes .../ebin/Elixir.Ecto.Migration.Runner.beam | Bin 0 -> 32464 bytes ...Elixir.Ecto.Migration.SchemaMigration.beam | Bin 0 -> 18644 bytes .../ebin/Elixir.Ecto.Migration.Table.beam | Bin 0 -> 3404 bytes .../ecto_sql/ebin/Elixir.Ecto.Migration.beam | Bin 0 -> 51120 bytes .../ecto_sql/ebin/Elixir.Ecto.Migrator.beam | Bin 0 -> 45100 bytes ...r.Enumerable.Ecto.Adapters.SQL.Stream.beam | Bin 0 -> 4008 bytes .../lib/ecto_sql/ebin/Elixir.Mix.EctoSQL.beam | Bin 0 -> 5300 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Dump.beam | Bin 0 -> 7152 bytes .../Elixir.Mix.Tasks.Ecto.Gen.Migration.beam | Bin 0 -> 8360 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Load.beam | Bin 0 -> 9828 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Migrate.beam | Bin 0 -> 8000 bytes .../Elixir.Mix.Tasks.Ecto.Migrations.beam | Bin 0 -> 6084 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Rollback.beam | Bin 0 -> 7940 bytes .../_build/dev/lib/ecto_sql/ebin/ecto_sql.app | 35 + .../dev/lib/ecto_sqlite3/.mix/compile.elixir | Bin 0 -> 5366 bytes .../lib/ecto_sqlite3/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../dev/lib/ecto_sqlite3/.mix/compile.fetch | 0 .../Elixir.Ecto.Adapters.SQLite3.Codec.beam | Bin 0 -> 15880 bytes ...ixir.Ecto.Adapters.SQLite3.Connection.beam | Bin 0 -> 112012 bytes ...Elixir.Ecto.Adapters.SQLite3.DataType.beam | Bin 0 -> 7472 bytes ...r.Ecto.Adapters.SQLite3.TypeExtension.beam | Bin 0 -> 2312 bytes .../ebin/Elixir.Ecto.Adapters.SQLite3.beam | Bin 0 -> 32952 bytes .../lib/ecto_sqlite3/ebin/ecto_sqlite3.app | 12 + .../dev/lib/elixir_make/.mix/compile.elixir | Bin 0 -> 5581 bytes .../lib/elixir_make/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../dev/lib/elixir_make/.mix/compile.fetch | 0 .../ebin/Elixir.ElixirMake.Artefact.beam | Bin 0 -> 19500 bytes .../ebin/Elixir.ElixirMake.Compiler.beam | Bin 0 -> 14048 bytes .../Elixir.ElixirMake.Downloader.Httpc.beam | Bin 0 -> 6800 bytes .../ebin/Elixir.ElixirMake.Downloader.beam | Bin 0 -> 1832 bytes .../ebin/Elixir.ElixirMake.Precompiler.beam | Bin 0 -> 3984 bytes .../Elixir.Mix.Tasks.Compile.ElixirMake.beam | Bin 0 -> 10420 bytes .../Elixir.Mix.Tasks.ElixirMake.Checksum.beam | Bin 0 -> 10652 bytes ...lixir.Mix.Tasks.ElixirMake.Precompile.beam | Bin 0 -> 7560 bytes .../dev/lib/elixir_make/ebin/elixir_make.app | 14 + .../dev/lib/exqlite/.mix/compile.elixir | Bin 0 -> 6299 bytes .../dev/lib/exqlite/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/dev/lib/exqlite/.mix/compile.fetch | 0 ...ixir.DBConnection.Query.Exqlite.Query.beam | Bin 0 -> 3276 bytes .../Elixir.Enumerable.Exqlite.Stream.beam | Bin 0 -> 5036 bytes .../exqlite/ebin/Elixir.Exqlite.Basic.beam | Bin 0 -> 6188 bytes .../ebin/Elixir.Exqlite.Connection.beam | Bin 0 -> 38176 bytes .../exqlite/ebin/Elixir.Exqlite.Error.beam | Bin 0 -> 4432 bytes .../exqlite/ebin/Elixir.Exqlite.Flags.beam | Bin 0 -> 3264 bytes .../exqlite/ebin/Elixir.Exqlite.Pragma.beam | Bin 0 -> 7628 bytes .../exqlite/ebin/Elixir.Exqlite.Query.beam | Bin 0 -> 4444 bytes .../exqlite/ebin/Elixir.Exqlite.Result.beam | Bin 0 -> 3672 bytes .../exqlite/ebin/Elixir.Exqlite.Sqlite3.beam | Bin 0 -> 25568 bytes .../ebin/Elixir.Exqlite.Sqlite3NIF.beam | Bin 0 -> 10264 bytes .../exqlite/ebin/Elixir.Exqlite.Stream.beam | Bin 0 -> 2940 bytes .../ebin/Elixir.Exqlite.TypeExtension.beam | Bin 0 -> 1924 bytes .../dev/lib/exqlite/ebin/Elixir.Exqlite.beam | Bin 0 -> 10504 bytes .../Elixir.String.Chars.Exqlite.Query.beam | Bin 0 -> 2648 bytes .../_build/dev/lib/exqlite/ebin/exqlite.app | 15 + .../dev/lib/exqlite/priv/sqlite3_nif.so | Bin 0 -> 1663120 bytes .../_build/dev/lib/finch/.mix/compile.elixir | Bin 0 -> 7475 bytes .../dev/lib/finch/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/dev/lib/finch/.mix/compile.fetch | 0 .../lib/finch/ebin/Elixir.Finch.Error.beam | Bin 0 -> 3936 bytes .../finch/ebin/Elixir.Finch.HTTP1.Conn.beam | Bin 0 -> 20368 bytes .../ebin/Elixir.Finch.HTTP1.Pool.State.beam | Bin 0 -> 3124 bytes .../finch/ebin/Elixir.Finch.HTTP1.Pool.beam | Bin 0 -> 24444 bytes .../ebin/Elixir.Finch.HTTP1.PoolMetrics.beam | Bin 0 -> 7348 bytes .../finch/ebin/Elixir.Finch.HTTP2.Pool.beam | Bin 0 -> 55552 bytes .../ebin/Elixir.Finch.HTTP2.PoolMetrics.beam | Bin 0 -> 6592 bytes .../Elixir.Finch.HTTP2.RequestStream.beam | Bin 0 -> 8040 bytes .../dev/lib/finch/ebin/Elixir.Finch.Pool.beam | Bin 0 -> 4152 bytes .../finch/ebin/Elixir.Finch.PoolManager.beam | Bin 0 -> 16884 bytes .../lib/finch/ebin/Elixir.Finch.Request.beam | Bin 0 -> 12128 bytes .../lib/finch/ebin/Elixir.Finch.Response.beam | Bin 0 -> 2976 bytes .../dev/lib/finch/ebin/Elixir.Finch.SSL.beam | Bin 0 -> 2872 bytes .../finch/ebin/Elixir.Finch.Telemetry.beam | Bin 0 -> 6828 bytes .../dev/lib/finch/ebin/Elixir.Finch.beam | Bin 0 -> 33848 bytes phoenix/_build/dev/lib/finch/ebin/finch.app | 17 + .../_build/dev/lib/hpax/.mix/compile.elixir | Bin 0 -> 4882 bytes .../dev/lib/hpax/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/dev/lib/hpax/.mix/compile.fetch | 0 .../lib/hpax/ebin/Elixir.HPAX.Huffman.beam | Bin 0 -> 39964 bytes .../dev/lib/hpax/ebin/Elixir.HPAX.Table.beam | Bin 0 -> 28192 bytes .../dev/lib/hpax/ebin/Elixir.HPAX.Types.beam | Bin 0 -> 6160 bytes .../_build/dev/lib/hpax/ebin/Elixir.HPAX.beam | Bin 0 -> 15744 bytes phoenix/_build/dev/lib/hpax/ebin/hpax.app | 8 + .../_build/dev/lib/jason/.mix/compile.elixir | Bin 0 -> 6403 bytes .../dev/lib/jason/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/dev/lib/jason/.mix/compile.fetch | 0 ...Elixir.Enumerable.Jason.OrderedObject.beam | Bin 0 -> 4672 bytes .../lib/jason/ebin/Elixir.Jason.Codegen.beam | Bin 0 -> 9272 bytes .../jason/ebin/Elixir.Jason.DecodeError.beam | Bin 0 -> 5516 bytes .../ebin/Elixir.Jason.Decoder.Unescape.beam | Bin 0 -> 17864 bytes .../lib/jason/ebin/Elixir.Jason.Decoder.beam | Bin 0 -> 125176 bytes .../lib/jason/ebin/Elixir.Jason.Encode.beam | Bin 0 -> 67784 bytes .../jason/ebin/Elixir.Jason.EncodeError.beam | Bin 0 -> 5036 bytes .../jason/ebin/Elixir.Jason.Encoder.Any.beam | Bin 0 -> 7752 bytes .../jason/ebin/Elixir.Jason.Encoder.Atom.beam | Bin 0 -> 2520 bytes .../ebin/Elixir.Jason.Encoder.BitString.beam | Bin 0 -> 2916 bytes .../jason/ebin/Elixir.Jason.Encoder.Date.beam | Bin 0 -> 2596 bytes .../ebin/Elixir.Jason.Encoder.DateTime.beam | Bin 0 -> 2616 bytes .../ebin/Elixir.Jason.Encoder.Decimal.beam | Bin 0 -> 2608 bytes .../ebin/Elixir.Jason.Encoder.Float.beam | Bin 0 -> 2524 bytes .../ebin/Elixir.Jason.Encoder.Integer.beam | Bin 0 -> 2536 bytes .../Elixir.Jason.Encoder.Jason.Fragment.beam | Bin 0 -> 2608 bytes ...xir.Jason.Encoder.Jason.OrderedObject.beam | Bin 0 -> 2728 bytes .../jason/ebin/Elixir.Jason.Encoder.List.beam | Bin 0 -> 2520 bytes .../jason/ebin/Elixir.Jason.Encoder.Map.beam | Bin 0 -> 2516 bytes .../Elixir.Jason.Encoder.NaiveDateTime.beam | Bin 0 -> 2640 bytes .../jason/ebin/Elixir.Jason.Encoder.Time.beam | Bin 0 -> 2596 bytes .../lib/jason/ebin/Elixir.Jason.Encoder.beam | Bin 0 -> 5724 bytes .../jason/ebin/Elixir.Jason.Formatter.beam | Bin 0 -> 12824 bytes .../lib/jason/ebin/Elixir.Jason.Fragment.beam | Bin 0 -> 3456 bytes .../lib/jason/ebin/Elixir.Jason.Helpers.beam | Bin 0 -> 6004 bytes .../ebin/Elixir.Jason.OrderedObject.beam | Bin 0 -> 7808 bytes .../lib/jason/ebin/Elixir.Jason.Sigil.beam | Bin 0 -> 3724 bytes .../dev/lib/jason/ebin/Elixir.Jason.beam | Bin 0 -> 9104 bytes phoenix/_build/dev/lib/jason/ebin/jason.app | 27 + .../_build/dev/lib/mime/.mix/compile.elixir | Bin 0 -> 4302 bytes .../dev/lib/mime/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/dev/lib/mime/.mix/compile.fetch | 0 .../_build/dev/lib/mime/ebin/Elixir.MIME.beam | Bin 0 -> 26084 bytes phoenix/_build/dev/lib/mime/ebin/mime.app | 11 + .../_build/dev/lib/mint/.mix/compile.elixir | Bin 0 -> 8257 bytes .../dev/lib/mint/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/dev/lib/mint/.mix/compile.erlang | Bin 0 -> 107 bytes .../_build/dev/lib/mint/.mix/compile.fetch | 0 .../mint/ebin/Elixir.Mint.Application.beam | Bin 0 -> 2956 bytes .../lib/mint/ebin/Elixir.Mint.Core.Conn.beam | Bin 0 -> 3452 bytes .../mint/ebin/Elixir.Mint.Core.Headers.beam | Bin 0 -> 8404 bytes .../ebin/Elixir.Mint.Core.Transport.SSL.beam | Bin 0 -> 35456 bytes .../ebin/Elixir.Mint.Core.Transport.TCP.beam | Bin 0 -> 6480 bytes .../mint/ebin/Elixir.Mint.Core.Transport.beam | Bin 0 -> 2808 bytes .../lib/mint/ebin/Elixir.Mint.Core.Util.beam | Bin 0 -> 5900 bytes .../dev/lib/mint/ebin/Elixir.Mint.HTTP.beam | Bin 0 -> 43296 bytes .../mint/ebin/Elixir.Mint.HTTP1.Parse.beam | Bin 0 -> 9016 bytes .../mint/ebin/Elixir.Mint.HTTP1.Request.beam | Bin 0 -> 5596 bytes .../mint/ebin/Elixir.Mint.HTTP1.Response.beam | Bin 0 -> 3636 bytes .../dev/lib/mint/ebin/Elixir.Mint.HTTP1.beam | Bin 0 -> 78576 bytes .../mint/ebin/Elixir.Mint.HTTP2.Frame.beam | Bin 0 -> 31264 bytes .../dev/lib/mint/ebin/Elixir.Mint.HTTP2.beam | Bin 0 -> 147020 bytes .../lib/mint/ebin/Elixir.Mint.HTTPError.beam | Bin 0 -> 4580 bytes .../lib/mint/ebin/Elixir.Mint.Negotiate.beam | Bin 0 -> 7012 bytes .../mint/ebin/Elixir.Mint.TransportError.beam | Bin 0 -> 5492 bytes .../mint/ebin/Elixir.Mint.TunnelProxy.beam | Bin 0 -> 9636 bytes .../dev/lib/mint/ebin/Elixir.Mint.Types.beam | Bin 0 -> 2648 bytes .../mint/ebin/Elixir.Mint.UnsafeProxy.beam | Bin 0 -> 21300 bytes phoenix/_build/dev/lib/mint/ebin/mint.app | 20 + .../_build/dev/lib/mint/ebin/mint_shims.beam | Bin 0 -> 17080 bytes .../lib/nimble_options/.mix/compile.elixir | Bin 0 -> 5371 bytes .../nimble_options/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../dev/lib/nimble_options/.mix/compile.fetch | 0 .../ebin/Elixir.NimbleOptions.Docs.beam | Bin 0 -> 15452 bytes .../Elixir.NimbleOptions.ValidationError.beam | Bin 0 -> 4976 bytes .../ebin/Elixir.NimbleOptions.beam | Bin 0 -> 50076 bytes .../nimble_options/ebin/nimble_options.app | 8 + .../dev/lib/nimble_pool/.mix/compile.elixir | Bin 0 -> 5365 bytes .../lib/nimble_pool/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../dev/lib/nimble_pool/.mix/compile.fetch | 0 .../ebin/Elixir.NimblePool.Application.beam | Bin 0 -> 2520 bytes .../nimble_pool/ebin/Elixir.NimblePool.beam | Bin 0 -> 47908 bytes .../dev/lib/nimble_pool/ebin/nimble_pool.app | 8 + .../dev/lib/phoenix/.mix/compile.elixir | Bin 0 -> 17294 bytes .../dev/lib/phoenix/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/dev/lib/phoenix/.mix/compile.fetch | 0 ...Elixir.Inspect.Phoenix.Socket.Message.beam | Bin 0 -> 3284 bytes .../ebin/Elixir.Mix.Phoenix.Context.beam | Bin 0 -> 16152 bytes .../ebin/Elixir.Mix.Phoenix.Schema.beam | Bin 0 -> 44560 bytes .../ebin/Elixir.Mix.Phoenix.Scope.beam | Bin 0 -> 12440 bytes .../lib/phoenix/ebin/Elixir.Mix.Phoenix.beam | Bin 0 -> 21700 bytes .../Elixir.Mix.Tasks.Compile.Phoenix.beam | Bin 0 -> 4940 bytes .../Elixir.Mix.Tasks.Phx.Digest.Clean.beam | Bin 0 -> 4964 bytes .../ebin/Elixir.Mix.Tasks.Phx.Digest.beam | Bin 0 -> 4804 bytes ...Mix.Tasks.Phx.Gen.Auth.HashingLibrary.beam | Bin 0 -> 5856 bytes ...lixir.Mix.Tasks.Phx.Gen.Auth.Injector.beam | Bin 0 -> 20040 bytes ...ixir.Mix.Tasks.Phx.Gen.Auth.Migration.beam | Bin 0 -> 4796 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.beam | Bin 0 -> 62584 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Cert.beam | Bin 0 -> 12952 bytes .../Elixir.Mix.Tasks.Phx.Gen.Channel.beam | Bin 0 -> 7800 bytes .../Elixir.Mix.Tasks.Phx.Gen.Context.beam | Bin 0 -> 27936 bytes .../Elixir.Mix.Tasks.Phx.Gen.Embedded.beam | Bin 0 -> 10336 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Html.beam | Bin 0 -> 25724 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Json.beam | Bin 0 -> 17624 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Live.beam | Bin 0 -> 28552 bytes .../Elixir.Mix.Tasks.Phx.Gen.Notifier.beam | Bin 0 -> 14040 bytes .../Elixir.Mix.Tasks.Phx.Gen.Presence.beam | Bin 0 -> 5008 bytes .../Elixir.Mix.Tasks.Phx.Gen.Release.beam | Bin 0 -> 22740 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Schema.beam | Bin 0 -> 17568 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Secret.beam | Bin 0 -> 3404 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Socket.beam | Bin 0 -> 7160 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.beam | Bin 0 -> 2508 bytes .../ebin/Elixir.Mix.Tasks.Phx.Routes.beam | Bin 0 -> 10440 bytes .../ebin/Elixir.Mix.Tasks.Phx.Server.beam | Bin 0 -> 3636 bytes .../phoenix/ebin/Elixir.Mix.Tasks.Phx.beam | Bin 0 -> 3432 bytes .../Elixir.Phoenix.ActionClauseError.beam | Bin 0 -> 4560 bytes .../ebin/Elixir.Phoenix.Channel.Server.beam | Bin 0 -> 34224 bytes .../phoenix/ebin/Elixir.Phoenix.Channel.beam | Bin 0 -> 23284 bytes ...ir.Phoenix.ChannelTest.NoopSerializer.beam | Bin 0 -> 4204 bytes .../ebin/Elixir.Phoenix.ChannelTest.beam | Bin 0 -> 34928 bytes ...ixir.Phoenix.CodeReloader.MixListener.beam | Bin 0 -> 9584 bytes .../Elixir.Phoenix.CodeReloader.Proxy.beam | Bin 0 -> 8412 bytes .../Elixir.Phoenix.CodeReloader.Server.beam | Bin 0 -> 25312 bytes .../ebin/Elixir.Phoenix.CodeReloader.beam | Bin 0 -> 44500 bytes .../phoenix/ebin/Elixir.Phoenix.Config.beam | Bin 0 -> 14280 bytes .../phoenix/ebin/Elixir.Phoenix.ConnTest.beam | Bin 0 -> 39692 bytes .../Elixir.Phoenix.Controller.Pipeline.beam | Bin 0 -> 24092 bytes .../ebin/Elixir.Phoenix.Controller.beam | Bin 0 -> 90860 bytes .../phoenix/ebin/Elixir.Phoenix.Debug.beam | Bin 0 -> 7272 bytes .../Elixir.Phoenix.Digester.Compressor.beam | Bin 0 -> 2356 bytes .../ebin/Elixir.Phoenix.Digester.Gzip.beam | Bin 0 -> 2812 bytes .../phoenix/ebin/Elixir.Phoenix.Digester.beam | Bin 0 -> 26844 bytes ...lixir.Phoenix.Endpoint.Cowboy2Adapter.beam | Bin 0 -> 11908 bytes .../Elixir.Phoenix.Endpoint.RenderErrors.beam | Bin 0 -> 21128 bytes .../Elixir.Phoenix.Endpoint.Supervisor.beam | Bin 0 -> 33392 bytes ...r.Phoenix.Endpoint.SyncCodeReloadPlug.beam | Bin 0 -> 3556 bytes .../ebin/Elixir.Phoenix.Endpoint.Watcher.beam | Bin 0 -> 5560 bytes .../phoenix/ebin/Elixir.Phoenix.Endpoint.beam | Bin 0 -> 82472 bytes .../phoenix/ebin/Elixir.Phoenix.Flash.beam | Bin 0 -> 3108 bytes .../phoenix/ebin/Elixir.Phoenix.Logger.beam | Bin 0 -> 24632 bytes .../Elixir.Phoenix.MissingParamError.beam | Bin 0 -> 4604 bytes .../phoenix/ebin/Elixir.Phoenix.Naming.beam | Bin 0 -> 6228 bytes .../Elixir.Phoenix.NotAcceptableError.beam | Bin 0 -> 3972 bytes .../ebin/Elixir.Phoenix.Param.Any.beam | Bin 0 -> 7284 bytes .../ebin/Elixir.Phoenix.Param.Atom.beam | Bin 0 -> 2764 bytes .../ebin/Elixir.Phoenix.Param.BitString.beam | Bin 0 -> 2480 bytes .../ebin/Elixir.Phoenix.Param.Float.beam | Bin 0 -> 2516 bytes .../ebin/Elixir.Phoenix.Param.Integer.beam | Bin 0 -> 2516 bytes .../ebin/Elixir.Phoenix.Param.Map.beam | Bin 0 -> 2840 bytes .../phoenix/ebin/Elixir.Phoenix.Param.beam | Bin 0 -> 5628 bytes .../ebin/Elixir.Phoenix.Presence.Tracker.beam | Bin 0 -> 4656 bytes .../phoenix/ebin/Elixir.Phoenix.Presence.beam | Bin 0 -> 52328 bytes ...lixir.Phoenix.Router.ConsoleFormatter.beam | Bin 0 -> 8552 bytes .../ebin/Elixir.Phoenix.Router.Helpers.beam | Bin 0 -> 49604 bytes ...ixir.Phoenix.Router.MalformedURIError.beam | Bin 0 -> 3692 bytes .../Elixir.Phoenix.Router.NoRouteError.beam | Bin 0 -> 5028 bytes .../ebin/Elixir.Phoenix.Router.Resource.beam | Bin 0 -> 8964 bytes .../ebin/Elixir.Phoenix.Router.Route.beam | Bin 0 -> 17044 bytes .../ebin/Elixir.Phoenix.Router.Scope.beam | Bin 0 -> 19512 bytes .../phoenix/ebin/Elixir.Phoenix.Router.beam | Bin 0 -> 73752 bytes .../ebin/Elixir.Phoenix.Socket.Broadcast.beam | Bin 0 -> 3084 bytes ...ir.Phoenix.Socket.InvalidMessageError.beam | Bin 0 -> 3572 bytes .../ebin/Elixir.Phoenix.Socket.Message.beam | Bin 0 -> 4988 bytes .../Elixir.Phoenix.Socket.PoolDrainer.beam | Bin 0 -> 11128 bytes .../Elixir.Phoenix.Socket.PoolSupervisor.beam | Bin 0 -> 6568 bytes .../ebin/Elixir.Phoenix.Socket.Reply.beam | Bin 0 -> 3296 bytes .../Elixir.Phoenix.Socket.Serializer.beam | Bin 0 -> 2180 bytes .../ebin/Elixir.Phoenix.Socket.Transport.beam | Bin 0 -> 30920 bytes ...ixir.Phoenix.Socket.V1.JSONSerializer.beam | Bin 0 -> 5752 bytes ...ixir.Phoenix.Socket.V2.JSONSerializer.beam | Bin 0 -> 12544 bytes .../phoenix/ebin/Elixir.Phoenix.Socket.beam | Bin 0 -> 46260 bytes .../phoenix/ebin/Elixir.Phoenix.Token.beam | Bin 0 -> 8896 bytes ...ir.Phoenix.Transports.LongPoll.Server.beam | Bin 0 -> 15052 bytes .../Elixir.Phoenix.Transports.LongPoll.beam | Bin 0 -> 16632 bytes .../Elixir.Phoenix.Transports.WebSocket.beam | Bin 0 -> 8584 bytes .../ebin/Elixir.Phoenix.VerifiedRoutes.beam | Bin 0 -> 47144 bytes .../dev/lib/phoenix/ebin/Elixir.Phoenix.beam | Bin 0 -> 5572 bytes ...g.Exception.Phoenix.ActionClauseError.beam | Bin 0 -> 2704 bytes .../_build/dev/lib/phoenix/ebin/phoenix.app | 102 + phoenix/_build/dev/lib/phoenix/priv | 1 + .../dev/lib/phoenix_ecto/.mix/compile.elixir | Bin 0 -> 5750 bytes .../lib/phoenix_ecto/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../dev/lib/phoenix_ecto/.mix/compile.fetch | 0 .../Elixir.Phoenix.Ecto.CheckRepoStatus.beam | Bin 0 -> 7924 bytes ...ir.Phoenix.Ecto.PendingMigrationError.beam | Bin 0 -> 4992 bytes .../ebin/Elixir.Phoenix.Ecto.SQL.Sandbox.beam | Bin 0 -> 14988 bytes ...lixir.Phoenix.Ecto.SQL.SandboxSession.beam | Bin 0 -> 8768 bytes ...r.Phoenix.Ecto.StorageNotCreatedError.beam | Bin 0 -> 3964 bytes .../ebin/Elixir.Phoenix.Ecto.beam | Bin 0 -> 2680 bytes .../Elixir.Plug.Exception.Ecto.CastError.beam | Bin 0 -> 2664 bytes ...ir.Plug.Exception.Ecto.NoResultsError.beam | Bin 0 -> 2692 bytes ...r.Plug.Exception.Ecto.Query.CastError.beam | Bin 0 -> 2696 bytes ...r.Plug.Exception.Ecto.StaleEntryError.beam | Bin 0 -> 2696 bytes ...xir.Plug.Exception.Ecto.SubQueryError.beam | Bin 0 -> 2952 bytes ...on.Phoenix.Ecto.PendingMigrationError.beam | Bin 0 -> 4192 bytes ...n.Phoenix.Ecto.StorageNotCreatedError.beam | Bin 0 -> 3836 bytes .../lib/phoenix_ecto/ebin/phoenix_ecto.app | 22 + .../lib/phoenix_pubsub/.mix/compile.elixir | Bin 0 -> 6306 bytes .../phoenix_pubsub/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../dev/lib/phoenix_pubsub/.mix/compile.fetch | 0 .../ebin/Elixir.Phoenix.PubSub.Adapter.beam | Bin 0 -> 2512 bytes .../Elixir.Phoenix.PubSub.Application.beam | Bin 0 -> 2616 bytes .../Elixir.Phoenix.PubSub.BroadcastError.beam | Bin 0 -> 3884 bytes .../ebin/Elixir.Phoenix.PubSub.PG2.beam | Bin 0 -> 8040 bytes .../ebin/Elixir.Phoenix.PubSub.PG2Worker.beam | Bin 0 -> 7004 bytes .../Elixir.Phoenix.PubSub.Supervisor.beam | Bin 0 -> 5488 bytes .../ebin/Elixir.Phoenix.PubSub.beam | Bin 0 -> 15300 bytes .../ebin/Elixir.Phoenix.Tracker.Clock.beam | Bin 0 -> 7652 bytes ...lixir.Phoenix.Tracker.DeltaGeneration.beam | Bin 0 -> 9196 bytes .../ebin/Elixir.Phoenix.Tracker.Replica.beam | Bin 0 -> 10372 bytes .../ebin/Elixir.Phoenix.Tracker.Shard.beam | Bin 0 -> 51004 bytes ...lixir.Phoenix.Tracker.ShutdownHandler.beam | Bin 0 -> 6976 bytes .../ebin/Elixir.Phoenix.Tracker.State.beam | Bin 0 -> 53116 bytes .../ebin/Elixir.Phoenix.Tracker.beam | Bin 0 -> 17508 bytes .../phoenix_pubsub/ebin/phoenix_pubsub.app | 21 + .../lib/phoenix_template/.mix/compile.elixir | Bin 0 -> 4826 bytes .../phoenix_template/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/phoenix_template/.mix/compile.fetch | 0 .../Elixir.Phoenix.Template.EExEngine.beam | Bin 0 -> 4604 bytes .../ebin/Elixir.Phoenix.Template.Engine.beam | Bin 0 -> 1956 bytes .../Elixir.Phoenix.Template.ExsEngine.beam | Bin 0 -> 2052 bytes .../ebin/Elixir.Phoenix.Template.beam | Bin 0 -> 27272 bytes .../ebin/phoenix_template.app | 10 + .../_build/dev/lib/plug/.mix/compile.elixir | Bin 0 -> 11802 bytes .../dev/lib/plug/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/dev/lib/plug/.mix/compile.erlang | Bin 0 -> 111 bytes .../_build/dev/lib/plug/.mix/compile.fetch | 0 .../plug/ebin/Elixir.Inspect.Plug.Conn.beam | Bin 0 -> 3132 bytes .../ebin/Elixir.Plug.Adapters.Cowboy.beam | Bin 0 -> 6064 bytes .../ebin/Elixir.Plug.Adapters.Test.Conn.beam | Bin 0 -> 21564 bytes .../plug/ebin/Elixir.Plug.Application.beam | Bin 0 -> 2648 bytes .../ebin/Elixir.Plug.BadRequestError.beam | Bin 0 -> 3772 bytes .../lib/plug/ebin/Elixir.Plug.BasicAuth.beam | Bin 0 -> 9320 bytes .../lib/plug/ebin/Elixir.Plug.Builder.beam | Bin 0 -> 20736 bytes ....CSRFProtection.InvalidCSRFTokenError.beam | Bin 0 -> 4280 bytes ...ection.InvalidCrossOriginRequestError.beam | Bin 0 -> 4256 bytes .../plug/ebin/Elixir.Plug.CSRFProtection.beam | Bin 0 -> 18792 bytes .../plug/ebin/Elixir.Plug.Conn.Adapter.beam | Bin 0 -> 9520 bytes .../Elixir.Plug.Conn.AlreadySentError.beam | Bin 0 -> 3624 bytes .../Elixir.Plug.Conn.CookieOverflowError.beam | Bin 0 -> 3676 bytes .../plug/ebin/Elixir.Plug.Conn.Cookies.beam | Bin 0 -> 9940 bytes .../Elixir.Plug.Conn.InvalidHeaderError.beam | Bin 0 -> 3648 bytes .../Elixir.Plug.Conn.InvalidQueryError.beam | Bin 0 -> 3780 bytes .../ebin/Elixir.Plug.Conn.NotSentError.beam | Bin 0 -> 3664 bytes .../lib/plug/ebin/Elixir.Plug.Conn.Query.beam | Bin 0 -> 17752 bytes .../plug/ebin/Elixir.Plug.Conn.Status.beam | Bin 0 -> 18900 bytes .../plug/ebin/Elixir.Plug.Conn.Unfetched.beam | Bin 0 -> 5600 bytes .../lib/plug/ebin/Elixir.Plug.Conn.Utils.beam | Bin 0 -> 13416 bytes .../ebin/Elixir.Plug.Conn.WrapperError.beam | Bin 0 -> 6072 bytes .../dev/lib/plug/ebin/Elixir.Plug.Conn.beam | Bin 0 -> 142664 bytes .../lib/plug/ebin/Elixir.Plug.Debugger.beam | Bin 0 -> 211524 bytes .../plug/ebin/Elixir.Plug.ErrorHandler.beam | Bin 0 -> 15356 bytes .../plug/ebin/Elixir.Plug.Exception.Any.beam | Bin 0 -> 2896 bytes .../lib/plug/ebin/Elixir.Plug.Exception.beam | Bin 0 -> 5956 bytes .../dev/lib/plug/ebin/Elixir.Plug.HTML.beam | Bin 0 -> 4220 bytes .../dev/lib/plug/ebin/Elixir.Plug.Head.beam | Bin 0 -> 3584 bytes .../dev/lib/plug/ebin/Elixir.Plug.Logger.beam | Bin 0 -> 4768 bytes .../dev/lib/plug/ebin/Elixir.Plug.MIME.beam | Bin 0 -> 3928 bytes .../plug/ebin/Elixir.Plug.MethodOverride.beam | Bin 0 -> 5696 bytes .../Elixir.Plug.Parsers.BadEncodingError.beam | Bin 0 -> 3680 bytes .../plug/ebin/Elixir.Plug.Parsers.JSON.beam | Bin 0 -> 8092 bytes .../ebin/Elixir.Plug.Parsers.MULTIPART.beam | Bin 0 -> 14044 bytes .../ebin/Elixir.Plug.Parsers.ParseError.beam | Bin 0 -> 4092 bytes ...xir.Plug.Parsers.RequestTooLargeError.beam | Bin 0 -> 3956 bytes .../ebin/Elixir.Plug.Parsers.URLENCODED.beam | Bin 0 -> 4588 bytes ...lug.Parsers.UnsupportedMediaTypeError.beam | Bin 0 -> 3976 bytes .../lib/plug/ebin/Elixir.Plug.Parsers.beam | Bin 0 -> 12688 bytes .../lib/plug/ebin/Elixir.Plug.RequestId.beam | Bin 0 -> 5112 bytes .../lib/plug/ebin/Elixir.Plug.RewriteOn.beam | Bin 0 -> 6588 bytes .../Elixir.Plug.Router.InvalidSpecError.beam | Bin 0 -> 3592 bytes .../Elixir.Plug.Router.MalformedURIError.beam | Bin 0 -> 3676 bytes .../plug/ebin/Elixir.Plug.Router.Utils.beam | Bin 0 -> 16132 bytes .../dev/lib/plug/ebin/Elixir.Plug.Router.beam | Bin 0 -> 42204 bytes .../dev/lib/plug/ebin/Elixir.Plug.SSL.beam | Bin 0 -> 23064 bytes .../plug/ebin/Elixir.Plug.Session.COOKIE.beam | Bin 0 -> 12516 bytes .../plug/ebin/Elixir.Plug.Session.ETS.beam | Bin 0 -> 5196 bytes .../plug/ebin/Elixir.Plug.Session.Store.beam | Bin 0 -> 3404 bytes .../lib/plug/ebin/Elixir.Plug.Session.beam | Bin 0 -> 7020 bytes .../Elixir.Plug.Static.InvalidPathError.beam | Bin 0 -> 3700 bytes .../dev/lib/plug/ebin/Elixir.Plug.Static.beam | Bin 0 -> 21560 bytes .../lib/plug/ebin/Elixir.Plug.Telemetry.beam | Bin 0 -> 5212 bytes .../dev/lib/plug/ebin/Elixir.Plug.Test.beam | Bin 0 -> 21224 bytes .../plug/ebin/Elixir.Plug.TimeoutError.beam | Bin 0 -> 3704 bytes .../ebin/Elixir.Plug.Upload.Supervisor.beam | Bin 0 -> 4584 bytes .../ebin/Elixir.Plug.Upload.Terminator.beam | Bin 0 -> 7272 bytes .../dev/lib/plug/ebin/Elixir.Plug.Upload.beam | Bin 0 -> 16624 bytes .../plug/ebin/Elixir.Plug.UploadError.beam | Bin 0 -> 3452 bytes .../_build/dev/lib/plug/ebin/Elixir.Plug.beam | Bin 0 -> 10404 bytes phoenix/_build/dev/lib/plug/ebin/plug.app | 54 + .../dev/lib/plug/ebin/plug_multipart.beam | Bin 0 -> 21752 bytes .../dev/lib/plug_crypto/.mix/compile.elixir | Bin 0 -> 5036 bytes .../lib/plug_crypto/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../dev/lib/plug_crypto/.mix/compile.fetch | 0 .../ebin/Elixir.Plug.Crypto.Application.beam | Bin 0 -> 2832 bytes .../ebin/Elixir.Plug.Crypto.KeyGenerator.beam | Bin 0 -> 5612 bytes .../Elixir.Plug.Crypto.MessageEncryptor.beam | Bin 0 -> 12168 bytes .../Elixir.Plug.Crypto.MessageVerifier.beam | Bin 0 -> 5928 bytes .../plug_crypto/ebin/Elixir.Plug.Crypto.beam | Bin 0 -> 16556 bytes .../dev/lib/plug_crypto/ebin/plug_crypto.app | 11 + .../_build/dev/lib/req/.mix/compile.elixir | Bin 0 -> 8719 bytes .../dev/lib/req/.mix/compile.elixir_scm | Bin 0 -> 39 bytes phoenix/_build/dev/lib/req/.mix/compile.fetch | 0 ...Collectable.Req.Utils.CollectWithHash.beam | Bin 0 -> 3904 bytes .../Elixir.Enumerable.Req.Response.Async.beam | Bin 0 -> 7448 bytes .../req/ebin/Elixir.Inspect.Req.Request.beam | Bin 0 -> 8284 bytes .../Elixir.Inspect.Req.Response.Async.beam | Bin 0 -> 3040 bytes .../lib/req/ebin/Elixir.Req.Application.beam | Bin 0 -> 2852 bytes .../lib/req/ebin/Elixir.Req.ArchiveError.beam | Bin 0 -> 4656 bytes .../Elixir.Req.ChecksumMismatchError.beam | Bin 0 -> 4052 bytes .../req/ebin/Elixir.Req.DecompressError.beam | Bin 0 -> 4344 bytes .../dev/lib/req/ebin/Elixir.Req.Fields.beam | Bin 0 -> 8764 bytes .../dev/lib/req/ebin/Elixir.Req.Finch.beam | Bin 0 -> 20572 bytes .../lib/req/ebin/Elixir.Req.HTTPError.beam | Bin 0 -> 4596 bytes .../dev/lib/req/ebin/Elixir.Req.Request.beam | Bin 0 -> 45788 bytes .../req/ebin/Elixir.Req.Response.Async.beam | Bin 0 -> 3404 bytes .../dev/lib/req/ebin/Elixir.Req.Response.beam | Bin 0 -> 13964 bytes .../dev/lib/req/ebin/Elixir.Req.Steps.beam | Bin 0 -> 88064 bytes .../lib/req/ebin/Elixir.Req.Test.Adapter.beam | Bin 0 -> 7376 bytes .../req/ebin/Elixir.Req.Test.Ownership.beam | Bin 0 -> 37244 bytes .../ebin/Elixir.Req.Test.OwnershipError.beam | Bin 0 -> 4880 bytes .../dev/lib/req/ebin/Elixir.Req.Test.beam | Bin 0 -> 29120 bytes .../Elixir.Req.TooManyRedirectsError.beam | Bin 0 -> 3844 bytes .../req/ebin/Elixir.Req.TransportError.beam | Bin 0 -> 3760 bytes .../Elixir.Req.Utils.CollectWithHash.beam | Bin 0 -> 2688 bytes .../dev/lib/req/ebin/Elixir.Req.Utils.beam | Bin 0 -> 41284 bytes .../_build/dev/lib/req/ebin/Elixir.Req.beam | Bin 0 -> 37024 bytes phoenix/_build/dev/lib/req/ebin/req.app | 24 + .../shooting_event_phx/.mix/compile.app_cache | Bin 0 -> 9854 bytes .../shooting_event_phx/.mix/compile.elixir | Bin 0 -> 9704 bytes .../.mix/compile.elixir_scm | Bin 0 -> 44 bytes .../lib/shooting_event_phx/.mix/compile.lock | 0 .../shooting_event_phx/.mix/compile.protocols | Bin 0 -> 27 bytes ...lixir.Bandit.HTTP2.Frame.Serializable.beam | Bin 0 -> 5796 bytes .../Elixir.Bandit.HTTPTransport.beam | Bin 0 -> 8812 bytes ...r.Bandit.WebSocket.Frame.Serializable.beam | Bin 0 -> 5300 bytes .../Elixir.Bandit.WebSocket.Socket.beam | Bin 0 -> 5012 bytes .../consolidated/Elixir.Collectable.beam | Bin 0 -> 6420 bytes .../Elixir.DBConnection.Query.beam | Bin 0 -> 5720 bytes .../consolidated/Elixir.Ecto.Queryable.beam | Bin 0 -> 5916 bytes .../consolidated/Elixir.Enumerable.beam | Bin 0 -> 10460 bytes .../consolidated/Elixir.IEx.Info.beam | Bin 0 -> 5704 bytes .../consolidated/Elixir.Inspect.beam | Bin 0 -> 17264 bytes .../consolidated/Elixir.JSON.Encoder.beam | Bin 0 -> 10680 bytes .../consolidated/Elixir.Jason.Encoder.beam | Bin 0 -> 5940 bytes .../consolidated/Elixir.List.Chars.beam | Bin 0 -> 5040 bytes .../consolidated/Elixir.Phoenix.Param.beam | Bin 0 -> 4748 bytes .../consolidated/Elixir.Plug.Exception.beam | Bin 0 -> 5872 bytes .../consolidated/Elixir.String.Chars.beam | Bin 0 -> 5556 bytes .../Elixir.ShootingEventPhx.AI.Gemini.beam | Bin 0 -> 11716 bytes .../Elixir.ShootingEventPhx.Application.beam | Bin 0 -> 4048 bytes ...ir.ShootingEventPhx.Auth.SessionStore.beam | Bin 0 -> 5660 bytes .../ebin/Elixir.ShootingEventPhx.Auth.beam | Bin 0 -> 4788 bytes ...ir.ShootingEventPhx.Domain.AppSetting.beam | Bin 0 -> 13820 bytes ...lixir.ShootingEventPhx.Domain.Derived.beam | Bin 0 -> 18784 bytes ...xir.ShootingEventPhx.Domain.EventData.beam | Bin 0 -> 27496 bytes ...Elixir.ShootingEventPhx.Domain.Player.beam | Bin 0 -> 18032 bytes .../Elixir.ShootingEventPhx.Domain.Score.beam | Bin 0 -> 14812 bytes ...ootingEventPhx.Domain.ScoreAttachment.beam | Bin 0 -> 15128 bytes ...ixir.ShootingEventPhx.Domain.Settings.beam | Bin 0 -> 14480 bytes ...Elixir.ShootingEventPhx.Domain.Stages.beam | Bin 0 -> 5232 bytes ....ShootingEventPhx.Domain.StateService.beam | Bin 0 -> 5036 bytes .../ebin/Elixir.ShootingEventPhx.Events.beam | Bin 0 -> 2396 bytes .../ebin/Elixir.ShootingEventPhx.Repo.beam | Bin 0 -> 27452 bytes .../ebin/Elixir.ShootingEventPhx.beam | Bin 0 -> 1428 bytes ...xir.ShootingEventPhxWeb.ApiController.beam | Bin 0 -> 20488 bytes .../Elixir.ShootingEventPhxWeb.Endpoint.beam | Bin 0 -> 32552 bytes .../Elixir.ShootingEventPhxWeb.ErrorJSON.beam | Bin 0 -> 2176 bytes ....ShootingEventPhxWeb.EventsController.beam | Bin 0 -> 9396 bytes ...hootingEventPhxWeb.FrontendController.beam | Bin 0 -> 10024 bytes ...r.ShootingEventPhxWeb.Plugs.AdminOnly.beam | Bin 0 -> 2592 bytes ...Elixir.ShootingEventPhxWeb.Plugs.CORS.beam | Bin 0 -> 2836 bytes .../Elixir.ShootingEventPhxWeb.Router.beam | Bin 0 -> 40172 bytes .../Elixir.ShootingEventPhxWeb.Telemetry.beam | Bin 0 -> 6300 bytes .../ebin/Elixir.ShootingEventPhxWeb.beam | Bin 0 -> 10004 bytes .../ebin/shooting_event_phx.app | 45 + .../_build/dev/lib/shooting_event_phx/priv | 1 + .../dev/lib/telemetry/.mix/compile.fetch | 0 .../dev/lib/telemetry/ebin/telemetry.app | 15 + .../dev/lib/telemetry/ebin/telemetry.beam | Bin 0 -> 14664 bytes .../dev/lib/telemetry/ebin/telemetry_app.beam | Bin 0 -> 1476 bytes .../dev/lib/telemetry/ebin/telemetry_ets.beam | Bin 0 -> 4224 bytes .../ebin/telemetry_handler_table.beam | Bin 0 -> 6368 bytes .../dev/lib/telemetry/ebin/telemetry_pt.beam | Bin 0 -> 4148 bytes .../dev/lib/telemetry/ebin/telemetry_sup.beam | Bin 0 -> 2116 bytes .../lib/telemetry/ebin/telemetry_test.beam | Bin 0 -> 3364 bytes .../_build/dev/lib/telemetry/mix.rebar.config | 17 + phoenix/_build/dev/lib/telemetry/src | 1 + .../lib/telemetry_metrics/.mix/compile.elixir | Bin 0 -> 5196 bytes .../telemetry_metrics/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/telemetry_metrics/.mix/compile.fetch | 0 ...xir.Telemetry.Metrics.ConsoleReporter.beam | Bin 0 -> 15692 bytes .../Elixir.Telemetry.Metrics.Counter.beam | Bin 0 -> 3768 bytes ...Elixir.Telemetry.Metrics.Distribution.beam | Bin 0 -> 3804 bytes .../Elixir.Telemetry.Metrics.LastValue.beam | Bin 0 -> 3792 bytes .../ebin/Elixir.Telemetry.Metrics.Sum.beam | Bin 0 -> 3740 bytes .../Elixir.Telemetry.Metrics.Summary.beam | Bin 0 -> 3768 bytes .../ebin/Elixir.Telemetry.Metrics.beam | Bin 0 -> 23224 bytes .../ebin/telemetry_metrics.app | 13 + .../lib/telemetry_poller/.mix/compile.fetch | 0 .../ebin/telemetry_poller.app | 13 + .../ebin/telemetry_poller.beam | Bin 0 -> 13880 bytes .../ebin/telemetry_poller_app.beam | Bin 0 -> 2340 bytes .../ebin/telemetry_poller_builtin.beam | Bin 0 -> 3836 bytes .../ebin/telemetry_poller_sup.beam | Bin 0 -> 1824 bytes .../dev/lib/telemetry_poller/mix.rebar.config | 16 + phoenix/_build/dev/lib/telemetry_poller/src | 1 + .../lib/thousand_island/.mix/compile.elixir | Bin 0 -> 7030 bytes .../thousand_island/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/thousand_island/.mix/compile.fetch | 0 .../ebin/Elixir.ThousandIsland.Acceptor.beam | Bin 0 -> 6844 bytes ...ThousandIsland.AcceptorPoolSupervisor.beam | Bin 0 -> 7224 bytes ...xir.ThousandIsland.AcceptorSupervisor.beam | Bin 0 -> 6680 bytes .../Elixir.ThousandIsland.Connection.beam | Bin 0 -> 5572 bytes .../ebin/Elixir.ThousandIsland.Handler.beam | Bin 0 -> 117884 bytes .../Elixir.ThousandIsland.HandlerConfig.beam | Bin 0 -> 6128 bytes .../ebin/Elixir.ThousandIsland.Listener.beam | Bin 0 -> 13120 bytes .../ebin/Elixir.ThousandIsland.Logger.beam | Bin 0 -> 8764 bytes .../Elixir.ThousandIsland.ProcessLabel.beam | Bin 0 -> 5056 bytes .../ebin/Elixir.ThousandIsland.Server.beam | Bin 0 -> 7620 bytes .../Elixir.ThousandIsland.ServerConfig.beam | Bin 0 -> 8404 bytes ...lixir.ThousandIsland.ShutdownListener.beam | Bin 0 -> 8760 bytes .../ebin/Elixir.ThousandIsland.Socket.beam | Bin 0 -> 22208 bytes .../ebin/Elixir.ThousandIsland.Telemetry.beam | Bin 0 -> 13588 bytes .../ebin/Elixir.ThousandIsland.Transport.beam | Bin 0 -> 6408 bytes .../Elixir.ThousandIsland.Transports.SSL.beam | Bin 0 -> 12100 bytes .../Elixir.ThousandIsland.Transports.TCP.beam | Bin 0 -> 10064 bytes .../ebin/Elixir.ThousandIsland.beam | Bin 0 -> 10664 bytes .../thousand_island/ebin/thousand_island.app | 24 + .../dev/lib/websock/.mix/compile.elixir | Bin 0 -> 4329 bytes .../dev/lib/websock/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/dev/lib/websock/.mix/compile.fetch | 0 .../dev/lib/websock/ebin/Elixir.WebSock.beam | Bin 0 -> 5324 bytes .../_build/dev/lib/websock/ebin/websock.app | 7 + .../lib/websock_adapter/.mix/compile.elixir | Bin 0 -> 4778 bytes .../websock_adapter/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/websock_adapter/.mix/compile.fetch | 0 .../Elixir.WebSockAdapter.UpgradeError.beam | Bin 0 -> 3572 bytes ...ixir.WebSockAdapter.UpgradeValidation.beam | Bin 0 -> 6608 bytes .../ebin/Elixir.WebSockAdapter.beam | Bin 0 -> 6216 bytes .../websock_adapter/ebin/websock_adapter.app | 10 + .../prod/lib/bandit/.mix/compile.elixir | Bin 0 -> 13956 bytes .../prod/lib/bandit/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/prod/lib/bandit/.mix/compile.fetch | 0 .../bandit/ebin/Elixir.Bandit.Adapter.beam | Bin 0 -> 26204 bytes .../ebin/Elixir.Bandit.Application.beam | Bin 0 -> 2616 bytes .../lib/bandit/ebin/Elixir.Bandit.Clock.beam | Bin 0 -> 5000 bytes .../ebin/Elixir.Bandit.Compression.beam | Bin 0 -> 15992 bytes .../ebin/Elixir.Bandit.DelegatingHandler.beam | Bin 0 -> 19276 bytes .../bandit/ebin/Elixir.Bandit.Extractor.beam | Bin 0 -> 10664 bytes .../ebin/Elixir.Bandit.HTTP1.Handler.beam | Bin 0 -> 25732 bytes .../ebin/Elixir.Bandit.HTTP1.Socket.beam | Bin 0 -> 4420 bytes .../ebin/Elixir.Bandit.HTTP2.Connection.beam | Bin 0 -> 43464 bytes ...r.Bandit.HTTP2.Errors.ConnectionError.beam | Bin 0 -> 3696 bytes ...lixir.Bandit.HTTP2.Errors.StreamError.beam | Bin 0 -> 3796 bytes .../ebin/Elixir.Bandit.HTTP2.Errors.beam | Bin 0 -> 5260 bytes .../ebin/Elixir.Bandit.HTTP2.FlowControl.beam | Bin 0 -> 3276 bytes ...lixir.Bandit.HTTP2.Frame.Continuation.beam | Bin 0 -> 4760 bytes .../ebin/Elixir.Bandit.HTTP2.Frame.Data.beam | Bin 0 -> 5652 bytes .../ebin/Elixir.Bandit.HTTP2.Frame.Flags.beam | Bin 0 -> 4880 bytes .../Elixir.Bandit.HTTP2.Frame.Goaway.beam | Bin 0 -> 4764 bytes .../Elixir.Bandit.HTTP2.Frame.Headers.beam | Bin 0 -> 8556 bytes .../ebin/Elixir.Bandit.HTTP2.Frame.Ping.beam | Bin 0 -> 4908 bytes .../Elixir.Bandit.HTTP2.Frame.Priority.beam | Bin 0 -> 4964 bytes ...Elixir.Bandit.HTTP2.Frame.PushPromise.beam | Bin 0 -> 2340 bytes .../Elixir.Bandit.HTTP2.Frame.RstStream.beam | Bin 0 -> 4700 bytes ...zable.Bandit.HTTP2.Frame.Continuation.beam | Bin 0 -> 4572 bytes ....Serializable.Bandit.HTTP2.Frame.Data.beam | Bin 0 -> 4828 bytes ...erializable.Bandit.HTTP2.Frame.Goaway.beam | Bin 0 -> 3732 bytes ...rializable.Bandit.HTTP2.Frame.Headers.beam | Bin 0 -> 5180 bytes ....Serializable.Bandit.HTTP2.Frame.Ping.beam | Bin 0 -> 3984 bytes ...ializable.Bandit.HTTP2.Frame.Priority.beam | Bin 0 -> 3720 bytes ...alizable.Bandit.HTTP2.Frame.RstStream.beam | Bin 0 -> 3552 bytes ...ializable.Bandit.HTTP2.Frame.Settings.beam | Bin 0 -> 5196 bytes ...zable.Bandit.HTTP2.Frame.WindowUpdate.beam | Bin 0 -> 3620 bytes ...lixir.Bandit.HTTP2.Frame.Serializable.beam | Bin 0 -> 5700 bytes .../Elixir.Bandit.HTTP2.Frame.Settings.beam | Bin 0 -> 7888 bytes .../Elixir.Bandit.HTTP2.Frame.Unknown.beam | Bin 0 -> 3980 bytes ...lixir.Bandit.HTTP2.Frame.WindowUpdate.beam | Bin 0 -> 4784 bytes .../ebin/Elixir.Bandit.HTTP2.Frame.beam | Bin 0 -> 5956 bytes .../ebin/Elixir.Bandit.HTTP2.Handler.beam | Bin 0 -> 31464 bytes .../ebin/Elixir.Bandit.HTTP2.Settings.beam | Bin 0 -> 3464 bytes .../ebin/Elixir.Bandit.HTTP2.Stream.beam | Bin 0 -> 7204 bytes .../Elixir.Bandit.HTTP2.StreamCollection.beam | Bin 0 -> 7292 bytes .../Elixir.Bandit.HTTP2.StreamProcess.beam | Bin 0 -> 8072 bytes .../bandit/ebin/Elixir.Bandit.HTTPError.beam | Bin 0 -> 3640 bytes ...dit.HTTPTransport.Bandit.HTTP1.Socket.beam | Bin 0 -> 41640 bytes ...dit.HTTPTransport.Bandit.HTTP2.Stream.beam | Bin 0 -> 38848 bytes .../ebin/Elixir.Bandit.HTTPTransport.beam | Bin 0 -> 9888 bytes .../bandit/ebin/Elixir.Bandit.Headers.beam | Bin 0 -> 7992 bytes .../ebin/Elixir.Bandit.InitialHandler.beam | Bin 0 -> 22376 bytes .../lib/bandit/ebin/Elixir.Bandit.Logger.beam | Bin 0 -> 4660 bytes .../ebin/Elixir.Bandit.PhoenixAdapter.beam | Bin 0 -> 6664 bytes .../bandit/ebin/Elixir.Bandit.Pipeline.beam | Bin 0 -> 15396 bytes .../Elixir.Bandit.PrimitiveOps.WebSocket.beam | Bin 0 -> 3608 bytes .../ebin/Elixir.Bandit.SocketHelpers.beam | Bin 0 -> 5756 bytes .../bandit/ebin/Elixir.Bandit.Telemetry.beam | Bin 0 -> 11456 bytes .../lib/bandit/ebin/Elixir.Bandit.Trace.beam | Bin 0 -> 13828 bytes .../ebin/Elixir.Bandit.TransportError.beam | Bin 0 -> 3612 bytes .../Elixir.Bandit.WebSocket.Connection.beam | Bin 0 -> 23884 bytes .../Elixir.Bandit.WebSocket.Frame.Binary.beam | Bin 0 -> 3740 bytes ...andit.WebSocket.Frame.ConnectionClose.beam | Bin 0 -> 6632 bytes ...r.Bandit.WebSocket.Frame.Continuation.beam | Bin 0 -> 4024 bytes .../Elixir.Bandit.WebSocket.Frame.Ping.beam | Bin 0 -> 4776 bytes .../Elixir.Bandit.WebSocket.Frame.Pong.beam | Bin 0 -> 4776 bytes ...lizable.Bandit.WebSocket.Frame.Binary.beam | Bin 0 -> 3616 bytes ...andit.WebSocket.Frame.ConnectionClose.beam | Bin 0 -> 4820 bytes ...e.Bandit.WebSocket.Frame.Continuation.beam | Bin 0 -> 3572 bytes ...ializable.Bandit.WebSocket.Frame.Ping.beam | Bin 0 -> 3444 bytes ...ializable.Bandit.WebSocket.Frame.Pong.beam | Bin 0 -> 3444 bytes ...ializable.Bandit.WebSocket.Frame.Text.beam | Bin 0 -> 3588 bytes ...r.Bandit.WebSocket.Frame.Serializable.beam | Bin 0 -> 5676 bytes .../Elixir.Bandit.WebSocket.Frame.Text.beam | Bin 0 -> 3724 bytes .../ebin/Elixir.Bandit.WebSocket.Frame.beam | Bin 0 -> 15392 bytes .../ebin/Elixir.Bandit.WebSocket.Handler.beam | Bin 0 -> 24732 bytes .../Elixir.Bandit.WebSocket.Handshake.beam | Bin 0 -> 7748 bytes ...ir.Bandit.WebSocket.PerMessageDeflate.beam | Bin 0 -> 14952 bytes ...ebSocket.Socket.ThousandIsland.Socket.beam | Bin 0 -> 6796 bytes .../ebin/Elixir.Bandit.WebSocket.Socket.beam | Bin 0 -> 6240 bytes ...ir.Bandit.WebSocket.UpgradeValidation.beam | Bin 0 -> 5352 bytes .../prod/lib/bandit/ebin/Elixir.Bandit.beam | Bin 0 -> 21940 bytes .../_build/prod/lib/bandit/ebin/bandit.app | 81 + .../lib/cc_precompiler/.mix/compile.elixir | Bin 0 -> 5209 bytes .../cc_precompiler/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/cc_precompiler/.mix/compile.fetch | 0 ...lixir.CCPrecompiler.CompilationScript.beam | Bin 0 -> 1904 bytes .../Elixir.CCPrecompiler.UniversalBinary.beam | Bin 0 -> 4548 bytes .../ebin/Elixir.CCPrecompiler.beam | Bin 0 -> 28948 bytes .../cc_precompiler/ebin/cc_precompiler.app | 9 + .../lib/db_connection/.mix/compile.elixir | Bin 0 -> 8019 bytes .../lib/db_connection/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../prod/lib/db_connection/.mix/compile.fetch | 0 .../ebin/Elixir.DBConnection.App.beam | Bin 0 -> 3052 bytes .../ebin/Elixir.DBConnection.Backoff.beam | Bin 0 -> 11244 bytes .../ebin/Elixir.DBConnection.Connection.beam | Bin 0 -> 39792 bytes .../Elixir.DBConnection.ConnectionError.beam | Bin 0 -> 4544 bytes ...ixir.DBConnection.ConnectionPool.Pool.beam | Bin 0 -> 5420 bytes .../Elixir.DBConnection.ConnectionPool.beam | Bin 0 -> 28544 bytes .../ebin/Elixir.DBConnection.EncodeError.beam | Bin 0 -> 3500 bytes .../ebin/Elixir.DBConnection.Holder.beam | Bin 0 -> 26460 bytes .../ebin/Elixir.DBConnection.LogEntry.beam | Bin 0 -> 5940 bytes ...Elixir.DBConnection.Ownership.Manager.beam | Bin 0 -> 35664 bytes .../Elixir.DBConnection.Ownership.Proxy.beam | Bin 0 -> 24220 bytes .../ebin/Elixir.DBConnection.Ownership.beam | Bin 0 -> 6888 bytes .../Elixir.DBConnection.OwnershipError.beam | Bin 0 -> 3676 bytes .../ebin/Elixir.DBConnection.Pool.beam | Bin 0 -> 2308 bytes .../Elixir.DBConnection.PrepareStream.beam | Bin 0 -> 3036 bytes .../ebin/Elixir.DBConnection.Query.beam | Bin 0 -> 6912 bytes .../ebin/Elixir.DBConnection.Stream.beam | Bin 0 -> 2988 bytes .../ebin/Elixir.DBConnection.Task.beam | Bin 0 -> 4644 bytes ...Elixir.DBConnection.TelemetryListener.beam | Bin 0 -> 10616 bytes .../Elixir.DBConnection.TransactionError.beam | Bin 0 -> 4896 bytes .../ebin/Elixir.DBConnection.Util.beam | Bin 0 -> 3660 bytes .../ebin/Elixir.DBConnection.Watcher.beam | Bin 0 -> 9120 bytes .../ebin/Elixir.DBConnection.beam | Bin 0 -> 66552 bytes ...Enumerable.DBConnection.PrepareStream.beam | Bin 0 -> 3712 bytes ...Elixir.Enumerable.DBConnection.Stream.beam | Bin 0 -> 3644 bytes .../lib/db_connection/ebin/db_connection.app | 31 + .../prod/lib/decimal/.mix/compile.elixir | Bin 0 -> 5511 bytes .../prod/lib/decimal/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../prod/lib/decimal/.mix/compile.fetch | 0 .../decimal/ebin/Elixir.Decimal.Context.beam | Bin 0 -> 6376 bytes .../decimal/ebin/Elixir.Decimal.Error.beam | Bin 0 -> 4276 bytes .../decimal/ebin/Elixir.Decimal.Macros.beam | Bin 0 -> 2224 bytes .../prod/lib/decimal/ebin/Elixir.Decimal.beam | Bin 0 -> 123264 bytes .../decimal/ebin/Elixir.Inspect.Decimal.beam | Bin 0 -> 2660 bytes .../ebin/Elixir.JSON.Encoder.Decimal.beam | Bin 0 -> 2624 bytes .../ebin/Elixir.String.Chars.Decimal.beam | Bin 0 -> 2472 bytes .../_build/prod/lib/decimal/ebin/decimal.app | 11 + .../prod/lib/dns_cluster/.mix/compile.elixir | Bin 0 -> 4907 bytes .../lib/dns_cluster/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../prod/lib/dns_cluster/.mix/compile.fetch | 0 .../ebin/Elixir.DNSCluster.Resolver.beam | Bin 0 -> 3948 bytes .../dns_cluster/ebin/Elixir.DNSCluster.beam | Bin 0 -> 17828 bytes .../prod/lib/dns_cluster/ebin/dns_cluster.app | 7 + .../_build/prod/lib/ecto/.mix/compile.elixir | Bin 0 -> 15285 bytes .../prod/lib/ecto/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/prod/lib/ecto/.mix/compile.fetch | 0 .../ebin/Elixir.Ecto.Adapter.Queryable.beam | Bin 0 -> 5720 bytes .../ecto/ebin/Elixir.Ecto.Adapter.Schema.beam | Bin 0 -> 3504 bytes .../ebin/Elixir.Ecto.Adapter.Storage.beam | Bin 0 -> 2256 bytes .../ebin/Elixir.Ecto.Adapter.Transaction.beam | Bin 0 -> 2268 bytes .../lib/ecto/ebin/Elixir.Ecto.Adapter.beam | Bin 0 -> 4460 bytes .../ecto/ebin/Elixir.Ecto.Application.beam | Bin 0 -> 2500 bytes .../Elixir.Ecto.Association.BelongsTo.beam | Bin 0 -> 17708 bytes .../ebin/Elixir.Ecto.Association.Has.beam | Bin 0 -> 24440 bytes .../Elixir.Ecto.Association.HasThrough.beam | Bin 0 -> 9636 bytes .../Elixir.Ecto.Association.ManyToMany.beam | Bin 0 -> 32344 bytes .../Elixir.Ecto.Association.NotLoaded.beam | Bin 0 -> 3080 bytes .../ecto/ebin/Elixir.Ecto.Association.beam | Bin 0 -> 36680 bytes .../lib/ecto/ebin/Elixir.Ecto.CastError.beam | Bin 0 -> 4720 bytes .../ecto/ebin/Elixir.Ecto.ChangeError.beam | Bin 0 -> 3464 bytes .../ebin/Elixir.Ecto.Changeset.Relation.beam | Bin 0 -> 38940 bytes .../lib/ecto/ebin/Elixir.Ecto.Changeset.beam | Bin 0 -> 169892 bytes .../ebin/Elixir.Ecto.ConstraintError.beam | Bin 0 -> 6164 bytes .../lib/ecto/ebin/Elixir.Ecto.Embedded.beam | Bin 0 -> 22976 bytes .../prod/lib/ecto/ebin/Elixir.Ecto.Enum.beam | Bin 0 -> 14732 bytes .../Elixir.Ecto.InvalidChangesetError.beam | Bin 0 -> 6140 bytes .../ebin/Elixir.Ecto.InvalidURLError.beam | Bin 0 -> 4412 bytes .../ecto/ebin/Elixir.Ecto.MigrationError.beam | Bin 0 -> 3484 bytes .../prod/lib/ecto/ebin/Elixir.Ecto.Multi.beam | Bin 0 -> 44300 bytes .../Elixir.Ecto.MultiplePrimaryKeyError.beam | Bin 0 -> 4860 bytes .../Elixir.Ecto.MultipleResultsError.beam | Bin 0 -> 4388 bytes .../Elixir.Ecto.NoPrimaryKeyFieldError.beam | Bin 0 -> 4288 bytes .../Elixir.Ecto.NoPrimaryKeyValueError.beam | Bin 0 -> 4272 bytes .../ecto/ebin/Elixir.Ecto.NoResultsError.beam | Bin 0 -> 4228 bytes .../ebin/Elixir.Ecto.ParameterizedType.beam | Bin 0 -> 9288 bytes .../lib/ecto/ebin/Elixir.Ecto.Query.API.beam | Bin 0 -> 21436 bytes .../ebin/Elixir.Ecto.Query.BooleanExpr.beam | Bin 0 -> 3004 bytes .../ebin/Elixir.Ecto.Query.Builder.CTE.beam | Bin 0 -> 14008 bytes ...Elixir.Ecto.Query.Builder.Combination.beam | Bin 0 -> 5136 bytes .../Elixir.Ecto.Query.Builder.Distinct.beam | Bin 0 -> 8612 bytes .../Elixir.Ecto.Query.Builder.Dynamic.beam | Bin 0 -> 11336 bytes .../Elixir.Ecto.Query.Builder.Filter.beam | Bin 0 -> 18620 bytes .../ebin/Elixir.Ecto.Query.Builder.From.beam | Bin 0 -> 17864 bytes .../Elixir.Ecto.Query.Builder.GroupBy.beam | Bin 0 -> 11500 bytes .../ebin/Elixir.Ecto.Query.Builder.Join.beam | Bin 0 -> 30216 bytes ...Elixir.Ecto.Query.Builder.LimitOffset.beam | Bin 0 -> 11288 bytes .../ebin/Elixir.Ecto.Query.Builder.Lock.beam | Bin 0 -> 5524 bytes .../Elixir.Ecto.Query.Builder.OrderBy.beam | Bin 0 -> 20808 bytes .../Elixir.Ecto.Query.Builder.Preload.beam | Bin 0 -> 16844 bytes .../Elixir.Ecto.Query.Builder.Select.beam | Bin 0 -> 35160 bytes .../Elixir.Ecto.Query.Builder.Update.beam | Bin 0 -> 13700 bytes .../Elixir.Ecto.Query.Builder.Windows.beam | Bin 0 -> 14780 bytes .../ecto/ebin/Elixir.Ecto.Query.Builder.beam | Bin 0 -> 101336 bytes .../ecto/ebin/Elixir.Ecto.Query.ByExpr.beam | Bin 0 -> 2896 bytes .../ebin/Elixir.Ecto.Query.CastError.beam | Bin 0 -> 4120 bytes .../ebin/Elixir.Ecto.Query.CompileError.beam | Bin 0 -> 3532 bytes .../ebin/Elixir.Ecto.Query.DynamicExpr.beam | Bin 0 -> 2848 bytes .../ecto/ebin/Elixir.Ecto.Query.FromExpr.beam | Bin 0 -> 3084 bytes .../ecto/ebin/Elixir.Ecto.Query.JoinExpr.beam | Bin 0 -> 3444 bytes .../ebin/Elixir.Ecto.Query.LimitExpr.beam | Bin 0 -> 2936 bytes .../ecto/ebin/Elixir.Ecto.Query.Planner.beam | Bin 0 -> 139468 bytes .../ebin/Elixir.Ecto.Query.QueryExpr.beam | Bin 0 -> 2812 bytes .../ebin/Elixir.Ecto.Query.SelectExpr.beam | Bin 0 -> 3220 bytes .../ecto/ebin/Elixir.Ecto.Query.Tagged.beam | Bin 0 -> 2728 bytes .../ecto/ebin/Elixir.Ecto.Query.Values.beam | Bin 0 -> 6728 bytes .../ebin/Elixir.Ecto.Query.WindowAPI.beam | Bin 0 -> 8084 bytes .../ecto/ebin/Elixir.Ecto.Query.WithExpr.beam | Bin 0 -> 2652 bytes .../prod/lib/ecto/ebin/Elixir.Ecto.Query.beam | Bin 0 -> 68076 bytes .../lib/ecto/ebin/Elixir.Ecto.QueryError.beam | Bin 0 -> 5228 bytes .../ecto/ebin/Elixir.Ecto.Queryable.Atom.beam | Bin 0 -> 3680 bytes .../ebin/Elixir.Ecto.Queryable.BitString.beam | Bin 0 -> 4320 bytes .../Elixir.Ecto.Queryable.Ecto.Query.beam | Bin 0 -> 2448 bytes .../Elixir.Ecto.Queryable.Ecto.SubQuery.beam | Bin 0 -> 4212 bytes .../ebin/Elixir.Ecto.Queryable.Tuple.beam | Bin 0 -> 4528 bytes .../lib/ecto/ebin/Elixir.Ecto.Queryable.beam | Bin 0 -> 6716 bytes .../lib/ecto/ebin/Elixir.Ecto.Repo.Assoc.beam | Bin 0 -> 9160 bytes .../ecto/ebin/Elixir.Ecto.Repo.Preloader.beam | Bin 0 -> 44916 bytes .../ecto/ebin/Elixir.Ecto.Repo.Queryable.beam | Bin 0 -> 37620 bytes .../ecto/ebin/Elixir.Ecto.Repo.Registry.beam | Bin 0 -> 8496 bytes .../ecto/ebin/Elixir.Ecto.Repo.Schema.beam | Bin 0 -> 71292 bytes .../ebin/Elixir.Ecto.Repo.Supervisor.beam | Bin 0 -> 17372 bytes .../ebin/Elixir.Ecto.Repo.Transaction.beam | Bin 0 -> 6356 bytes .../prod/lib/ecto/ebin/Elixir.Ecto.Repo.beam | Bin 0 -> 65260 bytes .../ecto/ebin/Elixir.Ecto.Schema.Loader.beam | Bin 0 -> 7268 bytes .../ebin/Elixir.Ecto.Schema.Metadata.beam | Bin 0 -> 3688 bytes .../lib/ecto/ebin/Elixir.Ecto.Schema.beam | Bin 0 -> 76976 bytes .../ebin/Elixir.Ecto.StaleEntryError.beam | Bin 0 -> 5024 bytes .../lib/ecto/ebin/Elixir.Ecto.SubQuery.beam | Bin 0 -> 3068 bytes .../ecto/ebin/Elixir.Ecto.SubQueryError.beam | Bin 0 -> 4744 bytes .../prod/lib/ecto/ebin/Elixir.Ecto.Type.beam | Bin 0 -> 74032 bytes .../prod/lib/ecto/ebin/Elixir.Ecto.UUID.beam | Bin 0 -> 38748 bytes .../prod/lib/ecto/ebin/Elixir.Ecto.beam | Bin 0 -> 20560 bytes ...ir.Inspect.Ecto.Association.NotLoaded.beam | Bin 0 -> 3160 bytes .../ebin/Elixir.Inspect.Ecto.Changeset.beam | Bin 0 -> 5968 bytes ...Elixir.Inspect.Ecto.Query.DynamicExpr.beam | Bin 0 -> 5844 bytes .../ecto/ebin/Elixir.Inspect.Ecto.Query.beam | Bin 0 -> 25296 bytes .../Elixir.Inspect.Ecto.Schema.Metadata.beam | Bin 0 -> 3384 bytes ...ON.Encoder.Ecto.Association.NotLoaded.beam | Bin 0 -> 4108 bytes ...xir.JSON.Encoder.Ecto.Schema.Metadata.beam | Bin 0 -> 3868 bytes ...on.Encoder.Ecto.Association.NotLoaded.beam | Bin 0 -> 4116 bytes ...ir.Jason.Encoder.Ecto.Schema.Metadata.beam | Bin 0 -> 3884 bytes .../prod/lib/ecto/ebin/Elixir.Mix.Ecto.beam | Bin 0 -> 9648 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Create.beam | Bin 0 -> 4876 bytes .../ecto/ebin/Elixir.Mix.Tasks.Ecto.Drop.beam | Bin 0 -> 6356 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Gen.Repo.beam | Bin 0 -> 7608 bytes .../lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.beam | Bin 0 -> 3132 bytes phoenix/_build/prod/lib/ecto/ebin/ecto.app | 92 + .../prod/lib/ecto_sql/.mix/compile.elixir | Bin 0 -> 9446 bytes .../prod/lib/ecto_sql/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../prod/lib/ecto_sql/.mix/compile.fetch | 0 ....Collectable.Ecto.Adapters.SQL.Stream.beam | Bin 0 -> 3420 bytes .../ebin/Elixir.Ecto.Adapter.Migration.beam | Bin 0 -> 3324 bytes .../ebin/Elixir.Ecto.Adapter.Structure.beam | Bin 0 -> 2672 bytes .../ebin/Elixir.Ecto.Adapters.MyXQL.beam | Bin 0 -> 40008 bytes .../ebin/Elixir.Ecto.Adapters.Postgres.beam | Bin 0 -> 40552 bytes .../Elixir.Ecto.Adapters.SQL.Application.beam | Bin 0 -> 2788 bytes .../Elixir.Ecto.Adapters.SQL.Connection.beam | Bin 0 -> 4580 bytes ....Ecto.Adapters.SQL.Sandbox.Connection.beam | Bin 0 -> 8952 bytes .../Elixir.Ecto.Adapters.SQL.Sandbox.beam | Bin 0 -> 19204 bytes .../ebin/Elixir.Ecto.Adapters.SQL.Stream.beam | Bin 0 -> 3524 bytes .../ebin/Elixir.Ecto.Adapters.SQL.beam | Bin 0 -> 164608 bytes .../ebin/Elixir.Ecto.Adapters.Tds.beam | Bin 0 -> 23048 bytes .../ebin/Elixir.Ecto.Migration.Command.beam | Bin 0 -> 2916 bytes .../Elixir.Ecto.Migration.Constraint.beam | Bin 0 -> 3500 bytes .../ebin/Elixir.Ecto.Migration.Index.beam | Bin 0 -> 4432 bytes .../ebin/Elixir.Ecto.Migration.Reference.beam | Bin 0 -> 4056 bytes .../ebin/Elixir.Ecto.Migration.Runner.beam | Bin 0 -> 32464 bytes ...Elixir.Ecto.Migration.SchemaMigration.beam | Bin 0 -> 18644 bytes .../ebin/Elixir.Ecto.Migration.Table.beam | Bin 0 -> 3404 bytes .../ecto_sql/ebin/Elixir.Ecto.Migration.beam | Bin 0 -> 51136 bytes .../ecto_sql/ebin/Elixir.Ecto.Migrator.beam | Bin 0 -> 45100 bytes ...r.Enumerable.Ecto.Adapters.SQL.Stream.beam | Bin 0 -> 4008 bytes .../lib/ecto_sql/ebin/Elixir.Mix.EctoSQL.beam | Bin 0 -> 5300 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Dump.beam | Bin 0 -> 7152 bytes .../Elixir.Mix.Tasks.Ecto.Gen.Migration.beam | Bin 0 -> 8360 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Load.beam | Bin 0 -> 9828 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Migrate.beam | Bin 0 -> 8000 bytes .../Elixir.Mix.Tasks.Ecto.Migrations.beam | Bin 0 -> 6084 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Rollback.beam | Bin 0 -> 7940 bytes .../prod/lib/ecto_sql/ebin/ecto_sql.app | 35 + .../prod/lib/ecto_sqlite3/.mix/compile.elixir | Bin 0 -> 5876 bytes .../lib/ecto_sqlite3/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../prod/lib/ecto_sqlite3/.mix/compile.fetch | 0 .../Elixir.Ecto.Adapters.SQLite3.Codec.beam | Bin 0 -> 15880 bytes ...ixir.Ecto.Adapters.SQLite3.Connection.beam | Bin 0 -> 112024 bytes ...Elixir.Ecto.Adapters.SQLite3.DataType.beam | Bin 0 -> 7472 bytes ...r.Ecto.Adapters.SQLite3.TypeExtension.beam | Bin 0 -> 2312 bytes .../ebin/Elixir.Ecto.Adapters.SQLite3.beam | Bin 0 -> 32952 bytes .../lib/ecto_sqlite3/ebin/ecto_sqlite3.app | 12 + .../prod/lib/elixir_make/.mix/compile.elixir | Bin 0 -> 6091 bytes .../lib/elixir_make/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../prod/lib/elixir_make/.mix/compile.fetch | 0 .../ebin/Elixir.ElixirMake.Artefact.beam | Bin 0 -> 19500 bytes .../ebin/Elixir.ElixirMake.Compiler.beam | Bin 0 -> 14048 bytes .../Elixir.ElixirMake.Downloader.Httpc.beam | Bin 0 -> 6800 bytes .../ebin/Elixir.ElixirMake.Downloader.beam | Bin 0 -> 1832 bytes .../ebin/Elixir.ElixirMake.Precompiler.beam | Bin 0 -> 3984 bytes .../Elixir.Mix.Tasks.Compile.ElixirMake.beam | Bin 0 -> 10420 bytes .../Elixir.Mix.Tasks.ElixirMake.Checksum.beam | Bin 0 -> 10652 bytes ...lixir.Mix.Tasks.ElixirMake.Precompile.beam | Bin 0 -> 7560 bytes .../prod/lib/elixir_make/ebin/elixir_make.app | 14 + .../prod/lib/exqlite/.mix/compile.elixir | Bin 0 -> 6824 bytes .../prod/lib/exqlite/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../prod/lib/exqlite/.mix/compile.fetch | 0 ...ixir.DBConnection.Query.Exqlite.Query.beam | Bin 0 -> 3276 bytes .../Elixir.Enumerable.Exqlite.Stream.beam | Bin 0 -> 5036 bytes .../exqlite/ebin/Elixir.Exqlite.Basic.beam | Bin 0 -> 6188 bytes .../ebin/Elixir.Exqlite.Connection.beam | Bin 0 -> 38176 bytes .../exqlite/ebin/Elixir.Exqlite.Error.beam | Bin 0 -> 4432 bytes .../exqlite/ebin/Elixir.Exqlite.Flags.beam | Bin 0 -> 3264 bytes .../exqlite/ebin/Elixir.Exqlite.Pragma.beam | Bin 0 -> 7628 bytes .../exqlite/ebin/Elixir.Exqlite.Query.beam | Bin 0 -> 4444 bytes .../exqlite/ebin/Elixir.Exqlite.Result.beam | Bin 0 -> 3672 bytes .../exqlite/ebin/Elixir.Exqlite.Sqlite3.beam | Bin 0 -> 25572 bytes .../ebin/Elixir.Exqlite.Sqlite3NIF.beam | Bin 0 -> 10264 bytes .../exqlite/ebin/Elixir.Exqlite.Stream.beam | Bin 0 -> 2940 bytes .../ebin/Elixir.Exqlite.TypeExtension.beam | Bin 0 -> 1924 bytes .../prod/lib/exqlite/ebin/Elixir.Exqlite.beam | Bin 0 -> 10504 bytes .../Elixir.String.Chars.Exqlite.Query.beam | Bin 0 -> 2648 bytes .../_build/prod/lib/exqlite/ebin/exqlite.app | 15 + .../prod/lib/exqlite/priv/sqlite3_nif.so | Bin 0 -> 1663120 bytes .../_build/prod/lib/finch/.mix/compile.elixir | Bin 0 -> 7297 bytes .../prod/lib/finch/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/prod/lib/finch/.mix/compile.fetch | 0 .../lib/finch/ebin/Elixir.Finch.Error.beam | Bin 0 -> 3936 bytes .../finch/ebin/Elixir.Finch.HTTP1.Conn.beam | Bin 0 -> 20368 bytes .../ebin/Elixir.Finch.HTTP1.Pool.State.beam | Bin 0 -> 3124 bytes .../finch/ebin/Elixir.Finch.HTTP1.Pool.beam | Bin 0 -> 24444 bytes .../ebin/Elixir.Finch.HTTP1.PoolMetrics.beam | Bin 0 -> 7348 bytes .../finch/ebin/Elixir.Finch.HTTP2.Pool.beam | Bin 0 -> 55556 bytes .../ebin/Elixir.Finch.HTTP2.PoolMetrics.beam | Bin 0 -> 6592 bytes .../Elixir.Finch.HTTP2.RequestStream.beam | Bin 0 -> 8040 bytes .../lib/finch/ebin/Elixir.Finch.Pool.beam | Bin 0 -> 4152 bytes .../finch/ebin/Elixir.Finch.PoolManager.beam | Bin 0 -> 16884 bytes .../lib/finch/ebin/Elixir.Finch.Request.beam | Bin 0 -> 12128 bytes .../lib/finch/ebin/Elixir.Finch.Response.beam | Bin 0 -> 2976 bytes .../prod/lib/finch/ebin/Elixir.Finch.SSL.beam | Bin 0 -> 2872 bytes .../finch/ebin/Elixir.Finch.Telemetry.beam | Bin 0 -> 6828 bytes .../prod/lib/finch/ebin/Elixir.Finch.beam | Bin 0 -> 33848 bytes phoenix/_build/prod/lib/finch/ebin/finch.app | 17 + .../_build/prod/lib/hpax/.mix/compile.elixir | Bin 0 -> 5385 bytes .../prod/lib/hpax/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/prod/lib/hpax/.mix/compile.fetch | 0 .../lib/hpax/ebin/Elixir.HPAX.Huffman.beam | Bin 0 -> 39964 bytes .../prod/lib/hpax/ebin/Elixir.HPAX.Table.beam | Bin 0 -> 28192 bytes .../prod/lib/hpax/ebin/Elixir.HPAX.Types.beam | Bin 0 -> 6160 bytes .../prod/lib/hpax/ebin/Elixir.HPAX.beam | Bin 0 -> 15744 bytes phoenix/_build/prod/lib/hpax/ebin/hpax.app | 8 + .../_build/prod/lib/jason/.mix/compile.elixir | Bin 0 -> 6928 bytes .../prod/lib/jason/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/prod/lib/jason/.mix/compile.fetch | 0 ...Elixir.Enumerable.Jason.OrderedObject.beam | Bin 0 -> 4672 bytes .../lib/jason/ebin/Elixir.Jason.Codegen.beam | Bin 0 -> 9272 bytes .../jason/ebin/Elixir.Jason.DecodeError.beam | Bin 0 -> 5516 bytes .../ebin/Elixir.Jason.Decoder.Unescape.beam | Bin 0 -> 17864 bytes .../lib/jason/ebin/Elixir.Jason.Decoder.beam | Bin 0 -> 125176 bytes .../lib/jason/ebin/Elixir.Jason.Encode.beam | Bin 0 -> 67784 bytes .../jason/ebin/Elixir.Jason.EncodeError.beam | Bin 0 -> 5036 bytes .../jason/ebin/Elixir.Jason.Encoder.Any.beam | Bin 0 -> 7752 bytes .../jason/ebin/Elixir.Jason.Encoder.Atom.beam | Bin 0 -> 2520 bytes .../ebin/Elixir.Jason.Encoder.BitString.beam | Bin 0 -> 2916 bytes .../jason/ebin/Elixir.Jason.Encoder.Date.beam | Bin 0 -> 2596 bytes .../ebin/Elixir.Jason.Encoder.DateTime.beam | Bin 0 -> 2616 bytes .../ebin/Elixir.Jason.Encoder.Decimal.beam | Bin 0 -> 2608 bytes .../ebin/Elixir.Jason.Encoder.Float.beam | Bin 0 -> 2524 bytes .../ebin/Elixir.Jason.Encoder.Integer.beam | Bin 0 -> 2536 bytes .../Elixir.Jason.Encoder.Jason.Fragment.beam | Bin 0 -> 2608 bytes ...xir.Jason.Encoder.Jason.OrderedObject.beam | Bin 0 -> 2728 bytes .../jason/ebin/Elixir.Jason.Encoder.List.beam | Bin 0 -> 2520 bytes .../jason/ebin/Elixir.Jason.Encoder.Map.beam | Bin 0 -> 2516 bytes .../Elixir.Jason.Encoder.NaiveDateTime.beam | Bin 0 -> 2640 bytes .../jason/ebin/Elixir.Jason.Encoder.Time.beam | Bin 0 -> 2596 bytes .../lib/jason/ebin/Elixir.Jason.Encoder.beam | Bin 0 -> 5724 bytes .../jason/ebin/Elixir.Jason.Formatter.beam | Bin 0 -> 12824 bytes .../lib/jason/ebin/Elixir.Jason.Fragment.beam | Bin 0 -> 3456 bytes .../lib/jason/ebin/Elixir.Jason.Helpers.beam | Bin 0 -> 6004 bytes .../ebin/Elixir.Jason.OrderedObject.beam | Bin 0 -> 7808 bytes .../lib/jason/ebin/Elixir.Jason.Sigil.beam | Bin 0 -> 3724 bytes .../prod/lib/jason/ebin/Elixir.Jason.beam | Bin 0 -> 9104 bytes phoenix/_build/prod/lib/jason/ebin/jason.app | 27 + .../_build/prod/lib/mime/.mix/compile.elixir | Bin 0 -> 4802 bytes .../prod/lib/mime/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/prod/lib/mime/.mix/compile.fetch | 0 .../prod/lib/mime/ebin/Elixir.MIME.beam | Bin 0 -> 26084 bytes phoenix/_build/prod/lib/mime/ebin/mime.app | 11 + .../_build/prod/lib/mint/.mix/compile.elixir | Bin 0 -> 8063 bytes .../prod/lib/mint/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/prod/lib/mint/.mix/compile.erlang | Bin 0 -> 108 bytes .../_build/prod/lib/mint/.mix/compile.fetch | 0 .../mint/ebin/Elixir.Mint.Application.beam | Bin 0 -> 2956 bytes .../lib/mint/ebin/Elixir.Mint.Core.Conn.beam | Bin 0 -> 3452 bytes .../mint/ebin/Elixir.Mint.Core.Headers.beam | Bin 0 -> 8404 bytes .../ebin/Elixir.Mint.Core.Transport.SSL.beam | Bin 0 -> 35456 bytes .../ebin/Elixir.Mint.Core.Transport.TCP.beam | Bin 0 -> 6480 bytes .../mint/ebin/Elixir.Mint.Core.Transport.beam | Bin 0 -> 2808 bytes .../lib/mint/ebin/Elixir.Mint.Core.Util.beam | Bin 0 -> 5900 bytes .../prod/lib/mint/ebin/Elixir.Mint.HTTP.beam | Bin 0 -> 43296 bytes .../mint/ebin/Elixir.Mint.HTTP1.Parse.beam | Bin 0 -> 9016 bytes .../mint/ebin/Elixir.Mint.HTTP1.Request.beam | Bin 0 -> 5596 bytes .../mint/ebin/Elixir.Mint.HTTP1.Response.beam | Bin 0 -> 3636 bytes .../prod/lib/mint/ebin/Elixir.Mint.HTTP1.beam | Bin 0 -> 78576 bytes .../mint/ebin/Elixir.Mint.HTTP2.Frame.beam | Bin 0 -> 31264 bytes .../prod/lib/mint/ebin/Elixir.Mint.HTTP2.beam | Bin 0 -> 147020 bytes .../lib/mint/ebin/Elixir.Mint.HTTPError.beam | Bin 0 -> 4580 bytes .../lib/mint/ebin/Elixir.Mint.Negotiate.beam | Bin 0 -> 7012 bytes .../mint/ebin/Elixir.Mint.TransportError.beam | Bin 0 -> 5492 bytes .../mint/ebin/Elixir.Mint.TunnelProxy.beam | Bin 0 -> 9636 bytes .../prod/lib/mint/ebin/Elixir.Mint.Types.beam | Bin 0 -> 2648 bytes .../mint/ebin/Elixir.Mint.UnsafeProxy.beam | Bin 0 -> 21300 bytes phoenix/_build/prod/lib/mint/ebin/mint.app | 20 + .../_build/prod/lib/mint/ebin/mint_shims.beam | Bin 0 -> 17080 bytes .../lib/nimble_options/.mix/compile.elixir | Bin 0 -> 5184 bytes .../nimble_options/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/nimble_options/.mix/compile.fetch | 0 .../ebin/Elixir.NimbleOptions.Docs.beam | Bin 0 -> 15452 bytes .../Elixir.NimbleOptions.ValidationError.beam | Bin 0 -> 4976 bytes .../ebin/Elixir.NimbleOptions.beam | Bin 0 -> 50076 bytes .../nimble_options/ebin/nimble_options.app | 8 + .../prod/lib/nimble_pool/.mix/compile.elixir | Bin 0 -> 5181 bytes .../lib/nimble_pool/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../prod/lib/nimble_pool/.mix/compile.fetch | 0 .../ebin/Elixir.NimblePool.Application.beam | Bin 0 -> 2520 bytes .../nimble_pool/ebin/Elixir.NimblePool.beam | Bin 0 -> 47908 bytes .../prod/lib/nimble_pool/ebin/nimble_pool.app | 8 + .../prod/lib/phoenix/.mix/compile.elixir | Bin 0 -> 17939 bytes .../prod/lib/phoenix/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../prod/lib/phoenix/.mix/compile.fetch | 0 ...Elixir.Inspect.Phoenix.Socket.Message.beam | Bin 0 -> 3284 bytes .../ebin/Elixir.Mix.Phoenix.Context.beam | Bin 0 -> 16156 bytes .../ebin/Elixir.Mix.Phoenix.Schema.beam | Bin 0 -> 44572 bytes .../ebin/Elixir.Mix.Phoenix.Scope.beam | Bin 0 -> 12440 bytes .../lib/phoenix/ebin/Elixir.Mix.Phoenix.beam | Bin 0 -> 21700 bytes .../Elixir.Mix.Tasks.Compile.Phoenix.beam | Bin 0 -> 4940 bytes .../Elixir.Mix.Tasks.Phx.Digest.Clean.beam | Bin 0 -> 4964 bytes .../ebin/Elixir.Mix.Tasks.Phx.Digest.beam | Bin 0 -> 4804 bytes ...Mix.Tasks.Phx.Gen.Auth.HashingLibrary.beam | Bin 0 -> 5856 bytes ...lixir.Mix.Tasks.Phx.Gen.Auth.Injector.beam | Bin 0 -> 20040 bytes ...ixir.Mix.Tasks.Phx.Gen.Auth.Migration.beam | Bin 0 -> 4796 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.beam | Bin 0 -> 62584 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Cert.beam | Bin 0 -> 12952 bytes .../Elixir.Mix.Tasks.Phx.Gen.Channel.beam | Bin 0 -> 7800 bytes .../Elixir.Mix.Tasks.Phx.Gen.Context.beam | Bin 0 -> 27936 bytes .../Elixir.Mix.Tasks.Phx.Gen.Embedded.beam | Bin 0 -> 10336 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Html.beam | Bin 0 -> 25720 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Json.beam | Bin 0 -> 17624 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Live.beam | Bin 0 -> 28548 bytes .../Elixir.Mix.Tasks.Phx.Gen.Notifier.beam | Bin 0 -> 14040 bytes .../Elixir.Mix.Tasks.Phx.Gen.Presence.beam | Bin 0 -> 5008 bytes .../Elixir.Mix.Tasks.Phx.Gen.Release.beam | Bin 0 -> 22740 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Schema.beam | Bin 0 -> 17568 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Secret.beam | Bin 0 -> 3404 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Socket.beam | Bin 0 -> 7160 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.beam | Bin 0 -> 2508 bytes .../ebin/Elixir.Mix.Tasks.Phx.Routes.beam | Bin 0 -> 10440 bytes .../ebin/Elixir.Mix.Tasks.Phx.Server.beam | Bin 0 -> 3636 bytes .../phoenix/ebin/Elixir.Mix.Tasks.Phx.beam | Bin 0 -> 3432 bytes .../Elixir.Phoenix.ActionClauseError.beam | Bin 0 -> 4560 bytes .../ebin/Elixir.Phoenix.Channel.Server.beam | Bin 0 -> 34224 bytes .../phoenix/ebin/Elixir.Phoenix.Channel.beam | Bin 0 -> 23284 bytes ...ir.Phoenix.ChannelTest.NoopSerializer.beam | Bin 0 -> 4204 bytes .../ebin/Elixir.Phoenix.ChannelTest.beam | Bin 0 -> 34928 bytes ...ixir.Phoenix.CodeReloader.MixListener.beam | Bin 0 -> 9584 bytes .../Elixir.Phoenix.CodeReloader.Proxy.beam | Bin 0 -> 8412 bytes .../Elixir.Phoenix.CodeReloader.Server.beam | Bin 0 -> 25312 bytes .../ebin/Elixir.Phoenix.CodeReloader.beam | Bin 0 -> 44500 bytes .../phoenix/ebin/Elixir.Phoenix.Config.beam | Bin 0 -> 14280 bytes .../phoenix/ebin/Elixir.Phoenix.ConnTest.beam | Bin 0 -> 39696 bytes .../Elixir.Phoenix.Controller.Pipeline.beam | Bin 0 -> 24092 bytes .../ebin/Elixir.Phoenix.Controller.beam | Bin 0 -> 90852 bytes .../phoenix/ebin/Elixir.Phoenix.Debug.beam | Bin 0 -> 7272 bytes .../Elixir.Phoenix.Digester.Compressor.beam | Bin 0 -> 2356 bytes .../ebin/Elixir.Phoenix.Digester.Gzip.beam | Bin 0 -> 2812 bytes .../phoenix/ebin/Elixir.Phoenix.Digester.beam | Bin 0 -> 26844 bytes ...lixir.Phoenix.Endpoint.Cowboy2Adapter.beam | Bin 0 -> 11908 bytes .../Elixir.Phoenix.Endpoint.RenderErrors.beam | Bin 0 -> 21128 bytes .../Elixir.Phoenix.Endpoint.Supervisor.beam | Bin 0 -> 33392 bytes ...r.Phoenix.Endpoint.SyncCodeReloadPlug.beam | Bin 0 -> 3556 bytes .../ebin/Elixir.Phoenix.Endpoint.Watcher.beam | Bin 0 -> 5560 bytes .../phoenix/ebin/Elixir.Phoenix.Endpoint.beam | Bin 0 -> 82472 bytes .../phoenix/ebin/Elixir.Phoenix.Flash.beam | Bin 0 -> 3108 bytes .../phoenix/ebin/Elixir.Phoenix.Logger.beam | Bin 0 -> 24632 bytes .../Elixir.Phoenix.MissingParamError.beam | Bin 0 -> 4604 bytes .../phoenix/ebin/Elixir.Phoenix.Naming.beam | Bin 0 -> 6228 bytes .../Elixir.Phoenix.NotAcceptableError.beam | Bin 0 -> 3972 bytes .../ebin/Elixir.Phoenix.Param.Any.beam | Bin 0 -> 7284 bytes .../ebin/Elixir.Phoenix.Param.Atom.beam | Bin 0 -> 2764 bytes .../ebin/Elixir.Phoenix.Param.BitString.beam | Bin 0 -> 2480 bytes .../ebin/Elixir.Phoenix.Param.Float.beam | Bin 0 -> 2516 bytes .../ebin/Elixir.Phoenix.Param.Integer.beam | Bin 0 -> 2516 bytes .../ebin/Elixir.Phoenix.Param.Map.beam | Bin 0 -> 2840 bytes .../phoenix/ebin/Elixir.Phoenix.Param.beam | Bin 0 -> 5628 bytes .../ebin/Elixir.Phoenix.Presence.Tracker.beam | Bin 0 -> 4656 bytes .../phoenix/ebin/Elixir.Phoenix.Presence.beam | Bin 0 -> 52328 bytes ...lixir.Phoenix.Router.ConsoleFormatter.beam | Bin 0 -> 8552 bytes .../ebin/Elixir.Phoenix.Router.Helpers.beam | Bin 0 -> 49604 bytes ...ixir.Phoenix.Router.MalformedURIError.beam | Bin 0 -> 3692 bytes .../Elixir.Phoenix.Router.NoRouteError.beam | Bin 0 -> 5028 bytes .../ebin/Elixir.Phoenix.Router.Resource.beam | Bin 0 -> 8964 bytes .../ebin/Elixir.Phoenix.Router.Route.beam | Bin 0 -> 17044 bytes .../ebin/Elixir.Phoenix.Router.Scope.beam | Bin 0 -> 19512 bytes .../phoenix/ebin/Elixir.Phoenix.Router.beam | Bin 0 -> 73752 bytes .../ebin/Elixir.Phoenix.Socket.Broadcast.beam | Bin 0 -> 3084 bytes ...ir.Phoenix.Socket.InvalidMessageError.beam | Bin 0 -> 3572 bytes .../ebin/Elixir.Phoenix.Socket.Message.beam | Bin 0 -> 4988 bytes .../Elixir.Phoenix.Socket.PoolDrainer.beam | Bin 0 -> 11128 bytes .../Elixir.Phoenix.Socket.PoolSupervisor.beam | Bin 0 -> 6568 bytes .../ebin/Elixir.Phoenix.Socket.Reply.beam | Bin 0 -> 3296 bytes .../Elixir.Phoenix.Socket.Serializer.beam | Bin 0 -> 2180 bytes .../ebin/Elixir.Phoenix.Socket.Transport.beam | Bin 0 -> 30920 bytes ...ixir.Phoenix.Socket.V1.JSONSerializer.beam | Bin 0 -> 5752 bytes ...ixir.Phoenix.Socket.V2.JSONSerializer.beam | Bin 0 -> 12544 bytes .../phoenix/ebin/Elixir.Phoenix.Socket.beam | Bin 0 -> 46260 bytes .../phoenix/ebin/Elixir.Phoenix.Token.beam | Bin 0 -> 8896 bytes ...ir.Phoenix.Transports.LongPoll.Server.beam | Bin 0 -> 15052 bytes .../Elixir.Phoenix.Transports.LongPoll.beam | Bin 0 -> 16632 bytes .../Elixir.Phoenix.Transports.WebSocket.beam | Bin 0 -> 8584 bytes .../ebin/Elixir.Phoenix.VerifiedRoutes.beam | Bin 0 -> 47140 bytes .../prod/lib/phoenix/ebin/Elixir.Phoenix.beam | Bin 0 -> 5572 bytes ...g.Exception.Phoenix.ActionClauseError.beam | Bin 0 -> 2704 bytes .../_build/prod/lib/phoenix/ebin/phoenix.app | 102 + phoenix/_build/prod/lib/phoenix/priv | 1 + .../prod/lib/phoenix_ecto/.mix/compile.elixir | Bin 0 -> 6258 bytes .../lib/phoenix_ecto/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../prod/lib/phoenix_ecto/.mix/compile.fetch | 0 .../Elixir.Phoenix.Ecto.CheckRepoStatus.beam | Bin 0 -> 7920 bytes ...ir.Phoenix.Ecto.PendingMigrationError.beam | Bin 0 -> 4992 bytes .../ebin/Elixir.Phoenix.Ecto.SQL.Sandbox.beam | Bin 0 -> 14988 bytes ...lixir.Phoenix.Ecto.SQL.SandboxSession.beam | Bin 0 -> 8768 bytes ...r.Phoenix.Ecto.StorageNotCreatedError.beam | Bin 0 -> 3964 bytes .../ebin/Elixir.Phoenix.Ecto.beam | Bin 0 -> 2680 bytes .../Elixir.Plug.Exception.Ecto.CastError.beam | Bin 0 -> 2664 bytes ...ir.Plug.Exception.Ecto.NoResultsError.beam | Bin 0 -> 2692 bytes ...r.Plug.Exception.Ecto.Query.CastError.beam | Bin 0 -> 2696 bytes ...r.Plug.Exception.Ecto.StaleEntryError.beam | Bin 0 -> 2696 bytes ...xir.Plug.Exception.Ecto.SubQueryError.beam | Bin 0 -> 2952 bytes ...on.Phoenix.Ecto.PendingMigrationError.beam | Bin 0 -> 4192 bytes ...n.Phoenix.Ecto.StorageNotCreatedError.beam | Bin 0 -> 3836 bytes .../lib/phoenix_ecto/ebin/phoenix_ecto.app | 22 + .../lib/phoenix_pubsub/.mix/compile.elixir | Bin 0 -> 6828 bytes .../phoenix_pubsub/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/phoenix_pubsub/.mix/compile.fetch | 0 .../ebin/Elixir.Phoenix.PubSub.Adapter.beam | Bin 0 -> 2512 bytes .../Elixir.Phoenix.PubSub.Application.beam | Bin 0 -> 2616 bytes .../Elixir.Phoenix.PubSub.BroadcastError.beam | Bin 0 -> 3884 bytes .../ebin/Elixir.Phoenix.PubSub.PG2.beam | Bin 0 -> 8040 bytes .../ebin/Elixir.Phoenix.PubSub.PG2Worker.beam | Bin 0 -> 7004 bytes .../Elixir.Phoenix.PubSub.Supervisor.beam | Bin 0 -> 5488 bytes .../ebin/Elixir.Phoenix.PubSub.beam | Bin 0 -> 15300 bytes .../ebin/Elixir.Phoenix.Tracker.Clock.beam | Bin 0 -> 7652 bytes ...lixir.Phoenix.Tracker.DeltaGeneration.beam | Bin 0 -> 9196 bytes .../ebin/Elixir.Phoenix.Tracker.Replica.beam | Bin 0 -> 10372 bytes .../ebin/Elixir.Phoenix.Tracker.Shard.beam | Bin 0 -> 51004 bytes ...lixir.Phoenix.Tracker.ShutdownHandler.beam | Bin 0 -> 6976 bytes .../ebin/Elixir.Phoenix.Tracker.State.beam | Bin 0 -> 53116 bytes .../ebin/Elixir.Phoenix.Tracker.beam | Bin 0 -> 17508 bytes .../phoenix_pubsub/ebin/phoenix_pubsub.app | 21 + .../lib/phoenix_template/.mix/compile.elixir | Bin 0 -> 5324 bytes .../phoenix_template/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/phoenix_template/.mix/compile.fetch | 0 .../Elixir.Phoenix.Template.EExEngine.beam | Bin 0 -> 4604 bytes .../ebin/Elixir.Phoenix.Template.Engine.beam | Bin 0 -> 1956 bytes .../Elixir.Phoenix.Template.ExsEngine.beam | Bin 0 -> 2052 bytes .../ebin/Elixir.Phoenix.Template.beam | Bin 0 -> 27272 bytes .../ebin/phoenix_template.app | 10 + .../_build/prod/lib/plug/.mix/compile.elixir | Bin 0 -> 12354 bytes .../prod/lib/plug/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/prod/lib/plug/.mix/compile.erlang | Bin 0 -> 112 bytes .../_build/prod/lib/plug/.mix/compile.fetch | 0 .../plug/ebin/Elixir.Inspect.Plug.Conn.beam | Bin 0 -> 3132 bytes .../ebin/Elixir.Plug.Adapters.Cowboy.beam | Bin 0 -> 6064 bytes .../ebin/Elixir.Plug.Adapters.Test.Conn.beam | Bin 0 -> 21560 bytes .../plug/ebin/Elixir.Plug.Application.beam | Bin 0 -> 2648 bytes .../ebin/Elixir.Plug.BadRequestError.beam | Bin 0 -> 3772 bytes .../lib/plug/ebin/Elixir.Plug.BasicAuth.beam | Bin 0 -> 9316 bytes .../lib/plug/ebin/Elixir.Plug.Builder.beam | Bin 0 -> 20736 bytes ....CSRFProtection.InvalidCSRFTokenError.beam | Bin 0 -> 4280 bytes ...ection.InvalidCrossOriginRequestError.beam | Bin 0 -> 4256 bytes .../plug/ebin/Elixir.Plug.CSRFProtection.beam | Bin 0 -> 18792 bytes .../plug/ebin/Elixir.Plug.Conn.Adapter.beam | Bin 0 -> 9520 bytes .../Elixir.Plug.Conn.AlreadySentError.beam | Bin 0 -> 3624 bytes .../Elixir.Plug.Conn.CookieOverflowError.beam | Bin 0 -> 3676 bytes .../plug/ebin/Elixir.Plug.Conn.Cookies.beam | Bin 0 -> 9940 bytes .../Elixir.Plug.Conn.InvalidHeaderError.beam | Bin 0 -> 3648 bytes .../Elixir.Plug.Conn.InvalidQueryError.beam | Bin 0 -> 3780 bytes .../ebin/Elixir.Plug.Conn.NotSentError.beam | Bin 0 -> 3664 bytes .../lib/plug/ebin/Elixir.Plug.Conn.Query.beam | Bin 0 -> 17752 bytes .../plug/ebin/Elixir.Plug.Conn.Status.beam | Bin 0 -> 18904 bytes .../plug/ebin/Elixir.Plug.Conn.Unfetched.beam | Bin 0 -> 5600 bytes .../lib/plug/ebin/Elixir.Plug.Conn.Utils.beam | Bin 0 -> 13416 bytes .../ebin/Elixir.Plug.Conn.WrapperError.beam | Bin 0 -> 6072 bytes .../prod/lib/plug/ebin/Elixir.Plug.Conn.beam | Bin 0 -> 142612 bytes .../lib/plug/ebin/Elixir.Plug.Debugger.beam | Bin 0 -> 211520 bytes .../plug/ebin/Elixir.Plug.ErrorHandler.beam | Bin 0 -> 15356 bytes .../plug/ebin/Elixir.Plug.Exception.Any.beam | Bin 0 -> 2896 bytes .../lib/plug/ebin/Elixir.Plug.Exception.beam | Bin 0 -> 5956 bytes .../prod/lib/plug/ebin/Elixir.Plug.HTML.beam | Bin 0 -> 4220 bytes .../prod/lib/plug/ebin/Elixir.Plug.Head.beam | Bin 0 -> 3588 bytes .../lib/plug/ebin/Elixir.Plug.Logger.beam | Bin 0 -> 4768 bytes .../prod/lib/plug/ebin/Elixir.Plug.MIME.beam | Bin 0 -> 3928 bytes .../plug/ebin/Elixir.Plug.MethodOverride.beam | Bin 0 -> 5696 bytes .../Elixir.Plug.Parsers.BadEncodingError.beam | Bin 0 -> 3680 bytes .../plug/ebin/Elixir.Plug.Parsers.JSON.beam | Bin 0 -> 8092 bytes .../ebin/Elixir.Plug.Parsers.MULTIPART.beam | Bin 0 -> 14044 bytes .../ebin/Elixir.Plug.Parsers.ParseError.beam | Bin 0 -> 4092 bytes ...xir.Plug.Parsers.RequestTooLargeError.beam | Bin 0 -> 3956 bytes .../ebin/Elixir.Plug.Parsers.URLENCODED.beam | Bin 0 -> 4588 bytes ...lug.Parsers.UnsupportedMediaTypeError.beam | Bin 0 -> 3976 bytes .../lib/plug/ebin/Elixir.Plug.Parsers.beam | Bin 0 -> 12688 bytes .../lib/plug/ebin/Elixir.Plug.RequestId.beam | Bin 0 -> 5112 bytes .../lib/plug/ebin/Elixir.Plug.RewriteOn.beam | Bin 0 -> 6588 bytes .../Elixir.Plug.Router.InvalidSpecError.beam | Bin 0 -> 3592 bytes .../Elixir.Plug.Router.MalformedURIError.beam | Bin 0 -> 3676 bytes .../plug/ebin/Elixir.Plug.Router.Utils.beam | Bin 0 -> 16132 bytes .../lib/plug/ebin/Elixir.Plug.Router.beam | Bin 0 -> 42204 bytes .../prod/lib/plug/ebin/Elixir.Plug.SSL.beam | Bin 0 -> 23064 bytes .../plug/ebin/Elixir.Plug.Session.COOKIE.beam | Bin 0 -> 12516 bytes .../plug/ebin/Elixir.Plug.Session.ETS.beam | Bin 0 -> 5196 bytes .../plug/ebin/Elixir.Plug.Session.Store.beam | Bin 0 -> 3404 bytes .../lib/plug/ebin/Elixir.Plug.Session.beam | Bin 0 -> 7020 bytes .../Elixir.Plug.Static.InvalidPathError.beam | Bin 0 -> 3700 bytes .../lib/plug/ebin/Elixir.Plug.Static.beam | Bin 0 -> 21560 bytes .../lib/plug/ebin/Elixir.Plug.Telemetry.beam | Bin 0 -> 5212 bytes .../prod/lib/plug/ebin/Elixir.Plug.Test.beam | Bin 0 -> 21224 bytes .../plug/ebin/Elixir.Plug.TimeoutError.beam | Bin 0 -> 3704 bytes .../ebin/Elixir.Plug.Upload.Supervisor.beam | Bin 0 -> 4584 bytes .../ebin/Elixir.Plug.Upload.Terminator.beam | Bin 0 -> 7272 bytes .../lib/plug/ebin/Elixir.Plug.Upload.beam | Bin 0 -> 16624 bytes .../plug/ebin/Elixir.Plug.UploadError.beam | Bin 0 -> 3452 bytes .../prod/lib/plug/ebin/Elixir.Plug.beam | Bin 0 -> 10400 bytes phoenix/_build/prod/lib/plug/ebin/plug.app | 54 + .../prod/lib/plug/ebin/plug_multipart.beam | Bin 0 -> 21752 bytes .../prod/lib/plug_crypto/.mix/compile.elixir | Bin 0 -> 5548 bytes .../lib/plug_crypto/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../prod/lib/plug_crypto/.mix/compile.fetch | 0 .../ebin/Elixir.Plug.Crypto.Application.beam | Bin 0 -> 2832 bytes .../ebin/Elixir.Plug.Crypto.KeyGenerator.beam | Bin 0 -> 5612 bytes .../Elixir.Plug.Crypto.MessageEncryptor.beam | Bin 0 -> 12168 bytes .../Elixir.Plug.Crypto.MessageVerifier.beam | Bin 0 -> 5928 bytes .../plug_crypto/ebin/Elixir.Plug.Crypto.beam | Bin 0 -> 16556 bytes .../prod/lib/plug_crypto/ebin/plug_crypto.app | 11 + .../_build/prod/lib/req/.mix/compile.elixir | Bin 0 -> 8530 bytes .../prod/lib/req/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/prod/lib/req/.mix/compile.fetch | 0 ...Collectable.Req.Utils.CollectWithHash.beam | Bin 0 -> 3904 bytes .../Elixir.Enumerable.Req.Response.Async.beam | Bin 0 -> 7448 bytes .../req/ebin/Elixir.Inspect.Req.Request.beam | Bin 0 -> 8284 bytes .../Elixir.Inspect.Req.Response.Async.beam | Bin 0 -> 3040 bytes .../lib/req/ebin/Elixir.Req.Application.beam | Bin 0 -> 2852 bytes .../lib/req/ebin/Elixir.Req.ArchiveError.beam | Bin 0 -> 4656 bytes .../Elixir.Req.ChecksumMismatchError.beam | Bin 0 -> 4052 bytes .../req/ebin/Elixir.Req.DecompressError.beam | Bin 0 -> 4344 bytes .../prod/lib/req/ebin/Elixir.Req.Fields.beam | Bin 0 -> 8764 bytes .../prod/lib/req/ebin/Elixir.Req.Finch.beam | Bin 0 -> 20572 bytes .../lib/req/ebin/Elixir.Req.HTTPError.beam | Bin 0 -> 4596 bytes .../prod/lib/req/ebin/Elixir.Req.Request.beam | Bin 0 -> 45768 bytes .../req/ebin/Elixir.Req.Response.Async.beam | Bin 0 -> 3404 bytes .../lib/req/ebin/Elixir.Req.Response.beam | Bin 0 -> 13964 bytes .../prod/lib/req/ebin/Elixir.Req.Steps.beam | Bin 0 -> 88064 bytes .../lib/req/ebin/Elixir.Req.Test.Adapter.beam | Bin 0 -> 7376 bytes .../req/ebin/Elixir.Req.Test.Ownership.beam | Bin 0 -> 37244 bytes .../ebin/Elixir.Req.Test.OwnershipError.beam | Bin 0 -> 4880 bytes .../prod/lib/req/ebin/Elixir.Req.Test.beam | Bin 0 -> 29116 bytes .../Elixir.Req.TooManyRedirectsError.beam | Bin 0 -> 3844 bytes .../req/ebin/Elixir.Req.TransportError.beam | Bin 0 -> 3760 bytes .../Elixir.Req.Utils.CollectWithHash.beam | Bin 0 -> 2688 bytes .../prod/lib/req/ebin/Elixir.Req.Utils.beam | Bin 0 -> 41284 bytes .../_build/prod/lib/req/ebin/Elixir.Req.beam | Bin 0 -> 37028 bytes phoenix/_build/prod/lib/req/ebin/req.app | 24 + .../shooting_event_phx/.mix/compile.app_cache | Bin 0 -> 9831 bytes .../shooting_event_phx/.mix/compile.elixir | Bin 0 -> 9527 bytes .../.mix/compile.elixir_scm | Bin 0 -> 44 bytes .../lib/shooting_event_phx/.mix/compile.lock | 0 .../shooting_event_phx/.mix/compile.protocols | Bin 0 -> 27 bytes ...lixir.Bandit.HTTP2.Frame.Serializable.beam | Bin 0 -> 5796 bytes .../Elixir.Bandit.HTTPTransport.beam | Bin 0 -> 8812 bytes ...r.Bandit.WebSocket.Frame.Serializable.beam | Bin 0 -> 5300 bytes .../Elixir.Bandit.WebSocket.Socket.beam | Bin 0 -> 5012 bytes .../consolidated/Elixir.Collectable.beam | Bin 0 -> 6420 bytes .../Elixir.DBConnection.Query.beam | Bin 0 -> 5720 bytes .../consolidated/Elixir.Ecto.Queryable.beam | Bin 0 -> 5916 bytes .../consolidated/Elixir.Enumerable.beam | Bin 0 -> 10460 bytes .../consolidated/Elixir.IEx.Info.beam | Bin 0 -> 5704 bytes .../consolidated/Elixir.Inspect.beam | Bin 0 -> 17264 bytes .../consolidated/Elixir.JSON.Encoder.beam | Bin 0 -> 10680 bytes .../consolidated/Elixir.Jason.Encoder.beam | Bin 0 -> 5940 bytes .../consolidated/Elixir.List.Chars.beam | Bin 0 -> 5040 bytes .../consolidated/Elixir.Phoenix.Param.beam | Bin 0 -> 4748 bytes .../consolidated/Elixir.Plug.Exception.beam | Bin 0 -> 5872 bytes .../consolidated/Elixir.String.Chars.beam | Bin 0 -> 5556 bytes .../Elixir.ShootingEventPhx.AI.Gemini.beam | Bin 0 -> 11704 bytes .../Elixir.ShootingEventPhx.Application.beam | Bin 0 -> 4052 bytes ...ir.ShootingEventPhx.Auth.SessionStore.beam | Bin 0 -> 5660 bytes .../ebin/Elixir.ShootingEventPhx.Auth.beam | Bin 0 -> 4788 bytes ...ir.ShootingEventPhx.Domain.AppSetting.beam | Bin 0 -> 13824 bytes ...lixir.ShootingEventPhx.Domain.Derived.beam | Bin 0 -> 18744 bytes ...xir.ShootingEventPhx.Domain.EventData.beam | Bin 0 -> 27444 bytes ...Elixir.ShootingEventPhx.Domain.Player.beam | Bin 0 -> 18040 bytes .../Elixir.ShootingEventPhx.Domain.Score.beam | Bin 0 -> 14816 bytes ...ootingEventPhx.Domain.ScoreAttachment.beam | Bin 0 -> 15128 bytes ...ixir.ShootingEventPhx.Domain.Settings.beam | Bin 0 -> 14428 bytes ...Elixir.ShootingEventPhx.Domain.Stages.beam | Bin 0 -> 5232 bytes ....ShootingEventPhx.Domain.StateService.beam | Bin 0 -> 5036 bytes .../ebin/Elixir.ShootingEventPhx.Events.beam | Bin 0 -> 2396 bytes .../ebin/Elixir.ShootingEventPhx.Repo.beam | Bin 0 -> 27444 bytes .../ebin/Elixir.ShootingEventPhx.beam | Bin 0 -> 1428 bytes ...xir.ShootingEventPhxWeb.ApiController.beam | Bin 0 -> 20468 bytes .../Elixir.ShootingEventPhxWeb.Endpoint.beam | Bin 0 -> 20336 bytes .../Elixir.ShootingEventPhxWeb.ErrorJSON.beam | Bin 0 -> 2176 bytes ....ShootingEventPhxWeb.EventsController.beam | Bin 0 -> 9388 bytes ...hootingEventPhxWeb.FrontendController.beam | Bin 0 -> 9588 bytes ...r.ShootingEventPhxWeb.Plugs.AdminOnly.beam | Bin 0 -> 2592 bytes ...Elixir.ShootingEventPhxWeb.Plugs.CORS.beam | Bin 0 -> 2836 bytes .../Elixir.ShootingEventPhxWeb.Router.beam | Bin 0 -> 38788 bytes .../Elixir.ShootingEventPhxWeb.Telemetry.beam | Bin 0 -> 6300 bytes .../ebin/Elixir.ShootingEventPhxWeb.beam | Bin 0 -> 10004 bytes .../ebin/shooting_event_phx.app | 46 + .../_build/prod/lib/shooting_event_phx/priv | 1 + .../prod/lib/telemetry/.mix/compile.fetch | 0 .../prod/lib/telemetry/ebin/telemetry.app | 15 + .../prod/lib/telemetry/ebin/telemetry.beam | Bin 0 -> 14660 bytes .../lib/telemetry/ebin/telemetry_app.beam | Bin 0 -> 1476 bytes .../lib/telemetry/ebin/telemetry_ets.beam | Bin 0 -> 4220 bytes .../ebin/telemetry_handler_table.beam | Bin 0 -> 6372 bytes .../prod/lib/telemetry/ebin/telemetry_pt.beam | Bin 0 -> 4152 bytes .../lib/telemetry/ebin/telemetry_sup.beam | Bin 0 -> 2116 bytes .../lib/telemetry/ebin/telemetry_test.beam | Bin 0 -> 3364 bytes .../prod/lib/telemetry/mix.rebar.config | 17 + phoenix/_build/prod/lib/telemetry/src | 1 + .../lib/telemetry_metrics/.mix/compile.elixir | Bin 0 -> 5699 bytes .../telemetry_metrics/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/telemetry_metrics/.mix/compile.fetch | 0 ...xir.Telemetry.Metrics.ConsoleReporter.beam | Bin 0 -> 15692 bytes .../Elixir.Telemetry.Metrics.Counter.beam | Bin 0 -> 3768 bytes ...Elixir.Telemetry.Metrics.Distribution.beam | Bin 0 -> 3804 bytes .../Elixir.Telemetry.Metrics.LastValue.beam | Bin 0 -> 3792 bytes .../ebin/Elixir.Telemetry.Metrics.Sum.beam | Bin 0 -> 3740 bytes .../Elixir.Telemetry.Metrics.Summary.beam | Bin 0 -> 3768 bytes .../ebin/Elixir.Telemetry.Metrics.beam | Bin 0 -> 23224 bytes .../ebin/telemetry_metrics.app | 13 + .../lib/telemetry_poller/.mix/compile.fetch | 0 .../ebin/telemetry_poller.app | 13 + .../ebin/telemetry_poller.beam | Bin 0 -> 13880 bytes .../ebin/telemetry_poller_app.beam | Bin 0 -> 2344 bytes .../ebin/telemetry_poller_builtin.beam | Bin 0 -> 3840 bytes .../ebin/telemetry_poller_sup.beam | Bin 0 -> 1828 bytes .../lib/telemetry_poller/mix.rebar.config | 16 + phoenix/_build/prod/lib/telemetry_poller/src | 1 + .../lib/thousand_island/.mix/compile.elixir | Bin 0 -> 7549 bytes .../thousand_island/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/thousand_island/.mix/compile.fetch | 0 .../ebin/Elixir.ThousandIsland.Acceptor.beam | Bin 0 -> 6844 bytes ...ThousandIsland.AcceptorPoolSupervisor.beam | Bin 0 -> 7224 bytes ...xir.ThousandIsland.AcceptorSupervisor.beam | Bin 0 -> 6684 bytes .../Elixir.ThousandIsland.Connection.beam | Bin 0 -> 5572 bytes .../ebin/Elixir.ThousandIsland.Handler.beam | Bin 0 -> 117884 bytes .../Elixir.ThousandIsland.HandlerConfig.beam | Bin 0 -> 6128 bytes .../ebin/Elixir.ThousandIsland.Listener.beam | Bin 0 -> 13120 bytes .../ebin/Elixir.ThousandIsland.Logger.beam | Bin 0 -> 8764 bytes .../Elixir.ThousandIsland.ProcessLabel.beam | Bin 0 -> 5056 bytes .../ebin/Elixir.ThousandIsland.Server.beam | Bin 0 -> 7616 bytes .../Elixir.ThousandIsland.ServerConfig.beam | Bin 0 -> 8404 bytes ...lixir.ThousandIsland.ShutdownListener.beam | Bin 0 -> 8760 bytes .../ebin/Elixir.ThousandIsland.Socket.beam | Bin 0 -> 22208 bytes .../ebin/Elixir.ThousandIsland.Telemetry.beam | Bin 0 -> 13588 bytes .../ebin/Elixir.ThousandIsland.Transport.beam | Bin 0 -> 6408 bytes .../Elixir.ThousandIsland.Transports.SSL.beam | Bin 0 -> 12100 bytes .../Elixir.ThousandIsland.Transports.TCP.beam | Bin 0 -> 10064 bytes .../ebin/Elixir.ThousandIsland.beam | Bin 0 -> 10664 bytes .../thousand_island/ebin/thousand_island.app | 24 + .../prod/lib/websock/.mix/compile.elixir | Bin 0 -> 4829 bytes .../prod/lib/websock/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../prod/lib/websock/.mix/compile.fetch | 0 .../prod/lib/websock/ebin/Elixir.WebSock.beam | Bin 0 -> 5324 bytes .../_build/prod/lib/websock/ebin/websock.app | 7 + .../lib/websock_adapter/.mix/compile.elixir | Bin 0 -> 5277 bytes .../websock_adapter/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/websock_adapter/.mix/compile.fetch | 0 .../Elixir.WebSockAdapter.UpgradeError.beam | Bin 0 -> 3572 bytes ...ixir.WebSockAdapter.UpgradeValidation.beam | Bin 0 -> 6608 bytes .../ebin/Elixir.WebSockAdapter.beam | Bin 0 -> 6216 bytes .../websock_adapter/ebin/websock_adapter.app | 10 + .../test/lib/bandit/.mix/compile.elixir | Bin 0 -> 14111 bytes .../test/lib/bandit/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/test/lib/bandit/.mix/compile.fetch | 0 .../bandit/ebin/Elixir.Bandit.Adapter.beam | Bin 0 -> 26204 bytes .../ebin/Elixir.Bandit.Application.beam | Bin 0 -> 2616 bytes .../lib/bandit/ebin/Elixir.Bandit.Clock.beam | Bin 0 -> 5000 bytes .../ebin/Elixir.Bandit.Compression.beam | Bin 0 -> 15992 bytes .../ebin/Elixir.Bandit.DelegatingHandler.beam | Bin 0 -> 19276 bytes .../bandit/ebin/Elixir.Bandit.Extractor.beam | Bin 0 -> 10664 bytes .../ebin/Elixir.Bandit.HTTP1.Handler.beam | Bin 0 -> 25732 bytes .../ebin/Elixir.Bandit.HTTP1.Socket.beam | Bin 0 -> 4420 bytes .../ebin/Elixir.Bandit.HTTP2.Connection.beam | Bin 0 -> 43464 bytes ...r.Bandit.HTTP2.Errors.ConnectionError.beam | Bin 0 -> 3696 bytes ...lixir.Bandit.HTTP2.Errors.StreamError.beam | Bin 0 -> 3796 bytes .../ebin/Elixir.Bandit.HTTP2.Errors.beam | Bin 0 -> 5260 bytes .../ebin/Elixir.Bandit.HTTP2.FlowControl.beam | Bin 0 -> 3276 bytes ...lixir.Bandit.HTTP2.Frame.Continuation.beam | Bin 0 -> 4760 bytes .../ebin/Elixir.Bandit.HTTP2.Frame.Data.beam | Bin 0 -> 5652 bytes .../ebin/Elixir.Bandit.HTTP2.Frame.Flags.beam | Bin 0 -> 4880 bytes .../Elixir.Bandit.HTTP2.Frame.Goaway.beam | Bin 0 -> 4764 bytes .../Elixir.Bandit.HTTP2.Frame.Headers.beam | Bin 0 -> 8556 bytes .../ebin/Elixir.Bandit.HTTP2.Frame.Ping.beam | Bin 0 -> 4908 bytes .../Elixir.Bandit.HTTP2.Frame.Priority.beam | Bin 0 -> 4964 bytes ...Elixir.Bandit.HTTP2.Frame.PushPromise.beam | Bin 0 -> 2340 bytes .../Elixir.Bandit.HTTP2.Frame.RstStream.beam | Bin 0 -> 4700 bytes ...zable.Bandit.HTTP2.Frame.Continuation.beam | Bin 0 -> 4572 bytes ....Serializable.Bandit.HTTP2.Frame.Data.beam | Bin 0 -> 4828 bytes ...erializable.Bandit.HTTP2.Frame.Goaway.beam | Bin 0 -> 3732 bytes ...rializable.Bandit.HTTP2.Frame.Headers.beam | Bin 0 -> 5180 bytes ....Serializable.Bandit.HTTP2.Frame.Ping.beam | Bin 0 -> 3984 bytes ...ializable.Bandit.HTTP2.Frame.Priority.beam | Bin 0 -> 3720 bytes ...alizable.Bandit.HTTP2.Frame.RstStream.beam | Bin 0 -> 3552 bytes ...ializable.Bandit.HTTP2.Frame.Settings.beam | Bin 0 -> 5196 bytes ...zable.Bandit.HTTP2.Frame.WindowUpdate.beam | Bin 0 -> 3620 bytes ...lixir.Bandit.HTTP2.Frame.Serializable.beam | Bin 0 -> 5700 bytes .../Elixir.Bandit.HTTP2.Frame.Settings.beam | Bin 0 -> 7888 bytes .../Elixir.Bandit.HTTP2.Frame.Unknown.beam | Bin 0 -> 3980 bytes ...lixir.Bandit.HTTP2.Frame.WindowUpdate.beam | Bin 0 -> 4784 bytes .../ebin/Elixir.Bandit.HTTP2.Frame.beam | Bin 0 -> 5956 bytes .../ebin/Elixir.Bandit.HTTP2.Handler.beam | Bin 0 -> 31464 bytes .../ebin/Elixir.Bandit.HTTP2.Settings.beam | Bin 0 -> 3464 bytes .../ebin/Elixir.Bandit.HTTP2.Stream.beam | Bin 0 -> 7204 bytes .../Elixir.Bandit.HTTP2.StreamCollection.beam | Bin 0 -> 7292 bytes .../Elixir.Bandit.HTTP2.StreamProcess.beam | Bin 0 -> 8072 bytes .../bandit/ebin/Elixir.Bandit.HTTPError.beam | Bin 0 -> 3640 bytes ...dit.HTTPTransport.Bandit.HTTP1.Socket.beam | Bin 0 -> 41640 bytes ...dit.HTTPTransport.Bandit.HTTP2.Stream.beam | Bin 0 -> 38848 bytes .../ebin/Elixir.Bandit.HTTPTransport.beam | Bin 0 -> 9888 bytes .../bandit/ebin/Elixir.Bandit.Headers.beam | Bin 0 -> 7992 bytes .../ebin/Elixir.Bandit.InitialHandler.beam | Bin 0 -> 22376 bytes .../lib/bandit/ebin/Elixir.Bandit.Logger.beam | Bin 0 -> 4660 bytes .../ebin/Elixir.Bandit.PhoenixAdapter.beam | Bin 0 -> 6664 bytes .../bandit/ebin/Elixir.Bandit.Pipeline.beam | Bin 0 -> 15396 bytes .../Elixir.Bandit.PrimitiveOps.WebSocket.beam | Bin 0 -> 3608 bytes .../ebin/Elixir.Bandit.SocketHelpers.beam | Bin 0 -> 5756 bytes .../bandit/ebin/Elixir.Bandit.Telemetry.beam | Bin 0 -> 11456 bytes .../lib/bandit/ebin/Elixir.Bandit.Trace.beam | Bin 0 -> 13828 bytes .../ebin/Elixir.Bandit.TransportError.beam | Bin 0 -> 3612 bytes .../Elixir.Bandit.WebSocket.Connection.beam | Bin 0 -> 23884 bytes .../Elixir.Bandit.WebSocket.Frame.Binary.beam | Bin 0 -> 3740 bytes ...andit.WebSocket.Frame.ConnectionClose.beam | Bin 0 -> 6632 bytes ...r.Bandit.WebSocket.Frame.Continuation.beam | Bin 0 -> 4024 bytes .../Elixir.Bandit.WebSocket.Frame.Ping.beam | Bin 0 -> 4776 bytes .../Elixir.Bandit.WebSocket.Frame.Pong.beam | Bin 0 -> 4776 bytes ...lizable.Bandit.WebSocket.Frame.Binary.beam | Bin 0 -> 3616 bytes ...andit.WebSocket.Frame.ConnectionClose.beam | Bin 0 -> 4820 bytes ...e.Bandit.WebSocket.Frame.Continuation.beam | Bin 0 -> 3572 bytes ...ializable.Bandit.WebSocket.Frame.Ping.beam | Bin 0 -> 3444 bytes ...ializable.Bandit.WebSocket.Frame.Pong.beam | Bin 0 -> 3444 bytes ...ializable.Bandit.WebSocket.Frame.Text.beam | Bin 0 -> 3588 bytes ...r.Bandit.WebSocket.Frame.Serializable.beam | Bin 0 -> 5676 bytes .../Elixir.Bandit.WebSocket.Frame.Text.beam | Bin 0 -> 3724 bytes .../ebin/Elixir.Bandit.WebSocket.Frame.beam | Bin 0 -> 15392 bytes .../ebin/Elixir.Bandit.WebSocket.Handler.beam | Bin 0 -> 24732 bytes .../Elixir.Bandit.WebSocket.Handshake.beam | Bin 0 -> 7748 bytes ...ir.Bandit.WebSocket.PerMessageDeflate.beam | Bin 0 -> 14952 bytes ...ebSocket.Socket.ThousandIsland.Socket.beam | Bin 0 -> 6796 bytes .../ebin/Elixir.Bandit.WebSocket.Socket.beam | Bin 0 -> 6240 bytes ...ir.Bandit.WebSocket.UpgradeValidation.beam | Bin 0 -> 5352 bytes .../test/lib/bandit/ebin/Elixir.Bandit.beam | Bin 0 -> 21940 bytes .../_build/test/lib/bandit/ebin/bandit.app | 81 + .../lib/cc_precompiler/.mix/compile.elixir | Bin 0 -> 5381 bytes .../cc_precompiler/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/cc_precompiler/.mix/compile.fetch | 0 ...lixir.CCPrecompiler.CompilationScript.beam | Bin 0 -> 1904 bytes .../Elixir.CCPrecompiler.UniversalBinary.beam | Bin 0 -> 4548 bytes .../ebin/Elixir.CCPrecompiler.beam | Bin 0 -> 28948 bytes .../cc_precompiler/ebin/cc_precompiler.app | 9 + .../lib/db_connection/.mix/compile.elixir | Bin 0 -> 8193 bytes .../lib/db_connection/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../test/lib/db_connection/.mix/compile.fetch | 0 .../ebin/Elixir.DBConnection.App.beam | Bin 0 -> 3052 bytes .../ebin/Elixir.DBConnection.Backoff.beam | Bin 0 -> 11244 bytes .../ebin/Elixir.DBConnection.Connection.beam | Bin 0 -> 39792 bytes .../Elixir.DBConnection.ConnectionError.beam | Bin 0 -> 4544 bytes ...ixir.DBConnection.ConnectionPool.Pool.beam | Bin 0 -> 5420 bytes .../Elixir.DBConnection.ConnectionPool.beam | Bin 0 -> 28544 bytes .../ebin/Elixir.DBConnection.EncodeError.beam | Bin 0 -> 3500 bytes .../ebin/Elixir.DBConnection.Holder.beam | Bin 0 -> 26460 bytes .../ebin/Elixir.DBConnection.LogEntry.beam | Bin 0 -> 5940 bytes ...Elixir.DBConnection.Ownership.Manager.beam | Bin 0 -> 35664 bytes .../Elixir.DBConnection.Ownership.Proxy.beam | Bin 0 -> 24220 bytes .../ebin/Elixir.DBConnection.Ownership.beam | Bin 0 -> 6888 bytes .../Elixir.DBConnection.OwnershipError.beam | Bin 0 -> 3676 bytes .../ebin/Elixir.DBConnection.Pool.beam | Bin 0 -> 2308 bytes .../Elixir.DBConnection.PrepareStream.beam | Bin 0 -> 3036 bytes .../ebin/Elixir.DBConnection.Query.beam | Bin 0 -> 6912 bytes .../ebin/Elixir.DBConnection.Stream.beam | Bin 0 -> 2988 bytes .../ebin/Elixir.DBConnection.Task.beam | Bin 0 -> 4644 bytes ...Elixir.DBConnection.TelemetryListener.beam | Bin 0 -> 10616 bytes .../Elixir.DBConnection.TransactionError.beam | Bin 0 -> 4896 bytes .../ebin/Elixir.DBConnection.Util.beam | Bin 0 -> 3660 bytes .../ebin/Elixir.DBConnection.Watcher.beam | Bin 0 -> 9120 bytes .../ebin/Elixir.DBConnection.beam | Bin 0 -> 66556 bytes ...Enumerable.DBConnection.PrepareStream.beam | Bin 0 -> 3712 bytes ...Elixir.Enumerable.DBConnection.Stream.beam | Bin 0 -> 3644 bytes .../lib/db_connection/ebin/db_connection.app | 31 + .../test/lib/decimal/.mix/compile.elixir | Bin 0 -> 5689 bytes .../test/lib/decimal/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../test/lib/decimal/.mix/compile.fetch | 0 .../decimal/ebin/Elixir.Decimal.Context.beam | Bin 0 -> 6376 bytes .../decimal/ebin/Elixir.Decimal.Error.beam | Bin 0 -> 4276 bytes .../decimal/ebin/Elixir.Decimal.Macros.beam | Bin 0 -> 2224 bytes .../test/lib/decimal/ebin/Elixir.Decimal.beam | Bin 0 -> 123260 bytes .../decimal/ebin/Elixir.Inspect.Decimal.beam | Bin 0 -> 2660 bytes .../ebin/Elixir.JSON.Encoder.Decimal.beam | Bin 0 -> 2624 bytes .../ebin/Elixir.String.Chars.Decimal.beam | Bin 0 -> 2472 bytes .../_build/test/lib/decimal/ebin/decimal.app | 11 + .../test/lib/dns_cluster/.mix/compile.elixir | Bin 0 -> 5078 bytes .../lib/dns_cluster/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../test/lib/dns_cluster/.mix/compile.fetch | 0 .../ebin/Elixir.DNSCluster.Resolver.beam | Bin 0 -> 3948 bytes .../dns_cluster/ebin/Elixir.DNSCluster.beam | Bin 0 -> 17828 bytes .../test/lib/dns_cluster/ebin/dns_cluster.app | 7 + .../_build/test/lib/ecto/.mix/compile.elixir | Bin 0 -> 15422 bytes .../test/lib/ecto/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/test/lib/ecto/.mix/compile.fetch | 0 .../ebin/Elixir.Ecto.Adapter.Queryable.beam | Bin 0 -> 5720 bytes .../ecto/ebin/Elixir.Ecto.Adapter.Schema.beam | Bin 0 -> 3504 bytes .../ebin/Elixir.Ecto.Adapter.Storage.beam | Bin 0 -> 2256 bytes .../ebin/Elixir.Ecto.Adapter.Transaction.beam | Bin 0 -> 2268 bytes .../lib/ecto/ebin/Elixir.Ecto.Adapter.beam | Bin 0 -> 4460 bytes .../ecto/ebin/Elixir.Ecto.Application.beam | Bin 0 -> 2500 bytes .../Elixir.Ecto.Association.BelongsTo.beam | Bin 0 -> 17712 bytes .../ebin/Elixir.Ecto.Association.Has.beam | Bin 0 -> 24440 bytes .../Elixir.Ecto.Association.HasThrough.beam | Bin 0 -> 9636 bytes .../Elixir.Ecto.Association.ManyToMany.beam | Bin 0 -> 32340 bytes .../Elixir.Ecto.Association.NotLoaded.beam | Bin 0 -> 3080 bytes .../ecto/ebin/Elixir.Ecto.Association.beam | Bin 0 -> 36680 bytes .../lib/ecto/ebin/Elixir.Ecto.CastError.beam | Bin 0 -> 4720 bytes .../ecto/ebin/Elixir.Ecto.ChangeError.beam | Bin 0 -> 3464 bytes .../ebin/Elixir.Ecto.Changeset.Relation.beam | Bin 0 -> 38940 bytes .../lib/ecto/ebin/Elixir.Ecto.Changeset.beam | Bin 0 -> 169852 bytes .../ebin/Elixir.Ecto.ConstraintError.beam | Bin 0 -> 6164 bytes .../lib/ecto/ebin/Elixir.Ecto.Embedded.beam | Bin 0 -> 22972 bytes .../test/lib/ecto/ebin/Elixir.Ecto.Enum.beam | Bin 0 -> 14732 bytes .../Elixir.Ecto.InvalidChangesetError.beam | Bin 0 -> 6140 bytes .../ebin/Elixir.Ecto.InvalidURLError.beam | Bin 0 -> 4412 bytes .../ecto/ebin/Elixir.Ecto.MigrationError.beam | Bin 0 -> 3484 bytes .../test/lib/ecto/ebin/Elixir.Ecto.Multi.beam | Bin 0 -> 44304 bytes .../Elixir.Ecto.MultiplePrimaryKeyError.beam | Bin 0 -> 4860 bytes .../Elixir.Ecto.MultipleResultsError.beam | Bin 0 -> 4388 bytes .../Elixir.Ecto.NoPrimaryKeyFieldError.beam | Bin 0 -> 4288 bytes .../Elixir.Ecto.NoPrimaryKeyValueError.beam | Bin 0 -> 4272 bytes .../ecto/ebin/Elixir.Ecto.NoResultsError.beam | Bin 0 -> 4228 bytes .../ebin/Elixir.Ecto.ParameterizedType.beam | Bin 0 -> 9288 bytes .../lib/ecto/ebin/Elixir.Ecto.Query.API.beam | Bin 0 -> 21432 bytes .../ebin/Elixir.Ecto.Query.BooleanExpr.beam | Bin 0 -> 3004 bytes .../ebin/Elixir.Ecto.Query.Builder.CTE.beam | Bin 0 -> 14012 bytes ...Elixir.Ecto.Query.Builder.Combination.beam | Bin 0 -> 5136 bytes .../Elixir.Ecto.Query.Builder.Distinct.beam | Bin 0 -> 8612 bytes .../Elixir.Ecto.Query.Builder.Dynamic.beam | Bin 0 -> 11336 bytes .../Elixir.Ecto.Query.Builder.Filter.beam | Bin 0 -> 18620 bytes .../ebin/Elixir.Ecto.Query.Builder.From.beam | Bin 0 -> 17864 bytes .../Elixir.Ecto.Query.Builder.GroupBy.beam | Bin 0 -> 11500 bytes .../ebin/Elixir.Ecto.Query.Builder.Join.beam | Bin 0 -> 30216 bytes ...Elixir.Ecto.Query.Builder.LimitOffset.beam | Bin 0 -> 11288 bytes .../ebin/Elixir.Ecto.Query.Builder.Lock.beam | Bin 0 -> 5524 bytes .../Elixir.Ecto.Query.Builder.OrderBy.beam | Bin 0 -> 20808 bytes .../Elixir.Ecto.Query.Builder.Preload.beam | Bin 0 -> 16848 bytes .../Elixir.Ecto.Query.Builder.Select.beam | Bin 0 -> 35164 bytes .../Elixir.Ecto.Query.Builder.Update.beam | Bin 0 -> 13704 bytes .../Elixir.Ecto.Query.Builder.Windows.beam | Bin 0 -> 14780 bytes .../ecto/ebin/Elixir.Ecto.Query.Builder.beam | Bin 0 -> 101336 bytes .../ecto/ebin/Elixir.Ecto.Query.ByExpr.beam | Bin 0 -> 2896 bytes .../ebin/Elixir.Ecto.Query.CastError.beam | Bin 0 -> 4120 bytes .../ebin/Elixir.Ecto.Query.CompileError.beam | Bin 0 -> 3532 bytes .../ebin/Elixir.Ecto.Query.DynamicExpr.beam | Bin 0 -> 2848 bytes .../ecto/ebin/Elixir.Ecto.Query.FromExpr.beam | Bin 0 -> 3084 bytes .../ecto/ebin/Elixir.Ecto.Query.JoinExpr.beam | Bin 0 -> 3444 bytes .../ebin/Elixir.Ecto.Query.LimitExpr.beam | Bin 0 -> 2936 bytes .../ecto/ebin/Elixir.Ecto.Query.Planner.beam | Bin 0 -> 139468 bytes .../ebin/Elixir.Ecto.Query.QueryExpr.beam | Bin 0 -> 2812 bytes .../ebin/Elixir.Ecto.Query.SelectExpr.beam | Bin 0 -> 3220 bytes .../ecto/ebin/Elixir.Ecto.Query.Tagged.beam | Bin 0 -> 2728 bytes .../ecto/ebin/Elixir.Ecto.Query.Values.beam | Bin 0 -> 6728 bytes .../ebin/Elixir.Ecto.Query.WindowAPI.beam | Bin 0 -> 8084 bytes .../ecto/ebin/Elixir.Ecto.Query.WithExpr.beam | Bin 0 -> 2652 bytes .../test/lib/ecto/ebin/Elixir.Ecto.Query.beam | Bin 0 -> 68076 bytes .../lib/ecto/ebin/Elixir.Ecto.QueryError.beam | Bin 0 -> 5228 bytes .../ecto/ebin/Elixir.Ecto.Queryable.Atom.beam | Bin 0 -> 3680 bytes .../ebin/Elixir.Ecto.Queryable.BitString.beam | Bin 0 -> 4320 bytes .../Elixir.Ecto.Queryable.Ecto.Query.beam | Bin 0 -> 2448 bytes .../Elixir.Ecto.Queryable.Ecto.SubQuery.beam | Bin 0 -> 4212 bytes .../ebin/Elixir.Ecto.Queryable.Tuple.beam | Bin 0 -> 4528 bytes .../lib/ecto/ebin/Elixir.Ecto.Queryable.beam | Bin 0 -> 6716 bytes .../lib/ecto/ebin/Elixir.Ecto.Repo.Assoc.beam | Bin 0 -> 9160 bytes .../ecto/ebin/Elixir.Ecto.Repo.Preloader.beam | Bin 0 -> 44916 bytes .../ecto/ebin/Elixir.Ecto.Repo.Queryable.beam | Bin 0 -> 37620 bytes .../ecto/ebin/Elixir.Ecto.Repo.Registry.beam | Bin 0 -> 8496 bytes .../ecto/ebin/Elixir.Ecto.Repo.Schema.beam | Bin 0 -> 71292 bytes .../ebin/Elixir.Ecto.Repo.Supervisor.beam | Bin 0 -> 17372 bytes .../ebin/Elixir.Ecto.Repo.Transaction.beam | Bin 0 -> 6356 bytes .../test/lib/ecto/ebin/Elixir.Ecto.Repo.beam | Bin 0 -> 65260 bytes .../ecto/ebin/Elixir.Ecto.Schema.Loader.beam | Bin 0 -> 7268 bytes .../ebin/Elixir.Ecto.Schema.Metadata.beam | Bin 0 -> 3688 bytes .../lib/ecto/ebin/Elixir.Ecto.Schema.beam | Bin 0 -> 76976 bytes .../ebin/Elixir.Ecto.StaleEntryError.beam | Bin 0 -> 5024 bytes .../lib/ecto/ebin/Elixir.Ecto.SubQuery.beam | Bin 0 -> 3068 bytes .../ecto/ebin/Elixir.Ecto.SubQueryError.beam | Bin 0 -> 4744 bytes .../test/lib/ecto/ebin/Elixir.Ecto.Type.beam | Bin 0 -> 74032 bytes .../test/lib/ecto/ebin/Elixir.Ecto.UUID.beam | Bin 0 -> 38748 bytes .../test/lib/ecto/ebin/Elixir.Ecto.beam | Bin 0 -> 20560 bytes ...ir.Inspect.Ecto.Association.NotLoaded.beam | Bin 0 -> 3160 bytes .../ebin/Elixir.Inspect.Ecto.Changeset.beam | Bin 0 -> 5968 bytes ...Elixir.Inspect.Ecto.Query.DynamicExpr.beam | Bin 0 -> 5844 bytes .../ecto/ebin/Elixir.Inspect.Ecto.Query.beam | Bin 0 -> 25296 bytes .../Elixir.Inspect.Ecto.Schema.Metadata.beam | Bin 0 -> 3384 bytes ...ON.Encoder.Ecto.Association.NotLoaded.beam | Bin 0 -> 4108 bytes ...xir.JSON.Encoder.Ecto.Schema.Metadata.beam | Bin 0 -> 3868 bytes ...on.Encoder.Ecto.Association.NotLoaded.beam | Bin 0 -> 4116 bytes ...ir.Jason.Encoder.Ecto.Schema.Metadata.beam | Bin 0 -> 3884 bytes .../test/lib/ecto/ebin/Elixir.Mix.Ecto.beam | Bin 0 -> 9648 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Create.beam | Bin 0 -> 4876 bytes .../ecto/ebin/Elixir.Mix.Tasks.Ecto.Drop.beam | Bin 0 -> 6356 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Gen.Repo.beam | Bin 0 -> 7608 bytes .../lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.beam | Bin 0 -> 3132 bytes phoenix/_build/test/lib/ecto/ebin/ecto.app | 92 + .../test/lib/ecto_sql/.mix/compile.elixir | Bin 0 -> 9603 bytes .../test/lib/ecto_sql/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../test/lib/ecto_sql/.mix/compile.fetch | 0 ....Collectable.Ecto.Adapters.SQL.Stream.beam | Bin 0 -> 3420 bytes .../ebin/Elixir.Ecto.Adapter.Migration.beam | Bin 0 -> 3324 bytes .../ebin/Elixir.Ecto.Adapter.Structure.beam | Bin 0 -> 2672 bytes .../ebin/Elixir.Ecto.Adapters.MyXQL.beam | Bin 0 -> 40008 bytes .../ebin/Elixir.Ecto.Adapters.Postgres.beam | Bin 0 -> 40552 bytes .../Elixir.Ecto.Adapters.SQL.Application.beam | Bin 0 -> 2788 bytes .../Elixir.Ecto.Adapters.SQL.Connection.beam | Bin 0 -> 4580 bytes ....Ecto.Adapters.SQL.Sandbox.Connection.beam | Bin 0 -> 8952 bytes .../Elixir.Ecto.Adapters.SQL.Sandbox.beam | Bin 0 -> 19204 bytes .../ebin/Elixir.Ecto.Adapters.SQL.Stream.beam | Bin 0 -> 3524 bytes .../ebin/Elixir.Ecto.Adapters.SQL.beam | Bin 0 -> 164620 bytes .../ebin/Elixir.Ecto.Adapters.Tds.beam | Bin 0 -> 23048 bytes .../ebin/Elixir.Ecto.Migration.Command.beam | Bin 0 -> 2916 bytes .../Elixir.Ecto.Migration.Constraint.beam | Bin 0 -> 3500 bytes .../ebin/Elixir.Ecto.Migration.Index.beam | Bin 0 -> 4432 bytes .../ebin/Elixir.Ecto.Migration.Reference.beam | Bin 0 -> 4056 bytes .../ebin/Elixir.Ecto.Migration.Runner.beam | Bin 0 -> 32464 bytes ...Elixir.Ecto.Migration.SchemaMigration.beam | Bin 0 -> 18644 bytes .../ebin/Elixir.Ecto.Migration.Table.beam | Bin 0 -> 3404 bytes .../ecto_sql/ebin/Elixir.Ecto.Migration.beam | Bin 0 -> 51128 bytes .../ecto_sql/ebin/Elixir.Ecto.Migrator.beam | Bin 0 -> 45100 bytes ...r.Enumerable.Ecto.Adapters.SQL.Stream.beam | Bin 0 -> 4008 bytes .../lib/ecto_sql/ebin/Elixir.Mix.EctoSQL.beam | Bin 0 -> 5300 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Dump.beam | Bin 0 -> 7152 bytes .../Elixir.Mix.Tasks.Ecto.Gen.Migration.beam | Bin 0 -> 8360 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Load.beam | Bin 0 -> 9828 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Migrate.beam | Bin 0 -> 8000 bytes .../Elixir.Mix.Tasks.Ecto.Migrations.beam | Bin 0 -> 6084 bytes .../ebin/Elixir.Mix.Tasks.Ecto.Rollback.beam | Bin 0 -> 7940 bytes .../test/lib/ecto_sql/ebin/ecto_sql.app | 35 + .../test/lib/ecto_sqlite3/.mix/compile.elixir | Bin 0 -> 6039 bytes .../lib/ecto_sqlite3/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../test/lib/ecto_sqlite3/.mix/compile.fetch | 0 .../Elixir.Ecto.Adapters.SQLite3.Codec.beam | Bin 0 -> 15880 bytes ...ixir.Ecto.Adapters.SQLite3.Connection.beam | Bin 0 -> 112004 bytes ...Elixir.Ecto.Adapters.SQLite3.DataType.beam | Bin 0 -> 7472 bytes ...r.Ecto.Adapters.SQLite3.TypeExtension.beam | Bin 0 -> 2312 bytes .../ebin/Elixir.Ecto.Adapters.SQLite3.beam | Bin 0 -> 32952 bytes .../lib/ecto_sqlite3/ebin/ecto_sqlite3.app | 12 + .../test/lib/elixir_make/.mix/compile.elixir | Bin 0 -> 6266 bytes .../lib/elixir_make/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../test/lib/elixir_make/.mix/compile.fetch | 0 .../ebin/Elixir.ElixirMake.Artefact.beam | Bin 0 -> 19500 bytes .../ebin/Elixir.ElixirMake.Compiler.beam | Bin 0 -> 14048 bytes .../Elixir.ElixirMake.Downloader.Httpc.beam | Bin 0 -> 6800 bytes .../ebin/Elixir.ElixirMake.Downloader.beam | Bin 0 -> 1832 bytes .../ebin/Elixir.ElixirMake.Precompiler.beam | Bin 0 -> 3984 bytes .../Elixir.Mix.Tasks.Compile.ElixirMake.beam | Bin 0 -> 10420 bytes .../Elixir.Mix.Tasks.ElixirMake.Checksum.beam | Bin 0 -> 10652 bytes ...lixir.Mix.Tasks.ElixirMake.Precompile.beam | Bin 0 -> 7560 bytes .../test/lib/elixir_make/ebin/elixir_make.app | 14 + .../test/lib/exqlite/.mix/compile.elixir | Bin 0 -> 6987 bytes .../test/lib/exqlite/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../test/lib/exqlite/.mix/compile.fetch | 0 ...ixir.DBConnection.Query.Exqlite.Query.beam | Bin 0 -> 3276 bytes .../Elixir.Enumerable.Exqlite.Stream.beam | Bin 0 -> 5036 bytes .../exqlite/ebin/Elixir.Exqlite.Basic.beam | Bin 0 -> 6188 bytes .../ebin/Elixir.Exqlite.Connection.beam | Bin 0 -> 38176 bytes .../exqlite/ebin/Elixir.Exqlite.Error.beam | Bin 0 -> 4432 bytes .../exqlite/ebin/Elixir.Exqlite.Flags.beam | Bin 0 -> 3264 bytes .../exqlite/ebin/Elixir.Exqlite.Pragma.beam | Bin 0 -> 7628 bytes .../exqlite/ebin/Elixir.Exqlite.Query.beam | Bin 0 -> 4444 bytes .../exqlite/ebin/Elixir.Exqlite.Result.beam | Bin 0 -> 3672 bytes .../exqlite/ebin/Elixir.Exqlite.Sqlite3.beam | Bin 0 -> 25560 bytes .../ebin/Elixir.Exqlite.Sqlite3NIF.beam | Bin 0 -> 10264 bytes .../exqlite/ebin/Elixir.Exqlite.Stream.beam | Bin 0 -> 2940 bytes .../ebin/Elixir.Exqlite.TypeExtension.beam | Bin 0 -> 1924 bytes .../test/lib/exqlite/ebin/Elixir.Exqlite.beam | Bin 0 -> 10504 bytes .../Elixir.String.Chars.Exqlite.Query.beam | Bin 0 -> 2648 bytes .../_build/test/lib/exqlite/ebin/exqlite.app | 15 + .../test/lib/exqlite/priv/sqlite3_nif.so | Bin 0 -> 1663120 bytes .../_build/test/lib/finch/.mix/compile.elixir | Bin 0 -> 7465 bytes .../test/lib/finch/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/test/lib/finch/.mix/compile.fetch | 0 .../lib/finch/ebin/Elixir.Finch.Error.beam | Bin 0 -> 3936 bytes .../finch/ebin/Elixir.Finch.HTTP1.Conn.beam | Bin 0 -> 20368 bytes .../ebin/Elixir.Finch.HTTP1.Pool.State.beam | Bin 0 -> 3124 bytes .../finch/ebin/Elixir.Finch.HTTP1.Pool.beam | Bin 0 -> 24444 bytes .../ebin/Elixir.Finch.HTTP1.PoolMetrics.beam | Bin 0 -> 7348 bytes .../finch/ebin/Elixir.Finch.HTTP2.Pool.beam | Bin 0 -> 55556 bytes .../ebin/Elixir.Finch.HTTP2.PoolMetrics.beam | Bin 0 -> 6592 bytes .../Elixir.Finch.HTTP2.RequestStream.beam | Bin 0 -> 8040 bytes .../lib/finch/ebin/Elixir.Finch.Pool.beam | Bin 0 -> 4152 bytes .../finch/ebin/Elixir.Finch.PoolManager.beam | Bin 0 -> 16884 bytes .../lib/finch/ebin/Elixir.Finch.Request.beam | Bin 0 -> 12128 bytes .../lib/finch/ebin/Elixir.Finch.Response.beam | Bin 0 -> 2976 bytes .../test/lib/finch/ebin/Elixir.Finch.SSL.beam | Bin 0 -> 2872 bytes .../finch/ebin/Elixir.Finch.Telemetry.beam | Bin 0 -> 6828 bytes .../test/lib/finch/ebin/Elixir.Finch.beam | Bin 0 -> 33848 bytes phoenix/_build/test/lib/finch/ebin/finch.app | 17 + .../_build/test/lib/hpax/.mix/compile.elixir | Bin 0 -> 5568 bytes .../test/lib/hpax/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/test/lib/hpax/.mix/compile.fetch | 0 .../lib/hpax/ebin/Elixir.HPAX.Huffman.beam | Bin 0 -> 39964 bytes .../test/lib/hpax/ebin/Elixir.HPAX.Table.beam | Bin 0 -> 28192 bytes .../test/lib/hpax/ebin/Elixir.HPAX.Types.beam | Bin 0 -> 6160 bytes .../test/lib/hpax/ebin/Elixir.HPAX.beam | Bin 0 -> 15744 bytes phoenix/_build/test/lib/hpax/ebin/hpax.app | 8 + .../_build/test/lib/jason/.mix/compile.elixir | Bin 0 -> 7113 bytes .../test/lib/jason/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/test/lib/jason/.mix/compile.fetch | 0 ...Elixir.Enumerable.Jason.OrderedObject.beam | Bin 0 -> 4672 bytes .../lib/jason/ebin/Elixir.Jason.Codegen.beam | Bin 0 -> 9272 bytes .../jason/ebin/Elixir.Jason.DecodeError.beam | Bin 0 -> 5516 bytes .../ebin/Elixir.Jason.Decoder.Unescape.beam | Bin 0 -> 17864 bytes .../lib/jason/ebin/Elixir.Jason.Decoder.beam | Bin 0 -> 125176 bytes .../lib/jason/ebin/Elixir.Jason.Encode.beam | Bin 0 -> 67784 bytes .../jason/ebin/Elixir.Jason.EncodeError.beam | Bin 0 -> 5036 bytes .../jason/ebin/Elixir.Jason.Encoder.Any.beam | Bin 0 -> 7752 bytes .../jason/ebin/Elixir.Jason.Encoder.Atom.beam | Bin 0 -> 2520 bytes .../ebin/Elixir.Jason.Encoder.BitString.beam | Bin 0 -> 2916 bytes .../jason/ebin/Elixir.Jason.Encoder.Date.beam | Bin 0 -> 2596 bytes .../ebin/Elixir.Jason.Encoder.DateTime.beam | Bin 0 -> 2616 bytes .../ebin/Elixir.Jason.Encoder.Decimal.beam | Bin 0 -> 2608 bytes .../ebin/Elixir.Jason.Encoder.Float.beam | Bin 0 -> 2524 bytes .../ebin/Elixir.Jason.Encoder.Integer.beam | Bin 0 -> 2536 bytes .../Elixir.Jason.Encoder.Jason.Fragment.beam | Bin 0 -> 2608 bytes ...xir.Jason.Encoder.Jason.OrderedObject.beam | Bin 0 -> 2728 bytes .../jason/ebin/Elixir.Jason.Encoder.List.beam | Bin 0 -> 2520 bytes .../jason/ebin/Elixir.Jason.Encoder.Map.beam | Bin 0 -> 2516 bytes .../Elixir.Jason.Encoder.NaiveDateTime.beam | Bin 0 -> 2640 bytes .../jason/ebin/Elixir.Jason.Encoder.Time.beam | Bin 0 -> 2596 bytes .../lib/jason/ebin/Elixir.Jason.Encoder.beam | Bin 0 -> 5724 bytes .../jason/ebin/Elixir.Jason.Formatter.beam | Bin 0 -> 12824 bytes .../lib/jason/ebin/Elixir.Jason.Fragment.beam | Bin 0 -> 3456 bytes .../lib/jason/ebin/Elixir.Jason.Helpers.beam | Bin 0 -> 6004 bytes .../ebin/Elixir.Jason.OrderedObject.beam | Bin 0 -> 7808 bytes .../lib/jason/ebin/Elixir.Jason.Sigil.beam | Bin 0 -> 3724 bytes .../test/lib/jason/ebin/Elixir.Jason.beam | Bin 0 -> 9104 bytes phoenix/_build/test/lib/jason/ebin/jason.app | 27 + .../_build/test/lib/mime/.mix/compile.elixir | Bin 0 -> 4979 bytes .../test/lib/mime/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/test/lib/mime/.mix/compile.fetch | 0 .../test/lib/mime/ebin/Elixir.MIME.beam | Bin 0 -> 26084 bytes phoenix/_build/test/lib/mime/ebin/mime.app | 11 + .../_build/test/lib/mint/.mix/compile.elixir | Bin 0 -> 8237 bytes .../test/lib/mint/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/test/lib/mint/.mix/compile.erlang | Bin 0 -> 108 bytes .../_build/test/lib/mint/.mix/compile.fetch | 0 .../mint/ebin/Elixir.Mint.Application.beam | Bin 0 -> 2956 bytes .../lib/mint/ebin/Elixir.Mint.Core.Conn.beam | Bin 0 -> 3452 bytes .../mint/ebin/Elixir.Mint.Core.Headers.beam | Bin 0 -> 8404 bytes .../ebin/Elixir.Mint.Core.Transport.SSL.beam | Bin 0 -> 35456 bytes .../ebin/Elixir.Mint.Core.Transport.TCP.beam | Bin 0 -> 6480 bytes .../mint/ebin/Elixir.Mint.Core.Transport.beam | Bin 0 -> 2808 bytes .../lib/mint/ebin/Elixir.Mint.Core.Util.beam | Bin 0 -> 5900 bytes .../test/lib/mint/ebin/Elixir.Mint.HTTP.beam | Bin 0 -> 43296 bytes .../mint/ebin/Elixir.Mint.HTTP1.Parse.beam | Bin 0 -> 9016 bytes .../mint/ebin/Elixir.Mint.HTTP1.Request.beam | Bin 0 -> 5596 bytes .../mint/ebin/Elixir.Mint.HTTP1.Response.beam | Bin 0 -> 3636 bytes .../test/lib/mint/ebin/Elixir.Mint.HTTP1.beam | Bin 0 -> 78576 bytes .../mint/ebin/Elixir.Mint.HTTP2.Frame.beam | Bin 0 -> 31264 bytes .../test/lib/mint/ebin/Elixir.Mint.HTTP2.beam | Bin 0 -> 147020 bytes .../lib/mint/ebin/Elixir.Mint.HTTPError.beam | Bin 0 -> 4580 bytes .../lib/mint/ebin/Elixir.Mint.Negotiate.beam | Bin 0 -> 7012 bytes .../mint/ebin/Elixir.Mint.TransportError.beam | Bin 0 -> 5492 bytes .../mint/ebin/Elixir.Mint.TunnelProxy.beam | Bin 0 -> 9636 bytes .../test/lib/mint/ebin/Elixir.Mint.Types.beam | Bin 0 -> 2648 bytes .../mint/ebin/Elixir.Mint.UnsafeProxy.beam | Bin 0 -> 21300 bytes phoenix/_build/test/lib/mint/ebin/mint.app | 20 + .../_build/test/lib/mint/ebin/mint_shims.beam | Bin 0 -> 17080 bytes .../lib/nimble_options/.mix/compile.elixir | Bin 0 -> 5357 bytes .../nimble_options/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/nimble_options/.mix/compile.fetch | 0 .../ebin/Elixir.NimbleOptions.Docs.beam | Bin 0 -> 15452 bytes .../Elixir.NimbleOptions.ValidationError.beam | Bin 0 -> 4976 bytes .../ebin/Elixir.NimbleOptions.beam | Bin 0 -> 50076 bytes .../nimble_options/ebin/nimble_options.app | 8 + .../test/lib/nimble_pool/.mix/compile.elixir | Bin 0 -> 5351 bytes .../lib/nimble_pool/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../test/lib/nimble_pool/.mix/compile.fetch | 0 .../ebin/Elixir.NimblePool.Application.beam | Bin 0 -> 2520 bytes .../nimble_pool/ebin/Elixir.NimblePool.beam | Bin 0 -> 47908 bytes .../test/lib/nimble_pool/ebin/nimble_pool.app | 8 + .../test/lib/phoenix/.mix/compile.elixir | Bin 0 -> 18059 bytes .../test/lib/phoenix/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../test/lib/phoenix/.mix/compile.fetch | 0 ...Elixir.Inspect.Phoenix.Socket.Message.beam | Bin 0 -> 3284 bytes .../ebin/Elixir.Mix.Phoenix.Context.beam | Bin 0 -> 16152 bytes .../ebin/Elixir.Mix.Phoenix.Schema.beam | Bin 0 -> 44564 bytes .../ebin/Elixir.Mix.Phoenix.Scope.beam | Bin 0 -> 12440 bytes .../lib/phoenix/ebin/Elixir.Mix.Phoenix.beam | Bin 0 -> 21700 bytes .../Elixir.Mix.Tasks.Compile.Phoenix.beam | Bin 0 -> 4940 bytes .../Elixir.Mix.Tasks.Phx.Digest.Clean.beam | Bin 0 -> 4964 bytes .../ebin/Elixir.Mix.Tasks.Phx.Digest.beam | Bin 0 -> 4804 bytes ...Mix.Tasks.Phx.Gen.Auth.HashingLibrary.beam | Bin 0 -> 5856 bytes ...lixir.Mix.Tasks.Phx.Gen.Auth.Injector.beam | Bin 0 -> 20040 bytes ...ixir.Mix.Tasks.Phx.Gen.Auth.Migration.beam | Bin 0 -> 4796 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.beam | Bin 0 -> 62584 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Cert.beam | Bin 0 -> 12952 bytes .../Elixir.Mix.Tasks.Phx.Gen.Channel.beam | Bin 0 -> 7800 bytes .../Elixir.Mix.Tasks.Phx.Gen.Context.beam | Bin 0 -> 27936 bytes .../Elixir.Mix.Tasks.Phx.Gen.Embedded.beam | Bin 0 -> 10332 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Html.beam | Bin 0 -> 25716 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Json.beam | Bin 0 -> 17624 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Live.beam | Bin 0 -> 28548 bytes .../Elixir.Mix.Tasks.Phx.Gen.Notifier.beam | Bin 0 -> 14040 bytes .../Elixir.Mix.Tasks.Phx.Gen.Presence.beam | Bin 0 -> 5008 bytes .../Elixir.Mix.Tasks.Phx.Gen.Release.beam | Bin 0 -> 22740 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Schema.beam | Bin 0 -> 17568 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Secret.beam | Bin 0 -> 3404 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.Socket.beam | Bin 0 -> 7160 bytes .../ebin/Elixir.Mix.Tasks.Phx.Gen.beam | Bin 0 -> 2508 bytes .../ebin/Elixir.Mix.Tasks.Phx.Routes.beam | Bin 0 -> 10440 bytes .../ebin/Elixir.Mix.Tasks.Phx.Server.beam | Bin 0 -> 3636 bytes .../phoenix/ebin/Elixir.Mix.Tasks.Phx.beam | Bin 0 -> 3432 bytes .../Elixir.Phoenix.ActionClauseError.beam | Bin 0 -> 4560 bytes .../ebin/Elixir.Phoenix.Channel.Server.beam | Bin 0 -> 34224 bytes .../phoenix/ebin/Elixir.Phoenix.Channel.beam | Bin 0 -> 23284 bytes ...ir.Phoenix.ChannelTest.NoopSerializer.beam | Bin 0 -> 4204 bytes .../ebin/Elixir.Phoenix.ChannelTest.beam | Bin 0 -> 34928 bytes ...ixir.Phoenix.CodeReloader.MixListener.beam | Bin 0 -> 9584 bytes .../Elixir.Phoenix.CodeReloader.Proxy.beam | Bin 0 -> 8412 bytes .../Elixir.Phoenix.CodeReloader.Server.beam | Bin 0 -> 25312 bytes .../ebin/Elixir.Phoenix.CodeReloader.beam | Bin 0 -> 44500 bytes .../phoenix/ebin/Elixir.Phoenix.Config.beam | Bin 0 -> 14280 bytes .../phoenix/ebin/Elixir.Phoenix.ConnTest.beam | Bin 0 -> 39692 bytes .../Elixir.Phoenix.Controller.Pipeline.beam | Bin 0 -> 24088 bytes .../ebin/Elixir.Phoenix.Controller.beam | Bin 0 -> 90872 bytes .../phoenix/ebin/Elixir.Phoenix.Debug.beam | Bin 0 -> 7272 bytes .../Elixir.Phoenix.Digester.Compressor.beam | Bin 0 -> 2356 bytes .../ebin/Elixir.Phoenix.Digester.Gzip.beam | Bin 0 -> 2812 bytes .../phoenix/ebin/Elixir.Phoenix.Digester.beam | Bin 0 -> 26844 bytes ...lixir.Phoenix.Endpoint.Cowboy2Adapter.beam | Bin 0 -> 11908 bytes .../Elixir.Phoenix.Endpoint.RenderErrors.beam | Bin 0 -> 21128 bytes .../Elixir.Phoenix.Endpoint.Supervisor.beam | Bin 0 -> 33392 bytes ...r.Phoenix.Endpoint.SyncCodeReloadPlug.beam | Bin 0 -> 3556 bytes .../ebin/Elixir.Phoenix.Endpoint.Watcher.beam | Bin 0 -> 5560 bytes .../phoenix/ebin/Elixir.Phoenix.Endpoint.beam | Bin 0 -> 82472 bytes .../phoenix/ebin/Elixir.Phoenix.Flash.beam | Bin 0 -> 3108 bytes .../phoenix/ebin/Elixir.Phoenix.Logger.beam | Bin 0 -> 24632 bytes .../Elixir.Phoenix.MissingParamError.beam | Bin 0 -> 4604 bytes .../phoenix/ebin/Elixir.Phoenix.Naming.beam | Bin 0 -> 6228 bytes .../Elixir.Phoenix.NotAcceptableError.beam | Bin 0 -> 3972 bytes .../ebin/Elixir.Phoenix.Param.Any.beam | Bin 0 -> 7284 bytes .../ebin/Elixir.Phoenix.Param.Atom.beam | Bin 0 -> 2764 bytes .../ebin/Elixir.Phoenix.Param.BitString.beam | Bin 0 -> 2480 bytes .../ebin/Elixir.Phoenix.Param.Float.beam | Bin 0 -> 2516 bytes .../ebin/Elixir.Phoenix.Param.Integer.beam | Bin 0 -> 2516 bytes .../ebin/Elixir.Phoenix.Param.Map.beam | Bin 0 -> 2840 bytes .../phoenix/ebin/Elixir.Phoenix.Param.beam | Bin 0 -> 5628 bytes .../ebin/Elixir.Phoenix.Presence.Tracker.beam | Bin 0 -> 4656 bytes .../phoenix/ebin/Elixir.Phoenix.Presence.beam | Bin 0 -> 52328 bytes ...lixir.Phoenix.Router.ConsoleFormatter.beam | Bin 0 -> 8552 bytes .../ebin/Elixir.Phoenix.Router.Helpers.beam | Bin 0 -> 49604 bytes ...ixir.Phoenix.Router.MalformedURIError.beam | Bin 0 -> 3692 bytes .../Elixir.Phoenix.Router.NoRouteError.beam | Bin 0 -> 5028 bytes .../ebin/Elixir.Phoenix.Router.Resource.beam | Bin 0 -> 8964 bytes .../ebin/Elixir.Phoenix.Router.Route.beam | Bin 0 -> 17044 bytes .../ebin/Elixir.Phoenix.Router.Scope.beam | Bin 0 -> 19512 bytes .../phoenix/ebin/Elixir.Phoenix.Router.beam | Bin 0 -> 73752 bytes .../ebin/Elixir.Phoenix.Socket.Broadcast.beam | Bin 0 -> 3084 bytes ...ir.Phoenix.Socket.InvalidMessageError.beam | Bin 0 -> 3572 bytes .../ebin/Elixir.Phoenix.Socket.Message.beam | Bin 0 -> 4988 bytes .../Elixir.Phoenix.Socket.PoolDrainer.beam | Bin 0 -> 11128 bytes .../Elixir.Phoenix.Socket.PoolSupervisor.beam | Bin 0 -> 6568 bytes .../ebin/Elixir.Phoenix.Socket.Reply.beam | Bin 0 -> 3296 bytes .../Elixir.Phoenix.Socket.Serializer.beam | Bin 0 -> 2180 bytes .../ebin/Elixir.Phoenix.Socket.Transport.beam | Bin 0 -> 30920 bytes ...ixir.Phoenix.Socket.V1.JSONSerializer.beam | Bin 0 -> 5752 bytes ...ixir.Phoenix.Socket.V2.JSONSerializer.beam | Bin 0 -> 12544 bytes .../phoenix/ebin/Elixir.Phoenix.Socket.beam | Bin 0 -> 46260 bytes .../phoenix/ebin/Elixir.Phoenix.Token.beam | Bin 0 -> 8896 bytes ...ir.Phoenix.Transports.LongPoll.Server.beam | Bin 0 -> 15052 bytes .../Elixir.Phoenix.Transports.LongPoll.beam | Bin 0 -> 16632 bytes .../Elixir.Phoenix.Transports.WebSocket.beam | Bin 0 -> 8584 bytes .../ebin/Elixir.Phoenix.VerifiedRoutes.beam | Bin 0 -> 47140 bytes .../test/lib/phoenix/ebin/Elixir.Phoenix.beam | Bin 0 -> 5572 bytes ...g.Exception.Phoenix.ActionClauseError.beam | Bin 0 -> 2704 bytes .../_build/test/lib/phoenix/ebin/phoenix.app | 102 + phoenix/_build/test/lib/phoenix/priv | 1 + .../test/lib/phoenix_ecto/.mix/compile.elixir | Bin 0 -> 6413 bytes .../lib/phoenix_ecto/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../test/lib/phoenix_ecto/.mix/compile.fetch | 0 .../Elixir.Phoenix.Ecto.CheckRepoStatus.beam | Bin 0 -> 7920 bytes ...ir.Phoenix.Ecto.PendingMigrationError.beam | Bin 0 -> 4992 bytes .../ebin/Elixir.Phoenix.Ecto.SQL.Sandbox.beam | Bin 0 -> 14988 bytes ...lixir.Phoenix.Ecto.SQL.SandboxSession.beam | Bin 0 -> 8768 bytes ...r.Phoenix.Ecto.StorageNotCreatedError.beam | Bin 0 -> 3964 bytes .../ebin/Elixir.Phoenix.Ecto.beam | Bin 0 -> 2680 bytes .../Elixir.Plug.Exception.Ecto.CastError.beam | Bin 0 -> 2664 bytes ...ir.Plug.Exception.Ecto.NoResultsError.beam | Bin 0 -> 2692 bytes ...r.Plug.Exception.Ecto.Query.CastError.beam | Bin 0 -> 2696 bytes ...r.Plug.Exception.Ecto.StaleEntryError.beam | Bin 0 -> 2696 bytes ...xir.Plug.Exception.Ecto.SubQueryError.beam | Bin 0 -> 2952 bytes ...on.Phoenix.Ecto.PendingMigrationError.beam | Bin 0 -> 4192 bytes ...n.Phoenix.Ecto.StorageNotCreatedError.beam | Bin 0 -> 3836 bytes .../lib/phoenix_ecto/ebin/phoenix_ecto.app | 22 + .../lib/phoenix_pubsub/.mix/compile.elixir | Bin 0 -> 7004 bytes .../phoenix_pubsub/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/phoenix_pubsub/.mix/compile.fetch | 0 .../ebin/Elixir.Phoenix.PubSub.Adapter.beam | Bin 0 -> 2512 bytes .../Elixir.Phoenix.PubSub.Application.beam | Bin 0 -> 2616 bytes .../Elixir.Phoenix.PubSub.BroadcastError.beam | Bin 0 -> 3884 bytes .../ebin/Elixir.Phoenix.PubSub.PG2.beam | Bin 0 -> 8040 bytes .../ebin/Elixir.Phoenix.PubSub.PG2Worker.beam | Bin 0 -> 7004 bytes .../Elixir.Phoenix.PubSub.Supervisor.beam | Bin 0 -> 5488 bytes .../ebin/Elixir.Phoenix.PubSub.beam | Bin 0 -> 15300 bytes .../ebin/Elixir.Phoenix.Tracker.Clock.beam | Bin 0 -> 7652 bytes ...lixir.Phoenix.Tracker.DeltaGeneration.beam | Bin 0 -> 9196 bytes .../ebin/Elixir.Phoenix.Tracker.Replica.beam | Bin 0 -> 10372 bytes .../ebin/Elixir.Phoenix.Tracker.Shard.beam | Bin 0 -> 51004 bytes ...lixir.Phoenix.Tracker.ShutdownHandler.beam | Bin 0 -> 6976 bytes .../ebin/Elixir.Phoenix.Tracker.State.beam | Bin 0 -> 53112 bytes .../ebin/Elixir.Phoenix.Tracker.beam | Bin 0 -> 17508 bytes .../phoenix_pubsub/ebin/phoenix_pubsub.app | 21 + .../lib/phoenix_template/.mix/compile.elixir | Bin 0 -> 5502 bytes .../phoenix_template/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/phoenix_template/.mix/compile.fetch | 0 .../Elixir.Phoenix.Template.EExEngine.beam | Bin 0 -> 4604 bytes .../ebin/Elixir.Phoenix.Template.Engine.beam | Bin 0 -> 1956 bytes .../Elixir.Phoenix.Template.ExsEngine.beam | Bin 0 -> 2052 bytes .../ebin/Elixir.Phoenix.Template.beam | Bin 0 -> 27272 bytes .../ebin/phoenix_template.app | 10 + .../_build/test/lib/plug/.mix/compile.elixir | Bin 0 -> 12540 bytes .../test/lib/plug/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/test/lib/plug/.mix/compile.erlang | Bin 0 -> 112 bytes .../_build/test/lib/plug/.mix/compile.fetch | 0 .../plug/ebin/Elixir.Inspect.Plug.Conn.beam | Bin 0 -> 3132 bytes .../ebin/Elixir.Plug.Adapters.Cowboy.beam | Bin 0 -> 6064 bytes .../ebin/Elixir.Plug.Adapters.Test.Conn.beam | Bin 0 -> 21560 bytes .../plug/ebin/Elixir.Plug.Application.beam | Bin 0 -> 2648 bytes .../ebin/Elixir.Plug.BadRequestError.beam | Bin 0 -> 3772 bytes .../lib/plug/ebin/Elixir.Plug.BasicAuth.beam | Bin 0 -> 9316 bytes .../lib/plug/ebin/Elixir.Plug.Builder.beam | Bin 0 -> 20736 bytes ....CSRFProtection.InvalidCSRFTokenError.beam | Bin 0 -> 4280 bytes ...ection.InvalidCrossOriginRequestError.beam | Bin 0 -> 4256 bytes .../plug/ebin/Elixir.Plug.CSRFProtection.beam | Bin 0 -> 18792 bytes .../plug/ebin/Elixir.Plug.Conn.Adapter.beam | Bin 0 -> 9520 bytes .../Elixir.Plug.Conn.AlreadySentError.beam | Bin 0 -> 3624 bytes .../Elixir.Plug.Conn.CookieOverflowError.beam | Bin 0 -> 3676 bytes .../plug/ebin/Elixir.Plug.Conn.Cookies.beam | Bin 0 -> 9940 bytes .../Elixir.Plug.Conn.InvalidHeaderError.beam | Bin 0 -> 3648 bytes .../Elixir.Plug.Conn.InvalidQueryError.beam | Bin 0 -> 3780 bytes .../ebin/Elixir.Plug.Conn.NotSentError.beam | Bin 0 -> 3664 bytes .../lib/plug/ebin/Elixir.Plug.Conn.Query.beam | Bin 0 -> 17752 bytes .../plug/ebin/Elixir.Plug.Conn.Status.beam | Bin 0 -> 18900 bytes .../plug/ebin/Elixir.Plug.Conn.Unfetched.beam | Bin 0 -> 5600 bytes .../lib/plug/ebin/Elixir.Plug.Conn.Utils.beam | Bin 0 -> 13416 bytes .../ebin/Elixir.Plug.Conn.WrapperError.beam | Bin 0 -> 6072 bytes .../test/lib/plug/ebin/Elixir.Plug.Conn.beam | Bin 0 -> 142704 bytes .../lib/plug/ebin/Elixir.Plug.Debugger.beam | Bin 0 -> 211520 bytes .../plug/ebin/Elixir.Plug.ErrorHandler.beam | Bin 0 -> 15356 bytes .../plug/ebin/Elixir.Plug.Exception.Any.beam | Bin 0 -> 2896 bytes .../lib/plug/ebin/Elixir.Plug.Exception.beam | Bin 0 -> 5956 bytes .../test/lib/plug/ebin/Elixir.Plug.HTML.beam | Bin 0 -> 4220 bytes .../test/lib/plug/ebin/Elixir.Plug.Head.beam | Bin 0 -> 3584 bytes .../lib/plug/ebin/Elixir.Plug.Logger.beam | Bin 0 -> 4768 bytes .../test/lib/plug/ebin/Elixir.Plug.MIME.beam | Bin 0 -> 3928 bytes .../plug/ebin/Elixir.Plug.MethodOverride.beam | Bin 0 -> 5696 bytes .../Elixir.Plug.Parsers.BadEncodingError.beam | Bin 0 -> 3680 bytes .../plug/ebin/Elixir.Plug.Parsers.JSON.beam | Bin 0 -> 8092 bytes .../ebin/Elixir.Plug.Parsers.MULTIPART.beam | Bin 0 -> 14044 bytes .../ebin/Elixir.Plug.Parsers.ParseError.beam | Bin 0 -> 4092 bytes ...xir.Plug.Parsers.RequestTooLargeError.beam | Bin 0 -> 3956 bytes .../ebin/Elixir.Plug.Parsers.URLENCODED.beam | Bin 0 -> 4588 bytes ...lug.Parsers.UnsupportedMediaTypeError.beam | Bin 0 -> 3976 bytes .../lib/plug/ebin/Elixir.Plug.Parsers.beam | Bin 0 -> 12688 bytes .../lib/plug/ebin/Elixir.Plug.RequestId.beam | Bin 0 -> 5112 bytes .../lib/plug/ebin/Elixir.Plug.RewriteOn.beam | Bin 0 -> 6588 bytes .../Elixir.Plug.Router.InvalidSpecError.beam | Bin 0 -> 3592 bytes .../Elixir.Plug.Router.MalformedURIError.beam | Bin 0 -> 3676 bytes .../plug/ebin/Elixir.Plug.Router.Utils.beam | Bin 0 -> 16132 bytes .../lib/plug/ebin/Elixir.Plug.Router.beam | Bin 0 -> 42204 bytes .../test/lib/plug/ebin/Elixir.Plug.SSL.beam | Bin 0 -> 23064 bytes .../plug/ebin/Elixir.Plug.Session.COOKIE.beam | Bin 0 -> 12516 bytes .../plug/ebin/Elixir.Plug.Session.ETS.beam | Bin 0 -> 5196 bytes .../plug/ebin/Elixir.Plug.Session.Store.beam | Bin 0 -> 3404 bytes .../lib/plug/ebin/Elixir.Plug.Session.beam | Bin 0 -> 7020 bytes .../Elixir.Plug.Static.InvalidPathError.beam | Bin 0 -> 3700 bytes .../lib/plug/ebin/Elixir.Plug.Static.beam | Bin 0 -> 21556 bytes .../lib/plug/ebin/Elixir.Plug.Telemetry.beam | Bin 0 -> 5212 bytes .../test/lib/plug/ebin/Elixir.Plug.Test.beam | Bin 0 -> 21224 bytes .../plug/ebin/Elixir.Plug.TimeoutError.beam | Bin 0 -> 3704 bytes .../ebin/Elixir.Plug.Upload.Supervisor.beam | Bin 0 -> 4584 bytes .../ebin/Elixir.Plug.Upload.Terminator.beam | Bin 0 -> 7272 bytes .../lib/plug/ebin/Elixir.Plug.Upload.beam | Bin 0 -> 16624 bytes .../plug/ebin/Elixir.Plug.UploadError.beam | Bin 0 -> 3452 bytes .../test/lib/plug/ebin/Elixir.Plug.beam | Bin 0 -> 10400 bytes phoenix/_build/test/lib/plug/ebin/plug.app | 54 + .../test/lib/plug/ebin/plug_multipart.beam | Bin 0 -> 21752 bytes .../test/lib/plug_crypto/.mix/compile.elixir | Bin 0 -> 5712 bytes .../lib/plug_crypto/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../test/lib/plug_crypto/.mix/compile.fetch | 0 .../ebin/Elixir.Plug.Crypto.Application.beam | Bin 0 -> 2832 bytes .../ebin/Elixir.Plug.Crypto.KeyGenerator.beam | Bin 0 -> 5612 bytes .../Elixir.Plug.Crypto.MessageEncryptor.beam | Bin 0 -> 12168 bytes .../Elixir.Plug.Crypto.MessageVerifier.beam | Bin 0 -> 5928 bytes .../plug_crypto/ebin/Elixir.Plug.Crypto.beam | Bin 0 -> 16556 bytes .../test/lib/plug_crypto/ebin/plug_crypto.app | 11 + .../_build/test/lib/req/.mix/compile.elixir | Bin 0 -> 8689 bytes .../test/lib/req/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../_build/test/lib/req/.mix/compile.fetch | 0 ...Collectable.Req.Utils.CollectWithHash.beam | Bin 0 -> 3904 bytes .../Elixir.Enumerable.Req.Response.Async.beam | Bin 0 -> 7448 bytes .../req/ebin/Elixir.Inspect.Req.Request.beam | Bin 0 -> 8284 bytes .../Elixir.Inspect.Req.Response.Async.beam | Bin 0 -> 3040 bytes .../lib/req/ebin/Elixir.Req.Application.beam | Bin 0 -> 2852 bytes .../lib/req/ebin/Elixir.Req.ArchiveError.beam | Bin 0 -> 4656 bytes .../Elixir.Req.ChecksumMismatchError.beam | Bin 0 -> 4052 bytes .../req/ebin/Elixir.Req.DecompressError.beam | Bin 0 -> 4344 bytes .../test/lib/req/ebin/Elixir.Req.Fields.beam | Bin 0 -> 8764 bytes .../test/lib/req/ebin/Elixir.Req.Finch.beam | Bin 0 -> 20572 bytes .../lib/req/ebin/Elixir.Req.HTTPError.beam | Bin 0 -> 4596 bytes .../test/lib/req/ebin/Elixir.Req.Request.beam | Bin 0 -> 45788 bytes .../req/ebin/Elixir.Req.Response.Async.beam | Bin 0 -> 3404 bytes .../lib/req/ebin/Elixir.Req.Response.beam | Bin 0 -> 13964 bytes .../test/lib/req/ebin/Elixir.Req.Steps.beam | Bin 0 -> 88064 bytes .../lib/req/ebin/Elixir.Req.Test.Adapter.beam | Bin 0 -> 7376 bytes .../req/ebin/Elixir.Req.Test.Ownership.beam | Bin 0 -> 37244 bytes .../ebin/Elixir.Req.Test.OwnershipError.beam | Bin 0 -> 4880 bytes .../test/lib/req/ebin/Elixir.Req.Test.beam | Bin 0 -> 29116 bytes .../Elixir.Req.TooManyRedirectsError.beam | Bin 0 -> 3844 bytes .../req/ebin/Elixir.Req.TransportError.beam | Bin 0 -> 3760 bytes .../Elixir.Req.Utils.CollectWithHash.beam | Bin 0 -> 2688 bytes .../test/lib/req/ebin/Elixir.Req.Utils.beam | Bin 0 -> 41284 bytes .../_build/test/lib/req/ebin/Elixir.Req.beam | Bin 0 -> 37024 bytes phoenix/_build/test/lib/req/ebin/req.app | 24 + .../.mix/.mix_test_failures | Bin 0 -> 10 bytes .../.mix/cached_dot_formatter | Bin 0 -> 2557 bytes .../shooting_event_phx/.mix/compile.app_cache | Bin 0 -> 9850 bytes .../shooting_event_phx/.mix/compile.elixir | Bin 0 -> 10045 bytes .../.mix/compile.elixir_scm | Bin 0 -> 44 bytes .../lib/shooting_event_phx/.mix/compile.lock | 0 .../shooting_event_phx/.mix/compile.protocols | Bin 0 -> 27 bytes .../shooting_event_phx/.mix/format_timestamp | 0 ...lixir.Bandit.HTTP2.Frame.Serializable.beam | Bin 0 -> 5796 bytes .../Elixir.Bandit.HTTPTransport.beam | Bin 0 -> 8812 bytes ...r.Bandit.WebSocket.Frame.Serializable.beam | Bin 0 -> 5300 bytes .../Elixir.Bandit.WebSocket.Socket.beam | Bin 0 -> 5012 bytes .../consolidated/Elixir.Collectable.beam | Bin 0 -> 6420 bytes .../Elixir.DBConnection.Query.beam | Bin 0 -> 5720 bytes .../consolidated/Elixir.Ecto.Queryable.beam | Bin 0 -> 5916 bytes .../consolidated/Elixir.Enumerable.beam | Bin 0 -> 10460 bytes .../consolidated/Elixir.IEx.Info.beam | Bin 0 -> 5704 bytes .../consolidated/Elixir.Inspect.beam | Bin 0 -> 17264 bytes .../consolidated/Elixir.JSON.Encoder.beam | Bin 0 -> 10680 bytes .../consolidated/Elixir.Jason.Encoder.beam | Bin 0 -> 5940 bytes .../consolidated/Elixir.List.Chars.beam | Bin 0 -> 5040 bytes .../consolidated/Elixir.Phoenix.Param.beam | Bin 0 -> 4748 bytes .../consolidated/Elixir.Plug.Exception.beam | Bin 0 -> 5872 bytes .../consolidated/Elixir.String.Chars.beam | Bin 0 -> 5556 bytes .../Elixir.ShootingEventPhx.AI.Gemini.beam | Bin 0 -> 11704 bytes .../Elixir.ShootingEventPhx.Application.beam | Bin 0 -> 4052 bytes ...ir.ShootingEventPhx.Auth.SessionStore.beam | Bin 0 -> 5660 bytes .../ebin/Elixir.ShootingEventPhx.Auth.beam | Bin 0 -> 4788 bytes .../Elixir.ShootingEventPhx.DataCase.beam | Bin 0 -> 5752 bytes ...ir.ShootingEventPhx.Domain.AppSetting.beam | Bin 0 -> 13824 bytes ...lixir.ShootingEventPhx.Domain.Derived.beam | Bin 0 -> 18744 bytes ...xir.ShootingEventPhx.Domain.EventData.beam | Bin 0 -> 27444 bytes ...Elixir.ShootingEventPhx.Domain.Player.beam | Bin 0 -> 18040 bytes .../Elixir.ShootingEventPhx.Domain.Score.beam | Bin 0 -> 14816 bytes ...ootingEventPhx.Domain.ScoreAttachment.beam | Bin 0 -> 15128 bytes ...ixir.ShootingEventPhx.Domain.Settings.beam | Bin 0 -> 14432 bytes ...Elixir.ShootingEventPhx.Domain.Stages.beam | Bin 0 -> 5232 bytes ....ShootingEventPhx.Domain.StateService.beam | Bin 0 -> 5036 bytes .../ebin/Elixir.ShootingEventPhx.Events.beam | Bin 0 -> 2396 bytes .../ebin/Elixir.ShootingEventPhx.Repo.beam | Bin 0 -> 27452 bytes .../ebin/Elixir.ShootingEventPhx.beam | Bin 0 -> 1428 bytes ...xir.ShootingEventPhxWeb.ApiController.beam | Bin 0 -> 20464 bytes .../Elixir.ShootingEventPhxWeb.ConnCase.beam | Bin 0 -> 4288 bytes .../Elixir.ShootingEventPhxWeb.Endpoint.beam | Bin 0 -> 18904 bytes .../Elixir.ShootingEventPhxWeb.ErrorJSON.beam | Bin 0 -> 2176 bytes ....ShootingEventPhxWeb.EventsController.beam | Bin 0 -> 9388 bytes ...hootingEventPhxWeb.FrontendController.beam | Bin 0 -> 9588 bytes ...r.ShootingEventPhxWeb.Plugs.AdminOnly.beam | Bin 0 -> 2592 bytes ...Elixir.ShootingEventPhxWeb.Plugs.CORS.beam | Bin 0 -> 2836 bytes .../Elixir.ShootingEventPhxWeb.Router.beam | Bin 0 -> 38816 bytes .../Elixir.ShootingEventPhxWeb.Telemetry.beam | Bin 0 -> 6300 bytes .../ebin/Elixir.ShootingEventPhxWeb.beam | Bin 0 -> 10004 bytes .../ebin/shooting_event_phx.app | 47 + .../_build/test/lib/shooting_event_phx/priv | 1 + .../test/lib/telemetry/.mix/compile.fetch | 0 .../test/lib/telemetry/ebin/telemetry.app | 15 + .../test/lib/telemetry/ebin/telemetry.beam | Bin 0 -> 14660 bytes .../lib/telemetry/ebin/telemetry_app.beam | Bin 0 -> 1476 bytes .../lib/telemetry/ebin/telemetry_ets.beam | Bin 0 -> 4220 bytes .../ebin/telemetry_handler_table.beam | Bin 0 -> 6372 bytes .../test/lib/telemetry/ebin/telemetry_pt.beam | Bin 0 -> 4152 bytes .../lib/telemetry/ebin/telemetry_sup.beam | Bin 0 -> 2116 bytes .../lib/telemetry/ebin/telemetry_test.beam | Bin 0 -> 3364 bytes .../test/lib/telemetry/mix.rebar.config | 17 + phoenix/_build/test/lib/telemetry/src | 1 + .../lib/telemetry_metrics/.mix/compile.elixir | Bin 0 -> 5869 bytes .../telemetry_metrics/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/telemetry_metrics/.mix/compile.fetch | 0 ...xir.Telemetry.Metrics.ConsoleReporter.beam | Bin 0 -> 15692 bytes .../Elixir.Telemetry.Metrics.Counter.beam | Bin 0 -> 3768 bytes ...Elixir.Telemetry.Metrics.Distribution.beam | Bin 0 -> 3804 bytes .../Elixir.Telemetry.Metrics.LastValue.beam | Bin 0 -> 3792 bytes .../ebin/Elixir.Telemetry.Metrics.Sum.beam | Bin 0 -> 3740 bytes .../Elixir.Telemetry.Metrics.Summary.beam | Bin 0 -> 3768 bytes .../ebin/Elixir.Telemetry.Metrics.beam | Bin 0 -> 23224 bytes .../ebin/telemetry_metrics.app | 13 + .../lib/telemetry_poller/.mix/compile.fetch | 0 .../ebin/telemetry_poller.app | 13 + .../ebin/telemetry_poller.beam | Bin 0 -> 13880 bytes .../ebin/telemetry_poller_app.beam | Bin 0 -> 2348 bytes .../ebin/telemetry_poller_builtin.beam | Bin 0 -> 3840 bytes .../ebin/telemetry_poller_sup.beam | Bin 0 -> 1828 bytes .../lib/telemetry_poller/mix.rebar.config | 16 + phoenix/_build/test/lib/telemetry_poller/src | 1 + .../lib/thousand_island/.mix/compile.elixir | Bin 0 -> 7716 bytes .../thousand_island/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/thousand_island/.mix/compile.fetch | 0 .../ebin/Elixir.ThousandIsland.Acceptor.beam | Bin 0 -> 6844 bytes ...ThousandIsland.AcceptorPoolSupervisor.beam | Bin 0 -> 7224 bytes ...xir.ThousandIsland.AcceptorSupervisor.beam | Bin 0 -> 6684 bytes .../Elixir.ThousandIsland.Connection.beam | Bin 0 -> 5572 bytes .../ebin/Elixir.ThousandIsland.Handler.beam | Bin 0 -> 117884 bytes .../Elixir.ThousandIsland.HandlerConfig.beam | Bin 0 -> 6128 bytes .../ebin/Elixir.ThousandIsland.Listener.beam | Bin 0 -> 13120 bytes .../ebin/Elixir.ThousandIsland.Logger.beam | Bin 0 -> 8764 bytes .../Elixir.ThousandIsland.ProcessLabel.beam | Bin 0 -> 5056 bytes .../ebin/Elixir.ThousandIsland.Server.beam | Bin 0 -> 7616 bytes .../Elixir.ThousandIsland.ServerConfig.beam | Bin 0 -> 8404 bytes ...lixir.ThousandIsland.ShutdownListener.beam | Bin 0 -> 8760 bytes .../ebin/Elixir.ThousandIsland.Socket.beam | Bin 0 -> 22208 bytes .../ebin/Elixir.ThousandIsland.Telemetry.beam | Bin 0 -> 13588 bytes .../ebin/Elixir.ThousandIsland.Transport.beam | Bin 0 -> 6408 bytes .../Elixir.ThousandIsland.Transports.SSL.beam | Bin 0 -> 12100 bytes .../Elixir.ThousandIsland.Transports.TCP.beam | Bin 0 -> 10064 bytes .../ebin/Elixir.ThousandIsland.beam | Bin 0 -> 10664 bytes .../thousand_island/ebin/thousand_island.app | 24 + .../test/lib/websock/.mix/compile.elixir | Bin 0 -> 5000 bytes .../test/lib/websock/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../test/lib/websock/.mix/compile.fetch | 0 .../test/lib/websock/ebin/Elixir.WebSock.beam | Bin 0 -> 5324 bytes .../_build/test/lib/websock/ebin/websock.app | 7 + .../lib/websock_adapter/.mix/compile.elixir | Bin 0 -> 5453 bytes .../websock_adapter/.mix/compile.elixir_scm | Bin 0 -> 39 bytes .../lib/websock_adapter/.mix/compile.fetch | 0 .../Elixir.WebSockAdapter.UpgradeError.beam | Bin 0 -> 3572 bytes ...ixir.WebSockAdapter.UpgradeValidation.beam | Bin 0 -> 6608 bytes .../ebin/Elixir.WebSockAdapter.beam | Bin 0 -> 6216 bytes .../websock_adapter/ebin/websock_adapter.app | 10 + phoenix/deps/bandit/.hex | Bin 0 -> 263 bytes phoenix/deps/bandit/CHANGELOG.md | 839 + phoenix/deps/bandit/LICENSE | 21 + phoenix/deps/bandit/README.md | 245 + phoenix/deps/bandit/hex_metadata.config | 82 + phoenix/deps/bandit/lib/bandit.ex | 436 + phoenix/deps/bandit/lib/bandit/adapter.ex | 294 + phoenix/deps/bandit/lib/bandit/application.ex | 14 + phoenix/deps/bandit/lib/bandit/clock.ex | 56 + phoenix/deps/bandit/lib/bandit/compression.ex | 168 + .../bandit/lib/bandit/delegating_handler.ex | 78 + phoenix/deps/bandit/lib/bandit/extractor.ex | 113 + phoenix/deps/bandit/lib/bandit/headers.ex | 123 + .../deps/bandit/lib/bandit/http1/README.md | 30 + .../deps/bandit/lib/bandit/http1/handler.ex | 96 + .../deps/bandit/lib/bandit/http1/socket.ex | 503 + .../deps/bandit/lib/bandit/http2/README.md | 108 + .../bandit/lib/bandit/http2/connection.ex | 473 + .../deps/bandit/lib/bandit/http2/errors.ex | 59 + .../bandit/lib/bandit/http2/flow_control.ex | 43 + phoenix/deps/bandit/lib/bandit/http2/frame.ex | 106 + .../lib/bandit/http2/frame/continuation.ex | 57 + .../bandit/lib/bandit/http2/frame/data.ex | 78 + .../bandit/lib/bandit/http2/frame/goaway.ex | 42 + .../bandit/lib/bandit/http2/frame/headers.ex | 140 + .../bandit/lib/bandit/http2/frame/ping.ex | 45 + .../bandit/lib/bandit/http2/frame/priority.ex | 35 + .../lib/bandit/http2/frame/push_promise.ex | 9 + .../lib/bandit/http2/frame/rst_stream.ex | 33 + .../bandit/lib/bandit/http2/frame/settings.ex | 117 + .../bandit/lib/bandit/http2/frame/unknown.ex | 27 + .../lib/bandit/http2/frame/window_update.ex | 33 + .../deps/bandit/lib/bandit/http2/handler.ex | 186 + .../deps/bandit/lib/bandit/http2/settings.ex | 20 + .../deps/bandit/lib/bandit/http2/stream.ex | 634 + .../lib/bandit/http2/stream_collection.ex | 78 + .../bandit/lib/bandit/http2/stream_process.ex | 31 + phoenix/deps/bandit/lib/bandit/http_error.ex | 6 + .../deps/bandit/lib/bandit/http_transport.ex | 47 + .../deps/bandit/lib/bandit/initial_handler.ex | 86 + phoenix/deps/bandit/lib/bandit/logger.ex | 46 + .../deps/bandit/lib/bandit/phoenix_adapter.ex | 116 + phoenix/deps/bandit/lib/bandit/pipeline.ex | 248 + .../lib/bandit/primitive_ops/websocket.ex | 34 + .../deps/bandit/lib/bandit/socket_helpers.ex | 74 + phoenix/deps/bandit/lib/bandit/telemetry.ex | 250 + phoenix/deps/bandit/lib/bandit/trace.ex | 150 + .../deps/bandit/lib/bandit/transport_error.ex | 6 + .../bandit/lib/bandit/websocket/README.md | 58 + .../bandit/lib/bandit/websocket/connection.ex | 315 + .../deps/bandit/lib/bandit/websocket/frame.ex | 205 + .../lib/bandit/websocket/frame/binary.ex | 20 + .../websocket/frame/connection_close.ex | 49 + .../bandit/websocket/frame/continuation.ex | 24 + .../bandit/lib/bandit/websocket/frame/ping.ex | 32 + .../bandit/lib/bandit/websocket/frame/pong.ex | 32 + .../bandit/lib/bandit/websocket/frame/text.ex | 20 + .../bandit/lib/bandit/websocket/handler.ex | 97 + .../bandit/lib/bandit/websocket/handshake.ex | 105 + .../bandit/websocket/permessage_deflate.ex | 151 + .../bandit/lib/bandit/websocket/socket.ex | 75 + .../bandit/websocket/upgrade_validation.ex | 65 + phoenix/deps/bandit/mix.exs | 95 + phoenix/deps/cc_precompiler/.hex | Bin 0 -> 271 bytes phoenix/deps/cc_precompiler/CHANGELOG.md | 76 + phoenix/deps/cc_precompiler/LICENSE | 201 + .../cc_precompiler/PRECOMPILATION_GUIDE.md | 342 + phoenix/deps/cc_precompiler/README.md | 342 + .../deps/cc_precompiler/hex_metadata.config | 28 + .../deps/cc_precompiler/lib/cc_precompiler.ex | 576 + .../compilation_script/compilation_script.ex | 10 + .../compilation_script/universal_binary.ex | 54 + phoenix/deps/cc_precompiler/mix.exs | 63 + phoenix/deps/db_connection/.formatter.exs | 4 + phoenix/deps/db_connection/.hex | Bin 0 -> 269 bytes phoenix/deps/db_connection/CHANGELOG.md | 112 + phoenix/deps/db_connection/README.md | 100 + .../deps/db_connection/hex_metadata.config | 33 + .../deps/db_connection/lib/db_connection.ex | 1991 + .../db_connection/lib/db_connection/app.ex | 23 + .../lib/db_connection/backoff.ex | 111 + .../lib/db_connection/connection.ex | 536 + .../lib/db_connection/connection_error.ex | 24 + .../lib/db_connection/connection_pool.ex | 391 + .../lib/db_connection/connection_pool/pool.ex | 33 + .../db_connection/lib/db_connection/holder.ex | 448 + .../lib/db_connection/log_entry.ex | 83 + .../lib/db_connection/ownership.ex | 155 + .../lib/db_connection/ownership/manager.ex | 439 + .../lib/db_connection/ownership/proxy.ex | 334 + .../db_connection/lib/db_connection/pool.ex | 19 + .../db_connection/lib/db_connection/query.ex | 57 + .../db_connection/lib/db_connection/task.ex | 47 + .../lib/db_connection/telemetry_listener.ex | 116 + .../db_connection/lib/db_connection/util.ex | 62 + .../lib/db_connection/watcher.ex | 65 + phoenix/deps/db_connection/mix.exs | 84 + phoenix/deps/decimal/.formatter.exs | 3 + phoenix/deps/decimal/.hex | Bin 0 -> 263 bytes phoenix/deps/decimal/CHANGELOG.md | 150 + phoenix/deps/decimal/LICENSE.txt | 176 + phoenix/deps/decimal/README.md | 207 + phoenix/deps/decimal/hex_metadata.config | 14 + phoenix/deps/decimal/lib/decimal.ex | 2106 + phoenix/deps/decimal/lib/decimal/context.ex | 125 + phoenix/deps/decimal/lib/decimal/error.ex | 24 + phoenix/deps/decimal/lib/decimal/macros.ex | 11 + phoenix/deps/decimal/mix.exs | 43 + phoenix/deps/dns_cluster/.formatter.exs | 4 + phoenix/deps/dns_cluster/.hex | Bin 0 -> 267 bytes phoenix/deps/dns_cluster/CHANGELOG.md | 16 + phoenix/deps/dns_cluster/LICENSE.md | 22 + phoenix/deps/dns_cluster/README.md | 45 + phoenix/deps/dns_cluster/hex_metadata.config | 13 + phoenix/deps/dns_cluster/lib/dns_cluster.ex | 243 + phoenix/deps/dns_cluster/mix.exs | 39 + phoenix/deps/ecto/.formatter.exs | 31 + phoenix/deps/ecto/.hex | Bin 0 -> 261 bytes phoenix/deps/ecto/CHANGELOG.md | 1118 + phoenix/deps/ecto/README.md | 214 + phoenix/deps/ecto/hex_metadata.config | 73 + .../ecto/integration_test/cases/assoc.exs | 865 + .../ecto/integration_test/cases/interval.exs | 419 + .../ecto/integration_test/cases/joins.exs | 672 + .../ecto/integration_test/cases/preload.exs | 866 + .../deps/ecto/integration_test/cases/repo.exs | 2397 + .../deps/ecto/integration_test/cases/type.exs | 636 + .../ecto/integration_test/cases/windows.exs | 53 + .../ecto/integration_test/support/schemas.exs | 424 + .../ecto/integration_test/support/types.exs | 53 + phoenix/deps/ecto/lib/ecto.ex | 754 + phoenix/deps/ecto/lib/ecto/adapter.ex | 142 + .../deps/ecto/lib/ecto/adapter/queryable.ex | 127 + phoenix/deps/ecto/lib/ecto/adapter/schema.ex | 92 + phoenix/deps/ecto/lib/ecto/adapter/storage.ex | 53 + .../deps/ecto/lib/ecto/adapter/transaction.ex | 31 + phoenix/deps/ecto/lib/ecto/application.ex | 13 + phoenix/deps/ecto/lib/ecto/association.ex | 1689 + phoenix/deps/ecto/lib/ecto/changeset.ex | 4395 + .../deps/ecto/lib/ecto/changeset/relation.ex | 586 + phoenix/deps/ecto/lib/ecto/embedded.ex | 301 + phoenix/deps/ecto/lib/ecto/enum.ex | 393 + phoenix/deps/ecto/lib/ecto/exceptions.ex | 321 + phoenix/deps/ecto/lib/ecto/json.ex | 52 + phoenix/deps/ecto/lib/ecto/multi.ex | 998 + .../deps/ecto/lib/ecto/parameterized_type.ex | 220 + phoenix/deps/ecto/lib/ecto/query.ex | 3103 + phoenix/deps/ecto/lib/ecto/query/api.ex | 974 + phoenix/deps/ecto/lib/ecto/query/builder.ex | 1631 + .../lib/ecto/query/builder/combination.ex | 36 + .../deps/ecto/lib/ecto/query/builder/cte.ex | 121 + .../ecto/lib/ecto/query/builder/distinct.ex | 91 + .../ecto/lib/ecto/query/builder/dynamic.ex | 112 + .../ecto/lib/ecto/query/builder/filter.ex | 196 + .../deps/ecto/lib/ecto/query/builder/from.ex | 237 + .../ecto/lib/ecto/query/builder/group_by.ex | 118 + .../deps/ecto/lib/ecto/query/builder/join.ex | 426 + .../lib/ecto/query/builder/limit_offset.ex | 111 + .../deps/ecto/lib/ecto/query/builder/lock.ex | 59 + .../ecto/lib/ecto/query/builder/order_by.ex | 282 + .../ecto/lib/ecto/query/builder/preload.ex | 337 + .../ecto/lib/ecto/query/builder/select.ex | 579 + .../ecto/lib/ecto/query/builder/update.ex | 200 + .../ecto/lib/ecto/query/builder/windows.ex | 204 + phoenix/deps/ecto/lib/ecto/query/inspect.ex | 442 + phoenix/deps/ecto/lib/ecto/query/planner.ex | 2751 + .../deps/ecto/lib/ecto/query/window_api.ex | 232 + phoenix/deps/ecto/lib/ecto/queryable.ex | 151 + phoenix/deps/ecto/lib/ecto/repo.ex | 2537 + phoenix/deps/ecto/lib/ecto/repo/assoc.ex | 141 + phoenix/deps/ecto/lib/ecto/repo/preloader.ex | 712 + phoenix/deps/ecto/lib/ecto/repo/queryable.ex | 610 + phoenix/deps/ecto/lib/ecto/repo/registry.ex | 51 + phoenix/deps/ecto/lib/ecto/repo/schema.ex | 1313 + phoenix/deps/ecto/lib/ecto/repo/supervisor.ex | 227 + .../deps/ecto/lib/ecto/repo/transaction.ex | 59 + phoenix/deps/ecto/lib/ecto/schema.ex | 2674 + phoenix/deps/ecto/lib/ecto/schema/loader.ex | 106 + phoenix/deps/ecto/lib/ecto/schema/metadata.ex | 66 + phoenix/deps/ecto/lib/ecto/type.ex | 1591 + phoenix/deps/ecto/lib/ecto/uuid.ex | 234 + phoenix/deps/ecto/lib/mix/ecto.ex | 148 + .../deps/ecto/lib/mix/tasks/ecto.create.ex | 77 + phoenix/deps/ecto/lib/mix/tasks/ecto.drop.ex | 106 + phoenix/deps/ecto/lib/mix/tasks/ecto.ex | 30 + .../deps/ecto/lib/mix/tasks/ecto.gen.repo.ex | 110 + phoenix/deps/ecto/mix.exs | 182 + phoenix/deps/ecto_sql/.formatter.exs | 36 + phoenix/deps/ecto_sql/.hex | Bin 0 -> 265 bytes phoenix/deps/ecto_sql/CHANGELOG.md | 579 + phoenix/deps/ecto_sql/README.md | 73 + phoenix/deps/ecto_sql/hex_metadata.config | 74 + .../ecto_sql/integration_test/sql/alter.exs | 90 + .../ecto_sql/integration_test/sql/lock.exs | 59 + .../ecto_sql/integration_test/sql/logging.exs | 857 + .../integration_test/sql/migration.exs | 775 + .../integration_test/sql/migrator.exs | 264 + .../integration_test/sql/query_many.exs | 15 + .../ecto_sql/integration_test/sql/sandbox.exs | 316 + .../ecto_sql/integration_test/sql/sql.exs | 178 + .../ecto_sql/integration_test/sql/stream.exs | 44 + .../integration_test/sql/subquery.exs | 153 + .../integration_test/sql/transaction.exs | 277 + .../integration_test/support/file_helpers.exs | 45 + .../integration_test/support/migration.exs | 166 + .../integration_test/support/repo.exs | 23 + .../ecto_sql/lib/ecto/adapter/migration.ex | 72 + .../ecto_sql/lib/ecto/adapter/structure.ex | 62 + .../deps/ecto_sql/lib/ecto/adapters/myxql.ex | 602 + .../lib/ecto/adapters/myxql/connection.ex | 1630 + .../ecto_sql/lib/ecto/adapters/postgres.ex | 548 + .../lib/ecto/adapters/postgres/connection.ex | 2080 + .../deps/ecto_sql/lib/ecto/adapters/sql.ex | 1522 + .../lib/ecto/adapters/sql/application.ex | 14 + .../lib/ecto/adapters/sql/connection.ex | 154 + .../ecto_sql/lib/ecto/adapters/sql/sandbox.ex | 705 + .../ecto_sql/lib/ecto/adapters/sql/stream.ex | 43 + .../deps/ecto_sql/lib/ecto/adapters/tds.ex | 296 + .../lib/ecto/adapters/tds/connection.ex | 1987 + .../ecto_sql/lib/ecto/adapters/tds/types.ex | 293 + phoenix/deps/ecto_sql/lib/ecto/migration.ex | 1778 + .../ecto_sql/lib/ecto/migration/runner.ex | 503 + .../lib/ecto/migration/schema_migration.ex | 81 + phoenix/deps/ecto_sql/lib/ecto/migrator.ex | 861 + phoenix/deps/ecto_sql/lib/mix/ecto_sql.ex | 45 + .../deps/ecto_sql/lib/mix/tasks/ecto.dump.ex | 115 + .../lib/mix/tasks/ecto.gen.migration.ex | 130 + .../deps/ecto_sql/lib/mix/tasks/ecto.load.ex | 146 + .../ecto_sql/lib/mix/tasks/ecto.migrate.ex | 162 + .../ecto_sql/lib/mix/tasks/ecto.migrations.ex | 97 + .../ecto_sql/lib/mix/tasks/ecto.rollback.ex | 158 + phoenix/deps/ecto_sql/mix.exs | 207 + phoenix/deps/ecto_sqlite3/.formatter.exs | 8 + phoenix/deps/ecto_sqlite3/.hex | Bin 0 -> 269 bytes phoenix/deps/ecto_sqlite3/LICENSE | 21 + phoenix/deps/ecto_sqlite3/README.md | 106 + phoenix/deps/ecto_sqlite3/hex_metadata.config | 39 + .../ecto_sqlite3/lib/ecto/adapters/sqlite3.ex | 602 + .../lib/ecto/adapters/sqlite3/codec.ex | 150 + .../lib/ecto/adapters/sqlite3/connection.ex | 1990 + .../lib/ecto/adapters/sqlite3/data_type.ex | 95 + .../ecto/adapters/sqlite3/type_extension.ex | 31 + phoenix/deps/ecto_sqlite3/mix.exs | 99 + phoenix/deps/elixir_make/.formatter.exs | 3 + phoenix/deps/elixir_make/.hex | Bin 0 -> 267 bytes phoenix/deps/elixir_make/CHANGELOG.md | 88 + phoenix/deps/elixir_make/README.md | 50 + phoenix/deps/elixir_make/hex_metadata.config | 20 + .../elixir_make/lib/elixir_make/artefact.ex | 293 + .../elixir_make/lib/elixir_make/compiler.ex | 227 + .../elixir_make/lib/elixir_make/downloader.ex | 10 + .../lib/elixir_make/downloader/httpc.ex | 99 + .../lib/elixir_make/precompiler.ex | 110 + .../lib/mix/tasks/compile.elixir_make.ex | 243 + .../lib/mix/tasks/elixir_make.checksum.ex | 172 + .../lib/mix/tasks/elixir_make.precompile.ex | 103 + phoenix/deps/elixir_make/mix.exs | 44 + phoenix/deps/exqlite/.clang-format | 90 + phoenix/deps/exqlite/.formatter.exs | 7 + phoenix/deps/exqlite/.hex | Bin 0 -> 270 bytes phoenix/deps/exqlite/LICENSE | 21 + phoenix/deps/exqlite/Makefile | 160 + phoenix/deps/exqlite/Makefile.win | 71 + phoenix/deps/exqlite/README.md | 264 + phoenix/deps/exqlite/c_src/sqlite3.c | 265977 +++++++++++++++ phoenix/deps/exqlite/c_src/sqlite3.h | 13968 + phoenix/deps/exqlite/c_src/sqlite3_nif.c | 1799 + phoenix/deps/exqlite/c_src/sqlite3ext.h | 730 + phoenix/deps/exqlite/checksum.exs | 28 + phoenix/deps/exqlite/hex_metadata.config | 43 + phoenix/deps/exqlite/lib/exqlite.ex | 104 + phoenix/deps/exqlite/lib/exqlite/basic.ex | 48 + .../deps/exqlite/lib/exqlite/connection.ex | 741 + phoenix/deps/exqlite/lib/exqlite/error.ex | 18 + phoenix/deps/exqlite/lib/exqlite/flags.ex | 35 + phoenix/deps/exqlite/lib/exqlite/pragma.ex | 121 + phoenix/deps/exqlite/lib/exqlite/query.ex | 70 + phoenix/deps/exqlite/lib/exqlite/result.ex | 35 + phoenix/deps/exqlite/lib/exqlite/sqlite3.ex | 587 + .../deps/exqlite/lib/exqlite/sqlite3_nif.ex | 106 + phoenix/deps/exqlite/lib/exqlite/stream.ex | 42 + .../exqlite/lib/exqlite/type_extension.ex | 14 + phoenix/deps/exqlite/mix.exs | 156 + phoenix/deps/finch/.formatter.exs | 4 + phoenix/deps/finch/.hex | Bin 0 -> 262 bytes phoenix/deps/finch/CHANGELOG.md | 264 + phoenix/deps/finch/LICENSE.md | 9 + phoenix/deps/finch/README.md | 121 + phoenix/deps/finch/hex_metadata.config | 46 + phoenix/deps/finch/lib/finch.ex | 754 + phoenix/deps/finch/lib/finch/error.ex | 21 + phoenix/deps/finch/lib/finch/http1/conn.ex | 372 + phoenix/deps/finch/lib/finch/http1/pool.ex | 377 + .../finch/lib/finch/http1/pool_metrics.ex | 81 + phoenix/deps/finch/lib/finch/http2/pool.ex | 844 + .../finch/lib/finch/http2/pool_metrics.ex | 68 + .../finch/lib/finch/http2/request_stream.ex | 83 + phoenix/deps/finch/lib/finch/pool.ex | 32 + phoenix/deps/finch/lib/finch/pool_manager.ex | 208 + phoenix/deps/finch/lib/finch/request.ex | 157 + phoenix/deps/finch/lib/finch/response.ex | 21 + phoenix/deps/finch/lib/finch/ssl.ex | 26 + phoenix/deps/finch/lib/finch/telemetry.ex | 318 + phoenix/deps/finch/mix.exs | 73 + phoenix/deps/hpax/.formatter.exs | 5 + phoenix/deps/hpax/.hex | Bin 0 -> 260 bytes phoenix/deps/hpax/CHANGELOG.md | 34 + phoenix/deps/hpax/LICENSE.txt | 176 + phoenix/deps/hpax/README.md | 74 + phoenix/deps/hpax/hex_metadata.config | 15 + phoenix/deps/hpax/lib/hpax.ex | 360 + phoenix/deps/hpax/lib/hpax/huffman.ex | 94 + phoenix/deps/hpax/lib/hpax/huffman_table | 257 + phoenix/deps/hpax/lib/hpax/table.ex | 348 + phoenix/deps/hpax/lib/hpax/types.ex | 89 + phoenix/deps/hpax/mix.exs | 54 + phoenix/deps/jason/.hex | Bin 0 -> 261 bytes phoenix/deps/jason/CHANGELOG.md | 132 + phoenix/deps/jason/LICENSE | 13 + phoenix/deps/jason/README.md | 157 + phoenix/deps/jason/hex_metadata.config | 21 + phoenix/deps/jason/lib/codegen.ex | 139 + phoenix/deps/jason/lib/decoder.ex | 708 + phoenix/deps/jason/lib/encode.ex | 657 + phoenix/deps/jason/lib/encoder.ex | 239 + phoenix/deps/jason/lib/formatter.ex | 255 + phoenix/deps/jason/lib/fragment.ex | 21 + phoenix/deps/jason/lib/helpers.ex | 98 + phoenix/deps/jason/lib/jason.ex | 242 + phoenix/deps/jason/lib/ordered_object.ex | 94 + phoenix/deps/jason/lib/sigil.ex | 84 + phoenix/deps/jason/mix.exs | 75 + phoenix/deps/mime/.formatter.exs | 3 + phoenix/deps/mime/.hex | Bin 0 -> 260 bytes phoenix/deps/mime/CHANGELOG.md | 51 + phoenix/deps/mime/LICENSE | 13 + phoenix/deps/mime/README.md | 32 + phoenix/deps/mime/hex_metadata.config | 12 + phoenix/deps/mime/lib/mime.ex | 330 + phoenix/deps/mime/mix.exs | 42 + phoenix/deps/mint/.formatter.exs | 11 + phoenix/deps/mint/.hex | Bin 0 -> 260 bytes phoenix/deps/mint/CHANGELOG.md | 226 + phoenix/deps/mint/LICENSE.txt | 176 + phoenix/deps/mint/README.md | 158 + phoenix/deps/mint/hex_metadata.config | 35 + phoenix/deps/mint/lib/mint/application.ex | 14 + phoenix/deps/mint/lib/mint/core/conn.ex | 65 + phoenix/deps/mint/lib/mint/core/headers.ex | 136 + phoenix/deps/mint/lib/mint/core/transport.ex | 36 + .../deps/mint/lib/mint/core/transport/ssl.ex | 755 + .../deps/mint/lib/mint/core/transport/tcp.ex | 92 + phoenix/deps/mint/lib/mint/core/util.ex | 71 + phoenix/deps/mint/lib/mint/http.ex | 1067 + phoenix/deps/mint/lib/mint/http1.ex | 1157 + phoenix/deps/mint/lib/mint/http1/parse.ex | 72 + phoenix/deps/mint/lib/mint/http1/request.ex | 69 + phoenix/deps/mint/lib/mint/http1/response.ex | 43 + phoenix/deps/mint/lib/mint/http2.ex | 2266 + phoenix/deps/mint/lib/mint/http2/frame.ex | 478 + phoenix/deps/mint/lib/mint/http_error.ex | 65 + phoenix/deps/mint/lib/mint/negotiate.ex | 146 + phoenix/deps/mint/lib/mint/transport_error.ex | 92 + phoenix/deps/mint/lib/mint/tunnel_proxy.ex | 148 + phoenix/deps/mint/lib/mint/types.ex | 74 + phoenix/deps/mint/lib/mint/unsafe_proxy.ex | 202 + phoenix/deps/mint/mix.exs | 86 + phoenix/deps/mint/src/mint_shims.erl | 236 + phoenix/deps/nimble_options/.formatter.exs | 4 + phoenix/deps/nimble_options/.hex | Bin 0 -> 270 bytes phoenix/deps/nimble_options/CHANGELOG.md | 98 + phoenix/deps/nimble_options/LICENSE.md | 177 + phoenix/deps/nimble_options/README.md | 93 + .../deps/nimble_options/hex_metadata.config | 16 + .../deps/nimble_options/lib/nimble_options.ex | 1095 + .../nimble_options/lib/nimble_options/docs.ex | 301 + .../lib/nimble_options/validation_error.ex | 43 + phoenix/deps/nimble_options/mix.exs | 66 + phoenix/deps/nimble_pool/.formatter.exs | 5 + phoenix/deps/nimble_pool/.hex | Bin 0 -> 267 bytes phoenix/deps/nimble_pool/CHANGELOG.md | 39 + phoenix/deps/nimble_pool/README.md | 284 + phoenix/deps/nimble_pool/hex_metadata.config | 13 + phoenix/deps/nimble_pool/lib/nimble_pool.ex | 1120 + .../lib/nimble_pool/application.ex | 12 + phoenix/deps/nimble_pool/mix.exs | 56 + phoenix/deps/phoenix/.formatter.exs | 105 + phoenix/deps/phoenix/.hex | Bin 0 -> 263 bytes phoenix/deps/phoenix/CHANGELOG.md | 144 + phoenix/deps/phoenix/LICENSE.md | 22 + phoenix/deps/phoenix/README.md | 98 + .../deps/phoenix/assets/js/phoenix/ajax.js | 116 + .../deps/phoenix/assets/js/phoenix/channel.js | 311 + .../phoenix/assets/js/phoenix/constants.js | 30 + .../deps/phoenix/assets/js/phoenix/index.js | 207 + .../phoenix/assets/js/phoenix/longpoll.js | 192 + .../phoenix/assets/js/phoenix/presence.js | 162 + .../deps/phoenix/assets/js/phoenix/push.js | 128 + .../phoenix/assets/js/phoenix/serializer.js | 112 + .../deps/phoenix/assets/js/phoenix/socket.js | 710 + .../deps/phoenix/assets/js/phoenix/timer.js | 42 + .../deps/phoenix/assets/js/phoenix/utils.js | 9 + phoenix/deps/phoenix/hex_metadata.config | 226 + .../phx_web/components/core_components.ex | 513 + phoenix/deps/phoenix/lib/mix/phoenix.ex | 433 + .../deps/phoenix/lib/mix/phoenix/context.ex | 104 + .../deps/phoenix/lib/mix/phoenix/schema.ex | 632 + phoenix/deps/phoenix/lib/mix/phoenix/scope.ex | 154 + .../phoenix/lib/mix/tasks/compile.phoenix.ex | 60 + .../phoenix/lib/mix/tasks/phx.digest.clean.ex | 76 + .../deps/phoenix/lib/mix/tasks/phx.digest.ex | 88 + phoenix/deps/phoenix/lib/mix/tasks/phx.ex | 40 + .../phoenix/lib/mix/tasks/phx.gen.auth.ex | 1152 + .../mix/tasks/phx.gen.auth/hashing_library.ex | 55 + .../lib/mix/tasks/phx.gen.auth/injector.ex | 320 + .../lib/mix/tasks/phx.gen.auth/migration.ex | 33 + .../phoenix/lib/mix/tasks/phx.gen.cert.ex | 311 + .../phoenix/lib/mix/tasks/phx.gen.channel.ex | 121 + .../phoenix/lib/mix/tasks/phx.gen.context.ex | 482 + .../phoenix/lib/mix/tasks/phx.gen.embedded.ex | 111 + phoenix/deps/phoenix/lib/mix/tasks/phx.gen.ex | 52 + .../phoenix/lib/mix/tasks/phx.gen.html.ex | 359 + .../phoenix/lib/mix/tasks/phx.gen.json.ex | 253 + .../phoenix/lib/mix/tasks/phx.gen.live.ex | 453 + .../phoenix/lib/mix/tasks/phx.gen.notifier.ex | 214 + .../phoenix/lib/mix/tasks/phx.gen.presence.ex | 69 + .../phoenix/lib/mix/tasks/phx.gen.release.ex | 379 + .../phoenix/lib/mix/tasks/phx.gen.schema.ex | 295 + .../phoenix/lib/mix/tasks/phx.gen.secret.ex | 36 + .../phoenix/lib/mix/tasks/phx.gen.socket.ex | 116 + .../deps/phoenix/lib/mix/tasks/phx.routes.ex | 191 + .../deps/phoenix/lib/mix/tasks/phx.server.ex | 55 + phoenix/deps/phoenix/lib/phoenix.ex | 76 + phoenix/deps/phoenix/lib/phoenix/channel.ex | 720 + .../phoenix/lib/phoenix/channel/server.ex | 571 + .../deps/phoenix/lib/phoenix/code_reloader.ex | 340 + .../lib/phoenix/code_reloader/mix_listener.ex | 72 + .../lib/phoenix/code_reloader/proxy.ex | 76 + .../lib/phoenix/code_reloader/server.ex | 461 + phoenix/deps/phoenix/lib/phoenix/config.ex | 166 + .../deps/phoenix/lib/phoenix/controller.ex | 2015 + .../lib/phoenix/controller/pipeline.ex | 220 + phoenix/deps/phoenix/lib/phoenix/debug.ex | 168 + phoenix/deps/phoenix/lib/phoenix/digester.ex | 416 + .../lib/phoenix/digester/compressor.ex | 44 + .../deps/phoenix/lib/phoenix/digester/gzip.ex | 18 + phoenix/deps/phoenix/lib/phoenix/endpoint.ex | 1094 + .../lib/phoenix/endpoint/cowboy2_adapter.ex | 155 + .../lib/phoenix/endpoint/render_errors.ex | 195 + .../lib/phoenix/endpoint/supervisor.ex | 488 + .../phoenix/endpoint/sync_code_reload_plug.ex | 36 + .../phoenix/lib/phoenix/endpoint/watcher.ex | 60 + .../deps/phoenix/lib/phoenix/exceptions.ex | 72 + phoenix/deps/phoenix/lib/phoenix/flash.ex | 29 + phoenix/deps/phoenix/lib/phoenix/logger.ex | 442 + phoenix/deps/phoenix/lib/phoenix/naming.ex | 132 + phoenix/deps/phoenix/lib/phoenix/param.ex | 139 + phoenix/deps/phoenix/lib/phoenix/presence.ex | 730 + phoenix/deps/phoenix/lib/phoenix/router.ex | 1334 + .../lib/phoenix/router/console_formatter.ex | 143 + .../phoenix/lib/phoenix/router/helpers.ex | 382 + .../phoenix/lib/phoenix/router/resource.ex | 86 + .../deps/phoenix/lib/phoenix/router/route.ex | 232 + .../deps/phoenix/lib/phoenix/router/scope.ex | 302 + phoenix/deps/phoenix/lib/phoenix/socket.ex | 884 + .../phoenix/lib/phoenix/socket/message.ex | 85 + .../lib/phoenix/socket/pool_supervisor.ex | 138 + .../phoenix/lib/phoenix/socket/serializer.ex | 29 + .../socket/serializers/v1_json_serializer.ex | 47 + .../socket/serializers/v2_json_serializer.ex | 160 + .../phoenix/lib/phoenix/socket/transport.ex | 654 + .../phoenix/lib/phoenix/test/channel_test.ex | 748 + .../phoenix/lib/phoenix/test/conn_test.ex | 733 + phoenix/deps/phoenix/lib/phoenix/token.ex | 275 + .../lib/phoenix/transports/long_poll.ex | 295 + .../phoenix/transports/long_poll_server.ex | 161 + .../lib/phoenix/transports/websocket.ex | 130 + .../phoenix/lib/phoenix/verified_routes.ex | 1063 + phoenix/deps/phoenix/mix.exs | 308 + phoenix/deps/phoenix/package.json | 46 + phoenix/deps/phoenix/priv/static/favicon.ico | Bin 0 -> 152 bytes .../phoenix/priv/static/phoenix-orange.png | Bin 0 -> 16037 bytes .../deps/phoenix/priv/static/phoenix.cjs.js | 1641 + .../phoenix/priv/static/phoenix.cjs.js.map | 7 + phoenix/deps/phoenix/priv/static/phoenix.js | 1642 + .../deps/phoenix/priv/static/phoenix.min.js | 2 + phoenix/deps/phoenix/priv/static/phoenix.mjs | 1619 + .../deps/phoenix/priv/static/phoenix.mjs.map | 7 + phoenix/deps/phoenix/priv/static/phoenix.png | Bin 0 -> 13900 bytes .../priv/templates/phx.gen.auth/AGENTS.md | 57 + .../priv/templates/phx.gen.auth/auth.ex | 321 + .../priv/templates/phx.gen.auth/auth_test.exs | 442 + .../phx.gen.auth/confirmation_live.ex | 94 + .../phx.gen.auth/confirmation_live_test.exs | 118 + .../priv/templates/phx.gen.auth/conn_case.exs | 41 + .../context_fixtures_functions.ex | 82 + .../phx.gen.auth/context_functions.ex | 288 + .../priv/templates/phx.gen.auth/login_live.ex | 134 + .../phx.gen.auth/login_live_test.exs | 109 + .../priv/templates/phx.gen.auth/migration.ex | 32 + .../priv/templates/phx.gen.auth/notifier.ex | 84 + .../phx.gen.auth/registration_controller.ex | 32 + .../registration_controller_test.exs | 50 + .../phx.gen.auth/registration_html.ex | 5 + .../phx.gen.auth/registration_live.ex | 89 + .../phx.gen.auth/registration_live_test.exs | 82 + .../phx.gen.auth/registration_new.html.heex | 32 + .../priv/templates/phx.gen.auth/routes.ex | 42 + .../priv/templates/phx.gen.auth/schema.ex | 137 + .../templates/phx.gen.auth/schema_token.ex | 158 + .../priv/templates/phx.gen.auth/scope.ex | 33 + .../phx.gen.auth/session_confirm.html.heex | 59 + .../phx.gen.auth/session_controller.ex | 143 + .../phx.gen.auth/session_controller_test.exs | 224 + .../templates/phx.gen.auth/session_html.ex | 9 + .../phx.gen.auth/session_new.html.heex | 73 + .../phx.gen.auth/settings_controller.ex | 77 + .../phx.gen.auth/settings_controller_test.exs | 148 + .../phx.gen.auth/settings_edit.html.heex | 49 + .../templates/phx.gen.auth/settings_html.ex | 5 + .../templates/phx.gen.auth/settings_live.ex | 160 + .../phx.gen.auth/settings_live_test.exs | 212 + .../templates/phx.gen.auth/test_cases.exs | 391 + .../priv/templates/phx.gen.channel/channel.ex | 32 + .../templates/phx.gen.channel/channel_case.ex | 39 + .../phx.gen.channel/channel_test.exs | 27 + .../phx.gen.context/access_no_schema.ex | 89 + .../phx.gen.context/access_no_schema_scope.ex | 97 + .../priv/templates/phx.gen.context/context.ex | 8 + .../phx.gen.context/context_test.exs | 5 + .../templates/phx.gen.context/fixtures.ex | 23 + .../phx.gen.context/fixtures_module.ex | 6 + .../phx.gen.context/schema_access.ex | 96 + .../phx.gen.context/schema_access_scope.ex | 139 + .../templates/phx.gen.context/test_cases.exs | 54 + .../phx.gen.context/test_cases_scope.exs | 86 + .../phx.gen.embedded/embedded_schema.ex | 17 + .../priv/templates/phx.gen.html/controller.ex | 67 + .../phx.gen.html/controller_test.exs | 90 + .../templates/phx.gen.html/edit.html.heex | 8 + .../priv/templates/phx.gen.html/html.ex | 17 + .../templates/phx.gen.html/index.html.heex | 25 + .../priv/templates/phx.gen.html/new.html.heex | 8 + .../phx.gen.html/resource_form.html.heex | 7 + .../templates/phx.gen.html/show.html.heex | 18 + .../templates/phx.gen.json/changeset_json.ex | 39 + .../priv/templates/phx.gen.json/controller.ex | 43 + .../phx.gen.json/controller_test.exs | 88 + .../phx.gen.json/fallback_controller.ex | 24 + .../priv/templates/phx.gen.json/json.ex | 23 + .../templates/phx.gen.live/core_components.ex | 513 + .../priv/templates/phx.gen.live/form.ex | 98 + .../priv/templates/phx.gen.live/index.ex | 74 + .../priv/templates/phx.gen.live/live_test.exs | 128 + .../priv/templates/phx.gen.live/show.ex | 64 + .../templates/phx.gen.notifier/notifier.ex | 14 + .../phx.gen.notifier/notifier_test.exs | 18 + .../templates/phx.gen.presence/presence.ex | 11 + .../templates/phx.gen.release/Dockerfile.eex | 101 + .../phx.gen.release/dockerignore.eex | 46 + .../phx.gen.release/rel/migrate.bat.eex | 1 + .../phx.gen.release/rel/migrate.sh.eex | 5 + .../phx.gen.release/rel/server.bat.eex | 2 + .../phx.gen.release/rel/server.sh.eex | 5 + .../priv/templates/phx.gen.release/release.ex | 30 + .../templates/phx.gen.schema/migration.exs | 19 + .../priv/templates/phx.gen.schema/schema.ex | 26 + .../priv/templates/phx.gen.socket/socket.ex | 57 + .../priv/templates/phx.gen.socket/socket.js | 23 + phoenix/deps/phoenix/usage-rules/ecto.md | 9 + phoenix/deps/phoenix/usage-rules/elixir.md | 55 + phoenix/deps/phoenix/usage-rules/html.md | 76 + phoenix/deps/phoenix/usage-rules/liveview.md | 231 + phoenix/deps/phoenix/usage-rules/phoenix.md | 15 + phoenix/deps/phoenix_ecto/.formatter.exs | 4 + phoenix/deps/phoenix_ecto/.hex | Bin 0 -> 268 bytes phoenix/deps/phoenix_ecto/CHANGELOG.md | 264 + phoenix/deps/phoenix_ecto/LICENSE | 20 + phoenix/deps/phoenix_ecto/README.md | 130 + phoenix/deps/phoenix_ecto/hex_metadata.config | 38 + phoenix/deps/phoenix_ecto/lib/phoenix_ecto.ex | 17 + .../lib/phoenix_ecto/check_repo_status.ex | 107 + .../lib/phoenix_ecto/exceptions.ex | 18 + .../phoenix_ecto/lib/phoenix_ecto/html.ex | 345 + .../phoenix_ecto/lib/phoenix_ecto/plug.ex | 72 + .../lib/phoenix_ecto/sql/sandbox.ex | 353 + .../lib/phoenix_ecto/sql/sandbox_session.ex | 51 + phoenix/deps/phoenix_ecto/mix.exs | 61 + phoenix/deps/phoenix_pubsub/.hex | Bin 0 -> 270 bytes phoenix/deps/phoenix_pubsub/CHANGELOG.md | 45 + phoenix/deps/phoenix_pubsub/LICENSE.md | 22 + phoenix/deps/phoenix_pubsub/README.md | 56 + .../deps/phoenix_pubsub/hex_metadata.config | 22 + .../deps/phoenix_pubsub/lib/phoenix/pubsub.ex | 385 + .../lib/phoenix/pubsub/adapter.ex | 46 + .../lib/phoenix/pubsub/application.ex | 19 + .../phoenix_pubsub/lib/phoenix/pubsub/pg2.ex | 140 + .../lib/phoenix/pubsub/supervisor.ex | 42 + .../phoenix_pubsub/lib/phoenix/tracker.ex | 372 + .../lib/phoenix/tracker/clock.ex | 104 + .../lib/phoenix/tracker/delta_generation.ex | 69 + .../lib/phoenix/tracker/replica.ex | 91 + .../lib/phoenix/tracker/shard.ex | 564 + .../lib/phoenix/tracker/shutdown_handler.ex | 20 + .../lib/phoenix/tracker/state.ex | 687 + phoenix/deps/phoenix_pubsub/mix.exs | 87 + .../test/shared/pubsub_test.exs | 198 + phoenix/deps/phoenix_template/.formatter.exs | 4 + phoenix/deps/phoenix_template/.hex | Bin 0 -> 272 bytes phoenix/deps/phoenix_template/CHANGELOG.md | 21 + phoenix/deps/phoenix_template/LICENSE.md | 22 + phoenix/deps/phoenix_template/README.md | 21 + .../deps/phoenix_template/hex_metadata.config | 22 + .../phoenix_template/lib/phoenix/template.ex | 509 + .../lib/phoenix/template/eex_engine.ex | 56 + .../lib/phoenix/template/engine.ex | 15 + .../lib/phoenix/template/exs_engine.ex | 13 + phoenix/deps/phoenix_template/mix.exs | 49 + phoenix/deps/plug/.formatter.exs | 30 + phoenix/deps/plug/.hex | Bin 0 -> 261 bytes phoenix/deps/plug/CHANGELOG.md | 405 + phoenix/deps/plug/LICENSE | 13 + phoenix/deps/plug/README.md | 372 + phoenix/deps/plug/hex_metadata.config | 55 + phoenix/deps/plug/lib/plug.ex | 179 + phoenix/deps/plug/lib/plug/adapters/cowboy.ex | 55 + .../deps/plug/lib/plug/adapters/test/conn.ex | 243 + phoenix/deps/plug/lib/plug/application.ex | 16 + phoenix/deps/plug/lib/plug/basic_auth.ex | 170 + phoenix/deps/plug/lib/plug/builder.ex | 440 + phoenix/deps/plug/lib/plug/conn.ex | 2024 + phoenix/deps/plug/lib/plug/conn/adapter.ex | 209 + phoenix/deps/plug/lib/plug/conn/cookies.ex | 153 + phoenix/deps/plug/lib/plug/conn/query.ex | 457 + phoenix/deps/plug/lib/plug/conn/status.ex | 183 + phoenix/deps/plug/lib/plug/conn/unfetched.ex | 47 + phoenix/deps/plug/lib/plug/conn/utils.ex | 341 + .../deps/plug/lib/plug/conn/wrapper_error.ex | 38 + phoenix/deps/plug/lib/plug/csrf_protection.ex | 448 + phoenix/deps/plug/lib/plug/debugger.ex | 589 + phoenix/deps/plug/lib/plug/error_handler.ex | 122 + phoenix/deps/plug/lib/plug/exceptions.ex | 70 + phoenix/deps/plug/lib/plug/head.ex | 20 + phoenix/deps/plug/lib/plug/html.ex | 81 + phoenix/deps/plug/lib/plug/logger.ex | 56 + phoenix/deps/plug/lib/plug/method_override.ex | 69 + phoenix/deps/plug/lib/plug/mime.ex | 67 + phoenix/deps/plug/lib/plug/parsers.ex | 388 + phoenix/deps/plug/lib/plug/parsers/json.ex | 116 + .../deps/plug/lib/plug/parsers/multipart.ex | 311 + .../deps/plug/lib/plug/parsers/urlencoded.ex | 57 + phoenix/deps/plug/lib/plug/request_id.ex | 99 + phoenix/deps/plug/lib/plug/rewrite_on.ex | 135 + phoenix/deps/plug/lib/plug/router.ex | 665 + phoenix/deps/plug/lib/plug/router/utils.ex | 286 + phoenix/deps/plug/lib/plug/session.ex | 140 + phoenix/deps/plug/lib/plug/session/cookie.ex | 246 + phoenix/deps/plug/lib/plug/session/ets.ex | 98 + phoenix/deps/plug/lib/plug/session/store.ex | 71 + phoenix/deps/plug/lib/plug/ssl.ex | 480 + phoenix/deps/plug/lib/plug/static.ex | 473 + phoenix/deps/plug/lib/plug/telemetry.ex | 89 + .../plug/lib/plug/templates/debugger.html.eex | 1151 + .../plug/lib/plug/templates/debugger.md.eex | 24 + phoenix/deps/plug/lib/plug/test.ex | 300 + phoenix/deps/plug/lib/plug/upload.ex | 270 + .../deps/plug/lib/plug/upload/supervisor.ex | 34 + .../deps/plug/lib/plug/upload/terminator.ex | 27 + phoenix/deps/plug/mix.exs | 132 + phoenix/deps/plug/src/plug_multipart.erl | 471 + phoenix/deps/plug_crypto/.hex | Bin 0 -> 267 bytes phoenix/deps/plug_crypto/CHANGELOG.md | 57 + phoenix/deps/plug_crypto/LICENSE | 13 + phoenix/deps/plug_crypto/README.md | 30 + phoenix/deps/plug_crypto/hex_metadata.config | 17 + phoenix/deps/plug_crypto/lib/plug/crypto.ex | 359 + .../lib/plug/crypto/application.ex | 16 + .../lib/plug/crypto/key_generator.ex | 115 + .../lib/plug/crypto/message_encryptor.ex | 197 + .../lib/plug/crypto/message_verifier.ex | 73 + phoenix/deps/plug_crypto/mix.exs | 52 + phoenix/deps/req/.formatter.exs | 4 + phoenix/deps/req/.hex | Bin 0 -> 260 bytes phoenix/deps/req/CHANGELOG.md | 1387 + phoenix/deps/req/LICENSE.md | 201 + phoenix/deps/req/README.md | 297 + phoenix/deps/req/hex_metadata.config | 58 + phoenix/deps/req/lib/req.ex | 1392 + phoenix/deps/req/lib/req/application.ex | 20 + phoenix/deps/req/lib/req/archive_error.ex | 22 + .../req/lib/req/checksum_mismatch_error.ex | 16 + phoenix/deps/req/lib/req/decompress_error.ex | 17 + phoenix/deps/req/lib/req/fields.ex | 233 + phoenix/deps/req/lib/req/finch.ex | 435 + phoenix/deps/req/lib/req/http_error.ex | 27 + phoenix/deps/req/lib/req/request.ex | 1312 + phoenix/deps/req/lib/req/response.ex | 269 + phoenix/deps/req/lib/req/response_async.ex | 90 + phoenix/deps/req/lib/req/steps.ex | 2409 + phoenix/deps/req/lib/req/test.ex | 795 + phoenix/deps/req/lib/req/test/adapter.ex | 49 + phoenix/deps/req/lib/req/test/ownership.ex | 368 + .../deps/req/lib/req/test/ownership_error.ex | 31 + .../req/lib/req/too_many_redirects_error.ex | 12 + phoenix/deps/req/lib/req/transport_error.ex | 17 + phoenix/deps/req/lib/req/utils.ex | 843 + phoenix/deps/req/mix.exs | 134 + phoenix/deps/telemetry/.hex | Bin 0 -> 268 bytes phoenix/deps/telemetry/CHANGELOG.md | 141 + phoenix/deps/telemetry/LICENSE | 177 + phoenix/deps/telemetry/NOTICE | 13 + phoenix/deps/telemetry/README.md | 260 + .../lib/.rebar3/rebar_compiler_erl/source.dag | Bin 0 -> 1775 bytes phoenix/deps/telemetry/hex_metadata.config | 17 + phoenix/deps/telemetry/mix.exs | 20 + phoenix/deps/telemetry/rebar.config | 32 + phoenix/deps/telemetry/rebar.lock | 1 + phoenix/deps/telemetry/src/telemetry.app.src | 13 + phoenix/deps/telemetry/src/telemetry.erl | 457 + phoenix/deps/telemetry/src/telemetry.hrl | 32 + phoenix/deps/telemetry/src/telemetry_app.erl | 13 + phoenix/deps/telemetry/src/telemetry_ets.erl | 69 + .../telemetry/src/telemetry_handler_table.erl | 125 + phoenix/deps/telemetry/src/telemetry_pt.erl | 62 + phoenix/deps/telemetry/src/telemetry_sup.erl | 24 + phoenix/deps/telemetry/src/telemetry_test.erl | 86 + phoenix/deps/telemetry_metrics/.formatter.exs | 4 + phoenix/deps/telemetry_metrics/.hex | Bin 0 -> 273 bytes phoenix/deps/telemetry_metrics/CHANGELOG.md | 133 + phoenix/deps/telemetry_metrics/LICENSE | 177 + phoenix/deps/telemetry_metrics/README.md | 29 + .../telemetry_metrics/hex_metadata.config | 25 + .../lib/telemetry_metrics.ex | 806 + .../lib/telemetry_metrics/console_reporter.ex | 177 + .../lib/telemetry_metrics/counter.ex | 31 + .../lib/telemetry_metrics/distribution.ex | 31 + .../lib/telemetry_metrics/last_value.ex | 31 + .../lib/telemetry_metrics/sum.ex | 31 + .../lib/telemetry_metrics/summary.ex | 31 + phoenix/deps/telemetry_metrics/mix.exs | 82 + phoenix/deps/telemetry_poller/.hex | Bin 0 -> 275 bytes phoenix/deps/telemetry_poller/CHANGELOG.md | 133 + phoenix/deps/telemetry_poller/LICENSE | 177 + phoenix/deps/telemetry_poller/NOTICE | 13 + phoenix/deps/telemetry_poller/README.md | 122 + .../lib/.rebar3/rebar_compiler_erl/source.dag | Bin 0 -> 1088 bytes .../deps/telemetry_poller/hex_metadata.config | 20 + phoenix/deps/telemetry_poller/rebar.config | 33 + phoenix/deps/telemetry_poller/rebar.lock | 8 + .../src/telemetry_poller.app.src | 12 + .../telemetry_poller/src/telemetry_poller.erl | 505 + .../src/telemetry_poller_app.erl | 29 + .../src/telemetry_poller_builtin.erl | 64 + .../src/telemetry_poller_sup.erl | 18 + phoenix/deps/thousand_island/.hex | Bin 0 -> 271 bytes phoenix/deps/thousand_island/CHANGELOG.md | 328 + phoenix/deps/thousand_island/LICENSE | 21 + phoenix/deps/thousand_island/README.md | 166 + .../deps/thousand_island/hex_metadata.config | 35 + .../thousand_island/lib/thousand_island.ex | 286 + .../lib/thousand_island/acceptor.ex | 77 + .../acceptor_pool_supervisor.ex | 54 + .../thousand_island/acceptor_supervisor.ex | 59 + .../lib/thousand_island/connection.ex | 102 + .../lib/thousand_island/handler.ex | 600 + .../lib/thousand_island/handler_config.ex | 31 + .../lib/thousand_island/listener.ex | 109 + .../lib/thousand_island/logger.ex | 149 + .../lib/thousand_island/process_label.ex | 52 + .../lib/thousand_island/server.ex | 88 + .../lib/thousand_island/server_config.ex | 77 + .../lib/thousand_island/shutdown_listener.ex | 47 + .../lib/thousand_island/socket.ex | 236 + .../lib/thousand_island/telemetry.ex | 400 + .../lib/thousand_island/transport.ex | 220 + .../lib/thousand_island/transports/ssl.ex | 221 + .../lib/thousand_island/transports/tcp.ex | 169 + phoenix/deps/thousand_island/mix.exs | 80 + phoenix/deps/websock/.hex | Bin 0 -> 263 bytes phoenix/deps/websock/LICENSE | 21 + phoenix/deps/websock/README.md | 74 + phoenix/deps/websock/hex_metadata.config | 13 + phoenix/deps/websock/lib/websock.ex | 128 + phoenix/deps/websock/mix.exs | 46 + phoenix/deps/websock/test/test_helper.exs | 1 + phoenix/deps/websock_adapter/.hex | Bin 0 -> 271 bytes phoenix/deps/websock_adapter/CHANGELOG.md | 68 + phoenix/deps/websock_adapter/LICENSE | 21 + phoenix/deps/websock_adapter/README.md | 102 + .../deps/websock_adapter/hex_metadata.config | 36 + .../websock_adapter/lib/websock_adapter.ex | 105 + .../lib/websock_adapter/cowboy_adapter.ex | 109 + .../lib/websock_adapter/upgrade_error.ex | 3 + .../lib/websock_adapter/upgrade_validation.ex | 102 + phoenix/deps/websock_adapter/mix.exs | 47 + 3116 files changed, 467189 insertions(+) create mode 100644 phoenix/_build/dev/lib/bandit/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/bandit/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/bandit/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Adapter.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Application.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Clock.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Compression.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.DelegatingHandler.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Extractor.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP1.Handler.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP1.Socket.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Connection.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Errors.ConnectionError.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Errors.StreamError.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Errors.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.FlowControl.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Continuation.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Data.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Flags.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Goaway.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Headers.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Ping.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Priority.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.PushPromise.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.RstStream.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Continuation.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Data.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Goaway.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Headers.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Ping.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Priority.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.RstStream.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Settings.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.WindowUpdate.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Settings.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Unknown.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.WindowUpdate.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Handler.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Settings.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Stream.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.StreamCollection.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.StreamProcess.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTPError.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP1.Socket.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP2.Stream.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Headers.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.InitialHandler.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Logger.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.PhoenixAdapter.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Pipeline.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.PrimitiveOps.WebSocket.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.SocketHelpers.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Telemetry.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Trace.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.TransportError.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Connection.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Binary.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.ConnectionClose.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Continuation.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Ping.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Pong.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Binary.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.ConnectionClose.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Continuation.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Ping.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Pong.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Text.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Text.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Handler.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Handshake.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.PerMessageDeflate.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Socket.ThousandIsland.Socket.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Socket.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.UpgradeValidation.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.beam create mode 100644 phoenix/_build/dev/lib/bandit/ebin/bandit.app create mode 100644 phoenix/_build/dev/lib/cc_precompiler/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/cc_precompiler/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/cc_precompiler/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/cc_precompiler/ebin/Elixir.CCPrecompiler.CompilationScript.beam create mode 100644 phoenix/_build/dev/lib/cc_precompiler/ebin/Elixir.CCPrecompiler.UniversalBinary.beam create mode 100644 phoenix/_build/dev/lib/cc_precompiler/ebin/Elixir.CCPrecompiler.beam create mode 100644 phoenix/_build/dev/lib/cc_precompiler/ebin/cc_precompiler.app create mode 100644 phoenix/_build/dev/lib/db_connection/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/db_connection/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/db_connection/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.App.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Backoff.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Connection.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.ConnectionError.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.ConnectionPool.Pool.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.ConnectionPool.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.EncodeError.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Holder.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.LogEntry.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Ownership.Manager.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Ownership.Proxy.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Ownership.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.OwnershipError.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Pool.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.PrepareStream.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Query.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Stream.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Task.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.TelemetryListener.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.TransactionError.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Util.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Watcher.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.Enumerable.DBConnection.PrepareStream.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/Elixir.Enumerable.DBConnection.Stream.beam create mode 100644 phoenix/_build/dev/lib/db_connection/ebin/db_connection.app create mode 100644 phoenix/_build/dev/lib/decimal/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/decimal/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/decimal/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/decimal/ebin/Elixir.Decimal.Context.beam create mode 100644 phoenix/_build/dev/lib/decimal/ebin/Elixir.Decimal.Error.beam create mode 100644 phoenix/_build/dev/lib/decimal/ebin/Elixir.Decimal.Macros.beam create mode 100644 phoenix/_build/dev/lib/decimal/ebin/Elixir.Decimal.beam create mode 100644 phoenix/_build/dev/lib/decimal/ebin/Elixir.Inspect.Decimal.beam create mode 100644 phoenix/_build/dev/lib/decimal/ebin/Elixir.JSON.Encoder.Decimal.beam create mode 100644 phoenix/_build/dev/lib/decimal/ebin/Elixir.String.Chars.Decimal.beam create mode 100644 phoenix/_build/dev/lib/decimal/ebin/decimal.app create mode 100644 phoenix/_build/dev/lib/dns_cluster/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/dns_cluster/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/dns_cluster/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/dns_cluster/ebin/Elixir.DNSCluster.Resolver.beam create mode 100644 phoenix/_build/dev/lib/dns_cluster/ebin/Elixir.DNSCluster.beam create mode 100644 phoenix/_build/dev/lib/dns_cluster/ebin/dns_cluster.app create mode 100644 phoenix/_build/dev/lib/ecto/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/ecto/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/ecto/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Adapter.Queryable.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Adapter.Schema.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Adapter.Storage.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Adapter.Transaction.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Adapter.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Application.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Association.BelongsTo.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Association.Has.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Association.HasThrough.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Association.ManyToMany.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Association.NotLoaded.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Association.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.CastError.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.ChangeError.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Changeset.Relation.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Changeset.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.ConstraintError.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Embedded.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Enum.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.InvalidChangesetError.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.InvalidURLError.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.MigrationError.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Multi.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.MultiplePrimaryKeyError.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.MultipleResultsError.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.NoPrimaryKeyFieldError.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.NoPrimaryKeyValueError.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.NoResultsError.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.ParameterizedType.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.API.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.BooleanExpr.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.CTE.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Combination.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Distinct.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Dynamic.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Filter.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.From.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.GroupBy.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Join.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.LimitOffset.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Lock.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.OrderBy.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Preload.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Select.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Update.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Windows.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.ByExpr.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.CastError.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.CompileError.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.DynamicExpr.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.FromExpr.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.JoinExpr.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.LimitExpr.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Planner.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.QueryExpr.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.SelectExpr.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Tagged.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Values.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.WindowAPI.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.WithExpr.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.QueryError.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Queryable.Atom.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Queryable.BitString.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Queryable.Ecto.Query.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Queryable.Ecto.SubQuery.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Queryable.Tuple.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Queryable.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Repo.Assoc.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Repo.Preloader.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Repo.Queryable.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Repo.Registry.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Repo.Schema.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Repo.Supervisor.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Repo.Transaction.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Repo.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Schema.Loader.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Schema.Metadata.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Schema.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.StaleEntryError.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.SubQuery.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.SubQueryError.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Type.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.UUID.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Inspect.Ecto.Association.NotLoaded.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Inspect.Ecto.Changeset.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Inspect.Ecto.Query.DynamicExpr.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Inspect.Ecto.Query.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Inspect.Ecto.Schema.Metadata.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.JSON.Encoder.Ecto.Association.NotLoaded.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.JSON.Encoder.Ecto.Schema.Metadata.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Jason.Encoder.Ecto.Association.NotLoaded.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Jason.Encoder.Ecto.Schema.Metadata.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Mix.Ecto.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.Create.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.Drop.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.Gen.Repo.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.beam create mode 100644 phoenix/_build/dev/lib/ecto/ebin/ecto.app create mode 100644 phoenix/_build/dev/lib/ecto_sql/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/ecto_sql/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/ecto_sql/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Collectable.Ecto.Adapters.SQL.Stream.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapter.Migration.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapter.Structure.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.MyXQL.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.Postgres.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Application.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Connection.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Sandbox.Connection.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Sandbox.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Stream.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.Tds.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Command.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Constraint.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Index.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Reference.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Runner.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.SchemaMigration.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Table.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migrator.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Enumerable.Ecto.Adapters.SQL.Stream.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.EctoSQL.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Dump.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Gen.Migration.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Load.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Migrate.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Migrations.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Rollback.beam create mode 100644 phoenix/_build/dev/lib/ecto_sql/ebin/ecto_sql.app create mode 100644 phoenix/_build/dev/lib/ecto_sqlite3/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/ecto_sqlite3/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/ecto_sqlite3/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.Codec.beam create mode 100644 phoenix/_build/dev/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.Connection.beam create mode 100644 phoenix/_build/dev/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.DataType.beam create mode 100644 phoenix/_build/dev/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.TypeExtension.beam create mode 100644 phoenix/_build/dev/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.beam create mode 100644 phoenix/_build/dev/lib/ecto_sqlite3/ebin/ecto_sqlite3.app create mode 100644 phoenix/_build/dev/lib/elixir_make/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/elixir_make/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/elixir_make/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/elixir_make/ebin/Elixir.ElixirMake.Artefact.beam create mode 100644 phoenix/_build/dev/lib/elixir_make/ebin/Elixir.ElixirMake.Compiler.beam create mode 100644 phoenix/_build/dev/lib/elixir_make/ebin/Elixir.ElixirMake.Downloader.Httpc.beam create mode 100644 phoenix/_build/dev/lib/elixir_make/ebin/Elixir.ElixirMake.Downloader.beam create mode 100644 phoenix/_build/dev/lib/elixir_make/ebin/Elixir.ElixirMake.Precompiler.beam create mode 100644 phoenix/_build/dev/lib/elixir_make/ebin/Elixir.Mix.Tasks.Compile.ElixirMake.beam create mode 100644 phoenix/_build/dev/lib/elixir_make/ebin/Elixir.Mix.Tasks.ElixirMake.Checksum.beam create mode 100644 phoenix/_build/dev/lib/elixir_make/ebin/Elixir.Mix.Tasks.ElixirMake.Precompile.beam create mode 100644 phoenix/_build/dev/lib/elixir_make/ebin/elixir_make.app create mode 100644 phoenix/_build/dev/lib/exqlite/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/exqlite/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/exqlite/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/exqlite/ebin/Elixir.DBConnection.Query.Exqlite.Query.beam create mode 100644 phoenix/_build/dev/lib/exqlite/ebin/Elixir.Enumerable.Exqlite.Stream.beam create mode 100644 phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Basic.beam create mode 100644 phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Connection.beam create mode 100644 phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Error.beam create mode 100644 phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Flags.beam create mode 100644 phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Pragma.beam create mode 100644 phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Query.beam create mode 100644 phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Result.beam create mode 100644 phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Sqlite3.beam create mode 100644 phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Sqlite3NIF.beam create mode 100644 phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Stream.beam create mode 100644 phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.TypeExtension.beam create mode 100644 phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.beam create mode 100644 phoenix/_build/dev/lib/exqlite/ebin/Elixir.String.Chars.Exqlite.Query.beam create mode 100644 phoenix/_build/dev/lib/exqlite/ebin/exqlite.app create mode 100755 phoenix/_build/dev/lib/exqlite/priv/sqlite3_nif.so create mode 100644 phoenix/_build/dev/lib/finch/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/finch/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/finch/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.Error.beam create mode 100644 phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.HTTP1.Conn.beam create mode 100644 phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.HTTP1.Pool.State.beam create mode 100644 phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.HTTP1.Pool.beam create mode 100644 phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.HTTP1.PoolMetrics.beam create mode 100644 phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.HTTP2.Pool.beam create mode 100644 phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.HTTP2.PoolMetrics.beam create mode 100644 phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.HTTP2.RequestStream.beam create mode 100644 phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.Pool.beam create mode 100644 phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.PoolManager.beam create mode 100644 phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.Request.beam create mode 100644 phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.Response.beam create mode 100644 phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.SSL.beam create mode 100644 phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.Telemetry.beam create mode 100644 phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.beam create mode 100644 phoenix/_build/dev/lib/finch/ebin/finch.app create mode 100644 phoenix/_build/dev/lib/hpax/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/hpax/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/hpax/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/hpax/ebin/Elixir.HPAX.Huffman.beam create mode 100644 phoenix/_build/dev/lib/hpax/ebin/Elixir.HPAX.Table.beam create mode 100644 phoenix/_build/dev/lib/hpax/ebin/Elixir.HPAX.Types.beam create mode 100644 phoenix/_build/dev/lib/hpax/ebin/Elixir.HPAX.beam create mode 100644 phoenix/_build/dev/lib/hpax/ebin/hpax.app create mode 100644 phoenix/_build/dev/lib/jason/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/jason/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/jason/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Enumerable.Jason.OrderedObject.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Codegen.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.DecodeError.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Decoder.Unescape.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Decoder.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encode.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.EncodeError.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Any.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Atom.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.BitString.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Date.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.DateTime.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Decimal.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Float.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Integer.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Jason.Fragment.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Jason.OrderedObject.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.List.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Map.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.NaiveDateTime.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Time.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Formatter.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Fragment.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Helpers.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.OrderedObject.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Sigil.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.beam create mode 100644 phoenix/_build/dev/lib/jason/ebin/jason.app create mode 100644 phoenix/_build/dev/lib/mime/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/mime/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/mime/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/mime/ebin/Elixir.MIME.beam create mode 100644 phoenix/_build/dev/lib/mime/ebin/mime.app create mode 100644 phoenix/_build/dev/lib/mint/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/mint/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/mint/.mix/compile.erlang create mode 100644 phoenix/_build/dev/lib/mint/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Application.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Core.Conn.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Core.Headers.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Core.Transport.SSL.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Core.Transport.TCP.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Core.Transport.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Core.Util.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTP.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTP1.Parse.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTP1.Request.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTP1.Response.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTP1.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTP2.Frame.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTP2.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTPError.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Negotiate.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.TransportError.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.TunnelProxy.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Types.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.UnsafeProxy.beam create mode 100644 phoenix/_build/dev/lib/mint/ebin/mint.app create mode 100644 phoenix/_build/dev/lib/mint/ebin/mint_shims.beam create mode 100644 phoenix/_build/dev/lib/nimble_options/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/nimble_options/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/nimble_options/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/nimble_options/ebin/Elixir.NimbleOptions.Docs.beam create mode 100644 phoenix/_build/dev/lib/nimble_options/ebin/Elixir.NimbleOptions.ValidationError.beam create mode 100644 phoenix/_build/dev/lib/nimble_options/ebin/Elixir.NimbleOptions.beam create mode 100644 phoenix/_build/dev/lib/nimble_options/ebin/nimble_options.app create mode 100644 phoenix/_build/dev/lib/nimble_pool/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/nimble_pool/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/nimble_pool/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/nimble_pool/ebin/Elixir.NimblePool.Application.beam create mode 100644 phoenix/_build/dev/lib/nimble_pool/ebin/Elixir.NimblePool.beam create mode 100644 phoenix/_build/dev/lib/nimble_pool/ebin/nimble_pool.app create mode 100644 phoenix/_build/dev/lib/phoenix/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/phoenix/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/phoenix/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Inspect.Phoenix.Socket.Message.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Phoenix.Context.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Phoenix.Schema.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Phoenix.Scope.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Phoenix.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Compile.Phoenix.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Digest.Clean.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Digest.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.HashingLibrary.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.Injector.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.Migration.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Cert.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Channel.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Context.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Embedded.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Html.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Json.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Live.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Notifier.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Presence.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Release.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Schema.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Secret.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Socket.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Routes.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Server.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.ActionClauseError.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Channel.Server.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Channel.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.ChannelTest.NoopSerializer.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.ChannelTest.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.MixListener.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.Proxy.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.Server.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Config.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.ConnTest.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Controller.Pipeline.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Controller.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Debug.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Digester.Compressor.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Digester.Gzip.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Digester.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Cowboy2Adapter.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.RenderErrors.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Supervisor.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.SyncCodeReloadPlug.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Watcher.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Flash.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Logger.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.MissingParamError.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Naming.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.NotAcceptableError.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Param.Any.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Param.Atom.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Param.BitString.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Param.Float.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Param.Integer.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Param.Map.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Param.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Presence.Tracker.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Presence.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.ConsoleFormatter.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.Helpers.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.MalformedURIError.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.NoRouteError.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.Resource.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.Route.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.Scope.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.Broadcast.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.InvalidMessageError.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.Message.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.PoolDrainer.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.PoolSupervisor.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.Reply.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.Serializer.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.Transport.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.V1.JSONSerializer.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.V2.JSONSerializer.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Token.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Transports.LongPoll.Server.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Transports.LongPoll.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Transports.WebSocket.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.VerifiedRoutes.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/Elixir.Plug.Exception.Phoenix.ActionClauseError.beam create mode 100644 phoenix/_build/dev/lib/phoenix/ebin/phoenix.app create mode 120000 phoenix/_build/dev/lib/phoenix/priv create mode 100644 phoenix/_build/dev/lib/phoenix_ecto/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/phoenix_ecto/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/phoenix_ecto/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.CheckRepoStatus.beam create mode 100644 phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.PendingMigrationError.beam create mode 100644 phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.SQL.Sandbox.beam create mode 100644 phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.SQL.SandboxSession.beam create mode 100644 phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.StorageNotCreatedError.beam create mode 100644 phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.beam create mode 100644 phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Ecto.CastError.beam create mode 100644 phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Ecto.NoResultsError.beam create mode 100644 phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Ecto.Query.CastError.beam create mode 100644 phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Ecto.StaleEntryError.beam create mode 100644 phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Ecto.SubQueryError.beam create mode 100644 phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Phoenix.Ecto.PendingMigrationError.beam create mode 100644 phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Phoenix.Ecto.StorageNotCreatedError.beam create mode 100644 phoenix/_build/dev/lib/phoenix_ecto/ebin/phoenix_ecto.app create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.Adapter.beam create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.Application.beam create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.BroadcastError.beam create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.PG2.beam create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.PG2Worker.beam create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.Supervisor.beam create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.beam create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.Clock.beam create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.DeltaGeneration.beam create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.Replica.beam create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.Shard.beam create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.ShutdownHandler.beam create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.State.beam create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.beam create mode 100644 phoenix/_build/dev/lib/phoenix_pubsub/ebin/phoenix_pubsub.app create mode 100644 phoenix/_build/dev/lib/phoenix_template/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/phoenix_template/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/phoenix_template/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/phoenix_template/ebin/Elixir.Phoenix.Template.EExEngine.beam create mode 100644 phoenix/_build/dev/lib/phoenix_template/ebin/Elixir.Phoenix.Template.Engine.beam create mode 100644 phoenix/_build/dev/lib/phoenix_template/ebin/Elixir.Phoenix.Template.ExsEngine.beam create mode 100644 phoenix/_build/dev/lib/phoenix_template/ebin/Elixir.Phoenix.Template.beam create mode 100644 phoenix/_build/dev/lib/phoenix_template/ebin/phoenix_template.app create mode 100644 phoenix/_build/dev/lib/plug/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/plug/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/plug/.mix/compile.erlang create mode 100644 phoenix/_build/dev/lib/plug/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Inspect.Plug.Conn.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Adapters.Cowboy.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Adapters.Test.Conn.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Application.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.BadRequestError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.BasicAuth.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Builder.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.CSRFProtection.InvalidCSRFTokenError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.CSRFProtection.InvalidCrossOriginRequestError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.CSRFProtection.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.Adapter.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.AlreadySentError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.CookieOverflowError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.Cookies.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.InvalidHeaderError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.InvalidQueryError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.NotSentError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.Query.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.Status.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.Unfetched.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.Utils.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.WrapperError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Debugger.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.ErrorHandler.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Exception.Any.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Exception.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.HTML.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Head.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Logger.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.MIME.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.MethodOverride.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Parsers.BadEncodingError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Parsers.JSON.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Parsers.MULTIPART.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Parsers.ParseError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Parsers.RequestTooLargeError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Parsers.URLENCODED.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Parsers.UnsupportedMediaTypeError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Parsers.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.RequestId.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.RewriteOn.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Router.InvalidSpecError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Router.MalformedURIError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Router.Utils.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Router.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.SSL.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Session.COOKIE.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Session.ETS.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Session.Store.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Session.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Static.InvalidPathError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Static.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Telemetry.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Test.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.TimeoutError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Upload.Supervisor.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Upload.Terminator.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Upload.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.UploadError.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.beam create mode 100644 phoenix/_build/dev/lib/plug/ebin/plug.app create mode 100644 phoenix/_build/dev/lib/plug/ebin/plug_multipart.beam create mode 100644 phoenix/_build/dev/lib/plug_crypto/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/plug_crypto/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/plug_crypto/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/plug_crypto/ebin/Elixir.Plug.Crypto.Application.beam create mode 100644 phoenix/_build/dev/lib/plug_crypto/ebin/Elixir.Plug.Crypto.KeyGenerator.beam create mode 100644 phoenix/_build/dev/lib/plug_crypto/ebin/Elixir.Plug.Crypto.MessageEncryptor.beam create mode 100644 phoenix/_build/dev/lib/plug_crypto/ebin/Elixir.Plug.Crypto.MessageVerifier.beam create mode 100644 phoenix/_build/dev/lib/plug_crypto/ebin/Elixir.Plug.Crypto.beam create mode 100644 phoenix/_build/dev/lib/plug_crypto/ebin/plug_crypto.app create mode 100644 phoenix/_build/dev/lib/req/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/req/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/req/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Collectable.Req.Utils.CollectWithHash.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Enumerable.Req.Response.Async.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Inspect.Req.Request.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Inspect.Req.Response.Async.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.Application.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.ArchiveError.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.ChecksumMismatchError.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.DecompressError.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.Fields.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.Finch.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.HTTPError.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.Request.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.Response.Async.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.Response.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.Steps.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.Test.Adapter.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.Test.Ownership.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.Test.OwnershipError.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.Test.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.TooManyRedirectsError.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.TransportError.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.Utils.CollectWithHash.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.Utils.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/Elixir.Req.beam create mode 100644 phoenix/_build/dev/lib/req/ebin/req.app create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/.mix/compile.app_cache create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/.mix/compile.lock create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/.mix/compile.protocols create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Bandit.HTTP2.Frame.Serializable.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Bandit.HTTPTransport.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Bandit.WebSocket.Frame.Serializable.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Bandit.WebSocket.Socket.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Collectable.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.DBConnection.Query.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Ecto.Queryable.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Enumerable.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.IEx.Info.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Inspect.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.JSON.Encoder.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Jason.Encoder.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.List.Chars.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Phoenix.Param.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Plug.Exception.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.String.Chars.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.AI.Gemini.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Application.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Auth.SessionStore.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Auth.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.AppSetting.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Derived.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.EventData.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Player.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Score.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.ScoreAttachment.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Settings.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Stages.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.StateService.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Events.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Repo.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.ApiController.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Endpoint.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.ErrorJSON.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.EventsController.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.FrontendController.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Plugs.AdminOnly.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Plugs.CORS.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Router.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Telemetry.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.beam create mode 100644 phoenix/_build/dev/lib/shooting_event_phx/ebin/shooting_event_phx.app create mode 120000 phoenix/_build/dev/lib/shooting_event_phx/priv create mode 100644 phoenix/_build/dev/lib/telemetry/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/telemetry/ebin/telemetry.app create mode 100644 phoenix/_build/dev/lib/telemetry/ebin/telemetry.beam create mode 100644 phoenix/_build/dev/lib/telemetry/ebin/telemetry_app.beam create mode 100644 phoenix/_build/dev/lib/telemetry/ebin/telemetry_ets.beam create mode 100644 phoenix/_build/dev/lib/telemetry/ebin/telemetry_handler_table.beam create mode 100644 phoenix/_build/dev/lib/telemetry/ebin/telemetry_pt.beam create mode 100644 phoenix/_build/dev/lib/telemetry/ebin/telemetry_sup.beam create mode 100644 phoenix/_build/dev/lib/telemetry/ebin/telemetry_test.beam create mode 100644 phoenix/_build/dev/lib/telemetry/mix.rebar.config create mode 120000 phoenix/_build/dev/lib/telemetry/src create mode 100644 phoenix/_build/dev/lib/telemetry_metrics/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/telemetry_metrics/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/telemetry_metrics/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.ConsoleReporter.beam create mode 100644 phoenix/_build/dev/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Counter.beam create mode 100644 phoenix/_build/dev/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Distribution.beam create mode 100644 phoenix/_build/dev/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.LastValue.beam create mode 100644 phoenix/_build/dev/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Sum.beam create mode 100644 phoenix/_build/dev/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Summary.beam create mode 100644 phoenix/_build/dev/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.beam create mode 100644 phoenix/_build/dev/lib/telemetry_metrics/ebin/telemetry_metrics.app create mode 100644 phoenix/_build/dev/lib/telemetry_poller/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/telemetry_poller/ebin/telemetry_poller.app create mode 100644 phoenix/_build/dev/lib/telemetry_poller/ebin/telemetry_poller.beam create mode 100644 phoenix/_build/dev/lib/telemetry_poller/ebin/telemetry_poller_app.beam create mode 100644 phoenix/_build/dev/lib/telemetry_poller/ebin/telemetry_poller_builtin.beam create mode 100644 phoenix/_build/dev/lib/telemetry_poller/ebin/telemetry_poller_sup.beam create mode 100644 phoenix/_build/dev/lib/telemetry_poller/mix.rebar.config create mode 120000 phoenix/_build/dev/lib/telemetry_poller/src create mode 100644 phoenix/_build/dev/lib/thousand_island/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/thousand_island/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/thousand_island/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Acceptor.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.AcceptorPoolSupervisor.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.AcceptorSupervisor.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Connection.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Handler.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.HandlerConfig.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Listener.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Logger.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.ProcessLabel.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Server.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.ServerConfig.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.ShutdownListener.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Socket.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Telemetry.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Transport.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Transports.SSL.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Transports.TCP.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.beam create mode 100644 phoenix/_build/dev/lib/thousand_island/ebin/thousand_island.app create mode 100644 phoenix/_build/dev/lib/websock/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/websock/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/websock/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/websock/ebin/Elixir.WebSock.beam create mode 100644 phoenix/_build/dev/lib/websock/ebin/websock.app create mode 100644 phoenix/_build/dev/lib/websock_adapter/.mix/compile.elixir create mode 100644 phoenix/_build/dev/lib/websock_adapter/.mix/compile.elixir_scm create mode 100644 phoenix/_build/dev/lib/websock_adapter/.mix/compile.fetch create mode 100644 phoenix/_build/dev/lib/websock_adapter/ebin/Elixir.WebSockAdapter.UpgradeError.beam create mode 100644 phoenix/_build/dev/lib/websock_adapter/ebin/Elixir.WebSockAdapter.UpgradeValidation.beam create mode 100644 phoenix/_build/dev/lib/websock_adapter/ebin/Elixir.WebSockAdapter.beam create mode 100644 phoenix/_build/dev/lib/websock_adapter/ebin/websock_adapter.app create mode 100644 phoenix/_build/prod/lib/bandit/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/bandit/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/bandit/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Adapter.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Application.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Clock.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Compression.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.DelegatingHandler.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Extractor.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP1.Handler.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP1.Socket.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Connection.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Errors.ConnectionError.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Errors.StreamError.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Errors.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.FlowControl.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Continuation.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Data.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Flags.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Goaway.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Headers.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Ping.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Priority.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.PushPromise.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.RstStream.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Continuation.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Data.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Goaway.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Headers.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Ping.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Priority.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.RstStream.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Settings.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.WindowUpdate.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Settings.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Unknown.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.WindowUpdate.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Handler.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Settings.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Stream.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.StreamCollection.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.StreamProcess.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTPError.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP1.Socket.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP2.Stream.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Headers.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.InitialHandler.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Logger.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.PhoenixAdapter.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Pipeline.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.PrimitiveOps.WebSocket.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.SocketHelpers.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Telemetry.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Trace.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.TransportError.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Connection.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Binary.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.ConnectionClose.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Continuation.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Ping.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Pong.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Binary.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.ConnectionClose.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Continuation.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Ping.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Pong.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Text.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Text.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Handler.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Handshake.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.PerMessageDeflate.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Socket.ThousandIsland.Socket.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Socket.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.UpgradeValidation.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.beam create mode 100644 phoenix/_build/prod/lib/bandit/ebin/bandit.app create mode 100644 phoenix/_build/prod/lib/cc_precompiler/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/cc_precompiler/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/cc_precompiler/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/cc_precompiler/ebin/Elixir.CCPrecompiler.CompilationScript.beam create mode 100644 phoenix/_build/prod/lib/cc_precompiler/ebin/Elixir.CCPrecompiler.UniversalBinary.beam create mode 100644 phoenix/_build/prod/lib/cc_precompiler/ebin/Elixir.CCPrecompiler.beam create mode 100644 phoenix/_build/prod/lib/cc_precompiler/ebin/cc_precompiler.app create mode 100644 phoenix/_build/prod/lib/db_connection/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/db_connection/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/db_connection/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.App.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Backoff.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Connection.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.ConnectionError.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.ConnectionPool.Pool.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.ConnectionPool.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.EncodeError.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Holder.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.LogEntry.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Ownership.Manager.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Ownership.Proxy.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Ownership.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.OwnershipError.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Pool.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.PrepareStream.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Query.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Stream.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Task.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.TelemetryListener.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.TransactionError.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Util.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Watcher.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.Enumerable.DBConnection.PrepareStream.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/Elixir.Enumerable.DBConnection.Stream.beam create mode 100644 phoenix/_build/prod/lib/db_connection/ebin/db_connection.app create mode 100644 phoenix/_build/prod/lib/decimal/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/decimal/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/decimal/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/decimal/ebin/Elixir.Decimal.Context.beam create mode 100644 phoenix/_build/prod/lib/decimal/ebin/Elixir.Decimal.Error.beam create mode 100644 phoenix/_build/prod/lib/decimal/ebin/Elixir.Decimal.Macros.beam create mode 100644 phoenix/_build/prod/lib/decimal/ebin/Elixir.Decimal.beam create mode 100644 phoenix/_build/prod/lib/decimal/ebin/Elixir.Inspect.Decimal.beam create mode 100644 phoenix/_build/prod/lib/decimal/ebin/Elixir.JSON.Encoder.Decimal.beam create mode 100644 phoenix/_build/prod/lib/decimal/ebin/Elixir.String.Chars.Decimal.beam create mode 100644 phoenix/_build/prod/lib/decimal/ebin/decimal.app create mode 100644 phoenix/_build/prod/lib/dns_cluster/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/dns_cluster/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/dns_cluster/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/dns_cluster/ebin/Elixir.DNSCluster.Resolver.beam create mode 100644 phoenix/_build/prod/lib/dns_cluster/ebin/Elixir.DNSCluster.beam create mode 100644 phoenix/_build/prod/lib/dns_cluster/ebin/dns_cluster.app create mode 100644 phoenix/_build/prod/lib/ecto/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/ecto/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/ecto/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Adapter.Queryable.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Adapter.Schema.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Adapter.Storage.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Adapter.Transaction.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Adapter.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Application.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Association.BelongsTo.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Association.Has.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Association.HasThrough.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Association.ManyToMany.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Association.NotLoaded.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Association.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.CastError.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.ChangeError.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Changeset.Relation.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Changeset.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.ConstraintError.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Embedded.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Enum.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.InvalidChangesetError.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.InvalidURLError.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.MigrationError.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Multi.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.MultiplePrimaryKeyError.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.MultipleResultsError.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.NoPrimaryKeyFieldError.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.NoPrimaryKeyValueError.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.NoResultsError.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.ParameterizedType.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.API.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.BooleanExpr.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.CTE.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Combination.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Distinct.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Dynamic.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Filter.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.From.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.GroupBy.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Join.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.LimitOffset.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Lock.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.OrderBy.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Preload.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Select.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Update.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Windows.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.ByExpr.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.CastError.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.CompileError.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.DynamicExpr.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.FromExpr.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.JoinExpr.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.LimitExpr.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Planner.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.QueryExpr.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.SelectExpr.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Tagged.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Values.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.WindowAPI.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.WithExpr.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.QueryError.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Queryable.Atom.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Queryable.BitString.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Queryable.Ecto.Query.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Queryable.Ecto.SubQuery.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Queryable.Tuple.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Queryable.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Repo.Assoc.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Repo.Preloader.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Repo.Queryable.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Repo.Registry.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Repo.Schema.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Repo.Supervisor.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Repo.Transaction.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Repo.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Schema.Loader.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Schema.Metadata.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Schema.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.StaleEntryError.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.SubQuery.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.SubQueryError.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Type.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.UUID.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Inspect.Ecto.Association.NotLoaded.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Inspect.Ecto.Changeset.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Inspect.Ecto.Query.DynamicExpr.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Inspect.Ecto.Query.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Inspect.Ecto.Schema.Metadata.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.JSON.Encoder.Ecto.Association.NotLoaded.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.JSON.Encoder.Ecto.Schema.Metadata.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Jason.Encoder.Ecto.Association.NotLoaded.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Jason.Encoder.Ecto.Schema.Metadata.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Mix.Ecto.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.Create.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.Drop.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.Gen.Repo.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.beam create mode 100644 phoenix/_build/prod/lib/ecto/ebin/ecto.app create mode 100644 phoenix/_build/prod/lib/ecto_sql/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/ecto_sql/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/ecto_sql/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Collectable.Ecto.Adapters.SQL.Stream.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapter.Migration.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapter.Structure.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.MyXQL.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.Postgres.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Application.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Connection.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Sandbox.Connection.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Sandbox.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Stream.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.Tds.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Command.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Constraint.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Index.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Reference.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Runner.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.SchemaMigration.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Table.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migrator.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Enumerable.Ecto.Adapters.SQL.Stream.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.EctoSQL.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Dump.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Gen.Migration.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Load.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Migrate.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Migrations.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Rollback.beam create mode 100644 phoenix/_build/prod/lib/ecto_sql/ebin/ecto_sql.app create mode 100644 phoenix/_build/prod/lib/ecto_sqlite3/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/ecto_sqlite3/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/ecto_sqlite3/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.Codec.beam create mode 100644 phoenix/_build/prod/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.Connection.beam create mode 100644 phoenix/_build/prod/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.DataType.beam create mode 100644 phoenix/_build/prod/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.TypeExtension.beam create mode 100644 phoenix/_build/prod/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.beam create mode 100644 phoenix/_build/prod/lib/ecto_sqlite3/ebin/ecto_sqlite3.app create mode 100644 phoenix/_build/prod/lib/elixir_make/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/elixir_make/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/elixir_make/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/elixir_make/ebin/Elixir.ElixirMake.Artefact.beam create mode 100644 phoenix/_build/prod/lib/elixir_make/ebin/Elixir.ElixirMake.Compiler.beam create mode 100644 phoenix/_build/prod/lib/elixir_make/ebin/Elixir.ElixirMake.Downloader.Httpc.beam create mode 100644 phoenix/_build/prod/lib/elixir_make/ebin/Elixir.ElixirMake.Downloader.beam create mode 100644 phoenix/_build/prod/lib/elixir_make/ebin/Elixir.ElixirMake.Precompiler.beam create mode 100644 phoenix/_build/prod/lib/elixir_make/ebin/Elixir.Mix.Tasks.Compile.ElixirMake.beam create mode 100644 phoenix/_build/prod/lib/elixir_make/ebin/Elixir.Mix.Tasks.ElixirMake.Checksum.beam create mode 100644 phoenix/_build/prod/lib/elixir_make/ebin/Elixir.Mix.Tasks.ElixirMake.Precompile.beam create mode 100644 phoenix/_build/prod/lib/elixir_make/ebin/elixir_make.app create mode 100644 phoenix/_build/prod/lib/exqlite/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/exqlite/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/exqlite/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/exqlite/ebin/Elixir.DBConnection.Query.Exqlite.Query.beam create mode 100644 phoenix/_build/prod/lib/exqlite/ebin/Elixir.Enumerable.Exqlite.Stream.beam create mode 100644 phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Basic.beam create mode 100644 phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Connection.beam create mode 100644 phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Error.beam create mode 100644 phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Flags.beam create mode 100644 phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Pragma.beam create mode 100644 phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Query.beam create mode 100644 phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Result.beam create mode 100644 phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Sqlite3.beam create mode 100644 phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Sqlite3NIF.beam create mode 100644 phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Stream.beam create mode 100644 phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.TypeExtension.beam create mode 100644 phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.beam create mode 100644 phoenix/_build/prod/lib/exqlite/ebin/Elixir.String.Chars.Exqlite.Query.beam create mode 100644 phoenix/_build/prod/lib/exqlite/ebin/exqlite.app create mode 100755 phoenix/_build/prod/lib/exqlite/priv/sqlite3_nif.so create mode 100644 phoenix/_build/prod/lib/finch/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/finch/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/finch/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.Error.beam create mode 100644 phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP1.Conn.beam create mode 100644 phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP1.Pool.State.beam create mode 100644 phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP1.Pool.beam create mode 100644 phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP1.PoolMetrics.beam create mode 100644 phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP2.Pool.beam create mode 100644 phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP2.PoolMetrics.beam create mode 100644 phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP2.RequestStream.beam create mode 100644 phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.Pool.beam create mode 100644 phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.PoolManager.beam create mode 100644 phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.Request.beam create mode 100644 phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.Response.beam create mode 100644 phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.SSL.beam create mode 100644 phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.Telemetry.beam create mode 100644 phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.beam create mode 100644 phoenix/_build/prod/lib/finch/ebin/finch.app create mode 100644 phoenix/_build/prod/lib/hpax/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/hpax/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/hpax/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/hpax/ebin/Elixir.HPAX.Huffman.beam create mode 100644 phoenix/_build/prod/lib/hpax/ebin/Elixir.HPAX.Table.beam create mode 100644 phoenix/_build/prod/lib/hpax/ebin/Elixir.HPAX.Types.beam create mode 100644 phoenix/_build/prod/lib/hpax/ebin/Elixir.HPAX.beam create mode 100644 phoenix/_build/prod/lib/hpax/ebin/hpax.app create mode 100644 phoenix/_build/prod/lib/jason/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/jason/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/jason/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Enumerable.Jason.OrderedObject.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Codegen.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.DecodeError.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Decoder.Unescape.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Decoder.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encode.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.EncodeError.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Any.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Atom.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.BitString.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Date.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.DateTime.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Decimal.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Float.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Integer.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Jason.Fragment.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Jason.OrderedObject.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.List.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Map.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.NaiveDateTime.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Time.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Formatter.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Fragment.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Helpers.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.OrderedObject.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Sigil.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.beam create mode 100644 phoenix/_build/prod/lib/jason/ebin/jason.app create mode 100644 phoenix/_build/prod/lib/mime/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/mime/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/mime/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/mime/ebin/Elixir.MIME.beam create mode 100644 phoenix/_build/prod/lib/mime/ebin/mime.app create mode 100644 phoenix/_build/prod/lib/mint/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/mint/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/mint/.mix/compile.erlang create mode 100644 phoenix/_build/prod/lib/mint/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Application.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Core.Conn.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Core.Headers.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Core.Transport.SSL.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Core.Transport.TCP.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Core.Transport.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Core.Util.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTP.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTP1.Parse.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTP1.Request.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTP1.Response.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTP1.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTP2.Frame.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTP2.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTPError.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Negotiate.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.TransportError.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.TunnelProxy.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Types.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.UnsafeProxy.beam create mode 100644 phoenix/_build/prod/lib/mint/ebin/mint.app create mode 100644 phoenix/_build/prod/lib/mint/ebin/mint_shims.beam create mode 100644 phoenix/_build/prod/lib/nimble_options/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/nimble_options/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/nimble_options/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/nimble_options/ebin/Elixir.NimbleOptions.Docs.beam create mode 100644 phoenix/_build/prod/lib/nimble_options/ebin/Elixir.NimbleOptions.ValidationError.beam create mode 100644 phoenix/_build/prod/lib/nimble_options/ebin/Elixir.NimbleOptions.beam create mode 100644 phoenix/_build/prod/lib/nimble_options/ebin/nimble_options.app create mode 100644 phoenix/_build/prod/lib/nimble_pool/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/nimble_pool/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/nimble_pool/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/nimble_pool/ebin/Elixir.NimblePool.Application.beam create mode 100644 phoenix/_build/prod/lib/nimble_pool/ebin/Elixir.NimblePool.beam create mode 100644 phoenix/_build/prod/lib/nimble_pool/ebin/nimble_pool.app create mode 100644 phoenix/_build/prod/lib/phoenix/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/phoenix/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/phoenix/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Inspect.Phoenix.Socket.Message.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Phoenix.Context.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Phoenix.Schema.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Phoenix.Scope.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Phoenix.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Compile.Phoenix.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Digest.Clean.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Digest.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.HashingLibrary.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.Injector.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.Migration.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Cert.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Channel.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Context.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Embedded.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Html.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Json.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Live.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Notifier.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Presence.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Release.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Schema.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Secret.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Socket.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Routes.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Server.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.ActionClauseError.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Channel.Server.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Channel.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.ChannelTest.NoopSerializer.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.ChannelTest.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.MixListener.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.Proxy.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.Server.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Config.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.ConnTest.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Controller.Pipeline.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Controller.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Debug.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Digester.Compressor.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Digester.Gzip.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Digester.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Cowboy2Adapter.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.RenderErrors.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Supervisor.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.SyncCodeReloadPlug.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Watcher.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Flash.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Logger.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.MissingParamError.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Naming.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.NotAcceptableError.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Param.Any.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Param.Atom.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Param.BitString.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Param.Float.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Param.Integer.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Param.Map.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Param.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Presence.Tracker.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Presence.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.ConsoleFormatter.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.Helpers.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.MalformedURIError.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.NoRouteError.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.Resource.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.Route.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.Scope.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.Broadcast.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.InvalidMessageError.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.Message.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.PoolDrainer.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.PoolSupervisor.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.Reply.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.Serializer.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.Transport.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.V1.JSONSerializer.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.V2.JSONSerializer.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Token.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Transports.LongPoll.Server.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Transports.LongPoll.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Transports.WebSocket.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.VerifiedRoutes.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/Elixir.Plug.Exception.Phoenix.ActionClauseError.beam create mode 100644 phoenix/_build/prod/lib/phoenix/ebin/phoenix.app create mode 120000 phoenix/_build/prod/lib/phoenix/priv create mode 100644 phoenix/_build/prod/lib/phoenix_ecto/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/phoenix_ecto/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/phoenix_ecto/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.CheckRepoStatus.beam create mode 100644 phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.PendingMigrationError.beam create mode 100644 phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.SQL.Sandbox.beam create mode 100644 phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.SQL.SandboxSession.beam create mode 100644 phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.StorageNotCreatedError.beam create mode 100644 phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.beam create mode 100644 phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Ecto.CastError.beam create mode 100644 phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Ecto.NoResultsError.beam create mode 100644 phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Ecto.Query.CastError.beam create mode 100644 phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Ecto.StaleEntryError.beam create mode 100644 phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Ecto.SubQueryError.beam create mode 100644 phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Phoenix.Ecto.PendingMigrationError.beam create mode 100644 phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Phoenix.Ecto.StorageNotCreatedError.beam create mode 100644 phoenix/_build/prod/lib/phoenix_ecto/ebin/phoenix_ecto.app create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.Adapter.beam create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.Application.beam create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.BroadcastError.beam create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.PG2.beam create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.PG2Worker.beam create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.Supervisor.beam create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.beam create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.Clock.beam create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.DeltaGeneration.beam create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.Replica.beam create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.Shard.beam create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.ShutdownHandler.beam create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.State.beam create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.beam create mode 100644 phoenix/_build/prod/lib/phoenix_pubsub/ebin/phoenix_pubsub.app create mode 100644 phoenix/_build/prod/lib/phoenix_template/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/phoenix_template/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/phoenix_template/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/phoenix_template/ebin/Elixir.Phoenix.Template.EExEngine.beam create mode 100644 phoenix/_build/prod/lib/phoenix_template/ebin/Elixir.Phoenix.Template.Engine.beam create mode 100644 phoenix/_build/prod/lib/phoenix_template/ebin/Elixir.Phoenix.Template.ExsEngine.beam create mode 100644 phoenix/_build/prod/lib/phoenix_template/ebin/Elixir.Phoenix.Template.beam create mode 100644 phoenix/_build/prod/lib/phoenix_template/ebin/phoenix_template.app create mode 100644 phoenix/_build/prod/lib/plug/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/plug/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/plug/.mix/compile.erlang create mode 100644 phoenix/_build/prod/lib/plug/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Inspect.Plug.Conn.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Adapters.Cowboy.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Adapters.Test.Conn.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Application.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.BadRequestError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.BasicAuth.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Builder.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.CSRFProtection.InvalidCSRFTokenError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.CSRFProtection.InvalidCrossOriginRequestError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.CSRFProtection.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.Adapter.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.AlreadySentError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.CookieOverflowError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.Cookies.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.InvalidHeaderError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.InvalidQueryError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.NotSentError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.Query.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.Status.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.Unfetched.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.Utils.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.WrapperError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Debugger.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.ErrorHandler.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Exception.Any.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Exception.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.HTML.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Head.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Logger.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.MIME.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.MethodOverride.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.BadEncodingError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.JSON.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.MULTIPART.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.ParseError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.RequestTooLargeError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.URLENCODED.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.UnsupportedMediaTypeError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.RequestId.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.RewriteOn.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Router.InvalidSpecError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Router.MalformedURIError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Router.Utils.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Router.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.SSL.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Session.COOKIE.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Session.ETS.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Session.Store.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Session.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Static.InvalidPathError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Static.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Telemetry.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Test.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.TimeoutError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Upload.Supervisor.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Upload.Terminator.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Upload.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.UploadError.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.beam create mode 100644 phoenix/_build/prod/lib/plug/ebin/plug.app create mode 100644 phoenix/_build/prod/lib/plug/ebin/plug_multipart.beam create mode 100644 phoenix/_build/prod/lib/plug_crypto/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/plug_crypto/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/plug_crypto/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/plug_crypto/ebin/Elixir.Plug.Crypto.Application.beam create mode 100644 phoenix/_build/prod/lib/plug_crypto/ebin/Elixir.Plug.Crypto.KeyGenerator.beam create mode 100644 phoenix/_build/prod/lib/plug_crypto/ebin/Elixir.Plug.Crypto.MessageEncryptor.beam create mode 100644 phoenix/_build/prod/lib/plug_crypto/ebin/Elixir.Plug.Crypto.MessageVerifier.beam create mode 100644 phoenix/_build/prod/lib/plug_crypto/ebin/Elixir.Plug.Crypto.beam create mode 100644 phoenix/_build/prod/lib/plug_crypto/ebin/plug_crypto.app create mode 100644 phoenix/_build/prod/lib/req/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/req/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/req/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Collectable.Req.Utils.CollectWithHash.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Enumerable.Req.Response.Async.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Inspect.Req.Request.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Inspect.Req.Response.Async.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.Application.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.ArchiveError.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.ChecksumMismatchError.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.DecompressError.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.Fields.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.Finch.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.HTTPError.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.Request.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.Response.Async.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.Response.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.Steps.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.Test.Adapter.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.Test.Ownership.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.Test.OwnershipError.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.Test.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.TooManyRedirectsError.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.TransportError.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.Utils.CollectWithHash.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.Utils.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/Elixir.Req.beam create mode 100644 phoenix/_build/prod/lib/req/ebin/req.app create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/.mix/compile.app_cache create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/.mix/compile.lock create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/.mix/compile.protocols create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Bandit.HTTP2.Frame.Serializable.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Bandit.HTTPTransport.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Bandit.WebSocket.Frame.Serializable.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Bandit.WebSocket.Socket.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Collectable.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.DBConnection.Query.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Ecto.Queryable.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Enumerable.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.IEx.Info.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Inspect.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.JSON.Encoder.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Jason.Encoder.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.List.Chars.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Phoenix.Param.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Plug.Exception.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.String.Chars.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.AI.Gemini.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Application.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Auth.SessionStore.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Auth.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.AppSetting.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Derived.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.EventData.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Player.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Score.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.ScoreAttachment.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Settings.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Stages.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.StateService.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Events.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Repo.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.ApiController.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Endpoint.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.ErrorJSON.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.EventsController.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.FrontendController.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Plugs.AdminOnly.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Plugs.CORS.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Router.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Telemetry.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.beam create mode 100644 phoenix/_build/prod/lib/shooting_event_phx/ebin/shooting_event_phx.app create mode 120000 phoenix/_build/prod/lib/shooting_event_phx/priv create mode 100644 phoenix/_build/prod/lib/telemetry/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/telemetry/ebin/telemetry.app create mode 100644 phoenix/_build/prod/lib/telemetry/ebin/telemetry.beam create mode 100644 phoenix/_build/prod/lib/telemetry/ebin/telemetry_app.beam create mode 100644 phoenix/_build/prod/lib/telemetry/ebin/telemetry_ets.beam create mode 100644 phoenix/_build/prod/lib/telemetry/ebin/telemetry_handler_table.beam create mode 100644 phoenix/_build/prod/lib/telemetry/ebin/telemetry_pt.beam create mode 100644 phoenix/_build/prod/lib/telemetry/ebin/telemetry_sup.beam create mode 100644 phoenix/_build/prod/lib/telemetry/ebin/telemetry_test.beam create mode 100644 phoenix/_build/prod/lib/telemetry/mix.rebar.config create mode 120000 phoenix/_build/prod/lib/telemetry/src create mode 100644 phoenix/_build/prod/lib/telemetry_metrics/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/telemetry_metrics/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/telemetry_metrics/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.ConsoleReporter.beam create mode 100644 phoenix/_build/prod/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Counter.beam create mode 100644 phoenix/_build/prod/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Distribution.beam create mode 100644 phoenix/_build/prod/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.LastValue.beam create mode 100644 phoenix/_build/prod/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Sum.beam create mode 100644 phoenix/_build/prod/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Summary.beam create mode 100644 phoenix/_build/prod/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.beam create mode 100644 phoenix/_build/prod/lib/telemetry_metrics/ebin/telemetry_metrics.app create mode 100644 phoenix/_build/prod/lib/telemetry_poller/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/telemetry_poller/ebin/telemetry_poller.app create mode 100644 phoenix/_build/prod/lib/telemetry_poller/ebin/telemetry_poller.beam create mode 100644 phoenix/_build/prod/lib/telemetry_poller/ebin/telemetry_poller_app.beam create mode 100644 phoenix/_build/prod/lib/telemetry_poller/ebin/telemetry_poller_builtin.beam create mode 100644 phoenix/_build/prod/lib/telemetry_poller/ebin/telemetry_poller_sup.beam create mode 100644 phoenix/_build/prod/lib/telemetry_poller/mix.rebar.config create mode 120000 phoenix/_build/prod/lib/telemetry_poller/src create mode 100644 phoenix/_build/prod/lib/thousand_island/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/thousand_island/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/thousand_island/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Acceptor.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.AcceptorPoolSupervisor.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.AcceptorSupervisor.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Connection.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Handler.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.HandlerConfig.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Listener.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Logger.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.ProcessLabel.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Server.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.ServerConfig.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.ShutdownListener.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Socket.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Telemetry.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Transport.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Transports.SSL.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Transports.TCP.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.beam create mode 100644 phoenix/_build/prod/lib/thousand_island/ebin/thousand_island.app create mode 100644 phoenix/_build/prod/lib/websock/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/websock/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/websock/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/websock/ebin/Elixir.WebSock.beam create mode 100644 phoenix/_build/prod/lib/websock/ebin/websock.app create mode 100644 phoenix/_build/prod/lib/websock_adapter/.mix/compile.elixir create mode 100644 phoenix/_build/prod/lib/websock_adapter/.mix/compile.elixir_scm create mode 100644 phoenix/_build/prod/lib/websock_adapter/.mix/compile.fetch create mode 100644 phoenix/_build/prod/lib/websock_adapter/ebin/Elixir.WebSockAdapter.UpgradeError.beam create mode 100644 phoenix/_build/prod/lib/websock_adapter/ebin/Elixir.WebSockAdapter.UpgradeValidation.beam create mode 100644 phoenix/_build/prod/lib/websock_adapter/ebin/Elixir.WebSockAdapter.beam create mode 100644 phoenix/_build/prod/lib/websock_adapter/ebin/websock_adapter.app create mode 100644 phoenix/_build/test/lib/bandit/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/bandit/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/bandit/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Adapter.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Application.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Clock.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Compression.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.DelegatingHandler.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Extractor.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP1.Handler.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP1.Socket.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Connection.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Errors.ConnectionError.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Errors.StreamError.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Errors.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.FlowControl.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Continuation.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Data.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Flags.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Goaway.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Headers.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Ping.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Priority.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.PushPromise.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.RstStream.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Continuation.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Data.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Goaway.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Headers.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Ping.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Priority.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.RstStream.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Settings.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.WindowUpdate.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Settings.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Unknown.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.WindowUpdate.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Handler.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Settings.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Stream.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.StreamCollection.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.StreamProcess.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTPError.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP1.Socket.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP2.Stream.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Headers.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.InitialHandler.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Logger.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.PhoenixAdapter.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Pipeline.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.PrimitiveOps.WebSocket.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.SocketHelpers.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Telemetry.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Trace.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.TransportError.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Connection.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Binary.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.ConnectionClose.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Continuation.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Ping.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Pong.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Binary.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.ConnectionClose.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Continuation.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Ping.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Pong.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Text.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Text.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Handler.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Handshake.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.PerMessageDeflate.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Socket.ThousandIsland.Socket.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Socket.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.UpgradeValidation.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.beam create mode 100644 phoenix/_build/test/lib/bandit/ebin/bandit.app create mode 100644 phoenix/_build/test/lib/cc_precompiler/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/cc_precompiler/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/cc_precompiler/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/cc_precompiler/ebin/Elixir.CCPrecompiler.CompilationScript.beam create mode 100644 phoenix/_build/test/lib/cc_precompiler/ebin/Elixir.CCPrecompiler.UniversalBinary.beam create mode 100644 phoenix/_build/test/lib/cc_precompiler/ebin/Elixir.CCPrecompiler.beam create mode 100644 phoenix/_build/test/lib/cc_precompiler/ebin/cc_precompiler.app create mode 100644 phoenix/_build/test/lib/db_connection/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/db_connection/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/db_connection/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.App.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Backoff.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Connection.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.ConnectionError.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.ConnectionPool.Pool.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.ConnectionPool.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.EncodeError.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Holder.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.LogEntry.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Ownership.Manager.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Ownership.Proxy.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Ownership.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.OwnershipError.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Pool.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.PrepareStream.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Query.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Stream.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Task.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.TelemetryListener.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.TransactionError.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Util.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Watcher.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.Enumerable.DBConnection.PrepareStream.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/Elixir.Enumerable.DBConnection.Stream.beam create mode 100644 phoenix/_build/test/lib/db_connection/ebin/db_connection.app create mode 100644 phoenix/_build/test/lib/decimal/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/decimal/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/decimal/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/decimal/ebin/Elixir.Decimal.Context.beam create mode 100644 phoenix/_build/test/lib/decimal/ebin/Elixir.Decimal.Error.beam create mode 100644 phoenix/_build/test/lib/decimal/ebin/Elixir.Decimal.Macros.beam create mode 100644 phoenix/_build/test/lib/decimal/ebin/Elixir.Decimal.beam create mode 100644 phoenix/_build/test/lib/decimal/ebin/Elixir.Inspect.Decimal.beam create mode 100644 phoenix/_build/test/lib/decimal/ebin/Elixir.JSON.Encoder.Decimal.beam create mode 100644 phoenix/_build/test/lib/decimal/ebin/Elixir.String.Chars.Decimal.beam create mode 100644 phoenix/_build/test/lib/decimal/ebin/decimal.app create mode 100644 phoenix/_build/test/lib/dns_cluster/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/dns_cluster/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/dns_cluster/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/dns_cluster/ebin/Elixir.DNSCluster.Resolver.beam create mode 100644 phoenix/_build/test/lib/dns_cluster/ebin/Elixir.DNSCluster.beam create mode 100644 phoenix/_build/test/lib/dns_cluster/ebin/dns_cluster.app create mode 100644 phoenix/_build/test/lib/ecto/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/ecto/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/ecto/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Adapter.Queryable.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Adapter.Schema.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Adapter.Storage.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Adapter.Transaction.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Adapter.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Application.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Association.BelongsTo.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Association.Has.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Association.HasThrough.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Association.ManyToMany.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Association.NotLoaded.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Association.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.CastError.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.ChangeError.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Changeset.Relation.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Changeset.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.ConstraintError.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Embedded.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Enum.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.InvalidChangesetError.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.InvalidURLError.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.MigrationError.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Multi.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.MultiplePrimaryKeyError.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.MultipleResultsError.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.NoPrimaryKeyFieldError.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.NoPrimaryKeyValueError.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.NoResultsError.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.ParameterizedType.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.API.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.BooleanExpr.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Builder.CTE.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Combination.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Distinct.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Dynamic.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Filter.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Builder.From.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Builder.GroupBy.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Join.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Builder.LimitOffset.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Lock.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Builder.OrderBy.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Preload.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Select.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Update.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Windows.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Builder.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.ByExpr.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.CastError.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.CompileError.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.DynamicExpr.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.FromExpr.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.JoinExpr.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.LimitExpr.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Planner.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.QueryExpr.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.SelectExpr.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Tagged.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.Values.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.WindowAPI.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.WithExpr.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Query.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.QueryError.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Queryable.Atom.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Queryable.BitString.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Queryable.Ecto.Query.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Queryable.Ecto.SubQuery.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Queryable.Tuple.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Queryable.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Repo.Assoc.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Repo.Preloader.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Repo.Queryable.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Repo.Registry.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Repo.Schema.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Repo.Supervisor.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Repo.Transaction.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Repo.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Schema.Loader.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Schema.Metadata.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Schema.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.StaleEntryError.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.SubQuery.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.SubQueryError.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.Type.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.UUID.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Ecto.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Inspect.Ecto.Association.NotLoaded.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Inspect.Ecto.Changeset.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Inspect.Ecto.Query.DynamicExpr.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Inspect.Ecto.Query.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Inspect.Ecto.Schema.Metadata.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.JSON.Encoder.Ecto.Association.NotLoaded.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.JSON.Encoder.Ecto.Schema.Metadata.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Jason.Encoder.Ecto.Association.NotLoaded.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Jason.Encoder.Ecto.Schema.Metadata.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Mix.Ecto.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.Create.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.Drop.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.Gen.Repo.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.beam create mode 100644 phoenix/_build/test/lib/ecto/ebin/ecto.app create mode 100644 phoenix/_build/test/lib/ecto_sql/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/ecto_sql/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/ecto_sql/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Collectable.Ecto.Adapters.SQL.Stream.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Adapter.Migration.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Adapter.Structure.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.MyXQL.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.Postgres.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Application.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Connection.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Sandbox.Connection.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Sandbox.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Stream.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.Tds.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Command.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Constraint.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Index.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Reference.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Runner.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Migration.SchemaMigration.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Table.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Migration.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Ecto.Migrator.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Enumerable.Ecto.Adapters.SQL.Stream.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Mix.EctoSQL.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Dump.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Gen.Migration.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Load.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Migrate.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Migrations.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Rollback.beam create mode 100644 phoenix/_build/test/lib/ecto_sql/ebin/ecto_sql.app create mode 100644 phoenix/_build/test/lib/ecto_sqlite3/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/ecto_sqlite3/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/ecto_sqlite3/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.Codec.beam create mode 100644 phoenix/_build/test/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.Connection.beam create mode 100644 phoenix/_build/test/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.DataType.beam create mode 100644 phoenix/_build/test/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.TypeExtension.beam create mode 100644 phoenix/_build/test/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.beam create mode 100644 phoenix/_build/test/lib/ecto_sqlite3/ebin/ecto_sqlite3.app create mode 100644 phoenix/_build/test/lib/elixir_make/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/elixir_make/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/elixir_make/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/elixir_make/ebin/Elixir.ElixirMake.Artefact.beam create mode 100644 phoenix/_build/test/lib/elixir_make/ebin/Elixir.ElixirMake.Compiler.beam create mode 100644 phoenix/_build/test/lib/elixir_make/ebin/Elixir.ElixirMake.Downloader.Httpc.beam create mode 100644 phoenix/_build/test/lib/elixir_make/ebin/Elixir.ElixirMake.Downloader.beam create mode 100644 phoenix/_build/test/lib/elixir_make/ebin/Elixir.ElixirMake.Precompiler.beam create mode 100644 phoenix/_build/test/lib/elixir_make/ebin/Elixir.Mix.Tasks.Compile.ElixirMake.beam create mode 100644 phoenix/_build/test/lib/elixir_make/ebin/Elixir.Mix.Tasks.ElixirMake.Checksum.beam create mode 100644 phoenix/_build/test/lib/elixir_make/ebin/Elixir.Mix.Tasks.ElixirMake.Precompile.beam create mode 100644 phoenix/_build/test/lib/elixir_make/ebin/elixir_make.app create mode 100644 phoenix/_build/test/lib/exqlite/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/exqlite/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/exqlite/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/exqlite/ebin/Elixir.DBConnection.Query.Exqlite.Query.beam create mode 100644 phoenix/_build/test/lib/exqlite/ebin/Elixir.Enumerable.Exqlite.Stream.beam create mode 100644 phoenix/_build/test/lib/exqlite/ebin/Elixir.Exqlite.Basic.beam create mode 100644 phoenix/_build/test/lib/exqlite/ebin/Elixir.Exqlite.Connection.beam create mode 100644 phoenix/_build/test/lib/exqlite/ebin/Elixir.Exqlite.Error.beam create mode 100644 phoenix/_build/test/lib/exqlite/ebin/Elixir.Exqlite.Flags.beam create mode 100644 phoenix/_build/test/lib/exqlite/ebin/Elixir.Exqlite.Pragma.beam create mode 100644 phoenix/_build/test/lib/exqlite/ebin/Elixir.Exqlite.Query.beam create mode 100644 phoenix/_build/test/lib/exqlite/ebin/Elixir.Exqlite.Result.beam create mode 100644 phoenix/_build/test/lib/exqlite/ebin/Elixir.Exqlite.Sqlite3.beam create mode 100644 phoenix/_build/test/lib/exqlite/ebin/Elixir.Exqlite.Sqlite3NIF.beam create mode 100644 phoenix/_build/test/lib/exqlite/ebin/Elixir.Exqlite.Stream.beam create mode 100644 phoenix/_build/test/lib/exqlite/ebin/Elixir.Exqlite.TypeExtension.beam create mode 100644 phoenix/_build/test/lib/exqlite/ebin/Elixir.Exqlite.beam create mode 100644 phoenix/_build/test/lib/exqlite/ebin/Elixir.String.Chars.Exqlite.Query.beam create mode 100644 phoenix/_build/test/lib/exqlite/ebin/exqlite.app create mode 100755 phoenix/_build/test/lib/exqlite/priv/sqlite3_nif.so create mode 100644 phoenix/_build/test/lib/finch/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/finch/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/finch/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/finch/ebin/Elixir.Finch.Error.beam create mode 100644 phoenix/_build/test/lib/finch/ebin/Elixir.Finch.HTTP1.Conn.beam create mode 100644 phoenix/_build/test/lib/finch/ebin/Elixir.Finch.HTTP1.Pool.State.beam create mode 100644 phoenix/_build/test/lib/finch/ebin/Elixir.Finch.HTTP1.Pool.beam create mode 100644 phoenix/_build/test/lib/finch/ebin/Elixir.Finch.HTTP1.PoolMetrics.beam create mode 100644 phoenix/_build/test/lib/finch/ebin/Elixir.Finch.HTTP2.Pool.beam create mode 100644 phoenix/_build/test/lib/finch/ebin/Elixir.Finch.HTTP2.PoolMetrics.beam create mode 100644 phoenix/_build/test/lib/finch/ebin/Elixir.Finch.HTTP2.RequestStream.beam create mode 100644 phoenix/_build/test/lib/finch/ebin/Elixir.Finch.Pool.beam create mode 100644 phoenix/_build/test/lib/finch/ebin/Elixir.Finch.PoolManager.beam create mode 100644 phoenix/_build/test/lib/finch/ebin/Elixir.Finch.Request.beam create mode 100644 phoenix/_build/test/lib/finch/ebin/Elixir.Finch.Response.beam create mode 100644 phoenix/_build/test/lib/finch/ebin/Elixir.Finch.SSL.beam create mode 100644 phoenix/_build/test/lib/finch/ebin/Elixir.Finch.Telemetry.beam create mode 100644 phoenix/_build/test/lib/finch/ebin/Elixir.Finch.beam create mode 100644 phoenix/_build/test/lib/finch/ebin/finch.app create mode 100644 phoenix/_build/test/lib/hpax/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/hpax/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/hpax/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/hpax/ebin/Elixir.HPAX.Huffman.beam create mode 100644 phoenix/_build/test/lib/hpax/ebin/Elixir.HPAX.Table.beam create mode 100644 phoenix/_build/test/lib/hpax/ebin/Elixir.HPAX.Types.beam create mode 100644 phoenix/_build/test/lib/hpax/ebin/Elixir.HPAX.beam create mode 100644 phoenix/_build/test/lib/hpax/ebin/hpax.app create mode 100644 phoenix/_build/test/lib/jason/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/jason/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/jason/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Enumerable.Jason.OrderedObject.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Codegen.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.DecodeError.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Decoder.Unescape.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Decoder.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Encode.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.EncodeError.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Encoder.Any.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Encoder.Atom.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Encoder.BitString.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Encoder.Date.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Encoder.DateTime.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Encoder.Decimal.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Encoder.Float.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Encoder.Integer.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Encoder.Jason.Fragment.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Encoder.Jason.OrderedObject.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Encoder.List.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Encoder.Map.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Encoder.NaiveDateTime.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Encoder.Time.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Encoder.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Formatter.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Fragment.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Helpers.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.OrderedObject.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.Sigil.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/Elixir.Jason.beam create mode 100644 phoenix/_build/test/lib/jason/ebin/jason.app create mode 100644 phoenix/_build/test/lib/mime/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/mime/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/mime/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/mime/ebin/Elixir.MIME.beam create mode 100644 phoenix/_build/test/lib/mime/ebin/mime.app create mode 100644 phoenix/_build/test/lib/mint/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/mint/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/mint/.mix/compile.erlang create mode 100644 phoenix/_build/test/lib/mint/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.Application.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.Core.Conn.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.Core.Headers.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.Core.Transport.SSL.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.Core.Transport.TCP.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.Core.Transport.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.Core.Util.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.HTTP.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.HTTP1.Parse.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.HTTP1.Request.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.HTTP1.Response.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.HTTP1.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.HTTP2.Frame.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.HTTP2.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.HTTPError.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.Negotiate.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.TransportError.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.TunnelProxy.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.Types.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/Elixir.Mint.UnsafeProxy.beam create mode 100644 phoenix/_build/test/lib/mint/ebin/mint.app create mode 100644 phoenix/_build/test/lib/mint/ebin/mint_shims.beam create mode 100644 phoenix/_build/test/lib/nimble_options/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/nimble_options/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/nimble_options/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/nimble_options/ebin/Elixir.NimbleOptions.Docs.beam create mode 100644 phoenix/_build/test/lib/nimble_options/ebin/Elixir.NimbleOptions.ValidationError.beam create mode 100644 phoenix/_build/test/lib/nimble_options/ebin/Elixir.NimbleOptions.beam create mode 100644 phoenix/_build/test/lib/nimble_options/ebin/nimble_options.app create mode 100644 phoenix/_build/test/lib/nimble_pool/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/nimble_pool/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/nimble_pool/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/nimble_pool/ebin/Elixir.NimblePool.Application.beam create mode 100644 phoenix/_build/test/lib/nimble_pool/ebin/Elixir.NimblePool.beam create mode 100644 phoenix/_build/test/lib/nimble_pool/ebin/nimble_pool.app create mode 100644 phoenix/_build/test/lib/phoenix/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/phoenix/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/phoenix/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Inspect.Phoenix.Socket.Message.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Phoenix.Context.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Phoenix.Schema.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Phoenix.Scope.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Phoenix.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Compile.Phoenix.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Digest.Clean.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Digest.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.HashingLibrary.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.Injector.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.Migration.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Cert.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Channel.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Context.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Embedded.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Html.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Json.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Live.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Notifier.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Presence.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Release.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Schema.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Secret.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Socket.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Routes.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Server.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.ActionClauseError.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Channel.Server.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Channel.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.ChannelTest.NoopSerializer.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.ChannelTest.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.MixListener.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.Proxy.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.Server.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Config.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.ConnTest.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Controller.Pipeline.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Controller.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Debug.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Digester.Compressor.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Digester.Gzip.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Digester.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Cowboy2Adapter.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.RenderErrors.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Supervisor.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.SyncCodeReloadPlug.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Watcher.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Flash.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Logger.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.MissingParamError.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Naming.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.NotAcceptableError.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Param.Any.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Param.Atom.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Param.BitString.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Param.Float.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Param.Integer.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Param.Map.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Param.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Presence.Tracker.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Presence.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Router.ConsoleFormatter.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Router.Helpers.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Router.MalformedURIError.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Router.NoRouteError.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Router.Resource.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Router.Route.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Router.Scope.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Router.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Socket.Broadcast.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Socket.InvalidMessageError.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Socket.Message.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Socket.PoolDrainer.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Socket.PoolSupervisor.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Socket.Reply.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Socket.Serializer.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Socket.Transport.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Socket.V1.JSONSerializer.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Socket.V2.JSONSerializer.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Socket.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Token.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Transports.LongPoll.Server.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Transports.LongPoll.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.Transports.WebSocket.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.VerifiedRoutes.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Phoenix.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/Elixir.Plug.Exception.Phoenix.ActionClauseError.beam create mode 100644 phoenix/_build/test/lib/phoenix/ebin/phoenix.app create mode 120000 phoenix/_build/test/lib/phoenix/priv create mode 100644 phoenix/_build/test/lib/phoenix_ecto/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/phoenix_ecto/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/phoenix_ecto/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.CheckRepoStatus.beam create mode 100644 phoenix/_build/test/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.PendingMigrationError.beam create mode 100644 phoenix/_build/test/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.SQL.Sandbox.beam create mode 100644 phoenix/_build/test/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.SQL.SandboxSession.beam create mode 100644 phoenix/_build/test/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.StorageNotCreatedError.beam create mode 100644 phoenix/_build/test/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.beam create mode 100644 phoenix/_build/test/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Ecto.CastError.beam create mode 100644 phoenix/_build/test/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Ecto.NoResultsError.beam create mode 100644 phoenix/_build/test/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Ecto.Query.CastError.beam create mode 100644 phoenix/_build/test/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Ecto.StaleEntryError.beam create mode 100644 phoenix/_build/test/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Ecto.SubQueryError.beam create mode 100644 phoenix/_build/test/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Phoenix.Ecto.PendingMigrationError.beam create mode 100644 phoenix/_build/test/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Phoenix.Ecto.StorageNotCreatedError.beam create mode 100644 phoenix/_build/test/lib/phoenix_ecto/ebin/phoenix_ecto.app create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.Adapter.beam create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.Application.beam create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.BroadcastError.beam create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.PG2.beam create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.PG2Worker.beam create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.Supervisor.beam create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.beam create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.Clock.beam create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.DeltaGeneration.beam create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.Replica.beam create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.Shard.beam create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.ShutdownHandler.beam create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.State.beam create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.beam create mode 100644 phoenix/_build/test/lib/phoenix_pubsub/ebin/phoenix_pubsub.app create mode 100644 phoenix/_build/test/lib/phoenix_template/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/phoenix_template/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/phoenix_template/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/phoenix_template/ebin/Elixir.Phoenix.Template.EExEngine.beam create mode 100644 phoenix/_build/test/lib/phoenix_template/ebin/Elixir.Phoenix.Template.Engine.beam create mode 100644 phoenix/_build/test/lib/phoenix_template/ebin/Elixir.Phoenix.Template.ExsEngine.beam create mode 100644 phoenix/_build/test/lib/phoenix_template/ebin/Elixir.Phoenix.Template.beam create mode 100644 phoenix/_build/test/lib/phoenix_template/ebin/phoenix_template.app create mode 100644 phoenix/_build/test/lib/plug/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/plug/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/plug/.mix/compile.erlang create mode 100644 phoenix/_build/test/lib/plug/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Inspect.Plug.Conn.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Adapters.Cowboy.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Adapters.Test.Conn.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Application.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.BadRequestError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.BasicAuth.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Builder.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.CSRFProtection.InvalidCSRFTokenError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.CSRFProtection.InvalidCrossOriginRequestError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.CSRFProtection.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Conn.Adapter.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Conn.AlreadySentError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Conn.CookieOverflowError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Conn.Cookies.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Conn.InvalidHeaderError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Conn.InvalidQueryError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Conn.NotSentError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Conn.Query.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Conn.Status.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Conn.Unfetched.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Conn.Utils.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Conn.WrapperError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Conn.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Debugger.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.ErrorHandler.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Exception.Any.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Exception.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.HTML.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Head.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Logger.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.MIME.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.MethodOverride.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Parsers.BadEncodingError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Parsers.JSON.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Parsers.MULTIPART.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Parsers.ParseError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Parsers.RequestTooLargeError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Parsers.URLENCODED.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Parsers.UnsupportedMediaTypeError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Parsers.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.RequestId.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.RewriteOn.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Router.InvalidSpecError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Router.MalformedURIError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Router.Utils.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Router.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.SSL.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Session.COOKIE.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Session.ETS.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Session.Store.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Session.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Static.InvalidPathError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Static.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Telemetry.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Test.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.TimeoutError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Upload.Supervisor.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Upload.Terminator.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.Upload.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.UploadError.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/Elixir.Plug.beam create mode 100644 phoenix/_build/test/lib/plug/ebin/plug.app create mode 100644 phoenix/_build/test/lib/plug/ebin/plug_multipart.beam create mode 100644 phoenix/_build/test/lib/plug_crypto/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/plug_crypto/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/plug_crypto/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/plug_crypto/ebin/Elixir.Plug.Crypto.Application.beam create mode 100644 phoenix/_build/test/lib/plug_crypto/ebin/Elixir.Plug.Crypto.KeyGenerator.beam create mode 100644 phoenix/_build/test/lib/plug_crypto/ebin/Elixir.Plug.Crypto.MessageEncryptor.beam create mode 100644 phoenix/_build/test/lib/plug_crypto/ebin/Elixir.Plug.Crypto.MessageVerifier.beam create mode 100644 phoenix/_build/test/lib/plug_crypto/ebin/Elixir.Plug.Crypto.beam create mode 100644 phoenix/_build/test/lib/plug_crypto/ebin/plug_crypto.app create mode 100644 phoenix/_build/test/lib/req/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/req/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/req/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Collectable.Req.Utils.CollectWithHash.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Enumerable.Req.Response.Async.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Inspect.Req.Request.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Inspect.Req.Response.Async.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.Application.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.ArchiveError.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.ChecksumMismatchError.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.DecompressError.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.Fields.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.Finch.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.HTTPError.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.Request.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.Response.Async.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.Response.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.Steps.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.Test.Adapter.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.Test.Ownership.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.Test.OwnershipError.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.Test.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.TooManyRedirectsError.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.TransportError.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.Utils.CollectWithHash.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.Utils.beam create mode 100644 phoenix/_build/test/lib/req/ebin/Elixir.Req.beam create mode 100644 phoenix/_build/test/lib/req/ebin/req.app create mode 100644 phoenix/_build/test/lib/shooting_event_phx/.mix/.mix_test_failures create mode 100644 phoenix/_build/test/lib/shooting_event_phx/.mix/cached_dot_formatter create mode 100644 phoenix/_build/test/lib/shooting_event_phx/.mix/compile.app_cache create mode 100644 phoenix/_build/test/lib/shooting_event_phx/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/shooting_event_phx/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/shooting_event_phx/.mix/compile.lock create mode 100644 phoenix/_build/test/lib/shooting_event_phx/.mix/compile.protocols create mode 100644 phoenix/_build/test/lib/shooting_event_phx/.mix/format_timestamp create mode 100644 phoenix/_build/test/lib/shooting_event_phx/consolidated/Elixir.Bandit.HTTP2.Frame.Serializable.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/consolidated/Elixir.Bandit.HTTPTransport.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/consolidated/Elixir.Bandit.WebSocket.Frame.Serializable.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/consolidated/Elixir.Bandit.WebSocket.Socket.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/consolidated/Elixir.Collectable.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/consolidated/Elixir.DBConnection.Query.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/consolidated/Elixir.Ecto.Queryable.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/consolidated/Elixir.Enumerable.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/consolidated/Elixir.IEx.Info.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/consolidated/Elixir.Inspect.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/consolidated/Elixir.JSON.Encoder.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/consolidated/Elixir.Jason.Encoder.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/consolidated/Elixir.List.Chars.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/consolidated/Elixir.Phoenix.Param.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/consolidated/Elixir.Plug.Exception.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/consolidated/Elixir.String.Chars.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.AI.Gemini.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Application.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Auth.SessionStore.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Auth.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.DataCase.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.AppSetting.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Derived.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.EventData.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Player.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Score.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.ScoreAttachment.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Settings.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Stages.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.StateService.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Events.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Repo.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.ApiController.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.ConnCase.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Endpoint.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.ErrorJSON.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.EventsController.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.FrontendController.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Plugs.AdminOnly.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Plugs.CORS.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Router.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Telemetry.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.beam create mode 100644 phoenix/_build/test/lib/shooting_event_phx/ebin/shooting_event_phx.app create mode 120000 phoenix/_build/test/lib/shooting_event_phx/priv create mode 100644 phoenix/_build/test/lib/telemetry/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/telemetry/ebin/telemetry.app create mode 100644 phoenix/_build/test/lib/telemetry/ebin/telemetry.beam create mode 100644 phoenix/_build/test/lib/telemetry/ebin/telemetry_app.beam create mode 100644 phoenix/_build/test/lib/telemetry/ebin/telemetry_ets.beam create mode 100644 phoenix/_build/test/lib/telemetry/ebin/telemetry_handler_table.beam create mode 100644 phoenix/_build/test/lib/telemetry/ebin/telemetry_pt.beam create mode 100644 phoenix/_build/test/lib/telemetry/ebin/telemetry_sup.beam create mode 100644 phoenix/_build/test/lib/telemetry/ebin/telemetry_test.beam create mode 100644 phoenix/_build/test/lib/telemetry/mix.rebar.config create mode 120000 phoenix/_build/test/lib/telemetry/src create mode 100644 phoenix/_build/test/lib/telemetry_metrics/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/telemetry_metrics/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/telemetry_metrics/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.ConsoleReporter.beam create mode 100644 phoenix/_build/test/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Counter.beam create mode 100644 phoenix/_build/test/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Distribution.beam create mode 100644 phoenix/_build/test/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.LastValue.beam create mode 100644 phoenix/_build/test/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Sum.beam create mode 100644 phoenix/_build/test/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Summary.beam create mode 100644 phoenix/_build/test/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.beam create mode 100644 phoenix/_build/test/lib/telemetry_metrics/ebin/telemetry_metrics.app create mode 100644 phoenix/_build/test/lib/telemetry_poller/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/telemetry_poller/ebin/telemetry_poller.app create mode 100644 phoenix/_build/test/lib/telemetry_poller/ebin/telemetry_poller.beam create mode 100644 phoenix/_build/test/lib/telemetry_poller/ebin/telemetry_poller_app.beam create mode 100644 phoenix/_build/test/lib/telemetry_poller/ebin/telemetry_poller_builtin.beam create mode 100644 phoenix/_build/test/lib/telemetry_poller/ebin/telemetry_poller_sup.beam create mode 100644 phoenix/_build/test/lib/telemetry_poller/mix.rebar.config create mode 120000 phoenix/_build/test/lib/telemetry_poller/src create mode 100644 phoenix/_build/test/lib/thousand_island/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/thousand_island/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/thousand_island/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.Acceptor.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.AcceptorPoolSupervisor.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.AcceptorSupervisor.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.Connection.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.Handler.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.HandlerConfig.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.Listener.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.Logger.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.ProcessLabel.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.Server.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.ServerConfig.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.ShutdownListener.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.Socket.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.Telemetry.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.Transport.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.Transports.SSL.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.Transports.TCP.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/Elixir.ThousandIsland.beam create mode 100644 phoenix/_build/test/lib/thousand_island/ebin/thousand_island.app create mode 100644 phoenix/_build/test/lib/websock/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/websock/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/websock/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/websock/ebin/Elixir.WebSock.beam create mode 100644 phoenix/_build/test/lib/websock/ebin/websock.app create mode 100644 phoenix/_build/test/lib/websock_adapter/.mix/compile.elixir create mode 100644 phoenix/_build/test/lib/websock_adapter/.mix/compile.elixir_scm create mode 100644 phoenix/_build/test/lib/websock_adapter/.mix/compile.fetch create mode 100644 phoenix/_build/test/lib/websock_adapter/ebin/Elixir.WebSockAdapter.UpgradeError.beam create mode 100644 phoenix/_build/test/lib/websock_adapter/ebin/Elixir.WebSockAdapter.UpgradeValidation.beam create mode 100644 phoenix/_build/test/lib/websock_adapter/ebin/Elixir.WebSockAdapter.beam create mode 100644 phoenix/_build/test/lib/websock_adapter/ebin/websock_adapter.app create mode 100644 phoenix/deps/bandit/.hex create mode 100644 phoenix/deps/bandit/CHANGELOG.md create mode 100644 phoenix/deps/bandit/LICENSE create mode 100644 phoenix/deps/bandit/README.md create mode 100644 phoenix/deps/bandit/hex_metadata.config create mode 100644 phoenix/deps/bandit/lib/bandit.ex create mode 100644 phoenix/deps/bandit/lib/bandit/adapter.ex create mode 100644 phoenix/deps/bandit/lib/bandit/application.ex create mode 100644 phoenix/deps/bandit/lib/bandit/clock.ex create mode 100644 phoenix/deps/bandit/lib/bandit/compression.ex create mode 100644 phoenix/deps/bandit/lib/bandit/delegating_handler.ex create mode 100644 phoenix/deps/bandit/lib/bandit/extractor.ex create mode 100644 phoenix/deps/bandit/lib/bandit/headers.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http1/README.md create mode 100644 phoenix/deps/bandit/lib/bandit/http1/handler.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http1/socket.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/README.md create mode 100644 phoenix/deps/bandit/lib/bandit/http2/connection.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/errors.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/flow_control.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/frame.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/frame/continuation.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/frame/data.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/frame/goaway.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/frame/headers.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/frame/ping.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/frame/priority.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/frame/push_promise.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/frame/rst_stream.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/frame/settings.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/frame/unknown.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/frame/window_update.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/handler.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/settings.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/stream.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/stream_collection.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http2/stream_process.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http_error.ex create mode 100644 phoenix/deps/bandit/lib/bandit/http_transport.ex create mode 100644 phoenix/deps/bandit/lib/bandit/initial_handler.ex create mode 100644 phoenix/deps/bandit/lib/bandit/logger.ex create mode 100644 phoenix/deps/bandit/lib/bandit/phoenix_adapter.ex create mode 100644 phoenix/deps/bandit/lib/bandit/pipeline.ex create mode 100644 phoenix/deps/bandit/lib/bandit/primitive_ops/websocket.ex create mode 100644 phoenix/deps/bandit/lib/bandit/socket_helpers.ex create mode 100644 phoenix/deps/bandit/lib/bandit/telemetry.ex create mode 100644 phoenix/deps/bandit/lib/bandit/trace.ex create mode 100644 phoenix/deps/bandit/lib/bandit/transport_error.ex create mode 100644 phoenix/deps/bandit/lib/bandit/websocket/README.md create mode 100644 phoenix/deps/bandit/lib/bandit/websocket/connection.ex create mode 100644 phoenix/deps/bandit/lib/bandit/websocket/frame.ex create mode 100644 phoenix/deps/bandit/lib/bandit/websocket/frame/binary.ex create mode 100644 phoenix/deps/bandit/lib/bandit/websocket/frame/connection_close.ex create mode 100644 phoenix/deps/bandit/lib/bandit/websocket/frame/continuation.ex create mode 100644 phoenix/deps/bandit/lib/bandit/websocket/frame/ping.ex create mode 100644 phoenix/deps/bandit/lib/bandit/websocket/frame/pong.ex create mode 100644 phoenix/deps/bandit/lib/bandit/websocket/frame/text.ex create mode 100644 phoenix/deps/bandit/lib/bandit/websocket/handler.ex create mode 100644 phoenix/deps/bandit/lib/bandit/websocket/handshake.ex create mode 100644 phoenix/deps/bandit/lib/bandit/websocket/permessage_deflate.ex create mode 100644 phoenix/deps/bandit/lib/bandit/websocket/socket.ex create mode 100644 phoenix/deps/bandit/lib/bandit/websocket/upgrade_validation.ex create mode 100644 phoenix/deps/bandit/mix.exs create mode 100644 phoenix/deps/cc_precompiler/.hex create mode 100644 phoenix/deps/cc_precompiler/CHANGELOG.md create mode 100644 phoenix/deps/cc_precompiler/LICENSE create mode 100644 phoenix/deps/cc_precompiler/PRECOMPILATION_GUIDE.md create mode 100644 phoenix/deps/cc_precompiler/README.md create mode 100644 phoenix/deps/cc_precompiler/hex_metadata.config create mode 100644 phoenix/deps/cc_precompiler/lib/cc_precompiler.ex create mode 100644 phoenix/deps/cc_precompiler/lib/compilation_script/compilation_script.ex create mode 100644 phoenix/deps/cc_precompiler/lib/compilation_script/universal_binary.ex create mode 100644 phoenix/deps/cc_precompiler/mix.exs create mode 100644 phoenix/deps/db_connection/.formatter.exs create mode 100644 phoenix/deps/db_connection/.hex create mode 100644 phoenix/deps/db_connection/CHANGELOG.md create mode 100644 phoenix/deps/db_connection/README.md create mode 100644 phoenix/deps/db_connection/hex_metadata.config create mode 100644 phoenix/deps/db_connection/lib/db_connection.ex create mode 100644 phoenix/deps/db_connection/lib/db_connection/app.ex create mode 100644 phoenix/deps/db_connection/lib/db_connection/backoff.ex create mode 100644 phoenix/deps/db_connection/lib/db_connection/connection.ex create mode 100644 phoenix/deps/db_connection/lib/db_connection/connection_error.ex create mode 100644 phoenix/deps/db_connection/lib/db_connection/connection_pool.ex create mode 100644 phoenix/deps/db_connection/lib/db_connection/connection_pool/pool.ex create mode 100644 phoenix/deps/db_connection/lib/db_connection/holder.ex create mode 100644 phoenix/deps/db_connection/lib/db_connection/log_entry.ex create mode 100644 phoenix/deps/db_connection/lib/db_connection/ownership.ex create mode 100644 phoenix/deps/db_connection/lib/db_connection/ownership/manager.ex create mode 100644 phoenix/deps/db_connection/lib/db_connection/ownership/proxy.ex create mode 100644 phoenix/deps/db_connection/lib/db_connection/pool.ex create mode 100644 phoenix/deps/db_connection/lib/db_connection/query.ex create mode 100644 phoenix/deps/db_connection/lib/db_connection/task.ex create mode 100644 phoenix/deps/db_connection/lib/db_connection/telemetry_listener.ex create mode 100644 phoenix/deps/db_connection/lib/db_connection/util.ex create mode 100644 phoenix/deps/db_connection/lib/db_connection/watcher.ex create mode 100644 phoenix/deps/db_connection/mix.exs create mode 100644 phoenix/deps/decimal/.formatter.exs create mode 100644 phoenix/deps/decimal/.hex create mode 100644 phoenix/deps/decimal/CHANGELOG.md create mode 100644 phoenix/deps/decimal/LICENSE.txt create mode 100644 phoenix/deps/decimal/README.md create mode 100644 phoenix/deps/decimal/hex_metadata.config create mode 100644 phoenix/deps/decimal/lib/decimal.ex create mode 100644 phoenix/deps/decimal/lib/decimal/context.ex create mode 100644 phoenix/deps/decimal/lib/decimal/error.ex create mode 100644 phoenix/deps/decimal/lib/decimal/macros.ex create mode 100644 phoenix/deps/decimal/mix.exs create mode 100644 phoenix/deps/dns_cluster/.formatter.exs create mode 100644 phoenix/deps/dns_cluster/.hex create mode 100644 phoenix/deps/dns_cluster/CHANGELOG.md create mode 100644 phoenix/deps/dns_cluster/LICENSE.md create mode 100644 phoenix/deps/dns_cluster/README.md create mode 100644 phoenix/deps/dns_cluster/hex_metadata.config create mode 100644 phoenix/deps/dns_cluster/lib/dns_cluster.ex create mode 100644 phoenix/deps/dns_cluster/mix.exs create mode 100644 phoenix/deps/ecto/.formatter.exs create mode 100644 phoenix/deps/ecto/.hex create mode 100644 phoenix/deps/ecto/CHANGELOG.md create mode 100644 phoenix/deps/ecto/README.md create mode 100644 phoenix/deps/ecto/hex_metadata.config create mode 100644 phoenix/deps/ecto/integration_test/cases/assoc.exs create mode 100644 phoenix/deps/ecto/integration_test/cases/interval.exs create mode 100644 phoenix/deps/ecto/integration_test/cases/joins.exs create mode 100644 phoenix/deps/ecto/integration_test/cases/preload.exs create mode 100644 phoenix/deps/ecto/integration_test/cases/repo.exs create mode 100644 phoenix/deps/ecto/integration_test/cases/type.exs create mode 100644 phoenix/deps/ecto/integration_test/cases/windows.exs create mode 100644 phoenix/deps/ecto/integration_test/support/schemas.exs create mode 100644 phoenix/deps/ecto/integration_test/support/types.exs create mode 100644 phoenix/deps/ecto/lib/ecto.ex create mode 100644 phoenix/deps/ecto/lib/ecto/adapter.ex create mode 100644 phoenix/deps/ecto/lib/ecto/adapter/queryable.ex create mode 100644 phoenix/deps/ecto/lib/ecto/adapter/schema.ex create mode 100644 phoenix/deps/ecto/lib/ecto/adapter/storage.ex create mode 100644 phoenix/deps/ecto/lib/ecto/adapter/transaction.ex create mode 100644 phoenix/deps/ecto/lib/ecto/application.ex create mode 100644 phoenix/deps/ecto/lib/ecto/association.ex create mode 100644 phoenix/deps/ecto/lib/ecto/changeset.ex create mode 100644 phoenix/deps/ecto/lib/ecto/changeset/relation.ex create mode 100644 phoenix/deps/ecto/lib/ecto/embedded.ex create mode 100644 phoenix/deps/ecto/lib/ecto/enum.ex create mode 100644 phoenix/deps/ecto/lib/ecto/exceptions.ex create mode 100644 phoenix/deps/ecto/lib/ecto/json.ex create mode 100644 phoenix/deps/ecto/lib/ecto/multi.ex create mode 100644 phoenix/deps/ecto/lib/ecto/parameterized_type.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/api.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/builder.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/builder/combination.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/builder/cte.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/builder/distinct.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/builder/dynamic.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/builder/filter.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/builder/from.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/builder/group_by.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/builder/join.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/builder/limit_offset.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/builder/lock.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/builder/order_by.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/builder/preload.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/builder/select.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/builder/update.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/builder/windows.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/inspect.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/planner.ex create mode 100644 phoenix/deps/ecto/lib/ecto/query/window_api.ex create mode 100644 phoenix/deps/ecto/lib/ecto/queryable.ex create mode 100644 phoenix/deps/ecto/lib/ecto/repo.ex create mode 100644 phoenix/deps/ecto/lib/ecto/repo/assoc.ex create mode 100644 phoenix/deps/ecto/lib/ecto/repo/preloader.ex create mode 100644 phoenix/deps/ecto/lib/ecto/repo/queryable.ex create mode 100644 phoenix/deps/ecto/lib/ecto/repo/registry.ex create mode 100644 phoenix/deps/ecto/lib/ecto/repo/schema.ex create mode 100644 phoenix/deps/ecto/lib/ecto/repo/supervisor.ex create mode 100644 phoenix/deps/ecto/lib/ecto/repo/transaction.ex create mode 100644 phoenix/deps/ecto/lib/ecto/schema.ex create mode 100644 phoenix/deps/ecto/lib/ecto/schema/loader.ex create mode 100644 phoenix/deps/ecto/lib/ecto/schema/metadata.ex create mode 100644 phoenix/deps/ecto/lib/ecto/type.ex create mode 100644 phoenix/deps/ecto/lib/ecto/uuid.ex create mode 100644 phoenix/deps/ecto/lib/mix/ecto.ex create mode 100644 phoenix/deps/ecto/lib/mix/tasks/ecto.create.ex create mode 100644 phoenix/deps/ecto/lib/mix/tasks/ecto.drop.ex create mode 100644 phoenix/deps/ecto/lib/mix/tasks/ecto.ex create mode 100644 phoenix/deps/ecto/lib/mix/tasks/ecto.gen.repo.ex create mode 100644 phoenix/deps/ecto/mix.exs create mode 100644 phoenix/deps/ecto_sql/.formatter.exs create mode 100644 phoenix/deps/ecto_sql/.hex create mode 100644 phoenix/deps/ecto_sql/CHANGELOG.md create mode 100644 phoenix/deps/ecto_sql/README.md create mode 100644 phoenix/deps/ecto_sql/hex_metadata.config create mode 100644 phoenix/deps/ecto_sql/integration_test/sql/alter.exs create mode 100644 phoenix/deps/ecto_sql/integration_test/sql/lock.exs create mode 100644 phoenix/deps/ecto_sql/integration_test/sql/logging.exs create mode 100644 phoenix/deps/ecto_sql/integration_test/sql/migration.exs create mode 100644 phoenix/deps/ecto_sql/integration_test/sql/migrator.exs create mode 100644 phoenix/deps/ecto_sql/integration_test/sql/query_many.exs create mode 100644 phoenix/deps/ecto_sql/integration_test/sql/sandbox.exs create mode 100644 phoenix/deps/ecto_sql/integration_test/sql/sql.exs create mode 100644 phoenix/deps/ecto_sql/integration_test/sql/stream.exs create mode 100644 phoenix/deps/ecto_sql/integration_test/sql/subquery.exs create mode 100644 phoenix/deps/ecto_sql/integration_test/sql/transaction.exs create mode 100644 phoenix/deps/ecto_sql/integration_test/support/file_helpers.exs create mode 100644 phoenix/deps/ecto_sql/integration_test/support/migration.exs create mode 100644 phoenix/deps/ecto_sql/integration_test/support/repo.exs create mode 100644 phoenix/deps/ecto_sql/lib/ecto/adapter/migration.ex create mode 100644 phoenix/deps/ecto_sql/lib/ecto/adapter/structure.ex create mode 100644 phoenix/deps/ecto_sql/lib/ecto/adapters/myxql.ex create mode 100644 phoenix/deps/ecto_sql/lib/ecto/adapters/myxql/connection.ex create mode 100644 phoenix/deps/ecto_sql/lib/ecto/adapters/postgres.ex create mode 100644 phoenix/deps/ecto_sql/lib/ecto/adapters/postgres/connection.ex create mode 100644 phoenix/deps/ecto_sql/lib/ecto/adapters/sql.ex create mode 100644 phoenix/deps/ecto_sql/lib/ecto/adapters/sql/application.ex create mode 100644 phoenix/deps/ecto_sql/lib/ecto/adapters/sql/connection.ex create mode 100644 phoenix/deps/ecto_sql/lib/ecto/adapters/sql/sandbox.ex create mode 100644 phoenix/deps/ecto_sql/lib/ecto/adapters/sql/stream.ex create mode 100644 phoenix/deps/ecto_sql/lib/ecto/adapters/tds.ex create mode 100644 phoenix/deps/ecto_sql/lib/ecto/adapters/tds/connection.ex create mode 100644 phoenix/deps/ecto_sql/lib/ecto/adapters/tds/types.ex create mode 100644 phoenix/deps/ecto_sql/lib/ecto/migration.ex create mode 100644 phoenix/deps/ecto_sql/lib/ecto/migration/runner.ex create mode 100644 phoenix/deps/ecto_sql/lib/ecto/migration/schema_migration.ex create mode 100644 phoenix/deps/ecto_sql/lib/ecto/migrator.ex create mode 100644 phoenix/deps/ecto_sql/lib/mix/ecto_sql.ex create mode 100644 phoenix/deps/ecto_sql/lib/mix/tasks/ecto.dump.ex create mode 100644 phoenix/deps/ecto_sql/lib/mix/tasks/ecto.gen.migration.ex create mode 100644 phoenix/deps/ecto_sql/lib/mix/tasks/ecto.load.ex create mode 100644 phoenix/deps/ecto_sql/lib/mix/tasks/ecto.migrate.ex create mode 100644 phoenix/deps/ecto_sql/lib/mix/tasks/ecto.migrations.ex create mode 100644 phoenix/deps/ecto_sql/lib/mix/tasks/ecto.rollback.ex create mode 100644 phoenix/deps/ecto_sql/mix.exs create mode 100644 phoenix/deps/ecto_sqlite3/.formatter.exs create mode 100644 phoenix/deps/ecto_sqlite3/.hex create mode 100644 phoenix/deps/ecto_sqlite3/LICENSE create mode 100644 phoenix/deps/ecto_sqlite3/README.md create mode 100644 phoenix/deps/ecto_sqlite3/hex_metadata.config create mode 100644 phoenix/deps/ecto_sqlite3/lib/ecto/adapters/sqlite3.ex create mode 100644 phoenix/deps/ecto_sqlite3/lib/ecto/adapters/sqlite3/codec.ex create mode 100644 phoenix/deps/ecto_sqlite3/lib/ecto/adapters/sqlite3/connection.ex create mode 100644 phoenix/deps/ecto_sqlite3/lib/ecto/adapters/sqlite3/data_type.ex create mode 100644 phoenix/deps/ecto_sqlite3/lib/ecto/adapters/sqlite3/type_extension.ex create mode 100644 phoenix/deps/ecto_sqlite3/mix.exs create mode 100644 phoenix/deps/elixir_make/.formatter.exs create mode 100644 phoenix/deps/elixir_make/.hex create mode 100644 phoenix/deps/elixir_make/CHANGELOG.md create mode 100644 phoenix/deps/elixir_make/README.md create mode 100644 phoenix/deps/elixir_make/hex_metadata.config create mode 100644 phoenix/deps/elixir_make/lib/elixir_make/artefact.ex create mode 100644 phoenix/deps/elixir_make/lib/elixir_make/compiler.ex create mode 100644 phoenix/deps/elixir_make/lib/elixir_make/downloader.ex create mode 100644 phoenix/deps/elixir_make/lib/elixir_make/downloader/httpc.ex create mode 100644 phoenix/deps/elixir_make/lib/elixir_make/precompiler.ex create mode 100644 phoenix/deps/elixir_make/lib/mix/tasks/compile.elixir_make.ex create mode 100644 phoenix/deps/elixir_make/lib/mix/tasks/elixir_make.checksum.ex create mode 100644 phoenix/deps/elixir_make/lib/mix/tasks/elixir_make.precompile.ex create mode 100644 phoenix/deps/elixir_make/mix.exs create mode 100644 phoenix/deps/exqlite/.clang-format create mode 100644 phoenix/deps/exqlite/.formatter.exs create mode 100644 phoenix/deps/exqlite/.hex create mode 100644 phoenix/deps/exqlite/LICENSE create mode 100644 phoenix/deps/exqlite/Makefile create mode 100644 phoenix/deps/exqlite/Makefile.win create mode 100644 phoenix/deps/exqlite/README.md create mode 100644 phoenix/deps/exqlite/c_src/sqlite3.c create mode 100644 phoenix/deps/exqlite/c_src/sqlite3.h create mode 100644 phoenix/deps/exqlite/c_src/sqlite3_nif.c create mode 100644 phoenix/deps/exqlite/c_src/sqlite3ext.h create mode 100644 phoenix/deps/exqlite/checksum.exs create mode 100644 phoenix/deps/exqlite/hex_metadata.config create mode 100644 phoenix/deps/exqlite/lib/exqlite.ex create mode 100644 phoenix/deps/exqlite/lib/exqlite/basic.ex create mode 100644 phoenix/deps/exqlite/lib/exqlite/connection.ex create mode 100644 phoenix/deps/exqlite/lib/exqlite/error.ex create mode 100644 phoenix/deps/exqlite/lib/exqlite/flags.ex create mode 100644 phoenix/deps/exqlite/lib/exqlite/pragma.ex create mode 100644 phoenix/deps/exqlite/lib/exqlite/query.ex create mode 100644 phoenix/deps/exqlite/lib/exqlite/result.ex create mode 100644 phoenix/deps/exqlite/lib/exqlite/sqlite3.ex create mode 100644 phoenix/deps/exqlite/lib/exqlite/sqlite3_nif.ex create mode 100644 phoenix/deps/exqlite/lib/exqlite/stream.ex create mode 100644 phoenix/deps/exqlite/lib/exqlite/type_extension.ex create mode 100644 phoenix/deps/exqlite/mix.exs create mode 100644 phoenix/deps/finch/.formatter.exs create mode 100644 phoenix/deps/finch/.hex create mode 100644 phoenix/deps/finch/CHANGELOG.md create mode 100644 phoenix/deps/finch/LICENSE.md create mode 100644 phoenix/deps/finch/README.md create mode 100644 phoenix/deps/finch/hex_metadata.config create mode 100644 phoenix/deps/finch/lib/finch.ex create mode 100644 phoenix/deps/finch/lib/finch/error.ex create mode 100644 phoenix/deps/finch/lib/finch/http1/conn.ex create mode 100644 phoenix/deps/finch/lib/finch/http1/pool.ex create mode 100644 phoenix/deps/finch/lib/finch/http1/pool_metrics.ex create mode 100644 phoenix/deps/finch/lib/finch/http2/pool.ex create mode 100644 phoenix/deps/finch/lib/finch/http2/pool_metrics.ex create mode 100644 phoenix/deps/finch/lib/finch/http2/request_stream.ex create mode 100644 phoenix/deps/finch/lib/finch/pool.ex create mode 100644 phoenix/deps/finch/lib/finch/pool_manager.ex create mode 100644 phoenix/deps/finch/lib/finch/request.ex create mode 100644 phoenix/deps/finch/lib/finch/response.ex create mode 100644 phoenix/deps/finch/lib/finch/ssl.ex create mode 100644 phoenix/deps/finch/lib/finch/telemetry.ex create mode 100644 phoenix/deps/finch/mix.exs create mode 100644 phoenix/deps/hpax/.formatter.exs create mode 100644 phoenix/deps/hpax/.hex create mode 100644 phoenix/deps/hpax/CHANGELOG.md create mode 100644 phoenix/deps/hpax/LICENSE.txt create mode 100644 phoenix/deps/hpax/README.md create mode 100644 phoenix/deps/hpax/hex_metadata.config create mode 100644 phoenix/deps/hpax/lib/hpax.ex create mode 100644 phoenix/deps/hpax/lib/hpax/huffman.ex create mode 100644 phoenix/deps/hpax/lib/hpax/huffman_table create mode 100644 phoenix/deps/hpax/lib/hpax/table.ex create mode 100644 phoenix/deps/hpax/lib/hpax/types.ex create mode 100644 phoenix/deps/hpax/mix.exs create mode 100644 phoenix/deps/jason/.hex create mode 100644 phoenix/deps/jason/CHANGELOG.md create mode 100644 phoenix/deps/jason/LICENSE create mode 100644 phoenix/deps/jason/README.md create mode 100644 phoenix/deps/jason/hex_metadata.config create mode 100644 phoenix/deps/jason/lib/codegen.ex create mode 100644 phoenix/deps/jason/lib/decoder.ex create mode 100644 phoenix/deps/jason/lib/encode.ex create mode 100644 phoenix/deps/jason/lib/encoder.ex create mode 100644 phoenix/deps/jason/lib/formatter.ex create mode 100644 phoenix/deps/jason/lib/fragment.ex create mode 100644 phoenix/deps/jason/lib/helpers.ex create mode 100644 phoenix/deps/jason/lib/jason.ex create mode 100644 phoenix/deps/jason/lib/ordered_object.ex create mode 100644 phoenix/deps/jason/lib/sigil.ex create mode 100644 phoenix/deps/jason/mix.exs create mode 100644 phoenix/deps/mime/.formatter.exs create mode 100644 phoenix/deps/mime/.hex create mode 100644 phoenix/deps/mime/CHANGELOG.md create mode 100644 phoenix/deps/mime/LICENSE create mode 100644 phoenix/deps/mime/README.md create mode 100644 phoenix/deps/mime/hex_metadata.config create mode 100644 phoenix/deps/mime/lib/mime.ex create mode 100644 phoenix/deps/mime/mix.exs create mode 100644 phoenix/deps/mint/.formatter.exs create mode 100644 phoenix/deps/mint/.hex create mode 100644 phoenix/deps/mint/CHANGELOG.md create mode 100644 phoenix/deps/mint/LICENSE.txt create mode 100644 phoenix/deps/mint/README.md create mode 100644 phoenix/deps/mint/hex_metadata.config create mode 100644 phoenix/deps/mint/lib/mint/application.ex create mode 100644 phoenix/deps/mint/lib/mint/core/conn.ex create mode 100644 phoenix/deps/mint/lib/mint/core/headers.ex create mode 100644 phoenix/deps/mint/lib/mint/core/transport.ex create mode 100644 phoenix/deps/mint/lib/mint/core/transport/ssl.ex create mode 100644 phoenix/deps/mint/lib/mint/core/transport/tcp.ex create mode 100644 phoenix/deps/mint/lib/mint/core/util.ex create mode 100644 phoenix/deps/mint/lib/mint/http.ex create mode 100644 phoenix/deps/mint/lib/mint/http1.ex create mode 100644 phoenix/deps/mint/lib/mint/http1/parse.ex create mode 100644 phoenix/deps/mint/lib/mint/http1/request.ex create mode 100644 phoenix/deps/mint/lib/mint/http1/response.ex create mode 100644 phoenix/deps/mint/lib/mint/http2.ex create mode 100644 phoenix/deps/mint/lib/mint/http2/frame.ex create mode 100644 phoenix/deps/mint/lib/mint/http_error.ex create mode 100644 phoenix/deps/mint/lib/mint/negotiate.ex create mode 100644 phoenix/deps/mint/lib/mint/transport_error.ex create mode 100644 phoenix/deps/mint/lib/mint/tunnel_proxy.ex create mode 100644 phoenix/deps/mint/lib/mint/types.ex create mode 100644 phoenix/deps/mint/lib/mint/unsafe_proxy.ex create mode 100644 phoenix/deps/mint/mix.exs create mode 100644 phoenix/deps/mint/src/mint_shims.erl create mode 100644 phoenix/deps/nimble_options/.formatter.exs create mode 100644 phoenix/deps/nimble_options/.hex create mode 100644 phoenix/deps/nimble_options/CHANGELOG.md create mode 100644 phoenix/deps/nimble_options/LICENSE.md create mode 100644 phoenix/deps/nimble_options/README.md create mode 100644 phoenix/deps/nimble_options/hex_metadata.config create mode 100644 phoenix/deps/nimble_options/lib/nimble_options.ex create mode 100644 phoenix/deps/nimble_options/lib/nimble_options/docs.ex create mode 100644 phoenix/deps/nimble_options/lib/nimble_options/validation_error.ex create mode 100644 phoenix/deps/nimble_options/mix.exs create mode 100644 phoenix/deps/nimble_pool/.formatter.exs create mode 100644 phoenix/deps/nimble_pool/.hex create mode 100644 phoenix/deps/nimble_pool/CHANGELOG.md create mode 100644 phoenix/deps/nimble_pool/README.md create mode 100644 phoenix/deps/nimble_pool/hex_metadata.config create mode 100644 phoenix/deps/nimble_pool/lib/nimble_pool.ex create mode 100644 phoenix/deps/nimble_pool/lib/nimble_pool/application.ex create mode 100644 phoenix/deps/nimble_pool/mix.exs create mode 100644 phoenix/deps/phoenix/.formatter.exs create mode 100644 phoenix/deps/phoenix/.hex create mode 100644 phoenix/deps/phoenix/CHANGELOG.md create mode 100644 phoenix/deps/phoenix/LICENSE.md create mode 100644 phoenix/deps/phoenix/README.md create mode 100644 phoenix/deps/phoenix/assets/js/phoenix/ajax.js create mode 100644 phoenix/deps/phoenix/assets/js/phoenix/channel.js create mode 100644 phoenix/deps/phoenix/assets/js/phoenix/constants.js create mode 100644 phoenix/deps/phoenix/assets/js/phoenix/index.js create mode 100644 phoenix/deps/phoenix/assets/js/phoenix/longpoll.js create mode 100644 phoenix/deps/phoenix/assets/js/phoenix/presence.js create mode 100644 phoenix/deps/phoenix/assets/js/phoenix/push.js create mode 100644 phoenix/deps/phoenix/assets/js/phoenix/serializer.js create mode 100644 phoenix/deps/phoenix/assets/js/phoenix/socket.js create mode 100644 phoenix/deps/phoenix/assets/js/phoenix/timer.js create mode 100644 phoenix/deps/phoenix/assets/js/phoenix/utils.js create mode 100644 phoenix/deps/phoenix/hex_metadata.config create mode 100644 phoenix/deps/phoenix/installer/templates/phx_web/components/core_components.ex create mode 100644 phoenix/deps/phoenix/lib/mix/phoenix.ex create mode 100644 phoenix/deps/phoenix/lib/mix/phoenix/context.ex create mode 100644 phoenix/deps/phoenix/lib/mix/phoenix/schema.ex create mode 100644 phoenix/deps/phoenix/lib/mix/phoenix/scope.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/compile.phoenix.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.digest.clean.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.digest.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.auth.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.auth/hashing_library.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.auth/injector.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.auth/migration.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.cert.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.channel.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.context.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.embedded.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.html.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.json.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.live.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.notifier.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.presence.ex create mode 100755 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.release.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.schema.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.secret.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.gen.socket.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.routes.ex create mode 100644 phoenix/deps/phoenix/lib/mix/tasks/phx.server.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/channel.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/channel/server.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/code_reloader.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/code_reloader/mix_listener.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/code_reloader/proxy.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/code_reloader/server.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/config.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/controller.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/controller/pipeline.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/debug.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/digester.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/digester/compressor.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/digester/gzip.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/endpoint.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/endpoint/cowboy2_adapter.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/endpoint/render_errors.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/endpoint/supervisor.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/endpoint/sync_code_reload_plug.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/endpoint/watcher.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/exceptions.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/flash.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/logger.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/naming.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/param.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/presence.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/router.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/router/console_formatter.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/router/helpers.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/router/resource.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/router/route.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/router/scope.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/socket.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/socket/message.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/socket/pool_supervisor.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/socket/serializer.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/socket/serializers/v1_json_serializer.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/socket/serializers/v2_json_serializer.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/socket/transport.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/test/channel_test.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/test/conn_test.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/token.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/transports/long_poll.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/transports/long_poll_server.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/transports/websocket.ex create mode 100644 phoenix/deps/phoenix/lib/phoenix/verified_routes.ex create mode 100644 phoenix/deps/phoenix/mix.exs create mode 100644 phoenix/deps/phoenix/package.json create mode 100644 phoenix/deps/phoenix/priv/static/favicon.ico create mode 100644 phoenix/deps/phoenix/priv/static/phoenix-orange.png create mode 100644 phoenix/deps/phoenix/priv/static/phoenix.cjs.js create mode 100644 phoenix/deps/phoenix/priv/static/phoenix.cjs.js.map create mode 100644 phoenix/deps/phoenix/priv/static/phoenix.js create mode 100644 phoenix/deps/phoenix/priv/static/phoenix.min.js create mode 100644 phoenix/deps/phoenix/priv/static/phoenix.mjs create mode 100644 phoenix/deps/phoenix/priv/static/phoenix.mjs.map create mode 100644 phoenix/deps/phoenix/priv/static/phoenix.png create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/AGENTS.md create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/auth.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/auth_test.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/confirmation_live.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/confirmation_live_test.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/conn_case.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/context_fixtures_functions.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/context_functions.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/login_live.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/login_live_test.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/migration.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/notifier.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/registration_controller.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/registration_controller_test.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/registration_html.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/registration_live.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/registration_live_test.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/registration_new.html.heex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/routes.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/schema.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/schema_token.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/scope.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/session_confirm.html.heex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/session_controller.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/session_controller_test.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/session_html.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/session_new.html.heex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/settings_controller.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/settings_controller_test.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/settings_edit.html.heex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/settings_html.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/settings_live.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/settings_live_test.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.auth/test_cases.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.channel/channel.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.channel/channel_case.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.channel/channel_test.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.context/access_no_schema.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.context/access_no_schema_scope.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.context/context.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.context/context_test.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.context/fixtures.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.context/fixtures_module.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.context/schema_access.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.context/schema_access_scope.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.context/test_cases.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.context/test_cases_scope.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.embedded/embedded_schema.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.html/controller.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.html/controller_test.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.html/edit.html.heex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.html/html.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.html/index.html.heex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.html/new.html.heex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.html/resource_form.html.heex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.html/show.html.heex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.json/changeset_json.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.json/controller.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.json/controller_test.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.json/fallback_controller.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.json/json.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.live/core_components.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.live/form.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.live/index.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.live/live_test.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.live/show.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.notifier/notifier.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.notifier/notifier_test.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.presence/presence.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.release/Dockerfile.eex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.release/dockerignore.eex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.release/rel/migrate.bat.eex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.release/rel/migrate.sh.eex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.release/rel/server.bat.eex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.release/rel/server.sh.eex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.release/release.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.schema/migration.exs create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.schema/schema.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.socket/socket.ex create mode 100644 phoenix/deps/phoenix/priv/templates/phx.gen.socket/socket.js create mode 100644 phoenix/deps/phoenix/usage-rules/ecto.md create mode 100644 phoenix/deps/phoenix/usage-rules/elixir.md create mode 100644 phoenix/deps/phoenix/usage-rules/html.md create mode 100644 phoenix/deps/phoenix/usage-rules/liveview.md create mode 100644 phoenix/deps/phoenix/usage-rules/phoenix.md create mode 100644 phoenix/deps/phoenix_ecto/.formatter.exs create mode 100644 phoenix/deps/phoenix_ecto/.hex create mode 100644 phoenix/deps/phoenix_ecto/CHANGELOG.md create mode 100644 phoenix/deps/phoenix_ecto/LICENSE create mode 100644 phoenix/deps/phoenix_ecto/README.md create mode 100644 phoenix/deps/phoenix_ecto/hex_metadata.config create mode 100644 phoenix/deps/phoenix_ecto/lib/phoenix_ecto.ex create mode 100644 phoenix/deps/phoenix_ecto/lib/phoenix_ecto/check_repo_status.ex create mode 100644 phoenix/deps/phoenix_ecto/lib/phoenix_ecto/exceptions.ex create mode 100644 phoenix/deps/phoenix_ecto/lib/phoenix_ecto/html.ex create mode 100644 phoenix/deps/phoenix_ecto/lib/phoenix_ecto/plug.ex create mode 100644 phoenix/deps/phoenix_ecto/lib/phoenix_ecto/sql/sandbox.ex create mode 100644 phoenix/deps/phoenix_ecto/lib/phoenix_ecto/sql/sandbox_session.ex create mode 100644 phoenix/deps/phoenix_ecto/mix.exs create mode 100644 phoenix/deps/phoenix_pubsub/.hex create mode 100644 phoenix/deps/phoenix_pubsub/CHANGELOG.md create mode 100644 phoenix/deps/phoenix_pubsub/LICENSE.md create mode 100644 phoenix/deps/phoenix_pubsub/README.md create mode 100644 phoenix/deps/phoenix_pubsub/hex_metadata.config create mode 100644 phoenix/deps/phoenix_pubsub/lib/phoenix/pubsub.ex create mode 100644 phoenix/deps/phoenix_pubsub/lib/phoenix/pubsub/adapter.ex create mode 100644 phoenix/deps/phoenix_pubsub/lib/phoenix/pubsub/application.ex create mode 100644 phoenix/deps/phoenix_pubsub/lib/phoenix/pubsub/pg2.ex create mode 100644 phoenix/deps/phoenix_pubsub/lib/phoenix/pubsub/supervisor.ex create mode 100644 phoenix/deps/phoenix_pubsub/lib/phoenix/tracker.ex create mode 100644 phoenix/deps/phoenix_pubsub/lib/phoenix/tracker/clock.ex create mode 100644 phoenix/deps/phoenix_pubsub/lib/phoenix/tracker/delta_generation.ex create mode 100644 phoenix/deps/phoenix_pubsub/lib/phoenix/tracker/replica.ex create mode 100644 phoenix/deps/phoenix_pubsub/lib/phoenix/tracker/shard.ex create mode 100644 phoenix/deps/phoenix_pubsub/lib/phoenix/tracker/shutdown_handler.ex create mode 100644 phoenix/deps/phoenix_pubsub/lib/phoenix/tracker/state.ex create mode 100644 phoenix/deps/phoenix_pubsub/mix.exs create mode 100644 phoenix/deps/phoenix_pubsub/test/shared/pubsub_test.exs create mode 100644 phoenix/deps/phoenix_template/.formatter.exs create mode 100644 phoenix/deps/phoenix_template/.hex create mode 100644 phoenix/deps/phoenix_template/CHANGELOG.md create mode 100644 phoenix/deps/phoenix_template/LICENSE.md create mode 100644 phoenix/deps/phoenix_template/README.md create mode 100644 phoenix/deps/phoenix_template/hex_metadata.config create mode 100644 phoenix/deps/phoenix_template/lib/phoenix/template.ex create mode 100644 phoenix/deps/phoenix_template/lib/phoenix/template/eex_engine.ex create mode 100644 phoenix/deps/phoenix_template/lib/phoenix/template/engine.ex create mode 100644 phoenix/deps/phoenix_template/lib/phoenix/template/exs_engine.ex create mode 100644 phoenix/deps/phoenix_template/mix.exs create mode 100644 phoenix/deps/plug/.formatter.exs create mode 100644 phoenix/deps/plug/.hex create mode 100644 phoenix/deps/plug/CHANGELOG.md create mode 100644 phoenix/deps/plug/LICENSE create mode 100644 phoenix/deps/plug/README.md create mode 100644 phoenix/deps/plug/hex_metadata.config create mode 100644 phoenix/deps/plug/lib/plug.ex create mode 100644 phoenix/deps/plug/lib/plug/adapters/cowboy.ex create mode 100644 phoenix/deps/plug/lib/plug/adapters/test/conn.ex create mode 100644 phoenix/deps/plug/lib/plug/application.ex create mode 100644 phoenix/deps/plug/lib/plug/basic_auth.ex create mode 100644 phoenix/deps/plug/lib/plug/builder.ex create mode 100644 phoenix/deps/plug/lib/plug/conn.ex create mode 100644 phoenix/deps/plug/lib/plug/conn/adapter.ex create mode 100644 phoenix/deps/plug/lib/plug/conn/cookies.ex create mode 100644 phoenix/deps/plug/lib/plug/conn/query.ex create mode 100644 phoenix/deps/plug/lib/plug/conn/status.ex create mode 100644 phoenix/deps/plug/lib/plug/conn/unfetched.ex create mode 100644 phoenix/deps/plug/lib/plug/conn/utils.ex create mode 100644 phoenix/deps/plug/lib/plug/conn/wrapper_error.ex create mode 100644 phoenix/deps/plug/lib/plug/csrf_protection.ex create mode 100644 phoenix/deps/plug/lib/plug/debugger.ex create mode 100644 phoenix/deps/plug/lib/plug/error_handler.ex create mode 100644 phoenix/deps/plug/lib/plug/exceptions.ex create mode 100644 phoenix/deps/plug/lib/plug/head.ex create mode 100644 phoenix/deps/plug/lib/plug/html.ex create mode 100644 phoenix/deps/plug/lib/plug/logger.ex create mode 100644 phoenix/deps/plug/lib/plug/method_override.ex create mode 100644 phoenix/deps/plug/lib/plug/mime.ex create mode 100644 phoenix/deps/plug/lib/plug/parsers.ex create mode 100644 phoenix/deps/plug/lib/plug/parsers/json.ex create mode 100644 phoenix/deps/plug/lib/plug/parsers/multipart.ex create mode 100644 phoenix/deps/plug/lib/plug/parsers/urlencoded.ex create mode 100644 phoenix/deps/plug/lib/plug/request_id.ex create mode 100644 phoenix/deps/plug/lib/plug/rewrite_on.ex create mode 100644 phoenix/deps/plug/lib/plug/router.ex create mode 100644 phoenix/deps/plug/lib/plug/router/utils.ex create mode 100644 phoenix/deps/plug/lib/plug/session.ex create mode 100644 phoenix/deps/plug/lib/plug/session/cookie.ex create mode 100644 phoenix/deps/plug/lib/plug/session/ets.ex create mode 100644 phoenix/deps/plug/lib/plug/session/store.ex create mode 100644 phoenix/deps/plug/lib/plug/ssl.ex create mode 100644 phoenix/deps/plug/lib/plug/static.ex create mode 100644 phoenix/deps/plug/lib/plug/telemetry.ex create mode 100644 phoenix/deps/plug/lib/plug/templates/debugger.html.eex create mode 100644 phoenix/deps/plug/lib/plug/templates/debugger.md.eex create mode 100644 phoenix/deps/plug/lib/plug/test.ex create mode 100644 phoenix/deps/plug/lib/plug/upload.ex create mode 100644 phoenix/deps/plug/lib/plug/upload/supervisor.ex create mode 100644 phoenix/deps/plug/lib/plug/upload/terminator.ex create mode 100644 phoenix/deps/plug/mix.exs create mode 100644 phoenix/deps/plug/src/plug_multipart.erl create mode 100644 phoenix/deps/plug_crypto/.hex create mode 100644 phoenix/deps/plug_crypto/CHANGELOG.md create mode 100644 phoenix/deps/plug_crypto/LICENSE create mode 100644 phoenix/deps/plug_crypto/README.md create mode 100644 phoenix/deps/plug_crypto/hex_metadata.config create mode 100644 phoenix/deps/plug_crypto/lib/plug/crypto.ex create mode 100644 phoenix/deps/plug_crypto/lib/plug/crypto/application.ex create mode 100644 phoenix/deps/plug_crypto/lib/plug/crypto/key_generator.ex create mode 100644 phoenix/deps/plug_crypto/lib/plug/crypto/message_encryptor.ex create mode 100644 phoenix/deps/plug_crypto/lib/plug/crypto/message_verifier.ex create mode 100644 phoenix/deps/plug_crypto/mix.exs create mode 100644 phoenix/deps/req/.formatter.exs create mode 100644 phoenix/deps/req/.hex create mode 100644 phoenix/deps/req/CHANGELOG.md create mode 100644 phoenix/deps/req/LICENSE.md create mode 100644 phoenix/deps/req/README.md create mode 100644 phoenix/deps/req/hex_metadata.config create mode 100644 phoenix/deps/req/lib/req.ex create mode 100644 phoenix/deps/req/lib/req/application.ex create mode 100644 phoenix/deps/req/lib/req/archive_error.ex create mode 100644 phoenix/deps/req/lib/req/checksum_mismatch_error.ex create mode 100644 phoenix/deps/req/lib/req/decompress_error.ex create mode 100644 phoenix/deps/req/lib/req/fields.ex create mode 100644 phoenix/deps/req/lib/req/finch.ex create mode 100644 phoenix/deps/req/lib/req/http_error.ex create mode 100644 phoenix/deps/req/lib/req/request.ex create mode 100644 phoenix/deps/req/lib/req/response.ex create mode 100644 phoenix/deps/req/lib/req/response_async.ex create mode 100644 phoenix/deps/req/lib/req/steps.ex create mode 100644 phoenix/deps/req/lib/req/test.ex create mode 100644 phoenix/deps/req/lib/req/test/adapter.ex create mode 100644 phoenix/deps/req/lib/req/test/ownership.ex create mode 100644 phoenix/deps/req/lib/req/test/ownership_error.ex create mode 100644 phoenix/deps/req/lib/req/too_many_redirects_error.ex create mode 100644 phoenix/deps/req/lib/req/transport_error.ex create mode 100644 phoenix/deps/req/lib/req/utils.ex create mode 100644 phoenix/deps/req/mix.exs create mode 100644 phoenix/deps/telemetry/.hex create mode 100644 phoenix/deps/telemetry/CHANGELOG.md create mode 100644 phoenix/deps/telemetry/LICENSE create mode 100644 phoenix/deps/telemetry/NOTICE create mode 100644 phoenix/deps/telemetry/README.md create mode 100644 phoenix/deps/telemetry/_build/prod/lib/.rebar3/rebar_compiler_erl/source.dag create mode 100644 phoenix/deps/telemetry/hex_metadata.config create mode 100644 phoenix/deps/telemetry/mix.exs create mode 100644 phoenix/deps/telemetry/rebar.config create mode 100644 phoenix/deps/telemetry/rebar.lock create mode 100644 phoenix/deps/telemetry/src/telemetry.app.src create mode 100644 phoenix/deps/telemetry/src/telemetry.erl create mode 100644 phoenix/deps/telemetry/src/telemetry.hrl create mode 100644 phoenix/deps/telemetry/src/telemetry_app.erl create mode 100644 phoenix/deps/telemetry/src/telemetry_ets.erl create mode 100644 phoenix/deps/telemetry/src/telemetry_handler_table.erl create mode 100644 phoenix/deps/telemetry/src/telemetry_pt.erl create mode 100644 phoenix/deps/telemetry/src/telemetry_sup.erl create mode 100644 phoenix/deps/telemetry/src/telemetry_test.erl create mode 100644 phoenix/deps/telemetry_metrics/.formatter.exs create mode 100644 phoenix/deps/telemetry_metrics/.hex create mode 100644 phoenix/deps/telemetry_metrics/CHANGELOG.md create mode 100644 phoenix/deps/telemetry_metrics/LICENSE create mode 100644 phoenix/deps/telemetry_metrics/README.md create mode 100644 phoenix/deps/telemetry_metrics/hex_metadata.config create mode 100644 phoenix/deps/telemetry_metrics/lib/telemetry_metrics.ex create mode 100644 phoenix/deps/telemetry_metrics/lib/telemetry_metrics/console_reporter.ex create mode 100644 phoenix/deps/telemetry_metrics/lib/telemetry_metrics/counter.ex create mode 100644 phoenix/deps/telemetry_metrics/lib/telemetry_metrics/distribution.ex create mode 100644 phoenix/deps/telemetry_metrics/lib/telemetry_metrics/last_value.ex create mode 100644 phoenix/deps/telemetry_metrics/lib/telemetry_metrics/sum.ex create mode 100644 phoenix/deps/telemetry_metrics/lib/telemetry_metrics/summary.ex create mode 100644 phoenix/deps/telemetry_metrics/mix.exs create mode 100644 phoenix/deps/telemetry_poller/.hex create mode 100644 phoenix/deps/telemetry_poller/CHANGELOG.md create mode 100644 phoenix/deps/telemetry_poller/LICENSE create mode 100644 phoenix/deps/telemetry_poller/NOTICE create mode 100644 phoenix/deps/telemetry_poller/README.md create mode 100644 phoenix/deps/telemetry_poller/_build/prod/lib/.rebar3/rebar_compiler_erl/source.dag create mode 100644 phoenix/deps/telemetry_poller/hex_metadata.config create mode 100644 phoenix/deps/telemetry_poller/rebar.config create mode 100644 phoenix/deps/telemetry_poller/rebar.lock create mode 100644 phoenix/deps/telemetry_poller/src/telemetry_poller.app.src create mode 100644 phoenix/deps/telemetry_poller/src/telemetry_poller.erl create mode 100644 phoenix/deps/telemetry_poller/src/telemetry_poller_app.erl create mode 100644 phoenix/deps/telemetry_poller/src/telemetry_poller_builtin.erl create mode 100644 phoenix/deps/telemetry_poller/src/telemetry_poller_sup.erl create mode 100644 phoenix/deps/thousand_island/.hex create mode 100644 phoenix/deps/thousand_island/CHANGELOG.md create mode 100644 phoenix/deps/thousand_island/LICENSE create mode 100644 phoenix/deps/thousand_island/README.md create mode 100644 phoenix/deps/thousand_island/hex_metadata.config create mode 100644 phoenix/deps/thousand_island/lib/thousand_island.ex create mode 100644 phoenix/deps/thousand_island/lib/thousand_island/acceptor.ex create mode 100644 phoenix/deps/thousand_island/lib/thousand_island/acceptor_pool_supervisor.ex create mode 100644 phoenix/deps/thousand_island/lib/thousand_island/acceptor_supervisor.ex create mode 100644 phoenix/deps/thousand_island/lib/thousand_island/connection.ex create mode 100644 phoenix/deps/thousand_island/lib/thousand_island/handler.ex create mode 100644 phoenix/deps/thousand_island/lib/thousand_island/handler_config.ex create mode 100644 phoenix/deps/thousand_island/lib/thousand_island/listener.ex create mode 100644 phoenix/deps/thousand_island/lib/thousand_island/logger.ex create mode 100644 phoenix/deps/thousand_island/lib/thousand_island/process_label.ex create mode 100644 phoenix/deps/thousand_island/lib/thousand_island/server.ex create mode 100644 phoenix/deps/thousand_island/lib/thousand_island/server_config.ex create mode 100644 phoenix/deps/thousand_island/lib/thousand_island/shutdown_listener.ex create mode 100644 phoenix/deps/thousand_island/lib/thousand_island/socket.ex create mode 100644 phoenix/deps/thousand_island/lib/thousand_island/telemetry.ex create mode 100644 phoenix/deps/thousand_island/lib/thousand_island/transport.ex create mode 100644 phoenix/deps/thousand_island/lib/thousand_island/transports/ssl.ex create mode 100644 phoenix/deps/thousand_island/lib/thousand_island/transports/tcp.ex create mode 100644 phoenix/deps/thousand_island/mix.exs create mode 100644 phoenix/deps/websock/.hex create mode 100644 phoenix/deps/websock/LICENSE create mode 100644 phoenix/deps/websock/README.md create mode 100644 phoenix/deps/websock/hex_metadata.config create mode 100644 phoenix/deps/websock/lib/websock.ex create mode 100644 phoenix/deps/websock/mix.exs create mode 100644 phoenix/deps/websock/test/test_helper.exs create mode 100644 phoenix/deps/websock_adapter/.hex create mode 100644 phoenix/deps/websock_adapter/CHANGELOG.md create mode 100644 phoenix/deps/websock_adapter/LICENSE create mode 100644 phoenix/deps/websock_adapter/README.md create mode 100644 phoenix/deps/websock_adapter/hex_metadata.config create mode 100644 phoenix/deps/websock_adapter/lib/websock_adapter.ex create mode 100644 phoenix/deps/websock_adapter/lib/websock_adapter/cowboy_adapter.ex create mode 100644 phoenix/deps/websock_adapter/lib/websock_adapter/upgrade_error.ex create mode 100644 phoenix/deps/websock_adapter/lib/websock_adapter/upgrade_validation.ex create mode 100644 phoenix/deps/websock_adapter/mix.exs diff --git a/phoenix/_build/dev/lib/bandit/.mix/compile.elixir b/phoenix/_build/dev/lib/bandit/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..aef0311fdbbe453e9a96164360c764512b513eaa GIT binary patch literal 13428 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/.mix/compile.elixir_scm b/phoenix/_build/dev/lib/bandit/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 WMI-|h@-ZX}3MdTt&oS@^-2X3!wA#J^ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Application.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Application.beam new file mode 100644 index 0000000000000000000000000000000000000000..23b117b87e4d0efca9c91247c8011fd5cec1df6c GIT binary patch literal 2616 zcmaJ@3s@7!7T!$|!aF29K137|ANUDL04We335ZA)UCvcJvNU0i6 z)2a|DNfBB(#m7*U6d_bHEd50~LP>^{rj=qyN=8sDhvA6gwHk!TL`j@5m=qEfiYY}T zg=;);rST&_mZJ}f0VR^=GZHdS-~&Nncp3usSr5PlpxYq;M*wq}T@Eogo^04d$lU0{ z;`rr-=EZ4K5h8Jowlr^h_~Gd=Uv!qqg+(F`=wn0?5E!JQ2sRirA_nMJikrfyC-Jw^ua)jU)v^U!W zW|?BKa%96Shri}zaZGkjfaT7#0S^f(0ou#hc)9RLG>-lxN`Ji^1_ zdXv2f@S_0e{lfsX9WB$%9)JTt^RyrRo1V{lc%*s80+gcH%?F^H8Nira73dim4BaTx zHhclC^$~hxiJvL`k=44n0S%s3}kPb z)A;ttmXOAYjokavD?RP|g&W3{1}1K&mYkjA*@&rK>N>W1GYYG7wzNrVkGk5JZ_X5d8>@;ReR+)SFI3up z+~z$lZj9^LEE#y*TD|?wwC(wkB^^h;sGn%@Zs)Cm1>qMKyeo2_TohKEefumvy39^K zcT`j|XXVDVhZ4lQ;=OIToyztczO3YPwrX5`%p*;gYglvO#nP<}NyZxM89SlV&|uzR&tswpv1 z+x=n9ppwd&IpH_M;G|!@7e#i>at|0^)BgF6_+!~81~b;b{;H{a-Ymtb3T|(;jl27k z;E=*2b*+oNvdXPP)KB_ulsHThjDHw2V?&rlW=a1~z5G2ty%n|_UH&++1}U#?`dW3Y zXsl&$K7XLymg-oOGIrs`?PV{MbKW$gvx&Ii*KzGhOFITN4#zYVeTi-Fvi{i>{@`Xx z>x+ZWu6KX8=~v%uA6DqtBh{8G`;+e0lsx~(-5;~^evFGd2X+9!*$3pLt(@U){P` zT;;##`i2B$4JNhdb0PEb%WJz2e97(J)w8M3_UzJuXw~V~#JS&Z$co;qtrRvIy4HGI z+u5$-+69JM&-^hda7uFa_H0fNT(#qOeag`p7PGzd;^0~Tewp*8*W+2t$-xf3BE%_Uth6eT~zche0E+}!29ueqbgP- zB?jjR=^4wIwpOpL*P`P)4^J-FEH5paU0HbZ(ZwJ7Z(W_AGBv4wMW2l~&nP%)S?v{x zv6h!kW<@+`?+JCQy4+$c|1!mp-+V0aoPuq3`((7P)8)BaJi|3zd8#Z{G^qB8?#9#fmvCsFrt3!R-@bH7G=Tp-nhzjhoQYTjrER_ z2?KRC?d$3iF1;>FN>nz*KFIQ7nR(xjuQ>GZsh9fE&91JQUx#JyTBUQ^yyU)d-{3&A zXR!UfqNx7gS35J=Q=6y!D`?){`Yl(*i&njA>*`Rj#BX^0-+i<11GM7g+6~}_4A+M# z!SE^<+;9$v=@}xCXCQJVLP#bT>s~F4JGh21eytICXZ5Uctii3k00M}I)A#Kz$Y*$*w06y o&k9NxjOYZuf*{`jQvn#VHi>^P0uYptrJ-Z88jb_DAB3R)0=*u;c>n+a literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Clock.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Clock.beam new file mode 100644 index 0000000000000000000000000000000000000000..94d9a8cb9285de302ab59ff984d2017be6f1ff35 GIT binary patch literal 5000 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.DelegatingHandler.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.DelegatingHandler.beam new file mode 100644 index 0000000000000000000000000000000000000000..8be11bc03b3e8e883dea4c7bd9326d1ff95417d8 GIT binary patch literal 19276 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Extractor.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Extractor.beam new file mode 100644 index 0000000000000000000000000000000000000000..7491021fa6cb938b65bb2fbbfff44ccfdcd622ff GIT binary patch literal 10664 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 N|HDKclr4&a`Y*P`OlAN8 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP1.Handler.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP1.Handler.beam new file mode 100644 index 0000000000000000000000000000000000000000..169fbda04a0282e256e1e6ccfdbe812fa2d539f7 GIT binary patch literal 25732 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 Ro`eUOFMr^F8u^Ss{4biSXcGVc literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP1.Socket.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP1.Socket.beam new file mode 100644 index 0000000000000000000000000000000000000000..2c21a6468af38d8b121a52e3e8e33c5de3b3a99a GIT binary patch literal 4420 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Connection.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Connection.beam new file mode 100644 index 0000000000000000000000000000000000000000..c8004f8527e21172ae3bdc5e28312d444a969c62 GIT binary patch literal 43460 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Errors.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Errors.beam new file mode 100644 index 0000000000000000000000000000000000000000..1c2d4d0b90e52b24867011d9139337ac981ef05c GIT binary patch literal 5260 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 Lh9D`AA;^CLi~KAu literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.FlowControl.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.FlowControl.beam new file mode 100644 index 0000000000000000000000000000000000000000..2997c9b2fcf0747e5198268b87c4cf289c6a59cc GIT binary patch literal 3276 zcmc&0X;@QNHZK9n8bU%u79}bz$d&+#Y}JIYMMRLr)Co=q$x8?%@1@BLK^#Cu)QSp< zq9`iX1q4|{EUgIcSX>YlMMW&`m8FWU+Oo*p2RLKrbH0A_Ywq`*d(S=lJ@4InPDo_5 z2Z3OEJ}{UQ!NKBu2n0gk=;&yVp?$DIo+ekj2Z|7h9CHtgjg9hj4^f~xE{b4kRIx%R zlp|79C@c|Sm|C8w#bAv}j4D-f1zaM5Rccr)!eB`aoTft6m`13S%+8l;5iur55lw

2}~eBuHf7h0Qjf{ zFbRMGL@6Q=snaPC!=JRx%8=@r6POdNO@!5PtF&8kz74LO4YAl~Ni>Mfrh++&9ZCR8 z0y~rf78RQa<`rxb4KNon2vEKO#f%P>6j6xO*9@qph>@Ys0D>gP3rpC*8=pj>uqX#e zRtyqEgH9K*GW017K8dj;3w#cmi9U-@V~yiQY+RF1V*@UU!eZb$G~lbPD2hlmrZJ%I zq68qpz-_-7QvtTwpc;O z0#y2!W|pKFOdSg%Ch(Lhd}RaB2Ve$(41hR+K;5=JmabO_hi!^7)rskghYy9Z$bD#qi)^Ml8Y|7-Y4=YWd@R>!fJA>e|PszLDh zA%sF`pXIs!ZH`@IK!3#cJIFwDax#I-L!^LvcTAoHLRs??|$)@XD_QZ=dsWHqca2U0i!c(6(Y2xLGIX)#nNSK?PW z8Q3+@pjx#UP9elI<21l0Qz923BB@-;j6tQC4rnnoNhpfR5t$pD3R1vSC801PPh*0Y zLBmWOdsCPSdEy5&3By#LOeuI?fbX&Q#T`z=KSEHVOb%jC%8mjFyO~zp$nQk%dsDh{ zPgXVdej%_5zIkF(uLJwu=?XuN$&-DY&iJ;Ib(}{GroP^Mn@Xqf1MEfN4a||^_n}!= zrYue6zPzzzj#K$(oaxu>$k+0@3-9p#=YIc3`##t1*1oTl+y&RlRP6I2q4HMNG4b6O z*xbdPLGw9X@qv>LbIy(g7-)x<8SNYn+!6WoNk>5e-`tUzShYv}g?`>PdfQ~G!|&%Z zcdh(Uv6mV`w7G+(G3XWvvT4t^)V{E|vV!Mt=F3W#4&_U~6TH6Xp?$u0-_{pg|I^d# zs%^wXS+ebQV!-q>dF?D2ah(-)&YG|#t39T^4cm_0ViZh&cc911rozI=p?jF!)*TQn zwkKX);A$Z$2sYfS1e^(5$V@ModyTjJqW7y`fV+?!9f`G)H2s8 z`k7H!zVt#}%B39D5%i$9(F+AF!qmTP@56U6et@Ik1U{7gx+O)LN zORJ8>UUAHpbhSL?{dCiyQTVW(uzjj1=2iyv_$mSKT_MkYR{k#;Wqp1vp}j3tyMF1Y zZOB?0AKzYapfr8%-iBNL>7Hn1rAyxB=JbOhIY#qlJ8OiteZAhWY4@9L*LkV8V?yRM z?sxl9YH=y9vZqx3`}+ z`23~)7kQ2s7Y%G}Sl;oNxBiFLGe@2@S+3GK3H4rOq?MigeJuA16vPMPJ#T+BFj(kJiR#jkd%drbFM zJC-7YCBAW+Mvuk%-Zp5wRp@NiJ$wHlulAW&M~ohJ%nujG{O!i}T}BV)9BC3X_YKb^ zJ*{g!h)V7%zFO&rWbqzl1}S7mC-Z2@=~s)%g_$iksv|~=H?L0rnX&GC`=q7Fk@wz` zJKX2!1Mxat*LJ8s+aGD7Sy2Xgyeu9wM4VMpnJ;KWw|fYb|HdwfQ?%t#g0VSux_* zP5wbpq5WnjRyaM*Ik)n{Y(f3hIc-8-bdH|wnjJ0Mhsv$rgFc_ z{=wVjxpUit=DfTK-&)Hro2!V*2y04?1ye(l>&vSllJ+qF>GfuHzYm+VOtW?mLd6>J z;M(Hv4Rk-Pcw_#xh38nN&7EX#y*?td<{X)8qxaT%oo)2f&)vW7xEHs@n;seIJs?{( z#pjQLd6(a3e0R*p>)Q<90FFiJowl&5tF?-$D${cPdM~Q)LO1JdyDeVdY!}qA@_%dX z7`RtjepF975b;_gV3U_ksh+!=ys8VX?zyo4*Gm*uZ0up#;Xu8$mjs*H!>M`P6D58w zKhAQ_-pv;za5=N5)y?ix*QmOh^#xLo6C#9NeqQ#?UzkktC2ZiS;GMx&4 zvfOp*{rq>W2l;mIZkr_b*F^MZsa$EHBT&ZBzFCCeG;Rtgs${$hTEJs%qEMU!i&J2= zFx3OY3zqJ)iN0^5`~t~O7vOPel145ABKn}C1kE3AAc;7pIblq)3=t{iVx1latCgRk zCI6W?zSGCFDg`_q0ZC^dR-hVK@{w7CL^-AusYIsZ;{VzvCnx<6;(EzoB>mS;V%+xs z=YV=53{~QJ)gquP7>|UArc5O3ug?1^?eV7PKMX*420*c10Gey??Kl8F3}b*80D!31 z2aK$Z?2H_YJ|{5#s_+Aa*kvl*mNNjnkJC3FB{(sh05;Zcj$@}lXFQJKJu-ptPs!4r A-v9sr literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Continuation.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Continuation.beam new file mode 100644 index 0000000000000000000000000000000000000000..85961255faa0c25a14e98bad81138f68239f3d74 GIT binary patch literal 4760 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 Z?Wkl0A&YpQ5bqVz$d4=r_zrG5{|hCNpo9Pb literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Data.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Data.beam new file mode 100644 index 0000000000000000000000000000000000000000..c0f3dfe87617fb8897880b3d662e7f625efc51de GIT binary patch literal 5652 zcmcgwcU)7+_P;j)2}lVrcy0z!h3V!;g^ltrqDt0p12feUFSHwFtzRTNo478PY( zP{EFK8m>pM@NTGaSfDlMTo0E7vrX}*{E0` zVY5rQ7$!sG6&NCy@+2ZDDnv^8h*XB~xER8(LQ

8760o`0n`vg_wt-60w{k;__q? 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 D{p~Ws literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Goaway.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Goaway.beam new file mode 100644 index 0000000000000000000000000000000000000000..261a16bb5aca0d797bccb77aec5fa8e0466f3d59 GIT binary patch literal 4764 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Headers.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Headers.beam new file mode 100644 index 0000000000000000000000000000000000000000..011a2b74146f96a7e120979882e769d48dffb2d9 GIT binary patch literal 8556 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 Xf94>6l98v#DUygX1w+WMsu2GJv4bQU literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Ping.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Ping.beam new file mode 100644 index 0000000000000000000000000000000000000000..66ac265755ca336dc4ddcc3eb507287459a2e179 GIT binary patch literal 4908 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.RstStream.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.RstStream.beam new file mode 100644 index 0000000000000000000000000000000000000000..bc1e966e5c1ec1f54851fbe1cf6ef9716caab169 GIT binary patch literal 4700 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Continuation.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Continuation.beam new file mode 100644 index 0000000000000000000000000000000000000000..a613eec3128f0237538038913bf215b99c0304f7 GIT binary patch literal 4572 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 K<7L5g0sjH)CJ{UU literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Data.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Data.beam new file mode 100644 index 0000000000000000000000000000000000000000..c68291c51dc5af5a38cbd34ba587ee533cb9f993 GIT binary patch literal 4828 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 mqwyezf8XALg@P;L&&gJ!z` literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Goaway.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Goaway.beam new file mode 100644 index 0000000000000000000000000000000000000000..00ff4d5bf6f8af6455b28af91055699026149b5c GIT binary patch literal 3732 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 EH+8M%=l}o! literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Ping.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Ping.beam new file mode 100644 index 0000000000000000000000000000000000000000..f90056e67bb36e93d2c2b6e2fc4a6391a1e5eb21 GIT binary patch literal 3984 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Priority.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Priority.beam new file mode 100644 index 0000000000000000000000000000000000000000..f1cf50e7564393a511e5bb899025f16dd6427c55 GIT binary patch literal 3720 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 IkpmF^Z?NC{5dZ)H literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.RstStream.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.RstStream.beam new file mode 100644 index 0000000000000000000000000000000000000000..ed0f57540f0b96b1df3799870aaf60285d5cb9ae GIT binary patch literal 3552 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.WindowUpdate.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.WindowUpdate.beam new file mode 100644 index 0000000000000000000000000000000000000000..a1a0311fad96ab8b06d58adb5492bc0b4a85fd36 GIT binary patch literal 3620 zcmbtX4OA1?65eGaglJ%a0EO@qfnybw1ZY*LXaM=q#zN)K+G^M&3)zs(hTRRp`pN+* zSZh^|6%`F=rC_z%2HX0JzaTA&t)f1)mP#r3527B0%JcB<2C&-G_SpCKoY{NtH*@FC z%#9nP$H6>f)cE1YCxSW8G$_1Q)Gjf3&7}|lL58PXU+PMlu z5}1!#9wJo_GZ55MB5)6!_%Kl5Hb#c-^px;KawMoq=rY9e5Jd@HVZMu8;Neywagd;! zg&v4R;1z?Qh#V2YeAgr#9AbyK%G_YSJ1U0&C=>Vyyo30tL;oz0@5GxpF(jM*`Z zrbqzOxY-#7C;^DQ;$SE+L{)Ua{ql>;k@n5CWtiHV3KAr!mD@Jrw4b>y~A zxu@OVjOQBfe3y62sd4c86SEKO`8sFnob?zxNjh!puJyZOW(Ni~-)(P9>fB|Sx#5GFLz7fG$tk^b zeQxuyg11*^mM4gVK8js+FX5LO`o@MGfmi<#!19K#hK*49R+rL`r(qLTQ;w?8Ya z7C#mZKC~{tLvG}yS1u;3g4PqI_h(E_ICL=DHzXly=bN`Z{0{xL?8xAxzP>4^!g%Dg zwuu{7FWdClruaB*_9v$YT9&_ax%*?ws^#J1yt^KMTfFy7!}X@v>PqV1gU}h9VyKAu z^1U*@Bdyt1p8@UGj+1L^PdnWzwD#J+J@Ms9-!C{tj-6f9J?U$qwITD9C+cmg-h02^ zyxHh9aD7harQcqkrc}gq7xY`FS2uX4cNq>#(77X@lL!TczI9lBk}qsQf2vKY}135CqI>JR%mWb-gh@?M}5HZ zRZUGjQ>WhD>2+C{V$5*+VXo2Aa(hwN5}D%X@+(BG!_0sIZ}Iw#^NOZ)Bc^KSFQ)YF zZ}i+fgHbe{C7UiTy*6n_2K;K+muG5@7RXX2NM|bhq7DXjuXXC{sB+i#6m4*6{5 z$cHUI5NDn07d6(D?u+atHgt}_x{JSB$j&>`MIBjOLY+ma8IT|&xo-`=nr|VKo8M@Vp>uz1E$JTp;d!@U z*T$`z3wa$MoTvAUyZ33;D|LZawg(>edwJpeg;#Ezu3x;u(!cynMb|*~hJny^=htlC zI{rZJrO5Q6%Z}aU{;#{*m5<)^$q~hy$E#Si-mCD^)gzDUJ4daRtgol0_vQYHHlM61}k2Nn`TbHz=DJ*)6WSeD|sb~62nsi-vBDvY< zueUDHrJfHf`UWSYr{>H_s%F1fR9DX&oxU9{n)(g2%yCa;S5bXg?99{R@`%=xNfFz2 zghVXsxBB&8_Hf@QcPZ#p6vG?WMHct?U5oRtpLpxhtc6R@U5LH+)sB9uU3olw$sGp_ zGGE`eBE0@i?DUXe?c$lV_>3fc-hy9d20U^0syeoF{9%}}uWW;$xct~0P?q)-gG}i% z+_|Z>xH<=?m3g5oSAfh8!wu?ixd4(+D+mS;i69J-4e(K*-vxai*agZZHw?2KG>Z)w zNvMZ}c^FHPoV3XR3c#=eP)>BZzvllQWJp(9Zl zF>x6EGrM_uf?S80OYYZTS)8RY_$^Q#1I^k>p literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.beam new file mode 100644 index 0000000000000000000000000000000000000000..df6010533ed3b9fe85d8543dc8ba60c74abac5b3 GIT binary patch literal 5700 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 Sx&R-m1_b{Wk<%C@!2bv9CXy!r literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Settings.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Settings.beam new file mode 100644 index 0000000000000000000000000000000000000000..3ccc6458d0a4dce5aafbb65d126a6b7445d6a722 GIT binary patch literal 7888 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 G=Dz?1^j8M} literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Unknown.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Unknown.beam new file mode 100644 index 0000000000000000000000000000000000000000..a83cac76c42774eed1bf45ea88ea1cd6a5e721a1 GIT binary patch literal 3980 zcmb^!c~}$IbCVDV_Y#m0L< zDx`=SAyAP5O-G_-3ekMEN+nvLz(vv=FbfeWg{V}ZS)f8Vcyh%%S{Y8hZ}swq`vUWP z`M!x_kyI&CMI!`(6AYL4MNmwEVu%!ofyu82uRQ@&KoAs;OA+A57=Xe6$W{r!4S*#D z&WET>FPOp!p>1F>n10z|*)du%Ld0fjbF=jkRe=<~AQGZEQUn4f_(lsNVbCQCA~~Q_ z38>(^R6uhC%qR{-$uWm*`%{YZVJh<$M5z!&@&UiWFoY?W;2=I}0tbe7LEbC~a2@lZ zC_YU2DW5}SS~&PLh5@OB!DW91CAF$@-4u^d6ILvk!f-J|{~7zGfQmq3SH8 zh)kqaXmm6TRp{t46j4ZZX5_K`2%l~^?jI4bd~*XnB4lB@E~ITE4K~q|s5+~+mqP@7 zFs6X9^*h&2WJb<)&QgLe?9_8-%p@_A`Cw^vP-&7G1JLAI$SAY5$bWtz%=jP^}W_Frg_^5<(S$OAxhMXDK6aB_I=s&K^jS2;dzO%ln-k*W2K-X0EDX`nrTwV&9!n=Yp~i$z8=}^bL)YugX)#}!0h}&}64bnPeO6SD!#HMOo6iKz=CWxA14VfjpMNU~PxCxr zeaWq*gS#H zm~?jFoY|H?W)^o8gcjG_-dspU*a(i_UvKz9!n~x|w^dJU`9{ zk6&B9vY}$O#P3pj`yd_X8}GgK`EdmYYJXn5V}(!MwJ&RaUNNaWZnyq?cY&YRh>E24 zwQ*x@2h~>j-e$PH zL&jQIT)fvgMwNT}SV#6my)5{Ulw-XtRsOWjEDuVDukIJN9X~ZYcs2i9{ov$A^?~OX zY6GF*^rN|71VZ#Ht9QCh?YQZpy->E{Y}1aK8S4XzI-FHYMudp-ulFWC-n#Sry1$0b z-O&}8wSKp@#ix0@?rGwzUr#>&Bf+EU+7G3F25yWPUwI{A*S*5{%O%Zx(fX9nZ8!et zQQy=Lo7{_3zATBK>R;d0QW7}Le=*%MZSad9XDo9X*p?XGIeA`3dQDlkLff3M?5CB_ zp4+rmF1&Q<8X-@Bvvh%SE&2aiZ-mBI_)Ii zW_f!|_3$wl6X1HzvH;i0C6L7_2g{NA#^jDcf2qm`&lv&tZI<#~m<0#cl^m(|_~YQc z_AzmXE_MgOZSL0y&%=WmnUXB)ldkuM?j6>)C8x-n{r!WsE;IUt(gJPWfyf)D-TXN* zb*bq-UJTD+54&obGaX`|G|mf1El9C6%N}-p-Oz8d?ed)`u_sHQ5t{6YoNzPe8|(~RVh_)w_gpOBQx!At#t&nTw-{e#a8jxw?>qzf>S z5|scCAcWH7%nyhL)$i9}AJ=WDGeJz>)BR8D{a4xtb{VJ9HCmMd`5@@zkZR=rQy{5$ z@_#!pMt>O3g$e(^hu@_4ZIq1!5KOXxniBi~g6)I=c-^c3V)z$ehFZEno}a9$pqZem Q2Xn}IWL-+J?}MQK0lp@74*&oF literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.WindowUpdate.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.WindowUpdate.beam new file mode 100644 index 0000000000000000000000000000000000000000..eeeba80d375ff0ff8619852ce6f9384e84073351 GIT binary patch literal 4784 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 V#AIP_N9^4}uoz&|!S~BH@Nb|shmZgO literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.beam new file mode 100644 index 0000000000000000000000000000000000000000..44262cc1142f3762e9022adf05a6999d5498dcbf GIT binary patch literal 5956 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Settings.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Settings.beam new file mode 100644 index 0000000000000000000000000000000000000000..4289d9fc379d01d8cce7b93e479060e41d760c40 GIT binary patch literal 3464 zcma)93se(F7v4=sh)6UfJQZvx*dhuEs71v`01>f>fT*-+!zS6lLb4loH!QZImWPTW z^`Ib%Rk0kbA`1NxL2QdurLE6j1uSR_C}L55wJKt(^3NtvD~I-U&iQs`?rZMc%-lPf zw?K+FkFY>s0N4u<-y6|?tqCPLW6>sxI+*m z0$^JOz!(4lEZPZi#BYmWsXsT*K_K?c49tu&s!(!CnlU$XfACjRVYwm%;!0qJLJYnU ziVzX#;uIlL&>0jQ@Li|iN&qul3c*|XBB2w!Z>NYO?ttKOMTi{m>r7J-d|BitXI+qr zM5U0M0|dB|olv-31h=tHSlK}EL)MN+3JXkbS=oqSfz4~{04EU1iLObpZ0O@X_ ztt5~Oxdn1X+(Mp&D|e8(fkg$jBDu7f>map~NWw*OSYXGO3LRj9y~%_fFySyuXb%e< zO>=v&kkc%oBX==PMzaA5)f?D;3V;QGHGmL+127tZjUyLekPZ)wZ9xwQr{?%s=LmVIpb{_;67$hv{!3`j^lT35hve!*2Yw5)?+Lqk-=p0POj+ z2Vl>V6M!862fzW~&$AQ&avzwR!v=#eag!;WJwGrmf{veT*FVnUm6c4sS@Orkj)RGb zP*5nY1>8ncn7KgSG8rW)kP?$1?sRWCOCSuU6v-N~V4QG5Nf{6Z2dBrBT1lmWB-AKH zF(b4jp$B9VWkv%jb^v&&0RetXlS8L`Pd#hFpx#X1a6+FGmyho;(zAb+6*=jj*+A9^Yy1 zy4svzy@S%HXT%pQenPazZdtIw$8yAoMfJ_Ws!1N!#t&^ry|8ugSQt~nTkwswdXjNk zY3O&^mzq91=+pT);`ocj%UgV0?dHYF?R!t;TDdMj@{7vh`5zPqIo8$XR7Nh*_#W!4 z_li%Dsl)dDc>et3aUb`--Cl5}*E@J)q|YtKf;->dN-ckxUD=Ua*f^tOvvd9=PfhfM z;E{3LEnS;GnLc}UOvudSN6x<5n(UFS+cMkc;0sQy93kdC$DXeKUt5o-?~#Qr?)SO# zt+z~yc%&JB-{lOIwd;aBlPB{GezX; zX|CJHC*199Mxb@k|3sYxj%ne$UO zIfgZVaO93hp?7I`^s8rU zPaa(r@+@!mnrcDqgQk}AQ?7PZv}8MCL<+Grc-W3E_r^YT_jI~{sE%d;u=#gop1 z{!JabKYCy|cHm{3+cBl0s^O_$r}OO}i*DTdZBE+zl_k@HzCX41KzH9F`<8K+`n&gR zymR~+@A0c1S%Ij(RPB}Fk~DiqoM+~R#;Q_}ua%-bGd7$R*B9}}9+r4}b^qR#L7}eG3_BQ`4S0w5o$p`%tbDSxYR!s8Sv0?; zhGuw2`gc{IOBwIlW#eKMU31r^xb0-I1bJ(2@JCV0&ThJL`QBWFzh1VrEcV#D4J~C= zZsp4gKN7vuJ7x!3WIef5-0aX>ce&^Wk3Xt?_R{s*T{~RE+RklRIM4sq@hKO(zggcd z-qm{{RiF6ut|MdHojvaOg`E?6S6p+g{`6>1*(CREcTXgwQ_&qatW&-3N6gG1X3uJX z9hexreM3|By;(nBTzy=r*ifr(om|>7z3%h7{(aq79d3T|Vutf)ZD&3mKPQb?w8Ho0 zE6$VEAJ&1pNT?~0h+^5h$kC_l&Wk)3{+(PDcIAqLSA0&*x;Dk(Do&Q0)HP?LeO7Gc z7QbWLuH|&-T{8N{y-Jt4O(+uy9!)Eodhbzo{M^>6nw+reF=_F!1wTaDk8D`U&lq39 zvz^eqG%~Y#>iwca4eb_L#kOEIx0XpY&UVgGDlev8jk{Kg30n(`*5zG0 zSMOd$9CAVg3$SgCm#juFH%Mx0f4Z%B+c@s}*Qe^`-T?uV)bIV*=L3(ePDRGD)U=7w zr^%woA97co7Z!fnksI?)eCrp|A4AUT?(<`sb_pxo##BjUOXfyRY#kXCbjEkT+~UAD zZ6huvcYRq71>%K`;)!2w`&E$0ugukr{o&QA&JR7ScZL%or{3FnpzCy1#%36?b+~8dHew$*>^OlEw^`FuC?Jb2z)xW&>xzA74y592g z!d$=PiKiN&;FO>w5aZv{L58(KP0wYeIssKDf#*T84_gLd#&X~Z%w}{@S%Ksmwbd-d zrLcIw;enR}cmlI}37o_M7I?XuDO`rH))5q{VHt1KSF@xALKAw{iV+7T#Z3Fh!kfqp zsgh|M`GQWQMKS|3))05tO|l!G_I>!v)(E zVKduOvkFJ_n3}PmQBptfD-0omViyMfHGtn?3cz3+0S4@Q0Tv^W^FP(f=v4+**9w4r KXTYQTA?W|9SlZP9 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Stream.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..94357814960584af14b16b960c466972850f1904 GIT binary patch literal 7204 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.StreamCollection.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.StreamCollection.beam new file mode 100644 index 0000000000000000000000000000000000000000..4d121adbb84f89a8af6557ab10c597f84d30d968 GIT binary patch literal 7292 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 OF)R#~iH<-0VE+T`B9FTO literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.StreamProcess.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTP2.StreamProcess.beam new file mode 100644 index 0000000000000000000000000000000000000000..c88c946ec26cba857a7014c9c54983e5a4e70293 GIT binary patch literal 8072 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTPError.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTPError.beam new file mode 100644 index 0000000000000000000000000000000000000000..6c96a869129fc4a9ddf20bd4e3c9e95a73f734a9 GIT binary patch literal 3640 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 B&9MLg literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP1.Socket.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP1.Socket.beam new file mode 100644 index 0000000000000000000000000000000000000000..006b3f42f2fc0d655eb673dcb644f09fd0b2dcb8 GIT binary patch literal 41640 zcmb5V2|QF^_&@G8mTPir7?Gt6Mnq$s6jEbfvac;<9lNoOC8<;rl|re;UP)<>Bxx0u zR+1KJv9uwjO}pQ7?~IT7e7^th|M&BH9rxVlJm)#jdCv2^&obv)JGyn;{QSxTxZL>gz(g)PAvP!`IyO9tT^`Jijb{f1aM{7f*(tb$1i$Fu*|{N!oFHy^ z3@5=qIv^-MCP5d7{?RePiBW9-1a5p{5LcHI9_7!Dj|$*~z7J({{rH7MOL&9Pu~B}0 zx*;*~>9O%K+?b%4C{*Ep(HoWjZ{e8!=#=0Xzj$^)uwPJEA}5j^>=zus4N&$E4Ce&I zFLz0ZjSA73k$3m>3emjz1n7fV&G}gIt_B47XNmFgqwFm<_V~NA}k<2Ar~wP4g&8k0SQ6j;jMr1qzA_&bAkdA*eK->ErMbaIb2jJ zo*kFShEWpe781^m3Qm9#it&pIh!17^2L=R3vX_?=8W7eWlf94~&tXT!hC>LjgSfbV zLi6c-zL>Cb!g>i@@bQZRlM&u@T%eg1CovjgAPG##W<|%ugM$-c1M-prqQZm6-EU06 zsBjKj8I{F*@Fz)NO@6~*xr>Ab0*+W*J_HmhJys<#KAhjV7*6POHis~>KtJ8+fLN3w zaA`bJqu3Cj<$kzjA@uzGzy$+>b0gX8SkN$u?Gh3YmB5aLT7KY0sH~u8e*lCP?yaqU ze(aPWHh63d2V{UO_VL)L#840$z)eheKc?B3r;Uv--@e+O-0-Lbm-v8i7(OZu!wRxj$k@^+InLdU6c|A;TFaA`=^KHcm;vm$&Kj=?Q>wj z@!klE)CBbeJ@88o$D=MhLBI(B!VZd5&W&ZW@+?ukd_KVZv*bkAowRIZkXeJ0T$;l%4y}z@W16 z?1Y%8B=#5!Kp1#GSNV8AAkYE4J>Beb6FI@`5OBlbbf7|Pa>Kw~2^<4gB9M@s5)j0V zT29gQPk>%Wvs)7aLfC#|@#m5NSf$Lu|HHqikX$@RnB;hJd^iq-c)YwP02lWnzp2Cw4^$xw zP+UkzB~VC6hyn@!J0&E9*u!%MLg5KbkW!%_G!s®nhH-h91VVjw%-b8TY&`aM?F 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP2.Stream.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP2.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..abae98b401624a30b80fb633f7d9a84cf9c9ac43 GIT binary patch literal 38844 zcmb5W2V4_P^EjR(lp}B&2pyClh@k{RRhotl3W!J(l^&Wv5JIt_AVow_EU1wpb^#k= zR}?`7J60?pVDDnb{-3=B^m*R*{r*0GK5lMzZgzHdW_D)wZcn$#er6QP+Wk(hj^2)f zfN>NGZNu;1za4Q?*Tnd&_*4_8h~(&afr*E|zpsC4L~>dRKUMHI(A;FIAe9%9loJ*f zpB%#v3#*9`2vXxC(*?Y=lqh~uN_--(CYqO$%8QB+@S^wfvJi!|u%u|KvY7PbC_y|w zIW0UXA}W=i#sOe>5B)Skr1Fx}V1OjPfXC#| zDuXG4;KJggb3k(O$?<|YI9)uNJ1==EFExXg8Xg%DJ&QNTmzSE#PsNo%ppo&(ys#)f ze^xwPQqz+n)AouxxhAJ4)ug2)#tXtS;{|a!Nf9Yw3HI$3%W?SlHmrNxal#USdi-m@g;^*%tH+2T4Yx&f$RifDd4f z>{1pvN5Bh9i=WG*v$;w9R9*_nc2q{Vn6>z5u+B(wRdCTvYEr>kM5@FU(|F0zApGQL zer8yD3fx9hPvY^@1)|wUWstMS>98C!1`*LvLRwq|m{)Qvt|*>M7-CbzGZ)qwuYV9O7B0>h1pJwtPMLtz zUm8C-JSrkNikFxJMok(AuJupmha3fI0XRc^cPc4%6X&>y)HFm)qy}7LaIF6n9!~!o zM#@Q1B-XIMZs3YBASbX;Qcxn6kk$|i7yaO>s3lr$A}xxLbUOY4#Obg;(^Jvv0>{Dw zZ`DtZ@<#@}@yP-(C9qS`yw!MF5mAD~IbnQQlVDu}B$qILjE-*? z;EKpIrt#82LxVTUQh2;n(K^xm=Pikwv%XIM_NglQ1zt2if2!iv^+oPZLM+aLDC>VS^(V89SXcu)pS; zgXqLS6y%~GU-I_QlJEm70slaD@chbk$g|b_S#V&t8!`d zn>2+pSTmP~2y}3147l_H;!LbxNS9EgDKRmeF3)A|RAovkaT$7CswLN*$q+JSm~<{x ziEBv}awO@*MlMy-hESl|LSb_C7y#!=T5^^2ikM6xSCUC=q5IOElqd`*CA#hwsw!8K zp-WX{GB8|0$nl_JxT4S(MpNZrIOCtARTD}&IriGXx(bWdgFJWRGWDoj+6Y~) z5*6ogxEQWR=Td+>4o#b;Wr@?d08;-0QWJwTgekzQ4jsca3Hn$LQXG>`->FKMtfw$k zDZ(5Xrmqb#0)#Pw%KU=>j7rwibyX=&R0@^r&S414WH{kQgcjAE3;Zh5K^j^hCSZW+ z?n`y0ieV#!HAq4ug?nMt(J-pEJRM{&DMLv?%9W%_F$u&BQ-lBt(;+A|Of)?ji{Z+U zU?7S#1E9#D3Y%r9KY$!Pr6j?=@Ei*@gO0(m-hwF0PQ!GFlNDngHW(?Qo>RE6t zb-6AK(61Di&<)4%F?1%y)n5y|H6o04K^+!^v1$#?k?^895l*0%aiErQpcWGhH<4#DxeQ5i z6_~0LW2qYmYp``^v@~p>Y9B-mC#+SuOu~Xgz!Kvi3$&vm5Y2@!r&$nY7;dJF6yctO z%xNibVJ>Qy4Yn=Bnxon=$d0ar70r#X#BfWnLcm3M^Pr#ApJo~~tAEvn?rn!h|2M%G2;kM%Ob-{8F4{!^Zw+H6! zFx-x-i>9v(g62x<715bOTm{@x3iz2KIx?*AL0h#DuPXb&9=Z%JRrjxcs*)VS|3CY= zi2FJGB?iQTD=`7YFdoCllk?Ui#Q-v%@TZvuO|BYYgW--EgpHC&3>;YPPJijmS(TUs zBAEC`1QSIfn21E+&LLbd+y#vdQwI=C-3_Mhis7!XN|5-ul1eaDA+Cnz?Ig)$h-d92 zNk^LqK0N zF)~a{Q6s!D+)sn>{%hc=LR=lzj0ecqU!Kb$ElO7$rK*Vl(W3Me1%p5g58%=~8A4ox z35%`1YLVRR}lqKnveW)}~NkuML%#1(L$j1^Wiel8vKTuDAYKWkrLR=dKjxZt4 z1Sw4hZHI&LgppH8qWKaL7#<43Fm0%pg9;U^tIUbA(_VQ%%GM>7iikBa(j{hR2eUK+bm*NpRL5f^o(~ zJhjD$NT6aE9xudoE2Q+O6zI)XQba2y0p%3#9k96AY|!?sKNI%R19C87fF}NdvH_|i zf+j)tWaMG_LR=5zFollcDb>Vmv4_>AA+J3fyf*ym(wr)!sARgqrlE0XLrE3lqoJQ4 z$S;lbTjERzf+?;qLx)kQN+6GPkcU4Zpal>D3>Oq}C|vhmz!(D<3V=hw@N_F8gUVHs zbRaS@JVS`H;Fcn+UJTE)BC_#0~y%GgpWk!nCHrwC4T89aj_cMRpJ((p)x% z&*#!Yzz&Q^wdMR#TQ-CYv<76DIKzg>g|(AA6ycS?)^b56OkyETlURV^3xv4wpjtyj zYF#MA*)kN!=|H>Sgdv7-*ruS#oIjcj0Zkf-G?|OExJZbb0NXQx?Yw_yiuoeGQKndc z;rS?2BspF($T1lq3#y62f8>daF}(2aJh5mH9m5y@$rB+*Wa7$P3@`e_++dQp%b)22LWvMJ1KbF(%+gAtgj!9M{KGm+z&h=8iE@yp zBe5D*-7*YcCQ1S^e7P#I3Ow#gU|JmTSArf^Qc;kHOpB=tdRPfPU5FLnY0EIY%!pX2 zO9R(R^A%^0;V|$DF%-NWWMIC!kVzHM!D7tGa0sXn-oq&vzEX`?j^V3Rgt!GvWiXGX zMMC^Rp)U_et%gNYF3;qMBCHj$1`%^0)?)Y?k&A|9VJWiiwPZpk340rn@mkBO45oA< zfLDYNw}OGxP;vq$0)v2wfXvnjachuSGzY_l1QW7wI?BSyF&RqrOol2Q40bFSrn&*K zo~i)bBr=Yy7vke!ObS|2;xYXi$RUH2at4>w%v{hAay2kcg%G!aabloaDNjdfmJqiE z<~3}H4It+YL-vm3yn(d$YOwbz46owC76&Eu)kxpEr0)XhY(Q3ABgE~1Y8D&=jEC1n9Pn*baI- zNbF#!meFSA&}oTGi5$AFU65`Wu|t(BYe;O9H6^xU_*N2!Lz_j(5zTQ7u&|8;GHFQ^ zE-hKa^L8U*2QUJRyW@(3tnU!D8H4RwA_n9p_wm3ffZ`;R$MS;U?oYMHDf zTxCOos5L+t_N@3GE`usfCw61_-W?3;L81X|f6#<{(cOlvK+1vGh2i^zxHF8B3OqLs ztxF8wuSy)G8W9Jm?zr+$(s4kI*pJ}{VZFjyfYizb^gaU0NUj9z5@4BRq74Tm`LBWJ zLqgmY2xkG|!~YTnmlTE@2tyl$ag-Fskrv_zh94Q6{85oqR0gGTOo+P!wYfm;_`j(6 zlGHrJ)J~Apnp%h^3~w5wc0xo=b&%RgA?^v(<^h|{mBdMKFegQ>62-ogXvczf!L)e{ zX$}F>Iwiy>0{VOyyyahmhm(U(5)Xcw9K5xKXvOf>!NE_923H##{EQIy0&3Yn?QA7+ z1_nPP9vrqdXJBhHqz10dTt$j5D3VKC0EX=?!@-%gl2op`?KNO(8xL zVlzXOu+hVruw(G0X)0M#8D!php^~^r?sQ?=2nX5CWss>9ooM&P@QY}Z?T%}ZDu?!^ zKk+cvMTq-C{08V{ll8W z+>p7T)CyP%10l=Lw8%wh#|7yc;_9knQ^|#C;6E510-_FNXIB@knylpp?S^V!E(t zz<@?Cor?rOg%prO%R?>-)-|%qC@>U8HPI)YjVQBwfZ=^Zvxz1x{>7i!Jjj-!_fmmL zYK4>wsr3*lDf)*(oHt*J(g6_@T;`)7DhEReoD0&vGRW^yHSt(9POhZ`@dU#kqcw#j zLb4J=4)lC*Ab6sP;ZIbFXQ0iegW42T-IUSVgHBu}7p|UV5r-+nV@bs+fsyMY{BEc1CLut`~qY66-2Ig6J5wHe*w>i z#24BU;sb_%_}6~mqX>~DvYJmA{*m<2EO2K@q%uDbDigy$4epL3sYT!jC6Uw26XMAg zQj($#9nF!9_MiVqm<5h32_($H@Gt*P=?BC^LrVV@!v}`O<&)$792}QS?7vnM-$Z*( z0}-d+G5i~sW&qFQL=S*}45DNBcl106Es|m-Y7u9UPhgj1?#CbI4D^6AQ25V3AeI>P ztD238cpndI8e-p-x&T|h^L_KBopmpX&iY96J*gS#ApB6V>+TNj|G`h z>VHE_`-5moBEk}9NeFQPD0e9rV^J&F64Yw8gjl)GMr;YNKzU#CA*>76g7la0z#ams zJ3a!ml@4)R&xS2awS_Y1DJAU~Y*|o0la13f*^(GbGR}o9W5AYD!np2S(PjWSG!Dc} zA)Wz_qyyHh16vwnNs(q}!PV2{V$P)36Cq_v`m*6^o+ZYTj&}i}axGoRm6-)bK3Xhf zmP~>Ra^|`Sfn3_;-9#ne07oES5X+pwXTDTb(KBD1C*J?ULth}K4-*>+xxsP<&cVk} zFqSM#62c6NCdB80l*;HBORkzt6D`v+av1het{MJZYBVfSIiSS~QsM?t(SAQ0 zye4ko5~SCR{10?ef~VJzwHVs46+!HfhKd6e>=)P!QtS#K_Td<7xDa13Uy9SA3(H|) zwiE|903tz394gR<2h7dji6!A-IygRVG>R|LLOcg4!-!3nr1>hQ0N3FBa>?;UJwYWF zC>8N%NP#|5FqT453WZEb7X61@3;%DqDjEUnv^A)|JFX4$%=>TB2NTOi(uW!3gG|>l zF_y9sTZKXM0_Iez+2pGnc&0=?)@Cb#C$h6(D7*RWX*T5nG8t^A+L+e{A0o zI;#!B3;)1P0j@5@7sE*FK+hVLY;{-->f+VFFk-8NqD7hQI#FiJf;^`P(1n1m_2u$b_Gj-?~SOJTqbFyJV1D@(pm z8hk)r5AQo*B`kxbYYGpGY}lj0j7ItO6fwc-BKZd3Z~P3t{VE%pMC5LfPYBBdUk7#)>yp ztZ^a%k0u2S!n6_M>w(4&sM=PtZD1^$KXSDp-wv}TfU*I#9>829wj+$MFXq<~9FPUH#~^}EU}S){3(%Zx*iK-JkhY?f6AXsM zfE5HzAM&VWfU^g1Ty5AcfaCHXIBr6G3E=Dn9CsVG8{oK!T%!@&gW>KA4@DsN1ETPn z6tDP~5yBGz3OtOnf?0XcnRKK#;LH;cf#N=(I1wcw@X`}rqr#0zLVOb3XoMSHHtb0- z)FdjC9DwB707j^U5v*aFx;%!k8&6rH_IS=v(5fh!8L>WGcP;{Z7zNoGT z1>xvJ83P6V8A36FGKg<3u3N#?8Vc$=77F48;UKs@6iFy(EC(nEj_Tu~ApD6?CW-54 ztf^2CP9T)Qv4Wr;EQTZe=}=H#gg*lc`a?8Bp$x*qp^p9#P5@aG)uY7qQE=r!LHI~k zu~5*ss2(q_Bb*c{2qz7S01CoMhms+#Bb+%<5Y9p&10MrxFUHkLu_w4yq%Z z8Yqb7CMcW5^(Aoqn+If9gMD|3aS;A)aUIcV5ZCv^^}t{7!>A4`0Bn_V8VVgs9TcF4 zAv-{I_`{H`>_8RxXA9SDP=GJY60TdsaKzI(aUI$8QYeyugXB{L1@I~Fp)7_1aLQ{a zc~H>(4k(MDpn0@I$%caP&qA381;Lx4M2PF9a2+nL%fS`lA{+^~^kkR|rU!L-D91%` zY#Llee=ASJ8GXtzD1eV4`$hdI6cPL=)PNR-#qd2)LvUBP;s`8;?}8eFJHu5L zfyMB8s3ABPt~4lv@O@B2aI{8|yhylLya47YgXW3;jG*-7CBiQeCy|K{o*j$8p!FZ8 zc}b}3(BV>1lROiOPCiCRKp%OsDR!wM1o9Xti9kgNWOEQf5+DQ#89XOSQo#qkZUjP* z9XftV62u1&K$5Nha_o^LAtOHN7=b0gEW5UbIltgFrB7SF5lVT#`sG0wNzYEEfCy#fFkNrm=gEJ!sm&lZhNP&+Pq9DZa zlQX47!)HoI^ONATI#MY%2t*=alQS4I6gfRy9bH`grlOemkM9IT0TMbGk{$GhI=DFc zJN|EM9THpfKd{kh|Nluc$kWGVa!^=+FVJ>HwEuxUh9s#oMDnj#|8G--KX4JBn8<_xj{-PM(1o;nWVJHl?=p~)XgQN91PBF=1VbM%=p-iOA4zc5 zdk)}Ak>_nQrA6o9k!0!Q;56HabU_^CDFPIKh&({0!pAq{4*=vyBq>{Tx)z!mWK(H~ zVO~;-U=DNeE|a{g;S0FTXg)6u#z(BcQClWC9aEs7P2#8zQGnCGqEqSOga%NQ5EHT~ zaPpiy^O`9M%LhU7fVLiq zK5_^>KAAj&%=`x;;0><3BpwJY8UUlnj#~b3nmd{a-+M4KBjU;24P{{>V+Aa863ZB2 z{TnAOB_fK4j7Sg%x<)7PMcw1uc2i zcqwc+ww}R5O-1;YDr*iKEiITC@^vJb@dpemZZ7Eo5&F<9Q9}WyoSYWJOJ(zt;d=^L z^av^=J{=Eic=4kk7D}Kvj`D+(P*A)KgX;-#eI{I+#C4SC{+(O=olpFoL;RgL{GBWO zoge(26Z{>g|IP{i&I5Ldc|fuM?|8o*+9-FihU-=+kf)F~g6as)hU-RgeGFVTi0h-^ zS|P5FgsTt=n!6TU*NWjN_g(=-3g84>%b*|}luOKqf^vu!D09ViB%3U89p#v*;yRk^ zY$(u|%uo4ZcpY4kF(5iypdi19a5h3gs|3L-p&;)7^CEdfx^m=JrBw>aeW?K z{ls;&(5FB_G*h5VhJx_Jp?E++G(rCqE))buvNDE(LaZ*7(NGXvM_fmAw8d>y*My=9 z1<_$ZQG$Z->5lLLCtMGZMvjsmYDStUAScr)lXki47EH|XcB;Ag#JVt8F#-ALNM2k- zMm#?~RTQ@WuWv9B{!pHV&`|)x2R}K?{J**)PQaUH{vTg)CLo14dnP0KUmxOsFqxV~ zq1u>mfQ$^E{30<8jW3z04j)y3_svX(FhhQ?ni>ZDM8UU?nX+hC4&YQ?=5X@U3-~$= zKD{+Jpab?^`sWGw6_$I0dSQn2--vMOI^%av8O z&A$KoVe;GDr+q)~w`wv|WODR87TM>}Ws6Nc=W{pd)xUpw^4{;{%!Wh9?*3GjD_S{X zQtcKkoBb|h8mjyiZBkto7*Ee_*?HTu&e+v*Rk6S4E7~gm)y0Wh{iaNuSgw3-^c}xn zU&F3jTzB|=aiM$8>R!Y0CHH=P+wlDP^Ec0*3v1UFzMOTxCHzkO{`?zwsR z>NA_rJprb~m+y`R-I*%#aK1Zo2MWx4kdlaq;7=ZWpG@hI~A6*bXb z1oQ6CIC=m1K&iDN!GNIZaI(R$F`&qm5g=?D&A$`nJ#d-%s|bQ7=`^ zDs;Fb=uWaqSoYQ?{mQO6P3mL0(lcKaC;rk5w^;JUbF_gpyUr!i`A&JwBRAjP>X>ok zu@qyC8B#&q*^6~&G^#T%EKTm2l%nvwGkCJy%##h*28x~<3vAg}l7?T%b;>$ry6V@Z z-A|2gHJzE&x-WC{y-6Wg&PE5mdfeIU{&rbgwDG#OO!=HMc46_x`HdZctFwpmfl4 zL-E<{aYtT#ZAgxfZoJ?Yabnvr`$o2FPt?N=)pwe_UeNSN0e&-^_C#myT1es4rLE z)04T@A^W6G#`Ytbt2bI02+UvAG~TYQ4bz{Vz36+;&GVcG%cA4lTK8DW9(7Ww*t{-g zW`yzghD8Ox@yMr|OGDSX#y;A9&FAa`>oxOLKQ5eQd}5T+hEmQ1`E{>7gx;rZJ9k7R zujvc_ad2$a2Detz!Ua>hE=;)X)y#Ok>^d>3KVt$>u&P`nt+{g<0F`Yine6-t3g!&Fpouv(!+FFcswNTzd87i`ku9Mq2nZIQkYy ze@~lidygN#kd?H^d!AqH>CLs)U1e%Pizmmf?3-FUx8%!r_Vy>=OpcCU^r1LdJ3_Dc zyW)=I!1uW7L|;$yvMJ^4V&g57DnzpFWdIvtIW>zRk0B;o63-Fa3-N|OJ=IV1E-#p`UFH`gNf&;hS)o1hP zoSF6Aty(d)iDJ)NQ>Uu+HMVxTH+AfX%u{Whc^}=>G7^hgmW^w0cNzJcWB1nfKQEb{WjHl#qS;?l6C5Pv*P@J?hp!j%tNE4Y*eCvwC}DYI8$aoOOl2+Rqp3 z3$E^|3(;A8^>sz+1f963gNCJ>ns@CtbljJXex~ULXgD`m2uA} z4BIm?Yy0l@x@g6SruFI(O?4mcJ#?BB`0&uo&G^dzR9t_?5A)cPdTj2_(!KZ3zxL5J zwtM>ZO3wS_eY30S!8c!7c%Ems`R|D|D>rfZvAxbBrt!7QQ90#whx@rNf?87x6Ru1j zxxXv)!1d214>SkL+xoWoD;@H78#ck~(G-LG&oAyJw$sv7ODslcwKpd{Z%*1V=cn71 zdK>nhrjpZJrHao~-;|tPaz~{(ani(bXKbCU3Qq?;3-{9R*6}`9>$d&ov+q6=Qm!WW zsf^0pW^$Q(m!9Qckr;L3-Yr94k9F^U)ZD)J;D>X<7=@gh9*GQp^R+RKD)08SoMsgI zMyuNG@p&V8DQn&2-HS&a%`%JsoqsRE_|P3cKdlt}@x9Y$y}}jptgw%QQ%sY91(Ebjju|b18cUd!LN7#BkZx z4OXt#uPJzG-J3F7t$n_opHOFyk71kx)+-a!JzNmaD!pV5!`@FptArnl?-kA0LT)DAE zsl`Q_ZY!06kK7q~FWmgWNON!I)XPgRQpy z^i0C4WQnEU{9Pkd$EDn}DtpqbkNcS5*RzMV&7o?x_D#j) z1DY{->7~*eSJO|`T}rZ9y341hzTk<=*I$m;74q|!zi{jCy<5`j*p2UgJIAOh{MKj( z3uX1_Z|nMeN1Bf~@BDS~d*3I%%eLmN%Wuuy8u4^(W#IPf>F!HX28OTb3uuifPq?x7 zvBYXsiM5rZ(@zD|qy$ud7uZgklso07j52**{+{S12RxT7y1eMXyuFH7=f&anrui~1 z9$yzPs#{|8!?Y&nJU(!>W1&or(dwnF`KBk6vxnc@6}cuMdw9Su zGsdMw9jzIg@;jzlub0aGveTR~V?eh#F>T^Fh4!N=+j!;MO8nxoM+P&yN7ZJ=Z@n7$ zNz-v1r^nRHwDMNt{VVJ}=k_{28&(nVT{qyu?Hx&;uir;zcbr&5t4e%(^~P4UOR{(q z)AdyLr%64kZvI9e-`3YLs>((z%MkwB5xKbNx#juGl^f{W41Sh*4nJ3%vi5}Q;=`lX zd1d3>vo_=OEJ-cQyfTfxK(%_esltWF+7#ABIrHeJ8p2nao3j%0W!4GKZZFZ?Fu{#l z^DZOySxw|l-(G{JK(61MpqR+M7`o~vJ70X+WvAs+nhiNui{yW~Bu%dx(eAmn;QZRN z23dtl%;&RLQK;Cu{`;|z*Z#?fbV8Ha8KW~kdP21<4v(s9J_m>>o zyZZd?pIYY(r6gR^_n(dSOKwj%@3o+N3%qOg3}fi+?=D#$5&>tWYU+p2ohRV3&J@aJ zjfU@u6ONBhyJP9-_(jdMLh`mwJ#Q7oA?84$Voln&YYdNXz6YnaJS(kSNjZMynt^QZ z(rL$ztUR}Zwtp0Di`xYcg0@IH*WA#4z40>H!c~W61;4kQ^r*7lgX&ndcembUuPZT= zx;mdO^6U(Lw{Q7W_hyNELR&?@plMy*ai&3cy6Q}%7JBI4EqEbyYgNRN?)Z7Kn+JAS z9;3?YQ5q(5-klyxBu%u|zMgS4vWgPf&6a+?V(0BF>7+NAch6_}OexuRJx)gT>6X47 zUN78v=5KfOJEU(;`t8|aRehkSK1?meoipB1_4xY6j{fg`g*&gmoxAjfS!}-Y^-`f% z_m1rcIOplb_H&Mm_N$_LzP;7C#_`&`tqxCb&-B+wx-}`iQyo+F`h+_@b-ZD$B5`N( zD$mCFmM>Nf{;~m`Q@SW2-a&#$|7ZGAdS2#UHr58r3g`IW4a?&FoIf6T~s6#S3Z5qYpHba z=UH#t-p}g_9Y6e?MUoV4&TT_KM$MSlie2=%!=^u#)&6F?ZCchoY-RD1wz$oKa=mh? z)Kl3r)#?OE!CGtPzTq6mN&Qw@xAZzfnQ@nRr8 z$3FFnzPPO2`F_{WG$PM5*Ad`r*aCL9~aZ9bab z%#xbfn$ER-BK?vQdamWgQ>R-ur1FLv_4Tk6f7koFSTXeMYh)FrT24QH9L(Zc&%2c8 zf{ksJG1%-rx#IIPmoDAbrLVo_esQ^Rto>SCs~Pq=d7a?}lk6Qg25N_GG+5hk_`26E z`cbncd4AN6YKM%S?2!@k-$`9fd%oEFG-btXuVMWDS=$1qri~u?X!bTw)y5`gh2c{! zO3RMDb56l&%)X^}R!3IZV`l=XptQ!ItaE zGQ;%Z)@O`zKKRyrLp%L*mxlMFw)c~x@$UA#*;`I7Hz=N>kxVPMST}dc=^g6BPsQ$x zv3I#&o_5xGWbE@wy52nZH*RO&InH&hO_$S-54pHDljf{_MfIkSeSE^0YNgY=gaMNc zUzA<&0SR1>W9`fK8t7a2%#|{&dHSQ$-N6OD*Sqf1^L(s-hHknT@MF#MCm&XQyA&%N zej@X`UT63uowEfEt*M)DZOSa;Pcz!Yz>f?Mnjn>x+-|vSH0}Ik>Ew{ve3Ptq3Ts@v z+b6%zq1;^PVY^w*oY{BoVzLtJnT};U#oYSp{PuoF&clw8m-j+wLMVb zv+L^HjBkA(f@!PF&pax2JUo4%B;s%def@h!s`us7acUEE$Bj^nyZ*}Rj) zx(`)hGn4vRQdh?HNO~?`mzX|^GA}#d>!ALuH{nYz9rk_vd;?W2Z}tl+lZ7!c1VpGKXQvKpxkBmL z)MV@U{PNQe7v!CW-#et;a{W4Su1V{h%HioP&P#hZG`4@8;`r+eoz-aGahPn{{i`~S zcZ8<eaf)^jWKfaQK_Dli`n{j8N&S z3%tEpYV*M9fu|B5j6ZPP9KWU>yS6mhGT_9=iWen5aprYr7EF3)9{;l~_~ZPg|IxUS@B>q7ySR{m0_1UsXs~=<+UEog|HQ{o)+r8b#UQ5bsd@EUK=w9E`+BDT~RQYN1 zb)4VIIcGD!hH4s=th3f?8Jl~3^nm2gB<`g!*}KOd+)ueZr~8ES%xl3L4@c*}EfXwH zyu8;hPClaLM^V+0+>U|v7b%R&is$DZmvmd@UcVY+Vbbdy{oD1F`4)ZJyDwo%k18Zb zy=+;kU5jaKSL^R&-g>z>Yte&d?ME%9S1Y&V^eT-%Y#eg0`+9A-{3bd4_=Kb_yR4l} zIDIAZeJ2mT=U1>;U-((O`q#evdilu%<=(JcktI=X8Gt)+NDsub)ZTB40YH zeW9HGfD+4T?7Hsr&)?@r2+O{W9=D=mE@8Pe?3C4|Cj0mk)_#fGZlt(=eWW3&*1syC zp7PL&@v?ut&mrq}Vp?hP&-JzGS(k3u9^ZCon7Q`+)NVH{dfMVc3uJQA4?ou4e)0S) zVa#KzeC3hMQ|B_TMpqD!H&vHsz1%H3b+%Na6-)B$%a)Xxm%|RMdQ%%y)1zP<8W~YK z1IvHESY>ay!rc9KRR>8IAr?VcKtb~>NECwzxF)7yJ+d{o%#894!v78 z#rL^&=;$D41MNre_G*3A4GJFhQGaLbhcB-N>aI;LyFNp(am5)!sZBlD+ig19Ing`z z-018#{t%R3url|tBSruCsQZAk8k#xW=7Rjp}VUb4z-ICi}%KKz=I#zdwQ! z68d=Rl2SA8V5r7ugb zh3q}L&3I={YVY!p*uYD2hqJ>kOxiH}ZqCL0jo}s7`=-77G1vXWjSV^1yY?7&jMh)9 zuv|RKj2N?)YN2v&r>8~Vp%t3#suHnZtytx9Q-1GFa{3~zQaxF&1Ho~rvq=2d>Te2eUr`2Ez_o1yZNOGnq^!XZTg7YNmwBAqFB`_W zCj6Ydc`iR(h1p+I(BiBW{5EO06TVAMm&x@C`HrDoKDEMy z`g{wWls&E%I>Y?s&-pxxoqh6rpnK@O?ITa`s>ym2bZBpl<0CWYg`Lgy%QiM!sJzcP zEMpn^>0wUtq>R?HQ0#jr8c z@`R*?o&Mt6m+S-0m(9>w5R_47y-Z?q^ySsEN^9@u7b~-mE%dor&yw}?49xqsW##v$ z0rl-axDa>TB)t>H(VwX6;AGE$iEb)j9Uo z&z6qSpVFby!PCjrUGUVD^`O(?hSib>8SjOww6tgw)JAGKB_B&Wxf%EHRISx(zcV|x zctOV(yYw^F)0ekp=Ks>zR>+Lg&TM|{)7i<+WWK`H++OZe{_=a{H`^7r-X(aMD?2mlWO=Ej#)GWT ziyj-9tKA!^NSZ#L`4`s{oc&EKUp&6|a94(2>~(wrYOcFD{P z`&r%@MKiNHj7*Mb`;7jw?jSrP-FNTAoLbL3`DKyIYq-0|o!M%AX<^ulWlC#_b1?-o z17nWwnKRaEF5X}{-j)Kk)bEnWtUmrQRFE6gd zrF1z{d4!8|-El|DM-f^s&K=_qs|3^&Qg>Ggw-yeJjg*l;J-qnyrWL{%%?hX9Tp7(o zes*lk@!YAxuL0`EuGqgQ+vt8ES7!751Az_hEf=kSl+CtQC@R^SM;ESK<{Ulog0D;A zbQfK7f7P<~{a?;p^SKx<2)dLq^k{T0sBUbDd32ZZiRDuchtKwi4+?xlDKekocWukf ztgXw1Bb{&a6rJ#-u@Cct-t|E28{wSwGLvbsoBNS&qq_Hk`O)xo-Qk5hpJHcMST^_1 zOWv$pwDJ75ZE7(ez1a>w+BZ+!;h5OiXA~E_-g9S7fMP3el;q{$oi#ddw#+^+Kgpo@ z@n+eZ`wd52dO&+mS-UKt#Z~F4(ytHepQcZidH3*B$`Y&Y*XhY!_Lpu=3%$oTKDuDw zDf`EjQ}18uCNCN}*+1`RRO1!Ff^#pcKHptB;xjG!aE_*6?L5c4+WZ#HS&whb4AxAj z^vz+`=SxT?!1qI5t9)~!V?vMTM>fvPQa_{ftHS7|<~oki)o;K37+VhnPP?tP;9;KY zl`E;6BUj32=~}4w7hcvZp(O>E8a-1RO})=~_vrXJX{|EXPp@AzSgZF3CTC`t_Y%9> zhAlYgCH*6|D@c1{w$%o~_B(ljrCZN#@^+)VS6xmNEC@NGR}qq-(zEvYmf406U+&Ra zeezUt>J=-OmJ3<6*TIamK^ znUMEE=ge@4=;Jp>gn5*|q8&@^$=oDV6%>ihQ`uxquZ z^{jbO_vzST3GH8933D3W)alwe)m+=v=GMDpP1DHkt0S5lJti}0f*%8?cjS%qHLBrM z@2v2!t1_&zpG1*6ryC>@rati2hcVjOIsJC=2gPF#T%X6W+>#7FJ|b>i7+9vR*EDKu z>@OYfwB3&qF1OB38{Zzem^HBCQ`NW~33YGjCp5BuPaJXm%ak#j8^flQuk+8!R|&}S zXj2|Jp==s=%J=kdBk%Lt2<4xz8|PaZpZMu}%_6??WP-(IZcCW5^tk!1mbRZ%w@vL= zoMm72-p)hr{4~A7rP26)&+S|-ukFmQ)QpbofS?z<)+s%H1}Kd1ryGvd(=wO4O}aGqZ~v)(MMQ8xKcyNtb<4xVB-^vB;~3=NwBs^-_3e zQRgM=Ez>ju8>O3KRy{|KxA^PW`vk1p)?oI5Ah1T zWd0;$K|ny2$2-MOH=d7>Ee<1@t{ z!}GEOl?ArXpT_%D$9U?V9;K|aAaK}s^{o-Ne@`=MZJFVay)V>q_=bQ*pCsPDYcK5U z?h8sdqn$G~x3v6hh4c97ShArlrlleI?ZS`aYcFLko9;EcsN!aP#~!T3;Nq``TNvJ( zg_usw+{7;yj(h44EbH8J&~Aa1aZ}O3%%>%DW$uLfdc7CKh1+KL$jUEoo$*M%df@AY zI|tQu&CEUN>ms6l7l${+Y05p%czU3r?A%CAO}Sk6Bc)OS4eQl%7XDrGQBs=**cmLxWn}MwjEg$!3Pr3+SIjJor zJWY(JNBx=;t^Rge&S}>|U(@FS>GL{Ye`-oOaZsc4T5GFD!-UGq&M(iNtg$FKxpO&I z9C=cAdS2CsGt^UiVl_3(Pp3cvw?NJmo89)&?Zp?ORB6ivj^FjVSL-bs9jtGuN-(~} zMppfz^yb@LEPfZ?xwG}axcbtr=})3ke5Z|>eU!gLaq?ZQq;H%6TxsKSd!JyZBVH9Y znK;%a+%-OZZNWjOuI}Q_F{ay6CfyeNc>U`6j+Lt~?jJ5O{M|4&uD6WNo7HE|EhswX zzG2Ug$n0G!OTr|z12Wi89(gO}+paPSakbLWceU)=b$$oach#}{==EKr^(-#TT;rRV z@n&DigRD2^&il@9TRUId&@HKRahl59;j@SLFL|v}vTtJ8{_}>iH{7OeHLZ=vy*g6% z^gD|apDV%*H>40&>5tvGFXtV2ai{LE+u4c}?u|!2jdon}=+3!lQA)WTHF{na{#kzkzkZM`dt z>kfDsDzCh>LiS3({gQ8Y?e)Ay9nsoz$=O=Q?@|$ez1F1a!W+0C|AGFDOA)2Z-tKpD znbYFGx~%`W&+0L^+*XefY?{&e!Wa&41lE*2{pnj1?QqvKr}^d8y&day-j4biHP_B^ zZc`JbV?wK;(UTR#w-OiFn^Cy0v?G@5Uncd|U z(pa?r{5w0!ojpCW{SHS?TW(*L=5S=W4mVOYU2fg0SVcD$%XE~*GXu%Mf@=K{*7b?@ z+v{9s-0^TwG~w~N zb_K7#oh?}j-vjm>Qp}&yR~0a2!tK$|Tm)OqN9Fko_fKrA)rqh6EvL#A(kRmfDeQ*< zrA2LZON#Fn-3VrD`<_~Dc7)>bMMG^Bu~TwSXGZO$r&5LAulde#-?hr#fl)B_-9_f) zs^0<4h2ztA`xVUUD*v@F*@9gv_?F>n zai``+7%Pva56tu^XU^XGNVr^Tm81KPk`bo)J|CPTZ?lwGUCHC04Xj>tdhu3E!mf7X zdAYoGDH|^Ie9z*I)NfqnoYC#Z?%s6m_)(pHn^pcdZV`*T0mj8(b0J7O<=X;S;h zpd6LC_icURyw<~-cX{Q_vajZEywX(r<-FpRCdZanPw%_2;y$PGpZv_9zg({T$GZ7_ z0S!kEJ&$&au}hcV8frP+{3kO%#$7>IN#LgK%DuK&eiOdgy@YxF>qmvnDG$dtw9h~1 z)wXH^Ke{-eE=9F?ZeCn|%li>O&h4E(%eKRO13pL-M}GdP;wACAX#z-1sVZK zA|N>`8Oc#{QnHAW1q76gq?k{+E{DrEv+lpR0`S2F+Q5q>g(y2>gzSbEbe2o?9(mS zZ$^$>?^45VWR`#RGULpfZjoEBTo0G*ud>zWR1GZWs*yI?)u+Pmz=a({IDIy~YKwMW zB!(1`UC&i2gp&^Pb4!O*Ylzf+T=$q&h|4O%^zW>?dD~cv-vI2(biA+^=l`0@@@`Af zNHc@_Oa#ZY-AIZw9S4u1>f`s=fR9o+EiK;MWF+2eroC#C2(I=T|IUDy?A`WJ*&Q6R zJNL)Auq4?-ItnvxC*==G^F?8>37SezItDbfDF(*8DXC!=Hcox#7u^w*9HnKb7MSPX zGpoKodtH}`%Ixt-uy0CzlxUx9U4i966^ap{*Ebs!;|tpl+nLg=6(F9ZSKtfp<%!wN zW~?+N(CaRV#`m|DMdexvQSL);EMM$0##jv~P_{;WXe3M>wCp}1*Rmb$A<_U79YOED z3l9J}?mk)@G3lPq8`i0Q&sulN)iW*e{WE-+)PtgW?ksoN3+BewI^qdO zj7guS@K8TYjVX$5UsF2uc=@*PbT4KlslrejJ9B92TR(P1n`PTYQe8w0u7aL~kGvjz z^@93hK7`}(gbB?~^cj8=4icoO@Sn_aJhZ?RCTZM-CcO0aVrc=SZTI6tT~%G55Q1Ah#EM zZdh)>AbO7^+t|0(8l%8_tK!L>AYL95R>Yn>Zl|+yM1FQ&TT1D*WMnrA@?32%OIsu> zn`KZ<>vC_elob}wOW>*b?@C&YNDQKFDN;p?8uLleYdiV(?COn5b^9t=oVe!R|%FYzWX&IJ1omL(z|Trb&ke6xAeG{0 z#x*uX@~C;!T}ERZi5Fm+AxZ~3X}umesq2y_sSin`A3Pa}vm--_PA<|IeZt>V$_mAB z_KAX*hjYMG_R<)~X&##NVM|K%g%w>@!Q|DXY~AJ%+dmtYS$f6WlD*?btz6>OwP8~&#Ve#7nu6CW9zxRUWSxS}j%r(}Im#dOC7vAQ?4L`VQDv*{QpRpf~q&si>i8!c#=^cIel9nS2E8Q2SB{AADO0w5!_&0XYI|vkGoc|mM9?S_ zWjucq83`DMIT=FRQr+NG`p5X;y-3a@kcN`c=|8S(b~RIEhfvlM)Nj`ZqL0 z>SCwLPB%u_VV?&g*x#Z@z)>@&KG0`QaWW+K2ecqo%ceMu(=*aDv@B<8h>YC^Y35j! z-k?2uPD5WTV=rTT6=}UDj3q!khXn#>+w1JZID>JELN>IjL3Xj(XldW%Qm@gX%H{`_ zIO^KZZ6Cxvk|}VXQ@`XUyZpw_PNQuz z*O1{2UvfKHNY>z(O@#7_{qAa3-dHy}taEeJh={AhrrzD^z$swbYPozeM$Z<{e6E~@ zXspjhETPGUlnFJ{Yp*ubi=2RJ=#!Of1x7vgFq7Bl$223KQTVkW?1p)H3SN)96I}*P zLyLJ7ywEx4*O8Z~f)0FB8SVv1(e5CNO5eXfkunrgM~xp7Mi{UotVlGCJA#4kyEcfq zfa2S(^@%q<39pq}_nb{1c5v<0$uL|(FFqMJD%IVr%C^R})$nK=oZiK4{vA)ze zjW<$^@!DNAM*_zgfQcqTF1?$kv&w|_5Nf(Jzr&U1RU=@g$7$uR1%=)Hy^yq0YC~>f ziiWQw(cror6iu%;jkZtg$7br7C0`-1y=FCl4%wb|_I%h~aR@x4B({oO(T0s6c2;~q zM3VwwH0eyYSI}Hql*YVfVtnNjGBpp3Cdr{qM0{7=^5%lPdGuuOJIn={r{57ovC|jg zxgszTMtx(>c>kJK&z^&s>+mu*AHQP##HkW<#hj-r{0bCmr>aEMXH9hyazTPCbp(f; zA9Y`J@oYLiqz)0}8(H_&PjFg#7qOJXl2_Mz7aBN9Az2X0P%Cwzt^uKOxtp9b+K z;`79s9ErPluGEeNM7de9JZDPAE;X3thpkxikj$kiIp=@f-5mvcuw{)t$&z=ja_k%n zRvs}toVs+?L^9!K^|-oGuSu)~4L@~`qeh$M`Oz7%4PV14dbw=jG_uL!5Fqy9K0aZL zzJl~sR*JkkwH+MBF?NeNegjq6=)t%PluzZ8cT5kQHuzzaiHq%wOba+HLw7P#M zX@F`aF+|oF$yYCQ3|x|oi76lp1|V6i(p1w<4N)=|lu%1X`Qtg80plEoB`Z{z>AJ-aRqYO|Y> z(yH>f@ujUtWmQ=(#Hm1;6EZAr8xSAgXZV~iV<);IP&6|g=X!>vVqdq`OVMZy;SH7D zS^E%;hDV#GbpE7|86${DAEH}9F&^l=ZH`i*pEg__3nk27vq^+AoxN9EHiT)Z#j2xc zd+NNOZUFros6w!=@DgrS?}V{HN#Kg!mPUWnAh&hVM9$jHhO!ScVC9Ikh%lq;GNu~Z=KcG)8v2JPpwfGISK#W^8 zmTOmsrtc@$F!Xs<{1G0(@LP@Zs_Cxj+TxvJJFI8&pQ&z55)7az-~K>czISrkN;d6iM98e(rKT z-^Q*UJ91gPU$aRjp7$QoO^D4PsJCCg?j6Yy_3(v8 z(%#?-#WS2(!nyWlZ#Q*qhO;P{0_V zM=WjnaR#p%#+crGCS8Z;5-s$hJs|tmYw7qs@RhYc;S=q(O-DyHyq1|6u2HEW{@KgG z`emj5hfKa}0zSbM&4z*2vrY-I&$G}wqaGnmX3v;hf1AHN#KX4Me_y@uZSoq&EY?97 zHg6M#j}U7n_VYzWgKBmbg#=_*H|;&)oR-rxH_c^0R zHECa`?h?nL5U%O8SnCk7^et;fdV3j5Cqs8`2SvBD%Pl(o(Q_AXb+HfaScn;@Y@}b1 zDO6i@Yk-L6dJuIQO@+&DFc~tb>MCeGH`c15SCz}mmIVc5bl{UtIxJg{VC3VAyGCN@ zC5AzIcc>N{GjyubU-O1qWvv)=5SXwVO|wtpe>Q(%!^5!LG{`vG8lA^JS+u2YlotE) zx)#KMJ|R86@s8|;DY5vbt?-yZ6MmdmxJp8HX2d0^IjKUbMy#3A0z(6Z*_w2jEvGvJ zQzDUT(?8_k?q9SEIOXA_CA#}mCpzO3A?xyfyX8n(bltmNP}$0;NcZd4bwQ|f!hXwXU*+B+8+{;%EMS|hqsnqM2;n$zIPAR4#-sqd&}7DAp7=8&jAo29fklj}XCda7}k0guG#Asch{ zvgbUfi=i5>Uxha_+dQ9N36D-^p!mq$LLiLG54i2!#Ur7o6p zVGNC*<-Wktb34^LSYQ0MK23q1{8&8N5XJV`t5>bll*g~0jVlxY!dSI3N1Gr>0Gf~ zoN|V2cVS2h?NDVS6Nw@UC6;f%O#Svcdjw{evou9^H>?F!zVe>aB}%fq@L>9oY&r-k zjrU9YR@*h}v#UP7=?;Q-52DKFXT^AW2x_9Q zpQU>_&e@64>(r?|lyE9exPe|xj)`f0vE6xNHzn65Yu}tN;i}_oA)bOppwL=*^2dBR z7o`suDrn^h!b}C*BH6L6%(luFOD-m=JNr&f0@T)GmulK#yO`}3UvxjY?rx|(C7 zK@kI`lm+6*aLN}N27HsFjHU>h5hDvkc0MQ0BU%A8lcRjDUry2@C|D4Zza8#1Kt2*d zvA{vb4*i1d&tUuC&^fF>Ch#@?r)l1i zLjHYRkM;Z?*k6&3Eao41xqf0Q5xh2k*Hr#9;XSsJUq>Y14@74t;|n>e{!2FXAA;}q z$Q;A_!@{qa{|lSk$*})$I`p@PGUyj7vVW)*J~k*{=Nw1GeJ3N2@_h>)3!gmq`Uflg z_h|ijC-~Y9zcD7B+!WC7AO5Q;tj&%AKK6gUS>>bB@6q~s*$;nw)J^`CzVavSgCMf} zGWPx&8=QaUihSP|Cu%P2H^#=JCi~AO%Z&e726}U6Y&|^_7bBCe6jyqB$FKM|m+F`y z&c?-ps&b(O<%tSq!DwBqeX%*PQe%Maf9O-|GzB~90z-TIRyXVg!8D)e${C*b=B{{LU_{>>Tp3Gn_fp~A^P|8i>ol8reA|3@peFjE6d zdy``u|BZF|r|ZDK;`x8JPIm&-sIqEmO6**S0ToFek)Q*yoQ~jy{_Sc&+;s3uXAlYkAT~$|a)W#z4QK?KfM%dMXbIYY z#^6oR33La&Kz;BI7zRdwF<><41NwsgU=Z98j0Y3oXW{H{E;v725NHINfakz8FayK_ z_kcJc2}l82fi|EMt`5Hj3;?e|GVl~&2~+{qz$UN-d;}Z-N5C0y0bBt$z#Z@aJOMA@ z7T^u|0KR}9SOM06jbIbl0=9x}U>7(94uGRz3YZ0E!^Pnea7nl{TnVlWzXX>Dr@(1& z4qO12!8JGzxB>2fyWl=}03O0o;23Z;I3=7OP6Jqjd0+vY08R)e0}6p+padua9s^GR zTeubcCfo)t3XB62z)i3Ss5vPo3IbR)S6c+;Uvo8m;ZMiI{fs1zF2O;Axc_>gd_KC6 rn2;pU5pgqd2-@$J$1=0wIY>Xs#%r2qG#rFn|h(eb>UW ziYQ98fJ;-56{LtFU?E}$%QtT*i>`~`fBrrHIX~xIX6DW_&z*8-n7J=5EBs7gFzo{l z&i3B+oWP|p7-Ia(moN3GMb0#8B9&$2K%|qY93!`Y0G|LBkk`28Tgn&2n|AH<%+h@BtdMP+kPs`GJp z6PYNj`2Y@7jz3r`dL&9?KA1b5Ly4sPU`#GF29bl(oR7z4dbQ{8wU4{g`~&v^?lb?m z{3sC=7KKitxiWC+*hfSeRtNFQUbt}KXpcD9RkOGw=fLr9S8Kf9KNeY`y<7ZG( z>^LU06)0pv95a#ySeG&50W+}Pzm^h3jHfc?mn~SMy0)@uCn{ zKi*XhBs{#RG)Pbw(AEQvlH_6pq(o&faFmo727^Z+kr=cVWIxP=YW@hSVun_of@=K;s%nZ> zpMq-t2nrS(gOGv&ufhW7aD4#M5U?43!)7?kX2cB#7$Y1U zWh{on;WdzWX&F31lTV1$z#{+|;52f?Ya-U+01C%t0=zLEjxrI$uB#bHqA4z?yPXKr0;Rli7FsjGOJVIX4F&O+XuqAM%^b@-N{QfmWtq zq?X@|)O2>FOS$I&#tdMrzQLHyVywB<0AmjNY4hEFn$PyrmfH%D7J$v}8#aqswx9T} zu>@e20e5f!?qG?w7hQ@5gTwPrJCr@%)dxDS9KddO#LW=OO%}IeDlp+&PiYISlgBK&+8oK%jOwAP^qH8Uum!P`wclXsD3R z5D3Hrr3OGCy#BPzj7bNSp}ZCl+3CCtNFjmrQa~i8^9w)!Gc;4lb8dQyTQ|9u$^&4;5qJpv>X{P961XVy9fhOjci zL5iuXJR4#YOi-XR2y7-XfzE%Gf+qtDdfk#JY<7Z31d9<1)GP`#9)1SYQJ6%a5C;lk z954^g6!4Y+v_ex4fZ0Ayzh`I89I$<%@d&ZOEr05GOe*Un_4I2e5QSVQ|2{OY6^0%xRIDUFXReE}Q+!ayVmNsKo6^?hi8r8d}a*JX` z`>(qY3^mg4v`u~sU%la(SFPMv)%eU+{2TDJ9~UcdSLVa3Wmjp#b|s^1J&xNbH} z6x^LakCAhlcymcK_T9(!yd?T)UfbdPCx2$i-x{lpx#F?j`kb)s3B?LK2XUkwIwZff z+7y4YJ--Ov$=mbP>d2uCt{ej!_Ul|9- zd%d?FIJEi&TwYtbH&e-|pZ;E%o>6x7d_bn98p~BYV0~w+_JZQ*%R`P+gsNeWK8%C zOp1&zc#yg9^{^vvO9yW^UEf49IZEp-4vAq_0;K{`?uez@B>&YiE zxT43w%P)btvZS5-Ku1RQ6B7S!iO0@cPkrUTD!=j3$)+gHk0vbSdE*y@Vi+T4x}T2-g% zir%frw)U1dm{z%c{q3`tHSIl;g6)pVNbL4t_EQBpXLTM{gVr}v^UcV}k9TTQHU(Sv z1FNk!FeA8koS+qx`d1vKo+PHr+X*H4*(o)N>BYD26@^_sdh%mwPUDIfUUj8!c1-$d z+-|&Tv~i_ehvCm1R3F>Y+hIv(1uFZzWlmc}-c-9EhHZQ6@pHwQt=a4y28OC>svA_g zG1h;sh_mTP3W;z#|H)dm_1D~ppyN4|gEn_^OsduqthXqI8{J1O<@N6Lr)1eF>RJ!! zTYvCcUNQQh%V&go?wxoO?|%ICW|cmDkNcN=J@>k;9I3N6MR%%6y)6oqXP9EJCB4cNy&z8H^ zvaWnmPSEnk-BkhV^qQwC^vZa2PsmN*;XCieOB zij_YdmNUQpz%aYvPppTre&y*z4VyT(l?4S1diJT(#> z$=#&-XQ(=VD;fx_6B8# ztDX-ux=G6D2yWVqB$2g<7fP>d%&hRpJRyx1!o9M;VbIE3m1Mr*kAZ@{%tkji z{ei30RBo^6(8}6P9z_Mx%tln#F{IcgIlCq$+s4Og63pdwdPlH^?liks_cr}jUEQUiGuN9XtM6GO`Q?DaQk}JL?%a{` z-@<;Mait)8&}-N}FtKa$N_`LO4YnaK!$I%p&azEL$ql1PPGh(ASGIt?SuUJC>8EvN zS>cAqZBDLV#*vS9Jlxf4_Ri%7a?cvyPY;F0Jcl#4oz*(47=3F|dGKiT@3|ibHs?;n z?a%%EsVMh-YFX~bTa~$q8L7E1a|@m5`I_GS7UNYh+)59^``3adiA+1Hl<#))l+2)) z+GV!s`#tZk3{6f+alQR)Vr;n4e6nPx+Y5=Lu`f?PwC8m!LT+7eTyzynyZb(Y)li%7 zK&;WBqMoe_4_e}6|LRo9mUou>itLXaujYs&g;Q9WOYV5$)hSu~7&{vbclzj_mL!wl z25*~5$r|hKp3yf{P|%}#w^e(Xm2Up^OyjN9-tK!FPlcde7HgGi=RWlcaaXWkvR>kl zr*_59TbdqsRt9PB&W{moYJ4_Uqr7bgP5JjD{VLucS;4G8v4m2mu|e#gTrKL{IN-t5C_3CPy zHYw^(p;7~f6O;QzX_X4wCx7`+{p@A#c6#M%FC8Uq?25!h9R=Rk`DnYiqg22DyBN+?!Ir2P> ze8g*(^FmCpA4z4^YwS=vy^n05aJi_7>HM&w_U+FmJCB*4Ye^D)k+w=!!f%Rej+cQyY*erZh!Q9MaHYPe&8iU@Vk z*XenU*Zi7kcbPRJO zo!WT$(^{{kXf`6E=jYV0S4=C05zg0ur#!f}f4CQ25Wo0TeW(M`HTzzVh;zo1eF|I1 zozkD1J+>-5lsuT-E8uA=pYNnlgg$%HF}YI^QLrUG9P4d!I8W+>-$IsGU#?G7bY5Qm z5sO0_9eE-raqkEqYJgTpCpK_0y;cl}$U;DWn z_mRC=O*1W{^~*-%)SR4B&1V9d&F?m6^u5bwW0bmj_6&VAJ1IQb-!3ToTkx;(zl0ZO zD@ghm2pe=IoQOsESCq*siPvD+jmg;1E5(8b$0X@Ie`bT>i{)t->H`;e)h;Cb^yuz3 zmz_E_ZP5)Hjoi-93$JORs9pPTrX?DK@~S6OP`J{%OC_|ANcLR|+YH2!1$9Cz6dh}6 zr^NEa2Y2oCJ9H9BY#($$hf79ZO$f94*`EE#%+t3y?E-bZe#SBPa^CJre~DmHxLT%w zO_c5cqBpv-M;*I0YVXbD)qCiQy&739D%vBpQ3ZYLgYT4Qr%H#n%ZCSV7`l{_ChPrL zN;)qnt9N3}kpiJXv8<}sreXOqBDW>wFUvoS6MO!r)9%pityyiBm-Q1myT0sw3)`Zg zuJ3VCdgPA9h3JOvpg4Ga*r|K^Cka}kW1U@2RcF~NZar5yQ)Y;Hx%7Qn=&JK5`E5I1 znO})kHY$tDsa_e^b(-A2#Dsb6`mv{&uy=2m&ea4}^0wk`ny-3$h3*cILuaH{5ZZa= zh9@(}DTIXZOIuy^jNBDXX%`a@o=;SwG9%J3U1c3_Thv}AR;8{e$fnaQ&2GB5x-BU& z3izcX^x+_O>oLPEM_`t(qBP-WL&8aqX$hRXZoi)V7wugK14w7j2U>D;R!NM!Q1A7w z@4Mc5>i&c5_*D~OnF8IftIk&^zy1B;i$t%4z@6m5cR}7&&zn`un#G4I9v}I5hWy09 zB5KvmQx;Zh7O$y~%c#$n+YzKxY;0P8WAD%H`Q!ub2tv$uIl`(ElR%rHJzpMfQjRN~^*wu~W*p@winBG3=mw(*WdvQ9B=%MhFT%e{q+G~qn z);(wK&R=)MhBorFTYS2zy9$qn93BsGZz9_4mnyuDM8A1v&oq7X_BU?6PpM13w5%mX zdG-6w$r?ncRndZKVJ^~c%Sgaz)>FsU*pCZRjjDUqd+y70$}FZ@9sO*1Z^ypcjGSJq zhs3T;xVk}=uoAM8*XBC;=1qGy?Z-+PJ108Efbd~A6e*IV@IRvyNKq7040!0rn{Yr3 z0G=Q`{cRk2yJMoD=%4s((1ZUWkO-dwBG}Z(1SFk7r|?l<1tPNEZIsiXuXhr)`D{;rbWi8%q3e;@_}`VR3lIF`tq3Rxf$kPIdWIPhmg z^sn#nQwk&zd>9AaMbRmdMCd~;q=rRDf45`bwKr!V0tqv8f^qa|E_eb0{L4Xfg7DYl z<_~dh;C8y(U?KjE$(tKv`QpTB4S#!AomqA{(-;CXcRGbe=ke3S!x`)-PI!13MIhiYBI5;gK9|a2 zaT!c{8I8{6(Ww*xomNdx;&ONbemILZCod|VO%*UWY<>ibLgjJzBtVQ{acJ>OdIVp< zi>C@mYz8xe&SO&8(ZkVnLHN|7$P!kbLZgLKIcx!)EeL1Q+0lX+EMeL=f8YW;+RP<} z!sF)&IN?AWm}3bv9*6rknd)f~S9Uxrf=7>~Qw3Og#MWO`mm#DWQLNu3ycv7}H;$eh z#bDF03S3}{{x>14(zJ3vW<2nQ!)BWW3K&d2nF&P66ee?lUlfJOrxQ7GSfwciF&w^t z$%vy*+tM1Qv-$BndN>7%k-`^{9OpVlL^9YEUa}vb%VY@1k)RF{6fT#}rjdY3By&it z%6}_UK!BeskH_KV(UYijE|PXXIx_E`vdaK@jHdIr(|6bu*D(E6 zq~;c;pqi#6Q=+3Ic9!Wc^8AB?OJ~wqpk`PFQwE#KVAE-)-}esSLAh{fbQB8HheDxX z0LWDfU>*QjG%Q4k$!o)Cq64%;87ps@>72PVK9bH0To<38xySX`95jjC1QF0=vOF05 z$ZjZbiy*tf;Kn73fiay75y0YNA_|=+0plIeWkOg?{v8=zZQ811&>Exz<7fuAf^>+u zcJz6}XF9k}bT{BrKtD3Z!vwU^M;${Fz^vSe=wSjH3(F9RWCDf^Da^sk5ghUIXsp~J zWf(&yKtiG<43i-Y8Y@p$fXEnyjWCP>nqWV;f}l)vBVk+#5F`(jVhKW$n7oucjK(U! zwj?BQA`Bly5tLCv@?s(pja3x-0R~0Dpd^EW$!;WqFakrws~Y2#p(e5$8Inf0%hE z*;4wbbTO11;xb{XPTCt`6xl5u5@KOVI2{Y;fn@6-1|9K+XsqtvJ#Tr)tpH*`jE%gujLhj3D8{Bp3+|GZmWt zkI)o;gl1rkHwJYwoUR+DNwiswgjhvnw-^htO32+rh*bvFGX~W&-G?^=+oKkY%6X#7 znZRP{Fu?$C7DR}^k-!~iA4K2^u_~$J#IhhlI*vq;AmT}AtQlF#2t1xxb0Jn0(FQgz z>420O5rQfq9k3THrZmD*CM2NI$^dT>WF^vQ0W?|xjcTdl@?mrNtj%rk`UwAsKL3137zX@nJa#k`~9pkQ)gJY_3SB4Onw<#LtCL;3p~o zywlKOVDMmZ5xg6K8~{83SpZ@Hkar+LLjxcHPym3?l>w*#fB>igmS72cN#YUcS8UOKSDS92{#2eB8$+?f5O3A=?5M0?YpeiPxLuI;aUjpnk0&AIlv_W zfPO+Ghwvddav}1X01$nMj1mCEzA6Ak00aM_APoRnN9baU;@L>vtfy(n9iiI; z5M5#yI%@!82>_9?1%Rxh5xO@+0A$f_V2)f;0H_&EFk)iF5`WQKP(<{9Z44-Az%TV@ zcR&#X^MCj;r=Vkj0i_HU7-6i&y39>6n2^eBCBNUA)fWSrlxPLx?&`D<%oId3+37yS zbgIPxbeRlbL5vfZ2!ZYh%q2v806{q-E8?P`b;N`jgPlNOGHArVsvu6aF+_u3fTIZQ6j<#N@k4-LG6A%ypzVo6LH1@OguoHCL3~ls z6II!uP2^G%*`S9Lb*;Q`E{{W{^ZALmC?1Ce$UJ)D48VmTV2uv?AbO%KAW-5#i^*Ui z8HojYCHS0p9+e)4T4El^2R6-V3<{eP#fUQZ=R^q-fs{EvhQkqnF3psl06HOaZVZRc zW+a(|KACTh^m7b>Ig=6j9i6Hd-;ACFw$H-IXa;yZEi(L2D6h3iJ6l6oi8tF6YZH3R z<7SGfP`%Ubv{ZIRI7sA|s=UEq8LK0C`6^v6aaymE63-Y18?*Ed(<=wxzMOnfl=kvB zPq(*0R*4nY8muQytb9;+%KU1h)$fD08T_!-q*pIDq`r7@G30{D$s9uSt*W?>B~A`w zZ<9K97Z=-UcFOl9Zpql@>u6Q1X7^y5YewsHxod6yk%{=<`e%AJ-2Axib~)u5n);RU ze#gbLciyPA%+6|iJaCr(Lb7FV$;!S}Da}KNZ%|{umNcJrVfE9Fdu2TwaMESnu#~;N z_1p4c2}fL%YPOd{OJ$f<@yxqsdb{S^SMP8A!1%U^`*8R}dHTc7qL`>|?b^W) zGZ*TtAUzu!+TSnf(_6hRnfJoKcF`-ftjZ{Ejn@o($?7lY!2)Wt>ZuD)wQA<6b-Mb> z^l_Qy0XK*0iVyHzo~+((-(BgruS)KO%3V^*!wBCHr2^NL$9(-~T~xy}Evao+SKQLQ zQuc9lWQaZLTj0nhbiB9=4H#LjeHV6VRIRs{H)3mf?9!2IR^tH^*8H^>mGrlz-O3qn zy>lX7@$rppFU#7(=yA_0f8bbc)(4rPSHd1G^|fB&a%z6Nz-N|<%_`siNuBtDv;71w zc>Te1yGdJ`Q7M3=FWp2xEiKaa`jg$*@PHt zeZM2d!F#<5|0rknSdk4zFkKCW{mbzV3p^Ae4?8!nXx;p3nO1&`=iw)=7k<0G41Fo~ zgjD-%j$-}rJwVdB7VsFw^9XUp4V?399#_`;DD88nswHK81KVK2FLx|&dwA)_F>HL; znu-0nV|`mP$MO!!yw}>5UNLV#r^QG*i`fxO#Mq6aO=EnD{KGts&nd1r^19yQY-skb zyNSgaIXa)TelPBeCf}fu{kPYmDt!9wbn+KQ4YpSeZOn*s*|11jMa;A&6&nH%zLMN< zb%UVRzPnLt5Mydn?O$qpKP=|xdwH|M$IeoXLJ9nmt~IJ=&l4`$*({>LU@_K@cymG*dzh4_&#f#iE#JN-9!1xYs@ zp9rDIKW$ifXXSPW?kSSbQ(2iniPYGRsv8=8c`JGrjt#sw@GVQ_3Ntzex<2J*=Nr`2 zHQ~?ZoGW~$*;=US?LGdf#9rg5uyeyLRBb1u5}WF}+C^H!^HG$^#!v}(Y>~vaj%w@J z(O0RT|wRh+f@dU^A3 zjAW78myy*eCr(~pwOm7`wl4C{MH7n#&|1*QZtKxRkmJ?sqo)p3GS26`^+QfkD=pi{cA|)`C&fpcixZ z$dlrpmUWFf47DX^_C-z>-W)PWnzmax1}K!Cm8;LkPCiuoXj5um+c-J9EDQE0Zl-d%m>Skd6DoOWAYL&&K@%#n8 zuKW9r-HO?ooUhW5hrPcwVb#p5Ut~(w)xLc(Qrp#1Z@qU@Mqx_afVFx>375t4@l=Z?11Ve4;67^JKropHpn!F4?I4>g2MA_U{3;Deym$tZPRbODQz~#Gn@9xeG{OtE3-mbLNJa@0B;YS9;?n!xw zM(5S_ORP&?=;8h-KXW6wsZ4(p@38WL#q+qCbx!+Qt7^OH$Lp^<4S1ASchj2Pw`)tQ zUf7;{{()f`lN!C$-)s&eYk}$9S+>uK{jD;K*Y|6?Cj_O1>gES(Dpw7vYLv}=XzpO< zoMUKj=Dgo{@5<*Di~TomP?q#usBiN0@M(-ou6nvhU5B!(G&;hc+%r3zpzYyh`kvT- z(&YWVkC!u;?McR*?o!|JZTsQ64;p@UWodmcrE+|>Tg*E6ICQrd&pWk3usS|~x4P9U zFVyj{PUP+3>z|4H6?`sbxSf}KANjKJmSTl+l-$sWiGJ9e-Ww$~lMbzuHhPa{WRDe< zXh&+@Jn7@fUQ{sIa(dyR5TzX}noKJ0h-pz*D`sDmj}A3io6~ds?&%g)wace|&&b9Q zxc;_A78jN@VJa&I$*I1^{!sam!7XlgZ$Uo1-Reu<_8em@sH-Zh{QRz}{^OPR`r)m? z2lI%{&iC3V1Nm2H+K$b$7~8(G-T7=tnP#98i8fxpSSKUr?wH?-=6ijcCx)d5Et5BR zE5GS1}@*PZU@E(E5#Xpu@w|(;5^oc`;Uu%2R$mVm@(_vO}3?nPOqnkFFU5mwH zPhQ?V;HG^)SaYDXO{k;wtr1(eV@2??7)1)BO!jiU-l}vjBYw~5%cfpMt6kUB3+y?h z6Z5Q!-`ZuAQP77^9uFJqCV!ubLGuBll%4+Tu{bY zze_uZ9XD&8IUl90hpyj=eI^yu~FltaVKv=Sn?4{|q8jWw78Gmv$_kuhyF%!<4?3ew97YWtuX% z!#VeP2hMyQdB`+A=dr)PV9+KxP&vSk(}m(FsoA{Us+v6``hZ39qV?O4VcaX16=bbb zeTNHDx1yP*W(Sg9qL(UP%UD3E*<6|;tl{EJ>zUH^GPA^!dsrT!b%9&jLY{s~I+D?G z)_49~m&*_JH`AZV;)?R_Yb-eRw!kggdkD2q>bK~oETg>jM*C$0$;&R{6}96My@Pj3 zrmZ`*iPe`RIj+0vyzfqEMJVg+Y-wcR3n@>e!V5mPeO3w>w>s5gI3YA#TzfA9z2La@ zqP#kTH(Q8rd<;zHpMjM}HrzjSd}HuF8+)u=&&cMoFGYUwDdSoPCia%TT9}(1)f?Xa zY}N5A{cViRy5Mfly(dgA`P^8!C{363D!*C(!#K29)fIplFgyXSTPewa2qcK*Ny{LL+|zV zMbN-M;Jm9DE!FeHlZReiBnF|1!X8!FFxAT>`zOl=CVEb&9zkt6T~;aPnU#Gkm*3cW z`>WoGlG3uHMU$PcU3ha+)E*5;CT#A_L7`leT;jk1i5qgvAV(K{1`4Of(5Z2BUU-59 zavXq8l$`#;Bl=ezgB*tZ@-StJ8R9dd0f#vFbOgTg0C~VK5}ejWOJ-A83~C}qKsPd28U-f=NKSrrkTj*^UvdHtJCK~9{|ysUEaHNA zE|ZSPKrv9F1eM9*(`lmYPOW1o0uBpFdpsMQhfLAHc~b0Dnqy=CZK0{7rs*)hrw9H2 zP=HwdXP=Pstyts|rR*K zi^U0WNw{R370!BFInDt$59fp<;1qExI8~e)P8X+-Gr$?*lyG`DAKYSG04@-v_{&2x z6e=K@i`bz8K+el?GbX_YHX^`~i-tv$#Ux2Y(d5T4Ir(=A>Q4%CV2ND+O0h@%4+st* AdH?_b literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.InitialHandler.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.InitialHandler.beam new file mode 100644 index 0000000000000000000000000000000000000000..f07b1b1de4887658bf4516e35aaa24e3c9446adc GIT binary patch literal 22376 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.PhoenixAdapter.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.PhoenixAdapter.beam new file mode 100644 index 0000000000000000000000000000000000000000..1eb79bd84e86573bdefc3a3cf59456969925d24e GIT binary patch literal 6664 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 AumAu6 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Pipeline.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Pipeline.beam new file mode 100644 index 0000000000000000000000000000000000000000..e105e63ae71d39788c17192edab16b27cfa423fd GIT binary patch literal 15396 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 M1*3?N_!klX2QHENv;Y7A literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.PrimitiveOps.WebSocket.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.PrimitiveOps.WebSocket.beam new file mode 100644 index 0000000000000000000000000000000000000000..9bf926ddc2e9ddfbada8a39792748e528acebb3e GIT binary patch literal 3608 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 Z{o*JZ2HO-B3bnxx2s)$Z5c~!s{s$lvBfJ0r literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Trace.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.Trace.beam new file mode 100644 index 0000000000000000000000000000000000000000..3c1e9f5d43f6db28465ab524f5438ad0725caeae GIT binary patch literal 13828 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 B6kh-U literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.TransportError.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.TransportError.beam new file mode 100644 index 0000000000000000000000000000000000000000..1b378e85e82d4b7858c0b557e5fb4acc64744d57 GIT binary patch literal 3612 zcmb_fdsq|47T?VV2$8@-c*?^dVAU!KQlu2M;Ss?a5fv1rx>=G10?BUN-H?cFwSWbx zpT%cI9-@_s)+(j_dh3It)GKX$)Cc&i)vMx*O0~X9dn4J6OA`W!P)aV9NeH0cdggN`z>l$PWvT{C5cOE|))i>b;r(^_87(459d zYFUO;0HVgo=*$L6!||+H%WEjsK+<`4@+h7dVA!lQ5X1nVAe!w?sc5rN!%{l4ma3wx zTFL|!n~W64k$KcHyU=8cr744HU~T9f%C;W@*dRSyoTbaEFN3qC-NGzByq`fa}LF3mY7#A*`#WTK^4jr1e2ml zr5E_7D^qaLX_P54(3zA1@LjCLq=178% zX_NQDQIS`zM2gi*q_Z#_u8=CFz@SL#hT}?1s00KTnPP*)8M4WHA|Z$;SC1f`k;G`d!6E2k zzn9Muak5>w0$?r4W>}anu!#S-a3u1~90haNC)P@EP~*TYJi;<+%yaGT^brwoiv?+YBgIGujN$4F`a~hY$dG7BYZf z02qHrdvX>DAcumv+O~B8*b7#~(J=lfjU(8#yzp_A9qU>jPxs4Dk&P;VThF2L$s#>t zW^Gay+>sU?sj#3RX%d|aG@KeZM;MGdW;W zuG5n=nXAv0&tP(S3s@!R@)?HL(|Mz*B8ukarhJB?^;S739GpDIR&V46eU4+uJ4z48 z-5@PTQdV%n$vJs?5Z?Kv>EJ>XTWfD;P2tWdaHsS8ll2a4Z_cQkk8-}Z9h?89^ zqUwvAmhRpyUo(6t_0c`!k@}DWRShL0gV(*#u+Y_ca8Hk-Z1-V>A?sJSljlrTZ?DdG zc2O5oE0fz2Dg{YnMYW?U-(n0=Sip{e-iV6Vj?L0M)8zG^q~5AYy)gemnfvODv-85seJ*UCa=hxUB6jW}UDrzo!VNxiwme`5 zFW8cQHIFTtV19k|@8X+Z2FNRp+{bHr54u%GoTaRfGbVjBdrn+uY+ZI$t&Z&p5 z7FO|^@W!ldttItwCyyMzG$d)`n* zhWJwx$*eWO?*wwUNBq7p@vDU%_qu9!ZCiT7Bm2~qg-f=6f6FzHdKq(Wr=7O-?G=AN z|Fd~r@c}b+yXCUTO%G}p9XLm#y`MrmaUuiv9HBy+`T|##mJP(H++1|1y z|G*sctX54;(~xPAp^+Ene(~*a<-2*l4Vqz#uIFE&>(boM8aKCGyf4Fa9V_&)>Q-vl zk;cYJ34NJ;ZkHpH0+ug}u2}Zt-m_;GzdFSD=B46cYv&(jZ=Jfi|KT)xPt4q(KKP+} z>Y>b1kM((L`@i|3x04xK-@PvJYc666GicS@?VPBmZOnw=ve16yZbdb?bVxFzT-;{-9{tCl_ZF2t&&Ph@e_=YWMy<)_XVhRtd9ltR#b^G2kZ?9ONywTF}LY(5umgPhFqq`+zgZWJ#793ux zV=nLT-MQ)ORp&drRXC4@#ayP|bq>Z~tN(1+=O;EbNAa%fa^LLhm02ErH@@&*vCbIZ z*^zfJy0Oua{qXe5+2cLhZ^|RuH%9DO)ZVlAE&qynm+zK8PMAQQZk$@a@_IzE#|Zc9 zKZLC8k@in5dg!#g^(Kj^tVx9+dJ{`Q#`Ls5O||)ywvb|pq9|CRP>YNG`E1M3`LHlN zRi8*?KnUaXd4S^t-s9kD3)kff3hXTKHXWc~7H6%2;V2zs2<^pdKuAdPj1ej@)1W%o z7lP_t@T8*tKe?xz`fJhWR?~uKs_|c|vAsYFK>M$7pmx{)M>uRT7+|~T7SN$7RbNPV^9y(;2#G#+ZX^xgYQ82?m)e!A;HhBr$8uUfeEg6 N1AuQ9fk!{0{12|(rjP&t literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Connection.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Connection.beam new file mode 100644 index 0000000000000000000000000000000000000000..f009dbfb7773c9d7a5fe550818c21a43878021a4 GIT binary patch literal 23884 zcmeIa2{=^m8!$Y_Sk4S5!-yyh#umfaQb~<9WXqB$yTRCFgb0;FE2%VDS|~~?Ehv;q zNu^CvNlB}+rKFYbIcH{~{{4Rc_j}*#{l53QzRz_%&YAnU@B6u*dwZVqoO{OF$wd!` z^R_g%GIKCvyU)hqgm;dQk7vTlRuQa3R;-S>e^d~Qt>eKAaE%TOXR>uHqNAdifoxWE zRJyM(D=IkJ*LR;kn;pvvh-Wk7VgjQhV^|T)eL>8aSZ1I9<}7%tj3h#4FK#!C;3j$*T-;+cK{tSJB3Bt{G?DufXe4gRs2iEQU! z|A;sytng3M3*_^S@sEpxNm0?@CYBi$=Nrq6 zjAk<_(c!S>KQVS@#yS8l{vk|DuAnhIff-=hOwbz}9eVP)$iiu=`fdb=TncwH*#*AR1T}e4{?C2O@6x9!- z3_`_;^p8O;0lWgW1S80w?GFUUKJ4Sqiy1ToP=If&^yQBs|N9sdzGjUYpm8!TN{iWs zM;n8F29m^}LIA}yh5~<$VESS*!BYHBT$cdz1a8Yf@%^HrV)#fk;0-G2@$Y@#~OU;_UY z2RL%~q-gsgO^iSl+Y9){! z_z}|=4PLHHaoxPp7BQ0&qGN;TAXV_A#T5$=Ka6TY4o^?4D44{Gj$p;Hec92z+_Z4w zS6^`S5bvJv0etcy3ew@`jcztSKCsY$ zrGNhnf;$SG2du<%FyM}0V!V*TNcbo@yy#@I_hAmm$^;|4!m?kP*1b zLnIDPKvJ0mQB3eVWnfAD_2%nc;scnm?rY<>uRmaQ(g>n67UJ+^h{2Eq|D72NN#Nqg zSV#ev7={4&pU%LOL8l`H2jvKpXok=}4oN_=2M3*CETn_}M(iUAxmOp28u?nAdzKAkx{&MZU}sKtna2NfmK0z`@stiT{@k%87YLl}|K1d$>`NrgewCX3KxOz_AY z8K4bBok&4|*pxy<32;*4b7J77Oc7-WR^l^*Nf!O9Fvyda4-gMk+;L{tF1 z3YT67I0O}f!C*S5Bp9XYgga0fQm7n2b9hV*F%(lo9fDOSRHs7)it~eDwF!_G52Vg; zBQp$9LPIwWEFnTkFGMuJ&>GyK<$w}2Ay@+m`an`W2&OZL`oEN<&&P*gy*)w;8CZBJ0rwy?+`yDcZX)!3rpPP^)}K&} zK2I?Q6Cgbv$Z!HAM+K_jD%EHLszv1tae=c65o3TNRUkyg)Wm^h3WO}l6fohrL>V9eNJPMArU5Oe zP=IW5cm^2{@`ex{x$F$VX1}O;X~i5%D=LhI&cK8Q4Awg=4FF7Yh9Q9ZaiQGg0H78V z%0lfS4YUQImJ`s~mRyh(sy=HDEDO|U0>X2l7@fjZ9~sceiI5tBVu}$Po+kmV0B5p= zU>lw@ap38g9_{#ggkalAYYPQkTYyhV;j<_t5s(St83jUum^JkAl4t_8n~+H#j5r;L zMTg);99SMmG#^N0FGis-$bvwOLd1bwj5v6ZQDdS`?FhjRsM>&Eb6^Eb4(ACu94E;^ z|0M@zGCHXcaT4Ufij#z)0AZYdIh`Po0}SpwNjiY9z=ba6z~~~m0GQcD%o$`@k|4uC ziotidLc|p$Sl5XJ3nJ2$pI~7nOwQ;DIo-67NG!v;14X-gNbxi55(sw3lA;uF6lIJm zVuEVPZz(ngOEW$o#d<)nMFGKC8|EL(OO8N0nxG$Nl@XyGYf=NRQy0Z>)^#Gehdpi23d;XiWj7h z>_t`rRZ6173?gtCu#yX+NzVnywNes|)&vrr&Rrr@97(`q5(|-4fTh+XmUKUKFKL18 zC3#$vesL89UZ?_66S|=SlSz`K1E#C~V4951gD<^_0g?m!&I(B;>9{h;AVPrL7O2`>Ab9m3j8hAdG(bW7odV=ai~#64?GFO5{a6DCbbd|G z6-A|wK=7JBFxPTrCIO98TzN8EBb$ND>mYdD93;zPFS60Yf^8mOn7Ja@XA)uxb|~+f-2V za$rM1ho@scIuTjGRkr;>oWp^Q&;ZKiz_UPr*a4r~UWhc{i;)Iw1JVPYkdOu$KjI?f z6ww~pPjo=?AUN+Y8dU!C(uDI+*6DcaJlPnw*`d|TrhbfUc^U-;6hY!;7QAJVGM)lXaIs4JPI%y%Qj8yAH7SO$Gryag*Bqzi9UWe>;e2w*-O@ zaCd}rut}brkh+8?HE}A~V}R#5Lp=H%Mt1RtJkt78-B zz*a|!k&54JbrgatCfll#j}E~{f7vSizu2mBLgjp09h(60ZFPJC#JAN6{)!|?l|)yl zs>vuoZ(Q4*oPf>-8-+Ps=qWJ<*x-X57ypEy7&*<=zZ2ID&p_~L2GI%V-xO2axrwQr zp&`|H4W!lsPiMW=Kx#bj3|1fZ*_kznefDF0g5YX(q*hk62841AgY_0f;8_T+Mfcng zd=`BU2df6rnViMIap3uaAh~nX!~*Ui0oZl$o@jUn8@k+sjdK&TaWVw5f!Q!1xDI$K znltLbtkG)&2WFtx^BmX=VeQ^?upBpc6U~|CO4KTi3h+G0^E0?&*#vQEIy#_=&7BF-{Dc;i)Lj@?(0=W7@ z;Od1mf@Lv{fH__dST|?{kj<7LokS1hF>xu<1i?-GZlWi*AAR(H1k%wJ2)DczFxWbQ^PPti2E2wH)DV|}Y}XBztrjeT zTEQl;6@puek?XvW;Ig^_!Ph5;M8^c58zQ73K;Med-vsnGA^0ZtB$We3HsBw#fV9$D zjNF=t%i9oq>sMS_VbVR|bH(EFb}@42x466u!FMJL(LR9=;__}Wa__geY=hu?ljHI} zA02|*e#PZJ2GQ@|a_IdDSL4TJ`viy|mk%aD{J89x0HG1bdq#XX0rf&3#(`EIabRoi z13ZQ3ZixzpKB|KwJT#ggV~RY%RphS+)y}_p##`VSPayb7G4hn}8Cu9w%rm;sFarl^ zmUyr-n1C^#79-ClEYS_Y&wg2AA!dm;d|hFd=q^T{|7M9E2!1}<60axFfhBs1kr%&N z;w1#Xm~07f$ca75gW!Dm%My+M#S*V3RL8f(>j@Cw5^p9zd`rCLz&8J=;NHK*sO`VT zC=CWN`X0pSI|zP<+2_t5_Idv|`+NiT>4V_DVx*s|9Cxsh7=Yk@2GN}xqIQ_-zw(uX zseYgk83a#BgWRX2*bT5K}+zLFvnHBtyl>hY4$elsgQ;A0}ICl#dR3BvOApS(A^1lj^3$*w`RQSZZP$Q?0p%D3|HM=V_9-Zd@NXnz z#mG2M!&rKx;UIW?l7?wQd~`?yhicdm9G%f1zF=VUV@eZ%G@##PbHoM`oS+maq~ZTV zvrecdW17YDwaHBt8oxfH+I7T~rXlzr8qyG&0HNA-;35i7f*Nu`A`>8;=cKX({~G%=N8niy|W4wNluN<$zGF)aU}oASk&8YK8? zK+jV&kV4uNsbbm`ZV-U;6q-1sF$K#g+z6nNc=%*ULmWF#2|&+NxbFgf-xX_+Cgz15 ztS}%Ai3t#PumV7m9M}cSA&>%TkoiyU3&DPX_Xwr|p7mWpe-P-O%I{}R>=!hoIj|e( z4+gAc{`TeoJ5WLA>n=ipB|ubT{<#E%pd^@bA#EDIm^O{O7h?f$k%cs-F^DWOcy7n^ zBgfYdq#=u*Ib-K|a#GmwGkP!@h9_#dWs#g2#BeZ%hX@@eqkZ6&11#AiNt6>rBa^7V z5Nr>qL_It>HJ(Y-vLxylqUTA(V03@Zkg{Y@!7CRK&P!uR3@I?S3irW6LvBJ}EI|&u z1UQTzq%oZXdx9xPk|2#4S~Ph)kqNAUz8k_8G$ruLOhW;EEk}&PK^ltat2GiV1!+*Y zFhHd=@y1O<8JrLT)M%hzl{qwJ{9Mo|=qV%#eT4?zk&#p?7zQ#V@LY+*qwm6CFGmJE z71E%BJ3tr<2vt`LQDA92868;-oQDE1cr4OTpF>jv{J>k0KlnNS#%~#yp9TkB1_Sma8F>!=n0GlU6?}Chcxss7Kwm`z9~%)(lEe2Cjo64n$isL z;AJOx$L$6#65Kix@CuoNz3rb%0YKZx7|;hz1Gh4uiGhZICIFf^Xy|)Wlm*%^%e$Wr zt}{SGaTGvPdG?b6hqLR)8kRgU5lZfK?)@ zAKVTeEDBr!E~Esm=soy@(D?_02IwGEhe4o$F`=p88pyjRgKGe2U`$99Tv49r_?JOj z%)7q;u4bU2^2UNT1vFGH)E?+P`iIh@{U}_(IzEaon=tsC!0m%{z!m$0I!~y9o0XuU z<7$B`N(b@aY;cdtsm{HEJ1%}S53T~PsEm9#DieyY3a+S*_We&JQ~ceF!~)QjL!gYW5@m8_nWj+ey@D_7fiu8Q1FN z`!OvMLIo0t6ZH=MxIaEa;IkONss}9<@)wu{!NS`gKM8`B>R=GjNp&n3K>Uwl7L3yr z9*|ebg24pQau$CEcmI_v%|wOWGK*Xvt9rHkpHj(T_G`N&^#q z8H20hKXl6l^3}xE9cG@e1WdO)yI>Yi;Ccbym$+TOyA1{dVhUrzf*af%Y(fSu%s?h< zB{PT;9|fx3u!1fM-%9`#(;`K~#oA()p^?$0G9w**)aj>U#NxJC;o7hC3OZykTcWlS zjs}H}LCgd}w5|}<;NQAH%@x|EkFnGKB})`Y*zRuDwAmE26zD&Mn60CS3h@_)C_2i} z1Y>CQi{WpRn<%vU56(t9hA3y*|Cog^w!&S`ug=r$L6`ng|-2pY*|XaxR>l|0d@u)Q$N0Z*p#%oc~ZaNBN`cogHXs zKHLtPIqx3ju>dqQAG&}xA2h%dXAhbQ?|vb;8iR(?qA(56P<(V9MdyIR#mzuPEV!!w z(lvf%Tojrwp(qkA%hkuhI@&u$aaqufCxRa5uim`8!~Izo=g}ka!N=jp8{XeO8hHFdLdS=NFXmQ#>^;r8*W^&> z^5Jf8XHkub0jEf|wSMH|IcK+xL~~`z*nVdMAyi0GQa}O{C^ffgFE3xbjOtusZRJe8 zUn=FAV>8qL>FD>agxf#&$QB6iS>QD|@UAhP$x3(SAiJrZ(?Ddr6#y6(NcQ%aLF;0Ie zZ`bfBx}sQ>zc>0=eW=N%ZAR0PEWWEi=Xc(Bjt?UaPV&sR6Pj;=E75s$n^ z+tu$LUNTU7*80qV^pc8|4Smuj!Bi?)!uIfs#4W+_$JSk4S(>6!LMP=sS;vx#2H8vZ zc>PG&R?wE)t?tqJ;PE;2`t76J;yo9Ab-WRFB5gEH&gN?W{?7KPPA$uhx;K9oYmD;n zFb*HsvCup6VbQ&l-c`pu3Z_Sj2eg}1n<)G^`0oAw7n|afRefb+%N|s=GV5MeS1xIB zwJLiwl(BczX4(AKoQ1i^lYi_I5f;vDP~70LXJpIB1|t{I@xqRMa_mix@m*0-v(I=9 zI|+Ec%q?Cop4l**b~8!PDte!MH2fePK367fb8^YYRF4y#{lRt9b;?w9*5nMIe{!_G z;N#0n?9Ou{lq==8lcw4}eeWDm+oPb@Nb^saM+v_*BPAze(7tk z`OPkDpP{p`=a%~Qp%nMSrKA2l_4$6QxiAOEB+Sw zOgv&&O7!C4v7U#xuA9DYp0(%TE}0HFdE>z=as@9}9Y&?EXcR${0PH+DF@W$fm*zKQL?HkH!uM!6@ZldZ} z$t1-1+)P^*M3a+MJWP6d#<<(4=cig;HFbDnY)+Qzw3v0}Qit5HDw|%}OpV%rB&tco zKwtXpzHq!gD#vi_Y6TA$d%{ZvtjU@x&w`B#n^_9-k2~2{Tw}YY+&usI;ZTqZLM}S} z>XbcIeER+w;`btL?cFWn;LX}b_Itv5gw-TPj#oNoL_5iEn#-UJb+y>v;fkF4_D*PI>t90{1tW^ICF(?D5nn5B)<`_Z3vvTJ}LUcdf6ty5#6@s++c9eSN;} zoAX7%9}mf=MvKdz-@|^`ap{4LXwmfzu2JU@7v#e6C3vR;Wx`FZ)3y?;M$_ds7R$|b zJf%ADyw^>1yk~1upz**^o+=_AGc4$58Eh&=fJUVa>yb;mx;viquqA71W$uC|aIv z!Z}tfwbAO1zistqc1Utg;|Cjo2t)lmi_^=UmnrVKm}>FfqHmr7p~iA1e9tge`uwJ$ z*rci1x+CU|t_O579H!s2XzF*!d$Op<(c7Muwa71b!1-kQe#wV>s_S##tlOQ$oMpHn zEA`oJdrA2hH*+5v{(ScC%7*HO*aj))v!2h@>iwEKGfyNVtrAtu7iC|29NpUbd7$fN z*6HNT6ICbHFFj@PD!A6J<*bEh{-Xyv`f=J{mKClD?r^q|a}XWP2t`IRo_VLKzWScH zsCJimadMcEXX*$pXRCSYtHI{IX}5f;DmwaypIBc$e|Px)^Ph1-a(hLaj1&6Ksw*US zoc;J_!MMpAncMOmdsaQ{bEj3lvFXcXyf2j2fu675EUlAm>s00%=3_tgy+;m=U#N_IN!Ajc{Z=r#YO15HO81>&PLc7)7 zZe$1$zB~7gnJPwc&W?*OJbNzIZrE#DZ-sPN!ol3S7rNHTy`P?#H2Ho?$Vs^G`{``O z;R__%isOx9)1C5bpN-_#mTgy!y1eYx`I!Ff^`dd9kFQil=xRSLt2ue)!Kcr)an#TF zAMXxjk}7K~eoQ;PK(l3sqR_dY+cV^QSIPz7-=^AB*?qePVU{_dJ@}A*&i|;&FLtqvlUdN`r>S-0j5@GkmKMe5toT+f8 z>uA2@ELMf0VfKMMYG1mUl+}~^=Yr;a0(tX7-WjCsIF(TOO)P^GB%DR=2%)r3wOuWI zkMQ1LUeIgf<>R4S-?+ZGL!P_#8Clfy;4n(s_4IWp4c zm_M5TZdJvjDO#IM{XH$7Oi}2}-M=V5EFt|uu1n0z+ycFdg0Cz5_IViRsaKtgH^|Z} zFEHEf(`CQ4Y394&`8PM))Fr?r?}LduDs-TT#R~g#KV{L)RopKe3D0>`e9UPu_lDjF z_cJr}K5fGpHaw6h-L-t(Wonq4%l$7BPZjbA=PMr{^)PX4VeL8~<+d4V8#7xxb4}^C zMN1@Y5EGzRG#`()lO zBTLcp>LcIWss7ojl4PX!P{tfh7n+TjVDIPYa&SNbJDhUuC4yUrN_U+FK4D?cXqpScSchrGd&8b zZAi&PH^;t@(YV7G=P$VQcJ8bF!P|bf9OO`r`E;j14kXKhe?) z3a<@PGY^D(U((Rlx8};yGpl4a*WL!R^jSkFI@ER)~a-1RXw4nEzUrNACrCEJ#fwp_E zjyDau&QnZ$_G2-l|5~5kox4XF0WX|x3EdF7yK=Z07ekjdj0(N(a!9#F{U@9D(_On1 z(b_ot__TyV?AZO~?l zoO=q4v(i;L9w9M(>F+gS*PtE?6Zc}X0>9InGy?)xNGxm?xENSy7KG4zYf7&GtUPd=@wRro;EB2L7@~x8jQ=AuF zG+Z|xbkJ9^?+ev%56!F4t1C3)na;>=!_G0|ukL=|>;&$~8=sD7dK#G0j=QTqugL!7 zcd-XKL4>@=Pt`9PsD`zRd-wXKuCYHk6;a!}=1whj_~VnpLq@}K_0Qbz^?HlTt5&`4 zu#jlj)Un**iPKm4#ijEq24zUqp|52~tG3pvJRa^5FEUmh_7cCB=9@oinbRzKZq)LQ z;K)GM*6mAQZ`I(;`*9$3IK8yzC3KjbmwAYi#PAt@>A$(@<~5bZMXNXAbVnqiM0$U8 zj-#%?ouwb)^tS_`qrobjO}}tJ7V>#FOW?=JV8Jh{t#CSfl|=g0JqvM`6)HHF8=%cp zX`Dtd*o=c!RT!>P5b3ZC6dF+@flCTqh%+>6fEfk4)1k1Y#f$Yt-j*D=4H;ZqEaB8s z;lH-PZ|&u&83i+Bl?Ha~&zj%7H1E^3x4LT#P4(|7$Y1I$DOoX7XMAeoXaD7&{T#;6 zh+I+s8AmNk+;;fD%(dU=y{RhSLMpwdwYH>+qddE9R3nz!c53+j_B5naG@{2~$4=pU z*5dYO*ZYm%cxEWN>Woryx4?%^$wjIcZh2G8>c~0fQkSVSJT8rml77ro7)XYFaSX3B zrEjTg?H#{dU`*LsV^M0NaoVEP%kZ>Clft{!DVes1#5Ke8FI;0YqOyEnirtO#tlZ*g zReD&N&~+r-QH7e~)m-Rv*SJiXps!cvVc6O`l@_<^pa^JbuMN%h-8pUf>7UCl6`r@` z+Z&{P>qBzG z;nh2WzGayA`_6(xd|%%$eskY(@6Ii`^Md2MT4oa#>@(cukra6Mt@44M=~`+JMvfec zZ#csAKK|JcwA<&d+8&zu{u}X5@#3W&9<$%i4E5@e-rjt4p8p<-nF!kyKXKXiF)7EuAOjn6s}-c>hpEsZ?Tx)j1XO3agoIWxk~3qsA3QRL=ZjugG9qE9u3n z9d?BF4w^-(axN-J^abtQs6MXDStox=G;*oUFyPtaZu=ia~ zla8cON%$56YRZMja^q`ithdZp4oeQ(V3$p~)s!NkZs1!=F3@%1?9mNKHhd-vL`WHz z2px3Yt$RD{-D^g3d)ajsLvaO?TQ!w%Da z>}JWTh#%VYI%lAKf3QT|v)XA>?l%93er>Wcx#96ppZTe^9~@MsUa&p9n{+K<-?Ed< z!sjpVKE&xJg^xYN9VnB%*xuy*BwyI{;JD=ziGcyV)^T%j<*b@Ehecm=n(Nw*yo)&a z>4M(9t#z{VeXU%ls;;x1+f`@rT)t+{?#1t1+ZPj8oZ9H#iOY7W?@X?UR_K!sJRB^% z_F=h;Zo}HLY9wRue)903bioHnr?D=(%FMI?o!h4)zcf9;djY_8OX%B?F`A=Fz?3GF zRS7F{?x~NbHlCBywQrJ83taGM^h1=y;0w*yH_zG#Hd~pV536}L=pYi_nmX^vlYQRE z@I1vqb&bd8?_Ew=y|3o$H_M(I+4ILtNY;A?<3g5xU4H6)b=m@UoBW6e?V#h0>*p`8 zTOO>cAlBPoYE@gS4Y$LEM$0d& zeBPHLyT>6fRdgTu-Pn}8#YEE^12z~9tia7e6!%7NNeP2(iHhQ$bJ?BMq zcrg26W8tnAWcx$!tK?pT&DCr7oqSA67_ih2uPrj6CTnl8u-Mt{xksko!PY$c;iu%3 z_3xLgwph}&?Zhd9eR=*oLJB3jEF)mPXvPQA^HtaUo<^T}@_fq@j_(L1Oxg2r_$Sdd zy*_)*6XD0lb?0Rq6h9pE7(8~#?f;x~k}9fsY$+|IBr-Gh+7mgt{l)?H>GKX(T)JX! zZk*_H;Oyyp-;Zr+bc-%~)D@=x_NUH^=~iaqhd)(!2-`;Fnzm#|`rO{4Qu5PCd1gJ_U$~x?v3bf)jGl{cbe>q+-W{{)Q)HACew5@UeFy5esp-Q9h;ddVIh5Pp;nIQcWqt4;lna> zit_5_dERSy-5GVoM%763#p-XXXCEt?&dkkxQK?p`J16L_`rEEU+K;SGtt!#}ar%R> z|E|mU6n}}4yCI6zP3mUZH-yWZ%ttDxo~0dJd_*}Jxzk+aFIWPb2ua-Q zc4*XQUs&=`R{G+byei_4);W~<>0`myXoB&+1GR5nO5XO6aL@Q!e=F{ioua_pMW%u~ zsB4;}gb36crzP3_1Z zc%Z&6YrsffX4HI9?6r@jXJ3+1rQ04;zAoBe?$PrzUw=@=hCTBG$%yHkomngUYV*P5 zq;3AH3IW^XJbD`3dp$l}URLkDXyykvOx2^!uD)hkSAlzv(u1RtgR~NT+6FJr>{02Z z^s?(U-w$1{@gKUnGjZPTrxnQsRm%)ol^@hgir@8i?`eoE?Wxh6N*4G!pS@^F_UP)X zhOL5`OF!Dpvs|S0A%|YsRNz%JE5CnxXSEmUS*Y78#IiqLBEhU$JtM z1*c7-U&abV+uR^UmzJ%`xyQ-`<_872G-l5JDKOtsllUcSwDm(*u-KEE3{s~Rq@+O#<^XZV$xghv_#l@043xc5#eTgGW`**x+-+I|ZPQfTthqHAzE&1;6~OI+cBw{I-F4}5qyti0qD zi>UPNC__5daB;Th@!PvwRWqI*H_Fdgmjdsawj-dLZcx0~{yg=k-3sZVqwSUnS2C@x zWxGiny5rreHh)mKCO0Z)wzB!9FPl0q%F%y_olkkKG@BN?e_OS%RpTeq;Cm-B8cYi} zItF>pk@#GDmZ|h({+j&Y=JHd{0_NWHf5>I{2OK-Q@Wt{wRnfCw&V74qWnki2^eoHB zc5#zbz70WCGUs%`fvjsr!_UJu>OF5-Q68DLvBtmX*4{R|)?wu@*~hL=&AFWPGj@GH zu1&*(5nB|yel2{|^%z}SVA1udS?9bI8`iBzoBK|4WA~oh_-`kQaC!Blw|R~RoW-F( zycbCBW|pU_)796iISIY{Mi5k7EVySayt`hUtk@FjM3qYVwt{sfQcn>S!9K5$@icG9 z)ZM6@__|-T;bfM-M2(g9(~^+yQPy+mo$Id%tZED2_TiJ9#6{##$NZnYXKJ3ciOR}3 z>ShcWUn?gWD=LJ6<1?Kn2!tu`tIE1?tS*&Lq*sJnm^Q}vfJ_*lf>H5|(zuwV0l#zY*ox&#ap1#0?z@oHGP5b3B9wUbBU$opYYJNn0wldD(sqzH!YrA9Kg@Bi*%BKitj!l zsIAz@5fXt8ZkOquwWQFcMUHwt?`=qf)dkz{8}dxAi$%_jCJqHW+0^mkYmQfPYu80* z-SgdU@8zRjB(qzi9!B1%y1}{J1QoSL3(d`6xwT-Uq{gF@;`Mneju5ov8&5uW-Azr1}Se4>6+49sl3)d%hqUz`y$K3VR{dC zx>@4KF1H>%=APo&u33ILT2rrTUd83^adVrh`bQ@oRE(W_5Ouucn(va@Z5pm(nHoo} zRh~Nug_OA081xY9GZJf`D_9`Q%sC>vUJE9rU)L!49QIgxcgm@m()NiJ%FVEv3{fq_ z@Tt;@8)Rl(U`@r6hE;98aan|r2bI(JGk4BSC6uiWyi$GR>6iNPv1hE_TQij;ABev? zA~!nD^4zBmzXqEqu@S0vOS&*(k=^J#=rvl}b|t?jk!t0{Zrw~0`5wK3Rky5U<%`kA zfw0YawFN=hPA|QMgXPm|Pl(nPZ>GL*>*#;I;p64*y&KhhBi)MpDmIX9&dX@E*DOE& zd}LRRWNgis)yG$b5qAj>SayCES3H(HaP9lSG=&w>4d?1l&j>oZXz^T@$)esvcMr(B z-Fc&xlyE<`-f(5o<*G_n!o2!jONOIYH%&KMx3z|PL-O@%V%p(%iD`tiX(ta=c4d26 z8(ety?&s6@#ooHfgpFr(GiB_I9TN6(O)GJohyV(T)} z$DeN=`dm9{svYt@G-mewkc-q!Z=|Yk8@NAH?ka45X!uIzsFy*>8R3&E^405d0~Yw4 zHtq_pTW+9WcH-WvS9Kk8cSpLjA!QYpwka7;+xGTN_jx+KWU!$oF4?!j3`2ZCBg0V%YOLg+zaVbT4rs5ZKk$Pl&v zL8N>je9W^c6TbJLQ79Qla-u5@WI5*LJ!XY1{A}x;k$AwiO{dIM-f`CDO=&U0oF z$0Bl2&zh2P|7>O5O}xyLn_>laP}8AX+lC6P4_?k#m%gLy`Fi`7^h?eLn%SFLWN%fH zr0oxMZ=zo`&kQ6H%II%iyehd^wd;eF=H`Q>Y2^HXj7@e5C*>a)B(pT%Esi5u?QxTJ zm0IK4(5-j7&&he8z@?^7krMrPd~^cK&!?L$IleEf@kY(w@R(2X%`!%_zujAVAvL6H zSM6vWJ^snX4To#D6eNr&=SJ2>sXD`68(q`1M!)$RyVEV+7uO8bMX8n_Uv~1%`@R!| zH_AJgG(@%=7n#%B@@Orc@x!dVqn@_y&sfGIN0`3j?oXn8k3VQHQQQ4RjA<*~z`E-( z8s5nBv7Uo|^oFEnQ=l z;(w)2TvxH{nN^}iI4Fa)Tn8$9B$(VEtP2cff?w{7^fiPYd_?b5@1fL+x{qZ-ngOD&$q6sAk`m>`WQ3ml* zplXRrh*k1|5Ax)alKcoH+)G>zrR>S)D zS#iahT+9e1;Qy{7Tv%AbAEl80EFPEd@0E`K1v@MZRCN7ePl!wNH+y167sqkEhbVA^y`30iyDAhvy43S&zTN{y_XMQvV-pvH!hB;KkGbuh+@x<^OX& z#?8w7tiUVY=W5|U@-oQZf5{5}9EiUwlgD(@^7AX@LH{?Go_|ON|Bs3Huc5=$=C z_y>i8jm!UnLU~gBu4Nt&TM+;A`xgH$$N#1^@n6;j@Lde2FsYLif_)7Rj_)ZujjBDaF@tQPE9ZkBX9wDE=A?zU( z6ZR8I3FU-$g!hC#LO)@M@PRN)7$H;;E)eb#UJz~(x(QbZj|m-w8-y;xHNquABY{oW zO4vqNN5~*-AY>Af2&sfLLOkIFVHUxdU`8+}*b_NISGh} zc7q_pFMRyjVQf5Z83e(e)6>&;DGvS;G!?~Me0VY;io2{s_%U)pGJ?AVU_2?};)BX~ zSXu^$gUUp54yTNV;~2_U;fPWpkV_S)1Su0D3JekOa70*xq$=bXuH;CC9{D1bOn{?u znUX8z2{5^m1(;l^T&R*DTqTaF1UMJLBs^K-NFsuBv;vKmG7d*8=WuFfjPsYNq+ARU zssu=l5K$r+%9Eh!NEu-QhA5SY&|ApEc`OksW6G0jUIC++EPe^+>b4kIwV1V-%jXHD zJVhjeVRDRO@%j=}CP8J05G(_mXD71`01%L`T!;YwML-Zl2Sl`5KsJEhf$7B%iD5^F znJdYA%_)o}**@9PDn5e6WvcdMm;2Xwz%1`Th-?gddo#c{(mRk2I<9vh6Lbo168L6# zlZ}BeoC(4CdUTpKTvkjcF@A#J8t*_Bkhf~4bod(GlSP=oq|=W>_T~_f8W%(1EIK?` z%p@_WMl5(_pKhQxnPr~w6NAbyrW)H*O~`Z>y@G7cq?!UKipE^383a>|2$gguOkofw zpqkNPit$TBC?*=NIgpz!rMV2~aaSi>XmzVH{3p z!4z{nCe0G2SZE-u0EFdgngvX;(#)-aBJ0&OD>4*=W3hxYgQW_hcL$^cXbvD6AQGUt zfC!(H0nPH^nXx74VgFRk-cT^s17t?<02$AWK?fPl5P?D983H2K5ITr4(F_0)`UpNL zKqVvWA>vES%?TbLQ$X4_8r>g?;$RK@!3;+i^s+1o_>yt(A*uC+h=`|>;A*lAm8f+^ zC?XN6$>6@eA=VY~BuZp<0rlkte|?>l&@;PAhq(Jkdd|SZdW)Zq|Ud2@ZrL3WT#e86^=3p9Iwbm1- z*SG_q>uGd=L8x313pz(YM0~6P5k4n+D?o(bi8%im12)J9#y2?Gip7v`uuKG`xBv8%ehPvqL7Ga2$je<=06<@^(4;K_L`Q8Y zlXH{`o?6D4Np~1Wfyo6R=cwNiVR9*8V~Bb#SVatg3{mg^!w@idDqPM%r9?&)16)0& zT!jgcWQgk;2Qrw_RfzIrJP|5#jggCRHQ42UHL2QFM5Jn0z9v<>AgM$+{rHI}aN%!Rk>FByrS9)s7q+YaeR{(` zPSW~sn)&D3=~C;rbylx8I5S*Cg1c?f=VaQ%g;<@ua3qLb9(wlO>1N*@W0&e0kAGa@ zzsb#Gf7;SsQU5r01HM zI{2|KO;j40<~uBO)2}4kZM|~uy#2w1-eY1$yW4_+3eOvtO_p>kj%;F|X}RDy68qfJ zH0#mlJ4dWmWUK59Cf41^Klq?nl6YWkKEuCgbHEbaAjequm8>b+v1nLj;v1e4`+l5$ zOYO?os6}FHzU{Em-ha$-XhO|wc@lL|()Ee+AjR+c>5m-tcxE%#h@PBVl^WFE5nbZm z@3A0bsPC7eD*?F&m#(2(O-6g2nhcO~Y^8cM`t+g`EsvhM45gKxxY#?n`>S0+jfIs_Kk7d_b2$HI z!bgEo8%gDqh_*Cm%L9mAc4l*TVcrGKAx3M5^+O(+b5*W>R2N~>b2XyAsnq1IM-FP$ z)1Q*C){|Mbq~jxfi)A+RuEsZb8s2SAqBb98N*P?^lT&90yN>;PZsp|Yoo5mp+r8vypeiCUbW}JL}*Bp!a~|tb?ub>KkJiAGvo5d=3L%F zGP91?G2TA$V*jO|3+MD6D4R|WTmO9JS)pk9$$M=-ZrLz?1s9-=6vY znxYi^$nChFXmkFP)*N{Ouj|Rz9v@cfv#I;I&g{6FsG*x>OLOk+Dh}UE`(s6PTnuJm z(w;IfHD}OqY7rO2|Thee|Y@Vo-=Kq57~sQ@)l-)v-$ezrrzp*ez^A8qM?A%f@bq{%QY82 zrKH$RkJ|nok^lY3OYX?i%lcWuMe#@IOnlsEfysB=1V)Se98XvDK30V^rJu7~y{VLs9JTTTd zuYXszB(SfgbK5v0?0j9DdSG~4Lj1Gm*7JWYJpuX21xk?o#KiBORF%4a@9wbhHWod* zz};O+J@KI^raI_7v%oR~m&o~F@)!}~dmVWaPZ|5x0f%eR4zbn8YyVg^o;x7;ly>wA z-u*#lV#oT?dFvW}UgoK%&gm@+aXMKe_xRzIJsCY-BSnc-)+R?= znGKs4^3@*ILcLA;&)P?}-N{U9vC1EHu6zhvdOf|6>cRB-;PaRbx4sSkB5$M2@@Y3B z+frhVY}_(GJ)m}Jsc-v$Q2^bxqbp*oe^>jGOTycZy;k>^h`F5LvU#26(Su$md#Jqy@lhOL^59nu(Td)N z@RuHZ@t+mV+szZ7pBR0QdFSU!4XV4-7gs4H$Q!{TrX;QWZSEz>lmAAbwGPlmb7uU?ZTjC@{zedI xd`v_OR862R1AmD?w;IrFqk@5^MrN=NK@NYVFaaB4(-Z^_v6rat;JMQf^dE`C4AlSt literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.ConnectionClose.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.ConnectionClose.beam new file mode 100644 index 0000000000000000000000000000000000000000..c8cf4b036216cde59a60cde11ca4248455bd0633 GIT binary patch literal 6632 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Continuation.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Continuation.beam new file mode 100644 index 0000000000000000000000000000000000000000..eb8356e68e396be7e7532097e9cfc62f41dac641 GIT binary patch literal 4024 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 b?4Sy0(jPCrpt)KhIL literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Ping.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Ping.beam new file mode 100644 index 0000000000000000000000000000000000000000..633fa7bf8450f63e12314a78f98ecac5a5dbc327 GIT binary patch literal 4776 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Binary.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Binary.beam new file mode 100644 index 0000000000000000000000000000000000000000..426e3d6e51b9b91b0bfd7124694fde60ce3aed53 GIT binary patch literal 3616 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 U$Ur%}#K_rk1wa6JgZm)t54e8O@c;k- literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.ConnectionClose.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.ConnectionClose.beam new file mode 100644 index 0000000000000000000000000000000000000000..5b14d78383ba23972ac2365554e790d055637792 GIT binary patch literal 4820 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Continuation.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Continuation.beam new file mode 100644 index 0000000000000000000000000000000000000000..18af826e6cae2e26b3631e6769774ab053a2a0e3 GIT binary patch literal 3572 zcmb^z3se+kcZONmWnp31g4|2-LD1oG7^x%J@H||TO=(Ry8$OlBEO>Y} zP7|1!n1gA|_~UfqDUu~f8^#h8IbW?NNIj)iH)1SH6B-+fGgd8Su@YvyQHNV;T#K=| zZY%DvQZ&n`ExL(SdK;MLvWQFDhh@hIg__h zcxyCrNv0B_UkQBn$y2=& zp~O>(ZkEY;zA7Z7LF6+alKM^&iD7|{N+^}^<>+dW6p;&u#UUu7LVRI?xIrYz3*l@8 z@KiixiU{x|Dq(;`6@oa`{f5+GfiG%B-$i69*jE^cBqA<|SSf)8ey9opT%|Bb7!V>r zzxD zNX{=zqR_op=9j388h0E>$!hkfpKdmC-Zi)ZD<&u#?bNdWiyxUg{xFq?xec|1e`AS@ z6SR}RJMw5}FdCuwWK#d9T=~T~&49*cf{@AKN??>vS)GlJ3yx<92VL#SuV;a}CAr1sIr(rMSKadMKB*8w2X4#Z8c2F&(@;Mxi4x z64MiUMK+~p?ckJxF;Eof(nVo-F;21ytAWBv!l3{ynNet*yw}Z23r;aJ7iHc)I^oUBrUzNxZe<_qQ(D4_93nGFHnqDWbyP>ksv{dC4~;PQTr00E z|DoHvG9CX-(sNClOxM=OCA&B6dA=Q%+$bM;%p-V_WnFaQ*bkOGd1FS$v`epd-B@=b zCnq6$tp9|I`J?^#cY5!tKHOmbZ3W$ND~7mP5W8Vvxi~iKZMUX~uNJL9n^RL#qe{FO z^qK!exG!wryZeS#j!S4GzI+ggj(tt~?!=j>{e<31uCL9DON|UUdM#%SPh2#yKwmnl zJfu&*nVoUq8^=O=$FwX_S4PZ>bM_v+&&vu`Rn(-NNpa6BEWYNo<>j|?`)oU=uN73i zb4&T|_4?!6JZD$#IoQ<}D%0)zVK;X9T+nxQ7f$!SkWqVjfAiYj7rgUxR!?qw_1iCQ zJolsNSSipbTyuWnZ<*)dwwk#{%UG%+>d3eTq__@#lhpd#Zke9 zURYmD@VN(zP46|=jeF25=O4^-ZSOX$D>+tH=BW_2h-g)D=C+iUCwKjLIx5Azb-kay zsXX5(kd0hcKVo*eN5qw1wztfPx6D0)U9>mF7Q|&l&%OQrnmgv|&o6wyKC?hOqdj85 zG->O%Pwg0dvP6Tg83b&RtD9gukUb)HrYE0@EgoA^D{@yHiVB zM}EI<=b2!8cWRgVi7_iKKu`juWk7=r=l(6Y)3M5uIU{|)5>5N&WJOx@h$->0qojGN zg&sMT#|`2PTD`?aeu>iM&Qn_Q}XZThg|vsnv1V!OvkqYIwCvfYk^>7ygXD}GxT zhh3*E^0#V{H(Jw{zjyzb&(*fYqc?Q@H&HvRMwNN^)$8n~7=K-^;d;pR)wj?!Thk38 zla)*B@x&H=inQsJ7SjrIUmyG8hOt#8)~xJB`)f-_z1RMwVpGErpWe@6YAj8+gHEo# z*Z%(9=M8Nm?@cJ0<9QD?LlgnNE7)VfHV00D5y_!JF<&>E#4Ln%K$(ZJl!eo_k)Y8J z8UUliXnef(8}RAM+N@^$FR^lu zyaBnJhG0Q57;nJt;{$bdZu!Q)xF0(10s=BZsbI?orsDw&U3@@rdlM{nmqMZcd>}(P Sv#p#hPXOHN>EhiFseT6s?8hMh literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Ping.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Ping.beam new file mode 100644 index 0000000000000000000000000000000000000000..9ecc6f2ec2b63b514e6ca50f447d14d4e2d469f5 GIT binary patch literal 3444 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 IxCc@H2M}$pL;wH) literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Text.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Text.beam new file mode 100644 index 0000000000000000000000000000000000000000..81a1c7cd84d01f28d7726c70b0fbe7aae4daeb45 GIT binary patch literal 3588 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 P)`mR*0>E(?gs}etDLc~O literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.beam new file mode 100644 index 0000000000000000000000000000000000000000..5044e43089ac258ed845a6c6b5979c4cd12c8a96 GIT binary patch literal 5676 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 A00000 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Handler.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Handler.beam new file mode 100644 index 0000000000000000000000000000000000000000..5959aafa4091013e828b0f28e008ec53a2bcde67 GIT binary patch literal 24732 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 e#ONZj17(glF+PRK`bE1E*eDy#0sLI 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 GhV?(cHob@d literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.PerMessageDeflate.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.PerMessageDeflate.beam new file mode 100644 index 0000000000000000000000000000000000000000..559218a791420e0a445a92eec94b76a814757aa8 GIT binary patch literal 14952 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 W_X)hFVg>#YHAo8$aml#>*Z%<9J*@Qr literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Socket.ThousandIsland.Socket.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.Socket.ThousandIsland.Socket.beam new file mode 100644 index 0000000000000000000000000000000000000000..fe72f1d4d2b0229eb87879a79264ea1ca5109182 GIT binary patch literal 6796 zcmd5=3p`X?7oRa6GgHGbo_UQFsXL5E=iFfectYvaLX$Fl|It_&WFEizvKg$KgSXh>u(Yl5O+u@H=T z3%TGf<0jJSY+eLRrx!6qA^|&GEP{l5CLF_ObD<&@#1}wJh6rL+Lh*c9AQIAJSW`Dd zhzb zsS&UskuQKnFcaot4Zd$YR!=rQsuTW9E-ZwK=yd7qbUK#uEjUjBBL*^egLyni;)5Ha zNn^q+C`S}ST-EshpNDxK~>Nlp*rFFzPU;Q zg4L23E{)D`^~zye2CGhC^SEpt#G(vt9t%s#NUmfL11<{X2G$aVlDmLHp@@KxYcHVj zfN*GHK1xn)JP}QHz~pFQ)vS_Tljn-VA;G-W;_T#Nk9||oRN83_2~DG^fxAD=3k8}m zniml?e3~4%C(n)uQ2vH}I-;=#w-&0? zk0)s1jR~4)tmasvKg~^Qhd&U|z)!$WG{&2_;Z5iG#+=0;| z<0oT0Fmf0VFB%4;h9aS{T2lz>#`q~CuxJ45CjgXRISl0FFc69i#9s!Y{S6Rv1f*dY zNb@id3mHh53`A#y4TwL~Vg7UtL%|Y51s_xd>mj5c#26Pa7Qjhi44-yO9B{w`4BQ;F;B!mtQs~x>^nF5_?M5_ zmvI9Gf0XZ)Ou`ptB0f(7gv7}P5HhO~AZuA4i6Ih8$$Ghf^A_}LhT?*W74nc6p?O49 z0(W(Y1956L59ExJZvSG16A{F<8BNI^>3N@mEgcv(`;QmM($YQ_& z9rxXHmxC;ln>Q~4G`EKQP>O{FLXaLrqcC>nQ~;y|^Cjs5VuXC04iB8Dd`29PE=w~6 zbYK({oN#ft2mu@e*a9d{1xO(sFb44%fT0W+46z7CvImffAl@koK`fY1G%DC)9yoc0 z7A!V{$B1A@SOmfmqBx*sA&i1y5m-zL6btc07W^m};<4i`Kw=}b2$$qZ7F>4tU^fm5 z7fMnl3u$8x#dA>Z;gM_SmdoM*PS8$#p2Sk%b~2o<&?C6U*AM7SrxLv4`1$FweGW1XN}<%VVqOs zbv0ehS0Bqvw!1}adzqmeTW_~?_6z%x+=Us=zrK7^T3Wi^U1{m7?BiGVKCK^fDIl=? zZ8!E;)wZLL+TJuAS-$o+kNDo{_f}m{?6mCkT(zTnH#@ugjO8Wy8vCU>k(joq#KmrH z=@qwM+)wMlk=q&89d_WT;21UK%qgZ$lVJ_r@kN4T201;2b$j`R zln}C3?=e+oLBlo26)9$&vpvTK3Lfn5I`jN(?WqLicGCg;yJIsw4HMG-J$0yhoS-=rA>*d-}?d``)Ai_&BBH8Gbg>f$Zp9? zt?#Z}sM1OF(w87_&5pHhtFBCd(re?J?7GTi?v!YE-tW zuF_@1IFPH@@AP$I&zx*uxHxvxQXiYleTN@Xo)`q@bM~~_+$3b=U+dVT8oldb#}?On zZ$&%K##Hw%&WhVxk$uLS7}^_pJ?G}j6aDi)-mTu)5S-1~m-G92Ol?ulI7;&G%7Lzl zxt!_R2_Gi1D`QNv=wmJz5GlKB?82N{855Ehe;#A^>pD5l=|}EdJb_O7q`hD-CDPM< zPMtkNx%*Iimh;|<6#d((S9eEa0xYhreLeTs^fGlL-sHO2LjNaAqTH3b9j4Y{_x5V4 zJzhz%be-a8>FTa;=~@uHwqdgBhX?ihQ&8} zA~_$d2_FWihM$dm3;T&vOHb%K1wjs(tF2mECOCBXB+}P;P2KI=Q;%L+SoUP0Uwc_S z_B79LdiccTpXae&zVLz>@~xFOme@~iOgeOFLQVQ4CX}ITeaGVF6Q-k!UzTyht#zA> zb0#KN9u3Rfl$WQZ{6>zaUU*o=$3(Z}u6tQ5@nDwk9(0q^#VtAY471X^nr&&e*0DdQ z<{P*xr0rSIXc<+rmBdetH`%UN7=G(_*QuO{9{%=onZ^~>=-~DW0x=*mCeiloT~tMO zH3NQkw`*-cy3#3hr5DZw>@07uDbg7?`ybERakQqodS*}tzo9moO3AzW()%Tw zdqcPHUij*}oH^p1R%u7Kya-(5V{86u$F|F6%hH-=w)@|}r5%}X783Qj`T##;l75Tp z_3)<(=Ymfs&rdk*X#RTEoIw2n zCgv?*R4punP5et(H4pIjl(h+dgt`d54_n{g@aX#xN?@;nZMe&0DQ(?bkI&1xJmtZj znHia0erAu3XE++<5rd3x*AwkG&0T*Q>($&sopMvbgK3rKq?5LPY1qraMJtrmf*uxr zo>tZtMvkryfb345t@!C}#I!BVP>O?j20#BJNy#*DiGzskaZknaYA4MaGN@L{xW8$M zUh9&6)@#dRqu`9ECFZg3cb@aJzL7TLtb&T5+rRJX*1IKnhCO917duT?h}L1?UYubG z&Z_ZK_LSL8{VKEc3Y!ODkNNr!Zd&Z`SouJiw`Zcjs@u zlz%+sFDMw(CN|pqwA*D$`MoQ}vlsGjY>Uu&@IJJ>M@L94-rgC~eDG@I8>Rm4sy}z0 z%X$)EW7~WN*X-V}XEP^*q(Jc#R7GiCvvr|U+%wct<6bLA8fwbbKGUN%rD{c4=kl{% z!tb*>bIN@k!*4;nv-hX*l}gq|68TW_M#~5%3zI%M$NE}A-)+>M{WBN_b_YuexzQ@L z=#8QL;t8F|XwG$2r$3=I1J` zw@6Y*p5^Fyu%pVdsgBa%(KR9O&qd=jwoLltl;X6LVJ%4oyrvg+O8HJF+vkK@^{qlB zr22-UQ0_2O2ofA`6oeWJ&6*M%<&mOVv-KLZA%U1q*-+jwdbf=%4bztr-7h*^-m$Jttub@D{ zG_v!8R+OGdUZ$}clKd%QI?JitMu-SmdlS98Dn#}I_J(-R-M~BYiDX%?e(6S z2P`ZP+)v5U{-u8Qn~L-06IyqAkAJ>%mKyfxJKETLcN8@^mG$=*$KS}$I6v76i;1^WT+-VpIMMky)KhO|hkw>-XRGB~yMErR zZhFT$Dc$sN$~dFdb*lV<3PZD^>H52QHsg{$8JM6QW1=h9SQgfpc(`UH$VYa z$VrC>!w@Ggf&?)mdD15Zk(kegB$124#3@R^S(124b)yfaddLhF?id(WUem%R~SCRep z?0@+kl+?wB%=!0mBtLz!B~%P&i((jjhWyZ?4szr;U@;IU{;MGdvmwRBA+JW=Szj^# zlR+NkpZMPl^C(FFPl1+4%D3MN^S3vlf}{-l^$Y)>Tmk7eN30uOLmjg8Z*KEpIR9VK z2i55zpGM!$qnu0sv*>?SJ0G(2??(R%&c7Ueq!8l^3gqBRGY`<a=doSOk~8@%2}i&eC-E38kw8oZ$|RnE zoymoh#1c^^OG4#yxJj^x%iyPsroa-q+$i(ZN~a4&0*Qbn;L_<`EWje*a@dFupGXc* z$Q45*zCc3%)DW4>;ELf$7FQsKS0NaBvOrWzr^|iO>7!FajGW>HCeR%8n@(?-GWiSG z@F>g|XNq88lZ}oY35!Gm5oGo66GUE^DdfVCr2>?%M8H!B3g?I=kc9%K`3xass{rH2 zk;H)2;-^5f6d*(S5;z4`Jjx)hfFXfw6tD$Nt-QiPM1}?^oQ+5jPzpyH4JX4Qn9qXC zrWf8kGK;~@gg*xM^s19%`D{3u!-v^{$hwxn*(_LyglVl9=CkR^A_fn>!-P{ASsX#8 zNEVA_EC!d$WU$i3kd{D(WpL>qbq$|HEu`bX;d2pkhv^rF;^+Vwe4_n3su9bKkCx9} z0viemMidICi$bADK#<=NAf7-7Xi^mlqh&!to6W&)(TB903jGSBGnud`Hb3*b!d-z! zT+vk8S*$jiM$-cSk+fhGD3WNwBv1%x81TP}hSdhf2s0GAOqoP#?A_IlZk3UA(eMb@9a^v%C`M^`ZBRfY(AEtNX;zUiT6i5ZG^9l^Goxwa zXjmN_iD*s3TGDXZG`x;8O$VD{2JG618@w(F4e8Vnb+O+Qb>pxkeKWkCHkGKWO+c9e zXH{k@W+WAonJ3W_>jlKj4~x>CqfNBbr{QN3&36$2kFFkBgIy9`6EOK#{G%Sc(5WKVfX;#<_DnNZD zb8Ziu&jt?3z@Y=t0Z%5{qal0QTLn4Lf+Lalf(+gZ4>UxPHJ|{8RODqNMWP``xe9PN z{rw6;&N3|(XkEOC&S=P0_Us6r-MopeXvkgm>;#@Yyov5u@DTu?_JyE8h4O?*84g4l z2oZ=n5DXA~AO=%)Lr~5Df(Bv-_;qs?hX@UuIC9elnLm;{X1(Gq7oZPOpFm{z-MZcWLbbaC4S{qzxeg3JtzM$`JAC z)7c)P#{&KTF4jMy9y&fw=rm1Id?8ZycLq5Nb}Ov=WGxKzo4 zMPjg%r=zf*WGbSN@77|3O-X9V7tqB*hLk^@+KG@9lLd>#Qq^RUfCtnf7#WYO0&K95 z0Tk*$!N>&eK}dmA1kftW_xO)}oJugKLym!#jYnAw@&^{2j#@;C6@!jZz|8R($(&?L zj38M8<_xBYQw0JENY5PLESN8$2vY?xpOZ}i`LvkAlqKR6E{8c?mBLK1EGMVP3o@LY z7Qjs5pinBE1(7I}uTgf*NMfR(-%aP3gLT%QdpLPbVakVFZ)83RV@a^D8+JML)nSYI zw8naa2K~IPsU^kXcpc*#GhYt`f4yh^tzFkb@u$U0nJ+~31DU z_%*3eXn*lt?+23qj5mc34G4cUeE6PFRc7>>wS%-~^r7n9wUw_dchE}reX9|aky}|5SEWET{nQ4FKm^vf^5jcdO_v` zD*noa8fJm#5?Y^S3yY|w+Y1MIjWfoUI_2%*Xg~Y&?J<||uR9Ye%lnxOtGK4~&Bl1< zy6yesHbO)~+eY6s_VNjbt$hJ2w{$lZ>NS!`F67|g%c>o!aN`j9u1{piZNK83@t8#? z%?DrQ)AC5aWcd(CQ zdoFDloOfP#EkzJPK`j(}(pv~)Dpv#7KCeF@L7O~Z;_-ZiQ&hv^`S~&K2rTXFhrou%|%YU>E%s5zeiuxTa^334nZ8!t>d_&(A;-NB# ztJe!>MwCBo42!ZTZ_am#p56P)!gZ(dIjOKz$^CNDQX514Gh0NXZE2n-CJub1-nVy~ z-mdtK?fq|qvlm=#R}^0R>+pAp_VtE(r!gfVA=LaWKC8GG zt(JPUh$zs2RLxsE0@h3{=^8$+@21^`iLcS39$ry%^oaV0 z=Ddxw2`g%xg|jKYIC_K=YI-LPYVNxD=xu0N5_P6{r%55}>>cLwb3M{;W|W@|J-+Zr z%=Md<*B9sr=VsVHI(3Qkx(febf^#VAr;7>JxR={RIJf zTXZS>s)Jp0z0gfs$zkhu|3LczYHmN}w|z-T{k!5`>#Z(iw?Nv+bCa4*(_roF$C$b@ zbKl(!l=WJNP8{p|QLHUV>z%YWpGPz3sv2^vbTpV5bwi2X5x1w&^6T-5a~~e>euC-j zxYt{IGjaXct<|E{qX+zkz8$@@=;8f)-Y2w{MB6>9OW##p@n-ZZ$-Q?!`Q7fn8sJWO zwmte(VcFyIHRVyyb@C57YwY7*-(x6k)eq{qcE7{C-BmjWpDHfIh2K9d3|V?N>)^%t z-;_0ZS2S@J?IZFZSy+y1tZLl+4uuL3u*4v@YC`sOTwQj}_RUd(D^${j%}t4$k2vB| znS#-8tSSq~3C)(~OS2ovui>nrYnw*;?)Cr9sZOq2RX^AI)aikDAEXsU36&Y=jFx0&u2CXNk0ZAly^I{%;^ zM@}}3?z+J(2~f6Me08v$d?inR{#ePRB-MCO%Vpsa3!m_N*m$c5gWamDI&9E00|0-+7_wjd8Sw>TeOOqyF4^8%!o9U3Qp`{TS5WlQT-rvWt+~ zF{9o=nqAogf!Y4);285glK*SMvMW_OD-{MesUmuoqXgukXsOE7B`K0WDyJeR4fT(S zx9q-&ftCZYVor(_#~1Kn8S1kH`5!RTXO_PS0KF2py8W22BVI969bxD289WY4ij%-1 z-j{S~UsTF^^GP=U56-~IWGV9J98+K(LnzOmu~M8s2(n+<)ZqWVt(7Zq3~*rzh5+&5 z6b5ojhp16$X_7*0H>cGBB#0yR^&?) zI<;W`MIvwWUrHJCXNSChr^bGX<^R=vahj0BQ#iPz1QY3n%;wY&Irk&yO0<@$p{A-H Y%H-dV9w^kp93jF%m}-a7_<*AQ2bKO&p#T5? literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.UpgradeValidation.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.WebSocket.UpgradeValidation.beam new file mode 100644 index 0000000000000000000000000000000000000000..240f68c849bc0985bd449e4d84c5df28e9924cd3 GIT binary patch literal 5352 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.beam b/phoenix/_build/dev/lib/bandit/ebin/Elixir.Bandit.beam new file mode 100644 index 0000000000000000000000000000000000000000..90602c5ac1a1f4eeaaaed97afc718bffa563b0be GIT binary patch literal 21936 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 Y!1N4sA85}eX#XZN|9=N&b`Ayx0R4kC#sB~S literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/bandit/ebin/bandit.app b/phoenix/_build/dev/lib/bandit/ebin/bandit.app new file mode 100644 index 0000000..03ff706 --- /dev/null +++ b/phoenix/_build/dev/lib/bandit/ebin/bandit.app @@ -0,0 +1,81 @@ +{application,bandit, + [{modules,['Elixir.Bandit','Elixir.Bandit.Adapter', + 'Elixir.Bandit.Application','Elixir.Bandit.Clock', + 'Elixir.Bandit.Compression', + 'Elixir.Bandit.DelegatingHandler', + 'Elixir.Bandit.Extractor', + 'Elixir.Bandit.HTTP1.Handler', + 'Elixir.Bandit.HTTP1.Socket', + 'Elixir.Bandit.HTTP2.Connection', + 'Elixir.Bandit.HTTP2.Errors', + 'Elixir.Bandit.HTTP2.Errors.ConnectionError', + 'Elixir.Bandit.HTTP2.Errors.StreamError', + 'Elixir.Bandit.HTTP2.FlowControl', + 'Elixir.Bandit.HTTP2.Frame', + 'Elixir.Bandit.HTTP2.Frame.Continuation', + 'Elixir.Bandit.HTTP2.Frame.Data', + 'Elixir.Bandit.HTTP2.Frame.Flags', + 'Elixir.Bandit.HTTP2.Frame.Goaway', + 'Elixir.Bandit.HTTP2.Frame.Headers', + 'Elixir.Bandit.HTTP2.Frame.Ping', + 'Elixir.Bandit.HTTP2.Frame.Priority', + 'Elixir.Bandit.HTTP2.Frame.PushPromise', + 'Elixir.Bandit.HTTP2.Frame.RstStream', + 'Elixir.Bandit.HTTP2.Frame.Serializable', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Continuation', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Data', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Goaway', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Headers', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Ping', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Priority', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.RstStream', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Settings', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.WindowUpdate', + 'Elixir.Bandit.HTTP2.Frame.Settings', + 'Elixir.Bandit.HTTP2.Frame.Unknown', + 'Elixir.Bandit.HTTP2.Frame.WindowUpdate', + 'Elixir.Bandit.HTTP2.Handler', + 'Elixir.Bandit.HTTP2.Settings', + 'Elixir.Bandit.HTTP2.Stream', + 'Elixir.Bandit.HTTP2.StreamCollection', + 'Elixir.Bandit.HTTP2.StreamProcess', + 'Elixir.Bandit.HTTPError', + 'Elixir.Bandit.HTTPTransport', + 'Elixir.Bandit.HTTPTransport.Bandit.HTTP1.Socket', + 'Elixir.Bandit.HTTPTransport.Bandit.HTTP2.Stream', + 'Elixir.Bandit.Headers', + 'Elixir.Bandit.InitialHandler','Elixir.Bandit.Logger', + 'Elixir.Bandit.PhoenixAdapter', + 'Elixir.Bandit.Pipeline', + 'Elixir.Bandit.PrimitiveOps.WebSocket', + 'Elixir.Bandit.SocketHelpers', + 'Elixir.Bandit.Telemetry','Elixir.Bandit.Trace', + 'Elixir.Bandit.TransportError', + 'Elixir.Bandit.WebSocket.Connection', + 'Elixir.Bandit.WebSocket.Frame', + 'Elixir.Bandit.WebSocket.Frame.Binary', + 'Elixir.Bandit.WebSocket.Frame.ConnectionClose', + 'Elixir.Bandit.WebSocket.Frame.Continuation', + 'Elixir.Bandit.WebSocket.Frame.Ping', + 'Elixir.Bandit.WebSocket.Frame.Pong', + 'Elixir.Bandit.WebSocket.Frame.Serializable', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Binary', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.ConnectionClose', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Continuation', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Ping', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Pong', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Text', + 'Elixir.Bandit.WebSocket.Frame.Text', + 'Elixir.Bandit.WebSocket.Handler', + 'Elixir.Bandit.WebSocket.Handshake', + 'Elixir.Bandit.WebSocket.PerMessageDeflate', + 'Elixir.Bandit.WebSocket.Socket', + 'Elixir.Bandit.WebSocket.Socket.ThousandIsland.Socket', + 'Elixir.Bandit.WebSocket.UpgradeValidation']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir,logger,thousand_island,plug, + websock,hpax,telemetry]}, + {description,"A pure-Elixir HTTP server built for Plug & WebSock apps"}, + {registered,[]}, + {vsn,"1.10.4"}, + {mod,{'Elixir.Bandit.Application',[]}}]}. diff --git a/phoenix/_build/dev/lib/cc_precompiler/.mix/compile.elixir b/phoenix/_build/dev/lib/cc_precompiler/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..31b5146f725d3ed8a2db15badc9fbf61c4493316 GIT binary patch literal 4706 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/cc_precompiler/.mix/compile.elixir_scm b/phoenix/_build/dev/lib/cc_precompiler/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 ucmZq9U`}MrV9I4+U|=)UGqlh%$!1_OvMA?s&B?6DEYkBxt&L8Jx(C<20j+TxLH!a_DAyD_^t)V3%f+TwxK zhaiZeMQh)q1ut4q!~+2-cz_3jR)tm(tALuSyh3LKSncb)_s#tC%{Sl7CjZQYL`DlC z$Vw3y91syeE%$*Sm^m;o@QgVH-LPNVE zD#?4Uc&-iFlxn5-oy2BNbVIS|eiE0(Pkb z1aGqBvTWf@+N+lfAM|6~v=>=(tF3KL!6jyGm1q$cOt}VhW8eq0&YB0o-Sl)W7iOAw zVa)@P&A+Bho>^xLSX+M<4`%YseLm=q@n`WFF_boz{+Lj;hHfVUSOBm9*#C*)V53QXZY>Q z-(~IpiIuIM8r$kdPY0 zfJ=tYfkdMv6Wvigic?{syPiCF*QGQ;WlXtx!*oEjrP^Gux&5 zaLKs1&$phuGw{xDVQ%=^>%22%jxQFJr)RC$yFch%FKJJ0OdhD06|Qoc)=T^a2~OVS zuNWJ-ta@j5SI(<4ao3ILO({!aJ403$RLPzyi_b>2PPucq_t-IS*Pfhg#p*bIuJ5hL zqS~fMwY6>RUQUzyr#G@@X*`T>6XJAN9QocIyb0fkX0EaF+%nU-vGvDpzU$OZYu8n(-S7{laV(ITh>KLhgE(uo|Qxi*ssOcWPw;*8aBQ zw9og?gnr?__c>1rU7B;t#=YNTgvCC42b5hcp41FCm_&=&=XWR1t}V7KIa2bpS;`49 z<(8hgd4W@zCXhC^*O~gc_ZJ*ZCMTzdZwhm$@H&C@hp7Z-#oYN?TCI) zTKR#UU*4V5P;_H0QhjE-QWkkA@O5pZX?|4I zj@R?{w%o5TEZD%m&f`1}%wXSB5r(Xi^rF!2H7@pJ$Bmp(@F47{GH2A1sA9K;Q%>%V zT^tZ<+`2m&e$lt5u4|u9bb2kLZS;y2of%j2pQb+f*3_E)SaaNdmyrF$zUz5}@v^@E zT*u^dik{h5lUXh@2^4G;CxP#YN(HCT1~orz61f7EC!t!2UPyr<*kCpENDW;?K*|32 sO+es5A%nyc4I^*@N0s5=K>?HLdug~>4hOO8HS`#LCo%wF&Hx1c1AvUHm;e9( literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/cc_precompiler/ebin/Elixir.CCPrecompiler.UniversalBinary.beam b/phoenix/_build/dev/lib/cc_precompiler/ebin/Elixir.CCPrecompiler.UniversalBinary.beam new file mode 100644 index 0000000000000000000000000000000000000000..cfea31067567f9ce0c790373f863b819c7b9c8ef GIT binary patch literal 4548 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

GTot>S%cX4WPn5Be7ikzp9 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/db_connection/.mix/compile.elixir_scm b/phoenix/_build/dev/lib/db_connection/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 ucmZq9U`}MrV9I4+U|=)UGqlh%$!1_OvMA?s&B?6DEYkBxtximk070Z|aO4MGM{iKwWfXorv#q_R|%RYelC-B4U% z#NDXS=tR+0j);n_h$2Y4wH+Kq+jeOeY;@c=blQda6+k_6?5T5Z{dewL{`Mlc{Pqu#wNwG6QdyrwzRagGztQgCftV8Veup4NP@t$EKU+(u@p5=t;UHAQmro5 zuq=(IXR#PVX-PAMo3LUXM$wp7!(zHJ%tnzk%c#w|fdv^^gv*~vGi$Uo$;bhjW+ru6 zCM=C%=`1ZPCva05Mw>K5=F?1!Rktc#GYLexY(itkwQ44d!e|T5khB62n4oieimmzy zAJr0EClIzNKe5GHJ#Nye84A-TGpvSY1%28Be7?r9Rsy3LJx+yvaurCwWcg`hl1b9^ znR&4*yxN2lMg_x?l!P>veZC@JDNX<-rjxdBrYu|vL2;xG1N+|_f*=%td-ekO1GvMe z9pZ_4ps-{JvNk{ua$K*2yM zc;G!xfrx=pC4t}qH`Ln?F1DjQ(Q_0oL+eq8I6&fwB1&A}3ItIk zB#Z570ttw4(@ud1fhhb`;TZ(761W!T84SS!A(tI0hXo>Tt)9UsED(RnS>Wqpy8za2 zn71ziK@(Uyh1;Y=GsTUO0DJ&%03QGzfEd8{Gr4n{+-?IaZ7yF0;5z^W1Hb^BA18B< z5FikM<2wQP0dTRo7~IJ5yfHWna)5(?%sp-ZT^5+Yo2TblJGlM_4JY!s|3L#AfX07; z8NAWS$Jw(0^|? zsv9847*fl9r!D~8zHuYBciet*`^w2)v7o4cQT1^;#KI7+JP8!qe|-H6`urjDgW1Mw z0TlDf0A}?_$MhNtPG-?AE32q&si0Jua8Qas*)o8+;}VGs5cgMCTm<;JTfiv?N+W~} z4wG{PNpZ#u7lv;QBuG#xG*&|0R@-PbMUz^LVXPh*G-(DjjafSZD^379jM4zY2N0Sp zmQ>?ruKaNcx-lR(EoOvLWfK`Nr%Z=y2u%i_A)7#EuvXwDWAr4+;zXttvtR@(qx2+3 z;5HekrocKK%+OwdWhOlRe;5r#g<&>Be0nAhLCC}f$q?jGW7~Xg(rEH(G+H68Q*G{j z)lpZW7(46g^3s@J{qJvCY&qB@EeLBabI)1VXL(1Zs2BEIi(~k~xT^k_>4I*arm!td z&(7VsleeM6;~pVr({p!>44o>wwuU;qB}jN~Uv*)_u}fY9rx_)zrXTB%2em@K6QAWbZyR|8DXn)#ILtb`ta)6*uMOwRhLo^%eQTAoY$;= zxgzAZc#k?>No4+GouTWcUJ>>+>y|a-?Os~8@=PxwD-MmH|4LLRO*?V_`4Epu2Gt2`SU-or~uz4&(@d#I%IZ!g_`f8C*73mqxw z0*l}Gjt#-Le;Mul>e-p2{3(J$kNmZsa-@Fd&h<$Xq>Ro}8I(z$g8kh;G|pO?|6SD4 z_)!-IHU?jrru6HyZ`0){^4nvFru=;4#?eaqwoQ*78P4DHe^K}7-HLK#tz+ozt^xIn zLaAoI+hdAj*O^Q*%x|A&;;EL%%If@;d(mU3X-4qvvz$sTRRi;xwfc^ zaQ2J(>0M;c{f!Yv6LutN-pm<(KJnzM@&hsX1I~z(PQ=#FajyPa&)lC|n)R6H2eO*RqiaUx%bTR@PyUg2Ts=5x*!4xqz#9F|_Ye2P4Bp)Aob-KS za_IAF{q(N>)`jyQBt#@zd;^u~mM%B(UB)M~8kSbp8k_pr;zOM=PmeW>-nu^IjdP+nUsFE9U;WtJlKIZbuYFCn6?4 zH7mzYslArlyURBUV{z%6psJyZs*l2M#eug$MTjT03@A~)-1&m{**4EENK)0x(cBjo zw&&LHRMq7plb81_yUAbTw_Gn8Ybe=izOq{N<1keY`a|-;CslUx#ty$dj?%d7ne+3! z9=wPyYa;k($WgQoS7h6XKD{c_pw>uCJy+j?cl-M0sE;`P6$l^7-Fq_a^W zZifEHI}d3}aqH`ll5@JaJA6);yb;`6P!QBH^04qpMTpyq9(|07o8Av7>M=DMJAW^B zBpW_`?SX-A4}`sArWf|TdCh0BaMR9hXR@!q%%E+7f}yc)b?n8zHxsKWUfz9rAAa}E z(2BXiB`wyzX$?h>zU7zu{3~$NvxaWoGbL+|NPgF@xl~x#ouB>o?C*Knt2X{E<@1ol z7tO&_FXr)-wm2i$q8D7J5n`@uqZ+gytr4TumT(rRV5@uEeUPiJpbrAe_NLgXM;JVl zBf;GgTmv~5J?B?m}=PC$vg2Ci8Mn^|mP!l|vj6?>{+QZGA!)DVX1q=?`+Kn0+$BBwc4GUwi zqc~w4ohAzLDYAI_pi z@;H1FK!&q8G$E57&KK~6k%DkKk4a@m4@T1kVN!ymm!hyRDLpK#N~V)1TgVFM(P_d+ zIyXY95?PSMrISF1WFD1GONCxxphn>ffF>jsHIc+(uyK<}YzC7Q!Dn(oEev3*WX;1s zy;UaNH8PUU=aYaMU#Orxn=U#t#tn7WC1dxYCy6*b8ksNPa8Y;}ase<4JKEYkhRWmT z2sqFPKph$=^od}wsk|f-mB~b@k9Eq67P9DUfhUj0;pNa1!N?$sQ|M5gL}Mh3Y3D=d zvFS`MgU#mxr{Jt`7F;2l5yj!LC_FkJ==_!GQ0i7+jAt|13i!Z^WECDkrLm}7l-BQw z3^tR&rqcieXf{?Eb2MlSgSm5PbQlb|1_p!S06r)GqM6I>A6G*N1{ znQoc$g%NaKV45&Dv&6H;0Zt-&!4P;jnXCrh6tWi%e8S0I1n}XK<-j|YjKBlpTmlT9 zqkzLY!HdK=Ikj#Wyo&5a0`xPIDh}R?n?izAAmDKOVMI+BpyI`_xg;FCOH7bc!>Hom zgN08JyPgCiaGGR{8nGL1@dU5tLVThbj=^KqFzQ%U%y=vgj>3)cXb>@)cxS9SaVh|U z8xdybM#K@vAqjRwcQGj$Ng>%ywo@Wd$V7QELLK0P?Fe{0*&QJ!%M-AsI1+9zUXy^3 z7gKg1)$s&P0!9OmBN6r@01~f8z{63hV_j)MT`A#6WQ07Kh!BU5wTD>c)o_4SP09+% zu)yN+7@b{MJTw#nMvExs?m!|CB&Y)-jzoewAOh2%@MCQ>iQ?2`B#Dey#Y1Z1NkqIj z2Ws;>rSMQ2b#c*bA{;edTm_7#3(TRRgu_8cvD0;?sD(Xqg4 zA}~5+FET=+rzRLS=!4OVz(acArC2QstTy1nkznJH;qux-5&|O1ONrW$rM^^k#I2xf zL(uhvDOeqZ5&?HW69-wCj2TZPV~p_PE=3X-sAPfFMPMe9F**o|F?Gr62(rBT8XQhM zD38NxxFKM8Hw2DImPa5-SbZQ*PmBVwgE1t*QTkR`W4syG7}x@Cg`G$=!%hq)lHjIT zgJ2>#7*B?L0o;m5h*7GFxKuD`@UBL}aH$AQlorMmmMRBZg)t+f%E@EQCDl~4HpYyc zDu=+Buff3-aXBbl5e$wpa6w>+k`OZjA!Z0di~vUw#3(i3k1EjDWCZXSFbe217(tep z1&=5|dQpHsi@Mb?nna8i9;1Q4sA0wf_Za?}gwX*sbwD%v1`Q8rL?swbjKVA8&d3IF zMxr#z@TO!CK_3={#C0Kpj1`T>x{KWOa(wF#M*&4g%LrlB6cA0&^(sRUOU-ZfpNso#TCI(_6h{7BOK)* z5itdbaGZ{HfTN~J>Q0~|r|H-!2(ZZnfVI~f>|G3&kVPOc_=IR49c*|!f*^*SafC6<#I zBZ1F`{0V2{VCq^a9!>^j+gnpCA9(+?_F!x*%zX|!3Q$KR{0PXB33MJGWPEWjgtIjX zLU1G*ARiKf6lt?T63L~C*kQ6fn-|9AaiBz1gpT5ISOCqVi&Ov?Q~)$OmkJQd06`Uk z1eC#oQgM+ESO=&)cG#CBJ!~v7j|F`y@Hs+WBs~rmW)sK<`qRke#czovM$qlcparc*hc)x+QsJ^G~ zXx*^Ro4NgGQ_B$#nuwS?Z&MPg9}Nr(X~nB%bfj=prlskgc&W_lymj!=k`-&MI4RR= zt4nvk7=D%SEvj2uB6xWFc!R|QZvONYvoy@loSpvoms75JCVA=poHdOmj%(IhUeR}? z=(S%eeD1tuSM>ZX0S_w_7;j#|{Cqc=<*{?0lAEJ;m;d}ui@!2>R^x?F+B@S{vK#g5 zZV|4;bWwGd_V=dq(?iQ@8Z(z1T$j}waLiO0Nw{@^WHfz-J?vZPkTHLJ8kNRm>F50Y#+&tAU>62%}Z9U@04c;%d`qa6b zvzJiDU%ozbH1N>l5E_MeRo-8Z_6B?2;6C&fS!BI?NT%wil>pGmu2O{q6GE~coy(RdZzo30cd{MwkH#e#6e_q(=`JnVTOvNBF zE3)e@Iy)G}v`?>ohs4adcJH>+inG;EDlFaIS|7D)1dKD=F}`OvZh(IJ3c}@LUGZ#ed|!|H#TS8#Ddd+N>U~S~0A?S?vPa^?1d*&HIrlE0>cw2{8{v z`U%W^=~E*+OI;ck{FHtFpm&b8&o9IC`%$HNKH19N2M6z}Ihe%wwQQt>r0K2e?k`(z z)4cJevnMJmH@exVa;X(9G$A7`B7rtL_=xA#jRv%iR|r#ogR;nGmGK>~&adyNE;o(v z5?rJ=TOKOZE7sklR~+h)U}^`3KB&u}(5PiQjx z#MX?q%;dIWL-j*Xn_e&q>#uZ7FU$3^6~s3cuiMkt+g&cVM0b4U{GFAJ>y|y%Sm3qZ zJL)EKt3{jVWLj`Z&Pf%^pO@QtZ1mBXws_nUvkm!05k=ZAcBNUlFt$)|jNc#rn7Z!~ zc5}O`>Y%-9@+W`dWtM5o#m<^Fw)HPwda}opDPiR3=+n=nySFXP@YxtO?!XhmmJ-bBC^2 z<_?WBHTT|zV3+sqU+cW8;{(sRZ!#};*X3~sUyP5mbi}8z)0!+}LhjZsH!aB17xoM+ zehn9xZ=U3wA9cQ`s9ZMXRN7D8{$UaRLxi{HODZ_X3mOQ)dLmLc|P zU9~=Yq*pBzweY@i`%9!NOJs2r(=<>$Kn&FSAnsL0yTEL2xp*{`>1ym~3p@Od+MO@& z|3p!n66@#vOh=@*|H^?#;q|GGL6msC9pzgWHb1-Y ztu$C8^wjG#-U$~^%7AO>Nsj8G?PfM>mNhL}x2jX;K#z@MYQf0o+DRJ4Z|_BJ5;g0V zA=Z^XPxAl4P38~kNF4(fNc-x7cHpb$arblm?UY>lt zQ-vC5z8}^9@M@yoi~~n>r!Uz{&vxl+o%L{T0dtrXcOfYLx>C4@aQbqk_eLrw#Kp(d z7lt$nO=`C(8&>~ZkIV^vl$du-nb~2KvS=^KwXb5%x{Z51$!}ppb&31;YJ7^i_Utrv zqNcnZWoLHUl%E=^(+Fo*`%u%)Y*Co}p~-cRQd52P`z6$6Rur6%hi=%KkSD|Mhu1I7 zdN8o5Rp06D?B`Q!?^X3YeOmI;u06MOH29=`!h@}dGJlg_tUWx}`{YH$7HN~p-t=6z z{M2B#ZD!c`kJ&+^sSg7*{600Dso9{VVWxCx-_6pXk2^kdhH~a4r2G=6dYDt3mf)Mz z-zUFT!%=6YPGG8AM5OC5z1*DNyIJXv0cLJtCcT5z;Ud#yW5%B z-cFXbQ7tRWb!{`VclO*mdRhK#>p-#w_IfVJhQ5uk8hgmn(-#z zc&j(Z<>|3Ilu2bnmlwyC(}>hdjJe3-ve&eE?8VsXhnHtKqFrya`Nfm(oqDp!>m|I; z`JTHbDkOLMzOwxBFL3ITr77tmA$~)>;ITDbE%$;4iM1 zq$bcY<%Kh1eLdgF4c!ax?^-Zdf$*`~@&mbb+(_%urng*`aLrr7vdkOPt}_+s3W*ahz$niG%@O2^3hgfc;aZpZsNzyhXKdrdW4t&?))*)Qz(qK0Isb{wT1HSJ>8}Ci~J+lq11CDP? z;XQ+U_2mhA4K&?1siTLo>N^WNMk~(Mc1D!s)*ngGqHr7LBgix!C%Dp#Ftobq#P-HF z9=xBI&mUat@NzmeP<6MHVaD{Afx<_PD~`J@G~G!$@AtW+EYrpzPKUocrTy-`BUYOV z@{Wrx&d|_6sJA&eZ+I}z=cn1baxkUCE8hxkS)EvTl)K)le}og;qii4NzsK4$6GP@~uy}2tc)503WmSyZRgZ$xiKy+czT!0Yf;wK>4KcsRzS!B*qa1VRHQi1=?t2E_ajv0H+>l3? zy{$%@ByAaSYrIZsDcNtZxMhb^$D6f8g%dZG^b6P6MvcsWvlsUfQ}A4TblnH|w0Cda zcb2yt`E<-^2Yy|F_SujATW)v_(sJif1~c56J?5X;>OxlRm%Yn*FfJ-uK!ZRhpg`QpZjCHk?-c!SS@xbuVi)#8O2IpU_Z^kuhptoJLlo6);& zaJb>nfd9+Zq39YCVd?;KVXa_?t5eC$%^+*Gw$5P9!@>{Kd`FG;y}Ysf=15=J^LcLLMlDv(zc^uo-(A9$>C5f!_#L<~Z_%Ag!Yd{% z)wQn?TknTQASWrcB~)d99KKgK;*&omX?L~KjcEZjIV%`=JzRUrNoog7U3X_?M)d^8 zR(J>jqh~)Y>e5oq2EF43$wO_;mcF6=G1+G@70W+6&-?touB&l#9bK{3u)u{q8}4-#yzlpPhS-j9b0fOr5e`QB6NJ zzsuEeS3@x;d>W_h#nuN$`yG$_9J@F&z^+a$@ponojoLk&X?MkKf{E>&+QzIiZ>zf; zf+yVg^`b(YyJOLiM+o)9dQ&v!QQ;vy&z7QY-hM%pP2KXyy@ZV0nZG9Afg60hy0msK zdi4{1;~P5LOwfvO^LdxH_-;UEdf1s`HJ`g22$eGzdz_8S4ezTY>i8Iv978el2YWrT z3D@Zb)>Z714+okX6LQ!WuGbO0>-;-AD43-STB&+2p?k~Ok*8|EXtVf31I#yxbSMeEf5*Qt6_sn$MwM$hh8+4Dv{)_!CCw1HDwu50ldniZaw zdOV*n82(YzskM61Tjg=*ULA*dCc4LgBZuYS1VE%pmt13oMaIx0dSvr=-F-E(Z?k^yk15zUT%SqBV?G&BPpfTp0CXcl@p+7&$mru)77bXWk`iDmMk|0W<+ RMqy-_8TgAN0n}vA{{ZK|-RA%R literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Connection.beam b/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Connection.beam new file mode 100644 index 0000000000000000000000000000000000000000..6bc18e816ca0f2d0c28f51a288db0761f52b9d06 GIT binary patch literal 39792 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.ConnectionError.beam b/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.ConnectionError.beam new file mode 100644 index 0000000000000000000000000000000000000000..f4644d624119ba174e5095993e3b902a024ac53e GIT binary patch literal 4544 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 bqo2RCz|(@T9Q<$r8z}(rHyzPnltB15=gFkT literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.ConnectionPool.beam b/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.ConnectionPool.beam new file mode 100644 index 0000000000000000000000000000000000000000..69715a92944d52bf29a7f1a6e32c401dbb3eba14 GIT binary patch literal 28544 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 JH`${){1+SY7`Ffb literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.EncodeError.beam b/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.EncodeError.beam new file mode 100644 index 0000000000000000000000000000000000000000..17b618fb818c96e53cf7cdff3cdabb417b71d38c GIT binary patch literal 3500 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 Xey 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 mND9S_A|)e&zj5hK+}gEC5^ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.LogEntry.beam b/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.LogEntry.beam new file mode 100644 index 0000000000000000000000000000000000000000..7d8f3a3c26a31e8d4f43433f6ac72f95cc1a5d42 GIT binary patch literal 5940 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Ownership.Proxy.beam b/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Ownership.Proxy.beam new file mode 100644 index 0000000000000000000000000000000000000000..75fd74925f4feaba1dc1a1d2dcf5c47d30eb4601 GIT binary patch literal 24220 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 HDjf1ZWaOZ; literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.OwnershipError.beam b/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.OwnershipError.beam new file mode 100644 index 0000000000000000000000000000000000000000..a7399a5f38dcc51c47be08908518209b27b8ff09 GIT binary patch literal 3676 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Pool.beam b/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Pool.beam new file mode 100644 index 0000000000000000000000000000000000000000..e0edbecae5bb2783eb85227859bd254c49cf0153 GIT binary patch literal 2308 zcmZ8j30MT1!(UgX(^?iTUtN*=v^{V<+RYxq1 z@rNMRP?%_b^n9)OZx95%9UdP3l{HqR#M5vMKRirG5(FmI;v~UeMv}@+2!a!G5<&7& ztyY64=(HH6mXazpuEg?Xm|BBLQ7tAjVQFeoqooj)EGSd1BPA;Fiy6Qfz#8V{K@6@N z2X+l+ZsW1I0lF|<43;3)U|X=gy2GN9AlNUois=Z4hH^o@EOY?`n)px#sMVoNN5C#| zh2Txr96LuillJw31Lp@bZ}CEHIkmQ<&%!2)?Um3495AE>*o}cZX**jk1ozX!IUJZ} ziNcl(q|yI(%Hmq=90BV%*NzLboGg7O&>u6`&WRbT)vTZw6RA?u?L+_ufE|GSUu0O6 zX0ZtbycGZ!00tQSK?V)v@BuV$3qbp#WkwXPrTr%Z(1qrm4JuG`+=HWX+q}<&yOrBb zXO5d(4>*xQ32LT-p?9Xgx%5+_Au0@{mXtzaptG0Z)CUy;K0Qj?v!n`4noR1nC^HF) zBBh_N$qD$RV;KYB_(67@4{{aA9+nwtugp}6pl62(4wT&0(KdwUxgOfEFlg||&8JC8 zkT8;v18v)<2uG%38VV#^GQ^z4_X7?_zE3`ic4DO;N011mM)d?(h2`qH zq+F{9qXd+KB(*q^=!>OdgjS$dkQjld3Bch4)(M~Oqd74JtUa^eil}sz(-Q|}~DU8m~4zaRT36a%d9kvf8vr8go zT=V?*o{V?T)=w)^rI#MFdYf>H8ZM{uYNpJq(w(*0Y80C`E{@CH@m&ktmzRHFSmQ5;7GYg=Zq*0o4zGH*_Aozg z4`gHB9_O+`$qFpK8tyf<>(R*e!-3zsE%&S?#-NqApSsS8Sc4^~B5kjmYbLEVpRMDt zBfQdcZn99uQ+BLo{-PXXJWIGQJ0h-N%7UH7gJH_d%>~ZSLyk7P8MoC0NTiI_1>Vv8 z)l<`Vhus_)`$FvX1vl!b`IODL7D<<=Zs+lWtD~$ZoT%zQe%hZo_1xHrW7AU1L&meM zHAg)b5D&hQPm#5auNstP8=s^aj{SFBSHnM1o9eszhVtSzUV|Tb#lxdm=IgTR1zvCw zDZn>Q+~*%uxqSGfE~TMu3o%XKb$iV19C7>QtnU3Q_Z;h;wQF3fiLJKR)h{%IYrWu5bv_54Odvx}c(PFnxnhm{6W;XbYTs&mPiiHrZ2 zF?;Et|NU19LknXk8`pg!>A`=@sm#ZUeOn$x26-pCdGub@O>14>o^@k+_0N%WVqSk? zD6j4GiSoM~m(xu>Mmnz#3;H%(*mxk=rO&55q;*cwsE4;I0==;JPd1ot8=Ke1i-W%v6eT_GH_C(1&2?{ldhXQQ^en0f zp15-V_H@$p$n>x&_O-;6)9~D<1>rpy3LDk9-_u+^Xg%{pnL*r9{}s=vx7|3l zn# z(sYJ@(5mAo@Qpp7Z*do8F!>>^{QpL1x4c z=0V}4lmeFxn?7p{ue1Z(GJhfrer%C&bLs@C!<=6Q=M)_Qy((_Nj(b*N#=Y653M6xO zVUPE7S<{`6*X}(WhrL_L#|}T&&K>`QVrD>H&!)wlQ!mVqDNQ+DnynDVym)i7V9To3 zwt1tX>zgbKG*kKrg{s0L8 BcN_o! literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.PrepareStream.beam b/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.PrepareStream.beam new file mode 100644 index 0000000000000000000000000000000000000000..246e759f3ff9098a3dce962f09bd787efdbc5942 GIT binary patch literal 3036 zcmai030M=?7M@7}0~(kltm^Ycz_pSDg$k%`WD!voMM1?S>p&8cnJ_aUK}tc?J_^rQ zLokbC-OqV5* zsIf#`A}N(o6rq+ID3sJIaGhSQMN5^aoKn!etyLfv#paO!R5L}6Z*m#2} z0zkKFfPnxk7%7GrTu%h%PhhTcV{ykW4_+Q?kfTIgwxM8oSy+ufEE0!9Odc#2b3s2t z9FBlNDh}s^K`&;2K1vozwmTF29<%8HMddA0azMy%w2Y*ngTL#h?PY9n!8jB zdK(IK3}ZhfnkX}9DI*h8YmK&vYE-K<+9<%a_ypfJ#efoNpAfJEH%X==KOtd*>nTzL zTo_^ThM{5@9p3%gGU%fTBLV1d>k2@B2M+)j06O+=0Kb2S$sl!rb>9hL za3W?ZiP5o#F$5An>3YR=KY_ey*b%lJUXN-tP)G!p2)M15h%kYCzf_bUL2gQhn1KQj zO#o2?Ytr%ojUE^-A@wpNCb4EFLZT;d1xk`e`$PiQ0WyIaoq!ZQ0X$2BGdco-%s}B1 zwT@0+8lcyX#0`W3O@`(O<49mrs8q`^S)w{oI15jtj36xvNfnM$YAneIO+_(Es8``A zrZx#dE(FqYVBu{d6>8P;4=DoFqzRQLsX^E{OJ{(ec#Ns!RQxHtMdXaH{k|o^ZeZJT zuYOqNxkow7D(3ZUzo@|hq1e-!i{yjOfQ(&Pz3cCIvtK7%h~_tJ+4nmA@biavTL1TN z_u;p64RK}1?hSJkKlKC7y_5PN76YJr<=buEVHz60Bs0GuGte)ed>b};V zzRNkZDB0hvI_`UO*@k5^r%x*Ss-|{awud82#h1IvmmG^-d3hwtvu7~37Dm@SC}dYl=FXZD zUodJ3xg#&!*SoUNHKTr557%+*@gplA2RzRB?7t_Ckoo4s6S)gVQ`o4Sn7Q&Li~-+_ zAeU^jx#f_nXN+1$EF5@r+&su}C-2cKpOW9&{ifChu#R2cEK&|JFWb>n>pu0mtm$3{ zCr}|v>?)6F9U*ck*H0C)9bKMOr;p#&%PkxrZ16tMG40PD(mq$ve`xGR@Bf?$KGEef zQY46S&%f3@`qAv}g@ZpIGpFKY70wrUA?edz9$xWm&Oh6HYR?g6PbC?>^SXNCy$*%f zPe`2;64%&%6iu&IGWIxEh| z*i-k&Ta|D&tCAcsxG{P9(Q~n17Sv{4{9Cu?od0lX{DhXpTRigy1#U}CTl65?$AkE? z``X={E%5&73n$navldjGzumleS;fYLn#${6Wb8MBHo?04UALzpKkQ*I(j;VwRgdwL6_4U^Df<*H~OVP+KD_0s-j|rwGT=T zsh+jXZ_AwWQs#d)WKFeMea(E(!QH-l5dCC|d_oJH&s@|$Pu&BOgx3Y^L^vWBgwKD)jr{rJVOp9D`Qy@(B}@vAv4 zk2L4sovz>{mb zIXTd6UwgYO@AIb#f#28O;NCC1ntNqlURvwvr_=D5Rp}4RjhljIg{*a5F=@M>n`dap z&6zA|hP2equWeJ96KB|pf^Q?%#tZ)OH8cKp*42&-!|PWsD6Oe$?uf>yZr021VnP&K zwnUa@yy-R1 z=NkXIhG~rNit(q+{a(^PA*9iOTJTY{VC&KTAX=6X^|AXY(=eG%tuWe9D50~4@gt%J riUbc)5J&pS`L@}E30*^Bu00oW{-eqPn6uOL^gagwy6(bGy%6+&)b|^R literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Query.beam b/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Query.beam new file mode 100644 index 0000000000000000000000000000000000000000..dd4a3583cc5c370dffd0dae558b9e487f7c251ae GIT binary patch literal 6912 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 H1V#N15W!zy literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Stream.beam b/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..98745b2a8ee756318389bacd1b4ad30402ad443d GIT binary patch literal 2988 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.TelemetryListener.beam b/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.TelemetryListener.beam new file mode 100644 index 0000000000000000000000000000000000000000..a769e4228da1f6f7bf4a396231ea5517be4a2def GIT binary patch literal 10616 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Util.beam b/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Util.beam new file mode 100644 index 0000000000000000000000000000000000000000..869a46284943aa252375e28dc1cb11722ced5142 GIT binary patch literal 3660 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Watcher.beam b/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.Watcher.beam new file mode 100644 index 0000000000000000000000000000000000000000..d5758f2c29dede626fc7c34bae61dea5fcab6a25 GIT binary patch literal 9120 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 am@O~>?2d;tsF#exA#Ciu{|Eku)B7KpaXk0{ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.beam b/phoenix/_build/dev/lib/db_connection/ebin/Elixir.DBConnection.beam new file mode 100644 index 0000000000000000000000000000000000000000..8e9fc45c1f79b38736641902f4d19eb576a5ede4 GIT binary patch literal 66552 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%0A_C*ao+f!-pa(pX_2xIoSKL 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 Qm%?wM9^RKxlOY88FaN#T0RR91 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/db_connection/ebin/Elixir.Enumerable.DBConnection.Stream.beam b/phoenix/_build/dev/lib/db_connection/ebin/Elixir.Enumerable.DBConnection.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..0b686f5f52411bcd286914a3d6542abde23c9e7e GIT binary patch literal 3644 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/decimal/.mix/compile.elixir_scm b/phoenix/_build/dev/lib/decimal/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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%0A*#?ba z%Lixr0`UTc;c8Q*dLuQA@5W699WM!Gd+sM|Dcf8-WHa2lJ^hg4Ud;~;UiVg=y?Y?_ zOQJ?*`uy9wG8_31&c3>ECOYtyL(;;z8TD~h)YNqd{t3NPS1z5As(KlESYlpiKW1_9 z`ckJxFWEg8t6TylL;rfMW9hDe&ki2>=yTS-`^~x)oUPS^!v?!Kg>x0Nah^W+AqB?? zxzXF&hi%CtUtT%gQMzGt@mTgHt6lEjzJ>X$aJ9!<$3(0@Xu(oHcfRdw(}mX;>(|Ab zmX^MG{t3AuAx7qNVB~9Ma&bwvZ}t6S#}mZEl#F_fUc_x|lbqo2TydKg>u)z03mk2Y zE7@yq{Ex`sJKY46#7O6o$#Y$XfeOqJ8JP{yFXesqZ@C zrZy&+Xhe~CcH?22uCm|AXARuC99WaJ!+r2c9d3=oHH+w^Vf-mvwbhwN=G^zP>8NY@ zz55?IJv`l@*~G9oKKZ!knblW%Mg_t?+BO0d%IsuNt;o?t?LRU#oJNhHami7}aCwLn zO3pO);OYoerhxOO+H{%;#iNG-ia6*Lg2o;!7cRz_A%P~^GzKM@*2Y;j<%Qs{+ z@n;tBJK0|q{ES~z{L}J(FO~s6|0|@(X|7*|ROH4qSu!MsMTw+Sg=jvF8#xo}|3HdV zPj?D_uk+tTMZJaJi~ho$8Rmb_`LxeJq&<6k|us zq~Y%#%73-y857eo-&64W1^i=frcLwj#>9T57xn)yz(2eB%b0x61;Q0H&%qgB3*h^M z2LrhGhm@Ccl?syzm*Plml!}##lUgg~FBK@Y0ipQoJ_y1mh6C$@`-gD<2sL{OL4v!S F{{xM7IBNg^ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/decimal/ebin/Elixir.Decimal.Error.beam b/phoenix/_build/dev/lib/decimal/ebin/Elixir.Decimal.Error.beam new file mode 100644 index 0000000000000000000000000000000000000000..37393d0ba2e6dc00902da4f3b1b20494b2187686 GIT binary patch literal 4276 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/decimal/ebin/Elixir.Decimal.beam b/phoenix/_build/dev/lib/decimal/ebin/Elixir.Decimal.beam new file mode 100644 index 0000000000000000000000000000000000000000..518e93ca99bdad7d3644eab201dea10b89552881 GIT binary patch literal 123244 zcmbrn3w#XM8$Z00-7vc{Y_dz-EgLcsBg@7$!jMGPWe7pkEm_Hi5SvIsP$~pPT~b;) z6%n_()~%}53tIPEi&pzn)uLMTMqAa=miPP2%qAQ4`~Cm#`{t9GdFGjOp7WgNJm)#j zdCr;Hp8W^5(J|LDdL(q0x)%)YsMA$ZoESrgpZMX9M--priT z)N*%0L0;DANd=z#-1M9Yxmnqs@(fRIo+sU1;K|tKnUb56SCF4NA){SM<|J==K~|18 zKW&0LJufHU0c6^QoQz4?p0xaeyh-T=X`Z}nw|C6lF`j}{^?_1Kd1|WqJT-Nf#zum7 z(uA};PsXHlkHbAWUrf*OWIFn}`-%BkW4sP`Mur3IIZ*mtkHU8y6nn^EkWU_$U4Sr7K#Waj@UX+WRA=67I>x(#<)rO1*zbDm)kov)tlp;=E=)R%FfC!$aes9&Yhc^JvB95rI0(?o$qPm z=q5sd9tUdV$jF+UlA3_T$06-ni9~^iGIG!^dFTgO(>!!j zA(^E7-0ZA^G*z-ic%n3JNya3gsYlo%BM)gp8wgGJ+|_P+YJH<9D+9I3Dwyh+;Lde; zCU$egc8*Q+Oq}G-?shISYlyqpQ@?YXR+)ax{Cf||oDG)QWycy_c?))5Y z8Y!|noB9fPE3XiJx7>73RyG=3%*ZM9mW*|0XQoy{Xclj-f}50U!++OUF&m0#?joXt zb}Q1_q#JluTRau=RvL%3_%LX?^s(+ds>)qI9Nn{Kse9bO{z6uMs-{cj9<9H7Cznu0 zXrCu9Y0M;dUPcmxlRoy4mSEx}^nKQv58kqK3R9Kdjs{8vbJSHlX`qRE+G1nT=`tMI zkX$w-hjy7FPMDNkAbQ>2ZfRc67-T9@E?JX3-AXFdA~)BakqRr71Y?u$xvMF#y8yio zMI2JFs4S^51e}j>H2Q=ITWK)$+O?^?- z$Gg<~Qr(#ao;)y6&~2BW(Pu*hAM;Ud1&kenLtyI&{)!tFt>D`TNd?f_{HH%ft`Nc3 z5u@7qDAgAHjB8XI4Q-2xWvxQxa8vPsty>kF<%Pz3GKeRu;JfjSiO8jk%gONQbc5FE zbUHH*`rD_|>8sG#b!2d)7e9HcxsV#{TycIu51ekF$J3$)?E6#zU=oDy*bo&-4gk`C8UfC zR_;t8mPjtxVzR6X)YDUwHQ2(i!Lp7)n%F}a)~aG_6IL{ZIIkmdZF@*7uBp?6QfrrSjfje9vN}y6 zc-F{nszW#=PcvDQO(AiVqmexXr#Mp`oRghFqHTMq&0rNRVWK{|jH{#a5o(R)LK(J> zXbQE+N!4w(HC#iz%~ZdK-mDk(R)!5NtXsTcs(QSWI<-bZEmgyO@}35lxMpqN%Z7PBVx?pB{Rhg(?uqHMW@Qhv>je(l;3GQsvEUL)0W@)C8hTNK=XohVnTA({@vofwZaRs@?nLCzIV!U27#Lsuw)tSdyv^CS`6|ogPB{k#h|APbqj+&(8gJy*kSS^7pl`-KIhUiYzz4+lr#(t5gx(u z7N^aqR{uERE3Iw+M<{!(G)=BMQ*AQcWWaP#*}=DYF)^9SIP<$f@dvq8Kn3oYN8#WEMrILA2{- z){186C$qI7vouH`iG)`IMm6f~WVQ}SwF0U3ezwVM3Ds@UTl(2{F>D8!4MmbDBmm_x*EvSdbqQrJ1amQKxfo*x7n601i>ViG=3+WA^U86q z)kEZBp3%Lsq6nA3->>O#iFx%DE>i;r)wn^|P}k&JxXQX)pKdf0V659OubhBkznQ0r z0QTz_Keypn5kdBOzvg_P19XW=Pna@tp#pMO_r0+xgTMzm-NNH`!-8AtP2l+Bql9z} z2lS+UyOXaU{iAFV^8hyrrF)TyYg}u`guKvG zy#Jqv#NUeplJbvR&acId@EEs9h`lHq4zLigcwx8Ios1QAJUBOQxhyu9NF z!%Z3{jrqxV;PvMZby&Ov^;Qz4S$eqhj!Uy6pI=J6P`+H}wTQ!bbUF%hkl)!?_-eMP?hR zDeSnEq*&5|m81@(D2%*dsT;%gn8C$44uMQ7E-uBA%b=_{jU|lLAkrAQ&)L@!ku=Lw zNyN)+6V#?XYLg&vJ@r94b9M7o&9Iy5>y?qSXDOEmyOUU9cM>fjl}S))Vr$MtS!LE{ zFblDj&y?)0c3f}uX;VDC)QRhrqA$YW3}N(2v6LjTeUSkJq@D&7Uzxo`Q$w}%-UOi# zG*vUO+7V-2-)c5)5W`9`YX_zinC}G5DZZpDpAj^jB`Tr$t4C&w}D;FvgWNGOdkoF|w|XV@X7TnZ?pXcXc! z3MoV(1r(4zMNOX`%y}3#rIZ^AhK6byrxZ7o5)Xw-2;qx*_(7~x=?Jmm{+>`P?iqMO z6+Y0=Qf@d(A5NwF9L(WFZMZ@WuEdknczlM47K*iGH#Tb%L*!^?7?cTQU19`kwctL zxki<7sg-4<`pQUEQ(F~TrBZ5-Gniph%eb^k+G%#QiAo)+P$`WxH9e@Om2vJ$>TVx( zw?B2a$_q#_th7uC%)j#9Er$Y@q zqA8YAWvZ#>5H(C56mbV7!69-OtYM-hTGXS1N5BUG6b7$cW?Rxt1UEG$jGWFgZcIwN z;@OAAa$^~G47v4ir^4WX%50?KCQb3VNg%Hb)g2Kkc zO1io5zVGUhbSA@2tn>%1@$d(e7&fnr%dbKa$?~gEY^_i%@KIC<75tmfq)JpM+O3sJ zezG5yCQ2x=&>w|%Qn6F~uo`Pq!?_v0T2HIOlA z{Z^pje-}JQo9VD^XpZybRA&%IgSj%>wl^j@^JLaZ=G?)s&zEvb>}A~i6g%~BYut5b zBsbrQem6f3+$i%%wx7Pjj?G7M*s&!_H>R{poFPD==PptEnu?-Z5VUD2f*i_B$zrA6 zX2$>=UERi-w}fFbN9tve*>*q#6T*t8?F|^l)Ehjt%4`Qh#H56kb1#6&7;b^73%7t_ z7sRCKeW-<|SZ*Q1E>uM2fY4ru7Yq%N?O35W^B} zGG{?)ofPp|m6@VXiUtb}BbZb=xaTnlE|uBN5TFQ|mWTl~NG@a87d0fFFRL0;kl7ez z?uF>Za!7BvY6QC@j9`f6USingqN%$D)Md7dq8YMJGmwB`Un=EZww7@(r&!6nMA&1w z6%6~bGGnu>|UyQmJhbkWd#04OqDn+uf?7UX|Id5KIpUW>qOyiprL%ssg8` z)Di-sr2@AauA}fF!>(?}m1$sEYwlIm7wT5s%!cd^)R~L)h<=$8bVUI=W2mX8ttdcm zN>uLIP-C>rib!ZdsXB&TBeUI6YA^6qF2nr`6wjqt94U53oXp0}2uw;!iKDyZ8G&hV z8XYOg4rp0C9661#Fzr091AoBG-S*d4n~eH{QS4rBCI zlZ24qWNvec<&e!NnsxSl+-3`Or=Jd!Z}7O8A{|>~wl{>do3a}t3vK

    kDY`=bHwl2f&k=g!u?nGH{lyWDbGbdG@!MJ^r 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/decimal/ebin/Elixir.Inspect.Decimal.beam b/phoenix/_build/dev/lib/decimal/ebin/Elixir.Inspect.Decimal.beam new file mode 100644 index 0000000000000000000000000000000000000000..3eafb8ca24e8ed8103f5fe52f600632b93b1f7c3 GIT binary patch literal 2660 zcmb7G3se)?8Jg|NH;{ zojd=3Z}O*^6A?tPWJXfLoCIe6WCTG22L}fq^TkPO(oE_iQYpQbP%;rS2_>n))kShS zNvUYLybfm=9jP!dgkGzpHCj?l)a4Lb9ihY-BBzNkYiS*$muqrjEh+=0WJsFQXKQe! zj@Cy3nXRF73~C}<&*%(FCW<1}*@RAwQ@MS)1S203+B~riHCnY?9;KpnMOq!r&`Mf; z|HJ4ULwk@~awupEL(9PdN#(MB*hWE8xNb!hu2whw#0TFqoTStwMdXA#yhTn7|B$sU z8dwBD66qWQz7qyr7VL8n;0xfPSPjAv24iT@RPGjUzA(CMMp>poLFneMF>Ef|nbaJM zMoG_cMW|FNgtttZfRAy^R?0uhLjA`a3n@D3{C za0NcL;q}o%M1=A^So;EB1mz1^zZlFH4N(}%_xv#$zL$;l16Ca8>V@*XZDW5J`^33= zbF&!TJopCg_Fage2vcZqa2S%R(XxCffD3R1xB)l-5x@(80vtS=WVY!`fpY?|-<6en z+WXKTLi?Dt!R~=OfYosUupHaxq>~KmcNTzsSU$K!&Gzy*Cca~*aTG>8`yYdI@x z(ZCxU85LQvbJpIrnE2*E>zU=f>9mry7r)r^Q1CA@kZCjXFoe%Pn3L+0TlC(i*(=xez_-C^!!=Vnx?ns0G)Moub znhewSoygBe5>qJ^MDeHLxOhfFr-!60K)6#PqF^GA*4mPkbuz-_OF`;raT6uCC$~-x zPL+gSZyKr6(Hfw2gvlMW*bc}DEe?bm5V!%-4ssUqpN-yG4{K8r1xQ-td_DM#%pq|K zSCOj7ELz2wU{<6)kER(&&v3#>P)wvYk0vP690}zFw1?_Wq?%MX`VoXVf2Jargl%Xp zkwMZ~&DP(|zf5&UVO`^m4_ak)d5xNgR9V-Ih6GF2s?e2TvTrBII>rSjY~m!hD?iV7ET?@T%D$HmRJg5qm47uX-kp{jTL$=f;Oiw)wU% zYCm>Uw!F1Zcg@;n`O<02;b`xB-A~`SXKb3C3 z&qr4WJ&jJUZ+q%C=26VcGf$dgB!%-Vm}{71&taK#v$ZW?+sJiTw9)#oK(e=GpGZ@f zaC}NgjdPd4^Xh^tt!blw%h{I~ay=v2?9|(`x_{*UJbbh>*-un=r>XX3Z0Gc& z{ZZc8R0F0JW+im(6XjQRzCE`0*~{W9wO{wV+j#mY_sEVD*I#@UJ9bg>((dPt?{>WK zluLHtf30@qrs>vp)Dqt|Q1bdfx5+*Ot>q`b$ZhnGFZcA@dS}U^n$JITX?pPdW#8q` zr~+}G+v1Kh9_kmfxibqSX32i7p}fIs-if0JU6)S_JUpZO&*3{Me9yDlmNjGUh6ODW z&tbx~Csv+)(AR&&e<0+2(XGp|H%n8N#q4}ye0ys7>YlN(3#X?p_BxvCz3bzM#0gb@ zQ1njNlvIBD?hh`KCxXfC44OgrdMl?NF|Lj87(@-u0Wq51#UTe*mBk&H?f)eA@NIou zQgLQX-+<}%-x948j0D#uJ(sfU8##s0hKakJGRyFB;2 zbX5ACj?#thh3KS;5ldfr1Yjv`Q*?*s-Xaw#Cu^zr9dkN^OS@`gmDe_0%o*L8dE!Ce zkvW^+hfO$GU#zbE_|mD1f7~yAzAWv2Q_QZ|=E^J6derS_i+3GuD3|&z_{YVQS9vGh z(&THWdS4Q{WN#&(5Asjt;4C^<*yaPHR%qEd0swo~qwa$U@^2JPi{StO literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/decimal/ebin/Elixir.JSON.Encoder.Decimal.beam b/phoenix/_build/dev/lib/decimal/ebin/Elixir.JSON.Encoder.Decimal.beam new file mode 100644 index 0000000000000000000000000000000000000000..7454c5a34d2c85bb3ab5d24093cdc2080c094ce6 GIT binary patch literal 2624 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 IX97X~3&sanMgRZ+ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/decimal/ebin/decimal.app b/phoenix/_build/dev/lib/decimal/ebin/decimal.app new file mode 100644 index 0000000..aae043c --- /dev/null +++ b/phoenix/_build/dev/lib/decimal/ebin/decimal.app @@ -0,0 +1,11 @@ +{application,decimal, + [{modules,['Elixir.Decimal','Elixir.Decimal.Context', + 'Elixir.Decimal.Error','Elixir.Decimal.Macros', + 'Elixir.Inspect.Decimal', + 'Elixir.JSON.Encoder.Decimal', + 'Elixir.String.Chars.Decimal']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir]}, + {description,"Arbitrary precision decimal arithmetic."}, + {registered,[]}, + {vsn,"2.3.0"}]}. diff --git a/phoenix/_build/dev/lib/dns_cluster/.mix/compile.elixir b/phoenix/_build/dev/lib/dns_cluster/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..8272ccd3a5ecf5f3b16338074627887cf961ed31 GIT binary patch literal 4404 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/dns_cluster/.mix/compile.elixir_scm b/phoenix/_build/dev/lib/dns_cluster/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 ucmZq9U`}MrV9I4+U|=)UGqlh%$!1_OvMA?s&B?6DEYkBxtg%aaS&Ll>G5dji*eZ07GN~DMF!7L=_4A$`YKo zi2?AM3#!%6$vB~L?NH({AfP{5uu8>5^$GRh;>4h0{J#N zH?Pe9kUPX;pC-{EHk$_CJa!-fkXUvg42YZ^$N(ghO$6^8Hi-^&!WaaoL>ty;LbdrY zk@gaXnpj6jdIUJ1p##J0Ko(tx!SK9F;*jV}&#TOGCe!UIlT9bl2z01zAql#Z&mz)v zjbZ2otCti8vmgqb&ju1x7@`;fGdeJvO{8lv^yvhMLL2X5Koq(j%wW^WcrTgB4rJ5W zBv-bsIf=sNfq};3dcfFZJqC--B(v$p8dX=e@q{*4qs@y2woLMQz@a6uZ_3uS0zt?j zidlXvkTF2-6nA|y(mcAp8R)duH`le%H-{+Z`Y;3c?@uC<^5r^kCYwzE$rL8*FmmSV zTavs07``L|9gMRC<7Vnl)wR>NfG8HeB$&QS-;y4yYwkHwrnZ+#mQfdGDjD15Plq;i~Q1cW&Hei!9 zzO;aK?LYEo zkO|_&@y?NGyiyHDIb(?^ssww2Ba#Zrx-%%@h)kU34C+46mSKF+_@?G85eq+UJ0WRF ze!>JXh_`$#4}54vX@ysp_MqJ!aQ%Dfo+)+4{h3gIbFF@JPM72NrPJ8!rOS4i3|pTn zrhZxGINR;FV|Vp z!q6&Tzrmx3&YQ$Hr`^mqUVa8!ls~d{@pJ7ix?p$r%-64+CYyhFJ^G|@W*6*!%=XKd z(-+lwR~BA`GTcYG^vbhFEyVE0%2m_%v0Kv(2wzndOaD>v@#W{A#(lH1PV1?xk$PBa z;Pqlwy;X4WMJ+2lJE|>?#Gcft6W^FT=S1!0WltzgU45w>58gMX zuaNcUtCJuvGi2;Qr7I>etvV}=&sgdQQ_h_bYEAxnps}XPf|uhfLgPeJ(w*R>X+Is^U< zfen{dFJ&z>lIpk$XVeofQ@af^PB2FgV0nS*Ou|98NGxi-Y_PIED z1t*ezxP5LF3F90LoB2LzB`Orr1m{wJ?XA8PdE#`X`gyR)-ym!pfV=ab(ndZv0b zzfN^cSrVYmj)X}J zyE1%?JYN)@cUzYVFVFJ1^|E6S9gca`Ng6PgJSe=%F*qb0zB?mQbp1fyKL#>x*dtfh zrGJ<5@H>lnAH{obr!qula`a?-f`251ShOyk2Y1RmrS- z#n02~HX5!(HV(7~wC{*cX&4ASb=ltjUDm5~jz7A(w4NK9K-@_#u6=%gNu}-b+ZDnB z)grUXH6f{cH{BF%U*G1kp}=+ELHvdHY3nMt2S)cS?s&U)+vUvNhDUx`R3dM@Q!tnR zaMF2d?j%yP$ludL8PxV<=+3#m>)x*o@5i_r68umR1`6~MyjGEprxoT!gofW|!J!ca zyDJM9??3t4tU|`jf)|kc#hmtz;*PMMl-iN}b4YQ$V{ub^{f zhSqkU!0GBMl3d#c`BChu_Qitaa39lL%+}O_v|w3TW_8EOgVnpbULZ?JTk0G-BDZj; zrqv79>{Z@53R2>aXv6*hLk!EmSN?c}6UdT#7<1 z3xdz}icd7fY`xIJ(_7U(e5SDD!9S-jwY|Zps7))L+4Uyn*KHMZuMMg?-@0DOYL9%| zuupw&8op@;4{!P9I3fB!sj&-U(jLrZ3c6Z_B zdsd^^H=h3Q3|Giq+`z8rpT$h<&*wu_C?jE8ReDhW7OkAWiyJ#X2 zXnt}W8CM};;shYq0{1d-g~CTA5;bJPLL7dn5R24gaF3HFeO9P3{Fjr>|JV4R4oQD+ z`hSG?pJUbEkH)hmelEe!$v*E2Kl+7$a~B|U06sqW`Bn!2qEVfw&Qw?G7gTrZ9I7XQ Y_TOg+LKHZf0bTt3i=Sm7!!ZKk-^yrwlK=n! literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/dns_cluster/ebin/Elixir.DNSCluster.beam b/phoenix/_build/dev/lib/dns_cluster/ebin/Elixir.DNSCluster.beam new file mode 100644 index 0000000000000000000000000000000000000000..a0c9b2d003a97e37dac88826bacc435a7a327405 GIT binary patch literal 17828 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/dns_cluster/ebin/dns_cluster.app b/phoenix/_build/dev/lib/dns_cluster/ebin/dns_cluster.app new file mode 100644 index 0000000..125caba --- /dev/null +++ b/phoenix/_build/dev/lib/dns_cluster/ebin/dns_cluster.app @@ -0,0 +1,7 @@ +{application,dns_cluster, + [{modules,['Elixir.DNSCluster','Elixir.DNSCluster.Resolver']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir,logger]}, + {description,"Simple DNS clustering for distributed Elixir nodes"}, + {registered,[]}, + {vsn,"0.2.0"}]}. diff --git a/phoenix/_build/dev/lib/ecto/.mix/compile.elixir b/phoenix/_build/dev/lib/ecto/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..7af59405281fcd2c45759ee41b83a358652029fb GIT binary patch literal 14720 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 bMEZX{%0nPd5p)jc1`wPc4A;gr2=>1Ki7^35 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Adapter.Schema.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Adapter.Schema.beam new file mode 100644 index 0000000000000000000000000000000000000000..9201f661acc0eadc4592bcf0dad2eddcb9184d57 GIT binary patch literal 3504 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 J*i;8We*$7AV3z;@ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Adapter.Transaction.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Adapter.Transaction.beam new file mode 100644 index 0000000000000000000000000000000000000000..797ead60d34391a5243222858c46dbd563ceb993 GIT binary patch literal 2268 zcmZ8j30M=?7M@8!1G0n!R1{n&A}$a%mCYJ95sd6^h$fR{NCuLbFf$<(Q4ot1pJEW9 zp!h@!`dk31`n6cMkAi5`%2T8Yf?|tW1wKSY(I>n+0j=%*zW?5H|9j54cV^Bxca}!R zxI+-9B`_plMF73h8-ieXWMrg=Gd)CwrD3FNh>Rv&1LTN?MoHH=62U1%Mq>n?B^G0N zA|V!+BQ#B7QZ0>A8X2M1U@Ej+j%r9$hR~?|B$}onNSYF>Pu$7R3^~>=7_P!_RPOTe%mQ~8&XiB=-yMTB2!etLISPhm04@O2Y5^t!jDxwQ z5R2!)g=hG&b0%?k9@;={3@TkoqS@$f?V*tG7r<`9dNv;x3VEQ95{5!xkO*0z*9h5s zz(&k~;H+_6b3UwRd<}5nazFN+NkUU@qp8&y_@qJik}#ADOqzk74g8SNGvz^WKV#12 z!W_dXOnE@E`pYSYXVBvVmcQ7X2Xm|qb89fSS!{02j-|;s=3&Cr8fLTuU;&r|So}kV zL(&X7UVt|O-~qq@R%0?4Aj>f@yeRwyHqSR1!k5QF8)ko2?8epLlGhS{8_94#hk$g zfIlYl13-`hdA4CE7`S4mQaH0KjB}xD_seSUn?89L^)Ml_;e%>@QW6vth9`p6)=wuJ zpNf(ch_Yme?c?eO9E=~0I*M^(q_f2dF{MFtxOglFNU??_WGF@HOcF^#4QLY8SpqFa z0BfiQ0fYr05G_rJF*TDWNx<(o3WT@}O@`JAR#IS3fgD3{BoRv##1e_L4p<2&B|*>_ zu5dw9QJfZNlmv=nX#$XSlmG?!Do|n4Q2`lET)}5A%@s`pFD+QAz`$owY>k2-E zFIQ@gD;}SJvgjuE=+^xD@`U%IhFdj#SazAZWFY!QL*wW*XwEOZ=0j19O%(3%2-n``Q#i3m$c;dUTU6%#xw)yM~ zeCVIm?~}sIJv^JENf!PFrKj)vF2y_7wk~DPv$L{0xpf{XIcNLo&Mdi z8*}y?pZXz}@m`H9T#GtW7W72yGxJrHY->~B+<)=4UQD#RaktHCPf3^+kOhVOkR{8#9NbDf`_fNW-R;$1^^HBE z|6XM3i28EQ4(f9EoDdERql8eNUuVb53$r)({p#6xT}oN97hR4~z?yNk|Zeie^HtW7y zZwtFv6>*2nb`C+(Zzkw!uf<7*=B8I!5NVj?vyq4GDtUR_bs@49>$-6K3m$!yzV*Je52h#jyF@ya-Z}i!ZR35gU zcs}w$5xsH#pNE=QK_zy_wl|%M-}~>%uUyvk-`?ib;o<*d{P}2I^1ax;?$W(E#@*U5 zyUhdnQJ8x1o=S7E2wh@`S)Ta+77Mx#O6@Gl#yNlHubk+Gi zR8AlHW}~202|G-lggX{B=zMo{1x24@?Vc+-5Rw*@42ojZR#45XP{VJ8Sf)f}$tWpK zb*Gu4s~bP|UtlP~N~X43{QVk6;88_3g(-AKIDw-{B5;QTW2U};Y~wx(abIbeHRcXt K1HhIe5cGeJXi?<= literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Adapter.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Adapter.beam new file mode 100644 index 0000000000000000000000000000000000000000..ad42a4ce39750515b34788b7d23ae5db259f7881 GIT binary patch literal 4460 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Application.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Application.beam new file mode 100644 index 0000000000000000000000000000000000000000..2328d4b752cace74676e88dd6faf79b7fdf9a7f3 GIT binary patch literal 2500 zcmaJ@2~-qU7Om=LvsrAKO-C}e5JgbBn;t+ElheQ;Vq_I!h)Yv+S2xv5RZUg(0vQPh z28jk0*%U)q59%O^5FByCF@u8(Sx}4%f??vY7!w3hOk$Mz)ilvL$C-c5`~TH_%YVP> zz4vQPLUIrU%{dbp9T6A7q=rEd)IU8vec!<=T8Ei2N))YN2vGz{>M#YuU<95kmt(k! zkjrZkhM}+w1B23}g3yzg4y{$9B!vP!RM~=>NrGZ%xn3DktTNyV)|O7!BMOS3B>+s< z6H0>)O{W>kpkO38rb|aD9fGUJ)hHvM5n6Uiq#1-_99*sOY%q{0WyENLs?BU4Zz2*wG5e9grQ&uY@=PA3iJ$=azdp z2&4s(1<8gCluFGrloZrQe-;8uWdGp0!7`Zu%!#rX2rTKc7(Q4?83)X{GOimC#tR|1 z*pBb)2G>^dIf92mxJ4Etbd$wMxRt_qAs;?hDd7ls0zTX$h^}SfD1tz7%GK5M68}<*QI~}3ONIE0mK2sp3~LJ&*E^j z*`hB4xGf;|{4gL^kLB4h7mxrDi?ep@GwaXMy0SQDJ;t#6HUnaZ4IuA)9hfB2X6XRZ0;G{T%j8Jls9Z%* zaivS4? z`1s$V;2LS1JqwKUq0_Ll^!cMd&1<|G6p>{=$5#V_nUjHLB1VibP!=tdz`Ey4<)Q&G zMaAMO;N>feUoNn-H=+~`>Ol)}SBfMoK#-RDVBOf5=HrB%CJ_@Zx7HOUCn-XK(zI!g ziX!v?rcl#dpv5vkhLQ*XTmXO=7($Ne+0tVJw4*_63RDXviBoB?r&x(0IHJN-;thm~ zF##(vokl2-aO?~ z&u7X1DpJ~!-L;v=ktu0G5wB+gsmU)Q zosFBnPTY6I*xAi}96_X=t%pG_Q_lS?j0EU`Snf2SVh}Fzi!p(kM0E9UE7;&)^&20J$9Td68Jkc z$EoWMWZR7mO&|UK&*4RX`~27Na^L2XuB@xKWAWD1wTH-`HjlX07=|;hm+om64MT1I zQD?S=baaGpy`9}I9f>SXy4|s_!hE72LKiyZ7#^1QaoZ_>?YyM7p4nV~@RtsKdeO;0 zcwcZ7m0k!_Irp_c6JLld3>^LE*3sCK4b=hsgc75#ecaVP-qW-CUrb8}6tNRkdQH;% z0S=p1|7&Z6@U2OvJIAl7eBerTdVsEMsB3p)ZdhqRS9=sMId|KQiYJ3E!#g#9tqMJa zXE)>hmnWN&)Z%t0`xfW>_zu^H7pwiu&l2p~_b#0Ja(soN@9>_}ThDd5glyqu1lacJ zY{%a1cb@ReeUd}B-tdXr(w%fFqBk>xyE-v?W0ApbZadMog|w-6EMIqKf5wPS+XyeL`i{rj*-uxT%pR^em%~lU6B|Ju6ABs>xhI>)@F8=R zzBn$vQ|44K+1nF|z<%jzuaAD<+cF3_w0_!O)LR+++8$N^s{ZQOJSg>t<`MP#Ux(6_ z+NQh1kDLlNr>oyv;F4A`Aem}*;ZGenf2pAL-G;l@{D(9j+QnDwUSy2DI5cLc+Vpqx zx3_+GvqU?zYDv_t1?27}HU7fFGv!033*3*kO&xsGXZzt}w)VU9*TO@V^An?^&R_qr zdc3UX@`6b9dyQ9O3PMW1|G^kA=yj$mC)eYkv~l@?h9mZ=O&9s|c!#@|cJ63zIQCt_ zo;^?a#)-P}O5eiOzkf_T=MDdOYdB5$usES7Qe+yHKn)f13w@VhSFV&fU!E#F>)rLX zKS%N1^PeBg&#D3=LZ;4OE%4!qh>tvLI1Vm?(Ir;ac9Zh5hfgo03Jc@$jrM Jz;mY|=s!k?gD(I8 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Association.BelongsTo.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Association.BelongsTo.beam new file mode 100644 index 0000000000000000000000000000000000000000..52cfc037a66de565e49fbfa3fcf0ef4f0cfe29ee GIT binary patch literal 17716 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 N0y}aL1tV|r{x5V5N!I`X literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Association.Has.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Association.Has.beam new file mode 100644 index 0000000000000000000000000000000000000000..b44d0c40d0992324d43a368ad2f6eb34cdf8c921 GIT binary patch literal 24444 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 nm0?+U9((|9IJeN~NSs8`7pIX+K8? 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 IpoahXKh|ez`v3p{ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Association.NotLoaded.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Association.NotLoaded.beam new file mode 100644 index 0000000000000000000000000000000000000000..089c2d9917d4012aaf53bf80056168fdcdbd1e86 GIT binary patch literal 3080 zcmai030M=?7M@91VgL;ZhJgAAq5>)*xUr~hKv_gYTo4y9gk&HSl9`y9knr4C6x)ha zsR#%PDgqW!1gTaxP zbC@WQ1(s-0ARjDh5e>{qB02{ML-`QA(Trtf2N&kDXzX?ft`G$ZfxOnRWxW%4LKb|R3W8}3!QGS{79VC9!eUypV21Ta>kPI*j}7D;Z>zy{9{_&7 zl?}&_4mtVJS@b+p4qa%=cLGisHY_2(h;GYgayX$ZA08}370Pp#5KWzh6*k5lrD+07B zfHlSIUn!azl#PJ^6rZw7(bTX2pnOn#T7VX#Vi?-LXHz@?4uD~plwt=$P!j0CQ{J<{ zx*}BxW;zKbn$BE?#7eYEQb)&7rOq@KMU*n#0I}FWh{a!4!gUy;`J&Pwu~;h6$WTn8 zM9D<4SOJ_m8~oGcG#&Hfk68kJwudQIZmJ5*tO!;XZJu*+<_5Hlw=m-JIlzlgr9v~& zeeS?`kB=AlubXTG=MndvQAw~4y^G%P5LqU2Tq=rEdQ>V|rwBQncMQDTP?VZ=U zQkX0Xiu6)Pmc6A14NagqIv%Wgw)NPA=R=Qb@{cd5?aSC!6txA5nw-qfzTR-+MNe;K z!Ih*?X+C#+efZ9n_V3bMUS$qR3n+%II$PS$C-`g|Z=X_~HrrzT&xNasJN$;%oDleS zbe-*dTr#EE+WbPb{pxGa*QfEMOpd^Vu=#zIr}x$sY$9x9x9mxj^OoA%BW73s6nROo zEctxsy*&YS*+1~^zcLxtGyMrVF{z$=xM)WzFTFNqtbD#pDr>he%f-cHH+dr!3b@)( z?mB$THtS?vao`z`QDH$dliM>h*cs!BVd>qZ1Go6In3qBuy`|PUIb$~7+{fdPv~RV+ z789l{8gN9tI8t)CIOk+a*GaGNjo!bOM*gSm)XgC`XP!D3IIVuP120uzI&fb3GndU7 z=1YHWT2_=*w|n;$AJ>8=m(3@gj-vWfKT%Dq|3oq@PX8z*C8IF=MPtX13y5I4z1N0E z`kD*TX@a1yJZyYUEvs5qQuN;@d6f5$XG?LRV7Se4g}JWY^hJ7W`Rl^F8KYlzcSM}) za=H~7l^fA;)HNfmXy2OZqD{M}hNg8d9ifH_ml)>#@v-lEr0? zQ!jSZaLe}{v}hUlkfSfiU(k!L+w~@V^qI%OzV%KKYWcXwg^jLpM1+cD|EYY`W){*= zp10k8vw&tH>oPx;7kFdUEiPJ-xT)4|gW9{fe%#Tm9Y^A|$%37;}nn=d>xchJH*(`k#kEJ7qXv$w8FL`5-TT<8 zucD&XS=HHQ2%zfG`?G&99>1t%IxZ!^AAJk;o2R|h=V#5GiE}(yZBzb`T6jPE?vBM= zU&Y>~%R6eV9Cw^-$-Q1x?U}bsHoJZLHx9Q}C)GFx>lsZ~(of{##}lt_FCjX#^YbS2 zO2$99`P*6~JbXXz(AaDix8Auu-I6(F`sjOqCZAed#W>p~lAm7T%n#T|bMx-q2d^?Ls%uLmJx5A+`4wr|UEy(SI5bXw)OeM@VJMPSU9<-Z6ghrMpz z#ICLzDYIR8C+tnl<>X>VUSOkl+pu%ah257Nu2v?``SHG7((%UU^rV{f7R7wg9cjcQ z**alL*`%nq>3fqN?tDG=M1bWSdvlWw@pn>jue&YC!M3VhXO`ULABbG^{hgnFy*)bk z>I3Bdz2*0dvRtwC*UuiW*hMz&onbrST5#Pvmtfy;c3MJ?z`+A&@MhWH=g0oBv**Zu zdb3LB)z#(cPwPM~o>VhWy#;8jPRlhYLaBJdb9a_BlUsS+m; z86`0J)QnNnL_*>!%8C{P<=)8q=YFL4tU<%Nzp_I$bc5z6UHVI!pLf!~kI-OQp#Tl! zv(&)GGk=vDLq3dRb6FxLQK3?u35jS_{W<%LsR#j&R**CB9{ex{0E+6nFnfRvWcxR5 TXMUoZI>!W{dNn+#4}$&&7t=de literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Association.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Association.beam new file mode 100644 index 0000000000000000000000000000000000000000..c7156f550cc058f3ce88805ef2a24cc074e91507 GIT binary patch literal 36684 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.CastError.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.CastError.beam new file mode 100644 index 0000000000000000000000000000000000000000..2f8d95732f7eb16297c1170bfadeed0b39d1881c GIT binary patch literal 4720 zcmb_gc~}!k7Vl1j34uV91OfsQ4i!-dC@LN}%_S-b$mM|=Lee3DTy_$YppFQNj*15k zDh@JSDtL_Ocr2d7j?ASXsHlssGKe^iBA)2L4s3M@j_W$Rf9&@6{kmS&d-dL{SCx9N zGczX6AA*>YknrHS!J5QC2!dY@3=A~W?80SIy_E0`7iyHgp#rrgoFJ4$HlHt5h?RVP zsX(J4q^VjBu2u<^a+Oqumx^!|feQs1TvUVWRZ2pm=F3GBw~Dn2p+>4ys8i$uA)!?J zfx#5HQlypPDQXR&6>3s&LMBk8Jxjwi{6U7%N-3W|$mjEGhP+W| zNX3}Opu*cs5|Ow;rzAuvVq7DXxW#4)WLjJ$$JJ^<8s21*2^I>$fFCdyD;CJqxSv8Q z8{$RcgaVhTqzbhP7iwtekYO?m3BXQ@SV_nQ8XC*QhzDU%r1^$Q1cZ94MoD@M`sBjM zCRM5s5C%ViOxDEbzjK(+$H2PrXSgxMe6V`HN}yKLP=yi@1g=o?30$t!;9O-!N~%DV zfg56RGW<2~MTf@r`6E6&e;*KLA3q;bTrN=29R8IlRmh|YTm%Hbw4u(>UV_O`s8WPO z5CwxE2n8UYV*n!o=rCFYQJC&1%$3oxU(5WIC5%J76si%<%)9fE7H2tUC8#@I#SCUmkN z=>iu;4?-Rs2yj_NP_!Qkw-s?IOu8)!KeNKnLmWRdwkL)JV00#{$dAh9Vu&XefM9ex zRuKle)g*1tDvG6Y{V;?*4Pmf27~PS9(uXrpmiXF~G$<0TGKKW)m5<2xf)^ zF_;vcZ-VLWST+Trdjv7qFpY(= z5tzo_Z61LkD5sR}NgvtHq}wBOrYGGlfQhkSnjN`Tx;=2izL>#5N*J8^K$HvI#aJK| zG>#RD0%u77sa(~U3xT1bsV24Zh zVMU|aFpWEm%W#KjZblWpK!tk{!wsf+82db6$TNuHfq?jBF9&d=Lx_HfB`@OumK>?90I@sU;~ij8~_Is?F3q902sgpV1$Ww1ufS^j{@yz z0CFy=-y49GAF>69>y17v0Ao~uu_ivLm!!#OIDkC>Ige~@O*HAFwTUMECTa4q1R(8^ z@|2lc1-Zr{KgXGPq_4(@s%Q2`Ni{$QR-1;*L0gzB18*}8cu{mz5iS;JWg49sc|+*T z#Zp`*(lP$!^7ud!0k_wXAk}o!{Ra^<^0xdBd~@TKnGU=O9dt}W(b507X#~&*eHipD z-d$}1vODC304CMg=gPqwjo2jGt^0Q1c)e_Chokt_EHEa_CH*k}V0osczh_hT@nrPQ zj?NeY+Wx^tauCSDs&PozSc= z{*nHc6PVES;^FxFj;q84e>t;c!^Ncqx4PfV__SMCa;_OG@l7f5Ss4}DdBpXnF&Fi@ zwKmf?4<)Ru8xKM+~lE)wooW_W4vUD>mO_061=nV&h2 zlx?f$cC$}W>KaSR5~e>aUiN5hU|yKCSK8xkUeajqFpu4?>M2+o;%@zQKx$OV=@n2$ zY3j)h4zXv8d{PP?o*b$6ZKW;ZPoEZYaK2XLw@p+_rywyuQ5L*$ZANEcJ~E zZDfAZkQCe263$E7-JFq6cd)CmeQ|x?6LS^a-~YFsR}lj)(CIw-UAoP8-sK6u&y0|V z7hS#BGGA9)Iz#H@){GVXvd6APa>Dk0=j-7-i&3{Lqr6_uKd?fY{?mG|7;Uuos`Q1` zrK=7oE3)eshBV)rTN^3j2AyO+DnTDtC3_y3)Uc=cZU1y}U2QijK5)b3(Q|WGwUk~f zxOFz~lvPi0Rhj>S$in14dBu{uUefbhH}N{W%xuH>+y4GTjQ0g=bY8?t!9T_y?a&+- zu8QA2!&knm|IYaKye`ZBhD@4E?h%h}jrIA>y;p}R*X57xJvH(9Y^i8#)1hf=j0+SYHnq zwKMU?>Kmu>z5S0*66Y#5_UG93_S%$8df1XIJRlQ0!rD2KMU#?CtcI63mxx?XjV@BJ zU$mX5OoGF95*GujzRh`}I+UANw>=^zv+l@9-{t3PZ9cQ<-c$5f!(+o1*H2b1+O@0H zfhR4$vBxDm^OW(sQC*9|DK_l5THS5Ni^eY9AuVy^Nxe<=J`)3q&5A^ma z-p-vC(0e$o=-Aec9*>_n^5^%}2Ho!)b;2cXal}1d^FG~~fMqTNKGplGtmVJbPu96952k1x9JyWb9o?3mS1 zHm+(!pmiy=P@R16(uk^S>STWH-JhSj9~hZ3zbvWnMpd!cE#aD9rAtLu;)F8Gualy` z*IIKLv(8yX{Ioo+Yw67SIZ2Ht?k~}9yP^686Lp{ZYWn$@2)Wbm^VK1j@7<`Ja{B4) z&>yJMPeM8Z5)XPY9oHq?x?f>iJF~;7V6IDZ+__`!nlbq~yY|*JP0q`|DGYk#R>wT- zUg2$R*|OuHPSm$%(~)(R>HSabwcEp;yMMp)w%x}@>KY=?d0~_5$n*7@Q?qpB>d_Ys z{^{o@oIZ4N^Fsdx$!O=9!_=4e`TLJ$tuus=unSyR-!taZJ56`eC*5xN<@M{cJ16a# zs(A2v)vw65(Qsr^;4uCL;k=1|EflQ2*~S@ge0x2A^Z;~{bFu>pQwl+i0H=`mDdnEN zxNzR3=x_bdsH<0xKX7ZaB!bx%>CYKnI_~=$^iy-H+S2w#@wA^vaoNYBaNmd@`?G1yHn;N-TVqp%QP;>982G3MdFc+6PQvUQ9(k)4an*gk^5$!67w zmG(ytQWdfWc5-*i!-%sF^L`77vpKVDhvPxcb+Mz_dAIg$PIg}Na>F}&m)K5|EEr2K zfiE4q+o4%jm^td&I^XpP8GG;Djhx(;d*%DPEW`Do8K4|s=7J1q zYx*7&N^oHYPVh7R$?^o&QB7a7#*8c>3xW4)69F_Rgs7!yfMX6mkHPmGIZr}KH?hD6 z+29DG8zz(~)wqacn7^xE2F1(-8l{|6p;dr-z%&)qcIluXGL>ww?$3n=Yo7n6>OIf@ zT=e7RR{95Z+Mmxi)~@N``L|%fre%F3SjGqqvZ*42LLiq4!NPGuZi?augGSZw*PZ{n zW|M~hwp)W<4Q`5wHr1O(ci%r8gBm}!XaC<2|50%N?@=%X9Tas@;4cGkPA3BlJ>+)} n`ON||Eeb3?wHnGh63E4o$@ z#VRPuYqdob6bdT+u)0(PU0;j3ZK-udwAxnjfe+NxmEIeIx^Dfi_xpY`_nvd^dEM`x zbEnOU3quh8$|yzTUn1G~aR`Eb+|$!@ohwop^%;6PM4@4+5V=lGrV$V64{0$a(S+8bA@Ya}4Pl0g z%_f3j)Tu zB>{u1dCLc`XYd;@Lc@YVFu~GbC~i`lx!(WF)RRU%Noaup*w(k`%NW><$SExWa$Jre z2o3;8Ex-T(9*P$t9Kk>wl}yC)MO;Dnny58#mSlpCUuF4x%`Qdl7*r~YMlc~NlL^3A zDT~IzFG&_H0Y9^h1HLO|m=G{yB?y}5g!3h6Ss~65Tu0CvS+o@J8*NJ*ZN)#7LKh@B zUWo*X5Wp1{BC%2&y#^(C9yt173?IjECH@5_lJEqW0^?v#_!E?ie|Qt?vm!yc9yWOa zj&cP>d?8lC7tY6UxI-ut0)t$k8;;8`2N@tZOQfZIPfWrSMPWE5zya42mm$D_l;_P8 zIB;UQUxD4g`IZ62aQLevDg+EZyKZ5U%aszDZ{=kqVf**h($Q+iQ z3lC|!$qfH708RjI0DJ%rfI9#@OCXI10XzX9{R03m`y9%P0Z@Rxy{IC?rZWN1oB@37 zd~f?4{A~LLb~^lf*yqq@Kl>c|0q1bI0zli)4riK$gg*P(*S?Sj0PWa@^R+EcWArSL zL80GpH~`GeHi9pQg&(W4mPk=sjI7lG+*88pn4%|)S}R|rdVTj)s&^zYQg7@Nbhcki z15hTn>2=U?th_fDN{zg;M#0+UwQ@CF_9;=LP>ol%34HNI%JoY}IER#mOgbHrvnR3& z&|D(}}@kq!Tm)N?sa*jSrDR0%a?K3{>G@6@${onAKKNWv|J!%1l!lP#&!=DKupQ zWSX$L11UHGJOUO%Yd=6xTUbh^H^H(EopWMoT>+DU68E= zXIYt1bTeV*rb|+s+-a;#U*Hh6YLxTFpA0>S=-|+hk97asyfelp(|=-Zal?pfKYTT1 z!{YwS2L=ChmqgYjUTz!JKIvH3iAyKyL>^}!DP)R~**Eixkv${!ag>v~I=^1JFtISP z`su~k&%)N9XRsYNqNa%3y8HySUxd%^{?0NW;%MTUJaLd?UDMoY5wqV%y-=@xxH(wVNNY0L&If&b^Ly`BJ zSaNm4r6tcXL(@{;h>4LdjswE*u*?!y$3Zctim9S;Z13+J;Xk^490Opeyl_YX!5cdOcPw1R#m z-in-`as1`L^U=e;9$3+IAi`Tc)u(iNwaeDP&ySa`eKutI_oJHx?zxZmSR&&ys@Q{R zk9-ebUMF@HYZE?=+LqtgI{)OEmfgQ-Qp~(jiTgyw<~Z@VvpN3B*)oTT}kM%WrrdDH-FkD!fh7W>~ms?{~uWndT#(1THQ6gHpWdy#r|9tCwZNZwUkEIB#}k>*Fj1^|^jt z5uV(iMs4YguBfiAdOk$g62B~e!tP&V^S1uA!Yzo%6!~uJ*t6R-tz>BO-{>7(w{s_4 z_AgJ*soa-Hx1aM|IPX@)_^~fbCtv%>@AT-V%~SFUFC;Yb_`VIR%U%UsyPLJV+tp=P z5-d$F~+;m*TX0bjGYB!YpSSi1= zU0F6@jyN-{aA?h`qR}lQil-#yT&|nu^RImxj_=95%%-42&;1^_-ub@mN!7YZTQoaT zKR%aPSfIcC&A;i=a{P&F;P_pNjXuE{o}*ocIO!9`{g!jOn>%j3a<8{eUs+W;=vO~s zTJG}9P+d?y-f=+Q6F{69cD3jDrnL{Nk2O`+9u4>`v8d#c`@`W!_AQ#cbyDSp@uwD# zdwOg8C&kZJ)aJOCRNnr(B14`AvgVr&Dxrt{{ix9qnlyq|rH8>jgIb;KZ(LjD)p3C2 zTTMod^a^2&J{52r!J`?xKjA(d$6#lH2V^e=vpQ*v6hmks1AEnEMZUFFI!Ex_F GWWNK@A$N=b literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Changeset.Relation.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Changeset.Relation.beam new file mode 100644 index 0000000000000000000000000000000000000000..a7bc29c34060ff62cf5f48b540a0a167e0a78f21 GIT binary patch literal 38940 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Changeset.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Changeset.beam new file mode 100644 index 0000000000000000000000000000000000000000..548123e0be9fd649fe194c835392d87b33d82272 GIT binary patch literal 169852 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�idZAq;;{n=wCdmYYn(eYlz-jcdQ*Wj2 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 TuXB>W5?57bd*aV^o9q7pH+U=; literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.ConstraintError.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.ConstraintError.beam new file mode 100644 index 0000000000000000000000000000000000000000..1ec67ee15cc7ea6f5501486e6f16c72c0833abb0 GIT binary patch literal 6164 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Embedded.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Embedded.beam new file mode 100644 index 0000000000000000000000000000000000000000..614ae725199db0f364f16811bfe1e24798c9edff GIT binary patch literal 22972 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.InvalidChangesetError.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.InvalidChangesetError.beam new file mode 100644 index 0000000000000000000000000000000000000000..fc264f0074d365d639e7a78851436b21490bbd28 GIT binary patch literal 6140 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 z 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 KA_Ad+K>r7Z+h+>^ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.MultiplePrimaryKeyError.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.MultiplePrimaryKeyError.beam new file mode 100644 index 0000000000000000000000000000000000000000..61e884aa910112f5d39550c06b330fac0b076da5 GIT binary patch literal 4860 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 F{0Aebgn)bkiWXN? ztYWN+R9p}Q6a;0dOKb5+0R=%tv1q{sacMtMssi7e5Y+m$-|0F13qIaA;J0l{X(@`C5_RjF+wTA~Ng_;1Di#o;I7}|=G{^vlwYW+wkYH+2-1y6HsVW5~Q%V(t5(5^2 zVyPll5F=H9DRP7|*=0WetwKJZ3;e>Aa*QB^vDh8 zaW%%q69h3raRQdi!^kj|zBdc1rQ5rCczC*jaJX^YNO8GPNwxVSQ>u_j6_^+ZfMFw@ zk(h(Q0k{|g`MLsu1OkxH2>><#4Muekh3ztgie|%3ryw+2eK&oS-ACV1~SEyV`%0vN}0*nDL1E2s{0FY~fRK)uWnfsxZ>pf{IHhg<1vQu-T~iN);{w^;tVgqQd2X ztirSwK#FVt9!Az@tvMhFHENtMm6Q7s>6{4x{1Raa5YJ-?0c?7Rr9y>JB9(Z2ic8d5 zFv^37!*Mm(9o(=)OriEr#^IPkn&bhtH^Kw#9k_=~8Z+E@n{vV(OCs|;KPFZR{PoM= zK@fdo(w^?9&+(fxEi2sW_U+AQ${u|MBPS>;?d%Se1m;xs9z4qvJecuueXzCd2Fs93 zn~pzz*?aJMTiWbJR~t@bPkMO5d>3C9dfzAK>A&XWvrO+L8Q04;Q@0qk*Ki0yS9XX| z_JvhCtH^JdD>ycDI7HFO3H4zaF)x1PjMLqq$JC5>+J5g!vSQ_mR9pX}>pQQ8(T`uU z*>$-40B>VU?hp2%^l6nP!q?7l#YZ`dLS|%9Gk&OAS(a4DJ$hk-Aj_HVmTJ9iX4HBA z3;uEEuQdsgFFcx~AlICYR{8O8Ti@z!2ZvzHyvNeL;Z}4A_4rp-UYWKz>EGLU*z#ul zxMyS1nzXur84IH&d5H&&i#xaJirMFFTO_jFbnkUvRNb@5yX5QdR-evTY8S!a(Ms;v zZC_6lg>bxrXEzH9OhUhP^V)LE^Ui)=!&ARCItsDNcYN}4_txceDppPkxG|lQu=Sb% zZ*rbY&p%cPG0K1G<98j`LfEMF1vxF zd1=@A+j*ta?j*H$Y;xazc2nTdRb=8DJ2hN38;~PvWBk6aF zp>W*aJSDVbeM)pBZ*g^Ga~<*OLiKi=LWX<9BHxc9+yyE2skOiDdu*3_ee71(;=243 z`&P%Ed6RguB)Gh2g*Kot-t9uiC-)r_tGYDvrc_@ol^JGjtJ*}v6tNmra zy|->BRhzWylJginP4vhOc~{cE>?!PS$@Z`9b-G=4tA^Rs^lH)P*H54Cef7xl*0PXx zLEGe^>iz}Fs{2zw>66ORoXYM4LRJ-(%N=PzqcA(V@25^u{K`k(eZUi$o|b7sZP z#F95x)y$J!MQwP2V`zb~>*T48FIya%j#(|8CVVrPIvD+|o@h@!{5tI(w_)L=?5{c8 zCy(o=1ht>tErWKXJ(=_H$Cfj&n(|OU))HJqfFfH&))FK-Y0r*@;W)z+?Fj$4PSms%?1XJ>ARdA^D96zhvYMg6rjMRl4W_ew#nSX)n z+3_tL9PR1qyxG@hdYo-(8}C7-&`M$RS(6jcBwf{n}--Elf`Dh_2q+<^19Z3qKeXh%m25XPs`T zIn>&JuJ+inPP8_ndvx;Mri~HZV_%d_D{EAruAd$fb8ddbn+tYJZn@CX>_Wy|PCoYU z%)av#MK2?hU#8lIS@Zk)PHpix^?O*<#)F>iZ>rn|bQ8ua=lpVphzzY->9Syj?CWb= z?k2aU&2D~mx70O6`1<;DsL8%Mwc_DmR+=Dso^+o4a&*)$zXsHHOunDV8geLlGrGo? z^*AsoAOU2{Bm?X;V-42^a5)hrU@Cs1C%MzZT2sU2NWZhiksIoJ+q@7O7D5PVEZ`V} z+ZMQXkmKSg@dg&SHw;q{t%*p66PTD}7`@&7hsBJ9YFtjL&?vyZY8VR6LGkaK`)kp^ zaomXi;L!5d%Je6-c(C{CFKT}+M;=?^!Si2HferruNmTTq7-pM_lNCa_R0K{>m`ZL4 z*9Szs>i5rT|6H>{!{1AbNsLqtB!%$*Jq?B^8KV8}y!y`rGNKtA8o_NAtW7U~k%zn+ m7y-caQAMMQN0p2!g{=SlKm~*rCo9SEV*tprD#c<5;{FGvlF6a~ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.NoPrimaryKeyValueError.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.NoPrimaryKeyValueError.beam new file mode 100644 index 0000000000000000000000000000000000000000..6018523d9c789f1e486a5a137338d1ddabcddb0b GIT binary patch literal 4272 zcmcIn30M=?7M@8$2$ATJpkWb+vZyE!REj%6iiiSI1XNU#kW648nZzsvN>wnT*17;y zD+q$PRu&P&N+(cmIA zCdX9*nNXyZtGIwDkjcdwDJoE@l^T&+fGVXzJi0d;RrC89dMkN+em|ejFBxzR*T@7) zRICx9X=s87RS=3>4NTyvR<0BaB&b>xGotZ5Rf(fg1%|5>C@=*yVtBM53d6zJxI(G4 zkqKQJ4VXHJ5srkO89x#{Z2a#DYkH-Yx zV4fcWegd8!2mBN~68I+b$SlAN;y`d36=B%Hd6@`_*#^NSJU=erpVT)IxDoN>5-xBM zqyVyKLx9W5go3yT+?vTDG3jOq+-r&;g=~bvD`jPJjX4}1nUcvfM!1KKAS9U#{G$(p zl1Wesoy|!mk?9utX0nNGmXRNijIfjGmUOE&Cf%A`N?{@_n1&Fh>DCBLGs|W$$vYX$ z1wf2Lw`TEJz%v>X*aJ3rfMCqwP-4i40HzJ=Cjln=Lm+4tdg@3HOtYNKuqICd;AAtbSTo6xJz-#n5sS=abLEjF&w7Z>f4UMkll2KEg71xR)&HcI`z+W zjzGY{R2&(mQh|BOQS>iD4wzw_cw!kskiSep$S(vi1~3I+0FVHN01$J748R0n0T6U^ zfS~{|z;FN?0D?~RjGoUMB@#vKo9yT4OOP5o)Ar zErnRGS|bUDO2t~nAC~ebl4Kl{4hR|>7WjV=q4uXE7MSzVTc*U2wDb=PS_pm8hC$op z{Z1kzngeEpFrj9cP6ob6LrrVa^eU&#?vG-dvsM>@?H7{h2uCQN_-`27M>e&8V~2ik zRI4AbVHo-butC*Zf}jAoC=@hD0}yk?5rD{r9e@J>kq=^yyw8m{*zG|(KpzPb7#cZV zg%kOJaRlm|T>k5~o+nOD{$d^b%j-0|SRxWpXpAr(lWUZEDJ?Rvfe&ojv9Uh>xCCgp z*q>J-T=A$<1@`keh&(oDOb6o2}GVhkBY{Czh1gv zun4y%WItFqS8nZzG}neZ-b~Dki7=1ZMLqxhy46c`mpyYy=J5LGKLr;oa>HCJI2HM+ zN4*NZ%aip*M4w%bl^?wt)M9?XH6#4l#d|w8`-C(#<`fDtce0#(e4E{FnNupoS;@ni z8UvroyVyssc1>5zk1dkaUS4JPD$kB_OKf7cbi&rym+jKH>0XtloWlYB-GfEtbBvDd zKRYia?3vva>x)qbJr4<=O&B^R8!I|uof^Q~fZrK++p1A=I4bl~TIx5sp)odBO1SAE z+b%qNR6@nr{(E?(wP)$fGDv+Kk#>0T(sh|<_U_0}U6UNKaG7??9LB_T?IDoX-g)nO z>T~T4?b>sl6H69hX9`WDqh=gmH&9GyAZw8q`Sr{S*E zx6_=oH4~2{hw3DE*HqTT)Hzs${E~!(2v6F`Rtj&nm4^B?(S8eFeR}+wn35vcZk|t3 zRMaI3ecFuSCeH)zL?7V!5Bjb-=RV_0M#QSt6P3Fk%M^on`?jyzK2ql%F7BQB#KUH9 zyZ^nK!EJfu+Z)dB9&xU#VbF+&#T5;&`E`5t?Ckm3BYnNYfhAbgs!98DGzD{tn-9_7 z7_XROx@ES=zvjusmwo~^ka?aMAG zmtVN-^J4Kb;~C;2)sw#J-o6%HM*GJ3R_wX7&(@u|x4=GkOJ>XGzBa#ZY$#Z=p=xhm zb?l2#=$8DKNhvo{9AW%<=amjDB`f$;J-T5+(Kdn2%MxjA>w{X-ua1LdjaK2}3*#i4 zbm`kEB)9Uo-%U%${FZr0^TM^OEyLgZ%@rfBy7CamM*L-%cfed-S3Lg_121-PDkF`n zHo4y8aC}NP7UmuKB+}omq2q@hNnKr(#I#NFwVhqrplfx_*P#l=&yl)@c!t;G*%#(t z6H0dNzgxy%QF-I4edOip%JQvY?D0MOUJaT0_UU>%^S7OsD}G$tGk4bSkF%L=zpOqo zxFPBKRVuqHYWMdN6K!tK!iGB$PIdM5TYNLKb(9>N8CK4n4_u}>M~wdYnoa(zOL;c} zaNdxD`!A?19*xa)svO12gU3Ql%c<%RzGLnh^MghfKW%z|C;jsKk+J0!OT#USPlums zNp)CqvFK^_H;1-6C7oEK?LBKvbT|!(vCx?J+jhc2duCRoZD~o!@0#>pqtfObuWBs{Z)?%?rjAwAJ}KA5I&d z=IitG-rTck*f?~XoA6EFiav2~t?E`)%Uds1Yxkt! zWv3}=k8RgjHCbFM^+;=z?;Q0cq0iIT>nRR>E*Gi52D^jUN61qXvbTOwi{IoTTe2qx z-I_T14Q%9Qbjv63zWrCu!4#7l1tn$+9(H;kTry{i+5NH%UDM_Qi<+RDKJ?t#b&tF2 z>N~OR&O21i{L`XIr?RNZzzm0;X@es_Yjs9-zu0HYN?7GILwl9CVNNo;c*0IAbMM_| zg4MF7lu>c3ucn{NwV5o2^EDIe7k@*)x@uushb%RA*!iyX2TMfc{1KAzW1D!)t$7cEV{%>NIqgJ&&?cG zRh%*QbxzaaPzsgqe1D_MSJ2vw^70i&o*5-gj68ZHf0wtjbWv1yQDH~?Z>Ms`xhd8~ z)V$d^gTCK4`YCPgqHTw@OS{WVGZu22zEvEZ$+|al=q5j=U;B}xujj8Q8Pm1&v7MKT zU;0_kq;f{v*y5G{O5Rq#NUP4#{$?M~0CFE#Dmo2ms7eG|UA!I@Cl+q-whG;RIM8GV%tUt70EGJ_%C1fMvN9jXqT zDrSb)f+z+R#i2@mygPBK!&+m*V@Q9B#Sn+*M@PC4>K7ubuxP+B0Q#SyFZ<`34I2Jl zTBuQ&8b}J^fi(0x`|%v;*Y{`n`#(ne!`<|s2gDG6aQO)Uk617_Jpcv@@eZH>z)X`L gO{z?eo1B1#{rTky2!$ppi2kMk#J!X>HOH-Aji{r~^~ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.NoResultsError.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.NoResultsError.beam new file mode 100644 index 0000000000000000000000000000000000000000..a59d8fb92c31f0a659617ab2e4212c18a4069656 GIT binary patch literal 4228 zcmc&%c~}$I7N1FgOahT1VG$4*0Z~yPxD;Hl0Yn4^0a>hD5|RM|$xNIi1Vm*o7DRBN z6=ij=B3eP~+Nvm8wXH(cK5(T^D^dkF+{?QYf?8kO?|uE}-S7L&+kzvB-CQ1L`sor z0U(N%q)e;8#cB6cm;mbAT|R}*O8P=oPcYjNkb8*Y#;4DdltBqDr+&}{wCGcZX)scHWKPaH2NBviUUqEK8AiQf7p5(zs?;KQiTnLQdc^AONNf3amaoKYB? z#4NKxcw_Pd@}sozI2DtlU7f!%XzzGfAPk0>d{`*tfoFs;7zHn}Fc3RSwbcs zFvBqjE;T{9L*bfol)>wO;61`%0pK6g4^j96>LZ|Cz)*B2F25WK7ohOXa*V;_ zSfFr^8H(1~phiLtk6$ieVHgV)lnYs?P{=eI&qbL+Bc>nM0!H*gEHnZ}EXpIkGKSDB zCUBl(2W2rJ_IQpxmc?LlhUmx0Sc~<>!9pf#Bjz}896NX%CngW&!w8Rdi{pgC2)}}B z$*kg9#sMLWhj12B40jBM{Bq4Tssv8C)_7k`c%!vS41$PKPfC;(K1~wS;nF1Tk zh4x|yD!_mpj5C}cj;dh9!35(v!HAj43lUu1uju*Fp|JAO25l7u%od=QiBmRO-^9?4Kk6#0TV-%Dtf*OfDK>y8?D<3fSyO&w=nc+zXlolw6AoZZl(aVJzAbIO-s;m4Ka+}Xc~Y$fWE;wcVlPD zH9!W&^aKbp2Jh%x1$Z(v^h3vz;RzCOO6rX09j`M^kmCxOj{Aqh-~&k}Ay*6tvJ6K= zGEf$%*K3r-&~e^vcnS2u7zShZ+ml8@4+oS;U|NlJt`a=a1rdddN3lGsJtv>_E86B? z2WXMGv?t6Dyfb+Io=x4~)Pc9gbaWU%orzv4G?SEqJV7I90{|ld=o}9PplNho>2-RW zV}DRZz<6eVE>BP7Vwq5`c#9^*Wh!Vp4HR4eCS+#GK$Mpb4bDZm4M$Mmk$?469WV9U(FlGD@VP zNGUk9b?gL+R01-E>&$@^-2ptDKD2d%070S!^+B$rYaQ*Ji5mDN#Z#aNuNXD3=_Qj( z2uXrG!D}{|pwWR@Ug{*0)PR!Vfv4hx#!Hn%;)FcS3zSZ^7uc1gmqH%j-+8;ZYEL|k zUeT%XiE`ktDmMaxcnN70x97|#u@6G``z^H3Xoz%1Mp&?1R!J4NOV7EFo}Ofmu;Iub zcJ&@;Zaq5oTDY#HeP`Z{V536Ik(tZyrDsg;TAF9<+PnAh_Ln>E?Yz<$_@kqTxN0<; zpY7VUE!E7TT@WM;s!a@jaqZ=ootlZd`|IpB{XE&b#%0L`Zbs_3g3|i(nQM>g)`!lT zKqu$7eXML!bYhGJvc(zM-tc~99v#x#N;e4fEezC)*JVv$M9970T#P}!k z&dChoRWxGTd$+qWh1ItGq>tz3D$~Zq0#jtfp`=&OO@8w~hRyxiB_MQ3fZggUapX|n z75*uQrjFGmi6OSpsT?)Yy=ff3CgfC`ztDx-D_GhTb*0kf&7P9qtc7SKJlRn3wAFWa?ag~N$l)IGatry9ZIx~j zIny~_&o)=2rnmCU{Tf>gWA6%`41JM`W4sti3_@>%o_EhMN)9yd6&*=ixXp&vL_pqxtW)v&1a;V zFC13$gKl){yi0?|6z$8~*Oa;8csuLqxYr$K2M0A)4-ScHcpbmIn-l8k{qz&!9#P(+ z9(C!&AckPs^GlAV=AnZ;U5?g2#iwOE9Cbf&OU_uY_;zRKiqIJg>%N%uXxAgwu#QNOs)TpkcE(a%@xuTn;tSw^yJLhknY03_L!g*b{{n^bYS2fE_ z?AM+OnOK{^gD)jG8_$exi{W2ouh}w=f2+#dJLIzojwKg!k5{nQ$HZln7NoP|uE$c{ zU!OT+t0=eZe$073Zg-ZAJgv1ma7UwqcYn)R*ere024>`bs`un{lIC=Cxn^#MZ+< zi>e-9{8K8`Vs6?J#A}CRr*^~@-RCKHQ$(WWgGlAm$v+Cbj(JX(dcYZ7TSC)fe$PG- zKYwKBtnm7?63<_qeRF%mkFxDk?DoZWhV6+z)OP$4k#)+xIL+AkFj;^0mm8f)*9Co- zDtdk+6Sr!JjIF9==Zc#TI;6b*ca7Wee6rW_sBus`r0jhV=8ZT%)hYipp~in zon7Yk!}Gf~E?DJ%^{UCRMcHpAt%wP}RI=H$?3b9enT6(Gm)dKqeXN&eO#0SQ7B*Jl z_~iHMDXNUqUpy=f5?=LZr%bJtG+h=J-XN!tSANZeZBp8IOeLjia3BZL=MH06T18pp zci~L}G_0+q5x3|#=7g0o_dQ=e--5Ad<F@XkpeKF80|G zbTzVWSHu`yTyv`>zcfm@?Ku>S-g!Ws{z;r}ab&f5ZX4<*3~-NnR3FtPbn%`)a+It$ z&m(k3a(zVMNfH+DJ{(l))ViTK>L`QE2(uGuwCgL|?! zB#em64Z1U}YN~lyXi#n3v57Y{54u%-=&RCGMT-Ml*Iqt3chs8~Wrw|OR=h~wz<=HL zHFDzVXPjFHt%#K!=@+L|+4}iiWd+P}3N!CHGUi_)t#A642CnV%E^!}cGG=n-mxn8< zWp^KT$G3UnYZ5Ql07(h_f6L^%tKdHm_JcGgLo>lICHRhf00tU;pQi7^FpqtP geU^QWeS!TwWc}w?7$`bjMb9?_pznqZ^FB!UA2$t=xBvhE literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.ParameterizedType.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.ParameterizedType.beam new file mode 100644 index 0000000000000000000000000000000000000000..66dcf5a42378e50a135a0a5cf13862892b5be6e9 GIT binary patch literal 9288 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 W{`)%z5cUNi5FhbtKfWahH&9go literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.API.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.API.beam new file mode 100644 index 0000000000000000000000000000000000000000..1889698608b0dd2b11bddbcf6353b0d012972ab4 GIT binary patch literal 21436 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.BooleanExpr.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.BooleanExpr.beam new file mode 100644 index 0000000000000000000000000000000000000000..e4cb08766c8133904cc5a97baed9b2a9bf28c490 GIT binary patch literal 3004 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 HgCPF{Vw&n? literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.CTE.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.CTE.beam new file mode 100644 index 0000000000000000000000000000000000000000..cd63a94f9121328eb12e8a7b4128f005e32b6715 GIT binary patch literal 14012 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Combination.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Combination.beam new file mode 100644 index 0000000000000000000000000000000000000000..36d101623afd6813449bc5a7f25385d9967cea4d GIT binary patch literal 5136 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 YoAQsEtcBT9Os5e5tY0RWe!#K+14b%MMgRZ+ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Distinct.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Distinct.beam new file mode 100644 index 0000000000000000000000000000000000000000..3fc00f547fe1ea338477958faf7adfb6a7a71b4a GIT binary patch literal 8612 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 UhkZjaU=$5GR{bFGu`u%cKWa%ulK=n! literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Filter.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Filter.beam new file mode 100644 index 0000000000000000000000000000000000000000..c9c396553b653681ee15fa93fe751d17a6eaa41b GIT binary patch literal 18620 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 V6Xl!8LG+LTfSietnEVX|{}*h&u0#L; literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Join.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Join.beam new file mode 100644 index 0000000000000000000000000000000000000000..cdaf2f5ccd9e01b90208b2197130ea8a152dae10 GIT binary patch literal 30216 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 Z2v+~OBql_sOL3Wc0PuSdEyGa)`(I_R^Em(j literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.OrderBy.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.OrderBy.beam new file mode 100644 index 0000000000000000000000000000000000000000..039f9ce3d042a9c244eb039745a024b82ff75860 GIT binary patch literal 20808 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Preload.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Preload.beam new file mode 100644 index 0000000000000000000000000000000000000000..52480152538aa3c185087977d56a2738c2762e49 GIT binary patch literal 16848 zcmdse2{@GP+c(BCgQ;QcOAUkU#+F@U3!#)XVhjdjn`y=xB2s9xm8NW!7E+c%ibTp% zS&|Z^g^DbdXhHd|dyJl*f6xDY|KEEY?{R#`H^*_#eck7MUFZ2bm+QRezUI0&ZrP^E z#%9)TZe`|R7U81L#s*urw6t^sE@Kr+jv>?3t^6V=>RTg8v{-fXNOGt@iKgyIBZX3k z{z(J^IXr+uAQTfLB4}ja$Osah>PHEql0!+w{v;}mBs=ERGl&3KwE^G@}JZhLOS} ztY|a}Et3@EN1{UZI+CFCTdYnFknNd3|FRr7n#FfwidDA=BGTw^aTfE>008#@VKS90 z+##e`8OH!(D4hfsVzHQZ5hyeQ@VAVkFBCVF_bn1LqQGcM1n5c+0=OyBgeYPt*&hT7 z*dOtdME4_7Nd#b+KQORz1wwda81Q-&iAE#iA6T!~<#w5FR|_q?OE(sr)Ue;3&1_ej2)Jz*}lKHHgD>!(SXBHF9_;Ih^FL zwvzK2nrdto6n_#M8b6K<63rz! zGCTFORkbcV4&MSpv*YoC;M);z%?1uWcxx0mQ1Kk#I|&a%gNvInZ0wobD5N)gF$2XR zID=!a%)bLGyyFH#iTd!OoOlH+cm=gp?r8I(`EfpY3r;*%2oICPJHZ$j9t;Z4iNy<{ z@i3t@6b6rl0nSM-AutrrD*)p~aSCG4?6>$aI6RgUj}~I!ct9`a2rgU=hP{V@=Mdx- z#jw9La)V)z&?vDvUhz5hk9b}Q01=MjXT#vpFoq)!3RlI&hDw3~TY06~k~r89GQ4Xr zNgOcVwajz43_^?H!-K-ZQI2fvZ~+Dtl8j@A3o=CuL86gpUU4Llie^a{0>H{eQA~?~ zk|Z9K4<5#;ixd{Z3&Bi~BJ6Ns&;UJzcu-V!xX22EHGf0Exq`q6f#O|*{})J^a8we8 z9WKf!26z-v>~JxDHWVicxs?e^0>Dy2ink!e+2P`XYyg`CgpJvfWK@D7%3!cmK2jQ1 zh?Isxg5ed!svxDYyemdX(~)an0xXNx(2;9lGOUxe{J_~T;CC3~7VuvwC+s&bF53Y2 zLx?lo_{)fR&A;1_h=@!>u`zmnc^1QX31F$<+2JxpNLeh7SJfPgvCv1#T9{clS?GWx zKX9WHC*vazDwC-*6P1Lrf^opCIAO37m?+K~!vPaS0b6DHad@WxwT19lIlMNO0Y~xR ziVcuhm?0pHIgE|d9EL*U<)9$QG2jB67^FPlq5)S9vI{QAgQ_f*1BO+i@XJc%U|75$ z8ZV@c=Y+xWw?GC!Vr^jTa3BB;plbt<$^+LhHFId=Ik0%N1)f(N&43GWIwBPfkP1M( z0#iMti0MGMFr*0bU?mEN0#;x+mu*l0qafky7;q6txFb7U5r4K0d6Ta;i$F<9+VG=M0&8P~%OS1v-Tz#yN(Flc?G3fc^9 zfz|;>l%u1S#c$$NKo&9JVjyEzl5%-kz%c@UpBA%-D-5_eNJ2JtxGDoK0Wj)<*r^#H zwSkq|Oe-ybl}-joEhl3)Cmd2s6pumTa7cA_xVpI$o1eK8hOUCt@Z(k0M{3Z`=qWim zNR1o=q$<`Bse#4tV>0n6%qe66;vorATMxwBTnGe72!&URw^2)xrCLc);)$ARJPhIHVw$fp|_(U2qJzG$j0A3JwFlh6nQ! zMCET9IhG@|5&<-fsTT*C1MKuO1cdtq!rTu-X997gLMWU-ChFj^mgatJoRBgWn6)f0 zAZ>&gaLfu6m=InE%}gaMFkc2>F_!}wt7CzO=|HIk5)2676@&VK1e9IQFdg7~9j5Q) zfbYRTER*BuY@ua$%L(E@SFL4BwLz?K(9FayPd6xB^2=s`=>qTy{f1W$4eB`quCNSO7r@np z;G#e>>ViqZ2F9*qLH;e$oDkUGBdxuxS`~{i$FfrZHrQ@HaD1O>~J064`}Y_ z0!7eqJp--?@>3sFNj)4=AG!hP7a)S2obH^7j8O>Zb6E~2ntiepQ_MAx=pz}0wgJqAcT@FboY z_`gbvI&kDam6i=m8#I0^+W$Pq6(1w;3^=&8vhIE0L=$qS83V2bKpO&s%nOlbf89OI zu)Idg_l8m!m}c5Mn2!cX3xLc5<^#pH2sCiKrpw{B06;M?eZVpUvDE=bHKYX^BsH^y zTYxGH-5=mOf55a6K}i42)i&CQKn7g*7fwqCd_BOo0hA*v1LQ_+LqMP+Y=mm3xi+XD z+9>Q_`2@VY(E#ZHP&zRE$0}OZV3;*D%-V?`nH4a73N80)oB5mFLm^axJ6{KwnuaN=L5-70M#_;&|L}`Wx$DfgLg&)&p>IwfE$9lmN{Ms3-Msitkl9n zMF9&sfMQ|1_*{FQ!gm87JqqS3mS?S@We{RUG@S@h*@#%|5X8O+3A)m zPG?%TQoF4n?}JRWl4F%^PNootW$2bn=oS!kP&>Jqx$oxeY3u+nB|}`p;Q;0-^S|SqXkIFyJ=7CZ!VtZVN=2fuiC3TaDNRFd6}Sp{j)i zp#VSMfif59A%xeQjUDa^JxQS8fakW%11)zvY~=w1z8w@m(A5IWb&pbQY$;ls8;`VN zhkJq_K7elt_&dPQAiz{(hkG$aSOF2KI4X$^Zr+0jhvJ=7X>*Xsj$eV8Fv3c!CEHw-`z|2?K^lL{l(C)>AuO z72*&vtVdEzL=Z6oLjo!z!2>cK69IZ+=wNIpX$6uG<`?$ABLjM9Bsv|~t^Nz`vTiyC zpd&_5!XR9sWO@XK62LsCFDnQ3L{n(~%a@quhf!$2Wh=%J=@D%WrGx_fKpS&h7%>#MEsW&P^c;xMN_P++aK>~QP z!6Fp2217T*_<5;f{FHo_9sj4rz(G)&tb`+w5&^`p*@jU;KC|@z5};I9J2!Dz} z13Vz8&sIPNfFQmRAZ=C~vO@(BgaxvBH6REJA0VhNG?rsyWH=-X!U^##0YUwD0D?Xo zT$vtcz|jH_#PK-V2oLcuq85Jxl@b1jMpgPP1mE+Qvraxbsm z5ILA_<{A*Q%?Ygm5!nG3&PpyBB1bR~C6W>bzEN%4cV{Ie1>8HaB+vL7b+QBSh$%s^ zXm<5rNFfJk@(~DNwTwt7(Fp{I2MOb1a-zAID{#!7oY9=nqFprCR%m%KnuoP+8qMRl zJcWb*0syJ^`d?DQv=>rfPw|8NUknJ!1uH<1f4u?y9*f`ozX4o>d=2$A1O&y+91s)- zE zW5yS9Ei8&2&UAA)iftc_%}>UG4>2RZ?MH$$Uv+RWn}uz70O&u!><=XY541uFDsBiH z%s?FnF(}N{S2`qwGg>?xthiE%(cuKvDm9HjrBVDqm5xRP&?sSmO(R9G2ECvLxJH6* zQ_-scgBS@`Ysq2ILUu5a%T1?5()>svY@QmR1k>mm{$ye}F@PMP;Y10Dhz6rH=s^?; zbemBF%ckKG8q^>PDV!Xm0oKLo8sG**(Fi5`E;pD3SA&_qB$@^*HPuNm!Ir*(WKdeT zQXJXXt~tl#zbW{BMAAB{ZU5ID*H_z}xh-{wbVQZBF`KkqqGP`*BIMFYYJ)dycp#)~ zf1i*oeIVjW>0=B+Fm&dM$b!Y;A}QEJQTC!XqLQ7)#$LT(!665)LeCuFr$ z$i0fFU9dPK#n&TqtJ`XgykETEZgH`1qCD|sgz*d7)ZES|I~#^S_F64enan=6_G(-6 zrLdgx^vtL0(zy+$V_|ofz8lB4&Ic@}&23#w(_Kj4uoiwJYG`Ki(#ju>pu5^s#U8*J^&Br z@i?^mn^&o)OL{J>@yY3E{-rX`7kbHqhf>~oXv@_$t!>s>N4Iwqvn{vJ1U7T-AT4PsYUhmA~_o_7+C!e)(5j~;DZU*3D` zbKXDh4{xvCw3o4@K)mg8)JEyT7J0?$mvaIh_R2ZMr(!R6tlg<|*~&+8`j&+0jAY}^ zdo%e{H+eP7`^iDkTwgqs9>}X@J3U-|e(S^42>CfPv-@3%M(1-+OkF=bbbjxqR4%E_ zQa{7K_WB!9AAfD3CA)tr2|HrGq^R<+V)**pUCHqq_qV4EpCPv29$H)#_=#+-L8SM4WA2J%E=IQ3%S!@AIX-u?YRs!OR7?_%j$T$S zP}$UU>D>;i68{U|DS^}F`LE9s-mRVan*Y@<<>q@C8(p2(!KrdzlRvvnNOp`|U0UL4 zalQBc=fQ!j$*>^lT$^B9^6LosJQoFTnJT)6g17wBdz;V|Ssf4Q;)ihmtXxJ|1t9oQ)&TRyc&BR)$uoSR=?2vDA=AL_u+7V%k;PI zz6k5Rt8mY!Z3_kajlbq63KTj$c2wE6U#nj+cz@4M*BcGUC6%-XB;B&v+Cn(#iS31B zE1pRQe@gar#P7fV;PjYyg5H4vvoU4f2iPe7 z>_n2D*+;J9;x7qrU!14sEj8<^$1xhJPCbh)y=_?v>oc-f4R9GE%0>!E1yJ<)vk~=; zGSLpCbLAmR>wG@*Zn$^XCQx5=N%Z^E2gQ63>|X_c&M&M( zmS*p{eW?@gRdn**Xt-W(`B>cWzJq=Ao3Wj(OK-QI<-6S8E{u~fmv-qg)7)@f?|rOV zDXF`Ym-zY7ft><^=%O59>Q!osp~eqi=XWReRkY`b9&*m`*ZTN1r1#?7g4XlLNyOWs z+lz|wPSv#79M9Xm-AL?h$B(j@fy^xH^JKc}%e^#nCFEOgbo zU>af!rR;^{pLNM*s>u$UgUi;w64l*!@3Yo7Ej=%lprCH&be}?F4(V9UnJ~4sutGlQ`p-CR6=y;DT;g7u#%J3C`R5W-~>JDT$O*9 zUxoW6`1|hqQQIGHQjP0_*GC_3(-_~f_HFM~X~7iHC*m`=j9Rx@TzGkt+eM3Vh=-;} z*joSnjMMel(N#i*_x+pk1?(N#z=d6-_ zU}Lb=OlG==z>bHwhZ+3gCzOP@*8b2F>UdD%N%EcWaBs0oo_ia;zi(S>i@W#7>d-J% zjc?B$-ShjN{a8rFUt8;=@Y@@a{9L`BKKEz$jw`=;H(nxTb!1(zlKx=kg*L*ZJ$Fih z>$A7M4{vrd0tb~1H8Mu+7-8?nqmPD&No6Sp#&)yM8*ZR`%-#4>iE@81TxoxtZ`1nf zJElkdLubu$8r!pB!J7#lx6F3v39d`*-Z@nm)~_UDT&nV|;qpsyujVV;6HiTvku=_N z=Y4K|S*D$J_*KGzvSi zJV&a;t~~#=qd7Ds{+re#?(dHAYJ44cjjm#)oUa@SduZA(X}W67wSIdk{>j66lvL4s zeqqOlkVT@6?vsbMMm+c5VvNkY>b0)AqIt4e`@><4o`g5AJU%mYLLFgW9xd3yL%6H% z)wG>bz8j<98>jWXhB!Hl#p@dNi&nWC?qv#B6xYiR|6n9~3$}A!GjC^T@%bCN%i_Qm4zb9-yZKFdj8HoPrR3*a~ z0N*6nc1|I;jTdD^%9fyy^3BI;wtb4_sTq+tOL?1L>EBk9HYTNv&v04fsX)g`zTYyLdOH%5{qkDA7c7qcR@q zT|GB}urzhs67r)qe$$~r@$Y#_@1?uKGRxfBJaRj=gm*bSl9tM7*N-yggzi}FY$3mzJo$FXJ`3)fgk4K%>QtT5Q=IUes|d2V-aW_Rs)*k}K+!POW8L;M(PhQe*daFdL=JX?t!-+**ZR|E zritI3E?ga5BeJzbpL|@Vqj7#GvdZuHtW)&KMRE8QVex`NnbIcN+r;$Gvlmb9Q45?e ztZNGk@!ubE-8Egp>Ii4F#=+B80tLNN+xF*n7;P$gEa{(-My{a-UdmX=5Ame&zsuUy zxh0?OyZ_<#&s**wwr&0>HqE{|SkiD$@}O*|dfIqfe@FK0LWKE`@H;isa@QoP`Y)Zfg)iwK}2sQNBZapL8!R z_kH6r5BJl0G;syZvHk&)c}+1t7L`E|?cn9B|Z#%4H^uV;-K_e@^o z?vre9L|{wXj(J8n3ROkl54f_M%Ta&OriN0mcc6Y_yVGd5&uwZdQYOOLBxkX3plI}% z$2!egx*gd$ZG7@cS?1_g`;A9y_l#;aI^Ela^GdWTFK#+LuuX)hyl1D#1zwr;7jr+n zQoK{kqdVBubEPOPCsXHIi&XXdLhjbb_t(>D<=5#?Yz{|GD?hE9kefTK#gj;|S(9sU zEiHG}dFf`5Znd_9m1tOe9$lf-rBni?G<9G-%2(1+i2GmGwEnN091S$c~GhmnmCg z-Al4%;-lCP>{}zyzCW3wHzD3WLHOyrT}mWDlsK=~M76q5k+5B^KG}#+ z?$A3F;5w9jK$#Nvs-$9UNZ)sX_h4jB+=c`{tLd14^7&&)i&}jbH#^Dh5|+xmu9+2| z<9X{1;WCWIJ#Oeb_(YhR+g$Kmdh4D+bXB`V{+p3&ZbEzNHg2mMjU}a~$sC!@sWe28 z<%o)x3--!5=kATHzuUh>LBb#LER4g_G^u*f4MBC*+77Q{57NPjP_>=*JvuXoUu@_+ z({CGEd+W@pXY8;e`<|JF9eIrTE-!t=Ri^iV#F|T+vd5pEZ_txO4cq%2U9A~q$yn2N z)aL!(W1go~%7z`hWa{~N>zw6F-RhAz%kDuD!L^qfQ_|FeCs0c3MIQHJvfGe4Y0olh zxwDeJ@?M>aetTT?HIjYbJ*{n8?1{DrZ7z3H>GH>PDl7=M$)T=y3aULDyzTZ;;hoV# zP8%1!5@)^ST$}gTrX^)&8=^K?WT=@S#$TK)IUsl}(=n9LTZJe6?~&fLunQ@#JTZmRe2x(an+YJB05h6)HEb%f#HBcK&EIbU5UEu*81R zjeA8m4UE*h-S2nfJGoDMeTr+iA-X%NuAtcUCmO>JOiEYo3+JcLS`=BZ+}&xg+}WsUeB%9lXj40 zlt_&W$RQ8OB4gRc>n|sjcbIvPMy#57=>N*hTS&*C{XqUahLSp3t#tO9UH@sqj=D0- zBl7~iUS-NzL4wY6d;@9C$KHbHFNZzsn2vK>Qm;zh*(`eY`G(gzooAoV8ek+65WAvl zNUPV1>TuIy48CcMl(>Ac_}W2MxxVhlaqS{G9-L{I{IP8htAty$6Qi#WCyPy}AtM9LP>&^qJ|qj>d#!S3<>>+NCxGPzPb!P^~7!|G20o_geX&WiE%SaXWG_S>P!uZQ|_ z3_HsDa=1H`9-@UvPv~X*YfDM!ICGRNJ8^3wTeieV4_Ane#AIu<@9Z1-sjc6$mDAWwjCPh7^h@E)6JML1rC4K^>=qEyeS)LV#+kGieDsP^XhTN_f-$+vk0-D#q+hvKt% zBY%89crYdGvj3Y+TDa%qC*1c3CB$M9CCAMvQndj_H*&44B$_;FADUdUgFnvaN;H^W z;;uLenvW#pY(}E(blr~yQ&S!lcO88%S+c65(NJFeD~CX^{;S2Q1Jx>23hyPnh~I85 zb-5lxx0k~it&)BBr>ykHxWn%n6ngJD*<}_frFY%6cx>MDrs}v(u=i|vywFk61f|}x zFLQOWs?WE&W$&DrbcuTR-ZQ;RW%cJLZPWXr2z^hc4+ZwB-x%C_UIkl!@#}h_vAP{G zS1LUkxrKdJH!ffbK7@JRejA`4CrMIxRUYv^Jx6?^xZ#}k)!XCb?&uS)uQl&}m%I>T z@w~C@vi0ZJ;{{K=pZL11IZ|qLL^t@3`i-QbMwt&byrmb-{fl>VC1*eUjuabRWl?6k z0vTu{8%U&`!>YejzNgk*)N(2PR^%`ov> zVrl17!Ct+YYc~tOAM@C2dGiA9lKtMqg(@EcHK_NH09rcYzs=+&RXtHw+2 z9N)5jSeLK!Yqiyt(s-5X{&dn)F?jK$r);@+j=;0Iwa>B@oAjv{ zYC;_MRIH;uyVtGTf12y1kD}sq*Sv*h%-gRg(_|n0wNPBsy{K1~7Zf>l6a0*hSs#RpK^Snir| zh)?#+RQSSNl?nXe{?UrN1B`27arr;Tc`W?fwk(zNoEV!eEFmZ?xaVxR_{zI^bg9OS zawG4U!3*B~S8{5f1mDp;ur2eWiNbBX#@9nX|-Rs|7^Q;{jeAZzaGisP45Z^QAaU_Kw zyI`8XIjH8!wuOY7X0NxDcF!*z@#s2mou+H@LsI_Cr_X)`sij9n8?GNUh=#pREa1vC zaSDe^+|7y~AW1GM5gZGq(?1b(DOwT(216-diwB!#$!qz9JXL-ghmh4l#mu&c`jb4aV@GLsrMmqoGnz~!Y#jU#)C>oTI;iq#WyX2Zm=OQ1Uu^-BR zhCHvnW&4ldhEK_5@f{aTsyAP|al*!wpZD1sksaN-FS1b;bpf;vqg&jr-AUu zk&X`f?Ch(T7UAa3hQ|=ZJO-hGP6sQKf{V=%q`PuN>)+?7HnrigJYA!`{FZFnHOQ0(M zbdT{+&Mv{YyGGiF(VZDs>&^N4RLj>bSudJ5ynZmSGhaV_o3d{0i-xa_9~v3o15V#t z)XLp+^CV#;c6YPy&6mms1_s~TD^ouSI$v>oE8CP7Bc??R8daryS8XxKV?69zv~cK7 zdVUJEtxe~roZ%hqc+&?(d03?rK~Y+>H=o#(HAWSwE$fD(X}&b)`+Zrt`wlE<4CHIY zkmVRJ`851XzqtF9h|-&4V)Ha>W)}~($vAnJxvOeUR;4<`378z}nhDIY=iFzPwc(D= zp}f}7XzR|$vkdJT=}n@Y)aP7}PI&Y%P8=OkLVx)*HzpmQ1Lz-Ig#wY6Qo7D~Z;h!Tu#T;&OHs)&=-cocR^Ligwt&Q-HjM$v<4Rwd} zqjWl3(%wsr9Ap=5t-f0^_qfr{VvR@+*}*dDoXi>X<4E({p=9^HY!Z$PoH4QSu^!q+ z-s+p?1cx4K(O;KMVqsecH*#v(#@g!(y}k7|d;cXt9$IMtkLO&-6&F!^p5t1^ zckY$Btre~PvTOaj3n%EYyEjmGw}$qw4Q`!!FDK{u$ zUt7P6zpb&-^rw6Fi?#%84t?$A1165vj&efAQL`zgJKVlKcD&|glnc|B#FN&oo&PlG zdMa9G`u2lDDXV7=j47Mp8xN(AhB>DW8&{hSeGX`<75TjLl1j+%@ietjw~AtuVvEyX zFFDogrOxx`W|vtET0ZnGdv1DkhfrB}fp_!3jJQRY!_|kLVmyA?d)c%Hhm;DOe5Jc} z-StD+YE~%?=G_nq%Q_9W?frRKXey`0)k$Yv3)0qTA?&48WMp>OSj5B|J26$9t>3wc zFtuApoX)m<%~YOpJ*G9C7_`jjEzB77Gn`CUuH@|brZ}rLfs?!5E4ytfZ)C|kL{~B_; zk*b7yWfm7>9Xap%-Eh{4eq51pHES9{O?C6CyRh)`2Bqkxe1iDVs?A=Q#pgG^z@xf) zCg!~RZZ}Jvdw-5pbg!U5m&Ru(rxW?I&807Rr@fHe12te{z7eiqZ^mNnIZDiW5Gm$B-5Ct`Fh*8+r<}?XUDoT zdd{m%Jib%k@!@m9qRpD^=5=@G8YkE;Hl_8?ZkUO91Y@&`u?PX%U|ywwfAa-cFGl$V zk^DkPG(wbS1gJLb(L7+=5cK96w0i(-Hvv6YHk>S9htbJ_5EHxw2VPhMoj@1p0Amej z?MGsD4kJ>bi|k+<3AbM;g--H^E(k|+Qvw3$q=;xvX!jP_SwIQ}+XGlA8h<0gE#$F^g~+#S1xi#2a&+mGS(%YNGkO5 z*~%$D*qH&nRmXfskkthNHp79a_{OeuLIlz%k<{N9JVC@Lu+`$%b!gKZ!S9#U;NWGW zcvt~hmiteZ5q`wvxXr7Fn;NB>Wh z|GvAA1><*@{Wn%~u#o-(uH`L)D9x%sV%$Yz8k^1a9!#0la)nWGVgM#sqCn{jDaf!GYv;262afzbX1}KD|CWbVECqqL2XAhJ!+k(2A84QRCP3_h zh$2KWqD09|$x6vm$yUih$zDlEX}yxMk`dwvA`5X0k%u^rz#%jdS_oZ)A;Jn_iLgW1 zBeo%&5Y7k>gePJL!VBSz@I?e7f)Hc`6%mPuMf4*25krUJG3@O`4V;XDDC!CO%vW?~*E(lARJ(M4bgH!OgU(8Ywh6Xfe!2XmtM1>!MadFRB{NKQx; z|F(#Fp9n4={05mkBH%v`XcHH~2@mnN1+5_pf4_E*_9I+0VMJFnEkyP24#e9LOVt(Q zL1>^+K?sO9&POzNd0-STTF5%l27%0yIp%a#e+d)($FN{OPjGn)( z5sbJ~Own9!Tr4jtAOSGpr9~uowI7cc24)bzGSf3-XldOhtU;tguzry_AWGs^F-<;T zM}!Y!xD*hY=q*m8h>LTgVLq|Jc!U$ZB_h$Es?Q3rDP-b*H244^VjNg>M99iWkwvK@ z%Kwt7IJV*%_7$5DO~48A5d|-i2hwygL0lx)6`$K8k{=Qj66WJ2E@MG!;eOmG5Mx-F zMfqRRvqy*MuQyW%g0K!tXT*P+2uzPH9-I)&;p2+7K$OIt#Qvi2Im57<^1kXTqFnNGqmdHCy!*-Jp-i`mnlh{Pn}ZvsZ9!%G*2 z1Sx$KO-G(oAf!pke_@fzWmznYNx|p}7+Ed%0y*!37n!ESpwh@@t)z1pl}5+Z$U=rR zgO>l5%%IY($TTwPHqDSF!Jxr^T8RW(iJ?HjC`?R&eoTo$QIN(Mxm{{PR*saK7?V7U zPU@twBnruZSWyk3u~?)Y8iqf!sN<;D(ll3$LYHEo zax@a6AWVP>R9PfsoEEA`rz+!OVUkC|TN0x9`(Y;uQ4*#@&#A5?WPCoV!e&vKR&0j5 z5vt;D>F)2Y52dVYB*8D{uZCIcV{{u~fi%sx$cBvnRm1;cWQAOGf_@%4!Al>P=`^w# zI+27-z^K#cm_Aupj!PAt@>{IPL}Cyn7o7xyCW!`Vz#wH3G6|z<;Dd-Elm84+#whwJ zGzFlzzEPQu7LF*+Gz(lKkM@SHR&(iojdHUVH*ktG7aD(IMii6xPbDbbRI zw<#>t!Wd;i2NuyG3GV<6bZDS6tmqPCD>}_X*eOi|!?ejo86J5k!^=Z#c&I7~VGyS0 zK^FE99P9nzSXG*qPQz%0`d~cTlH^=;Dh!?~8mt4tVv>-l7*&Uk!C-_&jMn`#nn|Id z!9_{%N)FeP4OHX_sjKCpYJxme%}X$%Ds>W~MyN^vo#+H2oj-`wiBX{7X)tP+y~q=T91CfU+K?|79)`CZk}|6QG?@Vly~_PffmA*#4ff>;St zvc~{V5;V+|Bx|8Fc2bpT3<=vLNhT%_>SkjBK*e|jD<~i#GvEP;+nJKU5F!%@<`ggr zIfX_O5@t<9#?x#ml5|^pS2|sU+*NFxzM|QHU>21PJ#gZ2D)hli%if0Sq)ztKOehu*DuxBTIPOflNYX3eVxiEFm%p z!hiupB(@MyUMs~Yr_=G^N5g|3ql89RqS1xOWEaLc5~43era)(7=xkt&nt}0~ky+p! zOfY`76`4UcWuj(EzSNnhDODRaqMD$yNyuy?=w(S}lJ%j~LCu)Cs3AQMHT0r`8G11p zNv0*$F?b~<^4ihQ5|^p6u`1(R!|b8xg~I9ev~!~~w0fOZZ9RUikeVAFB5W*Aio zFU^IB3P`{l;;RJEz&~v$d8myS1rG|if7+4|8^S*+Fr7N#pZ0(J(^i_+lZ)C>a-=B4+NVnf7sdTk z0XJ!e8W~>-5xd`OAq9*Mgk}H75_QE*4nS)POG1cDlLm7YA{u`rg^LDREK~RoSs_EP zGr?u$2&>)5SWRgLB1dD1BE($sUMc$ooGj8v&6lcUpFq`>gw|RnF9C!) zft+wRm@7o4<9fwN2*_+9d5#y^6%HVqIFDTXZ_0)Zq%3hF#M zornzcB?qU8m#;!_@;c+4Xi*Lb)_1iu+F*4 zVz6G*D44$j##Y0a`j|Bkpd~T`4iLa0%z%QM0j9>r^dX@kV`BPrjI56- zutBfHyICU9aDf2s|D@WP|CKLKNMb||Koc#S*5UUsY&=7^Zb;JX(5*FbB zLWJ!C=1)Srj8Six-Wy*n7}iFpH~5l-yQQ_iwK2Nb-voe#H(FZr6ZO%>iO?H@)M6q? zC7QaUi^0r|&_xyKA`-F)Oh1c-F3z&@XB>p`psa5JVG)T6Se6>*PFMup19PWiY$nDB z+2}*A7LE&sOu=mMWLSt8fVjX1nD{f<2BWB@K)AUWjYU z8qYncb76xairz-ju85*B8VFJg#O)bRE(1X*fpi9~6VFH?zm!me0Ip!G4}pYC7b!*( zQex@?&<+LC3(!t3x zQxGC1IZ_Hlpw}4*plU<_1@7^5d)eZ2n#Q{LSzW2X3p+dwAdM<>(xdKo6!C0)>B4Z8{BIfYQ z3)Zdhd^7?=5);gpZG=X!E!oy=eJEwYUaVnH2|~2MvsDVd8=@tM_9w76fuO*$FBhkG z5wai}It6ACA{dBP&Jg8^5LL@C+*~o#kH022=HB+p?{#ZOOP# zISpkV`QK*ewebo3%Nv&foVA zLy9#Qv^EJ(zF?Vw7{Z`Iq=}`Kk6Ermfk?7hCB950To%rv zTww!HwgCcl8A^kC4hDXpv^EuGl@kL4#e<- zrbxOHC}F7!1DQfXG9mNFac2pUWzgRl1hq34%?97f#(fK;DzmBhsZlnZ8fl@s*o~Nd zf;%Q@4TV1@2?+=vv%k$8m4FIK$gW&;H#-mA?Zu`k6;Nq>s;)m(&z;J$rs^<@{H=?a z{zdNWBEEYOoi7@YEk0X9mj6Cn+6e^j79!pbY!b3Zi1^?%C6EwdE?UaZLrcB*1nMTL zZY5RkAeEIx)k&1?xqVCt!w*@oL>ug&2UZz?H3=~PB+Pv$W?hJ}t1xCWMsLB$FY!Dk z3+%=h!lMdS2yV)O8Ut&FRa+n1DO$DtC=Ap9Pg}`qm;i6WpJ$+loAr&+LtbjWbG+1C z(L+iY3*C>Qdr8RNeDtUn*_TB%(nk+fK?qmSM{~RsBC%%hoO}|JW2MG|b3K^WAM~#Z zyQ%`h=JH@0mrFu&!PLa<`$X-HXdVgK2giUgh*+rgg-8ITd6Vds07a zAeTPqMFvTTCO!yj(`YG#StZGY7zzFb!Ho+pe990lB##iK{Rd^C7J8gaRr)X7j7)my z_oV;56A3vCYK9Xmn9M_n1cEBr_~~R7-cSWHRl^EF(N$Oge&!lbNMvV0MEg!A)=bA< zT4Us9IHG~K0k6tjLjiNu)W-WceQOx+A~y8hn&U4@a?=`1#~9rE=obP>{5Fb0#E)|zajk|GzZ%kE35NJ!ln%aDMfg-@BU(v9Dk1Wd zkSZY}_|F&`JaOen2qjXtYJ4tPIOJhd4A2@jIHDO^OG0Wuh_EXHD~J|}vUX%CkSCUc z;0rSHBY21g&5d$Iu5(g|#JIp-m4ws@kyv0fjzvOFX`yGBRLlr%Apdi1S_R1QI8jf~ ze!dYsPeST(;SmeDL`ga<|cvUKM6 zOhROhc$!AhKnO=?Nyu5?Ros5=FNEht5UvG;Qvu<593ioSHI8_$D4eVTGlus~LS!BA zxdtO4&ADh39LF`WaTbWL9au>LqzB-KOxPGP34z9o?BIeBSr5b3f_N@!qnDWwb}rGW zbHT&FT`p;%SD4hfB;+zE5}vR8eVk>0UIisxBOzBoNf1~Pa1B8WCn47i(Ce_Q-yk8^ ze=qABL~mhPzhQvh#KW^0dW(eIBtkBYg1;ppw*bqCf@g>n{6I#ZP_UZVQBp?BFsL@J z36csU4O%iZs!ilS7Jo>lfuGw#WFxS)4yt#I(c56Gx4~E$kV-<#WkNd1q*1_d@jZeN zNrbR?u?Rmnp~KNH9*}?}4e=2aqz-s;b61EY0mAjJB;;N$+QO8Lgs%FC2_MNcUCFAK5WKZ}Joq{pis$c?uSt&?>p=^Q^H!B4=vVrX@zTenPJTvIT zSr-F8Se!^rfUf~mmKt?KBXyb$RRba$1@xBmA z1u1L{x=$B1#4sN-}OBc=C)dhHU)s zoK7az#YEBSMwXN$4%kPQ*ChM{AkrqX#fL&<3rw3#BO#BB(Z?|DW8&C>ZiGIjAEXn7 zC7nsvhew!~Zc0ZVgFkIT+o_w;b`sK#$#6vZMjB*dnk3}0A=>eGnpRGvX0wwE{@fFp-qYk06`SXoQB z=c0W$XOJqsCPFgVUzQO`n2!Qx&BXk{;I@Oo-PtSJ+Kcnu*ZJrd_zGxZ#l}_h1-82W zpqnpjE%b{&SvJyF^eNDtup4W_hM56*Xtx&=KU!D?Zv2LXbYl?yK@CD=2XVCUdE{t; z$kX5Cp>Mqc@b2j%zkWwT-eS~rI(%6ny7!E9Cn4`>3>yA{k2sKEDBxL^4meFN`X1PN zFWOzsfza@QguKV7bAF@v^asTUWAr0P=p!K^IOzXKZp76<&4m40KniT+sCdSi4%;m7 zE>YS8U$g$<&-!qVOnl=NA9s9&ghf6Q6!GcLF~^($;1)t_Bnj#H)0!S2YWn=AX_dI? z%U&ru*%hL!H6ZF8#n6FR*C#|WoZ#^*tQw%;oh%a4Z;XBi^1lA~}HBBQ#O^|hyU2-PO)uffNc){w#{F#IfSu$SR_q}Q7kl( zq)CDU0%#Gsk~Afab;x8B05}tK#XrSctHI$d7%8z|gjiZcW(tvAV3iN>Q%uOP@ibon zj;V=-9Z&DFA-!8^tRn?zqzIz$q5nR}-c6i#>QJB?1vb(D_bsRB999>Wi&X23Na zZAK7|#aC~ZFWy1Sf$wigae-m3NHlN{ixWo3DdKMy0vMVzr~j55erHb1kTyee)^tXI z=)RgZK2VcA9iLMqMez$92w#ubo7P|eq6fUv|&!36)QX@Yf;2>2lZ+}~mtkZT)OnhRHm^fd? z-_+qk5RnJ>75O;la6uC8??4+NZRm^JmH1L2p&te=QXWGal*r@bY9ti($A-aXqqxuq zzg!Df;ovr@E@Lq-`p>j~BQv2=8H^dgrTE&Vrr1ImkvzU&x=8#Spa9qGNEa{^!hSg6 zTn2u%Z2JEK1+IpXZiFhtsQ+sJt!~2Fs8q+lI1pJTBajyz5kST7mN7KJ2Y|*9{H`C) z+P|da2N#N?K|VOC;+wBhrRa@^~EeMMFQw`swq z`3zqP$M8sqA(C+CSwas01sDS$2_Od`FRm*A~kU1Hi{x0$7RbcprOl-2qC+ zzv@m<$H(G*TmVLBa22=X^Sb?2cmJzy4s|I2ybs8Tz_SR-5&SqkKH_#?C^-P50B~9P z0pN7P9XE+UaXsX(I!;d*08Sf@Km4zHgt*RwG7-g9V0DLS?&n~=fy9&1-iM0S! zfGq$xj%VUJ6cSGX)&t~TIU0Hy-qW5)wb0Kog; zwuzVcSV_C+2%v$4+ng-GJ^&a?!ui4fNm33ujD|87uR}Xt$H$Sx?Kw~fyCcbn-v92u zSKKZQB~Hr-o`q1y=~)4Q+pB~aj}WTRPQvNJ-;>4dd+@qwO2R%y=G_hLI2}U(_#7j6 zvZ0FO_z8djjI`tO!s+M-z-b-9vjgfl9j^dz9gNV4%M{1|0s!Zkz~dYu09lbY;Lq?6 zm*cX;F!(DSEEy}s!G8q6k;JRSoqUcIR7Z(!nR3WbmlkCPsze_If*WynnM1-y5OJJ% zAuS5VsvId?zlw?B@RwGVWg2>2Fwu5V1?SDTZB4jl^@%sS#G=NF_%Bf(&ukz=;Kf1! zgYZZsHZaa7F_;`n(hbGwmW1kPpOI_LK0bIGK@M@fHdczbXixN{#8PbG9(k;k8-8Us zR$Ba1j@VJ|#9|W~J3=;2v@Jfx{|+ztpLnSvbl@0KI3gV!krY9BXzc&^gAy39;(yQF z|A z#5|yqX`w5?$DgeR3PduOtjc9^jvIsE&{9pz~fUhKpX(xehMHK0FQGO0MX)lIh4)-c-+Hj$73u$ z7ryQU0pMd30hWsEIF2O%c)Z1NEC#^mS_$9j{=6t|>{#f9SKu8Ne#gR%9Rm%VX!sFFNI3qBvrxc0N|fQQkXWMU z$%i@h0zx9h0i^0W@XMkIfnH=Vj~fxPN)LX(#@B=W5>GEI z#7|Tq;+P(>HgKc#MBc5-T@@-};}-<^%^c4}R|(Pq^HsSY*2Sd*aZzcgm*@O>b1QT%acoy~#bk{(Hg0lAjGR2laEEhogVp^$iOPYmdA- zNp|&(L)$hy<)N1zoYI;UzJ5_XU2gg5$~oQMgHO=2wQ-+^Cf(@Y^0a(oJ7N zD?gM;>8$np{PRbA+1ZnK`%IpM@}oaje|+oP{dMp{{K59g`lhjZ1K);j`mSua^VRf* zbeh)i>h&{&57f6s=w7fG#0HWt92yv%Hq<>@X-K-MD52)H-Wu}yLk77|y8G7h>YnLT z58W?+A8pcMcSkGkUeo8{f?B!0qLz@F&Fm*{&yC&m`rF=;oa4{7k6T~;@bk~F>Sv#I z@L~*CH(f1$@bPEUn{K@umX+;qY7;joN9>$*fy3?W=;f_R<`@t3t{(X5*V7(l8r<|V zwCCPHRBgkF`=6&R`TX?iv`njWz0ZT<(>2-^Gj>T zBzwR97I&* zq0@(g)iq9qR{HP^e5h1z(V>Mue%bv< z(a?Eud#t;Yd;g;k?R(FwT&cPg-gAkqv|!nXo*Vhsl)Y!!SoTL(D-|hUZQAtoSyAnw z7cvu~<{y0Lv%AWOf8g6VWN6M~>M9|5Acnl4SBV%b{*C4 zPJ5;Apg!F#!G-LUrXw+pAY zt=hK>YdxitxmDkI@Oeqhv?Es3h~mC=!ei*<)g2AiWkHjpJkEJuv3*tj^41KQxxQtb z?K`JuyVbNcyU3l1_IY%xot-(^p|yW%*(-2dgHI=@$4zuY7K4a_^;tZp0UZ_RPUJ+k>_JqP)w|ibEJmt0Yi{4h}oUihf za!EfYwSVK+u8(&1(ety^J|2slUr8FBNL%u0U}(eH#@?-`R@ zP8!iWRl=)JpUB>JV(MG>g2?vMU%&PTHnf+NeQ&5gGgxG?f8BdW;adx>6DN%36qbfw zED^>^s;h5KKCZlViOhxE9>c(;*uSzTWX z@>Jq4@jjpIXk?E6AieU<44)n?7Na6(J*B*1Ooz?mGskjbUTtaH+Z`HO7IXOLrQ4U6 zP0P@vF0x6ib&RuHUztMvQD3;l`t|2S#K6`B0z^}*hO52YkN@F5a`R&HFd8;nvp0)l}+B|pg{t3Y_zc`wA zjCFq_#>q6E&2N1;TJ?u=QkGz@d`ATP0vhPHF7sm^pXC%UT?#j58XL%1Gbjn{~YF znb+rclh-?}Z)iUMDWz<)@2hv*F}ecg;BbHLF@3mP_ zWbggDf6fPks0ZAG_Xam)E5`22AN9)7=jshg+UuKd+T*8>HopI8Q%}(2R;g!YmuvPt zP`Y1`zreZLd3=?Vt#5rfy}SFmd5GkLI?t zrsXo%eA4Vzf3Dl~;N4ga>5kQN`V`69i?mex-*E2?1yo&KRbxX*zVrP}|Im>)pHwEV z9(uI;*4WX_KR(=8f{ZB%To`)(Q^TW4d!Lwv>xHW|9N67|@1WDqkQ3jyf=O-pM{1Vb zl|AzM$x*4ewZ}i8gWi`P^GGW!295_Ezf1Bx6F!` z>rRJe^j4mmIi_x|%a<#jEt1lkG82|Q8s2wP-j92SF@N<`C%FSR)7@hgk!u5+o-C{U zbYs^^L(W8({=>~A-Z@Eh@{4a0U)2m!Cyedm`#EaZvm=%?3tl(d#P zJ{z)+%n?rDpQ)HO|GT5xGWw^G6P&8+1}p83WI614CGo>}U2>vN&ECRo{GO!;C`L*5 zCSCL#gVtGHS?awofv()+FS%z|l9TeI(aoM5jf*=N5u?)lkDhXVllD_0&RMr~>J9oE zjeD2nw)~9Nc~fO{u>S!4?{n1 ziu1VB6*j#^xk_%%>wtX*wrvkreVO|u?#sh4&phvC*rR=Qt4&(7Ggj|7sKboWQwx~A z#!)ri@_UR&dB>-SzHHA!InN6o4l93CZ!GlwY~mJIz1w3T`Q#NBL+$jhrt1uh?fd*sud%JT#*Ec7GhGl8owM%@ z|5vHn#GoT5Qk<_PE=cAN_f6jCV_e!SzoNsgJ3^x@N-}*%4)tblLR0!lxdxq6;;tqfHts(CWKl++bNqVW&)K1CDZV=+CeKxJ|C*JSReb4gpn}8M2Qv>dYXYm? z7C!3?`s!@IVD~ze<_Z1l(py5GZk9NCU4}Nib*S6o`C&_BUbe#~_phsEZ}_Q@SLwWJ zi<}m<=gLvP-F`RsmG4j7^!Uxp>9;apWQD$VXlPR3XFBf?U*|`#v%`9qujzXuRKJGZ z*I9DlwYnF#=58-F@%?dy6Pt7SK{ojc^;7J;nGt$lmY9sD&o|$=VN&QA>aQt#=Nhiv zxoc*o)7f#R7th;XIeGKIXyw6xy=*n<1Qzv0vGcRBlbDk)K7MrHL4DiAYel~zmp&Kx z^c!yOcycxJx%XgGxNVU7K<-g?)wqi)#f_I2re&#-T@0Nz4p^6arm^#>Nf!OWPi-&8 zUdo=kQK!afQ_rO0rCjN8uNpcmo4j79IejX2L#v;Tj@S2g>s+_rAos?or|$+bZyj8n zCDrOw65K8+|J@_5g4qNO~1B=x630EndHV@Npx9R-OJhaW(cs5`9Ka=H9#eDc&c%-|V|{I&--~ytIiS_fcNf zqM_~E&YwN#emL|D)8%U4;p6Ae`mgBu)Qy@y9TRT8BdU2?;`*`uZL_wmyA=H9(;~ga z1zYqMy}$1!v0EVbY|Y~%zYvRzr>Lr;))`XYDZYuk>Y8iw@_N#%BvhLf52vnqp);W@ zHkLVO;sO=HyE{G&Q!ClM>r+aL$qR~()^GW;vpV3!?&)fo!C9WW2FA0N^VRS8DA>`n z_qAbpR~e4GY^=Rz&b(;QYrZnd(1dZ^YqHH5wOuUkk+=hyv>*EOpDj=DqP(y_nsQ_> zRqJ`l=K+JwbE6zOCXiDF3-h-!LryK)+3VaIsG&Uigx%qdqtU|)rX6Ta3Yhf$#p`~P z|D})$e9){*m*)~&7 zr<4pS-Z^A+I4S9F%AMrk8C!Hsn+{xi6mrdde-!gkQ<%f4`R_8e_@}NjRSBH5;^9@- zw>LK&H@|kVrzY}Z#;zn|g}H^stoG0T$`#pNHnW|yELGT(D>TU~qcmCNuh5HLGkvxlCCGI`DzNtQK#nz^@q8kFE z>SsMtW7a=bOKZp8$Mk=wnR+49-B3<%``L$;GN0|MG&)g7w>uixE*XKdp z-5Y(v$BazxANZbmd2NGCpxxT17sF(Vd#*~QRm#XmO=_vL4{MQLle8sj^su&E`-`S8 z)lSzZZ&n{OylB)@#YThJvDtOgbgy+hc-p^9+9K$+#6{!5k}vYKrXMq;e^Fj8u1jdU@Pvwc~2xik0tL4m?`B;68mBv-!C2bNPg#`BCWP8xu1>)+k4$t-Ac~ zoWcXf6@iS zg%3Q~8mEFefd#}|qn%8Z)->q%5Y0;a=23r-mdL_@)1)Ef|qU=X!*`4e4 zy{jM{@9dTv^`nh>ZIf{+X}?k5yS1i9oh0L`Svkd~#;fL)#W}22&4>!QvGhpmn4+>p z;r$<aj2Mgr}w7x_FXrt{L~Lmn2%9%Wlx-eu1Lgkn&6Stt$%mb2HBWjvTlvKr_k|Mz-^9h9i90e> zu2Nxs@mt`{*>(PFd0TePe?I6$7(a ze9T7waYbPF3#*B@UE*I!cdUt9lD}{Lokr)Al^h?Bux1Z_bynh2!Pq8bz1;4|5RIWM z>`Yb^vru_hdB2vt>9H3wHG;Nizm1)je2={kUO!P{e!H_CE!{;gQ+CV3lW}7jnr7T< zZ#w_&E!#}ZjB~v&{YUPuEg!l%mCmQ#t84KYZ@l|Q+V(nyyGy$kP|n$!Bl(j#-h;c} z^NaM1E1u6SJ;spGo$*;cdt6LJr(S#I^Rn?~*{$k9$!Dn_Qs$oS?;BKU3+^BM;Z$i6 z9Fr~mOqhLUN!*zoE1cH95!$Ra)*JtPiaND(RqneyTsHK%KT?}AJ!o4UbwL_;Hu;&ig65s%vj<;yyLCM{lWOB^(8ldj)`2f z^8NMVGb;Og7fYRY_&OBo?zXEl;%(RVQ9keW3=it`|59g|6(2vZJ$N_8V2=!|@8RP+ zis7}*i&f`(+Vw=c@dMl*Bwl`9zBN`W6f=Ia{lVUSma%CszhB#8$m#li?cmkk-5p)2 z9Z^qW?Rp$F;-*G@cDvG>^Lj<1UF|20S4&1qk3U&Z&N}ew>mc^%T1Ry>@Ak6LpGqrK zK1H-h_LfGQK3k*h+i7_CaAvvg6_)U;x75u zWrvH8@&b2MU~w8@Jfk-ji~1il?HyP1M!-06YVq5SvPR!~%kTLqrXEX_pUpSht#e1U zM@7QVuJE(-xE9qh#c>-9=AY8xk9uo%KY9I8+S^m^odupJwx%Tu6b%g8uI4$@_8vK6 zecK{)!T!gm_n16%l34cY0-|(F^8LjFrSpPQhN>1BmzSb81NRPkCi&6z0?h9ZtcpQ~ zF5L|~xA6|;Ty=e0lBQo&@%rXzcMUG}d~zhI&0!bHcIG?$7(e{*%QJ?I%st(DWJ~A0 zS#8Vek~=k)l^mt5b?>3Rozs;yo_c9`x_-F@y>8tN)^pn%mFrece_nQZ&G+Xq;MnthQemy=-DpWC+#k?mG8H)SH~*U8CPog{JPYnE0^l*y4gyn%9nKQZDcFen53>U;-5D<8?E%(t24cGFswec zXP@F?uT-*1#@Xj=N-)?;xSiA{?Ov94=xml0YvX5! z+O*roUx&RU8$2xG zh2(+SV)lJa%7Xb@3K#MXj#2JBZq>dMUYT{AI&=AZEzACZt!|}b#yuT~eVbA_wl(f< zK%vfQ6aD4_;@3b69eAvi+t{KN_-Sy4p@;^{=&R zn|k9&+1AD*Wk#RhXiYSqM_IchJhpf27Wwg)A|}_qmT%O(z3j&}x08L7T$cSn(cR;f zj#??NiN2oah?vf2zcF;2CXASw>B~Q0O-YL%t(nze(Q$t0bMV~g{TB>p<$S%nNczQ4 z&8$-yx^;z*WWKeWwO_{SEVKD}hcgs#{9#eUN@kw(8P%9Oy9bvX9W&HhJzzStq}FS6 z)U87ab+1>%)+bI{cEa{!Z`h$^n{P93I7_@S&%50GcB8Xo$RS;%w^<@8_O1Gznu$Se zqgy7P{T3^;PAA9VKv&&{BWE@n*==loA-$}^hp}>#@Nt>GUHzkatHQFglKBSn=Zsd1 z$Z2YR@3qIqeSdH_@5EM3jFX)Xr8#XNl{lw`&E~Egf1vp1eJ3q~YAx z_i5?QYic$D$DQw=`}p$Ur@1pu^>Jq%a7;r!ukfX1IesyBN^)&ao!XpnE|Yvy>dyI+ z-A9ODzQEq1^mcFDoVXR}#%i;n7Aj=O%7UcWM%|7q!!`-y4uPs_2& zpDz2nf~S@-J9YoktM_&*5H%-tq0x zVD}dzwoT&9U!IIF95+TI=1!pc!xi;) z?4>aVY2=j#(kmG^7foCCJUxiLQbDKnCnEwN~r5 zPH@b>>GbuYa9_Kmbh3Z%-sMaCulc=beS5}J<|l_kar;>0Wp5L&9P={dXHlf9;c55g8_ zRjK%mnTuXW>iRw@m@shi#_IRcE#bjo-xoa(dappuc%Hr3ly3hXJ$P)ia-VT*z3srY z?J;R>JB%OdOnsWr$>ok;WqFDvd$m73>SFg8nCpH=Qp()N$LAp@M!QT)a>$?`dMt$dxc8P1l{T-JYrJ%VErREN|f9d;xk&D(%N>Z?P}JIVzIPPXFQBKXdMp&7I3Xeng(x z%Q_1W&3iai`9|?zr*quGi95osNn|kNA8S>0IX%yBQHk~KT^Lr zlK(bqS3_5odG45}Uyfa}zv3B`*!`kk>q}hs>9hg4fq0G2O!=ENv%EuV)lMAkI@i2x zE3$MC`{TCV#@$nHdsH?uX0f$eAG}vzx9x<3;nW6hI0k^bPo7x>q8Q*p4PP*Kx7DtJcIaiWozq`-g<%(T4o;%ocXj#tS zp_CcLEcw{7piIMWAIG@m&1qZ2qnj^F-gduX?D?&G6|IM-IDRZHXj&a|_{P>KPuIJG ztCV}5mhuO;)7+|4yrj6hJXN>WCzfVERPuP(_B6ngzDqMruS+YOoEkphHqLWFsFvrW z*@dTeZG8N;J9(CBJZTYIXZ3)`?V^)4hI=>^3$=QyXJr+R>vRyy>KOL;)CV7Zjy2q# z-2Krj%c5CPyUX!uS?vn7bx#h3rH*QEAM2+&OUvNg&U@yTCgEwdG3teLGj|xRd}mTy zdNZbfkG@&un;yrXb55RnR$)4$sfu&)ll0 z8BaSh{gUJ515Z+l)w(MpUF+(2i}(Fp?c>_z^eu8@Qp%TObsJ)9^Tyk&F^5g>3FQ|p zxu@i?GSqlSIy)x!*Txyzq3!3Jz8x;Cm1-S!&Mc5=SaigJ_P9D@)rG?C+dsCssIHux zLyKx#*q&m4Ra;r%fXgEjP0GG|mtS5o79QO;KZ}v*9O#gqer1(5{fs+f?7nc-fV0Q< zGP={N=g_KswZ>A+M#*e+`}H}b!f~IOOBT)A__eIeRhMsvs#|@Hy@gk&#V@&=GQj52 zW&8vD)dF^Vs%fP!%AhQKTNwGqdrIOPbM+4SRHqWpFZ?+_CV8cV%wDtsV}FmV5!l2Qz7o-s!-m%o_vec9fjR*g@_(hCZ!3(N~A8 z{92dN;h%Cupt0l4i;z^xzEKAmy{Y-Tsvd4Z5#h>!rd!3CCw$2V#yqMZSw6SAFhH?W zu6Xe^_6udxH?FPOmN;~Qqtni_!xd_A+u*Os)t1|VJpm1N`fbf_k9`i0(N=V5J8=H{ z-67l8Kf@!F-%R-4Ouwt4@YyYo&0J$uJ+9v-cmrkm-D6#Ile}sRcX%x=bxP`ff5Y>_ z`eEgwA%W$?@u?fX+M9i&2^@ICf?qx6o?j=hKk=rUr!Qm_w&zhbw2Bvhj3z71&8Bp&z`I161z+BuG@n`Ij`O# z+VWk}9qMmN_1Ow4{*CmOxF^G>Z8Sd5R*{VN=F&cBq}1+vT$XX(E+$|OJAxZ`c8|`g zdX?kZ`H@@94_Yjlclx_cp1b|2#TQaW*WIko8~SCtbpDQxgxKk|ovtQLb-kY-{(Ap- zz0MiG{XV@pcS_jarl(9{+!cC`}#B{uCDIC4Q#m6LT`48I77g;$fHy^lIten=N zGN-IxKDpe$%yiX{FB3j5bNSL0Al=#*ep;HRdxgn7qN2BPLD9>xS{Vx-x-4)UU}wQC z0PXjlZv$lfHzZB2zWVgd_Ph#jMVl7-57&j$EFU=E+jDEW>gllan9ai*0o{5Zt6otK zY;TK_wA3gRUazqsXQ}NyebVqTI<)72&-aJ2^E_RZT)repR}Re2&S1WIG9YW@m2GkH z*%<$2hl`J;59BW69=dpQPUmWQ+Evbl#`1|a5~s4IXBsvKp6v~OQf54(XQ+_!{>|N8Lo_n;Sv~O?hq`kY<)Y_)l zXW6}%Tag9d)0bx1-F`9cbxfil;;I!n^M=~ObeHOIqj+mi#-#1c_bk~9+h3>DjMYr3 z7^8`t$}T#2y(tI@S6{R(pk1mYb?cPrwihgo1v4kQF{s;TJvx3ub>QfRLjwC-4@*y| zcFSKjuN`*Djr|fa*V=jbVntwX^TXq#y&S_7Kczk#cX#qiE$2F&nHEbGXI`G<7Ib`+ zC*#D9-stHLFdi|gF&N{4$u50)-3=NXf%>aUcAP9mYbx1*_L)t@k zhteP*9RiAUOE;*Lh=O>eq#F*Ygn%Hv!wvX)#}n^!-T!>o_sn%2IJ0)Fy=U*e_8OS^ zEfYVIw>1fCtHi}>O_zn`yZ-Hhfh;eRk+Na;=?uPoQe zAs=6b`TFt`qR=m@6h~Mz1!2~qKr$0y2%G9B~z?o+^h;t(R!Jq z(`C$&b?Lzdkumw-YnpBl+rs9lcl=33X1(uTaqZ)FQAp~9)fJU6X{@fq#-PF|1>yvk zMEzBCcOs9bFs&}g^}Fc8m^epwnN)>6_!P!^y)?vCtZq76FI^i{Q%qr@(yJ^PCOHzB zH8w1FDwj`e7`8|Cx37?Ikeiqv5cXm;Tel#Hr0?;ttsr!b2n=8JNLE-z1H@R2o2m_1 zj>4fI%i6llvVGWNO}j<0!9d=nI4;gNW4K|pTMDzRuC)`~Oi2FnZ}8~DqC%XKj*wv) zt1nE;aNRFVOFoZLHkrUHfHr@j9@_&~smF}vGc%;f2w?JUKyCmFCMmmAD6Ex%Ima~5 zH`E8A)5@S8WR`f*f16UoeKLzc{KI3u6=f1Hc><2UbV6Vex3{E~#u!2}f!75sI`E>@?&^s=4(IMzevbE}d@ zl&dlCs8(Y{C|9{%0_s`5Mu*+PBn^HvsXSD|&W1zDVUm)?!A8nXp}4fXC=lkUv7Mlm zeULq;H+yqduP7w4PJBPOZakA`wEmlt4F^|FL)_IR!FzkvEicB_iu;@9^fSx)xDllt z9Id$3a|YqpFMA$b;CU&~tj6LO&vm4Zlz0YC$y|A)$J;}Wg6PYM_#qo9tL3Hm7M1$J z=b(5p!GVhPhIEeW0&V`3v90hMAJu#U*WAX@Z&%`85H zgMYwwrAR7M^&kOpje7@#Ph*-KY9@;7~)s(QP^?t0Lhr|gm(gV$fr0DuEKx(+Uq-&$K4kT}t=xxK#e0FcD4TlBRDAb-0D>7= zJO6g}&DAC6eA#w5vlnA2s~Qt#B^%3;=sWvDMGw5pclbOZD)P z2&d}D3HjOh9D0&(`Q(fgXN+h9f?2wpUk{0dT`4fq$6jhLaSFC7y^>w3?9R=-b5nVr zFZ5sm-=ToTAv{T0&NxaRf$KNoqCw=xji(^L^~N|Q$F zi6XS?HdB^1qZ2rVy1ekMEo+};VUi{kj|Q&1ugpk$s2UyRc|*N#&dx|UHh%nGE2oqV zzK6ebFOu9Q7Gv!r4my&)^3!w}*2oNvXgWOMjVVcWvN^)Q;v?dS*!Sb$5%G3Y^>?P_ zfSRu%8AMk8KYT)(;NjBn-WbLd&nS#>hp%RM`kflkW2|c;Vcj(}@`?C4eF-iRVg%yK zXfC`s$gj!OzPw6>#s(dW1G?T$UP7tv@@^_m7nNf(oG&w*$#8clyEaVAR!$-pzm5?5 zNVLdwF|tdG!()nY(!DQMJoI7�AR^3%tW@B~tMg=&j@PA%AfH0c#u2E>4zgw~ZKG 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 TC_xt)A?a@i`j3+X1?7JL{&7<` literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Update.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Update.beam new file mode 100644 index 0000000000000000000000000000000000000000..a3daee0f50b833e9e06fa01bc6429adcd0f20ca6 GIT binary patch literal 13704 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Builder.beam new file mode 100644 index 0000000000000000000000000000000000000000..c3f0212e75801d7341bfdb69a4df51c3ca73174e GIT binary patch literal 101336 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%0DL@-Qkn6JYwI#t>2xRfU?Z;k(yF2GLK}-7nk+C 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.ByExpr.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.ByExpr.beam new file mode 100644 index 0000000000000000000000000000000000000000..e21e1ed6556b170a6550a52c31258dc63db78340 GIT binary patch literal 2896 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 SDp?_%TQX90)3z?`3RvFxc*$cN+t=L?=pW zLK&bhB1o1IKLQPZkfxy}i4=+nmiCstXdfiA48@e_dB#v*-}>}V_w)JQ=XuUK&pGEg z&+a*A(Mys75rlU-LKYq$ZcLevAZYr?$jCLWuS~1S)i7e2(nyOFO(c^ij-+*Zjh2)# z49ye}goaYn1W~Op8W~Nx$w(UX%29!86{%-PrNT(6n#f!|%@_@YP8Cw3Hc?8WhNcW@ zI)##<4H7_1)6puEmP|7k8I#hOMlxCjm2o?RG!ml>tCebk808a0)0kV7NtecuDwC2d zA#;_a9xB%BNP|Idxf{6-E>$nbJunWrOLB!W!9u5L6uv698s{2ti9YI8TID@4{L9YY5sTjgbKUN$V0v zyYP7u=z<8x>yRn#2;d5KAqf&3{T50%y5Q*T5FU=D<*PukHBz@j{~kN zE=7O=iKB-jpUuUkK+Oag1xGIg<+{O>;Bu7fK1u>ik1@-D?P;ZY10TGe<@sO>07Sca z-hv1WnF0+|*a%$T8d{M5@szL}<_=fR>D0iZD?F$Tv z!gv!g1X*filHnyS(&^zC2fzVv0^k9#0Gt8fT>@!D0N@G$=@S6lY;!2@34j8O?L}p| zR-G#V%^twZ#`mzz!C>9bx6$F~Vw*#o<85>32b{xa900Tp?XaRv6!h80w)TcJ0BFbh zaH6YM#%YW|1|6fZ0VCO>1#gxSzRdP2Qmrs)jb=9ZP)W0$T0?48W*$L2`uGUqDM^gd zXvYNYZC_>V7gvd& zI~%rje|SBhrC6XR*i+uwJb%Kb`EPREBZFpm6maRZ62u6Z0hI&z0>Jo+0E7TArjYh1 zzTqG!3&uJO{Nw{NUG25}@R!wPZdHlf7=PK?^S5{m++!GkLHT4DARDPZvI{DKX3;dljw_{f?9y~R3pDKaeJ5cd;>EKX~OE~qe>$$sgJl%Z; zHs|{VF%REDT71@(rY1al#cx_EkH7X@SKqzQDmiaI6F6>f@;WNnU>H zc@lfY^gO@tu1}_JdT9xAHDP{bnX~*%k8(w?%ZoFLiq`METo*AzlohFU~O?Yuc{V|LT>I?vV(w+h&r0;its_`YHe)pq8)#2S@b|K!d2VdFVI zVLSG$oUlldrWi2EhUdvy^JkgHEz5g8ZGBzgf*-v;M&?`?N>~sdW0#*alpB?Etyvvh z_M1mtXk$km(-C{jJ)-%1V|=%~U2-PhwY7fSrjp87@3bZRcbK;)yz)-Q7q#*UH=1G( z6?a;Sb_tW}SNj#cc;Mwtr{@Y?$sL+Pc-&Y}Yk9whr#@iPa{A4`s3alfa3R^^Rb zv$n1JR;fIfmuj zukSJ>a-&xHn_fR`@tGU;hV$2kFE0P|?(^(}*Y9@4(Sz^5G^eP1gDSY~lj@*D=BCyA zUO9HSGo=6ZkMyg{?qnSn4*aVtXK}-O`{7m1>k29SIR_>E!ixw|V%IucGvaM_MuSNTTFP9-hLZl|x= z_f`+&6`6ut_P2DO9)HN&e$wxiM>Jb|3);@U6*}kMwt%W54ofep28B`7w!+MfVvA`0 z!QK@~8@`eB?bDTZb-2WiTv=$5w5K-(rjXMdn<75z-NIL%X>OSRDZTRIPl0wbOJ6HL zQWaHp?)cS{o#pL&-LmT9zZ<6CF?hI19S67E(y&i)U( z_`hFP&)w)y(!`(jOU<%N>!Z_;BrR(n^uIL2zxGJPOs}@4Aa-raKD?vxBz9?PZ|FN&cKMZfAbJ7}J^qBpiX;`}O+@$ z_q>_uRNuVt9&_U8{9i^?HwgRl53eAy+{kQD4klYb)^xEooyts7nN2c8P9UsJsM+4u z7+bS+CJRVDQJ56Ss1Rn*WB`sG=(Iu83ioBQvTQ8Sb&gUnGe@bV4WtS(utzm(RE(`K z(mJTZM1dM%+X{+V)|2M`TJ&!UWY$w9_OBILyM`?A{NGVgn^S*sRO|Uh+4ibDN}Eq{!cNfB6&i+`o^8cx$Mj?esWK88 zh22E2Q7Q>iM=6!NR18BCYAb_VOd85)A`JL0EpDQ5jf%mwjkw)J(TqiD)J9k7tfYn^ zDAH1BRB33+A_HNekfBVXA{qatC-NLgf|TBS9rOj$ThQ#3c^hb9DRAV^#bW-xfTGrT%*fgnf{ zrNtpH6QC&su;s6SFaQ@7Zbvu)zZRmBx!C)`+<+PD6W8Zh)i|A3ZmnLwM{yt;mB~{O zOoYni0r1U|rwE}cl&46bGRZmcT_eXtpv;gUXqA_cAByhUF60DsA!wsKMF#p4uC5Th zD2$P@AxMP6kC5@f2xvvykqns-y}<_I>yMxhSwBJv%5{b1>n}vP{;#}q16+0ipclpR zgRnS&q>djbO2m-yiI@t_ahm|F*aqlulL`c*K%lZR zl#(#A#H9znUKYwqYw!|eu{6&Db4s;@id5+copcGMV{9-=YAL2D1~xnrFU3hlYAU91 zlCVpG2Q5+@_)}^i)b57aMWnc0pR6t-AT3U37LdqEd)@i`bgEV^^mH0qDyAyp`#Ux7 zKJs3r&xp;-YcF1V@}BP62W_W1^)KFTczLd!lhHM29GR>5cMI=v&;43K$R?yFbi(<# zo+($&Wfgu^Z#Ad$7KqV$UVa%7f1zxnpYG$EshZv5Ia94y7M>6+4KKF7zx>!h$C_*V ze?tXLb*wu4A#X!$O;*k`E3?G;;h*1~*+SQ+D6Qm{(0A@8mb6_S;4IIY-QdgLMD5`< z#BtP{Cu9y(QsMCiQ$hw7aj?o~p7D?9R`Ikg5}9_<9d)(6ey}pqoWJ7I-u&wFi+I#Y zhgWRL-WIvJ;!>US3)z`pMR(OtD!?b0Jvt`F_0$w>IXZLeie1&^H=pONTG4Xk{kEZ@ae_8M4&9@GS_i!hlQr;gG_okE6{q_2BXE%Ox zE%{=?LncPi5MkCyN^*oL3%vWg%Hz%5yECUuYPiwezcc&+bNpLr+CSzxwpH(c&^I9_ zU~Y4I=Z@yoUf#_^x9^@w`*e1}TX9VdSomvW%EW>B?|s~TJTPuv;$TT;^59(iRXg=~zkk>HvGQ@I?8k@IO;K6b6Yj6<(`FJ$ z9Xa=ECyhRLyw)cs?O^WRuo<_vJ-rwIhBm)u`e)f+RgY^AFFP)6m4AA8)&|Fs+E$Yw zXVsXvm0jelF_F7JZ@Kew)d9zqjUByfBU=6t6LDl;ao@vfmvP0!3M+oLAgt<(N8+w; zyiY$rS+wREhVN|Ni6m1R3;cK@_AH`T?R7hVq8;#)5_8)mR3=l_s}bcWgcK^u>1j6yNxglQ3M)Kcs9W+haFeU(GRKM zapIO>HZP5Vvfx@);c4?=8P;v%p<*Z_JKjnH=?#s8D@kwr{whIjzic#oV~u1pO!@zB z!q*n}%cdh=FM23HNfbJ?s-H=eD?4trx7Pg%wRtc&Z5+zrkA!d=ra|T)hf@H<#RnSf dorDHNG$8&zp=1Qfb(q*Oz5w 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.LimitExpr.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.LimitExpr.beam new file mode 100644 index 0000000000000000000000000000000000000000..8adbac870cdbbc76a27932c8fcec9383ac7b7ec7 GIT binary patch literal 2936 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 ea~A;e}?Zkv=_6;l76H04971Z-lHjY_C;=p8~O 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%0D?n*=MP(Ky+ehhQ(J@KS_#=%+etCIc+c8>Jop! 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 ZtRpt_#oyYlvl3p%A;cob!pFk;e*k{dT$KO- literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.QueryExpr.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.QueryExpr.beam new file mode 100644 index 0000000000000000000000000000000000000000..fa2d5b0357c9b27b9a3a30190043374b813512e2 GIT binary patch literal 2812 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Tagged.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.Tagged.beam new file mode 100644 index 0000000000000000000000000000000000000000..c54d2f88691e95f01675d1ec4826e8f6b2d63319 GIT binary patch literal 2728 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.WindowAPI.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.WindowAPI.beam new file mode 100644 index 0000000000000000000000000000000000000000..c9dd8e41203f7a304d4008b9b490761eadc14a27 GIT binary patch literal 8084 zcmcIp2{@GN+n+IFM#Uie(%4eA8Cfbzkz|QTSz0uv@nV?GECy*I;z-uSAX~PGv0}OtL1+8WNMsg+O#q+| zjp56sLOyH`i%aGZ=oG3C#G;bu{=@zdhd4DU@I)Ym_`8xBTskM2%%wp@UkaN89MRbj zkwu~hS@|-^YG~={h~0n~g$CKOSPWJ&6iSAeuwN@WgATbuFzDk)p>iNrwI7AW<`6?j zR4zoIlKk_jq;Hp2REXqDppileGzvYL&Iy>3as`H|kQE~YVx46|EHXsrO!qtT#Z8@lSQzzmm%}{SRttqEV3Gl!`h;RPym!cp5^0&q{OfYGLu z7{MZkf0RRG`BngyL?F?U-z3ped{=-;0ZjTkHiz#6Flj6jEi((;j2#ZeXNqF6R(1pp zD=}GVGy%kemgVmRLh?8yS`KT4vy~Q-wna%#xkt%;b@bSVDkZ6l32#8w#dFaqf1*kSams!qU zibAaAu-1XIjc}kb;n5h7Fre9h!~qEbngd7%5E2lK%K<`7^RNukHWb!HS^!=V&^#Ce zWI4@)0bveE3lNMi0i+2C{wxBdA>a@Q6ELbz^G0A)0|fgAxe$Q^1nc4f%>@MG`hZjc z!MH9Um1%wf7?lCRF=|iqusrM^#$kEbr_wa921Yn;SRS?w^RPT@59VQcSXN=0hevrp zunfEwQh?x(G$2Ujz)M_)I{s4VV{lqHy3fd<}T`1NHzZyNe1q zxd0&^3Zz;R5->9a`IdzElZ8>t_xvlE5&JU<3$8_`QY%Rah|c^WzX~j(K$88Ffkgxe z3NT`S=3aq>Fr0vY;9%h?43)nog3lAo%UFYg4#pJ%4}vWUVbkHWfuv&*9?A#JY;StjZ`wBUru2cbRv?G~ z?Moq1!@@z`hJ|<-I)li9I9wJzFwn+90FbyG29ZL8A2;Bj zMA!^2D9=F%54<~AR5l(2NhkSH{P1fTejFaq!h;QAa42+teJBL1GoBg1fasJ^Ja~Fx z)yOOy)4?%eO*!2I!#USsLdOsCwLZ{x6ZqoV5Ed~J5u*7ORg`s z^!ZxcxN5>H9+dJb{<48x`@Acc!!{InFvmbf1{h_}uf@ zxaZZ>E>qa=Ey;$!Qt2BFQX;wR7p(ue3U2$1PDc=W`lYo3x~6+sx5Q-n@Qjf|f4t zsdjVsO)CCsIobxg`?hSNcLd!vir#zfer`18cp;DfI7c&BLjE4%_GCl-dv)LSlV(GH zuLDwTV%1oI35n$g4{o^0y=`qcK8eVz@F+WOyr;-)PmzbL*-)pl=(>}$PtLx1rYf-s zO{oy>m4CQq`||soLm7J52hH1?toH3{Jc^2X+cq3QZ37ei?e=2A5-|8CRCvE{L^N3&6glr$ni!3u&iGKiTlP zB5Sv;{prLNgMOZ+mM7PlX*J&7OW$|A#O5Kssv(_qx=ZsEJ;hh|LQC!Crm~VQ;X`Yp z=pJwLZx&Q64dC?jjM^SFBHz@$W1EdLIkw~w@m-suZJr*!{$PKLP3MU~-5zdaQmQ@E zc;;80iRd0|#cEc4w^R42vNvq3))miF=9%|sNo*p)cz}|TR%J8ysy(r;>bg?r7}QbU zw2<3fl(Ba_E6{D?Wg3QBDzSn#`}Rt&klTK8ViD0D-e=+ubgOh74U&0zY?3;%f)?%e zc@W;rD*@+#>em7A0~&rj>>9HUP(-zU#s{zWnB^RcWbTYLRSx30bSz*c4K zxqV04;K6Wp4qIh>Fh1&V&r+&aS6T_z(#W{G=;Gdc<6k?ToM?JlU*I|XXb1k{dLyTW z9c2n~r5DB=8pCq8Gz^eE$}gPp?C_1cT?=uK?_xnW3SxE3kJ8OQ)Ymq;;CAOe+~_QQi%TGFl$ACWvI#8$yf>POD{4%>bMW*sLF04IE{O)eD>gi(3)6O|V(T`<+a$rKOgY9trBc-47}bKJ&X{zQ8CkwvJFTTxb>}chc>~nnm#o zsP*eAc~6c%-p&n`F4{eR&`$<+d1B8?6EU{e?dss}d7W?8Wo#>zePK4VA%#10_O+hO zCqsSn>}N0J9FPB$F7D0UUfk3E%ro%HxpV{d6hhyid!ty$TQOyYuGUaywlr zX>GXrq==WY>@ue#rpqhSM-z31Ux;?T>8)>`S-!R_p#G>~@qN?c21kWf%P02^_nW^P z4Q3n87+}1b*X7~eRS~T_%f9m&WRYa1y-dz#IMnsaJ^6MQR40+u?QnVgSpI=OOPnTWuO0tBMB-B+eZ_BuVx+5Md9$nvX73Ze( zKy7i_!xIf_-(T4`Ol+IUcn69ogUm)CL=V9=LNz-y=hga+Ng8%CxoGD$*;o&*eQjaCy#)YmBbFq)}Y#~}L z|0MZIAx^aY&`=fq^wyQVnE9j0Hv=v%e%{-YKf7S3c2 zyPwBj)r3B+KkP_xW!XPQW_%oYp2xt@jH@*x-RyG;Nb4_MLThp5h2OlnjMG2SJgC(Z z;KiJ8oD@kR1c|Ro>F{dOaWinv-%s!yu*i#Gh(FC5xWD?Ah1vB%RC?+XPel%f!Qe>>fwW30aEG@l<36Y3d-Jb%z z_N*jlJ{H=qWVZcXQSXuZFLSovNq8(bKL7c%T>3P_CP4YF&~-(d zHd5ruXEmPp={;w7B#cQo`{3f-L}k1w;lsu2sNKr#Z#Soo80=7&A&X0PU%8?a&Td0be_$(o!cT#-Aq8?DWkw`dMVXtmcJPH(Dk zIhfNq@YQAZ=EC%wX}C~tzKMlFsKMea6GfFBo8s8}u}}LjlB@2PolBItS@xN z#9@$%D}N9xBh9*RLt1cS8%tGAQX)XZY&&X0M2k&mEIadIQi9kH>s!^wj<@Nuy~^*K zZ7w+>yQiqr=Pdr1GS~XGsfhQApvU1$X~b~)nro#xNnxuWp5JLPQ8r69;#zx*4r|+n z-a8)`JvN$Gddk#Yv;&G_iuD@4GT<-i<$6wV-dV4^Qcqw=cv^Yq%SYW%Oa{wFOQ&2{=i;v zP>B_C(;q7BJJ@lck2Bn?r1wXBv_jP><@mURZ`!ev@+0?-)g&B#H9)m_zxci1$^qX3 z^R`s(-Rsver?=Ik#=GrhZdIe+7shVuiQnygRiZZ^8Jm%uq97)>V3v&*FH+~h^7XW> zGG{XkW`tg9dW!7jntPvn*(iHicl}FbMvQusR3EP%aYl;7$!yIGN^ZTitKmtj_dE$= zM0U3N#eHdPW27)VqCD#9N}eS zH}4*{P21=l=MVYz z^W4ApR=F5TcmJR#uS$A}^znB`Snj^z#MGWly1^BH@BIvY+bx8Zv+ru>K4L89kG2@r zGQ7*}J{;4NjJTq;O*LQmY+v*FQ@xE}O;=#fmtTQ2%1`;8^{B`>GJH?1VHL0Sp`$~a z$i9{xoD@iBQB@+YGq|~T=x%&Y^~A36Lv*iekzIXvOG?KlBp&sDtljaHYrHkaaq^yf zo65%Yc0H+C$!9)+tJ!JiCb*9oN-9uT$=m&(}GJ! zOlz8VG#_2cjJZoME0;PtAn87GLr3g|)ke|NteK_cKjPY3*C%wxx`v)O&(dc)Iu~@X zt%@}=oiDVlJzyB)v+Aap!Y7-?m`cYlG^*cn##Pr(NRR90wKi7KIx->y;X)M$jNN;* zH*Q_~X)m??{OU31898+R#?ih7TYHyODKn_?u`5^jC#jCzeQ}X?J!JGkkGh{T*)G5( zV9%x1Lv?$vxvV<;fmoQZ+PyNj?rkNvtavh}cJ<>Yr;a~s`+Cbng*)x&UnWi?|MhZR&HPKs%QbZ7OE^`I0Y8eKT;cXd64{W)_U}XA{WamHbF*R7{|O# zM)Qwq`CY=3Z)F$`?n!XS^HxbqbPI`We!h9s)ULUS!OqdSrQX=vlhfWkK%2}j?X{0t zaic>vK<$Hwe*XYs@4!pcxSi#75~b69cy9F>6PFqIDzda#J*Mxp3m;Lmp7&&j&y!`d zUg_?A+1C5c_g(p@`%v=9<=30S3hNNXe;7u574eTh^Woi^)sLdRf?+%;`5vAHY`{qJD^^bos_E@-}xClrbpB~x>&!Y_KXPn zb=%w7^Co$g3$l_6@ePAvUrSmyk4e7>doonZfAv1({sewmNvGb}Hr*~S!uT7^(}jm) z?duK&3wISdyKmC8@JQJ^<4|G0?pyNZ@|=dWx}nWA179fjZhNMTrWq{Z86|cU9Xh?} zkoI8EtCU>7{vGe>1Z(el3tFt4FT9x>2^6;RA>4@r;FFa>fM|WdU z=sa~x3G&@G|Es!solA7qRZ2VuYo%oDE=1s~q z-tPR|(MdE4nI{Zd(6qpxLHG&*USMJU>GsR7jsBmy$Y1OJgMfbQ z{QTPRuY>xjRrF5`eD5v&S{c4Ap{Z%npVs-WuwRGzbLZ;!?xq*{XLr9gJ=FvI_f1aU z^{)=!zpyA%y}I8=j{2*0{{LdXUbLUOgTIg9Z*IqQpYgw7^S{3#)BVuj$Npd1k*N;s z?_K}Rtw0HSx&NxkAG^Z8H~cUBKECywfA8pTE{gC}_xkrX|ApZHS8x2+{(k)}`@sLv2>zRr!Wd#SFglo>m>^6)<|(EE zvk!9>lZ$zbS&3POslmi!oH1Ms3FC=bj8Ohv8yOf}7siDBhyjBC6GBRSMIinMC6F@P literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.WithExpr.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Query.WithExpr.beam new file mode 100644 index 0000000000000000000000000000000000000000..db74135542ead00be08084717488adb4fb9228a2 GIT binary patch literal 2652 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.QueryError.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.QueryError.beam new file mode 100644 index 0000000000000000000000000000000000000000..4b9d6aaae65ce639077353e946c9b1aa914d17d2 GIT binary patch literal 5228 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 H2O#KwT0_)g literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Queryable.Ecto.Query.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Queryable.Ecto.Query.beam new file mode 100644 index 0000000000000000000000000000000000000000..e0395596f3da7aa5bfcd6f504f04ad95fa0dcbed GIT binary patch literal 2448 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 cpF literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Queryable.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Queryable.beam new file mode 100644 index 0000000000000000000000000000000000000000..0af7545f9a9e80555cfe1b1b733263e6426ef328 GIT binary patch literal 6716 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 W{wFXbXhlNGkK})Bh`t|T2mTjW{h2`k literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Repo.Queryable.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Repo.Queryable.beam new file mode 100644 index 0000000000000000000000000000000000000000..03ae7fb4cd9a4c26090a645dd18bb8ccfca4b2e7 GIT binary patch literal 37620 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Repo.Schema.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Repo.Schema.beam new file mode 100644 index 0000000000000000000000000000000000000000..7923bd5d3c87b1ece5380b09796ef94a6a2b1ed6 GIT binary patch literal 71292 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�PCra21w5+GHb(jYZ@?9*e$i?o_XY{ZWNL=qTsRJza3PV zGtW09UYVeZFM@HEEp~9&eabCIdvI1)rUBJHA9K>hHup4NW2Q_WA`Srkoc){$No%<& zsKuigwKe|1XlsRIk!6lVM^%G%vl~@2iO++wU#zQXja5BoH4$H%4I|Ek8UAVwZ#8z0 zE3YOQ0EE5(`#{k~vLVF#gb?Y2ZlpYG9~mUgELl9>pR|%r<_iF+&=C#!niC29jbMGt zQ9S?|98wHqlMBI++d~QOEg=0^E!Vfl&PZ6my!5I$@ww?@X}4h-^@+$u>E@p*H&)(kI<}ASk}XE z;i8tz(Z#oH@TjBiPiwAOUznI@+(?~Wz|#C{>|Uq4&CT^-so6+8Hh=E?gNEy*&YcOW zJi(D!f$ZS$M+M6l7MvOpqKRK5Iud?hd23_Sac4z?9$0gAti(ax1BaFFTJGeE+X&^0Dqz{HP&Hi`CSqUFR!b60ShMWM6@1Z2VWCIb&H43ntFZ zK3EQm$tvE}J(cFLq)w&Y?zAt*NyBlrZnCLj+xXSlTDR5pEWmV{(&iLNANSo>H^I`G zh{&h5dt03ufCI1BTkZPwPP?(xX|Jremip;_gs0Gp`{KK^Fd2 z#aqMoT5VIVJ2>DG*eeRrj0IX6wdRXw9oUO9D1Jrq~ARM zN$A|62bB-1(sUfJ&1%!v7Tz0-@jQPm+d%XbJ)Oe#)8ss?HQXXWq^hRJ?J|})=t*^hil4n~lP~)2i&cIG&{-Nv zL^_jussS2#8!w(}e$%vTMxYX6KTmOPA=NED%2ohs|TEdoxZ`?iJ%_%+JU8o{h+ zje@Xo`#eX|MG7fKE5^C?oMb?c0(3lb`Gs9NC^$18&LpEOGEf@QFse;}+0mVMe;6HK*H#)qu4^-gruQ4s81)X+RmWbDvm zpmd|T(<0JhkZ^b2aH(NIG*rB;D4QoWGsr0`p;AuFjLh61gNy21GjsXD5%GFv~U5a zo~TXzdg3(egP^CfR`nHCN#|@`z&;EkJYx@Rk#x>?0c(OwGDSwPb z5>>~Dg*$II`VXf9^}fyaa4t-dVZkPye22t&a`DQeyWs339*vjrt>JLTK9Q$x4ynA#MRC=5dLO=;G#-x50ZTlVq4HMC>DWjc1-uJlvT zyCiF7bXfCfvPup=ig$f8OJuQ$IxDLaLekUrx$u-WlAa#k1eb)mhsee4_DPJ;ci94{ z?GW{|a#273AfkTW5lpebSKc8>TZ5?~h5KQ9F!j{1!PHaEV5-D5>7(zEILnLIJmpD8 zB+rl$iS)`eqL28w3xuBai7ybiDBnS=a6D9uLa&6Y9Pl~3WJ`r`&jRsSu2RHy0}`so z6QqNH=n3ELh7!jq%k_3`H?SSK?6cia<+$8J?G68Zdb8VEYW8|*N_~%ej;s2o4aKHX z>P@N{rTKk zKU#Y~t7$|0=R9~LF9IN7Z!UOyIqRJqgDE9kiRyk<(-C&QR_OVPC68zG`O40`F%CPX ztZRbJ?7#JkyYr^W<~m~4^OqtCBlM!5`XclpkT4<6Z_tcUCQiwN3>wr?RS`+|6_X=E zvyl0iG|9q>-|uYYP7Zo%7@vj=E;$0U>VGQ?&@@8t08K+ffF^ZEV;nDayUbNfYn)@T zsKP6*MB#sL>RfK;Vhcpv-ari86!MCUzR^@zu8H3aq=n~B@-q6Ycqcec@XkD`J)e_m z4-y{AwZ}^spOdH%J)04lB^)L%wbwS9UCNOo;=DbAK+>BJ-nCR6^FFO*(6M$WvG_e> zg{(2SwPwAwH^JfZ>ydeAr(fpHsu*XhkEPYt`f}KupvEje{t7VXmmelo&BLxB`rvTO z4`gx5&ut;}VRzJ3;jlLxQCF1%;`*Boh5ss0J3?V3eeh5ix%r2}i1rMH5h@6UD;(Ap z3RgKG6ACkzkg8uW9joqKIFDB2xJ;>;?7;yq-%Z<{4c>+Gb~Ym%CvY~hl`vi~6GYad z9M%yFniu9=-UAW)?UN2kFAnEDkj2qqyazJ4WcMB;9PW|a5`hkoF#}%Lo3q6XNO*EM z(IAUG{$b}R$7>-EJ8iCVVzblhr|y#UlEEFr`4#g~36feqO?Eb%FSTiS^#s*u!RzTCDS`tcE+3<9I>R?abc06A7h4 zvbc&Xv*NQ0!ClI28`TsvvMIF}7|M=!R~krdD!2rWs2T8Z<<+#Rx@q4uO!i*Dcp6c> z9BhV6nu9eSa?CjRrs=YZjQZ_`w_2MP-l}ScTW1ibHa0w@{16z&tayBJ8mtX94G^WK zK`ly5w)F^Mhukp|-O73AjiCyOQ}LYPA2hma`S6WwcAG1$H={2lKUw6C9BwExo!os` zj~NDg_W2w7AT+ym^SbKhr##MSt4M59X!lMN1HjGiP0FTB(VmYdzd#CrJu(^r|+ zcuw>ACZT&I5qDW>fOA|B_Xuc?Ycvpd(`qv}WHuAY95!>51j%hCqDY%5QK>dC$+E0s zrHaP3Y2NVLNg~;Tg&Nh2MfH#_+eA5JB&NT*)$HDn?rIGt(|0kVX3nqiyw2xmj!v_M zut)8Nc$5TX3Y3OxqN$1amwjv{0zV9z>mIlcAhXIZ;5yRqa(uJ1nY|=cX7*q{Vt5te zCO1hXU#lZ}H`+_0WJUF(#w7LG7C`ifEvcjWF|td7N<51z?&tO(9y+2dsu&=!R)Dm%s@(K*t)*k7TAUzzY_fHht3UPFxI=E`c}BLHB!G-Uguey2oIG!%p!rW|1^Ig-CW= zN0R&dreQ*edX_{YOhl@cy-cqVd%~%~fid7^p|3~eoR|LM9^CT+{YCm|yZ$2Ste5`Y zF}oA*8OKms^AK{=9-<-Xsr&?HGOiODHl?@P+RSWXJXX;|fJS>KIgYno(e08U7OMfD z;IP^_lbhp6eF0X5f*v7M?FdT@2qI7V`51&^Qi{aOAodY2FN4S%@KtKIG=cUx!E8Z# z$82dDY9XC1O;agcv!$u^**aU0l$$Nd0P&M$ieq@oHCa{+smLeGiYXVVCL;8(bDkmf zHRn8=;-II!<{2U{dIe;Nd>E&hV6v>N5|hQ27S%FlfPKaw{Y1i+F2s#Huv7U;gQ_Ks zlrP$qeN9st>wMLB)qUnGBKOMXD?*-KZ*cm@lh|q&x zb_S92P9uuci(UabBF}rd{&jN**OCJ`SCwwux1H6^8jH$pc*^#yoN%I$nDCI-KImzaBg+mvLG)Xpor#W6n zF**`$EF$`>YZzxaRXX-rVMT&~AKXbllTuwHwh%7*}?!^pGaRM1IDW zJwa7wka#yWK}B-d(C$%ri67sPH90YC96Fg zG~3yZpJG@Fda)A@HcSqCISy0qZtvr;dENoJ4^( z{#2-!Wk$KrJnJEmom>l^b4z55!+u!BSL7~h>2cF&aEgYcSypc?dKIuY7!9Se(rPc8 zs)eBaxoWwkh`97tc~Fwh-^WdTD(03~nW29Ipcl17ZF1qO(eKKY%H2Q2K@d#1E~Gr6 ze4O!wxJI}q9iLfDH;FS%nCMVLA5Vg;S{$obH(oT@Dc&vD=)PSi`$ojM8s&7ZM@$PR zIHbPXqa61n2UX|G=8{GuJnpd9Nc$+2kQNWq!Uw`&vEA$rs!`Nv&MV~dm`fhx9P&n% zl^d+fqc~*nA`Ce(zF3+I_uQ?q(-g-+jow7`$_?I<0mA&LOIgfR@+FCEdsCR zHbA6dPp%r?i<2dm$~pwHWX61&!_L?g8435>#f78`Zap4rce)$Fdh0DB{yNyB$@@cM9y z^E|0I;ubtlYELFWb3EL(iy)X0ii1QMZVpP zcz8urw%?3kD99Uaugt;|d&w~dS4Xe%4}lANd_ho+@B!Zr4ykVARad&54Fg!>fN&d+ zxr@cNR#}0GRH}`YEwfHyg~O{eB~igK4Xc8q>3lT$LH90kGF9VvU=<9}PEF;P0e!%> zQ=?I;*~N_N2#3_~5KuZl%0bl;3-K};67IE!zm;FnCen~QH5wO{jzQM`MAGAy6IzW> z-OH8C97Jkq2xY;YQML^#U0^UCzdaVenkiOqWc325CZUJFszo2d9i^Qd2c>1!#o`!; z-)(gQ8Yy|@n%Pm(fT|w0XeJ=^GRTsCuIblShkCAw?(VO_r;iolmhw%aT86U}1<}xR;Y>(x>Uv}MC*$RIW(dj(gl3c3@gCN%QNbHi5&PE* zL&;U$|Mg5!?QHz3?&pkU&*}U|Ouln<$Y(whcw8_0O7^z%R`lpd9{gOd$GTL%(_9Lo z=V1G*&GcVZ`FB2k0~VPN*sR6XpjQv-%dM3V8+O0`Rf(ouO5aHRbbT{ub;D)_?YM1T zt*Usn>K}s&!mBN(JKfgZ@Qds9YMLMT?fU1gpxB{`Dx5xZqT(#KMD z6c^4n!DO9{BI&bU76_5Iy)6);pGy;^wxymtGt8yohtTi)ze#_;8nmsi|NN$0i;#4W zU5k)(pRX2~;F8SPBT(H~-KOznqV_@%Kr?K=D#;gDGo%wfWBFkQ#(5>@Llx0M75y zm{id&4SvAB;zax&xui-Q54CMGAu6m^#9td??*{R=)y_nuEw0Ih(3jlXJ~a;eA>W+W z%BRg}hue5S(pnyBxJy8da7?m8>T*^eX_c>(G|DkiuZg&~CU$a6;87^Kz954q94T~_ zKWYfC>@`6UKdx`dq^r1bdON=I#{hX=Kba!m1keDxvJ}2<(25HC&;}n7Cnalo0^mK} zk;iTb4LCRO$2AGYywh%3F5^}Hgei=4J)A(fh3wY~*TY|HUk_(&{MW-N<0wLV>Uu%2 z_0DGU5@oNx(&^r5EiX6Q^+*@$*FhnpKVQ!T#E9p=F+;9IJfq=~cr|(giyeb*{`#Y?AHxFvR|i0_El}X(ov0H_2*l-Lmj9LQ}z zCg2EmuX*1QK_QPhd(?@fM+;*#+Uhl;ewvoZM3wworVbTZZU3yP?U9bB!bl&yn76|6 z%xhUpflzgQN6<3_o`itHZ$cuM1=obcw>9>l8JWlg6fRYWpr%R(HTb{-JhI;JG?H2; z_NbqD9)i<3B+U+gvc3D4LVXKoMmHd~?h$t=*E&A|Bah=SOoTkX2}q%$cPd-sGZP$E zm1x`z7RvnCrNm+IM0{p*?c zd_9kq+P!`=SWa_BI5YpPq?wluAYvz!`2DN`GC81am{E53+cYPp1wwN;!xQPQ@;7TH zIj%=lM`X79+kI{K6o+=$ZX~@@oSYZU3@QpB;qBuW5I3w}KpyIviEQK$Ykx4T@*RFY zWfzC_^eNwAs7HlURf%gsb~hxhWr{;T>vS!j-%i)^d0*E;0L0^kSYOxjd0*G^dAV!( zywJ6L-tJmHKeTK4{5$AczSGaO?BcLPyB1{Pb}iqfIRS0CNLUl3F4R0CGMm235Jj0j ztU*GyRCkeZ5@xb>gKnDRFw1Yl(yv)oz8lcH@*dGAezP19DyWkN=(~qAKr%~;4cSd@ zP;wUHyP3@diYStvxvx7@Y)F>Ix>|T@E3T!U)bbDh&066=mNO6EU9d7Eoo-a?#_0!5)YiEZ|7NIjpH-V^DZ zGP6t=_C2QI~* zot6F|=r$L7tDR22)xLYV`9>IJEN-rLn(fw`i_6W;-eNQC_u_i%PVz(a6yRc_Gz-l) zlYT~xGqdas#rR%rc%wgC^5*9_WVUfAR(u4X^izCoAHgb4%H3+;Yj+0idVJ+EIv&=} zgfG?acKX+C>6AKOYdR&8K5N9zENNPEU7k*9f~C5I$X8Tn^n6PFb;_Ml;z(2qmCdMn z4Vdy7RVLMl#m?;DptDXpQ{tcp!Mf3gk!`R_zZws=`klMYcB5rhQ><`st?XZD;NCQ? zOO?Z_10wo;;Ti|L1!jqKaUTNWS{iPa2h(W>o82g*vbF5f=MMwNtRzJ_@3Xl3_)^qN z&c>Znr6~=*0fmWKuIw&NM1O>4k|k!*bNkByl%-1V%IEg|L8rSssDvKIoY;s|b;AVX zj=(em5TuWlI2IT5JFv^@vup+o51+XxmFp% zzhf9Cv8zDnE~l%gaL|2zt^%RQM6ROB!Oyr|MTx^+^BEQd=1;qsa~7X!aLifi`HG?D zEHZ){0Z}&{6b?UlgrBR$Yjq%N*rldxVOlM|~qy z6I_xGKJgsJ_FefQBo!?Z=IiZdGdbP5)2s*Sjlv}HP}yo`fj~SJuA=9ujb^x*%-*4A z-`~X2w`>SaP{oHT={YkBNABE{;jey? zBIL%9Q{*L28-mzpz)1h#2#U0}wdv z7V!v&-JACegPe4^!v;CGL_v;8CF~pmA;?KvW%tI2JwhxGv=-hr#V-st5D6(yq9!7C z*2jY&@Q^jqK+3u`(m=|^Vx&>JXP@W@KBX3IZ`eZ&M5#(-6{^r)mBXphuk>RqE)ywq}vyxjVMr36>kpAhZF@vpiL-mdI}I5meQ9$rrEv z?HWo{#mIRY5jWtF^=-RlHWdX9}DBV4mwD?8|lN3+XK@98wk5t40B^ zT?L7voU80Zel-q>ucWf4t|J_p%q`Xg^8!%UjM$GQO%v<~GZ+MYDD2u`GHqld(s$D` zBa=N~nI%0#?7YuVAn<~hdLr_Qb5)@A^u0z;^D7eN&OQG7qa2edxDk;X6XUa3vve#s z52O`-(HKx>_8{RA$nF%F9HRWHGQ{rLhwx*rksIZZaLrO+TM&8KYvLmEDnv#SjWc#ft9k<__v+>?#rJfQ4w*XovZ4HJ6P{tc;K)i;lF2cE&#Kwr_F)KoKiG%2 zbpUN8*c{{L_kFV}b^QH_D2*t-5o4XGI@+p1NNP@0O%YxhR)b#2$JOoNusz4Ods;G5 zoqWCCYG-FJ+b`BdyZuAbtG@Qn1hW$rNpJfFEeOrt{ek1vJWat;Em7m~6jd!TUmO}O z{~$m;S9l1W19fT$-VaBtinVq&BrhFl;4^5RB(275s#<YQk#xpAlIc-~Nh zKI-1yt8v&{o&hjoUr?FKwyIjA9R35o_votUwB0Vvh2NxGxs956pvwk=+-7+;Dk->&%TPJ>HhsxBI+ zXpr^Ias#wLb&B>Rm$mUqJeK|701@g|rk)<_XNh6GV)j{R%@KLT(>5X&Dl5_Idd+ZjnYvasw}_Yu z>60C!io=?Xb8xkTE44z1p2{Pm)kM!iI}wCNICT2OMwkB&P3IY(Pf%HR8+UNnNp*WA z)v``k5K?J8RMbEVm2EhNQ=`kBcw^P*>2DiOsp8$*-!{iW)>;Ir$dNet(kK^gCtn0* z{z~@fQaF5D-Dct+3Nux5U-;*^58-3j%r~mSZ~Q#>jTdu^Lr!0fHhcNhcblD%o?P(} zd&4b||6d6`KaQIXmzd3NKbjfo&Eud-Tbe&9vNR@D6uDHRd$@LKBTzZBYCG7ldqE8- zvb$`1Ppbt&e`|A{fL1u@6|ha@0aF3%&;>3%mc~vGsDaDGafR<`k}>Ju5|ER<=~E6uI10l z&Wlny?z|{x<9%MF7>mw}%3q&*x?vu{N#XGp>B*?zQavtHbdB31 z*Y48J6y?J?_nyePn^ZzegunwnmI#5zye$!;Px)CQgf2Rrd*9c&Bf#IeBihrsZ@HcO zNTM_b^o?Qt5CUg>MjwIuyhk6=NBl+~p=TX_=uLrdA4z7PfxSPhNbe6T()$l2()+`U z^uC8kzv{tUJHlPA{Zm5M{wcd_|J2Z~{ZoFf{nHQT+CRN*uKm*w=-R)UcI`)5*Y5D_ zIzOvtM^f{UR_o``1`~FlsQN`BKAvKr!ji{#mJeLe#!t3_z;UGa3 zS3`?a53CkRLqfqerqF(ggPzsg8T0Hn0v;|*;OM1-pr1bF=RlQ)=-UlfFi`p!84QRd zfl&I98pf}eJ`TwD=q8hVTtWj}upabjq*-tnCqRGFN;>8x9PuJomx zvZt{5I?$znnL+BPSRj)-#Ef;v5+x>l%9rbKH&; zJr+?qp8^2ysG(C)&DqACZm@K(**CKYH4ZZcQ}XoEQnS}n6|RQlCs!gpFER0Mh!R2f5rMHKv5pHutI|?viWyu2DZB zTDubvTX82E_cZv}spU>XDT4m38Neiq_ff&{&YG53FuZdl%H6Ns6pj$}9-vdTklg(D znEd0k|0IX1vBrNTIZ-HO_3y|vZ?JdBX6^NA)?TVv$>MfRFd6pIW8<6*`zfDXFd>JB zG9iePn-D}P6H=ph3g{-vEeN9A$uw0GchPAO;*dM9JqBq7HftZ=F&LLexli+35pm z{%4&&5UCdo*DTQTx;DI0ZLOPwE7DfPy_zdUob#II8#3uDrB4|)gW8ZXsbr_^8gN>w zLq(vTw@|BG4x@Q3LLO0D&SO zzZ^vkdQG#bu2Lwauh!H-?Z~WVrBJwAqE(Iy)It$q|0rM`CpUi_NEh|SCR;+Q)Fn9$ zb|Tjx^SK<2Fx%4GiwW(|WJAfF6(NV?$?m5mk)_5#PZ1|{n$mrZa7XNG>^ou^n|bWy zi%Gsk-dFebSo)Pr8Y96{M3>Fc@L!Y+JOuJJAdqZp2X{_V_M8F!F2l4ECA$bJp}j!h zE+2b=KsfI;)fNfQ+SC>a4-KWZ-=*oEOKn-`d6@bVyM@??!4Zt*A(zood`Yk7GhPVv za+nBI4pS-~M0>hPgk~4b2o3&=!)h=By)+nsRt-kNi@64q8i=Haatosu&L_^S5O&V( zcv$RZPt8T_BQnj!XVJVg7lB@yt3MORM*c<8^HviQlEpuooA}7%0xY})LxIq%osp9D(Q3E)jg4S)v)LspI|g_UjV|j*kW{lF7;P{KR69ttTD0+nJ4z(-M2?(}ABJA- zM2}}iJ+my7kijKT(c<0D;Qurfle+k+ksVRNS9#Tvj#nYk>P=&&I#!j0sib1E$Y_lO z!Tt5A=9~R)7@DYJ?y7VD!7!pDl3pQfue?|PK@(-VI~KI>`wcL1IWLtBf>Z%jLnn~z zX@jI*j)}u0FgGWH|JyJcqO4jCH%X?{Qmggg zcLDZ-E1y=QUgTphjV?=%B{FF>x(U}2eU*ew@;S5`-Ckz`?I?*;mq+NLeLG1M)YD?~ zRmVsqwMwUZbkmhYOHmKeqKAp}S)1GYJ!4QuL{dlGLHT?{n5#l8u9GYuV)9p4}jz>djykAME(kSsJsj3 zWdD6q(5~@ClzQpYAr=HZ>Ejs@_>?`>HTXkAlzgVRMm)x(i3k6WVBan!A~)@F27Wng zilzHXSMXo+gDmf)so=kY5a0^cboK(VJv*%cXH(NOx_Le?O`|*MlaxjvMeYt^@Y2GA zr=xL_l@tseO02hpVts08u|DNIoZUg<-uq6-b-aGJ^+vNDJ%=~ERHaQ&pM6#t>V^7; z3t64LOZDE?(rQ$=`Hfb$zZI<4gZ6U0+YFZLo%Z_ul#06|8GdJb8u@6@ZPw%L)2+?T zPPgA&UZ_9a>vfh|L1cP*_2}=xdat7sxtdjYbX#3j=aT-*-v}eXzRE#RmB@W`jc{(5 zeRPe(5oLnYifvBF$sFQ(oL7S_=CI^q=PG-{a|g%baU6po@L5$*Q~KXbN}uf0HyiSo z>;Y@AdfpH2`t0XqCub=gd%OB`L-}EivFvvBw-oco<#SfS<7vAPTC|WbdfPLWXJp%$ zYt8je*LKnRTOPoW6dHArtC>=7^@=v;ooUgL53D!CrG9-Y{J)@GHzvNT3961+VvZZp zmF##y#lC%7IV3S;Bvsg+VL8@dw}D1E z^uAm$v?ABF!Alf5twft$T4U)|GJ-@+5c#Oz)U2CY5*e&KgfpH)s>}mof7T0OLlHaf zGinG_sbi99fXM7++cjbL&O?r-KqnD;!gIzU_M#T8CvRWI!cCnVTkfOs^CBllP&xLW zc5v{+aBd;N{yo6fSTFU9w3m{+>yA*hSuMEcrXi0(x5$*q%HLo0y+9j7^qpXFul~L% zHa-Ek2$)QVcoKC;C=}$ACCFr9nf;1uEKx564s#!tVim2J zPV2k7(cReVopxiX(_UF`E%h(e?{@mOLRkgA?EYkt^gVWyhNRE>>{8NT;f-Vs`4YEP zsh>F5OcSB#m2FYMSDts-@@T;nnWK%=du=)D zNSNlz3}(@syt>uw-e-1(HS}D%L;aNzz>vZi2ivdKkJkH?n$eihqT<|W2tJKSb;pmI z21t20n+Bvu(@3-TNiEOEX!NRxk$2D2?9ntH5Kd8Ka7rn<=Nv^YPkPQ##J-FvY=qWN z8H14DESi88uQKmOj&r=!HjL1G?$YFLGoMH~mJcpt940vAxQF$eUUr zorMa}5~JH#K|`f1xkm+Y$9=pw0*6VZEb_Q8tiM7gzHr+~Ms#+SG@=4U zMWo$`BBjHK&aV0yQKa`Yq6i(zh|Ze2Co`gx92bG&OmW!Uh;mjGtH8|ZvBP*6;6MtZ z_Q72okGxt5X9Ka&%eddz>>;&M+{`_cYSIdaq^DKRi)8NYSv8E7sh~7}NtB34tpGY9 z>b;bx=?8Jfh5ut~NnPGd)aU3E{K`s|OO*3NiO3rHiOgTk%6@3tR@vCT) ziglqoINTA33oUWLdASQ^8-3Qpg;qEwkGsdI%3Ky61f8tEbH5sgNgm2DOm zjWxlt8HhMoRBcbmSVqLhlE-Y;qg?Gs6PoRM95^gT$=qz>{sRd91-al~d=SCE=x~9f z9Pm|6@|L>uCjl>cxdG`%*Qi5`3cU+=3V>O~pt56mIL0whTWsU;r7aph&cWeUBN;B9 zHihCHTqBPeGFs&7N1XxWNx_gH{gmCqBI&fp{61rLX3a5nJ2^a_8hEfcYc_$KiDwN} z6YmZnG&?pI@*k=vrySANd1JuT(UBQaoYyqL$X3)G-vwbnalsx?WNfB$OLyNLOI$Ex z2}`;~>7o`=Webp@e2K{_DL-C}Ff86fXJPdoNP5QZJ&^RAulF#)vT2RDE8Fe18By7uEz1pQEbOD|6ZCGFnj!ED1h**vN1bH-MdDod$x^@SI_VaPa@X>IgT^s|SgxnR zfW(alTm8=6X1md{T^E0o#5zs1s;F_FWWbg|P~|P&B7wC=XR~h#R~7#FDidaeTuP)^ zmv*Y4*irTF^;WNVLEMCt1Y?e>;n{5>mcfv0!FfVdcyrRss8 zSCtKS`WVE0#9~SRgytjMN;FL(A?RVWV}``36Q}7k=xKI?elv}H=vE%dJ)kU5LhL2g zPUj>++~dyvO_I2$e7q+D->)X0`o+YPja_t?|@zxyx}!5s2GwnYw=l==RaOBfZvJ=4yK{$-&ld zq&rXu#&8B6_m7Y$MyuV(nosxhTy8>L z8%KzG(zzJeL*kzHSqvcXMLObk1b4{cgEqtZjmF522uA)J$&q(UL82#UtVoL(~lzvEuN27tpB$L8ejTB+Rz2@Lk$) zBzEASVFwmI5W4hsvpbjy`u$*OwUNI0>f|NSBZM6m>k*<(SmgITKzEjpy}n12R~CCQ zZJ!`vY7R`;yx$}VR%cZcHjg(&g01oM_i9mEGQvl3gr81qQZmv}ox;Jmis06GX2;0s zA~12tMCIN%RT^QpEhCOkim4KB<(9cfohC8rJeYVj=KFwf)UxP8x>?s;m>^+k{4f{^ z+mNM*#kq^^PNW{qcCS$68^Lo~B|`hFG=EvMUD}Ga7%?DeRy_5HX(?Wd8~fawn_V(^ zKrYAgCdMW1sA-AhXHtDDogwy4knkerK+_|?iv%vJh;7Xa__zvb3=x07X~1(4H+a(Q zF-M@L90s)u4OV zwh4f^_rdzAoE^|vj_T$}E}zJ`nBg*Y}$Me$8{xEQ`T2T72J|2ay`>D7+YKY|dD{~9ON2AaOAWU>#c61g(?{H2GDgjq=oK679|J~vbH#FvGNSUdzVMH&cE3|7xU4?) zH%&RIS2QmcE=N$*p7sejDElN2%@BVa=Z_Ia{B5ATZeK|t>F_IwzpXVbTkNna2_(mr zL^RTkrM_uI4wKN!YH>)$e@95vLlBu$YVi|V$Uy|BL~aRUX4HPLqg9AfCsju5h-8QO z*b&Lj74u1$34D}9vxQ+as?*Av%BD7gFS_C}x@FIJ#AAqipYAja+5H`$eab#zkaYM7 zgIr+3^n-g%C;gc?l7UO)_^rPV_2`B-P_S`ISd}XC%?Yx4m_uxr?|b9CP<)v_Q=| zcae1Xxr6WNFKK!x*+D{&kivs5#yedCrF%{ zlch5}cU7;aq#mc2%?D(YZWARpSSh{xIW3&i^{&B_j+tu-bz1xLg)o$S!};fpRfEaE z^9|>mrMnPCfX^VQOYQ!zpcnjkwBH z@}zE3*Rvk)>|Y-rud@&A>K|9`<_t|5Ic-o4u%qz4}sTBkV&~%k1@ZvTiiHcbl&l7$$Fx7I~_F z^<|qVPxcP->zncW*HNG1!Kl9;E8AxDk00pt`i0i4xBBt-!!BWS;GgY{Sg60a5^}7k zMA2)i6pu?$gSyRnI!o?E4~gDS8`z2*^JZr~c`7+(mQ47pAL~IlT*c2m6VkS#dM{g1 zPwKCOBMi~&Tg%N*mNBz_r`~Pe*=nsXCxzt_RZvn+W@B$DoVK9|TPyYZovnJi8TNN$ zYrWsvjK{1X_geG@}kA z)}a|yRq1!eeGC9!Y$W(i$`0^3cc(~TjgKjRle7Yc&q1=eJok^VM@U#qs~%Zzw(s^= z*IbCG1;Ts}1RueO-VBHSi6)TfZzHyht_c#TZeIu+h+y>~i~B74pO_t66{pZ37;B6O z)CQq>09;Je{O3UAQTyUw08AzEO-1><(KE@ejIw`8!Uf5a|B3-RR|Ef=1PZey|LnbW zRGm$iFNniQa1HK(g9dlkg9Uf@gS!Su@PoSsclY3s1b26LcY;HPeDC{B-`lr)rl;?$ zH9c$f`KO+eXV-q}?Ap6(SJkgHFpuLI?>l3O+≫#eWBj^U@nV>0n9XiKF<+VluxZ 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 ZU}SLMU}R|F0FE~pC;-L4fcZZJ005zT-8=vQ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Repo.Supervisor.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Repo.Supervisor.beam new file mode 100644 index 0000000000000000000000000000000000000000..413dac7755ed3885bea018a43b433ebcfb3bbf13 GIT binary patch literal 17372 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 F007iWCQ<+Z literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Schema.Loader.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Schema.Loader.beam new file mode 100644 index 0000000000000000000000000000000000000000..f86093765c251967ad59fd85a20bf99f7df861a7 GIT binary patch literal 7268 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Schema.Metadata.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Schema.Metadata.beam new file mode 100644 index 0000000000000000000000000000000000000000..7af1ebc94ef575b14c4960b99887524211ddd8a5 GIT binary patch literal 3688 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 aDh?%7sY{x=WJeE4SRn~3sZkP=68`|$Un3#_ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.StaleEntryError.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.StaleEntryError.beam new file mode 100644 index 0000000000000000000000000000000000000000..bb3be411682aeaaa206f88eb7e1a7f3694b2e13e GIT binary patch literal 5024 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Type.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.Type.beam new file mode 100644 index 0000000000000000000000000000000000000000..3a93840c660edc7abfa7e1ec18aa323602ee4c25 GIT binary patch literal 74032 zcmd?ScUTn7vnag75{8x0g#|IQu%Ii;;3^qJRuEZK5GARIu)v~7&Z452Q4C-nML+?2UQ{7!vU0q$(-80*7-+_a>b1+k} zyJv5o-f4l398Qaojg5^0obMSIGbSd*+A}gO(K;Y2NtqKC7LyR27#3EdNJ~qJiAYaV zrY1!u#wW$ZDNCZ1Nh!)mMVd0ITsbBwF(oZEEI!IEKRP`jGA$-CAvHW+5t)*hDg|VC zd}363oH9H$EhRlNO_~rB7p_c+QzVS6AE`_WV+v_b^*+5l1`i~|!qQV?5=MrF;f9JR zMN*nFB}|c?mN-(GpiBXVRlh&5HKNkvlakOMWlE|rF}6z8GA>aOB?HFFBm_Yr&R3+Q zD6+ybW70+e*C^!}zC@O)h*tV3Q&JLB!c!B|QzDf$tTOs5voaG?qQcXYqJVWtSQyg@ zkWF8uu7vb>kSiiinG+MA6c-kqm{P7*l$4ej78jG62HMI1?#g;K?rET8zX(OD(#;Q5 z0i7x1Ba|t!NJVOzFeafoNs*$6S3>_|#ww$vX(?HLsKiv3rifMgWhmm(l`=#EH&XFK zBj*8CJW)^bm1826NoX)|ebg>Yk&qRJdXW|rudHXA^nvF9crK@FM8qU0QnG4TI1Ty= z<50ysCML!y6$$zD1EQkpB%)9iost+I7L%IjXfN%K8?v;06)_n~6$7LP)J&G8RHXRD zCnltgl13@AqzTGQhC!4vGA3RTr&4?$=FtyykgD{HR>Y+$^CPm-lwql$j1rn(G>m9k zH6u_uSO)a8sax!G30+E8tYW3=i(2{7s2rv=Jt03e9qb0_G6%_s6y!&blQdqD6rP$C z7Za(Jg8IT41?4kYSWFZ^td^1@7zN1?fh4vwIZ><}!kDO}n1nRtNM%Y*0#ZxUK;VMk zpTYK(k!Y%b=4D8beDsILR;8y!Hn-DPe`3n%?x@(X-SuX;GF^q<-~zhV?@a5J390ER z$}mM*7z}c1TD_8X1z|8v!;%!KFlQ1H0Z4&rVJXV^#55(}GCV>Ng|q`%tTL;HrJx+6 zh)j#ilDay(hR4SwfXk4Lf(fNE7G!FS387wA}L9k5CyuYg+Sdw{YR3TmLQLsm>QF&bjy!Q42xH!MUHZlAy08!s-P;ok=mZ}Sf%Ep9$tfVkE)L39DjMP0>sYr2X$imsZ2+*4GTA{EU_MZ7Fk z85dnmp+8d4#Z%6AxZ541jV5g*>KP5?CLacrZDmN*FxYq#M*tq8)_{fK=RwDfwMhZgeOE zn-(gQS&~RQZn%J{t=@aLaPaCdGPu4fzJ)PCPZ^aHlMoq~9;I|kVw|^|4E%(f40XQ* z{Rv|Si-v!fAO~!P#^7!KQOb-OT|kdo6U2@h{j4q|-uf>TGipc~N=4)-2+7E{a6UVe z5k5Lb85dO(ugHo}!UT_EXbYHUh?)r~!qdp=#ON>-s=|<$bSsI0a1YI4<|B~xIXM8* z-9vxB8@%#7JdoDs4*;EyL3jP-JdGqYeVP zJQczsOSOiDSvOowKdRiW3^W{5{aZh3B9x;P88P6K=p_d@qqw*TMPzI$ZjeX^OGR8* z6Ruosae}ucRnoCybh9DB97rjtR)i)2NZ4FtK&sT=%~n<2fK(Yxb3Fmcm>p2;)?HQc zZ)A58{~OtZ#Er?Od5ENIrmI$fWNR+yNd6-bsIyiDM;6x|xEL^Pnq_qQ2hI_R_-A8U z?mv;BxxXkn`~&x|dO+~6w*QjQ<{$NJ|ADjn2hN_v+mUMPHF~w!%}zBshA@nAF$u~j zSg|q-Wl$BgP+@^ITG!-y}ABe3DMgB2>cQ8T2tlOT7LXs8@|4XFZA;~;^83^ z*~oaUMcRIZ5r((c^9x6M@Gz9wn9D@AGC?1iKbNYi;I-oi3xrNYTdp(Fi7RyHas=*N zzQ{#DbTXFl+7oSfhJ-PO8&lQUT2g+nIbWa47fL-vh8{9ok*tqE#u3KdNJr9?-6JwHF0ho;QNP$q)mv6XTAQ1v=|sf1|HJpxj4>4xoPeYi5s zKDm4uh4XdzGMTN1OcS&!l9>yTfHDm4U`ur5>T!S=m%{aR_PAxxdn7h=tziIotq+^o7%vDvWn)lwgD}}5Sji%%L1;pWj1GJwg4tb=*|>w1VVS_ zV|W*tmrUR*499RWg|`M|R}iwR6JZ5|ZAA~Z$VEh0!9ZIQ5}t&x#BfVA`cOjzHAF%^ zj?`Vm;kt|XFnV2W){6w|xuRs4b+|-AkOErwpe`%s!OIWnjw~j+afLi9H1hJ+naw2S@J9fX>t{rW=HekCwFuaFM#5E8C6C0UVxBwm~yuFSvhhM_X1QZ=zrs{Se5*h=03hxNw+Q1k%6cUbL z&W@}(3nYZ2fM=`CCk|n_BV+{_?nL38ptc>iyA^LE=$}!wS=2eBz zeNqU|-${D1B>PghDUfsol3sSi0InXN4~~Sw&2;$XPJ}9ca>5pWgp#g=&Akd}{ z(q_0LWsbYy?(>ufPlEqwENV`xFra>6$!O8(uFF&kZUKL^TIC)dU#T z^p!EjJFtlG`<=F)P=>5c1dbC7#{&Fy%k_p_I@6>x2q!YG2%Nc=ln4a-^eZ9;u}rxP zQ$3-SAwl7t|L69DSj7(pl_6X52VJ8)fWo_=fskT&AW012LJ~j{!5pP88Y0Chyed48LuV8A(Z$D#6(1}AY8wRQ>X+8fNw`! zN03AqL)}V;kL#-qGb#Fg5=ssJC=D+p6fpD(q+5s!AdW)7bB7Qo&<05`T*3Az z0z^lhillIB=#&?9DyooBLQ`dPQ>B0>Z>A5tm2B&13hxH3yrI=dJ0gY=M+)KyoQP4N zi%}|Fj6%8q5=b5DA!Jlj$78IC(ZA2B(IgQIM$~=079TeZ<|h4K8q10hN8vp{gaIHz zyc3ZDOlL4-3WIioPEg2X zBTD>@QV8!%%uG>LvHhcptf@*WUn-?_G*AQ{FCN3wiivb}>UMuL^=oRHuA*-LN0soV zDj6P7PJg zpvJ4Asu)zZ8mgK>O;AJCFsO-YsCovKqlUuy3~rJ-PM^U|R>v7IxGCy50fU>Wjx%I% z)6{WB3~stQt~G<3AtmCt2+!IHZj8nWEG?J99l)w1!K!E45qVrR2l&BU5{SfU6R?&MhS7{a$GvTPdHy zouN`RR4Q0YEC*LtCg2Kp5laNd`Mi-id|rr9BZn`N5KDqZIl3fWAmxqZ!Q6b9r<#Ste9aIm`H#l#}C9zszM z!xvC2`dzkcoAQQ)+SP39M6?SEv9QO zStsD`B9;k^@gBT*Jcs8m)R5(fcnKOgILY&uY6x>|R1Y$E@Zg2`K`;Gz{^9TxNf$Zu z{FC4z)g{T4Pa|!ZmScHw<#tldU+@VW1;AwMbI+n#Tpn5JEAn0TSD7NFM1)d z8cbw0;}^k)t)^q$3W#-u7{1(&C_;|=f2vnV$D|caW>i#2ltP#&Mq#4FtJ>eI#={HO zxADRaMD!w~7%d%&ZO|VN^v55T8zsm%Q3i{M;v!-t-InL-&+FyEOSIvEZ$^ubm8j)P z)N&g%-DNU{PL9#HuEXS_Kxhim@mZ{#FTiPO$8N`cPR0 zmDe^^78F7$sw|*mC7A9i5iglGz23MGZwt$mRa$(Xo{*QalVCN4_d;QF4TZbIWJm$i zTDz85*EAW*z>o~Uki^K4gsdTffzXDe2fHmBSR{dId#EpsFcDhHAECF1GGYhNENdFi zZL0C?19QHe6Hx&JTG2G174(2^fB{{P;p^;(jm&`l4;9zbBf6n!L^l=^+h9aDp;3{+ zSc+gQL35i#Fmjujk=u;)zp04WLf7FXig-y-V@p#FfKiRj>h`|Dp zIXb{S*)<-8_eBuecAIm7y8xC+UNG_7)8#bE5KwXz3N0kz!~r(cu$BaENilqD5mAn~ zpP2v3!#P*Mu4t*J*>dSiQ9xnqhJ}S&Vdbf== zy$TBNgG_Hbh5I7Y10i;h#7-N&RE9*fQD}oUFnp&IQEB5$?6(n;#C}-*?uX^?E|Dv- z8^d==i2WiMrQPl}91ke*aJS*pxgJL*A@+!l$S@Ix@1gL4Ix@V26LA1+?Ld>Q9iVM( zAK2Pn4Btze(7q-Ussz$DM_~AjY#1^2vr->GA|Ir1bcU1(mVIa~akgo;9RD+P9A`rZ z6#NxB2Ep7t*o!IEsi%3}P&3?h?3KIQ~=}wLzmx5S|$aF%*cKAP{mmBD)28yw#+~ zTeKc8gC4JA_~oWKd4*mFuFl73J*fl`zD14qWl(x(;Ma6Fo@{+4uyxnw9kh4dAE?b2i?ENxXcMQJQIkv_e4B* zlDG#ROs&uNB*c9IuQe_EaIiH~3J=|;#o@zN0wQY&hp&NQ5L|OKxV%Zc5u6+ij&2oH zGhD9WO%d^sQE~?GdseO5#~XSj|9M$bWQt%22ZHCEC8VAbY#RwH!L zB3iARB7K_W$Yz!=D0~#KoC&evC77Nua}xWC!eanC3k0dPBHjsjgPn-iVD$A|u>N`h z00MLhFLD=fY$Qaz4FG&}B+u0rlD9DYHEee4VLdRIcnAC3x3IT;1AE#!46lRA0$zwK z@eae^z>2sYrcQsT6oL?MX-@taUN0fu3&4Qi!MO?AmAwaYAA#I(;sb1jKfw0)18jdk zVEBg?TDUn(+cv1yM>y|6`6mh=4YKEf?4O(Ve!`7-8<8&)!ZW;_$n!u4$~L0)TpJ3HOO|pl{Huic2FJ?GVca(- zlFM}_jcIpa19UuGY)E6{D&9a6gVTye*u?*W(~3qo3HiyhBEDnzcRjuzI%-45`|+9} zkrVNQTTHfL+yfoken`kR=tQ^qWejp+KP9BG2hSIrgf^c9H}DI3Y=c~ehX97It%tTB zc^bnT3BJ@17P`z?h6jZw&^$;E@Mz1P>xaXM5aWq8)%~%UBO%+OV=&+*#)?S|4^WL7 z6AfSiuMorc*99uUMPw4MnL^AQim5#YV#DN7B7O-#KdU12%YVYiM1HW8WU?XkOUL! zFpwA%;|yehiFFys3={JTNr8Yb6*3230_ai;@=uH&Q`-a+6Ex)00u#3+$yNeYIQ+*E zptzMa$#1Igk5fP~A8{@s1#HyhN=SIM<_-*+4g$sc|El8TO18$t1}T3^DPY{H*pQJC z$HYbqq=ktgWU2MgSW0|>O^6We7AzLl7>UVz4km5`mIfg~+!m|>)}-*aBMUKbM=z+v z5Ia(!(p;!yR!E9~i-`640tqP+@LcHlIvk`-g;y^%&5TfZ6N^|X<`kX=ROSH{i$bz9 zQ0d%ErL&4kC{RfUDv$r5(wU{wg~Bs{NkT9z=uKLqK@lCY%k zOdwGJBqW8T6_BuMCSj!_5spawDTNhFf~4>_Sur4IK0f}zSB)Y+hgqA`9eaQkU z&tyEszXa;WQiCJ)u|RDBQ0rbu_5f-Sw=?L<6@6KQAT3`xyH!YD0Nd*vp!a}kja#wFnW?0J@u{2(oYWJTIz zVtaT!0TIF$6FY#naALfLBX|o(@D`5XEgZpHID)ru1aIL8-og>Qg(G+iNAMPoK+6%l zg(G+iNAMPo;4K`%TR4KZa0GARh>0C#yv4}yoah;_keLD5^bByO@CnenB~nc6^4nqq zUVq~g;r+KQNYo1qKaX_fEhc+n;+{?3*ATr57rQnc7;-k^ZAIuv4K}5)BLxo*RMEMF z7+!7V0GFlkEc=VgB$i7bnu`Z;>5YkdGekBSOW}x#!Y9K(buA{{Ato_g;oSkeRYLqd z)cLnl=TFWAetjr>5)#3a!l!@;6bxfu3F#%^`J*7og##d@8816h&b%&|3Tpt1rXqUA z$(aZ$_NMS@K%x++_LGqP1xMfy>`v)mEbfn96wzNHQ22CBJ~>E24hZI!9|2OG4K?X^ znBoCVubU`*2D~8^28)E~<)+w&!gGOg5eVm7NDc&xrC)u)id-Zi2f}(3kl;86Hf=X( zq^}U~f{6#R()m&NOrTNB$HaqR%z_y!3IZz%0xJpvD+&TD3IZz%0xJpxD+&TD3IZz% z0xJpvD+&TD3IHn#04oXtEAj^`@&_v#3|2H46Ax}$HNZf(r%#N<{_4063@$(&*O9>m zs^dB_xFGs-5pl2+3Gb;OseQjdh8l;%R2c?B4dqG5A((gw)Dl6hf4&jHP1si=;-RWH z4zth@Sdk%U2oP`8iMCMn=0QA6RW*+pt>LIDCJv#8e7JfW)223|QqqqrGlj`r2-9P> zuM~$EJA%UJfZ|tzS%f)~QG(tAI4dN>ZH_pSN>Oi-hd(@c9Fh5pw54PiCJskvJt@4H zM2AkjMX=(5H<0N4qODYA(ctz+#8!@~WLrXs~yce4X60U|CBgd1Yq4dgPstH?t_CIs7r z2YZBL;!%!dJT1KwnE?JQ!A6KqWYBU?LdMt}DI^m_MNnG=TSX5*CDnr+!4iz^U4C=#;^^MRLhnXn;?ZbQpzl1uV~`_3#8|p_aewzNzK~25AYSZL z>y*$=fw!K1aVAb->8DcoLLj;Uh^7^i=|D8SnP@tk+X51ZrZ*Es zNFWLnt$w4J&Qi>v@I^pzBT&pNB*y^7G0hamhqPI3#d-SlURkvb70-re z*p{mH&f+=x^in$;7G0BQPcQ+3CcO6}Ct%_UAfoEf77hP0nhknYL5_vvOgnNSd`QG~ zC37(GL{txoMVL58wd-Uhn9E4ewDGkz{au22`m|%7MB&SQVb6+*CxaGH9GODlg`mtW zV5n2oT>c8iiA+OI1kF{XwIVpJ?*kinNZByTwtwK99@hl0M zr`nl`^PI>6uz@wd?abEDYMuuwo(pS|*_e2?+HR~=6Qpn==fF;BZS!tSJV!#V{cATS zo(oo|+5|Q2zQps2$$XE0@0#-ev1=*-LxZmj(XMGVM6gnbV5JbjRzU z!kR27^m=g{vtC?HuNT)+cqy6&WfZ;!EV2T8$~tRu{qGx{^(46g?0fA$Ka~*EZ+IXo zZKUurAh8`tY$_zTf}^8f&Y)vRnD<-3&DfG#V6(Lu6K|%^-PXZ5GYo<1RE`eRTblMt z>(N>sCVTgP)Y{5+xtzi`0Lz`ga$6y}16b}*?F@kB4w~h5U|E5QD`=J*VOqcagXMOb zCE8eRYG(OYtsN}OofN(qSndLry9&wOz;d^WrG(tg?2i5+@ou&`y!O}v&38ldy@ljH zXuhwx`94+izqr${KtRWp6uuRj?}6s~3&}&!{E(_Sbodb6;e*iO1DN;#-QjX13w_r5 z_d%=pAl-Ac4cmr#{tvMav0_(Icm?p?3w#e3lE;8AydYtYn1Syxn(tBI3k$9zG~ew= z(f<|SqcmT%VcWs*{j0ynSiZ+8d?)brlVRc$h2%-Dnup#6wqc3Z2;h|9EuBD1MxFzY zOTSnEO`W3f-KeD>CO%zAo>6bPhi-|y8q?YXwe};gLhCau-?J3H7h3NFzULgtOYpI& z2iM($8w>r>ra`0)0$}3v=(AIQ^hIRz$GzwTY#;jt zr4v~V&iZn5zy|$Y2K}`s;SB|O0TW+Xre$sess-8LO<*5bOTo)P@*MQzA_^u_^vREO zBW!gb7J6#_ukv7l%`>zCJzWOTkOR0v;rmgKfzMS( z@;aCP%9s5*xi^;!Uq*1y_oD*%u9w0Ozz4J>ob{78n$G&UAhrjeeuv43jr0qmgI={lpX>j`Ya*gWk73sQOSkR+-jlD?LzX7 zVG(&J*bteZRDj;P%Xm@{tO~5Whbws(6W;*@(j6*G;$Y&tK!I(3kHQZFw*!1keBX(D z0NsEW1~SkGm?b(d{D+TtAR+I8{2*@)g&%>&2chvpC-MHCsgzb+S}9Z zYXNegq1Wu5xQ<=f^2BHB5q5%e?0hS~UFc=Lm7!5EO43*)Khe8?wDGX9LBn6}h zM74oc)mK)$ZxntC#5*O$#NQ?44|r?IdYB)M4_)h}D} z8yGCj50(g^#YPH03*w!TVsehe2Wt{fjyd{pS@9a1#PiYkL%ef;i{}GBkC1EpL%h!F z;+;n;P&M)BR$N=M5yYeU(c;N9Df|M6cb1RIwd{Pfe_NHvwHZyybtwEIR5}Nh@JT+p zzgN;_EAc428Y-QKN-YX~^teSnda3{>@zML^15~*l+lrv@OVH{9v}$SR!&m!G&WGRp zo!n)JCq_;_t+>vRn6GnvTA>eGkj0`^jl2~cjnDv}^w9^s%k}BA61f3|Ujh0Tfxe*7 z#}K44QcWa@j}ef7cZhOB0J%p1Fe>zE4L&!;_4;?s_2<)F09?NFk8?APt8U3TXtSFi7E$6p$i(OfY#TsgDUd>q8Eo!fz&XKt>Z#mk|BH ziB}D3Fa^Hm5MwX-h6op0BpO#t`V>|ptck=2UJwYh{$ZZQ}`_?y$Pi~RJ7p8Np3^ow*h|(@U~6(k(eBQ z@o)$5w`G{z9$xOjsg?)YF3KG!{4U_{Kz&EpfI>0+%HbYh?gGXcFfN$f1-@|u%soCP z@5x%fD}~<&)O`@Sm&C^ne%(XA3Y5Fi+la0r3V%Qwgp9&#pxy(h*IS0!$TU3Yx3V#L#PocmE%mlvsSgXY+A3_sf z3V#kI&!A*rbIE-ufy37qQ1To~1~DZCY@5Lp{t`-FK#6~I32Fns33vr1FQFumDLKTp z38L^?D0u}X!ObP8%@7J{4%RgCq0L4yj5fH}P&>rcXBZ|QPCwVdbEvD&a4v@fzi18s zE6*3kqzV%f(}eJw(!@+aZ~a8m67e!?sa z_f`0Y3+byJQibTZ$%qs*eaBr-mQT!V@9SfrR=s8Inp@QvsgF;*o3#kPyvfkd{MI>0t$ncZa-?g;D(y zNJwu8UIPi$UkgdZ!l+;CAR(HlUn&^Mse)14&5#fsGe}z@q523$wuE3*e+MK)AL(;H zB!ow8tJL7b0IOs^q6QyTgO91f$UZU8G01LV3CP&Z6{cK63^{_~pGIf+Qw<4dYnVbV zW#KlEpJZU{Gvp^Afn3-J$SYa+7UbI?LI1FsER5>R0C)?FN8_*w641xSLXLEd>LdH2 zAfftwAz#YkWsomnVWi`QkWd|@r#uGFX<%W%bC7I^H`2{ZNF*eLNAspD3!@zM6V*X; z&Il4369YCOn9nBE7U`}PBn0cRIclrXH$4IL$wmD^bZVJ0jiHdEf0)LZksgrSAQ+MZ zn{!zFV|WH$8s3m2+8QkW5%a9!#gsSEdC20?T-Ai6qF=+}5icz@`~w!>8**(m{3`?l zyI{z5AgSa*`a<|X$Z<9NGZsG(a$Pn2Qx@+7IZqA$g2nqo-a-xkoW&1<9O+TTSIOWx zb0J4|uEIyM_?eKSF;L-=zCcdSNJwa0RCuH>gpY!R#!rRs4IsjYK+=b#!aD+p@TeUc zdlg+pzKq2uLylsN zs(ulR_k|qAF%|wcfM9mZ#^Xr z{$isvGIg8o2vcCA0p&@Tw1$#@UKys)fD%2`m0;)|3IQenrFMh$W@0y3y)poj#2PM<;*3TN zG=U{1Ll7FS{}8JxAgu!zPo*ixq-FBiJDogLm*Am7xYrF`aL0C8fn^fE-5fQVmK8(l zX}aB4fI&l=%+w5kaUDH+ zH0X#MrHuX$kLcn5l@SG<{57J0()i~fYd{B@=J$VijQ{&yG>tL#pPq_`NB=!5Sne8` z8c{H~=pL~DzsB~+e{^hFpZgyk+5f%|%)|jh(}J5H#>@gzt7F}f<=J^nB7 zR<|sWL&Mb-3Gp9v|Ns49{KNhK*Ph}3%>koleoOG`aIBM(5)*|^e*VK_cJzP63Bcs} z%fYiD8;J@2zuBeJ%OTamO9KKHR5(VjEd{U)V6M`H_y#Mjv`iiLOfOT1z3MJgo4NTB zmI10;K{L5<`&*_qa{*qaMobhcLwBsg-JzLWxG6AGPyGtN%$C335D2SEIHk+fM2B6O ze_!~S`LDY}Gj&mI`p&*gTy+s1>WAJG=&43xY$g|O;Du*CvzpG-iH95a6eE?W4v${` zX`=gb;Yo*n!ny-Us2Z!vTF_-osBf-{b_gw1RhtS~s_5odC}&&JSHQxfE=`CFcfrDg zHvIqqNQ;(~+RPoI0I@XCWuncc%$XxR>(jMcs2y7ZQU?T4a1;Q6_=uVgdqxPLi0-^r zrWSp@8#7E?xM3H@C?QjeUNa+ov_XB*ZMq#66bj>k^b2L$Q_%hl{cFo;5~}K{-%SjQ zSSSpk3w5ASlU`SqDZ**b$DS3gsD%Hn+>SKl)~hG(>|L;L+l zkPt7lSAWRDo{-nDum|Mo=N;;M?0Zm#ibyry{r0uRedk2 zzW-F;b6#ZmqBDdGER4=E&a-d}$j`AbI&V44!dj4@frR9QjB|>CvG0%{hXj4W-a>u| z5>&vD&JMD8q?-dQjC8OM641ktTnL7JJBE1rvG~(0jPNG_-U|uQKMeUE7Tyo}ZWc!6 zyI2_IJ6Ra**|)RsCdeyTcpc>G=Mfv=8Oe-nyo`mDAzuv%`iqT(d?gEqL0$|A$%AaB z2oh?G&LbAE`0kL;XJK?MP{6_x$n#lP4Ea13wt##t3!6bchlNcbpUuMP%w!fM;6>Yb zE(;@@ozB9KA)ms+HIQesFtV>qNFXykKFF(pZs{{!1S9-fNYN~e!?N}Ji1sfJdb&-z1 zW;jAfutld~quy{=JHTCCcW5a2xE6%-U& z()GFEWOUFynif3jGB>w^f2G}@9`nfD0#0La8UyiE zt(=X#Y8W<1!)eB7#DlrbJ@)_P*~DlLr%%Ml7!F44u?1D@`b$z@3)|4w468GGVM@w;P%Q5fq~~W=t#i1u|Mu&v`!B?mUN)K8 z_~{XKzpAS0_ODR~Zq(XtwfeaK&47ucwz%$;)_zLN5}P}Jt&ZB7{ho^bFyfH&y~0n= z#vh9;E21Lylu2cG+!{}|kDhx3T+ib02Z)Smyi@l(*o zd*U1YKMkI^?oO@MfY09+1*Psfw6@p1592={@J;=8d%(n>3mxvoW!<}Nv~|$LZMR0e z__(px&KqGJe^tM>yR-Stri)*ex4+i+R^$1%w-YNKHMaY)v%`=0>xngIs$?&>|8kq& z`Ofwhshhvm52*i;RJvhMwr{EB*NJVHZ_Rv_T6A&P2aCiFgFahy{A~1N#Jh-&C5AmJ+1Qd@05-(yE%K?yvoSE zhHcJH8)G%~iQB+_6Uy(uyt?)D^eJSV@3g)<4`+bNX&Vp+qapJq}IN^fgl|BY@>zSoYe{rbzV^6~kM18wKlN4q%O*?a54`HWxNcKGj=CLgZO-8k@m zJ1@JV=YuYeyI*^5lhkC&mF;z76QkGMYE$&S^YYYBw-$|j(y!9B_F9PKg1p}7(ZqY3 z98E;Q%MP@kx=46%cyj0ITWmu#y!3A2u;fmC&4yl0-~?HIx_+iM>b!emg?-@L ztOL&qcR#wjDgN5>ZetxG{XU?pS!+{l@a)$&2kbJWGj`+NC@$uNXag zrGKl>U!t#OV?!k;AJy6a^lw};>C8)ilSy~WdfmBly|8-v@_WM$+$g%@a62sk`}O(u zF1><=)p;8x3^netTbaAMEP7r1lCZ8D^1@8hOn1x=yA&Va`EJinwdt*g9ZpCe)%a=t zTiJn^UwdBkD9s786MR}TXLgC@@!>r(oOTTJ(%euPZr-zC!PccZ*5l(#Y8vn@_i`sR_2wmiuXyZfwwBT@b0|(D`O{haaQwZ@(7e z|LImjNQi+!zY`W+U7z23n)}xJaVreFkiGi5ftRqRuBb!enh()MZwgv{A2Q))@RqM{ z*4-KJ{bh^hh3uQpA1Q8}eC(M~asQhA1D!^UKjqnB;mdDhq_K~$obW2`xb#=e_ybog zw5Q%AT5{d*+8>WN`}2K(3$^vB;7d&CFE{7P?mb@Yy>)qH=FBNuXN_%n!OtV})%5!d zZ=0Nc-pIME|Kv)r`+2!*2ZzEvqa%zuSzg*Qxm^`!#^d2ycLq(EKJS}N&s(Je&ON8Q z^J*sv-aA$XEP81d;y=@UX)Z5vUf{ibCYcwnJ$Kp~_BC|##)=F4-bPvhBSv0u9HF&m zL`i?Ga>*g%*R?%vx)|i}$}>50WoPS*@3wb5`EvXFaqiicQ)~URTaI1fTPcW1^I3Q4 z=BlBae{GO&bYA2ahu^ijWT|nYW3(8vs(KXfX`4rs_f|f=v3l80JNKv!(I?%{cMdDt zG`g`(yLQUJjsBMg9daKN+ivROmhE(RAGaKC-0g6y69a5aw@tpcWPE0bUCug>TV9i< zwA?nWa!AKtRKN`Rp5s!N#~%EkX%kD*hgjUayngE1MxCka+m7s_Q5ap;(yD5ey-VGI z5f`TAwCbzz<<7fr(bgtbXP%1U=6gNu?`ibOBG@zgbjiBFgR54-S2LS9Q@oU;-B10T zy{vDUOP!PM_Ev_<&)y?KCdw~n+_U+$(mL)o{9V;Iq!TecJE%;#ybxT zUIvvJ@LEm^vDoKX^{X)9#?vr&@k#gC9z6#b3;SP)$nNkt=)>oY>5h0+!8tSXTbtE8~%2?xye=P6k&~>G`ewL%>;+XuJ$HX_5Mu{P^s-_`fd<%e*2PY++6WmkR>RYeZJw3|5Me2vORmoF2_p?m8x_)VuzHXlO+?&&d zNq1lGIA^-Ee@(9ASIZgeA|{D;)wFXo3o>*xt0I%G7F0-EBuCY>xwG~9!^Q3`-nH(R zx5H|ec*BBucye5g+`)RAP9JBTxglwhtM1m?m$jXC)pyck`+jYMjLbF+smUexXwS{H z;CfvcvD>)fMjflELXDGk`@D56X3A4*au+_U8dNsCu0 zQlHmmT5~1V(j`^;@1|EJm%X_KVt3V=B${8TIX5@8RR{gL){bum-__TgTl!(ev*Fus zjK5TQ>Y8tsAbiH&{DKm*(Pe%W0r^9J7lnSa&9X-A=^9-wFa?WrX{Xj?vT}{a|P_!3wJ6<+XQjZH?+$>;}qD6$u@J%ANJT z-}@EBiGEObte1&_`{EyIuDL@?hmTeYK13WC@ODA3t)Jvi?#vH}n)7l``0k-SZ{F6w zlF-?p$X9p8_dQ4Vx!n<-@Jg9FHDtgh(Zh_vy*ECq^?!DRj9p0_Ov>|BO72$pdgVWF z!FyN`U=;iRYqB#6@7h(XZSm`CGmaSz<7ew7S~->8iY@f0UGv`k$oA;0%}Y+V zXbkUkW^Cx}9s3LFqcWBqJ-zXm;^N93r@KeYJtyz%a9{*skRX5B`4PTyqiAmH-b-)3 z`gOJQg3%6du5tW3OLN}V6Q>h&Doz?P+h250d;SuYQ1Kfc?gT_z0< z=3j8b`U|h`&K=NaP;RTItpl!jhG~c^yR76a*l+5t`M^6@czZ{F`jiG&`>w)wmkJFV zLUw2l5OXz)o+|4v>b5m+FRz$eJ}r5{7;2r; zV4c@tPy30Qe&QK#=bwI9sq1v?yFtZ-axCOwuW3Uh#>#c`*F2s&SXSdSg7>y`H9tP^ z^tY_yJj46JemrMi@w6|eSJzJ%{nfkZWqHQr7oqU;or>X$dVV77vKp74YaAgz=Qd*h znV*-!?KV&Qa_)QJ+gIZs3ENDHxH03y@-G9NOf<|FcGg%>(sicI$N8cCu5J3_71w7{ z)({+t@qB&-zL{hH<)l(^xDXDNyMp9n_Evy z*}1H8hv}tR8?@{jTo?Km_sbJW+fL>V7d&2QBsuf7$X1pf|6O6%Yv;}LUvl(q*Y(5t z-4VR2Rz5W~e8IJOxmYv!0x2}fx*wahq9%UR(jeu)d4b-36Ro1_leb=ZAAN<`^+B3>0_@MP`vM$cf$ zJ!6AqyFv`z$5tvI5C3`FsBwW$K#$-<&-=fgr5~{J{n3y8FMa0P=Ldf8zs&FK_jcnB z*@T`g{GOdZhnTMY>79k~q15#DX19hp?D%-LXyK4_ORsGa+)BG`YriL)n0s-Lx8X{` z{yxFp7S6W8Z++}8`6<+Ah2>qXm*2WyAATUZThBQSJ72zTpM7%jjlF%3 z_U|yhjC8chUNa;qcW>1)&O!Gf^Yb|TLzlX~l4N^+D!n%0Xl!zyN&PD~B(IutZ1Kil zTR)6g>hi9kU$5cMQbGs+imI#b(xrdTQ&tNP7En_wHAMb(!)z<<#{KjkePsU1z3%%q zR^9FU23N8+Ma#U}-W8+eTvMIBF4OvofwnqP; z*Uwq+CJuc%(d*igFG?Ni=i@^QH!aq@7H;VtUlzLZ{_=Isxt)K`b4uNlcj`4yLm*z_ z_{9E-k@Mm!*?Y$3Pu`kTJ>{0G@vESyMMv)~e$;ngH{0j2zb1xVt)9}s*=3V?;$FSv zJ>%9Z2kW1m$Q|83Ce^%S|6sRD_!RbEspW7K>CWdW#tva#2c45Y8v-+GVw?uE&ZNDY@w))+!3iq)i zZuxFF*NyKID4%HBt8wuj%VVx_Hr<1c&vQAaICgK|^HmGG|FYw64Yb!OZI$yeFXuT59xAyEE?nIwS?};$I&lPz>F5*JV@Eo&~ov3p+M`$qAeDMQ8iY z-Dfr(a4Yks##Zzx+tBX%h}HM&c6>HViJZSpyl>_f*~9$F87-_TbuQ!G8#*jF_3OF( z9<~2zmz|3?TedM-b$!{2PIvB%O;6kL;oE96dF2Q9Z^=5(r|l`-u%&LWSN-PoSJRLF z)an8$`-S^a&($H-x$>;)+;!RZv0IZ)O_}dmerDx7%Jr^rM&;3V-?N8x`fj@3;`7EN zNBhsE?U#%)DyV(I-*RNrvf{37ju6Rna^3e_)CfQJWZ{sj+S~m%B<(qWp>OVsj?d(J z-t+LnwwF!PlcIB7VwX31ba-z)qwTakf?e|0ACAapPkQ`e&bYt@1I~KS@v%-DSGRXq z!`m%R-;RAw@ZMw-n-^qpaOfV_OuS)F=H>@)27H>)`q|MZS)wssqwibyjBN4!a-~<@ zv{6_tUN4M5KJgWEIqI;F8O{M`CibmW{c170V| zN=cYO?+tpDlfHCWwsalQbA{zi3%s3uoVkw4<5E1-W2Kn&0W6x|w;sQj_|Rmkx4pHAtV=Dfs2X5ta6LUK>d4BJ3UYG?QI= z7+XoZ^qK3jRPd;!({jNo`2P)dIo5Wtd1GPW!ak2MgXrzm?t6Uu?djcb&(MBL_dBfb zn7-u;5MG;-A_p29((*nSIMWcWJj8ZfEZwAv!ZBVuyZS zdng%cD*3*{smwMx(^6<(>%H>9l79DNRv+5B{NaH5E%o&t2TuE6?3GF_)l+_pcX59x zAG6&1VVId=(UOj3vBx^iOgqre{&TmkLGy1^^nTOu@z&Ax9Q(elHfvpxy!gH*<#hUrpT@&RE;Am4f0;ib>cBJ4Av&wvq@GUvXKgL-6&)1r>|%a* z(6LG5dplT`#eC8#jk(nFi5vE8e0QD6KEvf&Q5X6K%Crugns}MG^2&4R$k}O|MGs9E zTt6fq75d7PKd$O@-uOY?jn3x{ncBEK=ir0$i-cEiE&8!`OZUyWGq>2hToA!~*z$7T zCgMP@tM=E-VM~s6(d&J@jlkfIU0Z=c=eH-jWc}#u;eL0^6Vhv=Gk@nrWmor_TWK|O zUGJaOKKQhF@#r6AMp=W}nRwe>u>2lrrmPK^UEy}Ux`W2%IP-IEcVh;BKDn@W|3yE$ zAMZ2VReROIJ)?d^_Lwtq_=b1$B<`iQ2g$3BgF>g<0I1l3P9`}=*JY6*_@Ic1u&aSIvKOz%a7`i*`we~x-?uFy9 zk{9lt3-u3K?&O>IjIGEI)@_l@>lzlgu&&c!vtNaI+iG+#?TdKV(SF;U%#MdF(>os8 zfG;jwcXh40%r8$}A_V~#}$(n z)(7d~g37EL?_!31+*jMM!)(x*^x4z5h^%fN89RHT4ccCp`MOFzwM#!<7cS>Ufxjl+FpeG<`n0_4N5UwpeGhg{sj0hT zyP@Rtln|cI<|LnNy;5?oaNr$)nIQKIY{0&>wT#o66n)WYqx8gIgM;#m7P- zS6d%iG9q%ptFb|S_22F~VRkurj_10RX_mgXBW4bCj%igeGIYm`s&TVg)vfAbw0Dl6 zPfyQr4R3EOD!lsEC_vx8W@yA>tJfZ{GwfbVs=w=g=Ke5>$n|pzx~y-%?RfIi+~Z~m zvHO0_S~`9~d+I`pI5f*AWuNZ)9~{#~J1WXoo5Y1LC>_Ah+qo$G&Y4s7gSyNV&fjV= z?3Ym4WoUM&_dt{VEnU8rT=I?RHG4qit}wKN!N)Ng9a zi(JRo=0up4EQZYETdF z+V1_Gzg4H7dg9?3^?v1%9$)hZbZ(rL@BMl4((-O`QOiq*@bjh#uAhjQ>D0Z)gd^TP za(iCv|7-?+x{v2iixtAL2TJ7=)yCv=GYVpMUu#n^{aS-)YCs1|o}^*U zT(jP4!ub>1ulgZc*mLZqp%tr_o9u0w^#kuR&-UcSQ(Knz zoY1H9yv9W-onwmfLFQxEC}Ggh%&P&xqQ?opGz+GuKMxbkKi%(3VSoL0>ys&V=-j<}(JcWT#{?%^VP z^}bCm1=a2g)4QxYa`gVjGQpW2wR*FxqQ8}nSnB-ZWX%=RH?uW^2PdseZk1vDOteUw zoA>KlZr|2~P1Q-tC1%PKamBYWXPswNmA7nre4OyC(ph<0C>zpY>D9ACcRr7fP03K4 zsl+KC+~jVzL9V?m`uqFk?5;{~v4|7&DCbs}nstp!h9>q%9{qY@P|atZRV{629l%OV zN@w^eJ6WZ-x^57c8?tC_=CN@n-LvhxCLYV!(Ry(0Cd=O8uj3oHE(xf|`f(zR~d8*QzO&l8hZm=`ZFxD}mwxbC2F zvbP~QYQNQXTg~XFmzD&%4_xy~;mo+`!@Q~Sy@M7A zy97<@RI#PDn{mjEnA)*Jhpr6#Qh9&(wxrhAe`MV5=%#&@ke_T3Db_r3N00JdBl&W+ z-y6j@Ueu=_U%$WUzt3d-Mf>8!^I4mV&Qv+X?rT*Me?}nCO^V%aSC{U5KOm!5VC{u* z3x<94u?=k5k6hT&_HwD0Pm*Qlv%6-08|m$J?p2@5$Ml~s-u*CI(nf1gSU;T>Q@Uv; zoI7FADzyFGNBEZ?k6L8T7`~@+i`Sn2kF9qM5~T^&2FJE-d(POlZQHia*tTukwr$%s z&dknx@3$Kp8~Y=(t1C0AqPw~~Dl(sZx>IpKVhdQ%PKWM(=afR1bw>WA?EQV&ZpmYu z?r`b!)GVA_(IsjQkkDS*gG9gO(QF^{9s@&jQnE*@ z-f_yoEMUt`s+ViW=KDsy!u3op@HcFPB!e6=$gIWsttYD*utfGPWz4}r$)@GN0y}>2 zQ9UQ9ncAEdxR4ovvor|?UThfkjW01>J49JTT=T65o{Ga9aP}P84Z?s#hmWu4jd;r_ z_h=VA+`));xk$K6PS19cZR=OGS|b8HAN{4(NXqiKPlJA#a#k_~c;96z5v=z?Cbq6L zIqilp8EtMOyr((2?l0K2?V@?M2Sj6<{%nvPVeW+pzYtKWckb8~E5zi@p&JpgMIj=n zlnoU;S1%hJ5PhkfbYW^ic%*JxpMtnWjN2c6iP4{Z4^fk5Mksg_oR-)kQRHi7n@pqE zmbXa=7}xZVo#{@$(P$lg{Fo*u&qkZx@-xV= zgOb`*uuKbbHmo+Lq{1VDmnfqE1=V6Nmboci44WOvcEZLoBMRGL(_|5u&?{;YnKD+g zeOE2+Q>dXlJZ`f}3Ar3UMOp@kz~Yn6a4y6me6DkN5lJC+=s!if_@Hp!OJLeLxy8TNBaI7m?-N*nM@Q~lr#q*Qh>mUj zhvuNTv%?VJeirtmx)UjME8d!ld=%`tOi33aY$WhJ-nDk$#d2wq2^G!{=$k3R)JhU0ws@(#lVyaef`onp@}AS$QGRqO4ejpkr4*cHOczeL5FPVr_~Xph?iDUWN$X;au?G2q4_6qSG$kw# zn1j_kZz&(DG(7={!g5kvxh#J{t}gVf6@{Xd>OvbwTvTfu0)&S#h?2NJG9BSQDKqk| z6hb=LgcfzCTM|SXJUpfSJTrbZyjpWaIW7$lMIpqj z|5`-Dg{~Q(qOPrD`-0-|cIXy~8=yivmdjG8z_|+6aBw4eI@9VgTzx}@XhPZ=wP{M& zZYmBt|L~m?d_lHCTxq=i${!%64+!JC?|{XNaYM2nm*J>;4ymK(DvAfJDK@)EWz}%v zTC?Ez)y9#rOO4hsE5wn(;%{CxW-x)hlBwXj{+Y}O*C(=WV$KkO0bIp_ZR5H`9nj+) zP)zQUXtN-UW?2=7*XS&S~R-0pn79n!9L9bdkUR7Dn z6Jx?oj&n;k@?uw~1#7l;{OYepL+WwpS56`euF^bz#0l54CK@BILeWbO zr7_Q$HqBYg^5-l@t=VZ;+ZLzB?9A(~m5qG0oF+u_(5x!%@kpSnhgKZvA^5Xu3ivm~ zwgBxREf4BR5p67Alk~BRm|7bAlgj4Ff|xg;{fIvbwzAc2JVV37YHN5G)u^h$AH$sm zRpxd~wIoaiBKN4K2FJzx*Me0fd{3>{5uORyL9tD$wskW2H!+vFJFURBDiePPC!Hms z-^>wx>fCGU&4&qQ1x8a0<4EDisldVkN)6*6oN2)@cl#v0h$97ZCXWj7-7SskP#OFvO+ClBl zOj@;pcvliFd!uQU$Be?|uxJ?4&CGpf;tJnOq8jgNDK*PR2$?}D%LpAZo@O6j!WgbB zGp>zfEtJszgKkhME8JQi1Ro7^h9Kcdca1L=S_^ejZ8XI+Dun=sizBXfrKR9sxVSL+ zLh$>Xl73T{NZU`FBs7jZ<1V6a3(}BRHpYk!T36vH_<%tgX;%8MO0+aR|4ca&5f8da zPM-A$o9p!fFe?UT*Y*Y|H4b({aHPxZi((;qHpyVyks*5Pmj;4E^5vGAalue^q>N?g z4Yhb&Wb(sTt(u4R#hPe z5LELYGa&y}S~PAUjxTc7%2DBZD4Nj!O!2K<*csFI_U6oOYH(P9z2=eh4+L#Hr?m(x4n838jLs>HNAR*BL=6`t-Cdm?=_t_=l*H zdnsswd*_M~2&`5V_n{nHZ46+`(JvcH7oO*{&_us(+tee0vhJ3ZK|MMj$}O}gsr>+R z1YN0>f-!Ot6)?OahX^457G1Mb$mwV*SM~Igr46&_r7B4jd$t6JLP2x)yl^0=`<;l7 z1el$blysHfMXQsU)1BAGBHtPzDL1640-9oz1eEHc8o#_TCq0?rRsn6xP4fg};V;ib zz*a*Qt5v#1KdmPa#(@H{bwoqtZ&o8q`yXVk8BI*xn=npCg6f6MumS^XUJHN*yH-bv z`$nOJ4{`fewF&!b`&al!yyO?i+ex0jtZe*45(H7s(|j6^(ZLnB^tIDYq?)Xb`)M#|RL z(wd6-LG6@-`yLGI93EcKrL?xFjY|=IH!kAVe;VgJE+An@@(sH@nkvYeNadYs_5(jo ztj6Nje;xmCZds+E9ijK5rAh`Zn&KY~rzT+&mH?`^^s&Df8CG(%Q<|o5EiJp}{2Kmv zPKl_3vnH|`UpFdYdZ{1Ur}NvnMPuZab3L)B4`K~D+G0;52aev*UI3~eW=T8P2X0>| z-Y@z3enGN;H;#);g76SGm#N?BcU1(0U!yy49$j%Piev1u9FTe<-G~^NFxlEq!82krVcrW!9E~@p?FTofxpz6wJV9p98l6Dcr%lWV?ow#c zOBg$nIIfXHEIncuf;&d8g#QQoW!v(oX%(t_upp}a@4b4!l5BD~v^a0PA$(AE(RdxB zKAA;>PSiSCCM6PHz#;MYH@#d#pQ=kkD*M}^l$>bN1gn*wXwnF)RQ+odRJ}27Z;Myu z)}Zs95|K-Z{x7`@S1gwjNm_bAK6&zAdN~P;VqXCLe)>oEH^cn3GRX;bgLY{v93Du< zcDN>EN5ZQf*Zc1U*N%iQ>58unp4^LR13LY+47%~=lN+M9N9cQ z^A_hx3Wq*{olcenru}7uZ?m^iA1rjIIdxTV6C;>=Y*;Ms^6iJIxvOF8{5ym$POhQ4 zSYKJjh$r?%L=VbFCmZd@CLhaiStx^t9qo*B6xqDz4G_cAnWPnJ7B^=q(;I?)!o{uM zO-hUtcs+R52^>*u+bnMF*_OZ_0j5yNqNxotxTcNii8OjH2ZT!w2ZU<|2ZVDbM_8A2 z8i&jV=X3g^a#TzPht*)Zk)C4?nhbV!L^`W@+bXk7&Wg&K90xxxp&#Pe*$H!RWeZ?O7ecWw@cu-cPk zYcKDEjUq7R*AUTfUeW478I)^3&kHn5t>+jNw@ab&g^jwd5V4C!mGkz;@H&sI0XRFN z9+-q#2TKj&b=b9zvL&z-=-XzJoYh{^8X=7H^bC3jZq0>mw+$>VP zZvoo}K&`}pttR4DHHhAqh-W-gCQU~`NZXo<+COUf3nY%mEz_c;%F;P+-Zbm|8$s?L zw17y(2sHwB8#O4U>nknN^oc;gc)nJ)(`lS_zR=;$X8XN~=i=sDZu|qdBBq?I_QKqY zh%SP;=P|Tfqf|bq$`4OLx0fVSoR8 zS>BY0^=(l7^j<1;mM;qT&XHjdXu$grjrUL}d@t_nvbN(3fa?HmWp-`si%nL7%$8JKxN zavj<6z~76rN_ZS5fsDn}4!6?J?C5e}dI8{|4rrPSIjV>VaO?1|AaGMp9{bZx&t&?c zsQj)vOtP33({YzSXA1fZ;>iD-YvmwtY|O+#=#UC;wN@*i08iE(%!QT0R@_aPF}^{n z733xB8LI4K{i~V%H+-AvkQb!L%3$k!r1)De%@!A96<7<_S)?6ENRe!>)7I26{6aBZV>bH@5Zu>i*GaQ$rOeT zK6kRYox2EEMh#%{6O*(i*hV%aWUSjZBxFv=wg(2fKw@{h{gzFdnM*avaWF+7hZ!pdVC`DK z;4N8&Nde;%=wF% zpTZXl#2Q=7eL=!2jQg^H2V_Ud+Z;W)e9Q)o@PKk-aJQJ6W6I+An4zzqtuL8ze3imS0# zL@&tlA*;Vd=s}&F5JLx(5|x7C@^H9_q1i?LV~btPGsp{Jc2f{s18A&VP$2c4`~;Q6 z$dL3R7#h4MB*?-$V@HAp>DqDQN4$b$>(OKedTV2>V)X>B z^kF78G%0Dw#E0ZrB!Od(UB+}s36yN5LH`@%rn@*mp&1I}JR(65-kE_uLb9Q{2PHSq zORX7HreiEI%o0e2+Jq#!-5+-3YsQi*u9X+}9Qgl(h zCMth@nl%c-aYz6sntga^lO8Wb&(4+VX!pi_Xqy@*mf2u#xFn06{Nuqb&XLGWFSCZu zdT=3)P+7%gN!A$ez~&bqKG^YyK$xx_kWwdPZP8ljUZ&;+bT3coGeVffFa42> zP5fD!eH1tb?*7g#I40JcPkM!njqQelWC$M^mlo+W;=i>|LMhDKFLj|HsCeEiXP~w= zqACVR=n4;EPNTVQBpPLn@0I{fMDE_sT{1cRGb!%YkFQX-oS}n;^b!e+=ZvyoG-3Xz z1k1!6eVAsCv}E)L*fR?uY0tAdAW%#l1bZ(G#XGEiiwxheULMPs7YhjP7;b$%6%{h+ z%tQp#?T=DZcC*)FqHC+{4eRMR;kifVbDd-dAFf1-js&_b=>ugr=LU$1`;PCkvmnPq z*Xo1!>b^`deZ6r*+Ig&}!ARu~Eer0!jJQ21DEdrq{~RvJp1%HkFV_56fdSYXyMwZq zjUwi-JEv2M3kvMTylilN6|d8aIeFr=e;s=tjNY8|O=7c^)ANpTpbt-D5InF5WtUZ$ zCoreV8;QKlO6JP#I=uZDtVDv5x^S=;V%-zEr`b5>vV8TTcaOn2(*5}e{O0D51Pm>X zwpYHGdkY|3rjM+uM0paszT<&L(IU+hUJ>XZ9BSZI{+MV~K|2$ZaO=Jf#ngd`DTspx!}~fJs3%0Ud}e8Xf1>A1 zS_m^x2Mn>_s0;iXVy8IG^8I8!So-x5)3Tj7fUalG?ZWbp-5Adx*5}T4k)jiF|IN_; z;LbOEgkNnP`H^Rk^iXAQ{_|3N92(^Hle63qOhX$}z&pZ~nMBd6N{qzNr>c-R*j8a_p`^hIMNNshdayq7~A){gV^v<_S|WHhutr4sCM3d+@P=c_#CqsI~M51uIZ#uX6z)#yY(sBAj1; zaSZF*#OEc>6SX;3vaTDvlh>-w)5@_JD8>)>yhnSfh<*b$BKkL>Xy@;LI*G1&a!?Ig ziBv;T0sXzKsRetW09%Q!7;7QCpnhdb6{PE-opZC72q)gNbLlKBZplMru7BXyIkJc7 z%n>SkuHRYY?>PtW?mby1VBo$a1Ea0IvSsH;GJwQwD)rvOGsRxRrR3keQ4Uh$*y_q- zWp%SIy`v~fss&8qeThaU(S_mn@Nb~ z08}Ug)pGhVFP${z+it2kn$)0QaP&?6vI3367;w6%dG6qg$3P1!4oVFy__Wnv|A5t? zKx;E#t%#V5sAxooTzC1L4;%(}ArzyhXqOm|`Ad{I=hX$K3qvn+eVV}JAFqdrDz+W#XfY#Pzx%0iE;}wP_T(70Ro{6f z@9A*`F&*Pu7cmC|Z-CK|VE5SUYIRY0#(Nl~45}2$Agu(Yq#^({PjhiF%8TNEOC)5Q z`y9S+KPT(KusA^o_85*69^hf-Zv*5nNO6DGac4qFY4&=wi7ZVKF$ zI{_}};#wOB?;#h0RF~W6z}W9no|suWfbd8E3a6Hi(X9)>+OHLj9_6qe4#`3rEiPst z#!a`4mS{kgQ?T+>dsIm(oR+egM9ZjzIS}@9!l$e$*QV^(>0j<8tmz_jp6yc-@5sfl zbsko`+HINDY`>O_lx}9t+BzY8BZGMb@! zJe^&a`tnVV4lmvR58*1t`Mx|lslR`S`H@7(QS zLxGByy5kcE@#@=dk3VTzi4T0<*gOGr+83(r=|Qv!liCIy)WdjF%KLZT{R6TC7G!3 zRs4y17m8j;+p0aGFzTL|h?inj7wfDx=cehjfO`4U`E!)4VNxvky@%~UOTxp%GF7z~ zpbaqzuX(>*9)5IzQI)Own+)^spcn(60b<4#!cjKg=IVYHFs_B`;UDUbHy3R}yxBfk zrfWq%sT;+3XJ9iGE5S-j*G;!wkB=x`I%}iC%{Bzinlaw&Sk#dMUoC$sG!-)5Vm~d$ z^16NZorxLhWUz*f?ZM`kC+AhBU2nxY3y1q92MEkJTyqdtFv|6>oCYw;9;ytHf6Y$Q zwrmh@L@yp%A3i<@jx9k&T+x$_!+CZ2I<{cJbA?R;4shS_?)l?5-oaKj-DCa42iA<> zu`*k9u6H!M=(spvsZVRtEF2q)#MX&7=j}V+ktdGA-GoQq6 zbN9mppk4&cRwpmv+?X;JY~`KAj`G&jc1JU}6@FC76i696`ic-bq#vab!aBww;>Z1Z z8?oQ%-ZG*KQdz_pkhuMVl^!Z?z-xawxKs$Y2cKE4#139^8dgn$k%aBLl!}d=X3Bn$ zI_`gPHJf`v3gkESgcQc6Yx9%X)2>-i(9C^di$6|>wGVRHv~>!6`LxslMFei@MC;w% z*tu{wFz{B=Dy=Bz6v)vK+ec{$hASsZ%isJNdV4L+7h_)>{E9Jh2wM(ta9Qh^9F<$z z@`mu$weC2dRty27JqtCl=8}GE5M3b5@5q|BV+or3V!v#JF2vN+rei7iySjJ` zUx?k8*B>UtwZllV;`jGGk~z5j6r3KYSR6j4TdN<3vKxm(qa0c1B%Htj+WW<`J z8zXoUbS{-YC(O>tLilE1X@3UXPP|v`yIE9nuUnoEOWZPMr_ieN?GV|X zXr)%;3a0G{3%KKJSN*@%Cx0)3m*Hybnto#2_cC23JaB`~#UiCYXW}9x|L#+kCoK_H z89YU}5yOGYg;x2YY497|VYYK)vbYGWm-#fHYTTCl$dlK~g^VrhA^5Dz?Y`380ofV}5qct#GHfdi%6_*LuUzbb*ze#iP+AIpKF9)V)Va$o5Wf#TJJFrZ}Z zWem(IrUSVZ(A}B<&Ggox3J>#!Ro?d~KHl7tCo`sZiz)XxHwm7zPUb?!7NOH*ntOu9 z4{bK)M2Qq$wW?08;HJ2i*woJGWqNtuIKdN zEQn_c+v&MVarF80Qokhk0uSB#4(Q!^K6_9HHzAyU438kaeU^vG(@ zyH^fy5;81E@E|CrK*od0p8M>3s}joQ)aFdiic+Z5ynU9 zNCwkiQQwjjs)qw_4d}~mIgc5NDUE>Oxmu7*5hGsU61)|s2MqI^xHuoL2D*pufVsTP zn$1M`SMu~JmV3*zQ0ya`_@}dpxEzlkY6=EB??5ab)__<{8_fkI2X&@LBUHqv=Byxw z|I%=is;8_~`@>=~m7gS;-rr^*gTzu;TXAi&r(kw6lu6H={Sh>jNe*VTC(G^pyxLCE z8MUQs+J&kqa+cYplb5DUfOBzdD^uXpk>WOP?D@lI)ZtX zuHb7Oic0#Ef>s1VjSqVYyqH|kHfwR5HznU30i9K6yp;K znJJWj3%0MeuJ^>8Xy;N6ijJZl+`GynUc>PHCI!VUT|-ioGvV1DbQQSSgDTXds~68h zvrCW_p-YexxQaFirYM(BLa`6dpAZRL#GBv4hycdBKG=@Bh+47Ym^ClK4w0|U4)vVL zehTNr6DBcPk*ZAxRDGoxq0LFvtAcF4+K3Fz2T30f$=mkZNd3M@m=n3>%;9MHs9^DM3nXp7bx!>9#MX=2wJ4iIQ5<>$*GG?2=H zswa_YJph~`gPMFoO16}*m27Am|J)|e4Wg_sZsPpt#!C^o`>zus*fwvNMD%rAyh!w7 zxnB$GDl>dF{%!QrB5J zbP}~v{Cf$C-wCC!<}32d=lZYSyhZ50QgH$ol5j73>%A?Q#=k1Q!et7<_B`eDEcv2` zxYnwbo<6t-%>n_E6s#b&rcIiP030$6sQgHhGu%st+?ItQ-3UNx`embvqgG}&{a^hL z9!yH`6QkL+7YvTanzNO`qX0nK{tmmT)?6{zEko3v-NdfU^wg$!(PSP;5A$P9pMj6h zvZ)w|hHPz75dNDeh0Qjf$~_8tnTEzU?BP1aNo1;&i0&T{MNV8^4g7x(J~FjeD1$Yd zWL0*SDb9Fzmg_pcTY!e*JFhqy`o3Nle)%Ex&yS|me91CCYfSP@#QVNhnVsCFql9|-$MoG<#YI+iL{erL2ak0=8R3LoF}orqo@ zSdXe05V2l|^4y{53SOytBr$YI^Jr~k^XPCDB3tLbXFiFby*8mG--ym;MmGnp5imFm zOz#B!x~;4OcAmCzFvk_|$y2K1Cwz|CIDgB8cYpHUB!KcrO+u4Cu_;<{d(S7= zK@4GRv2~eD_f1>>i3YUW^93Ek0CrN&yj8P79;R*biL3AJgnb0^UdlC=AD%CEQE#HlC3S9BINssLuJ=b44ZcW~{h}Uy{!OUF&W+|M5zD-e<0mHgtTB^KJjhf< zxw4;`nJJY2877?L?d#(Uku?z|1wnF?@Ugx@R67{q^y7JQ8Z8y6MVki3<ARZ}JMdYST$cE)u)iEcL`&i(}2CWlk?{8_N z#G&8*ilv(AW+MHPWw|ay%=3hN{%82{OeBIsAZ2gYLYyxP&Zx#{XrD}q34j$nEM_X; z?|P*8&pKsWPXje*2?AGuh6gsAT1|9P?b+IwVNG zyR#8a_cto1Mh6zl8tRMR8Sg_hXS$=DW?%a?^NYV68t-$tsoCtai3(4OX&dSr zoE+}*;gj2NvmcS%BwoOG(7zmDo%YzCvkD%s z!gD~X6!Rpn6w8~w(8@TsSFKf|i&^fSa4~H3%+9}T@x-Pl;z2InIN(HynkUxhvU<8D zh|+DC4`5elVF7YI>AC&C30U0Vos+n{z-dM{6ins+JW?19FIZIet1kw9ADJSilCKAX zjVN204Rc$XJvE=kM17rck>r+aMY+`D&OxqkLbtjuEJyiKt`9cwNjR-G0j+l5?zYH#C)XxLlP1mq9d)ql z*hk=N_#ja*^Ur{pd|r_pI=R3aXX<)HU$kr^>Myj|l=@&Ko7J`gy&WT}Dk*R&;37oa zw#HU{U%%xdgl0~0`!1n?B#I|`8J3qlsa!iCDgV#Yymvjm)oA7bMoyZV#`j`f*rAWM!A6qo3sz`_x6g}lMGPy{8r z2BKhWhsM0Y-y5Z3N-wrh8(I!1Ht)FBxqRe~mk3%A zPeJdOflM|-9?WtTUdGfDK^>*jS8{4{lht?3Cc(1J_VvM6sKVr*gJdy9GVB=m ztoE|T-lfGOZX4F#zevmOT-ODzm=oXdds<}VKZl(i{R^;4cImY>{tL1`@pLpH zuGUAHL0hGTPwbp(@$yQVH4L*%#4JC*Nh9~>?M8~i{vR?O{%>h(nYQ}OC2kacXa0AJBN#{Q7FCNxg6_jQ0KMhYQ2GqXyrz+GQ~v@MKn$Z7nL)c9q#DB;fQ9 z@%EyK4IeGWi4Qej2G63H|=^VC;$};oYevC#&cfqyXxjLalc4Rrt+jqciTs&E!{HGZdoD0P-{M#-ebd()-^n*adxDYhDis>ILwz*Ps9 zW^ufcOoHnDaHrX~lj+z=$IpLEQRGahd=ohXDgZyyJ*wp8E^GCACHK|Tv;lb%0HaOU zwtK*)#+($3WQ98W7eh$lNj8Vn(oFumRe+^FG?F{#MD$?X@-ZJFa`35*MhYUER$EAP zK75ro;y?k9mb!cRm0a8@VUwEKf1TZ*p#u}Pn}1>Qd3|08?L%W; z__>D?+(#3WiDJD9>vx1A{Ge>aOLv4ev`1)=D{;~2v8x@?Hy4lLS3vYjQpaYxZY?E* zdlw1C_d&P_RgBPTfKdpOB$Na8Bg`xtSFi2wxhyuf;l;wapqcDI8x8A5MjuPcp3%%5 z0VzFXNxX4?GrfTfN{I;FyA7x=Yb0Lcf|cT#(jt*qNnty7gyh(9pyNA70JQaJ=T10D zKTuY6{G!(yupcIIf1U&4GB72!hiK7@?fQ#^Ci8B?J^=9T$jjvBv?8Es$*lxXV|CkD zvUp`h{t{jei>Nr%Ck}n~S^ybwy(OHHJbvD=iG*p;h4%v6Yoc=kTX@OQJinnV65GVyYvV-mZl+D;<=7u^cIB35A&T;$d{?dLG!v&>4H;B8H}>IZXFcNW@gF>S^ zHO@`U7bD4a#J70*)4XAdHl$}+Gs7zWjk|!}$4Vy9G!@@^yRi0$PwD0LWXI0fEN3u- z)+cQcS8nWQwSpQH-> z!9r&7Ooazjq1=~sEyOo?R!dRuCMji@60{0Tkw%549S)ha1eV#0kZ*hNmX)POcb|b! zqZW5oZiZ=A%tSH1h|PmnLu)&(T$%I*N{6M>z!G-o?0f;b>`VwAf(Ks+_Og3EI#qF|#b}iO&XQgPH!B1D z(jv7|*&MUE^V4~RATz>0Vp{Ab@l{mCO6{bAI=r=rX6|g>kvk5?3KfIxV+l1>2)A+&FZ2S$AucK6 zhbrQ3qPX4dnHw1_-go%7+)u=>@Npoxi8LxTT;zTFqAb3y+ zJr87e4^MMU!!N}xu|*Sy5R)_=&`})dRvh@JI8el3cJpoSGXYQ8C2P}i{i7Bv`}WzJ zjERt*mIGO!1UkZtTavGLe_qWwrp-wum@ ztC0Lz2w2!$M`zo6p_6@Eba|le)qz%I7UXq@&XVq<(#ZM^Q8@(I${zh$*};L8RkKlk zLB06Vfuf)vce0M-Xy~PR(rWr)bp9$+dR$NH+?(-pXwgxGs&`y z9Vqd(qsz8yA?LYmdnVd-#-v!^@gu+i?ntXF-YBkoB8Gsi_jn0E%6&erF5az{>qB#G zAf>Aw4vaU8rXgmWp?>3N1A^U_#0lvp!3%Vwu!mj{Od%G}gxBi-1;P$V3HgRZJbmYe;9Y|1VEiy#ANGogbi(PY= zY@6&?^dIuZLcX6_;^qy()^*Pw)ymY5O7G#BWpXZ?;!Dn*Wo@B~6cWe-0AfDYj*Ug3!oAUxE$>d`@j3ji z+QKc()N3s>qRs=B3wqW~=xk*%>VBU7b<5oe)68#jsa91jupO|$nS{S=P*#f#8n| zL-GlKs{Al{dx9qYJWdvU5#HiLKd(nhRe3&|L$rVeV&R#ksQ=@WE7vnSyppWTSI-|% zdLIbJ9)FP(6zVKjuz}UM?2K>0zi`e_>VF?WvU)~GqYMz&7U{4KLNvY-yEuM(YvJ3l z;oYqOKONf6iCr7;BL%s%Yh=LX>|h1S$Ee^>B% zVta=Bj;hWNYfl@#^E*JK{d0J1YDIP&Xqf~gvP=DSJ8luS^k%|?ilzGr3Y>dxdwDRy z+}1S%nY?uM98G_1QJ*EFsA*xLy?$oA`8u_2Y8P+nc7~W5wo0{c>lUwj3+99yb0fSr zK-)Mrx34(6DY6*kvqSf)?TVv0!&+kmVv?xWD;wRh_CjRk&LGXu4%ay)vr?QLvdS}a z*&IZ=Pg@37_mmaSv#PafyJaC`kmv}_wxdkPS@8Dnb#=-;p#!}(8!`Ctk%cLv4QJfS zoZsQ!{_51<20_N!Y{ukFrP}O%<7H1>E+fecG}_Uy2~fkMKFHG|#4q`4wXVuXhcs@@ zN)gQQW~^Of$Hen~_pX1Ib&2U98;Le{oRJ2pA`b>ErP#A^QHJ<15t-AT)#aY#DcVoG zF_A=f9`y0SyDp=4<_+5!5uJ_BhqazOz15y9 zud`3S$%Rr7!o+AEcUZJ?O^* zvWOfp&*`STvI*Gw>@DMXiyd)0o9QfdhT8P!_D4o~hN4BIf(hTT4qjb?M)wTG@)ff^)ID{Gp;)xn`#tw3mPvC-`cd zA^JJeyO<)e%d>V36xt7gr-soJbS1o3yJ(SR$S~PTnm=lZ_ zf3q2ivW}&n_t?d&$+863CSXXjR7ntMpGiA{*6NZ9G*U*$LW|ck+TE#>2<35@MAT=c zFt!8ny7MCx>fYw-ZN)cQ(7y z!Wteswqylc(!w6sQKzOv6VW^wnc);{AAkSr-3x3_4|5!}7XNkpuf>FT{Od9;oK#Ee z)tMgl(3}`{(4tKq^T}ddMV;9F&`k0&+;p2sNlzX3(4byw@*h-|*w3-Ue3Z^AdD?Ux zuzJdf#_i$nHN&Ec>eGy&djn56dR_mB<0)07t9YE9d;GiVtTtM-RrC7ri3UeVlGW;wvd?FBX72UO(<;a^ zLq?;nCgUF(z9nl=6C$I_n^pAEZ;r|Es+#0f%yJ|Cq64 zEla5sMYfPNSwcySB|F&-GZ_0a$gWZvYmpQ}WSLTNEZMg#jeRZqnmySoTmHjvzLWpx zl+*dX^Ldc_SapdFP-#lKe>Q9aA*iFOn$*qGv4cT)q+=Ya012AyAEFT z(Nh^oE9K72X6+PX!kP1xwW}(p8jd<0R73TIP6^24u@1SCv5f_V#)K4t-reL6sa{3D z8jT>KaY=&9h?J~y%|a>f^xI;wTl=Vfn{U*z%1CmESCCWQryDa|=_V|wKRKd+nvGsw zCf6oUnjrj*k@?yrg053Z(cjShnyLGFRkehoCq3q^w;|5QKUVoKT$-)q1T`rYmdwb! z=Ue1aXi;R#t!<%79O*B*4iPnP^PSB)XfmlRDON_Yc)R^HgRN@^9!;RJh7xO>|t;#(zB1z*jv+fm2zsw!1&2(!Vq`EWl6sP_60Z+kVgPR7o zdT#p{p=OVJFtDg3SpGJwEeSl;L1<5|u?Vxt5*wGdB@^QEUIK} zaJa0h)sb(}#l~~7>{EMRJ;GVDL(C|m^E%^bM95=Tqb|mkY-!-&QIK9JUYAU*_1aV? zC~w-U%?7U4*>E@B?U)an&7guyWU;bUyu8cd!Q`x&AoGnay4KTm%2s*$(wVj8o8OJf zR;?LwLQkIMJG~^PYt@j=(-D%+TyQ%0l3R#j1xK#{G)>X%_i&{Z_=A*k`@Y!1ZDzJpqG@_rm8Vq#=Z~Atz{J z_ejn1XtB|U!d^RO>;a}xnc^*oBiK%^E_h}v#;qMwlMCdxNc_T57-QE6N=?7d2P_Jd ztnvlEXfTnhjJ^X-Uv8R~&ZmDyzIJl8wWl>U!nI9#7JMeek6}%H6hP?`sARw7SJad9 znyuq*UGT?~Us#@*Wt4nKB`*wIik@HdjA%$>zGJ|0LWPV&gR0_1QYn!ap^*Ed!b9&; z_l+pzYx$oiqIz?OIZGqTTlovSxv+wHEeTLbS^vc8BU4-_hfgP*KAdD!N*_kL=d&A^ zsdT&M+}h2xy49n)cfGyF_ux)5hIL${Q}wE;%Xbi7R#z#K3?=E_o2<-oD2Pp>vPir4 z9A`rRsl&|_Hc!c(CaI7LWqGJrh^)*#9OF{*eEp&+RCG1>&Bayo(F2qg`HG~c&T25@&w`W zl{MTb!H>5u*cdyYmwDAiuf>3KZum-6frwl%6H2RjuA_TC#luI$*4E~; zue9%q@`eh3O$ zyFR45IB;2ENbCMPBrOY)$aGGoRxRqrOqs|%VLF8J^K=L^ulE~|`d0}?(afe`oa}U| zQkx6B&n3u#FNVV<+9Ipf>eLdOrVq1okCp)ru&SS@0-U|`SpF7M(7j^qXjjIA zQkC{_Vl^tmym#vOXDP|{C7(gDsD?oAjmk5{@4JoDzuYs(3@~CczEB?3JjcXL6DUc8 ze_Vp*X0qu1tL6JuIHoHf$V-NCg66LYHZ%~Xc4-mWMEXHIF7tGsb_XU+xUiPPA!kL z@=H}O-~lN1sW&lqJlNpGbBITfQXMgGOB7s-I+lq^G;~hrP+eNpe%bP9-g(y(0(YVK zLbX@wA$Lzo>^m_7)We;>mVJj@W`_K7c*>;Rxtq6jWM$BA2BWrOmJLxo#&_Y}S%A7M zx9%ev#JqC&r?E+7086og)5A}0FC_Au6F(8BxZP^)T{wTbRXL5|qy61_Vvx6D?`nNqt5dLE3kg$lOxSNNGAh{(+B&DkOyDps87#A=@a&z}T|% zv|B_l?=gW6`wF+`(y9WXqf|}R&1Q;lxr&MMQz)`ut))tuC!r<7gA^EIFjFSF};MtO3t^PV|+MBCYbN zWRujBvFwd^0xZEPd?x^E&3m{NA~-Z^84p$%>d(iH%P|CauT`+gfYL_yn9s9K%h%ty z9DAAohk?Z`tGlkCAkTRU5&wd2wSy7;USXwwu``qW{{IXS|8t@(@&GZwQP>S<~*D@lL%y=$eY~i6G%e^Yw z%*3heK~`QqDG7lPLFSSRk6SO?)~R9s%vaOX@ZRvOzwx8Cm&J^e=g%b?b)}{4qpoid z;w0DgwKUZ4H>@C83S#(N=>NJ}4^OOy$~5@amm|wbv3utR)HvN}TkFchKhl*y^w>cP>{-*H8kvsI^lo>;3+>c??#;L>Y$(V05dM=3VzKkTy!AWD9h7 zV5j)Fv;Kg=#DH*Sncxt*<45j=@myFApti8pfREkx%yFT878WQRs+-t%oC;w_#Z%Ko zCh=Ueb2QJsM|$ueZ>FC`TdRObMu*EOEe86_M~!Y3$BAi>2%bBKymC?CM4@rceC$yh zKkjZy+vtW6Bl-X%2KEVgXI)jpkn862r|oLm6@BMODX-G|-l<AHh%}jMlbaKZ7Ol`GvKstS?L|*=c1bfu5s|5V*}+ z!xVr^evOY5=yZ1WKJn=Ec(uQ4c5*?QAr2|pT8a{;WYGZbY#7B=dzl3 zf!>SHBQT=XArP=n-rtpZHkkH8f{K-DwrsUF=z#`H zd;=>v!ex$$U!6`Zoon3FEiGw4nUZ@T-gh)+y7RZxBQ%l^qRyX_&pe|>aPWyxzyq66 z`Z(J%nt*H@Khc38;|mtb{STb3ALW~opvET@bU6+IkRNkYCplp~dsh?qqOh3!`gw{h z^3O3G)s!h;_PpC^l2EXNGgluYmTQEA?VW`g5s4wSpRkPj)tdvNR zQo+KWU>e9&|Ah7?ZlTzVoG%qE=8VyD_0%-a-jy2CvQkoBp8&L+SX&*o(p9?7<)F?c znO4X-)wZ&TDnG?j_f&!_D77Z2$Rj+0hr#E)eb}3BM}yGR0AinREC1i!J zDk|QT#zxS(T63M7oA2fI6a*H{)n34xJ;n{l$$(i?#6f0heYqoNZ}}gfK0r{=r1r?R zDjgDMWZ!nxJ0rPHaG3r>*TP;=XPk*+j~2>2=BREQy$c){s`j}aO`CeJlUge*bl+NA z0z^oA&XVKNAtVn6gA&+^kfzR?x+VQ^llkGcOf|u_4;+LaNZlB2l-Tl+NjJw0E+}<1 z-CT;Q$su`y>^Ojm8t4Wdilcp%VPJi?zMn*c#&YT6eBqT;4hN1K#wM)lw-2)CoNr?A zV==$)Tm*K|B86))8#dz@ z^#&)$mzkWp#$CXFU6|{5>Iel354)3$-^s866c0zrNqP%UZp6X9S1ko)x_sm;T~Vnc zuFN_bcV+hD3hWKKeu`66Cx0}wT!2hm+WZzsN%{;|wEkTY`w_?t+nfnk`qs#a|AetWQGty&74*8ZqIK5wOZCI&5I3k{Hbx z_BKf~F?|221Fcm90ta6U$%w)g^z}svJlD>$-)wu^>76@#YcGY1(*lUd!P)E~?Ar4i=__ytlKNKV{R zrSMv7>De5>3+FlxlwxBuSC&~GOD3ZaiPy?Uwf+kcdR14Rz1w$Qw+@e==6Jd7UCMA* zPfczUs=H_C!Iv#?Uh{{^d5Yg0NX0FdLXz}7qwySxROmkyKNS+Fw-Oz;nv^`7Z1yto zYIslSqgz=3aP!`X>GIhneiq?*J8y|4RsuMf&Rb`2o{PUV<6+CaekK%Ot?8bYd5JTb z>3MMvc>1ZAE|~?tN8p#o`K-_nUNke6rv@TVB;sDZxObGqj?)qEC;^jjL-BpeA-<^Q z0+wFB>lP8PLEH+WYszJf`z%cO-j=2BC;c3jj>|_67mQI8!8vrcQ442kFLx99)G^JA zL(Ov^p~a~r6kgG9``a=)&P}8;1Ln)FlDIY$!}^5@A3i&_EJ&83Q-`=*CWCJQ28ej+dYTv9SwQX4rv^^(1FK}0bojJvdy zKf4#tZf*D(Jz!Q+Kf{^ItDSOrN#0}3pA$+vJ0l!^-OE~aL9w|xGsktLn=D6LA~>W< zNtJhh2JCiPH0vmZA9dYZf@z;q6_U{d)K5jVTIx=Brh#G}Sb&ZYc1qB@lU|M->kEH& zIStfTLDo3LXySdvr*vxnAor6KID6GKQo2&@dabRa1Z7PcOwZ34`qfb7xru8PYAeIO z^kju4mbb799yw$U(&7}-V|dBk{p5L#_PA`P#QT*7zhxJ5Iy#-n#=RtdB^2V+2C-@H z!IJm~nti8@Jdlg6F2~$dq7V!3*@z4tD2uj%)bAzn1TpM;P|0X`{s_U4M0%yKa##5P zB4nVSjoi&XML#~_tidCrrdGi{Iaxp*+zz(%0+8D0zWl4M4&@rxC+Jc*0%)6tt7zy_ zaKtbB&Qm31X40}EpH<0ZhSiMUbieEYy*5{_KI}P@Zur4JytYfK`eDRakuIH-QcBOF zp2e3KHhuUaLl7gZdBkh5x{XNTkziW9On&Kg$s@uZ@rAc+VIl@b&V~V}ujKh2UnLV; zSyrI;47*3@{RloR&VhdJv-64Oi;(xH+QVS?rDCJB%;<&(83?7~NvMM6XyBtw`;9-o ze0^5^qXv!hLp|;gs)uDyPl~2Yoo1a1e#2Hz&hPZ)v6KscW1Fmt*GC$hZf%#n#bU^T zTLLfdO|BS>jw?pyE@ed2rVs5c?Xyh0=B7Ki;;;UuUc+a_PqrdpDgc*ZC(qhhXR4;ds55+_)eakAHpcix^hI8Ib4e@at7 zodYp&BYo~{6hO*-Uz(PNS5}utkthqW!fjsN7 zf1E=9;WveO90#luRzPwVHj~{MAB$A7J`SB^{}fsEB}t{7BtP9T@euht^OlmA6|+Z@ zm+h{-d~%X9t3-gq3!qP8Llk9mWXZYk4ds&ZC5;|~%R`NthbCLmFD;xpDSAbWkF20M zC~_GmEblNRreMJQQxjeN{GpB$*JuiI!wF>fP81Rl6%+)S+&F(YSd%lI{}9QY4wq26 zo^UHIsbGJB3Bh5J@(SGtDCGza{e$EVftqT*_R^l!AF37GD!U=kV^&XW7Oh-r-@DA5 zs2|WC@?OT{oldyvwo(#K=AEc`0a9JS6IImUEamQ1R2*F7JELW^sdY)U8-9eKF zQC)xWN>0uitU?Fw15&PY;L;4eQr=xT>&KLQzy><-E`Vzi8Yc9h5=w258Fcv5M}G?O z)UlHNGQL`9U)LZ=>OT3L4NngtJUXY|Jg`4cX#7Tv%JOg}VV@)*;DA1oP=;k5MDdW8 zZ{>yY>cE`u@gQDzuE#6d8rQ43a(Mkk=L?q0ts-Qr&mABWu~a+5^1iLn=kdo5Qi922 zS&JG_=5Y6<^u9rSzNS|sXZ)GSa`Q&u56e9vno_ERkFt;LLCA;n`&ZszpMFYwbM|cR ztxGEpL|(dcCf=?tUMN?-NdMM*{$qML#|*p03hql5_XpHA`b(#&XSxA3&lvzkk8D+4 z^m&*VGj5%qtZ`D&(lv0(fuJVm9V0jf6fS+%_NQuU^HcG^Ea+!XYLxKsh1137?v4F> zanoc4O`pQRZ2S?OOb8eG;oQ$7 zzWuE6GCBu^ul3ZnuDxkz94#yG9Ij)B>0e@mKZ~;qhWo@A9hbYW>fb1O%jro=)SFAM z_FN#{cg`euyjKoE=rVjGD@WkPtECr5}bN4_U4|(ezJS)xEe|6w+oSsW^>0(?E=f5N|*V~YJIwQ zI+&Qa`LWyETPjQr^5&x{&L0{QmKHj)+Xs|el0s=b5|!`kagKzN1$XeKah~=%b-}P!SSKDRJ2#~jiw)G3|49IF;lk%_{puz5^E%%lr2j!y41}o5&<11 zacP#B4sUDCKG$oPd$Ocm(fD0sM&$5#uP|rz8i$&^pWb^&Y-f@A73<1X??)r^da*)p zpk8EwMfYB0^XsQoUwzZdZ&onVX7rLNbM#)!Si@kqBXBKCcA7n%sO8J^bCcmu=$}5W z3-6LAjk}av**gkMbbLEuw&oG`5ek=#UFi-jA3B3*jR@;~hD1g4zM7q~(f{Ic*>hH0 zx+{rH>WZWVdTHPL>#Kq9gIdC_!0Zi-&7j5>Pp7kY?ah(aFS8Q$U;Tx;u9xz*9 zRi4}kY6f*sAuiTn^rGkJrNyE4R-1Huwa*;u&W(;qw>pM6TG@gD-|lep z@Sk^xwLh#ozb0a1MfCp=5%@-62dMZT<%13LP4RsV!8h;)ZYE zqpc+rBW{2*fw85H0~GRyvw>i^jnz7dj@IaPnlaaqZLC=jMe6~~6$;rTYv+bA8iV<7 zzVX2-BWyc=GU0eIYxCdf__{yL7B+4H)-X%+O(wA&$A{Y6+t{O5fc^t&Ukh$GJ?#wV z&XnTWSbT#{3?J)DRbwF()97wG1;FiHb^>)1Yi#`QrmJ=Seit8BHZVuO?hh*wn>#oB z0{*)390TuUJ-9!wC*t*G%xxTC@V~(WYPc=#s}NmgI)e~ILF|D4S{XO`a9HU zQojcAyV1s+_>(nxlh5DD`zO%`umaouYmEE5D8nW^0N8p<_Pa6)++8dF?}GS-oUu_% z2(yMmO`-O?Rjze({~lA`El2n!=vx!`{|-NdMm9E9s(nnH5h$A@;@V?Jw`D2|C*5SU|TVRT@5tF4(S5xieo_x)N&1aY(n z!_n!$|Az5lGo`ui>GwGQacte3VGv+O+Rd#WpSnCN^g1 zT>aK>XDHMH^Ls;;zcI=Av#9_!C$Y!D(H3eCcd^}?31K^l==aeJO#)_E{9EtNe&W3U zJH-0eXQrw}{9Az$s;*)%X$>{4kl7o)Rf=pqLqsFe{EVgPp7 zF&PZN*ygsH7);l@vCVBMlRs-{6Pt|^oDDp%nkv?vyCQsBf7l@Y{?2w5(?%QE<2pbG zsHKUy^VhxzBQ3HGX+h8e`({ddGk?ErPPH>J-_7K9D*lsYMdVN`Teyn>I-F}|1%-(3 zsK00}$5Q=)4Gatn*oKO&AnP{C?{opWcE|*5>40{YKy*L`x|x^WWMJbn?7z^4H|~0|A>#li)Z*snRa7L|B8a|*yH*XbHmGTBOXKOZaV$1ul?CsM!$+)c2U&*v(@WY(F;~n z#b)8ZieCP|_r-qa@K@{cHeK~Moheoc{VIA{e?(>T(U5g%{j=ortLWvQZb83_UeHGK zPd1@nMK9<_;I`d0{D`CbiNWt*MK6EX_=540zlvVAp8ET%^Qr%j=PpY(Fb!=5ZGIKK ze1EynAHx^FMcJHM6VZ_bEr zst1c_<>FLttd`A!6GPx5211+EvJ?U-lYd@acjaejM09!cQeYPaFWVR=;_pnJMF_H{Pj+8>OBZZOtNJ*p`QXQ#R0OI3)qqf--$0q5CQviz z4X6{;1?okVWErvsIfa~Nd&f4!Hi{xd0g?VFaug+-DVrvO60sj~5P^%p zM-ahUU~gf=$R*@5iWo)8R>_89d(BpZ6hMj~CD>BgB4GCDF#rNXzdZ{EgK5JQVJa|H zm>NtSrUBE$*=q?iIt4X`+nic=Xk5@MXkn|Nf1$tR(SHE+9~s5kUIz3x=Cc<^f(SG*S^hTYecvbcsMxwaB%+*i@hP& literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.UUID.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.UUID.beam new file mode 100644 index 0000000000000000000000000000000000000000..5fe23507b7821a59727746c538ea7b9675dcf462 GIT binary patch literal 38748 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 GN%${T&2)wU literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Ecto.beam new file mode 100644 index 0000000000000000000000000000000000000000..e054ebe9d4239faeee962ad03238cca8774c1607 GIT binary patch literal 20560 zcmcJ12Ut_d*EbMK2t-1Y4nc}^LX(c66OdjMq(kV07OHemL=cf8geFZoibz+KCPhI( zkRqs5MFpg*6!~rdcisK=U*7NeUYuKlU>*a?4n6{o?j{Y8KTR*I?zXKM5 zarLl8`+C@6oL8OESev7lhnA-8{QS_qSeqk3&U~BWoQ(|dy~K*kr1@w4$odwOBfa4&Z-!*8AvQO4_X zwZm%%Gaf2Fda!Zw_42gwb8ta>+Hod(1!B;?Hty))UslyI{+_nJXh(ksw1EeJzz^_g z0NU3Njr7O3`qUgMvhndp`v%(rZ=76%Z0+qFJ?*?B4->3|3z*Ky)dLGC#k%-<`8&JV zIJnrkV(?OcmBFL(9$t2iXvec)&VK<|M9&L*?oh_S$fvZ}Sis;gpX})C<$d@TiO=O97uU7(9z=WEqa6VxHje(D z-uSjX^a{|n_-8QF@92yVUx^%|@=f-$b3z{$`cnnIPBs3R!#DVR9^n9=`W=9tm%&jHpxzp;Xb;E35Q_Bn z2jUg5g2Z@vc^_67>+Oj4Km)zN77qjM2!`QhynJo&5{I&FzGy!n%$@LBfKWP)BLKw_ z3yHOJMYsF*O&yMz(K-uS{mg~1HMfA|z{T~y*&01W%R zE+)a==-);0?iLk47F`uSY`i~<(h0j_JX|qoN8w++AFxY6pz7s_CLo~jCLkby0fhgn z1t=UKCPEmFfQaT4j1VplN@oDmh+kH@Y~*i`_BD<6Pq|#EUMoe2Kz4v=36V$|;MV}D zNdP3aNKF`!cq55`-$*2g7I>)#Cm>8Fg+apz^KmdDnsqo~P0k(KygTP-hq?^U9}~^c>_>>0iiiEtU}HT zp@$z@K4Mr${W1=wmW0xn92brJFN!*?{ZW(#X#%QZfSKTu0YJEX2#EoJPmLC7!i5B> zA-O=f8e%vU$kXLOX-)E=wC7C@od^P|p$MfT1k)lRFhClFYa@f(-i9)P;1IY92!?-8 z2&O|y9=;nSgL@-E#5qtFP#%=!JP5CX3j~u!5Wr!;f3QjdE(W*>2uVbXRKufD!%dSR zB5|u^uw)z z94n+HL)7Fz89_KO-QScl{#_{(42f5YfQUc^V>lz%Lv}eu2>nLOEz52qZ)dh)^(xG!%XutzdW#loJqS`z45gvH`Wn z2Qrvb5XuJXIDR;V1D^zRi^B=QT$C_4;CUe8kPrb{9GHO&-X;s>2Hl48o(Cb0+v?Cm z+=5VE5QHfQ%0rw7!B0cI7rkPt-xE4w!gAKp13;5Gf+lt3K3PJr3=$$m3%CLY<~nqr!e87cn*)^t8eHzE!PSo% zRt^bK#}_%2m;WVy*yi$o`cj=3@Ff6I;ZK&-F-!3mA|(Kk(q9mrB?K$|fr$Iig32!o zKqUylXLF!P01@&Ck=hX=BoYD)O2>$lf5{&rQvTDt+Oc_+KUu#Jss2Kw1|U-V3nFzw zu-YGpcn%S1{jzX~NIeIt0U**iLUh~Xfj7aNG)-Ob;Ux>5; zMB0Brq(cbS{sR&3AtJqB77h{Vh|V1$Qa$p~IV42&4@A1Z9j>cdVu{wwdgr88sf@HA6;h2CBYhkeQp=uwHxqzYf;-9mC9t==vNl5^FQ~+XPf6l~hM^m={%&#f@kNMXs2Wkz- zivLonhF59*Hi+^4 zLr(pFp>xE6&j6k>0IG$SfjR?UD-x=*P)7+lfZ!?;1Rxa&m_!cLi8c@FbohA%G8Tk7 z8A~8lLBKqKCImZC!VHkA#7GIQau6`UN(1e40Y3~vsJVa!A^~K8IB}MQI)VhDE?f|5 z02_eX1qnHaPhD|f8Nj?D(DrVUPm|1!BPUIHvv_d~={4TzOEB^IS)t2*8{H z)KZoV4yILvdJ=*?4kr;VkT(!mo=9TatH8G&SPpnihlhh79p!-lrU%eq@ZX^jGeFJ@ z|1k*zpCkl(AMt>kIm?qkJn>-oX5A3>2dy-AMn`l`3uK< z3m`=Tgtvvy%j5IvL3ke$Gyy~fkQqSuaz4j-AR+Jq$Pger7B_%&j`MhXS^(kY@t8D@ z^9Dew0uWyQ3_wVL@HX+jz}v+0#R0;^LReqkD>tKb>i#F3=m!hzvjc|@iM>K z7%xMl;g7-NcLazSAj{)47)bGdL`43d@is34gx3=Y5WXDYG2i@{?+>JS-M{$fkDvXH z-yibNxncoZgm@hIKfJxZ7!Tl=(uF9HS9PqE*gTn%pzi$iJ5#by5 zWQ-^93u}Fi{}n&%Log@UQI{K*>2T2Yh>k z0t5lb3Lw0{!vOldZGLZ$-`n7KzvJTw-)6wN|1jq8d3-F(0EE|xj}v?x;oFT1AbkAd z^AyU!ZXuAKK7@*QIVivngKsB742&TDrS?byA3> zEg60f4A@F@CjiNcAn**Y!;L#Xyb|I-CSW_x&)Y5#V{^P2>1*Td>*av<^9v+D+;4O6 z@YO zHTH7C1_Gr-{an1fu)xqN42+o=tf;q(7aHRlBnoVQ`iTM~vX`ibtNmd{1RVtUU(Mdx zm4JW_8v}SRf;%YZwbds-mY(#F1R(ZlP9p{$TrHAqjng6O*z;|nC1}W&H|LKpAJT1| zoSb+(3gN3uxjvEm;WF}A`8mQ93|?w#8JIedwB*BW0xI&g>&y3c#y1+}&-faQtze#f z4v2vT2Tgu$#@Na~y!f3rAbQ#G<KhN+gG>~oUZ9eA-74%5Cp*W>MxU$*# z^!}XP$Vx#j;Yu8@FKgp@RZ{T|^Ruhn%kV1sZMdb%TY^+QhnFiW-#Y70th_m~UClP7 zD(xA#bosgn^Y`M9L(&1Z50lQq!>qsHS}mI9?KsHH#=2vYZn)Xy8Vq^4&&&HEWtNlQ z+wes6H@s~RTFh?_->WZIH`SNdIjEwImVIS-8%sFQo3FV$)V8z#lY5au%wn+h9^|33 zr7?{Xj(SvdZ_<7Kbsx`v3K5r#Kx3JHw63mx~8Hyx)e#?N&OF%0rag6iUa6d=dT`_hQbb5Qc- z&bF|YT$aqBSR1mgjXv-IC-VaP)f6w6#1ytO zRxXg=tfq8bwMgFHB!@+w6OgDkRarC}o!$!?DWF}XaC@!1T59{ybKXHO@1Q-%)y;`H zEVj*Q>YSX;h#clwS;LmX*u49r#!?7_o_cb)Nba>VqQ?c?R*TM-I-YY<;fVe9lcTjK zu~pzxRGsG{{rJ#DEI;Z@?IZ7zS8J)(!-ASCekiX>wC$VA48f#{m2OIzVCrCvR{Z(Oj#(@>QKKw#;b$QmQ`0{as9vpK zIK!pNYkw}g;>C1|B-zjVO)=2QM^PLUA&mEgcGLt$s%GOwja#uDyX0f>SMneYe0(}^x_woB{&auW}W+SuP5T&rdqW3!#_YT8M9B_pmpWV zI||)U_xU@inzsnVbf4sLD?V^kzn1gXdvpttUX!?5^uhQ^z*bgt{H-7xXS(b~XJ-$p z=$}1ruTMlJ$T=?W-w$-W8$*_9MkxLvv;poWzN6r;GXa0cM_Cx9_;TyJ-J_d&Q*LK8 zQ+ay*y#f`w^t@wyDHv9(&#({K$3*+MD1DpScv(7Yjs#sAD-gO67ao&6#>H>hnng6` zS*p_=DLabakE;M#KXkG7S%Q~vdf5c{5hqOTI!kSXriL>tUGNOP~GI9E}ak63(pYWSStO1W{` zCE8NHZxwg=zO_y3>1GsyFAUM4J(rebF^hF&z8BRDD}*jD6!aUxKN)`(B1y5X$hxy? z>pIYvJd; zhn(A?Nm6}p>Wi-&gmr5?bGvhPI@(jW@+Yy+K&TS`S9anLJnm3em1*9KuaZR{W|l;N zWrQRqye(lvCIeJVlfC<0mF`7>`!9!dyI*;5d-B@ot6#}?r}6&&^21$D>d}idc82RidEzt@7hu)`Gq)1_ zT|b!FK5~%W+lVU~qUVN)bhuB%m>N%6^M%i65+`<5fyhYdd59X9 z98dlk4EVsYVmynN(X8l0dXFmOtIqzJ_#KfC624b{YFXdEJ6`_ahk!wk5$7gdMr&%g zz=Obk*&6=dcfkV7elD;U3qIZ68`W5Kas$~<1#V$6gT-yQ)2Mxq%b%M@!NKEeKklG2 zn5@onn47Mm>|_h2o2M=jHTOKVXddwlE1yi&d7EePIY9YyUsHw3Q}OrNmLDz=;ZARv zHxH8SsBoMU*=!$C;h>AnJ5eQICgktzTP}a9yvN_XdBiHL{2@>}*WxqA@N-{Vg}r`> zM29&0%CsI?piqlM!sl7nnLxRT+mY9bcla@HZ_9kAQvQnsvmm~b#8 zNFlvAl8pRDB}LGZBSY?$JKuhexI$y(3@v_id#LlH$*Xi1+2^Da7(a)O&c3`a5v#fWh1;!TEA;VT3T+oAt%BOf>$IC? z-^mtrv@fwkAj zD>cQj;kSpdQ|oFx*xoWXayEO>591o#%IGDB{M*lj=%?5}O#3tKRqR1ZWUM5oKYLR% z-l~}_p)7wK+?$-IM;XDU7dPhWcc$>+`5E%G13Q1kz|48R>__L3k8hYwo{k*U|2QTm zIYM$%G;KbE)RM?~rXr`#97W5qo;8gry_KfV$evL5jFE)EdOmq2DBP*aUR1imbf0t6 zl5}902rVk=lzO8;* zUb%MSg{}9R+Q%E3<2u8Szu&V~5O=Ce)1}!B-i?ZBzB%z!Q;sqB$IQl$s3ezjW|nr` z*XZ6$$%*#be}5{gPv65S$qN1Ma9u*2uM7;)7iJQN%TV#ln)pYNQ&-4zCErEWrfD#c zEwewdj~eg9!6h|7QKup3Wvqs%tj-p>(uk8*;Jwpl9}6wiQu-3GEjbW8%vZXyMGUu! zB72gOddf&$sjtqkZzRw0jpGTO^sC#akV<_eiyehj#Wr+#rb3sioom)NKKe7I>L#b0 z*YqkkZF+hE@(?p~?=?p3R6LVJX@5$J9c%jRB}Y-Mq{*SAzA3y;q0kjn0Zp=W79 z0u>AO-0l9Y+^>br$yG(32NN-GnJFrY4Vv`{2`~ScTYoz7D9C5~N#e-~SZ9U?+&}z> zT1wU!x_82;FH?L`d%_J&<3*>J)T$CHAgQX4#Zu1dIsYuUBMVlfpo5RgihYmNdtN9$ znU!wG(i{aYU1fG2sQ*0L?`=-=;)8!*mubd1OG{LC-{9xV`TP%!j6crSBp|yD{bi z9Mj;J`X8wjD$Dnx(50JXS|L`;RLPqUO!uS6zU+Y19)}M8gj4So^m43v(=9c+xLFvE zLKYnY6;2OB9HrWFq7mM;FvC3~t2d`CwtD+cB;M8PasrFZ?KRNTs^3|7%kUzro`%b)fwZ;Lzu zdbY>dvf6S`OW9b~z^;|0X81bn^cAIht)H$yuPWK-y1}y8#8D45M|UiuWjnxc}wK27sosJF{~-O+sUifLa0elV-#!}N;ir5iJKcf)e1 z2cY)5L3GJVMz^L}m*0SP?vY04eM}0xWcD!5BTgFBD-m(!yt`ZUpdexz+(TY&Q)MLT zoP1vA%R;62qK>Ut0lEyfw~oC6Ne`uDbZelUFv#=9Vc&n?_!_HIwC6#=+CAFi*TC~y zoAX|3-o+pEi?w@G5dAxluM*;mEg_#{ik-zT3Fo~W30ht_pUB<@QQNCsk#GHEJz7nV zqo;ZG=x1%%bt(s<$Q7CQb|Wd58QAKPi!&;*e8EK9Y#$i4_Yw_%3OMthxiiM!5eQeu z5!Y_lWUM97QOTFg3&)JzREtvSRGV+eeB#4B>q`JFzVSnWdwb%c6jegRj!MEvYo_LB zH4QPlet}ri#|s^uw>Z$l)Aes%bEV`j-i4etExDLv$1S*h+e$q5uBjw#3W%iG)nvG_ zIR;!lOVuZHr6}q>RmPhYZ%3*c^~R^WGqrJK+#_$h%yw>TGqfMD+-c2R#yL`_zpE^i zeV?J4%A3;4ELu~1LYbMz{j0Tbp$3IrtGu2y?eya;mSFDG8^isJ{svT3ZwW3YyGc~{ zs^!Hwb#(55PE22ndE8~@vM82SyE8=V*};3))a#U6Y}4=R_`F z*Q;h>hAB_s_O}|PmDdIM+q+-RzgM$<_F?UNnAQCyOwmVPk2|6_byEAKx?c6w%CcC} z_)0(~8~4^uT)snB^Mt}D!uUn8u7u*CS0vTkcea%io*8?6DioRb76ll!WGg?@VK0vie?^)HEdVHsDPZh9%%jMrF0*`;ja_*K2g_1pv z6VV%wk{sw2oT;K<2?YKfn6utH%j*w~IIcgAR&u+lp;E>R#;9m=SKXyEr^jrilOpC$ zFe+x>2a`rNGesR4n=3XlWsZIYZNx^5U;Lz|!MChC9;CY$0*!QZZ ze++K1TTo`qJv*t`ueDBa>+7XO)~govvl%R|=2bR(A5_vzV*TfrG>L?;AHwRM1%3#7 zgc0+v}KN}D{=cb(>O&Zd7c#>p_2T~^y#UGnkgGI zic6AxJ3(8YUtfCi&CntuY4Vp!PjF7Hc`+K`QQGLF!PVhjUo8e`6`&BDw< zeoz}5X_CF*8YOedJI|_WP4lD#1gAe;aw~eEBK%C(^kj+4lH|3tmTDRgmb22PxH9>Q zD^Je2Ka-O%`}C&Fv%2!x$ajMV^@^-|!*Wbr?O<;gBGxG4rfbMo`LDcg?jtIl*!rRC zxUvTAPhM^w#u@T=?8@$07=Lvk@Vhy|D`*B;?7%r}@iCsG?=D6n3$PWH-6JC`8hQo6 zC4M>%Z8UbC*$urX5wuEjMjzi~c~^^`bbm0^WTEpUsGwSkfBVfMWHHJdlDnZDA9lJc zB#Yc^P=p!2u2b|3?EqOyc;IOnAzc}LRu=K<+egBWo}JwH2K1`8nxpid>ZPw*4qu>H zbXQG@xK^cdt9-}#^&_Mc!5Ei@stdQaG^EYV%g|PsG_%Sj z*6z_Z#tg|Ub5I*&?0X98N!S`nP&8(;z3vR_qS)`Hl>N#B_c@&jvJXx#M z$@NH|?Nz;0a8iWNa!6j3*(sb%oO-l^MsFQkZP#s9YUm(76Xsdd?L6h%&dNz^J30|e13QSl0c=j zsYq?}bkT@~rPK>C!`17qaii2CTUa!+kw?RjKj_sXx2VhKQ!WV&eAV(hg-w)46@4Pn zru4q8F~!AWR;twXXn( z9D=t=23IMG@siP_wGuiDuk*C`UA+r&)=WoDG7#>*fl`WuK#6@~+=#Q$&pik$a=sIH z-J&-XuBf`;RC!C9eKcsJB!vCKV?M|hWZZChX?l>d5T3$`bjZj;n-MS+wgtEf<~Urc ztf5ZTlc=aGZhXe!pM^aoN?%i))!uI`^>%4h^P76&jLFu*MM(ldQxN5i$7;D+bl-02 z_IEU@^^}kdNJzU}ScH@M(&J_oDxVWgP~Mtqkc;DLPtXmEizPez;q3k9n)s^B_uom% zyrYuhjQzVlN_D=K%fg-`lz-IzGQH|~L}gulKK7OBd*mwfr;H4W+_?t_LB@)g^p-|H zJHI^ZFl|7GP^@}-CjaBxd4KjqXix6}_H6hf+1V52HwtOfJ|H23mPO3YB?SsR*e>Uw zl_X$9m^g_ovsJ}%MUuT4zLJyS%zM2{skY@)QT2s(CMz6KlCe^h7rZ81;k#8D^r~}S zr_&vCXzYiFC}Kw9C)7p+Ox2N$3bmcBWSvGcQ4MM=tf+fjy8{gfQsYRAB)z)rFy$8- z8*HA8G`FXkK{hm&Hnn{sw)K;atT*4Nqg5iojA_mr4kvMQ27Ne+X|r3Y23oP}xk-Y&)u2K@akVc%oc7v2^wZnKrJ0#F+R!>VaiPWe#V5*#9FgLNXaPe~I zaM`K~>zw-SAoN&^xCcDZc2;JmU$U1))l98!JMY;Z%_H(U{auUUo6||(%`BV}W%CrA zghbvmeXrzl^&f$jA)C(SReU0XKO??f+NKVxo%z=7QDJ^UBjVZ>5A^34=;*|2Xhn$O z8s+mxBTzX_owpwbOx|Aqs_ige^KsK*sD*FcViaNbv~aRS&Ep9eD?!fnLjVgWSLyAD zCvv_i?zc9$@rBD@Cv#83OvaRI#d<|5aX~OF$XoiFbwCkqA)E*j zlBeC2xfQ!qL?NpLUHMJAZ>Jdhz(Tp<$udczMT4J z$j#bQV^#OwU)GdZg<6L|yJb$?@Y@b$Uz^LjY`zZ^RQp}?qzbiFOx|bi zeDnIaq`LLvLB?rg61ltqFC?t|hIc48=dd>s<`-tz#@5!amu*Tk@1ItLJ$Xu;( zzG|mIfhZrjv-BQB1H>9pOYT)lq@m>8>pgir6EWq8Yh)Es=TDSuZO|mu7)IaZ?=C#A zab3K$^DS{R|~B5WfQkpH*p}23>?)Dg_1JRLms+k$j-~1)P*+n zEu^<_Z456Tyl!cJAoV@&I+V4M^3ivj0=;y@H_RaENHxC9n=!kiM9Tp*E#owzQ42^1 z+c>-BGdB3#|M4Sg~GNzAWJ=-5O2CNy43~Z9Q;&r^apa4_n1E-^j%X zK8#G4(R?9jje)pKpBA^R{<68-PhYq1igM{QkGO9xa*jBM_z}6LhknszI|(P)8^r*@ zs7uc96L7dU9nGkTM5sNV(J5^i7X%5gDLPAHM}@dN;rp>!j&MyXT~+y=ENPeOAm}8) z$MQab)%LNH{C0vb9k%e{_ou%sgBYj3DLiX;RgI8$xTjAk)^plG4xB6ditZjMCpWCS zB05%r2Fg_oM2iq;~iMORKNTl^B;t(TZ*B61(g!B#*Ap*gBrg zqJ!o`T2!`S2FeKOP%_2Z(CR!!dHDA1YBNcueGu!kmXQ3*xJQ+|Kiv^e*bhw#y<`_Ac_ z{RrsO7Zi2tvePH%0#dYPPE&R~ewiG3lT_u5zSg-|l1>9S(cJT5zYpe|-OuI3F#NV9 zB#-*}lM@kyIgiTbi?jm9eynU*xgcgX86IMkm{1Qut|Eh%`&Qd#AF|g8k5FJrk>qvP{q;;x{r;P(K=+JbPl#^#-P;XWuPsuOe|t9Bd$e0tlH>&<8QEBew^O`@leqNyXHFox+X9%9aM zul?HA+cJy%7nUye@JsV;{A^@Tdg$MI`PNB^GmG28SoKWUeVGo)k@2Qpks7L5a+@~F zsJ+z82K8;z1T7gU2AX{3T?*}314Z@W_A&$JBu9dc7@EYSoo==Q1DNS5?Wucqy95F> zmdo~|GQ@iwy(=_Gj<^JEOLi20|EAdGpK)37u6h0mvf%^*kTavVSZ-u(i*r;Zq~u?8 zb`y##;NPHAzkPES!(wEZY3h zAyV6@8;ajAvS@2}*yWFNI!H{NZX_!^zX+>P} zUR!y2G{&Q1YWRz|;FQ;g%a@3}WJUe6)P~~6gyy{o`}1plTGJ#ByNZx#zWKrW#t3Xe zfD|1bSb#pXcu1R_=p0<-ulf9daeXaf0iC?&8*i)wOiN}vms9Da$Xk_NAIf?J78xgrv zl(><;l8b&4#l*T;IYa$}r|v{_UCP2)-5eOldsSD6S$RmM&3FmoEfX%*^F0{sj21LA!f}{cu(E2&63#NBZ7#i(J&P;8ye#ka&PTO zwJoB~s)&m1UXc(A?l)wmlrU`W06U93n?0eB$aVHa=ZTvUU2F|$;?TY)0qG)DpSUvP zGI(=&iMqc%hb~~LKBjV(VIE~P__)DV@-k#gmXa}#y2Ry~z{LxpKE{f*4VI3q z4usdE6z36>@CcZsiXSg^W-CEAgUQYHB!VjmhPKvq97Px0<+;W%*Pfd94#w|fMzF1S z?fU6-e#?8O>%*u0D$=lPu>+2iAj2>S%7fSq%>q>@l+>7A&q%JY%^Bog6;uc%WB=K_CsxvGwvPCZ8;Z(_mx1rYmp|VkdfZvvqeaJazp3 zwQBJMCuxVh;E7NTzkPGo9;%|no`sXd5AtH~*NGHG83u_PSo63Gtddib32a$kgM>_# zKdTtv&;K$DuB9vGHs3Ilfr+YpAawk+Kwh)Juy^vQT%--FR$45r-bZiH8}l;)Uo$b0 zzBTVngjXe&UzBBG?OWsGyR?L6H)z(RR&yhulm0rss>-G3qqhCf%$AnZk+xg6q}(Z6 z)R;#!^Zcq$sLK-zJuCcFC1eXUaJ5=W8AdE9vrE)+ZekP)jPj ztKKi&Af3fY-SAs%d7h~i?@(U~fd2_gIvkW3RchV#?G!KD870bO4*Dg_fXf`0Cj|#- z$*JZ2SOdJT=JtWZ%pffp7(?}@Xn34ZT<-n?BJSK~)1!VDb8LII0avr+vT$0xbX`ul z+>TgK@4}GUz;n9LZZ24sf?^A6VDny2hpXKU)?q#Uhu=8v`+!H~9II~6&)X9|=%{4T z3@>Dlf7LlAYdJ$JH?h3IV4mdTX&`+(f_b=Rqo0eyS+SFkh2zSBqDvrwt3CsHa&Oz3ry?_Y;VH(cjcG z=G=k=*F00qEFjJDnN)MiQB9{G3*0i8F?KOk3hsBUR~c3!zq8ase*ZB`Tz|Cq`&$AY z?S9Q|ltQ(Or$zI^eqOjvvywo6Hn!bI`9|K^h|LY~lFCDVu$|n}8$o8SFS@uok zG~c?5IjO=lx;_%wlhsZ&DeFI=m@ZIsFicmAFn=igg`P!6HK_GW@Y7&jNnxG-6%x({ zb#lQ^SFY`Tj7w|ri$-gmi(KLh)=qbk37vgpvRsir@e^jAvXc+ibrYaeq@!@84_hwz z;1a^I7WvAN^J@ijP11neH&S)Dww_Y>508NL`QeP0d8e-t{WMZNNoPkCR4!pjvXSC` zzT8RLtNd|f-_4OMHg2RW_dq;(;yqsD3M=loVKkX|B$cwF)e}seO}tj9BNbUsyzB=d zS+bB$`cd9bO#6avsvryA&vk-6m;9T4ghQvk*5*rITb&(e-Qa}$KZM>d5ZE-6} zD6EsU?l-p?8{4cOoAi2?p)LL80hL~oSf=fb;d2ZjIN=*MY0sS~+-Aq`K2ND=vzu%) ztsdnmd!FEsEdAVc_5u?sM~Xp4x$ftioz7+HsZVdiuVb@*dY|w+a9_Dgsyhy^6}z3j zbxx&l*3COg@=l1p&2<|p3|-iFX~!5v?v2Irk5GC$r5t6DM%O|MWpJfPc)hdk5cQ<* zejluy#6XQ`L{dFAn=W#qW;MR`@})4fv8aAfjmTQVWT)%u2k3Xw= zS2cdrJlfKx4;~UZeElI2y-qx1>ht=Aoe04viMNUGwOf}{4{FbEvV;(?h#0hhe$bn$ zotb)D1s1j)A-VHFB9s|y10(>4oPVy zG&F0D^Sk?3!GUb--vZV6R!9i1Ve}Q5S~E$ct)e5dTkSr*ycjzE z-j`-vwsYxm0R6*z2L$7awrkR$z{suDvmvDK$=}kR7gf<;EhQ|L^%Ap&^GK_XMl2Vc z?>c4n*gB0QVT*BME%qY!rK~{yPi;9=`*M{{b=>VPY)JVRyAKDgX1{V=uD=!3JQ7rJ zvY++V6I(6?j+myGQ?dJHX`FQVfjzY=ipk6->zw5&QbJ_m2^-QYySC%?Z33shCe9!) zM8|)`B}_B>hS#to1VpEbxMem4QQrQpb)gfTq?%`F*03NM`%q)9-Ik7TF_|LQ z?+X*BAUKHn?x%M#wy19h^N@E!Q;c-mthIFCX_{`cE)1F7{Tj^aZ%53pI`gKOhD$%i zkZV_&w{u${=_iKo+EIF8nyli%bmAAc2Ue7D)M zf1o>ZeKmZ2=M~33@{(=axMlv_%kBtvx=$s(GxpxEeMHw)?NlosL%me>PX)d^Mrl2^t12LpoJUpF5oHJ!A-r_k zA3YCb8aNo2&SDE3f~QVA`kDPA>{A%qn)uN5_Gk^Y3@?XoU-v1TBoM~VgSrob)Jbm< zEos--yy|fxzmekoSwF5nFj;R*P`l~U>&7P_R=aGzXFjufiHI|aUF(vZ@b#Ghv3gA%o3+8bwgq6FfSkYEc3ZNH>JZp;>r)2`RJJ2l4TK0L*nFNq_+-SCeM_nS&*9`U5?FQbcH zpX3u-m07V6jJn6H@$VwN{oO0UlDFEdf6NxcosuP}L3#~Sx|W% zd-=<2d6VU{Un}2u5nRiOdOGUSsn>dIpX*z}#yRBlw}COQaL2AaTZcCvqBuJC4YkSI zK|f3B+MbqTO-HdGr@rpz5w4r~*RNH5EyZ$PHJ9LVK6TAH^XEe4_wr^$e9sKo2j$)Ps)&nV41bjJ z;>ixjAd_M#4SZ(%;{wCf&zA#9Cd1@o*PUmo72YftCaN@EO?>vyY@dp(m@&;C{?x|b zXh|uEzeMnPr5JMcuUT zut-fLC|OP9Woun}WK4kEyLLjWB!xFA|4PRyS@v)v@Xtqod;y7Hy;X`6Q<-K9o(-J8 z(Rm~M{CA%S8*7COmEbepnLL4M4-C84F{GdD@4ln=lw&+Jq`yp7_^H_F^7Ie|SpXMM8Bs;!1<@g8- zAo=SM%h7v~pQ|&T30%SgTt$K};zEQ^h>nXp24n0zT^$06feS!9|B2`JSLU%+;P!|k zWuQP}FK^&b!yy>bqx(LNl)1S9rz8Hv13E7GFYp|{Ci{e1)ZL-y{`0*mZh_=BN4I_0 z*c{aw&p5gb<`;v?#>Th_;t|D&>h3;rMC;-3`%qc!0C>p9@MEnvzl#Lt_@ zf4V@51c;CZRgJojszKf3|H*%V0-=aeBq%V790fs9pkOE})Cm+biV4Mz;y|56aie(n z$N0zjC-|rM-=e;tR!~c*anu9~jdDeKpuA8{{OSC+_zU@q_={1osLQB0R5~gHg+t|` z3Q;Af3RD6r31y5jL!C!m;Lku!p}wN1Q8WY;za4NTAi!TH2H=7L1OkYd>Hxq=2qySH DC!%1m literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Inspect.Ecto.Association.NotLoaded.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Inspect.Ecto.Association.NotLoaded.beam new file mode 100644 index 0000000000000000000000000000000000000000..5beba4205802e43eb1b3b35a7563007e72e882d8 GIT binary patch literal 3160 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 Sq7U?00^s)$Mpj=S^nU<1U>Mi{ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Inspect.Ecto.Query.DynamicExpr.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Inspect.Ecto.Query.DynamicExpr.beam new file mode 100644 index 0000000000000000000000000000000000000000..46be24100eb15ed3a0207dc5dd2f84b230f94c4e GIT binary patch literal 5844 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%0DL|gcI!J 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 P9`QJBKAbjzBl!9Qhz;#u literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Inspect.Ecto.Schema.Metadata.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Inspect.Ecto.Schema.Metadata.beam new file mode 100644 index 0000000000000000000000000000000000000000..1986bb8691ef5bbcaa10169257b1cdb702be1ed2 GIT binary patch literal 3384 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Jason.Encoder.Ecto.Association.NotLoaded.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Jason.Encoder.Ecto.Association.NotLoaded.beam new file mode 100644 index 0000000000000000000000000000000000000000..19dde0020cc14dfbfe51621b985159746ef78684 GIT binary patch literal 4116 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 G(Z2y(p=9F# literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Mix.Ecto.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Mix.Ecto.beam new file mode 100644 index 0000000000000000000000000000000000000000..68098b99229f06c72f59d8cecd8324ca630125f1 GIT binary patch literal 9648 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 ?D&OQZuKPptp&M80rm9|9ULs`vonoQzHi~8ms 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 W0^=)_xk$TGfRO(uU}UCHoBs=V7OJ=a literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.Create.beam b/phoenix/_build/dev/lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.Create.beam new file mode 100644 index 0000000000000000000000000000000000000000..16e9f63b73fd4c5fbb38d6ef33c2bf8a95ea7b61 GIT binary patch literal 4876 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto/ebin/ecto.app b/phoenix/_build/dev/lib/ecto/ebin/ecto.app new file mode 100644 index 0000000..5fe2ff7 --- /dev/null +++ b/phoenix/_build/dev/lib/ecto/ebin/ecto.app @@ -0,0 +1,92 @@ +{application,ecto, + [{modules,['Elixir.Ecto','Elixir.Ecto.Adapter', + 'Elixir.Ecto.Adapter.Queryable', + 'Elixir.Ecto.Adapter.Schema', + 'Elixir.Ecto.Adapter.Storage', + 'Elixir.Ecto.Adapter.Transaction', + 'Elixir.Ecto.Application','Elixir.Ecto.Association', + 'Elixir.Ecto.Association.BelongsTo', + 'Elixir.Ecto.Association.Has', + 'Elixir.Ecto.Association.HasThrough', + 'Elixir.Ecto.Association.ManyToMany', + 'Elixir.Ecto.Association.NotLoaded', + 'Elixir.Ecto.CastError','Elixir.Ecto.ChangeError', + 'Elixir.Ecto.Changeset', + 'Elixir.Ecto.Changeset.Relation', + 'Elixir.Ecto.ConstraintError','Elixir.Ecto.Embedded', + 'Elixir.Ecto.Enum', + 'Elixir.Ecto.InvalidChangesetError', + 'Elixir.Ecto.InvalidURLError', + 'Elixir.Ecto.MigrationError','Elixir.Ecto.Multi', + 'Elixir.Ecto.MultiplePrimaryKeyError', + 'Elixir.Ecto.MultipleResultsError', + 'Elixir.Ecto.NoPrimaryKeyFieldError', + 'Elixir.Ecto.NoPrimaryKeyValueError', + 'Elixir.Ecto.NoResultsError', + 'Elixir.Ecto.ParameterizedType','Elixir.Ecto.Query', + 'Elixir.Ecto.Query.API', + 'Elixir.Ecto.Query.BooleanExpr', + 'Elixir.Ecto.Query.Builder', + 'Elixir.Ecto.Query.Builder.CTE', + 'Elixir.Ecto.Query.Builder.Combination', + 'Elixir.Ecto.Query.Builder.Distinct', + 'Elixir.Ecto.Query.Builder.Dynamic', + 'Elixir.Ecto.Query.Builder.Filter', + 'Elixir.Ecto.Query.Builder.From', + 'Elixir.Ecto.Query.Builder.GroupBy', + 'Elixir.Ecto.Query.Builder.Join', + 'Elixir.Ecto.Query.Builder.LimitOffset', + 'Elixir.Ecto.Query.Builder.Lock', + 'Elixir.Ecto.Query.Builder.OrderBy', + 'Elixir.Ecto.Query.Builder.Preload', + 'Elixir.Ecto.Query.Builder.Select', + 'Elixir.Ecto.Query.Builder.Update', + 'Elixir.Ecto.Query.Builder.Windows', + 'Elixir.Ecto.Query.ByExpr', + 'Elixir.Ecto.Query.CastError', + 'Elixir.Ecto.Query.CompileError', + 'Elixir.Ecto.Query.DynamicExpr', + 'Elixir.Ecto.Query.FromExpr', + 'Elixir.Ecto.Query.JoinExpr', + 'Elixir.Ecto.Query.LimitExpr', + 'Elixir.Ecto.Query.Planner', + 'Elixir.Ecto.Query.QueryExpr', + 'Elixir.Ecto.Query.SelectExpr', + 'Elixir.Ecto.Query.Tagged','Elixir.Ecto.Query.Values', + 'Elixir.Ecto.Query.WindowAPI', + 'Elixir.Ecto.Query.WithExpr','Elixir.Ecto.QueryError', + 'Elixir.Ecto.Queryable','Elixir.Ecto.Queryable.Atom', + 'Elixir.Ecto.Queryable.BitString', + 'Elixir.Ecto.Queryable.Ecto.Query', + 'Elixir.Ecto.Queryable.Ecto.SubQuery', + 'Elixir.Ecto.Queryable.Tuple','Elixir.Ecto.Repo', + 'Elixir.Ecto.Repo.Assoc','Elixir.Ecto.Repo.Preloader', + 'Elixir.Ecto.Repo.Queryable', + 'Elixir.Ecto.Repo.Registry','Elixir.Ecto.Repo.Schema', + 'Elixir.Ecto.Repo.Supervisor', + 'Elixir.Ecto.Repo.Transaction','Elixir.Ecto.Schema', + 'Elixir.Ecto.Schema.Loader', + 'Elixir.Ecto.Schema.Metadata', + 'Elixir.Ecto.StaleEntryError','Elixir.Ecto.SubQuery', + 'Elixir.Ecto.SubQueryError','Elixir.Ecto.Type', + 'Elixir.Ecto.UUID', + 'Elixir.Inspect.Ecto.Association.NotLoaded', + 'Elixir.Inspect.Ecto.Changeset', + 'Elixir.Inspect.Ecto.Query', + 'Elixir.Inspect.Ecto.Query.DynamicExpr', + 'Elixir.Inspect.Ecto.Schema.Metadata', + 'Elixir.JSON.Encoder.Ecto.Association.NotLoaded', + 'Elixir.JSON.Encoder.Ecto.Schema.Metadata', + 'Elixir.Jason.Encoder.Ecto.Association.NotLoaded', + 'Elixir.Jason.Encoder.Ecto.Schema.Metadata', + 'Elixir.Mix.Ecto','Elixir.Mix.Tasks.Ecto', + 'Elixir.Mix.Tasks.Ecto.Create', + 'Elixir.Mix.Tasks.Ecto.Drop', + 'Elixir.Mix.Tasks.Ecto.Gen.Repo']}, + {optional_applications,[jason]}, + {applications,[kernel,stdlib,elixir,logger,crypto,eex,telemetry, + decimal,jason]}, + {description,"A toolkit for data mapping and language integrated query for Elixir"}, + {registered,[]}, + {vsn,"3.13.5"}, + {mod,{'Elixir.Ecto.Application',[]}}]}. diff --git a/phoenix/_build/dev/lib/ecto_sql/.mix/compile.elixir b/phoenix/_build/dev/lib/ecto_sql/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..97dcb675843012f426c8d93390d14f655449f462 GIT binary patch literal 8892 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 KoAbYO&^q&cLm=M( literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/.mix/compile.elixir_scm b/phoenix/_build/dev/lib/ecto_sql/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 ucmZq9U`}MrV9I4+U|=)UGqlh%$!1_OvMA?s&B?6DEYkBxtl4 zggZeHJJQ$R=Tjdd${m6z8z&|v1{m}Fr4o%qY43+irI?sN6Qr2EznH-7eG*Xxfhkq? z5lchuBM2pi%5p^_i987xiKfK!7q#PQ)uvB`Q-PxPnk2GK@g0 zM53v1L?VXCyKEK7&@>E0M&M05ZIqJ;i!{)Qu(+TZ0E*_6kusRdVew!J1Fm3mXgk=PXc}x>#WIXw8Tqk{ zU05d8EK}}0HiygN>Ivc-jA1%L;~^1T#F~cqS(gcP5O@K57R>`d;7fz(zBHJI@VE$_ z_azLMIno7e9_$F$(u@Uk8VBZ57_-U*K{N`3Q-+WYw=4|!Hxp18JoqC=NC1PMpdJG1 zG%ip!B=cbLAqvBY%nt^7##15?vB`h3W|)@614VO$!k9geZN_C;=)nl$LPuB@+%m-? z0W$5}Ob>D_%UvYkK)^VE(vl^xWbV!8Qy3PL&jRpl>CLvFfe#}RydNl7rXX8e02%-r zKp%h#FdKjeKnIwSQ~WiP`UsF|0q_AR04CFY&_G5288@kg-@!gY1)W{5cjg@Jz2`wqAjp@1cr0~g^>J4I;N{l<+w$>RNs=5Q@FYSFW;v)*aGa3HlZ99&pfm?X3XaJo8VA6{DhI&jAd+;c zgH)0*`QU&~6S@N_1zZOR-5%3`SN%ysvIK0~$9Z93(;n4SR7T&#``q9o!q|=7wSM2S z&71eP9ofweyX?DT{3m^rBVIC^8$E|lU$)C?A8+qhrDgFZO&_m%|G~Pw<;~Z|-A>Rqu<9NI4YfV!gdhou*i4jn5kX}?|V5fE;a_<6{OwxJ!x zWy|)buXbCrEkAo@U0w9Ys*rTsuJQ!fokcCai&pyp&}KbqkwaqvFog6eo;jM_&+x9&@U8r!9ItKEY|a8%THJmGqvtdoXg( z$?t;Px2?I+^1WF{?auf4F3O=mcjJZk@BQN`vMS_C_CQS%_e8m2c8TG4QD+5l18^|E z?txEx{K8PX?(jQSXWTs^EP}RGN9tQgR#urDqMNNKdTJlF$%@Zi>)*6t*ef71ehfJP z2fKIk-3yiTdWu`cJ$)UQ zsSVsFhw>PoO%V@Sxh)?0p5N>>{G;|v-3NkXr=jIzm2=!5HI%nLJLoXpI%nKpc;)=X ze7aGl^q|=Iun_jWsK7d%8COczJsKLl;i0&4jq2PTb@OZEwWmsKdTTbj`dqNF5~ms{ zFRk%@+1r}F`=T(j&W#l}7XAy&;?K+Ms@t4*N}+Rmna>9C-YuKfzZgk(I)8TmwY-(B zz4LRfM{`H93)GRS_lTdDY@uN{kB$t*#WY6YT+_wt3k=l>wQaAnyMAjKT0U~Qb2QEP z%;2-8NR@tJ|E#E(OB2u3F-w0e--xb#kDB%BMg-gD`R{AJ+*i%NXL{Wzihlh29lKn| zTJDc(7TAT^*ij#x@RlT|KCSK^c(UR%&8r(FOKhH>ufi)d+-Et_8J-Pa{3~bn+??}b zxmI@HlP1IZWUb00f(ya%=PN&o9qkD->dD`tpQib__LAn>*L$v3M(AK)FbFjs6=?Nk$9ZtX0@Po{(XX~W@27UYzM8hI{_;NKE^|Lq=FsN#b1&Hq7W*{S{c?5Wc}m1Y!3)!i`ns_-O|5P@ z`b!$MZH<5H2;Uy1ioMHIUrh=+c5>;e{V8F>JBRaX`cUiq>TGw~X{O26!oY$p*9yd1%NtcID|jZ_F%JfZh87+FGJludxo&IeEl#6p z;iKjczeV{m#K3a@uC_Y2km_GAmz}NW%&*WhU)99C{dhR5yzk@9hhv;djkbTI9~@Rq zzh`?W_Pc_sJ8N~W$i{8rXwL|#F#op~B z^8ERCA{k+wzo)qVbkd@_?^j3d?Ss1Bo9dt6w{yFFDG&t>oS)lxq&GfKNVwN10NyJmibdUv$kbeVjWS)8e literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapter.Migration.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapter.Migration.beam new file mode 100644 index 0000000000000000000000000000000000000000..35ac54eebaf10e68628c24de2a74e5635763904c GIT binary patch literal 3324 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 EU;RvChX4Qo literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapter.Structure.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapter.Structure.beam new file mode 100644 index 0000000000000000000000000000000000000000..2a216212e591b0d1b2884a9e2a915ecc62dfa9ac GIT binary patch literal 2672 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 SGFgR>;dcWP0A%rjK=?13IUQ#J literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.MyXQL.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.MyXQL.beam new file mode 100644 index 0000000000000000000000000000000000000000..9109d58581496816fb6e26d61d58d9ef3aa27eb1 GIT binary patch literal 40008 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 z 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 EA0YZ{<^TWy literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Application.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Application.beam new file mode 100644 index 0000000000000000000000000000000000000000..1b722dd9dce01c5cd62484648f541807119bc211 GIT binary patch literal 2788 zcma)82~-nF8tzUILfk+I=;8&z1Ft0sC=MQIK=4375D>35G)X5kB;8GS=U`C>K~z>y zM+OxHWx!F;=Pt;h;xXdE;DLzXE-Is}%Hk+IRK|PMtqwt)_nh7B_x`HCzyGZ3ubQ`b zi6;c{+x!FlLj0I09|(ee{`m3Z6W-WBEoQ%E z@Dzmt!_|aBQHU@Mg~jR_lqQvgj>NQRp$a7_6zHLIeB0>5TYuN{*I@2^9*uIzU1|>{kxR36M1`%!N3j z(Lz`}lbiELp2#cRKYfWl7Nw$6^*hpw0*`vbGWj{KBP^GTKpQ5X4}mU5K3@nrQqBQw zik#~RgrQ;x-fk@vIKqXwLXPOU7%r2~7dy)5%ecAXP_Ym`n=9jp_#z>EUCws|cI|9r zz7qsLWvzu`m}ky~?<9nI4g)@UBD3BQfI9jLL|h1pV5mrT5DRrA+fM)lP)GpC4iEo|age6r+$odI@| zCdoLMz)^*opcJ5I{osfWHIDh+%{s6{*idIaIdryI1SA0mm~ud^KiB^e(dF}qA(#ea zM^FP^;z4RdEh>=+ogf(yu>s&unNRxM&u@-d1aOFG&;i4Eb_BtMl3iDJ4cYk~V(A_I z!1)7w=%)d44K!{Jg$tn@(~s46?sX43(lvR+zT9pNo1JYe8iyD#LQk2sj3P@SpPg}!!0}ChxYH#v79dFTac13E8HeG7f+i6ouCSB=NAvmJO)Y1q- z%@~1|l#U|^2E#QTr~$wEML(@USxy=&H&Y#z5Fv@3_b_cWvAtE?U;UyRJ64t}Zr^Q?LLlS(aJ9 zgXgHq7@PXH)Xl0HV)@oz2p4jObTwyH6n~WyF*)nfWjm;tcPe}HEkxo}i==ku%bqCR zR5xmMZPmWINSEPHY%g~^Y+Y~Xkx}$4?^gEa3z5RC>Pd|9s(1PM*iAJn(w7!ou&G+3 zQ(5P`bk&q>5yXy**x#Gk60@s*{m^8*W9-5iq2E3cM=-YUt=$_^Z|rIMMf;a^hS>#~ zvlVM{x8A?`HrBKBmHUHB7hgw|&U2W!^Q70++8^hH9dr#s>MwUyl{0sY_B~&BU#sxl zFKGGu$*#0T!(S#I#!uAl2+6ngi7ZzGVKWR?o@ql_^Nobz@BT>9Xi?nV!a<9P;R4cf}WiDm8Z$#u44# zg^km)TsGKtd^7rfXw&<8e0k-8brB2S={(4w^SLMaiw=E%$kDEypIW}9YE+P4*q?@^ z9xS$o%6sx$J`@hF&xyZsPW()tLuI{aFddU8pYMHkclmDEZS{6*ja#cuzcFiy-L%KA zy`~tupS~=@C-&CY-n(~?ENqk>^W5XR#G$W*VY9(x@rHS_&e(&ujRe)JIW|By9M|U z|9V${$6okG_H8M*gJZX}uI-;`a7bQaLs$5O=0D6nSU<70t9s>=}TMoAPzrLqgBXgz3G_mFed=p=XaS2-`BItles}-aBi2 zRdb873mf0&GCnZnkfgJr@zvekxmTy&OkBHWz5jvMTX#3E-H9H{^gZmmp};-S%X?`8 zlRxA8RmAnPO*h;wNNi8E{g9P>IJ#%%O72SPNZW;}VGoAq7dPim6mL3}b8+#H+&zD; z4tI5!8+ki5t!~=mg5g7XB}HzrPpTVD!Eqge?w58ZHw)N)z8XvGRAD0b>Nh9N$T=s zLy{x}b1c3$Er?|(>sJuGQg2l`I1y)f$y z6lj{80H&)q4OA%y)cj0RDC1CN0!k?io(vGdMjOkMhpmd>z5|;5mtUWpOJf=q1kWe% z(qT>FIA&doxvKA8GFpLWm+nhg{1-uUB+K3U-vhy4wC@A0z-6Xmv(w|C()VE;A|W1J z2*KbD1+vWn)c@H4hJ9mjMB%lgJ)yDxPr-#Er6h$Jz?Cj#bfmOz5e_O^u5|K$Hn;+kj6Kwwxg8l>Z!u&1( literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Connection.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Connection.beam new file mode 100644 index 0000000000000000000000000000000000000000..fd4878940de409d55064f5fcb3ec033820d3f548 GIT binary patch literal 4580 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Sandbox.Connection.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Sandbox.Connection.beam new file mode 100644 index 0000000000000000000000000000000000000000..7628d45f3432c06013297cc8e33692ca31287173 GIT binary patch literal 8952 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Stream.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..96644a8582833e3071f9ab93fe201534fe7666ad GIT binary patch literal 3524 zcmb6c3se)=ayJ`7NTDtXf3(ITm1-douv)F203z~4KoPA9CQGuwLb4lnHw3l%1VjOg zf|XZLil`{1^eHOVTCs}OU$rQ;pn&wX)L&muPh0h2{j|KG7)<9ODh=XE4&Bx;HV?-_@xH8BXLKs6dUd=oV>ICMHqj1oGtMg-p#8cYGicqM|C zOK>-Tw5}Q#$@>wsSrelM`Vrd{N6+Kq)q)919B)Dbyb+)(s*!j#j(%CK6v<`o8uW*a zPB9ux<6YM;m&q}iB24BHAoElxP^ryMnHPde-348^5|zpY(`8;bDpfqTK`?z2(?*+Ws0n_$9I81eltg5?qs`KgjiVRRcL}Q&JXeb==3K2Kezuo z@EKk2{bInS7YbUPo|I<&tNdZ#wA~Fh!|X%HF6@)X`?k$Nhs34{262pj4s<~P!Wr-f z5MmLYxSiWEoUaIwAPUWS*@96^d!ewUD8>` z1ZbAD4goG<05lT9MOvQ)1YzMBEoBnYWERMkaEyi3li5hBDwzYFDg#B(L^_qON@CJ^ zE38s+nGC~IbVe|l3)xL&&SXfM%2Pqs!R2iu>+eAe;lDA60LK=nS9YW?o zM5m@@P~g7M!bG@42lHw^op+A8p!T4bw{$Kj)l4$$8%Bg=w}i>%tB2t!=UW0wFJIZd z`}(D}-2V6@gKOWePwh!J`9z(cp}4>7`;&L39Ng8|kTLe9QnGmd(PKAfC#>lA^co@E zxa3~_;xVdDojPylsOc}}dl!jfZwGyy6A`gFHF?^trs+T4UF~yKwz5Y1_q(qio-0b+ z@v}JT)EkAn+RDP0M!ex3MCYA+M6%+<+ZxQm#so=pL-P>F*Y_ zXpRcaDiG%;&yBd&{Fy=@qKuTKZEbK0`*v2Tmq+n{yZ%*6Md6Mm20Xg{o!C?R$pcG< zMit23Z8@p#JSN7<_HE9ObRI~k?_PDbe(90S4FUO~i-TOxRgSpj`?t7g!bLR7I`we) zj;efD@A9qkTai9Xrv~1j_7!?wi|diMex8szImM&u#How5-S3~-IsbNJPX4rOlt<12 zgKJqyA2)ljs)X67bx&NaKCtO*eMyPr?RR_|OZTkrKEKD=GI2|Te`ZwIb2}$>T=Y+g z{_43;zMXogan?$o8t$W+$37s(zn5uVSK9l*kL`yCU%%9`W>v!eYkQq{nQk}jn7;pb zwsw8*@-OHI;Un*CJ^0;MeJ7%#twVZxZ>-Dii4D9M>(jMb?OJhR%lz!HwG)z>XD{h$ z`BEX3v@C2piPq*aXYTF(bYe%t!meBXMU5>tn?=>Tw$;3ppWi%w&A`n5W|vnp`OwsF zS9(@I=Tf{zIz6Gqy7_YL$Y(W^!kF8y-5o}UElW95Hf_J(p>3O%z0y^-FL3008Ewhq zL%z5ZxPSNF?R`g68~TSwC6#103=IEzOw{7*u|K714cDi96H$L_n`&J`btbp|my5OK z_x4)5U4I!MqfQ;3n7{Hy$;UHR%^6X*aYAcf|95pd$>gx!&c1-IPr8ebzDs$`3K{Xf z|FQe-r^aF%`d>aow8bU()wnIZo_F@0an8d+v&s9--;9-?ZqLkB)|oE0@9GGN>73{0 zd(!GkP6(BYD=ONLcfHhg_4N0mpHKJ1doA-@fccv`&t+4cOu`pMFC=d}Kcbz@I@wp8 zap3Meyz9dEaY(f6Eqv$T=$c`^1E*D8=N@#x-C^_`B#&vr-4RX6tEsFw6MsyNN52`~ zvfXLi=AKha3C$zUd6khV1qCVBj7=P?E1$n*TLJH2mw=27rf#K`BZAI20( zqzBdAFvI zeoSo*Ik+jHW7NU9bBCr?Eg#qFx7|`E-c%X5xo)8E`WL(WdOwqic_d1g>{*tEC&fHJUa%nO7upCBMkz<>GAuETEzs;2HL(AdpsTEhgFAdlTV&1 zySzV&_x}?ehw~r`NF4l0z?p;ptVc}-BU_Crk06lYfAMV3S!@>83u}bB2OTnqApZsM C{HSpN literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.beam new file mode 100644 index 0000000000000000000000000000000000000000..9bf433b3e0a0df88c2e89cb4ec5bb8fc6e184cf7 GIT binary patch literal 164624 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

    9d0L2?Yl?eov?==g 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 WEf)|JnWUoZOaZ7m3lHmqp#K2{%K;w% literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Constraint.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Constraint.beam new file mode 100644 index 0000000000000000000000000000000000000000..25447c957f2a4c64072d09960056545a48cc0141 GIT binary patch literal 3500 zcmai13s@7!7T!%j0wuUfcv`h7*oq1ys0fH$NdQrbl!AJ(>PY2!ap* zy3_y+17N|38Delf5ttvs+~mgMj?Wfn#~YGRa(1R6FME6B{s34Q76mbRa99`@)Nx@^ z2xz2XQGC$o!Wf{=2xIa9GnNm*IYSV(2fWRUFu0u%TpboA1pIF-Lj=Bz1PbXb@DZd6 z@^XU!muH4zg$UeEZ^D5C!CkZ-gb%YU+j8I_FpKj>JBw?P;{rY}nC-%x48SjDJM+X$ z$V<#bm_@ccrqGS=1r}vFBSL-|(~a-IJ1F#gEYkTTrFbc@Pw+2X{?a9)B z+KvJh!)T{Kl`?~dGBR;YW3*Lbs77J5!DU)>5WX!XOVSJ~AWuf+DT8RRLrrpxK{1$) zA>f56G1Fj5z-!c^IQ0h+8}QK3fupceWg1KY9;zA~ceLf?jAVw<;msS8L4O#-w5V&A z7Su?`sBAYVBfY^T z>*>Abj$idfyr?Jsomb4G&Y>=84vSoqF-30abU~!q>1OY9r^*e{HC`cSJa0TZJ+k|v z?%tEnf+~qiNr}#lIcp+TJbbQnD8?%sL{FLmzuZ*2be~;TgFqR5a1QlJ@;S4IYP?@i zVZj%}lY7TpC3^!GjNM-8+`S?Ghfg_U4|;r%AHIUKH&YN?F=f>l&ZyEEx(|5TRhj&c zcQ(!PX=@m^+-XjwjVMs$STzN59Dc8_E8|-Bgv{M7wv&`=__mxY$b<>wmNU3J6%EVG z9FDmBOS|Jayxn>G z!;#D9PO5_xm zoR#lPKfmQ$ap};G;6n4f(#@^6;{#%%9$bz&S*;K_u2wBRm7fwmq0{|r{L68}3iB^l zU%9tC{L-7c=$jsdE|TZl^`PkqIReHov&vaq;2$*aCjo zTy6fTrZhQZ=YQbSqubA2NEFSF_{QmJPx^=dG3Grq-Z2NS_(hWb>gUc9>etrvlZZrp z$-b5n!usi+z>J#4% z<;nJ(-S5_Xq;N?^&w-YeDeB|zCgxpTilznPp|wluUAG#;pYJ+h|Kj@EwBIzh|LH++ z+uB8!St*Q7HCxlS>+4S3N*XEuU|jJT@u929C1cv_Uky94C?c&+e{R=3NPp8YqenTv z&_gpP{y|*Z?rlqVgsv|z*rh5&bsMnxKI}mAf*iN?XJYFLO4{S^mz$AEWyP(U5VEN= zl(^FL!Z`K(^R`N7?EA+7zwVfPdst{f&J4Ef-R^mzzD=b+P9n1%SEDHn*Y@sgD&N@5 zsl1-~Xwk9v-O@HL316DtrKn1|^X$kJeoN!ZkFN(D-FxecACAob$A|xFUUvBNedijF z)*km1j6B@4zu@tOd;8MVFIU|u+S_Va@=;0Ad2zH;ME%@$yIuQ>-h(0txgIzq75z3D zIi}*Rxec)=g^nw}#;dRR`{_iTmq+A;Wlmca6*fGWeQE2h`i~C#jG1|z5+4aUe`bm89^Gq|2r+o%XBX$f~ea`%}hD>Jv@dX8e3z?y06zT9x=lk?Z+ z#Pp<+Q)hZktxwtE=rM7=Z_0w3@<&OZkC|S1uuJOm^uJ#U$3E&hkho0NEfo(}?Xkbh zFKxFqSDZ+!$W1QK?;umxvJZdalHk4YBkws|ws}QAtKw&>9xnf>kf(Wd$}dE^AjEs~ z_~*OUUu_Zz^c%|&Q}{V?+QjhHd)bwb4tY+-__K~JJ=b?T~6%Lr$ zcoT{=g{J^Z`(^>J%Rw!vvBVOxP*RfWPe(l12!ggH)up{W2%i@SD5>rLfPWy;c~T7cvjB}Bz(BDF9XkJjxidT(^b literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Index.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Index.beam new file mode 100644 index 0000000000000000000000000000000000000000..61e37ebe823481c02354ce5149998b3f0497504e GIT binary patch literal 4432 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Reference.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Reference.beam new file mode 100644 index 0000000000000000000000000000000000000000..70075a6b146f9976a09a478d231ca5912b2c5f3c GIT binary patch literal 4056 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 B1&ROw literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.SchemaMigration.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.SchemaMigration.beam new file mode 100644 index 0000000000000000000000000000000000000000..6898e5cbad619df90d98633e4cb2cedea5e97f93 GIT binary patch literal 18644 zcmdse2V7Ij@^C@|B!NI66cvO}1yqOy=@2@IC<<7xgpeE{kVX;=Jg*3fide8M3ZXb2moF4h*$nH|;jtV#OiK{TrqTIa z0U0EQvbl^{78EKF@?+`3P>9c>aU$9xAR$$fA+DvGN~K4FbVvZwso7MjK+Fu4T1*oN zxOAqNLqRbuR>+NjI1u0%!VtTEQNx)Kiy>(1k;Y_X!{4zy2EeBi~DZtG5lyG2s6c&>Mk+?iEjRTZJ=HzvpGr2U@NAIjl!TljLCsjFXRIGa@iQ2 z?!>$Li)9e3Rk(++Ar7!}P6XhS!lAJt9*`zXjsgS^qz9WmBOYWh=~O<*Y=gwzkqUYS zl?POhA%Io^mZ)qRPhu4qV)q(d88jYfK_QFFjgI9}*^rP{NTt#wsZ=UPgAQyFG>sWf z<#2^mD2^!*3P3l7=%5Qz84MPN2(tiJO$9QPT2*~lv&A_W!uM~9*^y#-U`T*#>t;GY zqlvs&(3L@QsKg2rr3NU#4E;`mP7?^J(hMq{%Zg=lex##7pd7leu-gEE(HQyNa;-*< z1S8Ez^2pFI8Usiv0OIqxe9WMpC`=A)DGY!H3d=rZgBl>=&SgMgOgxQ1AP4~9-yr~A z0Mw9#41}DzApuEpK&{utsE=Okws=Zx7{m`=7`t}ycF#lBNHWD6fg&O)6m{?)K=CGk zM<~Uc1Rgw!9QaS9pok!IA_;+9tw6wgBC|6Ha_Wr;WFf_y4DyTN&$k3*wF9bD8)JbZ z;D_MU@Pl#c_(3=#UK^(YzBTb$I4$th#%tmR;WcoB@kHDZygE(?uZGhFI79ISoL&b` zA7qmNngIaACpaU3WsDz!tfzPb9*}Jm?*Qu6`= zOz}pzVF1kVB%C>ZD9!?Jgv1PWAmWVxrQvve+z7lL5~D}KjfAP_Q*f5>lhlP^2oMaA z7y}A!1e{?A3c*h!DI3OceK;!w5@SN~u7`6>B`E|XW*EVS3~Q7`AnZjLX(IpvF#|D? z46@8JNTAqg@Mf+|AW%?f3Qm`pK~^M@cB4@goHZanj+jAFB$El*gj|$131^G)M9HCY ziQrWi?MVa*^=?CD1Yk%MK*S;=6p*v0ATh(0$&`KC1Tf=mx16Ry01^oRRR*9k>J>?ePIxOM#u9uI0S7#w7b``=Y9QcD zJQ?7VCHTQ`3p6OWU{pq%xXdUdh73O8GH?!DZWMt6%Z7}bYU~XR6Ey}19H?cQI|Yr3 zA%pge&cMLBpAH&1MwvjO5YZHr5rqg^F@u2xSea;)IssV9 z*bEF25SU3pVyt_r4WrRrZ(?Z>3EGLcS>6~8oRvCmI1s}KV?qE)Y#N4Q)7Xs?t0e=Y zsYuH1p&5);chyk4R5LCEqYdg01#Phr>js#Okp_imoPikx*Do~=oUVo^(YsAUtRUDj zX`nTOL2KNMfn6CBh@hw0fzD)&x5b&@ZIKw;?uG{Bp+=;jjbRhP3;`xb@y2Kp6-kA# zcv0G94HR0P1cYHXU?CkzA+3H2*~4Qajt;ct0FQ5kVkE{Pp{X9GC}KcJNOL0Gtn}%X!6eU_N17_?rQz0dN5z z{-Ne(U!A}d0vu&GX_7WT)mX#=Unn8?lM^XQ9ZUF2L4^B0m5X{fQ<5c!r9bc{fWt}? zDblΞ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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Table.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Table.beam new file mode 100644 index 0000000000000000000000000000000000000000..002d524a328f519684f50147d1a7c4ba22b84348 GIT binary patch literal 3404 zcmaJ@30xCL7vD{Qgd-3L0a3L1q~65@BXU@N1mvy3C@>ERL`K7AgVNr-hQj!jP#XQ+^sLLrLD zaG|hFtkV%_hF*tgH4E%hyu=`jhZK`T;=B?PYJ z0isBaOZ6&5q}366iB5zNDlwMXlZohr0}P9mGNEvQFBH}c`Go1!A_9@>B}mOMNxG}| zTUoA;H!$hV^A=@@rE0Mz79j|nppW{y2#Tpt43Ppcuy|-Pv^$^znuALb5R>;I2x0<| ztrlQ303Bu)Lll?sOqes9`k6c3Wkz0TUc5d7A(B?*l68dPM*846ICmjw04xAYgI64npNr~%3{0LU*+^fn znpEIxqXQp`fhI*{V!cXdpkk=XU@b!tmDFH`iPgvmd>ioh%TVJ85;SmA)Ci_~N5l$T z0%XXFy@o*5Vj^3pM6%zJ8}5t^f@OmLcLWI$j?Ek zfglb{hR4ESi4t&NE-py~-DCjrUvdK=&)oxn4M3i?JHVTB4*`h^%m+dMgDq3Dv>18T zFvf&xyvwJ0MXPyT+Px(U6fd|61vDoblL78UOUS4|o|c6WT9Ch#5H(;rk0cC6mQ-S8 z@W61PRwFiG!ofU92sH#QL9|+ft&G6cfJ`6;Cm=-*01wfK0l^Uv#CjbrMAc-fQ~jAd@eB zEW6k$#4nB#?g9U`uH}UB^sgsv^WXL%iLGK3*Y2mwAIvT8v-NnzQlu1AeNdd5DcY z+md(4=UrvWAdZfejO9 zp7ML}*R)WdS1v3ssx0T%vR@AP-kTsvUgOqqofepy3nABptcQ}FRGJSzxTO4C>*A1j z@7x>hfqk3Ou0-#@`BZ+tYii$}N5L1mD_RWQe^&jerQRF8f#9>#b*u;0!A`SPLHpBH zZA-rNJLtQs^Q(2ovVvazUjNX~KXtavhqrwEH=gmmO{;$#^~>IRBHr^4y9GUsU)Th% zY`)d~viFY_6FWQ)cORa#@3rUkXcMlT9$-1}y90#r0d$J}+9_c(>&ndrhjMIQ3V@qyD&CSItNBtS` zBn>{J_=)+FcB#=kDfZyW)~k;ZS!Q3;c~L@CrKHaL`vaE+cWP&^8k<~Hw{hlFWkX#F z)_e~$PF%fbdo267A;+hqt1WQRoG+h{dw~lr>Whpk4yI6 zmiH}is(9fV_+Z-CO5;a4bqAjvz1y35w0?Put~$8r=4{*UDciT54UKUOtEo$A7M)nL z^i_At@$jtNsLy78{EWZ*M@0ezh2at{NJLWdPEvA>rC)Abu;3(bRFj|J`~RfZJ%gi$Bze~MoF8txb;eB3B_#XFDv|4NP>D_C;>Ufde|LU(TjE5`tqgRc^}vs!d%BVlK;Vu^jM^FX-wBW$Cwq@Z=w}GTWyrKq5JNr#!~anH3qINuPT`0 zmX_gAn>)8`n*Q>H?UzNzHo4bEtjqNKHty`B^tneqySwc3u$(2ABRpovkEQ(h-$Rid zUk2>rRQ_=CPEFzJocyI|WcOJ+hg2(8XP08$WSXrtw>ga66uLf)U+J**_m5PuqvL(@ zHXZ#WqtZ5TTVgPMyzvO5nTD;ZzIg?q?NhF9jJcnFIPMEY!U1CQF6JMr93Nac6%eCS zN2%K;n4{*24PzZy%m0TyMCoM@C46XxZhT_e;GC=!xxnYIIi0Xz_8zadL+v2}l9_gW17=~3N zBUu{$p8vZk%R{dK?f(t{9*ovM9DpV218kZ!8&qnj1XK(Np&mS$cZi_UnG4D%a5mEc jhMFxHkhKKtGNlt@|Kl?XL5bNKa-AIjS%1Jz{Sfp&S)8tG literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migration.beam new file mode 100644 index 0000000000000000000000000000000000000000..27bd78f91053f6076342cad809bf15697fc1b404 GIT binary patch literal 51120 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 T{a*uOW)SB8&*0#|#LfT!#nD!9 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migrator.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Ecto.Migrator.beam new file mode 100644 index 0000000000000000000000000000000000000000..ee31ae9894974089381256d1cdf1d746b77c0922 GIT binary patch literal 45100 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

    u$>oE-P=3$aI_>I-D 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Enumerable.Ecto.Adapters.SQL.Stream.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Enumerable.Ecto.Adapters.SQL.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..191bbb2ce6fe02ab8f74fa38a50baad619e5305d GIT binary patch literal 4008 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Dump.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Dump.beam new file mode 100644 index 0000000000000000000000000000000000000000..7d7f21a34bb9b07dd18ff5027dc01a0626d357f4 GIT binary patch literal 7152 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 H0NDQng{CJD literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Gen.Migration.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Gen.Migration.beam new file mode 100644 index 0000000000000000000000000000000000000000..8fde6cfd38fec46e14a985a4468e158a7570b5ee GIT binary patch literal 8360 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Load.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Load.beam new file mode 100644 index 0000000000000000000000000000000000000000..5ee216a44874a6803aa3b70666ddf6f55b23d29a GIT binary patch literal 9828 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 s$LzpMz-`8>f5A>F>W&i*H literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Migrate.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Migrate.beam new file mode 100644 index 0000000000000000000000000000000000000000..9d1ed741e8d17e042cf9ff279a640820cb2f3f86 GIT binary patch literal 8000 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 Z4hpq0g^Sog&f<}?U##pT3c`cUe*vhD=~Vy# literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Migrations.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Migrations.beam new file mode 100644 index 0000000000000000000000000000000000000000..22defa5fad295fc4b8580d7e369de6a2d183db3e GIT binary patch literal 6084 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Rollback.beam b/phoenix/_build/dev/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Rollback.beam new file mode 100644 index 0000000000000000000000000000000000000000..66a10b71db064355c3a3a7384e0e5b6a1c983c0b GIT binary patch literal 7940 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]}, + {mod,{'Elixir.Ecto.Adapters.SQL.Application',[]}}]}. diff --git a/phoenix/_build/dev/lib/ecto_sqlite3/.mix/compile.elixir b/phoenix/_build/dev/lib/ecto_sqlite3/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..ca8554d4bdcb3fa30d0717973c6b76653d6a30a7 GIT binary patch literal 5366 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

    T}}FC&%*&?wE6wp`3w~uxOG%6#}qC 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 pn2j_1$G3^WryZPBs;X`+ulwPp1F? literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.Connection.beam b/phoenix/_build/dev/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.Connection.beam new file mode 100644 index 0000000000000000000000000000000000000000..7c48e4bd1375ee49970bcb27a49c40f2371347e9 GIT binary patch literal 112012 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

    }5cnqbY2Ezdq78s0?}L)qDx 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.TypeExtension.beam b/phoenix/_build/dev/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.TypeExtension.beam new file mode 100644 index 0000000000000000000000000000000000000000..50bda7eb9c493f890897e8ab7c67b86bf02427ac GIT binary patch literal 2312 zcmZ8j3se)w8r~&<5e__&^lGBjHj(Vt`{U+7OZrS(5C=?B?N7e1Om@ zQV}YO7Zt%L6%_>q3ce5#e8bTSh@zl^h~T5OS1sJxh`sHdbH15>zW*_^d;WiB1Ti9C z2pS88@k%T0*Xp)XZ2#pk1Yfu$ZBttY>L@FT>*-6Bx!L=kIR?Ft($aR>M z1inO~S|ZirgbyGS)woQjLJ|p5tCNyG7^+G{v?>XfJd})(;?GLcN?l2aLZU};oz^tX zkxEpmB#Bf>&{?>KiYifw|Kd*m&5>^BjbbVkLuB4x_RRJ5raS$`{xdMph2b&;f}q;~ zOaQ8t12_O!!ps85jOE6Jrv}n8CeT^4b)h;Dk`%8+(vVzTG5^#Y*oSwC#)f%37U+e% z2nY;`JTuU1cr-R(mrRA=4VFv>8_uC(yL)9p-iJ21Cj#IU2qlG-@xV`<0!87{zwg%$*i-A+ z1F%PBb_mEqAbXgi!5|t=N=bpjA~8A8zA)L- zsMYmgHIPP1h!(){p@`3EMNmP^4UQNtCNvTQCLT?4tyrVQr3gV7#>%z08qiwAU<0fu z0q78o1Q6DMkmyKUjH;++3Iv5G zC8OY1yQd4m7xfwocjVP=YvnN;_FUflc2&UGJw+i~6f+>(ev;wMU*JRv6WD82q`GJmtvx5Wpl_o(&lqO-oZNF&p-S_?xGk?D%P#|-Q+g`^#3cU3e zL#=NvFE4Y>4~Vwf6UXZ7K4f1uue`PY#Mp`7pIH&SZe+T1(6RLk9Ur`$Tq;uV*LhBJ zcp1MbcyWHlX2{~`zv?6QEHKNG6rcl}+EcGM?HCt*XzAwET}3m)dVV{HnXI?Z(LvlQvG zQ!3n2oBQI^jtajKBwR0Ys5#Yh+6lcgcT@L_z0I|DffmP4eKXhZtzwqdSJkW7{g-@F z4`g?Dw-lRuq-?F(zV?I7)TR%S&stwrFsn+?@gmH1cn9OOtA!}+(sUoyWtzjsY)0P0 zi@5^y;O-AY$6O{}OUPdN>%Ze`5A{wnMxVX1CA7i@Fa6KKXN%U)y|K4lKYV>;T((z( z`OYSrp2bUR3WFC+Ddb#G?#wxBxv2SW03xz~=K1u6Mf2T9GnPfQeO0A8|I5Ts;N;$X zH#l|)x^YcOnR38JR{yZ%!Y@@Cy5n!*bv-j{1I+i1u~?RVbBNQD7TaEMYJ%g?uH)NW zH=J#3B>67&_u~amLfR)Sfit(o4rd7tcl0lrQ+n~t4x5O;pNRCvqM*jmJKkX%$2->8AMvx#NM*&?syD|q z<@J4fzvydy*V+sG%q6)$o-?c+G;kUv$5gML_jBi4;YV904ZOIRsJT+{xI%DNG`6&Y=GL!QC_5H(u^jE}+jDl>r1ejEwEv`a_{Ocj-ZLr+S1J$QnA}sAoRA(W zI5Nvq>vDUBP~CZT4QmpvJ=66zH|1UHH0xlirh4A_@q={>iQOf>_m;iZKBa#@e?_LD zBhRvW1>?oLds&K7f2UdG_TdVPG2~AlTE5NyxT0nE_`}g?Q*U(Xk=HYu{-_>_MGu`o z51u}rQ+z42HogOhd#8w*>ef7esBHr6F0&-rK1`nB$Tzn{}=+Ls@bc=ka9scJgRrxZgW}IO4$qwl3iQ z;?g4ySwi$yQ8a74*T9@v>wc?x-g*6JFCOf-k?>t!|8$(tmxApB+&JIBf zU4EoFbL-2?Gp!X{Uz6hQijVW~j+o)jb#4RK&Ig58k`Uh*rUdCFOb4f-En<3dh@}cd zszkJ6y)Ow=uwl&T!@+cfE2ta6`k(i-1paJDBhX}nIfi3MN))){firbKd})?n1nThu OWa^%x0l+pR5cFRu&uC}> literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.beam b/phoenix/_build/dev/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.beam new file mode 100644 index 0000000000000000000000000000000000000000..9df6bfad2c8bf3a53a45f83040af6622a96fabcd GIT binary patch literal 32952 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 S70xeC=h4wYVHmw#c>V)2GC>yr literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/ecto_sqlite3/ebin/ecto_sqlite3.app b/phoenix/_build/dev/lib/ecto_sqlite3/ebin/ecto_sqlite3.app new file mode 100644 index 0000000..eead494 --- /dev/null +++ b/phoenix/_build/dev/lib/ecto_sqlite3/ebin/ecto_sqlite3.app @@ -0,0 +1,12 @@ +{application,ecto_sqlite3, + [{modules,['Elixir.Ecto.Adapters.SQLite3', + 'Elixir.Ecto.Adapters.SQLite3.Codec', + 'Elixir.Ecto.Adapters.SQLite3.Connection', + 'Elixir.Ecto.Adapters.SQLite3.DataType', + 'Elixir.Ecto.Adapters.SQLite3.TypeExtension']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir,logger,decimal,ecto_sql, + ecto,exqlite]}, + {description,"An SQLite3 Ecto3 adapter."}, + {registered,[]}, + {vsn,"0.22.0"}]}. diff --git a/phoenix/_build/dev/lib/elixir_make/.mix/compile.elixir b/phoenix/_build/dev/lib/elixir_make/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..c5fc9f220632c1635491e7ac4439f478ec0eff1d GIT binary patch literal 5581 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/elixir_make/ebin/Elixir.ElixirMake.Precompiler.beam b/phoenix/_build/dev/lib/elixir_make/ebin/Elixir.ElixirMake.Precompiler.beam new file mode 100644 index 0000000000000000000000000000000000000000..218b80f434a45b685c5b6b8025290503094d57ad GIT binary patch literal 3984 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/elixir_make/ebin/Elixir.Mix.Tasks.Compile.ElixirMake.beam b/phoenix/_build/dev/lib/elixir_make/ebin/Elixir.Mix.Tasks.Compile.ElixirMake.beam new file mode 100644 index 0000000000000000000000000000000000000000..001f576a5fb39b3d9ba5474dcc57bd83fc1ed0e9 GIT binary patch literal 10420 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/elixir_make/ebin/Elixir.Mix.Tasks.ElixirMake.Checksum.beam b/phoenix/_build/dev/lib/elixir_make/ebin/Elixir.Mix.Tasks.ElixirMake.Checksum.beam new file mode 100644 index 0000000000000000000000000000000000000000..06ce2890ee42935b1dc87c284ede245043bf7fa1 GIT binary patch literal 10652 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 R{0Ffj?3@4j{{?b?fMIQsiQoVL literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/exqlite/.mix/compile.elixir_scm b/phoenix/_build/dev/lib/exqlite/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/exqlite/ebin/Elixir.Enumerable.Exqlite.Stream.beam b/phoenix/_build/dev/lib/exqlite/ebin/Elixir.Enumerable.Exqlite.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..16f818f51c06c16db92500d59cd8ba7021519f08 GIT binary patch literal 5036 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 QxD0JTc)d>28zr#*3u}_n$^ZZW literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Basic.beam b/phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Basic.beam new file mode 100644 index 0000000000000000000000000000000000000000..b4fa3a71a3357fabb644c160d0287dad44dbed6d GIT binary patch literal 6188 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 JVT{s(DKljZ;b literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Pragma.beam b/phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Pragma.beam new file mode 100644 index 0000000000000000000000000000000000000000..a41924d675fa2614048a4f6a55454d0ec483f1e3 GIT binary patch literal 7628 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 IIRHWb1KZ-M^#A|> literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Query.beam b/phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Query.beam new file mode 100644 index 0000000000000000000000000000000000000000..15bb708fc0c97888ec8743317d011f0d86e9b10d GIT binary patch literal 4444 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 D6O;0n literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Sqlite3.beam b/phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Sqlite3.beam new file mode 100644 index 0000000000000000000000000000000000000000..4840690e79b47fc8014bd857238a7883223ce612 GIT binary patch literal 25568 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 GVE+S|b9z$% literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Stream.beam b/phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..b40468042e4b121532f25907c1470cec000928ec GIT binary patch literal 2940 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.beam b/phoenix/_build/dev/lib/exqlite/ebin/Elixir.Exqlite.beam new file mode 100644 index 0000000000000000000000000000000000000000..61f6fb0320285fd760af23286f2716a072cd99e6 GIT binary patch literal 10504 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/exqlite/ebin/Elixir.String.Chars.Exqlite.Query.beam b/phoenix/_build/dev/lib/exqlite/ebin/Elixir.String.Chars.Exqlite.Query.beam new file mode 100644 index 0000000000000000000000000000000000000000..6b8a5bb1ada976b57f1df8323d8b3a1aeecdf687 GIT binary patch literal 2648 zcmb7G4Nwzj8r~&HLIhkO22d)Xc(ztZbVTVP7@!e<06_#i^$bh0frVr@>~2Wt*@~v% zVG%)VE60z@h_z=q`Lhm+!sx*rqE>#yD|(~e$f%%|v2r~`<=%~fwljD$w=>Uv?>^uA zeb4vzzWc3OzhNJ2)TO0K1u zTmwUMw3^n5+@~0+NMa*@HR589R)Gr4rNiyNS0GUT`Ec8Oit}DBt?<{ zlG2eBp$V7}mn{zXHEUf1V39~#Lm&t;2EYLPQxEV02vMvQv2&Y?p}rx4gB~KcC3z8f z8;q$0leo*cKd(wzAB4&k7X|L9Lg5DQI7Ji!MT#N{gTkP&gLke%;0~3sz6e_EfH`}j zNBAzEVQ6iLV8BBm#%_pR+t5~pnD5}aLhKI3U2v45!=;#=n^=OOBCLEwP&tw;z&w1# zGu;*Lf>PgD40u<*E3pTHirjb!%oi28zoDQ~^0TmLrj_*sRvPL&6BT(_zrEnwGt}8b zfWUFt$WMHY-oTgd0t5hOfD6FRW=o+&Z8p!NO0(5p0roV22hRZ{HX91W&Gyan{QAxS z@b+{7-!E_5MUxz_yB5GdJnwJO@m9K>Ni?yCI0|2mlcxbkGr&V?(Zd^)KU^DeHoi`F z!~WHQ$j41J2og=J`98h*UI6@l@>-rY@U}D@LIBFcRxJVaF34snUKgb>gv((?w4RB7;{?CDQS1k~T6{FVj?~nD?6;^W-EZ4*rx)cx8wV)0F2wBLj(CLup}D z*Cxj)%qAEXA~F*Zd=Myy=0e(FjZj|C-sD9=$QW=FrLsjfqXK<3!LlYtEko;pW(d;^ z@Zt@qBMdkYE&FlwSN8zAHkVz{gM0j?mn#W`hhr98M^0uQFY1uc{L3k+>1NE3;EXlM30o({ABDF zy?n;Qxp~Udh1DIp=CjAW(wn{rbolDW+~YNkXWP5dpBHKEx;m73cY}6#4@52fy&^EF zJE8znq!L36BFPC{-YiJ|AJF9xLZa0;Gajh!mo3Q(?n!c{YljpXq%qWnzoNCp7 zUUlH&@q-R8mfRh?eduCz#=F5oA3yK0{20G5&$aYQm9WguQCRX_jq=~)4)4o74>nDk zcQamGy)R|CM-PBVU)SmMn`atfkQ!StPe0xs!B)BDtI-OFOvH5vKjmxIcdlyzDFIr{E3OngwU%hco z?YQ~%ih(CS)pb{#B-%AT$8L11ue_2SbB*44=|aPWn(;py?u;ZPo zx*I`wT|wxY<*Ou1zF&J(v8A`~ApU9Asj^Ei?u~px>_0D^G28j4*QsAsj{NrZI^Stw#ALI=#9BjTtU%UA5BjtmFfVE-k>jFyJrVBS8*&2TPpWmE3+R#HS ziy4c&V*1VV`TnDy-8;SXeq&kvGI9Oo=9gvi?eD2hTsS-{baDSRYJHgee*Y%F$7`0}eShE|&$iC4 zzP{mh^eD4$R&2X5tk-q*=npx)M98!DIrR&i!#>~s&fIxXj(un2=0D0m6;>i$o!s%6 z+4-R*&S8<{I2MwOS)yDUSxLp5VF|q_DWvhZhxnFn?aIFVxL)m!%6;#=IO8;SudLw0 z^@MHGimM&Lo$KC<>FL`L@uIGBcraHQiY=@xc`A?S>>rR1;|WEj`7Tt;u}t5ax4&Gu zW%YRbn9;0^&9B2&<74`d@^3mfc5&K@wjGP2@+w=UNyMm2VeuYVAf-7n6ISM!1u}pu zVZBnQ)aiselVDWYi#a|)nuN9+f-S>==Va2u(KjvvmP`YF8eBNwZUC(yo%4mQTBymP za6PGh<7|&}w4V1iQjpke9Y9jd$as7G)cNxN6cJ6N=KrNMWuk`!2?PG+AL%Xgh9B2k z=Pl6V25V)yz+_JwAcb0&*KzW$W3uN6MxQY;x`|brprhfQ11)5LiAMy6_225|7~vR+ YNT$lZ$i^H4-_8lZ|Lg5$j3bKw0?qJ~xc~qF literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/exqlite/ebin/exqlite.app b/phoenix/_build/dev/lib/exqlite/ebin/exqlite.app new file mode 100644 index 0000000..14312ac --- /dev/null +++ b/phoenix/_build/dev/lib/exqlite/ebin/exqlite.app @@ -0,0 +1,15 @@ +{application,exqlite, + [{modules,['Elixir.DBConnection.Query.Exqlite.Query', + 'Elixir.Enumerable.Exqlite.Stream','Elixir.Exqlite', + 'Elixir.Exqlite.Basic','Elixir.Exqlite.Connection', + 'Elixir.Exqlite.Error','Elixir.Exqlite.Flags', + 'Elixir.Exqlite.Pragma','Elixir.Exqlite.Query', + 'Elixir.Exqlite.Result','Elixir.Exqlite.Sqlite3', + 'Elixir.Exqlite.Sqlite3NIF','Elixir.Exqlite.Stream', + 'Elixir.Exqlite.TypeExtension', + 'Elixir.String.Chars.Exqlite.Query']}, + {optional_applications,[table]}, + {applications,[kernel,stdlib,elixir,logger,db_connection,table]}, + {description,"An Elixir SQLite3 library"}, + {registered,[]}, + {vsn,"0.36.0"}]}. diff --git a/phoenix/_build/dev/lib/exqlite/priv/sqlite3_nif.so b/phoenix/_build/dev/lib/exqlite/priv/sqlite3_nif.so new file mode 100755 index 0000000000000000000000000000000000000000..454589bcfa83bbb4bb824905b45c9272b3130031 GIT binary patch literal 1663120 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

    =vw*cR->pxKA<7aIvKhkJyx}gE$nTq zlkB4<#l#cjFg|})b2IwAXnp&-z>fBHHlIO!2J#ueCzFq#PsR?~+to4C*Pwk{Qa`av zIu3fuA?1MB#NjQZy^HJXx-O;`^xNRxpQ(ZUwtqz-55c~!zI0#pwDtVa5zsyQuERdH`aaHcBvF*tXc5^4sJxCwUJ42g)#qVvtp{BoP-k(R?@6g^QZhy~k?aSs`cJpAjKixk{TY6so z9sMV4R$Zyx?GwXE*+!5f4t*MUX@BY2AnPi)Nd|AHZDiGkLUL}R@ST$SNY@7773QNk zylv)y-4S}6J_ll^%^Wtkb9gjZ{v!yNRk<<3F(H3vQ4&K%?qPz`BhhD{;xK_BHY zi8g(7&&}9oZ^FJm(3~-I=q@K$BE6=gsCR}4arwXs(O*i%{Lwq`V>*JerI zU(^%BE&y#-te0iAsJ_NCz@qRW-%|cppTJJiLA^5@osk-PV>_^A+V=&<`o6xcpavSC zJX_JCk;r+54!E*Q{u*CHJ#+gFu~pbjf$^BS#5(+?-`rMkaH#%g)y-(QbyepR+X_Ap zo~hLA3 zt>R@l&wDe^NW;@*))%O09v_)UE4& z4?X*>FLDke?@8Ad&k{_eQ&Xe2TDGCWqP(U1hz%ExiMIKW?J|(<79-a!LcXg(wyTlf z3tDG#cGfwzbiEr!ewS^g5W4YM{Dj(HS+ap;>7iQkmuEoYPhDaiQajdkLIe{jS=>M zhl}mK)?4eb-R;L)zc8||hnH DKpQQ2H9rt>iP7IhgTsR(N{972MlL`@*YE>IZ0@ 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 z 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

    yfk41dCS&%)<@BShhsZLo+_j4aoc+;V{2aH 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.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�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 l}@o6s>&oTKuszxan|fGZJfc*3D3@XvTSGxUAV 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Ü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

    o2ZH3p;9(p6)Ltjky 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

    eA2wqBuzkv6p1EcV2I`;>79bGaG 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

    Q)@#+|=->nWF?@zSoN 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

  1. h!o4D_3E93R5Z=OjVDW^d!a5a-Ax)SZyGb3{Dbs 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.NaiveDateTime.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.NaiveDateTime.beam new file mode 100644 index 0000000000000000000000000000000000000000..7d2206ba07bb3a7b5cfe3a6ea0e2d4b0ebdc65c0 GIT binary patch literal 2640 zcmb7G3se(V8lE8vA-qCB9)j|ywSpxHxRxp^0gM<5hzb_8-H^usLz0jS}7g^JI$vh7BEtgoet8noI~YmN9=(e^;$RK%kz4?URuCj_>fW6#;0bH4fS{r~^o z@Ba7k-#cgCf>;FM%}tgjWh5~FKl8W@b$t4N(5*J5>QOiy7d@Kjr{5{$u0#gFwHGmIbzr%oFfE&u+j<^US`Dl0or#g@;h^t7hSYS|MRL)96WyKz8!&Fo( zY2x^y5{Ur*S&~!)M7|`I4?-_-fq$8V;|Ipfa0K1#%J&LF>)0-z@li_xr!7#z zUPRAIcx(sPB|JY655X}2eY&0RBH;Olqg=ix!rvb5#^>`Td?_b2oFjFQHyRKCVD0|SG6+QAth0TvbL<0PeLMiHjxD>S z;|$B21zY80_v!tVm(RNdx8ZGQDy0vW~+8AC6>b!@s!=%MHh3*f?U}7qjuE$cO?E z*5R?b88M26!>BU;94kt@F$`nkHa$2u25pw6DrsOaL6-Lu0_X3L4fttch zKH$X`z=r7+pzsET!oZ#|9eeKCSX^m{SA}U1nJ9+_PLUc{5Q+l4K(vr7U`)_TL>G}H zgA;`@m=Plwk-mt;2)slDX@nLPvpGnl#g(GL<)egH2?R7-S%|~Z=*wZ{UF%C~YO^!Q zdt%QF9aHQLK2|L9+R zGAYJ3fBk;5I%8ba;SHAk&Bx@H%gUyR1)bNTb-tCM+j#qZk~Ex6%iAw4a_^UTv|WpM zOYM7O{o|yU@lgfId(FMyWlYKP9>`PqPS`-a@X9manfM1ww6?W4D7w8Y@mOueUwK}1 z-aTt+U(J!s=?+vYA6@-rUKrW-$;SFc74}JoJ(jh$^KLJA?@;&Z04wKIqHV*v8>=+W zKGdB`y!#b##6!*tj#pjd%*wTE`iy2IPE~+_kTT(4ey*F_G_CNm?)#^ISEo900 z54`$k{ONkuTJ>|@iuC!*KHQOWAah!C*LjcEP2sg;cWq*_J~f?QTD>t|mi|)Kx4HL3 z(95mmccLE^CH#3@hc@b9nP6gN+b&yLLgzKVg;k%{?-;%Hb<-XfW!_I+=;_Du-NxGk zolhn_zvKS#I@$8;O~$d)%GWd)c@1e{ufNZ`P~~G2-dmg!q?_JS8rIqJ>!se>khS{j zQT>6(r$&U#CRH>Xa6fk6p?gbebn`yQJTK;F-2Gu&x2yNrhPheh6b4;#Vfqg1*1LF| z-<`~fpT`uQ!;ze`Jp;S)E+x}XjywtWj%)s|$979r`H|b>@WZZh1aVFr9l43;4+FyLeH}`MNbJr8B0~eA|Egn{fR=)|U_F*&n>jnGt3> zH)_^$0hy}3m2~T;pJ&FOYi;gmSGd4$<6s7a3(hJ9L{wLbkK!Eg47yrI}DD95SlK&?OcPJzOFH9pIQpJ!JVZ_7N(eFeJSC%9A zLGw`5rcn$=>E5Js20Y~G3}1`WjAQbOIKOS`s>B(cLJxN#eChD&f%%OB41HWEIPO@1 c`vdn@#Cv4^1!H!po^8Veuy-!%V@Htx08(LyX8-^I literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Time.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Time.beam new file mode 100644 index 0000000000000000000000000000000000000000..86340ce2949f0f6266544786c99bc85042531ae6 GIT binary patch literal 2596 zcmb7G4OA0X7M>vrA@UOv2){iDKAcIJjUcFCWMrg=>m8*f%mft@i_xS$BucL$)i@QBOz7|p z3I(CpkP5{fjA1B3X=HHPpdxh!LW}QF;|2;>VGORe;AR6!F|8PR>QxLu>ghBc zrlLq%3S^p&R2#K;8qH8f6(iLX+BBTfV*2z4={Tbp6>W3Z~^pm~CWsNV$e!=)h3;WZKIEg8P)@g}oX2nHxm`l*-4l1OUsiW4kzlVf`io*v9&v zn5TuOU51^BJGPM+3UBtK+mG30f>@NNgC{@vz2;oYH%@K-YsJ3@e0((mxbb;e2pSMa zs#v>z0M?fmfc3}rp0=?l9F9ATcUt{%zyl|n*0a7*Js+9uW|{PC;+$UpN!P_&%hzZ! zLGGx;Gq7xeG*VVA(`!#GtN3E!FCrN`<*%Q^`i5LEO?c_FXJ$sm=rypKh8OE|$i^ue zvMvkZ%n6agBnQ%9%|h1AIFq-YRL};@q*vIomr{UR6;9J8M-4^lfTnPhD`>F;kl_Xl z2p1qQBb!t@Ho@8T+tU!E3eQ4fBq=obl&A?zk7)>vWGSg(OfXAAXOJXA=+lGoY+TPs z3>hS@C(IJ47qldktuYcUp_Ghn85M$?Vbc~U(+SuPA`f=k-e|7el^jprk~+mJCljp_ zr%sn!bwlm<@J|08EY!I(d!|=K;aiQx6R#&dRh=3xX)WB|xhwBr*p|C%1N`SdtXEW@ zsO_k0Dcd~Dw0?7}HvjL}Yv(;E82sww-s>4mcd1-`sWyPw;=KKXpFF2t#omm=hi^R# zd^+emdoS5Qjwe@U_Oz5-v zgKvrQjZ{yw?*^jGpw*YPgtjKKRMKnOFMn_Z+{GFUj9p zapRZ2_3aq;DZe0)eRs#FZr!gJS8!59Z`?Qar%pRteR}Bhze5!l7CAqex2`4eWAzYk zV_Z`7U&}A;Pw=Q2KGVH!qN(OsTlnP6zC($J>jy$M$IN&1e|SU`Idjg=gMz}rqu*`3 zwk($ygas^rOaxoDKM#;aH9357Bj8s_@Dy>~IdjhbLr-g}S7)4^y=wW_!BtabO}mYU zc7_tK5v(4m;W``(H>L0%Aq%}_T2p$6Pj+P9^4k8uBPguIJ>$#o=ma(;&H{g)sH`-I(lMHK1?cB*)QlFig~~2ie%r$w85r=_lJ5;w~DyDm7mWF$=wjy?Mz#a ztvw&Iqqad>e7~fj;Q$qsRPy~4zk-fV*Xe=3T#dt*AN$nd%A_mr95pV*z4yHtw(Yk! z1arBcr@krOxlzIN9bL0N9UO+}`+r!&` z`Z;XYxyzm2vLEMHMOSQIpZaO{+4Y&RtC{!7^DhsC+*)oPL zgeC{ut#2!2p!uST%7cc)!OsnR*S7& literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.beam new file mode 100644 index 0000000000000000000000000000000000000000..a68d8f63811ca91d9f768b11faa21f730ca35d68 GIT binary patch literal 5724 zcmai22|SeB`=2qEF$|M^H;6=xts>hXqHI~(&=}*zjG1>di{VN_ihhYor9`E&+)|P# zl(dj;3nebmtx#H&lIn8H@4Pc~>-X2+`}sU`&ig#y^DO5)^PcA%55E9Q6iOw?)!oI% zg%@m#LWxa+ryZ;0&ZH;MIp)i$TsCa(4%66?5N9)mLWiT+6v`1QkH?`$@Ocn7j>cxi z(V5VZNGOg2(WpEqvJy&&V{>?13M+D9ZWJG;@#t)r8_uHAIBc#3V1~2Uk$ff;&gF6V zG@b=aXNE%@CKZkziH3L-kx*#q3WXBKVe{BDHj_eWqX8{!COs0d;p|Um#WA^90?g)7 zeiZmeQJGvQ91?oG839qE*qkF2ipUs+GBOpJ|CC}N0^@<>6iVfk$PENL0>NB92Ldu- zc#-}Phr{MzHD;O@^B{g46T+&`D0AVlS-%i@)44pX+Ki)osBu`G86~cCULcr!I2x-p zqudMTLDA5!JoR9*sXVOqj3Yg!mg*NS`Fkz>MI8QMwSVDl02Bprz+ynZQ0f9F=1wn? z-jfI@h8j<2^EtxR&!thB%m^wimWx$j$012XWm3NLDu2imtdbcWX3}9O(rh|KNtR|< zwI8_u<`E*%_%8X`B#@zy)kmQ)Cs8OA0TA+30a^%122D7C5>wD8po#XFy{cFRs|?qS z0Dc6-2~Okh&M0=TT8OqFU&Sb*$z%oa>rY;W0!=u1838nLWHIo&nT$~cLSG^ZohwPe zTcD31DnAg=mG&4sL3J~ZFvc0g&3RaS1ARrPq>YS2bUh(2BZ6jxj8g;+mH@_Dp|Nug z5X2O4N<=hPL6%4)D~gjbO5y~(AsJ&p7FQ(Wl&r~0m<>cAS47O?}K2&z9DRLcjiErJ@%2GzF2>xiIpXM^fk<8?()!`Yy^R(O38)Mz#+SZo4D0R?hP zkBplq>ggjrz%f{kL1X6%GsqZZkReDuB{bGZ$e0fp^FZ#JfFv=&&&QeKjnP0fg|7zL+01FZo9bJ*fPEkIJHGph ziRZ$I-)NYCQZ4n9e%e2IogTK&?wInMOAO$x^!M+p5G9bG+IgmTUj&1Vq*IxRzkw0} zQ3M$BFk3+7z?A9Q0pVi+|Nl;M@QM+FQyz@YMhX|Qr&-vnwUMSItG|E4OH>6HZwi^L+y1^XfmibZ*mg1Nvk z5|}lZ8byyH1+t@fV7?#{H-^pTfy%%PiicnxDK3T$!Sn_q zPyz$BG$NV~VmY4fk3v~IOgJ>Wu8;j_5utX0VR_;4mu-$rH~Vn;Waf^y@}8ABa-Oy5 z8+DF~)x4^**5l-MY6Eq0V&`}zJ8@3FXJ|8FC#qEawINp zI?YS5r4}jP5itq17kSXvglQ36N`4Ox%q+75t{6FsoL=` zW6M2vBMw4=8sEI~hU6D_^6tGt>^6w8!~u4U`==WfY0 z$qYztc%l%K-$s`#mot8$uO5(7^y-?}oUO|z4ngBvnsIISh-(|X$D-$4-{I!cdDm>X zy=4$({npeVE?2zy%W~zl^*&OzmW!>o+Ui7>o%%Sq()dD}=EJPub#_)4CKVdbUJuo< zSr+4-ihB73{_VD!zG{H-*xSs>>Y|Uq3Z&Ds zclktq>S1GadZtOw`+HATCGALG#gCV16a;B8_l*=fY^W=k*Pt2_FxeD2$MrqspRazJ zQLTE7fvvR?&yTLzvuVlI%Z<-CkV%eD41+9;jnJZW?{@@8oNzlC|Nk zr`tSR42~NFM?8*RwCQDh9qVDyj$}PrGj43spr2F|oMiPWb;mZ(X1hBRx7};+rJUc< z6L?lW$icU|!3s(ynpYw=vM6&ppI@V*u8+ekSt`zWwV zKF`LlYlBhD8Ma=ZUzam0|9mM;cPN25v?gWcD{F(p_3GUh;c7(m zxd@%{yW1r(*hH^?O@Hj3TNT0OqsHqvOQNYaocAx_1W2DQ)Q~w@eetKeY%t*(>;fmE8vHsqBV$PxE_G?Dgb=62o1oE_Ndb9(~ z+3;Tt2F$Bvey`3Q%xr+8EzR!Bb#P>9 zlF9J)!w1VwUJa64@yOaHIKQCu!=dv>^%b{kT~#R2PRAcFd0xG;__jyPy^5>3J-e&! zJgvE8b~>fE!qlUtYxU+^_p_acjxcM6Q4Lk7Pjk0coGUi}`gvrq$Ixf2cIjOjv2SG~ zU+Gkoy!UzYbyV%4^s3m{6@-d4fvrKw))y6zcdm^%laJel9<)Ds`akzoqE5fy?<_Kd z*POBKwtDo`>$Rt!y-i(5OC0SnHqSe>&qLkhzDqRh?%k--GTEZ=+|}jUvlZhFb$aXi zH@+g~EDYsdKHr|9m{+Gvp<@5+M&e>V2W_ZAv= zXDKl8l_b;f>vD;oM~YtT6x^0CaH9vPo@q?;8dZ}yzp_Rv+r!Th{-;5_es@WG(W>SK z2Nxg8HmSxn{XPubE{)-e`M48j++huL1l~Q{)h>0(LWL6}9-)`N{aw0N$uY(JvfIhd zNG*3ZM=4ky<4)C>hYLNH5i2=bo&0#~Xog~|Y3ru^OxdO`6$3H;@27BkS)Yv?HXAbJ z*Q=Z5sTBEPaEe-W2fi%vIs3ubAn@6Kqyv1m?oSg-HMWGepa-7P0A zf)D7sn)cSMeX&K;qv54T(3a5}-%G^TuDb~pceFPT6;$NryM%q|%vzlk5_NdNGh5V+ z4Oi>6SZ5giqZ={acH1|R{j5^C{H(n6Tg3)$0~gdytWS~t&_IRUP4gpVpOR5xwf*Ln?Xt>n@_VLmsQujNqE!W%kk82K zeDx}y_@P!CF-LC=C|EgM{X_f!roOo&W3Kmx?1PN0yX)rND5-VJSI7*Vk3;)4BynT)FV#Deq59CU&g_le2J{uGyVSo0U+Ll`xwb+~NN$-+p zJ3ZScS00}v=f~MOS`G$K~8fY zt2VR#bm7C>S+W(^^b2s3`bM0JPw$foQuRQ` z{^2$sF2C@>QwO=_V>@?Z%p~p{X)BeM*)CaT7Fb#3Ygv41es{LD&i0&xLpbgl)18-} z%>I;C1Vge}q)*eie8xUepN@|9=r#h@d4f!+U{Z{6rd zy&DG0mX7Rre(ckz$>OqyQRZhkqlPCfNF5IyI*JRQZk4yY?R-mj;j&9{clOx6HO!%@ zook(Y*rugEf+1ICYG9_VY{c4|_P%Op-el?GKEEpkA9&pkclYM06-m|7PkZ#gCvI-h zbINb%YX9qP&bK#3D{8bHygX701*41UcXn&u+xhA3pReo8E^X;kJZ%x!^zLJTU4Pn& z@?HL@ zuB*;7I-gTJly4(@4i9hC<=FUbHuYRR5pmS@i+^BWZJLbj`kIgO z|I}QKdP5Z_?Yon@NMo{T_y(&M6Sbm;4a;;;JkEiH z*Lf6L3`C2CIFxux9;ji_0;#F1I$=c{gB&m9z8CDmI~Xcj1jKOZ(E@Rp4MRfIPlfd_ zFy9X?|7rmGCBO~h_evizD>mgxWFkyu(P^L>hd8X6c#IjDLU(>R2K>Sp2u)aD|EyyQ z%%aALif@cSoE-;BXW`u7{=G94F~q6hDi4H!g`sFFavg=RQ4Ge6j?HLK6r2z*CYV+y z!H1`Gp#?Kv27*g6hCu442?8eq;K`4tzo}TjI?Xi8Q_J{2NE~zNHO_I6#2htWA?!S literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Formatter.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Formatter.beam new file mode 100644 index 0000000000000000000000000000000000000000..6024ad60b9a50d1aad439493f3c923b732c8d68c GIT binary patch literal 12824 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Fragment.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Fragment.beam new file mode 100644 index 0000000000000000000000000000000000000000..deb0694844aa054b161cb2d6924329c90f312a20 GIT binary patch literal 3456 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 Hh9KylFh`AC literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Helpers.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Helpers.beam new file mode 100644 index 0000000000000000000000000000000000000000..1baeebcb0495f401624f77e7a231e74eb33f73f8 GIT binary patch literal 6004 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.OrderedObject.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.OrderedObject.beam new file mode 100644 index 0000000000000000000000000000000000000000..07f46177373fb0910a689786d2510898d5fc9e32 GIT binary patch literal 7808 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 Aj{pDw literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/jason.app b/phoenix/_build/dev/lib/jason/ebin/jason.app new file mode 100644 index 0000000..a04b7f8 --- /dev/null +++ b/phoenix/_build/dev/lib/jason/ebin/jason.app @@ -0,0 +1,27 @@ +{application,jason, + [{modules,['Elixir.Enumerable.Jason.OrderedObject', + 'Elixir.Jason','Elixir.Jason.Codegen', + 'Elixir.Jason.DecodeError','Elixir.Jason.Decoder', + 'Elixir.Jason.Decoder.Unescape','Elixir.Jason.Encode', + 'Elixir.Jason.EncodeError','Elixir.Jason.Encoder', + 'Elixir.Jason.Encoder.Any', + 'Elixir.Jason.Encoder.Atom', + 'Elixir.Jason.Encoder.BitString', + 'Elixir.Jason.Encoder.Date', + 'Elixir.Jason.Encoder.DateTime', + 'Elixir.Jason.Encoder.Decimal', + 'Elixir.Jason.Encoder.Float', + 'Elixir.Jason.Encoder.Integer', + 'Elixir.Jason.Encoder.Jason.Fragment', + 'Elixir.Jason.Encoder.Jason.OrderedObject', + 'Elixir.Jason.Encoder.List', + 'Elixir.Jason.Encoder.Map', + 'Elixir.Jason.Encoder.NaiveDateTime', + 'Elixir.Jason.Encoder.Time','Elixir.Jason.Formatter', + 'Elixir.Jason.Fragment','Elixir.Jason.Helpers', + 'Elixir.Jason.OrderedObject','Elixir.Jason.Sigil']}, + {optional_applications,[decimal]}, + {applications,[kernel,stdlib,elixir,decimal]}, + {description,"A blazing fast JSON parser and generator in pure Elixir.\n"}, + {registered,[]}, + {vsn,"1.4.4"}]}. diff --git a/phoenix/_build/dev/lib/mime/.mix/compile.elixir b/phoenix/_build/dev/lib/mime/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..22f1e444532c0549a2c6cbaadb5904d51dfa70f8 GIT binary patch literal 4302 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 D>nAoR literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/mime/ebin/mime.app b/phoenix/_build/dev/lib/mime/ebin/mime.app new file mode 100644 index 0000000..d840ce0 --- /dev/null +++ b/phoenix/_build/dev/lib/mime/ebin/mime.app @@ -0,0 +1,11 @@ +{application,mime, + [{modules,['Elixir.MIME']}, + {compile_env,[{mime,[extensions],error}, + {mime,[suffixes],error}, + {mime,[types],error}]}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir,logger]}, + {description,"A MIME type module for Elixir"}, + {registered,[]}, + {vsn,"2.0.7"}, + {env,[]}]}. diff --git a/phoenix/_build/dev/lib/mint/.mix/compile.elixir b/phoenix/_build/dev/lib/mint/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..926a6d89cc6b47480442516f9742d328cb0ab73c GIT binary patch literal 8257 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

    81mp_9elJ$f<{SyY#v48)Sv_Yl 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Core.Transport.SSL.beam b/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Core.Transport.SSL.beam new file mode 100644 index 0000000000000000000000000000000000000000..feefc1cb99680f8f1fdde59492852ada07b5e2c9 GIT binary patch literal 35456 zcma%D2|SeF*Pk(#$1oa(v?ycGKH0KnY*``-(T2fbvW=Osl|mAwMJkyVNgGj#7A;Cj zXrtwqvJY(5V6gPu7*QNOyJ!|&&x=KiVl$&z96e7@*A#z$MpQ_&zkdOZ!(lN3 zV>xs-GblQe$%vpA1k;%;dJv664=$r8pf%Y3k-^5NG|a zTCr&u#Uq3c0?EJ)E zR&)@Z%?_YJT*lF<(NRHkL^_xr6deq{;>8*o1A^|)g0csTP778lVA3P~`*8t);Lur= zNE)+kSWPxU45o+BVk0>I&?z)l*ePIRHaY;1@oYK^KKS#Zf)N$WfYAaBgcKYdiTXI6 z!3hJ+d69$2(-Sx>P|<%dfO$iL3H^_xM{y9M01!uuU<5Nbi7E5>1w=a}niWrD1^Y)r zKWU+Kwm%pMjnh%gkd5le8wpf4Ju0{W{mAo5a2q-p2MyBAMEk+!K->P%_eg3aOcIC; z-w`%UCJZxPf0$@JdQ==TfhT}JY(OP6Jb9K#35lS=IHxhGu~Cc|3N0d{sXvbV*|7|m zQvz7@r4S3KAYQ-*N3s1G!OY+}o^xP8Wivc%f`eJmH7e?3bXc(I{t*5ssfiQIgaHiw zQq1``$<5}fFu=!k+~Ry5N;J`8+b5CR_Z z2iwNd3u2?fA$+627zHr5fCEF`(h-DE~+Xn~g>mh)3rTC4|Jc%DmVpG#nk! zi6$Gy3>~5~I*J+<9Yv?YWEqDju;`J|adhx3I*o$)0zr8}*`iRydK4Q~ik<)w8<7|g$cUn` z5(8*VCWKUV2rD|$pTUkcHK9x|3kAJdvL1N|b}*FL%vfe9ixy0$hH*Gd z5A+}VpUab%okt4H*#78D1g3^CMeW7pyN((H{qW$8lmgy=e{{+#KttG{9ma@cBeKkJ zMuK1h70fm%@hln>9UTRNLNu$%AD#XBJqatJKWaT##r*w|NkgZufrXRje28coJ36Xt z$l8XC*BxqVeTptj+qx88L|yk^L7_igfRoo9wjk&m@E8WVR5Wst(Ye!g$6!!&J(v+N z2_ZzD9R!ma7!x7s4y;}LHb6;b-LVGupn|gfvm}2(;g4-(g04V#|GGYar=qSyCJ$$$ zQ}F_K@ zBP63t#F8y=+vE`$gLK>Ud9kqgdasJjNiTFLH^x$^H8>KMN|k~C9#lsRWC2u1B4kXe z5d2S};z+=pL&jjUMTvxJYyp=jB-2C0mPwL{rSe2sDo&V+Cz7~iF*4BtN064M;z_l5 zSppGTO~uQRsKPh_i-@xRtN9Px6ejzeOA*76c>tUWV8kdChO7*kgl$_YtNqyrN5oI$ zQiU;uNUnz%hKe>o<>3$tg^cZvP$6LvB2+_bAksuCaX(I;f>*##fyNM`2N{dVa07&7 z@KcFcghZS{!4QcUGLcwNWL|)g`N!+sju1`YyN0?AUn1Dql2>MK1$x|r=RVqORi>QFxY;hP87(~SuN5P>kB&pya z$ds{&DjIfZnIEP$@Mbvf?lyLb3B_A9`J^*iMh&NKf8AhsEH8~8LF@$RaS+nO5#`1mkgkm%9DjpkO&>JuqRCC#XhBm02))!p(<-gH6l^HaG3#MH7zkJBFneRbRrq!fOk~o zLqLo@z_^GuirGUjz`+=i2>{a?XcG*D@v^8S01pb&86wOO6&ip=jJSv{7|97D*I1H5 z2B895J5oS8^VobN|-^iAqkU!BuvIT8^K4aBb5Y3=OX%mjn@V&ei~J_ zpF{!DY#{l7kx(LU+C#C^!Dn(1LV5joTVWzjn_z;&yHFiH(5f&b;=v#$Pz@(Tfj-UP z{Ws+z2B579Xlphw&bWvn%y-MD5zKLp0T6D`GdTd5_Xi(HngX9JxQG$doK3_cmb`E? z25*e#A|{Z@qeC0k0Cb-7fEkR7%mDQ!P#u|I0aJvGOvGRjD=uON0_K7M-u%PI2k`Lb za{z=zthtBpuLK%BUU?Eu6MEzxi=p*rIz_ywRK>QP%989WXW?7L_Rb-(NXdEZUv&_W)sn4CqfhkN5UH%Y9@WbQ*KhB1RJ@_&qT;`JSOW;3F zR*veJ-Cup~1cECTnKzynHs}iH$wiz%Wk0ZmmtfuThXEP@!kt050xZ1qc_YxfhTx4w zyrEf$A4|Z`Ck9}6su6{GSpdZFLv@!53Y4P}OIH9W9C3 zM4qof1iC5)koK!UHVucae=u>t>WH|4xT%6=#}~w->&^l$;s$C5ff@@1fi$N-$QR)p z3kKp9Q^JJ!gWBl0d zY;=$%T*MRFWPp+VBr#+z;sw%F_;Zgx7x4zBGB5-75a=)+EHxw0N#>Bq5Jfm!5=O?!OW- zSR_&sgP}T>fvsquqc+vCT7`;FA|Vt+2e?sOBoKfrC|D#~5<}r4L9o*3@;k!hBEi61 z3B8Qr$340o^923r=z=sv(`wKZM|Et1WaF<}rk(x3)g5W5^M!hj|hgY9B@@v{`b`h0!jxJWoKR{=Ag$BY0bh0jdjB9XvM z17_mDyuwAIz`ax${Jb4gG~lOG9owK~W`D68iZM_$;6Xq+7A!Up{cNZf1CmLg+%hi0 z0m*BixEwVmJ_E-7Oz3GWR5auwabQ;?sv`osa3mf`#!!}qasq$SPvRnpP=7ttUm;1v z^!sy}7zSOKHjtpgj3I_>>Ng}J1M-&xZvuo37fC{gtp;Hw&Jnf^jtDG_=7Ca*(hJCgwvV9QhO>l_Za7;Wr}*_#CnjHAMxVLlGjU7~*rNklEpL zJRtML=LA3&gwJ6@#>QI+r63ErNb+$JOiBt)9&y5NA*KlVs083c@G+PaA&fLg0fOOB zf(H=n1Oy@=m_YCp5XeBt213wKLKzU)0s=)EMiZFRY!6{AEHAv>I&Y(wT13JffWBA} zlCj7tGeRRgAG?-|tU}ke zbzCG3?4Rd>MY2Gpb)XWLumQh=upW!7=Z!-|4is1owf`Q78ziY7{hLNR*r6IxQAN`M zCxh;lVK>OzI-=V|2Z*dSf^DJ^j5#V0G9XecP#F5{KsA#L6K^I2GVBf^Qedlx?w+BJ zC4a1JX(iK$tg^=L*^{K-=HWMY2Hc{otLvJp?YS0uv!z(3Jy5>rTNG z2%7-(s{t3%4lc4DDja|cJ9mgUBJwyQe0@2Hm&G5#7vW(d#v;4Wuju&0FgACi-?NFx zOe~V$PlH-}2ETqI1u!51T0+Jmd!Z`tdr=`wcR(uz+CBkoKNs-_+7X}~Fe4N}pccV5 zuYn4OThCv&z95!a*!@5Plip+2D|1bQi%st_F(~bCC@o z{}{+WELg-gf&pgrZ@Xpy!0(9-`!E2{0k9IaS`%+i%?qUSIQT(; z#0$Ztun8vNO1jY)gH187<{2)M4K=I4GH1cAqGSRCi=5*kn}K)%i0220Ra_>}EfQ$3>Y8_p<@?$5l{{MYAeD;EOM#erk*7&0Uj zgO*i?lr^9%kgqwUtj8};hunZ)o&h;L8|3|=Wiv=F=et9P3R*=wksgP_S3FO=I z%V^*1AqjLt+d_3i>smt+=9iryN9(#ma)X58(Z0{&mr>o^A)y$w?7=Ui`uGefFXoqN zkO%V1{*Vj$h?Y?s3giS2DZ}q_ymnFDLiuI1tuRO^9;Gw*>l+nM9kOX!^`?3iVib3OHDV@g~oxv zpJ=QI;=&KgL6A@#7D5ulwK0^fA))%{K(c~_VzeNk^3bx-tk@{%BNp`?5z<9I{Q~6Z zA6CevL=kdjNNAk^NN7C_pI(I)A)V#t0z6tDrJsj{wlAQcL(7mVA)(_?Ku15Lbky#s z%>?pKK@p{+eiDTwpr3#uN-u*X21!7NS&m0X^+krzQ5=ddg(NqI~@$`3PaKINDh3IGa zgE<3>NsEBexGx9DEq7P#Ncc}QeDR=T@}d(PucUQsI7i;&h`}f;q@m*hL<~L^izf)4iqV*!bWS`D z9{U0aOA5oqiv@@I)8Jufyrf|;JfxY+iA@nZs@)<5J6xc{s!kZ)*eG)w_W8jC?2=)h) zLGbt-4nYj+GQ!j&A)~1~93^P(ZqkP&Kr2)3|7=|qX-xTjG^9`!92W)f9Nn6TYt|B0udt-qi8xD zG={c=ps_4E67kQr{?V@yK`iLb$VeshhuJ>@6|Ku+)BX{ND0j?29KrmnQ^WY9*lvJ7 zn%PD$#}YnVrESIJ}E0_m3UdP=ug`(PRvoSK!Lg6dgqUOO|j{Y(&J+jcvaY{p8Wa4s!nP z+TdnpaGMOr0nzDjtX*_Jdu)%Om4|Wv)@T4A=%Zju!E^Tr?r7Ej?Gc{(Jf8_#KxGW= zI*J&ywZJ1I^cV>lO_@QIpt*kt5T#SA+$3BDI*|*{v0Kg2K5;Z6G$7O(;!S>!BI^#943%9Lbu@| zG^oso0Fpoh2o9kCW0D#M88wW?MhuChksv`w1)(xFVu&e*fyNAnQBZ=`#*#H?*-_j% zOx_^!f5{x~hG9ZRc!IZ*@b_4wj^!bMQN1u0e~1tMh6wZ*cwj945StBwjA{K57(qLu z%NexiD3%{0YY_KudBd$fL_j}dbbAc)_=9Oky|H{X_Pooli~|1Us}cN>x(z@Ceg4Z= zBlsh2j6(jGuLd!Kc1D*o=!3C+g~}Sl{afCszCs0zu(@zJE717w?H&Jj$x(UyZGJy* zaKkyQ${=|d8es&}Y5l)l4ucP&55o^CI}AQZ=A$LhJ_z=)c>eFMLw^Dt8!)N_R*(Uz z<=7I20!EYY_fN3H+8W9A&Wb+8&M&$QauGAYv>Xh9d+rhUzhVkn!I&FH z9Zds)c}Hp>;EbvP$`oiIFdEv{*fBSpE2s-{criD~9opBUPkKM#ry%@1B@Ir3n^v@&n!<#?#4<+#@&LO0~RT+%!q16YeLnVy- zX#@}65-ca9Ja8Mz#t&Tz_-zg44@~xao){{6?74k_J?iKgojauOBLROodN@GfNP(Y6 z=c4lYfjSZ(kpDMe%yBXxVh|ya0qUS*aWk5^hNH&PXAt!- zora?Xvi`Qu@VR?H-NBjqZ(|H{{uVVNs>RqWCcH*G<}a`U_UJJ-j4SA!QNn05 z{l{D4CHTi&&=nMSv$Y{B`_(I;xON8Y+Z$kwUy^{{;#_ z6$3SKh!C8t!rn$t&0w$dZzLew*^qg636ObL29V)xX7a$x_7-Hg!vL--Aj3P&k5{_{RkRtGAIpae&97|2AvHTm5|Z5`{C>knG;4ICO#IupMXaN zY3O^_y!Wd4WvI!!mw=33K*5M2o5RHu{g=L=Z#tv54(O3*!8`n9cP|gJfw2y%1UZNn zMTXl}qRDVOfjJ&eCTo$+2fd)z-wGSOYek=eDh>rQ+A#n1Z8j)Fr-^5yj_C%{b$Pd{z)Rhz61t#-ZZun$&7r{o zD^{>Byec0=$Af>31|k&Cb3N~h4)hEZ#CZR^{_#Zq`6ma#r2%NPka_iR@gkfEcHH!M zFG7idmn@*{{?RmK;7sL<7ejAnfGb7f zMR>QN^k*iha53H)E-ZSqQxOJ`XuqxErTc}V_h-P>2=q|6ssSB66M6FBpj*G5hJpf5 zPu@^Oje#NZU|0dy5N$}C*N|Ei9lbV#43`Lz1y@;+(W_w4xM#;Q(W5r>V1VnO!$=st ztpRdGaG^uIoZv=={@Zl?Q2-Aw$~$oe6JY`5ICIFHjBoqVo;GI83>9ZmELPF{2dDQv*@+`=` z`DI(k=kd!_$mjCQGa*OoqjfDIsX#(yqUXWU^Q`E(Q8bW-p53ItXB4jtNe2>&N6)Ql z@yk;nSA&FNe91$_54)XX_}x}090`WYmJ*l2I6!3rVH{lfLSyl6 zUgBL~C7}P~80XTZOEGrNQ6V7VzX3hP__wdXLSUvx0l{MYNfi|+96vD%?q6Zj(A#DD zFVbQOE+~o@N9P_Ov*@TYyaMp(a0HYdF9ifzEILdh(XoT}K$H!A4Wfr*eD%HIrXjXI z^eBoJ!U)m#j1J*IU+DVmuxPmQCMr~y9tSI=J~J$u9>qw|hgF2FkKTo%AHfLhFQBdJ z53B?FaAH)Co`8;L`@m2*=d3q1%>#pVGD+C=ZUrM-wJx@`*VyVwMa9>^aRI4*k1^Bl zp3ABgTBw83OA&$PFW~K}5Q?N+_}Pj>C8y6FUf^wIY`3mlYLVE4GPOtZn%cLlBfcu@ zEOUOU{CqajMe@z(sINkS4{q$4%!b^-!#_2Ru-*X-#<{#Z3$^SZV;6R#9bMK1ghl{_} z@9gluSNFM~V(rxzr=IIPZoBb0d)YHm?z`yoZIxlq4u(H$eH^pGwbJ0kjaToxva|YD z)W-?kJ-Oj_&D3wXL8K7lUq3w;)z1*UpR|5);{>xx+OKiH;u}ld)Gzhin5cJfTIHh0 zx2|rOd`#r#W@87#8$F)CPg~t6*tF;re183uIcsLrgwIvSpMA@%I=S)G=67Gag2YaF;g`Io<;$V_A-$WhFP?rS{aMktGpb;BL6+tcBgzV+UBV?2j~reEL`2Pze$`;` zzTq|I%mw3eWbK))eGa;P5`_(Re-4Ir(r)O7pZCA7VRQFHWa#1<;UT)dUy|adcc-n1 zbW6j%sCV3}e&qIhRZ|0dmFu(eH*Z)J9z4fNwscMM@%n_-`_9db>Ns^aHT>3bv&xNG zW-};m20b@5UsS9Wd+*ad?m8~?Y+g&qa+wWu&vl2Tb%JgtZpIo>Y%HdBmwj0L^0xDX zBMri7;o~Srerb^-(~sO^oO5-1ZvILp}5H>5^qwPZeeb&T_>p$7O1OY zJK?j;k!tPZ0qc*Nd0mNEIPHD;`aIc9hQ)WV z@&Oamg%*2Eioh>3j@o{=w(rWTK$S4FnO~;V5~!Wh0d9vMR1`CVci4Z*N-(Opv`76Z zU7fnc(9QR-=yA@zY)ZcD>Ta%W4LH%S#VBL%IL)q=de8OfPl-PQ3isWaWsj)ODRM-JS4!#?_5ok6uW+;ae1Z=8}bH&I|c$EM2as zw8i_dq2cdKd8YI3yb_Z*P?c-`XQB06xd4yM6*HHPubcBN+4I1@RHn36^_X(=EYARWOYv3o^SiiT=9jHc zY)7J%$9r#df5z2rl%MHNVW;Qg@XMKYHc@ZC zOiY=X_wY#NX*cQ0ZS^<&oyo7JeAIDS|4OvA=UKyv*A@>v+~Sue&OEn2dsY?5l-`vrYWmH&+DIm8sR_zP#M|@>ziSnK)eC6wwX3SLUv6m{zD1I*phR z8qw-}vHPifmj-F`2|G-ccJ8VA1y7RNZx*~$+Jn@7!LTfL9`;?j&h{m)xBNncR8sh4 zHN9Pu(Ptmg?I+Atky}K%_#wMD?D5w%U2bcior*MSlayYqFgwHPaGFY7wv!`s`7DE) znuG5>cV8s_%3If%T7A7m$~7vN+HFX-y3~8K<803Zb^w*-&p#b4Xh}f!7I%~ zcIGdHnp-knSwH0HI>k+{tdCAx&1ot*&Vj3IBR1B0{?Jv(ZrdzL@(m816uRF&DO^?V zN6H3EMZ$8^Ij<7yCAJ*4y6a%|=;QL%z&V^*EUw$5<8y0@CSRNUVvSAV`exzVF1vPH zDa=l^+NQmhEY&6#oS8;c{$)m6Bcc9teqe3cE5+Qy{(&LIGPr8RCoEBh&@r+TXw15Zr!FW-mN;{_`cbsNjq~tq`x`Z ze)Bf@33>c+<;#mNCgfL^yInVVvSb!#($*j8z8ED&PH5-O(BD4n7ZYnGChNEPUXn2P z-9FcG!l(7A#%C_A5{fl!d3JRCx8fg9pY6EzdVKlj@Hx+Kiu9cEf4KP1%*Msv*8Mtr zRQcl3!un$|>r)P$O5Pvc)t5I(+xE%$yoviQciqZ-p=U5#<~T8de0}B7*{7&n0^@eY z%nbF@xl3=Z4Vy)sHSWOrg@$!s>eAoHrl0qje?Q|I{mATwWybV-6Ly?Sf1{lKQ)z+o zvG?2dN7F?qapOy|M)uXsbcYos>x%kTZ!i+y$EE9=PJVL`Sr~R?mC0f8pVN>I>5c0$ z(y?TbD*yQp9KX6e=qj%*{leIo*7bJxo5x22e>Y>AJzJJuU-@p|w0*U*cg;>a?aw!j zn?=8_ELy_7mUrIVAwhXbZKcJ|A2W(3m@S+nRXh7~mak4ZOGIqeQA0zW#>Ce>-z9F$ z&*+Hpy}8yd>;%D*JYl9&Vth<#H{pre`^nty=UF(}B8_!&92Ncf`kRj*l^6CiI!NhW zwSQb|9Q~S(zeiz4a>~h;i|-!l_y_E@l>ah&`;4!C+qXye8R?J17Es;aZ8tdfw#r~n z)w^q3@$(9t6n|sqchyB*G^f{0n|7z}>+Ico=6i+8x;xJ@yErG^`PHqM8`@41=5|Iq zxVUDTf#u0RroT!V@OZuAxbZ)_>~A%S&U3IJQ=Pe{r)b`g}G)_WKI?US-pOWnV;| z)xObRvi#@Co!`cZS#~ab(fheJf^^0vl;-$6P4)KEkIctmKP2RDU-Um^8NFG(u0?z0C4Q^cHKs+|`RNo%&dFvf1z4pWI91f4oiI%bG&f?ZP;T`E*C$ zsJ-{K((18iya!1u-aVr`&h_q#zC8!a?{XApefw#&BKHgX_xi*BRkfBSD>tm1beX(j9$xQguIR*pS6YMeHb45>z=iis_#*JSF7VYb%Cd)VarUL&b6iG z`0JhSRqrGwZ_?zQ#a?L*i<*Rj{^p)TEQM)(isKg%w`Xu}( zMIrZ9-}UvT{87ty=q8NMxpUxh&BHLn?BGEhQswC&M$DUE=ZJgMn{6e#;jo7BVV!N9 zO=P2zrHsa#Pl|)e8}9BvmM>l!u;P2_X9wKm*I84%{gb_vdbbuzkxw~}i)go1)7pLH zcX;u(U5;u7SJb45`JAmT7w`Qc$Q7!(%oP2hA^9|1dFBzFq-fzIlqC1UZxSt1e$1_% zi%Pcz)Zo_2I{PXeRqh+Fy|!Li>DBI4CpRbO3oCzc`K&#C;nTn)62Xc1jYTUdt(R2} zD|*aaRl#NK`0}0|aat+r$f}b`R07Mu+Dv@Px}M{OtEDo^E%%aKrtN7gvwvqbZ&y?C zih`|8&h`JjoqFxAzWejHvCYpny;(^eC)HOObx`P5OjC&8g!GN;>6_lD2hCr$_$w~t zs9aCGV)B!Ve{!cZ|88p7xy`hYbxF6zi>=x;-s0xd(mS`Jdme6H zK>1@OCq7H!s*Sv^r9$ErjWz0*=8hwDtIk*)yid38w5##<2SM25!1WY8Ab$prNj{ zbJrPF(@UZ%$Bt5_xO$3fi@)wO=~5HPK!VI~E7fe>@LH*6f|Hc={R?tkLCf?PziDSS zeOkU(y~c3$tFHxzma`Qo%Zfs!GO8LEuRZyhoByFVZg={lo#&*!cl2d9PcAfT-KexY zKZ|IaO^49PHwa~bz$v& z$ND87*IOl^j!?p4sQ{x-LQ2Nwd$r;?21>L(7O~zU`q2x#daC^L?_W zB`>_^7k4jX`JYUchcjK&3}1h&im{o&4!qRf9apS0$<$8vzKGnSYTVD(;|1wUcGESU z{xN&{p-sW`^7obUrJGky3=54q6ZUPf(#(x#JKUoeAM4(dqTuIed*A$ux`c&t#9IGv zhNYhxzNc@dkJ}K*KHK(9By(m#=UH-3aC>R`)_D0_3!TnLg+_7;w!xczp2CeATYHX~ zgs)8*N3ZaC-`T#0{){fOuI||{g}bap!tZ6r^|~LIGTFXZ1$R?w`jsj37tdAtV&6{g z+uBREyOzOdKCd8NTYo~QW{Ms(nt^aGJ*`vOUe@>XqmpyhwG zVE3L>(y_4jRfo*Jc6Mz1n&PDG;`zafTm04Uc2nG^RnsJO4TY3RN$zp4t9&d!_auEg zcs}{J?#^Y3=81QUn>QSrX(D?ZxJ_l}=3|mK5)!CKzx(bGRh-0b z{y4=|^Q^{G(Op-HL#J*F?vb^9o>MJ#vLtizGmTUw&27Rjic@Zi+kKmUGRh`Q&tm73 z&)PcCzn*TzWi1Rmd28NgYyEMNjmRqQ7YC1XxmHHrbFQO1Z`YQ@-&fzni2FQA z+B)r4!|p)Ekiog)EY-xzjf=eOvU-=wSU)=Xrqp2EpIuRn#;fK6$Wpe93yCdA#QkazIitB)ItLra^#k`@ig2-e8a}vR&soK~wnYmT5Z18~1LR zqD5|xei*+|!wNBtO-RklHvhPjTk*pE&c0pFE>a!WbSbiy+CN@T%6TtbbJyKEV1+pQ z{-Rp7|NJ+v`|PXrs>T!X)++vkr`sFYboe|^yK-#a4l$d+LVXj;YGQ52B9yzPda-lt zB~tLOO?ekJ4DT#HTu2I^txTyb%KZ?~Hd+4hy6bd#w}h{Op7n1(30uGF-u-dvRPL`i zsqUrL*TuJ+ro=RGoe}XySCjd#Z>}oa(t|w3`faQ@c5u=U+|ub7&j8(Wt;>siXLjgh zBv(r+oHAvb%l+qbd!F2$vek{an2T*D@~1v8n6I8`;br>y%~Rd*K)R9finN~xzMXS5 ztnD%@Zuw~4A~LJnLCD1Om&2+9k3ShcN?vrYHC#ioa7?0a1I)UN%|%&iJW!Pb4YQW`~#7xxE=UEZdu>nr1z z@aIroK*s5m?xHew{?1)*CU3W=RQQQUi*}tNpVQb9sCZWIl<8*Qj7EdqtA4o3sMRb*ly=&+INF&} zlD=nU}L6SU^<#PkFEiNw(HCNmAf!(Zh+Ed*6H{b1Cu@Z4wcA&qk-FikiFepO*$Ee}Ue0~|(bGLSHD~8WW#O(1N~$Gk+A}mV zuP<%uJS%=Y)L=^S4eNu7$H>ed#pnyV<4ZoW}puo7)ud zIw7pSxoLY*lokWA{Sa_=ZJ(^ka1yDaZHP2T;Hq6 zz0dDEd}GJu138Huc|!Smy)Ne;ygqh33;Xni=Cw}ooNew`cWWr>N7T(Qxm_QVrC7Uf z0^LV97O|W%DaHwZJG8}8_P;w%Z`?AmkDObQrFoMsU2;+Brq)5DH>}HFn>BrM z&K7r9FK@3{a#1+tdhsQvO+u>`ufI5vw6p51N@Zu0O|SWHH#@KCI=j3s>KGR%c+K0_ zbKT3ag`7X{`O}_ z`O9D%=kCtc+*jE4rbT#O_}59FWpHfzj;8zXH}806sr70S0huH3E~Hea@V+}cYwoOX zLTBmYo&}d#eibWfcl&bhm7_{WRQr*;uFX^T&v%hIuM?fo{6nPVcJc-@{FXIGly>}l zMhSbiI5}IrjvcRd#lN#78tdg^Z#nJ4y@Kwd)s81}?d!MDUu_YYT->1Wb9Gsi`Mco# zY4vI8{ypU9Yjw&xf^VHF)^vGib?5O#V)pLjXZk|M(v;s)4b5*&=*xNw?;W>PS*bEh zNW(8Cz5I#zsqp6=YU3tO%m1}n=hmC09~Zt?I24eH!<;$BS?;`9?hu{XXS$xtS!*u+V8*-~-s7;ohx+N>l6Tv6)*@j}M7TG{)DQU8h>T!9{cRQ_ny9 z)*pJ|;q3QKB(3oA;|Uk1jjd*5So^&E$XYf<$Y=wrW2hSd|%ptDyiTQ|qa`K+WW4YEky|UprL)98yOhLeNs{3@1{zy9Zz<;@JaW0TU3 zzhaG>Fi&!hW}IZ;hejbG=kU~*1iA3k>O)?o&l7J^nJ*f%;6EHX+a zcS{HCII}Qg{OS9932XUD`dM-; zu6KPovam3F`$@T;@}stX<25^3lX^ZG_u%Ee$VPvEq#U6ANw;QuxnFy6{xNH(WruDV z2u*yf_VIS5x{$Rb>*Vt^%;rto)%W}Tm$mhI>1Xey|9Lp|-1n19+Se()VYa@#gvi`_ zuVj}mH`n>F+jF`ho4823^KvpSuVHAYs-CVK6oc`^7aew|)c@;8HTeUd-sqImak)vfgf zO)Ko~TxO{tN{+IQ#K3JGUdVa*A5QPz`DUBzP0RH0Jwr?0J%e)xH}1Cem5b#r9C9Z? z%Lt>sxwF!VagMy9NqV}=xR4@)#4VFv)dYSzo#%bNlC?%CxK1;du#%AEBkZPcm7BFy zsaJS{@9`PuvBZ+vR$@+m&d%9H*1{M)o401$&IqS&I-FpKSRQ*xQ2N4ZnV5ZA^UZ-$ zXQor2xA2FQx2u@h)(w+`iw}|wR_vIUy^~~Vz)7!YEiV?yJ**U|>2r0xA#tILo3N#K zpr$Qjo8pxsD?(F?+~N*h8#`gWmY-H`&J*1pkX$`JpK_mS=Q=60i_)2+wp?wiaO$|w zyUt6Ul;UvH^7h>OYDR%*wOWD1C9mjnK)FJ%1}6NN4hDwFYynjXx3fXm-FlX@ylA}!N#rhHExxY z?B>0WJ6?3RbfRra$AJnMyYoM46+JL|Vs;;3 zv455hKmNx3)=evJew4L0?vnrCs{PK?q-j&1$$t!c za%K68f~syY(Wq@}9bWemL<%)(R&Ksy`>QMFW5csGnU~6MeE)C|+5KeK^<7u>Wq;=1 zsL0)9E}XAlwR_`Y`?Ao}cP}j>OwB2Z>c9pk921XJOS;+mTtPgwI}LyT#+f3U+BmYM zncDb!hg!bB%)#OPJGKU_HR|1NvuND)usyi!_7zS`eiB#u+WaKOyClB0>22})zUV^t zBvY41AKTY{d$W8;(KUaX=3@CjBF{c1YBVm;GPt>=IWT?yA$8~G?J8zY4-|fvBur0r z&FT92`Vy9vjD0w9{qZB&%bs7=^nKlCEIs*4w0U8|?mog*-yMaw^w%;E&9?9- z*?hRwA&bkP)mCLxi)Ed>Pi&v+X`q~$G;iT1efi0oJvJ%cZGNU<^xwz0ROzZlW92!W z!s0XL9lLq=&d>EH)4gZTD&EoBwPVqv?AxR(t+=;GIHzpLMH!5AAAR{Z6KorCTb@NZ zy!lY4trly3%F3?7En@2pJtHMW2|tNs>m@!PkKVd`T}DcA1IN8roV^ma`8rbnz14R7 z$)F(0#$D>&7|FUd42w8s+ef7yN&Ag9(Ne3{%rJR&Zsq=_5_M7k%5Pq=-3FrmNgd_m zSB6vWUJY7*p;X)kjPzR2;L-%FQNT$Z2T=T>e0etXuo)3TyRLq5nZzJ2G+1H4{Cv>R~+b1cO-cCqAqIX!< z;DF@e2qOmtqaSnWo2GRXD6P5rMe3D^f>=;+ZNrSOQQmn;!bhyWPbe$A;CcR5reT1? z-Ep7i(|hQWT23B`ubW)8obH^Ezgygc*iR#H4GRi)EtuqBYBPt+v`AgS(@m!3$>W@w}fw8ma8LF zZ#%D2UA(L$3aRaLZ>HIZnro3dp6hPAZX4-XSLUH$rsUW9lewTMva9IQz23s4sXrdx zi@gfjkD`vvwMo67=c%oc`EVkvdj{N86h$d(m#EU;h9`8>C_B(w76Ylnt?!4&W0a+mBP7sM{6 z>7!PlXirdmj|YbUg*3-E^Vlodd0t!hUy~$J4o};h6Y1&X{pr1Zz`N4P)!`q)wCJrp z3Y;(Y+sdOo(srodEGtrVkYm3nFIL^~V~(djsV-e>c8S@F6PMjmj!{-<3GYgjT6Xu4 z?G?n>H}Z#<_ybIqRo+Z*JGJUrp+8=(HoLj#{R>j!4}P`S6x z*#6+MAk4vghP9I#EL{vRhnweTM%4Mu43iW!qqpkZYeaore z)l#n>e#f2c9e7v4H^`UM+^OKZuhBb~C578?!Dp?IsiYC7K$dF6QU0)I&W$HcYfnvn z7!#N26_+pT)N1{5)+Zeg8d0lreZ|VdrtbLtdlkI97PLP~-e+rjb}l{iPEpR9D6f_# zqr<9uCT}||D;!q4(T7#F?b>AFmo7KMU;4);lU8m0s!1qo*qW6$`P!p-DIT#d>wX?u zbL;-;z22^Oj(9l<-JWEjj`%$8J|XUPvEINY{J%{xm+)$Kl71h5si*tsF6&q&clhFj z^Bt)-IgdGSntfqXxT}{EG%@UT!Mxv-_pCjrr}f|A9&Xrc`y*}JW-&O6&$Jn1wdBt) zd;hq4{|+f_n{YE7eCdx%Mxt*NHTIf@tuPIl@bZhz@@Eb)Mfb!mU8NPW7rAhd} zAWi8+=e0V_vXi`7Yu&5k!@Lv7PV{dQ%HFmkhG<| zs_0zFaYmywOQXS3JMqA)opUSNKU~5+mBIJx9`ZBRqyZx zGx2^|XX>h_^hjd{Juz%~Uh1_X+o-DEz?!qh&GeindnYYzvzdjvSa+P|`oMh~_Ud7x z!o`|ElbYhgg|_w2Rr8LuM?62L(O$Lf81w99Kjpf8InzV%$Uf0OpHC=0y-c4Toa;aS z6FY$(vFxhuiJuCF$(rA2BGwMrXS3h0GG0nmm2db_cj<@mcuRU7al;w+=l}Jr(tM1$ zp#6O-P1)v^=NjJc*zUOZLCLf84SsbuNaP!I&RpfwC;WW5MCdqGxhlWAla!JvA%~={ zduhSd>LbXv$M7rf{~X4Q|$rRG`o zjLfnUMjM-%DJs>X{VB~EAFCYO!rGnj;Ad*{3(nh{)1T3&(^UL^tv+^ZZe^+GuKG2F zmJ4NDnA6@AJZ1Oj;J%*`PhWc2?QCP#!{w?K(hpm%J84GZi94+lPDJnCiKx8zu_s`8 zZB$jvl^e?>GA$1hr+HRyd7M7~nvBxU&pAHdUUxTKxO{J_Nzw%OYYs-=4PU8Sx8?2p zllQ8+9I0HGN8an?E-{N?*895aLF%eDL#?POLXBz`JL+2ic!#@^t8DF8^O|R{{>@*2nE4JNH@& z*&W@RJVNM8Gf|E#356^%QP#1`Cn_dOg{&djk|o&&QMOW1wjvc-8WJsbvd8xt%BMT| zx}NSg&oj@M^UnEibN=UjAM^fxKO^lipd@Im)oJFG5^kuc)$w zy!r-R=V)HmtF8*h!i6Db{7zLIrT%fXo>U2e*gp44_w#pTQFyHaf$T3#$3TPmNO}rh zk!5O+0nf(@a&v8-o4jdBEessWTP+f|Z1-j@-f5#&g_o8d!Ly!7-|4~rc$`NP8zv?G zuxe<3wCk|y{+-Xdct`oB?+L2A#f5Pn-4+=kgC=BzDAG5(~!XJ&@JK}Hfp^M zau4ZHyAX^wH<&sSO0AdzBWYc$J96UBFVwasieuuR?^42e7m5qjw#4}Kx8b?R<`OqZ z_a5O6(SGcoaIO>iY1X1n$z{~%lE(x0))U+bm@5r9nxn~&OS~dJKMXsn7_cjutr0~C zjKhSpO3$-wcImrVpCPlwTTVY{geJ$_4{f?d;#T;TxU%~czft=?rEHeK9u-d+R2Aux zZj&E~jq+!xmbHxPGnn{2SZA22N~JH_(j*bbw#`uTkW@@fE;^+tn3qBee<1%-3a3+8 zxx)ZWBl?*D14GzriKxl$e2Bs3N?arRMAz%* z_^cdQ*JbFDY6yI&BMl0{dqLk8KYBQEX-s$et zi!^PsR`)fSTOYK^e6$;yFnn>dPlNHjZ@Mflmy)a(5ME!Lj1Lh`FmY&md2{ih2KtMRF!0)e2Sodq5eOMoROKc>yA-J$4kX^5AJYl@)zye!b*E9b6Et<0A zn|daCUeuk6k8w9u9JDA4z|nCIC0!f92wpk#)G+I1-lH3gmWfXVYjkh(*NUSpn`slQY^9%ZMMpnYlkxE1$S0tRL5o~L;WFqfFEOymOECMip6ke^ z#DocKbMC!fyvZF;`}Pjo;jo&!f&#vTpi^8IDI+m^yMY z3?yrG9;btO{Dm_Ls7>@SRi{0>qFss!lw#@v*x9tJU7suHztksnaSWKs#5#`|RXdH? z(0bv6ODu*2CtQPC=*9Z?<#N4KFl38}*nKE?x-_*nIQx*^s3U#sRnepX)J^lJ6L&D> zb3&gsvZVj1ch0K4OSPWWmTx_c1Ji4h5mDYFCB2@lx!{y$f$&z$4Ze48; zFH27^4+k4veG#gldTVQ2b2mGu!rD6(8re7F_Rde*&M{^gbquw=sncx0T2J%qRW)kz z>!AIZMjhl@quH9pWwpe31abD|*6+!%uN>33^kW%kq_{JW`Atq2o!6To&)HIq=pWr+ z#CDM7+y+YS(}_8(3>m05`t##F9-SpwC`+CumO@cu?-n^G54^^-$gL07a&Nlr*uYe zV#pvOeEtm^LWF`WPe1N~$T?eK5Fj9;iEK@BkZ5&q@1sjAni8-^|kH(ilj*Mv#;&<@8a{h3Q(TnQUV=bTe#N&gzFqc9(!h#Vw)Jv*AOI<1Gc0q~ubt9A)d|Zq z`D;60Z#|b2U26GnEd2kxuhk^~KlZmq1AQk8ur3=bLIOXSj%=`t%Z7UCFzu?{bM@HL zJ5mdaY7yj1GLh95mc9#8V$&Jp1%Hu%3bN|pG<^&UHb?T4ZK{IUlcEKANt1&MfXjH{{K`d+T|^K#ogar z4y3w`+ReiBodlH}#i`j^zQk8fv*Ul2AuF>KRCc8B%EPJ!^EEYmprkJH?DvH$eE zU$?B6>Q3srBMqBJRzLAUJV~umcUiLZmt6&cLoXKLXRctDEg&K<#2G8qSUiA~)Cu9W zKm=ciSIhq`6Z7L7R^hgFzcN#(I5}aRtlb$+5!xUO!rXyewwRj!*a(rngP62B!i0dN zVt|D6^^uDF5r#a;*`Ola1^2+cP#JPTZqNm~A%tpB18PBSs0;Pr5%3Q5f;-?YC;wA&1cpEp=l~z!4+20SxBy;)SI`#PLo9TF zj?e|VLVhR;Ip7VL2Ge02On`|n8D0Y+APgEoV`u^~@Hl)AKfr!C0EgfRNCj!&3#5k| z!8{}b_5ce#;aPYN;$SVT175%zRDoJh4;n!ea0V_Q2_%CYkPGqv9^``pPzXCmcUyO5AOm~U=5A|GjJSOf_^XpTR|rDgZ|JB9)yP>4;kOuAaSIS gx*iTljfuE^O5~N6c>$5fBO}|hft(Dthk};uKikDBz5oCK literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Core.Transport.TCP.beam b/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Core.Transport.TCP.beam new file mode 100644 index 0000000000000000000000000000000000000000..2c2b29692746a56e71167af629a3187f0d282949 GIT binary patch literal 6480 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Core.Transport.beam b/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Core.Transport.beam new file mode 100644 index 0000000000000000000000000000000000000000..4cce0f762b1aa4c939e8b53fdd841a4435f9e287 GIT binary patch literal 2808 zcmZ8j3p|ur8=s4NF2f)q8=Gqxl+C4La<3&eW=p9t#yew}nRmSJI~PTfu&vr$R`{@8 zB-u8LP%f2CLR*rOTkQ%Tl~z`{mDuxA`|W<`_xqpood5Hj=Y7t3pL6l@-(g1}sEoUL zZt>fKF&qg5!ra2b!Yic}o_wB+htT|ZLX74PBM>bJVF^(Yj9~FhCQrzLnatBH3`2Nf zVhln>Y*--T@uAbWW1<{s%lT0Pj=~|!;pnDTQ6G|t6T0|#P0lR$_ zff%nqQKJ&ma9oer@dw^Pv~5XbT16beyk zF$xteAZh;3sgl;B9Tl+D&1zaiCGEw&Ht6eYR?{X2Vn`4^nXLj5-Wmds0Mr1~|4$}* z$`)#55xW61i%Z<>m~|7O)=Z(o6}=;*~8?z znkiY|s2OniiF{D2M3AH^QiLU9LI?sQEF$PDibY(66%MiF@eT@M;6I}*66naGkT85n z0(mB3kpV{)LR=W*;Yr67AutBBVg8aEkVt=zq_SZlhQNG~4_w@g4WUae6@fwsv9U#8 z@@zhgLM&n=f#3_X|G8G$AXa>iIsnv81Qq}qfutJ13KxJ560rcG4hWVQgPA-5z6T?LUj-EGA2t+42(n?I;F~t# zJeH8f;c;vNVGbq*qioO!7%ZcZYYj;tA!Z|rfFU7IW&^e~Y9j#WfDNA)wj|&mv%x+c z2sB6rmW$vK#^r&Ss}cji0(~pXuiE8@4tP`*6>e_VpwHu7gN8_;2T=1a%(p%7Y-GU#qAZ;zDtc3Po|{FCjCenWaF$- z-<%WZ{^`EwrznskqA$uRYkmH;@AnEv3)`t~b}k=|EgOo|mXVz5KC96?Qs`7;ILptU z6SYkHT#92pyC&?Q9aXo$xV1XbNBd>AQ_<(wG}MgW5y^Si>RRbLZQGMS`%cbG<%N$$ zPq@>=5!!aW=60h(#bstDC2J}T#8FiZ+SGjYKGmM@6Te-ZY^P(o7kblBoJ94$OLjhI zP4YY;IO<|iO+OGfu`hbg#rl*?CvMJXO?{`DV(cN+wt}5gcWO&a<<2E*YkfEH!MpOt z*^|VMp5NT|?8*G5d8&f-vtq_jbkM|iMFzK0K3sM2*;ig!MX0I3#K*gr$={!uJ$kS( z|32sPvDwt>VahF+wT%b8B+kz7N{>&cH8eZw1ca%ZKCS%2L$z;v@OsO)Ih&b-fq4ym zgx(E3D^OfCml&sa{~B;wxpX? zB6Cr0+PwC&m}KW(-SdqaNodNqVfW1F8?y-l$A?_E3d_O%zB7Z*4ByNMX3EUx?>tz$ zyulJXPS|c4pKR{d#G+1Es`?F0kteLTHWZg6eV#>FL2H{BVqBPDysXhFF1S}Xs|V4B zcecJS$zgtVH|y${nyp1Hz3N>0`L&Z9Ln4iz23J?NJu58r%Fl4fG8Mb7P%3t{U{^Eq>;R}Ct9-OhgFtxtcwO5Zi! zKUqeWNhAJL7~kVn|C6sm6*evu#|e2)w~jWvPC7T~+YzyDS3H#Qc+ILy+%(RAw~ns-rqU?Z-e**k z*ZF70@Q=P8uA}R>cj-0D=z)%V#YJzE4fgKje`m5IH_0I=|GgyrZJ+D&-W(dK=C1UJ zgYDX&{+j{)he^dfG^6|cu&f5;v$ zJTqeYRrjvXoD#o?Ju9i!u`+gsWY?y6=$TjM``_$Vy*IYW`ej=qX+EW|u4SD5G$v=% zq_I&tVjO$mOq=`6`sKsf?n${N6~=RWc0qBM?->4)rG4E$Fd&4Zo@@{_w*11A-%F8& z8pg?ln#W%^gfw1lj_X-yi|et?EUj zCU;(ZJvG4p!_w8tp})&;qN?;(=1a5gybqiwn|cN6f4p|zIbf$VotpAwaAfL-kn)v{ zDL3!FT#?HV$7+VnYmMp-F{JNJAN$QOyY@BAa0={FC4S`{>nKlnA#S3eo#Ll#idi_(mK% z^0ZXZ6bTiaED z%D;JcD(-Hp-Vjm2wv}vlBHoiE=e@f)OZ~B?_veaUC|8~zGS+obJ8Kt-`E2b^aYPRFc`n1 XKNW>fLQsqd*WvFJG5}Fyfk5~R?e1Yp literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Core.Util.beam b/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Core.Util.beam new file mode 100644 index 0000000000000000000000000000000000000000..f829de8c4042d5934b3b2e525479d38a1069fdae GIT binary patch literal 5900 zcmcIo3piA3_n)x`Go#5cgAm3gLKq4M(YTXqAtf4f*%;<#&mNa9Cz4XBM7QZi(nUHY zy6covu3cQZD(UFZDM`1JqE7kVjn4mk-{+j~`G3#z?dMs0t-ap0e`~GxefRtBclm|Q zx5wdh2wuLPA)aW|cQ~99eq?0i7E#MrD98{XwjlyBYU?dQVB08EAk1R31>yt=n_a>| zQAEI%qp(cMlZd1OAzZ?Tr3lR9pfJA@&X7tFRK^zZ9SaiVVje1xh-L924iAyYm_QjX zlJMn1I9`S#avsVQ3xx47BIJk@-z35)d#rKP6Oqc}2zhcLKxK2~2?;O~KgPPp;|qc_ z(p#e615D2(R{#2h5E zTPjD{VmO_h1atT>QaSD>SRg}7Qs7JxEaJk*obUvWPzDoe|7^?_a+YQiX)<0CEP~mn zgpDE`u?*`uIaSO`+(+k6{YJ9`@( z4(Bc5!(c941R@m>c2xng2Be0kDsW1gCR9Ab4cewd)O5)8%AGFo`bY5k?hn@~AkL zKLb)oRjDi@H5`X0QWf!YAv{q-kp-ZqGVnyrNsLio5GZ8IA{)$P(IA#Tlcp$;GKwiQ zXdGWrLZF_ehEvNR9R`^S`9ew{Y+!FV6Zle8rZNB&O_M>x6X}Xt0Br=GwX7-HkUt9m z0=2dyg$^m&PAcOVS&&XGnL*7`iU#P$WD`b~5{+yOY;+Xe;8jy5o;bytqHB5usB|YW znJiNRiw43oW8qB|Z&aD_ZV*LZhebB0=v|@c;fZ=6Gb}DT!51=vG@0Nveb%@zRY3$J zLbd>y2LB30)EL7u8pSfaLNUY>4M942REC168H5{8mjJS*L!-GFeS-xCGyprDiYFR_ zXv_eDCB>9%MKQq>O;}`WEMw3+Gcaz(q%bf(4V!Lc8!!mw*qotC@kEO;6+oH(e=~__ zIjXe9H)GV76zE8RYye^JO&^y5!ixmf-3_NS+h`^otnfnTE*`)V-sNT*Y?Nge0K<7Q$;*KW4 z4A*a=F~AZFmR*KG#z5dyxd4IrjPxW}%;50(2rQFf4Ppt(;4sFPSpZ`+njn;}GPdZa ztBkGq=_+G81QvtJs3#xFP?}7P^&wtN z#l_~kR%*RuRur`LAAF?UaxXa<=N%|c0IfI1!T|QFX)q!KNu=N)7h5K#7)wfqfe_Ml z#S*qm%1IZ4y<>F8MA%Y9!UM^rlM)b#2&fS_T^(3q0%(J!9H5vC6dXC&37+Kb7m(8o4YNXk?g}w6oAh}oD&Wfd%KK1H)Hx_oj&x<{QBd!%R)L& zg>24RMj*~gr5GG43(4-YzY%_jDY$Ikv*>z%zo<)Jy!+|kz`_j52O!~e& zUh%_>AH1CpWoYinmoNJ@zts<=?EZBA)y9*F$p#OfMJJk8RaGJDjvIT;UZF{SsedZP z<#uh|`%nFO&%2$w%vJ3S)Qy%iE(C5H4^pN%mszh~m1DBl!c&c%k|mmpC55aDm285jjgH3Dr%b zylFK3NY66^Ne+btJ~bY1mA18Qx_N4m|IAei
    jvYaJ~Uld~A%Gp2Zx!&Ged!S+_ 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTP.beam b/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTP.beam new file mode 100644 index 0000000000000000000000000000000000000000..2b4b238bcd39c6e69a6d3d1d1d36b234199067f9 GIT binary patch literal 43296 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTP1.Parse.beam b/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTP1.Parse.beam new file mode 100644 index 0000000000000000000000000000000000000000..20320d56a39c6d584c123d8113eb7521a119bd8d GIT binary patch literal 9016 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 UL=4FJu0aG71K!W8CLoIb7qd#gXaE2J literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTP1.Request.beam b/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTP1.Request.beam new file mode 100644 index 0000000000000000000000000000000000000000..1aff03ec74f052824608cb5becd20a9c0ce86f31 GIT binary patch literal 5596 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 aj%Uo*XHC@KG?Kq*KKY3M$UNHOBmQ4b;5+>Q literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTP1.Response.beam b/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTP1.Response.beam new file mode 100644 index 0000000000000000000000000000000000000000..367e9ad0b1c57276be25e640faa02976a49cda8d GIT binary patch literal 3636 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTP2.beam b/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTP2.beam new file mode 100644 index 0000000000000000000000000000000000000000..1402bd646c1e4c2383cf2f0f9976cfdca710c86e GIT binary patch literal 147020 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 WA5w}lZ2^=AXoIa~Sp13B#_)fQEG4M` literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTPError.beam b/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.HTTPError.beam new file mode 100644 index 0000000000000000000000000000000000000000..c361a13db71b850f7fce802e86db52b0541f24a6 GIT binary patch literal 4580 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Negotiate.beam b/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Negotiate.beam new file mode 100644 index 0000000000000000000000000000000000000000..8f6e45a07e403d087f180a9c49ac2901aec509a9 GIT binary patch literal 7012 zcmb_h2UHW=x=x`?BJqTTUV}lJ0-<*qy7VB;f`$+R1V}N3W&sfd8)5+oHl&FiMa6Qk zfuJH*?4T%OLlHd`+mW{?f`@nSd1u}A)}6J!z4!cm|NCE)erdTZG#7V?#k$}bL z3OK3kig>m_$Yuel_jZ!c00B*uqA;XsL^Q<(TcQq;tn)qd=Sbq%!pL07ru<5uqjqQ- zd=X1V!!QYqbl49CrdZgI2qpoH0b>q~B?D#%1%)nFAQGI>6;dLG^ofqHSEAElFFDvo z1*RIpWLp^PEu|Ct_aG`1ygKS%*>s3bqoW6jG+H$xphGQ}_oHBm z>aloTydGX3Pr(~ti8P{&Nyd`sWHdzFP9RZt5=hZh3eeCe&mfS{tSk^nS!RPIr3GNo5Lqg~knmI*8d8BVHVQC74GpROq`_!NO$mk%s1xO2stQat zgt4|T-jEFY(WtNuR+^(ogPjQ4AfMX5@+k+CvC?8iBHfXoh4sLak^E|b{F)Lp@MZ*c zG^B1z(4xX}Hn0j62ByHNR6uYnaHTPWph@+EC$r>Xf-&G|{+miY1PcH|OInOklzs{(tIVJcSIqeuazB!|R+p@N`c zyg6Aqs7Nb@{pe&VL{y|yz;aX=KNH+2E7Iy=EEPFaaH4ps7dTa5U&UJrkp#3|1U)PT zuL6pRjA$5o!L~Lq-U=&EKTbzOda`8eOCd4{&N>ziQIuk1Who6;fxQf28zej!8-Zv@ zAr)D{%E2m=qk>d_g{6jsWoQFqy=MfOu?JvUq56-Vsvp_@O%ysNhVfzs>|X z1FEdXr{Pry2586tF+nB6Dj-y_MOmmIvT3ryqfIV6>ZHPp1%*dN@@*)EG{9!G!0x6i z(2t`bBPpZ_2(}>g#x7Wb5%6V4FvVLDOwf=CC@EbuWGaQULSO+JGLu5uK-M1ko8dww zn8{?#f$U5)G*cm#KtV(1Qb;Ex_B0(cn1_3vPYg{#2z%{@RLMDLymtv z-5@6!)e%sg-3U(DaIr7~d6@ch1;~67;5PsQz*GPX0P?(520#O70%!rq187fLPX}uw z04#tpfC&I1kH}B~5dWesSeIPz3;!+!5BeAFeAaNjeFhLwKlAnhF$c4n= zx-u1va!HtU#ql3FCU)`-!ht6G1g1Q~8vns#DkK90XqUiCfA^?fY;y zG7HcYR*J!hT&gl3m~?sB5BAT=8d07qW1uHdX8oi9H=45EgBhR37K%9{_Fv792niU2 zc!dyqmR1&4$PFgRIvKGU#AhLU3<5y*hvW{~yE6ciJA^g^z!m^GPvo4f0T4O`0O28Y zT>zwpC5fHo1##=nBYripk+7-$|5bx^n7!TwtYb)VzLb@!rX1%oKO{CNq0drc-U zODEWc2((QpD6EqO4M`&CM38P$mi%;09-ko+Fw=RA@h((|w0bPINR*CC5c0WzEM%wu z2BeS$;IRcvK$r>$ObO@~Ib5VwOa^upM0|;m#ZEzmT1JY1Ps?}?lgCWpBv^*?6U6C2 z%TkoY2W>Df(VU&e=7}u@NqjbslVJ&(9+4#%^pBRQoVcHhU!A7~J0saUE|CLLv2Z0F zg$fAH*nT(Wo9JwV=g2_GTAPk2}}Y#2+0Q8KFqp2d>z6>kio2 zRk7?xwFh+Ga}>+(R!1FPke1lIYef5cXJ==wi=R&0?X-fa$0d!o9UeF9Nuqat^&E~a zf7Z#k<96p(q1VEis^O$v7nU~+U#~4~x_htC!+CyU|N4iEW8!X^pGmQ1viO?^!kZsz ziG!1q6c=!v>l?oYJ&p=}OgL*b?YJbX=eiYo?TH7W-0mIvT58h|T0DFo)*V^MEbAso zjqdO+r5#|lFK%CTPZU~Qu+nYqG1I*#*+xBXCPy}u=!JXo>OYv7H#of0uHLugM(vq^(%Jd9 zmc+$M6$^sT+^t#mcG=vKRdM!@QpMK!mFkjgPo<{Ub6e^aYx``u1se@a%6wI~zrvfD zVtW(rJMn5$9u;{I<28Mr^v%B15Cxl>yj7=eaT27WYbxs!(E<0HUUTi!mn8HrYuKy! z#N^DK-+Gsy!d2|wy~Ws}-L<#u-3mvZynM9vfrFKGHBg^4D%9cqoY?X+M2q9-t)hIP|DaY!*OJ{$^*##WJZw!|FocUo>I782Raqo%YnqfNdL|d+{(a=CrngFAUERSBqlP zdmBwHF2sNN{{Asv%eC?Ko7b1ROsn*!yu+AQS@`BfT+KOo=F}Vo?^&BdG>OA8S<0TB zDaF=uqff7-jis&mrfog&G(?omnl|cSB+0I-_@O`_{I!MS2( zX>N^j^X>(`UuP+PO%N?nt#mhi9$DApJN2+Vxm9h3J!$(z8pi_q0+BjF3D~Qs|)u% z^nG(-z?H4pMgA|lEex_|H3m|$P89}L3Y{E=h+#rrm&%Y4HeY(Ae4ZnCl8JF7Hk zpFw7pbJi^P>BO@}!8mX3>~Kt&!<H>)@8H8W zRCDs{7_D*6^QQLf*|4*?D(``s&!>o~P5ytPRAYMaFO}Zb5{kAhx4iE`nzk$cGuQE?igRKtIJReUvOVpO{vcHylb_dY0^mIy*c7iW?bvj|3N3}rn%x&j&s81 z1r>WzT$&f`6F$j%uq|hgp{Y@^ONakFjr^F_3s1Jhw_=2WrsksKp$D5@JX6MmuIJ3p zHnxH@HyAnn2%%fv*{t7kqQ1g2R8aee+K7{T%4YlU-XwdjLvP2D4|=@T{g@M4!@f@) zcnd<`KXdUUthj^jEB!;>CC^v!_br>7sNNgOEtwwjyFM9Gwpkiv*+gH>y=++%uIBC5 zXY%C|=A-4{+9J}uw>p?E`I~QtVqY%NY)zyuG_HzstvdF=FL25!Z@D8*BgZr&E|kQC zth&4_&_%OSFYrU)x45JpZvRRReJjSk&Z9x?{a@#Ac~EPhnKZ{$xVfXifSTzR&2ofSR|jYp1{M$hxdK;-)#Gqb=8Fx*}ose3H+LebWmU zTx)2Cd-mCGAWHnp{R&T)ez@DxS0;VdFz}$UTSaC2aB}6E%GRdxlRCZAxS=YGg7fMR zM3dW1l8;7{qw9x?f_}T|f3Ex_X-ZpN)E1#y-pfq8k3p$e%^jbNBdW#SP${{+&ULk{Ns4#&|%fe z?1RKVQ;rU0LPdV*^r?XG;78>g8}D7=zS0LKBwon7ZTh;d(=7&)K&Br;hhKS>cIr=ihGOVbw@)fpAGw#n`gQxSRK!8WYODvb{br4w@kOY z8W7wpH#(Q=)~6zLefZqnLc^;~p7r{qKuK49&F)@LEAdQiFZb4foiCn`Ca9eX*EpDK z_DuafD|e6qpM9-r-f6JRr+r$=)??e2OEo(Jg++qj!z@WvLr>vPQIC!;Eh{?ZYSw(H zHc)lp@AS4yu?j09FLv!Wd5Pa(MB5QW7+amGv-5kG(}Kq~g*Nf8B8*+XuA7?sgi?MB z7vi(dBO7Ytb0Z!Xq+Z~dzl={FX1m|H_1m*DynU_pm9kUsP#<(ytLpS06)!dXxYgI{ zv6+6eedZGBia$MW-0LQrH@M%-vOW1l6gvNypAL7IebqU_k=!5o1(fZo>7`?*a7PEs zMsiM^uF+6`rn!Z%#4+~asso$nHFjxgUAVY5dl7qYt((&6S*nBYtfd=%Y{_pld}aQ~ zK{u@hx06>qzwb$%}1x+E_;_YmfD_19S^rwndW+Ww(GzB#gBRYGf1 z%ZtcF$Je(^qVB*Ixv%gyJVGIYFYB5Co!mA__qWxR+&5m{k8iiFJ5htH3?8!- zZQHXIyfk?8St9Ua;f3_sn5c~HJ8lMsHq(?82h$FN*65p@8?TPOxLfL?*s^-})s(L3 z3;QD$pWea`J*}SfuEn%;Y~%L^_KRt|Mc31A&;;ZI5qpAk^lIyxpz0S>ZsJ!r?bARnH+|cOv$gkbjM$1#bv#(|AtHI13FPp@c<$1RhxF~Xu$;tqDr>sTf-SDv zDZf5)?NVOMjovlt#4u77!rs(k zrXY}2KOqO`GWJl4*g2nhBSLS7ed?9E!H8-PtGQ3hi7OPf*HzQ@X?5_X@_{7di zVG9{)R>0pjvI*21Yems ztaLdsTgd%SX~};l2;Sf(`#)%W%taIk;S0K5jLRgd^iraauTa zoG;D~Hyam(3&w@u=(toI7q=KE#EEgvI5(U-E)us0XNoh!&BR&ZEKsU{`&y4eMPv#P Yzj^@3_af|XV>AkwCtYJ>C>VwMA95D0?*IS* literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.TransportError.beam b/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.TransportError.beam new file mode 100644 index 0000000000000000000000000000000000000000..f8ae876d850264e10f170d3517df1c7eb9320a0d GIT binary patch literal 5492 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 UqaifV!hWZ5mJklYV{a$^3kx18+yDRo literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Types.beam b/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.Types.beam new file mode 100644 index 0000000000000000000000000000000000000000..7e80bf7911e6d1bd38e407de9f157e543fbf63eb GIT binary patch literal 2648 zcmZ8j2{_bS8~=}yEyGx%;@S$Sk3mhgvSqnSGqNYljPV}^vzYmhv1PqlD9Ki2O_rOo zv{;iRgrZbRb|I;xl3X;o|8Z~6_dVZvp5J-j^LyX(p7WgZp69$actudshX7#DAoG3sXT$gVB_%B2D}=|I@j-lxzW^5*!lrNNbTqL0 z8O7LB{{%^&skl^`B@`JD035QTQ((`o4Syu;FB}50*znB;0!SkrT|U8JZrn6Kh#+?x zok3tTNnASN-wa_9m@EbvWV5-V6c&R9(=3oH348Gs*ak95Fd+dGBo4$NP-*-m3V`DZ zu^Ai|84LuDU|iVnniyXyiB6(WDHtaP1>(Z9Fl>JY1ESLXw80RN4q=%743JI@#lShq z#?avW#RO4({!t))BI|&m0aiYKRQR|v;~n6`{Sum!;X020uwPb(*Q%qX+uFI$V!5-J z+<+d%MOdT_?yT6i?`XDQL^AG5T4&SQTq7K6orfFJ;CxJlI9(dv(z(fZdGT^_*I+tdH+D)9>I%t z;|C#L;o+_mk^M^AhjU`vn1!b|T@tyywM0}0QZ|$imj6z~FU%g6+gluwqrQq(OGpO} z%QfkIvpXX-by?Wy9I4w%bx9>|r|m({o4Or>r6c!pdX35~eY`1S{m4v;sJ3FCRrWDf zY?mzR!cL8XLFxG2Q!=((%iE>F1mzcRTZ@$59MQNY)>EKQ#C%F+>aCpv(|<24dZO@~YV2%r3VzQt?M0qiuQs!Ji0P*>qWt7Zbgk;^mGOnDP&sm9GGh5u zN4dy@*oe9+#j?<~YR4=+rSz#0SJtcR)8$)LuN6)HUSD49teTOTsz<8#I25EQe7#Hh zMtf6HkwaFP@TCEWAB(M!!6*(5JrB zde7X{rHjT(c^}JauR49qKA`u$DN*TrR#rayj)|iCQFz65MKLP^K9k-DBAG zs>3yneWoT{(DuZW3pGl6Yd_@H54Z&)KW@Jtv9~_(FQPgZwXkH`bh3T|<=q@El4JS9 zDm(d6BURdYbT%h{@nv#Nh|$TD-phBlPrt+8^2BL_o64;VnM*su#hXV95@M?d5~7$h9#Z(u$*S_;ArF*Hzg7p;E0N^n zKJ!e=`f|HI*+k+KFE$-p)r0N$TXJ;hVvpt;&_roH$hY zaAllubL3pn7iA|>VH5yZG01HAeY)}Ar?6{iPC~}9Km}X$Lr}B&$`KELQQ1}WDF=Un z)IO=DL-vIthkqA|eQNmRujF$EcU~wlWj*rOv3(a@^nTdw5eNa`cZoR<&I;vcQSt_DFjhQ~a2xchpwH-MS7E zB$tcI8gHOVy9&EW$Kj!su*JbegQ7kAI#(^@%E$-WiozDlhX2$pvtIC8?M_>yR`gFe z=A@HQGyQA`0R7_v3WWM3%=^86q%W#kd;@S&SdmXXB^1#P(X{PSN{;p?H ziHd?Ob;Ik1z@;ASq7oCF7SI2rR;&NpN$)H{R`q277uVXTnJsBv}gcGu^}%IdEe zt-n{RsK&0LCW}-Ol9uYf1*xrS6obcWx7EIy*?i9Iqka@8>C>FjX#N!D!Dp**gs8&q za~Y8AI|JLMoOxV@MNQL}R;kQ6|J1HJD@9u9@vAY)zAM3(X4-|t?|OFrRO&YK$}dC@-GQUwXp+rf%Wvw{6 z6Zh7`q+5fu(w4+KPI>e!+i&9OW05?(ji29x$(3@qGUs>6#PPhui;XP=dZ5Ga3A>=dl8a8+M|2E3`+D7#O@PXsR8 zOl9`Q)QhR67vo7CLy|DK+x<)^-?fhf6P5$in#51b->~>JZlX NH449eK}fCxz~5rzSj+$b literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.UnsafeProxy.beam b/phoenix/_build/dev/lib/mint/ebin/Elixir.Mint.UnsafeProxy.beam new file mode 100644 index 0000000000000000000000000000000000000000..2f973175500cd15ec3c6f55c60d3eaab829dc341 GIT binary patch literal 21300 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 E10gbGh5!Hn literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/mint/ebin/mint.app b/phoenix/_build/dev/lib/mint/ebin/mint.app new file mode 100644 index 0000000..17c58fb --- /dev/null +++ b/phoenix/_build/dev/lib/mint/ebin/mint.app @@ -0,0 +1,20 @@ +{application,mint, + [{modules,['Elixir.Mint.Application','Elixir.Mint.Core.Conn', + 'Elixir.Mint.Core.Headers', + 'Elixir.Mint.Core.Transport', + 'Elixir.Mint.Core.Transport.SSL', + 'Elixir.Mint.Core.Transport.TCP', + 'Elixir.Mint.Core.Util','Elixir.Mint.HTTP', + 'Elixir.Mint.HTTP1','Elixir.Mint.HTTP1.Parse', + 'Elixir.Mint.HTTP1.Request', + 'Elixir.Mint.HTTP1.Response','Elixir.Mint.HTTP2', + 'Elixir.Mint.HTTP2.Frame','Elixir.Mint.HTTPError', + 'Elixir.Mint.Negotiate','Elixir.Mint.TransportError', + 'Elixir.Mint.TunnelProxy','Elixir.Mint.Types', + 'Elixir.Mint.UnsafeProxy',mint_shims]}, + {optional_applications,[castore]}, + {applications,[kernel,stdlib,elixir,logger,ssl,castore,hpax]}, + {description,"Small and composable HTTP client."}, + {registered,[]}, + {vsn,"1.7.1"}, + {mod,{'Elixir.Mint.Application',[]}}]}. diff --git a/phoenix/_build/dev/lib/mint/ebin/mint_shims.beam b/phoenix/_build/dev/lib/mint/ebin/mint_shims.beam new file mode 100644 index 0000000000000000000000000000000000000000..ea142c0c139293a3128c861cf0c08ec5e531d07b GIT binary patch literal 17080 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 sf6xjW8D?h}R4&W9C|;6*# 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 b@_6}|7x=@s*I%#va{2Kh$V(8a$G`s%t*$Zf literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/nimble_options/ebin/nimble_options.app b/phoenix/_build/dev/lib/nimble_options/ebin/nimble_options.app new file mode 100644 index 0000000..86fce2b --- /dev/null +++ b/phoenix/_build/dev/lib/nimble_options/ebin/nimble_options.app @@ -0,0 +1,8 @@ +{application,nimble_options, + [{modules,['Elixir.NimbleOptions','Elixir.NimbleOptions.Docs', + 'Elixir.NimbleOptions.ValidationError']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir]}, + {description,"A tiny library for validating and documenting high-level options"}, + {registered,[]}, + {vsn,"1.1.1"}]}. diff --git a/phoenix/_build/dev/lib/nimble_pool/.mix/compile.elixir b/phoenix/_build/dev/lib/nimble_pool/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..8864488ee2a0d4b7123e7b84dbfd3d475946f93f GIT binary patch literal 5365 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 Tm7DG9e_t})OCR|^l76y9Vl!Bb literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/nimble_pool/.mix/compile.elixir_scm b/phoenix/_build/dev/lib/nimble_pool/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 ucmZq9U`}MrV9I4+U|=)UGqlh%$!1_OvMA?s&B?6DEYkBxtOA~NYx)DnvNuxB9qKvo-WpR?o zK@gnKkO)$VvMi0Kn^}yZRHTW*jaa1`qi77sVd|rpjUs85K}_n<%^EYI;&hob6RM&~ zMh?I<6R9>Eu{4II%_>$-;KnqJHll>KM~kt@5Yu5PiD6Nib@z69wcJc$v;}8Ky3)Zw zj5uLXGAv0+NW;-T=(&#y!U@2{)IqOYmIVhvP!y@gz+KM+5(47JF+igLxx&J7h$jjZ z!jjqilF{xWMgD^PW#)8@PF-i-lD|9pcqlAap5u#QrBVduBxMW)mNaFI5G<6E2j(0l zUksQD5(wVxDiny}%5ou3)GL9HDq|#KWsIC(E=iCG;WOoOp2$Nags&+*#6a&ZXW3&E z1ov>-LJ92d@Wo@45O()|eWts}A?E{7@mzt34?)XWI)%H$5);L(Qvm@K5&#+jhzE$f zr?+$e3WuX@4tXWOhXLa54+G-lxIH&U0ulk@a88eV=FanUt{l#b$63y94Ipl~02-HP z1T#;^vkr57Bb3{^aNh`p^?>7>X9BbEy|e74rQI(N8fw;ldonX%62K%5O&Ex~gTMfR zq|LN?k_3imNE!hvr=9$}jIT2$Qc%VqeH|E_aqb8g0ySY)$^VBlC;wVpuZQAE6?X^j zJ#lyPajxP>5aM8;@cVuE7KU&fPY5A-a>FOs#-_%!mCX3&9epqKz~u0BOov)<(o8#~ ztRkoJKO_(^2SqI*G~nD;$GLo<=VrlZ24si<;zvm396(ZzjNy)Pv5qB3grQI?fjBdb zMktz8VGLs(uAxa2fN9J+5=e0yz{4mM03!f^npqOTOM`MUQVjp5O6Mkx((OdY>qa{%mf@ov_42?^9oRZTT>A+hw1XS6auotPWYK{5+5? zYiZGIvTEDy{>u%aaeB{1m6eD~mm+uFk!@8cvYy$GeVJ{ac6OP*d`qh!uB3_AT4V2> zJzWgX-zwT*kzOp%5k)K+xRf(9;9uyQ+!% zk5uxrqH?QeJe`6R2KM;;I`+K^yS)8&X=kbc~+Zo zR@U}xW9PNlihCJjML)NbPeWo$s*ip(<%{q7!+Yy`J}!{5QR#ns(Y<>dTISV>|I_o= z9Q&eK1sD2mERM=}NxPgI3u zjyp@(LMjCDski3jJxe_I!PoMuFCR^w=sj(X=(y*u!3W{jI^d@kt+~iIUhQ{35(}f=3JA}>zW(Q~uhd!9 z{$YZN?kjui#HR-iY#&)f7Bc@iV_p|^>h{U$lXCCJiU*iMbgFT}A$#bUnu5LlvXASV zyw+q?=uRi!DL5|h-MCMBu1K2L@XL~p?0_AC-8(02Jea!Atx42JVE>Jz_P#S6Jz0~G zy0SyBo4lpQU%*4Idi1ps&!0am3mN2l$$ei!3rQ6NQs0k@RrrK$yJ_>Kgm2`+=sw-| z3s4w2b9`~q=ZR@&M@w!s&G_>t#28wJLO6SVk-vcN!X zN?`WqjO%^Z_s;l{MoaUmwF|wHanBKcEeEao6_U!0>p!)(%)1x7t0e4`tNpQi3NJRl z+#fgP(^*Z;SL*z-O^1<+2Tc|4!eJcRM3XrYT(3^Qx}j7XCtPEgksj$xpd+E?jtb z@}_aUW1gf}cxWCsKUkvf-Mq6h|9#VS6j~G{9^n?>czRE9*wmJQ7wIcjPxk!#XTLpc z(cWKETK0JKv&I6@RibTC22hOp@<0{w#vH#0h)Rd43>b}Af?2?Vt!~b)&s8l@^MT~6 z1~A0uGq{!m!5;)@_MD22=a6-(t205###L4q7NbpX!t`$h9hRK^<*yCFZ`2F{y9%;~X{Q>+&0B;Kcy&7&{!}VF7D0x?4F!a`6S3@X8M$xzhG&C7&qGUs_ zFGwL*gvvt|!9g>_BNRazTV}X6_!Tc$8XPX2;V800(vIz)Yb=zKNpXI8IDLUf4nolX E0EG&OfdBvi literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/nimble_pool/ebin/Elixir.NimblePool.beam b/phoenix/_build/dev/lib/nimble_pool/ebin/Elixir.NimblePool.beam new file mode 100644 index 0000000000000000000000000000000000000000..bcb4ee044d62e36a03884f36b1bbb126ad16f394 GIT binary patch literal 47908 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 O;uRaoZ^W-&cKrt{Ss5Gv literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/nimble_pool/ebin/nimble_pool.app b/phoenix/_build/dev/lib/nimble_pool/ebin/nimble_pool.app new file mode 100644 index 0000000..d0bd75e --- /dev/null +++ b/phoenix/_build/dev/lib/nimble_pool/ebin/nimble_pool.app @@ -0,0 +1,8 @@ +{application,nimble_pool, + [{modules,['Elixir.NimblePool','Elixir.NimblePool.Application']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir,logger]}, + {description,"A tiny resource-pool implementation"}, + {registered,[]}, + {vsn,"1.1.0"}, + {mod,{'Elixir.NimblePool.Application',[]}}]}. diff --git a/phoenix/_build/dev/lib/phoenix/.mix/compile.elixir b/phoenix/_build/dev/lib/phoenix/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..27f56fce0f3373eb50afc9f94aca0741259d9dab GIT binary patch literal 17294 zcmV(#K;*xJPyhh#z<8Y9eFc0I=O1^WLV;qXxVyJ^IZ1*QC`Ai}mLf&UX`9j}B}om6 zGivkNoWWljnDF`H8Yd4-b!C zsg*(#G-(=rUCyB&k)!tE-kP%qYaE?C_Q70^GWqd)X~WajP>sXa9^H8@JFQt z4H=ZENeeP^_XQ<^`(nX;2Gf0kOj9A-aW6c;i=bIesTSV_>ut zBQb$0;uA=++$nDdN?2ylDNe^|!7RYKSxv0Os3o{jlgw8KQKqYHBQ5$fJk#^^zI*NR z4h@M**%8{fKUgXzW~gY8D! z_%$1a&AwiDYs;z!3f1r|Q}G0E{5pd1yXXn6AxWn<8Un*~+SpFIgamFfDUuVZ>o^gk z?Fm5%;0ZBF;1Mwf(<5wCs(tf7$zLb#7)otlVjOdDXLU*9cO()uTG_v*GA5+A*VUPsUrVUV&J6-4w%qItTuv74v#U-a(u zt@<8tn>*#$CHr|}*Oc6IumkZ7Wt3cYP1lP#_Yr`ZYF?xgCU9d=AocS)>$TtGZt{$41s!1;G5vY0niyv>~s_s>(#PHSJ=}_Aw zzJ@)BNO?Qzmfw(j@u#B|fAJ<(#Q4Fc6X=9w1m_s|3OzCD{Rv3uL*AZR2Dt&tG!B$G^=VmoEHtNTux|l6z@Z zW0EW5?Imrw-Zt7!uUc#Gw4YUBb#h_f`Y*j-^F}K#q#U6q5`pX(nOMgmS>$?zL--e`+LGJzRHxz)HWLC}h*7=e&W-IKy0{ z9*DXmiTUCSM|5&KoIQnLQ8mhr1H2k+?epmI&#h;;=chHB{~okj})XS$XO(a{Wm z3BX`LT!qgBs4)vfYS4or)rbV=ETX$I~d+oua-FQ>Z%BA7a87B zmLrEsI&y}f6h%zDL8pxoaqhfNjTjv~v2-=6diPTCk5dmzB2tS>+l7PF9d){-?0cDj z*Nj0H2RDZMAa5d~w#s2l-z2@xsH1=)lVQJ}C0uQnab#eJ3jWsz_lSo5c_UR6wW2LF z#z>={=SBWtJ1T_ZHbvWwFan{G+VD!E+BMaDpKbIi%`RpgIp06%ab%&(ljl00eG z?2Jh;!ZZMvXeDP+hi_(VS{*1lASf{jmM7Te)A_`-k`MM@?ongU=D0SiU#9csQ(xLa zXagV_AWoQu)D!x2cZSD>n-FJy2$-4aDR$F8T-Cww?9Hx48~cTqs*w@rQd#gOCP!KD zCy_1hR3MS=Av4cAu?S$005rpXSsA`{zP9dDWX_q*ZNeCtCN_l8yY&u5qFmrE+sFeq z5B@TOZFsZC@SS}}_PZD(3MoajQ0~>vvZs5GKWBPW3|{pxtm*qADdzb2y9x*2vpidZ*764se@P;;X$@jp{P)m^Ed2%u0Hy$RJyA&nZMI!JH2 zIfgOaZJWsB-zIp(biEp!_YaSV&qZGpmDI=9Fc@RdCF>>K(u!h{Fw1Rr#8Gw5#$L5j zkFx0d&o#3aKakYHR$rL&%z=%S?Z-L!#J?Wtz8ZS>L4v zt^lI58isc38}ig;ish~tfqQs$i0X#lw|Q5df69|}cT}PKlJQF(Xmkrus=3CC0+^yz zEt~(QsAyLi!) z4|rVLD%WFnr`KG0%zT|D$qPc@WY#pTz^)qqGaw;k3VXoFCbklrP*proqhQ%7jJlSTZWP)Od|APA_+&;IPci>JFLPz2Y!QjmHy-PI_IMl)kO% zS|XCTTWwR=J3gvR{Or{wN<=LnLtnHAl?+0M=(Jil(7A#$bOtx^adY3-_3`t2t32!& zkgxIEhLcN+=5qv~4GeA2B`~dY`b5GgZCz`LfH%r~dkky6-!_>UeU99Vzx4Zx-`>sK zpXHzbiKJzBD|u2WwA;z!Z`|0p=z)K`*yw7d$KMyFwzIT%)EPN_Dz#!4bq`w0op$Ya zT-SDC+^}2GN6)<)T|Q#7B)@@in^Rm&nIIE#9g0p4>yWiIB;SdU^UL3O!U!a4Re5W7 zXI1&j&1HJFjWJOwKjy*>jRSYtMt)mshwiTtr}OQv)2a7{W|~HB%$qHA-bs_hBmn#( zUzn}81|?Z;waq~@g&ehZM?jWp?8amDFD(g`fgL*#N&lHX7pfDhK9}nYS(Uim0k5;U zOP^^*UCY^s_JHR4c$pFvnn*G<&CuDGD8_Q9Z3ZPCH@Q7`!$=pr{ zjlrPN#+o)Ww*nOx?WIwTUwvum$dt?Jg|IHXfooU>ZVMb5hBCS}UN*WH=HHktW0oHZ z8n?8~>SJirEfwY;?Egp<2lR{DTyeHrO;KQnt;&C~NaY~8=A?>c?Z&Qq>J)^yaF z{*jwq32S%6clXGk!Fk4JwrSe++hxhR2b;LH9-v8*7_hvkpv8ilY~$+pCOk|j@6DXa z_vevujqCc$L?Z1BlK!O&B*G~^+sGBljvCmw?Ue>2`{e7NdVNnXNkki_i;a~Zt4c6k zZ5wG#+Rcyk-v(TIUFViDEw%)&z>zCvZs*=3i1SPJF~?O&5074D!L422b9Xhv=bW## zd|}no{(tFf6kI&$YFNRZQ0qB=w;oLn4DV2hteZ?-TGf`UIdfOl!vnLh2>}oDtP5E1 zSFKeqs{68E(t+Airy3}+$Zxlue*3s`;y0&Ig>p=nWCjWMvf0oWsxAfy&`lpoHOGTmLq_I(F} z((8cvNwLk$oHyi@quyYfdxy3iLgmPd?YTBll{ruAK%v^?M4N;NFEbBO(Q!!@Lum*! z<#@RT+6DwD)3&IHWUWz?D43(^0o;8qf~j_cVck3ny{wbvG8{JInfFbi#6`S}%b7y9 z>zeChlM@-O(LC!?PLqi=62@dZ_i&Dr!62;hP0eqGSK;y8e14;dtM%ZCPNiaY z(W&6C+&yHXXZ4+%liT&JSg>%%WnJDj>mEI9blXj@{W?7UTB>GDjUw|K4&OInXu*#= z3mf|k-%wHi@XnaFH%~WNeD9|%+`PO}i&*DnNskLS}jt09si86%HVd0L{dZAIy+Iz25SRXlm&@uN8R2$;mq6jp8H zz#LK~Lh+IbVIFt*EVFY*;_Z`_;XmfDF5mw6;1!Q5jH+}h4ZrutmM+&7E6IXz-o)VD z2l8DEK?c5r@|{eZKXK2bHTx6u>=-a)^`h8w<5io2_}pQ&V6HT+X;TDTVP2Z>3Goig zc9|NFcQQ$~0~fpn7u#xIaFZUL#~$pPr_0%jLr;w^T(Rr6fcL))-1i6c>0XyLLnroI z+vwesX~myExH>Os39FqMcdlyn3VS^k4gP2R;tAWM^yocqO5Vct`8g_WSLVUSEMVs5 zAh!5cI9+D?zEEm0D{I?;W;VFprhN1|o-(pBvZ(yJ;clyI&^#$AK|`5>*+O>qF=K>O zPsV5vVQBHwHStn;Paa`=jAv}Sgfsl$;{+gcpW+qB6JO`FcOTNT|_ za!E+fX4+>ygJ*lzHO~25C$s;7bDp1!KZhvaW+{qv`!H_OVl!cdu81W;Db=2UO)m#24|HFa|Xs;d+WR`9>m>$npfc6I~5 z%K;EPtRUo1>yNE84jatnXPlIwlm3&gHkM*1i;u@+r>Yh0>_omBGk4CT3Bi?CW~}sh zJpXnFT@~XHr09k5LjyVt7*ns|;U}+#)(&QGbTFI`+TZc@o&6pezl5^4+rg@mw|4k% z8~%ORDQ~ve$#jdK48F)714uEjJLYiD4LpL&v547V0?z%9ml^ZtaYD%(c22nR&z4&^ z_8Uj0mfEB0VQ3e~`(qc?r&-uFZ82192jsj1D& z3oQ9qcci*|{>{~b&2$tHUJ|(QUE0F#Pc_)>md%CgrYDk;EahP~Dwuw5k*rCe8NG;m zCUmgmn;$-Y%RQ*~V@%)1^iS3qoh?irIT@gMr)Y^&q@73d0@dv#@4w719~QH-MSyu#}1@re|PNf+Tv>4%5_gBT$r%>eCqX#HZetqH>p*-?w3Zl=g#cA>Oy*4#-x_Rrk=Zg z5}B0;5ha5w`4pvxc)^2(E^d5{90p=|lU;fw&KdE@R;{F+Y!|0g z?tZL8Out2qqV6|cHN5-8r)!XYTT!3;+q;F{4SI88t$*sQ_RsJ4i9{w>9C`fM=&Byu z7VJ8&Szn{&P{Wq}Z*G{CuWMxO45>u7S|;6dfZ*JK{z9%``*#56JXWzTJKV$?oxq|Q zp(U4$-3jE~7uX}9B?-NRe7icY7VokUg2yIB9He_`{T>sZ1)Yt5sXlX|y%9e9I-p?3 zH@?#oMvR$z0t#LiJ-UGBaH?(3>L&&#FL@l2@$^aA0Y^Q=7R@uf4 zrbcrblu}JmQ;BjgL2RIN`=*i<{ z2lAJg%uHIJko;uW=1(6>eJwPnUg(XF*s@MX-nN1)A!?&F7_Wb_5No?{j#-( zFZy(J`0~fTb5rNh=D=ExTuIkpA+PWnrvNf{RatQs^WthCMXZaMhT<6{G5^jx&S*@c zQVS#{li<6UeoQ)FO*y97T=AA!1vtIB?L*FN?Bl=RXo{f`m!yjjT| zi&w4vZ%L|don#M;G4Zm(>>{p2Lh&#)p-$3UupJvkFvhrzs zG|1;_8+UrT$}`KY(UFsZw`*a3`2+tfA-@7*jGfi@oi0*p_4%tagP)f>9#SfH)#mp{ zRCOX^_GUiY*gbRG!F+Q!4(?N9Rpzj_Q+BV2{`LMKX5F+&Y%^-}p+1T&b@vcSX5aKj zr7>i9y>1*^NvBxC5h>x~M|b{-+jeK}CM?^{w-if+YeUmC#x{hO=1LB}YcelaG9^EM z;?lDc7z^hT7Uvv`#8KRAGz)MJj*8bg@}$b!AshTE;M$IFs`(9u&WQcxK-^4S#<0di zJFhzBgEnfWt5cxZZx0&p{cBkGt=-L&QUeHEyV<8qcjm;7 z;nOopH5jB^nSlM=h&()*ZL?(hwk1`{eH_r^=TSXIlS|Zmf5V32gm6O+s-yE!+12R_1YnBo2hC0oN2OP@yv={ zFINs-fB97L>g}-E*u2em20&CzF0a; z%%obmjrd3%8O~nk1k>XRNIgzY+KrDoMdL(nB6n7#>qBa^+_dZzmDwpyG8SY#(ZeHX z!6SBpu1@Kae&fWFwS&JDI(?+{{oWZ1))YPZc0}8TRVMo|1EVUBx%RBb-+Ry19{=`W zfp!aOMy*Av%zraASvz>lqq8qBrd5;YI^{IB<3h>`*uJ)gF>@5U$u33RglDo9lrh5t z3Afip_|>n6op#NM26MWMulLjE{lCo`vp)3mx2gBcw{(ZS}ah`s$%QmB*}(`=8Lx&+V@KupD_dNXzr7-O|}@W88SB zQ^(Ft8u%jm)K2Drt({kwZWPqL$IX6YdI$enx6;`7zLnqgYUR^#dF=E<>3en~oTE<&z3FJ_Q{hRzgn z(^|tsA3@(*9zF8=+vzddbMyK^U03amdl*_oxm#a$N$I_ZYA@e-s%K{Z)8jU<{ckLM z{`0nL1K(C^vv}7K;_RrCpXW_E!Hliwb>`c;YXj>v7PWy=Fn}jiA{ScZN*K;_0PYP0 zKZ$lOwqGvebi1qkrLZ!o3zL|XKp5=>i0udiSejht!Wz76na=eprW`Kkfhfrwioo}e zmvuNxtcw_rBZ{WlIbw?@Z1upnjHx9DtUG?MbjqEpg`S;n8n~(ElHlPJ?p_*qwAN3- z16mfx7S8e6-LYzyN=@(1T{LFrxqsRs?Ca=te~vCKw}8R(hx)JrUnq1eln zbh$0&oJ%+zT9EQ64GpnV`s9I=ZH7$#+Mk@n{M_jH;I3gCs!u!pbLhi;Aw!y0uIN!_ zz><5nyN;`L_3Qg?1MlvvcgcUyiQ&H%C-+^((r11uy7zGIGoB8?TGKa0own04oa;U{ zE$~ewY@}GpxpR)%`k@73kXLO)>C=;pI?3dgtLC!yBL^;;i16!AUODLSR{`H1Zk#lw z%soY)1Jk1`wedRJa#n>`9S8J7!attrwLLX_m-qRVx=|4n5I_TSKQ z*w(nxb#Ju$cWuFm<&mD(u6>ET{Pe|$sQj6=)eD0A*6!`mcKqXEgMKH*t(q2k)LTvc z(c;L-*vOk3(f?0s<0TG*xQV3+s3@!(u@u8wol;X8NXjHTx62J*(LS~l+S~Vd zkyoW}zuSFx_WEMyrtBS36HmID829GmrAE<%ey!7PM^$A0kgPfLU+vvfqExr`TaGTc zOC}^IPi}QJ-x%)^M>EWF2j}WDU2Uut&S$*jQz~iOQF!KbzDIOiwBORcJI+0OdF`w;%BRKpOVa3y2l!-ZJF z**&B#qt4iE4-Of9Z{&G6V(lk*T;nyvA=Cu_`=w@{rJ?aNBABsxwii#Hv#)1ZrF!8> zTkH2$G$<8ZvE8g$r-n`}J&<1dtbP6Rdk;K5esSN7;LFeZ_S{ogIepImUmi}*%ebX2 zwR~?z*oQ>wAcp0wEIisyayWiFF4I5k&ZbHpuBTD zSuz?CN*Q(b9@QkPX=2&-=(aE5pssxr9hOMU(iG zLzQ)vDI<_mD0n%v#vx~ql zDR9==vbyz%!D&eZE!O~9(6d9Oll#WA(uFKSr^ii^ia^la(oDJ}N>o%GYBF3D(#St{ zV@J)R4WxN8*m}QR1`k~;Iw`Tp4*!~-C2Njf)asbw%-2y}@w6fz+BXc@%?y5ZVRx~u z4}X4gyKnj7Pi_=GTeel*^J|_q3I2KM%BaO9{_xoF{aRF*BN$d@;gq6Wy=jXDavxl3 zVM~)2QOS@>%sD!bqIq!MR70%xNKy)1)|J*0JSH%zOGvmjA)Q-Vv`)*dnIO3UB+s1L zgqJhlQBiGM^1tD9l}(RH^=Xl3%}O{v+ir?w5=*k2Ror$t7$J!R5H3Qdw&uq?5eRtc z5PCcC&3or@@3W!GVt$`vUemF|m#qof_Tf-u%hU(jKVQtAa<)*>;nVKVoK*VSl#STM zQV*;2zVUlh7=3e2a9rv4#>qc4WLm^keWc9xtU1a#I|kabeMVap(7BQZv9sE~fKy|D zF4oBo#hUwKJ10II`c(3$zuKWrB<^A-_{yOAA%_;Uo`GKOHThxal$u-N6$?B6k-uX8 z`cIyTvZMIX`W&Ts3cKo0Ba9e**KANOTGL1zA?Bxo9H=e-HQ4b^?MPj|9*5r?Vw|1i zi)Pi|ayj1T@#W`hd#@e6A?t0G>jgU}ASpM(4^eAhg}gs`sZR5K)i-xV&NO(I=f=v` zT^s#9GEhJI-I?W)=OU@L2XlDT+sPZ{OSMS@Xjz6kJ57tI5;>8l*gRop z=BjtzFZ~!X{9H!W#y@5FM7Qr&MOPwx@}_&=ZjGzGS5vnBryD0W_+7tyf$TN+9o^&C zHk;GxpM4$X-|}esJD z7~XD0$;rR`eW!EYB5lhaSnap0U!Jium|5qN=k-}ist#@#+T-cEyrr7MQ@{8XZ$0U1 zS#)XH=qB+YMc|0iumAX;bqex#do0^k7*Zm>sCVDM`St9$=?u)H{7JlB5?5^Dt;y%Li!YB07(8s+^11KI)f!u+P^+y)y29G~?dEu+|N1r#2 zZ&jgilP#&e=aY?hd^?x7Q}LoB2YvbnZ?gB_6D<1~C!Yk}JfXU_U`qJ7DmR&De}2#I zF8)Hp&#fZR8cFpA(1(i4&JOWC2J_=&3E1~;O2|{>GU~kqBAGu)uS+s_UGM^1VHDvT znJ+4E28k|v*7G=~@D)49%$t6yv1WVYSMS$s9QFQmv6Xe_kkw!3r*16$TK;99R$C`l zEjhNt-Us{q!*%Qi!}X1C&Rm-Fm@Hmymc}EcOrI*(Kbr+h1eE9ARqztItfbRGfsvfW z7MXyowwnH~d|bETcy};OP#r4Snk)j4-#IlQWJ{|NwQ3!AeCoOaTo&?^Z0{=PHGT3D zJn=4G!eXgJr4kszsTpGaiFO7~y_4U!)U~`F(Yupd#?G6ztI~_RHQ$aZFb*2mc+ITX z=by(0pD6$A(YNTD2Qps-UK^NsH`6C;$-X`M)U3`PG1KS2`k}#9-~XZ>HAf|<;)!(g z>;gl$O?S3P5^vbz>zB56@`QWUU-<3I%#QuKXP#ocrZ4!ZMVtKHE){F%xqdP^BXPy< z#N`93E$VY8?8uyzlaDtd4`-eFBd%(R?mN|iA8)p}H2Inw1Yl|8lGDJCykmwE>e+=` z=v>Mv7Q1n3^cn8J+j;zb8cjKk9tv5M+NyVk=2}+QW%X|&&mO%_^A9grqR5`&_gW{k z>d82fv-q4MFAt2Y+Nk61Xhr|F{W$7p3ADv({T zlid?JZo|>#9GBjLpd*<6$v_C)dhPr$6%Sgv>6ziGr(H)bSK+ShQI3^9?|6Y!yjW}d#Ou1H z?s@qv8b4-l$B^2`Mnpf&|KM1gVZI;g1t)nv?^Ex^)zN$RmKqd2XwbjKzNAek5%T>w z!Lnk}lGZ%3OUj)4$+6rkNrYRFcb|O=p6(j4t3i_$_d}?6nRgcKdI$HtcQ^X2CL;a# zgwiweK1uC+b=Bvh?9UZC|JAyD_>?D+I}3#dzzyGDIQj{yQ)=7P$Fhy6mwT%z_cWR4 zdsm#-ZhciUZ|x;$``YjCEkEPIw1ecYoyW9nv;9nq4G#}*DYVCbL;Ub9w-Xyv3vVs2 zKXAk&Xy31AHrDQ@V8@l(Hi?(}4KTey+P(pN zkq~Tv=T7?u)aVb#er{8G0(5oW#bbpVf6f?L>C?0N>-Wr7_hAO^yjyou>Yz5uTQ42^ z_gs3z*w}5QkHoaA6WcYQ%-2T^CLLH?y{S2P=>%}a@TVNmD=-r7F|fByHQFVE>uTj5 z?TP_g*Za(qJD0E2G5san?lK4L+x@Ea(Kc;E})&9{en|Wv1qf%>A{w(&?D|Vl{x-PIv8Sfu|W}L5gMY1ZEqj0YC z>{1z-?4oFKlj9sHahHXcYH;Sw55;PW)}t&j@dC|Tdjpt zwwyU~F<@5Ez{2%Ts{SXi}>VSsjz07>!pK0H%_$I{%ZM|{* z$fVB?{yExxTjH$d_nJ>BPz0}ZGb3Kx%D%oU+L}KCI%oj?mP$`BVM05 zCd=WqVGGOF{BYuke!{n+;}Semg6CwA4_lW1Wq9Sa$2NQjxEXME;)vZfHkJOeYtStN z` zf-4zs=E!B>Bge0b;#)}3{)h5g&X;A6k1lX`uRRv^Lh??{qji43G`Z@1zKILG<~IGD|~LO^y$=R(UXra%a!|g z@AY=(=;!~tP33)Z)q+eiQ!Y2|?f9;E6FEiRbD49UqP=rn~*>eu~U{Ed0dD^LOF1<sGl!|_ zdk#9&E8yPw@pY>o`0}=s8T(4MUXaMWW}`?i8;Mn6ADs%WV&XE7h|A1&^O?g{(Y7cj zloFYU$#hv`+fsep`Bk6xtgoC_U%b~3ah{Z^p@K06EJwh=jz>VUh;l{{}m)-kah zwtRQ>PEXe<0g(d&&M`nEmnjlTQQhC|Qq*Zs=TBQ|Wx;x%tajBiJnt^P9=0s3&FT{S z$o=%|<=Q_Vc3!}qe}8dIO8wUv*pLd5WYp0s`M!PKxcfmJuSWkCtCySNKdJnfk5us} zzg)%4XY%!@oFnd{88<03qP3in7VdSaLk=$u*8GwGe9;|;)kmBd3i*B>?!pP;@rr*k3*RUQH@$ul=TP+8KVpD%> z`uuIvu}2Wi>@8II^IZ>Tl*=2Weq}t=>gw4YV?Q6gx~D*iBDJa}{xUAC_MY74p9}wh z^s(D~uvLXwPCZ$yPheD1tRAR#{wwJC*U0jp_%E|JrHfsphb7OTm~_2cCXsWf%Ut3WkFSKg& zssag1XZD{I9e5aOUj6HD8ArQ)trKp%vUBjcy1$03U$A8Kj}M*;&=0VZI<3O?u@l*k zX6+wanBak{gkSc$W$<3%Za+S)OLEFa6w9!0sBw2#ujD;*pKt3D9s6gkdH>SOI)6#5 zzkl?+ZP(e8EAwFxf{u^P+7$nO)#6%P_bp0@x*c3DCV9}bu#CLR3;o=?(|1mO`es`X zx`h62gN4rA?E2)ji=(;X$D+KG?E4$>ZODj~Gd8zKsk^J+)88Vp&aADyu9)wr`YDrr z=kyry@GHC{WlYPc2_H|4oZ6%^9k`*|n=$CcwSQJTylLS-1$Q0w`=Qli-nQLqD{$=0 z>;?dXdoM`t5m$$EN0miNN?kWQ^4w+L&IPrHeVi0l`RRv^UF*G=v#DD1QQ!X7c)y+c zXnc2Vmw`_!P2F&O*V_p1N^kab(B5gAzv65a)@V93VN`>ZpqUfkUb#E#DpKSwQ1XJV zKQ2&`s~6Jy+_W!LnWt^5=+Tp~%&LPMo`OFRzn*T)j%rr*T@Br-Qi~V-JN(OszBHAYvYe~BJmOZ=Jhq+_~`-}UU|{;;S-K_8~@=_*7@JgM-}T+ z=UnG^zrT3W&F8|3D(_~M={O@QUx9$<7x)!}g6%fxCxL(b9Xh$>^c-$gY0`9P+ac8L zOO9POmv-MZO~(6-bqjrYr80xk7VQoW5_K zpl1j=J<{fYdnFP{cAA+o;yh}bx+Mt=sxzDvckW9$4IgPFjL8Ofj=hU$BLBsTq5*N& zZm-xY%^mxfCUHG1ow_VK^lU1zblJwB%H;W3$J197ZC2r;zMyBJJI~&gK`TX%UhZf3 z>*1U9q083a8~)qL4cdtT=U{_d14e%$gVO zquNq(Q?fDthu~!j{=r%?Gn@-wPu7bU3(0SSD<|OVtka#9IM4T&D#Mc>U&>A>30NXy zoJ8T3+nbN0k*!`I{9az%Fgr8x*@>vfZ<8NgiJS5g z@f?wFaQ|~j5h2~##4BCaYJ8Vw)cO0!)aygf_VEil*i)hoHQNUhotj0vtC}n1+L$_E z4FQ4NrniJ;L*L^Vq3gF_iN9aOxrWa2o+KA7#T&J^lXNQGa`cQ@+eiDa9{TI^rDyv@ z-lkqHzJ)ZN(`)nGD+gZ|f8LOqKH$NKBEgSFd+dsw`QXEo*Kus&8tbpOdC;oMV}CDE zG0$!9c-K_-5nki`kpJBqE#-ARbn*6j>2Y)Wb`ck8JO{@AVa-=^)6~L^oLE4UpQ&L= zj7tb5UHlzy1Q&V4$C+3;Ph8&AVp?5HDxufLBwG)In>_D0PhQN%*I*>{MurY1JVZL? zScee`OY`581b!`Q;9B?_^#sMlfHfK8hyd_yVXkLEj7F<5#w2pq zF`wSdqulfTtveE9+L0IlkWFzo@KXVJ}{Jn6Pa(|)>O^K znz}KhEj`RFtsuD8Gg+Tt-7K#-ox#Kn`AuxceKPTYr452@uUZgVT4S`zttAx$E-b`r zlw{?>d}c1Qk;IE*A)8Vbog;TYmqao#X#$b1OEy}>g8QZrkUm2)X=%Y_dtI6n1P8s&x*222HG%BZ+}XFs<0PRol3F%C5=Ec+)-rDYsslSCbUyMGPT4!2fx; zU;O}dq58$>^qN?W)-o+_Ry+uAqn@AXxQ%5?Y~L0!*Kl(RB*w~D%@R^o1B~5Ss(bsO z&S>kdsrAB)om+?M5Oe@bcdeHk(l3#YSG4Gt%C<~MYa2ZvR2APjy#pDgYTmzn#}>M- z-8e=~HPlfC#;RyF#=?qJfA61nB+OvZ>vuyF%; z6sKLdtMZv11*`ba;(nF=EW6$1E-eZk2=<_|PG4DMmiB99KfZ`DPM2%|dmN)N09#1A z+5q8ovIod#$uV0W3KlmKQDSt&Au5+BAJA5D*hK4XmP6 zC`v=58gP}0Kp2`KAY93+Q5J`B5@B&tp(fRsngkz6R)Mh$1Ab!}1VwOEiK_$*mu1YG zA(o9oz}71;j3AUs5+x7{1?&qH8BD?oT7f7r2m-u}DKJXG(h!E@YPA|y0{&AngaTr5 zg~LWU$qGv2;9iUZtVxlml0qmJffyx>DAWv)4jiUfibTNor~<(l7Vs?)ClYMG5&;U8 zTSP%xYlxu|lDT6U)`d8JXBrU-R9LA_s2CE(8HA)EM1hkut|V2cQVmfU4l5Ca1na;^ zLIK2rQZfkGO%JkGW&-|Js%Rj&;2#_xaA3~53eyLZ)FFW|5{Q`w;q(ZuRzeW00?z^ap$1O} zG@&A+;Nm<6Q$w<1NeYKCPSL`@P1rbGcp<1oWwG)ZC@xJV6*J=kvo zsCS^^36cVwLUY>B*M!Cm{cSR3`$9-a1*=l16r_Tn)qtTP7NQXaAQ=GxE&_T+0Wshg z23!RY0}wa}25hBL(?HZ|3V~2YKu903SI+9r-$YI{5Vq`?LSX3xYEw3tuySU8@J!R1 z1kl99#l=qCkO;rVlay`IH4dhoM4oIn@Na)R4Ra17=T(>U@(9Yrc^jk zc}kR0ASAdRa3aRioWAw5GPK6XAXYBteQCiZ3aiRxXo6JG5D+VvRMNmi&_E3`3c&YD zpeA7mCs<%5NQ`1>nt~vRhG`mSQJe%O0jNeq!0BEBl~vTVPq>X1xl~@?m$!N1@8XGe zogo{*GHIr*w&Hniv-zvGT#z#^!3dxTAp{0^hoUf=fJh}t5x_($lrW(rVMa+oz@#87 zFf&RPr)bWe0XU#mzyywx9D?P6LSJW~XtByxEQX^hltd^%ZHQuk;b$Q=3tK;J?@sRA$qU@uId z3Y=wd@LWm-kqW?jY9-9UKZIjKAPc7GgKal``MYajbOg7o0s{DmRbw@EiU&AN?8b)nlJ zmz|vLh8YIH-@{gjyAY~ex)7Y%Fx7CFq7vr45aJBe@3Qo;kY^|oupUA&N)^niSr$@K zETJY;N>qij2t(2stN?7u;bQO?Ljxazr3eMgG7x~KK&P65Bb;|`MRHa@-WyCZ5V2@Q zTnP{bOwcI69YCfqisBvzTrw2~t1t*SI#KOmcW2_0t0Eq0X$VQ0Omjh4eSj~f{{@a zAytHk|KzOJq1>r;7v#kl5(qh|hJl_zF|`_?JsJZ#47lXL5l3*~BLDvHk_6h4MuE%9Ffd6#2!P`>O9Ke0 zQs62j1H2@)3i#vP!0DirN|;eW6h%A4t8E(1^4UUSmDSmRfm?|H-wstWIE|`+7lCt% z7icsT#z=@(pcwcDrhwB9yfh33)MX(AaFzlhf&VTbaRESL$KaU=z_EtfWTL0<>1h_LnO#T+Q0)LfJ$3S?}axxURf8-bHfvMi@Ora}hl(Xv%Y# zQ%m+q3SvqQ*T|it^0n20)2|QL`wpLO`)FYT)|fhyo*lkORX*s!0e#0lc9|6asfCxxj@AUqX0mej4 z1GI)A6fWWn*yAK7e2wJ-uG?nL_3z-Wu3**xsEv;hn@K_iih*};wgt2s> z|1PetQ|OUaa>kuO6&MOQf~HxO0s#mG{7I;B0A(>X0h5dxAyI_0p#;VPD1ZU8!ICUW zabBcQi~5QxSBp)xI+82^R~QZhXhQ<@1RPeHQ7V-P03v`{D3*&10}e)5;5D!~LMv(T z4+Vq+K4J)hz*z~KN&u?{gQt_M5=L+cQG*8ne^ia*DqyU^7{GLM*bBm8uw(+*QQ)>x z0Nn#00f-9@mgKCreO)MY8xk}FDPSzY3SdORA|%FOz*k1q6c|~JA;2Xk5#T`pj0wgC zKVb@hwIGzkb+{TqAR71hx+jR1&?K{!OIDHKHk!MH(9tncd}2PPo_rbiuU&UOGNip!b-v`s(| z%w^aBAVP2qxONIt=vJi!J{Xt+MnMqg-7zYK8iEzLf&%Us1&IVgZ8%OEdz!IdHqD*Q zER{D~P+RcmhngsBJPG+h@gxj~xZPJ0Di)_P8i8OGSHrjpxY+@71C0Cxt41J*R4P;u zfQy_;rpqp=my|uC;*bjfWcybKEgQ*2eA-NQo!?3!&0~!RYD}i;4I4kNUI`&7%FjC!2$&U z6G{dQg)4zQB4FTx0hPu@JAk&Jfc(QSK**e0bJ$N`;SSr}C-Xvpiw2&n1W=hv%VEGV zQ(!nyWh9~k77t-DHAJ9F7*haG6zm>D0RM`>DT0A80@zJURLn=ukc1v_7C{(z0N_dm zkUyA4Xz&MTT@@-62IiH*AR2hBKumD8npR^9948eF_zI;IG`FMNT8i0b9>e{qp$yhF zIsal=8*EY37-!LeGQ$yoD+m(M1XX~w0WShL)ff%<1W*e&QWOq+8K7*z9$;L)9B5%K zI3x5M{_E5lqa>A_$H)0;O5nEwN&$Zr#}x<-E0vsYh@%h;SOI6$fb+qEAYk(-jN>uD zKb-qt)V@VYrsD@TV<7y&vUS#E8z2jc10@I)71$F%4yB2kRS-*}EQTm)1Y>~kP!z^I;Ah{RExU=>P24Za2bB@BZxobvg;;(30XAR!i3$5gKnXG&VzZQSX@ou3^0T+ zga9gG7>TpMK&lWJC>NLoh@L?pgixBe82I$Scmv@j6%Ye-E=@^>B!Ifb0OVo;%PJ_q z1O$!az`nyY3Z6l;5UN%ID5U@p9_UOpi36ttKpGqZ<^bHtQD5lN_=>wawneE;BcljF zZX|)zDm9m%V*p5kX^21oJOVZXC~F`s06;+ytwKo_tQ3K{sVIP7Lnu^AA@#lZAqwB7 zO#tcf+yyCqyz`9b+Ijx5B{3L4vRsrDkdQ_wSVaI`r6SY_;1dM|oC$!Z5t0RNCV|i@ tC9uE@q*Sm3!2o@N6ObxC)srS;Ib6#t&E~$0Hx+}Es>G0?{|8{S#^2xt-D3a% literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/.mix/compile.elixir_scm b/phoenix/_build/dev/lib/phoenix/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 ucmZq9U`}MrV9I4+U|=)UGqlh%$!1_OvMA?s&B?6DEYkBxtx`aaS-1h+&Wh1l)~9Qh^FdRY)oZRBQxM5fFDe zvdAKe;8B!z!v$zt+zze2#)Gwqz2I_K8^|GoF$@~i%PZ~k|I z&NSMfs(D`S3*E`!88jNSzNe?>DRZos9E-wKJRz=DqGFQgA5Ne+7R6gch$B#vw-8mU zkuWq?B*JhhArfUHB&oteH6*H5iV1}hlcU)ZRH;J62#HFH(I_RMBGn>=Wa%V}Dmj9Oy$eH0Q7=<(i882A%0(i+lu*Sg zRRl?h3HjqMon_h@*8kaQCDt2Lwn)@#Pb6ZRf2o1zjz_-(+QlGDk)k(Nr4osj6NrRq z`IUBGA}kD5-H~E)5><)TAaV_=F8+(pObbU0mt#08aqRQn$=UHss{RlG)q{|r;2SKU z(P%IL^_&D44#0$99nHvmGz{6zrtjr4%_k?!O9<42qN?CH&8~!8uai?DzThW12NDR( z!P{TpO#{Pffj0~WrN9WhV+C{$VEWn7pdABXQyVCoQuzUfif7ZCxdJv^&mM9GDi^RR z1$P8&4j3K-L2Kxp4mL7pTi8KNIHR4O)xMYxbM4rcV;tJYusMTZI{}BGvtz)f<^l#s z$7kBXFvJ|96M#KjFf-3G<@D|t%E>V0=r_7z|(pUGui%%^1K2fZ}rvb1={>0s3@M-^~nwk{Jj< z*`Ve|z8FdQKz&>4q3EOI<JgBK>an$I*8uzm}%#fjg`H_T7|$ zcs+!;6nJ&7-%pb@s7ehoMg)yMlg9^&ObDeugHT2pT5FsTsg;Np7a1~-N@TdYT9#Br zC;(Z7YR!NYH32+Si2%Z2KtMDkK_wKBoTz99s6nh^G=jFwDOe3`I!Q1DN2Hk4X%QhM zwP2T%I-DR#3=eZe*PuA*r0h+LP9WE*`xkO7w12MF=SwF;4&k9uGMZ;-7zRFBR=hvR zyy;OHnIVr->t?`sy8OJO1%sK%c#@J|jx{bnxX%5_Mw1bKrMq{)P8XKold<8$XK%|~ zTQs}7BmK`cjgs@{i4$EhE?I>13Cq@{1Ibh{IUE1c=-@)HKDN}yt~p11s9v@%-z2_b zj7#3K!}3hbfB5wIzh3jb2iH38UMd?AGvUt7vQ0kabx~1%%p{KAf)uy!0*~a6i#BOs zNo1>n8$}+hxRp+2!nfm|H_y$scqp*YMNaBUjz8DX+5soq@CQ4u?K#nT%r4mBK!7{l z>gc8G0-OCm`6L9&?5Cv_8|N$*V&Tmmx%-X7UbZZ^91#-v0%6^gZf>xcQ&^E&74Lgc zaB;`6nVyyT^A?oy#rbtrb(KSs)3;2y6I(d%M%+qC*6-lvZ~HMY%Xp6i-)tM_kj^6E zvETDt|I`3avx~di*kt$$hW)8)Jnx9#%*!eZNUMRfl5V(kSV*=CM{a2Ic69LA9?9$O zs!v@Pu+&B;oTpt8IC4UJm^Eue4vp=R7w>1o4af=EGdroiW$V;elCFRgZORX^`?|PY zO9n_Pm%Iy-SN)K4bV{P1^JZ;ot2(B{uYI4Ds`CRg` zDQK4K+~>E;nx*t3I&r$?*oDypCbpd^Ih(Y0+WXtfT<^ZkPCh>C=GjGi+{e90$ka8~ zt-5Ete|qz#y>mxzn>$%v*=2L-;Y~rb2XOyxP13Zs4l7Mf>e|4uZ(2r1gbD9Uo93Sh zxGG(7`t{2jo<%n7yN6vgpXQ-Pi5CvfFlj%uD-W>sExOw3vup#vIJZVV=`Is1%Ok^DYHNe(VmqSrXb= z#9d}zRb1yNJpR9mg)ZVcLY-1}k6t@p8L__KXumWD#rL(T|Gccr^b7Vs4xj<^kVbx>5e zqYmwU!SK6+2H5yzTiAoE8X136^>&}9y(hGW#SS<<2^Du)>`Nls&HhtLcGo$Kq;mmH$HRO}yN{{UB6Q6XRogKGD zNv;3d!;}t_ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Phoenix.Context.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Phoenix.Context.beam new file mode 100644 index 0000000000000000000000000000000000000000..c4b1fa6c5647a52d27424f7e1bba35df9de7fcc2 GIT binary patch literal 16152 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 G#(w~au~S3< literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Phoenix.Schema.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Phoenix.Schema.beam new file mode 100644 index 0000000000000000000000000000000000000000..0fb96858227f4a18cfbaa938a97748bd82c8accd GIT binary patch literal 44560 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Phoenix.Scope.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Phoenix.Scope.beam new file mode 100644 index 0000000000000000000000000000000000000000..49940442edf79446745debcbdebc7c5fac1bab56 GIT binary patch literal 12440 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Compile.Phoenix.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Compile.Phoenix.beam new file mode 100644 index 0000000000000000000000000000000000000000..b89526eb6c330d7f834c7dbb79e9118d2d826542 GIT binary patch literal 4940 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Digest.Clean.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Digest.Clean.beam new file mode 100644 index 0000000000000000000000000000000000000000..33491d20cf5f770ab3b86450733678b3787d79ac GIT binary patch literal 4964 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 Rgz2OJVBcbRwP_sgzX2rgAlU!_ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.HashingLibrary.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.HashingLibrary.beam new file mode 100644 index 0000000000000000000000000000000000000000..754e2f6a451d6d707c93484487930269b434a0e2 GIT binary patch literal 5856 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.Injector.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.Injector.beam new file mode 100644 index 0000000000000000000000000000000000000000..aba2ecf080b7869672d95cf3f0477baad7a4ee61 GIT binary patch literal 20040 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%0Ap*CgLx9=FN-xmJx-VOPe&m+q}7U z%tR`of9L&p#UpxWr-@0=H?Gwwzi)#~@;EYd_JoAIZc3v0j<*?~Gk6Y8qYe&Yj`yFb zE9qI9x#g^9c<>ovMwMR8kA970i-EBta+?eu)JqpA@RB4q4#w5z<3B2mCU@!hr}bxT z5Z|ZAdM0T+Lqw3GizZ(9CP-x5iZ33^}b^TRAZOS|>CN%li+ zg`~KxH;u*hk9Jx6u0P!19*L9_ZP@QAxEmZ*?5b`F`WV#LMZLtbUdei=pYyWH*m;NZ z*WW0eI3dY}B$2Hu1m_^RQn5k7rlvg>M5@wGFmpK`^#luugD ztR9Y-#@JhzX{5G{j5je4Cb>TwRK6KZ*RMOFsIYNS2LH7klBc4YwtU!37AZ+c6mc9= zlRCCxiO%ku8LYitp$cc4m7&8Sar^b(h2B)Iekqt@65zKn+wr4j;h8G;oTtNSBsbx) z8Og8YX~bA8|Ka=FpN-yBqElYFl?BHK>=Z3%x0`qa<@V-BeJ%NFBqp($&m>>#`{LuP zbS4tPGV+~J?jcFVKYK;#|s|!t{$j-T5(>`;L`@t6%U%$4SZDbRWG9-s@!pJ z)5VGDOq~~&hljm*^1G{BE@M(+SKjpsb-0B*JehP=d(ovGaz8F^yz@>Vc6)e$=i7Gd zij}qJ+qBh1C9h33Ot)#jdQx4PIiQzR;!jLrp@tA2YuxOeTFkU}+d(sO)*xPFd50b$D7-E3qTDu+&nsuUqf= zu94CVu`~_0F_*lH6Wh0}?%7|`FMhRVPhyJTeWl|5U47FDZL^Aw(@)=?tQTETvb5Vm z^KR_7Oxuct39|1baI@t77+`DH<#7Xh_CCtBMqh&Z)=u-FrK}qh-*_5 zKb!<-Xw&bU-dx>N{I%aM(>mnIZticfEyWbEVM5fYbio=UXZ(Tb90wqDl9*=nmF= zavHg|#`suw-;0g02b6NddbwunJ*FA}}EfI<`OPEX0R#=#G5WZ|0Rnv}#gC@N9BWQOD1AILW-!!O`O*^(B_0LS6!@VP7|Gog6zzAKTEHX{Ax z+ed{vUsnug`3>qBUDw!FxL?W~otYuD$9z%EOvnGq zc--ZDTb|vP!E1woF{{iGZVil=edon@mTJ>o>`&z06tG;jcs#%_Wkbu7sYe~+Hk(%+ z(XdxgvL#D=t8gQxp1*)Tc+%ZqZM6MTIe9%5qwPX^hd%8YaMi1*$i-hTg;wtmo6v1 z8A~?Zqas^@48fz9jlS1UUKxPd?x@25K*qnxMm)F|8nqFXS@Yfgv^Uh(9pa&tG#sj# z=Q`rphr8acV)V{Xduc-VYHY>l`&Qriocqq7M7dqieN*0x_#Q269T1YxD*Ab_rq@pwo**xkV+ZAr0Gb{#YN34nuU(%wUp_ z`+n+|T4R~rC+|9UJbzReJ?|KnbJM%bF%oZ{rcM*&f+i5(x(m1o5;Wqi#KhyVCFqr%I@-;|Ff7*pT z>+!KvLUsVVi>I$M{qyx{_t?_3Oyu=hkLo?#p(B|Cp6Y}U!97On9|xR$kHN;@o_X^< z!Dg!Abn;QnvEv2$_a51XXBr>b7!moUC`-Q%?Yy{h+q0pN-Uqf{Di}jX-+bSHqc`}! zZF+LskGkIZda9jQPVg$S$Sx{xXHy3;ZnBfvdX=94#2_+Vmo`IWQg26weeZrY-0b9S zcjUpT;?A@lUyr-TPD>WOx%2Y<*W31QznsaKK2^DkXBQ)~Vd~!bJHv$GeZA4w1B7RD zGEeQb@Th$wE$QQr@|MSDEnjnu?@5UE~|`2xpvh-I^t06q}}3 zFKLl`!HIZwe)%VLQ2({*In}@W&s>xLXShF-=C3OL)2-V7TEqWt0RFD_ zTqyk0rQQEo$qPQh9+AJj4*WkW@o)S3>y_ePZX5q!OXe^DliMG&A6&r`&pY>%HFEgY^#7CI4~j7~)-p-JdabPjr(vV!t* zv?tmJ?S*zmyP(&h*P_kPmS`(94ZRY57yXJ$@jttj3p(ST7!CJR6aaiDnpfZl7Xd;L MxcR_UXdFQNAH^4o?f?J) literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.Migration.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.Migration.beam new file mode 100644 index 0000000000000000000000000000000000000000..5f23dcb87122d793dec859f4b6395aad5cd18272 GIT binary patch literal 4796 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 NKz&=%Mh-&oe*ip*PV@i( literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.beam new file mode 100644 index 0000000000000000000000000000000000000000..4ed0d658f7fe4235fce275168c36edd1c4b5266b GIT binary patch literal 62584 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Channel.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Channel.beam new file mode 100644 index 0000000000000000000000000000000000000000..6630751a1c3302228aef1b54ab097542660f4beb GIT binary patch literal 7800 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 N;_sFg-&{` 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 RfW8(0_QL^{{Yx25WoNc literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Html.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Html.beam new file mode 100644 index 0000000000000000000000000000000000000000..b6ccf820ed3b8083c08e13c24d32dbceed8d3f85 GIT binary patch literal 25724 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 Y5HEnP$hT+6_psR6zc3UEpAhDM0e_Jl7XSbN literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Json.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Json.beam new file mode 100644 index 0000000000000000000000000000000000000000..785b62541346e0affc5dd7814005d3ad65e20ca2 GIT binary patch literal 17624 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 R8T>Vu;5QC!?PVB_e*v8^UX%a; literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Notifier.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Notifier.beam new file mode 100644 index 0000000000000000000000000000000000000000..c2e4a7bf23be1c45f26ec7f1bebd490f5bf08a69 GIT binary patch literal 14040 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 LW0zO?DM$N%SUBD~ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Presence.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Presence.beam new file mode 100644 index 0000000000000000000000000000000000000000..a1ea83d9c106adc0e245547b956d8dbd61982ebf GIT binary patch literal 5008 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�Lpblz_F;zjAfwW@m$9}#I+MPEn`yD+mWxngiiZ0|jC)%;%ss?NI}V_Ni) zs*Qq~b)1@gr~S@`j*J^`UXtPZGejrY+3P@a;dwk zsc%)sicqG--Wda~!moEC>6J58^m>Ix5k@R2@;)BvcCDsxxoemLls#l@CQ{?_8=7onsiP%FBf^R!gtMFNPYGlQY z`Hw7CQ`s z&#*#`tBIbGB9W)n>uH!`mZ_hOpxRz8uL8_JsCLF7>;Sr<1Crx?3>brlA$hG{v zc5i-V*pl$k&IVtm<0`Yh&%Wrf-pI$_YDZuBFC(g)4srRWt!_#&y9$jaAmaUtmO5E)~vI2S$%L# zR6o`4b*HJf&EU*Wn%n&YMk@Ebc-cX=edTJ~<@S_kSu$5YBa3zQMVF{TSbLY}!7)GR zaGi5?bLkwv-2~&hWeJnt&lS%w_%cmAk6ZMz+-z>D6FKl#W9gk0N-us~?N!aT-8Z7@ z;$Gu4@$wzNGqmp>FdeV@_O8CBcxE@*UMI4?`{=m@?>UOwYj32LH+jwJENk!*cRmOg zyc^eYWn)&#qeKnu?57*1ReHDGu^P-;wmam=0{>-k*6C5X0sC)U)|s`P={;qCNagvW zd(%kV(HojA<)X5WgvQ9nuT{I@?ezX7!Ao$_)G@eDU9aX^H7!M`7*%=V{t5EJu$nX% zP7_VH^?PQ(#x;%G?XPD}G^zU#?MUm{-Ko8p|5y^JJl`}`+3;O_=KAw(pYAw*1P^t8 z&Z}?J%{^2L>T{j_NrgxBH>c9;OQuJXYt{84O%O_W_I&Sss|w05R2oK(Z^oZJY5C-- z$riO*w@3!QVMEn9oym8poTn9q3mthTNh7`Ynlm3>EB`8--@`HVc$#Ov^1#mGute69 zYT{|Rl?E#<8b?i=?h_Z-SGD2FuPQ=u^!lkcj+UHD%ihU$yPEE1p=)pv@fvAm9`)#U zpz24Xbozn?WiPebOsmvvKb~`18E5!DmYcHLNlXh|X3;RWxMS{*?xXn+yCZC#l{aK5 z`ycTg(-ooKv~lm&pyn^Q%*;M(K3pn^ao5OgC~J@1*ixWlQI>1&w17UY)K%^7_3H4k zyGJ%IHCPaF%AlYm`+E7p%KJ_ZdTlXbN5xx91~(6$`$f-piXz-p*<`+}XvF7+v2Hm| zMSHF}7;LD#*W0yx?dFcaz+XkZYPUkyA8;*f^mgB-9HwI>@lu(7hx_qakdpSJWX`&`|*!26e~x~puQ z_l_?3EX?0@eXZ%;u$e`1ey@EW|2|#TJYGND^{60k)uJOSPrIX#U=*yLR+~ z{1^2bJJ)5FFWj-fX!Vg3m+X~)AgS8?24lYN*pD+h8yNRz6RUnj;f}0u)U1mhH`!{1 zx+|@p5V35WSHAT`Nj+t%Ao_|pYx~X)m%7M7{$5INM&<>-{;`?|MxS}=-O75DHkb3r zjFYjWeq=+@E}c24kIcMWHHvp7u4g!8?$~yEXVi|FnIq@6O*L}JiGv)?{w!D&-OZM0&N!TYK!1N`DZ_g9DCB(knpbDN zN?4nC#1l!HDeFo~ z-P1zkgJUO@)J%C8`{SN%Ku4=P!@^PWMm%LRMJ8XOu zt+sxh+H{)eOWWgq$HQS|Uouk19=N+^?Bj*L8TZ~EA{=hG^JePZ5t{rO^OY6*PKRo5 zAM;M9c!}TlKrc&S@YxTAPTYo=L_2-ARi0a3y1F-$dQ}(6$+2%_9PK-2y$opPPiG1D&h%+!x7GVFB z(j(RR$&<};`;R#B(~fctME0(|B$a*7BCnlmH5zA8aQ^YhO%EGSoP0M&0^N<(?@R8@)hx=`;)t`MoF%1TY9pJV^=g|6F%bOBf4daA!T}5=eiMz58I1> z;9bs7y%n%rNrPS25pVK&%}M=%EpsP1w3_PwRJ>LHAvV$I;j`Ln^xQ3PQ`9M{Un*S{ zW^}o$NnUmNn^^j;l~c^#xw1Pt^+d3DaSrlg1a0n$)wK6V=j;hl>$^v)J$e0HhvCVS z7oY1FlP8M zGj8VY8-sT@ufHiWP&`?FxMkNw(xUijc6DX@Jw|=N75z9le`M4}n&(<~SHmm32`?Rc zeJ6B$3;L{krGC_E9pTD=s|G6SpK>qy1qud_^u@hMczrzY9b5S5%#(LY=e%*>_UDCI zmbsW{nkkbWzxbv{K1WXtSK_2!D7amJ^Vn&nC6)@R{;PEmVYIP@{q-&ECSx0~gMN0S z?oR1?t;A8cJiFk&Ur;u$=b_xbiaF&P~PnsL-4Y#lq5Gc)pz%-k}FtZ)BxxbE7nOtTwrUCy=p&NtuKes&wH{j81M zt}zucEW6fe7xjzPZA!a18=h|>E?e~5L#N>6fq~~c64XA_HkoJmP{c9ZfbdM8=})S% zLr-_5RR=Pse~BO&a03IF)8Qk>aoQPPjs*wr{Og3L%Ltc?OCM^AHaTBfFpxDrZppV1 ziu;~^U!Wa>obk!p+k|)8nNk?^C}mau!CX%t-%Z}NBBS%Sv~BkfDl1iLa(kBWpC+u) z^eWqbKY@g}F^bzp_^ zyu;_f&v6Pb&h2RFzf`*+|JdGfPx42bIQlnta0Z? z2CSR#p;tYTcJOG$>ImQ4p;On%?_L2&tQS{nCDVh}O*q^(%Zl^kA=5bdSr)*Y+M4ZrUqJ3NTH#e*B#CBpUvk&%y3ZuG4Spe|`VElF8*ummjVsbq@YY z{@8u2_P{)qOUsC;Mf^)i1Hr!>`e?ZaggM?cuQ zVk!Sg`xc=FbK6V5FV$7)VBDR9kx{npNlzoH-tBmEvoc+o-n;C^?!+H8lP9cg(!Y2{ z@A;n8mvPS84@?7>X?W|b*;coV|JqF3m>anJ-Hw*zzFAxLnkM)0v#R%`BU@K38%I?Q zxp-!!xBR)?>BuZ2?c(f>w@_i&YyS?&I?d71*Vvt|#XTn!`t^33I6E5-}C zwOnoPV})ZWO7|76jSIZCXHv?e&TS7oYNMC#GVTdRTE-pdAOt&^K39x6RPZ$<_o1TY z4$pE`yQFUtX)3YfbXbLV%*cPCV_3Dzxb+XtR3#& zvxgL;EYA_zD)J;D&%{3|&Crt2Z=lGV;fKbyHd-M>M>@wxuzB|EA5;!D*L2M2dXbR6}5mN>JswX-wa z-T3OcydweQ35P%Xt>P|Q(b?RXGG4Sj$d>g?LUSK)&>8<;y)jBj-olv}tG-dFQMGvY zT@8=?Gx?uq(QX-ZuMl`KV=M3EAm1kI=`IU&+q22@(8-oB=I>4HLXI5V_sw}xq|3`E z&$Lbx+a^4;JRB3}mN|d$>ch{}g+AxLD0m*Z9v*sSy;5^~M7BvEtH8>A#mPc7*GN~r zw!&iDL9?t~;pu6x+)9-H5F(@^uBPVJi~S!Au>#E?Mc+3zY&{N%DKD&A=))%&`*Us&(y z_GQ+BgcXNZu6ptPaeiK7x98j*M?#O?JKur4js3G(>zV7nbe%kEP}Z>Y!BRD^_8Bb4 zLj&#kX?4?9q|lyPdfEMIb9&M`w?G(Pn^0c;<`H6J>zgpDH`Zs;!I(bUck8IdIVTfV z9#^REwA%F z_8Qk8^PVUjvk!P`zdFl2OMWPCjiv_vC@T zrmldtw7xw*W(d}jf18i=Obm{oMw;$$n&-n|4?X!B{fv6|@DKCFnT^``%&NnYw^|UwO&9!qUjb=Spi`&QghSznt zYNqj8G-H?HqFqJbs`B<&zwXoV_xVj{mEu}-JIvc2E4)dqdN&dGt2ukDo1&wNh0x-V z&$jVLm5ht?>voL!aOX-q(_(x^+}^^^Z4F+yu}8Td33ag=k*h?5O-4SCvZ8N`oZdZO zo!Or=I%T7nC>)61FP`S?l<*=Xr_1qDwO4J9S9%fgQS8KeB<%9yCnLLJbI55IUM&+P zZ`roBTXW9QTSXhKHEEx}S8m&}?03T6Sx|97J|1Q_Li6VTk zrt#v)E!!hgws}pxUr=K0| zuP;TJcdj3q-|*?e*yWLZdEXA+A5)vzgl^93%y96g+62$yguCMfD*pX%jSZgsTDMvG zjB(vbt>xZSBxlQFe@BB``d2oFMbpQJxtY#=GOBjs_1~MK=YOD8w8K&BZJ*KNiv5K; zURpsrpBb!H=t}dDpw|SS3Y(lU9z_k*%VJm+Ry+=VZ$gbNFd7gK7f_jGTvao&L^B(Eb7wjGI zYEhzGa1O;ZMPYSv8PT-~2} zIVpYARr=Pt1&&`$&X*i(*nR!O54p^5!z(j+@`&cLr7L-~5=Lrx)jZuNYBTr_Hjj zOgn(Pck}vVbJ`U;sZ)fB_)QxZ$7n5{rJ^3Xq|EJ06%ErvCq#GxX`Z^sQar`#!tq}KNAJ6FGf!W72 zUQM`s*`#WjSIDiCw^C;Arco{geA(+axwIe8nZ9i_CrZ`dKymM)Vy#=8r2eH1^ew!0 z{id+h>jNTw^iNuR;#Sx7$5T6(Q>;$1ZvFh;(7dN#Gtv51M{CXYR;8l@Yng4n=cY!k zEIKN3^8dbpUCVz{YQ{aC&MusK$2P`?WNdu1bnTdv?>~B2EzM|{>3emrI>CR{P3FeY z)-Ccu?)RqE?DqH4S5hIVx}2}bT_rZwFlk0cnFh@|oU~$DDtBCUjr!oDpAX!r5tp^S zZ@x%)u(;Xa_J$3I!Y*jHwCOk|rkD>jl`D6A+1mX{!@;w1!bhXI*}tbNy?Orewfy-N zI}a8!t11s!=T=l6N&QNFS$eQ(X_4jlM;nf(9-Yzj(C24dXj<7VwR29hHmfa)kT;ju z_=di;?kyg%VRl2^)N7l!JAQMWr0dXiy7AUE8=FvO%0AaIao3~InbhnHo?Gt`wtVWn z?pIXT@NMB)g_E9bxo$Rl^)WMI%9BW^FkP>u9tXHd>cYOF+|IC4!mY&vyKihTEmwK@ zNdEEqIrk&XnkT-und4L5RHx&zjd*S5;Q&3snc17o0}py$eDB(|R_AzQUsiFkRasZ; z(VX}1+xv1uFYdEmKJZT0&&hp`=b3;{&(FT~9~`W8n>gpYS$d$tq+hIp`hcmWD!P== zr$k-(-BU~+{P^|p-nMn?g3Er*ZZ(N}6RZ5hg$&>m*4u*8awbI$|d|qMw%++ zR;;Jw{TBA*zWzB^F6-@o64>=)2Ib-NeK$+0?7Mvf(`KzZy{Pa~)HDZ4ZG+y1GhVOy zS{Ee8ygHp+_akiEbNiL?gC-qvqQhmkHDVrYo!9by-U`=ayN}o6l8e`CDTbPo*6AXo z9hdgKI9)T|h;%UeySRS^(Ir^>?9K&?TbKcYt!rjH4DYf#w(9Pf-3L=o`y@Obta)pC zs%Oh75w9hzz`WSX?O5c?DOw3t(?nr+DULO#H2YS@7A5WbGV7hP;#w<1b$V)yrtyAd zLaTXRg2g&7J0%C|l6NKMlx+`=4qTK!wZ3FJdHdRDDLa4kE@>;{Pgv)0VA0`Ex5Hh> zE}A=~dCxM(cz)UDDHCJ%yN~M`mw#A?r=1plWKqm&zq=-%S57bIKg#wl^VKY$k!^Cf zjqrYI!^ZHZSL=H%C@X*CTzPrh!OwYTd!ly*kD@oQRizh*;h&PizvhJh6Psxxz2B@T z{gIgny%h&P+raM04gGLKia`*u(fh^<@H1YxUkhmX6uDGc<-{DgL&;9ak{7dtT(}Ge zc+#JG{O77z3;$*H|1uNx*Hhq!4bUz6yPTn?6cPdeyc+Q`v4ePl*hzdrd{6vH{6hRp z93+0FJJOx#&h&}&NpuF?gFcz=N%yAv(0%EC^g#L)dJugoJ%T=iK9e3tPom4w<>?Ca z5p+d5iB6`g(begr==yXz-I{Jgx1#gte7b-xq>JfU^laiG;t}F;;tAqOVjJ-k@ieiW zc!&6a_>kC3d_rf_Q;8wOX~ZyMIB^y+nixZjC$fmC#55w0C?txAnZzt&4si}KmzYm1 zBrYMA63d8{#A;#~f*iU>-d_$j2k0*X3ekcC;pMUv*3(pat_eJ#q d(EFkaD!*|I1c!s4>cbcI5a8byqYn=E{{jAv&qe?M literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Schema.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Schema.beam new file mode 100644 index 0000000000000000000000000000000000000000..5f26312e08433bdfc34e5c7442b0db6fa4abfa6b GIT binary patch literal 17568 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 C3%;NL literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Secret.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Secret.beam new file mode 100644 index 0000000000000000000000000000000000000000..20a80f67ee0fe97e83c5ca8d5bbd1c3c539e38a1 GIT binary patch literal 3404 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 P9w->x=h_Emez^Vm) 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.beam new file mode 100644 index 0000000000000000000000000000000000000000..d8e60ca3a8dc90094d3144fde83f0818e0d5b29e GIT binary patch literal 2508 zcmZ`*30M zlpPUKs7s@>ecsNRlQ}A zt2}5lqicb|0sH`RwHJ*>Ynqstcx`AEEJM@??#4&dZZQxcCETJUYPS#=O%n(ZGzk+3 ziXf82kwhg46ABR~S0FODNDM1*SOk% z<(OD0gM|c%D@7z1MPx!4mqBQX^tkxl3LGV{JLG@qXpn6*lo2;-}_DRZ-mgDV%( zxx7ZE1)aw;2YnPTga(L^7s3Wa!DE0vjmNYA!UztHzGn*C)Qnz~&t{mvWz#EoAsh={ z2$z}9iQus5SE!wg&1m#?N}J80_f9g{bnSmuFx2^DY|f?|n)#Wsnb9O3Lpi)cuAt}~ z049Jbz%&2`0CgtTr}1Y#Jy@;N_XK=B05bqO0HsHbsYdBibBb>QK&?fM8Q};??S%kP zjk0HF$Usk*FjPzs1&E#kW|kRpN^*HFGxS)RXV$#Zv#%s;?Z*MnL8r~2#D=b}1PtLK ziEg3*sgn$&Zj`yP&RkCd%M@T1j)|x}sk2Z%P_dz?Spdi_KzHg^WK#R55~$7>lugsL z(8>*j3A3(lF#W!EU(>P_AU8^cB~U7YDRG^aiuI?Ap>zxh2}nsXCeo=;p3MqJ2$JAH zG8qR-g%BB(D1$js5)4KWH3xVM;}D7AL`q7~3N#7mcmCmzK`M+BAf=@=rnegxEN*}) zbSX})t*5d^F#(}~RH)$7)xZS`923C=p)yLsF*#u4u!;q=r~#0{3J5T!0S2TbF##f{ zZV%=36at({1WReF-B%M}Pj@i_p->W%(oZgZV1(M89eJE=cAG^<;%1@k)>^l~O`3+XB zmx(8!yD-yO=4YG35BXW#vPaxCHX=H7?1LnG$Z`1H%H5Gpb>-UjznE11=sfCow!NL# zz{6r1dv33}ynA2ER(?%D^26)>$ z$1chpA9l{Nsutd~+{9rTWZXA+(%xC&R~*dh_^n9OQG0U1jgbk@srNE$D%~aCr(1f< zpNht<+IQ4BRzyV?ZdED8+5;w)+2Y;4FFUT+`3*dtQQg-VuKNhN3sG zRO8~1Sf+WnZg?k z$auRcCu(MLh|TeNGftX6T8HE>*EY&iO6f13{5Yp@$i^gWEM7aYKl7>nuLC>xEZ;mg zLq9#Ur2v-tjR#8emJfM;u5h9#U;yPJZABX5wU6Ab-Uqd1U(OED1vqG?XWbjnQ-)78?*``qcSTw&XySMKrO zuK4Q-`L)=FN(Vl})AT@9ZWTyNC8mgI^H0yK0+SB@XTFKOC`>Zc2D- zUETJqPo{mwtkP7!bGTFLa?l}o{!;Hom#Z!gjoZIee`EtXp>zo;EV zYKw9fk3?&eEd0;Kz1pTaqwLGt*S}TUKGy2v`kVck>$bNh%AA+yGyH-?>g`9%tOrk- zPqS<7{LmB#-`|cMcphkbWxLsw551nHCZ-QU8(8nMLQl4NbMxp)5A@4t^u@V2&buf~ zvtyNYScE?`2y^z&h|ivCs(HE1_Qj})dvyR2#N%(j^{p$riY~87bXw}UA~(wSw53(O zfw$8%tNj7n~nO$fw7)J+RcI-+9r0sx{;g?ps@xneI^5 z*=(_;Z+HQ8{m79pNA$dU@!X<8&#=tyuBdBhuPqeqo68?BUBC5F0rZROaRrnU`j)`8qS@n2-tB?2|-s^HQblIhDRORPX5ERE<`2Kv`ot?%rWA%oAI@D3q z*>-lBBY%n5Qof`ztOng{{V`$Xmr;4^?ussy48`PmHq38LG*orh?7;Ut%es(vCH@5e z@vD^D!f9VEInH`6$g___xXnrs4dg6n!Vfop?W0<_z^bdF`+G;*U&)89Hn#p|o2Q3u^6iYbr5CKx zR(PEd4CaN7Z9c;aFPpP1`rOCAYl3a<^R4ek?iE=d&ADW@ zI!Fqx$d(N7x|+edGDjeiz#=J(3sOBuAfl@bK9w)JpF+X_nv);kq?Ab@$$+H~3L#Ll zPzDl)j(jo}Yfwmzh*WwcjLTF0ClkE8;h<&#whI70w<%zt`;X0yJdEbktp4AtO^eYe QC|hFysxF|jCTO(Z0dbzSNB{r; literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Routes.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Routes.beam new file mode 100644 index 0000000000000000000000000000000000000000..eafcec8693072aa9c7c6b3dbcc95b7e0531bfa2c GIT binary patch literal 10440 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Server.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Server.beam new file mode 100644 index 0000000000000000000000000000000000000000..f67c2917c37cb717fb956f687ed71f285eb56df4 GIT binary patch literal 3636 zcmaJ^2Uruy9^a4v2@(hiO+k$mu?2zz6;KJ%yI3+%+80x<-qMWWqHiaSe=TibM#SfQdvU zVwDO<;?*jcP)aa`5|P6tQdo(@60r)FR=`>%hN}pXLh6~HphhJs1Vf29g;;`P1RoIN z6qr;khvNtpu9m3yC?b!8ak&^xe4PlZMBkYDk!lcFE5g+%ilB+UC4-)Y1Zpb=oBo&- zegLC{8iz%4Oe}?^z7YvxIROiSWjK>iiE-eMuQFaNjmI!KUyMp4U>wKrd`t2y9LId#46jC{WIg1NX@{L%`5tI@g%YfYrQ7TL!NNB>M>bS-%mJjuj zjnIU1)5P)urG^dx;bu0(p*&y-S*27PzKOMo4VBK~LzLG#z5&~0D2qa8nX*_yDoq&7 z<>-XQT%iw@$tG_6&_74RER=J)@uNU05Ac}01N;u0N4N&0CHWe0LVhh z*aDFBVE}djr2Gf~a?Pm#qzo6}pLE(F-Eola1nN-$q@C~MQUbMle*}O=%8wr8+Yh!u zr62RVo+ap$V~{os!Vnc1%O(J_7y+IRlWz8ek{@Nhjyq9DpoC{6I1T^=iFgDjAE0K=pB< zEQpg9qsfIj(q6<=+T|2=$0PwhBOaECH3+80^-`(k|FOqO89E^YIZ%p8^de-4&QWAK zBDmte^9SglQm#q{BRE%|J8&W?3Gxp?6M+29zx*)fsibXM z>QEFD5lV3?DjLkixJZd(5||)T83{P10Aw6aH3w2;1Mpy_7!b?=L9A9`B1A!^Ytm^W z0>mVNlc5D}bAdmEn-meF;shkYEecCer2;KC5EiBa>6iy=z_PdvCPz1r{fWOiawOhO zfoR=SL7?mpff`XY@rD2Kn{h#yDs;=gv)ua5s?izAs+x?Gb zkDA?GC{5RVHuRo+ZT+eVayV6bjXE?t&uiQc>sN1UYikJ)ZfvM`sONsVNL7ExtH^Jr zb#&>q(}b z)-`6}-B%g5OkqFE(Zh*gF5u^@`fHjRp~st6^tR0PF5WmZ%j@!d*^-q9x1diF`U=Os zUvoODtLDU*f@oOdDDXd9TfNN(8d<;oo%D*Y`b?o=NRfX9V`5CL+U<bBu7wVnzV$cQK5}^mwrIiVLaXWa9;Fp;`9XQ`8Pq%dzG@Mz)w5j~-O%2X zdb2HZPsPI1=ck0z?~cpL-3D*=^Yv$JS#K}+>HV?-{NS{ERg~4m6N$(}1GGYF=Tr~h zBi@sy$!T@3!e-B`QAifnwbd_w)6r($c4G&>nvK2KnCG56{CrY}ck;8{J-_6p%yii1 zsI|ep?>+8aWjyao?+Ai*?pBpq)qGCvpPsb$FWX^`--CqVZIQ*NTHMDUyY%Gdn}mYb zucp1S$ZK&uw}0%8EuZ_!!n!|uZY)YKOfvtlTrodGclhL(*oqx#1sjJa8Lll^RKA>2 z7Hd{GfwQMzYOdjL2QAWLh@P@_ulpRKFGanl-^#0d6Xyn|PVu^*sd)da?838;Cbi== z?XF+aj<`EyEiSZKie)TLZkQM6)_g*f{Yzy;|4p>v_}UkF&&rM@Cr8BYz3}9I_>dtT z>l(KCxOSw}U%&NMvL=yxST|R*Av);S=p{A>q)ylDHXQ5h_RI6&hf_Kh! z8_xt?l~G^5n@5oZ5V8!@={f~dCt0~lIVe+ zgp(I@@|Y)o_UxM1Ufta}yqCv4@VjQt-g&u9U%O*&7v2@0jeobh13uPfW|+RX!J5A~ zownGN_phXmqm9hFBbRTQF>z~zb^QCo=MlZszleECO8f#Kw$vN30G3tOK)I%GFC|vzjq67W^c5q^-N6v^-J zE@(#l<5s_YkZbUOBY+X(iOfy;vle*So#eckD5qDpP#S&WLPyl7F+EIQKC z8UodPe$l#P(U?$4qgQTD=XONkRazk-?wGaKEJ`u0N?c95f|`$UzF1%Si`QlUqUTP` zvz9sM-$n46ZSCR$rwTMqp&L$!tjDwe81R$GT#6I literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.beam new file mode 100644 index 0000000000000000000000000000000000000000..763208f9d02ca00386ad2de0790ee8d310eb37aa GIT binary patch literal 3432 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 rV~N literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.ActionClauseError.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.ActionClauseError.beam new file mode 100644 index 0000000000000000000000000000000000000000..97998ad874ea6a3be9e8735be915f1097f837ec3 GIT binary patch literal 4560 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

    b%jY z$a>q}%9%%JM-pTUwnOr!W%H`K8r2>P$Cuk&HXC^(EpIL1t?h5ueCP5Pci(wgE3lh( zYvN6k*PQECyAi(&Hu(q6tzQQ_i*r2h{z-$Q(}sVA{({c!y5W{-QkT|nXtA;D>DPX3<0-3)M|G`W)sty7jJuYl&d_B9EYd2U(*J#B$HL7s!vL5U#4sTrUO znW36bI~FGa-OxQ#YV- z8%m$PhxwYi0h#!+=vO-_!JuyJ%c?Xju|TEiqP{GJwPXTt{m;vSwQD~2vNUf<%O-M@ z#fXT{0Zkz)6Y1XKAfiUKz8f7{EADezKSvv6Nh?B7D5XMl(Eh=uIIVj+C-u<|?23nW zOP7m5aedY=O|YLD?Ehb{R)Zm%uK>Rd(6I}`!T$pwra%Dwg?-DB0bm;0o$N*SBhMiF hlD)~3$WzE3ko6aPJqU_PmSVb$0I*&fHtmC;{{R_>3hDp= literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Channel.Server.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Channel.Server.beam new file mode 100644 index 0000000000000000000000000000000000000000..d2d5f91ba11155a8730fc4314ec9b62d865ee443 GIT binary patch literal 34224 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Channel.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Channel.beam new file mode 100644 index 0000000000000000000000000000000000000000..87c1c758d0be66c4ecf67617e6b864c543bd6467 GIT binary patch literal 23284 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 UINOWxT_KqIJ8)PlF*(uy0aX^4!vFvP literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.ChannelTest.NoopSerializer.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.ChannelTest.NoopSerializer.beam new file mode 100644 index 0000000000000000000000000000000000000000..fa5c15899c07f85cb35045c39789adf79f53697f GIT binary patch literal 4204 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.Server.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.Server.beam new file mode 100644 index 0000000000000000000000000000000000000000..02267ffe46e828d3c15b487b2c9591e79aefff66 GIT binary patch literal 25312 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�ldz9h*0Xw#^smGJt8}XF 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Controller.Pipeline.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Controller.Pipeline.beam new file mode 100644 index 0000000000000000000000000000000000000000..6b291b25a2002852f48c7f3ee973565a618ec064 GIT binary patch literal 24092 zcmeHv2Ut_fws1lM>;!^=pcFwP9cfVzX-a6)q(~JkAtVt(Nn#2C8z_QcK~yZUA~uRB z3WDMhQBe<@+Xk&+J(@1Havno<{;RnaQ;bjAb)e%w$V9HjB??CnPXH5|hJ7V6qr#6bh3y zi%p^AQ~7)@Gg`oB@HjMfB8Qp4$fq+nTn3HGXVA+S$s9J9&!Z&L$K}ovuxNZHo5hPt zq|&%-9tk8yC9>&)1V$8(&lS-4Bo;Fvios2wvSMDvF!&V7M{!LMfkL5*!6~z-2?^0u zT0Di4CM&X5im@MDa1^MN%A(^ZINaX}FxLh_D()4q23kt9RUm3I5 zTn0soH-+*F&;|&n02C-3Dvt-@S#0paWw3Y@E+di6XAs%(ft& z+>?Hj^6wrD0El3U31Z~-zCi?8Mv%eMRlrQ3Gq@0*BVl_lowZV|W(xoUkUB3G(9af9 zlBfwxI$$z|%HtF1Y!aWF0u7hJ(t1Tk;YdYBrZZ-7NZ=1UKJfzwyESd7wQu*ve3Me%JATCoTUj~=ONZ>G8JPw1#hZ_Z; zJ1UyVqHaUjdKvK$eN{a%!)M$lA@<2qNMpc>;l`LB!%cNy-SKA`y?jhxb6qp*%dvDAZ1r z1_?_55tL`3B%&^dQbQ1sjd&6fd?aFr68!N**ut|&YT38|8?!wHH+GM66t7do}RtWCN5aN|6*rMycE5hM^olAcBI>n{jFeTXAaP z2GS}CNJtIT2WRJqt5pA9C4r39g9|edrGbh?xoA92SCp@a=eVjP3_!s!P#K68foCoJ zM59EF;E9Jq@gC}O1P{+N0%0csFbG7zlZZ7Wcn~~u!Jjxz!W#XM4)TL!56^r8!Nb6_ zOy2`7XYJuxYi%tdtq}$2y9fWhg8v{q;Jvk&_tqZPQaJ$Di`ii)VFzHzPJNKY*b`FK z_t2MSGVz4e#NWl3nSvOoSX?Cd7mE{?APF!=9ZyDx6Gj&ph&T|QNJ2tGe@r7w(uRrd zc>xJ&h+Y8^n*|~v&CNIs)K;8EI0|qXYaVQd(+I{|nBlYtSW7#cmRo^ausu#I*Z~Bx zYcP=p(r5)V-e#N@Z!1nKoF|6jf&4tIg=;WE{HE_3j0Xj21zU?C{5*M1S~!h}!r>ux z4%rPYW-f^)<}0joV*r5!lsFY{4O0id7U;uoB1lycFV=XpJ{da<1(EXcNJxuJ&?mcD zg9L&IQu8O5At7xML;&=RCnBNYWKT#PG!#fj1gV2GI{=|;k0S!L(t*_qK>(_y??}Mu zXppgZ+{gml2qZKDe~;v$4{IefRLWRMJAsDvvKbUPQW-%a>jSigiZw?UR%jAR&J)s* z$Q{y@0^7rlOkA9nI0a}^ub4p{+R|(elI8~y%>Zs#M}WCDjQJ=LGz?(w1TfdL!|9{& z<4Leh0gbr?LC`>mAPs+FEfUhV#~GuX!ciogu?CrlGa}&(kdT3lLRS>g+74%E4Jb7P zlse;#v1FVv5;9aKlF9mLvNdSbfD%p6Q1pt_QSbwwFR>M9pkeA#6kPy{M1Yf#G9E82 z8Z8FY5(AeTWrHw5=dBgR{~Mr4ri(FqHisIy6M}1xH2&i=oFwv5#LA#S|Udv zqpZp5D0wo@8h~3WMP=3IihgmfUGCuY)|5BkAWHBA*wEU5Vui zp3rcK{)`tvMu2R8z$H6JecS{M@=2T%))8lqgzQN;M-)&mG78AaSP>7Y+Tk2fF2E?5 z;T*yVWQ<3jctW2zvrjy^PrUDUF8sX!B`zLC##rJ>u<0ZgpvCIzAdO=2lDMNX0xyD0 z0A6Yb^7HzbOEQsPgB zNLUv-ofri?<)3_vf^qOp(aU=!0MY0t^e6Vyn!!V8J-R{DHqYfdHrLfgt|LIjSB3FA*TX-{JbsXt&|SH(C`qI3KQg=9*Yu+k%0+- zYe2(;2C6A|Q=qXE1c@xFe4KCqGX?g-F#7T!llCe`GlRYSu0fPJrK}ey3pLn(- zPKf)%e1`;Um@|V#q`#En;2#jK8mxE<5(^$DM8kt_kg5S|r&0nthQel1z&r?FC{JfZ z3u1sW?1BN16MBV&PNH&0!P0@1b}%yUqh$cRpO%3nxqqp6SfJ4?3UwBk2pEts;sD8(3~2S(LHV3djlN#imNuVC5_(N*Ev(noynr&m6%@ zz-3T*Y}UXkh=tqEf1s%X^DMQi5@nYM)%;@`_DfP43>yJ)gKf!u82?8p{1jW_UvI0J+P$Wr1^m6&r(;D9)W`Ve z2pqIL+W-4#gxw6OPdPAA!d}&#|2{egp{y{4&-+mLk2SJE%jXw5U6^3oUUzCxJp+JD z6hr=9?lGuvF)SMuumZ_W0?r*+yo^p@h@HLvnTP%-<3L%bDK!XGIoSFRnE>MfJUZ#( zu(+4Rfuz4-REmja#8Q)(Yynq>+MuK+0UGEC6e&apf@uWcOaS5(xs2HYCRfaG*sb{w z)(Z-kjeH>w7M;UpviM>g6eOefzk&3BJNO1Hfh9iJLH!S7U^UsI^Y?}S@5A@Oy3ay+ zc*2J#;|!KcqX`lP3BV7PIh}uxeyaR&ON0!c|Ddw`dr86C`!_Vrzi`4xsQlxW1hMM> z4FsU*Y}&62Og41|a~lP0G+ff()i+4$0v<6u@A&H^0L%w57a^-hj?Nw&;NPT={|m$k zFO+;AgTkvPGNupOpun?>19t^M=0S}CKz>Cg4;XTGqC^)5*FW}|GW-*VWUz?!&O%7E zRBqnHzX-pd&tJk^{yXXzlq7M93~mgA@`rgD85h)KGcn&sLx63@aV4ZJbIXh9S(T@UZV9oVdajGq$wBM&xdCZxz3-(ZY*9}@|$ zs`NEMAPM!;RTbD%A9R!M)rbMnDIsZaT@1kLhw;O}r65!QTZ*ZPyk6z#KWz-p|AONG z_OUX&wk%!zh2P*FTfD6N!}uAVbNE-Q!V3V6OTV}l?S7$NIkyD@MM0kA9Z zEa z!@?tyyK`cWaHdXs8Pno#IzHMH*a0_h)+~_!mY5ZA&#nlj-Fd+Ei$|dBElF^K)D?sa zK?}9O>NSr;6|!UpqPSqp#ilWMJRxQl7o1k1fx}Y5As`q00=_ZeqftT?kU$lHlPr?S z-8k3>;DHHl8Y3P-u?ppZI<4qTDvLUcIm;@TJ&P{{P*%KHHk%I^Xu(JV=UA+y!#FE& zbd1*aXIR zT1}h!qB5qlW~c?>Y-{)CYyV-iDyRu4m z((VA;MXMfVtUFphDJgq6Yx3&rwwZLb_TzS8&fijUh2>+sk46~Jy*yUFn;w-(kM%SQ zzG3_@ivC_V+B5O0;MkO_2^&@v4qyD0kDp|5gIf^Fb2Q-R)m2q~c>cIEH{t4axg7zM z9`5V#`%+k*=zz=)Ydb!5d&iN5Zl2|1<5q6G+%n_pfy@fe^dS5BJkH$&4-21jUK{iB zFKn>ByWLr!xYb(s=)-~wU$1K(D)EX8QF@+jecO8hbJDWB^J(wdmidK`I+MNB*A{!8 z7#DbJnf(iQTSz|p&Bw?^6^Um|L(c{3Tv?A~8fyv0zMa*iGpF;ct-S3GR#ur1+3Bhr zZ$vW6Ju_!amuRuw(;y|=+gl2c9ASnB#jEtpaG8+(oKCyc()Rkx(mJ0d-8GMHYECJs zSoo%B$?Z+m+s7GA+pG0-(_GY8>h7${=BTHK7koLhBEiYG$xC=^%sY!H2MSW(VaxF8 zZ(0v23l=IUoU_%^o^Q5uqML3LWJJdwD*BeYI%#9W%_1kQ^dpqF3cGK{S##%H{cGpzL##%s-8J;Dh&?jdX8VkcgxDj-b;nM5=H`THUAceg+SGmelQ$`Z z+~9f7ns@$y;B59{+pBXrR;FfcVps?0!~}IEc4Q`;o#KvBprCFa4;iXVJfNm*+a8q` z7_WfJYFKn)^!f3QVdQd*pL24^;eCXm`_{W>JhS%5KwpcRvmoG<*@Y2ryq3J3di5Bl zYp&DXeK(puziSzn>gJU=bmQ?ctILhobI-q{9}lT7*)(I-#u*iIr<9M)_P%Q7q!Zpg zJIi6)T&+0Nc){|=yT_UwTDT|3@78PKZu9XWQ!ii8KGHE^+_?tz(%hsCL+=vjnm3P~ zwzfeuOFr)RSyp2zw?6t%xra6RDos1Nyy`(lMv7Z!sU4eK&0g1z^ZGEQ^tbJLg5^*_ zO?ck8rMI3x6UbQ@?Auq3kGnutT9vVI-MX!_$aR)%)V-kWrNrCzOkzpH(G`u>I<2A^ z%N_TZ60>|tUfim`vh;BFlZW%ujzauXU#ntSq8z4Z?px<=D_$v{Zm!s9dqZo>l*u0) zo#Z+ePNOB4WtY^Zw%<=cRU1zk! zJ+-`SI(x0Y!|A;EveSt4PYR|_omyZnyi8FUbKB{x<&qvkwDKf6$2sn5-qRabu0E1`HimHe!19}~9u=Ib zYSF>(in`Jo{OKk1#Y)BLoJrS{mD;{j9zLtgOTGN*F|U3@_11vRY0dJ}<0=|kf2)i@ zr@l&`9A5S+?)8QP8$DuH;6JT&UAn&9Z~F;DErqWUZ41X8^f`8dzeJ%l@dEj6b87AA zWj?b;Jr!xIYPKzI&!}5XX*+T^QJWV8n|-TaTKnd%i}%+x)5xpOsj3{b`KD_fM*UjC=}Ns0GIo4?ncv`; zqWQ`A(AM>B&24qYtDfAdTDEYH*}))`$Bf_0gLpSBSfAxbXt!hb_^ew-n;qqUvM6A6 zit;^1QH{g+MwPqws!dJJ@WWQFb}WrXx7oIf_&Teu;%_Be4Zo!~&B18yc9kW|Z)pcO zIUiWAaC2YiNpt8MGe$RT4kIg4S8qj!^LGDNR>c;|k&eWV2f%g3E{P_0K z;eo^#mGn=Xp+#C-G*>?#qm&hWHdRr3s^5}Pr3PP=M-^?2AU8#fFkSN$Vt;mx>zw_3 zp?S4St40c@lu$M5EqBGx(OF01c3dTI?k;KdWdYlGto^-pXxAadw=Ox;Y?t4xdU30z zIwmjc^N_J;S9Lxp7j-_cZkkw}`K85cg{^#R+D@zZcvQj6P1&XV$Tj}Med$Ur$G5G_ z=tS3*Lcvqw}@+pKeJw|oTiohX5JL9yvXxif}$) z;|%=qp0#7^a?It|?p)ZdyK_!S^UDQ>%^nUXvcsM%zwOnqQrR~XdszcJ10QruZs>mP zVFvTl&*rUG*dHg@w4Z-wcFVg=MocG>By7v0(YHTVDh)kgG!0mW3gFnMt4T6X*9pD zU66e2T36|oRjpbV+ZeG2&qaMz3bZWpRo@jnBWwQBaQmT)(hAq7xb9tzUOby}jltHB z*&mdIudHVnx18IrI*l2({OgTEEp^g0GIjlHgDZP;Yg1882P+p5pGNE>-p-l1S51J* zC>@%2<@n`uLAgGWscVB#2J`ok#(h?}7OZvcO<8n|VzrOE^6UwnB%_yYRjzM+Pd@WW zI(cnN&W`KNo10H-F0k3X)HKWC?2^xMvu|GF&QEB+o!3&&mTx&bqi*QNy>Gv{tj$@{ zEwBDgxoML8i_{EF2wNKbrKm&s1deu4{(V;&)98Z5wg`AMv1UWZkK9>SpgJc~gUL={37gbl-g? zRj&HU;}xOlDc7G~QJI~6$#U7Qo)68MZKsqp_pIEBqeo`;T%Grf_B>N_qgmdyWciQy zumut9`n}_BX81+Zd-RL*3;kO7hS}xy#nn4(PDKs5owko3d35)VmWN*Echg8WmfdpM z&zM!1v!=MaS@hJ${PVu9N48e{6Tr9(Fte!gI`UxBcAC*WLivLptgQ% z-L4%ge7&~x#MJ7QD~){jA^utzf7qQ-Pa_To@;WDfE1S()hfrUCvZ86}{>wpTR<|xZ zg?!C1Z=T1g2_of-wq7p!?7#GDO5PH;b+6}s7Tp;6IxTA^k!i3HZLeMac+JZIi)}il zjuo3aU!2Ug5ZZNtuHWvNQQL%|Gm)DQFz&GU1t!zOG~}v3J-M^O*r8H)%XybkFI=vgJel~@8-e~;wm|~T34aJ;B_qc=8Itdp>-r7L8 z=`f5_aqL2zlJVKPyQ9w3RV6W}S@4h*FNy((j;c@vvW}Ub{pQXejHPWd;M`lwDX==%~wg; zFQ>V^54oR?i?1(xb5+=B97Z_($Sg>AgWv2K%&5$CRY9}L>%I54rLWC@d(AM#+uQI- znc=Q*_u}LD_sN8pmqsj&c1c^Y@kr^M)v9`zf-84iZE-j{hSR{rZ`;!0ZAw5KZ0KJ9 zbmAMYtX1-74ZdPe*LxDbY6sp{4NvIM$LGEs-e|I{e)R+W#ODWGJAGChaJ?m8dZ4D% z`TC)Gdk?0Ni)UKAN&Ec<;l`Tv)}!hbre2)xeRtj1FIx^S8-f4I;6$C{tS;Do&r)~s z?Y6S94<{lT1dH%*gI^cyoEkQdEI-s;(L>PvG2o1vb7+3d*0Q2b zll_O&!xD?jR*Zjb>#&=h(erqiB6_;-3UlYqCwQT;PD^N3X3g!-kagNDy^fa1kDB(` z7dyI&YK|~x8`|OyiHp3$Uyok`2rae)~;k5_8j()b} zuwa3yYslS|T}>4cli#^g7cUBliT5zcns?{owkx52bCDTu4~JAw9FrcjEv+{E&8uV4 zd3J^uAJ0*lX@hk-kRf;c%#hHqC-{?htd7yU#xH^h_bID0j(?r8ZC!m`KmzZw@vX02 z>uOJL!Oka#%<(Y%K*W`jyKjDay|66)=(j@w2*a#D__#O#@o zeQ8$af#92`yZ5~Qn3&Nx>apIC38A()s?`az;tR2-yONY6tCmkTUhdGPp-ej6v9e=3 z?f4S(t2rxQ+$Jal<#(@CJzZ6BEn)pi-KnNU9>k5F8c*;Co9}->7&zZwx%}JFv=TMORbK>{<~`IKq)ox@*bD#ET)Lr_hFXT+Uli zQ$DqNkN!)`b!y8xmQ&~TI99PzySL1(V#Svz%yh!jm0#9O*v#G8iLa%`sT(xqxNJB& zmRA@$jTzg38uiro-u=@L=r4GVRr;Y0w>=B46df^M*}Ptf|GA;z{jSOa8U_Du(Oak5 zF&a+IcSNSAula{KaG4EUz5AL_`MROb7Z+_fQ9L4Mb`v0Iv64$(#76s*MWr@2*WE{r zPWACS+{nK}+POceV5H3|eUtr|l3)z#`DnE*Rd0z;Kc4gC4ma7??igG)|AX1%*E$zX zaz^*mF2$6{hu8^wMHE7jHEt8Mmg)^bJr+MPno9xN?hzPHgdd3h(& ziOLBLY23b*R68xBCw}GEEutkAi}Dw&wVH$5d&cjL{^s;coR@yBQ)-R)@Am&jeb)1t zQlT@|abNvRn;|EgD!RNb9bS1{kEH9{Fimr1)a=7AH`12P4<&Y;ZH}qzroNtLyxITY zT$VZCZf0&x{JPJ_F0jJNSbHoPMjw?Ar@nTnVrS5J(YyDyv)?xwbBt6>KXxh^oLC*`%tN5G_ zXgs}lqZ?1{;SM|9+=T(CruhfiZ<%TJg$i4Rcl9D}lyrKlMg|TiSnG7)2YL|pP!)=6DC*9cpgsjn9n>v<+?gPViag{X;Ib8S{d5)SNXH#;`U|GxbO zuWhAu=FkMo)AZ#8r17iVmi4hl8@fA6T-3^vT^Avc|2z#&h3)Lk8Sgd=|_~y0d9KF#XvK&+nnbk~gni zb0X&|37@$s>1alf!7!ES7vv*N@dtE1;O?DST0U;J(V^h8ISIxWratNove(?! zPMQ{Izry-K!?!Ox#!$LFwu^S%p1a`_FRwsj_twcq0lM!kOHOoRpRaX(RA3T#BvAB` zk)z|VeHzW|_`y+Qcjo6+j%^}L%s{U`=X|8Z=3Y0;wcKjhiVIjI)@RDB8`b;~%CpwR zKVRHhbK25`j=NFlzHMl8bN48Z5tk;L#Z=_Q9-L%@jJWUEsrW>G+Z$18Naa%d?Q2tA zOqUx+F3Phno8dM2{<|#u!}A2~C#zRIw>4B&$nbl&=Uw~Zo8!w0N0>P8&Ra-xdb{n^ zjY6T;)o1rychwQ6>b9{1Oph4)WD6EPGDzFxmbOe~rwO=HNWuE>a^j}+*IS-PYLwRH zbzU`olG^<2Qhd~;o=15Pr^cn{J*iezJEf`Ct$B?y;`)uk>NOP;Pdwckwt*ji>iu%H zm?_aiug1>_y8AJ`Cgzlr>v{Hp4({*EX{{lwZJP_UPhLBulw^(^+mwCPz;n@rgV(7p zwW}4D>sK4(Jb1qLaP|3A@_c9PxQvmiPa_ulWV1F;aPOHn@`BP?&!wf%rNnOIz01Bh zcD??Vm8#J8RAaKy%+(&rZt>tCay@*mQ&oE15-pZNi)U~tNn<1v_KM&@KYWQ8JWCCx zu|dwCAAgqQM)8<2Ad5V>(+FJS1wg=VEchWOEsUPRq9!tFU|TJNoA|S|xIZRJV)A?e zN3vNRUXoLwC9ru6x)>qJcQm|p46atd0u$_#v>$euOA-{KnS5{w6;+A~I7!Wu?si1= ztwp?}Wk9unm8*YS`j5o+A_1=z4wx1sSz5~=kd~486V}L%aSx!-KKzyzDx(4|q5Ws< z?|U#jt}mbZGvLoKh8G~fIdvJvKOt&BhrfP;g_MLp(S|-ekZQ}%i0-$ES%&YxOaJd; z!ml(;uxsbvHW@er*a7nsG55byAx`)!Sp2xH>@Ss)CP z{TcCn-+tVWcN$>9_BYwFw0@=ktj7Ln60rU_d}lJep`^bJ{{DU7?d5-_3Vp6Y`2SH2 zz8{GBOQrqurq|!P{SwQ6+)LO8YpL%2q|yAUbst10`ya&XrwyimqXs9&#GAAJ2CnqC zJ^d{KNRgQ&S%(i!@WDT^8~FWF2CBRS<9^N`@D^b&P5N0;>ikJF17A$yAof}l_=Ap6 zo-JfCxDuxcFa-FX(s$V|UTIW;2VB)e_=Fa4CBdc#K9w)vNn=Vp8kfo8Q-HH6%ODSD zkVVk3Y@V!G>3&ctB+vrcZLAVJeWJoK+X9O8MKDhIiA1liO?!jfouzItA4BQm>Qe3cu zRhmU1k-?8;%WB5Jz~cQj($7lKY=5hL@DTz_|1CF40kPXH}R=haj4>-tl?T>2mGxiUWT^uI86j!RuGC)Zc66yU} znpD0&_-0b%#2N+E{EtPzF~t8Vw79kXpF;nFLJw3g|8>4T8Y#&rvBv%VVybkY($6YO zhvd@Ff7U_WpAd2FG z8#qu4E-ZpTRRr0wDx#<$`zk2PrXnJOsKEOpT(VDkmV{aaJna5pXBm6l$)%l zMGi+%LCGYq!(l~L7hkui#OKIy3D&o3H=C=m$9q(V(ov?Jdd8 z&7WSB>nSdD`n(yrE?;(@;F(gX*6-^sDYO(ii!xlr#hzl`tQHSr{l)jra~69S`8*D_ ze`isV%bjB_@#S_oui)aqO{WjEEO5^7l=!@h+|EK!*O~1q%X4}iQ(QB8oTvL#Pidiz zQ0XGWTU3zmv*r|gimX286qgVit5vWo)Xw&}!5#~`zHaZ?d+1=v;VAK9Y+$F0aopi@ zPa_<&K^9l>9(4qEV%znpB_43rfi7Id&Vn9A;B~39V2UXXESgy0$({mEIkU4}MLus< zk+axY=)JB1EiS+BA_bnkZYW{2Z}W)4TCT0#`YK=P+SXwMfZ zK-Ah9&dJW{JuGRdX_e^BQ|g%P^|*`5h%(gmo~b3S;u$m=4Acs)d#$oqxw3SEU0UBx{rvkP3#Vn=R))0@ZF1(Q`}RrQFkr;RLdYfpAbG5Fxa0DO7sSQNor z;UEcxQaT)b1C6{IcjAZ8sIy$|Y)_7>QiD-aT);Qis;ZnA=_=08&3EMtg(SPY=S$qv z)B*?9uAAd3aQR%0Y;SQc#CeL#%{S2iu)c;3?Uzvu0b%^UuJq@~g^?kStx&6u7}_7V za*90p7>Hssc#}3(?FQcn;#LAi6hoIBL;)JMZ$^=84=YjR%v-6#90=wWLE?y+dtk+! z?i`1+Am8b&gc#A)1yfX}nY1jW21zMIppsbxg%25w8yco|+$6z9YcDKeB|b|i~6 zYNhpW?{DvGCG7r%_#=Gz1>O~fuAF=)8^9vg2N?#YH9^FTq|S2ky+s~xKAB!tolLef zJFgJq&&qc*-H232-LrU736=LH%eBZgowOLu77-X_AS}lWpI;~y{P}uxOVuG&d@~9_ zMVNagp3I_?#H$15BlAGi0+*`cP&evLNSj>*Do*rx3M{zoucRoLS_uO0^*SfH_*R;* zsM0pb<0GXg@;N6KxY!`9dA`B|*m|e0#A_wh)ust`PTNCeFlG~rF$?f@RSARX%lG6s zea=?r*?p1_OkA!WY!E^60=Z*C<@7nAdtTpp^|xy}EK9+R70g&TCVFya@TPnZkt1NW zVK`ypvt8#Etyan6!xz#!unzI5F_PQLd=|1lY{KGhCs^-l~v7#L+ z`Aw45i&=dIliq30f)dzH)_AHmQ}iqFIDHwc@L&-zq;WIEuhXDm`89i|iF*ccDJ%AP ze1us*d3`RL1%0kcn(bBDDk>=gXI!oL`Wh@Ut&SW|sT;lK>?lz z2M7TB4|{OkU#g6nk1SG5kb{vK;yww+&zkSXBumr4BC4-w2g@<-SV38Zff*!yWMu+; zfJ*rCJUIdR^&8fn1;v=~W(?Dm5JuY%NRto?aIZviWapK*r?_&;C{IQ)1HOsNcb;0f zU8QRG7G(EmMdT^%(d3JMfWfG(sjZ^QUZqp5P#J~aj~QCx_T?9<+U53OW;F$aAfTX) z&!dnLELHJ9PwK=)B37ADz@SFft6%n z94>FRv&aRt%q{V{$}k5wNT=}I4d>;$a&gccLbAGu2`u5vo7G#T`Orm$&|WJf*nKeH z?Z!A&VFsW=&oozM5akZ46jJ6pzcE%yv!LfC6MK-lmrPWglRZIsuZ4Um;Q`}m&&Qvx|IiH=ugZUii~)zOi;!ZA7+NvHMmZY+x3Cf|V8sfZ+3#kyR{qI}7+mOfI0) ziZ95#Wby@DVQrz{T+d$v4zaUWu>hdO4I{jqf8$Spy0HwYZBw-01G~gylQHq2_t)#j1FAC~!um}`U90tA#tEibF zqEMi>X4UQ~niIIIbfL9Wtyo4`@Ci@AlQZ|LwyCHCUA}qq& z4NZEhInt_&wi--PRKUTg`wWXVny}R-N7& ziEdh$<)WHGM#}HH<;KRDI+I`!dg)B&&c?=OQ)f$v$rK`(gmoc0Ao!NfOnAy=HH9oR zPczozuE!c1>kLr@bP-{-qB>Umpq|yS8XA6qu&M-B$wmxWuS+x5<#-b^4D_CwrXr57 zt3ughXln`@(oa3DhIZzfLK!;e_kyXY>j*lc#p*x@% zDf6b9!U|Mqz$((vzYSR3EJk1X&$Xl;c|WK98# z$U?4uP2sxCH>hdiO{Odb8$*(clm$pNFj+$AXQ;j&{cLDWFCqq@`-U|IzV2HfI^PIX zx9TE^0eoZP0N+GoK?^1bVsdy(#)C*zGQ{EGlA)0`Kv(h6=fM-JK5_vyZwl6!vRJ>7 zeryDE-$*|AkdEUU%SCi)BJ<5c>lu;-j&B+vX!47p)KdgY=9}Y(88m9nXw6U5qWwz{P6TgCga|R=Nsft4y8HP%v~yudO-0mDSLl@s}6SN&V%< zXq_VN7*OkSV;eMxVhz$)fF4o6Da>O01fZj=>6J>uR%qCOG+Dd76St#HRw9_i(A&@* zBM^8K-w?%Zh)`{1zBLf+gWv5Uz$>#}Arc^fWl^Zy$i(rY%txbEIv#?YOqmL1^;*rf86Hy*m7f>zQP!nsi!gb*D=YCvl{vb8c13Lc25f6 z-Cs{gqx<+knN2H8koh*i?jhW^M1+{E>3bl(ZHW?Hj2(47b>^rfV`5aSv4c7NAnX@2 zHhhO#VSHnA`g!G7N7R6|Q4A5ENR&yE`F4Oh5KxmLfHeeTXO8cr7J^)zHMxR#r(ai$ zq8%NJu!@X8T_P)tT{0tSu!GEL#uSe4Vnq&Yllk@vfx4>Wg`}jYHU>AEq!?2(br#q; zeVj2>pU&)$%*W_W_HjXiX;B4J=3~L8ra&nbu$kC(4Nz$iINo06csH4k!;preYMR&B z(_A-59J_;^-4%8YgE;o!`0iH2Fa=vl!PcsAhvR!#_2va8)4PV@rc5)8HL);EFs6Z6 z)CDS>A4#rH_nG>NDIL zm1EWU%8h-2SYJ)f(v1B$zAqCpAINA?5E~pote@2|3bu@IUTz$Oh69v_V}@(loIY{J z0mBWE$;R{?Yfe&{(Z=!V)*Qg<0NZZWC2_pX+DFICRv2nJ2D(>8m{q|*^v<(KfIb98Kv=;*^v?D#*wfiBNaO` zL9rtvt%eB!I|6XbPf+e<25_99*^E(vGQS-eE%PbB&H?Pklp99_uhE2;)sPisaAFD` zZ8r3bHI9vfLe?-Df8+SE5hjZ@N-y)NpyO{E#ZVU*`Lu`V^otSre5hz+#Gmg*xRFaQu{NqT!gPB@xECOCdgqPLePBai3i$I_Vi`AN_ zxy|Xk*=*&atckEF{c2kHXsD-`k)XKBSj_RoGN1lVSVjn3X2q@4%t79eU&+Zrd$<=g zC)<{VMe9tknr|~P9@8Yr8sGZ#o|d3b*0- zX(o$6U=1baLC{!^F9pe`%lrTUm*VnLG#5U z9RIL?z8I*O<#`%uIsOr=p_I&WTMTn;{tdTv|7={8W%+C2p95`7hn`%8D`7*7LI>1$@rL= zEz$U=WPUiXDFfmQlZ{W)g!r_@_!Pj77-XvC_-AB(BN!tu{SrQ$gLIhoHy$y~Ic z^}vfD+dSh7hR2N0bNut5TSJ2J0y2##^CEmBnIDB&N;MyQ*bJ4I6`rE4f@FR)P?v~2 z=;bAu9|Q1D0Q}3E3N8lQ7YEqBgyR=8wv%LzRoK2X!1g7?b`lwt^)h4ZD^$@a9?3HJjpx>Pa})tZ>#Lj)c>jfpK-$jLS+k;#Gk=eiO4==A9V9Qx=Y26Jeow zMp=P(jWVuf=)6^Be2e4XBJ#@oL{Q)zX7kpT8`niw7}sS+lWS!Ies6R9IyTT~kULu$ z=*9qwZ(AeTx(zqrHEjTq)+t|A~g8Q}r?(YRL zX)B}3rYhqmj^9*nd>>4DKft8T9RI$`B$=P20Qw*RXmh!7J9^&2dQM-V%oJOon2bLk z1n~EBZY#U9EpW#MHsq?Zx*dJcB4UTk=V64;Vz4`3k4lU)?lOnQ8h2-!v(ot{9KXw& zNS+a_$?h)39k3=~GeucmH|wDt4T#h-pATdcAcP;W@l|2Q+{5vEaK9-TPTV9{??dHg zm9dKBKUD6Kjgi`;=PLYeMzGildNM8gL!+3sBmzK~)p!>w^^wU+YkZ4gk>PpjRAte} zGCu_acmZHO36?@@6e<;{oqx(Y-&9RDfAmf2A@#(gsH0iG{o zB%cMXYCZ=~KUbt_F*IR6$A4}$ELJ9*B1H%e1cYEe2>B%&%NJF~FF5`SYxq8_+`i)Y zFF`Jj{|ba`9%a=lWV0utvjYMCFVDT2usq7JJW^#m!tqBGERS*gQHJF)VA-NNmdF1E z%M&v11D4C6d?(qe86Jwvm!P|jU5uw`*{oY-JZ%=tkKsRGmbY!SIZD`UJY{ZJWO%jA zWEc=y#&_L}dytt|L&|75jd%zJ^7vD0%u(!)V5kTQzH!>W#6BbQ)6n~J(C91+Fe12O zHA84h!Qw=Wpe2GDya0@*!&^#1z7-X;M!^hLpu-aGn`mn^R%GWm{u@Yw%+J(TWapBN z=cCh%-*WtU)r7G-(H#G6vhlk}h-jMe0>^*HWYrXjn;d^ZbE;z$3H|&-CZXCYEbmyj zx%$HGJluM$+q95o-j!Bte*a$PXJKTSpz9CTDvBFi;`obdA%=U&YDOS$l(~k*xQ62| z%lyNr{W@x2(M;e~2<_E?3H*`culh~kBZ@fu6cC3WL6#^$e8UXYNCupr0?hVLCO^yk zY;^M``oCrr5I9u=k0gT#My<<=Y8XPE4`QGE9FVsYn9v!i3ucsZ<1Y};Ulj2qSMNH< z|KfM`$`pKl4d8Pf_|yeH@b`d^5+^{V6lQS9B-H|rzXovh2MKP-{G-6}E!_UC!gzxS zU^T3bGORO4gupI>zjG0h1oUW{mQ$-cF`s}L0%Hb~z?(8Z53tr_yuZg9Z^5%`6KlMU zRaG0bZ$P?yOZ|=PZJB=z&;%u19URlmBd}PynGKEMCU@odKV*JB;BK^V{GAlzALdjf z3#|fm`d(&1XN>{@AID;7K6LairlWsW8UN(?Ked_UFFzUDW1N4>{1XJu%JFx*NSryM z$jZWu*2F&6sNq&!PET`Ev^5DsUjS~zrbr>W<&qv@WW}*G_tFVby>u36j?(p$==%4! z$P;}^Z<1;Nt61ZG48Er=x zYtbb|_SFqX5Z!F;lSmaYVH9yof zd7IW1!OTbNW&T+(vwK&aq$8B1&?+gE6GK`2l9_jlwBN#s%%KobdjV!uF-+#41KHj) zabgWJUBEw`Z--GY0<0z}60bzhQ1CoD?U5qY)TK({I{4xt%s`1XWAW1v#fdx`wpGf) z39>=vUjXFI0w>mDdRhvGzBtIjTRAa8=3m0SEyx-pGBid-TceV!x<255%)g8X-7q4x z4xUpK0{Sw)SZ^`*PLb*Wfw~L9tx7DS$C%;r8;-Ega6mzi<59F%Vk z&jpOE&lnk5B}H;#B)N|)p2nkkG$+=#8nQ71ViSp^`c)PyCDb67xkR=k+?=NbQz?pD zfeLUv7eSI)Fm5?0{BW|=fSGWqAtyF~377d5WWmLT%p~X=@{N=TjJ`;V!2AeX4mH+H zHUDGX_EMwBKA=aM)RYq&B}2>HCs&r}HAl_Xeol4;*hM^KXL6A0ykGExo0d zoY+Dw1UFhLkrpO1DeYpISJvRfH8hf>np&nWGWUESFmADx}uR zbOQ4&LF!vG^Gys`4Gilqm)iNwx2RZdtkgkrFtZI~W^|PV-bF94h5&C`w5M~Jm zqfW6h{}wI7%B8mYrD1wALKMVLX7QmiZPnc(LkU~@prl>U9FPQ5$m2vY_8Qh=F#9m- z_I~dvS;EejJ}OO$<-`~^J~N!kA`q4nV`&Wlrh$~b&?rvk*P;Dq$V%l>90nh!OeLSQ z(2NvEp&3$NCdg){yy<*3B6h5h5*0}MBh#cLPE52K_LC;a z{00S5w*Vw)Qc|*%jEbE&F*)G1Kw~(uQ-#!7f%FA-EFsZdII*+U@Pz_wqXJCZX@HG^ zpms@?Qcy9K6I0M5=!w`hh>1I?B)+f_0>rnH1+?E$CtAJ}^NSW3!aG!Rj23iN9V0Db zwP4WK%rVk@`vqh18}V$v_I0X@ZDI&ef8uxuCkE|Sd;zW7NX4Law}5=?NAU)=I4w}T z7{%+=;_fp4F4+DR*xsXD!fuA7?q(nyCv^wUE2N%^5_}%jHA?E)u*`5kvKkH|eT{TT zvT~xev(yuImpM~1{~pYKFHY(j+@44nzj*$4){KC)#Cxi^gol3HCGF z&&&VB>|o|vgPA)hz^*T#<(r9JAobut@qQG)uNG$niWj4JlUh7P=05;)4}-Zw%cUV; z?vQFaJp}wsk%pO5k%Tm91SbybEDbla-0)awh}i%tj`)vSzZGq|g$BAS8TEAU^loNmioW~_g z2*l%MJj8Zf7M+PH6o^PINw?^%H}%ekarVU78^L zU(@>R0INyscc^-t6DTIF->w$B0>z~D+tlJ*ncoe;I10g-R4(O0Fme_BB(2Y7TAv@J z_4!Qe^Pu&4(E2=ReI6&~SqxrSAGiWBoAGVsViV1B5OCI_^B3MWohw0@65 z|%^l?EVz_nu^_2)v)liA4|aerknO zT#ff$PAvBGzDfZ$EdUI>_a;j|@VT!v-C)!(V{Ixtp332x)oTFU@1XcH2Xlqhtx%gE)k5x{67=Z{Ua&T?8H=Q zPNL8&F{HOen$vq}7?!(}u6U!{pf<#Vy zl$j!UX^D~6sAwy5LMo)WijdjZb4SuVPMoWZ;WLGyk82F&#CZf9E;L(WmrGAT?&m9w z$LLa|$FSI#uM@Ctz=B6lF*JH`<#Wc{{TgqT=du>e3}31(oZ0j)UTTGzxrOSi=_8fl z(RR}qxV6+J#D|E13Hq^EbYqBIkU?HyEU5Mcnhrod4kq*zg(C)raN>LjFRIA=mkfcg zsw1!_GJL+~L#qhj`J{hBc|0HjHi*Dyst7zmOOypNf8Zfd^+}mO2qvEflb`A=Eldmq zIvA4?=cuGO2W>|)CVvfI+)hk};#k)#d*)RxN|v5S z#TPj7`3G#w3l-9f0UPrYC%)*nF-H|hirB#s4Rf=r7*>elhDs1!{ z$w0E8p9T1?+k*!V5v-zxX*w@Kb-#r!;Nhn4mW3hi18v9VvdPSeYh?ZcKz|R6-YS>Y zV*G0Z<40^Rc>LchSBMw7nkF_IgfS&lYIG)AojcOxqh3sH9buoVZb$wl68NyE7oW zn6@jErFT&4T~2)G0hM~ULV7QtQkyvOJ-sCvNep)D;ET_5d)b)CbAZR;biAPTcx{N^J{LsjEz-e*9mn)c!pF}vK62tGh@-GAGHGv>w3ie2THD8CZL*IOKSdaa6ZfH~;B6%fCw>-0 zx@e*s%08F*n;8C&$nKB8W7APEJ8&P+HP%nJwGBAs zx!Zll@UCpc+Nyn@Exe7k1II|PuQ2>K|NdL3&c7?C(=8A%oBsh4t6Op67czebnEecn zeyK#S4shaEGXEzPf?EfYrGpso*PM9JA|1krzs3e+4U2Sy6A$@AJTm_m!bj~{U`u(n zRXT#Uhh_e60)tT>u}CM)<@TAmrKK^V1xm022>mfn4EY*wGT3XpB|)!1x0`_G7;(s z@8Jh4C!S1}&H&9*K=U*wp6V=}0h*^7nzYFUe@}<#sZJI{Ag^6hq;qiB&av2VBt7y; z;1Gk+CoM2pWRb%YF6}Aw4mTw-k$M0j&RC?wh#{Xv58rU&S^Po|-&EV4P3JA>ArwPs zp}Mi5svG+)0GvbTHXSFPmqi^B7g&F5kSVDh#C zD-5gyYrdDoFtomg);~m8wQxU+I?7@VyByTZ7C zxk|dsiI>?fsdSYSuP~*%O5Q9B8V&{iKL+Vr66qVtev-vn7~XYce~!qi7Vl@V?{euH zCa!DB6ho2KUpVm^i>wX@MiB}|Hv$;_QZD_fTN7)j}+-T zB;h8LgyHnqkSx|F34zq5NWbCMZ#sblP4mLlXue>T#X5Scz3ePNjr1ToBNPtW4SU)3E4LkW$8sDZ*80SXNpu9p1< z3`vY`Vg%%f|1OJlL9v@APQ1moKBYf6@wQqhaN-{QXj$*?+41X9aCF~ESiDcZ4+nXR@rr6$7-F~wAmi23)=q{Hsg-6|BZKMIL;Qj zMrUSawDV2RnwvR{1J9M?s+Yw`K>Py`!^-V7brtp+s?%e(*lU#Csn4$74`_FN_VzDVmETO2zrV}78^6-+9NgM zayBC*8ij3vK^PRatIl4B^v_AuaM$>x}*h-MaCeU&wOCg-CPKDj1 zD0g?Z{2^kClerxcm)&FAWnxQ=N7*j3H)TX>Qe|(# z*_yx{(0(uIGJ;lmwx-q?Xf8GdM1fj>rtEzcd$THgGtSn`%0;HxTW~gjisWo9tTCKY znO*~-%Cta@w70CXx8!Ust%k<>G zu(!?}PND%zYmee=*fGLWGgK=|;Y47^$QFf;*fxC){RBA;l)WUw0J%){_eU-gEXKT-Dr}G_% zUJuUH<}`aOXN$oM#MxqDGgZpUVjE?c(dG8IqzZeSe?qZKoDFZIV3;IuZIxkm2nd{n z-V<2w@m2PC&K9o>6QYp7hH0VsESi>mm{4pT0#dbDleCVqNN<$ChFB$d-05L_Q zCkI4Pnd|iB_9UQ|6hJMRvnBaaYpR{eMRbM)L}vg*$Ie7& zV3mC!XB!BqhLsq^+3d_p3`({SCLbZqp267$2QO$7Ia>z#cjVXx*%I$d9V-Y9`uO}7H)Idl_$Rgf{h%w{#NM#zc#zaCJx&c`-Vq+M3 znN{{o&X#G7sZTRI>5eR>sWnEk8l$T0qd40rAe4-ub_YY*!VzFcGszeeX0lJjud%X- zHydIaAUkfAJIv?&tdHBrCsOxF=37lnqnGSfNf%|Jv%dT zMR>wyy1^dETVvL(L~F#5c5}9DdLobDuv-Wv5dm2Zy#Pcy6HR5Y7w9=26ld>d*mJ7v zIh-v=^B!EtEHFWFdj}L(S*|zYGs2U#)l<-La;u>*Nx>vf7V%z3OcRVTpZSRPDV%Mx zS_pBT;$IMUHQNgrV+*S61)Qxw;dx&y?%0FQw!(6|JF>#=R-R15gU)sjXTzQfUO&=vOL28Fld>_sqjWUh)T>{A(3I8O9?s$b&LF?Q%h z*GM~idBa{@WiRGz#UNo_^zY+rUi8h`e42r>fgBTXw+nej4m6fUyyl_28Ld1C+lZeZ z-kK3ld(yBGzdF3Rp-~3gF$cu~;vW{UB%o$CI6wW!X#w%3$s%3>iNV9>wo=ulwok_x zrz`e=Xf%VfO;`PCS$s&L(aZpiX3(QTh$|9^nL(YXuCi^GEaDxJm=?JGFa>YKf#8QF z);^mY&U$8ROiPfSUggM&wLhY(!gFfu=_=bJAVLb6(^Pu6v#Xi6@=i$nY;sa*c9}yj zvd2WBsLYDD&`tbA&i1HMhOXvf9;0HsoNk*Zi=9w4I)k%47GcV;_J$!CRMX05tMh>J z%Cv1h>@BLbL$$}XYJ*WNr+T#~;9jGe2;wbBu|J_pMG}|@Vlf^<4{KpO8RXKI+n>a4 zNF@1~s#rYff21W+r9WQbxCLleU~3UF2&(iUW3wQtZzG(sOLF3DiuwWc%}Gb<(DHF>TNLBijg=Rj1ht*dGHN zJpN*PF~$BW;9z?Kh$Ir6So=#@RYrs$901DUg&6JmHIy<=zhtq?I=25s(GZ00qS&)! zR2%QjAfN)Bepv~VDm!8J#hmSBCbHxQ4_8F?m4L`DMic>FY*HWGX_i3j~%w)hvRf}mh3Xce%tTFcARQi=5ZG)S^ykZEioMK;!5#Xg7P#6ov zrNk|EjWAhZiWr&k){dXdiVw3?jojcdY5OwF-sPNa85vMkeGGfrN6*>Hfw5+)#xkVG zJwTE0Y2l-)Tc_}^!kbkK6!LhUhgm5#PHTG=6W=M$R)Il~C$=2Bun?DcD`#6lVIsnr zdHC4&gx!pi#qki_ig?bqHa5FJ#`*JXdZFsF5(g<&n!U@}-k}GvF?}g*{4cz)Ht)(}Ha+T_tB2OU7g>dWnL55MhhFGO zcH4WR9q+^Nb+Odm6kTE8rvRweJ`S1o zNq|M}A~|s6G0LI~{`@3Rdviea7lZRT#5xpjQ7Ti-Tue!MC<=NJrxZ+{sMg#X05DAR zI=A7yco4WV2)w;|P(v0cfnO(M?Nu~su{Sf*`ECeCqN6;BB8&0ccVG#&LtBD@UTOB7 zoNb4H6_&4z_(N^PjG{Zs?Yq!y7i$*N1=B5juU*!dF0`mr8tl;;aJJpF0@o+8=RyT6 z{m#-GEfi0tr5fIowe9f_E2fLKi2TrBX7Dd8s{ow^JwC$u6c}?V+J1}|4@x-OCo;AM zW4f9++ujuWK1lCAG9+X`J~f-N*b~td**B|aX;2jEQ&dD`V;_rbL|N?nq7dCcgMD;! zADi?iGg~o5vlYrFN~7?r;g4x_<70uE?%p|QZ=t2H&Kbif+Bp_SukT|mG&hdI=j za?n-0Fx(?dak+{FI?5P_#ZAn|F}E`WYMk#D(4<(vp}BFC6SAFdfsR}h@_mBSn`$r! z_zU1i$HJuwtw-Y2s@8D=odX&86(1iz-e4Gr#yHnYz(G%1JAW4i`Pt~+<5m&##v9n6 z=)g5Eodm26>%S7KHJ$&YP+B=4D^5_c(rAY>$#T&ZLqn57ZY@FaN$<7N5ofxV#5dqd6C$u*hdX<1S1zrzphg1I4rYf=itwn#ZJ`aq~ z#*tKUjA1Go#Df3?00h;X1*J|LpH`ahjyGh`QC^@X(dmIEPPJPSDD|w`f*FF>lk1a$ z<*R=#<15LN0)QYxYE+)a359f+G9CAcPMkjKX@-EaEDdOpBhX2lGfMMZ#V*i}hKwWo z*tw@9UPR~oNz{_b5Pqsh^BQpTKXs^5iEd}8C$shTH;mJ8gevstDySz~rr{WAsS6IH zb!Fp>W+64`&`UyNBJ?hB_^aS47E+b-y5fXM9$%_}()qEy3A6 zzFPvT-YtQ(b$g&vMRZC$1eTp?%mfMq6P(J4z{*j4kcPgRT&vQ^uz=vI|HkD}L@`!HnzpPYCDW+peNqReT6 zCba?>lkFsH0$knkIOY&1mXB?%9xB@!^Ql*$W{{M4A%jjchOvXm&r)U)g&7#r>{5{! z$EGv^GgFi0sEp(-1G%?{sSeqONmhV8X*p zSO9ZP=Z)qFm=P75!OqfEIf+wmajZ16fjD&;#|?vUbYwW{1Gd19;0#DIkR35}AciW? ziIPl;*_6lX5^x2dQ~}-qeg%Y6DTfLa!w@M`L*Ss~YPQAs;0&bLpXv@x95ehXuZS%H zi}at=n@vZIh8in@FEoyEE}-`6^hXq=@hf--foEoddJ8fh0R?xf){@ooGYO|StAGM# zM6u7Q!Yum?va%3+NI3*K9dn6t&p&^pYBQ=LtsoG2PM9@Ra3RI8y+DkLHShVsZI|htD5hLYcDlV@S~6j zW?!U!NK~K72dMeMxMrw%YC9w-KSIrq#+B$vZ8aJa%vMNa)$)nBW+PF#3n>?g>gOR% zLZZLPNK}W)JxE1J#3LG)4~fdBBWZmRJ~PyE>T6a|Uc>oels$q({mw?3qvomKN0I1n zKGNezRA(X5(@4}8$;NYP{v}+sIL~tae*N_N*4QI-?LRzVo zQ(vo)s6Nqobx?i{@&uFWzpdtJEE|xhKJ`_p=Bds*LHT!)r?#7r-dD?e;yM(GaQFae zD-yw>^6f|(o;%b$^|c#Gt5cX3gntwg z_1g;RjG8AIXoIBn`yKKG^9s^cwVdkzghXw7BK@M~iH5%+QT@M=G#qHW_mNbX9NiB? zYJ{Zepa-}0Y8~Ll)dC z)M5G7$Wwnr2f(8G9LCMHRmv$J^0SgBndD-Tr@jbg60X`#F7bktaG*c~4yb zMgoqZL|4jFTe7Wp)O;;me@8-n?oV8AD&^cCYM#n(A+L^``&P{ZCPy+v<$%c@Q1ev( zOXM%B6}2k;5GhD3OvoXL15u2g;riSktb1JV*C zD*qbkWi?OzFF>L?6-ZAYQJr!%PvuniQ6&0%7HJw1)gfC+d8#u52|Q+b(mxtA{pF~M z>Q7YjR6h&Jfkfrw)jXAtQGZi@7}7W-%F~=dw4?fINCVY;XEjfCl9AGpC{Hx(gGBY) zAyFI33rJLt@}y&=f0U0N`IVwz`{aYx>6q1_bOK? zqf(xV-+&pa^37kLaHaC?xPrI-@j6@r|~YrmGn^SHwIZ6 z7s)))Q7b1NQ2m9t8iUG3Y(R_*qB&ij(#^C?^Ne)m>rLyC~JwlhB>i zx~966VLxiAZ7H(GfYk~*cm1CQ)V_vtXuQ%q=#xvV_CG(n#EK)dZzNI7;$KP#ZY`}2 zz80YL99%#({`t8iX9$YxAcz_K@gt>i&_{^=SwPTg(+7J39}8lj!u?p$$ao_upg2R%iDSgwZR>9hM4pms{SwEQ(^ULQ@cROhm}QWWwcUcC3UDIXxS8K8u(xdEBh}WEn(yN zZ}%CwsH4EgNf=C?%KWJCT3ChMtD&s+6|$>&f}@oaX|%i^`C7q)ASJ3+KrM~cJ}|-n zM+AN0!OOZeR{KQAzZFr(|MjyU46>fSx51j%q5-O3$6&Xr6)?nD4Q*x0ls%-uJXrD& z)0F5|4dOoNGkMLovo{a_UT6zL^fxmDVR_UtNSryUKh!Vn2_330&XtG-twOC#v=HW| zPqtx=?U|OJgTTVX8ElQ38l+_c8JP$B38jAe2KwpvZ~bWD-G21tws=$)m0shp88M^1 z7CU61Yd@$)1b=k(!UqQvhnO9LicW$?pGH&`-&l#0JSj~R9+2y5eg3P;P`~2?05rWu z=;DFk=>M*7zsyp935sARBvtQ2VV0&GLaZA3N=U>s5MpAIVd(9ToTIEJE8}S5Y{0~W zNrPb^iyM!G`~@`(6r#3uUY@R0kMO8hn~L=G{WRwd2v?14PeDnc+Zi^w^gn+$6Z2A; z(jx$28dE=*IGModQB)(pkV2vKla#V1LUp7W{{Po}dcQ9E^ zz*MEJG>9gXC;$J`w>|?ZQmO|t+^kC-;$9jh{|93wiYNrq=K%5|#4Wmn0eHdWyv<6b0!*yGd$3lnANl)PIu$)Y6j~`|ov7i;MSn z^1os*37hH!DfA#j4GxEWaGwza`#K!|9T7$5|63i6$f2d7IUaz1K(?tjJ@v1Qru2c? z7I*&#L?a;$22yQ$rhES>(mc+kr8gg;IXX&Hu<@7;;>swd)UF> zIwA{NCtzEtS1K|v9GKsTU#cCBV|593I2k*(FN7Z|4}y12$jihX75Q-`9W5QZP%~v@ z-<7R-;3kDW{5NTxWeT9gkRY5?ENFS9W{E(CdHs4^$5r`LZ%oCn#;h~5#)P0PR@{tX z@b#r(>`Q#5I>g{hYvG^vslHO4e$c)V^=xAN=Sn$;YNAnA$iPqf|F$oXpnN_}V4H@D z6{4w z^O%QI2U~q;?JAav@RiH#8N|$%^dZ@7pX4ddpOo*G2q%fY`|MRql$H%OLb5OX;c1H? z2qJCzNF~MjLOaY8x$Urnj7=+-}TH3e<81RDigQnoR@giB4g$Lr3| z%~dM4nl52KqcGoxEg}`A98V!W&ZhL8?_zEA^l?KPsj9-Xk3`R8phT4^?A+l;G2>W) z=EU{(dm8boyOOAE7CDs-rw804uSWNL~9_U%91 zj%EzTY^WNNQUg&}`Tn=ImQbXaC~RP=i?4O&6M>Q#Xl#;dPa?qE#3)i}!;JOy&n@Nz zij$K&PEc_6u}5>5$ejQ!pOb*Qw-tBw?7C}mFGL_{Wa0 zx$tW2i<5wZ8t>w0N+H}3tGBaGz$R^ z_cN~7)cg;){)hxv+4C;`%h#67IhtEk~mAvq;O3sQe_- z3rN)V6QpO=JmK;T64iMJiSVX6G_lV`qH^#wq)g2(#FfTC@aH4Z1Wox8q(U`MW%+78 z7gz9!!R(FeLr4VE($nWF#dHyrg`0L8Ra&G939=IXneP3Z7$YpmbsyD>XVZv zhxG36CRm3RlS2y=`Vuo{hbbYtlz0mjsM8Mt(U&&HC-3p(Ua1?ObY;(J6yu}29!z82 z(s1@!;cR>)zO)W%Q3m(eXOc^6qrh20-``~G!pY?6dGQ!xHVoFt1Uywy>`lODz}?Q= z{M>|Lc%lu)$CZFDgL>$hJ_!${xqW`4Mvs&DfBZ*lH#wxw#7UsnbmP2?5Z&{2rkDS; zbJi<4pN(jF;?9P(8#c_|-O{^#=AX&q#~*!e#;t+3^Ky?QHp!p4D!I<+UJH(_|9tGr zqhEbl{ycrsZT`bkS=mt$wi~VIS&lWS9QB(?;1-%D?7#I?hkdy{vKqWIVNt=R#Wj-Z zB@CF-V8E`aj;Y`6eR6?$%ew=@90yts%{+SNleDQ{J!x(?s89KthL10s{LSB4Z=K4M zHm^H=pmw_*xflAqG4}UuU(R%PX>r$gw_wgkj~j=56u#x$FP$#dd}QO6ZgCqoO_{f< z^O;#G!qS~%JhRsCedgq+r`FHja<*XRS?APuzP>r~;mgY|PPjbd>^I}qf4lk2Cwsp; z>D@VV`&rMX#e-%Y-#K#526Ly5nZKp({QimD?Cy7N_d4|F+ojoEzCB#B zGi=K*N0;84^w94Qr}b#&xbf%FPgb2?w>{<7uajO}e(9^!XDUAG@ZPfr79ZX?>#Heq zcXxGfJU(i2%B$|bX1;OpX!)IGA374^X5O7Y^Tgwa^J_0YbndhFei?W1T*?!Vv}AJ<8Pc@;qbh8f6=w`lXs85 zHgo;b<0T7!n&thrj<+?FN5-)N9?>%?52-_{f1Rxf@T9+Of6UnK8dLXew>YeD(I#YrprKb+Gy3 z24`~*G<8SZJ9N48sr4=1TQ`5^*OQ75bv`lj{dY!{EIHeB_UXRM*M4;Gi(aQLw%21K7Vaw9a-vSy{R8!vAE-F+==PprXSO!GIb}vl z*|xNV$J-v6b+_f_OPbn;iMey4^4j~u``kO{ z?HoO*IDb$~t)F}D-=e?2eDb9q%$K@v?sg`!?v4+C+}!P4yLShFv36IFxW8r}E|iS> zf8KDZ>7jR*4jI#R{=$awlbdY)Wal%Fe{{oPc7OCvWiz?qm*vGH9&3HH(y~K;=#iO) z{pJi>I&1CDP2V4QYS_`WJ$^JUeSh+MJBP3Tyxzj8^)D9vy>&=b_*L;#&27y;pY)2y zF)TcPx%lSL!^_K;y>Lx`yz)T5(w2@vpY_R~XsA1A_`3HuPk8u~WM{d&w|AZK+akAr zK6T5Lnx@#zubBwe&gxiCm+4j@7(e=50A*4)!fr+>cRXj%bK^m zeCKe*xxbw2PEMQRz4Yp~)830|8-EzQ=J@I3f3H~CDN9Om@1ODg@6YWxxxDSU4%cVi z9sTM3=`(hHUA(<>o9BP7IWPC+zsFDirp_x9Z9y|V zT#Gny=I0%EJ|DL6$J<>GJRVoCQBJc4&+htdykTX{7hBd!-B@^H-P27DpGtT;Zrj@z zu8u6};Esv0Ox-v8{jY!aEj9L7^XoHHM?E=x+{OE0U+-<(;D_OVee=-jE9pIEe=y|w zN6*}Rx_nmbE2Co9=IK_x{>AA~Q=g`vjdJa?FFbqep^{xc#*h2$&$Q1v6`zYZbz*6g zubzvGo4)g#%JVfp+P^NZPSH!5&p+EPYSBRtA2 z_4w4?)BbF*V%CS#n{OO>Y1z;7r#!#0cI!tM*84PL;)~(0UHzzU{Y@`jFCTdF(4-?% z6W&^W-8;lGVA=fN&JA4P%5L3l!V7=)s@Qf-*!%9Ux1V_@ZqiG~YBy=VVYJ8i&QCKh zbb8ixH=!^$e}2XG%Okc|11#g;{A>Q#C3Ef^o71XZ{I%${b9?t6 zo8o+--k1~b|JlFJl))XYgugkg(}tFz?K%#e*-N+VZhue5ikl~*mrQso@`KmHf7;zV zsd)Ie2``uZ+<(pm)4={?`ZxM~#L1!GZadv<`U_BmNxO_o%gRr|ut)PFNYS;ror>ofUGgL_E{@Z|e^G^2iZ96(` z?!aFUI!fdJH23}T{yF!e19ie?w|c+zSL>R7GV)XLO3F^p<8PL(UNt}O;>M&gZ!de~ zWbb`hH~uI)_{4P2>t78x+w{r5f4lPZy!j9R+-S|b&6|sB+U*y8Ajn>a}_WSMm>$5h#Ge$nzKK8wB@qe})kl3sCpy!5W=9XOj{O$NF zLr&M;b!_yyZS_S4{Nb>yPDMyxDlz z(0hC3=$A&{7&Bo>;ed9B>pF%@?LHMBu3eRNX!+w0|8{oI<~BFJ9{juIY`dZ_mp*xD z_Kl>Pa`7Ltdo@_~on^_?_r9#-Ynt40MB(O!XL3u<*Gc^3;2GHKxf?5ETIGIm_vqSA!zWHRt^VT6w>r0YxXPzr^wCMawBE~SyHSvp8n*e)_iwxtkuze>GixW?rmuc=?e5K~ z_^~c^_2HYxZ!W#JbkO0-(!=Y%PAa(E=t$DcT~W7xpSkL{=6|?9JO1I8)k9ld^*;L8 z6Bi1izWn{dktbGW4KDLsj7j{xQPr&*udFv+{&CsK`wcEVTQNgu_SS{{9~*x;b3B|I zKQO2JQd3d?isrE&m&M=P)nUbjrw^U#+564pAJ?~9G1hZtZrN8kZ{OKrYIwQ!(l?D6 z-SfU1w$It5MW{!(=~r`?6m zC4DmP!?bw~PS=~-;Hvxh`0Mo#3^LsM=#8+r{pQCyK70Sse#h^xJe-%3(Cx36+(#2; zr*FUd#G41MW`42g=8V%Lc1NuG;!NmI%SLRih%Q*XYfQgMz6+VHB3c}?q>G_9zbbI- zC~e$t)2tU3Oxt?gU9xsp`=m=}=TCX!<*7fX+orA`*tdDz(3{uS_IvE$k-FESfBZ9l zWS>v!KIM7%5l{PZvbcR_pRUdHhc1-2yxVqLS?a2%UfFal?)H$YKiwH}_ouDjoPO(r z^-FuawmI|c!9H(fJ`=fNa%{R~<#VA&3lII$=ghWU-zT){@KO3_A8}Xa?M`hy=kM=& zzj5ym-TwVk5Zj|?g4cXi3THS*>iw_CL7U_ve9=buiRfA5i}H}6|``K2L4&OH5l>jd{J(#Ege8-L?? zkK11y&U|&$GlTYz|MmFTA@@FgGIVBT$inxohm8-tbD-|mpM~yS^KkRcUH8>EU!#6e zy|;UvxUzcbO?h|7k#9R}92XaPx7ErsbHetGe{24(^1mKCVm|f7s6k=tK5kX~y6^KL z`6sFtAGwjZ|LZAlrY)UtZ{6DskKI2wRcLA&Q}^1@4Rv2`UH<&wE{5fQ7*@R6>FUkc zHR9eKP48voZT+)ryU;Gna(B0GdVX!v!cFOiG`RcsW zW!Wk9=+7zz1w?YPRtr;yI=pWdl{ii^7Y4moig{w5n)2d`oDf>(hs_^PQ3Ti#jBHI z_%k&U4(N~H-8NzHvnwaOP_?A>GoLNVxv(zwSy$Mm#eXfRytA`Y)x15IH#gqC=a*YG zcjmM{Jbv5UKOXu1)v6^QZ*6g|{liagTy(QxkI=TZ?L)3PhHeRWyxz8fywn7lE;)$8$fvFn_V7bWJ7`0}s&?_AEAyY=AKL5Cez<)lsH zyR@?W^~&xRH(%Y=^7Y4-HHumJL!P^C?JMbj%-}CxyuCNG{W@o>MQiVW*>73$l?K1= zTVoybNbBK`I$WP_+H`L~$c>yzwDz8m)Xs)yfhySD0H zXv5UhR~ww)CZ=XycrIb%l{-VPebcPLtma$V%pVyx7^y>?qY-OJA}`R>A>UHAKb z`0&;*172F2$4|%d$Ao!4-S|Id=1m+Zm>h> z8Oy;AvG-g1V2FM+?Sl`5tLEy8*Xy}UUNy+U7;4Fs|8LNuGBtuy=_I{D1%_$4LO(o` z$B_Q&wz1S`1w0x)95d&y@D+Ah{*2Bpn}a2`9BTQC7bdRZrmpAq+O2A*-gTq(wX(5f z7Xtt8AIQEqS*^S^Dk;RtLEsl}UEu8A@{rBGr=a)VDx- zTtDm~>B&?KVY&o?fQc3ZfoDft@tU@ubc{>^^wOD2S5zF19KgSbQ9r8sxA`rlRe63&3rO z;-;d@_SJB`te;gMuS*ey-^7l%36{X|U3-;nmh0zO*bvVU7U$cwn|d37z)L(b!>!;+ zNmTh{SS2f8pc&a76TFW$bFc-kTUzVWmJXOz|sdW2xj zdTTiFu->=@m!hqFB(%%J((*xPj7Wz{qwA33+{7rq5Y=fgdvPeEvxyfEYJLl~-Q5DA z9&{0A%HpGH^1S)`5>vcnS8SZ57%{E$#@5wHP%@f1HL^?m(jLuaL15ytLb*|0)@La$>$AFHF`nj#Y$P9~x~$JqUDjvyE-T#*?gZAVw3S@ySQT;& z68H}#Ffn29pHZhtTzJE;9EnXE>A+bVBIeJUc9Tq|XC7tBfuL@{De@tIu3@w7q7?^uuP3+PG>6w7%m| z{DKga#)QP_1%gch{VO92=wAU}-8h1P9%+vz`Bwy!$(YxDg)+6gLe3q&Vl$ZkIdy7z zg*vsoqMusQ?cmOOt$J&kTGko2NM2XVuIiNDE3tReH)DNDF9ZhFSRS|#4}+xoN-sG1 z)aZIOhncv;!e#cXa_A?M7mn=@JH3){LOkrG8-Aut@aj}Z$u+O?3%VuHtI`_8_5_RE zLV>;n`XUM@%&_nlpY;+5e${FTgxrNwFM(bq&2CCrS}lPfFv}7M;^|AES1I$Do?2(znwLPY8l7%sbo@}V<*WQcRF{nw=)>U$ zo+LretKcPTMF{bU^PRj+yS z39g)~g_DFkTmm3nomX>*3&G{GbNaaLA*#}S0L@pLrNEN3!H9t5A<#x(iQ12y*NYR9 z#&u06BBQzDcKC8yiQ1}-bp%qI5@rH0DPb0lJW8x1;P)+Cnk58JgG*BQ<54AcLoUPP zQ6&At+jmhNJX+jVdVmnO#YE;cY`_S4rud3G(%L~Ip*8ERA#Pi5+#2!= zrS!#NMSdZoQU1{`sjn>jtHW-Y_hWI1#?+gB5wj12=Lg?vb(0R%zl3$UbG>JinPF3CaxkHCT$ zLsgBTBwphSBOp22m8tMz-~u6k0tuBfB;Ap?iHRyJmpEAHSE~%T(yr-c30s-wA#6Ep zL~rmA8waoYa0?>tO*vI%tq25_v+f(X1}%9Zl$N4mX8oGMmCP zh$*NS$5-pw7RTkFpASoXU(L)nM2b%Z7}wHQDQoGgy7gKv%?WwE_HU?b>8sSWbiydD z9ej1VR=qW?rPmp^VCiRTlgGHvC)gme61}QkiAE2egkwq>%|9oNE#&o9go;|Ar}P}( zkH}DpC58v(r&8r#av~j|dU7DVLDkz``~+J15nzqSf-M~8^0NDM5(~-t zcwW{Alh6iMKPHf%40!=np(`{UL`yM6VAT)5)7x`3F-?kcx+q#X@$+EuN zZuhHA_om+t*u!FN;TPizS1GzfsA!@RfZL5V)|8y>1(C?MC9hwNq#bot;`faJTe3Km zA^@Z6HN)*(JBe_qoq+9ubE;`o;R7qPa&lQWQH^`Mkn6f;XIEg#S=~l8l-l;FLOrV> z7O~M&mQIJYRn?`_Whz>+BmsDUpFu*)Fy~Z2$_p4ucFiwf6jac2)^*cir3qdrVJcFH zs+Mz6)r3C7Es*XtFaHJlFn1j3kfuurKTqdu+Qt_`;GuZhh~!3b`312^NNUqk;8DCr zo~$mx;MGDVY`O)3yX*`SLJt@hZ34US+NA@7X9k!E`&h-Ys3lb^yii>X?|04~9FR4GD6BH5~JlRh|IN$!Idn$;Zv$K2%eJFui*dlD; zwNQN6wDMm7@g^{>@I;l3)IX0(o#19ZkII|qW+3>aov0HOEj_3$#T2lQE=vI@xcfF%dC-!$o>qyqBClL+Gn0*~1$0)l7k6ak_48uF%v z-;*4vI&=m8#m@(kJgx@%t+8Vy{;k`^Eo zE`#ueI}@VajWa>+rW9jfNkZ^G%PJXk<0k8T6~M+6DUmU=c|PqxavVVKu?F;1{>@L^x3*uz#B^hcCqPU1I163%Dcv zS;@sA$6-(^k|-f?ir~+3D)0`oK$ILGqWH6)Bm1+T(+~Ea%jC~wlzuGbRA7@&OZQXh z(=57qB;BUpP3&+f0?Ls!3bA(?{28Rh{26*M7eQs?PIPCqZRMYrtwyu7Dyg7`LRE#2 z)OF`kC)k-1{z(ZbAFm*|00`V>btJX$5y~RzBf3DmkmiIOme#3@q>oSs)JLQNrELda zcC1xzO^c*;#;xIcXW^qMb`{q*6GO6PQQ(n4`XWS zdHvbd>B53l&fddUo1Q;a1P?pDz0({lITzdoX2`u6=i7!S>iw0bv)pU9oY~pglW%t# zE$3!?&~-YEj>lS?tt-zc`(KF%rfuP~WWeOJ6h2E&9EP%Ft8_ku!e^`fLe$mtuAyWi zza)eLu@50k(h#`Qm|ricp!@ZCXGnTH<&jM3M${m61JDq6}yHUrQs*Ur0ys@{`XDi$k~Dl9`4maD%WZ zhv2iJhn+j`uoEoDVDi?o{8>G~_VzE_*^S4&>-;(e{XFbLM~K_O`0dpQZ3{ouA7 zx9P|HE&uP=J>BlcC$om`pR8kZ6JbO^;5J*o0l|BK8sU}$>E_*{tWCtL))6X_bRf_= zw1!|+K?o5*bsTlQiNg=4lj}OiA>%9}4hTMNa2${}T{=zeIAl~t_8x@?m{lXHA&n^F zObmgOwl)L7+ca@PGpj{6QHxdvF*y|$mbFlca3!k;_sXQ|x}qUc3G z@NN&;iz(syzjt9`!g1~zkrLhtNH^-007>JDqC(NEu@$#dU2Zqz6^4N2)kP_e2qL2t zI+Ibsmq8t^izguN;`54pl}n&}SlkxL%Vqfl^3zEtXR5 z4diu!q6!G_Zc_GC%WqA3gVf83{z|foM{NhE49;Z{)$7ee(`pki?lUvBZQ)wiSAo}J zT=XtzY7hCq^oO&`a%DBLT;Wloo$U-%l8jFv-b&B+=Mxjpx8vz&VbJqeO0n0Qak}18 zqt|Df^L1~<8HD@vzJt85(pd4FW@EnV^EDCg!TQ0`VqlKpj zjPxqpD0|)WSDqSfWZ$fMy#*J!cO|sJHUvkn7a_mFvZ6wQowbs*5oN(zDY1 zCm84#BP)mxkv$i5Z1%Cb+wBd<`|WDjQ)%560dq7Hg$$h^aZs-k_Z`!hVt?(`9-4D6 z%|0|2i2k9uKo6Fp4joc**HXg#3BV+`-tkfRWr-BK*SVQ(k_J~a!`Mt7iE=x%gjnuN z@-Sf%8}of_Fa?vwGyM9UT!rXS-#|KccPIsc+PvB)05ja76!7Fbl(|0IZf1Onv8cds$;UU3QvZOdP zILa^h|1lRc-uD+rf&ZmV=x{8a=bo6+Z0)*@o>y(OuKP23t?K(LRhixVxa262xE!TY zIKmAo+&&)IpthKwNZFzy`5MuwlCMcKJL1>4yGy~&uQA`s8zzNC`3a$Oi37|qPh(9n zlQ3W@}yWo)rGHfy~o`iVL160om2@mQ#CnU7?oDjT^ z`ogS$x&zEPyr!61^bmX06bBt7#z6=5J~M9Sa9S+0k2Jgfviat7q@aku=0pmL4oVsv z&l(iTO$9;GSr!zr#eduPX+g~6hW&ARJ~y*rQvJDLP3tVQYhHSXB(MI4HYRd};iGly z@f$<7nWMZTsZ`0r0gH9N0Ni80?icU}N4WQ*(((2{iO+iP7w79ntN?7+LBkg7~bBwfN*4y}PMHwC)9;`Qt8+NiWR4M^ozp9N)1 zXVv1gUW?P1AyKplf!pJ;xDtqmq(6w?vj+Ox7U=Iy>}+*7)s0GtN3;%ANg4-c6!N1t34ICkJ~1 z;So)+ClE%{Uh*>h3(r2O2=fG(6TOl<=r*((7eGgORt>ky;ya~S9NVtg2x5B4JdrkN zTNMH@s$w+U7RU443@E(M$x==GMkV$P%-a~G3vn0Jhpvm?meu&a4K+SAp_EhM4k$7b zN)C^u0(Q;Ge*~w@cqth?gRCHgk9_+G%u;THXqMkjHA_OTVOulYUi{x~4}6`sz>2l< z3oDAZ4k2)*Nc8rkBY2>)qPI~M%3uv1TCCkS5!~?zjcoHyyoKZ2c5;PyW*X8 zTMK@u-R}0{--k`@x^X&gjP2u|4zu+=_NPj#-D@=#7em6sH%@oF?n=Z!_%by_@)IL8g+nZVgU!Ou zzrQZ|@;d%%HKf#@&J`#h<@=9#8cU$QHnu8IpHC|b|xlf zmN3LcX*@Sa5&%RVHx@_}n0+sRZUNiZ;i7;hf7r%$u=GGa_da0?2A_*g10-|Xw`!q$ zQjLEHhbqKVJ=qI2W>rQk%-9Y|<;*&(L_R`|4IKLwXntsY1(-}Zr! zX1?1V_PlP~D(Q-D>74@4iiKV2T^VC*0XPkV04x@hKKpH`$_Sr@z_?^8(yhOpwOfB% z?v`$@%Bip?2+IZmkiN*TsxpIsa+x^1XjnItzEg^Tv30|?6|cMG!Si=LnP;Ras-=7f z8ix}!`FG^dW|=G~$nbt)si7N}_@z^1Bw`B=jOtchI@NTduDOU>l2`hfFQTfPIsC+V zF_{&;=d4L)U8DFsl!~;Ng+OgG3leIRS&+~onFV3wWEKROlUeZ6dDg6f+y*gg0D)50 zfSUn@ciUuEQ!;T{G7I8#$*gu(<7=bFXU>|m1rsAAvmn4GnI+?B$*i^@aYHhzGXk@e z+aQ`{hiaCDUcL(fP38e3o!L3Z70uI)v{xqAw!W}kRguwk-&p`>TIBTFw>NzMIEyA;0+x1$^dYY}E zKg}kvu-8V55V+I+9F&0Hw`Tf#Du^3LrN3#d{*x z7>L`!4-}9Da{{$C^kxVooeo`!d~86VI<7l5AW&X_j!5@tSW(pif7!fr-E9u!#ePYJ zObSaVk4c}%7#`&L6Cc+7c^#iUY&-Nu?%d*SrP#3nn-FwyQm|4BZ*>y2AELK{U@LD0 zfdp?=R$=E7S0Fp^(^(z(>D7qjbXJj^Mn$49oq`HE2Ye&RaAva_&g^QWG@DgQv#69% zcQ-4DB_7(jDp9Hsez#bG012Oz!Nw1gf(@C9s09d2-aQ&_jF~ek0^$$bC;|fcS*}Vb z4a1!EgNSIg@dgAuN{%;VR4x;XueXjje#kD~m{MU4@x})LXI*<^)n)eo;ib{^BSY-XSarrS^&wqCIRE2-^s+Xgpa1c!EA}6^GegMI6QjNZtI$DS zd&fAVJg@3a8InG0nP5l2IpR=-$hX?X5)k_KHPXzOawI`Ql&5UQat;K>AJU6A$^Hq@8$(=v1$tC(YQtejWj-ub*=^GL^ND z*$m#cj$S-xj+A8%LWRwpbJ|@ebvDlbW%%41tH&Nc*ex1ks!yvM2S0_6gH!#w*Y(0D z!5x1lxZY?Fdhu+*p6F(;%7wAedgQSn?T^S_3Z0pKoFnOwg&?_p3WdF!` zVwZXSBjc%UK%rM37G^QR0ucfZ6BdZ$D)5BKgH5QA+l?M7J|*`m2nkx zzj0kLp@JT@vrY)TOM87W|MS8u4#ui({7tG_;0c;in>lR>xk-iGCYzWrHawXJw1#i-&38=a09&zUn$ zZ?ND`^1bMh6wMSWvZ9?re-V&w)~~L9G3)B;7mb5)QpM8NQOEEKEgiVvyz|OUR?%t3 zx!`s>@0yr+qTL^;;nWLA&~DJvc##vr4&@? zyTM8p&s6_w$!78v--74~@tS;;b1f()`F{hDo4_OwHhM@l|8GG%<2Krbz=IjI3-L#6 zvV36?u(OjuMQ$BZ#yNd?`c-}Zr|`^e$E zj8ZN%lzoy*9hgk=rK~3T(ke~zrK~3T65S+UQkW#sS|I!(J8OZ^N1#%$0r2a9_bVTdQDeHhP>o$hJrOQy1j# zvbUAA8;fFRvBIg%umofPj*P1?%qA!h-f>K7_yD&iCm zfxKEU@sbV%PutAz5J<>-7gX3d?;V*U?hemVlMea^v88tKC()8dY~>J*ittXxH<*X` z;NwJCHMz;7S-738YleHqhb}yhEw;7BOIE8K~sSfeqC)-hg zl>CVj6+J>UEUvhn-mnyuxs@#fBKX5kG}jHWJi$-2bqGFYIH7t!pxpt5kvKM$K<*ce zmLd>{*l#<4A^5Q6LN;3Z-089vdEBFzK+%rhOF&X^C0Sv)=cF(qHz3;6uqIZ1pBG zYyyrl!UL-iI>#qQ+Ec0!d=Dk6dz>28J+6=H)_Xg6gqJj8t<=Zj>#zDZk=Ke1{hP>Z z#Rct6A0Vnie52`+LZ+m65)Otk5O-J!A_lUInCv_mHn<)#6pX7O!H4MA0GyW_b@8 z;z#-(vO<4$?;%?#@r_!CswB034_OA2-$RDbk-vwmkhk{GJSJZ82^oI2M77fWycCUL z8w@g)B4&exbGn%A^Rm9_G27<_O=Mc>!X{4Gt#l#uEU*JYjZy)7A7!EY1?s}`3wqCY ztJ+ato|GFBB=H3xiA||S#~QtAu*ENrUl~R%<|{yVC3-V+cTbAD{KboUzV4y-d^*+k zM9}SOukoUx@6*})emd&An^z|bA^oMa%9Rz>WK<>wA4e8NO5!)$YUj;~Te4>CjdAt_ zTtGm|L!nQkU|=Zw~>w}vND)*H9{NFC1Z9}!a{f25yb<7QTw8cDuFOO5;y z7;39~A_Zw`^r;c?8`?5B%duDW%Q47;%@ZjCFvAlm0)CWFq^NXknHsUs z;+Fua{)v?Qm$GW{OL{GSN$xXEix8Oki4>ugQ9hBP(j_@HVxh$^15*7HDfusF)#8`+ zTKqC*NE9tXV1_4B1pFwUNYU%h{6vb4{{BR(KP9Q{6DbIo9JoX1sGmqtiCUW#!NjY6 zA|)M<%1@;D6zL~Y;AwxtTPgX!04!PU&_Q6Fs-KE?=%Qy*qCGm2vS54nB;DXe%fmL3 zQ>luVIPU_jC{IVAROm~bknp@FXCx5Dr*p_JaYFE&nQ}%#6EjvhBLR939~7jGRRR1U zA!$@NMNQJgl+=clPeuMUZwG%2GHHZl9jAbnCP~LE){G79F^e_hf^^Jc&A0)X3)QP* z5Oz2{q*O^T1f_k(NQphk{j-9<8EIOvejFNULw!s;rvk>0L+=u&rg$D9cOSMHUt~vS zmO1Lo0tt`nW)?_jJ+naYozxQ~0_r565yq6~BXcVB9Fi^-h|kaxC57bucYQOfd`p(U zGEaI-_KXl;GU`gkXcB2^^l!^^9(YT z;yeQ+(7|Y~sw&T<-&{(|2Ezoz<)TG~3T&v!iwm{bz zx27%7?+BzE6mbwOV{%RxQ3yuf_LahD6aK1ZLR+h4_(ffoksI^<5n0Pf?ps9Ei*#dpHv;|7s`TQPfp+(&J{GPfz4W)NJ zSX>t6-XM!hgo?J17l6t0sLGcVaw_N^!|_>x_-M9$1EdXF zc^3hAHm%sOs|x>I{GN>dIRfgQrBDjmjWS5-z}+-$y3*O&6V

    ni(9$2v#<4X;(PIjDz+K2 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 BE>r*j literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.InvalidMessageError.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.InvalidMessageError.beam new file mode 100644 index 0000000000000000000000000000000000000000..6a9535d418b5a0c3e761bda55092452f321483a7 GIT binary patch literal 3572 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 R3N-MZH2|DV7`#zL{68W^u@L|O literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.Message.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.Message.beam new file mode 100644 index 0000000000000000000000000000000000000000..4a6b0c5875028b898fe115bb49daf22bf2f56747 GIT binary patch literal 4988 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.Reply.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.Reply.beam new file mode 100644 index 0000000000000000000000000000000000000000..6414cfca151f063749eb9de30e03776e90da6ddb GIT binary patch literal 3296 zcmai030MGjT%wiIDrC3Fw{71HZD~m1j76k3rR!!dYSo*W)}1z+)Fn{?iqUAPc|3qQfDM2xfEj>202N0XzyKZYUps>t<{3?AxnNBPaG+@Y zGqt7$rNa(@qEmXQH8rdOC>s>rEJ}}2K6v%-9Vr@s6M$*ZRtv@PC<$a>vY$lxTA!;1 zPdY_1Gg!(Hxmd3z4Kxf@8|ZQrQOgW;64#>AK?E!aQcUWJK_o1-;w&{TmJK38(;@Of z*bF6(VnQIJ1djTdd^S^<8LYm1{$l8xJxqzZ=4!x`*)dD)x_ZciYmzy!@}KxCssIho zrOa7;t->%^3NUfSs6TmY!M zas&8$ZxJBTfPLS)!rVp?T$JRgWZD&dDoV!k<0OP%5EmF_;{1ubW~+ z1M-%ch>igHM+MO)k7H8=Tx-flloE4;2Zjp?t=NDG`}3GisMX<8gdhw<|5Q8`>O|UpMbc!n{I@lp~A=a$k#}lAE}5<-y+L{Fr2~ zDYKsW((g5ezPWS%^}p7h4XfWZrnNdNo;Uh_Q=>P$E3R512(y2dp$fRrCSn^k{4?&n z^dh)Toz&8BPjvT(nuzto8_gq%*T@Z{5%8l38~2(B887s9-@^;>hTz{T)@U zD@IxE3@yGQ2nx@oGyW3bS%z9wy|770zjLUrdly|X;}LslmG_9`h)A2t)>Yqa%l4gI znjxC#8`*N(Z)-uik0zSN0BCv%DnscUJzW zl#G}w!=fu#PfM3H`MLy2N;o4*;a?%=w&d0mybza)`yLNu5lGdg$r^UxqL3n8Kd?d|o9JwF^*Om!$+ zs)3*^gfT!kMVaKyT@w&Z}fy7j>OgA+G>*c0$5bA18l z_xaXDCvrFJP{^TwsOCPGwJwx3yXL*ra+nv6r_sk44(IT-dy~)896NgcIcfDp55>aW z^Q%Yi>3)8DN^bAsm+Ve6J0EFgWk*{3v7DV8^}qj~C8}w9ag%Y*>-^Ivr(KdaXn)#< zd0&>-ysj_yND0Z0t>D(~N;MKIKW{<{gc(xiCI|=D3!#bwjt;zMd2^?E1xA_l=cVEr)9= zE_jviUFob@(RqGJyVVw%D%?wzxWNDFkqzbX&SCuV&w~~Q&z#+LbbQxG%dN+D=0VVO zTuOi>@Ei3X(0(v(E=oLyf&ZXLJ?Y0IX@s{sESjc0rzlXZKr|nBd2|->h%1gtiQs zBU$ka&&O^`W=6N>=Ltt|p=~G5c7FPBr^~6irm*u?*RgjKW84BCtoel7y)4hUd+4cs zuP-Mfb;eYENxSC0Ut-J$>mGJxY8YM?ej{ph7|7B*<1`hx>l?Ws%Q_&Y_EacUAfPYR z2{VJJ`UM*-`+H6*tAmmVB>zwp`-Er&nhrR0(8PkClRBp`Q}(k!tJp`O87!n~oIp%v z+5)8Y&t)Apn2SkVLut@sprrJl1WkhSYioVvKNB6Suqq7$wSO=(1LgLA+n{wMBk~AI5D`ICv=sybTA@WGJmO;u@n zAqY+=NCYWH8HU28ItHV)GE$?()mX6{(^8lWWiWXaX3&xpLn9jb`*{i-A!Bfopi?xc zj3Q|f5TMWxb+m!t_Kw(BKUso!*@;)pQ-{uHlv6v6$Xz@A-EGc3$ zFl)se0g!HVgWxPno{a#`V}1R~gNp+>ZH{6q-uG7a-@sKS-3IYG9x!PEdJb?8t7pZB z;9=IB$Ah`1TUhY{W&b~?T)s(90HlH-8$Qexns_1L9fE9xoH&MxXFq0xM$4}A0n7kw z0Brw{h9w4*&PpIR2jBz10QNI9SRlI@uyQK^))z~gMc@qUKM{Z(tb9(k2F$#rfe{4{ zJg$Z>x@oh7Rn*rZ_EJxTewt-gXj1tI~oLXjNwe# ziAJJR%-aVGxOsU`#Q`TO1{UuB%7fTm61(Gka)Kl%@t+;8y}DD|()9PlXK&7S_nw=Y z@Z`8&G1>h0sY?HmF~6p&0?W`P9~J~_9m_Uz1;xkC-zh3@oBTxeP4d|~u{?Y;uk+BB z6)uka@uA)usgqu972io$x3(_+(O_JgCA`(5U185xZhTTc^=;|p-OI%xi}-s=1ya$o zuJ|;*>OZ#q6+bllC+|K~>*W}`x36xS|4YpS`JvfEH>hlTUX#aO9X#9<%HZR;O4C2`sUQO>OsSuNp|azTtYY z%O^XCSuUKAvc8e2Sv8?04a@cJ-IK?>%r|+R?xx&*6Cu zT|cMP?1y)Sq@f2LR__-ECpaLkiIYcaw7G?Z3`o7u6p$>G>k&r2dd| z_hFB^R{QRARxchsEFOHmDs$*!MRCNV;IlAkt8l69yH*#UINH4CPU~-%y7v5Q%;~eQ zBkPY2W&O~8{K#iJc60n)XJKhhb%~8B&St}z!}*bmD?#UW^=Cd#+Vv0DW%)a6 z>a$`d=2s>;AvTuT_p>hKZR&A6nCvLU3hpju2F7-IDJoFB;^m@LuCdj*>Z#)u(Z*Qp z;nu7;f$)gmwNF2RxV?*g?) zI=*0>S-nd%m`E}-K zmEu~RUNp`bGv9;{Zw|iS`#Q%wP3h*Cu5|A27a9HgextmDUtOLX%X6D|xbV@aebkpl zkE6CFj~cT{`HMYc)qOSEVa!Z3V@+9;7P3}Ts4Q({DM=gB zf=ZG$S<@zM5*3C2eP%}W`@P@y_rCxC=daJ1=RW7&v)pseJ@?+{-W*)rbp-@sn{Di^ zU98z&#sUJ+hPk=9&5(jUl@d!~YP*He$uvr=wg){pg3Q+TWD;pC2A#=H3J9RkLg)bj z$B1k;lM)ogCbJm9^hgGUNbJr?CPfiNQ=d z3lETik#tfNl^n=oGoympcp8NoNM=%rw9v6oGCP1*$(7U`97Ya~2%s}5p%hwR7?BFN z9}5WJ(FFuRn0bY%QK8zlbQ+BSIFg58E==;)fG{$VL}u3T8?B?T*lr;dCj3jJvdG8y zcrSNnHwKZ(BD;~9Ogi(yd~a(RsAlA#`RCg+wCL2uxr%0^A)4`*#lmg6XsnN+=}77c%b$ z&@+H`3nqfbkOYr{6&1u_(%JN2I+X=U&lAksLEDQ>p|S{6(B=8=+tZ>V2_Y03X^asC zn}@}iw@)ygL5&0&N5|&tS!5OqMBIZAGCMd7*pwbYA+wJ0 z%ofaIhJcXeqQ=PFa1Q{n7r-F0SP+Ir2L&e34wxg7&L-pN5%cO;2L}VTV=Qto6DS%% zjtdAP{)r(MB7+gdAc5#t3=ATYh)fUzL=tF)j|?HYfl6xJJfpQ_CXGyGP{5D^oq;6z zhO}meMn#foYObdu6QYj>>K%gQqk_E}lyMXI-4|fMQ z5D$PQOeI5#ie!MG1PTRk4aBzzB+uo+uOZS%0e{$A@eRfsHLRLHBZvh&N{R|5yTN8= zfngp^2EzrC=NXvIBnFe=&}EZj+5DISZs8g~ib)A%0n0~{o3}=hnQ{DaLV)uF0gi=c zASH^-VgtLg!?KA{>@YCc*>OoBOkyZ(4g!pKTT@L-Yo$q|zOJ0XCO z22sQvo;!ZvD(F95TV~_zWP>#V-!Ha_I*!lL1`EXa!`VTSsTRtSiZ^jS(-}*L#5d=?U z-24Oj^=}zQ$AH@bU9JDN3UpceHx(Sad=k9Y12_zS_nX0BQli0Ng_bgS2{qu4qy9t@ zv{dWACV#%NK#BiQ3-nmVr{((wbOp>QI{NdTk<_Bls1zERq%}Xu1M@&~zp?)s4RGDE ze{l0W54@IufB-xv2na|;fg%O~{8tZP7{Dq7h9e*-u>ym@nIQ{gAPK#lHap#;g2+s- zl&IXDCHChG5qLri5{n=ZB*3p5!BGG_0tt>7@L&)G!EX`)i3OGGaRP{JVGOz-ag2iz zlo%%KuT(& zu?8*R2Z@p)7$7-rA{abDSqWClPM;u&tdzk?DhmfT#-! zhf5Mfq7=FBkc;yrf+InR;OM4LP=-mBMF@ciNP>V;!V(+1=udpK+9oU z5Rfb=%dJK)$BN-_1gsFSAHk7<5#YOOQy;mY%4qXhiSPJtZAe8`y1BpZUW`J8}fL1^Pgai&qUM>t8 zA|M6M&>AEH!f_x8puZ02tD+blPf!vfU?qV!2q?S~0i_FgU>O)t;Ib5gjVdI9e*iRC z!PP*i1+9dDR&afck>o&sD2v|sU;es(F zx1`2_q(KW~&|>8Yv^o~2bW#b6uSc&^lBq$N0KcG21tH85b#0UxJ_)Od)Xw@ktY&qbxZ~-I^Nbs;!bq%y8Y<~^D7Mj1c(BeQ# zfEJd(3fcrgePIF`lyvw=0s_LL1%NZ~urml1IIIj{r%zA<#*r1lK@t!K!U`ZDT@EA% znAm{!dM0RHC39~j0$NvwfJ2+%(fSBT-$n^%3o2|)0pP?KZeUmlNfK-g2>NyeB~JpD zWMeA;EG934fh13ZSVduh3+%8QXelr`h>}9Ifn71$z}pTZgG1SaL1Ku23;paQQXgCP-6YhY5Kh8>9mEf>K< zGBySnB^yr+@HUAcq)$NU+n&biSIXdp3_LlI0t0UX*q8#q0STUFl4xUY6s$&J(MAZ! z2p;pESON*K#7imzo;Z*nEHyxTIQ&-=JdqL%P%tK-T#&$MOBe{qWB~@<0-mNAf&ds= zc+`57y&dQbzuL@3Nx)VE*bC)qqlEcwJ-is+jiApDRbVxwjV%UiV~bPbK#HInva8YN zz#=PzFz85lD1e?wVnIwUAfWYtW6d-00vt#Qm|2dSQIPyF3KJH!ozEy7NEy`2!)gH6 zT5up0;94(0Z29*nDMVX=5pM;LcpPdY@Cfj|6#=yo7RG^8c^f1mr3wKo2iK=EWlm24u<>=#2=-i+~E|k%4&? z9$u~DzpVfl0=0eQNhY6iUEpfhYD|z2n3_t|Bu(mp0L*f5zv-DI1)%GdVF-izoK>d z=)gbdV9*-RM-%^`g8*8Gj}H2SCIYlJA05nr3_zenfIuP5$0r#C2>DNZh9DsF@Ax$2 z^*QWMpF;=;u%ETDw z5r8R8OaKF?XE4YWLGB9&!zu!>pmLzqpy5`~Fmg4Th7`ktn1-hZcq(RsJYWp;S^+N= zl)=Qn1_%=v0k|lEAqOKJYXH&|AOS%P$a!GiJ`JOjz$6k2s?5M7f?;6b^$SuNPPLLk zyh)m7f~JBFQIU8Io?DG_g=b4T2Qmj5#Q}{NVmQ7wf`FMNU}gafp<;q&13ETr2mwjZ zCm{lA8@*JgGB<9J3VY|L2pGsTS3~fK(i1K6N3}5M{Sb?GZgEup&y6^LtjWT z1B2l}R)AgtMO+@dzl6PsIR4 z@w_D?s8a);gE8AUkS)+75$KUnh~5suYC9ZOfheLaDp(&yQiA)(T{gG@J{1hGaIlycP2q@76odk@U2b_TecEu^#W0jPEeX(%Nz^hKkaXpye z5Kxi^XoN~GMCa)jqw~D=;eLyQsWQ(NB_T#2@PbDlUdI=rlR+nwd7b2EloSM%%h1~3(zc|qz*M?gE_%nJsOB)m0%oO#6i=ZU$((u>i%c*2N0VHpT$7dK(g3(J~s zkAN~j(67<}0=<#ALiBDRayL&ToMb_6-h+U4!%6nH$Td8Xne!|_D+IKs7`>M#G8hTg zfd)vV1OY_YUT%7xm%4ABZlVDvH4v#P)c+;T*62!s3 z^pk{j1_R>IYV-~`V!?JJ0ReG1&^i#}X`u08UK-{=E?}Ejh%N-9rjVD6Nmvc^5wJ-R zLc%*UXgzTB{0fb~=L>TdT|U1=<1YQfLPhs*AXm_Geyw(d&klr-J}OuVLm)_^0$WxNv=PWr=Rn@P4eK!u{EcrKJ-acCi(;dIze!J z0LRlwg5wbUJOw^43?iV@T#76K1at=e?tp=`5KsjV2e?$i+g zT>~;(4H7Kg3Gm`w37*_QYU8D~%|alQG|<%`Y;BZryd^QbqxAh74>l&;m|KZQK-Jtq z1Mf0xfL1RMP%W4@fUInw!a2~9^D;xIZRk2w4uD($c>wYO6aYAYu0ufQP0$yBLKnF6 z7l^z%Eb1VCa^^sO@ZMp5K0Jt&5CC%O09*hqIFLWj-CO=;`_Ohuv~2j9;G-=4QGz66FQ5O*0Y)Bz<2 z^!JJhx)D$|B60Ar26H|Z%(((cf)a>U@CgOd27SK9jex5y=&K0mDhN~VhW{Eo-wN?x z8hL!1zol|NBCLgJubLBRQT^Q;c=ywJvL!GVH-i%9d81-#1k`AQO~Tt8o#&#SyMUr7d) z&hwRdyvn=31xojCo7Zg~qptuhb?R{RNJql*cP6TwH zn`Mszu3@|^`(QrHBA`wJ>KJ#o1J+CP9Jlc}KKPSUkIpYAyEqU9&R!3}haljPhp6-N)jvBStX{xOXy4u$dzqp)yc;7kjgli^~*$TVCWJqibo&2ZpUm>dbt256x; zB98Y3AIJY>4i2SoY&wdFBT+&^$l!>Ljf2l>0B<6w00QVVGTat?lLjY)BpijymB~lx zphCbAGfNxi0CXnD5+fN@vL@Vy1dgJpbOwA<#O1=}3Do<;3B{)4R#55Sqyny6fdhxu zTzw;nakwBd=y4pZE@(vL9`NBPY#e-GhFYPkw^|zy{^_pJ#(C0lA(U7k0kEd9SW!SY z+-H~v85~WLnWiYfkPL5%$_*6W`4-n|+}`sdlYf>4EVm+z&1SGnb#(a7)&^Z( zp~+*wBl!Dwg^mspgg5X5+|Jb4*m#8|4j_M{R`{b(aBo~3tZ|`~Xb`f%9fABqBL10N zATBZr1SB}!jbhS3{DK2L__P}bpLuHHLg~Ph6dL#R6!%Y727bob$HGUtAbLSe^IZU+ z906wYvCanJ1H8p#5rcrAgW_=D@_{z@98U*C&tK8~-`W7~*Z9s0^Ye&^tD0zNP09G z7x6W*!0ONCue81?|AJ4!#--paCobAP7JLfF!>x1)kCX5CE0{kmZ-< z!E-49xcxE!%K^Y`VEhUILI7Ys$^el3vI=;@ZPWm)1OVgJ0cZe#@tOeOW8Qfkv_Tne zqX$5rUp4?wLjZ7lSm)IM;P&PKEcj&@Z^|#jJgxX;0(e>jfN5dfZ24se@N@(K^Kk|M z%Yw^m0jvW6>j3kV128YwjgQ{|p6-0S2Y3RTa@%-=r_W#IO`r_(g!Syo+?Nyp zFdqp3>HP9;@QnGZya$wFK5%$i0JqHo0Jp8=m%&5e z41m1=V0<}%T>xMn#{tCg%W!|-GTa94za;=Tj^Ox&%W(hTn9$*u6~S{A0GN*qfW-h7 z0DyIX%P{Ri0B}9bQ_vxb2J1Ni00p2F0L=3#0QgT(C@?q)JYk(+nr;9v9fFT90%e%z zO#pB`l8-;ae{Y6y0Os3s`0rQ16Q-NT9|C2V{vrTaUjaU!Y*2*dodX~YU>?68E&`|m zAOc`sZV4#Ed>#XU0L=4GgUbM5KZye1@>xe=gT5nS9`K(efU~J^#EFIp#)$pB$|DN> z7t8{H`G;$QL_vUG_}A4wB9cq`SJwRp49tGvU$=IMh<``GY|+0LitxoEqF^{sRXQ~i z{9+Q0y}939|JH!DR#JDEItmXv#ni1an7{8Gfz<>pM)dbJB_eDOF)q0&Tl2O$+0m)@O73TU|UiQ65PTIL&p41_gnwXu&}e2 za)lyd7Q%P`OQ67H?^KTp1(Mx0x}@UIJZ04dC64+;VpZZ!&? zrL?$r+5isA^|)Zn0`8Tx7$lfuV7n&$zZ#l(e8-W9fR#?=52GPkV|e3OnBRD4eGJt=OL=x+q~ z^?xA=uovO4BDgG3!C@3|clVDPd@pbp4BR_-a7^)S&qZ?YOadIl^@m`r7AQ+{%ZvWi zwOl$NZ$U78EjLC877HdIdN3Hb2msvq_5^ssvHSu6oJZmEAb>J{xgR|L&TD_?h~uCR zHZ`2r{?28E;2q}E0^sjl_ILjJJ7@i!r~b}OI{`h+AD$Eb&OwRb9nN3y69%|V0swG= z#FYz&ISjB4uxBIqWfFJ>^2_VNGk{-)=jhD3klLI7!^jfWAuH606PA`~MFuK%(a#26ab5pwUeGXucl8NT)# zBg(x*3l`htn8lzKTmW@sID%pp0R*_CM-QMx!rP#5z*m?BcG$rnN%`r(J7ty*i9)0i zLnt9S9`q1)44~2hx60}8ml7@T1%t-^oyfo~de-lk{~^P{# z_;LID{YxEl2PYy9_ur6hblyTs!)fU28^Y6ej5>`21v~FFrSO%XEq0tIk00Q>JRm_#XqI0 z#b@iH+lx4yO=E{|Mnwjbhez)>A6d4kzuoP7R^u@C!j{jzmnoGOKW!=!x!fCnL-mAy zJ@skDw|&PgOT>1>ymN89SX5qRz3!oY{Mzr8#qY&^1DMkXUdz21U9jC{b$|KR=J3-M z`-^_;I$kR=*ZZZ{hgoX0dHV9xvPbm;id6&4Vp-VkC(b8bH>OWFS4ec%O_SYMsL-Em z{pj2}seVFtqCT&pTeOK?2*ejRgJMmE`ua$gnKTLF?RGtGToBaWKp-#xu?QS@7r6wncyfVle72kpmx))vff<(%lPMW#&s9N2v;GKY{ z*#XKq1@(!}DD@MzDmeWmjKSv5(hHuXd*<09Hnn8$5_}anw0g}_is9!+o`SoZaJ@vvPr%;=VK?&d4Jk0esX-L zOzEI%+p(gd@1E@H>LW|UXSPxNF=d6)WdpUUsuxhxo#x%DgYvOo6+6DOdmo)1-K3$l zPKbWMR9e^j+NQftc4b*Mlf7PgT)LE?pW5y{NUVOMRH@WtAt(~Pd~Hy}JD}+o9dYLG)d@Au-cB#*bB!uXNF>#ZDvZdK-+;;M7OXJv5~MHZ6T6V$HbnCs<1ECmu{ zs(qjBRM7b;he1Z2rR@Hw?yhGmYW9L({PEi z5fi6`45Y`Fk9^zx?q>mcR1Ay0@Pc*Gu>V7r)(!TNM;?=9_El~U$=W?y`o3G%*KQ$k*m&0EpV9fpoGAz|zU zm-tDyUwCK7lzUB*c@fT8J|FXrE4O6~Nj$l)w&tV3sjX2n>-T2vUi#qn@~tL%&sW8n zt!OAY@X01nzs9)QT5V3MwD+-#QRhA7_vIghgUsT4&t-arH>pesp8j>>j-c}zFJi&s z+h!gii!QrvJUlEnz5A3m2{L{-#efdKz+9br`8n3GX)fiPNuNz^BVlBqMkn^p{R`95 zBCjRJ+g`g($M-p1pqtPtZ7J#gv+}3)Txz~y&W&bQ<+p~=Pd)7YHk$Ujx%!6&C%ti? zYo_7Ibz|q!yRmZqv+qv0za4i?E{RqaeJXy#uM{19ftSO{esOh4Cnzb?)oqJ-mP{Cs)Go-p;+!gO+& zcE@1@X{l!$Q|iwh@4|PDm)?|cIsED2qjdplrC;1!dmVSvS$9c0UVOaO_&%%Xb$NNs z>y52)TE$PL4<3O0C%f{qW`d@sC*NP!c^RNJ;GK=v%)HamwH*%~lxz_%t8P7guhOwFM>S0z8f<^wY`Z~6^{_+zrMnd~@9HnT?u+ln#(hfLdNXn z-x^vpbV_{6QoHhM3KOu%Q>LPiR2?WJk%amjf>26oVC*+v6PGWE{=#aIC7eq=U8RG0 zDtE!ZVwv^^z3Z-_2Pno5yY26x1zoA`i$hBysrD7VTC}K&(Tz_~Pjcgr){5e2kHbcIaMnuKOUNtZ7V-^t`! zYG`OnwQ1t2-;ST#=(*=$$vblc_U`m`o2Fky_};pSn|8`gKQk$wvR`IY$!?3l!uyeI zbf@N<0}ovG9&ys|N9TUh7@}b=UK#U4b^V;VuZgEh)at)B*A${Y88Gj?N~wO97U}b< zZp!^keDsy>u4Szim7}|Vd5n2%7%%W?-;<8K{~vE{zui_p5a^X791YUaywJA zzh~DX-0BA@PzKmH#(O5>NN)Xqq_H z)!cLIN@tI|@7KgMZIj#En|;c$oTd45Eas`ux88@(b(jt8Ls2dS)peihXW}JDH}gzi z1ZZs8zLU*q-zF6lebi@=%VWRX zhDAA7lx`ni91{6Br|AtdyN&VH_eaG2p;W`Sf*)6M#QN*0AKMk9Q5EaP6U)1|H0PSKWRKYdH2;`&m}WP4|`V}IfcLTj!Y1FTF#-=wHfdGrt;ju%XsLI_mMf+fZHmHYjXRkutsM<4FG?C;oU>%7 z;G4XX_sH$Gn8x%Maw$75)w|n&5a^SKv~_ z=&wI;&1Q?cJ54@l|K8U&RYfyN-w5g#B(Ty>%g`Yv_gmZ^z7n)u^uoNMh9Fj3=iQn# zHeM+>k#u>(QlT<4l=n}Q*xa5wMI)38;S^`{+LdIFAJ6?;eBM3xf9K|>e&~&~2lSn; zJ5x$NxHm|Br44YKsfy4SJp7S&p7-x^N;j2io_+|sR3mXj&ob33l% z+=an_MMWPHV&DIKF}3fCU%72_!ihNY5FVdxvD-mguf8FOLaX?wp4HK>12#$mMw5_{v2{pP4V4Dj|KbtE-Kj7oLOuA>ix6rH)H!%WM)UdKa*8DJ{=xN*__~hsr@O2>eVyHo$1q_T}K}o@h&`VU!@W+Y!T*E3- z5Ug}W?k9DFCzwkXrY@R^D>1pB?k`t$iWibS5&rZ*WQMuMX3s9`6wUR@-xu9IZevq@ z{q}o<)w(wY*-Nj;R3<(@cgp>i&#Qe)mA4D`n&ifJP^?=EO7^5^N|zR`X)M)LJRG6c zbVJ+k;C;sStefron=uEe4^AJ_w!3ftR&nnlDN-(#r4g$pq^e=DRl-WA=%z}vh$!~P z!P9c?pZ0obZ5p(0nc1|^+9}qpU<_|;W;&Wf^+;_FcD^Iov@gH&Maq)XDft>v$%yTm zZ})rUYKuzgKiw31W9y`N1#;xg=53i7yT`?Dzh2T7GOq1Q=(}}q$=#gB+|7c0U&|*) zKfGJ7UX3v~9_uf=y`h0_)vVR@>tguF!sPidk%J(Mu5|!Izcd+1YV3!QT-ei4(J8KQ4HRI2+-Q=#H04oc6&Y)Q?f zhdPu1NRygww*K^~;k`+rMFGA>HuCl8N3r`gWUKeBagM-1?|0cE#AzYx^@!X3;+2HysN+wHENholTff}u zwo+o0sR;frkJ;=j@n|F>J${CdO++2J$ z`|k39zOmswew(LK9IQ7(g*plS2LpzGxC=jJzj7}w-gu{5Z&kr(MzM4mwWeS8u8|-6 z2l4Xdri@de(Q=qb$yu* z!=d>rYWJ-m?$)uRJvk-+u@_k!#Uv&3Ga#

    2l z%KfN!yczk$)Skx9{uV1Q+XH%b4c@7Xlwm|{!Lbfidej{PK|l_QlH{c4Pj}gQxZOIjF7)+S)NO&T!O^!^{s~(#Jxg5id>F_xxJ=7{7EPSwr0W@J5^LXSej! z{Q`z!uO4E)qb&E!8T06R{?$HcxsZcd#Ce1IoSe-KsXyLZYdQ2?%w95hLGX5r){P&( z%4|l0q*C7k#Hvi!n*}Ed+(Hukd^=g^J#jC)`{Z-K?@0I_)yquPVZ@4D&g(MHF8L_$ zx8&l@Erk2S={0+9*(|zP-;7lLm9O;qYaw~PRGi}8AGKPI4J#E&-%FU?kt?;G6_Qyb zp?jq{RT*pbYR9PtD?;q}P!+Q*ZOp8_r*x>}$Oz7jEg=%8e`z8y?UGNlgk#wmb$i1_ zhs@(kzs*XDtlwgh_YtzW)7^8VdgZ5e18*W0*w&xuPuRJx>NU0T2|jRKBGdcAZJ=qW z?yJRwMR}$no;jbpTJCmq6!x6WLa^2g5gsyfa}o-b{X(NP-zOh88-6FyrebolGO!i{ zEnJ&hE|(Z;vNdt8Lp?;qW^FG%wtl_w!;xDX$~`2Oj=xiWdf!lTQLM75&{4Kl!gWE{ z#Je`rzP5T8r#MqJWOAKzGTR7`JZ_5?JDj&Yf5FQQcP;JwD01)WR&{S_dpV_bXhP+e zr$N0Z4$o*F$-HhlF?#i?j9x=Vz&%3wwc?L2r3jamP6oS(tvoD$5Zu1$O|8zU^DW%!53}w&jY9b}xu{pNF*=+5mjk>#ttSni=!!n1; z?CXrSALeJ-i<0vo9n+_&`c!{_(Z z#@b)KlOCbgwy#8pl06W%;k`ftv8-4!r00OQx+d$+fN&ssQ-;Io((^`NOx>f)BFzLO zH;FKtOWqR}B`7~xFz4*-d9VE0tD4rmZX>ts+$K_Wq{Iq6P0!riB9-@1T{yvnZsC0+ zd+hj@DG}6LMAUr|lp;l6s<3A9$BZT9YqlfzOX80n+iI<vV4Z1LK6W(hbTDgrVyt z*B7MZ>0l!}FDrHs@2@+l+BUpdasRG1?^|)Zv62IXqi-`MFMaZ99h&rUnp&Y+)ExL( zYtQP?GU}eh2L1M3!}2$0pNmg1)UK)=)%3BT)A=6-30ybL6K)3KT9D6OsAE7KX=1YdAq)sZQIPllhDQs z1{qh6vTBX4hM}r2=Z61kREP-n{qg+Rji-5YhN1V9V}s86mbq6(*$xe)5HpZ!zP(=2 z%Pd&Kuaes3)-HEcUou9$Z+-A#Q;y1_bB0omoUa2Lq;44QSt%eGbEng~jd}cGlho}^ zE^ZmU#eG%CRkpUvGuO^#>0@ewl3XYAuexc};$Pnq4KWSR4! z#~vmM)X9C&A6Lhy9Gu%Z-f6l^-QbskNz=*)W>CValQDCm%etbTmA+EDv&%|Rt>#y! zpSC=wJf#m4t8Oyxy`?E>&zwn;CgICWYtD#5&)oTr<3EOXHV^9{_V(L95=-92dh|=> zSii{Yw8bko$c-tzR`!dN_%SP^y;T!uE>zqhKHF5X9G5tf5tlTfGgbd}Q0Rzv-7@HE z;j={@VP-NxCJeLb&jOaW-rF1QJNRp|B z=*ctLcd_EhbOQL6BPKlXV(S=b)sd4a7uWQTeZ-R(vub*I6J2E_=~Ok5M2!g2Ax;dd zAy)kOlUH*RUvcHCiZmJHdiOUHUIh7!@?P`nz8*uZXKUHunF4`5nWm)d%Hs=17V8;9PadM=(>||R4Sh8{ zpMMA2q9NmQn0;JE8#g-~A~k8F`#m;>_2~<3czLt_fIw!LF5bHm0 zT@wU!G)kY@5FmX6H6f$dX3;UTWdj`unOv-Q=#H;q>Z?^~BjoL)#5=PWSBACk+xzFgSi58v@)>9={jOsqdu>6;WKCQCthCU~Ufm$hHEg`7 zvrM~4#)8Q0*qswo3w1+vBwrbaLejrDhj6y5_R8>N{0|t zVktVNFU!9*FSYx$?on~I03^27hw38Xi}XLR3fgvQ$k}Pp((Q{W(mw~Jl^Z3B(_WD! z8+T@GKl4_dIc@FmsB;c;?=enYJrR0icIN2lrNbzjk+lktr^ z1RYO@Eg~o}C8IdWc zs>ACOQDeia`x;Knie)cHy4*Uy??;gleY3Ob)yGn>-_5n*qO&~5cE!_YHrCas%ki_sKCfuf8una zfK%Rgu{VS~8;|o#EFG;A7de%Zq3`IcXC}1V79H%<)xzwVEqotLiaNJ{$okI9F9L0a zkbCi3^4zqWf~bU-?!>Auo~xcee7)*%G+EzLK-S-T1uX6Fz4KhkXwm)8c#lm?lC+N zSt-}$g_*FwCf`@0h!5X-bbVRSfsLQB=gsn8-PK=W)MK>aszsD-ooBh6iHP5w-XqsU zGfKTaTON;Zofvs+ns&y!&o4#u+if}b53gNzYn?9*4P09A7#-)|v1X;o9hvhIYqG|( zG%+QQF6KQxN808vzWnyyAS!7G!b@?YDOvZFnzYijs`!NujM9VhFUE$cIuoeT}b`;3L%}>*J2R6t9M;7FU)9Bbw%se9uzpK?=-$!FjuGXacanU z8ULlx+ARN$9Lw^}LwU#6c!-`%9^L2H*qao8kc#k?75}0UxRe@W{jvXzm}!-M(H-im zu*#k8<2yRP>DDe=)?kQQEM>js7h*-$?4n~<)j>8fuT&+gZtBS-EH!FP`$RhAmUr!& zWS!cgTu9SJMIpvzGkR7_;Am%M?19h2#TwhpUTB|eSh+MP=10U50~7JA!52qwHMf6k z7Z&|Ix5p@;^}*P&?8;r$%*z^&Y$5-Z&uyWBfQDU|v%B{yR_z)TPhF4sIdd}xGpist z+c*+cOOZb@*R~h;&S;Jk#AQQm z;w|a8LI3oxtRJ%Bj!K)C$lU+=^hVFcQ#}alZ z)-SP1(M>TxAU#dyoYAnN;^zKl@c7a82K-i(lkU}Ds3m)f+FBhH>NYxTSK8koRT}Z} z*TNXgRR6030lml3Ye`jL=8!U5J*JxEVCGU%dsW3ydcimPBsov#@-Z#qv$6-N)gf-X z_sd-R0VT`ip8ueJL*Tgg*w@`&r@fubKcDn_j*T18l<){&V(@m8pHsZnh3v5=HJ|sg z_0#|*gTSiecKmFGmHcpnQ3rmp>ezlYtoO)f%ZpuW|kN#-v z{7_-h*ktH($^mt%V?-lu!TL`JKiwb`zO`?!I_shC+bluQ6-g5-S^MmG_OtZGPZhri zHM(D&;uu#1y-goLlnuT)8|S!0v1PAt%fdrTjp8<(N{Yv&B73@plrw4mNu62ohD~Kk zixh9FxE@}`QB7;HTd$R6Z4j%kn>dCWdmYpxxk2H3mhmOqyu7C!FMr(LMD@<_IcL>M z9RB%a^bBp=!jJXc7gcZ2wuPNdk9694{h>)rsE=VFn;5zs9Y=nTc$4Wrpb~Do-K8^5 zrklKjn90eR_Dd-Cyqf0GeWA`?Zee@&OymY%PDA5WrE|y6jy&37bf_Ue8Oqh#lfR2ad}FSa$EusWw+c9Q{+D1d-XX`qhc5g1*yAuuQn_jJKHYsY8ge-T z-%phG9v2Zd9Q|6UZfszhZr1mpa`)PfjM}kjhm#7ItFeUbwxSOu0wS&_y3x*Dnm+|) z)cDrj-TO9p^iks8wQFxq1h7f$yHBeF0?a#i$j*g-*>QdoUQCQ|$yuUcrt%2-Nh+t* zHkiCBAux1R&2+i4=DYXr4*YN|Azx*s#$2vHsHXMv@zQO$o)OI45%)>Afsuye=37&} zi!PQ%d{(ch+ud^na(Mb<@y=UJ=L?MS>r?`EaxS{57; zGFyeMYG2B2eegj{%klF$tEJz<4>;~J2y3pG#yXCD9?`ut*1Bm|z4@9Q%+tArV<$~c z2FnLubm`p-h0n$aDb;J{?asb_(fY>Gk>}|lhw`#|X(G&xyCX7vs#R4D&kV)1_$)3d zl3$A5xN)>>?QL3L)5L04NmaT64VAcW&_)(}Q6cBShuxbU*4c=D$TWI-uqWr!x3jb# z9;wMQp?6oPob~CK6x<LM`_)C7vmV3Gv9Ambv(c83UPi=cZ_yQfo zwC`K%n~+$JRF9wBrIF40{UMv`OLD+qjCK3;KR`<~ii-@Eb$78o<8eZ$zlT+!Q@0~?zp?>zhCcKrBw3*XjI(6aVS=;m*QV-)E zd|!*GbiOQ9o`|~GdB$^JrmjCJFCZ_j`r(l@wU<+a-BYcj4>^j@Z}d8>JHKph#%bdH z9l6?>!KHz&a^kIeCYG(kha7fJH05LF-t{nYQAS>zoNU>|g^cEyky6iHzv%2-_scp8 zirc4FK0fHaId^~CC%asXqsr+iHUF2(p4wT8H!XSDeJ-&$ce}RnMQj>|Xl&_tc`WWe zBVm13dHPEh^FhUacB^8AY3qoP(ek5t=ToFds+(|THm&IKH>)PT9wZ$t{HontDj4h8 ziaoi%UdU{A=YuagZQTQvh9NBM(5 z+_cJYz4N$AmwRr4v&e>t(>m>2sbWpap-Czy)_r-&_RDbDU~qH4xa}_=yj{VDX`hjv z)>o@ISysaSYtM&?YTg&x)iphfE#C1^+9`MAH>%qQp{CQj6l~<3ZjT3#r%*K&A_o@F z?(AE_QTBMJ0I+PCTr0vw`a%1s$s{Y z>t8z_&CNUgY5SVuoK@2vOt~+muI*CE_U|>|!rF6)?N{ThroEX~@s*z(_csYz#cTfP z3O=o1;V?5&JLI_k^^OVS8~c~vof$cAvtxoY%C&6yY9K3+4PDNJ3lLG|0vFurrnt}xqs39$%3hAp@R>v9+^#lefWh> zcH;T&)#?6C!G5{s5tWAzoLv~dU1x3eDvR=C3T1Vh7t35Jv9TgZPAA(Pe{jkYr{?Z3 ziHLf&lXT&AqKWYMwkOqx?>rLJ+ZV^yxuD~^(D6x-sTYkb| zp|F?dCtJHqi<|T!wmZ>6eBaxin|SOK(R!r&=}bxx#U$ouWN;PfOc`iUZA z6K0Li(l~n?&E5@ZxnY-2TnRZ5z3uYhs!v5lKGG7a(;B|WFbIX1IfTs30(qHyD*@51 zF9n^(woN{M+b_`FC##iZCm?ZA}TxF?*ic@_5x`l)jGl#$Eh3-^;TcA!zunfAparL?bnWy5O zC~Nctikz=#{m^9-Uhf&_3mw?IDLdrJ0ogA?*Rm9R+e@5CaaH$)JXE%HyuP$@nXc+V zFU14@r@iZrieg#%WF!a4Nkr0sh$M+38Ae!?AWD#&b6S=p5(UXgafwP41g?q*l9MC> z5s(~|oIwFWM0o?O?~0e_ci(;Ie1Ey;?4IqO?yl;Zn(FSe`>S8NZN;;>uR-Kl6*NOd zS%ej;Al(&wEudhE!uHG1y+rH}vF5e(%?5(x%4e7p(ZrM0Qo_U}EC&1&vN+f8rL^_y z6f??`qP@z!w(62Q=qabjjVz5W^Rq4su)6ypwpge0Q{o-tDYjVxVdG56x99T5qf?cj zU->$yQwTxwNAc7;Px7>8_=DHis7~~bn`Wup5s9QQqgwFFo{zLKXyx;&yoZkmlO4~y z>zFT;#H}A~O#ia9&B#*B)YulNlo8;(&NG5kYSb<1A0bfHi=9k;h)w3(OJu3XK=fY|_Tk1!A9+(ky1I_7;}3*^8!M@~qdFB1uh3`pf+b zG(S7nyS}`-TIvj&Zwu^o^m&Q@rXnAioPck^TrJc?qedVXxoER_J>Da#+<)Myxxs|5 zalj@YZz%A(L#epf(i(52{zQ<-3|q%5`VMoU9_uX~vBni~{HRs)7H-cWN4$ygK+{RG zot$Z9Z?`A%Oz7{qf}neETp%tJ71cuv&0)A1L3R^)Gz54 zg!JAhE%&t8=1X7X1}dGIp>XKO*-XF}Gxg2Hzltm=8kSZHJ3qj5;%z!t?T6!XpQ0+&DC9DTo1@;*70_UFmW;(sdesOU8`M2!>LKEir!uia z2H4GCW57wblF_G1^%~5T4>SoQXB=g1kxkQlcOef$Ky2BSkt2xDD?v&~^*Gw`B;}84 z7|*QXVM;ouT=~&AyV1umFUoMnj^4;REjwR)oBfiO+=b&pqS>#}2=uQs6!X!G_a0MK z3x~bKR)QH1C?U=SI7QK(=?LhdlEVy@6?c`B26JBXh>=Z&6Jsg(T4u)pp~FtfmKKSO zFNA{s$n@iN5k*F07*Gs@_fR+4`y_vo29VB>pbBh)9ILIn^xP ze@cOVJnqch<}7+$@{4R)@Da4<&I;~fr*V3>@~jQx9~$Z=VZZnErmbn9VgAtUPej>f z7<>LHeTVi(kACy>wR5eL7F`6np;APib-AN8XQZ=Uldo^-xxbttL!(y8Y@f!1Ey=Ev zcM{Y%ZQY4)O*l4w?VZ$PbzazWS^bS2&Me|~Cfxx7#s}TeM4m>ec_HU6o1ruN8zLH3vq2FA|m7W2DUd>Y>&Q^oH4P z+?SK!XzzX7`p6KBHIaXw%zvR z)1upXY|$YX1cFRA@yF6CDXWJ$au{FaVe-gbroiUC@}Q1p;_K#s@@ANuq-5hqzVpeX z%ZyddUtBX*hCa{n#gtSTdeEp)cdp7fvNXGc$k1x38&E<6rSx{XN6v9+ z1WlWdkpx_-6x17+;Pw%8ygR}jQ&h3AP&%4w*D=vf{l~86dBw0r=J*8M)TVQnLgo3U z9z3xOO5HZG#P0sGRy(UZaxA@;tVCJio0Z;dbsZlEg8n)ijkZ%Y98newg|%Htxfhn3v4lc(Y#9KL2R-!Ijp4vDLjhrN0N5kPp4_=}cC(V?*2%S~a%!St`Le4x2zUw)orWh;VKmbYkJ#oW?r9aoyYg=jJJu<6 zllKA-b%sOAW!Tl;0H-U?Jt-a*erK*xAxopbGkU%;h zlOc<&jk~XMNtgKpQasQ~yjo@BKIul_U|>Asy^I>TpLx7)*BO^~c>z3bwbZSVOf}u; zblJ3i&MvvzO|+p%vo;==+U)ZYVNqj!O=pE8q!^{KsfWr%`ekkWrWfnttZl4rXBv3U z)V54;06KA=8K-KT>YO#HkHHnjO7$`!Szk$?G@FjiMdJar7#&a*S2WcO3lMsc+dT6uR!RE^dtlSEQ2E z3IaXD)6;+8-b!1kgol{01&nHN!e@k*lppe^<4GBpiX-eFxu=Isr`roCEpK0RilHnx zhxw`j4kX}_ku;AG-PY|*^S2e0FuFP(2X`Q!*I9HYwQlre4ZB~9M3!zIix@aRB++H* zIft+kFH^OYniT1rWL{rPLa;sx$~@l5l(JMQU%aJ}_2~g{I`BF}@lKr~LYjd0p zB>p5BydMI_F?DA++Il1MP46=EUfqYcKjTqMroFKJh1lamRHgBv;r;F6 zGIUfpabaPto`kSW%DG#bGB33`+q`{0cVYQyy5|$GrCbiu-uP0SlB--rQPm}opzH$% z`cDU0K4dN8zW#Vf3`eFwGbPy5yr?egsaJ1Emt2)y>^n!%DbShSu3TaZU@xnPruB`={l>o1bdd@-TI}2Dl6UJ_*xm66Yj`uzvX51Cg^{Gm1o0a68quV zZv_>?8Jp_4;9s0?r#A>veSMQb`^vTjy@eUqHmLgq5#^4|&FBdJ6=6)u-HlXjS-2uj z^W&z_#vx+;ublc_HJEn?iz8x)^q$aoW*8mw-F+5kfxBUh+}xw<9_Ck9;S;tHduN1F`T9*WJ`ldGCPcV3$0n{X;iMewMe z4SdneCt{P<@5B8;uS=b3PRnBZYbP?50KvVQVL&wajT*;iGE8qlbax@rbhvgA#=|94 z@OdMABP><-Uf2o$YfK})PA*0v^L?X!Xd8>?7oOdbcaahpJDVDA&d{qYl*FZ!nyBj| z;OeIfGivsP@#G^<2k9C%z3DqwaqWXpe%@l%Y?7nGw9l|9%Sk+mwzgXJp?TeErtRK{ z*-_%rjbQYPH+nq!RP3C9Wx;d%8A^~w3;GNyLNqw+oB{8{O}7kvy`;DSi4hf$LN+#-cQ_QQrgXl>-^kw zwUO$xY~>j^g2a~V*if8&N!2H_6`zr}GOjMLD;!@EPE(($9}7y;Ol?3fkwcFz`qb5%ij2w z82hkHlq^#Zdm}q569m>CdiZ~-vp%Xb1lojzA65+eKPU#Z+*1s785gA(sxd_9aiBaV z0>{MG!NtsU?*an?+W`ULp%1i2VC|U=^&J<*{D3Or9I&PQy96<~z+F%!0v8i!D@RuY z$Pf_Tc+U=d$Z!ZpjVfU6r4jkw6N08fBr&KG{-2yl2YO=d(TVJt8*UHbVGrv50?4;U z;2cmc{pUVddwfgQ2waHr#t~8oC5{9_O8>}`gQ|v*+55aZs3PHy)GyzgK#8oZEbPDQ zO?W^Wb7(F&c4iPsj47%E-X1^9K0yhpg233p)MJmu=g-*_{J>=Mz1so5kAamVssbhH zfWPVcP<#FUqBF#sbhwUSUxh;w@%HJJ_B8oE{11FfsL5F$>4*oW{_a!OsUhYFma0(PJLHSNPk5qk`+<82MwwJ)9H@ z6+M3rwWtj_=264^-MXKis2_D8MCI+--^>}Ir0ks>4#oTbS0%81Z3)!nf3{gW%3{B; z&fyGPzt#(N>N>2~Ph;E(<#Il0vuT`zr$a zvY%&(98d=|0c}7BFa%5i3&0z=0r-Ft;CUblhy(5cNkA$f00;s?pbzK|-U3E|QQ#Y} z3!;G-ASQ?fVuM5=33wbN2L(YPP#6>esX-c$5o7{Sfovc<$N_SK0LTTN0eQi2fE8c^ z*Z~fJ6Tk$p09=3sZwK!yfCjpP2oMe$gC?LkXaQP+4&W6~3)BX$0XaY}@CYab{s3x$ zI-nkq0%SmU&;y_V7yx>J4x|OvfEi#3mU;?xM_MgLUuu; XfZlsKps-1H(WIm>aHTMy6ng&xa3V!& literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.V1.JSONSerializer.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.V1.JSONSerializer.beam new file mode 100644 index 0000000000000000000000000000000000000000..5fc6b13f1043650bb9ebc87e0f0e92ad148ba8d4 GIT binary patch literal 5752 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 Z;D56lAthuhi1`KsBKF;sA)iRdzW^;Zp7j6# literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.V2.JSONSerializer.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Socket.V2.JSONSerializer.beam new file mode 100644 index 0000000000000000000000000000000000000000..3d2093e3190cdef7364a56577f59e676d44437c6 GIT binary patch literal 12544 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 Q)v6%YkPv4jAjh9r_u6j2aVEF4j>L=aHy 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 Mogu&o!Xd-_A4$X{N&o-= literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Token.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Token.beam new file mode 100644 index 0000000000000000000000000000000000000000..2def0ba137487fc136b817a024cfa8e349c1c04e GIT binary patch literal 8896 zcmd6N2T)U8yKX`aB^c>dLKjg)sviOdAyfhBAUzNu5R#aLDk!}O3ZjUSB7)Kt5R{_Q zK|$$Fnt})dQWd1CXGh?h|NG~kGk5OHJ@>4cH~U@BTI+3ll|Ac?j)~bR5J4%?(5}Ql0vW=7U=G&TLsp9l;R$HmUKyIP?WH6|AQkaiAp2 z$!X6uCnpH(AC}{BI0)YXvL9M4JdRAnW3g!B%HLk>#US*co`eb{qn${YAT)x6@xVFz zp@|sxz|wz-6om5x28YGq&~7IVUed`^CqPpDKan5RJ4PU<864_`QJ81pyCdgf0wt5D+xL zZzzJ6186jcgTP4)Fz8Wm76nGb{!I>Cil9+oKn#HE|I`uSZlx9uRyhPhfesR73&OwobAYgLf2?~OSo%ygFc;(M<=wUDfwg(}=ki$w)*gs`l_@@kK z2m&q#hOkozfDm>V7{b8{gCS_?s5UZlh#{CcX(^!u*cn!X+TUe%zW@r8d_%lKXr%1O`Eb0)vGqki&o+DS(CV$q@xZMD{^Ikf;(=&g2fMtOp5_=E~43VV1fW1iqk@|y51L#q8s1z;8oJ_O; z=He?H9k;20cSmKlj7`4Z9aK)f#zj>h?6hK)Ml11+CDaZeGqjvo_6IJ1|va-y~fCKtI1gamg0I>iB1&9qG8i1(l?hrt9`~2a3 zo*Q`b00ag|03gAAo;vmjK(qjf0we|ywGS1S*ypJ-B>_5+DYefZ=mjGK{$bD2{c+SW zRGwPI0Xi5*)kEc}I^h5v$fnvs<*7K;z60B-PbyJys&5DWQT0=KDo%|9)qkq(H0Lp7 zYJ6G%q84hqM+6r5g?Q5VGw$#5F0}tzp`%vz_xQb*g9^2Uj=B&2f%iBn#;~_7{y`6T zIxj#8cZ3h{3o}WwWJvp3WWjLZ4WsFVvp;|-{xJd!3}*hbjsH1y$Up!%b@0h7&dUp=rH^w5T08&r{}UF#HxjT8yg{^o$;wefga2~`k*GrG{P}Qr zClbNMALq1x921=gL_BpF_%pc^@jd`dMEf5CdQlmm4NY(X05$+{@g?J(Fh0~1+lv}R z60odX(cU1_la?ev=Seq=3(mzI<9^Z{?@smyMx7*i;_+nQpge*01D4%M!rnP{68Hch z{awLgP=E7e>bHX|IsgcqHp&A70x{)ATmWJ}9*{n6H%c6B<>S`Bz+Pb9``*_i=eANJ54k%t*gPp&X=9lb{ zUR5s}%604gGhbJl&AO|=LC3%$sDXqZkdQf&^+#tE1(#NR-HeM5g|IgKBq&Z zG(=COQ7RVBxT9QN=fm%w@k9sV+|6*gb6Ms6xbF`EI^|W(>kfR%eUM)bk9KYdC7iM; zuX5{9+&sI^emH{u^5bP^8Yywp+Sceb3YRmIY3%vA*Sy^;VJC9>xgGRPJLJ;Y&-+Xp z#y1G2Zn76X&>l~?a0$lG>hP6Y_mkXh*P-Gcpd&rps9{as0P`YdixJ4)}R?sRE`V-VkY{r5Q-_2kG=5#-WGGL$5N0uJ;RF_u9+@VOx)2 z=*}sw+`IBuY^lJ=G(5XDO~+v&UuVP=4bAS+QcGEH+h8vngrH_G-N<5?0^f~$kisq` zaHe_j>x7s55`xjXYa(E{Cs(+txV!0F{%h+6#zZ7L{}U0(yB3cYcD*sz)g?N0=Tw3f z8~MrGFXqjXkcx8_bU3fRg4mju2q*|Fu_%`P1XGz9TVvXmo4pn$o7N5&Qsy$ zyocrIjt)dNb9L)~TnT>y6fMIy=qWHNS z>VA@YJ#%^9-y3r78pDSFmRXOySpv3=tTbBGEbD)JDNnw@uEi{M>dIBwzGb#n)}gBP zw2$0kC3Y@E=wS7?Y&Rs6zEzsYihLqVGwqOORqXL!QlWKD=Zdn&WXg1{NohxBI9CNn zqmPX1$6Qy|vnqR@#!~y3V4?ktyW_s)&uZ1{mDe80p6q=ub7$MV-IUm?T`jYE7b|Ik zs+XHvX5Y~0x^0!L+o7FVddgaURo{MySM^YBW>THVbyMqTYf?gx!ZC2xq?Y603ZLRwY?R$<%FFrZk@bR$f;A|0pMT_i++kB(r$H<@NUiEQb zQ@)f)u$HD6bKe_`n+P!NC|QMF|C|utIBF_5d*jefW@)|tnGy{GyWKoq?e_L5)cqjU zYBL4ZkqbZDo>cbgTT$3WgohMzoW2g~Ygott0wDYcn)PZs0t z?rFxi$eCvUQI6}ZwV=ss6FV$dQ5zDBb;%aH1*00RS0)-d`@BFkIv6qrX(AEzBGdDNq=$* zd{hs4@3O4%vB9CdVS^tV-ms0Wt-G!IbN8d_dD7S4h~ATWBubDPhd$A1F+KmDZ>+MS z>$SFp?oRM|?eQmSGF*>74ywzfXg*_!nKYfl%zdP5d)n9gP_`IVH5fMMlu~4J{n}>y z%je}4D3N=c*?#)5`Dr5(BH4~zf|T5lN2*E=g|{*@%=^TZ-6tCgW`AbneV@1;m}^*k z-y${Qc(#7A=!$6bu}|F17q{50Bj*%~VuPL~+afWTw@%H)@_LE3$gwkz-fdH4%Uh#d zxSF2bUGGCv*3Z6`FY^2pzpW(FxK?1PJ>F*K-D`Wy%b_qeQ^f1KtNHoI*&8oRgq}V9 zy5b=2@`CIBRfXr7(vTyG1QpJc@0&go%lJ9&q2zRet?6EsEvXv@DrhYip1OWgVWwq4 zZ-_6kXM^0e;uezVWO!EN^%UM9vv_FE-zc$bd2Om$YW6RIfQ6A-q{>d`d!+KhDpRBn zR^5{}ywmyQ7JMyvKFt_6my7AP+K!UmygS_&6;du6#M{M-?Jjtm4+&Gw1Pf1^2EP=M+_Bg58*AMv&E$Ew{qoqr z7iT-lJc(N$S=iOE{_xo`_7Juo3ad%2uN>~pl2+W6d!E*d)wD!3aDuY)qev^7^O_pj z3L@F@d?L$@#qj*{!mLgkk%Dkl+K*QBz6_3otn;j6Cs^iLUt00^^92;C+34Fowy>955?eVoP7tb#v2oVzzJ(>HC|_GL z;I1i%%C>nF;$2qioWb(LBKU|#poDj2mS=|1_uZ?~ZzO^W$vSTye}0RZkB3XVKgA$W zedD-4F%2JkIIL%f(W%=lB9%zVw-}sh$HwY5zq?EJkw(%gqITFd54)eTGQkub=Vpw- zPcOX;T*fVRPW}p0%g{u#ClB6{2lcUvi-yPLoZsBS5t<@gW9lEO#7vld2pC}WZ!70- zt5||yds=y`w&n%Ggld|W%6$bY7}ZaM4`bp^IRwv0e8TB=k#ZKUjf5_r2?=a&;-yq? zX^nsa?oA8a;yV#1>PONX8{~o9l~Dn{*YK_+;8Xr4^?Oa+FCcx%Jsv^H3qZI zYEG{s;rl9iK`}O}J@)X6>uJyZykFGng^%|T{rzPGtq|X*`^NJA zgG1fR>3qbt^%0^F+>_>Oqa&L~XZpwGUAgLuPS-n{Zy5jh{AgP}W!~Juok!Mwv%A2& z@>U!1NSdm@O|{nmy%=`c31sV7S|n_;W8u zcJ;+rqoUiVEeZ-MwF~5#0wXPNnYrvVTA)NpFI$=H4wJNFhQ)5=_zFtFGX-L_0#?#d zhL0UY*?7*O@?>32-}Ih{?%~Oe)|*CH1Qr%AvV1U*hmG{m+3v4Ml9RfVZ=}@0nOv0fOf2Z88jkll^KyG5>@K;&#>2AR2U@*QD6@qK z>92V8Jgf8Pmk}wTzPtIIZ*(4?XE#KA$UE#Q$yi(J` z>{&iRi+2`J3}E6?VWw-B26!J%jdZhYDRPJ3(#^ceci;1?LyF&XI)0&|DyM&7JR8wAlpWc-h@d}-8Z41L;;y=o#)B^+ zQC%~_-2U;OD5`=Vx~3XE&2|`iCaT7G71y5MY2MbJ$O)=Boytm*gHhCkH0yRg^_ggV z7+=?RT1eYMEMy>iBF1!0VTS$8r%2g%ItwOsY*=%%cpT-MgFf?#TrD`x7q`YO7=PT* zKx`vz-gY4F9iN(dV(T%2`jKlMHpOnzllg@lz6+(2F(pmjCT<3jVf5#X!F92)daLRQ zp(HbeL7A=S@u#fKmM^(hu!V+IrN=!iTSL*!cOQJ8T16zhV*TYGD|iLI)f!t?+TASd zfXl`H^l?{GxJ3VIT0VzoLj1jf;x}+VdscN)%#5~AoItiQ=o~iMcRL%T;me6ThHEO9 zXdSvC{Ad6hi%m)tAmWX$ox}xxb(O@X6fw~gs-&vMT@@%YD!IJgLst&T{6ZGhglx%6 z1rG=?KW~gfXTPI=BzoV`AS&HeI>>3#JM>J7am**&i{|5UV@ z&cIeYDBSI44PKe!3-gP*h?nZc>-Idy28o{S!))q{YOR?)?q9}G-ZF)kR1e#tg*-qt zH(o*uRTYyGoX=Hp8;IgzOM(m1UFvxr_bey!(1SkibECv-hwq4ol3qVtt&cNlcbhFX$Z!w7!_r&dlupb1 zD3nno>RLw|9|5CwM9LsTr*1~+>6-?f3)8VBQk=UL9f60;>H|}zQdI3Ft7SqOqMPB zp;=;=x=*}DsqQ4yu01cb>A!>{ahW0(i>82U$Zw)41uoAg82a9D#50#V=b zHc#UGp~kdxHEvfXP0qO4y@=4h_qHH&Nln?@`mNa_{FcC{MF#)EGn$vqlpVwFB+WPd zsC@11Ymn+-cqQ5XNr_QWI*TZIK?B(?^X((1kMdjoI8OdyrkS}w&A`O4XVl}(ZSU0q z6+2y-pSzE)j(?8{$-x+?_j%q6*%&twDVDk)d3!pSjZozNDEEm{Q0SLyy)1kK{wjI{ z=`*AJp*yPbHlu>kB4J&|hpJsGYYT;zbAtFWud4-$EJn8OI3}5fbh0TO? z#!wn@!SG4S?y{kJZB5ykD4AD{XuqRN1qIqSrsm!7{{EFs`i0*phPD2(xbcM**jK)h ziRFx#)mo#^9Zn(gY{hh0;u;tIZGxC84T1~`B4&=LefN~HcXt=7(9a)pkA^o6J(j5? zA`fpD$SpH@e)4vyVe#yd77f{TyeRzi_f6}>dGAYA2uFKpF@hm%eM7nQdDEx2VbdO> zC2>V>ufFJ_WeyiKX=b~qH0o}wQ>_%+%X&u*IBS^0j2(q+?B}vZ?S9^oyx}PO;RD-)=daY=+>e|$ z{mblE@%vZjF3;t~8yPmZX~|3&5^BQ)Xs|s-Yqbe%3)eC)Gov#s`C>@-ZyiZhzeGVk zY2}ZFrCnC^9sZ{EAy=A{Vaaa(wEO1V`purNa+AU(uOnq1I)K7`z>`7dEsTnY`@51h zD_82nf764sX+g`MR&@mvjbOWXbIQ^#I&vgj4GEE}{n7>({5>2!B`8xmgsF{~=&@|I|V-p}~!TQ_aTl8<>qgK%c7H*Vd$Fq% zvEFM@uKmUn_0B$`g0t@O?n+`mo;%cCg3ah<)^OhDr?y+VqNehakNRFpsH}&c6?HE( z6h6y3wdPvUaaefot7j#pODcuy3Y64E(voh@Xl2*nI|&$p#2@Kfq2DAQJ1>?0 z0CRz3m`CZ`)VY%7YYgdh;qf$=w@LTQ4z*+%^zu0{`kuGg%o6Y=(=1jBlh!NnQ>O`c zB6iND8cCg3rwM=DB)ijjdT1^H=9^$%F0v^$oE!+tX@hokOnTyTw(2{I$ikAQJ1(Qc zc4M%IXO^Q&7kzM{PdjrmF>K$;{aXeO_ z5SR0tX1VD?190n$4AAlh?tY08z^(0J^q+LCldC7%)f-K8@;kM6iOsm5irv3zr`{X? zec8U(gBG|*2Vi<2u?ys2sW;M|G}H&}z5usCoQn^})t`=xCi?uJVqX8LBXGO?ulni! zd;R;(jQ>~q|D*c<2=3W*kXhJw`hPqo2m1dP#biIh^54It|5uY_Kd1BGEB~LIAqVNC z|4$R-K>h!Y`2pl{&IA8605%CzfDQ^ZhsgmDn4M{j=?BvW(|x7~Oxe;9X(nkFX=bKf zrk~REOi@fROtDO3Odps&f;j(EjtCH75lEoQ76FKwTcbPl8-zg6Fv`J!%AZ0D{6mFW HfXaUX3vVB9 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Transports.LongPoll.Server.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Transports.LongPoll.Server.beam new file mode 100644 index 0000000000000000000000000000000000000000..37f334b2cefb47393e5f6ee6f3d44fd74e07597b GIT binary patch literal 15052 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 z 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Plug.Exception.Phoenix.ActionClauseError.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Plug.Exception.Phoenix.ActionClauseError.beam new file mode 100644 index 0000000000000000000000000000000000000000..9c7fcae696acf88ff80362807e67f3fdea485e81 GIT binary patch literal 2704 zcmbtW3se(V8qOp<0`dqUB)ryDTUo7=0F{b7Y#^n`5tZ`LTDlvCWC9bCnK&~cVO^DjHk7C}IyRaum^MX9201wmm!tBVD}x6~JV#I?}kg0;57{u2W2?vd^3>74V;{qKLj z`Tzgkx&MFf>uVAMIUL77Mny-iie!>QI2x}8rXtN44FgQs_ z<1fmCHk+7JdQ}w8dBIy87rs_$xQHQ0{3}sX?0R*l~#V8$0q<@``G0Mq7 zizn8h-k?(|12o{>K#>foB6WO^=f=&SGo_v>egkR^g=SF3NH_e*6JO+y6FQv0)c#XG zWr6XK<0$;$|QVYP+nACf-w!Fl5>qE zd3&P|2O|OUHl8~omkZ$?FOT6slPZr9Kx2?|;k{YTbBDpzb2vz`oxs@}+0B}KBtRO% zc>k2h9R-&h-8zs{a!1xcx7^Vkn%hA1M82*RaD|Q{0m2tpEb-kc=YYZk6hisJV&L)J zSzC@`4#F3)J_Io2F{uJc{DWt{#G;je)-%Fcg7Cd8eNX6nM>u=&5*aFqop`L?z_z{s zF2EV!@;@>XZMJaYKyL>S0}yM=%IqTocmPl9L}(QEiqX2 z(ycm>co|$1f9e;a2=wf&f8EltoBZ`Cq6Myas~+BhRn>VDE552x?0DzM{I&0x6>+5M z$8+)o4(rn!AhF7xk&pl&ADZ^b%c2R^KSBsN;s1^`4;N$(JG~e?Zmf~q(n1stX;=oD zg_B0g!ZJO753|ha=vg9{RZMOC89o9E5AwtGllxz*UZEyc`Q&TDDuIILLI)_B-xd(6A4le!A4DeG1o;W47Ln zMe)h_p|S&y-*>7As6p+zoHjfXZyN9x9{!7MZIw^whePD@2@w*ZspzYEbMWThZ%E$S zD-1(bjR*J{8yb(va)K(udxXu$=lwMzwBuDxN50rW+~BeA*l14w-gUQwEnNFM z&#sE55HVJJ_iwXKeDv{%U$8dZ?`%PBQT6eFx(;G&nZ8*m>T|hr*?ZCa{vCcFc_b{U zz{5-1-d?b{vggp?e#OJRahu?l{6E(DM4^7&|Yk4K-a+5UpAK1Mr@f~c1yw~hI z_F~Ex34Zy{{8NN%#1=gs}t9d7%>w!&I>pRS?fgMSEfOOI+Ww)f-I-n4o4(TD8$ZADX=m<9`=YI#r6E(2* zHxI5a-ZKy~ym|X*@y^3{Y4@sgN50K?V~ZpuzsYA59nJT>@~(LQjq|1#7>|7&UpAjV z^8k~6cL1@?uAdlRny!DjC8S?-^kUmU_rM3we!c4C!R}0Y2}@_l$lRc2)7&=-lqi^w6Q;BPAU+bJ3DhkDfRuRThqQ zCzg<{&o*5vbC};YP-r5HdxVQFElP=bV|4J7Z$7r$D12{;f31*v)U|Ax-etj_#C=B( zI!48Pe(h>`%etY!uBW~}hw`NlPTQ_2^lf})Sk&Rw|6!S3b9l7!%icZ4xCPzub-9}= z+T7n%ulBxIw!9@xlCb^-XYHkzw-i*(E(?t_HNSg8^xd6AI{P>G8((^>+BK*?WSuc_ zgUd+#2cLP>7uEIT#zf8{Q=Bdy2wLWpbN1YZM$}_X`DK4|Vryw@x!Xkb$V(wxMi@bR zP84zB?hgB#Q9cDrQ)^N#q`Jmt+x|AxwdGe8O@I1yyk|V`rmgy0=c~7C*n=e~vL?uJ>e6-reGrpm-9WmX^q48&w_y%(^R1o(_6jxMskO0C>P+ z8|$#WI-5ZCxN4GYgEFL^Wg7`7U{(WA2({Xo$A7v;{!E9{#rgkvouSx6S%mO^IG<)% z131K9A4*m V%~+L_vJLFFjsPA2ah>3B{sWmIqI>`V literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/phoenix.app b/phoenix/_build/dev/lib/phoenix/ebin/phoenix.app new file mode 100644 index 0000000..7a8cd5e --- /dev/null +++ b/phoenix/_build/dev/lib/phoenix/ebin/phoenix.app @@ -0,0 +1,102 @@ +{application,phoenix, + [{modules,['Elixir.Inspect.Phoenix.Socket.Message', + 'Elixir.Mix.Phoenix','Elixir.Mix.Phoenix.Context', + 'Elixir.Mix.Phoenix.Schema', + 'Elixir.Mix.Phoenix.Scope', + 'Elixir.Mix.Tasks.Compile.Phoenix', + 'Elixir.Mix.Tasks.Phx','Elixir.Mix.Tasks.Phx.Digest', + 'Elixir.Mix.Tasks.Phx.Digest.Clean', + 'Elixir.Mix.Tasks.Phx.Gen', + 'Elixir.Mix.Tasks.Phx.Gen.Auth', + 'Elixir.Mix.Tasks.Phx.Gen.Auth.HashingLibrary', + 'Elixir.Mix.Tasks.Phx.Gen.Auth.Injector', + 'Elixir.Mix.Tasks.Phx.Gen.Auth.Migration', + 'Elixir.Mix.Tasks.Phx.Gen.Cert', + 'Elixir.Mix.Tasks.Phx.Gen.Channel', + 'Elixir.Mix.Tasks.Phx.Gen.Context', + 'Elixir.Mix.Tasks.Phx.Gen.Embedded', + 'Elixir.Mix.Tasks.Phx.Gen.Html', + 'Elixir.Mix.Tasks.Phx.Gen.Json', + 'Elixir.Mix.Tasks.Phx.Gen.Live', + 'Elixir.Mix.Tasks.Phx.Gen.Notifier', + 'Elixir.Mix.Tasks.Phx.Gen.Presence', + 'Elixir.Mix.Tasks.Phx.Gen.Release', + 'Elixir.Mix.Tasks.Phx.Gen.Schema', + 'Elixir.Mix.Tasks.Phx.Gen.Secret', + 'Elixir.Mix.Tasks.Phx.Gen.Socket', + 'Elixir.Mix.Tasks.Phx.Routes', + 'Elixir.Mix.Tasks.Phx.Server','Elixir.Phoenix', + 'Elixir.Phoenix.ActionClauseError', + 'Elixir.Phoenix.Channel', + 'Elixir.Phoenix.Channel.Server', + 'Elixir.Phoenix.ChannelTest', + 'Elixir.Phoenix.ChannelTest.NoopSerializer', + 'Elixir.Phoenix.CodeReloader', + 'Elixir.Phoenix.CodeReloader.MixListener', + 'Elixir.Phoenix.CodeReloader.Proxy', + 'Elixir.Phoenix.CodeReloader.Server', + 'Elixir.Phoenix.Config','Elixir.Phoenix.ConnTest', + 'Elixir.Phoenix.Controller', + 'Elixir.Phoenix.Controller.Pipeline', + 'Elixir.Phoenix.Debug','Elixir.Phoenix.Digester', + 'Elixir.Phoenix.Digester.Compressor', + 'Elixir.Phoenix.Digester.Gzip', + 'Elixir.Phoenix.Endpoint', + 'Elixir.Phoenix.Endpoint.Cowboy2Adapter', + 'Elixir.Phoenix.Endpoint.RenderErrors', + 'Elixir.Phoenix.Endpoint.Supervisor', + 'Elixir.Phoenix.Endpoint.SyncCodeReloadPlug', + 'Elixir.Phoenix.Endpoint.Watcher', + 'Elixir.Phoenix.Flash','Elixir.Phoenix.Logger', + 'Elixir.Phoenix.MissingParamError', + 'Elixir.Phoenix.Naming', + 'Elixir.Phoenix.NotAcceptableError', + 'Elixir.Phoenix.Param','Elixir.Phoenix.Param.Any', + 'Elixir.Phoenix.Param.Atom', + 'Elixir.Phoenix.Param.BitString', + 'Elixir.Phoenix.Param.Float', + 'Elixir.Phoenix.Param.Integer', + 'Elixir.Phoenix.Param.Map','Elixir.Phoenix.Presence', + 'Elixir.Phoenix.Presence.Tracker', + 'Elixir.Phoenix.Router', + 'Elixir.Phoenix.Router.ConsoleFormatter', + 'Elixir.Phoenix.Router.Helpers', + 'Elixir.Phoenix.Router.MalformedURIError', + 'Elixir.Phoenix.Router.NoRouteError', + 'Elixir.Phoenix.Router.Resource', + 'Elixir.Phoenix.Router.Route', + 'Elixir.Phoenix.Router.Scope','Elixir.Phoenix.Socket', + 'Elixir.Phoenix.Socket.Broadcast', + 'Elixir.Phoenix.Socket.InvalidMessageError', + 'Elixir.Phoenix.Socket.Message', + 'Elixir.Phoenix.Socket.PoolDrainer', + 'Elixir.Phoenix.Socket.PoolSupervisor', + 'Elixir.Phoenix.Socket.Reply', + 'Elixir.Phoenix.Socket.Serializer', + 'Elixir.Phoenix.Socket.Transport', + 'Elixir.Phoenix.Socket.V1.JSONSerializer', + 'Elixir.Phoenix.Socket.V2.JSONSerializer', + 'Elixir.Phoenix.Token', + 'Elixir.Phoenix.Transports.LongPoll', + 'Elixir.Phoenix.Transports.LongPoll.Server', + 'Elixir.Phoenix.Transports.WebSocket', + 'Elixir.Phoenix.VerifiedRoutes', + 'Elixir.Plug.Exception.Phoenix.ActionClauseError']}, + {optional_applications,[phoenix_view,plug_cowboy,bandit,jason]}, + {applications,[kernel,stdlib,elixir,logger,eex,crypto, + public_key,plug,plug_crypto,telemetry, + phoenix_pubsub,phoenix_template,websock_adapter, + phoenix_view,plug_cowboy,bandit,jason]}, + {description,"Peace of mind from prototype to production"}, + {registered,[]}, + {vsn,"1.8.5"}, + {mod,{'Elixir.Phoenix',[]}}, + {env,[{logger,true}, + {stacktrace_depth,nil}, + {filter_parameters,[<<"password">>]}, + {serve_endpoints,false}, + {gzippable_exts,[<<".js">>,<<".map">>,<<".css">>, + <<".txt">>,<<".text">>,<<".html">>, + <<".json">>,<<".svg">>,<<".eot">>, + <<".ttf">>]}, + {static_compressors,['Elixir.Phoenix.Digester.Gzip']}]}]}. diff --git a/phoenix/_build/dev/lib/phoenix/priv b/phoenix/_build/dev/lib/phoenix/priv new file mode 120000 index 0000000..70b47a8 --- /dev/null +++ b/phoenix/_build/dev/lib/phoenix/priv @@ -0,0 +1 @@ +../../../../deps/phoenix/priv \ No newline at end of file diff --git a/phoenix/_build/dev/lib/phoenix_ecto/.mix/compile.elixir b/phoenix/_build/dev/lib/phoenix_ecto/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..f33780e19051aaa35bf98216f5ed4d3d309f528c GIT binary patch literal 5750 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_ecto/.mix/compile.elixir_scm b/phoenix/_build/dev/lib/phoenix_ecto/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.PendingMigrationError.beam b/phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.PendingMigrationError.beam new file mode 100644 index 0000000000000000000000000000000000000000..d5bd98fd9436ebb53ae813322fe5b9e25d0448eb GIT binary patch literal 4992 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.SQL.Sandbox.beam b/phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.SQL.Sandbox.beam new file mode 100644 index 0000000000000000000000000000000000000000..0671a4d7bfe6ce8c7b1330752c9f303b2aa81503 GIT binary patch literal 14988 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 Ae*gdg literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.SQL.SandboxSession.beam b/phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.SQL.SandboxSession.beam new file mode 100644 index 0000000000000000000000000000000000000000..82cd0321ce42f1b3668646859f3eb196ecaf634e GIT binary patch literal 8768 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.StorageNotCreatedError.beam b/phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.StorageNotCreatedError.beam new file mode 100644 index 0000000000000000000000000000000000000000..6fefac139a56c81f6adb73f66be2738f060bcbda GIT binary patch literal 3964 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Phoenix.Ecto.PendingMigrationError.beam b/phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Phoenix.Ecto.PendingMigrationError.beam new file mode 100644 index 0000000000000000000000000000000000000000..7b2450880b492c06e35bb7883740609ceca1fa6b GIT binary patch literal 4192 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 bY5=MK#|k^rq#PA7zb^oB_aNK$ka)iVFo(0F literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Phoenix.Ecto.StorageNotCreatedError.beam b/phoenix/_build/dev/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Phoenix.Ecto.StorageNotCreatedError.beam new file mode 100644 index 0000000000000000000000000000000000000000..692d7d33de86aab852fbfc79947623ac71b165b5 GIT binary patch literal 3836 zcmbVP3s@6Z7S3cKglJ$O;i*7SC<>LA+WIIGM6@a>f(X`Pm?RUJkjxA-69S)$1t}`E z@@U0E0Rg3JA8rexsI0nzg0>cGt*%sYeN|Cct)QZ)EPE#jKDOHZ+WEdS_ul`Wd+s^s z-Z|&Y?1gb5Jf7XXnNblj5p2Q~9uL|wG&FQUI5kR#XW?{Utj>@c7?q{MC>AG)z}Per zBk-)iC>2Wv#6r7E?#jG)dj3R3pv$YBXMWvyH zT8GiGI#h}2fPyG%U>Xz(RE<(BMk^F|Fq88XKwkxgGK>(RP#PnEtth3?;FwOGq9O?m zp4#x78A9m|)E<(r9f|&(z1|>!(tTKF5usLe`WGGnP21_8h+!4HE<#TwTNs-S%Ktsv-;GHXn zC17%aj0cqn5U~uZ1@k{~IvC_C6X_eRs-XwN1OLv#ZMeeYT43WcDVPa=U=mf?R ziU)>}(78(NBHbi*NtAMmcu0T%sa)j2v4@FWAtBJgLn4>L98U2dp{rcvJXUTc$v|X~ z(2X-&y$_xQ@Mn7|s(8Gj!0n{^0>;VbAOk)`s%fiH7FfX2^7juU+S5I;6 zI6yEUF(5lYd_bcBjkffMaVRRw#GeFk8$h0bAV3@+*XJI0K+b?TTnfm|(s#6sIh?yA z_7;2uXu173oF9#|oIWLhxW@|6jC>u}OXC}b!}kz{z{tk(HJAnh^QAZSMbEwr6w-pV z&iQ)qMrx8i7q?g9$|aq?l}iT$z%fa9#0dGt2uDU)F_K8Q3jKNFIdKXZPBEP z(`(otGSKJr{0VsZ>JXDyhw zRbpvqCQce?6PNMj5rX4=?m&0rABZkm&Q+0f2@PmYKefRo6Qdar z3DbG-)WBdM)`m1iUdD7NMmK^~FcfMe6qbleD}ZJyjA4wn8k*Dtn8u9ufQ##ZIgE=u zMmqqY2A1RkB?!8li2?@rL4~FB-U&)zz@9;B93@Z~}j{l!L6Q>3qw7%=J#ceyb_Tu~+ggHLBK}(#{B}UeHq)=G`&wMyg=a;q}YA zn*dP@f^JHvu;wdRf)U5^>?FJc*ext&fa+<pu~Xf@*d$IAq5U&O_QXdV}ioM_j7c}b-)M0sv4{Wfyto8E=udBu_Q ztP0a6?cZ41IIA`3aGblphD@<*`|zg|H>SM5`1A<-onZLt0YGBJ+O5DF=O5K2d z-ILvo>q_7H@k;W(*L{=!T^n63_+*PmpY712@^!B}sE_nD5jStUWNiCNRyNSqdKqf_ z=~_A4tPMlklU>(&oV;0d=GMZb?B<2Hqb3-Uq8?wn6*sbdd~nai;+@m83$asc&)a>w z%aGK6;6HRwS4}|IZfA$;TL*f}E++osk-oM(n(Q1D<6-+a2ldyL92<>Nh;EwPf7StZOdc7W)@p z{yC4}s`tB>)JNCRanh}Z#u&eCf~M6q@p}KxnE1im`C@csY*VB3#^aNOZEwp&)4rM zkzmRkGB?5N(w20$OK%0#$2&GQ&RCoEfXSYJphGk2Vpq60v6c&hvq%*K0$&vOo$=LK zRqIRU$F~I|xy$6sS6yx&inVuiEvnix{c=|CM@!G>KR%(EICtKoyD<*2Kf+t1_n#Z= z_ny6S!y@efYCS*v(7fgoCl^UOJ(`P7rS!XHUs*F#uXnOOzYMcD; zMPvLDdRMJEUWP|}u09%ivj54&@@dMl?m&v6?FkN_+KKvL0a zUp@av^35OI`f1Ahz5QR2LP3H7hCHhnEXMq=H$YkON^iiRRyIwh!A2{R0tv|EbSthp zFj|2!Tdy5f%;rTm>Trg&thDU=oG5`xM>3e2n*g3R74T*zff8o{9}3RZQr??!Yt}&N zuwhLs%ef(Jo`2b?{rR7#-#O~%%B*3o=PWh5gfwQB*e-UUV0~&s8L5HiMAxGPZwjs9Dd9JT2Ljcp_ QY>Hby(z1qcKg5&&7b2$;8~^|S literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_ecto/ebin/phoenix_ecto.app b/phoenix/_build/dev/lib/phoenix_ecto/ebin/phoenix_ecto.app new file mode 100644 index 0000000..ffcc80d --- /dev/null +++ b/phoenix/_build/dev/lib/phoenix_ecto/ebin/phoenix_ecto.app @@ -0,0 +1,22 @@ +{application,phoenix_ecto, + [{modules,['Elixir.Phoenix.Ecto', + 'Elixir.Phoenix.Ecto.CheckRepoStatus', + 'Elixir.Phoenix.Ecto.PendingMigrationError', + 'Elixir.Phoenix.Ecto.SQL.Sandbox', + 'Elixir.Phoenix.Ecto.SQL.SandboxSession', + 'Elixir.Phoenix.Ecto.StorageNotCreatedError', + 'Elixir.Plug.Exception.Ecto.CastError', + 'Elixir.Plug.Exception.Ecto.NoResultsError', + 'Elixir.Plug.Exception.Ecto.Query.CastError', + 'Elixir.Plug.Exception.Ecto.StaleEntryError', + 'Elixir.Plug.Exception.Ecto.SubQueryError', + 'Elixir.Plug.Exception.Phoenix.Ecto.PendingMigrationError', + 'Elixir.Plug.Exception.Phoenix.Ecto.StorageNotCreatedError']}, + {optional_applications,[phoenix_html,postgrex]}, + {applications,[kernel,stdlib,elixir,logger,phoenix_html,ecto, + plug,postgrex]}, + {description,"Integration between Phoenix & Ecto"}, + {registered,[]}, + {vsn,"4.7.0"}, + {mod,{'Elixir.Phoenix.Ecto',[]}}, + {env,[{exclude_ecto_exceptions_from_plug,[]}]}]}. diff --git a/phoenix/_build/dev/lib/phoenix_pubsub/.mix/compile.elixir b/phoenix/_build/dev/lib/phoenix_pubsub/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..268077bc31197a3e3f1a150cb2268304952d52fe GIT binary patch literal 6306 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 YYis_R+1^aWf2u3O-o@wsFEiFo?X5F>761SM literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_pubsub/.mix/compile.elixir_scm b/phoenix/_build/dev/lib/phoenix_pubsub/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.Application.beam b/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.Application.beam new file mode 100644 index 0000000000000000000000000000000000000000..201f5c742eaecb26a25467f09e7148a949bc4984 GIT binary patch literal 2616 zcmai03se(V8lFjbga{HsNLNvdF07~}4-^*>k3nAI5*m4E@$5DU$&gGQGt-#~39V8E zky_tKr6}595wPL`6)9?UDHe5$_yAoOSrl8LDiwLG!YZzNCxqIbd`01W0h;^F#1Fvo{63e-4!CPc0u59av3cEu4m zSRr8jmUs!+U@|E*nF<;x!Avl1FaSe)0Zay90r&v$o&5Wy+)|a1=nB^vj&s zSrq1Qjq#x3z~@zo>xH5}YoL$s);A6qfG>{>M6b?5aSJ&fAm16_uMQd$U33DL3GDvh zu*(K|?pX*)fs>INs2WpeqM70pJd?HpEit9X zaT>*RAxIX2(PCmeWr#rzpe8<)ge8NrWQa{@#snpHQtHZ z;MgYpt$gF=BNyH)-L>M$AFGaUu1~m( zwjFp9Gumy6T8MECpEe%QUT&>cxKz3(g{wtP%P!4ojEK`f=4tMVBJhSgiXV2L1%i_-La~*eT_PjXJlac+`(bSad z%OCYfy*zFVdXJWrC;#ra^ekffYI@k_vC8ZD*w#Au)r;WSiXg9_Y_;B}G_ARdTw89v z;1^Winn!I|n_)?h?_ND+TAjsfO<`Q^)XKunI(uYFOyt!^yLzj<%&U$nR-d}t9yC1oZ$fy{p5Xqk z3Xh9_dHnsrg91c;G8J2svP0Ihc?sS<^u^FaLymr^Lus8&Op$FlT95s~HR@C<=RcQc z-}5iqH-AP0=XP1dcEjI~EqVN;K*KS1E*=~08<7rG=S8CJ-um8L!_8+wRc>PRTuoSX zP5Yq}S$%h&UU5INRM!4kjcS;HNzM-P+OIGLC=xhe7k~ZQCw;i`ny$<}gZk_?>wT-|wvUG+p((C+RU(4fM-T=R94a z{uoZ`Nnny)46dO-+7K{%8$M|(HSd%sotN(Mc!Hf56>& zIJxH=gL`}8+~N(5zFNhV!HU~`>9<#j_dPoGW7B(i3s#SPE%#{Y@6GhN6tVnj!`3Iy z^w-#B_jAYAuUzx=St)m@f3LA?VUx%2M;?8RUn&S}J%hU(-g-aQ7HtGeG@J*rjt}B^ zet`QP(HId@nI&biJZyD$z9yI~2kr?la^lh$m$NBU$B^J<0v-{Jik{^d>r~ffV`?+1 zvAWO*X?_!Dcq8fX+~amwxX}O-d?I*~fM|;V zCW;5>Fn2ABe{7}tgIQ8&=KoEeP^y?9(JXLxiD@$-9$&+dP)TT*BrH@KvM_v6Xh^0l nJ6tE7kV!?-aM1!sS{@(m=>9e(r)CpOY+L~5tpIz!f}sBb9yG9x literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.BroadcastError.beam b/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.BroadcastError.beam new file mode 100644 index 0000000000000000000000000000000000000000..628dae6eb25edb641e09c5ba79f8953a4e054311 GIT binary patch literal 3884 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.PG2.beam b/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.PG2.beam new file mode 100644 index 0000000000000000000000000000000000000000..83071b46541a572f38109bb0563d428ccad52da6 GIT binary patch literal 8040 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 D6{Fz? literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.PG2Worker.beam b/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.PG2Worker.beam new file mode 100644 index 0000000000000000000000000000000000000000..185f0e415ad8f4d7c6b350839e4913a056fb1ffc GIT binary patch literal 7004 zcmcgx2|SeB`=705iM))Zg-rIcO-O_qN>Z{!T3n4W^J18N-m#=4B~%x6%dZiIl(s9a z>Q+)|L2j1PYWb6tqEK4guHSjbXt}@Y|G)qL=YQYN=b3Zf=RD^*&-Xd!J9IGUsa5(P^V znM|%AOvq&Bu@FSU4V59VRKynYMO+@7$ALu>n9V|9P6-?<5=sy$lh2u+873335w1`m z4dJuc5}}k1m?3;2N5+Fgq=-buM(6@AF9eqGSc33Z;V{A+Zd8m^62TI1c(9^Qg2IH7 z7?y;?M1)M9kj>(ew7zNYD@7wSR3cR#57y=d_CP7Nw9Pjhp znFt7Rr9w#wTgZW#Y+!geJYqhumG?>lhjXO}EP**pbb!_o+a*FaER_P|!h|8B2$nR$ zCNY%7VWNE)QbZ`KRSGVIB?6cy;tEg;5Y%^EL3l_gSHP0Q(Sb0DsuWx-6ChkZ>@JZA zC7Ez68y2DdX9$D>*cV2bpUsjY%CV$KCNPZ;lp%1*7ZX6zwB!naQ(%te$lO~`v&3L9 za{x*V1|I^d5Fqq94u}p&6${BRI1K{`OLM~S&>?BqB)cUqmW9HSB}uYv$p!Amr(@}i z%Xli5!O#G|z6=ixC_)$>5GX_p9QaLS;HjX|n})$=j)qjNv3YU`r_o2lmh8ETXHXy& zh{m82-0%?94No(4!_#dU1iYL^WIzxdQ;650QK$qBh>9(T=(OQiDivERr{gpznh>_t z@eY3G9Xw41g52;JR1IFvAV8|0I%_F9zmod`d2I+wf>baNnP!L@MN!AgLx^;`xvDyz zqNRbMVoB=r@mP|ETm*zC0AZ@5ss?^0AR6Qg^h4A_DzIlF)t!n{XwbmR6TRsSEJ;(I z3A*TkE?Q6sI19v@iY{!o$3TU+K4B(s7}O^ zCV&c-G?AfBWdL~PM4HHHDIQXtq{G0f>Zz;hVoAD?XxOi&MyQb#GrXn-9gM68{GLk3 z$ZLsE;;~T}C=m}PoMMhi#9_#~6bo7+4o|UEypwdvQ;1L|!-Hjjli(|8iuhF1_}BP93=O@0%3gvh>83aiojIfiWX)HAa(%A6b3~LtY^|x^pl`W z2awItbq$qZNfyH_2urg3yxK`t3a&liTDz!P;r$Uw0Qjahfejbti@@eeLxePRZ=ikJ zm}oSx5z_=hnsT#5Tdi$rY#vJ{g=sM?DNQ61MsqnZ=Pyd6$d8mr5o?=oDZyYo`6AS& z?SNF!?;X%sKsZ3^fHVLR0HJ&xKH$Lg8UZp^*3rHu%K8*g zP6dPoWCh4tSx03+98>5Vu>tEItFSE<@W%j}4hZdMsjPznV-Cm;5IQER+eTTR3`zq) zsEw$t=sQ|RF`zc0db9wcwxe|_AWdZ*#jgek)rpRamZ%KQi;JMXdI1Q1P`_+g&jY`t z2wV*1b4X!f!TXpmVh0P4GQOD7zc4`j!F?fth7SdUfJQlmHp=Iarg$fR+TmHaNMM2X zdOrAt%pR6$UrRro$Uc>iq+TpVXJPbu1pK0pox)bsHi{y2C?YZ1h>aON942B$0;T&% zq>1zrvQf zTF-SJj0ElEP&k4W%@xWd3aL-Se)V z(YWkKpS|9E+$-_Uk_k?9&V3!HEhZM(Tc%|{e*SE)C?Rg_(W_~Xy#Gs6^fb23j$%ge z*YTpi-Y_aD@yzI*>+&5qIrIFjZem!y+B?N&KVzn3H^sIc!-tzC-n6oty%T#g&*A5# zkcUxfxAet|Dz|O-Jl1KFRajM)k)D=0H_dwa+R5~Gn*NGqeWQy%6neEys4`pHo>{Qt zG5tw`gLjT3`h8Ca@nwQ2PCRh9=;B%DUBNBRxlB%!PN$B~t(J`LOy{)Ozq3M4+_SCM z{N+;lAEla7J7a9h-JjaaDz0aJVE0V6n=|j}R!f%~^D|k_+ctYW&{wf3HxAqScwWc# zMRg>vqgIP4PAA9zE4z`SI+)cFcbPWEdh8zRlwTx4$C)?EZ?;{(@$p#Zp0Py)j|5D5 zl~q(r!Itn*v@YvNw+AkJ-7PpS{-0A*kM0wDz&V1Uq;o*TQ>TYx!8Pq#f;q7 z7m9CpZoj^wd~LDnyZol}ho2f`Lnx%=AiFzygX3hQe&Y|<2KeW|)#bo0*p{zjrw`{G28>b(c z{Qh_#OIF?HY7$VeL$*Lhw{4TP2G%{UZe;jvzM)3$xW9`)hu$^>uT8W|w7I`)RdHEI zY}@2yX+>d8KKt+_gS(BQ`3aeOT#nvvJxpNN?NsI0Oj=|2tY+X&`pw4mIS$51;QQa! zFDVm{e&Q3u1Iz|*Jki^0^?QU~uh)Rmym4Q9vhgU-! zBDVbzwx|zVxV`qb)*0Lgen`L3^lJTmmRr@BW?^mPR{F3Gto+yX-X*r{-n_Wq-?@CD zScRTVoTU=`#;%e@YQLg(qGtB?*<#G8`N*0?!nX&0&AE)O7fW?(vN)f|y| zIa>na=~ZhS7rR`aJGS-pJiLQ&qd#fp9J_rVck%1}x=e^wku$42=FKraFl$E+4koNT zN{%6h-s^rH-{2ovH0w~@<3`us&2>g?dlR=T2yTBTvAaqO6&YbBdUgcfSm&KW+S>WE zRwm7Qw5d4q>fWNRoP=zZEf09~z8PKeX6ru9$l~imRSj#FsTA(eYbg{iu`nS{I4ct3 za+Xzk|N3agxu}j0P)FR=hw@OB@^L%k?ML5y8>8|RQ}aU8segCq^}y!HjNG!h&#v5l z8g#qcbZpF(3f2<)mX3;b4<1fD*;L`z8R+Ozo4%rR(&I-7ZLem&Zfp*urj#0^sFOiPw6@6 zWM-c?@leetNcGkE-WhRdVX@p>Fs={R`q1B;FV>i zD>>U6+OAn#)gAJ4O3~>0Ip=m}WG(HDOZSxrp2h9qUGvY)3i@T&YNuAeRF<}Gioe&m zEg4RR%S$n)Wl0*N>Q7hN%68bn&#sOt`%vHSG+JPf&xoJ%a$r-Z3!I;@UhlRZl&iO8 zXld^FmOQDX?$?47`FG;*nuo_P=w2MOsql}Z1X3Jb>r=@iqeC+x;mG)*DJykhTo{IT56 zGRmA0IEZ`PAB^p-2=Z@BIezxE=MA}OkAEuG!#pDVqQR=7t;uhhUNJau@|r7TOTnS) z4tic7e2mT6=f5bUfe!H-;D=$ZB1Y1f8`qBnOt`d`5nm*ld!Or^mg^ABaT2ec75$-d zVB6&>Rq_4J=jC4a9@QMITGY5UxxQ&{t5fl=N>1Okw%_-wKFywL+T_x{z2M|-`Ptab zDyxcT@;4Co_cXnAElqGc>)N!p_)%2*GhN%v#odRO5k`5LzZHe7C^@qG5AU_(Z=3AX zHPSpkf5xGbv3C16PJz!_Tnu?RvB=Wj?7h{#d)e&^8>537`2LqlP5;E4>L{Jw61{>#uKN%0XTvDcQ<(RSo?qD#|LeyRH{VVCNjZ$(bV;dgE+`x86kzet3|;^_%h22f1*_LEq=W zT*Gn3*AsHP)W&4VKY~-Nd+eMja9}^V9-KneVMY25B%fe5$ks8VrwyOfiOPJO^4b9; zzq)t~3*n{QaL_UeTqHm)4n2rR;1q>Y2PY0>t+?zM0(y&x{3bI(aUuEY4)bH(_;0EC zpYr}wjArwMQka9j;)dG^EJVmhVaf#HUNFqV38NyFup%SDX&y9x zeeW6;`<{dTK@iHJz6FASrV5oV`QJE!G?H`t?27OD1igCx*eA+n;#Z4ixXahPzc-2h z|M;cIe~W+kru`lKVDWsh+D5Pr3x9W72*d5)n%4iwc`MBuo|{iI^nZ8l555ngGJpQr zGv5R`Y|KAw$?)f@%y|rt{k`uL`?YDqZ{M90++RHW_ZI38y!nmY=Bq@_KL|p(d=xw0 zm&u_YoA7tP?Qbn>)CrN1Uf_QPur==oH1eQ1BM1;qgB(qcA&baj@;Y)7If~3PAV+Xl za=Ba~SIo`g=5Tjo#(y_Yg7LQ&Nx0GAzYJ@HFR~sEiRY->Qr@|Q{}%j z+zEr366@pV9pWur?uxSt(i#m<8c$YVu!F;AtK-=I)urhB4kkx5i$`XPT)#} z;#3BMD~J{{7)q8@D&|JXq=-bs7V<@09-`zRA~C{dNfAytk|+|2r4k08L(hqp3D{Du zP#|IQS!}UTLIXl3U&xX15T-;bma(NY0hh-_#5|TDW+VoYGR7-aJ;7W7R|*SQe575C z&6~|eBoZ3X6R|ifkrWY!MYDJkglPPq!G{GnPc#h~@02YR0F>=wB!&z6Phv>88<8B5 zP{>np6Uq@u5-Gwb>PgtK2#QrKVF(30t^lc1_v6nKvZOE@;qt=3Cg#nf(i4dja@AXjrKcG*OZC9#84>lJclzuMmqj7s<=bSrI}7~I z)3G$T9#6r-us(Q)!2uXhFyR0Q6e1W0-l;I20xCnP7;KIfL^j7N6%bDU6@)F<34=(Tsy0(8iZGQ44G%mSLfgHqe~TS~Nyd~?BS-`2jMrj`kcS3YA5|dh z)sywGL_M@#!6aa4EW9;_89=j!5KU{0HDrx}=F@;@ASwpKw8r2G5WHCv3d7?UkSSQA zKCFSq5-AYT7&=8UqFNfDZ_*5k9|cD_WdT^o#m@p~;THf~Se(LxZz|poZ-G~7nFB2_ zR?QF3W27?5`hLp0q_-d zDle0bRZXVWlc!>dQ+GocI3N|TXeU7BM5qpfB^tv4ITS??a5faC0!M;SbQZ7%I=hMy zBCQ=jF;Nh~rq3)C;BdV2Nhv zG9%GJKhw~)0*zpa)5k@?(v0sbh)7jQ=K-nt0x}gJAr(i0b&3h%i_r2qAao6r0Zj&k z1EdE?U(FkW(n!slfYKBY`j`Ql1_%oXZ984fTY%CM5FU^fAYDMHO&dVAfKdH8fb7&f z+SUOOs_zKs-{q)2YR4MTgiWxxR5m9tWBn3UV+jUwEkJZYXuBC|9uz99XggGnjsdlY z@>2kz7*T!_AQUUgHmy*)C6Y-C#o3PAmajk zDoaY`AuNfM>ZgiQj!PrMsLoCfb3t>LzxyDmHd9sDl7b4XTx)!Hltb$6)o)_&MZ5J< zb?YXLMX2s*XrKyJ+cK3andp{7mB%6is>(}TK@9bu2!RPmWrFlQPym_McC>E{CRoTu z*DUHIbdKh!OLK1!w*eobLX88S!6!%r=v-k15GHSy?x>dQ(U9|T#sj(J(7)n9y>=85 z%Szx1Wnz_<{C|h1ICMC^L4s&d^!`2XgakBF2?g;Oyqg0J7$S@hP=cD#kQ)nxAhfXL z0){$$5Hmz#AsX7{+RTo-7e45&juTt(!Qfq*5G3K?8Jnqi;-wIl!=8;Qqo z9G6Q#pNZ>5U^uSR@l4jPdC0$m2#$ zh#b|T@8Qk?NkqrGC@O{v!q;Eh!@!SvFERhl>H&#qm0|Xb3e$&4mBmX!wr-rQvw2Sl z4rxC52W#lSr{31156wrC0v_jG4gdYDU#Gv5&Nq+FTDyl2(oFYjf6yOZ{AaOb%b$UB zE}2iB=BgcI_^Rl7^+Ka*{U=Np*#|BF(%hl}N$sUea!dDANxGGJ+O7SLae{Sb!OBTx zdfLT_@2w6msMf&;p3}21$oM_q^#q}jX1r-YzyIWsj)x+#acE_6ft%m-{3T_r?^kNs zn0gT3GtE^+R|g}FvMn45jLFgKB$yl`^VdNx7JF1dW0sJ{N@J>UI2&!k4@A1o3r z+;h`?Ohx_74stSS>)^IMgo;>Px3yqe7aUSKwdh2PUqisL{;f7?ou)YjFK`)Ylk;cJ zaE^bm?TgLGRD(yc8XFdUZdyjZWV7xL%PdTg)O0O3-&CAsa`v}WE=Fbt{laVud`k?t$Sgg0_q^5gigR{zqV7bN^6Hq)wuOS5 z4C`>*;gj7b=;qhA*BOPpFgmmMNd{*1#Yuy6I(E#*Hdfpq-z=TC`cCcX7aR23D32^@ zUqj4hXDQo!NcPzng8R4n56^VjPa8KVOOdrVw$Hj7opt+isfXpVMO|%M0=upDM%_?+ z+A%5lsSeW6vWp!*$E1p{|1rGs^A9G^dZ3I3PG^ew+Y?0}xW3h~H|;dO23HbyI+u#F zvZlDYtWWvmp8a`vo>LHM^S3FP6#Nl7{~Whk*JhT%5i2^$IN!=A%h6Tc4j@dm!;SWk%sz zk9`mH9xs_@di?8X(XwNUt2C;Y>L+(|O#B^eL(U$qT3GX3Sn9U6YyCN^O#w^Zg&JZ* zX58xahg>ovKRKmL>pJ-IN}h5_kXwGZ^Cc^Tdn#nzWu_7<0iOl{_h=#@zyYpmmy@2_1hY+^Cq zJ$5}la<%!;xrk(gv!`dCI?4AfU)ILX9C7WCNOVtL8gxDG{YTrp=9MM5Qv;j5GVGhT zEq6QlWaA57ZC5(~nS0d&ry-xv-{j_nHhn8zL|*;8F7P3AA^TFSR-AuHOQOB~ui5ig zj2Tuvsw>_0+jL>IUGZSyt)ch}x^s>BJ*jX(ptsiBkSu3e$d^abkm{P-4>$e}G-G5X zPp@AnF0!SEe(AhX%=l^5*d@P@w-;wdTnm5N)xD}_^WKc|cy>4sFS}@W)pD#k?r`Y3uI>G=A9oiLI<${3cc8o9 z`SrKyr@pYa&9(~gq#xW7s;piy_$+MyU8hdNneUXuic3~!CXeDnepw^jOTJ|b*M#N? z_UhW?o8Nd*AJsn==kd(jrd>C^?sQc_+X|bvr}W!(ZLwdJnEtzNQ%7C{a2g*soj$`# zt65IHb`M!mlUP)mc#PBN4evIJ*-V>4>5G=E7692)Mt zevLjRFF9jA_T!W{$@UFfR(sj(H-7o>@?PbN=J!{2Y;aum(mEUCFyM9|y)Pn}vG3FU z!w;%9U~ez`#mFo9@u*49I)|xglF^)-{=Rh1fgi4~jMO|IO4Dko8P@Hi$;un3OLOzS;;wPjc6I*Y!quQ)dDq(i=w!_zK45k40*;&wN#pxOT-eU{3tYG?ND3!S=Z1p!J7-yq>V{ z&-Tl)rGfp%HdV8hm1f^|+xe$n zI*9deTk=BZ1$yNjylCfsC(ZS0`iaKh4J!&?S2wjT%AB`FQ0LGvDw5`=zYbb@F{do*ZF%xNLb5`=LIzJXU87`h((_6U7ry{eZ%V{iZ{?D7^PT0dSA5N51oSpoM%*(Cb=v=$H z|J}jN)`2{|St<85s}N#p`_m62hArKDY74JuEa4w`<1V({Y*w7{rC*X!GOU%*RNYpwruZ{qGX3jUco1o$fh0M)~{B3 zKGw*;mAAY7$D#D@J2$74`9C_eoym_RyEI~R7rrxolCf(3{YdZh-TOW5dp)--)G)U; zl=u!oz1Gir-lY6NDtlyJb2??#sOL!Tk^I5amrj=8-xcWNLWhSIM@wtA`n6fTh6`#> zKfsk{z4WZ>pjUQIDrj&HeeW0-b^ic}`9ih?BuTMo%*Q1s<|i-n4sW381a}_vNi{z7 zD%GqPp6j_yH_VklUlDh@IKQH=y3N|5Qgc`Dv(d83)jz#)3C=5CSCzcYE}s?PasG&9 zP?@GYTu@h*r)}2iVzbi@KbQ1DpU%6PI8coZY#4l9E36$^@W9@U{ZQ1WReOVUs3k_x zO5IsW{*e)^TX1)eZMWI#mA1HDyAF$4Cfdvj>4T}}>lZvpIJEZN1M2Ov$a_~BivIf2 z`2o4#@v14sd#E4Dy5gF0%6g+gt7%(RPH)cL!|uy}o*o~__Ab02s_^ljw9R&J<3=;( z>((yFgV{ASwtMuCqlbt01lg9KO*+ zce8qbIFWhU`p=|V*zWPtpKIG*f5|yMTDJeqSi;l(xTZ}BmH7eB9=~}q{lV~9@VA9` zbP5NDufIEXHY;(#?4?=F^Q}KCy`mf5XMf~`3B52cHCxvECHlq#e}6$Udp$&TEyVyg zG3@;;N@Cuo=}2t&`;cWy#`Av?UOLPM_26@a@V30ImlK47^PxKQE>IqI+P$0U_I}9MC6~FY3&U6Zzfua7lOdb>AC=zoMz^Twt$`?6~uQ7XPnlqh7cXqO$=j!HcADx)w p8sjuk=j7nz>foX}B8+RR*nb=kFp=Pb3}7PxLeJn>-ESDozW`A|>3jeH literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.beam b/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.beam new file mode 100644 index 0000000000000000000000000000000000000000..2fc8ee988eaa37be5e67c58f18362a2948ca1fde GIT binary patch literal 15300 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 A^Z)<= literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.Clock.beam b/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.Clock.beam new file mode 100644 index 0000000000000000000000000000000000000000..f041aa94fee7270cbe850ee5848ab526af8a1ddd GIT binary patch literal 7652 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.DeltaGeneration.beam b/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.DeltaGeneration.beam new file mode 100644 index 0000000000000000000000000000000000000000..b5b31d96a96efe08285795824bb25184a5d97fcd GIT binary patch literal 9196 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.Replica.beam b/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.Replica.beam new file mode 100644 index 0000000000000000000000000000000000000000..482d9382811e084f3f2279ab673dd351ed197b14 GIT binary patch literal 10372 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.ShutdownHandler.beam b/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.ShutdownHandler.beam new file mode 100644 index 0000000000000000000000000000000000000000..3dca7ad791cf8e021b0791077bbbe6e41f20dcb7 GIT binary patch literal 6976 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 Ke1ZRDpZ*K^goWb( literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.State.beam b/phoenix/_build/dev/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.State.beam new file mode 100644 index 0000000000000000000000000000000000000000..08fd1b25673bdbc6cdb9c1bc86df325e1aa0915d GIT binary patch literal 53116 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_pubsub/ebin/phoenix_pubsub.app b/phoenix/_build/dev/lib/phoenix_pubsub/ebin/phoenix_pubsub.app new file mode 100644 index 0000000..de04bc9 --- /dev/null +++ b/phoenix/_build/dev/lib/phoenix_pubsub/ebin/phoenix_pubsub.app @@ -0,0 +1,21 @@ +{application,phoenix_pubsub, + [{modules,['Elixir.Phoenix.PubSub', + 'Elixir.Phoenix.PubSub.Adapter', + 'Elixir.Phoenix.PubSub.Application', + 'Elixir.Phoenix.PubSub.BroadcastError', + 'Elixir.Phoenix.PubSub.PG2', + 'Elixir.Phoenix.PubSub.PG2Worker', + 'Elixir.Phoenix.PubSub.Supervisor', + 'Elixir.Phoenix.Tracker', + 'Elixir.Phoenix.Tracker.Clock', + 'Elixir.Phoenix.Tracker.DeltaGeneration', + 'Elixir.Phoenix.Tracker.Replica', + 'Elixir.Phoenix.Tracker.Shard', + 'Elixir.Phoenix.Tracker.ShutdownHandler', + 'Elixir.Phoenix.Tracker.State']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir,logger,crypto]}, + {description,"Distributed PubSub and Presence platform"}, + {registered,[]}, + {vsn,"2.2.0"}, + {mod,{'Elixir.Phoenix.PubSub.Application',[]}}]}. diff --git a/phoenix/_build/dev/lib/phoenix_template/.mix/compile.elixir b/phoenix/_build/dev/lib/phoenix_template/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..b9faeecb203c7876bb9d63a1a5b4874b88759674 GIT binary patch literal 4826 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 Z!TJARJqY2c3S2J(0RF#)IJBQY_%C(9w1ofw literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_template/ebin/Elixir.Phoenix.Template.Engine.beam b/phoenix/_build/dev/lib/phoenix_template/ebin/Elixir.Phoenix.Template.Engine.beam new file mode 100644 index 0000000000000000000000000000000000000000..ca492c96f179d36f84660118134e75ccfa719c9c GIT binary patch literal 1956 zcmZ8i4OCNA9Di@aF{#000|rJ!Dx@MCWQ0lRa3Yy#OQHBkxAAs29^2k~y!XZ?YEcAf zY9RQ5i3Np6NmI~7#xYbp2v{Dh)Fi*)6lKRziWvgtx^IGg+;e{S{_pSqyZ?LNyZ?Ld z!dI5XB8YeO{N$u1NnHAD1VItE+wBsEC0hsw!6-Dj6d(zQA`Mt+i=G3DWYR>Cph&AF zNF$}y*62BoA#!XSU}>DP(u4)n7y!)x9EuGMz(G?C$7-#HxN@V7#5sZ@S)EmnGZY&G zNu8B4*epQDa*Pe1U5RA0M@ihD1+?M za0D$9VG|^JKoW9V`orlA#%n^P?%zKH+*W6t}Y^a#I?4=h~g_SvWU&)MrEA-p-3lH~Ae(Qa>~3^W`_|udLX2 z`|VGs&FK_XB?b!d>zysO3p&kjPbq6%?-k_!x+PJ6IYjq$*udtQFK1Pre7^eNpf+)2 z?m_X)^J%}#TX9wpc4uWmhoS7_`~_dF8cIDA zEo>^jE8bn&rkgT7<0kibR7O{eY2KEZ>m#Nl>6>b1ec+dHip>$2{b z9j@Nkt32b~(|xtxH{*EQ+6r4z(0wOyt)}%@5>RS_veuN0jL72}o5Hf?%m(+`wuqC9 z-d^$8X4e7tmH262uC6`UyrXrVHuujP{60}Q3-_tQvrn~-YU{E_@^TDzWY-sps>tg! zE~tzAAvW9F@2a4ASO2V48>cN!NuIjIHn4sBp{a7wnUdbCKdvtOJ>$T4Sqc3czI*+R z-DPQ)uN9olX>9g8@7<%bpI78}Ztd5s^#8>=Z2G?9(CLczG}1M1{e_;k6=h|=DGXdo zOT6-am?T7R@9cm4NNDJ>Z693v^NFXMmOH!XhLFXQ{MoYKwwklDEAKaX%Q7e2y!V1V zMwRluYyGicT0XJzWYPY<&(2)JUR?N8)l#aaWR}@39AN>=J`Y-~YZRdi0@C$Py;I7fF#IFBLvUa4>(TjTh0lk+zEFef)hYgh2h= G2=X^#b;jNR literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_template/ebin/Elixir.Phoenix.Template.ExsEngine.beam b/phoenix/_build/dev/lib/phoenix_template/ebin/Elixir.Phoenix.Template.ExsEngine.beam new file mode 100644 index 0000000000000000000000000000000000000000..b579ca0fd761d82f5911c062da4e0da30dd85a8f GIT binary patch literal 2052 zcmah~4OCNA9Di>EH;|9VhEQra@S{>;L-F*1$_9(GFsz9dweWU@B&|sQf^J?ww$Dj-Bo~zkBa~|IfSk|KFSV z;=*VI5e>$xRWGRc%%>3qaSsm<|0E7qn<)pyMrjNTNmGufMWn@QCU`PR?cmgO9z~NY zaGav`435_lJkL_OHlF0HTE=3f%w(;Ow6dfY=<6Cuhm~P@4!7v$lzFuq2@iSL(rblulrD zq&Nt8q3ArEXYi#q280i9{D%i|a3n>WLGHT9(d6aPk=|WpB$!3<=DoQ_4H_bs6$~K`CRVpQ5)+mz@u;eI{FtAva0x+*o z3Z+1pE<@1rF_?c4T3dw)B=It|(GSCvLa!>B2*WT9Rxb^e`38BZr2=V{LM)SE=ph)} zHyA;`f%cdJy?CF%Q1{@os2ddVD2%m{kK!UM)su;TTvOh{QIA;3kWgMQ;if8hK`ugc9-?kFjLK#~p)Cq0LaA|3D}JeQkCfxoxcsR5@+ za#XL&c!B9w_^s2%F0R%k1nvtk6o-X=c#ybuQrNP^`)I>tpQg(xO;tnpqK6E#r(_pM z<1S3T`^1_@TBqLV7H({4+EH-GuX%3ju|rf)ud#XWD#hl``MK>0R`!Q6?)N5cc(>OW zSYkib5^!+tE!VzDZ6zCyotJN$&?&qT)~On=*}cu;G9K!FN&5Ek<45Z&#v8YX_x})9 z{q^%-`G2mf9B$53-jv;LJ16VBG=tBHzu>1^=CiKGFC_8Gs~vxG?YpGw-&f&`DCvZ_ zueMhCvGx3T(SEG(^N)XBIYE20I%#fOY2as(g7!q?_wMOPpD;b^MPDX$+v?6;p$kr} zF$M0vIeAvHDX~u?VHTg=Tc^4^QJea-_m#`(F&o^0zb^^SYW?EU^K(irq*k5oswfjJ zoz;`!bG3^vrd6`@QU$$a9RA1K&Crert5IquNrgVw?)U(qdX@ z>!xl$c`W_h>U>w+wW3pdXWI_P)E!oRIdyQbG``^6ll{AXn-}-VcOO+oW=9vs_e}cc z+Jf7bVD;B)CwGJlWRUZgYI;)A%NwqmKGGDnKQfp|j z^K$dn!g)m2@*<_Tv*qfAsyBbaTSL1G(JQg$SmD~cx8mu+jbo2Y4N>Z@#!WANq^CVD zYD>V&TOy{u@z|~Otnp%FcE_YwcC8BAn$gwN&?^c^p1IGJl67{EX@NU;#=806Por~> zFFcWwuw&V(f-m|P7d2EQJX^D=<>zKqvTXL5f&(*q^h?~?So58(JF!hG-`PAgDbm?Y z4I#xx%TB8u2`11Eo1CB%gGkTwhieU_)qWp+W-In literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix_template/ebin/Elixir.Phoenix.Template.beam b/phoenix/_build/dev/lib/phoenix_template/ebin/Elixir.Phoenix.Template.beam new file mode 100644 index 0000000000000000000000000000000000000000..bbb07f9cdc2de76c8fd265b1e257661a4630c18d GIT binary patch literal 27272 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 b^mg`kLFn^M2TCuX+4U{}8~_KmCy?~tamYi< literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Adapters.Cowboy.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Adapters.Cowboy.beam new file mode 100644 index 0000000000000000000000000000000000000000..9d591ad3566a38cec68746043b0ec0b49c096225 GIT binary patch literal 6064 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 K(GvzysDA_4ATQPc literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Adapters.Test.Conn.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Adapters.Test.Conn.beam new file mode 100644 index 0000000000000000000000000000000000000000..a641b68674d08bb33972c12e55b6bf7484a17325 GIT binary patch literal 21564 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 K|40)-*8c%DIPRAK literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Application.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Application.beam new file mode 100644 index 0000000000000000000000000000000000000000..70e2a85d1c448322a89ec2d4895da697aeb8810f GIT binary patch literal 2648 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 Z332)Ra*V`h=;6420Pvo}aOy?Ge*z?M6}JEY literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.BasicAuth.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.BasicAuth.beam new file mode 100644 index 0000000000000000000000000000000000000000..2198554a9debcf665c45bb95007c40c4010a606c GIT binary patch literal 9320 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 O{uGRif|C)Fpz}Y%viimV literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Builder.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Builder.beam new file mode 100644 index 0000000000000000000000000000000000000000..72b60c1743cf3b0419022fda0fae16b7ce9e634b GIT binary patch literal 20736 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 VxJX1iX#M(NfBfJ=khuA{{tvh6G8g~= literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.CSRFProtection.InvalidCSRFTokenError.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.CSRFProtection.InvalidCSRFTokenError.beam new file mode 100644 index 0000000000000000000000000000000000000000..3f2c8fa3b05c2f0f0ae37de0c5e3015a61f85ab5 GIT binary patch literal 4280 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 KUN%mhkoezYP0VWm literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.CSRFProtection.InvalidCrossOriginRequestError.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.CSRFProtection.InvalidCrossOriginRequestError.beam new file mode 100644 index 0000000000000000000000000000000000000000..54027aab26c6ea1e916655c648361830c4294c14 GIT binary patch literal 4256 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 Lo*yYaD}w(YIMk|_ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.AlreadySentError.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.AlreadySentError.beam new file mode 100644 index 0000000000000000000000000000000000000000..065abefb38f6f9d7a6a2f4002d0bb5b723f0b662 GIT binary patch literal 3624 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 Y=&P+3Fp~2%w2ln`eSa~V@*Lv-8%m7i?*IS* literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.Cookies.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.Cookies.beam new file mode 100644 index 0000000000000000000000000000000000000000..1f22c3522ea089b5f3493b909e0c12a975c0388e GIT binary patch literal 9940 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.InvalidHeaderError.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.InvalidHeaderError.beam new file mode 100644 index 0000000000000000000000000000000000000000..634e8100fb1ce899986c0e871fcc448314177b1d GIT binary patch literal 3648 zcmb_fc~}$I7N5z45Rl+N6sU*VDl8_8Akj#WhLIAb0h~kdm zMg>Gfw4z8wY^{o@RII3tqPC)~)>aTjo-InPio82XQ0wdazW&kqzTez?&wlRBoO?1S zCe9mzEd7FoK~X{KL_Y|E(?&){ZnK?*ay$p8JYwaVG!Fqu5FX(~wnUE0!Z3*pql6Si zQu!hgPNb3|QH?~crtlPv8dE8yq(X_yu^Jhsq%f&Ojmes@93@GqRU(CKdTFYLkg9Q# zP>B^1DMhNh08y+UWg0mqR;ekCR4v9Rxr9i2n1-oE28P~CjYwqRi$qPv*o1^eA*L{y zMv9eUIZ{kX8&)bXl}eI^>5M{iF^a(CN`tP`LrkBR2>1{wB`OsgB}g!#FhV7wFa@c` zcx0wHMIy_@a$_+%$)?w0V2^Wu6@{m_J4nXe%bgZiNR({5KQnPcjuV&+2mrOw#psR! zWk^8EFtFeC5CowB^m72f3BVjiDGnxm%r7V=ggKH{KhV^X-ZsLb}0e+i) ziNZQ`h8G2r17V?$VKzGB z4l?S62eYm8^42KKwyxxGk!lY2Lj^W=62@ROg72~X2#RIU_JqY**0`0Xe`XOHIM+)Zqzeizon=^ zZ%-upv!nv(S*7a>1`k*9a6<(d)igDJsTn{@pm)SfXK2k|ePI&ljWrC`W-q--=;f#p z2~3-@DWYAXd)(^f^}ekakF>iDB02GNP?<&a8+jvKV=Axt)c&2q_tNWMCkPxxlF|e) zOr?DSOah?Kfd}9KK<_(oN{N;b8EZHtQc|Q8lvAx)Dn%*)nZmSVffPLfJd7@!T1!BXXw;+#SI}ji z4vwV)aY?aED8e&Q1$=tSa0wwv#Zx`w$yBu#XnCsANm7jyY3^7yMyNfN=_E$rIiBFw zP*ZRXxmhbJ;u_7*tIAXjPYzq^0zAU9=o?cmw`9zWf;rrG|>E8TYQ-4JlRap$h@ zI_)9^JH^?_XXSU2rW~QLyw{ zSHx6aR&>wAEu0mokK;M-^(rcLdH3#V?|FP)Fjp%MHLI(;eR`Q6GUT$ejl0lBs7tjI zZY}e8y6WhKzOs9B@0H7^hnl2E`KX5r>sU>VHR*Ys{U&?j;aMNq4!TVFxF}#>+U~)` z&Hm>EZh4s{j}-X~VshJ0;d^9OeS4NBIhqRAZd$O`HrlE)MU3~)L(bU7GW-V9muUvp zb!EBW4Hr*)pFHZ@TK=Qu{P7dwpL{uXO4v5du>=16ZNqry@s`}49f1@-GgfOuy2%nI ztBQwQQnus^lny_ar}+7yr)qT9ymgt+14?QfQU;wSH%nKJDKxJot_2+Eu&7daXMV_k zkkh$x2P?;J$mxTMPqJ^VLl;H2p1g9v_d+Q3qDkZPq&0cpKw|Z|*6z~kAMMUQW=Se{ zWU&|)D51Y1i_>xC+2V%lXAa+JJ@p`|>Z$2fGvwxh$IF!iEs3R6 zXOc4C{VMdNBzS1a!2FI~76<1=d^?`ovt)k2E^TG?sqX{lm#n_FqP~JxA6FB#xcBa5 z=w{5rlO?lTOxMr+?8Qp^wF#%T%;l`u%1)Ye?0aQ2CnDuptMqbAar>E*^Y%0A`#Ofc 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.NotSentError.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.NotSentError.beam new file mode 100644 index 0000000000000000000000000000000000000000..e895addd6c2135fb202307931f3ccd984d1cf258 GIT binary patch literal 3664 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 C8_cW# literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.Query.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.Query.beam new file mode 100644 index 0000000000000000000000000000000000000000..c5621673f0d1ac5486d6d1bfe54f8dc319837456 GIT binary patch literal 17752 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.Status.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.Status.beam new file mode 100644 index 0000000000000000000000000000000000000000..40d16849c420668f01ae152d6c5d67146d09fb24 GIT binary patch literal 18900 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.Unfetched.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.Unfetched.beam new file mode 100644 index 0000000000000000000000000000000000000000..74f8a405dbb995d87c12c3364b41f69d8f4f5f72 GIT binary patch literal 5600 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 Ipi?jZ2kYZezyJUM literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.WrapperError.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Conn.WrapperError.beam new file mode 100644 index 0000000000000000000000000000000000000000..35b7c4c900d7e9195b6201e6a244d2709a864fc3 GIT binary patch literal 6072 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

  2. ^HQC#Crp4Tp3X9L=uY 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±;vvFvu`(G{2my))Ar%G&@R4g&eQ&^C@ecmAUR&4H2%0aQzwK3U7nm z-P!|Q2zSx@5C(&Z4T+mV;-Oa)o+x&$8o1HDS< zci2MOccBz!NW$R&(3|836ZYq>k7;x)-KYC}OC+NlNmfFVm5^j5@OX@0y{)*wjB-T! zBGR`9(ieispWveUK~EUcG#nM6&@m*eH$QbooGXL*7k|Y8^e|@so@3!5t1W1Q!{RZn zWV~N5k2rw!uFe`GboDiTKom@Nht0TLt1i4s5rk`RB~-_MA}g}%aB=qr=rCO1 zt^qtf1>PvY6R{Zg%wh~4dfRCnzXLllZ!#4;ihwu52=K@>0-ifh5#Z51e(DVKF2I8m z&IIwDIDtwfQ(@$RtJiPXxOWGVA=pK*%aaw-KN}GUA&BpdMWj2=fGud|_SmS6NcUf3 z{q91th;&Dicp>WJrd|BXGvc}cuh-IjAaAV&Cco051s5XXyGdk2nDdt~XAeX?EcbZ< z*>Ydu%HO27cZV_yR3d)R0x~C%IYFlaBzFiWzuZFK%Q-QGN^l1^awJeOt_1J^J_3dY z?(*8pgc+#G|Ac`Heu+pNZI9w;dx=G^^U8-nqhoxi#9kV25eUM_L_*a%hpKf6nC&R6 z#kd&mHs1gVG(v(Zc&o6Undk*kouINVc>Fhc3u;@CMM#uJpo5lN4{%FSm{ufy;SNWL zOoe7z&wwT{D(&Bd5&ZfPwD3=Ufd>S9o&VnE!cZT&ru{;tooVSiEYMBjun^?hk>Rcs zFgOn%k{6--6$28Rh=|dDC`JW{OgJ_dwyp4eJpUmUgdX*4TnZ9s!A&0K8ySDS&#^u=AbA&~5H^nTy= z7*N}SEMMTEl!)yM@=9 zyB7T8*cVoj5rgrcXfPH4Z`j@|#j_@S*Jp}sBZC-w|DmzBvxJAJLI5UzUN!z5lna^P z=uZcSA|yuiao05_lSs%ZBYok|g-A@+hvH7f;t3eo=ZeI9c84x# z{vkG_KDHVCAJQ7sWkDwLe(-F<|Go%O1eW~BmOeeEL|`Z>q{RFK#0q(OE(AyfaMO*8 zT>CuqBOC{ApSlSATUcJ|E{n?YV+FA2tWs7PtCCg4x`UdDGD10^7NeX|E~sT_ZL|)0 z0(uhKkTZm%$HrA#L#j)`HqGd-AYOndf4b|L!`yO_;pPh#t{ zC!>?mEVMs50G)w8!=A&Q3-|!O?APo!?Dy;jb|ZQVdMi2z9gL1dN1>z9F`VTb3~M3F zl4ZrRXJJ{cEIbQf5m`zsWtIwSEP57t4m*jR%s$56#SUffW=FDP*m3Mb>~NG7%9`WP z2|#T|Z9#uTe*(mS{=hBZHt-POurydGmL?|)U4_1du0cNlGJz~054gz6WM#1~vIymOM+CCCidwUSM8i7BY*N zrOfNh8_e6xYGw`dCbN>Wh-1xh;1D?O9Dw7=@!}9UZk%$?O->aWKzpHyXbRegL*>vo zJ{&)eFIocK4=sfrfF6jJMGr#Dp{h}LQTI@_s3)jrsF$eMs5hu4)C<%ZR3<7Hm5(}) zx`4Wb%0t_s?Kx4LXqFyp0%sQ|loJ6g2QUC0aAOW-4r7jDDzjo(ds+Kf2U&@n6izB9 zjg!vFFA2^4;2h;

    J`vK&c{g3ur$;HpOfl`uUVsD$YfRtedI2S|aqC4v7$ z!G8l~zbJnJe{+BE6EvVdgz)h1BB41#!u^CMsKD1kqF OzeH%z98pOjq5lC6@yMM3 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Debugger.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Debugger.beam new file mode 100644 index 0000000000000000000000000000000000000000..76551408c427ed35d71a7accaa51e292c1da3ab5 GIT binary patch literal 211524 zcmb?^3t&^#{eKTBauaVfGzH2#v_)=dZyRU>v?Xw93k^u1ysXc)X_NL=nxrNv50R}? zrriUF8&0EHWe(pje9z$=tB>h)8=Jb#%_%Cr=2TQRotygqoX5?*De&9=`~BR2o6q^4 z^L?K0dELjd)obVE+3FTHEL{>@lG?B!FHb)5#TTEyFBLBB?b*_ksBG!&@2+f$bo6(3 zM-l^VZ9TEBcw5_^P%4$^>F7^Il6{@=XkSlnWKTHKmxy$RQjze!$d^^R4aK^TbVpKcypVB{ih@fT z*REFE+Bza#@kFFeFl%eu)z$`HoqAiF>rGEBDVsc7%wgF=dRFifm_S7$ty3iZU2i(9%vy~&6)F2t?SmWYIV zV5d}DUnr#?NJK8^k0iwpTqd@*!6;~;JsL^r@$jBD`Wr^F=*e8t7>~sycMi|WMm>~B z?n=dtCPICE(A*21sHJJ69X+v7V(TGlWpHlOBcX64(cTe?#UhDAqOsE>TQ|oO;g+rl z%)}U+TfDj}|<7H1I1SfYT(16y3Ff-&>0^28(UTC8A z_QWDy2&sh<-3Ujj)uyB0O9WtZ-j4DY;^CTqGi~B!F~nX%hC;^D2dy-+ln^(||t1&)m*l3FMAB{N2{FP`dagVu&Y z)@@CuBGEqT+DL5E9yCrvtsfB@>5Wj=up(60NB!A@&V!!9`kUqVu6|gm3-%1}qYVjL z?h@YW3Tdg(#z=c_B-WkMIR&>eYa5pKZc4`3HIy=RUD=aNwIsnZ<LLxjT)(l*W*I-tSNd;!Le97FY2Q`0?v|( ztv!^c(aPm9mhjim^ve?1!8S7oAn{H*rpAUC;}Z!>ZmTFs*aN+)uP@QF3B!j}&_~A( zfwr+K2f2U(uNLx6R*objrYi}f}(QBHCV4*!d7`0(2^k1WI29Y27 z`{-~uqaAW!!0^W6sRLd8y}fOlkd&yxLLJfDFa>By^`v?u8ahu*8rRoPhnr*{?Mo?S zqPEmlgkwP%i3wvYE8!zi3lj*5Iu+m53k}&AIS_?-;rQlQ3zK{o9nD##J&FF9$lLp@ znbXjn^@7I4*1lA{9fJ0BZ9S5eg!9ud-ls4&hEn}WZ+`;AWT%c?snOYsrpJ>h$+fvB zrMJ-$rVS~(Ba%2slWZ@Y8_=#LjTLrYx^zqB(pWd>go80U^mNB&?CA(~ZtPCPkyrQ7 z;Rq(^jVBI8XO3nn>~LiRBUHT0G^jUgz$wVh5fVyQh$1Xg*M-qWr3;!o-z z5`0_s7o0=WeGBa?NhC_@o5((Mm``d+s3ncfDqz@Enyem!Rn1WmfT~xOCYXg(V^Of+ zLaCq{cnm`3cx5t3Vq3RUBWv66u~>F}DD zx3wrQFVBTP^uGu4^73cl-$vp}=Zz{Tb`ej#?S=_b!Q3kwu3Y=I4vfSXZ}`rY*Dt-t zN4(mw%}q3|0Dre=&3X8zU2AsXpFXYGgMS9JQTTh8W^;pPl_!tvImxy2G_o)48ddP2 zhaAwFy(mAJ_KYfUxLU{|xxMA~37-5yt+730nr*%2wrM49t-2)b9piOrwnExk zlP#^~dz`=5Z29EK1m{>=xzlB9*2dXAHmzB6Yx(Q7!qP#HmTnp2@oM=cT4A+T>egy( zT7J!-%bRY`*PK6~2raUu`y{XCC6cS?Z$uh9Udwkg`gK}Oqt;ZStw$}Ry@C98=aa{2 za93`Fdw7Ed>3z^_yoX3`InM)4(g()4T3k|rYpHFNZLe*D*D@kEpU#vU2lVq1Mc*pRi1VtjjwSQ+BC;>*io90J_14y2#Ye# zX|^Hfv{svI!hmB&qocUmQBvY4b(cG*xg9g{cS-ZEa_7YA<~>>?tvXTmv}o1&T4SNl zIjPa_oJ^!iw@+}v6SlPE8sqAN;fXZa=bVzS<=gzusYIHB3y|cakVsSS9-ZeJupv$y zifdq0p`*+(J8xiA-dIPucVLvwQC8pqmuYgIOKaZePD^9Qcm@_Yr`wj;+$A+mPYG

    =x^ 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

    pWegs4gj4)dgBB~M|; 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 P)*??*!jMGU5R>f>eh7g< literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.ErrorHandler.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.ErrorHandler.beam new file mode 100644 index 0000000000000000000000000000000000000000..4515b5c38b1298a6796bb95603c0540d8b7b155f GIT binary patch literal 15356 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 F{sjuzpzQzv literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Exception.Any.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Exception.Any.beam new file mode 100644 index 0000000000000000000000000000000000000000..33c65e864ebb9dc05a25642636c5e3fd107eb05a GIT binary patch literal 2896 zcmb7G2~ZSg7M`9#7(t)~1W{Mfh&MAFtKpD1Kt?=}L&R&B59V9X_d3{R60Vz*)xe+xq>Dc zUjP%eq*ABB5*e1(DOg_u*Cb-JMouJmC1b2?V9*kY3#g?uGMTT6q_ZfRWJv|75srFi zhDBBs5~bwUm<%gtb&QFEsmKOop~u_C5hOu~;w?%N1*ybLZv_{+`QU^GCorYYU>agS zpZ`WJs{tsF$BO`SSi_MZqCnhp0caeM5J3;|_%4%B#4ALQ?;&*Y&k4_2s!PJ?gw49W zIme_IW+T3m8i6Y!k+{G+RuahrmMDotfl(4Zyt5<%R~U@;;vspqsN-0qh;#V@MNA=r zCms@ewAp^-HROuKo^#MBv3CXb5EMO;u0tr_#oi4?gs8=naO5E`07e1eQt0R^IO6EK zLV$XB*}Ds(Q2<>f(|-eFp&J*#-jjz2M{$8sFGT1*0D+Rnn{G3 z@3HVbHq>#902UygrI!KYE!0vRp9aLijzCU8d>{{?(Le~$AdX0l7X2u|Y=Jzj;RmL!QuQUoaJ(`$g7 zVE@RG6wr0g*1{WIayX}df%$mE{>*ak<(bBaC{n@s<^DMrZ!8cOljCEovS%0^9gq(V z#T4inf{Tw3D9`8M*0L8AjL3#>gF+2%V%k?;^qb*v7ckg~qb0~XGkS%EQ(VYrGWwE)wY!5OqT0md*&4uBH?ave)@ha3t9Hw9Y;=BdC^d9mUI z24aepxSWuyaFsZoRIvuI5;JO&WN{+d2h(E&E2h*WM&L#<)E`F79dxkk(mNcU7CtJg*_8jAe1Ah1J8XIzwRUty`ii3mUS3!!Hdl>&yeCz9aG&qv zRidjV$Kd+i`rsydZr$RFucb_SnLhmCCnws&`5Q;?njY3MbxrvERlj7*+;=%9HMlJ{ zy3FmUofv?&E=#@M+!vsceBl){d)j5kq;Ir&t_rW-)Bi?%D%aMydu;JV{p`+PDG&Ed zjJvVi#ilQ6`YocXH8}obr_gKON6KrFe5VmHdj5mjJZjjSj5GJ*YKn)=EhCKirL*!5 z^gaIc;=!4-3XVm-)IQ2sIPUr4w3z0Z{@0!!yWH&@cH(Y~`Hp#B`^B5KA6_kQ%3L|K z$TWYk53!YbpNz}yjY_U?_m^78UO53@a!I^%A6 z)X5K4GZo)Gdp_!XS?f=~MxWmm`LFuq=w$Ee*xJtZqB`^M1P4&ebr`R$t)u6-zRu}>9-QXZ=5+ELqb}|_5V`L&UDdgN_VPD`?JeEC{9#&g zdEx$yQYP}cgJ5sah{gfB3+-Tu6_dF>ai zJwa8`DG9g#(RXBAKsYbUmzCwJEQi^9StI`ot{L?-5~I$F8!^sCzA zG1%G0QsuXSRr@PH%4w!E`yP5Xh)fgec3jKeKHVoc-`T%p)s%v&27lo;dh(?8v*L~- z+X|;NupK28EkPq*n@-o2Z2jQUx-$$_-CMfx(}|ZJ{4ynQ)323i&C}eBke%I~_s56C zt$sA2@wWG*R>{&IuAFSy)M?w(cjL(6ilBpZuk*9-Mf zW^1rvFee*l0R B?AQPR literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Exception.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Exception.beam new file mode 100644 index 0000000000000000000000000000000000000000..d65eef328f76a1a44aa21b9b856a8eab645561a2 GIT binary patch literal 5956 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.HTML.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.HTML.beam new file mode 100644 index 0000000000000000000000000000000000000000..c34782d8b72e8dfea8936c92c49cba1b1cad5c17 GIT binary patch literal 4220 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 Cviw5; literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Logger.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Logger.beam new file mode 100644 index 0000000000000000000000000000000000000000..b42f31f7cc6f90104e49229340676a814b52c341 GIT binary patch literal 4768 zcma)A3p`Zm`=4lq?6il`(^eMU9X|t?QC5Gh^nM8O)q%E(UFz?zdH<+Z0h* zg_NR;q>?VHh$vaf>bka6(yC3r_`hdp*M5F|{-59Ze7@&>=6Rp@eZSB1yyv{noVnjc zx)KPqy>o*67x*h;ya)s>$B~hd+hkf$iYQGaa|usT3S7c4fdG|dve_a@BF1JHauo`h zC_$+}$p**ev_nx6rx0NhIY-Rp$uKz+C^=$` zuS`KXa)nIEQ!pi>6b>p&;YtMk0#v~s?bNKq;&D?_TE>Wsa_C{RFgL z=3}E`j~J6+3QQv6u@xdQN`}Wf5P(S}WD^-G5Xlv&jGcfcVltF1MVoZS| zSTZMp%TGqr!%>+Gll^OTCY>Wj6+(=ES%xlGqH+Zos}Pb+=pspqNP_a|U-kgQl^%fc zQ33&C5eNhr0KZNFOass(!fJvR%?2hSKF}^RGR zV~9mFRwFtH?0gNn0?%X;V3>fwa2dha3^ri}BkrtVrmYSOAzoH9bqGw{0vWY{jm;1e z#4>@@EHVNNTGZiMG+k4e*poL19T<#-U^7J544OU&=}uw=11`jVR&Y3I$gr9NEGNT6 zvXKLoChCP&PJqK>Ap}VJ1Xu^=zz7@!1#=)80a(+3PA&agD;?Dut24nI7GMq&mhLyU zEL}@ub@oE0lt`Y42Ts?TKqQ;u-ou$hve~E#7*F~qCgjO#7BIA763OQJ2$N+yE+B|08a~bA(+k&n#p?q&%vn$pNZmtO*`3C&-U#MI>9Ybe)Xx(6;Cx6$MlTLUf(y zKrlokTY*57fQ}v#{H%lokzlG3TnM721qB6XLr{fT6V-0bCg%AU664jB^2-A&+Vc9iZBdCJr!#NPg6*L^7bu)Ntw7aB=v;1@sfi zQ}d{HfW6%)dshhLPQ&G26zo{KuJ{a^@%H$5V1~Q%-=_Beuyr*V+`jT62{W+}|(&d@Tk5uD1ceFQWFs9NZuLH{Or?qZv1*w*|lP zIlmcewQzlyNCD;~h65db=>kkyn*#1yLM;^uf9rBJ68^U45|coO=~^+k!|qi!byhBx z2aaB<6_-ax`T^bKwF+=2s`R*0X^IG(ZQvYJk)+^21nMwNC!``Jg3~XVKuZxNFz_x0 zc>9Bc!39lIk?=Pr7g0gtM6M80edR>`!U)Vq)zHuh7(H`cY}h)9BjVZ1N7(gusW0pPiC0vMmS@i`fvx5;Dn_#Vdh z20qrnA5;;b4gNbnP^w&l=ZYwS2|=yju5=myPv5U|$)C!`!CEtvp$yD)JDCe;)p_;8YHGB_FKQm#tE9xGyG zY^e<6p>ny3k|@K(KrKU6hQJCJKp%>qqbdWS;3~nvFB0Q*4o*y44mk0^HV9+H$ibQn zzKAQ~CW;anQCOlv1x7JI)q*KR5&<1e1sP>Xg%~Okr7=L+Bp=&1|FwbeEC(hCMBp*o zxfbl`N&0Ddr{kJr4?N*Bf%CV}A7r(K<)6#{_SMwy^R9pIu51h47ixdxdG@v=0)xOc zHXK@bNK3_$wi_?>{uB*OS~|Q4q2%Or_6Dx5*@|6S+UL?cS=L-vnIc>h>1zhKp$PrP^4 zXZoDn{tQ9~{{s~?FLzw9=PxgUo>lRsAg`Z_4gB@1ujVh4#m+N%EPA@!g}lGuQF7x| z#iQkozck&g+bTRyh>9v`9N2jGx%b5#KK-6oJ!u^WWfqmN?SlY!t0g=w{qE-0 z&s%qrUR1YnYJn5ad%{T4`&b4Vo~T>ZI=OC=No@au^|ge-W3bhd`dh;@}#Ei zKlVP?!^*kPHqE@VYdf@I?u^5?`b=Gm8q91S)@9zeC79Oj7KWCc4vk_s4(hk`u`KEA;(CL^bE<~sT6jwSEATNgg^AgTsc*{cd36#(_@c}J)g^8f5=U}bl{%z;L%MH z3GElw4HQIhI)C{P!H!DaUXv_dI(5OFb@z5(J{q51KB0WI;ev(}C4*H-hP&(;Hb?(h$EJ@dpqAJgcruJhM9GY1@W2R@}wyszl5 zp$-`^Qa&_yC!Jkj=5D|*VBc}MleqUYt#L;a&nwH?HwixETAm$v-&%3wltuTP;*TZa z_I>A$<<%sG8@$;TzVOhpK1X@kJog3aPsOt=j!BW|@)hYn>O;=HuUqDb_b*Q-x?5~5 zqU4&kPkR%gn^}{&veu~LutkSt)2i*urxLRI+t;eXatk6Sl~JL~(QqU9}Gtp=I{aJo+RN0X48~R{->;1F4Lqe0)DXsDL zWk9TTl5}aLhWX`a_?llMs#LMbbm}@!&=;Hh5pz_2EY*ItTz;`Mf&Hxf=befL+oHF& z$gi~wyG7a7nR#Fvfs(-csdxi@chBS*7n+F6(-l?Z2XC zLufFoFFSaWP+Db_5n;Ye?`Zwgo3#70mv*(iIDKv2t`!$vH-*Q{N~+E%lQsKv=9b*c zh;KyIPadvq-WpjUO!cn*?y(XIfY+>MYsreJQ z_{ExTeb|>umOq-oCq%vv>MRJpO%IT!TECP|>TN%odZ*^og;MwK#SdXe9lhB%X$e&` z_MhKyrqxilw|8X3GC%*+ot&c94L1se0n=1sOJ@Wsf0|1VBU-<2(@mOK@X%v($jF4+ zV}=IkNVA#Jy=xg0ZYHn%4hTcJnZ!HSX_z72dIm$ErRHbVySCJH!I}gU)sy(&gb&uT@ za>^F1-cO3k3B^BMKDhJZy~#BJPaX}um^Sgkid7HKAL@uF8~A^mIAgU?9=ofzwy8)f z|3w5VIjALW+f(nCdfz;wZ?6AwSD=JrE44BRIvIEQcNZtQ(`Ra*r%896`I*3Zu`OwV z)UJS?r8#$lt9P`8OsV?C`)1AT4RrbM+vDC9QkGxc*Yj|b!*eV?;&^%8`s0~e ze7d-^TP3OAd(~QexG%oAQs!xp?HB)(`|%rxZZ(Fk{AyM=KRwfQq`)+2u z;FK24oK<$N{fFy}Kii(H$j?U6tVLP3mwLX9o@Oomp>U-A$GYE}e!F|q@wgUDDJ3M|J8 z(a~;5E)oFU1n}(u{AmZ15rtYB)3MR~bO{%H4^WZ7mkaUNbV*-T3dhyC|Nlb7ua5t! zGARs{w18qTz?aJm2zY%@q*1IW2xTh8p5jSyr_7+3Q>IWHD2@~-$~1~I#rkVCG9em# aasgxU{|&^2?`7e0)jwP6evrAASwbz77-Cy1Z~}tkW3(uOu}RWLA0U>)QU(| zs<=?3;zrqBSXwt~5v&3#{akriMSZwFEsFA#cP|7et*^fCd!6t5XU?2C_rK?!b7sz+ zxuFrR2x1iG8!#ti4jDBAK`2greSLT6Xn;(rkrFOpGIfkgNKi;XDxWXKB?>;jKuD5= zG+Iq!Dy2vvS4w4Aff!Q~m`F%s;&M!*R1lV1!JF$2^b0NdCaX{+S9e4T<3@IDE*P0F4M!LPol=L_x@fBws}e zMe!sd6!kMo@fbn06c-Z7T%k+`<`829k)vHoP$*BSCROFyTev8mQb@+;NC<_T4<#O% zti%L~LYY)No9oT-F8`f7bQ5POE|cPz*m*D#99L&Qg%|@dJBJ_$3ILA^fN=nH3Yv#d znG;b8dls$8jLw{z>zf;q9<3&@^-)`M3j->rQMkObG!})&V}f%Sj|$ELULXQ4N?sre zE~&ggHn`;QXe?l}kd06ZMxh4gl=3{3%6x%RPLDxR9!)2Yt%sm_+zMR;O=X##)@LHA zRD=<%&tj)iY5FES{jsz>o*tXc)1l>s(NQi+X~`2%nfl{UN{5y~2^msHFwlb;{v#-I zv=jw&l!sED=amBrOO!%KwH&7*N6Sc#EsWVCI6AZ(&*^9w7;2nH2P@GZ4@9Pxg>DRK z=**Ekml)wAc<8JFqAyS+k8Yxea!2b5XjB>#VNvKT7{^lxzfF+hfMKs|MVl!Q5V1Ts8e8B9-;fwN95HA#Os z5<&{N*MUhKkYHf?rBMS>6;k5BAk#ECIHStm)_FPp+0wevmrX}q^PCTKO@pL=q=f^l zqW-FgVyVMZL+kNF)*q;r0pkJhpt0GI@yN31w;S>uTG|a+4zKz{`Hw>uC`2&-FupK` zHrlKC9MBtpY}db37%y6)3Wu?z;3y(%I@(t9>YU{-zD~!I8%)27i$nZ^a0z(Y&~Hxz z_IimJ0l)e22yLbd7b+C}AAD7RLXyVe3cgAyOv3rv)ghGU=R7s5fP>2)+mShC1 zpa7m>N+D1f0)@4>`rljca%z@CPY{~GM@uhO{h3xsSp=Rq!P{|g@jB3qd2Nq zg@Obv#TiS)aFU~pRbaSO!vS9a6-NpBB1a~T9uVYGIR@VTIK)3XMhZ&kd|DU?j zJo`@W7k@^45`6MrD{CUe9H0}K6A(D&QQMJ zNIQ(`1#U=ia^3x2$4ziK=&ZSU{wyEcvq48EWd0iT-tMe%mZ0?Qs?BMcwmp%%kJsbZ z+U{JM%v~p%64szuU20{x0R5IYS7R=iV#}U=rGjN!zx?g>2+xj$d%M!>&c5(ix4fq@ z;@bChlak#1OnRRYjlvN0!Q6jlo_T%u%-TM)UH*IbXVG5xy6@v{-)z3A-leM`+mpHV zV1A@&edOLk-g=y-9Dj@1eLfR$L!avSy4NQ(wFy%XA?mFq0;$*isLJ9q4#8!+Uw;-C zd6O4NihfT@ZI|hRh@9?E_)d|e@tTfX{=KiBbgTEZTR3+dz~6qXok$6dXa+29~Cbz?^yV<@N45FpU?vbjyF4|zl{q&wEoWS8oiBq*4_4BByZU7X#2uv zezq6;(Z$t!)rrPfYkb6`HDTesrLo)E<>>AsrEXJ7E|)A$8C`6*X-}o|;mUCL>W2!i z+fgMA7qZls5^JPaTkapdve+*Auv=A8?FCzliN#&t;1_N;-&8G$x}IKl!MnQ7sU~F! zu|(E<@oEYFYrI39tl)9wzOAQj8DUXw%fepOZqAhXH?AsrZ@6tqTVG{Xv&*TPY5vQP zvBK@5JEvF{*4)TUn|@REToP*dQ;L%7GP9@TUcrn@?y4}=i_b>aS5q<){AQLt)5~~t zThMdNAfvrl%G~jqM^s z-}|p?qvrqiQuxd30IbSp()I9$_s)LC9`E$5zq+xbv*CgDn9c{a?+lzd;<{Z;-^gt5 zp5HkyuQd1PRXh1QLD?Hzo=wPR9#K3xxN`jD`@zb{bS%5GL&KsxB{P=X=>dw$1ndY1zx# z?@L4GZ=2SAYWns4G^?AF8P7WZ^=37z^~9ReXz#KEEyuloK6GHJ(fW>C0{N$gonJaS z%0tly_M0D(vT7b>>|yocMYCG)EeVDZpX{yqJoxB7-IA;M?-KR7(PO`_Fxp%s*~9bo zWuz?GSP?eyim!to@g_BQQn|1F_DHwvbV^FN?G}%TJ`LweeLVi5+kWu4W3K-<`{jOm4z8opZt+hheA)U~{c7s_2f;)lSs1HWXolmq&gH} z@PK<#695X6Vau>**fAzE92uSrABHz$7Gn;B!*F9vWpEiDjByMr#(0JWgN>knZ2Cwf S*ard*eE_(3q!{%f$bSIdh&pKi literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.MethodOverride.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.MethodOverride.beam new file mode 100644 index 0000000000000000000000000000000000000000..9240f8e2c617274d4bf3b552a9aa8d05cb2577a6 GIT binary patch literal 5696 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 J#dQ!8{vS?C*bV>y literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Parsers.JSON.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Parsers.JSON.beam new file mode 100644 index 0000000000000000000000000000000000000000..2b7fc4419a3f25c22af68fb0467d3096fe2b78c9 GIT binary patch literal 8092 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Parsers.MULTIPART.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Parsers.MULTIPART.beam new file mode 100644 index 0000000000000000000000000000000000000000..53bc475415995db16247629ada884b9026715033 GIT binary patch literal 14044 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Parsers.ParseError.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Parsers.ParseError.beam new file mode 100644 index 0000000000000000000000000000000000000000..415069ec31d9f29b702fd116900ba6030b317491 GIT binary patch literal 4092 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Parsers.URLENCODED.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Parsers.URLENCODED.beam new file mode 100644 index 0000000000000000000000000000000000000000..c14ae13170684411afa7454b1b534b9b500b505c GIT binary patch literal 4588 zcmb7H3p|ur8=o;FV={~xcVXP3TxQhfnwng)L@rUbtTAR@3^VhNxfs-zTNf2cTUaTi zBC^VcqBhb^wzTA0+C)-pR;#;w=N-1y@Avh6yYKJ!f6sZJ=Q-!OocBEEIjemGY)~lG zK^ON`KC8q*_9ztk;`H=%H%{N3%ZcX*t^K%?NNYc)Py`7@)G+kPQih5Q`~>*i}%x02Ycx3?6$~R)mDl5_4d_D2&Hs z31JZp5W{#dTf&9HL}H!a|(JTq#$W&$srMK*EGDHUy*~KL`=Z62mZq z%M?aJ0x^dN!4fe}YwobX8KP{$EGV9Zh{1e1ALc_i-MNB5djJ$Gfka}NES(Ru~D z1gB=j;d42Bh;8-PVo+_YP$-luum!B+BG>zVbA*1PZ5_tR3Jy4(tqk9lRBcRKHcM=^#2F$e-6gq1j zk)VSv%p=N?CWz=NB@~hFpyEO|rsIj^JcCEAhNA)b%XxG;5?w#)+BnIj@KsB z@jAwI6AT?|vWrN`3sa!c>G%c4bPqo=9kY~<#q1&y^8^ZXKO&u2g3+YmwJ=x`k&MO> ziFA~VV1TD!Ni;xFMKoCu)W~=Ppbuj~AYt%^yJ#p7rMx5sA_!U-aNdNBqX|%G9BG!5 zr9e#joI@tk5LFcXLJ(b?TArU528~lk)(LM025KO|CT5{=nlmIK8mIO565zCDRC7Sp zaVBVEz#^{`3j;xe^5hASb_)O=fB>KjAP1ldKmtI-k-pk&ACb|R?IU#LpFw2w0Q3Q{ z07d}D0B8V2-T(lRF$I`QM|7dx<7GC`L0=xg450yN&Gtbf)29wvgpbUp0)WWO2S98^ z`f}bJG2+Vu0OU~sSdhvEZ@DNrDHh2MOf=}p%eFjIJ{oW|QhDG_90~5;Xn)&!Ro?~H z>O}lh8=x7cMq#AHxqA)S%Th%obuf@5f(%!c4WEx>4-Uv>V2=W#u8gQ2ZzYvVts-C{ z&q^W$ISJYQY`~tEDh6-l`ATLSViI1K6=XRKVWOq;X7=zW1Kj`00f<&_n1%R>>|4Zd z^VwEs709xn@B7JTOq__1_>bljQQIVDFQ3?^hm@`CXI^E@w~PjA6~mz@W*i3w_90SI z@?3Xk^LcbM%GHw}0r>Z1^J2g_g*cGtfwM6vjDs}|A;7W(B|@gbO11egLnL5I`Hb0Q zFJuUWFbfiiq>2$jmN;5-qqjRnP^f~i5s z;X-9|n0#ggCxW^Tju1=1D5@w5hQ%QHT0wCTUrZH5!4RJlPX)(|h$;Z*5|zsdpXtb! z9nA6fYFI<@NIc!bBRSyLa!B<9KY3>S;fui!;67Vot>w+if)by*=hpmc6jN35wCd{W zi8g|ktrG8|b47PAU;f>~w$7U*i}WAd@@#9SUKmd@+ch8uy&AJk15>~6S=p~Q^lbF< zj#$TY4Q+;?Uq1=ut{Sa(e6H?WZP6Qjj$gf^_^Vgf7Hw}HrhZlXOCn2fx7C=_ z`g_Kbk;a&n1f5?>lI$~U(%VH80gA5meVR&ZXj1VIW=AotlO)P z-~ZU*%EMi*+Pj&#b!mRo!=X(|E{=Oc$jgK553#T8FjTcwC%>^ zRREioXKBJPWZLXBww_4}dV6&oF$0BbP=c8lBJLT@6nvYap9<3x~ zYPy7vTfob&huem#g#jT_>-+_n`~ zU>TFQeym=y;f~4ElWWRSwI`hOySyxp-?me~Rr~#T=*W*L56|9zobs@C&x!G+mRjk& z6TZm8jeKZb-Nx4D4yR)8&$F>#N$Ca8PYD`Tq0J@eJJtPs7lv zOhWOEfkc8?9h*V+u{P=W_>98fUYlV1C|8Su47O&D?k}BgIG;I?+ice}eKN>nTsdv3 z*h_Ty#kD7A-UnoF=@5*vdnUTI(do(a^EFfyf|9)Gw8@BG zt}m(^yktb~sxO&HT(fwMyvk7E1na%V$FB`JEl(z|LoX9+xx3T&-j#P&L<>et^5*}X~5W%^t1}yB#G%nh%l%pN6D01wY+}IvNVSWhOP{YQxS1@ zY0VE(8KI|M?>*MCJ}STdIH~OU87tH1=?LTNv69Zy%SspdKRM+2xcl_s!IqM{83EDT zFAJRiJg|dv?6{lr;u9IlKl}TXIq@GPe8gPyTIt(K3SO$}ZqhVal{(L0ndvkBqsK>b zZ7S@I>rb(6=I$wG>G5ydR+y;;y99;K4_^7l3BzJe>-=?P)RQMmk2my=8|8K#9QC*n zRS`pVQHv+9$XT`Ex5=Eh2Rz$v?94t=knT&WdifJnD7U+s9Ms>?aH6H8B|LKU zF3SDu`o{2!HHp)@of3yj(D&tnTHP4f{8ksi&6ARSV8>zew@xb_4@iuiT=(o)Pp#64 zU7z`)L3jG&1A=0Zfyer?d~39v%6~L0h|>9#kq!V}{)+$ieRhvqa#awLx+y)*$|H#yTIE zY(w-3=q;9C8N5wv-Ta5g;SZay-9GVC(N6tW zS03lR?(c@1W9=)&9J6wZ1>23I2RHr@N7HH${S@cEC*qrt!UY~XY?d2cJ-YvbE9+*8 z9ic2>Ltt{z$|Du2d6l*ahYAWB_uck9%{}xTPp7R3md2K56Kc)ce%d^wrc}ZG2&|&UcRkdhZQROe|T^*K%a> z$hI9So5l{lKdRtx0(Y1@lDyPEA!t9xHsF`WXF^ZwLmk=sXiW#3%7@+@Pc*vl>i6`* z6^Cx`tx|J36g-Z#FFSuB{e~4|;9{m-=Zk&s%h%Y_;_!xe?~JjV=@|o|`Od7YwW!5y z7E5jnWpE+KGODlPgk|pw3VSK3F1uH^&u!(7*AEYT`|^5##-r0id$Sjoe&4@vx2ke% z9S(k1pj;5FyjAn(@Kyevfx)*f)ODSk&#i32pVnhsmOpbWQC6=piCs>YNcef{y_rro$>Eb?+mx!PSEJc9cFJW=s$XW`NA7DXE_Nkjhfai4EZ3h@@H@k_;=jn zU1LCbXpjm{d{szxrDU+8AXW?{WW?Fb6hsQMm&Dm}4oJ=xbTe#>h!Y8D^5DJ+u7+Sv zP*usA+0pC-K9k2`NwH!`$cz4*IP)bhmI%1e%utMU9*YZ$Aht}~%%It!(b1qTK{U-4 zkzY^`M3AxapKF?#<8#`~*Sv6!n8y?_(f@+^<=MXM%gpp&f>bRMR%H>9#Rb7|Np2t^xi?=H0@x~upxA2h zRcR?y0g+XLE6Mm5Cq-!=FOYyOph>yEL*1bj8*8;J!5gThEQuf6G@FurJ~eY zLNb$($nb<56%nRZQ|dgCNJdI2k*E^aYSpqdotDt3#FSDcQxKIBLZv3eI2hDGWW&)K zky7GUBGr*%t&AcysY+a|rZfUTOjS}6oq|Z!Xw^EgHkD8-a5DXII-wN}G7Pg+ibR8a zk*L9FWf-Ybrm6{vPE3>#*Ms@MPK{DMlBm)GcL`y+iKp&b6n=~1Tt8)an zLXnz=OEQU^SONy9VVM0)8;^G$czJt(KzIl|pturOG40=H%1DKbBqTrp3>)eUMH>u8 z5F~_>5MbTT02BiNzeWIV0N5y2hS02CF_b@*zK+MV_9+Z5jMJqN>cpkGzZX`AHTt0f z;dF$~MTJ6Z@Q)Qv$3T-RoX!W0N=O6$JRzM6m@#|=EiuJ7u4rW$Mzg+!pbf(50>D3L z=wfIq<}ZLI@G)!);>JS&ms^I!2r#r0O0cak^s#>zeMlQ0WnyJ~K)1nArqu`x6Ve$K z9BcY|j`dtR#^bYXfhZ$@!$q0aLbfee$e@=A%=m&096LInZ68d>ARlFN{WvxZzzpEn zqD&irY~^7LGfapwZMT~sSRS2skUbj7qaiFF+ku})qq7~YF`(2A6CyQqo`CJdwq-D} zSYQPY28#{+WZFZAu~d{fa*za=qlOFz?9m3Q3m;`VOy)SzrvTtra2&b8bi@rBR&K(j z3wV4t5FMr?Cg6j4_-t2h3>J$rolN;0Fwohc!VO^j0FE=tbTRZl0u#9ga9rqM@xVq) z01Z#~?$q%Oo0bnZEgy+csvv(J05bq10B``%09XQmdjYDk2EYXX>2?5kMtme_M*%?RPNt zT_DZa2MvNSSOecj%d|iS%`gxE3ABp~6yQ(Sf*(z9CLyG_PNCH^K*k{SCQ=!pkmxxg z(c3H_5`7>^CuNEuLH4^O@V-~{wlM?UDI zpwD`11`fMs#@vIWP>o%I68tfXvvvxqGWyc2;JO96$%1KsmQw(&VSM0+(Z^wP>i=4n z)(>-6ZwSM1&kQa{Q{n_L^>_eq?|cLRu9YhQm`~vP@BzGCt00i>K|k6M5gKrjo~0q- z`k*9+T;j(M%(qYLd{a&&H+~(MFNYCHBQo$T8KqMjr1aQO1|Q1Wa(PGuDFqr%4X!f` zTNWrjAfaa>^vRwANT3V}UISGy^dmvG)~IkjDKb_ZwMeC=#30Sa6ip%S z*CyHQ_BdAbeeS&ToB+>&2aPV1ay?ci7gZF|On$ClCFM4rh^rCC)vh9!w7k9;aQ{fD z(rCwuAJ+8UMKC}wSVEGss2@M z@?GQI?eooFX*+*4pK)*H=HTW>k0S3~X`iz6y3d%sqoor)8GFied-jhn-SI48bgMMW zYv!7}kqcII1fBlfx!mDl)10e?EN)5Fa(&+-uPMhpotAMx2Oy8lX-s=@}(qmC*bi*D6C!KL+1uI$`b^P*KEc|QMj`;3$q zs^aYz?24MxeYfYe7D!JPHQ%i}^pSnzk(aJjhx3}<_1{`nOU6Wp+#%NHduv%uk7zcJ zN7IunOh#1&cGlxHp=%p6& zM;>r2R3-8bW5?asMfs-{F{SR0tY40*>YH=<&;sIELby?x7YnN^ae06NgZH-FRKq;G;pX`>J z_FhR^Jv~|O+}|~`^3xRS99P&T9cmBJWhnrqpoA^hU-irBV9jJ)L}? z$T`1l+wy$Rb@Log4LB!Wv+xV0 z#2Szk_3-@D2C^&G#YN4cd1DKmPK5-8^rMTs^9y{P23QUeGuHM=FP|lw-IdB_ZSfxm zu08P?`|Gm!aUG|h{ob_o_LPL$u~+sVY;8|FnfcT1*)|;awo*k9Ri{0iTVvHZcBN|H z*`1|R+75DlyXS-#Lvf{ zAJR>#k54F#n!RVy?Q0Xp2HpDP*mr`wpqme498F4<)h6>tUMPySp!uv{<6k!4Y*aBG zm*n{*{d!eHsCV(wOUtT#Lf0k6ME)|(Zn^gA=?05%W!90TpUM+mIkS@kBfh+tDF2#K zEoha@ywozg()5c9J3r?JT<{>+`RK;#PpQloO;0U$be+V*fj7z+IHQ|W!6UmP9g|hY|eIKVh8c^Mg5#H@i>N#t-D&L_B zz5PY^?~EAFs|$B|)Eo>9JtvZl*k9dm+F|olhlFK^WP->?6@V;nWxVc-GYD}ep%!I% z!)lA_&5W-TLsiLu#cWuq#gRcFx<-}`I40n^1D*?TTn0^UWP$7ZAcd|s6)PwWA%P6W za5aOH3|vbop%xtp%Gx09ua$E72X}-2uGerelIw?8`axmSG?^Ayj05}LzXhTCKeG?s z7v$jkkHDaV>i#S+hG-13%_KP_u9S(vC5BKdjS>5RXiz=;%Jl!${O}IB!u~kG8X%E#Dk|leIB1+a$ z$S%@G+9-u~ZU6J2_j}*(`~JV{`dvS+`#I;_=RWtjw{y}6<#1S`{!ttnn;F1} zWQIo2@&aj07A=6vp#@gaVwnsUhwU2~sCO(ViXOlTWzgAvk<C2O`jeHLOB_ zaK|_dU%(Bt{isYPjUGs$Mnu5;VT^w$oyv-)qq(%DESmv%l)Ce{W3IN1a z{*1slUnZ4Bjb!Kf!pwkZzP=c#zuUozL8ohY(t~K6fDl@sUnGqa!U(Kl(RTQT(5QjH zLVeNHh|oY_1m7r5kfC1$jULPi!QlU$2S#*}h3}3i8tc!bf8=utWpkL}w78&9dLU-y zzmL@L*L`JwPjm2WH{FbEm^QQ(zQkk=WCYr|Lz&gRsqW~Nf zN)P2Qml5O3yd7zAF$`89g~?z-Oe&j=AuNftWIf*{9Voyv7_sFM7Odc?NHDz(JnJ!9 zEbJrTVvIy2HJs*4i)3=*d_#kLqy8AGIg-W-rY#${ib>^!EZ3X=Zh%?ZV#N7^PypRP z4m_O!)6wW`UluKr!J$Dw1-9!VGgwJrBtI4{Fe-rNx~LKe0)}q{6-?kH2*t9@rnA8KJ;^HDu)s2 z3!-`{c$vTyLDbNQSzwGP7R{H+0e+#fITTZ4)4pY4-It<0iWxv<)BYfxmsT2>1}sgC zn0hEZB9u-GRR6P*HMP_+Qh#CpsR-ypSTO==2n6O70)fB-fd6U%Yyu#R#B&imqHFL- zq6sQX0wb!OVwvI=1=f}4-l!8P`8L&hND9=7A|N416g*uaTLdWlAX_{rm=F(mCPF9z z=-fa=Adm6kaqh@GE}lnpo`S4Wy`^AFgs?Davk*k7kierM1u=*~f>648!zf4>ZTbS) z$0hRP@em4)9M}6qf=DP+93D9fN!mh%tXvM8SVpizkM0Fuuz>OVSiCj(r=bE={A6&j1ojBu+^#sG+x zCHUA zOa~y-ToGI*8p5f=;$-8b2w*N0H}Nbl0YwDz`{~^3b7CcbWaySfVL9kQf1=OHqV0Jf55PuX$va=BfH? z9yB}+9!w+ik7 zaA!9VnMlkUE(QcQRs)2kf{-h|Lc$d-M$)y0u$lxeW(7Yn(Fmsu9HG4E2y0kth(`g! zYJ*-;e#$W;oD%3&TI|(b>@^axgaCmKARsIfC;|e-MFJ8a5QDHp0$4)8-Y70cjGvMR zR*H!=ZtY@}lUi{kB!&d64cX>_esO+$6|f=#iCGJq$QlKqt<#7UE@mZ~h?B>=;(?`s z;m{;e3eZ*&ObIKm1Z0CtWuO6ElDQZOprZlMQ6(Fv3ZhzI(*S%mmSivni&+zi(SWeV1h7ePG1C0R=5sg-intiiKzvQe zn(#+&8Gd3PYzeej8lK3-$o{Q~=VDfaCY}Ntg@|4X6AB(efF=cNjx`1XNH2w?78fH2 z8%CRpAp&KgL?lMX5NAZNAS7oP;k1*D0T6|lc~Ax#Vv9imB*vf$Hkc;>0ggZtJNUrFW55w*zk~x!9R78V zVjQ`%fVC45iE$F55EsukuniJOMmT4%Jvc9J4`>R`84Y{K03g6#xV&h{{6uin0cteK z6t@A1ai-ulij|VYkeCgN>qQ0FgHVRu08ZsvoC`ss3hRO~#A97~FmhYg)au@VYpV=F z)?kVQy1KxpFc+f=28k`n2iS{)MTx|?LL{&=X}~*E8WF^z8WaD|#k7%&QFj3Ix-F{c z2~>19#knCd9*gZwpzUdj^FSfMj~);3TLh)4se-VNWP&QMo_vf*WE!0+l9v_ z7Pbk(2>>4eM*uJnhvhmb5O&J|<6&7e0Kjzx08#*8d0~6PC5-1;A4P|G$}G2G-f$mW z!hcAVNm7|pCv+1xek#szQ!Sn5A{DuAdMjUfXUG$j2VL(cO zzw(Ghsu;n)rBh*H2rGMf5E$LL$PWeR`9Yq_1_@+10%fE@fe}l26B{0mj#&kgA2yR3 zL-$>N*TC{+vKRq0HakWjhy~K500xT|BLb-43h1K&gVADy0fHI@QmD{KIBSCi<70y) zEr1q|aMtvMb7D=9#?h%kp+TDNj37=77^TS$VK6x0t${iXxRRsE3}Mjdp|P6a?FL(u z3EqWhMuhq=RhC_>L5l_Mvi1)S1>1~PvMT}+axOM|*k_6@T_>(|Rjf4m#BK+(XIs(( zI&4X6FS8%)*w*1Wx$5D8v!jt0a-#W3@;gFVr@S<-ZeriN^1I;oA^i^0&&=A<@6@Ea zX19&EKc!l)dHQ~0Vj>3-J*@X5ML6=y<40CpzTd-{@mKHf+ zlK<|`rAY61V?VXk5oW?>qi?sgD?Ysc`DJlW?JL45`jLhslU|>Dj2{=())~Du9;(fy zN55uXF$%n)|9z9{0##D$ah}Uhqt90zAGR0dMkn4%KbAVX=W$Wa zjB?lb>_ViaL$2-<;ta7INQHIWrnPd$8puor1KD zh;U14{*Evl5mXYZJT$SnNo;={qNKOI)k$k$XQ3svM1_yO-byQ^ZPf*-iK^Gl9c~f# ziWFQBQj)U~=(nGEO6m*>d9LuCmpf1<@Lcw=x7%CY_5`(Cd|_))JIbOk@yaRp_Xm=A zr14*Ok!N4O3YdP!?e^npo{kTDAM2CUEA;%sfy~}kjVW*0my$0>A12t2Qv{86tFY2C zpC~G*NDc=;rn1smD@LELm!CSn&!cx?^+D}#gYs3I4ZA01--Mbn_BLll%na4?B?UW- zNww#y28ZJp!t77&8x5aZqht|ZHfinGc5dq)-@f;9h>wAVzeum0;^#c&;}l52oSqD* zM!mR3Da|M~Nuqk~@ry6k@vXxiioLJv9bf#jUDq8|@kA`}mjZMSaoo*}Nk}dW=-}Zq z&9pp=nttc16OibzQzi4tg<>LR_u9dVo%Td#yj&7?zTS9a-d>q^d-e2t9J^UnMce2Q@Iszx=6D#a%HEav?vnV! zkQ1>!V6b>~*?yZtU2f|_D03xlqI^GVsx)F}YSNG*S!5L=v)<`+YO{pH{$E5to$RPjc?K%cmYqEbgqB)!b(3aY4c^xA0Wxbii-XzM-Z+Pl6A4}KVz`=m7zM8>RM3yGgScw&9%B%yO<_;XWM_V*Uu+WgS| z;z+5Nu@O~aNA=d#1`Iy`Uhi64bq_VSaleo*zK)*if1q|?B7e^bz6-o!o6C}tAiUc1 zo-MbIDGm3erSH;jJCkN0CHXnORXSX9_7m%g;o-SB?-A)YlBwUTdCr|>p8d&EE+O;Z ze_HZ@m2I{*dPt1_qxKMhC+=`^v*7&BI2FN=8#i|2%fI=A1z1}girp$RjIx)C435|}L^JQy-?CSz2EQla zXoH%tUw?6qpnp_H(a&q8C%TF|ILN>NtP=9V+Q)@Q(8!Fj{r<`cx}mc$yS!S-O3-^xi2&w}Na zgc?mFL89LCj}z?k?PU(>F~=PSw-aY$8xomk^9>6ve@wB&wTzPvHtY}dlc7Jmo}w2Q z!mRH!(~>M*VL1?3x2?lCOfsV=VpoXW4SKC9dXM^Nt2^&#eaWRb#F|S%b_deeCsyB$ z{Ha=JzCOG2#IVn*V@gAX$>-~Ww?2G%nzr?5lzdL>aS8XjkpZ23+Yy`OxlbjJ^^pD7 zqfi%WGUU#^!Oea~D}rS(v@@|mJoYaTDzO=;dOiJGrI8!Bwhxsx2f zA-6q0PDEpBz@D*va^YNnmtMz-7vf2s;$2buD&~Ud%1YTIQnSN3TN};_`{UGBe$R0 zNw(X|9gHhXfBw5kkn0ou9V)~M7JNwASAMxMyOW=I-}|;d)d*i*f70WtL+9Cn!yS9< zXdNdT_F8PV;ArBuyPPy~THPYMqL#?#jo+|!zNYY3MXCMiUPG%(kc{wf`@vHUr|a+R zxrWsU50jcJl6rLCC`3wrh1Uy|#>9@Sf?ZnrS8rW8_3(pi-K4Zt@Ms$~xF)Z_m1up- zcD9r+P~hAT3B-}+?XC?+L+o~_0Sd0ojFstyFmsk0m8?sdhRs&sQo!ttTls|g4CC-IbdKgu94)8a%T-o+w!1ft3y|pxH zhpR`SXA6hqFm^t-gp{_fz|~C_b@7(NvtWr~9$tQ_7R?NqkdkEoR?}CNcNG(#WjFU3 zDN)j+i-YI)mP8l3Oyv?J8(yLJyNa)zKh9{8nQN@4y4wkU%`T6c9+Trsj<)N%LAjV8$E+}=|yLI_IgG356gz18Y@59xYP9B z<{B~em9KVzq{IGKW$#%IrA(dWZpr^-A+MAiTvSK5LBqLEg!qz^mq^Zew0ja=0$gL zt4l41Uq^O`w`WTTQMxhjD<#~@G`sWr9=tua%~1k>_DbG?2({D$l_~O8JBCN!4j75{iZygxqmfI=+V%O(R_1&rR*K< zZ+{JOy|l;FRrgo0Z|A$N&eJhH8yt4n>6sDg@@cV+!}eD`I7s;oxB6sZM(Wm|aM)}; zVQO0TTbfuNdg;fBkn^KM#Hm$<$2vZvA^6zzXa`=wt^ij#SD+u;F2wwctt$_&@ws@*uhOYkYx0d?%6LJiXL&%MPG@=WqY_pBmv%Vw`bz{v z)pui6uecLFs{Kv(t55jQLfiWbyL>`Q=ZC&Is(IF{ZIn*jpsV_H{**mO@8+6*!~6+C z;zz?v6JDpZO*dXwKl4WDw*U6y$;8NN%`+d(Me@V1zYV|c403A!jOQwEY@%-8%#}82 zP<%ep(bn9R-f^@4;nDqO;}@+sSCd;qy-dmHlu14s5<7_>U8~ilWCYSwk_uJRTl12T zHQv(`{mHKi4Xn3Zd-KK1YORblT5VH3W>viUXLoIt(2D*0V$wAsXdtL8b0Kl3Pcb3P z=tt=_3$Gb0w@`JRoPtsF-fOBEa()*2boLQJLYlN++|ch)MSMu770LINB>!Y`f-ra8Nlg#wlv1GF`q` zyyxAzJP)6}+?K?2t80SWzDXKA-8a%oEWcp+NQH0R^-JN@Z1E@x*6BZJjjJg3 z7CEA8Z&Me#JF8sN!ck`}1!s8WR!3y8R zi;BFRoN0Uk6^Z{iW~PRij|*QTm?-nE$VhUJ=B@AkZgzW%0#)&D2GzR@zC1hS?e9ju zrhPNfVpuc5t39tlGok(#ck4iI$fyB2NHgL1*ea6GxmmL2oyo%ox_Mb&T|Z@xM7C@? zR(ylbHrBitB|-6<8o8n7pWQcdLpiwqLDw&P{kdAh7-dSlUF_v+gyh0|6@*D%%^Nzt zEu%Ra!v`!#A#Sv_Vx)NWhw}JIep2_7!93!P+M^vKM7bFWV@b)>k14_@@=_lSewE!! zR8;l7mY^qO-a^=l&y_tqbylR^mz?1A#!92Ey!E>-U!`i>F4<&#y*86}HPzN#;;5ka z8H2t~X-!u|%J=WS(uGD%GF`;Kyl3fe!GC!l{o%6XAc9!6QUBeD)`r(}DZkP!qBlcE z;;T_Fp0rvDJ>UPB(2U;WVONN??7TvriBpl(4kraWRZz?P$0b^P%9+7G=3lUJu9JE?o?|$xa)B71m@LhRV-K(5OJwqo=SARW>l)X~2 z%kfchjJC)|!S{%Xk!r6uHzd)P!GoSB8oPMhdZzAO{diq1TQ@OeR6wkRJ4|fqK4@Xx zSmGjl1(Eie|ijs%CRlzaqiJ$7RY&oSWr%ab7xZ!ejF{-~RZLH5*Ik z?S}fj&pcD8L**7upHF{fWjAak-n1!pckujdtbMeSqeI-cIKiWrRtLu3$V}-dz1MYS zZcg;~wKU^IyYA{*M$KDU$;sJs<_7+oY;NqBr4Lz4_kSXO9^{nFY;m0U&2y&g>Fc)- z0{yNQJUxV5b)o#75I1H06PcVRHCgB1C6;^HY-xNPv;GPJ`N~OWr(jd)`pm22d^BRu zXb}6Tnd-H(gCE|IssuEpj87|SM*paP+g3eT!6G>FWwsPI&Q-av3BqUVwpg|9v1vK@ z2}e7YF8&lPxZ3j7$~vig4Q1zxes-rEHkAB4nNWNDu4u!m(tRWScY66}>*VrB`|dbN zACWZdo3_A>2_BK)w<>pObL{Kp_mWb|z3O=H`TK1$S&5UY58nFm{8HGlJqtQXZ`B8a zWL>Iu%Ik5DtUSLm<>5QAZ%SUXhi5M5R3)A>*ne?wm93I+%dYpqX_05=zWiR(apDp6 zt*F6|K=O2a!H1VgZN?umzjDUZd2inJAa7GeJoRi;-rqWRQ~dUKeM!w9`WXw})h8|_ zuS%x%=gi{rxMi6n~i-ojPa8x+tXVPtO-lz;kA; z@{*g~+RyL7M+yI~z+a2OT3;1E1>Z3WIIcL9@f#7|9ntS6AS%qYfTGcP1YbX`TM>POVaQ_wSS zS({`IJdZFcRQCMb`^Fcupt>+tjQH7Oq(h3i>X4xe<=@-Z^K(9j`g!B`jnglGJ%8qC zN;lW7Z@l8U<5f?NOBmbB1?!Vjd{I5T;!)9yT^HKVJ^ju0RsZnPLw#G($%gsbb)Hc{ z9<*OiBz?=dj+buR&tKV8dxQDvwrVBoAg<1J(6oW7VlG>%U-Q9fs#DqY(oD)l=dz%& z$)<~>z4j!-7+PfK&bpgh&s^R)`gKfPrSJIn`j}3GuA=hOcd{JrwVuSQ^_MY2GowIzFCf%=MSGntXjX))7-?>P)4jkH*t$;hRi4Y5Og=ZuYWLvR(J#&nItgd!t?#^F zb~WxIGyu6&w+ieVN;#+aWT-5nMGrU~_jtzNRY z59=%CYjb<=oyhJRGZy6Y2@{#Tw$=vq(M$YiksbT_BORZd^`&0!cDFlQ3l3)On@D3x zTyWTF!S){AS#hKa|LLA{99G`1@sfyKmGH@{immJo*zY16&yotqCE{Le&otaG=y>>X z=j)G!wJAHCWeX0Dv|c^FH`HzNRaTC`r=$~B7+ zN-sWo%bew_61^1r4A-p-cor>T?Jwa~hf!~=vF^bdYp>&25fk%|u2KfJpHTi}WWDp( zbcj^K&36eia;CdQ6U>ccqnR9v^NEg56v+(tWn+NMW)--RL~Cc z@Q;%%k0&vc#-D3v${T+;HfrH4yk+bS`=mfrQBB6dO7kqtjmDdY#N$S`g;k?c`F^5i zoZWrG3g(5W8ONg<+;PrxVuRG%o?dpahbe9N-Zm8@B&HKo%?sWoY^_2 zcl@-`DQTbd7-=Nl1JCvn2aQ;B-^GCcwF^Vek z7q%Wf+o{GjJ!SWZ?_up;3+Jm=J1K+S>3Cb$7a9=`Q9=Eg12tY6Diyh^4PVYG*16Am`$)O`sGsuCk)+aM=3_H)tpj|e9+zv3j~^7S>7r(y ztXyfbLD|Xer7-E%jY7$hj`O1hc&{r;s=KD|ZFiR+cqOb$&Eu)98Lc?FS$LN*xjyYi z@(nbSZ~pT$;cv%f8JI_zY2824jYBhYI)iRewcR#focR2Z>GJ*E@Q3%QHsm3#u;$<= zSxTkyE#;x2?R{?ks;{OSeHrLArbBz~gt^2Q&ownyHP_Yh?6!I1HOFiD`0VbvH{X0~ z5CzT=Pi4C>!x4-`LO{rH5e?iR)ked$7>g$`FwTbLV^!*8ny^c zU)ITA*JOA7oc?RQa=zb)B{!|O5E(eWN1Ex9V4CqZ%Fk^FI;=hi!Q zg6}6+C5Iy(s2WCK?ycE&P{$+n*N-YB=Yu=qh}fm`bpCDE2WHk^S-p_Ib@UObs&=sS zy@F}fZ`%@j_vRImF7cmk-Ieg2ZL*(7`v}TLw>P|Am3Uc~;oWn-(LmK%<29dPxRj#x zEag zzU$lD@$adTr+cx$c zrXp84ZkUNU7T))L=VfDs4O?W!SKhn3wz1}^`rEa0KLzF*YTgV8l%7+N7cYAlvA!s{ zK|hp(^7p&E)tr&8toy5OMtRL@caqNS3r9{75iGef66-qkVX#%i|mJYF#HNIs(ZfPW$|ZpK80)tG+Yc!_}eD zg*O!EWF!byrxRWpgr19d^;ss&+DKVuc2`52Y&j=M)M@~4?bCU;S(1cYe|qTFiE|JA zd)^ps#`FkZDq8pSPDvK&Ql69rruT9B>LCBrw-G(mC%6Zk9kVy9OJrWf3^b)*ls_QN z`Ls^Q6xo`1Az#uXdZaaK*uZWk(F6X6fUwVNo?Q^ zw3`e+RB~J>^CUXd2j$!EpedN5m8#ksFRI_TJ%@7sY+LPw={Nb(j|j2t*koPdHpBde ziO5|&gEE~JPp6J5ulTsLH|J<(cP!^!&cfiuG0Mo3_11IhpVYNaDaCrv-_@c%8yskQ z&=%N*K4LpPXizcZ{b}md^o;kR%nlQju>oo7v(u{MRzGa^WF(qA$kofzP$`2Na?aCJ zOwGejc*#vZTNuBE@Y{Wl*I@t4*zieLYhS%5;Ti7^biMk>E%^C0v1#ui`;RrB>sFhv z*_JL{EaLUz_tV#dXF90CrElK;=$Uw~N7l2i)cDk@p?K+0{%uOAqFGyFYU|a5U)A2+ z)n;F~aw=m;?dQG--MceR3GFKew}}>fsS&CEGWN86MM?a*+2Wf9$r$jfB{0GEU_7TU z@G|>;!s!Q@#;7+n_9(@Cb7Svds-w5nbvcs-fyxN>qn|?63mr!k@9GVH_;BQSPq~IT&x!8xUmAO82Jsi>2Vz=B&YJm`8hh3fj^IU2yj~Ae_eXjn-QFjLpA% z-y8l~3qI!pO5wjg055*+rXrUJQS8v*7&Lt2c9ClN8o=-nM#)^y){M(K0{~X2_5W!&60+$A2 z|8?Pei4qN8zlFt#qJ!_!OSu2xCU{s3AC(Q?3|N{v4E!yP;a?Ve8UNpq|64VY|4{7D zg#YBc)Z*ntF(YVy?6j;f+(a*1Xvt20d;X{3OPo;uAA5sO;NZIaGPl3m`;S=QqdTzT z@~wqsULXkm;b`QN1(svvf3(>DMXxY~6S(;dwBHBd&z~``3+` yZzgXcZzl(kgUNwp8d-$Ak}OGo}2`wZ66cj>}pmaexhFFMdmXjKn3D}lu~4Pc9+OoO1!B1j+BRr9i$_MdLqahjt;-d*s5C`Ie_y9XIA1aGc#G!Gx0*KD# zFy=>DlPC~Eag~A@K^3y%APR@efG7fp&5Ynh(*)6$10oI!cmNR!ArKL7PFBuE;z|=h zO(H&<3UTP5=L)L{tSu19*{SkhDMk}bSR6Ks12IhI z->#X32?Bv|1F?hefeKU{09>j8bO10&oCG0-*To@84yZhJG~P1JH7!UK3GvtM6dg!A z;ZbdkG^aG92uKPA51s)OF9Z+~6fYbQJc<-}Zl|CKpm8+`fy|M`DUy&y5}XwND+yU? zS4yxiC73HvNN3e?(iDO|1!d(*KoBWJf`lYZQpDo|aIX3!LJ2{gL_m2EqzDugFhfbq z<#3<@hjKu5s8g``+s(I;O%yAX(<@{fJeaf|sGL03!Ca^@uD0L%cN0cdk`3UWje zA%(}PA&_XC0to@kq=^))I!eNm!%=YNI7|Qm6QMUVq#gxD1jA8+ksuWW$#yvs4+J2| zkwa{k6jjL}aNAKJC0H#SPKt=3V6{j%sSVON%mS>IInYof3`tUn#^sQZXcb8l7*hvm zcm>?dY$a`Sq#|2I0_p^qk~B&(AdOR8xJ;3V!s>x49!Ef;308`#C?uLFgHXibkZ4s& zn=h!UNk)JxeL$!ykZ?1J15tXB^e9*Zf&`6|Gp~fRL_|@rWKdU;BQ=%76(eA<6cBh| z047?3Qa6_-qVOaz&;kjX0DLY3J{Km*;M!0qvZBTYlsSedFEfC-y8#7~ibQLGOv6$W z{vxoZAb*SC*NPiKq8HCnpug5XFB`2r!x6(DC44kQr(1wa5$ozoWpxex%hf%|Fzzy;PdXS7*;5zt|uFu!JP*f=^hlVQ3kB#h0H!bppf#rhfq>)C2Y`8X0A&E! zhy0v`c`1LE5YEX40Jy+$Xr{2iQz}|YEDbM?v>6RvJ!r@n(4dwQ2cEd)HM%#nO|_1d zU2ljxw>HQLaQK-Pg#?qi#lwWfK=^a%uzxE6X#g_-cw7>|vN;{jsSW@f8y-Ln04_Ke zumu3=^>;j|cmW5F4avbF{4n<|ipT$|GI6&#r7=KkjREmuBB5wnJc|pKM%YR$|F4xh zCI;c=!(jsc;fy~Nu$PO6_yVwV#3E33rsgog<<0CQaCd3(LJpTI;L*e!>f8>*r}Fq* zIwTN?F-$%;4$yo^tPHGR1++mt8X%MaK@$nNR8}0kNx^~13P4PBC>9Z5woU-XG-I%6 z92%3wG+V=E3dNw8nIM|W6|y){CQv-Y5t{L$xe$kyUd!ZMn(<+2&1e_n{=rQv zcRi77^-uOpzjEG|{Yu=l zY|%iNw(XTl`<@(E&XYEhZ_39t9hodv)ESM>&wP)0`t9twS#5JvhL82TWa&3*-4Zom zosi45>?uv!`ePUqzaae(R?UfA_w!%|;GFkOuQ5mQ9?H)Yu@}ex$aV*p?x0TxpBek zA*t8#s7H73j|%UK?(HtWn@4c0UvT4~yxk9XS6*ukGbg9rZZv1FW67}_XHsgiZmV2F z>8HL-@2Tz?_1hM=EGzYVhw&dv4`r8Wst71QPHZf*y`uZcZ4gJ+;BU_FVht{+DRqcn z+Fex<>1&HzgBPD`&dYz_7570}<;P=<)ws>a&mF;?Zob61-BLHUuiE&y{AHJ0mZ@o4 z&kJeki=!)3i^#jUPsw9{79{B04JG7zXN~v2`s!wpTqrZ~s%Tkee@IOIyQ8*iEvuf~ zyBnT%({s2juZ+-QX%QK^gNeUcxTCJ7>deB84ntVyx}&MlRbIxgd2SythYycIA4gBo zzPOHvBbL~hAM}-eWN(JMyX9n~v(hq+8_frNx<3Ugr5`KI$Hf*E3lhxw4~Cu(tFUl+ zk$-Jld_@x{KK*u={rw|@Pi$k#$2)H`g-3IyOzpC*KAvVgc$|J#e{wzbK(%gtm645M zX<2`1d6|ulf?Z3NvFXbzJ}ZJg^{=$g3M|YqV6v46Tnxw1X#C^WvFe&|Y@~SU{X^us z2JHQWN&5C}lwtxGA&v#IPFEe;;4!zM% zyHA*K`z!pTb9=|mGzEAsy|g2AXj91EjBI|xCr!IP?8Wcb>Z-qf^$f_Z&+EkehzcqG zrdE1T?OI-a*t-kZy6a}*iTAorfJpRaDT+Mw8w+oXV2OZXLflR

    _J4-luW5e>m9IFL`31u$!srgrIwVd%3gCSaA ziO+JQ6X}_su{Vp!@lN;be>k1a==Ezq{WQSit9r4ven9t;puoi*2I5;B(}HeQA7-*~ z#DyhFiy5&DW|&9Ts*77W2}`M;whT=Y0<|w#C}do2HL!^=x?s5T&-LeBci((Cu;FE2 z(W|zy73b}Ljs9{ldgtqPoq1I!GVOh1^WJ^(URRRjw*=(|+{+$vB_-_NT>N;mO7I6y zg+m01_}w43~9 zaMbs)$<<5R?dqNRRGUm+S?j5{K7lr!W#+n{Mh`zysiKxV8cd1!E$4O0o^W zG$iQ3w2SPs!@Z|8<3uYVl`V?tgGCZ|Wz*La9cA%9Za-VM@%v)~Q{VA`i^D4{sx+R* zyYYA6cQ{rz#r!4ux|Q!Zshs)R)DzxsxO4&7A9djU2E$1>QoDW?yx-IwU7>VHZBicf z`X$;D8f#Ntj4!*pOHseCxlW$r-PQOtoC?PwzY%5nf(BLpJ z{IJ)?ZFtv1+6nsA(BqjY!xn0My;b#fbz`+R_Y~$eKi9t!xOe?%;y6Nea?#Yq?PtoC zd)MwzP}LYLxlf^-`}4TTSdLm#s--Q_mYFqt&x-b1UNYE_)k&L37G63cRtKM zC+V5B_nk&3nPU7eyEI#M&s$1+j;227c&6`JP_UZ(vB)wyu>NfyyTN76}wlz zJ5;c?s>GEoSC)T<(5TAZ-19}_4Q$#eemSsYej;R812iN>-JQ- z2R>izAg&H)_({r3D+9%TQ-A!mN`?IDyN=i;5yctFm(MQ4tNya>ok%Ox_3+YKa_6*X z!8OKZ_obgxR2Lqw5qXsgz7f}3->Caz*f}ul9wy|T+A^Q3gV^3OzhBtoFEyqI)Fz@n zuTVN1kXA3~cyiTZCt)By;Dr8~QzpXqJw6+{O6p8r?GfzecE!Y1$9wW7I0lsr#*#;i z*KKS_87_>FzjLriGsNVG$5j6-hcox}Q#ZUw|DA0v6xP_im0Hc<6Vn=hwxZ3`0_z2~ zSw5@7_9C|gd#Wc>iH)5WQH`a~-lj5>hAelu_iVhdpUZUU_c|D|WUNm`YR`(5E#E_) zkPcr8xN86N+9Hqo-Xr=C8C7c4xK0_9z&ko;TbnO_Zhm?%*~c>1ewUq`aoxk`6@z!0 zsz3J`U`D3j^Tl7CDH<`3$uSPhEla~sZGF1+Y+>DtqCREiwoioSoUB(L_on~Vp4=|o zc__QKL?=rAcg5&qjhueG>mQ-k)Zm`X%|^LToJlKj6OqXsjvwQf4t_0cXz7;oYi$bF zO~aS_M_qr{ZrwcaU^qmed~D#b*3OGdJInrL=0`wL{=cuk8#{d`KQu%0ktiowvNGma zNo|Z5_nVBe>t@oU?5VU@n&EcLiUTzN(WDN?M+Q#h$z=~ucOTEb*%1~|UUITJT&W3p zVbN1wt#Wgc&!LKBkq1;1&yh#XVENU$6=^bLB&&M?>^jh)<2T5CRLNSZ?k% zXYSYmEawg$v&|@Q*#bBja4`h#aNr)%QZuG=y%~udS{#cmmKH+%xc}y6YcfI+j}6WC zM2ThTY;YmNfUBt4KL38kfb!oyW?R8uJRH~TF=*D{|B4IwKl}eTIa~Yx1_pli{lPs7 zh}zh6#za5$|z5plYsoYfP1@X1nD0R1rwnB%@F4q1mZu$D3O-{ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.RewriteOn.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.RewriteOn.beam new file mode 100644 index 0000000000000000000000000000000000000000..227ab4c7f106343f16755c129ec697230cc0e444 GIT binary patch literal 6588 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Router.MalformedURIError.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Router.MalformedURIError.beam new file mode 100644 index 0000000000000000000000000000000000000000..bf2bb9364f6563be0f5d29f92e5f848d21c47f8e GIT binary patch literal 3676 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Router.Utils.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Router.Utils.beam new file mode 100644 index 0000000000000000000000000000000000000000..abae8fdaec7bc6823cc902885a163725b9a2e909 GIT binary patch literal 16132 zcmcJ$2V7Ij);F9GN)ic1g3=)vdJR?Sp;zgGbV3p!v|thpC@M`rPy_@uAWBn2EP#k2 z7DN!SA{?lL3It?R=`X49CutJ(B;R(g0iJu!+A9$rOe zvzhcr(85ZhFcOmJ@w6%`Es05^kl8e96D=i)!DO?-6R5^TQOSuEHl2~kibx<+m<$#X z5F-*8)Z}G9LF zL{>5rKxK!=(*RzgrI}?CJ&{d|rZGqPZL}0Jg&m(7K~74dB~ppN$k7F~;cNyFWF&O* z`(Fk5nYfP3Y~r^kk(q3~r6tz#hx6QkO|*E>0V|0{VMAd6zAWO4yLgf~WM(2Z4N2fr ze$4}yM4n%LfgsPm9}(g?k!K+>ft-Yt{Kd7PdvXFu1}J>MSFxZ=M~Edc}>&xnhNBva#PsYy``CO}L55gZ6A#Lr9s z(O*vsPoS}57*r&VZ^=T|=-S1QnXDqMUsigA{7V8=Oe`V3v@rokHvuOXLE`$HMJ42mO zC?%lOSV#h-?5_Y9hJl_T9~zOINJUEM&=ce7i8QLtk5LY+vjahb!4?I=U@$Bw(9s48 zpuwczST0OJd^r}5H%AR%x-l=s5(M5710-kj1fnO5{V>&APFZyLMW4*k`P=k z5iF@e8NrPZ#9};20(K+;Lz18`Nq|67rjP`1MpURYZ}EY4Pt zNC5VLHUvQ&4=^sxBf>~d=?HF>2sRy<0)r!$aho7hlHf?ml^8XIXn)cXNiRVOWg~kM zg-!C!CfSve4C_dQRuZn;20`^BQE((Gg4-#AFItIFMc5#42vdv-&I}a15k>`Ji-UoJ z#c5!qa7x_%G$Cvi6}M3c-xPoYL0YH~m2ijA%6KY)gHaD4kca^YVmb`bhEXR-_M=sh zSS(sqARQTkRwD|eV+|LWNC7y&gyS*c(dsbnXtNNWl#T!?gVw;N3j`p%(3)s9JXRpU zFd_pjMFb=qAUPmf2_!a!lZu=jE*!s1~L60HalqSX>33rEV3>=8#KiAMHR zE>axiDhWX)Ng$x4tpZ6afN-E9e&#JO7!rgdWwkJJ0m?wzg5j1Jc{oxI$Z?UlzjSbs z5}*$G0C3_+2zvk%5V**tKWRn_G?0-bkiN)eP`^k#*1=u?=U^m2sKbE)v)ri)=YS*N z90d6Uf>YB1fr`UH5P4j>PMv@Vuu_4D9vEZ5C_#{D5GF|;Ca8Wy5(|MMA&fwO;6j<# zp~QlvMhliY^#iLR%k3Ag(M0IF6nFwe7-0uT%JX9mg8ys46|^wQJf9e02myXrEsP@1 z-z14_OAHvziXgR*NJc0d`BB-~T%?o;c9e^hZWe-J7ZS}7mM#E8S)--!=>iClZqPN- z8dW5Mo#urIYtKc>@UUn9Gz5!WhIPnx^1|_a0Hzk;gCAEWz=x0-IB

    15G}_6cQpE zj>NCTD7D(OBG|wOtz4umPj4$J8}dmuaE5eJjE2 zszd6+3F9$(aHKAu2(m%X7^902#p8j$1;KbF;RqzO433Lb7X%YN7}tVeqQ+@qh&Z$i zG&z%;Mi=H_EElOEf=4a^O9k*c9w7*=A4np|h&(*-xhBsWTL0>eEhyig-q8N(4Sg_Bp1Y?Xb0rS_gfG6Pu8?iV^(3>7WA`UfR7uE|r z4p_rQ5|I!aw)aM!SbD1IWlo z1yHndVP)NmF-7ddmShY+{} z2n2|{*}um19*VuN7D3CCC=4)|{|v4Z7ij_E0&#RcjCR38xCr<*%&Na|@fJXJj0;%P zAY7{eE<=FJ9gcKS$G8R<7NKm^F>a`!0K+C8)fMmr7KOL`!+sR-zMB?A8ifpS z=OQfuJQ6UVb79ehR!IJ$In6g^)gc4{n1aU=@lf{Spg4PQkyZexD{!DEFoNWSgmT0h zL{svwoWnMHfm;!9Cj;(3fZwG+ns`CCc4&7{^M-EBut>1R`7F?YCf}d;Ye+w!4X~~P zo>;Ag@kf9~i`TI~7LRuTw-^9J07zQE;sIFJfI$f@M>w!fbpE*W!GcwlKjIed*pPuB z`+0xNhr?+zmzjAux7FbVAiokO@t10diH1VT+QVF)u&@X*jc z2r7_t*zcsn_|oBE)BtH805IYgfME3&BtRe$;Pwm)=BmHpBy)>^oF9;j6b0)ZP7qA) z4T8M&J$+%-6XZ|vtD*Z+XfmPjyyy>rQY|qQ1h|m~4<&vun1DN#0iMF}WITAT1P>s1 z-t!WkLubd}qvIKoEIgfs|M`rqji)a>iQ!qaXy|DZuZu@u zrqJ+_sX!|WD37Q8#m&=hhDPJTp%=wq=tYv5I%eRZ5smg_LJ|pJ3jo0Ro!Bp+ey2fC z6FfVy(F>r}HGxhId_ppK2q(vL$f+!RBn@E41B7_!=^YO}_i5v!8El@JpvjDHFJBZG zln5GuR1^bxu%}TWcneQyG!{?N49`f6PX#|TJT*0uoIt1Gfk&9Bcy-7kJcEhXgwSZ< zlYm#C{{C_U@F{P%fJWsj`r*|ddLV9HyeFhSo(63OfF8jHKqRjM9-HvViBwRhFqkwv zctri74Nr~&ym&Ln(%-A}1NKwEb0~PI2l9XuQl`1!D9A$z2{bAlY+rzmf3+KO026vz z{Q(EE?k5Jm6=p68Ng$`-&LF*HLBW6`28sYE&~w}pP~f15gM#DNA)aOYx)eA|^Xrhj z+%I+cU+M~=4yCXnD0omHosg^&C{SOJ&gGy$bf``M4ECz{JIr5Tl4F7;A{(uASe!?ID!IUfNXdArS1yqkRCTse%J-! zgnab_voBP4NP+wbJHl^s=eI*`P#rqFL4ou^a-N{r^Xm|%A6P6w-GWaC`)x2YP@w)H zTcJ863)v5~L3BNS9il@%k^}|vHxx6d4)H*-Tnq}tBMJ&cgX#i~$%zo=Qc#3Jf$C6O zBq+Q?=n8xQR3NMne-Qr+ z&A(6~75}tZ#S{6*MqcNC+s5L_i12r%$bt}(f8UMbu?X?@kI3*?VDqx91n`S(zm**3 ze|+nkzGz7shix+rfM(3|39ugM`Kc7*mRSv^0N%zNzb`!_FwwBsG%^)ZsgxCi;K0LU zIsdqq3z$TB{laxYRgK@#{~!dZ_TsVf5P>aKHZ6ty&z(T9=?T2eU?{l25V8OV!{3Zs z*oBN;fD1JXLWT*1m@S+%p%a{U0oR0>YFq^#LyC#0Y^C=uo<0hRyO4*2ivp#0za1~`=b?>hgKA6j}y)jUf5HO4xOO_>4(-3XpR+u&NkqE2RQ#2CITG9I#wdj zEs0o|NjB@|ore0I(|6?*Ld;<8Af@eG5~BeBEnYrA^N|SjssOwNh=U?YW_S{lL7}l&98?q&Y~(^W7@Wm`3#x!N8nhwK5d#ErGT7u@ z7-X?PuP}>|%%srbU_N?aieR$zz+FTlIf@>o=gWvvyY6X19#ld@`Azk>7?v^78(~X zcQ<*$>a>K*)<1$JKFYW@YwIt++oH0jMqz7QW8sqFmb%m12Vn(I-l%YfIt(kgfrT&5 zSO?9(MP48_Rym+06JAxhM2H+6oOj5u>KAaBT$b!zm7GyS$`DxfrB=wt2(|usGwarM z%TM~(%C?;m5a0RmL*<5vhpd}_zM;Hn)4I5CS)gLPiS~v|^!QNGDCfIp810y`b;D&5 zW}g!#YpnJ4^(C+GIsZ0j60tv}vTBGGl%Tg^_%&>I^yA zWykWjL*cV|lXrr5(JN$!9RJ*R;)%#Xw^w1qYtybh3Q-E~o}K)&%`Sd&(>aGPVdp%T z4s{Hz|CS|7KepKRM&tM$qafHPtXmW$O){YtpALj_2I}=uDK|82Nb@WkarQ+%l;*dq?p*S*K}38)><;U+W3Q_k+cQCR3%Zsh9RU247}7zrq|V zt|g_k;IxhjKAY6?>DyR2_tcg6toVk)lf9i?XCscT^=y}6 zNsFg)sEu`7{NtDXo4se=ys0?mB=abOa_J0Xz>|*s)b6ASU)3QVJg0sc!2S5;W5tTx z9FL07xIwX1w`Lb*E4WraJ9$!R8mSZBo$S)socK9RLJo7>v)raE%3w)@S;=9|lg~1W z9aPA&?%v_WtGb?xFMmW9UgQvXXqUuB5$}QqOJkYQgB=*dk$4l+Rb8`+tBPEM`<4~7R+}Ja3Kg@bJpMd;+D_(RJ$5VX*6-w zRK5D+(^hXThflH<&f^qGB)NH{p#6K%313A=lBn!_$a8}D62*C>Jw&4@I@*iMUMMff zYe6Peo)98$MpjjY#%&GVe&vX^-P7_$*l1$HI=Hu!@4D)qKkzdt`x;QIf+OWZUDn{= z)TMvf<|?Me{eE|<60K-#z|6~YVprhycB4+XS)89&wePfRusIaxw)|mpsRO!0CF>~s zwP=C#$!6?I>(|zs-gw(iC`@p$i&w8+u2Q+?=IA=&vnwxdS1`u$11Vk9X0D^72cx_= z1NmHPtUdFyynLip>A*nx4(}~~NT&z(KE~Ih&N6KbE?Xg=wpW)`FOt<69Z9SByd+sI z;k>Gpt6|p)zo+V|q21+iX9$NrKZY3}-EE9zuG#$h`e@<7>NRH{kt};>(spjSGKpD! zZE@Jde3iqg%OToLf@5OMG*M;u3l)n>Twckj?H_nt=2u^xX?SJqBWrfqRLzj(tC8U9 z2NC5D86}%ew`j#?d`t@baA%`c8nV~+2B9;qGHpAJ9F+8 zQa9ROmaqCExUV^?pGnb{J(uxZcCx!^z2!iQ`+oMR?U?%EWPt&Lp;H+D+b0&!o|7kP zeE3==`-yl>5fhwTanNa-?mL2^{9UPgI$wNuiit^XTh$wGIMiZNCKTI4kuUAg);Rvy z({_{;<(>MG{>njb&updRw`_UQ1CqD;OVqeMpY@Fb<45Am6L+keimSU#*fdNhcL*PZ zv&Vvk4ok(h~X?cbp*z?<=l*KH$9Zgx@H+T4iTd$;l_G zKCk9Q?^?n~3e$WrlQx6ROFJ-XUi(g6Q?(&nr<*>`8O3d@{Cu#(W$s;rcBa+U9QFFQ z8|0dn3k=boaocO;u4f8Vtlzc2ZhrGjh*aFypt_f>&Qwk-sv|q<&$DKe`b!S1Fg#Q{ zu=nw`oz<-@#{H}?ub13E3#AM%l|_amT35W%jL$vPes4CyESakIEV#{XWKw+i+IC;; zX8c&@ffJD(9xW)_&=1}@2iB^t9lXZbzbJNXuH=a~?)8*i0~upizI4878!M{zI`Q0i z{XtKsd8UkM^+f1QG^_ukCCM}VS!P|yj#>pZas4Z@kqy)a<>XtFk+)AYboE_fy1cdB zQ>+@?pya~-3m$X@3?X7>UC zw4U>c_QlGaxG2N!*Tr?|wF99nms}&3>?i3phr?; zUu^lt&7&nLbyx4Kmsx?3S*iP{cMATpMS%%xmqWPmxODx7Z6|-1JWOiw<45s9o7Z?;|PW2(1`HPiOknkW^rL>qhyY z4k61D(_Na%ZP&k#b+2>Fy_e{crxSPfK~?dMEd$E0igvhojM#b)Vy2$w6COjqmBtu zPPxk`gVj+se#|QdC>b4&-CX;&j^@mp+cxU^9xUzH#zQrl9-Uc1&d5i?Ev)iwGLaKy+hls>BXGx0L{9b2EW4vL&eq*A z{vkF`?pV#_jCgmbAYrXl{~K6)Rz9gCOE_qg)Y+_@GWS@2w^$Fi*!?s2dO|BHk{p$< zXY7Q`&DX8nz1l&=v*Q$E-?|;|S~tu!7YwiCY)C18l4&zYxBQ}Hk#)cthUsz?|OdS^Hyrz%_4-i6Zgiqcf#wsGoFH5 zcNzL0o0CNI4TIb(s{-RM#`gZPRk8er#%qh$dQq-U-vU>w7?k;s-tDQ0z8Al0hWSJg zO%=I1eWFuE;$zT?Xg#OHs>e6j)xINLy4o+jOmf-00+;Db$<0A33wVX5LHJY$) zy!z$L7ysSUBB2Mp#-pEgPwys1=1It?uh2Gf84~d=UX*utiQTLuN);KRJu`|;6@Fg0 zI^KDnR`}ww-THCkrEcGs!U{cI-09s`_RZV8ovgZbE0eQMP0fV z+5Quf_F;N^!m(f7i@#-d?nZBswm&bRP+HI!e#0UlN7Fycq`7Bc$N290sIR*Bo8GLj zm^ALZH7FT^+Cq#xCL&yerG*OEvx=*4~>9L}4`b5ywmXM9i#zZ+u!2?$d-Qde_6yqT-GcmJ|Izt%Sd3sBR5A(3igH-RAWh zht-PRl&|h+O5U8Tl+mf;C}~WQuF2I4%eLGx^L}^wiyciWO3$Rf>7D#=vg3i{O-Vcb zw%wrxidh>n10_Tb#%l#VP^uSGRGr#Wa(+?uE8o{wCe@wJrUsPVxOK{bfuSDYB(=zC zMrN%swwSwV`6&_Z`aKh|ygYX%xFUJKgS~PrerR zrPsyJ0z19(g0-AWlx9Wpi>S!7W~@uj6~&vPmZ`hGRgjoVro&dfH{YQdIlkh;Eb4$* z7VJiGpN!A5O^qwL4+}DBRPn1Ceag#^_#IZ>nb+jgV8R`@DW{4HB=?P5|INQs+$*k8hKWE0%g>JOzB^~Nk_ zK-r~7aEVXZ{)`ZLk;dVI!<*UwdGuC(;0S|o#Dl5u0gt9~?DEd8NA^rnu1Su4I;oUC zrG2<#@z|($|5=eo0?Z9%Uu$x`_h#Nazh!0Mr5^0MD%j>!t*81$J)fQC(O7D(w${BT zwFGr%lPfmuS!bSq!oMh@hGa79(Npqvb;UV5TlCIn+V51jka?wd-0kCqOBg*fV_eNd z|I@WE^5+6fov!%nUMQz4hsmyS>=1Uk`ZAMuo?(%_jG)P2@&BNv)L*E0Z13gfYbPIx^v>1+ z1MAJl@ud@=U~@?i9(SC*Xm&omC4KoP;+U1(f%}?69W(Xk#4y*xQW|^DJY{dC*FQ0M z%J}3`dtdcNK$d3vV~&dD2i;qXR6cKaj=Q0$lxQud$EsHC z4(6E;<&6y?wJ#)e_gsE2y3Xyp5G5r?r_Yrf*k_`qt94<&G^$4-m&sXFwp5`Z&>ug| zs%bH}d46uo9WFOuug#T0QQHmar*quCgr0D*T}PEsSbbNeVY2pEPz6{2#f2|9Pye{P zibLCe@apyJ2`lVp4sl{0M-uxl?aBGVTv>Qa;^jk+_hNx^HLX5TT-4lnvI+6vX6y;>t~BCDE!I$#YOsz3f#wSM9}F)2-4Zsx)5z-x{YlSb3B zY_F+9t);E62;CdCKg^EwTW>F%yKTBcEBoExvi=+`%Dc|8KM?sr7@Pgq_rDz%xo2&Q zDvOwWE`_#p3^+KyBV+We>t>-X@_y$CmxI3I5=CLXUFK2(|~Kmem0WRDJ>Q#)}s|T$flZ(=@|qn zZc^Q_=s7XJ!nfz0zQpA>Fa6$j*vfTSx-%Xxja2O0cJ{OQ^lomh%+0u=nF-^~tLt7X zIFScjZfuxZyDIk4(}vRVQT+0w#xZswPXO^soul9O@2Wes6m>l_+x9B7Cr$^=q=G;Mc zQtv*gNAKNsW{cr>K{Um@rK)Shd03jU1(9%Fb;G(+={fV*Bbg@tHk7A|Sl!^W9`AyT zUP%a6+CJZ_Md--LyzX-oQ$EsJIP>}t?)}jZkJURLe%jHAb0csBjyu%i@Gs7$JwQ0< z74}>$D7R`a*9z+L4X|)t=P`!Or|g73#3*i4p`_@XmbJQ~y!D`LO3^-9D^eDmbIJPM zr7y_D(UUI%(QE6g4?Iktz9p@y@6IvX7WB{z0m@bI!Q)w$!amMZxt*yO6wG{s2CT*p^?dIdcCuHavX zWF(8`ZP50W9mU@Oej&u$*!r{Z;1ID z?2Sdt3%mT$?%VKhO8iOtY@1)-2-==S$Idm_ip(p$7rTJo6F&EagSR@~Jd1fYxM-r? z?z@+3+5vRwgY9cAmT5h{>Mc6MzIJNm`7W({_h0U6725u(^85|q=B`gwXUs8x zeJf2|^lYndoF2a1p7dP*o7L`TN#XC$-d0Ow7paW2x1N2nRQ(02Sv*Gjf@$!WqJVVK zcfuuy$WN~l3_dvDSQUlz3r#P%koVNuP+xkf#{C3IoceU#;YX!j_X26>E>4BqKD=V7 z#0G8|=1D@@YKhN&`Fj(QS~r!^LY({W&Bf-01l7vS#c=A!R88-QKAV-iH=lVLL0_q9 zF4a|-5#cvW6x^qA?-I6R6ZgQ2o8|fM&tFg!c_p}FetNmt-F_R1udcrEj;<-w0}8~o zTDf<>7DONS`Vy2Fvm^|6C5!zgKJ!p8-rVRB=PL?U>E?vfM;)rV;^K0d)IPJcWju`g zxvr8}^Fp0#T`g1{F?d?0F!0%}<300%g^3~CH)-fR{V=*;aQ)3osr%QshngQ&KXy>_ z(N1;ubNOL*YjazDHlTYlO8F0a+&Ty|4-Omy41@eWxAzC$)*x1FxF zh4|r=nFF>vZl2#0R2hdog=~L(WrwcCBCX9ys-GMx=~pFH21~0mvrq}CS4ZTs_pZ^` zbMbSmf3)+ILrf*nBUf+bUXw`A9H&PkNnMoe%?I{7)yvl=D^gOn?1^!EADz*7|89A~ z;kUXHYO=Xi52vX`Vyvvwi%Q-pT$S&g2@q-fD75uGj^6IK*c7`$Z9~u7=Sj!W0-Klh z^qoaN^Rf!5#oe|seCvlaFA}#(wz7R#WA!YHxQ=eknX-}y_SldWd~3Als$DPo__@V; z9Rp`(zq_{5RmKP5Tg=-Y>6U9~6LhFh(`%JybdAH*>_LHj)-pB0C)=}pDMQDf_|NrU zV&rZq$hb5T`q@otkNMs7Cu|q#tW-?Ez7i(mX;ySZ2q z!+j^|6-sLF((?EB#3illw*Ttul43vquGaLeU(09vMvJu@J za`BhY5|1n8p}hqGC5QF%=I7_C1kTtOaszG~zr9$oEo9U>c7=wvM%>Bo#17mE=WjQ> z%y)#nyPFox-hDf_aC7Zesrs1G=l$yw+>{^0P40SZ_*M1QTMrLabjtX(H=H;14VYex zde4p_i%Lnm>?p19T75TX3*vYWBgZhmMM{l-&v{@N-wB&2$ypToP@F;j`Vb7p|H)TRn&>p|& ze9GRF{_}CNDpRD$@)POuqtw-l*XG!lqFtGF0vCEH3d+^zRnC?5(l8_=2v@`aC zl}0DEK3K2zZn=iMx0rxqnuL5`aRaH@Iod}?_p;|bQ5|~+Rqp7AycSz0hp@uhy^H^} z?HeF2Ez5asMrFk%=yg<1`E986smpQm9+BN;QNLF8Q+lH%O~Eiq~g%N}cY%yj5#9xUcnd2(HoW zg@o(Pl@2eZMbwIBrfddOTACDcZKl)g#ZNh%R^2+9IzWh6bz4H>Xac)L>aF%`tteL& zDNNrpn(84j&BT61+XKyJ-|p<)Uvs~$3_UzvQLpSVv{dL~tSLGbHl+T9eJL zVG(1OcI&=-61RKqq+CsJDCfyp#ZOn>Rh`=Oa%{?|&B-UHVQ<^HM-wa;H(7My?Qd&! zHil|_!qvIvI9`6Bo*i62v~kR+a<02dD0fRE`Ol@VJ^ZKFJsxh6+A%1Hm25&tVn(}8 zJ}nIWbmesSz^t?8mINav(>8utK*s5hZWw#~cayarlWp#p84U$``9w5r+W#`F)1iE~ zL>4>GeCfTeJc^KSj>|xG!P>8{q~^P&8ZECndQCXmO}_fhgn$12Acs+rWF2gIw05K2 zo}<0D_C%mXPZVqVs~;>zcLs&LGS_&2LS~>4#fH%}%Xavl@#>W`%~n1WK_4?;lvgy? zSG340y8F$rDl5{mYx|$Dqt_Z3&y^Mp_{f@u8nwwhEhavACWYDiWEr8HvU~5ySA=d5mRq)VNQDSi#D01@@xXFT%bWhH3i0m`N{L?< zR~OEwuyp2Q@fED@I=MjM8y4U4NXReLo1{A~y6M60!p9A?g}>{azGKQn1()g?No#0} zRn$fWC;N4g^IR5ZU25NAp~;v{J6@W(e0+)O>nPfn0I|a1HHR{e|M9N<&oxK;dq$(y zKUL|;s`wn0@xl7^&m42s+=xZ#Od%Hzy7|5KIvFg6x`~0l`(v2>!yF1hUzm`6W-&WFG{Nm>K z>WYiDTIa@ZFSS{z7CpPQ z9lR%Rw>8pq`E~IF8_r8iKiu>}&ZrPo;In2UqgecHfScKTgN%6D=zzB{oC7!{eQK3u01*m`j zjRnU)K}Gy$sQhM;e{sg|p#F~bzYYKIUlGCoGkSjWzoP&Dhf3gAcmCzbza!zt^q-RI z|53<)kM18oo%&yJ7k@bL(&-=j`6p+9@dzdAzd2(ehJw)l`u)gi-k9Te^>6XwQ-7Cl z|3SNOB%KZZKa%`!UH^-+zj*kAHumG^$<0JdW3q68b`IFPM|KJuA+{ij-n2u z8c@@yx2QL$kEn7~J*o!fj#`ECMERk7Q9h_RR04{DNYD~!1EC?MAq|uIr>}qfQj;LeeV{u1^h9*+k6D1Kf5+zjHq?ID1Y%NNW zWJ%g2r9z?l&oeWs_kHR8-uM6V{nzihj^{k*xzBy>{ha5V^PE{@YrletspP(qsiC!D zl#><{6YHaI-@cI%yr!W+8-qy7cA?P$%J#(QC;}-ShYJe#C*p7i@ljEvARkahj_@Uh zMFfQs4*C%yNCaPe6v3~8urY#2iX!8}{4}%tqr-ipf{5W{?=ZYCiAYujh2CLAzvxhc zH#v$F?Hi>U9u(?LAcf+?1KtG?qHy$ww3ZM;)`rIRwn{jh55b>EBH$Q};c)K=H0p4m z9xeh;CL>VcM35m7!pS%iA&eMBzz{>)87x@Snv3@%_y>g($Od-)_)s!o_Ms(#6ix_@ z2nr`h5PYK`nu5XuynTYg@uV14d}t^F&A?(G9Uc`FMldCjh@>pSMqfe%#1}T47*4Pw zK!x5uc)t)r%s>Q?7>-1f7%qy~4)OF|UI-rAQ=jOdP(K0*M~sLfX9a}^(YXFjlA*6J zflO8f6)PBRn}$b+d6Ni!(Y^$`&>(UY8OVAAfkY#4OqrPkFtQULW#a1I9xjp z7ZDvrrv&Ki2U!Rd11(Lr#>DXO3J5TQ6tn^84gdHUu%G_TL>{eiWt@ovHo2@b&O`LA!AkDfG541wZLdHunQax!AA}RRzalT zHsC{p{D8c0cyg2~#48UzB7zX^N2i=7g@ZV#VPNApoHzYpJDtNYLR28pk7l)`Fn}kP zfTI_w0!}bN;TS(+d?22T1LkCa;A7BaND7D!BZNoMED)vVO(6T?BM5bL0{sY~geby6 z0>drBH$Ytb0!j%aZ~C)3;Ffqm9%v3vuE5c+1Tqd6KkK93bO^|f0T}}fcpzZNf8Wte z%nuhD1R?=G)BtFZK*5KG0I(<$9MluTB11WhzS;h1G-M;+j7`DD)kO zY|$VB;-he(1jyp_bo3%f^pJ#7#)8-ufrSDI&`M-<5Q%``Qwjopv3L<#ba*cBBQ+ztQixycw@~_;1Yo~!+=XXmKprd!otx2#s2pq%7YXnEZVFOq* zRWv&Wkc31FVmbN88^&Sp3XmwiLL|zCk6s(e14E!dWh@_@s!FTR`@KGbhaIJQhLs5w z4+ku93NghqGjS~86vo6e!#PE0_lPANyzD3})(k6&)y(J%xr3d>Xi7gXh3 zR?LS$d1GJ*bODkNw9EIsU49sXkI^oc)~@i6cKNZK7(jRg7S2+D6adu(zE=~3Ap{uJ z>}b`5epCZIN}#bUd}$~YRGCu};D|@9Qe{G+m@p{RaVAMY6dcP8K;UU8CaO2PY8E@{ zAlA$dO^sm3RG_dZ8qJE#a9$?BgwRh+Q0?e!2>)D$rI(5PT!x{SiBjX4c{!C-VTdJM z7*(t!3l`2t&0@hIiDp#h8uRvk{Q06gj;#bF2x)&veih_j>Gu~N`eDbSjd z5uC{c*a8}>0S84I)H-&|02Z#Hjg)}vfP@9l;na3^)H^I(3J`Z8);x9jWkr%f#kBxyiL&RQgBHYK3+Q@KM87` zIiN_Air@jf=>jgLxa@!l0}V+*TtQaLsRvNv)$6ao!A2at`11N!(Fc3Vd`Q{}N)v&C|n z0JA{w13ef?F`-M)f*1{SJ}ZkP1}Fu6%mmN`F!O1osbZ)I0noGnwgJ);-L9wzK~Px` zQX(8uA}Hz;Dtyz7dY@=PHRa8q?{zD zN+D8#UZ4dpKq`Rej9X>6Hn`OR2@)$HLllSw1Khce(*{NNV#u4(oFae?1wbgcC{hti zKx4L`F(oaeGTaa@sjh)kQRhObV$m#ENq|KRFeCg&87Kn~I7$@*iN$OH4e+S^h*wy% zcR-Izf#gIW1(_jG0Ld~)BF9)DWeK6;>2hIVaBgpg;DKZL&}kSZV0<`6Q&2scXR1;W z7-n80I~ZaGmz^Efm<9WjvtT(L(2!#QSHK`df$OZMxsF-`QVoVsgPsCU;KND*2nhy+ zHVs0(0jUl{s6#eMdnySm9aPt(J=ADGYQPX0X?9G2d|psj3edd-I6D&zp^0UIYCt|m zMMwjJ&49HQAXl;!B3HVwFyibg7-A(9xL8148CvAh`VqNSfx0X-c}UUafe@ezM2apD zGXxq~4b5^8d<+>mLnUSie!3xnpalpMKkaC*Qp z^k|lW1}+6+4Iphf3kn%`ObVDgBqkObGg3gCIv{{y(NcOyT^M3D4H+NAFdr2m2gEc- zB{&}pq00z6X(%ieArFA;ffY*8oZAc`2uwl&5F!SJ7W%Csbc;f)M44(ZqfN~aLTI$9 z6tg7A2}??vvM{TIoQS%*DIc>j$cY*oGeolFk0KF+ml%V-#~DBwgD2{=yt=76$V<}l zlBSX%kEZ3(rf5cODDGnct9n#~Eab-eRD=?61XmEm4H!Wj%?FgU6w4xsWmX5~$%;i9 z0yhE7(Ezb9gdvwI7OM`t1QHe<763|uh>V3BV>#EuS?!Q3074@wLK)!p0JV*akfv}| zPR|0Q36O}&epWOZgd$EaGsIFG3<89E6NX!HdZTSn-Y|qIpm7Zqp$h8bL47meXOLrp z4hFFTGzoS0YiTxX-hecRACbEYrl7eOvh1ZXe0spe1sYTgAfO3ET{-|fYA?R zEmt8e;6J>ViqHUhkpP|xFk90wTQwl9U272AJr^pa~f<7A}cxP{*2igMo}O z7}T)aAtWL5fx2B30DuGoV&PIoEJQ4$E5HmmHOWh&ATTYY z1KJQR$+)VcHNZU=7}7vmgaezk{bQhW;9^2i5n4Y#;0&cjB}Xbk8{iKE>U9DPs+vMR zYlZ-(W-3WDXDKw)-9Uy3jLr-pjixb5^JDaPF9w7LqNy|z+>pVJca`v!x(^o$M9eB$Vr)H zl1N1u0o)q_?udDDlK}2W1|Yyq`ZeyDS=?kQ!WiI=1-PT;#k~RGj%EM?+#7z4d($j# z3Kd}jaK{1M8|TFx3vkCU00HjUU*q09i+d9lVG3|>LBSAlH1AzQ4?v7Q)(j!@qX%I0 zD6))_tv^L1FkYhh`DW-pKPE=fj& zHewX^`d1JLw`et!HrlwBL7OO}qhrX4WllNG)1DNZR~1CjZS=8u8qLgh z0yEpLhfISrF@ecCM=<}O7f!^`W**5H`c$nSG!sUjSixXu^KTg1j3s^2@yC2737Ree z2-b#006efEkX;TE5+rVrm_dT(I(Qg)G`R9H@&e#02oek=QIM7}@=)ESAOY%Vc%VE4 z1JxA=3BoA_k~AYP1Fo_lLGV!9av(wQ@*pXI1i`C-qzV!QqYjb=NDz!BNGm~tV4(ae zkY>wQGxGZ2Y5)=hGn=2K&5!|O1g^%6JVd`KNDw?k^BRyKcr%d9L4wL5+AKhtZOe|4 zhj>{B(rjChZlJsqNVD>R@VGF_-N4lyBnS^w4ygiyhw?rk&6fKz$|3q^jy3VT?Q^ZY7(+%Lf`RN{El7}TAX|fE0Oh4X0&6)m_@&^g z1QG-f>1;7b5DXXN3en8GCORC_tp=kk30xugWRRdg7_9sdWXFjhL3N=kRF76}6%+;P zS~-Aw=nrb^SrQ}>bRaW@_pkGtco-<>z~LCv=(Jll`ouJz89bWJ!$F>%G51S*00(oo zKQho`7HIaDRz%N1WvsLbUs@p}OGCt%<)xLg&)(4BX>+}FczTwG8Jh5=W2WVxGB}v^ zr4`XK@L<5ADUDGU@DTZjB^Epc4|rrOpWq<~Hu?$%4Fl(oS!p~BLL`s`=^AxtI^d~< zO!A}ky}6H8(h`J*-Io|11*YREb1d}*LqN=daLS^e77Au7veK3iD6F(~G&&@O z1&YiRHhO5Ll|fCg5W_=bg25lawloQ#V*zc32hY_afY=8?{JBBMI9Ngmgor?9NLW@X zPGqp~rQ#Qa56All`Kve({iDD_0YQZvNF+vqH5w(bG8P`C5)nuwga>U@0qc@v6{xRJ z2@Ue0XK4B%DHAs0Cjs*LxnVb=FVjKPSJR|OGm_s)%&&9;sf?~cGF>~&co+rweO(M% z#tdY}1Ec&y5hQ!5NgDO6K)f(4RQI>?@fjlY7q;~$K7gJ4g^yr{1;HtBKcX*#+uvsf ze@8K$npuMn24aMR5z22Dz2Z$V6==fc3 zHZ^DX0nM}0mgE0N?SBuM%zi{b%lFX#+sT=xwal_$;-8*J{D1(M@&a)Sb!@brXaU-r ztFHqcHf;j{!}5P)2R98u2*>xWF%%YPfjt-mu!WZPg7)eV(|_&Nfy#d#qfl6Bn^uA; zJbnaUuqaO7wgRn`i+}gU-!|@`J00wQY=-{>JNTb^9SgLv=zryNU=R#B-R~cMef?*n zhW`hKUw=n2-5(cx`1S3d3GyEgzYu;wWZJtY)C>LA*POrOgy9pwJoSEikNE9JW6}%Q z*n)OIki7re0fBCw)&a3VJ1%K25z?DBFMtSWfoEX?@3%PzcMz{EVD^Rf+WK3^_Vctq zD`fiE8qClzcF4|_|F(Xf>4&lZcF*#GX6G2~(FV96wgmoe4(W}~HO2)xhl5>@|4Ra( z{`R-OQv59Tg`K^kwLE8}fl=Vr_=sQ%n?C{UYyJJ>*+0nOe<1Y*32yV7I)$CFn|;>% ze%nmdtjhoTN=M;@<~Zq7&$NIKk0Qk^g!3`en1(@3L1P$Nh+QxffYT*T;fMm;-@!XI zDTcxV##G^SngBV!E3!k1pf?VuaZX`@#7|jFpIXMvj_ekymxst};Me_IH_vd`^j3p1Ms#TYuz(7e?`jqT=Uc|qd)|3eC1 znAaz|hUXg0gAv7o&6z_~Am%Z23VZ=xndt;T{`^1bOy}YKf6P9qEs&ecO#|ro zK@YJouinV-z3@WL@IkyIA%pwNP8cv6_%X>x;c@|Ai$)Mgv`=<}DeNTh>1+_0upr$R zT`~){uuBukd?v}VP)>oIkAeksig{_^#^D?s4UH`w?G23==;dQ>T4?bS3Yl;UH`vHR z1V;&wz_;u^p@i?f-f!A{0a*zTaGd|n{vdkH1#b9b_uuzL6+AOw5VST3Z7N%UWw-JF z8ds23{&?QSET6w?HUs~6#4`fc!p?8fsQPP!on1zm-D^nG^2G(x^2h(GmVZpyL0i~= zyO#fs`0rX?h*38FBNT;zgUUgw`)OGh^e^TrZgb#)8HkWC8!M zgP3dAE0fuGVX=pS19k8L1ZW4bDma`2ob*HR!+?`}FhqZhP81PCBw=*GSsozgL%;+C zfgQvcJQ+jZF%HSYh9(bXnt4E@{6Cuqq>;bZ;OuU22%||7?UfnMB2Y6%|O#Tfd)MOrw37PLU4pW&8IsezvrXvD0M2FMPiTU2fulWmxdTBtJ&<{;9 z5HPl?foJ+Z+087yEYQg&U@XC`3FOY^OAL(;3&+nr(F!o=LKwc!K-1#OKdNs4)t}YF zzaxRp1pTO+e}@4J5%FD`{|X1k_3yUwV_ue~DLB9l)BA4S^lAG!EspVO_Z{?KI>L{y zB3&H0=*4*rRI=1rSv>~TPiLQ}hQ*7|#b z>7&y5Dsw_#n9x7(m=A=Feqz>qkLlal=8@Ll31oJ~a-Qn!jB~l>Y#VxS_=Sl;k6EAt ziDr%TA4C`6od0YOI}3Df)OTzA%eLuXHBGAp8Qx!l*8EzBc>4?ZuMBt23cs+7IpOEm zG|hJZO3*L7VfNDs#!~H1D>O8DAOM3XMhwQ0BSM3G!6!AeC(x|_-x=+k)PG+cpUc+f zuJL!)_mj8&jg$OEHnZLhmN39vGSvL9FwkF;e`=14cFY;rEDW7xH>Y<1j9_8!yGepI zH+mlO21tf5>F>|}v)~E5>8B|r4ySP1t`349L_3WKI+4F*10w3rgs{)znMW@Wt^ahy zGrRMIl_n;-twH0ZU$zCF|C0E>C}Dp81gJQ^pFQ_487XLy5e{x-b$CEZ({D*I2P!Ikec@Ss-N&EhlT}7Vu@dYTDf20n3^q-9Me>qbB zk5F)3n{SK^^^D&;0w|`jMd87Tmr--73OxShnDgHaqhSOW)yiVQ3iI5?CRd;$&z z&)>J*QNE8>|H$RS@Bn?F{v$m6z0@civ;%*EV9EcHlxaLM2hlz^{fE8?W+ndOi$8?T zOeE2JvH!ws3mp;gi6Al#oag*6@&5U9W;(6Vpy^k>MjHo(6KUVI{|f=l-zYm^20D#( zVY!)QdUk-$N?S7g7c@YT_|MG!(jfj*|3&`cBx1(P0WhMUCfQ`ZPqIO?YxHR~JeX61 z&K`y)+n_vi}Eft zf~NJNi~~(@blaV^k-wds_}j=wbDsY`(ey*=XNiV-s((cC-?}Kx5Ezpn5N60n|LaZx zaLzwv2zd;fihMvQ(T6q=|J5*OmiHf9+yCJUJdFMV5B7gBL`pXg+SUwk#Jo7vz&|uP z0RErHcF2t8e{F&IXIU^ZXcC`i!hx|&{|`k04RU^i|1BVm|I*#&q!8*+p*O@+w0FSS zes$hHVL^2d1(G>qIBgx6pYgW2kk&Zw?EbK|+GG6C`L_V>?Jc zpHY?w?wLV?uFzR;5DawQTO>$OIdl#k#4}WG4^ki_Zwsz|AVDyeAmJH#==?bkM&1}) zp+mQzbLpTn)u1{Myb?%OjJ&)d_!S(GpIw0kXN7Gb)3;rQqnMIzAK5Omq>|dUwQG@@ zw4)}lapSe&&^d7}G#x;Di`k*yZ~;HA5yAx5R#t@y82u2Wa2AR%IJg6R%|r>G{oNZ9 z_>C4K^xH5L4u2B(l?Y$(n>duk01C>0X9O^%NT6_o0(>+WxY7@cf;Psok%`eHUqZ-# z_xLPGxF$XUL11m4J;@HpS$<=|8_!p}mNZ587m|rfi_I-O(k<8NT9cyf&RE%<3!>Wl zSmsGmH*i1P*+@^ z!I$#aFUz|RP&IuLP#gS*UB>&4Qy%o5ZW8r8x4QeR=jj(c?5D3E4}7T~4Hsp-wnfjY zMPKZSfRd6@*p1^he5|9RQbtcO;X7wW{n7?IcI6mRuC6E;>HX5&WWW}A_yzY}gl}Je z3~w>!@vG|07at$@-EP{Vl74{cP4edcT^_`@+&WmVbLykh&E%rdsJmK^g`bvhNF5EI zGRwLjBdE92W$ZL;Sc_+vd+_{rLCld3%7$%$s8vhue3;g3BAvLzzoxzfeLeb)*p1gV zix0nn^IfV5Nc!X`IPS4HWkPv)HTx+8jzRxB!l}!>EVo2Tc1<>j%X}eSy?gq)?9)2o zo|^4l;sy^rmv!~mNjH_4BLxGwBBL*VBC>A{jGlSoH>BMLe}DD?F)+8hX{YDa=^b%L zpBDA(>qM=3uGkW$(sYT zKKf4A30HfDp1pux1K*jhfn;X3U6*A3%~J8AexZqtp4W{VIwYM0+Ym{dRt}y|N8sq~ zDKop?>YH(_rD<^@zOus##|ZJV4#6ubcBa^VK_=y9Z&=x+EIa(fRM*vFOnP8d#fF_X z9$JzWzw$BVb7b5y$%~CM`bbWVGa6Y`7H9OXO?%^m3;i)4zfSKms0@=ne39HTRPNyG zbi@exagTH)hb^vD+GQeZ8#C|iK{jr;wB5s)#W(itV42M4zU>pS)@9YT79sX1E}5I9 zMN{!L=Qc%(Q3*r2oZ3~pkAEr9UOQd3V!{}G`RnSFrv@#99%-@^s@?R(MO``R z+qG4t;A-Yq zl^MR{7lVJJBqTWKjBiZQEKncf_fg4z&spDf&T5H-7r{!`MLc)6?QxB!`^_K1ovGSG z&nJ9t#YLMGWLs<8J2R;BH6`bZFE(ubBjaLwKa#22JNv%ePA5WrM|a8fwOV6inQvo+ z+^4F@N#SF> zk&EuKkdXK*Sr-*t>lL~c52lXv`##ppDcQkAer(>hf2>r)*t>E0J~!92eSI2Si%=(W zpW3j9XURuv7UdYf)7IuHLKogif5*;KgqGVS|H=Bea+AiV(j^MU%Z3Q`!lRGsD0-WS zgDjre#c5sJzrxxt7qk@OWO;KN5{?P3vCs>MaI@HNU)0>gWy|iT8*M<%t}c3apU2~6 zbgn@2Kw}0jTK43%h$oHNr?T(+DJ;v%TfNQg^MFF-j+9USGF)Ol%a-z=S-i++XY6RN zPp-^?ov$U2grGRTS+re*C>LkRw|QoCV$4yQCB*vKS92668b7>(^GVq?uQbi26Gjz% zj>;x`%1G#E>rxtm9z5HZ+Hfw(X*a5}a^RRp_E%BYiN)ut(}Cu@QGwN;IM3Y3IE^}S z{?nB4y6gkVrHr6h`DQVfEHa@&lPrHR{)3+9(%Fq|P*e+KTTN-7j zI2y)S8SX38!h2Gp8>l17<6te$8}N-+B5Q$6TDL>6t8s%(Fu>Sg=89^u(K|H!^3GDpwgYR1*s=?nEN*A!dtViE5BaM zxFAMceJreJarV_S@7OsPtB1wATUtJPuXiC-{%)k&?clSK_B+iu4v$$3_2Bs~_4Rpk z5@6{P5sM5 zni6+9@lCZvw!k1a$LFPjDr`6cqlMj1gB$g%4UTJ z&nk6k+Xsc|zKWjvd0d-z_h=jR@#dJ%7>2y)>}&5A+qZ*HYWG{j7v&)2w5QIN+cVfC z!pLM(?Q}-s#-1-pWw(*FSUL4Dv#a!VVdaO&cU%c^y*Vnm zVJPx-#qiZpTO3t zR;JSboLcg6^~LNyl=-KCj^W-rLJ5Knxv6&LmD`6y?H>q>FX3Z;mAT6mt8qsJS6-H% z=9!Jpc=lpSfAEf-yV??h^)Yc&gylhTW0!L=@n&ugXC`z;wA7r-+OK?cn0X>~j54$( zam2HKnM6~Y%PQx?0lt2esiS9?t!nRx%*vql$5I_lMfG%|fhy7RI(uZ|U*ms7FJUl(xt--+97S{E9(KiIcpc}9o+ zU}NyXT-UMEY{O+@i`x!Mu?V<19Z$Ny}^g8 z*DpQ(KFQb6SAT7BY1C4?>I*tYmdjBwM;;0e@%b2wCi-`!q;@W4U%nxA`bvV~Na}Xm z#Ja(f4JTj7?SClGJaAx}h%^~?J`#~8V>nnT@@z>(@%m*gk1n}=yc_%cRnDbyYhrsNyXrc*Ct3UgS6IUQ7s;^ zNXofvr`I-g%t>XDVuWz0>o=F%lNl42-j`~uI$?b9)tc}$&Aw)2y~=CwNSmo0`I@RV z?wZ11py@aM;)>eKvz+xV=O<1WH*%j1I3S-Dy#C`kd9u~TlN~nBZ#=f$j5{SnQSo~b zTUKY|z?)w5B90oU*s?b`dk;Rjxb{v_^7?GU4CCc3@iuSXW8TG`PceVBdF?f$VYPST ztusf(lWN&!(!4j-V0LM@U8)#)ksSW`&Pqc2c<{20Z2X7I%Nqw%OmVxF7H9h|w-|CVZZR6UC1>@uxOphLgfl@fqaK&* z={Zzd(kqObPNjMpzJzbQxU0EBc}2{r_KK)D!4uDics>~!ZhjQZd`7|1TH+9FWh2`q zWbnpQ)#DeqF6U7^a?7#zKcvots|Wj+$fIJ}FL@_ed9j(^iGL|&xjBz8V6=R=wBq5T zLnb%9FNbd$lx{;NZXg%>t>-=<(i^Rq)e)`U>$V$j>T~aMUyXkQQejWkGP~oYo3fq? z@P|LHeAC>-<*aDb&r%%wS~Vjl&h%ahv%uz60d8&Wn2(lJ+g7jg=FP=}4JvHk3J1S# zavc>llg=X!tto!NEIwgdr+6;m)ZGI|^S?gJbbEAG;#%QJb7Km&+Zv_x>b7;u;Dh6( z*N@9sWTvcbb#r=9a43O)sal3hdk43LP@c2Z)oo4fUbl7~`n>ef#HN-Y4TFcZ{iWOP zO+1DVh2=C;no+R)^rDxG8sj1N2Le6&*um?NW ze#m=BP;c6p?k1YryvlI>d-QvEvi{aOKha0qCR1EE1MijI{Z>Q!?}NHa| zK}Hx+b9DFPQ>}HUg<5XRIPdZ&iNBKgpl(GrGA=CEH0iT^;do}IuAn)U`#|k*kj$5m zlu{=$rA&XaTkiUB;_;zlEbA{uEt1W;ZT{MBRn?ur!0WceiU-Rrhy}FzMA*G6x##r2 zlecv`-o_vKXh?v{T~!cIth#40PPN;=+fYwtrOa)wa|gC3?if_5Jlt5f{+M#Dcjmb4 z>VmK^_g9;eA59v&y0AVQZwSy^RD>iYZMyQl@wNB~@uTZ&n^MeE11=irR)4%0bU1rj zP~hAb59_>Rg@HS9nNNimp`X}_qDipl+!eZAj(J6?>%JK5u1ZYUs6=($mlPVX_crn2 z#75p+`>82M&!hKjVosf2)-M0z*=Mw<=w&qJ;rR|nv)cY~l{!SYb`I0kmQ)od2QeHD zbi<-c&lmYT2!5(UJ+`Ww=ku~L54&|Cx5Nx*w67V@pxO#51sA{kmLDYlp#Q^__)-1s zkMTl9A7{LiHNT?wj89_So_tQ==|RPIWQC<|_I$Kr>op1&wXikH#agVf@MM9`c|W_2 zyN~o)yxIkeJ)9pXci~tcktxGJBY4ccjAK_#%kopZmel*h5vzTd-&>|$olTU#S{6D) zI_22O9dKbdFnaoUoxJmm=Y#*}^ z)lb|8*$!^()`EPHHOgMQZ66ad- z{+x6YuZpR_vGu38rx81+TdtS9eXGk6d0@3?*H}SePtWIvZ%tP$Jv9nV!Kk`W+F_k9 z4@CBx6;4MT$++=^d&PqThc55`%2QIs5j(6XZC#lmeNsc?`IXz{Z@!&MyO${L7qdr~ zJf)F3&~SWm_^i~3;PY2IZ`W+upJK3hq`9an?)XDgmid=ftFS@A29B0)%4?N?`zJ3S zeZk(WyzKmXKGBSouW`fq(J|RunNL03#~*oBts}ws#HQO$&#&6IUim^$YulT-;xmsG zv$9x^+Ok?i@Li5h)b%T8SG(MKXK;3mYy4C{HKxnuZsEyQgy4E%&xzX~tgcVLt`hcC z?_a0tKy_ImwO)oA6Zqx)?b{;HEuO^WNc8*Gg(0ZIK}FBiFMJp+vfW83yR}v*!_IlT z>ieL3^*7&q>e%uucqsB^W>pz)5vRj;o&B}fZ~66YR!y^wUf1-tEJx$Q>+zYkl$1NJ z=83FdO<#?Sbx^P8M^uAN=4@B8o;)LN-ImiV|7e#X@8|Bv+0D;RiDtgYHgg`6!YF%6 z6dYT(RVH|1*eL%%$k4QvcACwF<(w1Jw+)pG>TfkwZ7sW48mD}iLr$skZsX$@pI(HO zUA`3isB%c?(a8SOOT#)h7dWSs)(! z;SBZMcx+xqR{v9Uw}gbXM>Th!d$a56=a&agZ~k!D?Cs4KL(66#ThPI5 zSa-(&YdEmsK<|^AtE_oNY{j|ec=C zyhR_mcqF{+#oe??zN<6JOxJQYwRm36&e`M>xS=AG=}wi`Vl$ch=PA9*8*84v>3$*< z{YhaHtJCiG=tTZ=o=Yl@4;+rWY3u$`t@QGpp<6L`tqSfCrY0gA8ha^IHmDm4`-=A* zPheSIBPN_3QF@=yCK(XAZB&+7?>Rm%;g;dYFjSgFfWXrmQo}XU4#NhkG^Yu|)keqh zch#dNSp}@qJO@l7yhQT0>QfT(JK5?#x^FzWd{M&c7{B(N3MfxqkApo$s4qqjLSp)1 zDP2-tdpyDqzbmdtAC%KjQsF$Ll3sH(L16PX!Tp2&d){(t1)SEAZh926;cDBNkbzop zEwWja?Y%ZpZ{+naD&5;3nb>J93rBpwzup@C9&dPT4eo8KAX~nyrpS>pVehfZ10!3Q z&y_8YPuhGo!=lf7A zx+XG77k$l*Eos_gY3h5*nX1ZrU8l$QAXiSxZwjcG(hGjQ>bghqN4;S8qbhOiRqJF* z1|uI$=f7Ro;jGYqSh>05xY?)94?AK`Y}_@qvEB8G*#Y#iu}j>C<91m@lGB@FO~!*Z ztw^h}O=?YeT_-E#IHi&m@}YtxcC)-MVd{p+G2^N7_d!cvUp)BIS}WzGVz*+0Z!G^I zHADQtlshWiQWnb|dS~s=z3bz|rquV8b?+O}J5Av$8!uWe(emzQr><*O8PdsRJ2B*F z7x2=`NdKZ=u;Qs3_sy4M-Wi{L$9c&1zWWENs^Fei4b@!bOW&)SsyL;OFF}P^m~S{z zS=skS*DEAQExERI%g102KGv=t!g}E<|CN3Z2k#YHPsyw$aReR=9ZROF5GuNlmwWe= z?lZQ$iQhoc=;|xuI)3L+G=f`+XWPfZ5RPq{@p5HR&eNo2BqO%dLVeeYUF4&`_?5qA z6`P4bI`6}c`tuG`MV2nnzn?MOF{+!kS^f2u5lk<3$?4!|WiRTLwu9<<_8AsYb*K5gysmvyYwya)i*^!ecq_{4$2Jwd!utU!4K+Q^eEeB3W}@f1o=A(>)tks0 zHl9}sI@$P}_jY`;AJ=z%oM+2sIPifjhn?%45qHVz4?{UoC`uK=$EWGsO+W8rf&-^K zGrH1*f-c#0MmCsewCQep{9x-$SX%1@B|WtD#1}IePk6%HXWfU_^kcmvDVVztIxgJm zD=WEVm{}tKuA4X}O{%otXEP*rR8|~g6FE*q+a#+dt$Kg&)7rslvmyUS^qG&O)Tnfm z0=b5OHrtE<^7exfud=qDp&A+->2ELf$SJ?h8oB;CQA_R98^87LTcp!EnqP3smumJ1K-LXIa&6O zg8J5ptx(+5ShFd1b=96|(eNI%*AA6-BcGQR=U>SevLd~)yn2qO=EPG?`F!0ou?3*k*Nw zB;voc_sIH&ZQmsBX54i0gJfwn*R9FK+k13RJQ?G$8e24+Gk(AG$+(XtPUS+`{fv{w z!`GeHs@O=!p4snZLLF6u_bNH$?8Pb_zkZO7{Ybj@&AlcfiQ8oKSM~dQGMm=pkFrzt zNS{v7#DD%8pUP#k3~y7mM^d&<>~_L_wTKl+$y%?o(r|&Zs?}ddc@OI!3n?Y7UF@H+ zH~u0loHfm&t3mv0@}oNq#VWaK)z+1;%n^yU!E)ZXWBX*fUhNLs9$1Gd^-9((d(d`8 zVx8Y=^Rs6A_&WL4K6z&3n-OYh;B?8Og#FD;_A}ZE*YlKRW%Bk3d_4n8eW6f!`GepW z_hVK~rC~Q%j3-{oY=dV$)OH^HdUxHrZ{}BTo$gpk)!S0} z;->J+ZPzhZboLnyTuk4+CUTA0zz8uyJXL4YnZwD?x-!g9qq)MDC<{GS8NTk;vqSdmwGziF>xyxzi)vA^R~xRMC)Ale8&JroJ*~cU zsR<76kyzS=ja!{+^RaK8_PSaLxGZOVQ}_1Pl26aq#UN@W!WP30eWn&lj&W5ye{FWX zH~M@)yy;tN3>#u|ht%hUI`%68M|X#2+%&c9Psp)&2RmA&vhS8A;}yaw zMKQOVrLXbu?TET6inuy*mc7*E<%q!-(Or9rcdKs*em|J4AZ=g#;M=ZyeS(hp{wf`I#2O{>1N&^9o!nMx zzIo&#^RzLh$`Q-^3s~pybAl)P~$$ftt`b-va!pJb`9P{bM4?y3dwyTERv9T zh5EW8KC%97^u(mj^yRX%Zlr8nlw`Wg`R>L;?oLa1Ta`k#ui3rhtJAwR7o`X5d3QTE zY37N@7=&K8Hkh!(KIOUlY=l^yp)>uEbMuPc2zI}*y?Q{Op%U6SVJTM#m)%gN0e>!Wc@Y&ePk?-=Bi^;CnklmYy zq9VVp#lu8CHwy3U&b#;7C+%q>H2hrZX{W08c^4;DRHrcPE<&M`x#w=?0Ck{QtiBD1v+gx?-^m4yqc;Wd($Xd4m z>Hd2jPq#K$yrP_`wsZ1oW8tv$EKzsauB>g@AY1c_=)B>vvE$u0B-8smM<{#tga~te zU7WE4`JBmw=nH-a4>b(-12Cy0HWplWugQ^Waq91`>ETb|lSs>|z+`)6?(2T}MnCz4 z1fMEp^%2kOg&PL_Z==o{yKHdTKpAy($&)`@9WWZj!p6py%EkEm%Jc5CN*!C$|t%l}4-?3NE*lE;(xbG)fy?xsU38`Lofbswf}A@FE3g zRZM1v|4Q?0K^w>OZo?jK8*j(r|t^B>kz%|v~Hi5 zr6W@jLBBlrUaL)*U!mq=UE{q6<$;x;*eBYaJz>8{-skJocSI0 zWr}tQ9Hk_ITg|E=y%LT#^z2j ztACP|zPM&j>mKK)GPd=s-ggTq)aL^(E4iJMFK{fcYCNXkHeK_ISMUh=VCxjKbXT5Z zS;>Rzx%))PyI=BpMV`DZ7_7Fp^ui(^$LE;+`E8{ut&#oS;@3}n{Bl}KkxkTVk+!Lb z@58ACt##>$)2}Tz%C31O@Tpe$i9!~OLwxVn8P|4w*S_Z7%$T$5vsG$b)h(agvcEU6 ze9=0Kq@DYDHR>~uAGs8hzhtz@?1&q$OtDOHdW4ZT$N2H&u=3XX+~>Z{eEcY+@$xy_ zj7?&MFd}Q*)LFQ#2)VU=v~I5lf2$mkugpl=Rh8qNk=G)Mr9fvEdH7ZCQ9mU-?D5)_ zFy6!+OiK)v>#wOAN%ct|&e>_bB{%$4)V@6In>DxYd5nFsESPa}xhD3y;laC@Hnn$f znZ3SI`!u}|OuTu0I%{jJsLZ$V;H|*}(QeD);5X_<(>8XN?}+B#m{HApIg0g+)S;uR z4|ctA+oh#9x&B$vrO$y+&n))NdSP+oh=@S$bqg;y{DBh(7H@HD^%Fn}bqQ^THM&Md z!8XYyQY7u-a@uuJor8QY4&l;!dPHM3E zn>V5EDdX2gnDkhEUagA7i>hy|Elizm$qfpmL~G0CFX=G2%D&7yjZc&O6oV3oJ#<&B ztQtE>=9I{n>%Z_NX;tT*{zkT%kPj1;3ISVSs!|d~+auwhQI}rpCftfOZD7kZG&S5a zB3JzahrN{TayOgfGZPO#pFdCcx%Fbc=k8dx+W4`))f8Zt6R5q-(%9v0<9%L?Gv{+S( zThF+z_b+%HdgG$+BmCF+tx;AjI+EI>{twRyJQ`PMz9um9>5ba6)Gmp(Ng3xGO#3!U zGT9fs<*GW#x{My}_6Y9VG|vYL}n&lOr@*XhHNa-q{u zENSRzRldhY&T9s@ByRJH6|h>cyt~LLbWKsdf;BEH;>nukT{n6520q!zzMQKg)7L$P z7%05<{Sq%l#NpV1J(jY@swK?>&nuqqNHiwhs6+MNP}1oyTJ6#ug^0b}I2>iCl!_?a z)*F;mwVrQR&0;asr5oq=HV)n+TasLE?)x-zcCW3I_6nw~=}+Ece8Nv}PUYmd7!dTu zhfnh{v%EgG;$8R?mD~$^mMZP$j&Of|P{^*8?1a`aNq)0J_9)S__2AC<9Ybrzo~*m1 z&T$euouSC~Rk*;8MSn{)NkrpIX7JFc-QG7_P6Uj}?J6Bqyna8ncC5Vt9od=V5S zOA@wE#1(BbKJ0PGDq4Pv#FG~~#`~ppBwilSoXT)XLOny|9!k`eM|+o^zu{_m*^2X8 z)2jQEvbX%0N5{8aR*1Uc8k^uOW7*_<=1dEsfm6Hw&0zNSZ2bDYXLeLK4xe=JyTGrW zNmgw&-aPVJpNm7NA&wI7e=ig3ZrZ`LKQX_mhc6zhA965?!gUso=1erLyru=$Un3A8 zm9SoJSylJNH{jnZA+Tx6B*tFKh z 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.SSL.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.SSL.beam new file mode 100644 index 0000000000000000000000000000000000000000..e2afa7e33bfa65e69c29df62ab63425c14954bca GIT binary patch literal 23064 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ᡮ^ekai3C*6hSz7d`w#AU#wi2sa?Mvef3Q&f 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

    F$a?r`!lvE>elMV) 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 Tx14Ib?|^H$to$8qvn{WGyB82J literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Telemetry.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Telemetry.beam new file mode 100644 index 0000000000000000000000000000000000000000..d85af792c4d9d0089fe87579059d37b845265735 GIT binary patch literal 5212 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Test.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Test.beam new file mode 100644 index 0000000000000000000000000000000000000000..7f043a567553ff8fcd4999a3bbe5e6de9c75f11e GIT binary patch literal 21224 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Upload.Supervisor.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Upload.Supervisor.beam new file mode 100644 index 0000000000000000000000000000000000000000..972f34fd54e2d6f66fadc03ae133fae3b56bfbea GIT binary patch literal 4584 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Upload.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.Upload.beam new file mode 100644 index 0000000000000000000000000000000000000000..41d6a59f2ca8d271a34180f229dfaad0ca843fad GIT binary patch literal 16624 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 Gvi|}DSaf#) literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.beam b/phoenix/_build/dev/lib/plug/ebin/Elixir.Plug.beam new file mode 100644 index 0000000000000000000000000000000000000000..468e5e4cbc4c73feff997d096aedcaff1f3ee412 GIT binary patch literal 10404 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 pEkG-sn3MWQ1AP3Rm(>voN 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 Y2^A10M(iW@kn<&W&J>CQPN2~L0f&4zasU7T literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug_crypto/ebin/Elixir.Plug.Crypto.MessageEncryptor.beam b/phoenix/_build/dev/lib/plug_crypto/ebin/Elixir.Plug.Crypto.MessageEncryptor.beam new file mode 100644 index 0000000000000000000000000000000000000000..0f2c24e79a303011549cf8e51e463465fc5c7b57 GIT binary patch literal 12168 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/plug_crypto/ebin/Elixir.Plug.Crypto.beam b/phoenix/_build/dev/lib/plug_crypto/ebin/Elixir.Plug.Crypto.beam new file mode 100644 index 0000000000000000000000000000000000000000..52709151eb39cf1569ca0f94fe83a592c1904248 GIT binary patch literal 16556 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/req/.mix/compile.elixir_scm b/phoenix/_build/dev/lib/req/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/req/ebin/Elixir.Inspect.Req.Request.beam b/phoenix/_build/dev/lib/req/ebin/Elixir.Inspect.Req.Request.beam new file mode 100644 index 0000000000000000000000000000000000000000..afb917b2c4fb45de08dadf217ce67c514dd4c787 GIT binary patch literal 8284 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 WA3PT@EIM6>=2`&I8IId@VA!9hwg-s- literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Application.beam b/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Application.beam new file mode 100644 index 0000000000000000000000000000000000000000..1ac0fb5e9c11b9417b336e4cab7c3a7e6947f427 GIT binary patch literal 2852 zcmaJ@30MS1Lr5mcKr%DTOh`~{QADVs zcoYQ-hzbH8pMYYK!v(cPE4qlbpDkWk>rwEiwiXX$-vm&1*WLGhzxV&o|9&%X{_ibZ zoah5VW-j58VR2zpN)QAw>_$gN?{VxS)rcM;yc6L}?=T!!BQhz4U}&yHf}jdaBB_#6 z6oI5^DVW4%mOY`WaQX-At+G7a<7TS3VpmF z2wH&2VL)C2@Brx12w)4qX7I`&Cf}XM5X@zjIB@vB`QiDA+BBF*S*P8ezb~?BHbW#n z&9Y&L#e6U)h@&7tQpHg`KyWb=%(-Hg4N%4lAjVcU&%%aLRmNlTp9vTZ<`5)~60phy zCOqD5W5Dqo1YACg*U7790nUaM$zrl1qeLv0;n@~EM~PYDs05ob5k~;xb(V>le69nJ z(JSUo0;z7(#c~}X##1^WPsHFD%I7-r7#!>OWpMZgJ0~Eu39;a_z(SKKA{h{9kp`!! zKY$T{1%M?06M%j<)&L9uI{1p zW*7=f6c`}^^j&nP|J>8>BcuZ(#}CxWFiCkY)}b&#st}xx&v+N+f7_+gOBNXFrOiKH zPC68e$>?uMe>eKQI*n7CFz|;1KK|W;Sy?1%$c^%#B@0f^3pd)-HK%j$sk7_9*hN=t zng*++SqP>j3|2b+_zFJgA9P6z7NH6dx5p5d1^i61z`8(#$beYE-XdBs{$JB!jC77D zCLwXD4wZ~I8bX2-m<%RKovDJrG(b$iIxApBGe8I9QXsGd0;!h5B#4IYMRb8|64WMx zGoZ!76cXeV$`L6lRUiss5~iSZz)MJ~FpNS_r5Bt9qm&R=VK9p5g`l;OLITbds*yAU zmA>zZ-mpGBB29@v5X(L<0fIR5^yL>*Vv4Vbc<7GMo#?J^?v%^B4L^5w>Zg6pEKRbj z6|q83Y~!n#n8xcR(hZtd`I#HG*|L`$XpVvXRzLoE^yrT-vv}!wzYWeRxHf(B z>*}Q1>!}yE#Sc8|Y@8aJVe!pjPi*Ps3!&_!4f?MXtDNBtElv^J@7D{?9MFG#Qol58 zzW?CRPG(lB=i#6o#zl4cH}ka1rB*SMWRKr&7$~~%z{5OnCUxtH$EvHjH*e@CN1FaZ z8m9?WbDJdWBOTo($M@71ZjYN6me}y8v&GC46<5o?Tp?RJ`b+Viwuh4g*Ik$W(d(EN z6MZS}PTNM0wyl}0XYGeo^AApLE8W|((YeRcul<_KKSu8E{_JS!>%9Y+cEA4YG+1-F zxotS+V9mkCs3835B;gM)mU20=`tUcX(W+OT(k*#bzspcvi^G&~^qO?t>(8}c?mnmN-+wivZpoB@1K|$qN>@nNqrTHMVvA(GT>7Erh?j`qDKRT(f#Vf-?vme(cHbUyl~aob63|AYqh%q0+o~csvVEs z>>Ie$8)h0^TN)xCUR>Gj8oGMecFWW|V z6oJV|&|a+Q|ASGhFJDvK6@Ny=i`e0>;pVe)7~Sq+UZHDQO3OmBd2?Xnj;jGLJe=RU zdPe5*?i}yyd3?$-1)rjEd~t>)Z$BMh{FB>`X(y+-EOP1ky02-Vq%U#b-UqXW-{f-H zn$>QtGpch&{BJ#Str(IwQJv9@y^SF$=)b4D@cWZD#T)8AN6)eku2}za@eIzk- zCgYbWx*LM?3|LMaZew~Di706yxR`-E6z!s78f?eia-~6@MAJ2mXQt)f>?0J0@Z#2FfllQq3;t+erA^`-#rYn|9HQJ zl7%>dWP!s~NNI54*o*V>75UB<&Gz;23J41J^-}1wgOolKIv;PJAa8#|`yR74u>ao0 ULE_|WoUVxrKwozlR-+K~FOcc+0{{R3 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/req/ebin/Elixir.Req.ArchiveError.beam b/phoenix/_build/dev/lib/req/ebin/Elixir.Req.ArchiveError.beam new file mode 100644 index 0000000000000000000000000000000000000000..17e169d50271d395848452053a780d845bd03212 GIT binary patch literal 4656 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 X%O8PJLbi(TKLmiz%^Aa9Lc;$5n}jeM literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/req/ebin/Elixir.Req.ChecksumMismatchError.beam b/phoenix/_build/dev/lib/req/ebin/Elixir.Req.ChecksumMismatchError.beam new file mode 100644 index 0000000000000000000000000000000000000000..0ad75b0ff5ba1afb414adb4fb024a4b124a0b7b4 GIT binary patch literal 4052 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 I@~ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Fields.beam b/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Fields.beam new file mode 100644 index 0000000000000000000000000000000000000000..1260f2e494e8554d0daa717a076005b37a7a1747 GIT binary patch literal 8764 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 CqOUUm literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Finch.beam b/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Finch.beam new file mode 100644 index 0000000000000000000000000000000000000000..9bc133cc3f1a60989d485b62606854c2fbc82cbf GIT binary patch literal 20572 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 bM^YTBKU$xL*3k*h{>4Xu;^B0(Qtkf$ZKvxv literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/req/ebin/Elixir.Req.HTTPError.beam b/phoenix/_build/dev/lib/req/ebin/Elixir.Req.HTTPError.beam new file mode 100644 index 0000000000000000000000000000000000000000..9e4af344f1a3bbbde3088848597c4f6e1ca5f75b GIT binary patch literal 4596 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Request.beam b/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Request.beam new file mode 100644 index 0000000000000000000000000000000000000000..4933994e904fd98d78fa63702719e6bc92d03346 GIT binary patch literal 45788 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⩔h9Icf~wCFg_YyZwo!1)D0RHTbpAKL6bXQgiD)Jn&;eJe!=|Wyea(!^SH5| z=iafjxNJ)7i~v8sny5_%_PTs0$$2MN{+gi12p+?DVq%${yRV?`uG7EoTK>6LpJ{%} z&hu(`wW5~bnpgcVZrlHmvKJ+ z=daIm~T5D$3%>J#&DzAkXY<@aMyWHujx1U?R;~44aQFW{x6$0w7Hd}mT zGGxEic+{NBZG9u7#PsI2YOWE-H2lhRV}Y3B>xp=Edhq{lW}&0cTw=(QY?plZX_JgO zMpAdm>}n4Kr2Bak`q6kLYswXB(5w(7YjBotWA_${9u}&&TxCMay%}DyXeK%)iffAe z$Z1^pT3T1-M>fm63~`d}_HqM5EjQd2R74Mxyu90JdTjc4r3{@?dZmx1NRDo07maVJ ztBV^ica;ZIcNin8Y}fCZRC>@le=>+I8!02J6TWI(P5!|ZHSo%ki@S2tiZuOx?_?uy z*P^CX?Vg}NYSA@(t^6y@t#0)fN?BGNb@0UJ)Uti&*pcbj+Bg}=Glk{~R%=I6N%CZi zhfNhjqY|(79VKH z?u}?S@l0HWP^NnXWtQm)qY*xz#T_kMmq&)2EE9{Q?Cs6qq+a7sTlzgfUT9g7?co)% zOZyN{mL}`~WU!a1EWC&9Sn|%$A)Hiq4e3&z+_iEHbzFG-Vd9yfK9lQlb6RQ`gVXB* zqBOuMs_CME^E<)A>K79guB{zhdb$%d{anX%`t>a~3-Xa^g&-FKZ}?2?d2CCv2-nss z!IJ3q%@Hr7IVVAc_@PqG^X}qyIpX!ZcefbbaKIby63ed+(!5vT)1*Irh7Xp|$p)W_ z7ctkf27i%q1$^cl#!L`==A2jJA!V~-4{yQP=%<|PM;0&-^^AB}6{i+5mNoUB>l#R| zbg+(TtQhiTB^G~Z$p~0z`H=N?=)lJI^(YNGB_^>8GqTq`PWQT+%O2A>9F*R5u%Kr$ zd{(g6yg4bxXed}HSQmR(3tnpmhTj;CTXSAJS{n;o-5DG#s5K1zNM`D|SRm6>&A&C( z?1N6ADLG>~6y>ls!5r;F=b}>EvB=_0mYu*yC~-lgAV`3;S>WSH#g%dk+B-X!TDMuF zo>Ks(OhR877dd}&ouJV@FO?!k;YV@F*7ydwnLlaaMjcYnrG4ZnmzU)gt|6&Che|5) zY|_aeoiHA^+|@KweLN~N!`3B#F8Ok(S8s?A3}Azm{}#u=`B`_qzNg523v>s|e#p#h zJYh*pwI1F%nUiq&?poq<_?WyE%vqMa7u-!QQoFs!I@oy5;5Ho6^A_C`2ljJsB0*5A z5L|yPAEyd`Fs43jsK6Vn9+abtd*Vmu#RAfqU^(4mwt5=$>#hZ0>GXp93z+L%tFwyW z9)92qe(80co$3zOQ5-D}JQHrWgo`^}#Kl6<>j#td`2?g*aC>>C`1|R&NwM#eWvQ!? zu_&&uVZLa>7Sf4$-X&s-97=JQ8Hoo*6L|4r@p)ey)ncalULs;As z(24||-Qvm{E6x>-BlY*j>QN%K*FuR{%?4%RqbcMR$Y7s5M%k&un&?NBLl`f&61^@C6b zlNcPbHwn^2Tte$H8V#eO895FFBd+TMjQYEWwB`yAK)WT zrf?Fh@|<_W;rPHI=7~MVZXu{g(PPQ>F@RA!#Ye(sEg@y$a7nEl#+)mB!a{3pmd_F( zY>THG{bK)?udB8{^HPAZ*sEbPd4o)SB#jG8c4~)3ChzWD@&R3AH14=uCz~whRoTqf z-R6?r?(v<_zhZR?3vGa*{P&2legPy^>%jDTY zqMOee9Jqp*rAU@xD6712Gr*6fol478X@n-|Zsus)o(KQ=D_Tgx10vUo4i{Ktj28vC zyJW58)wU6oazAdZj;W<|+;xHxzcVOPRD>#UB_ucR7Z)vCN&)3B%s0Fi_ zB+1knV$3wPdKQB09@0bwJxgT9vqT%nc&fmwjk&*RLom4?e}Q`P(W@fd0TTo9t-364 zUcLUPk}Leayv}Q|a^CeR_Cum3uMm!$BbXxZ_qdmit``Y{zb(TjMVn#8&GSTu!4b)$ zGC*Y2TT#%d(D#ksbRZ!l=~8uj3Mjhra=Jv*^RVX{<^`pXy)TQJRG9i>I6=t4^4cMU z&VoR12lzr*{}qHj_TH(_q3C70xM;{s?FhP45v(Hq+$)K;w=NA7s~Bc_4t{`Bzb~g) z8cgL@lrABS7RtC(8NF?m8rOzrx8;ka;izOmk)p|!!?Eu6{^1=Pj`ChRJxe=EeO#m_ z6{`VkHxESY(3NX7(!((^m&wVwHQ;Q;!iW%vYq?<>2;Fs?;Fu6agRGc?uB=||3f#uN zi%2Z>jDeziPs}-;UruB{3`U4aX7_QE@AIdyoNSL(H!t@uc;xM|Aw8f9H+=#0gc;0E zB`nP5S|)9IT%jqk(Ydj&^DLv3s(PjQ9!^;eqhXmQJEBe~Mly1I zE1&&BdG8gM4PTZ}=D@wOwq#Ul&l|b+)4Q;8NDMI?#CspB0;BAO(xM!a_^A%CyWRI# z8te!dN_}9iKN5cN+21bQ_k#OuyeSJD?*Y6vYmbAlIU4!|PrR+zBl+2@8{LC?2xt>3 zZ&l2t)x}IcXW@gBZp=n- zlSqGC$&)fLzs}$&mVy%NIV{XAb)I`>;-YVfIo7>k>_dn{;_k4>!(3`FVuiaen9_@s z<4LckOPyOw+)a}XBZwH5h8fUF>z;(PD#*wV<8Z#_EmHj!%EFlL4km>)=c}^bYYo~a zm*s06(Re94d-c4d+0wZ>TlH=>$tK*_1_bE>JHtjLa|QeXP)PX=woXHZ=cqy=X_z|lEvRG7 zeuZt3FLCm*tVEx-RDih2lyVy0Uzzj3A7^Rox&!@YrdF0rMM*v*WSBtH*c0UeP zvemTZa1u?SaFS(?o%1Sn!W1MqN=6ZEE1_trPU2BI(s3k0QJ#FcP8&?^{t(M!mqNA$2!ww()U-l)67oFjx_ZVqY|I8$bs;TgTf9AY_r0tuC z_?~b@WxkbtoN*S;Yp)*W+^@?HNXDL?lhs4NuYwq|E_ZLqlFto;G*dCEAyi2-;)%s{ znjEaEimdEXnioA+f!LfOk!GXbdBfOqh1<5`PIil9HfUoAyZUkB0NlR%*5bOOc<1hx znmiJd#k>*h{>q6OL%g-JkwK&Q8H1S7(jGj--V4G(ftR_!7MGTsQj}1f>;=EdSh8Yv z7_dAxThbQQRCO=^K_6bCmsUTHU@9eS+X%Bf$My#3rICiR#t4!*F(Fo=a1$~GngWKv zxl1x6u9pwqS)zA>o(W%QXnM5P+@*)FSM`L=MJufF0;#AUA!^3tQx7sM7XHx{FHhdL zrold>%m}$wsmdi-#KHG=ihOG?yuuSUv>vv_a*Y8|Y7DSD81}wo*g;k*S(nB<@QBU7}ciIf>A5_H)HI`1a*ym!X(?wdf5G<)G- zdkt$`l1k6kQ2NsAW%jM;busCCE|=SwH?7T9T8KRh?kKBIRoRklk|=bS0|fUntPs{y z6yt8Mt4>e~Y$+&s%6+KYnJqD%#6#Q|tnjfIy0od5*0h1JU|gw!o^^FC({o^S0-JuL zZoKO4IKA~t!lU|>XXOMHCnehz6M+dxloK=srGW^I&PJKrwbYU=5!rq!oK5ViGE14$yAt? zGcr;k2Zkb#{M+yEzu1~>kR?qgWzsVdw5xwjh%`EcZSG8y=donEQ}McJ@UX?)Key_z zdZWlSK8M!nW=4#3*hQW!|DB9OesVfeczw(bZdCoZq2btXFVGqLsz>Z-k4ZDfiXvq* zjFIfa&b`XNC{v03%o<+g+D#fB1*)Wh%pA)l7y>}(LwcHh=?w0cDIo5%B^=%c@Kj8B zbwxfvXlU8FG}$w?zJR$yH|3T#JZj1zsg8P3`$o&>hQfsOx^eTu5$2bA5`^hJ()=tj z;rh=k7{!JiL^12GuS zC*|wyb6C#@k_HW!NeXe=Z(?TCNtg01?*(ubj$OPtFY}TPE^dAZTVGrDb3vmAZhYFj zY8QIV0I!r2zvmVAkSN7j92os4h$RQT64+B)%!y#MO~z(zLnCJ!1X+`I53BlxVf@T1 z{4W<*I5`Njk8VY zURp9lSDUb15hE+?(D2%Iw>Sfqmlpm2!`MgYm@sn;HlNyr6y@0Z3_t<$x^f=kRHkW` z3QuIxOpprDq&JYL1?nEHSf-S4aSH_&uI~}|mUs!XUKHnqyNxp=_llB8d+Xew+?22* ztkZ~;WWa*!Q?Ek7F)7P;!LYF}VwwdBebY z*8zE7S!S{DQJFixHdD^x2alBnGJqu!W=|5&;Jot_7^S?ml!g&@WDu_FLI$5xzhiiq zP$7vsurvs3WfYitf%sK*3>P!1S{9kHVn=c(YijtUtXYp4!4lj%t))Q*ybJdtE?Em` zH`Cz~&$HIF`H1`COOD~CZUfa!HL7~X$26EO?zqWg6;Nwk?Lb6%&6uWv;r))5msEQSHtrQK5fn4rj)1y~T7j~mwC7Y>n>`{oVLCAe3 z%2n&j+ZD_Y!(h;#H!hAv7jGGE0p5A~5cv^|edMVN>uT@Z7BZg>;o5#C$F;6I2y4KU z+^rBWZ<{iO!q#VLfYJcB-G_R>ci3w}A7UA`IAzd4V9){7=g3@IDc~rtTG6P+T%6h* zT({s1yWVH|mT@8qo{yJ6Bnx8?W=km=)4B|N7;M{(n=WrqDEK> zviF=kMtr2_6X+s^oEAIRb!)TabJHT&h~MUPJQK>_AF3s}^cXz*xz<0`a4s%AqLDAs zhal|YolB9KT!PaMS|j@KWhR|Gh~knrEs8P%DiFipI=++-yi3lbmd&o<@@y$LRj59oH5Z2XdAHXzxsYo_Ot{^q*b|ECWy-MPwBxwDeN;@omdllW z6WBFMC%=W9D`(E_L5}Gn*;}2S?Wf0Vn-4EOXUN<%`IK>L9=Bv6q?AMxx0PIYOE}vu zph=P{oI`q?c}~yF5A$;XH)(-enTV1W>1#&>n*BXKYR!BH9bvqj%-bQOdv)9moO5lt zW@gFaWMV`X2J&g~?{N|%M-m4p+Z z9BPBQrCOWZbO^=eNu+eu$<#_-T_RCXHXM*CM~X9*yb|!36nUkWSjO9e^NCHpodibN zBo)yv-oQ2YQBV08WdDVP$ou}??~pJYswE_7SNHL76NM=KhF|-_Rhe)w>TG>>fZxA* zf6l5{4p&XI&-X)6gB5)^|9MMVv&-U)WMReaN~HaBmM(AAJ?DqHE+3A{AaAzyCsXM< zQ$^NH>Mq|Zww|$obz<{-6FP)#Zxp3A>#O30*dFJQ5HwoxJ1XQ=sSgP7a`9#fQ zox`~S{?4L#-zNx7^X1DfqdRT#fua*3_sVBVib*MFR zr{Vv&Z;U17XrkFMFxW74ef%CLK~5E&-eaAlzN*&RJ7%uWt?A$NhT>l@aU+rt9W6t) z78eQk_@p>1L{7UutA76>2$3p}n)g0SK+@Ijwv`#D`r$$wdAUfl%)R@StzP(qb|2dz>p^=2Ct)iP(W^#znY+-<$BQ_zU^avIS!9JW>{-K3bM zVzWSlVOV_Uy$zl+UVa0B_+5LAyc(K;++^$k7+JA ze=B@?rgR}X$SP0SvLlc21v<^6%E%q~jhyPJFpY6??Zdq&=cZmC|BbbU50gm-fe$69 zZmYg|i!zIma3kIMuqMw9X-*SM!Ch_lg;mwll?;B^rxJ5~F@a?_-MV8df|AqF@tXqI zS?hw!?&e@(w~*XGMkCCxBR_Pjzu1u;tfTpnNb?|Bjj;R)R)1vyHW?qDrZK7rf2vCL z%zSsLrOuOQg;A+(g0D4V&1FdX(5>4q>X>>We-fMB=+n0Bzug(JTD`ANT7uFR4?on)p2oqggJFmO|d<8n5x1?U?tIC5cKhi`roWl3DH#T;nrQGs|oMwbWR9CD0 zmct0(2Uu5@XV!<9Ea&B1A{#DxuBa+#e0t@V-m%=|QKnWk%zEQ?MMXnw_lwz^qo$F( z%1)?s37=wRx(JoLMThTBG-1p$susVd?$Hfj7m~4A(!zI6?nvf`g%f?~v=*<^E0ekM z?r7fSW{FmWSBFvLizl;{QEGDmd=l2cm9ZH?egn|5Xxh%jCYvgiN7u7$ZtqI2nL9Sv zfEKy@T8Qw&O;--|!ar)3Z(=bFAM)!D9p2eIM~>gwacNQ`#`=-r#Z9-4q_GZ_H_oWi ze4id}&jj3}(|oTCYlac0exN3-`-r2o)a>w*6sY9E11&CsEd{n16Yg^#(uedg)6%$u z_hzSF^A&MRm$=NXk=)^L!FCEqPyD2#f>RV2eD9$-bqdSD_|$v| z0jbv0J-e>>knDgC{)+hn?7rQ`fIKzKv^!XzO&sRXmDJjK_QX^{mJQqvwJ!vjtfb-1 zFALt1;uWrGQ(#+~p&!>1%M4i5#b%`NZ66rg#dgxOiw;iYHSHdXWu*#%fT+F3+x9tW&W#MDWBUr@w*yo8;+l;e|Raa|w zK2S(CHw6&p{zGniV)AK z@nkH>=O^@X#9Fl^a2X*faNY75Lfznrif-NkjK3-)43rt4ih1nQ-)D@0#2$uNXJ@S# zv7DSD{VJ4nserMQG0R+$_BoNMwOL`m@~mX+GX~9dKbu?!3f`lwqBqgB7hRbK6P*3r zHu2uE)r;El>>I!9h^2=Kc(lWUkO|(z4oI#*%)Md5sX90~Hj**?fnd(VJ*F6;kcqAf z5089{6P?b=@k7Ri#{}asctz#7Vo6zVle8FSJLAOBBVTkgX=LAeQHv3IF}{r_JA{lM z!=0UeBmM?_ZFr=OTh95=`>O%?pTeD0?#6Y|Xw-lLtTm&K@}}16$6Ibre(Ief&UY*` zQoE3l(DBaxYPr=Wb`<;F$WC3C{`1Se!|EC{cQlxa+&0OBq|kg@%c)vW#n!7i>UB%d ztENS<;`bcA@5p%NHcz&qnelXZ8?I8pxk-nU5zZ+ygk6&K$GfQ>C2G#rGit9mRa1Kf z5mp5i9$m@ds)OoI#&y$ZRRPI+4@1nIUKvD!&%*f3u{$x~(L6^kA?!Z*tSI84cSZlg zHdiDLo>SS7PPDw9I(3>=%`4T(=#p1dl^A1p)o#pT4s1E5EHcFfqYoEXXRCdDec7VzI7HFDnv&mhbKjoGvb>p59JG<@P{Q<-C=w3-u-QYf6icTw(UbqMIFV0hrwBs z`^0h%EU=Al*{CkaCrLX3hd3#_Y4MWb3}&- zP+{UVPIIPzJT9d(1#>y2P4Gl8G{o>+g-Q$0@P)X z3{4{c1#t@u`U$2yf&QoS6$=~I9^M*g0Dgi9MrH#idjImCA)FEP{d(RcWS;95^F48{mdcmme& zF9}aDb9UvYU^*H>5EajU=L?u1nCKV`7uNo4u1sPhbif*`pkz6aTDe2)^;psJ@{l|BUbtxaFTveo?X$ zIKyBpLS3K@SRr-Xzad3JO85&cJpl)OddGjkjy5_Ahx1G=03%s~8}ifIf2mWBVJ)S; zCNVbxbNxN8C#05R-r;^k`TX(mNyO40pPi0!`U4fX1%Glvun?NloX}Ta19^-Lbwu_E z;KcQ&KX@nT&96nD3S0cwRluEA#cB6`s1{o42|tElZUIIY{OWmsloc4A)&yv6bL>99 zvH@*382lBgeQ?JDIs;@GTH`7H`b)Y003UFtD9o>MVt=+m{8|CWqBsjx`d^m?>}lrl zpYie|4EBG-1C;oLx}7oxLsaV9Pk?G3z7A))A_UH zzZp7sx&m=&$6X7Nv<}o3&+=;jfT@0K$qy*%|B;SC*#DmU|FK9gPC~W+Qxbu;?yK)V zcd|k-HvB)s`pFuzY^-#ECSW{v z$YZbuLE3oizaUqLHntWf`p4@csA8N@qLVA|Z)yvk?EGKg_lwP(VC8$pPcrt~9{vS; z_@+JIML{8YbR6G9G1E8Du>mJ7_;MS@{+yQ9w*;43THlkN3~+w)kr0yaJNoa_@PC7Y zV@H2lY9k1DzqqJ@5}z1#erx&PuH{hIdYamu^e^8O=i4gr+z%<;~57>26Q*VO?eZO_@SejTR2SGH3%@MM{PN z!E@I$uLE@hh_gAw%J-gr;<_O;X zJ!Q@cF&W4!$0mBJ>HoP$zYRXH-{rjfLinGB&(F$*_^&haU$8B5X7a~>T^N7EzQ}jk zD*u{+AL3$A;@|!QVvB#5mxhS-dpkev-cP;xH{1U<@%)-V6uJ%cABO0Ecec%U5u<-^ z2Mp@zzYZqfvcw*zmxXrA8N1TI4fZ(7_HXZE{!Iq^t-qoBB>!3P{I|{iYc~5g_4juf zpMTr-e`i?W7yA07&;CAZ_kYx>kYY}&@3ebAObAZ4;gm$-f8CHD4oN_Xe^2!wLj5PF zdO!5ypC$k2X&oft`(JnH51|&QazNfWo@+v`{s@`F8Gbu!d}3949IihZgNHLWhPL}; z(C9?;=D%bU%;=XnLj0OB8@$K%^~~dOU>?EB){I=|Z#Xvj=WhM)6V}%mCpws8Eof%u zGa3IML=jIv7zPo`KNU^w*+~_~o zaYAX2zeIp=_T!%S@n;3lr@yr6{reQ8{juaBV*86uIoo7T)2APF=clEAi$woLVP_2s z;Oz7;Fp@wseeky}IA1n)q5o3Be{I1(SZul!AUp6TU>q<7m134j#94&VR;0fGU!fIL78pcT*odI>53MgwDj zu|P|p4bUFw26P3w06l>|Kwr8Jx^B82x?Z|>bp1eipaM`8s05S%N&~h4yMR3)Igk?A z0Biyd0f&Jrz%>9002P2nw?wy0w*p89WPmP%$U#&fY7jH%I*1+Q0&)dC07-x(LDC>u zkS53gbRT34G69)^f{M7GT-H YV1s|~;2$E^XBYt#SQu}Z^Dr>~4<3AXSO5S3 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Response.Async.beam b/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Response.Async.beam new file mode 100644 index 0000000000000000000000000000000000000000..c2119b1a947162629570833977510dec2ba5360c GIT binary patch literal 3404 zcmaJ@30zZ06Mrw^2;mAxfS^D`1rfOf3s}%_DJVqcunKAj$qT%YiySh$tX}2UY|{@WK{LMNz5JeF3ZOSKZ(5|8{p~c4l^V-|Q?}7U}{) zy8gZaJ|RA`2oDH?wZ_NC2T8O50jfkX$512zKq?W7q==)BG)crsWwB5ZPt0N!vt=?2 zjgiX$nWRZe;oAd(BCF@!7UAeA3Tl8hbR%R0F@ z0Fw^R4$(1eu8=KRj$oJ=BbohE1QiKT5yAyxVDY=jyWIg55Cr*&xd@2K3^1es;H?V4 z9DoE<3Lt`^H3g=BPRuhU8P470yD3y2gJ2O~$#XaD4LCdxc4jPwh(<7jVFMgC&$L1hXa(VwG1#;2Qa{C zlRZAh8?HkS0H@=6@iE@C0dN~Qov=tQ!hM)JIXA><07d{4ZI0~AU{nTV;Gjtg?rToE z0DRSC;6qSoauFU|E|4jRB2=JI=b?yzs~}2H?x)xo!utf93@$Um7P7$Q{FD@jE#e>o zT#64ou~j)mh$AS-?{7F8`qv!BMNQI$;7iF*ZCYsDvDuw?qVVh=VWL7n=*A9i)OL60@WdwnD_3%upChf{8hZRI1S8VPYX5V~9c@NZ|v(LnLfK z&;tavTqb6rLOhA_fnE)%SdMX!cqr5{Qa$Hbx_JX_P3gT&IIENWZX z!t7=kXIg1lGs?D750=-?Fj=_#C+(FzE2@s#ypVgHQ#Q43-(XbpX0$gUn7;Ab)X16~ z>-PR4*HPq--E^-OcJG|fa`Jaazwl7Mxa)RlG?&(wurR*jcAVSm)UXFdeb1WGs2)Gb zdIQgFd!pxdGA;Racci^`bwy&?-0j+qKUfcjVDV>f&UhGH^_A&G#aa)phG7){x8sp( ze6=sll>g*2jO6+WjfkUL2A&O}>+kPOx=)*vu*8f=lV)psp*!LHJb|N6bnDJeq?urH zw{iYeE;E-}HEP{hGL?KIFeB%l;RSWg0#5j|l(=q&OQm<2Uup!}v42{4Q@BQFiQ1mS z4e%xt9jBFqg@$SNm5-+`xq85_bO>f1z_{(RNaGueM8m z>A3|Rk7ixHbhfi^_4j+l(Z+#&IX<-0c@(y?t2{$(<~fIg#zlnoV^^x9E|gLCZr^Os zYRU9mmrCfb-sD2lD@8=hygUHa&kJN@6~9kq7a&Ke?urMgEN1w-n6{68;cBy+6cHYyT9_wMpwsW?6Z+ zegAqS_05$x%xxi2=3d;B?z+BKelN+_YzJ2xt+y;5s`_#2ef#sXnWhAOQl2s)r#T`d zFJoUpIltDuv^LSr+m&9>?@+40YsEz$a5PZ36V+-Als+M`M%c>3{aEKN?*f^Utjx>fi5I=GJ0?k(U^U;g~#jerHTmSHsuC)@G2 zmU@ovd#29wNz$2jB9$NTI@{)AO_k5^Li6yJzPWiVWqjTF5od4I)(~E#bVqMKP}8x$ zOrGDuJpy;@KZB?g7X1y0_WpT`uPHot=C)*xUSGtv&N8L$}Mr%;!L~*nX^iZM~)S>_0A@*^yptlN&q|ZgYflQKx3S z3jzb@m8*IC<)n*LMf>AKbm@66x;W(@{{oPPh7cW`6~` zyZ(6ft{cpk;UMv50Ts^SfZfNGM#uN_oR>o~8>Bzt>Zq=iV4OOWt z#LnpHwIzP2TTgHQ(t(nUnfK|IzsH5?J?&n0I_1!llcR+%>Z>9-<9e31rz|q9Hhg{d zWjyUq<-?Tv9`9G7kJ`ROwhrMBQGn7f9z0fu)4>a2fT&7l7AFqj#3L9h(FK2UVTI;o zC5*pF;1vgw|9HnIgosi!7I4%-X$>l2d|e!YKgj|G>;#3V(BKHfQbbjOsQ+DyzzQ|C zOf1Bg%SGTVoLmN~7XF8(CdmIK`td@5uOLoVG@mr`&$8x|qVEffkNblcTzt^}FIe#8 z*8U?{st8T6HMvP5wh-kg)MN-IoQ&eXh@e^u2E{)J^jv^8L4N@R6v=Y{ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Response.beam b/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Response.beam new file mode 100644 index 0000000000000000000000000000000000000000..ab7072ca1906d5b70a05a5c48747dacf2757ed3e GIT binary patch literal 13964 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 DUH(*e literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Steps.beam b/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Steps.beam new file mode 100644 index 0000000000000000000000000000000000000000..37f7087c033c3acdb814bed4c39bc4568e9f2896 GIT binary patch literal 88064 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Test.Adapter.beam b/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Test.Adapter.beam new file mode 100644 index 0000000000000000000000000000000000000000..9c80362405c1c407a7f0637ea5cbfd98fcb89358 GIT binary patch literal 7376 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 H19AQZpV^*9 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Test.beam b/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Test.beam new file mode 100644 index 0000000000000000000000000000000000000000..adaedcc2b727f76440878d7adec44bac8e796746 GIT binary patch literal 29120 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Utils.CollectWithHash.beam b/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Utils.CollectWithHash.beam new file mode 100644 index 0000000000000000000000000000000000000000..338ecb349c4b6fd7f3b554ff0fd82a74680152c8 GIT binary patch literal 2688 zcmai03tUs@6~8x^KnMbtgjcH7SeU>jB)9@viv}=cSc-^%^Fi~txd|7N+~nRH6Gw*% zSf;YgiZ3iGTDw)S7T;8d;zTX9)lS@M@iFU)46TkipFc%*ZW8BX>-znE|L<|m`ObIF zx%Zs!%brn?j38onraI%z46bM*f}r^D@bEQ}Ty3G;6q8gyI+BVw%EBgP(H09yaI-0{ z^k;gubg@=T*-W%n+ob0>hB7!glC=}G)lON+CL?KQNJ7t%##Yj8rx}jbT8$|yO->uZ zQM8TKS@i@%vq~W9thCW-A$2UrI0;TiG8VnfJZL64t(W0BrAe#x^0nGlpJ8g7)2d@g zqmv+8pOF-WCq9)`Bqzd=iONKsL2tC`?fE3b(2OYhc@fHHp=_iP#9;H2#S`y9MHX!& zAuh29g5UtY?E<_65TSSjB9Od-qw>kvnkbQE!qUv81x^FW6jeD_E#0c#oq{S=8U&M~ zDwPEKe3b@=L8sElVX&(N&@WbDQefuE5p<k=0ZRi zPxFoZoNv625CBi-_40GR1p)Xoc)B3lY2$4e?__)ac5dc0`QGox%Ed%l#)?RN=upV2$+W1(ZHXIo_UulW0?H%X8Q`!}Ev3)?&A&%Qi%83wW zNl&&+H>WF7;&&o9q2xD_8F;1nr=#YXH+-JcJ@pn@H#o7jD&>rRTU+P*Rn?z6Hr#1W zKZ&)T`>4Fz(Jc-zj);D1hw!jGezvYhxOzw5!Q>kA8A0Bmmv6Qe@2}54(I<+ddRwN? ziZo1HUrE>OiXE*OdMEN^LvcuPh`IXYn2z|Bf2=+>p)xbK=KYrai(=!u4#d_81zOvd zhuPwp+2LWQ(w60|ZR&8J?h5GX7?&2t;f*2VqnfwdEpmDS9+0g$(y5+zWpqgUtVuJ~ zA0K&JI&$~C%Bhua1ulB1Y17FaBWfl&!LCqJ>^F_~BrG;Go9bm}4D#Z{*C=mk7gEuJ3On)xptM-tIjw zyIDJB?&fnN6GOkfZMs=kd-2S{d1IKyk0V;#*?o(*cWzW9v^5XZU8a85vccccT(0@7 z0qq(^kG+`N-+w5p_z{9KYgRyZOrr@F5-ptn_t10h#*Hg8@{TES^~Uhtg7`Sy3csK- zhkt6TuxNbZ$xUbT=1<-i=ZNjRqq-oDQ~x-q25))y>gmnHrnBQuZIdo>9uSWGx}ve_ zPwjW-WqvBzqB+=icx_Ve#G<*=Ti377nIGQd{(Z^ytccT@&4TCye-YN-&h0z4Kke|2 zD+BA!*$Yz^HeE-i?kMXg`|T>x_LQ`|!K2Cfm4z|4 z?EgI87xP{5_2h3($uPm@l;(=jXFn^yGlYE|s``QA!f!B%@uB%vVj+72tb@cuISz03@F)#a1)u7=>^h!XO6l_YE2f*V?}U)aG|{ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Utils.beam b/phoenix/_build/dev/lib/req/ebin/Elixir.Req.Utils.beam new file mode 100644 index 0000000000000000000000000000000000000000..91ec6f12733351d5fa6a416c5acf77fd4956cb84 GIT binary patch literal 41284 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.String.Chars.beam b/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.String.Chars.beam new file mode 100644 index 0000000000000000000000000000000000000000..c8e012aa42b4014f81f3b7196aadfcd98a1c66cc GIT binary patch literal 5556 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.AI.Gemini.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.AI.Gemini.beam new file mode 100644 index 0000000000000000000000000000000000000000..2709c1a45d1001a79352abbb2f58e5ad2bfc45b3 GIT binary patch literal 11716 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 F{{ZE?qR{{V literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Auth.SessionStore.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Auth.SessionStore.beam new file mode 100644 index 0000000000000000000000000000000000000000..ece5b51381a83a4ac70f9130ec1e8affb489b5a1 GIT binary patch literal 5660 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 RN-Ta80POt}Z#D#R{|$MfaJ&Ej literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Auth.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Auth.beam new file mode 100644 index 0000000000000000000000000000000000000000..45aff1f53a6541c3bc24152045da270cc3b29ee1 GIT binary patch literal 4788 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.AppSetting.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.AppSetting.beam new file mode 100644 index 0000000000000000000000000000000000000000..969d7775d70f7d5aa8bb8a0fe32684e5a1758384 GIT binary patch literal 13820 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 Jbo7+x{{vvapk)96 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.EventData.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.EventData.beam new file mode 100644 index 0000000000000000000000000000000000000000..2802aba0b41856c84493d3cdcd95bab3d16de060 GIT binary patch literal 27496 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 Qw4s88d{0F*X(kZ<1u}A}^#A|> literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Score.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Score.beam new file mode 100644 index 0000000000000000000000000000000000000000..90febbd17790a61c142884d28ee111d4c6fcacd3 GIT binary patch literal 14812 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 Bpn(7Y literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.ScoreAttachment.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.ScoreAttachment.beam new file mode 100644 index 0000000000000000000000000000000000000000..fdcd5a4bcffef920bb4b354550043c0b26ab995e GIT binary patch literal 15128 zcmeG@2Ut|c)>|m+%F0rtiHN9xg(gibaRmVpK?Jema@oDWg>7u%!ZRvTY#$0Vv;!jWK^OIi%)SLFBK!0 z#5qDBm80X7N<Bk^7(~`QYpt`R7zAK6G+7}OoSE+QJEYSAWBqNjHbw> za;1VV7J9CVRY?R&Oe#@CixGibs&ECB(PF7kB|@VWO1Vm)j7H@mL=yKb4ps7r2K6Xa ze7+za)T0Ve&oAWj6@qwFjPUuDh(aM1V2B!PC8APF<4_4I2P3mgs3m?ZhKhuWXIgcb zun?A2G9iHH2~}cQG%Aikg^Fkbnir2K;#o$RM1jhcNQ?+2vG7DvL>LYKpu%V{(O4{{ zSSH8Bh&+{_h^B@msZe=prTQ<~gJmQ~5g{LmRibh}F2?|`s^q8;5hzK3XoXZI7oaSz zni$GhwaJ)VsX{~~oT~&A6;tLMrY5*jO)sCo!BeKn&`M1=SSSRf#i4vKOJtQygrou* zFkzTN2`UST$pg}ql`5qG!k|h_jM`#CxFSFdAhXp=!{-;165=mWiK7AeDgjzdStORJ zQ!}iKn-f@VCs(KF7(^&WWMQaWE|s$^v_UY52$P^f00ug13L3!zC}=dApHzqf8Qly% zxgfz`2}s@`^`vt*&=|&cT)OQj=2~->@$f9)tZ-EfDvwN8t?EBepew z>C54=ZCfngwHae0B!FgM}_%3yBH3rvH# z2`_LJ%uRVSbt`6#g`d57frT(P;{_JO+?>ZA1ak{sU?t2gd4W|hw^GlP)ki%QTRO{n z6qD1(ypV0rv1dDg>9>TGwv-*xQ;n?5D0X()7%m?z=!(cv$#~uoEdy-rS zNEdrJjm~o91=hlr!9)$0&Kkn?c7-c%%jNE;4KSwx0Fw>0P*>126fQp76LcE}7my1k z=0sG1MrU5rva(#%wO*jz)rT{jIT9q>0*;%BFOxRFm&s*r(luean%fS5BfD{3ZFe%w zZQ0%?p?|LMfjLGFp&W26GRP zbU-oyi31V?BzKTtJp|X()5&k3hiP>G6m?%A_-29R3F|;|Cci;O8wS#FkYN1~@*89{ zN01Cbg5y||-w+0l-3ui6>j@HUhxLpAl?2iWVPV+|)`0|=P5hWQms(81lmLdcg{%Vj z>1c)slysHg4+Ga1qOpidq=Y3soZY-#sDxlCbmP&!^0$ry>aorddCQ{mRY4S>rLgGmSnAOU9yF$Hj51f*=~#LA^&*n_2o-l`RP=Kuf*wx1kl zAPQnxbYg)gL#|LfCQ*XHbfC2&s`O-t91(-M7UHWm0vQdwZzK^F#2L4k@; z4a@Y2okTK0pAbq2gvXPCVp5-@hQnz1@yYmgQWcab0zk?jPzh;Z2&zE4HiMelDMY~0DAUx^RT_9er-^!UbSf+) zKa!{>7^d9{5F1lf3t{;1UcklxpBmT_u}s0|Lq^kEtN}nw_x=yvAEa5On*YCfdrXoF zrUIry9|-zZBO!x9f&7Sq(kS2yux@hL7s^!KqTj>9h0$lyP?s}l9Dn{R z-zww2pZ)Ol8b|k2N549H$7?PczFJkfM$f-NxcvUzyT`Upo;X4o`<8|*>&FX?;8Bp?>2QP_nw_s zb?40Sx~rH$(&5J1J(h2mg+E&2wiUT;73lcjMeWOPtkE~BG=yXlYEE?D`^6=vD_RfdDvtmBTW4So;$ zVmTMFnY7xY;B=3IV*k+6(|e5K5}YL?(LMB8XY97eltn);kQ<9ChRDX>DB5aoS~JBf zSa#N|G0n50I%BlcaQ^Lj)!MBEo0)~Z7-{qO>`MN*IxpLCyxW`)iyaMYvkG!Pb)8Z6 z+%sTG z7#zB0&OWynBW4EI&bjDb5pXHwO^$ieNZF}{YkxX%ZFJ-E!#e)sOCE4)Tm{vWXDbdy zT=~b9nduIhCzGbRj19N0%gl7I5FGZ{Q&6*A2lbtH>F1ms4Yejg3obb46t1?5%{I`@ zS~=lrO=(|+`;ud?4z4IrgqPwAKMwtcy)Dmv`sPQ8&yPlDJ$+X4bY{$mD}(P}F*|hs zdG5S5?CLWsOACBQW^<*#OnTsT;p3%m8@O+lvLX+z*|L1?wAb$q=dYM>$YkT&%=*L! zu9jG@*%m*;W?1a%fS*wK+xA&bz#XiA7oar(LeU>51kaojD^e-|Ekb`EBfF=l#tzV1t1)%c`OO>Y_x z&dA>#vVWQUOXm88j`#9s7ktMEsO@ifEG>1*TZ`q}8@F9qzau3pJ@nU?w%2d;dNS(y zQ^!yT(TC}a4$s?g)&93h8HIx%T|9Br`(yugv+IIYZ@ll#ut3)DIBaEZiT2;MC3|cB z0;@wZyWY0_POxNG+_U-i6{R8vHSdoS&J&V61MdMP)`lkRTuc-}q> zx0(!A&R*AHMf+BZ@;npHv2H}{%h|ba{iw6M94_@-p7QgL^S8`?yfiuR>ZKc-{++z+8?iqA3_qw896#TXEhNA2Mn-3e8 zOv;=8dG(>;ro7uh>(_j9EtT1G<3_!box2}AiAfmvCV%&<5qVd$E^myRb87V-rw0RE z7YueEk#ax6#mmy++pF(0>z5V%W8ae8T>Ji){CuZ9|M;OX>A>YUmY!7+YH2oeURl6b z@?n!-ndlE(9lU9yS9INq-lL8Vz)g(b8`F%ej#d2}(kpFu{rJn@P5;Dv(va9KL$Z5* zCJ%dt`no-kPiAEwV^kU<^6V6>MqhAq|FKhV?RV}ne)ZFZ#V4}@4%#FQHM8Tbu)fn^ zzpFN~B4wF}l)LDkOV)T^@DOB9yy)?4f2G)bLEeK26$cs)l+PZ0Zrp`;jL^afDPmvM zoBg4OPShpLz4XTZ2k)r9LMNZ6{3z9AK?a)r>#es3b9*NIhRL>8TD*H#v}r+UWVke> zXZhA#k4e?VDkt|9a~_VYIggbbbggSVb?x1#^2ZhBFC`AQ%7o=V`G&lAs;3#{3$)YWLa1i-*U<=@tXHbI0idT_ZVM3 z-!!W1#k=w4^=ltLKf`GV>z$MCw{LRav|S@-raMKI-xz1Pc~-=X2_cE>h9b9UZvL-l zd+jN@VxhD5=#I0?672d|teaT7EymC9yv5FKenRH?geM3u`NrdcrR%B=yggAr`r6^s zm8_jx&YUY29x;BpthitB5s}Yghj)>cCBn$yOFJw|hdi(N<)rz%jFUk-#>G}Lb1Q;g z%I6An#{O6*toi4fM%!JzY;WC6*ROi=bni~9tBdu|vD2pY_x2cVW%1N?I4646SJw(9 z%T*2bxj)e_EwkQv%FOA_k2VHtQ%q*P){Q#E*0+geUoMPZnB<|m?)NL0ZCHAAs~c zIZLLmbSc?bRkTi4yM1fM>F|gRv4K(Yocr~KC$6&JG_nV~iJ!(^K6rb3ziY0hb&oO~ zJe{kUo4!w(aHM9)&0iNx*tz{)<4s=nBvbiqr<=x!^&`JXh}RP>pOoQYn2&GpzOZ?yO;(?Gey8T{x5*m%F#F7ci#AJK-W~sX z!9~4>L1W!UZ+F@t`PaA`kK)Ex-~G`&XT_Fj&mHZ4!3MAW?bF=2GX+t3U%%h?&y4ZU zZ1sKaoc`q8qE~py%A_rC1CqZFT6_JTAOGwp*C&Sz|7G9S7Ymn+&YxWWQ93Q;(6-xn z&X*0Vq`BTxLhlD3=j3uHc;^{{U7Ixh7CS8XJ-^}IsgH4!KIjk1+BS5&RGt6DCZXqoW=j`*zd+ZWxfZG z46e!geXJild`QH+F%Np2<>uFay8l3B!w^OT64qyRk5#L(3x-XV^o<|5cqp1RY)i2} zc7FNLyzK*y%%~su$A>hw7cu!H(S+V14)3%CRS1qAvKaOO1XsVot^K zdoRovOe#XG`#gK{uNkji-X5*He`7@L`I2Xww#uR|^^?AT*SOVabk_UFuMF{Qaig^V zd;Iq0x!!lLn)PqYk9xJ0?~tQX4$GhSye#44i3x8ws}7kB^iT0iq|t0ofYTjrgsQK1 zzoNCXjqWH%TWq2v1G1r79Eb>m_1sAar~fMY7KIMApIE`7iq4eT1vNFbX)e4nUc z;(7v+RDlX%gAREVBY<=erBn2g!&cfsMj{A|6Ln>nc?;5!zy}!6HMu8@+v+ zx_LB*8v@2e+eb)nqDyPhLEIHYGu1&>?RhZ3;F=I*ixx5p+Ok$F9^A6ADLPCvw54T; z*)&HsJA)*{qAf=vgsAUaEs-$>jb74- z9?m;oZE4!wBus)MZBa(XG}{Nzn5qsSh+w69!?d(# ze}trF9HhZ$i*9HXyG9ZvAWL-kBQ#NvbTlk+UDOc-g;%YN^dBOuIiB0Wu-c}+OML70 zZUXiV5o+WWTo@^oq`Gd&bsZ2bCcPz!25)PTDIDtZ4Z?PJ4e1)R7RA=0rqQER zhg{3&28C7|jl$nn4DT+-TfepXKQ%p$)|)TQ)S4LBO^Isjftv`8f=*c~!8SIt_=;Ll2l4t!Fn zp+X}Y;99#|o@VRElr1rWFh;j98n$>Bs=?PF}JbiZ)zX2706Y>t61A5!myH$_2 z2<(E2Zr50J;3Btiv)zHa(BjTp1KFhswB@F0WCd7p;`e7Ik=^|C_rD7Qqj?=H{ok@6 z{M$@s+QGle*y#+tv8D82CMYc z)PslHFe=+->{P?srl*(fgAxOGHD*N(PHDC%m|^ov(Dn!F=!qzdZmQomw%@(GE3DQU ztwOt`bKEMl%OMmz+1z;y#en((pHz08_aYB78s*qVgq(!Id8`*Ahrz8D?>wy0{5_d4NTIF|hz_x_*FB!-{bFOS-H~b|7_M}98NTz9a-(NDG zt~xOEheiT>2;8VrtSv$#3}!2P*6C&KfBh=;m3C9i6!NiizlwPJ3ht=L|7dC7UHSjv zRyF;PN&8~h#<^T;TeaA036sFTT!6I*0!i~T03YyuFWnfSxpn)UE9f{C7*>$6L4xmv K>4qO^w0{FiUlY{; literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Settings.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Settings.beam new file mode 100644 index 0000000000000000000000000000000000000000..aab42df51934e6abf1f63db4f3fa553a4df2fb1d GIT binary patch literal 14480 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 I3}LAM58CgSmjD0& literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Stages.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Stages.beam new file mode 100644 index 0000000000000000000000000000000000000000..cc0a09be1c910fbf5e0806f8ad9327a88080104d GIT binary patch literal 5232 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.StateService.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.StateService.beam new file mode 100644 index 0000000000000000000000000000000000000000..e2a0755283a072b67a362ab487dee527a28afcbd GIT binary patch literal 5036 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 Z|67>^48|BVa4jo9;9nPFX7dpt{tsoL_j3RM literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Events.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Events.beam new file mode 100644 index 0000000000000000000000000000000000000000..ca101201f53a79342aea3b570e5a6cedf96dd0df GIT binary patch literal 2396 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 NfCP6x|9uw``9E+7p{M`= literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Endpoint.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Endpoint.beam new file mode 100644 index 0000000000000000000000000000000000000000..fab5c11f7fe27e68a94cbc3d41db0ba7d9874a83 GIT binary patch literal 32552 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 M5JC??!`uk+Psktni~s-t literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.EventsController.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.EventsController.beam new file mode 100644 index 0000000000000000000000000000000000000000..bfbf41186f3f78d788bd8772a02d5dbe58b15521 GIT binary patch literal 9396 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.FrontendController.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.FrontendController.beam new file mode 100644 index 0000000000000000000000000000000000000000..fbdf77aeff0b43e996a9d8a8337d4aa508782b89 GIT binary patch literal 10024 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 wrR!_Eh!i4?Xh0lAG(1Z*Cqn literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Plugs.AdminOnly.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Plugs.AdminOnly.beam new file mode 100644 index 0000000000000000000000000000000000000000..c2fafdc84cfdb46ec3f722d4f51c25f13913c2d4 GIT binary patch literal 2592 zcmb7GdsGuw8lNE%0)mX;B`A_oUB!hEQ1C&;;U!Q(A`h{OhDkCZ1IbLBnUJ8eD=Fe^es7ztXOpr$C6Ak!i;agvp)jmfxN zEY;}K7;%VFOOSD-CTpWiMvy8>CM&^MmL}wS7H4z{N~>(GCjyItc!e$kp?_XzUc6q8(@C53d-4uP{5b%YpiMjn z7)6Dkm7)j0}?F*;>{OJID*od6OVJkH@K3NjL~5RQZ|;bv`j}+3J|%$T18V@ zK-0Lv9*p8TK*MzyASM6;q!J|~v|LW71HYCGrKc5m2DHXEi2-Z+DhZ6lRD{Ymfl{#s zFw2)2t0g`-S4@0$?{dpmL&*Ov$;^^Wr#8wAxZGFART|%SxlDmlBgT#CP`Ese0I$g| zR|-Mag~s9^mM@`hp-7d(T;i5h-uTd2Gef&KwTIVxIwh7KoF_dN+EpF+a^8)fkg4|>O}>&RH_T6;oHwTj^;;B+&Q?mG3jLPwfQg6L9e;+B-5F-4R7bp zHv|O*ecPdEbq&7mz9Q#9V&pmghCe2`*^$CZ_vA+>tY;by#57z|>wKQoxTh@kN|qHC zmwGVPUc;~aMpPF&u*)X7-xpiwF37xUYpeaa&(>zqCGWP9A$I2Qlci2y9TzPrgPYX* zoIsaE7lEy2@)>ClT(xV^1Cuce(!LTBohMqpz*BoANS{ zSrI@uo!h+fSR{RSRWDj`ucTnp9l`pVsD(=BzO&caLrZ7$>?$8|;eT8?U6L1^oh6F> z>rH<_6TfNIb8NpUtFNbJviIyR+4b7?hkxHc=#kPVzWC_4x7|p~#kx3oeZ!I0r!G8f zc3xH<@WQ6EY5CE|F83F_p11e**;%hvPl`bURywwn|K8fW{GOe@s$%t%q0MmPhMdUS zVHb%_Pt(FvJvr`fVKMnNN9?4Jwg=oLAC_hhJe0eS+%KrK+BS43zG}geZOvPZ-$-}V zFBtvOO?GzbhO+p@i?Hvv$3~syJ%;cSATLb4*AC@1lz5nLz>4WW^StiG#+M-RhniTTx z+?3dTJ)Fr#P;8Dt%M3__Fhy^(W>;3|~6ftBANmsL@uh zpO!yb^D{&S-NjoaPvu0 zg4nyxb$?>ZfHnVFdFulr&Sk&_>3A#$*&I$O7+?muynwTe#ra>fE!`|ZB63#eoZLTT z9bC2jZ$m!K$wfI6IlYdn=S6;I=`yG~2U^MeiL?a~(w^_LyL zZyxMlsJS+9sM+83HFe`7qY{E5jA0pI?@w|;C7OtvuP!o$8dqfCv@FxlT$2q}V;7LI z(hf$B758^Ck0H_kHxAroz_kN71Lf8{bZoXVi^Q~q!oX*7TKgd`{ez_XH~)_Ry%7At y`5z?HW56u~gt!FY{bK_<+`knT<`lF&9Kay)|5sR{#4H`>lk>y<17Z772>KNR?V&^f literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Plugs.CORS.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Plugs.CORS.beam new file mode 100644 index 0000000000000000000000000000000000000000..dd21d9503b3c3bff1b8905153a9e2cb0f272f95e GIT binary patch literal 2836 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Telemetry.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Telemetry.beam new file mode 100644 index 0000000000000000000000000000000000000000..ff7139ab721d5bf5c85b952ca9b1cafdc2f2169c GIT binary patch literal 6300 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 WUjQ8sck57?1Ce)ubep#{+W!ETJ*xiz literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.beam b/phoenix/_build/dev/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.beam new file mode 100644 index 0000000000000000000000000000000000000000..814604e92c331b51e2fc6c0b9ffaa2f40416f4cf GIT binary patch literal 10004 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 M{O^ct+D0P%13Qg9wg3PC literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/ebin/shooting_event_phx.app b/phoenix/_build/dev/lib/shooting_event_phx/ebin/shooting_event_phx.app new file mode 100644 index 0000000..1a2ea3e --- /dev/null +++ b/phoenix/_build/dev/lib/shooting_event_phx/ebin/shooting_event_phx.app @@ -0,0 +1,45 @@ +{application,shooting_event_phx, + [{modules, + ['Elixir.ShootingEventPhx','Elixir.ShootingEventPhx.AI.Gemini', + 'Elixir.ShootingEventPhx.Application', + 'Elixir.ShootingEventPhx.Auth', + 'Elixir.ShootingEventPhx.Auth.SessionStore', + 'Elixir.ShootingEventPhx.Domain.AppSetting', + 'Elixir.ShootingEventPhx.Domain.Derived', + 'Elixir.ShootingEventPhx.Domain.EventData', + 'Elixir.ShootingEventPhx.Domain.Player', + 'Elixir.ShootingEventPhx.Domain.Score', + 'Elixir.ShootingEventPhx.Domain.ScoreAttachment', + 'Elixir.ShootingEventPhx.Domain.Settings', + 'Elixir.ShootingEventPhx.Domain.Stages', + 'Elixir.ShootingEventPhx.Domain.StateService', + 'Elixir.ShootingEventPhx.Events','Elixir.ShootingEventPhx.Repo', + 'Elixir.ShootingEventPhxWeb', + 'Elixir.ShootingEventPhxWeb.ApiController', + 'Elixir.ShootingEventPhxWeb.Endpoint', + 'Elixir.ShootingEventPhxWeb.ErrorJSON', + 'Elixir.ShootingEventPhxWeb.EventsController', + 'Elixir.ShootingEventPhxWeb.FrontendController', + 'Elixir.ShootingEventPhxWeb.Plugs.AdminOnly', + 'Elixir.ShootingEventPhxWeb.Plugs.CORS', + 'Elixir.ShootingEventPhxWeb.Router', + 'Elixir.ShootingEventPhxWeb.Telemetry']}, + {compile_env, + [{shooting_event_phx, + ['Elixir.ShootingEventPhxWeb.Endpoint',code_reloader], + {ok,true}}, + {shooting_event_phx, + ['Elixir.ShootingEventPhxWeb.Endpoint',debug_errors], + {ok,true}}, + {shooting_event_phx, + ['Elixir.ShootingEventPhxWeb.Endpoint',force_ssl], + error}]}, + {optional_applications,[]}, + {applications, + [kernel,stdlib,elixir,logger,runtime_tools,phoenix,phoenix_ecto, + ecto_sql,ecto_sqlite3,telemetry_metrics,telemetry_poller,jason,req, + dns_cluster,bandit]}, + {description,"shooting_event_phx"}, + {registered,[]}, + {vsn,"0.1.0"}, + {mod,{'Elixir.ShootingEventPhx.Application',[]}}]}. diff --git a/phoenix/_build/dev/lib/shooting_event_phx/priv b/phoenix/_build/dev/lib/shooting_event_phx/priv new file mode 120000 index 0000000..d100101 --- /dev/null +++ b/phoenix/_build/dev/lib/shooting_event_phx/priv @@ -0,0 +1 @@ +../../../../priv \ No newline at end of file diff --git a/phoenix/_build/dev/lib/telemetry/.mix/compile.fetch b/phoenix/_build/dev/lib/telemetry/.mix/compile.fetch new file mode 100644 index 0000000..e69de29 diff --git a/phoenix/_build/dev/lib/telemetry/ebin/telemetry.app b/phoenix/_build/dev/lib/telemetry/ebin/telemetry.app new file mode 100644 index 0000000..b09b016 --- /dev/null +++ b/phoenix/_build/dev/lib/telemetry/ebin/telemetry.app @@ -0,0 +1,15 @@ +{application,telemetry, + [{description,"Dynamic dispatching library for metrics and instrumentations"}, + {vsn,"1.4.1"}, + {registered,[]}, + {mod,{telemetry_app,[]}}, + {applications,[kernel,stdlib]}, + {env,[]}, + {modules,[telemetry,telemetry_app,telemetry_ets, + telemetry_handler_table,telemetry_pt,telemetry_sup, + telemetry_test]}, + {licenses,["Apache-2.0"]}, + {links,[{"GitHub", + "https://github.com/beam-telemetry/telemetry"}]}, + {doc,"doc"}, + {include_files,["mix.exs"]}]}. diff --git a/phoenix/_build/dev/lib/telemetry/ebin/telemetry.beam b/phoenix/_build/dev/lib/telemetry/ebin/telemetry.beam new file mode 100644 index 0000000000000000000000000000000000000000..1b291b0c36fc34b6642119f9afe97291630b7f0b GIT binary patch literal 14664 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 yJD_B5jngt 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 PdJF;ZZ&Q-dFaiB9GHUm? literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/telemetry/ebin/telemetry_sup.beam b/phoenix/_build/dev/lib/telemetry/ebin/telemetry_sup.beam new file mode 100644 index 0000000000000000000000000000000000000000..5f738c9c035df85d6ba92f2a73407ceadd6d28da GIT binary patch literal 2116 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 ex_doc}}]}. +{ex_doc,[{source_url,<<"https://github.com/beam-telemetry/telemetry">>}, + {extras,[<<"README.md">>,<<"CHANGELOG.md">>,<<"LICENSE">>, + <<"NOTICE">>]}, + {main,<<"readme">>}]}. +{overrides,[]}. diff --git a/phoenix/_build/dev/lib/telemetry/src b/phoenix/_build/dev/lib/telemetry/src new file mode 120000 index 0000000..f3de4ce --- /dev/null +++ b/phoenix/_build/dev/lib/telemetry/src @@ -0,0 +1 @@ +../../../../deps/telemetry/src \ No newline at end of file diff --git a/phoenix/_build/dev/lib/telemetry_metrics/.mix/compile.elixir b/phoenix/_build/dev/lib/telemetry_metrics/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..7986d856f4bf66b4ab2d468dad3e939988a2a4de GIT binary patch literal 5196 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 Oe+~f6onWgW2>Kl?jU&MT literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Distribution.beam b/phoenix/_build/dev/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Distribution.beam new file mode 100644 index 0000000000000000000000000000000000000000..2e95e300d0e3d6bf9eb750f9740e19544ce88ea4 GIT binary patch literal 3804 zcma)930M=?7M{rhA%F}C0YR)$a2E&`<;h|b7I`RJ5kc+yNJ27!3CSeRObBRIz*5R{ zmukx*A_|rds)&G4>2skXR?y-CF0}fr(kfJ{b*c6#?@kgc-Kg_@|Gnp)bMCqKp1Yhg z3u5DaA!y9SkZ?(~gj(_s2!aK}!^3wulfyMwCPsKCpc+(*Qbd+_G$=6z=^ciVfJiY= zm=4dDN-GT;ijFDcW? z6@-oy0j5l=QyMg=3|KZOC>cs<Nq$B#wZXd{`{z zfig}Ufq+UTju3)MFJ^!;Tg>DGVT=%hw^$+eu5ft~!rBSPRC^dz{B5d0%;2NA*?)3msb2+VPOWu3z_>G6P^KhIvk3;+<8 z+B@+>n2<*Z6JeIH`Am_E&;tz0aY97Gy-XJ&m(PzuL@-BSCA4>eInE{%0${==*xniD zj5W2L!9cFT_G6igDI$S(P^4B**M0yj06PGC00w{q0PRO6z)L=Cp`Abthi97liUG|A zaHM&bnx^TGwlM~P=F@g*n*MA7=rL$MV}Svu=iqK>^JpFbAHejnnIF%L!YH7_P+C}E zu5k1^4QSa=pkNrSm8eQ?&`?Guj%kc+6^3e*MiwpySL3hcTr>m4De2#6*=kWaX&}HY z!>Lh>u_$>eIf|SM9Yyr2qYeGZpD=B;LoffbO)aU@TXadMky&N#c0EXN^>76G(Jm6Fs6?ZljCv~ zrt(>=Q&C3H%ZE(U=_m|O^)lTJAAOn*#j#8u5GzO@>Se5v(h:Xpao@+Vy7hzR73 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Summary.beam b/phoenix/_build/dev/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Summary.beam new file mode 100644 index 0000000000000000000000000000000000000000..34a57fd8cee83ab30fa2f9bfba607b1901e68777 GIT binary patch literal 3768 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 I>4Tu(0XESp`Tzg` literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.beam b/phoenix/_build/dev/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.beam new file mode 100644 index 0000000000000000000000000000000000000000..08105e0ad061837b08342aa3c3a65c5426aa464a GIT binary patch literal 23224 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%0Apoc! zDh>yL%0tCP0r+D)iQo7i^gm>Q^W;9i63{CD=Aq(h08s6u^6LTc2R{|3GmhH#F&)5J z0MPy2Z~7Yt8X98&bO4~*VhDgX090G_0nqx5Q{^;% z0RP7Sh#!?sXA+L5#{7?%NdD##0owf!ZU3=VD=Zn{Vfcf_26QkclYcX)B?r+(G6F{n z;E)+YBMtZmoE0trjTMquDrJQ)L=p#W*Ue@H6+Df!o768=jX z2`7a8$10HjP$BxKioc&ee=9-5sV8S(SgU`?=>93=Lp|(E!GRO#Z;3#_Ts)k5z7B)` z{iq86n|45-^*{9K{iSdJMEk!`_@5d`Jskfp^f~{-K(oIL{8xRyLIfuSz<~o|DCxg< z-Q^#e&HvK;Z?6B3RonbSHR>S0w6uu)&#H!CV2b7cYfJO@b!hbDr@LviTs)*!&EyDP#^r3QQ{UbE7e}?97Y56;Yf62%JSN~x_BnOZAdtS@! zuMlZOtlY2l7W1nHkw(bD1H$osWGn$s#i`2(V1kpwi8!Eqpg|{x(0CeC3qp8g5U^mV zr4LX;!L3d7;lE2$xNr2|7mX%7j`-^vhd0EbNhF;(VjTV`P(c&$`=|pM?H580L;GR& zFM&a7_xBr6Bt1~9VM1uU6r6zSo21~6MdQ%{*Z>6wLI61u9fnaL1rZ29r5Gr`pMna+ zAOZ%DjZ*N(5J?LET2?BM!uOM>a zfVx+s0HCTf2LLz*@8i^ajKXi6dhhxBUM>EcPQ9Or{l=;HI_jQH)x!&b;BTB8Xb=6y zIrYh8>RxQJZ!aBSFDQb9-!~Btqrseo52UA5e+}oyg|_Ng9tj5enST|@gz&K6j{Nl~ zgzAW)IX(aw^1;475Wvp_JR>0isS`p2(m0Hy5(q?UD(%OCArj(`@eL2$e*_T8hbI8f zIna@Kppp+I0uvqP{X0JaFwE_ye;ap@75s{@Ywr6X3UMm;Yz3u<8dg@Ftl7LC@`~SZhf{lCwu{1PX*2#7>G|m%IK??l%;2VkkMGpNX0WQI>48JTra?g`l zoKEKc6xd;}cDg^7W$Dp(zKEp zzv@B?le{d#u>#|@X5r<%;hKJ&J|M$rgq!mr{d$G0>RYV!xo2PV#74N?d@7f`Y!Ni{ zHu~i;#7>U3*SR(3!NgK0XX8K;+e44J$_VWYI-5v2CdhKwpw-WdzK+@CK4f=!0S z%JQdatNi+Or*cp`(W^B zv{zMCl1J5sc4>SSmV$lyF0=N!P1W;Ls!4_?eFcY0r42HeFMgO;ixiEh)gm!+AMttN z%;a}1oHy9Fe^9eiOxL3^Sqs})$;o{>C-=Lb!K!AI3Tu1g#a07{s>~6!v9Qyhy5+1Q zIL>h$X3l6*1n*eY8p@Kn$AuObwa+)U=J^+JU4LKb#Jv{oe)8@}>c?8^HP^+~0m}z- zB?8>W*+gDbEl7gLbCaD_X7$IQHeWx=kwep8`>**1oi)J-RI6W;MT);;xWw`{Vz406+Q;P$g|b$2*zioI`Z7zVd4m=* zo69@F`5c!qPkYr9ojKVTGxR0=pRW;0Z{3NbRrXFEf5^MVki8U_GE^2`J!ze9EK)o( zbS$je^$v^5DQ2(M*I8b1XFCTNw-~#{LeejLIIFy-SLnBX#_V;<9ih`WX>Y9-TJc75 ztSCFq>rSJD%WNxBA+z@_i{ZkS<=CCE6U-?*T{ck{A=7smGAmWD==pG1In?9&D|za# z8mi(l?|!#N78aEB)uTC@m{fx&Pno$$o#ARRm)p}e4jPt;RB@$M|GyGaY{q|#?4AC_*` zNzr232nL3g`%})8h&fs1(SaRI%Yk$YQ`DXk)BCd_A84)z|CFzv{?zfJS*F@~+WmrY zc=8pZAn@}HO3Z$dBqOglzUjP?!p&9@Q)%}~^rbU-IY_mgYr1B*D}VSW0hw5D*vw^( z4Pcd9J#Cd&HI!FYonlb)AX-9Pxb@WOaXMRd#ts z#;7jZ9EcbXsG4(mtoG28q2XN7_|;6o!>fx|pSxBU-o9(=6)H)Lf=bzLETS b!EF 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/telemetry_poller/ebin/telemetry_poller_builtin.beam b/phoenix/_build/dev/lib/telemetry_poller/ebin/telemetry_poller_builtin.beam new file mode 100644 index 0000000000000000000000000000000000000000..c7ea63ed23287f99109746f4b175bc1775b48ec0 GIT binary patch literal 3836 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 M2z?Sa+>2p<0pzfay#N3J literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/telemetry_poller/mix.rebar.config b/phoenix/_build/dev/lib/telemetry_poller/mix.rebar.config new file mode 100644 index 0000000..c78cea1 --- /dev/null +++ b/phoenix/_build/dev/lib/telemetry_poller/mix.rebar.config @@ -0,0 +1,16 @@ +{minimum_otp_vsn,"24.0"}. +{erl_opts,[debug_info]}. +{deps,[{telemetry,"~> 1.0"}]}. +{profiles,[{test,[{erl_opts,[nowarn_export_all]}, + {ct_opts,[{ct_hooks,[cth_surefire]}]}, + {src_dirs,["src","test/support"]}]}]}. +{shell,[{apps,[telemetry_poller]}]}. +{ex_doc,[{main,"README"}, + {extras,[<<"README.md">>,<<"CHANGELOG.md">>,<<"LICENSE">>, + <<"NOTICE">>]}, + {source_url,<<"https://github.com/beam-telemetry/telemetry_poller">>}, + {source_ref,<<"v1.3.0">>}]}. +{hex,[{doc,#{provider => ex_doc}}]}. +{xref_checks,[undefined_function_calls,undefined_functions,locals_not_used, + deprecated_function_calls,deprecated_functions]}. +{overrides,[]}. diff --git a/phoenix/_build/dev/lib/telemetry_poller/src b/phoenix/_build/dev/lib/telemetry_poller/src new file mode 120000 index 0000000..1893ac0 --- /dev/null +++ b/phoenix/_build/dev/lib/telemetry_poller/src @@ -0,0 +1 @@ +../../../../deps/telemetry_poller/src \ No newline at end of file diff --git a/phoenix/_build/dev/lib/thousand_island/.mix/compile.elixir b/phoenix/_build/dev/lib/thousand_island/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..b7aebd23e9fe65e1c55c095a15b82570566fb1b4 GIT binary patch literal 7030 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.AcceptorPoolSupervisor.beam b/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.AcceptorPoolSupervisor.beam new file mode 100644 index 0000000000000000000000000000000000000000..a6661755e8a7365ee2a622ad3b5d6d07d0ab903b GIT binary patch literal 7224 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 gNB#=O(KGluk!lGJv;C{r#| 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Handler.beam b/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Handler.beam new file mode 100644 index 0000000000000000000000000000000000000000..38c04a8cd71282543520da87a5ae5209f39e4d15 GIT binary patch literal 117884 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 l%r1T1 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Listener.beam b/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Listener.beam new file mode 100644 index 0000000000000000000000000000000000000000..9b770115175a75014d93a2a9b225291d0c727c84 GIT binary patch literal 13120 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 Gf%qRoi9A98 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.ProcessLabel.beam b/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.ProcessLabel.beam new file mode 100644 index 0000000000000000000000000000000000000000..d7e30826e581ece9a86d9d5b7af4f5591a06f061 GIT binary patch literal 5056 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Server.beam b/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Server.beam new file mode 100644 index 0000000000000000000000000000000000000000..8525dd5119ccdc4bb189834d6e738d09b3311a2b GIT binary patch literal 7620 zcmb_h30M=!@=r*BBoG`(AaVx;6flHCkV7S$ih^>A;t>KFNXTgpf`Y&TDxQlM8bv{L zRRj@S@IFx2TU-zn1r$WZV?98;S>@l8gjM&s?|tw4zxlqJ?ymWDRdsdGOm%hWjA%C$ z%JM{DNI*n@EY2H+!mx&hhR)+GLipSauEZslBa%y5LUx#x5AH58up}Lp! zEMv)J5^j=Q21~`sB7vC8hs)ToSOO=rWH7r1&Jc?vGAUEQ_AE+~3zKDBkx-f_U?odL zQdhuC6o}YzKAb3(N#w~gS0R_52upyT)V@?$##BF4X~J2sl9OSvOeA57MIt^^Di;Go zxKgCeW#bGr#>V``?pAQP$sA@fhs$S6U}2305F(Td%2K#OHZz^Ym%|LMkSj}+s>Xz~ z{qcw+C8A_lDh+2P!F*RKEW=s-7#Gf!%3vWZDO2fWO2u$8Lkja#aASXr56}!K5{&1o z-8hFIqhmO78C#?f4r^)PYt$j*Pn5t?xd6@`=21mFoS{_HgE`ENge4M@q)aMfNo0U2 zI6U-V@%#uoRkWd6Fz~fS;1Qv*7 zaAFdR&4U+;rE=gAA-hioO9WgYSRLxQ!5JweEHS{U%~JWU>AO~$ro|PeiY0QP5R_Cd zJ5q&b$QFv>vae>{3C<~K#)}k21%K#MucFrFd<|NCIpKCJtIlVA{;f5itbjH0fQ_dbRS}P z&G&{wh~W(?!*P(Z2>`7iG|o^Tf)EP`)+A*&mP)jACX(VY5P`}d*pL`ljI!@LCKiK? zQ;CDHP`w+`2&2Rq>Ox{?P$N){AQBp9qzw_Bfn4APTa2boR^p6+x>0~_TtXycwiC(m z7%CXN9m$zUCK2qvx^FwtME%GC%fODBNTi@~CJcfDNr@xrQgcg*BQaD0H4p=hLgOe5 zGBRs8*CHw!HxgnXzIG)z5*)}ls0^@7l{hlc>IAf!sRyaV8LP}T2WFe-LN(4rb71!H zKyegZYQr$g8X3EKs3ZSks|IKe2IUB3S}1X*K>S#s$xEtQus-kpTiXVzy{cPQ*ZzL;`5JVF>O74~7=-ki~Q=1C6soUI)TB6dGrbtZAql zjdM`5fTYo1S2}JCa0fto0=6Tf8kpdu>;@b!z;V`a#wr^CXFTB0N{KEQuuPCaxPdBw zyD$jeNJ&?^0+0^?xt0>$0LWJjazh@vX+Z8OBm4l!VyEKvsYdIimrM0W>Us z6sThWA$@HDAs7Vjq^TovoB<8vkRO?4VJs*SeF)D75W;r_q`Gw4 zKlX#lct8jr83R(H5PmpU2Ku5WB5iQ#0?N+kBQ=he;@<`mEHpq6zW%^fZ7dQbsA~G( z{wq`*9rgc2-S6w4Rn^wj{C-&IG@#ogUjXjVMZ+9^>v_eL{SJCjy!p|HA1Nx^5Y1X# zwgNY-1L-vSyGQ@{mqDP^@1Xzs_eU@`e_?Ro#}EF&sS6eQ$nTYz0s<+K5Jo^c`7&@v zu5eK@G6&&+bO8AQLVWB2=-c`Db`HEW7-W5UYU+-l9194UN6P>ZFM={cWr-FTGbUXs zMCJx9gis$}`0h&0;y9Nr%s4n{60;)>JjW-&99BA4B$udAihm9D(h#eI!h|WH=u*kW zfPT6lOqGIglZV3ixVRz=O~`_X!75BaoFWyo6hfvZYz2X&I?z+#QzRk*U`t@d2!KK= z;2DfWH3|d3V98}7CRcz&wupf`Qeay$%tIy7<3J=SrL(y#AuENOLXQ!p$P}O#UCI%O zWFT&#!RfG2Mi+BLu#lTU2Z6GbF4M%ZFY` zYXo~~qK!koer409O`CJiti1Ks1()+{&RC6W-F?{if|GAcc-y-}Ik={LQrp>g%HGX~ zUdnrWTRm$O%MN@F@|>r;_UX@S&V2FrW-<7gFO(_WJ`cRDzOzVYfb2Yh&4`61=n>P)YLWOG0Aoml1GEp8zZ2O4XNN2Iw==}6RXp7Sm~HOcH{ zNtyA)x&_DeZ?Lzg&2DcUI(~lU@$m3v_}t=xV82CWq)}-Ej#=QAL7Uap9{b*5eY|Nc zeyDkC*hx(n7;6Tde#4hv=m?)Zb<@C+*>O2j-qe(TDe9e5okM=xSYaCN?vN>J(fZ;^ zPYh4VW|6l=9_YN4WU@7jS2~OG;=NUF*O||oD<>F}e2!UfO*id0#2q|X+tR(+ZuFdK zm&zzg_jmH7Q|~)ZTNY1+eBS!*UVR7OykzfGi-e1!HSj}E?bGIjmvX@-s5tJ;&_)z* zLhEAF+d0vrb5M1MZv+?*R##35=IGsdQ{F%@{m}78z@cZp)yXV(IIQM;bZkP==-i8Glt)zI-#^mT2sg52A1 zyyOD-_3TNVR~G9opWmln|6;Gpwk=js`i(m_C(fzr88CC2blS+clwRH={b_~s@|0$S zss`N~9`2{pLVj9%^(v-8=s7RTe1%2(#z*(+Yx-GOX2H|LbGB!PKn{(y78}_YFN~M8 z%3tpFH?Du(wUxbl+b7|NUgl8ofZ3A(sJ3*{iH3PaPmVt+czU)hAuJB!Mxyopkm#ID z+#fgLaO@3~WN~z)HT9+IQ>V0k>({xb3=SUSYM(2#s-0!OJE?a03h((_BfMu_dJ<<* zRJDIWr;mxw1I42=WAZj^kD5{!*Qs}+>XzP#So_Oi9+F^;3eYBmJib9_2hm-yXb?NiNJ@=i2Bs@np&2jxd|P-!b|Xc>_(;?l>N6 zxDx6XJaKQqB63GWHw%{)<#?di(M-%vY?Q!|~!VA3m1ns!FVUsY|2bB|A zQr<4!O}Sr5TvyaPMs)I2m3;lIfrkfgO)yLtsAYFP6fCr$C;5G`?8};YW(_yX(=TvK z)V($3_`syI{-`~93nxygK2}l}?`-<#TKCMUe;O}qFYIa26P+uq-=OrLu-@(}hM70l zy6PHVYIQ-MPVCPPSlHJk+!rzQx%YC@!FrEFSBtLiXMISQi|YJ+JN+#zpP%&oG{6z1 zXD^T~g7#bL8?4cx=a1iVe|`7wb`x|zWL>L!HQ4Un6_qtTl?$DZ{SpGw z1Kyz1T^?M#9?-8%OnX{x*#f)2&f#qM<)O=S@A{rsi=F2`cYi;st?YHAUf-r-Nu^P=p#!eM_k(Va_>UF zt{}qXh`o_#_8#3zZ`Iz}E4;q?Y}A0z;8yWr&sAp{I}far^-!kwL1p1zV$N=y+fPf zmaS~Mq~9@trZe=Rj#x~jzymE2;Gb7c3J`-;pJwhHl*@tcpeCA-+Jp)Wgonx(He(kr^!K09ypnU$VjGN!>} z^?SFD^ImkN>umqUjy+?&^X|IqGh2Q(itsPyeKMSQaz#^b z=BMnHgJo4Bc=M`Y|MCO8JJ~m1?Mv11l}AhJK6hU-dp5e5(sE|goj*sn9(bG~p4^=& z(KcMyw}|rMhHp@M-@^(;3;Tn3Oq5a5TD#M1``OZ|A%(sTvDmi(*p0Gxv-98Duf0kC zxoT4T=`9|ulXKRW?3nb4>KF7W2bDBSAV;BsMafbSFgGJHAl5viWMg!Mw8a&wpGTs! zStNQlnHrqBIT0Gs($!EgUMn@e_Exj+iige1HkSUp0eid!J7)Ciu9v6YzuP~%*WGE( z-Brx69+QRzKc`Vbn*A`DF|P{Sqn{Scaot5O=-=qP>A+8G4S$K-l1WW}b=tDG*x4`F zENa@#)PB_3 z8DFjI5YT;Ux9gL3SFWdFT|ndK80p+n*7kI4eZk_$-*20zKdSa~PRNfw^7}3U%Qf0F zf5VC9^#du4XN&Jyja_E9@3eg8z~jZQqHVM{2iZ~DPTS8OIy?EE`@_0sOr4#XJ%jDE zdThPTl?_XGxG2^o82n;Pj^%7KnbZ4`P?ojjz+l}qI{)bEo;T;yx#CAHStVmB=!yhK z-#0T$hvIWCJ@23JYu-*Tn;k9tS1kYBGH_++?r!h4*<+g0b?4t_MIZ4=+W0s}`{}tQ z`PQ}~?-lz;Uw7yk;W6pr0R7AJ691N4%-IEVU-q`n=yn!#Eo}cnNfl220CpxJ89_W0 zN_$2=*jX5AlB>xaIGG1anCWiF&J3;4)uh#toebF00_1<#)T+B-q})`1)drb+kgi1} zakNy0Mk;%ukR{+IE3in4HtmN@m9p>l$NyW=nyvQ#U#MDwwoESO!|I`86gtU#krZYl zO)d3vEK4R5ATE&$!A?=l(-QGCWB*URF#?wOZ?X{)SOuOd1SbJfu56*&mkJ$lSiu#s zHLb6EZq0E^_qd?GmPVGd{Jr5Z5d>!F8Q#g7)jKO6;pdm56afItdGC`Ihh zoK$Hvj6l>Ti-ba0ecq*E8*sq+86UjH>NARA@Gw`CozSoiQ^5jK9ZNC4fAE7dnBgv8 z&G}mw#2$54i76Fhb`!#*_oF+{=Q4kJJUiN*e#=S`*H zAW$e{em(3F3Bef=IDS$a3zoFn`MTeKbX4p7Yu@a?S}+>PKa`t>3I}H};N?64X!x=N z6$?OGMtD=aIo<+44Ihr5fsew+;Aft>-;ejekHdT7z3}4~{DdEkAA@(qJK>%2lkonw z0b$lC%YU1wLB-I;5^g$3vC(A$F(Lg-{=|aAE?_T`OGfg$m=QxDAICtU{trBAlw|+_ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.ServerConfig.beam b/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.ServerConfig.beam new file mode 100644 index 0000000000000000000000000000000000000000..f560de753abe59562614dfa77fd78779903edca9 GIT binary patch literal 8404 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 WoxsFoXP~-<0zkhpV72-%^#1{z$hFk~ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.ShutdownListener.beam b/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.ShutdownListener.beam new file mode 100644 index 0000000000000000000000000000000000000000..2388256c2dde0f7095d6eec875009f77eb387ba7 GIT binary patch literal 8760 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 b0l9ZV?rorP!zen90&3qL@b8de6zYEf*petE literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Socket.beam b/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Socket.beam new file mode 100644 index 0000000000000000000000000000000000000000..685db2c9bd78bfb471a15a763459242cc9d84aee GIT binary patch literal 22208 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 M`z9f&uQ1a80fRC|mH+?% literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Transport.beam b/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Transport.beam new file mode 100644 index 0000000000000000000000000000000000000000..62690f788ed94a585882aeca731454a765e94599 GIT binary patch literal 6408 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 J%ytX{{TF6B4E6v3 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Transports.SSL.beam b/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Transports.SSL.beam new file mode 100644 index 0000000000000000000000000000000000000000..974e2cbc748c3b0c66c17bffc3bbb40a7242173f GIT binary patch literal 12100 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 NDDaUy{DT1SzX1L(2RHx# literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Transports.TCP.beam b/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.Transports.TCP.beam new file mode 100644 index 0000000000000000000000000000000000000000..0f445f70976928ddb520e484f240d5cb6662eb65 GIT binary patch literal 10064 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 G!Tt{#tUL(- literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.beam b/phoenix/_build/dev/lib/thousand_island/ebin/Elixir.ThousandIsland.beam new file mode 100644 index 0000000000000000000000000000000000000000..9337d5c61a121332e7becec7a1856e09c633965f GIT binary patch literal 10664 zcmdUVcT`i$*JwfwNC~}nklvd}M>wLV2MP zp71)-`*!l1BH0MWq< zK2A6(B*N1HjsXm~Zo9&9_P;uhE#*16Av~S!v1qtcm>0|gZjXVxCz&MhEHR<$!@Z`#8b3|89!?pG}zq zKEg2&_W!6x12+Gr-xQ9)pfKDh4+!ʠva%nRZ4mv3+U+z?J~_QxT^z>&kA2rLec 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 bY8d~yb^v4ntOtNDasco(C1C0!5a@pZgcT4p literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/thousand_island/ebin/thousand_island.app b/phoenix/_build/dev/lib/thousand_island/ebin/thousand_island.app new file mode 100644 index 0000000..73d9569 --- /dev/null +++ b/phoenix/_build/dev/lib/thousand_island/ebin/thousand_island.app @@ -0,0 +1,24 @@ +{application,thousand_island, + [{modules,['Elixir.ThousandIsland', + 'Elixir.ThousandIsland.Acceptor', + 'Elixir.ThousandIsland.AcceptorPoolSupervisor', + 'Elixir.ThousandIsland.AcceptorSupervisor', + 'Elixir.ThousandIsland.Connection', + 'Elixir.ThousandIsland.Handler', + 'Elixir.ThousandIsland.HandlerConfig', + 'Elixir.ThousandIsland.Listener', + 'Elixir.ThousandIsland.Logger', + 'Elixir.ThousandIsland.ProcessLabel', + 'Elixir.ThousandIsland.Server', + 'Elixir.ThousandIsland.ServerConfig', + 'Elixir.ThousandIsland.ShutdownListener', + 'Elixir.ThousandIsland.Socket', + 'Elixir.ThousandIsland.Telemetry', + 'Elixir.ThousandIsland.Transport', + 'Elixir.ThousandIsland.Transports.SSL', + 'Elixir.ThousandIsland.Transports.TCP']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir,logger,ssl,telemetry]}, + {description,"A simple & modern pure Elixir socket server"}, + {registered,[]}, + {vsn,"1.4.3"}]}. diff --git a/phoenix/_build/dev/lib/websock/.mix/compile.elixir b/phoenix/_build/dev/lib/websock/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..27c550de61b8b7767ec3e7bbacb0358280d60555 GIT binary patch literal 4329 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

    LFzY7)ki}$$h!-C8f+LWn5QTKx%Yv@ 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Clock.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Clock.beam new file mode 100644 index 0000000000000000000000000000000000000000..94d9a8cb9285de302ab59ff984d2017be6f1ff35 GIT binary patch literal 5000 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.DelegatingHandler.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.DelegatingHandler.beam new file mode 100644 index 0000000000000000000000000000000000000000..8be11bc03b3e8e883dea4c7bd9326d1ff95417d8 GIT binary patch literal 19276 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Extractor.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Extractor.beam new file mode 100644 index 0000000000000000000000000000000000000000..7491021fa6cb938b65bb2fbbfff44ccfdcd622ff GIT binary patch literal 10664 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 N|HDKclr4&a`Y*P`OlAN8 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP1.Handler.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP1.Handler.beam new file mode 100644 index 0000000000000000000000000000000000000000..169fbda04a0282e256e1e6ccfdbe812fa2d539f7 GIT binary patch literal 25732 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 Ro`eUOFMr^F8u^Ss{4biSXcGVc literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP1.Socket.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP1.Socket.beam new file mode 100644 index 0000000000000000000000000000000000000000..2c21a6468af38d8b121a52e3e8e33c5de3b3a99a GIT binary patch literal 4420 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Connection.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Connection.beam new file mode 100644 index 0000000000000000000000000000000000000000..ba18d6b513e27c6ee67e698eb516280bb4ad5f92 GIT binary patch literal 43464 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Errors.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Errors.beam new file mode 100644 index 0000000000000000000000000000000000000000..b88a00f713d2027fdc7ef702c83aab58ce1f9405 GIT binary patch literal 5260 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

    2}~eBuHf7h0Qjf{ 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 A-v9sr literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Continuation.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Continuation.beam new file mode 100644 index 0000000000000000000000000000000000000000..85961255faa0c25a14e98bad81138f68239f3d74 GIT binary patch literal 4760 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 Z?Wkl0A&YpQ5bqVz$d4=r_zrG5{|hCNpo9Pb literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Data.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Data.beam new file mode 100644 index 0000000000000000000000000000000000000000..82c9e565a44acb0ea3925d6ae91a0113867c6c49 GIT binary patch literal 5652 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Flags.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Flags.beam new file mode 100644 index 0000000000000000000000000000000000000000..1de70942e1bdedc3643667721060c4df84731377 GIT binary patch literal 4880 zcmd5A30MHh#W%_KyK7pP>}>Gt9U>_A&OigsPzgtCSgJ@G6M;#Al{;^P*$mNE-<$u&|@#6Sq* zpb?SbvEfwma0r5 zH}FN<>xf2R6f5>&uvzXHj5-dtVhG5i{?rtmvM%~OLkRtd035LeH0x?@P1Dt+Leix_!#z-BR+ZrP!h1?ilZDg@ER^AQdsd z0ZNlmgOzy#G9aMjX+8Hha+wk^Gt%r{3(`z+LauL=V~ie6OS!!c$VP!{a6LUa8kqEa z1h_DZR%Oi2rURgZ{)LSBcM$_qtXBm7`0xKM1r)8N+6)ba>jB!+3@)}+_9z3QqCE!v zK_2aT_DE-=#gZ$;)GKe#$?M*t^Za(v)Zb;#+`m0p{Qq~z@5za21i$?k#PFZc$4W7z zq>JKLDuzc_%%4*eHa(BfKR92ko<08WH32gD_U`}7*Tiq?kiU9O{FXj8*F=m~O0UoK zT1>BfK9<%q9Bi@y?)!QbK{82=scSVD6iVO~#q|YiPlhc)LzZ}XfZ7@}ULyzc7fkX9 zy)b0rdJ^ot(;y@yfKL;&I@4a9Ho`QxYP2F!CpKtAmOZ>)q|OFSEDBHn;%7~`OCS1O;^y00p zpQg7-Mn1{Uy>5S|ES7h%s?=$WWA@Irrz1NL%sKgNRc)}Zq%3+Ek)UU+U{!KP;Jfll8%L7e6l>RadS^x}Db z{$25wC%3K?EbrfO$<{wcg1Yrrt_TWnJjRT&-Sr@s{9t$oD=sFUC|=a`*?K-{`)QPW zpJ?{=iI3hnwnmp!gL2leKNwG9$fVR2%bd34-B{Mx=SuAakLH12^Qr^yH`a3_20k3% zD@w_9H%f({CzSiQ=%OF()qJ}*++$tGg5hVUX04Fgm(8y8vfZ#(9#1$f4GUkS1+&eispze9vnnW*a8sl2fpLhn2? zY*QRx`#@C_=ez$@2Awy+O@HDRvWah)bpIzmk-{*+HmTrCvj~@ zS)YUYr_V-?m{WfI=Bj&ZcM01U30od7o_u9})$v2Avj>H?72dtq#5ob>f8ybu%eH6k zR}0&B-*w)dv#3^AR-3ygz3kZ3B>M)tGfzHdXQ>M{>9s-kc#g;h@14z{~|kJhu6+|#r^Q+Bb>4xZcH zrKnu4Ts^aFx2$@-*f+CgPsF~&^4Lm;{mJFArSY9{H5d)kMzAHLOnACa1RNvy4e`N0DB$A8eXZekdr1=hT+DVeihAU9NsX zw@WH#lqPLlz3h^`JzAhvZJQlAqgSm*l))pB{bA)sJe|eSefRB^%PG>3nbBJ!yc?m5 z53m2dsueAmw&_A%_JDQG30pbG_!vjM!utJ}S6| zpDw@I;1hp6RyE)TYel}h;_!tBz0W%MCXRi7r;DoOVtxhDQR^}8l*{grx#LuMC-*({ zynMg+#iK0GZ}_h$-$~DhP4HdcHC8Jn!4&CE&jIi?Kx}-y+R1Un3zMS1V`-^o zvRhm}qUCCK+VU;)XBrQm{m$R$*F3ZLtW!&~m(QIvSw}{>9$!3KnkBi?Sr>+$8s~Qu zn%q>>4MiHqq=Cu3egT-39W9q0(o|fUhU-O{ffQiD25ZaxjAfSqB+cg~GZ!HV1t9eT zH$C7?1Qft2%Oq)0mSt(gYC>xMvXT&#TC4--ub+Q2-=f1*5hP{y4Ne;1+@dzWl}d{d z>o>Y!ns$#d;JO9G1n#U}KP-ST0l;jVi8e_#$u#r^)Nm)8t-xdIU=43c@Lq7io D{p~Ws literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Goaway.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Goaway.beam new file mode 100644 index 0000000000000000000000000000000000000000..261a16bb5aca0d797bccb77aec5fa8e0466f3d59 GIT binary patch literal 4764 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Headers.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Headers.beam new file mode 100644 index 0000000000000000000000000000000000000000..ff5d2363d99a08ad3b36b54b21fac63936170e1d GIT binary patch literal 8556 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.RstStream.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.RstStream.beam new file mode 100644 index 0000000000000000000000000000000000000000..bc1e966e5c1ec1f54851fbe1cf6ef9716caab169 GIT binary patch literal 4700 zcmc&22~-owawg#jNFW5cK}T^_6iC9QxS-(@VF5XUvMPpJp_Sq6r)o zNHh6-OeU7|`S}8Zz_A1sfhrY3xm1Bk(0mc9z)_)qKt-jfMj^)uC0{D?SSeP?gajs+ zDdVLAAud<40Ww}H7pWv@ypq6GLLwf;B?8%;XLC@3-%HSH$>;NX>3n|aN818rDrr29 zic~_hRD>!~91}>eG?ZpDknMpuF2|M43S3Ueg>nfWCC3rkcQYzes&JH#Y6L<;lB&RD z1Ud)B^R-02P%c7O0@Yx_d`yJMlW7bw=?A_N=;{?y+Q&}XVCOHEvN+CQ!Om>w_ymDS zDp1g@`V%pk1e2j6zyPLw8hr99m<;&?j4n zX-wB_zw9Vg0*c2hP_5419(ce5W^;oesu|4XGQm578^i!jJU0jdje<)7?@TV$3=qQ+ z2wthjpxeXwxeN;P9t4+igV=z6N;_o0^^9?B(gcLT*aJCOLV#+P3x%^8aC0s~VH%pU z;b&v%3^UjWf^ymVfRD>4q*}5K2UCN%OvntTF?P{S9oW>vbW^HjrlC0vF| zNjE5h%C?NZ$27EbFtjpbu*sQ-p*2uXGbQD5^&xg2dGT6#Omgvtwh&CyE`Y&>X@h%F z447vAWmz-}E!GZ!X_j7eYw835$QHVlnI9E$@S`%Qn{~~Adc=WLXT@M6TIKd;;fx5F zX03?R>Tk>!q$gw1JmrZoK~85vJl#(<1^Tt_=(e{jDY+?Z~(`MqaS667B&69a0~=jiCCptus`?qrDS<-!I6 z^yLa|E+>WPsI6skzEUAj%RtK1o&h)?WLqJsRH_ZcxLgX*II1=QTx18(P=x>>i~&NR zBIJBbN*)tQK(3xruEK?AG8E5>0cl;y5@7oteK>ISuD7sy1;(R}!t0Q!ss>17s`!e#w><^AM9DMl2=D5ZFKm2;U zbXHRP!GCP64BEE0d_*A2#OvUiUH6ABuFI8I=H})4%!-yZvcI#ipl_+4(NSxvdASxJ zRPkUF?l5m=$KvoJW!&;bj4hX#FlP;Q(m^wmR!jZj`qsJ323}}}_rz}1yyr{IhK|fB z8_%>`#F}gT>QvCmf9={YZ0@|iYXoAf+7(pbFybzISrdD(d+d{HCWW)?4ug_5;n1)p zMdgF%wq3c^wtsBE!AYvMxsEHc&5Ke-D#irut`danG=$1V!pkqmxxUD(9b&MczMYw6 zg=gB-&eEJK-gEr%`2xCeu=lWwnP~@}Mm&=oT?Nm)Udc_=*^+Z-Q;w(2t>Md|pR5&a zTR5p^=7~_52X%uJwo!3?_-rHG?Sr2#JuCJKyJ>4<%nmCg#QP7uMUG*EL%i-4ZO!4f zPUyD1;Lqx$x{8k8YYYtaDz#hTghxL#aQ*3u=Og#F_R{Nt?~~3aPYbwod}V`2+>XdM z*FraNuD5r0&&j<*4=dfaYRw1t%#s8w^yboe>zAnSpAB?CR}PPBU~SuD@ophQE_X_XxYZb>ExBNh`J& z&q-T0qrBsn1)ItmYpPf3Q7lef_E}QKYzRJU<@PE+YMghZ;!U06hRWD(Yh7r-6-DE&Jgis< zH-~A3ok5M`E2nNxZF*$(&My3WivDc+LPi$XNWaV8U zQl446HnK4Dd|uU^LBc8Hp6@Ez68w4*%{(uI+3YP6O19Ee^U$I)S4p91Qti9;466+-cj7KvtBZPqJJ5+YqxWtsPVaheJglp&;KBd)Dnjd@Wub};`ldRhF4BfnW{`=iO6>Y!ataq#WTA+^d$jq_JkDCuaQcmk) z-5PFtl~|pAk+s64^Bnd-ZIHw&udOoCjm7b{6Z4BC;Ru)1$OoIBNwc#Ia1r6UL7JED?3A|Jv1uzFKZ&ZCi%hJVg`qr~)JM4GF-Ok!x^R&Y=ki!`{vFU#IiLSVwQ8P-;s1jOU>FSg$ zK6+m%KVDWBKFNrwj`sYw0bqv7Xd3-;~X|bhsE9 zGug?bG(hZhX1!50zG(9j`z1bC6kU%(z8P@{&#SmP-QWyIb0dqZQ{oeptw%dL=sVN8 zs~II`yC)zQ+9vTV?6%GR_1xVi;t#gXZ`01*ZMa%Eva%9AR`PbzvRF+w|Jd7}rk!t^ z?(p|s?q1x1JDu3Dvd(g$-pk6Gtxsql+;fiF2MqnOX0^$1_KUjJ=419fv%LEHwofAJ z!6|$|$(!2j>$byr1UDvo$5`{2@B@+VTSHrFiFBoE=#8BB!jwU`zkh9`MBobcEFdNg_+l zq`no}Un|wJCMAJ-;;Yrdy>kXyt#*mMWPMSpOd!RCY8?W_r61k!6;dm@e@*%qvVqUF zt{+Hte_ZcKF99Qf%LO|9i31wb%c4uD6cY5S81>OPkT-R;b$C**)c%TLt>^m8@4xhc z%<7N(THHX?zqDCIW{sR~k#Apr6&0-N+e(7yqX*Jy|U literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Continuation.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Continuation.beam new file mode 100644 index 0000000000000000000000000000000000000000..a613eec3128f0237538038913bf215b99c0304f7 GIT binary patch literal 4572 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 K<7L5g0sjH)CJ{UU literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Data.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Data.beam new file mode 100644 index 0000000000000000000000000000000000000000..e86fbcfc044c3815d39dacaff65c27108dfcabe0 GIT binary patch literal 4828 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Goaway.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Goaway.beam new file mode 100644 index 0000000000000000000000000000000000000000..00ff4d5bf6f8af6455b28af91055699026149b5c GIT binary patch literal 3732 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 HB$56NG&=X= literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Ping.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Ping.beam new file mode 100644 index 0000000000000000000000000000000000000000..f90056e67bb36e93d2c2b6e2fc4a6391a1e5eb21 GIT binary patch literal 3984 zcmdT{dsq`!7SCit2$9Gb!0;vtqN|kztXf_gKpp~CM3f?wVMr!0A(@FYlLWM&mBsp~ zU6j@q*J?ztRH0BSin_i)QQKOq_}Z$ierjpOw?MVFW$!>@ZNJ*O-?#tleBW>8-gD3W z-E+=N&N+#nnHIw1xh#u`i=Gk9&UuN)gTCnR@4qCP5~nAM2s$_hBQ*pYoS2@T8X6o= zV+K5UHck_mo>+k8>G3~WPbJ9w#VAUUS_(z27|YT`o{7a7qna`p2|aGr;6@r(V=S&| z!i$U)%`&J#GqFNzBGoKGkxZ@uQ_~cq1j1Ycr7`L8T!y7hYF0@S`dpmWV`To_e4IrG z7Y9z_4m23`D5}&_^kO4Tv6Pz9i-Mld4Uylo^*DDb7@NppiQFPEA6iwA)dInbk z>u{0(vpM4RSU#gE)e5^pDwP!6Q&kB(@W@pqAmCwC z@xgtu3U&pHFUxsQg%FX*AuC6DAAy=8;OjD#7&#*zb_6=85_1G6Rbp50xC|8ipu1HF zUn+K!Ln35-FT9~Q14e+p`vmdufN{M6V%LZXy@83U;3$bJB$BGc-ma=Z*ikOuC~<@3V!s#|fgzDAVnk|S znF@1*;5e8MOO-&`4N>ucP$~8odk2aTr4kakJIldQh+u$yIA_-rb{QlZ&aqc12gp5s zC70RBAse|Ikb68u?gq$#vz}ah#3Oi+$cu{`qJl);gCYbH`TQD9k?(*Myd05Vl*AVj z`47wkz+4_B@rP%#bUODkryGpiQw87vAORQ(zz6UI@B)AUd;oj_I60>y2jJv(eJHNz zH$2?;Vc*A%xr^g+1K>EgZ^;FK(-{K5$+$5;g~+3=mkR2X}q}-y*Vquowhp zPEUSU7+(i8hL;(@9oe({PR;&DLcP*%vXr%-B+oAZS`F93i$Qw}iF zHuj4K83&9z2F`@RDX^I#x$_|s;gzNd%tzlBxVU@|{e1PKO*J~siafjkGZU1F9?-Hp zXVT!dK5^%XfA-Y#yeyo3AZ1zpA_M7kyx8fa7I<;)iC>OpoMu46Eabsq!Ad~nNErtb zC})ho;t5g;W5g^ZYD>H{3XD_Z3}bQ9(v$&+Y24xhw73CS!?^@x843iLiKV!F3UV{& zrH}!!QR9WYd5SsUjWG%hfsvS&&?;tATGj$~DVPF^VnL=HkDGClRTv8>oFs}AAk{O9 zynz~`&=Yy~VFAk;Lls)CoG6T7S1?|r<4w!UC&1^TE=%R{oWCtve`f9s>f$8i(yPY{ z@3a#qd)Ah9#_rFZJTCCvAP28N$g8J7{(Y@1Z?0FSW=tCL;q~yi{)GwX&ZgDX&8w45 z(&Ll=(KdO4PtbFFEN-kB15 zcDoP0duRCR`@+DSdd3p!JhkgajA-&qQ+gsx^#%Cl(WRe{+H&pAH-}Im<2ud9?QrDK zDL2lC9}7_~KfAW6V}9AE!p!Pf_Y4T8U1Ey!PTWr}axMJi-RSJwh(^=g+K?rkbQF0Z zzV*`I(%(XYYO`7&S>IloK$7~Lzn?8$k!*4PIBtcDuYAAT?V}>~M<<)Qtv-k4l06Y; z#JjS$1+k@`k)7*(UhfG^^maj|lE~TvVGgy4?k`MJPa1mfV$ToQ>Be()N89Q)>Q2A% z+VUd{f9g2U7Mbtfu_Hw$ni{cjN9>4WH?7kB**yjKD%@VIk)$lh%vqUq`_yf}WbCuC zYHeamqsNwg&Xo7kcHfQ@=6$7Sqy00K{@*UoxUs`4{%eX|@KSxJqm!(?SlHlkwW@SO z%IGE2JTCOz9J_3DxcS6}(_>rOoP%qZChjl~sm+WZRg>adozsm9O7=Px?aAPqXEh34 z@AgEDy8OM7fA)F{Dl`+Nd*=wvo?oxhUd}{?ts1%Sp6}jx{6Xxwn}=3)ZYuowle!0+ zF3imRidhvkHp;1adrR}}9M_HqTdwq=g;#?*xAvzl@=UJCQlh5V>Tf>rm(s+;a(>pe z0{w-#jiyasLKBN`bob6{u58#D@n*1lO=Nw-lvmzg`(4beYx=Ibwr=&S50_preKFPf ztE~6lpK@;W;rfmVit_q~cZ$a}AF9i~yEVqIZyOmx9)IOho#)w{sr}Garki9`z+}H=nYs+$M{N@-3;v-n*IYeB$SX zmtWP6I<|61bA%<)!E=`UtIZj&FP>haVB0tUaPZd7-TPg_D;J(S@X+O2-_3rqa zo>>m^zR4X?iW2^)W3`Rly%$1DLQ>UxVq#Oj9IbI*`^za|+FL$vpE7$NVHV9-c^PT% zk|xW__Rwgn)w-mCy%Oo6nX9{%Xz(-o=QYLa(ocuJz6#HzJ{$Y#TbtRBGPhSJA6$1Z z>El~#g6^jb{i){shZk4REo}`uGvi3u;cvPR&zxL$a&hdHH@>*3R8=N*oxIfcubch1 ze%w7JO?H_r$@oP-=9kA^imM++onBIL@YZzJyhK*g_c&8B{!Ri3d+C=Zjr-|n&AEzb z=Pmdn2Ul`kB*?CDMX`k-SM`;F>^RKU%c%=+bsEk{jaLZe|en9 zUfure%;znipt1mOo^ApDJShCZ<=+McHekkqh!wyVp;}KdxQ0`MEih=*pB)zg*Rks? z;$J)YXY2k|3@whfrrsi8aoS)HjonV0^pA`e=n00kSwFb$z?zJD{C5se;2&pP30Ps{a5v$t9Zr literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Priority.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Priority.beam new file mode 100644 index 0000000000000000000000000000000000000000..f1cf50e7564393a511e5bb899025f16dd6427c55 GIT binary patch literal 3720 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 IkpmF^Z?NC{5dZ)H literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.RstStream.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.RstStream.beam new file mode 100644 index 0000000000000000000000000000000000000000..ed0f57540f0b96b1df3799870aaf60285d5cb9ae GIT binary patch literal 3552 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.WindowUpdate.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.WindowUpdate.beam new file mode 100644 index 0000000000000000000000000000000000000000..a1a0311fad96ab8b06d58adb5492bc0b4a85fd36 GIT binary patch literal 3620 zcmbtX4OA1?65eGaglJ%a0EO@qfnybw1ZY*LXaM=q#zN)K+G^M&3)zs(hTRRp`pN+* zSZh^|6%`F=rC_z%2HX0JzaTA&t)f1)mP#r3527B0%JcB<2C&-G_SpCKoY{NtH*@FC z%#9nP$H6>f)cE1YCxSW8G$_1Q)Gjf3&7}|lL58PXU+PMlu z5}1!#9wJo_GZ55MB5)6!_%Kl5Hb#c-^px;KawMoq=rY9e5Jd@HVZMu8;Neywagd;! zg&v4R;1z?Qh#V2YeAgr#9AbyK%G_YSJ1U0&C=>Vyyo30tL;oz0@5GxpF(jM*`Z zrbqzOxY-#7C;^DQ;$SE+L{)Ua{ql>;k@n5CWtiHV3KAr!mD@Jrw4b>y~A zxu@OVjOQBfe3y62sd4c86SEKO`8sFnob?zxNjh!puJyZOW(Ni~-)(P9>fB|Sx#5GFLz7fG$tk^b zeQxuyg11*^mM4gVK8js+FX5LO`o@MGfmi<#!19K#hK*49R+rL`r(qLTQ;w?8Ya z7C#mZKC~{tLvG}yS1u;3g4PqI_h(E_ICL=DHzXly=bN`Z{0{xL?8xAxzP>4^!g%Dg zwuu{7FWdClruaB*_9v$YT9&_ax%*?ws^#J1yt^KMTfFy7!}X@v>PqV1gU}h9VyKAu z^1U*@Bdyt1p8@UGj+1L^PdnWzwD#J+J@Ms9-!C{tj-6f9J?U$qwITD9C+cmg-h02^ zyxHh9aD7harQcqkrc}gq7xY`FS2uX4cNq>#(77X@lL!TczI9lBk}qsQf2vKY}135CqI>JR%mWb-gh@?M}5HZ zRZUGjQ>WhD>2+C{V$5*+VXo2Aa(hwN5}D%X@+(BG!_0sIZ}Iw#^NOZ)Bc^KSFQ)YF zZ}i+fgHbe{C7UiTy*6n_2K;K+muG5@7RXX2NM|bhq7DXjuXXC{sB+i#6m4*6{5 z$cHUI5NDn07d6(D?u+atHgt}_x{JSB$j&>`MIBjOLY+ma8IT|&xo-`=nr|VKo8M@Vp>uz1E$JTp;d!@U z*T$`z3wa$MoTvAUyZ33;D|LZawg(>edwJpeg;#Ezu3x;u(!cynMb|*~hJny^=htlC zI{rZJrO5Q6%Z}aU{;#{*m5<)^$q~hy$E#Si-mCD^)gzDUJ4daRtgol0_vQYHHlM61}k2Nn`TbHz=DJ*)6WSeD|sb~62nsi-vBDvY< zueUDHrJfHf`UWSYr{>H_s%F1fR9DX&oxU9{n)(g2%yCa;S5bXg?99{R@`%=xNfFz2 zghVXsxBB&8_Hf@QcPZ#p6vG?WMHct?U5oRtpLpxhtc6R@U5LH+)sB9uU3olw$sGp_ zGGE`eBE0@i?DUXe?c$lV_>3fc-hy9d20U^0syeoF{9%}}uWW;$xct~0P?q)-gG}i% z+_|Z>xH<=?m3g5oSAfh8!wu?ixd4(+D+mS;i69J-4e(K*-vxai*agZZHw?2KG>Z)w zNvMZ}c^FHPoV3XR3c#=eP)>BZzvllQWJp(9Zl zF>x6EGrM_uf?S80OYYZTS)8RY_$^Q#1I^k>p literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.beam new file mode 100644 index 0000000000000000000000000000000000000000..df6010533ed3b9fe85d8543dc8ba60c74abac5b3 GIT binary patch literal 5700 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 Sx&R-m1_b{Wk<%C@!2bv9CXy!r literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Settings.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Settings.beam new file mode 100644 index 0000000000000000000000000000000000000000..3ccc6458d0a4dce5aafbb65d126a6b7445d6a722 GIT binary patch literal 7888 zcmd5>3pkYN+n@0|jA0nYnV1YEhdCfQR0c^zPDKi1%)G;B%uF-y7!@VbSxH5bBHPg_ zv75Fi(z&gywAo#i4z!&p6`QSm&pU(I?f?Dv`d{C7ecyXs_dKWj@VoEldEU97=barI z!N6cFulV}=g!mu}+%XuH%%P#7TR3Zf0Y9BDq586gTs}gbGk<=VGj+CvoeEPUVFcj| zlcZTJ7GKB{u~=nn1d;F)We6-4b400Pz5p)c!eR-`VIwfN8cr9BB#4xi%AK0elL6*W|lk|APj>g5|M-~T0&=Y zmW1)x0x6s&9rg@o_BHSQQ2{BA$U~#Rk^)mKg^o_KM1+VqB7w45Jq9(-&}j@Znu`zf-PON1p0 zvSkIi`~7RCV(H8P3`D{*nfl;2j2S=#MFKN`3<@z*1^i|)ArcszN5)|D)rkZzY*{f; zMgI{7Tg?ohgYia1lZb60PNSm`$V6f#hGL8XqoiWYJUS8ESxi>Z$LrCtuN?>mBy1)@ zpH7DKNDc)3Xc7@iz>LVzD~Ti^M}dmz8f5wyb!3G)CaIXIL1%gp458`K5Sd_T%p?=^ z=ma7bNA!g-K%XHAZ={bQVR3q+ZDU`E2<=u22!n{m36J#gCU{f48APNLzk!U&cwkpvA)!kCeK#fV|CI0(YxjL^xzTVk*{V>F;dF&1Z{>;f*BehD+qte6QHt;krM zxd*`v@&rT%9#Om~1T$kM-iScO8xt(BI1At$1#nOR2ZiiQ!MONRh!iguf|GHh9>HNE z!Hz+gsz{^p~R5RXQpOd(EDhLt>-Ffj%L-jC4~I?7x2-|$XUVzM5^ zWb;)_)?+YLD=<+;G1jbqU}j052~ z3c~KIARNblz!4QFoQ4&QGfPFy;`GMPPs>=lv|>6~l2gD!r5_~FAR_4y2_l~)Fi2qe z*khP@2Xw_SP7<6+#yAq*5l7F$JCRjzL?Wap$wUgCO3xw@^XaHoh@#MK3@I9@2mWuvhJ_2;A zRH1F~pmu|E1mIT%L4V{LT$sm}2@tuOB8vb89~N-s5XdY3!T^E)(UD=?NV1Uvl(;MO zLCGp|{FnbwHs&vFENE+u$tTzlDr=OJ3Vw;7)spHf9JsAmFU-9)QN~k+J(?bT9aT>>lt< zR;*EU4MJ&BA-WW>LL%lo_D*3#&5%{P>mDt=>odAjQZRmjLLM0XZFEg*q`?v?Ncxvx zAP*`XD9{jz6^8&+iK^UGC}K&)Y`GAmtct^fgatBc4lI?*HF*+ID(IHLa$UfMR=^l6 zW`hnL(7~1=A{IXtJzt~%z3NhtOu~VeVB%>Dz9kY$B@-ArCHMyH?j@i0_(Z9Ty5&uXc2!7<=UXnCzTo}l z<@siLuD0JNw^#H(emT%i>rTDrbVQ~n`KU%|cyQ*yi^!vMx((XpH@P=VcK2P>DPDUz z?MRICcgO;p$fo0)CUhjbc3*XEY;PUZS?gw9we5(zr;WLWW%z)3f}L5<=dLGDE*sy| zH8N@HVO&_~a#LVUm^xvL-PUsh^HP(4nc)wqo1`?~KjCpfbzyZ<<-uqAqGqk+&if0e zmY2u%8@Qibk-1eCdUx>QIr~eGjT_1x4kT$roPJ#p9JyRe2eTG$?XrdKLl5&|ty@2* zkskcLrYbqVFwZF|OLjE;_SCAtU-1?y0hhUnIK;fw+pNvdI=gAvMy9LljEotk*Jg8# zv>D$V%Pw@Q_vLOYSfc)2*Ub4%xjfIPE6Xmes9@i46+~mhceWk;bBE__=ybm>ZkBa~ zb*R^1Q0o+mc-`l_X1h+iI5W+E=(Sm3PtoHOC$IH%*RlzBIh^fgNHB|S*YA5-A@Xmv z%yGD<8l-M7E`KqzZM(zaW8Cr=LssD{dhN1##`K$W-o9FV;lSZFg&p&+G~cZq%ssx` z_C(@?pIstunTM3GWS2)klNLq#bsx8w3BA>oDRD~cBGv~ z2G=xh@MbO2d8KhWyKi-!b!haQ?YB%iXZ^mU)xzw<$D)dl zslwjLS9^G+22U)u_4oG=`1v19W|W#zeht}GUEAsA>vOa3!ngDtw_a?F314=gJ>!!n z>yq!wpUNt^)30gF^S3lS>2Tt%w)U+u!zP;&w+XwO&u15%%UyKrqG1{q(cmElKU8-G zc^+HPaw78BW8Q_?HD!4&_Cc|2&2yqEkDE50#!GUpNiVwIkiIu-T1Hx0)pcCNXsx%OqC#U8ufto(gUCu)(`>YujtC(y4je~bP7Dck6$ zBItJGMBSTVH8&f3)ciKMs&Goyb2KV463?~z*BtgOYvGg9o+j5Ue!M^%_Gs9+e{rI< z)^g%OLz;=M$@$|EJALOTKZ*37U7q2cBJAJPwrg|L_Sp0TyF!+h>uT}nx)CnB3i&>s zdj7FTgDfu89lz~Thl{`5ne@W;^i zd};}@a*lK89aCz*USykn%ZW3uU2e?OF?Lhzy<`Xi?Avd`h3H%2)cRIQR9w>ptZ z49F{{htI5YTGMgy(e_^L=awPQn9WOcIhUin_BMNlt{i;*`Fd%o_fYRS+8NgLuDfp@ z*BrF(9@rg2EecZeyqx=U^3lbz-S%@W-0pPgo!W6Ee>EotN#C9-iV#JgD1--2o~pgM z)F-#}{S?1HPJCBe(-s<8y5QP0-rnnFi(Yj+O7yyUW8)c|D4@?|xO2NWHRN z4ZyireUCVmWCbk$LIx?pl& z-VZn6u&RQhQ|cG%e`tm^osA-<>Mq4VKFuYF5T`2SG5c!$@s@GQUByIbt!*8)}-y_Y=g zB0Rl$z2rt|G~CSe338PFFyBnQM^Zj@?P}T!ZOCz{yY`QhOBY-WD!gHQk#iEFt(ufGsqI_Kq5>!p|TW>u$_FL9%8xQs9QrQ}iix4@-0?Mb*g zk2htz0zE{%eU?QxGU`o>YUjm0eiU_7wQr{Jpv~lbc>3AIbc3pE4;aXcK$`!GO(bWz zbZO~z?!^1CPqx^u>f9e?|Lvs*cb9ZHeh6_D7P4ASS>@*a`A6rICugi?TFOsln)|PC z4Y{bjt}fVSrj7NbA63q;4@jys-8Zw-xp-6Na~Go9TiY}h-39LT-NH{b^?UvIN<%m0 zaN-9YoIA}fWsrJTNHYeum1peO;{&&@KahH;b$#%Pp%(u=1y!$fiv0KVI%%o==IVTE zU2I3@Nx9*(Q}5r(GFFC67_dGRIW;or#k!bjQ63;Mefi7s4}q$iVz;JjtP5GbYi3mM z0ePUVR)5;<RGfR=yqDtsn_}ebt0W|xRG9a;56p>`L~;@?H`FL zH9N|B_9lkZ=>>T#eXecRBB9;<(BP!s(Rt4=<-CRpSzY=eDYbnal+*|QBrRDJ+`mQTBL0t zXHBgA#ElIlu2rjrzlOc({3$hV^&CtI#kj|$?d@k5mfnSpS0*1zAa8WK_LM}mYxVQ} z)wOr4F5e+q-GmSACbyVP?D3nL$#HKAefMF*^yI$cp~^dV>F=lH+uITU(D&j@m>o&* z#>Gpz&ScN)TvdnF4t`&|ml5FDa%rF2A6JO0W+2Y^>>}zky++pu$jdb>TH5F3&+3je znDzX)Dk?(#e2Bm0Po9=}vVl$6t3Aw?c<#8tIOzS<@i6pl9Mj|DuEdIuIk%6CsXM9!n?41+)iZ;hjfZbP?bYCgG_vf^B)1ya{Js#^+Y}WJMR>-r*k;<# zTd8*jBk^ty-B-2iElP~~pRB9IVb93lMy#3X=gDf;9#~d=U0O20+gV&?yYIpNTX1ir znQ44>XO6|sg{R`^p_T8}?auD#zWDLonFS%1FIS2#+-2RX*?hk%{qeoyU3n6pDI(R! z!jMTPycTvmnEv93YV)o0Lr~s(V)iT%M+%Z<1kDvy_NDLHxh*tQg+aV1H#Wd_J!#q= zqdRGrU0wzh@=?y1)OqJdb?Je)!nE5ui`)LV_ewuJc(djq{@`Huv`h;4tCyv0f39y` zw<$L^$VE51GfNyO(BWPBK2jJx=Vth}XtQH3KG>aYS{!MeC^LkCJ@B1Vz2!!nFHU;* zQ$!G%p%vd=>(4PQDkE<ZX?zzUc^|329;t52_-FMc5l?}d! z!o12#j;{>U5N9lJP|@kR{P@tr&XejovssM;TQgh=Ud!>dgaf=<1%Yp{~8iYiUr z&?9-*G}rElxi6%1?zg=H+^27|j?CEF6uj=~QqAMJ>OFxW2Mj+q#n1+ci#}|;`^{bb zxH-f|pLt7WtvN~!h_*k*;WnouE|%WY@8>cNUn8Z1sS%vl01-qRT9@fa)D82&(ko<_hC9B__1ge#dKDL)B}sDUpY-~$CJm#mU9 zJOu9Rl|7JLog)xQVJMGD9QYdZKRC9hd^s)u zYdz>8J_S5~a}%qS`I?&w-;~1|++{*`DxV`)MPNzlu>XJQRHz<*P4O>ugJ3IS{x#j> z`;;y9L_Pvy%~l;h_*F1U7BxgB7QhN4$)l5lHWgPlU!NCnxAFgWVuxKtCvcoQkkZ|+ ztsFJQH>wn+pROCFnvwm7&OEs12?ihXz*brWXyiffP0{;Wto{j215G1MbImZ#1)Bbv z(>0wn-84Nk9W<$$lQnHLCusU%tpEKz3kEZPnHaTU2ME2-Rn;A$lR-K5!QwDhL&^>& G=Dz?1^j8M} literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Unknown.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Unknown.beam new file mode 100644 index 0000000000000000000000000000000000000000..a83cac76c42774eed1bf45ea88ea1cd6a5e721a1 GIT binary patch literal 3980 zcmb^!c~}$IbCVDV_Y#m0L< zDx`=SAyAP5O-G_-3ekMEN+nvLz(vv=FbfeWg{V}ZS)f8Vcyh%%S{Y8hZ}swq`vUWP z`M!x_kyI&CMI!`(6AYL4MNmwEVu%!ofyu82uRQ@&KoAs;OA+A57=Xe6$W{r!4S*#D z&WET>FPOp!p>1F>n10z|*)du%Ld0fjbF=jkRe=<~AQGZEQUn4f_(lsNVbCQCA~~Q_ z38>(^R6uhC%qR{-$uWm*`%{YZVJh<$M5z!&@&UiWFoY?W;2=I}0tbe7LEbC~a2@lZ zC_YU2DW5}SS~&PLh5@OB!DW91CAF$@-4u^d6ILvk!f-J|{~7zGfQmq3SH8 zh)kqaXmm6TRp{t46j4ZZX5_K`2%l~^?jI4bd~*XnB4lB@E~ITE4K~q|s5+~+mqP@7 zFs6X9^*h&2WJb<)&QgLe?9_8-%p@_A`Cw^vP-&7G1JLAI$SAY5$bWtz%=jP^}W_Frg_^5<(S$OAxhMXDK6aB_I=s&K^jS2;dzO%ln-k*W2K-X0EDX`nrTwV&9!n=Yp~i$z8=}^bL)YugX)#}!0h}&}64bnPeO6SD!#HMOo6iKz=CWxA14VfjpMNU~PxCxr zeaWq*gS#H zm~?jFoY|H?W)^o8gcjG_-dspU*a(i_UvKz9!n~x|w^dJU`9{ zk6&B9vY}$O#P3pj`yd_X8}GgK`EdmYYJXn5V}(!MwJ&RaUNNaWZnyq?cY&YRh>E24 zwQ*x@2h~>j-e$PH zL&jQIT)fvgMwNT}SV#6my)5{Ulw-XtRsOWjEDuVDukIJN9X~ZYcs2i9{ov$A^?~OX zY6GF*^rN|71VZ#Ht9QCh?YQZpy->E{Y}1aK8S4XzI-FHYMudp-ulFWC-n#Sry1$0b z-O&}8wSKp@#ix0@?rGwzUr#>&Bf+EU+7G3F25yWPUwI{A*S*5{%O%Zx(fX9nZ8!et zQQy=Lo7{_3zATBK>R;d0QW7}Le=*%MZSad9XDo9X*p?XGIeA`3dQDlkLff3M?5CB_ zp4+rmF1&Q<8X-@Bvvh%SE&2aiZ-mBI_)Ii zW_f!|_3$wl6X1HzvH;i0C6L7_2g{NA#^jDcf2qm`&lv&tZI<#~m<0#cl^m(|_~YQc z_AzmXE_MgOZSL0y&%=WmnUXB)ldkuM?j6>)C8x-n{r!WsE;IUt(gJPWfyf)D-TXN* zb*bq-UJTD+54&obGaX`|G|mf1El9C6%N}-p-Oz8d?ed)`u_sHQ5t{6YoNzPe8|(~RVh_)w_gpOBQx!At#t&nTw-{e#a8jxw?>qzf>S z5|scCAcWH7%nyhL)$i9}AJ=WDGeJz>)BR8D{a4xtb{VJ9HCmMd`5@@zkZR=rQy{5$ z@_#!pMt>O3g$e(^hu@_4ZIq1!5KOXxniBi~g6)I=c-^c3V)z$ehFZEno}a9$pqZem Q2Xn}IWL-+J?}MQK0lp@74*&oF literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.WindowUpdate.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.WindowUpdate.beam new file mode 100644 index 0000000000000000000000000000000000000000..eeeba80d375ff0ff8619852ce6f9384e84073351 GIT binary patch literal 4784 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 V#AIP_N9^4}uoz&|!S~BH@Nb|shmZgO literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.beam new file mode 100644 index 0000000000000000000000000000000000000000..44262cc1142f3762e9022adf05a6999d5498dcbf GIT binary patch literal 5956 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Settings.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Settings.beam new file mode 100644 index 0000000000000000000000000000000000000000..9bc01c26aa37211f51f60f19aadaf8068f7e4fa2 GIT binary patch literal 3464 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 L&w$4aLeT#K(_Y_; literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Stream.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTP2.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..32b188e2349bf96048d7c68a95a38fd43a6bce06 GIT binary patch literal 7204 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTPError.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTPError.beam new file mode 100644 index 0000000000000000000000000000000000000000..6c96a869129fc4a9ddf20bd4e3c9e95a73f734a9 GIT binary patch literal 3640 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 B&9MLg literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP1.Socket.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP1.Socket.beam new file mode 100644 index 0000000000000000000000000000000000000000..006b3f42f2fc0d655eb673dcb644f09fd0b2dcb8 GIT binary patch literal 41640 zcmb5V2|QF^_&@G8mTPir7?Gt6Mnq$s6jEbfvac;<9lNoOC8<;rl|re;UP)<>Bxx0u zR+1KJv9uwjO}pQ7?~IT7e7^th|M&BH9rxVlJm)#jdCv2^&obv)JGyn;{QSxTxZL>gz(g)PAvP!`IyO9tT^`Jijb{f1aM{7f*(tb$1i$Fu*|{N!oFHy^ z3@5=qIv^-MCP5d7{?RePiBW9-1a5p{5LcHI9_7!Dj|$*~z7J({{rH7MOL&9Pu~B}0 zx*;*~>9O%K+?b%4C{*Ep(HoWjZ{e8!=#=0Xzj$^)uwPJEA}5j^>=zus4N&$E4Ce&I zFLz0ZjSA73k$3m>3emjz1n7fV&G}gIt_B47XNmFgqwFm<_V~NA}k<2Ar~wP4g&8k0SQ6j;jMr1qzA_&bAkdA*eK->ErMbaIb2jJ zo*kFShEWpe781^m3Qm9#it&pIh!17^2L=R3vX_?=8W7eWlf94~&tXT!hC>LjgSfbV zLi6c-zL>Cb!g>i@@bQZRlM&u@T%eg1CovjgAPG##W<|%ugM$-c1M-prqQZm6-EU06 zsBjKj8I{F*@Fz)NO@6~*xr>Ab0*+W*J_HmhJys<#KAhjV7*6POHis~>KtJ8+fLN3w zaA`bJqu3Cj<$kzjA@uzGzy$+>b0gX8SkN$u?Gh3YmB5aLT7KY0sH~u8e*lCP?yaqU ze(aPWHh63d2V{UO_VL)L#840$z)eheKc?B3r;Uv--@e+O-0-Lbm-v8i7(OZu!wRxj$k@^+InLdU6c|A;TFaA`=^KHcm;vm$&Kj=?Q>wj z@!klE)CBbeJ@88o$D=MhLBI(B!VZd5&W&ZW@+?ukd_KVZv*bkAowRIZkXeJ0T$;l%4y}z@W16 z?1Y%8B=#5!Kp1#GSNV8AAkYE4J>Beb6FI@`5OBlbbf7|Pa>Kw~2^<4gB9M@s5)j0V zT29gQPk>%Wvs)7aLfC#|@#m5NSf$Lu|HHqikX$@RnB;hJd^iq-c)YwP02lWnzp2Cw4^$xw zP+UkzB~VC6hyn@!J0&E9*u!%MLg5KbkW!%_G!s®nhH-h91VVjw%-b8TY&`aM?F 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP2.Stream.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP2.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..87fe7a52004ef7b4ecb8034afb9b6662988171f1 GIT binary patch literal 38848 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 AdH?_b literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.InitialHandler.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.InitialHandler.beam new file mode 100644 index 0000000000000000000000000000000000000000..f07b1b1de4887658bf4516e35aaa24e3c9446adc GIT binary patch literal 22376 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.PhoenixAdapter.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.PhoenixAdapter.beam new file mode 100644 index 0000000000000000000000000000000000000000..1eb79bd84e86573bdefc3a3cf59456969925d24e GIT binary patch literal 6664 zcmdT|c{r49+n)_HmY!kkrA9^zVQk5gCc6m9o{TYz8D=w!r6}35R4A%JrA?$oD5VWi z6doy$qNI(AQi+t7@4AQHr{_Js?>oMK-ao$k@Vl?`I+yEQuFKr_eY$x2n!;e(FbC(= zYgdc>SHNJ1#GgNZ-a*fEX0zg10%HdXm&Otq`!IQQE-QXDjlvhv1<7PGi_74V$)yyL zNWh8^i|9f=mB-<;*z{5woiCtMDIz+piXPAB2}D9Nhh~|_5Ob*_7LO|o=TN8uo{$Kb z;T#@K%%+D6MFKHZMC7vA;dB9;!i{_%Nf(i4gi=qX5z;Wod=`zw6p8p~<=ODoi}`dx zEKA4}48}28R3@3qWU*-iI=5<8!I>-OkQgj34bO|Nk_yQ}KAkG$^F(|yh0h1cyl)7knNJ9BA#9*Zk7UZ23FIszxYQXf9R;#b5FcaY8% ziUoAC)IV(%iArI!(aOI{NS>)HD6kMDPZvl_gjSn%<;UcSg`iySLQqLs7Zf6$JF8Un zTTRhwM!(g=#LNgRZ$vZ-7gCvY4!wcK67t!U1ZgrPD5GChm^l%pf7{|&G_A zk%by)6|;1QbYF1z7EI2_y+i#5y3c$YV$iyu2Dx1&@Od8craaNUnJ4CN%9&vNw^%INJ64Ws$i;(lkny6BoYCK z!YkpR2uL##VD&Ue1XUE0gurD2rYjLCNtPq}pt0dFI9f%L2Rz_`2b>}nO2HPXq^d!Z z*Huz)Qc{PbRY~#-k&;q5EFTEeeiNvXI!qM~p-X`<{NitA042Prfiaz0_^(d0#Ou;NjdQOm@IT92J#JW%# zt8SB$E*z~(vOuc%05=PVCTMS1plA2h6To+j*=1W&9EkVN8iv)hq;dkfoq45;J z8~~-+5dlVJ02Kf@01iME0OD%`XwA}d!8mW0hIDiQkO1=m763rDdH{r38d`r50Hm`7 zU?~8k^UE(pn*b1J`A`fH4f%z1%pux2UK(={pydFd|6Rxq@(Iz<1;w-&0J4K(RiCAy z_5PTpq4gjdvQ?PnK{Uce%!O)VG0QUpBNQ)`19Tx|*o`PK8Un}y-~k{z6vX#ri6GlD z0O*4B+*8>Q#YDu(|NR?Af&bea0p<#S|K0&7RL9?I@O$2PAcJa*TMeGmU|cNq0_BE`6>_1x;an{2bpuA>Bsaip zXlaV~KK%aEQBg2QcP;}+|B~t>fxaB{hy#!BXc*Gkm z4G@s|0v`0ZjKeSlJPu$B=+e9)0?6om3Si6uW)!iAM`m%LH-#v$uB?zJ7EtNYuwWB^ zP$QuUjYZ*77%Ya#dLBa*2dqqlOde0f;zk;Q=Pp-d!k>9JF##_gLX(*-G-0zMevz|c zGG*r7#h4xs>gp5`$pXhyoazG(PGNk>IBMYo|V%(({AK&E!dQepMFFo*LiMgV= z;$hXY0^iaD>aw>rj@G=anHOxfS4W@tZOm=U?Z}729yr<7?RO5Gzn;X3JHLB$a;i*e z@rV0P&4-8DR@$d%9yrpKrW?CC(P&yMFbN3>>3gP!b=ECvR;JA-f2h!*w({&fGv{1K zHM`t>YQE1Q#cRO>d}es-^qi(HjaU1gAJSBO_`oF@CTIOz<9^l(^wa&93S2Th{}{v& z?yhjt+QHGR`aq!A++^1cIm(k_#351OIUknJbB;~9ZsR!{| z^46YiavmWs{7p>V@PYeZIxP5$e<$S8Y1QEb#KSsRs{hL^>)hnh1xH0H?XZU(FOH_O z*X8$WR5`ai?qs_^X7g{9U6Q}qIPAZcY;e)AqD*GTd<7>H^D_$rbDy-os9(8lgFRcl zcAxyS-kQ)acaNLm&Lp;1O}!}AJcr)B?BErK{j?-Yf%PTd?4D)Zx0BdwVd7h`3|*y{ zw9K@Kg8R)AwV|r}P+r4x7RyA^^G`wy>9OZ+5fvA7@tjULOXmuYETVxv&H zRON=vP*S{hTDo!(YEnaHFn|m3v%6j!5ainnLM#>? zsn0okItTY)Vv6DN9+iQL(9e(F{Utj{6)yRxX7H$?w6~NjH|Oe6@7$uneXOtxWeGpI z`s0tThnj|MCx$MM+&d!Wnq$gOQqo#WZmj1-g2J&$SGY@!K569iMzOFyaux2)W zSzvnBa`=bknhV2^oU`r@l{`5p+)`JfHz8a5{>>R2&SUxevY>9}k~++I!&PT9uQO$u z$fLrctIwi(SCKJ~e&n8t)u0a?KNG7_c5HXT#-g?-g+4m!{kb_oZ9AMD1~^X!3RB9D zj2-UoJ+bq9{mX^y;$_L|_qazpvM=>rxaQR@9;sMZ$f+v_bQ_Z=XsiX z&oesn)ATz3hfhMqpZ6Qu9$Oclf@iW~{RZ*9{_ExZ>*ogV;HjA>-DEMx)#P0EPM_)B zk$BpNbIr={QGW#^ef8@Uv*)SqSN-lRT=F^A$na06;p8`+Rl)5pr$gOu7JIoR2~`jy znl7gvFnXTWnY#`x9dD?{Q?FR1=f{OH4kT7S8)!|uTrt`l{vgb1Z*9rDrKbHtX3#|O z#u(B3)|-)X9W>kH?n=YUlZ?2hAK|kpR@n&qyhEOItqeYTX<0>FZjbsX8*+b(QOr{AV&aAm=D$wbSb})zrKXg9A;nXz>wNpO$L-HFVqiCL&CFI;`s>Le ztl!bAso3v=_Iq`(^VFA{k1r2|Mt#YT_Y2rRN4$o9?m$Oj zqZPXuq1f5J!((58zx7+SlIq|wi=PJDa~0+!#Js!kzTEDb@!VYrtP@QKD-ZAcbhGu~ zJ<>AP(brdHBFHT}b5a(&q^}5x#ox}l(4Fjdu=1I0W=wN|Q=;8JwL;AH*(xN#@<9n#-x16Yrb~nFWs8UOVnx~Hhpt%>AZ=kY1v4-#PEeXxLsi^ z3d~vm!I=Bw!hjn=r`EBkzthX{v4?o z7^bavTHS@o+qx;FYtwVPN(dl}y+Yme|>*GY;A z*VdLx9$&GExWyS6nW|>!C7ii^puPX~cI$_Iegk*gqKA&0HN4Sj_^va3^w^I%``jZ;jcFLY=3=rwW^%v-UCKuie-TQ;c?tzA`6@}qDDce$_Nzq-WA*z0``yCw zxX{~!_^kZeoc8%UX^pVMiR)Yw>K7pl6NER7J6L}8@jCderAl|N!__-KT?8){PCTj* zywZG!p1(@`_>#f^CEi?1O|I>^wN_IYw=y+@%I;%2ZhH_82B%aCyGW;)p8c)X!=E>K z&6}=Dx|G5C7CV31zKEv7_CGHC_F;?N*!ULJ&u=z2(YV!iFE>wY^!*sp*V5V98F}!` zcV^?;(ETBsM@KW>uI!#7Y%Mvr;G%lBxpDmKw(3VglhG8nJ0q0cq3YceuE#AsmbRL% z|3clfU^->jiJ_uPCztJ<_^>oEJ0{R~D8^`vaPHnys_aV77_@e^kXuM7Ue;#A`gF4= z#KDO(I?s?yyv}G$UTe6Zj?$RXH*Ar_sJ2ef*s=VSpmst)Kl!RrvCPuOB0qe9SYhsu zd9$rSZ&5kH$StxmX7@2x-=O4*miP1H@cy5}n^%ade=aXs)MjEcB14Kc^kpk3Y;ke4 ziQJGXTZOxzii#{SJAXfL8E5T+6Ir{9QjULE>Qv|w^{3fUVS<0~JGic2b?rkf%R{;w zFN?6t8t#@c>xXiD*F6srGz=u{BXkt)OudaUxdY$4ttU7b@%m{(bQ7MU)A0PSY0AjM z;O*1!>35o2M@QRmv0v`Bm`{$k+!J1@Jf&T;FFj^U`($C;Mfs8My{pTV_zy9`(WmCt zJmo(qO$_F5MQ{D4G5YG&vOh{{U)a^z$M;a=_ehYA1>w7v)XyLD)8CLM{Fa@ZnWt5r z>9{MoW&c`?gNkcx*2T4fr&qbUrn-e9`~$;PKh;+M5m`8%U%uUO^8Tl$h_v9weLfzg zd&1zn=k&d7+4cf^-&I{&%6*xfV}={v`+IkvRK0q&SislZ;TCbh!e#4RokJ>3IyH`Y z!@lYFSF8vhuKO5i*wg<=ptC82Z@4M#K%M`Pp~t$fZ`0;gd#s;tI9T?eB)~XyZFkJm zB#Dbt@%bBnw6Z4hnOy^)_-+2qD}9=47QRrn z9#j9z`xg&?#Z9G05 zc0IOkYePY^|2_O|k2665eDFW@bI(+M!8`SUn}dV;O9xeS*?r*$z zo~37E>0fJ87LA|^bp$%*54Fv=kGc+qF5QYWuMaq%ypgjbQLrKC0y7aVyeNA^l9ymy zgU9v_X{Wiy+_@5R?r1$;;d2!^!2au##=Q&NV@ZVO@b(I%>KIakz)3b1Sop|cL@+YH#l;`?! z+t>~v*#nJ(wdWVB*I_m_CyI((Vq*@}>f3KB-yv~qoX27;?+Ye>d4dj^)0NYloH#kD zXG{8&eYH8;G^?lho@=h$DB;JUYdX!}^K7V-9c^vyyjL$o}hB@i?J8`0|PN9+dj#Jz70+*(HXqBcHu{!~9mHtvCH-Bk{33a}V`!Kw76UQKrimfjzIyw#vF<7#!?< zD9FzCM{S{7hFw!0_CeE{>RZS5b!+RW8ooW zJinY67qE)yz2;rcm(HBKW3QUH1VXRfzAvvNZAm)`nul*ny58hcb>|lDv?ZPv9c2*b zF13EU_w9#cJC!_@){LnhQjL2vop8J+ndrHrZt-!|#N1Wu9w&c$+3_RLit~^zW0ZMy zQ%l6>O)L7f%j3enyD)duvr0G`+2+pk?9KBG_Ez)zcHKLI>zl0Oi}as{Ke4N)<&?gA zyz9Blb*suTh1=Fqho4{G5N6*hU(rn9w>5UG+HAFoY#TIQgZXeHIH@iVaWq;q9@~Lq z4*d03yj{MHRoCRGOMhRZZTU5Yp(i8ZUTbBZQN89!wD#b=e#WRw`IPU;P5HWV&Z_M< zYPP}&$)~{w7|c1|F&ccnW1){@WxBNG3|hE!YBXqA#+r(N20Tt~wv9adnGQ7n@u5DW zgcPzOfkX!Mr9lfBvST8o!|WQg1TKZcqQ;>>`5vVAiHwt_vUx%} zO*);CqbMRC2XZ0ig74rN9)cGgHM?Zg|Ji7!2{0SOf4Aztw+Eu2iwQLxeoq`R6T<(L z_^ep&ABoSH{FC?pwiy3x$NXoiF}u0a;w${4+w&jw7v%}MZ_7`eukfexhOj1#$?< AumAu6 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Pipeline.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Pipeline.beam new file mode 100644 index 0000000000000000000000000000000000000000..e105e63ae71d39788c17192edab16b27cfa423fd GIT binary patch literal 15396 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 M1*3?N_!klX2QHENv;Y7A literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.PrimitiveOps.WebSocket.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.PrimitiveOps.WebSocket.beam new file mode 100644 index 0000000000000000000000000000000000000000..9bf926ddc2e9ddfbada8a39792748e528acebb3e GIT binary patch literal 3608 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 Z{o*JZ2HO-B3bnxx2s)$Z5c~!s{s$lvBfJ0r literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Trace.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.Trace.beam new file mode 100644 index 0000000000000000000000000000000000000000..3c1e9f5d43f6db28465ab524f5438ad0725caeae GIT binary patch literal 13828 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 B6kh-U literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.TransportError.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.TransportError.beam new file mode 100644 index 0000000000000000000000000000000000000000..1b378e85e82d4b7858c0b557e5fb4acc64744d57 GIT binary patch literal 3612 zcmb_fdsq|47T?VV2$8@-c*?^dVAU!KQlu2M;Ss?a5fv1rx>=G10?BUN-H?cFwSWbx zpT%cI9-@_s)+(j_dh3It)GKX$)Cc&i)vMx*O0~X9dn4J6OA`W!P)aV9NeH0cdggN`z>l$PWvT{C5cOE|))i>b;r(^_87(459d zYFUO;0HVgo=*$L6!||+H%WEjsK+<`4@+h7dVA!lQ5X1nVAe!w?sc5rN!%{l4ma3wx zTFL|!n~W64k$KcHyU=8cr744HU~T9f%C;W@*dRSyoTbaEFN3qC-NGzByq`fa}LF3mY7#A*`#WTK^4jr1e2ml zr5E_7D^qaLX_P54(3zA1@LjCLq=178% zX_NQDQIS`zM2gi*q_Z#_u8=CFz@SL#hT}?1s00KTnPP*)8M4WHA|Z$;SC1f`k;G`d!6E2k zzn9Muak5>w0$?r4W>}anu!#S-a3u1~90haNC)P@EP~*TYJi;<+%yaGT^brwoiv?+YBgIGujN$4F`a~hY$dG7BYZf z02qHrdvX>DAcumv+O~B8*b7#~(J=lfjU(8#yzp_A9qU>jPxs4Dk&P;VThF2L$s#>t zW^Gay+>sU?sj#3RX%d|aG@KeZM;MGdW;W zuG5n=nXAv0&tP(S3s@!R@)?HL(|Mz*B8ukarhJB?^;S739GpDIR&V46eU4+uJ4z48 z-5@PTQdV%n$vJs?5Z?Kv>EJ>XTWfD;P2tWdaHsS8ll2a4Z_cQkk8-}Z9h?89^ zqUwvAmhRpyUo(6t_0c`!k@}DWRShL0gV(*#u+Y_ca8Hk-Z1-V>A?sJSljlrTZ?DdG zc2O5oE0fz2Dg{YnMYW?U-(n0=Sip{e-iV6Vj?L0M)8zG^q~5AYy)gemnfvODv-85seJ*UCa=hxUB6jW}UDrzo!VNxiwme`5 zFW8cQHIFTtV19k|@8X+Z2FNRp+{bHr54u%GoTaRfGbVjBdrn+uY+ZI$t&Z&p5 z7FO|^@W!ldttItwCyyMzG$d)`n* zhWJwx$*eWO?*wwUNBq7p@vDU%_qu9!ZCiT7Bm2~qg-f=6f6FzHdKq(Wr=7O-?G=AN z|Fd~r@c}b+yXCUTO%G}p9XLm#y`MrmaUuiv9HBy+`T|##mJP(H++1|1y z|G*sctX54;(~xPAp^+Ene(~*a<-2*l4Vqz#uIFE&>(boM8aKCGyf4Fa9V_&)>Q-vl zk;cYJ34NJ;ZkHpH0+ug}u2}Zt-m_;GzdFSD=B46cYv&(jZ=Jfi|KT)xPt4q(KKP+} z>Y>b1kM((L`@i|3x04xK-@PvJYc666GicS@?VPBmZOnw=ve16yZbdb?bVxFzT-;{-9{tCl_ZF2t&&Ph@e_=YWMy<)_XVhRtd9ltR#b^G2kZ?9ONywTF}LY(5umgPhFqq`+zgZWJ#793ux zV=nLT-MQ)ORp&drRXC4@#ayP|bq>Z~tN(1+=O;EbNAa%fa^LLhm02ErH@@&*vCbIZ z*^zfJy0Oua{qXe5+2cLhZ^|RuH%9DO)ZVlAE&qynm+zK8PMAQQZk$@a@_IzE#|Zc9 zKZLC8k@in5dg!#g^(Kj^tVx9+dJ{`Q#`Ls5O||)ywvb|pq9|CRP>YNG`E1M3`LHlN zRi8*?KnUaXd4S^t-s9kD3)kff3hXTKHXWc~7H6%2;V2zs2<^pdKuAdPj1ej@)1W%o z7lP_t@T8*tKe?xz`fJhWR?~uKs_|c|vAsYFK>M$7pmx{)M>uRT7+|~T7SN$7RbNPV^9y(;2#G#+ZX^xgYQ82?m)e!A;HhBr$8uUfeEg6 N1AuQ9fk!{0{12|(rjP&t literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Connection.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Connection.beam new file mode 100644 index 0000000000000000000000000000000000000000..f009dbfb7773c9d7a5fe550818c21a43878021a4 GIT binary patch literal 23884 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.ConnectionClose.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.ConnectionClose.beam new file mode 100644 index 0000000000000000000000000000000000000000..c8cf4b036216cde59a60cde11ca4248455bd0633 GIT binary patch literal 6632 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Continuation.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Continuation.beam new file mode 100644 index 0000000000000000000000000000000000000000..eb8356e68e396be7e7532097e9cfc62f41dac641 GIT binary patch literal 4024 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 b?4Sy0(jPCrpt)KhIL literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Ping.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Ping.beam new file mode 100644 index 0000000000000000000000000000000000000000..633fa7bf8450f63e12314a78f98ecac5a5dbc327 GIT binary patch literal 4776 zcmd5=30Mphmn(pKoC5xySw`u!&9VEq$>!&a8x5xkbYAzNdhiS#Yn%=1gggT z;uMg_VI+P>{g+xzcI;|8}YZWSNoea|wm=q;3SuK{X#R*a;R?C7`$n_d2 zslYY5BsD4}aGd}!lhn9OufmdaB%zm*Nf@C*HOUW>F;d(kFnU=h7Wc@-;#$+tL>j$1 ziNIufDOM}PbQqyPRf-Jk0jAOE2~3QVVikt!NFjj5;^e4GhpmvzA~CTJC<$dKiE{DO z+P7RV9DUz7;rsi7vHA*plO(82jcVgCg1`wzuXj}x8kItW$$%O#e%*P!EC2$Ez-1U% z(+&uN5I|I^1JnIShw@-0<9Zy#ymB&C{>UEfehsf(61Th|Y$E zLI?1S6GkDRN)kqKL8TSaz%xroX9Hm@7lKzfq;}<1jPyv_-YZC=D@TUzz;UE9C?DkIu;Vh5ilK~tbr_q&SZlpo9Q^m zT*#dgi17Ne5UbCo@VFI$bm1EFC?Or;2-_T(&U8e8l+!s}CI>iWAfa>?nQhg=wsx%aAAh~P?iUM z7$9y5i^~qDL%eW0LN7LF(*+zZj{@Z)0L%B2bM6C%GwT8pcJrR6Zjxoeq<6wIJtl<@^FJ@rmd@$CzUiY*mW9-!aj8wRp9=$qmQCQnb(X^b(| zAW-VUA;|-X+X=LW%!kzhtmR526cMeF1N}?C2h%bQBXl5%r$Y3hegXhsiEE8XodPj4 zxM*;(PKz2eV$)_oh_wVR1&e5~k`uTZunEjy2ehaLkYQRBFl+$>)swhbp{Di=CBU`N z;d(-fr9w0LlR$pg@ns5BgUS_hegZBh4Zw=8OTlpx1jZLj0}I91rr?-HkqNF+gvZ#3!Aah#>yR&tKF)C z^8?oB#Dq6ZMD8anMdr49M?VWryA~7&I?ni2?I*;Wi3(D)9%Zqc)JS^$FdqF-!yj{}bH^)B*FXPAWBIsTI3Bi@aaz3IrMF;qn zx)l2yS(}0HJm=2bx;a}hM)27dyynNr?OQi}Id0R|hKcivB@^#K2TEQj+%4xM+w`k( zIgE|Ftkif<3R-(Ad)d!*5&j-4KYMiRm*Z3ISXlMCz4XpU?JddM6Jr}Tbog{-_byQM z|9tMkZ5zfqoFJ#&fmTL(?fES>^SU%fe4u*Co>Zh>-2J@mW?TEOzg`NtweRsy7dBuS z?ltR^n+Sd;R>D93Xm-Yi&_#D84)JI{U@VGQ;!FZ_KFf*dr<+XQ)*=&X_nfx)lED&@*UW|;_p^_z+H=Qt*_Q6FtKD1sPDtp}eRg$i+s;#A%KP;>f~T>^ z7WeMdo38dpZ{E(ei4{2>3U*=jyb$OgWSoQ z^|W?I#gdSxi4S+*Z@!n^+=i?gUV7`GJiX+*SDh*C=`TGV5Fy?NjgO z?e88XeQMo2to>Os^YF?%$=zdjvirPz;CyfK)V6CV%_E<*xp!BYx%Xv;`rfYe`jVG+ z!o;R%>4VYd#?}jbUDd^nT|aSszxX<*xp~0ZPI(EV^^@;AntrO>JQVRXJ2Va3SC78j zu8hkUU#k8kq*3hD(Uq8(9(v%qvbAmV{@V3LE^Drx@YptKhF@GrsjpT9Zo2^NVwbwN8Xe6#GEr%nwt+grBN4rx}l+#J!InAnY+zw+C18&1D+t)?iYsiBlQyP)|*xHmL5a$J5~Md`Um>CdLO)MmTI6}6WaMI^nL z`j9ncV9VnZHX560*#oL}9eV0g>6rWJ*p_7pvXk1~llRnCUOa2VM#AqjwU4wuXnCNv zz`era@Ywr#ds8N^iL<2@zWCS9^zVKj&p0w%fyL{5Mfc zs#Z-~wBR~(@)+fLmunmQF1$Ox^R7U=q*?28cS!WE3BNRZS*3U6WSOV!ip*x(#P=R% zf8}iLN|#-3i1QV@M7m#%duY;ci`&cSjpKa zu#l>7aQ2`Cw4MV@kB)^zK>{@tejB?-WQLNsnu6AAz#iSh`wPb-B`ALwtnriw8$L8x z;|P1uEoHMbs9GU4n2{KvHqGKarV;wxQ(lkpAF$0*XvUR$7rUqTp}Cn+_q+F;{<*ff z@gn#^_21XjBsC}XS{3$QB&aU!&*5o!s>z!EKZ_z2$N%;Uz7zU?XW@Dd;HI^E6N$e) zmwyu954}7eRR6!3%-?&pKcxMin~G8y1AcvguOSrB>%s&LA6Mcgem3ea;;Y|rk2P_uc^2wju5Bdq}K#3roz2q z2(>IzD3q(EgiyE*BT21Xq$hEmMog$QawWb^f@`$67$b2>HJ+{^w4_d`lKACH^=dIG zC)Bzm6(-gaIzC_~sR)T)i6`kutzJwf;aVl8mOYT+q_9_D@Ul%P?3D|J)yAQPsr9NP zEiTcE@oEXK!?kiuDW8o$z|}gv78hcqP>EwYQUGA_7%8UI;klv=5*O-#l0bry7@J6` ze#Zsfiucxu_i!E=dtXJaR?5}51gHVy*PYkP0wACeLV|-e z?SLQ%1w@rPKtlmpz-T^1v*e&KI}pjUrCW|z6uc-_FT%BxztFE)v^{LEAIukoLkJ5N z2rR)fMi7pIDoGH|29-uY1J6tW!UDo*HU#IIp-dNeTRuv&ya~b8f^a^NHyFAo+>HA3 zsUfgYbSK2Mg@BZm4@L7)_B)MDOLF1y$V5o|II7a*vu;HD+R20{5~5n{_`*aD|?G!S93Yy}J}rX_>L z901b?1hR|_Tfne^>6V^MdjJd5S;anF!Ps_~ZWV~M8%*qghBZvL4rKNAjTSb7@E8i) zRuG;<)pj231^|0OxQ6Nvq!yE52f_3~)PkUVm_E3dg~D`)x64EyV&K}dVY=ferV}z6 z5W9fMW(6YI;Yohz6)XAnKi<)G59-AlTTZbY8ayQSGpF z15OlZn*p*j${mbtP(hU506-KTh20Mjg+XCaZL0JEMER!pvm*7%NuOwBJLYk>mjw>Z;Ce+8J0E_^GDw0e~ zW4!&cFzACm4ElZE`G7HmvbD*kFwyIcH?Ilz7T-QxyJ7BFeirwA9bb&&!9h3whtp_kHKU znM{SNK@$DY`MWStgqVt>8z3t7)H^}N*98z2TPmhpKyTt31hO^g8{-HjkEH6Xr02!{q0HYsZV0w}e%2m{Up#ZpM zIzq1%<0;Tg@5vy)>%1j$OpQt9QtvoIN~QrTZ(TA$kaD$*ho^#t^4261xLTg>4YnVh zx5%(}c`N0j*UdCsq%&+|-iA1OQz7-j(-lytNG1nkugZ=AyJ1dxLF=^Xt1g9FMJtKm zHTOAXWycUsW$hA%UrXJU#LsvhjTK>Z3#W>u{*|-l7M!UZE53Luiq`e4YeCnBS>J4R zPW9R>Y1N(zv1%%K@oiewxV5Wy^_%x#Z{frY_T`7=ijW9b-&sx;;dP4q(ud`ht%~r9 zNkvg*8zLj}6`@C)f@4lJ=?bqtTi6}{bUxBqYq2%F zJMLINBr1MTJIfBW7#Fu?xvRj8dvj64x{v@{?y~P96a8ZIC5Sy|$DxsDV<$P%)+~x$ zTUnl+8T^yS3D-4z{VEg7=03U2NvFRHcl%^iQI$D&LjYkFuqtFop=+dy7vXPSerwb(7i-QQIwCo~HSxK~>{_U>D7oG2fw)8&tvB-#-g_v2e;6E)vEGImvD$s_plDhcn4Q||66vz=JRBZf6j8a`})rtr+G+EvIAAG5U= zmfzUxqW0atwqjHCUBL;>rNWKqsc|nJKap0NFWx&j=4#gL7hSTNX}r?wEl;g}ZCG*2 z*Xr2c!!CU0Vj(-^sfQvtmWlIS$3Gfgvin+V*cHDeS9Z^zH*4N+UH9&FY_7TbdFQFG z@!5{M3uULZ-t+MS@9!VYnY}CU%X^}SAsfg&FjHTc>hfu4d{0T$V}I-OU(t^2us*oVF|p(4;oQ;}R~yLV zPhUEyPTZW?*cL3~P6@qf?b+RLnzDT7{p%-R3J<@0m}u$O{!qBW!eg9=L($VCfpl?a zZKYjYhn1@v$49y0+<_9&YIRM($Xoo+7A};RzZ`RJblAY`n53P&p=Soy=Qfr{Y`1&b zYAM>&j=FQ0TV^c}+Ea&gU%oqW(wzM3bK7>^sts&+-j4Jg<~(5f;R7QMPI*v3YpNP@ zMH#Ynta9qzn=9(4%)K92GlyLhu+U}Iol({HL+p~gb0F`k zm#hcLU9UZ7XU0t_PTXj-vTl-iE|F_&H~QlhxX_ke;QP@_DCv zT2F#s*~#41(F zEo^(Z>Rcw4_iVyU-(i#7%wbdSlQV3-`676G{<_7>j`OMl$=q;sg1llyLi^B3jVX>Mp4B@{8SzQE zZOvc)RJC~DnZl0D>U;B>2Wm22{Q$3>dgitRKSPmqss@=qKd*cJ^96}zV|tp0{kCUk zLC?rfE1sNP{nPL;*_fP73)o%kwiWeltfBeqo+tiURpO}%(1}!w?#1S}0m| zX&)P`VT8Tt=8_CGrjm=(Oh{a-GS1=yrUCl>Q(mv}@32jhX@-@1AG^2rvALO0_qz|A z{;{^H;Uf4^^*3v3l$w%yjS~ML5>%J=$M7^F#b}NE&!R}h@xQ%-?}h%~S-9Qw`BG dpP`{Jh5(}OE=d0#h{k7wmZ2cvR}@ts=pRYOK8*kX literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Binary.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Binary.beam new file mode 100644 index 0000000000000000000000000000000000000000..426e3d6e51b9b91b0bfd7124694fde60ce3aed53 GIT binary patch literal 3616 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 U$Ur%}#K_rk1wa6JgZm)t54e8O@c;k- literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.ConnectionClose.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.ConnectionClose.beam new file mode 100644 index 0000000000000000000000000000000000000000..5b14d78383ba23972ac2365554e790d055637792 GIT binary patch literal 4820 zcmeHLdsq`!7N22=gkW?afrugvNUefE(E32Mgr_K|2qN`S!z4^#$YWw=LJ+qUR8+Jo z;;Sm6#W$iv@PS~ZJY1D3VntD@+SOKCyIRyBQtGmIl7O{e^;`bg{b%R}2PcWuVBxs*_TpCNt6gce@ zuEkWiPb{t_FeQXQxa9;*j%|zZBjrbs4$t9q(p$3pdu4>N<4w0wK^FsQWMGq zT&u*?No`3uEireREHMUE8l^-cl9Sp@jh3WI8L4D@{^y>tz27bSCl7NeOH}aP5{Vg} zL?V`viFkq*$0$TEib)Wb?fVwUSWdiQYZV`ucgl$u-3saG?+Y1cI!BAqYYNF;6KV z4?s3Bx(%{&a7STb0J2%Yb{L%qXK;V@i zo`QmxMr;LsGsOrGbj}b$aBe@8I}F~C1&v}354^qy zf^KlzHq^?2!$)B@n%|BTw8tZ;K*(|AdA0L6yaKMh`P+%-#kJ?vh^Gj_K(>7W*U`)u z0KOxyroRv^7NFK*gkQjQu#B)4TO*UXK-xjfapG+g+6d8ITs|V?3=T$61ZMM&u{0@Bko1Fnh>rmXn3$!psNjt=PlexfQchfgm9_(S0x$X!A#nRf@%mSLK(lGB20a*j$0vZ6w3eX@x&XzXA ze-980s7D44OEZlX10D;I5D?SP$T4l^848FGh~YD9cA%wg2i}YghHn)`&snX`oNkq3A~O&Z{2 zYmBY8W_F^UW!j32Jd^@Okut`n3m^uEJ0J$jFhFjWwp$QLbD;guqzM7mkyJ{};DXgC zbo_y{>jx3*XT!SYR&j&mehPz5iYH^K1gX=Sr1X8rRLt;RS9^W$$$5Rz#NY(^Qs1}K zmja?0GF2@H-nI7nYmdsmQ(?@7S|61QcMH%;Y_O34*(2IN0Ur)2Ze(1ydMQ(Cc_m_ifU=TIRzopN(g)L1|OGCzn$d0>)_R7V^#rgA7}6uPU32tjpsslEjI`wJ?n!5 z(`Q94xyN&j{qd`;wwO>dXtA$dUY6dL_5R3LJC~2#eSZ@~pT)*yk+iat3+Jvde_a&=C ziI_}ZLGXzBk_OCnL1$+$bf7t-|7m0G?KQi;HM~0Pw&_Gj;31dauGV8{oa^NB8&s3G z(48aQKQnS6l;afF6jiyL3TiOUE-L(dQ|g52?L+fMd|fZixX8WMA&nSecQu2>jS$kXM8u|d}TykbZu>0^NJ5|?f)J3ewZhF>|WlOxnkavvLu0E_@Yp| z4HfsDw`~7>;^hUi2aLCWR$>3!e#s+hS+vc%yIs{+f2muv`iG56$43<2pLMy#X{~eK zjKaBgb}bEpV(%c5rF>d4uq0FUaOHe*=B^h@y7q;Y*WCPNYuBQZtQeUhGXKX6`q zX=CK33!Xpc$z1E}&vs{g|7d(;C2ML`qp*0~$pd4R`QBIkoiDb8`yJ^xTVA2LG^CPM zRdnQtymZZc$^O=$ge}#=m*+EaujMhGalAwR{xNt#O?aCQ8QXC!*Ync4@>kVOC9PW= zzUX)9#^bf|ekVTQom>mGxTy__-0xT~yU}jds%~znn$GNYi4U;a*d6dws#}90C!uU} z)V-Y0Ee~vxh1%@(db^06!btY*k{I&lR(#9}&03=B)kT@hZU4|U7sI{AV3mVjOkcNW z)1=`CZhjScce~+A(#?2TF|p$j0dI>&i$g#1d)4TdyWwiv`^Vy34yUIN>3FFOQl2+% zi&LEPDlEIa%2m1cf-+|e6p&R5wk40+bo9hOj zQC!&57;ydTvdhzs2Q^b23BTXUT1d7Y(M?D`TUrG@Z>rc1vR^1Eqd*}LF}VZ2otCeP zemtXA)L(h3dfeGMS#gA-&P!Nr7qx2F=9cov+f7IFl!wyNZyTnwUnbq@Y-o-B#;|F@ z>H9DH&n*w%W236{nEGV$fQ59z{EJyNC%%nw@7%C$*tsKn!1JN=xZ$4#69!wonm^}b$i8yi)H2PI;Pkel>4Tp>X`JXb7Hz6< z3OM>Hw5DdHyo9Ja_h3+%arFkH(Bs97O;3-DDkiOmBL%Um(x@OVsPtkd7 zT3~E^itC*AEO)`2urDj`@>zTD8Ala&L?l=5>2F64oDl3)>loFQJNDSJLuD(=Xr!RB zxbxP$-#UJktZaTVn-|P!S@ZJ)*4?_m@D`TeKLYp9+9Nk)>#qF`URb`kHJ|2lg?@ zDZSBB5)^GgYSzx8bs8o9C-BUtwYk5al%RoknC0`YR)p!0_>L7}K0aCmdi24)n0h!? zDPS&4K+KlkT#D}wu_bnvNWML8=79e{#DBTl`x4^+#$tVQ0a*Xfm+l`CnEiiqi+~0E zSBn~45Td~U6ktn50_u5eL4&!k!49_Gwm!DLkWb$Z;n3{G8b)V-iyo_i-H`a-Puf`g literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Continuation.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Continuation.beam new file mode 100644 index 0000000000000000000000000000000000000000..18af826e6cae2e26b3631e6769774ab053a2a0e3 GIT binary patch literal 3572 zcmb^z3se+kcZONmWnp31g4|2-LD1oG7^x%J@H||TO=(Ry8$OlBEO>Y} zP7|1!n1gA|_~UfqDUu~f8^#h8IbW?NNIj)iH)1SH6B-+fGgd8Su@YvyQHNV;T#K=| zZY%DvQZ&n`ExL(SdK;MLvWQFDhh@hIg__h zcxyCrNv0B_UkQBn$y2=& zp~O>(ZkEY;zA7Z7LF6+alKM^&iD7|{N+^}^<>+dW6p;&u#UUu7LVRI?xIrYz3*l@8 z@KiixiU{x|Dq(;`6@oa`{f5+GfiG%B-$i69*jE^cBqA<|SSf)8ey9opT%|Bb7!V>r zzxD zNX{=zqR_op=9j388h0E>$!hkfpKdmC-Zi)ZD<&u#?bNdWiyxUg{xFq?xec|1e`AS@ z6SR}RJMw5}FdCuwWK#d9T=~T~&49*cf{@AKN??>vS)GlJ3yx<92VL#SuV;a}CAr1sIr(rMSKadMKB*8w2X4#Z8c2F&(@;Mxi4x z64MiUMK+~p?ckJxF;Eof(nVo-F;21ytAWBv!l3{ynNet*yw}Z23r;aJ7iHc)I^oUBrUzNxZe<_qQ(D4_93nGFHnqDWbyP>ksv{dC4~;PQTr00E z|DoHvG9CX-(sNClOxM=OCA&B6dA=Q%+$bM;%p-V_WnFaQ*bkOGd1FS$v`epd-B@=b zCnq6$tp9|I`J?^#cY5!tKHOmbZ3W$ND~7mP5W8Vvxi~iKZMUX~uNJL9n^RL#qe{FO z^qK!exG!wryZeS#j!S4GzI+ggj(tt~?!=j>{e<31uCL9DON|UUdM#%SPh2#yKwmnl zJfu&*nVoUq8^=O=$FwX_S4PZ>bM_v+&&vu`Rn(-NNpa6BEWYNo<>j|?`)oU=uN73i zb4&T|_4?!6JZD$#IoQ<}D%0)zVK;X9T+nxQ7f$!SkWqVjfAiYj7rgUxR!?qw_1iCQ zJolsNSSipbTyuWnZ<*)dwwk#{%UG%+>d3eTq__@#lhpd#Zke9 zURYmD@VN(zP46|=jeF25=O4^-ZSOX$D>+tH=BW_2h-g)D=C+iUCwKjLIx5Azb-kay zsXX5(kd0hcKVo*eN5qw1wztfPx6D0)U9>mF7Q|&l&%OQrnmgv|&o6wyKC?hOqdj85 zG->O%Pwg0dvP6Tg83b&RtD9gukUb)HrYE0@EgoA^D{@yHiVB zM}EI<=b2!8cWRgVi7_iKKu`juWk7=r=l(6Y)3M5uIU{|)5>5N&WJOx@h$->0qojGN zg&sMT#|`2PTD`?aeu>iM&Qn_Q}XZThg|vsnv1V!OvkqYIwCvfYk^>7ygXD}GxT zhh3*E^0#V{H(Jw{zjyzb&(*fYqc?Q@H&HvRMwNN^)$8n~7=K-^;d;pR)wj?!Thk38 zla)*B@x&H=inQsJ7SjrIUmyG8hOt#8)~xJB`)f-_z1RMwVpGErpWe@6YAj8+gHEo# z*Z%(9=M8Nm?@cJ0<9QD?LlgnNE7)VfHV00D5y_!JF<&>E#4Ln%K$(ZJl!eo_k)Y8J z8UUliXnef(8}RAM+N@^$FR^lu zyaBnJhG0Q57;nJt;{$bdZu!Q)xF0(10s=BZsbI?orsDw&U3@@rdlM{nmqMZcd>}(P Sv#p#hPXOHN>EhiFseT6s?8hMh literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Ping.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Ping.beam new file mode 100644 index 0000000000000000000000000000000000000000..9ecc6f2ec2b63b514e6ca50f447d14d4e2d469f5 GIT binary patch literal 3444 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 IxCc@H2M}$pL;wH) literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Text.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Text.beam new file mode 100644 index 0000000000000000000000000000000000000000..81a1c7cd84d01f28d7726c70b0fbe7aae4daeb45 GIT binary patch literal 3588 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 P)`mR*0>E(?gs}etDLc~O literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.beam new file mode 100644 index 0000000000000000000000000000000000000000..5044e43089ac258ed845a6c6b5979c4cd12c8a96 GIT binary patch literal 5676 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 A00000 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Handler.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Handler.beam new file mode 100644 index 0000000000000000000000000000000000000000..5959aafa4091013e828b0f28e008ec53a2bcde67 GIT binary patch literal 24732 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 W_X)hFVg>#YHAo8$aml#>*Z%<9J*@Qr literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Socket.ThousandIsland.Socket.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.Socket.ThousandIsland.Socket.beam new file mode 100644 index 0000000000000000000000000000000000000000..fe72f1d4d2b0229eb87879a79264ea1ca5109182 GIT binary patch literal 6796 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 Y%H-dV9w^kp93jF%m}-a7_<*AQ2bKO&p#T5? literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.UpgradeValidation.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.WebSocket.UpgradeValidation.beam new file mode 100644 index 0000000000000000000000000000000000000000..240f68c849bc0985bd449e4d84c5df28e9924cd3 GIT binary patch literal 5352 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.beam b/phoenix/_build/prod/lib/bandit/ebin/Elixir.Bandit.beam new file mode 100644 index 0000000000000000000000000000000000000000..45726359bc1e599777e7ae9f31a0e3102862e137 GIT binary patch literal 21940 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�JpCKsZ~G>10g_$GY~ThX|B**t+_#Sz2-X2jhwGF7ilimT%tKovqQ5> zvqy8HW|n5QW`QP?CW|J!CWj`sCXXh+rhulfriiAvri7-HrnIJvrktj{rkOW~ip2X02wOX0zs0&1ss`HD_qf j(k#&|McZ=Azz_mV&p`Kq_HBapa5D4%cVK4cU|;|M?V?tB literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/ebin/bandit.app b/phoenix/_build/prod/lib/bandit/ebin/bandit.app new file mode 100644 index 0000000..03ff706 --- /dev/null +++ b/phoenix/_build/prod/lib/bandit/ebin/bandit.app @@ -0,0 +1,81 @@ +{application,bandit, + [{modules,['Elixir.Bandit','Elixir.Bandit.Adapter', + 'Elixir.Bandit.Application','Elixir.Bandit.Clock', + 'Elixir.Bandit.Compression', + 'Elixir.Bandit.DelegatingHandler', + 'Elixir.Bandit.Extractor', + 'Elixir.Bandit.HTTP1.Handler', + 'Elixir.Bandit.HTTP1.Socket', + 'Elixir.Bandit.HTTP2.Connection', + 'Elixir.Bandit.HTTP2.Errors', + 'Elixir.Bandit.HTTP2.Errors.ConnectionError', + 'Elixir.Bandit.HTTP2.Errors.StreamError', + 'Elixir.Bandit.HTTP2.FlowControl', + 'Elixir.Bandit.HTTP2.Frame', + 'Elixir.Bandit.HTTP2.Frame.Continuation', + 'Elixir.Bandit.HTTP2.Frame.Data', + 'Elixir.Bandit.HTTP2.Frame.Flags', + 'Elixir.Bandit.HTTP2.Frame.Goaway', + 'Elixir.Bandit.HTTP2.Frame.Headers', + 'Elixir.Bandit.HTTP2.Frame.Ping', + 'Elixir.Bandit.HTTP2.Frame.Priority', + 'Elixir.Bandit.HTTP2.Frame.PushPromise', + 'Elixir.Bandit.HTTP2.Frame.RstStream', + 'Elixir.Bandit.HTTP2.Frame.Serializable', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Continuation', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Data', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Goaway', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Headers', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Ping', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Priority', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.RstStream', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Settings', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.WindowUpdate', + 'Elixir.Bandit.HTTP2.Frame.Settings', + 'Elixir.Bandit.HTTP2.Frame.Unknown', + 'Elixir.Bandit.HTTP2.Frame.WindowUpdate', + 'Elixir.Bandit.HTTP2.Handler', + 'Elixir.Bandit.HTTP2.Settings', + 'Elixir.Bandit.HTTP2.Stream', + 'Elixir.Bandit.HTTP2.StreamCollection', + 'Elixir.Bandit.HTTP2.StreamProcess', + 'Elixir.Bandit.HTTPError', + 'Elixir.Bandit.HTTPTransport', + 'Elixir.Bandit.HTTPTransport.Bandit.HTTP1.Socket', + 'Elixir.Bandit.HTTPTransport.Bandit.HTTP2.Stream', + 'Elixir.Bandit.Headers', + 'Elixir.Bandit.InitialHandler','Elixir.Bandit.Logger', + 'Elixir.Bandit.PhoenixAdapter', + 'Elixir.Bandit.Pipeline', + 'Elixir.Bandit.PrimitiveOps.WebSocket', + 'Elixir.Bandit.SocketHelpers', + 'Elixir.Bandit.Telemetry','Elixir.Bandit.Trace', + 'Elixir.Bandit.TransportError', + 'Elixir.Bandit.WebSocket.Connection', + 'Elixir.Bandit.WebSocket.Frame', + 'Elixir.Bandit.WebSocket.Frame.Binary', + 'Elixir.Bandit.WebSocket.Frame.ConnectionClose', + 'Elixir.Bandit.WebSocket.Frame.Continuation', + 'Elixir.Bandit.WebSocket.Frame.Ping', + 'Elixir.Bandit.WebSocket.Frame.Pong', + 'Elixir.Bandit.WebSocket.Frame.Serializable', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Binary', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.ConnectionClose', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Continuation', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Ping', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Pong', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Text', + 'Elixir.Bandit.WebSocket.Frame.Text', + 'Elixir.Bandit.WebSocket.Handler', + 'Elixir.Bandit.WebSocket.Handshake', + 'Elixir.Bandit.WebSocket.PerMessageDeflate', + 'Elixir.Bandit.WebSocket.Socket', + 'Elixir.Bandit.WebSocket.Socket.ThousandIsland.Socket', + 'Elixir.Bandit.WebSocket.UpgradeValidation']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir,logger,thousand_island,plug, + websock,hpax,telemetry]}, + {description,"A pure-Elixir HTTP server built for Plug & WebSock apps"}, + {registered,[]}, + {vsn,"1.10.4"}, + {mod,{'Elixir.Bandit.Application',[]}}]}. diff --git a/phoenix/_build/prod/lib/cc_precompiler/.mix/compile.elixir b/phoenix/_build/prod/lib/cc_precompiler/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..6316723b2f2fef9f7fcb6ee05e8d938e5831a276 GIT binary patch literal 5209 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 TZchIX8E<-LfA;?X<7}87B)A@u literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/cc_precompiler/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/cc_precompiler/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 ucmZq9U`}MrV9I4+U|=)UGqlh%$!1_OvMA?s&B?6DEYkBxt&L8Jx(C<20j+TxLH!a_DAyD_^t)V3%f+TwxK zhaiZeMQh)q1ut4q!~+2-cz_3jR)tm(tALuSyh3LKSncb)_s#tC%{Sl7CjZQYL`DlC z$Vw3y91syeE%$*Sm^m;o@QgVH-LPNVE zD#?4Uc&-iFlxn5-oy2BNbVIS|eiE0(Pkb z1aGqBvTWf@+N+lfAM|6~v=>=(tF3KL!6jyGm1q$cOt}VhW8eq0&YB0o-Sl)W7iOAw zVa)@P&A+Bho>^xLSX+M<4`%YseLm=q@n`WFF_boz{+Lj;hHfVUSOBm9*#C*)V53QXZY>Q z-(~IpiIuIM8r$kdPY0 zfJ=tYfkdMv6Wvigic?{syPiCF*QGQ;WlXtx!*oEjrP^Gux&5 zaLKs1&$phuGw{xDVQ%=^>%22%jxQFJr)RC$yFch%FKJJ0OdhD06|Qoc)=T^a2~OVS zuNWJ-ta@j5SI(<4ao3ILO({!aJ403$RLPzyi_b>2PPucq_t-IS*Pfhg#p*bIuJ5hL zqS~fMwY6>RUQUzyr#G@@X*`T>6XJAN9QocIyb0fkX0EaF+%nU-vGvDpzU$OZYu8n(-S7{laV(ITh>KLhgE(uo|Qxi*ssOcWPw;*8aBQ zw9og?gnr?__c>1rU7B;t#=YNTgvCC42b5hcp41FCm_&=&=XWR1t}V7KIa2bpS;`49 z<(8hgd4W@zCXhC^*O~gc_ZJ*ZCMTzdZwhm$@H&C@hp7Z-#oYN?TCI) zTKR#UU*4V5P;_H0QhjE-QWkkA@O5pZX?|4I zj@R?{w%o5TEZD%m&f`1}%wXSB5r(Xi^rF!2H7@pJ$Bmp(@F47{GH2A1sA9K;Q%>%V zT^tZ<+`2m&e$lt5u4|u9bb2kLZS;y2of%j2pQb+f*3_E)SaaNdmyrF$zUz5}@v^@E zT*u^dik{h5lUXh@2^4G;CxP#YN(HCT1~orz61f7EC!t!2UPyr<*kCpENDW;?K*|32 sO+es5A%nyc4I^*@N0s5=K>?HLdug~>4hOO8HS`#LCo%wF&Hx1c1AvUHm;e9( literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/cc_precompiler/ebin/Elixir.CCPrecompiler.UniversalBinary.beam b/phoenix/_build/prod/lib/cc_precompiler/ebin/Elixir.CCPrecompiler.UniversalBinary.beam new file mode 100644 index 0000000000000000000000000000000000000000..cfea31067567f9ce0c790373f863b819c7b9c8ef GIT binary patch literal 4548 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

    GTot>S%cX4WPn5Be7ikzp9 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 RMqy-_8TgAN0n}vA{{ZK|-RA%R literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Connection.beam b/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Connection.beam new file mode 100644 index 0000000000000000000000000000000000000000..6bc18e816ca0f2d0c28f51a288db0761f52b9d06 GIT binary patch literal 39792 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.ConnectionError.beam b/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.ConnectionError.beam new file mode 100644 index 0000000000000000000000000000000000000000..f4644d624119ba174e5095993e3b902a024ac53e GIT binary patch literal 4544 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 TNP2+@?sEr#JqE|K4^jLI3 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�e5ryv;jhKnE{$w)vH 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 F{0Aebgn)bkiWXN? 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.NoPrimaryKeyValueError.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.NoPrimaryKeyValueError.beam new file mode 100644 index 0000000000000000000000000000000000000000..6018523d9c789f1e486a5a137338d1ddabcddb0b GIT binary patch literal 4272 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.NoResultsError.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.NoResultsError.beam new file mode 100644 index 0000000000000000000000000000000000000000..a59d8fb92c31f0a659617ab2e4212c18a4069656 GIT binary patch literal 4228 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.ParameterizedType.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.ParameterizedType.beam new file mode 100644 index 0000000000000000000000000000000000000000..66dcf5a42378e50a135a0a5cf13862892b5be6e9 GIT binary patch literal 9288 zcmeG?c|4Te_cLP>Qy60>Aw|lXC0R1|>|3NoW6V65F=nP&8kAI$Ey|XVC|f9H38`#F zwxUvqY@t^rOCl1#XYlrY-|zZ+-_PgU@BQQVd_H%1&OP^>bMHOpJoldGn%Oz3K_Hva zMy7@~h74zI2n4!mX=!PcOVX4?@FUQaO>qp0vOSiD^#vFJjSv9f_xe+TlNbzv>`B33 z(y z1V$V6w{rD+0N&W61PYV3+~WccOCot-aXxe|6otxWj3r@yz;6GBHkY6hflMNh0X#^5 zWmqa|N?hVUpuZ;!wm~4q6g&XVl{^FjL4t|>6oP33n7E+GBnS+(2?>?f<;W7@LhVQ} zN^lJEVA6oo&anyCOp7$3s_0q{0Vo=c0&{z`IRq@+(dJ07prXyC!Qvzu2Id#g90DMY ztuzFh&WYp^gWgU;!cbGv&}y`~D%jqZBn?9$kkZip^+;(n2ONz+%I0ziB&kx7NOxo= zhln(sgPkMzIZ#Le=mc9X1PTe|Lh5qx2#BB&0z4>$AP+y3iyv(c@`7@q(B}5+QUGKp z0p${0?jZz$atX2JK!RO`S3qD*sL!Q4$PXs0QvHr1?%jGO;oOdT4A9?5XS$b1|U-a&UAoASHTmoWUME_ zQ^kqm$zWk=fC}B4LScX!tppqe$P5*#Hw7RQ{8T^_qN@O)>8X$i9xIjK={kl18lf`a zhlLQ?>^MOIplEiD102pzVf+kav=&DpGXOsZ>)$&IHYUM$*%7SH4HnAcS@kbg0F4Zg zh|9x(vgh%Kv9WPsf5GAW5Oo~}gC!BLbb!9H=s#81HOs77Ydor$77R~e!RY|W^Z&wWy!zAH z3x3D{L3{u9Rr%>o;|~nvFW@vf{`9o}VW+_f9ARQf20zth{DI*uF9rwbGS+~n9bYxJ znCuE;EN@SjzXX4s`TDI-1D6!0ug{*ipSDH*18T>%zrWie z|LgDW|EuP&r=S05F)KS?UT_meISSBd1U%M*1pHJb==#&H_1}Ea*dt({Hh%2Du}rZ07+Ck{&o56}OUsWk=n+c*IGY|lQYOMppuwJv4| zhL*s({EyQ($5A?Y+4Yf;kiw|eYV(;(dEaW=YoyMk%7Q~Swjg_g_%E07*`lun*PIRp zetaMtyOdSgfR#YdvYUdl#K;s3or-0VF{_a)8iq=v-~c+E#qCL>_<~>>z~Te3*cGr1 z0G%Ab;spWhNyMxeED@y3Ne81&IKbz>chF}qsELOc0RmYw8f*`NNbT^uJhtD4(qkgp zduLWQEriqCA>YM5ml$K|G76QsirC!lq>?Ty6dwGgKtFn{^9rEXYk}UnaC!mO7tqzc zk^WSOm&?Inl5%OXBcQ&Q^gOTIKE_G!%53U8|6bOWBXZGCwUji@v3Pct6sq-NeHvJ^ zZXVKux;h7+q}A(|yd=7L_@EVzgsPdwJPv@CdPo&Y@V&6;=Cg??tAfIy*TTvTWIi<3 za1}<6&2Q}==;N!5M22%-Tqo06pzn9ix9McM;gGxa8|ti+hMA1yxee!xSV8Vr9W>B- zAF5fQT`C#GfZ(ZxZtt|4lS%L-bj)z!7wyel)@#r1o^oAVi_{e_x%wo4e@mf7(#DG2 z-H?Tjv}Ekt^2)gA3t+7Uw^8ev8W|6 zjN5GoshaEykehiceWp^r_fG25YYO5W6|$XSYg4N}(GT%sPzRzMBo12|nGEnp5go?r zuisQ``uw#sJ2R6m45`}Z=%xgjD4!{{zNIt%R{cf3*_(zUuWiRZ7xy)NaZ@zbd~d4| ze0?Yn`-p#B|6#vmQEju>NsHU}N2Fq>qcnY!YqQiwS}PoD+mdEJs}Rm9_pc8meG)Uf z7;OGYMuS$;Q4yS;pxhUiUQ)FU?uIyHU^;BQ!Lh_n#4qB~D5tD-QF2+`qGyVKgRF_s zBS490|E#p98*o+@E#z$ba9=G@WE0t@{yCQQB5QvKr$JNoWZfFZ(Yw+5-~Hnxr#pPc zrQg(!I7U)=Eya4Sxeyg1f{BDWzs2WuZQ>C%p(XY6-l%3F!S%a1!!91kq}%&e_Z%*G zVK6Ifc)#OWcp4#Ed4y&?WOxJol!%2SC?`-b>qAm=TdXl#a}j}%i~-qOHdZBG z&idW$N+!~%Klz4iM7PFBV{n&KVtt17fg=^O)>7sTd6{F7x>K%Nylw?%I&zp7evv33 z|D7l;!cF;-lt1a=qnd^7hRlwzCd7dcrVPe+s1^Y?Ix6EdqA z*l1GWC(#8_3qpaqWNmPK=7uE;rA6Tn+!w<3aDOTkif$F`h!=aD7i~V_Z~B(2Y z@u=LTSop;@1kvvn=R~)7wYd#EZ3zCrvO;-Q!kVagm1y&vXa9$7IyrJBubg+_5&MK1 z;yX4!K<{N{P?e4iywuF19?Qt0ys47&^EwwD$OaQk_H=6=>gnq%-kdv#KSu_C|>fHoPK? zx7a5hd?9rQdNeW>J0etsoSzu?X4?=KoAR}toDAZUU;e_^w8lAHIJ+sQ(Pf>|OV49n zLDt)4zw0xqRSTzXk#l(;TS{t4XZwkSgh712UeLMXbpEaB<2tp(3X4`;xzh>7yawA{ zP{B)<*K1xqtNd!VGa_g%E61!_V$p6 zJHJhTIkj!#-9T%lyj9Zn9Lw*ymLUgk#S0bf9rPcx{(9@6r95hX*jvRuA^C~s290yYm}=+8XbpszgqBU$kRbcz?rto#wz??X4z_?ZkJu= zw)MK|ZGvt{lWFwQ#oWgCSXohgtg#ur0{@<+h&pa~<(YzD>az$8xnt|w#}(AGRZ`(94=TvQ&M`*;r;{6u&aJQP zsl@4REK9@KJgEztZS`LIa$674CQUI*>z1BVthvAI&6Z@??y&6hx0I50j>q5For|CO zBm-}~I&;!qq1WHMMK|=I43`{Db5qy+W%Ilydt*JjXqZevQm+4b6$u$-MFABnu0kQ( zD()*M=ozNz%)XCa#KzuMI%>3&BKR3ey2`xM7mzdJRnTFDiW9I zIe-)-!aiy6o|_Sx2pEvd&vFQ&pCt3QSA3qFiW*LxH+XO%_nNNuH4k;!_AG9a>MI#n zc9wrs2ecLh89a=jWIiZn7Ums#Q8K%OlyR}|fsBvqiNPbHS{EeJHpZAS&?2{=P)MGl z;@l%XXJZDpjvSX?Q(tmsbCjdorkzDhQPJ|OO{W#;2B+H4r*CTWl)Ch&^&x2+#?MU3 zbErDj#j}P~D7EEF`Ll)3L-IpCPPL~WX~ zSbds{=+cw)q0;9gN`v3aDv}+h;HTiCJW&4a>L}-$sM-l0UA=`5m7!7^Oi1HY=;5M6 z4{ixO-hdWBAN;nHr|d27F5heoVNaIykbEfi-0KL&hVdPP=L2Ow%{7Ifzq_@bc~+cN zYk$VVxcoKs(%AvQkB8i+@F*{+ZsE7@)pvR|+TLM~%}svc^Lv7D+BKM19TIrL5P73* z!T;>kV$?WI0vtQ zN&+G?CBv~%ed1GbfgiM^C?ptR2wzaf-bC!ci#>~*Oj(77EseRWp?(!j*Dq@;n zY7?8b&-zu$hX=+rN>1(~BD#eT?%$3FqgwVk2J{@y7}PbQNX6S6N0XS}=K@BqbB~oR zx^fFVi)5;7dEJ|a$vHmGH`86Rcq1@ZG5Jk>V5aA#B+kvzcjXrvK4^|@)tW-s+!N~y(@$~P*b`kWTINq&n!IgMr)#Pn*Pq#JNHWF?00`8 z(p#&_&}mX%rsqD7YK^`@VA648HM26J(=)dwGmpR1Oxkrf`5*%lW?uq3@wxw?ewEef zV_HKhw&KK@V(Ax5_g=}ft?pmvf*?2g+@~R?e#Smv$Ur$5Jbm*6%U4w}IBx*w1JE!> z)fnK;3Cdc#di!KGS^{G7{`k4Pe9r?5T|wla6TDb(GKCCyv!fNOKmGsK2Ex{W_d>v% zDQvpluw{a)Jn;TxtS}TrLMsxj>%$FJIKTu&akp|eaW_LY W{`)%z5cUNi5FhbtKfWahH&9go literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.API.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.API.beam new file mode 100644 index 0000000000000000000000000000000000000000..8b835d5f0362afb29c4c745b43568dbe3a27a970 GIT binary patch literal 21436 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.BooleanExpr.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.BooleanExpr.beam new file mode 100644 index 0000000000000000000000000000000000000000..e4cb08766c8133904cc5a97baed9b2a9bf28c490 GIT binary patch literal 3004 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 HgCPF{Vw&n? literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.CTE.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.CTE.beam new file mode 100644 index 0000000000000000000000000000000000000000..59b6a03137a715f3ef408b7add71b9df24dc3a6a GIT binary patch literal 14008 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Combination.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Combination.beam new file mode 100644 index 0000000000000000000000000000000000000000..e1a0ea85494cde3f66ed791a0a4fab6c64bf8a2e GIT binary patch literal 5136 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Distinct.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Distinct.beam new file mode 100644 index 0000000000000000000000000000000000000000..4d1e565ed57e7d87c9ab4bea6a8ed50debff298d GIT binary patch literal 8612 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

    9`Ss0; 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 UhkZjaU=$5GR{bFGu`u%cKWa%ulK=n! literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Filter.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Filter.beam new file mode 100644 index 0000000000000000000000000000000000000000..ddc08dcabf6876bf28e4b678585c32981848c280 GIT binary patch literal 18620 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 O_6rIoQb0=b_rCzgP+PD7 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.From.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.From.beam new file mode 100644 index 0000000000000000000000000000000000000000..899d447bba4b4a7dbec3616106945b3095949960 GIT binary patch literal 17864 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Preload.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Preload.beam new file mode 100644 index 0000000000000000000000000000000000000000..519557c40bf99cf9a71bd016fbe31b51faf6b964 GIT binary patch literal 16844 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 Y0RGAX^g-?lA$Nf=DnC&$a$DoS095<{)c^nh literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Windows.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.Windows.beam new file mode 100644 index 0000000000000000000000000000000000000000..d9d2ca0d4c48bc183d1c8a08d3b4d1c8c049df91 GIT binary patch literal 14780 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Builder.beam new file mode 100644 index 0000000000000000000000000000000000000000..f8a07da680dc85313614308bc9ae05ad6b0b23f6 GIT binary patch literal 101336 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%0DL@-Qkn6JYwI#t>2xRfU?Z;k(yF2GLK}-7nk+C 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.ByExpr.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.ByExpr.beam new file mode 100644 index 0000000000000000000000000000000000000000..e21e1ed6556b170a6550a52c31258dc63db78340 GIT binary patch literal 2896 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 SDp?_%TQX90)3z?`3RvFxc*$cN+t=L?=pW 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 dorDHNG$8&zp=1Qfb(q*Oz5w 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.LimitExpr.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.LimitExpr.beam new file mode 100644 index 0000000000000000000000000000000000000000..8adbac870cdbbc76a27932c8fcec9383ac7b7ec7 GIT binary patch literal 2936 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 ea~A;e}?Zkv=_6;l76H04971Z-lHjY_C;=p8~O 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%0D?n*=MP(Ky+ehhQ(J@KS_#=%+etCIc+c8>Jop! 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 ZtRpt_#oyYlvl3p%A;cob!pFk;e*k{dT$KO- literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.QueryExpr.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.QueryExpr.beam new file mode 100644 index 0000000000000000000000000000000000000000..fa2d5b0357c9b27b9a3a30190043374b813512e2 GIT binary patch literal 2812 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Tagged.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.Tagged.beam new file mode 100644 index 0000000000000000000000000000000000000000..c54d2f88691e95f01675d1ec4826e8f6b2d63319 GIT binary patch literal 2728 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.WindowAPI.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.WindowAPI.beam new file mode 100644 index 0000000000000000000000000000000000000000..c9dd8e41203f7a304d4008b9b490761eadc14a27 GIT binary patch literal 8084 zcmcIp2{@GN+n+IFM#Uie(%4eA8Cfbzkz|QTSz0uv@nV?GECy*I;z-uSAX~PGv0}OtL1+8WNMsg+O#q+| zjp56sLOyH`i%aGZ=oG3C#G;bu{=@zdhd4DU@I)Ym_`8xBTskM2%%wp@UkaN89MRbj zkwu~hS@|-^YG~={h~0n~g$CKOSPWJ&6iSAeuwN@WgATbuFzDk)p>iNrwI7AW<`6?j zR4zoIlKk_jq;Hp2REXqDppileGzvYL&Iy>3as`H|kQE~YVx46|EHXsrO!qtT#Z8@lSQzzmm%}{SRttqEV3Gl!`h;RPym!cp5^0&q{OfYGLu z7{MZkf0RRG`BngyL?F?U-z3ped{=-;0ZjTkHiz#6Flj6jEi((;j2#ZeXNqF6R(1pp zD=}GVGy%kemgVmRLh?8yS`KT4vy~Q-wna%#xkt%;b@bSVDkZ6l32#8w#dFaqf1*kSams!qU zibAaAu-1XIjc}kb;n5h7Fre9h!~qEbngd7%5E2lK%K<`7^RNukHWb!HS^!=V&^#Ce zWI4@)0bveE3lNMi0i+2C{wxBdA>a@Q6ELbz^G0A)0|fgAxe$Q^1nc4f%>@MG`hZjc z!MH9Um1%wf7?lCRF=|iqusrM^#$kEbr_wa921Yn;SRS?w^RPT@59VQcSXN=0hevrp zunfEwQh?x(G$2Ujz)M_)I{s4VV{lqHy3fd<}T`1NHzZyNe1q zxd0&^3Zz;R5->9a`IdzElZ8>t_xvlE5&JU<3$8_`QY%Rah|c^WzX~j(K$88Ffkgxe z3NT`S=3aq>Fr0vY;9%h?43)nog3lAo%UFYg4#pJ%4}vWUVbkHWfuv&*9?A#JY;StjZ`wBUru2cbRv?G~ z?Moq1!@@z`hJ|<-I)li9I9wJzFwn+90FbyG29ZL8A2;Bj zMA!^2D9=F%54<~AR5l(2NhkSH{P1fTejFaq!h;QAa42+teJBL1GoBg1fasJ^Ja~Fx z)yOOy)4?%eO*!2I!#USsLdOsCwLZ{x6ZqoV5Ed~J5u*7ORg`s z^!ZxcxN5>H9+dJb{<48x`@Acc!!{InFvmbf1{h_}uf@ zxaZZ>E>qa=Ey;$!Qt2BFQX;wR7p(ue3U2$1PDc=W`lYo3x~6+sx5Q-n@Qjf|f4t zsdjVsO)CCsIobxg`?hSNcLd!vir#zfer`18cp;DfI7c&BLjE4%_GCl-dv)LSlV(GH zuLDwTV%1oI35n$g4{o^0y=`qcK8eVz@F+WOyr;-)PmzbL*-)pl=(>}$PtLx1rYf-s zO{oy>m4CQq`||soLm7J52hH1?toH3{Jc^2X+cq3QZ37ei?e=2A5-|8CRCvE{L^N3&6glr$ni!3u&iGKiTlP zB5Sv;{prLNgMOZ+mM7PlX*J&7OW$|A#O5Kssv(_qx=ZsEJ;hh|LQC!Crm~VQ;X`Yp z=pJwLZx&Q64dC?jjM^SFBHz@$W1EdLIkw~w@m-suZJr*!{$PKLP3MU~-5zdaQmQ@E zc;;80iRd0|#cEc4w^R42vNvq3))miF=9%|sNo*p)cz}|TR%J8ysy(r;>bg?r7}QbU zw2<3fl(Ba_E6{D?Wg3QBDzSn#`}Rt&klTK8ViD0D-e=+ubgOh74U&0zY?3;%f)?%e zc@W;rD*@+#>em7A0~&rj>>9HUP(-zU#s{zWnB^RcWbTYLRSx30bSz*c4K zxqV04;K6Wp4qIh>Fh1&V&r+&aS6T_z(#W{G=;Gdc<6k?ToM?JlU*I|XXb1k{dLyTW z9c2n~r5DB=8pCq8Gz^eE$}gPp?C_1cT?=uK?_xnW3SxE3kJ8OQ)Ymq;;CAOe+~_QQi%TGFl$ACWvI#8$yf>POD{4%>bMW*sLF04IE{O)eD>gi(3)6O|V(T`<+a$rKOgY9trBc-47}bKJ&X{zQ8CkwvJFTTxb>}chc>~nnm#o zsP*eAc~6c%-p&n`F4{eR&`$<+d1B8?6EU{e?dss}d7W?8Wo#>zePK4VA%#10_O+hO zCqsSn>}N0J9FPB$F7D0UUfk3E%ro%HxpV{d6hhyid!ty$TQOyYuGUaywlr zX>GXrq==WY>@ue#rpqhSM-z31Ux;?T>8)>`S-!R_p#G>~@qN?c21kWf%P02^_nW^P z4Q3n87+}1b*X7~eRS~T_%f9m&WRYa1y-dz#IMnsaJ^6MQR40+u?QnVgSpI=OOPnTWuO0tBMB-B+eZ_BuVx+5Md9$nvX73Ze( zKy7i_!xIf_-(T4`Ol+IUcn69ogUm)CL=V9=LNz-y=hga+Ng8%CxoGD$*;o&*eQjaCy#)YmBbFq)}Y#~}L z|0MZIAx^aY&`=fq^wyQVnE9j0Hv=v%e%{-YKf7S3c2 zyPwBj)r3B+KkP_xW!XPQW_%oYp2xt@jH@*x-RyG;Nb4_MLThp5h2OlnjMG2SJgC(Z z;KiJ8oD@kR1c|Ro>F{dOaWinv-%s!yu*i#Gh(FC5xWD?Ah1vB%RC?+XPel%f!Qe>>fwW30aEG@l<36Y3d-Jb%z z_N*jlJ{H=qWVZcXQSXuZFLSovNq8(bKL7c%T>3P_CP4YF&~-(d zHd5ruXEmPp={;w7B#cQo`{3f-L}k1w;lsu2sNKr#Z#Soo80=7&A&X0PU%8?a&Td0be_$(o!cT#-Aq8?DWkw`dMVXtmcJPH(Dk zIhfNq@YQAZ=EC%wX}C~tzKMlFsKMea6GfFBo8s8}u}}LjlB@2PolBItS@xN z#9@$%D}N9xBh9*RLt1cS8%tGAQX)XZY&&X0M2k&mEIadIQi9kH>s!^wj<@Nuy~^*K zZ7w+>yQiqr=Pdr1GS~XGsfhQApvU1$X~b~)nro#xNnxuWp5JLPQ8r69;#zx*4r|+n z-a8)`JvN$Gddk#Yv;&G_iuD@4GT<-i<$6wV-dV4^Qcqw=cv^Yq%SYW%Oa{wFOQ&2{=i;v zP>B_C(;q7BJJ@lck2Bn?r1wXBv_jP><@mURZ`!ev@+0?-)g&B#H9)m_zxci1$^qX3 z^R`s(-Rsver?=Ik#=GrhZdIe+7shVuiQnygRiZZ^8Jm%uq97)>V3v&*FH+~h^7XW> zGG{XkW`tg9dW!7jntPvn*(iHicl}FbMvQusR3EP%aYl;7$!yIGN^ZTitKmtj_dE$= zM0U3N#eHdPW27)VqCD#9N}eS zH}4*{P21=l=MVYz z^W4ApR=F5TcmJR#uS$A}^znB`Snj^z#MGWly1^BH@BIvY+bx8Zv+ru>K4L89kG2@r zGQ7*}J{;4NjJTq;O*LQmY+v*FQ@xE}O;=#fmtTQ2%1`;8^{B`>GJH?1VHL0Sp`$~a z$i9{xoD@iBQB@+YGq|~T=x%&Y^~A36Lv*iekzIXvOG?KlBp&sDtljaHYrHkaaq^yf zo65%Yc0H+C$!9)+tJ!JiCb*9oN-9uT$=m&(}GJ! zOlz8VG#_2cjJZoME0;PtAn87GLr3g|)ke|NteK_cKjPY3*C%wxx`v)O&(dc)Iu~@X zt%@}=oiDVlJzyB)v+Aap!Y7-?m`cYlG^*cn##Pr(NRR90wKi7KIx->y;X)M$jNN;* zH*Q_~X)m??{OU31898+R#?ih7TYHyODKn_?u`5^jC#jCzeQ}X?J!JGkkGh{T*)G5( zV9%x1Lv?$vxvV<;fmoQZ+PyNj?rkNvtavh}cJ<>Yr;a~s`+Cbng*)x&UnWi?|MhZR&HPKs%QbZ7OE^`I0Y8eKT;cXd64{W)_U}XA{WamHbF*R7{|O# zM)Qwq`CY=3Z)F$`?n!XS^HxbqbPI`We!h9s)ULUS!OqdSrQX=vlhfWkK%2}j?X{0t zaic>vK<$Hwe*XYs@4!pcxSi#75~b69cy9F>6PFqIDzda#J*Mxp3m;Lmp7&&j&y!`d zUg_?A+1C5c_g(p@`%v=9<=30S3hNNXe;7u574eTh^Woi^)sLdRf?+%;`5vAHY`{qJD^^bos_E@-}xClrbpB~x>&!Y_KXPn zb=%w7^Co$g3$l_6@ePAvUrSmyk4e7>doonZfAv1({sewmNvGb}Hr*~S!uT7^(}jm) z?duK&3wISdyKmC8@JQJ^<4|G0?pyNZ@|=dWx}nWA179fjZhNMTrWq{Z86|cU9Xh?} zkoI8EtCU>7{vGe>1Z(el3tFt4FT9x>2^6;RA>4@r;FFa>fM|WdU z=sa~x3G&@G|Es!solA7qRZ2VuYo%oDE=1s~q z-tPR|(MdE4nI{Zd(6qpxLHG&*USMJU>GsR7jsBmy$Y1OJgMfbQ z{QTPRuY>xjRrF5`eD5v&S{c4Ap{Z%npVs-WuwRGzbLZ;!?xq*{XLr9gJ=FvI_f1aU z^{)=!zpyA%y}I8=j{2*0{{LdXUbLUOgTIg9Z*IqQpYgw7^S{3#)BVuj$Npd1k*N;s z?_K}Rtw0HSx&NxkAG^Z8H~cUBKECywfA8pTE{gC}_xkrX|ApZHS8x2+{(k)}`@sLv2>zRr!Wd#SFglo>m>^6)<|(EE zvk!9>lZ$zbS&3POslmi!oH1Ms3FC=bj8Ohv8yOf}7siDBhyjBC6GBRSMIinMC6F@P literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.WithExpr.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Query.WithExpr.beam new file mode 100644 index 0000000000000000000000000000000000000000..db74135542ead00be08084717488adb4fb9228a2 GIT binary patch literal 2652 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

    C5t^VrEr{3EX7(lRxK#+ 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.QueryError.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.QueryError.beam new file mode 100644 index 0000000000000000000000000000000000000000..4b9d6aaae65ce639077353e946c9b1aa914d17d2 GIT binary patch literal 5228 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 E0J1L5jQ{`u literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Queryable.Ecto.Query.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Queryable.Ecto.Query.beam new file mode 100644 index 0000000000000000000000000000000000000000..e0395596f3da7aa5bfcd6f504f04ad95fa0dcbed GIT binary patch literal 2448 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Queryable.Tuple.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Queryable.Tuple.beam new file mode 100644 index 0000000000000000000000000000000000000000..6d8d0502e2d56782b52f88e6f3e2945eb4b02abf GIT binary patch literal 4528 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 W{wFXbXhlNGkK})Bh`t|T2mTjW{h2`k literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Repo.Queryable.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Repo.Queryable.beam new file mode 100644 index 0000000000000000000000000000000000000000..03ae7fb4cd9a4c26090a645dd18bb8ccfca4b2e7 GIT binary patch literal 37620 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Repo.Schema.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Repo.Schema.beam new file mode 100644 index 0000000000000000000000000000000000000000..7923bd5d3c87b1ece5380b09796ef94a6a2b1ed6 GIT binary patch literal 71292 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�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≫#eWBj^U@nV>0n9XiKF<+VluxZ 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 ZU}SLMU}R|F0FE~pC;-L4fcZZJ005zT-8=vQ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Repo.Supervisor.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Repo.Supervisor.beam new file mode 100644 index 0000000000000000000000000000000000000000..413dac7755ed3885bea018a43b433ebcfb3bbf13 GIT binary patch literal 17372 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 F007iWCQ<+Z literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Schema.Loader.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Schema.Loader.beam new file mode 100644 index 0000000000000000000000000000000000000000..f86093765c251967ad59fd85a20bf99f7df861a7 GIT binary patch literal 7268 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Schema.Metadata.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Schema.Metadata.beam new file mode 100644 index 0000000000000000000000000000000000000000..7af1ebc94ef575b14c4960b99887524211ddd8a5 GIT binary patch literal 3688 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

    H%rdq6sF_kyc!y#b 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 aDh?%7sY{x=WJeE4SRn~3sZkP=68`|$Un3#_ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.StaleEntryError.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.StaleEntryError.beam new file mode 100644 index 0000000000000000000000000000000000000000..bb3be411682aeaaa206f88eb7e1a7f3694b2e13e GIT binary patch literal 5024 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Type.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Type.beam new file mode 100644 index 0000000000000000000000000000000000000000..3a93840c660edc7abfa7e1ec18aa323602ee4c25 GIT binary patch literal 74032 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.UUID.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.UUID.beam new file mode 100644 index 0000000000000000000000000000000000000000..5fe23507b7821a59727746c538ea7b9675dcf462 GIT binary patch literal 38748 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 GN%${T&2)wU literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.beam new file mode 100644 index 0000000000000000000000000000000000000000..e054ebe9d4239faeee962ad03238cca8774c1607 GIT binary patch literal 20560 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 DC!%1m literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Inspect.Ecto.Association.NotLoaded.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Inspect.Ecto.Association.NotLoaded.beam new file mode 100644 index 0000000000000000000000000000000000000000..5beba4205802e43eb1b3b35a7563007e72e882d8 GIT binary patch literal 3160 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 Sq7U?00^s)$Mpj=S^nU<1U>Mi{ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Inspect.Ecto.Query.DynamicExpr.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Inspect.Ecto.Query.DynamicExpr.beam new file mode 100644 index 0000000000000000000000000000000000000000..46be24100eb15ed3a0207dc5dd2f84b230f94c4e GIT binary patch literal 5844 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%0DL|gcI!J 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 P9`QJBKAbjzBl!9Qhz;#u literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Inspect.Ecto.Schema.Metadata.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Inspect.Ecto.Schema.Metadata.beam new file mode 100644 index 0000000000000000000000000000000000000000..1986bb8691ef5bbcaa10169257b1cdb702be1ed2 GIT binary patch literal 3384 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Jason.Encoder.Ecto.Association.NotLoaded.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Jason.Encoder.Ecto.Association.NotLoaded.beam new file mode 100644 index 0000000000000000000000000000000000000000..19dde0020cc14dfbfe51621b985159746ef78684 GIT binary patch literal 4116 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 G(Z2y(p=9F# literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Mix.Ecto.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Mix.Ecto.beam new file mode 100644 index 0000000000000000000000000000000000000000..68098b99229f06c72f59d8cecd8324ca630125f1 GIT binary patch literal 9648 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 ?D&OQZuKPptp&M80rm9|9ULs`vonoQzHi~8ms zx?62*nc!#AV1l{&!SK0{dP-Blm*?Vkc}wzd}~zf;cizy0L(P&zF<;KQJ-o%PkekE&RDV?R~8T)Ett zb+2;cLXWR2?r^;Ghr%9RB4r#)-Ph~Y-)@w$vf(u)YF}#LJJ}e!`dbQx4mEji89I0J zD_-8q9W@*eKB(i}b#PgvhosB%lDQ_?8Aek@c~h#E^UlZZIBxh-{1ilM=)L41tyTV} zL9=7Q{rSG9u3U7Rr;uNogz*?U?&)u*amcWis#M83lprEQtj8D5&jz0kSI=9IY` z6&2oXxnNnd?%^YbHSJ=}kD8|3x!LoSqwX46qiPGTudZ4Lt(AF|)7NodO=mLOKdY3j zFV`KdX54nuS!1B@sJHECg29E--G1GViT!&sgf9IDl_Op@Cog;Vr2#Fj1=QWl6P-(mo4mm&&s%y?%KKjo^!MIyT)yt&Hj&` z8JE)EnXPwtcRn>XyItPmMyQKNnqWXIxAoKQR^>gsFY$#xRpWP?s} zVc&Ok=}kyj2Aw}zyPRu+>z2G3DIugXLN)UY+lsIO#kZUF zyuOzyv|l>aeL{KHqicZ{+ZEI_;x#|54m(hB{aR<948D&qBNb16b%*M!Cl#1<`G?$iQeElt+}qBwqfLA_1~U!O8NP2tx2yg zeXi?<9kDVUB{G&Sj6(#y)6LDw@$Iz|0+)yPnzp=JpG%X8Pt4fRSode1KSTA=@{P~? z<fwjFE(AVwr>He{_%wLZjaUS8S-u^g`YG|6bIe>p)lH#Q1ex3{+;#N zOMjFqrx?-O?`WNidgLFQ5xhHv-u5JZflA?4mAHPA(uQ?k4k=W1jb?|32B>PQ65{sX zO41$_U%EZS@#ZT-pmPQ|(ZbV_{D6A)8yy=l}S% zbJ@d|@u-YV*>_CY>DL>;g zy=o`t9@DFda1B1N|5o3p;Mz>8;>wN=f_I_!}!g${)}DUbJHJ$ z4KF)UyV)_{^Og^%?A?;j>3xc(CC9j4%LW}A9vmU|o7ioKKUaUmY?WIx=h~rpG+fA| zsfM+9zxh(xL7s%6oRga-2Vc;NUZkb>x#9IOSi_J92a`*_MfDtR-o5rgx6-DtWh51| zXFC_3d*%|oTA6fy!%%WGJ;^A?StjS_z{5Jv3Y2%wq7^qe<5ybT@~X_@SL_!aqw4m& zsHOJm?po^StCe5bajxq6ki=45mvwD}a_L;QiH382j#-R*mTp_qb7NE4qCJdxqfcIJ zJbTlcK#RB8!X17ix{t>y*y(-7AHN7mj`DOyiET@9$TTmZ= z29+En(HmlR)iZzOrB|%_ytOO(>zs?et#)fnEU4Vb-IlPXo}aaGQPH-Oi@xKesoNer ztHCNit>1g;!I}X^*nxEy-(v~};?^3JK0DeNIp(<_Gb3hslJ?ai&%-RovTMwwLpir8 zeT8do33nY`N!56@t9^@e<~Y&b?p*iPwC7LtyR7jm_DA%r$x{27HWBDtlp!GB!D=`i z4D9malyS6NcYP5or)gu-1zYx~X3X=4M@Z=#`V*nB-i%#Ln3I*3ltTa*K%| zz~InSk))@a%b$I&BP-Hfo%bim z{gFS?EPN|AuUhUg{Pts(;(fVmk8kydxRIrUALvLi_PA!>bKF|Gs&T39k6k4L--t0O z?X)W=d#Yc`?(Da@s8mo}Y8!L(+PcpMWEHLUo-;w{v-FW2Vz#Wg10#K&>vlf#??3xV zzO!)7zN=$W%PYgPA9w{FXu~$=5aXAn{?v_rklM4MMc`s#WIHbR2Xtur6SZwJ0;#GcqEb?b@I?IQm_TayfB1P4KJ0?lAS>rOQP_Cy$hL znUd?PEXyy7yXy#tI zRwQvxp1%HScOUg`e4hvD+ui-SeLk7etM*Rb5G(Nylvt#+cNtTCbV4m2RmQjfdLd%0 zr+9%GgZAl*%$pJU(vHtNQX@R47WrMi0>8bKb!5{v%Bh$wst-Ng61du@Cmk5R<=?ws z)O7iDwSE3jb>+Oxc?FO5)k(>@oofhR*LS?Rt$Ex(K|3#`@3t?O>Gzqyk$=)3{&@Mj zdXsUdZR}a13)85042HouVWw92LyT|PgHBp}q=Z{PZH}3N|HfHDc zeqGh6WpkRotdZQ|mD-pzuORi9LGNUv`}zIZb$y=jyV2OIbw+u`FWOe_`$_KX3i#0w z)4!UjZKS{RV@I0_>W?bDe)CBslQm~(gPs}dHmwm?9K&}U{_xXG*D1rdHazWS6Rys- z^W^p|6J=rRG`bfCR}OD!LA~~KS>;-?Dzu5XvhGQS;NxEX0Mb#ruhj~**6k}CJEq!# zxNpYZ+^{Gbh6XE72sgRQY$|d!d#ZaZcYaH^Y--`#fc0;NzuMMJ_4%xOW$pJYjXxW7mPqVxFyu}kRQN5X1&ut4E(l~mjZYLvT%EP#B#YmbSJLab|q&8KpDYv{nv3Swv9NO(OXY$mKteZ>X$QR?^ zjP18s@?u=i?>Xx`@3GF(l~tc$yAOoTzp;*tNz;K&3e@N?j9jCh8j`wwBX5(1P8UV z<7xMgb6%}|yu0=Swe^$Z9m>koQsJo&n*$-22p_TWD$A|-UovRrkq2N0?Zye`gX5J< zWPd85n^cyv%9}H=n0StEBdx3ywIS-%Kv~gh#b-6?^-=1FiTNGrdmdwawRr|7>mKSR z?5-4CJKTVA_{#a>kq}WWb9esnOoN`0>lczgN30CC-YxVDIdd^R^|Ms*!zDrG`}UBhW08VeH_pIWi3&(N+w)mX*2xlhup0exS55g}2DSd$qAzjw{)9MJ2zsHK2Q|+hzYR=kEAizi=W>k8T>6 z7$=n^)z{m%p-kBFjQ0aIzFpmBdvUts!+E}&25gl_@A;;M{NcaxNnX3V{>Jn$&261n zM}5lHgxn+YPd%fY_PI3m>Q#5!8aiJ}?7MSAf<;YSE^dynOD}&NG-v7)TFmLfp=|ZfZxHfFP;y} zP#>noC9C%}U8ltCIuVr?p4a(JE|zhQ;W>-GlBkj2isnj!Mui>_!ns}5HOewuSb=(hCp8|C+o zjOeair?;vKot0!)S_J5Y$VLr3XkrWmCO))eGI!lseHCT)DQa1@^UjVC)iJyL-ZKL~ zZ3dZH&npXJRXLhVclNxftUs|i*!NC7`TR+{!qH8~4E5cljbSI9@&)9@Z|{e^zhEeH zKZ-27T*2S@$IF56tsN$wkG&q}7ScPNwb!TECu^+xKFMpZU6x1~IQ_WbYMxnl?3tm# zt<6pSTT|w`OC_i!Bn@2c@>^w1TpYY=%e^yeGLIFk=9T9B8uCAVs5+|rL&xii@1ZVQ zVVB;2^N}f6?|j~UFlBVC?Z+$Zlc?_mDnD4NP-A^TQ01rowB}&Ulv-Y@?eeSowsDFR z-^+DcpOW0X%oLl8zcl2lhbMd&e|xTO@#kMDJo{i-neHi6mR~8+Kn~3kC1ySdK~BHGaivJ}U%%_1VW)Mmd}bt25Cb2YfNw&O z$D=SvF;gu;PiE6%nc<0Zz}Eq>Gv@zWS@geC1m|aA-kpGb&|64)J;dbJ3ae26WTmjAzN5MJcTygHW zB{*+fCT=q>3m1)x!EtZ`TpW&vOT2_5;$(3uICY#VP7|k#Gr$?*OmPcwS~zW#%)gw) W0^=)_xk$TGfRO(uU}UCHoBs=V7OJ=a literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.Create.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Mix.Tasks.Ecto.Create.beam new file mode 100644 index 0000000000000000000000000000000000000000..16e9f63b73fd4c5fbb38d6ef33c2bf8a95ea7b61 GIT binary patch literal 4876 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/ecto.app b/phoenix/_build/prod/lib/ecto/ebin/ecto.app new file mode 100644 index 0000000..5fe2ff7 --- /dev/null +++ b/phoenix/_build/prod/lib/ecto/ebin/ecto.app @@ -0,0 +1,92 @@ +{application,ecto, + [{modules,['Elixir.Ecto','Elixir.Ecto.Adapter', + 'Elixir.Ecto.Adapter.Queryable', + 'Elixir.Ecto.Adapter.Schema', + 'Elixir.Ecto.Adapter.Storage', + 'Elixir.Ecto.Adapter.Transaction', + 'Elixir.Ecto.Application','Elixir.Ecto.Association', + 'Elixir.Ecto.Association.BelongsTo', + 'Elixir.Ecto.Association.Has', + 'Elixir.Ecto.Association.HasThrough', + 'Elixir.Ecto.Association.ManyToMany', + 'Elixir.Ecto.Association.NotLoaded', + 'Elixir.Ecto.CastError','Elixir.Ecto.ChangeError', + 'Elixir.Ecto.Changeset', + 'Elixir.Ecto.Changeset.Relation', + 'Elixir.Ecto.ConstraintError','Elixir.Ecto.Embedded', + 'Elixir.Ecto.Enum', + 'Elixir.Ecto.InvalidChangesetError', + 'Elixir.Ecto.InvalidURLError', + 'Elixir.Ecto.MigrationError','Elixir.Ecto.Multi', + 'Elixir.Ecto.MultiplePrimaryKeyError', + 'Elixir.Ecto.MultipleResultsError', + 'Elixir.Ecto.NoPrimaryKeyFieldError', + 'Elixir.Ecto.NoPrimaryKeyValueError', + 'Elixir.Ecto.NoResultsError', + 'Elixir.Ecto.ParameterizedType','Elixir.Ecto.Query', + 'Elixir.Ecto.Query.API', + 'Elixir.Ecto.Query.BooleanExpr', + 'Elixir.Ecto.Query.Builder', + 'Elixir.Ecto.Query.Builder.CTE', + 'Elixir.Ecto.Query.Builder.Combination', + 'Elixir.Ecto.Query.Builder.Distinct', + 'Elixir.Ecto.Query.Builder.Dynamic', + 'Elixir.Ecto.Query.Builder.Filter', + 'Elixir.Ecto.Query.Builder.From', + 'Elixir.Ecto.Query.Builder.GroupBy', + 'Elixir.Ecto.Query.Builder.Join', + 'Elixir.Ecto.Query.Builder.LimitOffset', + 'Elixir.Ecto.Query.Builder.Lock', + 'Elixir.Ecto.Query.Builder.OrderBy', + 'Elixir.Ecto.Query.Builder.Preload', + 'Elixir.Ecto.Query.Builder.Select', + 'Elixir.Ecto.Query.Builder.Update', + 'Elixir.Ecto.Query.Builder.Windows', + 'Elixir.Ecto.Query.ByExpr', + 'Elixir.Ecto.Query.CastError', + 'Elixir.Ecto.Query.CompileError', + 'Elixir.Ecto.Query.DynamicExpr', + 'Elixir.Ecto.Query.FromExpr', + 'Elixir.Ecto.Query.JoinExpr', + 'Elixir.Ecto.Query.LimitExpr', + 'Elixir.Ecto.Query.Planner', + 'Elixir.Ecto.Query.QueryExpr', + 'Elixir.Ecto.Query.SelectExpr', + 'Elixir.Ecto.Query.Tagged','Elixir.Ecto.Query.Values', + 'Elixir.Ecto.Query.WindowAPI', + 'Elixir.Ecto.Query.WithExpr','Elixir.Ecto.QueryError', + 'Elixir.Ecto.Queryable','Elixir.Ecto.Queryable.Atom', + 'Elixir.Ecto.Queryable.BitString', + 'Elixir.Ecto.Queryable.Ecto.Query', + 'Elixir.Ecto.Queryable.Ecto.SubQuery', + 'Elixir.Ecto.Queryable.Tuple','Elixir.Ecto.Repo', + 'Elixir.Ecto.Repo.Assoc','Elixir.Ecto.Repo.Preloader', + 'Elixir.Ecto.Repo.Queryable', + 'Elixir.Ecto.Repo.Registry','Elixir.Ecto.Repo.Schema', + 'Elixir.Ecto.Repo.Supervisor', + 'Elixir.Ecto.Repo.Transaction','Elixir.Ecto.Schema', + 'Elixir.Ecto.Schema.Loader', + 'Elixir.Ecto.Schema.Metadata', + 'Elixir.Ecto.StaleEntryError','Elixir.Ecto.SubQuery', + 'Elixir.Ecto.SubQueryError','Elixir.Ecto.Type', + 'Elixir.Ecto.UUID', + 'Elixir.Inspect.Ecto.Association.NotLoaded', + 'Elixir.Inspect.Ecto.Changeset', + 'Elixir.Inspect.Ecto.Query', + 'Elixir.Inspect.Ecto.Query.DynamicExpr', + 'Elixir.Inspect.Ecto.Schema.Metadata', + 'Elixir.JSON.Encoder.Ecto.Association.NotLoaded', + 'Elixir.JSON.Encoder.Ecto.Schema.Metadata', + 'Elixir.Jason.Encoder.Ecto.Association.NotLoaded', + 'Elixir.Jason.Encoder.Ecto.Schema.Metadata', + 'Elixir.Mix.Ecto','Elixir.Mix.Tasks.Ecto', + 'Elixir.Mix.Tasks.Ecto.Create', + 'Elixir.Mix.Tasks.Ecto.Drop', + 'Elixir.Mix.Tasks.Ecto.Gen.Repo']}, + {optional_applications,[jason]}, + {applications,[kernel,stdlib,elixir,logger,crypto,eex,telemetry, + decimal,jason]}, + {description,"A toolkit for data mapping and language integrated query for Elixir"}, + {registered,[]}, + {vsn,"3.13.5"}, + {mod,{'Elixir.Ecto.Application',[]}}]}. diff --git a/phoenix/_build/prod/lib/ecto_sql/.mix/compile.elixir b/phoenix/_build/prod/lib/ecto_sql/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..49f9b97bf946ae0af9e172f33c0db03880c4af39 GIT binary patch literal 9446 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapter.Migration.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapter.Migration.beam new file mode 100644 index 0000000000000000000000000000000000000000..35ac54eebaf10e68628c24de2a74e5635763904c GIT binary patch literal 3324 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 EU;RvChX4Qo literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapter.Structure.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapter.Structure.beam new file mode 100644 index 0000000000000000000000000000000000000000..2a216212e591b0d1b2884a9e2a915ecc62dfa9ac GIT binary patch literal 2672 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 SGFgR>;dcWP0A%rjK=?13IUQ#J literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.MyXQL.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.MyXQL.beam new file mode 100644 index 0000000000000000000000000000000000000000..9109d58581496816fb6e26d61d58d9ef3aa27eb1 GIT binary patch literal 40008 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 z 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 EA0YZ{<^TWy literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Application.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Application.beam new file mode 100644 index 0000000000000000000000000000000000000000..1b722dd9dce01c5cd62484648f541807119bc211 GIT binary patch literal 2788 zcma)82~-nF8tzUILfk+I=;8&z1Ft0sC=MQIK=4375D>35G)X5kB;8GS=U`C>K~z>y zM+OxHWx!F;=Pt;h;xXdE;DLzXE-Is}%Hk+IRK|PMtqwt)_nh7B_x`HCzyGZ3ubQ`b zi6;c{+x!FlLj0I09|(ee{`m3Z6W-WBEoQ%E z@Dzmt!_|aBQHU@Mg~jR_lqQvgj>NQRp$a7_6zHLIeB0>5TYuN{*I@2^9*uIzU1|>{kxR36M1`%!N3j z(Lz`}lbiELp2#cRKYfWl7Nw$6^*hpw0*`vbGWj{KBP^GTKpQ5X4}mU5K3@nrQqBQw zik#~RgrQ;x-fk@vIKqXwLXPOU7%r2~7dy)5%ecAXP_Ym`n=9jp_#z>EUCws|cI|9r zz7qsLWvzu`m}ky~?<9nI4g)@UBD3BQfI9jLL|h1pV5mrT5DRrA+fM)lP)GpC4iEo|age6r+$odI@| zCdoLMz)^*opcJ5I{osfWHIDh+%{s6{*idIaIdryI1SA0mm~ud^KiB^e(dF}qA(#ea zM^FP^;z4RdEh>=+ogf(yu>s&unNRxM&u@-d1aOFG&;i4Eb_BtMl3iDJ4cYk~V(A_I z!1)7w=%)d44K!{Jg$tn@(~s46?sX43(lvR+zT9pNo1JYe8iyD#LQk2sj3P@SpPg}!!0}ChxYH#v79dFTac13E8HeG7f+i6ouCSB=NAvmJO)Y1q- z%@~1|l#U|^2E#QTr~$wEML(@USxy=&H&Y#z5Fv@3_b_cWvAtE?U;UyRJ64t}Zr^Q?LLlS(aJ9 zgXgHq7@PXH)Xl0HV)@oz2p4jObTwyH6n~WyF*)nfWjm;tcPe}HEkxo}i==ku%bqCR zR5xmMZPmWINSEPHY%g~^Y+Y~Xkx}$4?^gEa3z5RC>Pd|9s(1PM*iAJn(w7!ou&G+3 zQ(5P`bk&q>5yXy**x#Gk60@s*{m^8*W9-5iq2E3cM=-YUt=$_^Z|rIMMf;a^hS>#~ zvlVM{x8A?`HrBKBmHUHB7hgw|&U2W!^Q70++8^hH9dr#s>MwUyl{0sY_B~&BU#sxl zFKGGu$*#0T!(S#I#!uAl2+6ngi7ZzGVKWR?o@ql_^Nobz@BT>9Xi?nV!a<9P;R4cf}WiDm8Z$#u44# zg^km)TsGKtd^7rfXw&<8e0k-8brB2S={(4w^SLMaiw=E%$kDEypIW}9YE+P4*q?@^ z9xS$o%6sx$J`@hF&xyZsPW()tLuI{aFddU8pYMHkclmDEZS{6*ja#cuzcFiy-L%KA zy`~tupS~=@C-&CY-n(~?ENqk>^W5XR#G$W*VY9(x@rHS_&e(&ujRe)JIW|By9M|U z|9V${$6okG_H8M*gJZX}uI-;`a7bQaLs$5O=0D6nSU<70t9s>=}TMoAPzrLqgBXgz3G_mFed=p=XaS2-`BItles}-aBi2 zRdb873mf0&GCnZnkfgJr@zvekxmTy&OkBHWz5jvMTX#3E-H9H{^gZmmp};-S%X?`8 zlRxA8RmAnPO*h;wNNi8E{g9P>IJ#%%O72SPNZW;}VGoAq7dPim6mL3}b8+#H+&zD; z4tI5!8+ki5t!~=mg5g7XB}HzrPpTVD!Eqge?w58ZHw)N)z8XvGRAD0b>Nh9N$T=s zLy{x}b1c3$Er?|(>sJuGQg2l`I1y)f$y z6lj{80H&)q4OA%y)cj0RDC1CN0!k?io(vGdMjOkMhpmd>z5|;5mtUWpOJf=q1kWe% z(qT>FIA&doxvKA8GFpLWm+nhg{1-uUB+K3U-vhy4wC@A0z-6Xmv(w|C()VE;A|W1J z2*KbD1+vWn)c@H4hJ9mjMB%lgJ)yDxPr-#Er6h$Jz?Cj#bfmOz5e_O^u5|K$Hn;+kj6Kwwxg8l>Z!u&1( literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Connection.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Connection.beam new file mode 100644 index 0000000000000000000000000000000000000000..fd4878940de409d55064f5fcb3ec033820d3f548 GIT binary patch literal 4580 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Sandbox.Connection.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Sandbox.Connection.beam new file mode 100644 index 0000000000000000000000000000000000000000..7628d45f3432c06013297cc8e33692ca31287173 GIT binary patch literal 8952 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Stream.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..96644a8582833e3071f9ab93fe201534fe7666ad GIT binary patch literal 3524 zcmb6c3se)=ayJ`7NTDtXf3(ITm1-douv)F203z~4KoPA9CQGuwLb4lnHw3l%1VjOg zf|XZLil`{1^eHOVTCs}OU$rQ;pn&wX)L&muPh0h2{j|KG7)<9ODh=XE4&Bx;HV?-_@xH8BXLKs6dUd=oV>ICMHqj1oGtMg-p#8cYGicqM|C zOK>-Tw5}Q#$@>wsSrelM`Vrd{N6+Kq)q)919B)Dbyb+)(s*!j#j(%CK6v<`o8uW*a zPB9ux<6YM;m&q}iB24BHAoElxP^ryMnHPde-348^5|zpY(`8;bDpfqTK`?z2(?*+Ws0n_$9I81eltg5?qs`KgjiVRRcL}Q&JXeb==3K2Kezuo z@EKk2{bInS7YbUPo|I<&tNdZ#wA~Fh!|X%HF6@)X`?k$Nhs34{262pj4s<~P!Wr-f z5MmLYxSiWEoUaIwAPUWS*@96^d!ewUD8>` z1ZbAD4goG<05lT9MOvQ)1YzMBEoBnYWERMkaEyi3li5hBDwzYFDg#B(L^_qON@CJ^ zE38s+nGC~IbVe|l3)xL&&SXfM%2Pqs!R2iu>+eAe;lDA60LK=nS9YW?o zM5m@@P~g7M!bG@42lHw^op+A8p!T4bw{$Kj)l4$$8%Bg=w}i>%tB2t!=UW0wFJIZd z`}(D}-2V6@gKOWePwh!J`9z(cp}4>7`;&L39Ng8|kTLe9QnGmd(PKAfC#>lA^co@E zxa3~_;xVdDojPylsOc}}dl!jfZwGyy6A`gFHF?^trs+T4UF~yKwz5Y1_q(qio-0b+ z@v}JT)EkAn+RDP0M!ex3MCYA+M6%+<+ZxQm#so=pL-P>F*Y_ zXpRcaDiG%;&yBd&{Fy=@qKuTKZEbK0`*v2Tmq+n{yZ%*6Md6Mm20Xg{o!C?R$pcG< zMit23Z8@p#JSN7<_HE9ObRI~k?_PDbe(90S4FUO~i-TOxRgSpj`?t7g!bLR7I`we) zj;efD@A9qkTai9Xrv~1j_7!?wi|diMex8szImM&u#How5-S3~-IsbNJPX4rOlt<12 zgKJqyA2)ljs)X67bx&NaKCtO*eMyPr?RR_|OZTkrKEKD=GI2|Te`ZwIb2}$>T=Y+g z{_43;zMXogan?$o8t$W+$37s(zn5uVSK9l*kL`yCU%%9`W>v!eYkQq{nQk}jn7;pb zwsw8*@-OHI;Un*CJ^0;MeJ7%#twVZxZ>-Dii4D9M>(jMb?OJhR%lz!HwG)z>XD{h$ z`BEX3v@C2piPq*aXYTF(bYe%t!meBXMU5>tn?=>Tw$;3ppWi%w&A`n5W|vnp`OwsF zS9(@I=Tf{zIz6Gqy7_YL$Y(W^!kF8y-5o}UElW95Hf_J(p>3O%z0y^-FL3008Ewhq zL%z5ZxPSNF?R`g68~TSwC6#103=IEzOw{7*u|K714cDi96H$L_n`&J`btbp|my5OK z_x4)5U4I!MqfQ;3n7{Hy$;UHR%^6X*aYAcf|95pd$>gx!&c1-IPr8ebzDs$`3K{Xf z|FQe-r^aF%`d>aow8bU()wnIZo_F@0an8d+v&s9--;9-?ZqLkB)|oE0@9GGN>73{0 zd(!GkP6(BYD=ONLcfHhg_4N0mpHKJ1doA-@fccv`&t+4cOu`pMFC=d}Kcbz@I@wp8 zap3Meyz9dEaY(f6Eqv$T=$c`^1E*D8=N@#x-C^_`B#&vr-4RX6tEsFw6MsyNN52`~ zvfXLi=AKha3C$zUd6khV1qCVBj7=P?E1$n*TLJH2mw=27rf#K`BZAI20( zqzBdAFvI zeoSo*Ik+jHW7NU9bBCr?Eg#qFx7|`E-c%X5xo)8E`WL(WdOwqic_d1g>{*tEC&fHJUa%nO7upCBMkz<>GAuETEzs;2HL(AdpsTEhgFAdlTV&1 zySzV&_x}?ehw~r`NF4l0z?p;ptVc}-BU_Crk06lYfAMV3S!@>83u}bB2OTnqApZsM C{HSpN literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.SQL.beam new file mode 100644 index 0000000000000000000000000000000000000000..afd781aa4e1b0ebb2bdcb105bbedcac4b15ab886 GIT binary patch literal 164608 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 He=O2Uy+h}X)}xPLRv?L(rOT;cCpEX0C0{Zi}S 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.Tds.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Adapters.Tds.beam new file mode 100644 index 0000000000000000000000000000000000000000..284f726f5cc71afd5c996a3993f54890e447d2cc GIT binary patch literal 23048 zcmdsf2UrtL*JwfzHj!W;6zQQUy(0pmkuJSTHv|X}T4EBq6hQ^W0xD{xiHe9Q3SvP( zLF@%ZDI%btB7%)(1Ccu$;1%D`_r33T|Np!9e{P=VWM|KuIdj^aot@cTOGg)N1i~9( zYO&gWHOqZD0>R@uJw45W7F$G6MPbqdX_0hl1m#c=h0dS^l3A3XGn61l_8pzQsS_mbI!T>U62T-HPjCc|?D3uZ!KnVf`NN84Vpy-V1 z?(S>MQ|DTo0WIdrkmP(`1SMJwg~6Z(kpm(q1Z`yk;DwuSLYU8)02(cV6hsN61yP16 zQOszd44FlWppcm?IyH(#38650XYrIcav&=ronP6&M@2pU^l=xU0Bgj97 z91%@nLh|!vo$qc9Gg?#>h2uRZ2ARsF(1W5Q=^z%gBFS_}a88Se2ojS;W&p?2DRGoQ z5EM>PIQ*=}Ul}=Dq zJv4(Q0iDi-F=sVqH$Mh*h9(P2YV$WahJf)*G~0#QSX zq=o>W!!bx?Q0O!wjm~0b(_w!wsR-3O2LTBuxtWYOpiFb7(2 zFo_jUr)bfmSq+ioI1+=x@dXnSnX?y}8Lr_P4crz(WzrajIMt*GYE*awnHe7yNQwe7 zMunf5NA46)r9=cd1(PF~lvHMDG%JV}8%3nVQCUtLQyd}zhr=V6M1sU-+nJmG3>FOw z*kFH*0nT{(1!EBxNC8UGqRs&KM1n|$c|-VFRxZ&|u)-WB*_1ib2B0&896}+%!lVL= zlLN?1ia*DBvVXL7nhpkBL_yhJ7awH_ijHb_IJP_)?#yPMP z<;=Xu_n(QDGxL+2kowQAG_}=1##Gl*hw$ouM2Du%9C9wNSW%)}fk!C}NJ{-TajvO5 z+h9&!TM8qJ5&;qolMW)ypA&PkkN{}Q88m-%K!k_ZAD-h}0Ng-$J>(?GAdraQ2B6(+ zBKV`-PXf3G5>lr|fvBPcfy_N~#Q=Jlfz*dUVEGUT1P%cFI}acSz!D^mjo=cL!yyUA zs1i{~P$$5raBPADLJJ8AfaZ84BnY?1h~bbB9?%Pl`U83qj4)OhBaRh9LP8v|AYlgt z5ebPnAe@kpD4PgcNP-rNk6|TIID9D{ML3U@z>8*Mq*8GhX#!U&PTtr<9*30>B_grn z0$4F5B*vj2U}O+PD=nZ1Bt8!TltMxh$ML8VzzU~@JBkt|U|^*oNg$LA%tcxND}{ul zW*bWrtvGFDejz4sbdd#;$vWWtk&qncTuuuK$vbG#k&pu02}mvv&J|U$OYm0#|0R4l z0ujYc#G}~$+&FA{c!AVZvFa#{5RO2wz*{-N z7npGLL2bXB;tWYcuo*$ok2ocoEjaVo;K0Um8fe*l-Hdj(M37hPNZ$e1i-eYO&X<961JD5;Rt}?%a?lz^Ld!W-2L4FMFdu6S z%xFAoMkYoj&=6~+YXm@xFE#a~C=M7@fymS&x|$Qs+=#kCL=?+Z7a_#4D}=)laHc4P zyeSIDZ6VL4OVq;?-CT)5W<;()q5_J@t&oYM^U@&!Q#V)wH=+;=nT=DCkO`5QP7GucT?2m_ z38OCWkPQK{mF!gDs1-o#Rr**WiVueaF6TvnAqCrcl{}Ffm5D>paX&*?5CNJIf1ZQ0 z)$DA*gh)U_riNHE;BBj)-gW}sCJ@STC{aW?0S~(z&js9$hn;K&#*GzcFk50)V=XXR zSaT#~4#x;_CPv^^^XM(+RcZZNWr-t#*x^E1U_?+bYpb8}W6eGUq%+k*LTmD|cBn$E zod*gY1ZHL!b6q~76VZ&DC@)0BD-cn7M2rQVsEcBs0VWq##@e8){Mik_93n`_hG<0x zfj;9TE%rk|A^L|rxN@SrC{cl12nE|s0hOtRVE1xsVH1k5wqP_8fWuK7!`ZTjtx-tG zjt$}9qdmt{gdE|4kLM;@rGiljEiU7R4`KksasHhA z!;Ru(AqNy^xI6uhT;eauoqtCz`IqD_99bQKtga3O2;@08HY5Nn>jW_Fd|Cuf@Z&+? zC=fBuC^jSrI7t^_17Q8(A-GBk5z=p)Z3GlQKFt-N?0upxZRqR?Mv=)c~$b}Suh>9jyPbB041|JggG{mk$ z8DU8%;6el*FqJpPV@aSP8S8@~V7-u#mm!uU4=Cgbrt%2l7z)-G3HitiWGz(gk4U?fDDOH?>W83_e*u1|RQ`UGE_rN~34o*mcfw7;y2Dmg#fISF5Fwxh3BXbzuWzI zVCbMlC|-;|nrPK9()@4IVGa@rMB6H8V19C)z zX~Lfzf{DcgP1%q#;HC>yn@$+?+|#p?uV5V_^y2@^^v6Xy>%hA-GNb0zqKoisCD z0yKK*f1WNS!58afc;<~s2AZV6^JW~RiG)&TaKPsqVGqnqr=c|9BS4x0(CIT5Yklmd z8OLu%LYrX6&v?E;)GX^35jdMQdTq(AItO(eog4CVyYw8AbOh_HD&?>@a!ig2w zfSbq#w9^F{l#?MrFt8yFULu%u0V{y{0RhK`G(i&`aKho930T01Wh=WEbdp9yLfiPX zh(uj5gXLTv;AEx+8tDFMFomKO=cJsGdIx$9+&4Gq8$}dS;Pj*ode-B}pks^RbeF}M zery4{Y$swe#T=W1bRVdh5gfmc%e2$n96_5`0uuvSE2_-XhsU2QVh^0u6ylCxMj&uyh39ITDC2l$li`0%*uthFGdb zAliW{dvL=BBf;%@L^P8cLz$~^j0LM`aE;r~C7roCx0$sHP^%7B7uQ76fqq;EfQ|+L zumJc0Z~+hiAUInV0Y^~)@DDC8=9CZ!32>al!{s?V+*TF<5&&G51Aqdc3P242j8_Ms z1b`a=OtTOGX11&ijxarp*8#vYTh;@|IeL9ip5wm^lwo?XMv5?;#l!qzop=GjdKm$j z)5{o?(Ev;UtONl6VA(7I%+XlENbrO4)&O8U%*PJEocy-4Wf*Ti4{tNCtTj?9K`NJ_bXCHS^hG}5D=PceE9DM-5Ke+4*0H*N+ux?)2ACzI9!2m*L%c0;% zoh`#WBLKi{BLPGKn4@1mTaE)qSRR-LmN_24g4yy0aD?Sl2ap5+#>2Y9F$42~?Fq{X zmth*%cd)-U0$2+G#-{_=G+T!GZw3I}r37`xE{DXCx(<26yVSxG20WfCEVc-Y@j1K}Z=POrGUIPHOhXVjp z0I-ZOjtBt8!#FsmAONrp;JAb3fnyPlO_(Q)n~Pca2*)zaM;8EWC)k#7Ouzv1)SLyl z4Es$9089fPu5As@WrA7QY3Y!}Qx{k8|{rvviBW5teI?J`EIM-@^UCNA6iZsh|w= z$p8TB#5IeDeF^uQ4gj_vhmReV1!P9SI>A5qD3cCHF*1}Z_BR^|WF&ASGL1tb3P||o zZw8RzMtoqA_m5?J4hG_2z#1+Y1?qWbR*%UGK$&-TDUHkpPJXkd&cXA}F06A}ESx=o z*VQ@f7X4{)ozo*Xyu!{Y@ysl!lX*Y~n4gR5WC-qkb^(yn%kNgqIUVrMu6lE*pt;p+ z&Kcj_(j~lV%IS`O4l}c^%E4jgaMAP`k!BW7IqLlN;wc#cBwRRe@pQ&`Gb^ZM9(XW` zq{C?j7k@%N=1N~%_2cc<3tA4+4+9)F9W>^mg~xKkORxaJKZjVrS=a^`sTnWF{&wRB z=8m3iLWX0;nL`bGiFbBAJ{AINo3NSV0aAbkb_60REU>8r_7~vIhPe>JF@f_V$v?Li zW<&~udk~lv0ix5GR2I0z!bo`zk~@|gzMjXTB4{D8-0*HhEc%Z<37AZjqq_ju5{o29 z1rcDOf(RhQKouXSif3lR0L~Y~iY(wP-h*(B0E^Z^@tlQpP$x344l`F54Kf#)0>EQA z6Tm_M@R)?{kPToP0C;@C<9hy>oj)E^XKCOuIDgzZ&Enzf(EL0A=NfoyD*~85-o?N< z+%JAL*mDF$OOADTfkLPlW)#QBQ8>h;4WE@@WMnN(x;WI}?X|!#P>&9vgpy;ZU<-^x z6+5@Vz**Lw-RSxqoz(0i|9mlJd+mu)n6s45iUnU_Vox5<`h%Y0^V!lqhPPCfHv;04 z(>~&6mC2qRxvASbJ_nn`XX@L=bo4b<*~DI=IeJ7!yVssb2)hAYD@{Sm@DmgvGxOv$ z!G#J(hc~WD+b)Do7PRop-hfl(O2awcCS1HwSUObbv#YT1;OC(4m4zQx4sBJmFa!_a@qYLRa3 zxvp+RFg{^;zI)QZT&ayGl~JsId7louA282b5!QS<|Or_U2Th3}V5o^Z&pb0T%e zbq157#@zz4FF$>LG4Qk0eot1D^nqhX#Je0@q{5a<9ND-A8y$PZ%IY%@gg+rJ7#@|I>dKFs=4oqQ_!svRUm}VXSFf9- zQO(tKgnYv6>PsxLi~{faixBkM^AiH?nXfVn!t5_d*}v>@*{k03?wP9)>GTni6@HQ0 znNRiK?Khe%8M$@(hxiYPvn%t&Lidl#j!p|EJT9zi^~}3>eZ0-jQN8ZUrey=AYK`0M zZSOALnXsit-Og|I{`!4;r4H{Zd-Ci>b=S+Obykz_&$HTMA};7JTjyaV&f{9%EKl{4 zzvi-7B)C3%OV%mZ;wKI~o>#2D_&y%0i7Z-LgD78LZO9dIM#0RVTxMFCWNyir+Cp92 zYJ30cJyb5G+~}iQ@yAn-K1p8Be$ckk?CsGw^40Apyi147&t^xv1zj%|SR2mmUKV^* zm8(A=vk6t!ltcYCsOT!@66Nz+ox~l*K<6XJ|fPM z3Fdd9`{ft*=f}mQ=^Z|tcvw7s)hB&}oxv8-`Wn51qOCiAJUK2GTcE_#xX}vLGLmVx zLazIa#*>#h1D3h#96eIc6fI>QW=Cp&D+-W#>gOu6$jfD`_+F@l8nvfiu$8uFKzJ|T znzzI6E=EIRK?NOOt0UbX2dSSvC$De2CGWW!<*r?M$>z?=OH$=|t=QOz6cY=vUDnw3 zSD*pqxK-kNU}}Pn&3REzvibQ;^?m00LTCF8Fx&ZQ zefbelWsU_OdaIV)Tp=^EZz*49^z8xF4~q_%Z0q{Aq+z+hxu)uX^JS zG7PoW8Yz9wjG3YrtS)U99sf|fK5=ZK=l(g-)6eUF48DzB*0HXS=TeFIwb%vGXe8-= zfCK$vn^R$?@sG8Kuzdk!kN;_04rFgvKPt9p7C0aosEN z-1e{4ZY9ZAeKvGgS$~m^e&?3uw2><@^G^TU9*uL67b@+gB3%L&Y+o2~iu=a(alejw zcba2%l3B&)T^4~JDMK|Y&Llv_&nXo#5%EpkcD%<-n-h5>U*kuH2Yh6&J~t0bf7lmx zmj1H+e%?L4)3>XaZe41y68bX2_cAe2?q#A+Io)Zu<uX!7NFZgy)K7W_!2>ApewvJ z(Z$G7RlmEY#)^B(n(2OAFRRShgkNnY>DF|7S`3jax2FEO-OcKT-P${&jfO13L%U87 z)%J;og2&Y-E(zW4}XhS^YgAis>Gd77p`+#_CB4Kmw)g*<}iNawwv6z zPm@gZDTj<3)mG(~Fit?rf2o8+yMwW>OOHDsS!7598Yf4HsHcuwlY_DH?kQ|pp< zXKj4t16?yxb!6mOr+t~)y2m$@o%<@8)S8pFM&p{AbcXEON`)`H2Rimtrw39#$z1Ir zb$ggr=U%-$%8SmSe6_LTPg$6)Y02;$dwG28f{BMN4xZ% ze(BrouWEQVP1;$07)LJbF7_YuK%8|lSt!7G+xd~J_r<4ou?q?rLtdGwZD*I>+?o($crv6!VC1v~X>Il4 z>sy7&L#KI0ionj<|)rKpA>y5Z7=$g^FuGca7Rr4(g2rROD83xt?yUvDSnC5 zR^7aj9zt2a!k5_4(k#65<*GGM%dVGX(t!sFukRk``ypVvMj=w)>7*L+`@+=P({XaB zmgY@d#9PxWozYe5)<23CX45{aF^}FJX%>ocn&v)}rju@F(6gjSgD!EY=KV6OV`a5j z-$~ckl0v9uwRIMkzT8VDt^aJ<8d(((aP6|>Zolh?3wOk|iR+9`t5^=*%9fCKXJyz6 z>EEr8_02w78-hYUQ~X^2$@u%j=R3p3){u93ZSL!N{K~B&G?erM+Yyj)PL>rYef`d( z7b#ZvJll6r0zQiQUDwLlNi-Ue(_jW+b5@F9S0}eDN;AuNPN)gxKbl&U`i*Gg zchK)K?!vQkPTj6zXj+8-xPKj5D3YdBX|aEI&L zvTf%Nv_wK*+#bF+E%kmqsPTSh0qZr-;3+HAK?7^tTUQERA(LwMwLk81m$wqfz1`4V+^s!LTYpct-FcOD+@V{vzEr6XeZsUy z4aCED=Cp2{Mn;_pS=vI>q=flf7t)ytkDcZ-Ci zdV6jgSw)mvv`v>tZhja%IOr+bW5%nj<%4mrlUhost#GWRCPS!`ppkMH#o*DDNutF$eJ z;NtxC%(s+B0Gr@q=SjEQ zpI$Z1%GW(jV-y!R*SYM|;8v^uI=DOq8<);3TaZ!X)ouM0p{M_8NcHl7ZD!=Q&fYa* z1+Ir9vvM-!?`K_B^ftYCe}k57&I+-MS$g?9+jO@2Vo zZ?G*;rLjugX2Z1TLAt=*P>-cwrp!9Q)u=QLH#0o+ljj*Pkv78e9gjYT0s@p zvTqHp@Yi2arK~BX5g&`VE^V>Zs3h)ssgkYrv?UHE6hSYa6R1Z~Nmz9%oHVxRZ>uhFZCv)P)Tf%I%4jW1RA= z+njkt>;CUw61MrGZSm0r+cS~%sb9kyjG=+c@5z6AxRl3a&BoMLTONgIAHZl)tB zx=*knBrxOV*sblRgZDS$TwW$F4&QYrFHTQ9?WyIaGeX+gB~#KPRor;G2`^&`R5bNuDe!=EvFTnmgT$MGgZ0nURSwHsg3bf@ImEE`YKTeOgi@J z-DgT~hW6$5>?rEci+v_@a=gzO`rJ8MU$5vqczVCg)6?>160}s6?Fou6GLt&Vxu|oJ zD^J^s1iuq5+}zlbvN?npuc7iFw=@n4nP%XLeqh|Nd4)KcFP_iqx}b@7`>l1<-}8@nRE4@Y))$qxFw z8(}79;NB>HQFnZf4iX<2Pil1DpcY8~{`y%?Jo9v4`$)_1l93N(x0G)TUdf17(X+OA z!E^a6Ipr=Q ztm?SE8nfr}5l^viW03vj+(q^5>ceQ1CfE8lXNyjUl-lW_l~3`4L&Xvc9LJZN)ILfc zEjB3;zdi7lKYp*OVVS|m;?feu`_IaUwpPyKE{ti;8mk}4 zR#r%U*sF>fS?r~|Na5unB)3NLLqvd|9W7b789{tgKB|k5dm{7z;Tfu%=M{n=_{Z@X zyyZj4EK@&iYXK-u4wT065L|fx9ZC38S@#E;wZDEn`Z6Db-p>78S7Uf8F;gm&2T{E3 zulcs|AN>iR7ydt;vl*$pShjh(7Hr8(l>`}p~U&ikGX7UwV9r5J{8 zIe$6-O}Wtp*6oDm){a`;DvQ1njiS;;FOxIMG=<+MUP+gUJUW&jJea(BUy@$W_mSjO zYS-FOaVt0d@=qV5?$$~TWCpKnWCp42`XFfKJb84Z)YI=-t0$fm(nDRjsd4Tyjt{Zx zc^^w|Tihz=EOx}-K&92GRi7^Fd3$XUG<3{u*E4pt)yGT|aiNRC!iTSaDWi~7a)_6> z%yE7iO{-g$sytuwe2J^=l$+-BuBGzlDF(;rF_@JdUmZ4B*hEHVUwq14bubD!$fIM- zRkKqwMoISFz?rwk3PHBmDQxFC-M;#}&nzNdKl#R9*WX-I93J-mRp_<8CBz(+-m!Z( zn<|Uq-%%Vd-dm&nO_~PXX>HncJUGw*cQK6nO2&&Xo8M^o#w(xNvsc+Qb?Dqq!RC@)7YLD>jI@u}M>7jD}k)T;FQ+SiY^5#(M3Hw8GyFa-LnBOtjDRlXGnnvK(sfMj9)NLkgp}?=W zm&-kLzjC{x<`=M%3t+FN9 z{)lyHG5JF6CF*18)EjQ;G_FT!YuCSrE=PubKzcsC0wXD#LRTwwu^N=-f!M>YFGU6aq$AX9RHgETsy9E*A*Xd%Ab_rk=`p`O4}J4nm$tg z8h!nXC~#Wy|K^w%i24d{I5$MpMEsBLPyl`{%(V>?FTfY>h9SP5|5M$rjNJ% zxFL1+<3+Wx&NIBn29MwP?8?gMe0w9*-^Hw_=S@pa{c17t^D%Gd(7+GzCF6BifKC~V>6-p~17eaiK@kquSZS0ItM8uS;up!lR#nQ!JEiGD94Nvd&?=x;YL$DiE zIPmq^YMsh$2O1`%illa3I5{L%bz7!?h5L?+!^&UubX9qqx8E4racEzE?N$9Rn=GPl zH1oSpyt94wBVKI5`)TCnjPh1lK*2yHv15Egm6@>QK4bjyU{XvKcD?xL+T?>O(P@Kv9DR(*DDAvupP zef4FW-Kn^1sq)STt5Kep{XRIyg zbe1h&S{7xKwbWy9MBn{IhvSc$J$Gu{bCp=$12%TiiqewO$s0(LCx(O`gzw3{d9``( z@=LKwuXE2EwZt#xzCg=Luer~nru8c6o7QSxy*GAm+esnnvVs#fxoZ_3oe1=!+{tuf zAHB0g1-nG0!(J(7w65#mEf>4J%bOkCl^t|%hpFm!EIE70n|rH9Y3F*sHQvojxwM-jp~6#k@Q%@iz{;tv*ylats^LdY ztZfgRt`U~oL1pEhKW#qQaK*7C7f+2-EhwGRI4QDKS6aq6i{-Fz*BLFZ!tK(N5Y|Fg z^p)a~(4x#(e7Tv71zwKPSFHAU>&mQpyFf;)^*UO)_tprNVYdV9im|<$`ZiEMzHwzs zoU7@UX*{=O)4R+Sx@$u(JU89|`Rsjiis2=FCDQyJ2Ay>(l^rE_#Kv48XU8pMj>eJx zZ*uPLm*l=xSEtauRq2w}f&q%(53|c$oS*czVytvLmwIMrx1ZoTFF>DkI98%owqrGJ z!wK%@6C10{MK`Os62^sY*Y*Vz zs+JphtRZ%{GSfusy3-0oN`)m|;uU1LUXFSeWN25Zhm43KTI~Nvuz5w z*OORkmp!+B+@H=q$JCYH5j?bgSgJY8`MGS~%H77U0j(mjkA0=(52`LQ(UW>Ceym6q zAF&6i7O_yVEdBh^l>V#e7bprP+qc(b+rCIC*~a>ZJwBAZ+I&3vdrHM#yt>$d-n^|r zA}}Ya%I3OpMy=Jy>MFC~qsqO-5>@qGin}k#?R+3=o4L#9&DGXS>tddhhPAo+1yb)9 zYKJoKdEQX$-J|3$#&+te$*9O|W7|0S9%kPeur1zeQL6L6Wx`AKY^UoEbEn5Ab?%K& z{Oo#DT1zl_xlj0;R^^k*%S}fEsL|R&m)y7u;(U)T9P!Y0Soq_dlFN@=k@0fR;R`J1 zYf0;Ej@396nvbcN^_|VKJ$f~_nz>Kv!JF7MPnjE@KD~_J(iJ=L!gKF^%z|AfrH>)j z>7YhcoYS7;V-xaJ+(XOd7$HIHL*>Pw*MhD%e$PXtk1s#s8_ZE;Cso|voh`_AX+~P# z(n(ko;MlcmnkRSSL^FiGmHJiSPRf(B{#xqS+Y{yZ%#JdRgbH3MEqx)KwZ5FCyX5?l zJLhX&2(vA(eG=Pd{?zL$tM+(jO%XY3yw%R@$Jdc(CL6#+>%c|<`<p@V2dqH)ps!8TQZVej<{;HbR~OGt#8QV zmfPkRsY*wXa&h6#>7Ah|9+xlr5K7kji!vjg7`9nUcl2Msdx2|_bwz)Se2&6Vje$&? zeTV8&oBQ*7`xe^WRKC2oQGTR{ebPVT`__|R<=fUTMh5R(Fu3L8%97ow>ju$OnvOBE z@UUf$h=lEe`+WQLLRqUf^jM@h)}d;0>El|+J?`FNA!TDGnySE;_2TX=FW`(^pJ_I(=zcKoo2Kb5<3!GyVd+0KPn zEsyae4b{C7VL}t7iwaUEPc?1cvKrA-pV2MGiuvkrc3{D{;K=|n!R0YW-f#VWv~uGL z+iu2(B^a-E|AU(stzEd7H$>!u%R{pZ5#xDJ5}n0fvo(%$8;L~pkBq))eO--SoT2ua zT=8bH)T_m0YyT}8DeJwg{01d2=ic7l{8%e{PyVAaiP-ZW^Ec|UUMA%;wwJ{oDb(n= zXYi+GJmv)otzKhi85zEqyH>B$M@u_FTJRxPm-;@~}b?!c2 z{nG&9)xPVE$L}jG+;8m{`LP2ew z5gV$RUvs_=w=}-YFdJ!X?h}A$DA%q>`!&j)P8}axvo*3L?{*NsptjqVqnT?McH0Gt z2wg91$G*jz_m*=p%C+YAm`!|;U%bu%D6kB}c`FQ+7W9`PR!sSbb;@WO##ig_q zu79)S;mP`^M}!_%M1DBeleXjK_?W26%Qg`SVcjQ<<3pO1&@~?CbU z^<$shG#k5XE4^jWQ{OA!^{vvIpMU>e)scZd?y&62rFVXs^#?C#^t?-Wvgb7gbr&yu zyQ+0VYWdml(GztEkLq4MPn`&Htk|G)I59}qMmOlKUfxcAXV2sJC1tx05-P7FrSFG$ z=XQ2N*i5lv?REk8ycK!F`*SoawtP5l8f___vMh0ZOnpt;)l>0a?Q3PqT?C4o_MIO4 z{1J8f^K-uAhiHX*2Ekr7@+#_=zAsPNW8m2Qw)d^ty{DJXr|k8h_MhuK_nPzx9Rg$-c z;u4h##dxPLW~O_%Q-^F?+MHgMxv%r-ka}@Adt~Nu?n}ynpg+%#MiKv!B|ov_ySs?v3BzH>EjQJCgZh z=>k2uX|ML_A9;?NL#zsBx7evv{7>1 zh9B=nr<0t2V9oGhmC3g!3c9{dpYo)gk5zJGt+l-_oc2Stz>t>o_D(O4cPDsb8e=t^@F}f=7?s{X3IJ0mBLZ}9Q_E3Pr`P>MJ^N1{kL5k6aA7Mnsf`?u? zFV({j?}6uR0p*{bw4EVCF{vS-ZUJ}}6MRGj(1J(VIM4gdatVqDk5N(sXU@3EELtQ? z4ZhSsi<-fqXTHqOI_G=sPpeBU@$p0;N(A)<_{ta$39sRa<@Vp$X`HXR9J_JHW z&WQOhnuBMLeUZY(r?|h-?vLl8|GxVL|Fo`M#Ka9pb;2 z=^t-a{5@Nqnd)C<{l9_xn_TwGiy(h5KJ)c;B!f1~El_gnr#NAL>HU#7$VXv&_8 zh8el$XUrMQe_I0QTtt3n-anb`Uj><;^yb9*_b(v4vmfO8Q+Kn2^H;(CQ!>n(;{Dp; ze?W@)R-1G3f32IDi`ehq&YDr@udZVMscil8g|NTq|LdDF!=X33F3E}V19lM?*9{oetzoif2cw;<73`?iGLB4v$se89aFnM zz4rL`9sZNK3e15k_ICjV-eC-j{TZ-a|M>1<=6%0E?jQc$b~8HtPNHAlAe>aen&ZWH8{JUtYoe&v^z3zjHg^CI18Bb>3U8Kckgr?iJ*}x5fYKd$YfL zJNmCBpH0-i8@!y?q2a32g{t^R9vaJ2oWrV>1JuXF!>_y5E0q2Twg?Z5{v!C?=8 zxt}vAz~5Rx3ZgU7Iq2Q!!{|ozRdgZxIC{Ubkg}-qVr2T oa?0|E#eekzECT*$Cy-&GI9>?&x!#HnIIah5b%4>Cow2^}uX^>adat^xUIm2Bb%h|a zMLz!CA>QOXcL;*b`}+ExF-H3Et|_29r=e)FP!=Lf~pXV2YHu zRHHydYLd`MND)FP#8_Nc96}2F1^QLWgu;HgP*^h<6{b;&2t=xpAT?iUGAy0H=<-~h z!II8=XHl$JsuZij5rV)8#)v1Yy&_JIeptFH6lncRmMojaOa9I(P#_ELN8bKf*$WQ2}O!z8uDxV60%Vh3`?5rRl zWfwuAd?wsZ1z~Cd!CjOeCKqPt!!osC!VHTq-We>t9t+6X)66+^4*+hlxh30&4%zw8 zne;7&Y&zeHYX=r(STgzCO1c%-l+6xh@?i$Yh-+>IGluJ3aDWS|>E^>>#t8jZz}+_A%F$N8yG2? zYLt(m02H6{OVLy_1EAKR__P2GM#W$=FlSLb05(8>^K0D`jFObjg8>c|tACmT^fZ#{ zw8m0ICe|oOEgeG@T057WCX4R zYy!~^16mXTWQa-(7()R=tRZnBs-!L!Iq++w#x;ZlNq{1F^VDEXo)i^hVi_vqMc^`0 z3#@qRcpN8DEY2BOf?y<16^|nrs^fusO3g#S{U%f=DtHPsRzKk>|G4ZBo!l=r4h7qD zH!U23OwQ|yFUuvbwu;01Q{}f>)#wLO8O{k%{O)r5=UK;RJ)DlT~0Ju&#TWodCu!Z{^gkByC+3m zLjo_xoQ^w?F{{1iD(VbBSTv>VDH7Y$?NmBSRv*=JrNOaqmg~jC=_^m|t$1!4%-LQ% zzTnNohU-QCGVU&7k8|{IKg>_5n^Tk!o;-4Uc$7tW>){XfcIV@=EjWk9i8AeIBWD(7 zM7AG}GMc}BUy(toZN#j{y$XKUgMB7Lof4j%nHAf4q~*P?*r!R3x`r?6oYUmJVrvmzI_UlqhSaNqrV=<f48vC)@nkEh;TMQdYo=JV^< zB^Z|&t2tHo&T+hKH$90_r{uNeF4KI<_d7ECZR0z?{a2c9NxSgl_CB97oa_y9Cd`Pw z*lIN4?wfkGM_q1w#5F>G*Usj`k(UjlHi^e*40oyxJ~!XnwpgU;s7UaSY;cU;|ESJv ze?X`B$-`#sj^=gCiaz&CVOw6fFCHJ&mEHsg+a5e#*za*BmA3!N?fn(s{@uL?sZK1x zrCT;zmDQc)XHoa>9Y4RSx!(PW*3~&I4D!PzYH+Z(QU5sITvuE&_aw%4W!_i#EIhcu zbE+^;AeV45d!f#AJG+mTEWXmzrfXh1eUyXGCthi4No55$%fKOF>*Hfd%O%UK!!{=P z9;?T)DvoA3#9wNCU+$P?*5v#P{3)h>W^vwvRkJITlN-%`PPYvR6TJ+bg?y{g8Ogt7bJ-u#%C^6I0PguD-Ap%`E74!V25;C$7y=cT!S+XJ#FKTed%>iGxg*#P4SotL$$+g!v%Y^4T)*bRntS)_;n z@&OTeEcJ8fS|f=9S0hqNKp(7ou+~6K;!4U|gMll4zzP&dd4KKcXZ*9$SK<7#>bHxW z9JK#S4IYT(Z&K6e(=RrbCShVFD$yE{2%#Lv`7ca)FnAP#oLvA0n+YJOnhCRlCPSRR WEf)|JnWUoZOaZ7m3lHmqp#K2{%K;w% literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Constraint.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Constraint.beam new file mode 100644 index 0000000000000000000000000000000000000000..25447c957f2a4c64072d09960056545a48cc0141 GIT binary patch literal 3500 zcmai13s@7!7T!%j0wuUfcv`h7*oq1ys0fH$NdQrbl!AJ(>PY2!ap* zy3_y+17N|38Delf5ttvs+~mgMj?Wfn#~YGRa(1R6FME6B{s34Q76mbRa99`@)Nx@^ z2xz2XQGC$o!Wf{=2xIa9GnNm*IYSV(2fWRUFu0u%TpboA1pIF-Lj=Bz1PbXb@DZd6 z@^XU!muH4zg$UeEZ^D5C!CkZ-gb%YU+j8I_FpKj>JBw?P;{rY}nC-%x48SjDJM+X$ z$V<#bm_@ccrqGS=1r}vFBSL-|(~a-IJ1F#gEYkTTrFbc@Pw+2X{?a9)B z+KvJh!)T{Kl`?~dGBR;YW3*Lbs77J5!DU)>5WX!XOVSJ~AWuf+DT8RRLrrpxK{1$) zA>f56G1Fj5z-!c^IQ0h+8}QK3fupceWg1KY9;zA~ceLf?jAVw<;msS8L4O#-w5V&A z7Su?`sBAYVBfY^T z>*>Abj$idfyr?Jsomb4G&Y>=84vSoqF-30abU~!q>1OY9r^*e{HC`cSJa0TZJ+k|v z?%tEnf+~qiNr}#lIcp+TJbbQnD8?%sL{FLmzuZ*2be~;TgFqR5a1QlJ@;S4IYP?@i zVZj%}lY7TpC3^!GjNM-8+`S?Ghfg_U4|;r%AHIUKH&YN?F=f>l&ZyEEx(|5TRhj&c zcQ(!PX=@m^+-XjwjVMs$STzN59Dc8_E8|-Bgv{M7wv&`=__mxY$b<>wmNU3J6%EVG z9FDmBOS|Jayxn>G z!;#D9PO5_xm zoR#lPKfmQ$ap};G;6n4f(#@^6;{#%%9$bz&S*;K_u2wBRm7fwmq0{|r{L68}3iB^l zU%9tC{L-7c=$jsdE|TZl^`PkqIReHov&vaq;2$*aCjo zTy6fTrZhQZ=YQbSqubA2NEFSF_{QmJPx^=dG3Grq-Z2NS_(hWb>gUc9>etrvlZZrp z$-b5n!usi+z>J#4% z<;nJ(-S5_Xq;N?^&w-YeDeB|zCgxpTilznPp|wluUAG#;pYJ+h|Kj@EwBIzh|LH++ z+uB8!St*Q7HCxlS>+4S3N*XEuU|jJT@u929C1cv_Uky94C?c&+e{R=3NPp8YqenTv z&_gpP{y|*Z?rlqVgsv|z*rh5&bsMnxKI}mAf*iN?XJYFLO4{S^mz$AEWyP(U5VEN= zl(^FL!Z`K(^R`N7?EA+7zwVfPdst{f&J4Ef-R^mzzD=b+P9n1%SEDHn*Y@sgD&N@5 zsl1-~Xwk9v-O@HL316DtrKn1|^X$kJeoN!ZkFN(D-FxecACAob$A|xFUUvBNedijF z)*km1j6B@4zu@tOd;8MVFIU|u+S_Va@=;0Ad2zH;ME%@$yIuQ>-h(0txgIzq75z3D zIi}*Rxec)=g^nw}#;dRR`{_iTmq+A;Wlmca6*fGWeQE2h`i~C#jG1|z5+4aUe`bm89^Gq|2r+o%XBX$f~ea`%}hD>Jv@dX8e3z?y06zT9x=lk?Z+ z#Pp<+Q)hZktxwtE=rM7=Z_0w3@<&OZkC|S1uuJOm^uJ#U$3E&hkho0NEfo(}?Xkbh zFKxFqSDZ+!$W1QK?;umxvJZdalHk4YBkws|ws}QAtKw&>9xnf>kf(Wd$}dE^AjEs~ z_~*OUUu_Zz^c%|&Q}{V?+QjhHd)bwb4tY+-__K~JJ=b?T~6%Lr$ zcoT{=g{J^Z`(^>J%Rw!vvBVOxP*RfWPe(l12!ggH)up{W2%i@SD5>rLfPWy;c~T7cvjB}Bz(BDF9XkJjxidT(^b literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Index.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Index.beam new file mode 100644 index 0000000000000000000000000000000000000000..61e37ebe823481c02354ce5149998b3f0497504e GIT binary patch literal 4432 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Reference.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Reference.beam new file mode 100644 index 0000000000000000000000000000000000000000..70075a6b146f9976a09a478d231ca5912b2c5f3c GIT binary patch literal 4056 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 B1&ROw literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.SchemaMigration.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.SchemaMigration.beam new file mode 100644 index 0000000000000000000000000000000000000000..15eadd6e7f95cb7589cf2872f1818de6d611fffb GIT binary patch literal 18644 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 bb{NZFy-O1guJ(X>)BzxOo0T-bVd(z{`x|~R literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Table.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.Table.beam new file mode 100644 index 0000000000000000000000000000000000000000..002d524a328f519684f50147d1a7c4ba22b84348 GIT binary patch literal 3404 zcmaJ@30xCL7vD{Qgd-3L0a3L1q~65@BXU@N1mvy3C@>ERL`K7AgVNr-hQj!jP#XQ+^sLLrLD zaG|hFtkV%_hF*tgH4E%hyu=`jhZK`T;=B?PYJ z0isBaOZ6&5q}366iB5zNDlwMXlZohr0}P9mGNEvQFBH}c`Go1!A_9@>B}mOMNxG}| zTUoA;H!$hV^A=@@rE0Mz79j|nppW{y2#Tpt43Ppcuy|-Pv^$^znuALb5R>;I2x0<| ztrlQ303Bu)Lll?sOqes9`k6c3Wkz0TUc5d7A(B?*l68dPM*846ICmjw04xAYgI64npNr~%3{0LU*+^fn znpEIxqXQp`fhI*{V!cXdpkk=XU@b!tmDFH`iPgvmd>ioh%TVJ85;SmA)Ci_~N5l$T z0%XXFy@o*5Vj^3pM6%zJ8}5t^f@OmLcLWI$j?Ek zfglb{hR4ESi4t&NE-py~-DCjrUvdK=&)oxn4M3i?JHVTB4*`h^%m+dMgDq3Dv>18T zFvf&xyvwJ0MXPyT+Px(U6fd|61vDoblL78UOUS4|o|c6WT9Ch#5H(;rk0cC6mQ-S8 z@W61PRwFiG!ofU92sH#QL9|+ft&G6cfJ`6;Cm=-*01wfK0l^Uv#CjbrMAc-fQ~jAd@eB zEW6k$#4nB#?g9U`uH}UB^sgsv^WXL%iLGK3*Y2mwAIvT8v-NnzQlu1AeNdd5DcY z+md(4=UrvWAdZfejO9 zp7ML}*R)WdS1v3ssx0T%vR@AP-kTsvUgOqqofepy3nABptcQ}FRGJSzxTO4C>*A1j z@7x>hfqk3Ou0-#@`BZ+tYii$}N5L1mD_RWQe^&jerQRF8f#9>#b*u;0!A`SPLHpBH zZA-rNJLtQs^Q(2ovVvazUjNX~KXtavhqrwEH=gmmO{;$#^~>IRBHr^4y9GUsU)Th% zY`)d~viFY_6FWQ)cORa#@3rUkXcMlT9$-1}y90#r0d$J}+9_c(>&ndrhjMIQ3V@qyD&CSItNBtS` zBn>{J_=)+FcB#=kDfZyW)~k;ZS!Q3;c~L@CrKHaL`vaE+cWP&^8k<~Hw{hlFWkX#F z)_e~$PF%fbdo267A;+hqt1WQRoG+h{dw~lr>Whpk4yI6 zmiH}is(9fV_+Z-CO5;a4bqAjvz1y35w0?Put~$8r=4{*UDciT54UKUOtEo$A7M)nL z^i_At@$jtNsLy78{EWZ*M@0ezh2at{NJLWdPEvA>rC)Abu;3(bRFj|J`~RfZJ%gi$Bze~MoF8txb;eB3B_#XFDv|4NP>D_C;>Ufde|LU(TjE5`tqgRc^}vs!d%BVlK;Vu^jM^FX-wBW$Cwq@Z=w}GTWyrKq5JNr#!~anH3qINuPT`0 zmX_gAn>)8`n*Q>H?UzNzHo4bEtjqNKHty`B^tneqySwc3u$(2ABRpovkEQ(h-$Rid zUk2>rRQ_=CPEFzJocyI|WcOJ+hg2(8XP08$WSXrtw>ga66uLf)U+J**_m5PuqvL(@ zHXZ#WqtZ5TTVgPMyzvO5nTD;ZzIg?q?NhF9jJcnFIPMEY!U1CQF6JMr93Nac6%eCS zN2%K;n4{*24PzZy%m0TyMCoM@C46XxZhT_e;GC=!xxnYIIi0Xz_8zadL+v2}l9_gW17=~3N zBUu{$p8vZk%R{dK?f(t{9*ovM9DpV218kZ!8&qnj1XK(Np&mS$cZi_UnG4D%a5mEc jhMFxHkhKKtGNlt@|Kl?XL5bNKa-AIjS%1Jz{Sfp&S)8tG literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migration.beam new file mode 100644 index 0000000000000000000000000000000000000000..2bc8114bbc941cb79b2efa4bc33384b09bbe9d0a GIT binary patch literal 51136 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≦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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migrator.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Ecto.Migrator.beam new file mode 100644 index 0000000000000000000000000000000000000000..ee31ae9894974089381256d1cdf1d746b77c0922 GIT binary patch literal 45100 zcmb5W2V4`)^EjL%2uCCuNf5zy2x0^Rks<=3M+Z?vKoJWNNPs{{ViKg-P(iR`H&*N- z7R25Wdj$)Mii%wW-`Puo_>}Me{pn}fz1`W_*=akwcbkBr;eBYdQfnW7?;+l* z;r(bdrvI;Bzvwu}Un0&FD;)e2R5FJl;v|JYB~#?Y#)_qhve?)nfl8$i$ET}AN_m1T zO)i#*ii9G$LX;p-iG-!1Ou0;cE| zrASXu@ugx(oJb)NNR!?tiBz$gMrx#TL83~eh!s#60KHNrP^d_yN+y3VqUei-ez9_a zQi-$V0)1ll6FOe=M?CkLF z2{NfrjASd207(g{v57K8tG-pSzaL^_@s2{VQV=fz2I;U`!GKf`*vqeB*Ca6qn_ER>XqcBXMO3sNFC`F(|q8x=x zra}dsmIq5!q9lnKNFbP=c_Ob-z^%(Sx&o zKPzSFiUbi~B1Yq6B9l6#;`2Wjf9bmL-A6 z>SAM+$+C2b5X>P7Tx%@oyQV1D3@M6Jh=l10qA&^Qs1jy_NCdmrwhCi)Bp0=iIPiB- zNoFVnayj@eRcw6L?^!94wdN!O>ygVOQTzLr{z~wvs$^2G5RcapJA`uCVM;I^6)6Fw zD%bLJ2y*L1=~5w3l>mAmm#O5jFk)PyNR^OmNv6oeQrtuf>@9CGJvqQ2J1^Ia3a$g@ zkFyXHT56QzB&Bi@co}I@EV46>?g89ui;IW@RRZr_u4_}OL~>FkNEH?7YE-f!^cLUrJ* z-nY2^1c@MBDGEbUNNhpwuk$>GV4rCM334)~I%SE?5UW7#RFokSJYFGsrj{lW7GO~! ztaxbxsYt5AJ8QfuQli*+5ok>-7oGzq4SsQ)1UJ$790|BHv`mYHzm<)`TSTpyvB(V& zVqq8sRGI)|!D0$)zo-=c3Xw&Fq)DYnk_et52~-}IZDB0(SaI@Xfil?%oS={bYVp&s zu&KmpBFf+X#-dbdA(bj!CE~q24b~Y!l88ho!z6-ukpv73$uSOe4-8U{yqR2*RR|-e zfsa>-N?U~_IGfkPDMx1>NPx%Z;oW)v%2!7xEkHRhUGC_jeEgi2Q4T74lV63JVFHg82zdK!q1VhG-i_uCGB zE4&s}AKw3N=kr+oaZW1?zx(}5EuTjW@M?vywVD2A)^CFTr5yk!t z%gKPCD?y+T{uc;Hg43$=?;$&DYeAEAf@+Zs-a*&c!d|>9?_U<7-&6lz%}5)xw(xgT zR%+HPOWYjL|FKwVr^p9JOGHR?bv(2bx6J&HM?SBPhhm}@a?5pUf@Pv7(y<~nOV6Z{z)C%%*eqrTGm^o2#^`Vc zD_>PjUsD}LC(H;&2R6y*Kvxr?1PiM&rm^6OJr0PfGiI?!y1trk$O4L(Ea=?vW5q}8 zJrH5SVq-Xq)TgUSLl%D((}cc;X`(@A&PLT?I6<;7yaUPT0(9XfYBGq9;cRuBo(ZF? z9K$)rayglxPeyP^Uu)9Yg|zY`*^wk&xQb~CxJ)&;x&dk3=xVtk!SZ5u#Bfu1WXow7 z-jU_TrnyvCZOyk$%=3{Sp@4EKKOap|cC*G1KR}9m5_5#92i^S66ivQ0PElcsFA{vE7WNPqH~A-I`=LTB+;w z`OHmd+MqcEi&a9f&1mZPhD0f8Z3SW?Ic(C3uEtsV1oL()Fg^mqI{;jTI!=@WZQa$lDUj(BhT()U8Akf*lg=E{ z%9>=mtYTV%@GLdLbA_>7fufF-^m<^pB|KBo>p?R5!YEb1Mr(?VRuxPu47Va(=w8g8 z7!DKe2-?z<)ORL1R>1f+BvU|QxQ!Y&gOS}~rP>|4yXD)x0Qru!O%F@f;jtw7@b9mH0RcY+Z-U<5k^9i~AjPcRFkBaEbP1dQox zAZKzg++K~F1F$Cm^I8Gt`~mEw1$I#5769zX$8bkd&)I-v_Q7zzwi4#nr-eAOq|nz4 z7;XiWTWKhFQsbSWbAOnGvmMigO(z2hWL7RUcmD%6wmu&xGOwU zJn!qy^q_k{B7EpHwkMnE0o>y;`!Q^pZW!)H2J$r;+Rum1Vy|VovkArkGzz7*?$lq8 zK_C=QHQp6S8OXx${{5K#bZ;Qko$1N;fW$ZE^Fa}O*ffq08KW%fQsb6}EFAt90Wu#~ zrY{Hd+l%Rk;l7lj^YuA^tp|n8?@w&FrxE|3=&XLD^LJr-(vgXSL;}>fHLxcbBo)Y{ zg%KOs;9&=`{n>g*GFHWOwi@p#XSp*&Ko}t{!U&;+5e&iz!tkILVFYW0F-Ri}QX`B( zlrTb&Fb1n}8yGDFgfYaJWNkM?(;(?CYP=Va*8yCI8s|dE1QOewITXemN{z_@#PrSZ zz@qPmzh3!NDO<7s?_LIG>~MVnV|6P}G15VQSnSXdVeP4>RWLXl6tM zV|aj|qdRj1kU4@P(;ATp&cKRfjDdCsLq2Zi&KwTy!+%eM43tBA4759H+9RPol4{r2 z^tXZb0BGk!dnZp0GlJ5w@Cs%)hKD1&BaoT1N{T>O`gCgU8hz*kt`Nh);B2`N+;m!2ixbS1d)>m| z%(1YNfc3;+_*i7Wl-0!ijpo_I{-n9ksD~QwrzIQABbLQSDy(+jv)qFUVXlL{KR3p$swTgr}xH5-r$_6smqPRQHzyO26d2 z%<-$3!o_Qt!l=b)$W#DI1>|1TkS<709c1FVt5kCkRVFc_&``3Nf$QI5A8r;Hgz(Ah|w~;NK%z`aY3Fq~}IvDurB9!IWTls;4zG zt<|#xt>2MAZh$l8v*jSvNMY_qHSQ}XkmFFHX@D<2+7r44e<8m2sogG8f*QIxVUMq|VALOyv@(50RBKr432Gi>KuZ8{r8`A+I)g3=RYU=ets@oa#$ zr0}PU_mYc&X3#l5I=OLgK`Bd(2Z7pwL7?b*e9B&uy^*wP1yxW4K^uTbIQkf#0cwJL zPo^3V2E!Q#CY1%YJCWl41PEHQF+AItMIgUp0^?)=Zw7&Z_poP9qF0cCrB-BMIY@<# zleiT)t_j)|Y+_3vH6DWC?Uot6To_NT$t18#spZf zCVWL2#K^EhaWy`K(pI{@D|4!5{hfy4Qz-|70?km$k4&Td2-~b&vvijkv2}g~I0GIM z;@d1zPqWBOXVP?*MV7n=%YvYZ)C2P!3Ikb#gX{^i&sF1LK-(0UV;(db5X^iGpP{V; zuI0D*L81g_Ih)ZSc0{Vlu%SbgCcy9lH9iawd_egIEh#pifc2t$gYMR+f?Q(5+>% ztP;Ef<@KX+0`CQUTBOED!BDv{>S8zMB09xe?TUe$P@tnhAGm6K3~;tL^jMD~+LCDaVVs0>jnFl_Dn! z(e(jmIKyNY@ADUPG~aWd(C3hOg8(4t=y<+Cs8}WDkS5GFQ=|$&0xf!&iY4 zLi>9RU#(r8v|4qhWpRQYUd*)^zJ}BX&%Ksp%tM0~5MXI>Fk43E_?~ z>moHC4-8lYMR1iUOhIc$LMSXX7`|SO3!!ldAHz3*+%{o2_yQ5sEQOj)o>t6_FdIka z7TCXR#_-L^>|h&*q?ib*uowx7rHM;$HXDpdjVHmdd>Cs>E7;_}!*UR80Sn|U26|zK zkpj}{1Jc^6##3SRu0M#l$wS&jp{%@$vC{&8S zqw1tXrPQL@sm4`+syATWMQt*)J7YDT{)gFU_KS4bFYX4=QZ+sv^#THR8S;IUK<)T?KHTcl7IfcS^5W^3kWs|CRp_a~rtC)wtY7c3wb}evaEgfK? z2cr${LI*=Tg5igt7L;fT9J~Bce;9&k3_k)?9HXc>TERSu;YY!OU<6Q=9N^wMRu~ls zGRD#U>4EPdZ~;EA1C9XUNoZ$q31-0dvtz>X9E-t2(*S?y>Bqbb9NfgLWNc z%njs5K>@+M%!^&qsWFX!_8+?F%@b#@-3?Y8O@S7-#;`kMipqaB_Kq|V_2TkI^VvKhO*;Y%eK-jm` z_#6<&b^^n1w{oL%b#9b0WAJ8Os0DAH_ACreH1YZ1i`)QDjT$cm3_AhC9nF$_55wvWZNI4Q=OQ!-psqF!r zfujPBH5DnKPE=6-TmxAU2bk8h!t}yK4!ZYJjW0p|r(TV(1r6E<%JhmAhax^YIw}Dd zL|@S+5I3Qtv-bTaj01Ekm@Nt=@O~KnTGQ(wsMs48pPaTxx4QX4gs`VN!&uA9`S z-;?@`;h(5Ueb!BCQ_G~jp-Fx1!2E*YUv!fy|8r7bb(7ls&q)=u{oAApdj0F9zNzs| zXfof`_(qif&`jziOzNjGL2b?GoZl1LLQRNAqkBNoO6eChAq@Ye(~LMq1!uhp<5VkE zIUR_z8E4>77)N@{p(6jSfXhpJGQ>Eik9HzlkkA$&gNtd%I8R_)JJ_h~kp`~i8R^z&bo|FP0zKz4 z)c8CAy#yHAy7L$?Ee3Tg1_z~FV>P}F+AhaoT&8hRoX%mw+5@kFB7~$byot#rtrnw$ z8fVbp5*UT_r1N?p$H8k?!E1+c+kv5zLSIq^`*?Ix0_%aFYOxyMt{=wap{-OdxC%N# zp~iQB6uoVEL@pi7A50`tjqgNN@XE)P*FKlbjr8IHo$aafmtC-DfFl=-%W~y)P?0J> zFP;g;?Er6d)Hu8xf;K;lYvRgdLz{~ikArd1+a5K(n`(2xxExoWDd4pB;&sHhrWDRH zs?8eXc68;LK|hWcuM@^Kqx$Wk+5k-_SDrca)A!<8U|e(PM>XhUTnkrT=Ugvd7mV8( zYJvV-HNKZ>%*D7}TzOpqBi)PF4dZr&0<^2t_&#XIxZTwFe##_s&G1CZ0t>>7EGUzV z)ULAyDMmf1h1XA4G2e)!R$kpoTu^D`!tl?@(X-YoPW#mO0cwHZSyFQDUcu{*al2FT zNEI;nAZS4kdme!fFmO{%9FU7vi(D!S;1Zw(CPkoLmcXTgB2f54AY{!!DHmQlUDLE$ zL0AvUcRdW_T5Dfnu{or(HEHF7PKv3sio+T@>?t~WR`7aa+@2)k288iI#}Q4V9o1-4 z!Lz}*HYDSwrtzqz(UxlLRl)0paeI-BYSajn!eV?(1JIiS;8yUs7?%s@=`f{^fcrR5 z?4vy#h3JJcr{1tfLvb;jSaHzqrkKRIwtuVJ0d;nNt1E#zdu<(blovJ+z;US-falPGn17XyGbOM%kZRA2N?`%5kZ_rzMu8$f&4MRVIp?%@e zPmM>z<70UAcjx&*XFo(Tdacie_ep1g>grbjJMP_kvke049AzWc19-WM{g6xvP!~^?Gd{HPom&fyKniGs#rm78h@sADVJpmyRpZxy;6@-g?%xP@1cDuZ z6MS7mfIvg=Uw;q`p#LEFMr(L2!8iY#;8RB64yyl!U_lGP@oM}Q5Zna9OZac$-PQ_E zL%l>CS|mz~giR0;THr(DWIa zWbQmEV3Gb4ixY)KuEy^I=oc7!9QwM!3Vr5a5XRhtaTRL(9yEQ0St`*ieSd$MfiyIN zuEuM@SkYMnQbVMFzNi5mPk|nQX{Y&88|eFT^opH|8C6se_zeh4_u{EA?s$z;{tgux zUcB)b7v4W0hx-F6vb=bibQ*jiA4#LN`TYBXJt9FM?WH2(MT96*lmItGg!V*BD}lbb zBnYvR(0zk161Frd|94mIcYB29TTBWGd}T`rq=f(PJ1X$yHu|ufAcQiJl0fb7K`eaZ z^-r)Nx-Y(!g!bz>0)6i6=!-tZrg}OMk;yfsaZra_4yp4Uj*M^5~^eo zkqEaYWEt?arU!#T5Vp`uL)S66l#V-B0dXdDFccWghU*#fV&C0;S?goasfaJ zgy_3QGzKt9%Xw)M!BwWin1Bnug@#A?a6Tbj0oQ2|!N6(wsyGuULEpUsmKK3g_cwYo z7?CmpKCsvDLab1#U@&F6$eutKO?sq3iwFsb`cPlggPIRwn^2^LFARmmkl>NA{-Glr zC_Dn85N_BgDO^esx?o~YWXaNzX8aAEP$82eWQg~GB|eMskD=^|cwonW4oG;T&&J{V zUikbQB#VZDyE_cctpT`Zqmcm!8N|@SSxQLoBy@Zs2F9t9sUOrrOMIi-;hLuFyKBHk~#Vg`nS$$=m2eyN#Hx_R`rx} z>U;!H`P-}k2U0F%%SesDGr?a&c&OA|7$V@-7E*ce25{qnx`PB=642-M zp!-r$1}LsvBFjP_=^}m6k^n9TF-SltKqJwIv>@{|Fk2y!K{*ua)`kiphA*`RLPC~E z08zn-py~gl3+x)E4(guS&$HIsGJQ+9}*gCA|!-!5~RtHP+t<#G;JBdOoxQ}qH-HHWgR`JUfrsGrM8Ub zSOf{tumO@6Bs7<8kV>>=1hWGY8rK5SK5ZG*ABKefA^psNgkVtpQEmA+E|zN8=*;_dwF|=Sr*cRVX8vTaa{kP~SU{bYsG@|OyTkfJ8O`YeB!I;Xv}N>&mYX3z1PS48fOJq>egiq; z6B_>&q@9ou4EmNGl@UHP2Pa6naZnk-AU+{EpuVReAsa<7yR~HmvkOu_B!p+Vwv6DH zLYfK*!62PLWdwtC1(gxZJV;X@p?ZV^l~Fy?%aPjhFvuMtp>g|Y%Lpf`L;VoEUO>7O zcu4O8WlKn3Ap!p|CFJOzfqvH?2>%yIZJ>S}GbV!^;iPHnKWXcc+|Zc1 zdci>ytEjOMRmT4vT}_5S6v?NPdV;CJqkaYNwT!B6ectB%7($nI331viQIOJ_1>FCdaBAWk9NXC$K_0OS*@Pt8*^pmc| z^9;&}o>0i!p|ZCAskS~C^7fE)@K2x&e8d7FXF<~8e+)%Lk3ZxcTGc<)){~H%w5q=k zWrW8Aayd79TGb<+M)dcE+!T^-+`Fg<^)8TigruXh29=>6`6M$)I{4eD z2=xw-cY>sYzYb-@2W!a9Th$AojQELk7TK^4&t)hgc_ChQM%7ySFF_gc0m%gEtPcJn z6w!Q<%)3I;%{K&K?EKMc@Z(LbOc zi<>Til3B7|2IKdIJ^=>LZChRD6VRbT9|aGsO8N+>RRBpf{jPu;fqJbV&}BWULLXg) zqDJ`Vo!9@WMu-@{<8TVB_4D7`5xMPu!&CQPsZRf>L_O&cQ&PlJ1vD*&=8`13dQNpS zYPmc}O+hbRPQjxbfg82lA*7mHJc#xhlW#_B98`7OU*4c@njyWBA z>&a3x^wDn*{852^76J9rK^SU(s{rbZD13AWQ6@Z;P!F4^eKPvR10`%1Q&Di+GJPtP zg~(Hh;$Z0HKn&6CmSLwSfvuqC#xjATQw@mHffx=E^6x!Zl1S>%f)F;hG6HHu@G}xE z`%alui;N20(UuUd52I`UaB`r68+5RjN4C^``nZgL{WS`$6ad7Uno&2+4wKMqt$)u3 zc9ZC)IKY`va2@`!_l71HN~@6;GpG$ebxl_V4OoVO=ENaGcW1ZdS}l@P_;dtB&(KGF zNu_aM=k18LyN;T<%M`%A41ILXEFQpYGw5lFf@J!CO$aWa3c!|WT`8q%JLtF+_K4;l^+V4wgy%QUzi_&z5$5bhz{HGedw$ z|0hnh``;x0=WS^LxGIYR| z<}#H$!$3s+(nv~%u|_d8mxMK{L01WqGK@6!X-X(+HrBBT@#FqwR3_}{)8M|n21tOM z^RWL5Q?T~`n<Dk(%jA83AL6m7P%2ZB561AYl;n>;|0l|a)iO`{uM8MGD zp?-v|?O<5~tQ&fD0EO1uACSL(1!4YLf$%- zc>>R99Y*oXV@PPe{*XV?mVF^_9kaBKNA5!#>WgBQ*6~Q|7^DW;5N&8JZXIj1jxR1l zn=W>^1Z6}+TgWd$LikaPuw7H8aBPG!;H28uLk{q?3P`IV!5pc5%__(tuA%l&E41Yj z$d_x&#gH$Bgz#*Fv_xCp0Qn+F2YX8ZLPB%lK|=gRWjjdj+Hx<*U9@Eaa$z(*A_>IY?% z2!(!zIXE+=T#zA+)&91MA{NfB(68xa7$quXX;7^YWwZw>$W&UmBP`|$rK3;`2hWM(M8^nOq6)5tiyUF$m#N@Hjt9R&B2_uclVu{Q zIMWf%#FW&!ht?;@e_I4oXnyfY5W)B_ogPNR8f-FGRZkKZ3eSyupgOUp{!sJrcMsY$ zmv?hMGJC?*GbSVLxio#Fc&yv{xo1~4xZSva@5Zic?>;sgd(YTdYCU>=MaQl^yhAv= zS)2U^#gANgiqZRxyr6GSbziY(m%dwbx=brCdQ)m8`B5mov0ilO)z~E;ZC}4?h;H{~ zdX4&mqaFIUCuaDFQ|6N52_Zk0r0m)ACQ24-aXI_#^HF=EK4!n2;k-O}^5IFnS1n&& zz^y`lYao^?^WItLR^J4SuBX2*BnqEBo!~@xc z>GvL6yuO4~q8IN+y)#UTZtsu}zHQ$n9?T=N+jX6LYlQF`s_m1H!_OWHn2+r@Sm-}(4$@lM{YW75)>9TKbSs+;4F9OC>aJ-9+1^Zu5>p4`nZs%xuC z4j3qZgjOn3nHj}z_Zjp&aN|Q~{{wX$4I;d2Uf-^mdPBV5@UI5N%LNVD$DTK4rXZD{w_3&khu?DtZ?(IP`#HE z?S8KGopK{ux)UGb!Ie6hE^dr1{Oh6m!|nQZ>-V3njZlwL{5&#h*sj0EPV8EE*{Q?% z#qaey4B`%|K6%?6TYrMN-{!`fXxXH?Pp{}nXWEWd)JPK}R!p6-^~cPZ_4AAq568%= z-xgk&`Km7BV7pprlw{|e^(I|UvvXbEcgUiDGjScfWzE#S!$O4XvOCBY0(W|N~$-l8GYng-pL}rF?sp>C)$g%LY!#xZ>Pkt_&?g8x}5Am z)=m}1wQIBPUfYt$bElQOZ(h4BJOlL7HcdV<^3#nGv&_1MOj*gF+a_pujD^e5c7wc^ z?6V1SyAT|;^UIHRAGSSR`_i`V=f@G7_a_~TIXC^e!`^<&d)O_y7i~UxfwaTW+J)yu zE5fNIXe|M1{%J6zR-J3i0EBYl;Mp_X>Qwh9=^Y{OF!8gcgvKa`{$W0^He;~ zA5~v!b86nA)pbM4EvMm%!5hwR2o@3s2L8e^1FrB~>mSbg$@3Y#bnYc%#>35>%z`qU z%$Kb${$w*Y^;VB5?ltx4(*}Gfk{($-%0J|4edI0P+{wgCK}VT5o?eh`e0sD&_LnT$ zYVq#+d2`Ag<*AH;dVjg(EDW9RzWCg#_)f(AHYc;5s3ena<|$d}+~}?^whcefFkZYW zHtj;^;=Q8`654lY+woH0(_Yg4-&r4BI{o}ko7}M~?ZU=|78m+6BHdksGOQ0MOeOxh$9Q1xt}npI~e_BE4F@KV$9{_-Z@oA z7I`nMoMiLTai(RI!R*I7?`&Okt$AbB_jZe~bWF4=2$-U7YZ!58p0&lZV`e)?pBKDl zrM5Y}HYqhPQ9`^L*0#+QtS&Tx@nH39=bf)sb5C_0Tpe07`o-v<>sfP5%L)%SL`27a zyaQWhQIFw2xyfpDYVAzp|xrS(rF&M<<1QWl~-R=W9AS z!T!McF-sOTTpFBu{q@I*9xL*;t(ur|YuWNKtjT5!PvY0tqCQI>vYv05xtqM{9g;A$ zhT+^XZORn(hlcCdzMjkZT$sI=sCW30?A`eG@U^>hE1GkzUDum3d-S%r1ImZBv+lUL zRrhk4zDshAQ8vC$&y~?1JYwcg4!Z1Qkl10zn?=3Fo)u%APMY=`v%R3`;oP?~n(clT zclcz~w9qN|xXtrMvzqx&qSs{Rf9ufx;+m(G-b*gN{dCIq$Mq0{t$qcESAAV}{=|Ix zg)P^-D~ezC8?t4{gcW*ivj$jhFJ3I~wPjn- z(8e*&l>xi&k-Wu?w6N9?xRg zPM>a`Rrg{0r3kM|X5l*f^F>>#&v|StbAX$5PNswUUt-Q&zP%{%$>ntsv5pp}m+bEE zCk)-Aw|-~QtxueY2X}fHr1w5#{Xj01*UexJT)XL3?MP9Ccdb%y%GKt951#GXo_Xx# ztrS;cw&+Mq+Bdu4&RmBEz2m#$%c}8A{}b~)gOr0MfxU+gNv~;^PDu04@7eA;zefM- zh7qAgF9)plN!nALazE;I$=-E(5uG!euAS=^l2v)|?ejrN)vt5EUw&x2-Bz^iwOv$r z-SNaE^_-HZT@J3Nh&QgDcGX3%t3PwwCk@}2|1xn`#JytG_fnrp7sK~F>EXP}aF1!< zj=5I%ZMK(&&kn7~J-O4*&CTkI*-p3G82<8g`Qz5d7WnSvDa`^xS+n-$2d`C)czLy7 z)2NApb&c^G%p=zaN7WlnI&eQ`mrJem_G|qm*$+!{C-;~NjV|MqR>_lulWTXUNhKmKyD=-PHy+ne8mHs}wYw)5h) zd*h;l+Umy^^NlUX&*WYcpUD=9k3C+v)FNirb*aP0g81vtvt#m9r+Y4zuJ&-c8*neg zJbi?1(zF5MMeko3Hl17Xu=wN51`ol_xIGb{ZWUOo1U6$vCI@ESclP|YJ{FeKGl!F# zrxm(%YziKl{Uh|*Y1=Pty_W3@v!Zv+?zR4B*!9C^E*IWMu9@(aUfucKfS6(M3^td+Z=9lPo#eXg7xxSrv`jT_^gcmb{q6+4Z zoWCME{dUrm_5&xa-;-?oSa9B@Gt=Zt@$sO8*YgG@oBS%hI^U%8y7ShyOP0S_{`|!- z^6=>8Ys0S}b04~5;w-M4r)pI0V}|{-wjI0IH+H!?_w(w|ipq^IdJR61(OAA=+lHd7 z$45r(@V?XjNE0n4b;Ge6ejmOYjJ$E`xyK|SCpG)DD%HLH(aA{@f1P$*HGebj{k~v} z33-{)Db*zbSBos%=_^dz&J2+IJSC50Z)(hZ6BI)X?EmbOG~nP1r%vOh-JIQg@2&9u zx}t6$x0;$*wewigbN=TedC`}4&)564Xx#PLxr2tW20QN@%|5c*_hVM`)mLSg%97`- zd;0W5k3Kgp1Wj>$F^xUyj`*RA5A0M9$hm0uk1%(;4@d0=(z_;HCR-iOyn z3@vVL4#qFvKWS#OuxIVW4}s zxiUV+|JUgAn|sX_&N#TJ@1SYrZO=Z8w0wmnn0nvb(70%G;Txm+zFh;G2P~Cr3$0rm z_I~bQ&KHN9*0UzI`x1Bc@VBmwyWaZsyi)x<|JbXA?+$n!ShU0H>z=`q!sFB5o?aSt zth(o}j2(H`Et;Qu#*Y^!y0Q9|{MhDDu#ETk@q(VWuxF2?wmE%2#q{wgYg)Z(?Ya5( zlg`EEaJEeAyLa?OtB{AvN97B8?(aUssE$}`apF?e2g!^@k@M}zY1>5{w^PU6Z~aI) zVJ8zLJy)hXu+}&4srG-JMKo-^GG}^uM8`|!r+F6NQVOzJ_DKb6zg_C^W6Xjli$jLq zIhT8;gvZ;bwy~7QjQiU0de?;$jYmh|>C4md6FyZD^5^D6(mRpX*( z);5lVY2o8<7i|CHUAME~#-xB5s}r0b#8s-NH_TjdzmIV8oYGm1Po{To`eu6I#Wk-( z?e6!v>?1g{({G+SC2DUg8RkIe5pXHr?&&GvTEEsqbp zj%mNu{qF1`r@Jh=Iyx!sE=5664OPjtQR4Bo z_q)xUzutMGkd`9d+dZ~EbNZnBulN5*e}&cGn&jklw9njfYvS0}Zc{G^0^_bazbFZHS zGPB}8dI$9%bSCxz?aC}ShjTlkol|Ex@g7)KKNwp3<;JBYtPd|=*wIa{W!^mM75`ve z<>1Nv6Zp)aUE9vZW!LmszP}5ddt;xci@}z9!<&P4c!&Fx&6yE-L)!6jm3#2Ont5qG z^LnidE#5c4dHb!THxn70`paFzvxj}G#;dmocjYX+Vb^7Y#H`cAw{!2F-!yl_M6a`- z>pz7xmhbhbl6vUxD_ud`HhKQ(7c=rp8GjxA5kcn4UR-(p>_)@OHa17L7LENFVB4$6 zy!*IwjiF89`-%_G+?Z?TvwK5cURsJscIis{QycQkclMW0a9Pm3UM{%E`+BTdZW(yL za832fCxp%2w=26jEEW$*Kgd7HZD%&mJMPJl9+?jF?i-vszP^`Y^u+r4%P*a1+G5-@ z_UndsSFX#x=B26Qhd*o*EnW22+B{ny%b1w6X>lPxCz4GwW4e6e)iZV_D#LCX)Yr^? zS=TVE9VI-c3tP6iv?wUl0>^^?e0toZvfMR;onO6FjNJ9G zc<15QA$wDYUq2Vhde}ar*N4!K1N27*JLX$P8uVf{lFdCcj~@>`TO56=tsX~cTw~hj z?Ye3Gnl8TS$Ts)+VGFUfGzr~8FLHU+Di!C4Ata$M{_Q~Tl z5<7C>2-fo2v0WtZnorqw;f+)Hc3Mg6=xc1=CA{m%4W}L5X53xn{p!rd+OvDs{pIxX z^tC>cm&A7=y^jT%!)_r5HY|A? zbIbZbPjmjammvkg=U;yLA?FWiwEKGX!r^Sk1)W!T)J2bY(=%Smake^R;IJh(s;Xwx zuJ2K-EZ576(k?%aD|X@(6>~^w@=G zX1V1VY?-=z$AU~&zqDT6a-~;_R$NN!lHyqVcAisqzOboI(K-LS>$>?P8yv#T$D~}M z-|0Q}$g99E>}Eyf;A40GDyv9u{I0+LozpRkLPLl1mqrbFyz_fVZQ;iKJKkjlpYYYjV{y0e>RG3{UZ|b^4EMI_m9vd??7OctZ_vl^hV0eZd#oPx zRxc6U+52$Q5qZ$M6Aq)~3;CVz^vUghpid86IALheBZqm7K7Cos-{meI`u_NyF-vN% zs2BG+m@GdKKgeKmC+WV=s}B>l+w1$C8o!a8=+(R4di$$`%SN}`(Hu#v{QlyNpgEE? zIdKMU>danU`bj<4^it0Ja-)~2{*dohg0uaeZ)kJU(7ua2`0P`MR72xypJq>OAK11; z(Cu;?@AZyTZ%S@&>ojZ8A^YhwKP3*{PE*u)8I<^ZR!5tLs}?s8Y!{LgQNozyoqnQc zr{NcBw-TAZN(0)cSC#g)EjT{^%kcYEzBR6Mc|ZFe`1xA$;eh+NFnPrSEPv1N^Omt$;!dOeKdbN9 z>f1croxnWZ*JJJ7ob$6QCvzfcnOeO{n!(HKk1 znlBfZRL%c6|H`$$Oix4|@^OtY^2y$tw5h($d(zzL#828@_mVyr-Oa-meew>kpRncr zfJSe6kMyByJe=abzN+6@H)799&cs<4FI{^w>jN#~*_$CTRWCnRXAktO%p6l#Uoz%g z#BI^iu9KH^eq`ULcdr8va`*pSQZ*uYvoPqe)v_^{>;jbh=5gn?yRnYAtz3~8aWPoSrTTP`sh&~J#VrK(}W^7|`Q?evoB)V<>qiWu3q znVl~N9N4oX^GLuW-}KEMd7qv8dgPT)*fXPe(zV_~wGsxyBQP z=f{qicR_qFXqxYye9tXD2Ljjkd#0%HUi);LeelKIpK`a(p7d>Hnn879{`RYPP7du^ z8fR;r+mN4_+;rBP(C@xj?#K%#D{K7UZi(8ov-cisp6NaMnHasC#rBg<#pvOO2&dUq zUA`Z|1Fs(4(BvTso*`NrP^kB-P@doWkyIWP=Co~*lf>cz=iAtNU)m(=c0s&d@3$t) z@ngF;6XOFsH`s`(#=d%av>$EnmZpS(rJcX^HXq^MOuwK(c#rD&J@dvJNPEQ*=Z{+LZtI;{tH1C(Di{ec59*Eh4XOU0hOnhQX+u0oZ z&}LEL5|8D%i(kbl?l>&ZeY*do^=Vr=BWSBJmspp^H`;A;@+qSiN0xP_B*~icDb{6w#~}%(+BoEWovjs?D2WXk&}*>N)xXMLtMYlA8VT59qVLQB69sM zGFKfKuh`w0?&?2K6&K>6^c(aOR|bM%Pxz%T7hFv|YvNeU20Q^YC`lvHgt1 zfyTWo?Zo|h?{~}YSN!^@n4qm|eq`-8`;qmhXWGGOZT?~9@i1!r@u4om3if==9@u}@?df&vj&&2pzxzm7WO^;y zJvAjEs_IbJ?5!Smo-93cqUXqr4r+RjC3)*DGhcSiKL6AO=WlBM+-J2{D9^3FbL@Km z$;SJF?vFk&aArUD>zJSVNmUm`tU-rHA2Rm2=s(%~^yBcL<3qbI8?^h4yjHkmglX74 zXTNTSK}|buFEq{yc(IB2uw+c#%$P}jtTK;*XXXnMXPkJ9oxjq{g!Amf;J{`prTO+{ z=Y_xSZ5TWr@0MNWYqRB0u8&9Qlqk3Rmxl4~(xRslk=vi1UNCuL@|MPN>pHNvG~Re3 zx1DmXwwUZ)9oi<`qMvDy^mQb0>uNE%adpJhpv%Q_#?OQIkN!IN_Go^^n0>20u_i

    u$>oE-P=3$aI_>I-D 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Enumerable.Ecto.Adapters.SQL.Stream.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Enumerable.Ecto.Adapters.SQL.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..191bbb2ce6fe02ab8f74fa38a50baad619e5305d GIT binary patch literal 4008 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Dump.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Dump.beam new file mode 100644 index 0000000000000000000000000000000000000000..7d7f21a34bb9b07dd18ff5027dc01a0626d357f4 GIT binary patch literal 7152 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 H0NDQng{CJD literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Gen.Migration.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Gen.Migration.beam new file mode 100644 index 0000000000000000000000000000000000000000..8fde6cfd38fec46e14a985a4468e158a7570b5ee GIT binary patch literal 8360 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Load.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Load.beam new file mode 100644 index 0000000000000000000000000000000000000000..5ee216a44874a6803aa3b70666ddf6f55b23d29a GIT binary patch literal 9828 zcmaKS2|QHY|No2`+`%x6eZBUwj_f4YF4-ebrN)@K7{<()8HPkEDlI~#XQE9iMMc}A zO?Z;_QraVxrR7mQg-WUaxr4qvzyI_7-q-6r_uS9vF+;e6EBcdH}IE#4S0G}`) zQLGydM>P8JAM&rk$|0; zDME#OCNG`O=AgS+C|`gw86uR`fM)Y~0+EoO&T=kI%H%RdY#vvbkj`KVctRQ=CZzLN znH)4hC=z5cMKms(lYk013~uuKWK=|-=#*+|Ve+_1Y(YAm1GFQ68{PFE>mr3ID2H=v zk}wAqa8VAQ%@y)drU(vm9pCT zr7#4-QW1|nIh4WYqg)n^#m;J(WDEpWh$02NOfIVzGYI1Z_Gb#v1gV|L?@?*!=)f5| zpCJ@N6h1?MazP*%e0mZa<*<5xTAL&030RTos2~|_5atL)Xu8y@20ER=V(>+%fKG?h zCb_XxU`d!86$(*=yi5TTr3+9#kIomcvwDA8A&pWbDiH7lFfT1KBa@Aaro!XHWTHYL z4a7GxiNO(~6x)V$HkJ<*n9fSzGDPewbc%Vd)E-C`bY-D}iEz;~xoi=Fr9V=@U<*;2 zAd~wugb{o!#gQO@s2~COEJTfI99}YwpDB9(e|*>_?UtI~FxeHr%}hs71~UcH5T>#D zbRi=N73I*y3;`G9Q0V=SIDq)4f&{-8iWtB$J__>5MY$rHm%SIHE@C8dP&%5;7J}+y za(F_Jn}%QN2{N?(Hx_$GTTrI9G+P8y{lA$UY;V~D*X?IWhd9_afcye2QimXeDUYxj z<1>**J5XN}RRXC_^0L$U95fwREriT}9TCP(7Jx+XxOQ`yDQG(5=QBjbCWbWS3@)fU zX$e5;|NmH?pj6BjrAS#3kg*IJD7{||rrGvNW6VyHRtw6C1XF^E@)H@XL>`X=^8_@Y z0aCYRb2)4-%CeoB^7an4I6oc>#o^?OaX1_W0K1L?%mz@wQzSSUH4_RR_9Sf4g4AXd z`4&ZICZdAa6`AEl)d5GH@ie53K*b}78u*Mvf^guLfCN#%jgQEH&jN%%1)bqA4qqxq zAqV4kNhmUEA7FfgbvspoqC}w}1fm3%$59Rt2@;w-1(v{#vN%cs0q9fEz!k{gNDc~` zaDfa#K}-4!Igr8-1#MG=NX?*7@GX-fkVz4dK*T=4H@|CG=`vYnJ5K`gujL4V{Za`>k*Clmg|sN>Q+`q2?W2aH;@?}6DRBgfyNWL&;pfRxkT?R&eo6RW z1D`oy10jl}fDuQaS>h6cU`q-rYl*X@SmMYOR~m>v1;*j(wJ5{{OB_L-5(y&XOjacz zM1mJt4G*beUBECrr1r12y*E~)01Z@0DR2gc@sPSwBwVjWBdVJrR40VsUq#j+>>z8z z5fCj{!I+9D7!xGBiAj}Xix4e~gUKlLiImj4d2R-8XJ z&Jv8XBuHAoIAEU_SsM>&0SXoIC-8BAf`_z0Q=U?a5KR#UD@VkPTCW8Y&G@i8876oD zz`g_=)t5jq^Q4ktFxHxEs9;0Z!9zNTf-MzsA^<;~B)8<@U7iH80brn!b=%0gct}^$ z3k(9`ZXl==5QP~)z9SG$QJ1H+AOt7Ld#nWf2@(jT4+eHSll9EJ$ohCl4>7}pnt|W} zxA2fYP=csCt$}GoO8-=`m`zkyA4yGGEb3F`HcHY|&_oJkh*N|=eH1hk3S{C4kqW># z7gOM&OC#j%r%#>)LZYV^Ast&@11R+!jq%IHlx|1zI0xc&Jhy+D~NNY$dg@`3i z0%=a9%v_o>i#DaL#iN}mOyJTuy>jS(gybWfZCj{gu_W79eEt2hA8-fGTo&p3sDIQ6oPbeSxF#W zz!?ArTMNlH1c#rpX>}BW7L7nP1Af>I6{1ummy%>DT$02a2ycg<40Wg2jRgDnJ*;L!J`I z46A^d63868dx0?^Y%w6Hvy^Bw#FPkTIYKq_G$jX0iw;qskiGGcH$nyLLo6ssi;0r- zo9JyLgMcFv$dZU7Pq!xffWomR`x6yFa(xhmdB6)`F}CUiNcnw%G=Dtg3%+Tj8B!+@ z;S-?OU)t-}M)t!)eu#n%L5&7t;}6yW5FS~WtPbo8pdgeQP;v@!3cnE`3Zw^Ufgk{r zwE09}+ax(iT44)-5y4*MAOiT}1#cHII2_(-wg~3%cxghI!%jnC2K@7_5Ee6pFoPpN z8LS+@!eF5+7<}i$cCZgO2L>3IWUF58ZIjS#Uf0-w^Y6KRSmr4!7PS|0Ry$76t)n? zUUcAeMh={a0;_}~JNU*~A)GFZNkRXQ6gUMqmx!X=pPmVL=`hUXWpY?tOVNY?%w>-W z_x=+V%!b+Nd@ObVIDG&zfHHs#fGU6*0CrIU)B*4Sx&V5UZH(Ul0OL0VFap4MOaM#) zFuECl`D7d8w*bJdX#mp!Fn&7#djO0d;{p3JY1;|hodK{kWA?ZLVEpa?9spDFXM#4y z;{`Aa0ORonKmafvUjSnO?84;x17LKljroi5V`Jw4V05e<27t*72Z#W`=#cji8rGHx%;aKn zSO7$Tkjc9XxMLSVesDLIgCGE`e+B?HZiY>EM&HaLc(4Gt0f(`aTnF?md5U6VMb^ z2Kv|)7JwFZ*{;kGYybMPKDjjz+JPONnEdOO#G8Rx^X;crIZ&}|rU)}a9_S{qGSm5B zZz)OuwXdGyI${I5gE zfDAVEU?Y`+GShzTQU2!^;%65oOrF7EGlZxR(?tZ&c-AjQW6w#G_G0afNlUS|KrFQ} z6$`B8PyZ)0IYV@0dxQ``PjTs0l?^rKHxM2+}BI3CIBl5Swb!r06dq16M3{# z8ZAzwOUN6kb*97Lupp5V(G*4&8*JmGTw;~U;+Q&f!FV8H3OGbz@t9H;tkA4N!D1?e z!7&RqRLIGJv1$OzIktEvf}sCraZFA1o6SuEWA6U6NgizFg$t{!0Ij(ib+XeQ3YfHDprw}3fS%fBfv%;6)OV*BNLpOfITfR z7c*RLVtbl~`^`QUoCgT)S!@QEk;G22pUX=Ufn7an4_xDkz_M?PW`SL>JwJtqa@pDT zShd-M%{{OrgJaKOC)%e2st7xTl9KJPZxcH-8_Tc9OAJgt`AHki$Y0`!sEekCh^voT7BF?xJ_2;6Y7jIe9tjAhPjTQ+X|29`y zW6s42m(->?t@MqD-GxG78duM~WUt6l`K0rQz`Pjo*3;RAhSM)z5Nz!JQ0tj{g)x}M zGAfPG8Y*MB=k0N|=!y82LAeE|53vvzO&ui#KJV)eN4w`&1>S8ZnjKG z_YXLfdDL}y_xWV;jwb8dtKS|?yvj=UIv90=GA~@^Of#!?_d()sMlWZ7UnW~~D01l^ z%^7>v)EnNm8!nxlxAS{<;fL(Dk@dylXV;#+RtybWh+@_+C0J7C>GMm+O#d!;(Q;+_ z^J8%D>u&{b*2(J6ak*2lsY$V4PTx#j*$sLwuYdLAcaza+efue58wG>A*5dtt5!yGW zJGI=1v2b2!dG}F|kMQggSJsNUijwnY#aCQgA{DS{`9Rln`*74j``ComRnEo_+tVqzMY+G39qIHJa(ami3tq`Q&9)(pJhM2u zisMoFqB`+Nd{KH=c!`i}?xN>rnVyfHs?#|~m_Kj)rSXEE@GEDwzkk!~xI9`W<73$c zXZOmlA;Im9&NZG!561ix-gy7+3rA67+A7C05@d;dk7eQyj&8T$m6 zZf(xj4i2F&Y+k?Ej(P5dTx68zJe&Kjy74jA9j{B@`X`K>Xn8IEyUV%0`LQlDZOvUy z@8u?wd(67e9h)9le1Cedfa%xsZpCjQbxHdRQx||?ZyztYkY#LT5pQ{IbK?iw3c{Qq z$?>7kF#YUcs?oN2U#gn_jLPq?y1}sMwWMftb+s(^;T}3O(yS^_9IJMFGh~*#d!J{U z$JP~A{iS7lB&B{0Wo~tWA*a{b8u)c2-P@q>;jGUiExkIO+a!JphyL`&3h(pR+Zi7} ztkup;?Ef|t-t|<|qk`Vm+c90|vw?2>kRUKC?RRR>^;PHewl`nlq?fztVQH~6;G%%VWD|+peHFu$I8N~j?!2c|L66yqgkWv9~Y`R+EF zi=Ax*8Og#&gJ+7*eL1~Uammxg)7XP}wnoRavBzFM9-a|PbzbE?+!}m+Ab-AFHk>*q za`f?*CV6q1PRFv~9LpE{V_PpRi28ke=qu+a{J1IeML|#K7kP(KR`UhfBT0svjPJfW z`|S(5;+E@|+4uTZ_1m3V>-hYx?4{?S$I~*7top3jS<)1-^r%*|rn5_%Sf6e&GjQfM zn0vl=-`VznaoK&va+fPE=XJl(d^C11(BBs|ujjynTVH1vpHH+}V4E4udB33PYw=sRhi#2PypToD zUfPx`zdbf^t-^bB{3|lhutz>l_sj5iuVhIbep-Lp%_Yt)3=7J#Pt@;!C69HDZ(Y!o zIR;&+H47mS@$Mv%=CHqqOScn23>+T^k$@;Cg*yT*I+r zHwN3fY5wi!mR^n@N$!kywm!e0E^)(sdf@qOo#AbdQ^Xq=xw+xq;9e z`-2|`@|5v2nLVq`FJ}$A+r185zUO{Z?Z=0kOvpDfA3AkDUzI3#pLeZ%X?%|puEsMq zNf##*G5DEOv#D@IDeA~zkGt;`MRygmwD=3T?#JYw9-Y5B^2B(VgEC80B_j1nNY&GLC+l|j>VD33;8;m;@TaWs>jk2%bM7i>PLFnkUyn-$ z{!r@PQ67B0Ze&EPAMLi{Xhzt$=+B*kh{{j)vNwen2UGgD^vA7@M;@D zPW|A9-Q)4*@y4~GP2aCI`JUjTUpABP@01-U-R>{4uCdlSY!hu3Z=8Da*|yz}1UiE&15!9*--Ob*pl8>MH=ey^w>w?dYI?WvJ|4i`TVe?JR zt0vrtowhL5I74=Ke!t>f^9w&lj#MZflP&yVk?*l()HpcH%d-DR^mKrSN(&vyb4q4> zo7=YRdwOyJLyda!*7TjZ(GLfAZ2oY{5?xy27w=PhX|N=3^uVs0KA*Er-t;-D=RWIG zP5DhP)tDFiUw!SE^)Y3+-(sIK*E_AAgw+En+dM>my2)cgwen{-BdouEoLl0(F6a84 z!aL{^ve}u<<|0pabok{{7QA<>fxM={t@2L%7(fXe@SxhUk4?-SulIe zw-(o1L)|yLm%(e?Gw0=BZZsdcdV2G#irM}mw|$Fz5;<$VWBDzgtv}YypIQD~Q?)ug zK$!hKF8I{EE?mO)jEGs?)i19*5N$gvUrawK7NnGHb(^;yZ#SmKkiBzk>C8LJ8s;cd z=Q2$??c1{L<7+(2nc3+Lg=Pk4R&?|irL z`=sZ2`|zwSXH|_>4ChyET)f`Hw7sIX;kI_zIJJ04bftFtA$=9=A|3xChURxe@=aDn z!shw)PVG^0KJ%mG*jM~@E^N58EsXVp*dZRMHzV&y3)pPB-ga3$@1P z8kAMEdS9-4;_5dm({QJUiph;inttWBA;);_c5lysWu`ZFDh4dP`Kbe0>2P;T@9NcO zcRrlk9jlnub1c#QoBQp!V>z`y2&0=a|G@e4m_l&;po;BhWs9?`GGpdMJfTqrI%PuW zpLPURr|veGiu(=j^P!u2Syn8C7-T++VG~E z8~13&`a$}IuUz>P3#L8ga5!g+o7M!FehYnc!@rz!G+U88el9zgTckuuD?B=47)Epw z_8(%u{64)vJ?hEY0!lUS>VqYPSC(X5+Lu})H`7Be=6F77%O7NjZ#a16q>sJN$qjyA zy5iXS=tGVE+~*ID8@Ji^w?K!=UNQvh(c>>zj(9Y>Ew-r5ecGV|UB^dEtkMdsUe`&i z%eG1S@@4Kd&e%J*YY*f|ThqmDAe+}krKRk-ZDnV?z^))frK)vb;jJ}C=gB!f)!lQ= z>9U(rQQ^+IR@}^%5lYdYd#?4m(G8*xdw*uVzq-n8B>T(Ps?By!-YD5seA{w^;54TK z{rZ)ElCt4W@WYo&3j%EmI%eD^E|}qVBFuC>F)UVjNbcnKDmlLYdH0QcnVf^$-#wZB z)v{Gr8?~C_-KpGj^ivW}Xqk9Up;g=vd-~W6<1y_`Iy7R_JHnGc6ihwuDCKS=n_Ctw zR=yX@3+u8fJG57pNn)>9|El8FXqZY?9Q9UJi7_L;a z)MvM>;4-DwnGEXz{VfqIThs?&yX{s*7WUQKKhC>dIPLkfNbtLRxR+b%8GCghZCU8ikc3^LAKpkMW0e{(V~*{maTnLFiSm}WNHVaWBZjAVW^R;x-I6iG zj;2WCRqyyhg3(R4M=I0fYh;3sFWZys(tiKXGu-|2$_siMIpb#rsg1e!hi2FN*D-hD zzsbH%zrO;U^#o-5rGeYPN^rWQicb8;MtUd-{w0&;AOc-@vHawpj`Ca|Sp)1pi+Ff6l=Mq{v8blY?0~Tn6|*jF<@ic$1#`uf+ezl=C%fhUA@g5F z{won2ZiRw>UH}`H0Zd&^pkWDsS0km71SBDeLrN!YB$blNNZF(u(h|~AQa-7Gw1Tvf zw1%{fG?U~-nnm&^`H+%HDI_{6fy5&Dk^)FUB!AKzQaCA+6h;amMU!H2y8r!{4HuKc s$LzpMz-`8>f5A>F>W&i*H literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Migrate.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Migrate.beam new file mode 100644 index 0000000000000000000000000000000000000000..9d1ed741e8d17e042cf9ff279a640820cb2f3f86 GIT binary patch literal 8000 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 Z4hpq0g^Sog&f<}?U##pT3c`cUe*vhD=~Vy# literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Migrations.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Migrations.beam new file mode 100644 index 0000000000000000000000000000000000000000..22defa5fad295fc4b8580d7e369de6a2d183db3e GIT binary patch literal 6084 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Rollback.beam b/phoenix/_build/prod/lib/ecto_sql/ebin/Elixir.Mix.Tasks.Ecto.Rollback.beam new file mode 100644 index 0000000000000000000000000000000000000000..66a10b71db064355c3a3a7384e0e5b6a1c983c0b GIT binary patch literal 7940 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]}, + {mod,{'Elixir.Ecto.Adapters.SQL.Application',[]}}]}. diff --git a/phoenix/_build/prod/lib/ecto_sqlite3/.mix/compile.elixir b/phoenix/_build/prod/lib/ecto_sqlite3/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..8fd9cb2cbf20510ec2823df610517847426654a6 GIT binary patch literal 5876 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 KuKxoPsq?&r-*^uI literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sqlite3/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/ecto_sqlite3/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 pn2j_1$G3^WryZPBs;X`+ulwPp1F? literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.Connection.beam b/phoenix/_build/prod/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.Connection.beam new file mode 100644 index 0000000000000000000000000000000000000000..8a4dc23b84c3988e49ea0a3209091ccf888afbbd GIT binary patch literal 112024 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�_rTnKFTdyHCVH{ z!t?u;^FZNwoWj$5{mR9@jB+u}(Awl)pL}|)Tm&v%9FWhLsa#xJ=xHR=g6YbIY^+?c zL%BeZE`U6bg#EfmkS;`W94ysEB={;Rug0ytzETy;q!Ch!F5N(bvkj`cK|0t`$e2Ab zN-yR!0D72Ns9!;p?>8OLAtEa z4>2V_7eY)nmrLx4Fb}sG1p%7Cz^g3rZB{)@x=sQsuVAzwQqmwHevswa<(70ZNH`ND zT+y#w4jx_Z2n`0u`Y#0ODn)fT05_KiDcRZwMj&n> zpAF4%3iRh8EM|e}n`ji2Z1!Nrekv&an&$g#SUK(z3n)m3*jnsrOF9jdoeQC}IJ>T~ zq+USI1LWE&G$qHulT6v`==|{c`@x`1Nn4}tp{v1Sw`)jVApWn zR3!uBzeSKTNo4@Vwm3!3!0_;~B8*{&+64x-DA#*cxyNI$2_2hcHb{7jve)-3Hvrj< zf^@?SMlNf)EeYtV!{`jxGaxveB~hI}oH zcPd*E@SLe^^|5)eL=mCB?8JC$q2aNoQ_zQG&@bW9O~zH4uUyK)o0XW!mpC)|%UFDq zK-tOtTCz`ZFXA$QME?ySWO!cRk49_1s=Fckz}m7PIst5EI~ zcL>rwysPiEq^nWe7Vzml7T2;!LV(Wi!=J+f_%jU*xJELhL(!G@Thg`2em$~3K$6iQ z1+w`nk*|Lk@&P(M3q2gr>+I4GT2cn3Z-5{?)UQ0^%_xtwz~eFG8=F`N>ycU+a`~3xF9`F+OI-+ z*2_X-2#P!ls-GpQ5q0A)Zu0oyR&ni#fGvwEJdrInf)q!;@+68qX%~Z2`lL_3jb(h2 zk$VH^DhJzUV&rV~V%Sum_n*RC&ysEgWfQBE=ipF0$LBu?xIPD-jZn7BW0a=_X*;js z8PxEMQvZdY2U?6}pvG_P$&CJ)^9We6AfL6?b%GgH*j&FVJGd`!2sHR`M?R zAP0nwxr0N0`ku9AWfo5WR0HS^;Y)KrwUI%fhL^za1;(r0)S}3!Ovda!iV1)cy zkan?{2F2>{V*LC4pw9YrM)?iTZjX@P3es;F$L;vV?_75OmXDAU)>m~tsu)p2if7)9 zx{tu%$S9w2WOwrj;pc+%8Dy9fxQ$i+g;TvCea^#m7)vL6FsEiJcQ{23C`>@(iL4!q zAh7s84z3mAbjC=)ZG+HX%nR1xuA)4XflWX-i5N53o`!U|G@8i_Qmgev;6*} z%kMu4(jT+@zK=EdE2qIsBmF6({CN<+zZ9fD=koh+F2BG0Nq*m-<@a9(@%yiW^p`BZ zA7It*cB&Vozy81B_mMgL-tDr{;rHKM5b^sy&hM{WsKf8C_sMUXr?7yvv2_~@G19E_ zK^|iKI~fN^xNo*s7oiI8Q@)2T`-dR?qhFVN8C|p&vH}&l7=WGd!_y~~<--v8Cx1sq z;$MRFPu3+Qs1GroeCP0lb;-Xn%D)Hct8WD9->ge)Bk`@zXsS|*{|L-mMkK2MD1nEE77CcNX(DMhi;D?OzV{QxdJVE*~ zrvCm$>yTj>7&_PLo)hMp6lVj$@)-38W9Lg1}NYcI8xGRk7ctD&FI5; z_D7IySb%R!km`}?@oc7H8QmuMQDl;wO!JWGiEJhb;x@0eSH4G|D&MP*l<(7ve~GUP08)r1Kh6Ne_vhOkkhpXxc%sKEf&D@;NQ_YsnfMZ`)uc+78JWJ@CsUS zwguZ+3rYvI03Kb*pcae}w36Hw9O$-S#J*Y(%xS@aF1bz%uz6t57L43?3ldNeZG0Pw z;p@ogqj)PGYsLarwLV(VMj7&Be3j#A){rSqLj-MfPAG9Z3&QR~40aa`U`8L)(m^iE z<8`pZ)%rn#HpY-2_Zl4#s~rrFv&=0D+CgyH=X;?)#vy8-(Z}+l6DtwGuhz#2+E~UJ zD*6m7I@u**966l`G-dRId8t)p)w(KZ2Q&6lk!M+v3a1F10YOtU`gorG80J#xhX~qu zwy4m-TwuN2W&a^;dgIADW4e!*d;*dRRG4Wz!JG9Qt7wv2QHh|HW%LPlb{PMTYW+|_ zn_!pNGkb@i9Xef~*a03@>zbfVL;}8d2gNr8O>;vW<(PFLK2z4Q*>4cjC>rki3FIF% zNDJ_n`vwbRvx*G2B1q-z zj6TQC&ZV+i(B|YyWlnZTW%YFZ2riXJ3fd8ar1HrB?^3yVpHgYKlI2KcjSC{Fe2ELt zTo>v{WvvS$seF-VtaG6xl`n8;&YCw#yMbprg)Q+RE$%Tk)czY69V zg0{qk+A~G1(e+vta0>222i%8{e3!md(3bXtAH*KM1q8K z0+feO$Pq9CZxIEtC*)Y1!Gv6IaxHMPpfzPJ@EeSU#|>g3Ow{s0EIdlkmglnYSeJ!I zF&5@b$n_RJAt!HTg`l;tnrJq@lht(0pqf@>^p*DfoyA-9qXi8s;)u6k4T=2LRc=j3 zGsRBxcjiqGINtO=C-2%Sm(%v-T|34Ft>W`}?N}E?z4Qj}rQ=+v(@U)imMS1B1+-of zC}R<>`+S!4CPJAnARe31+geIkKm=Z0n{q(sc4&_o%ccdW!cSUEtv$U}u3 z?Ew2jYbjcrQ|XiP10|rtFKD4Xdf)E(r}TF8{%S#6jdc}<_kJG>B53V=AU1;AzswHA zj-SHP2`phj3p-fuv$1r#Sl-TJSu;pX$=kgU-tIbxYd6F-B5094s$pXIz#uO$>dN5p zf)>rn;5)3Vy9Pa-(wlV85ywC8Q@8UUeu*Yx` zFKT-XCkxt1j5Fkve!z;J=N3IV>oJ_dOOeNLs-T_1*iS`%#fqHk6k#62sTut=p568s zdIjyYT#sS1ogHJZcTbPubY7A?hBE~1^sLA5A*<*dw<359XJqtEc6RPDoGECVay^Ee z?C==QoUWh6J%+Od?W{o_!`Y5bpw*^5{aAa0IE#1vlpo8&UJcUHeYy?jxbot-4cLm~ zh!D9AzrxUfi+ipMb=-#YToAbpAMlLlyHIi)-sjK@TqwB>?{Vmbdx&OMm)#64bdjK4 zRJf; zb%6dVv$bH|Nr}b{TuBDGd2rtV|d2 zO$%)2*JlX29_X$F(vCZ<1XdOp=D-&H4yRxH^*a#pxFhQT>v#C%r)QVxTjAsR^xNe! z{Wd|nZL>i;zbxtV0+0T0$DP1JAVP@R?as?DFdd$}$ICk?@U3mNq~9$l6ErOR{vJ&k z2j}7!Rr-74Ed4{ig9wggZIym+V2l2COF;F@&&~~~O*8ekn`)Zco2vA;+h^hO&u!03 z&23lPXQ%YHLEdxvHu-t|E+ zDIS0M1D3}BLoSLX{qd9`Ds7dbP_RhbrM$gjL6!cuf?2ryJxo_!I}uiwKc$6rQyQ-yv{6H)$lJI=vy%I~2kOZxLELwcpLsUk*(*y|Om z^sm74uS9>LCqb+D?dZ}kf0B%QX9vJ%=}<8Gm-37HTk=c#8}iHg>+&o5EAp%Q%W_D6 zN$$~~lV8)Hm0#DNk>AiCmv`!q$#3e9%5Uk9$iLJdlHb-Jl;6=Gkk{$=%kS#<3EF*Z z6P~@dyC3|ht*LFIUS$2u@0;3*KbG{@Q-<_WGqF{r z&)DQMns6Q??qh1ALCVGRfP)8O*5sF8oZG~O?8YWr)>2M4!;|f$z8!ufIJ6sk$8@3* zo9?FM3EG1W8mhi9uMHJi(%%>x`Mi`3i-(+CoY)j2)~`RDD)ay~PBEd-R|VMpb9;ek zcL4%H%OM7iOa5@7pXKDEo$`N8`S;$Mgyv4A<_<3Yh(kawnSUn?E^8X3qxhyA?NKLp zF1hYjmR_UDRy$jFVP~R|0yX~tUyApp#*+TYD(S_RvIc3Q7i6_~arDbefvy#{h(G33 zmrLBgSUKWhgS3(>m&cua4q21+CsGa4(Utm>DM5RpQh%zwTK}`4JxQsV`co-JGLxQ^PhdAv7{fem>Q&GsgsY(!SxJv;ElCxfMJ{g zbJHH1cUsXSKRTOtv}c_TCmJwFxI%kwrv4%{fEcLMUkuF9pGO$>1wnhhN`Ddh>_rjw zLwF)zWme#xoYk+prXLCgOMHfYc~7+R1X zNH4TbgA~eP!^;kChLh_It$>vS)6HI8v%*w79zKvnWOGzrI#X0h{a4N{m|U5ZxoP&TEY z%K+;{%T)LQum5bz{LtP7MvD11(01Bz&S}gXAg#&PN}-K6 zX6kP;^HHJiY;TYvw#wG_%d($unT*=}-^tCxb2;XL#Flz)4`mmT1*g|i zVDc@PeX3Rk03dXDtoKXLose9U0FDpV@{7$7H=bQ~!He zO_}J$-CN@=@K)-7Z}Dy;k-=#v1fM*Rr6P1+k~$R!^0505T}x3Z5+`~=#)e=l4jHQ(z z!(MxIwGpuG``Dv9$S=v+z_Yx-(uy$|fJXaphW?SbM;~{gj}OfD@kjmoAHbR~-L1y@ zm+*@}(SI+0s(&nKAKUK?c~`AG1KafV&k^BWqkks~5pniw;Z4O0=DSH0MkjPeMbZg*uQyHOhB zvKxI$BXU<33*u&$Hi`{ImFYp|JNSU8=i8uNdr z3j2lZwlS&>+LNl!rt6>A7UtnQ1X6+v)>uf*VYbT0p6KBdX*_JO)yU`I_wPXE@ANO^ z-|Jrp+80!ojLtZQne={xbOPxs;tNfsepjeA+VeZgcQ9*1fe%~Du=9hM>-+D#{kkzcRPSJN$ew6P)r9SW@V0)K?8n&Asny|Do%n>W^ z88YC(xu5Ma9s7|+4=-gVNc@TglfPu^pX`+Qr~;Z2(b0BoLRRSihACFCK+wLz{066@ zw6CE+>Hc?1J2Z$n=0700*v_f_)6z!M{a=q0(A3b9FX2@Urk{V53oi$5+oj8Nd!AfKQ-jqdmU9x3sCK{qLy#KZVe&UOFe! zum8{@V#xyDpBjdK*jKWQxY?##M$$2 zU!^Jg*befb?0S#>t#ELh11hwaUz<)A5xT2EI+2g!;C_~NIB324g`Pal)2Z}S zjMwGEe7D0L7im?0vxu$mKr+_Ss*qPg-f`fe%6j_X9p=G8@L=94kZP)Jyrtocc=>RT z5IkhMNyk=#J~n3vmRZ_typa<^a6+YdsIS62G|(WOizEU#n6wudwI!A|hgS3GthQDS zOFfm1vm=no9=~Xi&coQUJreZt`RHZ%vcW?w?Z}gdB%~4T?S+X1^U0e^3^-Uh-=#PO z@5i>Z`-=)H&57)MGE*&Zu11n-p|A&q<oOEa=^bOE%ASXpgqLU1B9zNOJA@;m61 zMFDd)K=EWUIt|i=pp0)N!KMV^E&&{c1<>&-1 zaN+DRtALK>M#&e0uS4E`J!8OjJ~1I@o|<2lt&CWJuwHPIrOg9}_XF?CjUs$R$DAw# zD=e*nfatl&{icpy*7=CSNmWz#$;C`Of(4!j>{Wa+D?yzNF~%Krt28PA?(n#frOk&v ztb|cvI+ssYFS1A46iZuxx(Y$S)GBidG}IIpPZax2KPvX~icew|D&NOc`9eAm$22%j zi89}W)$iv*b(p0s0zw7EPs^%c5H#8)Xeg)=f&ojzdGhl84Izm0Gqpn-&BKM@bW2-I zz(yf>_)K%ASc8~Hr8z^yIXLoEp#^>Pxf)Aba&P$oYKw0>j)L3%H(2bYvxh1_@fw^# z9*{^PO5eJ1OEx+s89%)Ee2jFlx4y(%OB+v_K$Qj1i$g$6TLWI>L9;eMXGSHDM@|~~xYf>XsoiPTmKvktQS*pV>%-=3Avl}mYb!63 zJmtm6H8Q*wW}Qhs+O-4iTE-j}v0%D62f`{=o7F;a4rO2)rGnLL?wLLCyQ|2y``iyW zY`BN%=_7uQoc5$ScT_B99w`KmWcda_&P*cb;1!jR+dlUDPyq}2>($Bu(@_pEZp;40ZZls*i!W+!?dtSz(`?!BxhZALB6QiCmcX1x%s zbGU>~7lQS-m6hCFR+cy2oYzve3+pb`W`hu%#};6)*MXDV;E+7B9A6U3FRdI?a3Kn3AJQ2g*m7E6YpG z73Cw%mhw^NQRSn}p$u6}HAN@0)?J|EfR&o0{1}@gIK6)ejvp62x(ikX4r`kYCZ^h zGz1oPFl*Z`XUx??a5b8IH8r^%35yaPobzEzTa7|vfxWZe41?S-CwDB!T?2B%+{GP- zAuFMdku0pbVn?$1DMAFbF|8gK&?lZTK8d@NSy66yGz^34>r5x zJIr{wY922HkFPSQ^cHLX)$o=5a{w`mAMXFT1Q+`12fHa0hpEA8v{tD0yhSl zD$P_A{N;6}(n0V#ky^E8pM8YdWNn*nf~ z#yWwH;QMmlupa2OG#s@rp8yFuz2EGGZ1!^5JQRB83|sG(iPTXpzA)YX) z%FM8BsAi_rP|be7d94tqf3y?*w^g0q1P4b#JmXoU$*kLYLp{H*dkv zMr7$6_MJiV<~$*I3+XmkqhDZ99|CO))}kYBwY1GBH4CL~!&L5OA$Yr`oeRipK<>!8 z39@^+c?p8 zf#?ges^%W>n3uoT(k?{#YQGS?FJs=z9TzfX_Xgy{Gv@squo6o4ekj>MC2m}V?q?q> z!#aN%kF_^j+C>=mFJp$4F(2UHB*XR`^Fbl_0Nb9^3<@r0;g=Vk@C$9v2|hTx%zTu| z{6jm;hlJom8S`O&fNoWpQC3%NJ|+YoCJY!zWjM{jP(0$I;5i;~BQEyow&0^EEd(FS zn2&R6jsZGvwfTe)e4Oq6Y38V2aCV6Z!6ycPz$s%s$xE(4Nig*(A^0TwMiw=tkJ0hG zLx&K23iCf9H`$E#S(jDEHA9Bm zgy3^7=vZ{*B^>&^3ta(dABSRBZ61aRolZIi(2F_rMHjltM*5PaT?WxQ0;2VD#(aq+ z30u3^+J^ZOq^rVwt9A$5yb1;BqZP4?`3hGEbnX?h^QsVhh5TM@R<^Xu857=gn80M` z)#>JI$oIMse2vW;JZ##)UcElue1mtuP9gZlAn$(XVDG-no>W|qsanpY;)bO|(4ipy zO}A5w|uVoju3nY+IJfb z`gf7IhZ650aW5s_N8&z8e85N5uPhB;jVP}Lx(|VF7en_cP<;YaAD7pe9|^&aQ09Ir z^Dz<+P~sCL9;C#lNIXP|T^!x7E$u2O$^oGJjT?M`p&w_5W-RUMtc@SAZTxR7%|f9U zQ0TKt^K(M?Ia6xaKvwS{)7v0DZ0G&L(&$4HFF^hLuHXCuKFAl`2dRgD{CoJvUodyR ze4Yjp|psEJH z5d3qc`6UIsY4ITVW!5>utnFYpM~K(Z_p!7ArjGw&Y1gAz5S;oewk$$Rlg7xQ)WLk$epDoA)$RmUat1xIvovD@(f-2o|88uPyC1 z`e2giW!tWHV>TcX3-NI#BKYr?b~|z|M9zP}2r@ekL)aiaN^h}Ta0lKl0!RPVZ+;Js ze$Pkcmm+-y!~EVW-*yY&_`(+cW}_t@ik5h1w|IA&-0>#d^K^Pu?+E7*%Di;7QkAs+Tk3xYOL_F^~UFIq2;WXza0?Qx{~B(>bc zN(uM}uH)k)8a^q2uV&g7{BdS5nZNtZZK9Xam5@)!>valQ+MQr}dLQ|}WpuqSJ;e&C z;$N`KFX(SI!M7vS3xbj1(-@q958$6f-`W_+bKp1| zErZ?PD)~grEHFUW2)vIpi<1#8D}&BK5E`8@3B7zj-tv#?kX^U52Y3v(430Z}Vn=%r zlz!%%1>%;>{XEd)j!l!Ezz9a{Co;s+9s+rF9w9Q+*nu!@ToNK!0AWB?h)DhMBJ>;k ze77oNfhu0)qem8O_}W+4i^!4vO$T4I;q5TQG<`Bidl(x`&!$i^;x%dT;1N8ZPwV{6 z0V9nVb2BDVY(?u)TG0X%W_QG8@@C@0cf^Mak>Rw_B<(fIabQGy44c@n%2`$&-%p6h z&YN*~^SJ#+i0lXcJn1vaQAHi9z`G|3j5toFvI!QjD-3(#j(DLE!8W_Rxs`e1+)57% zlRiZoy2fWWqJcU1aI_FnGV%Re(xfPt;!vx%I(~o<+21H%N-k9;tK&&Bu5ss>Gx&MH z+!7BDh~b-Z*A7WT+)>Ml~Sb-3V`6t@AP zd#Jg5Y1-1BgmCo=ks?dmj-|v%v86qY?pp?V^Je13%nK-Q3NV}Hrs@s_?FHV;|Ia8 zw#3JjuZWK>Ul|`&esp}K5E)4^Y%C)pT8vJu^;y~r&NQz<+RocV<{~l*fhM-h1_eN_ z{nH@lMQ5@Y8NH9UFJ<43*{hP5StY$>R(IHp8(iH%RHPOo@)b08&p6!QhL6e(#A))= z%&P2rh56Mi8CZLI4g6RICXLI)$1KrVQA(~M@0emkK*%biHWh1Jk?F1FaV1SO#stPPc zXnQP0L=LgEH<9sJ$cN8y8JVr8KrfcK@oir1EoeN0))UI`fU{YHJ~b&#B98}jBU33= z$O_Mr<|^98>MmebxvEAVmC$i)8mp~!nE&)ep!jN>Rb%?u;jpoQ29SZ}Bv zN2k7*_12!_9#{nHQ||+32%IUeicb<};i3g>M8~kg5r|Jh9C3AAFP{*fT;3k95F!;W z{>H7+WOOKZYT(jZ+6P(u&)fJX56Z3&&i<=x_808z`j+^lTEE;w4l<(DLIlfKAA-IP z&^OgZ1$Sx+M+J$nw2uf6yfTcXoM=kKPrsc}9?laYhZ*<*43AVJM5b|=M~DPSC-dLM zh*SaxvUZ}D=|lbTav^d!8Ux50KxS}CW?I^>0Eqxng|Ob4LS&Yuy$47Xkl9u7IpEzK z;+-eZAIC@2$2rcWkLD;O4VLyXtP}fw;-226vq^b;j=GqGU+ws{5UGYpp|;~u z+Y#`FSp@DAXw&id!WjieD0oI|UD%a7T+0p6kGM~E0z@gqU!k$jT^9=v$) z649XQQ?@N%EJD~xWnm{TThEwVk_WfAV0yfUO^D)ig-A{AgeWpMJ0W7LRN8?&wr{Vt zXb08EYm8p3wouq9Qfq0uKuiomTvrvZ1u?Z00#s?_VMtQ&2Io4YarB{41`}bAv0I9L zoU^3J>)EE(52tT(u|H%chL?#f@FKD=l1A#GJ5WI!70m08H(-=BFmJ283tp z-N=Q@mm8&0KJari%DcB0dR2dmJq7 zcQl|Fh6d?H&ZwiDcfZeh_Y!~CVrlmQ@p>R$ftkbJ8CF`_He}e~7a~U!V^m@cw9a8% z>lAwz`z4G6EJsnc6Orv0Pn(}ir;jaB?;tiEYiW1m?MaZt<9LHw;T8jOGV-@o#Y1RN z2;X6KD*)39wo21jCDcaRcw}jR$ok?~sAiE#n@u6e!pA~nHL?KfDZtw9;@XOjGBV}t z5Zl4Cor-MXy@~C_tQ1I2!`n4g@i+^}#^VUc#$*0?M2JK{Tc9Ey58&(&EubJ(6Q~VT z;%;d;(91;lA!Z!uMyLbq>GcSa1e>e>l?hE7xm_=dW}#kx}pxlac( zli0Vz%|!|;CIFrR6zTqW4~A?HGvD}?8!jC^&TrR@gTjM9z0L_%F|To*8%G*f0QVPY zu%OfejQFZ=WJ7;^BQS0xj05u5sq$odc~?_8(?}KZjZip?*ik|{G zI+cxkEN*(l{`kqhO#D7Pz^Bv`(B4_UfJDZ&6DOmj zuly`eBkT#jh{oTb?@j@n6bnuFUjedzI$`e!zS#|J12YBazsN?hItpNu2H{}6b(*F9 z8%;PHP3VOpvb1l&q-p=vRG*GbPAGN`I`<6J|0+rDCTySsY%_ZK%>Fn&e;sF^zeXpr zU}*d-d~AU76gdl=eNTv-ZE4>E*SWxT4j0THgve%Wn*hIS-pU0X`p1IDcmRJZ#nRVc4JNtMS$P_`QkUZ}i!Z?QlcSqck*w51QdTcs>cf zslL5zX8c0mjXn`KLd5Pjiq5SP(2Dp4zFJHB&ORH6sVA*=y;f2kzetE&P=VsG3OS$) zE$w^CTk9>d^S)jpL@q*^H_$)-K@_MCAJ3;vv{JFNYR8Uol;9W#MQY2~W?JlgqyWIh z*td_yUI@nY@sWQC4nYBO5g?ax$YnSS1IWdITwWEw3SxN`6HCWe#^RYgE`DWsU;GLo zas^}`c(25bm%a);@Jk_rk4^stNG<^qi@(6frvCv5zOx*;c6z*@uK@jksMLMgHCvo~ zWX8W=k6**z<1~=ubNsGi?ssh)v{^{Ir-+rg4%_a5{xVdU$%+X~+4RBI0gGak?Q&!r z*xNc>kInsfdj(|S2Cl4b#3p<|u0;Nus^T|;88`34lpW40$(piY-cOmbo57uTgvc#c zkbL&5fc4f~VrL8{_BNjFYGk{8Z({Gj_XdH)00HMu^Duf6y(PxDL9w)hwiuip7$isWH{SkbL9!Rdk+eevh!3X3ckKqRz0L*~o$E)Ixf#k<>Nq#~UFkr{Bi8K8? zgcTeD&#GRCJi)2OO9BqXXdYz+hvBRK^YVnqllXBBARRylKUEcf5=fsE4Yr9JQ7#Wm zydS-~&_};cWCbONToGb6J6PcBX*m<$E=0Ct$4h+yUkQ&qjlN^%X9rpOXYk7(Kz==t zKZ`@+_z||HLIfW`UJl?5XvXtZ@fT3z3!*_QzWqpK;x91&UtY=L;PDr{^5HW9hkn~{ zh}6JVY$Gp#B2ox1S`uxayb-Jnenczh`&)=-dz=c12eccFoVNyfZ+#v;Ay=svL6A2s)RQVlg{_rwu@G9 zI68gwh%5R>BZOS2L<zHxOWbQ;6*3jl2adf3rHiQ;599HSDcm^DnF8ZwZmNxt6&NfOo3nZwrxkxiP#Q zfcL87?+TIk*@XTMJbzFfe_x1T35EP3dHFUY>C8WVLbGe6wcRN_AoVN>!VLU#0G(U)$Cu z_H?Cs5{d3)I^3bskIdpn-SNZC*juH}n53S3vN}=i2yIMFRHv$k`ThPWejAty<5yWb zQWNP{Mb)-86+d&Xx`HJaMv9r7<(R#(4Fox4&++RoS7+KFGMp1*W? zz3TqltJ;a5z7BWHQkT`wZ&=Jo-|J<4?ZSPPSl+d^t9yNy%71TJ8it?Xbt>gQ z*s9jxY`9HrM|XG-y(<4zV*G%+ir@TJ`HyR>^sBzAx;~nYboZpykeX_bgyW$pYGW)M zN`=)_BHWIj6VJX-QKJL1e{x=3ABna{9DEzQd(`!zuC$u&wkuq9Y+l~{cmjPVcAy)B zxD;IbTANe1J^S){5{;?$3<^yfOO=FGVx8XJeY2eGh5%*DcdI0xZaiOmK zYmf&t5uN#`BR$qmcjE4`(`bh<#!erDyFDiI!FPf3fKU0TQy@MQ9`vQKpPim;r->fO zmmmW^3~Ay6+RXAFg!?ykx)67?nZbwS{uNIP-{HO;7x9K@{{=4K%zFXX4Y&Z$dk7cW z!{B$|UW1F^;6vWIxG2Ac>r`Bzla0R? zY2w)-xTx%bxDK$>By*Ie{5C&WI)7eI7vyIM@v;i9Z^j)oh_B&J|MG{e{A@blH&Gh! zS8yjBf(@s>B=}4Go`v7Q^NG*nPW0y4`L9Qk@;{3^>dEFGu;EYP4q3?NM_*EXBtLo7 zM-HA0hl`IBCT!aVLH` z?WM9r&mp*zd^q_pL6YjFa!mH@_Fjr-!cX;6A2|6hLXz^+d)7yG{)=t+<+wAMx8WDs z@IKs&a5?l}X~U_1igVysP#XAez}<_>q5m?Zsb1n=2`&fE`IH8n?jvwHbe@MK(N8i< z^5notMhVZExR>H`@SKA*%}wWr?D~)my`cABq{$I+z-a(;6K@hx8bhha^OTC z(Rm#1<8e9sB>D)?(YPOi%gMi<@&LX9cONdN-gP#7IqqdSa2nT;dvOu&&_{WqO+V31 z_~+w(C@u$ooYH{L!+jzy2Y<|l*Wpe&!GW(ulISsTpM=YSACDyAKLYo1Tu!^9Hhebj z6}X&wiC>g|2JVw{;1L@R9m0G7Cx536hYrb`g3EzZ|51CF;64?X)7~DWhvIP=?tWYa zHXlx;Jory~3id3Ehx8!9+i{70hRLURrhhw;{qjxJQqWTdA?(uOiF_oy zt9zocj#kWRVxeeP>j^#K5o?Wgui-_9c7$VLyrC>IPor*5{jl(caC?vaazFc_ z6~!4{%HYNjf&!Y0@JiMsyL%F?t9c{$i-fv5V&T?y!c621jfB==8pG4ku2eXg4h1%x;r~lVGfnL zlO5rtL*N0JY9>O-Fgl30cnB&R!h4Bvh9z6$p{|XbQz!Ivqmx*dP(Sa-pVOh$m~;_9 zPNhT1bZacywU#{(#T+*rinGGSEE}qdrqU@}6sXMp>F!o{Mw#Ly^C@G9=#hEaWlqjB zF=xp7NEnqc{;rR9b#$)}<&!Qra1&`3&owo@>F*9MyGS_Y*}r~z)Qfimrm;7N5Q9=G zn!m^7*qt~d?-5M8iOyjVyHsdRn6UCGcLcrg^9YEJQLHv^{ffp#HS-s%m|Y_Rfb?P& zFZX9JCFdm|3a^lA5hhW2JBwNyq-i#3!eUmaP_13ExT$#=kT$D;9>Ac(0bR7Hrn#O# z6$~_?W>GVy`hYJt7yn#ai&*ykYU=8o%)nt+R<~?PV-9p2%Q|xLPedG0PGULoClehu zVs-iA`AZh7HH#JzP+=K{*+2lM?~~Qz_6iH2z4gnQ>T8<`6LH8v@4f(V);_WM_QGZd zOw{@nwe^izln&EvDDZh1xymHOLFUyjt6yAO-=qROf`Jd1tj=5F21uxrhOrj{S(c$J ziA3IzO>6T66^Wrp&jvg~_;IU?qi z0cd}h=KP6FUY*`>GHF!Orb?|@T&LpE>HC%-SV;g!%IX)@Lv-gYTVfJ)4kP~X1xw~H zZraB{MTo497l7JHhvQ)yj@i+R@`bGYP@W0THvM(;o0{h@hWr4ubf01}E1QJ^OlrI* zmX0Q3VFbBiJ@Ky8-T}32tpVx-TlSA3H|hXh!TOpk_c=!R%=O8tiR za3YQH8Hl6XmtXT2*VV63!RdYT zi@!$8?O_WwPBCHtY&m6C$q^}Nc)S_S$STQV9^8jEBD)Wf-5#mgnvP_}tN!mIW_vO~ zIh&!F?x5I9I&+2Ewr-9&C1q@z?R_)=FKu8jG$C?>&+RtI3u7 zEIZd>VX zp+lVzoHfCmHK7wLEi@J0<8|{MuMgyHAbl)PA}iZmzoMDhLA##XnkL?Twm`Y7K2D9K z@NLt-UUCNT|HIf@$935>eV}wnOG$U9(g;Y0bax6!cej8vNQ0zwNq2*EDGdVB-Q9Su zAO3vr`@GNde$M%0-7mAVv$K0`%tW{w*K{xMlw9z;UR&HvvvbGiT5k zfWjESz6R7}VKV>@Fh?g+BcK#~g8eJ#18N97Y5p`s51Ii_b5alhum5XPRHER0=6{)! zz#jik{K^p|TKK=#XAp95FmwkF2H@N_A%ML`ZXcpZTa9&iE3LkHV3uCR{pfmj?!9P%ISU7>Bv zpH6PDQS^@u5Ac8mAU&~z8ixBH`{l0;LIrU#<3h;wu;{0bdXi|ayv*fAHe--!o{}%W9{}jja zf0i))pCt_cX9+#1s1{O9QrBkd=h@Bn*>ONlHReg;ZV@HjZTe=CS6$tx@WPYd8q0#i^{>d9FC|LdXs^{JjbY|z;M zHUGhD?ynyKI@!Razr!srF0L&0)EMVe|5#P+K-VPy+OYm}OaY7IA6FP?jqRx>!++Lv zFtK+w2cqkwynw}LYGrQhqz~Lzn3;eKX2hpT(4tQU@n7fYk7RKfsXxvFcs&C=faa3G z90Tfs4NFx8QIO3F*8P8Mp{I5IcN_ShkULNfd^-WmMrDzwF;FIz0d_Z_;R4QX%O)LUk??8R8@c( z2bgNIVsaq;{?3(uJ!Sx?+)p)M{&QjUpNBs%$(?``>VF;YK;5Uc1M-HLo`lf+<@gVi z?db*yv}{bx-Aq91s_5L1`e`hIpEr68)YY$WhFAk8C5B&7+OOL1J1KKaZ zi;?tcTj%?q=KgJBQa+gw|IKvx*W;3Z%VHn}1j7Qy;nQh=^)w==e};kfpMCuAKBNxV z_VVhWD&W09K}bnON(FR(_2(Q1?_vL5(^!8L1)UNIq+kOaqyhRrbQqvZf*=~WI&i-v zqbe#U3i3DY<+F|o2@ay19uu)H%dH3V)R{@C9Ct*5{R2>8_cZx?;@pF#yO?FkS?32^h}< zxEPG*09*vdGXO3G<0$|afbj%?^8pNs0gVAT55PdXpt$Y7W3`YuV4eYho(-0a2gl`aSg~+Fs=jeXE1*?fI+cOkUl`4Ad|s7KtCY= z6+?kc1k-Z?dIFdq&kW0|9z4nCAn4KLQw3*AKuz*%S5zZ~%ZoW8wy2 zfbU7B6Oj3X=?(z)1JmsQ>IlJ9l=-zpaVKR$&muEHGn~V6bG;s7>fef z62Kt&Z-5N6>OlP!0I)e2^8xrh7z6P>NT6>|JU|=_(iDt20Q?S&SpaMZ#`FNz1!D>T z>i`&}0~vs|0Sp6RVgRcF7#6^|00#Q@M8^g&(6^_yo ^4~BXKurz=HouSTvOae^b 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

    l*z%jp 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 JVT{s(DKljZ;b literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Pragma.beam b/phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Pragma.beam new file mode 100644 index 0000000000000000000000000000000000000000..a41924d675fa2614048a4f6a55454d0ec483f1e3 GIT binary patch literal 7628 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 IIRHWb1KZ-M^#A|> literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Query.beam b/phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Query.beam new file mode 100644 index 0000000000000000000000000000000000000000..15bb708fc0c97888ec8743317d011f0d86e9b10d GIT binary patch literal 4444 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 D6O;0n literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Sqlite3.beam b/phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Sqlite3.beam new file mode 100644 index 0000000000000000000000000000000000000000..87317701c3125eb004b0853b911638697a40fb42 GIT binary patch literal 25572 zcmb5V2UJu|%rMNdAeXXqqzNot>AfRM@4ffBbXa;3M0ybrqzFqFQMyPG6hQ$&q$pJp z1QihrO#~E0&~Fye$LD$9_x$JgoNzOlOp?iDGWTXy4MP)AJUrKV6?J8OIKUO-7vSZK zu5d#K1fgA>L(pzF&=CQcppalkKR3y2_fUV=5HE~>u#=y&YY-+_1Q4D4Fm9o~Xs6(i zpitKk5q~dVCv=dnv%klt2Rg*@SLdN7l#7?Yn-MxF2ovPwi}v>j@q}oOOfv-r_~#i>0!VNGkmTzX9D?#eM+T1{jnqX4`J;UUy!?X$(5@k|IGY@SWJ-P{#^=@VmZQJ3 zAKDFK{NFuipsfMX9KOu zhh|qCa=ZItoI`pJQ7``xvjDHw9D5Sy>=SQ$6j*d5uCZYybbn`FV%**c|;|!d=!q7Ml9QF4I99{wZ z=oO5SkrENj4gqb)GZ=rglXE}-+TRU2aiq;L+$+S>F(fho?FcMG`v>E~K+DlNG{h4V1VSLF2iNq)csP1uFg}~OMreQ=SfIo9c(5nf?mmuwXg^F)BnoF9 zL>&_3>>uoWm~?=_&LN?};~_zjj(^;SnTMt)Q2`FD}3YeC4C5Vcs6N|H&a3p&U=J~St( zQoThICW7jN)4)(DYVg+xrHKa~PAE-E@CZQRgTJvTI1T7DK;pr&k5MAJU=>(OeCjPE z><0e;O&@s znvjyxl8chy)UqW35{{CfK~Zs{xZs2$2znIkmE>nQidI4qK?&PzpckR#lE9*fD3L%I z45CC4z*9viL9>|6F?;>F_QT_mAH#^Mu@96xMk6H}7VpjVrmvg8sWIEA1&w2%v@6&pZA>4YMnAw(jWC}9wd zB!c#rp>!~a7R;Ge0vr3=P&%BUNF-?162OTl!N}O(7IXb=G3}AX5F_#NLz90`0TN~> zp>z5*1tcCe`_CkfV=M5fN!UbS5WNh70Zt|&g5tzETN%ztfT95g(O_>7h#(xWJ!c8= zvMp&3T}uPZ!Fd;qVnC6wg9U{cvEx7v2NDJ`$skzaVA)VK63TEmmkJz@Rs~K;Ac

    3JzlubcZP-xL^<`7y^U1 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 aIzn`3T?YMa2futrn?th6Ph^M0_VW+w6eni@ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Sqlite3NIF.beam b/phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Sqlite3NIF.beam new file mode 100644 index 0000000000000000000000000000000000000000..e9b336437c8f02e25c887d78067a47558bb7cad5 GIT binary patch literal 10264 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 GVE+S|b9z$% literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Stream.beam b/phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..b40468042e4b121532f25907c1470cec000928ec GIT binary patch literal 2940 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.beam b/phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.beam new file mode 100644 index 0000000000000000000000000000000000000000..61f6fb0320285fd760af23286f2716a072cd99e6 GIT binary patch literal 10504 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/exqlite/ebin/Elixir.String.Chars.Exqlite.Query.beam b/phoenix/_build/prod/lib/exqlite/ebin/Elixir.String.Chars.Exqlite.Query.beam new file mode 100644 index 0000000000000000000000000000000000000000..6b8a5bb1ada976b57f1df8323d8b3a1aeecdf687 GIT binary patch literal 2648 zcmb7G4Nwzj8r~&HLIhkO22d)Xc(ztZbVTVP7@!e<06_#i^$bh0frVr@>~2Wt*@~v% zVG%)VE60z@h_z=q`Lhm+!sx*rqE>#yD|(~e$f%%|v2r~`<=%~fwljD$w=>Uv?>^uA zeb4vzzWc3OzhNJ2)TO0K1u zTmwUMw3^n5+@~0+NMa*@HR589R)Gr4rNiyNS0GUT`Ec8Oit}DBt?<{ zlG2eBp$V7}mn{zXHEUf1V39~#Lm&t;2EYLPQxEV02vMvQv2&Y?p}rx4gB~KcC3z8f z8;q$0leo*cKd(wzAB4&k7X|L9Lg5DQI7Ji!MT#N{gTkP&gLke%;0~3sz6e_EfH`}j zNBAzEVQ6iLV8BBm#%_pR+t5~pnD5}aLhKI3U2v45!=;#=n^=OOBCLEwP&tw;z&w1# zGu;*Lf>PgD40u<*E3pTHirjb!%oi28zoDQ~^0TmLrj_*sRvPL&6BT(_zrEnwGt}8b zfWUFt$WMHY-oTgd0t5hOfD6FRW=o+&Z8p!NO0(5p0roV22hRZ{HX91W&Gyan{QAxS z@b+{7-!E_5MUxz_yB5GdJnwJO@m9K>Ni?yCI0|2mlcxbkGr&V?(Zd^)KU^DeHoi`F z!~WHQ$j41J2og=J`98h*UI6@l@>-rY@U}D@LIBFcRxJVaF34snUKgb>gv((?w4RB7;{?CDQS1k~T6{FVj?~nD?6;^W-EZ4*rx)cx8wV)0F2wBLj(CLup}D z*Cxj)%qAEXA~F*Zd=Myy=0e(FjZj|C-sD9=$QW=FrLsjfqXK<3!LlYtEko;pW(d;^ z@Zt@qBMdkYE&FlwSN8zAHkVz{gM0j?mn#W`hhr98M^0uQFY1uc{L3k+>1NE3;EXlM30o({ABDF zy?n;Qxp~Udh1DIp=CjAW(wn{rbolDW+~YNkXWP5dpBHKEx;m73cY}6#4@52fy&^EF zJE8znq!L36BFPC{-YiJ|AJF9xLZa0;Gajh!mo3Q(?n!c{YljpXq%qWnzoNCp7 zUUlH&@q-R8mfRh?eduCz#=F5oA3yK0{20G5&$aYQm9WguQCRX_jq=~)4)4o74>nDk zcQamGy)R|CM-PBVU)SmMn`atfkQ!StPe0xs!B)BDtI-OFOvH5vKjmxIcdlyzDFIr{E3OngwU%hco z?YQ~%ih(CS)pb{#B-%AT$8L11ue_2SbB*44=|aPWn(;py?u;ZPo zx*I`wT|wxY<*Ou1zF&J(v8A`~ApU9Asj^Ei?u~px>_0D^G28j4*QsAsj{NrZI^Stw#ALI=#9BjTtU%UA5BjtmFfVE-k>jFyJrVBS8*&2TPpWmE3+R#HS ziy4c&V*1VV`TnDy-8;SXeq&kvGI9Oo=9gvi?eD2hTsS-{baDSRYJHgee*Y%F$7`0}eShE|&$iC4 zzP{mh^eD4$R&2X5tk-q*=npx)M98!DIrR&i!#>~s&fIxXj(un2=0D0m6;>i$o!s%6 z+4-R*&S8<{I2MwOS)yDUSxLp5VF|q_DWvhZhxnFn?aIFVxL)m!%6;#=IO8;SudLw0 z^@MHGimM&Lo$KC<>FL`L@uIGBcraHQiY=@xc`A?S>>rR1;|WEj`7Tt;u}t5ax4&Gu zW%YRbn9;0^&9B2&<74`d@^3mfc5&K@wjGP2@+w=UNyMm2VeuYVAf-7n6ISM!1u}pu zVZBnQ)aiselVDWYi#a|)nuN9+f-S>==Va2u(KjvvmP`YF8eBNwZUC(yo%4mQTBymP za6PGh<7|&}w4V1iQjpke9Y9jd$as7G)cNxN6cJ6N=KrNMWuk`!2?PG+AL%Xgh9B2k z=Pl6V25V)yz+_JwAcb0&*KzW$W3uN6MxQY;x`|brprhfQ11)5LiAMy6_225|7~vR+ YNT$lZ$i^H4-_8lZ|Lg5$j3bKw0?qJ~xc~qF literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/exqlite/ebin/exqlite.app b/phoenix/_build/prod/lib/exqlite/ebin/exqlite.app new file mode 100644 index 0000000..14312ac --- /dev/null +++ b/phoenix/_build/prod/lib/exqlite/ebin/exqlite.app @@ -0,0 +1,15 @@ +{application,exqlite, + [{modules,['Elixir.DBConnection.Query.Exqlite.Query', + 'Elixir.Enumerable.Exqlite.Stream','Elixir.Exqlite', + 'Elixir.Exqlite.Basic','Elixir.Exqlite.Connection', + 'Elixir.Exqlite.Error','Elixir.Exqlite.Flags', + 'Elixir.Exqlite.Pragma','Elixir.Exqlite.Query', + 'Elixir.Exqlite.Result','Elixir.Exqlite.Sqlite3', + 'Elixir.Exqlite.Sqlite3NIF','Elixir.Exqlite.Stream', + 'Elixir.Exqlite.TypeExtension', + 'Elixir.String.Chars.Exqlite.Query']}, + {optional_applications,[table]}, + {applications,[kernel,stdlib,elixir,logger,db_connection,table]}, + {description,"An Elixir SQLite3 library"}, + {registered,[]}, + {vsn,"0.36.0"}]}. diff --git a/phoenix/_build/prod/lib/exqlite/priv/sqlite3_nif.so b/phoenix/_build/prod/lib/exqlite/priv/sqlite3_nif.so new file mode 100755 index 0000000000000000000000000000000000000000..454589bcfa83bbb4bb824905b45c9272b3130031 GIT binary patch literal 1663120 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

    =vw*cR->pxKA<7aIvKhkJyx}gE$nTq zlkB4<#l#cjFg|})b2IwAXnp&-z>fBHHlIO!2J#ueCzFq#PsR?~+to4C*Pwk{Qa`av zIu3fuA?1MB#NjQZy^HJXx-O;`^xNRxpQ(ZUwtqz-55c~!zI0#pwDtVa5zsyQuERdH`aaHcBvF*tXc5^4sJxCwUJ42g)#qVvtp{BoP-k(R?@6g^QZhy~k?aSs`cJpAjKixk{TY6so z9sMV4R$Zyx?GwXE*+!5f4t*MUX@BY2AnPi)Nd|AHZDiGkLUL}R@ST$SNY@7773QNk zylv)y-4S}6J_ll^%^Wtkb9gjZ{v!yNRk<<3F(H3vQ4&K%?qPz`BhhD{;xK_BHY zi8g(7&&}9oZ^FJm(3~-I=q@K$BE6=gsCR}4arwXs(O*i%{Lwq`V>*JerI zU(^%BE&y#-te0iAsJ_NCz@qRW-%|cppTJJiLA^5@osk-PV>_^A+V=&<`o6xcpavSC zJX_JCk;r+54!E*Q{u*CHJ#+gFu~pbjf$^BS#5(+?-`rMkaH#%g)y-(QbyepR+X_Ap zo~hLA3 zt>R@l&wDe^NW;@*))%O09v_)UE4& z4?X*>FLDke?@8Ad&k{_eQ&Xe2TDGCWqP(U1hz%ExiMIKW?J|(<79-a!LcXg(wyTlf z3tDG#cGfwzbiEr!ewS^g5W4YM{Dj(HS+ap;>7iQkmuEoYPhDaiQajdkLIe{jS=>M zhl}mK)?4eb-R;L)zc8||hnH DKpQQ2H9rt>iP7IhgTsR(N{972MlL`@*YE>IZ0@ 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 z z1n2!)Y`M$L*uBz^fmOWX1(o;f)BekoKSM@;+Z>SoHuoxg%6J|JKJNmbyYj|YA7Cz9 zi|?Ma6&UR|2UPd;&ZRHB=c2=;bD!@^tOuUz$p+bWyMV?%JN>F8p%alk5w{Ut!wEMmTW%`3 z_@8>bXQ_P4A%3@z(@%D^T*ju@%3Rr?upPH!DRD^>Mde&-Z?Flqy4|;jA0Xh z5qC!X&e`75$!7TQ8~D8Dcbla};L|w?#w6);gJ|<{#xlP<#oqHJ^G>_Aq+jv{26|1jDm#t6k||HIltq$M{ffD!nnzy8L1EZuQe|9PsC=J zV~i*-NSz)(F_n3r&%A5+A9t2DaYFA}{1F%&Uw`(Oet+5eZw2PRVErHeZ?6BAFI#`? z5byM^|J(l`t$(1`el(f2v-bcn_@Aw_c!k#aeC{l4CDwMxP-D^o;>BiwJ3;sk{=S^! z>kmzL*I&69|997a7Hh5bAJb?3o7p2;|I#DQ`X66&)_(%H5C<+yVEx^-PX+fU2p1Ud zA6S1E2D$7nXuNIHZ0KKM+gkHO?>r3|X-A%F`EwuJnvtF?~~oapf%|S5Nn2HW8RW0iPg^UM;xFza7(BnG{6&@ zH7c)S`GAr%X@2Ja+F4H z7|;;jZPpxKJ*XkP+EWwhu^Q^VG23D}C*d<6eyRQWeht3aoB>(WzrmNs_eI28rhJhh;C<6rKXOMkRW8c2<3lPJnN7=+y=CP;!@nKv zS?A8Nrd&&B14ja$H27QEFro?L=K^{M} zkeKEBLeZBm?3X$0W^$MkYmw+hw*4L7&TAUl#XV;4{e`XqHZS-z@y}HDWA(;m?Y)kN${lxYA7Y z%NKQ&{)E@shbHsA{6g*v_lC-fyw3Zs@8Vm!A%^!!_WMhC|JrEo4(=WA(YrXi!Z@wx zL&cxc);`8NEHk}M?N%|q`}lo?x<&jx$bMbMJZ{WRuS+*A|DNn2S*8~_dqU9$))+fr zbn`E;vkx>n0=vv!SS8l1;l83P%Zl$W@eQc{oc3n{ue`4vdBqnEZAaef7`-y@@WQWo z3uh!dTK)*-BscYi)nRf=1b|f)ei->gn}1^#zQSClB_Wgb8G}XtKH^c@*Lccy zzHD@~k6C_G`#1XK_y%(h2-xjqPQmf%bqNiV8}|JCbj}>J79SFGIa$6Wqx7BaF@+na z#NGcKFsdDBL^pclH#95?l{J2iJ3ns>HLWD?OTKANn@QPeo0cc%qEi%as!FclTn%)n zWKOzK_&GSWn)>cK?*donUXAbfPcfPG-WeMN|FnLg=uzaEeB_`g^F0WBl$(h=ZJK;H z<`oOSHQrAd?>iTy*CkI(uL}dC^a<&8`N2@xG}B7oJJ!e^M48kH=hjsNmzielT;WRj zZ%xhxu{Vg96iypwpIhg`ZN=|Q^s7+R*+U7+{hE`q(kz|zce60%Kh4tFd?y)6iv|n^ zuEG^QlBxHd!+z$hqBZ+0Vj0OD{;erF+IzyiBkW1-#qdAO44oJH)|uSz@hY@zzBenJ zL>~O8w{+HgZ=p9f6vbb=e#(4uSU>DtR|&1qzKDI;Te#b6pMQKIEiw+eH?(mUbV2mC z^0ccPQrRoJfRXM>S8PneJnuT!|9)L{&(e=ZoQwkr;J^y}w;R1fHtbCIbfhga3oUd? za9P&{=0Iz8u!@cLkQcKU+#QD9z&CKaj6Q0bO z&SIk$yD&N6$#G2n&d?h%nSqPg3vukR6nux@&CA(rkZ*d^n3}iv&Yv-|MsuBNRxPvt zS0vV`UHuQ-m6sE})`)8D0v~xYln;H*-#qsDvxAB7K;Z=Ito>-*7_5_T(_PQz4Vs(d zfBbQpvnLaPvjx7ZPAhei$Tg;Q%r%qtejc0GwBl?};j4q}JM*~L0pI#6BWKO^p|ZVa zc{2R5ob5|9N_U;%K~9ZrM3(?Rx#y6x5D6wZEn|Th?KWQ@s8bACWO^PcmYh4dLhH@K zH?K5meU#z;jG@+G)|WZ%VGMhrdm4`w^wlxHrp-F{dgEC&KK6|Zdy{!4l+ErsNQ^{% zBKd5&kJh5Ch6T-Kib;5Eji=DVfAK}xnb7HKQ{U{d@7Rdi^d+eg|8I`P{RS3!ILn#y zE2B9t*&kmp@qB+7h#)}N#=Byw_aUA!Dyu^M-$BQ(X85VHW{I#Eb6M}W=@ReBL zrajvl=dod9@ceu5d+|E)vn#<-!9IcUzuY-*$0lN9h4+USfp0IytP}iOJVv!|6a3mR zqOw!@s*JLsV~uFa45KN4cXV?7iTjDQE$ z3L__>5MOyLG&|!N&deHRK|gVttc%uM>-c_ppia2e(r9LAY?@P2Fj)6b(JuOma84nm z+h~B6MkCjUa(wZ<^xEsO`P!w-Z`2SQrwdvx2-Nw2gC96RN9Q)zo0J*Ym`Rz-!5<%a z-5a3A_1?G*yO25LFV?!Rz0{}`ZK(GaY$!qoS^+&B+6y<)GxV!z^nXtv;mPE$4>yMT zS$FN7MakamDChrQhR@`fiE|zPGOY13a5hSNMerAc=d*1doz!?K&s8trHT=<;B-&B@MB9Gx9tOp&F?DbPb=1cn-`CpRPw2<1$T19#tuyPq5p_xPYc z!G2XYHSCU?G?TFGzCH8qR;qbp)E51wXTd&35QR{fZQN!A8W zrgBqAP7u9~T$I;@%rx{=I$VU@9dq?aCU&7lHXJ|w%P+6zE7AG#xktGKoFP|0Tn=%k zP2D}~&m8N}F7W{qy0HmdsU*hI=UK6Rs?ppDP1&>Q*D-~Wo1tsawj}VpB{8Ww0p5Ha zv1zMV3-R#9qlrQMO-yF^iM+BFZy-xFsggKC``#_J`A3J3?ZuxSp2GPv#Th#>-f@-0 zcvpQm*^apiPcfRvlRraySn^-{KWUe}zJl_3)KgzqoI^YW&&pqIz9h8p(TgL%r)4wi z1`V(>JQ?-gYc}{qSD}ZqpNT2dcrDH_u@+5|d-S~d0#D(m@LQYJe7?-Xy+UfCM`j5(IIsU+6j z;C>p#zoo76)QUc`FSqM{jy>M;WZhMx_I1Wsa#B0z33acYzsD@pJvaH>gMASB!j)^q zTLk}PXr$=Ob>9de$8zo#dB^1~l6_Ygq9F;5QKLJcG9fwP=Oei_phwMD&u_;~td6J=rHO7JqmrcB);idtSp|pLGdUh4|@vdJ``FqGtKDm-0!h%iMviWh6=un!M-aoT+@>&`m1|n z)>p>Zc?^sA_GJ>Yy{u=QaPp~_@^U64H^>e&V61(`%Xf`@mhIr6#k$1vB z!1l{p*Z;#@=kqEDz?3KU{KI^Sxf6fouTws#;(1ec_=yK9@fq>w0Hf-(Ey?rYH?y;1 z3iHj_bU!g@VcO6hvd9;q@!oODcs0Jhau-&^<8s$>#?co>rRJDkT{hIz zav+-Bj?5VZ?*nB;UG};^8Y+`Mk$$JAP`avB${yw1x%W1&{1x|9YJJ(80kbmsc5u!5 zOQ=||i?aUj-x{p*-4d(|q8n5_ZDtF{ojeptjnK6M z-|}>?y}x!vxf`qh$uf@gs>mbc1M?x5J;I$@z+ZiTs=afHJQJD&9;;8DPlm?b$edjn zkLTQZM_Y5ePFr)lnQ_4S)c4S|GSM^XRO2f+^Vvr}Po%!ux7Os@`(HYpF&=zk?_qjJk2PJq~ta29PJGj-H9Fp zpV2-KjEc#8Xw1K^Q388M^tK8)Nb*5wjUykVK95|BKI}t2Xy5HQNj_Mkd_i9+A0#x6 zy2_Cc-odufcl^Q&gFdCBS${S&N_zV>{_e5ml38nFGC%K?jUPR7GR{Z_f0?nzJeJ_Lt0a!zLFQ)X%T)!xGEr+G8*O`JpzMC(2Wj+>!(!69R?3psN0A@Ie* z9tU1Tg_HT0!TSe!kMAvmcj6}|G$KMjeP!i?w2@i@Prx>O2$?I4J;vGdNsWo@G3|NV zo&e7L6SlZt*28;TC6AIT`}vkcK>WT17MkrVvj`b_Kx#?73+ zr5)^Y>%$}RnyOxMWR?6oV+u8H^(8)b;kZEERQP`Jt7+NVmy#9V`dOZRXKyYswp;w= zS=t?>>_R{#CrOjnAww@S9 z#&>0kBlIU7Kz#@9La#|fu0x*F|5X0>boMN@JPQiK=t0`UfxCiroQaGkp}#INj2H6T zE~@bl=d4Z1^oCbGMs&kXX_WPp@@X^5{<&#n*FW=&u77Uw^4-5{e}%VZNW9Up2|1fQ0DD`3*;MG< za%2tJ$QHM8KNf2&+r8p*H=&b&3r*qQm>HG#Q%b?iui8IZn~1#6UqxWr8ijg4Q@192|hcY%fZvY{jWhw*awl` zvyqWR>`R=DEJDtgZTH-I*%CN+_kC;w7kV-_V0)~;5MA-s=c|kDp0h)~ zvX*l__(94G!sOQQnO8S8W+9hh7Z3X0N+vJaNwiFSu?2fW{S`f#qA}9RW#1N0(EUG> zVIyb3E3u*3`7*GhXitA~pl9h%ZjQ-}q>~GcvU)FhSvsyu4@6^{$9gk^(x*=^Z<;CH z;d#k5<=Z8@DDD}Vx!^PQ)VQ2+b)uQK1Di^G^1!Z!;0QYod(kh_*B;CTpA^IL*fRN|XPKey0grsLq(X5=sk2Aj0{#tPZ4~1? z;E_YepWop;U$R@zjr*Tz;JPZ$Y{31SEPTkKfYHl69mu}EN z8SP2G*MHJ}W?ka*CphwMV{xF%Lf#F2%c=|d%9{d`duJQlK2&?aNBy~Sy70d8!v0wy z=%n^ZYcOV=-W8>z=Mf_x{(%t{jkM4e!z1wBq@XWMmaOR9vzzxZbP2wF17nh{(57MZ zZG96O<_k3$)RRsn+>BHkwj4f;cam#gVLa|TANrP`aiylE*F{d@FXgMv!X4;NBiXnA zPWk3lX5sHCpZEp)+{b)_W0T`KPjuXtXzSa(`rg5t0`!mG-^Uh|x>B~FgvOU>)1pmR zS3J6VU;{d~z30HIZ5n@8n!j!fF)NC_kzBt5xlhm2d7cm7D?y&y;^FKRd_y=INQ=FaleJ2oyEUdzHWk-Kr?n8zK1Bb0?VHkpHKxZp;3uBuOW14V(MK;uev6>5=q#Pj zdPL`i(jy+D%(lzi6~fo#*vAF`8-Tydr+wdW_?qxd=WEkHeqhH91ASY3d`}u^ZBhK( zpeATA1y|2}T|OpzRsC^)aYEw^#wWXfz#LZHSLW<1Z|Yr8`UEsQ zC5_xiv{!%hKJIf*Xng1_?2E)XOoX@pyJL07Wzufnv0>Y=Vdf!6+tsY4><6hv^Cbc6 z1ndHZvh@bCRZlRq%=ioH@ps!}GVZp=bOU2*HIX|tPUGuYL1c|$!^*PChQ_Px%kXVr zG{c40U)lRz(5!6<*b!NCYYjd#U}B<^g!r_B?|p5s6~8hIHLi5V<+qF|zT``ULl*uP z>pJN98RumO$erbm4>_ky>$$tjrWXZ1+7HgdXGkBji;KHL=f@f?KXvn_hh)VLwaQx`0@X^yp$OX*s^5{vZZv66!5>b z(kxs7t>?1C<2?6^bdy<$J+^Kl-D%F5Myq zNB^a-mr^&xGuOuQjNL}4Og5XMv&`%Sc*I1XZAUJ!J_r>HH;u7bC+X9zkDSn_--k|U zPiPEUGmG^S&9sgf*)A=0pA{YE8FWNtrEi`J^VW!2D4YNIUbx@K*pBNQYeKeMx#u`BGfeXJV!=VOjsbvrl&cPcRd-haeim4QCkj={|T}{AQs;K9=2J^ z1O}5Afm}ZI*oiB5J7sUAY^c+l`Bm*&Z#!kDQ??n~>Gylvt$h1LyAk9EwOilnl$}D^ zS=iDZq^w{c=#PBA!n>~hHRlds-;Ko^rmpa21Qyyh(;4l|vxR*jS}K{n1zAP7cQ%*xKx<;3^Vo8^Z4-n}?6Vv>-(44%Mz$n|CfR%1obwF%E4qEyC(@5C zFCZ4rFFL5bsWR)KV-XK`ni4DN;>}%SjM|pYnUhiyO#6OOdv700%EI;&^&4BaOQy*0 zzI#VHwp<^$J@?4+0_Eg$e98Ev&>NDN2l`Hd_481%#xy*bRTqFSM6mNG!*}od75P`_ z{~&9oI9z)i{I7q_IB6_bGM2~}jKwND19~*Vrbm)Rj^mE@Ao7+eeHHk%+$F!D*?9d~ z=4Xv0ndpi;-!eO7KM`-V7@Niv+?1EI=RS0+gef`5<|T9JL;t5HcyoN_ z8Sz=>s0+eoY8J4z<2eqUWz|XM=5TcFA!Go>aH>7!9$~-aq#X2?9tMw$-w=b?<}FR* z`$BMP^68ZJ3Y!|(Q9UZVVuPolfld;IAwgU#$P z@(A+9+`T{dHyj2Zn``jtK2eZ$nAnU<#z04FJQ=@Z?@CrrT=Bx2+I;lR z{j4EAxiC7T`E!SU$sVx^AF1mX{Tnzq>u<-_1(>5{899A@q7CwY4C7pLJifUhMoz<} ztk=axQv?3i;5^T@0dv$u3*TvjXhRJ1HqWqqso*8}dBz3cCAqQb`{Gbj%;L$!Pgso$ zBu9V~vL}g$j5@?VLH?ACC;fd`ubh_vtQ6}J=(X!Bt_D1rTYi%>x9rP}+8xZztPTY= zmoc>4$XtvMj;-6};4L}TId2253J(vAhX()t1m7XH^k4R;58HdX{6#+UPyGGZ`mB+( z4<2hjsE?cJqlP|OcbtHi@YgpIo&bEpIuo3CQ4KJOYHpu=esUisut)y3dH7SidX{Qk zL{n4Bf?X>Am%imw*#DGoLC3Q2T@`(JEYp>*!0)EbtWE5i%Yr4?&-W0&(nH*eWDxPd zxyT{yYff)SLidwDLNxT+Z71SZ_HFY1Z^fSTx|VgVL$olpHOrNHL5=ir)hqlfX+rqEx-YsB!-U-&h6BK?7b(arRyoW~Y2 zt9Yh(YZ-kOL2tvaT3Oh$a;#U44DHnqY`jZqT+h815peYo`$sxX3%2FoGsaW()R`&H zo=Ij+KJTUV?mB9Zh<^^>nHS7~_S

    yfk41dCS&%)<@BShhsZLo+_j4aoc+;V{2aH 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.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�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 l}@o6s>&oTKuszxan|fGZJfc*3D3@XvTSGxUAV z55GnG{eJ;g_&NLkuDs(x-rf4InIYY!M?Qn<|DfF;W7ohAQY8LnF$U#$MNZ{BkiYwf z=+`^(sUpWz?_zJl)2dZQd|>AM{*L(j8u$Go-rM-5_YLv)P40Ue-{AG&b;Z;#KVL`x z$>~ODIy53V-7Wv3Q=Vmnrl>s2Ex*<&pKgTCQ2BJX{Buq@aTMY;$+>QMg;RdEVV^Hb zKHEh0|HAAw8lU%&sc75Ly*PRwl89qnG^@;d$^;HnRL;$7(PuHz3qVqtCp z_AdT5z?a=TrsmfjUKaE;Wg}m6#|E)?=wt)LoJihDhGypQ+ndpn9mGx%@W2oGQ;dGa zN73R{D~pHVzo8rO`5c0$gt=iGtkYx z#r~H~_io1U8t}$vFkE*LzD3@>fPZKPye)t|zXD%VC;Q%hKd-5qb2I2}$%BvJKbCy3 zk};^BU~OdiSN34*YMN#gT}9i08LTUM0W@b=zKB9c_B@6LKuccPIHJqE;>PV9O9LD| zR5*W?{ex2OIB1F-49)g?F8F-KX`&{fen2#Or>6Hn)H$fu}jI%DTC2T*;i_L4}RPq-fr^GA`LQ z+D~(AHznvYefT*lcsGZ4&;;8K*@Qmdb1>Q|p0S&pbb@CF@YLMysyDjtLWaKkB4EV2 z2w$u`aBT)TENCNmxN#?N4tz5ap5l&U^4tLQ zGeG;2!(>BgpXk0zwciDK=h{%(*;BGJWx?m$DJOQqww;uYvYnJB*l=zbWjiTNu;JV= z%63wkV8gj#lBvz~%VOFmXRxX8N`dJyY{#N5PJ}nD`g_ZqoCSv!q{~ zj8pXRz+2-|Rr4ozN-G=@W1dp-d6pPC!MYZkg5;ew*dqr# zMt-2)-(3&A;T%;fX9%~|fdh@7F@_tU6U45!F6s3S77(9b&z%8bLwg7@tBT=LAH@MxWD8)Z@5Y%jTtmLt)Ph2cHt? z_XO}jbPL(w6ZBjBQ~NVfk2_(!!T2kDx1yU_re|TY@j!LXSpTvNa*Z4GFB~>aPpc~< zN;h8q4M#TY$3GolJXUW}tM2Enqb~O*v`Y7t4qP|m3ZHy{o1ml1p^@|8QLp{6yrVx6 zE-`u0#otGP+cEFsaLWikm&y~G zZy`U-ztZvdJvS)?>^4_TO4HpU%jBnq_E|siSYwlnbh{nT^akZKy_1+I z`RwYE)rR2_W%N}6{ny#Qo{gt!qiJ_8+1zFe4|)6{rD=gEw=<8D>9s7;ud1}l|8hAG28uG z=qHu_?lLo@VH0*klfLzx@a3C)YhVx7d^dQ~25XToKEmc(D0nfC_n;96z+>KTx7$aC zx*8etZe+{=GUl}nfuZY8&uATn_w<2dK4eUbxm5Dk2OaexV{#sUVGndIkMT7o$e028 zmYy0w{t^s>ryyr~kukR>IdZ0joO#2lqM>%ie(*HKa!Srj8Ei$)+z!pU7#L`;eZ=_X z6W3aovzCIbWm?7h-)DG>U;gZsrS=--aTn5T&gNcVbfUZMz-OJWnCLtCF7V9_*%|m& z%Ny>pWzAj4Wo^VXzL1n|pC4;XHJn@l^d;H+1z`6}@Jg~eaY5S~@f}Due;l|4ft%lk z+mu%EZ26d*kU#sl8*6~ydiOGOB5q;0vcWra5TDZ$Gi|Vywb{eGG*+t=J%BkKWDY@i zN_3_%ESub&wEq#lPvQIMdR8Rb`GO~V=!KW2b}3e)*zX^H>Oph+(~p_kC5QZuIcXkG zGj72SzxHtXs#QbY5_@erz0}X)%we8Q+wA<>_MH>Ih6O$(9&xVidT+(06sgt=EW?vq#9poI^64SEnSp~GE zGgtbJ4|eftGj(BGQc9|DdK>bm+JEHCo{}(p^!6jsc~$6!x8o=JXMVqo{P74p_UhPJ z{s7FYuzB2$ugG~n*?xa}?EPzckIm!uN$&ep`~4%a_rKJ8bkN%~{H4z#3x$zIo{hcx zci!D)j$bG|)tJ7|`gF2B%MELu#@d=;a3=4{(nI)@Bk*a_uxF4_A~Vr@SPSltT>LY> zRk>srm1~XmWIE4>&?h47XWiX{%{w%JERuip%ALeFhRTkb`*as#5ZG-^GSXJ#>m-j& ziq-3D^|3~Zl~YW>YWm3FZZ|Fv8J-7De8&&}%u?*LbH-&Oc2|EE_aL!X_6Q%L$v*1M zgWs$kaU{c3m#b|mQI5@=N|xMs1}1{s&`7F%dey=Ys#w`5^#j7u0} z1>@8DY(sXe-ra~=)|YlBr*Pi!D)5Cnw(?t{+u6X$ z&aX!wTc;Q$hd#b?=XZ!H$cgnKyI0=_IVGYCv^~$u9E{%it(zEogng`dZ~!?0n1-a9D~2Kmfib@Q1s_dk_9^Wcp`rNr;LushjzKI{lp zeE0Ipz7mZ=ZR`PV8q0&+6_gLml7U$PFsnCH@>c^h<$I1W#sIjt>*dlCjc0)Q&i70w zRv9}!_-4VIHGlCtovUy3B-_03E_mTbtcmb=HMseE{O6*JSN~4-$p3n}D48mcHIU2> zUrA4|Yw9k%hO_?IJTfkXhM{K*ucbe}M+~}fd7uoR1^1#wt!4EB|Lf)yw_fkO)0gr8C&85C$ z&r1)7S0LZ>8yzGro4I3Y;*70im3LVKePbDEpQtmRF&^Z7a3wn1B4bh}IO^=n%t8fsWK_dXp9`tP%O zK=PpNGcc3`g%}s{ckII2ht`(hjq&>bmF@m~q}}LC$KF@1^M8^XBk%<2xb3WW<3wxd z9eD8z59f5%CVgq>mIuDnb?X9S`+t-fA>qlNc()$eT+dTkU)c%xzB6zUc{qKaw8yye z{1oKA(e@bp6-70CSDTa+`u`3`*I^GprE03Kqs)sQ75L1EF2UGs9FX7S$k&KxJb~{- z_U?n&z%)1c1p; zfK1Vd9Dj*uExBLwTc8nwM}=UA{8uNP1N}M&``ptu?r>k!5oG0~(ZYFZ8#&<+^EfCQ z$Y<<136?DHRhUg{IUloa4`9&dmsbef#84I%DHg`PO9BiAKyN2IoJfqjJpLX%Xp+jeeuT5CP$cxVU1>wPU z3(y&mn*^_lv8#V8eTtYL^u&{&D~Tdwoj4coSk`$A>nxk6iLaIO6$ZFSJmU~P*z9Cu z`w~ya;7h==!qY>X`_Me{P1$7+F!$?#=Wfni@}%woH}rpD?bOM$kgIgZYJ)l6=DT|s)AhC4PqJRz*P1!_6n*8B%OXtQ zMXcjt;zlIb+Vlf_)_%mkY{#{bqj7QmnMRuURROpszLd{C*ZOPRUSOcJ(H+>Jld)w* zladE3ffY8VP$m3_J|{^pXvd$*^P;|Jw73NvlTSkWp2hq$$AKhkp~?f4YcCzo=EFML zdv~-gB=Ju1FMQTH-_Xzah403srs{Rrf|~IC$W~zc!|l63MttH1_k!#aUqlw#i2PrF zFM1L1Zv{>oU-Etawc^#!@UEdQQqnqRsJMZAPz_0`t@U|EDX_5b!8L&e#`W~we;)U> z+O_4^zA{=50|*>e~Dkx2A~>cC{H zD?;9uK(%#mBnMgRtfW%yv&U@M9D7%4AO5jKzZ3K-en#AW7qcV0M)^qmOg!FU^U3^9 z?clKND6;#UDBdBLas3Yb8NDuk?7D*a|LyS!Zli5UqsOZKFFcZe^JkZg;82=yh&+U+ z#c)Wr56hFb*lYE_%jqVq)k8{q^#`n={J+p{JjLe#x`DZunhKdJa8tt%-e&+v_5%q0U-Fz@5msJhOKr=Mo=ludQR#dler= zCvzH!WpTSX&+9Vo%HcMeVl5p$WPk_Y3f?CYzcQ>o^} z)`mQPDKR01tzlA(2?yn9)?yZUl(yQiywh@W6LRimbNCC6I!38zh7e0dV{^R5!v(8_*#3u zzxzHjd*KFrI@kafKXHvQiR2>W?Sp^8<0mKJ@q4tHhhEqZFGvTMYZQY4Zrb`R--^!F zy~LS7&g(54Yc9H~*_hN=hu%OguxDtmzRs(A8nIDvehU}~$JLMJ!OjQW{w;s)+`k#r z|5%={j%=HrcT0y!wB0I>U~vA(99*z0=^8a!gvnGMYtbxX?5pRITtT|b(3-*8fywiUpjTzO)emnj@Cj&67MvEfnkwZ;$ z0S@|;4qp4V&T&@ZL#V`;aQrw&(Wq5s+QLR?)U(i;y{$S!mIb^rq0>{K*XiNApj(~L zt#0VaI~QXQActQ+`~PkFR$1_+xvh2A5rbE0T=*g~n(WA}TsS9OGtb>-P*m7seVE)g8>#s7c zZ5vE;pUwiv7KJ>XP7bJ2&bV}YkJdc4hxt{aFBLH6#$TGt4iL-t7PgaS_@8V<4d|3A z?>`;*e#=~jE=CUBAG9&V zxg=oR_&?2MdDEHqIPP8UrvGU?r}E60YI#w)2*CpF(|^JHtV;^!^v$D7GE9B)B~i2%n!zV~`kThI4! z)*Ksn4lpJ@&3<=2@04e_0@&pUW>Zu?Ej*o^ZaPC%P7I0s7eU5hO)(1ZBd2O1^R&*y z7W@r!drqyfui4hor-!k}+GoyedaMmvC1c5asJq{*LnG zPCMr~{*^irY<|_XAFvdUw^|JN=NGFOX`K zsx9HkXQ_7pxGFyUGWu*nwsi4FGMv8M@EL5njMXbV$$K^1cSaC7D7hXv2Rq=j@C##& zHs)8T=ee}u=Q+5`T%>q}oC)0T1APpPYtkLPorySBL!RFAs4rPG5yyP=lWSTF4aTB6 zXHjP(wgip&zGzN~#;3Tu`>;XjdBdO0WzCH9Cg7zpOs2kkPuh0@?K{4m&%AH;7^TvO z=935cJ@#iiHi=~DW7*Zlvf!1_4aU1CiCoJ2(n9!6&bVqt-MtOT<6CRYoY!y4LC$1N z%kzxIIjo(@{|fDS_J5w9Pv`lk(1Kj-_q6T3n*9gt%lTcA$-C{W5wxjd8qa*+%<};I zFu)x8Dmf>Iy`~Ue*7iX`X#R2c3wQ#6Z`bvI@0II(9{jv=o8rG4}0Q}p#y z*7bjk>a*#Zkv_jG82^MmrqUO4tL4Al7jSLXv(^>d%HuhXci@*jCgB}xQLga`@Azgn z{91Sie<*ElI5oWc?5Oei*N%+uD%PS3JlgOhXYM)h;AR&d8eDMsv1qN_vDE4rczJ!N zHjZI(u_o?|n)^n^QKB`2R_s2TaWK!`e4S;^4hNB2L@&zu?b3_gzStN9D?P_(MV_8n zvxwIyJU)M(7XA%m&^eYw+A03LafLG$@#kWV1zZ&k5M9WdLAx=!(CgAI##pOo?a@5u ze+qP=d(`}!t{9pB5M#3U2Qrf2+OKm9?znO(BV@W z!?#C`q2}`=V|YVjVBeVd%C&FG7mtiV`=Iw4`i_qPI6}M z7+h%jn~`xmB)a@-V8Gn8H)?@}4S&gI=f%bVPBilz-@m*w^-geklYMe7&$0bm&a=CJ zt?9rCzLBmocqic-e=}-)JKT}MOB_5oKFp?t|M3Jc%LUH^F_>+R(bnD~!y9H zXZ0(*xxiRl$r!!jZx_Vq3AFXo*6x;3Yv(_IWbOWz{&QZV|MO#gK0*IHS0b0FAB(!$ zm!H;0<)}V-(nk8Yjy}|u=4PN44L7_DK8WiOzK4B^}6x zm-PEM4TMM3ir#1(%-5zpqJhjePJ57HBKxDKL<1*`9?$1S#`9>xcxv}?he>SxOrGQ8 z0T#``K(O6|{O68q_xp;C%nk>>2Hs0P8U7XBIa6ZNLP{%B$F>W8bZ zgig72eln^~PFkWemN z&ii}L;-ClSCe(R+RGmn=QCKmDG0~57YIp1pkE+-ACi6ottl(~$$h*`}V-D!o>k_`< zEZ#9N@%|=S=%s&s6ZnPu4Sp->(|lXuF-mV{kK452P3%SBw`is4la2GxDwAiIzll~h zOQpcT_p9r__thAqV?x1iPruu{pd_m7EcJMm7h0U9veG zAZ|`}hYHq3^cP#);%fz4{RVy;v70S)fAfBKatzk+oo2zEb+*j2F4DJ6tZ$iHcPnjy z2lL(E;2-vy#U<`<>NmT%ihLz}blN)eB3tgGU-4bR*d7bGlt-Dp&Kf5+aLFv{Bj2s_ z8taXmb`!Q7#c|l*ZHdu$@l9~k&lsoh&Zecs&{Eo}<(o3KFBwnuXgAk17LRw^fF_so z+kOXK>^0~EJ}6qonQuFe{6^1{>s=Vy?_)Nizv2Bx&d17rBwKA2zYW&Yg|A}S?A(FG zK9&LRY;*m3)wBNAY>N;tNZoE?Fdi#w@RjJB2sS34IkgoV=JqQ3@M4>i z;`X#!=!~DalXtJ}9N;7Tc@dlxJnNCks(xuMQk*SkB^OIJspWqeFzaESUDVSW^m0Fr z;N8rBci-yHw#~dR$Y>osP`4&80}6o zN`ugSmtKGM=*TzRTXam{5%vAvBh}tV{`roInMRlR*6H-&+G!85R*806@An-36o3!( z(T7WCbVrKYUo>G3f9Ctdxq83r@LX)jD;g5&{b5wSzCTd!{D;Y{G{WCr9aX0tUK!`j z&>wu{aoB7fRaZ3XM$dQF|Asp5+`x@v=2o#WS{PwYnp->bapx9DnA^n(u-rVVkKj{` zS@iN6<6d%=#mDkbqv}Ook2?IDdie?UzB8&``)jfG;Pbf&_3#lK1JgeGweg4crXz=Wl#BcdhZNBrtk`fF1 z`U%@4H_Gwa#9weso5aH%)27zHpZH$c$3?G3#|7n5_7N~S?tF=Hj?MQK*&#Hx#4(7L zY96!bb0aZ%;}T%e1l<%Yg2)b{|L&agMvX55%uduU-`VY^CbTPB?zVfp`MCWsmQTWg zJT$ta#mysa8Tc-UAC3Dipmo-mCdC%V%XU*{SVm|+=fvcPa{BDG?`wx1z9JhyF8(t& zhqK`6KD+PbUvufD&Or4u4!6$n;<6MQs#vy53Z1wWwRs(V|M2Vg+40_AFL7dO4p2vD zO)J3H<(%c4M|?`V&Oj#QGSS)Zeqy0m59eJhKCg>%-5GAdPZU?Cn7clG+dPLH<@nu+ z;YubZCixtm;eE;H7{uR<)ICU>Kcr3Fg>6yaZR0L-{@zV28vJpu)q6pRT;O|s7tRUQ z0=PQRUE3bo}WCwIC?*9jK%(phVQGu%*`KWzl*_l3+1EZA3qJg?RJdZNc>|O zc&HdT(}r&vxm-qKF>{Ta*Ass$CSNgZCyFswyrJSogjW`EBU8q5_RPSaLGIg1zjI%N z39h^MMQCqlP%oMH9h{#N?pv`tBi=s$sGYZ@iSgR+4XarEDns$B)ZfZ^ChK}+0M@&f zcC0h}+}C8JZ#8m@D`Rc+(ME)^h-T=0hw=G&$p(2aOe8JtbbJ?osM$aMAy^(%tW$ zv{L&qLcByUmE1-iW4MMf8x>PSCg;hu-xKGf^Bv?fTI=SvufOHUy1OQPk_PMq7i*3~ z1CGT}CkFG>aMY=L7i}IOZ_Wsg9{=72@G>NPJsw_&whJ#>PIK-FSrEeu>7&Anx&*wq zoAt`cGi<#?YyI!s9pV9p-v(aJIT+=b$PCZ_BeC(oF^AlF(jyXKmIo~Iy2geQ;Wiz( z#qlc#{JQg4{PGIFa)>vC#|6P7%jaL=O}b#-Ztzh2PkDTmtB1T&YuD8tS(n1t6Z^FB zt}W}BKBLq-Ud*LnrM>(g#CyF%jOm|<_j;SX`xbk5H|w8EKVLrGNI%hggZDS{-U>M9 zxKv;5m3cYebmNOV0{PBeYO~mD8`z(z=yeu#Ca`yX?Dsju*Kh`N@);lhdB-Fpvg55J zWAlQ)&9L`d3gxN%S{pEjc0~LOI-B`EcgAfnCk)o0W4=AsUrHXT!awyc=^Dd* z9-a&Q-M5nGYy>9lSjMt1TjV`~W(a;>#(Y7pG5iI8X zhOy{r>%p`}a*tJ@Z=HQOddB5}TT33Y#T*x@ozQ*$4 zP_*zbyc2yBo%DX5vpA-4k@xe&Khe)D{(i;SbQj&TSI=(!K0NFDlZ?`+z0< z{=p|ZsGGw4iF27m%uRz}CA_GEmiV@u7pmuf)z(bF9YU=MA z`ky@O9QB6Sy?3?@LhSinfAJ41PlQX4B(t0>F0`HZZk~ts|DxFQyZ-3r_s@#oE6{Ts zn)zSW-&_BO`{PXhUGOd4t?AyI@ZUPW+5czztI=5l$ur5a;gr2T`YgdGapu1<&exN) z{lMqQi@1t=-k|5&3opEMR+qW4ydyc?Kb+!a-?IlBdhf z<2A?cGOoGD(Lw$@Wn_E`3Fkue^ysSVsBOS#oUX-U33$Fu-<6;U`opB>M1GVJG9;lf%ET}cc1{-{k*>Q*nEn~{jpXuxb6wt zbCZ8qI+g5 z*_EY%i_B7V#}#edm*62*;0?wQ$sf^AcEf82ZuFOy!FQW^K8y@V{^>2kW7duQD4F3r z#`Kf?qjpaJ-_norF*eRHx>rz7cpW2OJMp@$(eqV z_slWvJgxXA_8Py)51mbXmtasd&1h5XcJ7~|MK$nst)=AoRPH=bIqjvtdoj8Za(85o zWd7`McD-}2G;-;VXmnhMJxA;x5%TSn@crTIjNy-#BzGLX(ik549_Oka%o=*((yXrN zE`xjEr-XGDa~u2i@O9+h1UD4dEnV&W8}L7Xqu4zbm1U6c1sh&Yv#|{O-Qq~BuKp`l z`1R|I!olB->4@IOdFEpB6ET(w&Ll@>;!nmm!X2E$C@OmoJ#`+kwUO>VH-3+^*o@K2 z``vo%Lpxe(dOqMh_3AO)HC;<=26vT&c1 ziT^j*SAxY`;LxLWW}6>9lKT64}@Uscyo@+jrXyRwV(4=*u} zL)cs{WPbYQrfv6@XnyV7Z{h9v=8ksF?VR7O_YRGlr?~ZjRgFKW%jx+*doV%{n+N8Q zZweeg06bjyM5dt&9~?LDHe#&|WbdB21Fvyt_V%tS8mSg8@#r=7L$XN}ahbzt1QeT-LU;L(5V{6YMm+=UI|736!Z ze@+W`tb-qA*dZ1IvjK9)Y0ZAZUQ%wrD&V(-Iz7~Z#@lCebx!?@;Oa*^Z}hq6M}!lH zZsVQ}`b+$NfU)`L4_m?{=tg%3<5Mp3jdjN28(5!oYz&8&_=m591`WOB2Y;syMcDIC zKP|eE%^sf0x;y*`B% zKBW~rRv*2bS;_+5tb@)fED~+Q@4eW@9m7hMElMyGuM)m!?h?l-r~E^|AyO!k`gORw)zt^*hMpzlKw*5w-7;T+>|g#1?Os}=l-WTP*!hT;W+ zoxLAuBf_~Pm8(p6L>`9B1LPI!q|DCoUi1U@_8Ouw;5eGMVh`rSLCyhz? zAlM5(Bx?+@A6)C?hVA-O!djm;_=m>fw)cMur`9HdX-#USu<`&0WjQI?E8Qig0l zgw0=fA?^8|zZ+S9nR4PMBa`fb=Bo1cnKRrAI>;`W0cfX#Lyij{nd95PX8N(}jqJ_xH>B>uMac5Yto_onm4|cn( z@OxVKH)1-E)_%f6^K&X#*Cz5cG&y$|h@W)OPcpb*onZ_Q{LbG!_3X*MWZG((;d`>A z)(lBD5pCG*zy~;IL6ft?|9l(yeuybh&Wq$l%%8cY3ZBhoD62VVD8+2*&hn(RTAOUT zW9K)~oV4FM{}kPF9{c>zpOZRNrhT7C({Ws+?}3L^R@Rl2tuU7g!^@p zJCJoeoeE5m3J(sd(*w0=D=WSTm z0qYLVU&eG6f1rgESUje_3*Fcm*M9)JC>f}i4Ex}-M& z!;g@i<#&;cs{P{9|A+9EtDZ~qrHdy1wrqLQfxU1}`%!HPzt|krul_o^rHM8=iH&pV zo%WyTa1QxnL>C^)_8)FnJYQPH%2Mrf;*Cx2d+LXVHl5BL(EJT(-&~B0hn(hvPU3&r zGQhXV?0YZ!Ugr%WsUvq~`;lJ)ms^899yRua!d*?NNZyd2H#&xkDV&fT| zBNsebb249SpS^b+-hQGSxx*`>wteU*zHrf~Z68H5wSHUqZ=E&*vmWGrFK`XAM`ZWt zMSs2wcwq}T<{t8gz8+m{ap$;uFZm;^2R4MY2WSu7{+PO7K~9r>VGQjwu@nQ5gXj|x4>|YbyD6L%(iv)W@?-lW zo>~1(p+E7aUo$5C|C8pLFy^aPDWAl>|M17y`xNSnFZ6xgdeWGb-ugZC>)dZdZMq>^ zAUdCJ`kw4Zx9>#uz6II)ZOMAbTHi(9lirFQWXEOLWFpAv%3Wn0y>w^C6HipPJkfoJ z=l4iS&_0elzm!)7S%4 zUv+;St1Fqf-Lu}V-;-2vcpE$voLiHKbFcEdX$0ruxekuSIcKk*8qPU&zfGGZ_eDGV zM$ziukAnBJ$X&vb%{IL6{ReV95etVL!n!v}{vDLh*C@O=w)W&=ch-5#`Jw(f$SS*| z>!$OKWC(rN3@$Wf8g1VO|NVSt^IqCg?0F$Lro4k%-!{Gxe&G+IKj)sy&+Iu)2d$GnsPqJQj`nA_FcCVpq8TcP{_KM&8=I;)pyG8lqXsexXcE{@e_+0X$bDu;1>BxxWw3eOGtG4-0?Osc}vGFbn zGTuoE??u}K=ugPhg>@JC$=jA}=W^DV-8RGn>*hJ{xZ4uEl%04a_5+yNcHKm~Iq?y; z?M<+IFP-})_=cSB_IYFH`xEDjar5~hKMyBgh(FFqUbrL~+Qyz(!WtOBSa)BfkXQXq z)*^si(!Gbc7MTNEo1KeO`@Z4qqw8YxSfSsy@mu{@$QO3u>=5}XJG}k}1*;Vn{Ry*IIT2K(3gJi3`|zfI*U;Hitq>DKUG zEO&?nKh*ZrXV@N7n5I=9=q^Hyv50yu72w+7uhB=&y2zXq@Oz_8mJ`7W>vf z)}u^5%IKxaz2d=!KL%U=SZw;Iu{ZF~tghYD~ZziGA;&xzU z0i!+Gj4QBLfnVhAHs*P`H=*md*!Hm(S5aPt4cd*R$zzR^Z*pwaz3jDg_-lKbRgC_W z?ww>z+Nke{RdMaig1Z5p7@nbdfg~qqfR!}Dqh)7R+z$J;^G)y3b;<)8IYTz@tZ*K4 z{1|+Y%%ZValdO3U*z0yIk35GnlXr1X!1wa8wL!}wd>5HXzOWBIdDnP5v}?px?BxDU z?m}Mzhk(0m$;aF^elGV)HhusfC#L1-stRCxB{04MSYHmzFT-zgX$Nay@2?=auMO^| z_yu}xKQg?=9bjD9*j~!_-@mi%RzsTU57wqScy3 zJdozAb*TjYE$E?L=)Wq{?__l6jlyr>tU6WaY+e8I`9|?-{2j>k^#BV+bQS=wBe-<*Jr@m7r#Y}h;Z|5@czPC$TW;oa`anIJLM*8NKD9% z=l>L4mx~WT@6Y4>mGDvXX`Kmuok`yQ*j$WBj5`4za#^cP#x@n5LH)RQLcI~|3;I}? za}}{Lxei?55nBRz&UzkU9O?AkM;w-mgQ6z}F;eBc>m%LGKcR;N$PH#nAA7k_qSwTr>^ zA#@Mny7lW3{SjT^m8$z^hg$17yK$D$S%9rj=Qw87EiGvzKby&!U+7pU z=MrNdG1!a$!uUUAd>_(Z0e#u=ORTT&!>{j5X{hU}z|Lzm___pxttm!G^4pfl*o?WK zgZPlebu+L9*DWvcVdKwTwS1^YG!vXy;_=q^0#i3OPiv3_El`|GJN6rU|Ia*X-(@Dc zj&8EU!I@0(Q}LLLYm@clYd29eYw^jBqCFm@!_0zDkZA zjd2g>+wAYl>4&rL8e@J=tZWf;(YP67*c~_H*>pB#jPd1jV)cqBJC8EP__8|}jk}UE z#<+)EA$A{ij9X=A(cV{MWx%GX${Dv09n$wl1E0CF6g(*Ge^9!qqa&<@ zPAFy#{G0@BVBe85nL2->EU}*G*L&2p>3KrjFuLlR1YI@G3y#$r9R0ITyx=5p!+p>Y z$?mdWOIL0CMWWu|lrOR6_G9_gH^^y}iB9(d?*i~0>$&n$*(ryyCp7cUrNOe7YaYMO zH`+*unVtfE+Uxtp*`W_&ziqg^nH}P+S9*oLhXeK=Zic2s3ykjFF}gjk7`PPxH^a)W zgPzJBTg3f>+SBtGhv)`=ip9d24{0kW9p75LvABib=yZE6=mxQjh55qssrX#bty{pM zt>a^5;N>QK+b!Tw<)l~{IGx9tu@-Qsj=f@kdo{R0Zh;nXsE&M2c3GaeY$IhUKTo-SGw(G%=KWK~YN3ZEqYLMmxBY{WTYFYAdQxU@ z%lg~+Hj&4Cw!qgnf*$PfeoLlmoP?bBk zugnhVe5F0N-Pxh9CC-g{I&(J_n18@o5%~Fz1N@KCl+8ZArEy>%8z0|)iSHBPel}3G ziTb6g@9dM!zDaXJ(zWcmx6clpp9p1TpZX=gL1N*Da?wk9JW;lII zCfHJFw0#KA>d7;TSe4-b@qF;GVdSLE#$|It&ynlTh~0Z$11))n{VttFc05ml9q-0v z&Yhh7=MnFLjWE%c0`1%D#?0C8VzK^?znYi>^coH(8NdrO?30&j@Z2&n)n(r zj^y>9oQKbcGqkq6&bTDo$u1=M5*tVLhsZ{v?|tF{kGVWRd>=bFd$|xD{r~n{GHm-z zMtC~%SmZp%&y`^WZMxcz4emqAL}UNJa}XO(@ax_uGl(fx?EQ-c*yM&BJwbBt!!_s! zz{NtY!WJBQoV!B$_=}`+FOV%KW`wtrcUE?cJZP<8B>w^a-AQ(Pv3I+%8Dh5>jvzlu zCNtrcdjGu&$CfKuihYjVGQ*ZT_h1{5-@%cGjT6YjQ$HaO<50Ba;b-Bq*tfzPSy%k8 z)vJ(;SH$IFXFewL5e{9$99QDckniINzacc~_r%7(8(aLGn`3v^+PcA1_}?_vdwTe@ z>;v_oF{|D+=*}*zTIvH`KIHnAdT-Zv(u|PKC*DY`k=~OtbMR%x89)ZL>QVZC2OUb#3FX-b_h-x!#8@)d=aH zx*YNV%I2@wl_zOm>mwhf#@q(%b&lliR0pTI@2KeW)QQtm=!5hun{FV#9fpSc#N+m5 zhh*Q0*W>qz=*I5YdWdfHus=jMgnOR__bSl0kONi`DS(dfwSG8uD1J z%HZK)w@fmv%HZL9+_E!~F$$?emKUwl2=fU_Lr<>bnht6gmDU8jY z<4+p7dPj~0vJ3FL22=Q{NR_u}8=GNIE#mvRu@msot z{qC2u<8X9;3yuZ+xp0vlq?iev%W3&)Pl=ba?q$9BhdG}vKX#pM``&a%75iAW!JK!n zH*&^!S5k7r%Lk&1ThHn#>6?)p@cEy%rcg}t$cdqEU@7}7FeUF z1%ZEnd_;B`@{;lz1%bc!j93|RcsY7p5cmh(GGzEoDg*u%$Xf1tDh?(H{M+3!*0Wb- z$l=!HSUuKLGFcEgyw5Guda7&&{UWE??eT4S8fE8FFBhGh_3YudWUmT%k9Bl*=v&N7 zaLIWNe+DoMp4L;E1H7Ig7m;E~EMVZmY&CkJ@`t)`s~C(f=AMIw6#hqMq)y8OW>;nO zlmz)^Lkw=BQ<<@E`q(eFePMv_kZS|;oV!vS`A+x1aXtoJP&hCCEIhNv`R44|D6oQ$4OxE%YD?i74A;Z8xD-^BQ%d#B)v z=h4OCz0%k1_wiW6^zh@HZ<75;`|xJ$^6_!~VRq;Wjmw26zsvdUW!!;z<4UE6#_R5O zWTJRoe$S(B{QWz#Lvs_`;`eNR+j!2tyE3t@f!Vsld8A){&rEFVz1gAM#P|G`jWyoa zzS*Iy#P|Hxe)Ne}p}+k$CVSej{&03kcGmc~`E4b(HSF%m7*6q9d(z_1YsW}g4duw! z(B0}NbXxLHOFlG*yv|F&GY-_*@9No?tDo3(N9%0j_rRAj_N5nD6nfmS2byS|Gk%)l z18)bvI>4_NV)&I)ZY&$~X8FowzVVVHIB<)DR~BpU+Pikg>|KX;MV+&OuSJUv*t|I1 z=AA3xSAO_e(*noN<=VMx7+X2xUW^S2AwFGrFC6&Y;b`V@aS!<>JQ3W3=iI#`TIAxv zA6dH!z6EZ>LH+j{D}u;aIx{#L-|oJpsarfYk9yZIF2+z4WL(Kl9BT(Rc1xDZ2%pc` z#Gf+GjM>1SIC0x*H;n&S|MRgy)g`Vow19izGjqOdbiaQoK9mPfd{>O^tKmFP)|vQ6 z;jstUuTA2y{{z_x9oPfhkOQj&x8SS77MF9>v#d$F>^O2Q&va~%&Dc35Bd%plHo||@ z2E4UebXMPL-#&qyI)%OK-UnL4-t@kGseOjR-M6hjIMKe%2)82>Y2V(-zLs3=N6vG< z*YA6|U$tk{eiyw`xnOj%yH^gN2dd7sz*DkZug$j|eEKZ?iiW8z%}Mos#a&mLqhMs+ zpD|6kd-8XK+2+`m)Uq+=vQ}bIZvkGSg&!d&sqPD`hitO)5xD2VmtKV3k}~&1x17(n%l=Vi>EXXn*3Y`+sorn0?Xm&NSR<$2&zyRHqAZs( z^(X$!9=2m$gxA73;k4!$;D3u~$0jc^uU4x?j6)#F7|x|U@mxmqQu+Oou)pK;TQvsX zh8c3tD5Qf=i!MdC#~#FH>#xTW9fFR)-7K05z!5Zzm{9<-q_aPESRfj10%qsB1w zf6W4;Fw~FjTe?%<1n#?qzZ|#Tt0VRPP4z~%v!*EC&JU0GJ}@u-{-1f@$k_U^T^(I@ z8FRZ7-@*d?368(+6K&6$8~=8L+Lqip94*q_joNcVOOp8BLp#7{)mZMMHA9x4^9Sfp z!X@eV2i&vLL(nVkuawVJz974=?>X>5w_IbC6o;}okDrTfc@TVZ;V9hK*?iezwFea^ z^0(lpa8`2(%5RroZzKLEeoo(h7vr7ZrhN1{{dRqO65Z0mF7En?PjpUSx~1kC#Mc(s zW7__}5BV(_eDt1l??N&oX7}j5Vnt;0Hyf^IZ~nuD$L^aR?xKaauJKi7hxRaU>|>i{ zACs(^iVQhEW=GG1ZdIWh`1o50Pn*S`?CY|rFT@ruo?Qcc?Y6cT+im@4+n7Nce)M3w zjeUPz8}c{jLM!byCX^g^9Oa)f7wuQknttMylV!u}m><$Uuj0I{L2ePjAcb5blD8#e z`|(q!5UVVB*|E^T#9afO_a9o~0hh;s%i!@U&YV4{{XWLNmqzysiH}6*VBdV6`?6Rc z(Y)m8oZTQk`s}F-SN1Yq*$zZ2MPsb7!R!r_tz|v%7dsYM|JPy*$N%PoSNL8l2nm*v zIl6zv%8$U)_5HzJMn^&$>qRf@{c%BQsJa-sOxwy4Ww&vEK}fK)pUm_B&bPiSd z-jl$D~s`Ao9l`HB9=Zk%Jc|qvVd7LA;$&TAvV_Z-YDxsf^ z&_v=B_O&H#$advYm$${_fLBKRn$BJAJ2xN0-(Ioea%o0*FMHPZYeMfvpVxNJYDZrh zgKv2Pe$I*bJ5Ogl&R{(zu^y9Ik1?Uc-0e0LyT8M^`z;HX9&Aas@+^D9#WRnrBi3*SxL5Si8&=1mONm8#DYGk(Vl2wM|Nh6sr&nMj zGT^>E%E`}O`BVg2}WXvoN{opGw{s?T@@$k z`&;xql2^mAlYLs>?RMWzUF9t3r0<^)w-m7Hq*MMp_ZL48{eP2pihdjq z*^V}PZWt2&SomZuVioQ9eB_9utEyS+MXdSfS^Lj{1Al|B`|1vG!uEA*Z6>oe{resJ z)e&U#!<=E#8vXVrv#oJ5aicR8Tb4Dn?K)(3{ZH(p%3Z9Nb)Q>?f2&tz(yOsw+U?=rGVzH7q*s%x(=MYujbFI~yu>eqdux0@of^6bxZBU0 zriL!yIsT5{1@61=P7V1I-|<`a6Z^Z4sWz>Of5-1L-FMGUwe_|5JATV%Zh!aO)KGe2 zoBY8F)R1r`{*K?8mjx~N>5uy`mnOGxHf-2fmQUN2d0W@#k7?SG;*Wg5-O;Ph=A7E2tkthJofB$; zKjhqQF6&5jbi_gM>KSBW(Hwm%xD3|&?7Jex;|5=@FKIx&yo$R~bk9vAz69mT8myOZ z9lrwdM1=ZP#MmfjllOlATG23z_M+Swt^bk%$~apw;Ms8F05n5$AwS4I13T1KWMpEB ziQk^yP)@ta@7=d^YhB&YW1R2Y%HJMrgzquAUK$_TZP^Rb?M%f954 z)?72^bZudF_E@D^6hD%zq}q@=VJ}L{6(NG9ngK)9u`me&yG(qqmj9G z9OcLuX-{q0W8|I2sN94RVo3k$G4k#I))+T;8{82 zImb$DiS|nbyRN-oun9L~uN`2&_!9i(&DdQB*e{jDYvjxSK7q4rl=-+%sY)_r(X`Ox z?BD&x|BvAj=SDRD$C>~B^WtOMJZf*o&yBD*H@h+{c(i#$KaAthNzZ4F!tu=~#c|{h zjqPiUP57iUa2*d`KUDmt*Uo7WK}OMg#SmzXD)4>SYc$F6eQ1s9kO%DbfX{D&$7_vR zu9 zy}+DzD5eF!;|}oyFZC^K2<_;0h18pd9l9MkH%P9tBfG|S41t43QjN|Q&iHnKSDa%B z-Ap~{ipWZn$V)-4Ut`%uF9$E27|DtE&wBD}^|QN_rwkc!QVuddtO zo_=)rC0-}@K@?lf`w#wob}zodXPX~w{Tgzi6I4h}A&-$mGbGHrP5A|@KV(|f^Y z7+*%@8auyS9Da}TPPqSSgcvNoI}u#f&I8o_>u}c5yTS2Oz!9gea3lj9`S7?n;?&W8 z>?00a=T8UVwelV2vWJcP&J6vUbD6{p*mre*7hA0BBhvcXu{f-!d#3Il@_u0O0gs7m z0q?H+iu@|ZFt(^QdFU#Vaf@G#u1lPI-AVRq8)F|iqjPG!GHCBtr>^Gi^2%Ubj&9{>;~&*`zB)ZlRu_9y!gnvcfsX=$7n@Y3z4&SQjRCB zp%?u^_5TgsOlNTqBNxdYFqL>H;kovc@CCVe*yaOcrrR($xHGy=d+rc&ANHKhvgh0k z-EeI=Ex_ae@Wr09Il-P2mm#p{Y#y=aOtHo*a^zW2U|Ev1{>u}lEi_3xZHJT>?`b?;^V zUB}GdDVO{zU(Pn{T*{B6I67>oJG;R5_59sPPM7cS|0n#ddT@^ItFUZ-?BLJqGq9s4 zO&P4g-l1F`X?4qo?zHo!r8{}`xKrJ@@`~Xa`VPkYs1?LAxw?~VjuyF<1MJ}d`vShO zJ%Ef|VcQ~|KGOJp=MnOmJZ*+{i)YN_Tps&N{6f#2^!r+MbW0~b@*(H~ejL%6xXdJ4 z&;_kE2-3C@phZtJPb=eYV-H)-QehPixI8xA2E%g@2L9c_QX1JNQQn z(GQUabGDPSgZOU6bg#V@eoqX6_jKewWJ>R)R>%uYOosmFKIcFB3^HJD)Hu4Q*vYA( zd=mAZl$897$CX}O%-`H`rF+QJm0!mH9At!B$;|~FDo~ESZ(i2nLw`3WWVhyigwGuM zxZpaoZT|aa_Xf@%Z^Qm$0mo$Jd1&l-GCvoe#7E@qBMzm0lCh$3k}=#^ZVol}8biw8 zpgXE%zw%N?-$cj_;hjky4CXx-n{TgeJ4p*4f~PA6=REqlGbyumZW{04mBNo7VV~2x zT;6RUFO>`H!{F>-?7WP=K?ci@0I&Jj;-+JZ8^Y$4b<->-h8G)DBX%<%a>3jc^MHR^ zYZ^R8XH6pXy(`HY>>=*4oioKLl<&qqSYY&&)?tTie8N~Zfq6InPwYzIcVn|@`+*v< z>uo|8ksk64XPFwwcZ96Bc&n$RI9YZu&T8f%8_E7AKi<3GY^7xGyG?vd{*{}6%R=xR zTOIj7RJI4-FpVSw65q&g-jeDRN|)IjfplKWnf>x+HNLE}+B1LRk!MApB~w6;Z)jAc5L^w!t?YX#>%;T1UBh#j#G z{Usk8=Mrq31+-V6_cG`BrmwyX+h#v8Yh}zmj7_uBY{_1Fn!i+IBgSWk>dL0Mv_8K? zIj}VEr7z>tX}xTU$qjkrhNz={L(Ha$&bs4Uz^a%yo!|2x9f(-Z z?ED{bj^NNO=Z271>@&sc2Yau*emU50g%35HfAF%##)^A~-ef*Yz*)sp?q@GaZweq& zu>ZP}`PQLd&beXHteh2}8InDCiD&wtpL^X^Hf6=iA##i1`zBiXX?!56VXsXtD`Hx&-#JKuMQiQyElk`MCR)RW#XIe9Ms zj{tW=^>~JVDi&i$E_G^7pWa%Y>%>mTw=1|o*Ya=l@ZVz;cfn_*k3K(fIyzap?f*oV zux0IElfzK)&}T3Xi(Ft?>`l=CXd*;t?zeH^GVeIf4%VBtw z$~2Zml&hZVtIQqaW5jT3y*X>Sx9!GrZNFP!WzIF$1Y?rH8vGJ_f$*Z|edHYC)B;IH z=>T}RhqVz5E5;h7_cQW&6=a?+5(xZK5q{qvYNnGR}mvBysxY(tL-`Ir3n;=+#N$eH=RH)ZK~P zE4^p5e(FsFZ=eq?yxYT?RFQL7bjgQ&g`Mz~syELH4Lsw-HQ95xZ)8vZj5&~(WXQYA zuyuOw-+)hKhA(FCXbsb*5!(qL)_S{pTl?1i?c#v=ej*NB6~lp=iR7Afae#LJ8XQnx ziFl9%%oapWi?97-%)zC9&w&4;JNCMNd{#(n?5?-gI!ImlSMB=jyHxN^bgvKC*|5pV ziMMOD7oQ2BmCwr>wLz2~xupgmW-R|#p>L|`3!o66s!D-LA@;9`1 zaRu=4B0~!<$}#z6?$GnTQQmDmVl47*GrQgLA5iZ0^>%E}H?b#0CtMnmNEfc64*98x zmq{X4!b8l&7-A>J5<@YPFZ)0&7sEktYd34t55CGb?I&M=G0(9beP=QBoV|N{lF@pY zoQ^jl|JHF2Q$8|aSxk;CLyqlXt;>*OoAf^>$If7`mFFO1LQ8s>YgJN7aV2*9Wa4W? zyLB$Df%8NI$eq%;28oTCg3d<3T{Le zxF@M~{ZwdZw7#??g8cevK6*d=LVkJq=Y7O)%QxS^_yoTZ-@MoM&1?Sh&9}0jM||^+ z9P9YzId=!l29TXy-#qP9N2|OgAEvTa?B62R#-+paGO&RV3mHi_IzfK}@>?g5+_N&Bdse;`yJy92gL_u&HWKbx;Xa{d58@mAj>kWI zGkLVwO9>Z%ciV{7ECR+^lq)_?Wm>-+v%uDo7NR4m zuHq(K9jS%yg^OOkvsg%&di*red4LFH+1ncax(- zy1+l4g^oU1{)wzs?MLh0(xLXR`yW&LWp&;XA3WLBpZbV_aCN8xbkkIHQ(_kP5Z8E& z9;LZmJ=R}}yj_?Ie05)jWTLC<3QFGfObpv{&`YygpRK#MyAQo-SNG#f^@#^*jd-CJ7`9t#H zDHct1<{Zb4Z&I2fY&70#pCOHtSokFa}V0<>(pIN--o~>Vh%c=q<{3q zO#Rk+9bM(z)o}1S{8URWgBM;(+#oUS*56%QJdaW}udHYcRBo|0cvh>`kVyuE*XRMnmTe{Tk4CgF#W z-vLX2iuvJh2oS9@0b3JdYsL86ElGM7i{sL5jbay8N_iGeIp}Pd#Zj({AR6#S^ z{Sc(v4bpBEDs64|V*=Pth(DkT$pAXv=j+^ilOaNI_p`fy%wuNmJ@?#m-sgSZzu)ge z44%>LCGXPC;N2ZOXP$uuG=G}d5@Q@O)sIm8exhGK+%)ICiTyG5KSzepeffEik2o(V zzyIFW!S^1W)PJu{_lV6GeLCU!kEisv`LWuNW6(mI;81%fX7I;p`xf|f9eXF%kGszG9||w# zD)!rEUMJ>y5VIGJ;ZOBqzYETU_p-JIFJ?_``cS#l;65^Mq#YjnF1bSedGNr_^SwRA z`BW2cb?kh?2XLw6u%R`Xk?&H6U9r42?QboGKkTui`u{_ItF2_o!`%BK-{|o3{q^

    tfoHr!yf38#;81%*T3nkop^-SF3aev+5NHL#2FowUqd|5tfPzL zi@9Ek&!hl(%Hvz7TdRU39+yR*FVSZKz7E01>w~dxj{S`j3;y}`*MA*Pdf8vjzH|C; z@Z>AdjW4smu7GaLg+4<&wmY;VG1tf53ve%$HfhB9k0j5^*Ho^(%^dV;Suvqcc+)Xl zctegDxTCdhnJZb-ihm^=S&O(R_Qx*K*f6+xH+z3Na1WV&&T8`F@c*ahKR{pl=g;_W z?Sr-*M81pbBmc(2fK~O$(yN$rC3Bw#Tq@WtSZ1pt_zCr(K1p0k z9Q#shvFZ&y!@QMC`BUtB^67-IA#`7gJ+h{77B$wRG4L_gOHQ_R=1jG}>xT}$8o7w} zdyYVtfe-r0X61ZX@NBEoW@bOQU&f^^wtVuaI>c|hVo%kuIkRRi%M>^|4J~(Fz zE$(D3ob||v+^F?H_c7~1KDSv9#iM9FUUt`m_Gzq#@K@{cG41cBZl7qr%R6>?Ic_h{ z0IwPA;Pt@%a?q2p%srQW+{5(&8T#|>;TFRqowmy7sOn9YFP-aKSc7|6gX4F-!rryP z)z9YqiI)2>B$it82Ym*9M{J{IZK=k`VExXDU&36LrJ{3R?9?B9pZp?2@31f44UH9! z-OER@6QYkf_=~Hs2`}Ndu>-Sjq)$jDm#=v#Ic)2$FKfL{v<>-P`?~=hNO)Qe4J>#4 z#T~}S;qZFlp8UmrpB49GI|l#X^kdiQFfef19On6x<JUkA3!vN+FZvUkRtGnZC(E`#@+GoSz5yOg7&clncGc=zR;?*Qzm5l!9+aq;NX z*hx#v`7S_LYx!?}|L=Hzf!X`c*sI}{J`eL* z&ZquMgL5d4-cg2p|8sM0^iVk2Ol+I*(((u6?bJipJL~y2`vkr%Uf{`x0Oa*#{_ul{rl`D*=+Uc9KCvI zJaF0w9_{Q+!PV$k*ev|)QPH@!;pvKXS%$ChBYYlZ)GR57SLk=_Kmxq>N0d9)0X~Po z>oDJ{5joUe8GH`6q1pMtXb8PsH27rl(i7~9X2v;~4tcaXnI45{I~4DC=&Z9(Hq+#k(LEY?jBl9aKbl?nwcj@;G_D$Yj zIDFo1e~sFQk+d(~@a$pGr8iEZ@4hhtAypzn&04eVLx`rUnr64hz= z7#Khkv!$yYzsrWNr@+@goBu30W&p=B_`2#juT2R?%f~opI>oRT-jQMQgr^^&zrDbH z2H%~0FVI=z=v!fU^kHfPe;)60qTJa*rfQ`${t)BJMezTb4dVUwWe(rX1QPgfFH2-dFT_0mZ?_(@6 z-W5jf%V3-_#t3HLES;j8p~eG7Jj_cwBFe=Q1g&z05Dosw!%ID3=#4!OVm z?iz|ecyg+rarl9|mk*A86klXUgj^760M+lh8@i``G&tX0I{5Lsu-R0P? zV_(aeHen!^qqBMUJ4a z9p!z!;8hN^W&-nk*0Q3R{$P}|5#nL+d>?y3d!&oDdy)4AgJZO>X1?0%D;a}yFWKW+ zMK5AheOA=(1E+|k6rc3h zjVs(se<{yW_nT*}tF3q!uzH>LW*(fcD7#t!ztWCc=S(O0G))}ZkLZgW5o|Qk1L?$- zB2(5OBUS*9dE{`&za?K)&s5#FqR_`Tb$vE*Gv@)DU(BnWwSEgQ1Qze-1*7s`tzS&O zJnu_;&We7-x`oO6)>+>1JHfJuyV8`m#dB9W5ZJd>vGNu#ZfphqMg!H z2K>8;flQ_CJhyEnZI|IQ>~!1ey4O}QfEy<33@gqGBfjjNB1gYyf7ssG{;;*NJ*ECK z#stsh%wyyx)mD8MI{imv+YwxQy(6*a_cN^MG4}brw5#S!59t}=CDJp>s6C|`271S- z`cCc_Sqwa@pTC)Yh0`7MeE{4U>iIY@OYUQ;+sCu?!J3xnSf1kwwP9bS7`wIXSfWiC z;B_|ZnjQfLYrH;nHfR>_I@$B@0IO8!ayfX9thlH#&N+tcZRMZ|_aEV1E#Mh@I*!96 z{#*cgx^U#W0Otm_-ek8{To;VCo^3@(UxwUIy#n=7Y{pzaUwZ7zJb!FYS+x7%5l!!( zlhXPDXD6SjxwAHHlh8R>8~Mx2uc3x3HrhtU`W$0A@M^GC{q?+D)~c}x7uRnu=&419 z+X3$_UHm{_;S^#Z;D^M3l_G1DT=Jt}>jGb(=Xu)5Mr+YdbqV1Q^8=4qWBm<$M*W`H z%bYai!MdE?;kn8Y_iAi8jkL82D-xtY^EpLXN~?<W?#zr*|U5FGJ^OB)|PIFl@U%7`>lb@46p?H;V^7N8JCKJf~hTaaPe% z?tMf)K_7WxN02j&{{Y>f8=Ms{Q5_$R10Hs$o^ceRV@SR&8YP_|qh}Iy@i4L6MU#Tj z=b#6wDOJaMi!X`Jws5U*j5U@sP!<*b0Z}jM~AqobeN(qp8Go zXsiYIec{>#)2v0g7d@TVqP?ZPz#dFPju5|HKn&eN;8?}@N@=?RUXqxLEgCuXnW@3( zK6v;3DKFXNF6Vi8X`Jrn$6?i!%FbOMzXFKlOB@X>&nI7@2s{9_mR#@E%N2fh4ZV!C80twAc!rlL;- z0`=zH(dXcs!r2PW4v_AlTnlhyEYCG9ume4>fh#8eg4&;)@iFtN!|%+ZChzo>3v-t^dB(-k& z)C=onO(he`f4rFbTF?TM1LR%%C$1f(?X2zjjeEfj@hioJp+~KrXyw)MU{$H^?URh_ z+&Sso=ezfr$iuD7Ckb~^oNF50hI%yY1firjzv>nV|P=u!v%Kj|gnSq1zz zJc+fq4LPX%>)0i*V;R1Ij4AzmUc0Rtc=2Ljf^6C3$S46rN2F7yvvv!?dCB%V_qz)| zwGbK1`_DO9YeL-j?~v~XzXtd88$Y#)_X@pkl?Ld8cX2L*zfQ6Ax~AvlwcVHaI_ixtc71&>xhRud`^=<6*4cpjRTz^^T!~A}j z-{;p~w)fdH3V~z13t!{DY2` zJ$yk^HS|MqeNXaVa=f$096hTPooTi& zcF?=V8=5inyPP(^=UuNtQ&#h?u%S23^{wM9#*@PyxPdjip0&J=HLYT8uVoL+CkE*Z zacbZU%8k)d_Ok#W5^J%rdpfDhjh+y`{mS|PR(o_wmcZs z`Q!g&;)k7F3)QIqGc3fA-#WrHIw_a`? z3W8rPG@-sT59wt$fny=o)L(XG)C%aFu>XFXI_j>o>`2O`O`hlH z$1TSuG&C+dZF0daimxW&mUCV36TG4>ehHQ@0OwM0fpegv(i4vTrmR);?vLc_a-JUN zDsv4S_&+8m*oxf4J^A1TC$*DpU-#>IpMj$*=d>8UGxV5S44rY>{EmL2zfNr4;`)lz zXY&1j(0F`4_{tg3o)OR>KeQ+SO(IreDRDK#GI%ogv(QHIm+a6d8+cCz^<`Hg zBc>4_|LqiiVJ{hefd5`J z?HD%vZ;mE+g>S*+DA&UHk;7B0lIhf3c!GD7IC9{oLH-W|qrvdG57?c=|FP-+)&HS2 z#OEDfpK3*QHje&3!T;~`e+>W48lC8$`JWqK?q~fo8qfRegJ7}MbOUyrW?~jQZ?RiN zueOqV+lwAN3K^{HcJXy;mF|E?zn0(FSBy-1fsjii8Y%S0B@@y}#XpV)^&$gG9A*0{i-iL+wBt%NyIU#4mQTpL?1vcd(ysB5#C|0c4obRY1q zq?fiwpnEz$F<#8Pkta0X6m&Chyk{|9$MqP#P1t`LF&X4VUQ~umfPoR z@GY-T{}6qSqff1;){=Zcb9S-DBpt(hz7IRosbF{n-~JKgQS8o}XA)Nx1D?W(Tsy1s zRpe#uQ*R%O_R7C4yLf;)rcba3lYGDZy!>9Sdo@lxT=I0Uq4sBop=WOW59nDhcvT=f z1w6Y0x+Z^<@c$_9*FA4sq9f(#v6J2VXY;N5;uCtWo-u8pxu0ju!u|j3cwc6`szLGx z#u@fG`$v7Og?2m*?GP;$&76mB{`lq6Z6p&`LVxE$hby4R<oR9VuEDo$&UZ4po%4>r=Uk^4@(ndM7s=irKaXU5 zjp5&j?>4?J*@!q_-NHsBKa=OLXI@6;ooLxTw-HmH}WaF+5?VjbtEP*3^{Y-Pi-**gBRUi4x4%Z||3R{D9z zvZ8-Ia=>QO%{qOA?|VEvI+QZL(fYF0^fPQa`N({oE9}+;e8ljOebV`fCjrN95DkV_ z9EV2B{)R2W;UQf6I1O1CT0ihiZshkoW9T6Evya_pM5lxoIx~fL7@s-M9a5g&d+h0M z-^fT$N=~GXxU9qAxpegFeCdtTeB&GC3zDtL&^n%f4?M&6JAZIL-O#9y>E}3f`aSyk z1-WqReHlIP!IM_Olip!&tA?+-`SoGej21qtu#xDRljojRgk1mKg0b+B^ah8AK#xz$ zL*RRgqwNB(bw&$3ZgoDnUA^$5L`r7QZTSDX3@o!FPXHIgQ-PcKo!$+Pd^;EZ@J;5Y z|L>!#tw(2n??>zNp0m@6;*8)DGQ z`I|4>s|#2I@%IJ3^q#%!S!X_Zk%i3XM)5n=BzZm~?Tp4aYY}8l&UhV|e%|rMkQKV2 z!_IiKhZt{m(s;Ac(Z)xfJ7K(;J(IE|;;`QP5pgfjZQ1l@qd$BE&!yf;yucn= ziA@6jAiG%w`@Ed}ekJ??gX9t;W{2+{yD!-=R5WE5ZUqMBPiu_BcDrv)p*YGETHzJ?07-wYY0DPD*sbe%h}pA?sei* z)A*i^tzGrdZv+2|Mzoh!aK_R~=(6O#qO|tXN}U6CR_?R|(Br}qu8r}ojhiMKU3d-G z(!FbG(;^nv?&KQ&8**{SRRo4jD?Eq#G`xEy=l3mOJj>Y^BY9UNeXrtOb-ZgN?|Ov) z&+)GJ=(mn{jpSXSl6N`R(xyGnyXtt?NZv)R<+w)PwR4K<^rY3b!^5`2 z|A;Y~E`CA19%6A)Bd?RYTnr7U9B!3L&h@jGCF>TrvhLf&@$R9`jx1;dwrIaqGUb)MV~e1<(zrljlAfLH}IbxFLN22&p0dk=lq}VLvvRBS3h%} z#9ZUdPks~4RllL1;|iE-Ds#ndZ*-CZ=K8P9gK^JSjjfqHpTnnXiuhu7WHP>sxb!1% z-?^3(Ig4we4~bOkP#rZh4{#5d9!lf4<}aF-NJ;JKd12++ZyVY@GBT2N`vvPVauDtA z`18bBp@3>RrS@!NoJGJ^>w|9(U(mtFZWV6xyO`_CxPF^^{qMN`x;<;Ac;?sno#x(u zjXqL&?ytG_9QTzAd@sL?$;sDm#TCp0XNyO)mwsFO1)MET>6=-}z00{Ld_I?Z9zLJT zy{owQm+n2`{@{Ces84Xdn0?^%InMN1$8&{xj(g|!?~!rS)aSRkr*WITa*})V)hBzV zn0@5*nP&QI*+vHZnw?I zL2YtqGmkdVvp0M3WhPR__t?Y{FChMK+kr&YKVdVfMuzwEyyW|Lz|oh)qtH{seEazh z@%{fApKt_QlVsKj(D61LUMiyc4&~q^ba2%N2@ z%{=Z27yQ88qwS%y#+iGy+%vv*;9lg?_|REt=H5!~nRr29TIACDa&RHS_0YN2^in&u zF#sOShTdyz2au&I8C#8LJnt1QXiTDo`WCS6Q0(%c-jCjy3qz#9|%59tW;d_O&W`?$zPZc->BmpPcwFK*axi;ZHH%! zy9$~o9@2;$hzwMs-#aE*(@&V&CkewlljqXNd@J2|{0TZacs{yc=iXQB#^5;>k9P1} zWBd*G_pc%65+BG>WTzHlx%6Gg^A*Uo_~VLnjxBWhV*MX1=awVqb|HI9ZvE-c5^GAK z!SdZY*K#5+b4_$P#jP25o9d7UkLpz<~h*_J*)fY>sj_;u}go$+K1c|-s;(l^ep!ax$itX&OEF8*fui! z?9*a*pN83|J9)OzeO5jg-7n<6^K9C*R`63x`vNj39{og)@!;wWnoXZ%#5t1T+nwmwhvzmYv#L$1dT zbn+VVhp3QK~~3S?c;E$Jxr*p6x+3q~W@8EWSfA4Ho9+7x12HEqECYUoStE5YbW zbeGz14YUcM%b7O3+vqxbiEV-=g_aP%Mn8V~i9sjTMlcERUBmw{XM@*HomZ%sgMy!| zzd1I-GO@LloTn^5U@9?cGiWc`ckgYsIj2DIq@GXHo@cD4e8v%)Umx8{Zc!~`>mYu@ zk8Mb2+a=&Fw-Jl6k2CJ}uMoW@E&^R(cW+{i^=YDHA9Qp-_H*ZYIyypT>R3EZsbbT}j{X;b(d+6t#CCmP7^(M@^ zsz2%9e>ekvhD|PqIy|z~5o_`0f)UoCUs7XLJeBywHy8M_dgdv12c6v_K2bGpGO5qB z;o${+)xOz#sy|K4Y@WQVwIyYCYp?1sPqq%(v{yYP!Co+b)a ztY{niqg4*c10$e?wVo$Lqn;4r)j__Aae|dSoYYJ*w+aj!moOHF93JTcwJ5ydK={ zAZ9Pb-u(^tXX39cH}e~)AAo)3U_JJcdiJNe=lXN6DeK2;e`X9FJg`B zUuePJB3OFY_km~2FgCo4483)g)wZmDVp}2phY)c;-Pp0pIp-y@%r5PKj)@*^KnC0f zt$OV?_Ad6x{n(9f!^fpqg%0M#{xCH^8C&VO)W*N=7GU&q6W@e?LGfSG`_m&21EXY^ zJtUX`tC;9h3b9s>u0CJ-iD0?I^d0Dl5qH#$T~l(DpZGP6X%aF;a^J|HYt%;wJn5iM zKk-27yOlnW{o-1WyR{yypZd|dXW(bl_|*p5-S2~JJtLy5=i5EL#WA_TX zsi+Ko3|-e;I(@@83YNxaJDVEd3%U0kzGcOR5hHdKe36f*TzGrJ`6*5e!u`NSa&M3} zMy{qW{m&kQPfE0j>t+lZ$BHksiQkmMLwcXFnrHl(YWbZQhwDSxOeuuadGf!Z(1AYhXi0&Z%u5iliR>?ElYVYgYKE)vuTnB)8&ur)uZDsrQ z^U2@&V7O@Hg#IxWKA1MX z6&)?te(;4Iz-+diS+@|{mkhH>%w6x+7(Ccj&}TsaTmyy$xmHxQ01JFpT=Ve8ZO(Xt z=QiA2xNZ`>wF{mncpk;iQpNKtz`yT8fnq2cp8>P`Ju;FHh10!i?(jnDez@EMT=pAhg74tR4GjO63iHLcHo7n~Fak@J3{ zr1wZ-`nSMU{r@K4T3@|;J$Tjyt`>k}hxuQgiO#uvecS!R@gtAMk389G`e}feIBFh< z*J_`(WceFydx1IkQu5B%X4|W0*G=y;d-Gle)oCfF^eWv*9m_wDJS#I1;&D)9T(CmX=+@rbY^64tB51d=$(6t(_4HaJ= zHhkKR)uL@Kaggyni7h`xH*)B^BUfx8=TbCXJW~9l139|}KG(pv_+x~RY`q@7i?@m9 zAirSyw-#-C;R)o_+=yf_@ot9~kB=0Cx55|EU5|H&t_j}am(T@scEwR-y_sCoyL4SN z-_)gq#{g?XvxdP7n_o;+ZARwTygI^JHAbh=*w@+f{y$r{szGrt5rUT&*D138MirpUXyRC~u_ z?{?C*{Y>Z%IU!--P(WSN9{{Jd=LF-|fv?JiRSd=@Up&4h?ACza3I53!&l(Z8YZ?E! z$>ZE!&~pIaa07dykouc7;JkSrJ)sMoqlp@CT|BpLaxi)WeamkiV}ARdmENUv^ZId$ zG3gd9#{R?jrfYw8GPbqIpDnC`+NsS^o}W!F>Nd_YFk@$IedtmX8ABR*L|+xIFt!-$ zCz)&~`|v2Xnphrv$c_fBP(S30n0Lg~x8BJ$^~)ZtnoS=XhxlMFXL1q$X!3IzH}t}> z#qDLU@1u_3{@cl$C5P4M;wLOSGxc=( zylQNox<-_f^CiFU3~KVs#3qA(YReJ$)l6u~Q>pdQIA;gElakx>3~SvrMX=6_1h{C}^V^ds8ojtOsQ9KF1D!$OlF!X1(o!c{qaUAd!MPiI=9_Q5*+riT3&@T#UM-G>% z@2^~v2J(lN@$Qq=U-9Z>o-WSkOC#%}eqw8}TWl)CenHH}rg_*eM8~VBW&8kVvF?4` zYTbveq6FBrK$rZb&?w?*ltc44dVd!*WCPbrgW&2u_Tp~AFgtQFc4XmeIBm`n^yDgP zBbCemUb6A(djn_K6wIPe;99`56PbG%bJw%bAyboV5`D-z+Y zO%=!^(i0!yy*HzqT;@Z*q3)z&WmLCV^16TN#A~tNnzNQfr$hrU^%HYT4Sn?={LpSa zX4>XP6r&@$7o;yIKPD#pY8JVqYh3%$z&X z13VT$D`j&krmr6GSO19-tV;EzRqjbiO%sfE0w29kcI1fc$j1{i5?GXrzJWi&?{Ig*)R~a|i@gvZ zO&_vREwik+bPoNF0bgT7KKUXr66)jK{z1W7w9V+hb$3R&+Bo?IrPI=)2^LdSruoY=ZT3=r<|GvmJaE zzq-Z#WK9X2$uioNXo<+#UZl8o%O4^BJ4&&z|hm zJ<2Ce#OzOOr+(6GOt; zW~^DkDBw1h&qei7#rDK#qxceHezt(u8In)^S;+6$nL-)X^jc)L@=3_&*e|co491^y z?3ZtN@ndoPfi?IX$gSwFNn_U6)s1fC`rvw=A+7%qHcUVJR6JTTiRyXEf44_-L*`(9 z{r7ZTXIL!AB*yR}E4pBk6)nHUng0Q7+0UI1e?TVAq7C|_&I_1-^ESH)`_i}qa3&ev z%LUs*i4)-c0N2EqI+0Vp4}K)KzlVF0&y&~ZuejEcVksVUQ71OO`*_9~uVcH7LBDhD zoI2}lt4g`Ty~u|LpeN#g<=50lZ+_OX(btm8a0@WF1=%emUO=6V9J@Zc!6wK4VyCXt zyXe`?7g?M87=zka*mmUKP5l@2DgFm&pNe0f*n^#Z?%Bj3D1Kb_mcN27W+TJ(-k#FB zEoDMwAH2VlXZNo_zP{a}Zk(y1F@HV&8FC(xHP34DYQZeXPvy(o_y-al+K*N zjW>qUgA2@B_uIDL(0R+hp_Z)a*R>b^7&wN&%LZtf_%AfR%HSpV*aBWufS;1*kNU!E z>(y2|Cww{inQiD(A#mA$5%{6?!KOThwnw4s51iFEv-~pT(g}Stvp9Qr$0T?KeaEOt zI+{Ikgf?bwz~N=^zrSuLcpqYZNj8Buytv5|@&5C{!om9!VIllL$UXrcezOOhcDk=U zsrs57LyX7h5#*3*zk7S@bZZlXpLlIGPo2-E_dzH6$CJCk#$PkgPWS!b&sTt(_FXS@ zM|xil^yZL7yg2#2G48jZcZXd1)x~-areE@1R`VR+o0HdZIedLz544d!)?+Kt_uun< zJ>%Pho+LWt!Cq^&gwM_BNwRA=aLY7wWf?N+V2idIc>oyr>+9|vZh~mzdy^iq01njU>uJXZX`XfMbQSD@d+FD!e|YNgIyMfCVJKeYjMr)V zHtX~XFo^a0)12!XlVoO%sh1isPx}0o(9KPvo708!oI!U3do;uzZE^Off$3m)g2Vke zP@b>ubnxsjd$gZs^q*I6<_$c@vp+*gG&aUqwMVNNZwbHen_Si^d0;SJVL02o1)JMn z(5@SN$sZn!3a66s>0ay=z3d%qj)#U}dm&F#=PqLF$d1UDQ3gH<7Y~Bd1>}w7PLkf3 z8<`=TrY5v_mvW@7Qsi`aP@Hki0=I>$GZ^cmoOY&){X{%=s366g7H+emi;aCoRSo01t(g5%KAKh14 zzwAF4*~HX<8N9c2|F^*G)HP+j8XPIee$H7Herztp+JLjvfC@yT`Jl+#cH}pIYQ`fF>rhbXR77f+b**L^_OKsAJK6S_3#|_P5Q_(edw7<;N29S ztHytz|Jqy7{?+K2rk|__Q(C3VUT^ok><1qeqi7SOsJ5B3YsN06_hmwl)lU4j9^BP6 z{18SS11GCODTCvzu0Y?Ki@r4neQV$xkHNKAJRMlERGX>E*#P}0IL{jUI+;C^@{y6Tx$G_@T$eV8R4 z9F^Z$&q`n3b9CA6ZLf(&W<>rO+fqGe-RRk@q-O%sC3%0vw!+2(=!uoYwia{F*OpJ6 z{EY?VZn-tSTT5< zU^tQeLv26!P)zU`{QAJkL;Of zK65?USySFQQ(8ya&9x>&oyn-$3#w`4ohu|?P!~K^@Y#1eu%e&)+nm}vz0j$8>==?U zy0N=BdBsDYccr$s<__fahR&Dm5t)X$+Q3Hl%Q!C-b!5bKTe@>u91x zu_8-S?D*o;6yw_qjZTRk1#eVqP5w>Q)w?;}YHFiKb(r5Z_#mZ2a;|w*Xfm=w%>%RW zJ(jGaPM5|fJ8b*KZp}O1CHVxrrJiJ7E*X2L_(C*gSP+KAR-&$MH zrW(F#^O!q-i`W9yf(sQP%R2r|V-E_m{yJX^e3-tMHQF~tdp|w0kUZ^C?po!4lqmTK z{MYs4)UDQcg#NvC)ql}=oA#nZg7+%!YwpL*Fz8Pwv8N@8F_4my?T+EYgXh2?|EVdG*8iSc-J)z zJQwRrY)PJ=))?tBhc)BzOF=so=;<#3}4GaLeqoswVlwK9OxWzr7r&DMy5`8Vjyf}-q;-8 zJ)(Yo{*=OXF~%17YT5m%)??(jrPf;H{(XAv_?j}t(E?4@7&Wf6)RptoQX}83J^S^w zwU#xrnsG@EU&%Z5ocOKif_TymT(7ZnX3nFH>67(UoX-yCuNnw5=wI(u`>SYc*}+fz z-~ZENwtdGxSosUTFr4CGK}ycd3i{PNn;EO0`rILEx=f-^;n{Z9 z#7}Nm;QPIgO>+ASSoi;fe_O-a&h6{-F4X(16W{kk1FwU-HuJ1)S;Rk^xSqw5r!Cfr zxjFpZwGVr1n8LjZ;2vWQ1FT^KXR){POrh-K{Aayqhn}7HeFvtN0 zONFy@Pkjzt0q<6wYEK55ej)gJ99ah%c!Y72OG2#k$>peUYDOa#jNSXtFPpJP2=80K zQQ3aU^CZ`-ewSp9UoNR_YkaK`AJM4DBghJOQq$xSat0+=u6JdHRmch7Mn=H**tCEc z+J)$CGvQm3_p<57*&msa<=_IeaMvGSLI=YhESp4mQZ8`?x&gA-qe-$@e;zS9)}sTp zclu?qM^CSN56EJx(HRGHZ|C~Uz*sup7I=y1m}tvaIR7q)yxTs9bp&UUYgs5ZQ~0YG zXXM*{|AcTS3I87T{1e0a5|4iWjU4E5R-}x+Rnt$g-l}^VfluiAlhnP|cNVxKm^^0I zUHqC_H+Kv}{vD1Sd;+>h0}rFi z8SmOO?8F~Fu-h7*xAQM$S3tHr#`_c>AspW3uFpeSpH%27GM4B2v0a$dp9ChrY}X%- zIxs;d?T1PD6fjYrH!){Z-vjyFsX^!XnBKp@kpaB-j;9u*a7E)RAeYL2=pE_@^v%S{ z7MD!0euQ;VBfNMS{@hBw!DC%l&4>9hUtW=PBl+B{ZPObi@6Crc%MWb)a*Ipb6wfbR zMD=SPhAw81x=NmushRpQGNI&vvfhVwt3G)uzxB@9_=;8Q>HzJlD@)1WDlIDa`P2Ll zKD65&Yc>60y5fsCXLdYeCoe-X&0svg8+@)G(8v4n{5q}=#B4k9FCnfCh3756S>uzx zV;y~}M%_TnwsU>4p#?+dJ%oJ3Z&QmwvXXUaaEa;w$6gF8);KEK;3rQOny@Q`JXD0t zQp|oISyS8ger;{rzw>$C9+|ev9$oj|v{iW{Yl_+;@K4!5b&hr;G~wQ~yhgKL;xY7N zbaB?`&ZRYNJ6|jK42_Y@JebBncc@#RYG_P$GL3O@xXZ=iUv4q^3;0MsKkU)>9`$Mn zdGI_P?6vQ`wjS&U^gRdm)U}OnU{5=>AfX@Nko1{NX8&ipbiv61(fORB4bK|CV`k+4 zqgJ~1<{04;{ph#oNRN3|HRDgcrXMDbokr$ye^G>;4S)zD@3x{%d|; zfELdn_D1rpWa01!=n&L7R();lZBK{8Pdx5Bz>e6uu@hI@i;no}^GX$eg{{AvHCKPl zc@ACIyVv|V7*|};;k{+87Bs|_SNiwAbSd>cHH>VLe80aoQf6c>V_W}c3z|jD3o&Tl zObsq+!8U-^BX1~qLt}YRW5M?;KBL%*#P-4Uo^-YjF-y!>ajdn{trgrSd^rdrr!_ex`ZO9Ry_!dp#Ug%r0=aLTsjybrM-p^9}Vt#RN-+DFq|Ia3B?(j_TD(qjkKs&D@zW)sCB4o3wXZG1|YFu56 zU-Hm1z(G7t?XM^Qg}jMfG4LP@`UVe+<^~foVN;OFF*wrF9#M{EeN1_bs;fp1$L2t^lI-58nIL?9sRBL$Z-%^Dr>?7o2);s(Hs=-y9@ z#^Y1Zj%2yxv!PG=Z`0qWF3r&YN8NE9BmTO*l-Rb*twndjLk$iYpL`xNWoG0m;s-Q- z;o0}oZ#k;Gr{FBBM08HFi~4#nsjupp&b{RJN0!-znwRDwKey)R&s?9^vLd&w1-y+- z!!88Q>)r4$#o)~k!XxzF&gl*w3ZBQ2&!jI^L&Lhx!SBPnZ<}VXz6ZaH_xxSRVrF0G z6VGsEF#g`-oX>G}F#h4Q_0jjX`dW{1=K0<6V{3v_IX5K0c?h2zGi#PV)!K~T)$GM; zpS`i#XKlRq_2tnT+UB3FJ)afXNZV>+x7xp`Sd_A82w&|p#DQwuW$ym@*^AgbF0@Ks zA`ei{Z06iB!zT=$IJ&^Q=ylaAoO7Aa2X@sLSS9amo!eTAKeqwAC~qxW62~@E%QK4Q zmafS6F2zuw4_$+-QdfA<$~@^ysWtb^YOK3wmTK|~pOlM4&Wt(BM0Ne2wlgbdBggJM z3wWGk89#Ufd%63rl-B!*G1U22Mf`8D$E1CU{#N-iD=!ULWAEhK)G=!hSiu6$goy>*qVzY)9V-X9r}&9~b(CgRrd89STjRFfghbu_% z?l>`c#~9-S&(3Z2+gXhv@Fp~^KKc&%U3Wr@|Il}A4fU46nF;XStVkz#Q;$FVIQT65 zxfi_AyJXu+s$_Ib*t?})(7T)4Q%ndlyu>j(Ee%ww$1oo)V5{G#A`$33{>NR2yis9hVDEM~u^M>c^k(%%$|Fxhwg(YcIM zeFVvk$L1exq0U7Ao_FQhe|y2@nfSq8X5Zfn54z6qIEU_DiT;^S{BXzh4v!nmCoS^i zCiNa)^ECVXWn?b)eMT?%Hk$AICJ`&E|BT@n^9}HOUADDF_y}(_d`A3c8F-~6i`Axh?hicSw-D~qAI^v7yh~a*}l=JNOShN4l_f?}`f1UgWzv3E(oSUOZ z4Lvuf&8x2d`;_KJ|DJBv3D0_Pqw>eu{6ctJahA0%HCMq?cw#YOv!7PR-r;K)Ugz1M>p(oBJ8FpS>AE z4!8~6KE^)39UkV;`<%%0iv8d@i*--t38K}P0Ovc_&20_Q9@*M`WHIG0GQd0hkqOwpbRJka@<2E1 z>+-%gJw7Ae*8qLI1plbM^mtn* zJLA>2H{Jt`*Z6rE>mGQ<0z2iR3zuS>-h_5kcqt)?SH1J=c@wd^R1B(gDIWW&}<+|!K zp6a|;`6azGR^$iTfFDD6Q1ug+mb<>llhp*HU$dt}pN?rF7v@m*Paae`AB-<~zR`u-R&+0belmVMY^8WPn*%#?k_KdEn!56~x znQYTwPn-Sth}Un@{u`>_RQ8_aRGT>8J)f364s0Kr#rSUmkM-U%ey=aaen1|8-=dbm zHe$!mMwVy)8@n6wSrNDvsHvG%%suh`WrfzF+rf$Q2ZN7^7Wjd$coqDkDG&UyEw4h)w3<# zo8sK-a_{}Zy_b(qQhjTUuVy{ObMv8>gV(qo_~<;*Le@h$(R$`oI8~f=JUiVQ&~d%> z0#7#kd*+%PMd<;it~vg?wY=M@Rh<=C%N!*Sm*FeZeT{bt z+wEICBIfpOgOhpK*G|>9`noo$?=t=$p%!;L{__6517!n!Z?l`;^!hHP?||LkH@O-8 zuzLx*r?J0@Zfy8OSEAoeB)I$s?~uJ<@EVH8X${+WhacGJS@pA3{Xl0*d9Q4x#$IRgSbk4#FusvUHGLsuOwaf_ zdN}v*`bW_x(e;eT#t$5P@;_Qu+H#3qI@Ei+sokyj*SIk9#&REH>BR1K>SrZ?o!loW z9x(K|-%gB*{9LkM&cbhgKRg{;GT$$~105j^yGR-_ozR~}&$;wY`u4nw8uO$lr9tyn zaVG3Cdt{w-aPjj6#B-EE+e8QNO9@m;*R6ye<-)^@k*N+KJKPMdEApkM-Ab&ea-TiD zG+9gZ&lP zs*ydhFK2`phc(G=x(^#iC$>}z*~RP&bMBo@Xp3de;_}b3qW*kj-+U|nTkyf}lkSSm z#wXf{p3OS%W8Hp;ttepb;TI?0)lZvj`VGM2yV2ca=nsDQcPx)@YLUdwx1tlVF`7Na z{Vqdm2l{K0?Fl@8ndjy(-g?G+6=SuSUvr#&&HD5}vs#EN@FN5G(RB|1$H981;vfW5 z>G+<`Y1(fqrTu5m);Lvri}uS?@;F~EJMy#h9i7*IDXZfjv1sp_oW57{$C^FMoL*}ME)XKYL zYfdlz9A~Kd>^DD?+eeH9x)A<&J7VaGt7qi?7+V#(glNeV#Cmx2WF36I{v`CI9o!a= zxc8&uYa|P6OlR{gUJ=%QfnN;Tqy0H`I`h}t&nxJ^n*Kv`PLy51QP&@n5%~u15Y5U+ zl3z~MxB7jXv#<1hbH?#C$$51NpChZCE>`Vh-w5{q8OZd`*|B}t>Epd}3X9vD-n;J4hzm@*@;F(%>jG1|`(J}+{|)_v-+seirq4f?N#Pi|&h zE$N)M!`?N#^0r|o@X9l%oSaww<1+)ia_@Udyz-S{gL!5DUede2;Ntr~q&q$bZ#>U4 z9_BWfS0+7s`ZK|g-tj6n3>#ZU3N{V$gO?5?KE!U~tnJO|e)2R@$SHv~mypM_h5RP$ zN^i{MqgWc`V5cSo`AveU-*)!B>_{I$n{P&cSOTrNdor<1ld0K*&Gh@^`~Y}f0s9(?%u>H=HuANhMtepW;gRmC+AA@c@8;tu)K5hj(>IHqzCz4Mf2rn z{26-jW@I$aUs?w4N~U}Y`&B#m>-kH=oNXo;`oSxU>t6eXZu?cV7oGFkKj5}Mj{b=b!N0Hut%2 zy3cv?ag}*4J@RXw`;4#FH+1~6&b^n8_!{^kzpZzUc+MBey9Wmo*q95jS?_~CI6n3i z`L9eZ8>1sAFM|8TpsNO$@%imUCMZBY=;XS51H#pO=A!lm$TPaGYl_#GeFOVK6#kl_ zGkh<>e$vIev?lwmB@byXaqQC^87xSx%X;>W`cZ6w>C5dOx=jpoPFje*66EUl`qt#h z&UUgG@8fsP;oK&tW~utwi_Lq1l~b4V^22#E`9J5A#LWGSn-b0OHSF6=cqN) za+DevZVax`0l>Fr<}bh91Zs-OhONH*_Jl^YQy-pu^G(-g^MhxtrW=T#Zov*|&T%Au zY98=X-`%`#c+CTCv+dz^uTxJ)uu=P$iHXqJ21CI`FhTd9{wnSCJIeR*yI#RYYeVN! zpmRRx95im}aLysJIiHGn-S>#iki3u2KsxtK(Kl$_jeM8t^Xyqom+(zaU4PA+de&va z`h?NHL(E|-w2iplsu1H30E3@S4y=0;S@;OD@nOc`&_;(|?SXb>5i|K~=p1pV*ypni zEksZJZ>f)y@rhF(M{(fGKDCMA{A>*A@w+fEu@wHB4^BuRwZ& zjgOW1{X))vRQ((O2J4zI@JIna6;HC9n9UUAE!9oxWIgv2m-Z8KIm{k4G)%b`P8~G) zAkY8%#2Ru9d#b_H&Jn>Vv3Vvp$$L*Ig&013X1r&t-ZO>w%w(?cuKs!jic!6m|JBg= zdPg6B!}G)7yLn@vj+>KHS*~Y?s8tX)e9&ooAAP<|p96jw=eqR6li8t;bLOjO-%R*a z6L&QGWDNV{O!moG_6cz;OR0;CUqdx`%(|nG?L|KD;=6p$55)az{}U^)>nU=t<5RqN zuUuodSk8HD;wAZW;o(VkQDA_ckrlc1;Aia?;+0;!mw}<{yKv&Ya*gexj()4@w}5_= zZKKWo`bAdc%U<6}a`UPB)*N2hXTKSDbu`h%8;yS#yZ=bnZc2``@X6uTaz7RT^;v<|Irvv9& zCvHK`S>eP7iBAho(nqJjcf5F^GkDKAd|vobVvVJPhf?FyIK6w)6-`_P_xf%K#*e;OA5AP9-s+sqm=kHDFP*c#lKIM?n#b9~ zI;T@-6-bXOu`^$v$eEfCL%XTl7Vny(vE)Qn@SNJ{UJCko40%rWTlQ*|&VmfXd!5*h zoXGvORo`l_+JQO;Cs$`4JWCwIwe{2;Pj8$zYC>bBo!wYFDwW@en))VETeyEm?HxZ_d{b&W~yt-*%!1D}7V>ZIx%OwPQ| z?qh8QE6$s1TJlc`v+l}q(e*fd-rx=Yg&Qwo-?HHKx~Dy{8@TBDMy~7sulOIvzd8Y# zSvU~>ztAmY+)n8~S6tBa2sz66Ip{<@Uk}avA?qqyB$>l^rc+ynwcj=45+@ge{jtfb ziQ>|jO-VFnlSgA_&~6|`)u}~Lu4jj!G0Phd`SB)#xM9bBNOTQ82pF4zs5Y~ zpgy1lQQ`-qiAp}yISxxcG)Db&Y_2ZOLjRzU?n9*bSPBq`}&`%|F;vnxFn^iyS z!%<@zKeWd-{=56W9(Vr;MvJkPnRRmKutxWIw{XbAE%`WD>-fYAhAry!J(V|+7}jcH zH&n|HI)bcoEqrS}{OcO{*w^7_SL2)i8glM%Rq<6l|Cq-6GO^<}g@vpwZa*;Ti>cDf5936qc^VkV?i`()(bl{oy-&6$olpPmLVI--Sm@cm)U)*4ygj3>-EWsHL+9y8oHyJiFJyu_pYtur z`o8qOXXg6Mx-EC(g0{6L)a??w`sy3bb zxCebwHT{H_0cz-5Ci0}7J#XA%#K2iG{no@cA zomq{E#7u0S8R}2ZRf}fa9*pbvH~6iXiFc?Eth0&yjA04B32$v*VZC#xEm%0_t+hq( zX0B@m&x=RBwYKhund|Vs^vuKep>e+ip5SlDz^78AcNc6~p9fFBW&!Ko13j%^Z1V!v zH9hkV%#z=wk}>Jbo)(@<$6nW&lHRxhyr^cM)lh%)KuVyooZ5sPoQYOM|K50xU+d&^ z`-#V>9PXTHr89bx@9TW4c|3!0+?>Z#Nex1sePzz$;a)BG#D8?2P9^mRoqNu?SSz__ zY-ZFJoHy1vpV2$B3ppl@8VYqaz~`v1Ay2Tmu{SY8FgXB@PxPhMrEXuDN3LAmjXw$J zwXMi#(;knpAExmgXTE~_MD|YFhgQ|A+sCynrLW(8(D!o7L)E*LtMu&;#Cs=1Y-m&a zIreHjAKp#w@}CkV!U2yi*{&@-0Dey==EU10qJN1OiHUXTSC`u^(SrU2E@=;I+~+}G zUokYx;q%Mjp`F;8f^$!#Sv-RtkP*50{o`xK0<+|2zRNT9#Pv-g|7`Gc&BTy?m1oZ9 z8P=iSH&K3yebmc4w3kJZ^<7ous582loz>zJ*E9|ocaAgbe_4SGpE>#4&Od* z`k=n6OQXBU`-su@U&KrJ9(-Rpg5EW9A5MtTI@LHeF74-OnmhY6yysqWX3uOY2X4uF zPQ9z=j06Ufy_0MM6+&vh)1zqnov?MR$0|p))PGoUTsAQGhbFk@5yjXbR z&Ha@U8`_Yx&PH8=)7)88NQRf})71GoA? zc!o?4p5;c`vA;uiGxUD1pDMCY3zbv z{5D_t(WB?A&s)GA>;gxRUaL5?31&^Jfm7$z&NF4a|5p94bp9{o|Bd{YtfBVH`QJ84 z>q5O&qzgXvm((GBsyqt{Yz3HZqN=3Uc!A7pIei$}-R8@eQV@Ctn2 zgQ4i=g~U7PJG^gBbRzWzy?e`nee6oE-)F}kzP&8IV&@!S;@DVbLtnJ#BtvM96X_$5 zcb~<#*XDcAIsQ1c6Yd7V$y!eey)lAbz&}whjHV2 z_5cUHqq^DxZxp-l;LVNTO+GfA!8ijhR&}8lP6KCjUYR4i<@M9Z4XzB(?)KaK4RoO- znm31jgY-L?c2%q2DZ%(z^vgM688P0GEDM|p|1{o7z~)@~t*77c+!JX+JN-JjZaI-N z==&`7&3lsjJ{4_Je-G>?(%`X)fzVvInqtXl`ZvU&DXdX7zs||Br#|&_QA~IDej4FvX*Vp!Mbzso8WJeD(tck>5mi2nar|DhrE*ggCC_wB)WnTzwe;AZ|9XK$&GM&LV_ zTrvF)^E-Am@`CbpCLu@DUmoWiUCRCJq%|FcGmj4F4SA8n_-nPM+t`yHKbcCuNwO$8 zQhAX(xu(5We}z?I_NB(?()EMbRCKR-t`l1?e(;XlFExJX*U@{=(Sy5-?3|sc=)ScZt+;8w z&59qGLTpjMir;UOJ2ENh`L`_UAi2+XTk#t2_b2$Iz29T)c&qpOY@50oZu?R@9v~N= zG490X+!*?*9VZ{;1i9&p@be%%a4_AG%pe|^IN-<($vkhUHGY7#5RcG09|0$|o^kX= zty#OymrzY;>NzU+YwO(Hwr8HT-+cB(a;9#_R)LLvBsj>s4Sk;h+^X1TEh}#7Yn^*j z+kt85q{s?E+u9hUrdSIyXzPm1Hb3|rKt2y3hgs~&u9?C3BKl#!j}?CskI-J$zHHf^ z+189ay4G*4HuN1|WD9hdxauu0ueiSNMc)l=TT{|G@9uG(<#kBD=wY0numN~1OUbO; z^TPVPHN;m*mXvSbvAJePww-OS*0_}?vgft+d5Ycf+GBTn)U&&_!h^7-J?hnCHTT?F zVAHt%J#_ex@ohVHdF*tL4ppl%gq|+EmR(5wsy1z}<1={l#IvlNHk*OvYRBL3Ul^0) zoBDiXa@uN48I0-Ula9%0bID3_1XseFD^<6(y|iPFb&Ve#Y2r5Dq839dCPYHukaR)l zPe#uz&_U|G2ar)x%ZTNICY5gq=lLJJ;&DR**+a#DnbN8~Rm7f}#r}Qg5_kdhVF&p} z(hJqcyz~6)w8uwcdn`Wh`E|A0cl0^C40#NDl=@2L-mj-d)?p(f*TuiC;cH)M`v}?o z{;zRH&}(P)#lTztjyWh@iRPBA$;NO$i zH*>2mr_adJzDqYY`=0nx@-zPPXwNxE-kf$!O>w0K9b%k+!r6JVL#rC?_c|@o%_l6SSxb|3UjW~b7AU^dSmKf zOzFfQwy_6)&F}EnzT76+a3yfOkNKto%WBaEU^s(usCJQXeJirAkM(HLZq91*V0O>s)^!{Hf9BpiKC0^e|GziGawo%* zgoG?al7LGV1rY*?+A;}NvtX1MtF`S1(Du_TZn#xIB?#I;#4?JdVm~ElYm-r0Xu)P| zKP8B5gQy?CirUSv*iI6wAX~!Xe4np-XTlf}?dS3RJ$~Om<}ow(oO_n{d7t-r@5lAk zo;72P-Uy94%373_6^Xap!_b0VQ+Y;A+5vBnRKJ+)A~o+nag@*Uv+tF4`Wg6 zS}bzl+gD1N!OkscaoOXXYb%@bB z;JL-9O8Xc0Y`IS1?$6QZb>Md?+|5_~2DmG{UBjG&+rr%kfV<`ufk$;1e}nz-S8ymG zm!M4#!#PD;zA&x)-_QGphr)f554C?D&;LT!6Yo=sPEG4AT}9duV^V}pW9wgzzH#{q zbg;-T%Tw8(*nTQ)8U(*69!>mOkn>o6`IagCamLyXu4N1~CS+czJCv+kyun#r__c$>C&Ux|g!{A=pX{DX&K0A%m zhSsWm41J$NuFzxhJ#hMVBme#1?7IhFeD(dJt@{||e_@I-NimrItBk6HjN!$L@mt$N zj{gEemi$jK)%G~@CdOn13h2mTzQRp-yoj% zQCBj#fQS0uCuUmb&27YXDUKR@NBjc(lDmmHw&+9g)*i~_Q?6L+49XN+T|!w9ztmXD z^uF`liKD)Wycl;IZqEXA?&bKZM9wFCPwHMn$1r;ges<*Ou4Vs~5QAmgvv|HQIi_Vl z_NyDQt%(==+d+rMRpXl{Ij4FMaszqMZQRaso@H}hPKAz6cW;CFI}^$SizCIv4RcA_^Te}QwpCi@>kk7N`Y8?;t;6AwOX95I5x zXg@gZ=sr^X&%gufOjBMD<&0$i74BYiMav%aBztLl{UGOzYoeabr`BPs3(N6>Pp2&x zxx35X4^;{GOum;1SD9-Nc}qB(0?dN3{KrO@PhZG@Hcb?N;U5$GRLRhyg0?kw`uA!Z(vFhIE(&i2>bOa&71qXkAbV4(Kc_m=Opd2 z)`Q?JM9*~Yo9u@h)4YLiLDz2@S=?etMyRl!8Z3T)w!KyX(X5xl`%G)wUg3853iwP* zG5%qGYYFRG4^L1JPhdX}%cUczb4o6Cc!V6DeZE}k)cqlCs^1j(+o`|P@LDR@+$7(K z@3_9-*lPYi9GiIG&l;C_KIy6NM($|XOPnh@hGga-ySsGW5nGph+2;3zk{=v}KPS&^ zee`+wee4gdjMSHpr|?^C-o{$$`^B{(TMuOoc7NKE{&!EE zw>OWtZt1n3UR2dOhH*5Fb?tcOjhG!O$Hs2k=Vae|aZ6R}b+j*@RcB3P{VrkLiG0Mb zYE0r+zovTB(OAm(E%|0P{OYgYM=pKeiT~2N)bPx`jJTvChi>KYPAB*Nbx~Fd-j-)M z`#zd>MelvlYweL}nr-9#5+fiz&rx*zy_c|m7?*HO_P0^|?$0+DK4aghd%*ZbsA{as z8xWu4ea<^iI>jv4fAoyu{%gT(?E!~>Dd2xA{Bty(i-)eqM`@OL-*7xZG!Ol6;Wq7@ zj)yK-^dCK~?Di=i=5ewy4N zQk6ydNAI0jSxmpt{q*@S1N$am)}O{S*gCItTaWd5@Na;3)qJJ%`Ymn!mUTSk&+0t? z6}}1A?E82_@ZsXt;2HaLe2%|ZpH5xnHo0^6#~W56yGV{ztc}Jp=qNsj%-=Gkqj%!p zG}ee8jg1Ro|I`;4-$vI8d@h`vbT5%lx}LRo0sF<{#l+Ouv9eHeaDgiU*F3IIWlf!JU?bU zTE7l>-p`uDA!tPe&)@~Y!6g5eeiT~yZGMOFeK~R4VEmjc{GHtRJ;mbx!fuE9t>?1J_#@X19~hyk&$WS2ecj&@eyC- zti$H8ZFFvU9Xdusb65wRMWQ#y$wk?bhU``RNqS?X!f$)Hn{MBUmFOxHbp}U#t3Kcz zbg8HJCFh;3yd%Fi@srW}HQROi{TlI|dOO^1_B8lV@)>+0R&uxE;gkHoq;1KqNoR%Q z28qEuQ@i82Gf(!Cg+pY&O0{iwFOvuE@Nff}+VR_x{q6wI1jEQ!t{VtkkSzqq_r?mA zN&ds|?edx13;yqe=06s`hd}SFq<#uHbY#;+md_8upOm=eqi6X;$bg|KM&Q)lxmq{N z-yB{OY%cj7@Wt3x0(+)8{YCni8}4Hke7f>({lAE#J&L_zzRl$MKby7L!(Q5p4D8@% zs(;Og4t{F<`Nu*Vm1|TmD+6YNm*AfHE_Z(eC&9?3lVSR?jTj%h{O_UsW4s@+ZC(kk zNEYmGTkGJQlx-~=Jh_6gXw9zwYrnR`=kNyF&g9PV9=qKXdp}H}U4wXI104Ls`Agog z-N=&(w7cpwxE=h=bHK^*loiJ9Ap7j}xSi@hzBg!Sf#I!{NGm*3a=l_(-{nIX|%hZ1@^* z$z+Wj-_cX&=R{(`wV%A~@#ypOkB?&m<(c;Gz`vh5KeI0}3rl!@y7OE87O^M)M8AjG zXZ6sU68d$YE`Aysvlh6C-biM57lvU+4E34XpH2I}b#gL0ZJ#!VI?4Zo@R}rD8*Y~v z>VEA;#rvlDN7!qU=6^iACJ`8}p)aF7lplGw>5n%5+V^guAABQ z|0Ch?XOaKO5`3a)COn|+AM&5!@kjfmovGcuq2u6GivK3YpT<5d;2zD0{Y1DllN`#k zX&c|x$~%C$&KkvzM9!Pp;eGqJA3L^Y?OpkMUq;>NbLX4kvG+fBG;WrUAe}?qi z4^c2l_HSV9qV;Rgr|6tizw%jCE+EIB%Q^EztAB&es%>6AJYur{S>6+#>0J}u=cbn? zb}N?XEBnytz@yz+Y{bug-~sGmBmE`lK$}kL>`nHkX^m-LKBoAh*?#SMp2&0YcB17D z4GhQs0uzIrA%e-{#ecvkqEFA$&R z)V&AZ`h`#M^Uib8jWl#CTKALlr^8E@!&8>QTb9COmf%Z&MGHKq?Mr_Y+Mdr`HBaGS zxAHWzKR=VMv6jEz6SY4-o3{0>rC{?!@!-PWaOc+vXn}nFlE}gIB>kl^-{Y=Pxo^+A zt95luN_PYo^H>9oNp#~6jLBe3vSHfevhx=u)!KW4oC|9hk8Bwxv?3Kc5y7chz@{Xe z`$=t?wDl|6>d^Td=8w>i+wI6#_WR*>hzSr^h4AOQxI)q%$I+;9tn4?AcVpaj&jZU+(^DQIj-VrDH&_T23Nsf+g2r?XW4zSC*YHVZKkwte!(lX^9z)xdJXWEKXHaR%C@5(N5)8Y zjk5D$HOj^SeRuq-h^ON$yA}8qc#J?gx$CvxmoUGjv5u{wi}O(S)i0{|Ujp2uTV29l z6|M^>rt$6gk)-+OXVGNyJNAa;FKlmE!g%d_4e8f@ zKWt~%{L&?M?x=j`*gzdOIg~ZFjnY>}`l7Dv4Bf2D7oX?p`xAegMqk1cbQR#x2u}n3 ziFeYoGv@$MZj6DPwSzcwiHW+-;tY19&xz$8gBVhC87))M#VR-2!Kj=`5&AFQCe7f^ z^C7a|nznD$lfW`5yw?uX|1TNG-K@zvz8Pz-{z@H-9=x<; z(V|NgJFI)_4v#egoC}3P_H7&IR`4dnXA;wO8~etJ@>>d$4_dsI^w)xQHEr%2i=D3A z8`wS8k?XW?_tN)7a@xQPVe>V7kA57oWe03gb`Fnf>}G=DVf6jztpmZ6q5Ml+$#vPk zTA5ZL|61KQ3|(&n-yM8b?yeO7uSc0HyqvA_!IzJ`!TlEUnd&$Zn$mt^@RY5Z19~6_ zPmIELbjUip^j|TV-S`Ad2PbaP8HG(WY_s+0oRf}SXIwdF7kaVycJNj-%3f<^qyBAM z$V&g)wuLj%FgyqxY~Bx@^9cCGh|h?4#mVqPZKrg;eY_&NLpw)M(ANDrI@HhO6@$Pb zqHk3WoL@mlgMI!hP8-Vg!Wp}v0o`v2{ZFDF>D}w88_lbZ59S(;?zw1f5azP+*KNc z4z(%f`{wb!ICA&RA|K%)%4R)GZU)N2cc%2^ES9g#U_Q%B9C_ECbJ)iB#n;2}&CCWy zXNvoF*2Ag$Svi(OTi6e_Z(#N0!G+R|>6vh-gYW*ii-3*I$DirU3T+v@L+}a4Fg_ER zlut7`+^42<7D0ouX}4NuGwae!{06qF?K#xZhqI}B^RJDn&A>G4uj6%Z_haNsP!7w- zXxH~ybZ~6kiDaFRiUTj^T;!h0{aK60b9em!WT+ATXFP`PES_|_{)#q`zu*jQx4CBS z>cz%3gm}z9F|HNA9PfLR?~Okm?+eD_D;AIcDmYOZ!`<}KH+Gi(R%_s z%-+(F=C-sx=A78|OVWbR46x&lgLm3~KjqW$Kbs7EhoTSvxy!X<)F94jaA4#^ZC^?R zH%cf=9%@xI@SVbUJKw2%(?=ya04l)w$42p8&38KA&3vE5_Xy(L?u0Inr~ZjLqqp<> zwAQU<)Clnga6&l#df%l1L$OkdW*!U{;kxlp_9{u`Pfcs^@eHw5t zUfZ$72p|Adby9EBxyGCu*&`P4{t~chj`e=j5YwL79$X%|+ zRo9y-x_ic_JX%@c19(}fyOrbk1TQIKjTYiVRG;vEc@c4o9{-6g!&|xz;@`ubwt%DR ztFGRmUgi7vur0tx>UnVSmEk>8-7;OQK^grIG1esrzB;eSGw#Fh?m!3YawTWT zGV~EwE}Yr3Y4iEr&#!+Ztq1xOOa0ZzIJ3?sKQMhPMK;05ZkzT*7dRsy&PRBru?(Y} zu{^flGiGqH=63wi;-Mds1x0^9G|fiCGGpJk)&#;U+&mco}d^~lskzyq5M*bg@ZX|fqQzy=59~JTL0mg|}f5L9$ zf2Sb-@r|9n|-&#lN(zhLb9ftSXfN&VMNqj3V~S=>t#8Z%;IyJLGoRXZ5_RO|sa9Sv0- zVC)mn8MHBWld(@=?6VlVmv=Sx3Fr*k7`s!JV3*CJOk#%;g7f9Z^u_&%Gk1u^u|JuF{8Mxurbn>`ptv>Kgk(8)#d7%yJmQN z-r&ZxpI~GBnlWtKJ7eBi^=_s^CpDKbj8(KzbkQ7bRg4*KRqQ8+?-pp{0G>>)8crVG~jr8t?(5XV?-l-n; z=3(a3Gj(#|C?nz00d0jp&M*?*$w-}eA8Y>&;P5-vs&EQrR-`P!F1wF1^92cyoEpV7zs~$22A`d&;2|<_96bEoIf2~yaAm-KZ2epr?m2_)}T|t zVcwq&e-P!@(3c0w<{R*9sJ7)Z$FC-bx}Wd&=hRiZ>G(B7_z!y=oU!*get_#Det?{v zi5iE+9*X$&MCy8nA#Zz%lsmERL>+mC;8BC$fq(gs*rkKsfG5Yu>0W^E*&=*~Ta1-iH0@ux)gILexD_;XQF7I?=USzXM3&{?c>|cG*kc={E7V=&-=cMjeM?W(;BhH#*APee#&rE$| zJ1gQFxovyapYnXtlfQg4v@Vi2TKbs?yeAVU{3vs=>)w~=OQ5d(`~35Lx_{5&Y|5CU z+?DWb;M-E*lAGOhM=AHbw{WLB^5*`WtVCbd+-gi|;dd{~`_!7I)6WkdMaQFkg^Zrf zzHD}UjlRI1?DNI_0(;V_t37GQdo8tXyY?P*uQ7eu_TF>qT+O^CONF2vvL|Tmf}97z zYv7BCix)2+geQg+%z}o9zfK?* zqSig~|L6tAhD*rTwTEZNZZdkmah|vLNf&L5@dnVoIr((quSFM*B6~^Z!vDg~gEotM zClAeMEGv~GkGlAS>YO_WZP*4a&PFHIL7DPO$v-cXyC}*39+2E|i08t^-tXamw!q1? z4{u+YGr_hiB{VNeXx-#W=*b3u#p6GH6Y|BKt{p#FQnoA_aTb`_H% znP%PyBmXb>`qS3V=4p?$cJ1{BiqX?|0he!NL9?L6MdW2-+l>CwLP!(Q~}L*8wlVN;0Tq5!v%K zwvG#+oy-%vsd8c4un}B>#M?Ms)rYp5>Df?y9 zv=QVXqd#;EyJ`RFvA|*?u$Trckh>x@dzS7aW*vj*9PITX#z*5&j$!lzRh5c~376@) z+7JG0by^F3bqSx$*mBv@G+%4;>a_XiwXaGtlRS#IJp_#p&Ig~kuT%2VEAY92X_c+1 zsm7!yjh@LJz_od#xkBeiJ9iI)oAI5J@8D|$FU4onu~+B*6`FB2K8;%@HKzGYU?m%4 znt%RobpK}?b}Zu|!EX!q57Ooy@a{_5)fl9&=s>slXup2a@AE#c_8Vzmea)hewyaP0 zaU*>gSxz6yeQx(bd+K8nZDwN&9?89j8FiBjgqxak1h;y>hfWw63P&&I^Ht7vtyN2m z;N`AcnoL|9IQSat6=d95;a#W|&hVbBGCe2o6>xlv~i?VU_A zS7dCPQgDR5tFvC^En~lB+k(GFoCUV8zVS_=&17Sw-DcnTn3LUJcx;`tcY^U|)LmMz z0X=UA_@BdjM;Hs|Z{JvA!4boi&YYZa{Dt=fzl?2@3uMnb@)z_1(ArL(N#FDl{|$H| z{U65v5BT2}{_oHV;%s=XHgu-_L*?+Js;{|4>S*1xM$In8CYph6{ALb9OB=RK`~=SZ zy~FO`#yR1G>`bbc-LKxCsK+_hSFf3R!n6MEy+XbEsCwjDOV*ff6Rt2G{T6L}EBt={ zeqQ8#c-X#v)`#EI`4v4!?S(&3RteqCNJOto+a0ckv?A4G|LMG4sMy0OJQVJ=0e^Ix zo(9%PYkN4nFLT*9(d#>>Z=EKAGl~98+HKU@V0+X!()q7uN=8DhD<81c{4=R3K zAL-S@`tEgEKSAF;4Zrt+#)|q>BmZ!o+UA~dV07!-+*^-T=wY`)=F*NM;lGO!vm*q8yYyZjWd zo9LHZa3A@|ZlFASaB5@X0p(Xq^dJ2@czHOqLHcj`5N#eo3>-W|@atB~;Y+w{i7|#A z53k|64Bu|nZ|@e)?xA)_<*JYiC*DhkN?2ip4+yz?#9!zAtXPvSO_N_+} z&o_bx=w0o7qkWgnvoqmAGq^6;sqS60xdA+Q5xZasXHVpLSk_#g!=BPdcBqBvM%Cx# zqiwQzXL7WWe^B(+>>>Cljo=wyS?g3b&_4zdD?vDPd;h|Q$ zj9%HJs>8WJ<>O>wbI(PWSB~FKH9k(Y=yS?gAB1f?=VvauJf|$dE~}+X{wEeWKXcLL zIb|NZOmbu-=VvauyfS>PA~`=5Uu%)Kbm?GhP5AgM8H-&7ANCCLfOavT&x5O77rmTe zes$h+$SQ(yz5L>VPXoCstdr9o?>uP!vgX<+KJt(syX$A=If@Yvj%Cfp8!dvd;-d|0 zSWhEE7spNTZB%?S&$j}1?EE(WHHx#n6TA^$ns+c%^`m#7(fA((c~-q8yV11yZsH4| z3I7GH(OIE$>rr5?b>7WfEY1~+y&8=J5n6GK7zF$QrIWDF3GIc&@K~bz(e)ST8SUO5 z{%)7-0saYR@8wx^UFAN#lV|f1I3K5(J5G1skNx>{yG6$QTa-q1y~%}Q`BM%@6(C&(IrP# zN%pt?C%&W6<$dSGNdKG1j<4MG5q>hrTn7B_U97L&?`0Ewz%Nn030c5t#NR`9zv9&f z;DfRmy;R>AQ!e_%7_VWB%I&ivranz$Ogmug zam2I@uycS%d|mtarI#Ik=|{xKcyA}x5*vVgr0TIvcSsL<1{=A7K2fxw0ezCzY~&j! zR*L^Kz?(ztk7n@6@?GR(Z4M-v^{eW^u{Lr%Jq2uSe#_-rduTkqiJTMoLj_iT+1pDH z!iEm}JW2BJ0@vHf_lKWkVQ>(6RzwS8$(^Wg_^xPwZ+vC;M|dW?EFAmRL%kI4zOg(y z=bRj4?A!fkIx8*vOmynL#aa1l>HgpYE%r&Ijn!W!--!5(MaqMo+RD7w6?=1iYqpp> z_PS!Qdm1ac7IDV|xYYF>Bk(+aQ_tgzjc#XW@Fsle?&luPUMDwL4Yu~2`v;CFy+7xv z*!y$I`54={7CwC(@OypWNT2xT53v^>Gt(NM=N@6~9h2y@=ljs}4<9mTgl3aFhS;qA zABW<0)ZA7O7aQLwTe=aGvFrAUR}_AT{*Qd7`PbX+xcwi1E4N?bJii^kF!8FlQExbW zs^0qt<$7nI{T=Jy!}n~_hA2K4`XGOlohRpC4USy}u2q0@SAu)f@gpk7*L{F*D0@ot z)t;_lEyb@Dy$$cC^K-1xD<25-cRK~kY}#wMgS^9hKS|C;{U>Km0NhC|Atzy~&+w7A z#rJkhD*0hk{P##tf?OnBo%EvKczhJm^XdN4>}6(aw$ZlJTA0>oo&1kC(6YwoxYHW5 z2O5E6gOmq~Ht=JXOd#IlB=3gk%kC3gTgiAdmLNE%aaOZ#!nxgd+ zk6&ZHnK3ty7FxN%^|cJdN;w(KvmWdj0vo&%^2Fe*E7G{6(7k{L&o0@U{rt2N{J&?lA28@NAgGYX8*- zg0WWP$c5yh2iL7NxxV0E%oh1w1mTThvkc#nsqoPJUV_iEH32#ExtNwtaKC}R#Y=~# z8SI~te#wu)^QPBW;JbVsI;Y}a?B;%W-d7HzZxo@ktUX!~^cs`g;CSa2v(N(1Gr;o( zbU}IGVqMKh-x7R`YVk43amS*g$=F5y&ww@Dn9?)N+uNEby^9l%wvD`YI%gyQpWwfd zYS@0XDQ%ZDKFvA_hhBUowDJYk>ORg|@;n`Qt`MEPF{RitYv`_3nrHUhOIqb$EE=$Y z9OilOIoxxXsJ2BDtT0Wmpa~W z8}8o(=D?^2{`G*-bp5G!q_|2e$&mlKV_WjvUnTH>EV_Y10GHF-$ z1Qj5YMCMpdeH-??BiLWT|HzzOp%-Aa7x683*AKKa-RJd%Y}*Ug#0o{!ggDjd2T zxam%iJZPEzN5+mH(HzBwOrgAsaqIsw^d!L8j*FAMpvx7TD}F%Fa-hX!zyY0VRUWpi zI%LHc;8pTcy@6NBxug5N%V_TiI>2UR06jl{;mlS&myaVb#3jZ#YctIBy7bLIO6z8f z_rUkP4G-qbF~$Ffs5u6C?_JJL<}*XO=E&G>y)$!vg?=M*Z%;DrnMZB2w7xHzhXWsT1 z*(YnH`4=8=Vi{+%_L05%8v7|D&X}{AwH8f}Jda~vMboJ-^FM-HoHq{cFh83ff)~;) zjAK7IcY%%SZl*oqfkWdbw~AL0jei$CYaKLR^Mr2LG~;jhNQ*C$%u>xhOE>G&wAVD2 zU6fr&y~v*XTf0Lmy!iEtHXLLAqDjI5?YoayuMF@@zawzA;Slzx&OvSyZxHdHu*<@{ zaXV`)y|?5|aCHBf{3hCM{=uoM_EPbi2mtf;J|4m;(>!!`N6zc^wvcmP?-=Q;X$!^G z&aJ*z=XEylu+MB@WH6`BvD0mPOD<<%4ricnKWF_?n=clha1`CJcm~nwL;MyzJAlVh z;H5LI#5ATfAV1{r-0f!14Xh80fu5Hd*l*Y;NSnSz(4Hf26}9{o{`0;l8Lt^z{AzTR z$oW;Pk?&{e8y)3BzTxGTOGha_RP9>>y@8m!M_&`sDT@zQp1w-rRgaH#?pv|nIi)9D z9?=sve7>G=T|YhH^3&-Fr-b{u2l$J(Zi_*uhYoiV=f~r_idvdDzxwt=c&$}WeCLiE ziTRH%@7pgU{2v@SzH$LN+%xg?@&j)>^1vHEc;~o%zr!qO1-x;f9s05xo-qiY7z5nJ z=bZ<(NiWoS>FNv3SJ_m5LI5|?p`|8|~hj9RDY zI6&ZJ#~QRFk2f>7Z0s?>u~PcK&=zCIp{q>f`xs)J4DNw7S!2UrH3U4xH@o_Q?5EuL zzvXalE~(9K^`aXpw!8u9g}%cbww>sHmf#Omjjb}4`mr-|pDG5NI+f@3-vV7{GQ*`Pi*mdf{b*8b7@>MBA zx0r`+(W&E^xQ%ui!*zn=nOae65$b&{QHT+5-r~sTRachwrUsq>n-%ms=o%>Kbzm$4~pBW zXRlWCUuSQ1%;{rtL(>$?=0cVpfJ{9Q*?JIj8qC}*^f)oTLgp09S}riahwHq7(h1VB z#?Ü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

    o2ZH3p;9(p6)Ltjky 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

    eA2wqBuzkv6p1EcV2I`;>79bGaG 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

    Q)@#+|=->nWF?@zSoN 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

  3. h!o4D_3E93R5Z=OjVDW^d!a5a-Ax)SZyGb3{Dbs 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.NaiveDateTime.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.NaiveDateTime.beam new file mode 100644 index 0000000000000000000000000000000000000000..7d2206ba07bb3a7b5cfe3a6ea0e2d4b0ebdc65c0 GIT binary patch literal 2640 zcmb7G3se(V8lE8vA-qCB9)j|ywSpxHxRxp^0gM<5hzb_8-H^usLz0jS}7g^JI$vh7BEtgoet8noI~YmN9=(e^;$RK%kz4?URuCj_>fW6#;0bH4fS{r~^o z@Ba7k-#cgCf>;FM%}tgjWh5~FKl8W@b$t4N(5*J5>QOiy7d@Kjr{5{$u0#gFwHGmIbzr%oFfE&u+j<^US`Dl0or#g@;h^t7hSYS|MRL)96WyKz8!&Fo( zY2x^y5{Ur*S&~!)M7|`I4?-_-fq$8V;|Ipfa0K1#%J&LF>)0-z@li_xr!7#z zUPRAIcx(sPB|JY655X}2eY&0RBH;Olqg=ix!rvb5#^>`Td?_b2oFjFQHyRKCVD0|SG6+QAth0TvbL<0PeLMiHjxD>S z;|$B21zY80_v!tVm(RNdx8ZGQDy0vW~+8AC6>b!@s!=%MHh3*f?U}7qjuE$cO?E z*5R?b88M26!>BU;94kt@F$`nkHa$2u25pw6DrsOaL6-Lu0_X3L4fttch zKH$X`z=r7+pzsET!oZ#|9eeKCSX^m{SA}U1nJ9+_PLUc{5Q+l4K(vr7U`)_TL>G}H zgA;`@m=Plwk-mt;2)slDX@nLPvpGnl#g(GL<)egH2?R7-S%|~Z=*wZ{UF%C~YO^!Q zdt%QF9aHQLK2|L9+R zGAYJ3fBk;5I%8ba;SHAk&Bx@H%gUyR1)bNTb-tCM+j#qZk~Ex6%iAw4a_^UTv|WpM zOYM7O{o|yU@lgfId(FMyWlYKP9>`PqPS`-a@X9manfM1ww6?W4D7w8Y@mOueUwK}1 z-aTt+U(J!s=?+vYA6@-rUKrW-$;SFc74}JoJ(jh$^KLJA?@;&Z04wKIqHV*v8>=+W zKGdB`y!#b##6!*tj#pjd%*wTE`iy2IPE~+_kTT(4ey*F_G_CNm?)#^ISEo900 z54`$k{ONkuTJ>|@iuC!*KHQOWAah!C*LjcEP2sg;cWq*_J~f?QTD>t|mi|)Kx4HL3 z(95mmccLE^CH#3@hc@b9nP6gN+b&yLLgzKVg;k%{?-;%Hb<-XfW!_I+=;_Du-NxGk zolhn_zvKS#I@$8;O~$d)%GWd)c@1e{ufNZ`P~~G2-dmg!q?_JS8rIqJ>!se>khS{j zQT>6(r$&U#CRH>Xa6fk6p?gbebn`yQJTK;F-2Gu&x2yNrhPheh6b4;#Vfqg1*1LF| z-<`~fpT`uQ!;ze`Jp;S)E+x}XjywtWj%)s|$979r`H|b>@WZZh1aVFr9l43;4+FyLeH}`MNbJr8B0~eA|Egn{fR=)|U_F*&n>jnGt3> zH)_^$0hy}3m2~T;pJ&FOYi;gmSGd4$<6s7a3(hJ9L{wLbkK!Eg47yrI}DD95SlK&?OcPJzOFH9pIQpJ!JVZ_7N(eFeJSC%9A zLGw`5rcn$=>E5Js20Y~G3}1`WjAQbOIKOS`s>B(cLJxN#eChD&f%%OB41HWEIPO@1 c`vdn@#Cv4^1!H!po^8Veuy-!%V@Htx08(LyX8-^I literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Time.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Time.beam new file mode 100644 index 0000000000000000000000000000000000000000..86340ce2949f0f6266544786c99bc85042531ae6 GIT binary patch literal 2596 zcmb7G4OA0X7M>vrA@UOv2){iDKAcIJjUcFCWMrg=>m8*f%mft@i_xS$BucL$)i@QBOz7|p z3I(CpkP5{fjA1B3X=HHPpdxh!LW}QF;|2;>VGORe;AR6!F|8PR>QxLu>ghBc zrlLq%3S^p&R2#K;8qH8f6(iLX+BBTfV*2z4={Tbp6>W3Z~^pm~CWsNV$e!=)h3;WZKIEg8P)@g}oX2nHxm`l*-4l1OUsiW4kzlVf`io*v9&v zn5TuOU51^BJGPM+3UBtK+mG30f>@NNgC{@vz2;oYH%@K-YsJ3@e0((mxbb;e2pSMa zs#v>z0M?fmfc3}rp0=?l9F9ATcUt{%zyl|n*0a7*Js+9uW|{PC;+$UpN!P_&%hzZ! zLGGx;Gq7xeG*VVA(`!#GtN3E!FCrN`<*%Q^`i5LEO?c_FXJ$sm=rypKh8OE|$i^ue zvMvkZ%n6agBnQ%9%|h1AIFq-YRL};@q*vIomr{UR6;9J8M-4^lfTnPhD`>F;kl_Xl z2p1qQBb!t@Ho@8T+tU!E3eQ4fBq=obl&A?zk7)>vWGSg(OfXAAXOJXA=+lGoY+TPs z3>hS@C(IJ47qldktuYcUp_Ghn85M$?Vbc~U(+SuPA`f=k-e|7el^jprk~+mJCljp_ zr%sn!bwlm<@J|08EY!I(d!|=K;aiQx6R#&dRh=3xX)WB|xhwBr*p|C%1N`SdtXEW@ zsO_k0Dcd~Dw0?7}HvjL}Yv(;E82sww-s>4mcd1-`sWyPw;=KKXpFF2t#omm=hi^R# zd^+emdoS5Qjwe@U_Oz5-v zgKvrQjZ{yw?*^jGpw*YPgtjKKRMKnOFMn_Z+{GFUj9p zapRZ2_3aq;DZe0)eRs#FZr!gJS8!59Z`?Qar%pRteR}Bhze5!l7CAqex2`4eWAzYk zV_Z`7U&}A;Pw=Q2KGVH!qN(OsTlnP6zC($J>jy$M$IN&1e|SU`Idjg=gMz}rqu*`3 zwk($ygas^rOaxoDKM#;aH9357Bj8s_@Dy>~IdjhbLr-g}S7)4^y=wW_!BtabO}mYU zc7_tK5v(4m;W``(H>L0%Aq%}_T2p$6Pj+P9^4k8uBPguIJ>$#o=ma(;&H{g)sH`-I(lMHK1?cB*)QlFig~~2ie%r$w85r=_lJ5;w~DyDm7mWF$=wjy?Mz#a ztvw&Iqqad>e7~fj;Q$qsRPy~4zk-fV*Xe=3T#dt*AN$nd%A_mr95pV*z4yHtw(Yk! z1arBcr@krOxlzIN9bL0N9UO+}`+r!&` z`Z;XYxyzm2vLEMHMOSQIpZaO{+4Y&RtC{!7^DhsC+*)oPL zgeC{ut#2!2p!uST%7cc)!OsnR*S7& literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.beam new file mode 100644 index 0000000000000000000000000000000000000000..a68d8f63811ca91d9f768b11faa21f730ca35d68 GIT binary patch literal 5724 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Formatter.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Formatter.beam new file mode 100644 index 0000000000000000000000000000000000000000..6024ad60b9a50d1aad439493f3c923b732c8d68c GIT binary patch literal 12824 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Fragment.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Fragment.beam new file mode 100644 index 0000000000000000000000000000000000000000..deb0694844aa054b161cb2d6924329c90f312a20 GIT binary patch literal 3456 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 Hh9KylFh`AC literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Helpers.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Helpers.beam new file mode 100644 index 0000000000000000000000000000000000000000..1baeebcb0495f401624f77e7a231e74eb33f73f8 GIT binary patch literal 6004 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.OrderedObject.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.OrderedObject.beam new file mode 100644 index 0000000000000000000000000000000000000000..07f46177373fb0910a689786d2510898d5fc9e32 GIT binary patch literal 7808 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 Aj{pDw literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/jason.app b/phoenix/_build/prod/lib/jason/ebin/jason.app new file mode 100644 index 0000000..a04b7f8 --- /dev/null +++ b/phoenix/_build/prod/lib/jason/ebin/jason.app @@ -0,0 +1,27 @@ +{application,jason, + [{modules,['Elixir.Enumerable.Jason.OrderedObject', + 'Elixir.Jason','Elixir.Jason.Codegen', + 'Elixir.Jason.DecodeError','Elixir.Jason.Decoder', + 'Elixir.Jason.Decoder.Unescape','Elixir.Jason.Encode', + 'Elixir.Jason.EncodeError','Elixir.Jason.Encoder', + 'Elixir.Jason.Encoder.Any', + 'Elixir.Jason.Encoder.Atom', + 'Elixir.Jason.Encoder.BitString', + 'Elixir.Jason.Encoder.Date', + 'Elixir.Jason.Encoder.DateTime', + 'Elixir.Jason.Encoder.Decimal', + 'Elixir.Jason.Encoder.Float', + 'Elixir.Jason.Encoder.Integer', + 'Elixir.Jason.Encoder.Jason.Fragment', + 'Elixir.Jason.Encoder.Jason.OrderedObject', + 'Elixir.Jason.Encoder.List', + 'Elixir.Jason.Encoder.Map', + 'Elixir.Jason.Encoder.NaiveDateTime', + 'Elixir.Jason.Encoder.Time','Elixir.Jason.Formatter', + 'Elixir.Jason.Fragment','Elixir.Jason.Helpers', + 'Elixir.Jason.OrderedObject','Elixir.Jason.Sigil']}, + {optional_applications,[decimal]}, + {applications,[kernel,stdlib,elixir,decimal]}, + {description,"A blazing fast JSON parser and generator in pure Elixir.\n"}, + {registered,[]}, + {vsn,"1.4.4"}]}. diff --git a/phoenix/_build/prod/lib/mime/.mix/compile.elixir b/phoenix/_build/prod/lib/mime/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..593f280816d8ec50afac6843595cb5451afb4edf GIT binary patch literal 4802 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
  4. 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mime/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/mime/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 D>nAoR literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mime/ebin/mime.app b/phoenix/_build/prod/lib/mime/ebin/mime.app new file mode 100644 index 0000000..d840ce0 --- /dev/null +++ b/phoenix/_build/prod/lib/mime/ebin/mime.app @@ -0,0 +1,11 @@ +{application,mime, + [{modules,['Elixir.MIME']}, + {compile_env,[{mime,[extensions],error}, + {mime,[suffixes],error}, + {mime,[types],error}]}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir,logger]}, + {description,"A MIME type module for Elixir"}, + {registered,[]}, + {vsn,"2.0.7"}, + {env,[]}]}. diff --git a/phoenix/_build/prod/lib/mint/.mix/compile.elixir b/phoenix/_build/prod/lib/mint/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..4b16676b2d34ac99631ed47fc7317f7f574fc7ff GIT binary patch literal 8063 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 NZ=ZGg{{SR6zSvtz&X@oI literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mint/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/mint/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 ucmZq9U`}MrV9I4+U|=)UGqlh%$!1_OvMA?s&B?6DEYkBxtMYf#NLcs%4`T!+xc~qF literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mint/.mix/compile.fetch b/phoenix/_build/prod/lib/mint/.mix/compile.fetch new file mode 100644 index 0000000..e69de29 diff --git a/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Application.beam b/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Application.beam new file mode 100644 index 0000000000000000000000000000000000000000..b27317e1a1bae946b55541d893af4628c6e50bae GIT binary patch literal 2956 zcmaJ@30M=?7M@9vgh(`mB|=f-##1XKfE1`z2Q}b^AfTufhb$8qNM_>9WYbnq1hlmk zmE{H5+^C8uDlQctg4U%^5nD=IL6BFAw2B2QrTVP$?gVUo-{*VtegB;MopbIv|GhK! zoEsh$;}1c@H_uUoMTRlULLdlUJuooP&X*{3xCN*DB5{K83o{sWxLV2JB$1AyIH4s` zv`on`6s|Hd7;R9KdIPS*$~2gP!hj#9slqGnR7B@j4F&;w#m3NbFbn=5G+S7 za$R8r5rcO$5&;2`h(w5hFd!W8PDi+|z_>&T!8wj1p#(0oi8$h4rErxq1R(+u*CyqO zL^HU*Nf3c+v%u{#T!#qUU6FAUSR+p^MYt1YcEY!SbpqT0bgqa%!nMhHayb$qbp<(W z2w#doaIXjv?dMA50&l@+5R@;9hG4$P7R?b0#)@FR3nGvLI(#v^BEdLdv(pkK!hE+u z6>xI@i!9&6t_5r7OJ)i^xKJ!Z#j%^SKyP5>3IHB}5MTrV2fzhD3;+YLdJh0D0K1o- zLt`%>-vVI$S)VZgul(6Ku)<=GkAU$ofN`u2z

    81mp_9elJ$f<{SyY#v48)Sv_Yl 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Core.Transport.SSL.beam b/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Core.Transport.SSL.beam new file mode 100644 index 0000000000000000000000000000000000000000..feefc1cb99680f8f1fdde59492852ada07b5e2c9 GIT binary patch literal 35456 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Core.Transport.TCP.beam b/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Core.Transport.TCP.beam new file mode 100644 index 0000000000000000000000000000000000000000..2c2b29692746a56e71167af629a3187f0d282949 GIT binary patch literal 6480 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Core.Transport.beam b/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Core.Transport.beam new file mode 100644 index 0000000000000000000000000000000000000000..4cce0f762b1aa4c939e8b53fdd841a4435f9e287 GIT binary patch literal 2808 zcmZ8j3p|ur8=s4NF2f)q8=Gqxl+C4La<3&eW=p9t#yew}nRmSJI~PTfu&vr$R`{@8 zB-u8LP%f2CLR*rOTkQ%Tl~z`{mDuxA`|W<`_xqpood5Hj=Y7t3pL6l@-(g1}sEoUL zZt>fKF&qg5!ra2b!Yic}o_wB+htT|ZLX74PBM>bJVF^(Yj9~FhCQrzLnatBH3`2Nf zVhln>Y*--T@uAbWW1<{s%lT0Pj=~|!;pnDTQ6G|t6T0|#P0lR$_ zff%nqQKJ&ma9oer@dw^Pv~5XbT16beyk zF$xteAZh;3sgl;B9Tl+D&1zaiCGEw&Ht6eYR?{X2Vn`4^nXLj5-Wmds0Mr1~|4$}* z$`)#55xW61i%Z<>m~|7O)=Z(o6}=;*~8?z znkiY|s2OniiF{D2M3AH^QiLU9LI?sQEF$PDibY(66%MiF@eT@M;6I}*66naGkT85n z0(mB3kpV{)LR=W*;Yr67AutBBVg8aEkVt=zq_SZlhQNG~4_w@g4WUae6@fwsv9U#8 z@@zhgLM&n=f#3_X|G8G$AXa>iIsnv81Qq}qfutJ13KxJ560rcG4hWVQgPA-5z6T?LUj-EGA2t+42(n?I;F~t# zJeH8f;c;vNVGbq*qioO!7%ZcZYYj;tA!Z|rfFU7IW&^e~Y9j#WfDNA)wj|&mv%x+c z2sB6rmW$vK#^r&Ss}cji0(~pXuiE8@4tP`*6>e_VpwHu7gN8_;2T=1a%(p%7Y-GU#qAZ;zDtc3Po|{FCjCenWaF$- z-<%WZ{^`EwrznskqA$uRYkmH;@AnEv3)`t~b}k=|EgOo|mXVz5KC96?Qs`7;ILptU z6SYkHT#92pyC&?Q9aXo$xV1XbNBd>AQ_<(wG}MgW5y^Si>RRbLZQGMS`%cbG<%N$$ zPq@>=5!!aW=60h(#bstDC2J}T#8FiZ+SGjYKGmM@6Te-ZY^P(o7kblBoJ94$OLjhI zP4YY;IO<|iO+OGfu`hbg#rl*?CvMJXO?{`DV(cN+wt}5gcWO&a<<2E*YkfEH!MpOt z*^|VMp5NT|?8*G5d8&f-vtq_jbkM|iMFzK0K3sM2*;ig!MX0I3#K*gr$={!uJ$kS( z|32sPvDwt>VahF+wT%b8B+kz7N{>&cH8eZw1ca%ZKCS%2L$z;v@OsO)Ih&b-fq4ym zgx(E3D^OfCml&sa{~B;wxpX? zB6Cr0+PwC&m}KW(-SdqaNodNqVfW1F8?y-l$A?_E3d_O%zB7Z*4ByNMX3EUx?>tz$ zyulJXPS|c4pKR{d#G+1Es`?F0kteLTHWZg6eV#>FL2H{BVqBPDysXhFF1S}Xs|V4B zcecJS$zgtVH|y${nyp1Hz3N>0`L&Z9Ln4iz23J?NJu58r%Fl4fG8Mb7P%3t{U{^Eq>;R}Ct9-OhgFtxtcwO5Zi! zKUqeWNhAJL7~kVn|C6sm6*evu#|e2)w~jWvPC7T~+YzyDS3H#Qc+ILy+%(RAw~ns-rqU?Z-e**k z*ZF70@Q=P8uA}R>cj-0D=z)%V#YJzE4fgKje`m5IH_0I=|GgyrZJ+D&-W(dK=C1UJ zgYDX&{+j{)he^dfG^6|cu&f5;v$ zJTqeYRrjvXoD#o?Ju9i!u`+gsWY?y6=$TjM``_$Vy*IYW`ej=qX+EW|u4SD5G$v=% zq_I&tVjO$mOq=`6`sKsf?n${N6~=RWc0qBM?->4)rG4E$Fd&4Zo@@{_w*11A-%F8& z8pg?ln#W%^gfw1lj_X-yi|et?EUj zCU;(ZJvG4p!_w8tp})&;qN?;(=1a5gybqiwn|cN6f4p|zIbf$VotpAwaAfL-kn)v{ zDL3!FT#?HV$7+VnYmMp-F{JNJAN$QOyY@BAa0={FC4S`{>nKlnA#S3eo#Ll#idi_(mK% z^0ZXZ6bTiaED z%D;JcD(-Hp-Vjm2wv}vlBHoiE=e@f)OZ~B?_veaUC|8~zGS+obJ8Kt-`E2b^aYPRFc`n1 XKNW>fLQsqd*WvFJG5}Fyfk5~R?e1Yp literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Core.Util.beam b/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Core.Util.beam new file mode 100644 index 0000000000000000000000000000000000000000..f829de8c4042d5934b3b2e525479d38a1069fdae GIT binary patch literal 5900 zcmcIo3piA3_n)x`Go#5cgAm3gLKq4M(YTXqAtf4f*%;<#&mNa9Cz4XBM7QZi(nUHY zy6covu3cQZD(UFZDM`1JqE7kVjn4mk-{+j~`G3#z?dMs0t-ap0e`~GxefRtBclm|Q zx5wdh2wuLPA)aW|cQ~99eq?0i7E#MrD98{XwjlyBYU?dQVB08EAk1R31>yt=n_a>| zQAEI%qp(cMlZd1OAzZ?Tr3lR9pfJA@&X7tFRK^zZ9SaiVVje1xh-L924iAyYm_QjX zlJMn1I9`S#avsVQ3xx47BIJk@-z35)d#rKP6Oqc}2zhcLKxK2~2?;O~KgPPp;|qc_ z(p#e615D2(R{#2h5E zTPjD{VmO_h1atT>QaSD>SRg}7Qs7JxEaJk*obUvWPzDoe|7^?_a+YQiX)<0CEP~mn zgpDE`u?*`uIaSO`+(+k6{YJ9`@( z4(Bc5!(c941R@m>c2xng2Be0kDsW1gCR9Ab4cewd)O5)8%AGFo`bY5k?hn@~AkL zKLb)oRjDi@H5`X0QWf!YAv{q-kp-ZqGVnyrNsLio5GZ8IA{)$P(IA#Tlcp$;GKwiQ zXdGWrLZF_ehEvNR9R`^S`9ew{Y+!FV6Zle8rZNB&O_M>x6X}Xt0Br=GwX7-HkUt9m z0=2dyg$^m&PAcOVS&&XGnL*7`iU#P$WD`b~5{+yOY;+Xe;8jy5o;bytqHB5usB|YW znJiNRiw43oW8qB|Z&aD_ZV*LZhebB0=v|@c;fZ=6Gb}DT!51=vG@0Nveb%@zRY3$J zLbd>y2LB30)EL7u8pSfaLNUY>4M942REC168H5{8mjJS*L!-GFeS-xCGyprDiYFR_ zXv_eDCB>9%MKQq>O;}`WEMw3+Gcaz(q%bf(4V!Lc8!!mw*qotC@kEO;6+oH(e=~__ zIjXe9H)GV76zE8RYye^JO&^y5!ixmf-3_NS+h`^otnfnTE*`)V-sNT*Y?Nge0K<7Q$;*KW4 z4A*a=F~AZFmR*KG#z5dyxd4IrjPxW}%;50(2rQFf4Ppt(;4sFPSpZ`+njn;}GPdZa ztBkGq=_+G81QvtJs3#xFP?}7P^&wtN z#l_~kR%*RuRur`LAAF?UaxXa<=N%|c0IfI1!T|QFX)q!KNu=N)7h5K#7)wfqfe_Ml z#S*qm%1IZ4y<>F8MA%Y9!UM^rlM)b#2&fS_T^(3q0%(J!9H5vC6dXC&37+Kb7m(8o4YNXk?g}w6oAh}oD&Wfd%KK1H)Hx_oj&x<{QBd!%R)L& zg>24RMj*~gr5GG43(4-YzY%_jDY$Ikv*>z%zo<)Jy!+|kz`_j52O!~e& zUh%_>AH1CpWoYinmoNJ@zts<=?EZBA)y9*F$p#OfMJJk8RaGJDjvIT;UZF{SsedZP z<#uh|`%nFO&%2$w%vJ3S)Qy%iE(C5H4^pN%mszh~m1DBl!c&c%k|mmpC55aDm285jjgH3Dr%b zylFK3NY66^Ne+btJ~bY1mA18Qx_N4m|IAei
    jvYaJ~Uld~A%Gp2Zx!&Ged!S+_ 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTP.beam b/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTP.beam new file mode 100644 index 0000000000000000000000000000000000000000..2b4b238bcd39c6e69a6d3d1d1d36b234199067f9 GIT binary patch literal 43296 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTP1.Parse.beam b/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTP1.Parse.beam new file mode 100644 index 0000000000000000000000000000000000000000..20320d56a39c6d584c123d8113eb7521a119bd8d GIT binary patch literal 9016 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 UL=4FJu0aG71K!W8CLoIb7qd#gXaE2J literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTP1.Request.beam b/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTP1.Request.beam new file mode 100644 index 0000000000000000000000000000000000000000..1aff03ec74f052824608cb5becd20a9c0ce86f31 GIT binary patch literal 5596 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 aj%Uo*XHC@KG?Kq*KKY3M$UNHOBmQ4b;5+>Q literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTP1.Response.beam b/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTP1.Response.beam new file mode 100644 index 0000000000000000000000000000000000000000..367e9ad0b1c57276be25e640faa02976a49cda8d GIT binary patch literal 3636 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 STw-$y3)?e@Es{{kxBdsL*(;9# literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTP2.beam b/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.HTTP2.beam new file mode 100644 index 0000000000000000000000000000000000000000..50d951149c52aa5950bdb8501209612af9309aa2 GIT binary patch literal 147020 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 UIMe1&d4M+9I)=8q~$8w`663IN|IfB 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Negotiate.beam b/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Negotiate.beam new file mode 100644 index 0000000000000000000000000000000000000000..8f6e45a07e403d087f180a9c49ac2901aec509a9 GIT binary patch literal 7012 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 Yzj^@3_af|XV>AkwCtYJ>C>VwMA95D0?*IS* literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.TransportError.beam b/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.TransportError.beam new file mode 100644 index 0000000000000000000000000000000000000000..f8ae876d850264e10f170d3517df1c7eb9320a0d GIT binary patch literal 5492 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 UqaifV!hWZ5mJklYV{a$^3kx18+yDRo literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Types.beam b/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.Types.beam new file mode 100644 index 0000000000000000000000000000000000000000..7e80bf7911e6d1bd38e407de9f157e543fbf63eb GIT binary patch literal 2648 zcmZ8j2{_bS8~=}yEyGx%;@S$Sk3mhgvSqnSGqNYljPV}^vzYmhv1PqlD9Ki2O_rOo zv{;iRgrZbRb|I;xl3X;o|8Z~6_dVZvp5J-j^LyX(p7WgZp69$actudshX7#DAoG3sXT$gVB_%B2D}=|I@j-lxzW^5*!lrNNbTqL0 z8O7LB{{%^&skl^`B@`JD035QTQ((`o4Syu;FB}50*znB;0!SkrT|U8JZrn6Kh#+?x zok3tTNnASN-wa_9m@EbvWV5-V6c&R9(=3oH348Gs*ak95Fd+dGBo4$NP-*-m3V`DZ zu^Ai|84LuDU|iVnniyXyiB6(WDHtaP1>(Z9Fl>JY1ESLXw80RN4q=%743JI@#lShq z#?avW#RO4({!t))BI|&m0aiYKRQR|v;~n6`{Sum!;X020uwPb(*Q%qX+uFI$V!5-J z+<+d%MOdT_?yT6i?`XDQL^AG5T4&SQTq7K6orfFJ;CxJlI9(dv(z(fZdGT^_*I+tdH+D)9>I%t z;|C#L;o+_mk^M^AhjU`vn1!b|T@tyywM0}0QZ|$imj6z~FU%g6+gluwqrQq(OGpO} z%QfkIvpXX-by?Wy9I4w%bx9>|r|m({o4Or>r6c!pdX35~eY`1S{m4v;sJ3FCRrWDf zY?mzR!cL8XLFxG2Q!=((%iE>F1mzcRTZ@$59MQNY)>EKQ#C%F+>aCpv(|<24dZO@~YV2%r3VzQt?M0qiuQs!Ji0P*>qWt7Zbgk;^mGOnDP&sm9GGh5u zN4dy@*oe9+#j?<~YR4=+rSz#0SJtcR)8$)LuN6)HUSD49teTOTsz<8#I25EQe7#Hh zMtf6HkwaFP@TCEWAB(M!!6*(5JrB zde7X{rHjT(c^}JauR49qKA`u$DN*TrR#rayj)|iCQFz65MKLP^K9k-DBAG zs>3yneWoT{(DuZW3pGl6Yd_@H54Z&)KW@Jtv9~_(FQPgZwXkH`bh3T|<=q@El4JS9 zDm(d6BURdYbT%h{@nv#Nh|$TD-phBlPrt+8^2BL_o64;VnM*su#hXV95@M?d5~7$h9#Z(u$*S_;ArF*Hzg7p;E0N^n zKJ!e=`f|HI*+k+KFE$-p)r0N$TXJ;hVvpt;&_roH$hY zaAllubL3pn7iA|>VH5yZG01HAeY)}Ar?6{iPC~}9Km}X$Lr}B&$`KELQQ1}WDF=Un z)IO=DL-vIthkqA|eQNmRujF$EcU~wlWj*rOv3(a@^nTdw5eNa`cZoR<&I;vcQSt_DFjhQ~a2xchpwH-MS7E zB$tcI8gHOVy9&EW$Kj!su*JbegQ7kAI#(^@%E$-WiozDlhX2$pvtIC8?M_>yR`gFe z=A@HQGyQA`0R7_v3WWM3%=^86q%W#kd;@S&SdmXXB^1#P(X{PSN{;p?H ziHd?Ob;Ik1z@;ASq7oCF7SI2rR;&NpN$)H{R`q277uVXTnJsBv}gcGu^}%IdEe zt-n{RsK&0LCW}-Ol9uYf1*xrS6obcWx7EIy*?i9Iqka@8>C>FjX#N!D!Dp**gs8&q za~Y8AI|JLMoOxV@MNQL}R;kQ6|J1HJD@9u9@vAY)zAM3(X4-|t?|OFrRO&YK$}dC@-GQUwXp+rf%Wvw{6 z6Zh7`q+5fu(w4+KPI>e!+i&9OW05?(ji29x$(3@qGUs>6#PPhui;XP=dZ5Ga3A>=dl8a8+M|2E3`+D7#O@PXsR8 zOl9`Q)QhR67vo7CLy|DK+x<)^-?fhf6P5$in#51b->~>JZlX NH449eK}fCxz~5rzSj+$b literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.UnsafeProxy.beam b/phoenix/_build/prod/lib/mint/ebin/Elixir.Mint.UnsafeProxy.beam new file mode 100644 index 0000000000000000000000000000000000000000..2f973175500cd15ec3c6f55c60d3eaab829dc341 GIT binary patch literal 21300 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 E10gbGh5!Hn literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/mint/ebin/mint.app b/phoenix/_build/prod/lib/mint/ebin/mint.app new file mode 100644 index 0000000..17c58fb --- /dev/null +++ b/phoenix/_build/prod/lib/mint/ebin/mint.app @@ -0,0 +1,20 @@ +{application,mint, + [{modules,['Elixir.Mint.Application','Elixir.Mint.Core.Conn', + 'Elixir.Mint.Core.Headers', + 'Elixir.Mint.Core.Transport', + 'Elixir.Mint.Core.Transport.SSL', + 'Elixir.Mint.Core.Transport.TCP', + 'Elixir.Mint.Core.Util','Elixir.Mint.HTTP', + 'Elixir.Mint.HTTP1','Elixir.Mint.HTTP1.Parse', + 'Elixir.Mint.HTTP1.Request', + 'Elixir.Mint.HTTP1.Response','Elixir.Mint.HTTP2', + 'Elixir.Mint.HTTP2.Frame','Elixir.Mint.HTTPError', + 'Elixir.Mint.Negotiate','Elixir.Mint.TransportError', + 'Elixir.Mint.TunnelProxy','Elixir.Mint.Types', + 'Elixir.Mint.UnsafeProxy',mint_shims]}, + {optional_applications,[castore]}, + {applications,[kernel,stdlib,elixir,logger,ssl,castore,hpax]}, + {description,"Small and composable HTTP client."}, + {registered,[]}, + {vsn,"1.7.1"}, + {mod,{'Elixir.Mint.Application',[]}}]}. diff --git a/phoenix/_build/prod/lib/mint/ebin/mint_shims.beam b/phoenix/_build/prod/lib/mint/ebin/mint_shims.beam new file mode 100644 index 0000000000000000000000000000000000000000..ea142c0c139293a3128c861cf0c08ec5e531d07b GIT binary patch literal 17080 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 sft>Ko%kW! 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/nimble_options/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/nimble_options/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 b@_6}|7x=@s*I%#va{2Kh$V(8a$G`s%t*$Zf literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/nimble_options/ebin/nimble_options.app b/phoenix/_build/prod/lib/nimble_options/ebin/nimble_options.app new file mode 100644 index 0000000..86fce2b --- /dev/null +++ b/phoenix/_build/prod/lib/nimble_options/ebin/nimble_options.app @@ -0,0 +1,8 @@ +{application,nimble_options, + [{modules,['Elixir.NimbleOptions','Elixir.NimbleOptions.Docs', + 'Elixir.NimbleOptions.ValidationError']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir]}, + {description,"A tiny library for validating and documenting high-level options"}, + {registered,[]}, + {vsn,"1.1.1"}]}. diff --git a/phoenix/_build/prod/lib/nimble_pool/.mix/compile.elixir b/phoenix/_build/prod/lib/nimble_pool/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..243530664801eeb5b3634d30ba9d372d119acd07 GIT binary patch literal 5181 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/nimble_pool/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/nimble_pool/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 ucmZq9U`}MrV9I4+U|=)UGqlh%$!1_OvMA?s&B?6DEYkBxtOA~NYx)DnvNuxB9qKvo-WpR?o zK@gnKkO)$VvMi0Kn^}yZRHTW*jaa1`qi77sVd|rpjUs85K}_n<%^EYI;&hob6RM&~ zMh?I<6R9>Eu{4II%_>$-;KnqJHll>KM~kt@5Yu5PiD6Nib@z69wcJc$v;}8Ky3)Zw zj5uLXGAv0+NW;-T=(&#y!U@2{)IqOYmIVhvP!y@gz+KM+5(47JF+igLxx&J7h$jjZ z!jjqilF{xWMgD^PW#)8@PF-i-lD|9pcqlAap5u#QrBVduBxMW)mNaFI5G<6E2j(0l zUksQD5(wVxDiny}%5ou3)GL9HDq|#KWsIC(E=iCG;WOoOp2$Nags&+*#6a&ZXW3&E z1ov>-LJ92d@Wo@45O()|eWts}A?E{7@mzt34?)XWI)%H$5);L(Qvm@K5&#+jhzE$f zr?+$e3WuX@4tXWOhXLa54+G-lxIH&U0ulk@a88eV=FanUt{l#b$63y94Ipl~02-HP z1T#;^vkr57Bb3{^aNh`p^?>7>X9BbEy|e74rQI(N8fw;ldonX%62K%5O&Ex~gTMfR zq|LN?k_3imNE!hvr=9$}jIT2$Qc%VqeH|E_aqb8g0ySY)$^VBlC;wVpuZQAE6?X^j zJ#lyPajxP>5aM8;@cVuE7KU&fPY5A-a>FOs#-_%!mCX3&9epqKz~u0BOov)<(o8#~ ztRkoJKO_(^2SqI*G~nD;$GLo<=VrlZ24si<;zvm396(ZzjNy)Pv5qB3grQI?fjBdb zMktz8VGLs(uAxa2fN9J+5=e0yz{4mM03!f^npqOTOM`MUQVjp5O6Mkx((OdY>qa{%mf@ov_42?^9oRZTT>A+hw1XS6auotPWYK{5+5? zYiZGIvTEDy{>u%aaeB{1m6eD~mm+uFk!@8cvYy$GeVJ{ac6OP*d`qh!uB3_AT4V2> zJzWgX-zwT*kzOp%5k)K+xRf(9;9uyQ+!% zk5uxrqH?QeJe`6R2KM;;I`+K^yS)8&X=kbc~+Zo zR@U}xW9PNlihCJjML)NbPeWo$s*ip(<%{q7!+Yy`J}!{5QR#ns(Y<>dTISV>|I_o= z9Q&eK1sD2mERM=}NxPgI3u zjyp@(LMjCDski3jJxe_I!PoMuFCR^w=sj(X=(y*u!3W{jI^d@kt+~iIUhQ{35(}f=3JA}>zW(Q~uhd!9 z{$YZN?kjui#HR-iY#&)f7Bc@iV_p|^>h{U$lXCCJiU*iMbgFT}A$#bUnu5LlvXASV zyw+q?=uRi!DL5|h-MCMBu1K2L@XL~p?0_AC-8(02Jea!Atx42JVE>Jz_P#S6Jz0~G zy0SyBo4lpQU%*4Idi1ps&!0am3mN2l$$ei!3rQ6NQs0k@RrrK$yJ_>Kgm2`+=sw-| z3s4w2b9`~q=ZR@&M@w!s&G_>t#28wJLO6SVk-vcN!X zN?`WqjO%^Z_s;l{MoaUmwF|wHanBKcEeEao6_U!0>p!)(%)1x7t0e4`tNpQi3NJRl z+#fgP(^*Z;SL*z-O^1<+2Tc|4!eJcRM3XrYT(3^Qx}j7XCtPEgksj$xpd+E?jtb z@}_aUW1gf}cxWCsKUkvf-Mq6h|9#VS6j~G{9^n?>czRE9*wmJQ7wIcjPxk!#XTLpc z(cWKETK0JKv&I6@RibTC22hOp@<0{w#vH#0h)Rd43>b}Af?2?Vt!~b)&s8l@^MT~6 z1~A0uGq{!m!5;)@_MD22=a6-(t205###L4q7NbpX!t`$h9hRK^<*yCFZ`2F{y9%;~X{Q>+&0B;Kcy&7&{!}VF7D0x?4F!a`6S3@X8M$xzhG&C7&qGUs_ zFGwL*gvvt|!9g>_BNRazTV}X6_!Tc$8XPX2;V800(vIz)Yb=zKNpXI8IDLUf4nolX E0EG&OfdBvi literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/nimble_pool/ebin/Elixir.NimblePool.beam b/phoenix/_build/prod/lib/nimble_pool/ebin/Elixir.NimblePool.beam new file mode 100644 index 0000000000000000000000000000000000000000..bcb4ee044d62e36a03884f36b1bbb126ad16f394 GIT binary patch literal 47908 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 O;uRaoZ^W-&cKrt{Ss5Gv literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/nimble_pool/ebin/nimble_pool.app b/phoenix/_build/prod/lib/nimble_pool/ebin/nimble_pool.app new file mode 100644 index 0000000..d0bd75e --- /dev/null +++ b/phoenix/_build/prod/lib/nimble_pool/ebin/nimble_pool.app @@ -0,0 +1,8 @@ +{application,nimble_pool, + [{modules,['Elixir.NimblePool','Elixir.NimblePool.Application']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir,logger]}, + {description,"A tiny resource-pool implementation"}, + {registered,[]}, + {vsn,"1.1.0"}, + {mod,{'Elixir.NimblePool.Application',[]}}]}. diff --git a/phoenix/_build/prod/lib/phoenix/.mix/compile.elixir b/phoenix/_build/prod/lib/phoenix/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..24546d17fd8b2e0c38c672811ce1141f0b61ed6b GIT binary patch literal 17939 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 OvBsn(!~PGg#?GRu^J*3V literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/phoenix/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 ucmZq9U`}MrV9I4+U|=)UGqlh%$!1_OvMA?s&B?6DEYkBxtx`aaS-1h+&Wh1l)~9Qh^FdRY)oZRBQxM5fFDe zvdAKe;8B!z!v$zt+zze2#)Gwqz2I_K8^|GoF$@~i%PZ~k|I z&NSMfs(D`S3*E`!88jNSzNe?>DRZos9E-wKJRz=DqGFQgA5Ne+7R6gch$B#vw-8mU zkuWq?B*JhhArfUHB&oteH6*H5iV1}hlcU)ZRH;J62#HFH(I_RMBGn>=Wa%V}Dmj9Oy$eH0Q7=<(i882A%0(i+lu*Sg zRRl?h3HjqMon_h@*8kaQCDt2Lwn)@#Pb6ZRf2o1zjz_-(+QlGDk)k(Nr4osj6NrRq z`IUBGA}kD5-H~E)5><)TAaV_=F8+(pObbU0mt#08aqRQn$=UHss{RlG)q{|r;2SKU z(P%IL^_&D44#0$99nHvmGz{6zrtjr4%_k?!O9<42qN?CH&8~!8uai?DzThW12NDR( z!P{TpO#{Pffj0~WrN9WhV+C{$VEWn7pdABXQyVCoQuzUfif7ZCxdJv^&mM9GDi^RR z1$P8&4j3K-L2Kxp4mL7pTi8KNIHR4O)xMYxbM4rcV;tJYusMTZI{}BGvtz)f<^l#s z$7kBXFvJ|96M#KjFf-3G<@D|t%E>V0=r_7z|(pUGui%%^1K2fZ}rvb1={>0s3@M-^~nwk{Jj< z*`Ve|z8FdQKz&>4q3EOI<JgBK>an$I*8uzm}%#fjg`H_T7|$ zcs+!;6nJ&7-%pb@s7ehoMg)yMlg9^&ObDeugHT2pT5FsTsg;Np7a1~-N@TdYT9#Br zC;(Z7YR!NYH32+Si2%Z2KtMDkK_wKBoTz99s6nh^G=jFwDOe3`I!Q1DN2Hk4X%QhM zwP2T%I-DR#3=eZe*PuA*r0h+LP9WE*`xkO7w12MF=SwF;4&k9uGMZ;-7zRFBR=hvR zyy;OHnIVr->t?`sy8OJO1%sK%c#@J|jx{bnxX%5_Mw1bKrMq{)P8XKold<8$XK%|~ zTQs}7BmK`cjgs@{i4$EhE?I>13Cq@{1Ibh{IUE1c=-@)HKDN}yt~p11s9v@%-z2_b zj7#3K!}3hbfB5wIzh3jb2iH38UMd?AGvUt7vQ0kabx~1%%p{KAf)uy!0*~a6i#BOs zNo1>n8$}+hxRp+2!nfm|H_y$scqp*YMNaBUjz8DX+5soq@CQ4u?K#nT%r4mBK!7{l z>gc8G0-OCm`6L9&?5Cv_8|N$*V&Tmmx%-X7UbZZ^91#-v0%6^gZf>xcQ&^E&74Lgc zaB;`6nVyyT^A?oy#rbtrb(KSs)3;2y6I(d%M%+qC*6-lvZ~HMY%Xp6i-)tM_kj^6E zvETDt|I`3avx~di*kt$$hW)8)Jnx9#%*!eZNUMRfl5V(kSV*=CM{a2Ic69LA9?9$O zs!v@Pu+&B;oTpt8IC4UJm^Eue4vp=R7w>1o4af=EGdroiW$V;elCFRgZORX^`?|PY zO9n_Pm%Iy-SN)K4bV{P1^JZ;ot2(B{uYI4Ds`CRg` zDQK4K+~>E;nx*t3I&r$?*oDypCbpd^Ih(Y0+WXtfT<^ZkPCh>C=GjGi+{e90$ka8~ zt-5Ete|qz#y>mxzn>$%v*=2L-;Y~rb2XOyxP13Zs4l7Mf>e|4uZ(2r1gbD9Uo93Sh zxGG(7`t{2jo<%n7yN6vgpXQ-Pi5CvfFlj%uD-W>sExOw3vup#vIJZVV=`Is1%Ok^DYHNe(VmqSrXb= z#9d}zRb1yNJpR9mg)ZVcLY-1}k6t@p8L__KXumWD#rL(T|Gccr^b7Vs4xj<^kVbx>5e zqYmwU!SK6+2H5yzTiAoE8X136^>&}9y(hGW#SS<<2^Du)>`Nls&HhtLcGo$Kq;mmH$HRO}yN{{UB6Q6XRogKGD zNv;3d!;}t_ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Phoenix.Context.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Phoenix.Context.beam new file mode 100644 index 0000000000000000000000000000000000000000..0f61c96bc25b488b3ca66195cb5d807a4abc59f3 GIT binary patch literal 16156 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Phoenix.Schema.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Phoenix.Schema.beam new file mode 100644 index 0000000000000000000000000000000000000000..d0df2341e92c5ee87fa62ccbb938078a5a9f1d03 GIT binary patch literal 44572 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

    O{IWTsF3A6v~i9EmE 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Phoenix.Scope.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Phoenix.Scope.beam new file mode 100644 index 0000000000000000000000000000000000000000..49940442edf79446745debcbdebc7c5fac1bab56 GIT binary patch literal 12440 zcmcJ0c|26__xOy#+!=;p#u~YnP_`k;k{bKIlwC9igJI0b3`0^Rz0-oUPKZ)ksI>1& zBD5(YE$^1MluAma(&G2rnNeEay+40^fAe}B_uTWG=RD_}=RD^=&$*YY-yCxkic;+8 z;^5=J3$jL`Fe^q!M-M@&E-YpSGu70GnPKXmz+te#H6VtQ!pNb~nCv(XjaEtL@lu)5 zX*>ouC5Drn!elWjV;L!_j2JqP5nIQ|Na3XNxU}S0tKzscb_|cnVRNIB=`pDsE(H*y zk~y(yEJhTUmzoyCi(;g*=Kg8CEGnD9 z*KQZLcrjAh3|5M0Ozl?;p$}+4H(Cmv%Y}$+4nR^FY%VR8k<8&SU{2ClS0AA{{@fH6 zlQ*WTH!W(uQDOhs^iI*Uo?QrYxm2GSMy;GAeEFduQu z41b}A##9XuIflhx$MX_Wm~3teBZdcA$UnmQ%WQ@O=F4l)72jjx0fXmP2WWEv-h z$EAX4V>}S~mIk=!JWldA|I$-(kcni`7i2<;!j4=~PvC|)W_*;01SyI~bVvbC1MUHa zr6Bzn>~sp4mAY|(0BM-~D#y&+1Vokz#RO6lwSHI6Z0cB(vdMTym{|zv<|gO3JUSAd zd?qhp7W7*tAXmlYhY%AFX#Q^v6q6J&KSVb99=hN4RQ-|4WV4uTMl50h*<|cyY<+=V zD3lW?mVrV+?kE(B2mtvV1P~2?geD455{f!RG;D`iuL3Drh&dQw zA6^NSBZ0#C;FaMV2@GCEcn`TKKtz8O8d9(%C}OC1b&*I#0mT!8hDd@apxgu)4UuL2 z;aU}{Bw5drig5-e3sSIf6cuAxMo_|RAt;4lh$`?lj6Fda4JlE#k*Jm!K@Jv9sUR3( zU_9)IAp&vASYi&ASWJY8E*J?6mRL!}=#>#vEVmF;LM%alygr7CA=?vF(U1xiuP+o* zEEFmWpdocC-jGzQLL>uSghDjN zgrK1bRJGAj;Ga6-c$#QPgGfbf$EZ;7Q}BkC5b>Np8q%~Rz~nN*L?C$Lm|!70aL2@P zvIUhw=~`pb$9S}U6$zISw1GHnkvL;ut)x9c2MuXc@y0@H>x7~ve-|Z*hIH&C3Hm~7 zb%C|IXh^q=pa-PriKLhSYYotl9u;qbSSvYZ?W8dw!sbcel`#?9r%#mxb7D|NFtik$ zE0wYYGnj)n)x(=P>Hh-mbU zxXn_KBcd4#+Ce~>0}q;%5zI+j2<9OqWa2GI<8G;Va}r)(*BCJ1)nzFZp;fwM5G+(T ze_bjGLv@QH2_9f6<5v|01U_)5;1yUd0*JU!iueFSG9;LWkYH^Aq<|&95-)^vqPX|L zg^Vo(0i=i}f(bW8))9;>QdA9UC4v6x5Cu{MGhi)%CIAKOfyOo<_fREtsrZ?oT?0#jNaIpU z6p~UPO$dg_C^Te?Bu%^{!0eF3M}(Bn&j3v-%qQKcPUpSrQu>@L+n~Ybc=15465pLpa z@yby-5|(0up*)U+SI+sKa}9NHVIb*J(U2#ID`2e)1r2$DK&R@8CKJSYF_;KlEDR~z zVF*6L(C`L}-y02igXtBgxP4wA0WV1vdGZcV^&TST4|W2EwoZ^%&1Zj#K6e0$A)3Hf>4P$f>%I)H{huN zL}y>1Fd7OJPyx{$5QA(8fneSPG2j7!LIOHiKmko2pee+L5Dc1vktQOhj1UT*BB8>k z2;P$frWY`Wf?z@784!eNF>EZO2_q%!TYABJN`mYHWQGgl&PKDU~8&C@QcnB0PdffklapN#B53x6d1xp~c<%#*)9ndS z7_hkuM4`}&0uvai3^<0)hB<6jCL9fRvTOz{-n_uVtrl{J>`p)noXJT`h3Vh7X~u9o zhi8k&!{9ds2EyR+n=BY?5W!v!X0pYSMBBbJ(cTqKPUG@mK;qE>gK&6cY_P8en^&-b zH-%j}Y3x{A*en3q*2A_inN3n&OTtu#z4;lVv zy$!|~#JY>PVOwL^RpxGyrGyD&=TX?;Hm=v;n4-4C&m%_Br%SRI~f4d7tzNE0Kz{N z0MZxH2ccU6K88w*%K10Fb`308qs^LU#Z#HWp(0*jTOz-6aF@ z4{9L*JOD=kNV~ll2Nx6~1Gz`&HUPlcRX7f!FF4Z*WrH0wYJwO?{G|W@;YVzh6XVF( z2#)+@03bRcJQA*HY($4z09XKC2o1no0Ky-Jc@zeS2LOaWM0`bw>BycPp$7p#`i;@u z0E*B95E6hfx{LT88AlR;gjkLAT^He1aL$S;#X+^LOI?{9?)5GFLDolz#a+n zJQl#@c;Jr&A1hwsd<;1H@}=UK3|1^(5;->h)Gj4FmyU6ab^D2Fybx*8Y3&ajQo=Lp z9~ki9jLnQ^)4;*^4_q?z@2BTKu*r_kNPpn_^+^5)X4$bLH$9s5v&Y6e125+L4@<_R zfdl*>2L1i%{|_A$K>p#;V(C0O4V?XXAXWY+Gnc_jOQ9uz+6N;w5kyL!Flev|5`6sk zb1WV8(>)s86T}fED#Fkak|a`6p-TYlhe;4pik3HrQ9BalsaX#{qR6u;utJ8hJv9M==GcHzy_#Tv7nw0QdkvavL3hHvlC6 z(EyCk!Q=Dp_*^?azmCtTsm^iXk_J&S%raCDK${ zN-77b{_%0bT3QSzmBE(>TnGZ%7)X7QF9!%EQkxn zG>c`@+4MMOoLK-Tj>iYR%(w|04iD7oOc?15HqR_YRJJt(MOp5*8x}L#ESZ_{?OwPX zO&J+r)}5o{nczXOGS448w3cL)4MaTW+-+9qw%@+iw}jEUX5bdv+a_qm;bELdhxKe0 zmiefXSyG)Fb9~uDV$CW0HI_v)if7Djt8yP6Dj%g{69J*TaQ2r)% z?#|NtFJ8QuvGI~s_`_#8FMWp7I@C^%G$heC-tODl-`{y?b@1_Z3vDw@HkFpzDW!W5 zGy4A4tE^WtU3ItNLiNLscg$xG2E3_zAK$n`?$fC6ea((Kd&^|o=$2D<{Oo5R?J#St zV-w`~FON6EdK2%xCUg_L<44u)D}C#x_I)TvYkum%-nn~6?Z9ZqwM7?ByU912>b^;+ zkmN<>Um{(s+RiDqFAb-cS{Ei+dgNK2mzwoT|I4|;YT}hDwRCBoyM8+Hs78m}lfU$j zVCi?Xb;Cy%Eplg7RFnHFl)M#p7#j8!BrDP!+9%a>UfPZ5F4$ffuK#7`yXoG+6EG8qmK%TS6|L9lB|9ni0%@s zmmbNHbS~#=emL?77o5&Hn6ewauR{tIl0DZ5z{K#nCGt*3`T>mS3Ob=PK79 zdYwF-kZ_cfZ|WVad|S-U%3eVB9Evh-f( z;%ybT8oM7o?vrB}Z#5WnI@8 zAJMyjg`d8=fK?7%Pc8eB(i-bpiqtFUr1ap9VL1 zvo|((aQpn7mi=~zd`IL?8fLUGD-ExdFmZFv==fbX(Q{dxt1nPCI!4YVE(!doc4O~G zjj!bQ>GmmUipO=m3h%ab)p^b(N_njx+CJzTwDGWi#57K=`&xN^qI%xab0!ScQz5hG z8M`VK`_xZy>&`kqbS#niXdXTL;P$Q4O0ymfMdjo4P8pkd!#zqfO(Lc*MlZd0QhVZ( z4P4CW`Tun78WJd6X-o3Z0=<@=#^6WC*1D&y-m}<-d!I0;O|e;uRo_0 zd^D}d&EKkiQyJZ4UB0r^+oyQ6|K0nHHwXSsUpQQVIX{M8Yf- z&up^g=O}%`tX(y9!)3$9mZxh3GyUu0Y;P+(=USD#k2&j!OFtF4`pYYMzx_jh<-AEK}8l+MHR_HX?BweHgBz}HqnNrw3}xvWo}{cAj;5?-i0Taz=Qe!XPK5~uIfy|S#b zyFAXtxP6lH(Fg7%rovgpXE)+b@S5C1SGP>?XW>%0Ur+k$$1)Oj*N#a0-@BC5IvLPR8cPVNgi+#WBi_6_JvBpiaro12zWordiXqI#ArnF6l z&Qv%)Uj3HVG-6d#GuOBwEU33QxrW+JZ?LZX%i;KD>o*rWxe41V3vJX-O}zgssx3A+ zRPTW25=+kChkbKK$ufi|giqcwNrin1d0*wc3?C-OVo&Yny09u}2URgcw}*V4&N^qyf+@;n~h zRPz?oZ>l#E=KGd=N3iOA{#GWo^H6Wy%8vbizu&f~jxAMk#$+(q`CweI@7q@E1&4{* zY^Sik6KB0QHD36c&wzYBLrX9`r^7{NccUNc;`-&DMNH?Ft->Wb0A6^=-So*~D z+KO70=cHM8WFKtOy2aU9Rep5MN2QzZBf6_Ew5BeazTj5XA^*FJ$w&Ji-XeK!j>`== zfW3m5`_G0TkBC;@feXBb>Z^;Q46V)LnuG2)!ZS_E-F3ZAT*)mpjf}3#%=my-Wu81z zx-r}{aiWF4(q{q`cuM83O6G#sXJyh{xz!d54@rVYXA(}SNZ*NFJ3TQo!zCf{Fd7btvyXi9s=6i!}5YW+4LQZtl6@eJ#zia&ueH$o+V3Uv@vXY3f|84 zouQLzduZtgw}UJG_S8I6mi|?H`;zazB$jbabmzWy+O_OXHXN;yx3E1|WYlx3nj+nVkK zpK!mpdGz9A=e~oVE9|Aou{8}_)41=eWf#o}@S1w}jZu_3>3PrXqWpD}uicqc^GJTf zgYL)rwe8kQ1&iC#{8!u>mA-L$6Sj8y-oAp6O_vq%v|!0Zcm4@>k+@ONV>~_AVCsP6%+`Zmd#@N8 zULHB{66;C6^;C1`SJU#!uZgF~5HhUZ)Q?^7Rr&u3yVv!X93r^|0}AvCmeh zxD>tpx#8spPXqui%U18t-x}*RwBq#X9iO#Wj`WcI|1=XnIR-EDobENjkdnP!X+oRE zedD5QSzAkcznd)4e{~&sX!5MatM%z4 z+wV?sg751l>&*){ZyWTIx@=IbMX`8P>9vzqLG_$qCZ3jS)0s80_TBD}p(?LYOGv&QM;)7= zzk4S`_egMzo3}TyCBCt3PSGC5nb4kteRqc3?{u23imXY#U3>Fj^|jDWljkmUlU|MD z!dDk|RoMEaMDAi z?yWN7R`xod)S+)ym_%+3xiBeu z@xw{s<>3R2*=o%%o=h9+{OWZ;g1)%nzEWer$KiFm7fx7pJaRDsHfAo=iw>S^*Za=% z46i;?aP?TwWX1tX`rb|4eZjW(_pQHrOsW6$WpwKXgPB$g+r_4mfz{juKdsAgHwLTe z6HZ^YDc8P#^i{;ENI}xZLI;PEh%Dn;nVsmBW@jtSmVWhJK6Ks}>pJH-%Se*FWP=87 z6$d{VC%?Q{E*rn1;#F?lXNQExpHzwI>6-;k4{D++_J4j#zQHg#6zW4g_`b4W+95Y{ z>(}o-?=ZdFpl-;TPC5~do4F@7s%#WnfZ54$3$ZhE9=+~3rA@i|*mG3c#HS`9TY4j> zmo?2@R zc4kn^Xfl+j`;eJe#LeM*aOUhs-8T+7G&MZ-gV}TiQW)C({a+`G=4d~y+I)Gsd0&e_ zWw}kMAmzw)hq6cIQ{B^DCLYl4nece|>i4tW7=Bpqy-rHANK?k}}3c#mYZ)KHJ5K3qD-740&~Z&*FL zKFP($Xv+&rnNwy>akIWivUhuo2A;Gs2>;T%qH-yGbV24|#i9Uf$%@q*?@y|FIW*Pu zRmtYJMRoSAk_s;iCNIL6kEBcR^C5Sz3$|~hnwd-d$c!c z%AAkoiJl*?ue`ZOp}pORI6GnT&3wknqS1efuRd7bBT&0}v~xn(Q!T>$=L7vV`a9QC zTzzB%@=iRxn5@sLElpR~iHT4g_%P^R_YciIT2;#?IJN&>@A-($N1kjWo?7#w&d|Nh zJj{N#^_}_bS{IzElSS2ysTtd$*VFbdF}=NTdGI}L$`?bODTy%#ma#+O3HkC}6HhPk zODx1Mjdqs6?L|jw_jH^fRwDq3S_;bE0MZX~op_M0hC? zdU|N;k&DCn!~2e$+Sd{M1zW$A6Kgi#y;N~`Z&TaVGMo5)J+5aI-ncI_Fslr>-(2Rq z+c11@*U|I4@p$6eP2IKi<=3rUs}D2w4i}o|k=l&3FTUH*c^`6$T6HPn&Ydvq?e>Y? z{P+!ufzz0pQf`X*ve9^1#m$nlGPWfWRa;hZUBYZHkggEdskyoCbXc{cY_zq1zW-Cs z8=C8BXRV#fQglzP-+Qyvqe;ibrsfP~ooC=0yi&2>@->iHc{dM5dWWVr%cS;hsrz@olnjN2R(|^BsfnBrY zo{0RT)RXdNPjdODf&~%lwbwBg*Q);|XYr=zOW__xZ^iZ60{ZfrWBk?2s~=;vV z?ZSd4jY(Pimd^`fscQ1fKcN*4rDJqM*FEEHC>hMY+2HK6Hf~T8G#j|A{EgN#83cI!^T^}fUA7I#~vEzxtms6eV?OUsGQ?z&{bM(LL zQgp=Jd;8LAFP@N>_56-%DJxVXq##lmAZZZhK(P(AK?nDy%NH4 ztKz5LV!3+0J7dteHS5UQJbeC^Rnjw~Ew#c%ucx#ef1}aEAX2Xw-?*?Uy+Fa|?b0jh zj*87UB?j9XUuT|x<&!n~OVa6YCk!n;1f8cUxGxUxCwk=CZb^Y(lIO!DDoi<^8D{bel%Ya`6vt# zkj4fTGI2-n-XZbZYX}kTcYLDCYvNex_1_thvU}q9R~Ua9b)1R+F7IE9$cg;%HQ0X_ zAX4au67YX9k1Ig`7wh;+_J8sITAu!|9>2Wb_@g_2e97@A*54Pq|4W-+E8PEEkMXtd z|LBpJ2x_Z8ML$~9=XcRB40%yAHZ~KyHe<$sqB$cqS-dQMA__(S{DS2FR=W6I%b$fx z{7&WH(S9;REOp#kmjrL*g)3Q7ywXMHi`JhQ|26Ey4Zn{9u>-{u@x!{IixvN6D!`N> zQ}I98^#>Esd?{h|`wuKXy}|kq13@q)iajVD&Ex^MA+N*!M@7YM5GnJmyC^z;eQ74v z`R4>JDH;wVYW^`A|C=V__(L}SDLh0f|9=`%^e##~;_q}4=Gp&w@PD^WDCc+1`Mb`C zCe9A0j8nm>;wIoUaFcL4xCOWzTrMsTmycVDTZvnT+ko@JdE)|cLAVf{G0p^Mh6}^Z z#YN)g;X-k%aD})cl~D)L6F{5Y9IjuAqh!nB7#!HhJYwWK#(e6p;%B5 zK~YpJ*u@57Lq!x+E;ju31n_#xyYKz~-}}Ds8_u5D*_qjy**TltJz3`IV}L;Tb=o`G zx!ZC4%@GJe+aEuEupx0L8a0K=(sie%=z7I4D0FH{W>^@N9>oX?t0ZwaENVm|hr(t? zGUAz38l{p)7^fjq#Q z2{)tAlOTyXoqd6J^k`j&7!r$Jz+r>|LEs*enya4cj;;qO9-uQL0dE?04P{`i+Ks}Z zQ)o;ooz0{~a)_|};Rp&TJ`8Z0RjzrS5s4F%3D?8w4M$MvBvvX+MdC2xA;riTN@U!8 zcVLPzQWA+uBSlbYR8Fc=_$-rosqV8jiDb}0r{)DXFvyf)3Z0$EqJ+^HBr=7()GLZa zWAkhWbPu1EsZXNOD(7?p{_HLAYPAVN9TZWi*9O zVF8UgP9r@#bU(Icg%^N7_T2sVnSl^q|^vX7=@A&2IRr|LNc?c7#If!+I+?EPyeJQ zGgxG=cnT|;63(KK6C){JG%B0J1`(J^XlgUQY?zXiHrfd{d5!<0dwBq8IIjerH3WPM*ug_ zNK3=Pz#`Gf^EO-th8>fV0(X2Vh}I|?h}OzPIvMC4$zc5q=h?yF#RkLWXI!lSjfgZ7 zo0A!n7*C>u;3vYdkjVxyl}ID8!T|>+gh5ZsnrzF#;bP6QN1cAilgheq}u<4>e8sM-qqd=gB0b$`$R2qlE@?ysT zn`Ht-7#y=iIB^kEDeR^5LGGK%=1}5^F(evi03NcSJ8VWG3-}T)lBp~vz{2rZ31qXw zlBt}SrJ1lj;7$*~g`eTw{7cG$6m*kO_4RbpE+sUxx{L36BOyLg!~B=^4#6 z_F_>;WTn5U($@jVpMy-#m`87@qYoGnd1FfQ_w1nSJRf4sk$@kE5(X?bAGe_NH=Kal ze`OD3O6pMQuuI4~^G^oQPXq$aS_p)wDguGP0f0ZP0BQgbkT@=aPh1&?#9N_u%0S|V zIrcd|i4hc*|Axe(oGPbQ6Qn-z3`zn?B#MLoUPNaExP%j(ap1xv@`3-EM3e-m^uQyK z1%fziHL{Y6;}f66A)7^TI3kLlh*BY9a1va+kUmc9If~!p96ymCWpf+Z4K4>{aQs|- zAsik#0O9m;$YCxK!Vz)E_gpVNam*qF62gff5ZrKn1a`Fm?kKny<1#_bVjL0@7eU~N z&UguKrV!o>!i9rM32p(XQ~;HdKsd}CRt}?x;#LabnLrtCvk)%R3Wb%HA!1aqQfIJI zNJt8FP#hE@JL8bA1jLz(Z}=jmyjf)RJoAY99u1{e4r{GMU+H|>jRbLi5Oi8E+j65 zuOwnLC4}(J7FY$8B>=oV3L&9|RgeJWu;2qScz(b~LI~GwgH=RA3PgShqUt1Nx)4C!Vl;pAv_n71{xUwYbpuijv^stE+hjG#y~|CeXKG{1dk_501HcUp@qPO zxNw{kKc9pXN&@BNtd9bw#0lYsVF&P|1n^inzy~O>2yid~9Mtr&s=snr{AUitzvZCL zg=7H-Qz8;tVun>W!s5;J5jY$Ik0TO|_=zf#O$Z4Y5N(j05dJ+5)K!8yJgx~RA%keb ztH>Z~RAlfN3l%37K9w2?P_&eAl2DOokVJ7Ic_BQ6gWKR?ez+!mK#Gzi^1&U*!y~wm zf{;EW2H_xa1QOEVLW)2U5UUVD1V0yRl0=LhV1yUKK_KiLV1Iy60P&{Di#MG!SREv! zX@b>40hTscZ6u_{g_Pj%hqUJ+E*#^C<3$?L*$cFXB(<=*D2y`_(t*Pi4}7i*oDV_+ zSX~(eDloqZR*yHNu)t}0fH535Jf8Z$M={J)axQ!!3$!*yU7sff^b05}MRX1aqtsOb z(ubr$=M1=z3h100U}%WdpSQ3+FCbMUi4v+!#91q=&RH2`7T985z{*@m4X78^b zTD%?-xj&r@De&?Lv>9#4>m~oZXFAb)G3vzMGmXY-bPq^1AU^DXlD{fw&xLeAAH9IL z9Ei?Lkcc5iE~E=k-k{q~STG)8cR8V)Gl7PBU?c+bEdp8+oeO{&^o8&P4g4sgb0xSj zn7!dbhJa=<=(#hm=gZDumm#5Lyd32W%nTwQ&buyL$Owq>2gT(gOdutkUsBcB(T|8C zb0K3P1SCsD`Eel=kpE&pfHshUd{ZHuJ`n{JGy@Xkh$v&Cb2AWZ4kAS!U=)acDj>}f z9VLh=fZ75i>)FsII(Gvy%b#RGeN{kU1==X$APpRE2nQQGN$^SV26l+5lZwP_G1PIs zSS2}M!i15378m*Pim=baQE<}Y@gng%NuW^TOkhq|E@Tb*X#tGyW+j1j=hr{f90uF_=nNpVywjD>BEKW0M7`((^rHD9vFCjcyt2$av^)*2@sW%WmrGdUaVgr zN?!&aXp9HebAWK&K$suV7~DAW49#zX^;fmQ1|T7S-oV7E@5Y#U7BiEi6)GnrI`9B1;i|;;OOsmcXxl0II38NmK$!9!|Sci7UsAvA3 zpj`UV&KUK|--iKoN(qbtpmQJ>S`IoKjX**x;fVp{3VNwbbRGav;s&Ca3#|ZpslZ8m zE+vKYQj$A_e-GNM;zAyvc`PWd<~8>O%~gpQngqxkY5*I=g}eX(9mIAp7xJF#S@-N{ zJta2p1mMmPF609!8Gter`@1}N%r!B2GJQeRsuP`ufoguBxCD$nV{90T2&Wi$x)H{O z{DF9l-y1h&f(I0DRK5p|0zi%<0GfI8&Q3*Q#L>3%YVg#G@j}}YF&q`}JcordK~M(5 zY|@v3Mjzn|qFNp>STS_!a>?JR$3z ze>~3iJ>S3y#Rn%QT_BZ?!y~{91n5ed!!Wo|1W;)$sAK}M5)y)VEDH%G%%MR~S^C(7 zKhL!yf6leovvV!gJUp-}87R^s5dJq>6x#h^;sfD^fk3timNVP?L?pzSn|@Jvok@hJ zN|L`!l|T!9B$UL3qJXyPpmFlNwy8)cWeyFrP1VPy{8`)RpW3eZRa=mH{{wBoBx_dN zH73}!S#8%Mp|m+|sXT4h{z2Q>7C_r{_?rV}9RdlhgQx#ENDm2R%;G=?GJpS80IdhH z3`jEodc%BRWX%f8MnYL|)ba#n|6#br?6jMYbKY>t;X=NEOD5owYk|!HPwpI){_G@o zqXcF>5&kX$Z3K@!dlVkzbKY$pn2dln8$g>)vy!<`EJzUWGj0nn^fsTtZbm|zc@nnF zKI6dG5NInGQUwjOfz7vpn2AI}`C$47FgZjdwA})`2Z-N;(#Lwu&y9$1FNi8|>Lp4z zf(f@|QvsMFNfM1fIL3i!pPLZv;7KhwgDpTp1t!?S+1Wx75-Q})7C`>yLNuN=ivBq6 z|C0$3$o4kaVkESK$S;Y6itUXND0^ePG3acmOgJVN%f+n6?!s)u?nFX6fw(+afX7zAW8bV>t9TK+4Y<7823v&!t22HG1d2Pm{D+5^ z3GsL;8&9Ia-}O`R98w&Gu8n8XC}6P-9~r}7fD4Jv;KWc^v(zj~LL!w#VdE|Tvb2S_ zwZR+c>g(!jk-z4h$au-+Aidmx1<_6jD5}jU@(?L?z8J2RC@| znU#dM)W%!>-b$NS#jBiO8@0q+vKjE=ER#9Mg+`rIV2%@5?!q%;Qgi_u-5?H$9T$TC zqq@Jh_h4`+z|KE8;2CtFJXo%bW8;%!D0F=IFBS@i9SwVfP2s>D44+-v#Q-zG{+Kfr z##+q=KesljLBOlorv1E02fhL;Rba)9!AhNV&o7<>2(TIm8+{2I53k4pKRNN%lJTjG zM0^Y>iGqihO@U|eBoJ|QK>BmB5pDn$z9{s_RG0%W0qnCmgODjvJcf8OW6qvIb5}e* z4H*0vK9+c}$WKY1w>uuMtE)Rl8^XH+AwVs76%(vI^0>|k@dGA^V$f)eWVixeqneE) zc)1S`FUR4*QrR3H7%u{>(9SMwQOJM;2IEVi@XV;A0~YJ%BMK10LyQe?CE(fAc(5GL z0uF+4WIPx|ycIw;CJ-#|!L9I`c(7=-Je~>0C|?XH8UerpSO9%zIREV#-6fZM`+E-O0Dr(bBO(d_OatR#AHg43E)~E$J`P5L58U^705E@8XXY>Egt;tkPHC+!1hT60P~Rn0Q(m%2Lec&E91dc2>`4EY%4fs;4*B7thsU? zxNZUfw}tJt87@1e!10EJeY6s}TU0UI~B>0GLJ&fF=O=1KU~w089gq zxA{22fig@Bi@@)=l6fU6|{81D(=03hb@7H|;&+z%eIT{{v2l>XfY zB?$?LgnxNn@ml?51ChiB$VBGJc--NJKk4T81$lIT-5cbg(LeVtNc^Dfzudm#sf7Ny zF+xHCV$q*Z_t_mMo|YoNJc5?;S_#eVkj>uA?M3lug&4D2PrMt^KkYX0$p3c7X_nF4 zCK2xj1MdpWa^~Gb@IAa;^rt)6U|6{B=MEB&;7=$%c>GCc#e@I2gctk2cWgel-O1RZ zbadt(9Ie8<8UbB+XByn1dABHFY;c3&-SETg;nuu63~wT+!-~{312|(|Jiva!@b-my z+wCwhGFfo82g$g(EhDG-{mof@;5g!gB_ef`h300QaE%m?Bd>-}R~IG#7q|k;6E8G3 zg8+y*?ZA8s&a6VbYNX!pMO{!7;b8?e=exH!DTGg)YEUP=SpG$U%}alS{%Yt&z}us>XE4=Iw^`8rRU3t;v|DsdTj7j37%4d zZB+1mMQ<)r_27B%&l@mW^gvwB--8)$tYbtp6@gGp$^uWb8x|>Lw?kGj<@!?3D|GV- zx`GBGmI)5R4|DTJVimK`Zcgts$7Dux3Ll$TiZ~cDKKEuNENBs6L z>lr1Zp0{n|Q_`a9jyPuQjyv)FdUs2l&9dOveuH5Y6MwGjsXLgdJyXox9PjF_UyIe! zmgU-9-y-PR@&uzlH<|gGo8FG)9z8U41eH8sMBJ&q zcu31&i%s2*D=(6U;%#C~eb?_C$Ji($N1qonZAbM(3lG%}5BeQ3F!~BA}s8{7dPY=B27v0yZ8|$o6kF`zU^FV$rH6 zYo15fto`kf`68%0#Soul>uYM1VE^90WAGB`#9Q^UVzY6zAEkDEYnS~{l%;yA7gSf4 zo?D6E(!%&+eKfE6KD#4dLnbe1v61w)jVBIk8l?>=^*y}az9TYW3Bzk>bj;NDdW+4{ zVCZ3;;&*3HK5ecWt~JGASLKNohmTPa%WWh!IX4odreA0Ch20jmKG5~$^{KRr&C+A* zlJ71W(C>*;qm6PJuRlMiLn(>o?-=24wtRKqkaW5KgA5Fr2wlfTf4^Sv#Zz6?)ncZ>Xu*_4*D8mEdolu| zgD1-f&sAwH=+aGUX4lO1`(~iB^@4;xjX~BwNyt*bVp2 zub*6h(EhIB$_p(SCd)fFdFS@zMvk4Z|BMof-(MsYdTjD?&pL+q^{#rUgSM36#i`5o z=rPIl0$LXZzdd#|`Ym)HH>qo#gB` zTTRpYw`OPQ1F7!8sl;y|UQ;s7UKw_4DZ5?pl0&8yx_vbqG!0Qn>wec7dUinq*^zc2 z?X~3I7QeU?DogTi$v2D-eh=0BbPab+DZL!G<00v4ZT^PbV2iYoP^{9Wdl zKx=n9Lvo>k=B1Da3uq?Exb`A}Wx;tv{Jm`!O6Si9zp-2qi6bb78%dwO=pND=abucR zkvobnt6$T9jCe0RAlEM*b?n5A%ij$TzVzC3lmFPO4wb`BwEGe})94dxwr@#zI^_RJ zm17;V%p$AGqprX2%kGk>jyHr>?>w6(on^$=+sZ1!DlOKI32`cYdhAZs_$Yrh=@mKp zMgv-Hy35#6UQ2_T=bj!-p9yn*dAjP5Lg%{7R~zpc-G8<5mf7W4Z{-?4nxmfP%bBN{ zlPQ+JV3M?Yq~J#>fQ zHu+1IO_Y%Z--MSfkgIOY)|y~#nL2A)pMJDDJHAZEPn_Lm!CN%2W6RM>!jQgn6jBQ{kyT3 zy`AcsG_LdES+(uu_9@cqU9V|6=>@-nkHZS9ER70CHd88k>$= zZc)NoOPB*ohdBh_`=NT;9irsM$Im3U_ykEl(&bZ|{bi}G`;%ZE2v+}Jhzs)jAFJa7Qv92q3B zGzQVq)L`uXNv!H=?@n~HUkSgtONLF;QkC<{K6U4P;s(!#KXaOC#;huR6Vq?k(P~SN zZX?y?Kp8t?m2UVQ=?`CZS35^{LO(L(WP`5sQFR^ZqiYmzeS5D~Yi{pRe^r$YeflDs zy%L!yEGw%tcx+|Mt)?=k9Xgz}D|CN+J$83!`^@3^RC3wWS10)m5%rmGYgfeA zSE9a1i+*!izFjI$5SLu$l$E|AC&DEu>45W!v1{p%*+JQx4Ou5b>P(ZgMr~Dhx%q2; zJc&%b!V#*BY())t`|piQ%{OU$X!HmFAhYP+7;Fd+Jko7V5+&+a>o*$SsPxMln0;N+WLnEl`iOzvr#$7IT~JvcMeTI$sJ?{xDGj}<9>L*7k)61YhLv|DH-x@0-{EQ6;qYv` zuyw@ltZik+hxV*3-Xa#ve<0XCHod^M<(tNm>61mA9;TMk_NFW;{OSWcrrPTsTzDw1 zQ)o6MwP#{byN#kbgn3YPfh5ttr?E;hMIlDq)Zy@Ey87Equd)VwopP^k_HB0@S6;9! z$SWnu%wv6Ry9#&VihwbkW$0OLkCQ7TOE}7bKDBhS>F*2b|c(pTlanmDPnVu+VfdsSqbP-48-z;~2x=^@MY=enx zQK&}apz^&HZA#9!Jc~q4V z(&=KM~_WloH0ppY5zCul=Z%}C&rN&m-139j^lq(_Pj?t6k zEj!;W)(LQI9L>L;Io)-t$--nh#Cx-(m7>wq9!pKT_x^9Gzx9=GioI8N+4@CIfx?iH zhS*Y5g4oi4o$CFm%ZzI;9$(?syWJhY?FAM?3qse~JT!Ri+6xaxwUKuTapfD<`SF)* z#Y#m4_C7Cj-B)P%A@UiqZ7}xrwQPeGox*yiQlIbT9FNF4UBx_V9k57EsbTkVm*t+4 z^p2VyBaD@!=Y(k9l?B28Q_Vl@2q^aZeF@Z3cs`76_HVf+GD@N z(Jr)9!vxyro{te*?)g3Yuq*Tw=dK~7x3mD_N9z@Qtg-AQ-tcugy9F{8)x*WPTXniP zhMbBGIT`5H`@T#3?P*Ve^^a4=p%6@3)ZS)rADkF`&wD+Re7 zdCOO}Pmi(Ft9Zo4%K3PH{1a8t%Pli&SYr(>aTkn+P^!b>>yqkMk2jbfh=mHqSBnV~ z3)Bj&%D!;|0tPPgJJ#MkZm`M*kv;e+)8h2=1)EY7PHhM_QD-nC6cN{jiM| zy;nQ_d6x}7eb2U!&)mzj$OznLYyHel+?V!a)j_`glC|P?VY}@bpw}w(?q8|bJFAv3 zRGV~Py=-7;Y(Q3`JRiE`SZ`7GkI3Ydp3vzXdiw>b*7m)#g*f1TZi3Gx*)TePq7>OS z(>&yV^fcZ21Ik0C&Eafm`!ST>3`5Q++wOy zZ@J*5$K6g=y-p7nVQJ2z6os4yN8wjjV@8(Ws$b}tTbA_d=|%0$o&4{dTN1V&?Q`5V z{bu56%dSW7(TB^>a9FePS~T8=J4QRg?V4zE7-#dTk!j(9K6|>$=C9Rq zhxS@Xp>}3nAjeyrZ>pet%Q@6s>NR}3SF{o}~Lv2Tjzn(x}c@+`svFxg_{bw_YJ~MJ_{o<;#mq+EZ zDn{F&y)`Ab&D^#%OJ}4h4N7dGuQKi#^xSiDI4xp{UDKqE!B*E~8gtp5%o*d)mNE+_ z@AR*+XnlGj>&3C?;|c}cGHyN1IVJ2Z2kr*xjC>_gO88Hqjx1?9=y2oP=cMu5GWRof zn2Vm{v!W>puN0`k%I0|nZ~Wwk{T|v5`Ki47+9dxiW{NN{s@!~gf}Gpd`ytpf>Cjh^ zk_c4u3pO$udFTS+ZJT|@`T8SDoKD+{a*l&NP1Eq+gZ%#Teubfc#n+|#oR2vlNm$Z6 zwqliE-^Xc>Vk^g&h*w&#b*{2onuQh1tj#v1Wo~^`K6R{sEIm`@efacax^r^l6B;>5 z+*8ErndOX(TRLMUXLIhccShmqkt(@#{g}0c(x|nZk&|{A6_2h(y^W4HJ>cnWJ=i96 z)^@P*u42;L_K9g?)WiDM`)TVJoz6Rmc)#eh`KzsAW#scpk#7_Sw*GjQdvxa&N7hQ| z%inh$ecpjOGqdR0iqo>5vDQ|`r;g>8pAw9(o4DOQrMULWh(G>p##QVE>6jjtd?Rk( z8=Ln!yDWnk8}<$zIob8Ref{$tnS?8)g+XiEJpA?Uc-F0JRH@kQb3xJOKL4#g(umrr zkbt6|HnS&c45Q^%9aTGSrZt1gs*BpJCwG8Y^= zhREoRA$C4JPU)H&Mf#=ryJ|O&2s%=(xgI?4dA9Z%fpF(+bIzwDIg4*!Fii?t6g}P8 zneT7ch;frwVuz=n*9+2+R>$pcBoI&5C>-wCC2X)tC)5myOLYArBI`U=ctU_ zr#&SM>Ov1ZT4r_c0&QD{yI=oJQme05I!XBWbYIZq>f>AELY}ph6GtPF0#S-0cCQ`d z$|Dk$r_*&mVtc+UFgdH9s8jtd7oDvuWuOEFmuP9LwmriLUpzE{u___#s5v9rGyHU6 zUU;A|Cdt1nwt6$Nm+~9wlgj$`9RimaP4_2*k^%%9?p;n0i8(OtR6Q9qQ*D&;Io`kE zRHs1A`NX^|pIt+H4dY%H&2x~MRz>f8ioXY^_LgLbQwm72_- z58oI;IWOsYr6N-{_#4--M`}4j$+M(>6{i6GNwrCS@M_odamP2)=Fc^igQlX&pIWLe z%CNa{dDM5Hd~8tM+whfLKGWo)xUX9AT3PLvqGA$dOAFAh8wQcGJ41@vwj-%mU&i+R z_U>KImg|;s`(+lmSJ;{?|FM0OQOq&>-0rbg&-aHiH#=@uF#bB0xNBpGxapvgOVaxT zV+W5W6N4s?-_h4Rd9pvLY5x~US7RW9y~%$pM+|9y`hA2_cMDE-J{y zqg8>-hNzy$Dv--}un*mP;kEPg!h|5ynZCXdwj`pr%TEUTMvzPqj+0zW8)&*ka*L7qidr{B}FXda+!a z*`P;`m)8}?sYZP5^tT0#2|2$tD%8qJesGf^4@P_(2>%}NH0tS#+`F-zw}ksU*1y7V zENxdX-!6VM^+WMXGiv(;>OD#5rNIR0bNWH*8oB&QE5ZK9TNi|UJ`;t}S!Yx^aeeDM z#1`wKFuoE>aewSJX!(w+iiwbwV!_6na&^k~Of75IXpUL6=IrDJvt=RMr|;}4uvz`v z`0B!?9i+D>dv?7ZMGtjO;`vn59p36r-Y1VeJnh?k!eL#PM#kXjf%~$Pm8;feJsRF+ z^-%GhU|`{+@D#&kt+Luheppi#CCvv|)306&d!_FS<#xX`9L}8FjMUP2FL<1~;ovu= zPXSlYwRrZl1ftR`T^h`z74?oCO;;fH_-kED^bfOn65hD&?T3dV+iNQy+{@ivy{fAI zx>}wkVQ5JP zV2riBe6e_ihJAa=g6?Y(!FdNS$eNdYS{jghDgVvHvuo_OJ%_wP9~JC)bm0PPJB3Xi z44iloa~KtLpyZBM@RYlCx_gE~{F9iZyXMUedmA*5;*t&6e1Zy!%4T-j5jQHg*i`fF zPhaHbRU5QdOXE`KDUIm@D1=in-Xr zhH5Y7G1XEh-F}qfgG-*T{f*aLQcn~+r=w}DU1PPgROQvD<4t9|Zx$RXL_3yOT+k;8 z%h*Mz?y7kkS58Rx(~KpUp_Xk-#gDISB!A&%na@a^dtEJb;)Caf>sfJ)K4-=IGSzRU zoEsgrn}qVejP{t=O-)J{eE;qsS3Eh|;~V83bob&LhnbI8Ob*C}tgt#Pxm1xI(o}QT z-`?uXIpu8w$F>%KJXu&28mK|-5^$7Qkl^L2mVW5~;acCbREKMQ!6kv{n}VCmw_ofU zXaG&+HNLLtGG95YvGJbAz7Gc0!Ru@VZ-kh7-HUh`2@(x@u%N!Fwd$U6&g%DTMbsZu zy^K6mU!=L#Rvk_w!L}fcOzDc=+y4>ucuMg2E|;7BZ>z8)y9TgdF}wDeA!q`5MU9w{ z%OlY#!-@M;pV}v6a{L1A@*{271gBjd$wyYb zlK0 za~9+&s#aW)G;{b7=&~~VidP}I(_3P!;av^8`@mugPn}iCjdIF*%zP1FA(wQm=pY)S zsPRo@eOB@2?XRjU`Hy4hd+V$FzkJonydqtw#J|^XH-An4(i;vWU>DsoI_}bK>!0eer5LJN()$Mr#6DK`VnZJO>t@U595{yxsT#8h&u2 zN@T`g4^`OfRjSmy+d0$alyl~-Tm`%Ag_mUc_Brd{>-}yU-{S0U zudoqyJS2sAgiBqvN_tq1_RL|$&8`fY@5<&X*efz=wmaoJ_g=5FQTAW|ps{wtzIDq4 z?>K(7PPH9oXGt(dS5-b_%uSO6k*%85N8{l z*=(WZkyK_}v%PHbCCsrS>Z6~WtFpCcyc}+}4BlKX`j$TQczmj($97H6gBg{BRn@9~ z8&?Wp`h>howy2#MlK$AB{kA!~%1>y^X`R?@gLmWb`lxlYCn^T>Snsm1v99%qo!pp(-QBx* zL;J_{3iN{ZytiAIez2JGlr|#1DpXR?T58Du>Z;aSsHTlI{IeaqUm-*$d{70?RFbe3LkFCEAQBIywiOQ8MJ5{ z%J@re*Z1v}Qs0p2#g50e?y>WJvufJz#n-+}mdZ<&U41Ii)x^zFxIwR5PuFQ*MV$`d zMhkeU)0~8cZMjjSIH@IqwENMrH2b2#OCa+djnrNqAy#GUsw6#5QJ?Grg`0gIhx~>2t5y-WR(%fx)Me)9l zkH~3i*XoubDTx;2L+K$NtBuO{CZDkI=bF`Qy@r(h&aXuqaq78h(TI)3P(-pm=+B68t!jnfYJC!z%-|Xy-l3D&e)3kZ7h1r+G zgBm{P`QEh*m7H0fRCacf^6H8;l?og+Qfd+3q5rRzZH$eR6k?wrpml-(2)w%jxn(Q5edLV@|) zI)^hFwlV?tZcVLZ_iemYE0XnMfl0zti}W6h(2Q|}*EaPKZQ~WyI+dC?W9WNLWCWTT zOp{y+-$8HiTMqk%TihKXy?2+D6Zv{8V%JJ0*{uB`srxb3?YH>B6QpCNwyx~rD|X2Y zqkJs3_3qcDsmMJ;2!tae5}XPVI0Wy%i;t(2oeMm*{h_1e>BA4z(qsx^u~C9d}lg|*wB zJh<|}GTr(OYaYrzDh@5WzI$7-9_7rraVOLD63YtpxWhLK`<4CE`5!9eyboH-Xdx&h zURpY$7wvq?&m3K%9MsYf!CAlVPy&9Nf3b+}m|AW4CiFM-f7`vhZrVWAK=??n=cXE+~_#4f|QwwR4p1vDN&ogU7fEI zd8Gb%cc+HCNbxhV`Q1OP_3hrrwTC zHhH>`ae0Gr{ytLCC0cZ**t2>agJna{4MOXjHO2J;MuZ}_+TC2V+Ufo?(st6}8%i|tE)=@IwF2kzkpSdBJQ&@#~U%=whQ05vFi90 z>pg;-9@jiL^1@eGE=BrGr^LCnty%e`1!HB{G{5%VYUK1l-Bnxq>B8+cI!#vT6OnGR zPtLeH$YR`yL)oU2zR&Y+CSIweZLTv5)rk@szfFJUablfNo7BjKklot+1Z>ioZ-dz< z&gaM=9Ej~UqW(&98t=)A2ks$`ul@XX?Iz{aBF+8&G?$oe!ZX=vli~u7rP9mc4`TJl zPb@$0i!q>RGFWBqL-@Pl_q89M_TM|yCwu>NrA&HFe3){&9OLWRPN^?c7bl0@aw*50 zgFbrP_pRd^PRXKG$>*>qE^J?;tQz;ytl`*x zOSEtB(l2^P79<*PR!V1L*ELYqiyERg_OaBvlqsFaOqKR(q>BrdtAA;yH3uLyu zO1_P?34nq&kGefapmN-g8)@vJ_bk#9?6j&{Ic|ryj63(6jtf~_N^cwEg$srxTy%HO zVUe<-rXmE_n=h3)^EUfayxZONcZt2(ap+wF!Od$u+5?r=*6mZ=uX^XZagdl#^SH;l zYu4|mMEPZ#1kx|q48dnfIKR*53M5#@2&AJutC{Z-p1>-D#v zM-nog%lCeYl(^z;-I^l$%?D`_=z1j@ae}?^<5%_8es{8vwY7nxqtj)AdT;HN>WmaV z+WAogZQmB`be~wvTlXyO?f%B0Da5oC-NScJJQLmHY$wmr8vZa zBV;aF;B=N4h4<4zVZ0x}0f)Sj3}#Ojf-`%(9|nR?gMp){fO76I>TETNO^pUP0dNKn z{2UOV0ml<#=US3e!4Z9GWHLC@$chIizyRI9Kfd~}+48vmE$hEU^5p&TB<#QD{SPYt zJQEAfKF%Ht<@?usU>)bGh5pd}zg6*XkvzTsbTs#$1tR~J&)*_>%zyUi_fx+AEa1P< zqrW>u{Qq9+uV8dK~+oMWSY_|9v$79o;|J;IAjZ|Fs@-Z1~|9pJsCmPb-j${-&2d&o?IvMo>B6 zw}eP@R-3=&i=8vVpU#{AYx)0a=9%U2SEYa(cyEctf>a1zteO-5`{DNgn&dwj2$?Lv zNd#}&!TLinsAR!N8h8_t{7aJhtFFjoe)#k|tSX$fWB=o3(ERUE{m+{U&i-=M|DxgS zvG@OZ!(UGQ|IZuq9)SPzW&*rl6(N|9k#_%w@Aegnqsg^55nAOQ6l?p}(6l{X3KVoyxzw zsq){|`FFWKo_EqqubHz(Hqd&=o|w0eKi6KJ%k=czd*l4kD}k8OVN|)59rV6FKBtR0$K^J zPRJ(Y5b_9{T6!kXVrU71G(mK5nLmxpmpc@J4gmnZzLI5F%5Kf3B z#1N=xTl7-2Jt38_hLAvD5fTY(^bPb)^d0m)f(QXiz!AjJIJ5>@3$2GXL7Sru(K=`X gS`#7u*OxQ=QklRe;Ad85-@W4({Q+KuLn4U(2PlHJC;$Ke literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Compile.Phoenix.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Compile.Phoenix.beam new file mode 100644 index 0000000000000000000000000000000000000000..b89526eb6c330d7f834c7dbb79e9118d2d826542 GIT binary patch literal 4940 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Digest.Clean.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Digest.Clean.beam new file mode 100644 index 0000000000000000000000000000000000000000..33491d20cf5f770ab3b86450733678b3787d79ac GIT binary patch literal 4964 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 Rgz2OJVBcbRwP_sgzX2rgAlU!_ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.HashingLibrary.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.HashingLibrary.beam new file mode 100644 index 0000000000000000000000000000000000000000..754e2f6a451d6d707c93484487930269b434a0e2 GIT binary patch literal 5856 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.Injector.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.Injector.beam new file mode 100644 index 0000000000000000000000000000000000000000..aba2ecf080b7869672d95cf3f0477baad7a4ee61 GIT binary patch literal 20040 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%0Ap*CgLx9=FN-xmJx-VOPe&m+q}7U z%tR`of9L&p#UpxWr-@0=H?Gwwzi)#~@;EYd_JoAIZc3v0j<*?~Gk6Y8qYe&Yj`yFb zE9qI9x#g^9c<>ovMwMR8kA970i-EBta+?eu)JqpA@RB4q4#w5z<3B2mCU@!hr}bxT z5Z|ZAdM0T+Lqw3GizZ(9CP-x5iZ33^}b^TRAZOS|>CN%li+ zg`~KxH;u*hk9Jx6u0P!19*L9_ZP@QAxEmZ*?5b`F`WV#LMZLtbUdei=pYyWH*m;NZ z*WW0eI3dY}B$2Hu1m_^RQn5k7rlvg>M5@wGFmpK`^#luugD ztR9Y-#@JhzX{5G{j5je4Cb>TwRK6KZ*RMOFsIYNS2LH7klBc4YwtU!37AZ+c6mc9= zlRCCxiO%ku8LYitp$cc4m7&8Sar^b(h2B)Iekqt@65zKn+wr4j;h8G;oTtNSBsbx) z8Og8YX~bA8|Ka=FpN-yBqElYFl?BHK>=Z3%x0`qa<@V-BeJ%NFBqp($&m>>#`{LuP zbS4tPGV+~J?jcFVKYK;#|s|!t{$j-T5(>`;L`@t6%U%$4SZDbRWG9-s@!pJ z)5VGDOq~~&hljm*^1G{BE@M(+SKjpsb-0B*JehP=d(ovGaz8F^yz@>Vc6)e$=i7Gd zij}qJ+qBh1C9h33Ot)#jdQx4PIiQzR;!jLrp@tA2YuxOeTFkU}+d(sO)*xPFd50b$D7-E3qTDu+&nsuUqf= zu94CVu`~_0F_*lH6Wh0}?%7|`FMhRVPhyJTeWl|5U47FDZL^Aw(@)=?tQTETvb5Vm z^KR_7Oxuct39|1baI@t77+`DH<#7Xh_CCtBMqh&Z)=u-FrK}qh-*_5 zKb!<-Xw&bU-dx>N{I%aM(>mnIZticfEyWbEVM5fYbio=UXZ(Tb90wqDl9*=nmF= zavHg|#`suw-;0g02b6NddbwunJ*FA}}EfI<`OPEX0R#=#G5WZ|0Rnv}#gC@N9BWQOD1AILW-!!O`O*^(B_0LS6!@VP7|Gog6zzAKTEHX{Ax z+ed{vUsnug`3>qBUDw!FxL?W~otYuD$9z%EOvnGq zc--ZDTb|vP!E1woF{{iGZVil=edon@mTJ>o>`&z06tG;jcs#%_Wkbu7sYe~+Hk(%+ z(XdxgvL#D=t8gQxp1*)Tc+%ZqZM6MTIe9%5qwPX^hd%8YaMi1*$i-hTg;wtmo6v1 z8A~?Zqas^@48fz9jlS1UUKxPd?x@25K*qnxMm)F|8nqFXS@Yfgv^Uh(9pa&tG#sj# z=Q`rphr8acV)V{Xduc-VYHY>l`&Qriocqq7M7dqieN*0x_#Q269T1YxD*Ab_rq@pwo**xkV+ZAr0Gb{#YN34nuU(%wUp_ z`+n+|T4R~rC+|9UJbzReJ?|KnbJM%bF%oZ{rcM*&f+i5(x(m1o5;Wqi#KhyVCFqr%I@-;|Ff7*pT z>+!KvLUsVVi>I$M{qyx{_t?_3Oyu=hkLo?#p(B|Cp6Y}U!97On9|xR$kHN;@o_X^< z!Dg!Abn;QnvEv2$_a51XXBr>b7!moUC`-Q%?Yy{h+q0pN-Uqf{Di}jX-+bSHqc`}! zZF+LskGkIZda9jQPVg$S$Sx{xXHy3;ZnBfvdX=94#2_+Vmo`IWQg26weeZrY-0b9S zcjUpT;?A@lUyr-TPD>WOx%2Y<*W31QznsaKK2^DkXBQ)~Vd~!bJHv$GeZA4w1B7RD zGEeQb@Th$wE$QQr@|MSDEnjnu?@5UE~|`2xpvh-I^t06q}}3 zFKLl`!HIZwe)%VLQ2({*In}@W&s>xLXShF-=C3OL)2-V7TEqWt0RFD_ zTqyk0rQQEo$qPQh9+AJj4*WkW@o)S3>y_ePZX5q!OXe^DliMG&A6&r`&pY>%HFEgY^#7CI4~j7~)-p-JdabPjr(vV!t* zv?tmJ?S*zmyP(&h*P_kPmS`(94ZRY57yXJ$@jttj3p(ST7!CJR6aaiDnpfZl7Xd;L MxcR_UXdFQNAH^4o?f?J) literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.Migration.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.Migration.beam new file mode 100644 index 0000000000000000000000000000000000000000..5f23dcb87122d793dec859f4b6395aad5cd18272 GIT binary patch literal 4796 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 NKz&=%Mh-&oe*ip*PV@i( literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Auth.beam new file mode 100644 index 0000000000000000000000000000000000000000..4ed0d658f7fe4235fce275168c36edd1c4b5266b GIT binary patch literal 62584 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Channel.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Channel.beam new file mode 100644 index 0000000000000000000000000000000000000000..6630751a1c3302228aef1b54ab097542660f4beb GIT binary patch literal 7800 zcmb7J2UHWwyH5eKi9{lyOIdn{AjOI-9TlYrf)_P}WPwN;NvJAf<0^_GiV`UTf{Gx5 zUXWtJ4i-cO8zR`nf(^vZn+1S&u?aDvOWR94mg~?$iv%xzPmJZ z8V*OO9T^!p4Z+?#ZZcPFH=mnq7s8UnN$dh+lkI#_ft_b8OCUgb=}ab95G`afi&;{s zm>ZQKMI|D(kT2r$&|(fM5~FOE6y?;Q$s(axDq-?D&e_ok0=ASZ6i6cZEVfuEVSvU+ zzL1l^Ln9?paROV)5O8^ssF=qR#JrC|rOeSzxu-x8OBySAFJ^HiC^LyGjb+B7JW=sq zaR$n}7~%v0r21E@U7%RF9A!(h6ZlbLl*ePa1xB-Y67-)ku|ib9O|D@J1yVFw%4CT| z=}Bl56LZ;tF(5gq{7D3o<^glXSnFtX9b?Yi*=$rIVSun9`dHIKP#HlCRx+_9TPkFN zB*Al}ge?@IoJimW6>u0V9uLbN>xkkCSmKnvG3|M1N|I2_VTcl>kO4auWyg)zL%`yr zOjaU`%VR}xd0c6VA%cZkGo}~_cx1VdD-dzGVoY|t!v_qG2uEZ*1jLiTV~NMJ8%-rpA_DFpgE2?{M#n-SI}VlBB(iv14ij_j z)-om=jK-kJ>0<~n95*`;6$3EAu4#R86#y9~OB^FHjO3w$7-=jV%c=Pr1|T(Cu7JlC zpd8zA_}M$y;&3=mAqU0bl&FBE0m81MfMx?C<7qM+LDh(chi4LVH6hh08$31yCq$v* z(6tFU8%n*8I^!A0St1>eAgbUu5b?!GLFP6~= zsvmLq8pIa{{Vg(>ph}_P@EwRRgD7JxpwaMsG6b~IY54cb>9i_Mk%F3ulUE1_AxdR| zBpir^O4CFr8q`T=sgv*!4e>>YvPcq8geD%cwb1)rg215L3rPYCud4h~XjiT16Z!-58XNVnjN~Ta)q&p(M*`O50pzc+g3^fxk8AK-`eTZ){9SkZkz>z^}B=|ix*pT{YR#x(? z^v+WC@Q|Ji(jeggZ~zFfxWR}+n)0~4oT>UmP$5^U0Upu^mb~O~8vuo|ff*|-WJ}in zXKCk=^$^MwV$370G1;EhNT~Ccv?poyDEELFUpuZJ!0ZHI?!|6UKff7io)v>psRWdCP97&1ujpY^cNBJ2F49u`x` zX8)ghILJhPL_9P_24U;lG_W=~D$@Ys6cFDQI^x?wltG3h7%V1Wc~l@mFr)@VoMey@ zkah*EvkWp`sYrv=iF9Qe4D_t2E@5~rf`3nsOdK?}qhHYWHPzfp? zea(TVB$fmg2&HheFhRhvqfkPGFk6g**BH!|+Q1?n%95Zk*pk3fV3W^HhNWOLHG@Kd z!G%4Fz^*C=?5f7xV77sgSX2PBI2^gsSfH>}D1Q{7NxYOX9~?LuywGi6mK2VR95XsD zZZv}@jEYJzvVlEEbEaUnVOv}5ZErg+MREVPmlR=w7}y(6*#_h$hS6jeA7t~NPUi4M zSba@EskH!M@85}l2!JL5QU!zuqy|VG5O!$-!ep@vfH0c| zfM7tFycr;KK-e&2x)y-2b}K;EfG~NCw*iE;W7`C~F&>j=08#)n9>aLdU_UIsoWZXP zAWU~EAo>_T9o%OC!sKTHnl;8_xnuhcOdjLi{>Ec9!FwlTwZb_8!u%qDFj>q7#$y*| zd)$u-;4vSV48fl(1-b-dz+)F?kG75ne(|w{BqG2U3%?vZX{_U8J*O>+bN8n^ZLlgk z@-{Zy;Fr7ylO|x@c)KK$XmrDi>BP%*;{FcCadd#aJJ{+<;N=Mt=_r8ZdvzGw*I}^W z@q|fWn+UU6BCZtd_)=Ne?*6}^d)#2KP{^lHfYS)M)6oCsl#e-!0`o_ZD2zh^!~tGm zY`@PHz;b9>F~Qy&2AgLd7aTEwLs%>XGZ1WbL9jw`3NWuHH?Jv45MhT8`!V-SHkgcH zeggq@xq!;QJH{$F-hu7=vDE>n(BvwVv7S*gCh|6Yk(irkFGaxw0TW+hKR&0&ME{Cs ztU+R*0Hz{ybjpt!GLRe6_7Y+#f<;9D>ixHs1jCY&Tm&%V*)5B3xBYGDk|ZmOC3fSi zrIiWJU&zLAh5%9oJcey>)|0n8g8TTM8N)4xJM5a^4$gJpzDkZWB8Ia> zi9n7y0S)(DqSBo{!RKAWriLS%Qfx0S2mRzIG?taf1HE zn+i$V0&vh0v62MLvBQR#DH02@vsn@u0~2T#qe&`23S&SYDq?|#iJ*a%01jzfJ_Z^r zSS1O_g^kAHmfB;Br^KGaWeHf(+-UoS!f0s{(6R^V2&G^S*rJK3KnjLlevq^W2Ve{b zqYpf8ls!PYJ+}1!3mstmL6TlkF2DF-zB&FRJR&zV!y!K;1eGa zj82H}-JQ5Xt(i1gpS8GppkXfMu2p8Yt3&<8TD8UEIpT}YUkwOPYrDSL* zIW`HygM**)>vsw^RmC-vod zqDr&b$-p-nbLuuUzYIT4n%MaM{sF;{g$6FO;o*%Bmr9%KpKueKecOa5&S)gk&_&te zj=I`%mE1(l#TqWuqaDZU)@<68ll|CbV$(S#lz)QaH>Yu5ejfS9zOVV4^^RBcw|eNE zytPu8G;6KygR(34iv)VNKRDE%h;|FFs(5s2=C8Do z8@6u_(XFo~W%oxNecF4&wWoe%M0?Ve&SjOCT05PaN;3;Qhh1`)?U(*+y^HRkcq;vj zE8*v_E83tzO+3_W{Whk%Pu;x&`fAgxcLq0Xi z>Rmo|TfGz?TlZZoU}usv>wdJy_G9r>lF#gJ&vt&{RUOubXd2fS9F3F*igfwbiX2d5!+OWpH}O;cLBbNQ%B}?4G(SkRVzxZSRf|SbngQlO-Bo62O=dIZkPX3xz6t?sH9PfVW zk^nBt`}o$k##NSjmj*1W!uoejDK(#n&NFQ&FHY<2>}O@@1joPZ_q!oYZTP^8;jCY^ zzh-jS;{`VNqUysZYKAo`?zWF&MZG%j;CtdtXum3{abS(=?gyPqktD7zZyrBC<7US~ zS#Hkeoefv}f1P1IH9OL-=-YAkXh!&X+f%Ct@Hv~G9PT`LEHqW{_GQ02z76s@qFr}p$3Rc65XGB~@qd5X(<#r-+IFAd;irBtWe#34;t%5hcxyB6dt zP#SmKG0FbQ%9x{%Ys#&iV`bZOQ~H`w*FxCsa78V9AT`6%s;SF?Tj+59&D4uN*|ydy zQD$lpEXTd-R!c70SR+l9CF+YV&1ZS>e2vS0!Hp|g6R$yo*&o}Zuky~cTIv?m>U{ll z{d$r2gV5iiR1WLc&k8g(T)paq=tCR5HZ4o}X|1;4tGMCWaFORw%=|m?bGnX&-Z>rl zzM-!ny}$YFw_W$ef#0DO16s@WtABHd_es7dVBaw<_k5#$jB-Wzv#{e^S|fE<-|u|{ z^>wiUg)Nya4gOD^_e{7OU$ehnYR|}e^*Mf~=jm@xc|o!M=QsC+1{}V6;QP>t#)J{4 zo+h`-h!G9b-0u4C;ZGVmX}av=H+%9TXu_|)+ z#Jnn#n8!6O+H9E}*Hmxj-2Y(v9_au_t*1<(9rvMymiOmO>omK5NmRG?#N-nX&&RFI?qAUEZuYe2D&EhqcOM;h^AFuQh)#?e zG1za|W}nOKLUQ)(Ybt&v9>N6_zv*Y6-c*=!YT5+EO7td&;)pz~V||$S{QhDN! zRpnc=179v>=;sm_*M!)_D2FlM_gOVg6V>i(a*?<&ucOuLZJen616SXhp5L73YBb-} zd?0(eZuQr^q=LT4bCaGwgKwT(=vlVHVWibKxb^rHC1T1CMbjm1c>m%3gj*+V7=NfP zgf+FA%oP2H%hLOo`Fxl^x3BNyk@^e%k*U>ciW}lTnp}3;7eM&-4%R)rz3fRE@m*pq zS0`$}={Xqvyk4qw?b#r2(MDIe_qchBK6iTB=BCBpJ1%5q%#4jpotu51lCU;9%D2M0 zv|4?)nUaYxrE4dBxiE%cBK$;DJs9}2EPcJP|HN$M;`f;0XW1<;UQ<6?{P^B-Ct(8| zR?7?M@A%QFQ#Z>_)4As7!nnxqwJt`!$BpujXLEC(y@d|UFf1eQWw2a+3~1)NGCZ?l zQZi$#`J`Lyg3=Y&%bOnj>a;t)H*|3r`_;2URd+x`TIt}Y<_Bp$KIW#PJ(t3|qoQ}u z49kp8i~BNh{o~(!?2sn(-jZa^d2pJ_I;Sx4Afr`t)<}@7qNx1Ym!UWF-V*&<_~ikW zS)0{kA}#g#f;ZEreSX-!+9xdNtlAsw zoiDr{;3ykfn06Pho_Q)mrkyBS-*#qVt5&_}=*!@uHJb`<5%dV=VSDouE1mD()rh*h zxZwNC6VsE1oeG<0R!R)a^^>PX+_B5}=@03p6saqJp|@B}@9W*YV(T|J;jUFq#Mwk$ zm^BhQ!P6$jR$Yr;H&Jz&ibs~q{Zkbyl(sFZjz2qeT94$Jb}9ZT^Uiw8Pi+vvXz z`k+4D!OpXwD7#v=y@=#k{^ES<(d(-{R_SNnzxTyA$|QG7n`>jnB{9@Tn2aTdO~_MbpMLe^N+pWw9?A3oRTj(9hTZ9UsCr6u5_h0t)0Oy zuxe7hJN)ZKY|*j#+rDgF`};xPNk?s-=F|=4Up?1$ez`FE=urNTrP@}16dk&Px91iaK3d z@k|r%ur@61iOJd<-qxnRk1x2ih7@jjxHZ|n{*hr_;R`FJ6=$xw4Sg2`YE6qwxbDRF zm|yir5OX+o_xH!AA6(QXdl7o?B_3HcAxnMMtus?^e2~)h%>A7b*(L5)k4|f`gqpXP z++VeQs;K7m25r?7BUeJ+KQZ;!9oZe=VRe7wKu}Ely27F}C;epHwj^q%Z0+%!(B^kH zwpmYfsnFY6tMhZW8hYPt26@(f=&jl z=j~0q26#4ZqNES!cm7pwgvy46rV7tC)*ov#NxWTa+`ag~>RSQmiMF|cp^D5|X~O7- zTVgtA9JUV2xb};%x7=|`YUim48;v7ISwV>}lXB;|OgVb>J$dn|UBk?_oJ)Rq+9^xl zMcV?c{@CSjsPI08q{lv~vpIw3AbH=@xM1Uzqh+&|Hf9z}x*{Q)M1{IfB;IF@#~B9K zY(m`+Qzw}5m3OxLbbdZYV@^{#v(QnCQ~55-&SClP>FL|9>ebb4h}d`hXmfW>x7m$F z?I8`T`YvZ(Shw0mUnOt7t#Z%p9S&atxX;h+tq@z@YcCvOI;c3#3Rc7Zt9yx}~W-yXC7(!s>d%#Sg!0jK;%)Zw_V z=eit9%(Zt)g1Vp6-?sVO3+RTeA4hH5cJBBmy~U3ER@-{JKQUQ(Xi)k0Mtlz$# z5t|CH#t$!Jyw_hvpZ!O_fB&IUuD!v#N4C}7pQi>L9J~$2#yi8XrjuVzT1mLsUA({b|I9fC_Fpd_*V9`j7h@fB!HG-DxL5quH#33@! z7avCp1QpOB;P42fCDEBICK=_|3s&d8)1$+z5V8N1wV0Mbi3|*lV?-h1fAzw+qCzp^ zT0-JzARLD>A~nMfM)n`PihnmC#J@QPqU}s8g!E6mBo@fb{99N=Y=**LU5M;|kOCAg zfE6OaF=rr)5g1GhoHZdeh#pO)MYDo}>Cu$9WHM^|*>PO~J{cY6!HkKdvsz{}wU3UE z%8a7K1g>S!qY+tp^jaA5KpHIxh=wx2bfG{eGLRNcoyBkfqk4cvs7l4C%_-m}RyBX@ z=D`GSjGP7bps>Qn<7kl-7CnK6iW-tg1!N|8Wmp`I7EMOur5EIi3S`Am=#e1bEG>Kc zq!!M|fSW*b5G5uCq|m2CMxt>6Er|Gxv|NV@q=bafz-5Rtt$&+y9PEfRt{W}`SW6m$&) zgOVxH$yNw)#xPvd>)M7>;+Vx?h8YdyqG)kpw7^6Q&U&&H8G@CG$o>x?nP@tQ zq@*O*K#VXs(GB{~uyp5yx(C`3=fUas;E-yWjTA8GtY=trO()G&o-=}wUqDDmKWJ`3 z=EXpG#DK>$;y^ws4SG>WfxcN1E0UQkS`;~)63Ifu{{bBx8c7dfF~?)#S+lwY0`DQN zhoVjaQ5K~S-Q(Z_pa#brXikF^#G-|P_?&kAxcKOQ#%~-06{0vkDi~ZWl48{Y@<)N! z2SR!v(W#JnIXMBc=1eFmURjZbs5GoDmP~Mu$`j&1fi6b!I0`;KXAKzQw~MeusyL zhX4irIRWJg6eSFS&BH6EOu&%LvD>5&F~dBYyyfx1v^ekV_|m*O`y(b8eR3z3h#`~3 z;C~OYBM&@+$c_Yf#E^O6|4cHL2%T;u9!#+S0e=}&!zS>GO%O0GWL}~GsULHW^G?F_ z&Lxu$N|E@)$wXB$)|f1&LMCF#I0BJP64WO&szRNpLdJ;`+4|_aF_ul{BjCMlusq^6 zSOS);szNp<9+V;&vpx9q@nt~5>?L;bODq{6_yB@P=EJgs1W6=8f=r>%P&HlxOTsCm8etGIb1a?+l zpK1Y#z(zy`^=nW!02vT5gw#U7AoIX&#PmT988$)$p4z}uwh}J`JY~2%b+|lb{)4Bu zAmJSFl;`l2>%_}p5IM4={=axi{KZp}%Ts=qrve+10-k!nQ?U}S06Z1AJoULe75;;# zv>>4ucq(ytk~;Au3_>D1lK;hX-d{XrxIC3+c`CCJS>S01x~o*;m4T=7jIXHR6o^`Q zWg^&?pifretHi6SRN+;9RAzld4TGq1d_)E8C&zITjXzGJ26D~k$fe$iSH~dg5O$mq zp3kwjJVF=(o*MrcZbS~o8(KBlhyn;@1nMl9OCXW4d}K!tV4^5U8gJyok{yGHY=k68 zLI{L~`aA>z4~alHz(WM*V zoGlhIfSn4&WdVU4gF18pL7$DN1GpsFF%wA72hviUei9qefEQ^tqIsB~hmeVd+=X)@ zWb$Hh&NyRICa*X=m-1xt@>l~rKM8*XETBuqDPzSvz$f+C$O2Hw1ys_n!t4Db2J}$h z_-9bF5iN);DG;5^XUq{w8!}T0hci*?9ETBENRh+X2L{fW%%?&Y2Vn660!XTZdJSYB zJ{5j_yfz48z(#a|y(_Rctil`o!!-^5ckK0my&~DM_%C-vO#^wdhK(42f#z}PbAr(j zfVIJT`~;1D zv+x*X5%|brj*pmi;>|FK8QHN0Fw8N?VzOfkBu8^LV)|c9tPdtervpgpc4SrK0)3c4 z{%PVRf5O4t4y1)}@W3Dze_G}3xJ{O9WFeTx11x1#g||e_L*m4%B^s|}!a*s0K5=xu zs=|}Go${&{cxwzoMoqy+7IE})o7IbqRmC9Im3SM~D!h%4DoV@~w6et@He{S9%s^Z_ zESrVLAhu}a!OVczmMAA6v8pEcr7$UjaxNHTDcX&qV-Ob*X*MPmIH7^42<32M z!+0hrkp=^tF_{~zXpri|3<-fRPK+gxF^KD*LDDw{(P5mRb=jX*Pq4}&ZmZj$R(WG? zlRF!+gaKU%1L{$QcmFe>?&yG$U_imyv0yGwZkG?33zS%nK|IMg9~e<9j;&VA+6sd# z|0_4@t4I;V$+%TSL?4ldP+svz03UG>0Ghnm2pI%e4FY&`_@PT4$8$j08my-Pyv^_{ zv5TSTqbnD59pcyvV`KxpifB^C1purqyg|N3=hOlMfscd_L)SEX1fmTeNd=wPu|yTl zEU*&j!a4=J)i{NsZv2wuvae|%8&XXYPYn16i#%s;C!i0|+D$DX79 znm_8V2IuqVIGQKs;zJfdKOb8*$<;K`0y%LOSsw7=!|h(Q$+< z>;ck+aJqs!@xd4*n2k6iJP0glkq|UWP&uh=WGTo%g*Mt;9$2rq0HO*TaRtd$crZvP z8(9YZG#I=vEqpk!6L7+3rb~2wa|6$Y2|554j4(Z6Vd&L>6rGK@16DXx*K%bw!AC&S z2WN`JAQ7m1Y{Y{b6p?Jib2cc%aC9C5F9yR233R?fLjY-X-UrgC1Fnuvc=1JZW~w0RV%k0<(w zgRJ0*`WPhXPpdmvb0xPmnT_~^wd26rDOLF7e}qi(Um=qUA(Q$iWYRE5>hF+Q!!btD zA7i9}5z;wE$n3;tVvzJodr=DlE}vzb@SQxRJgAdPTXtg@1a{R1m-g*a!e( zT!2k~0Nep!4Huy3Ppje#(amfm2!@9Vp}9p1UyK!<%R@px8yyiM>TOapLB(Bzg?lQ^ z29+2O#BlLk5&)yw-UMF)YXvY}DF!J4*8;Dga3izyPgpw5tRFe?s3D3o*3abi;e+Lz z7zv1NWh22L2@5=_Y!SW%YmGI+a-X)G=iFjgM{(8)wq9f`m2AW!tK?c^?Tj1n+iX3s zC-B>_QpLFV%uF2JgEy0)qJiJ$qe2$4*1*^LsCWoLV%^3@LU82Fo(Rm%}~@%-q{CNI97W-857c&cwal1i!;)?nHU`;2_JYn( zZYL~D*e3W2JF=a)1%4+6so<>Q!nmFA>ABMcUkPL(HSEG5l|Yu;1DRl#3BC$wg7K;` zNEKAj9t={=M#5)pXT!;1;VXo|XrxTu*?B&kDzuO@(W}m6x$vDru{h(P%-_p%1T}MJ zCNJM?8bse~{;UiN<_gIjgeAYYD!Mp<3|G@gwQFQiE%0?1q?YVOCEIzCjbTMp$1wyQ zfV9AUn>p^=giFNl#vr@NR4~I@=+cI+L!7RI(6tAH?9s&6v#8`;m~+Baz^Bm677gu$hMfC}^*sUV~Uem@3jgvxLFF!lb`<++oK>Jj% zyaxt3!$vH?K6zlDvt%XMslzY8Anj}<0~+(8vBM1C4y)95ED7CPgBK#a5cO?{Bo%WN zd^;zM&O;cT!yxAfB$5r0z?s;=)y|XAeLJ}0 zV-S{;TraYbOmIq`KOgdFM)>T<;!cH}5<|KnOyJ@V!)FjcP zaf@;A6GcxV&B_+eii*_!{kE3Li2m~y38y>SBuX^(cmIqgI5_HrEqW3KMCRB&{pixP|$)wrMcP^R8_&7==2a1XN4?DmC5+gn?1PFjFQ610|1Helr!D$w3 z2&0z!a{{Z2a{#4jNfh)%2h<|L&%YHT`B{f>Hp`i7NZxQ@LW+m~m>m9#xo0*1freV( z{{am()&B$9todfe{BKg?yuf2-fkB4^8h8nlGvwAD&ZJ;C5P*Y*fOvw%@W?xAm z@o{jl&x%auXaQ)T5EDEBZb`tYdoqBNNDD~Ltoclmy9+8;I0Zr{>OZ{>Fwv3Z*kIQ6 z!7dy(N)p3M~G zFj68o+Cegd(^S@sbet5;C65l)zgVC-kpZ&B{Z<;%b1-;ZG6`;HL@;3}Su9!{*D#?J z@P8KS1FS>_WHuI^MMt9-tUDtyY9mzB-}3;K0RSl9C>j_Xy8aHof7=8M>Kw}PFO(#T zgfjg)$2dcYA*GHJqs%!_x!`3U3N!;Y=Ow{_vR1)Xm|! z1PV$Ag|UEw!dpVIf`a~#p;$wig|Yuv9ffy*;s^z;qcSgpg2JP`mP0|?(fSG~Xgk=J z$9txZ+S3;bs-qtie<&zC+P-F{9tcm==4d-=w;(7eonR;-P|zQgFBJ;fj@mPHrjF7H zgM!jW^;!!Bg^7d`1qJ;)u+p}icPr?(GmqW*u&H`Ti zEO$6~IKBV6`ZA&7>6sII`b8yPlN^$a7*%he zO^?%~`F~iQ&#r)IsLPvhQ1t%qP&l{2bZJRUKwQW{H26Ot&R+MLx!wo3fGWsA#gP6~ zaZnZGw9Z`svjpdE4y1Bu72>pFVWA8!`ka>q|CceDW(X5j=WykZiMpULGziUH{Gn451%nw3_-u)WR({SxEKz{F+J**f zA}#o@R{`!4=wwJw`U{f}U8nsG0$e#4I{$8) z0~VdVc=Q*pP!v53t`Nd%^KW2&j-CDjL*SAlw{6xQYf(4V;Fu5%&sp91&>Kha{#$WQ z0}AWM84T~gKWko`tmHEsiX6u z5fqfy0&BSE49^OVtD>_8Hh~$920A91z!TZJE#=aIPD$qNuQeavNnBbB{X)SsSjN-A z?>JD2B7fbBL+@0hFbIrg9E-{b;eepIdXeMI4PjUg{~mnKNB{3(gLN|cZHs<**u(e3 zj9Z|AWa}Iq3N#-4mQir#6EK1YYo@D@#uN8@my@CR66c}*9YaZshC6edNRNX{p)k-) zW}*-pJkT6ROB4Ypv;uuJ_#U7o3PS@W9&R(jmJ5iFDk8w$rikEKqlbRHGWDo*N;D;u z9;&y35z0ygEIm+_fv&oBXz(4*f{h@~^=Uo0EROC9abF_o!FmwcdMxzL`M>vyAdEmq zyWlW7EQ=d*U{rsMCRM&)L*FEKCI0b!_Sw)=*S}fb+2gcfdxHJya_Z_mc3ovUD~@a^ z-b|S{Q4`jXxOctL;O!=!q-`wK`(r@A`ThX!#Qi`0ABGEWmu)ys zUD#AP{?4Jt-(Xk%)2YSY>(syA+eUmmFfec?@Sa7F!A{$rnA8`7&v(VHYoN2Hv>Gf} z-#@k!Sa>hLpq`*8fR`r7^p z*N4g-F(bA8cUdmx_a-85M8$7vfBbR&w}jLIqcok{xot7EM~{%d=q?ePn2c} z@lOmac3TVX+w#rC#;D-9$2(DnuU1<-mYo=R+`<^Xz20WK{8f*`gN!ocXYK;K zpFEMc@U|;y;xxaf?AG%dP8i@q@kzpWk`gSud+ARe~eFtrF~YQ!CoWRw%xGx~0EYpy=E4DDziKGVaZ55>Y3&TaDNjsP6h?p0CC~;=cU{ zR;1F5_&GNJ;1${d_q#@IawL{|*5>NP64+K^VECfVebL6tw(MX$)07!K7d~wgd<`#p z;QleGiz4HRH!FQ^E3Wo`Wpel2vwR7F?obI4WN>QMmbqeOpXHZGCOE zx5Cvg!-CN^-`o?1t7Fnx{4Qs%H*Z^&ye+>hCEusKIKk5B@qSwB8h$(b!TIFzhNLyU zRws4FuoKT4Pfd?7mtWhEd8C|AP3!x!T@sY}w=c=c#0sBw<6Bd0!!NMTjc>5&)vnj} zUmh-REB~T-d7Ix0McI9YUtbwH?500d#hnn_>Hm49psL1O=|k5uZmgQOi1w)AQfky; zY)E;rTFh!`(OvVk{2fD&$SV~pmb#h0Xg=k;B|84cse(6Wp009mrxFf!^Rkc0=TPO& zc(%OA*SWqo<*Rt`{kw4&Jx5iI^IC(pggiXYm!GXGWMjYm!-Gi6_0mPB5p$wm;G@en zw=^D4v^wORA~bZ*QM~<4)oWs}pRtNkL|JQF@%5~Wqvb*-N_#^{?U$EbX{j7OXK%o_ zjPdl*J9@?)gzRfiXwyC1lDC3#ughrRXWptoDJD9^S_7o0yv#i+A4Hj$Aj=&$Q5xgAS^~b;Deb+a5$CJfEnIf_6bSO6`Oo>^70e@6WC{bW|nnTb2sA@%UVyFS*_e5K}l4* zB^5t?kLRQR=^s1SweV;4Rb_QpI^C9;Qthxd8^`ACV_oppq0Rj@icz5o*n7=Ul(FNX7FoahWiilZSe?JczRgzYoXANE(DDb$uoOphsqylkD+49Ja zd@FTh1)^|pNi1oqd!J4&`GuMepL){ayf0Cq_AmSpr;Y&Hq!dQuA+2E7f`om7wOvZ} z;U3j`ZM{k!>9w|A$9fyv-2;}MZEo;;pY-kO`+*Aqe(&D+%smvPTjFegcb)zm|Jv1o zJj>*kd%T-t-(Sd6*8i2a;qLd0_eEciZ}>bf<4|MBw- z)@#|1jl1UvCa=sIy#E2wc`|kE<-S!W?5$$EFB~ado$8e0(VjdReE-HysW}3fE$)e% z9-NtTF>Rs2d!6(*G8N8t2ij^w)DA3O^ZLHg{~>{ru*#<9M)}Y0Y1_7UJte=UWEJ}2^iG_%ksNbT$*$wIl-;bd$c2?`zDcK}wOErJlTt0&)a94o zt8+@AK{GP+58X;5G0q}Mm`p=|26vf)?SE3P%k z3d(thIZ4(Bs`c?-@K@Boa6x%aS?)<8PqlYe%%JW(Cpvp4MK;dugnWtIDXvZ@@5G~+gf^(H7?Keg|f%k#T0Hygj- z%`5m=>Chm7c60LX+wc*iyzR@67|nm)d$rm740|+FQ}(QJNvdxi=0?NA#nqYiBOj)h zuX~d+b>`u*rh)B6Cr-Q=_%W0$e!Fhl!OaQBp2{ve`JvJ5#Cv+wZKa4C>cfPLIo_YG z=byMDUl!&0toM6ry|?)GfCan4g>MA-Jvz1PT0WsJ8k?_g&Pvi!`{=nsH9d0cR9Qrj z7{A+|_`}Cz+Aq(m%;tM4zX@Lg6Ywdo@@jjknZhX-R)ggn9=}PEy|F`S2Cdyet?|QZ z!}qg7J~@{^J{ftiZn)-WW$DA(8#ntd^@cA_d3WR~ZD+=2_S~n}Hu+55KbQ5bpLXG0 zIV~SI@7DWkMH%}wbRT$6MqJcvn^w;69lSVXjnO*Q`#NsT8>ZpWH6ba>uSQmT#MSm_ zLZhm#@pa4x*9cR)#yMx}7gwC@jXheF(%XH}`m2#a=TGF;lM+*ns&aBpkpDCpZbezvq~&cos|EIa+vsWUk;58hO)$a}nC2$l)m$RflnZ$&Zt+ z^FwG0zVIWDwh62@XRAMSxNt1|j(baFTZhMqH3;9B?FcEMXF?`=Jymkgjq$wWUmA~z z!-d8@=B<+#cO5d-z9910^Ex?$o#WM?^3`R>&&j>`NIi>5FT|ZhSZTKWXt71)#pPZV zzkV7FWrZ~=@82KzzAf$ZWxGW&`UMQNw4AMN5A0(Kc51HF=B<6lIJhb|OhWGZCTBO= zs)8x6SG4Gl$mgIy-P8q>ahOZ(-L3_q)iF=&^G%TBR?w_rCzxCLGQx%Wgh41GkUe3wBefq4pc=g4$xTqTj{-qVi z5v358lHc)(E_QVJlUJ7YeNx)T zmC`R8hX3-?Fc)@E^Wc?yRHZAt@sbqQ{^VlqH)KA#}?6Z2+x3TiWZdbdtIw3>+ckaJl^v->5YL&BHMa`N+&CR9M(_zGINv0l) zy&J1~?WytGU)-q*-74gMi+<1O(8@Ue!G7Vk3oF+rSSWn3(GR{hoZT+tMdPzFQ$8D3 zs55<$Dv}=%mt3s+<;!H%x=z2YkrT=e%kh(QoK5kb=5>{-7Dx4XEaj$KT$|f{_xn6~ zkt#u5b$+CDMAQ0_CHr;XFL4hC^K(Db#O61BJ#qWf0Xvg529dh4^2ryn_Pt5BSSR^r zN$dJ6hME`B7WK(oY}!gbtT+7P!&I+@PYNMXB=y|p{2gyToc?L%_WY6XA_wIS$1i)- z9NXlw{`0QhsJ9vq90c!5Og<=OB}NeJmP;5HIXshC^@33*|E77;nsyKu`$nhmQ~RY$ zv8!~X-PQIbWafUz@le|@Pui*C>|a`ya>y4@u)g)MAcazsm1; zm0_FpvGmgA6M>X4?acjNk!KqG@#NIy;ai^h_7@i2^U^X6cs`~6GUuMv!IuS-3rwTW zD@g4dIQikOorEmAaU&q)AC@^}asT$h%9r5}l>!F4+je%^XN(9)PCMRBDPiu`*mLXk zle~>-7gYjs>@D9a%>VZMzSL$$l0^2G{GYx@eY+2Ru@U<^(iS7RCFx>>{zk{a=Z|bQ zOf>O{%d^|MYDCyLssycl%PWuHYw_DRx}8pHz5yw?pIov_`4IxHF$a-YbD( z53Oohvg!J*bkCNnvW8|QniH4hzD>t%mcREt*}?XM_R6;lbKSNdVCHJy)!KPuazW_i znMmiAM|No(Q#IcYFZ=H=(ObCF*Yc$3>g%Gf**E-Jt_(jtneIz9>3O~S#^kk?ld<}( z&l9twiJ#0 z%t*R3DbUQ)qBA3QXD z_|xk}<5l}MFCx7zJIS1Hy(Xq`afASR_%H7jqtD=S2st;OTJdp@1L z@*DPRpW(oQeRp{W*zKoA`1&imopSb@lTGEzYHn9w^2+9wOe$IQgLE!Z|3m_ISBr^w zWw`;>eeZz4FC^&gvl{DPwiladB7W-G(FvE%Eo-cm7sPGB=Gr}Ut}Ab~Q<{|jUf880 zmAm`N_6@Of?kOmDi|6xrwiV~7eOL4QAuHd#N7GFl(G9*&ie`#l7szV6f0QtMdF%M6 z*MYAWtB6XZoaPZ4E8nF{?zDYrgj{{qq`Y?yA<6JF{#?YS`JGbljoD9%s(yAaP>dia z#VxORvixm9|7E_z4{`l>Li@fsRnDKpvXpc_RPWBwR&Z+&N*G3#SIt?!!ES*`T50wERsyII;$L9GI@@m>V2}e^1YyyEXnrJP?g?A-NHFPHHV*!|I8-b9dGc9KV&-{Ykt`_~K)>Pvqy;9cdHJedc=Bo#(gkKMNgh*Zgs&rBXY6 zY*k~Lh|L9?2aQKe!j>GUNgI2yccj+A)xm$neq)={X4?AdM&yQ#zsfO!q`C9{bpsB2 z_}4WXb#8qtSQ?r*5cdT8@_grks%9p0#o!{_$f@>>?`C0YlXE|$+PW{SSZ$m2xOIMg z@S$4UClw=y1e!gH0#1osO=JZ0yr5m{uWX+0BGfLX`u-X_?lIqyFX3Mo-Ef_-7~9$0 zw4p|rVSFt)$Kc2EmuEaznlbii!WL-5Nn&bFASK zMXMjG^Bo(sbRN4OpPCjqTz#<0&}WJAghTL1?x|Oy_5Q@&HdueB zFG0bw#r{OG$15!F zMaK1+bDu3NrM0T8M0^$8MX~~L%!i_*UP?lr67I+c3w;tMC*u^Z^S$0m?US*{sBTn# zRy^7sqPNcGnogJGgEVE#cXP6hq~F%dch%(TjG|&GJk%JC$KQ|yDBD)&p&_M@ zyVf6>E^XSd=&IV;qh)*M+i5R%?lIZZ$rg_-u)lF<4B7JdbAm(CRQvW;je{ophwm+%+Lwa-)4I>`{IrF5Elntp!n z%P%yocSrAm>awTNOV#Oah|r2!ed?;-XFcZ@f08Jz>A#>DF%MhzNPO(ux)4xmEc-6H9BwmiE*Hla5cV>B+ zKysAaOZCbiF>m*N$2}Kw-Y#9TYUKvOmrHZkBrQ1Va^Op*G4;c|k9XZ_yKr4AWY#=9 z_Tolb%!_&VtTSwIo#{@=ZYfolSEygk*k3Oa-a6b7(XztGepk<4I~_~m(T<%fA0n+U zCl;S%de))49u(-T6NG-7VZIyAb znQFs>)zM?QPY*9NkToj7kM{NKsQ*QfW#;#Y7H<>!LFUiP7CgqUw{>WZyH&4N8hcM6 zuj00Q&!Xlx_5BY zYeGPV%!;86?nU&r;@DpWw~o>o2lmv{6(tstnoADdC)D>e3@(>18kCM-H<=~6`+AAx z;gP!LeY97epX6_~o^mZSd|Ybi7GRtZvZdWTZfE}CTj4UQ7Rm-PAI_c4FG+q8_{+W9 zM0w-1W2W0DYUifdJY(C9^V)(1hTYaQ_5Tog)c&&mm@AXsMSXfs;JI!6x`*csnzb)i zm&QmL>Gf#if~)45Q?fgIca>=ODsFRLrtD>Z{_MGoC92}bsXxvc2<*}Ms;_cs!jD+IV&bRp<2R>erzpM( zZ=*LUhb6l^SakKtxr_BIeD-+THX-xrMLQnm`Iz1b7d^W3(&Orz`;_yDl~W62-Ys1{ z$4`{v-cl9hVtk#g7d+I4XT&foA4Uy1w+sq6#VD~WGRY0WG#5JrexWcu?tA+yq`^bG{Z70zM5il%fKb3r}t6YR-GStovi<-$^2%gDt>o;__VN^xn;UJJ(0 zUM$2}Zk<2cUBWA{17pco9@^;oOfk0aCEIY(`8jH$gru@~`6DmYT-8Uf$15+A@cwq0 zeD`9aSW$k|^)+A8-_(ThraJmmKBC)9rB5ppKmDSdGI226^NsywiTXuve+dlp?Pt<( zes{^h?x~7VzAoh9w`mOm??UzKWbb{18)>pqheQ|m&!ZIeYWA|e-}u^H@_g>Dpwo1U z+EGG#d%<#2Oqk)8!ke_KY8js`OvB8M+qrgC?<;>(c1x1-XsbALlG%$2%{H4`Fg0n*?6zo^6wTF!m2>-w8dk4{OfGex#r7pvR#T$f$E zG3j_VO|AHnLvn=3U{Zug?4b><4fC2ONMeEl-ZrXVO7lx?`m&pM6zo@y*(LRfwk31r zd7nG{MVqzuY7Q^KAK5A+YTv-SyR$U=oNMg;^Ag7-bj|s%Z1h@P^(@e8kNbjpdy=OR z{_7VDT8y1$<*UZd?Oo&Rd#>2^P92EfI!b2DE0tPwr1yPZ&d~14^9{Mo+9fjCO>@j% z*j*?#Za=QDO!jN?IA&rqHg^PLVpXv}iIfx4m^3b|%M*O;+?wU*1r9UgHYWIFY+53k zCY8;2sT*1+UJ-I7**@>(in;@OF?J8d4s7V}w7!+icemW}D{6eDzmc3s*FPkAy0R=^cfQO0 z@~uH+qf@%By*1fGLFR1^BMaPl52#IUoj>_qZg=IBOCR-zA%D@A^-8_X_P^#42ZN&V zYEMN(N#6Hu`L3#1*lCQz_n^{`G)(l;DIW)#Bd?qP(81m{1zI0uG;@4X3%%BYcRQiB`*Y6HkJRRUk<0d^dktll(a{9?k=p9zcs{ja`lz~}#izmtJ_mnQPOil@ zZ+v$7pw=t@p*5ZYi91rgj9b-ho0Zi+c1$c=;GVtf@lR=wEcr&;;Qj2<{Lfb^gB`q1 zU5IJlJoyHk;~#G`xV157(blO0lb2lke^C;!!{hG7!cq&C!QrZJ{VhJE zO=sC-ca6IVCY@nDUM^>Lyt34BaXoU~QdaKF1;$ym4AYpSbq5yhOZ<`1p7_#Pe+<`n z6FK|t^Ss*alTF1}c6BLhXAtL1BnKJ<;%Y@C#_I{6SBVDVvZP+LPkp_bHvBQWon`de z#Y_?BD>+e1NIID*a<=N7ZS#Tq@88+K|FnCl<<#j?k+ZrVYJG(ZB32(&TAKbwr{A+t zB%LX4DQ@VTzOR&);?fuYbI4)MYmt+d3r@Kq*e0gImH5l?JH7a(UTv)y&M8V?`gT$C zb@|sHmt4_o)U!{YpO)b_WS%V6ooKWFTW&jXxxB`(xzd*1!_QV6)XINDytG6;H=`!= zO76+^8(quz(cO2Qjw*v3^R*TWNd1?B~#FM_OJAG`_8=Je09LMWf?4937i%xfq#SN~A z+e#34^g`5RVPmClXQ=K{`4=Xqa?X^$CcUQHW6s`{ctc1mT*n?02Wd5J_S@I4$n|=- zbg})_kibT!;nmuKsHFlab(tZ#Cs)|Zsqj_tr{C~ubscJ-czZSNrFZWZ<@IRV6FKazR(pGmF1bD}7@=@Dt0Go6R(M`ILGq6ebEs~P(imEf}eLTl< z5l!TP!W3;&yifOpQ*h44L+#)C8CR_bZ0!$9@MTDU-Mt_KTPFXqmFIM?JsEjaZ|RD( zoxQ5BG#7y|)=gwwuxoj(ZYs)ZUMH_uM(x-pqAt$GZy(Kh(oIpG{7GkaVw`*x*=D z;nE!aD(#$booe-1r2}uf9*>5`#F+HiEW3!nA^U;{y?XlcbE3jOy$kEQ_akOi%9x2e zjv#TijtGyq6M=&o8|t zm;Sv?bc;rEsjTSbjcGpSSNDnrjs&gb8(WRHf4Pnr%X_K5xn_N|;@FC>be}JMYYcwe zq|Vo1U~KPLw}>Cj{w`M2=A(U8FE)Em;0Zq|MtR+q6Yh0yylRe?j5(ZNp&|XKO?oO{ z*znz6&qo=Zz|z|S&rYbxd;1O$PU#)LW#&Mv z6Lx91>~f}0)r(oeW9xU>WQF5X!vomiXP?csS*GWc`nFT0Pd_x$St43NorpM4e_dwL z4kvQ_UE8U{bw?Glt%`Ho3(7Or8!S#{PiYr!Z4|uq-eZ|nCr^XcD{+}4Yo9vvC+}gf zys9Kx%i#2ED<*cM{W1Z*CnDwERjpYk9k)pt*jecMUhKHe7k5}Aw{Li{xW-P!VmFG& zW_`o&O*<}qx)`%x*Qmgax%E3gPpo5{%_Et@rS9j&XiJkt!YeiVokkMUWD}+eQHg;XJ4Lg-oAGhCYx_Q z-EilqO4?PEr0x4CtDidE7~0)BMt@V@+j}!BZ9zMZ(n@)y0P%`lNEi4 zm+EK$>nG{9g1~OZ(=&V7)wiDcj=fPI-pokZB`|2CRsDYNk^?vO+olR9m4<%SyiOQy zU%8I_Ty}p`lhyVmryOWx7rx_F_x(q9YHd^)Tzz9DqARU6_)D-=q1X=YD=|Xg9-F{7 z^uCg4LQ-YDkINQ06T;2WQbBo=lt(7kP-wYnxPo2f4(u&u5>AXz5<_;r^L+S|YijGm z=;MR8jlSa+G1nW(B|jPpJJ*w`6?lKN>Yi?7nFaOu`?!9ekKXA`)a^U3H@dkl>9|lG zp}WCfm+I|*GUlnhmSn=J@wck|MMu6IajgEF*V%mF$)LniuSd8Gi(HN=hun4Ad6<4k zOzU{3b$!G(!=?ep4gKA!Y>h9Z!pqMMqNR6je514SD!!#t<-iIEGmLPVJ>rEGlF@khTrIIYcE{aXK4a+7Sy zk*-_vsjg3rpOLjhPjtU4e66c$ZkO~T=T^=^PZYikMM>M$v(|_{++q5>Txq>o z|FvC;gB@4Yy<`J)FpY&*KfB({3*M%Gx=G9+$Z^*Si{p#BSXDABV~*!~Zoam6*Wr1D zf~DuSy)iHwyjuBs+t6_7hCJiDLpzeLF-=7`-80%Ru|$;FS7^2-yrR<)po_JTb)il=lu$k#1#Bg^W`fRckL6*lU4{@o~#uncqy~;^LsQ}GOHSibGB4t#d{_dbk9HU{;ZdFYVEjj z{LQqS;&+YR*3$k(OtX2qC6SwIo_mTLeEPKdwqSXEaLD5ZHOc2yyC20L7~2(pD`%r= z$MFNUZxhx%Sw;*Cx%VsN3Coj}yMc{aloUrWZ(88FR;8r(mW23Lx~=dbd$QbgE|yj+ ztc*7q`x&rtYfadOL85PYt?$6eCqAd2+}{-Y0j+XXmdU-9ArzI4W4^P^+^yIlyntIU29w_BXjiQjQO`EW|7A zQ8a7m(+?#wp8Wfls!HDTSAFq)Thp2pwS`sc)!WS#j?!<2-Qf+VEu09z8XvFfS-6kX z=jz>e{C&8+sJM}gSZR%!K@!ia{Q44gmA%A6Iu%>D?-i2J*i>NiXy-Y)?w87x?!u+k zY^vw0>{pk3Rx*|?c_SiC$bU<*vy?Bch~DEQY3X?H^_}eTcfGYEmevEOFXvp%Xo;MT zdvUNa=pN-jxi2NW|MG@Mr;n6xtGX`!I4B4H_2*jU4!-1_op=>$8%l zWgd0zT;7%a;-{TpRT1KQK#uRhXcGWFOwDH zrMefby>d9B_I(yVo=skAyvQx=Y$~zv?buPz1Dh;PylQ{#I5-t>|IHSi>#__k%)C%%uZo+$CZ+ z_T!eSbUv~o9ol=$GqdhkoBZpB2a1bnlYW9`30j*Unx@^qn_#=QddH6fz8c5$#slIe zj&-%Zelb7$6ZV8ZNS8U{+qJO&ME5a|9q$s(uG(N`;T2%YOO`o#D9qN&s3%Ws*#R#P za#mPSR1RK*zG^{`!h6+~vR^kAsBBNacJztN$DF@FdY#T$@Z7q9mTJ^fEt-n5;9JQ1WK7XZ`5`<6vzQZCV z?%T;zWnIP+qa7OG_P(Cd=}3FzPv_q>7G<9*+{0 z@zi3M`N&TFPj2f!%n6Fj%UGkaI^fyRUH%O}_6tjQBd1TD zBiv&iCT&67(UEYz<;J2pF5jL@?(Z=78v9ZG(dhiQFsa8{O`5?6o^L2<>z`*d6|#P~ zXvMPCq}RCbx1)!A4!di}?sR>Td`5SB8YA1~^XYL$743^La`ol>Hd4Ukgv@g_>yQTC zpIh?GCp0qNdpufndxB2+eqzq^)tBl;4Z0|sj9nDJf7AVP-S74KJTs}MFJ7)6j1lxM z`hIfsyVVvEx9vCWLxr|n`Nezb8*-kyzb6qAL5mAa zFhH+-V-f{v+&>kK-h_r<-vP+kU*O^PW0~|Yv=RP{F8s}86eXOO^O!-WCc`gU(?b&Z z;I|B;*8a1R`^L|Thu`7lqGA&TIKRM1MPGTjNHeHw*TRM7KkRw`XZADQg8yLuPwxN! ziS)nPJA2S5f-nqU?k>^Szlfq%iipi4_=Alih!?TaR1y&Ew7kY>iZx;+D2N6l#27rI zg(ChTSg4)GpCXA0M$k$TjW!B)Ha5yRb2Dr9E_X}B0}brL!QSjQyC2^>-_Cr;z3)sS zFU9+oDfh!08^zv=7}yK*gGM6*yQjm4qRElh!@yV$yFd4wj#8L|tR)VFM&_^OVfUGq zyC3P4F%%1LHfur++c}iAnz%OJhR1K1^A_14MrS)8;fNTdgW2{`o--6a!mvEbTU6ri zM4YW6LG3#$6d~B+8_IY#Zgf=)FK6gHFCPdMhR!6DAYgF&O9Whw#xnPOv}?RKlH>>z z_diJvmqiZO+KkHt)M@p`i-I}@rfh=lv_-cT!#N((26s7}HN9~%LDpe{ERSq75n~wV z30nUq0V@`YQMBR|0BXQx%9kpoQIcE}#mZDxpDte2%9F;@K12DST4~^stkx~P&ys!< zWJ)_Rxgj3Zd+`~QNRzcPYNXE}{IU>DR42Ppw|g3{bF0}k#FWEUqbEEH=A_$v8WyNe zXVk9&6*Q;|x~OxyuLl~^Lp{>4M)XXhdan=qq;Y-M4;A%OcXU_xfK{w!4I9|VCN`6! zg{^GUm|p6&UXex2VJ`FZSzq*3-&n|E7O|9NtY9U>jOdas>#DA?ogK6?#ABYQN2k=Q zTe{74ZgNBI+OGo&bXZ;L)=?ePady(iE_O4{NA{AZgH8@{goB)*mp=L#;4B3OInQZ& zILQ^g(OX7&%5z>Y#yggOE<4uZoWs4 N;_sFg-&{Qjbe9sP)I=gqsVEfP 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 T-~jFT&L(tG4Mp6F@>M#cR literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Html.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Html.beam new file mode 100644 index 0000000000000000000000000000000000000000..df26780e85debfb2d1fb9c9f64c9ac6a572505c0 GIT binary patch literal 25720 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 cIe`y|!R!UPBHx`M-@;-<^TWy literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Json.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Json.beam new file mode 100644 index 0000000000000000000000000000000000000000..785b62541346e0affc5dd7814005d3ad65e20ca2 GIT binary patch literal 17624 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 LW0zO?DM$N%SUBD~ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Presence.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Presence.beam new file mode 100644 index 0000000000000000000000000000000000000000..a1ea83d9c106adc0e245547b956d8dbd61982ebf GIT binary patch literal 5008 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�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%0AaIao3~InbhnHo?Gt`wtVWn z?pIXT@NMB)g_E9bxo$Rl^)WMI%9BW^FkP>u9tXHd>cYOF+|IC4!mY&vyKihTEmwK@ zNdEEqIrk&XnkT-und4L5RHx&zjd*S5;Q&3snc17o0}py$eDB(|R_AzQUsiFkRasZ; z(VX}1+xv1uFYdEmKJZT0&&hp`=b3;{&(FT~9~`W8n>gpYS$d$tq+hIp`hcmWD!P== zr$k-(-BU~+{P^|p-nMn?g3Er*ZZ(N}6RZ5hg$&>m*4u*8awbI$|d|qMw%++ zR;;Jw{TBA*zWzB^F6-@o64>=)2Ib-NeK$+0?7Mvf(`KzZy{Pa~)HDZ4ZG+y1GhVOy zS{Ee8ygHp+_akiEbNiL?gC-qvqQhmkHDVrYo!9by-U`=ayN}o6l8e`CDTbPo*6AXo z9hdgKI9)T|h;%UeySRS^(Ir^>?9K&?TbKcYt!rjH4DYf#w(9Pf-3L=o`y@Obta)pC zs%Oh75w9hzz`WSX?O5c?DOw3t(?nr+DULO#H2YS@7A5WbGV7hP;#w<1b$V)yrtyAd zLaTXRg2g&7J0%C|l6NKMlx+`=4qTK!wZ3FJdHdRDDLa4kE@>;{Pgv)0VA0`Ex5Hh> zE}A=~dCxM(cz)UDDHCJ%yN~M`mw#A?r=1plWKqm&zq=-%S57bIKg#wl^VKY$k!^Cf zjqrYI!^ZHZSL=H%C@X*CTzPrh!OwYTd!ly*kD@oQRizh*;h&PizvhJh6Psxxz2B@T z{gIgny%h&P+raM04gGLKia`*u(fh^<@H1YxUkhmX6uDGc<-{DgL&;9ak{7dtT(}Ge zc+#JG{O77z3;$*H|1uNx*Hhq!4bUz6yPTn?6cPdeyc+Q`v4ePl*hzdrd{6vH{6hRp z93+0FJJOx#&h&}&NpuF?gFcz=N%yAv(0%EC^g#L)dJugoJ%T=iK9e3tPom4w<>?Ca z5p+d5iB6`g(begr==yXz-I{Jgx1#gte7b-xq>JfU^laiG;t}F;;tAqOVjJ-k@ieiW zc!&6a_>kC3d_rf_Q;8wOX~ZyMIB^y+nixZjC$fmC#55w0C?txAnZzt&4si}KmzYm1 zBrYMA63d8{#A;#~f*iU>-d_$j2k0*X3ekcC;pMUv*3(pat_eJ#q d(EFkaD!*|I1c!s4>cbcI5a8byqYn=E{{jAv&qe?M literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Schema.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.Schema.beam new file mode 100644 index 0000000000000000000000000000000000000000..4f3c5870dde4510a6e6531031c83338fa0c30806 GIT binary patch literal 17568 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 sr?tUF8SpL!hyh1`AZ|43`$70?Bg-u98M#NFf%B zqHtZIw?JYgLE&a=2rZOaqS%y2$kay&7K)&D;~&{YdWRwqB7yASd*;w_2<|S71Nsgq zEJR0(ZAGq#HHu0Rv%+Lc)LR-UwX?*e+sx581YTfj?m{OM*A;M`gTzh<1jTbq0$=QCot~eS ze7yn005$*u0DeDg0bl?-0Q&)Y2$+Ws(8Iv&2*B&}woU-RyUCW{Lwu~r}@GAbq4sbChwQ01u-PY$Jqyc5&}Hn140 zrVUypCMS4bS^{S|Y?3dgP~!});0T7rwBX1AOPhYTd^Q4qKMfQ^EBO3B)Xo*qd|mij zISkPJen|#szUG4g_%SF1G$1f@CYK0buXL6&)s8};Q@2iUU9#W4`@xAr8%Dk_XwU$; zNKUBnbdokOCN1OOKbncD*YP?+kO{*nX@yCJk5dAgAHjg8#+R}`U5zFzno0q(mfzR5 zOb1zl9+wIsQ#`$aBTHIu>Uq2$GovF#%UC^bq+|oVl9A~dT0yX^QIx`f9;Kie!Z;Xc z@dS_&pzjby8^FK~94#Ytd^_a>v|vH}3L+I+>@|-CYkDb3oWfJc6t8$Xg);&xFOUMw zfgPJjq=Vh{(yM8LA~U=|cV>To(2{a5@X~m3e2)j*KfgMjLM zORkg+w^i7exLf#L8hoZo_4y>><&EEkx2S?s9$&8HCch4UAq!lxH>^AcdnfF;8N33D z*w86ikW*Rbo#k{H>qvgq+py&MqM9O1@!TiuQ&sGgJt^;t-yaTnLQ3;6cIwy5HnWPn zm1AQ)#13n3R+-^@)5e4}-|)*$q-B96vq!z9uTANGs;RDP@OTqgbNRsetI%ufCq?Gs-kzQmu*-QCo@-K8k# zTJfve*G>zwPE^|HRO^47>fq74Ph~mm!>Nz?va>WTXsE7-@9X9#WE!ZYq zy4byTg6$7hH%t7Z=G)lF@%mAuXHSxSfqkdbyED_rOs#z|F8V@!di&A&-JAZhBOpc#1A`r938?df;R8Lb;p(+d>xIyKmGXRGtpr}g?;7-dAc-Rcv7&swxXe; zyM4jaTTxlL8#l;1$^^fpq~7+)kMUg=+SGXZ&CDj-5t}fn+mN-B6%APjnu4vizi~Qq z@W$h1^qm`Hs%w8G9){h~>=%BE7Dcbuo_e+X<=9p7Y3XT}vor2psdK;hNO~--{fr?E zNw{!nV(clG#<|DnBlm9fcJ&lxm!wBMZB6tDYAb7)Izv;f>Fbfac(?{_tT{Mx>(&U* zU?DQ7?%lMtUrn~F?9)NSwV_#7o#xEZ`7e^rR>r=%-`u$JZ+@ziTe7zNP&lOa{Em;8 z*4i4^Wd*q3uIjwI^Sj38b5|Z7>DnFh*W}l-+T4VwJ@KQz{XBi_d^d4WZ$^#7@!s1H zLXxU?yn)x3QZKuo)Q_`h-=li)+2ypnbn@Q!`$h4J zUU79F?YrDRQ9ev=&o*`DdhH(e%yP$<;@W%%z5KD{bW>SJ?W5bWhI*Tm0WSAHjZ{R` zC#}2UufKFiQ8#|Ytkoxi+ly-swp$*lAD>SrK6+Cz-0Dfk!#qiOaUZ;LXLnLKtzbdx zUd;Cj_A9%3Uv$7PivI+~-V6{G@(UIl0Em^^(!U*}tgp=x?p* z(bx0e+&z3PWYWyCPWOuXF_{}i_4fI>R_pHv{=C(*YtiA<){-vWps&;J7}m#SmfelW z2ulUk{U`@~1#Ah^HC?7q6N*%Vk)``^pku>E%Yl2h>FcEy0L}hOM86baNflt3gG(&9 zYy$)E)ih}i7%MX=Tt_PUpDg4gr^EHQK=ZFsqZ#<1>;8+OnU-X^{s54E<$rgm`Tt$^ zJJ$SXPZ~`OxRHbWq5wV&{_Y?GfF&X~(MXZK$U)>RauJOXp(0zz^?!U16EgL@KYIZF P9w->x=h_Emez^Vm) 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Gen.beam new file mode 100644 index 0000000000000000000000000000000000000000..d8e60ca3a8dc90094d3144fde83f0818e0d5b29e GIT binary patch literal 2508 zcmZ`*30M zlpPUKs7s@>ecsNRlQ}A zt2}5lqicb|0sH`RwHJ*>Ynqstcx`AEEJM@??#4&dZZQxcCETJUYPS#=O%n(ZGzk+3 ziXf82kwhg46ABR~S0FODNDM1*SOk% z<(OD0gM|c%D@7z1MPx!4mqBQX^tkxl3LGV{JLG@qXpn6*lo2;-}_DRZ-mgDV%( zxx7ZE1)aw;2YnPTga(L^7s3Wa!DE0vjmNYA!UztHzGn*C)Qnz~&t{mvWz#EoAsh={ z2$z}9iQus5SE!wg&1m#?N}J80_f9g{bnSmuFx2^DY|f?|n)#Wsnb9O3Lpi)cuAt}~ z049Jbz%&2`0CgtTr}1Y#Jy@;N_XK=B05bqO0HsHbsYdBibBb>QK&?fM8Q};??S%kP zjk0HF$Usk*FjPzs1&E#kW|kRpN^*HFGxS)RXV$#Zv#%s;?Z*MnL8r~2#D=b}1PtLK ziEg3*sgn$&Zj`yP&RkCd%M@T1j)|x}sk2Z%P_dz?Spdi_KzHg^WK#R55~$7>lugsL z(8>*j3A3(lF#W!EU(>P_AU8^cB~U7YDRG^aiuI?Ap>zxh2}nsXCeo=;p3MqJ2$JAH zG8qR-g%BB(D1$js5)4KWH3xVM;}D7AL`q7~3N#7mcmCmzK`M+BAf=@=rnegxEN*}) zbSX})t*5d^F#(}~RH)$7)xZS`923C=p)yLsF*#u4u!;q=r~#0{3J5T!0S2TbF##f{ zZV%=36at({1WReF-B%M}Pj@i_p->W%(oZgZV1(M89eJE=cAG^<;%1@k)>^l~O`3+XB zmx(8!yD-yO=4YG35BXW#vPaxCHX=H7?1LnG$Z`1H%H5Gpb>-UjznE11=sfCow!NL# zz{6r1dv33}ynA2ER(?%D^26)>$ z$1chpA9l{Nsutd~+{9rTWZXA+(%xC&R~*dh_^n9OQG0U1jgbk@srNE$D%~aCr(1f< zpNht<+IQ4BRzyV?ZdED8+5;w)+2Y;4FFUT+`3*dtQQg-VuKNhN3sG zRO8~1Sf+WnZg?k z$auRcCu(MLh|TeNGftX6T8HE>*EY&iO6f13{5Yp@$i^gWEM7aYKl7>nuLC>xEZ;mg zLq9#Ur2v-tjR#8emJfM;u5h9#U;yPJZABX5wU6Ab-Uqd1U(OED1vqG?XWbjnQ-)78?*``qcSTw&XySMKrO zuK4Q-`L)=FN(Vl})AT@9ZWTyNC8mgI^H0yK0+SB@XTFKOC`>Zc2D- zUETJqPo{mwtkP7!bGTFLa?l}o{!;Hom#Z!gjoZIee`EtXp>zo;EV zYKw9fk3?&eEd0;Kz1pTaqwLGt*S}TUKGy2v`kVck>$bNh%AA+yGyH-?>g`9%tOrk- zPqS<7{LmB#-`|cMcphkbWxLsw551nHCZ-QU8(8nMLQl4NbMxp)5A@4t^u@V2&buf~ zvtyNYScE?`2y^z&h|ivCs(HE1_Qj})dvyR2#N%(j^{p$riY~87bXw}UA~(wSw53(O zfw$8%tNj7n~nO$fw7)J+RcI-+9r0sx{;g?ps@xneI^5 z*=(_;Z+HQ8{m79pNA$dU@!X<8&#=tyuBdBhuPqeqo68?BUBC5F0rZROaRrnU`j)`8qS@n2-tB?2|-s^HQblIhDRORPX5ERE<`2Kv`ot?%rWA%oAI@D3q z*>-lBBY%n5Qof`ztOng{{V`$Xmr;4^?ussy48`PmHq38LG*orh?7;Ut%es(vCH@5e z@vD^D!f9VEInH`6$g___xXnrs4dg6n!Vfop?W0<_z^bdF`+G;*U&)89Hn#p|o2Q3u^6iYbr5CKx zR(PEd4CaN7Z9c;aFPpP1`rOCAYl3a<^R4ek?iE=d&ADW@ zI!Fqx$d(N7x|+edGDjeiz#=J(3sOBuAfl@bK9w)JpF+X_nv);kq?Ab@$$+H~3L#Ll zPzDl)j(jo}Yfwmzh*WwcjLTF0ClkE8;h<&#whI70w<%zt`;X0yJdEbktp4AtO^eYe QC|hFysxF|jCTO(Z0dbzSNB{r; literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Routes.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Routes.beam new file mode 100644 index 0000000000000000000000000000000000000000..eafcec8693072aa9c7c6b3dbcc95b7e0531bfa2c GIT binary patch literal 10440 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Server.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.Server.beam new file mode 100644 index 0000000000000000000000000000000000000000..f67c2917c37cb717fb956f687ed71f285eb56df4 GIT binary patch literal 3636 zcmaJ^2Uruy9^a4v2@(hiO+k$mu?2zz6;KJ%yI3+%+80x<-qMWWqHiaSe=TibM#SfQdvU zVwDO<;?*jcP)aa`5|P6tQdo(@60r)FR=`>%hN}pXLh6~HphhJs1Vf29g;;`P1RoIN z6qr;khvNtpu9m3yC?b!8ak&^xe4PlZMBkYDk!lcFE5g+%ilB+UC4-)Y1Zpb=oBo&- zegLC{8iz%4Oe}?^z7YvxIROiSWjK>iiE-eMuQFaNjmI!KUyMp4U>wKrd`t2y9LId#46jC{WIg1NX@{L%`5tI@g%YfYrQ7TL!NNB>M>bS-%mJjuj zjnIU1)5P)urG^dx;bu0(p*&y-S*27PzKOMo4VBK~LzLG#z5&~0D2qa8nX*_yDoq&7 z<>-XQT%iw@$tG_6&_74RER=J)@uNU05Ac}01N;u0N4N&0CHWe0LVhh z*aDFBVE}djr2Gf~a?Pm#qzo6}pLE(F-Eola1nN-$q@C~MQUbMle*}O=%8wr8+Yh!u zr62RVo+ap$V~{os!Vnc1%O(J_7y+IRlWz8ek{@Nhjyq9DpoC{6I1T^=iFgDjAE0K=pB< zEQpg9qsfIj(q6<=+T|2=$0PwhBOaECH3+80^-`(k|FOqO89E^YIZ%p8^de-4&QWAK zBDmte^9SglQm#q{BRE%|J8&W?3Gxp?6M+29zx*)fsibXM z>QEFD5lV3?DjLkixJZd(5||)T83{P10Aw6aH3w2;1Mpy_7!b?=L9A9`B1A!^Ytm^W z0>mVNlc5D}bAdmEn-meF;shkYEecCer2;KC5EiBa>6iy=z_PdvCPz1r{fWOiawOhO zfoR=SL7?mpff`XY@rD2Kn{h#yDs;=gv)ua5s?izAs+x?Gb zkDA?GC{5RVHuRo+ZT+eVayV6bjXE?t&uiQc>sN1UYikJ)ZfvM`sONsVNL7ExtH^Jr zb#&>q(}b z)-`6}-B%g5OkqFE(Zh*gF5u^@`fHjRp~st6^tR0PF5WmZ%j@!d*^-q9x1diF`U=Os zUvoODtLDU*f@oOdDDXd9TfNN(8d<;oo%D*Y`b?o=NRfX9V`5CL+U<bBu7wVnzV$cQK5}^mwrIiVLaXWa9;Fp;`9XQ`8Pq%dzG@Mz)w5j~-O%2X zdb2HZPsPI1=ck0z?~cpL-3D*=^Yv$JS#K}+>HV?-{NS{ERg~4m6N$(}1GGYF=Tr~h zBi@sy$!T@3!e-B`QAifnwbd_w)6r($c4G&>nvK2KnCG56{CrY}ck;8{J-_6p%yii1 zsI|ep?>+8aWjyao?+Ai*?pBpq)qGCvpPsb$FWX^`--CqVZIQ*NTHMDUyY%Gdn}mYb zucp1S$ZK&uw}0%8EuZ_!!n!|uZY)YKOfvtlTrodGclhL(*oqx#1sjJa8Lll^RKA>2 z7Hd{GfwQMzYOdjL2QAWLh@P@_ulpRKFGanl-^#0d6Xyn|PVu^*sd)da?838;Cbi== z?XF+aj<`EyEiSZKie)TLZkQM6)_g*f{Yzy;|4p>v_}UkF&&rM@Cr8BYz3}9I_>dtT z>l(KCxOSw}U%&NMvL=yxST|R*Av);S=p{A>q)ylDHXQ5h_RI6&hf_Kh! z8_xt?l~G^5n@5oZ5V8!@={f~dCt0~lIVe+ zgp(I@@|Y)o_UxM1Ufta}yqCv4@VjQt-g&u9U%O*&7v2@0jeobh13uPfW|+RX!J5A~ zownGN_phXmqm9hFBbRTQF>z~zb^QCo=MlZszleECO8f#Kw$vN30G3tOK)I%GFC|vzjq67W^c5q^-N6v^-J zE@(#l<5s_YkZbUOBY+X(iOfy;vle*So#eckD5qDpP#S&WLPyl7F+EIQKC z8UodPe$l#P(U?$4qgQTD=XONkRazk-?wGaKEJ`u0N?c95f|`$UzF1%Si`QlUqUTP` zvz9sM-$n46ZSCR$rwTMqp&L$!tjDwe81R$GT#6I literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Mix.Tasks.Phx.beam new file mode 100644 index 0000000000000000000000000000000000000000..763208f9d02ca00386ad2de0790ee8d310eb37aa GIT binary patch literal 3432 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 rV~N literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.ActionClauseError.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.ActionClauseError.beam new file mode 100644 index 0000000000000000000000000000000000000000..97998ad874ea6a3be9e8735be915f1097f837ec3 GIT binary patch literal 4560 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

    b%jY z$a>q}%9%%JM-pTUwnOr!W%H`K8r2>P$Cuk&HXC^(EpIL1t?h5ueCP5Pci(wgE3lh( zYvN6k*PQECyAi(&Hu(q6tzQQ_i*r2h{z-$Q(}sVA{({c!y5W{-QkT|nXtA;D>DPX3<0-3)M|G`W)sty7jJuYl&d_B9EYd2U(*J#B$HL7s!vL5U#4sTrUO znW36bI~FGa-OxQ#YV- z8%m$PhxwYi0h#!+=vO-_!JuyJ%c?Xju|TEiqP{GJwPXTt{m;vSwQD~2vNUf<%O-M@ z#fXT{0Zkz)6Y1XKAfiUKz8f7{EADezKSvv6Nh?B7D5XMl(Eh=uIIVj+C-u<|?23nW zOP7m5aedY=O|YLD?Ehb{R)Zm%uK>Rd(6I}`!T$pwra%Dwg?-DB0bm;0o$N*SBhMiF hlD)~3$WzE3ko6aPJqU_PmSVb$0I*&fHtmC;{{R_>3hDp= literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Channel.Server.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Channel.Server.beam new file mode 100644 index 0000000000000000000000000000000000000000..53c0b20a2a2843eb3b7dc07b21e5a5115b7502d1 GIT binary patch literal 34224 zcmbTd2|QHa8#rvt;F=7>kQ5mP5i+u58(sTWvXzu=Fm`6ljGeM4MV7+Ym69l;MYL*D zDq19!Xpw|cNqfEL&QN{7zu)iwf8W>V^UOW>x#xM#bDr%y=ibA5or^XfU*s` z?DYnGd_v~Ge*N-=h#!T_?35g7(`}ovQ z*=%NrUo@M>V))Y|7$M=bngAMuN%N<&X#p*?I0l``X8A+}=;a4SNBXlv=#ebn2&zAm z&LRV(Zv;IcI-KUqVl$)t+2qKOa9`Fvj|S`00c&0tXD!vVDuo6ZRFhot^RB4M9{2|LGx*G{xk-nSvZm&N%Qri287Y#o&3Y;EE4RvH_`KbGc*dj!I0aI}Su_}!jFu7* z!eUU_{=qGC<5)#TNBA;n0nz@n7C;{m4)_4UeOX+~I5BCA@c2IuSnT|{P9c&1VHch; z$xK>c%^dT!R0boO5db_(fe}gn2QS1M``An>&>V0$A4W)kFX$0L4Tl!a5&z4P^8-n35VqJ3l8t0Fw$FlSPXRsF~9)J(_)fuF2I} z3gWfE_X2BJG$xpFNCJ)7_qzik#cxk@<@z8J{!CUrn~uaD@JSd^RX*~=jez+l z&j)Zrk^>l-0R~`?AX$P0-4H=WA?G+>B8`h4)M0Z&?hjeyfJ!$JEzHz^@g z1G8>HxB=54Txz&V^$8D&3?qgFIC1YF@wpkeMl*mJLs)cX%U=n2L=&-xmaZm92byHf z--*R)KKZl+BJsusSt5k}kIvefkhJDMoJ(sZm&^Zr0N6{-Qy}yE)BnGrL2tsJ-dfu8 z5=v;!Cnqf(E^ehJ^dC4N!++q&nv4iqgddH$I)C0j6`+NGa|?+Cs-p!UdXUtdznNbW zfdqVf7QiX^_+%pa`1tSukiS*{&j6^Q@EksV2}L}LXpG(?4N0ubG|zO22IH+yi!RLE zYt^cUBEwy10t$vDz^@Z*!v`+Dunitu7%)HhO@Yw_@X(RShsqbkhDd^?Q?PifI97s$CFo!!0f7#O=m_Ic=Q(743G6}`)u(rvpm+Iy_l6x| zB5H)=1bRz5p{DglNqVC?2yY#ydEPo$f(2HR1WQx(0C{GD4o?E` zzbR52onRCs!N~^{GN45ef#D`;JO0!iggUe|k${%K6Ht&8LTQXfm|6F7p`}q8DHE!2%I*ZNc6ETSz&aS1^jmZt z0<2Afb%4ZDLgYSRQ#D{yJ)A05AGZtzErT&SFmO~QFe@DkARGr;7)1u!P{orG6#;W7 zaV@9@=J~O9=}sUPm3Lp@S92@vS2Bk@0*)yi+3| zNt#R`S->_#pu$B$9%Ffc(9Mk`g|w1MQ>h~&T} zfj_Q9LE4Bv!X%&pS*|bY{PD$=Fop!9fuewxj4WU!;EsGC>aa!x0U|B}IF!y`4ut{k z1cU$vmILxofII1_56fnLK2a*S(nBq~8u_4ZsmnTf6 zVKR;a<4jPH35a$A@LG~O&Xj?rNbXOK4LgIKLpSc?!+6v7N?7S9WRk&DQU#yL;B#d<0W> z3D(u&t}_;ZhdKtv5rA(R;x?d-01$!oFdRq&p-UFPLsIT&*c~iJ=8}9$97uD40JKnC ziGZwvAQAau-QBPo30PxY1c63^%mWRBs0HgY#tl{iD-apB@dd-I5F$g;hzy7$<2jHP zka!XB1MVthRe^ItBQ^pYK!VZ1;z`CN956LVF%DQyoHYuvR>#@s*f6SaHoQ)f7Fd|X zGp!BJw34o%i>t-oX$Iz|86>`7pdB*eZBEEC24m%HQb4{Hz~hYhP>{{s(7;x%Sl9wf zm}5NWGm`$mU;JG~e4Thp1xX3E(1mp@VS*b6(nj#ek|7M76Cp>JE4`k8hS%EuokRm$PZXa1FWUw-JGT{-H(~E9sBL0~0y9Vpk*j zw3sh;zzU|L1QT?taBF#E$s?(Vf^$ScYk%iPeXbJM%_|WFIl{WXGqn#lQ^VX$?K7Vq z*UbwD=BCSA_?>uDT0J)m>Ff`>0(A{!z!lN$kBF{_DUp@L5}1>_k`R$m=2jB7zvPqTtt9J_!c7504oLS( zAWA@Qz}FB2=!yA7+JdL&4Ipl9!6NO>fsAY|QP4&pG_q)Wa3EulGJQeH++>IgB^Uu9 zniKd)WLzjo#23^$Fp{)jf+dW0tH5mrLAM!+CnDAg4eBon&JzV~hOt%z81Y;a?u%d7~gN7)#|*QMgpWf2fpDkaq>n2T=L&s9-=PNx=bE z^O^H|4rI!u3i?9@%39wF92HPec~p{s3dEKl3ZepM;*GVMOBMKs3dELQ1x@+<1Wz_y;8k!euoN8}tVY z1FR_z8~g`L1y~9X8}bKh1+XSOY$zEQM!=JaNO?}MA%fL!6AB6w;R9|{)M&+f8Z9xe-*(0QT>K{qOm48HdYQtM?rKEyc2iJ!O*G3vD|g=MC?)+)S1Y-VF}juCJK&)f*8g+ zI2MQ%YaA216c>epqG0S&UMH*HotWS`4`+?wP!MZA`Lm7P2~M~~z`zI>i#5e1prB|R zk{`K6gA;6lY4n}18<6VO21(;ElE%rPXyC;|3~!x|Ct)qP+~VfAQE;&+C>AW_aolBr z%Mstm0PMiD=avQA|13h{)p3bHD6A<8N)X`#tCbzs2KN87fohW4w*RXQ5|NS!jp16- z0n`VJ8<4_i4VT~Ad49Ytj%rc?m)-mxCm1c9`~PN>lf;1>ftdqALQgitC4p5uiMxsu zzzxU%NdzKrC6EL_CPMZz>%e|yzUTs54x~cg!hw)YZV;$uw^rb`fvm6%$qK$$D_5+a z1vXemgyGB0b6{g?p#;0?!X#w%19cBDeFis8rgY&_P*6%0E|r&0LU>s+4F#pb*buP# zI&s4sfi?oI zE{0Li_6poyun*ab>_bwpk}NFjk0rQbsTLynDZHYBr&fPUnB@lR1i%C~jLv|u3<7sU z=K%zk13S7MTvg|E;c`$=4s3HCB+;EHXa~rqC}?K|E;pkJm+PK^q;nQ8S>~ajTo}tD zz!_lLo46LJnYRG95Xs{{Mc$SKAW8@TlUvFy-jF*C7?xnHgv;j+yQ>Sg3kB^0s-WNs zP*6T7QBY7p1+F@S18puB$N=M}fN`<%Y_JkwCEdX8SIN>1lq~WobmNVbGtHnq z7bHI1O@F}Q3}DAS(ztT8A+C&l8%MnT1Mqkv6F839WMza;knGBDhc04Z1k z2u5}bV1vN{e_z0#sDZ0Qcm1yX@a7pXp)rLZ4K_fWl0jnSKvXcGA_$Tr7;_~&;>u)D z?@CILfz3GoB7pr*oNUgJ%0|nTUP|!XOL<3=#2*RvR54Vp1;D5i;g90642oUY(KtX^g$q5A=(8KKq z@9Fmc@Aq_2u%iZF9f5!-=r9MO11e)Y3OWK~jlm=s;DIsEPw}wV`=eZKtJTwRhDL@|&6sm@TP9yKc zvH5%`=nV2=8xJido7-T|-t0E2Qe z3c72Ey9XHDLxcJRyi4Un!z4hI_&3o#9#KDdqX>v9oKVnxL)>FP^q4!Us~T>=b#BxF zq@t_FJpyhJE&}_)uE+~Fj^ z=8{CoD%_yE5?DWhPh!yA*B4;LPv%NA_o`x$>#tSd1v|1r>T;khNXY5VM>d%QZAH45 z2}mN<0Y-_NaUXJD$Ny%S@;AdrNCp8LYfx6Zf)Ggk``Kf#6&OZALmVj09^{`VJT+7U z0}WGfPf*YZ*F$Q6d7e^mBWON8@VU~Bj}J3E_uZAag8S7l&VNQDvgt%7jUCMd z-|Zu5M0%hR7E1(wiAMA=4dUE)J9aWL=`Sqzt0~dQhzPz8{Z@6 zdHmn>^WO%Wqy0DOfBFMY7fc$JMUO-jj(o8FZw&u?zr=qJ@Ne7wzi0JtPQOLvdEWo_ z^Z(H69}WJ;qyL-A|NAU|ivpsE>l1Flz&ZbMN`M$kWf8%F2%oI8O*1gCG}>CsFgI2sZj;?F%e0Z4dXu)!e; zBAZG39Rc%4KzJ-Ph?|iw=te}3b?aTsoSat7qrpK01~94-@t^%yIN7Z90#R)i89-zQ z(;|t~fB<3$8;o2mvk42eV%am9)ibM1fV z>fbVA`RpPXAkXm=!S`hFwV4kGKokH!04V@s05Egyg@3iBL0e!Bzi6&a1Xl$B2(2Oj z5&#r{WdKy?+6aGH03gG1$3ogj9}NJ=_y{f1N9(Wl%D>vWppDRi^JRR7b8RzlHJ@uE zw6*{co(=%k0GQ{w4z!U!X8;e!o*GBjwc1QXY0w|hmBYLg` zzz=dU&=X1ov=KkZ2Y~cFH`fLizB2$2eh9u3Kn4J0oE8Aa01*5U0Eqqs0UQF5Jl8%5 zuJiLa0NV5Os{`%D01zD@a|i^0@ImM-0U-Qg0F=459=I9-K=g|E(5kt%I=Jf0wN=0s zxkqT_0L=TZIB3uNwHRn4^F+o)bc5U@?F9f3Iz$G3>*z?tcV+-!0aO4$>~J3d@`pyL z;$DDjInoAj7XU(sn!}fYHo~(P0K$`h4$lE?q~A>d2p!)Xz7#Z(emwvXx_Le&bNFlE zii|&x--EOPTn2#Xd!A1*(gbi7fDnLrd;!t~Z~*{>wCBd%J%_&tuEO*9H6d&;cMPIy z;3BbqPF_(_ppyXi zcoUT$G#C7Jw2+Dh2x$J04)<=sTxEoug!&f(J;=xHX@Mu+fRIJi}KN;slr-%PJ zY8JbIyS{^?Yv9Zt6$u|%t|n2j3;tT!f6o;>_v1cC$6^A(nd2}%x$qD_tvO9-&55qX zJCC@678i>_4s20Z#-bwvsln*j|MThQ*f~!EqlogX7Ap`K4txYr!2h3dSN(q;R~6Bz z0M}9Ge1unUB7P@=_&L#^No57o5J!;U$%s4>G$L+cY~dP8h--Qjl1zq3f9p5-9Wcj00;nT z03iA2DS&DKNUj?O@ONJQJD2{QKmX2|f9J`+bK~E6@9*5W8;pUBi{!Vzb6_U8NAm0m z0I2{Fd71zq{)jl%RsjA05ImwY-?{cCa5V*h@I=-<82|_$f*CmC4z6o>5dzeLj$uV2 zITIC$=QHcS_E{q@m)ci5d}z;UlyWF|F6>7OrpAPTvXtBFcU=EIgdG}cVHb(4i341o zXhhZE;4BLitYLg;!xdx%LFb<7W+5yvu`=MuIEz7zjr5s2WzY1PtAJyLku4=aGikA6 zpcm2r&uGY5+gMS6phklup&^L**obf-uSJ6sxnX>pwAO?8U}*(}P$Q{hFd6~rC(48C=D~yo%m1&JK`#)l0$X|3`Bbm z+;{l+gmSk{*U*)+#Lyv@m0&A6_#%ICnBcKXwYqn*^QAUvoOzQlw4Q$GNu%4DvNCZy zlw&D4XmtLBY*5=44?9`gFF}D)@0T5&RBAz6njN&Xys_1J;d$Nn7o&E|$A6=I8e+Y1 zxvM0UEo@f$#&kG-tSa%1;aKFDzQe`AtTQ?fnomBaG;ewPz9sbJ=1-f?bPR>9a=6&= zqCTwmi~tv~tgVkrEm zEmm_l(%|BF>Z7*9DZ%v-#uu6Jgx-z~7nX}${kDbPG9l&=*+{84I-6u1d~PUgio(d+ zflF*2efYyDj7{qe{WSHIJyTLV{Qj}6-qrF^*sv${Rb=wW!%v;Fk<&v7_2=k&wvDE= zFL9AVmobe;+6mtibv{#*2ExRQj_8eF`l=b`v?o1p`4sN)^ziiL5GM?@ZBje(-V8gh8#@{R!g;`lrY4Kh=7{wp9s=Zme*@h}|xAv11@z>vc z+BV9-7`ePs_|YuuaCYU=o&G&T^2O!f>Iapsl6fnX zdV6;Nrm>cC&V6cr`UdCEJ1&SV@E)K?ZyG)}VO%wELNj)w=t?Ey&kp@t`;MnSjePq= zt~kBmQIX)mY?^{y%`hP z@x;q!o9Ue;qa6$0@{5nHw73)Yq_d)StbExai95aJxSg?vBuAmF;&*1R7K;Qv>;BRB zs=M;wge`P5{FUQ9Veti$vvJG)9$%>Sw=a`fL%=i#{HP!@O}EaZx zH6VGzF=CXa6 zq)@G5T~6ttuWQcsqS>Xgn$TYPh$Z@2O= z%!xV_H5zyAd7zHmIwS8Moadve(`)gkFRj!RvB54l@bm0I#P(BO+szNS{!(?CN$!!K z+3zYXnpAb_>5-2$QyzP(mP^huvkuQrdG~}0HQ268+2uOTZc%=+aMcYg-;Ea{tV8|H zZ!uBFKEcNv#ohbdG%b&ix90miRefqVW&p1X+DADN{FHVMhtAmG1K4W*ZaMJ>h3>QmZ*X?R;{=DO zD9-n!D@t+;ACfSwUl!ZGi27DV7E^^RdoG)KF0{VqBG+SDOS!I)WO{A2N_gx**n_b5 zv$8=J>;1do7iue(?L^z3S~6q0a9z`{!;ZpM646ReVI37}hQ*3QeyA0r%hRpG-pxE1 z^{v0BP_vW2H|)zVY|fBk#cJ2?>X+6RGe-5(JSxX(0)ij@s3&2>FiP8H4Z@Wj%%sc@ z=PKS?OtA02iH{NgteEQ?_(NX%MutkE#;@C=Dd@t~o%`%n^t%GxBrbdJSiSwScHYeb zjqFTu|4YG_qD=N=qSkM`q}Dc9}8y|}nEn{oC@R+krBFd}#7bvgZ zlTlcmCt+`yzd<#X9HN?<@vzns6Ovh2os*TCB@r+-@Rh!|SuAysT(C0~+Mh05XMe(Q z+p>4Q?^)wEw;B90hm9IMzux+F4*mTxbnDmFnmC=YU#n5O1WtYUMS{z2Y}mGqmC#9f za7yRF1+Q|8wsP%H8@FEaIB?`@+QIr6%EAmv`GsTQ66Vdy1=d^gRJ@*+^{U-oPO5#n z`jADst&6_1Zic*bLsLrEt%eGd6_Xtgua!8B+_hi!>ugogR-b1thUG6`+dgchIy|->VyeP^p*~s5lK4Yq2<8J46aOpmpBwhc? za@AdgO*`&9S1r~Io;Yl^rpD8|J1xWUs`(3b5zgB@ixd%!_ZW^{ugw*vl)!b-0PBp` z&sCqg2VS()nxU&fvG85uxZTac041N{T+z_t*@$78J)Eq53%3*J^MmcjcH1Xd zugtwNO1&H7oa3bVNx)9U&`u@hOzM)PQ)(;9-z~j)$e44$`*`B*con7O>+&PApAur? zva;|_=@#P;XZ5f@kDkz?{QQvZz>#ZOaF&&~w79-?=5UMJH7|u1%sW?f;$qm3K0J&S z9Dvg+m&A#(D;uVvz<9Bo}j^_1GiK)wVo~$-Dy;88lCL^k&XmTfKB_*}p zzX82wQ=`6Y_7U-h<#qAPL#93NON(WBH(z*cBHCFI5q$8wp(Uj#Oth>BKEL+5Y97O| z!u}LXHBZ3J8M0k<)$`&blYVUlbpOP&eX=VGyG%Z%$@}=8D!CT2X~H1r>&BlMFBUhp zdRnMI-87ozbbrhG0H5{Nv+F(9aGsuRe%qjNxclrOsX=$;0!lAxJEwZhx4MEKw+kdJ zV=n8W9zL=wKF}y4Qm|#Vrf%8Z@eA+7q+BzqHjw;GRXWgJzp601UBlD1M_)9-777H| zuBy~Ic`Yw`Ky+va>0-^w0Y2gOh1*snY1JHb3pN?CxIS3%pnLq5EG6X12h|ZW<&o!e zev5~Wcd!&4fn0`^CA?&EGzVGU#bZf{lS^Ux4G0f2nwSvDeus@X!j_B zov!+_@vbK1vrDT`by8UINZNWirM{|{M(MY76^0Za1-ol$!M+J%&X+st_HW4Eydiw0 zW{qmh4f|fELJaPhRaEj_ql+?1)4wiHUotB)U?0tRc45f+-7B#>Q9)K(%PCT6eT@Pc zHK*1zd|^$=dYBwm6LX)g*?01YkW5v-J}Ud6lXo-6B5GYabx&;G7$!ZhcXNE)t&W}i z^-5LZcjS8M#RAnKU%Y#36+#m9Zs%%QH-3}eyDq(Wozj5)7dl0))Jb8Lz5N4KLor{y z$lV#s&-aMvegD!*aj;*a9HlT$`cC%{rR5#9Fzde{I+Z z`MPg^pT55J(cE0;2!D%^B`Q-{R!SpM3u?uvG8sF*OWL+r+AbM;xrh4YiuAd!0(G62 zJH!MilI8~1Lm|I!wrC$m1+O7hvler!(q7OBCyUgoOeu}C|WubWR*?%5ngOFNZt zW_U)>?9koWS;8Ad)i+!Fe=e{50?GO>*imLP^kUT3;%?ZZPx%_ZpndeRHQuq670ajh z2$@IpC!Bd|=eFS|1|u4MV(fj4&<;k+^X9IRN6&T|d|h%jbb;{Qp7iml`{kcvry}E$ zlMK#`eKaceIr;YF`-zkJ7c$onKf)>PK~%DB$=VN#cP-p{vCum9>e7#v?;d4Ws%2H!>TpkbLshA;^1-Ru zrY(0P4X$n7SaMO3Wb;MMW;XfI=DfY03j?S));f3PH{-8W0i<@;H-3FHeyBLn=*p{H z>qLuQig@V0p}Xt%BpQ)ZwLh_?w1X~fP#DzaB&KBq*+i|&zhJmO(J1HHi5Gx68&F=N zcu}BF?2k`}2u;h{>fToEW$I8zPb4V$ZdYA5y*b6$s|v0wJiIX1*(v7K=H{z41ag5mZ9Cp&)J>n)xj*9F=yA__VBB?l26|ZcP`Q?hj7)&l+um)vf5|$vZi+2Rd`el+Bekw# zos(}&7EawwKux-ka%Pg0m79M0!EuQx456!SLOE`=`JEDxTMJ(tz4j)dopBqBW(F7k z2=~a~JEPIoBF|@jS+2UlmpvPscv!CP>xdY}LR03zzWj?hw|5FD_P*af8E|zLJ^XU> z*8|WgnnSw6@rjQCRs}yZeM`IFT{n5E-Igy{>yYGd_2Q``L$+9#zz-u#1FuK7h6kt^)=SN@mZmJsb1htH{~aPripb#)(hcvDW*GS2~nNZV{Q!-9txozGfl5m z%mf=bb<}k?1<%&p7VS;_C=^kxap@6rf<8yT{u{z;g;(x z;@EOVweoreK0$QFr>s$p*ruV*_fcX`%gZ`FWYf1^wyF$QdVOrMdE=`Wr*>*kvbu*+ z-SO>9P2OZpWETitQY?4Tcd*xTsi_It-MP(Qa;7lgmtNfug_=yM7u$+{ygW~jvv6-~ z$iJ=7cHpPeG4jv>^H*7W8_ubV><#}!3e$LVipb>PP`JZzozYH7)mK(Jhv8RJnH#o< z^*K@pwe2cBiPUA(bp!OEYhC$xT|FYLTS60cpb zfZxLX$)fDlA@>(Sl=9H6M#6T^(bPi=e#+euP%*doUcu?ZmsK|4jYoz_a_2``n@&l; z=nCDrrm*%9oT_yY>ynWoKfc2Ir|sD|&RBZ0VBi{1+K{3iOy7TRd+qM0$|P)a|L89i zV{J2O`^%3%Q%eWF9gMegspZc+o8q`>`pxI4J97O2S3Z^X%Q=d4T-bTdo6tFWHSn8H z%O-0V4V5$K>hK}O#~1Q6Rn+8RrsTc%*gGMs&5UrL==m$7uOF!VMmWY2%Up2p$@%8Q zGYLAS>pyjM{d~VAYv--#B5FZ9KFXd**CyZzLaxUDDdS>>b(k6r?R_3 z#|(4tMa%noEnECjes7lH(q8N+_N&D$7k`1Z%8o6gcZ|vMp>NJ7sSc;w4K8|nJ}LMF z`h!C7%bAN)=d+vkMt?rX)Jbktz5C?l9>(p?pl|6_n?HDVzMR_cF!|_OO}m>z#y2lig6f(Q#_(VN9T*NPhk~sglYg5%d9#;R(+}nen^FW~ZiC$u)ixojr;v- zO_OaEx%)hSMbdi9>PV$Q#)i6s{jbk18|r_S=-AOHp#FTV@SucU*@~>tx1rld(%y7u zI*}Kcl-^W%+Dkrt(3~BOUQYkKGFc14ofLd!}p#{~dABZ=?v}Ia$Jx#6~U$wgM z+s$3pAIs%AUvBQg7$4jj>Y~`#U3Z{#xNhwP>C&<6f^SzJ-*YnR{qnp*BHAa|Aw?jW zkZP_eJF`()^4owZXJlXAg5@W}`%Z1$`?mO(<-MGCL{U~VWvjc4ze$SfyXZ^Uo>09HP90n*5IG#hWC}q^v`R^vDhVB@OLbn$U-is6%Qkn}(Y_w!X_0d438yr`OEl z-{!Alv$~)|x1+`(yT;>;w5CkSOn~Q7uPZdmD}_hmdJ>*J{rLUZCF6{2>9>!2@9+opHvfJ0(N;0Eh~8`!-vjMJ756!p^y`QfMHP8+uRWcFR;h#tQuR=aB= z&Khd3nUb;EeIh8MPjf`(RH;f5e#8BS(h!1q$(ntVm^ORy2OfmH8Qn<2GN*E)&kfmq zEjLuNdrk>p8_HHot$Tg5TEZyw=kBB0m8+HEp)an^8c%gzcM!UkU;pvbomtwkFtmgA zDU3=Lj>IjW7C$~oneugP@&E7vwZ%-?abkUsUVkWi_vf?y<0sl!`^Nq5oQVD8qIrT7 z%XDzNUClp{v}_%I9qGi~+_(9iavTNu95Iiuv;XpwNP?qN zFHc{zZ&BMOa`%Oewx9h%UDj4!^uvESHu-&tQj)iGNfzd8-Pu03y)CO2E!0eQK9JIU zd+bDD!)S^FpO(o9ShA)2d0^Xx#$xGbc`aFrUT1E7vXv?~9}I`uP8^49qYT7;!E zVIrU(@^L?Po}vbc^1EW3gys2D>)X1U2h8y0vL_r?+$w%$F<4GI8AS+r{({pIk;>p) zQ>Tapuq3WMZ>LA*YD_IuoO;Z8VG?mBV(NigNqAIf?qZVq)c*eUw$9K^1x$e!dRJC^ zcD)tN&ia~?z#hr3H;W37Z?Q1n7-i=5rew*nUPj*}6yCkX=yq(9z@n3jKacLIkY2V_ zbWA~XZ2$DG^E+nj1{Lk(CQbaT&T8Q7*0re>7aum8^dG+tQz-AYd%j9Zc`&lTV?r)s z8SYeg+k{QV;m92!Gy~$^u#m3U1FCg(F9WOChCxCsGmTH*iB)g!UsS6+Ch zmqYWleB!;o<@pV@jH2bv19v40IAhfG!Es&4BtA*W z``N&v9DKCdk&&?Ww7bS`U9o{`Es92FcQQ3T$-Uh~X}r6t&7}KvT=8j@;`*@k{A;c| z?M_?SMk`~IRnC=#oSb5y>?SQRG`nK_A<0=4gWRm1PZBkb)pk|yNf*99Nrx|en|*WM z=EkJ*(O5tBrVg5cP;%)I+ z_9J%oit57p!Ak}SR4t>%I}uNsPex35x96)QavI^NA5D)r=69N}4e%4k$6BLSGFj)E zs*;PUx1y_khRlKAt3GR`;Lp{A`k?YYN zqHX7e%U#rJP`spV?fdu}{Fk2zx0LSRa%NZfjsBgvH`eY}{k-;6`DfXIz=rbA6@Bhk zBKcc4x^!+|ndvq9IAa6ts5{EjkkjO3YxP>xE_YcGe$6@+I%;`Kibch;CG|BqS@4~! zFIYL7D;{uQBQI?2wV}@N)&`bAsz2jF)JQbCp<-9iPmdrcix&isn7UPk3NaRahQDO? z;aLtcezxn+)ro4KtW$VdyzbND{{{x!HP7^`Ob>9&h`g!K3RUG9353hP$WYFLGuvmtP&YwI;F9d{}UR zFdly?;+C!JwgXaY>8wNRzS-T#e9LDPvf{gx!nws$oX;lBwBp8hcYCdSbKZ_p{eMND ze|p+PJIM=g^1U=f`M!3}XjJsxjWsRO%G(vkcb{9n$jW&(3y;zc*M5=j#+JFI^i4a; zMx5~22XE?SuF_s4zN@&ixzVb7w&~L8;Xb{$J|^&opH>%6=Sl|?cl6&*6AXyjGIMQd zz=zW&#I17qRlC)`O=P!zp!L70qYAIre$jH?Bzt>~!j644)J=~%@uvlCw0#cR=Re|a zxBFu7E2}hVJim2~ZKJ~Q2xc+05G`{qYLCtQ91zRZ~Epm}puk@vPOn+OK!j@x-%g|I-WC(kBx zeDPp8oE>6JYHyRc40~1Qem~J+bXWWVE9AJZ$uyffz6J0aURyEj;)G_Op`Ue@w< z_^4ro!FPoiwCL6(*$yE?Q7`S-8&{q_dvbmVCry5hsy;9Luv^3Fl7ramg{t8aDNN~w z>}~Zs#MZquRkMVTnH)<1U(XJdB)#4)!@N1UVBzLl+YiysC*NApmf`BK8J}o)yk)N= zRpW@Vsc##`m9%FQA-1j}_j~+w>Y>M*s`i<(Y}0go6|w2;QIZygn|tEuUxF6d$o1<*X@ry-?ih^c#>ts zaiZHrdtHU1nX8K~Q>9*dcb~3PIVkYxxvfe@2md{MI=m@C@b)%GEX#TlKXgVKq8y4a z$y|mBQ`YHbrMMlP!P)gY3=3e5?%Y`wKz?hGw3gOTXCspES|iBIni4H~wAOQU?D6@q zlZPctr;Eic2sfSUmZuT~_ZTHSNZk2sy3~VJQt;Bnf7Z!WwoR&kvI&kNYupsARiAla zx_r57j~_8FH{yFuaw`8)z48J0m2h%BU)XWgimrDDPPiI8(T&0?v6briWTqW!hZa`y z*O~hDUB2p6UvvBNbb9^Gjz#9ZJD${4p6%Be4F1?zEU$`-QodiF?Of8YwEro4_WXu* zO;Wm9Y0_-Hi?vJZ4;+^5-@)-3ec2@2KfcYt{=D|4Ub&*$lWU{C>-etO`*OWGRqI-i z@U!W*5$lMKldCHiQlf+^$wiSOF|2K84L0^4>s5#=Fuig0c4fAO#m_x69ewf2`d0(W7%Gew^uxp=RIo}?yu#;-uQHN?;)&$vZHSZ`3{Uo$c zKWxnZp~dWywHJym2ObJHGRe?Zo_ybOWs<*RVB<3B@v}>8jyAo05B}3azr2ZbUT8_s zovr&i%LuCSvx_Pwk6y8p>=Dh^vV0<7Qm4u&H8=F6VwH{d<~;MJ8boPb#;y}KxnYgf zDHnWMq+%4aY+75(SoLtN{>XMghL`i`VFiu&D9@mE%2FC!)O< z_a4(sZrCP#@Pb(qVT=%3JsI-O#@4>YUi0ik(1qsn=W9@I`skLVkqOhkR-h71W@f9V!ZZy2Lo#W$XaqwnYf_dj% zh1X3l`M&jJp+#!lR|%!*3NHG2{4t+{{_2ZsnwCbsn|yTdwQJg}i7)1;t@D?Cf1Gk7aMtIk?jDENliv=1A4#9t(UC5ec4yV8p4iP(`VpD7db>Pr zEv1C16Ik`6$|C#7%>3DmBU0vlb`P-%gEDu{68j08+@#~wZ~WZxY)$mZ!O&HEOV~~3 z3&Z!G%W&P6u(c28aN1hN>Ix;tKk;zPba_isPvy4IB{wV ze(mK_K9bLPf#hM`3X$Qv2RBo`j33!u{&K1BHM6s-oA=B48y5_`zvj8!>uMEbG~9*7 zy_*r!R4?tSDa4RE`<=+5ULkH?J8{8z152W=)Q+rdvNm~*dVPdiawdw;%i2`XJwfN) z`5oivTTfL_54=vK82HLz>xVdW@Rp*L6WE)_mbw4!HHNi+TBdoj-*cnFqvg-tA7Rgl zc-~hkyZ_AX&MMRuRSkoKsRMaxPPQl76`OB3<|J=0yr}Bjr~cq^>9@XS$YY7&hs-*S zjEM#bzq>oiZ(Eo?s}m_)K`UA*ci7@Zf%CDS>cJ;NLgdV~p4PLj+ddOF-?~RfCqMDv z%jdKl2Yq?1K$AYJ8am6)Q&K{ao^|#JYP);umfM9m^T9gzUM6wYZl4)cP;vo2|8=Ap z{qX9GFFsW!XRhEUIPLWtYWrTdiaeK`ak{T^|E5v(ujnHKcY7TYmh$H)HkZ`zun(u5afB(EM9 z5lzxh(N#;cUP`lw>8^HCDd}-O#jkJrJcKHzUhdh{*n7tQaoZ2G-ccWwyy^vxD>6TW z*KLC5a!=d8m({i|I=xin+U{nd^3vP%oTaI+pA1Xt)zYmMHx7)$N^xm3{!?Cq6BiD~ z-1HHAn5|S>Up^%o^EJIPU?^R5O15JE z_@T<6Y@_77#-eS$B|B^VXFteMQB z{X8OHXYV%|9Q%Vv`e9SK=;tRsQ;JgkS@rH?-PuIC+NVuUK|pNj_B$`?_SCSL>>N zKVhVrtz?~$H7ylEvAE}vO!=k%gmOrmkGfgK48>pVE|~dgCao*6ux9#+s+k!kL?H9i zrK*cpb(QXkVij%GRZlOQZHaOEY_m^D0Gw#xuS+;s!zYs~A^G#2g<$4ZCZE~U>eoV< z@~?z4D_mK@)}%`r@{G`dkL&UKJ#TfVe9rh zg(SQEhxxIaUE^asA1v#yI+MY_YERXV&IAAwy+4PXO*)~%xLJN|QNrw7eVge?McZeC zQKbz*zd8?8o!My~(kt4q^m?0x_1CJ(=%L{y*V@|N{`yfsFYnb?)$3)j7?m-rpZ?9cbW3bC}$O`cdNxPZvJ*;RIKa6TGWTpij$(9h7UK}CfV0z=eLk6f=w8Q9n~NEw`%;ecr#i)?In^@+I{}M;)3Ad@FKD*d@Q*P9$kH-E@{|zhJOq zYe^Mz>@Ar(yrSWp+%LD+8;5lNpZ1Of9ICZ#jFF>73)-8=(r3*mlr3wfY?T{IN+>3V zkU>(~kV?mocC8s82+K7&$U2vumv&o$Q|s09wMwb#|8B9Wg~mVJ}N%$Tm${N}KT)OdM2FGC<*U$7u-$z*4*kEwymi&iu`6h)NI z@{_;c6tz{%Eza(f=bgo&S^Uv9c0E?EO0S&>w(*^UJ{A0mWd(=}yowt?UD6;8PCLL@H>{`D5PD5a-THhp5(Yjcb zSIg7{p6xc)3P`9f&9qIAIISsJUAlS8L4N5h(c@l1(diPaYn(p>PFWRLwr*eKnYXW| z2Kfgq6$z8l-SK?9p|?O-GC?e)EpemTX(yq8nDg&1OsgnXUmoE*V~$?K>C+GAM=gl94_ z79MR@|CISq$Wp8)DtlSP0Skpy38bw->9sHUC4geGa)*|uTI}OT4iX_K&Hfr~y>9K;JCuE9i=V|X(%q4oY9^9c>)2MRcOq@t8HM?!hChr{6jECth zwpB1G|E_i|bE`{hv2#sm*M0ibZtYpBhH|yBMBN?AjKarPHDa#$=T+5AbqfCp7xuf?Xgo*g9A+$RKx1)+U<9lgpcS zsE03ll~i6i<&&t-QuFqw(<98^6K4BQ-1&Bc-1vCKCVj=w6$(~Ch7l1xrEfYbrQ`Pz zTKxO)Z_lOm2KgMSv^rJmW78_wyRq@|r}Z!2O*1vUvnJ$z2*poqvh_++JIT>TG|id2 z+K*pJkUHE;`t8l=4v>-1%X>ROWn~ZM{#P+xy;lGP87l zXCcAQst2FnM_haU`Yreia(y>@Pxw1>EBJeC9-$DQm}kc|4@@@@-g&p{(?=towG#R` zV+q02^HjiMaq~DMF@fbV6=!fzk8gJht@Yg&=9t3J4O zill*)f7dqUwihQ=+sgMYX%1J^tjo*7zv~=7N9!piDTe)Em>Vzf8Y5nD5uly*<^r6>xF_3(KUUX3yvcv$}KyPFxXeG2dOIrn%N>!@LHE zwzSuY(~iFWID?N*<7Jn_`W5Dn9-cX}FZBLNAA>{LTjnlrx2`I-$|g=AX0_QG<<5Kc zN^aMsmN{YA6->1xy5W;M`CW_dS714 z%f4JIvEH%jdHdhg8OcJS4HqVtm^oV9z4A2EBssu4`EjjzpR`qn^ytkQjUUc6*7%5p z_2wSBzdL%ZrBF+Ai2y-n-pj-uLrJ6fr$&D3X^ZV!gX>mPsax_*h!2tuG&V>^>qF%` ztB-2b-;mTTNeTpdJTHGs{KHJ#A*4NIw7kg%-P^xf9H9z@kM%QMvHf*q&T9KP*?7f> zX=la}v!d>jmdifZij_PaZ*07x);^{GAQL)q5>3+itrltH5jBTq@)3{?4%a zVQx;Cd0Nf%it-SV^lQufGz(N^$An2vo^N-2)w+y`RRQFh!mUn|b8eP9xOm+Nc>F2K z`&sv;Oq~biqL%WTLk}Nb5f#5iF6&99pWoH^XSGEl?<|SNd0F?KJT}*QdiVU3QXi`8 z__?RX=cyYKEmGdE)0F5-$|P)w*Hhc0J@Y&*S%N6rrPV3IABOuQ9r6f%Z<$o;o||pd zIwKLXYD%rJE8lpm=ax%kQM2GuNzEEFH3g3a))twa#`4qgC&+u;UPN~^k|(q;k9R5| zRiya$$#g6EgU;$FKS-Xa_m)}K7%9D!|B<-ov;(@u5wnEN zl(yAMb(iss>o7I^ESuXV5c8ZA8rN9zhNry7v*1_{W!qoPC0nk{s1DIta88u!?#h?b zdRu;P+&L#j-W#uz-$&aV{ESoC{yx#bM{hF^k61E2Y-xfcQt!at$s*G8T#*rmn~?OJE%A;GIAjWBmR~9 zth`vWVzqIsgmmGfX9uBc&Q>ZMMTWG&(Wewdq}ju6k-I~w8Xjv+_BM0^I2j6}qHq+Z z8(awi?Sw{OB05UpfEI0KpAT*9*FKhjV00NylK_Xy(U%m&R z4AK*eu*21zp}>KvNX;1p0yvVBUWkTq(O-uK#hF1LtYzr@8!@g!L(4}m3&V{K-@G;! zol*RT28%^H*`mIY5rd=?w#*n@A9{K;ej5{SWYj3O&4i;P(uLr)70#f;5OP#dSir!d z91=rLL7CmZQBmk>$TEz5Wh`j0+J=FU0LL|t3_?D7(iRQ?M?4r4J@(P4CBq`lC^W$g zx;ji3HlRl`5+My9%lPoXgyxtLwGv!m;XWf%QBhOM6jpjh0(2;+i9&^y!=xjfu|Pp~ z2o46bX%ItXkU73aE)lK|GoA|rm^lbgFtPAJ<&Vw=CfN|l=O6`g7XgNW+KBMwV;2}M z>>Xapxgh)hBd7E<6GO_W048&Wkr6)RJ{JFnD7J+P!!YymA_Bk^9OjR&5EEW@F&PP` zkySA53Y?;Yo^!#`VQ9?x=;hGpazAqW!>W*2#2ipKCMCGAixqGdkA{C_9t~$g3^aik zT3L)j!^6eGQ1)QDHV9$(H#mF2cG(U`Be3{5GyyvC=q0%rc(5~+E8$ruf{BYYa=;k= zXB=3ifa#ON+aiPVs2{>%jR$k!pO+w1x>))B(*)-m&Bd3wAwP1T;<7z5ceugK|4xGQ zV;`mvu(2%;ww=J#4IFJOTiHmaqHwn~IQIR83!Pc5{D7t67|%uE26h1iBFvqFk#dQ? z|8U{wkjOHgPrk%1{8;v4m;(lC41aMjqAXTxJdM}c0i9$NTH%v%iFoiH=;er>_&JNl zBKsrTzBraGWg|K{#1t;Z;%L=M^pefop-u(^u7TQ|Xo~qYG!C zrPoA7$Bp7Rq4{rDd6FoktI7vGkdbUXK^uvr(S)pCcf@nL5r;1ho14S}fLe z;T5@fp8o)bgH@fmM-6Gyegrwb296ylKn6hmZP2u4`;;~>c*kTXfrYgcVwBldbwlEVPn}A zU}qzuSFCA&hnN}rpdXnT8N!$toq$EjSzMSwn=AWRWIjw63~MPi#D=6C#TY)(gg>x2 z1i$xW{5u2x*aiRbPJ|+$Xy`0-3Azs5gbJZ@a2SMxV;~a5g0mn7GKNebQ^*4N0za?~ zvW3<`@Q2J`5|{>vK#Ghbk0SGu@jw>H0R^B4NI(^+fJHzZXaG&11+;-aSO$!N2`~ee zU_GD$ci;)+$wK4_S(Z!$1)vxdfkN;Xcm!HNJ$M7UK|2@+gg_EV0m&c> zWP_U^7hHfQK*Ep+G!+tq=0K8=6hwk#AO%Pjng~@wkD(V(8}uIP0eoN-fD-^hx{w~& z1$KiyWJR(PS(U6JuH_wh5 zkF;Rk0+N!virPZB(7lhZ+9oB&JtYMtHHG<#^yH~X@BW{g9I5M=sfu}cEPUPRiJFDs WKYG4eexc6-JUolxRJ5~saQ_1dU`K`k literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Channel.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Channel.beam new file mode 100644 index 0000000000000000000000000000000000000000..12fd81c9a66f8a1925b4bf08964ee2a35830f1e5 GIT binary patch literal 23284 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 g41fJ~98i&Es2@QF!r5Mg?+U?GyTD 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.MixListener.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.MixListener.beam new file mode 100644 index 0000000000000000000000000000000000000000..1a0fb3275d539a23bb37f224627043726d0c2d6a GIT binary patch literal 9584 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.Server.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.CodeReloader.Server.beam new file mode 100644 index 0000000000000000000000000000000000000000..02267ffe46e828d3c15b487b2c9591e79aefff66 GIT binary patch literal 25312 zcma%j2{=^W`?xXW8V!>nsbnlgS+j=J*h!YGNn$XVFf+}JJ&~o97L;m2Nu^MTw1`Lx zQ4uNHH$_oVDy90rXYl#-{r$hc=lR{|dEGPTzUMvfdG~YgDO(q}#X>@XJ(e~WP8K}R zB|<{tihut6F~^i`A{em@j<#zUi_T=kYFn{_>2CB07A=_0(RQbEqUoGue}4uugyrvF zNaOK1jKC-!oy!hlMY0(Y^uk~|n?nzx@#w*o^jJ2F!{ho#1{-FDL@|SS3>K3c5J?N- zu(-O=84$?|j*6fMaCw}lAf7Ih5fMP=M9`R_pF-(8|A~i!nJQ@!5&khW29LoE%~B1e zGyQ|02j)R+DK!SsnEu?j$Or~Ad^sjP$-fiu?#f}Urw8#01EUxb!TxL-FRXHEbVOox@>q0_gNu2AAi`iS*}$P=QanYX~iZOQ*2Hp9h7} zgTkjK<|czk7)%B)4kJy@VMk|9$cu`&#pHtNA+)Fnp8o{fw7>|uKaI`iW<^B?LRSQB zc|Z^gXoTuQZ^tAJi=ZGnm#Yi%z~uf~m^GcP?KwFtAczK>1Wzr%h8Y#98%bkVhS8Y8 zFoj@lnZM?oR1}B%>90=2$bbCigmRxxPUuLFi(zqsF%p9n0kZJtvHSxWOd2PSN{5-V zc#KFomq&|avzaUoogEPu5J(FK20qaRhU5<_1<`Z47>UV(28Yh%f(Rm6Jo*&N$i$vQ zcNB;2FEF&=<+@B3j|%!(o(!A`G>4HV*>MMxV}@#5h0!?NEZ_yK2Yv?t9-SGi3zA0m z1U=LcP-PZ}P7C%&mhoxA2qtU|W@5+CI7~pBlJrVeXegcY+~1!Y#)<-KiC~5L`%_q4 zDld*r513eRp}&7HYvPHkV5w|aY9Nahp$oD`%MPc<{VR7akIIc>22r`d*Hka^8!9rB zO0-b_Kw40E6q_0Z0&tB9V+4g&MlxdkCpDDykERO$Reb=59vl@!cSV}uvN?2cM=rfF zl*5W*`$xc9=^RXH68pb;Ft|i)TxBqW7RqFCd5j<~CJR=_1t;SZ68i;@5C0dA3hV~T%wMlmD6WxyxK3Br~3#DlCz8j}$MX3TAz7~zkM2Tb;_ah^Oz1h<18%j3|3coXEo z(qNM1$zbjND2QZ%2Sm~$81ZyqpT&0NhJjyC8JHuT!=y*B8B8u4#UvK6I1#g4V;D?* zy<}KSY@9!XVq}eRCKP`ku=lp}*@%KnBMMI-dz?;CIrgRH5 zP>5p3gwZ*42A2)X5d4m0ft9m35c|LntX;gF1GsdMZSa&h+~c@BdSoS6aPvnNfXO45 z^p9k4x!{*@kA;ZKdFc*n|5NvPBNc0`NYA6iiUrRVerEICwx7E6%;=48=M)O z8-?3|5IQd?ObMGc>0E-D(SryEBrPz!fC=1x@`%O1kJup!%uvv~4>D;N0ZJ)ekDC_vMAtVnFO*57`C+(*Y)FkrD(2ZM?H z37nD642t{TF=0;Gzp3aLOcMC7-2&{t@{W$a09y|c`Tx5YYhh~tL#_W&Y=DkePU=5d zV0ZN3<^PqCu2#o?WRHK`)@CZ21cV^RVCk*IhPK2?lFq1sW%Via8%3Oyxw zGT&8IQ{3z2cy3@TwBUYZ0g zX$>M7Pf(mhV*iZ#dvQz?vOeH9(z|#3y&bk3OY$m@D9;(7ax#>be z{7Nw)wi%u%F9-CAvzmyraM&ztG@N?1&$+UcrLRq^mZ zm5EAuh(70_XyxWMI_5j7-!89%d6235vvdIBXu3poljoQgE1}C0+=I$-uB2ssZA` zfRD+Fkvd4aq+@tF&?hK@g61Vn%u6B5k?>Rxgz3S@W{Ods^D#MCPewjb$vRKe8c%{j zh9IVq;BS@~1tT3M>fk8^;FttFse)X!1#;CSC=lo4u=!L1881e{X8gy41vqR0 zmGfjwkAbUML1q4e5x$6n!z6j(F z6D;Cmb3s-l4Wb5OLJnBFD3ge~d`x8p zP*}{zRP8}YdLR_!$@+Y3KKPXz&@wno)CUILr$a0ui%c3Q9z_yR6a||zHMfz7AW9hW zF*O+J2_ub2x)gy88IfTMV?L%154=b?Y>5WZ7$OM@1K2`jiU&pQ*kFfXJp_fnY!Q}+ zLXZg`TLdG$VWjDFArc?c0KLr>B@vlIILwTXX~M%bR2;T+x+_(n1$}UPRVvwlinpc` zd?yT23u4NIb1xGZka-i)9EX_;EJX-YFefg@Vaq`HIBfY}&ZDb>oCiGH8fo5|k7hWI?o;pkfG5=K~oV0U2xXM=Km=1({5M zZB4an1cF8w30vTb!)&Mo2K+PxBZ6PH{}8p~W5!7G0XWRwglGp&WG8TL`RW(x9A zr;4~!RfDJoR#a;hst1`G42EeY!X`SSECC6Sk1a)d{r|8|$+?2KJb&U59~5m6}bSiioTV55a@=FSt0uY!79QK7d~bU zLpHz=R}JDSd=r`qCR#P!6?TszRCgJwl`2)=0CJeX-E1bc<}Tpet%>M{!`!Bn=1vu{ zqRQw~RaL0gNY$dQL{Ctc2OqPAIXKYtoSy6|NId@`dn%sC$Lv7XnpC_hAG3#+mOv8@ zppp`(IaGn`6)>|lXvKiI8cGFk1A+pHA|%LoC<{_WR1IJrM?lg6qw*54=iNl~#$jFp z9jyd;=~C@Jp+aOrs@_x?;8UL(Os4YiqEzD2WE{5olpI?|pf%vg>EB8KI5Z^sKxAKo z!+b!6JfJ2Eoj7a_)ea+p!DBO2Ky4Xp2o264UkGL{fSm0q|5TxW}ct}R376c6$)BsQM1f0!)L!VA1O%^D4RbWj?U=Ci;f>aQS61q5M z2vrJH0f=XBP`go>0WsvCifDCJfRH!d73>KRU>(K`1GIDlIf^PC4F#J3lgXe^_?QnG zOeLg~k^V@azctXY1bzr|NyvJrkyNQF2LFtb$sj?>`p;27MldQu2I{j=KIVlISr{Ml zh4pNK^)RNBP+7;v)&egk0-pWA15M%4dOo%eu(m-nT##A(0mbYvF#@gfuX>ZMA}0h3 zMwx(*1t1p|Lsy5Kx){_QoMmDaXi=uV>)@sim=CK{3tcV|2jU30S;;EXj}Qhbfm?iU^9W zM1cn-fRn_7lf>b$I1sELg5mXHDG(WAU2#}Es;VKX{oR)^Rj`8mP>S0~(xsweLq#8c zB=WIvRMu<)UXV2;@v#VCI|o*f3=^P`AuHILV3E$c7-as$WjY0RQE2M` zTNjK4;-FTb0u$}y2)WS32L3Iez(PhTP>(wqe;Q00HWO3z;RZmltdzlFsdB_Ecuis& z-diT%FfkqPN;rV*NCTSCgTvCwWnil`S;nQ$BBtW7E%NB^RzAi7h75tB3@U+-cP3$0 zIBXjq<3evf^lleaPdxBSYYk#1o=|`i0W!!;SlmotGYV|n1`v1fv1k}m2y5R7RG?tk z#m8cx=LiLd?VhenL5qcINd~1^5Eec1^AQppS2#abkXE0 zs)AB+0yl#MPAxzbICVB3O9X~b!V+>!hp~PiQtj1wgf^3iqGKD}{{l5iDc&viz9g#^AXJH!+GhYO*YQSb(ao9Q7 z$3ssoG|x{DfGP`eqm>L*e=;h##YD=*hR%6b6?PCHRO!;jt(|@NS+*r%ZkX;A&GQ zvDCN}^n#c&@pX>Qp~S%Ze+s-0hHfU80bh9FGfW&M1m3H|Lq^Cy6e#d*jRN1lSTXcq z?I83KivnNKV3goX2j#DK+@=(50>OtBMTv~!@?avt+f_;&D~dzm3cm1C1m6KDf_K#L zE*{M+c;PL0LrxKV8=(4@*%IG>#^P7e=Rqunfo?8^8^va` zxG)+7%c1k4I7~`{DJz_^kz$Iz#Gt$2d#)zM_up?{eu)(Lc1>X*5uhP3d{S82LJpB^ z(4PpTP9ZMKp+5`Hy8lk&kOKT zI|KmrBbuR;ZNx(uz!c5(lkIT0Pstg{Ct|Wc67I~&HX4iMiFo4z@Bq+-c#9IWgoL8u z9s_{pMeW$hHo`&jMDrqk;s6jGwDyev=t>0G1b}eRx>5kph2~8av?kgC&_?tTP8tBh zpIR5{N3z{I*^k;8lkHh>-~Ly7$7FjK+;>m55uI!RL`NAQ2LSQ82VgJ2)Li?ZJ%zJ> zvV9Qld6PJ3y~sY%bqL@v02+(>3n$yihKm3Yo#Oz-lWk-(CjbyW;<*F>;hX{}oopjM zkv}4wl>k)$2nY371E7AS(;5KOuMFTk*}eq#IskN`_LQuU-Y)~7u?+x?0BG%q|0@7E zn^+VR1bm>mD^MRm!DJh5g7uff9nHxHI1PYkAQ>Uv5q>U!I{>;;0FaDPe=@)f05p~Z z;01vCmjHMIpnf9&x5>5v+_eD^{W$;>0CdR$AY3$7*fxrZc>V%F0B8b0{Z|15m*|Uf zB)?h!QGoLR=(*@*|3zpcT2pewP4-`aJ~S_q0lH81qwxqIty=`OC-Kih8v{57faaMt z*Mc^>PGl089Z3~Gzs{P zE_r~8)Cl-15hffX`JcykXhP6O`1jK-4F|s^{`yi&!=sMBzGD854#=Uxe_^159)b=L zblO8eO>82gD+#&@|9(jqJQP7kMFdQU|MN+hCcGY)otYX5e@V>Lv=E8^mF-d71($f+CI<9858V&;5v;ppg4Zu5c;@ zzN2eXTwo4P41-JmYg{mci&%of=bw@jRcZ_-lvF`su#{*9hsBJfGkHi51{1~w(jW+g zBRHLh3ENew>V_DJse=HZtr#h=IjA(F z>F6XwP)x8u-~^-t5md|}f`bAQZzwKIiZ_D^TH#LAnh|i4g~Ix)CXS@VQQ(ji6wfpy zWqKr=7e|59XmlPIi3&Q6um0|mmNlqfnSFpeVd zTO=ZZlqV;rO!{mDg~p@6F)XO6Scce5N|sH@&VAb9l%h~nyBm0I#8aC1weRcEb_-p05lf4 z+qTIzs)x2rwi$5WJlRH3F=?_L2={mZL}x7kszXq|M)k)A0F;Ye0oapmXSlBcK)Kg` zvW@sz3g8WZcrXP}1wfY^fV7}BafU_;+Gs8b3phy(_mu)=p+t(0<}y*P#xY4k%NF^# zh748R9wA&!%(`h!J>p;IJVVkr0WIhXblyHZA7g({kuMBs$F&BObzGMZ&o_4n0N+uuub@(a~|% z7)j`$MM0=yM56P~h`DK8;4297X@HI=#22m(Y&w~=5JrfOJ1c|-*_f^a$4pu1JhK*x zPP~6|uHcl`WE#}@KO|%1+tz`hpilKPsi2u3$71uJB!*|rwc|YfaBJ|+hrvL(k80vZ z)TQ<*mondOOB)lKo+6bh6DJa9x7}1SAv8WFUboBq-3N;xmzbq~{WOhZl{z1^Pf0j# z&vKs8X>v=VSIsv`b?eXt|KIOBG>&CO_U@`2-*G|ltB!wK*$+=2PoM7Y>NfM9@Av@Y zhSF1T-8yyZ-8%E9T~YU&^CBNS`t<0V&ULNO=gZis=g8CJM`M@$eD=%n?!9~W+#XjQ zRcAkF&L&H?NEIj4#BO>r(EH6VY3{WImfF3tiX~6|)GmA!`4t=8AJdFiTUPMv-RVOg zV?U&J`)+y=_elPG^aF7(_m>yWypYUSVthSX6Jw=@J*X`o>Yel9#zVg(mF+`~J`xF+ z6)!%0vz_~FxTt2;!-s1g$fsXVn)V@n_@m@Nu|n{#Q|S)N%kHFJupw>kI-_#p(QdgL z>z?-%9I9W&{;}ce*QE{K)hC7qVvTmBY*5?&{*YOQ+|bSzr6RU)Oi-EP$M>dl%HO6% z8vW)I6G*1RmLqeFIf**ioh9p1TNsNaAGa_n9u*|Kn!&haankn71H+NF8_5RrKiXpt zBAOL-C*2p8KKuCXorr0DX~>Y9X-lk9*RK5zI>QmlC*2bb2RUCatv?zUU39nZ zz)suzj3iAL>!q(mHY2dE@aOeIY<99V;zuzplJ2%0gD!iqxf;^~5`TS6~u*j0K zeAwu*Q_U>v{=1gaqdU)>n3zyrd)LRv0>Yo%24xdC$;rvPZNDiE7PleB&ru) z9lpD3`P^*!y!p3rb6Dzv@_6CFouL8my9F zPG>EX?O(!vO|$qe{VKJzp5tM=MqVUb^J<+RT^4kfKKzrovhjgKo63ge+@#|>OlPQlD6+WJkhPPwEa*#(@vCXwnU`l* z9jJ0PA8V-6(o@!WFeh`RoczJAn)~N9HDxLvceKhdYr5kzZzc4vjy@l5W4^UUdhGtp z;q&5s_?Ne~dNB`3SC1GRx%77Rk)-wUJbrndG6Z}@QC z)=#ygxEoL9^jg2Ln%|#W)A;+AyM&zWS9V&tRBg{j7319}+~!Exe>)j)_9HX<$n;m~ zx?^UGFIU}8Cg$JD@9FJO8X24!#7Q~wKAXDjLV1+lf)&kTsj*+ z!0#?|n7jYC>e$=jS2dYJyLA2kM6U0|%CbLGEG=CqkAGOT%=WwEBz^GVkqYCExS*ij z%x8vs>>rkY>swdi|7gKOd4}>~g+WPMi=FJY_gRM7@1^wTh?#^=d!iRBt@$;qMe=+i zCbiU-=}p$M%(`*$P5-s5)YTt%k+*En|6sED)s{rVFVu4{r(5q3mHkTFxWi&muuVil z4|~Vf?8R@)Lb?43%-3RxhN=?9FW;!=+Fksl^ds#~WYuo_J0VW@8?IH5V*E4K8g&ye z)792@+*(C*6x!Uhx4qoI>&0Hm(`mz7jSTV+udvemwbZI{4{SoFIX7?kXtwcl^ODog z$76bb1ysK3Ecb6yXdjU3J~p;OM?pm7c3-Of5TWU|IKx=uLUzdev}<=(K8_u@-Tr4u z(+_cn@ae0!7S`WV%VU;3TIQj?f7iQ{GrGl{*W9vWWGhfIGE_d^{bX;{!tI+TuaeE* z?D4avE$(TU3I4{<_2Zm#pH_C>w$@Eg80@t=IyXxDhWVAA@X*bXq=&@xOW&eyJ|UB9 zmw4h=$!3ql9uceNc`I)Hp(|yns8uN8_u%Q5ab1p?-ljF_%YAQ!-ah-2CG>qzmj}wVRTDjDZ49gaj3#Vzw9ZW40LZ1&3g8x7Y2X7**Q>A zRu~>K!aDhBxt9rXTtnzr?B$K(j5hAeb1A>%J@G3O_bps&oaW;>=VzwT%oi)}>uow$ zx}ExoUaZ{rdHUvd98D$X*G$S2Z{3px4~hx?IWAj{?cR2AuY}y|ercRXr%A?g-51BM z8eQn#7h14n*PqR=r+Id|VXWf?;_EyVhJDpXy!*^`+Xjx=t$6)lpka}dcEsp~y>c&S zeK(}m3dy(RYi+vP)wF+m;jPBmmd{l@@3&OkBtC$`TpJe2SuU2bIf7WubP{gGET<8!I%kAlJVQUa*PDaW`L!+I+qd|>3w17g7{9B=5T|y&^-jYk2~xX6 zH|2c&aF+J=4;NBjmn&7}njP*dcztu9%1GSpCoLZyXMWo~zRFB%^k#F}$8lbFNy_u^ zfYO!wmS1}saPuV5rR` zkIYl=J~T^Y?+e0vLbmd?s>KO7k8Em=Lyp3u;aZhv zqpwAE)0Ox4Mi1>)-f8p7wfStx$;6R$+d}t=HO<}7LU2&mG!)OPsw(DW&uJAm+HhsH zGb#7c@z`Avm(L#9ppiG8-gxHH!$miq+0L!9l^6GXTNSu0!xZysH89)g1jC4MQ;O{KT6y2Cql-_DDF6pp)&mi+n1KBS+yRb5m3 zYVy(J9mYM^<~`?ZlMwDyxIHt?XR(HLRY%F}&`^WTM}A4szs;AcJ3!icEbfWds>KiY zzjJKJ)XwHd-^^&pTp4=T>0s@=ovBVI3hvXlw$3g&Z24nxm1;Hsx8ZnMvp%p1q_%VgFEu4kwO-4rQ~UeFx;KvUKEU8(I%c{TT&O}=R% z7LWc^zjN|dt)~oLaxBSur245wB}v^;KIO2smtEgo*%OCLBc3KQ-{0+x%#K$wescZd z`rj1>)uPu=8k8%}k@w!QLTkrD*)Lf}=IJgky@f94It8Y#E8Z5GgKO3QChKgQdmz0d zasHLwc6Ir@Ayd4X<&vNLn9r~@QY*77B zefw_{$pYVO(dBI8n*@ck#$xd*#NqkPwpm{;1W3&^#wRUZzbCizdX*+AzNo@f_-9=2 zK{?+|Mvg7)y-u3_Tk#H`x4(3+rGC_E#r1lHjioHL?sJMdwltaHyNEfeks>}X_J$?cDsb5xA9dg|EGd<$9ZijRk!@rR4}1G(X2G_%LEB|BTSRdqgp&UZV}5WY9t^+o%& z@|Zq7>CTaJB#{kcXQbv|-<3Gn;OCK}9>!39Uzt+99!Cx?k&3UfnwB^St!Idie^s zAFuY4oc79+-1^Q0F5k)Md?a!G%*l}~c}JVpb+h+%c^vLpSyFgvP`zZyy*yKFsie2u z?B7KtHu{oEXV>%+ZteLcqG)RvSTt)*h)2n;yEDYD`m^hR?t)UL zl%@Z&lfQQT7FrzJr2)u&FuPTuZWtBu7s7|6WzIY?r2S>yibJ!(-q4y!%dEwf^`6vVHue(nBrJ8Sby99bug`m>*Yl zv@$<#$Ddh=X-Y{hL4!p5PxcaBH!L{>P@t{W)uwswV2Wk2R+WKVy%2d1>YS7XGB9gYS9n-a7r4Pp|Wr zcQ-}jimKDU>1cH}5obOs$% zqW@}5HEF(Sy=QrBO3;e%B}$A4oWAU)N%5^-kM7@XyB~FUdBv0KS=CohdseeG@-OdK-L|CqvhZtb9A zMGCK4?x8X=ddy8elstdqs{58$QfbvddcUKq`kO~HBVNWGi?CQIx5oLEo%ykzjm{Ab zfeYE^b-r7)&f?f)C|R6J>DZk4y@hr2q5t_y9*M7NhoWM*u{RZKL_3@;vNtwnoa~rq zKiNA?bS@#oHrFK`l5ESX0S||UlQdm3QyahHabs4)vx=4A@^(8UXQwW3BEzN1Ka+H z9%&EWWAW<#7Awn2&4;DU5|sNn@eLve59q8-=&~0tl5&z>cx9TV*MkVX?~eKX8fgxs z@BFGCwHj5;{t;`oJ<=NOcDv%UPtt$DoA|A;Y%II_GJm}I>7(G1JqqJSk(!5M=JE1Z zjntM1xAZ;bomZ$xIikhVky10xJ?1}8C1ia^&C=zqd)S}Uzt(EsZ90F_>FiqkF_->t zyTen$cIsHH+cRBOw&T$2zKc|&N}_Zcy+he`^2OOVzZJ{%Y0F6z-QBs(t=zW%%@GN*j&FnP{jK;4t?q=vO)Ma!JEVwQrj(;!t zV)ObB2bRe=m{xL)^zP?uRXF@m$^5dm@1pKO%T9dLjRTK83+6mLYINDea`4JyY588u zjEyq)cE8m-uH;t$mpYj3%;ic`P2TpjAzb6JAARclQvS#OmR`AI%eswKmj$z{i2F8q+k>%Ge7;nA9ej>hZ?~}dC zJtf7n)#zry$8yz7BDEd;1M}bQk&9Sj@A_EAq-2&%Qt-jLmbZllaY|bcK8*fk-S}bG zMa{Tj*O7?5btIYT4(sx-<;cxntp0?@l6N1U;47;+g5EMt}T!7Qu<*lTTR#; zv%sLNa%cMr7qh{1vPDDbF`nzY&O_S^)Z09GZzDVQjoOx<`E@!b<;sS} zGWQIPWgTr2ZN9qLK0d;dK{tNiWsu@ws<~=JX@pZhTrPzbB)*PjAWiBzWF@lGnjI(A=^k}AZ72$oCs+j zVd_SW_D}YWzmE<@Mt@agg`TMXbL^e1=gC9APV9*^N+0P-D(+#Vxoz(~G(MWTT&!b6 zIA31o#7`mNV`XdOuO8Wb)W-U&KRc*hEV<&KkIeBP#ZHC0l?{h06@TE*=c#hDuNsvf zKYCm(QeXXp@B!bO&95*0bi8>utO!4Te%jAF5zPxM8os+qTWhOn@^xyG#42yMIu1QM z8m2O5*n7#n;N0J0GHZ&%{>-rPT>a>e12egGwqxqZ=g)_0X1hiQ2mPrT3~}E0JJm4c z*m#nb)Uwg0MT|#Dz5CAndT_I5sKKc`@=v02)HBl)Qq;Ov|*)?_j``Zjipfx9OgY-uHH8Hjm-RklW7&(FP@ZI$=MS3=SP~- ztIk4Elc95YsrTlKD;jw@a#M?bW7{l7!c{d|@*As6f{i{V;cD8K`yJT&g{L|EQr%v7 z)vd10&uzT!uL`WCyqiVdTuf>E{Ve~C-VjzKdB*<4_s-eRn*Y3*PMudO<3B_F&)2yR zgfq*pn|;q(5jU-6)j}yDlSO?4igr1>be zj@?@}J>2;8qVvYym*K|>TNbUntXjLi-a+C(kTFjv$j|tgWljH4y4O2gXW#*sya%b) z@h>iPsZ=LEBaT~NX{vJ8*k>cN$j^m?X_i}TY9`}2f|msK3{nWG`9FMCd?e|m3Y9CNK^X2O&6 z_`XE@gyL$kBfWlW3Zsg*ju<;h_Oag8UEI>*VYBs)q50khM!b5G`@uDlX5Vq&AV3Vd z{yy^hVoS7!WN6`*H!&|>sEDMTTXZJ0J0?eD)Mkr$b=TDoAH9|*_KmjtQkOh$Est;G zyC32AS?~7t&#@Hk9$s`TSZ-1GGgU@uqeL#pM)`;RO^f%A-I8nkODmNujC!7I5m(J> zs3>S#Jz8gUxu2MbzRujCEnU%unmN z?I>zAF8nct(BScW|G>|zq0J2!2SkQW@p4~{nKScNBE zBdsfbSaz>azR~f$AbEH4dYOuK{VPtGB>%oG;kz!A-tN*ydN{VWXO5lU@~=7JKJVVw z`6d5etmL=3IH9)N@Puzv0Y#`Qs?+AaxVhEh{72;uH;R2L)6z;am5pVsJf9f^bs667 z;T`Y23nkWaD6#1Bd0TTr_nqm@{q1qz)|K|UXvrwns zSYQ*U81!t#3YSeM@2p?0G&ZNue7r|&eo1qbbgDzCZhDGj3Rn93D#y!t&zfp2-br32 z_Ky@*52iY7XdlYRotCxn=H8#rUT?gw?6I<{^$WScdf&*m)h-)+6&9^XQ_UM1*Ebz= zP`sLN+q8L2-QK~kW1;FjvqRE@%+G9}&f?@QbZlSn;nJRblOo0ZCyNvdSEkg7-d?4k z-emCO#UcC8e09kimxJx?&8xb1P4it4xpBtXRck#qA60YqO53$;kz)PIobQG&ci2Au zL=Jgnd!a9?e|-1afAb@Am#;!Mt;w}Ab*!Dso

    7>h%ZhA@W)r7HE37(Now3WH)&AYf_!BG74QQ9okc@b< zvUgFQEluuh^{(8Fo!+`JZ?0Vb({Rwz3)`r>S9a7e_Ov0-+B^-sL-iGstgx|Vs?R9-Gvn9z6RUX#MS&fRMz+PPl2#`FP5mrP12CZbhc zd3G`3@y|zh_uq(4`#EA&qGPsHwW~SIX0wX7-kkwAU;Rh4pXcu8PT!#XNkd+A|1>Si zx4F?9vL0&4OUak@dFzS%no$v)U&fh_-?8#SA3@PKv@iGbywz$XyWUo-Z|=?BXA$;$hI`Ez-EUo1?J3zx zRmOrh`ze&&pQ?3uH&0(R-YzwKTFyK6nxvP>E}l2#LHr(@LzxPX+Fo6h8@ux$zP5+> zr1Aa=<4VJVD-oPTZ-WCdJB%s~j}ljI@^*hBT%|Gil2S9L$LhwSCF&Xm2R3kQR6dUn zch+5bu;<;e*perb311k&Ys&ZbWd^(I|J=?Oe_*?2lW6TgPf@c&NrMUdgBj=M`?*Ie zwBH*4NLkJHbIqviX2vA${672A^{DpOook0*eiJc1QC>y-lsle!gBiASkNeX2zA~$G zMJ)?2>(?Jl`ucq%#)>xCEPE*x_lsIJvgJYd(Bn_S8<#mr8TfV1r)_9^SZVbmq*`KG zdZgGcdRO!Qg7T5nTYCCkf&Q<(pZmTV*A{wKaryXgGUZ9AzF*mxfujAnLzfSJjlA_} z;9KRTFz@XfgI=0F&Wqppyu4y(r_Y+B+59SD zc;O2d`j3$Bd|cCe#9bksQSNz1iS{uwzxr@{QE}jf&6ZI*OD#;lQVX{YDslXySLD|n%j37C&65_6TdR`W6 z-m&))J+Cb8%{;sE^#1)achU+uE$SgLJelpYTNFNsG+bp|eRP^0ll#VX?;Rtn+HrR! zM^S&@Gm1Q)VHL?BfANKnWRwx%5yKigHz znp&>yc++NnH}@nzQK@&6XcTY7vn{^VIS2Ne6W)BPfB2|G@1VEE{xP`^cis=mZS!0g zt~NBV1+t5qyn# z4SbEQ;^Bk4ac6NY?d(?Otj@JEiS?mb3pFc_S8x~9AI@D+IB#oVLEsPJGPgycGCn&i zaQnPU%Wv?nb$sd8s&a|QO*bOthCU2fvTMkKg}?PQP|qW;O?i8et*XYY9; zqwKOi+C8@0WOu{*QX)%-5I$gBm#ChRxHgn&&8j`;cQ|y=@8$ywE9pS)$BH-fb*ruXg^1?Dvx~Yo?W4g%K9)yrW!+jduYIlUhOGyhBYBRvb zbzb|%<~b%Oxdv48v=L14<@O*=uclPZ4khZ`nMLXK*ET4vTbO9N%uL8L$VYWu&g|qu zwZf1WZzEM0CD_Ns1}Ce&c2o96XgDpfm{nb$<3H`DbIC6~{wZwfL4^csDbayHbF$=q zh<0pWb>Hvo)z7v1EA7L?ZO3Gr+jix2iJr(ug|q^e5ckdSSL3+WBg$mc9y1di<#5T6c5C z$5jIy@rdVzJ~{7Rb*gqZ*B)z;c@SeWx~W;+Vf4(ZoOeMELr7;UMXD^QVdgep<^!J}M zsw!GoZ%2=qzbjjuIeQhgcB8LZQ_>N}=#yL9uYEspFo1l*%_Ks`B2~{T{bXj5mFo*x%mD|hQo%&`Me)xUR5Ja!x^1UFZ;sfD*P^=9pQ%_s;{dW4tUSM?Kt*P z`}Df_kkNOuPycdE${FW&4L`KG`^;4S-trZFHrGZeIf*(K3?C?3-p^T5HzZ|HA)UOh zRNbatC#EF2vUqvH(~w8O{hPI-yno8n;wugvm_D*c;hmw6(rIU%l2vm}6h7^1yLyKD zG$B?lV@CLB?5@k%R+&m)GGEs#bg7K`bnne-f9vrsG2}^gfMrF>$B#Xxdlv0cG7I*+ z;J4?#c;8A+@{>K`Cm5-U#}>4m+*q4yu=nxz(j_|;2k#lYR3sMpZ9Fh$@N*<{GcWFG zjMegFjf)jc@-CmYnk|u8zcMX8K>A>-R8ymrg~n6amku%m%7gDaIO~sEw7vSd{xwH5 zcSc#kw#yN&xxKBn?N4Y|uZ}c4(jd0QNng+0;1=@rA89&VtF+3Gld zQ@94wt(W7a>=b^lY(ao5>%%wJ`IXQ1&ap=$csZi6oMk<}Z#4n3|ISn?t9ioy7y z;MoDhZCO78Dw7BShhKc2+xbHM*lop4dCRTp*|p){S|y@r_^rK*ca6fya*0I zynai3ms`9_^@6o(=`7Vt(+?ZDdh1)YR9kNP;JCiiEZxgNReR68ehL4Z z-;Y&QW(JphgUwT5ke>4?22cOz3GykeJyQ__MjdB0f;X78TnybNDm zuvxJ<%C+XpH=^0dz>5#JdQ_BmZI9Fo*DJ97y=hT%ERnwU$+_>3pPkUZPRWom7j|h_RQGq)^yHiz z+S`&7y58w^&F3l$Irkr4XRc($aA%r0SAQ!aPCvZKaOfm0XH@fQr~f@wCw>3Z{Ez(b zkjqWc(c2rJHsyGkojI@i(66>8_m=za*4+mEISTiB`I|L1XL#P`SPe;(x9@b_{+kZ1s^y4F?*ISHI#MJ zL+uia)Z?ppZQaSL2k*^iJZL*_3&esA1WbrDmrYHw!B{Msg&AHUZ&;uFqWSc*>L z*Do%$4V^8kC#r}`t;^Ll6SYf8bD&1f<9>cAnKl0Efr~+nvVvv5%l4IX_0ny(JWSR* z^1^cK@!+V2vf8uSi>I+^Fv3xbVu)rF$L@|nJS`z~` zNNOnt5V;5|>{j+cEmCYutrs*|V}n)NKtL0`^ucn8wS6#(npmQ#cnL-gCPs}$j2bWf z&YW3fhuIYyx=*`j&V2Ko|98&JJe=Quf4>lByHuW>9l7P+^5U%6)0xfJp1!EgytH&* zc4Nev>bS~cFTcY^WgV&U6}zmhTQhoIY?xIt>9-Tfhh5JP#N@b^b>+;hn_Zt?Heppm zp7*;~zQ^S)U)vw{EvzWqoY4J!!s)8Zb-Az4Tlbtf6!EZfX7BUbid(&%_wTfuw{=7t zqB=+Ko_F$GQu5)RYfbz2e=+4pYxtpGrydW>&v#q?d~&wb*;V(f&wVz{cKc@Dj@r>p zX_?&zea3rhT>i54rD?VA%7c;3={wsdhuvtMKIQ5^izC-8`O4nilJ?rt>AS$Y zsZ%Q#@Sf(dG(iSf^QGIYLiMoK<2Me8C0JAwVzI-Qu^;X^2>g*9jTMCjeALX~4m;Lz zZw7#h)EIeQ-fCZ%yWS+W`Sbo>?iYXx1&^Qv(v70qsDuurjzY&a>V+9)xp{%$_6{o03>Jvyx$!>!rW+6pn%^-qb zM^idY{xSo3wk5D+fsOK4(1EJy=nd4Yxc;iw)$1UXkl~GN3hP(VRK`x5vRN|(*{B!E ztoTf`oQk4BW%@6p@PlY-&H5`RlL?eguT7)7>=HDQ5c9^OI!1?<4E+w%{h2D7@FaXY z%LINW6B#ticp(p%zy9I9BkK^8Ktc6}qTTT8^i}|Qr%-W3zGpFP_+G;wuEjEx>T0r9 ziOA6Dj*y1~tEIP2#EKg>q4k%qdJ_~GF?XVwjoRml%v�ldz9h*0Xw#^smGJt8}XF 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 B12zBv literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Controller.Pipeline.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Controller.Pipeline.beam new file mode 100644 index 0000000000000000000000000000000000000000..5a2fd8391e83fee367f257714bac310cf9e68cd0 GIT binary patch literal 24092 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Controller.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Controller.beam new file mode 100644 index 0000000000000000000000000000000000000000..773ec52d23a58612902779b32d4559a883c3259f GIT binary patch literal 90852 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Digester.Gzip.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Digester.Gzip.beam new file mode 100644 index 0000000000000000000000000000000000000000..eb0b73a42acb0b6e9ebc7dc2a5c1030cfd874ce8 GIT binary patch literal 2812 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 G82bz6TFUzX literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Cowboy2Adapter.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Cowboy2Adapter.beam new file mode 100644 index 0000000000000000000000000000000000000000..e4287b972eb539e08a60d44f2ff0d195138d9b39 GIT binary patch literal 11908 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 lx?o+gZvXMoFF3?cV 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Supervisor.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Supervisor.beam new file mode 100644 index 0000000000000000000000000000000000000000..54931f0c1d75400453bc44ca5a174f6f011e6c16 GIT binary patch literal 33392 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.SyncCodeReloadPlug.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.SyncCodeReloadPlug.beam new file mode 100644 index 0000000000000000000000000000000000000000..e55c82a3422e81d7f97294dd73c3d2e99439d841 GIT binary patch literal 3556 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 b(Opj>#b@aV+eF<+)P9iNdr(gyB+`EX)u8~^ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Watcher.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Watcher.beam new file mode 100644 index 0000000000000000000000000000000000000000..94d892b6636082756fe601b325af6ec3fe3d1291 GIT binary patch literal 5560 zcma)A3p`Y5|DTzIxnwwI+=*eVR>h1+N#!7kED~GkGRDjq4s$be7`p6gB_dKwHPwdF z7HU%|UALtuYD*|ZH)#{wO1kZ4d%e#Y?B)M?-~Ybn^ZB0V_dL(<`Q4s#&hPh}`Qef7 zB$8RRf1uxIet7gu5{Z&DGBQ#}vk#PFX_(3_B0+)5u{5_pxmc;dI%ltFX8f991ht3Yij4lOMxd_J;a&@ds zC{iiZd@vX*Q;1WfXsjAnrHF989FxYPDydK&KNyeVg3(ExCXPtlGG>#XNQA1@e83PP z5lYo)_1O4)pc@fs#15sR1WYOxsFkQFLncf@1u9fhs>X#XTp-2dNgPZJ?9=rNag|W6 z#!xvPq3hGwW3mw?3H0H8t{0z#}9m$nd1*CLE56L0I4(fdr92 z6N?1Fpiv?eaL+&>Hkb_KkjRAwFq2Cz)xs3k5KOK%B*DlKo63QGpxYJ*gVj*qK>mS7 z0*oyz5}W*3%b~CsW-xis5QY&*k4oahv2dUsg|Odn9Ef8P%dmtPRt#%~ z4VwkC$uwBY2MaA=GR?%B2}830IEEbfumx=D50L<1z3EJrDPjuEVFGp*Ac#3FLWL1B zjSV9@C4mr|i!kg6+iCm=4w+`EjR0cp0A=RQv|!Hy;QO;lkUtyd`m;G~Lq7ko1xL>` z!HH>J!RBgXsr*>XiNyyh%oCk}0|?s`;W{CGEs$18g_VdY8*$J` z4qNc`Og$0E31LG>5TC8hpmIPAJ-wL|fh!Xs4&ejB_=JrxoFQ!?l~V{uz~ztyhv5PR zLO}@R?+LSkKb}-hDNvf=$+RLgL0rN|#0k=tQu);w5N8X-*%IPlXbRI3A|nhph=l-a zEprf(&dO@SN(K+o{y>9&AdzWSiJnuKHcKFw;SO3hV;T?#q&jI^sBjA~5n%zN+#&5_ zD(5k9U@FrZsz*Et7EkRU6&@s5^oXvW9()q?kLi=(47LT$j^RzpppfX6j9HuviYLQI z*QZ$u8MBZK3N+rgquU@s5nLoF)%#(3xEk= z1V8~G-Z_&onhjc00OBHe%ykrrWDDAf0Av7r01E&JfZ*Yb(GH+>1R!|00L1%C$e#r8 z=@>m3v{T0Dsi1WQ7?;BbG_lqLz;leA4q7h&Le2~TkehTo#Q1CgJ%Djv$bo4(A49>I z0l-`ULLOlkK@%5YyBz=_&kTU@gWw_jC;9|!3_#2iG$jk5gk+-sXL`}~^>sTWq$C1<^Gq4I!wyKxNd1juUhiUNt4Q%+Cm1ux#KE1oEHaZd z2BVozL&wyD(J!lzFvLNplu!bLqyfI_#CID|iWFR<2ht`==!n-zf;4&(kYSQY_EId4 zryR}QJajB~^TwVUH#AM7M|_KgE*eNC5hg&Ie@ge7aesg+Tb(MhW&)A=Fp%a!O4m@w zl!5tBg$Tq=_uLS%^aUW?Af5{%z63qN4-^fco%DxmP^wx^#Fi|FNlndPm$l5N})zhBu1hp zQ3;fzxmiOeUKuc~LN&&Kiy*)psuY3&BQPLL0pZ1DMA?!E+c7Vsb7gw%vD)u`v22>0v*p*-1CMJnoA%JM2#I zU#|?Xl{|8@dtDc+bS!{-uP<-34Vo89>AyVJJYK=x_u77CZotc--(}CG6&6FUOH684 zUf*zLXssJL!alp#~bwH(oD`2sdy`V>n&zJ&671Jc0ZOyt$lR? zePtCt&D^m#xq#PT65%1`7EE-MBwytpUs?0U-Ncy@&|lC3GaH+Zay^?)0-0a1q zW$j@@{q=|P_b=GYweNAosH?&~#NL*nBLOvW1BsVSo9YTJgsn!WS2+dkpuY49xN|LY z^1um-CT`hF-}7I*9=PNyxR{=_>=(vEp3&E{!%uEgf9vYqIFPHpV~8a+8l5~e^=9z) zL%VkFiQfEOqqskC`^&&RxZlP#mC>gwwWXU1c$Ji1v%KS)BaUxR2lx4&{pnoT`P{SH z_j~SL+$WFUyBp1ZCbOi*nakE~Sze#z7TS4C(`?kX>(82c0Y0|+r|-U^S#PV^(!T$FmcJ&dvoimyiokr$Jih}zM~c7G{2CJREGIeR z-dQ_}*;1EV2nj0q{z645&jZWW)?EC^wMynQQWu=vvA)qnGkX{7>K8-wwO2MT+Y>Xm zsd2?lzN@g6D~Nt)UzBM8 z^!MLfy{LB9jnfr@>+YPZ@;!8Q^5XfM9q^*Mt#o0?vpH3r0iQ*CTqa+d`{bei!&`@< zo^}_UC~LhvrF~1zxhKYF_*%`WL)nWO9=S{o4zi4HSrRg9mshT`nLFuY<)UrYFLTAi zJ}Zw353H9PPFeWEXM1>uR=vA)s@=*7k?S|UxcRX}|3aNd`py{cd_3Ung6@xZvkx>Y zPA5jTUc2IzAFwp*v1rHH=Nawy{oW-%*ou1N*cYRg$2f1C?q~Rp*cd59w+1oIeZ2OxpH5b3> zStz}-VpZMsiMjio+FpGUIy9`u)jA9u?67$ovo+LyC>8UV`SWSJ$|57~(z2n}^1745 zAyY2?davS}-{*e4gK76hP0QXX`GB6&x~;Q|UY(et=T)b9TaL9FH~2km(UUTyvD+!6r8#JEg}~d6z9o5w>@tuxb{jCK&nUdY=)$%aN@fIanLsv6 z?Hu+;0w1^;*EX)7WKDer^-xV^QEkCKZxSxH-Jh!`shAS>I-gsS)vH)>*)e(Ni;yAm zt+LgdD=Tk2Dt3ABQ@Gi?n)802MPAy7J_^n~={3FaK}8uCYr{$dAGDYbZX20bW^2)~ z_NjO0=AB+^LX*plC^dEFm!=$_@b!!6;LhjrYsS`Dl|h}KF1y>|Te(Lyg&et&Eh+rW zFl+0ij#|&6mJx>y&Ks1=qkmg=U`3+n5ErvCGl*#qt@V!9w|!ORdg=#DZ}fZD#iwVs zM=sd1VqoU2$W7}`?Xs%K-`?5(_HgPd=c1|(8x~APFGfrX-P%Y!T57T=mv>JU-ufB4xIM>=H=weC!)1HM3{#DviFE2=&nkRNX z(%LP?!c&W{TQ&L4*6#oIMsyA(d|>KM{qhg|j}pCv-9FN|VbA(7$3Uq@uzk1l&sS4>X3q`Vz@pE5^YrcY{w}Kv%;ji#)ke+L zdV}TGO{u}#itK`Tv#R4!N_M{Ufx>n8P_@s#jq9&BoOQl`?$?mR8TU?meW$*Q4i ze8Y@am3+;6)z>nsjAofw*^phaj+9rAiDtj*Gs{l%d(+8j`_%NE{I?o>g+zSYCU-aa ze0#zp<(`3OXIs)wAK^`%V`b!1Q4wAI^Po-^WIK|9uDkYSRC2*#E3@Ow8Zy7?%yK4h1JE&_n}_U&PsxI9HNc zbe~1Hy6Gl#Hr<-ep*zr>=w9?0^htCV`eeE*o%@dmH6SD^T}j9{1R&1K6yp&R`QMZ< BwKxC( literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.beam new file mode 100644 index 0000000000000000000000000000000000000000..575ac40fe1f3da862763749d6032d067b6187d51 GIT binary patch literal 82472 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%0A9g??1zikGZbxCRI z%g$(#*A{y6E)fuY5{E4Bc^_7MA~0D`!Q-Et%txQ+3NT*~WWUw_96?xB zaPzxz6a%6E`r68W<f631^RY^-2L|gcFWoO)#L2;V54rdnE&T#Buh?L@SfrQ zIUrfVlQT93fqULGg{8r{7yfIc5q!)d2(9jp5Qc}O-lw8}| zx}>HQ(sKN+2OU$$SQi88mDy3uG7^D0h-r@Zz@}?)>(7_ez)r@+*W9-2-!BZZZ2^nr zT9d@oH=eUVxl3dOJ>FtqvNIgQT3l4M_MG=WdN9E!#+Hk0m6-~(x*$09LDR$4Rqji< zhT8(Uf)z9Xv2G5?TTX*a!74w+`I`Aih3KVMp&&9q5M2t|Q6|2T8GVl8I2@gvDTlspVSxVdzr%hsrUN(04DgVjrx(x-B+inlv#7JFbEpe` zat^EjV(M+`CIB!1L<%@eG)ydvI*cZa9smXa2S5R!0Wbhm05$+ps#|JCYF27nYDel^ x>O$&D>PhNZ>J@+nz>o@)ijax~!u&tbPJw__J?#IpH@F}B4|5g-@f%3!e*yf2M`Qp1 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Flash.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Flash.beam new file mode 100644 index 0000000000000000000000000000000000000000..36670f75d1d5002c5802ef6145ee0a0f1e551c33 GIT binary patch literal 3108 zcmb7Gd010d7Jn}J=k_fVhuZjvP5SB13ieVLG5f`MDjv>6fgg`c5UPyp~$kKu< zV(SbbiYP84Z9xUARa{0|Z9$eQ9T8@%6_tWp74a)n=RSz-%zX35%=^CIJLjHr?z!jQ z@7!}w)XLS~5M<>X78x2JN+ktA5FGL5&6~R{L8MA)Qj(sD=~_agGuts8KENyTuKqLM#7}il9XPemWj&c1`SRrwHke@T8fie zy$}df)moWBMWpH}(tuM!jZ&3LkSeK0@l-)jk}2inNbK2>k_v;G&`^;isU^z^ z6He&pP!kDyTx<3kFV#JLy9o)dk{a|xydAvOxFK>@0%5dGN#Z{KshfrkHbmQ6Bw0FVB#qosa~&CXfQoNVQJZuiXb^b;pvho zwN7PFU?3GKLMjX5a4_&KnYR@Cw~ONm^4M+4-C``r9h(=zfuI<*j*d+Rzyja`SOYKs zYyo%xFaRGwVCH86>R{$+dpe(J8z%r80DA6Q`CFd$2}hbH*YX2A6JQoC1F$#qfIu?< z-ujphczQly!2fSlcp-AobwBW&13lv5DZv&Mw?KgfhcRUFbIJt;4g%X006Ge%j z64#sdo=;BMdOJ$c;&Iz4(^#$I_uQ?I6j;Sv?Tg>QYnLnChhp7N6^CqXGPrg`RN4B@ z-5Gy%Q)hQuOO{8<-_~g{PhV#L$1&mQ#Y{1iiN`+dB5+ zwjN_CfAF)BD~n4-FLbuGpwaLvz3$cWxb^8EZ%uKw}1S_t(K;;;2`FM)0b~WxNkdm zP#kBi3Oz8R()+ZtkAE=3X6t*L} zPO9dK(44%HZG9F4yL$`++xmXG&`=uU7ITYe{x!a0Vqx3M@M+cU8SPaIM?T0KKUOv| zn0#|$u&MP}&#UYd*;m)syLKOA*2i|ViFo$s&pnLwy0_^}Y2dSUd#_L%mb@2m$G<4q zH9+xPecQ10_@~2mP6LadCk`Xl@U^duEdyyIEeR?&3~w2)>&ZA@O9_7! zTB(DZ4loM6#NCHu;tHeQ@Alsae->Wq``l3x^Zop!3en*3D^Z`us<=ELF#qMre{5~L zX!GZUM=6HsyPn{lnaV8~>$-FA4!czUxZFWUSJe-!BqvY%sN{+R^VSuFMwzVFq0wtj z`Ip^(xo>B(TWv*7rt1DmHGj+QFG&)vEGMRVgBpE z;dAh3L0^e(-5GZsfAs1{cFnwm)Rg)C59?w%Ze{m#$E}=QH!gA9^^xNipXE+pe>=Du z>wWg|wJp*9PAl3*bs@7lucj^V%N{9iVLTq=JnlQpcIZ6Pv25*gt&iiujte874O^b? z?y7N}80Xjvubx=xnp5{{q$xZToT*0a`56M1 zQxDOU76A`75Ltj`74(&00wbL(y)Iw3Z1Ah8&+g#HQ84@C0- literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Logger.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Logger.beam new file mode 100644 index 0000000000000000000000000000000000000000..f8b174a6372d3b9d996a2d859e2ec2ef4df4c83d GIT binary patch literal 24632 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.MissingParamError.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.MissingParamError.beam new file mode 100644 index 0000000000000000000000000000000000000000..11384e1bc29177a6b807a9168fcc9a83917d8c9d GIT binary patch literal 4604 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 xf1gch5cp#Nq*Nuh_vE0u6> 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Param.Any.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Param.Any.beam new file mode 100644 index 0000000000000000000000000000000000000000..95633b92bf0f0f90b920271bf138f50cba16a47f GIT binary patch literal 7284 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Param.Atom.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Param.Atom.beam new file mode 100644 index 0000000000000000000000000000000000000000..b2296aae362d5949af88e30d7d40ce9b8efb461e GIT binary patch literal 2764 zcmb_e3s6)?7JZLFm>CcU9Qlf(7NR188^J|D2XFu*!l;mv_!%C<10T%1H+k>PhloZT z!GDS%s01MhV&VrK70o8HfQs3~4+f2kXbg(~C9WvCeoOZD@CjD2TeVf&RkuI4Z{K_R zcHi3_6~ACAhKU;^|&$CpDjwd;-iqU8(HCdiYYFSc6@MNl)G-?@^=aib%!2C2Ft>P($=8`pp zie4Js zp>!~W=3b@+D9zDdC5l&~g+q6s$3JOF`E z>POLPiY8P2`mp#<^?RRdaS3oSERsnj!H)tA!z4hc90qa+vc)CEn3dC53GNjlC~^@x z{V6vhcY!X2WE0ou3UVvtM*{Hx*(t$rTqbjZS|N+Zph=cROQ6xpte{>k6AXvRI4=y( zw~-8W!^@G%rxM&8BDm`!6HBg$9natmGBHx{vrIf3nwuc#f_D~6tenJB2`-fQ4s{fq zvd1u4w3ndR%T^*0N%|a4e=IGF&L_VZq`Ne*h3VTe$APbqO2l zj0;^YV-Fa+g$;ETU<-LR0XblfMvGb*&=8=ZKn_4wKqG*hfp8$icNx%k9neSexZL=j z9=G0kqyzO)84e@`Li&*ZhxPXDphfl&-zt{k5gr-{6?9hPOlqjDmRlKweTPioXw-L& z2s{G>oJ|_2B^lUaDP~{R?Z6Z7a=)wj6nJASGaf2}rWxK##n5_^<-Ooud-05ybrzPSV6nPf=2)d1bU7}*l=2cJqt6JG?%nGJJz-P7(}0Z zkpc6f6mmJCrx+b;kunS#8Az~yWBohri>ATXAlndg2D<@Km5~uShfV`DP5t<6VWS+x zQ6?q`o)Q3yY#B>jamb9d!Hs5=oR%=q%HAx&D#5IZQ_3{TPNexx1( z-Cx_2zWgCCas2}|mD1n0oXZr_2uC|RC7ps}S!Yr}poSTDRwZ6%OJw$eIad#JRLIut zamu%XEk0l6udChj)9#gN*21G9=5v!z9qF#KYBQTkf>uVJh)%Dnv@5>YB8qw*nlS#@ zt@bjX9s8@;G2e%FWz`;belg9}o;F&|j*|xxMdwZ?>3_H_{9w_9#UXVo)y;;B#q!E+ zhKo1LB|pkt_f?!ft?l6E&zKu@{M8(nS;s#2pT2!qs$F%~qN}@`zNr7#s~Rtd1x2bc zhicESN_?;{siHx)?^5gjc^gjNI&k)YH+iq^lbpP?yI-bmOHO*Ud5QeQ<0ItXyyLCg z18h#s?jkiKBX))tR^G!lAMR{Cy>W@>@HbI+vxiLF6|*j`%J+iODYoe3q+dI9Wf9B9 zD34FySQzM$Xo?zlgm@EV{M{~P|I&OrySMp=b_o}`*hGDL`}wHGOu^+DT~#%|EnQJ# znsq42IHAb)gZmucG~kh`(vBVVoQ;FbwwfY@`y+iV@hpo8&?W7jZ(VfN@-{#+NP4NDqb-rf$jfvsaXKn6$eJpsU$Ap?$juLT5vkRe%`f9 zYo9kpH{=*!3J+3lc}JtS6kSU?u=&wPud)jYrFrbuvS-e7e0ENlR2y0s(UhrT<^T3dcEJFWAnut*YR`fT6g7D?lN^{;dVI~Ei^p%4SHEl;<~!s= z^R{fyGr?`E#(7#VjegvIxw0$5&8+xxLAJupb)@*vhBb%ZxP&_FsR(%}&MloaeM@U; z2R-e)dGzhc&x)3@ACFQy+9$U<|T?Jll~%bP+U{sw`bnD!vFGe z?YiRE);ZVi|Ko*6`?;=n?zROB1J)B=mBE!q@0~3;^O@8qZ&`y)!M@j4O(QuPR1qmKcS*3ppUdKExg%*go9^Y3NM|53NFFDd^w1B2&yNRnu~ zf4o@#ukFGs)`w=GbFe|TX0YZ-R@3X9f#SHqCWYcPgchFC3@jEtRN!;?fA$v<^w3+3 dJBi{&3Q+lKOmwN zNdwx58m&fD8l+KE3hTvZ1 z7=p^(q*4)-mR6~%Fb;qmBZspFHBA}_Jzk~34GgZvI9yYQTMRVAu_{utxI$~B)Eq%m zY&MCh8JZ0SFq@<`Mm?U*a*R>U1yh7R8)x(wl{=h^bE+|+)f4ZKH0V{TU@gsTGB7kp zt7*MRI@vZw5*zw_yBw`D@DbGg$fQUbKu~&u!ZiWo#)Cov{u8yv2xu&=!4U-cCy)e) ze@*~-0|`;dKE%%L1qnJcQm|VlatkeuDNQxz;7s~v<&W@D0-s9`y_U5VyOfbNftib9r`V(fDV=P<}T4O)*pl3Z5k-yd^s1bty9S z;HV3SJu5xaPzYE8t^V=;WdQNMynsAyyr%+gG4Kbhz64-hU}7oWFG@*}gMyu_LdqAk zUoG`r*tDU|paZ#M4xWdZ2-?V4wak-VL|$=X(-TpQU*5^r@V?=Sn}2eLb$pbuN=ggE z-zN4cG~o;jNtKTXA_9Y9v5+=clZGrEl**Qzj0)VVah5eZY8jdYn8D4{ zK#ONUhC`a*W)}c3BOEZ~9ON$_hXV_-s_}dzB`BQ*pFtV|qcAO@4SJQFva#qQgJjPqF9r zW2qmg|G>J_GxEw->Pvt3<*^s4;^vSuo@zoL$HWhJl^=dMD4icz?zDDxM)UH$?X4q+ z+SWfv^SYkXRA}eq-;{a&#N7EFpGW`W*oPPPUq6zvqQWQMeBl16;h@UbKBzg|(yBQb z^CZMRsxWo0Q>p*J`nR4%Gz5NOpZC|e8K3O!bkEq9iEYd6R-IN1RqK4`eNo2<6=i+H z$J?c+Yy6us63(h$yxrL5IV)gh%G`POwa!tkHUIi3DSFDoHEIvPYvO^$O{ zY@xc)*9V@4eZB?@6*cZ6XGOn#_Sy|g`Mp}-mZ;d~+6+-(dR|@RW7ok;8%ORw^S@G3 zyX5A^rh+h^u>3!-`)i(>>E3b!r zyD0UCJ3|HO1KhBW^t(UqVUjOqzj#U6s7zdQzo0C!f6d1yk2G&}zA$q6jPDYkTe{Y7 z46%=swj4j#V7a!P`cwGOab4x+kK1S?tM%`7x<)6)ixVCWh3^m!j%N0#eUjexYiJqm zk)hSdGFr_-!n*Kx2z}2|NhV)TJtv<^q3FipzStgxsYn#mzq!}arEHqlRFk-*$?0}) zhbK1u!JeXvk9OTGT`*OqIJ9oou86kd?4Ol8H6ACn9z!<Wo>ZyUg0gYubF>C z`1_RRYVn?kCGDT~91Tk!TC>_)|Jli-S;e&-XALE{B)K{C-LyUZJIV+5YL1@FZ(p0g z;!1B>=eIkq#xC=#AKZR3w&fisuZOeVzfk?goTzn2^55)?TD`Qp;#u^)Q@_?kJCsO2 zT7CJ(l&pcb3NLzxe7$tD-`S*Wr>)1H*o~YnhpHWCiOq)-F_%CVyW-Ziu2SdW>U^A0 znL;?e$eD$uFmy~sz!JHDPl3J0F*VI?&sw{t$6>Z1JQV8{a;=tFVs-s_?Vx!l%I(i8qXv#o9#KAA#I_JAA}9m rAqnt{0p}C|H2w&I;d>D3<`|DiC##7dOe-+(>%>6NjS+O(D1!VOCRI~T literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Param.Float.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Param.Float.beam new file mode 100644 index 0000000000000000000000000000000000000000..f7acfd36d3bf39861e22180bad084bc828337c88 GIT binary patch literal 2516 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 Z3?iPcKEhy9o{5_$1mfOe)YFC_{|5DMW+(sv literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Param.Map.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Param.Map.beam new file mode 100644 index 0000000000000000000000000000000000000000..2d09b9c6833fa0f864298c797df9b722c4f9034f GIT binary patch literal 2840 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Presence.Tracker.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Presence.Tracker.beam new file mode 100644 index 0000000000000000000000000000000000000000..afddce501256ebb34bef4e1a45e7171353634f67 GIT binary patch literal 4656 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.Helpers.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.Helpers.beam new file mode 100644 index 0000000000000000000000000000000000000000..2be31bf40aa495bbac67a72fc44037b76162a6f8 GIT binary patch literal 49604 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 D@z?6V literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.NoRouteError.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.NoRouteError.beam new file mode 100644 index 0000000000000000000000000000000000000000..35ac4d29ba8bbfbc1f3c96da31e482e251df739b GIT binary patch literal 5028 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.Resource.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.Resource.beam new file mode 100644 index 0000000000000000000000000000000000000000..f0b0541923c35410e75acfdd535acc29ef967724 GIT binary patch literal 8964 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.Route.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.Route.beam new file mode 100644 index 0000000000000000000000000000000000000000..f357d9cece33e09dfc9929e46170383a7f93a1bc GIT binary patch literal 17044 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 V!`6_9AkY6Gz@JV)AL!=n{{qZxMZf?6 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.Scope.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Router.Scope.beam new file mode 100644 index 0000000000000000000000000000000000000000..9a2bbbbded2edcf276f373f2c3f0fc0e52804979 GIT binary patch literal 19512 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 E)8;6XxCPt8E(#J&+`RsqD7G8oI@V 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

    ni(9$2v#<4X;(PIjDz+K2 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 BE>r*j literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.InvalidMessageError.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.InvalidMessageError.beam new file mode 100644 index 0000000000000000000000000000000000000000..6a9535d418b5a0c3e761bda55092452f321483a7 GIT binary patch literal 3572 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 R3N-MZH2|DV7`#zL{68W^u@L|O literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.Message.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.Message.beam new file mode 100644 index 0000000000000000000000000000000000000000..4a6b0c5875028b898fe115bb49daf22bf2f56747 GIT binary patch literal 4988 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.Reply.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.Reply.beam new file mode 100644 index 0000000000000000000000000000000000000000..6414cfca151f063749eb9de30e03776e90da6ddb GIT binary patch literal 3296 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.V1.JSONSerializer.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.V1.JSONSerializer.beam new file mode 100644 index 0000000000000000000000000000000000000000..5fc6b13f1043650bb9ebc87e0f0e92ad148ba8d4 GIT binary patch literal 5752 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 Z;D56lAthuhi1`KsBKF;sA)iRdzW^;Zp7j6# literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.V2.JSONSerializer.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Socket.V2.JSONSerializer.beam new file mode 100644 index 0000000000000000000000000000000000000000..3d2093e3190cdef7364a56577f59e676d44437c6 GIT binary patch literal 12544 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 Q)v6%YkPv4jAjh9r_u6j2aVEF4j>L=aHy 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 Ob9RORBLIgC^M3%Io+Hix literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Token.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Token.beam new file mode 100644 index 0000000000000000000000000000000000000000..2def0ba137487fc136b817a024cfa8e349c1c04e GIT binary patch literal 8896 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 HfXaUX3vVB9 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Transports.LongPoll.Server.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.Transports.LongPoll.Server.beam new file mode 100644 index 0000000000000000000000000000000000000000..37f334b2cefb47393e5f6ee6f3d44fd74e07597b GIT binary patch literal 15052 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 z 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Phoenix.beam new file mode 100644 index 0000000000000000000000000000000000000000..2a010cabee4828916f8c952037bc423894cd4c46 GIT binary patch literal 5572 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Plug.Exception.Phoenix.ActionClauseError.beam b/phoenix/_build/prod/lib/phoenix/ebin/Elixir.Plug.Exception.Phoenix.ActionClauseError.beam new file mode 100644 index 0000000000000000000000000000000000000000..9c7fcae696acf88ff80362807e67f3fdea485e81 GIT binary patch literal 2704 zcmbtW3se(V8qOp<0`dqUB)ryDTUo7=0F{b7Y#^n`5tZ`LTDlvCWC9bCnK&~cVO^DjHk7C}IyRaum^MX9201wmm!tBVD}x6~JV#I?}kg0;57{u2W2?vd^3>74V;{qKLj z`Tzgkx&MFf>uVAMIUL77Mny-iie!>QI2x}8rXtN44FgQs_ z<1fmCHk+7JdQ}w8dBIy87rs_$xQHQ0{3}sX?0R*l~#V8$0q<@``G0Mq7 zizn8h-k?(|12o{>K#>foB6WO^=f=&SGo_v>egkR^g=SF3NH_e*6JO+y6FQv0)c#XG zWr6XK<0$;$|QVYP+nACf-w!Fl5>qE zd3&P|2O|OUHl8~omkZ$?FOT6slPZr9Kx2?|;k{YTbBDpzb2vz`oxs@}+0B}KBtRO% zc>k2h9R-&h-8zs{a!1xcx7^Vkn%hA1M82*RaD|Q{0m2tpEb-kc=YYZk6hisJV&L)J zSzC@`4#F3)J_Io2F{uJc{DWt{#G;je)-%Fcg7Cd8eNX6nM>u=&5*aFqop`L?z_z{s zF2EV!@;@>XZMJaYKyL>S0}yM=%IqTocmPl9L}(QEiqX2 z(ycm>co|$1f9e;a2=wf&f8EltoBZ`Cq6Myas~+BhRn>VDE552x?0DzM{I&0x6>+5M z$8+)o4(rn!AhF7xk&pl&ADZ^b%c2R^KSBsN;s1^`4;N$(JG~e?Zmf~q(n1stX;=oD zg_B0g!ZJO753|ha=vg9{RZMOC89o9E5AwtGllxz*UZEyc`Q&TDDuIILLI)_B-xd(6A4le!A4DeG1o;W47Ln zMe)h_p|S&y-*>7As6p+zoHjfXZyN9x9{!7MZIw^whePD@2@w*ZspzYEbMWThZ%E$S zD-1(bjR*J{8yb(va)K(udxXu$=lwMzwBuDxN50rW+~BeA*l14w-gUQwEnNFM z&#sE55HVJJ_iwXKeDv{%U$8dZ?`%PBQT6eFx(;G&nZ8*m>T|hr*?ZCa{vCcFc_b{U zz{5-1-d?b{vggp?e#OJRahu?l{6E(DM4^7&|Yk4K-a+5UpAK1Mr@f~c1yw~hI z_F~Ex34Zy{{8NN%#1=gs}t9d7%>w!&I>pRS?fgMSEfOOI+Ww)f-I-n4o4(TD8$ZADX=m<9`=YI#r6E(2* zHxI5a-ZKy~ym|X*@y^3{Y4@sgN50K?V~ZpuzsYA59nJT>@~(LQjq|1#7>|7&UpAjV z^8k~6cL1@?uAdlRny!DjC8S?-^kUmU_rM3we!c4C!R}0Y2}@_l$lRc2)7&=-lqi^w6Q;BPAU+bJ3DhkDfRuRThqQ zCzg<{&o*5vbC};YP-r5HdxVQFElP=bV|4J7Z$7r$D12{;f31*v)U|Ax-etj_#C=B( zI!48Pe(h>`%etY!uBW~}hw`NlPTQ_2^lf})Sk&Rw|6!S3b9l7!%icZ4xCPzub-9}= z+T7n%ulBxIw!9@xlCb^-XYHkzw-i*(E(?t_HNSg8^xd6AI{P>G8((^>+BK*?WSuc_ zgUd+#2cLP>7uEIT#zf8{Q=Bdy2wLWpbN1YZM$}_X`DK4|Vryw@x!Xkb$V(wxMi@bR zP84zB?hgB#Q9cDrQ)^N#q`Jmt+x|AxwdGe8O@I1yyk|V`rmgy0=c~7C*n=e~vL?uJ>e6-reGrpm-9WmX^q48&w_y%(^R1o(_6jxMskO0C>P+ z8|$#WI-5ZCxN4GYgEFL^Wg7`7U{(WA2({Xo$A7v;{!E9{#rgkvouSx6S%mO^IG<)% z131K9A4*m V%~+L_vJLFFjsPA2ah>3B{sWmIqI>`V literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix/ebin/phoenix.app b/phoenix/_build/prod/lib/phoenix/ebin/phoenix.app new file mode 100644 index 0000000..7a8cd5e --- /dev/null +++ b/phoenix/_build/prod/lib/phoenix/ebin/phoenix.app @@ -0,0 +1,102 @@ +{application,phoenix, + [{modules,['Elixir.Inspect.Phoenix.Socket.Message', + 'Elixir.Mix.Phoenix','Elixir.Mix.Phoenix.Context', + 'Elixir.Mix.Phoenix.Schema', + 'Elixir.Mix.Phoenix.Scope', + 'Elixir.Mix.Tasks.Compile.Phoenix', + 'Elixir.Mix.Tasks.Phx','Elixir.Mix.Tasks.Phx.Digest', + 'Elixir.Mix.Tasks.Phx.Digest.Clean', + 'Elixir.Mix.Tasks.Phx.Gen', + 'Elixir.Mix.Tasks.Phx.Gen.Auth', + 'Elixir.Mix.Tasks.Phx.Gen.Auth.HashingLibrary', + 'Elixir.Mix.Tasks.Phx.Gen.Auth.Injector', + 'Elixir.Mix.Tasks.Phx.Gen.Auth.Migration', + 'Elixir.Mix.Tasks.Phx.Gen.Cert', + 'Elixir.Mix.Tasks.Phx.Gen.Channel', + 'Elixir.Mix.Tasks.Phx.Gen.Context', + 'Elixir.Mix.Tasks.Phx.Gen.Embedded', + 'Elixir.Mix.Tasks.Phx.Gen.Html', + 'Elixir.Mix.Tasks.Phx.Gen.Json', + 'Elixir.Mix.Tasks.Phx.Gen.Live', + 'Elixir.Mix.Tasks.Phx.Gen.Notifier', + 'Elixir.Mix.Tasks.Phx.Gen.Presence', + 'Elixir.Mix.Tasks.Phx.Gen.Release', + 'Elixir.Mix.Tasks.Phx.Gen.Schema', + 'Elixir.Mix.Tasks.Phx.Gen.Secret', + 'Elixir.Mix.Tasks.Phx.Gen.Socket', + 'Elixir.Mix.Tasks.Phx.Routes', + 'Elixir.Mix.Tasks.Phx.Server','Elixir.Phoenix', + 'Elixir.Phoenix.ActionClauseError', + 'Elixir.Phoenix.Channel', + 'Elixir.Phoenix.Channel.Server', + 'Elixir.Phoenix.ChannelTest', + 'Elixir.Phoenix.ChannelTest.NoopSerializer', + 'Elixir.Phoenix.CodeReloader', + 'Elixir.Phoenix.CodeReloader.MixListener', + 'Elixir.Phoenix.CodeReloader.Proxy', + 'Elixir.Phoenix.CodeReloader.Server', + 'Elixir.Phoenix.Config','Elixir.Phoenix.ConnTest', + 'Elixir.Phoenix.Controller', + 'Elixir.Phoenix.Controller.Pipeline', + 'Elixir.Phoenix.Debug','Elixir.Phoenix.Digester', + 'Elixir.Phoenix.Digester.Compressor', + 'Elixir.Phoenix.Digester.Gzip', + 'Elixir.Phoenix.Endpoint', + 'Elixir.Phoenix.Endpoint.Cowboy2Adapter', + 'Elixir.Phoenix.Endpoint.RenderErrors', + 'Elixir.Phoenix.Endpoint.Supervisor', + 'Elixir.Phoenix.Endpoint.SyncCodeReloadPlug', + 'Elixir.Phoenix.Endpoint.Watcher', + 'Elixir.Phoenix.Flash','Elixir.Phoenix.Logger', + 'Elixir.Phoenix.MissingParamError', + 'Elixir.Phoenix.Naming', + 'Elixir.Phoenix.NotAcceptableError', + 'Elixir.Phoenix.Param','Elixir.Phoenix.Param.Any', + 'Elixir.Phoenix.Param.Atom', + 'Elixir.Phoenix.Param.BitString', + 'Elixir.Phoenix.Param.Float', + 'Elixir.Phoenix.Param.Integer', + 'Elixir.Phoenix.Param.Map','Elixir.Phoenix.Presence', + 'Elixir.Phoenix.Presence.Tracker', + 'Elixir.Phoenix.Router', + 'Elixir.Phoenix.Router.ConsoleFormatter', + 'Elixir.Phoenix.Router.Helpers', + 'Elixir.Phoenix.Router.MalformedURIError', + 'Elixir.Phoenix.Router.NoRouteError', + 'Elixir.Phoenix.Router.Resource', + 'Elixir.Phoenix.Router.Route', + 'Elixir.Phoenix.Router.Scope','Elixir.Phoenix.Socket', + 'Elixir.Phoenix.Socket.Broadcast', + 'Elixir.Phoenix.Socket.InvalidMessageError', + 'Elixir.Phoenix.Socket.Message', + 'Elixir.Phoenix.Socket.PoolDrainer', + 'Elixir.Phoenix.Socket.PoolSupervisor', + 'Elixir.Phoenix.Socket.Reply', + 'Elixir.Phoenix.Socket.Serializer', + 'Elixir.Phoenix.Socket.Transport', + 'Elixir.Phoenix.Socket.V1.JSONSerializer', + 'Elixir.Phoenix.Socket.V2.JSONSerializer', + 'Elixir.Phoenix.Token', + 'Elixir.Phoenix.Transports.LongPoll', + 'Elixir.Phoenix.Transports.LongPoll.Server', + 'Elixir.Phoenix.Transports.WebSocket', + 'Elixir.Phoenix.VerifiedRoutes', + 'Elixir.Plug.Exception.Phoenix.ActionClauseError']}, + {optional_applications,[phoenix_view,plug_cowboy,bandit,jason]}, + {applications,[kernel,stdlib,elixir,logger,eex,crypto, + public_key,plug,plug_crypto,telemetry, + phoenix_pubsub,phoenix_template,websock_adapter, + phoenix_view,plug_cowboy,bandit,jason]}, + {description,"Peace of mind from prototype to production"}, + {registered,[]}, + {vsn,"1.8.5"}, + {mod,{'Elixir.Phoenix',[]}}, + {env,[{logger,true}, + {stacktrace_depth,nil}, + {filter_parameters,[<<"password">>]}, + {serve_endpoints,false}, + {gzippable_exts,[<<".js">>,<<".map">>,<<".css">>, + <<".txt">>,<<".text">>,<<".html">>, + <<".json">>,<<".svg">>,<<".eot">>, + <<".ttf">>]}, + {static_compressors,['Elixir.Phoenix.Digester.Gzip']}]}]}. diff --git a/phoenix/_build/prod/lib/phoenix/priv b/phoenix/_build/prod/lib/phoenix/priv new file mode 120000 index 0000000..70b47a8 --- /dev/null +++ b/phoenix/_build/prod/lib/phoenix/priv @@ -0,0 +1 @@ +../../../../deps/phoenix/priv \ No newline at end of file diff --git a/phoenix/_build/prod/lib/phoenix_ecto/.mix/compile.elixir b/phoenix/_build/prod/lib/phoenix_ecto/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..a7fe42c699f6a94068c811b261b97e23006095da GIT binary patch literal 6258 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 cxZPRE4gB9V`QmK(|MR$FZrhdr5493@~ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_ecto/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/phoenix_ecto/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.SQL.Sandbox.beam b/phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.SQL.Sandbox.beam new file mode 100644 index 0000000000000000000000000000000000000000..62946138edd179d8fe5c81c9338cdcec465b5c3c GIT binary patch literal 14988 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.StorageNotCreatedError.beam b/phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Phoenix.Ecto.StorageNotCreatedError.beam new file mode 100644 index 0000000000000000000000000000000000000000..6fefac139a56c81f6adb73f66be2738f060bcbda GIT binary patch literal 3964 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Phoenix.Ecto.PendingMigrationError.beam b/phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Phoenix.Ecto.PendingMigrationError.beam new file mode 100644 index 0000000000000000000000000000000000000000..7b2450880b492c06e35bb7883740609ceca1fa6b GIT binary patch literal 4192 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 bY5=MK#|k^rq#PA7zb^oB_aNK$ka)iVFo(0F literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Phoenix.Ecto.StorageNotCreatedError.beam b/phoenix/_build/prod/lib/phoenix_ecto/ebin/Elixir.Plug.Exception.Phoenix.Ecto.StorageNotCreatedError.beam new file mode 100644 index 0000000000000000000000000000000000000000..692d7d33de86aab852fbfc79947623ac71b165b5 GIT binary patch literal 3836 zcmbVP3s@6Z7S3cKglJ$O;i*7SC<>LA+WIIGM6@a>f(X`Pm?RUJkjxA-69S)$1t}`E z@@U0E0Rg3JA8rexsI0nzg0>cGt*%sYeN|Cct)QZ)EPE#jKDOHZ+WEdS_ul`Wd+s^s z-Z|&Y?1gb5Jf7XXnNblj5p2Q~9uL|wG&FQUI5kR#XW?{Utj>@c7?q{MC>AG)z}Per zBk-)iC>2Wv#6r7E?#jG)dj3R3pv$YBXMWvyH zT8GiGI#h}2fPyG%U>Xz(RE<(BMk^F|Fq88XKwkxgGK>(RP#PnEtth3?;FwOGq9O?m zp4#x78A9m|)E<(r9f|&(z1|>!(tTKF5usLe`WGGnP21_8h+!4HE<#TwTNs-S%Ktsv-;GHXn zC17%aj0cqn5U~uZ1@k{~IvC_C6X_eRs-XwN1OLv#ZMeeYT43WcDVPa=U=mf?R ziU)>}(78(NBHbi*NtAMmcu0T%sa)j2v4@FWAtBJgLn4>L98U2dp{rcvJXUTc$v|X~ z(2X-&y$_xQ@Mn7|s(8Gj!0n{^0>;VbAOk)`s%fiH7FfX2^7juU+S5I;6 zI6yEUF(5lYd_bcBjkffMaVRRw#GeFk8$h0bAV3@+*XJI0K+b?TTnfm|(s#6sIh?yA z_7;2uXu173oF9#|oIWLhxW@|6jC>u}OXC}b!}kz{z{tk(HJAnh^QAZSMbEwr6w-pV z&iQ)qMrx8i7q?g9$|aq?l}iT$z%fa9#0dGt2uDU)F_K8Q3jKNFIdKXZPBEP z(`(otGSKJr{0VsZ>JXDyhw zRbpvqCQce?6PNMj5rX4=?m&0rABZkm&Q+0f2@PmYKefRo6Qdar z3DbG-)WBdM)`m1iUdD7NMmK^~FcfMe6qbleD}ZJyjA4wn8k*Dtn8u9ufQ##ZIgE=u zMmqqY2A1RkB?!8li2?@rL4~FB-U&)zz@9;B93@Z~}j{l!L6Q>3qw7%=J#ceyb_Tu~+ggHLBK}(#{B}UeHq)=G`&wMyg=a;q}YA zn*dP@f^JHvu;wdRf)U5^>?FJc*ext&fa+<pu~Xf@*d$IAq5U&O_QXdV}ioM_j7c}b-)M0sv4{Wfyto8E=udBu_Q ztP0a6?cZ41IIA`3aGblphD@<*`|zg|H>SM5`1A<-onZLt0YGBJ+O5DF=O5K2d z-ILvo>q_7H@k;W(*L{=!T^n63_+*PmpY712@^!B}sE_nD5jStUWNiCNRyNSqdKqf_ z=~_A4tPMlklU>(&oV;0d=GMZb?B<2Hqb3-Uq8?wn6*sbdd~nai;+@m83$asc&)a>w z%aGK6;6HRwS4}|IZfA$;TL*f}E++osk-oM(n(Q1D<6-+a2ldyL92<>Nh;EwPf7StZOdc7W)@p z{yC4}s`tB>)JNCRanh}Z#u&eCf~M6q@p}KxnE1im`C@csY*VB3#^aNOZEwp&)4rM zkzmRkGB?5N(w20$OK%0#$2&GQ&RCoEfXSYJphGk2Vpq60v6c&hvq%*K0$&vOo$=LK zRqIRU$F~I|xy$6sS6yx&inVuiEvnix{c=|CM@!G>KR%(EICtKoyD<*2Kf+t1_n#Z= z_ny6S!y@efYCS*v(7fgoCl^UOJ(`P7rS!XHUs*F#uXnOOzYMcD; zMPvLDdRMJEUWP|}u09%ivj54&@@dMl?m&v6?FkN_+KKvL0a zUp@av^35OI`f1Ahz5QR2LP3H7hCHhnEXMq=H$YkON^iiRRyIwh!A2{R0tv|EbSthp zFj|2!Tdy5f%;rTm>Trg&thDU=oG5`xM>3e2n*g3R74T*zff8o{9}3RZQr??!Yt}&N zuwhLs%ef(Jo`2b?{rR7#-#O~%%B*3o=PWh5gfwQB*e-UUV0~&s8L5HiMAxGPZwjs9Dd9JT2Ljcp_ QY>Hby(z1qcKg5&&7b2$;8~^|S literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_ecto/ebin/phoenix_ecto.app b/phoenix/_build/prod/lib/phoenix_ecto/ebin/phoenix_ecto.app new file mode 100644 index 0000000..ffcc80d --- /dev/null +++ b/phoenix/_build/prod/lib/phoenix_ecto/ebin/phoenix_ecto.app @@ -0,0 +1,22 @@ +{application,phoenix_ecto, + [{modules,['Elixir.Phoenix.Ecto', + 'Elixir.Phoenix.Ecto.CheckRepoStatus', + 'Elixir.Phoenix.Ecto.PendingMigrationError', + 'Elixir.Phoenix.Ecto.SQL.Sandbox', + 'Elixir.Phoenix.Ecto.SQL.SandboxSession', + 'Elixir.Phoenix.Ecto.StorageNotCreatedError', + 'Elixir.Plug.Exception.Ecto.CastError', + 'Elixir.Plug.Exception.Ecto.NoResultsError', + 'Elixir.Plug.Exception.Ecto.Query.CastError', + 'Elixir.Plug.Exception.Ecto.StaleEntryError', + 'Elixir.Plug.Exception.Ecto.SubQueryError', + 'Elixir.Plug.Exception.Phoenix.Ecto.PendingMigrationError', + 'Elixir.Plug.Exception.Phoenix.Ecto.StorageNotCreatedError']}, + {optional_applications,[phoenix_html,postgrex]}, + {applications,[kernel,stdlib,elixir,logger,phoenix_html,ecto, + plug,postgrex]}, + {description,"Integration between Phoenix & Ecto"}, + {registered,[]}, + {vsn,"4.7.0"}, + {mod,{'Elixir.Phoenix.Ecto',[]}}, + {env,[{exclude_ecto_exceptions_from_plug,[]}]}]}. diff --git a/phoenix/_build/prod/lib/phoenix_pubsub/.mix/compile.elixir b/phoenix/_build/prod/lib/phoenix_pubsub/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..5ec6c9f90d320a9c2277b39358d2fbbfbe688eb0 GIT binary patch literal 6828 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 ak3z2He+tE$qxpY>G1=IrxBV~jVK&_nv6U_W literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_pubsub/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/phoenix_pubsub/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.Application.beam b/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.Application.beam new file mode 100644 index 0000000000000000000000000000000000000000..201f5c742eaecb26a25467f09e7148a949bc4984 GIT binary patch literal 2616 zcmai03se(V8lFjbga{HsNLNvdF07~}4-^*>k3nAI5*m4E@$5DU$&gGQGt-#~39V8E zky_tKr6}595wPL`6)9?UDHe5$_yAoOSrl8LDiwLG!YZzNCxqIbd`01W0h;^F#1Fvo{63e-4!CPc0u59av3cEu4m zSRr8jmUs!+U@|E*nF<;x!Avl1FaSe)0Zay90r&v$o&5Wy+)|a1=nB^vj&s zSrq1Qjq#x3z~@zo>xH5}YoL$s);A6qfG>{>M6b?5aSJ&fAm16_uMQd$U33DL3GDvh zu*(K|?pX*)fs>INs2WpeqM70pJd?HpEit9X zaT>*RAxIX2(PCmeWr#rzpe8<)ge8NrWQa{@#snpHQtHZ z;MgYpt$gF=BNyH)-L>M$AFGaUu1~m( zwjFp9Gumy6T8MECpEe%QUT&>cxKz3(g{wtP%P!4ojEK`f=4tMVBJhSgiXV2L1%i_-La~*eT_PjXJlac+`(bSad z%OCYfy*zFVdXJWrC;#ra^ekffYI@k_vC8ZD*w#Au)r;WSiXg9_Y_;B}G_ARdTw89v z;1^Winn!I|n_)?h?_ND+TAjsfO<`Q^)XKunI(uYFOyt!^yLzj<%&U$nR-d}t9yC1oZ$fy{p5Xqk z3Xh9_dHnsrg91c;G8J2svP0Ihc?sS<^u^FaLymr^Lus8&Op$FlT95s~HR@C<=RcQc z-}5iqH-AP0=XP1dcEjI~EqVN;K*KS1E*=~08<7rG=S8CJ-um8L!_8+wRc>PRTuoSX zP5Yq}S$%h&UU5INRM!4kjcS;HNzM-P+OIGLC=xhe7k~ZQCw;i`ny$<}gZk_?>wT-|wvUG+p((C+RU(4fM-T=R94a z{uoZ`Nnny)46dO-+7K{%8$M|(HSd%sotN(Mc!Hf56>& zIJxH=gL`}8+~N(5zFNhV!HU~`>9<#j_dPoGW7B(i3s#SPE%#{Y@6GhN6tVnj!`3Iy z^w-#B_jAYAuUzx=St)m@f3LA?VUx%2M;?8RUn&S}J%hU(-g-aQ7HtGeG@J*rjt}B^ zet`QP(HId@nI&biJZyD$z9yI~2kr?la^lh$m$NBU$B^J<0v-{Jik{^d>r~ffV`?+1 zvAWO*X?_!Dcq8fX+~amwxX}O-d?I*~fM|;V zCW;5>Fn2ABe{7}tgIQ8&=KoEeP^y?9(JXLxiD@$-9$&+dP)TT*BrH@KvM_v6Xh^0l nJ6tE7kV!?-aM1!sS{@(m=>9e(r)CpOY+L~5tpIz!f}sBb9yG9x literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.BroadcastError.beam b/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.BroadcastError.beam new file mode 100644 index 0000000000000000000000000000000000000000..628dae6eb25edb641e09c5ba79f8953a4e054311 GIT binary patch literal 3884 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.PG2.beam b/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.PG2.beam new file mode 100644 index 0000000000000000000000000000000000000000..83071b46541a572f38109bb0563d428ccad52da6 GIT binary patch literal 8040 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 D6{Fz? literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.PG2Worker.beam b/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.PG2Worker.beam new file mode 100644 index 0000000000000000000000000000000000000000..185f0e415ad8f4d7c6b350839e4913a056fb1ffc GIT binary patch literal 7004 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.beam b/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.PubSub.beam new file mode 100644 index 0000000000000000000000000000000000000000..2fc8ee988eaa37be5e67c58f18362a2948ca1fde GIT binary patch literal 15300 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 A^Z)<= literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.Clock.beam b/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.Clock.beam new file mode 100644 index 0000000000000000000000000000000000000000..f041aa94fee7270cbe850ee5848ab526af8a1ddd GIT binary patch literal 7652 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.DeltaGeneration.beam b/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.DeltaGeneration.beam new file mode 100644 index 0000000000000000000000000000000000000000..b5b31d96a96efe08285795824bb25184a5d97fcd GIT binary patch literal 9196 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.Replica.beam b/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.Replica.beam new file mode 100644 index 0000000000000000000000000000000000000000..482d9382811e084f3f2279ab673dd351ed197b14 GIT binary patch literal 10372 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.ShutdownHandler.beam b/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.ShutdownHandler.beam new file mode 100644 index 0000000000000000000000000000000000000000..3dca7ad791cf8e021b0791077bbbe6e41f20dcb7 GIT binary patch literal 6976 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 Ke1ZRDpZ*K^goWb( literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.State.beam b/phoenix/_build/prod/lib/phoenix_pubsub/ebin/Elixir.Phoenix.Tracker.State.beam new file mode 100644 index 0000000000000000000000000000000000000000..08fd1b25673bdbc6cdb9c1bc86df325e1aa0915d GIT binary patch literal 53116 zcmb5W2Uru&6EI8&<%}GLBmyF8AW=ez1cFEqBy_MK0*csZ2^|vY78C^q5fl)`&_o3k zv0%fB4GStZ>;)CYg1z_h&R#;%_xJw4=ksy7-MQJ>*_qkd*}1#8P4KZ$Qo5Mv#WOk`lJ;&!0cun7(UFWNKvmaPJ6-I4&}ExLjmQs6iVIDQl*Aeh42qSAl48U`35oGZp@~7__?Y0h@VDXO#6bBCVwB3jK>7W^zrp$k1RR zj3D+FiDMFjgW@FdvB5Ew3gY8~r95DPYI>;$;44n#Ns|(JapIJ>VnQ&1z-*v2I3WR} z#z~+OFOEwHj2FjB62(kObWljJC^lH?Esl?u#G^*Ec(yk&KH@4gIzcFkmq-bb1&1br z$bgN&gvdGKpyc3~BymDIbe6Y8l0cXMPn?(#1alL|CkjDUVxcrrlt2h7I8GFpBo)Ez z4W!~2ajZBF$Vmc`GJx_Wkt8J!*dnH!klt1Cj)_c2OaM_Ni{lf-QVooQXY(URDqBvkw%7AMg%7W5|VHbhDFASgh-p- zG2-B4@zL1e#L$R9Nk|loQAvOZT?YZWI8h9y5GzR*d&i37!^KQ4_y1|U&Peu^Nm8je zK17lfCpt>>kPn)G(M6Kj$T*N>LZBo*P&_LsIL5&{EI0-v1R4yHNMe|h_{tbbilR5u z)RYI}XC_I(f)c@2d2o3v2>~r7iwRpu7AG)~_$=xraWRo`VnSd%Nqhp&-qyYz3<~r_ z*s2uO6NAI4ftTchL_ERFFot|;fq&`os6vkfRETa>c0pinh!oiArEU=LlTaTo2K~ur zT933HEfyiYFxh-2+wwsdL~eaYlj2~ZqV)pnr@q%x#I(7+Z<$+iVO4W2xIuCY{O{X5 zE*KBc`|rDaZe=7m2rzfx=D$%ax!7Rtf5|~HK98%g4~5MBC$a?>8^HZXN9KHD9z3oz zRva55j&}e)dRs>KJpUWc~9{|D59+vSxU zLqo+02@lW;>hS^p)djIfQ12EOVD+pua|^}fg~vSv-J-(&1%Y67 zxPO^xH)SB&o)NUT3Xj(fk|s)s@eNkG2OqRk;DQPae;%u|3$0U{rEJ84l;;o|kKJ4cXsLU$!Hog@^};IFsPoeGyAp*s^UQlT>ZO&5~saMO#aM9NpA zauZ3FGO9A|p%STH=+1-tM~Nntbcs5Whge`zsdY*$9VNI+mnnJisH6unrZSD9#U#D0 zz^VRZs!kAv=1igUAF@nwDvO5tF;PG7Ix0(t>C6|>$wGG_UB*M5F{(`HK_+2ZGH)Ql z@Froj3S0|OVLtRV#kG8C8bWWOvx<<<5VF`px|J+Qg^DwTD$YU%U&v+&t>~)WxQUR2 z(PdJg&>u)LDsVcYaFn7QO40G9=sHtqdq9hgg-UT3IRSF#Q-*o>CPVRm$-G>gAw8R3Q=*k1~`(@5US4jmPf78`2H3l0A@j zWy;b)mBT=l1{F9{Zc^HO3XRYplTH)z=|UD6^yI~3k}yNrTfjB~Y*ra=NUp#Q|LI{! zr)e;SLKZS28Ab*B8HtQug`7>Lsx#B6JStMB3YkWwlQ6an(*knFKyGLm&IWR9Ik|2V zV$*3jGHM<&Y9VN&j!D*0s-o*K`K($pONPq2^yozFnXz~3Z03>N_QeF zk-=1uEMbgcGK_)j-$;h_hha?s#3{p#U|1tGY&yl%nWEEWyhg})jrbH@8Kyl?)jQvr z-n}S!bv$4Kh9?%4u?*7zYFuv;W>SG0BTB?_GWLblWkED4+P)gnATS0Mp)W(|%of5T zV7UnCXc5RTT@aE15)4C!$pB_d{YA(qOjST?_P7}dGZj)y=|T}%h7BOBlhPxih0bQEGb>GTKAFO+z`1fl7IH$vNf=j1v5*teBM6!I5E@Pu5`_F*tOyF0 zKmkqI8wp;iPRP>nhFffgkfMtyWJ{G~*g$n&eP7k124pf#3AAb6V}uqkEj_t?@p_=9 z039HQT7dhTN5U)t4QYfAH_+8ehUtSWt-#VobgP|N=M6p(nGIPPt$S<`A$MyTHW+Y6 zfEGtq;MPdcLW(tEw$@-ZN?k6LR~H1@5-Nkw0DBn%_JUC_DUmQ68HRkRfJedvWw;Fp z-bP^sgd?LnKjfR@HhkJBU)%;L>*Av+18`dsX4~z}K#`$6iiA}n!wl4^4}@$wcq4*S zLv`j`AsKw+D7h+Va#h%ouu(z^O|A+Sp$hvRRoEc{40blt8+s!tU{s_8q#h>4p3pO8 zG{u4LN>`>MrMr96-Gfl0PRiGzvV~+TA%iTWvtY_X6(GZtVQdv4?k>ZIg1ZF&SxKR* zP-qN_E(Pp?;z%*2IA$}cGHjSSi01DVYTu(h8fcFt*WT#=hX^Wg2f4jFG3;^JCLDwm zC(xG>F+<0$8G=Aam{5Q_F>IkQofxnz!1H39zh!3(vv*=Bfh-wl?*U)U0$L_WqAD!8 zjI*ghgw#zHf+Ds)YF#=@hv{M^B)bUNWI_la5RijVhM9r(Wf&LcsfFeV0##wlu;Hbu zR%9k@rE~`HOED$Wgka8&JyUmrsT;|s?&JZ?JIgS0FdY{#9Tx%a3eLxw%+%oVge-=T z&IYHWg7yv>#)E-qLKWCMkwpj@tZXV1wmV>g@QEzYlPV8)0c&?P1riiDm?eztCc`Wc zd61wxa;AJ0AszNkx-jw?ONLph^Ds~>bfzmhd&n?8;JX7mo@KZPSh9zFHJB1M?7^pL z@Q8h#U{8iw5nh=g7a||L%oZJ<3Io~5LmPYynZ^Si##rHF<+ZV6U}27vVIyD&4`6kC z89ok%7>9-kLN3#Sh(5-#!0{8K0I#s6W7g_SjA4a)k!ehz=Yo4CTWS9-c#I#{SPmo~(G#p3(Ht`8C+yuppd>=ZS;uD-be0wFgA9i7N)w?$7E&DLEgv))Ul}$EsE>uo_?6+lK;2hCotTL)nu$W{ zGR#gcEKnc|Bn1-hfNqmym_1M!2dqvm!zTfSNpcFhg#VdDrva3Ope$lf?}8#B5OE!^ zu96N;3Av2XUQA4fg!#)b2O#MMQ=TGpmpZF?<5NjkfCB1G!lstt0WeSi8i?3n0(@zJ zL?dC-WS9`TP5{QHm*LX@X_}lHxn`!x=R;RPD+y`F5y`5TKI&O$XJWwWa>962pfW>- zIU|C=%gi!-1`wQ~AV`RR28drM3_^BESQL01qzXDqt_l|*uWN$`5~>j3L3CRvJS#ki z3d4!cgg`L}c!O0Uw@53psu14`LkB_^h=k;;F-V5FBHabcFgIXr zA_yd;3=am@g1ZG03;}Gu_ZA&6EjAHl^8JJ?k&vD!BxhFOp#&bq)Cx%2<029kindi5 z=1zF0_%826!bFO#P?YE=H>xDXOp;(GNpv2}f)9LK3GgI70QfMqB$g9j2_}+67di2% zL?zLQkEWJH_p89g{+Vb;r$dMuM#98G6l-RJB0PwpXLSt?K7xdW32>>EEfi)M9?o{M zQi9zhoQQhCsapZRp1{-qMcfM@)F-?GkB|?c3ywFEghdeBG#X+IF@&UN2ykDKWq2G= zjq_&^D_Di1Lx&L56py1*bcrFxsxa|gwN_-I3LOP4FrZ$kDudWy=~mz$W!Sh<)l7LC zg{vTPka#An6o~o8qYEMNM7d^wav~XGp;$SK+E&EeyQ3Z}9i|niF-m^dlnqYX9*-tr zQAE^(=HNxlA*O2%BrIAH^?-&5!&Ag834g~dM$X@Ygzomjf~g7c}myK%6bZCZa)kBy3Iv zK3hH@5S$JBM>=ndjyGCXE<%={kS-FE6N&BEM}_$bHd+Cm2b*9Xiolhugnlfc2pNu_ zFcGxptHQ%8g=9Ygo(nj+WMQ`xRI0lKft`~J)dlU+Ctx=uY`}q3+VfZm2s(~l~ z?dCFUk{k&f7ID17CWCzrbn@ddkOLvBAY~xG>W{$4h`aEnAV4p-_ZHk9xCYpX5M5;G zGAsaSccUoPVN?PKxU&Kyr$Tr-6%Z=$x&Dc0K`VR-1hR7pV@1=QMi}eT9%G#+bfFU= z^)ezTPm_1Gkh`JzBrJ^x%2C(pMAz(|uJaYV6Ww!&?h6!wBy<JOS;fW*di2v!C6g&rYb^l7Fkq*XZ+P2Y&1jB zU53phC@k)wkO_JhvPIcKA&6QZ1#b}Cv1C{v1Xy$)amJ?T!nqB?7prV0Q-%eBqp6c& z!Qe86BCiWaSTaL}2pAUkEEpOrkD0JwV75#ChR%>fvwA^Aa!_^;$O5`gmqVBKKurNU zO%Bb0`)JiI0|>h2g3+RDo(%Ir*X1%S1Qx~=SdA;n@a3=?m!riYgu^1ryDUd5X*sMU zxCaYu`9BM-`*sB`L*3FTrlAxkUwN8DfXjSsp)j3%sRL6BhSWR?T1>{ze zu$5hdg(>b9DegMrt4LT8>I+K?h2E7iEF5qK%lDLQYQ7AMfVRFc5jH|twBSsDt4Oeh zCusE%r+sQ2rp40Xi5NuO;)m8~HZ@&_MfLcIE<76G!Qr%)KoY9B2pLw{JZ~8mt?(3J zaBO7MY#9~KeU zA}JOB4Gon;*T}Fq59lM4VG?9TB{B>p&4z##m1^*q@`M-}@>A|o24pM9BqCRr4-Re? z@W@1-%)OEh&H)CBM-YSwKAg#>1feQ$j4>Y4D0Fve*I`bFG62viPVV&-Z8pUkjxs8$ zRQv%r^fDQi0D}j^;N@0$1)WGoVig)num}@D?3<|GL}G>#LPps$B640U!;+v+D0Hu^ zz}F(%4WgL(LW&PM%MVtOB_6BVuunj#vKpQy=09DDbR1ZHARxQJ3!;HhIB&?&2;?GAL zm=hVy%pTuL!nUBJI&nH!K#0A*OYDF^!nO+V9V)g^m}pT$&ejTMjgq!bDpYzIzMWp8 zN(XynvdLxmHptmhom7+%t4zpjVhiQ5BN|Pf@PrM-3Zh10ZEfq$NHRbd-Xv^0mB&Oq zDd@DHE{E0ksLTljvp^2r;Q^fOlwpfN1W_P@UGivXH>hnl5(SgRN9Q;~nrLQ~M7|h> zu}sK6BKhscnO)+B{7F~Ncn_n52zI-$_WZ>n4AdaQGGI(!Aqm@ChBv@?4T{APO0ghL zNDXj8k_sW|4YK!T2t)tM_#suIV{0hLCKDDm99x?dCyXWt>zcYx7%Bq12~HSI=!DUv zIAJu=UF0W>Cc2;egwaH|qCOz9zbFZac2G(*C7P%xyFY-X(Bu3T!)OMk_;IopwUX!o z!SP>+3?h`ba`BU4OXRr6$XXTnKKVkW``P3BN!UK({2~JGvj|f;+G8rPhV~2aBVZ~= zRN(w_zz^&I((MP3BVf9q^F;Ug#SiHLKxF81paMTAA41o~9zR6F4l2@&GAx@I;&9Ip zE+p(w8Qus~8&MJ;Jd#z{`K1w^U(gW5`30p&AQU9SRscpohUxSiVpNDj%uhh6JR_i0Fd7 ztiVqzo{>OUO}EFJN!V#Z?qBb3sjPzo%hW^f2-VDMWN_!)UeU3sqaED1Y9XcKi@ zPINrirA-ocmN;HPFvtUEcT$F}kRNP=P$~}g4R8`D8Fj8l!n!U%MZW%9dZ6&o1Iv>` z&nu(_?uI46ud{5SFg2ubevzjIh@`s{3qn&CoI6l3luvN(0vctZoFR%t3gnZqs=zNO zOds|rkitb0cA?w)3yH~G>yg4mASdt0uD~zJJDS3Q{4xoz*}W2* zS9|1!GV&|s_Ij-cimbR$4!thJR(Y^U*bN!B8mu-BtoCLZegmxbhTLkciLK@a3ld(p z_$8`*mJpmiMIytBOI67%9{6!aKyN-7XxpyxlgU^kWfdcGGGR?=-5wgyI# z!YFsj@Y^uTZMkE$Mo$${tbH5yGOa3$rDur?W13hcxKJNGK^Hu;222|n83 zS*w)bovv72;B(2u{#ge3Jb0pbUxt-K=L9MVdr*eohq>IB&!zj}+I@IR!IUQ&$qZLM z_-SN%6)2YtDugYNOeW$yYOgpCVm*|#*MYw%bMHi^Xsb}H0cz?lm0@eUc3N0BXn$*$ zVU@r`qL73=)IeU4NF;;U;F%sJ2?kpSk|?J>Kp_T?K@k&C2Az@&*$K2Q(8=zYmSO{u zVe3&e15$Y;!!`iX6sUHfXa#b2WCr*iImN186jfj&5+l<8MG_rSsu4+$?qeBN10++S z3Sr}8xuE6#@G;>J9~1uYHTc7)BYDBm9MBw^2xr-THY4BJR7tyeuOkxjxnEAZ$3RzQ&G0g0#=Bf-YZcXRw7s=GBe1bg1}$)T2EGBPXKz=3&fU#UUyFbj2q@k91LIrgmqWoZ+f@~ zKk}A@z3JwD6T!~ME_Mh%0xt!;BT|K3+`lJb?+EVMa_&ELp_8!phG#pU@i-l-Wuo>@#|+fr^2n_#%f5MMYS42Y^!y16YbXi(1)2lM zd|=?WfU88dg@W=OX6uPQc-&jL~YVaXp~5>Fh2a{2?vK);p`&jA6oPEP(0$dgXu zD5){IOGq3Nz=3o+lf+Rb2IGK{<^p7)ki=0Da8+S2RWeWUbO5X#W{B487V!E;ARowh zkRjs%Sq~^3Jrd$l3#-l9$HsDZ?#KGh<=mQipNgRp{+YS^ny-A$D0xlgW(#bp! zjxRKPq2bGe3LPqRA#r*`&wYfxE)a!5QqPIZv?}9ju*#u8vdf;UMdD}(xHKzUC`?F2 zlgqd`zk-VshX*p<$%@J{;%d@aBo1E2)pD-jYWX|E+9Asm)%7rC<56U;CdvwMwJ45= zo~DyXiCxC+C(mqi`~C0CHm9GHh{`DAQW+Io>ObjfE)|7)C?no0T@6nJVN?k8(5n_; z`D_UEAfE^sL^@;$Suh7aaP915#q@P`q0_7QIy`5-uPfLLI6T-z=`30h*aMXaOB6vM zM+=UlG%0{-LTAVXqBmAldE8Vfi9-jer;|8vCW!{AF9E6d7jOrH)Ca=zKzJHPMk^Va zbQxD0#EP5**`BLQ;%E!FdVr=!sGDBK)d8{U5Mrgn5}@*pxVkJpiKA1-9ROk-K!}x2 zy!C<+VwGV#D5{tVnQqD*0C_nZ*VK72D!(i3}<<_DPX%t{M z3m6_G;Ie=d*8j!uU|@K#oM8hJXRv^42xx{~3=aW@hy2Ab9JffEA!S?xVA$Y47~a{% zumQm^vx{Ma-V7W5%P@M52eV>B<`o#uhM5k92d#vYN4pNYf;)`Jd{Zol$cbx2;tV4a zs%TyALOznq>2`V?BM1btc}jn+MNl?z7J_$YERa`*A>fsc02pm4R89UF%~U>`{N)U; z8Hpo*IRlNhn;4DTGn!fVXhz*DpW8EAf)nFu_mbM{5i zr5CTB#DUi+5M~}=jzk_=sK6Y^(t&pf_|8IKz{5;Q9C%*>A?ACNI09~J_=Oe z=_-tA3(pS$p#Y>dO2D-P?(7KP!#CyHvG~ZU!NHJgS@c@;?haoKp7N16cCdoxlQ{P9 z92EK%Qc0ZA0OZaO_+%iO5TF9N?ib;1+=tgaWQ3;5riHuuQp- zS)m?9P7@XplSmG+=)|S>nfMa$>Im6_MqLxnGeIbpxuSZR4B(qE^=3xNgRm-5AWGPay3Z7UBLAOlAZ)fJ~Y6m zd-9oOTn}`Z=a<7(hsy6EubKlD`dP zoV@FJcsU08tbsmW0`7R|GoH+Z3V8hS@U)1mL^v17lQ^SCL}grWSgYQ|T4njBaVG@v ze6>Q2xfA?DnXpARl&U(Dy-^xPk&;0fD$WEB*V`8$$N-qm2;yzb_2FxkaVI*L{8xvG z3S0`3;a(Kyb9|`Y-bi=^31m9H@G=qbEej%X{E!iLnXCT)Wv=k#9buLL=H%YyI_O_> zh3DxAvDBNynew0J3Xj&c0ig_JHC4b309gfq$-xU6bj8~n`;g(GcM?_L1t&PJaNs#R z4SJMAkLd#LH0UvnP%R4@AmM5BUhja=sR}Clfy!_w=1y!Shsg0y7B$ zY-Hv#>;QUYkvpU7MM20^$kOs-<-@c1lebYc0bxUyhB2Ad+&(V3qU3XwEX5y5hZA#ub+V7U%t zA12^Nz$7Ecu#&>jD}KnRA+-pR4j3ykr|_N}B4KY4Kq897i6ls@2NF^C+(;59nvmND zXvf%dqe+}txi_c+K%6}{mc)T$ELzLe0Fc^qB_z%)x$CK+k~s19+*u?}0zq;kv=i;Q z2_z0Yz&!{(HbIYMdu|emlOn?o0ic#g;-uPhQ%D?m%GwBk&44k-o;#bwnG0_K0svl6 zyDe9Bq>ffs#(5pT}QAhYQ6?HT&;vbER>M@Esn%68ST{1yB>XPSN zsH;Fh{G>raeG$zCiaMgx#V4vSQos@ZVnrR{hd@CzmqS?r1&xJpRzg8=gd>82=p%Rq z6a+_dTZ`(hsmPW{K~P8cXCoMtuZlWcls-dAfr4mvKuLsxcz*~b0Sdx@07VJ~jdKS| zoT7dcuCa>xNw|hVLHIRLx@1-g^(jzLUo;0~D%rbF?9 zf^eoP>IetX8wUlAh4eWV3c^RUJ)j^QWD}^4;K)|op`bY;+Y%`1=xPE5(Lrm#SWzDe zS0hE81y@Z)9qAa=(Z9Y>5N*^~*)1s!##X)xb+q=@AsF03@*w`H?QTZ=Rzd;ZNI`HV z`YGV$&_?)ZzKEuh0$!$oqq!sAyWlcZ1$;DLG*?vx{u-zwI$bjB!Y@|9k({7kH=Wf` z1-c|88+9lo1)Wt;M|?WN6@#LzfES@Uz=d$_1EmYU5Y^%TXt+|Kbd6g8RYV{81thO7 z{9J?r%@J@#Hr&PkGN>c^$k!lQchSjFz|G-G$X~(FQfMRkNQeEPbkWaNz>yx2zwCl% zK^<&~gw}!<6taTO5(T_JTxq@FnF=`Ko!$$+5b8)iNcIdUUGm95H~>eoM6|lboiB$g z{f4V{FZdj&BYl5|q64LCzVo1p;6I`0Lg}KD4s|3SbZw8x8jUfS{bU~7&a$>!{aV3cL?fR@0J}o6Cq1gqH8&NPB zw4$V)5et8*#{HctPle9DT+Axk{bC<=8o;(?AVpGoYb)h{eiu*Z4ZfL`>mL+HeB7(B z210Ww3QHtRu)BdQR$=9YvHWF5T`NnD@R#8!r6`sIaSwP^&4^HrLX#Sj5kZb1rzo>6 zpjblTL$LxqDYHjFu?7@V!Wu~tU}LCs-GRCa)KMSQm*|Hmsu99~ijp1-lA=m{+Mc3` zzI;aWj0{hbB%$!Zj37%+=^Gau3*Q(MAA+a!k;cP^@uBdW04aSX@ggyNyB`SOBg@5) zTni}$7bOv2sl#XdA;ID34i4iGvLpTgfCiIFAqB#Jf?W%!0JN`s9>8m$yqBDw3i?hS z0ebFRpe6-zkLE>mruPUzF=5N7agtC!@N>xjIY6n0f_yOAGqx-0XrI`os4s%+Rz*D> zu3Hp!vvI^*C^`oaIJ=dc#y)iN>Pu4 z>jp&~O?kbdjwZQIQ4fP_B^0!G1;Mp<+))N?L~|-!d+!6i_ln+e#~KAbiZy!27ptL- z=Hd?5-f={c0$&K%LMUinC|>9tBlO;{dhcnufQR-g6fg9S5ptl7ct&wS?^vMs{@;7g zM><3M8`_(Z&QKlg?HN!I&uHIX2nERpic&fhL?4P$?>!vp55ayyLHa}W?@*BbQ2hxM zq$gCr2gMf(qPG_c(g%X?f)c5yBfAJ!)RF!}p#VRGu7VYCq${vP0*=OXfr4lvIiotl zM^_{xkS%dGvw|xc3&FThV7^4WI}EM}#{deF1*$U?1>wLRPsB&4Z$C%)O%J#lDVBzE z3OP9;j#yN2RHcOuPj27gm)vdLi|MTFBfAdX#@RD23`j=F7e1^mb@a0m@Wp?$5?L^u zhX4{O@zWoOh+4`3_`!?>X)ydSh2kee;se1wps(3e`Vc=W5h{rnr}P6XRDpY9Dg3+! zay5a$N$^#7WGwns5g@B3|4!%PLh+S13wG&h24KjRf4ciFOEkTkLA1aPk3NoLBesaNF6d4>B92Oa7 z?kfpPOo1twCqzgjiIH*PT=?OQxI}ZQ{I^xi;TKa9x*CDfq>zN95c8PGkS>t9eAkLM zPe8xDGF+Sr7UdEW4z}ceC&L>a__0&VUZu@0sy;m_@W|FLu?OaUPP_54WW1i|E|1l2 zgKw=~sO6>4N}bpC>(ikxH9s1ke46{gZS~@`m!YLYgR+!pmP`ATJ$OJb{OPFw)kvtV zWoWz<8|I?#^?O#lhm-cPK;@nD=Kk9J{NCp8GcPt5t|?P0ng1o_$mVHZ?j1;aF?rI~ ztEE#uK0P>c^QR|1b#q=MO0EWOyT5I3-Tb-xCqK_)|2dF!fY0OcZVmioTb`VD_|Cf< zdX2|cT@OjQ_2$(+J+1Pe7p9(*T$il<`MP1R^onHdyqZTzKWEOaJ^XUJ%Ck2PpLUEm z(wH2zhG*WGYdt5lE$q%0?WlV{ciw-tsxfTWB-1&n z+b<2A{$lsRzU7ZA$FqX><}|KzU2x{b@RT{#VQKsQ12+FSx2$np!;u5i`|a~&w;xfn zEL=Q!*Q5Kdbv@K{R!?g?Iie{=O)~r3jQcJVXKszwH)(rPa{mlx(Ym*Jj8(1+_J=+{ zCvBba*m+Ng%g}73Yd?<)+lQ$9 z(VZT_P4O?eCuRNK|I%gB^ZvsJ^jSeUp5b;p&thG`6|!}8#>FE+qTTi(e%Jy{ce4Sj z+*n5^ub$TTUi{YtY*p|h^O){J9U&K6E7g4lq?D)_hUc+pM zcvtL;sro6syE1c_Qc>x>oZ(XK1;buXP|{y<+T=4=FN1dafzzqV4z5|mKFh2hL1D{2 zN`JA&f5~aQ>=M29^W?c1ZP!j7-JMwN`e4e(gj=< zYT7I9pRBVlmAxHxW$o{*k3LVPo6O7$mlhBXe&h#FfKexg|K)}f!lN7_CX2eUW5`J(pg zbA0{TS9rssGpXk#Z}Fr@z6UUUX2{tMlgtwW z=boTlVZGWv&%*w4ZORshU;R4!8`n%w{_)_;8JlAVrsUC!W>!`$`(1c7^35CNwd+Jj z&si6Gzg^|EX3gWLdVLy}w>LFUbcF9U40nD_XKbMU`g!2`MNW}G zY8x|rO4F1m+|laEsy@D7SCw32Bo^*mMq|cYZ(~p!#%CUL{DJRuzBJSShjGDMXSW~g zR;Q``xO`)d*XIv;B?o`~+*}IfI?Xgd^M~V#J917$3|r}Rpi_7K z@jq5uPqMW~@!l|AWxpR&6Y^!5{&w=r*7Ov|%m$-c5ZPcY*i#amYVAidYZw?+Ft8>pK^jVu*yTzw-f!@!4 z?`>jl7$112W6*hHVD03m&L=lb=9_P#d|RNLY(jtUVRc9}X1$A(X{`zE3f_8N>)f9B z(+6wKuCrTCZ3$TID7<7n`_wF|!}>3kj7bH*%+D`%`w+~w9R0C4NVd-^$!+t}!`BAv zKjCIU`!)3JxMA6s9((9j{N}#)^f^J@sS(ZeS#=?*KYRH8kNN}m@^`JO(r&t4zH-*U z4Yt`OyS5ps?}$2wr&&gCo9=RnS^DcpwbsSEcQ>YP?z7IzdV~8K#>{H+v-K;R;ae(K z)&z$F4e_3V+WlrtGCa99fuf#h61Mt}pw{!nn#To~m&dHuiCX=$c=iF;Vd}?>?p&Mh zy4GrOhrzr1q!441A%X8~`|gQ~KD_Sa6BDn@r(TWDn{LKW-r%+>KE+O!8GX)agr(!i zNahOGt?yRX8ZM8!GnqW;%JCdt!u!Cj1*+pu#$*__vubA8v&#Z5ZX0ZQyD*P^;A*h- z!yylJ9rp$I@u%o7Q;&BUXky*A+PcT?uHCz6 zRMocI=aO^6n{8o@=kA{kZ~ZhU&wc&xw_e@2=lhZ915Y+PWtW{3m}IwU zp3kG$UQx@6BwtwYd+EwQS8H|uEX~|F?)QfYRbJbh78q`by;XEC>yL|@`Umd)p)VuV zpPv5wVA08MziJPD_~AR=V8GL?%*jvvALKX1ABy}$$!_a>&_92EahqxV%_{Ga*mQE8 z^oFKrN52grb)muz_3zqmQf?0-|G0L$y=(+&&=MDsd3|4`{?+u3(m80 zH3skfQAf-ARiAOB(AxBmlb+tY;Gw&$Jfe^OQQbY|wx;SV&HYcdNvAj`dk!rxxO*;W z%kKkOj?G&lWGlx}O+R;I4eyT`Ao>W5+ExKV|C8#Tz}*x-PMg2a<^oKvDACVotI{e zOv%LqW4_e2d@?;_J*&}lW#g_1!8Gq8r-@T@i=39dI*@I%u4(w~70nrf-MX`Cwa32j zI9`%P;+OZ4T9wc@d_45|jD==gh4#?aJg+P3Rc;kYrWVzozB{eqqV}+2n~n=VRd3Md zJ2-f-rZNY-vdYYG*?9G|VE4^V1Ls+fibqByZ8PiKG2O>SrA8SNjA5Z7gjIEzUM1PEVrV zny#|8>P^eIF+RK#1|AW%)@-esGZzjwNb@g`Zr>X8V(aQy)zyW6c&8rF+*^+DMv2i* z-Q<+>>g=9FeQO^wD)&||!Y(gdy?4|Td|ZDA&d$E`6ADhO7Q9rm*lLT-9n(tIs_Ohz z`s7#aRp(u=3~pN*8FrT4Da+2!`z$Cpne+B$($$(i-z=2x3T=-yC#hz{%xsU5>I^A7 zuyyy)?4~iLCtqKzZOGoUr6D{%OXRG7*YL=I8O1U0owJ=iPK9s{1{6AZJb9q4b!&o$ zH4C>KSa_Z!Yo6XOD}%9R#YcnNEepBMyR|&7EH1br^XMapn>op_bM^FAw~iQ-SE&o1 zv13n29xv0%f9ZW6zkBe4+TbV4UB>u@yjgm7PmJ=}ej(cyFOAQiZ!~Vt;y3)lnrpka z)$I55SsfFnza?x{*-s~(9Rp9s?|Ib5GxyipJ8*flR)J38;O4^E$0mEQA&=8TjP0jX z`?rVcTYZ>(Y-FwYtBtyysbSIcoC%y4Dp?F2&5viR++`j4Lz?qXUm;T3nC;gt-JP?%D#&qQOyE9Hq&zfha6JI*|JzjIul6~L!{QD(E zB$`)8NgK7cN~4~AZC3lDyDq=Vr(Ios^P}1R=;OiJp^09+v&lAtoXtcD<8vn+!tKkS z99}=?&ReNxLG7?K<(qG>RoV7`G$-HtrQ^!m8CBDEdAoXAcbE-vt=PEKQBS0{>8QoR zL*xzHV%7$|DK2v#qyP2*cT&o=Yp?S!MWvY0UT))f@=ex{J#cD$JB6mx&Pv=XxNb6Q zUsG*|O00t1Fkx5uZ9bB;Hb5zIoh08(M|M z(4hs=D0@#&(e8=4Sv%H*ria#NNcVY7Tio0carpg=K65n>Dfiz|WK(J5dhBKWDnZAF zCxaR&SwEPGSGcj?>)BOi-jAOf+FPAlM5S-GTb!(|;@3BS| z?;WrBJ8r+W{^c4s!?tA>brNI4JDZikqYZbK+fFSXe$DSrlHD-_gCG0ePdI+s|M#t@ zRws@MoW{H^UU;=OUYzONR~B8D^2nb%$<$+xO>u|Te)9#_D97I0?QE{J)S^A}Y>zCx}6m*WM zXe_zcdC9_2JoQUI>7~vVTDD#ad)z145zU=P9bG-y#W%x_l(4u4?aPA>t!~?GoTj$o z<>dE$yhpFrxMGwPQ2p`p+Ts(2TW>e}4)It!IC?|MOLl8P%LDx-&!2v}=hAmT){lEs z+fdJH&l96G20I$st&xbR2gd5je(r3}nd%X4UQqL8ps~*P%SK13U(=vkLE>&SlM>Ghm^6 zNZN&%TefWMRQ+ksb6R#A$MZtlRaRb2-8omwq0{mV)vsly3T<@6m`T5@u6~?yJFVKJ zVB%!!h{nO9^iYGExp!s+s4hP#E2|xI;<%dqw3X8y9$j%f>(vdz#n09j-mO}5^K{{J z`}o4)3HmPA9((v5c3W?%Kj(Tx1J zF1vikD6ggSCvR!m`aO4F+UxOSXqQ^|^s63txH|as&L#Uh?LrL7SJwG@+6|uh?ZLKf z%|W|{wiqAYbaGY8@u#jnNz?7r4Ob0vE`Io%b~<|5;U_zi-;KU8{NCDgsewhi$5M8z z(>>M}XyBk_yZ@GPh(q?3*f|?S%l12+{eg%4HoN0_JU8GRmF!VDORyl^TD^}TV;TF^ z=iecH+;_pGSAN4S98Od3CMjuk-Uo-%AgTyB2*u-|s4S+SK2r2RfRj zG`!m0xytI}#s&|uQ;A)H)tSc6Ia?d@K1OWY;o1=}Kc?X2q8B#}pBW_X;y$*eEPa1@ zzS`HNht-7BtLW;tw}yH6%-E(LmwjOP$1JwPc-33%rSrLu`b9o+ouQNC_bX5*XL>`8 zahBalM_N|e=gNITA;pdLfR|qcUU%dOjiATJR-AZd&S8Vzk|7k>#wLz zyedm~??3EC?e(7}_YXhze{^EO*WXIzOMb1lUg{k=r95Y5yk};yhN)<&^qlSFX4;0B zg5q6gCxpaL>DO=2^D#rUTVv;aWckGmd9Z~1dhu4^)^gX2%N-+@1-%pH>JI(t{$ce~ z#-&x~#ZC4D8s8p!H zPR~7MX__u>6@5SC`BUeSkMLoG1z-JU?D4%mEho>=w$s-rCl&}6nfGmCx_C{{eEhau z^ori3Uw?eb9FxbXlP|9sd#m7NCPzssHP60l?An~koA1}J;P}L4fyR%#VsfSWW+@{L zIvb{+`nusjiFmeWamT6?L8DCbhFlqD{@SEwqGs5UoZ7dKgriTmX&O8(-d*qBcks9& z-*?t@lGx z^NwF`ANr%FY0MtI@8#UR7^}3s^5Oo1cd0Y#rwpxo7A8Lg-qJO@_OWropovFo#?U`53-B)sm57eqpB&_vW)`b8fM)n5@5y=!yUpzV zl*tLKozHU}S>ic*y9$b!mK7s1bML+_oj)pjt`2=_?VXkstNiaK;_sE=U;likrc!j? zEV^wFFk$ScC;c}hUI-g*=ij{CY%rs5C7fuw`YgAJ&V}3 zbU*?B+pw_AxL4sJZfbLbLz3$)AHKV%v-I>_Pr(tFv$wpjaSfQWURYXUd!`pzoM}(a zk)4^U&Lw@h^ErN`wAs$W^kHk(?VYn)vs+&snUrs4F=H0Ij%h95IppXbN5U-Z~H zk{h4zGd(aSFr689H+gwTu5(=TjzmX&7hA!W{(_fFB58YXuEfc6ihr$DCWjT58!jEb zllNNJFpA@KIUb{*eWHGO^O zmrc>%8`VioF~!f>rv^5uc~mxU%H4MD(C3hA(Zaa46-&;EL~`2VK3)wi2vuq_>{j(9*ed(faR7YwyN97j1tu#W2zBYC``#H>esT zX{o8dP20>?G)(yv61a47%#(e_{X+I;SI1P^8%THP*^jt8Fd$aFu3)iLY<)e-{QIj1 z#X&{u*Lf_zPfy$D!lB;C8e4cNR6v*U-KExaIG@Xmc>2rd6veR3bCv~WtF8=ux^*^x!T8$W(E zJQBz|y5lyvQ?0RdibK-9tLN|U^KJWyZ!LALE{&+Yb^Pw*S6b^Ywd~6{)$qd6!dbA| zTW9_KO0Y82zpS-E>zB3n{Nr|?k8I6L^Bi3N&gFim z*1#vJOSQ(X+O^>*05v<^HZ?uJT;=Wxicva^tO&*T>W!ef~B2+T?@J{|IkPJKV~9-`~Byd=j;N zee;R7aD&nIyUM)EJgxVf=$Jk8{MwDHnUNJGtG`4~wVE5=kvDHw)6)xHdY2zgUaUV@ zeZXCbXVtphPAdj(asJgHnD#D;>wf!#L@Uz9cGQo}h2>knzDlm!`ZPRnQeB_yz>M_d zd($+w?(lzKvh2;c)0<`}du#jS}z8GMjnv zP3X*&FBX5)^up$D7OXf_@Fr&d+U0MX(!M61Si9%znj7WwS~6|RF4TP8Tb|bPV)^JN zNgGzowqLtq|H?tp9HXPNHx|b9ubb9tmM%F`)V6>-;m3mOvx8CQK{Mh${ro(Sr?Tw3e$LB=uvf`zRkRjVuHB?MplnG%QU1FltQ*po6K~@B z*A0W&Z5_kfUq3f74Hg-_79{6Uv>MG9JXdKqYH3X)d$cci8-`mpIc8{ne?8)N02WB6$JICxi*;3tcYqy)`ip|H$&P^U+`Bn3Se$(?CUqTwIt`r&U_?}_s zdn!z`(@y-;ApJy$*k(%Yr4J`3YsLi3G3*@envipPd1sEZQv7zG-}yz=KjvkB&A7GR zMECsl@fT#jj9PW*i%)xS?tM!N7-|?#IeQ~&-;FoB54d_Azu2_t9&h+M`uC}P;2&x|mOW zkwWg=u_f=StZ!B3hwsDp`p+B5o%21Wg_*@Tr}_Hh8LE1Jqx2Sa^Cbec`j_4k4@=5( zmnT-!mkcT>-Xb`yte$3ggG_3Q_?8E$6>-J<4+w%*WlIKIv`YR&9hQAN%<#dDsyN1nEMV7zYG@OypNbz02R zSp4I~mq*(iUwz4M8o9D$onvr~z*>8;V{5G2V#l-Ud6bNzgVPydi=5vy7`L#q?4l;F zG1g4gdoo++;?kR0AEGqwyfd0H;z>aK&nKBRextUY_*Rl}BHXxq9XXP1Up;)OSJ|b| z2<1yFrm{*0QKxpq*EDzJ-kQB&En`H@`3emq=M2Aa8*S}c!_N6SwY2nk3D%Z3*)@(g zbhX;ES_-!)*WSz-GIr>Ic@uwJHOtzYt>u}rKf6Gwqd@t1_>ZM!`J}--qqaR8Pp&FE z__->%x=1b1>hwDIoijhRPqv$Jn#XF+duVsGu=I1`*s-!NFW4vc2`1)MO^fG_c=G9( z*DlRGM&yAp_`7M3K9xO6Z}FXaeDl&bTZVZU4_|K7FH6!Pb#jdV<|eXuwM}nqSyb-! z)bho8UyiQJ+{M8PU!SdJj%`&sO`(K& zZ>6pqpjNQ^{;<|3*}NlCqk`8hL&Yv}olP1qTE8CHhEv6|H+r*G+nTx0mK>}cnAZ1z zBX)a6`M{DjZQ=7yOg+13^+JZzgVOU~TVo$h{xfWO!O*k9);5>n`|rMsqm9Ob=eA@l zsWQCLQFKoj@sPH2!)z~dmd5g3+nvUWI%}r>%pWJv&}wO0z&T%iXSPGd*l?}cvl|;1 zELw12Prc#zg}1JHHWu!bH3eMN@N8RtQuoE+g7TB$%+7n$-@A7#pWm@UwW*F^YK2*w)5jY z8*B*pa{h2XE#+M)oh8x5$@goA4`R$OKltVN?v)cCe4W`cw^MbIL#8(4Me+5e{Z_hl zSXyN>bcPE?(AI^FY7G!#_g9-Nj>Cr}?NMV}O(oN|ozu&os2MGs5{7G*+djNqYoD^& z_srZJuL6sQ%liyWx%bW4?sb2@-k(8f(RPNf^a3AL#_3&bm_6bwdNJYvir}dW^aB~Hrms#fz|ReFT7biw&~;Ut4d23HpW@{`!Xj!oT8mjZrCO~ zH{$J38habdeC4zVF)gWLyI{buB^oPlx7Na$-|=ZcfNoaiqBgT8t_BGWJ{D z%~2-;X;pN=HAB`h(3m zmCyKmI50=khcsbJ!@(t|lb3kxoANV$FJo-SK)h*rqIz4_px{o{`7>j#j(&-aW^6Y& ze`=x9yrdcZEncS^cdE`=JZhZN;?(muOvf^v3*Fa`dO2K_IrOPU>p-=wmToW8hFiKF zHO|Og`pW6BIg71vHRbTZohJ84HAf7`RDD|GbU(0a@O;9~8DUog|>FyTTNJ)1JNVn46 z9nvA)-5@3S-wK|4j#oYBeE)mD@5bSIHqTnKX3d)U&2Qd$XXc%EBBsgijGo8Ff4@V}0IJ zAw?lIZre^~5lSgg5x-?%#*aG^Ck5|r+b0Ddf;Ts>O~$!F@RDeQd*mrBZ@P*HI&8cL zrccBWVgmt-aE=z)iqyRrqd`G+gGc7QkI{;9j=Lp1$oAVRwHYbOj##Z5w`HoAG>a=M zZt3-^g=n-3HX8KCn(OD~>dVuCjg5pP%*6kdgM;E2((O5(+i_uuU~I zUayJ!?1-F8Yh377E$pEl83@E=p{UM+CtUerDSKwpp`gW8G9679VQTb+EGWV!hw&Q` zWnD;%fu>bBM+5iGnUhO-n>3w$@ZHXu4usawCPztG@Tr3fLZ9JNhZ1$I>mY0j7MeLa zjG{5lZmqIOfk$FYS0p<>J?HL1f$?yx`Z!RJVY!=DrE?RlXwn(7yxMAg6U~YZ-&02P zuyHpz*zidPm6Q4sk*rjXzK4j8M6f|q+;|G_YbO)T_B6&RxpESt_x_w*DSFrs-J4wO zN-V89muug!TAIq~KEEd_BksB$R*6lr5tofkvVy(?7c*>~5{#|1ymS-&fg3wilwF3d zBe%{gJ1Y!L4BI5+ z=}pPTCe|CC%qBJR%bwsS_0O3z>Ffw_Zqs5rHqEb`P=q;j7Q*yja{wZ3?G*<#S1}vrG-E3}wSrZU2vjoS#Kc6zA3=u_x z^cg2rP@=wVc^@l=!orJ0{2mMbFg7<3Zodr1z36}{!oo|Wn8-lAe35(wO>m4MP%12A|Jw;0ca)ZH494D+-rb&MXwfG6N2 z#3j|hgHg3;2!xx?p`Ck$s67l?c+?E$9H+e_9PePe> zA(v^Ot)-8kYJPu#u}X&>*||iy`$BUb9drW&Q)~BK(pih<^1IHA&vyv{P9htxmyPDz z@sK>r_Obb0xFd-ls$1S$*kO4*?7j<&Yg*4C%f`q*ak~@>g@!4YcQS5v>IL+CMS3ZDBBg(#g zd6A({CzuN%lf-nsPGW?cXRzT-i;q7@o$XFSh44oh7%)Y}gFhupR_{sh*=Ob@$Vc+L z-kN;{#-zVvsAxxq8SAZtP0${YSS^$!Uc8zcWdn;=t-9ACARyo>v$3H7>nNyd9bcgx zq=#EGR+fj*wDXOjNTWxgOOP-%lJN!@%@8>jIG_;Mt#j!*_cL5-CqUG>~|h8NwY#W_z^5~?g+Q=RxsnOmQ?39n!)0n zG!mH?Cd(^6)^W|{F7h-)oofpGtGCq;l#@9Ur_hlCrux>e^cw zhTH#GW?SFE3&e*Sovi58Y{-XUb~{FB_YTlLj@4#hhr9pu`3-^TRX3k`>BB3ap2~aL|Ot{>LZ8ymkcg z>pO&c20{thr!eBxIoi@C_N8JCX{wv?4pi;bIIyV_$?_TSpB_fLI5xw`9vbm*D8l7b zV=yS5zjS`v5At4qN=E%*>y}T}Cm?e90nQ4ESG9eF3L;m8R=a1}{k&jocLK(DZuHWY zPfcl6d&#GhR)q_#eN@f7#}^3JNR1*5kI>1eQN=}h1n{iYp-DFQ61+dqurE))3g1w( zSk8JtoXIGgjnL~VXX;slLm`Fi7f%8+#D*)R;Gk2sAOUT%f>S2$UrZyKyV$(=bXVN8 z`#gD&vcs`YrVssj0BfxgRfu$OvYJ)KRF3UhQ#ZsmkH%)nm!^Vtv;|2NNN*kcLQ@*6 z3>AS0BZ(p`UmwLIXG;#0o--Tg8}*`mkj`Ad#3u6nh*c(>E8V$NqkUOW;|Z6A@QhC8 z$~`GH6ZMnz7$uCO`xr8A*STg`ak6t$4ajx@_BB!(%I9|X$xls*FZu?te7z1YV^Mbl6O*pr z*u86RN9Dmvju^GyW}+mR2#IISsdeIBYdy(zGV%UlI@J3_Mux*e zk#ETW)Fh_M=0atQvcV)lJ=*?wlCYqMBwP&)1#Rdc*2>N|8Gh4!(ito9CxSjZXI;s( zeJ#=6Ar4aZVIIn`J}Gx5;e76yGe=LFW{qy1G<%zM4$xpZhoGjLuZ7IAqv!@t!{3D# zi63u!QdtaHAj(J2pEv4liFDT2MiXh>Yl_9Nn5Zt|_3UZjP7B$V2ifW}Qb1%7KaV}% zf=k0#3>_#EZO(=@-CMvj&`<3KV>)XKTaJQ=Y?dE^xtwVn{}!{?8YbSBw_Ywj8!gCZ z(h3D6>~@gC1)Bmze2(IsJDN2NLP0JC-=BLmm#A6mL+c&CWLEifj1OfT9;JMm%jiDd z7L`+Q)-oNKdRX`Y>*np26ttVF@18o}wMwZFpWFbn(SAeVFHex=a$MCBsybU!2hSa3YjVzx{MY&2la-jlNH8ktu zv4`6hcon?LsOU5aJEIM+?<$k+eqhEi9a4OJyOdW6y#(g{T}PSOnFu)S5DuL{v|im0 zh>8ktg*l%OvO6-hnHRJ{gDkZJ(IW0Uf*+S|NO^iFLmsBK1C1B7sYRZRzJN?;fVKt& z=SV!hy$KHMdaXiHI*71>fri%k*OY-7mpjW(TP{ph`P7t$c~D<*cAl3#$-0t zMQQ@$VyHUK--pffvBwy3cz6#i%fe2M7dPabUM!& zvnkXU#<`)bg`|xegD*4T5Q?#zylRb#<~0|?4+fx$I?I9P)ERMYOkta2k8?<#kuj}# z4~LW78I>^OG505^hErwB(hrmNk3wo5au;7lFJ(3)3>W8rRP$Ue)oGA8+~Yuka#5J= zfIF}25jj{nB~!4Q%BzyFpK4(y(7bJbNw%BKs}fP243o9h;2gi{T^Xn_i>)e>hL)Y; z#M&%=c%z-ce)Eyg`!;86JV0=yV84HKM1?+vCM)0#W)?V1kvZE&Th$}OR#~dkhEqhf zy>SuOxed>Ruz+R>v{IVzZn2iwp_8^KaDA5amBp>apt&^!gn5A(F_d`$ya>sbLWHxr zgWJ!MV+70tZm6jw7ZzeL-fyt$giI&gYh%`-P=1*Pr9O4*xJtVjSh`{-S<>U5UO~%> zK9qUz#eiHRpv^0eu-_elU7L>iJb{4WA(_4e2MLNL2XtY_cv*l*Uib$jG4eV2B8IdM zJs>r8Dlxi=lJFyb%_7o$ibj1`=+S$_Zu^27Z7T)$LUt-eb4xy`(t@y?51RcbUxtmV zXnI0>Nzi#92~pi*JW3$;I{*w6g}aS!W&>Nn%!9G<5p1GwN0Gz~b(m?zXc)5&M&e{Z z=@ylfsODx^^v?Hr-S|z=JDK~R`@OoRxfgT2#9|k--#bl|CK8^6@ouOECK5?0ZfPQU z|9M)XVzLvw$Fn^PV2Vp`^9_Zf!;4xBuc~Q0{z!HehXM){GosC`T@-yR7xJ?W5vC3@ zhai4+(guAH%QQ^WTuOoReRNII|+LmxI4jhfGH(^xsHTK;?cj9d#&LMHi zXX0~0q((RC(1-Dk4>PJ$3|)w9-Y=sRctroOq5?_VOiX!3B)2KjozR9s5mrG=&P97% z@2yD8h<0{y6$NKky)lJom9lZoVuaI5MSj|1>@1qS1Pe7Q%(07V2K&v&E-Pah&-ZyM zCIz9EnPrIs?q-3<2nZhJiBz;VV_{xv4dz|2TB4bMlXR!_8e%#0+oJd6605W#>LMN> zR%O189u-_K5p&9yv2TfOQ0|V3kE6Nt=NQ-IagE(bHVn!)d`xhsLD(#n$2Tr7$RXA& zXE@Oc^rX2e!dEZ%fJ~_d8NQR%)VweIo@nVnott{as!UTSF?CV~5oJG|NK}lV`YN<` zQQsy29jioKFaBhW42x<_-dJ~5Hf6n9lzI!?Mi=v{`LWw-Cx-ws%#)DFL1K>pLB^R5oXFkeXz}v1Zc{1A1|;Tjv(@&&lqx2Q@}b=K@Sh&lCD)QnBPBy8C#B?;}RPs+&wW^ks9 zkdHOxrT|lZyofc?0DI*U(biMCbbpAcj}?l!Sv{GhM_~+4qWXP=N2k1&+KU$or98J2 zm?K}{+Dhfn$6o(1=-Au4KwH5`801^CrE=}uucuTmU*62NbnHcG&o=nE*Ay?*vi;En z^&ID@8RffxtalHeC%B3fS)4p?I48F%*2xP@%4Rz{>V;%GbcMR-MAizcjr%1xE_TB98jgVyU-b*6f@kB6Sl&6O-)w^PK5ohQyvA>0T_)bvWocq`EGxY$+{#bRcP?2Uo zT@?O9Q3ul-@8ZMRS8gm==QxiMQ|ML4Ap=mC?%W1%Jt@Vo?3gR)D;G&I$cbZ%tRH=U z$idjeO|+@E5PY19*Wy-2S$CJg;nZ3@T8ueeJzt-$e3nDg8^861psi7As+gGeu~d3n zP%?=nr-)ro7>aO%b!ua9UyGPzqDsG-5}0=8!;wnsCo+oG`XGD*5%LX~72EJ8X6eWS z{A<$z)*$g(VYOPuhNR|j`Pb+XTSrs~uNV<9r$J4uCQ^(fvuhZU=Dd1x*Va?8y}-5>YqCqS_qB!rnT#tcM1;GecJruj1-PJf=9AL z7e16L(aw;GGJ5`yI(cInFGepXT)E9HewTP$i;6&z7;KHGHM}4f%cVxV8#r!D-j7Hg zh<3))c1Av5W{j@PI<*G9X1rrvV%}uxg-D^zh>eID$RW~waqHUbxfQhpPd{=R2N&7R z^w+9s<^nw(ez@pjY?3)`;?&uevBT&n^qmo*EwmFVq|>oZ{kW(hWT(t=BGxf}u;f|o zE{!}sopIh!p%}?%7#EbBW1`2Zir4h~h_91zOKwm?y`yeUS)yC$7Vzl9Ji(wBXv+ODgrPx--l}1Ey^lu;vp!>a|KMiOAbBM6jBs^Y@N(t%l+(pDh$iiFmMx)x|v&iKDTzkSZ31Sz-?M0;p zy{fBp2%1?eN{36h%7bR(&D?;jHdS~nAueQ=I^yP3nN>lZ!PHDRlo|w?E})dU9ZD}H z@)RFQPEMn;$jg?uZ7A48{1fNYw6Xr|*!<)H05!iAMk8-59G$*9Tkl|u^B9={z>dMV zaG2S#VpQZU08|RM(R)l9CnPFDnWH8|X8s-=vxnZC#tKWlt%5^=HL-zUGq~v7VY!9} zHv}!grzERbmb>djUXFuHOkQjYvV{Y9OJ;;`*t*eCj#cgAf?eXA!lZ9VWh$dAap1GH zKuP)$Cz`rBCYAIk&uqc6z8_TYy&;!#D%y>`3-1#^HCT3iUG4cK2#4OM3U$1rI)gs7 zn^=|ILNfoA)}yK*E6ZUJ>%Q;?b`mc5oK&a8TB|0L4!ls48323RB+KxC*s3ZkZ>maj zV|~o%SzA6fsuB$?lUCn()MPWs7Oq&a90OT{|0hY;?NtY*rhudI;PL54l7CJ1}Rpljh@_otZuFpjD!|sA(lds3k5yb zVhM-nJrP98!-ID$>!nB#Tq&((6E+pv(~qg^Y#er^6K20?Ezm|Yf;c&y9`|ls0xr<3 zP1u4>xv9Po9!298$$i$%x%5JxCrQ155#^bqsE?$i0(dao20Hq3?atmPsa~fD^^_=n zB&WHN>$6C89w5d}PlPtzt(J-HF)v4fimn7kGR7jYjs?>s?OWJ7$?Ma9BC)&9cwu&dHS zj4hJItW-6o;Pp{@JOWKiU-7Ab+Q@3jd9g%qt8tchW8iSCs0(Lbun?tER!Ww<2)4B0 zh30XiUdO{UYRCBDM{P;tH(I!PUl0axwqugB^6Ty~x>ymd2+>BtPORq9ogry3t+23^ zOq03+R(Cd8vxG$zWSy}I z+QjM1b2>5)@QLMSQ8m7jHVES>1NPI^glm{kPxdUMM5Y*g7MTicL-n>Rvd9H%UD>U2 z-|6j32zG4eWTxnG?T)Io>4N1WoVO!f-{~w_ zNBc}{b+6c33Axt#QO6jOc4tmmT5p$SEANi8%E-%CEw5cLQsVBDTR+-Xt?pHZ>{mv< zS@%G+k{{G~l*a_#n<%Wb?b=F)1u-2p8-6UVyt!FxO5y3~ZWfF0mvWRGqii&3MT=hn zW6`BAxlQfH8YifNQ6KfE348$ zGJY#F)X&>2n9Lw8q^)oh!Ob+zvK+_0rdD)kJNM4C?RtyEU~_ZE;K8^G&i&{Tayi=c zjuFn?)frNn>`p`fDLcE6jG7I37A`BQ6dKpYU1|d^juKE z6Qj2!3$E`@j%p}Te^gE)E<`?KS2Cr@zpdhP`rzh8r6uQuu${(Bc_etN1XswpnF1feR?MbWqpRlqM=AJVZy*IgQgTn!|NU2;Z%@(=eM`P76pVK5+*r$7E zH(zm}>fsBU_E6t`?(M+U7C~3mVp^h65oVg>vkxoV$l?m>omH64DN z*^lOZ!A3P}#wg>w7jN&n%##^tH4WdX>wku1ktpvYmdSgNvm@MlA4oP>DSJ#>qTDAL zVFJfwX;td3&XPU($aNH^r&@sTNJvbyS|fif%!Mr`ZBw+g%I36{=T={HP{7=EG|B-W zorHqnt8y{trTVF-GAHiSZs`kQymr^&c@$sbN-)yhzgATUr)}%X4T!P2ht@f^mWgfK-Tsx0IAB8R|Sa%N=0)?MY z^@U#V4XrPuREyU81Xpv86ZRp}M@VHSEtELud12osuS_<*opK1L&x*ROaHMDue$5O% z#f$DUk{*XA80ztdHEmrE>P6iS>Ng7$hSZ?v@Y59M_j@NYhn=q7u%abMBzj8va$&zJ z*hx*FZBdPz(2nB02sa^<41VQIVCCzeGKc};J7BGI{T&!}p$vW=hJ=>3L7ZANF|EuJ z!=AP4Q{0n^&cxm{79831U;@VQhlkO^8Smn5=mwghVK-v3v2)v`vf^IL`mzaydKSML z;hxe<7FpS9r{{g02(&0tvkOn<(3Kq?>$MU8gQUKkS>R=Nbia`46{u* z?P#xp{}^_J#`bt9E}=Q&j%bQ(wnN05EL|+Y+zh!rBW$DVZO<(DuDguZcRj0@Je$uH z`!ri~oW(iG{R;VJY}9OwUR=99baAP8TB&#^83CFYu-e$+zLjaL+pVZ67LUg-+)H*INpjXvs?WRMU1=g+us)U2U$s63 zue31YfrUW2w>~8Sd4?d0B2=H}*qYJfa@`o|-EpSs1@^$A=@?0dX*0`E(7ka7{`SRw zCBK@Nog62n0t+o-F4c z(m=4h5yeN}r2@5CykVNEMh9|h1x8ZqEZKXlPvr4cg>DPrYZlY_%_0lkcyCuz?>&n= zZda4!GwUyN!vy9;D2g$O)OMRZ`J`_V+F)N@Gv-qWxg08D2A<@O?(k|2SYl+VI@0|x zlvmOmK)>}$sBGh(u>gUAJ6wpz1T_JdAf<6 z`{4Cr?I~n45-cuqsapUqP7=f5wtVPF9q7$wWD|U(Cc5VMJ3r&vM!RjC>+3Ikr-tq* z8|TWd^Rk*88)qd+zFyR|tw+ywiZNXrK*@FDuz?DrdL?mFZWkoa;1@o1l3tOL{Zh2T z;QFJymUbH9&e|BA_lN2>?(@X39~E!dgjUn?RlQnlK2t>4bzuo`0PeaBk4HI084#qU zq?GFUuDbp2K%2S^-yVM_>_Jti z14SZ^*gK^f-V)aI1DJo$g*MAGvn1r#V!+=>w~X%fN38_i;!?EO;Mt^+BWW_WQZ+XSc_zXbT;E zu@Yj6OvPeFF3m;^?M}Zmf##7zV>L|q7G2KHO9KvNntK(pj`5z1;`b#@!}cC z6)r)_Ql&6@9-3Nj)u?E&soG$-6Px4Jy*pyCU29guoIyDf;m^8)kOMb`4fn-{pLH{I zf&EGFOpcE#H_TMIiSbNWILU?a_jaM^E4hWPa<%3IzFuxxUDdu3UCt2ypC2I zmrDL%QFUg?AGnQ_t1CT)8J(ctpFoxxe<~q95gJ`4dxYzxhe2}UzGq8GEDoQ>mySeH zt*S|!SETPQ7iEXr=Wvhsrci>Od%hSLj!giep_bG7DT&HL5PlRQr4z^UqW{1Wft2AU zA!3<7k`$c`z!`r}93JYN^ZNp>-)#AHaipmYICMRYURzM(h ze@~5@(MG#Mih#QlgG$WQAiY_N8w+~31VD-pZgcQuKiMEFLiIVeP2AKx+saB|tQK_D!JclMjqOOS^i!ZKT zS9K3!TU|JGI*Z*ts@C10YZgT*EN8BGzC0&5=UA!6mNR5v=)U3GgXRU})y$-3^`Mnl z=D9YviH(n+Fo7T6RG>V&)BC1|Fvcy9s;!<`j=ZD!Z~=^`vnU3ythUTB_5$WLd>z&D z3%eaiT8LN8A{l1;;_os-Bgfb2fE_CFy=?xb9o zh_B6*EjBfj-89ZL_>}l?E8sK*0lxTj6$9h2mHbVD8!PlwG^=jk2^6 zmau7-GZNKTq%tl>6C@-^K;Z`RwifhO?zgwYSD!o3%0TACYzm+A;$9fqWj<`yZhzKz zZ5(=}GI4FPt47-yJKi==k6l4WneQ5QOSQ?TUC3rBabo=5|J zLubY##_i=X7W}#EM&{en$pBLRV?BzP=96-B9F83l%?IbSNwQWwSZt_qgpZcH=O5mH zY_b;YPWI$u)OJ@OUX5NRGqHa`s5+#O@M7OSz+3V~kUZWYAB#Z$5CPVWiM%TBN^V|m zHheA=&yB=Uav7gQi(v0)UkQD=kFqn%_#`=73Cu)}Psin3N^}bk2f6B@-~<)hw2vPK=ca$0 zWsv;%l6dRPzT+B@{J@eu3I3uUjYC=_VZDwc(KuMu%JN(qqsqgKL> z0iW0=G%fXIsBhJnx^t=wB<@5E+8M`b0ZHY8G#*ul!+zlBHzZZ2M>b8Eb+m;>n0ob; zZ7_%+C3Po8&>+rKQ1KX*}055IeKa)!ZBpX@f2EE?zJ!f|Vv8 zpQRPj2v=S#ATxJ&=jan7vJ6{?1W+$dKO4TGHiaQI6MK@KYqnrm0WrtaH?lC;0ZB%6 zx%>Ad2+G^;qS?%JQ@B42+^F&SaN;TFZUAh9sz^y$%irl59man2^vy)qUL*@^an`wF z`aA5?vPqL^QErqDNzB7_xV!SfeUm=x3S9Tz*g2@M;fIt#o%@8*I0ebGq2j~(I@53} zHZ}CZMNj3X68*U{VRp&qZ0l#m`!s9r6~^ zj;VLXRwoPlkyB#a@OtNe(%J%BnATVv;i!M)K}hAj2V&Jl{#~t#Amj zEAEG7U$qXDq&3H>1kvX1JDSlZP%Ij5Gko6A7$^*$IElL(JPopOQR{FBokQC4%}X^G`96nQ`5CYYzt1$zb{{sFwO3ZNp7+r((m!95!xnh52Mv ztJbk2J!3!t^}~EZUl)dpCcqe#W<_p05LQeJ1U%C@%~Tdp-FO=-a@e;#0*!KdbWM1Y z9QT;BQNvKIfOz4-GYb)k1@nXi=TLA^8b49SHqT4sy6~*)tNx2DnTA6xy&-w_+$ucm zn&@%SDlNpBsWeaf8MBx$TFG28Q>T~js!Af`YCI&tqm!7vrKKJhCO)RDk)>?BW`%nC zZu6X_xRm$A<)Z>dDwye!^H_YekpvVSLglz-EXN-!9f4E@Qx|S9^GHpXY&B1gUp`$-_A$z6 zvBAcBG8^EDAWYr*(99vQ8B{&EGi$Ih3v|T7P87~c5~fJ%3=)?Mxh0(4C!BtBJx!^x zH7lu=B1yaqRiWYqlxr2Ps}qKLqzShoGAE$mV%j~s@3YfTK|6j!h&yfb&rUSab&T}w z^exo2^mMcgbu83v7_1;MpllIz>^?i_v;6Fr58~|hvkSdnySu%N1Y@bM3wZ*kZ}LpX z;&V)h3sQrtN5&dvmmx4;9I9ICXn%fy^wrtvWh__?D^ugoDOj68Tn%2m32{hlVEc=E zUntw}MS{HW+4bmWzq-G;XN9tb`Tj?*85r1JI`F;x0-P1ZOR3H`x%+(k#Z&3elDW#^ z4?kl7`O>d&`f(wD>VXzg`mgSfzhC;#KARzBzjB@XV*5)~T|K;VxqW#D zf&I5AUf%tf^;d~pV*Rz!{^qgzFK8j&pnnSO59H3jG?V_m4Zxb3K^&TXmg0X8d|Fm$lM>`9VvC^xmIk>(%40V)VZl%*&#G1>zFR?}dF=j{cd(ewpZZ6_}sV@A9=j zEU^D^D#ukL_^MfaZ4-Z@>-ncs4c^4m!dT<8`g5iFea++-r~6ko|3ZE7_jvWau04TT9dTXiuvhA)Exe|_6+{!)fc|X-d^zvr=M``@T>C1= zuOk1)YW0`p`&!y7-hMamQq8(z@|S~Rehwt;Z&SI7{9gs+ZxOfz_j_UAi0P|Z_yYJh zC-GdN_yghb7k7U)tVjCw5k@};@@fR}wOL$6{x{_Azi-a3`mx`cl=$7j;UxfHEArPZ z>*@rnpA+F5A@<`Y{JrmdFYG5x{pujCpJxc}w~1aw{x@XiAFJQrmiC_t|JT#YevbcN zBKBt@_Uo~4KgaN!M)enmf6VJ|#KnI)R9D*iuTKp8IhFnrhsKux{kDhuqha6B>yn3; zl>m2jOydvmzncF0uNH?_(EN$c_wtSJO`Tk>r~TVZKz&1;%X0m2V(IG~@}EHJN(bff?B`!C&Gv`)h=(XB1z_gMZcp%zsP=aaoYBTFKu_(f`&p)=MP*Cdr^72Nz#q@hfAY z?`a6oriNFo|If&|{~@8i%_h`0+5D!d{3|UMLe^aVD5RH1RbQd{JL0QTj4}-=o)WP42ET@PBAo_q(&HUzQ}Uo0=Huo9L*2UVZzg+uHoAQ2Qz$zoVyp z(~>V=x|A3=$ZXx6pxX=u!V-Y5JF@YGnG~vE|^eF{ifWWsCR^8gqW$j9{pv zt!}7euW@BR@T2Ws-`a1uBTYzMXiSOHvs2Y?ztEzk?-4fF&00K5S{0AD~IpdJ(k z3I|1iB7un@b`S@M6T}620OAJm08fDzAZQRG2mrbcLIa_LFhE!!d=M&d54aCp1+D?t zL5ZLwz$Rb|umdOplmUtXsenvC8ZZx749o`>084pIKt{LW!&=b#LM z81FYUF|aY9J8427Fv-=`)mj9fNf0rDNL8@+Clg4-2!-8LPwzkiH5QL2l6=W{e7+~0 zP9=JU(g`$*H#wL>3?k(F5GYiFwG0qlJ}gJ=W<&reQxG6_%f z52b@#l?Zg25{VG*K_t-#R5}h&kbsuIyTQZ(P?0db@nE_EOf1odK%x`rk=HgdOh}=@ zO2M8Kgw#gDKUo3LaJ?~ePm)g%ftpXFds6B6AR;LcOY}jYf69XQU(dH+%g4&ep=Iv| zdq&`?gtY`3E{I5@djyfmfuWRX8i*P`I5db(^!5x2!h!gC_!8*e{$loY(E14UhBRgb zk|O{Zfr_GI#W4ZDX*d`LC}WF-K=WD9C>`iE2AYX`1`EB5GgAWc zyBJs|ZX{X>I>e!*gp+{dFg!SzBtr>~MhW3~FgTb5P7;QLOD3YRtV(Dcj|2{mVc-x- zSS)m!VGmTrprHsf2O5oo!Es0ohT#FnqC|0U7=wa9D*<_2j98!)9}wf#L~+3kU>FG? zlrWG`-3W~~LPrTTAf3a*<1#-M&VzH5#2KmKRE=?%-8dva2FE3VGlDVFSe0-%7!OVj zgF^~R;4m;8QV7GyUrU99lA7T#jBBh|dpQ(8OcJdGDa7z&k^DSB7UM1})ezg8@**B9&nPf)aoWGZ2CZB?K41MT~(E0vM{=LlNT2C^1Y9O3aAE z-X3QJ$Eot*BqVVdHNa*Jgzy?Ll54;i1Hc$3qHzE)Xb&`ixII!;k_WEFK!_l)2yPq{ zA;Cb10$eo!i6xa$5*QRjY27j!09ISpyc)S<9ht2R1lVgdfLc<@sI3?d91f=n$4T(u zFp@YJz*Fou-A4^*SuGK*1h#Aswv0n+@W3S*2yw7sKpklYLIU8X38=G886^#biJ=O!cjT>-S zq&89q#{?)WZHq+!J|GW{Lr7hqo`Mbxr3}cfhf+fBL@7cMia4`aU;sfV;mp#&P#G9r z^q>fpwHo>mC_)t+chCqPC_-&L4d9~wkKqWR!9ef>%yCLk#10NLIQU$G0WEI>yn%Pk zd1XN9fl8W;E})#DJrtqEfwTWD(jYfrR6xjX)WNAq0Qj#B3q}|Ka|S|=RSCg|&Rkk&*TgjgTGr7+X+sgZYtQDuvz{JG7X}Q_j&$m7 zAb?l|Q-Bb<8Hn-&gaU{YASQsg0OAG+EDpxOF&>Qb0K^Lr6dw@LweiPrm5eM7l+lYhmC~U;RwiGwwpgbxY zaj?8JK%i`D0I356@(0tkHsU|^1!Vwv8f>J4e2f8tnM8p2KxzTn1du*JU|EnC7zh7U z0n!BsOb2BGd4q9KZcTug0on$T20(Ctq&DK9ETGVkEAikj9AWzU9 zn2k7SkDoRHZ3fB*^5obE!SYPN@(Pq6)E~?<1PE*klo9-cv&6&~03i+_5T_jgtq2L2%d;)@Fcexd$M;cUNFqn^+JAT47p2MOdL|FQD%1WO|Sv0C+n0nh)s z2wf`%2Nx{sF>poZ$pltiTcfP4>DH<;uPw4XnSm_UjTP5gxnB=(Actjr0p`gJip3Wf z4E&;J8V2|;8m*e}-)VwPk@5l4Zc>l)hk;sn1(Cf2@%W#5!2<~dia!%rYoDSMuzIB_ z`Vc)yp1wq1MMttPJ=~K@P^9^j$#h^TE>8#pR!)kP_4flsVC_%)`GBW{deK6?6oZIf zKa&*Kq$f}n2oau;0I)$gAOaKz#z0{Hrl!dtdfsFboe)6}|C3i7um~}D?e%2?7*A+8 zYGdhZMWB)hK>=$TKtT|Htqj4kpxyo-(&U$v?0CFq5YdxHpsgGGZ5Z>V5HNj?NBSoGJvi~Ve2o{b2*M@jcs^8x{AV>ab zNB`&Ey*Ax}tKGk8=@Ydk065jM0-os!Y*_xy&_w+yG+=Mp8hzkzmj`SRTt+hyeE<>u zbF)MApCbdztZM@iARp7;j!?{+%fSAl*u?xPHotw>TX&uRT(|#oDS^2F=;GjhJ|OR} ziDP4q-~@Ui8TcYVCHi=J1rdJw@c+U?2U#V5s z-t>V^P9xC6*}?A)K6pB)FdzV$O7Qf-1231}p;Rh?vSwEq1H2!CI5{j1K}hYC-o--rd;=hsdG z`|nBtSw9neh`zpS)vU?h;Qoj;Kr8^60|f4W=mBK55!V62-|m~>fajlkB}zb?2_SH< z3*0{g>k1hFUj>2CW=&1-H4_#_Bdq~SLPHXfUn^6_S~uf6@iQhj)1H71_4^lSX!yT= zlUoDc$b#ex@aWoS_(>F!ut0k8rT>-T!2IdzCU?}lK_LPeVnA? zDO9pIfkq2w^QDr5fn+Knd=pR#i~xBA3b45m&Iu%VhSJIS^$h?}Ko%PCvC5ke_>|dwOxwOG9aR*vI5dX+GK0M^bh<(9!OkuC^akfgo zPJ7`aZj%BwoR=hxwa>DBqEX{srgNMEng_!4U*%YMqX$UIBoEBcrdmzTVWOXb&g zc-_sM2p{+l?}(EgXgkxM1iaZEOz8esJV&71j3E6Z%q0R;_2w5zhMl^p4vp`{o~l;v zw-kR7#2UW8-YV$?o8)-GAUf$p5%(wq>DBNsMN;Zci;|kj=79Mtrs#b}wfkQ3I+O43 zKXu6P{tBDNLThU01FcWm)jj4%*snXoLbZ#9X{%`0W%!WqFz<=v8zVFOgtTl9X(UEB z5Okt8XBFoRUKY4ypy#&?^KgFAyei$U$9*#?H#nT$`;Dn%Z;Z0~IoT9+w3hOgd%caz z7YCT0nDnb!JpA5`IAvEV$5ha8`7Ep0({!rnQI|1?9h@Du4dnQCV_t*T-=*$MPGhr} zSdR43%0kD4F0hV{3l%ivmyr|a$_kGpp4P0$T#4j}pWAdwfk2Y?_)zCICYh+UUHZUM zB8|JySy%c;aJbe-*9&HCRPLh+xf$56T{&=h^k|`_;Fa$?nJV%2y>R1b6Ls@OOj1iB zzfGF^e?JFn&@rxhUM`<~oKzCcEdE-)#_bPlFA6bXJ$_J=QOzj2O86PG}@Vqd$;IONl; zkxs3jSVQ<<%tN}}9Xk2YA5*E-u`cEGt$B34kqB+*D`Ub=g9^+6e0yiNSLxl;t3ljtZCX@g}mByc{jM zkjARY5O3Z4WAgUhr9!w=?U@qe#Bl8&xB4dDr0l@`2)URf|74n_7;e@FGfaP`+~!)i zx9KR`rw(&si)8w?V+H#?1g|~i-qOt!5!vs@b%OWG^7g~EH#Bz1OfUGzUm-(#<;NyBC= zC5-kHtJ{THvm_(Su4I-N+s9`zvwcz=*tr?9M1h}a@sjdN8_3vvYN9iL|DK&XmDf@# zUu9K}EmoZfCV!2tcQi=F)P=~JW3SfZTI>l(!?Q8HJkfBdm`J?8(K!AV>N2G8;R;(z z?&EV1OT(MZMmu6wn@5}Kw{rzFXF5h6e0b)&YHT!*w^X5X%%kO+QoF~_lTR|+XYN}g z++rRb?V~(;MBv^xBKf)V-Y%x}mq#)EFZLhH#_>*MRX7|>%RX!@(-c-CDM3*R44+*Z zDbLhG&b6Vxs9$qy_I(!;qH*wC#r>RTiGD$RI(`Ll`Nt$NZjrF)7}10?>_jD*4?NwqK3U@;&cS$&_RJk8adfnv zxEp-+OOyjfSX|0c_Sx-A#hc8>)k?*gj@O&13$xW#T{9T_5o4HeHp}s?M~qt^PZEna zLMuZ{FAp7{a{1ERXO!!$cppLA9p8^->}DiXjM+5XXO8g}dqQKNc8B{|#ar1}T&v$_ zwKmS}G}-P+P!auV47ERfVb)dfY1Rqdg1!7tb@xe9#Js9Aa>uTtCkCcBHz-?IG)1W? z7(MBhgX>9^XE!urKffLtu&>-_*z!%7sX;$K-^%{VA69E1xB8#2J`f7N_)O9%?;XK1A;;;GCG6IvB*(t0{37hIfLpre zd}z9%^7UaBgIVbYgH031HAujmTK}5nuqUj$>FTcY<}cr87G$2=^RTF<7I~dzAuLhy zppL^~#I~+6jRy}UJIotA7vxVKJu4Nh#$DTOeHJ0iZZ$C>xP)+{7o73hb=>xQdy$+` zqOOKkhSZNsW2!pQmwOt2XR}dNdv%D#TqO0zkB+B7Te=VGi+8^Nkxm^vmeP1yFEeE& ziB@hqdg0~-*ZXfo0WaQ1#F3d=tJ?YL`*-uMUn%`4eyHvEM}?O??*xb1h2hYq2mLJH z)Ccw9)69Y%i6UEEjP}`Q6f?QIS^IVr3k4Gs`&)NQqbubiOhqP}zC7~2K$FYXcr<&} zSI7ENs&;E7IZjiMG_Moo@XW{c*p1l4mh)bS+Y%!c=6{G&LqZyO!^L9)cdRWJ+qN6NWtG`}Sp12Di)usJ2j}gBd&iX@`J8zcT60VYdodw=--*{RUSn6@`Kr!8 z&)1HxxKUj-6yH;omFpdJ>gny_&}g~tl$%y#k8|rNUz={dDC$*gj3iyE(yOhlJUig( z=H5`doH8xa^TF~Peus^EN5nbG6_Mm9+ox1gbb&L;p#F58?Vx!l2lDdtb6$G#(f#hx zZptQs-J!<q!7h+)g)~ZPJ{HTNxo*RS5f_MYq`J>2@crnGTjD9t-0b@!CO+=c4UL z@!M4g7C|dHc`q_u)abHhrPvU|1k0)bHF^j3D?6lGL)#FNZ55<$3bpu@f3v5x} zL@pdVz5KFs+Iw5^$0u-avqfdzXEDe*^-B{w^lyJ{J2rKqUSmMHC@E!bFs#|ya&MFK zT+S>TANSZ7-gMj$S6z9s8dnKax`ymoG37ETzK=st@ghOZe%ktA_YMB$1ZsDn(4^Pg z>%7*+7cI7sv&WGc8G)M>59Ws2n9lfHZ3yPk6}_R!-j-P^)$7f*{XaTpn2-QKjj zLCS5n78HnBz(hi?iC!U>P~vo%`yKvUZm}+b^dSCY6{Ug7 zZX^BoMD44{rxLc`=8HLLgsQX7_MK$eA-i(aAm%X@MMf)6^d`=5)CsJ%=VHz7_}Ra? zaf9~kRQ98h3I=@t+~5gwzn8h4)(wL@wWll_BgFSr-agH{@M!PX(Ok0&6h_`IIVWQ| zCsV1AMdrsPk2W7=kSZ{KV^P_<15- z4ALGB^qFV8%Z#h5J~q$eBSwrf+#`~IlkSl3g>1uv%SWc|&a4WKWnKZ41Zs$30&dOK;v|b2F`R#)>OS`E8a&NVdcm!HPYY^UltJ zudj;?OmNf|k*HQ~{POe4U2^3;Kki*}d}S!2*G*nj_u2P=!`Ia-t++ej3k%VTl3nWjuih80)a5;>40&ibt{~i%e=x zwxo}?v>4sxt-8`QzHq_#&L#oV_U8>S?jJjOSnf5eAqp+|Be9YcDb(#xFJ-eH2rzpb zLXugd-Ngbe$uYm*X1F@uAJQi?C5=<^>+p zOY;E*&DOg$;*xE)KS_CREX|(WaY4l3>}4$p*_R6BMSYba9hC{1?c=+8niR|InOGTIeCd*wE{?ou zog8BBPAB4JTDB=4U>Li%RM*P0dgEFwd7MnGM_HaK!P!ZBRc=!xlwpj-doI2b{=4{O z%b1VH*?Sc5r9eWoY^T+m4OJ{8z4U~+*-j$&HAXoNSj-w1p&6;z_+A|j2+^`s$S=1j zd-HhHF!lr^S6`~rPVCw>r>n`ZV2j?ZnLSD3hY!V7+725MhULE`ZaP{k`|@-3Y79O6 zw$QYGyHA;RK}fpu0oVCDzCMK$5Ut~s&gimi0C@mv60Pr18G zU$X;cd{|LwtYOLfqRN3j&fbDX!48;>Lt5jaX8du|JuS|y7q(upI5lovqGW=O@hFo_ z;5YaZlBThz`FRU3E?gR8cp^06~1)n z{9@Zk*?o5ZrhUWyPd;!6OIwO=i;meoSpW7&QOFykPvu0b!m`Ymq_^+MY$0RrIu#yQ zUTC*Ae)E}^y`Z_`^CD8pliT@Z>{jQvr(*8so3meX@x(kA6P8z&&<`gX?5b3V zz4A&iHI?;gwqix)vMO^_{LL}z*xm1+L(?ZvbA&?`%t!AY**O+8)ytB8yFPmadSF!w77?XJqlTmQ;VYNpA%GQ@Ik*RlHk3~_QgLugQn#v6 zFEZ<_;0a2%*es$)elIj?c>JS@SBQkPyi;824GrgIUsY)7qs%BxlaPl{2}da8R(|Vs;b4@McS37b52*B?Ww&I3>|g!fnVbLd#re7)Z+dY)o#1WC$uh`AJw|psyTCLLT zdE}v!@_zVLUO^6rwXlks3!}Sb|nNR3foAXYRVvBk%>AQpVin)^>me)+)ZD5aYyv-CboKt2b^|7hx zWlO`hn^`nT+UA5%ir+&fJ0H^qx@qOztdifSyiXZOE@AE(PHqn5C&pec;ICN|6)TO!F z@lD(|mrxqd&$wx(oxR+Vo)b4Kqjr9mz*uSL^P?u7&KEt#XJa&sGb6*}9(H4DMa6|= zRkU905XER6aJ7RT6t0yGZO@MHh!{U$tG^%0savXW)WY{!Nw9KCW-R++&T2KWjpGl^`qs8#%u-Ba3ucGGxv zr|@_`u5}d z-o_u=(w?s^S@uQ*FRHH|>FYv(sWeLtx81bL+I_VvKIL6XhM$@2#pR0Owyj73VLhXy zc)6MZtERAbOR7WaSamKmfPzc78EZ(H2G+XJU(?Z#dPn^t*dUTEARThpY1(4b@afq6vb@#-tV86 z%7PXT$E5~ln>~EWXuf+7r*}|6oekR(+8yXHo+LEjz!zZLk$og*%Y*u57uhz^95id~ zU`)mvn$K&KE>v$K^U3S(tR||_lKFbQB~O(Mf(zuH)Vv-dzjjILi;5;@leS&2taP!l zzN7Ef%G$okwVV_iL8s5JoL?9m2)gsdGnueTtM{BdsT`jmryt#v^+1}j zv*p>L(X0k${s@_o43ha(YSGD8rvv@Ibw53>mFE)n;msX=t6ewV9}V!+^WL?>(WluU zzI3#4W%;(-aQU7}$8Dxp9d8;q9Q4~Oc6yt`dCtL0q3AE9xB<@t3 za4=<|+HEjZ{^fkTemJ5}V=?k}y+?ybETy%V>Gl4OT;1H>qVPeXyH0nLPCAYI?Vm*b zxGdx!FB4w9i&7fEU@Gv4-f?e6d*|2VqEg8LLxL=WFK(m;{a`()5;!~&@m9wsFIYQ3 zFVX3Pa?$55mD6F3^TpZAUZ<0#cI?pI{!Dj5J2azs+tuf8<3^KvWr~Geja#CIX|HlK zYAFWO#=bGB*D@EzFRZ|2CJJ2^_MXVTpSfQcf)L9zQ<^F>`;WP%z~Ow8tvJ+ij4N=t1sBLPkro3XxU*M11~q~IU75@;6l85?@21&{|Rka zyKN`RPEA8ytM5}%)s=I{M>}ti`CWac>k4Z&e(HEsQP7sIvm=VTiDlG8J?_JGB&GKA zfZyjT8+?tIlk8*YMDUjjGN;V?sv_*n%9GN4Xr-gGt~|zq#qOy~>hS zX9KBvzwm;RF_%?C(Gjx=J=Hser1B=cr$;;HH}~`TV+6XZGQJ{vJ!JWA$nSjLuLBDx z8={);cNtx>w?5KgCy{gel3DAr)h1ho9(J{n5d-PQ<>x6HlB@{rv)o7AS!qW6E6iIj zq)uZOV6s9Rv(iP)bi6Z#Rl-u))Z}dB%rpyBj{7T^)IrZhFkrw2MQzl1`GWzmhIMnH^)|cx^-lQDC^#kMMbytv+&T!k2>5&SQ5Mf4pz4H z1)T|Hm9p@8Y*hd1+`)Y^y{GP>86uAfsh@ps4=I_o#1v^uI|HKZSgTB?*LLQll+8PYAH>#6Fs{ z>brSgz0vmaB5&E2He1`l@SuBxHv^`Hw5I~^z1T*~z|Bhe*S91{`xnS|tE8TjsR%d4 zyxcpfp`hv>xp(F2q{`LVZo?aACTg`ZZuOohl6p71Ma%v>bN>!sykj(C5jx)ZKHy2s z?T)q@97g2QP;RCT2+qYs3_(s(W;P5t zfvZ<`6hADpAx*b)wQ}CxuXXC#3-4Z$I=_+^S5D5j`hM$v5Kej>6*&LxoJ4VQ6XZjw z1V*ws;^n+xFq?kOV9fcko_@$D?fGYCzvyp2_JB82fHN&+W>y<_@WZClMsU?vMI6kd zJmPtIh9l|Ajy5CGc9PUZ(un>hk%1cSxZDS`W^Xy(%dz^<14)LXl<5<81GiFzO20f4 zWlhTSC}`~|_)LC!gX4$H@s`4mRnW3~d&W)_c{JP*j;YrFHeCAnMs(UC_pdc2<-!71 zVjout8vAbFP&_@qx|nwOoI-e~hO^6?*oFBlvgE^B{39r%zoG^^&@*6Pw-7(;oWSRr zrdRV-NlN4(jaGChf_h_*6OWp4Z(otn1A4YI;q^FQ{WdOtyInGySzDPp+nyc|dQ@T- zLdpwMm|>=V^~*c(l`zqKD+#5#upqc&kT0BIduX)M^iGZOFcxF6oG}(Fr5>>e~>=1)~;`4dy(b=6E&F7XzZrx{BPJaCD(-Df zaOXMT4-?l}|Ms5BU$ch&5tn~A?Jq?5qpLB0Ey)H-tpBc(8)swwOH9`b!@*lQ>+r(X zv0P7Q@gmZJYudnRnt*@OY(1Zu9!gn13YEzAPaan8xgqR0^Dq-gGZ16!-ul~7uAVmpN*$~95GtYMXjB9 z`FUr2!&d@+hTs7&;2aDf;rruTco0WL3Y8cJ95qy=2U8T+rz&|BB^7lgbrofK4NWcJ-z!8! wYWgYv%u`lS)>KeiyVSQ{dM)~olc2!WKHwe#a6A;yivu9=oFLPtRmisg1r9+ppa1{> literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_pubsub/ebin/phoenix_pubsub.app b/phoenix/_build/prod/lib/phoenix_pubsub/ebin/phoenix_pubsub.app new file mode 100644 index 0000000..de04bc9 --- /dev/null +++ b/phoenix/_build/prod/lib/phoenix_pubsub/ebin/phoenix_pubsub.app @@ -0,0 +1,21 @@ +{application,phoenix_pubsub, + [{modules,['Elixir.Phoenix.PubSub', + 'Elixir.Phoenix.PubSub.Adapter', + 'Elixir.Phoenix.PubSub.Application', + 'Elixir.Phoenix.PubSub.BroadcastError', + 'Elixir.Phoenix.PubSub.PG2', + 'Elixir.Phoenix.PubSub.PG2Worker', + 'Elixir.Phoenix.PubSub.Supervisor', + 'Elixir.Phoenix.Tracker', + 'Elixir.Phoenix.Tracker.Clock', + 'Elixir.Phoenix.Tracker.DeltaGeneration', + 'Elixir.Phoenix.Tracker.Replica', + 'Elixir.Phoenix.Tracker.Shard', + 'Elixir.Phoenix.Tracker.ShutdownHandler', + 'Elixir.Phoenix.Tracker.State']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir,logger,crypto]}, + {description,"Distributed PubSub and Presence platform"}, + {registered,[]}, + {vsn,"2.2.0"}, + {mod,{'Elixir.Phoenix.PubSub.Application',[]}}]}. diff --git a/phoenix/_build/prod/lib/phoenix_template/.mix/compile.elixir b/phoenix/_build/prod/lib/phoenix_template/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..243782c87779627b761d31569ac3f3d007f02aba GIT binary patch literal 5324 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_template/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/phoenix_template/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 Z!TJARJqY2c3S2J(0RF#)IJBQY_%C(9w1ofw literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_template/ebin/Elixir.Phoenix.Template.Engine.beam b/phoenix/_build/prod/lib/phoenix_template/ebin/Elixir.Phoenix.Template.Engine.beam new file mode 100644 index 0000000000000000000000000000000000000000..ca492c96f179d36f84660118134e75ccfa719c9c GIT binary patch literal 1956 zcmZ8i4OCNA9Di@aF{#000|rJ!Dx@MCWQ0lRa3Yy#OQHBkxAAs29^2k~y!XZ?YEcAf zY9RQ5i3Np6NmI~7#xYbp2v{Dh)Fi*)6lKRziWvgtx^IGg+;e{S{_pSqyZ?LNyZ?Ld z!dI5XB8YeO{N$u1NnHAD1VItE+wBsEC0hsw!6-Dj6d(zQA`Mt+i=G3DWYR>Cph&AF zNF$}y*62BoA#!XSU}>DP(u4)n7y!)x9EuGMz(G?C$7-#HxN@V7#5sZ@S)EmnGZY&G zNu8B4*epQDa*Pe1U5RA0M@ihD1+?M za0D$9VG|^JKoW9V`orlA#%n^P?%zKH+*W6t}Y^a#I?4=h~g_SvWU&)MrEA-p-3lH~Ae(Qa>~3^W`_|udLX2 z`|VGs&FK_XB?b!d>zysO3p&kjPbq6%?-k_!x+PJ6IYjq$*udtQFK1Pre7^eNpf+)2 z?m_X)^J%}#TX9wpc4uWmhoS7_`~_dF8cIDA zEo>^jE8bn&rkgT7<0kibR7O{eY2KEZ>m#Nl>6>b1ec+dHip>$2{b z9j@Nkt32b~(|xtxH{*EQ+6r4z(0wOyt)}%@5>RS_veuN0jL72}o5Hf?%m(+`wuqC9 z-d^$8X4e7tmH262uC6`UyrXrVHuujP{60}Q3-_tQvrn~-YU{E_@^TDzWY-sps>tg! zE~tzAAvW9F@2a4ASO2V48>cN!NuIjIHn4sBp{a7wnUdbCKdvtOJ>$T4Sqc3czI*+R z-DPQ)uN9olX>9g8@7<%bpI78}Ztd5s^#8>=Z2G?9(CLczG}1M1{e_;k6=h|=DGXdo zOT6-am?T7R@9cm4NNDJ>Z693v^NFXMmOH!XhLFXQ{MoYKwwklDEAKaX%Q7e2y!V1V zMwRluYyGicT0XJzWYPY<&(2)JUR?N8)l#aaWR}@39AN>=J`Y-~YZRdi0@C$Py;I7fF#IFBLvUa4>(TjTh0lk+zEFef)hYgh2h= G2=X^#b;jNR literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_template/ebin/Elixir.Phoenix.Template.ExsEngine.beam b/phoenix/_build/prod/lib/phoenix_template/ebin/Elixir.Phoenix.Template.ExsEngine.beam new file mode 100644 index 0000000000000000000000000000000000000000..b579ca0fd761d82f5911c062da4e0da30dd85a8f GIT binary patch literal 2052 zcmah~4OCNA9Di>EH;|9VhEQra@S{>;L-F*1$_9(GFsz9dweWU@B&|sQf^J?ww$Dj-Bo~zkBa~|IfSk|KFSV z;=*VI5e>$xRWGRc%%>3qaSsm<|0E7qn<)pyMrjNTNmGufMWn@QCU`PR?cmgO9z~NY zaGav`435_lJkL_OHlF0HTE=3f%w(;Ow6dfY=<6Cuhm~P@4!7v$lzFuq2@iSL(rblulrD zq&Nt8q3ArEXYi#q280i9{D%i|a3n>WLGHT9(d6aPk=|WpB$!3<=DoQ_4H_bs6$~K`CRVpQ5)+mz@u;eI{FtAva0x+*o z3Z+1pE<@1rF_?c4T3dw)B=It|(GSCvLa!>B2*WT9Rxb^e`38BZr2=V{LM)SE=ph)} zHyA;`f%cdJy?CF%Q1{@os2ddVD2%m{kK!UM)su;TTvOh{QIA;3kWgMQ;if8hK`ugc9-?kFjLK#~p)Cq0LaA|3D}JeQkCfxoxcsR5@+ za#XL&c!B9w_^s2%F0R%k1nvtk6o-X=c#ybuQrNP^`)I>tpQg(xO;tnpqK6E#r(_pM z<1S3T`^1_@TBqLV7H({4+EH-GuX%3ju|rf)ud#XWD#hl``MK>0R`!Q6?)N5cc(>OW zSYkib5^!+tE!VzDZ6zCyotJN$&?&qT)~On=*}cu;G9K!FN&5Ek<45Z&#v8YX_x})9 z{q^%-`G2mf9B$53-jv;LJ16VBG=tBHzu>1^=CiKGFC_8Gs~vxG?YpGw-&f&`DCvZ_ zueMhCvGx3T(SEG(^N)XBIYE20I%#fOY2as(g7!q?_wMOPpD;b^MPDX$+v?6;p$kr} zF$M0vIeAvHDX~u?VHTg=Tc^4^QJea-_m#`(F&o^0zb^^SYW?EU^K(irq*k5oswfjJ zoz;`!bG3^vrd6`@QU$$a9RA1K&Crert5IquNrgVw?)U(qdX@ z>!xl$c`W_h>U>w+wW3pdXWI_P)E!oRIdyQbG``^6ll{AXn-}-VcOO+oW=9vs_e}cc z+Jf7bVD;B)CwGJlWRUZgYI;)A%NwqmKGGDnKQfp|j z^K$dn!g)m2@*<_Tv*qfAsyBbaTSL1G(JQg$SmD~cx8mu+jbo2Y4N>Z@#!WANq^CVD zYD>V&TOy{u@z|~Otnp%FcE_YwcC8BAn$gwN&?^c^p1IGJl67{EX@NU;#=806Por~> zFFcWwuw&V(f-m|P7d2EQJX^D=<>zKqvTXL5f&(*q^h?~?So58(JF!hG-`PAgDbm?Y z4I#xx%TB8u2`11Eo1CB%gGkTwhieU_)qWp+W-In literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/phoenix_template/ebin/Elixir.Phoenix.Template.beam b/phoenix/_build/prod/lib/phoenix_template/ebin/Elixir.Phoenix.Template.beam new file mode 100644 index 0000000000000000000000000000000000000000..bbb07f9cdc2de76c8fd265b1e257661a4630c18d GIT binary patch literal 27272 zcmd432|Sct`#5gQ;3lJCND{`rGeTK2wk#1switu4GnlbcDhg2~)s&?~vJ_H?l2oEq zNt7jpA`+2A<#+BedY<=rzt8)Ax8LvopU>y&KKFI5bDe8D*V%4uv)QS}!V;KdWNK(_ zNORO;Vc|$#US9Tt1WkhjVge#mZ2c+Z(0~{f2XaVQFo{M^A`$~aeJMoZSrUyF5#SX` zBU8h?DIsA2!Q`_(vELZ)B)9Er1eA^$a0-M^LDEfbbFS0Ksf=py~MkG#? z86pxvJ7O4#N`)|?6i|pDhf;|V%&$wAkvr`P>KE|sy~_9$<)xAAxJ0O z?QfMJp?_{g4)qHNB~xvENx@WdHM6m4Xk>_I1lcFjn`|2#K&4TE0iwteRB{VbxbR3I z2gFbHCj|#nqKQ$Y-~buM!}(C~K4jl4pjj}*JBUd1^dk8Lkz;Mi5fPM#Y2t59 zK~rGw5KQSEaQj(fpIVNK|qt zDTJI9L7~v#f+r~~j2!BN2ihbP53oNwp0jNBEJaSKSs#4G8rEt$9}vtL_86on_jH92%8HqY%9TiX4H_hcHYU zA0pG{kkD_;suzD(VgBkVh>vL*!?3X601%BJ^0Iu%G;e>f>{fAKqi_$!6$+eh6h1)Hi8t*G!z(ap}_R`P;#_qFe#Q2NyCRx z!XV5F`VY1Kj9IZ0gbAR)gA}G&4RmI!=m45O5sd6$FOqjqCsVXw3dx7;LjW0yOn}|p z2{KD0$UrN2NN|M*%#9oa*ur5>qESK!ku+Z|h<7#Xfl4?Pf}F^-nK58B^bf2II+<15 z$q}LC;IM#DY8cs@2Jth|h7o>|Az&n$!igb^9OF$6gQGeOFnfWcmPl09WU>w;$1qacs$ExxPYW0=A+XRsz*R$kcn@}37_bZxXaa;< zOm7?podg;yrPp@tLJheZAZF#|$_!DQkCTY+DB^<{NxRaH}lV}yl; z_b>|!3kCrEs{>F9Km~!Jv#|0>U=TQ6WQicew<*^scV~(hh|K+t$8w8IuV^ChgjOUL zK_Kvfe{Bh7Ea2fuFvEaH7{Lq&9!UfN1b!qP&uGH?y9tCLaIM3FZumhv%oaSXD-MIHV38DLAt3n) zC?tVP5Sxm@&JKwtp^i!;Kqpp38>EWrUuZ$aVE62Nq@O!Q6;OcDnMcp0V3j}~Icv%VF*9s#Wf zI+;oV+h`z>`sfV^NC-Fx_5^*119KMRiD4K{3RnmbAfOExJf;|k1bYMvcSA67NVUb# zr#bM|pf85$gy|5*9MEp0L%hH?^1yN;+!!1Ii=sn(9GDh5gyq0=(jk8EuPzEL#*jv| z6)lQ@LDsLG1yDCq9qZKBtvMkEJ-*Bq4gYi5UcC3!1y4vfb?`o z2v&n@6Br7TjQ0%?z8Zsoq<}DR^g+TLxM@ZcBwW8zDNTnq0ueNU2r>k-vtTemvUErU zpf=+XkQ_G-PmqL%4+jQ>xmmS3?CVxz0za0`7Oeyt$uo%w2uOh&PavqH2$K8+tQ3PD zrB2{ykV`Sh0YgP5IfytV45VahiUrOyYXJ^2X2qJCbz-rm>a6OfW<%=grjo3Zre@QU zlE7nlE^Y84X$D~=i`5x#>Zawgv2p(0K+w^ifBBNOM(vJK)`E($OEI4z-0g$ ziG#@WffLS3Z~_*5e;U(xtRM>=k^opN!3^RBo|FV-ewYE=EwDVJXDJRmBmg)t`oaTA zEJ4Vr(IIIds|k>G({EW#n6k>O$f^!x)%c67>WXL$hODwc*3GN3ngUtn{-vx0hOF|i ztbfwL7EW6$qALI?*D*u~Qml%u_-D~I=#UI7x+Wb`0-|pNqHpGA0TxgOqPStgRuY&Q z@QNA42Rsd7kw`uk;Fm3QNCh-72Mx49Z~U;YwCRv4z**oBkPbHVOTwWJt;1sfh+i{E@b4nnkPc~p zzIKAXjNrb2epsNaCJKYL1qLx;7{s_0ZH$17SLFk#8-$JhN*dT4jsfzR(xEMYjRP?F zHg*=Y3IZ~tLs|gi2rA9FK?*^l7`ff7n&E2{5-4H?>MWRKpnuEXNs2*d@!2;d9{IsHULkr2eT_A3_8<9TO)zI`sf`9$eNMnAsyIl2xtex zWmrLIJtJ%KGo1rjh;ymp|KyzQyuj0`cox7AWNTdr1Bn3bZ0L|4P|F2~ZmWs5L9VDq zhxCEWn}B~H93%?r?C8)|K(-qccm9p`yFi^ilMLwR@VDCU0=14zLOcT6#mxeSv;jO9 z(jfwvyXcT1gvkQ3Inf~_(5X9M?5u%yL4pYb4ty6nWV{0di6J0YI%EO}JOHiR?-by{ zOaZ1V!vF=m?#}S~?pE|}1hkvL>P?loDpq+sh-gL+sF!Ti$^5Mo|7-E7s4h~N^1Mm1l zC0~Y&odklSSVSPYv0em=M z*+4pE2fFtoAfO<4dXj|aGB_mFLFYSx64GFC16l?EvF$-(lOe3kSzy8Tz6Q~cNL(U)|WmynV7#(r} z^`W3X9FGn|YNEri03`F!Vd~tr1csjK`~*oU0#<{7G@(PTKrT6;V-iEh2(B z6-`)CG@cH5{UJZRO8b-87JxO#I1JVV6A&kUU`2xs#{n}Y{F8z9FbtH~icUm8iA)3S zML>K0O9tBe|JXoD7y>*;9r6d7?ZY9U zwAE#P09e|CaYcs$!CavVMtC|M3Iaq20MX&!lYk~V0|*V~uS^7#0S5ye3I=?^{FOeuKe@lx6|e&ECJEFaQH&Yk1RatGj1B`v zC$-Th0HYHyBX|=IodPReP?rJf=-TL0pzhS~y3_P(P?ZV1c19bW4>oxDSR6Njz*xR8 zx0rN@0{T-2Lq!-~6lj1Ku#OB{!v<|eN=Xqk;3+@@LI5keL%^^R zVK@-GM*JAY!U?5;%tPm4PqSgMI6<5gR~RMNZd+XfbA-fga&WSTfn~34BEJ|&p6J? zcp_QNAQ4j}b4h;|_ziS)j!ppFasjs@ZS*<7?Hu3+A1?3%3$Co=A^}4nC|F8?wJyl; z@b(|OTLZ86>uX;b-pr6JZP^M$R(~e+u+jtdBmAfJzwg zK?gp%ppPy=vVcP*2No8D-pY9`PDcr+gA1VI{y521!iB*nVq{z-fK{s1J~(hniwg*4+%n+6zma4HCW1^QM?{f*aNt}Qr?YZ42*_}@f4SUIVe;3& zf$Nk2zfh_Q*D5v18$NWT;z&4f7Z40?R(x@=yIRG%d0sut-Fg;vWVwPbV za8JgdQ3p>A0I!n-&t+%u4!3m$;0EB&G^;YheZl?0I(h+s@vyDD znPr&24*<9=Tn6Woj55sAAHXXAKv0JHz->dAc(_bqmczj_;!k)gD8oEqnn(a}+b96h z0AQXm0AiWtIPi>TmSG+D16XaF%*4ZdQvQU8;|k^j(;s1$kAi0wfYr9yOg!B77!wc2 z)d{$48Ux2FLJySTxJv^7^MmQ&GW>&i?E?VwgK@zCPyk?^gP7$I@bqJrVH^nntg9D* z-OMuVOSla40ev#ca9=wCxB!65u_4~+)0hK*+rz(Y0PFz3^aN%Z zriWv6GXSvkWW+aIhGmBB1ealYcsytVfa&3}f@hW`z*C-ChR2>H0GJOPJ8J>J^xVuR zED!6p$WU0G;{ezJ?^Yi2{yt%-PZjTyK-a4!2ZYgRV3I#Eb9)y!wXXxQLCNqNLJ4&N!E~B;(7~k zg$&yP@&2V)aBBreFkP=sg}cD5s|xcX3*3yYPGyX%NmX?Qx4)AI<|X$}ynb`|^JSZ= zIxM{F0e>VMXdwYH;AVd{l86Ry48pO-!MM1Kp+*1Q#~6WsTLU~p2{Q}>8<-2MY9d1-;qO|aQSdb{tkD^u5v-F6Lkw0> zTtfuciveI^MLF^AuJCH{v6=H&xGBD>1SX)kjQ>}lT}aok20_-+ym@z z6g)ux-bye9d{6$bDZD5?v42ky_`exhf1MImf{G2u`JWA{KSJm4MPBv8zog(`di-A# zF(;wFCt4l&tkJAK6woo4-L~oTGtz%|CRynK9)=u|p^R_l7%oTr_XZ3intkPq zkHBaSFp0z8cdW+Nza7P^g#Vf8_qXSxND<=yPizDX63xNfod3565m{u)462|Gk`G4WveIV6K{0*OTTB z)>bN}jPL8Z`WIY-YO`8bRv2nJer$1jIH4>#-q6+;jd_^-r$pZ5_~iw!Pr-9 z{D%YS->1-wlWF+ihq?Pu0Y%=GaTX1&ezpkbx3x?p`^pv?M%lq5`hRI4GEN#`rZ$Xz z;Jy9-PPkZ6yun!z%NziH0PwjIY?KQCP62?=o{9nd`TXk7XI6hcr^*0ya9fzipUn;+6RzI_06v3C1`x_D!)K+w0ALy)03HC~AAE-E4gluw3;;eKglUWbSTM^v z;0d1t!apql+Zd&lvpo}Lc@ucTbns8b5d0wrc*-*KCYW)esEo}UA{4{2G+*^WvUUC0 z@UR*?fm@I3KwueLgu=2dGw9)i9S-;}9>6Jo5DQXU1rH-Y9s%!+6wVec1U?+5hLNH} zS3lN`AcjRy7^#Vqk;LE_j9v?<-~y;4!+*pP%>xjmNU(fcIhlZGkd+T*SBLZ3)$g^z znjMa15(=KtD)@?h6{)&UVu<{1k{6SPmNY+8Z1k zta3``XR}`w_u`2+oH8#5UY-qN2DmrF?&Icie5)&yf~yxB@GpdR$9e3W>k6 zD6zjH9?I~zTyr{E811x#n5iV+`qY@%=hEaE;=E(;bwSOV{wr~NzO1bktFQ0B=Cm_? zlcNtvus=lbms8^4qn2yQ-yd#Ag1w zI)k6yN9X!79*9q@E32-15*~8y?!%Khw=eG-b}4=(qv&3NeUUoc@QF(;mDg$^kb<}mbe~Af?FEJL#a-2kKkiNST^_DIR~XPE zSDS;pFIIW^^_gP67jmYmCoF9zp8M`*84|IH@x7^J`ek3S-NW01&a;JU&k*BoSnC;_Dw-Af+QZ9&wwC|p zjN|g@U(UhCY?^YSQ2ADU~x&CAD^))usNku1^~${D-*R^OHKg zBMg6_1X0)48X3MYiAllX#y_zct{03!;O2C!PiCtfRi||?%cf>*FT(^6@!&14$;>Dp z=_-6bvODmc(HQN8-IY!S*>;UXEMeho@f-Q)*Lw0I8zn~t zrSA6FUr;=$x;_5%(}RL#;#+Qn^U@Tq<+rg7Y~2-nC}zt}Pvvg@^Dm5Igr6M>+v<4d zrY!m1!l~oa3EGk@=MK~Nzi$%`cXoYr)aNlNaQ4=9p^mall4aRMl8s3B!CpGeJlH`q z4a?^+F7tF|Mr4OejebF?m%5X;Nc)!3&(n*ylOFjUdn$=4cru9!g_hIaJU!r^cFQ7` zJ1TZvZtBh3dRqoXjTS2VNA@^%cS#9vz-qmD9DO~MTVMQ_wACJeLCeHaYtm%0zHH35DVw=xOP?o;+&9-Fpw{ee7E$%VeuX5y=#O1ESuzB zH@)_aq1yMXWr7GdvLf1-YDJygDf!c0mx>z9Zu7892R_e^b~2xh^RU|cD8x_mlA%$5 z_Ra&z?e@~_oZ*M%cX*46PY;?nt$F>0{ep6cuiXVneT^~`sYJq$wBy%NeV-$xi;{b1 zKkj>Lb<3^ntRw%oQ*Hg-wj*5+t_z!mtKPN8xCw8y6(=fd9f^E*b?i!{uAGpsV24xe z5?#}8NoKrhLPX$hXThG-fx^?qY(&$Z`1CIVODKh`bC-5wnz$1)jhtOa&+~oJ490SO zwC)+VUz;;QV`aNglX^sRe@kqMW_eMAdWpsc3Bm3D8h3A2JSs|QIdo54{JV}yf*nUB zzZ@ruN{jb$th|&{Am$K%V2_#A#(RFg3nxj0LaYtDh&@AKm)v<-jmFK*u#qWFZKwYin_c~YF=W(-h1>@f;eQhV=k=vi| zIA!!J?^AGRs9PppvG;6iNX!XJtnjXi@PWo>4I2X-??i35r?j;5YQ)LUA$Pg1YUJDI z$Ot#Q!DaqB+jDKhRN(nHJZ?nFjTp`1*v$_4_uAyMY)b16JsvGPxvsRQ|JUfYbv_?X z680#$pxoQnX5B*3y7>H%&!u^LgY`K`^u=-uty$)1|i_%Um`_;SUQ1Kie*2ij+^Ozu4LWglsMJPvzuXO8$( zct~A=Vzs8>tD?&#$)z857HI6^MD20rd*R@@&fvf;i{+lslT(!w^Ri0Rdy!4+!guOw z4cvNG`^dL1&|_`jOW&tCW1r5Xj@q>835z|7a({lsRYa{iW8SDgM0+W#K-{6$C+vbd zW&b244|T_H=5gMJHao+v5SQCZ1MVCJZ87T(ZG1`|dijt8v%^vLm#ToKZY`~BX~-gB zYa4r}2fIeXOs|JL_)uPKjDK@fzgmL*eYFI20sGN=C#ws`b~=kIUnnrV_q8r+{j(G9 z=<=WMe*OC9d9Y}#!(8hu*P)M{2IiIDZ@25zsIvrh&AV{2`3{h<)RIX#lLGU}cLi~ z-ncQf$+_+Jz7~#6UDkW+8ng4aec;gEVd0Ituyyy*VLASdLE=lTZjyb1gU2S_HtmrZMTc-F5aD8SB1DMHzhCdsJ%I5N}fw#S+H~9GM@rZczy29 z@Kil_qkH00MnVFIT9$m`U%UM%I2hPvK;49NTQmN((bVrK$5;U7uCjj+#zf>G8SVOf z{}{WTHv5PBO~d$2%C<$~QqeT4t+{Sv{-}i5VA_^smh3^iPmLy`Loemxzk>{1Y zJ0SVB$KXugxi7BQ`l6a>R9{xJ^Jz~bxY~S$t#UrqnHP>279!4Wdb?Cg6*U)nyZ2y^ zmGWET{&Bw6Lk+X9-tV$~Yrgp+u-TFdc`7 zPimEL<-F>BIeXan%9tMVc>RFam0HIp@U8x zsAKqRx-TE-cZdr`#)NEm+?9>`s#!sCeZo$B#qO5+uwkYU+yj)3A)zH(~PPkoh`rCNL~NXhQ< za?vWv%@VX*!_7)8%k2*WQE%l-+}DexyzAD!Z25N zqe?6PN!%~vZsSX%0^Y?EJD%OUg?xV9DA&dzlRsmLcIn%94;*c)?qkc)rii)agWFhL zU(Z&t=y>el^sHJ_zNBm$7N4$b-xKk2G35HyZ|#ok#|q?RL!gl2=P#WJn3#1Z1lIeN zG+xh&@=|&j2^I0kgznxDvPFN(DbecUeQ%1-#LK>odJsOoVNU7(Q^6nsH@z3*7|GgT zb&)rbk1pSQ$NQOG2z&Q}SvL7mU#(uQ6hUuLMGPmJLkcq#MgHIx#EA~eU^p?en_hgC zIyxS6?7q*QhtApd`PQMPJvn+8CM-a`;cK3$vmti~js+u6NLP2ih|Zgp;Ibnc8knlM z8H#7W6_OMxXdw&R4KJSS56@?d*{$1daJggCGxwzXk%B|v-&vLF4orOA%$lIfB1Pgkv;e~OqB zAsBf0rsKjckMJ8#HXpM`)x3%qvE9e^*@U~|%DJBE*k~i|Yrfhi?)O(~G(JGRuy`YI zeq(aOVI3{WLu-_m8Vtrv1vua8qTb$m{j9x+v?<}n=I{8mN8bIS?W&LDPvI2c`W``= z&v^EvKy9+YOmB@@Xvn(O?T*p8C&zcw9748T!xxx0Ix3HQIlSwdR^y#Z8Y((gUDd@l ztk8IE|M04iTQOxo~X5 zNr~Mve8N)h+wxiaU6LD`M(LZ(U#B*uUjE*5*=sc4Tmh(HlZi=oODFWUt}MU{7%pRu)}y>bepf;&>UL#u-k{7Ckr!& z-9GIazM|~m+WJPW<;aa71-_g6{ZbX33f5+mAIyrYC_e3x8%`lO7ar}uxa1M4*;zhU9Iiz|lsOgjVj26^4h_Fdlhb8_0BPw<@@IrGqxRqt@gk?Z0a z=Nl&L6gD{;Y<%VLGb_5#-ew{^DkniDI_HPJh?<_Ri<8Z|yP6TaWeMqfF6t;*%JED4 ziX(Nd&j`|vq#fHa>SrPpv_X0Lkc!*ZO|PzZ9vM;%Ki=CMel`5a%}xCBuIEQx_uL6z z%A7vEm_Nq$WdFzYzB7I!$)-PjunFc{n{K-Nk{4^vAM0N3$KQGOJu}zPKsbCZ@YeMA z;)EunZ~A7@RVFrjH8O@p&(nx(NjGi;6|a@yEWQ!{T_RUH9<7)#^07eop}BhO5d`l` zn>B~o6J6hx?v{JB#rDhNnyVIQwu7n;X5zCWwnd|ToThHn{x4s z`6;)+0X{1(f!trFo? zxB>4P+E@>&6 z0?iYXZ>F308gl&|0W=J?H*Cod&a&gq_MD_>go)VCUQ`%1LOj;Omg$|UtF%% z;q~^h>?bko(R7)w6JrG*{9b*WnO05fPJ6Un|GnxdE1^kLlb7GVe8j!4ODQT(ea&q9 z?qVGa{cBFCndM5D_1xz+mMJNI_{#CA`xYm?=Ql#X4nK5BNu7M=+x6w=#kh;-+h)qe z>B}Ro#C2OUT=#3d_q@jI;E#O~F1}+;uJdS4p%uT@74I{N;$0bS9)6`7d-|2-4_28A z>N@-)37C_zd#q>Ez9nXTJh47{BDHse1#fHq?e@>yn~bY!1cN)?hCjgFPjsVY<#~U) z9K89Ew=$o|UeoOhcb}?1fY?jD^me@xKGK?5lKOC~@%~#}o~cQ)#fIGHn{`fW$poZF zm!rgv3P^N0AB^rxFRs70=2kyhq__1MAC@)T?|~JB8g!9J;HoKyxG?g&zb6ZbP?{^^ zFMTTCA(uOBS0(bJt`|&zk(WX~;7^+%Tb((d6&f}0+u>wS?Dt|zkf2sfxSX8~2mgzM zK>c#_hl{M(wPg*-7XyBJ%d#gL^pFxy-Ow0xI3=E!F~6^kYcmg^`FcLXovXpN9MsnsJQ4P`-Et~$B9dx=fcEjNH&kcH!i@ckcLEdiaz4Xz`t9xqxu0(&xef73loVidb23g7`8z@Rb&%#>Q;B(`6@Ne+{r9kjjWHS z9Kf74c(~}TSP=hyn+GEf0_UDcMeynPt+}J)H>7-(?@oh_PIzm$j~Iq;P^EuO`?rpr zCO7xtOi^yVVzQpwC-IAId{J{5PX@D$KO2iYn487kD?*>s4fA*?(r$0jzt1!=+A|wV zi;ZTf6OZEHDSd8U_#@+9(Zt%_LrWb?$kwGR-bKDix@S2&o_}MX63yKb#;b8PYsxn6 z$QQ{WHt}>&rO;?^hdgEll&SsWLsTsB?>S3dX zVMDw2e1v(~FgGDC(T}CbQVWT>5XFA>n8>kD`rqDs8KfGN8uSiIZuWZ}gpHy(-ocEv zd_EDXUyVw7;o~TOecRjmY(EcRZt?Mm8iyG&<)kjH9dc{$cY${=N z;d0R|HJ*qVBShMNYnz-{< z5&{FdF3r%(7ptuTD+NM$Dk?4?ns$zzW}SDss!`ll@GytUo$500d?w~z$Ux`iPPrEq zxF2tJvUS}EU_F2OrP`?A($#>iOZ`}}#yC?~7YRJuYcEbkPmMIq2fI4EFUwI8Dov00 zUw+B?VqP?V=eUxPf5*#!nZFHX*A5q%#!aOD!Ndw%@Vd(unL=v_-7Vwilr^*y|;hSQzkHdC}&i`-ECzg~1r7%0}+D7i(|u zR~Pydi|PmWh(X&DW^ziO|3dL5i#p0`ar4e|pVGYH@x6P#{bMe1bW=!1nD5Ys&)3tD z;k`*k!9vGm3T5OI`utBgDs}mH)H<;zN@;VS(een5!)g4=3kYjCWj|NjuR2}3bHFrx zJ2Az=-7fq~#VdX}OA;|;BDZzVu6ix)DOdNrye}7fcsypC&`3uC+0Prd-5#~EP@bts zb7>Pq|M)nk)a*YW^YZj3`*|Nljym;|Qz%zO4x{0&lp)Nmh+g$~yZ9_Px{6*WQlKx>~T=9eq0!!~HD&MbQD<)EKW*mxMM? z(<~05ybO-*El`{fA8sl>)nvN$^4vAdv1xaKbz8UJa7%Ty-Shq#A)Mpf-jam-((QUZ z@0Mf{_1?aB`iAB%Ei`UKB8H!8~M!jy{^4SB~>l>rXKV=H7ymj2GMh+YER0~i3YKw{x=tS$6^kodL4En zcy#xE%(fu@?B)D%yGQeWr=T9!NAbi&AOEd7ZatgoG;)I0rx@#OI&y#bR#CrXSb6wB zqOj503-Ku_IoiF4vI~8@0-iaG^u{_y2`<5PVvRCu)G4WIWc_nn{7Xx}-y*~}j zOoRDUpaJ;yZH0Bw1L2D?=cO zx~tkL+1>VNSRoW|Ua<62)5GQq`F@wiy3P6(n*I{!@Fsq;XLMZIv(vD)yeArrK6bT! zB$`M1MLo)JST=g#w`n`>2(8p)%oKmgzW9~KOpVRq>66dP2JUqhjSon-8syz0vN;tU zshF!ef7zt_^@!6%22^_S#Gzsvfz3y+w`*$V81cz3+`Fpq1_+LLa%YroJUal*Gp z;?hV|R&|PL_{+2Aje={MCLEFzUbrVu*`o&SB|L*ii=LiT=KS=F!eTz}^TDLpX*Z=- z;-c3<@qmbiir92*a*THyk z_SL?OC+`k)atz-S6fihG6Y8n>O7{6z+HyThl#cGfPI^3)&%vR{fAmCc*#4!E&X$-9 z(KEGUa5w^wzo^TA}XCHlKl?C38B6n{uqK9@}g z1)Z`cC!e$;r0F)=7m31`)&n<-&NOb1eG$a*G!;HaDQn8V|k=EReErzUs*r?$eULDlXhiQshhF|^Yr3%l9hw`)jwp$#Y6GQ9+sbm zt7V2GniULNrarTp9E(z&3cR8u{(4TCkhK@0TttKtlF^< z|6`uFaN(2MG!_y>@7>QNEls7Bg1rptGa-wo`zuo|k6{Gg%PTIP&>n}`rt|};*1uqFmp@9&S!;aa87eKnD9eeNBGKXzXYA; zgYgCa4*KG(3h&=dq~3gDU?ZU;nPl#HA##^W@>Hg&aID^bEDNM1t&d1L{_PHyrKYAT zecDf;tyzXuDL7vzsvx(``|~rgtdC{MF_~{)&((V_UI;Zkvv81G zpNM4@sL$dkF6moqjTRQ9P5NrY|h;uMxVd8N9*y|m*_*4eUlcnhi+nD z-{_2q^?mPKw>~=en7&nI@6X8RlI%gd!_uPoe@gAm_~q!GvcB@wK4U-SMYnr5MPFA> zR$RKbC&kD@@tzT}V7OaO`fX)RHqXY1v+0qx1AI5-6QD@`{agc8&or-^K0mVI%{B|M zjCt=}p~ss|+jrLWbr}En`LR=bw6QYeOwDVNn(RbQ8iyMH&A}f#)UO&i@}o@8kB-zyhanenWXojEgIuDvGtY}nk`W6-SMy;<72NA{%) zU5IRrUYiZiwYGm)lhfw%Jn4D+(F`TFrb_E|YY*->ucTd+^T{}$c{=lGdTnSspG$kN zkthxEIjMs_F=X@-u_QtZLqv6cH+XA*xCeYJV?yx;fA6>^4E|O`R4pd2#AW+Y$!>wE z@o~~woVXEZu&PW_{D{1|di6NVxqXJ*@6f&?w zxYCvOqvpqza`x`;off`g*-Ry>oE#XC%GegTwDrmNCrfz~bAeP%yI}>_{-LGE#u7Q( zU7pO(&+l4v z;(S*Bx`s!lm1|uxs4Df z%R%7T?XBjS=A3FJP*my6iKrDgX1$DA}sO+c}0=9lTTK?Jke+%MW)i z4px=;dnsQe#yP1ZyU6fdxiG7@{xSJN?xqJX7Wl^sVh`R_s|xgQo$+Ol6F{Bd?-fW< z2=c$1M^m_}aM385P1ogpRY|#cccx=AMtY&@v%rlV^hY({U+wPhtae^ka#3N^02^2L ziG2BmgO6sy+d2lVMh)}1q7uIGDBkm^tM?Ux#VV|87h zUnW-5@KivJz5Q z_j*0#nu1BC*%TekU+;E12HMg@MI-v3v7EVmsNFj^D)1zANJ2>ZaPP*$fdUq})29ve zZ}4(hEAU={0uUXU={*rMS59DkpiA14Ydpsv4lOtPzigB-NOqc)LMVQS6G`}>?J>g7 zu~wr;!mKZLm+R9j*Me>)F5iqc{$PLnzUr3S=EVu(q=O%eV=G(V)TG7~R4AO+E1a6$ z{^PmD?8Sj|o(2Q)_#cjJGIvbAX6dndBE?S`o9**hlu-PMQV zQa6s-G~BaQN}Ius=gvjUR@a)%#_+%57QMa6?rv2^($rCUg=tmf{L+Qf+*vp+I|etcc@u#s2kt7jDHBJe|@Rahx$oU#t(oI4N^Bn{mVy ze3p#5xi{wdIM4jnMnB`ETKgKKC<|v9-iS<-?xeE1=T1o;#v{4PKU^+s$eH97K90Jo z)b94dd+#3Mr8{ygoZ1|>tYo)-86whzf1)`^g?k>v^~8CE%ncmAuKZ!U$CElMpIA%F ztU(`(TgEps_?P@FXE=-fMYoN=o2|UOu*a-OjMApZ`qjYWqU@G$i|;2kPrC8UA9-OM zP;g>PHnDi|VPClcLEJL)^?lK|YpyOFaQM}?IjU$ITWI}akJtK}9PPx{6}!udzqEUtx(A%nFwjx9q`b21V1~3Kbu!f5QKtRvkI{nW*MY$_3PtWV?S(_w7Uc$=pMxJ8G7xDR>_S<{&(89WhS(c)6<$DnIR}n>?!vcO(If|^Z@i4QdSI^8Nnj~3I7^pK z%~W`q|6=;y`pP*CADNSV7wjsnDr&pYZjO7n>!r~4NFx=!>h~!g@w;wm7p6(Rj5jOM zj<-)6JSVg8NU`e5)1wMo_pOVkoL@4t8QYOihS(@>u)Tv?N9RnN7n<{b+*YbG_p1;B=J74CXF98U&{-+c~U1!G{lC{m;o_;NCy4@U;JHR%Ub=pcq_RyZR<3%UqQ0Jp# z#zaMm#vbc_D{4>t*4jQ(U_Ln2e>++d18_)RT*SxX#GV*wcGo zbU!^B;=b#2>vY@VR{j2~%C!NfdQS{HN2`p|c2s3_{<>eR(|qMAzEMX|>vg`bUE`10 zagozFf6b&r{%+jPlHBjDDoY7={h zW78U)gNR$cPJb_tyeZb#o4Qt6RlQC-RA%zkem|-^N330{-puZ@dxP!k2-Ay}>a_=j zY4eE}F zh}iOwhjvx0#zse+dN))r%z!O;s=DArbj;&o8+?)4WudG4goH~I47oC{txI@U`{nt! zT@VR#b>NE*ai^Z+NJUN>POwgt1^ayZUH{QNw_Ev>_J!&%%P$UO25X*l@CW(&w zO%%Gxt^HUwfY!lk^HgH|*zH1s^b9>RjlJ-?&7amkyZ$Edf`DVyjmi{F2xV&aKXZt|#N7tsY z^WpGd6Ti@g5v!yzoOVz3)_{$E6)q??DDc_rmiBiEWl6ZCiXqcvkJuj z%9*vmSN?9Tb*ITIEeyrs;WR!0LE5d^dm`@AhHX0=*dgrmuo=f&SEB|0XML)Zoz=z# z6sER#5QMQ(bF!+m+0u9T0!+qso8&|Z-Ry2Hs9trZI%hOPDb*_6o1*B!J!~nEedfJ> z)y~IG1FuBayA}Ps4GI_IU6}OmSN#TZI4Vu9a8iL&R2)r#y8N*$EXG-A!|_=p$}CZz zLAH}XA;vPaTF1*U2(K|mQW5k&td2%UF;<_dmC*;X2t7=|h|$ZYh(f8?`?#knl?i-| zaV4#CIDT{eO`pNWOhB=jmg1r?o#`V^kD((JPTG}8Lv?ib!&Kp||fBNJJe0S9Iw8#yRK2}-dUWmH9vsE_)w5arm03RJ=ZD}1PiAG`4p zpD+h=k&AhFh1Yn4w-`n-)?))UQVX?G8y%o99im1$OoKE;FX$z`r_VG(qx79V&>iZa zPU@kDc#7wUU<6oP_WQMMNk3hO+}@OG?h=JDcBWI>VIbYY-TnaqW}MYJ`b=ncjnxC?m6#y z&$;)`mz{_jxXYC**Qua(PphTS;!GWE&C5zn!{hU?%iTxGu24|H=1}si*#EZ`T9>!M zA9bu2seLZAZtwKA&a^10xG+b%SB-wJ+0J`Xo4mYo`&Qdq8EKsg;#FjIVaalE6kkw3 zR8%^4xhxKQYP#Fu#1X{R4~TPlpJ?yWo(M?n{QiX_b*w90zszG+RXJLzg-&AKP>Dlx ztq!F0bUGc*2=ZzKln4^41thqk zVc`7*8y3$QH`!fjwDj=jgVr|NsC$3I(D!#kif^Jy8ccAmaG{KI-Jm{KK;WK@Z)~1F z`}Z5WxaR$yeI)-yoxnPw0=qlx_SB(ni`5mCEE$@&&(oR*WUX6g7m_OXoxURRQSP3! zCS!E6YU&1;XR#_c(x7Sv1WDeu0V&PjxrS<99yb_IuuXmb!FN=hlm^8|WLL3U&c>0f zy+PQh{Eq}=&i%VV{@*vA&+GE(chk2%_4YKK%o;k2cO$n&j>`00o~F@xmCp2fV-#sL zLDS2|C`zxbTTE}-K=LA)LS4PmT%Ps;Y113E|8eYP>h#o}9~@9VT(iFfyBm^+okh{x z-FU5eKvuJt&h;X$e0w=@$%w=jC!cGrlT|NN)?nmxVW%s#Z~CBt5v0`%NXzv;&_2fn zDCU>Tj=oJk>>_~8Gx*+!)e3H(6l}!K}c}GPS3+(j(u;Jy6>Gi zls%0ayZrk)8*Z)E$!=w&U>|g4I2`?vGYgj_zh=0?1EObjr-X-k{`C7FH}?J3W>mjX zI?=U4Mfbo`URG8_P^lFVqxc#J;!247t z)*cIp9zWvLm~qdwJ-Vv;lAq^Hblf&~9FMr($gWr;DmWO&J%Tc`y-x%Lw*BO(*l+%P z2(ZrF%M%No8r>oHwdnimh({w@qg?(FEPV_5ty|JS@>_51dAU9Y{j;nd4B^33D+ zfIb6yMiswp7F&=5=iWHn`?(&oESoDGsZ-%ZhrYV^R|N-}`h~mFuj! z^5HM0Rcnd1+%dP0ZpdYkyXLvGqYBfK);beG^MELJ*n*b)h>y&AJ) zKe*)332R~$iamedeE|M^aa_7hzV{+!S)Ba#(gn|&lN~=?bssdSU!O<@-k=y_$qvUj z3yu!7bda0@9s(d+rWEO~8I7*I*X6sEeuXiM>+M^VX+FXM*q!ZA2IWI=vnY}B*&syO zJdb2Le9uIOmc^s~K!-aW+e;j$iG^;tl!F&{|84b=3DmczcOI3@6EmOD+?Az798$ev zL+YxaTz5n^QBTidkoSRryhnd2oVh-=#}a3qX^l=F{&1&x86x0!sa@?w27qGhq|sT= zfF)1e>HW)V-4{H*zU8pT3%i#v>h2y(kB&ZgM(uTtpuB~`oH|)ERAut0JMDfI-fmMe z01Qp*-*aI1K|Ol*h>9=zQ=UAh729Qp5|Rc-Onhn-C&_nHfjN{}XUoks?`*!%_<2EMj)J@N zzWiB-uP^VkvD(Oi!$#CQ_QiU0t$7J%R9f>=%Yck!H?qz)yLZZ|(cjGfy3yMBICBs8 zp>$Lp?t|y(JX}}3@;SE)G*}=xB2mg9RQmke1=`b|2}td7Ipg4|-F{pm|6rUt%h z9$(XNfz#r~gCdPCw6f`Gof+)_jk3V>Jjkl@Ew0jKfv&()A$7Ws-`?6`c%v5aKkm(5 zKcthnk@R+ZQr_NX|EFk{u>SEuA3DXPq7m}6zYUbV7r zNj$Jgag)`Gyn3&%=U(`2%81F&t4qHaFy@;VN15j!9;ESQAX;g!VM9ZWIT;dEnV09Gt0qbRowRI$o|I#$Qh{>KM(TRA#UBs%Nl zH!V&8tWFqhQ5kqmOjh$P!-h0#IOhF>tv+cm<79-AX~uv^!6Kw&>b3==Maz-g)%tIK zQgO_iPoA!G`d)ouQJ1QB&CRu1WK=?xFPN&MVEcfy;XB=*4fy5O%5j?~eX_CWo|fho z<10k?Y$hF&pfVQt`W@Q*RZRJox5R`Con{^#_Nh*EGc#lL6m9Qv>i+z0N!6O4Px)zX zJLeOFCS-RBm8h**wJ|fb?Bs$9E=QhI#!|U*bPhZ)?1t9%!Dg4gXeItKdi~bC?B2C^ z-P|<$(w})f9;|wS?HGT3P1UFJI}WV+-TQ5S-0;`dA)P9vZ#ur?WcMZ9?3zU<8*Dj; z@vRnGj}w9n!FQ%wGJd$TJoT%euhoBN>ED0!_;$sM3*x7YBI&$!KWx_26%%fkdIR$6v|@zC z*kV)ZpQ~=j1x_qGi*ntLf*6OZAQpxbFi8J&l{c+a=7iUobb6@OBB+NM&+KipZtvFm zzfKu)&&umZ_SWC??H8?5ZjFp*m~I_YcO*6Z@!@N=o0tEjR;&GO$x**wyt;1C>LbSn z5IZtr+t#h$zlYY3xNtp~xu3t8mpz56ORrL2n_^DoX;#75P5c+r^6YMl&1XoZbeG~v z4)xZY2&t$}#}!Wpb(}V8((K1NEF{l&O?Y7((`4-Pqr31cm9tBZ7k$=vBKPFw>KE@B zJ*j2&sn1nN9?_zH+eXa1)IJ>_jeGM<>*uFFRhuWZZY2Ic0mXPLK#)s^jWOYE!h7n& z7PIBeK+n6{i=qXy?vN4(rYO$592IdnKSF)Nq#BVEu_B@~fQC;84dBK6$2xc1czXXb zPP$h>JHNSgA*2485C5nzxSEo3t?PL1g$L;s`{z_leRlVn11AfP-+yHH9}LlH`^^s? ztY5TZVBschkg=t8GM!iXRXjAUkBLjg8N{!!(Bzx+f(nwwj+{jyE@E0($|+%GU#GJ8 zxS+}q-|xw%7ahwisK%^y&U*Pf)I0y^mKwkA=IuwHr`^m(sML;i7}HrmVGoE}U+fwEg~= zJ?h}s-kf;#{VuJlUV3>*{<-fD>|Z?N(4SLF5%UbS5{gj4Ha;Do6k@ z!gd8Y4RmB$+6%*J-9m^?KXo<)^>bkgxi0aEDRXzGtSUcq!im$iK5b%~tmK}(*=yDG z4)-p6vSG@yJ(Gu{8Evn>@>|Nc4+ScCDv-NTz?*ZH4_)?f)ah*jV zVmd}{WT$?8mFTucb-pkZEVkgHQ&*GOL3IsdYkhmR*VLm&hTN+>f9dww7sh{;wDa1| zQJ%SCQJ(VOX7uKfXJw zX+opVKil8E(t`cBXT7?=)?W(-wk}tH!+-O$cJ8e;|B1TX<>{aG+*UtocZmyAv!`b| zwiOD=#YZ2h?wq5qK=`&|>c-rBba2c!EJsEpd~~)^uVu%Zt=(pO^^bd=Ok2Ogx$?=} z>qj#h-yFz(d_H5?%6E1sw<{kSzo+u*0XNsZx;~D5D&^&*dDoU~omY0U6e04OAas%e z+LTb*EJX$rYRvzR@fO=u8)mY_7f^N6m%s<7?^vszO&3*vGpA{#x{luE4?G&@q;FfN zTW6Nf;|4WkX8bkh)r+saU!`_xN{5Qa#@Vh{%Q?N_?5;s0roEUnzE5V}L$+v4_HL&s zK4Rr1OiN*zj)|x1SEIvB-M95qr>pXVgSyJ?exX9vBQtC>*X`}Q^rd&JpP%8{RsZJ= zQ`&E-JY)Q+_1mSTPu5y|(?RQ<=bAEi=_+3X<{ry>|QSEZ7JhGv&&^}sSnGuVy z+}6Y%v~qZk(Q2MRB z+(6ssq;qXuk*|8l4-@JZPNDtJKV-4uXi&kA_#tKU2sAw4EJZFiwiU#J37ES`_!4m# z9oKDJ*I7}s13@dA#FUHeV>$88*qGs6?$r44?}d#kPRnSdh&^Uh{kzic5hFSd?|t9g zGu^7Uu~qu}={cDlul8B}Li=ZW{Q1kxUV|?kXjdjW9x1sqnzPW-kpX=+DFo+4vFNYo z23$}*+eXeDFnqvgk8k?&{CDN{eLMfB-K*Xuu5YgWtL@`X!>Ox7>*g2acdnB;YSP4K zU+Q%Kp|}rfU9SFz-1)g0wmq**cy-y%sJTI6lm*_qEW$)nHuo%Y7#F8YW_QKSvxFTQ zVbfx`zNoMDTnSD~LXE4hmdmg__Ty~V!YxVdUcGT9w#EG~d|9vV;itJ%m%kkMRNl#t z+Yfw?YuKj6@()}6Ub{JZqIKJ}7^Qaodpe(((_8Xdt!Y6e3bc<6=s-gPPm%2|Vr7+x z&zMb7Xq_pVbkr38%<|OY;1+^WajJIL+zm^hWI3kW(?e&weEgK)Y#*F_-?&r!Nb8DS zBMWMO6d&7s>&vrN{QkoDjngU?6`rjv$ek*ZMd#mW*8043wP#miU%}4h!u7ASznQTn zKmEkf_gZ_?`>;7R8@p$?hE5PM1_qSevu9z5wsQ1Q*7s;=+tM3N<7n0?jV&QLU3nQD}Lc(LCQLHlz#G2vi4AEyrfq)E(fr-en*!2~6qb${s%o`V$4Ny>* zeEDrU&Zc!%x1<;5W|cx#wM$3`e4*U0`83c}VHgAOdQMDstY+=aLUK4;t`z|u2A#wP z!3rED#^W0r&;7>ZAiXCwPp;~WdHBhOEza&sxhAfj9=klT$dT6f)MJV6^mA3#EbVo= z(@)(7k8Ho=G}Sx)z~^lrs=K^Tl?x|{?Nu_zp1JCk+#-@>?{0xm*-xzZ$X-gcW_}&i zwfh&2THDul|NNJ(bWv0HwXcT^c;(^TCFj?@|L*xY8-6BkHBMUB!7}cnYDx<8_eje!&0h|;Tm30F;LYFWSFS%~thn{f8|1=Axy;v}JhkTSGIN@w zs65nc;X2eyO2>_iEwOk_Au96Z>1mG14o02s8$A=${r)yDj;505Px$EYJI;f9J3o;= zcWado$n5fKZk(N6>y?eu)iL{9#nLUV9{S35y2aq5E4vQd)cXAJI}@KcGWh7Og`=93 zei=@WX{B0h@Z&)*Y){9|{E~Jj6l?CeUc=~Et{3m>7~JS#aRy*6xTo$emRdnKp7bFQ zK#17Gt!1*7Rg^ zSgvot3(Hp<8??TcW?inCSb5ZkU3(m>Goj<>OJ0eOOP>Gb>Wfu=So>W0g*Ovh-QRt3 zJ0!GnPb?Ajgl9P zjVeR_`okR=!OL3$md}_iZVZg zs?$;BH-kEAa5*>>l*-m_EdoKwy{RddX1*N0vG>J_=-0kZY>#UtxD zJ{7MFYc(T(!GO(Ux1D6`>W{eiFP0V-SNJgQ-(}z~N}HstEtaYcD~zaA7G^*W>hSu$Bu@M&C62*bv0Sh=oKOhl@-)!0C^=YixB zj>(sv5E@Y;UFIB#m|%2#dIM=4j9?HQNTuw#16=$FQ(oOrBH zry8qn{JL!J17*gW@}b2Tv$dCu0sX^v`-JTs*Nv~~so?moDYpkUPC8g9*G)^=J9O*Y zuA%j(ZC&ui$lf!boqT6Z`k*h5jI6yQ&(Wqu)qS(CHEI3PpIIZb+r4-CcuMbcBSt?b zjqrx_(!?Ac6)JTAs${$gBic%$asBA7_eASb)3B5@Ho`(tR38C}>L5W_eL?pLDBYwd zPYX`^gm*7BC9HGgOZ={DBvI6iIH zqa#-B-2LIAULS~SXDzBRboqCG4eDE_{WZGzi@4Fqq+S_a00?|KD=YvQoqWRuF7 zRObtGerh=<^Np!X-@Wi3G6^m2n>45Etb#@P!)wj%w_@4u$#(T{%Kn^@<>UEreW!gn zyN|o+TVEwM*)i*2;|muCKQS))rB?$0_1vjds%-Ng+Jqnd8HG|U!jxDSikRXU7W@tI zql6-X`Rb*4bt&?ZyRgFr`j0H>jH~9Vpm8xrHq@F`xO(<8cmBN8>Wzsx?UP@pmmQ>M z-uUya8nv4?uh#p=OSXnLlY5`6`B+!A{h;3_)v(T5K>oJ{Q|r_TrefFoSs{G`mrqA53^@A z-~FE^MR?m%w0iB9*XBGvw&TV|H_vAo?m#dOF=iFIh?Th{b0YSSR^W>JNb&lY0p3O? zkzs@+?DJgu1aDHv_F6Te5}T5Cq#9TAZOfG(CXcxOeR7*tEAi)@myOT7y`s%iLwio9 zV!zpc@sZZ|H>NBtJKVpk$;F&$)%sMqQTXQE)u*D4P01yK94WGPC4Z!yUE7R=q+9 zU5Gl&_os$!T@HTVP^SrUc~BFZ$K5ma$vqXn|IGE<7_NGWPt;9G~ZKbs}&xzR$)X~(W5 zJ^c5Fb>BNN?>Ra0O-|^b8vtM`Hb@ijUj*jJ1 zFLykXvEtu4$56FY8|?0Ge{2LJ|HseGmevgnJ~I-=FZCzV_3UO}aDuaU?z?ww!j40h z%IwOodw-Vp-kcdNH&wn5XBEXiu!JdB_vc>em&)~Dy)bK;c>SfDZ`?j*yWC%{@xbPo z{1Z~{jf3wSPH+_DPd|*1hQ9h~e-_WsJ%i@M!6;_s(UZ2ff9=?ZVne61jM|L(&1L)R*akN(+$&Hw1>^5^<3s+Vl* zbE>5%8itv%yGJHm}^j~Q#RwxSjqK^I`*7~3qY;YE=pE#DgHKWd^C6Cuq ze(G@hKRb^+^Z1O|jqmJ!J!#hWwUmS3x~fi?*KE+tw#R#In0jJN^MxPIT;KP{yynv; ze!V2B1%*hl!02-crT#2J^i>6a+%?FDEOzXU_T*b&pLbZT+4qe|({nug)(uWR*0=D; zBTJVjHQi4%&nI6>-BIz2XZfY<+keE>j-O8KTKq@L>Uh@pwI+2qd=e6yag6eihW&v{AGxO{U zRsjYS1F61~aN2PPpTTP;8w=L$F>|r~P*3ecu^>BAEo%F8hw6rx;`Xj=hrM4&JHYy`uG~X$uVsQ(D-t8!5<*Mz^p+53G-9S3D6s3EC(4?|OBV6kJ@$$${JP zo<}rjR2|yyioV|aHJ7ZFdNM%=PHnS`pK|v_a8+ww!$0;+&)73_vkUzrN`gS<$aLad zhs!J4?`7$}M|x^c49+eD-^umJPRjDL2bW)b6>Wq7E4JKBH>4p2$$4%$6Gnrz>)JET zOdnX1{^6dw4`6s8McX9&VkJGdlsMj0zQG4D~wec7MDgtcq*^73ia&DgF%9Ao( z-m+s8GZhZblhX4fcp%Yg$;X-b7F-aRL6;@VuFa4OSv@08c&JbI{rs>zUK5ZAJ(h7M z*t~xXNkLZOoww?RniYbjD_HRmZ?B=?LfM+9V857nO@&@X=+)}^MN)h!0soO6m(MAP zgWH~kl_uJ-C6AJ`6AEIpaiRaG_FM%rl_XLbPv{^hN#top=6IPENe&T&fO#zOn351D zAcPU83M9`HB7;~}P()TGRY?>HPDDs1dGBCiZI(iBUay6`>|9jnk@HyR6f%|Yo35uD zo}1bnY9?&+Jb?>yZJJ9tJUED~fr;`(Ppwr&&#Op5|1Rxr)b9%JyYNsCcp>N@#o|rjv?4JW?0~`?&9DM3afo4gi4ZA)7X`$U+AylfG8i&M zY+J5H`@p`>@WL*8x(_CsN|GMIf-EqMLP#Q5m4IlhU_@}dDl#fZauTg_5+zC^D@yP~ zQYlu&81AWTuX?0XsbVVO zohJ^7;Ht973W!p`ElC9b5+%$K&=ZD45+iaF!4srHk(gBAf~wLgqIkrswD(g;Ve0xf z9V1+6B(Japg%R|XBLzxSVA542tDH&^0zi*K(+c8bS!G0)W*Nkgm}6ATP^u`igeYqe zsbJY+0~GYB%m3S_DB7ne8dOiQEJ8dlF^HBKFkb*NQX(mZqIs4ez?NBxl_^yrSdJ4# zk>kPsc#J4Q<){!v74sEF;owqsr3uWFG$ms24vv&nS)$=OL(wc&!EV8w zBv3z31E6YysHE6knSk^zchFHnuX!XAsg!@#k$@$J!?dIjG{s2@$4dgki-gQ_Bu~>4 zjDwXB1#Thpm++1S!CKKp!H!9j0G% zU<^Y52jNu`!?cq;CR9Wc1cwVa3OpmDOI2ZN}`Y=f z5hR$EAS&SMicAv>4x7jdpsV6=SHm-%Oe*Qq7!?-j!eBFMGU2z(M0lrXOkvc-W5!XN zi>;_|e8Bp`!;ANBwC0ikY~G#a#2(gE-Saw9G%=Sz+h|`N>sDMrt&$;HrF1XW+TERf z*YMhRD)BE_I6^eXv!u#k4p9=zAd$2@S zRW!U!_8T-%aN2L>x{E$uLir&VD@dXg0^Ev}cm+a)0x*avuzMb0k|a2!LX?nLSydF7 zAP9w26i#J02|@xuBOPYxabb{E&7&tSFc)P6uYcCIb?$HS#vo=yO<-}MN7a5luPIwU zYF~r9vl12o5E3*Ad`Fg91rZW2$p}Iu#gmAaNX*LwgcMqZFvF{ytZ4BJ=zvI(h+`y; z!Rkn1LUE$#i^_g3#xVjT(K5_7A!7*qDj})_i-Fsah-3&P$Rf}2z-B=J0)7D83{a5b zWSS%(0CEwcvLaEm!l;TM@c`r;;4J~53S%U z6hHv(D^ntHAaBhlPScOx+>MC87u$5R9-cNtYfi=EhL;AA|3s`XP9cOcrVv`#a3jg; zd1ZoE7vVg^b3ZB^4!0Ru0@I^q%nPI{sw%vGXkg5SW;M$0<+Y3G5m!U$RSi2 zQKX6qpr(MSTDd{B*yU`$#dv@Dfsypti$u!6Hxz2niJYjX5lkkcxAd=UBjONN-RC7zVN|LHEIt z02W13kSQ5667&rEhXs)V$OU$-2pGh27&1c0Fd^u`2zf=N8Kk+CH*rV^O(T2*V0<+= zNu(%_7g+FCEnDRTmIueA1e%gn6|s;plMq2TNSSyH)SEyGa3Dnj$qYkF0t)k}@`hBy z%&DTJ8YYm#VhI9|B$5#O7*-S^15sFrs~pV`B1LnMw?bBlv=9rh#6W1lph<|nvPej@ z7N)#Toe<*TzC<1DcZT#tz_cjBJ2`@)fjh7g&%rD+Ff>jPLF*X)V@QQkRE}UF5tezL z!~!A9insfAcS!fWkOPy;r+VvKBuPU&hLlOAB}l>;Ugkx}#&|GHhGQV-hHMPxo)KY` z7yuHJkP|CdBve_e-GmoxVzkMXk!Raskb9G++}qzaT4o<`uqM72`_lzaF~UShDT=z` zQ=rNi<`OYLTPTJmfWKf&6TmPqNpgw`u|{PiiAO9)1Ni|?4}>1FT~VRIs(|cib;mG( zO)$h=-?WgvX~8sNL`q>9MS!#crij-HC@Q3@il|Tm7%D}n9EUlrMnRK2FYrJjDMN{sA%&s|nFQCtNESsJ$uglJXe0}?gk*xGI0Yt<5J*}> zK>y-bfQb5j`vxKSYeWzdB${SHbr_x(L~sO+F9Q)}NLC^gieY)pV^~#`XvhZv09Aqp z@TCYzlGQLrNdjXIUGp$7TmK44l&sJ*6U&o zqZX0ue^Of&Gb_UB8bu93VT(RY85Vsic^0p|--!)&GHfXzq)oJa^gZL**c6Phlu3*Y zZTk`xwI28bHOUMx~P&CwJq zfs+F_lSGMN8OTayi6P)AUaL0?tX9PFTT^JgS$EMRlY!Xl#YGUnK&Vh98mo%T0CSKj z$b(ctg5WLk0+JEIv7`c`WDo-=Nnzkyq5?@aOUqmsq{M|5S}J(TBKpE)>8dP&o@)nf zwbqTj2*3pFhz>+tCJY#K&z9P;yhtFH!LN)emfSy5u`IS?r0^R5#SFzl2EizbDo{X_ zNcatB-d2>whZb#4JZb+>{`} z5C}%WJkQg>)xlU~Ra?*l3#L`1k}5|lyaNBA2oCHBBZN3LQcQ)Y2BDFaRGy?cf)?Qg zkO_$#+i|!uDVcz* zOC>NXb3Cif2c&<9QYi|?#SSluAfeido4^a+(uYhCT2W48@){4KWEv7*!eIUC zU#WS7howf|2pS;q|7wWxF9Xp3QZ0ey2u=Gu5>!rM6-X8sP9!;jqYzR>njj>e0@};b z8l)>cB=?jgNRZbFEZ_%6X}mgglnKR0?!y3ol0b@*f&gk5NDyV<^hjHogftYa2?#V` z17t1~B)cpGEDU(WX%UXl7_}^jj7Ubn01graNyeP2VxY8w1a8Q4B&7lXkch`1isK<3 zA(F)ql2olo4QL^Q|C1yzWDVA0op`)|5Zb?eg*rBs^d`;(A##eMKvV?)Q-M1}&J0-x zBavXYgv?Vs1-zPM6$&y^47n)*+JtPKCkaS=l<>8>iXKAkbhxdSAXlKn;*zgH)RY=e zaJfyl%6RWa{jNZ@(!01ohONkXOPl|TtHHWbq%DxGYn6@Qx(`_fZ%^`Ngt9B&tfL`K z?vf=CrDh4nI8A^r%3$tV_6``#i`vRRr17c>R?2F4tyPm*np44punL(Uq^mMPAqp`x zpe=|90g!}nNC}kGyq=3B4jhSx+)&#-#0r4NEC;b$q6MIMw91MEVtA6JWTe3bMgq$t zPKKnFML-mNt9KQgSVB&^c+4SrN^40$z#$b{fj=}lNeK+N4g>)LyiSI=z=@(FvJ}Tb z$_py!#|pB6b#wqDA4RUtf4{@>mLgn5bAs(@PUjwg@;GbIU#<0x9u$}AYV%@8DD zABRPNdKeG^Bu{2FPzAu$O2XBGD#~?OL-v{#yWvxve^U@l3&TOwhsX>%f$88q@GTIk z#HcLID>RECTF5e?3JR#1C$+sv3XniTWwFfb&B9oFMs8E)&_}8ygffLEDS>4e#Cpo; zT0uq>d4{1O5{Z&30bvDOAS90AkV^4LgsU`5ktE0{w(l^(ct2vmk!YW(vjU~n;|UTk^p~$f_F=|*vSqKLR8B-3 z2IfZ+G|UpqN}LLeP@qWw7gB{37SjZcc#jp!EW~$^g(Zr>Kr$3L5?3IBU$Bs4s9>^` z3`T$yjsrqVYV|`&Q3*yAwDl9nS%D;o5(il}aClC`TzF8M{qP(~Qyah4_f=~oTQemVtsda^dL>^HBA3pnW`kGuq=T0#7 zT-mB}|9-WID|5Bz-`%>)Lh7ci=E4*zv`hlGQ?)IjG}sA6K=up?BrU0g1pcT9JWx(d o@RW)W20Q^yDC88xDpHn~$mx#$Y8So#$HbCg>puB^048r9Qt;U%+W-In literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/plug/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 ucmZq9U`}MrV9I4+U|=)UGqlh%$!1_OvMA?s&B?6DEYkBxt3%TLR$-P38dwdhCpD*ux|!v5w#?-f=d-l5CnuOMbMUy8YamkBqTHABq7jeKT)uz zS{2b!gA`d@ifBs_(O6qsZEHnawH6*KJj{OzLpUskw%(OnnbC3vqm(BBFRFz zTuZ7cxx5NDnHa6YY$A-bk}}X*JyE41XogVYCPLLfaz((kCU2y4PlZG3x_|0^H}LIK#P5kLsw1fw>{K@ft%!kL`+y%E97t72EBnH2<+vC>?+swTcM z3YJKZaxhpb6@YiDGywu6Tbh6ZLQ5UMyHLu(fN;JLf=kAt{BdvXPz;3oZK#8Q=OKg<)CCnvF|JL>MfsjmE@qQ(g?s@!kRn19 zg%NjKDp2(Ts)7nWhE?*h#Te=>slGsoP z+m3k)F`l0-d+QhuN64yRV1Z;CHM~9mo5c6RjsguYTOqrGH5$P4 z0}O9ef^O%4X&`4l3Zn60bLEYLV8oZ*15^Sde#0za)&I|(K>~)jLck4-<_Ew?(9k>> z%*RFZgE$LKOgi`;P?CXWX(Rv_fDhmb-~iwW;4w00`9T0Mz^D!!pFgx#3V34x#sRQ$ z|B*2ukT1Zf4fbDf17LNW0azdG*dax0Vq-`IU>}wrQlw``ISv+N^oPS?FmoI^47h_1 z$i0dT;Eg&-#A|92>%NYRX$-75va~yeQnL0U0oa^^0a!n5e8Q1&AfRlVET7HO3xM@2 zkbznN=*A)c9N>|YXC&EJU=oEE1 zl(H&MQ+S%w=;41}oAn2ZgXJ$pK*y##Cy7)8a{Os*j(G%Q1m!3f;>-|9z+y*=9x6|) zBd*1lJ@GVdA>|`wjgbS#O2TNgIH?)R0N4y+aRXZH0LTa$2MkxXsF+O@TdhFlV>1|Q z1o=THQx%@>10Y82C; z=8E-N#qdB0im!;s*FkX#jTVA9%ZpOMPsPcv*s&;?IwwWvD-I-`OPB}O39Oh8{g zd*LzDoXlHh#FV{#Ym?KvDFMHJ9Co0wb@273%)QYU5@O?29?qxUZtFQ1XpcH7^259m zn7iM*L@!GyutvbEqtCq{>)F~JaM?LDY|A%~c@5nSiFY*Z;~oz#%l|g~!7RJ4Wahx9 zvtBBHNs?xd)HkV z?pQk=S5Y_qZd+ThhtXJl_MM_->#q;oDn^d>q$FK#m95~kq^#eIIRD~YSswcJWL&4e*s3C>W|^O>taedgr%}BBKAHXKmHm6qTx(2Q9n~Xt{!0CE>x9~s+eAP8aUPk~ z()z{DnWxh%H!(?o>*sODw>OPV&HQdIo>nP`enaWl@{ivPpLlug#aR1pmpwIj`qibzV_BYxO2;3+|M6N_-Y@Y+Wa8P* zti#P0@;f&ksPSw!myLHm>1jEf)#^KOu&HiJ`qg&NRT+JQZ+tq1th>K!^WL@vZ-gB=R<}^?8{7Ry>Kk|jomkAo!V4g zUxYn=GO4dGBzV4^PpET=Ee=G4hG_Rk?Yl+p+aoHu(8VS9dsIrZfHV^Wuti$88&EPf0f50Nci#&tXx^25fh z=0jV<26PtehWwf`v3w<(MxB2zdP>lyq@8x8;Njuq(pwA5UT^RCEi9?D-THPqf3Qd$ z{DxnBR9e6md)DnUQjPsVbx>jYdGYbjZciGsI(|=An2Tz~4D?=;G4i9X-{PiQyGst& zZ77ThH>{{?+VR$nmwEZ=Ur7>@AC12?cJXzW&1OlK7Je-wEIZl zcFpX^-og78z9{kU{X~B6GwciB&e7opg({(|7^^E zlPu`oLpcwNN0YU1!PV99-*_W=KC7tHrGQH)*t2N>qYryuK>%Pu@1@?3-YdOVd%JsY b^mg`kLFn^M2TCuX+4U{}8~_KmCy?~tamYi< literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Adapters.Cowboy.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Adapters.Cowboy.beam new file mode 100644 index 0000000000000000000000000000000000000000..9d591ad3566a38cec68746043b0ec0b49c096225 GIT binary patch literal 6064 zcmcIo30PCt@=pj$5)FnV$PST3WeWk(BB)$IRyRaY5io@0LINR)StKkf1sB{=iV#H} zh`4|VqN1oM2r2@WU<-)gRzWK+pjFhm@XifTsgJ(;{@=g%`{tgxb7p>L?woaw*P;M> z6iVlayQkX%H%X8a3WfF@931=wYv9S_%D5t$KTjG(b7M1w5?Carc?jYn1o6oX2A3Zx zU@-ES5{ZZ#A(g;lAxjV|}^pf z6w&|+r4kERA|T{B0mu%JCYmTmsgO*GXsQdQPzOtL$aK#P*bo7HNeSAWdBC%LI+_k$ z#*onvL;`PrNCmvZA#W5YgpfB86v>b`6%^?Zh75ETQc>tUbs~X=E|U{gNUwhVM( zgi)1KRZ)b=E|?x22v2Oi+=^DHp$Jon==+c=Moz~Pi9~e290C?}G?oadOjCylBs5k_ zDT2^g(s&4hrl~?^6o_mNVI1ZDLvRENf=3`R5W%Xq++H{C+MQFIzuwhr0#e+9Wqme$P@@;E>9i?*H?n;T_)(Ev3dwN z(A0-i%^(UHGRMf%v2;3+7|8PgG8rHn4j~((u|`8OP;2}rx zenGCr(jj0wNv;6M6e1dHIvmCO!}jJ%d$Y>~Gc?w0D3VxnB$WMFqCe2LkYhpk@!BXf zb~1$5!pN~&3yI-q>=Zec1mwCvK6N|_1*woBZ#t+YYfwRdLS*m*5Z(X?C|G(jP_jhE z2i^#9R!Hv>)6rP#ArWZA=1ZSrZIx1EAf?SF*kZuoS|Skzf&%3mD@4j9KzKj|K$?J5 z0BHf500=#bR~_a_phRF09r7ri0(eA!A|Rb%UJsP|fDlXs-w+UDJJJ@~Q>OGG4amj; zG6IBP*bMWaKv@AA!8Qf_NSnsPJc5njj`*cJ%p-Ed7vw(>-;sKRN7_f`+sOZcXe<3g z+Etm)m4KLFA_0#)YJdc(Jn+VHRO0YomKi4ct8dI#->TqS6i=ds91q0E_-j{@u-HxeQ%ghYO834+eI&97 zyvbPb;;-;W;{VMCqk0LkG5xxckxu*)Y@{<^DLeC-kOwnC_b}OPs)PemBLzI3AP($3 zRInk!d^XHy#Zx5$YP>)yqQ-J%G*~8f##6zQ=saq7vZ0!;okO*!(M{Lj136srXlw8# zf>%koBA88$h#wjVU+v8JI1ZP^K^mdPGUKTcFjcw#QQ5$VCE>+W1tQP|BVRQ9LV*NU zYV!qDo`4?(i>Q1Uzyn8z+@=cnROg|M^A8XjvYMDH|Jrzz>!V$b<%*Gg7loQHU?FSJ zR6xkQMCLRy4{3mqd5kl;4G>z5ZoC3}nF(}MT8XXY`gvxUV0-_qH#}|NO1T&5g zP6NvGiijZ;30SaL9EXb(31Wd*1jkJPS_lK`U?CF-G=YFAl?WKzSma0(4RF=PpeI>y z3@XSDj1!UAj?HEAnUUN`yCs512{FozFVc0-{Cg9D7Lxe-xZ6iU4?)gJ`unJlMuMTod_E@g+U#p;|o$9x@5n4)ff z1*YT<^kKKWqLx03-h`T_h`O<2MM!bOdH1Yi1k9yulbYk^oz{sKC7}`SD-Sfj|1noQ zkkgj|yXen8@nC9hHg@Occ&VFf%`0c=C9yEBDQ-^h_9(REOV(_ghNt>YZ>)U2dK%l zib>|~vR8&H-3$q9HbL7WJq&(-pop5Y$ymQogDReLiu4%cRA3Z25gIpFF>uQ&_V5!& z?ln<*)V};?zT>-JcHX+}MPlf;g~RjiSe#EBb03 zH$|PJNTuT=tPkjW8P8T{RrEa49T-2!}f&crav3ou({FDa=NjeXM%tD5Sh?}gcq z>do2`f0|F#KmW6AzxQmizc)W&QNaf~)+aq;@2M*ROV@74f8o701@H9^esalT#=)?(TBqbg-pPdLXZZFP zGB&z3&+YL!Z{4_%N+~*#^XejBAgS^4b0BYzcIzz)Z}wD_wC0vBa_%#^6OnONn0cVD ztRSRrr-JfH^M=+W-U|Cxy)3umnk`+M4)s7!XW!$wE+o$C#!yBJ!&nn$|zdbu_@~juzci2CFaByq;!Lqa0j1Lb4Eoh~;3rcNY;EU&B zd-(j@H$}d>%qwbq`_F;WI#0zXI2rfYCO2Wv`r5El9rkHeQz@&v5AIz%V}VRfGUuU1 z&E_NX#ZFsR`7OUmHSK+9QM4~$^L3nMqG`i}o)c?V?0a*r{Yt`}-;cGIu&ekTO+6U_ z`zsUujrQiAPZvopF$Mf0sq zdvhI1(vEBjQEW-;nL-lfgdY4i?jxPV_RdwvU*SV7OyN0c(Wopr?aT0@=Ru6Y2m?y5>ji(Tk7H;!r04- z627zW3Th=M9`kv#qNk|6=x9Q$XY0KBdfTf-TXWOS6*pO#7M)QmPJ8#;gXBJBqZ~=i4`t#kuN>bBBk<$o2l3N`s0Cg zf#0^Gln!x`+R0_K?5e#f@BJ6k)vUx@XXmutH`i)k^2l84jgLHI?$0_Q!rf`>c4c*T z=~R+h?rdp|JH8zE!dg4@WbX2DJ(hcTCs3t(Y+t)tR!17tU-WY>R>L|6#`s7#ntawdEOQ~Di#@(R_zrOU~a-6m&vbXqQp z?m2PaYTfx^Pp(MUWK{md_GyjrYwRtD-%JRuSUR;sBRZIPW8L-ln&ZyPrmUU)#O7jW zSJ<4(c20B3I`m|{iTU$(+B&@1rSU#>lFMvn=mb-V+KnrM@g_ff3{ZU1fG9K9g57nl zfF%YS^=4$hQq_><6#m4RS4$_N`aj*v)|{K9<+e3#VfHwWOW!k~^w~$Zg@~s=Id|~& zO?Yi0`LVN6fk#qwLVMRI&Ep4RJ3}`)25-xY49Tu9Y(=&MsL69Y6_gwjE^&;FXO zVqxb4UAJ7_l-@QXfjJ*9LICtV~Acy_Frc{*re?C<*B$22y)d1U>X@$3rC z=J`(p4X2Grl`mcQhTM9n(iP(ULC-6(;*DtE>5JzD%NFI>d{%wMTZklFo-&UZkmf8+ z1t%6QSb3$xU~ynp3@l=-wwC}6bezWUJ`9jH99~h8t$b^O><+R-7uhT#AhzQ~00h%>V4qANkE+`hyv(>2H;Nqu;9k zfZs|?(1Cx7t}>PnW6A#3FJ%w@$0+^3`t?tZhmjO^ z%pm?^!Al$kr;VG4n}VB)v&K2%rlSo0O9~hmFGR4BY#Yg) K(GvzysDA_4ATQPc literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Adapters.Test.Conn.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Adapters.Test.Conn.beam new file mode 100644 index 0000000000000000000000000000000000000000..5a2511723456f8c0049c891cc07b585554bf2e0b GIT binary patch literal 21560 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%0ACer^YSqRHr2BW0?5%5? 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 OLkUncex!*Y>;C`~PWE5` literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Application.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Application.beam new file mode 100644 index 0000000000000000000000000000000000000000..70e2a85d1c448322a89ec2d4895da697aeb8810f GIT binary patch literal 2648 zcmaJ@3se(V8lFj_g!o_xDBuGr7ODs&L6E3b1A-tG2trhRg*+x|9}5` z=fD5G^O6_JAV{Q)j*Uu;VpMVnf_~}m@BcyQ6>G-q7!|5CTaBSnBx%NU8U`cqY_%H0 z4TM@YmKQ4c7cGbw3CLoq_+&3HaQ9kdi>Xeo}eLia&U zs+B}38%7gUxzj{##_%i!%@Cv?kyZPKN1z>%o>(*rf$u6rqk+%ITvQ@22o@roYeWhQ-3KTH7K&d_ zDD-f$-hlO-HNt}rr7~0+x4`)plIz0(1OOudMgs5v+yTUcvIpor2jy2|;8?rURsr}S z0A2tv0B6I=+{f)Bw|^YZ`E>)}d=DG!Ii9xwW4IW40Jx9yH7?f-T3#lP9pe0#8cq~& z|55{+fM#^A1+>WGM&@$jqu;8sPOrVx;Fu5qxM@yHK06H8SWvy1(P+&mJCw9)K>`CG z2!(3&Y8`>=tQ3XfItMEN35aq&qkf-Lz}d2Yb^?GGA;?;g zZMm~Y$+tY$r>*(T1VVAuqL~^SMp!B5C{{c;@f%0h1Ol5oA2$FmEd#p)>|AUpMT0Y$ z1@WhcN;!fcooAGDBVc`SLQRtz76*IfJlm9-qzD~K)2yq3A}oNWP}U8M;sl^WNev)I z0zzYD2sLKmjz1URP#VOhL$jb1iHZhuO7xfp*BCH^B$Y5QEU=Q$nFPULxG@B^p*SNU zGYJ&O>=IB-XbB1GkHm~=2L#RQLKKSH!Mb9!MhqlMd#)0KTzu@MS5%2~yA(<6U2|;y zvW13nm(6AQ4gXeFj+2vj&kw2mxq4ThHCR>je!;ka{*7gqzeyUick5+x;@(S#))MR; zQ^ottgURQwZ<7{Ju3ve|Rd_;El0Dk-LlUd*spxyQ$_tM^d_DL`uy@Ypb-oSl-qb0> z=WP$4-S}?xlZxOWA5@_URAf-vQde^E=_`-+FFii1!%xQ(>0i3f@@@@G@F@(}r86~Q zJyn}8btj|;E~b~{9!n{nl5h5?P?l81d=+2YklxCF!kdO~2p#iy?81kYh5u0OE^X#D zj8#rn`L@pPJH4y!R6_Nz0FQ^;4Wn!It--e`wm7=^U2m$2{y0T*HnC^?ecg4F;05%| z+xt*L_wWyIEIVT|`H+rKZ z{hPJFt}W8_7BsH??)JeB?V*)OUoq6p=Lz6p)?>pdg&$MS! z%BX^!w|_j-EzWRV+tz1o>6!W;ubT9(3n$Bz(b`W6;-c*nMbUHSY}t3Lyrv|)qx$gI zkvB`eoELg(7h$`ER5w1pYyaZW?IV+{+wdR^o?N#M>8z^O?(w}gwX|i=-O2Gmhob_Q zMV_q_ti18Un6i6OL*9FqGlcP_QWV>M;Y``Bh^YxLgLlR= zAI5ZC9)At)4SW{mFLZQw3XZN1IFCx}=4I^(H>-He?xHUB(N1x#F>x2Jp zIayzL;6z(S?@nTl%et+SA+twb=~G`kdVEzElNXh~A(6jg+|ehWHa8VIwtv~ryOzCF zWmg8&RW;v#Z|}s!6j4)W`u=TVLb5+0uk67XfvC256`S0my4cjXo}UswBM*upbTl~l z2$$RNC-zcHeqvISV)&+~?XA(8Cf6mSU1!`A2Fs!7>WPtEOkm>0Pkj!yJSh&0Pa8F} z=f$l%N3Sd_Dk)h~_I-K&*xtU(CfVhBm*!p9-OoksmYdIYi=__q>rUz^+iM7wo0!8X+E~qZen`Sh?5gWVxF%3kSYp)z@BxU>2WjCP8DtifR7GzZDW NBm&?Az;68z^gm5Wv8aC{Yj%LRGAgKn2A|4UZrS%0sm3R}CRql0cFT*$n}$iXy%r zRK-dKiwGiZRiL$^SjB2VsS31OML<1%)(VP`BEC@ROcJbm`t^_RbkF(i&fI(F-aB_@ z?wt*fj`Kqh$8SRq4{mG<`b-e9{)H0pG%C@)5x0pQ*gNCsg8&YW;W2nI#uwOgF$u=NSa>(e#>f7K z^;r?1Y-h7P7f0FLd=3xW$>Dv3;cx^`%mW75ynZ+?#+YJ2uoZ~D;Pl4?_WTeG$GAA) z_Q%BtFd(uYXwPM`aWPOc07k*y6+zi9a3**R%H~^0fH|sNO2LQNO+faTG01D7I z7L}x%b*#42*@E{bi~cCi}k*stkFjkAlA4Yo}$f+h%)4pw>hT0l& zJ{iUakObh0FMl5i%OM4P}UA*CWoTCG$15NTke3H2(H(5cgfph{6fxQT=s zb)u#5dSg(&L^|9JVTnpL2{Y^SyK^qVxBV2b=1$7%57x7N`?nFwvAsIa=_u#$JCLsrQ!*P7o0eMz9}R) ztlz1#zSDMPh7D@gCj<&YPM`HWo|9dm+FgITD*uzu%9N#kUd12_1SvDPcw_ZBPY zRcXN7suv;J)!qT$T+2CyjKbCqcRIUd(~$T~M<+w8*NT+#bse02BU9~Ib2BRsc70mW z-BegVc-8M~HfQYpi7{{K;C|zVZ5ez1{mnnroWI->-f%70?)ulhD{B^KH0bpGB$T{*nD- zRz4iR*fDl-Q1;Qt{(n#f3#RW#+FaLN!PA6=6{m$)d|M{ySXSVFbYZb3#ybnYa$zH%ks$0FWbXe=?Z~8Mw zn)G|!x|ZCC4ecnJ)VbRK5YHxckh|-P5l3H!>ap_;RXf+W9?biq_xX;Ci>fb8*nQV; zBXgY8X%#E2c?}EQ7(MEubFDF2=p3ym-F&b6K=iDl3TomfnXAy!|2hPnHM1IRyO8^U%D5y{^f{m@5|Hnt4Ha>c1d~3 ztGqusb|TVK_xr&MXXkEsGT`PklABuQvA=Z!Kfj_tvo|=h)qbP+&PS-9zv*^~cv?pV z)vug)sPdPQ-Dvd|-Pq4-+J9;J>UqX&>A{vUOK`7JXGT_i^O+M@V_$VOIr0xRoC^8< z==F2QCU-8dtDe;|+To8|<4uo_+$?<=+0gp|>*(bv{=$)~Vq94FpB=Iv5lB18dW2`3 zN?$e~zd;|a0%w+#Qy`hi;hDvp((?;8S4W=|;kCcmKC)p~lrIb(g;iX>-Dp#`=tud+ z{SO1uZd^H$))BF~w_y9XlF^0!&Cl;0>nWI==ky}8{lf5;Mcbdv+*;(4#FI1~K6#~y zvwgYxz{k7k<*kwd8=D=bBtF;|a%VL^j$7hB*TZ|mjHY>t6|*Aphl}I9V}h2~s(71D z7VjK-Am`-l+x2q>h4=jQBR^=t1@CP$RJlDLv}~OjCH8Jhd+0l{#_P$J`6bM{b*iaS zAJ@n{#3rR;Ps75_i35wbrF5>Szo&1}h$HvMuKC=5w2u#w8|yv0)8@$>H@W+q#Y=uz zw4`c(ysKjJ4DOw%+#_DgMvkE~E^YFUSJilQz1*{U!KwQY!(+2K-cj`#Bt^VkBEx;DT+TU?!GaLsEnSGMKMRsYQ&HsHTCW z41H6*g~gQ7q!wy7>Oe`d(Eh1NC%;qU|F;(Nbtu{NW>tRM8)kAcs8a9D8MVm#-JH!6 zwXkg!89JF(EeAIY!l1PV;~k<|^_%yZe^>KgSEGMTZ!!`EevQET2?6>ZcwdEg7L;o@ Z332)Ra*V`h=;6420Pvo}aOy?Ge*z?M6}JEY literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.BasicAuth.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.BasicAuth.beam new file mode 100644 index 0000000000000000000000000000000000000000..245be7bd4a8ab2df80bd1b51f00577978ac14ec0 GIT binary patch literal 9316 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 VxJX1iX#M(NfBfJ=khuA{{tvh6G8g~= literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.CSRFProtection.InvalidCSRFTokenError.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.CSRFProtection.InvalidCSRFTokenError.beam new file mode 100644 index 0000000000000000000000000000000000000000..3f2c8fa3b05c2f0f0ae37de0c5e3015a61f85ab5 GIT binary patch literal 4280 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 KUN%mhkoezYP0VWm literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.CSRFProtection.InvalidCrossOriginRequestError.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.CSRFProtection.InvalidCrossOriginRequestError.beam new file mode 100644 index 0000000000000000000000000000000000000000..54027aab26c6ea1e916655c648361830c4294c14 GIT binary patch literal 4256 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 apui6#!5;#O>o4T$*sp)b{Q3pKL;nxnA^ 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 J;Y9@g{{Y0Lz#aeq literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.AlreadySentError.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.AlreadySentError.beam new file mode 100644 index 0000000000000000000000000000000000000000..065abefb38f6f9d7a6a2f4002d0bb5b723f0b662 GIT binary patch literal 3624 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 Y=&P+3Fp~2%w2ln`eSa~V@*Lv-8%m7i?*IS* literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.Cookies.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.Cookies.beam new file mode 100644 index 0000000000000000000000000000000000000000..1f22c3522ea089b5f3493b909e0c12a975c0388e GIT binary patch literal 9940 zcmcI~cUV(R6K}$yoFLHyp-43}MQUgwAbM!hk=_(SAOQj)2}x)QhzfR*Vj+l%f(->J zf})=dR4gFHE*3zspdu=W=!@PxA-=C)x%a=D=b7y6Z)Rs_X6Gztmn>ZtV2;Dh?Qn8+ z^l=mfFT~*><6pmiHN&%AStRzP7hSDi%4fuK*mQnwERDrr(`h_dlMZGP zFq0Wn0f!pTW5jcKOd9*Q9%2M*{uhX8{vH)g2L|bk3UQP^G%khBNC*C7C^dwx zQ*w;AX}|+2jmrfNQD`hy;qSp|TsDUqM`N=3 z#e*3cv{(Tv^O9I0jmAn9#m!{La~a7@0hJl&7e{098PTb1J}r(>hs8>bWzkak3_k{s z$KgdY*qCE}qM;O!Ae2iJB)}xG`+;B~*kG9wXgq!)h!W%!^rNSJi;iKkX}rv6IwzUN zWOs{)IL5{@_U1xyw-Hnt7~m`vq!X&{Kgm`tz^eCA39 zVp2El7L`lm2`*v7Fe{kpx<3jEMogxiFtacLm1#mT`A@|BzYq%(SkZ*ZW--|ey2<3ZKdNIyr=l zk|c#>83YkhvZW9*BniO?1;Jkuq7n+SiU_{j`YI%cLr@8l&`**~RE7~0hwm3g1E~rH zKUyt2n*u@2L`6uYP*yb;kyWEeVhP|O2S;=v?du3 zD_6^Eks;^^q)Tolsz54a**Q3rgz2a>6IK65B&sTC5pgzfel{MSJ?()i=CiIO3jOKx zQAJ5q5BLm8QO1G4YQjP=BiRoRtAjlGVR<6|ZQT##DbPMN5FyS{=`SK`9UyAe6SXcA zwR(tJU?xqFCJj8SAxH7UQsbkOCPbQCrv#!qx$a*0G0(dMc=_E>X9YsEdbnMdb+V`4II( zNvIr-EF5i+)k8u_ehN4+P~Vz37vR%NF&CB9hlDWVi-7#i6TCNRSX#ltI8l6NHD2t%)X94n$KtY=T;0LMxHP3J;rF6V3Ec zJ;;Fw(ryMAAk+gwJWK(}L~?^vU@ch_P?15P9L8lGQ+E z%}AJK)CI(=BttGlY$(`9Kt_<`IFbquWLZb#J&48}xUDQ!L8es@k_zH7t)quUD62ai zp#@M?!6J0?BTb7HMPkcou@w-{7Kx+9Vo6NgIxV#ZQdJ=R!xggFm18czj|D)k_V2Dz z#B!t`afKuxR~HC!l?0>+NDq(|pdbi@s173)(RkQg2y1{fT?kgsLXHep4w-(MfOT77 zT~oAXlAwaDL=|M&O0>komYA9huFipIjfbs3-Q!_vR1v6aNs^m{@El2m=y^;Ll0hyZ zxzldAam7Bk$)D&*Bcdt9C2NR_i--;fh>Plp_Lqrvc-RhgE5vpb zd(^E0YZswzby(|wx?RHB#i(01)-FNa`mq*8-A1w25p{zRjBx^tJjOT!2HV+T7r=;i zDObQKV#rb{QQ0^LF z#9avM`XZO`u!j)V1J)J;Yo4}556BJ>*$KjtK!*f6B#IM+=z@+e=;%`9qA7noZMxXg zCWQ56kZ!OBfle-D5>~SqHWvVHPA&)luq{jo&jWz1lM4<2E+W7Htd~;|)>jnu=Zi)J zVIw3(fZ;TN*_@uo2m=sU1FW$dtOU6d?53-0n!(DB0Csp$?THwy7)1gRNTEi0BilixBLmw|}4MozoY12Zk>b!X{w2 zBN*;yMD!0OQSbou7s94lQsjP6OS;)ol+jS#!cbBLsZ@##BLKsPl0+2|AcW1pU{{d# zKu}@30N}3Z8AC>IUFw1QkC< zuqK3Ap@IDe$lO7wF(3yPcsLepS^)6?+Vp?4wM5zsk$q1figO?`An=A61m0To{kVf_Kdj#pn%qX+TRc3{aGq2Mulopm~5W8-`*Y(=h;~2ngdbdzc*KC6=bL zvAod%Ndoc!gyC3U^nvEm2!L@1gpG*-gvs$@++N(rV#ee+G43YDqcI4O2=`_Rz+Ct@ zSRZ`m05V#~0^d-AM7s3!;e>|A`03Z$NI ztQ5osf>Oa*<9El0gIR+`sgSTI1Adl>C)ksxPkIjCoLI2lxNbn$^XCZ&tDQJNf7aQb zwe@G+xQg`yLF)(zt1mx5sF=r|gT;U_o0x5EWiTGIu}I8g&)=Ul3hoy~b}T@vBj&M| z3`h!)Iv`Cz*j(6tpaKZ1-&tb9@EMNa-T}1prZWxd6-wi?v6aNL5uDc1mqtQ!sj_{B zpKt1EchD0Pan2rWEatAiYh4CAqk`**BphUGN&yCBI9$>71ZG4sT@@VP!O=3EO%-2j z@TgoK2RkmO6XJNBWB~IR>9c?q#sC=u95)&1GXX$L1xI6MGIsNkh&@PrPAV^!k%S8{ z3+974&FJ8cf)>Y&GYjOz3DUtRGkyYxBLIhW6Gj??EimIIa2RZ6h8eg>;hS;6-HREE z88gj*O98f7?DQp!DI+5h=MobS$_B|_2Udkk$|(O3ImuUSSGu2=t}jSYTZ3B@vpmlW zhNQP5&6lr98&mN1L!L)(B%D69w`ZgyE-pm(kw@^z&FqlD)iw_H5B7{aXg{IHJ=8jD zN7(s~f6fRE@US?JW;xndu7(YqIBWo1@~so z>uk#POWhb>liW9OU~YJ$#-RG~Dh4}(-8JJ~Qe5A>0heDkA<-=b&kxILu-$DhHTe5Ar`V^0ONv->!G>w{%HhrL z>Z&f%JvPMlsyMV3|J|RaFzQdYuA3JF{HD!=0wV&N! zo7eiR?nh4S%tvYAZ&Z4`VQ{8swe=0t4|U*dSOm0CvLilId{H|=znDcHt-xV`sWdSJ`7 zj^?HjK>}Oa(D8|2z50c0dsofMp}Y(&rrPlkltl3vwJP(_J<&t=re}5N-(=q9Ni_IQ zI2(Kru&>j@%h?M`Y8BkS!cM+J14`$zwHDCsv8?p$r5}~c)YZ>rp7Ducu{P_U4~gm> z^6pjOWfw*ie9BLPzPC0-ewMoaI)gpK*?8!aclHx15^U*N)7{di6bbG5>tOrIYhOZlK|h!MaA_O!=DA_s^_+Hyr%04SoH0 ztLw^Q^`^4Jl<%D1>(*|wM5RRYW_3dHp3;3T4jb*tKO~)hVdv=8(1`46_uKikNdw+J z>aFG7H21?r+c2g4y;9}|mX{7a!I?ZR=08a?NYtLyRxmV%92+(mQG0VZVOLt223zu~ z2}8+NLZjka>)VQ>`=H!P=DXZ6{X*0EkpmajKbq@%XRH;H=cjkV5mz?eZ@AijCw%q6 z$J!gumJidTEMDvEe^b^usJ7&)qW|PfNgqA0vB~WdkxKQux0_auv0!^SWhdjOP}L9N z%u&Ap->sLdi+7kx&$(_=1BY%bTNBscsd4c8@mB3C@3Yh+qtzo(P20ZjURmqR4#+id z3iS`(p(T%$>{RjirCziC^@wsnaiU@Ig=pWCjh^%$GASjSqFDy7FFcGXPrO@Y{^V<< zy8fLQbN1xY!7_v0pA$Ri^C#~mP_oj)^R&EqD=i)@&zQVzYPKk@Z%Wza=?8SosX1|S zrs_a!lziGn*Tm)@n%qa~#g^7iyXV|Bd+a%Q!F1^BU`Xxm$FNPqg`yiW_j4z4gLA(e zRx~G8l^ZQ*k-x2iHm93E*qbAJ({!K9>aK8lv2{d|-kg}l7A@MZ=7jaqH%{iBXsB9E z_bAbRwfSv*)#@0G+YnhW)@96e7&_Zo{4-zQXMO4RmE{qu86Iwd0qi#uHoF8=og~g) z{V97dyIotCdhFJplJTPpNp>sg~rpsMSws==rWL9SEE- z&oV;3b%(kK-Mg!&23f;<&$rL~v>bnLKk3fv#N9(42eZ|D9(v~GUy6NH)c7h5dIZlt_^Kc6p@j6Y zW7{YVjTZKq8Tg79ldQRQcK<51Rt)aC$|_wv@MybCUu29`L{+`~{p%qQN(3^6pVnNl zyhiE@Ge1X5-CGwr1L08~pfrn(o@~$7DTnsW2A$3FZ}+!6;oj+VN*-YM$WyNv#l@ej zbJf_P6OgurboA)8gtiYo79V@&GQaApB+L?TH>$nnfREO>+$uHy4@SPO^Yq@6?@^=kgWB7wsQ`~rm6@|O%$f`>|z>w zRrDJIG+l?nnXRk^+cL`gw}cAs-p)p(MwIWiXi6+Q5^i_!q-#@p7PH{h(p$PYK`Zav z;QRNR&G0a~Wh>i=-kndGf50fB|N>*F=EdVjd(-ZF@)%q&irIIfid%*pZzV6!A$Le4dro!q zP%9%g?A!39HTC_aPld~&k4aiH1^pSN&ttAzUTIsq9WGFZG#_W!kIhO}8t|`ykvaFY zJ{O#xw=3|KjKTE-p|o>7hgzL6&Sl(a9k(#hK{Bswg~)mn?DZyu-{ z5trD>x4%{$zhHrTzva^Pqq>_8GcQiiDjlSTRpA=;3!99#hUacD*~7y6wa4rn7?+-3(=PfA_?_`a>;YMMI%=)h3^c+wH#; zx1W2f4_gw=GPh=UJT5!Pmca94YzA)JWd}TXTG#i+VoT-@%QmA!39HP4Z`7PQJdm~D zWACgZ_9q^AXJ4Bv_O+DqZ|~jeynWBz>bGM$o1bNS@jq>dxffy;ynO!2$2ZaH8gliv zrnMDGXM9)L7hDEN&mRJBFSNgY8aV3Z98|`6M>iVvw(4{G9G=oVbmQ)$G#8tb zCI@bHG`ePHFh`V(cmFlN12udk=dz%;yL9DP^0`!fef8z@W_~)@&SUj$&d*Uye!jtf$Kyvh!X>81zTTyO$5y{(r+4EQ!DwHR`U+A9w zgl&ZzC{MIeD}IXP46T#dX(69CN1`mjGC^m-ZNonLXPp1@eQ}yb91gGP`0ZUbTV3LP zXQa4&NsL+AZ-u*8<{Xw|Ib)83vYF-a;bn#f@3S^N%{yb% za>OuA`rzjc9uG_R&Y{F%Y;(hYss+?DL3Nn^iDG z$h+v&w)^(QHJdm~oVL6&cTW%4)oy6;GEZ;&w%OHQ!PnpZXmMJ9X-~BQA~#0t*qvzL zS#)#Q;7#pk;ju3f^M=0^lg59|m3jFvJF4q#7xZHpW0~ps^{z+WKd2x6mK2^k*mS~< zY4lu^i@!8?yjLl&ynEY9xJ)Ui&V9mOS>Rw0T=k zMpoyd{ftbb70!;EUnFTtJ?%-#SHZbFmJRiD7lzCp)T^QB1va-XWQ8uLUH`Ur-#Zm; z-UGLUWc!upN^UxnN2_Z$7>}~A4wYTS^NCk9@2!%0sB?jNbGL)zlRcjcTgT6mZNikK z7_*M)JE+>!wMc9qAuRC_|=zAa4Pgx80A09~G z?q)0V^4Zm^C1W2CY;fTb4_s#!>Uv!&KB?GX;q%3Uc@<3d%yHZLtY_U`L9QDY`D>p_ z*tTBKKAvcmr%`e@L9l&v=kpM){fC=oYCZBgYqgN9IV_mWc3+#n@=;QlpkvqVbJ{O+ zCeKF}#YblC?UG^)&sJl%)nAv`sr{;MMX9W8nerJWQ{^9DB?eN}W>xR#9g={HKM6iw zZ_X%6di0=eOvPiaLhqt2%Re~Ijrx@@+mainbnBPpliLM#d%8-3ns_ExG#@$E=4TZQ z=P#Gn>1u*a%96C7ZjD;xbUnqR_NvT^Z@pj6K2?;A42pZBS|jJ6d!zf;>s&s%`I>j8 zSx#uwv9D=8=9eEPa6*-cufC=Q_e8UQv)e8|A>c}$oelN7ZvK=d(Y_IsH7>dJrRY<|!>_-!B^_(h)6`6XChX9-pN)X}zm^E38`9KmZheAyW@SME{5oReht zBt0DdL1Xg$`yZziPA@^ymu3BcZZu3B+G&2@?Of&rq`JiDn% zT3Rl8qrDFEA@|BwHZiZl(y%k-;iUJMH*F8wdfG3~#25CbP_|a7Wh*!^w0krMzZ$u% zEBszHl29nKQzd!vX^PH$+U?-dc|Mv7k7KTf&E0XdZ~fiCaK&T6xo6({pQLYusqy*G zb*ABJ~mXntis?n2kUxbTlz3O}KW$>1Kk9wqDa zZnBTlsrST1g$1im{$!19{_E%FpgXDCPn_GwuzUNtxl}3R)`iwqB-L&B+;e4#Lefr> zS+VWT=gN(C3cTCj2NAOQ#KLTy~)Qf`mnsCpr?`cVsYnRabqWH=je?Zuj}3a zZfbb;9&!%P;9zxLWoL5x`!N5VdQt65muw9?)b(ma>o{%eJ<9st_+_eTXOo}LoTtt{ zlGLicv=@0fEq``+a3b2qo#i&f2edMZU`v2K`Q zTuSNe?(vz2)+n}{ki)+F7k|05GMty+Q$W_;K{sm~<=<3|v^8i?UEZ;CtK;OW&4+B% z#|$qodcG#e)X~VpDY5f#a#t>6MD_K1Id;+$McWpN?HXmY2(=w2J5fcOtsl;`wHIu20rOuxb|td{_KYzWVz9{b!Rzt&uuH) zqh&w#j})lB|J9Q@`|0pJ!QrzNR~nU#t+nL8o*`#{VLvPV(Oennu=V^$#YrzpLe$F@ z9sMN}S5@|YJopQ@^|F6J#Mg}F0Z(F5g8bUIy-=+*m1~P~+}u(*&tS~8QOh#%fxHH_ zop`d+Zs!i2B}n^{haC1rhgUe9Yld?YxTJGl2X4mX8KR#TQDYMru}KUbHO(Bm4#lU- zh<`SO-Nb=wY3vT|_r>(I0>o#=15^t91_}IJ2pf|iA!@|q>6zf?9?aNuNdbeGocKS% zX|uoYxc~o{mH2;~6^mv5&D;O!?EeH4ao*sEC?NQ4fPR0l{{dik?RW*kPQot2Zh|~P zfuKs5Lr@~<5OfK12_^&zVL5?Dh$XlXTnS4F9t2N<7r~q0L+~XmBe)X+2|)C6EX>_2o{6|1RFvwZubA}N)k*Sl*z^X!fwy8dt13#zbItT v{`vWZO2{DO--t{A_W$z#QX>3~P{f+HePmyFuiUO literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.InvalidHeaderError.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.InvalidHeaderError.beam new file mode 100644 index 0000000000000000000000000000000000000000..634e8100fb1ce899986c0e871fcc448314177b1d GIT binary patch literal 3648 zcmb_fc~}$I7N5z45Rl+N6sU*VDl8_8Akj#WhLIAb0h~kdm zMg>Gfw4z8wY^{o@RII3tqPC)~)>aTjo-InPio82XQ0wdazW&kqzTez?&wlRBoO?1S zCe9mzEd7FoK~X{KL_Y|E(?&){ZnK?*ay$p8JYwaVG!Fqu5FX(~wnUE0!Z3*pql6Si zQu!hgPNb3|QH?~crtlPv8dE8yq(X_yu^Jhsq%f&Ojmes@93@GqRU(CKdTFYLkg9Q# zP>B^1DMhNh08y+UWg0mqR;ekCR4v9Rxr9i2n1-oE28P~CjYwqRi$qPv*o1^eA*L{y zMv9eUIZ{kX8&)bXl}eI^>5M{iF^a(CN`tP`LrkBR2>1{wB`OsgB}g!#FhV7wFa@c` zcx0wHMIy_@a$_+%$)?w0V2^Wu6@{m_J4nXe%bgZiNR({5KQnPcjuV&+2mrOw#psR! zWk^8EFtFeC5CowB^m72f3BVjiDGnxm%r7V=ggKH{KhV^X-ZsLb}0e+i) ziNZQ`h8G2r17V?$VKzGB z4l?S62eYm8^42KKwyxxGk!lY2Lj^W=62@ROg72~X2#RIU_JqY**0`0Xe`XOHIM+)Zqzeizon=^ zZ%-upv!nv(S*7a>1`k*9a6<(d)igDJsTn{@pm)SfXK2k|ePI&ljWrC`W-q--=;f#p z2~3-@DWYAXd)(^f^}ekakF>iDB02GNP?<&a8+jvKV=Axt)c&2q_tNWMCkPxxlF|e) zOr?DSOah?Kfd}9KK<_(oN{N;b8EZHtQc|Q8lvAx)Dn%*)nZmSVffPLfJd7@!T1!BXXw;+#SI}ji z4vwV)aY?aED8e&Q1$=tSa0wwv#Zx`w$yBu#XnCsANm7jyY3^7yMyNfN=_E$rIiBFw zP*ZRXxmhbJ;u_7*tIAXjPYzq^0zAU9=o?cmw`9zWf;rrG|>E8TYQ-4JlRap$h@ zI_)9^JH^?_XXSU2rW~QLyw{ zSHx6aR&>wAEu0mokK;M-^(rcLdH3#V?|FP)Fjp%MHLI(;eR`Q6GUT$ejl0lBs7tjI zZY}e8y6WhKzOs9B@0H7^hnl2E`KX5r>sU>VHR*Ys{U&?j;aMNq4!TVFxF}#>+U~)` z&Hm>EZh4s{j}-X~VshJ0;d^9OeS4NBIhqRAZd$O`HrlE)MU3~)L(bU7GW-V9muUvp zb!EBW4Hr*)pFHZ@TK=Qu{P7dwpL{uXO4v5du>=16ZNqry@s`}49f1@-GgfOuy2%nI ztBQwQQnus^lny_ar}+7yr)qT9ymgt+14?QfQU;wSH%nKJDKxJot_2+Eu&7daXMV_k zkkh$x2P?;J$mxTMPqJ^VLl;H2p1g9v_d+Q3qDkZPq&0cpKw|Z|*6z~kAMMUQW=Se{ zWU&|)D51Y1i_>xC+2V%lXAa+JJ@p`|>Z$2fGvwxh$IF!iEs3R6 zXOc4C{VMdNBzS1a!2FI~76<1=d^?`ovt)k2E^TG?sqX{lm#n_FqP~JxA6FB#xcBa5 z=w{5rlO?lTOxMr+?8Qp^wF#%T%;l`u%1)Ye?0aQ2CnDuptMqbAar>E*^Y%0A`#Ofc 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.NotSentError.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.NotSentError.beam new file mode 100644 index 0000000000000000000000000000000000000000..e895addd6c2135fb202307931f3ccd984d1cf258 GIT binary patch literal 3664 zcmb_fdsq|47T?Vx#9(lNAa7j3w?crTTu~$tQxFj%LbZy9JT@divT=7qpj4|ODi!Lh zRX|WcN)dd3lzQ>e`Y6>}zpscbiWKz|&q<<5j)t@qykb35Pn+nG7%%z4aY z&Y8R!7axEic2NI@In~i3xe_W_l4p*xq<8QXQo!4uGNz&AOMz)Oh$GL zEJhGSOsPn)*HvJM1Hg71U;+RS#fuP*gEx*6bFq({xekH35xMb31xY7vH15i+kQ|?d z`imkF%n=od9Kcs9io`*eEQ%yRXAp6~cfAO61k6|hL3dc=d;%>i!Z{9i5wuPe=@0m4 z%~Kq0!Gryw3j~hWB0kOt;5rr|vHm!E2TJhlarDtFK91p1yb^OJcn+8Z<6zeK0LsOK zd$18J1j@BH%RAsG*P(>(i0$V)F2iuR!cpW1400XE;J6605&?n@;eUWHzzCjm1cqY{ zIN%C!5dsYO^IUiiR$N>J)HuOi;JG0vcN~lam!e$fVG>}vj93P2S2NWe_~15&?}3E? z5G8zf#|RAZfd=-Ca>V?d2_NW%JMK@I1MzT-#YHIB!twJ zUce9$${&v*$WoS0fQPhDXMlYSfHlAv06qW*U@QPUOCXIn0tf&g-3efvWenwA0Z@RE zwWuW1taCY_*#Nj%_%4<)=*;UKEOgl0TgK3)on;LDfMeKf0ibPYhx4XU4}JEq%-tak z0NOD()N>sXqh)~%y2V1W0{ym}bnxY{@ME%3k!rayoi$m3n@XBSskLOf%EXt+Ufw>L z?9Y-qur63m&>%5@J5LfOIYa14Evq4Ef+1N#Pr+W#5^9>#5r9l6L6#xSDPlywjpatC z0$pOWJ60NwiTB4%lq0XrQ7|9<(kD5bjwq3%P|dg;=oo&wHHlN6*zo}s0Tv{}l8k7U-7Y?_)X zUZ__C4HwNiF}RZ%B+Y{QMz-GACXJs<1M-f`rN#rvPZ~%BDOur^OK#&_*N~YDpVga4AW`JKxG7X6qCNjXLP^FdYQj8l4Dcfo8Z;EC*JcVq?O}ulP_u;TTE*}H{;d4S%v5B7B1H?fGcQL9 zE|4L!q-S|3)!~mf`ZjMat%|zZw0k0NRk+L5M!nX1Q%rWZaL)0yx&(W-y>Z`??F~6x zMZ7_|_6IZ@UwUU}D34R^XuEOoqR8LgaGlZ8Byjs`&yV#;YP?j*SI?{*6sSFB6cwz= zdKeY)V_oWtaO)Mjt=i8_s7GgpOm&k54BF*L(U9fKo)eRkazc~(rCW}FcOhC)NrHx5SE{9I;bc&qoJ@S7)Go9lCpjj7hy zm8dSNRm*YOTKTB2Qx|dauxtLuUYmPkd-aEDc|xGhK!c&UDEuHU}A3Cd5d z7GHmI=(`TdB;mEMZF`sIHm&mMxVTWfK(R&OUc#$5dSmv5Py=~nopxunb6WGW@Kl>6 zYbzXno1WlVR#TG7)K&=>58PY-$SZ!q32{Tx^ngS;j}F-!E>|gGm|BI=+bwyGy^l{?j4+z)YyBYv;G6-{L1CeTAG|@_+;6B(}8YF zPX}z|!e%avGKy_sCi!+3H)`w9 z;^v4SgkN%|?>_RZ|JMD1w=-4+Uk!+?o%<{6c_s1VD}mgN<;|DhpHwKR@N8e9&1}l+ z-aeQYaC4KjKL;vE=X4M6c zxEdGR+90w&zmLwh#~hUtsuF_J5wOc-z=$EpM3P5qUL_vhVXOoX|+?& zG$)pd1@S(Iq9-n|oBBA=si{~ete@cY5UYcl{psd-(h-AM7ddTGa2i(=~qH{_LiG9-hCxcf3J} zdk@JGM3N~^1Es@02V_`#%WGJvA(d$)Ez1ai#Sb;vSYGVrjIQAT$yX|$92pkE7;OsR zi~@fFz-t<=({NHPEbts2reG#(Wje)>D#*ZIR>fg4YlW5tl5+G_^}{SHIZNrFcB3AY znqk^sSKQRsO7{QOV}87(g7zPgp~H**TV&>NhS@f%EWKQ(Rf0zWN$V^jzeY5xe)S3R z_iFy*HS@RWh0mfG@P`F-(*Q;qd_%%F2kJ2TUkLtsIR%V_ECXCK1^~WMIAezp(Z2yR C8_cW# literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.Query.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.Query.beam new file mode 100644 index 0000000000000000000000000000000000000000..c5621673f0d1ac5486d6d1bfe54f8dc319837456 GIT binary patch literal 17752 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.Status.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.Status.beam new file mode 100644 index 0000000000000000000000000000000000000000..aa91015e64cd8034d99eb3e1be81b6d4aec1f6a8 GIT binary patch literal 18904 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.Unfetched.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.Unfetched.beam new file mode 100644 index 0000000000000000000000000000000000000000..74f8a405dbb995d87c12c3364b41f69d8f4f5f72 GIT binary patch literal 5600 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 Ipi?jZ2kYZezyJUM literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.WrapperError.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Conn.WrapperError.beam new file mode 100644 index 0000000000000000000000000000000000000000..35b7c4c900d7e9195b6201e6a244d2709a864fc3 GIT binary patch literal 6072 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

    =x^ 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

    pWegs4gj4)dgBB~M|; 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%0A2F*@hAnLxYye^=)*Y$ql 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 Oc*R5wh_(zcSpEWf&WQ*B literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.ErrorHandler.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.ErrorHandler.beam new file mode 100644 index 0000000000000000000000000000000000000000..4515b5c38b1298a6796bb95603c0540d8b7b155f GIT binary patch literal 15356 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 F{sjuzpzQzv literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Exception.Any.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Exception.Any.beam new file mode 100644 index 0000000000000000000000000000000000000000..33c65e864ebb9dc05a25642636c5e3fd107eb05a GIT binary patch literal 2896 zcmb7G2~ZSg7M`9#7(t)~1W{Mfh&MAFtKpD1Kt?=}L&R&B59V9X_d3{R60Vz*)xe+xq>Dc zUjP%eq*ABB5*e1(DOg_u*Cb-JMouJmC1b2?V9*kY3#g?uGMTT6q_ZfRWJv|75srFi zhDBBs5~bwUm<%gtb&QFEsmKOop~u_C5hOu~;w?%N1*ybLZv_{+`QU^GCorYYU>agS zpZ`WJs{tsF$BO`SSi_MZqCnhp0caeM5J3;|_%4%B#4ALQ?;&*Y&k4_2s!PJ?gw49W zIme_IW+T3m8i6Y!k+{G+RuahrmMDotfl(4Zyt5<%R~U@;;vspqsN-0qh;#V@MNA=r zCms@ewAp^-HROuKo^#MBv3CXb5EMO;u0tr_#oi4?gs8=naO5E`07e1eQt0R^IO6EK zLV$XB*}Ds(Q2<>f(|-eFp&J*#-jjz2M{$8sFGT1*0D+Rnn{G3 z@3HVbHq>#902UygrI!KYE!0vRp9aLijzCU8d>{{?(Le~$AdX0l7X2u|Y=Jzj;RmL!QuQUoaJ(`$g7 zVE@RG6wr0g*1{WIayX}df%$mE{>*ak<(bBaC{n@s<^DMrZ!8cOljCEovS%0^9gq(V z#T4inf{Tw3D9`8M*0L8AjL3#>gF+2%V%k?;^qb*v7ckg~qb0~XGkS%EQ(VYrGWwE)wY!5OqT0md*&4uBH?ave)@ha3t9Hw9Y;=BdC^d9mUI z24aepxSWuyaFsZoRIvuI5;JO&WN{+d2h(E&E2h*WM&L#<)E`F79dxkk(mNcU7CtJg*_8jAe1Ah1J8XIzwRUty`ii3mUS3!!Hdl>&yeCz9aG&qv zRidjV$Kd+i`rsydZr$RFucb_SnLhmCCnws&`5Q;?njY3MbxrvERlj7*+;=%9HMlJ{ zy3FmUofv?&E=#@M+!vsceBl){d)j5kq;Ir&t_rW-)Bi?%D%aMydu;JV{p`+PDG&Ed zjJvVi#ilQ6`YocXH8}obr_gKON6KrFe5VmHdj5mjJZjjSj5GJ*YKn)=EhCKirL*!5 z^gaIc;=!4-3XVm-)IQ2sIPUr4w3z0Z{@0!!yWH&@cH(Y~`Hp#B`^B5KA6_kQ%3L|K z$TWYk53!YbpNz}yjY_U?_m^78UO53@a!I^%A6 z)X5K4GZo)Gdp_!XS?f=~MxWmm`LFuq=w$Ee*xJtZqB`^M1P4&ebr`R$t)u6-zRu}>9-QXZ=5+ELqb}|_5V`L&UDdgN_VPD`?JeEC{9#&g zdEx$yQYP}cgJ5sah{gfB3+-Tu6_dF>ai zJwa8`DG9g#(RXBAKsYbUmzCwJEQi^9StI`ot{L?-5~I$F8!^sCzA zG1%G0QsuXSRr@PH%4w!E`yP5Xh)fgec3jKeKHVoc-`T%p)s%v&27lo;dh(?8v*L~- z+X|;NupK28EkPq*n@-o2Z2jQUx-$$_-CMfx(}|ZJ{4ynQ)323i&C}eBke%I~_s56C zt$sA2@wWG*R>{&IuAFSy)M?w(cjL(6ilBpZuk*9-Mf zW^1rvFee*l0R B?AQPR literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Exception.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Exception.beam new file mode 100644 index 0000000000000000000000000000000000000000..d65eef328f76a1a44aa21b9b856a8eab645561a2 GIT binary patch literal 5956 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.HTML.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.HTML.beam new file mode 100644 index 0000000000000000000000000000000000000000..c34782d8b72e8dfea8936c92c49cba1b1cad5c17 GIT binary patch literal 4220 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 Lmyxx2#S;Ds+*ug1 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Logger.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Logger.beam new file mode 100644 index 0000000000000000000000000000000000000000..b42f31f7cc6f90104e49229340676a814b52c341 GIT binary patch literal 4768 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 S*ard*eE_(3q!{%f$bSIdh&pKi literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.MethodOverride.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.MethodOverride.beam new file mode 100644 index 0000000000000000000000000000000000000000..7c1146aa01424fe7c0c50c4c83f0494f07306a02 GIT binary patch literal 5696 zcmeG=dpuOz_w!&L7!BhUVLU4DSLu=~!;nX+$>Zww8e<$B=4IxLA*F;0bt`&}Bq^oj zQY7?HNp zaR9_{zA#eCgTf_X`O2yLM@Vj(Lnob#B z89`EDIdp?GC!@&clrz?WaT!m;G8mfR&0_dsKoidJrGiGpz=8LA2A&3(i|82ab^?`R zh%J;;ahgMPY(;)CzMwb^Pt~QXP|d81%~UiB8qqF8MRS%4&CI%SmM?vFF^yqHBhV>S z>_vdnu(#!OoTiEv727rYKF~fWcK}^&I+jGur)ba$C>mijg+hvknTie#OVTJ9{>#WP zFrr4MpU|Z$G4NUp8lK_nK$A0wbgCPkLIakkQZz49G_fR2hA#t;CDEKI+IWVFK26Rd z(&-Gm62q58lZO-O4%QScyo#}0v`<+Jj{y;ADrwSzF)fA`4QRnD(7vs?Wnf8q6C^5@H1+REBI(N+K+pt?HUJI+ozup}z#@9{}`LH)@AfIb8O25CI-#>L=dO6d2*8OP9%goBL*44pJScvELpnO-us zGb$*lKhG}<333NCm2r*|YjH5Dk}}>SDn2McAdC|Lf-xVrfJgNZynO4)O$yC2d7qPJzroSKxjBc6m7RVDpl8}Jp z6or zf@JD|z>y+CHq1x!AnF)F0({~^ahOp1PzkVU9|>~=oG3WTK3Euq$iOIjNsLg4fDB^` zB|rkiUKAsQ1aP7~NUIWi5y-{%JUC(knaF7D$rNJ;C4#y2j);cAR0pTAz^02%%zwRf zxv*o7)(4+z-I@GWcdhekXR((yQcmtLwWv4-(OCy9{p&T znG^VPP>~j;V$-wfrb!nhCLRUAuabe<3cqHazODRxdsr~(rSkJRgBJ~sm#wL4-*bM| zn+tiGmaZ$!HNDr<)(Q)&b-H$FL*%dyU-|of7r*8;&g$}gN`(dbm6aZztAAg62G@K{ z^~SOmjMqJ6u7~!;#z)2GrVHxw>!TMOBW>FSHq7 zciWhAq$8?!XzGd*%dB|OW~J7!4*x5uE=E5qby;V7YrG>IUOWP^hy@_2#8@mTO$Esf?4jf%)_~_3&n62WEbDpF;)RT=>tc;b}p6;+4cG>psZj+0_ zp;IOlx)G^!Wn z7GuQt_zAa7frC@#ewbamXei{Fu4{7FDX(|oZ$cgSy}CU=n_}M^lXMdy>1L`p-$0rifqGrB8Qd3+hG%pPg~ zloD{DpfhzQ|8r4{dRYy|Qwb#=_c}29{6V6P8+@&2?#7n&LLt zO9?ui`R6jXBlEpoc1FEzjlCAf{OUPSxF}@d;kEl0Y{6MM96IRMjjQRjxCa|Ae0Knr z&FbCx%TxBYuP$?413WfeJ36y>?9SVLxo7ITm*{wgZ-_h5=V7pVCbXn??5>@(Uh)De zs(vu>1k2Q=U#DMzsjC>uWCMg-jg-lcfYE`XXdMU&+9$~wk_(_tJ{6j zhM#^i*C?WN`RO@vZQ@tUG?v~4@Pds4$kay z)b1#)`+vZOdMM?q^%w4WoT@GBuIDkI~Di;nnV6PZr(HxOIQ?F_Oz}T-U)<5m%wF z?wPJDyWQN3e^IW!*S*^Oj`5Cd)fo-24ZkXkv?VAtB0MQjEB0ER{^yw3j*((PNBiPz zKb<2>rfUprDJb2aTYlAuY+jR5dS&`an?n~Lr|u87;Ps0>Szp@E3<|J6kW9bWO@A$^ zsnT7#Q}xCB*SDjtsanOiIuI9a_FG&Svbitu(%Urx>(GMHo}m8B_$gVI$dwQ4YZCjF zw=l1px6S^wPp1xY5S`xZea`XB{#w?s6>Wk0u`a85pHgV-tS+KKslLRwY8$gE=(S<} zfFI&pRO&{&Z}1|?!ECkHLRzd9#2Q^=kI-O_tT1&o2!GJ&NgK$HTh~(pIw=Y z7;2GCL#1}IPT9vlJ`XjFY%jeRxaY-*FynBOpSL2FJEin?8x8+k)9`DTROR*+@g*5e=b3*tJJK{=NmE_o zocR6zM9lQNTX-c6bUn9iGewrU4h_HTJESx{o4D8AMLkXAY}8qGVTL+xJr)~y)jxUl ztPAI2Z@rms?E7@d6Tb)At`=LNOD#u3rTwO9W&Xrhhf^!`^hz_%sdhK8zjSBTha?!z zQmei*XCB=A%uw9&9QR9as=<+C&(36d)Nt`JUFUCWjks@QT@M^3*dHW@X}bb;60;*Ix#2oYQnHEKq#e!qC82&C4tJN=J2(WN7Om!Dh4fNpNoZz9-_0 z`30`jz#KJe+MhpudA`^N2bp>cDVuj?>#&l7WEtzvuMSnkB1!sHzmqZtyV8X|r@2 zzLEF9J$ixWG&sEVc(v7mx}EWjI#4R}a#3{l?&vYkhB-5SwY+D2#xajV8P<;NygA+4 z3Q_kzAXwlrwJz&jqwp}h6JNedh<&A(nn_Q z=sRrmDaU=kaZ!`}=A$Zg4l}K$agg%pUU-{#9IatbO^fo4koafJ&AOo+<+bL8iGrP9 z+Mm7MJosB_{2zi7bWt3?Ts_KfH8~Uxu5k}D-ugvfZRPLhQaCRcWChPCj-57S)B&A+ zH&QYh5+;EiUv){y@|YmGO2$SKUC(dx<4yzA3-wId!( z%S%{zcEA3U8yX*mqCc-1{joH%Prx{TprtI_Jz*6R_jy-keqE}bm&q3QeXYb=_LdZh zu)I6puz8)YPS8>-yA@`{X7R|ay(XOIb=ZJzJ#Y^3No2-hFvRpUaO%;3#!E>yD6+V5 zkeHp|h@giz8BtLnDvqTu3(;7Gt+3;t3F)QKm{XvIh}s(ic{R}fUcDYYj_z!7!~#EAqa+sR>K zh%ZDSHY`#Q)FyO;N*Ose%_cpjGV;IK&0G|_B3IG5A literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.BadEncodingError.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.BadEncodingError.beam new file mode 100644 index 0000000000000000000000000000000000000000..5facff0ec2e969999e44394ef20ca45c2be2bbaa GIT binary patch literal 3680 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 J#dQ!8{vS?C*bV>y literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.JSON.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.JSON.beam new file mode 100644 index 0000000000000000000000000000000000000000..2b7fc4419a3f25c22af68fb0467d3096fe2b78c9 GIT binary patch literal 8092 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.MULTIPART.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.MULTIPART.beam new file mode 100644 index 0000000000000000000000000000000000000000..53bc475415995db16247629ada884b9026715033 GIT binary patch literal 14044 zcmb7r3p`X`*Z+(mGs7?piIQQITNt<8Qpf!k#$CCL!C>5Gni;uNs3;<#s7aKPq9lnz zx~W8zl1N0MkQC{ri~l}DzxVfC-uHR_^ZBgV`>eh8THm$y+WVZd&p9?OZaN6W+NT!Q z=1%5ZPa_0Euy=lb{s>y$I*Jj`U~5sLV#Bm3G&YCM=4d&2ZuGFHn7etTP^pZVP$rdn zg2v^t89}jJI)@d^jAk*S=qEzxEH*uu#-)c`q{p+EY%Yfy9b%9Z8XFVLWiVqnfzh;J zHj_gJ%)n@7NNf~6ki%ui26M?VjHp05JBk()_A!jkr7kq`E#(9;V&d2gE?qHa5tzM8 z${!wu&So>&or?{Qbao6qip7ZGu;{^DST!RiED*@j*a>7>R1{j~@2+{WqL{Q0Ygj=J zJwBMuf*}%_ktbjP;dELEoqcgpej|g!Wku2xLK!h3XvuI|Oh^=+8p7bPm>dS&3*tmF zSZK+A)qax=WSP;_P!Ju(6IAMgw^ZuQU}g-L9>b+_6Ik>VxHX0rO@~-CZa4%VeWb^5 zV%c;mjZ2N9(>PqRnTc5njEhTSM4ec)eSS%q)O+F`yX)f$t@H z>EER+nK3b1o?J#0XJ{)eiV*@vjT*}hHBuZ}v`vqv1#_bkAVv&>8wdb~al?le6*$rp z;+X6ZGK>G$A@RipyZp*uWJg6_m7S z&Y$5k4-TetIAq`^C6pG$q5m7auCa7>!o>xrL3S{JBr__6{f83*Obq?a0thaJ!-@j< z7c5ag!J)IFX)G$R(n+QMHSSa@1QHS8`^!T(l@{VdVbd5KdSDPOgvJiL$w}aF>Cx0E zMl?_hcpxo4{z-6Za1XgwR9L_(fgTf08RFhRKcwu}-9;S1z{w!z81?=oW)T zkLP~mqow}k&tD4po#639OYox)38E3`u~Z znQVGaPy!fu4#0%h9AdES0SQ5p;GY87B0v!c+2TRLf&{>S3WOqnMrR@dnX?3sqasi6@B)%E zMC3(LBJsQoUJyb_@rc4iJcJT7zKc5E?Tx|{v67G!3N%Xb$ijG{g&>{)q|)(th=Afj zfWsqK3nB0+C>iuJtTZA;0D)PCT}n(55X8#xkI~C8E3r!{DFP_0OgbLHqX^^4Xgq{K z-qh$uVdW%=1Y{?V=zu~F@d5=TvCE0bkD_=YL=c3KBpyqcOfkmcQ6@ME6wv~OAZXwu z2;PFAibqM}2}m>^Fi^MoRSBR2Ey+s(N>-AQXhJbg+8afdA=(o4G;mUSwqyva0D^#) z5+y^Bo*+b$f(XixErjCb2;&3GrBIM9g}^%@Nc?M2*OX~hhG_vJ7g?w0RaJhARxgPPyhl7C?fs@9v&iCrj!Is=o73-C{!r{ zRCNf}1QZGq0No5gH%ZV9WRWp$CFr@5uUb$OC#P(NTaHA_LAE(49-1JGKLOdE06h!| z!sLrc^l}R+ycC2rB7l74p{0b0H%(DEc`zcTxD~f?E0E|F_&|iUlmH6&N0!7Ifozap z95j@&pcH@1Rs!30pg{pZhf5;x5iS*ZXlW1$Bak;rU@pMf2c`mgsW74wZ%Bq`BN2~3 zhakxy;3))BMG&3>!sH+Vh09P5>>)Cx(0Z60tDJr z5T^;o(H=*}I^f7iw5BmmThIij1?IUR0@x#?u=Yr_mI>hg562OS)&?DQK*x=sqZ8bb z4Ah(9bdhKskZMS@E+j~RS1MqThgJ|KqZcPJ5i5(bMhO5W5x|oE15J<*4NXQb#Us&r zQ6vx+eLNW+St8aIUO5bSXhjfVHzE?f));3%FaZSd(?!aHKokVlcxWXskTM`s2^Lah z5+q;=3F^T?;Gs!^6r2eda4j+3uav*hI1E; z836^609%#s9XJPA2ofzJDLqJ;Bm~?7pq43v)#a1|y z>v?E30M`dXqBj`h)`Quw9tHeISOP(J05I6p61N^G+k~^g%He<%v>j*8Ld&|NRB`46 zZxn@xR^K7SLd$s*0>KfgT8P3*A;{ds`r%Uqy!BY%+ykG3yxmiMuNk01q592)6+^WywQp{UueW7@S%fP z-~n`HeklKEEn8SJZFy+je+3D_A%hn@IAV6&arTQQ?fE7te@yBrLnM8OUPy|0#-Zz3C&U;(zAj{ z9uOe}LUDO$BSAb)8A2%=<6ON_IsBR80nZdC2)7Z5-Uw1q3d~W#Vw{J!Ah>?ODuFf7 z1BE48C=>=f$%2~7W#OUg+7r0PMl;ZD`jhvAPEjI0Y#Fe zfCxMNUHdv%JA?{>)DWmN2&MPO2ry3c2muB*z>NS7)`mZEvB5B6kVs}=30!FrLi7M9 zP8X0frZ@`L2Iq`KJHwY7z%>bg7C>7Mt~<ka}3mmXjo9F&o0Pxz`98-hThz2Hkz zJX!&X_FmxOk!T+nz`_+PdJ{N#0#Q0(Zw8>?i(IrXI7b6sC=rSFGsgLX+2PBd9V88$ zKj}7DwSbI2p3Glb0U9EFHievtXdoZJHxdrCQO$4xV0GlOJ-~JL+F)jER0uJK$tCjd z=80S;5x##Q5<_C)+jL?q|8^W4(cva=>%n2hm=F;N`)C&EkIVr&6anD?i2)J-1YgTb zEY=C2lmdhVv<#5!VjY&3T&%AEr92=MAR-`GA1tp9NMo_C2}&(Mu#7Gsy~X-kQ2w({ zSjHHT2_P8HIzVQC;2&&jJs?;H=5GK5+gb|991tuI+p+)z^I@D;fMC8YAUi-X-x-h# zAXpCt(BCn@GBDpA5FBH;FRaHC5X^_`n*sgN?+fa%3@q=zSPujx?QiuUP>1DV-(kQ0 z=z(Jn^I>1Y00~&f!{dV32xtkQ5I}Id&te@E2rodEfP?_400MhVe0@rw1Q&mNdDtHq z6Wmw8CN>7v3C9jT4uyGu`~dNPNXtvRH!`?DMgX(Og2&xpcNF+Xg$u+9!g~TVB&hwn zjRqPlBE-L6r3poVE=zYugMa*+)Jw_sFORH$iuO4dl|qGG663d^;S7a$W&mdip93lg zaefW+*Uc(mN%C2ui@Q3S@U9NO3m29Lzr`+p)WHe2jNe7_FD?ApuxQJI-?q+VVOxdB zT-cflWwMF?uwU@krW`Rkmcu0m(TTJeA_HtJh0)o-f<8Yia4@iRc$bU6odzR9#w}U6 z?~ePIEebd)vV7}=KhFGZp9?e!^Ba+-po-;J1s5^@aS?2BXoAfo8W0fS3kXFs;^}aD zsPpj%#tHEkfVd?K8*_2E5PB3XfgVC#V58WyI2eT#zq8o?#0TDk0DSyz;LxAGD6nq` zcpI6)aNZmOBnl`T5S%|$K!496cuZhEJSX5bI4>Om1ppERWDN+;U$_p>S2sYg3_K6u zI-HB}IsgHJ^(X^c2?(Aea2_rP1j~po5?mKC2iv5ebm2QM0I;LBa$;c6$QV50k;A6p zt2-FvStIm^WXe|62+)oRqKDJAGMKS!zEs?wEvdf`eMAJp(mn?E?I~X`oY=x!!A33E zjEqE}jJ3!xVkt^?GOenh8D^Q)plowa^pZRZB96o z$px#rCVeZ|<b~<2V-}Cc6Iu?RH{4WM>+@Xf-WT=P zY0ge@pSj&%xCR5=zBP3cKM>-O(x{M9%j=!^Ry*Pr0#SL5q7ojxQot@-%F98S2#WMW z*AS9VfBii7Fm7Ud_g2IP5VDLyis@m_P%cwqeItg~eDK+^cL%&LLy-{&-{5^9SL$X|cjYv3;v~*>^^W6LFrms%o zh4BM}D}0+8>*CHvemP%a%*ZtF*>*25DDlB7>Y5(*o{|W!IRmQka++-)!?15h*VvrA z-b6r$u+7eqYuet+zg5cJ7@oh}xn)ULQ%QA*E%w5=)x>Xo&3he7<}b`iW+o-8B)Mc6 zOZH!GzV$t@a#(b)q^DwerkbaM&$a>$8dux*bm^=@g1TNRO8njLXIE~C^LZMH5au5ILXP)aglgsp!w>1Pz!1&ZF;Uv(J9obw!^!e5pIy&ms20r;Vk>L5<7Yj!VitHqmE4dc>_gtfY?q z$Wa&mW!ZZEjeX^*{#>7Tk=4(r)$-8jNTh_np=H+yjI*P!nCnP#HD#h9uu{zFe3w~g5aKgYRMl7o_^osni29ved z?C1%D2wGvXB3JG($BVjS6>o2tSCzA?; zu6Z5lud^8$nUBtBt;#vHb!I$Mek7)cco~Vk*!*5sH(kykqH6N^iIUSsN1n|pr9Ppo z(Q0ezE7lV`x3VXF<7V21`|EGN^t7B{XQX8GOK-htHKFEo^L(y{67EyZnmkTqcuZu&?Ker^ytOc%L)mDW+DZY!PYEWGbh!! zpnJN)FN|8XI5~-j-rL&w@04mk`}4Qw(bsa+<7fr#PL;Ok(e~??=#gp0TIszBq14TO zGKUniMU*~Ey+m|wRAC{38CH`q;F`u zIHfbVKd-OT<5vFgZ>_9o3zDack6+u3e{&X7Ju2`4s^4Dck+@fM%eCP~+2zeIg6|gW z>aV}!#t!{$R?JJT(k@K6)=@IPE-&o4P4?5fk~Z1>w%={CdkK?9yPg_ECwyj}Zqu+h zs+V+UUz^6E;KSa!cd7$Q_qCn-zH4S;FigEF=k;N4JM)B9^>@BH3ThqdUZQ1jMDKID zw9thQGQB1233|HTXS;li-~A%@RbvVtm3qYIYHYNWzvqgS>*k8oOXiAHt9%=mt&X%F z|GszC`4#k9FK0C8X{t|d{;3r&+UV)QqZ=k4g^u3eng2CI^H5;76|-b}(Z^j!15%HS zSAC`1zVfoqb=_DA`Reik2%(Z7bT>3$ZV{Z23GN(9_Un54hJuRcXvV{D5*iiHftnhi z=1p$f)2O`M0c{D0;TL%!A zNvQ+g@gDiFWs!m}>QAQc7<_&AI`ebb{vCER!3u8lAO-fSAcdfxy?Z@g-FtY&(a4}J zqUb38O*p1n>5PqWo%;iPOZklfZ=>2!v7BLVAv=GEs->3`iC4x>DXjYu+ZtJs(2{38 zaforEw>m3W$2nMW`#!Vy(uapXYL3)BKNnfL(xp5eTMTS=gl|&!T`}W8lZPRGaoh^G9rlGtw zAWV`=y;8s0b=7oBrU8{yqM)IhF{l+ODJ|K3#A<&kceReK+j1rJ=M1IfV)dD1Yh9V~ z_mY>=P5e7@pH_2?@(NrhJsR|@ru=24$7D*neqIu)=CrSHT{ZsT=rs>g`Ro$$8s*>J zGX_pYshJUShkhUoaBEMUW4y83=iB9BFBf_A+R7VNUz~LBYJYY#`6-YQu_7rql`D3` z3RsPl>DhuVdeglnRx)O~30HkCD%pIZ{>jpvvre;hvrUo~Uo_{>>`vPDn;c;H!Zcft zyq`APCN!_zF;uJl-g$7c|4YQ1-{Hr4ajz_xw>*1h8aMSsRgzn7<9!`^p1EFg9@LUJ z8asRE2)cl2ErUtsT{GROJ5SxMvF6^Y@Bz_)=R*d5Ee!Fj=?e|1K1wf)cVg-;2DhHm zB5LJ5N!^xge2{Ty>K8p>JFRTXi13`8@@3@}jfVLKoysMiwC~q{hrIA#T^{?Y_ozqu z)9FJ>S+miMZ@2B<-3!;hf8042x##-J)q5{I?s+kD|KO&lshwB!+>iTd%^y;8FgxGs z`8wP0K^vEr>&;Ah6c-GgR@kraFIc$o z;JEY51&y?7nqE-siGY$P14|!#3dKKsF~zl7p;?(X*&=0Hbn-wPyRK;{tK*i{wR9EI z-H4L8_O3@~S=rB~pm}fTyII(^E8PZu&A)F<+U$7LXV~akaK2%<|GBnHMTUAt%5l!+ z*p~IQ&csOTh*PE2#KQg{Owy>gaZx$XG4JFlCSogY#*G+>>%N4`&EMy2dn5Pp?sV46 zJwMg+K5E)ui&IOhu{rXv@cXy*YuB_2y=))(c6)1{x6$>$?7eS@N#(BQr=*M4zZBeY zvvKTM-+OOr_X7RSpUm{x`oKe-l&TqJMX;1y2j_s{?YSFR5GHHW*tG;ZMEwcDPKZdQCzMWt* zvFZMa?;F2;(xY3HTJ3aWM($Dx+N=1f{I=FW$8grMO{-ctot_<7Z1wx6EEg`RlCwV3+HsYw_j#$>+dX~Vi>dC+MCOI1wGBfrj#Yb80^U5X-IYcO z*s6zlGkxyt#KFfm*>q1O&gzc2pBUTU*C=752OYW%QsS*@=Q>389S*Ypp!Xnib=8F; z@i~d>8_!fFmOFcPFS+*4!NAc#dYgluqv{Wxh!zT{Dm3LDDvJkIvda>HKGR>W^v+d12eM zo_BfcZkC8moJ`C4{A+OKp7!C(qz+lnAmp#iybGrrWiQ!z);=QJT8LLOdlYNS9f!E$ z8w8&3pC0SdZsnYi^E;TjZ%XPXd$kcE;p|J!l7Z^VGOw$1HsM9jPajaVyyN2RG+0{D zSayS}`{LG*UXi)@_4`_yN;Z!Wf)483`10-AiW>LlKlhBhJ>6PSpe8P{0rBj#v15Ag zZl%P?DQ{A2=xVIyd%y3KJwJ26X$b=^S(pP`z$%b8bZ14<}hReRm@~!!1qiZ<~4(C zWJv>}s+!vRNEt<=!U{)~^yrLH?pU8W<&#VZ+vex7^&~f?isi8!<=T@E-7>8TCJ>3s z+MTyu5HR18b#O{;NBv1#Iz_9Vpw$E=jbud`EUEhN?5ucsZ+BDLPUHUAAEunDszv=w{WN$_xr>VvjFk8}#z#U&v>1(W-f0>$#mLTEBt7Cr4LUzSJ^DBII zrz+o{)6;%e`CDx$&ZNUlyx_u$ul2Dzm7In#uZ9dEM1!ub^nI0{G3DC z*S1d{t9q^L=eQ%jh0dy1pL6aN&K|B@`?ZV^$7$);-&2@T@T=iL6*=!-A?-u63+q-) zHupJHK7HkKUa+s>lkC3P*32xMQwL=jbn9>L(5uC~@}J&HU5)8ZJJ>cDCtDr0_G()M zb8@ma?w-xtx^ZW>-G{5VtXi|?!cT@?GKTqXJn9IAGTiKz^XpU$_4LoI3p;lo|U;71p+*>^*AaZf!CAVKae_V>G`n>0d70O7fqnNqnEjjI?YrFyEf6a^ir1rr6jMYD0PX zO`B=Wfm1W36zZxOuY1?`ey2N-r~1R1XF87IJx)kO3!*5JPp3NQp#CoN4urG=BKmELZ(FA6K=(R z=2k>0OuI97n(TfRY$?-ameR>hSe=Dim%lcrI+MM17cMkX$U>I~mY3U@p z5X7&u5>jt*n^x}{vp>1CE$f3~tAA#&Qd?M15J_jR<9VO$*gl5Ng>4SW1M7#K^l9#| zy*ABO9D(ASsaMSaw6_$6?&f$rzIi+=8(HiR^2T|dh6bIRTG z@bFo6IdzKO2h}-b1vaY8!*dI5PsPddh!k&6znu5!{+>kNx{9kl6%{^SC25{Q*oPEP zVnAJmkDI}rN_Dx4C83q-M=O@pdfq)P?&V3ma1Pc+^;~m~674x1zB*;R#dm-!QxOts?1{)gFQU{3d`7)Xhyu!8sDqm_38j}yWo4Be$uaTi-awBzd`#Exsx;J zestfyJOm}J^e>b*D_j3WDm}^X)e(t9oE6h0l5=Lb`I1;U3*~lu|4-T7xwZzj>>w&j zO|0cohNs<3e94Vv^R1kMEI+pGC5dfq9mhWwNE$qkh^oEQn`^o`V$yE4i1?np%jQpC z+Bd}c(#GtYzvA~+S;lcC8C$$XZ}lA=ZbSZVAr~W|XQnMzdFmtg!*r@;M|a0myr|&S zC1iFus0PS9xB=mQ-VL?hclp)rPd+U?v4%p+mH|;sW>@U(pk%#9$s%vVd}_YBwYF54 zgjCa^#=EkEt2bZXb89I5txU+(+tWGg60NgrKCkT+w|*zQwy`UvFKgoT^L+mchM#y5 zF0*B(xVL6A7tdrS9*izwO}Nf(oPK(0?D-{k?Ph7`tM^YG_H;k~`>lb>^DS?`?9^2ZOD1oXt|&K=&sm@3xM zwX1z(^knStWcK!tgZW*v*EV;(8qTTfyj0cO^q80=|Mn!g|LPp>z%#kyBD-#d`Ci$D zEAi^l-DC4;qBbBl@j_Tu$FtH8Mi&(P>e@|{*b)D*nR=&3&d2nz_^ELB^8BN3>*^J3 zPu*RAog|>O{?}t_znIsnZKMs2X@&=*!Q)IZ(Vm9jJ%!fh!p=+A2G5J1{`DaaVZ{vQ zfX4=j@ZL4J+Z??L8M8@yO4MDJ7iy;E^kQSG5T(bGcWL|K|cZn|CJiS@*h7rn!u z-c0(}G_D_%j%UuldpOy5{ek%A_%U~qb$w0Tn;)UqnPG-^E5CS^xfix8?0fg#Y0ap` z(TL#SVc)$Xh8I$K^ajuDV!z>*9@odmU(DDo%UoJf#=W%k-p*TbxXr?6OnkFXj=eOC z_cSff-+%JgB|-V?DbW*~m+zH5rbT0WtnGUIXmfe4dG4werb+rp8s3WWxo<)Mmwob} zz~SGOx8$tnSFodr-4WRiCmptE??YVQ+ZvD&F|iLbxyw52mNYuw=YB;wWYDc9*J(V> z@<{KxDMd7Fm=S4A3~~_4p=q6UyD_s|l)TtbokC zPU-58x>cz86g}+RVy9KU_n4NZoI&OziNtT>sYXpP{l+!}dV>a1jK|HaoAvF*51SQ? zVyzhm3?iR39Wb4~CZ1IUJrLbNm-)sz{o0~PK1jnKX|c2Tl!R13o5P%!|CrAAah1!u z&6Jym3m&?Faanra?8vddzJabuLKN@J&A{?+yIx=Sw4fiJ zd&!9wu`ddJx3&O1d{T?9?q5HvOV(H-7eBXMo>%BZ68|hlPHKZ;2 zk+JOW#|ly}r^Pr-NLU}Ut?|j!OG9|ecSB&cZNshBxGOr_N&LU{!iJXWhvDnN>FZvvK>C z6T)$d38r)9C~t1;i!QO+DQIb(S}U*YC58p)b;nwBV@ye%S^eA(%& zex~Ap^Saa-aogJiXHJA9{7$=dz62w3Zs1Gg?oi`4a<}a2%hdiaa^=OnQ#CHu9|ilS zjwB}O2v3SmpS^VUhh*t*tKzJ(@wK*FSEuh8+9BdNfH-&h@GC|o}Mjmyh4gGQguW-L#Cnw@}JaFBH)`WE)@1K~=q#l-$ zKiW$bxUG0AIHk9A4|DCtoC_+G%MPqu9Uf^F-P)w_!owsoTymwB_i#+kNK1ECQ$zOk zTTvUTR3xh3>W>OPUS%HNbf&h$^WH@RMDCF~yFFut-*z|p@_yOq*b^ml zgBy)apXbI#&;5Ga`e1kS?t_)`-#&_F7nRg(v1+tX-|KGD)brf6z_W-%y<3=*T-BT) z^7VtTnB~ysJBOc5e;BZ{@X=NFiGDERrt$KFT0>aXHp7vX%q>2)}TUE1&CyB++EWZbHD5v%YebtjEc5SXd#e2UPn>GnyS(b1cKht(Gm{6uWj+W~G)&$8#qir8Clx%%jkk;hk7B>WkBTMe z{Lfja!Qu4aNIILkRcGN5xbWf^D)7@$@c0x+F1|dl(2U|R!T?VQeCz_gOMxHPh70hE z#oi$a;JG&=I8KmDXGcf;BXi+Mhznk6p)Yhr#Vz5#{T>1z3NCc|*Z&Cc<0JX^FE9Mx zz)=5)VL|(U%lrRxV9}HyjmwONV-y<$9y>3X5@1F~{N1s?T>A6c#sA_2h(8<}q5lkc zK?1x0zy+Ui(2)PR!~Y(MfAV@k@V^G~zw7;PG5wSMg>L_A+6XMP|GTIQ#(>X77UK>_ z9DaXdBlrjc6qf=0`N8iJL4c5wm^sW3HKdw=8bVD+O;-)Cwp2|)Da0JblweL`PGLGR{g@%l z6HFJT2Q!TMh?&NG#*AX#VBTWhVX80}G0m8JnERL-OfBXLrU|njA^(5A0N}Ck{tW!C q1^jLWR(u|ffCLl(cqEw!82ld!e60rm6z2bMAOT^702;iR@&5oA$%Wwn literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.ParseError.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.ParseError.beam new file mode 100644 index 0000000000000000000000000000000000000000..415069ec31d9f29b702fd116900ba6030b317491 GIT binary patch literal 4092 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.URLENCODED.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Parsers.URLENCODED.beam new file mode 100644 index 0000000000000000000000000000000000000000..c14ae13170684411afa7454b1b534b9b500b505c GIT binary patch literal 4588 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

    _J4-luW5e>m9IFL`31u$!srgrIwVd%3gCSaA ziO+JQ6X}_su{Vp!@lN;be>k1a==Ezq{WQSit9r4ven9t;puoi*2I5;B(}HeQA7-*~ z#DyhFiy5&DW|&9Ts*77W2}`M;whT=Y0<|w#C}do2HL!^=x?s5T&-LeBci((Cu;FE2 z(W|zy73b}Ljs9{ldgtqPoq1I!GVOh1^WJ^(URRRjw*=(|+{+$vB_-_NT>N;mO7I6y zg+m01_}w43~9 zaMbs)$<<5R?dqNRRGUm+S?j5{K7lr!W#+n{Mh`zysiKxV8cd1!E$4O0o^W zG$iQ3w2SPs!@Z|8<3uYVl`V?tgGCZ|Wz*La9cA%9Za-VM@%v)~Q{VA`i^D4{sx+R* zyYYA6cQ{rz#r!4ux|Q!Zshs)R)DzxsxO4&7A9djU2E$1>QoDW?yx-IwU7>VHZBicf z`X$;D8f#Ntj4!*pOHseCxlW$r-PQOtoC?PwzY%5nf(BLpJ z{IJ)?ZFtv1+6nsA(BqjY!xn0My;b#fbz`+R_Y~$eKi9t!xOe?%;y6Nea?#Yq?PtoC zd)MwzP}LYLxlf^-`}4TTSdLm#s--Q_mYFqt&x-b1UNYE_)k&L37G63cRtKM zC+V5B_nk&3nPU7eyEI#M&s$1+j;227c&6`JP_UZ(vB)wyu>NfyyTN76}wlz zJ5;c?s>GEoSC)T<(5TAZ-19}_4Q$#eemSsYej;R812iN>-JQ- z2R>izAg&H)_({r3D+9%TQ-A!mN`?IDyN=i;5yctFm(MQ4tNya>ok%Ox_3+YKa_6*X z!8OKZ_obgxR2Lqw5qXsgz7f}3->Caz*f}ul9wy|T+A^Q3gV^3OzhBtoFEyqI)Fz@n zuTVN1kXA3~cyiTZCt)By;Dr8~QzpXqJw6+{O6p8r?GfzecE!Y1$9wW7I0lsr#*#;i z*KKS_87_>FzjLriGsNVG$5j6-hcox}Q#ZUw|DA0v6xP_im0Hc<6Vn=hwxZ3`0_z2~ zSw5@7_9C|gd#Wc>iH)5WQH`a~-lj5>hAelu_iVhdpUZUU_c|D|WUNm`YR`(5E#E_) zkPcr8xN86N+9Hqo-Xr=C8C7c4xK0_9z&ko;TbnO_Zhm?%*~c>1ewUq`aoxk`6@z!0 zsz3J`U`D3j^Tl7CDH<`3$uSPhEla~sZGF1+Y+>DtqCREiwoioSoUB(L_on~Vp4=|o zc__QKL?=rAcg5&qjhueG>mQ-k)Zm`X%|^LToJlKj6OqXsjvwQf4t_0cXz7;oYi$bF zO~aS_M_qr{ZrwcaU^qmed~D#b*3OGdJInrL=0`wL{=cuk8#{d`KQu%0ktiowvNGma zNo|Z5_nVBe>t@oU?5VU@n&EcLiUTzN(WDN?M+Q#h$z=~ucOTEb*%1~|UUITJT&W3p zVbN1wt#Wgc&!LKBkq1;1&yh#XVENU$6=^bLB&&M?>^jh)<2T5CRLNSZ?k% zXYSYmEawg$v&|@Q*#bBja4`h#aNr)%QZuG=y%~udS{#cmmKH+%xc}y6YcfI+j}6WC zM2ThTY;YmNfUBt4KL38kfb!oyW?R8uJRH~TF=*D{|B4IwKl}eTIa~Yx1_pli{lPs7 zh}zh6#za5$|z5plYsoYfP1@X1nD0R1rwnB%@F4q1mZu$D3O-{ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.RewriteOn.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.RewriteOn.beam new file mode 100644 index 0000000000000000000000000000000000000000..227ab4c7f106343f16755c129ec697230cc0e444 GIT binary patch literal 6588 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Router.MalformedURIError.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Router.MalformedURIError.beam new file mode 100644 index 0000000000000000000000000000000000000000..bf2bb9364f6563be0f5d29f92e5f848d21c47f8e GIT binary patch literal 3676 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Router.Utils.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Router.Utils.beam new file mode 100644 index 0000000000000000000000000000000000000000..abae8fdaec7bc6823cc902885a163725b9a2e909 GIT binary patch literal 16132 zcmcJ$2V7Ij);F9GN)ic1g3=)vdJR?Sp;zgGbV3p!v|thpC@M`rPy_@uAWBn2EP#k2 z7DN!SA{?lL3It?R=`X49CutJ(B;R(g0iJu!+A9$rOe zvzhcr(85ZhFcOmJ@w6%`Es05^kl8e96D=i)!DO?-6R5^TQOSuEHl2~kibx<+m<$#X z5F-*8)Z}G9LF zL{>5rKxK!=(*RzgrI}?CJ&{d|rZGqPZL}0Jg&m(7K~74dB~ppN$k7F~;cNyFWF&O* z`(Fk5nYfP3Y~r^kk(q3~r6tz#hx6QkO|*E>0V|0{VMAd6zAWO4yLgf~WM(2Z4N2fr ze$4}yM4n%LfgsPm9}(g?k!K+>ft-Yt{Kd7PdvXFu1}J>MSFxZ=M~Edc}>&xnhNBva#PsYy``CO}L55gZ6A#Lr9s z(O*vsPoS}57*r&VZ^=T|=-S1QnXDqMUsigA{7V8=Oe`V3v@rokHvuOXLE`$HMJ42mO zC?%lOSV#h-?5_Y9hJl_T9~zOINJUEM&=ce7i8QLtk5LY+vjahb!4?I=U@$Bw(9s48 zpuwczST0OJd^r}5H%AR%x-l=s5(M5710-kj1fnO5{V>&APFZyLMW4*k`P=k z5iF@e8NrPZ#9};20(K+;Lz18`Nq|67rjP`1MpURYZ}EY4Pt zNC5VLHUvQ&4=^sxBf>~d=?HF>2sRy<0)r!$aho7hlHf?ml^8XIXn)cXNiRVOWg~kM zg-!C!CfSve4C_dQRuZn;20`^BQE((Gg4-#AFItIFMc5#42vdv-&I}a15k>`Ji-UoJ z#c5!qa7x_%G$Cvi6}M3c-xPoYL0YH~m2ijA%6KY)gHaD4kca^YVmb`bhEXR-_M=sh zSS(sqARQTkRwD|eV+|LWNC7y&gyS*c(dsbnXtNNWl#T!?gVw;N3j`p%(3)s9JXRpU zFd_pjMFb=qAUPmf2_!a!lZu=jE*!s1~L60HalqSX>33rEV3>=8#KiAMHR zE>axiDhWX)Ng$x4tpZ6afN-E9e&#JO7!rgdWwkJJ0m?wzg5j1Jc{oxI$Z?UlzjSbs z5}*$G0C3_+2zvk%5V**tKWRn_G?0-bkiN)eP`^k#*1=u?=U^m2sKbE)v)ri)=YS*N z90d6Uf>YB1fr`UH5P4j>PMv@Vuu_4D9vEZ5C_#{D5GF|;Ca8Wy5(|MMA&fwO;6j<# zp~QlvMhliY^#iLR%k3Ag(M0IF6nFwe7-0uT%JX9mg8ys46|^wQJf9e02myXrEsP@1 z-z14_OAHvziXgR*NJc0d`BB-~T%?o;c9e^hZWe-J7ZS}7mM#E8S)--!=>iClZqPN- z8dW5Mo#urIYtKc>@UUn9Gz5!WhIPnx^1|_a0Hzk;gCAEWz=x0-IB

    15G}_6cQpE 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.SSL.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.SSL.beam new file mode 100644 index 0000000000000000000000000000000000000000..e2afa7e33bfa65e69c29df62ab63425c14954bca GIT binary patch literal 23064 zcmbrm2|SeD_W*7h%R{Dyv6Du~&e-=%_AQYuyTM>AGt3OKR7#eFERiXSP?oY4kwQeY z$Wkd(vQ(0i_SOGBgSXz__x*o9|Ig>I_snyjbI&>VoO91P_dd^kKCk)CU8*cB?r3AP z?K`&9opo4PICPemmjf5g!bp2aRAu|Hs32uWN83an9}+o`;^R|7pwp=&zbHD97U53` zk06B+O9F@yRH8qDP7J6g?unpK=`^440L|>cD6&7DL?P3B!wLRW3JnL4zTuRBs4${0 zjZTg7r{l<^Fkd1yj6e=r3?kBfRyvs@;r$6=VG#e{YV0D$P)T&+PO^OqiI(CC1tlsZ=p_IVP7L=WQjM}{WRg!Xg+{00ffd9E z_!iiT0~8Se0)b2Lu#iOf2fl;HB~XJRz{QV33ByvT+5QxAASoz{O0=g3QzBJIv0tj@H--<&iI+;p$6apT?B|15*36J2%ss z&!36*q0z#8;F+SWnX=vApGX4{ONdAWj5IohN`!d-u&&Xsxy+tG5607DBZ!FvKN=+r zWQQ-Xj6e>6F#pR$Ta1XJ`~2k{2)$|tGuuokWHOTi_RFgOI$@5rK_Q-1ayTwm{8IlP z(`XLt0UiM~G$U*z4dMY)3ViL)ob#1@2q)5mDFOEIH-PD)PH5oKco~%pe~^IxP~(7qvuRNgZ~-F* zK)kEnppX!QD0C7iZN$7<+Ck_PijP6_4RF#^5jvEC&{C%!kI{ zk*o|HD;A}rk3{hZ;<*qSa4#Dc6^KPF8uMW>#(a257=uGmu?Pr_#D1I(+6dwZO!*hxA8KMLb5I>%4Gm}~a$z%qd0(dU$DvFV~!Ys>V z76QzI2ne*rSq)Lb2uKLeCGj^iD*_V6b8T5;&R$`bVKR#VW>Ewrg6ER_!-9ZB_4!a+ znFL~8C@};irq7C!X5McC4B`lAlfD#6iiwb1L5KrmwlEQ!0b(lx+6*Wpmaopmcz(i>6QH#GI0ed_b+6`3R0fY31(3S%%TD}8Xe4vQe+IWqEQ&eB>2r| zEP~$v280F|PX@#TE?NwT7hF^r5C&WhlUUI>*bWd^NM1D1M=^v|0j1;$0!{WbN(qAn zvT;~r3>wKK5?Ucr3X=q+$_$7P3@!%-SK-Ej5CTz-Y}tUdH`@B!SNW_@*>T)G%wE&~!{ zX0X9O84T&8K_y_tV$6^jNn=(PBHqaEa?&fsX22YIx8BTB$P)a$rERz#Epp z8@v8hTtP4}AUO`~BJj;=lp_cR1H45xuvnf04FPILJeLgylm-T*0EmFUoSB+Ab)lRP zkQ3gb1XNlV1mw(s6hZbL2R=eTE_g0mpu-MHCZE!ZOF$dXWd{aR26BLGo+?RtNbb0`wPQ)(WutL7EUA;sf%17?2hi$_a;ne7W&BX33G{!(*ht%Ee4h zZFo$efdYyEvOsF3#u6Bi4)6iL0?H4`<%(wop2C1WHXMosZ1w|o;92?7&^QL93mkL+ zE()y3G&ESM!2-qymg?0dl?3w3p8@Fs4cve-0e_i*lLX~~SxxGJy86s&LS#S&fYcpu z1!|&#FnA28jGbUk4DE0bSp0$%P((}@@I^2K+6D-{fK?=J+=^8gX8K41VMai8A$Yq0 z;Xz9nI5eE;(2y=v2m%VxM1`{AS)~k7VF)M`=nbcy6a(50q8|hq0ty4>rD4&3$|WSe z630?G%s6HR(F@m4NQo1}3}aA0R}gqkd$^JUOT*DP7I;?pSYda7`VA+kF+3+gWikUY z0owZkI*I}+0txa90Yxw%(|?s`D4S<3Z9sP<12O|V{(zlYgo*@ZGjg?Ts&o6|SE`4) z6kbvTk1@p~olc=>E8PJrc}_<_G(1-TaHTo3s_y?&Rq1$(K@6BU5d~Bfl1m&frvy?a z8UaP&<@RRqfUC%aFfVqBfzQXT}Hy9WWq;JLsY zIswZqnS<_I8(biE)p8l z4pU|o0qd6(TutD*0un%7Ujr4-oa}@yR00Bu$AjIV2E2BHwap4xDXNG{Kz6}#h=Z3Y zbPXOOh;!mI#am3O<1H2?0i`Ji9s--81iS?VcAZj^Kp#AxQ<^=R0avW+uVO2|Vu#HbSt@TnS+4-4M@krtBJ}(GWos#su;X01%dH?ErnO^D>-Xcw_173rzGeY1M&fa_5(rrt1AJ#8-zqx z74QYyK?X!v&jv|IAd#@QR`+7Q7(rm0AMocE;7R5JQNV!wfvkf-)^TlA;osB|OzHqT zuv{RZLR}OCY%Uo{-0FxHkQnee5!6cbnk)v>qQE~Ett7jwBd7S9MSxrqge`FU3HX_i zD;cy-!Vh+62o%wx6&%o|_|Nkmbcz850MZnIKCOu=L89%^X2^9bJLOb(<5i-IDhIli zBe84SEU?in2OHfqR2f$)>I~OmR4D=~)kc*|aj$p2Y@W%Wwl9vU@ zIs;RIYZ;I!31mv*j3rqxI8-^tSQ5Q@#bN*v1`w4q4G#VvgCjY$*9>Mrq(3%SfFK2y zq+=1#S+I@*&q^bpbD+imWCjiaRdU;dWeMKXNlM`{8hE7XDOA;3Nj5}PBcQ64dK|*6 zb+v1?j=4dpK831rHDy*(P#R4QQRfj*4YQb<0$W3w92fp@m?EI_{}j0}pyO6BlT62& zSwP}Qq?r@|3urU=H3h(l1wVXD6ln3<1M4sRDMvw|%7=n^wMRg;f3N`n8?u6}1FJPK zG7A`4&yB^wn-{S3avg;yf>{CnTK|24dm6w#1<+@MX5-3sm;r?YC1w7~{Y0=C0DCC7 zrh++@07jBIaG)AeKwXsuadnXaMF1K3V9ZPZU&d?#4;_HM0F2qJi|Pas)ya$~uxUrD z>r0|KnGw|iBB~8U)MW&8d376y0na2Ym{X`0R}Ad_<6z_4ihx@1patp)1Bzt&{>rNF zf#+I5#z0{5!AMvBxa;`pLrB|SVy^0$|C6aAE*9oUlg;oDvw) zgNa!9#WfZSzqbXicLT6~u~=|mBSXVti6qcX#RgD_G%T4y$1-0AD}v((EX)R8wywQ+ z{X-H=h$dnqh*ai@2!)KLQ?LZ)t8grdZp3_Ptf!(vA~Rn&VpsISVoBt+Cj7Ea8N2ev zo`#hTphSVQ38ly=a0(M3hXsc+Og+E>1SJM&`VSvX8EdlgRu>x{MWbW=h-uOtZ6|VxWUf5<@$tV;m^7~c#4=0mLFvsdwrtJgJr7PyCfR=;{(!)L7C zSAr|-U*xKsbkK(7p9R1MV2yqs+y(&q0=AiDl|BVDVf<+T901nv`EV1!B>)frrW{)m z9oWeJ3EabfTL8!>!842uUKhg(pZgNlffgrtHNSF3NFQaJbp51K#6 zja5uIJw73;=g6~n0S?FPkzYN}#Zs7uC7^(UlTH=pFI+2ES}RAqfJd3hBl~}Oz_Fi- z9{BkW4uK?~5BJ|yIR*(%vVklfrX7eF2tJ914>@6V*_i`?2Fpffi&G!FdfW+6!b}uK zACw#B*`;HYpXtg0DCqQNcJ6kDOCL5~Z{@UAky(TGVhJ>CEG3GHT|1&*DNQ6A_Rn#= zGS(jGfd#t3C5wPvIXVSHfm2&TfHD|CZAD>V4;%BO2sUCJ>|M?<3YZBP$GlTj(^kfT zf2tv{MaoPr));b{B_h63AOiP4e1^nqsbSeRyOoMYaa25s5 z;7D{hXN8zTnS--hnr%0Q$3*Td93n@nDyy$G)L_C* zFyVik634K@Uv>Zj9hiWX2+oXQDXcNFRdr)HLEuIJ8>p%)O)y1kO-(gbswylT z%M55_3>$OgwQ*I~8h5N$8^UsXyG3$}3t8W9T) z*TF`MSqAm69`Kp<|FU{1Vq=0y{=wK7Qdk&BEq@}MS#Una1XI9180G>yHIS`qWe(^g zofH`(^moqhqJU2{sLIZCQW!0UjRrQtU}*t_7^dPVAehGhYx&>n^g)1!$2|^U|7shS{r4KbcNGthvuCw^7+j-P z+o|A6U2VhrAIfU`0J!=CfOUZTLG@*h1^0Uafbk>%?f_uj0s*)Ifb|Ig0Q|$G@da0V z05BfjKkfto?^ED?r4axaZw^2g04xU&Kpy~%hxfeN0ARch01W^zUJHQSYFh#-!}Fg#>k7TnOmr^do}jB@$SKnN%_B z{|Yg%PMTPeVY_-)$^e|Hs}(7f1*xlygApqml-1fI3_e_=MG#`h%uipyT1NGWpiTvS~{7UDw`yn25P|?OpqOvey#f-9XW^YcEg54;a2Y_2YqJ+`MRS!v2Q9 zXugXvgc(!<^A1@jC0x*zROkaZXqFB3k? zSD~duIhEdD(UEcgLUhN7bg28AdB2P0+nr0i>^W^V+IM>=FU{NA^<{InU6{SBB7dO3 zL8s(=Slv$R{pX79t{n01p@)QzM0$u+Uf*pX)c7d3VU*)WnM8a}T=ARF`rZvDaa;DI zwFLHExV`xX8TwlG=y`H&V}a5>C8D|RhZg)C;+7%8C}+^xdjx&tv(DBt>=}1XdikBk zd{yZy$xqwwc_o`J|KMBMr4LE3P2Z=tbYUkJGU7VSj1;w%Zbnh_o9;C5gz}CdH?v*( zGWW65B6(m_R%?05A+IbW5|8KuLxfdK@X69NdG5|JFF)i% ze;ZC|?fv|7GwbK{#w}_y%S-qrL5F0-?&;ahTIiq;{w&RI`*nT_ZLu-jCP9ri5E6Ln z;u2}0nBEoU|q)^DsOUiUT{5O0SMZ?klD&bh82-2A=Y>1F|Hyg6*BbDP{9fk8j=`kSw& zKl^o<1O>{tk>~|2p4xF?apkg)6bwHx8jP z^(B;f5_^?$@!cUSzq@n7QA7M#vj(e|CV``;TbxNxKDSmszA%tHlJv{jpHX0XF56iE z>8#Xt%V75R>ocfwIb zSa?s$g-Qv=&>kFrwY#munq%OXvldsor)F_TZrJ0~jYrn`hzG7mzW-3_J&w(CSQuIM zf4HqvEVb`>>Sxz$XWb|+h8LgI?lMQw`YU(cJ-68-yzG|!{ovsJj`J~|Ng5hsXzmwj z;>#khY8#uyP41_`Kb7#$l}DO~n}4`Dz5kdigKk3|HfRaFdS>pJw}XC#D|@tc-3-mT z4l;SrX~!v-UiGE6kHcAi@9WqXnetVQUlqo`Ts;VRPsL;BBwy#O&)s%n^h=uWUc-Zr zF!JxF&-rTi%00UBxa`#3oIu~BTdpX%vzVLdUXF`=?K+@)gUp5~slBK(;3lWmqtbA! zSvEY)qpo&}vosbvr9H+zlF+b@)vVlE%<yGD5_UHn=RwSZ>)~E2*Q;Gtbd?xEUAbe;nC3mZ>A5wdMW?`jcIn`>k#6s>+A> zTeZy?7{AgOT-sF}_Yx9uJng4-YwW42QONxlO0V}?X^ZpSoS+$wojL1ZWRoA?8dTHt z<(P52vsEb1xhG?eMY}qk^9hs|LeD8|;dG?(3%8&2AhOS7X6EbSND< z*VDgoq&w@mPJn}0(t5QpX$EqhwdA^!e}MhFuNs2SZaj@NIMK+q_bfFvfzvt$vbtRD zyfK%2Z+?SWee>__uZqyCk2NhX$BWP0t*LQYxBZCr*&t17p`1EqT_s)^M zN9?rTR=mIFu;5P4zcgN8@p4YJ#_q)3bv_@{8$LfeT+*&%uWqY#uJ+-{8-Y`24D>Hy zJ1-JlpKL2`|9NBgL`*MqRzGW`HrKl@e7H*FMIRds${Xp4V~=9uphtw-Vdny(iuI~HysuevGSOLdsL5|nmf z-Ke&)-m6QqtbYsgIH0pFK}%3VQbAj*8fo5;niZ@q zCaIgVB0e5*x$S{b6L1n-7TD9x75;6w6#2#Cmg=lRs>8c+^Jc${P&sz<3WaTHPf9a> zs_wkTQlm-@z@hjMB;U6l7x}ns zqK?+tt_hyoTD!4wFL%@xO%1h{r5n4nA8=s(Ida?gs<>v0oR}NIQRmDCYl*q``qx{c zzR7($?)SE=`)%dOyHAQI7f$5ewb|8tz|y-?;`oe5&92~{gy7*lY|xW@(Rxfzj?&ae&c^;Vdsme%;=i&6Bt z<{9mbxU&s$8r{uGETS(8ulD20ᡮ^ekai3C*6hSz7d`w#AU#wi2sa?Mvef3Q&f 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

    F$a?r`!lvE>elMV) z5056568r`Q+V%AWd)!+F-=(;hf&V=NuSV;3Ppi927=idhJ5zN_dsqgEt?I@?T_YI058`?!gNb(_~QwVl<_nb-n{@?is&3x%;=^0X5& zhhC`dgfi~r%}#5eKIGOCy5huzuZGi-nim2B3ZG~8sC8dGb{nTc5)M2(ZCUa7-LU!{ z8@-fRD{|p+s_=`u^(vZoZkJFxZ+ke%O1KBICCe*)SW0)>dY z2deV;RpHP6-=C#AelBCFN zi#_SNm7(O7v;L-|Gv;)q<2+Bee^^T%+^d!+G}L~Hr$Kx}hQ+;%-x-c-rAD8AiYo>b zJ-d55_;vY{t=(U*-8gMxyJI2(yNmR8_NS*~eQ9}Kg|lsMtHpAzVry0TfqsU=wKj}| z*8Hx^XSge4sywXNcPdAThI<@oYHkR)G+S$!$?n=VcXhabvI8;cFI)_kpTIEH#Pa7J zM#DcgFyhifW9tts#5!$QSM#lnz3bfz<+C=aH#5F#t4jtvCRIM0dNh;rV&;A^Z$2?i zQf<=IPT{~KCAplL%FlMOrURBn8!cl3S@}rctB&RIc;7$9LcisG(&EnPm)~Uyhq81u zSm%T;KviScHoTvASE`$!Kk=T_`*X_PUc;)7-)`uByLg(dBmc?1x=nSNS@*{a{J&1S=yvw~4lp1@ z)i>>I=|}k2Ca!xhf%-6!yr94{`nq2JyO;bOG{!W8=j519^mP2N*4C$!2U7Aww!632 z8nF_JzWy4B&S}{+>>qkc%6jlV zS@d3Txu?JOo1yFpt+5-L$GP`!X0M?duyLC>QI56Lh7Wx4N=g_~Xh3bh`}|n7dHHY2 zzPp4aGc}RTX(D!ez2_dgl=;Nya)F86VOM{R z?&L?0sAMA~p!07!cUT7+?|5E##{TK9GwU8Jvl_nemOe>I*OgoU{x_<$>*ff5?{SZ> zWR5EBr z&%SLq67=iho$~0&{qm=7Kd%}`?Whaq!~Na0o8%YV7qqOLWEoWj+(P#~y{-u! zPuT8>61+id!4`<-RCz{MBq_b~wHgnt*%~(DYf)DkXZ1||Nf#zRCxP?kn9FwW;<-3! z>pW|!+Uq8TulsQO7E#sbsaXR{b=}FPtYtgI@8{aqOub59H(frjNGFD9%)FU#3f|wc zs}?8hwL^A*lVjm-O^s=xi-P6UVJCL|h{)!!aej4T7wW=1DkH~^ud*0{uk>`AVAGY!NNP5)hY(o!r`v07^4YAI-e0J&iGxZ?ZqTQZ3(^co?1{hWOuig|k z#MZ<)WxCrB+nPKaD6^b2s*M{Kmt2QwFw_-nL5*TvYH!C<8ySz>PaJwu^0a_`&+_MI)dUm>kPdnV86 z@ixCICaO=6<3sUr3vY2FsFNNs()c;w-0h8q{w-92^R{y~oa%jF7pyi%h_VVsq?lSa zXqOVt``B`1DwVdPBWP{xm_FG@FSv$t$ANOk`Rw%8vxLkeGq&N3lnE3%NdB2g`tgNl)1MZy@ z+oW&KmaFDy<+WePCpz(ZXuRwpM(4q@Pn>fhJGSs0-muxM+MRE=Vaj0-a;M!}=?^@6 zGTeqdF4xVU_};TckK<5*^j`hKw4@QiXFW1smp@Lv*!n&Zd06rJ_etma?#o@*?>?s; z^&jz_yuTb_YBqHQGxR1^?-2XubMBuGwtvfrpP#!p5R=;N8lCus;4ZzHQ#i`(&KZ9y zPm9^2@oZ;OKvn2tvh32XmRh-MGX0dNZ#mP?1=`32&*%SgokBzwvR`S}j%jaGb4Exf zDO9-S$Y_`@IvjiLO*lB^T{_Z*H0Ul+vULqiFz--n~PHuk^!>p zRLPM74&|Bi!F;$wEMtiu6Y|rmRb@$fH(tt}nGG!3jHo9Wl*Q#Dc3@sv5rdp>WFCm_ z)oe3d?|_?`ue;aM9n11oReU=KWb;uAK{pHoWZ>GcS(dwDXg#4TQBZmyVYY!R#C_kNfw zT|IWY1LxJ?mm+7a-EDO^F3e372(#&{ZOJ(E+P>FjvuWPFZf;R*@?tE3da94*xlR^k z54BUQEm^_1|60n+EZ<)t_padXTRtkO%&C3kaKmTWCw=#$lC(*pGNde|u+BEjSz>nf zZMIzmZ;{^h$B8aCZeyYhUPqI#_pcz^5x%sPwl}Y z;aCHOPs97`n=>AqIA);q+sR;I*?_y@w|X`5TL9;$W#v@1CCbOeY%WI4msicpR|nnB z{!IVoaN8|0A^HdYr%!L}x>2pNgB?eYZbVvayRx^wecO+F-y(V`)v{ZP`wvWRxIgw~ z5byUQLgVohANCS4?lW=bU(-ap&0eRBRS9UiFMXC%e>~atWZjq6x#NLIx_TKR3^l~2 zL(KFEvpC4pd&(y}TXc+o(+^fkE9{Orb|+HgJK}ZQV@Hnaae|1yLbd_R&EBPK*3Wp! z;FzAyz21`tIV9`sqq0L80bj3czvcPSkVC2#`HJtu^?kZ~%xpCHs%yC1{DU`}qQ9c& z?v!)uiG}Vway^~@w4|{?_W|J)IYHm&)l0!aH=pb%JDsYialXx?rZGcXsVVxxgxAM3 zmx?Rf69k%(N-_}-Bu^*dM*Ya&hV*VunCbI85ylG`>$~RCZbbAIP7EFjV1Em~`R=VF z@ekj0$9{W^1Vw&>0v!n9X@f(Jse5Ji_Z?)yLi2Go^`cq!HJWA{3E9)K5RiDaLGs$Ns zBTQ`UvvT~uhx2{*^770gBozLB@0>b6cP&*UNAigA`^1+E1=l?@7%#VfpS)abJo%J6 zWlWZBqUOZAl5Q!@+4j5Ha+z#_Q#g!uCJJgcC?)UfjllivLe5XBrY!6vc6U(~O>|#xydOM%(*mHE0xRlv}G9kxD^j zR*tA+x#YM+rcp_yA8ZjbjG~P;m(jlHOiih%S&fwonnjk_0(~$Sm~xx$^G&9t(T6U) z_c-_6bKW`kzK`ekSCx4m$r@0vS))?~XJ)1u0@PQ&YiA+b`*5oLl|xe|N*8UBWjiG7 z3$z{3NsE$>`$xG{e1+z9XW5$=O~?xpX=~!t4wsQrX}QX_{-8~evA=g$vav$i8uj&BM_-A) z9yzy`EolKxra2k0j{<&?O4g*`j-F;p((dZE-RqKk81Kmi@+8UBP(jgkNS~E8!6&!~@RtRHaCvcA zzS&+B&Le^*SWtK^ii-$ib7Cg^$+Tekw*7F9e{d#m#UX}HM}#nVhT+Yl=LAbU#1jji zqC`o^{^+<+1#gN4pYiTWHb%!2R_#B zs-h3@dl4VSKp2zHkm{|{l$!FN{kZ7JVJD?fk_p8W;{MNS%tvP>=D)yBd5mg!-cp$; z*%zT=I+1(L|8_J=KZgIYzrl(H`!$9c7HeEU4svmcN=ZXndO#1UoXY4f9^2GB{!$#E{@BuHg>+5rAg2;4Siyj{+1zjbiM?F6==Bl!!(QVzCX|={f1?6}8ZN z`aqxQD^*hsN>EB2^o_cxhkEf2tB9H zusHE-p(u#Oj!BEBB=h1w3fZv&pae`E!xXX^QUZpQv+R%fG9g>QVJ35yvIRkL%w!=O zBC<2Vg7t3}a^krhZoEW!h#)mgz!L#w0TQODomAMJo0dXJ zVe%pT-%rCXgz&Km?ARpwpQ$0@lp6%`X(?>3$Xy`d3G&&Qv22N}g4pnHNNJMqZz?cY z>{uR)P2wd%N|Q1q5qE{1%!4$!z|ZVVc5Ir68I#PW$8fkzK^9%alNd*XEo8(nSxiBE zvoK32VyDoPIVl_wi~|;boQgUA!s*A0k7o;> z(dohjUK$8J2nn6ePXQrj#!C_gc#9!bhQdrvE~C>~JSh<)Hccqvr2xB<*&+}(5T0~) z5R=bO&ME_$DgDiYwEuTw=lHU-JlR}0ad?89ci^h^>=V7GMAk8DYG&_TY^ z`Ai`Q36}>30ybAj7qC-!B6e9Ehs&a;Gn3QUus1*;X&f#`L<0jM113pl=l`WoP%IOK zhQd!1LAw7&F@LGu5x|x>4qHHja|j~;Goib*MtB1LWVL)0u$e5nfSEy$H%Z|ARzH#gp86d9!Z*q+NlC5S*~+g7m^mk7KE=( zD_B?VUT=-0&{|LgB#ov7zJq9<2ykG~Jn`Vbr^$ft92$xMP6m(=$b30GE(2L6#>*&; z;*qrqe0;SE15MPUx`okDEE*P15R>Fdcp55<#zKiHXgqEv4dq5-5onwtGL3+uVF?5= zO`bxcp{OtxLy}@=62w6gtR9TTDoe2{1TjN`B}%ZWQmh(5%$H!%U=A8qogmJUCsFVp z@f8FW5_T5Ro#06#RFJ_~L(iQ|kPbDeU`VZk8MFx1DkP$wI3FlF4|QLKhShFuX+<{E zup|`n4p3Q%7Dk}4tY9OkWSSL9T!yCL+-Po6q}wF27Dg7!dQwn$m1Zp74XZ=Ns-dy! zEUZ=-Ru`qjCm^4Rn`M-+WD@eDEe=n>;cY2!fJk^?J^CmDrGltJ5yW@oNwi{FG>}5V z8laT$1SEtnmPJW_%Ya`q#Ls|~*?1(RM8Oe2JRkyyG|iKS5`UD(2SIoS0tpet5QquZ z1W?UXK;UUuU4j^z0W37ZDWh6woBW z32Wwp!lO)Zx&$mqfkdH^(FsJHniwL=<%D(>(cBK+cp9S}hVH z(L8gc_UR;(ft9)n2oeozN)|(EeEdEf8Q5wD90B`D;tVI0#Gyb`zI3E#f>S|ZjZJX+ zWUMyLvkZ=!z5;>*lm$K#L+U_RQ=9=DnOdm=p3MY#cxnTfS|V+>7@7sbLj&P4q+!iq z5k_K21E8D%%GeHPMsSEE;BjUuG!o8~f-^xvCenBT$G8v>C>H{r>_Q+Bst7=FO?gT) zT*qiK@Qo}5XG}surhv-I1ZQT2bp^EW1ZI;02*7n(pcGOh^dObAA<7-VF-HuMfC3(1 zXl{a|fD8%1KSM$kiGMu6G&-<qk@74D91l2tx44UKPUq#uuDqlgr~r~ zB&;up8Ci;>{h?H!WOf!qvq1p-@JPr-0S}A=6=R6TpQ-{C1iU4Nj3nzeNDx#m9)Tu} z!N~&LD~60A5;OyWgj~gt36Ky7Lg;3Vb4LLn!0AFj!-a?ql4iE4JPA^wp$VXPK{#?r z2(U~VPc0g*(u{BiR|1f19%9H02n+_+dY0fqtx9pBkyaEH239u|tL2K-At*2yV5vq+ z(j=5hvvPx%WLN1tbI>H5IheQ<7ZT|PhaZnN!TF+FN^o9br8uw1u&HG7MnYb2GQpDE zXkox0b4f6KrecSLylHx58kImJhUEs~VSOcqf&z9EfV+JD=FBkQUj`ELEy4MLS^WOY z;*W&tkZ+r%kt0Ra+ z9q6?L2}MhM?*=ktuEd)7e^G5oDULoV7c2(Ae{}eEXG*QOKeS*aV3gvRlO{-4f*2&k z{JRzGKUTy@R|23PQO|8E`M`Y#tTKrTG`0hakunmBHNmmKB?a88DKS9tuq5B?KatgO z1A0p%8}|o`cax&x|De<-Q3-!gFt3f2kn;ztJ4u-M2Q|f;B!=wa+({Ng^FYol1Z9$9 zg5#oEBzGovfD0Y|y4m0^$MNux3W{Ke<6)d42{Z}KGeG0`7Yz?s#D{NGv5OE$C>6fj z#6zk`NFc=l@j|#Jr8l9F2&~Y6bTP=(G;j+gN5X|8p>zppG$74z#HFJ`MS?JJ|LgSk zZ8a$t-s6zCJP~PfH^u>bjuf!PAqk}$Z$JUxw$CAju$e+0*Pev%PT>PNNO0$dPy>Ji zpa?()zzhINlVjrK7zK_~W0*z{fIa|tYzV*z01^N!$9Qr)2OP~O$2Q<-3jme_dIShN z05C6%w+8_8!ua_B&;VdLE&yP9HvsOFV;JuV0H*f>;0<6(A0IG=>HPr&OyXgkX_Mm+ za15Os1KSbd0AP9;9|-`K1LGF}fbsBLQ2?gwg8hSZ&xHLZp^*p2MU&@+lVfl|qyh*A z0NVlU>IVRp0ow!n6_#xUfHpaX{Rhtt)5v(Fabfw?N!;{F{4{Wsd}R19bHHFR0GKBY z0L+Jk@qQc;;6=>_zu^zeYrZBKe4`U&GUTKiS|$pNQDFNe8KB`UB@+pwz}}IGP6Wit zYf`{Bei5zB*l2u@-E8RbH-$ZC;Na*=gu&FZvG9H~V`?KVNk*{y6~g>-Yee81{y0b^ z*+_Gb1a{Q|HVO1}*s&rZ$^K9Cfdsl1pe;cX@klXj5|bp|C<1;<3BTz-@c*p|L1GFg zg#fN4lKD{?=s3_$NaV1>s*O9SO3GpA>GiE{&C?5OW+7eDawIak+E;OB-P_H^3Z#*;B&o{6A%8 zib%;|^%Ie7s3f>6Aw>A`V#9#ELI7axMnnUEYbgW3-|K7PBpxn{2mo;1!D~k#05~1s z^~nPOjEC1dX8vAI~oCr;5;UVoxn`z@X`blstmQiw|A!cuc2@a zCc;(f>dlP#&kdh55PG#+|9~R1PEptXnS!|;9f4QsGJb!7z-*h%sd<{0zz{Z zhskBeapKHFd2yl)z-11ac04$l%-HE5Va)jnJT{k;X%1S$LTM@gb4|mxxy8hDz-7#F zO%MXXLS~lSijLl_;W?wJ@yYp5PrlvGe)ZKnz^0C{<5ANMyGI5^?-=^Zs`4>cF(EWc zanHM+y^W8>_iw(v740J9<$%vb7

    t$5fDHjl6z(k*c8<)J9nuB2iY0G=oySwS63C_ic*`(8=I z^%OS_K2{w5dLa7zW81uovkqiE>)+6^Z{C}S%D5dOqdw19TEe{Nx2?D`aQHC9peS3==+ z9o!T0t*uUv&uEm}c7I>(eemdT5&O)Bv5iYcJfk~?Z5=KqsvWu*O#ck+bxPgbdVlN1 zgWk%xO$|}@!`t1Ti1M7&eztxb%3qausK@$9$=)01IMm_XVqbN|k(2uMN6d!i?0?>6 zSbo)OgAwyqMe>;T-M|C5p0^ohD_l4Hs_8z~?q$5HVsF5CAC+p$S;u|7CZ6Z4bs1Xv zI^u@5&eqs@nwu*_t}zUv&R7K;?K^nH>BiTf9}777T6?Is3(Q_N_G7!EE6& zu&*w8>y>xVZ`-TgTg|I2O)N@DvNyLK&lrd=&wHb-{OHEanaj?GFw7(6PV6$NYAi8I zGCvn-oA-X{SgdxnmD#xqV;3$gd6T79S9<%I=~hqE)ug&Sx$;9VhnkdcFV=30xop1O zsEei7rT8naP`FBjKW|mIH6|&&LueN!>;6tYQSISL*?U}5PL!_4i?E1CbmY*3wTTCk zPMWIsSx4GBav2(q1-bLOD^iz=bLETkRvW+EoB#fS8%ZojN(?lF;)#1zow$#qwsB*N z-aH&Ka1EL>wmE5FR8!Nd>6=&6=7JlT3_s_FZHjumYqs-e?S7zotc3B(esA+=;+AXE zLLWb+J(1D*nbuYrHX9jC=+_%~WYc>xcFyGuf${P`a6E46;v-K-218>8>hwfh-H6Kz zaV?zM!sWX8g0CrU7cZ->n0K>Pi&66S@wR&>y?NUM>(^c-ZFN#VI6sDa-p4~dw`TUS zqp!c>S3qtW0T+)WTN*8YH65y;AByl-=-ndM{C57A^%SiM#c<9NbbwWO;ib$}ueBA+ zur9h4=R+UskY10ka@8Fa&=_6$F9&I(D-4Uw55E$O?hVQRuzl6w54UfXQ2(x$%G}&> zdmeXUeyYRVSw}V;;>Y?cEq|N)?cG*?9}C?Jw`cj;-P@oL=evQJ+vGIP9N*@n`r8o^ zxQ0TAza3n&K|*e~PJ8N6!^Goruh!^V{0c>U=MVh; zIgT3kP@2Av&l!5)zf@1O+vH#$wn#6yqh!55 zn0g&0J#mUXoqBFY6ZH93_TG!lQnPME>zRbb!gn4v(Q%)@w<-a#z|5#gDgX)<*SWh;st2(ZQ z&Mqs=a~WJg+Sk(MMZE7N7eYQeCsD6NJ^V?DLbYqIgIwqh!?PM6?DV=0FKIO{=|C-C ze7LIJ>&T0ZwH=?j4=Q*RrJd-wY;2gkZ*>Si?}M^Ky4TgSB_}!mMDAgc)%b@n}Uter)Y@Hy__;80bpy_jE$FXj97ioAKAy41NJz&Bt=ZQ`3 zL1(%1_swuEift6PZTat;ytduDJ1#7({(kx%i(r+vE4vK6eRe@@Ma&Jnn*Qj7*P8dV zwb=usGOw%leClwXMuhAN`QcE{zUDUTb>AAB-^_>hc3ND-<&Zz#4cOwS^uXlWs_z;F z7rF-Z%5ScO+*3?%GPDN9ExzwM_Efk~ZGV#aE8MI73a|3#f53}&r%YRMIXQ9byWzLq zE6P6?-p$gxb8km*?(=r1qPxeAXps`Fw707!Cf=<(-@W>PZBg#7KIi@UV+p52M_g}t ztcgoodCI-hg}E>e8=6zOhn(G`Fm}Bd*V&ERxt?2np(;9mk9uH8xL5cbmV%*OzjD`4 zV?*UIzMd8~SoV}^b<@fjwAqCn?J7Mb@dujF!#3>Yc{{u8V+L;RKRv^qdA}#Erq0(9d@)?JuvGWsG%9+-uNHG~#?oisR z+AdX$o;4lTpHDSbo#wVhS#?@Pk0t(#5tEvKjLbT*Q+8Wr$gQo@Av{6}J4Hw%5raW-ZEMGa|MK3agELwfRbahUeqWsX+bH?wlOeVlunLQG`0 z%kPZDmTxUuWCS@HJ<4i2v*c=yLdez15Y{Rs9m99Np;eol2Q}B}@6wJ_s=A}gb=Okg zJNu}%j&iDKyg9+u)HU)>>o-E0J}%dL@9R+y8$QzB$2EC~99p?OTy3SfXW3JXe^R&Xk(wt7 z9P$1Vhb;TL+o|Wioit7Fmw)tCrGTw9KUMcoFLS}BEBmt?#!NcKN}k;nZKDdV{)BGK zk$W;-|A_7G@cU*xM>kwL&b@OYY?q+wJjR{>>G%ZXxUl;{-qHu!CXC#Z-d2UjTQ+UI zvfW(fK<|v2j+YHYwLanK)pJagm#4y0@s&+3ee3e=hk|oo%WxjdI&*!nMrVN_{i=YI zaOP_%t8LDaC+?1pp?rmD$At#xL-q%~{h{Z(e#?3-!|Jvx8@uIdPwz8lyU=^-`3Jv^ zp0lCmM!e}gTJ~rWEh?wgcJb5mmwa@8t?Xcp&Z$dtIVUbSwK3k(cx&R!{>1bv2a?U} z-Z?K`oTDWFPITe;$7LBZ(;`&NcZ3DYg)%Ote2(sTU&KOO$lvk#Xb#umjB8R%r-h%v zQw(X)pjW=B?FTLD^}a5w0uy>sM_xIgy*N{`v;HfiHSbGW&YnT{W#jg_1_ z?JL~%elIk+mi<7kJ^Mk}r+vJS%JuJm#``<|UKn~kyK^i$w8K!b@`aPk*v3!$tQSrQ zS5$;w&n{i$Iq_+6@ox>4L8pG4W9kI?`m)mJqotPy?SCiq@ZUtQIQ8_MuQ+_G z*rCxVx2*4`$DPWqx>I)zs6Lk>0)F}{Ila&|jr`K=HRx!B*FP)%c%sG6z1s@afA397 zv-55vKjrcPhun(}W;YftX*XrhA1d#EzjOI1)n&NLCL`rDDTd$F*XQbgdhI%tq#Drt z_+i=^t#M7L`&+hRT$9E54PAF^2C-OKmEP;kHmkG-o0r*mKHX8F((vKuYN5h=Ba6V0 z?RpPg4byj(kyW*a-i0}i+=UW1m-T{a`m zOUrMadHoYZJ2TtYsPRR(v)V_;vz=l1mM_(|$K7@tB}^|LsKu$ zc5t83J-4}gKl(?OV2|}1C#ahZj6QH&J+Lv1pF)|rc$Sy!LpNjS@bhiwQhr^#8(XP6 zar1>ri%-8H*0@uqqUXplS*YhwwQTOj=bC#qI4NCNPTc#8{xQYnL7C-xOT$id#d-H= z0^VR*bT58m_v~|vn^lWp z#J5-XjDKehEV$w}P5#5+?PCW%f984ER^f+AH?dSD%%_z~{2H z=zQnA$V=fta$k(8yScRO(+>sqf8sSN`Tx>h+!P{soqwq&Z}3R`yxgY4T^DplMfSW? z8S4)wPhcJ;dnbGT(u^A(|9;$WtC}$8Te-upU$)H#XZkq3yBUdHj}JON+*GiyB4zhM z#Y?UohB@fBYT>QgNynm=K1^5}t#jmJT8nm4wN1zFFJ{K9ud|l5XgPeDHYcgCa{F`b z%RKUui}4=2W^&T+Q&M)J9j{-Gv2*3#&9=W@Tghhg8DF>Tbb8*b+5cF3eL17D&2qsq zyNk6K=PnOKoz|Ku>*(op`nif>%<{xH3nSCihMJ$04zEAzSQKDZeN9o;Z1nrtSznwM zLZ8~|(!bA_p}b%Bh21-(S;XkQ+P5wBk~Nz0xf7>#?l~{{(UVeU!N;-M3F0l6VI8hG zVdS^}fiku7PfiPSk2%796kaUoYoiC@KFYK&nI(-8DZE}cd_eJ?oK+prS4$tKJLSuU zr+vOWVnj2XVN}zA3e#bI*n4&S<#_s*j1{+6eU<&miA#UC%=>sH)MeQD`22Hm{JyNX zxJ^4=>RDUOGS|*sbSounG%8}#nl)>_Xf8S5?-KT@i`sqnx{i6Di@(!{pVsMzT&5kP z)h5(X)hpzXR|I^p zH6%LTdbaf27voij@=wT6Ocy*eufBO|OVFLAvmUC|*IKt4l$h+s{K{Kn2v08ot)bJH?WVICN<4cK289ULMNvGtXsi zJ-U0_9>iYngEtk$5orIU5u{Z(YlOV{dUva> z%i4EDt4AlYcA>^eP4ZPE>Cb8)MVl-Mwg~zdISBqSlz@_(G7k(l>FqB4{+@Qk&xk*7Fno23FA#bFHSuAe;@| zIbjXN?n@z+#q~xSA5Vup4djzm=H|o?)+Fj#U0K;^N9M-_K=s#6Nsm1f23FKM#1}^S z$!ogqInWwmcvS)OZ1#i2dnSHqiBD-*N3_VEUOSsgcFYLKJ4ZZ!H7$I+>|XKUy*uB- z5`$}+!_0g#zu!_zb+LTdf0^;I)xJi@{I{$Hqj1-q0 z3|ZjeSDAk9W=6wOrJ#@vBNoN03wm^4;Y+@o`KL#3IAge5v-#ofyr^JT-M;DX`z~Hw z3wR{$hFuS z%FYPC;VYdrmm}M)o4C(zYqw^tvV2 z-16{o>czV!hVSkDRv$j?!mmW9o|Mmrb{tzh@fg)!5b$b@IP&CeW!|9$xd$su)`u@& zm^9zvOUBttHWsMtl=F#CPq1t+?;f81vehirQ1N(iM$g`mhM1KUwFxg-&W0*t6w7kf zR{xjk*N5&Xx7D8h9!BiO-DoK*dPq(4nK!sxVQ0zu4Mq2vCbkz|W?pSw)EfLLJt8T4 zW+L}6HCJ;Z*&^~u_@_0s50)^h{gzdmEcuzn`bn3>o1m+&%`$fNH z#;0LZ$7~Cqe46c^>6!%E_Ezw7nHiHWXG-37Wee!(7Vu*SWQP3Y3(1m>cmmv%|LdWe zlmG=@tOQtD@OCqJu@mM=kbw`VNq$xqmzlze{quMT$oxOz5~a*&@K$LGEIf@1y7W?< z3@<4WwA2As`b6*lzZO&KN@tQ4rSX&5Qg@)hBd%ngkj;XB%KWp=l1F2SQWpT_|GR9H z&(Hqv87F-MUZ0f)=C6t26Np6c`ETn2KewBV3hF<|n+(n5GuFxZ{~<$=($iD!opjH? zMM~o>d0hLSWupHb`~M4W(&qo7WFo>3JVgaQJPJE<@&iAYhi@T}N|Q5q#wZ-uh7 z?$Nap0^WILAP5ywm5iLC^N5~iP;-FG4Boad$wiM#lKnWtDSSn%ix%PRHG66>l)=OA?Hb*R!(14P~ z7jk8B5KAHz%Q#Y+fEUMt#Bppv)Iby@Wlj%H?Zo0jagY?EK~f1-7)t}AtT>@CRwn9_ ziMU`ZCK%>J0x6v*;7J3d?1(t1YlgcIlqeU9xvWS?%88ys6A0y0p(Ibr<3kcDn=hh? zWKtGSAc4eE5fGUINY3Jj6Gc)XRtwM)3Zj@|wt&lwNCZCC%-D2gOQ4OAfFtBWi|tCM zSHmjV)1y!4ejwyQT-pA|Uaa&9dF;hdfT%BWd)TXd;qMCxBxB-3tLa7TpUEIuRWO zjvMJ{A{g|eB9M8?cy(iBsREB84AGD^Y6u$L1g)TAsCc@H7Mg${BI^`16hVbRL$<2X zXeTImCAtZTPMix*qhqL4hqq`KG||Lyn7DM9NOL9PmF$L1T!{#x#V~QMB0veDPQ=sj zM@%SG8#H|`kxoL>l}MR*DuzbG(-23{6e>xHKqVr(?1s^FFDjZqBO(VBbZ;~gi&wC~ z&SX3it3_AQCMraJR5}t%P;3NRT?7(KROI;~0+3jeq7-Nhz!=#=U7L85Zc7C0l&R`E zNUXLRjZU|n;jE~cqC>|YAyQ~_VJ7HIDjq{+0fB%gBC!-j9k66bMPha6NE2n6x*ig% zJFTN3v3h3ex;V}{6TBMz$3UR%=r|Ty(Tc%~FnADJB}LZ{+bG!qx6v4Co)cQ#fI?T9 ztFC`jT_1_nR}7@gLX@r}QMF9qxY(g*f$e|~1~3^qATt}j&MNbOqlWOs!q*_NM$;+~ z5$eA$A$HD`c0SM=FIS&~1~&;qDh>u6VijKm_XPlI0O|l504M{2cMgtiQ62_FE1m_1f5>|nSovjoDCTnlugCjnK-eA69WWVElZ2PF%{_`LSBGk9Q z6G2vzf)mhI3pwz9b^tKn`2a8vI3BPc@cwWNVHxHK$5j^qZbTQ5C_%qwiXRHL8!r*S zT#*7iBHaHqdAuzU(;D3r`zh8bIR=d5BA{q?JWnVSPtB6+{wxhD*sLeNUkdoG9@CmT)>>k+hV3jEaZS3FULiSg?ykE zLvl?p3l_i_Bw_=F22ikNQX!Mahf_ODR9ONza-dj5p!FJ%MkUr<9$UbU!cnQ|vO(C%sfp?2_94}&8kW9a1tU;o;f)apZ?h#Qu z1VWj%B>>zgT?q$%-|#`$;jWX*S;Bj8Ue+peyQ0o7Il6eY-b#H->Jj6eDQy8u?6z)| z*IL(BHy1-C$(EUu#f{D#j*Z=IXmYK!q`BqK#5AX;wzqS#j@@}a(wp60n0s3X^L>v| zyMxLyM)nZ1FgLOKX$P5eEAfp#G3PZxL#^7{lhI%1Q)0U7f_!hF(RG#Gql1n)oRa&m zCC$dGZ?SGXpIi4wfR|+CTj+Y*6?LktZ=c@yW*<)Y<6Gt-#ftq0PU}+4Zsxafvd5&U zTdi&0=C^Y8eOpJQWDL$#O3kk;xtp(Q6AE<=t4POip3u$*rC`j)q0brG@Ec zP`Ht96MoA+ukH2et0w4ihjklSjydD)_F7|B2S-VbBM+YM)K!UCc<$5^XH24kvF+e2 zf$lck`32fdByIfGUVUQol2;gSl;Pn=iE9zd?#CwRIV@bMP2v-J*IP_fU*C4?b5L{U z;mx1$!M-~^ms|E}-|0s^Qug<)zVZ3n^95|T3{z5Q5W4T|xI0QB3F7a3UEwPv^=--4 zNJXc)ci(iFbMn>;Y0xI8p!shIyXT$f`=j55w#DCRaX9Hc;epKcHn$ylQRL20eP;Ij zSS|Cnj(Z>063>mcCit?^b2I^t_3CSaOp3 ztgD_)DdPLKFCo9v2CXM(;X&8ZkA*CJ^Zn)|x`WYx%06CGx|eoE_tSfPM@~kuD*II> z&HVZCz^^BbB~I(ww(4nfN?iS$RCd_8#oxuAJ$gaqa>&ty$(HLy7t_}64f7fAT>CtH zKv21cJY3_hDA*pk$589*I=erv-BbBA=GCcv%yDJXJbyA9r^&GN&?~4c+Pl^xDNs7l z_UQMAg46lelQ)^{c&u_9XIYtwIE?zmoELBsjrsJsoktwsw(wpzVzjfb@GN`x8llae ziUq^_cL&us*L!$;kQrH-_p^NE!M%nj{4%_b?77e(4cKJV{qRQKwHOQI`tX#iesYs<`_o`E=$8~<`VTbJOBU_GKcsDZ0fjSqQI^k1G^{k?# zWYTuUit4e8<(t(ld*biaJdJJBqcBt%uY)?d_UgmOzFAomR&ENdT4_6afnU4mY|X^G z+uo*^FQ?WnI#ZfloO1GzbJ*$iEp`gH6wrYP^<*b)4(yh~Kjn&v)p2 zoP4?G^!jX;W}}T)R-PT&^LA$KgZ&nvDeouxSDnm^N$OikH58FEpB5-~JPV&!+i!Ae?rMm zEAyp&N!AvFA9Wna($=f*%WHC9%FB};UkF}xeOKhrli$2GJO1p`AQzq+N+F>o3%g*4VvI-JiT>=yL zmNPV-?B5+~aF?mS42KT=n%bqbu%RkDRQYZh_bqf)@n>}0u`wqtCoK*97wg)v z@jC-Gn~O#z=C%3=a znzzfL6tUqJvMes~QhzV^XmZcTe|5Ny%PTH5#%qfaR`Ee$!+nn{HP2H9UE3QvtFPDP zC-@b=jDBh~dv=OWG_k_)#o<%;mChMtjc!#-yZUv=YQ2}Ct54URWWIVd+N@;B^5G|Z z_V;%hD66GK~%M|*FRpd+|+Bop=|rX6+Iz4f|oarg<&qRywX>`4sr5j+m&?etm&D>J2Xt~vYVFf z9P<=0YK`KdEVBb;(ViOp47;kP!W#N^)^BOXzl~1*SuWg1DknH-xXh84q^QhZCiC%2 zOT?YuBE3hMRo6Xm&hOKpwm^fiM;TLPFyS2YXkxCVpo4oZK?LtXF1JsG2`|8Pf~G|KRc@TlJhOiWn=cz+=jOPmj}CS z3|HLxa;y;PHkR<2a~pDCF4(DDn6%+VJCyk=%DnRzi~aHS>Wj;s4o|FJ&Q_A6}`}hPKc7nwCD=r`u4kGoaR; z+~nUrP*5A!oAzpXw}ECF((C3n3y%c1SnymE;7@ZcXzKR_lM@YbVj(dz-Uj|qN6IlX z{~cyZ0r(sBuVP?&0$Re00@_*NCkFW60I!Kg!5w;LJvULn=JPmmB`GB4|F^oB>4{2g zsgMsFmkGev_p}ZrjEw=G%0N3^iA-z%mn<+dE==za$Hs$n8)%BmfMotg^MSOA z37K#tU%(U61g2~{GZN-8DeRc37+64F8eE*o6xf!N`5+aJr6kZf zLf+!!Vj6|Xq*7>ce5^8ui#!8`N&ZV$^FK7PD#mm+lg@^tjK8fAX`L}v<1g($1A{RL zf?POJFj#Z&4j?=L(k=sN07#?o1(1ZYJ|3lOht5;SDx0NmOb-xJVP5cV;oEiZY8MK;FPh}cpO0jyE07wvc)w-B3gs5z)2FVj3=NP_u`=fQ)#>| z5*DY1#_F0vs7{0>j)+GM+M(r@)SYk|@_3x)ENW_z0T%D%p$nK`mB9Q&6jpiBS_?v9 z7m4AWP*{~E6&{6E{hKaUZBeTYwCWD>YAEcA#d{raPjrx9fd&f%UT_fTATJgd>74+i z0OSD_03?=WWL;4JDgdg>vO4Hj0DQAS>``t>|A?ctY>W6HGSUbDL;xfn;-k1M%Yq(> zh3F+V(*+10IsnoTs(29-Tv4$SiD>XKQ&0?WrzT<{BaXErU24p;{K*`Pa)rmT20%wz zw3bAyxk3R25hUqsI`I1z01X686wHJLFa?bS+svUMb0Rzu9y$OB7lff<)j&;>U700*ZH^V5~DgvY9r^lEZ7w#KeWOI7RXs;>4Nkk$9| zK8yD|?iZ}xzQ-{>zTh0IEws7+S`SU`$*LTyJB{Wu@za-+&!=4PFV_(T95yDT|9U>- zBsT||?IsoE%*Ke%Rc+6r8P*HWr@6AK!*=PV_di(3^lvlIM`fsn|MsSJ6J2b*-$74h zcwF#}!Ep6H1tY-@2d{cpu6-D0ERJBU z-Vc51>}d(>xaHqB_(La&@{1U=u_Gj$eBx?7Rg1QLpAPe=XPH%p=B$CashiaBF3i~W z)9X9iG*n@W_MQ?1e_ z14~{zWo4+|Ut8^w$~JGW`JZIpF~7HNjU8#*yW~0HCu8H8i8mb)uZVL}n~r>W&@^{S>Z#Qa zq_wG|8DTo!27Y3@-)z79{^4Qumi-MC*^f4ETP?Ns=BTFVUU7BRfcA%ArKH{q;m6N? z3at8LN83dmL;sYRg_D0sf9(}NoAA85Fk@}#wtJI7TSceq4g0YnBLYP)?@#i`DUUZt zT-pQHos#?Vy9-XCbl2rcZ;v!3R%p0uW`wV&LCF)$1n*UZ(B%H5mru-J_vJp-a(u0> zAlal`EKO={+p8=U{p;I>`of%ajzZpVFk&WGyq|Irvt-VdE6#xLaCr9y&yurRH6METAVD8FU7Q9)4P{k zXFB>-WIAea@9?}kX@gbD#~b^LZJs%zd*sw??E<`1B4t9Vn#hUk&qRN4Ihg6wRYvzO zrH@f}3Hl=$51SspkU6c!4R(n^oo_h0wXyDNLAlh=p^!hPY|EolMWJ|2{ah~zB`+W3c#MLc!!K*_K-B@{3biLxhZr`LsmKq0KL z{>^^Ra-|a!KZQTKeq$j)_}b=6k)rp4oNde2Ol%rfPa}9@g_K5`nxO6|xu1Hv&3e^_ zi^NMIO46crmGxe|yK+|T|52x>>xY+b6Nf%ZWE3S8TN)=_l{x+K1qSEP67c?9o^C7W zVQ%{4sAim;cv|C)rk_RKp}B6OR7U^__2mXL$@VWZS4!aydOg%BuZZ0ZHV(5l?-!F{v~>A9g{wS^OJ#Pj5^eb0lNKfMeb7%4f9@i9MRaQ+sf zJE%dlNr~XnU~HgPT>+c-M6J$wz&HFHT}bQhvfqQTAE3swyGLFM^ql=(OUmXd^=VZr zhwtyGzCjwAW(*`~J2Sp8Dr>KVy9-`f++%gCIOdO}xMkuWZDW~ly3;+Lk4sni_F0guGnGR}-lV{x;*JH>z%5kF2~YXYjxqHK$o?t#tME zb;FdF4GIt))GcmFE^(j`C=-Eya3y&0_&}z`!n8P;M^0EL07Ixm>E%-aQZY!xf?uM- zKg(hYYRM4Ir^h5pvN>#c(Q2t|`g;gCN`X@dI4~e#VKrz-nyBv1t@CmQ&6?NT_JeiJF;V>|~opp@S4rD(PtvDiy^OJ&|-m zR0`>YbReDc^gKw%r}Vo&qwm-6^?F{ve|~$pc3<~(U)O!Vufy!x{aLy)Xb}RT7whTm z;qM_0bwD7LdVc==*^DK5^SG&8u_c3-5^ovIkw~~g!6qh?D~J;^ndL00RLqS@k#Zy= zwvaF4@;K$O9FdsAW=T1*wVYIuP%M=&`LTAp<5C1{DX^79^I2@MP(la7XudEug~y4O zNX02^DP6$jMRUYFmLPsKo+D*WEhg=b zqUl4LB~lmyTPTR*#xoR?=qZinSg}y_3kxHT#glM)6o`JwAg+Kb9hyeBoRcOKiesY{ z8b(;1nV_fRYZ(k5MF&BEq^u+k1n*xC`!a=i6lP}tRk%5gQZ()EC`XYtCWt3f#F9v` zM1c@6VvaxpO!-17hayaBo*BfRX&@eKHi#-6oDm(viUo0EaKvJvxCfYWWWPMBosk@@ zHtm0TYqf|5l1-!2YT+zSL6($H@9xhML41}-!r*hn@xU{ofP*EAIq_VHlp|)&NHbQG zHe+UGJ-sJZeI{l_aYS?D1t44u1we*O%$0&IXeAP~xP5C{Yj z5d1m=$Q=+7Nt7d$H0BYJ6lYYCHdezr+cP^TC59so-IB65`-t}$J0u-yMUjvYqygR; zkPiY3(U1=j3?fJgyl;X~B(NAjK_GXl5D9L`ayd~+W1NDlB`&5TC`9l_IfX!JQ&1!l zvRO`1(!dib$R0H!1wx@A5=u@-6A9W7UY!J?s1O>3r4xzBAvpx}$Q0yg>C12u5iD!k z;I*ib4N1-jpi_`oqC6TX%%LN(>ZJr?I2BgW@xtrcs391T7Zt+mc~zlEa#1oJfy8Ra zHvwgRpiFW`5j26S0fF2~AS1D40Dy$VYN}D_5EY;y%Xg#c1a$~ag2*Uk%13aLmb@Go z8xoON?GnNqR4HLjIEttpjn}ck>r(NWB-l#`_7XZpL}^1P8!GS`(g7v2nPrir0!DkB)7D0mA`6cIR0f$%gEhO!$XE6zlFLAE3aZxsw2ONJmM z)`$opDp1;VJRNUlj3t%>(L6a;3qY|3P^kaO1;~}LB3CA@1QR6ISdP_(lY_*XKxjA+ zpfKgwIY4AMHCLt+^Z~N@a7p8B5J>C-xGsscNUZ6Uh=|0R{kK}N=5nkK(6nVBu?y80 zplr~P4H=@s9z&!ha;z?f*bFM6TAPRl-T*W-1saQ1f&~(50r@bDT?v**EDiS4mA-p3nPzQ-IglAKc zLV^5?&5eShp0BNg6S5zkz zE{YO@9rz^J!JmYwim*pw?G#?1!5Q-uUO4~P3wsFf0xAMa1VMDsF2|b?obav$$5w(P z-i_dZcPA`HVizkubX2(d(Z&jIsEX8rJfo@8sde~|4iHcQC`aIjqU@b!u8_cr^9;Yx z021&ENL`kJ`gB!P14Kk(-CPN-s9>o$1pcS!#}~n44z1H30} zYd0;o2P3Qx<5>&{^eqZoSjTCa|D~hkovQE)0&-)CZp2O$BzQJ~ASiXWQg>63pf?q0t^s;#1 zT`56HhK5@kmV$#j1{N|AENEr%!8_6B?7Wt_mWHL3S1$2uLV{d@%u8X2k*UNA`7EwL zhT*ePnXGt@3@u_w6J#n94m(B6k>L`gQV~-q;HAlwIjK@HONNuM_@J2rUzG3xD;3+| zWXg)3Muq}k`TyT7RkEaDWB5hL0)C-DXE!ZaA!Nh;=KxX#1Ob9$;|6GE9Bsk;SM00- z562hIv*|Q%2*&x-ygnG=IlK>CkMJDUhwBvnu7`QJj>&-F9L}C5m{;`x4J;Ua{*wdL zI*9Y|n27N56T|`Q zn~MEVKp(S?BZhnCBm~OQk`4<%zX|ujusK?$1KKi)h$Rz%MoG~>i$TLGggY=9E>0}u z12IV9Y@h`*V2uMeak5!Jz)Fz{nOr{HV#B~xBmfhelZ5cM3YCB}tzx+>0V|FhXB8}r zlgfaVl_WtZlyU{}G|oDXKx!pQ5OM_ER4dT2ORV6w%8JL0nPR59NlQ*DsE{Qw@mvG~ zADqPiNeW3V>53c?KE9@Y<+Gp6sblZ=oEP&O*vfu1pEHaFzmJ%6d(f48))Ju`&%N~4 zwLiK*ZKvY)o+vt40cEMs?rvkTE!H_3oZZr0cO@vA{u6@XD+Wd*Mj*Yoh5f3AK~d;bagmg)n|WsHTv6CqmrWwDr%{$5k6v z;V&AH5qFW2_z4@yRHbIiA~<(5{(L3#!)?!8v%$#!l^O1wZacevodxk7_N z!rsqiLAQ@bJu!NS+GjK}+E4woHATNbe9mThTTpqA%jA<}o$tDFMQyoXH=0HMSra$h zfVT|n({i`kt(IF|Q0a|2xOC&9io;2QliO_3Pr_$$bJi#2?%vjzVG|tWQ2#AC*?utV z@Q==*_mY^ds^-JltpoDd44L83vaIKry1OAoh{HmQ!|0qxsI(ewe3f&z+#}C=@+kep z{o0^VsGq>O=Xw8-Nt|->>G@JH%2$ztnM}*O zt~Nhch#liklm4f+wxt`Ryf)G?gZIC*59gIrPz;sI{E~p=VrQc(*+ zuI01X-9330vTTo8XS5BU|J;AQ(V=4Aod=Bm2Jt?x`vUKMSCc>6g#Ud#_(5v++wH1q zU;dc4g;I0XVz@Yd!aBC==P8D3TV{yC;7@feyS1uUn_d<~+3~1n5BOv(UQ`?r5WB`P z-^iRvHVMuuzoced@4WSg6LaLj3S`SleCcC+vE|cxyYsWPL&wR{O^vE-uf|>mE73Hu z=Hi35l$5(0QV(r?J??~0Qk9bylvOA5FlL))2Y7BvYiculywYyov$JKQ)wj)umcL4+ z_Uhb&%G@f4MjdWfY8>*qFWj52dx~J?J7`s%8F3*e&3@L&ARGO2_4i*Gi6hg-iS@;n zFVoH6be3&yDb~rm>5z0}$eiG^(06N6x#sRa+HIASWks)lRuAoq&>Q3&+G9iA*41Pq zKD-CVq5Xyq?j5Ugdp&u{iJ%nz+`r8v>0VwlmG@wQ&C}gF9=VUcYl)inboAx*MTXqe z+EH`YK>u9u@e6xiH^w;%!XsqFl$C)ePpH06WpBLVx&K63Qc3TgXi5Biyedab(K)|Rv{A|P{d3dcoyZhUtLm`%FyWK=-#nr!c*rxaQ@FY@Tl#bFEkM zxm(NgR5UcLkQ3gQhjEr;L89DOL6&3V@giK*!R^a?`-%T#UY0HBvql@fZoZbvy6`sG zBlKgskT}Q5zvY)>Y5zZJwoaMKM zO^Vjn*L-is&AJm*RVX}PWUP}DNgBT(Wg}Y4F21uwd8(~R8fsj;EV9|{b+L5g<%ocx z(yDhE#QL%gWyXI}-kEj>8v0>?@ju=c@P|tyoQcZGdcwp%{Qri054TRjhhlZX{{rFZ!hiI6fxtlAmFBi`D znz%C@XRW)3IA)!!8f(qee%E})ZsfSnf^Box9(FkPyvH#kv7l4DOi%OFi|}RoM?WmA zG%RUentkYUdgxMSOn$|-NzeQ_Em8Q*7`gkhBgK3Vr`7jgjP_ouyIPd>aWns>{~zHQ zBS-SKl={v#NizM*^}zn&ULNf+sme`0fqy_7kmq`l1LhmO(K5|ECF?Uv3_pp9YWt@g zw`2!@<9gcXxbIu`?)$sz%Uz}0r_C4dxVN`RPqq*5!mMikkX;=dfHXS-M^^c%6)iGs zs3U80ZU>>}qgHxCUGImwJo~f@QTCs2o^tT;ux;Om@OXD_gpw$KltTPW>3d3%Ypt8j zvFu#-@`dgZ0nKPAs$@>*6V-3m|M-06#luMbBhlvArlUOboNuA+xi`qbSF+@sxkcZ12H{)=&rs0hsvpTM+ezZKu9i58*9JfxX2yMbAj z=sDbI!9RtM`Rzt8>sEOMo?GZLdZP8kJ>f0h&c49a=NF&k-|?z`5pZu~OV7CT?8w|t zw@$l4P9qxHrw&(Q9`qTC!i1-uFe{G^U2p$K)v3EqG zK4L0ZczU_|hs>ZG>fs6Hl+C4Q))<-N=2Va2w7Xjut#tgG`u3r}L3>7{=!Ayts#J}y zc`ms*US#t$Y}5IzHAVu=1f^A{gW1x&!$!kl#oK)J_ANGhtMzXBWM*ZfhD$|{w+(2` z-ujqf{NteUyyTGe3DuX|KlrzV&3|OknEvJYq4xJ*?c?V8m&Bmi{8!oA#}cpa-iQhr zA6Z~>?&?9)>eC{U{;t6=8rtYhX$7$@;yq2>llU3CmGQPKIjG0OX+hOH%8K6Hq0Y6; zm@wjJqQ&?T_qQ?o+9%0O0dB;m@n|r*fU(B+PgRf8W=SzpZ~uI{fAo$yzo~>xjMP@{ zS@=Dm8e10Stw}t4v>KnY_owfXUBjPFhOlxT8ijdZKhXb-_+n|De%Y?p*)2N-9aC z9^11zeWS(QsV0B6dg_Y4e`#_!$n%%Q{myD{T67iB;2T{MO#3nR&R)s>CuX#C zAQ7=d$d-T>T?6hdRbHo-6ooD?xaUhO#T7)zpWK?fG9r8QC5 zZ@12Ijo*bwjgOMgTq#X-_uTRd3h)cx`0+t_f#s=FpUlt6mp2GScil|7oPWQSmzU@6 z@;*H(=28bg>EbHOtTfN1nWgC&szrjZA)2Y}`T3$3`jIGkz21CGjB9_%IlJ=_Ia`k`lK-ZP5z8|*K0R#JE$ogS%d*zJq$x04a%F+(jre80t3SQFk=*;R zu*E2|5Z^#F7}7LIu(sVCLmuC>|O>p8$~d-IzG6xiT!DR z{eIqrTbn30one8vVY{8AJ;d`{TNjZX&F^|zsKdbM+8+vTss9kPuG3dKc>>+vIP~!K z#Xs-7J=%;YAy?U@iM|tm zG6pX0L0&N|y8LZJvoK*}zTq~H>ebNrY+j{IaK5Lw~NrKpyAl&?(w|_AD^EaPYC0`jdD0cz$|vrte|0M5pOECz z;GeX#RX?0BuKwBCwe3gAJj-0X8IY+^c4cooW4YuT1H8@@j#{w9@l^;0kB1al0tRbIyOzf z;&a(DG`M}||C=oFUxf)X?kN86gOLAf|G$OPJAlUmQwUKq6*f;O;l#oV=wJ5|3W!s; z6H~0}jORB~4#?DIKBJkEC4v{&W(9Z{00t4DUoZIH2fkB4YT%-9OK{$}9k@K)R$Mkt zjFaMgaeg>koE^>{w;1PubHr`O<={5sw%|74(s3EM6v3RZm7ut_!{uT9+DkXTeG)M^!5 zgrY@30kw)Eptg#STB;S4T7+w_TCsXd#oB5M{S>t=$em4sMen`e*FU=7_uH8{=gfJ` z?3^(~BY?2v!Xa4t8+@<8*3^nhZ_VnN*=^G)AlCp$SAbrc*0Y zF*+-bBn@PqRH`PF2C1|XqiIqtGtoF@lpFL$wGOXT;6@UcV>GU4z%51tNmEk2Vp@^X zM968ifuJ(=n4C0FVnEE)8x$rTo=MT9Nls_tqz)rgy(*lR+893T#M?7)5bV!T>rXPEb-3 z*BfYDXwYWLFohOhm5MV#HVpHD;~w&-7osU4Aeazw2qUh?jGQqqGS!4mP2dV30HzHM zhE@zrhGGp09IW?85CowB%yR@F0Kf@G%ODnSED8%Fkx~JNH+5aix`iegPAYpV%HnlFaD!xy z81S2{LlkaD!^MmXLKHm+1qvX*<(EP8#3=l4M#9Mrg?p!QQ3Opz_aFkH6Ay_)Scn7K z2XoNyZe+-c5azg9<#{N~;gxgw$WAVQF@iEP_!2%a$l*Jqs03k40Krix-o-FjDZ~^_=s2_3}n3UM#VyFAU^zgs08NtI0(6ZFvr)b!WXFUo5}Ts zIsVqMA21}G$@NDdD2*o5nN3R28<{p4zyZJ+fD6C^a0OuY5=cXQ0Cxa}?g22`-e=@J z0bqckxp17tsxt%7909!S{4w@EXsq*jb~@9#+53!57ki)agXuHRC;-MbV}})QA{d{2 z>|<|+2Ef>{K5%YjSF)N0GH|h-#0Kq$1v>CXXz*g09Tm6|GwEnE8=Oqil+85``fICG)BBP8T6@eUp z(I!d*6vtY9V`s6q{gYn4c4r0u3$QA}OYDO0@UZU{RlGi;G=Tg6WocCUT zzt99|?-nrLuwRPM9{n(z=D(6FpIiM4Ycf1i>k@#E%^*()&P)VgzAZlhW?zK>z5vW# zGPLLW8VwRM7$;lThy{X1vMGYuOPD~Ro^fy7+%>YgOtZ=_a+%K~k%n0#8J>k@s|_a7 zDrH88a_mrE)o5Z92qn;P(e_O+3z?0R6iB&R2$>!#W(Wpr3Z@tpY_lgwt&|Zn6H+A^bN~-$60z9@5HJ&MkgD}e*a zNTJ3EOsQ6i(hN%43}%U_EQ5ho6RHqA8z*RyG0T7xYKsU|Axgx2I3k@|X6x8Kzfj!5 z?EY+-N)48@ydV`EsBTMncg9!mb%vqG#vkJ59F5CugO5#ovvBiii6Lj=jo3V)>aDHu zJkO2pb6X!({~USe`f2_8j}*&_!|$8Inpu5uyy>6a4)-YzjmarFd!S7|X{u-a?HkjL zC#xnooZr;mw!OY@*{fcg&m5&>h1Cadsg$d1`Cb>{Gd+v$9g(EL%8sZv4^i zoHEZO_sOP!y;Wm#5iP1*;=yBoJ2`Ftqa!h$N%Iyzi_3YX;V@Ocs0c-Zj$ZpDRZ^T^ z8zJ^~3sATfDJ_TJ(mr8K%Nq%Te(g^W zPaYBfFU`L?ZhhS|rzrzpZ(M%rAF_SRwMyxhOVCt!qw>k6XL(-f zdG9^xmEvz}8?JSF{&cpp*xkeJpI`qTDEF>z3QO|YsY={>xGp%WZ>6{^t88`l(s$h* z!kTZr);|CzLaLqp7iQ+aGO;mVQ>6|3P!{j?*~R^a{qado()l&MQEW~cUSHFh7+>&8*kz+Lv4Q-3Qe}J8N!1m_3ov2ta zdDWy1Csi$M(da4O>FvS~vK#P0vZ^AQnw?%JMK7n_DNED)DSn#@`-g4mb(ehW91>hp zNX%{O>l6fh-t_+EGq=P0w?2CHRM8)4l9R$mb*^pSUoSvg95?p{eX^!m#)+ykZ!&N5 zJ37m>N8s<=eKIYe?aRrIaI0_F>e$=U{iX?}$M=m}ur0exUKE?W24aRHpD(IQsUVIh!<|_+jUYyL*~X9az~NmeBZh5%I4`LG|H^+WpZ9 zy5Ah*2hwL3POj)%Ds*1^;Dg$4w(RI!seLBAm2k>?(VfO0e@+=#ecZJ^ETv~ekUIaJ z=+X!GGJ7rz_Fa7}I8*=ex>o%Bj)Ao|K26LHKDLB+=i$TK->s>c|A%1r;I>?)bo`Op ziR&|7kC#UW)0%r;U5|H__^&_tVAgEnQq*jNoC1j}nmMDa%a-zrEnm(%Cr0D0IIf9y z>vGHpC>`<1(+#0T8R-Wy=3KGxB3&boR3wl4BKPCmO;-dm#3}OrtrIiM&9Y>9U7+_> zQNwPxyGOQs#L3V6rD0_)RI)N<<2#AL^a}rW-6oc%CRk319^E5Mb3+!VyuG(%>0Vm? zsV~M!{PFt_?wxbF8}!Dma$fm`{P4#_M@IAbi5u`sVKcJX4rLxoBWsFPwF{=d?zA~E ztWd6AQnq;Hm)(z_Hn@}*ZoU3-c~v71+5Sc8#v2n}8x?y$+2e%x?MmN!o1#+q=~+zy z`>Mh_l1i4(X`hg}%kTGN;TFsCoF%#G*X-+Q$3 z_~728dhNE(p5Czscg?8YXL+_Gw@CC&99B|yXXRU0WAeW}@nqkfuCs$B6>H(o$2|xG z`7X{9s|Bn0Y5~ZqZuYydJPVg=aZ;K+g{gP2+0lMqw`TDyrg#i1b{J$6LMXKga7KV1 z0C1OP=4G)ob{4n{+bD?HL9R1UxPoD@pO-+Jn1f7B14#@XuHMFCW3)lfXg3j{yx3@e zrO0Yts@4BroAnB#F%Pe_FM7q+Xh7w8DR$T<^S@%Z25e(HDpnDgUM&YV1)S8|7v&|Q zRrTmMG1`zHiWSMR?8$RGV%pH zCWgAlFN8{_P-EIQ`^_TbB1q)OBtudlIXv7yf=UaCq8#`0+n5t9Au2LF$u9<|5lae+ ziHa!xJ4Gy>Oe>Bi(?S>;tWX(N@B{k!MU!J=A#7w6Kw_wov0&1OC>j+X6;>P+6%!Cj zp->}<5#(qRSQWJ&XcR|{r2$@A2!z{I$_ZF4GFZtZgd7uFOpAh*0d3e0@GT%Tk{pvn z1nNSBf3I@G_)1oh@#OGOiaii$784T{Q%p^SZ3Ap;Plen50c1)THOW4P92!d{?T!kK z9H-LA!G1tFh8FhZ=;-jI;vnEG#?t(wL&&iqst{LbB#jzOjqw8tZKyEL;Q4Ei<3XX3 z6hAO`9F-Ir8A^MxsoPF!QbJS=#XpEj3k(q_0yo$Pk;7xD{sA#jwD3?;aB^rg#LLje zFDlY6A~ZG@tP-H%NhJ6(&hS748H@&WNHmZf7((?6jEbbiM1?c7j*pFmJqz107UKWk z{qXW)R~U;7rbbd@K#WF3MsLJH>^Llm8cFk`B}G$Xp>6-RsACie-54boT4;EzeQb1i zC@mEP5n}>iGr#``OWhN@L56rX#~Z~2$3+0K3>S=tZuo>@U&EEnRDfGReB}7%kPWXF z!}^dzBV!GtfujPVqQddOhY{qY0IDCELcz<+L)`zg{t5V%=r}mKW1~02`^A4);z6*0 zF#D$~_W0&}Ho(zw(G-x1;t<~kKP=_n_V}A6HdZ!f#c=pDRxlnxjR~f1&J+vOVKo0e z1&I;Pe@lZA2&hny^03vxoPLzhm^PRJ#5I`~7aI*CIVyoliH@K~1W;oP?HRs?unc7w z&faiUKk#r&(q=NOfXs@E0VbjOg;U9~G@^m7fjy8HPPGpLnuI`HG1TC=aB_^_KY?5v z9TOVCXugO6HQ+xTpdc|=A#5xagfQ@0D3A<~D`pU2j1)o+ryXZBV?YI>VimFSZL!pt zc&ZBwwq&B6iMM=N&j~SFs;!45*`{E z9vVrdz&i0L{%!nyf+(vfGBKG%QK(Ez*j6TR0RaDW0yqo+kHFHIn7Jje2)rJ$f*;~m z%`(n%j00ihk{(x@Rd3dzfgq9wkT?X1#0{?YBnu{R^Cwwg!7ZA^46dmpBo1`i;+YV| ztXNDH;y4}4%>5CMXv1K&h)h^46CR6iVM6g^aU=^oj*e%;WB=*EwqSAmSQLcEV-fvy zA~QFd2ag!9!3ZI1F+y%gEI$d&tA^$y$YX>EXe^-PU^))VpNi%WL~nCK3z(n<2?}#+ z7DT|JW75PejY3B`6ytK3IKqScp2k80c?HLaGCyBny8W{Wx#~Ngd2V zfQgc7O-KUZlccwyNEiuu%r+!i4gv84ZtiGclWp=C0Uoph$s!tFc5XBiy`K%Ax~UVy z%}@#wV^{gB)ds zzdS|?IY2^z7B2`CvOGr84T&Ehq2-X=aMVd+Nm$r@14tC3EycJ>(;+@Etp*kW$#5LU zp5ZS>F#?D}%OoMoN$71jI>gV0AJ@TbN9wyFiJ0yDBs@lzh>=A=vLs}t0Y)AHZ6{*n zkXRxt9*?vD`MN=t)4(W$u**b1@+7nXj>JqLl>_azu@PU8kTg;`j)c}BkZ?#6S{KYB z0Fy0>2_%c-ASKjDG&rniAXxPNi&+ma3o@A70CWHUn^_+)3jt<5Bt{YBx(-HR0Hc6_ z6i8?>kTyyPNRfnA0EwYQLL2;}p)f;3XIMj^Gpyha9D`&ElPtzJXof(v2!pK7Aivlk zlK@$iL6(Hc0~=H$Kow(9c^J$q8)RcZ#xuyMf0IoBSsaj?%E8=%pdkTVz=mCcU5Mi+ zI-63Cuvn}h@t~lh1(9fzar^f{5Z6wI`?tlcIDjTOe6~k3k*+S z!$RO+G)NU99g+lYw+3!k;lN@^NEG1V0z6WHhYK#aC?pFWqXzm_>5w$cibp_d+87V2>B-)$7iMB=CA%Tj3q@#{e1*_MA1?tivS)hYGNDe(cHHC z_C#P5JdR+7W5(IyA;50{Ufj%sGfe5Vwq{15y%>9Re7k1dPB3ECTFc$y*>uf_nHgrf02=W1fY;`aW8+q*j=e0c%V~2q3jFC(PBF2FLikup_ zs~IElCR!K=6Ar9Bs5>Mz9Plj3gg}SX!6aBb)(nXPH9r~$;Zwmx_WvHP0fuvc$Cnz4 zgyUfZga%lw0C2Y%iU((g1P0m|2$XREYxzr|Lz=euR0QNmhqQpM{-E1Q9pem2h8P?W z&N>)Jq%Hs=JQ=JftfM-{1$fRyjf5t{OfK3OM;r&yo}>mpsq2B}C|Gkkqz&952z=qe z@P#XgBR2%(s(^9lVJ7jwp?`)Sb_yO6(!sccY21-`Fbz^3AP5BH28-t=f(hJ#e;A0z ze}ymbmM0z30g6-n5s+6c#(QI{L5)T819*cV_?bVwf-LE?c)a9uZGG#RNc0Gd1C2R0AP3NIbDk1xYMJ_8sZ z1muGy!cTuZIt0ay2W$8J+Ya4m`~62X(Cbf!48iJmgK!{oFk$Hs33y%j7$)HFZUjcb zqZD`zl#c)$I)bsD0I(HgAc1tq2#k*ehNQs71o#flBV(|~FoxH}K8(x7GSMLuumll0 zWD4qGEZT# zhr|G#;FQAR58>UMNL)@F(f*7Cc4BPr)YM6Y&Fvi{bS%JTsYx9Pt|03)Fd>p41Pm~t z2q**~V4NglGZo6%0}%Kj$&GzV1(~r2P)Eybw5!3MfRxIN`rEDnZGXmY3%EuQ-j|Vh zD7hpe!$FcJB$OKLHTF?lE)gu+lFc68E?8|YdN&=i28*WIBcL#COr)BTnv5nvM>!Pv7}KtecUNi3saNdiOf0)~#$!Gwby z#NPxXp`7640NSV{S^P0UBm@+`shB!QOF1M936lee5&sZ336a2cB$G|6N6{f0OAsK@ zbjTJcodA^Hql1YCNfyn>Wv5z9teXjz|2W#R0c~7{w#Y!6$D&OFIf~mDUI|num6?*9 zoJl4Wk{XRf$OO4B38ILHl%WRe7E2)UIKgGN0j$Cf<&W_K`h%Ss7A22~!J$J)nII=J zbFry($Q~GhK#~Oe2Ljk^kWe%dk7O<$M6Lr!9y8zwAvjTlfgHyTKY+?0nTxfjLr%at zhM<__Vo7w!88mj1)Cq8L;V}UlU9j^E19pf3n@~_na*Kh-To`c+o{qC_OmM-H!NenwvY2?38xm;kmBNCB#9$oBz}!$IE*zGK zXYAT=j3;vZKfA>Q4*bS*49C+*K%N9@&>`=Qxl+JfDI0U0!ldBvxK428j|K{2HxvX@ zqdGB(;F*j*z$A-FK_Lt<$p|R%FCSAXdLKR&C#_C zAwdj-5osj&4H!y?U!u|JOb9501m1+PkPHIK+@OI9n*~4TH(rpTY>?c5H3I}-&c^P8 z1jI55UM|?VfUZn1A`gCOTRuEkfeKHikq1iNyp03G8M- zLh*pOC8O{c!E>R2@mx4GfH{PK3P7o2V!StIV^f(WK}Cb#8$o5;cn2v&4j`aIa9M{R zn1ysGpq+(;O~vu|qyLK^Sd7Sn#4-4azueyw~51Y z6am2UVLGe=Y%UlFXAJ-Fs{$P6f%(-paZPa7`WFt)AsAy#!QBi1JeL)Kzw=51eCH;8 z7r5I1_&cw|CJwLB2>`5vD*(5D;jny|-vfXr09ZcE?+pN^`vUL-0MlVT0|3Buc;3KG zJPh2!0sI{s1#oySSWfgN9bS730C+5n$8O><56lm8fGG|@JOEfuB7me#9Og*|0Lx4P zupa=-1ItMT@K+}6QaOc?+)0Kjw^06YNx%7gDP zo!LAt5|%>&fC7*Q(*TqKfPWAO(K$zO&jA3_OJEudn{;?SSoebf;C|*!dM3bOK3E>y z&jizVh0?%W%&-jjM+|^a25epC5at9Fe1=12VDJe98L=C5@MT1RD^~4-#5FM`(b~qV zmm^x89Ss1Dm(jD8%s4wz{Ckc8I@lQGT_9UP;KlQpeS|zYj zsNl$nN`@8P!r)|Kd=CaqHbxTxhc_1k-2y&9$186nKOk<-q7(o-9%67XGw{D1!LV01 zr-x5TKx;dLjSw9d0KTXzfNV}wBnMLs)KoOoG>Jr_0zNb%B92B52&V#O4hA#p1~X{0 zX3)SD{vk4YrSQjEba!&)VRm=s)DY690N-(@Bi-_aCm!7+^5LxrfgPVTRX* zf=^FiWUJ9el$dRvFai>WVGsmk`Eu~`cSQw)fI(OSR0seZ&u~~&0m$FPE5QBV`SI_Z z_;()sJN7fc7&xzB-ZTJkjvN56cN2&6IRO9*fIR?UC&M^gci=WFfFJ;o0N^~L0D#qn zbt7-KVID64{s3V4a6Ro6yu;Y79NgD5CCVmvC-s&NN^^`IJ^c2q%l!})Y#YrcE({?U{nk>VJqN*5zt2k z=Q7j;PCy{Xfm71Z2>5&(R*W?k=oCl|W7?(c0#0LMl_{a*NODkUkg`)$5G?_WQjQIY zilTu7PDN@wIDk@)4vC^hh9)Y5RFY}F=Z6{j2{B*yH>DRvM~eM?S|Zk6PxFry=A5N= z_P()xUO(b0d;Y?+w$?X1f7%BRD11$C))Cfy+To$P)9C4^r+a3$%9-?vjnG@Jm{9^Q zeOWM9emK$Y`o3;XU>EkH%lT!GYvJDxzMmN-@=RZeteA5AdPBZ;u6pjc^?tDlvD>c~ zcOT>FFs7_WSWm{Uzq&SF^TDjfO{4L)Ly>d(J!RRZ1oNr#w(8-NMuM-nG)#MY%*=O z({uyMr`E)!FX1Y<<^a+8w{nu@dU}alfSevRPcOsMU-H``)*cH+ai$?{y5W zczz;yi{|_z8;$vP_af`MjDhe(E_*GtJyqJqMhoUo7LJ>HUwvgxs7Te$;ndKmy5JLj zvz+77>9%J^YuCJGQchnf%RXUtRDDoYrj@{vTb?+de2V)Wn2!shZ=tVLptZj9k%-yWIN@MqOyEL&y-oscgJ@7`8)CsJ)n&1 z=;v3s-oNL-j(yV=WdM z-Uh~g{r64Qq~0u0ulz=kb{rFWX0+g;(pTmZQ)kb?-c+(p)$_yQPYPdIODwv1c0VY- z&-v+3=5R-Oo*`GMV8npM0SDX8-l{>znHkPiSCi*$*%7BrZU`i0-l!-(LFI$GtYs>+gfF<)q5g9?E`4L%rDj1VM_OAJ#K$dvbB`g+Ahf50it+ z2jRm)@|EOx-6xhK;$37*@9ZrSp=~0O^E-CYq#l|-MbhI70)ouw`E%pwucjl}qb!ML z2!o<}jWrtQB%fl@mKOaR`Uh)EjiWoXOoEj@1@%T8`Z;93MStBUf_lBH&$pdPZYC$^ zTJCWTRipclwvM<>?lFqHd@=Xc<21B}vchc%JHFh4j)&*NZ)fQZ`=Hq_Sv&X1yY#Vm zsEioRYIeHaxzX%%zDQf1%e(acd5f0XQ^6R$I+cSJc~axee24E`;!+ma)A+Qp;U0EY zvGMalobDNQPWj}uALn19jg@~Z*BBU07ueRye$ce9-PhuNqS>liR|@&eQM)wt-7hl^ zZssD3eo9}NJJpQUuz{=6mHMK0%a{izle$+=o=i(kbiKwy7W}Ty%*HmZcR%dXG(J^% z>{s`9v4aK1ZDED!p*H>&o?}gS#7W*e4cxvD)R%rNPFCfx3ND3e4lPXO4j4|=qANSJ zf*VsW1PAh8ky#w5s$G45g@4N8R2ZlJ#KG&vqjT?DTqwgo(ryLB=#L!wygH_iQ%~?sjvo9c1CZjw#o^3+G@+B^#eAhAmy(q!UP)Wk#($xo)cWmSy;km+H^Og>3 z6Ws-)VxCOThUxq4Zl&rSz%#-{ufr9Z=r2f&DT{c5QcUOs?NGen(GN&2r!7GPgMT{vEbSoD4m2GBw2} z9{1N1{}S@p)|y%Pq(_zMCpT2YKz&k)^<=B@i?hOc<&=K)dE@unP6~_N-&4RVklgNn zfE3OxC>z{>T{%%)niKv&B9&e0lj!Fjamin~H~6HC4eQ2_z3Gzu6!E3bDuR#sQ+TH& zlJDZ99MkuM-oNf!-Q{H7LKi`Om^>JCLRjoUUXYyXnt(_{>+SKc?OE0)4+t6p-|7Zp zSH40MtWsybw!RdUSnc8PbgCvu8kA_8tmlq%ECJk9gxGl^XZ{`lsoP$cbVJiOag z(y2|R7-3$(VkT#!g-QF7KbVe9)Hdv|h}o;Joc6uxF2|UJyRQC$=*jEn-P1=qpO*z( zPWJhVP|%!OLb!)^9FDxwJpD<`w5{E9IlA@Yp64`7G{w7q`s%rp)7vTvZfzHcHq3pv z8h+OBg=tekmU!sCLaC5K@4eVg9rtJ}{Lm3)IrhP2rF#<4F53W^-{Vz5ufaWe z(Qwu>?QEU=w_;tJ8C(ADhC0=1r|mwi;e_9AwCxfuB3-GRc>SZEr1|dBXmib&VNDD1 zM6ccBv15l669}9wFBI|usOL{`s!duIYR0+edR%^qQI4NGU9D?O@fZ*=>JipFeDYNA zE4`#=-^t5YAWJcVXTr{7!VJ~J$lxW-+`?~wJ@6vL5KU^#VND*s4`3G2us*6uo7K}e!u zdrkhC+p9Lsjv&Tgt_Ses>3JKRPun*bsz&xqZd^~6W;&U`BWtGn>oqOvX!a%AvmI^6 zx(ax2&U?KfV#b3)1g{u%NBYUQoGaqKW%Xd;!7EYA!f0=iLN=p7e~hcb*N$%EuCuit z&SqqXSABUuaK!A#7oE^)iJ^C)J5ZvmK4IsSIFHs{)F%Fl?>arbz3t5W69IMUleC^% z;g>he1j-+<*q%CHqyBg_@tv2_cig3)V|~xIym@u*dDJD7mSfY;Z-qD}cpssjoSeKJ zBga4H=giX~6;ZH^TKZ-B>F}t1%vk!KBR?HRQ5~@%6`kT?Op6|8jU%Vnl(i!@v5}J7 zsaMrQ{n^tL+DuPn7O%7^y>##yc-51c@Q%CI{EdVz^Y?ACf#Qc=->N#VJ_3!MEHYT* z+wtjYrtR?A2)ra&wB1PJ80Naj*OI9x+j(kyO&<|ft6rUbc(hPs_a_u8r}_hEkmp@wyy)HrL=-n7I>Tt`6xo~I1AipkxB}?J9LPmpbmB-~<*}8A4 z%Z7Bc+GY2+t3017s^a#OE0Zh1c=~=;OzMe@(_0r*C$s^Nj7iDcLkV^9cQknXW{WnQZ z_I@_;vn4)_IUHF1nW^oaWK-rXVy_vtRO^-1rTcm8CDAf$C71)H&ur`z7Cv|MH=dZM zNXGn(q#Z+EL34G`aXWo+4Vo1e)*NzIZm<&M#P`Om+EpBH4~TCpVWZxB+QFCkhu2jq z9L>@v&)qeh-}b$6^tDy7nr^J|E??htZLvqU&6|RDE~|&(vBO1_-$LER+52{vyVQ;J z<^EJi%#y@XX7XO<*RGvfJU5s9NSl|>JZSsdNlVo$YkmeEsrHqudY5%YJ16dslyY#K zEmVDaQDwhQPWd9=Lzgn&_YNg>V=H^M?`Sz7)zJLWtHRGgnH+u!Z_9KJddiBvXmEY) zXj=EMRK0c2QA}O0Q{G#(1d7C)!nQ*wgSd46V#DIG=PA$un)&HB%U8+`eGX;4yQ3gu zHSp4pX@TNUw&hQY0bB34t+VlzeI?&qktcSXd!S|6qoucA-QXbhNPt`A@mUt*t$cBc z*nNF%VQKH?2F|k7D@#5Vo*N91ck{FONlUaon(w?_JeM-s)w7_Byhy_rA8jqsvb(*! zUu5iiTtv>-xQomKN6zzKy_1rkE5}>;;gWC^Tj&`7Lv7wYCua@5S)P^u&Z_G8uDdiU z8eQ4L9m;03{@Q#|lDpUVwM{y4caJI3oX`+R@FKQlx~7e$ck3M9HXI>wAM zZKv5G*7W6DU)c|2-H6mKb5ecL$66*Okm&Y|Y5gvH+(LD?tyQ*+<>hm^c>GFbeR}GP z8P&_YSFNu5yp=vQ>s#?h(g$ttQlq#VywW65m6_(1=^0(U9K6=j@=Jn*95ML_b*(OQHPp{+6<~8`3qZA*y=TfJA z91~m5KY{hN8n3-v&N%OyUi-RVu*>>}; zgT2Rj)v|cb0o$av)*=I(Jf*s(ABAccD&BU*xYa&)Y|V7lW{q(*J~r-|w0~#V+;_#g ztFNW-cY3`Z%Ff;Xq&Fhyl{D(`>2-UK!F~J*{_g zvf>y&tL9R7gXKwqY7$=WO@XL(`Uy6t-f-#Z?URe!9bKWj?;>ikxbGxD6*~6@PKn<$4kR)!sn;g~M0kPRP_f z7#aKx`D^c|N*vBu)t=k$vhNo(`)nw_v*c5j1a*NZ6cPKn=&Ai`vxi^JtLX=nIQ;<@ z!FN-frH19QzO;hEZq)kCPWg$fH*SH{ncYDif+$77ON+h>r)!P$i{G6l$|?Rz?N9t} zvG;fJ&@uDV*z$!(R*&|&Qi__%dcgvSfx_1|RPog&_8hZ5VH=^W{!ii2yObXIT{v9I zxBGiecT$9!i|%>3iHqk#=8ssqoP6*6HY+G?>E46eabYG;rE>#6{d|l$Z#b%>&0MmY z?7NhI@-dV6qv@NsPnU%CVo7`UC|sXwjv+Vc6Wg7YR7AKuzudRdTW<-ma69xwGllp4 zd{5nkEMzdKc-ZvpnQhba)Lk!`yA32c9v+S6i}6@!^1}^goovo^ZZ<$z-u;3qE*RV{ zkk4|=lG8x44>OXvV18J%>4O5aV`S^?#KWJCj7kb&uRNW5k>loDZMhVDSWH>b3VF3F zFXQ7q$K|7M(suZ8*(sVfe6tmA_%>>4zAExW*7US}Y2ERxsc2-$$E0qy>vG|$=1ozL zDIBgTN*`WO==dIag^+tI0~d0hQTOc1SkaRyU18Cb;4Pn`j#kL3y*H8FQS~aNvm1to5=;BD%*3(OH8;(crZaP+SUqJz zdq;A6>w6CKH9o|E==^TUDCYWCEXBn2f_vNp2MmRO@7?h;A%Bj0#$-n3se|~_YZbfq z3-UZ7^)gF|$A~L=#My4GfAd<;&V}-JJ^{h=WJjv>zA5|in49xz#(P(eo*IjOD){-n z@ouV6+N=2V^=7k?HBNN#JmQl{8v)#$9ji7c3M8zRi)B#FVSjekaC@> zlS5j@!|vSZhabErX1g=c6TfR;Wbr89h@IM^bHm%nA>YkNr^kn$CTPcIhX1&4XHA{@ zvqQB>%FG6%%zqx0ggtjJto>#__fscTuTuW)7;kYbuUXUUpE_AJ)LX5PrBZ0k$&6k1 zhEipC)_)|Cw5s=DvTMqHWOBo$4)_u*3-ZRPsTWecN}V5R@BAgFC==qjNb{(@z^`1o zFxm9Uc}MHDho8LUUGE5YHhw%7N^fn9^(@@^`^(LS{W0ILt63|W_ab!n+QsqQzTwx| zbK7k#XJDJ3i~Rwv2Jw0b#)H}}3$B^4v4-&L&-6}?X=WaM5F}Jz zS=OD~FgdN^>WzeM=OQww{)(C@)Qh~j&xmpa@m9JzF+OGIKNuUIB~gJah6`6 z$uA1m1q6{ZpWeN%c6QAxP!pFua%HW9Qp_#8vR24?(|5GsYoF`-y*s+{^#$^WxQm7B z6vN9^Q|3j26dzq>aXWYXma#zVaBWtKfR4D>?f_L&_DkY#j>SB%I?ymSy(pdC# z{|=s*?l-2#0^iN|2Dv|GD=j`Va#q%CW=q1C&c&{;^2TBd7x?REzq>`t_VDXod8ypz z{V`kXgx16%#j&k^g@&4f=hohTp+D&N_EVoeb1>m(@7uF`$7&7so}zAL4Sen`o+cC# z8l#1O?7085eeX$ZryaOdgcFu|y{wh{wp6!?TDj*fV_&8-3n$4!^|Qj%evw(d?`q30hx|VgFJYr5<;&uR zo~-1r7K&Sf3j}xOtX%l8PZwKmBgT8fk9mPDko*LlGjh5{MZofvTXop8 z#;9Nx-ej%p<`~^Ihj(C;rd*|MQJpW#oeqBu2^d)M( zEzVHn$+3>dnO^&{bhcuB2VQ3%;~lwLEH*TiOrP!TKw6));XSx4SFKEm7beX5-yn{} z&wT7lw9((vNR8yLJ$-eOEkFHDqUCz3{k_GxmMP6|=N23;{jAa$_=Goc7s5ZkIJDf1 zJY6P5sPP?hR?#Bv9b8Q~BNRV#`!{8)l;Qnhg(hwA)n-^E2}FN zH${8b%gM*H?VYDpD?M(zOH=nB*%w&&xm|1MsbvM1iX56Of~O*dwD_YCvi!eeU(xTzgf36%-w2~ za5>y?_!w;;5|mwy?60!>UzA8s?>8>O znY`GsO zIc48Xy7R(IY%A8^GtK)2?U&W#?Ki< zpDa|>#I&+LkGoU3Cw=Z5?(OztvD7`m*M4grVYN*8DCzc5qWL3puwbb2u-{6^@OW&# zep#mL=;L@b{qVANX%#8<2Sc_>VeW>gT1s%$=XG3q*a=pwzxaY9z1Rx zw#zMI&9^VG{zh$G;MLs)W5ow$9)43u8uoCsyAqpyUthlI)ajI_4|i8FlPqy>E*&#| z-Zrm!1#^Y`N&i%JPIK7+&Qmr1>-~eq4_zn3wu&D<^sQ%=*))UXeKV}DaZON}Z&k4P zAYrKQ#zB@o)-!KTJPvC+t)^$3@Jo}wI7gUT!=e49U;F?YKI+vPThUwb6hfGQ3EQPV zE~fnh@*a+45%Djkule^9W1fT<)Ls}-*rM}OUvKUp|6VVrtS_eQohdR}aqmN`5V-5H zwePY7CQhr3k~kK{HST)gF_B-q;G*7$WjLC=+}!smr*R=e9(XuX0BSHJ$Ek%U+s^ zp`$hb1YTG^QD`A~gr?p3`ih52>Uv~2O zEpjW|b&MoV+bg~^efV|F_U*6i!`J6VFaFjTf@ms3su=c)Wd8PP;7c;3V zdo-i?wyk%LU%YT&pg?W?+`inoVk?ef8_!yYz7rlsJ9TR+PmI!A>fgm~_tawV&93}} zRXd!G6HRbD8D&B#Wmg!v=^=Kd`TUJ4`_PJ1$tPEDJMXYK>C5tDtlcTC;;Zj3Z0-Ax z@l(DjYYPV&n?rSou%$ql9KaQs5Ts+Ea zD)sh4^~>IF^=8YekRv8JyFz`!-cj%Ez+b6I$tYLJ@v~qOdr>iY-sw~FS*CzTBW|Z< z#8s0FeFLRKe;f3_&s^0za76N)@^2&V_mq|lt#XQQP4VS*%|q$e<|+lYG>P+l^l7iK zzNG1JV!>bO#LkbuF73;_-7oz4_2HDPB|eEqdf1b=j~}D#+y<@hq=yZOuUh*hFTPc? z^VzZ>a!^U}jS#=WyItpkD_yV>p&)yu5J5ROlESP-he!7^f+P;2KU7jcAeIEJ=SaUEq}Ou=?4Ax;1>CuZ1bGJmMDjo zs1l=QUZ1Dqss`NWYogjc#Fn|f&7SzQr|<(gD?&2;>CjWp&b8=i+U4U`r(QVRiRne3 z)A3;)7D*Cc*e%R*cj)b-hZonZ{V)d;{eGh4JDqYl&aBw*5$~E-$pky_R0o}s?MvjN zy|Kx|@9r|^xo=vsqIo&|{L4j!rQ~eE+9NtS1J2h_Cw7jW$=CX=bjD-t#`Cu;dsj+S z)i1Eudxr1ezPO7|{Eyo78CqiH+aEExS&5I2jtQHJVDFpPhhvBM24a7p2R@A7s%xzq z|Ji3CU2&jfXtsTN8ar_{UE&Szo^MwXJw87z@8kD}O?3?>J=M>ztzey{>OcAMjPg=6 zK>9f{oFZmqqd8wO<$0bn_u#ZtS=p-Yo|j*{3kxI!lcxF|?kLY`T|I~6-{;50FUbMA4A`C&Sz9=1#)>y|M_@N8rAHj z(ej~A{;2JpFJ4#5=G~G{-g|iPs#TO4lySWzto89?>ubH*r`(NFLh~a@m3yzNN?=~i zd|9q3J9+i~+D~cJ2e$3tn4i<(COS(Eo8)-lT}E54+00PUy?uFM0jf*>+u0@NY?4-}Ca!GNHnT!a#hM<1 z3enRV_i7X)t#m)Wo8PMNl9TwYru531nZwG*+1?SIiH^{qT^6i)Pp`7xqRM-0rw_l&1Q}}&NI3l}BLy`ZTR<2&l2QAAZ z-lKgoGf}G-MO}1%w}k24lb7UxvU)j=h++noU*72Vzd>+lw`zUx376flD>X9FdY^`k z6!hn9PFbpXa9{}MQv6!p2Z7j+a>GQT?w#JXwPd5qVP8^O%G!3v=Q{25GU_`V`?RxEx7)1sTW>_|{rJ4^zFnFH zysDGC4j<%3-wQC1`*uOtF~64_{quapbyFUBTNx9zJNr!0v8`#Zys`~u?-bU1IZ z9#Va7CX}!5CN40Sd3}%mT5{5E$2fD>he($muWFitYxTxja7pXz1DdcFL#yi*~24E;xrbk`7=-Jzf_e; zA-m66rx+*ud3swXx48eL+ezDAc^yf%{*jv-MO?T!Gl7wQIL=OYBKMSh57k8(bpGU^ zKTEtLG9!GX<;%jy$&U*f&9=&%>WAt79{^V*$<-;-)*gAZfW{)T-?CJJ^y??gKpVozc zxyv*v5d5ATngajc(YD~knnUi3g~B?#wjFIomshsrJ$JR>QX8)d@7UtF6G0_c9y0Ym ziCQJ(_dIbq8)?_Pd`|Nud|t4VjvBq8|J4eKa`gL*%k+ z=h~f?vALt~Pd86YKfc%%`E=dPewzHu`fE>z7jEUXrooj4j^95QuG*PSuZ1~y$@Imz zJwB7QRrQ^t<+97l`H6R-Slg88u+x2zmwY(?1&#eGg6yk84hj_6LFddvv((#c6Svy9 zuFW3sh^$`u| zB2s0T|D=Y|ZWF&b%r%@iW=rw4PWy>#WGb_wv>s(zqo@3JFR{aAHhjxVxy9!Tr(QlC z-&x|!TP>MCI^U9X;Uf4A5w3O4{H?pv)*8P$XQ=bGoW=f7b?+iP_xM&fJsW2f93UEX+Np(eJHdmhWSKC>mP`>F^a_tCkrEb80T(Tsj*v z7bX?onE=j=otkW4Ue62>yTp_soD;J`)m#^hxqmU-qvNacv&5PnEMp^09)ExQ2iE)WF`_NLgaNj*L>+zRUM{;LLA!&^Sb3N<( zu06Ml9_oj2EY+u8zx6QXowV1dueJ%POeXVJ66}7mM>LwY4C}r3G87cKV=;T#-sr4> z)}ofO@4hW%w=ow_B(@vHU9c8Zb{&o6vNco|IyC;Rj1)!|Qz$XCB>2dhF?xer$Lbz4T?6m@Q{Ou=<~vAO(h!$L}&??y-HclMtn?`n_gIL z7`wV}t(R@9Xf&(++<~Il?PFM~_0IdRLW|XPzudUqB*`O1G6*QmQg{@Am0_fmKBT?mRwIitVMNhx&gpQ;OZXMa~1??Au zW|_tB-QJqYhsC?Jt2D*<}UwFNgnX}0Sp#>Ku3I~=}a@@H!?b3?tadE zz42|c@5!lL&&sI`)!Y-P_37KPY)HM}b0G^Rwvb%503mhfxI@w84a<<>)HJVOe#fiP zH7lYq6#yoqZu0JM>^Q(Ite3A$;r{}-edeQEk>zwcFXHOQ5vw16a()#dE z&6s_r_Awtgifxx+a=D+$GDI$|pv;U9mR@+&Bb^~}Ybr{Do^dX9D6`+FORjSHxxzkU zL!-MpX;l$k^>!n716qxpc3<6AzMQ<&=zBE6_}$Nd9a|r0?my+y82q61ZS}ZjtXtL9 z1K-}gG!XL`SbMoNk)*C)DP+Ume(}w;dRW$y(OO8r@To^B$6X6wt|O(cANhFO;8&n8 z-Q4BFsp}>2&Ne0E`?q~-sC%HUr^@!yT>0DU+2cDV`v-$o4t6yE$o3tUZwbs25rv>q zgE9fZrC##SfS|+ff+N3j1=HH86mvhGS2|1Fr=N7dlF5!q`ozku4PuK#kqj?7$-`$fA&=+nCmugNg(r3FVkx^f9W$MVNm@waQ zQK%LvJ5cC;$Mi97i9WTyCpGT4?hRPEQ($!FEOgdw$aF<+?A5{%OHsSBU*DsO^cFmE zj;-r$!7o(C^{X5`h;BM8Dk7)%v7Fc)K7Fr__eNEpjzHD?OVh?Ft5y9Z?tJ%qT5XGX zWTsQ5`6GNsm4Jgl@&%dR(qe_EYS)m43P+9QW5O8MvoeKTIm0@OwvP6%uqVHe#Mn5B zM0Zx{h0cCc-K@8S#k!stv?O#ranu1FbFEyGzkB*N5=aVs*CzatEGeWOe_E-xX}H zG4yr{nTA+-Rxi9=FmUzT)_{G{=12WzPcYpUJ(_GR60*YVa-|xZFDZ7bFCm~lTm?L3E!eq5e-^wzbgCBce|j=8K8$4&{@TAN}b zZP}VjIj<8ae2?@G)o-Rd&z zqTsO_epBIG$9%ad;iJ9vj?AasH?7C=CKQ-D^Cp+YZibyT>-CcG`*CxR?eDO?eC@); zJslyv(ITT;H58d5cV3yl&Du{<(bsQyM$eu5{w!KB?G*E;HJ{`kLmA3MVMr=zOk2Lc z!{N7H{o)6^&W4vK=7f6wJlh|CZTgkk$8Rw|J|%j)-xKlnZo5Q?x-(NXGj>nt2>o2t zueje^ul#Jjpx*J|^Uq7I*ZE?DIBm&IgQrOTxHnI4$TggMTe0x7Mz~fhnfI!x_K~Kr zd$GZvChyA39HXi~{GFL^`K-iH{d?u_sx?WS8qO1Mt7h!9dg^CfzRX>I@CU!_TZ?9E zLPszDF#48TTVu3z^VUyMRpmcycKglx%@R$(-!h;|!QW&ga8Wn@qc!jcA%S7wKO>7* zf&bhAk??=|IG@)hq9BfUo6Tk?X-z4p2a7#_RXj*RkBT6uASxvul%$UFzDi zBIv=JdXioQe}SMVQmu+m1TCnvVDY5?fQQ}$g*fk*-EC4ALiWv@H#6^L=Mwh&DQTFT zcypfxK>gcEElGMA1KZOTV}>D9qZ%WHHf+oqjEXv&I@9~_fseDm7N>8I|2&IWr z4qXjlsYF)K^?9R?(7Q`$g99jO-kvHm{oi@0_(dr^Ti1tTSkNJ48!F%KPT;PPNWqAu zI)=I!@s+v;)u*GlhUllqgE_FDF=`cAO+o^dQAA_S7qiQ_rd9r!tIan7f2?6V!82N* z541>MXo;5TE3MEs`a$1u8CP)~*Kh?la1*n1hi2&kJ)}qUm|oBvy`)z(Pp|1M-Ni>N z;uAh&4ySPjXK{{x(Qo>LB`jkF^LT@ISfHP@3LlfWfN5OBCEUY(9K&&(z)2jyAsogL z9K|+l$0$aq0~cisViT$u!e(s2Ryf#!o!Esv*o!gj!+YGqZ9K=*zTs~15pVF666pyo Wu+VNf)lT1j*K%3;JKEu~y#4|W*6>FF literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Telemetry.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Telemetry.beam new file mode 100644 index 0000000000000000000000000000000000000000..d85af792c4d9d0089fe87579059d37b845265735 GIT binary patch literal 5212 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Test.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Test.beam new file mode 100644 index 0000000000000000000000000000000000000000..d9f95721abdcf6ffc88dc25acd34d65fb8c562a2 GIT binary patch literal 21224 zcmeHv3p|uv*Y}KZm>Gs)96~fX_A&stH2*IIk+eeGG-y2fRR z&wLon=aGZ6{bGBz{{k3H#PP?EA06(G7_83 zq=v?`DJ(`9J(fX@p_Gv+3??Ov#HNsIDQg&XCYu!;OE$|7kEeyPsdO4EB$gD$q_YTs z7!pe-$H!1YSZro|7@I(&#)MFqF(g{V`v?j0 z77K}`(Lsetp|OBSv2->CPmit@^y5s6j}2i`q9|ePkWdminv%Gb!er8!NLc}cJu@Oc zmO^7YL)3iAnlK6jGAB}+N~5xa!2qy>SrirvkQfXmH38TkDZ>B*Hbo8QN#8w%78VAW z3Bb%t!$~nLO6zpiT1GrOSO7vK(`l4$UfU@oASO9JjDnPg*dp0%2H>T$>0$I328lli zWrAK7153p-$Uv64-8@VRg&7P^NspkjUtOCa2qqXF77&bAfshl! zVkiO+VF`5Q`wJK|$P*!isq3vQFbGp(5SWy329uHiMw?R0yTBJDpI7H~j1$$J zn&KoF2;}~$2f+XB;!iuwyr}eN!~SXrbEK0gFc{hs27_Tifj)JhB!Z$2$8uppGHO^j z-WpMnjYn$%A(Y@qMIu@YN0dcy z%XmVl{t`loh@OWN!!xWAnAyNex)|m27-cw8nTXZ{R%NJzMn@E|vfNrRLMjn$pboKf zTfvDfMg@+XJ$1QT44V%}sz3$-?t;f+4`bC8V9>}2Be;){gfbwa>MymlWVvNP13;X^ zeGfDsfEpfZjOAMsudaXvhMSM$BC%eCS~zkp7by++OaY(TG(N&FJ{caLIv0rpd}hF8 z8fF-E94P7%1OiY&n5ZsG#A$GmvchPT}h8mly0lb$#)*8RY8f{JhgD(pRz?^$9 zntW3VhExlV)P#nVXUKWK45@`(imkvY;9XNSoN)-mE)m(OAtitzo%c(3Wm*1^YIBkD zKvWB$lFl@hh`&@);Hjj`Ma}|z3jm+qG`^+3_!N13`dp+E;IjmL20xtvjxM89Y#6 zJ{PGB(5=BG<7wz73K%nhZVJ#%r=y#yqiyssrhkQQ3?NKrVNBpiv!CeZT;yzkZi|H@ zEhMm5B0?CBT%drl0??KK+7f|>1lPk@;)J2OBgdO2ma{Mm;7BWZBHE5WZ>+gU6@ao3 zbYL@0Mq35ULI7k3fb6ErXs3=Q>S65uN=6$1VK)n73r8;eDI<}KR0Zhv;F3LWH2^M! zgVqBg4#7pv5yQ3uu}d)yVDdTeJqCvW6kCiV9O(eoA80D@oW^O&X?SWn0-F?S_U}Foi;(DI|=`!eYe;Wz*;kKAnr43nmsYnbR-l!U+RW`2OY0MXCXLodAPN zDaILy<;-6R=c}V-fi0bJXt})@XLUSU+Cd$Q11va*1qUq~&NvAeSWXZ`Aut2g!GtkD zVjscaNLMaW17NxWOt(^uE5LM}f$7S_bp3_t3NT&&0#g%U8uKyTxkxR5=>{-8N-^#L z(|rb}I}g+S7p6PFbpMHo2kSC_B%ooKCyd2d0K4j8JP~NSEIe2+^8r~~4EvtwS_W1x z4;+$!!~#`3f!(=C9f)5Kvj{L_2{05=8Uf8=S+IJ85y5hix?*^w3^WIzb$JmFuNE}Z z`yFpF7pV`_SPazgD#a`YYAl|i#$uiti+`!H7^t!Mry9S^Z2(MT!#B+m=r)V?0@5yp z?vYp|5W<^J1Ks%ix^*IbfinQsCBQlTEHS>o)qQz$Mje_i)#|uv1a$M%fFu2ZmjOm- z>0M@t@du3l2t04H$bu=xn_Wb-HyCw8pt&r#D=g>T6#~v<0^rC1aL0lcbfggykCX!t z%S$mUWJ~x|$;5F{N|y%e(wNC-oe zh^XTTpv^KImVk#^BXB^~RagRn52emU&iBGDg(HK&9$^g}xtfbq0Du7iFxV190)V6` zz>pb$%Vz+FOb0aP0g?b<0vs92Malrc6#y{I5<>xilqo>+48WB$0Ljwk00siU2ulnV08*y_BWD1vngJL&9nh2qNCkjQI5LX+2;c<)yl6{I6u^su@L&LI zYJj;&GcN*C9*&IRBFzDBFaeH?wZzZ>FOA1*qKBcGxTZoac4BA*qyhpSpiV%Diy&tO zAb1-ZV00ST1b}@PlFsw9P~c|_TMQkJjN>a51_(@BOdK4^;+u>N2y9yn3yzHE4+;ek z5^OQ?a3qI6?BRg0#umdtzIP0R`fj0}5VHhj`RLfq2wG(Gb+N!BGbkh+hsAeNYgBx*<41{1A>2C=lHk z6ca%m;&%WA;(_Xpf;z?v6i5cB4(SMCLVZoi<^$@! zpiIfR8q}w7LZ;P85Rda3$ZoLvpvZvY1qy@*VL)~0vlNuYpg?qp<|e3nfTOFR4$+(h zbx0q3P@w*yBZ#5!>U!X4A*e&Lnt=kz1?g-G3dFAl3N(gL9S@48pgs#6A^9LWbcDte zY6~5q0?{E`ND1m-Z_A@WG7GuH(;yw&KtX~M3<}gX78K|s1T&vw4vs;*It&&Kj!-+8 zfF1~H5PpQ<2p7;-2+qU65yG3I2MFj;Kf=@K{sKCLCo+w`R6t(_j-sGU^}7Vrpnf6Q z#X#ZF7g5>ZT&#q54ue5@%4fuY|L{m54(exYhy;%UBvIZKNpM9NiWQNBe%276_IqTA z$MAbBg-?dQG|%|j$|GYS^3N}eJdz|t`W4q8L4EPqetvD_u}Mt-7S5wc{po8ypN$t6 z;72-GBuGnf9)%xc;1N(f0u*TAonmH05_pyXHiAYQ%V{hvh)!jT2ZpY?x};X^B%sys zYy>O=kf+-Z;&)vdLm{y!_;^r4sIgES5C1d%7lJ3z$TP`Mh%5w8rUE_KF^PC8jl~90 zFhevCe5TkCyvbrZi;WLu(m5;;JK@2F#ZWf=H0gogA5lk(pF(!-z!siCi)MV0QAc}e{X^jCXf?`Y1#|x~ekB^OKu|d=m z#4xE)89x2dwM|>EZ&apG)VV$9zV1T5QCl(fU%2) zAuJ6E5P{Bne#3%5ggJ`fIR&_fb7pieKi>5*u+*Y|?Kbs${-d6!*U_q~&QwLntXGE4MI4vYX@;-Ha?JK=;2*uui3NboVlKP`yoTCKYE~*B+F^k7u$*&Z1_yyxBz))lRUGhsG;He zfkwHD+O4l1U;d=l`Jg$QQ>%P*LS5?2?YCdC6OT_Xkv(dCJN%zL8)Te z=N&g4q;0+YW3ZX(&)yVR`UD9YS4ITT=fC%JRh zN~gHt*NR2TF0(Lqo^n5K$ln?Mbvq;Tg3~vJ)nn%`-<4?EnUGVhyg!Z@L)ba6{`?&-A!UiVk}dnV_(HzX=8ZIM|O@%ha9N|!yJpBslP zO`Yss*o;4OKKQh7IPUVsnmxVNr+U3o8xO9@Ke^Abf9^F*c7OL4*>wZq>ZBV#TvYnr znKkcg5j+2_en7nX+}MMT1$)E^u|oY(_mke<3d@YY+jnlftlEB_&xXFY#BLL3&Me2T zTjs(glXa{gcK_k1rB;XVP@%U;W+lBWy9+OT7wT4crwffE?Zma_bB}}Zw}*TveKo%y|18k*br)NB9od8U zHo+z*qg6bHyR^#ZTnGDgvt68e^p*Vg-yy@uyxdI!{i0tn6jFX;BL&Gp?!jJM-il$ByFD14G9#2ci zf6`qa87*XAvf#Lz#YY~?c?pASCuAPUl-lp^&Owk<{c^i$G2}u_qQ>y z&qobJ9%Q{PxOz^gGtlSDs>dGgH@{`?+;Monq)^c-7Zu^%bZq>3G^0w^+qHA&;&x>l zXuhE?}F#VCedWBfsR!l^EA6pv#o#VqSc}q_*m_GR>48DD-*@NW>dQ`T9wHvQWBjU#!`zHR zer3J=7(KbHWdDHn@2_^m>$k~$zQQbu+CJCUF)H9VmVL_aqM>oZ((@u=mbT4@t2Qli zsu0^@bt_91n>bqb99~E>tq^N_c%x_Njn0b?Cw8d1nyjq|J8rvuX{cZMrYR=}_6k7w&VV|2#>V|oXO9;2ji_TT$P_MH#G8vvC%@PM{e2%tWqC3{E zlPuf%EWt?li;;25!DoLMr~Hyeg=gqFJ?Kaiha~ zR&}6d%U#9hC1}$*B6l(4gH1=C3Mek!vb#r>yHdTK~zO7I7+F-!r93 zTdm(caT56sr4{e@{tk2d={<9@lV2Q44em@+F`b1xxkB!3;I_|l5f6mM8C&j#<{oWn zdwSrR<*ZYQepg-B*||5W+pLl0d^k2|*sr*)E!|WroRe=N?fH5S`qXk2iKQd#D>ue> zRMn_2e2d+6Z&dRX3d6UdFCbyMjtBSoZ!(6in?ItHt!- zin8<}=bpft(2b8g3r$RRG_AHYaqO^e2!Gm)PVu#P^htO4*&!!KgCAAK2Co7)ET5}W%(?O8+?Z|h z`)oBcmsjfsBYUty))SlU>>q75|N4FH>F4XjS`DMirLG*>|4t=)PJ`Fl2#xIK)r0#> zGB@aYAvpefD<`{5!DFO|!wBr=)zPx4*u-iS9smBGi}aVqE65`~`ocN!(m`1p_Jv7$ zXOi1JpSOrGQIF?suI;+?Qqy>omA~Ik?tD4h^vhs;H8>I}y7vg0g|{xHu6ohZ*E8 z*D=SOa8}*9>zr=W?)%ZRNTwQPR=E$a9CUcMZdB%7UaQ&KghuCtTvgpuB~{{##30!- zTA3>!-<9$;jNteWkQ*P|S*@}Uzh$BzLhH^ztl}Y;Bzu#OD9x7dhO3&ZRz|IER`}Ms z>R#WhxW-pcR8Q%i9W}agbfL?2>J6Cbut?#%;d^L@cV5o#`l)7!#G_}~7pZGDv>07Q zFPbw%3<~*PoKh$2{IX(pmXJs|ZLvt&-1^h4Ni8X9<0)^b-@k1X(b`d?P1twWR79)I zLYFYNmYO!czXVWk$nRV@c(6czr{(;Yb;40pzYvGAr6H!1uW-q=g)R5eq9h{Ra8+>Eo?Rr{nX$TIcmvCAcgal5a>Le`4TGCB|2 z{)Vt4u!+=p!T7DDtpeDC6qS23kKR6*e00>95aIr!ZA8Jkx}aQnU(uk#9kct$G=)}) zBlTlS&&Jvwu2l%0TX*uyO1je7OFb1kuh-+|3hz1G^bW0wpTui=m44vZK zxZV1&!|FS0_EibV_e+0-H%pQg4((s*?s_oH8+XfAuJ+{jvN4^upqOFbtfYD#`+%liqh*NYswylFhBvuiE3!qPt*s7D$B@uN>U;GAK$Fb}i+~ zh4E|xu1?e4?RKzS&XXnNAsy1lJpU~Z@2lV2VorWV^cd*0&+mEi{kw)aHlt<#y^^GvJkTe9-_b{9Y|HLKxl-gI?`UFoPGOZ=i^09Q$x^rI8@#g7 zUX)!G=SDMcQ%e-QD|P?a#0sl(aO{8Wf4os_z|lrNqH~=eEc;F2C7e zx7kH5Ow9Y@#fKCbr^wkQt3zmOFC5w-{-N&G*$u-8JooGc$4}fxnrm0ddFZ@C+2S+SY^D|TOqfJP)=f*<_(!Omc zxFh;-CwiW2C+^M~?q#}S1y8+_M_-5Oin^Tw{yV!~U9HGiVb!f`L>#YFy!gJdze z_x;W?Z_b^|m8g<@zGRu-P3xQacFA<16|ChcPxtiFF2M8DEd2BCzSCQgZc=?F)qdag za$A$Ei8r>-2%{n#lP$MeJrPbvPP&Jhqir_XC5CTFpl@?J^I;OB{&^A;W`o+l3$9hU z-+Ai=#p@12v%?%}v_Do~e2lN1yv**|nY`Y#Ed%DN#ocsuab3dYMWvel>obS$Wh=|P z^|l@Uq@iE5>T5mf!ng50Dy}?*zPTRtf%CC`#Z`^E2ldrYB~M(tmu!dAD?V1b1PhM|WmZf$m^G#Hx zE>}|bhT2HK`n`+gX95?@>fCd$ca!t+dA<*;4>x&d)V)bK_W4A8bVt>-S>xQ6b%=KH z5BVu^b9e1tq1PeH{cgQWMw2f9zdxx+Oa;rG!LX$uxQQ;VQ8%x?b$wwgsg@*V}2mz9&Sr2a?y<9Tji! zU3Z`Lfwb+btY&rn_B=TkOM4lG%8thz{p2SfkSVVx$wS9S!qeyVpZqfTrhPlx(R=w1J-+TnsrCJ+gpDMqu-Az?gz&Ih z7J6Nl)qKEk!m+je%KB@?l8fm#b0@}wWe+qyh!`>q+IzgESme_N=XYyXNGmss*<+Eg4%nuLdU7ksz+Q zDA3y^wo?AavhK1P6FrOt9!Vd9;)x2WYf8^9@5<9~mEJR_DZ2R1i7f?JYYJZ$ zk}kb`GrAcUrl?UQBDJlufGa1a%%KEOIFu#+;RReX+pgMxwnA|mSWT-qKF(nu+`|$kyaUQ)uOz>ML8ed@&yE%({H#t>L=^R>!x0+LT03bRGWaP!bvu z@l11`;r)}3p6cK7d_t)6ys*yU@%4x8TkEY9JkW*6&hS3Myd&GAu3c#=>Gzi19o}2# zP~~s9{Jh*Q^s*HN#?^N{0_;_B%kIwYe8LTp6wfQqdOSz?-cZgwkJCNsZW4-(dWEy+ zN9aBlA$vy+-9^RZdhI)Cfn1}zdCzi(VJo*H12U_m%Q?ZRi;b(3dk={e<>BZagTkh^%HQPTT&n^qDb*`>2}mdeMq_H zc4*{Oczo2|FsIXJ7E`5j1M7Tb`O&wOG@$zNBMZ zTiCd%R$c94{)0ntmzz#&tDSyhw7>fDms7%luR{~B57O1NR_VmD%EL~ybH?9>j)&U% zGK+V=nOrm3c3yMHk9jeIY5qNX&nZod&=`}W+2vBgJ6~O*9I$_s6Q}E8t(7{o%IgAx zq?j#U_mMfe>O@OYbN1Lr@w?jwCnf_ES!$Bh;WDh@jTiaS$ggHiwYXR<-`&UVy3U!e z`RT&NOFDf&h6|(_Vi)yii$%&j%v(rISN!m4v({jl-Dq51hp6h}oyDS6n|CGphXf?B zH3Q$v?Y26$OnP>34{9hct5n?RN@&%*+XZ9oQW;UT>0U?!yR z33*S7td`0;;E1Idwu&$;Rd@8Awoh8Vzb0)EuX$R#KHd1vJ=w1Fvs2ja>z-O($Xsze zHG8q1YieyS@c z5#d|CVDxip(uEuVt zDv|Qyt9_i9+40fg)C(z`bQxDS{d3k$%+rs&v@XZ#-L23d_69w9FI_wAwe3f~IpINr z)0V@r_GwxXUr?Sh*m^sS9gh3D-LNg$o|~2tq>(VW9r%aYvYon6v8#>w~u0-3(rVKB=!X@VM%`P{?!K|G?{xI;8$*1`V9R=}gX(Pw|x6B#wG}Qwh5KWaG}rWG#__ zp&vBdwL9x>h-D_ZJ$(6O=kA*Ct)BgokI$DExSl+t@_2nJ11E_a`k`!Z zO=IiwCFP>aT0Woq_I8$Dg;djL@?lNHaVnnBJZkY-uKf?Qa}t}w@Z@QMg`+OWrO8knfM7-&g)Z6PPfm8%K;H12WR03x1xL26y7{3N z_Gv)=>bKku#Owz5){0Lz7k(zZNqLi;Y#5_*;B@lS-Pgp#X33>mw4YGiJ^pb)gDmAq zNo1o!t|*~sN8L5ebHXEC2T$HSz2ZJGC!_KtTt!Mft?$w|11;H8O|g>tp4Bgxcn>fY zjk9Y;y37wM4vlZCIoMEpliaF(`dU4$Ys29!b+L91j!*tju*%n)Xsq0A9heoGMv+O# zvO2F28`FGux8+@>&1Zv?yVGvP;gpUi^fyO1DHu8=XdboQyFWwzvF^F2rJGZ3M9RAL zCP|KU8#7fgU%iT}nw$_m1J1V>S>$Zor&2z7Z0Dn!o5Qp2c2D#Tg>3EiFtunpxM7H8 z6WP)AS@}%*?S}&uB`99=F`kw23{igwbM`yis;*(f2%=EzGKN zRXST?Bx%=UaqArJN|sQA;b)Khs~%s|>vum}|NPUW$UE)K!@`|g1B+UECF#$;TpKtu zyK&#LJ|8{3wH234-d^}acZ_=S7*|I{c(Bs%*;k3@xC_bH7o!8K>D6|d&M0|sOOFzW z0S?@<)RNn3fgc%!ja!;eeK}_LG2HE0mdcqE#>}UOde@gZx~c~IJl9=%q8TCeO>_K3 zuI9GAG1OO0jfa@DvW>kLYXV)HPnb76;GSuDVf9DRw;#7J?df@Q>s_C4-SO|fcg|k- zE>+q~Q=MR6=#Q@Y9I12QrqT93srVOplXuR0WQN_7 zT>SfBDq?+&irvoHhD97>?g58b+eZtn(&ilf5!E)>MZfmB{bX0owfUZ!ehcdLd{&5k z&nthkrsdo_1Nk3_0h1dbv(kBuBgl`NHI@OMvPx6<@AiSrgs^DvQd`1&{!?}_!7Go@ zQ(cgJ1~>)jXZ*_ukbMJaA|R&=ycGy|KvEZU5E8T|CxWyFY8XctWE#Z&6)oy7iPJhl z{PT_km&N|Wj{dTrza;WH|Eq+$e;^4k%3r7~UG_;*9LFe{9Bol6D3R zD#$zIi4(<3Q2Ld9G$qiqOs!vvOeHP-G&Ug2&^GF?rxst(srkY``v(gC?WKYotiQdK zpB?!x@zTFsJ^6k<(^vVlKY2C80t0D6&@Jq@7jH>|+t9!AF7^9MhQ@90f{+sX8|2LBSmO1{Hc-f}6yd%fi6 z3n~A+LpcBP|H7>kUvUw3Ja|)KY7z^U)M?**{^~o#fAEVof}8pD{pU{)1^aIBVh(6E9pF~5G_2zqbeKl36J z=O1mb{+=>_PZ{3ZSOPzv{x*()^#6SO|2I#W=`SSyeSi4t0MOs}hnX)9@;A8u1D*ZP zuiO6Z@P9iz-K+AK1b$Er?0B|=GWCIe`vCg=0JscF1?7x#L48DxpgyC< zP!l?;I(Quo9Zj9NI@+i<)J0Sm>Kf_=>LuzG>Ne^QY5?^JwH|d66^bg+5!DgXLF>q% z)}fM6^{58aQj|B!7Zre7feJzup^A0HbtH8pP>)e}QP)wIbaYUoFzlaSP=om;G9cOJ ef&%>>fw0sM7?CI>M! literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.TimeoutError.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.TimeoutError.beam new file mode 100644 index 0000000000000000000000000000000000000000..b0c64fc2dd7054592caa7aa66a7c0ed8316b1d9e GIT binary patch literal 3704 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Upload.Supervisor.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Upload.Supervisor.beam new file mode 100644 index 0000000000000000000000000000000000000000..972f34fd54e2d6f66fadc03ae133fae3b56bfbea GIT binary patch literal 4584 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Upload.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.Upload.beam new file mode 100644 index 0000000000000000000000000000000000000000..41d6a59f2ca8d271a34180f229dfaad0ca843fad GIT binary patch literal 16624 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 Gvi|}DSaf#) literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.beam b/phoenix/_build/prod/lib/plug/ebin/Elixir.Plug.beam new file mode 100644 index 0000000000000000000000000000000000000000..fc4ab416ed1b856e1913d9f30b19164a3635bc11 GIT binary patch literal 10400 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug_crypto/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/plug_crypto/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 ucmZq9U`}MrV9I4+U|=)UGqlh%$!1_OvMA?s&B?6DEYkBxtQ)pf3R)k>$I(TUt+IClX!jgX_n!0J$9Mn#{{Ow_ z{{Owft0SclWX)S94-5-rq5~iZo-;Z+dY3m-o{XhplutymLF*GlrI8Hb6G)QDm`cfD z1fHQ#V7P`*D9V)#LtzO92Bk?Ap(n9qv|Npn6bj@}bv>F&5)?x#^lJZnjR9A&x^%o= zsiFv40?2qhp*AF=@iapjREz}2lH*Y-S&3_(YEecpHfgpLK{HBbRW&whNg z)b4 z!f>!4suoS`Su7O=5o#2il_dm02mo7-12_Rph7l9Q;d>yka0z$66OZqkwJa;rkbqLr zTMc`%D&;5qVTtSjz)~U;|(azyYua;E(sGf!1-nKOqClQ_Z?E zz)u2j27mz^#`~Z#>$7Lf^6a_W0kCUZkGCw(2{z!Y53T_0SOCBl){eQr+h!aJ#TZtm zeVk%_b={T>YEB}@ILUl-lx)|6y%9<{3CuWd(}NmW*TP&3d-D3Q?o4`nLz=rM;8woX zS!iC1YqVw+)CxwKkc=8FNkamNJg^Qz zp-QzvMc^s}MWMJV&1eB42TckkR1cN4FpfZ+ zkdn7@LxSCMr`f!a$j&jQok{dzS~2fX_i8xCX4!JLWmio1B7D zGzfGZ#9ibgVF`jX2R^%uh0z%&6f~(c;$R=B0(@1t`(sv zAZ3WjL;}UJR53_Vw3r0BO)-`q#K~BKc`P0uE8p$W2Te^{o}k4b5T@HAAc$w1T6`%w zjP8~oVYfG*3|apNTN2tdSkTZB@i*51$<(<%-#c7(`Da{Pq`G5v$C_uWU!JZ_{$+>P zC2~Oh#r1Sz_)*vHH4R8V{;<`(@~?S~52Ep_brrg~p|b4q zIlrQ^B8evIN~Y(ngR5!}x-8r4jhc#Wl<<}8v?H<;==31`oU1Y<>Rk5Lu#2PhZw{?5 zv|kYG?&jCO^dG%8RyA9K=apFX*M(I_VLKLL-G;oYa&@fGL^}B$&sdzH>Bv1(G@b9& zlCOVOl4-@oBT6Nm(W@M)^bR%p+6(p{Hm_}ZI6SgF##t)2)oFqH=#o-xg zn|AMUEO-$=bj0JEqs!lP-{bt`dER4m@r9W&9sP^+wLyJ>^O5j@XUmsd$#Ab4tgF8J zUG06FJxS|_T}`bQe#q9Tw$Sb?b+do+towF1U+#6kr>?RsG@z}xuxvQ2E+sT>{|BPs z5t;4J(w%-!p@Rbuq04}3Ti#fG{*ITM)1Zn4H_bGcy3r}voJ=k#7Q{46{^Qr-j{@1PI{F;ca z;(SqyqWb>hhB$rg<;s2Ar|--uix01e%zF)X}I;} z_0l%@K_+%^!S@x9?=P)rg%1a9{`b0TTb-+8n>^$P7A>_UU$6Ffw5hQtcd(-KY3})! zvafn&A;RrfESmbdzZs};9`2x~nl8;bm1U{YT{Em3@oe1j(ji7Z4?DZ2d+7GG$a>y? zoSBrwUGBZTjgxYki#nlGHPI%c_nh-_k6xYm^X$+9>(-m{suQlq&`N4Y(*YNYyQgKb z4-O2yc$Kqz6c%sHa)p)?DjFmaCpI?VW2wdZ{IKv=36k}^`()O+Y(f13{*SkL3j*K- zx3GbbM}9+}zo-)6yNY5ek9>Z)sO-sEsr46$NeStjbC%t`cB3mhr~uvdm)S?TnPC0+JJt(AYee#NN0PU@Gt$pp^c7T+(~V#NWJezi$YBul^Wmp=1a>>zx4yS$~Y<5V|DrID~?a6YzF7 zz(kn>I_&$-;jgLay5%8-X8wNeg`&hHg{6RJRm|u~@z?>1d?mjA5`SN*Xkox2Uy&v? pEkG-sn3MWQ1AP3Rm(>voN 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 Y2^A10M(iW@kn<&W&J>CQPN2~L0f&4zasU7T literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug_crypto/ebin/Elixir.Plug.Crypto.MessageEncryptor.beam b/phoenix/_build/prod/lib/plug_crypto/ebin/Elixir.Plug.Crypto.MessageEncryptor.beam new file mode 100644 index 0000000000000000000000000000000000000000..0f2c24e79a303011549cf8e51e463465fc5c7b57 GIT binary patch literal 12168 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/plug_crypto/ebin/Elixir.Plug.Crypto.beam b/phoenix/_build/prod/lib/plug_crypto/ebin/Elixir.Plug.Crypto.beam new file mode 100644 index 0000000000000000000000000000000000000000..52709151eb39cf1569ca0f94fe83a592c1904248 GIT binary patch literal 16556 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 MowLsTf30YS9eYlYl>h($ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/req/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/ebin/Elixir.Inspect.Req.Request.beam b/phoenix/_build/prod/lib/req/ebin/Elixir.Inspect.Req.Request.beam new file mode 100644 index 0000000000000000000000000000000000000000..afb917b2c4fb45de08dadf217ce67c514dd4c787 GIT binary patch literal 8284 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 WA3PT@EIM6>=2`&I8IId@VA!9hwg-s- literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Application.beam b/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Application.beam new file mode 100644 index 0000000000000000000000000000000000000000..1ac0fb5e9c11b9417b336e4cab7c3a7e6947f427 GIT binary patch literal 2852 zcmaJ@30MS1Lr5mcKr%DTOh`~{QADVs zcoYQ-hzbH8pMYYK!v(cPE4qlbpDkWk>rwEiwiXX$-vm&1*WLGhzxV&o|9&%X{_ibZ zoah5VW-j58VR2zpN)QAw>_$gN?{VxS)rcM;yc6L}?=T!!BQhz4U}&yHf}jdaBB_#6 z6oI5^DVW4%mOY`WaQX-At+G7a<7TS3VpmF z2wH&2VL)C2@Brx12w)4qX7I`&Cf}XM5X@zjIB@vB`QiDA+BBF*S*P8ezb~?BHbW#n z&9Y&L#e6U)h@&7tQpHg`KyWb=%(-Hg4N%4lAjVcU&%%aLRmNlTp9vTZ<`5)~60phy zCOqD5W5Dqo1YACg*U7790nUaM$zrl1qeLv0;n@~EM~PYDs05ob5k~;xb(V>le69nJ z(JSUo0;z7(#c~}X##1^WPsHFD%I7-r7#!>OWpMZgJ0~Eu39;a_z(SKKA{h{9kp`!! zKY$T{1%M?06M%j<)&L9uI{1p zW*7=f6c`}^^j&nP|J>8>BcuZ(#}CxWFiCkY)}b&#st}xx&v+N+f7_+gOBNXFrOiKH zPC68e$>?uMe>eKQI*n7CFz|;1KK|W;Sy?1%$c^%#B@0f^3pd)-HK%j$sk7_9*hN=t zng*++SqP>j3|2b+_zFJgA9P6z7NH6dx5p5d1^i61z`8(#$beYE-XdBs{$JB!jC77D zCLwXD4wZ~I8bX2-m<%RKovDJrG(b$iIxApBGe8I9QXsGd0;!h5B#4IYMRb8|64WMx zGoZ!76cXeV$`L6lRUiss5~iSZz)MJ~FpNS_r5Bt9qm&R=VK9p5g`l;OLITbds*yAU zmA>zZ-mpGBB29@v5X(L<0fIR5^yL>*Vv4Vbc<7GMo#?J^?v%^B4L^5w>Zg6pEKRbj z6|q83Y~!n#n8xcR(hZtd`I#HG*|L`$XpVvXRzLoE^yrT-vv}!wzYWeRxHf(B z>*}Q1>!}yE#Sc8|Y@8aJVe!pjPi*Ps3!&_!4f?MXtDNBtElv^J@7D{?9MFG#Qol58 zzW?CRPG(lB=i#6o#zl4cH}ka1rB*SMWRKr&7$~~%z{5OnCUxtH$EvHjH*e@CN1FaZ z8m9?WbDJdWBOTo($M@71ZjYN6me}y8v&GC46<5o?Tp?RJ`b+Viwuh4g*Ik$W(d(EN z6MZS}PTNM0wyl}0XYGeo^AApLE8W|((YeRcul<_KKSu8E{_JS!>%9Y+cEA4YG+1-F zxotS+V9mkCs3835B;gM)mU20=`tUcX(W+OT(k*#bzspcvi^G&~^qO?t>(8}c?mnmN-+wivZpoB@1K|$qN>@nNqrTHMVvA(GT>7Erh?j`qDKRT(f#Vf-?vme(cHbUyl~aob63|AYqh%q0+o~csvVEs z>>Ie$8)h0^TN)xCUR>Gj8oGMecFWW|V z6oJV|&|a+Q|ASGhFJDvK6@Ny=i`e0>;pVe)7~Sq+UZHDQO3OmBd2?Xnj;jGLJe=RU zdPe5*?i}yyd3?$-1)rjEd~t>)Z$BMh{FB>`X(y+-EOP1ky02-Vq%U#b-UqXW-{f-H zn$>QtGpch&{BJ#Str(IwQJv9@y^SF$=)b4D@cWZD#T)8AN6)eku2}za@eIzk- zCgYbWx*LM?3|LMaZew~Di706yxR`-E6z!s78f?eia-~6@MAJ2mXQt)f>?0J0@Z#2FfllQq3;t+erA^`-#rYn|9HQJ zl7%>dWP!s~NNI54*o*V>75UB<&Gz;23J41J^-}1wgOolKIv;PJAa8#|`yR74u>ao0 ULE_|WoUVxrKwozlR-+K~FOcc+0{{R3 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/ebin/Elixir.Req.ArchiveError.beam b/phoenix/_build/prod/lib/req/ebin/Elixir.Req.ArchiveError.beam new file mode 100644 index 0000000000000000000000000000000000000000..17e169d50271d395848452053a780d845bd03212 GIT binary patch literal 4656 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 X%O8PJLbi(TKLmiz%^Aa9Lc;$5n}jeM literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/ebin/Elixir.Req.ChecksumMismatchError.beam b/phoenix/_build/prod/lib/req/ebin/Elixir.Req.ChecksumMismatchError.beam new file mode 100644 index 0000000000000000000000000000000000000000..0ad75b0ff5ba1afb414adb4fb024a4b124a0b7b4 GIT binary patch literal 4052 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 I@~ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Fields.beam b/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Fields.beam new file mode 100644 index 0000000000000000000000000000000000000000..1260f2e494e8554d0daa717a076005b37a7a1747 GIT binary patch literal 8764 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 CqOUUm literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Finch.beam b/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Finch.beam new file mode 100644 index 0000000000000000000000000000000000000000..9bc133cc3f1a60989d485b62606854c2fbc82cbf GIT binary patch literal 20572 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 bM^YTBKU$xL*3k*h{>4Xu;^B0(Qtkf$ZKvxv literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/ebin/Elixir.Req.HTTPError.beam b/phoenix/_build/prod/lib/req/ebin/Elixir.Req.HTTPError.beam new file mode 100644 index 0000000000000000000000000000000000000000..9e4af344f1a3bbbde3088848597c4f6e1ca5f75b GIT binary patch literal 4596 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Request.beam b/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Request.beam new file mode 100644 index 0000000000000000000000000000000000000000..1bc78a7270b8ed78a26ea9e311716916382ed73e GIT binary patch literal 45768 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 AjsO4v literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Response.Async.beam b/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Response.Async.beam new file mode 100644 index 0000000000000000000000000000000000000000..c2119b1a947162629570833977510dec2ba5360c GIT binary patch literal 3404 zcmaJ@30zZ06Mrw^2;mAxfS^D`1rfOf3s}%_DJVqcunKAj$qT%YiySh$tX}2UY|{@WK{LMNz5JeF3ZOSKZ(5|8{p~c4l^V-|Q?}7U}{) zy8gZaJ|RA`2oDH?wZ_NC2T8O50jfkX$512zKq?W7q==)BG)crsWwB5ZPt0N!vt=?2 zjgiX$nWRZe;oAd(BCF@!7UAeA3Tl8hbR%R0F@ z0Fw^R4$(1eu8=KRj$oJ=BbohE1QiKT5yAyxVDY=jyWIg55Cr*&xd@2K3^1es;H?V4 z9DoE<3Lt`^H3g=BPRuhU8P470yD3y2gJ2O~$#XaD4LCdxc4jPwh(<7jVFMgC&$L1hXa(VwG1#;2Qa{C zlRZAh8?HkS0H@=6@iE@C0dN~Qov=tQ!hM)JIXA><07d{4ZI0~AU{nTV;Gjtg?rToE z0DRSC;6qSoauFU|E|4jRB2=JI=b?yzs~}2H?x)xo!utf93@$Um7P7$Q{FD@jE#e>o zT#64ou~j)mh$AS-?{7F8`qv!BMNQI$;7iF*ZCYsDvDuw?qVVh=VWL7n=*A9i)OL60@WdwnD_3%upChf{8hZRI1S8VPYX5V~9c@NZ|v(LnLfK z&;tavTqb6rLOhA_fnE)%SdMX!cqr5{Qa$Hbx_JX_P3gT&IIENWZX z!t7=kXIg1lGs?D750=-?Fj=_#C+(FzE2@s#ypVgHQ#Q43-(XbpX0$gUn7;Ab)X16~ z>-PR4*HPq--E^-OcJG|fa`Jaazwl7Mxa)RlG?&(wurR*jcAVSm)UXFdeb1WGs2)Gb zdIQgFd!pxdGA;Racci^`bwy&?-0j+qKUfcjVDV>f&UhGH^_A&G#aa)phG7){x8sp( ze6=sll>g*2jO6+WjfkUL2A&O}>+kPOx=)*vu*8f=lV)psp*!LHJb|N6bnDJeq?urH zw{iYeE;E-}HEP{hGL?KIFeB%l;RSWg0#5j|l(=q&OQm<2Uup!}v42{4Q@BQFiQ1mS z4e%xt9jBFqg@$SNm5-+`xq85_bO>f1z_{(RNaGueM8m z>A3|Rk7ixHbhfi^_4j+l(Z+#&IX<-0c@(y?t2{$(<~fIg#zlnoV^^x9E|gLCZr^Os zYRU9mmrCfb-sD2lD@8=hygUHa&kJN@6~9kq7a&Ke?urMgEN1w-n6{68;cBy+6cHYyT9_wMpwsW?6Z+ zegAqS_05$x%xxi2=3d;B?z+BKelN+_YzJ2xt+y;5s`_#2ef#sXnWhAOQl2s)r#T`d zFJoUpIltDuv^LSr+m&9>?@+40YsEz$a5PZ36V+-Als+M`M%c>3{aEKN?*f^Utjx>fi5I=GJ0?k(U^U;g~#jerHTmSHsuC)@G2 zmU@ovd#29wNz$2jB9$NTI@{)AO_k5^Li6yJzPWiVWqjTF5od4I)(~E#bVqMKP}8x$ zOrGDuJpy;@KZB?g7X1y0_WpT`uPHot=C)*xUSGtv&N8L$}Mr%;!L~*nX^iZM~)S>_0A@*^yptlN&q|ZgYflQKx3S z3jzb@m8*IC<)n*LMf>AKbm@66x;W(@{{oPPh7cW`6~` zyZ(6ft{cpk;UMv50Ts^SfZfNGM#uN_oR>o~8>Bzt>Zq=iV4OOWt z#LnpHwIzP2TTgHQ(t(nUnfK|IzsH5?J?&n0I_1!llcR+%>Z>9-<9e31rz|q9Hhg{d zWjyUq<-?Tv9`9G7kJ`ROwhrMBQGn7f9z0fu)4>a2fT&7l7AFqj#3L9h(FK2UVTI;o zC5*pF;1vgw|9HnIgosi!7I4%-X$>l2d|e!YKgj|G>;#3V(BKHfQbbjOsQ+DyzzQ|C zOf1Bg%SGTVoLmN~7XF8(CdmIK`td@5uOLoVG@mr`&$8x|qVEffkNblcTzt^}FIe#8 z*8U?{st8T6HMvP5wh-kg)MN-IoQ&eXh@e^u2E{)J^jv^8L4N@R6v=Y{ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Response.beam b/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Response.beam new file mode 100644 index 0000000000000000000000000000000000000000..ab7072ca1906d5b70a05a5c48747dacf2757ed3e GIT binary patch literal 13964 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 DUH(*e literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Steps.beam b/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Steps.beam new file mode 100644 index 0000000000000000000000000000000000000000..37f7087c033c3acdb814bed4c39bc4568e9f2896 GIT binary patch literal 88064 zcmcG%349bq`ae9C8K4=`I%EO?5gC{$O+v#!5+Q+T2Z9V}V}w8y#blC9G6R`|nF&Mi zisFGco@?tE@xlY$#S8b)6|;w~ySk{W?&_|~s_X5F>wUl9r>c8;g6!|VzyJHbeCTw| z(^XGB_0;n`_0&_hMg;bbb@5z2%+cZN466RAwPHP%_P zwW~MYk%=ba>9$y?Bb7)80BnmTI(vJ7Vzp{{TnxDe`yNS;)< zJDSdfQ)X3ZX$)AA497cLQ-Tgq2=+;1ZE!jXmV`~X*Mf&rsYFTuwNP&+k`%P3_l0>+ zw1P`uLpm*a;tAqMIG#oou|y{9ORU>tlGxDE5l*KAXnI?FsB>MouZg4Gmh8>6M#7=a zaH^?2l#X_^wTFQr)z%s92CJwuqVevw_Gmnm>I;N=dUl%l7KGB_{&2h_(HTCnS}L__ zNp<(e!tu-^B6(|gV@Fu9ne(hE4xV+iAq^&2bgk$E7h*~3l5l)OQ&*@b9p2WP2HPTu z7`SaBZbDycYZKA9R7Na76;YC^)@&3q!0~F4L^?A>I#*_*J?U*diBPARBNj@gwXSHq zQ}UWYq=z&DFLVD4n&fQ(%Oh?4*dlCi{mHF5btd+}`G@;AV;igzP)g5jV;=HFb+!IFY zL`S0&LYdxln-IXJ4oFv61D^0!o@@nX!7=``zYBU755>Ys^e5H2I}(a__Jmvc(`}*% z=}B8GoQWhl_l7cwSS#8t`gkuSw%})5Iue>)b7WgbsxO&IXpvAlV)pv1Bdxw!6z`2m zV>&`T9lbr&CtNjJ(S%Un&Vsbne!cCC9;G`SNp6Ar~%DZS0g6YkvBO2Py~*4nz42#klbrk+V-tz0B7p`PwU3PK!9 z_jiGNt&maFvLOtS*x4B-_2Ts<0dIwpG=<#w22z_nr#nn40U9B`T}T4GQ2U9!mmB8t$8hOZI#MQy`hR4 zQXP@#hA>xk4W=>F)|E)bLYX$O1Gtl9mNKDK0M|aMr+|Bwd<*iVLkh4q=5unyZQZ?b zkdrs#i};8j9>I=ZV1O-baEuo3sXUspcQ@InGi{7 zTtSn$7;;-l#-*eastvgaWz(&&a~q-^d91=5HKmh1(Tp!$6-cj72h!nmAR3DG12b2q zeI)xrtvV9D@yt##ou>HjjD(^i;M* zLOnD}r+VYSz{g2wdk-HiAbUH7sTZhDOiKU1(dy*!bEYgn+_hl2Q&Hz+^yo%QLP{+DNSC{p8 ziK)5CMAlQW4T21e=N?)Qc+S-+Z)gv?5PyEZk0!W@Nn2kgh%@?*htWyI zI5K86WGX>o8k|o;0g@mgkP3G-(I7$co(^YV9@9zF+N8JgA7rzVLfz5<*dmQOpg$H` zN9MXq8egD+mI0a3K&A!*M!X~3(+b53B%__%Olyaqu(k0{t&`Jc7GEgrE?L>FWOm`M zMKb|dPptrd-uos<^_ln_%1|k}Pc9TL`9kEsXfEat!WDG(Z>JCfe zVxhkFa4XqXOPDb3b%WKTP19`;YSP%ezUPs)_NJn3X^aK2uttvQPT?}O($LvYLnkHL zvarqJ$x;~~qlL;wyEjx@J{`tH7@l-yC+`)(DydZbz%W9pB&=~-D&bIp$81BgH@+^O z$j0|jBe*#r+*|W02uL>s7p^BCKlYhiZbU~nLpT8LXhr#cXj+)0Me9r@l9Fcw3>$$g zBKL&2@7D^auQl2!jZTL)2#Ih+y)a9MTWg!e3RwINWVyu|FldEK$9!@4*q_Lz` z=n)#j9aZ5S?W3AVHObk9^S`qo4d&YqAW5+#xg`C(1o;@$30vt`3KI*69{mN4;bc=+ zG?mWmwwg(B$;&fZo||x&AS>w%AJMs!3Q3G-g!jdh{g%w`5vJI*B;+%a)fPV?uuyMu znYe24Aw4fClFy<6V{CIGp@-sq%Pot<2R>;MiRuP;bU;X+Fnng>Ja7u%6B-3w*-Nt# zxT7IhKjhk)PifSraK_TgiHXL7`6gM%>R6 z{KP~Pvj%HSm&T`ilcdRzJ(BGt%_!hNVGPtV-J6akmxgqD8_ZUkyM{+^%k$*uAttby zm`12LzuP)`67ZyV!!wD;VJ*?|otW0d!tlcSlc_`|0q-&|-OJH!!RF>BUbKniclOTS zII_`b8}8f(u1CB2Z10uZN#WXW<7sq6sHY9SS8u3ih%hWPy<$C@hH7*~cnv$bg%Zwv z65_?pS8N?pt;xwd3un#a)%~iTIZK5ZR|Be4qFOy{!e$)+7Et%8T(D+V6_hh2)5cY* z3iTw-oH?84oTWC2vHbwgPq12eSz)K76-iAV$Ep;M)-X7pR&CI(Bw2U z0N6gyoPfjU!GF&Vhri6{a%%1}uU6_bnxsI$$0U#8Tk2%eXrryD#C=GBNhN97+v4<$ zF7^d9Kd*doo6|^+@Mv18S93Xy{`=h%JuO~OiO?tPfxGJ%E{xL1M;{Qr?1TCE_c?;Jo*v+KFYUL^3I$XX5UWb2y*HbmmFHb3JbF1=X_YB$Ro+(da(xe)B zN)<5p=x#{f`-VBRet+3+cfiqKX!))92OvPHmyz zkjh2`_6@;zgvFIgd8*$%SF7?4_sJ@grq%!*uBzgIMv_!jsyWNG#d|>7I7pKrjYnf0 z{Z1&4yVe8dxWF7Yacj?L_pAT_r2uU4dH#=VF{DETXOv2Lg4aE_*yp*Y%p+uXFRGg` z!XuF!L31jgIrHUdgYq;cO`}XB9MWiQ@jl3lRDx#J%au&3&|K)qN@xj$M}>GyH>5)$ zDH@V$alprsd#O1&c?KkNhLFrMC+et|XEJF9SF&-6xgS%15?1n;`h!TDcZdTFa%h6jJJ{ zk!P3I%T-L8ZI(8q!+>B63<{H~YUFAcDyx@km{g4fM~J6Ps=04iz+?AI>Cj$*G~VU~ z-KtY7=gJje(ve7(1i-U7ww5)x(0a%p9?!L*W#s}?OGc;8kS2kxL1dX%+!VM6=BZTk zmuuc?&Dp5Am%!#Ng%*<0)5?*U?DDCvY3^gaS|eCH1zk3_R-W&?NnYII)P(w%YKtWg z9{M3+_43h7nqMg|cDgHba(&}~T;I}YnUJHHRL@Nap(^JrKgMD?laA8dx-cPN)zLXw zLt#x6HhZ~&NgD5EDt|aHzsM@jd$|ET0Z+>f=?E~rY)G$-Go-05kNVABjWEY2pk)f$ zGM?;fqo2Cjkfyl;`fXgm7E}+&3tFm)?iCQvg-lwYA*EHL-U?oCqggNbzYvvf(L64n zelcWNbAp3q$X6)^U;vraXm`YlY7|FbG%;zB4J~U#V+8aV8(I!1^&9do2H&acf`&95 zUAGcQm)Po-lb1prmfD8;SSBsyT*iPSshrwoi%U#8R&%c;E<-O@!ko^RR}9K4+^gi{ zm~>oD)=LLuy`|LZuw_ir^QdNURLgBt%QSb3=rGdqCa&ej56Z_g>3B%QXfH{(<~|X+ zB~7T8Phe6LM4m|}faiuZ)8&&}i2KgcyPWtP0RO@?aJGqo)8j>-aG^ihyU1IF9J3@} z62@S80gupWGr%K2S3uqP;MhF$u__*~B>t^3q}kx#DahVZtihs?=zGgGXLU|K(K{fY z*y5#zldwUDPh!%Eu=FHvhE&Dd-eI+!Yx7Atc{SLzTCj^u3QC>Kq}AM{lnRs5KBUOW zIr)_G0r`}ca;j(z48a;Eouawdcp*cERLyG%Sw)z%22y+|Bs(XciejgVVr3}S%A`}d zCQz{&UaZY7)~dP6w|D|5Jdsqu-9}w-82Y3HO*syK;(2%w^o2O;ats3xDV^YY5t^u@KK-+C-1G=Y5Ks#(Gw?-)5X-Ku` zjWBv6Ec?*$@b`QeU%fPj?C|-^9Gbfe^wz-=sdAUo6Y#*7@R{A*m6jvU(YAsc(mc~e zQsr)^B6qhq+t|<|-CKMPLz)k+Oy(oL)ASSej%>7sd_$_w58x40O;Qszq@zG*6m+f) z$m_ht4$uf4Ut6V-R35z^KBTm+R_?(-&?DTHfZXHHyK)#6oSGlKu+DEtTGFGr{Jc|8 zzSOxM?xNI_mSf)0z-veimY+wCTr4d|z3}pQeN@+iLN_mNNDDz%5BeujtYPpCxJpTu zHFpoPHliP=z?N0YN#`K!R*43L$r?Eed0FK0$bDdPPF@c?w_ez}m>3dMOj@tGW5U!O z!v$-DC0N|VrYhyMYw-GEi=|S(0|q2s?rwJ{+{seSyv{7iT>Ma4t;*t@B$TX=jpjm2~)J&z^>vE^JXz;qEF?eun zzSnw%!wl&+q~pMY@`74QL20i$>AI^NTD@M#yS{%N%gj19*b*Cq**-?daTc5M*(IOpEZgedD0w{YK3@@T{&_9_qWscTU2~sC_cMNwrKV21 zlAfG-r_+18)9I;~H!|rgLuvxSr-R^r%fUYzg7wB zbcrD~4;V*Ik0Y{z1Wf&AkdH1QRmp zL@~R(mb2w*48&J4=_*4y$>oU2pl}>_C}Kk3@-1*Wyl`jzIXUMakaI15 z8lDnWqvV`a;ojn1SSjDIaB#YOL)GFy4gS{4IVRlz3Ub97JV=c4aLnOD(m;A62GSeF zKuSU}z@!`bC`!KMsk|TWwEJ;Db6-euQ7PX9E9IUKPktMdZW=XAs&u;NlSN|Eww!!3 zhS{5KujCdc-JJJIS~<=;Y@D}f?u!ZMboq9tdsR-p6@_oL3*W}1Tl0n6c;W4K;oCI# z`T4^0fx_ip#pQ&zk_Oul*g3r#xZxecwsAw%4j&maN^|CWH&}bSWpcOMqEe3GuuYhe zJBC7A1@z9L&{GBUE<@^|4)ZbTZuFBM{Zutw-r-#=jjxpN!|f0z?Z9-8Q|K?%s>(I@ zWqjsXF^5e;YxCaizJ;H$?{koS)_i+89HibDGcG_&X7gm?>p{;7I{0xNT8Cyu^ zdF5vyt(Edm+*9QrGwH{9!yeetUDiLodz1W!@tKhPtMQp``4{6i zMdkaMbU!cA=Dwoey{V{QN*4RfnQ%^iplU#VprwinH+b+MlOEu-QXrt4^Wf(;4<1Cn zPk<~)Giv2Of&+gP96;;;$XmY)t$&C~59M3$p-9M%HgEvL3ph~f)Lf-oJQ&C#Kj6Tw zocu84@?jyD)FD4*(!*vkLyB@@er6N%Q$CD2J!RY6uo3RF-PgFUb-I7#zS4c&pv_wf z4*jfvnWf+)#OCLPAhc9Ke=(F#n}&!`PJRTudc@|{qfB}v&#SeZyg{41M@<^sv&fY^ zl(;stR^9`y?a9lH3!K}-IrkVi_e&=IGS4~3jwHB-xxx^+S@#33J(iPqLyULZV*EQM z?KX=UQV%EVaf_^a8BZTCXuCNL9xMbI(pn*IzZ%Mp)PC&vHQ4cMn;pMl(y#OEi1B)V zZ`I4B-wa^~7b39ZS+L{TA?$dTv*QV{zFjrsvQ;y+-=6FK=wu;a-g?07QI zjsz#`DVwa{{Rbhs-hG|Rq!`{cg%qADWRc*{?+ZbO6cf-taIX2>S2!r9<`-SKSeoeP z!L{TMNPZf~pMi?gu=PiXBHj0(59t0Zu+sfGLs}1mcLU7m^R@DG;M#L}u3?0F0VC84 z_6YR?MyME#P=BHk>Q8)x`V&T|7nt-XRQ5t~AV5zoM0UoxZ#Xz?Se4xqQb~hyo@L+@8QBV+`p9SK+-^%da4^ z2N#AWdo*?1073$Q9EOoLOKICMkdO5W9!=tQnI?yrYivXwpTK~ah0DoJRUh1=Swjo{ zH3!lLy(>+m!%j!{2)%OlnD8$1Ym8hpIjH1L*E1NemA z6_8(xR`co38*8f()~b|0YH@CLSB{eZ2~j!Q>#UUj>2%*DeqIe(KwWRbQ()3RbMl+s z8*!C++*jAjA2I1o1Yoy;*Ym37w;%!AN@%DYTtrt2g<+ebi;3X zyADtrQo*EmQ1CqzyafesrGoE*(t7!QCcUQ>`I+>-R!!q9=4_Rak<-EZD(*ym0DgZU z_`Mxt!@rpHf#%*WrdMZhN!n+N>Ax!F51sBigmOFbBgBpFYs)c0oQV;FbK^s}BwDGM zS)B>KA>Iek!C+lU&Sed>ZJ*ss+cD)i1HGg%>7yP$I{4q)p)K48)QLBQfSKnNCths}r>ni1iXQ`z*-e zk<;Z*-~ld{CX-t}r3!zroS;c_nDmLq=UB8@Dn}Rd#fM?&U`WcR9Q!t44-ocAC(eGj zu9{M#=dw)SaAacAXFLzLP6w*EUsU`#ulVqM#YdPGe=aJXx?ja#6gLT9OT^awkg>*m zTh1nwXySDFOJGF|$O<-iDdJ9Xc4_&|Rr^Q@ytiQ6+&iA`j!?fywJGKnDSo-k%M1H zc+lD38Pd5Z_G2W!&&l6G;J&jJ{5!9EnH^yqP_fWKPE!L9UaO2L4vKLZ(s?9{YH?l` z6*kYQI>}b5MT2S)Q;M)M=41+a1=C2L}>B*I%iQf(u)LpZ*5F^|NxW z>c&r}ce?6wE|#XxRfl>7Q9g*UR%BW$USeK6}7~ib5 ztOns%DY7A*4;DTYV9G&145c%u)-Leq0%&zDV$2j?FRy~aW5EubfTOzw;haEA71{c7 z_>PF6{M4(>f|x@oE);${iM;z~em+M19LO#Lc&h4YL`V3w(khY+=R#AleF%A6>}pcq zv^-DP_)EZRMEoy3W0*slS2~)LM5f;709F2+dN8WG?1o{85}89Y={91LivksRv zD|GVs?B$3B);pMTuxa?+k5f^Yh$g0ZJOSd3ue`dX2`n2OM3UCYLGlVNPL;MejnUk{f-{L=wK|PU)!0FGEK|nj)Uwh6wJblY zQ^zp{&rLK}ax{vK2J4o;Hqp?Oe7-td@j3MnpgF`wGl40GS+!{(7~X!4A2f6d@pkmpZPgExJy?rrOzf=mgmm8$^w~Qe>QFNY|s0T28GP%FHUk zOhdYX7>Du|h1FayN>>iWi6Mvx!jfVRGWiseYQZ}H@6ii43MmWlew{I>!a~g8E``q3$TVM(ooH5KJEp$fTcGAkdQe{ZDBIk1`UA^_9Jkp74>@-R;qJa7H%7vI2RA36Qw?$A>iKVK$MTi(rK;wHkT)MFm&ih-nyDW zwT3A*+~b2l-VQD|A~>|j!IUG>v>G0gQ|8?1uiAy0%Mg8Z^t)dO^jA$+=VCFPyfSqj zPk_$3JUop$wwra-@j7Y;)mo<10^O0KX>|fKwQ}B_e&_9Imm%G;4AnAazPQyJ(w%7i zi{R5y!#(OzOgY++?gHdTs7K59S59q!$TtX)7i%@@0;V+Z1btBaX(3`e#YZGj$$ zq1upkpd&FvEpgt0g_Kf0${Er<2nkisRf7cN#vxd(E`T3V>NRWI?k5om!Kne3whRUXqh=CEko7tsg>h_lPfD%Dk0?n~w^R9BU0)9zJQO#572!ITyGH4N@-{{(_^3|O<0 zv!;1aZDvX{h3EN_J=SrQmFC!B+QU^?_Q1A;FjHC#X(wtw8F@~uRa-E;p!=`{CsyAu z{*_|NP=o9G(nDzd%Mk4LT6F_jk0li}*qc)~pd&Vz9Z}^z8!pZU zzxxvWt(ta4aS}_E2qBfj!)(@^onTXAPVHzMP&@KV>S`xbI{1jyh&JuwZR)k#)M@U@ zxk=3cIFkZYkhr;IL2F_39)<~DJQvRzoYh|3y$#-SZ#C|CUgy=CX)V3kkbWuzJOk-$ z-mYevJ>Ff&Q??V!5_2iY2IqT9^#k`)YW#^To$=+=FsKX*DzVC`b}=Q)S2>BwpK&VF zHkDlvst6aV?m@MiDczcT8uTs7lnB?iXii-Vd}|B$0;ublvX-knq5L^VnX*t~U}Va= zoZ5r_?-Bh^Dj#D?4_A4yK%uU;@-rm{5)zz*_@EkRN*o-Rx3FGKG9>{Iiz!L+w#xl* z-#A;Es9V6AUyNvyf||2gFnB7l8~Y@*=FTl`kjF>BxbX{Ih=^kQ5mq1!>Cq8^-G=l_ znA`adrmVMx=p~5D&mk_TFl9r_V3-M%wn1we!9fAdXq`0ro{S8=b_UuwuuEjv0Exwl z)ngF8zj~Omu~yAO__9LyMycmxKD@%~SJdr+9sy- zaWNy+!6q_z{pZ=-+oZYw2EXA|5i<@*OTbN9=ebKg-TgQ9G^U&et)f7Ha{7RJhOoga z%InoLnQ{gxB)P+|B8K!h$9%4Z8PqW4%o_D9_G!T{I~3}%;=sau`3>gA{q>wSJ?16e4Kh2Q?|l= zzoJaN%2}yiiAmQ{cy={Yt{g`>uEMjcbLutC1L`#`%|s+EN;lT4*D~cAtfY~gG(!Ch z=}Ar~BJzSzWMay-mFl*}!2$J0qJ1k+?mDLY$ds=}-oW4SayJbrcin($h$3%R*Q?hv z#n9Yu3VuArvk%zWtC@2BfO><-{#H5Uv0lwF1bDE5F2eG|~91oS2wx&qMO3Fx-8 zdQaoz0rh5+FKFZ~Ou+&g214rer#Za8YEL?drw%B^{}Ji|-eZIxik zZJuqSk#F0LT)`WO9;-H_KT^AZctE{<2YcDT@2YpWcdK_Wiy%D<{mr+2M_Op#X4Cv?0TTI zx)bB&@uu!2Ss@SMo_3%mG=P62vkKz-Ei!(TGx(R?4iz{$os zs%5jFXTKa!9~;t#yP5J>Ue8|SC7!lQFlG1uLC;>w>)GQb5kh+hneup^jz4p(f3UF* zPE(&CKe~|y*G5D73$Qf7q}Hlfd%@)!P=951tw8r{ru-_ewl8yZzqQf*+UyPYyUqoT z4qP6*bm%A4$NG@a+#iu02Nz#4wK%8#1~%faHw>#bBPON=Y!=#!#WWsVaz9=zc>G(N z?bK^83+NLA>XRmwVubu1Q?M5HmKZe1(EW{5YA@3%zssplRsW}IpW46Lf(5X*%-;Tk zO$nKRKMP8pwxJ{}FAC^0Hk9(dAfSJ=p|NI+YXZ8*hQ5KkzZKADZRl%&{zgEtTJ{%; zw>=LC-T!1rufmJ?82;W1mFkO5_i38@6DQ`=FEHgrL;5@B+9xpOB}3YaTt~y#_%l2| zbO_(W;Vd_#f1vx9!-K9-|56I4tX_SYDStr%d1xy%0(LKNS6{*GWtaL2p9J)ah4z{5 z7kvHRO7*X}TH1x0#p2jpBRpz1UsO9l=+ujIZbS;?aI|DbEz!Mo4E;k}6G7}8r{%L=&k&F}}Ymi0Cseg($9R;j|Q z&)3{ju?b0e-HgZ37R+~GosO(j-=IA&Q^joc4UgtoKX&A+D58i?kXuo8fZ z{%J_>0`1pLOnI|XeQRMJ?OTTQ-WkK1q?LZJw^(c99l4Ni0&!MXs&BV=chc%YgR5SB zhbeFKdHnm-i$l0hUM^?Vb64=G(>pclyF%69W6Hax*KJ52i0*&yzG0fVRh<`lu*kJoTHwX-Ql3-yVbtFzwisRwr*9ut+OS%}=_DupU&M;(>ibTt%6k@-a|SH5 z8Njz@mye+35aoSZWf5{{NFP!;j8fCpkDPG&J`gpWEhP3|Ou>5D*rb8c6AECcLwDt3B7_@!R zPmL-2EUK~D*pU7$$S$o^|LufT{)qR#2J!fJPW>31`dGAM1^iz4X`e9VV{W&rMU3im zs}bA*_@qYtR1A-wG38S}hI*<+7k##07kxa^H?)1nPUgIJa!wy(Hm1}`EdkA++bvl^ zMi-zj4C!MC;CE=}mzC;Q^xls0Rl(~ppP=Fv@B}aN@Wo_`%|dRmIQ3~!NreN+Z*uC_ z2;6-wrZHGXR=>t7(}2pCowN$(uP6fSJMZ9j^*et6*5x}9V({_R!$~Jr*VWC1=6f8% z7<}u+#?dQ;=}8;XXXYYCMbWfhfV6M9iUR|wIB3W}9odAZ-{Jb+kUmF)F7&XVqgMSM zBi;81N%;_-MJx(4V4b-Jbe5k1>qRWc@-yHsNTzhB)g3HYL>t+#fQ~3KUslCS8u~Dx zcG{feZ$SB2&}B$pQpHFPtJH@RCxgRLrN2@?*jwSu$J}!I2>*aSLhN*)IH#*#msoHF z4|@0^cVBTL4zh?K%?(O9eI)1}nGbsCZWbI_5cJSxD?bam=Q;IaxXknQQG@y@797PF z>w?A94i7fJJ1J6THbk}?@{$W80qPI3L1iZB;7Z-&T^uNOP>g&rX#5(8_MbBcJ+ut$ zFGcVVE;=|p8WfKf6eqm(dI<}T&M#qn!y8#@5)D?BSU~`vbW%>IwassD80K<1$hlo? zZFxWd648dBH$R3GeE}9MwMnK;p5F-Q7(@CFLOLA%HFl0(25TKG%jx4l{`VLySF_-_ zT7A5;4p)FC8UcMg-z1<75JPc-774UW81B(0vf!bH;sRtOAQQ#rQ5HO`O!ql!^+_NK z>r)`gS&4*e4D}ZZA?u`Z`e7{S8*2?P!O4a)3~1cwxGA-Ixwj6N^=_TFR`+{v(#!FF z8fIISdb!`}Y4TyF;N&v}8oz=N&vLK(BmNMb8zfk{Rxyh1ha1Xp;4VhJM-(Tq6}^qZ zV~rHF%;{5|1Nu~<^q4N|3JW4khLt+FWXcHMyLRY3sAv_kSYp%pTVwjPL46tvPD5^* z$^|P7MRI|&pa5?wRUG6sl#vKToQx2hp|~;QIz_9%C;<~Bf|vZ+VhL|FDWhO|*B~E? z9*dvF_<5>UF^1xKh9dLjAALI4hRQ*`k_9WbBuR>o!_$NE-7{UQ7%NH~EK1DaCDcJ( zWkFSx&`|;kv=_n!0hp1~XLb(gGlg$j2Kf%KAQp_UZ-+QAnseY-TfPG(UX4@@3s%q3 zk3^OlJmpVl$>*@VldORGQfsw7#|iKSV#Atcf^Y$=yw_mK1q`s11z^ zf#RHgG}>^qXu}$`p|oDtSny~bvL+^%aeVoA)sTS&wVd97QVn*?UG@3`7Hr73d>k(| zby#EYL^`bjTqRZR2_nZ69@$BS%b=!_;7Jf1qkQ1~06dVaBo50yd+tdSgrObXf3G-fha~RKS^p&U=c~<815ZV|L#1q1hg%Df*6kj2} zRkeCYX&tV>f>MVwpm#VIlzK2Kb$Az)`uubB4otQ=6_fc}!>FVMOIoPsL>6qx>Fube z-L9v-u%0PY4+~=Ghk&0npsyARS_X-Q;X0WG@opOoS2V3$_m z6Y4URH!NcJeK-6eLs5XF8tgP*iZOq2NW%io=m}o%ucpwr0^wsfxkV1Wd`L%`B=3c_o8^*_Pdpt zph2^@jqcbZwx6SuTxfX!-x~mqgrUp=jw6svn)MB0^qh+NW*63%LWcE*Qbl=DU#e11 zbN4hoM8|S^1|pO(^-MUXy)2l?iw1v;D$oSbfcLc z7C)<1C?sX#4FVWyzHiO<8<4j#&sjJ3Ljx?>XM-$3*<>g+Xv8!WI88J-r=Jd@PZva! zA94l@;uR|RA;hO6d7qzcQOts8XcZNvA95BS;m;h@&t$H8X$xt6uSP$w zs$M^z1<&I;f_ER3ItUR~)LblhevN(spF`_gSnvXFv&^VZa0?F^_{*emZkqNhi$Z)# znO`!iLzqRZm_a45wop!AP6)8zg<#i3hB6N=3_z$Z&gqw+g_npHu7O*5iN9i&s$b$& z0Q9y^Q*oa*v&FmHQ07}Z)7H4B0m~)0E;W>TV44kHU1o~%VyPLzTm^<4MZ&yTTAA0! zqfLFh+)y->sz#};wK^87aQTXx@-Iy`!iBEZ+%NKofzkl=9$Twl;k-$|1*X%-1GcpJ zX%%?2fL?OfuVle1D)n3NlDk%cC1HA-s~Qg%a&3Zxb0xx_rSr=5tGV!8HK(hh z_4;)zcy&&{2BXI{=0Yfd*RmiMxa@^c1+Q;ng1OBW$ZIiI`%zi{G*vgI&A>GiSCwwC z;E(XK)LQ4XY9|X`SE=7bTb)<2paE*(%_G91EJACh&(&{o-hvH?6*XS%Wv75 z##Tj4UMh|R3l~G%Y9R_!^#SsWt_Pjhn@g;q^9B~Yo;*)T4qvcUf}Bo!y(@S_PS2rx zbE11`Aj>)3?{h+yK+4v!V2<9}NLvyW9gYpQBnAuC$gl>h1ff+;EI7c|S-kX)Dt~3BVs1rEIq#)q zR1P_A!uCn5pC6CpHd`^VV5>9=6gQ)K#8iW~7)k?HXoI&J3f}sxs12~-ZI$}%UiT_U z%C0nVc0FcwD|goK7|`$JtDO}L9{F7? zcqjKknuQPYOFM5h3*I%L-!1YMAwJh!ukT>NyEOz(;0kiokJ{OrS#U>AzX#OZW4owu z&hKSGy!mBLKThDK9J`2{myDwJPN;*=JY{y_Mqr&GEl!_L4>6-Fp`(IlK0$SEcsx;UuhNdprCa$eZn>m z{VAx|eEp@0dHQcE=Ig&^!C!M-UxnR(7;Ml#dsy%{IsLb&<7}HV8P#7Up-J- zcpbm9>v#fqUxMMBraxIxuRqCxPXcEl!r$4gT|>;%Snw%b|2_N#dPl%ePJ}_hhh;?V zzX!HImuVG8=`Xq`>VIItKfpGgh_;;sOP2o?88R*G>A%EiTPhfyrYR*~x0oM|uf&3JO2R$Af1F^=Db|S-vv}#*p^* z>#w2_&xtqMPXckL(u4RrXB1Tww^^GEN31pkbR4CPdqR)mFG^J@WoTt9Z?D*h!P9+<)m*^FcS#jd2h z9D*S#dD&1xOQC147)m<{n~w$mstx*wqdhG6H$%ajs}*$t7JRi*|GR%M?=<;#?878{ zctAaf1^=$!H1GW-ui2_qU8W5L%9r3=7?0KQ(_26;AZ zF9l29z}WMK<>c{T$v;`}4KB_U=HV}S#w4plx&8fTPJgp;K!1}jI9F7_5H;58Z?WK; z+i7O+dL#gwM2N4;Z_kAe5Xc#7n$B;!FT8A z?_(f&&rqUZew?EG`oCE4{Yw1usnS}-ag>Hn!CgkfNNeIw9%fsa@aZ})I%Gn5{BqYQ{^^?lB|*eIv@ikFCo846xjlzOnjiWir7SiuXzP<~$y zSqEaH^5Zssx^INMK#H)@O^JgRgnZ1+Pf-42S@5IUm>X5N`LNs!V^W>d|6M(x|643# zP*mn)7W_Al%2b2&1n0{zn=c>d1;VpK8vTQ?45~XB#geERoA6+%J^}Ji1agYfK)*j_ z!B4ol68`lZzstgp3@rF*PX7$0J`<(N{Pp_hEch88FvOxt%!=asS@3h(OWIsT(`O13 zp5ny9Q<7f65N~W~6+zUJLgNvoO@pfS)^=Yd1Foicxb6!`;1`06uYmzyvfvlAPmA|m zFDJ0bB9H~Ytc{HX2S*YIu^lwVV7xZmFwDzC8^_}9^_Zg>@AFWAmqI|~^ki=s*32i? zuQ}nqfYe6x&PMe4T3-G4sQ&wWC+gojE0zrCUkRV#IKD8hf6anlX%)u_lKO}w{X3ha zueA#P6($&~Z@IDhW>Eiz1-}tHABXwW3)@)mTXTsX=7i?t-{oyX#c?$HAjkJSI0YlK z34Gcw^nLTlBly$-7RE9!5l4Qigyv*9jtIWr;^UF8$B8WhR+O*G{Tg!i3TVMHOIbAp zK|o!0-Zj+%G|UFQjf@Ea9d1JtK#H%bq6rb0OwurXy{@975w=4>r99MKF4`Iy2|C~= zM%;#S8r?@h371y0NU@=u4nwuf!6Ni2hp`BiM-DQSGXOi@!y*TZ`HP{@+j!~iu@dZ8 z+J(RT{W|(Gh^I&z=kd;K@%G0`@MVx0-J4>gYiDG-5f+Gec+UI^7k+xY(0-7y9Kh0C%nQvQLqdZ&2>)C~Y>XG%!Tqr@WxJ*SG_D#%u z`=%Wzr?ALm&D~CxxRLuon>kv%$zkrOjKB$q(V9UbHr3r5^RtLQ7b`Cxh?NT$1Y=3; za26@&V+lE6=W+x`*a!}-S>y;? zeDSRX^ErTjkIJyq)i`6+696%)rKZZ4dr|Rona^! z+QnI9W-b;$0|Hh9XmE(lVv#_;4Ht1@=2>l^!67oMCN>-Ss#s(;^n@H^;N*dj2<^T& zm3%Bf%R%oX?j)64-%Yfl9_CjQVaal_Y7kH@2#AA&H7tUVLY!p5#bx1QPC=bT0gKdB z#*TEhl!M0g6nNls;Y(20c+bWd3$3!i}>{5=p)iWwQQtuSOKLD3uN zJFpcUFsuvcE3O`C6N@YqFg%4sSs!NSnJ;*dC3Qb)j*wBEW<((i!2ePmjZy&T>%z3*3%TA;mObW3e3kD%9VK5t+9yi z321!8#@9(B%MefiJc1gJ7g(AQngs;k6pNf-SG@zD)S{RDE7sy$rKn)J$h8i+R#e8C z;UMw`G#koQkVe{FWq!pI;^*eR`x9cTlh-{P)vm<44JzqD@l~}kymW)>2Mrx#HB_{+ zMO1O3C>jG1C+*+L)p)%CXyZV8@=Y;XQ>i3I@nl89iWF1my_~-m{WI|JYDhJIEjo6p za}cW)r8Tirc$hJ^hDA<+c0ftQ=Ca5du4rCt9OEr|a^x(_SAa&g=C|E&WuQ%@(*b(m=X?nS zowoe0cR_do3LDC`K%at~b!qgi;Yc?=$pArH@cL|rMqkAPnLJPmwkBR+&Mh+hY1lwL<`M;agP zlumcBNZL@YN2$}$d6}DH^fu77wXt4r9WI|7us*^TfJcpQHqkdrsrz=|gIM@*4L&RD zq%qM@ZZN;yLHlZ5TDhN_u$;MNlk>ZGxG#1gi)=t%RChYa&KAmY8JA_4HZIE>MXocD ztFJKEIFYMeuUa;AX~nN{?obvy{~!|rMi zW{ul5^sd?pTQ!V4dq6l z-i$)$(l#8l+b>p-2Eg|-$*P!=O1peYD`V$DC1F0Xq!T%>CU!pJ53u_eu*mr|gMbyp z8=_d)ja+~Z>hPj>s1;j8@8EMzkqhf%TUg{GZnrM*u*k*rv5TBIQl{DAU|%i>)3IK@ z1$4%jug*GB$ydj}=q?Ux@>z%H_%aC};5eJahoeW-c(@x!TWtvY%yTuS`??dEI$!?e zBA+jsMn;@iV|{f!g!9?xd@g*jd?rqA%BbShkmg7jc=0KCIv~rpa`|y)E%*_pb9d@| zZtL(7AAOy@&X=e2v^sozKQrAI>gYJbtlx)&)^NT40j>fk4wgN5UwIzCAhq}oVdo| z8jFkI<8Y0~Meqr@4#mZAQT|D|tg^m>^yGr{6f=D|?njtu1@~!YnrNuRW#OETG}Tpw ztJ;Lu;C`f;ru=hoQJy+n^KemFO4s9}e@Edu8W+*F0M|lXl&2BbB3uMN2G?R-R=vlW z@MX9kZ^9|vWWuSv%gr?50UtRHC*i)@gcEJ2;v$@sZZ*>(+}m+cz0|G_Gu?^1MQ1nC z5nL8M)EAVW>P_LI_AbDc!A0;haGi;Z@)P_lGfnx=!A1EA|GBs*Kc&yZWzlwl2`4%) zGSl=e{7cRB<+yJ((^uktm6Zo_puE`r~Q>n>at4U{JM z-MDt(B04F34=xw3pWxbwi{R9*hjCH~Ei)O+@b-jXX7%tKy zl6ivv9ao_|ll&8$@VtY|YF8R*`bRXp$5SG`4{4(9-?(D9D1Qjo$7XsK?w^|J&vB>FnC}Z)BHHtJ_g!?)(4I9FU1{dy2a4jv!vleNp zmv~4t6AvL9>;w}YLi&_~^cs8c29-rVUY7XZZl*~d4l>h(v(HQuKh1WL4QJ;7 zPI86(>|8Ss_{NCOMT<7lSio?RO=lhAxfAW=Y5a7e{p@5DPI(rJbkXZbYi9Z%NY|O^ z$C0i!(_4|AZKf|nnq-`z+ReC;9#Hx;+>S8QNu&=q)8H>deLN4*TWqE&?}cU>H^*N^ znr+1WWiw4YdeKaSe~v*jO|p1{NORpi-%MYRd%u~!68F>1G{JhzbOQI4W*YtM@SACp z-NVc@_|5wp?Q#?y(;Ek0i!MQ$JN+wSE2imy)9)g{$zD=9Cg6@|#Ba_& zJjVl(AN=BYGU9IK=j}&%X9{o^E-QZ)Nx~1_avNmgXB$j-9QWb4EO@U8r*?DwHtVJO z2oK4$gv-iL_KDy$ZjCH}y9K;x3htD)=;38i1Uzw!Du7dcgl84*#Rc%F2`8N)nYZd) zNNE ruH9nfM)lMiP8x%W)^0WYyb^B>3V4&+*PAz-GI`NK?H*+_~K{;hiS@7~D&6 zS^2w=rhYsYcakRy4teExR^VP*0FNO}`A@=~Q~V*E&m7VmK3p7&%F{BPLX~&$IjERG?dHLC9OAZ*s^Y&77Qgc+%Wn!H+C~g zljq}+Ti5ix_vk@^;a|N!d*iQ3(i?d%qUX?e2Vfr+^Q}yWeRLk#3OZuB-Th~-fJB5Vw5T2p5?f}p6bRmCQ z-^SZpN7I{`v)X(((hResaNK8~1WvQGuFwX|trA_n!tAr#pa>&*yDGA7o2%IZDa#Jy z%+E?zM`nkMQvkE03QqpZ{_rGlA>dgT9W0nVXy|dISr;8&njI?N*}U*)N9F}7>%@7x z*--^Yc4iAjKL3N`lPr#BJyyy(9y)t~L!`6vkTV0(Qkv6dNAa7OqGt~lKj=VAewu4` zRKbz2S)sYvkz9f4TWxP?wx$yu>%y6A34cT+Md`?C%9Ay<@`pm2 z{lTHx)YeX%e8-PWg>V+dxiH8O@%3DR(xKXRp!`E~a3bipb`hjCYoc}g##7Jn-88<*c=h^IZ*B)Rfuf7-2Mabfy(ZmM-<#|KssQ-{qhJ( z3w(eB6)H5CyntyT4wN@Pq|;C}-5T=#i@u@!UOpnpE3MZb?MlsSK4uQR53=|ZcR);Yy+A-Zn<)iVg#2IaoAiDuSarh zp3N>gRWdsahhm3Q#LyAEGNvLqd^1fC=-(_3tgN$KMIVl}rD!l>qG(8`2)VW)cATg~ zkTl%W)rLZDUdYvrv)%E_^l~V~iwLGTpc7q#Cu4ZNgAw+{d9H;IOawH}BHKYcn?%2G zJS9ya4i=5b4v*oi+*BV?KY@eb^$Jj-S3!?UHm}dRHuXf?v%|%q^C3(&9HkudK^AG^ zh-ttj4lkPSL)z?CgdY!`qoHN1Nnee&bhJ`m~U36?^JDAv;b;i0v z5$6F$vmfXrTzzW+U; zXZdi`?_3&6U zjZ?Y1NexpQq8+rNQ@9EuOa`)>%0omtada|i$3a4$2vj5>hjE1kzd7uwv9!llL=`tj=R`^8prz%6BEm_%LX4qO-RroY$U3 z)>+V0&*z-JkMip(rh5xvCmR?EVL>ZoFATN!W}qwf?=0pmu z9oAPu8DC$b*M~JV7&&5TeyL^#N_4`A6>SRjh~h`#9v7D zmyuK{jv9~0vo2}{;HEXT%s6yqQ8CR*EZiYPG%QV-Wi8bKG}@M< zVZNSlSBARkP~KHz`P@b<*yT_4p6NFZ!d{d^NAzte2qQp9~FD&coOvJ;)Q`1WIrd3F8Mx6!Fp@R2WuYGWQ zD-I^#5bYGhdozDNA}f=LNvB(}7K(XXc62(70+^KLq1j=X#JX@iJHoUh+2N^hHxw%? zbwYjltZxML4n9VjNHINxy!EjW0sVinK{Z?^X66h1fQbK8a2YQcgy3^$LX6lxI`baR zo3+pj>aao`&GhtJy;gT5%V!p3Jj>UNX-|aL4Rf50*&G)(F^aIOrdAxvK31f zFI&{8HZ`1d-0=;K)Le5QjU>{fb22Aq#G*{c%$3dL!Ig2q=xCP;>lN*a;{0k@kPfnX z=4inq9Qf(sIo;$s1ZLFCm^H_Sk&CE?x`kR>BY#%{CLx7pBX6h~2K>Jx#fl-0edEpEfKcV8Co#47Die$}C`fq&?Y4v{|(+?P&0rD~Vk;R4H zj%D$;myh12|2rLd#$#S8n`*v-%LHYM#`yGf3Ld)6hbxya$$B~>p;T*c934XYe>#t* zT*oCknqgdMrj2z>b^-2yIxohJ)6YEEe)|M!ZJL@;oShp-(yJQ9H zQ>cgF=`XR zLrBvkmeMC9O|nMxV-1dxKoT75jI3bIjuoskGFr=|JjWwX!MY(USo>o%LQ@{B8#0kIHmfz^w;>%sn&8w& zN0@1}n;mYZ(LQ#VnFd|VZKkInJrZfqP&5%Y$xLJIl?^x3wDySp=J<#4to#rA2C(l0 zoPCM=*SP5Uo4C{ZA?RVR;rMg;A z{^og#8!{R68RqGxNz6Joq~kmt_c%WM*-tC{$+1hH8n~tP-f7{AwQC&yMJV*RAK zy}iAk*3>_r4n1?d_qxZAo8x%x&=B^BY<94csY{ZFk3F^J(SO}N@b2AR6IWC@qAy>& zYRaO%Y5!V!>cq-TKe|P__mPsHJvVjf_S;@q{q?=~KJ?8y_dj^8{`(j2E1A|XV$t%4 zl@EXa`KiCWWaIcNWOViF4=;sXY4T#$Y=HaboIL4RX=}d z$HSLz|7OE`t9P_~eA)+Hq2>#}fA8H7Hcyd&&80@3AvK`}Wkc?t1p$b+0a67k=loW<-F}Rt_1!N&T(kD!Yk&3qhojEF_`8Rm zZQggsK_~ejvx4sj)hdcxl}imyURJ;^T=2zN`GU z!TIfjzj%K2!A%cs`u^^(&WJUCQg>s#>cf9N^4G{MN53t`<*CW@QJ?WF1 z|Gw_tQ(7l{u=b0}doTO@Pt>pV57+LP_x`0zD^LB!hnH{v)ngA1zc+rz%+5`>oK$?& zocebk8vgi8MWHih9$hiKal&gqx#ip6Y}g&`d*ZT-%D#D`@zGZf`*HS>-#v8a=8MKQ zf7!P6;t8*AoA&j#L%00pV3&0A(xT7rIqzwA|5f#mJvREu{|9@+;2Z}&7=hQ; zgmTqt%k6IcO06bE34Y8iYEmx)d?g|sO~*R-SfFU5$@MG20M|B-uNkpZalcr6W`F84 z&jdX*DhD6wc*}gVuWM6~DIJ z?Y4cdGb#o~$q)WAHMqXvM_n>1`qwskiAv-yX>I-m@Zp^aVem_5rM0Tb%t9wM?Gd=y zm0owfw%qgTSNuUg5s>6ijg@LPR{4kOb-&*q6;}Ph+9voh`iw{qB<;2vX^4%d&8WQ5 zYh4YzS0Zbr)2(d;uCS9K=S^#CqnY5di4Lzx%^T$#T`5@p!UOVG#U&Cuu}7n(-{FWv zCtTB7r72ap-W_&=*(~%c?e+tj+zV^T_`KEcb$mGB)MpbDG12Y$fe&2c<+I~cxODN7 zfywqXGIro=H@1+8VYFA|*Qpt7YqDO~XTh4Crsiq{MXEVCf?zlnXq)zn#N5ss8&=`q zs#l6ludln)DGs<>0i_8?GX9e8?Kx8gN%y#!Xb7E)EmhbMD>DVrdo{CEP=k%W`71~- z)WDC5%iYHH&5Y}>qW(?d9CBca9B?)nn2G?_L_}`<(jH@6iAYbmjShq!m7^n^x7FxC z^yzTolb!Z|J9Ju!1I`+QLqvK=8pC?;`o^F;nhtw;xY3Z#kwqSM8Bz$m#a_C*lW$mB zIS5{qV-zZ~%@{%SJ&AF){Pe%oCok7TNO~+a08`-r1S?Okt@l3!R@KrbTRR}|)+8!t zOv1m@4RT}>rh^~b!O~qU)2%E66UF{}@PUKC;)f%pHDrQ=&ShBpG6&pa9v(<~%2fj) z_^`7ELiFia0qH2_bFtn`#eVo{Z(~%B=IwDkn)zH}s4biEIpj=0Glb5p=z;6!5^ba+ ziqB<66rZCa3JZPs92zU2*cK`QvA2R%95p9?9nj9FB6;#llN@?l2442 zEfAPxTP8W6vMsEK`%ToA!~=Wv!O&}KUz+BiWi|QlzyE<`z$#w5wc1(tI|Cd$|7J1) z@)s`}W!hz4;{0aZrwg&RK0oNSI;)G9n_jO!stmfde)xkv1%J~Vm_QM3atll#bip|= zf#`$Ls7=H>Lu!=}^_gI`ztvgsdp*BVTW$@aw$}O^e%;JCo-$%PICoKf!PpD)+V`n} zu<6gUsr|W!gAji->38bghJX9r`c#0}a~WaI6bF1$B!0qNtSd&Pc6Su663ZK2qY?C- zT&(KdZrD)z?dDh;N_0p4w(g9RrE&h!CB1hDfDP|?H>HNqsaUBegVqG$hu^SLY{+3( z)WJ4J2EvZSW06`*aa%mU4TGg*7h>!%>GNn_OTvnOt?qA#V+pMtGaR~N_8E|LF;;;p z*v7aV?{z)h>aTl)dh^j&|ErGe1PV<`>f@T7>pq|(@` z4`lGQYAW0B@_a#8e1}p0LR0evYur8$QrEC2HlwZo59LGoHqUa{3|)n!@?>K-(ADRn z?}?MtwmT>6&y9mO~KBeQ-(m|MS@zKI9g>V&XpD_eA3@w%)&kI|z6~rTD?M8$yh) z+!$i~*^ME_pWhf_{6%1v;z&fdxxZ^`b0Oh4HW%Wnq4$VGSVE}Zw-xI5388KRLcJhd z(?+*92t!IvG|1(QatA%%>vub%^P_*6J0CJxvU3No+nT%A&E{^q_|QuEx>8D;et`#r zv+{U6SX%ns;eeeUZi^Ex4WSv{EYo$+sX0A#N^lmCdXS| zc;Ol2ynqZ;qS53=uRG`lKaWby!C>PKHC05OUGPVdsS!4TZ^M_#HjqMmS!;#p^VwQ0 zS+Ue=@#-QmDN$fr9IU>=hNR^-A%Z3-NoA8vg@ChE3J?0sI-o8Y_dF2kTx#Pf%3SlW z4am$j1l{S<7zo@??^!VCzvYfDZip0Hb;ZSCgx1v3kivISKVp1gF@SUZ1cCeFewsy_ zs-r2t)9BYmtwHlay|cQg&2nN}bQT1jh&oFMTV5P^Js~jH(hY#CPzM?;b-Y)dXn(Ra zyQx3i5Z=#k)V#WwEwyk{GHAQEgPs<-|Hfuoq^PI_Px{b4_YnY`PI|R;)oTy+mFNx* zSyJ6vTz#drK_3O=zSZSpISyIUb2kcUTIb!;c&Jj7h}rndeJj23XVY!4C6|nOIruBd zq_jEykWhU5VZD_v;o*2L_s&=G4t`2V)2=-b#Iw&E`B}uunvn;g> z=+E^~g6r@<-$aN1Inm+PxhM#|&o-a1@D~7eKaP@;lxG&8GTtUy-G(>twDz&kX-&n^ zZ1@YyCAcKyh68?be~M?N)#vV15V+hptvsGs*KG05r^G7<;Kcqkxzkbn_$# zds;2-=IhW{b*+-*)cHUm1A|37&5sP9!}eg4+LML zx1~4*sQ~C=YO_V3@sRpV(o}uR6%k7Ra}Z3VN0QDpZM-5jCnGyl@&!Qaj|mQT3vs~| z1|r3&lr@h&pam>3T_KCj0?Mvkd~wif_eZ6k*CK+TVsbgxs##Mgwu!g8ik)sJSwK&P zT*7PZpi9Y5=Czybk0xnGY|46Z28AI&U4$O&Qd35(b}6+jbIj%wo!?m-cCK`~qfSkv z4c7H}Gs*Ed2{V3Og_)&13hgBz>1_rtAyZ>GM*;cV?&v5W_Cb@QP&q2(jNS$KsNA<{ zVRtyYHOJwJ)fkK~io2WJy+u^qO>YquR-(Cun!Xn~iDa#H{{G(vrC!=@m3w;&#SoAoPVa5gp_L?`Y8WNLxU>`u*c$enI| z2%!gnXUs>cWIKxc$pFYkc8HYMVS+!mI)g4Yv%DJ1JxF@!7s%+tZs;L)dYqw$3>J)b z<`8XX0>*v6Cz1#Cf!xXA&AV*H!@8m+Uiq2!aCPyS@S}Y(3N3vVh49hRGMC5}$s5T! zni}@nQF41@R9PRk2d&`GgHdsf=XsVdHt?sq;do2i`T&$o!b($EVdHAWzLBmG7SNuV} zSqt>IcU@?px8B#kdRiYW?yIMWn6$X=ZS+SI%sos5iS|LTZ*+2%klD@Vu{f#svi$`7lE-)Q@bL0B3_-~OQ4 zZG@KL@kd_>eklbpuj-VEt!n#(YIa2&+J~!yu#3b0!k>xER<{=&Y{}{!@UJs)K5kw* z#18O}4$8tUKp}X~U+)HybZbL)PdM$iWfb9r4h4!`X-#w&5U9Tqt}3KJGvO~OiPn-o z01FX#dckHktZj8c1nj+T7`&fc_pV*=R{cx2ov+3{f4;gt><=#V{2**jX^C;b_xD_XWy^){6X!Cf4#OWZbQW)mPGEPKPnA7{XqBfGM7?c zAG0(3PR9TPVr2qsn%x|7m%246RvwkmLG}V8m81|dopGx} zD7uFOX7mLloip_XB;4zwIS@FHyF$e-Rx<>0I-WH{7C7V?c%(;l`+0|M-^&42w^u|A zUz5oV?3drpuE#Zc~z39@Hi$KtmSZgx&rP5pLdK3b_W+zd1QH>aXP1rC4JPq!iS`f$K9PO%vNr7!r)t9x$5AY-TZ{Wx2v}3 zd2BYi7%Mn1%d|bZV@!KQ82LMhIL&w^c^`+K(jqQ_%P16yIGjk0+8Bi=DSn*7K+>!j za4!c;VnBzglZZhO1CDl!2!0?Ie992m8nZi?L@bJ^Nme}EpB62v;^7I)+LQ9LnVDHi zK07|-6`<{IWR|D6F@yxRV|UZ*G}?X`as_dAf7sT_>lN<;npkm}0}y!FF_Q*jPnZiC zq}5w5FBMQ|<)!SG;%}l1n6>$XXmmqA%vi37jOCS9r{3gJmR~`Ea?~RDg@2a^S~f>r=yUsQr#GKVJV0&de^;zx-cWSOa}kq1=`$4 zG5sV=YL!LT_3LkcsZkYd1w~kOCbw6XbEtKDHC}Ua9H;$q3rNm`$ws#pHe3__uK=v% zDEwb-necz53ojJvj8WW0wWwZ749!lF)D||i*6`b&xxw+xUat^NFpc!9n;6)yZdu=a zmF$~R(mFPa6(MDH_4Jy81zb!ypQ%>A)(SkwDv<<20CQu=_~@FA#{TUlH1=<|Y*hZ1 z9F@4(AuF#^Sz<+tC?8Z_%GkUD$KZA~jkIMjBD`ozm|QqBIzv{V%TBrrkxzjI46xyO zraX;qwFw_c+V)^ruH7an)7u0{sn(L$Rss=1-0e2F9KuDZfc@cyALjLhO$-0488qDgIvox0~RGN}3dmeK=x}UBsnYqCG3pKs`kOhaSo8vMYK|zo0ev;W)WC7}+y09|T+f?9i=CY88ba!gDOb6?n z;9GUF5F~-jISZGZ4u+``-o{4zI2!vY{Wzy& zMd5E9o}8QfXS(`~DzRaD;_ZRXc|BrWAu2ws7bjCs_Wgl)>ahB9I6xPx7lk-4S6lt6 zdegAl>Qq;}tKDI*+FikvDo}Wtj}$(;^^wA7O_9Q9&6dBImMzQjf7Uiq`0OSkh0iuO z7b!rzDN^{XZKUv7bEJ^wLp$MZ9}07%aH9z67%6<#JyQ6rbEE(jW^<7O)RMB2r&pY~Yi zs~5q)!(lsL?e?l(^^OZ(uQj+{m0^;p#82?ubUKDp&dB8dfed%jhEhgKND6042|=Xh zOCN|-zJ_I+5<-A&^%^2is>YDDjo3Tllm7y6N$L_>?MOl76qz%|RCt;Emnakk6FMJn z1M~aAWsVPc>w}J{es;`=YD>A%3iPv}9rA(_TbzL@M~|4O=U?msDTs~VKoYkFk^?ha zC;YP(St62%&P|w1iW()@zFLnG9ydm1`$$PAT4Lpq%?Z& zML@CXY)tf(tls-M%P8RI%u#@3;~oY4oQkiOQ+_#`kkw9i5PRq#{;G<3Rt-Fc^xe`4 ziy$n@oeU$iS1*R(^VRjhRJZz~Fmj{+{+HRbLELG{AeQKjiT?|&#-#nXGe8i#Yf~Ex zkki4e)5S7}yxn5+4nFEUQ44T76E~wYz6&QYpv7*x6>Q;0~-iaw4lC~VP*iEltoZkTPTFRMOH!#!#%QiGbFzU z%r5tj#WhffBk>*MHwR&p=X9xL4@jueM`qgHU|k<@tqptnb5=Qy!JVKd=(sw!m2q_r zeEN~p?4ll~qX5Dp5;f~{RNrSyp{{Z{^dMwVk*X&yU|Vf+Li9d1D-)63vRNtRv$gSk zUS~Pa+R1rovvS@pdsAEtcb4*jI5r^EBaaNGQ9bf#e2n@GNnQ8KAy)2{+ujC7-~|!S zTWcRg?&n7}PibE^>8VY0!ja8%!s(zBT$CGP4ayD4?ziuTdpFSyw{NB!?h8vO+s++` zyyUQS%bAyMs9RutM0we8jK}>DpNv^K;rL0WXd2?P&v8UyEy}Vgnl|eV2hDD;^-5?P zgRv6-&93%PKPQVAI{^y10I;aK-)Qy3v+r~YVEKCyIuc9|-@cEavhE^;R!dB~=d%&` zpljA&`I7*>QytaHUU^Xac7a1@Wd4=)TuM%D5$S$|+RjA9ikOLl*c@=vT7-?00Y>vH z-FCY>s>#mj8>|Ep|QbVH_K?J+EunZT`R)`QR~ySGEPtp1s4FcvhR1Qfvxq{qieDkCDockb8$+laUY-zGa&IHWVA!Z^$E<2+Go%;(*`$U zvfpv_2C?y7FlCigVTfp9B8uW_Ux(RI>V^SP4iHf$)wtr7B0Xyb!jRHoX(!-!ce~u- zFMrx%+g=jUo5jVnAX%Hm-(k6JFF%{P$)n`6<3sMQYf84m@qgA#uEEMZTA8d{hH*IqT{TAoxzT?oYa9E%~0P z32pg=V;N@ms~zjvb?=&5hiGz@IS%IPyogkmW^rB{Kqe<0*9H(9--u4N)th39mz94+ zU)ThMa}rq#=Z*IHNsdKESN(|AO1i72MOVQ}F)Wu;j(r8O@pFn%SsC17ZwG(GQx?}A zw(5wd4DV3fl(K!f`}M{X^sWO2S*XKMm)QY19Ljvv1WouKwciUZ|BP-jNp&fT>b`nc zLAc|)aR{rjF!bVZh)}9@71o39cAxe-*PoLeYkE`#F;k~|)I-wZXEb1rBM86rG%BT) zIcUkos$ty{0gCKq1iVF~GDs*V3n|rU2{90mP*!ERiEw6%5B0Bi>f8uGF30&-+z{Q8 ztJ8zvo8<|f?W2SUeH%W6;H3RAqHm^D-;DOwy-wY4*F4cRHQ5M#MnOKRdW~hPAvn1? z#keJSyI@!L)U9w>^Od{>;qB=jtkDLQI6E6=bucwy<5$F{N#9U53=~0xJFKn)xe(y)aRr;rh%E_ z(9Zcr(;TM-vo=H0draCa3U0;C(0dwkxi^{Pc2f^xAIVyMz-ujIcy|c5@a|I__TZ+5 z2XZ_oZiR%vb#^PV-Y6#Na=7fD5isIX=KQr%crx~RSy%EH@aa#3g z(j#whgYpj$+oB1Nu^VFEj@N{^bpLh)&+7G#`s{4m6Vnz1#T-h^0Kp2F_Sf8EqPSX`quG7sW;(r)>3$d{3>l}xcc2zTutjL#AGqDobH|B+N z0+$=3g^y>%^Z9{gC@>{-i3tM`6N@k)$6*hvFu-X{A&vgSiU~+ z`x5W7w0wmO7SvK9qg&a?|VeN0mW0evM9xLSkUfQhlLB_kbW5 zl_J>UF3nxo`rdqC+k4YuDno(Z%-3}w%qpyK?zr?v*j=uXPyT&e4_Zc^P8Pnoxw+Fx!7StTknkH)BAI%Gvsw8TXnTxr!ELmwS3zkW$^0S#qWlBCfK4kXJb~iF3 zN%aO15*)eOY41NmCPcY}Y*o_}Q3DDh5tRxs3m>LKU2Uz62rbU+c5v7VUTY_h{!vdS zAmCvo9Xyg9cF5QC5cCK*4_X5o+dD(+uO8#&Hv96&kZFnjtot{L%GN_c>;ZHW-kL>K zcXEV~CpRJFNnJ?c`J>J=M-32q9C*21Q7ut02%5xaD2eHKA3jRHFz$&j;G*S zzW#JCi!~pmB2roQTIM#r_}mktndpPH@bP+GU0-ab9YW5wdmyw*?2aPhccw%WZ&Q?q z8{*;kWk{XJlEaH>zP!BNB&)aavJn&629Bb2gqhli~SMlOZv2vBN??x`%;mEgH?u2G1vS{ z$$-TBR5|^x`7z{}S7wXZkP}kbZ^*p_HsQ`R*($FAUHUsrgX{(oHmS-q2`@jOi({ge zr>vqDiptiuKJf<#mGCcO-+jSM*bB zrMBK}v{qVydiGnLy3d9zu%-a}&=)~v-@y=jG||JUx>s-dVHj$5dk}szwH=8B{eDUl z=+T6vGD~?n9?i#EZC{)Qd3q*b9@jgN%5B{q2;Y-=nE`zn7Cl&iwpNyG2qiXK1zc_+ zF*tTH)(@bel!SYlgTY2kc+Ej;-H$i*%^ngmGAB*ve+ZDu&0pwIUmUdBeNhIZx9$yU zi75KGK}HA6N8eQag`M#?9|@Sh5VUhN9quxByw=q?T3}h2_n7mrN`$P3Eo-2@O|VZs zSqVSs_u9kW6s0@h>h;ENnRs(_@OCXc7U1C#L z{+sVB#N}3}>>LDzDFnocni=W00;I0=@X znFa_U=N;f`h`}>F9t8fLT-d15QvPp76`~MyiT~hICIYT0o+p5J;e^kI{sTIE z(|Y&owO~iNh)X=F>e|$mM?^KP?|YG!6=HVA`L&cT6-dM$VvkGl{sw(YpnbShdI=5O zl?+;jTo7~!Sa+@8zY!2-R{loR$_kQi(-ldONu|FL^(9tm{((LU<|b3T*C6h+)9WHRYPSK1%h@1W6iO(S$ugP1dt1v!wRYQWg4pziQ8!ySxA?5-K??FK_+8G z3w7GYSScvXB-&*#R{E(rYpgy@c5T{NeYmO3t4w1BF$)G`H9;Z{7>(7p5L400SV7=k zv$2{WLC4VLIil}B0*If@)a;MwBh}O^IwLah=4P-^(!?&4pqV68A!qv}2~t%`i(YS4 zKTWBSsC|iI>W2j0M^dwkzE2~`ww49moyXJcg8A+Zy6bCMkeu5HoYlL9=6;8}KzEpJ zIX$`;jWY~VUM3`Jx6+r72}sUSb>509SrCryTP+3 zXTJ?~q@ACI7?Yo!CJ|;o`|acUSqRMVv(qF9`C0BRq4%8t!6r8%DvQj<90^RNHAbiN zM3+I#A)?Dl8(uG6n+1VX8f0;;+v@Oy>g3vH;{qaYHq22-XHnOm?kuOG{s?&=9B}gn zPQna4E&_sewhi=S0E(_I%!=J$Z`7~#TdP;^WDbx^ZzV+5 z&KpT8%Pnh!-J5lPp(Ku*$9d*bKOHMQ)zqv{Q#?)|bVR4)AkrglC&UQ5Z;Xo)h{4gdwNWKeL)%9)N>4G-21V2)Q-HMY$V$?GljU^@ z`Pt0t5=uThKIBb=?QUeob%`59NZ0EUCAjD|UzbR$ntoj(pm3_&9dn$b%@Rx+S+Fxp z1rBd6xLJB$|I}zMX~^|ax7QdI8@=v^b~cNkd(5WhS&OffL(gg-;+~o+J+r9~ zJwttHv_Fiel%IrSfZ%Tj@R`H~+Iy3?>A~RIXrkw@29)CDx-#rv@V)-vLJ<5+%Cl;l zE{`v}=m`@gz9DGw#tT}UVhInlQ5GxQOe{h0bLw-5kB=Es-EHgYJsVf=nH)?pEm)R=xoGR^ zJzH1rX@hFyLwnI}Ze*6LzcGYVuAY{1IlUoAziu7VakZurHqNhGOUA-z-@4xF_r=@P z7m?;yTbCaC`g7$tv;jS|7n$tXd*G)lVBw>3<@ zjbZXl)1j0WE^9hGU~8CsTf^j=4O5yAJ?FQ%ky(c6#t<^gFs)b`rWLbcS{d6gtti8^ zlo%#W`yGvwpJ|+Yqj4fuKrQ!hZ-T?CB&ywhr$6k)p?nn08Na-D4EqA{x0u&nkTiJ< z)pGF)v3I%bg{Hxm_(8Y=$Yervn072Gk!#{rIB2plmh2E|*eMP>XGnk(v~9FxGOj_} zih{7&GCdfswducJ4~F_~7oZ<$+Wc{Z9IY%-e7rnUP@zbMwDf&*1De^F%4D3^cLJd)o5s{>%;z_y6jg2rE0h8twH;G zweJtA!pc_rgP!lLizq7|m}=-XM#WCIn<1mKwSKh0q? zHlbhDb$P7oLWt3kWCPc3Qb6o^H7SbCZl8Ok0%6`_p7fCP5y$xov6ozfJqUhOR9X=Y zaz;MEE6Mw5C5gsJkM(wPSQV!iR=PdoXH*SM;zb}tDPIH%-G+EZT9apngYHu|u&;XU zV3aiIEC)So)^|v{=s2w)Rz3|R``T($A%i9M?LtJRDg%|mp3o$mogVn>{YR?-G&Brzr}EB3Tuc?#iI$|Vk-sft5yBBJi<*oju6D|N|jf%=9L_dA|nEmwaWB1dy>-`k8Cs_NS#>PJp5`QNt zv3_M95vrv348o))*Qh+~T1qg2@mpct+t6fUaTz@gN#|2NJrVSD@GZTgbx_V(uKl2&Y0>^M zppGxzCAGaC?F`pPJuJm#LYla$-Ri0$Shgq6{6z|tu8RxUd@r}e&K zzp*%$WQ$5Nr{TZbbT=qNPggMZ`wu%LjPpQVx6>-D$!9;gB*ccAD4W$XF zs!^a{)RzMUl^FE-cq^^OzKFepW0I8ImNAASFX9R(A@=`7h;4n!h|sE_vfcCF2pk91 zqv@W%-W~WgabRO#7JfqCDG8SxWS!O`2Q=4&N2D?kmeJ-j!H1#?&!ON(ELeC@E4`4` zE%OAiH{akyq{owtZxt@rP+^CAnkM};{|~6Bw5=w#xf}<_GjAEhr7HbXHyT+ zv#zEdf>n-$g?)xV^?;M^#^5fh^1i!jZY~pY*{Sk*cCgv`6R+8YrZF9tYL>8ZO*M;w zVXE2wy4UG+2h~xpHSnv0Zgr*A_NymOIA@MYrlK{AGqSqRoC>Y*#RO#Jr%$X0Nfph_Ltx9mH0;q1E_f&b}bjoasrg_hh@kaR%Y)1+bzS%TV ze=y!i{Xy19mBdK(#~CWf`r*u>g49o$h6)ls=P*t4Or)wd$y zIrJ>+l`$22QZs>1rg7+cx!dqZbMfWZST;R`g&g8!l4Py$wyWr}l0-nh@s>}TuAeLL2<6NRajMPPo>}En-mAzGFBmM)ah4`*kz+u(z)dpSeW+%df zGso;shQKG3Ef88>X?ItHU}Vs{?v-e@uH0#()&y0lNhQ1?LUr7iLAckJ@PI90{9uCI z4Ga^oh-TeQHfyg8q-)(?E!plc>JH+h+C3fieJ$KPGY%rcpH=vE?^-y1E#l${+mgH0 zjgf}m_Vmo~0*Ab;kZu2}uNO-#a>yr*n-zp#t=xlpOd6w^xV3>bUeUX3f@7f8+vG7u z_UXbDWK^YKw+A9Y&NpwJ}G1crmr(X?y1+2D-Kx6wKzH zdv!XPr#dAZL^+0i{=7Yfg(uSVyuGAFec=*3z6hapLYc#sRJ>lW9ejwNPmIf0U8b`N zyKHV0h*S+HpC}?@=r_#3l&645kC`>`(zu#`F!TegGeu>PLC4@Ku&aKGiQw743Oti_EevRkXqg6qZXKmG}#s%&DK`_3Lav9WYPCk!+`Gl?lsB;# z`$8*xQ6!926Qv9-h@G>!i~^Lzq)~^Aal1kjDGn;H?3i!2mY0GR<5FJ;y69g^x2v$e zBJQ^3d1iWh(RyqxLzuAmg-GIT)jiSjZ~>b*W_nINW}Z`zjX9?tbDC3+ZRMPL%xO+N zW;Lg#($Z$>=r35$DW->wbLz3IIkkCt6H9CpWIe70_G1TGI;$uWICrjkiy;!gFk@&1 zN#`}~XGwRb#wjZWlmK&C*@*OHGIMPGDn!e)wm^M?ZXVVL$%@)|P=$D$LNEGkGO}aF zGk?|;*HNR%Z30%_f{aHrNLs!};sEqRo3cq4^^}u~ddkX0&7`Hx zGWow`?V^|-HoB;%vRu^W<#lpVaQqH$&PD00LX%bn!Ka)B)lqBEto8@qVAwYqJj~MQ zz98u(yP4sSDrQ*o#vKT1;MT0y8xZ|M z#(Lu^C*Sdu*>^m(N#F5Qw(m%;r_4kgqx2T;thD?)pexuzC5kFOunG4O+TBPHt=D&O zOp-C9k9*3WC&Xe++71q>POBza5px_Esuk%V%U>{>0r_WF2dUUvwf74sDA=5Xl%KY9 zkcgU>HlLO@%i(;&)#^4|~FK=SQcFO4|s&WpxReME*qk5~^Ld7kzv``^u z-a<)cgoR4k6V^z@EKEi!v`P??ZysNBeW`M|BA*r~8=p7tzA#1&}+JsBB zNb%%p<6PvXMAAT@DEbX*1U_x{@{m-Ps6dI~rJnCK^t^Bc-0jj05LimimBK*^U+pBF zho|2FOpgsg64i9~OcyE;O6AOw&#mT2&;n(-l~nldUi>%m`OuGRJ(`yhNkHLgk4AqS z36YFIMtdRZKr+{Li|5H3QBHAXjACD`&5?4*2fkB&qeQGsJ$TpVCg>9K-V$6U2@w8dYQf;JYI`Qc{20{%5#{JXX{#g z%G6>_CtzW#-Gok%A1;va86xd~?buK79s3FEj)h;}>(H^E$mm$QeMg)+_WJ;GC+gUy zmTHBFC*i#`i%$4HG=i$pX@TI~w*y%MeNq?5YFIzH2@CN_8w>GC!?1obV_1u1^LB5} zLVPm4S3=5@F@{i{Lz#+vXLq9!T+;`5LX6q;Mq?HSJ=jUgL-NHS6JpU*EHp z!~2@e@V;gk-q$jQm+rxn?C>UwhDy`xH*2jVDuqRdbXV4q|-^HF3Mgund+A;oG7uz(jIjg1qhU9q-C$+Z4Bb;02$lP zh`}+#1CvFOP_|W1@)Tiq+TPS!pL&vq0@(1LbLmS6oRV4dVh7*1>PZOSxwbYc4Lkk# z>Sy-OVDS>%8MJtJ2Lp`n?iAB^FqmQpF&$S7Az|ZM3?T-F$<%)m=!Rb(_>HO<53zIC z?Swmb-c?a4D>+|U9uBIVE;w)U`r;*?rGDV%7pJD436wARH5kU$%Ju4?=?$vayTfWQ zGSy-D5aKg|fn2;Cd}1*`G{Q0yOK%cstN~fCD$M7_si|u4Ke7MzLSV2K`-9=~El*#6 zKKQ@$)s;>t-}&l=2STbU#qgGhM+iN$DpEw($0>ZOX&Sf5C zcL{aMdLYP9JNgNrj&8N1p9IMBT3n~sj()PKI~p4U32`vDg)qgCRAoDtYti`{zYt7g zld24($r@JxzsP|Psw*Ki@|l4WhfL~M#MO^&>Q6t_OnVQ6-etwkQo^ad0iW5(}EY@6qS4y~@8w7oJNHE4~b9&)~yZvT`&6 zs2f6Lsn{}ytC;5@Bu&mx;y`b@)vpELswZJt7SdU`_z56!T)7#eM|YEeIUnXhAMVv>bmV=_(p{V|V~b)yZMDu0x!> ziDkh&{B!i?PqsYAT{?LcbZ1a^QRE<4@-O>|#@!cS%?(x@;hZ z(yQ0C?^ie`;N7omAbetdr?x0Zf?hEQ+VtA2pi>-^EI|>lZ7*m?S6MkJm}1V;9DLSr zq%LT?mb(w~8GsBn&Q-z{W2=nXVi&aSR5CTkNxh_4iA|8h$tK9F7lrzsuLeW={>*yd zDR!o8T12W}FJwtC$DM3@8H51ast`oJmAiMVGA?N~?jel_tEga!+FsermNIlN0w@VGVL@}w@z$k3AxCbzc@X7FW#2EEk z1|)p9GTa8IKQJ_WU~=8NBC5g>9~o*NnTp=r7BQ^&(ishMRg34sOTtUZfDsQA8krna z@vQiM^s*QK{ZZEU;R9htwES?6uQyP91qCBX&>-BerjoN9Fe5^Sq(|K&WC%azw5*3n z)qfTd5d_{kMuZIUw^>EV5b@}^qCPZsgbcYn2AB0#<_V(T4bJ!JroM_aN3#{3hOPnx z#D;tN4J*bHVaOVtSePa}>SVwnQoesskQOUza3DB(;n%nhcoiw1gDMeE+`Fy=AdA}# zI`BSs9Uve!+%0wBeYQIAzOi-SeVfsN_hB87Pomndv*6R^YD3Gy&_iI>X4VG~Em{Ih z2S2w(7W#7A{Kz_D0_qoyyAK3kGq>3X+R1@4yxc#~{I-*qgK)QfpnnLEPWwO*ILH)>;>H>V~L02|)BUAhzk=f)U)h+kM+ z^M2MgE#Vu9v;+r3_AR>H+&Tu5?pL9-Rv{M=o^Z7h5PTCZN@P46fw)DNk%Pc<=fdI zNR^^iBzw2nt#Mipeh}%zSThc?xQ$&Q_RV;fV^aG79^DqYsRsEKH8GI2qELjpTrC|0Ul_yELHylYShI#3*!ijF zk_7R<6>rrr-Udhym@P0QmAeDBhouCV9aczs&UIKJ_=JqiY=d8fzV!_l)E$n4xaOQu zpIE4Tc1FD(Q{Aa11A$mi&`74)j$j`YJFVmJ1T0` zsa$&aak7W?6UhltPq)hgAMibG93i*b8zbB@ZCLhaYkG7f>xQtit5Qi;zMUUdg*;z>H_=+CF zj`NBhVjy18D|*90GuqrEh6`TkIi|wHyc{XJBXGh@$EF&&LloVg6UnJXPd4kks&12&DOr@ zSzWXs_VowNZo|qoJ&Q)h^0aXBS!^(qJ24cIX!A9#5ff=4vWf%#&{}H!#Vx>}P3@9Q zbbG!y&E(~?<5ReF@sfeb_B1j%ioKzQl-u4>^k%0sge2unOR~0Yj1AXQCZBVk^6;YU zP4=X&)&XLrbr8kttV{z0?-Nn0D1hjUJZNoHp0hD3&zV$tGA%^bIDgvKs61zDRGu>% zl{6oEzHW0Pvy94(A*3`aQSl_ssyvrzRVteng|RAIz&QM063#WcoDG22wPheiy%Rg# z8+K~3WzeHA$Yq~-Tk;*2ADj{o({eHMJGAey=TR?Oes8wnxBY=%>u!)&T@jysj>hr@ zfGx}2)G(eEDmW|t)$O%j35)QK5qHDhxI^vn1>T}9eF}YC1h1pt57j*%p8y5_I6Un1 zha2Mk?_i}UL-F=%An%~LE)ofn|Imb-=Du|smF5W&G>A&xlkYa0zjvqh2rMgkC%E#+ z>vhDg!nlRGC8zNB0OCL$zo>bJ!rX|uY4sAs|HzV^yJ-1aA#5fJp2}4|6DR7>YtOx3RzN#pSY*t>`gqZKH+@A z55cf9Hf6KF4$xLoA&S1A1*wzQgzQ`Op3SuCJyfg6^RZJfDP~Dm22DnhF}@xIix}${Ct>U z&jd)*qrhOt>Zvv1v$}n78FdKX>#A`OeB9aE;(>7QRYcKIb!_Wp2SU9t2Trmb5DiH|Fole z7C3O0dj4}jI|El0@qG+?k$+}0GwNq3k!9ZTPI06aK895bUr6@~%=<9A2?waZ52I5R zY#WKN>d=sQ<{J{4vNsUnarf*Ega?U3@?M|(m$Ca1lY4;1@T14d@Q@1Fr=u|omt{tc zMGRzhjkJ|S0xzU2Be#=TSLG<^pI1TEVxukr@XDH;9nQ(zP(! zTld=aVcQ${(EDkc3+wMEWoIq@*?y$;(x2HIZiqjlhZ-hD&uRBN0}AcT!oDecDYIc^ za3FG*Y4f0RXcM6W#H!GtQnLz>5c;^?K(Uga2LolPV}}8}Gsw={x#FbwBaJQO$aLMwju0J$DkL14}dYTS`d|CqAhp|gIt>wIbg}02Ncq}B?Tb% z=JhBdwWxx6$IH)V`gkRu z9UsztZg(RyeEba}Buom}!9Ay&(iuXM!lor*assx1u_@K43=^NtcSsTGK2wBm%6mmz z5}RaerXl!*%6pv=m`iDRGwBmDpe z5$;DoYQWdi-*?;g9BmnK|tFQZ~)+ zA`bCeOQTZQ9{K9Kn%?Xx4!*r27v1_QPN%ZHvQ&OoI;Y3!%94a{s6rt2@yVJh4$+78!QqY!nv8CfCD}{1OR_{hJ3jPkXPXc;;nPn%{V23# z`uYQ+Z_!S+SkeXRLzVD4ak62-g7>&gBnT|SD8XXt=o`5KMS49Lk_Z!72rK|oyPyo8 z>T$H;FK^C=agmDUDpRo+lhCazrwg)ulxZ%ZAf=io4N9MI8WdNvNzv)(!LEX?#j zwsn}Etpa;y1y1v!wPu?endLBV3?Ze%ObmNo*mXPIAv}gRp2uiv6Cry?X$Qw3sopv& z(J5Xz4tZP|Xxgj8N14(~sqF9pqSceN4y}X?_M+A0bYN|2%U=CTcV#75h0}Rew`sjh zEGtQ>pfk+%PZ4TQMmJV&2gK>*$lN)t<0yI?)^Q@-Xf7V1CxU(!7gh=zUA??ILdInd zy}U)sZzozF{9gEiEVmi2uDwyeCa!(7>TH5|>3eNPh@c8xUt9#nC@sROQ(ST4W}GGn zcPeXLS^C6yZZa8C!7QWRPWX*f7VKu~_fY(-d-W4&M50s7ay;0Uj=A&+3&$*pvfV)_ zQkFY-tEFR>pUrg4N6yr^DmU8{L7Y4UvYlkF*-Wz6Oha2ti;^|8Puoti*K8-*YvxIo=0of6 zHa9YBlHC|W65B=S`#+G9k|}Z<({T&)gpKnnl9I8ApHHv1`u$dCwR$n0P}NqadNG_} zt<|e{R=cvIq@C*P!FxcV=M|7qR_Xh}6qL^=%_Y$5qKHutWexRf{|LD&_RY3l7Gn3N zysWjof=q6K$69u7ndr7pQ0W+UE&4tnOc@9h$Ml_gx8a8m2rwsWx&MF|FaaY;WtpIb zunQ>gBkuI&ejQNLclwI-(PQpE0_5pbpKBfqQO~Gd7V+qr(Rm(U=oeJ39V|%lbi#4kRXnx%M^MxQNi==CCxgxpW0-ssRoWPJeYXY;t@g^|juoV-S z;K!)|Bz2v@5Ifcch7806o)aTmTOYOuEm5F!%|2;4_uJ(3sU*CNE*POJ+7PlIl5<8c z`nWfqIjII2xn)fu7I+u2yM^Z4=M&EPm5wIE=K-tTijtU6I%P7U%5`sJFzoq}LrulR zrZCw16YdMQs&lXd>)!Qczb5Rm+?y1IG4-;~l!)6Z9j7Lc^j>Fugy2Q=_zf- z@y*U+Lv(z57atB-i4VCvWO~Lv_j^teH>A#T*d-1)p2LP5w!&c({J0T?q^=GdV#jjW zkU-j1n_KfAjUN`sVA@H)+%L`?jVF61ti$h;=bt5Lb;mWG3#A zC%s?*N4w%^Wzem)x?=tu*LwqUIi3-zlsMpTKZAodnz zM}*=ftxf8}8VaT|+L9U%TL zC;teM535ofmUaiCpGby~o?;b1JC{1|e5Th8m!PG7+xIv0=?1Yo6W46hK8RG0Ur`o# zinPG&q?qKe`ud#xjLH5^i^U!r$U!cy1{h+`GJ%|p^v|U2%%5Z z^hDEZ5B!GoJcf%#l^MWgx1n!}f~DRm5N@$^QQ@!$Hl+)YQ<57EUy|3eytw4!(x;Gy zGD~xkicDF9geTNdl~$M$5gyV{T^UtFuw(H}YbrBs2M0=$WUWutN}mSs>4Y$PJTDNE!u~$pF z?6HM7xtm*TcKd4E*|3$1(7Ua(6+ex4<>_q2Pb-x&U#Sd*$jXs>&Nf@|(X`6?XrbO+C!+_1inn3}pyI82uLR8;iF&-nURJD%*i^wjlZ`=#*t4naxbSHv#vuL( z3g#2znJp{?&fusgHd2%H)_>_o0TR}RexJJBFWc)+4Tkp7@mgWzKcb~R}bWL^nX=)bp5O9cU{#>_|n zII*~w7&7~Lg5zTBXGnOHO_LztkX@7Ds{s4$dip0&$0cHw{B@71=Yt@7pkO{L*iRyR z;?UP+j*GFce-d?_Rihx}h+U&#h5cRW-VVpM<*f@I;{O;Puu%SV%Khm=LTY)$s4fEJ z)e~q;URLR65QD7GLF#h)bMZRrK*JB5(MDjU`!(V5YT*fS5F~RK1t;Jm?re#CiYoM~ z;{4he?IPsq#CPT0!SY~|knTyM4TaIXYC{kkqO3srSn_eli^=+$F+T9v8^z4l(tz0=-Gj&5PJ6X>DrLG<;fknGV%ESrt% z?>P(<1Reo1HGEPcB`}v5F!6Rx*Cq&!)Ts)*)koAvRjegSNSM1H0zvshGDypDKp0Wd zy~qlCv%2@|)$7JU6yYv_K$N@dH1T%Jb)h7*w|g>aZhPXoQ?p=}y^d4T18- zF)O`>z{E!dKLtHeADZ0%1gw#G0K5NuOUw609830)9}TrJyg+EU zBs?LWk=?3;=7|@O4&Z4)y=g@OYfw`t>s)PhJgXAoh{IeEXHJO}yBfac zY2Kxqc!4^UW~|9OQ{7hTc`eE~Msx-Frfvqe1+e4=?lO|H3G?fDlT zy8PA`o_px>qctt!oxm?UD=(GVcgf+nzKuTt-%^fa{Lw+Mr}Ri-_#TaVjNH~oY@!62 zur_B+oru(GiIN1yAWYZ{ja^X0e+ISVqZ6o6^o~$bqDQMH3)HfUhjIf(;ZZ!TDs?}{VT1F4RLEfrcnV}D}1<}dSy5kJd`f`?c-2z z{_SJQjClK4Up=u8AIDt8Pu#=D7SZRbL-e_W1MYWOJVM|RxUEeZQb>I^ZAi0?8id~p zth|lMNqir@TC3csNohZ~XhjV8nhHT0uh1OgRDvpX09525v8R+;sQ8X6m5 zU-H5dHN*5}sZV~x9I8NGJ5{KXsgbY}DUB*yr=oD&= zC9jxicV7%&9WX~)A%#_(HFS!zhUPeHxFvDca4X`htK-I55a<+VL11>A1*vbG3PNDsCkZowtkg21D0!Bz)3Mr2`}0FqcLuG&bvu29T+X;ftPpy^K~o_P9?fS?%2xrfa&uPFR^|8ccm%`I|bNeCE=|uYP5$&)%k%rJ)%w1RDaEsuRMB)a$TKIr@ zweW#4R|^ui+10`aoK_1Tz`mS`zL5j@fJO9u#d@{CbeD0p@PVw=!sg{|f(K{9GeG*m znUFb-;Y2&*mtX|Y`tccpRcLRgl5C!86Fozd=fUbisd@#6BsG_>L8Ql00~IHgms=gt z9Q`5&0nS;P6NtQ7H3q+ev&G%KtJ>;^>%snTW24&}_zlP2W|w3ia9Sk_)`nH$2exFD z_<^lhCH{Q}Z<*tOS>BTU;-Sn{BBZ{>$(=#u2?y5#apzP#MmXlL*B!HEW+g-(Hp`ad zaBAn!G9&XF0C>XTqYyWfgegrT@s6%fJW&M<)%@Z0`&V2WE2ZvVo9f_n(NVt?J z6uFFmq{o#5iwZy41cs2oS!MC~x2oCCC#8MjsY1KqQ>kS$n|61~9Q~ZM<#W>Pc}}8; z67$S25xGJHz=pSDSucc@8AHWZXVA6E7J}$KYss+EVxH2)G^a}u06S%az&VvrxP!f( zJaHN!uxy3Ei|WGZ2=4MHBHf*0ZraY#ahCgH5O^3S^INOM8PY&n&Q=JPb((Y|cXm@o z4x$fO2$@#D1f92zY*>jAOJJ3kI39T9_hVL*D` z$aZ0Pj@h=Qh?CbKSXCp#vl7QlT{)c_cCK`~qfU*vJvPCyIHE+)G<*eGW$r|AeD;(mbKq%h>LDTS zjI~S_oO#;Y7?p<`4R7Ed*FDCaiO80d^G>~2k~M1l_5kq#aIu9FHkoO9pWaCof^gLa zC^UGEgdV879S3TX11AH;1iklcGU&~xnWeW~jVnI_;5tJfi+Q|dkQrIt1CJc^;0K9% zKlsieqYoEF;5Z)+xg54odo%$r0q`z^59gZjAhLr|6Hp1H;##+*R}MwEedCSNgQ)is z(evl4eD(?&9htpCx9lQdf7CQMvkkxP4}5lfE>a3ffAhYr`sRJ)B(T(pdjWW-DXtU0 z&dFb+XHDWQb9*;@nRLUJR_St6_rj(Z=+f&x!Y-fF?XrDiZUyp8y6!AM@Gj7p=mEPZ z+dSGJ&NDZ&{|0?t{CSetJkhE04o&O6jt$JcX9v5b{YLQ z=4Eu654}Q7n7Fs*Zg71%d>G(HkYrLwa>3hZITYQS_$uI~E}pW_Hx@Xox$GVyjWep8 zOIIT%hZ3)8HwPd#&f`fYX!5QIv*P{FsGUY{07>Pm-1zwm_6`b!&f9;*##Q7v@P6kd zEksw>j8A+!~~46AUPjUOVF2VdpD@zsJa1pl}; z=y^n<4T3Ese~xokY`%5D(F7v!X;%}7(2MaRb2PE;uXlUbZTI-fusZf0%BYn@vW>Z@ z5MnZhNrR=HGfdjFlS!L)HEB>18)A^1M$ zDG$*Puf>&eGE&_O9D`@zs+VvPyEo+`AllhQKrnIyr7f=!#cd^&#F7{@+ zi@oEz3n*x|yV$=~?gBCz!(AM(br+CuTz3I^Y^l3|jGf&D1iQNnh#t#bKn7Xv;_#;2 z1w=c$3kZhpA}r&_x{D+B?gEm^JUzkP;3^bPr&qg&w=Ad@ki z!ZCZNaLmam9CLLFP!b!baLniwj%7N9W8*pnC}_4*IIi1R%_-=0ml13X7jS|aR>}pO z(8Y6h0gy+w3!qD-6i`t*dcMQ&IC}&LcJ~Mn{V;#UwG4A<-Hka!I~#Kd2F5%ehW_?4 z+zi-Em<__sP6pv-SAzg0xhZ83a%Z%zhvc^;wjsA<_8}0p7`I2S_L`+0kjv8ATJ%nu zt{vw#r5)!sqaEjH?I^s`AMm-Qcu}fnf79m{?464UY18 zz}8%Y1Cct^;6S*f21oWM&bV65^SatNSWSq&**br+43k`KihUq}ZLtrQfw|ZRB6TSC zLEy5BeXtBbu@C#HvIrQ=m@WIFlVx9Ywd_!m!xo|5qA}E4%nbDwsZh_M>!G~2W=4E4 zOV+jeNP%MnE>-hcqtZ%|sRCt~KdWwz6atYnF^U{++7wGd!d>Z9s$nPaBIY;};*TaX zh>0W1>%qWztA5k&raWS(l5~?(zlsi3?!BB#@b$@C%`#d?S;^HakuE*GS|v?P$tYmg&__nt&wpWOyzTr z)9%whW^WpCI--ix>iw&RIPK#0$7vTg7pFb2nK%uCGvc(1WSnL&nHNna^J_?x$!5&3 zSoj7)@bio)_9rjOB+v0W^yd9kZ_=*(ekWIczpE?9`P8H<&vW#b(r!J2GI8pM1|`S-LC4E^~FwtT)|4CN-i09tS`#gnW`K>%!cyH=%uSXq^#NeX12%cG%;`ekp&6kr1fStBMpj}yt-$w{68(o${N3dlnAgN1P3LR%zmI4CDD@*aZ zqlwIOV7@HHA8pFY{ZW&$a+ZnM5S+a1*R)OC{~|!c#Qou5V>o!wxU@ppjKqCNdW)4x z>WG{%f}Z$ds+r6m3s*gTm8N|;E65ocN;(M6S(P?m>*RH>%~b9n_}L7_K1T}+u{+19 z+yNQv4{Yp2q-bmG&6h9Q`m8T%tv2$ZZ_sSJnrKeth7?jR1x;__eW^LtRbPhNSGJVf zm$#JLm@TDe-%dqJydhCjE9{6^00NRychL0B#{{8*WI65Y#91O8RD2~hjwSpoYl<%11|@3cMt==d zeA#OV7dXm?2WZ>ZoHd8(_$A!ObWOJ}sr7+gNetCi`I3de*KBLLeaSX}{gO6)jC|Ls?&$TxolQ+PX(PO#dP6GkM#d z_#l8LdrZ`k9{R{W(~%ycOeJWSLYd6E1mQPjY!m+@Ks!hET7m2^2s7V4nD`bzI-gnt zJRhF=jY|EEc8l0zgV0^_#FhTahqJ#j+31csVgapx=)>BFZ2S6~k%^A_T7+!5^NDc@ zzP>Jl;wF`ni+WSN6qb>ai%n#m!k=xUFM z5EM7nlBp1(-0mkTt}th92!2#W0-{v7+Nrj(|A^Ij=!?kg*W7hvI7}mrNcZw>G**>C zO!mpiWZ5)`jVnt-oygp?K!U(`pJw#c3fBqnEu}q%PM8w~={o+1TcPD%)q2yuBOvya zTA=Op>LT+Fl%yNolsr&Ui~h(~ibYJ{%qL9d-miP9sN=u_->MbxZKVo0vC`-3KP2a? z-B%zMzP@6I{(9Z7Mz(0y=0%G9FA{=l%_FHS1w`1rpn2pTZT^>xPgq zcRCSP?sQsbwmd0RfftQpg4sIM6V3d2U1#illzAM&c$CN{|_el|wo*d~m^fiX785re9D2O1f6 zhwZg3uoYUbWGT?h-$7fk`9{70wqgr}1h&FXmH!h8155`VW7-2lS_te7Z5fpRWj$7A zlafjtFnO+li6;IH3I~k_1Cs7_G#C&&=Nv^q^gi1wa`|5YsQVc!!2))xouF1%+)B~f zSKy%Lg7NuZu{8?6Vjd3o$^9vwhFmuSmm8;*$IY8di1vI+ymBC3yVciseF)T8!rcik zpwaUEsy^89rRL(Qywc197TiRG&;ww(Kxys2MY@i(cFOMz*ZrQi+}1ayiX4yWjB)xk z{d>sPzBp*L`=jappyzw*HM(nljZ`UXaUuL9+W%%`{&n3F(R(6>`t*oNvL`}+?>_+2 zS*a`Q-bQ~k5#18exkJcYd^~B+;x2J;khE`QYd=SLH1Z@lEbSbQDA?|s4Of-@;d)K1 zF}YKQl3u{Aps%qBs?hq%yNH68xrNmaHO&zpg?w|!z2f-E|H*`=@2toAF zp7DEV&*pk)kLsavAlw~y-EHclJ?1{zW9lQ=#*>CVnux@R=INxIr_3%`@i&keh$Pbb zm!z^ZGzdFS?Si2%{U)F`?|CEAare9t6US6ygq3^VNrzj;pT*xoURZhZL{aQy`E3-T zrxz&bi}2FZS&N7l0g`&`s->D>ISy=o6%LWg0kw!#30!VG`I2*L>&pkl-_<;Lxcm}c z(YSC$z@$({%C8!~Ht*U}2tJxQ5x;=sGfu=W=;LOsw_ia07ccp2pW#JleaTm3CIGyS zw3C=}bSvQ{o&yGRGcCf&jb7_274ac1H@O`xA*`&#Iujska{QSiOa#1?bZn@kcFOuX z8sSk~act7RCTbn{4SOB@1Jr!UsMz%S&3L8HEqRK>{Ts8{`l3F}qJvh3=5h-Nr?1l4 zPwYuqtm(jF1>dUEeuqFh3m1oyUY;~q^ow`JKLHF>&>D__as7pWvx&i~2w<(%X=y26 z2(U*5W!c&WfzVJ9t@$$D8eu@RZ_IE&)fyrxr}!03jhLhyL(9Cof4 zS9OTZK{-c+as*RdLr!o=6(SZzewhX=b3jlp#m)u7lw@W8Nol7!+%Ds8Sn*Hexn)&) zA*L=^br}>w#&G4>dMkw>*fTYhq^OdF*uS1ke?M#g`mAlD^w|BhEmCT}X*)Wz@^_*$ zH!o#mp&1hemG}vxiP9;vOMy&T$a{|a$cyHUMMV1+=|Stg>l=gaXgc&Q%-$K*l31N`Vc<18Qk8bt`3 zSU$k_{!+^ayCC+fx+JL=H_@J34$UpFQY;25<`vF!l=7*i0CQg{rsImHBy9G`RFB^3 zP;6j^rT@TV-z;OXD|zch*|pWW*AXT4mi_9m?>DOAar)}ZLdh>yFN*fO%y$HQ*K0ra z8`Hth?O+_q6P#I&$+TmXStl zeQI0{`jou}eQI0{`joCgHtjexZab0}YQ&zUxgCeqNvD<4e2P#SYBK!rxRU__oeUxb zS{XzLNE<}+#x{X;m+|&^XFJC$^^a&uZ8>!yunhXbhI{r9L16NTkgfus8CL~9Gp-7J z##IGAGqws4NOu{f3gmee__1+S;KyuKK<92bL_bETKpa!;4UA`f*bXAqTF)Q!uGboV z+q=%iR~7g^5_?ITpt3%GMOc+VHXR8U?v@#Q65(&oI#aGx0kt`~1CfrK+<}-lUT8#E zc`z^y2CYfm(?zIz6O~l=bVt)c3}0LJ>Q}leS~3no-=|EVWhzPKIDntBI3YyfOtFHN(WbN)|J`v>kzr$Y|GB-3YK&~U0#ARkr_uT9YIk6IO(*r)bOtj^`Y!VXkDig>QIUJH(I*%J2>=0_KlAmhlOcXR_8C3=K*?WTJ9@; zMpy*V<~rMz7xX9x*BdIXbz4LL0&$>d2zOnl@($h0*pRBTC%ayMM^iIxqr$M)PL2f( z`K<`NAnrdjyZwPPazDF-uDnwp)x@yQi9O5Opv&c5Bk;UtZCTRejy(vm@;T#)b$`(8 zHmte=;!p7D1C^KbQBD-^;UE$nO@>#Z{M+x=yW*uLVdUx0yo>mZ%y=o1r-=xXywng~ z^RW3!x|HwS!0#Cc7J|>32Nse(=s2(td#~%%fZ#X7N&w-iVN_~&M?r|V7M0q%z>oTS z0G~=~)Sn5=J!ftpZpzt?L-fwXj@w#Oh(3sSm`WiFuI9~m03cuUhN7~)RtT}PSsOz6 z??i4PJ#EBSvPxM%4qH$^n&QXZ_k^U5^`jAXochs-fv6uHjl1OnGXGt)uO#1jOZLr( z;sf7}Mq7TdK&gL$!>P+Jw2lbc>`F#9V++5!1us@m{5V~Kq>k6j5O$mwD-Z+mVudnN z27N(A2ELowWT1$e+4XmXKv}t%dE4?S-<|SqY^8+n)`rN)hptSr&5g_|pK@aenN>9b zDqOrjHJV&$wf&B_?u+`{eP1dci@P_*O%3~guNG?Tl^r74lq=qwR?@7>F=I8IsV=nz zjAiL6-N^nApjXsYA+RFV#3^!cWouJ#_JjKztUAOU&t9DF;IL;h5*qUVBQj`_o=}HF z`!;(1hTmz_WQFBgUkre*c#z?Nq{VwhW?5^cw%%>DR$6|e)^By{x`X;Bx-+$I_Qz}n zhaX$`=@Y3vNLrV1E}2(B#|B!G3b=p7Y9lf6QRs~FJLHfXzKe1OTUa^j_Emhtv;-ka7LEt(X0{*~_N+&<^b5V>cr%(~;#z z-zYJZr?fN(->Vx0P~?4i*lG)F7MNm@fE;u53iOU-`CkEM?2aTsWqnGHu*Z_gVfl3H zze1XxfP-a+CxTm}mqp+^_}$DB=~K%;hhpkv_1^BT*4qA6zio7M2yNcYM5KoeuF90h zfS4R{9HF1nJ9)G_(V(Qk;y`G5xEglhjQCZOXu|w!)OgpfgXrC^WB#vEKP3Kv7~h{K zLzwxb-N6zm2n8D2=Sm!tl6jR{{sm-8O>03!YKmTFR{TM|$tne8bHFX^Kv-ExU|x=a z>>SI@gz_)yf+Wc96(JMX+eMDePBpmt=>*-YuvVz7zEz2P^@+C!uG8xgod{9!tFdCk z@PUiz&ZtJiP;Gks>ay>5s=aVA(-4Pi7t?CBX5DC5gmD^JF{+AHEiX%nA-y6uLP zVY#{V;{apqhEV*tu_CJKS*z}^>OJPP8&bv<`qp%#u*R>&%D+ZRK9gw6u&3L<366oX zDf>F&)tt5{{GCWM?6tJd!=i0d#*O*%zbEE{yvh9Hb5D#)>wa%lzc7PvbLL_EcND4R zFhXqEaql02ce2Yw)Rg^H7X}W=K(Z>b^idFebZwNeRZ{*fq|T9y<||kT60J82 zVb{4SBIKfOM=XdXZ=!kitjAO!Uqe&a!J$EXr4V%EKSudA(O za^I*~Gh!u^qGBgq4!%v5KJ&ZWZTO?Ppe4heFJ;pd32}%G@n|AyP~5!z-Y{4)2J@gU zvc1Erq8)$Gt8?iiIhg#*F4hPtYYj$NRfcj->|xZpy;{S++NztC0kJrnb-b5@dAJ!5 z*bu46u^lX~v^oua1R%idrx59*_M{Ivb}z(UbaZJ5{IE-=2SPr^>paehjyhPs+dL&S zK2lV3mmf|1qLcm{r}W2eosom7)hG3JMrhK+VS$LtjXoN2QYn#>8(t9ec6++zE^y!j zYMoLP^Ienqq;6@f_30!bWqwpz_WG@Q(=PcC@u(&{2Snx`qCBom5;TZ$=O<6!Mo)HYL$FVK!whRlt=MsA^1wM5GtCzeDYm z7Yemx$bMv|AWn>@mY|lpeFn{o)HY{0l}JD7eO_~aQz<7&kl0N*1eDkP69;F3hs7x6 z(k><2>*LDyx-MG)oE06_?X_N^*Cja;zAx+YAEHiYTXS_-2~cia3GY;a1tA?QAt|q@ zIF)rr9Fj*PZAJkC<4{;w4BSYURzrq&)3-&vKOR?S{+Q4i;6FkW92iTzVn>c-aV%4B zAoY^1-sqs*7{c9WRGBYsT4laCuF8DTQe`r0m3v=I#@@M5xx|VuPdqHfKb7vE1C(i} zmeVE3=;FsxODdQ=d-t7&o_*YD{2}rg-j}846RiB{G@q!Fp}{Z9eh`?456KU@SA5fK zhYYHjvk6jPu$@ghDCa8KJ;td7D~0~Q?Op3{9JdkoNq5r4k}S!x;zyk3Y^Q1CSn>mT zs)*4vtrNSBomwqo*fLHV-AcEId-ZNlYsK*2Sri505AB~|zzAHpC6~+Pa5;SJ-pNRT z=0of~bA~^X!{Lye85WyLkVCGi1PRBRO3%lbO3%eqn*Cio^xC=f+%T5}1nc0yc7K_! z{WdXwQB=%d;9}kg_Shr2E>rVGE=h-_v$<2WlCBcD>J3P_(aL4w!N=q^Cf>`U{r(c^ zcTKQr2_>={b}yx2kvm!+-HVasLk2<@)f+v;wb+As{zRm+=Cy5{%y2I+l@n?7Ee-m& zIzBBETg_9i-m7MzcV3ZZyi!HYWjGNsm(GP`C(;4sTFu}yj)jNMT?ZNk@0mtWLG{ofS?W-e6D7{xq#4OtU{}r7xz)NU%0wzN8+WPmGba z@mZTwo5c*FD&-!ckIYwCQrYW;kX<(`dM(`zi#M`V_$~qseZvr;D&?26?}Yj17{^v1CR!@8Vep?MXL}=V5I;304G0`F2sXP-M621-WM_h+jo5giFq_yhs zvX0WE!{^4(;d4zzhes85b>uFN^HLLe!7}PsJ*^|OIOoM>a~M`x_B=|Ldq-^^3`4&Y z%~F?5zq_xB^1RghskuDsqhIt69F%I4v_Y3p#bfg6B52>SR0ncSQ{WMxO<3u zL5s4aqq-)jpO5L%Yz`E9WrC!pJi+z#)`dEuwmlj#B z&3R{X!mNZ~%~u`I2yr^I`+>Hveq-67z_K?B0u*oe6c~?9^IiZ)y$Tp4VGDMzd5Nkj z?3)LfD$GDZC%+40Sm;mJVYd%(3dpjXP!TbHJq()@B!*t)5r4|0w zPX0`g^jtbpnEMSZdERV@^0=(r?l))iDijFn-AVg1seNPjXOd}*{!Fmw`r&t|n*xNO zt{Cosu>^0x*9b|M9Ui&o*0W|KC6E0f%VzS%z_Q>iO9o^}5NQ;LB6Za0&MI zKP1iZqG+xehJ7Yvq~3;4Z2(5YKVp7W9xbEB&7jfA3mxxq8kaOAEv0!*rF`tsBKr_D zbBu;8HU2Qkj|Ea6v3CNZ%5KozX%g*4|KKviKa*FbqD7kYp8`roH>!~F2|uP)?)bsJ zUk`(h-y4O|e81Ogr(biUZt%E1>`{#v9gqKsLJDXu3tA?cA*G028ZGVi+U;Hh8mI*0 z(zZ4{0)eR}DhPBRe~g;7LL8b(QhM(z#ZZ$o(j!t2NfJXsJ^jd5ZP&7p?fF(Ke%xaU z3NV8HYh?mj(L)j}(1D=`)!LCmmcK}m&oK)(mTm<4O=Zqoq2HA1(Lsmx+Ob2P@1)r0 z>ELlafq=gSs8-#;-;yfQftM<_qlZjuDf(DnA*lZdN-wyfh9oDosF^`vMGKjo5)vLi zP#5c41oQ3u5`NoF!bP=qz!iOa1weYib+uH#7UP#;UMjX*f z7e)mA9YAv24Lu||t3@wrwd1}c4JXH4;dz^~nD0uqp%do2${=BwK?+GDUdZiqinkh% z7g4eLsAanbf&M2z_NE(jNK(^6mut4;hg{EzUI$N6 zW})B9-|P3>dYxBlM|}_PbvkUR;fO%r%-`#qZoMwmY{$Q;_Bu1Z=mk5oLJ{~d`L^Q} zg(QY48rNut4Y`RadOXRa226AW{CA2BSiwV*UuwZ4)!SPFS-&U5o?FTY{`>jG{=S>o z^GfZg@1tVR_C~2Abrv|xA?|1}LK3~fD0Mum-rfYrTG)+?bQ5RRm=E$>1dzmF5oGGN zw*m4M7QrIfY6rUqb%W}Bn7<7V-P(|;+unwUXdB?p8o|GnUzE0-L6d^+LA_(+@dc=t@-JLih9SSZp?^zxw5?+amdydV$OC zZ$a^E+B@6oKh)ZsdI!=~um}u2^CI#hC)?8c$y9$VI4yoer-jqg84~SyvjTED?=mYO zLDm!7JSz~&+#Pi*nHBnHVXMyyiq|t2@lu&Pzjq?h9vy4YW@9YhHGZEr_STPe{lrsLtFlOd&WS#@X{BowckW8(x% zzMB7IGS0Y*od-7{WN4E~Lj-df3L(|s7d$5e}u7k&NdFZUMHa5sQ#eSLVu)Kn3v`FjQI10<8w+c zu_nPxzRa5hN8q25VK;@cV_(x9ug`^TW~bdF)bt;gqKY>>=qBu=S?<@Ad~&ZQ_Ib2U zXUk|Otk)USGF6il!l+A%vEPurODie|-LR*pVTMdOb_Qcr%{09>^=)Eb)C%R0yoT2& zf8(Fbai1eh9)C@~j&t8TzfqT4vLLwtCO;mNy%CdN=YU&e^3y8W9FPeW))6jb#$W?i zWT4@RdXABg||(QO`=EQ}q)h^ad@r`F9e`zb^(m&0yb;)0U9UNnIQwnK-b_ zD%vi{-%8uWw>STXp#MM7e6rQ<5Y6ln12`@=^L-GKl3vLTJU3GAkxgdMDGnUHko~_3 z8AF9k9m<5yv#y>2g8ln+WKj_jjk2`4DZ8pp!a7kLmM6g!aZ@-{X$GS>leLMG2M*-< zUCuebW7~)s8?xP#v1h8`zzf>xH#VP&+ZTw}jniOFc4pbAo2gsCYXArAcF7%V5<)Eb zHy56jVIV}UJY<_pl2z3|j=F(Tcga(uX{piGn(??$Ad}1>nO(_DIx|@;s#NxQj|&*~ zUKTLmgAaQd?9o>P_Fi^jz!x8UFktv<@71?`pNPoFWRg`ZX?EREtI5oW7cXACc)xfr zIC*#Rt``lH-dV?edvQkw{<$Ad-+Jq91)ZB5SVAZ_}gNK!dVoJ!@D`~%@9&}ur166rykZlxl`J<*3ZebE#tz?k^s zNi&dVG7$SO53~0U{GH1r)$M|4ku?);=+V=d8^MtAe3)9jj}QmlcN3nXwv6WAjR6rE z%lGOQh}YKWDSYWa!IqD3c1(4y;*!yy_vb`*5`?gla}YZp*!+Nt)pm^F5FnQl1UWdP)(R?n6_q<2*x{a zd4OsQX4?w<0sYHFmghLgcP6(d?=0?)<{?dTamP(lcQ}E8za8jx`zAlDLErkD#hr=o zd6HMP9O++i-+fa6`we%VBGCVCfPM>~)YKx>-xQeS-T!eU)5NS1wuK@6p^MOfKi+>| zs6`f^&G1>GsNcn=Ncsf(BmMjMB#QknsBa$@%k^YT?1X=y4{!ibE$b9PKVZHyH<-)s zS?w;m12^%94KarW@WWAbiGAQpB0jG4(FyP-_uA$AHP*Av57;zIgvkcd$nO-0{P4ct^9vx#IThyKWi4G28n|McMX zt7m;7!!tjQ!YOnG8pXal2&AJ15#n%U8UhW&C`F<+ct8Umpdksqn}|s?mBRC5*ke(= z%+Hk?Hwcr<4M^krzSVIQisn<1k*X?}KWNL}+xH#EsftU$-$Q8aeRot-+tx3ggd)8J z=|u=20s>M+IuQg>x=08lK%`190wT>IpdcOTHS~^vARvN~UX>0~Ls5{9A}{LkyZ4;W z)9yR>k2l847<<54d#%}ibIvvQ+R5Ifwioa}xq&4T+A3ePTP5|*i_+)`-0tEbug?~U zmxkIBRcj`kM=1-cxU+au5)Dy1%Ig43F3_L5I34E1o!UoGf7ae&GsxAGOo5L5Rl>4v z^m1y2_DqohKT=k!p@i{^+@=bDc<0%7y=O!M?C8}tB}=95pKfR?cVw7$n{(Q&e9wzc z>7~2Z{O0|gjqKT!&jNBAdv8R;O=jL1Kdn>@+7j7wJzdDvz>{=}Ut#ABZK@9pL)rgdz!EH*Pw*i^g<{ zWeYd!m}V}mS#FgMPA-zPDVDGR>cT8wn){=87N4WVX#E4zN^5ARzceO@lN`!iG2VvR zNz^O>zdZl&FqtzE5+FH;xq54n>f>&esBt*_B9WCasE1H52zPyTPuD;I-2t}^y1Efsa3h}I0;#xL{vf`2e1A^OL|NI;lWl2g-QY3cdXWU-1=e}T z0&7Z1tX%)(I_Jui1#cq(&=BhIyb9ra_k?#%`$NSd;{>4Yb->Ljh$n1#4k?~KXnoW% zli0JhGbC_<#bdDd3ATnQSGbq zeAsfX-gbU7;X1LQLG__d!`F9zfBZ$$oS&1^fvwFlOy~Km*M$)pyME@UX)JTo3VJHk zefkfW{Kef{O=a%S3zVirSr(>U=Wi0YnVC6Y<(b$!l|i0fo4jVo`Z+SdY;o2pbAn3$ zvd^p2#dKfB%eTswr%M+X>%L5!AJKt8H?%CvdW7v?^c^Gy$Hc_H*v*J*XAPL^dkYp! zcz9#u-$Sv_`K&kx<2EYsrWOp2T?{(WpydI(a}lr-+Mu@-sOZv$mXkx&9R6 zr(b9croM|=<})q%5QZF9E4z9J{X%m^aDR<*ppO4toVccrA(yg6irOX5O=SYnoASsl zi`xt9d|S>%L;NaProoxWLA9M})yfJlRo}WIuH%1@ZIQ zxHL|@m92 zuN_L5N(_ITa~abnvRA*O(oT8arA;C+hdjYb%rK!WP@1yho-!)8$}uYS)8x~mIp01- z-@POLb5!lTsU*5ZwhmfbG$`uife(Zl!D**`_j+qQ&nBl&}U1?prIZ7bKP)991b#4FbELG~cj{K+ux zAuaF58>T1|u)J2utcOuWw?66XMiqS$o;W4(SPa^9vVblS=O%Q1h?*B}l${D*-ape>>ITddr+X zV1WV$=nh6J*JN6*T-I_Iw%teY;TB2Pr3qw0EUS6uD1!)dK*w99LSJTdPk9 znVRLa>qm702rr)&-3V$Y-W}8JgznJT8g(d9rOAAhk8GuwWD&(zd(k3~mtjlWqjGQ( zxv77tlTn|5<$%zp+d}RFURUC~+mXbvUQ?K10cCT$@?t_+?Oywg^rP$jPy3?$7oHs* zjF~U%P2ejfzG6?m$O*9xew4hM;d(pqoQa6|#5+0oduDB_*+tf&{Th}wi^_^S`p;yp z543Ds96m-36bRflSs@GBnHm$mnyKrecofOXI_(xrS(yYI}_6zOK8&yiV*EN;CUUW$!bb zB@4b51b3{wCMomgz-~99Y*aL>T`~`1Qo2>5C^f!lRN`qD)Zlp%sZ21@(Woad(JARd zNlniwbK}#qdSl__w@oq+3EwZFd1T!k4-Sh|G%`=!wVY&i?__^^A;b@BrMWULkjQ?P zg$0o^-4mAKCLm4Fvk5OhXPTw!ZRYou%>Rk>(wcJ*&0{JGDH2KjuFe}H>njm)thEgz ze9ElF*9#vWUy{|xaoA|j38J1vC0e$4e5B?Y?mx4MNT&s+UOa0pb9@! zd5@=BFm>U2^LU5H{3I59bbPa>%x7UwQeb8D!Nf->;zu06f22OIWf8x;YOn1&W0_=0eUGy7fB*A`r*^kKaw5Yv*C@{@Mb zbeGkK{NQ^kX&AyzOYxX67Un-b-jW^ncZHhxs!Gp+$a<(B;;4nElLP^^n5VvO}g3{_QqRp z-zj}$s1kCZusvh4hF>?08Q_*1Z4fbdO4|L%dkQ2H7Ff(?G}T(}bFK5>xleRMer4^A zbJ_fsB<=94Cs1q>KaD>^u+{!RF^6%C?v4&$Uvxt2A=ljINxUFsOx(?_gBg%F#d(Ho zkP&A{86HQd1d2J%`qr)xQB(WhQMk%6?xXS4g;uZ|9tCrO!?SyJQ`xmk>gKQkq6UVM|Y6c`$y};x{|F=Fa}aR5B=)Ge0KIveOg*9PS7VS=!UegIvbeB)xpr^dcSPA|clwHjM6g;}sfAfdcbSZRGFl&FUUr^`rgn9? z%)elX5(>DKP~Os9w!T8L61N&JygyMS?8%>;UnTP(S1!Qv?YiQ}d7&H|Zy1g8(NK(= zSoeDmCdj$1P8(m=gkzm}k$B(6i(IeeK6b(kZ>v_?o^)yua1b80G91u6B^G$IC-sH{ zoB0v+DCVw7Cu{$i;p{O`)XfB!7~g!Cv2BIa3lCBcL+&!Q?XQ1)?8qHfUfEQfKNSfz zZF0SdzMn~9up*Ve%51PC`dWwlyi^teYu4aeHi7z9l47j4{0fZ#9{8FLo=BcVu55C_ zczCi~hY3wt9EB;BTv7h!(kVWt9ztJO*`%HFg;f{Kk*Q@Gy}7!t(6{_7)&j!i zIzN`cKo>_(t+zn@@iqu0r8vD=51N;;?Vz5{$2FM`vGSRTVS880-z(+S z%IM_!>$Z6DJ8}E!M3Wany~;uzSXPQ=x1ulDblx0oA#l2{(>P^UH{ou#O8?Bejrvg~ z1)hXOuMCUM(i~E^W}_Nb*vUs^F zSy+A9*CSj(ZerLZZehmYk#0+?XZ||=vtx;_(|zV8HW^T&k&wgux8Z$w-do^?GQ-faFUe@GMUAMW&GialD-KX^H1Ic(B(%GDqnS37S;I2aBMe|yd z^*KbM7Z`VfUoT17u$9kNupTb^+}LkCRz6}*9-tNHN+Q#Z1ei5*} z+TD1UOHqe~!TIH}#N1n{{2WT2#83N`;kjN>7isXaEfh02RAIVRqWw1bkb?pe3qiMTwgqU-E~=F7tuWSP}I zh{#k5!`=FCco#{K#W-oju9>PT&^gwUsVC%SM9jvbm&Cq}moD5d3znN5Yga4tW7I$r z<L{WyNb<{wv*dW z?QLoxyFd?dl)77$cj`)97SXyM{5J6dZne2HnG=0B*%}-*O$EiM*k zFOTcPeiN-WycZ}Q`95Y6fhv8-DmdwhY15`%Y~kRYpE-O{EPDO9F|>OxA6{3VCZ{!m zydh78rXoEH4n-=MCZsgL6qP%(5Mh0qn7(apq15&j7kiVAz1{%xTuk5Gu$4BOrQJe1 z_2R@*kB`;Dxrc5|M!O8P#Viz8ZcQEm>Fl3uZN3)e_UJ!Th+?nQ+@ouR1T1tyR;2?U z02d_)PFZLT`NtK;rrpuJk}jp#UaNb-DBoNtE>ztvFkgv5cC%h+JgVwOykhM9I;kCP z#9KCZQkAmg8IL#G16-`y`1Ds;C=PG7ZNeLSVvEIl&vE)*4S6cpLGK`*!V>EHMdiz` z52KHRG2q4p^sf6;{-D(7_5wkbdCJXX1=X7P3dPgW9l37f)tne{0lo1PKTstVJJU-KI`)C?P-_K z?p^Hi9XtS5dkYz^`sJZ~+pE_-<$J{1^(0ZclEG zYzks|R1QlPB4m=5DqBkD+Bw+b_lp-JP-E3W;zI>*DDk!2R<;E7oJ zrulAxAXMS3_LV`f2T17g>6KGUe)q7U#NLCu3wRQBN{*{(Hetgo=e$;QmuCff@(D$V z#jlWMuIZ#qoxfQ}eQ>>ZC5rE6NEQWQz?r~$?19HSl7jI^o23oMBH`wE1Ljz+73uJ8 zf<>7n7Ci@5%bgX;T+aJo&n3Cp$}3BRWa`WI)%!1d9X)NzCa}^}?6oh&1{T}3V*#Kf z)?WFXcvP2}k!JF?ul(b#foDRoy?nvrRE_%_a{F(1h#s}nZ1us1?oQS;D6ZB{=zMC; zKHKntz7h9jfh=E}9;79UnyB7e^0ABUcjDH{3{{F9pO}qoo;iXtnI-5*t>v;RmFcvP z3RjGntTYCgyVTP-`*h1RdGf0#0eu>>Fg|+S%Z);U8_WJjWIhMg!TcRkXDWeGSi9_d=tWpx%$qlYR4t#5;$5GoJmne7E~H7P$Zpe< zCppRpDF_U;^El7^kbei$T_A>ysv%gNz{G3OADoJ3kH%c z^1%rz%|~3G)G5*V7@x>CVzt2vJibC2p1XzI*UBjgZ+u*|(I`9p?y!}L%A7+YSUW7r zkCx1=)sy3W?6hCOMg~E2$Zs{e4$4_-(2mQ3`s}~KfaIc%XY|IH}3sBS_C~t=h z?1Wp*&fs-R?1))DyT(&XLAI-d;6NWJ#tZ267m0SOC79w~zwGc~drKHPY0T_J(Iy7( zS7YXFFl7$7=V(svpYVpyv!%59Xw|nW+K1={$a1M!TgTWi;SA^jD%H9D;j*a!fpyj7 zLP$#WE&9`4OJ4w{){8Bf<0{nw9vjbC3{t(ex%QUyCKB+^5&;q~gTX+3v0 zEI+b#So%H)znx99?nE?=?+eFSwRJ`VxELWOM&4d2-Zh|nqrS~m06(rh>y0P@;><02 z_Pq0%`qd^{Zz*0E&_QQAyUi-=gDtZHW6!tXo%_)KOq>8M-Ze=-ABTj+l_7+<^VTR{ zy6{9tR@;HX$uFF$pf9ozjNw$uc^#pus@aoo3x0o(b@|@9#AO&;reDCr5_z5`gU|7} zH~8c^Gj}VnsqLwxGvi6Of~P0;tS0@FQTjeAVnI8vH#rJII$qCBe9GE>Ix&qu^lHqv zTqugcK*y`{rdZUVHaLd<>M0IotC_nPf@G$Mw3d9ZtoLmi$dNa|=j zd`zi=d)vx5f@p!#oS1nc=iS)@A}9A8UpA$d&==!eZ_Y|r+3FGQ(vM;{n<8yCYfg!( zOki6yC}O;O<#)tFjf>u_d2P>A8f9`7vrQtZ$%F`(R;L~7w%=l_<)D$45BFu)m_ozG z#%{CE1ni82VfoQK-p#?L!cmX7B2AFDx}=?NQn-b&D&iu&Tp$SUbHs$T2AD`(NX zOs=MneAW53tZbwGS$L)vt&d>uq-%S0Y~1|n#eg!)i#o{+wabygkCS(MT2t;!r>jrP zKe|F(Dss^HYO3fe_|Qe>=7P0bk9l zTh+FC#y2cLZnsERRHcrW{b1CL7ngVwXkxJIS%G}))sI>6?u@7yJZSP=fx2Z<<`N}|A;oiV}Eq;_nx0gpY>0!kg zW;#LeoMa^5dmW$XMu(Tt%YHRyUZ6O<#Ef6-QXGqXR6Pd`kBNK5c(2Qpy_V8l#2`uR zwMh9a_=fLPsnR!@p>!$LATtrEIvEE4&YtW{U2l$mq@Z=K_;59zGO zHG^5>Q1PW$V`k#}r$$*xFrxF^0sNE^3d<2DO+fGFyy3?W_U=3?AEX4glI_Wzfo`3> zQ0TdsD1#r+O_#=U7)0EOETHpC89u@ zq2x#eoPDDgZkAH#99P}N&p;=5N0(Rx;t|b@5^s`N$T$n5Ze)@k(s%05ff_p#QWvJ- z8`oWU2zKmYRoB{I=rLN{a7_%na}0P);!c`LNL@Z-pPy}e=P@3JA8f}4&uZ>oIYM8q z#^8&mlm=)AhWA3)dBdekvmMFw;U-Bb{y{HuuE9-v^|oy{N)&=>3o;~yOI0jM#2!jw zOV8gYXmk|dd~tX!)zF$};Cd?HC@xR=5rtW9GU%D$!^;Bo1GZGuor#DxvYecw8)e-C zJ-1m%n9r|bx3=GI0Q?;?J*~LsE&K(BNDt?Eo4I2=`sTW-NE_4xV$WX|I|h~kiOHu( zTklhzA3un4!#lUr8K~0Of_vcXhmt2UAl)>xP2$mwSo5Orp6ao+a5zCVM=xaE#=xF< z49`cPFMspynJ%V~C&v3%qYLY5rMmQDt9fn9YN|e@`1Mo}hQoIZ7ejnpuN0(yYGO5W z#`gMBV04Z|mG9HZ3w!S!=7&8eJ%WWFx=x-`Tze8&_2n&?LnHH1b`~wM+uIsdA*~QY zl9(*w4!FHDYf3i@HTG3LTP;_F$gBlvxj+X~{8%g`eaE^YKwT|_nJBg4JcSK9M-~>d z`joOm|7L>>e|ltI6ODo5eSzn**;Xx-PP_R9_cd;xLfF#K7sg3+wxNjvc*!LN6J~4t zP21&q{Raz~H)57)y^PfwU0y9F-JMiCmA7S4XkceV?$=;`^+jk;;3!2{@Jn`UqsNQU z*Wrw&3)KD=hj&d*)v-~X?X@Px#&wwDBhGGNE}z$mvpJjHokwlSu|TLvB`Ib=SkN|p zOs;Z%<1_S{{e%yUwPoa4oz1h}qSLh!wrYx0S8c~~H_6|=?~7f$q$fTdT7BsCriAKV z;FVF?HEG{eL#GagsnIi?IUmnoaD2I4zBu>zZ7Wm#>&Lj;p2?_UN$BM>*SOE^#$HWK zjZLE|#UhIt4!Sk?`T4z*XC0NiFAzB;xt^{OyK#M@uhaQBi6RSBX&03BMr@jt7^=|w zJOuVk=8Dr|C@OMWa24O#<9MJ_sNr)alX|AGig6b{Id%hJ%IdYkEzr!I5zf&{oiKFk zwtdf~QgJl^)6rsrvY#hSlJafiW)jOqb=#sv!S|zDt+o~n5^ZhzKAVoLJ_WsQ9IYHj zS8_XUJvTSRJ(n|=zsHOWxU{rQRblWlOn2+TSWW}}Vyk(NU|lJ6eAi;sM#$*BmYv?+ zyfchB1ah+3r{ToZ(Yl6Z0G7Do{bWIxh=^L*5n7r7#}$EGcYFU)aYSeKQC70o2qzlfs^y0Wdpi_5`Wh@#}YzNd{)?9 z$Xt1rF*_~{efdM{Vg@ZFPLw>40L`CjTlB&9{F~{*oj0!*@_6C1ta(R;8LF&B>bWAK z&FCUCF^l?Kl>Qv~C+kf+_^dhqHe-Indy*o*fg!CCo=Z1hYo~@uPCjuTy>(QyB|qyu zUED$rx!aNS;68fe6j_4*`|j?V8EF{_>1jKzR;r`dsTX!{Y+Gy`8JyKZEf$&39KxG)nh8nQ%`; zibiQAM$p`~C*vm3)@|F1JDR&jnvs}7(IX>GIrav2>BwLx?%w?5`*zHMmy!mna1A1Y zQNn;1A69*dh|VCDoRxx~nbMGzs1JDIWnPod9$7>jBg)I5{_=3Yx5Pnrb=Om(GC(%# zX<{c*UDpBu1IbbT8wcm;D8))HUn)$dq&y<5c0gezTN`c)OLCfbqRSmZ6u0#k6F>*) z1&9zCOGdV6LPY#@plzAP6s7H~(Z!(`WA~Sa(j^hKDb17eevc>1Lp2UQ-p_JcQ9eehKKHpSX<#Aua&(vLi1DU8#)t&}vbEs#>FO9>td>zsvm#i89zWK+*3f+@ zuupCCC8CtWU60M{plp;h-MojT8z}5^nD30c6_h4@CWGjJ*NURywC0J0_>@iE$w%t> zOU#VR+Yx3>88jwd)c3A&NIO_ZJx`hjESc`~;$OdhGOLWZUOapVjbD$lYzce{MATz5-p)a(cgzU%TlY!q>}5K`?m-BhMzuVW4{%@78#Lvz|fKyPV^; zcEgwS_Oi{k5Rm0KKxBkHsZ6=V!a&dz`PMR>NrQ0bF+56fs;Wnvf#jM{9_5r!h*6Z1 ztD$7Sfag8_+PaF}S2vQzPx5o*jb-BNXLcHo6{~z<+LPVNX(L z7o-Qw4e=dtPf{mmH>8uJ>n}|*DAd)>#ofvc3jI!$2Blr$7laMc6*m|GhyGd|aX~n`L4QK!)~%n0$xo5_uES5q-})9-7*Yle|qwNTlU|gj@Xk34s(NjC*Voqf`GX?IsRx_JGnUEvh;TdeiC4WZZMZy zo_{G8nf@&nm0YZBksb)OuikvilM)I=cv&I7h4&vtGZ8M{5nnCva})f1E&o8TZ%KgU zPu2H9I{!bRKA|V618y~d*&x2_Ok#<2!vz`)|F2<3_X9h3M>nLye~udtxvvX9)z?(= zSJtQhpH9BkIzM9jx7qwVl>bV41pk%b|0Natr5I=V;U~EDR`q`{{%M&1OR1kq{coqg zdJH+j@y{2Z|FB-9wsx|&ck;w7pm3xM!phC{drd>&Nd`yYYA7pQ2?BS(Wk5~?R|MzR zO5*z0bz0=d@N;6ENJre#4TF3BQxz<&EzA*akAT{`xj94ONE=+)@*mY%|8fodpBniO zGbYJz3osI#6mIUWzfK@Te=~u6E5yE6Hoq>iNPk^C0o+_*Nc;aOroLtUpB5)SU8aBW zp6{ZP{`$hE5h%Tjz2CO zzAN@Sg8)A`{|m9-xZ592|4(`RXWmQp)l|+f7nsA}_1Zs0f$BSHH{1UbeZV*R_U<;n zi|~KwKESVpU0{wjzkiWV_)}~D-{VUBjqUF`&i51lRo;J~1Cb}OHPXe^?Yk77ME0 zlsw?a()~Am@Vmf&wy6HX9%q%`SCH5R;pXypw`Kl0_CObRN2oQ@@t@y&1AL|I{9g!f z-0#p_kk;PccNPEshS~p}?f&lUTiQrR1RfsYQ(V>f%ZGp;w~LXEYv9vDzz`wGS%@%1 z6a*Lp0meaq2@qfgNC#v9ssjyxP~bdp0k{lY2krnjfuDgVU=lC`m=z2HQ-C?aTwosT zYit*`8{3B+z>Z+Yu;bVX>5vQ%@EQnc2m%^`fW{!82?(eU z0-A$>93UVk2*?Kl3W0!vs6tc`sti?yszc49=1@zh71Szf3w4A#K@*^f(Ev0hnikRz z8GsByMj&q?laMK}7uXx@iwVP^Fb^@ym`%(_%r<5hbAb7bImVn|@v&@J4lFm84$FXL z#sabA*i%@33^zs)a~5+BBY}~@$YK;R@)%u=9_BhmA7g}Z$5>+mFq#-GbQ!uF1jGjc z2|z$X5ReE2BnANiARrI~Bm)7-K|l)dBzPM94vYn_g4e+7;Cb*OcnLfMo<(P)bI|$d zLUaKLC<+3KVU4jSSTigPiv$5EvFcb2ECj2C)dK-(K|p#)9i$%80BM3Wg8&*JfF=k4 z0Rgl?06h@k8VGO&1TX*r3_$=R5I_I~0D}PMKmZ&}A}AS@97+Lo5oLffL7Ad%po~#g zC^*UzWrK1;`JjAJcTo3GL8w4fC@KtfAB94Nqax6ZXeMALFbkLs%mL;B^Fcss5YPs@ zh+P2zB|t!F5KtBbQ~&{$KtOd6Py+f8WppLx0VV9<@Ev@*Hme^xU@{SP_JmzPB?je(`SL4no{PNp*rpjd$r10Vx0v nfRD#1%8Bdzx6jGRZ+cEnPVn%5(}#z5f+s-D`F$GxS-k%Pk{|}? literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Test.Adapter.beam b/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Test.Adapter.beam new file mode 100644 index 0000000000000000000000000000000000000000..9c80362405c1c407a7f0637ea5cbfd98fcb89358 GIT binary patch literal 7376 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 H19AQZpV^*9 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Test.beam b/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Test.beam new file mode 100644 index 0000000000000000000000000000000000000000..76a69cbefd3c67c893b30e56af3c1d87d2851db9 GIT binary patch literal 29116 zcmaI72|SeF_c%UdERV_5FtSEtC;PtF*!LxC_I2!LFk?xSkX^Qtk*tM~h&Eb8MJ1sW zDN$r8qO@xH-)E@zyZ7h+{mtuj-20q+?zv~X=icYuhp~;FA_5WFu5YAgrAKwtKp>b) zfBpIuzibp192XoVXGe^bb0AWvNnT#TqyVy)SEUb?8WrptO(jwy{K(-E!C}Noe_})w z(a(oU^lu@?MUbPY6t8f9)%<{Hk{>mgOrm&)`}jqXDGC7T9ZvR-4kLO~s8P{=R0UFS zm^U#h%!d@X97v>ktvAv~n)LDtAX5E;yduJ)1HHT;-v0fQ)q7abEs^zjFbD!qUfuxWwGu)lc$3(6UgNu-ty zgk>;=8WBp|8xTzL_x6d1AcA7u9{K*!5n;iwD+xi=@GzjZ4>g*yOr!^c7x0u=jG~KJXEO*rR-c zDMaAq7@x3U;F_o~h;yTlUQ}RoI8cmk&7>%wSTA3)|K126f1d~{F$&_|Ap0Gaa(e3x zNxul;^W!VDj;YFnQ`9u)^_{^T}O*sP)DU^I5*}8WtH@I5?ldQ*!&~ijH zb=~6Y_RXgNThS2^F9n2F6fx2Z%mk`eKomKA-79faTOZ0^k{M{!6_c%Mi!EiPv!iI9Lf(VjOju8s!6`6ihqdAP|J!QAE1s|C%ws zN$7@+*cgvK=l+=;LJ`C;B5ZvH;1WEQ{Cg_s`N5%>1cm~0!Y2&kp!*Fd;T1*(VGBEO zc_TP|s9s@UbgF``mhSKF>&DK9L)HgOr(F>5pZ@=m9E1jlBQKw@2okUpnM(E}hk5&j zktsxfi2FCfi$tb+k%)n0YA_JNAI!FJA~~9>K%s8x&;m($Wx*?BB_JLth}^|Iwl#3vtQ@lfr_5 z+d$v-l?U`fAPm5aK_J*Y5C{Yo0Q|cEpaXy$5=%oca0p|Ocx}`vZiqwasQyvAL%tws zCOZ}$tu{KRic}zUqi{$9fdl-tB`|=$-UJf_C?W_ZSWqMpOz@z{C!lbE#u|@6Rx)ET zmys|F*q=WGHfkck~JX$ z32mk2gGM1d65?W0z&CN@8950kQ6L1Zk`a50fa0WJxKZq|kwsComUC!ftTPVFp@2hz zq>AA|2@x0oLlL;K3pC=LMb;a66fnFfxEESP1bCP>7=a~liqH{4%78i&7Kc|8!w1~O z2fGWwsDR;P1g1yPyD$Q$a%N!hv`NqrxEJOGI&y-JKvcdA1q5vwn282qH!KcutQ$s+ zHTbv9(V_?}0}}Z^*5Ri?>_BHR;Dv2$SOlv#BLOXrqCp%i*d%QfMi97J3M0^s5kNu$ zSUkdrk%8`PNDzz18Zn~QAGXsV9AL5oNP{oOYB*25)z_8TU(iI5%joGz$P&`b1MAybH&O@6gS?4 zfHFccg5F%mnM6@oZai8VMfZU)FeSYrLW8)0IEp|V;5-omJC0caBaVc`Ht@jO;<6Yq zoFqof8Ao7e!z#d`CIVRUu;44Mg|GV5Lo+gx)?bmBntuo3CR&myhR9{a2zoa zFm^yUc`N||45ffpN2`cJ*e-wqu^|AY6Tu=OMbJly1_^>k4Ir#?8Ab^RtMresO8+aY z%3s2&A|aJ^VYkzT)%-_TRUoW7U0Ahlj2aSB1Hv-uVlpjfyxLZq(g&* zK{s8{O}7lA19a5c&=Dt%(ZPYB#AE3WL2;I2cCI(=T=&Kuh{MMh2 zkVLU=FT)s%mSc>aMPccr0T&Y_WDI5{J$FHpbj57{QOpFMlVEDD&qy=64^6ulV zY_yHJ>41dn>Eap!rR3=1?)gVt2OzE!U0la*j3W|qB&Yysosp0eU0P>?=x=FlkIbh3Nm}=UFrd ziUR?r6^RCEz|)9KgEYa=yTQ;AWf(Fr4S8c;gT;pYzqu=Ny>-KxQAj9qJ$Gr*JsIHTsdP_Lx-k?aL|IR?(MX6&cV#rer1I}X8}l!BZY0`R8l(-Rvjft_m0@Cmbg}

    Ri< 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 D9L9Ug literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/ebin/req.app b/phoenix/_build/prod/lib/req/ebin/req.app new file mode 100644 index 0000000..aa41284 --- /dev/null +++ b/phoenix/_build/prod/lib/req/ebin/req.app @@ -0,0 +1,24 @@ +{application,req, + [{modules,['Elixir.Collectable.Req.Utils.CollectWithHash', + 'Elixir.Enumerable.Req.Response.Async', + 'Elixir.Inspect.Req.Request', + 'Elixir.Inspect.Req.Response.Async','Elixir.Req', + 'Elixir.Req.Application','Elixir.Req.ArchiveError', + 'Elixir.Req.ChecksumMismatchError', + 'Elixir.Req.DecompressError','Elixir.Req.Fields', + 'Elixir.Req.Finch','Elixir.Req.HTTPError', + 'Elixir.Req.Request','Elixir.Req.Response', + 'Elixir.Req.Response.Async','Elixir.Req.Steps', + 'Elixir.Req.Test','Elixir.Req.Test.Adapter', + 'Elixir.Req.Test.Ownership', + 'Elixir.Req.Test.OwnershipError', + 'Elixir.Req.TooManyRedirectsError', + 'Elixir.Req.TransportError','Elixir.Req.Utils', + 'Elixir.Req.Utils.CollectWithHash']}, + {optional_applications,[nimble_csv,plug,brotli,ezstd]}, + {applications,[kernel,stdlib,elixir,logger,finch,mime,jason, + nimble_csv,plug,brotli,ezstd]}, + {description,"req"}, + {registered,[]}, + {vsn,"0.5.17"}, + {mod,{'Elixir.Req.Application',[]}}]}. diff --git a/phoenix/_build/prod/lib/shooting_event_phx/.mix/compile.app_cache b/phoenix/_build/prod/lib/shooting_event_phx/.mix/compile.app_cache new file mode 100644 index 0000000000000000000000000000000000000000..38a672af3b6725c3ec61303b1b3bf37187544e23 GIT binary patch literal 9831 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/.mix/compile.elixir b/phoenix/_build/prod/lib/shooting_event_phx/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..cea39f5f0c02854d19a5b162df925a742123166f GIT binary patch literal 9527 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 Vm57Vg;@9qdo&O-v{{czD{(_g>eU<-V+N> literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/.mix/compile.lock b/phoenix/_build/prod/lib/shooting_event_phx/.mix/compile.lock new file mode 100644 index 0000000..e69de29 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/.mix/compile.protocols b/phoenix/_build/prod/lib/shooting_event_phx/.mix/compile.protocols new file mode 100644 index 0000000000000000000000000000000000000000..fe32bad999590bd362b0e1501191c286fed53763 GIT binary patch literal 27 dcmZq9VPIfjOk~brO3FMRWtG8H0^~D*2>?~v1wQ}) literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Bandit.HTTP2.Frame.Serializable.beam b/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Bandit.HTTP2.Frame.Serializable.beam new file mode 100644 index 0000000000000000000000000000000000000000..cf14cfee33fef29d38a296483e56745c541fe6f6 GIT binary patch literal 5796 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 YWOfm$GO8{0Mx}T@Q@0oJd6-7~FICAK1^@s6 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Bandit.HTTPTransport.beam b/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Bandit.HTTPTransport.beam new file mode 100644 index 0000000000000000000000000000000000000000..130935deb29b70451d05bfc9caad911e4446385d GIT binary patch literal 8812 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Bandit.WebSocket.Frame.Serializable.beam b/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Bandit.WebSocket.Frame.Serializable.beam new file mode 100644 index 0000000000000000000000000000000000000000..ed1e81a938f91c521981a9de5e1d1e1424d60e59 GIT binary patch literal 5300 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Bandit.WebSocket.Socket.beam b/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Bandit.WebSocket.Socket.beam new file mode 100644 index 0000000000000000000000000000000000000000..f17bee48c044f01a6814fe607e94a0ab93185bf2 GIT binary patch literal 5012 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 E10hBT`v3p{ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Collectable.beam b/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Collectable.beam new file mode 100644 index 0000000000000000000000000000000000000000..d34cd357be010fe289c8c67ea4f9f9008ff5d6a3 GIT binary patch literal 6420 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.DBConnection.Query.beam b/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.DBConnection.Query.beam new file mode 100644 index 0000000000000000000000000000000000000000..4382f9d8ae7b75763945829855ad2bb5098483da GIT binary patch literal 5720 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Ecto.Queryable.beam b/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Ecto.Queryable.beam new file mode 100644 index 0000000000000000000000000000000000000000..146377381e788c1aaf5f75e0341f794c14bb0480 GIT binary patch literal 5916 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Enumerable.beam b/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Enumerable.beam new file mode 100644 index 0000000000000000000000000000000000000000..aea477a401709f0ae56b53b5f6eae2e73a0e71ba GIT binary patch literal 10460 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 Nn74p;N;C-c{{RqCWAgw2 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.IEx.Info.beam b/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.IEx.Info.beam new file mode 100644 index 0000000000000000000000000000000000000000..304807a6a8f33a8ab2342d68f0de90347a711a81 GIT binary patch literal 5704 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Inspect.beam b/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Inspect.beam new file mode 100644 index 0000000000000000000000000000000000000000..d44a74bf87f7a3a2907677b03efd2018ade3e7e8 GIT binary patch literal 17264 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 W5pX>?0Pwkd{<$;Yn*xXr@&5pVxQhk= literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.JSON.Encoder.beam b/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.JSON.Encoder.beam new file mode 100644 index 0000000000000000000000000000000000000000..81285498c6bed5f26b209147df79404494c07be8 GIT binary patch literal 10680 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Jason.Encoder.beam b/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Jason.Encoder.beam new file mode 100644 index 0000000000000000000000000000000000000000..92df3c5e51f114fe56146f6fe8f3ce39708fccaa GIT binary patch literal 5940 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 Dh-a3Q literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.List.Chars.beam b/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.List.Chars.beam new file mode 100644 index 0000000000000000000000000000000000000000..87556e178fe24d0fd10ffcac65ef29c3046091ba GIT binary patch literal 5040 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 P@J>Up=m+;077q8{X(aWg literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Phoenix.Param.beam b/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.Phoenix.Param.beam new file mode 100644 index 0000000000000000000000000000000000000000..7a56c624f21e2a4bdd127dc336642b5ecedfcc1b GIT binary patch literal 4748 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.String.Chars.beam b/phoenix/_build/prod/lib/shooting_event_phx/consolidated/Elixir.String.Chars.beam new file mode 100644 index 0000000000000000000000000000000000000000..c8e012aa42b4014f81f3b7196aadfcd98a1c66cc GIT binary patch literal 5556 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.AI.Gemini.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.AI.Gemini.beam new file mode 100644 index 0000000000000000000000000000000000000000..0722c7651841114eb074ba8492adfbe6e97e0163 GIT binary patch literal 11704 zcmbt)2{@G9`|yk*&(LHT+2gTgXRO(cJ!_UwNn@D7Xv|DA!=OZEiBwdoQAt8kDwIM+ zO0S|q+FmW%qh4vFMfuJ%GkW{|uiyW>zU%tta?f+l{oMC`&b^%boO2JKC1I8*l-Vf{ zZ}%W~UW7dgg{hyJnQ4Huy&3d$I>$UbiN)g4nTg(MG$t=3Dc#)N&)k=mLTA!*$YeS* zfkh@)Qg}QLJua0;qWLiA0f7V1mduAdDe5Z6G zUt|W2LIs$9VF$3$8K5^iKp4=BMr6|X6JmBBu}yO5RA6E{FC&D@pvTij5`|VKQ`mI! zYFftc!7{i!S_&I64UL)BDJB9|qA{TPi8LmS1B_1Q#p1ahr{B)l;6$>pmCTq zMl2$M&Wxo3RX`}xnOrt-*vPEIMe-`eQ;!JqixoK>Oa`GR^Z9&o0??F%M8+&x7;O!S z&EoPvpi+3L+)6T{BZycs`L_`OiFufKk`UofCy?13urhe3{s?DC%k01U%fiMCEE6-L z*{L`Rm7EAXz^7zDie_{s2qPNRYoYJURY`zjT5mkbw^&6catreNb156&?J%q_zofYqQE1T)?lifBkx>9r zkxsuq20bDmN+`$>VDtpSL6U}HL5MV-=zzmx9C7mhGD3J0(CtFlAbCM7;Di(eY{05a zLPLbPFo|R>NzzpmK_~!VQ;9@PtryD$^cXZrvRk}9u29^h4IIgVM#?nr!*dzwVxp9 zmxh61M+kzE*~Wx4%oad+gaD&R@|_?EAbCmn3<)DiQpAvaAv{1RNWx#taB7kOFa|ia zC`mX910ybx#B9dn1rR|R&XLBK%wkZ|aHRlJgzzCKG^7S($YT^>Ff(-lG#^ZDA;4

    _Qx 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 C;vlR5 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Application.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Application.beam new file mode 100644 index 0000000000000000000000000000000000000000..24b64f15add0ab716e2866ad86b335bc5515e83f GIT binary patch literal 4052 zcmb7H30M=?7M@9hBmp!85D}Hgjw}f%7U6+miHHJ4Rs}VLWC8=p%$S9Qx+0*WRY5Hh zMa0TxUD(uG78RszM*Oa%Shd#bqf~h@2q3AXp~P-`77%sS+tvWr$dX z3l#`~E9q?INCt!mnF1k^rlqq-=Kn4iWl}^XP9x1srkhGIrBEzW1LF$e5;da8ijs82z0LLy^=ho{laM_2+7iARJ!bX-B7@GkH_?@Ba?m2UqL zDVdL0M25%_l_KlCvlumjC^Atct|-$lS|~%Y48Br@6ScofIo;eH#ef8nxWC(NuBST` zj7ty*fiC8%j*$V6+NPJ^)R3EisQy9flsak6=5PND&@xDQk4eG;=Zf+?)r+)C5FEPt_)3i zFZys8a77;uL=Qv@))tbIih`K$=R`q}X}h-M+WcGi&FQR7@*9yQ$;fL$^9>jnVx+=>fp(lat17WRrN?02179}?g;t+}#W#~O2~ zdR@ialx?$L*0gn2O^=TyD*dvFl->7g>Mzte<$k%$cZcbrLoHbg5|cchhe2m;3~lUe z_htuswtJ`z#doG`bg&B1y>;<~ayrd&ul{+Hv&N zCeQ7(o0Cdk<)TJPk7h^g_L|<1IcJVuagSWyvUZVxLko%4v<_qkFYE}*#ok~|*Eg^0 zj>xR8`y!G$z=KKbet#?DUk!UR~y&xP{5A z-R9=)6i9apiZgE?6dTPP?bBOi_f2FuqxW!OVs1wBg6Ny6=irF%YfEOirf-~cq-x)I zanB07X;1T(=dk7;Norj3P59x2=;g7juA}}B{I>L2?2WIG`gy09Hw~6M!Yd2HhN#&T z{EGq5yzZfUU-lYOQ#{&no;w|?ST{hYloziWDWX~l$A z&x`x<-!2uOHCUB6ebZU5PH_x+J}c;G=p$=+VU}~haXhVO$+^D$-r4sf^Swl(=MRK6 z`5oEc+DWRgvfP00T2NoxnaLNf+Vo#D4#+#tJzmi=(06e5xJx~*?F!w$gZIM=kGu)* zO|YHubS}Jba+zO&&H1WEJNxV(FQ%tqt2!HB->Hv$GgYhec6xE*_KvaM)twW4@3OLv zwz_;(c5P6D)?E_kRpkA=;OJ+&A_Z?AYP~i&3Ftnf*R7bBI@v-xcr%e%_iRwiwiPKa3YOOZrN)FUdnN%d}2@R-e|GJ}bdpMOIi_P~xxz*6Sv%W`k`Oy=j=migv z?uSJaY5G)O%fIf(t}<`gx&ik@<`g^#q~=oo(Q@wMD^d~E#@aM z9{9#CP;#Gt7hbpYN$812+7vfTjyGe-5e9J?}{5G7lcI&n}KD-rtiIJ<~ou_3p9qk_&UK|Q6ywQhXqR%Sjg zDJklHPQ(xM8`D||>v4U>)LSZdQQRPFUwzlIvR!@~7C(KHXwd!2DHnF6zj3~RXzu$l zQ%nrb{p8u)&lsZB-u_pqePzNEO@7+iCrS7X)$14k6?sr}lEu~tOUo04_Wgl_S%w-1rb;q-#D+I3eQ<^*a_NaG-ci_{~$~Mz|+27 zR!&nVpAVVp7>VDqj~z&eODO7I`XV(cLTfAUx!Pkot0cK1>G7sOmK!~Z9ZDFYH;69} zZ%eCIrX2rq@9J4MxAw<5zs^h%vY=My2sgd za+*uLW?KW|eJm=Z**RR*~y`(1a zTuzAEOHZ1H@S1L8qtJ*NZ>;DxbExJIH5&h&Th>ATm8wAj7c6 zaO56Eo`|6D0h)hqhKBX1N;DM+4Zz(DT%*XTX%zjO5i^o3(88c%4GmmRv zp0}5$`*fcfUhYzDmQSkZJDI14r;o=pea|thttbE3Yk+`avj{R)CIHz-!()aZ=szN# BseS+e literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Auth.SessionStore.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Auth.SessionStore.beam new file mode 100644 index 0000000000000000000000000000000000000000..ece5b51381a83a4ac70f9130ec1e8affb489b5a1 GIT binary patch literal 5660 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 RN-Ta80POt}Z#D#R{|$MfaJ&Ej literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Auth.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Auth.beam new file mode 100644 index 0000000000000000000000000000000000000000..45aff1f53a6541c3bc24152045da270cc3b29ee1 GIT binary patch literal 4788 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.AppSetting.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.AppSetting.beam new file mode 100644 index 0000000000000000000000000000000000000000..da6062454697e7128935f9c732443958555ba9a1 GIT binary patch literal 13824 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

    $29IBjefP7w1TM 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 SXF}C6*xz?J3=KWS`Tqc&>~)X; literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.EventData.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.EventData.beam new file mode 100644 index 0000000000000000000000000000000000000000..fae86d87061a3e43ad27eacdc370908348231c7a GIT binary patch literal 27444 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 a=@tC>j^RD{3eLe0!7nZ1dG~zNQ~wtsJ-N34 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Player.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Player.beam new file mode 100644 index 0000000000000000000000000000000000000000..ba602f8abf998bda8c00ae217ac34118fa127e78 GIT binary patch literal 18040 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 YZTvQfFc$bxpbZ5i_+1szpq@bZKTHCwP5=M^ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Score.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Score.beam new file mode 100644 index 0000000000000000000000000000000000000000..61f5e70ad112f34f483aee230302e82381062abd GIT binary patch literal 14816 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Settings.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.Settings.beam new file mode 100644 index 0000000000000000000000000000000000000000..d1c22f3e2498fd08438b50460a667fd1b718feb6 GIT binary patch literal 14428 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.StateService.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Domain.StateService.beam new file mode 100644 index 0000000000000000000000000000000000000000..e2a0755283a072b67a362ab487dee527a28afcbd GIT binary patch literal 5036 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 Z|67>^48|BVa4jo9;9nPFX7dpt{tsoL_j3RM literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Events.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.Events.beam new file mode 100644 index 0000000000000000000000000000000000000000..ca101201f53a79342aea3b570e5a6cedf96dd0df GIT binary patch literal 2396 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�Ut){ec)Vbzi0qZD>HqK%k8`Q-?Se2po$r z1`nnVZ74wCc!fIbFHnc}uph!P4RP2npbl}^{&3vGj}s6bL_^zC8|aW9wj0!8Uf2$B z{(v~FOQ=H}j$1g#KpfT?)FBSXwlENgFJZfu!1)a7uzXO5al&}j zfIu9^3w4OYxKx2a9QuSh#9_XLKp+lnp$>6)Q~?5Uc!UCRB_PU7T>%{BfxwR(5NROL zMiz(^5SSNYP=~lAkU2o$2Oehwf#rg81Jt3tC=d~*4(kKzFs~pG9w4kh_?SA(JBz8q zyaeVsIACT1ff&rovLrMBjx}{A=E20Ul@Ck!%qgpP6bt}nOfJ$PH|v)fr6b-pglW4z#0;gcS465 zxu&kZA&&493u_3$_cO@C`F*VoNo7YD$&h@rep)6&4bU~PA9P5>!CWIl5++X&7vERS zkVMWY=P;f7$E7sH=4TA?z+6c~JxrW1Q;@Yaq%Js^3vCow891=8hMkOe!WEq=8Ih-CcBIw0bO4b2JrJX3`pnJRR_ju@aJP3X{MLWee--`5Kf z(y8arcIr8_pZVP$CH?_`Ieq|;Fwpf!gr1$LLqiVcx+Ib?c>+`L6DyTyNZ*&Zk^aIt zMJb|T3$rveBQx~hqK zVCoR(V6J*136m!l&$Yj$qN(7)gZc3gSkOHt=4&|LdjWy-aVLHFzP2kQsm4#nl9e_1=W4y4a;r}|LBX!KA9ViiuDy6O*C<=3q< zHVc3;yhk`;|KJFtGJ-)p`(kj~$|MLdcO5_qws4UEunrwa2@e3<6OgSV4A($(S4Q{@ zF9zKozzk~mEMNr{kcKS0hjRmf5(=7|<_~w509r7&z_nu}FmU>d8EPFY0(&rs-h=9k zu~Jz9HVp);c+w~V6fc^Wiap&cBpfX2t4!>pP(t=ms08}ZsR6VI6+fE$WYYI77Ahbh zx-vBawy=r2H@LUr_1t2E!LAaC$bG%WYlJ!-J44T#1 z)Am7=@?qrjQ0M9H8y??AyoE=@R71ZsG;X@u_w>jt-|k&X^x-ekLr>;*TED!(>p|1L zY0CEX%bR^XTt#Q&*!0Ry?G2whPR)%aJ~DmUa6%$xP#Wan@IdS=c3Ww+Jf_JoW00BVO<9d9*3a9dl!_Q#3QyOm*jzK($?b4=Zw?&Rf|? z3>As*_;Anaky6jC4{n|TpCfBntyp*G42daJMXRJYZtP%ByD}`hvS7@jM~iG7G9)&h zmt0q4v~kN$zNMJvmOz^lvhl{2=XFAt4pke)WTgU2E3Lg3mLZc7SuXpV` zoK;rr>s0H%>{V}*;%P&%jdHZ!OR}+#iv&JVRCj7_!u2j+(WH7h1HTxzwO)31^s~hz zM``ap?tCgz$M#CUHq?sbs&a4hwcc3xwsxiAtoTd{FYYA%!AVEmKKt8ehH6iIjHH(j zu1zw};911A;O;=XPXBN+yN&!-uMh6dp)Ws(?UUcmRjDFuY4+UYsHV}-Xz#pPD``gs zHqvS~&Go_=U20wOA!+>83DS^+olx49H`1SpBfZ<~H{adW+thbHre3M{bu?j3N{+Y2 zTMbP|yKWBOvy4x>PTc(1Q&02KVKn;8u$up28=avTeu`K4wWV0pY|B~)KNF{nzpTl48y=@h7GbKib@UnU5{D>ISa|?Nkni9fk zBU{v}QXa=2#YY@@+L&Y^)8LR*b?Vi;7u+ImODtC3GpRd&SgE%3zJ1E*s~hQriZ)!! zMjwf-iLCGUz5urRHHAGl_uEiMBRI?W-GbPUCJLW_qMH-L>elu)PB&ZMbV=kF1Gded zvduP1R>urk)E!N>cyyBbCH9=l%;tB^t}(|rvv->deKR_|$t`s*fuLoWm2QD1XN0WH`i#M-2Isg z3-8VnPBn`UR6OtOS97!bveA564kfWwUQJp_z(Pr|ve!*@c>E??@;UB+JCTy!tfxeS z?q@IJ%YWdyI(p1tJ&Sabp>WQN{)B*?<)WvbI(tgbB-!c6R$DEWpBwmq@Z6bxBk8eb z8mrx@*t)w5+lw82TYI0}49|@sZA@udnz8HrJ$$IERgPdGqhy$J|KtismG%wqB}1ai zUW{g@at1Hqdv3GEE~pj%B-bK?(VHutx`gM&%}4lMA={4gCo72esjW%Bw|jFCTkjQ1 zCmuafwj}!*N$l@)ZueLUMci;DT@BnZTZXejI9IJP%V=?p*hIhsZJ9v1fi^S(Z%-s$!f*4CxAs z!KCJ`3=xsFN!PfG%Pknj?y80TYO<=Ibebav{LAh&$lhz-qh=S0yO~!fXuiOA<-=lH za&Zhk@32m4aoG9~2hB`JirkA2W(j0TjI424rhm&*dFe`fnWN`dajkZgHxdpeUict< zCV3yur?oTiYl`qYdAxbm%Bts`2jb@%Z{#kLYipA`vGC>I5m^=Iz!crJl_oBu+Rate zn&lm3BV}KomR#u5K3wyye0xoEMB(xcGsZsCyF1?;=eeuT@UR_xQ_?DyNO!%sr(?XZ zHbG>?sSizSmLGJyzj^x&?b-!9O)sR^t&OkqEw;k9mH8ZhyR?<7?z7aD&O^6j*4loS zZw(6Z(2km0)hGGnx`2>;ufDt2+A8g|)&omwD$erl&)Vdts>KqQY<#@4=1W%7XP#*B z8GH?5yfdD>S@m@9c`2HujONjA`@&`X}^nKu_*FAzUowe7D_AOe2QIR! z(Hb$aT-F*3Ruh0cj-r_>d zOX2!EM32 z)P{0ymTvoa+bZen>jQ_Wa~h)+cm_W#YkmCSi|zf9rqfQO;(6f-Y%{NV*IwOxhwS>% z`Fi=HFuk*jTB^1k+;#=$DC%n&Rr_%DkrjT&O?RET72_h1b+vElx_o`^CU)Pm(!1Uj zXT5CN+0W3LZK}02N?I>T`iz~-fn|piWK53Q2c{! zx%TT_5xl~hL*+1mL;kxYsM+oPi>aZt|*;7&T%lAX4YbutE0H*bDqqF*%l=8 zt~)w8x^8?WSTIC%4UUr5GX zZQp`Ivgsz{Lb7{R5>@~=vKK3VDqjQ3D>=0H8`tf+;29VV-~HR@J(n}?_eb8$4-8(h z<4V?hRg%7Mow?~vm#RzcN0J8k?-8~RtaHNgcgi2{&+NC8)AudC#QQ?2y`{h)6{ zR?Xkncy~6Z&RI486GOc#?x=U?-NAUZTofL7M!St4&~MgxHg+o5>3(a0y=KYm=-r~} zYxD~{vi&n8d`*Lf@|Mr+@J*<9?OG@nzKFP`G(>a7x-!GpseAT`Dkc=!4x}8Yr3Ig~ zekAp2J;n6!?m4+aH%15-JsQ8%mzRCgW2qCmTa^`%kneBk{aL4aYzFrm8_(6$Ti(%K zzJ~lut1}MuF;9GCr8%^%*au1d`rWNX6adymD zu1bzM*cu*Y$Tw`pzAds8m;WlZZ&S2-i^b9p<7{#5wnU!SI|Bu!rfJ>M1O$5bPi}DVh)}R^Lq% zf4qB}-Xh7E0QUYv7Mpp;ti4w~_ic90w8iw5w;dEU_!MSqJ*2YnQ|0;vc9%Zux>V2c zaN@d^tGdckTS=$Rs#~*7Y?i8S^0kXXw+mhcUz#UcZ#3uT_=WC}+;8Tt0b8XC_&3Xn zwxk|7b!l%!z3FNq_bO9R0$3=!TuE)|)+5 zIa}m}99O@)e5b^}pr$+B=Z$xDxlPaeT#MP=8}G8Fk5|!?iyH4*q>Y{qbgGw_x0d6{ z{$&@pvVHuia|Azy*3d6qIr`|i% z->=Y48aDgH5k1s4aO*bJ??yD%@d)wwJEcAGdizCG+tzoPUbt}W*{#i1+Dj95)ad5h zU%p%_mXc`o=|=2njMdZ5{VBOp$VF=X$LreZ1@+%XHYm+)5@Eec9Sc)?`>~`}Ct`JF zwS4Wm<1_Qw@2qYXvkNZTdA9w5v=eE*fI?=&omh|P!TAdB z4=j)?RAc9B^S=`Kj8wnpw&}Cb5rgH=j=Z-oa;THD;XYe^REW00RV8ha_+@Kz^PRiK zdW6#R#(2{7yW_U2xjOhser`LaaLq`wvbWW|NYM80`#mdTY=d8Nzs zu+%&3nepoCw~tS0u86bdUf|;u$-~9ANImIG>{8=H&c>#dgR%!_w6i^`AUQuxkSa~; z{HXM`V8Mwe#0Z|unY&%`&6ioc?{YDFdUeM`Hpdl5f|eiSs5}t3;Mm>F`yb0)nxC5a z&7c4DrLjIv(@=25@<&R=+5MJf7!w&)jnw@In)3bMmJ#j0>fT~AP*)RSJg(8Ryz$cX zWT`-0sk+AXN5+eL?|s==KaZW8x8}OLqU~*qoaM$P_KzFhr_PiwI(atKNAJ~PMd{B6 z&Po*UiMQAEE)CpNPgXV<#^;;QPUL)C?4y_6_)||60cw}I9|C_I|n=vzM zsw2Z>?Dnit+PdmNlX8_{-g4! zOCj-*;1_4*C6A+?xCi71Xl7MDejG-xsC+MX{M1lT?BHrE*GQkJ;*X9y9%vLCG&15A zVLeVt!f&`z!x60P-rP4+d(W_Z-r*A;v#j}zMqa9}*&|ooNIQ9XzU-T$Eg$kMGA-y! z1WmeGhfOJ_jgKx~+bHJ8S+qx*k0Dp;UT(DK0BuyJoy2Apw1;ME)FWHU>D6IboRQ_) z-Lz@VJ%5cW?$C{&2KY3QH)>P!|O0E*6gt+&e+kU_#}PF+_)Jd0>hp%rb0_cHFRg@ieo$u z=_MANK8r1A#AFi-yk_j1p=NrLmGArjy{1dy5^GeTp11;U(>u8&i<$2;-&$+BH?7|4 zp_gpmwQFq{ZhrahjNop9qIb9xALohp?1Ez_rHV~0hBy;>FLy|*XS~=T^krmMa_B}U ztH6y3t~GJi)zwETQ_o?7#8-XH848<;JIn67v*Fg!RnkQ|xnA*}HFq+-Dg_;ae)@@+1$VyOh*qifZds95CI9}zibq;@~q z>uxviEw}u0@1i{|-^&gyAFc>H*^EyRO=#8Iw`%b%U82;*4prB_sQ7(+2CLOGuO-iK zI<{YO$0DoM`+XfdbdT5;32Dp}TJ?J6!M9JMmOqs*snpIOaeXPP{1DysxLv%sBFU7d ze&2X;jln7x;=yyGn{I_}Zo4)(dUBo--xp!iu7~l54%a#zCyYg~>Ftu2vK0Te?Yd7| zo|68Zv{Fkmp#i;0`D_~hCCm<^HAIQLh#M_}w)d4Hl5Tu%9Mo^$qR{@qy?XP0{$~R_ z)(rK0E6?VxG@*M0gDnI!@LLl`R}B2t5(Z}fH=_T+CUzT>mvcvE^`Z}5n@R7KmP#HiO- zRvkR^`jcv!@y5H45)1Z$3y)Lae*y|I0ymNQHg=+ef=d6`0XCF)Mez+oaIkouQ`x3<#fwg%A zcPHM&)f-wDRER9Ny>qy)w_Un>P$FG-aeH$upTd#g!tV65XG`wK@kf>)?>S|r*_uF|Pyo!U+rvlE@q>AksLcL;UC+@;CfswZSZcrj_vW)B}Z<2N~^Z*wzNJQq&^hh z@AB=a zI+rV;;ik<@8@#z?{`~P}p3?Jt?t%G~Lu$LJJbA|#KhK4*{ zHtkJOLcIKrVp5cNkGWC`ie_6Pf~J< zqAr!QUo)dVZJ>}!noN6*^RABDr0es}%KXG-+!QiSa=>p_)wn_TSfbHAbC1um&YkwN zb~L4YQLY^j;2rBPyZ>5J!G@DZIxy8;0^4+HKPhF;p`LExUD4qtOQ@VB>B3~TUgv(x zLk{szIKcB%Oc*bv3;2-opAHyRoRQ>5+Sno&(~?m(75_8 zkUg~aY_*!#ymvH8Z^<}^`^J?+7xynF@LO=rroCC2aM;JL%yXxN?vS+4E#A}8`-9UY zXgl-!d(VB0XKapN*oPem9C#+aiBoSwcVMZ(MuBUkI9Knn z{;|xF#Dl9B6&M!DqzKn)Zf{wztSUgh`Pm8iwS^DFb2kK*Z76u4XFu?+tJ|PDcyL6Y zu_|IQgT;vOIw3~FKI|T&Q7vkrn%RtPBjZiD`MXx>ENUUD*%)FtrH?0nHX3&!k zn%8cNF}&`3M%$vdEH#DAOx=xo!0wKKnZlr2!PA{$?mORhbaXaYyC!yhbTP|+8Q=E) z6?@F+jiJ6*4=Tq`U0 zmAh`#>TB%pti}hwWP6vhuSeT>y&-!8^#zCU0#nthS>+C#gM;lV`}^GaHiiXsZwU16 zTG!BO*cr9!?E`rS0nL{&&)3{5j@I8G$>nk8e7#QfhNHAMC+){iM+M}q_m-jA;2DqH z*rm@Vdy+o!C|izpJSDRNyOAeAJbv*L!ioNKw*v$dxw;;uj=I%_Ht;DP z8g0INQ^1#hy>M>Ch~Goe;f0#V{BNna$w@A%<8^;*`)M=jU0d`y1>9CPhO7HY$&@B( z>x1nn_m2vTuSi@bb$7s}Xvmdv;y!U~Zo?R3TIZvG9d$8jd~5c9paLU8jB`0Rem@hNay zOq)`%)FZ|gJua%weiw^O8?TUr3)^4lSW!2p)N=&xI^}8bQa5~l_eLkIc}Jm)e%j?4 zv&6KM>cxkT5N`>o=LT{S_eeb#YEoo8yZ7>%p=jS6Zaf?PB?zOKh)M6wpgihHW6Mpn2TC?;?&AeHLZGO)c%ncaCqhBKP ztzYNuOmUX9Y`Ud&Q(a~M+I8(>qin)Ok=gdgk8ZHG<(ACjbh;FK|MH#%!L7G>xfDlD zRktW^zAGjAJi6H=+wz*ea+K7&kHV+qU%tGdXuN^r+o@mcd0WBBuU50`-UW*W z$SYDQgoI;lav8!`In#45KX>iOaod}EiMo8fOrp0?C~o0a>#xQ>3g#chuDr~@+GoCm z`@D_X1Gg**gS}fKTw5ZSEsPFK%V{&YJTUGzzcHFis8aQ?tH}(a+TIfHy3~1*>0Ebb zZ1-yxKE2X8=f!rhr>qN-7o8M2mTIr}ly{TNp^E)N5Blefg$WxUHX)^bPB+YZlN~fy zzNj-(cvD}>_J!+{_w2gLcQ%ryUhc5Xurc=c_p|Sc+7W#@)Bdz`e*S%W9G`oFGV$!94+60(Kc6^eeXW|A?H!MLKCwF7NsE80bm(XhXSBhw6RmR-2egK?360xd$BJC^=)&rHjHM%efg+^zPTTdTTdsf6+Op_$olKWeNXGKb{z^EBlLC4xN-c9I{FO;>`HK znkbX_KB*{^y$q{YBRYOW!Wmf2sD(64$+k5LG%MEf}dx+R4toy=tcQgC<8_JB?3)VNXRtnUq8*lXK z^GLPVsh3~r=$Occd4g9C(b+m6e3AdFRB4{|hZ?r(5$D8R&z;o=jP)%am8h+~^Ds=! z3ZIfAJ6JJi=+(oKS#zJC5>l`@E+hBKYw@$MCt9w~JEVGwC+R@FnZU}{EWa8PyEEc% zhfViN7xiT0+=H$q%6!Pad|M#(x^2~_Q&jQxsx4LWruAaaD7#8GY&dyA^}QasIPPhx zru5Umrq6e)LMsm*YrFYewv)!<>fIEuaNk(24PnoU)RG4E_oot7H4Z)OS!d~)&2Ifd zUG&T%Nu^9tsiWr`V?X9!Wqn|A#e*Jt~vF6=Zu@FHi`(v1sF$b}2*N7ipjI~V$> zHb;@6Mj^F1b?zxu6u zLx-9@YYdi7OEOn!(rfydzq)%pyS37Ifx@DVUq7YiBrM71dC1?q=gj4E?`^g=ud1hg zwax0v;G(o#-B4I>oF2VkF=@l+Rr|K9G`1BVANVA{T0^csAU$g!WlQm`L#hO)juC24 z)PVaokzMVM+(#Z<;&R5!>@F>&_$9v%I{sn1s5JHb{kx;*ZT@|+{idS0@x`@b0%MBn!^sPq^yxck)m-pfqN zS#sDYxPPiz;!QiUqiV&gzFBkm4-g(5IGmxO6-_P^8f{}q+vvorxi{^k$4iS>N8Y$gBydH&+8SVyXceiS)mF59p@#L7j!U1zUti^m4Kix(yl$s8 z|K!)mf{n*^IuI{EqZA1F?wT7NHP}{_zCL)V%u0i~Gonn``{m_rZEDv$=PxulNt&Br zm`u)JHS?;Ty5Mm3m>T1lgnnV`U{(8v2QC6d%C%?k!yTC?eFVO2K9;8vYVG-$@#%_b zYII4I)U$I(T_2va<8=yplrOj1=0e{$Y{sEpxB=5N!q^vVSv&%_tME{fSA)2syX_dR zVGH4g6l^%$eg$Bloe6)u?O4U*Wv3q-)XK43;4mUUP57R;e zz^)M#o7fxk%a?t?Z5_aV>UP4vcLIH}pvfG}Ej8h+;Ef{wzrvUi{b=|XZ@B5bF_V8J z`IWa{VgFhLtkXxpO#WvP{F_ms`!uJI2m4PrnT__Vj`O?PbYd6jA9VFU>N`K}k^TGT znx_AK-$%=A&%bM$f48~66aRsR_+kI=-`4{&Mg0rimdOBKnS)MhxNvq4KYB3L6DHuo zS!jrY4WDk3`{m1))`hbn`yx>XY{YCr$>2zm2b*^%!wJ=54_Q5!ugcR zlii&b0!mI{SqDF0S_SVZnvQq!4Mxx$nZqY{U!&Q6)uX2Ak$>H<{r5CT_-OKv^CFY~ zds)!HCU$-QbH<|INjiO8o~)^7H=w-&~rX>Hk29 zz;w{9QNCqt(9{X5Eu zK6o;{pZ``Fna{dR@BDWZlKCjj^p5^prJQ_vXL|R)qns12m__;3^?Ax&$dBC~jqd-) zrn$gRK7zz7%isC`9Yvk=^*<`>FP>lc`}Uot&Sw4PnXG?AGx6lsZ=T&JX#YfmPCR1v zn~T6P!TSfw@WYdFf8UO94E~NWFxB1vY8d?WS-mr`;(_w%-T%9dGVwh6AE>_x zSO25=V(QcMzj=P2O8o~aa;m%kQDy${qJiIBn?G>>f$IFh-~XsSC*IBQo2zny_7BwJ zP6{8$HQmLIWcI>z^Rr~Kw_@tyb&RM-!%c=^o* z`GNcI$^tg2{O3Q+{E~y&1^#Z;nGO736>2c^D+A~E|LuWh`_-E7U;pXHx^PZ9_)j<# z)cS`wlww zO?@xXA9nZW?|jx_EWkT~z|W!ZJ$@4(I#7`J-SJBDVCGE!S|5x9*u((r;k#PlJM?g~ LzG2AlztH?2;PVN9 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhx.beam new file mode 100644 index 0000000000000000000000000000000000000000..c12986f937ef4ea0b6ca52ddd6d5481d1a128206 GIT binary patch literal 1428 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Endpoint.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Endpoint.beam new file mode 100644 index 0000000000000000000000000000000000000000..0e65b4f0e58d1163e8e4a10ef29e791dd11447fa GIT binary patch literal 20336 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 M5JC??!`uk+Psktni~s-t literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.EventsController.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.EventsController.beam new file mode 100644 index 0000000000000000000000000000000000000000..6d3d48e8949081b47eb83d1645977c85056cac41 GIT binary patch literal 9388 zcmc&)2V7H0w@*lb5C{Z9uNQ*!5~@-SNWelD8=@g37ZOM_2?S6CWW|CgU|~TNEZA95 z!HSBkDB`N9s0gwGt_q66+E-NG+$8Ak_wDX`-}_$4?{{)%&Ybz5Gc#w(nR`Q{V%<)pY$pok#JoGB<2CVhN-{4~yy#^q#kL@u-00)d3XPoZVNd`UDra~_=JB1?;>3HTC` zfXjtNd2~95pDdu$YZwxVh?A5qfyF|mfG6Z|;Tje!6v0e}1ZLI4nL>d`BBt|LUM0!t ze5QmW;ENM^45mmRrT}IlPryp&!ii#uD4i*x@HyN>Sj1)UQ$|x@30+<&(}Xjk(}ipS z%;#j%Ghh)XIg2h5AX@2koSDM#XnDEIT%?=>vtnfeHS~!J^hActfM{4G5{QIC5hnu} zISR{~O$U1ELWWq3Bk~0xA%gj0x(Mb8BrqgM>zmLmN5EPAgUW9`;}Xpg0z^JsLZ^d1 zV6y4-#3TkQ4bH;p%PT{60?+~xhs8+Z!jQW?Fi_rn&=leXE;l{J1%UDsfh7!{n95{u zxg9)MlmgQgc2hZgj-;L|5D1a#FoPE@mVoBqND7GAU|jeBgv}6%OC$nB2;`BTMjlBV zK0}m60jSYTb~-<8R8cDgK*Vu)urOW1r1J$*A*h)SIvr;+(F4q{PCyqbnu;@;Fk3MK z-@2m@0MYrdl+I;jf#FDGGq}Jns9?C^XcnB5p3x7SPxS6TOcKQm zDG{e9iJ4$R!1cd(UR`GnAMpv6^TfPyb#q3cP}2k~7===SK#~Xu`5gsB1*Cx{R-lx0 ztcYmH53|_-r{lgdcx7yQ5-ggtBE4+oPTEl~G=M9q=Db4MTxPA~lQ%9zv=T z_|KzaNT4thLZM4kh=i%=8U*qc5nT_8D~ORqBDxvj;B_E$hXxfoWB_4xsTgav=i>?@ z79tpMJawofbYH3`m8450dpZ*I=3$65_uqFMu3 zRS2pk=wcweK`@4h6r*v(DuOn4J3)IM7O7(>ucL#;X;blrBq|mot3vui6&&*bCGcAy(>ofaWiOC}^DVH*+iya{$XkW(WifF{KbpNCct~qLQ$? zNl15)Xe1>PEes+7+-RUj86r3n(Ks_%72p6kbD+Yaf&yAX202IrBFap}=%R6!282nN zYJxSe#Ts-sR?mxI1#HCx5Xfkp6-XeG6;xGXA{s|NqKqQuk$^AZZBcnjC^cie9h9ep z!Q0F7IO8CyE*J`-55WQB3kV9vph$isf&=I<62TsCK(IsOtPKg4Xxt=Yf~8R;q+b!O zipoo^`J+}-%L%QHK&#_dt&YFfYKORzGLe9E zpgoY+fk2lyR8VJP&^X76MC9Ql^JEtw;H*KEcaRbZ@kZc9*eZet7<>=;V47hZK^AYm zo!}yONH@T6!QkDgIwUII19U;X6M=$hp@vb&)G(?CH7uH>N^K4xfN^x8h9x2%i!@Lb z>X1RZ18Dbe(C#v5*Kg3Se+Mo63hhc&nn1=vcVx(J0NL#uvYQN<@(r2tcgT4NG8#t# z*6I*Jce#PYY9dON*e4qij6t(}*e9up@OBiLAE**XsbM8#D&C)jqu_`rG|v4mDwV5c z{&gjfKd)q`rI!8Il{_niz`+B+_<6}399fFOYQO;0lPdC5DPXM#YX-RvQbmb8*9UT= zq>37O4o3u8oHnVVUY1vDBULo3LO2~NMz^8^I4KoR1=9;hQYGTR%m&`-E%(;RXq>mq zTl-|*I{A;@YPaT3Ckd#ayP61mO9-H<2|mb5P%)~C!s$5@reMIrhn0IPn5|Q$1K;$i z=tCa9G8d(RZuLW!Wg<==jq{iDfMme8)fyKl9_kb2Ld&NCq%}|5bWUwfCzvz0Vx4O_IPbTXh3>^^Z_A!BS6N0lmQ{~ zBtVFaIUq|wh|DBFHh?Dh4hp^_csc<>en=WQRvjs)n!G=ntq zL*!!%xZq!ztt9>Hh=PFz#VYdY!%zZgEOPvor;t;(yd0dQ!AX*#lnU_l3wYq47@xdz zJ2!$hXEe!k-SDa1Ie-^Z0P5@f^Wj{xMQ)G6=EKP<~uak}EhW%OW+p zY+V5HQ6^mqC%J<8sR+}=uCfv_{Ts^#&Xi)2vnT^C#qg3DY|Ou8iS+N{00uHJwlYJ} zQgwz<$mM|ZGgwBXI{$1c5Dk^}8uh;ta6--%UbVzvV$ST?G%p<+vTTtGOj*f;LKz&*{~A?QW6n^FHRPS5U(f6$_cVUXN98yHc`gLr@^q$nZX4c%Qqen zQtU5)hm*-E@dY5Qur1S>!DPZ*=cM%HWDv{qQ^EyIWX;H z*^CU1AYCMrlB!Pxw_vMGO+`(c!A}OY2W5B|Ag>Cdc`mTCbhBmv4`K zDq>(06HNXz*EwRK)0M?x@EOURWY^h(WQi2i`nn=G%jUhSV%c&1Hx`T3kfan22uHmO zqERS%N@mrIgdy>R<9hdg?p|b8I`FZ*e{*Wev%6)fQk(S6of|K{^}M}%|K*IH4Ti%y zXRK*D8d^b>;a|>wS)km^4AN$re?_#9hpAi&?h>HX3TCp-1;$8~g7qpwva2|sSq zDA}=%qe)%AJ)`Jc z%HxRmZf`rSF2;y$*Jy}?$(jz|e^_Yyhq_Vv#nm~D`>74q>%bqh2GTSuWVehk$GWVCOX1p|6@bVY( zg#%hcqYGF+(zYns91v`aF0g+L@i_DM*YbMa=M^NF?87;<-MspJ!|r0jmYegptZ6#( z#ohR-d+Frk=hj_18Xm8A=zRI85r4MENpHi3=%}fq*Lmw%e&)Wfl^*!un&MJgx02Sn z4MJF}xuTvH)uz!atG~Q5WuKZojBQj6H}qsIzF`qXJgQZ*W1H2N?5D%1NSn4PhGVzw zTXoVd&D^Sgw}1R(N^LKD7V(_LnV73B*0&#R*|e{%=wf!RmMZLLy6JpONzUGi)f)a9 zo(5CLUu}qbyX@7-v?hnNCrcK4Jl8$yTsW*;{OMeCRBN`yQ?FaE&#Kj&c4R-=5=q`! zG)QqcEeSckvfa;ZmrdXmuh!$6GUih#J!RKfXKQ~fjc}b*mv_eM&eVJM*tEI%tV8-GR+NB?!SPK2(#xKWQY914Q zh+VmU*2m7tD$)gyTxx4m8w3%@7_X?^**7W(i zDj!cKM}`e?B2#Q>iQYFK?RfGNd8|}RH9_;~j3@oiON#tQ7OtMv^6S=DeO(>Qt52F= zZ98n_IqHtd_g|~WS~YyH&|CSOp7jO%(3EI#sb@_1$FKtRu401Y=RNpjy~*b@AHEIV zukyOoRroyVernEg-J;uVcE{IdCCoolZr$m=Y3Yoei@MBCUf)r4bbW8NrMl1XF7Le2 z6>Qy%?;c#;T){nJ+8vBF9IaZu=UMH`Ik)|i3L}&+qsRMbclb1@O4E+E7Ag*#W zTED>J^Q$zP$}nx-%1cdghly^xhee&`L9J_j?Fw(%+}Bt*rhOyXv^mWuD3Z9^d2Y*| zX8(;xOPo;&dSiu38vg1}HI9au1zwn=WitDCS5;3^;Z#?Rgi_ccd%>KK=a?OzZnv#l zYHPM7$GF_A@#jN2pJJo-&p5p678-?jiB1`7Z%w)Kc=DX-VfjmoJ<}vr7Z2=8S#fO7 z(u==VU-R95C?`GN=VHjyg->+d{n|K3e)eQ6;kTJhJuDc`!tr`K1`Q}?GY-0HqbXlXtEqy?+l%wwfyr;En4 z$(TlU&tpe2_ib(s&0q9o;F{9R7l~1u5BYFita4Hbo)Me#H@ol*<2`N#tuJ`GaPiE+ zTRq&FTi391rX30OxaoM;aA?;twWAfi^LQsLU#ch0j@+Mv{_U5n0%+JU@zc!m6VFdH z8=Q;kFnZh)?Hb%vx++Zb)w0XR7h<^YqCz_;q24)?ustK$4eeOY-qm+2MqU_wUjKQy z|B5Z{DQ>yj66k_E`o3p}b1Slk0*tQJOa0@I|Mb>p_r}V|MVbfdr@LI+Gr06x!;wd) zb~OGNY8sqNUB6NzzB62JX#c3irr1dR*}3)28Fe8MO7VUKw$~~zEqLR?ILWpKXKw47 zXL$ui59_Mdl50QQS|_y*vmBbE5&N3jn_0I6Lx>#p3bkh6|M1HmQ`r|dGfesJo+4HUq z-!6Z7)8IMp@ikm~RMqt9j_i;8xwn(7+XI$Z-Rh0Hyw&(J`RFno+sF@7;{2AB{jw={ zAmq^d@)dejXZEA$FD_o`?YdMH5w>aIV6FL-D>vEw`J{@M2b={zlk7&Ux9uBr+ER7l zdeg(-z%BuQEZ<-!I^c>8xgr@n7yauoT?b)Dt$;9WH7WOKPDDG`S|j!J&8Sz6hMvZ* zbJ{ulHGQ+4ZrR@2k^FsB&p=9p82$RSQ_JY-M~#iup=GbzBCfb!!Q@}&C#3bZU_Wfh z0B$;|cG$qQoAf+DJ!i^NrP7bCX;C-!exA)*IElBcvZwIVrbh+e;_#c2JB=*+Gn^ue`P zijMjxq?WYBBza5?X?ruzIb_&X->N%SWpnVw<$I)auA8ilTWL9P;;M$W)v=w#UxoQZ z%Uhi|ZLQjA&dZG(?iU-s*$SQZFK{ysH{&YZI}sy!ANo_tVKe%N(Z?$i*ttiXue9F1 zwa%dX)6F`G&>8jHd)H7(CW&p>a?SRhbo9V?yRP1=jDOtOucxut*No$QD8b8T>}JVN z%R`R2-*ifi5~JVL@2AIHEq=Z;{mCiXSY_F-XBU*Xd5Vu6iy--UV7Xy_#r&U3>YG%4 zApZ7-Ki9Ica+lL_D}BoLTW4K<%!$A<=I59czV81X-_ORMVWqtpK9YGk$WQrU%uZ>J zWx!c8DZl?h;3>Qdxpzj_x`4d~r(;ETh(@?OZJC_@jfjMSJG{aLKXU z;$3B#(en6Chc(}s9iR1f*{LPi$Mlm= zC|g}EKJlqA-^!FZw6d_cw)t~#!uO%8!gnRE+tU@K?A`Xk;31j(d3ow?=poUEBuu`;C6#C!SGXqRfI zYN}vo=tBpZD*HR5${z}99P)v|gpY7iR?YFQYH7op7aJ(HvQHoP0Uob$o6jW4XKS+MF$^ zLsQq~7jBwdHEktj{u=a|fyrGeODi-Ic*#LG zq$SVml>IW+78auI=m&5hgOnizd+8Wr+x_I*Ifus1(e9XTg3tY!-oKh+py$x>ZeVeA(Is2s zwcTC9jvIlET5D~$8*kyAVGlrBRW)KtA^(9hDa&E|vGj_p)@61EPfe|V8S&V@Y+Bsz zwQh4`(+e9ukIsDb{ZBzQ?}#14)+32S;k&O&S{rA>(_DgM9TpeQD65&(Mm%(O)hvfu zqeX+MuV;;_w|6uU=GmH%xZRccU2jl14|b!~v%Bq;Zsxo(@Toa4Zjs*B@&-iA0;U)Q zTPaBVfCPGJ zm5-@%W8z~yR+dRaMtk#jVrXf1V^;ZFon$+u6 zyV0E&^ZHY9>Ye$Xn}P?QlJ!p=3z*rN=q45)G#TDe8*QJNf9__-b&Kck!s;SwkB0Uw z>esn+?9c}9s^P1p?U2TXmPwQ*;$~qe^jY_rIe^ zfy!eD<(+|%sxY|%G0Z{=Or^>KDIXTedqavvLU=`5Rq_5_kyR0c!QsJQbKo6*x>%7@ zM_wfh!TWQ@R{>?&-M^w7%NB?yU{&NF3MfkO-@Yl3+lggJ1UzK;z{`Aay@L$j*XyCL zuLM%1D)MVK1&S(z#SntwoX9c-f;0|1VV#BuUXl)rCE#NT30one1zw$lR}FOVxdT0k zA^zGd9xP!CSQ9wlD+^8v|0@na5oIBtT!0T96e4N}rtC&b!B9^Uu>L_t9q3oQzW-WH z{=o*FBUDt=kYmd~dYFJh>ittwz^4FzcnYeTQd)R+-?xdo^!Tm6B5#*k0;)mS5%kJ29v@O;2)C|=u)GTB2OLrW( h(EqEN_P=!>jY7rAZyJ&JB*?o3jMg}~$D^W9{{bGz_oe^< literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.FrontendController.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.FrontendController.beam new file mode 100644 index 0000000000000000000000000000000000000000..e882a2bff2c83b61a484d9f2e715d9f5157e6c07 GIT binary patch literal 9588 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Plugs.AdminOnly.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Plugs.AdminOnly.beam new file mode 100644 index 0000000000000000000000000000000000000000..c2fafdc84cfdb46ec3f722d4f51c25f13913c2d4 GIT binary patch literal 2592 zcmb7GdsGuw8lNE%0)mX;B`A_oUB!hEQ1C&;;U!Q(A`h{OhDkCZ1IbLBnUJ8eD=Fe^es7ztXOpr$C6Ak!i;agvp)jmfxN zEY;}K7;%VFOOSD-CTpWiMvy8>CM&^MmL}wS7H4z{N~>(GCjyItc!e$kp?_XzUc6q8(@C53d-4uP{5b%YpiMjn z7)6Dkm7)j0}?F*;>{OJID*od6OVJkH@K3NjL~5RQZ|;bv`j}+3J|%$T18V@ zK-0Lv9*p8TK*MzyASM6;q!J|~v|LW71HYCGrKc5m2DHXEi2-Z+DhZ6lRD{Ymfl{#s zFw2)2t0g`-S4@0$?{dpmL&*Ov$;^^Wr#8wAxZGFART|%SxlDmlBgT#CP`Ese0I$g| zR|-Mag~s9^mM@`hp-7d(T;i5h-uTd2Gef&KwTIVxIwh7KoF_dN+EpF+a^8)fkg4|>O}>&RH_T6;oHwTj^;;B+&Q?mG3jLPwfQg6L9e;+B-5F-4R7bp zHv|O*ecPdEbq&7mz9Q#9V&pmghCe2`*^$CZ_vA+>tY;by#57z|>wKQoxTh@kN|qHC zmwGVPUc;~aMpPF&u*)X7-xpiwF37xUYpeaa&(>zqCGWP9A$I2Qlci2y9TzPrgPYX* zoIsaE7lEy2@)>ClT(xV^1Cuce(!LTBohMqpz*BoANS{ zSrI@uo!h+fSR{RSRWDj`ucTnp9l`pVsD(=BzO&caLrZ7$>?$8|;eT8?U6L1^oh6F> z>rH<_6TfNIb8NpUtFNbJviIyR+4b7?hkxHc=#kPVzWC_4x7|p~#kx3oeZ!I0r!G8f zc3xH<@WQ6EY5CE|F83F_p11e**;%hvPl`bURywwn|K8fW{GOe@s$%t%q0MmPhMdUS zVHb%_Pt(FvJvr`fVKMnNN9?4Jwg=oLAC_hhJe0eS+%KrK+BS43zG}geZOvPZ-$-}V zFBtvOO?GzbhO+p@i?Hvv$3~syJ%;cSATLb4*AC@1lz5nLz>4WW^StiG#+M-RhniTTx z+?3dTJ)Fr#P;8Dt%M3__Fhy^(W>;3|~6ftBANmsL@uh zpO!yb^D{&S-NjoaPvu0 zg4nyxb$?>ZfHnVFdFulr&Sk&_>3A#$*&I$O7+?muynwTe#ra>fE!`|ZB63#eoZLTT z9bC2jZ$m!K$wfI6IlYdn=S6;I=`yG~2U^MeiL?a~(w^_LyL zZyxMlsJS+9sM+83HFe`7qY{E5jA0pI?@w|;C7OtvuP!o$8dqfCv@FxlT$2q}V;7LI z(hf$B758^Ck0H_kHxAroz_kN71Lf8{bZoXVi^Q~q!oX*7TKgd`{ez_XH~)_Ry%7At y`5z?HW56u~gt!FY{bK_<+`knT<`lF&9Kay)|5sR{#4H`>lk>y<17Z772>KNR?V&^f literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Plugs.CORS.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Plugs.CORS.beam new file mode 100644 index 0000000000000000000000000000000000000000..dd21d9503b3c3bff1b8905153a9e2cb0f272f95e GIT binary patch literal 2836 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Telemetry.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.Telemetry.beam new file mode 100644 index 0000000000000000000000000000000000000000..ff7139ab721d5bf5c85b952ca9b1cafdc2f2169c GIT binary patch literal 6300 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 WUjQ8sck57?1Ce)ubep#{+W!ETJ*xiz literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.beam b/phoenix/_build/prod/lib/shooting_event_phx/ebin/Elixir.ShootingEventPhxWeb.beam new file mode 100644 index 0000000000000000000000000000000000000000..def78c2efc77dff48c0de95be43a6aaef9423ab0 GIT binary patch literal 10004 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 L?}%*BNh19pbWuh6 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/shooting_event_phx/ebin/shooting_event_phx.app b/phoenix/_build/prod/lib/shooting_event_phx/ebin/shooting_event_phx.app new file mode 100644 index 0000000..8566fcd --- /dev/null +++ b/phoenix/_build/prod/lib/shooting_event_phx/ebin/shooting_event_phx.app @@ -0,0 +1,46 @@ +{application,shooting_event_phx, + [{modules, + ['Elixir.ShootingEventPhx','Elixir.ShootingEventPhx.AI.Gemini', + 'Elixir.ShootingEventPhx.Application', + 'Elixir.ShootingEventPhx.Auth', + 'Elixir.ShootingEventPhx.Auth.SessionStore', + 'Elixir.ShootingEventPhx.Domain.AppSetting', + 'Elixir.ShootingEventPhx.Domain.Derived', + 'Elixir.ShootingEventPhx.Domain.EventData', + 'Elixir.ShootingEventPhx.Domain.Player', + 'Elixir.ShootingEventPhx.Domain.Score', + 'Elixir.ShootingEventPhx.Domain.ScoreAttachment', + 'Elixir.ShootingEventPhx.Domain.Settings', + 'Elixir.ShootingEventPhx.Domain.Stages', + 'Elixir.ShootingEventPhx.Domain.StateService', + 'Elixir.ShootingEventPhx.Events','Elixir.ShootingEventPhx.Repo', + 'Elixir.ShootingEventPhxWeb', + 'Elixir.ShootingEventPhxWeb.ApiController', + 'Elixir.ShootingEventPhxWeb.Endpoint', + 'Elixir.ShootingEventPhxWeb.ErrorJSON', + 'Elixir.ShootingEventPhxWeb.EventsController', + 'Elixir.ShootingEventPhxWeb.FrontendController', + 'Elixir.ShootingEventPhxWeb.Plugs.AdminOnly', + 'Elixir.ShootingEventPhxWeb.Plugs.CORS', + 'Elixir.ShootingEventPhxWeb.Router', + 'Elixir.ShootingEventPhxWeb.Telemetry']}, + {compile_env, + [{shooting_event_phx, + ['Elixir.ShootingEventPhxWeb.Endpoint',code_reloader], + error}, + {shooting_event_phx, + ['Elixir.ShootingEventPhxWeb.Endpoint',debug_errors], + error}, + {shooting_event_phx, + ['Elixir.ShootingEventPhxWeb.Endpoint',force_ssl], + {ok,[{rewrite_on,[x_forwarded_proto]}, + {exclude,[{hosts,[<<"localhost">>,<<"127.0.0.1">>]}]}]}}]}, + {optional_applications,[]}, + {applications, + [kernel,stdlib,elixir,logger,runtime_tools,phoenix,phoenix_ecto, + ecto_sql,ecto_sqlite3,telemetry_metrics,telemetry_poller,jason,req, + dns_cluster,bandit]}, + {description,"shooting_event_phx"}, + {registered,[]}, + {vsn,"0.1.0"}, + {mod,{'Elixir.ShootingEventPhx.Application',[]}}]}. diff --git a/phoenix/_build/prod/lib/shooting_event_phx/priv b/phoenix/_build/prod/lib/shooting_event_phx/priv new file mode 120000 index 0000000..d100101 --- /dev/null +++ b/phoenix/_build/prod/lib/shooting_event_phx/priv @@ -0,0 +1 @@ +../../../../priv \ No newline at end of file diff --git a/phoenix/_build/prod/lib/telemetry/.mix/compile.fetch b/phoenix/_build/prod/lib/telemetry/.mix/compile.fetch new file mode 100644 index 0000000..e69de29 diff --git a/phoenix/_build/prod/lib/telemetry/ebin/telemetry.app b/phoenix/_build/prod/lib/telemetry/ebin/telemetry.app new file mode 100644 index 0000000..b09b016 --- /dev/null +++ b/phoenix/_build/prod/lib/telemetry/ebin/telemetry.app @@ -0,0 +1,15 @@ +{application,telemetry, + [{description,"Dynamic dispatching library for metrics and instrumentations"}, + {vsn,"1.4.1"}, + {registered,[]}, + {mod,{telemetry_app,[]}}, + {applications,[kernel,stdlib]}, + {env,[]}, + {modules,[telemetry,telemetry_app,telemetry_ets, + telemetry_handler_table,telemetry_pt,telemetry_sup, + telemetry_test]}, + {licenses,["Apache-2.0"]}, + {links,[{"GitHub", + "https://github.com/beam-telemetry/telemetry"}]}, + {doc,"doc"}, + {include_files,["mix.exs"]}]}. diff --git a/phoenix/_build/prod/lib/telemetry/ebin/telemetry.beam b/phoenix/_build/prod/lib/telemetry/ebin/telemetry.beam new file mode 100644 index 0000000000000000000000000000000000000000..57bcd3ce0b7a7c46b834b54e3e7bd3fb50d5131c GIT binary patch literal 14660 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 D=8}-W literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/telemetry/ebin/telemetry_app.beam b/phoenix/_build/prod/lib/telemetry/ebin/telemetry_app.beam new file mode 100644 index 0000000000000000000000000000000000000000..cf4d11513a4c5fb1ae0ef03d80749412f324bd2c GIT binary patch literal 1476 zcmZ?s4>Dw6VBO>7>gelO5^BM~z!3BQ|Nrk7N>X!Db5l!-D&rFi3Id8t5{pWZ#EMG` z7J$X#b29U?9g0ix3l#FRH{|B0l;)(yXXd5lC!`kTB<7`mNKY+^M-q0!BFar$5YM5ZyH?<@Y$kuJn0g{XvOyvTpd5K9msVVVksfi_} zMXAMLiE^&o#LA@9_|%GmqO2^SQlI=}kQ>47ax5t+0H6yVsGrzP5VmLQ2nsPFe6H7Al^MIy1d*-D99kT&! z9y3rqds%8xF;Fg>f!R{e03?uK08$Hf8*4dNN@`MRIymOaCG+y*iwhFV^Wu~9a|<$a zQj6jXit>|Fi;IEU7&EgOeDy<%fu`xFWG3b%re&t-2j{1ilqVLY>KA9^=a*#WrR%1a zrRJ6B7i8q8=4Dps$0wC$=A`HYO-a$u$xPCRCocWsqGYI{fz&fJGcP%(G$j>kuqV|F z28BCYF)+xJQ?nUDNHsPkwV)W)=LjAslj#9-OqNShdL}U5<~9ca6K!9`oVCHe`L_*t zw#pvQomJ{^JGkCO{f+vY9f$dxcW-t$U83VYjiuJ*?SA=GeecP0*+lkv)b#iFi`cHY zl-r(rr*LKUVgC5bvQ|eIem&U85i^6Y-AmN9(DX_sv!cb#V-AKI3w=uUMdyA$%KiK4 z#mZ}*7cQKhXFJZWaovo>9CaG$?CY5ob%)D;}Oxvk5VUr3)7y=?8}#b$S+J!Y9@ZQ5ee z7oE;hH9ybqxBJYccf{@gmCvk@UiwNxv&`q@x0?0;I{y8!2wd6P^>hD>*8TM}KKzho vy7pjHrcK!J);A_7*chL8*-5R#Y#!cjy( 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 Qg5yvInEsthWeS7%FThV*t^fc4 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/telemetry/ebin/telemetry_pt.beam b/phoenix/_build/prod/lib/telemetry/ebin/telemetry_pt.beam new file mode 100644 index 0000000000000000000000000000000000000000..6e90ba2bc8d5f6befd5f6ce4b7bb6914097c6a37 GIT binary patch literal 4152 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 GkiP*E`2$A) literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/telemetry/ebin/telemetry_test.beam b/phoenix/_build/prod/lib/telemetry/ebin/telemetry_test.beam new file mode 100644 index 0000000000000000000000000000000000000000..35da836025a1b9ee76f2cad1cc46c2e3fe250c6b GIT binary patch literal 3364 zcmcImc|4Ts7oRcqC1Y?S6%Aul7=>)55t8g%$jvm%ixD%^EQW|_;ie)aHPT|q-q?zg zt)lE%A|m^8(+w%g62EucZohl~{Cz(6_k7;(Jm;L}obP$w_dN5y=b(f0E(k6=8dH|l{ z%L&Av0C04`heHB=aWpbX2UOyIQWX9O4#ZPJYW|GL7ZAhJ+LE<^y427w;OB4GA#6)0_8heJ77m@MC)^9cL} zTQZZMmtRBv;M;}IG1p}X1bOZxd&AF)tQVCn`S)7j1?>PP9`x2a7Xbc3{RG%>fPyCk z03@6bfM>Gk0AqcDEgpyuApkfam`3;a2VHHcM1J1&do*J*>7b1M$pH&uP}ajJaLCvP zFa1~YPDWd=p62AqN}<7Mb8CtZn5<~s9|q{U55|S+ z!(`*>0EXd5r83DBU#<1?jG_5a0SY-7gCnrW0VE8_Lc#=)37DVH3&Wrje~>!;d!%Fv zF@Qw^eh^##YsCH_qcDTYq7#7=5V!x8mITlk|Ge}6YU}4l8~oSv>uy2tC4*(Ze9jR9 zkyZ{)sdNvd_U(a}qKsPeIs>($0=5*UX%t>p_b)#!x+lP+UCuAgh_$eUTKt@Z}tbN#YNG#jRSf}o`)r-Yiv7A>aH;JEwtW`x`C^|eHk8RqE zP;koYni5Lt5oqnCr7#|tDZPC*_gr+Xnj-ZPf3Tx@;lSOY->SY#e}2qK?D4EokbXZF z*AH*}sCN8(R9UH2Li2iu5OWMz=40RJ22X$#iM?di24q_iO4DzuJ?i z(o12+a)dNdouS@S&~Iigocr)vQ{+mP+;#WlTdAHbc)3cuo`|;Tpv+jeb|~AyfXFsMrPFO82XhS znVYtU$}3Dl?*whizY}}Ma(L7sZ}z0_?RmwC>W9IX4M`1w&z!xJ3bx(8tK46+UF2!L zf^Hn|9o?z%9{|AT%=79%cW{*%PsN?l!TG-@wwcu z%}R$P-mufy7jwEe>D_HL7@J;7*ez(s1>BH&&vdV8w&hH9Tj)v2nbMd)$6tsNn? zx%v|98%Ca{NlKf}XOvkVid;Qw)j{(B%`b!!x!S!jCZv8tH2G-)_l9Dq^IG zc)$5!Cx%}td9iKkxxvyyr&XaXz?c&4%y?xLGOkd`>~{Rzhp4*}%}(w--J};l&-~q*Y6|Y`qvno5~GL3 z$)v9=!VrZsE!~z=T^FfSaG{`f5n^(9^RLk@3Oq4y&sEnt#cV@Z$P~3{r+CaRwa6m( zt~t}AjeRX=G>MeqeU2lNvvCIdT(xx5MojNttrnQDlA4IriO;z>TkM#fIfuycnu|g2 zEb#a$C;3IYpv*>dJ9@gwYg?UXl7d2n9*i@t;F)FQ4!E=;f8-M2IF~7=t zW%h+tv`@@iEpmCEAE`AD#_jIT>ph9lYk=R(*hShHO7vKWLI9%s+CvOfb<6h2JUK1k z8M}Bt!<{!tC~+_hu1V!x-L_dfN0xr6+Dm*UIw5jfPtz3XLW8F_TE96|YT|(t+T7NI zo18PysM;g@(Rcng)#lXQ(#Cro#=4>xz8?%a=+W8o$K|owu8XAes465*^;=Hs^^|}p z9kI{tpD_<4lDC}1a<8IPG)((O)DmY5Dw2Oq00>W3%`TYq4YTqh2K(MAPU6RU=ZbfF z>%O(z5339_Z0r5(CmgnLyry#vLc8*bU_m7^z|Uy~|D7cAB{(J0ZIJ&?3hKzz>Iv*= z8lXyv_izGHUU$y3upA%k);)4wb8@5(OJh%4wRV-9dds-#N|OX`v^ZGNJm=u8yOPsaH#x zZx1wCl2g_7?)$I`-i&D$-blBM6RuZCvdItgzE;s)Z(sEAUPsDPZe&94J!szDgS{TB zoTA`kGAUuE605WJ)~l_%xh0sOYu6;j6`vkFy?w)#>$e_dB4#rDA3lCRu;YoXLhD$o z-nc~nbD7xkvM7x1;X<+;vErqIbQ9D{p44>7+?5kfJ|h z9cyU$<--Pb^gzlZyIJ1Ekk_dW(AWQDXHWqC4?M6 z7#?2sYDWXXhK50@ZY}i8pgR>3&$7_h!)h8eCSyEL>=iXn-C$QW!Xb#(*U_3&HmfO> zhc|av?XELJ8QX`-*+tvnR)}XQuY(9^JIz|^{#QOV>41-a!xnB!_{NdhS-Ac8SQ(^U zXCbAwlKM?TR-o>Uq_`gNVlMd2;94(Lz}} z^RM?0PL`PBDMEmV&{Ef=A$%I&zo~3UyR$jdeYE54z3BAp59J}*EZ!F+-Ns;P+yD+_oy(U=E*~o6izCUU4^~G)K=zS@ujM zP`pKX%ND6}Zj3}?S5Hf_e_%&e{2%#LWN^^rU@<-q(;wGmIr_--%gYZ!8F+NZ)A)r$ zFTG6Wjj~4}NA_~QZ|)XYj5xeMDOtDwrgr9Rf$!&KRxR<$*U&3vp=%M&Gr#sl3=gzK ztdx}Ouq9LYeg9vbD=4n_y!`$WiV(9Ga}skCJMw?(Yg|KU{M?ct_&vFR^cn>FA7&Jc Ag#Z8m literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/telemetry/mix.rebar.config b/phoenix/_build/prod/lib/telemetry/mix.rebar.config new file mode 100644 index 0000000..ca1ef50 --- /dev/null +++ b/phoenix/_build/prod/lib/telemetry/mix.rebar.config @@ -0,0 +1,17 @@ +{erl_opts,[debug_info]}. +{deps,[]}. +{profiles,[{test,[{erl_opts,[nowarn_export_all]}, + {ct_opts,[{ct_hooks,[cth_surefire]}]}, + {cover_enabled,true}, + {cover_opts,[verbose]}, + {plugins,[covertool]}, + {covertool,[{coverdata_files,["ct.coverdata"]}]}]}]}. +{shell,[{apps,[telemetry]}]}. +{xref_checks,[undefined_function_calls,undefined_functions,locals_not_used, + deprecated_function_calls,deprecated_functions]}. +{hex,[{doc,#{provider => ex_doc}}]}. +{ex_doc,[{source_url,<<"https://github.com/beam-telemetry/telemetry">>}, + {extras,[<<"README.md">>,<<"CHANGELOG.md">>,<<"LICENSE">>, + <<"NOTICE">>]}, + {main,<<"readme">>}]}. +{overrides,[]}. diff --git a/phoenix/_build/prod/lib/telemetry/src b/phoenix/_build/prod/lib/telemetry/src new file mode 120000 index 0000000..f3de4ce --- /dev/null +++ b/phoenix/_build/prod/lib/telemetry/src @@ -0,0 +1 @@ +../../../../deps/telemetry/src \ No newline at end of file diff --git a/phoenix/_build/prod/lib/telemetry_metrics/.mix/compile.elixir b/phoenix/_build/prod/lib/telemetry_metrics/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..69ce17b8a410b715d3374ff91149c4f71761bb4e GIT binary patch literal 5699 zcmV-J7QE?$PyhfwV|bj+TM3MuXL+_`d%Zpqk^lt?PD~DQwd3zT8i*Q_P{?U81Zb2l z-|3yr?9OIp*0WAq6d-K_rA-SeH(2FJ8dV4=N`inEfki$4y&~awI*YQB;b*!c3xzg(N zpT1|`ZFk(bZRYH6-~R5MpSs6%cVyRSCtv^kuZ!;a8_s`8y^UY|Qm5Wr*klpsufK@6 zs`q3oIcLL_T;bZCYg}U~ZL*AW*Iz~hU1yGzzLPEDDH|^0(9--S(?4bX>Dx>5lg+!a z8(`jf*E)LqZqV*^oNWH5Z{mgv?PeprC@nTyo4eyPHgd;mfSFc*gyDi-_}+8&wT@o> z>3wr=xo_v|ue^F>K~LOhL7Ob#iR&(4INw!M=X~Xl(ia|o)AX00aP8lI>65GHtAcUU zF=qF6r`pY>R!Dx!mgR_E*ZiP#_|?~cqgF`?8N;{@tzbsQ*cA&sV?m8h+#V_cj0NfA5&N%I|&VznppOJr}%U>krHF zw{=hL@At~y)_$RXd3kCrq(<$%*H@G!Gw6t?K5f5A9K#`}!o| zI3ajEG{y~ga0s^-4tF0ra#_20*0tK*-2)4`#qMcCGaT(UTd}*Re|_l!R{psD#YL^d zOY>==b7`y9Ts6hfb|=kur&6oo77ovqKRqjM=y7w$=iDQX^0<8~j`HAb=f3G*Z~wa+ zU;X~OKK{M8iQl;W-Su}|^np*j;3r#lzx}OO-u-~P=^Gz-?hQY@{qMgsb=!Y__kp{~ z(f5Dv=%?THny>xivAvf*`RuopW$qYvl)Xc%gjTbAdjIOz(!!zCIOW*e@+>1 zvu2R0+36D;TR6Bx~Dq0`67%^pHIEB8XWJzRx_mb=+O_3`U-g1 z8b25;{nF)-7AxO74$rtKRFm!MU%ue#?o^{^k+se;F<#D1l&D91=9JH__{>>v_|CbP zyzg6|{o*wJgN0Y_y?*M3-+I#nSG{)cz1M#K>%X!z_0;A1bMOAWXYac6jrU%7-=AOo z+Alogowq#c!6*OdGaq~Uc{ktxA8)>-=QEF4v1g|lnvHQMdhCc-)Lzo5H`=lXHksBYkPbNKd=-J+FKAwdZczclJO3Wb3Eyy6ltBx%}0){NcY{_@cuv ze(g0EJpRLHTyy`O)AxRC%d4Jr&+C8p*mk$?cmC&`ufE|~fAzZSZdD(B>Wy!Hw2d?w zjLuC;b4Km-`4u}I`_&KJm2bZ8f(!5Yr30rv|KQi|{jP6+XzGvOcJqhpGrt`!-tzXF z?!Ij1te3v)dzietOFj?zrGHPd?*YcF%3sO@H$*A8qSwn$9rWeX@4RjyJsOnUA(@9+C{r6#}?rZg%_JkWFrbwJNhc@4!pisa4>}Ex26I z2M#rJr|VkjKzp{?>>!u@ayo)+a$s?`nHK8H2Vz=mueEcZZkCC*cXu?J!8PW(Qy>tz zez@X*v!@IaPL-B%c}7gxEj2nbx!Ia`ozBXWsotHkyr-U566gN&FpZ0@eAg_U&zgJy|cfSsx_|n&b6BhGcZW2 z5XS-MxXj^hX@2Iw5Hpn_W)^3c2RquGLZ?~LqxPtq9_n|wwDdSQyId<7vkbQTa9T($ z*J-xegXvEzJ8XB{{NhXp=ilAC)Cn`#O)B?GpK~`D^rgwe72;yEzR)RyO`+|!rB-7w z@b=keyE5Xg>O9I-wSAasu@IWUVxQ|4V!cy4*t5z-y{Bk+YAY?o)S5|!NVErsv$Jxi z8F_ZPyKOct4=zi;DO#hXCVEK3ywzL;rGvCoIYLa*$?L?tQ^vXER5ny=Vuh30L@P7R z-ddupbAjsKX12}Om#awMF}n>;u;`Ynd0u(pep({~*R7UOJuGKfTzJ0fk(L+dOGq^< zhUpr^gThdYjitk-)y`@tYDUK@PbVI0g-loK6$8Qs`#TC6?Zm@BrZd}IYQx4e z^)|?D+{ggq?IxaJXE*sa&UY{{smYOn2hS%PaBk&sAd*=I;t6xyCucKvL`!cA4n;qM zgtY)nFGaz=!A9>^v$C44k={8eXA!EwO5<2WSW<`ItWSbqC4xFHtnx$?8W~MA;zrIq zJEon^T+?;Tbut5E+-OusNmz1NtD=V4h(pgVWR)2)fS$;CbSi`_tmINSL6Z_W36^b; z#D)TqF@^d(P_S>V!FAtIyl*HD(=#cZ)7lHigMj-2$f&0*GOi^d@MXzlU^x=0l(klA z_@7RWk*wG%L#>Gw5f%E%0M`s&=)gnfBx%Z-O^6OfLk^zfzF=IY48KJbAJRL9un0PFSkok9 zGB+Z5tb}i}8Nhs|#&SVvP&N?iZ9?a)H6t(}mrjJN34Dmdxr0?OCj48Qh{(k+#SaQ6 z8SJ9EsG^S7D6h$Cl7b`3YC@>NIIxGs=s5lozzJJGfapvUj-Bd6vZI8kB%H;0ac8&~ z^V)3%4p$v}32-*%sY5rJ6km7D75cRiZ1SW}9;IIHLd%qCh2X zz2i~~c(kG^%jmt7Xk?M>VQ&X`2gExc;3=`7-*iPP+cykjYItM(AXzrdFwb1HaA=ZA znqzdJLS1G_)JF_}YQKNl}v9U}y2AdO; ziGgSC!kE>b#;8f<#uK~C{L$qbhTb=xUV2X_b(d+d`Oe{1s#wz*)o|2q;4Z_qlMcSE z6Wc3RrK_yUMg}hJ9-e=n+4JujIY}Pw99LS>ERu4}OXZS=H+zzZG2kl+tR*91APEPf z0C`#j#y#4@6J?GCZ}$!y8WfxlynN(lpO>%!6M+-@GMRcydGKK9tr;qMqI&+i3x04u1r1P z^TpVsyY4r5cwQnMfRJzsz7v9sj(F{ZLyBaYI_+uFfgq*uj5MRO3bEuf&;iS+Q^FSp zJ3DRr0%pfZ}eyYeI#El8=7s-M2GCGGg=sxdGb+G2DdD{82_XQ4UvOmG$#UT3QR5KhFo6=vjdOmT@8Sd z_Wi}v0KOTaZ88Bs2Bji%76b&y%$QGLqA7rTTM*!^u>eS+Y)$C^#z(?>6@&Tud|E+8 zvH>bq%_fJ$`T9awosqP3C;8#wI7<_jdhsZ1^fLLo6RB3 zpkv;>y3Nl;A!OVqjgCPj3hr+Og6CXx^eL`9b1rjCls^WrJ#uaocRHZ8^7O*6cS`sXY>>Dic zyrijKP*1Ol@V<}-rS4hBL?{}c;ljDVUhCDHeTZ=IjVI15+daZEE0$Wqj!s-cs1&u6bMI?l9(3&PgLWsTPFLYKd zzXv%uTwUwcw zPQWk{r7C9Rnk>B6PAU%a15OV@54CF}hgX5@mAc~?z)r7=yZvLK{bNbo3Cp4s(Lgrf zh;%8SWXRQMBQtPR#EcZ&MWKm!oQ1mw80La-pbvPKxga(gtoez=)_O3oHsEc+OW@K?eaU?>zxN?w8y zfSGcj7%UpK*V#ic83E4Avw}H^+H5l}vjpAcxu8}@4{D*Ei;R;%5jx2QYq<-7M2AMf zaPI=4Ohp_ZF_aes9K8G*64Cy3e-maoJ*K4p}(;Rgu<6WL_LF50eSwp4LFJ#11I0=xCBf$lHLKt%M9q zo~uYwl$aNfB!e6wqDUWQIVVwZyN=d4K0n?dK}_t&ZH^>#?#VMdKq*`;!kRd8oUPJC#jYo z6)D!&&SVv3gjf*DQe_l#E?Z8B*9^2*@dD{lL)9srWW57Tp zQ0t=u)CdT~08a19n@Pw}coPUTumQ@2LF`H-tOPt#CBu=zsDrV>(oHZxK_K{$RL%*M z)_8=WR+MD`0ChTHDy5N+9F++vDVHKO&>|rIDFs6=u(qw0ZWwH${N69r$r|kmXF{xs zF(Ru1z%sZqG&59(@DzSaf@Ye5S5p}o6lsDsC9o#cx~2reCyu|X+gTCnRu;oIPmQsn$lt(VHi%6lJr0@1#^ zuLwi?$VLlY)#PEa1ajOgVSSt?h{XVRFX|l_tZjMo4;h~`yi^vvF4bhoRYnA*4CM#8 z8VGaD2@bTy6srJadK^-QCAD7UIL4V0UOBj zU7suF%w}9D|Exa&O4{pE1uV5YO=0V?dgO7r6EJ7jcBQwJ$I1XLGw;|b!EV+(cCS;2cNH!5>*0g+^ z6hQ(>mMQ2_w^-kL>xIn;r#_k~Qd!iL87YL5RT;e$WUSRfaAYFuvj<^?FA%SUa+zso zahFR*Ddt%7-Qo25-y;qKiT7Py8dmD@1SFMvFdc}a6h!egq+^OemIy1W5I-5QObkJ8 zHlftt9e0nmv#BIPd2>l}M0$17NGl>?hKeX)!@}A#cy$oQ>GHi9l@1mI1Gm;7u&Vc{ zgYPN_<*QZSVeY8Za?em%S*H@1A0-^8B&AmwjL>ijaG@CzHgUq8uDm!%B6Y&mqLcgSu7q?eZ*y^kkp~KHm&+%i9Dc$G)H4Jm_nCOaV>B9+ pGZD?Qa|w6?PH5)3+oC^QgxtvgeJnTUs{gX$&HTkT{XY~5WQ{jgBv$|c literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/telemetry_metrics/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/telemetry_metrics/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 Oe+~f6onWgW2>Kl?jU&MT literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Distribution.beam b/phoenix/_build/prod/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Distribution.beam new file mode 100644 index 0000000000000000000000000000000000000000..2e95e300d0e3d6bf9eb750f9740e19544ce88ea4 GIT binary patch literal 3804 zcma)930M=?7M{rhA%F}C0YR)$a2E&`<;h|b7I`RJ5kc+yNJ27!3CSeRObBRIz*5R{ zmukx*A_|rds)&G4>2skXR?y-CF0}fr(kfJ{b*c6#?@kgc-Kg_@|Gnp)bMCqKp1Yhg z3u5DaA!y9SkZ?(~gj(_s2!aK}!^3wulfyMwCPsKCpc+(*Qbd+_G$=6z=^ciVfJiY= zm=4dDN-GT;ijFDcW? z6@-oy0j5l=QyMg=3|KZOC>cs<Nq$B#wZXd{`{z zfig}Ufq+UTju3)MFJ^!;Tg>DGVT=%hw^$+eu5ft~!rBSPRC^dz{B5d0%;2NA*?)3msb2+VPOWu3z_>G6P^KhIvk3;+<8 z+B@+>n2<*Z6JeIH`Am_E&;tz0aY97Gy-XJ&m(PzuL@-BSCA4>eInE{%0${==*xniD zj5W2L!9cFT_G6igDI$S(P^4B**M0yj06PGC00w{q0PRO6z)L=Cp`Abthi97liUG|A zaHM&bnx^TGwlM~P=F@g*n*MA7=rL$MV}Svu=iqK>^JpFbAHejnnIF%L!YH7_P+C}E zu5k1^4QSa=pkNrSm8eQ?&`?Guj%kc+6^3e*MiwpySL3hcTr>m4De2#6*=kWaX&}HY z!>Lh>u_$>eIf|SM9Yyr2qYeGZpD=B;LoffbO)aU@TXadMky&N#c0EXN^>76G(Jm6Fs6?ZljCv~ zrt(>=Q&C3H%ZE(U=_m|O^)lTJAAOn*#j#8u5GzO@>Se5v(h:Xpao@+Vy7hzR73 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Summary.beam b/phoenix/_build/prod/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.Summary.beam new file mode 100644 index 0000000000000000000000000000000000000000..34a57fd8cee83ab30fa2f9bfba607b1901e68777 GIT binary patch literal 3768 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 I>4Tu(0XESp`Tzg` literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.beam b/phoenix/_build/prod/lib/telemetry_metrics/ebin/Elixir.Telemetry.Metrics.beam new file mode 100644 index 0000000000000000000000000000000000000000..08105e0ad061837b08342aa3c3a65c5426aa464a GIT binary patch literal 23224 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 Tp`|%;0Hy?9mPJy)C@B6PF=Zkz literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/telemetry_poller/ebin/telemetry_poller_app.beam b/phoenix/_build/prod/lib/telemetry_poller/ebin/telemetry_poller_app.beam new file mode 100644 index 0000000000000000000000000000000000000000..d543777357f760a3045b883cc9a7b6548c83a409 GIT binary patch literal 2344 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 L^kv)#FNXaIZs?Uy literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/telemetry_poller/mix.rebar.config b/phoenix/_build/prod/lib/telemetry_poller/mix.rebar.config new file mode 100644 index 0000000..c78cea1 --- /dev/null +++ b/phoenix/_build/prod/lib/telemetry_poller/mix.rebar.config @@ -0,0 +1,16 @@ +{minimum_otp_vsn,"24.0"}. +{erl_opts,[debug_info]}. +{deps,[{telemetry,"~> 1.0"}]}. +{profiles,[{test,[{erl_opts,[nowarn_export_all]}, + {ct_opts,[{ct_hooks,[cth_surefire]}]}, + {src_dirs,["src","test/support"]}]}]}. +{shell,[{apps,[telemetry_poller]}]}. +{ex_doc,[{main,"README"}, + {extras,[<<"README.md">>,<<"CHANGELOG.md">>,<<"LICENSE">>, + <<"NOTICE">>]}, + {source_url,<<"https://github.com/beam-telemetry/telemetry_poller">>}, + {source_ref,<<"v1.3.0">>}]}. +{hex,[{doc,#{provider => ex_doc}}]}. +{xref_checks,[undefined_function_calls,undefined_functions,locals_not_used, + deprecated_function_calls,deprecated_functions]}. +{overrides,[]}. diff --git a/phoenix/_build/prod/lib/telemetry_poller/src b/phoenix/_build/prod/lib/telemetry_poller/src new file mode 120000 index 0000000..1893ac0 --- /dev/null +++ b/phoenix/_build/prod/lib/telemetry_poller/src @@ -0,0 +1 @@ +../../../../deps/telemetry_poller/src \ No newline at end of file diff --git a/phoenix/_build/prod/lib/thousand_island/.mix/compile.elixir b/phoenix/_build/prod/lib/thousand_island/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..b61afb00ee8e2e12edaad9720e6241ac632ce7ac GIT binary patch literal 7549 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 TF&_QzE;8&~bm4yk))^wxM5w?z literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/thousand_island/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/thousand_island/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.AcceptorPoolSupervisor.beam b/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.AcceptorPoolSupervisor.beam new file mode 100644 index 0000000000000000000000000000000000000000..96f60916bc159d42d8ebb2a82fd644f20cb7382f GIT binary patch literal 7224 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 iX_`WhQd+@|FJq9j0S1SGA4QZHwEqDD+c^XP literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.AcceptorSupervisor.beam b/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.AcceptorSupervisor.beam new file mode 100644 index 0000000000000000000000000000000000000000..c620ae55b1b63e9441d72906047ea3fdb88ee37c GIT binary patch literal 6684 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 WM9c;Gd0?k50FZ^mY3L8(=>G%Ll6lhr literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Connection.beam b/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Connection.beam new file mode 100644 index 0000000000000000000000000000000000000000..7dfecbd4a015010ab76b56f82ff862a3071a0c72 GIT binary patch literal 5572 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 Cz2T1l literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Handler.beam b/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Handler.beam new file mode 100644 index 0000000000000000000000000000000000000000..38c04a8cd71282543520da87a5ae5209f39e4d15 GIT binary patch literal 117884 zcmeEP2|SeD_cz8eWb9cZTb5)A5mIBz5~U<58iT>uMrLf0imXLcNE-=BwvcGCw2)F! z%9w*s_tlMrh8s}n*N23!kM4}tc z%AJTMxLV_#U2#s>1RJcY8`c^_#M)$IyyV4QF^pky?LK#WAAt(@@Ij%YN3fBbEXjSbqK)PV8Y+k%&@ zFxHO!Hh44vqy$A;JK+gf#DeJ?Z%j(#3aUmRVu%8G$K3?1iwzoYO{|)DLEYLKOCZRC z6yrZxyAXE+T6jQd#&5ur5>P9Q(|A!f*{)cu+r<5Dg1tM@2Jh)&gmrVnyBU!xgCe+M zT>2-P3y6bu#SjPxW*0oTal^V0&~8{~hz1L%uk%K%6V@3^bn}iR5b>^PC^JhdjEy7K zyVVZ7jdk+?#p9e^oe*pjq_M`k5OFT<7^trh%mhyy(b^tObi=q1puS9S#kvu21R@r+ z!wrkEK@)M#SiCzC%G4R-x_jbntn0*c6jUsNn*bQYg@`6%-JEeQPzT{%(Bq8+od77# zIwb)p+m(O?uM!EaE_gSrtCKf^XQF}=Rr` zm^Bg*oz&d~1S`lFlmK!MjxnOMo!;SN~%u*=?&*!J#W(C~P*EUxXqlN&aH=?2aK94VGb5Opwc(U-Z7MiiTSpf9KtUfy(1#@) zo&@KVrDxS~g|jlV!K&g=l&th@0VswyDaIW6h=k!~2K1vH7mrcuzI*#PfI*H^k)nW!e3d7Zq zoG=6jie8uvN>D;8U=)w!ny5V-hTueru%Q%$5wey>Fa#Gfih@KJae84b1hXr6#2r@! zC?P=sL-3$<5&&rsym77I$znj81%8gL3>Nu-i6 zy(A!!Fi0h=0xkg!xPZI{To$e&OrfbE4E?YWt^zLb1BJ09a-lK(lH*8zHt-HSuKyS{ z8=DbmffW3#CfixKCXEqN8HV6zmK6Xs6rh)8Tg&VULoEFIM<^d*@HQw!KvPv1sujHq zatXa4auK~GQV@m^1XYm-Rgo89kTpWdQ=v53QEVc|kwR=IkwT_y5W%E0)sVt4gb<1i z^p+G`9D7QS{pih=B@-jaNVp^q4pdAx5fz9H;;bsREK;x=dUZj$F)%qL)WX zTtiC05E9I;P_GGyu#cBO1!t87MJ#5nB0Z*8pn`s-7l0?ReMtmoBPEjjQf;}3YA;bn z%4({BOF%=D0uIWO1!c(~W$2e6rCX4NcHP2v(?zP^2zmkVT=`s388A2XX>O z>6Czqv(XCdo~Rm?2&rm{aCTCu(qDQJWJBsmnXd`*ISckLS%^Tbkfoo@LU!8p^M9Cr z=_GHE_yR>Qgj58Ll7k`S7z9udE3g4pn5Z}h$mKXvp8X_J-jtoh6rfLlh{;17fnoTYZa0m+2Yy~J5 zs+n3GVgaa`GSCDoQ97+qrB^{3o?e9+hCl%}(EycDMXJ-UK&rzK>L{IlD2WD8*!nPp zCMl&FcvlP3M|db$!k)m204zz}+*@2kLfeKn*W91JYRM7NFL zABCQ?EA&4ET=T$%1Q#Q?D8U7dMJ(WgfondvI4177!G9ibL201pLg0eZh=6MmxS;2v z;1UBDR1}n_Ah;&;SqAPW-vyZQa~h~zn6?+GKEB|d9$aeBGjOe*xCj3zw7{hTF6cQ5 zT*}~r{#Jr(F}R?-7l2CwT+km>S9Wkg&!IN4P25A}F-_bvO#FxPq%^=00ZpvKz&-Q_ zy`vD|1U@P4DLv^v!$=GaeC7HPF2ukbz#Cgh?@@t-OjB?o2Fi@_TNs6*0MDj_Ql!KT zU*i)D1(ZEUfHU}HPNhWN)TPhr5q%%HZmgxd8i0w80DHJ6+y-k4)f*17rE$uh4lc4OUBh6k9EO$$pBDJkReWh zc{GlM=4G64R^L6FsG&60%L??*3Q#O9gtV|;M9-hw1W-xUwHOkP~k~Bds5oq?csphFlmTE{t$iDJ~Qk*G#Z$j7y_1nM*l&MRRerRO{$0| zHOZJ7r$FS^w8u&J$NKWuvhoiSZMA=! zX#cXp4h~=lq-}==Iv5I)p+7Xtsm^$q1DyNaFgHG?!9b&^2(DP`Kd2jiqg@kv0q#ku zqVfmTtLkUAr&!RA5b{x&3_7I{y{29l?;_c1$q7cC`&mw{CV8)g|Yu3xB=1) zzrqc)6Y%g)f(BJENX&Jgi;c{;mKizShX7u7l2!Gm`wtrCVHZgDtUCew2M2oP84vWp z*8gsx|EWFu4-s>y#lH~qN!?8Ah9z-}Cmj(B8S)r6Z>Zxa4gNSjQ<`zN{T!dseV)mI zXaKo${(x2V8;$!6(*7aL1y%if<^oQ!Z>NntX?4fvjY)W)!iVHh`vZWE0H<(gf*l!PY#!PT<2fK{82$)N!1A?Xd!rlhR@Y0T3Ahh-xWdgU1qF#E1gU7%&?z zKm>_EXa&|9#8?Pe`i#deED<23-DxRci+6LDrWX(}a>4@dlmM9K2XoEfB@naVjdvFS zUSa_^EYaP~1-OX?Fwa3fQ{godqy1-XJH-&%Pw-3ASBq`MH_|Qm$aC9V-9@ z5`b_6;4ZeIAD4BS03v7@_*=ydi5+mgPXuL<2tFS?8aMoBPUfF$cq*t$lYL7jw~h0H zClv@v!9v*cvlD*il>~489(tg{x!{O1syC?bR0HvsLOEH`IP*{GBw+eN-6TyS3uFgR z9ef~7{{1Kb^Q1L$!$a{f4xUuDP8hohS3f`(ZWvcI)(c0RATfBI67L8;;UEBLCeYq5-T;z`KxB z==b{a3j=@-LjNj{Df;z)*pJkt5W|^uB1CR#qP-j5b5b1099{uSeLYe9^YQyL#09=| z5Dp05MNCFXf_n}SX$l|_fH#mTaUsP~0#HMK_mTX%zo)#&)DZywKz~#Emdvs9dkczT zVk|YlSYe$U0BFS$$GZ(k9@KPz1wlk3X!vi+{kUU$_B0g46`!>qzoalOEVt44J5|}>p3AgP;>ug-157eGMaue24Zmq=v&bxKm&$?(4arDx%v;D-D?y-P)&6B5#D zUttf}qH&7?JSER#@jdFA95p}|-;A3R!Vez*Mngy)PNv#`IF3BM0j2yGI8?v4kwCp? z88WfD1NG^Q9fwQkuZBC|zxuW`GJ64v-@%N#>>;!?jUh~rA$Yr312>4Z2Poki9w9L; zct{@elDg4%^Jlu2`0?x=a~f4Lq3up3N~3?MN%xD z^kBkkVzDW(^azuSPyy?Xk#l!1;d@u%B%A_$<@URPr}%B@?ayeLyDOA~o;ton2+L!h)a$$cazdLSnMz zztiJjhy+dg>sauIs{#K9WcarRD@?>2Kyxr8|J6+Tk8&EP*MCNK|DlH6bZ$nd?;uH< zbu}{82LJ1#I^8ncNhC{l10b^v!bYU!M>BWBK?r^7a@Q|)`L_x-2n3$kuw_Of4f(Xm znysaU0!hf2ZJ*Hbzcpz?ZeZeM3&C&;g(H!;;tv=hvq(j|!99&a(F8J-*e`ci#b@}fTjIT8jMBcyE7A7eV zGDlEo^dS?8f2E?pOMg-tCK2DHcK>aLBEQl9NOAZ)to>`{VanJ%<9XjXL2{d_uYYH5 zWnxE|NpBD&;gI$xcjldJnEUURH}Wa+Uy;XYHbf+!2>%tk`A?2;bAkzNi25s7Og>Nk zR|J!GVyjW|TTYTjGQl9o^l{PfP#_C36FWubg<}^9q&)ovBp9#@dkYJ62sT$3Q$lmAOk=jO);U6kb0P#>Y8Su^!Ib2 zlO6RtQ3#OwrTvZVHOOCY3 zSviq*wfwu{$NqAx9JG%kg)hmJpaG&bh0vt4DW*!$*9TUN>p%>&JNMUsiS*!m;QY;- zq~Q}o3CcIXTSMoRh=U6{Q)CsmptCyk!3CZB0p06@O9@=m;8IoxN6Uf#VxJ8lxCeo> zaU9HrnZi&mDR`x~bYO;ia-!+Og|wi7ntCp_Abl$-Jyca%&^ZLKD~2NlTv=Kcdhpe0 z2UMQiU|$=szRweE8!{et?1pw7->}M)4%+(+Ja)r+GJ#ak4fqWUow(-72p(YEiFoML zG-%5nkS}oVySrIq9seiCayV#N*@1J$__qWYQNRWUypH!;n0YppMcc~QG z^WoEps~|YvsYe-Z*_g6pMeeC(9{HkW_9^O}kI%TAzK)-7Z42A^CNTL_G1DrYUAQXZ zC9yObu@Li>qxbw%+!Z$LVO(2t=(JB+XfFjDzgZZjF3oRr@rr;;I~7bAQqM6(taf$a zt6yoV=U&f`>)!q}?&;NT=9R8AA-DF*Ww+V)^i&erD9vEyJPTAU5?%&9ppmL_%U{xX zydwW$waMLjYB5EvfW0X@+*W$<^Omxi1ji5==DViw$Scs)@TjQvF{NejTuMF#8#$uE#c+5@ZMFQ z9yv!41@+303bw?Gye&<>bs&QYZmU*b9a3_6;`dM5 z2rg3hIj+rfsv*zGCMQl|kAA~ipS=e4^<_^s4skCjb6Vn*nuqKiQB+-;wp_Kgu|UQtL7#Vb3hqb;#_o=F9zzpLkny>;p7%l4 z67swi7xMS&98u4(&F(z5Cu42G(p=MK`r$}f#ou#3CdXz`$muy_Dul`B# ziP*j8bX7}UR8-XOD|*z$@{XAwktu|y^6N^?PuKN}p>{Q-R6HTg)2y&fI{(uNan6fo z+KZAOiSpcxIU_B@p3o*-Z#H7VyW~Mnc^8x%2dOVR`w5OPLHyjxfJA)p~iiMBV7+ zV~oSY#-i}1B;FTlrfb&Tk8NBYT`Rl4$Gl;Y-ma*1mqog=!t7&h`W?~vd-ny840h9o zvg|U9>^p6*FJ8q2oxFmpcvW55$Qa{pkkpJi$Rox#_nR{&RxhyyuR1C*SxK-T!}@h zbNjA?gPZ8yioI*1YuZ&QdmA5GR(pDNVOPpyuO?Bd7^R!+-Y+@!Rd*CxJfQl(r(I<+ zFOEw3VZaz;@h#6a&C-#+aC6;?>0VJA)9~pP)2W~zN$}7 z^aFY(w^(2GQ6oK?b$1622_|#wdlMUX3adL$%6o^t9GBLK2HHlxAd6L+M$I7&%aqw} zRLLBA^yo^+`z10@4{aRRXFmdyW zOqvqjww$}1mvmRlF!x{Ubd>2IZJ0-YF)PaO&L~fX3~l7D*w|>{)@PaR@|?9;pQ91 zX|gRvFFazg&BL5jjltWiqxtvcaiv|^z;3c*iF90QPDSGJS_9urs0X%>^@8;z&cNvE zSI|Z}<$9Ul<=+~w?IY|dp!RgxJK?~_XB8<}!;j);8MZAE)Y}&~mbI8JNhH?bP>bz) zwF&rew505J+mkEaaw{$!ZM$^TLfv%7?o3u`DG$L~4-N(BO^FD|+KCXCv)9J%f4%Ka2i?3Nl z;$E7X9VTq;Ot0m)+djI&^T80K`U#6HzHD9j?qxYRhpVde(zFR<#o}^{>mCYh1e2M;X{7@Hw7LhW#x)18;t64^m1}n z_bX{Nido%B>>D=m*oDs?u}Kf}J5sd>Yf@9My@$%anWKSaSD~KVs>*{SNREz1?hWsc z*uOVWWQ@EU5LUgF$hhow-!tPSYo8Hmdo$u)E0lXEE{5n86<4wj7%#b9E2lLkQ9bOD zAF>J?wizRn1~f#$@nz{-m)w4tcj4)+(UMnHyQGC*7>RZ7QtzshRY1JSCi2#G8jDxZ zAAY53F=ENn_w2Okk>WKr%1sU;dY&KXU+b-TWF#bBUv)fHg{Q#g#m6%1lWvD>yqDz& z%f5)q>ay2KZ0J>?uQ3bHX6F|v8zNp|Q>#DHm4De;b|+eJuz6&-vM>q9=bE1o%5_|2 zYY<%ka_^gyg9BYnJKws{AJS%0s-rDj{AAGvD;@@4_06qosa`K%-?}e^&JLe}J0F67 z?$3O1@STWU%DXjd67xb{g=0fr%BK`0@*d8-;R+jyH%)jZ*?e2l=-|k8bIL^$tKv;J z-0(}jYP=Uywc^fl&K)u=o9#O_PG>y0AIPue$9}neUr)rVr^ZErtJyHQ3y(9D4b)X- z91rf@aCkwN%f`0g!vp=!8}Z6lvkWzZVwUl%K4C*1ALY})a6dX^Ot;dg7iAH4u`!>| z%kb>_ee!%JC$(>H^_C0jRHE2=8l-BAWR;*w5ngvan z!*C`aqyL!w#XEaiM2BJH35|AHqoXG}RZxxhhP$@aQ1{Ug*Jq?Y^lk64x^r94f8IVy z*+b!)-WPh!89UF5;8$ZKA_w$gbPe?jgg@6{;1x%c+-H@X1iP zkY)#W&qwo}?;h^E8E5`!YpQw@zF^%t1+U&hC(1h?_*Z+d)ZaF{$LB3i5m?uxS=b=C zhjZVWn1_eb3xm$xI>#ZgUMT+By!?`w`TDE5=Ua;kl?NIp+P2~rzI7VA*TiYE-FTUU z#x0ANiF;}^M8gta)WvO9)--A>sqMHV=e)pk!H()3b}R|^)}Ho#m5~|q>;ThE3c;AH zmmT{r-^5jzKYk{0%KDD+#t^e+e+Cw+*p=}oqi&nWbuHH%W__!x|FEK#cU!bDJ7LY< zgz`Lz2w3(#cQd(DzGaGAYTM`wEt~v44wi1{5!)IB*Bc!?*W&lKd|h%+2y5YB)Y0p& zL#;zGzRJ(lifco5SZG%G4pRo!Qns3|I2@Mh1xtKNp{>2^qHx-&49iYyhy4a;t&a0u zd7$AEZ*HaT#=@Mio=(w|Wl701joo?+141vB792Q#qw!iCt^OuV^J!&SW1h8%joG|U z!WAxZ4KAW}h7bO(s7`TH zS9sMkv$`?Fq2qYY&6?MbJ~}>-keMRl9j3>SsmB1@lB|Ai;Yq>8o6sFC!!?J(I?k$Y zXv;a5cBi^l+gK=EYKNAkvZ})Cn}_Sf5Dp0OWqS{Qh-$OmqvawhRgm!T*d3RQ);KD= zwl2w6UFv}>;wA+<{7hR!_g>soR8)0$J*CVh78#+1N~fi>3C99ZM>I}9M-P}e$|f!} z;7k=U(n~mqO1@+iI&yLyPJB!H5M3>2ri^*9TrKC>a_aKIia>u>*h0<)E44<2 zWY4UwY(uLb2+6#$c%-g)zf9)l$HAHdv{rKX_S1RS+MkW8EY=&nF_v#%W*7{HLFeI& zk&$lN+ZiJ}13eDC?4!EsWqXaTM#9t3b2EeD^^*^aO;r-;bWb(Qu2CGyQn@#Jyjmjf zy!L)$Z?%_>2aIJzy4Ji~sdH5`a@%W_`5P|Tbz9uHGqOOj!e*CW@v@K2Z-rmL~4%wFvc<#hCBf zbqgNSwHMjTs)0{bQpVHe?H(AbC zMcgR2MNMXFVVUm1(H5!UELX&f2SqWc4GRm0ql6p9LR;uhos?f2c_Y5E*n4lI?ES%n zQ6jI24V%ER)#gDNFD{C3VYx5Nmsa79e_C%@-7Ls=f!k!n;e@<&QTtBgr&n*Esbf$l z79dxc-SPCkn?hIPU4NCz(aEq1{Yid--?@@gJw84A9{1Cl_N`*jp~-v0+1o~iW>(Bw zFMRl+dVSF8Hl|&}J+0BF8i%u1F|1=CxGm>mEMCohDsW3T*Fk2M?BLEar;sWqdkr7k z?leCYDt4M-r?gVRdws#ERXWH0Mi{!^Hm#FdF#56o0TV_^D)t=Zy;kOhySJAzMbO-M zW`sUyJCYYHlI&l#)m%W!F|haO=+Z2JGnOr;x@))N+OxKmdySLBF9i_&V>&zujjdW`~8KtOZ;xCzfS6izerbHV(j?VZ9av?m8Q*( zp7IU>F$#fjMyGremVe}lcYAmO&s0{>kx_72wC6)Jb^g-Q zJb6Cu^KbXp9eSZwr?RP+?g(XZqpo<&r=3sMj!BsowD=oe+OBxr<1psfU0L1B%a7!z z8U$cG>R*M}Iky+=9jlDaE%)2D%vPyl_@x%@i|cq!W<-Xjc%g1rX7P5V>N8dzTz%W5 z(;r+)K511U0cVQQ>S{JkDsIYR^z=4;>vD9T&E;@ZL`t3O(5>@530iNj2wk=38@zhe zFnR59BZ(T?9IG^TuB)SBH;jhc(N;qEO7nYBG0vz`_8m{p>s~j*VFW|c z7zB8qugXx}x8R5m&+*&wRqfRGg8b#*P#+R}YQ}OpbA_b>Q-St?MA*9ZzF|*|+2a#O z%xwnDuH8Lq?mKu4=-&85O7{5)sTA7O;)_cL=UdX}zB@s8lQw(z;tlKvo8{N*hG~Es zVhu;&vofokn0aX3Fq6t+SF8DJ)2}VdU`_GeY07>xQ9N^bVo2g<_M7{V z@I>+E%?3OoVOHze_azp1=&)*^7Z1~3zXW<9b4t9gy$UbUTC`b!<3e_7;5*kXHP;N) zKi#akM&zq(%QtI0D!uJ$cgust(Z;%m)@<6Iw7w=>(o~5f*l_)(u$&yT(3_*t(TPW{ z-Pc;WC`@9#LG@C6+|7;mH;GjpsZWeatLGjb+md#8rIy4ZeTnt@p^KKUm$bNX1@pln z`Pv%Svu7hxORv}^(y+CppIyb(rz`53Bzj_5)<;QIY(jd7iTSaku221T8E6cjy4-Og zEj}i)LTKfu+#_AtkAo>g9QRQ9S$98`d6*%~u%X=MST2=K$Q7##m4)1d%e}?E0>tLM z=_&aYCFe@Dt6%I%yMIOA&C0`fPi{N4{LRtl^J4Lb58Msk5bU=75c{E;bFz9@>&~`) z5HHDaF*M(EE+o`uX;f1>^JPD_3ac25#Rj6EYJ+N!Sdc1QF)pp4JLpIcf7rF%xv~lF zoe+pwwe8$!sNktSTsbP`{)c_PHFPz*K+nya7td}Yu!v2bU$Oe}W ztf}q={rekqw!g{bmM{<9S^V_HiRC*kRvmPBx0;*XN!T)ANR=p7G%tGP!VZU>h5C+> zz38|uulp}_b5c;Tt=u*9wnY>SdNqCGaB!t`e(ig_kKrSvxaoblzVQG~7csq_AqJ&lPi7qF!xVFxws0#9_?xMVv1@oxD{% zRAQ1%Y;>#y6Rixx0ukq#t7{5t_Z?b*E(i=6RlII;LTq1#tCeIE^_@3iy57b#`RUJM zxAPcX8HFu0dbS0gCUtIL_~oPB3?{GSD+Q~ztYnGu+LWG{vDxD0?wlye7&Sk^+v2#b zyV(e#$%&!CfeA)D2M-3{p*P$u^-QkE;fj8bw~Ma-N$dNBQ`~pw4c#0`wx;?xqIufj zssu&#LnPbU3$LB_Cv5Q>D_f_}d%HJoe&4mNKJ01vnUxD351M8oo?SjNuhitedq<4A z@nf1}1(_<$@7cSboXHM#J6i2s>T|YpY55cUgTsM2CLeQfI>Gm-hxT^Bmwj6Dk<#$Q zWu}ihc*En}CsIw;X4YO^U|LpxY&x5%7jdus^`0 z#W1ak!okeb{7s7gq($}q-7C3c^H%tX6)0c`rHcgaxH|CKo_0$cx<8bbi~UGQDS{Br9eq@$ofL#zH3>(YH&{Ke=GJOQTi z>asB%R|W}Hy;zRHb6XA5>Mrsym|S2tLNa2kDz+~1HqC!1RL=Ry>88T*F+U}JlwEZ;B_(~Ov^$g5P)i{?4#{$Eh2+JqqSK*k?!-E?z2GRb!CCFM-BLRLc}EI1 zdXu>Og2U;oA9>JWa+ooudSAL^u6LoJKYL+<|I(Y1yEoko)v%5^a#@UL`PE3r%3Iq% zEb4GDJ=FEGejBFk&3bOd=vH|2E?Q@7p_S>Q>$RC42kRJ=q*=B_y}x*tbI4z@kLLFC zQ(eeB!_)*NmD*CR=%}UY1Pvd>h?V>AI3L^U(#Bo5q`klSWicOj%BKT?#i<3=_n7(v zD><-Tf*rttKZOYkEBt2 z+Ln-#eqxnd&nf?^y$0g#4d_i z70YGg;ke$Zqu`K9TJKAmt10RGlMQQp#Y;}Nm1gfdlsSKR%kaVckU&Z2dy-u9KAcsO z*cO+Wur<_DykE1m{NTX#ctq4K!m4vf{;`YH>6~8AxD?Mi?b%9saTC|YE5brAcW)Ky zVrdmDIW6u!cC9YOX;TK{fY3ru3)+&cfv*Z5$DMILn8u+i8M#TI*DW%}?fi&Jt8;|p zlE-v-@AU^p8Mv9ZrDvDj%XBhGS)4;}9oAn_XrqCw>*hYZw(2^a(9SK!2M$>2td1CS z77gx)@sG?;e)(pP^Re!M%AoQW?lQujlt(=np1r4UKFqbXfy#MZti>6}_;sfqc;HGF zogv6QR68N+*KKHMt#GIp)zOHmU6fNnD3v)OZ%M<1r>PB1>?~cn@!*TA0#=t*D0uG~ zUTS(pZQ$=A)%b8%B5!>4rGY5C&j9Ab%BB*wPaUd*u?4PKUc4IyhUL(=W5kTYk`BGO ze#Gr5p?701Lwy6ct)m^{vjIettz$dO zNP@oeiowIY-tX~;8oa2AY;f=~nc&6z$!GmVpCnl`a=qwE!PVSSv^?D@pqhiUf1zCR zBF^6%-oN(d5haTF2bTtT7e7aqbTU-(?)Gu2i&WkKPs!@Mu`Rbr}=G>tN zeY;m`%Ji+hRj}y;!#{+wA>{3u;pL{eW;OZ+IU zqt>;E(L9N`K762ckzI?7=rw|?vWRBUi?@5Z@5g_-vEUW<&U$CFsB4XOT(1@ZKZDad z)0!K5-y8}q+#BgfnYH}#$5P>oV~gt8*ce6LUS`qRpYuts^kZ%kqo0NzgLWsAu-uE7 zgQc4J4E&-t{jymM{3*9uF&Z>XI61H7v9N(R3vcmm=;>c*nI)t;M!VdgLGVz3ry1HQ z;S-gTHT;8ELCk^|tJYH`h`+Z>DfOwXS$%ZdJZ8m)fcSRmWjh9mIkc++I4j^AShU7? z=j*h~t)=K{(GUn%TGaersb9k&?ls!w-u;7E{avzwDS_$C-5z_(8>3#^w|}A?Y>JPg zpwPlw6DTNHvcViP#mZY?j(Mx|fdw~Nid5l2rFEf+y1xF5x+4+$-%>K78MVU>ab;^! zY>!|LOFYpW*ZidDSlmg2`#sHNms$?SM~O!bO2iK;33bd{C3H5;FYaW0tZK7}(f+-? zPvZJAGk2tQpY3jbcemrNLGq3(Ui%ga;>EWcgr$$R``32HZHYnp<{m&V z3}OAaqhn!3d!fTJnOq%};8i*cOBNQUvc-g+T@q+}*E~D)$m_t3&UYOK$~Qe0vUbp4 z=Vj6%*Ac#P(VchtH6y#_l_cbI<)pd;Q+0ZB3&rDHyq?^0EAz^GclAid#yeq~l+vFz zgcuEK94VX^eWB1YC)I6z$U$3&=No7@xXFvg9lN{#ZX}iMIm}TS5woq{60aA~MyEgW zU;R=)$!#$v%j4$irSgJoD^BEYj84|Yb>2O$#2_N>wK}WXHMaw?iFHY=aa87mCYRF1 zaTTn@^(mC){*}hjoepQ$CBDdD@sXugZhN8-n_bcD;BYSJ1oJ=xp#hy{gbS~aUxF3( zW)wb_pEJDQAIm7Yew~R$WO7|Q(>mPS9rx~Ic6gQCpf2xxAk?k=U?T@s~D$>;l@C+kMgt-D`uGrz5P zJJZAbq)yqc{imPfXsEc3c)g%GvsjJOP|oUrQ4XtC`<54V6iDq86vK2&Exq3>_lJkX zUjJ}a{f?AZvwz*XwGS3}@SK)Wc*;sGeV5&EYpm=|H))tvnf(G5|E`bF!(-?`XImP{0oQ@y4Nq2FBMpIYHSQRdnBzSaW9`VZ%%=W7>{D;aLHZzClvOM zCRA(W+-O;FZ%hrh?2l7WVO6f&e=g4XAP>8WYa`BzN|k#4tL8$^TbXeKK|1DHw~5=% zv2MF>`iiEmq`dqsn|v2lRIyQKlFj;{L`T>N4W4#U8*^3jeLbHMeZl3rTSDp*%C0>; zLig;1q~RWMqlLbbOE+IB9l4=(U`vvQw5xQ+I|lZw?Is%%Ze5Ul4ztmGbMCZkj)s$X z;4Q771{O`53c0&my>1;h-n)f2XvqJ}g=<{FMbTGeZX5e+P>yCbvR4W{)s0(`VTcWP6*Gsq)s5QWZ$qz~N zYo*g!&Ly(*Y4)=fG@5L|_XShc-|s$u+rqV#~iD>FUu07ycAbcoz2%vmt{Vob+)k~ zNw$e7&9PhFwk0>K^yo@i3U+4xZ7YuOBn3o!t2tI12@gv?s&rma%U*4qM|*`rzC-!N zMH+Xnydy~gtaVh>f73Zx~z!$Q|NbI;*=TW6S99~;*uRw2p&}!Z- z`rLwgmE^{y#aa|{Ofv7Kbg!E?1+xSPp1k=?XDM&%vs5-_>Jj7(MvC1ft+WnTj;Y(O zdEO!L9Zmq-mj&ny&q`tmz*4nXYy?y-}RSuzw*gAigN{*tK{yjCxIc~eQ z3f*x_D-sq8-UYWk{etD)+q}E4=Tl{*ZE&|Gb^|M+&4M&Gwk0y-=gA!Ao%7sXh<*)95}KQ>)hs=bsA>OlZK0Q#ynh$ z32&QUB3SciZ@s9hra~(m|Jqh}x%fq0zIW4?&E7ERK9BdpoSwwPSFal=5%1!W{9 zoNMO0*zt*$(bZ*=LPcrf4XhPWT)kz%W=s{!x}#a|@zA||UFLYI^emHVCdN(`xP#CC67v-Sk% zB{kZ_z#Bd}iPb6Q>uga=x=QQr#h}71b0euycS8+_;eOQeXmB^fA?qA}F5%C;N}lbrBX3bFewhQ_a;&PKuK3Ld z#V8A$!P|2_;g^DGa@FbPpQYd9E}(_z#?fUt<|0~?A6R@kJUE!Zx3Y)w=mV#0F_TLr z%cFBS&hWU%3@aaO(65oacKl3oS4(}*!pc?+73uCni&N~Kx%a%3G=5e@p{XFfkcH*> z@(+~vB|=20yw^utvwrGFT*ga26BJ)tx16vg=t`8o%l7BH2PkBPV}q2Q!_C-*G$T%A zt*-Ocv8eS8<#yklU%pIcSx{vZx4vAQo_TFve81*H>$R;>9m*%OFw%jG6VA^IUzDLB z8gfHCNUZSQ>eVloCKslyAKGksWxueswMbMfvsB-Ky3Q92*W2N5a2u9)F*xkJVf`Sr zZLRZW22Vs~MbcG6Kl_&850^%F?sabKl_Pcv9J3odBObE3TZ$O2(HXr3Q|V5mPe|*o zG%|A-u2@wVVdqI~w|96GF(mP7XYv-F@*4xKN0_%Sj6QNENp-DIw3*|j?4Y%&)!MMU zloBB&*wO;KGhT?C8=Q~Wue>qb;u*gDG-6|Gfc3=^iRJG4um(LxfjDaoO775jGfy6xD2DemT+Qe0EH>83hBO_=-3{Gs z)|SbPph_)yf4)&Ra0y(HhV8(ne9i5G!R7DX(_vQ%CSIcjKCCtyvd{0}#Oko{ z+qG<7y;8e7w?hiK>x>mcbo2vde$V?%BP&~0Z7s5o-*_c1{#9~$F+9A>I^@8j_}g6r zXOAi(o?FYF)zEGcHd$awSfua0{kVFB3cprvyZPG3MY$o|q4Uf?4v*Ep3-5R>y=KWP zo7*%+OTDRA9qH-iYpQ%wI(9Cg^W^0{^Bhh1Pe{cdyR(Gtx%jSjkL}kw-`&kEy?ycW zQRa-&x2;z{7#H_5jUHgaB-`nmgq?WV6Q7y&`gBBwaH&YZF^i(7oT?4|_b?-+QB5!V z-ac|yb}78_pm%tlOi6El+p@Q#fm_?nRJ6Ai$?_XFa~*iMa^TQ9>o>ZQ+V|!3kJG?oa2mbOXW1m2nI|2Ed_SQM($wVMk86GWf0vf zap{f!fe*=1ejSFiREq}FtDoC&+*KalZJ=@jVK8)6O<>J=wk(P3gITSJJ@-QF>a^~x z&Tpj;#?<6CMm`k0DeuJgBF`z3k4M6zX6y}(QA9!|PN=-MY4L|+l)S3^DD5%0XIfio zU(h~e(1X>NF`NUjLD}!y8XCrSey=n1fRLd@@ z>MA#Q2r}d`XT)zvOikjKlQVQWRuuEr*0f8^!;}lPp2$Ko&(cTz+6}Ao0u&o`Zeo-M zwdwet)=7jIiGJ*+>VIs0^fLc2Pq12|R5Xjbkddg*y+fEQgFAPcEu7kWHm@0y z$*6i9V}7iI$8@{V)tXISOjS(b6s#wf3-XL%mD%(&X*P^Rzpw46-7~)~$MM=5Z~ImH zTzOT=_b&7>Tchq^ahpQ(s5TF(*gr0HXzMa??O#=w9m?Kb=5A?O9+Y>p27Bp>%Z*d? z5zpN`-WZQIo^ZA>-a8<+g;~_1J9$WfHbA1N2feA zJqI%PD?XrT%uRmDT9Ar9f7#|%z*dH$b9OF0I=;k8b=8Qfld z?$vTSZ>(h~&sWkstfeI4ZpH!j-v9zWdlbhC4*bHpY(;F(;wfKE|LktTm zhfLH;7G|~gMa<_|SJYp1hZv9M*T8>5n`+!&y>ypHvwhS$?hi2m3=H$C&Np~2*tu}$ z*vMAAigD(ahw&G7Q_~j3wsze2?+g{p@w#*R#PRxtUhm?YlS)o0v&+O);iSY8l&|P< z(%2OfMnhX&_Gi2AZ|Xba1dpnHocOS7ZAkwGVf&h4hC(OIengvurC88@%f2BcHDST7 z$R>U(X1&rYm2QEBcSNz)Nb4XDsgT0U$LgBj5S7Lf!&mWi`^8?0IT9xc&9{5Xy!}R%jZXpgCE%m$c1(ANv1o# zf35a0R#5-#%2T|ieZv%w*QRh)zId>)JO=6DcwaWXy7dVxye_Kq(`_`O<8|k$3sn^A z%&+i{Pe1G+L>D0WcCK}9JFl5o9H3?Q34XCu;GDLXrXvMx30nYImB4~^!hvORXlr{c z*r3J@?XeU(iX9xw4UUcn3l|8`@)~NeIT2V6Vuc0Ax8uMf2GT*h7}$71I00wpN#%lf z!IDx<-9!{a`6U_1gc|JCk9C_^vjhE`_?gzm8=Mr3vj(dA!8}jJ|V~S=1G@C}POoa>%Gg6CRuYR5E z|0%_Pt#-&)jMNw>9ELEN1*;`C;y7h zUw)s$j6ae0zb0wl>~%3SG5dPk>gnk)6K0r7(wVU{X(tY{#>$Buk!G&}WV6rgb2Irx zPaK~zd##?X+sLjC3_bPr@rq5SetxMsvQ(GLav z$LVIm)U!TdfO?bNnUm){Oli{i*Xej^*3>20Rh%>cNIYkJ zLQZ&3#&12TbH?X{(|`8i##9Ue4Pa!e+5dv^Nixu8hPnUA#^>}3ZMxBU*0BWH?DJ3K z<~a*+8fVFz1^DxM*x6@dvgK#a0tAr(f6O2LU$+2%GKv5B#GDEAFcX~oH&~GXx=gW2 zAv81HGqOc&&XAllByKdu|pJz!|{N1U%^gxGDN_mVJ0+tJ(j8 zAvu2Z(u{%y{>g^q+$`o#!!Z8_7&ApCAqYdhAWf?2slLx?EW25A%TEikW+Vu6vzS0P zPv@lh+w}EJp!=+QjK1UW*|0r+lE>tExc@lw1rTBy>7VWy*&1Qaf|;{m<}8>w3uY=H zn3X7z*+)NQ>$SgaMEp!B2-c8YojD7}aGjQkf%a!V!DlkgvQ0U4Fr3K#C+s|D!OU4O z6HDVDk)Fyxq-WDTp0i*;D8{!6a4rt>`-PZuvv6~>aN|DJDdA=_a=A=}96zyQ$)1J# zNgk{OoDX6=*O8j24)`)PAKO&qZr88+_L5`%bI7xopXy5C-)Bc?}g*f zP3z4~>rLGu{G#U;Cz7Docff1TD4sKl@dWIz zb|;!Misy{tf2~nWXOD5QA=qOav2(WY=gp_4_XJKCt1!347qko8q@Q_eyyVZ5QlGAUN^u-4`BVaiD2!FcS9kNmXzj+du2^zGVuxNt4JJAO3=`y#Z zaVjhPg^6ggIq09p&~xFS)6ByBFPAjVTy4(Hwa(48P8$pS$JWmL_f|Yk9U`Xpc}<;@ z{fWzRF4}f3+IBA5b}rg>YV_lj@Wkm+0WA^djK#YXX9nH>Y0z`l_T8JwT>oG5EHF;k zQh%vG{>h8_ra1F{GNApJX8)!e?a8+6=Jp4j*4O(#JRITc{j#Sp@SLqQXDiLwN?#o7 zv#zy)Vf3x0{7Fpd7oYHtJ#L?&4#@bs7=!7beOvxdhO9Xo>|bt!O*hcYomuna|GTNT4l6Io831^+dcn@$PLMHc)lvfyi)l7EB;6?8@&8NDhSGN>8NxCB2t234poj#wX$O`G z(_o5U^lKG1g{BkZ;Y`NMzvc{Nn{Wm~o(`OgJBA3Yk(*Jp%iOY?sQ}~GTrg$W`3Wle zgZ}UTJyWuLVM-UQ^~_mv&Ph!GVN-epC-5n)ONyX^^cC5d;D5t(Q^ke^Wx&UGaD7H< zX)o!@y6#8KV`}7EkhkIlF=#Cni|n-#5g3ZJ<=U`s|#_NYfjk z(}PJW0uk@}we>&6OYs+!!0aQuiH6REO#k``0h|1n|y z0zc2*VyfvzirJSIvd4`%duYxc`bXPCbHHW}*gzA-bHL{NsK~z`*!;u_{u}m3oX#kk zHS9y>X^)-U5AyRo`t)4&wP8F36aR!Dl(@<4f9499lHVj>Pq(rY1T)~>h=dsfwaHde zO|){FGX7iJFn*7%C_U+j)~@J@qX8tRA~NGv9pk*j@71ci=n4 zF>C?xNUi3~FQ03cBWgT*Z9Nr`lWOx6Fi6D$8UhrmSOT^&-x*vFxp7FCzn+ zvHzBkZ5Pl>=C*7K{{T;q#&Vr@>)n=6IBxzb;AXep4WNZ}?xS#=VsW)FP&J0mPWhHF zLWvX5-;9N&AyJ>yy;5dH!?Blm#ZFLxKueZun>XFj)9~8q9V*|dEr><1oVRduLJ}s8 zIWqEB_g7LENK}h2#`GL}h7PcM-G8=#JQFTk*!fuN?2SM1r+yOO z-z_iS+(wJ_K2l76lxMg*z_a1!-uylsxv@WbUlf2qvn3d0I!RD86cs%!zF&uhqYk(x z&QTd}JEGHP_EZ!k-I;Xbd%6Brxk~L?NkY7{Fmh*J?1y=u7J}L787?3;0c?>6)t6vz zV;X?GxsYO`FS;#DAQIcJ0%?_aoGg1#mbhE?pdL|GIVC+ZlZDFhk|{jO9IBH$US_@kjg_eIB-c(j`BDXqtZHoFs%9jJ#xYyE#pg_@a{^ zvy%oJfI>b8dJtol)ujD;Lh#0s4+$RhrRa3`8E&wk4|3a{u*7$2X$0NkqJn1`C?yux zuKD!Lb#Ero=pVOEL=sdOmd7YD;r<9nn>cga+izsVq-EIv*d$XhgF=!C4APBe=_;vk zc>UV}SlFz`s&r$K5PR`uRa&)eI^aKIX$z+w$>w{Gp2F|N94W8a2jc13q3J` zLRCM4sSfp7LCW|VtH_{T<*I;ujibYKaOVrbV)1v`GS`LE#bR;@7d^JP#>^|XRM1?6 zD~Slf`DXXpd2ag@9=1VkmqoHbmxcvuAtY=DYI+vmpsJJAnqPVgTRWrhZJ_gv7V;3x)D%SAU@nV1q;6a& zc{sa_Jx}L}7bouMHkhOhga-;l58XPrcB@4J(820#MXI3p(GxAJg-0e^fa%7?%V`uw zNfZVnm$ka`DXMtt^HkpppOW*977Mir;l^TuC*Ek}&ypzKDo$n40g6hx5&Y}JTTB*e zx=c^-JcgSmqr`XFnRqP}xnFp{CKWE5yCk!E$)^AZ!^i$SYZz5A$CF?ts=@=Bp%D-j z=U1!hD(lxSPt=?Hhq_guk|DbIGmb`}%&)y0AL%3osilgU+ZvOj_>AkWP`9kvEr7dx z97t4jL$htAb5j|Jaj25y1;HcT39%E=gEliA#Ej zjgoj=p;mu33bLi>sEl+H;&5Eo0II8uhye-qj6C8U>$b{rPK9lRxum#mDJ?Yy(Mot= zYJlnF^10SIm8vc@&Z2whJ!NOSh90E9w{URQFIc~TUD{r?EDSTm%n5hDDmJ#ySug5h zGMK9%Un6K>#gGHpe~wMP7Y11#SVa%bhmI0L)iT8YIN@jKxWRk^Rt-nm2n}O>GE*{B za3z1evC1lW1m;2=@({YC{8iY&ph$#!i6+}?6A$p(M2+ccNgz+yz#@5fOZRY<-e4TN z(JTp~{LrO5QfV2L)mWH{BWst*>c5?M@0tS^%mMFsbL;VP$VlV>gaK zg*k~A5E!08dJe7${19ZVCAmT|PAGoC>KXP}i7WPlF#lRv^@pBn>+%o+wPcz}Gp;ar zOj0$^?ru+RPnI9?Yto_9APK^S$B-twfwngf-oZ--kP`Cav{ZV+{^5`}9N$B#AsB&T z`SCOzO8FUArtD$*k~P4blG#bVUrzi8QBl&dq<_P_vtNvVQPa56|Bpe~dNW@(SQxkd z@umalO}$xG^X^A8I0kfeMb-r)@2j@SXpv;Y$o}1Y5sPOMtfeiAO0p#L+eI>tmf0P% zDxWc2%-+S`81QbTov^0xC;iI$k4s-$cn4Vyx~Gh3$^{&R;N>^!?EG|wticxatqZ}V zBHbPF*Q;o~)jXRA6EJ9(fpHM7fV`dZ0}L?_agotbxZq*p9i;=nTtkz2NkX_bY@Y5# zF5%3k=slcU5sbYXC`I;o660UE%Q1o}9>^QsEaQHvj|JWSJj^{uyhtIMP zxtlLUX-c6N&oO2!j{tsj!uC)>m;lcb2lL2{2P^g&o{>kL`lzyBdi z17Qf%Xa!ZRtD7_S@o7d%w=!E_Xni51H6*sgQ*y45XV~qGqyW#7>04(g)eegv7C+?p z!BZk`@d(V_1`qlv0{aCXWQP2xBAZ&yJHG6{}s>o>MHS{S1k6n`mN1lPOAB l%r1T1 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Logger.beam b/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Logger.beam new file mode 100644 index 0000000000000000000000000000000000000000..30816f15ed89331ae0bb976e4f63d97462cde7a7 GIT binary patch literal 8764 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 Gf%qRoi9A98 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.ProcessLabel.beam b/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.ProcessLabel.beam new file mode 100644 index 0000000000000000000000000000000000000000..2f0eea088f86809a25fc841749769a3a1b1a17b6 GIT binary patch literal 5056 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.ServerConfig.beam b/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.ServerConfig.beam new file mode 100644 index 0000000000000000000000000000000000000000..c0d8222e25220c7554fa29009ff7874b6ca978f4 GIT binary patch literal 8404 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 avidK#6R6l}naEg!0U+NP)O34LwEqDXP`}^+ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.ShutdownListener.beam b/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.ShutdownListener.beam new file mode 100644 index 0000000000000000000000000000000000000000..2388256c2dde0f7095d6eec875009f77eb387ba7 GIT binary patch literal 8760 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 b0l9ZV?rorP!zen90&3qL@b8de6zYEf*petE literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Socket.beam b/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Socket.beam new file mode 100644 index 0000000000000000000000000000000000000000..685db2c9bd78bfb471a15a763459242cc9d84aee GIT binary patch literal 22208 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 M`z9f&uQ1a80fRC|mH+?% literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Transport.beam b/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Transport.beam new file mode 100644 index 0000000000000000000000000000000000000000..62690f788ed94a585882aeca731454a765e94599 GIT binary patch literal 6408 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 J%ytX{{TF6B4E6v3 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Transports.SSL.beam b/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Transports.SSL.beam new file mode 100644 index 0000000000000000000000000000000000000000..974e2cbc748c3b0c66c17bffc3bbb40a7242173f GIT binary patch literal 12100 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 NDDaUy{DT1SzX1L(2RHx# literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Transports.TCP.beam b/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.Transports.TCP.beam new file mode 100644 index 0000000000000000000000000000000000000000..0f445f70976928ddb520e484f240d5cb6662eb65 GIT binary patch literal 10064 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 G!Tt{#tUL(- literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.beam b/phoenix/_build/prod/lib/thousand_island/ebin/Elixir.ThousandIsland.beam new file mode 100644 index 0000000000000000000000000000000000000000..9337d5c61a121332e7becec7a1856e09c633965f GIT binary patch literal 10664 zcmdUVcT`i$*JwfwNC~}nklvd}M>wLV2MP zp71)-`*!l1BH0MWq< zK2A6(B*N1HjsXm~Zo9&9_P;uhE#*16Av~S!v1qtcm>0|gZjXVxCz&MhEHR<$!@Z`#8b3|89!?pG}zq zKEg2&_W!6x12+Gr-xQ9)pfKDh4+!ʠva%nRZ4mv3+U+z?J~_QxT^z>&kA2rLec zgkz2)+5Vp|V9*fGe|F^ji3H$3*2fDD;r(Z}U;ds$AzcuzQb@R;1{Q}xJ0MX&0z4r! zCo+Heg~s{-2}C+q{gGG*i}>GyBPk;eOcik{aR?94^^d8Nl>W^k^v{m{&e>nKA+&#( z0WyY96@*?Kfdr-x+*$nhdBJXlKO86h25LxUE0n`-ERfW|>X4+=DB4FcdDra?#t zbQ*Jmz=A0iAX_EXd<+bkcpd?P=|tYRO;A1InOU5 zO=cKgh#L%{rGRp4&=F-Ol0r@YumQ!}Afn6618hLS5W37NfS(`0=*1ctBxaRVa728OWyq5(W?c+C(fDKs$? zLIZ*30c`A<5L!S&1nA|^U^$yXN5W0X1%_~*kOB9(H0by=$VKTgA#}!4RbU8rCWIc4 z5Cr!(^aMoB=Ypc17J;aLDQvLytM1=ShLPUZ15pz@00(QiX zEy@CzxGJR>A;=tuvA|D411~hbZ3KWC07?L;03bNQf6rAG;F}cyFaT@-umeB{04D%k z0O0Ao0PvmQc)Gv|ei~@`|DX$=;6gwv{0E)p1Q!EZ5dePc7eAr@_6=_f*jGR@c)E`N zvHvLmP5}V^f5P|UZR2tLgZJsT4jur<>&A}{?>8RD^K$_3+dh7LcpU%W$Nk%1CIJ6E z4tfB`%iv}4al->1KLr3@Hy$U@^+DoeD|bQz{+{DLyv^f>aE@UCKqLXc%lx(j!qd+q zaCq4#0N@{dEaJjFfj5~Ofgkx_8y5@=d{h6i4B>a3V;_Y9q@!P+zWU^?Jn%1P*NELU&Tthg^`6{0UAj- z4tRskqnz+#&;WoK09gR=alz-}&sh99etb;vv7iNj82~&#r6zD309wK0@#B3X^u;3a zu>d2XAZqE2tB4LF`XBrsMTc5$1i8C|&KV$GfZpk2enPz8zy^o~wqy?wp^}6Yo`6Ch zpBnH=i2PWPDButP^Fso=_wi{1V~@t5oZwijADIgV4llQj%CV6bgqxx{AYn zf#ZZE+6@IqBK#$R^9@!KcXA%GM;srBBs~$1f2T>n{oS=4T@k=UhzK_YCb_nM_TZJv z*tu>RJAwgQiS*+BB%wQL?5`ff_4o_k3J;liJ6nrbhM*(+%{fhLT55>6KRBFXM)w-- zs9zik7NjnVDa%+UJ=2q%y_{okz_wG^FCSiWo#m=%lZa#r}-sg&E0*r^)Vb9<2w`|l!}H(K2;{S)Q-LPtg_TDb&V&83C{ZBvdNE@YB{hH!l7T| z2)XX`rC*Cag3p((ykW8avA$@1?ZaL)-6k%@mopi|1bBY~AlH2Vc8Erkb54 zaeDIoBGJpA=U59^tRQ}CmkO5Z2(R^9HC09T++4af7zO?$#hT^z)*;J>hNq%5U!eAR zpxT!k((tp7+3TZ<=y&s~Tra%ztXJ(Yk9By>45Q1rgnaXOMHqAKMbsik>=lVm9Grc_ zAMUbl{J5^(g~hJRyv;$#at%*q&*o9 zCStCWD@Kg(wCcycK39d7It=if)4F_y`KL^QNZcI5zBfxzm>~*TEMK3f$iDdn)vZ## zPaiP;#)=bEZ)iodZ!7L?NR#6;uk=NfQFOf7!m@4cw#Lq$?oXl!w{)j@{cD!f2ZV`1 z()9rk`&U)d&zC!KlDPOPjT^TZu-tZYjD522g4#)q3k`^w~^umi-jR@KKqpJ(6 z_F)TBJAxLm&}o^kDpNI zJ)wJfJ+mN}uf%2a%3!>&SzwfR-~w;Qd0d)-RQFB_vHVoBu#uNDNV~F2*VmB`b&p1_ zrrV)x)}csVA^tH!iH@4?l}tp-Ju3~55NrA%E4~}Bw=W;u8YwDFD)8`qCBv9>j(aci zAn=0>-N3Nv;tH;JqU~$EVPDCHug={#!;VzBiui-2#1i31<|3$ky>AxzLP=keU6H@& z-9A+SFVyDuNZ4ysx#gTR!g)tTiWqeTU*ax zB5XpA8Qip8QDnE%)6KuvZ`%Y{uVdPAGhZc<^ayyac~q8zO5u%H*%acjE4h|-xTQ5_ zU|jAfr+Ea%{E$B2_;TN$FJX&=lQYB8ceHVLqqAW^oI|X8<|)H+OnHVfW@O8`N2|*c z)U~-9^qDcPtmuII1=45NYIfn}*@n5-+6|lfITo*$V(uGgp{xbz`OT#@`)5P+GW!_g z7&I5$7Iq`nlPqSdK2BV;kC^VCw!S@B>s1wyBj|I zbgkLca4!PUv&tJC+f#G&ZnKE=L+n0_z1%4jQw%!3_TF{6Pc2Vei3>}^Wb}Ycr`PfGbm2Vc7J!qbH0=6{v??~QYAx0iMky0Ym`em<)|e0bKRhv=$9=e zrEu-%S@7B$7sOMv2#ZX@{Z~_wU*6pt$c4DcoTgA!!3rznjT;|mLm5QZh3v$`vzoq| z%6%u_F!zX>57VVydz?_>ugt_9NUfbN`cx}!P1PrC(T6!_n1x8qez&w8`{<=Ck6IO^ zwXbJr>otPmdrZcoh=P$q!tel!8^T}jIjYg%IIuu+*->rX@)LJ4%0>3Fv;7)6y_9gPNe#p z*|QxT)d8lpF4xW-;=mgDflP|&7d&rWpIIx%Gb=|MQ6#{1#&>C}hc?ot0|sf8QBBXo z(sy`&2(T@go9XZb?)W!eNM4e0)HBt)7)LP5@Qiy#Z!NhAXE36o)et-K#KL_0u;XXY z7HChTnloRrAzJ-xpbeQl|5kp|lk&LRYeCAlTB3#hlEm^hdG>MFn{~+C>Aj^J{Zc!= z46HBC%N2#>lcx+Ai&e?h56)OVfnlOK+I0ET+9G|Ew^(b`%wlRX-}I*Ld)21DxLqeT z+mrEqk<6Ez-*UlkShTBuHfDEQ=luO$luzo!-KRuDV9~y`?0t#Aa?7nXoo!#b%H~fl z7E*hvxCd_41Gy>KS*uGf{2B38Q_n9>l3yTu_^ z%XNQ)*D-f%l%C6}(%>1fl^g-f2qQH(Gy+*qJVzh)Duj9@B#z30&C}oYw&>3Lus6%& zjM*#Sr+L)cR6X9bZ&KuFky22bZ^hY@L5NR>-arnV-WaKTIMP*|0y-$(>uaXM4R*RY zKHmYYx~^Se%MgD}vGyFU4gP|)dm^4!v3EdobDLzaB~1rvkIgPcdxA5bYDm@`_WJCp zY2PR8Is$*SI@_#`a>4?K;9C4yOzgXVcKMYHvHX1j_gMOrF}>AOjLZ?9kV}_*B;_sV zXKZ1CG;U9>7@ZO|DslCC;Z_pYA6FLh{!!fA%@-BIX+QZ6DQRUO_QA5u*FFutiA5a} zca!EGJV9x{wYK~wmP9Q(pTofNDMV#!H$>ZuYm19X;oHEh(HFO)D2YMQWnXGemG8O* z_VTeg7{$nWYsz~ng*~@%kzAqQvs`Uv11%YLoa{%bmmef4+qhW|I?taKS6?bGY}kuO z7EWziwPebrR>qG-&bj+|^oL*Nc#bVDyY^$rb5^eI=@l`BqF40~1CV~P{T6o*_lPT% zatCg+mA)7n=a(z1Nu7;NgE>QJUO!1$N%x$)I@3}_vx{|lVDUqe{^3)j4bw}L{^2!j#qv4X zr~qL`&30b$);dl}vW#c+XR?mc$|{VKmo-ii&dA$AS{R#){2m@~e?dMtHRD1}m>IJm zmsRd-Vi^3;$V_>5dM>S6PPBLqOt9$hxpN@NQ;jfY^`C02A6{|nGIDrbEH*y#Drb%U z#>n0BG;_W;?N@_d_76po6UFEBvoY2Mnc*Z^L9tIlJ?K$64+LOc2R+{_$0fp>>f3L5 zab#~#+Q_JVdwWN6m+?iz>F?V-V&hjMji3IIfKC7N5p1yFf2`jHof!f~w$S9D_)dA%kS9@fMDgQPqD*`8t z^r~g*d%>gcKU_&)zQYB9ysLX*sZ(`zHZ9Tiaqr8q`$1-7+5u@%E0>|P?JPxC3a4Je zB55C!={wm!C(sTm-6hd5dggnb{(Mt|*X7>P88*;`sf}F@_G;6?4fk14PlP56EE^q2( zz^8ZCP35fSb!U;g#GFp0d7(?YqCtcea$QV2KgNO|&&UsqS}3~K`3$B$IoNF38cb47 z*E|wcXjjVAz4^47Dhv~WDSE8IFE7oZLV>P>V?#@LC~I@rv>I)bnO|h;b%YK^NIW-x z#qJJjbmnRwNd76?L}(z-7fn0aKf3vNm*d{gzD0!X%St}5ro6(D4Mr{3Xn;oHyC=M3 zyFvoyKr@dJ8Ozq(sC$L07`Ou=C$;<8c5R5do6VPtPm4S`xrN+WFo2s?Go{;Fjq4#P z-RtGtyzc1wGEl%J`I-Gw3mcJdxLSF4xqVW?xtF=0uc8GiJs+f_H)z#gk}^BKJj(G> zicsp3MmyFEsIpUW?s!r^>Vlu1^6J9GKiNJC8&Lk7U`kx2<~&uK@K~3->4DBN7yyb)Odkb`Sp_BKghYKQddnF|Hi45P9FBr~XX8IXuK&@6g@5F3`4u$sK z*cwQ_ym*<2#m1WQwdMEtu?WWGkcHbTx7E7Co?Y{j~%p zhONkp80E6@-f&LgxsJ96XHC~M5*JMF#kcfW)#^KQxPIOFAdi()eRW2G+(}{2sZu4G zwkdDzExp*gN1ajZj?2B7&^!I+$w5t;wlON4!vZ^0Ef&(NHeFP;wB8N}X~ty=7ELc! zg!?*Vzeo8k+-Cbz-HkSVOSi$Da(%Dd zyF}<=jv~c|B5tbzqwpLOU8h`VJ`Q@*)!XjogP6_riPGJ(Z~2b~iN93YzlyC;+?Mfw^y*voROoJwPB5WG<~@6RrE)tz?qN4OkgAX4fdsjqVx0LvVQK$ zI!lKhVvf2e^8_g<_YuK|W~w1dua0g9Dofs3Q>EJbwwZ`BQB&FF5X^a+O+mnUIB;98 zGdx)`(!yALxBa&22+{ed5au{=CKx4Pefo+1g}uS+1ZfN8NQODFMe`5o4MS#ZDtz^V z{UexSDtd`deL_m_TOgd5*iWlk2>~THm?ur3q|0k(>Q^OMi5HlZ=SjLIQZ zu|p*=(_Mwhpc+A~iPx%2a9){R6ql4=|UP~@Rf9+ORPPqCEmHBwizOiszA-M9AijL9OUKJx3A4OXR=Jur8TQs)@odoH`f z^fd9MJ-gmfE;d~MQ>beIdl6ls;Dnf^$kscVJv+09JOr3?`{%@a3#xrK8f!I1oYvE3 zTJm>GACTqPVHQ@&bDa@*fS8HIZAD*Q+-*~y1JCJ&*CV?b*R8|^|gjP|rpG9cZ+&b%1sARj{Z|VwFsVFGsL0rzX zb$(X^n&`OYtPC!LRhSEHPI*+sJoA`S8`YII&p5rG^(@R-PGLxq*HophcAlAsf;cobdqS_!QYZfI zxyfR;oVkjp5%)df!;;WUS~WLi+EtqCAM*|rcUJpvt5Ed@%`?6pJmag$qP}vDq3l)f zwK!5Da((7%n!x*??gf9Z0TpGKRSAVz&K_O6=s+hQuGjhGS9S<`G zZGx=(I+Nq=LCM7%;}vg}+UVBp&bZ$i>kFY$EJQ5lcvMuX_qjOo6OG1MCD>p4+E=Ho zxJo78kv_-DU$7Z@pl8edlEb9Qg2Hy6Rk}xk?b#1quCH!E&68N@=afi-IVYB}kI?uZ z9H9j3^L-<&5!?5q2@%@$kcMiR@u;7hyv-HXOiC-$E1n(Z4afq~jBzw4c%uRBd{^-0 z%Gi3Mn82C^nuuDtrNuxUVt7!W*h@i~(x*wE&lJ8GKr`rRpvx}xR;7bxs-@jRnvX}N zv+wO#e1%q62%?{L$7jc*uyx_#flk;?JF$-9Wv;6>Vhfayd=wGzm-bR?`|cn7604jJ zw-US7{moya;(NmHY#Au2e+isV^K|21mY8sP&V2cKFL%ciWAW{InG4I;cykkUim}Zd z7H^}&Gg_ZC>IV@QiaCAe^2)ebT|jEs=k}0QH9d5IZU?QNcYi|RAhRH(Dk)vIiI1{G zR(VD!U+hEo9Xkig=7#$G14cp30%^}pQ=Xg1m$eKmH1C=Ci%DM-=I=L>6R7mPcbVYg zekL*a_-b!k+peLTBGLLKBHcy~kE;)b6?+dCtFJzIhrk7#M}=3?^H~&x$6OC_;xw_9s+Ksx_D~3aX_g?*3~eCyZL&+j8biTey_fuHjQg= zF-h-zduLebm-tn(&AE}fX~Wng$*$hwahVWZOA#1`qMNLn_8AFh-1bbVwae5diPXkw z_+X>g;+Y2qxZ9o*EuHp>o);3lhFKIZC|w`8h8CRe6tAFcJ(cPx%{g{>zlFX)S1!Ed z9C2EL%jjIWYk^%LW6-9u-5WCJ(Ev7FE%zvr4242iwPcjda}Q!xHr1zh&p&tF5&0NlA6))*BFUza z>DA{29(nEj8>d!kmxq#Xd^dP{;fcDJC*d5W3k!|zIl817J$qkh@a;2EkFMz%)0`#o z_T6h;X$k$rDZ8a=+L)wXA9Q&}VnN5#vXW%-r-^a;mKppXFO< znv1mZW7_lzLG|2Y381{W_l+zH-)}glFJ2Hk$=8F9Vwn?(HH+^{lNLC<>ignx zt@M%uZ{gZ@u!3l(j9bj=t%DAuqI8B}9o^3`v-gEtE$?m1Ua?G~6*TdgZ9mBBXZ@2m)G5pzL&B;xgKU63JUA$eg+R&-q>I9N*N8oEl-UDjh{oh9v zg$t%tNQAzvLnTanXr3ZE$i#x9cRX*l(ncAK*_fSvR>iV6xZ!_myf1XB`y5fF zcUaq&%ktL5)>HQL`U}~q^)apAzt6%G8jBnPPPfIE2rRUN+4 z_$xfHAL&W8&B@gx!1-S;AAd0sViB%D4>54j2vpkO<=hC4n-d+*zlurxh;Tp|jr)Hk zo@nrbp??Vy`jI$!qOfphd^~(y?ta9_ccs60|J5(Tf7kWj`t?r(`Qvi- z#CszA?e6br9LM#Sx!HkK02~ZyR5#s06Z|DDh>HYta>;Ji&|3CNnBq+z}{A23CK>x1#Z-3># zX#oGbhU3ZjtDE${`{DmoeNtrb|3c}>vhZ)S_N4p2diuZU{a@t}|JMfKejcbC0~R%F z0DeFCng|8}z_es_WCvu2WJhGL$=;AH36lzw36qlzlZ}v#k?oUpk@b-E3bP5blYIuN bY8d~yb^v4ntOtNDasco(C1C0!5a@pZgcT4p literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/thousand_island/ebin/thousand_island.app b/phoenix/_build/prod/lib/thousand_island/ebin/thousand_island.app new file mode 100644 index 0000000..73d9569 --- /dev/null +++ b/phoenix/_build/prod/lib/thousand_island/ebin/thousand_island.app @@ -0,0 +1,24 @@ +{application,thousand_island, + [{modules,['Elixir.ThousandIsland', + 'Elixir.ThousandIsland.Acceptor', + 'Elixir.ThousandIsland.AcceptorPoolSupervisor', + 'Elixir.ThousandIsland.AcceptorSupervisor', + 'Elixir.ThousandIsland.Connection', + 'Elixir.ThousandIsland.Handler', + 'Elixir.ThousandIsland.HandlerConfig', + 'Elixir.ThousandIsland.Listener', + 'Elixir.ThousandIsland.Logger', + 'Elixir.ThousandIsland.ProcessLabel', + 'Elixir.ThousandIsland.Server', + 'Elixir.ThousandIsland.ServerConfig', + 'Elixir.ThousandIsland.ShutdownListener', + 'Elixir.ThousandIsland.Socket', + 'Elixir.ThousandIsland.Telemetry', + 'Elixir.ThousandIsland.Transport', + 'Elixir.ThousandIsland.Transports.SSL', + 'Elixir.ThousandIsland.Transports.TCP']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir,logger,ssl,telemetry]}, + {description,"A simple & modern pure Elixir socket server"}, + {registered,[]}, + {vsn,"1.4.3"}]}. diff --git a/phoenix/_build/prod/lib/websock/.mix/compile.elixir b/phoenix/_build/prod/lib/websock/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..06e5ae8e66e55d07a7f3053c5be9ebb864b9af2e GIT binary patch literal 4829 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

    vl-{Kq=COIHTsE1{D9$bZ3Uw&) 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/websock/ebin/websock.app b/phoenix/_build/prod/lib/websock/ebin/websock.app new file mode 100644 index 0000000..cbc7dce --- /dev/null +++ b/phoenix/_build/prod/lib/websock/ebin/websock.app @@ -0,0 +1,7 @@ +{application,websock, + [{modules,['Elixir.WebSock']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir]}, + {description,"A specification for WebSocket connections"}, + {registered,[]}, + {vsn,"0.5.3"}]}. diff --git a/phoenix/_build/prod/lib/websock_adapter/.mix/compile.elixir b/phoenix/_build/prod/lib/websock_adapter/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..bfaf432ab93faaa774bb3bd584831ec92681a5a0 GIT binary patch literal 5277 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/websock_adapter/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/websock_adapter/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/.mix/compile.elixir_scm b/phoenix/_build/test/lib/bandit/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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

    LFzY7)ki}$$h!-C8f+LWn5QTKx%Yv@ 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Clock.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Clock.beam new file mode 100644 index 0000000000000000000000000000000000000000..94d9a8cb9285de302ab59ff984d2017be6f1ff35 GIT binary patch literal 5000 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.DelegatingHandler.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.DelegatingHandler.beam new file mode 100644 index 0000000000000000000000000000000000000000..8be11bc03b3e8e883dea4c7bd9326d1ff95417d8 GIT binary patch literal 19276 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Extractor.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Extractor.beam new file mode 100644 index 0000000000000000000000000000000000000000..7491021fa6cb938b65bb2fbbfff44ccfdcd622ff GIT binary patch literal 10664 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 N|HDKclr4&a`Y*P`OlAN8 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP1.Handler.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP1.Handler.beam new file mode 100644 index 0000000000000000000000000000000000000000..169fbda04a0282e256e1e6ccfdbe812fa2d539f7 GIT binary patch literal 25732 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 Ro`eUOFMr^F8u^Ss{4biSXcGVc literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP1.Socket.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP1.Socket.beam new file mode 100644 index 0000000000000000000000000000000000000000..2c21a6468af38d8b121a52e3e8e33c5de3b3a99a GIT binary patch literal 4420 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Connection.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Connection.beam new file mode 100644 index 0000000000000000000000000000000000000000..ba18d6b513e27c6ee67e698eb516280bb4ad5f92 GIT binary patch literal 43464 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Errors.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Errors.beam new file mode 100644 index 0000000000000000000000000000000000000000..b88a00f713d2027fdc7ef702c83aab58ce1f9405 GIT binary patch literal 5260 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

    2}~eBuHf7h0Qjf{ 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 A-v9sr literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Continuation.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Continuation.beam new file mode 100644 index 0000000000000000000000000000000000000000..85961255faa0c25a14e98bad81138f68239f3d74 GIT binary patch literal 4760 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 Z?Wkl0A&YpQ5bqVz$d4=r_zrG5{|hCNpo9Pb literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Data.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Data.beam new file mode 100644 index 0000000000000000000000000000000000000000..82c9e565a44acb0ea3925d6ae91a0113867c6c49 GIT binary patch literal 5652 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Flags.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Flags.beam new file mode 100644 index 0000000000000000000000000000000000000000..1de70942e1bdedc3643667721060c4df84731377 GIT binary patch literal 4880 zcmd5A30MHh#W%_KyK7pP>}>Gt9U>_A&OigsPzgtCSgJ@G6M;#Al{;^P*$mNE-<$u&|@#6Sq* zpb?SbvEfwma0r5 zH}FN<>xf2R6f5>&uvzXHj5-dtVhG5i{?rtmvM%~OLkRtd035LeH0x?@P1Dt+Leix_!#z-BR+ZrP!h1?ilZDg@ER^AQdsd z0ZNlmgOzy#G9aMjX+8Hha+wk^Gt%r{3(`z+LauL=V~ie6OS!!c$VP!{a6LUa8kqEa z1h_DZR%Oi2rURgZ{)LSBcM$_qtXBm7`0xKM1r)8N+6)ba>jB!+3@)}+_9z3QqCE!v zK_2aT_DE-=#gZ$;)GKe#$?M*t^Za(v)Zb;#+`m0p{Qq~z@5za21i$?k#PFZc$4W7z zq>JKLDuzc_%%4*eHa(BfKR92ko<08WH32gD_U`}7*Tiq?kiU9O{FXj8*F=m~O0UoK zT1>BfK9<%q9Bi@y?)!QbK{82=scSVD6iVO~#q|YiPlhc)LzZ}XfZ7@}ULyzc7fkX9 zy)b0rdJ^ot(;y@yfKL;&I@4a9Ho`QxYP2F!CpKtAmOZ>)q|OFSEDBHn;%7~`OCS1O;^y00p zpQg7-Mn1{Uy>5S|ES7h%s?=$WWA@Irrz1NL%sKgNRc)}Zq%3+Ek)UU+U{!KP;Jfll8%L7e6l>RadS^x}Db z{$25wC%3K?EbrfO$<{wcg1Yrrt_TWnJjRT&-Sr@s{9t$oD=sFUC|=a`*?K-{`)QPW zpJ?{=iI3hnwnmp!gL2leKNwG9$fVR2%bd34-B{Mx=SuAakLH12^Qr^yH`a3_20k3% zD@w_9H%f({CzSiQ=%OF()qJ}*++$tGg5hVUX04Fgm(8y8vfZ#(9#1$f4GUkS1+&eispze9vnnW*a8sl2fpLhn2? zY*QRx`#@C_=ez$@2Awy+O@HDRvWah)bpIzmk-{*+HmTrCvj~@ zS)YUYr_V-?m{WfI=Bj&ZcM01U30od7o_u9})$v2Avj>H?72dtq#5ob>f8ybu%eH6k zR}0&B-*w)dv#3^AR-3ygz3kZ3B>M)tGfzHdXQ>M{>9s-kc#g;h@14z{~|kJhu6+|#r^Q+Bb>4xZcH zrKnu4Ts^aFx2$@-*f+CgPsF~&^4Lm;{mJFArSY9{H5d)kMzAHLOnACa1RNvy4e`N0DB$A8eXZekdr1=hT+DVeihAU9NsX zw@WH#lqPLlz3h^`JzAhvZJQlAqgSm*l))pB{bA)sJe|eSefRB^%PG>3nbBJ!yc?m5 z53m2dsueAmw&_A%_JDQG30pbG_!vjM!utJ}S6| zpDw@I;1hp6RyE)TYel}h;_!tBz0W%MCXRi7r;DoOVtxhDQR^}8l*{grx#LuMC-*({ zynMg+#iK0GZ}_h$-$~DhP4HdcHC8Jn!4&CE&jIi?Kx}-y+R1Un3zMS1V`-^o zvRhm}qUCCK+VU;)XBrQm{m$R$*F3ZLtW!&~m(QIvSw}{>9$!3KnkBi?Sr>+$8s~Qu zn%q>>4MiHqq=Cu3egT-39W9q0(o|fUhU-O{ffQiD25ZaxjAfSqB+cg~GZ!HV1t9eT zH$C7?1Qft2%Oq)0mSt(gYC>xMvXT&#TC4--ub+Q2-=f1*5hP{y4Ne;1+@dzWl}d{d z>o>Y!ns$#d;JO9G1n#U}KP-ST0l;jVi8e_#$u#r^)Nm)8t-xdIU=43c@Lq7io D{p~Ws literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Goaway.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Goaway.beam new file mode 100644 index 0000000000000000000000000000000000000000..261a16bb5aca0d797bccb77aec5fa8e0466f3d59 GIT binary patch literal 4764 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Headers.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Headers.beam new file mode 100644 index 0000000000000000000000000000000000000000..ff5d2363d99a08ad3b36b54b21fac63936170e1d GIT binary patch literal 8556 zcmds7dpuO#*Pn~a%!r0@>&8e#Zo_n;l0l+Ugp#N+W)6liGiHWC6uE@t8I()K<5wc3 za@V~`N=cNG?kTz{QSm6{-DifPdY+JYyRgo52(qJGi+yn;9?T(Sjgj2Z+Xic>HK8 zmC5$yP^tMefq=*K2@ybiE}av^WwM}r2E^q-beaHSltN)#4o|?R1~KM|d_&lD0h7b# zdk4|zJPw}(K<^+9BZLKc^98&Ry1*Oav1n|+_kNIoDrpdpl24^d+NspiQO)ewAwk|e zh!H}EN*NFz;xTC~W(0(p`a8|-csve||Afoq2sm^OiwePYXYucQh|Le-K~$Q6%7SQo z0hh@ZKzMt=!K3oP` zLbM=^G89H6c(gB%<`)F91sFvM+qgE-D8giT3n8YTzktXIboQmO z_z;QBWJSZ~5YU*c(s4GyC>#B-iixQaFs>2F$lHg;2%>Q@>JuB8Y!;IZF#rSTHdYz) zAn1%hAZ$4d2!W7V0*ZJ*@Kp^+3lJ8G&q1J+X5x{=Md;mX7$viKn|PNHABeYhTS$8R ze!KE{ND{>!fhHg+6eaNMOtHsWRt2yR>o3j9V>&;-!9nutJ(WbpDtWPT1FrPPT) zmQw6Vp#6flibuBK7m#2Th_`)u261j+MOR1J8kkv#um1sOp)fp9ycP%2*y{qLF$!ZuC zoC-!S8mG!d;qiQ&YBUO?iI2spiU3zel)Pd-2_195P+rmf03Mk`iIUDIxuc0#q68u# zbDSfk^C|9R$^ku?$JyQ0JI6apx)kP8)RvQWcGu=2wR5W2( zK@(Tf)Ab;koS!Y7AMH*SA>Cc`$$O;jozeMf7<{J^ZU!2sp^ekD#SzIktytVl0!}*v zPl9Jm#LWU`!zdmi)5Y^7;ZzXOQSwS$pgP}BUdf#gR2M}_b0wWKaS zKd__<9Gy5l1QMePM;Km&#HdLiJQAb+BknL$#Hc2c4 zqxVV^&?GgYHoUH;;YmdCDw{)Cjn7A7rpplJHISGYVi5*FgodU33?xQVTsH&*5iR94 z(FlaAfaeB3JeCJ>;d>$=IY1y<5%PdgfF=WipD}{ad%N!ePtgkY_kal5WeH=kq29O?%0fNVX%kZTNND&Y$1J+Ri5X=MX z4VU2yo(rr8jH8x?u;Dqvt?eH;Fk@R}05FZY*h*-Blo0o0qoW~ysv|*NZrlNYhKBp9#s-03eBALV&9zGh z>b7*FS23Sdp9k34Sa^KQc$va~KkW#|TM$?u-kF8ttUm_*)_!A+-)ARr^{=**;6HpX zsgIgXTmh=j7f+4kU}wG5&c&4oEEWV2g-n4zF#_Uoh~F0uQO{+Wt%a#6xvprwu^GHH zWyDhl1;i4u4D;W}V6sEOIf_B#(ijXT+mFbC*nU9tPqG|2bT=RdjvF{u3<1IGp9shR z5F7&)I`fRaBVUM9h`D{1_kZe4n{GHT_n!R~aVYdSJdYrhb6cB*0UC#Ce zt@pmK0NGG*u;|q9fn$ylb_E8#I*inHkEz=w~UKW2P-Pb@{K3S|>%C4c>yc;OtU zcl*Oj(zdrxw;afQMY(nK+|e1F%}3hWoCNj9ARYPr2*z16*5-5#6M zMT8w6KW+Ka^6s=ou>WSW${_a|nZcK)RSyQj{9RXCF$Z6U-FzpNe!uWh&Q}Y;!@kw0 zdkvVAZFM|9)_X$F72Yak4NT$$1z7A7Y%id@Ts%U!R=$1Se*C4t)n0!0LRR@YUlW#e zS4C7h6&AiJ&SXdIJh%FKUQOKL*MSf$3siJpBfad_odB9xjR$+k!(S)OZ9MD>zASgVN%)~ z)m;A>3uj$EWf|g|d0bj3aIZOzv z>u^ronS|P~z>&{R_fD*$+{NttFtsh1<@eIFn5B}zk$FC^cVYGBO@GbQeRQdeetJH= z1(ma`tn#sX!uhjHtit*}zER^SEZCM?_Vm>|?lb$>cc%sGavp?#=pV|ue}8af@bPxf zMZ%q|6ION?AL8x4%=h-hYIk3>FUchIEYb^%5(>9&ZK$d<^Yt_gOIj*bM)vWjF7wxL3Nlgx$1@*?non3Hg;M~qjOAlp}%VYY_ zW}5W}eOmn2419&gj^agv^aW)}Je}fuJug**SNoAv9b6HMbr$tiVAA*WJasCGY4;J; zw>+HhTyB?isA{nJ!p1?lgqd4Rk44GYL@-rduvGzmKHZfXMz@u36IV72^`Ew!e16)w z$1zxL3 z!@Yzc>a*w#ZGCS-k2eSKr}`Z(ci(32{%3IUoBAoNFIKNxid3^YihAz3%Dhnc^1(N_ zh5C6~({aD0bJMgIS=eU2U|ubE~&E-@#+<5 zQg=k0X%#9(|4x0adS3W#fwwx}xctzb)0hTjelW@RY2(6+>XjqQ4g_n?diIs&`xYY0 z{pVQATU-4#HBQQpdm<-qsy5wjxQ@#s`_F(D`KThg$C5*@-8?fyxv;QLFie%vXR^<&=&=sUXg{8j+`RYKZ)%m zP}ccu!*m?mwU=mf=Z%hTqNsOWfAkFnIN>kQMR9!!Zkw+bigPj)A)+}Zvq#F*c>aM17}jSh?qaHR77R#%bA zeym%W?rPx`^6@jyHl`T&go7%;gBChN?5t?{!Fic#f$cMbxZp= z27dR_he_Tk{;0JjNwKDjKOBB_fz<8ASTj$kn4;g^>D^S95t3j!9Mi}bMeE4uhF5pS zBqj6uWOYR@<|OOHc$F5p$1Kko3KSH$IUlx&Ybq<9<|Zx z;wGeD*sbJ}4F!Q)cRL!iY=5g6Gbf3hAsX)S)BR87%ckeOY2=JkAx$^W*C^`rEXyw4 zUy*VANYHZ*!n3g=4-JR5p|V^ew<)!+{cJu{IU{9_&ZCG! zhY}yJ=rAB3H!@GfT$=U7^`p=G4 z4Hw9yZ|^6D>tWM9sxS^3b*;XwmG5S>2pgCWPw#s5?QFn{Gv88_XOz2E_sXqg7ofY9 zUgYU}1+3}aW|~#f_2L%tMy=@Z4AO$=x}ANNS8%Pnj;<#Zp}TY3SIOQ%{<*{OaJTVI zq#A#D$OX9-chX&}HLrS4$}+F9JJA*vYRJz~OEfk3Ft=b%0~f7VpRI{#NGxPs+GDPM z5qAD0db6GCTE1FswvVwwgW+P2Ykz+DEa$MS&%z|`l+85hgH2ug+;8>`t0Wrpn+=%u z-(+Uxzc^EHD*ilLKkL~@uh}hVgn-}uvRuov@q?YHs;P2P|HI_VsVCpz(yMe%8SMKI z8vibt;ZpOYN&ac&dJn~+irLVKGMSxMth6!J4N3uNGCOC<-y7=xQoDFqp-6Zsm#L<= znC^$OJ3IM>Lxh7uW9W%W$4`wq%_>e_0cY6GC!6F-mb?M;3Ha0~pU>UC1}tWU8eovm z&tZeCi^>xl#3f3VAAI;m{OrI+g&L|1{Y3pqqq>6)6$fgeO~i(|FPIK%Q=Wn+m+9BY z9FMzCRRcS{C*3#`u#l8uAr1y9dh$tg^@{flyXG{9dFruRH$_uwYogZ8Ga61#FI1Es zs&pa?V#9+wBh+T1N0!dm(Y&HL!b7I|S!$|ZS3r5pq}~*d$|iaR%!l8y+akx zrsv$Qy%aBW@uD9LLu5s*G}}|_^7ww%#*>N7f81BRe#2r{av;~yQ4r{sHg6_f@Xcji zX4W^M8)m&en`}uO=ew`I| znP1s2*Zpa^;$j;qa*j^3xz*ae8*k;cJPF)N`a1#ZrsGv)u0N@+g3*$a zqj7v^6s8!TZ-4rf(GjEl4|YO1^hrWm|SO%9nQ*e`UIb7agx@NPW2D zTB%8jo5xeWO9sT#B;7!foE&v$o{!PSohK+$Vp}&uw}7=Xuk( zojcpx-f9FdfBkt?e{kgn{hFxzKE$KQzHciPR3Gc_IH0=Y#B+W2ve&bx5K}EvQ%(H7 zo?WitFf>hLqm0{;7|PMWLH~xh7kzKemTrmnC~L01)_6Dc0cE6Q%{s4<8S4^A%2)QF z)f}j^+kIwjX!fG|wO2j)a$%~a7OnXL9+i)B*AW#L52IaY=HGa zmFfobgL)~hbE@ar%1CD!9CY1WvN6RJrB%?p?_C8V^1bW*Z|is@*3+{hznv=xSFI^^ z1hcfHvV4)h?!l)%TXx24i}o#7j$EbJy{C!d%yww-yFZ((t0`JqtAw@9Kjx>|u5;pQ z>iSFb(|0GzXVq2jcbHa{yh=I7U02Gm^tuJk&0BQuFrhVSp4k*z4`h{~f^u?XsOw=u zyQWjoAFiYb{tRnWr?M1(1M&ho|{VJ8bvegw~7iJp>5;QAg!5g6>B>ogarTatlK!`^T zHH8xhNTKZLmksz06eKAC=Y%wcgbB?D$$XSh8hk1NUpC-={-}V_CXl9=AZVcsoyFlp z47g!JWU@0MN@Cq!!{yk+8ApD+h_8? z&p!zsmrMD3iITiaz=UMXzjOaKC-bk}0s=rf;3uadCB1&mntb5J5lS|3<`sM}|043Hyl`0{!;_=a)|Zqxku`H&_e-|4%*iyEP_x zN>1?D-?RPS^dNF<(fsN<^xp^9zdR5?PS+89fCd4&5zyELf4hOd{UDWSSRz&nYlt<% znqtkc^RbJumRM`74b~RB0_%=lkELNDtS>_AU-PO!m|Hj(9_J50aBf;|@(76t?&B{E og7^zYM4*0PXz(Wp`1*m2cK;PY{=y?gLCKPc5&mR5>sP*Ogf0H`M_GTCG)+#EKeqI zo5^M-Bq9PCq9EITOccwdVmT@R3_xsnFub-vI2aS4ASN9U1knKCr4E22fDte)4X1=oBl8HO0n@#-{Bi+At`#U`{e^1=SqqCIZog#80?Kf68q>iAuMC%^)a`Z33}r z99$8bVowa?(jlOXj#D@$5a$C*f`I}Y0G2yIFxe7c0vZ=4TMeRUFxmS3!jNqYSVsm- zw)Lah5&Z!$3aO(lf{2hy5RpbKAXyOEHVhZs_R%yp!{7lkJQdRC|~_#-PFp zsIZ?w9Rric8pa@YWQQ5lu|#OTS{Z`}H(aK`+gJc50D$cf6#xOiC;)g45CPzLO8_|D z4!{@yc)|N)4ZZiWFc{(wxkpOTW+zz~t z7gGTE+&G>vOC!f^Hs}W}o|`z$7J#9^I~BQe#cIF(+@Tbgow*p zXUafLyRY=_Sh~-6@AvmFM#NU%0Vrs0CO$p!L!H|Hur(Tt9`<9{LM?7K&}3}ThimpT z%<07qj|^iN_85j%tQIlE@)WR>2^hnh6u$8=CPvQ+_Ve`gYO3(@m^KLrdmDs3!iSi_ z?ua5XMtBGiXMCXXW4XB)AH)Ef2mp_*GXOk(cn&xLz+;BT@Xz?o1UowzPcSSjzHr18 zl^k~hmeZhFC6$|=|E+pO8^J2)1bw8JL;?ke%aZ`L_0K?qmO_M~ zaxXP)MRs3_+yRnOucSA9V461IXNcmDBODS?3V7w^~LYv z>}w+{RJo&QeDl2VW*4@-u0J&=z8RYlmF4;cqr+MH@^>go()#({MGwM$T7Oag-U!n9rs<4d`PU^Wi{&0WA znONN_Nw(DmEpf}88BB!cFAzeexz6I?S`)6SUdY#p7+r>w}Hn~29d-Ip08Nary-&}e)=*RU=wY|H`mXtofB()M* zy!nCiExF#LIqcN!UwS>Ob4BGca;47`Y)IJTbsM1V)%B5u9xfgQp zpC0R!yhYefq-g#>(n~uA-d#y5G;etn!dynAj55Uz_a5V~ru1c*86E$!Q!ko6P$emN z!MhcIM*k&qW}L2ivd?dg4lCmZHdpqqihrmVQT0`~HT{l9A2mL`ojtYxphq0w95b-0 zZ&TmFu9!YnRK_=^oY4N-eUSX7HRnnItGV*-%F{ao3%A&&x-Js#sQl_M_oTolH3sYX zuDNV7v%9PJ4RsRXpcx zzr>d04w1ah?QRhjM^FBv@>0YqxP9By?JGC&0>@aaO6z^O!|{UnTknCMTiF#IV;utf z-X6qUJ61LX6=yP^sJIcu89%xH(yi8e<%g!8`+af2-WQTm zhlzfjYy5It^Nu%nAA+iqviGd$I^~UaOY*OtKTx+}hWY-~dtPam`*NFmikCgOUw>lb zJS)cT3E630OZF7Me7Cjt0nF;#QdVkECzDT-m^kvl-FLbP?zfHMt zq`a=dTb@;r9Fxqv;-k#ZoU|qIwVCL4`*^pkEp;8&%f0WuE;>TxxlY*l#cAQuth#xO z^i4<0k5RX;YqD}*Vd}ovPZDPo{kBYI-%-A6QFT9074%SuPJa^Ln-cWo+%4PkG+OYw zO|kUOoz-0x%bP~NkcsRBEBEGH|N4k&L+{UW8sBXJ>%f5BG@5C^uA)Ag+Ryb_$y0hu z)1$swrow!uDJ=0Tv%O#Ct_;sz(%l^9kVj-H9$dRUv*M3lZd3Q1fRm9&16=i|%QI*C zZaE~6{?Yv>B>Zt#SA%mfum0lAF!=WGt9H~K3G#4Fj?j<0p?BHrv333U9irqZ-kY!a zC%SJa$vv~@;ETm|i=WOJ&(Ao!l)QXwW5B5Toa1d~LB^{NhO~ulbg#*4oOO4xzI5WT z$(gUSCq${K9ygqdrr*i!x>OfZ^VEIK49b$=6$jeGQ-0rZLA&eZvD#^~uU#;6=^>dF zWL>ZE;Yy*~mI^uXn?` zS&J&?$W7blSQVeiuJS!QEyFjTbk?CYmh{Rcl&5k2^&Mhg~QdlZ~zXKWtPdgU$p&1uhgt8M95i`b--n-91#XQ%ehu$^|pMrcu7 z+H+^|QQe}qmmjB|Yv^=N91|U5%r*JpFhk+_^2wgqbN4Sq%hm_RULO&thl-fdi@@m< zg7H=0AXDIbIU!e9n7d_O)ETzf+ID%5h40)#-vvRlgYCYtZG=Xq#a|tFJ}ctkRQb0D zA}Yrv8?V<#`g_{a^N)O6R$o`#>XY2=le=M4l^a=VYTD2x=}f)5<#eu-DOWYQx`ugv zQYcb*z2@ZTDSMB{PyVhw_*vp=PqLGyQ(a8Dms#9Ca4dQ?qWU$rUKEqh9Z85T+A7Sm zGo@@uinjBpjo5FWv2AYYJ-47kHwDJ4mBEz2_JBOkhdXyutY^F$iWg0M*P3q zSoVXR^*sBY`(7POv-H|OzJGKqrS19aqs#i^0ty$}EH8a)d8f(GvVZI@IJ3A;7}vyR zGH#SzT}HF^tSFWPqeln`$rFi0ZEm&(Z^k~Fy z3E(~lI6u144Kfi`Vj-ZAz$+9y8gV%hK{7-F@2o)#QESYXVk%UC6NrD_CSk1+qQ+#n zxJC}{Cxc>xH&4ljlMNC+$NV4efD-NS#qY0G;5R}EDF4Glcu?kZ9va*lB%26Q<%mqo z*BYr&rEJLcPml)HA76L>LN{1t!*YL4_s6)wk#V9}4VD=(`gcTl$SRUrqmZJweuC)F zkQj!8(w|#k0+#%L3#SqO*8lHBbJ%&<5WfF6kN%qp`jJZ@CI6SnFqnKF=fGzZa**YH zBETOf0`adCfn@mKBKdHpkBx=qfNWu6JO{GL2%yi@bE*5wT}o*LNNy~ojGGQLzSLq$lQ0Fhw`pNAuY5+q3`#c(-SEO6NttB~+< zR4S22i+OxZDrW;`v{))oh>&PGjw$$fG=hnElDOVD1m~&+Dl2(hu3FCJmW;UOBT zF+`x?BP9Yvj$kNHgf2%YW@EYTgJDuk-YUbSxRfsyaS>u1qI$L>61f6HxJVL@kBgEy z@&r^SLnSy8hhP*Yco9S*KqNR}AK{6)s9@X2UbGTH@Am+&^CZmO@M1)EZ0Z;(b{uulbYcP4PRDghWItD=y9T3q@ z1F{691JiRL62qDfv)sv9#uSFrIL%ViPW~==5Wd zjWGnI%p53~O@~`^SR@8jpAGlg(&$WB4}x;o+CYy(FCZJUsRm>}4g+Gs6nY^|--b;- zP17eEQ|MGf$~3AGoodV?QLN}TRAV+Nh3>pZ(=UX~F-~b?P)%&8rcA1tGo4M~u&5J& zGZcLSoudu0KSPgJp)-h3P%R*sqIw-V2c{UPS#+3U_~|7nMk=l)3#J&m(M-u-17hXU zOqgC|$i|CIC-2o{lG(;A8^W9koy}4iw_*m5DgFs(0D+^dXfP#05Jg(jp&=JdY|-RFec_2 z0D^szMqyeIJV1tkh(6H>EPX%(HeqKRAVP<*P4tPT3yAQ8;FEk662ecyE-@zd79leR zq-t>94;O<_9O%FeBP?z3yDCito@5+6NJ?!163bJFa3xuSijsp4J2H4=Vy;n|7(D4Y&vX-;w<1#p>PYjH zKNlVcJaHOfUE_01<$rKMD#v;cbu>POK|LOM1=RqUnx%4OW=Lqjg3y5QMJ(0X!cwAm zJZm|ENm(C*$eI@FJJ)UIOy|po{^H;~9Zc0y`3gFay9&f5K#~Z~MFC63OBP9a0v2&X zu}}%?3-HlEK~jD=fS3k|*fSFW5&MAHPb@&hUYG#r#{AKZ$8njHqiTg5Wh1H40Z9@<-Z60~1Zn1`g@6xdPg3qLkxS+Ez6Pas zRh8p(*t~47Lq#=unwBL~Yn{R}UWHKWgRG)S$$8`N{8W^XFsrUOw)9oysi8STRzt{n z+v<&WHGg9)KFnnl^~_n(Q)T(QIPRH+vG2=<{VT0=?_KCwyI{d#oHMwusQg~Ni0fju zW$8a`0t3F@Xy_eOMt)T3(b??CIB;oedU-f)_3HNn{Z}r{3m}=C+ZFDA^vT~{_Iqfo zf7#qSjbut&8t9r+Tiv@Qd)oX-dNvCvKJWVAn<>Y5ojR?3f=(|Jnx9Tz?V$tLF769` zbmh_2n@)Ns7ir1zSHwH=f(*_CNvoESOjigVlk4p-pY7dq)q0o2FR+sTn~hC#dSioy z@svpeS*P9l`y10!Up#f#1M8SSm9Xz$nZCB%|NasFgGSDweKCVhInydyQVVvt)i>2< zW9xJElLWp#cE6^*)$e@%n6@yycN(v|^jx9owV=?p`ZpYr_`vq$dsn};w_1DM@Wb&r zMyt(bb-bMRds9wJ+?hWHojk&(3QQig6#TWTtSYm&x2VX`ZDP**)HAjhA`ZUTeZ-O9 z+5BPXHiCVtoAKRrxAU5z)GpIqjnU`dHEl=^dw5j%i?Nnj zl@Aa0w%&PksaZKx@O*I3jN`+W1)Uwpi-+zj-+g#LG~~BtxId}4)5Eso{h;RSRjXVc z#wwn?miQ}w?SI`;+TYi8GEVon!$9p$?Yk8Tg&(FIy1(+3V3qg#MdP;T*vyyTiq2Y8 z`s{pePJiAl4T~FwL7w}x3?4Z}SJ7$$_oB?(Y37B(u449STTjcTn3W-EFTag*_PD`w z>W`dw?`YqOg_|D#m6o|X``!MqF!Kp#+-qdBsIupxmv`PeurgO2I@hx)vMKUGLGs$C ziL3QHHreIJBGtDa>iBe9VckEumfi^We(SRPQf5@kxx6TYq2T`fvWZ_Et9uj9ZnRzD z(pe6qXmhsoTw zeeDI!I#rj7u08$!?p?f+w7YRboxABvE(hyn#zvg&j&qL=-5S?*@tRija%uH)S;1ke z9BaFSrS6*J>bke%x*O(tEVHTUNz8baTD4X(Pu4!OWY2?v>1VTgT3Q!Z&#wPoqiko_ z;#Z;PTa0T;%bhaqn@=g`n=_-FpB79Szwgd3ve>vb_l)Gl>hLKcF(Rm~ z$tNNM9w$ty8$2Mf9G;(l4;#GLn11l0;WhL_)5a@zr!LLd+!dAnJ}f_`CH$ye);!aS z4*S^^Z89+(y$ywB%)Z_BM&?9F9YB21S(5wyfd*XAy zcJ0~uiAHZzHm`1JbMAh?^47VtyULn!Wc=SKh8{isy&LkKWkzqp%5Goa-;jj%-aU6l z&&E9|gv#r7`8FcB@bq<&W&YJ27Ik+9Cfz!1SkwMP2vxbvcHIf-JW4ug>a4TnNjn}x zS;J56UpC%+IzAbMrdg$<*8P z4=l6pxL0-duA#+w+SL8qX5_3n@m-n0>PIyh(^)+$!{PIDB~LEb&e+1ev~23x5WF?L zU`|*N&vO>_fFivums#YtV7Jr5$y+_n)!&*|RKB)$GB(`KT--7~cX|KyeHSikDqXYP z-}b$__ThK!y|j#)o6ot`WPocrFY0X=l4)#`>dh4ejQ(g}y?Y zu7g`^_Ly(7|5eufZV57}6mv&~)i<33!zfR+x36EaB9%&`W5z4=SE1z%rVSQ!<6~A0 zTIQDAqLiV%zs9?Ea+@lC?`6Inh!QPk{EqX?($^F*ephA6mG|HVJ!O_}md*?~g>#g%WSl;tfourf2P>j9bFCuwd1$nR^?KxWoQR98+e zKOW&HAQ(4sCQ)_4O6`#gq^h)xCjre-wVhgtEC&}cl2Q}gNWle?m={kHj)=e=OU)rG zwfG{b91#$LQRSRkQ-g;~#RQ5%0!k4z??0&XgkMy(uyQOQq6!u&M+&_^x2IMct8)A| zbA&=r-h2@pSUqQ~;HV;^7HbQVB|I_8S8Cu0CLW2}7fcoO=$iRYu*vZx)k=+pJ({N; zX~m#8SRtOqXyKU7s8uv^g-nEev812b94q>os;jSZzskO)QnIuj4e{5lOj7IO&kBcf zBB)?RsA8#js)9hp&m;99TBPWs2<24pqZOXMA|FSv)hCvBH(;MV=l#)p&hO5>GjnI= z?#|qah)?u`AWNr^@Zh*$I^{hGf?m$d%sjDh3s+$VjPwmba2ZDXMkOaF`1?kXh#K`x z&{2v6l2Bt5nlBb(cs3yx*B~@aViFyVQW`0t)?g~MMuuugREp53tPwS62$H76YT2r? zY#lD8F#@Nu)QFTMC?Q~GsR@}*g=SGSsgu$|98+bXqzb|16LORm&kBv68f7Sjk{F`G zHlr4A{l6H)Ns=I`2O5%~2`Qlxqs%_RI5)mw$il$~!&MlL%6wkmLEz^Dg%UCpe1ld1 zE&wx{0C)gqFt-vi;kj~QejuyD(Sqk+98#R9lb~cup>ALCm*LH;V4Yo+*Gm01Pm1ZViZ0m)SG+tN<8WjE+exMl-%h0A?`q zg+(eb!wM6<)f+z!VJQK3L6I8F+{)Z_{Jo(kw(q?hT6eUgs|N6dMu}HKN>Y?KAu&EK zIw_o=&7>Y5Uts)h0u3lxCNQREeNlrF3X{k&@XOkY5+I1}V5lxh9>8yl zxHqqDi0W~5Ih_A_;rW>M^}!aI1sjK9yJt^TaZj|DPd;mCxpeCte(NVQ558YG5Ivm1 z**baa@XD2P`JUSi1Et!H89QR#y{h8}xn`FnYr=eb8WwxUPwrH=r0ef;PxYxbrUeW> z^Plf%a`&5BPQV|g{@J-($ZbJuot$$zH2?64UDM|!Wq z*rn~huy}srvM|psQ}R(kx!0&@@tp?wDPPx-i~B6knePnm*>%XxYHaMBV+?TraU%VmDtC*~pjI?LqD+{c~vV|8ZNJz8ybqxVJU)hD+wU<#`rAEoi#D|M}xXh810ii$nXSuDkU? z^_A83=O!onFV<~iJ?=kLU7G&(7YBa1^RVjY(zgxYtsQJZB2mu6v7X*~*O0W~p?BpU zwdGydcKW!Ze8taGQ!me*mPeZR{l}^M1iwnUW#Z}7^U3dS42>SS?|gkcQ+w-fcVmp@ z*=~huRrAg0q$?|aFGGGES&x|MUKw0mqpKopqdU3YH>_<1nGS{Ql*Gm$Y zrd3qbJM8<{nW0`m&#B%jzp7wcb*6Iig9BFN)6B1$s|OdI80^uCYoVBNy9V!<)469i zjh$JXG2?!PI()-#ec-0?vnC(q?p^lchoXWJ_u^CL=a-Hrl^ooCk!+8W)_L#fFLOLu z_3M(F;iZGmla%?>ovD3yaCEx4Qu~N^IE9^4!)_T4S&($6?$e}xsTbQSN9!C>^20md z*LyerRQYZFGw0tFH9Jz;go%FmnTgg6E6dIA`wjlmf*#&g3$9z^c`y zcQ;%WT1O1bPj7#)#9hnk;TNU`XQYn(;ysogxa)S^#1uUpm7zgn9_`<=hajcHHKWtk zRT&ROR@a(5b`5Ng@n6=yzoP5HZ!#Y;J-Xs_;FNHG?E5db)Q+spvg-QsYG=&11-#B6 z;^V0Nq4;q5J%`%2Vy-;ss7%#*hKAK66eSg0zMI>>Hjrx+-AnjODrxRVEZ}2+aXEhKs=KVTT&qwOFb^r8y`m&h?|g zCxP|mbDekY83vkveTZkZSQI7)A~Vp-LEB{xDohx{nlmEH!x1$m)tk~Nss6h>i}L4Hdq*Y6A#fs?tkxLgp%_#j2#XD)4$+(GZ6G&e>_R7 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.RstStream.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.RstStream.beam new file mode 100644 index 0000000000000000000000000000000000000000..bc1e966e5c1ec1f54851fbe1cf6ef9716caab169 GIT binary patch literal 4700 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Continuation.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Continuation.beam new file mode 100644 index 0000000000000000000000000000000000000000..a613eec3128f0237538038913bf215b99c0304f7 GIT binary patch literal 4572 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 K<7L5g0sjH)CJ{UU literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Data.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Data.beam new file mode 100644 index 0000000000000000000000000000000000000000..e86fbcfc044c3815d39dacaff65c27108dfcabe0 GIT binary patch literal 4828 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Goaway.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Goaway.beam new file mode 100644 index 0000000000000000000000000000000000000000..00ff4d5bf6f8af6455b28af91055699026149b5c GIT binary patch literal 3732 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 HB$56NG&=X= literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Ping.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Ping.beam new file mode 100644 index 0000000000000000000000000000000000000000..f90056e67bb36e93d2c2b6e2fc4a6391a1e5eb21 GIT binary patch literal 3984 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Priority.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Priority.beam new file mode 100644 index 0000000000000000000000000000000000000000..f1cf50e7564393a511e5bb899025f16dd6427c55 GIT binary patch literal 3720 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 IkpmF^Z?NC{5dZ)H literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.RstStream.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.RstStream.beam new file mode 100644 index 0000000000000000000000000000000000000000..ed0f57540f0b96b1df3799870aaf60285d5cb9ae GIT binary patch literal 3552 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.WindowUpdate.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.WindowUpdate.beam new file mode 100644 index 0000000000000000000000000000000000000000..a1a0311fad96ab8b06d58adb5492bc0b4a85fd36 GIT binary patch literal 3620 zcmbtX4OA1?65eGaglJ%a0EO@qfnybw1ZY*LXaM=q#zN)K+G^M&3)zs(hTRRp`pN+* zSZh^|6%`F=rC_z%2HX0JzaTA&t)f1)mP#r3527B0%JcB<2C&-G_SpCKoY{NtH*@FC z%#9nP$H6>f)cE1YCxSW8G$_1Q)Gjf3&7}|lL58PXU+PMlu z5}1!#9wJo_GZ55MB5)6!_%Kl5Hb#c-^px;KawMoq=rY9e5Jd@HVZMu8;Neywagd;! zg&v4R;1z?Qh#V2YeAgr#9AbyK%G_YSJ1U0&C=>Vyyo30tL;oz0@5GxpF(jM*`Z zrbqzOxY-#7C;^DQ;$SE+L{)Ua{ql>;k@n5CWtiHV3KAr!mD@Jrw4b>y~A zxu@OVjOQBfe3y62sd4c86SEKO`8sFnob?zxNjh!puJyZOW(Ni~-)(P9>fB|Sx#5GFLz7fG$tk^b zeQxuyg11*^mM4gVK8js+FX5LO`o@MGfmi<#!19K#hK*49R+rL`r(qLTQ;w?8Ya z7C#mZKC~{tLvG}yS1u;3g4PqI_h(E_ICL=DHzXly=bN`Z{0{xL?8xAxzP>4^!g%Dg zwuu{7FWdClruaB*_9v$YT9&_ax%*?ws^#J1yt^KMTfFy7!}X@v>PqV1gU}h9VyKAu z^1U*@Bdyt1p8@UGj+1L^PdnWzwD#J+J@Ms9-!C{tj-6f9J?U$qwITD9C+cmg-h02^ zyxHh9aD7harQcqkrc}gq7xY`FS2uX4cNq>#(77X@lL!TczI9lBk}qsQf2vKY}135CqI>JR%mWb-gh@?M}5HZ zRZUGjQ>WhD>2+C{V$5*+VXo2Aa(hwN5}D%X@+(BG!_0sIZ}Iw#^NOZ)Bc^KSFQ)YF zZ}i+fgHbe{C7UiTy*6n_2K;K+muG5@7RXX2NM|bhq7DXjuXXC{sB+i#6m4*6{5 z$cHUI5NDn07d6(D?u+atHgt}_x{JSB$j&>`MIBjOLY+ma8IT|&xo-`=nr|VKo8M@Vp>uz1E$JTp;d!@U z*T$`z3wa$MoTvAUyZ33;D|LZawg(>edwJpeg;#Ezu3x;u(!cynMb|*~hJny^=htlC zI{rZJrO5Q6%Z}aU{;#{*m5<)^$q~hy$E#Si-mCD^)gzDUJ4daRtgol0_vQYHHlM61}k2Nn`TbHz=DJ*)6WSeD|sb~62nsi-vBDvY< zueUDHrJfHf`UWSYr{>H_s%F1fR9DX&oxU9{n)(g2%yCa;S5bXg?99{R@`%=xNfFz2 zghVXsxBB&8_Hf@QcPZ#p6vG?WMHct?U5oRtpLpxhtc6R@U5LH+)sB9uU3olw$sGp_ zGGE`eBE0@i?DUXe?c$lV_>3fc-hy9d20U^0syeoF{9%}}uWW;$xct~0P?q)-gG}i% z+_|Z>xH<=?m3g5oSAfh8!wu?ixd4(+D+mS;i69J-4e(K*-vxai*agZZHw?2KG>Z)w zNvMZ}c^FHPoV3XR3c#=eP)>BZzvllQWJp(9Zl zF>x6EGrM_uf?S80OYYZTS)8RY_$^Q#1I^k>p literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Serializable.beam new file mode 100644 index 0000000000000000000000000000000000000000..df6010533ed3b9fe85d8543dc8ba60c74abac5b3 GIT binary patch literal 5700 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 Sx&R-m1_b{Wk<%C@!2bv9CXy!r literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Settings.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Settings.beam new file mode 100644 index 0000000000000000000000000000000000000000..3ccc6458d0a4dce5aafbb65d126a6b7445d6a722 GIT binary patch literal 7888 zcmd5>3pkYN+n@0|jA0nYnV1YEhdCfQR0c^zPDKi1%)G;B%uF-y7!@VbSxH5bBHPg_ zv75Fi(z&gywAo#i4z!&p6`QSm&pU(I?f?Dv`d{C7ecyXs_dKWj@VoEldEU97=barI z!N6cFulV}=g!mu}+%XuH%%P#7TR3Zf0Y9BDq586gTs}gbGk<=VGj+CvoeEPUVFcj| zlcZTJ7GKB{u~=nn1d;F)We6-4b400Pz5p)c!eR-`VIwfN8cr9BB#4xi%AK0elL6*W|lk|APj>g5|M-~T0&=Y zmW1)x0x6s&9rg@o_BHSQQ2{BA$U~#Rk^)mKg^o_KM1+VqB7w45Jq9(-&}j@Znu`zf-PON1p0 zvSkIi`~7RCV(H8P3`D{*nfl;2j2S=#MFKN`3<@z*1^i|)ArcszN5)|D)rkZzY*{f; zMgI{7Tg?ohgYia1lZb60PNSm`$V6f#hGL8XqoiWYJUS8ESxi>Z$LrCtuN?>mBy1)@ zpH7DKNDc)3Xc7@iz>LVzD~Ti^M}dmz8f5wyb!3G)CaIXIL1%gp458`K5Sd_T%p?=^ z=ma7bNA!g-K%XHAZ={bQVR3q+ZDU`E2<=u22!n{m36J#gCU{f48APNLzk!U&cwkpvA)!kCeK#fV|CI0(YxjL^xzTVk*{V>F;dF&1Z{>;f*BehD+qte6QHt;krM zxd*`v@&rT%9#Om~1T$kM-iScO8xt(BI1At$1#nOR2ZiiQ!MONRh!iguf|GHh9>HNE z!Hz+gsz{^p~R5RXQpOd(EDhLt>-Ffj%L-jC4~I?7x2-|$XUVzM5^ zWb;)_)?+YLD=<+;G1jbqU}j052~ z3c~KIARNblz!4QFoQ4&QGfPFy;`GMPPs>=lv|>6~l2gD!r5_~FAR_4y2_l~)Fi2qe z*khP@2Xw_SP7<6+#yAq*5l7F$JCRjzL?Wap$wUgCO3xw@^XaHoh@#MK3@I9@2mWuvhJ_2;A zRH1F~pmu|E1mIT%L4V{LT$sm}2@tuOB8vb89~N-s5XdY3!T^E)(UD=?NV1Uvl(;MO zLCGp|{FnbwHs&vFENE+u$tTzlDr=OJ3Vw;7)spHf9JsAmFU-9)QN~k+J(?bT9aT>>lt< zR;*EU4MJ&BA-WW>LL%lo_D*3#&5%{P>mDt=>odAjQZRmjLLM0XZFEg*q`?v?Ncxvx zAP*`XD9{jz6^8&+iK^UGC}K&)Y`GAmtct^fgatBc4lI?*HF*+ID(IHLa$UfMR=^l6 zW`hnL(7~1=A{IXtJzt~%z3NhtOu~VeVB%>Dz9kY$B@-ArCHMyH?j@i0_(Z9Ty5&uXc2!7<=UXnCzTo}l z<@siLuD0JNw^#H(emT%i>rTDrbVQ~n`KU%|cyQ*yi^!vMx((XpH@P=VcK2P>DPDUz z?MRICcgO;p$fo0)CUhjbc3*XEY;PUZS?gw9we5(zr;WLWW%z)3f}L5<=dLGDE*sy| zH8N@HVO&_~a#LVUm^xvL-PUsh^HP(4nc)wqo1`?~KjCpfbzyZ<<-uqAqGqk+&if0e zmY2u%8@Qibk-1eCdUx>QIr~eGjT_1x4kT$roPJ#p9JyRe2eTG$?XrdKLl5&|ty@2* zkskcLrYbqVFwZF|OLjE;_SCAtU-1?y0hhUnIK;fw+pNvdI=gAvMy9LljEotk*Jg8# zv>D$V%Pw@Q_vLOYSfc)2*Ub4%xjfIPE6Xmes9@i46+~mhceWk;bBE__=ybm>ZkBa~ zb*R^1Q0o+mc-`l_X1h+iI5W+E=(Sm3PtoHOC$IH%*RlzBIh^fgNHB|S*YA5-A@Xmv z%yGD<8l-M7E`KqzZM(zaW8Cr=LssD{dhN1##`K$W-o9FV;lSZFg&p&+G~cZq%ssx` z_C(@?pIstunTM3GWS2)klNLq#bsx8w3BA>oDRD~cBGv~ z2G=xh@MbO2d8KhWyKi-!b!haQ?YB%iXZ^mU)xzw<$D)dl zslwjLS9^G+22U)u_4oG=`1v19W|W#zeht}GUEAsA>vOa3!ngDtw_a?F314=gJ>!!n z>yq!wpUNt^)30gF^S3lS>2Tt%w)U+u!zP;&w+XwO&u15%%UyKrqG1{q(cmElKU8-G zc^+HPaw78BW8Q_?HD!4&_Cc|2&2yqEkDE50#!GUpNiVwIkiIu-T1Hx0)pcCNXsx%OqC#U8ufto(gUCu)(`>YujtC(y4je~bP7Dck6$ zBItJGMBSTVH8&f3)ciKMs&Goyb2KV463?~z*BtgOYvGg9o+j5Ue!M^%_Gs9+e{rI< z)^g%OLz;=M$@$|EJALOTKZ*37U7q2cBJAJPwrg|L_Sp0TyF!+h>uT}nx)CnB3i&>s zdj7FTgDfu89lz~Thl{`5ne@W;^i zd};}@a*lK89aCz*USykn%ZW3uU2e?OF?Lhzy<`Xi?Avd`h3H%2)cRIQR9w>ptZ z49F{{htI5YTGMgy(e_^L=awPQn9WOcIhUin_BMNlt{i;*`Fd%o_fYRS+8NgLuDfp@ z*BrF(9@rg2EecZeyqx=U^3lbz-S%@W-0pPgo!W6Ee>EotN#C9-iV#JgD1--2o~pgM z)F-#}{S?1HPJCBe(-s<8y5QP0-rnnFi(Yj+O7yyUW8)c|D4@?|xO2NWHRN z4ZyireUCVmWCbk$LIx?pl& z-VZn6u&RQhQ|cG%e`tm^osA-<>Mq4VKFuYF5T`2SG5c!$@s@GQUByIbt!*8)}-y_Y=g zB0Rl$z2rt|G~CSe338PFFyBnQM^Zj@?P}T!ZOCz{yY`QhOBY-WD!gHQk#iEFt(ufGsqI_Kq5>!p|TW>u$_FL9%8xQs9QrQ}iix4@-0?Mb*g zk2htz0zE{%eU?QxGU`o>YUjm0eiU_7wQr{Jpv~lbc>3AIbc3pE4;aXcK$`!GO(bWz zbZO~z?!^1CPqx^u>f9e?|Lvs*cb9ZHeh6_D7P4ASS>@*a`A6rICugi?TFOsln)|PC z4Y{bjt}fVSrj7NbA63q;4@jys-8Zw-xp-6Na~Go9TiY}h-39LT-NH{b^?UvIN<%m0 zaN-9YoIA}fWsrJTNHYeum1peO;{&&@KahH;b$#%Pp%(u=1y!$fiv0KVI%%o==IVTE zU2I3@Nx9*(Q}5r(GFFC67_dGRIW;or#k!bjQ63;Mefi7s4}q$iVz;JjtP5GbYi3mM z0ePUVR)5;<RGfR=yqDtsn_}ebt0W|xRG9a;56p>`L~;@?H`FL zH9N|B_9lkZ=>>T#eXecRBB9;<(BP!s(Rt4=<-CRpSzY=eDYbnal+*|QBrRDJ+`mQTBL0t zXHBgA#ElIlu2rjrzlOc({3$hV^&CtI#kj|$?d@k5mfnSpS0*1zAa8WK_LM}mYxVQ} z)wOr4F5e+q-GmSACbyVP?D3nL$#HKAefMF*^yI$cp~^dV>F=lH+uITU(D&j@m>o&* z#>Gpz&ScN)TvdnF4t`&|ml5FDa%rF2A6JO0W+2Y^>>}zky++pu$jdb>TH5F3&+3je znDzX)Dk?(#e2Bm0Po9=}vVl$6t3Aw?c<#8tIOzS<@i6pl9Mj|DuEdIuIk%6CsXM9!n?41+)iZ;hjfZbP?bYCgG_vf^B)1ya{Js#^+Y}WJMR>-r*k;<# zTd8*jBk^ty-B-2iElP~~pRB9IVb93lMy#3X=gDf;9#~d=U0O20+gV&?yYIpNTX1ir znQ44>XO6|sg{R`^p_T8}?auD#zWDLonFS%1FIS2#+-2RX*?hk%{qeoyU3n6pDI(R! z!jMTPycTvmnEv93YV)o0Lr~s(V)iT%M+%Z<1kDvy_NDLHxh*tQg+aV1H#Wd_J!#q= zqdRGrU0wzh@=?y1)OqJdb?Je)!nE5ui`)LV_ewuJc(djq{@`Huv`h;4tCyv0f39y` zw<$L^$VE51GfNyO(BWPBK2jJx=Vth}XtQH3KG>aYS{!MeC^LkCJ@B1Vz2!!nFHU;* zQ$!G%p%vd=>(4PQDkE<ZX?zzUc^|329;t52_-FMc5l?}d! z!o12#j;{>U5N9lJP|@kR{P@tr&XejovssM;TQgh=Ud!>dgaf=<1%Yp{~8iYiUr z&?9-*G}rElxi6%1?zg=H+^27|j?CEF6uj=~QqAMJ>OFxW2Mj+q#n1+ci#}|;`^{bb zxH-f|pLt7WtvN~!h_*k*;WnouE|%WY@8>cNUn8Z1sS%vl01-qRT9@fa)D82&(ko<_hC9B__1ge#dKDL)B}sDUpY-~$CJm#mU9 zJOu9Rl|7JLog)xQVJMGD9QYdZKRC9hd^s)u zYdz>8J_S5~a}%qS`I?&w-;~1|++{*`DxV`)MPNzlu>XJQRHz<*P4O>ugJ3IS{x#j> z`;;y9L_Pvy%~l;h_*F1U7BxgB7QhN4$)l5lHWgPlU!NCnxAFgWVuxKtCvcoQkkZ|+ ztsFJQH>wn+pROCFnvwm7&OEs12?ihXz*brWXyiffP0{;Wto{j215G1MbImZ#1)Bbv z(>0wn-84Nk9W<$$lQnHLCusU%tpEKz3kEZPnHaTU2ME2-Rn;A$lR-K5!QwDhL&^>& G=Dz?1^j8M} literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Unknown.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.Unknown.beam new file mode 100644 index 0000000000000000000000000000000000000000..a83cac76c42774eed1bf45ea88ea1cd6a5e721a1 GIT binary patch literal 3980 zcmb^!c~}$IbCVDV_Y#m0L< zDx`=SAyAP5O-G_-3ekMEN+nvLz(vv=FbfeWg{V}ZS)f8Vcyh%%S{Y8hZ}swq`vUWP z`M!x_kyI&CMI!`(6AYL4MNmwEVu%!ofyu82uRQ@&KoAs;OA+A57=Xe6$W{r!4S*#D z&WET>FPOp!p>1F>n10z|*)du%Ld0fjbF=jkRe=<~AQGZEQUn4f_(lsNVbCQCA~~Q_ z38>(^R6uhC%qR{-$uWm*`%{YZVJh<$M5z!&@&UiWFoY?W;2=I}0tbe7LEbC~a2@lZ zC_YU2DW5}SS~&PLh5@OB!DW91CAF$@-4u^d6ILvk!f-J|{~7zGfQmq3SH8 zh)kqaXmm6TRp{t46j4ZZX5_K`2%l~^?jI4bd~*XnB4lB@E~ITE4K~q|s5+~+mqP@7 zFs6X9^*h&2WJb<)&QgLe?9_8-%p@_A`Cw^vP-&7G1JLAI$SAY5$bWtz%=jP^}W_Frg_^5<(S$OAxhMXDK6aB_I=s&K^jS2;dzO%ln-k*W2K-X0EDX`nrTwV&9!n=Yp~i$z8=}^bL)YugX)#}!0h}&}64bnPeO6SD!#HMOo6iKz=CWxA14VfjpMNU~PxCxr zeaWq*gS#H zm~?jFoY|H?W)^o8gcjG_-dspU*a(i_UvKz9!n~x|w^dJU`9{ zk6&B9vY}$O#P3pj`yd_X8}GgK`EdmYYJXn5V}(!MwJ&RaUNNaWZnyq?cY&YRh>E24 zwQ*x@2h~>j-e$PH zL&jQIT)fvgMwNT}SV#6my)5{Ulw-XtRsOWjEDuVDukIJN9X~ZYcs2i9{ov$A^?~OX zY6GF*^rN|71VZ#Ht9QCh?YQZpy->E{Y}1aK8S4XzI-FHYMudp-ulFWC-n#Sry1$0b z-O&}8wSKp@#ix0@?rGwzUr#>&Bf+EU+7G3F25yWPUwI{A*S*5{%O%Zx(fX9nZ8!et zQQy=Lo7{_3zATBK>R;d0QW7}Le=*%MZSad9XDo9X*p?XGIeA`3dQDlkLff3M?5CB_ zp4+rmF1&Q<8X-@Bvvh%SE&2aiZ-mBI_)Ii zW_f!|_3$wl6X1HzvH;i0C6L7_2g{NA#^jDcf2qm`&lv&tZI<#~m<0#cl^m(|_~YQc z_AzmXE_MgOZSL0y&%=WmnUXB)ldkuM?j6>)C8x-n{r!WsE;IUt(gJPWfyf)D-TXN* zb*bq-UJTD+54&obGaX`|G|mf1El9C6%N}-p-Oz8d?ed)`u_sHQ5t{6YoNzPe8|(~RVh_)w_gpOBQx!At#t&nTw-{e#a8jxw?>qzf>S z5|scCAcWH7%nyhL)$i9}AJ=WDGeJz>)BR8D{a4xtb{VJ9HCmMd`5@@zkZR=rQy{5$ z@_#!pMt>O3g$e(^hu@_4ZIq1!5KOXxniBi~g6)I=c-^c3V)z$ehFZEno}a9$pqZem Q2Xn}IWL-+J?}MQK0lp@74*&oF literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.WindowUpdate.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.WindowUpdate.beam new file mode 100644 index 0000000000000000000000000000000000000000..eeeba80d375ff0ff8619852ce6f9384e84073351 GIT binary patch literal 4784 zcmc&Yd0bQ1(%FCzwo9VyV#1DXNN_{INMu(L0-{J2laSoN4M}dyLJ*arNUb|aU8txC z3M!(wfR(CGMBG@ciuziL3!+sKH!40^$~!l>!N>bvzrVio`^~xM%*>gYGjnogPC}z% zym2_{{=kswv!`q3PQl^u6$1kUcgb!cG9(RAc?Aj;VnpK=9vjOW?-i;N%3-fKL?K3X zbCqJD2F~R35rqWh^9zLuT;d8iO^K>BYQ9`NDMzAJ zh%^YQPz&TjkqT9_0a74G#abCGP-|3LkwyTkWI{#Kt0Y*%A0+6t6!Q6lbUwf0gLxqe ztz4jj#aa0rmhNx7iN=>FpWT=iWLKPYnD&xZ#lBe(QtAQ$DnMei8VTC3K7zYdGd_+t~ zQ^=46a~5CEqUWyoVkhKL%+Gsac{71am~5sXQ7D!Rm1LWtL_{G&6tEaDfMp*iAN>v% z2ccpZ#H|^J!$APBRt3NjfH5A*#}TMb5T5Q&++t0pj?WIvj?pH_` zrx5-Z$cK%YK!>0*oU=6!P-*$NNH&DOpHC-HDVA*fs}eIyXEw3Q%#vu$qfjA;LW4?) z&h#oXh-jTdp=LsqQEWmcG~p{VC~g9T*W(40(PV3i6@hGxGsWTZ*+xJE7urj-W>aj5 zVO%PXh9^V&iOzbdnSgmLWfYx29t%1DXb{FDvaJPeREnK5#hwPSv1N3M1F)KGi3#Hx z;n-gY6X=CeF`rQ!ad@(R-w+p19yN%9@Z`~-y+O9pW5?3*WNTkDTcRHTdV!e@Es%(F z4kSXv9R@U@p6-mPvw_%jy>dD&65`>>wuW>wdpy}rFMETrddvY}JeY25j5QMgm>n3N5UN#Rb~=2RkHv5RFkAG^=+V{3 z5r_ux;J1E6f$zL58R!WbtkW5ZVTn*H)98o_M5Z&4Ah1lVGye4B`d^sLhyEa?K-?6) zWMVQwNBR7V6XJ%=@nCN9#r+{9Vr#9ki*`9sT*eG;4VLJPd^93ef7#G%uu9)8%<1)n-Lit6~~{;3!WYuLdW(=|8()tJz_$G ze7(IVoG+d10I;|_0l;F5oh1eUES~lN zKE-xAxcR}{UGHhklf+cD0*fbJ0paBRT;px&&E@6~9VfLcJk=+a;(}%sR)g{pIhK2*K(3)0)v82r3QokD3vz{;B}Rk_p#+hz=AaUd4yZhciga;(?=-kyg++zZ1O~YP0E~i>oJ-ZBz8H*3ZR*p1YsT;F==EAwhYQN#*}a zPI!LlZ9=Di$Fio%rSF$^fBT%(va{1A=@PQ@{GvYB*YB5PT!+^wcylzM=iD-e+yk{GN!(%+?(6r;)}RR$?mGc?Nfew*66I_>~qMmFI-Fx zPKEY;o$PE9e{36hSG7~Dw6b!8{M6$Wn{M#JceL?Rmz(Z!?_F!kYZtsUEovkUP_E{A ztqwmB)eg6t@a_^f_Rn!T;^`K_SbPyGG?sYA6?jB&4=3>}&aHR*X0-nklKjlUzE#ot z1-VRl$PZ5sOw$G$tUA2^Th6v@B>1|Wr_D9@qwuxYL7Ld_V{Utx(Om5-rSA{tHAK|; zC?y&5?^jBfpx4s;S^Tr)ughd zCM6C>`Dk5Gq0K5c;I%4S?|<7m9zU1`|3ZB*KtzlFH(xeGGCtzxEda3wpZaO z`_-Vy)Bf$p`g^_DN8qILaO7WhTibXNtO z?O*b8+oq-mKc9JN(S5SgyXAPyuV)ATYV7#q=bxkg>gjs=>OC>0vCZDPq0PQB{&#fq z1s|{N7u@chc{D?|x%2SW3vM0#`(`X;2_Csj7IsV6TOv;u9!jVmIFWm7Y2&OyX3O*W zwXMwB<;b~m>ou*)Z86E+tT7iy(Tn|-{*->ZOpDmuBBrlbfy_&FkP4}`Z+xndg&%KRx^`E(TyRl-lR|1RIjo4jrG-7F2Ol+_E<0^A+yX~RM zAFZ<^N(A4P+P_T6E#J+Ws?JlXM#^x5^5ku7S|(n?pI<-PsE<;?Tz z1R)-WJEO}Ib7#Jj-w*G2SCY|Ju-58P*S8ytuk6k?zu8mjZ^{^u{%YxDw8pL`C;Zm$ zE>^y6%OG`0IST*7lC&EI(96X5*XIi<5d>)vKNrE|^s; zgS5x5`_u@mZH%(Bdq?wVMA)IRj|HcrD2yLrfRTI<(|^Tsden0N4m=jmzT zo&zOUH#M2I{dgkS;O*8L)Xsa%>9TG`5o-VI4vSX9TXdpk;p6Ec*?0U}Jlaa@+>#`9 zuBXi1y&pQ|1?*HYwOl^E0e_3cF#U5@a{YGd)sDF4>b%xJeU&TM`UlNcK;HN zq!nz*MQ7Erp^Ght6*mv`k^-Yi1_{cHm21|Xjjq{n#`NUl>b)JCH;e0I`(BjPy*Coy zFEe@9{zCW80X=0k=fIwNlkXSOOpa319Z5C2>bAJ5f0)Ypr% z;)jKMMtya@VxpL^*?1PkJ3io4CA?c~_c**DC&RDW!*>4j2M5nzTDHz-q5p!*%@o&G z^L-beg-AWK3wxl~m*r8>Mcp9{b&G;`ORdLcA0)J$UR11l@akU&OS)ftS6iC#vZ|>2 z;v{Ws(7n4|yYH_0N9T5f2PKQo4{SU>kg#n0f?a>nT7^$o^g`$e+3ZP1C8vi`AU23- zjBoQLtH=E_o{*mYH2!ETb%0)u-p!u3h$iZdDKcS_rit$4km1qhhT{)3xb%yc4JiAk zloXeC)Vy*#z^dM}+`g)-kI0;O=MNk%BrPZfloB_xKnAvi_0LMaC>a)|z$$*KH&#gD zbw(c^h*-u4#TwuoQmzd$5!FZ%pcsG`CwL%Y>yio54@LG_Xqk!5hPndeKA6+y5XN*r1QVNV5MsZji$;5z&BX2=T*=8KfF$v`QI_ zDIp|(3e^`nNAjqF{{1W++~RO0(xGDXZ-|itLqJphzfQ}b=_4PCkNzToLx3HFFPt$n zj{iLXBOZd`e#Z}W7;%vPfA>2u7CcD7KNBF9!2musQ!pR_z*DEcHinFCaqfS!V2)j) V#AIP_N9^4}uoz&|!S~BH@Nb|shmZgO literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Frame.beam new file mode 100644 index 0000000000000000000000000000000000000000..44262cc1142f3762e9022adf05a6999d5498dcbf GIT binary patch literal 5956 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Settings.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Settings.beam new file mode 100644 index 0000000000000000000000000000000000000000..9bc01c26aa37211f51f60f19aadaf8068f7e4fa2 GIT binary patch literal 3464 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 L&w$4aLeT#K(_Y_; literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Stream.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTP2.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..32b188e2349bf96048d7c68a95a38fd43a6bce06 GIT binary patch literal 7204 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTPError.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTPError.beam new file mode 100644 index 0000000000000000000000000000000000000000..6c96a869129fc4a9ddf20bd4e3c9e95a73f734a9 GIT binary patch literal 3640 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 B&9MLg literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP1.Socket.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP1.Socket.beam new file mode 100644 index 0000000000000000000000000000000000000000..006b3f42f2fc0d655eb673dcb644f09fd0b2dcb8 GIT binary patch literal 41640 zcmb5V2|QF^_&@G8mTPir7?Gt6Mnq$s6jEbfvac;<9lNoOC8<;rl|re;UP)<>Bxx0u zR+1KJv9uwjO}pQ7?~IT7e7^th|M&BH9rxVlJm)#jdCv2^&obv)JGyn;{QSxTxZL>gz(g)PAvP!`IyO9tT^`Jijb{f1aM{7f*(tb$1i$Fu*|{N!oFHy^ z3@5=qIv^-MCP5d7{?RePiBW9-1a5p{5LcHI9_7!Dj|$*~z7J({{rH7MOL&9Pu~B}0 zx*;*~>9O%K+?b%4C{*Ep(HoWjZ{e8!=#=0Xzj$^)uwPJEA}5j^>=zus4N&$E4Ce&I zFLz0ZjSA73k$3m>3emjz1n7fV&G}gIt_B47XNmFgqwFm<_V~NA}k<2Ar~wP4g&8k0SQ6j;jMr1qzA_&bAkdA*eK->ErMbaIb2jJ zo*kFShEWpe781^m3Qm9#it&pIh!17^2L=R3vX_?=8W7eWlf94~&tXT!hC>LjgSfbV zLi6c-zL>Cb!g>i@@bQZRlM&u@T%eg1CovjgAPG##W<|%ugM$-c1M-prqQZm6-EU06 zsBjKj8I{F*@Fz)NO@6~*xr>Ab0*+W*J_HmhJys<#KAhjV7*6POHis~>KtJ8+fLN3w zaA`bJqu3Cj<$kzjA@uzGzy$+>b0gX8SkN$u?Gh3YmB5aLT7KY0sH~u8e*lCP?yaqU ze(aPWHh63d2V{UO_VL)L#840$z)eheKc?B3r;Uv--@e+O-0-Lbm-v8i7(OZu!wRxj$k@^+InLdU6c|A;TFaA`=^KHcm;vm$&Kj=?Q>wj z@!klE)CBbeJ@88o$D=MhLBI(B!VZd5&W&ZW@+?ukd_KVZv*bkAowRIZkXeJ0T$;l%4y}z@W16 z?1Y%8B=#5!Kp1#GSNV8AAkYE4J>Beb6FI@`5OBlbbf7|Pa>Kw~2^<4gB9M@s5)j0V zT29gQPk>%Wvs)7aLfC#|@#m5NSf$Lu|HHqikX$@RnB;hJd^iq-c)YwP02lWnzp2Cw4^$xw zP+UkzB~VC6hyn@!J0&E9*u!%MLg5KbkW!%_G!s®nhH-h91VVjw%-b8TY&`aM?F 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP2.Stream.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.HTTPTransport.Bandit.HTTP2.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..87fe7a52004ef7b4ecb8034afb9b6662988171f1 GIT binary patch literal 38848 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 AdH?_b literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.InitialHandler.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.InitialHandler.beam new file mode 100644 index 0000000000000000000000000000000000000000..f07b1b1de4887658bf4516e35aaa24e3c9446adc GIT binary patch literal 22376 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.PhoenixAdapter.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.PhoenixAdapter.beam new file mode 100644 index 0000000000000000000000000000000000000000..1eb79bd84e86573bdefc3a3cf59456969925d24e GIT binary patch literal 6664 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 AumAu6 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Pipeline.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Pipeline.beam new file mode 100644 index 0000000000000000000000000000000000000000..e105e63ae71d39788c17192edab16b27cfa423fd GIT binary patch literal 15396 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 M1*3?N_!klX2QHENv;Y7A literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.PrimitiveOps.WebSocket.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.PrimitiveOps.WebSocket.beam new file mode 100644 index 0000000000000000000000000000000000000000..9bf926ddc2e9ddfbada8a39792748e528acebb3e GIT binary patch literal 3608 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 Z{o*JZ2HO-B3bnxx2s)$Z5c~!s{s$lvBfJ0r literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Trace.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.Trace.beam new file mode 100644 index 0000000000000000000000000000000000000000..3c1e9f5d43f6db28465ab524f5438ad0725caeae GIT binary patch literal 13828 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 B6kh-U literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.TransportError.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.TransportError.beam new file mode 100644 index 0000000000000000000000000000000000000000..1b378e85e82d4b7858c0b557e5fb4acc64744d57 GIT binary patch literal 3612 zcmb_fdsq|47T?VV2$8@-c*?^dVAU!KQlu2M;Ss?a5fv1rx>=G10?BUN-H?cFwSWbx zpT%cI9-@_s)+(j_dh3It)GKX$)Cc&i)vMx*O0~X9dn4J6OA`W!P)aV9NeH0cdggN`z>l$PWvT{C5cOE|))i>b;r(^_87(459d zYFUO;0HVgo=*$L6!||+H%WEjsK+<`4@+h7dVA!lQ5X1nVAe!w?sc5rN!%{l4ma3wx zTFL|!n~W64k$KcHyU=8cr744HU~T9f%C;W@*dRSyoTbaEFN3qC-NGzByq`fa}LF3mY7#A*`#WTK^4jr1e2ml zr5E_7D^qaLX_P54(3zA1@LjCLq=178% zX_NQDQIS`zM2gi*q_Z#_u8=CFz@SL#hT}?1s00KTnPP*)8M4WHA|Z$;SC1f`k;G`d!6E2k zzn9Muak5>w0$?r4W>}anu!#S-a3u1~90haNC)P@EP~*TYJi;<+%yaGT^brwoiv?+YBgIGujN$4F`a~hY$dG7BYZf z02qHrdvX>DAcumv+O~B8*b7#~(J=lfjU(8#yzp_A9qU>jPxs4Dk&P;VThF2L$s#>t zW^Gay+>sU?sj#3RX%d|aG@KeZM;MGdW;W zuG5n=nXAv0&tP(S3s@!R@)?HL(|Mz*B8ukarhJB?^;S739GpDIR&V46eU4+uJ4z48 z-5@PTQdV%n$vJs?5Z?Kv>EJ>XTWfD;P2tWdaHsS8ll2a4Z_cQkk8-}Z9h?89^ zqUwvAmhRpyUo(6t_0c`!k@}DWRShL0gV(*#u+Y_ca8Hk-Z1-V>A?sJSljlrTZ?DdG zc2O5oE0fz2Dg{YnMYW?U-(n0=Sip{e-iV6Vj?L0M)8zG^q~5AYy)gemnfvODv-85seJ*UCa=hxUB6jW}UDrzo!VNxiwme`5 zFW8cQHIFTtV19k|@8X+Z2FNRp+{bHr54u%GoTaRfGbVjBdrn+uY+ZI$t&Z&p5 z7FO|^@W!ldttItwCyyMzG$d)`n* zhWJwx$*eWO?*wwUNBq7p@vDU%_qu9!ZCiT7Bm2~qg-f=6f6FzHdKq(Wr=7O-?G=AN z|Fd~r@c}b+yXCUTO%G}p9XLm#y`MrmaUuiv9HBy+`T|##mJP(H++1|1y z|G*sctX54;(~xPAp^+Ene(~*a<-2*l4Vqz#uIFE&>(boM8aKCGyf4Fa9V_&)>Q-vl zk;cYJ34NJ;ZkHpH0+ug}u2}Zt-m_;GzdFSD=B46cYv&(jZ=Jfi|KT)xPt4q(KKP+} z>Y>b1kM((L`@i|3x04xK-@PvJYc666GicS@?VPBmZOnw=ve16yZbdb?bVxFzT-;{-9{tCl_ZF2t&&Ph@e_=YWMy<)_XVhRtd9ltR#b^G2kZ?9ONywTF}LY(5umgPhFqq`+zgZWJ#793ux zV=nLT-MQ)ORp&drRXC4@#ayP|bq>Z~tN(1+=O;EbNAa%fa^LLhm02ErH@@&*vCbIZ z*^zfJy0Oua{qXe5+2cLhZ^|RuH%9DO)ZVlAE&qynm+zK8PMAQQZk$@a@_IzE#|Zc9 zKZLC8k@in5dg!#g^(Kj^tVx9+dJ{`Q#`Ls5O||)ywvb|pq9|CRP>YNG`E1M3`LHlN zRi8*?KnUaXd4S^t-s9kD3)kff3hXTKHXWc~7H6%2;V2zs2<^pdKuAdPj1ej@)1W%o z7lP_t@T8*tKe?xz`fJhWR?~uKs_|c|vAsYFK>M$7pmx{)M>uRT7+|~T7SN$7RbNPV^9y(;2#G#+ZX^xgYQ82?m)e!A;HhBr$8uUfeEg6 N1AuQ9fk!{0{12|(rjP&t literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Connection.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Connection.beam new file mode 100644 index 0000000000000000000000000000000000000000..f009dbfb7773c9d7a5fe550818c21a43878021a4 GIT binary patch literal 23884 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.ConnectionClose.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.ConnectionClose.beam new file mode 100644 index 0000000000000000000000000000000000000000..c8cf4b036216cde59a60cde11ca4248455bd0633 GIT binary patch literal 6632 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Continuation.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Continuation.beam new file mode 100644 index 0000000000000000000000000000000000000000..eb8356e68e396be7e7532097e9cfc62f41dac641 GIT binary patch literal 4024 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 b?4Sy0(jPCrpt)KhIL literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Ping.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Ping.beam new file mode 100644 index 0000000000000000000000000000000000000000..633fa7bf8450f63e12314a78f98ecac5a5dbc327 GIT binary patch literal 4776 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Binary.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Binary.beam new file mode 100644 index 0000000000000000000000000000000000000000..426e3d6e51b9b91b0bfd7124694fde60ce3aed53 GIT binary patch literal 3616 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 U$Ur%}#K_rk1wa6JgZm)t54e8O@c;k- literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.ConnectionClose.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.ConnectionClose.beam new file mode 100644 index 0000000000000000000000000000000000000000..5b14d78383ba23972ac2365554e790d055637792 GIT binary patch literal 4820 zcmeHLdsq`!7N22=gkW?afrugvNUefE(E32Mgr_K|2qN`S!z4^#$YWw=LJ+qUR8+Jo z;;Sm6#W$iv@PS~ZJY1D3VntD@+SOKCyIRyBQtGmIl7O{e^;`bg{b%R}2PcWuVBxs*_TpCNt6gce@ zuEkWiPb{t_FeQXQxa9;*j%|zZBjrbs4$t9q(p$3pdu4>N<4w0wK^FsQWMGq zT&u*?No`3uEireREHMUE8l^-cl9Sp@jh3WI8L4D@{^y>tz27bSCl7NeOH}aP5{Vg} zL?V`viFkq*$0$TEib)Wb?fVwUSWdiQYZV`ucgl$u-3saG?+Y1cI!BAqYYNF;6KV z4?s3Bx(%{&a7STb0J2%Yb{L%qXK;V@i zo`QmxMr;LsGsOrGbj}b$aBe@8I}F~C1&v}354^qy zf^KlzHq^?2!$)B@n%|BTw8tZ;K*(|AdA0L6yaKMh`P+%-#kJ?vh^Gj_K(>7W*U`)u z0KOxyroRv^7NFK*gkQjQu#B)4TO*UXK-xjfapG+g+6d8ITs|V?3=T$61ZMM&u{0@Bko1Fnh>rmXn3$!psNjt=PlexfQchfgm9_(S0x$X!A#nRf@%mSLK(lGB20a*j$0vZ6w3eX@x&XzXA ze-980s7D44OEZlX10D;I5D?SP$T4l^848FGh~YD9cA%wg2i}YghHn)`&snX`oNkq3A~O&Z{2 zYmBY8W_F^UW!j32Jd^@Okut`n3m^uEJ0J$jFhFjWwp$QLbD;guqzM7mkyJ{};DXgC zbo_y{>jx3*XT!SYR&j&mehPz5iYH^K1gX=Sr1X8rRLt;RS9^W$$$5Rz#NY(^Qs1}K zmja?0GF2@H-nI7nYmdsmQ(?@7S|61QcMH%;Y_O34*(2IN0Ur)2Ze(1ydMQ(Cc_m_ifU=TIRzopN(g)L1|OGCzn$d0>)_R7V^#rgA7}6uPU32tjpsslEjI`wJ?n!5 z(`Q94xyN&j{qd`;wwO>dXtA$dUY6dL_5R3LJC~2#eSZ@~pT)*yk+iat3+Jvde_a&=C ziI_}ZLGXzBk_OCnL1$+$bf7t-|7m0G?KQi;HM~0Pw&_Gj;31dauGV8{oa^NB8&s3G z(48aQKQnS6l;afF6jiyL3TiOUE-L(dQ|g52?L+fMd|fZixX8WMA&nSecQu2>jS$kXM8u|d}TykbZu>0^NJ5|?f)J3ewZhF>|WlOxnkavvLu0E_@Yp| z4HfsDw`~7>;^hUi2aLCWR$>3!e#s+hS+vc%yIs{+f2muv`iG56$43<2pLMy#X{~eK zjKaBgb}bEpV(%c5rF>d4uq0FUaOHe*=B^h@y7q;Y*WCPNYuBQZtQeUhGXKX6`q zX=CK33!Xpc$z1E}&vs{g|7d(;C2ML`qp*0~$pd4R`QBIkoiDb8`yJ^xTVA2LG^CPM zRdnQtymZZc$^O=$ge}#=m*+EaujMhGalAwR{xNt#O?aCQ8QXC!*Ync4@>kVOC9PW= zzUX)9#^bf|ekVTQom>mGxTy__-0xT~yU}jds%~znn$GNYi4U;a*d6dws#}90C!uU} z)V-Y0Ee~vxh1%@(db^06!btY*k{I&lR(#9}&03=B)kT@hZU4|U7sI{AV3mVjOkcNW z)1=`CZhjScce~+A(#?2TF|p$j0dI>&i$g#1d)4TdyWwiv`^Vy34yUIN>3FFOQl2+% zi&LEPDlEIa%2m1cf-+|e6p&R5wk40+bo9hOj zQC!&57;ydTvdhzs2Q^b23BTXUT1d7Y(M?D`TUrG@Z>rc1vR^1Eqd*}LF}VZ2otCeP zemtXA)L(h3dfeGMS#gA-&P!Nr7qx2F=9cov+f7IFl!wyNZyTnwUnbq@Y-o-B#;|F@ z>H9DH&n*w%W236{nEGV$fQ59z{EJyNC%%nw@7%C$*tsKn!1JN=xZ$4#69!wonm^}b$i8yi)H2PI;Pkel>4Tp>X`JXb7Hz6< z3OM>Hw5DdHyo9Ja_h3+%arFkH(Bs97O;3-DDkiOmBL%Um(x@OVsPtkd7 zT3~E^itC*AEO)`2urDj`@>zTD8Ala&L?l=5>2F64oDl3)>loFQJNDSJLuD(=Xr!RB zxbxP$-#UJktZaTVn-|P!S@ZJ)*4?_m@D`TeKLYp9+9Nk)>#qF`URb`kHJ|2lg?@ zDZSBB5)^GgYSzx8bs8o9C-BUtwYk5al%RoknC0`YR)p!0_>L7}K0aCmdi24)n0h!? zDPS&4K+KlkT#D}wu_bnvNWML8=79e{#DBTl`x4^+#$tVQ0a*Xfm+l`CnEiiqi+~0E zSBn~45Td~U6ktn50_u5eL4&!k!49_Gwm!DLkWb$Z;n3{G8b)V-iyo_i-H`a-Puf`g literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Continuation.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Continuation.beam new file mode 100644 index 0000000000000000000000000000000000000000..18af826e6cae2e26b3631e6769774ab053a2a0e3 GIT binary patch literal 3572 zcmb^z3se+kcZONmWnp31g4|2-LD1oG7^x%J@H||TO=(Ry8$OlBEO>Y} zP7|1!n1gA|_~UfqDUu~f8^#h8IbW?NNIj)iH)1SH6B-+fGgd8Su@YvyQHNV;T#K=| zZY%DvQZ&n`ExL(SdK;MLvWQFDhh@hIg__h zcxyCrNv0B_UkQBn$y2=& zp~O>(ZkEY;zA7Z7LF6+alKM^&iD7|{N+^}^<>+dW6p;&u#UUu7LVRI?xIrYz3*l@8 z@KiixiU{x|Dq(;`6@oa`{f5+GfiG%B-$i69*jE^cBqA<|SSf)8ey9opT%|Bb7!V>r zzxD zNX{=zqR_op=9j388h0E>$!hkfpKdmC-Zi)ZD<&u#?bNdWiyxUg{xFq?xec|1e`AS@ z6SR}RJMw5}FdCuwWK#d9T=~T~&49*cf{@AKN??>vS)GlJ3yx<92VL#SuV;a}CAr1sIr(rMSKadMKB*8w2X4#Z8c2F&(@;Mxi4x z64MiUMK+~p?ckJxF;Eof(nVo-F;21ytAWBv!l3{ynNet*yw}Z23r;aJ7iHc)I^oUBrUzNxZe<_qQ(D4_93nGFHnqDWbyP>ksv{dC4~;PQTr00E z|DoHvG9CX-(sNClOxM=OCA&B6dA=Q%+$bM;%p-V_WnFaQ*bkOGd1FS$v`epd-B@=b zCnq6$tp9|I`J?^#cY5!tKHOmbZ3W$ND~7mP5W8Vvxi~iKZMUX~uNJL9n^RL#qe{FO z^qK!exG!wryZeS#j!S4GzI+ggj(tt~?!=j>{e<31uCL9DON|UUdM#%SPh2#yKwmnl zJfu&*nVoUq8^=O=$FwX_S4PZ>bM_v+&&vu`Rn(-NNpa6BEWYNo<>j|?`)oU=uN73i zb4&T|_4?!6JZD$#IoQ<}D%0)zVK;X9T+nxQ7f$!SkWqVjfAiYj7rgUxR!?qw_1iCQ zJolsNSSipbTyuWnZ<*)dwwk#{%UG%+>d3eTq__@#lhpd#Zke9 zURYmD@VN(zP46|=jeF25=O4^-ZSOX$D>+tH=BW_2h-g)D=C+iUCwKjLIx5Azb-kay zsXX5(kd0hcKVo*eN5qw1wztfPx6D0)U9>mF7Q|&l&%OQrnmgv|&o6wyKC?hOqdj85 zG->O%Pwg0dvP6Tg83b&RtD9gukUb)HrYE0@EgoA^D{@yHiVB zM}EI<=b2!8cWRgVi7_iKKu`juWk7=r=l(6Y)3M5uIU{|)5>5N&WJOx@h$->0qojGN zg&sMT#|`2PTD`?aeu>iM&Qn_Q}XZThg|vsnv1V!OvkqYIwCvfYk^>7ygXD}GxT zhh3*E^0#V{H(Jw{zjyzb&(*fYqc?Q@H&HvRMwNN^)$8n~7=K-^;d;pR)wj?!Thk38 zla)*B@x&H=inQsJ7SjrIUmyG8hOt#8)~xJB`)f-_z1RMwVpGErpWe@6YAj8+gHEo# z*Z%(9=M8Nm?@cJ0<9QD?LlgnNE7)VfHV00D5y_!JF<&>E#4Ln%K$(ZJl!eo_k)Y8J z8UUliXnef(8}RAM+N@^$FR^lu zyaBnJhG0Q57;nJt;{$bdZu!Q)xF0(10s=BZsbI?orsDw&U3@@rdlM{nmqMZcd>}(P Sv#p#hPXOHN>EhiFseT6s?8hMh literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Ping.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Ping.beam new file mode 100644 index 0000000000000000000000000000000000000000..9ecc6f2ec2b63b514e6ca50f447d14d4e2d469f5 GIT binary patch literal 3444 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 IxCc@H2M}$pL;wH) literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Text.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Text.beam new file mode 100644 index 0000000000000000000000000000000000000000..81a1c7cd84d01f28d7726c70b0fbe7aae4daeb45 GIT binary patch literal 3588 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 P)`mR*0>E(?gs}etDLc~O literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Frame.Serializable.beam new file mode 100644 index 0000000000000000000000000000000000000000..5044e43089ac258ed845a6c6b5979c4cd12c8a96 GIT binary patch literal 5676 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 A00000 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Handler.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Handler.beam new file mode 100644 index 0000000000000000000000000000000000000000..5959aafa4091013e828b0f28e008ec53a2bcde67 GIT binary patch literal 24732 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 e#ONZj17(7*TXeg@}~SBDqzRTq?Sf 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 W_X)hFVg>#YHAo8$aml#>*Z%<9J*@Qr literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Socket.ThousandIsland.Socket.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.Socket.ThousandIsland.Socket.beam new file mode 100644 index 0000000000000000000000000000000000000000..fe72f1d4d2b0229eb87879a79264ea1ca5109182 GIT binary patch literal 6796 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 Y%H-dV9w^kp93jF%m}-a7_<*AQ2bKO&p#T5? literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.UpgradeValidation.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.WebSocket.UpgradeValidation.beam new file mode 100644 index 0000000000000000000000000000000000000000..240f68c849bc0985bd449e4d84c5df28e9924cd3 GIT binary patch literal 5352 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.beam b/phoenix/_build/test/lib/bandit/ebin/Elixir.Bandit.beam new file mode 100644 index 0000000000000000000000000000000000000000..45726359bc1e599777e7ae9f31a0e3102862e137 GIT binary patch literal 21940 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�JpCKsZ~G>10g_$GY~ThX|B**t+_#Sz2-X2jhwGF7ilimT%tKovqQ5> zvqy8HW|n5QW`QP?CW|J!CWj`sCXXh+rhulfriiAvri7-HrnIJvrktj{rkOW~ip2X02wOX0zs0&1ss`HD_qf j(k#&|McZ=Azz_mV&p`Kq_HBapa5D4%cVK4cU|;|M?V?tB literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/bandit/ebin/bandit.app b/phoenix/_build/test/lib/bandit/ebin/bandit.app new file mode 100644 index 0000000..03ff706 --- /dev/null +++ b/phoenix/_build/test/lib/bandit/ebin/bandit.app @@ -0,0 +1,81 @@ +{application,bandit, + [{modules,['Elixir.Bandit','Elixir.Bandit.Adapter', + 'Elixir.Bandit.Application','Elixir.Bandit.Clock', + 'Elixir.Bandit.Compression', + 'Elixir.Bandit.DelegatingHandler', + 'Elixir.Bandit.Extractor', + 'Elixir.Bandit.HTTP1.Handler', + 'Elixir.Bandit.HTTP1.Socket', + 'Elixir.Bandit.HTTP2.Connection', + 'Elixir.Bandit.HTTP2.Errors', + 'Elixir.Bandit.HTTP2.Errors.ConnectionError', + 'Elixir.Bandit.HTTP2.Errors.StreamError', + 'Elixir.Bandit.HTTP2.FlowControl', + 'Elixir.Bandit.HTTP2.Frame', + 'Elixir.Bandit.HTTP2.Frame.Continuation', + 'Elixir.Bandit.HTTP2.Frame.Data', + 'Elixir.Bandit.HTTP2.Frame.Flags', + 'Elixir.Bandit.HTTP2.Frame.Goaway', + 'Elixir.Bandit.HTTP2.Frame.Headers', + 'Elixir.Bandit.HTTP2.Frame.Ping', + 'Elixir.Bandit.HTTP2.Frame.Priority', + 'Elixir.Bandit.HTTP2.Frame.PushPromise', + 'Elixir.Bandit.HTTP2.Frame.RstStream', + 'Elixir.Bandit.HTTP2.Frame.Serializable', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Continuation', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Data', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Goaway', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Headers', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Ping', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Priority', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.RstStream', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.Settings', + 'Elixir.Bandit.HTTP2.Frame.Serializable.Bandit.HTTP2.Frame.WindowUpdate', + 'Elixir.Bandit.HTTP2.Frame.Settings', + 'Elixir.Bandit.HTTP2.Frame.Unknown', + 'Elixir.Bandit.HTTP2.Frame.WindowUpdate', + 'Elixir.Bandit.HTTP2.Handler', + 'Elixir.Bandit.HTTP2.Settings', + 'Elixir.Bandit.HTTP2.Stream', + 'Elixir.Bandit.HTTP2.StreamCollection', + 'Elixir.Bandit.HTTP2.StreamProcess', + 'Elixir.Bandit.HTTPError', + 'Elixir.Bandit.HTTPTransport', + 'Elixir.Bandit.HTTPTransport.Bandit.HTTP1.Socket', + 'Elixir.Bandit.HTTPTransport.Bandit.HTTP2.Stream', + 'Elixir.Bandit.Headers', + 'Elixir.Bandit.InitialHandler','Elixir.Bandit.Logger', + 'Elixir.Bandit.PhoenixAdapter', + 'Elixir.Bandit.Pipeline', + 'Elixir.Bandit.PrimitiveOps.WebSocket', + 'Elixir.Bandit.SocketHelpers', + 'Elixir.Bandit.Telemetry','Elixir.Bandit.Trace', + 'Elixir.Bandit.TransportError', + 'Elixir.Bandit.WebSocket.Connection', + 'Elixir.Bandit.WebSocket.Frame', + 'Elixir.Bandit.WebSocket.Frame.Binary', + 'Elixir.Bandit.WebSocket.Frame.ConnectionClose', + 'Elixir.Bandit.WebSocket.Frame.Continuation', + 'Elixir.Bandit.WebSocket.Frame.Ping', + 'Elixir.Bandit.WebSocket.Frame.Pong', + 'Elixir.Bandit.WebSocket.Frame.Serializable', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Binary', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.ConnectionClose', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Continuation', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Ping', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Pong', + 'Elixir.Bandit.WebSocket.Frame.Serializable.Bandit.WebSocket.Frame.Text', + 'Elixir.Bandit.WebSocket.Frame.Text', + 'Elixir.Bandit.WebSocket.Handler', + 'Elixir.Bandit.WebSocket.Handshake', + 'Elixir.Bandit.WebSocket.PerMessageDeflate', + 'Elixir.Bandit.WebSocket.Socket', + 'Elixir.Bandit.WebSocket.Socket.ThousandIsland.Socket', + 'Elixir.Bandit.WebSocket.UpgradeValidation']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir,logger,thousand_island,plug, + websock,hpax,telemetry]}, + {description,"A pure-Elixir HTTP server built for Plug & WebSock apps"}, + {registered,[]}, + {vsn,"1.10.4"}, + {mod,{'Elixir.Bandit.Application',[]}}]}. diff --git a/phoenix/_build/test/lib/cc_precompiler/.mix/compile.elixir b/phoenix/_build/test/lib/cc_precompiler/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..ca4c2cb8663d810d5a9a9f0ffa2b66ec3eec8023 GIT binary patch literal 5381 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/cc_precompiler/.mix/compile.elixir_scm b/phoenix/_build/test/lib/cc_precompiler/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 ucmZq9U`}MrV9I4+U|=)UGqlh%$!1_OvMA?s&B?6DEYkBxt&L8Jx(C<20j+TxLH!a_DAyD_^t)V3%f+TwxK zhaiZeMQh)q1ut4q!~+2-cz_3jR)tm(tALuSyh3LKSncb)_s#tC%{Sl7CjZQYL`DlC z$Vw3y91syeE%$*Sm^m;o@QgVH-LPNVE zD#?4Uc&-iFlxn5-oy2BNbVIS|eiE0(Pkb z1aGqBvTWf@+N+lfAM|6~v=>=(tF3KL!6jyGm1q$cOt}VhW8eq0&YB0o-Sl)W7iOAw zVa)@P&A+Bho>^xLSX+M<4`%YseLm=q@n`WFF_boz{+Lj;hHfVUSOBm9*#C*)V53QXZY>Q z-(~IpiIuIM8r$kdPY0 zfJ=tYfkdMv6Wvigic?{syPiCF*QGQ;WlXtx!*oEjrP^Gux&5 zaLKs1&$phuGw{xDVQ%=^>%22%jxQFJr)RC$yFch%FKJJ0OdhD06|Qoc)=T^a2~OVS zuNWJ-ta@j5SI(<4ao3ILO({!aJ403$RLPzyi_b>2PPucq_t-IS*Pfhg#p*bIuJ5hL zqS~fMwY6>RUQUzyr#G@@X*`T>6XJAN9QocIyb0fkX0EaF+%nU-vGvDpzU$OZYu8n(-S7{laV(ITh>KLhgE(uo|Qxi*ssOcWPw;*8aBQ zw9og?gnr?__c>1rU7B;t#=YNTgvCC42b5hcp41FCm_&=&=XWR1t}V7KIa2bpS;`49 z<(8hgd4W@zCXhC^*O~gc_ZJ*ZCMTzdZwhm$@H&C@hp7Z-#oYN?TCI) zTKR#UU*4V5P;_H0QhjE-QWkkA@O5pZX?|4I zj@R?{w%o5TEZD%m&f`1}%wXSB5r(Xi^rF!2H7@pJ$Bmp(@F47{GH2A1sA9K;Q%>%V zT^tZ<+`2m&e$lt5u4|u9bb2kLZS;y2of%j2pQb+f*3_E)SaaNdmyrF$zUz5}@v^@E zT*u^dik{h5lUXh@2^4G;CxP#YN(HCT1~orz61f7EC!t!2UPyr<*kCpENDW;?K*|32 sO+es5A%nyc4I^*@N0s5=K>?HLdug~>4hOO8HS`#LCo%wF&Hx1c1AvUHm;e9( literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/cc_precompiler/ebin/Elixir.CCPrecompiler.UniversalBinary.beam b/phoenix/_build/test/lib/cc_precompiler/ebin/Elixir.CCPrecompiler.UniversalBinary.beam new file mode 100644 index 0000000000000000000000000000000000000000..cfea31067567f9ce0c790373f863b819c7b9c8ef GIT binary patch literal 4548 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

    GTot>S%cX4WPn5Be7ikzp9 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 RMqy-_8TgAN0n}vA{{ZK|-RA%R literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Connection.beam b/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Connection.beam new file mode 100644 index 0000000000000000000000000000000000000000..e25cbc740d4b8f44f9ef6db0e444aacfd91c54b3 GIT binary patch literal 39792 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 dJY3t1R5y)hkR(B- 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 bqo2RCz|(@T9Q<$r8z}(rHyzPnltB15=gFkT literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.ConnectionPool.beam b/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.ConnectionPool.beam new file mode 100644 index 0000000000000000000000000000000000000000..69715a92944d52bf29a7f1a6e32c401dbb3eba14 GIT binary patch literal 28544 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 JH`${){1+SY7`Ffb literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.EncodeError.beam b/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.EncodeError.beam new file mode 100644 index 0000000000000000000000000000000000000000..17b618fb818c96e53cf7cdff3cdabb417b71d38c GIT binary patch literal 3500 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 Xey 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 mND9S_A|)e&zj5hK+}gEC5^ literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.LogEntry.beam b/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.LogEntry.beam new file mode 100644 index 0000000000000000000000000000000000000000..7d8f3a3c26a31e8d4f43433f6ac72f95cc1a5d42 GIT binary patch literal 5940 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Ownership.Proxy.beam b/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Ownership.Proxy.beam new file mode 100644 index 0000000000000000000000000000000000000000..75fd74925f4feaba1dc1a1d2dcf5c47d30eb4601 GIT binary patch literal 24220 zcmeIa2UHVH8z@XjfK4D02vVdN3{s?p-eu`X69hz1N+1D3NgxF2igZL2P{D{I3igJm zh$t2mdjV{ypcJu!Vg*6r&L&`azt{Ks?sxus|8wrWIp@jl&OGzX6OATYQ5-6ZBB$h=>jG>1laM+1q914>W6GCUlP?-_K5p+&4zmmr(E-aEB7R_LW zgvBuEOim{6l9k8_iDbpl=xk`#-wEx^s~e7_GHEgN;OQow;nbJ}dK{C*rpLvkz%({1 z4kAu9_Xf%^BXsN{sqBOj4l5YQ1+EeCkV7bgNoA){s4+2Z@rm?AdN79(O9w*yy~%!B z&wu)IF3OJp~l70nKXznh3qh`5F`=KV#iWBz+BX@XbzhiMxSPcLESkajYk%=4{Xh~txlPDmfGI=O$dblUg z0VD=iF8kTY#b-$98W2p6&TE6-o;N7^Nm7dG3g~h8N^8(I-Eca z2bYMokT8HG;@F8yI_(z^LXu&LY&Pg?zm!ee2IK%le_*(9R^4=?&Yr47{72BN<74tPhr_4|9D;Ur7$5y&^&nvki@iA z65{|7Mgr(OVJsSALy#}%CBT5Opnr1cb-$zyNM8G26w}qy2B}D!qWz=S|C;F_#VIzw z7XD0sz^_b5TKiXX>*`O@>(NF6Xo|d^_HUPfn-r)H4 zPuNKS9713x0yxCMg5W7=Z*6G2A#20_lj503j0%bjQsS$P^U7+T!F%nSyAX0`D5K#cqUg zibQUv2#Laz3C%5mNH75fNphGwv6RYsjd~<4(&G6D>a{weU zm@*{-Of&?xl|qcxCPIjV(HJAVEZPb$hk|4g6krZehJxg5RRqwWK!t~-VuYWC1}3+{ z%cG!K{9?dXo@Y4~#BvlurXXh8Vh^w?IC%=sggmx@Sr6hNK-mzlz$Y{t1t|b2K)n=q zn8!rQ2(Jh@D4`%lq?9L#6be#;F$flh3lT&JnOsO>+FeRKrhY1*3mVp?F#M6{0Ws9buxe#&Mwq!IA-wLmSg2)I0 zPznX9Ol!aoIQ2Qy-vUluJsy_g$qI1i{t(0nFeC%&24;8-19JcrzGNDRWH3(B8%MAM zRd%4tj$&&-2(z^#*lB``F!1M1wlxqy+ZvF_7HGV^OvnekI?fochSS2Uq99e6j20&0 zgHVtfID?5~7-vEhrr;N$Aa$6C7A71=K^ni90mf+~p$$yu4J_eJ0(P<^+j{?vDM-K+ zz>)kgo5weWCJLJO!xWl-F@tGrTqm(l*1J+gbYA zQSjz6Fa>V}<8@Gw4qs^Vsq{hy7V*}^o0Gk#yQCeGYhVK+()pm7BBT;v9SV|T@VYH{ zT@<8Cpa}5u2fxQrY^4yDq^DKV1FqFaL3&gA@OqBEtrP`>vH{Y^tnh{?$Y46mAsL?g z4FQ2^wUu}&Mtw@{=?C#sb|3}1KGxt7l}O8 zfWkmr*=cc&fj}lG$oN-rO@K;3TvNWdW+=$?hq!V)am@gMzlb{(us_7j!dm<$u6i?e zUIB@~g=UEms*xOyn@JP`@dQ$)`7d!q!dU{DNn`^tf+uW;f$e~-@)#06g`Z^$2m)M4 z0bH|x$>IVai(7010SDtGw%~0*&xEJEi`K-$=$0zH6LOu2v+~Bxx5HVJaoT7zyc60S z00|#L0;!mUk%G}Gu(u&>U=I_0u%2iKv>*|Qd^<81QWT-onc*GzNx@MDCgH6;@s=pa z5=0*nNu8Q_Md*f{ z55{^TB7sgpGO$%4p!cGQKo}J+q$~oraiKYtLO#G2AviEJ*pZqCcv}=? zD@KB00}M=*f}N0@2!@jCY0rY#n2WHP?p_#40?^EE3*H%c)S1tMjK&ivo?wu+wIdOc zF_CBh6y!pxBBUNJq*f_};SKWSUk7=Fiai%ncR`~d2jCIp=m?yO9G$q3hBK&l=0fw3 z;{qVqnHVV*Lwg?@2S(=r+oEBdGl*d`z*|d%G7RHf z!I`!Q2_o3$2ml-!%pt-!cc7vUD3pNFJ}`|4o1yNWBZKq_;}!yRT@eZ-38U?i8mvCQ z+zXUbkn#*60z^bB8^SnmBFuP6hG~G79#TUvp&)ZM5`nN^fGi_`#4Qa_^Z_mP|58uj z)l2c}tw6m2pCcGI4MhaNEW@4%bI6DUWI)^qbSn<%R<=0=Vl7#Q#PLC98#xpiNC`~U zaFQ)JUlp8P3r?Givq0l4TX5Dy+%(t2{S-K+6?aj9O1#681iD< z4DU|dhWGFzQb@R^wnPFEU=RTY5k#sv5(5-4St65>8W0^Iya5AuO;C?p#)T|?BK(p= zkRb5@{E(nn$b~F{Sb<=u_55LM(teU1Fg9+c0qg{O!ym}PA$T7Y=JO2VHRQd#k`*4 z+k*E+LB51I5^tEXK~ME`A`o%0SV=XUfPu56;Pt$8WoHi?_`qZuOhf_`4g)r`1~!v1 z!!HFkTl&*xu!;c)1CZ%dXj}+(rI_IZ_*p3c$x2ILydMhko62W7n)rYpnJEBtHZ%p~ zAsTGxQ{V}Mgv5nxKv2sfS)8A*NWk#6^*AcYkNh)3NlnR(;bo{L{PY6of;>q88IMPo z1dDueG0|s)_ga!I^L&he{z1S^yYXvgH@=l>pQD|45BF zQ;a#1NO=HI7xC&+U>Rp{1R>yvboD?kDwtr?euM~NKZPhG0JH-Ja)C(DECCcmg$4Ps9?FGW z0T~;>F02Y4I+ZcObeu^x$A^+BVj*BUjtoOYdyp(_$pVJ9WRePO2xz(S=gCrrc+k&% zz<3>tf`BtXjr;T{P6wsoD2V>+C?3wUBA7};9$=CTqrr$C0nj2*Py|5xF_(@6l#t|809q6ZVj#u5DL0t0M1iS3xK`mpo;+$``X9}owa1{KXrzWWGl=0rUehxJ zOa5fsXL>TO{-TsO8UHay7{(g&<_OcXb7xiTJe+)7rl8@}bX}eJ9w%SIo2~QbJmV55 zC>FK{aR^3>MgKCBU}^$Wwt#u7CkkS5A#Y%C2Jl;)8J-1t0}IW&R}&yL4WH^q_5>jioFPPlNQQny-XsE< zJn$wT6p*|nxKK!?kQ5Q=d}IuW25{$;0@7Y8IF*EfnrU1p2^^Ktb8a8Uq0WcV{{LGQcz!nNaYT9-utX69H-xD9$&-7XsA_(IEc_AoG$! znQB}zz5quAkOCkIKq|ff1r>mM9fVCGNCL=lH5Up4MACo+MSvL@1+4)?DJV$?CB?wG zynF+=0^GG=5C%0FK#g?-n8L3il0i)gPrwyGl2R*t2^uW<`UnUJdj4E@C4uEO5_LJ1 z5kn1)p_9PsF^NqFi+2eeQW7P|2<$tcS>FSffDl91$ENcVe`~_LC*i7Or3IcJb82+LrvS>*og{F{jI1*TBj)NuglPKQRF?=kT?n z@l=>*k6`df|5)DUiHleUn2rP1@cuxHFXg{!8k;~;PoQ&1%NbN27xRBvkR^ddVW5Tv z4rj;PK_HPB38VzD!W~26Tc3*fY-+oM?_0jUzuN%kgP7+hB7=i0%k$#mS51LY7sSSa zxI!HR>v$>v@Bn525ClL3AO!#eKo)=;02BZv0J8y1O2Y@833kv#Y~kWd}9G1@=u>5I0!xyz_iS)sq+MIjQgb=@yoOf;>fu}GU7Xd4FJRd zEJw-!5grK6Ism+%VDjK7I7tV9v?&IFv=f*rPeV=t z6ipqc%MtkyynFx%JzlvRg9CV>5M1O30a%-jSRETFn1uVeNKZw9Ytdg;h`PUGbeC)!k?> zcBV`;ED!=^!r6#dke@LRhw@9u{ns3iWM3o=gS-ItPLR}(*jOt&KItDe7n5*5_gScj zT~+@L{*)d7Q;KIv#BykAXhISO*$6}QQT$OZ!Ukgw*hNVKD#wD2RIvFNCE&&iL;T+b zKoYL*yK>SoG968ysz>&cnbF0fbiwfKUJk zeh`3Q0KxzexsYolevmv62mrxB@`FDBq^%nOB({-qBo`rooFn~~*Z06t)CO!SgQFYI z5=fw+mnSfhxI-}s0!Q8T2h9g=4FvVj0x;VY7e;}4Y$!dFx|{)aI(b-0(_553cATQ3 z>=rPQobrrE6A4cduo0C2hJ!~qs^0_x~-R8TMj6i^ev)-eO|7zYtfn7;!XEfAsWn*ey~(il`GHJlNy z>&*)1B!O1C36U%o2LzuseL2{1(~XN{(V2{7U9gi5uz%ef)s10<{-xx{P^Zh=7}lXD zN7;u)fLx$rGk5bk^ zhn7gv8={+{ckOQvy!ZN0)#lPjC)xT7*UyJ0n>mYcdwoB!J(p1Pb#N9faibwlo#jK> zcIKTT{>zsv_B@}Rab)Z9=eMtIbNy^6?Qcn?e0+NQ#^lP0Z(lz~EUxKse{l2ogyX&X z2U}l1U+t&A^nUrhgPXgN3j4{&%i^6J9m7wT^)>}YAAGmDS^BHPq0$l6`#18AFwDLm zGD#v=2d#K=jK%GCKl=F7rAHpkPxYJo+qWGGZhqd`;Gdv8tBbrd-1j=0QKE*_%TVoSQC(drc3~Sz6r6T|d6)HFU}n-#;I2~AKXm5Zk*;jFTXvp=AJ?G)gImQr^`tP zGm7VwK4^?S?!NootdzsfkoiRLhi4g|cz4V++uiH|RLkB2{1*)%M2XsMY* zQH|G$J$2CfQKz-Vb!r<+-0!@zxjonXd9{$lr$w09v7XSIFS%WtG&9o;rPt|RrE9!e z<~-}_Ma>ckqn(*wuV6l1gi6zDY%UrY1t*1SKd-3jon<9n?RQ~*tF}yY9>W#2yWeIs z^{HWi{kv6GU#@5kq%M<+f4H?XEWY{8F|(dMP~#>6A=_C*@JK-JUDQd>9?Ol z_Aj${VV9H_+%VWs zGCS7j!-~_1MfUdhReL?-A8&P${iuDgD!4grqUH6qj`cFz0s;e`K04EQL~=5go-)w) zfoQX4=7j2K{Doutn@PjuBQswm^(K9jD1~kqomi$~jydAqt30^*@bLS2SZvx_?X6~d zN9Xt6pKJXZbINi1RTI})3j6!Ml$??oGO7%Ea#C@#*O3?IiXk?IL$f}f8@tq=DW#0v zl|qOpa=3hMSJ_E}#RdV|eW!Ehgv5!yPd|5GILySlGDQy~5j0OMtmNpJT~?jd0tI=< zFFKO2(o$~o;pzpUvVkXFkH6PxN})^?#yj*rT^%KPYpI@3JLz;FE&t`a@P^9vJ&U%S z&1LIw4m8;ZJhiQzi*;wK4`<#LJae;CR(=*-YTR1)D!h|;uqvbS9k)Js-L5f*zQX%W zwRY?B_WMOq!<}#CX59aPkFv74_3ri#HR!Zk&AE^iT<+8O0PWtOQLzZ0&Y(@Zac;Ml zTc(^t$BWhufyIwXrvWsH}z@V8!FAKYRe z9vV^Z_?D5UyyMU!<;6#W^J*jR1r_Jlo-j^r4xpMqLSYA;mRok8k$Yri?mau~qRzt$ zu&w!Qj_MrywMPTR25oQ8SGo{G8F0W3#gg+etUIrJ@MN3CGR_Sa?`Q8Q2*AGGT za(=FqZN8yeHQndlt46CMJ#sJgdL~L7k{vZIG5XBa?~guQyv*ZF$%DOOA95S-Jo=Ek z$Hn-o?MtDkb*s$YzBU?TcE69YwEZ4I+o`i}L4mB#V~VheZomz>eFl9Sw`{j4(drL7 zUQT~>C`#|v_Ly7eHzv;`a1K)MGndAM-y4;=rTYpi&=)z!_n`x1A$wU)V{3W@yfxj) zRjuSTS`wV>BE~q{oQtQ_2xi)=5Rz;+bWrz11|+JsY51T1mXSWxK$~TgE|ep^FNc6W zy;=LT!Nkmv-5WM5IK@^aKclxx> zV$I6_R>CwI=ae`i*Rd4#AsY`Bbx-JksRgTaDmqT}^P zb&qotUp^bj5_Vm2RwvMp_?4ue#>;}A8&6tOVI8* zk)@*>94*^jWzuVYFHX!|Y@^+U)$a_#<=DX&TeAF??H_OtXwX%vpV{!*U9YA_?zzxK zE8+C(&EAjK)A#$mE$uya?Yq*d@?w3fRNZmzOLp8uka3s(d#}97H?BK7JQBancq;F6 z`JGs8f0By%iu@CYR5+)P_!?MDK+RthcRw~>)-$>})L29kADxz;^!C(_+Z*RUp=@Vj z#p@4ira2x~IFJ$E>{fpE!=o>2)rQ3dy4On%OoWgICg2^*IzJ3-bql%j(j^Zo7C*a5 zH+8Gxha2gB3E^ifN##u8O>~^vAVt;LL zSL9{S5|zT%HU|gt=vwYXa?Rt!rYAXa`wwY6PtNnuqdSYn?}x3Ap1*&9`FYOl%MD+i z-Z1T_ELB#3R_mL-FFfFQTD+aKtyfnteOc@?%-&D(nMI}>*Lv;s5b0>lhBqY--4!uY z#%WrRUZvA?4N9BS54^d1Bj~o~SZh&wsDy1&bd~eY_;GUVP`EVhwT|KIeN`fZxAcXC zWc^xdFTO3ic$IPGYw5*pJ?!*VNpeqUgHl5)9&3IzGW9)7J?<8?fnc@1V9}`>Le-YS zl&^_rc8M*j+Hum^{(vRD{=}@qa*8LO;>~^CEM6RV@f`0}b9mLwB{2hodtN=f`hBpZ zQ|ri+R{aaE-$>)vuf}y0mKzQ%VxRGhwD?BTEQq^a|3S`qv{9#beN)cD_jg3rFJ_nP zJtxF|xv^`>E9*z;I6s}hQp(jx+1n05jdj#VkLER*1j12~N-_D;gl+Gu$2o+LVY;RV z$FgM}kQd3kak|)kemm_UmlPhk{JSe!Lc4!~P*ol}<&Kx%{LtmGNAInf(-Q6-P&G=O zZ(3m}w)gVGMr(CNG28Av!=mEyNsQcL%Z+i@DRWw0ZS$`!9k)4G=p#dp_)HYQ-+G;~ zpdg9EAl=M<;jv(8wcOA$2c;ofpY$`jTsP{v%J>SknB9-`oZ*LIBSnl`X`9{2vlZoX zDitq3&;BGSQ@f7wN~$m1;MK8|xzltr-V=GTss=vL3NiXZ(?uC*M%hC|O zy}#9a&F&6wk+hg?4vK`6+Z>1HQQ^)~jB(0iLkr&;dhF)g*P4wlTDu%4Jl@mjAt?B& z^b0dM!*_S(qxPaVL&}w+Tq{vag_Z88!oYQnHJS3MrAS+_SsJ8P0XxV*44(5>@pbi>NAAjfv82mQE z`>%ENVmfMBDBM#akDJh-TnB1az&oI^Q(gWKa15MPIxwSg9RC_Mkp8NiM|Ne2y zNMFyeW zEG?Z41>`Ju$lz}j4zI({on>l%F;d{eH3hsvEUj4hxqY0kp=bCp!hXGkD15!dCE@g? zax}s7P6J2IAApjiH-syHd?9O4ux28D@x@n>s*_NuTIGQXXOEq3X9LmNp8eBf1_eY>vTk=1XS z`&{QcTu(MsSg#vux~1yDPTg%b`!1BVRw`Q_>{SbmH)@TEERDVYzU?w3b%uudJlCbh z)$XXGwHb%Tv#h%V4TVoFR-p($r9?clbFA{sJetK2mvVw0*Z*A~8sL#3PG)FFK zK(v&su65yK$)%^LE^K4#rv>NI)-gvGTCofKaak@I@Q@#gZ&-O?sY?71o_ z87WGaMx9h!h=mf16z|KBbB3;~UYc`FUtn<~`)@ z4PKks$S}8R;)WR9op>lWUv*@k_qx7oot?*)%tGT-1({#B-I*Cx@CCcQY`la|a=vZ#|B> zvnFSH?Qt6|(b;M;n`Kd3;W1Wh3>A)?>)$%OsN_B-Q!Hf2CUunJ+h8p>k^Z4N+4oaO zyZSX-Rbgj8Y5yyE+=h~x8_tGWwVAeL@jS8ESe22Hm8)?gyKWg)iOSop(l3RZ-e_FE zvNd{M;YPQSSJzM8@Xu=4qHM@s@x-U@v`=7->t_AM*|5BXp4&+K8^1oa8<)Il-7Z~j zjAs<0TcnQ`qHSvw510^Fla*v17D}Bd!aXy6=On*+bBQFb{3@nH@ovS{c*omZn&9^K zGjjr0U8T<@=7k_LQ1ur&0Wqt=q@dy|c=; z2b+kzd9Xi*v!%gd$vMZTbGN)TwK{=2p_CjbjIQt}*IFE46%)QV8%NvE`?%;r%b>)L zLj^;nYOeLPmd9l)KKtD7fA=P`=z*jw!PwXc4l`-HR8`Swq?^}yX!5L!4W-Bf)v@57 z5>q(0*yT%qiH_K!@a(5;BVAWkI%S_Q=$|}KPCgr7ys)&bQ+U3I+)BE`h}@E<)C(1} zUl4W9uPf=pXz%#C|4o(Uaha-&gJ*IdzN;5_Ue3K z_wtKke9dq)E^QIR`0=OBp|6|Wtpj^?P2vswb)4FU`{Q?s=;_`%5~WKTJ|#FVx#DOH z=G{}ZRpJ-xFXTLxslMkNm6l~X<{7jrLxT2x{w7Ihi-Mv|!fBT*t4WKZELxFfZPCa; z{MELDLsiiY&2sf3iOcH64+_;pt(LRTZ;b!6d7XlJ^1IEg^K+Z#w_d5TJ$9&9S6Pe} zk~K0QpBKpDp07C9_D*0Ks*@sbRO+$hy-H^qO3YtYzc{t^jqcg8GHd1y@#1RF)OM0$ zi|s!BKO)@=2crh&5@f-}!8wXl;JKPF^XFJI=3cRt~=&}dIhMRB>3as=Vo(Q8N7 z39e34^60Gnk~`F8a6@X1(^ku1*)8_e+cLIYZjz1RD>VyW5KnJ3ls@D5fMB`l;*Q8~ zdLgeUi#EGvp>5jSd(=`8`9PL=C={)B@){0-Zy4KE@$@Lk-gTxSTMJ^ z;->a>qc{GByXb9%(TT=>jk902R0U_#M7<2f`!1X~*H&py!uN3d?eq_ajum9-ptW~pXw;@T^tmc`AEzzf`>wN3A;@R! zs+ZKryie=DWuW_`!m6(e7x*<^Td2gKo{Ks5QtjbNJ&VmFexmrkNP5lM?{>9gi-|_D z?J}ZftAzu?tuJv%Z`O_oZGB9L7kTEV9BE=?Iy{1X`$nDqV75}z8P!~;8>L6tvsOZ# z{mi-p8iTrtqUTrcUOFB$Z-eW#p+LJA{mG99Kd-^BknLBG+oJS&-t5vdRZ_w9;46o- zjn&TC2CcV#ccbOvcA47B3b)OpSJaojObnDvJzw5`p=_0{?v;YYh3fZxA#=U1HrMJS zx%IOz*xw%8Y*h2qK;&*v-kEbUbJZBZRrOu$l0$ndu3l?BZ8}*0PV%rtH~ab#6Xy-@ z%6vUK!y1&2G}|=EOQxODD{1boeqG_@TqjRDYKa*VRjFc))E9U($mEDGUK2uO5ycjVb0~b@n5fRQTgsMXMyWZH|5#K+stbEVH~Nuv&1NsQck%C4(AQ$HZPK)f{yk zYqw2@)@eSVoxZo*;Lz2>AKUk@?Ng4CDlQmSeOZ6FL(E=7x23muu392qHAUId>zfo& z=gsm@-swf=k~wu@JNA0tt2DP>h3UNW`S`p*>Z~0Wv&ib}v-{NL%W^k1IHdZin2vg{ zI3QnNy)9F7@sXOPr+Y2;`a;fr_e-Ahoh0X%t@nqPv}-iVIc;AkwoJ8NbYP^uL(O~W z{(Dc!ldl?Xy@IT3GCA+vO&-cQ=xbDl&i{B7d*qrlY4u6Vov&XX@v)U3ceZd9XP%rV zCfe6mf$RIKeyZXGDz199Wb@o(?arrq+V|)?q!%X%I@~#B`yqdsi~8m>GT!?FCLR)- zwA^=eu9w>X(M>5k5T!&s@NdKRIKgTfmP|k3+y|B_*Wnr#xZ5;cn587K z*C$3lRb0l|*V|mFcqi-ip&){zCZ6LXR=SYpqjzyW8C$|cn+MeEF2TLNLay-x5| zq^(9q^k?JUdJEK6tH)Reo=uNx_B*TQxj14y!7fliuZW#&-dp|oS`wCSyNy!1tedHq z>fB(mIu>QGp{e@9vy&>@&1SXW%B5;{B_E5(cRqn~>Te;RmrS2RZKUg<^2#F^-J zC&o(?|BY^!y46z`yk<$53=A6>-a*Tls=YpyxGVpHc<@0PXoq;AGI@}u&`Ya(b9nQL zi31wp$DPvV!#@5=$prh^#r;F$ceMJ-%q{ zWM;hpOZuaH$VI}KfW;{TyO##tZAO>^b1jn`A*oM$E)tAU-S&&^mcS3yXRp%SQP+P! zxmMC=8)`!t=3Yc;FU`Z#MzstxQ$?O)Bjo>5Z4YUlcNR{Nj@@U1+Nx#qSygR_WFy3k zW$dIpc{ZS3th)l&wk~QRxnOg8?cQ+NH+E`2F+)$8S`3+}=hmZ}w_PrAxjUKYJ+5_4;k}lOBCV>A*EL z)wSl**n6bzhugO#*{ywX_eFP@`Y`r&d5OoQVD*+K{^?l%n~}O}2#KCb!E0-(*{8K$ zZ(w@g{$7;X%IrDm%hV4%m7(T3^hJ>>`97iAVtlU6?H99NwFbR#s1H8T!bOp=eBP0k z)8D#JZKJ!H=-n`B^%41OP(WzN$E*4*HeRJqOBe6rqy1`37z&u_WKlAh zSlFM#kr82UDY@Xg_0b%t(dcu!Z;#u5rUT(Gp%H^Hun z$Z=he;W}Dl|GwlxJ!M0dkIaTALYJ?;K651Y^Wl$g4r*mDf>&J$)Y@K@TIn5&N{}dt zskrEH+Nz`|d1>FAkn08(@e(Bx-+KxlB|m*$oU|k;OJ+sSTn`nQRoWIAb2U!yKGvYk z8Pi&LK(vRy8 zl~;Bgd^B5st#NjK9!x)ve)42R6Q`~;X+K@6*SF*%lyP z7&2LqlyPOp7o(evj)-9~Ijp)zSmd@q#O}l7sxUtz6&D7QC70 zUUNqA{vF}`ulQqi&)yWD$GPTRo+oE@ow4Op7wCJOog!b0?!7hb9_}FOIgz)`w{yR$ zxpKheqtft$%__knsfD++d{!w6Tu{&r9xruTYF2g#ePk=ATYq8Ic<=_(6(68v#2$vQ;a40wQcvEapUg< ztIPytKf=!7jrS80-9xWfofwpBu0Q;GM&Url`@F-aHWnxPeKVJMx+gBIT=jchGRtvp zX?&XFDl_+wSyp3v)Z=E?o39>v^5GU{^LEi=4=d*Pe!6aS;fpu>&3(tS(dF`MWh^D7 z9>eQoR}Ea+d&+b2dsXmY5_ZLGO^W<-0gahr2k$)4ITE}hK#BFGuPp)5z6+16;ZBZ3oXp6sD>y=GSuj7TM78*=Xmib?ONMt0q(zJ(|&n{KuFDw+bCCsJ6*dXwGMvyPH0rucqek0nbd%7(Ly`X}YiKU#Q7E<*kQ4srAp>g&WI{ zOMmC@7h35n-gpc4qE~kJjZheaC5IOIOJXzjd{2$2DFVSvqDHF>6*7J&mpZbfGdjJ_tJ`&Xrvp_)h3S zIwh^CdQn;LXzDT7JH0cl#h>S^%lUpCYxB8!;NcC=9S^Ebe>Ls+^5W&Ldt_zdO}Ca+ z2PTti%AU%0Ea_XjCg~=8h-MNpc2e9rXr14iXMze%ETf5KCm9aTb>Gx$S6e4n$@soo zQ%xCupZe9rjud$|RBg@3FjRbDCk<&V2kbA9p!DLw|g4iD!X_IY_qd*^-rivdYH|8R@EP9UO_wY`t6J! zt)K@@FOp3*Mz+2)domDXdjoaSBH7wWqxr>X-RGHI30jX-9#MB+4mR$<5)bZ6f-1|p zbzQj;V=Ep8PORYerM3lA)>`(C@7gr)!eYg206+n-`KL z`<{sGm{)j3|I<6OFJ<1x`Yu0EztVvAAD(n+?g>+|om*U8XBLuHkT_{XQrt;?u?E+% zF~?D8@ACa?qA6f3`qxreemoY~yvw#TBotWiV5j7y7iL_}v-sobu!9y=N9-hHi3i`325GCKdjRk+9|Nxkv(woGwN zT;E%R47sLboe!QGes8#VuIyXi@ad*Uc}uFO(bg_(oZZC8v)YpzJF~5 zAO8MAz_;&)-D~e>tgP!fJ#hxl4YxPu=~rE6U?kSm}(fPnSof-U&QPZ@jgy^SMJp=9!G~=Ap_-IH3Ab^}M0zp_gLbq_R`xK-3xF2az~lm z=nUD7L%!d#o>&`R&dOO}Gt*?}$=zs`mEXn+cX`#43(|L9Y4y<1*Y6PCP$(v29^iW4 zN7m?~=hu#1%cG?N_NB<`5NaMf& zOb=DlxbZl6u*+lQ>&MgUs+Y}w)nAy9aYk`mEaObq3+{4Z;<}5meI6xSlw9*-M>|~F zu3>`{TUbiN&EHB?dPV#E7T(xje4yL*kj29!rNYN&O^d!QtueP58(WeZ>UmJ;B;7WS zS-U%sb%1cJ*1M`T|KvB3&*!&377%bqwgb-yN_S?1r`sgxywAn(KV?B@2QSw{9w9^} ziA;U_1$mkdJT3|_e|un*kAzNOM1UG0@Bk?I?hDc`Qjm9;qCrbxQezom;NeK{b%&_G zE##5@{n^uhrj7nPGXH7WUu57n6XGPs#nAcUqmzWgVps`u8gePfug6e1tXM?NL?(FN zkY6UqijJC6D=G>+B?zj2e_oc4_9p}VMTtN2`NKD5{-Ot85-E%;(ftpN^tZqVoe#GFWA(> zmVBmvWb+S>5#l{XImJdel)(XlL?_~d0LsXIw?>SX|gFkbgiXnb~2bxCxB~bs` zUNG{v4)+h?!L;#ran6LH$nU(7EnpT{0_ty_3wHD z8hj^J2|y^BMmse$oGH`r;4n zQNPpw2YdY=nQ#7ojj4Yy_J8ut!ryWgKYjjPEd3!2#eckJ!T=@)tV{F8o{1sTl$=SS#&=oI+h-W>W5 z^EN-6|89VScrUnu_jrHnNIy*ZUuE?_bDN&y{NBCz-2QK}6aUug|JmseivWDX{Oq!S z$+!P7pa0Qirz80Hk^Mhu$!GqDMDyz%GHUHobXZ&Gp1ND3S{MC^EQB3}A?Ef*Y{~# z4_h6beJpy8weBTzjHtL`Q7(<=04YRkBN=_P6$MN z*uYrdN}uWU2Lu9bT3uZofMbj)lTP*sViFkvo;3deGKHA!MGT-5Jqb*rS1B_OjRnG;!dPf2vqMmZz2=_=j7T-k)A$8Pd{1^6E6E(V#-zo zD#4pbPY$5dLPGH*8XYeFs|UyKl z$NLijKRp?9w4WgWwP?Y%Yj?Q7U+@}HGBsemg$w@E6yO7v=7(btDI{AWoemI0trOfw zq*I9$WhW+?!myI6>fUi!+4)jXTa12{ZvX4&WY%gQ0*)Yb*qsyb;MK3(aODIRrndLQ8p7RdLds zIFt|$CWAx4aMCC?mJ5s2Y=UX^z_3Ux(f|fQ8KXE*1~4QH$0^NLg{xv!q4nE)U=6?! zCxpVuz}UDou!D`YfI)}Zwj6@oC?s^w8mS6}BiZi2PzdM=SgYcoa6xteFcwBa;V5gQ zEfg-qjs(V=ff-?IoI4c0nVk%bMX^x0h&46<3KwN(17mSuEXIq(;!vFIQZ8&{79Sdh z<(2^WA(H=2@1_WnlU>iHiq+)9z;v8pNIr}R4$CKD%O?(ni-W#w=fj}5B|vZ39dKke zzylbp!YCWKV7DS?;a16U1a1XwPJqHkyQiZ}LtyMdqa4fhx z+|m#zTnY>^au^EV`X>ZDDg9UA;WBHe41mh&^2xv;4otcuxY6eR0bpAN2tOcvfNTPU z0}$|C5LoXE0xdWX0|dlTfI!##LO}Zy7ycVA0`xi8b;N-7r%lif*az1_0|H*4eNYFq zxdjl(^**SB0pzFst?T`tJfX%RYy9H?oCgqTKtLN{3krBitqW)av?~q>xIVa^=z1UI zx)~6VFX+QhKR`c!`Ul41r{ACtKjQ(e3)%zM<*+0(fp|he47|WKi=rvO9qz*s4F8#& z2ryv8{Z~>UK!Ne5f6OdvI{zlStm*Ur^?P4SE(A`%$iF5S0tW#9BDt*LoBpx^rV9eh z7ofU1+8?+hx7V34}nFd1<}{Ef<=Fov2AHIim$JsIh6!hdc9^Fj5ZewIFSH4eh`?Z zvMLDB*61-nQ=GwKR2q=p3Bgn#m#>{pbUbh}coG?mU<8Ry^9Nu$F_<6F0z1GQF@OL7 zn*e|i#H8WL{@?)ylHAAu_<0ijAOsaB2C$}z7a2HeNMw?V1C7KC2A)!3_|RxfGSzzr zkwv63RRVlyL@GH%1vn1@ZI8d5CMp!N$3G$eyJ5=25MZ;6JiN&e$i|*%TOhDkLoSWE zxX}iTgxZeWd+GIjPg)m;(|cL}$f(=7-8LD6 zn9Ag=y*|@V zqly0U!>}^`z=0~PRvaT~iVMA5T-#BqeycXgpNTs#e2RaI$&10+x|Kw`cq?ns=^qX0 zAL5#%$~Z(4k{sodHZ*0@&ZcxMKWs95FSd}m^wG6_Yh140`^C)LdLoY-b%#i&QCfY? zT7MjC34M$DMlYvNgTBc%{Oz{`H;sbLMAbcfTVBXI zi`?eqZQ(Mp>O99%JX^CpJg4r`*UI9WfpZymPNt?F@0R~obgJTMb6Q}B0aa<$O^q$V zt5`E`RJbpDOY_Zaaf@zw&G<7_czv=(H|sPVt!;Uy)9HNnsiId~-pw?RHNDrGRpZGS zm#7}kJM(NpY1r%uvt8GHIEODRyUplgA_88!D<>~jFlf8;{&!IUchg-Y(<^R2y;D;8 z=;9%ISD1L1@|la$9z96j96vI`-rIohP;6AdAB20Sx@m zg`tubpXaBvgE)GSA43h)-L*c9PIEQc?x`P4dTus}d?l&U+^=j}QFL`Q&4li!RvRLv z;MM1t>s+?kS7M&!3Z1kVJ}Fk}X%=4kprth4U-8yOF;?eX^?=g$Dr4E=8-3h#dwA)= ztX!UcI}yRj)4^qLt_oTZ_xoT#4*S16Zr?faB2!n*f8U+_i|^H$13dulSZ z@X077v9-YE!?1_Jm`&f6zG=PDhYQ9}3?Hh{3aHJmPHY{B@(2_#$Ui;OO^|Qhqh%I5 zQ!&DoBX03zQ?#FX20y=*4)+-AcAd|MgDU=)Pefhb9egxbZ|CKww;i)0KT@slIU06* zmwRWOeOZxfP*=A>HpchnxG%Ps$nlHtfsSRBA0J z*+iAT=FG^j=w5Lh!#~SAda2}7-Bp#T+fQImA3P@U-a`Ljh2P}SL+W?X=s#SM_x_Ew ztzpj=v(Zsk;YE@|prvrz2P-vk#T_H^#~U8mYue9T4}JA4(f@42Y}DM6Ou113I+ov7 z_@(VunvJfN{<%r4T`|G;kOf6^c8^rf56pA9V&Ye6%C@W&O!*h>&<|2HTfWO_HCOZ$ z74P)1t$32FKOH&C6WTJqdCutVQ9WqY&PG;`S4MMWLHYMuYHMb4g?c#jcv}7pPh8C= z)6bKUU$?71GhsG$qF)uY=e_&**z=^R$zIK}>*3V5-svqjal<`@F2@Us#F}gJH}DO+ z>_s0Nq4@1lhvQq%IAZ{4&JZL2eyv;|Gs~POy0ky0)lEZzR8!cnheUVQ+`!94J)~oW7(rV8h)cDM% zOqt$Oc+{|y$7}Iz(c@xLI%oCFN^iB+$fcH8=@Ad3SoYJu}3B( z`tJS(q_<&<@3+IVrj}W)q42Qb*SV615H|0zt-77u1xnYa%uS)*NL?c}95w#Dv#XA1 z^&h%jV|En9%T96g3g5H@j)@j@&)q~X8GPYhFjH;k2o@hu^jej7-SF~5{jP{-S)oS7 zCsTsFWU9x4FDQ9+qC8LFX=$kx6jGodYn*9Nhnuf zM2DJm?T#6^Z@xb}{zlgJ;s~?XwVUUX7)P%a3{9kcCKg>~=(wp&gjO_{pZdf<6Yb0e zoXkcvPX+|SH3^Idf|LxyFpMBWLT{4ArB6V78UgER`m zA<|dC0cBH{7fu7LJk~DzK~S)@K{R{f8P~;$!&_E zgqYNuPS;5l98c6%D^M8{%_aS=LJhZbN1CopD#2X7NgBwxi?TG_>PyQZSZQ+(*FM8_K_7GhJ72Q zDM*Fa#qwE z*eWlMane0?;pW?S5$s#L-w$#PoZU2ccW~zD>8|sU82K0($(PdiqlznHbA`}PSRU@i zjh)imjnCuDHWnK{C%6Z)F+98p1%4;s4-}rAvJn=&xu}}%qc^Gl;A=P!#zDLXQ7vfS z$Jc!4v&pURKb99SEY1w_+zN5cx#Z5HCC{5Ns9^Y}DRLK#c{Gyn?3Hz8YmVu04s$Un zuN=(=C#~Z?-bs1+yw9_TpWl>M5HHQeHAdS;Kav-i-6_8$+-of=8_%D|zx~>3#%z?! zjRlC;k3!dy>NZ~?`w33I2(Lgt9`t`p@=6bx}NCkOP|%d7-;uNO84W{5+l2%`V?nbmqOe05+B~)8bf2z82TcgBX+e^Oy4iTodQ5QG&J)gym~@PI;ljbtkG6 z9P@3sxYxX7WMHjmZ{N@gA{?$*UUb0S6y636uC*g9DO|KB!`;?}8R?*&(s- zp-C*?Hnqyj7f$n7aLaEsc88%b64>~iBR&A{d|fk?PjEf|-5nv!2he-LtKyB= zd|qOljfVcIecU=9zD)C<=ZS~OCXjcw&WV_Ds~i_#59f`3XC|{}5Epq0M~~fjRZ357 zuAkBfqoszn-%=Ehvbng3n zR+3Je2>&h7WTzDM9%8TDDG7Ox8@M37@XCP?d70-s;$$!D&*0A}M!Xdhm44Axxo3iz zuYP;F19H;6wa+Nx3^rNfx=Ly#23FeA71Gg?8lT=eKG?8){t?TKTb}oGY>vQ@vrE=x zgYWj6SH8K><>MpOZLmXBE#R8dSsm8%t#@m(!Xx27tb&STYKpsZa}KW*re$z($dAOK z2uX#eo{H9%G@a4je<54t_3i%vGwEoLJQUDmGA? zUf3|MG)X7B9!E5DZ+;RR0HU7l!rH98?3XL!8U17F+p2qV zRpVxRJAYIz&IU$&r%go^3u}Klw!3VVzn{=^2017A9m!|oEtw=yqH@sJes2&jG<|SK z(tiH$YMLYE^~2pA19lo*qr)1s$k7|Z{;bIh7AlR;qMGrO5v8XL;d}1sbWAg4Fg#BL zr}H+>m~xBn z`clm}QGDr-&nnK`?7bPIgoHaKrF%P`)jwrj4xy1k~| z%^pk}A+c1Q<|tZ|C85!)VYYyMs?Eu)6x7?*R^z$vx#EwUaD_P69!)`xCUhRPI`fK` zl|*Xi2GMuT6~*#)L21@Cn9Q%Sb8a8T$C5v36F+9Tu)mWhO!!Ra4k-y$d?FRZb%?7H@Sl_*Fv3JuZO!EJ* z8AuUuwq~B5dZ_=|MUOYld>D795_J9KL0nF4KYcl4rMKxA^l8W)X9&bN#Ly4;Cg+R>zNQ6;YvpD9 zTIGaD$Fp|+S#IE3uNbeFRshYv6<7XLficM50KNezKm)a6u&m(20XDF83tpjAfaR{ASf(mhb-i%l=Ds@b^pp7hXGGOW^+s;5Q2vAAeq8 zZ5FJ(LIn|a2z!JB!VzJPutK;ZG7xbHB7%hQMvxH{#4*U0-&fBdj-dgdZC*gYIxPqP HDjf1ZWaOZ; literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.OwnershipError.beam b/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.OwnershipError.beam new file mode 100644 index 0000000000000000000000000000000000000000..a7399a5f38dcc51c47be08908518209b27b8ff09 GIT binary patch literal 3676 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Pool.beam b/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Pool.beam new file mode 100644 index 0000000000000000000000000000000000000000..e0edbecae5bb2783eb85227859bd254c49cf0153 GIT binary patch literal 2308 zcmZ8j30MT1!(UgX(^?iTUtN*=v^{V<+RYxq1 z@rNMRP?%_b^n9)OZx95%9UdP3l{HqR#M5vMKRirG5(FmI;v~UeMv}@+2!a!G5<&7& ztyY64=(HH6mXazpuEg?Xm|BBLQ7tAjVQFeoqooj)EGSd1BPA;Fiy6Qfz#8V{K@6@N z2X+l+ZsW1I0lF|<43;3)U|X=gy2GN9AlNUois=Z4hH^o@EOY?`n)px#sMVoNN5C#| zh2Txr96LuillJw31Lp@bZ}CEHIkmQ<&%!2)?Um3495AE>*o}cZX**jk1ozX!IUJZ} ziNcl(q|yI(%Hmq=90BV%*NzLboGg7O&>u6`&WRbT)vTZw6RA?u?L+_ufE|GSUu0O6 zX0ZtbycGZ!00tQSK?V)v@BuV$3qbp#WkwXPrTr%Z(1qrm4JuG`+=HWX+q}<&yOrBb zXO5d(4>*xQ32LT-p?9Xgx%5+_Au0@{mXtzaptG0Z)CUy;K0Qj?v!n`4noR1nC^HF) zBBh_N$qD$RV;KYB_(67@4{{aA9+nwtugp}6pl62(4wT&0(KdwUxgOfEFlg||&8JC8 zkT8;v18v)<2uG%38VV#^GQ^z4_X7?_zE3`ic4DO;N011mM)d?(h2`qH zq+F{9qXd+KB(*q^=!>OdgjS$dkQjld3Bch4)(M~Oqd74JtUa^eil}sz(-Q|}~DU8m~4zaRT36a%d9kvf8vr8go zT=V?*o{V?T)=w)^rI#MFdYf>H8ZM{uYNpJq(w(*0Y80C`E{@CH@m&ktmzRHFSmQ5;7GYg=Zq*0o4zGH*_Aozg z4`gHB9_O+`$qFpK8tyf<>(R*e!-3zsE%&S?#-NqApSsS8Sc4^~B5kjmYbLEVpRMDt zBfQdcZn99uQ+BLo{-PXXJWIGQJ0h-N%7UH7gJH_d%>~ZSLyk7P8MoC0NTiI_1>Vv8 z)l<`Vhus_)`$FvX1vl!b`IODL7D<<=Zs+lWtD~$ZoT%zQe%hZo_1xHrW7AU1L&meM zHAg)b5D&hQPm#5auNstP8=s^aj{SFBSHnM1o9eszhVtSzUV|Tb#lxdm=IgTR1zvCw zDZn>Q+~*%uxqSGfE~TMu3o%XKb$iV19C7>QtnU3Q_Z;h;wQF3fiLJKR)h{%IYrWu5bv_54Odvx}c(PFnxnhm{6W;XbYTs&mPiiHrZ2 zF?;Et|NU19LknXk8`pg!>A`=@sm#ZUeOn$x26-pCdGub@O>14>o^@k+_0N%WVqSk? zD6j4GiSoM~m(xu>Mmnz#3;H%(*mxk=rO&55q;*cwsE4;I0==;JPd1ot8=Ke1i-W%v6eT_GH_C(1&2?{ldhXQQ^en0f zp15-V_H@$p$n>x&_O-;6)9~D<1>rpy3LDk9-_u+^Xg%{pnL*r9{}s=vx7|3l zn# z(sYJ@(5mAo@Qpp7Z*do8F!>>^{QpL1x4c z=0V}4lmeFxn?7p{ue1Z(GJhfrer%C&bLs@C!<=6Q=M)_Qy((_Nj(b*N#=Y653M6xO zVUPE7S<{`6*X}(WhrL_L#|}T&&K>`QVrD>H&!)wlQ!mVqDNQ+DnynDVym)i7V9To3 zwt1tX>zgbKG*kKrg{s0L8 BcN_o! literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.PrepareStream.beam b/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.PrepareStream.beam new file mode 100644 index 0000000000000000000000000000000000000000..246e759f3ff9098a3dce962f09bd787efdbc5942 GIT binary patch literal 3036 zcmai030M=?7M@7}0~(kltm^Ycz_pSDg$k%`WD!voMM1?S>p&8cnJ_aUK}tc?J_^rQ zLokbC-OqV5* zsIf#`A}N(o6rq+ID3sJIaGhSQMN5^aoKn!etyLfv#paO!R5L}6Z*m#2} z0zkKFfPnxk7%7GrTu%h%PhhTcV{ykW4_+Q?kfTIgwxM8oSy+ufEE0!9Odc#2b3s2t z9FBlNDh}s^K`&;2K1vozwmTF29<%8HMddA0azMy%w2Y*ngTL#h?PY9n!8jB zdK(IK3}ZhfnkX}9DI*h8YmK&vYE-K<+9<%a_ypfJ#efoNpAfJEH%X==KOtd*>nTzL zTo_^ThM{5@9p3%gGU%fTBLV1d>k2@B2M+)j06O+=0Kb2S$sl!rb>9hL za3W?ZiP5o#F$5An>3YR=KY_ey*b%lJUXN-tP)G!p2)M15h%kYCzf_bUL2gQhn1KQj zO#o2?Ytr%ojUE^-A@wpNCb4EFLZT;d1xk`e`$PiQ0WyIaoq!ZQ0X$2BGdco-%s}B1 zwT@0+8lcyX#0`W3O@`(O<49mrs8q`^S)w{oI15jtj36xvNfnM$YAneIO+_(Es8``A zrZx#dE(FqYVBu{d6>8P;4=DoFqzRQLsX^E{OJ{(ec#Ns!RQxHtMdXaH{k|o^ZeZJT zuYOqNxkow7D(3ZUzo@|hq1e-!i{yjOfQ(&Pz3cCIvtK7%h~_tJ+4nmA@biavTL1TN z_u;p64RK}1?hSJkKlKC7y_5PN76YJr<=buEVHz60Bs0GuGte)ed>b};V zzRNkZDB0hvI_`UO*@k5^r%x*Ss-|{awud82#h1IvmmG^-d3hwtvu7~37Dm@SC}dYl=FXZD zUodJ3xg#&!*SoUNHKTr557%+*@gplA2RzRB?7t_Ckoo4s6S)gVQ`o4Sn7Q&Li~-+_ zAeU^jx#f_nXN+1$EF5@r+&su}C-2cKpOW9&{ifChu#R2cEK&|JFWb>n>pu0mtm$3{ zCr}|v>?)6F9U*ck*H0C)9bKMOr;p#&%PkxrZ16tMG40PD(mq$ve`xGR@Bf?$KGEef zQY46S&%f3@`qAv}g@ZpIGpFKY70wrUA?edz9$xWm&Oh6HYR?g6PbC?>^SXNCy$*%f zPe`2;64%&%6iu&IGWIxEh| z*i-k&Ta|D&tCAcsxG{P9(Q~n17Sv{4{9Cu?od0lX{DhXpTRigy1#U}CTl65?$AkE? z``X={E%5&73n$navldjGzumleS;fYLn#${6Wb8MBHo?04UALzpKkQ*I(j;VwRgdwL6_4U^Df<*H~OVP+KD_0s-j|rwGT=T zsh+jXZ_AwWQs#d)WKFeMea(E(!QH-l5dCC|d_oJH&s@|$Pu&BOgx3Y^L^vWBgwKD)jr{rJVOp9D`Qy@(B}@vAv4 zk2L4sovz>{mb zIXTd6UwgYO@AIb#f#28O;NCC1ntNqlURvwvr_=D5Rp}4RjhljIg{*a5F=@M>n`dap z&6zA|hP2equWeJ96KB|pf^Q?%#tZ)OH8cKp*42&-!|PWsD6Oe$?uf>yZr021VnP&K zwnUa@yy-R1 z=NkXIhG~rNit(q+{a(^PA*9iOTJTY{VC&KTAX=6X^|AXY(=eG%tuWe9D50~4@gt%J riUbc)5J&pS`L@}E30*^Bu00oW{-eqPn6uOL^gagwy6(bGy%6+&)b|^R literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Query.beam b/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Query.beam new file mode 100644 index 0000000000000000000000000000000000000000..dd4a3583cc5c370dffd0dae558b9e487f7c251ae GIT binary patch literal 6912 zcmcIp2{_c-`=9Y044InD*w>6*%%E&V6IrsGJV5mU1x<9JdDqA)IlDddYNfEmW+ zN5pa9Fp*do#}rd|Y)%*~P)VHW&TJG?l2h8Sz~V;NqfTl}-R(q_;4 znW;43FF&&-5RQa}U=QK!u^pU5i)V1+zO3)q_Sr1pMZl449vtC`Y*03wz=Q>e3)2J) zp$NVo4o5NK+59-6)WNcu3=Sup!Hf}MRryjFgG2w!JNlI?Vu{vl9tV+YJ$4Gnw$@n9 zuee`a73tCb-1DtU(1$`C3WdV(Q79B15b~=8zoN?Na3JOJ4 z)`xxp)u!NdWKe@&L3JE)x-zKYub{exI6WD3(yyR;X*hiu)aX}GeQTV73`+VH)W8O3 zD1#dR3ThaDnYAO9#4fZ1ytaen&41a0q-E-ENgL=Xsjh(fGUH4TUlZ} zA#V!g=}m>8HF%UFo`S_wQE04{DjsNk+Epc1gXq5pgs-|h%Kb!97gM)KurN;0|=2v24oEg(TS86 zfDk@XYK+!3L8%T18ZFg8iQtK&gz!}XO#p<9Mf4*5NL|jKEe1BCX`qh$5Ib4v9Pm|) zl9Q->9au2XfTJLb7#I+!W5>bCJ5Dx5>6L|OLLo}c(~-%KT|<%| z2Xfy`V@$!nP5pKe#+E1ApU*^m#~cu{{>Yvp>pdNi{b=0N2j-vtX7xSd{D2PC;!-Qi{OUVmF zU}9vjay&*PJCYp4j}(J7gUO;OK3@#tL~A%6=84IIC_c<%Cy+rv576OY8e>@inZpkM z7bh0U3vA$oXwU3sFDfKltD5D3S+SEpVa+rZ!;$HKyc%j{VVIgb z1pf@#m=>-cvkl z)Ub@#mVMZCE!|@)H9keGJ@jbrHZ9emc}tFyXtQdmO^f|E_7d_4S4!ufJ~~3t8&nQd zslzv2o2s-^LuFuUbS*0~(9 zk1ghgWCyyJo4x#avhf{o!*Pt^6#=x<;$tVU1~i#jwHHQ)a<6aJ4$xEl7mU>JL>!P+PsZ>cWC%|NOjSP zjOwZr0gG+IO7Q1=<#yyZv(!$sIT0<|({Cj6&d>8Po3mYa@)Y*zJQKgYuDddm@i8Zi zcGqQn&nlV@;xc zP+(7t*3$8GwJHCs?ofI1WYy$jy``5TFHp=I`yDH_x{?y>=Kju*{L`RvVkFL_GHbA7 z;vlqMOq&l@Tl5# zKWiRsVa=bZseic1Eu3Fdb1kf+iC_1$iu^3UGi5PLA!Wh&bJNe@loqYesKhI6e)qW6 zrT<7NKJnAQP-fBrU)Le|^&i7m6jd*JEq^UWtvz$Om6uzvd{A3DF`RYiw@(!nE4zsO z+^CZu`^v^u_{3eD@r1WdUgH%Md3jScYh2Xtc|}G_Q~OTMvxL(O_V?XB#S;?-YRH$! z2i;wVw)?5Gf~nEuEkyxu&T$VP*%@0;4yuXmTmEU?A}3$4e=;0F(D2V;9HvZPFEWi*=hr`jhIDQ?m1h9h6#i_6`(BrZ|ie;2KgS@hnhQAr}l9y z_D@qMh2*1LfO%dk13Fw^E-Z_)mlqU|2c8-w=(nk%?FpW%yFD!!dqypn%) z;t3Hp7n9r2b}NjtDB&Q^?dAh^di;v%-2MvPM$b-W@W#g7)lDVU75#0VYa46^^-rJN z*kB{ppZ0hm(Vg`v{VFZB;&Qyg`su-s($+YrWwa;ee+lTx%Nr*}AI=@#M5jV`@}Kt5RWh#edD}2dG6Qt^zAaw?NE25@T{A!nk@)iqfJK zODikipnUfht?`t?9G}ze_Zp6LI@L7a^?^&hS>%!~4)grp(A+uc5ih0-PEG{qGymqqYZU0?|%bKR!WW#~Y`U^`= zI>Cl5cu%9C;chEf_}2x>@*v`j8B-5<4u{y&E(x+`b185r#bbjpjTp5lUn%*XG>@P)8k&{ySJvNu4grS7ZhY_&T`3bq3vjVt+HzE{?O9$%ErQOYml6mL5 zZ)C~4={)>Pz4L0-z=p^Mi1*HmG=lXeVL3iC`W#R1HK(Cx@*Otp-<%hZCAR5e>sQ@w zxc6ufqEs$-;GGZ^?|C{)96LChjCH|r_WGQnwk_T#7BBm-*>8H(UY*6SZ?4j!1Z#cb z+?^=s8)oQS3)63izV|%G*@5xi!VEpU=is)G&E>|Vy!gOL_GNCo!k&Obn7TT9g$Fra zoFtXY8M$_c#+4}>97|sH_|(Q_#ZDGWGvA(qV$3{?%=Jlwi)!EY>)wWTK2Q6k`&ZS4 z#J2q$8!vil_p2H5HyB5*vWiE>xy?Nl9vu+5!1g71?PZfBhxzKhE97?@Iz^{1CAOSN z(sQo%9T#SsSv(D`PR=tgzlN(5d+RsCX!1{gr!g6bY>LHjDdypcv~?*pe2f< zFWgA%jg3N*#POe#7U{bp11$qWA~s8c;qiH}6!lGV@dM1~MD&XUAYUFlynoJi5Vg?g zOd=9_3@)1~!H8iY_kZO@e-8+~m`Ub5;LuwtmT#elP*B zBGUZoTf0WVT!uiFd_fWnUjR}ksc$HM`PYJsfnk7meq?2NFpGh_L?diebo6)E<-7W1 zn=8f3Nyfy<$MHsGp(POb7fQ55@f%-|ZRgid6rJ75|Ci~gEx1uUdWrm*bfgX@_^8)N=`}!O4bvVh$!tJ=cXvs{6qmFLj@4>W+69W H1V#N15W!zy literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Stream.beam b/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..98745b2a8ee756318389bacd1b4ad30402ad443d GIT binary patch literal 2988 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.TelemetryListener.beam b/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.TelemetryListener.beam new file mode 100644 index 0000000000000000000000000000000000000000..a769e4228da1f6f7bf4a396231ea5517be4a2def GIT binary patch literal 10616 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Util.beam b/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Util.beam new file mode 100644 index 0000000000000000000000000000000000000000..869a46284943aa252375e28dc1cb11722ced5142 GIT binary patch literal 3660 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Watcher.beam b/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.Watcher.beam new file mode 100644 index 0000000000000000000000000000000000000000..d5758f2c29dede626fc7c34bae61dea5fcab6a25 GIT binary patch literal 9120 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 am@O~>?2d;tsF#exA#Ciu{|Eku)B7KpaXk0{ literal 0 HcmV?d00001 diff --git a/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.beam b/phoenix/_build/test/lib/db_connection/ebin/Elixir.DBConnection.beam new file mode 100644 index 0000000000000000000000000000000000000000..40d328d73095d1fdd9ba1bbc1f0d2205970b06d5 GIT binary patch literal 66556 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

    +** +** The first two constants cause sqlite3_mutex_alloc() to create +** a new mutex. The new mutex is recursive when SQLITE_MUTEX_RECURSIVE +** is used but not necessarily so when SQLITE_MUTEX_FAST is used. +** The mutex implementation does not need to make a distinction +** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does +** not want to. But SQLite will only request a recursive mutex in +** cases where it really needs one. If a faster non-recursive mutex +** implementation is available on the host platform, the mutex subsystem +** might return such a mutex in response to SQLITE_MUTEX_FAST. +** +** The other allowed parameters to sqlite3_mutex_alloc() each return +** a pointer to a static preexisting mutex. Six static mutexes are +** used by the current version of SQLite. Future versions of SQLite +** may add additional static mutexes. Static mutexes are for internal +** use by SQLite only. Applications that use SQLite mutexes should +** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or +** SQLITE_MUTEX_RECURSIVE. +** +** Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST +** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc() +** returns a different mutex on every call. But for the static +** mutex types, the same mutex is returned on every call that has +** the same type number. +*/ +static sqlite3_mutex *winMutexAlloc(int iType){ + sqlite3_mutex *p; + + switch( iType ){ + case SQLITE_MUTEX_FAST: + case SQLITE_MUTEX_RECURSIVE: { + p = sqlite3MallocZero( sizeof(*p) ); + if( p ){ + p->id = iType; +#ifdef SQLITE_DEBUG +#ifdef SQLITE_WIN32_MUTEX_TRACE_DYNAMIC + p->trace = 1; +#endif +#endif +#if SQLITE_OS_WINRT + InitializeCriticalSectionEx(&p->mutex, 0, 0); +#else + InitializeCriticalSection(&p->mutex); +#endif + } + break; + } + default: { +#ifdef SQLITE_ENABLE_API_ARMOR + if( iType-2<0 || iType-2>=ArraySize(winMutex_staticMutexes) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + p = &winMutex_staticMutexes[iType-2]; +#ifdef SQLITE_DEBUG +#ifdef SQLITE_WIN32_MUTEX_TRACE_STATIC + InterlockedCompareExchange(&p->trace, 1, 0); +#endif +#endif + break; + } + } + assert( p==0 || p->id==iType ); + return p; +} + + +/* +** This routine deallocates a previously +** allocated mutex. SQLite is careful to deallocate every +** mutex that it allocates. +*/ +static void winMutexFree(sqlite3_mutex *p){ + assert( p ); + assert( p->nRef==0 && p->owner==0 ); + if( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE ){ + DeleteCriticalSection(&p->mutex); + sqlite3_free(p); + }else{ +#ifdef SQLITE_ENABLE_API_ARMOR + (void)SQLITE_MISUSE_BKPT; +#endif + } +} + +/* +** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt +** to enter a mutex. If another thread is already within the mutex, +** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return +** SQLITE_BUSY. The sqlite3_mutex_try() interface returns SQLITE_OK +** upon successful entry. Mutexes created using SQLITE_MUTEX_RECURSIVE can +** be entered multiple times by the same thread. In such cases the, +** mutex must be exited an equal number of times before another thread +** can enter. If the same thread tries to enter any other kind of mutex +** more than once, the behavior is undefined. +*/ +static void winMutexEnter(sqlite3_mutex *p){ +#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) + DWORD tid = GetCurrentThreadId(); +#endif +#ifdef SQLITE_DEBUG + assert( p ); + assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld2(p, tid) ); +#else + assert( p ); +#endif + assert( winMutex_isInit==1 ); + EnterCriticalSection(&p->mutex); +#ifdef SQLITE_DEBUG + assert( p->nRef>0 || p->owner==0 ); + p->owner = tid; + p->nRef++; + if( p->trace ){ + OSTRACE(("ENTER-MUTEX tid=%lu, mutex(%d)=%p (%d), nRef=%d\n", + tid, p->id, p, p->trace, p->nRef)); + } +#endif +} + +static int winMutexTry(sqlite3_mutex *p){ +#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) + DWORD tid = GetCurrentThreadId(); +#endif + int rc = SQLITE_BUSY; + assert( p ); + assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld2(p, tid) ); + /* + ** The sqlite3_mutex_try() routine is very rarely used, and when it + ** is used it is merely an optimization. So it is OK for it to always + ** fail. + ** + ** The TryEnterCriticalSection() interface is only available on WinNT. + ** And some windows compilers complain if you try to use it without + ** first doing some #defines that prevent SQLite from building on Win98. + ** For that reason, we will omit this optimization for now. See + ** ticket #2685. + */ +#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0400 + assert( winMutex_isInit==1 ); + assert( winMutex_isNt>=-1 && winMutex_isNt<=1 ); + if( winMutex_isNt<0 ){ + winMutex_isNt = sqlite3_win32_is_nt(); + } + assert( winMutex_isNt==0 || winMutex_isNt==1 ); + if( winMutex_isNt && TryEnterCriticalSection(&p->mutex) ){ +#ifdef SQLITE_DEBUG + p->owner = tid; + p->nRef++; +#endif + rc = SQLITE_OK; + } +#else + UNUSED_PARAMETER(p); +#endif +#ifdef SQLITE_DEBUG + if( p->trace ){ + OSTRACE(("TRY-MUTEX tid=%lu, mutex(%d)=%p (%d), owner=%lu, nRef=%d, rc=%s\n", + tid, p->id, p, p->trace, p->owner, p->nRef, sqlite3ErrName(rc))); + } +#endif + return rc; +} + +/* +** The sqlite3_mutex_leave() routine exits a mutex that was +** previously entered by the same thread. The behavior +** is undefined if the mutex is not currently entered or +** is not currently allocated. SQLite will never do either. +*/ +static void winMutexLeave(sqlite3_mutex *p){ +#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) + DWORD tid = GetCurrentThreadId(); +#endif + assert( p ); +#ifdef SQLITE_DEBUG + assert( p->nRef>0 ); + assert( p->owner==tid ); + p->nRef--; + if( p->nRef==0 ) p->owner = 0; + assert( p->nRef==0 || p->id==SQLITE_MUTEX_RECURSIVE ); +#endif + assert( winMutex_isInit==1 ); + LeaveCriticalSection(&p->mutex); +#ifdef SQLITE_DEBUG + if( p->trace ){ + OSTRACE(("LEAVE-MUTEX tid=%lu, mutex(%d)=%p (%d), nRef=%d\n", + tid, p->id, p, p->trace, p->nRef)); + } +#endif +} + +SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){ + static const sqlite3_mutex_methods sMutex = { + winMutexInit, + winMutexEnd, + winMutexAlloc, + winMutexFree, + winMutexEnter, + winMutexTry, + winMutexLeave, +#ifdef SQLITE_DEBUG + winMutexHeld, + winMutexNotheld +#else + 0, + 0 +#endif + }; + return &sMutex; +} + +#endif /* SQLITE_MUTEX_W32 */ + +/************** End of mutex_w32.c *******************************************/ +/************** Begin file malloc.c ******************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** Memory allocation functions used throughout sqlite. +*/ +/* #include "sqliteInt.h" */ +/* #include */ + +/* +** Attempt to release up to n bytes of non-essential memory currently +** held by SQLite. An example of non-essential memory is memory used to +** cache database pages that are not currently in use. +*/ +SQLITE_API int sqlite3_release_memory(int n){ +#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT + return sqlite3PcacheReleaseMemory(n); +#else + /* IMPLEMENTATION-OF: R-34391-24921 The sqlite3_release_memory() routine + ** is a no-op returning zero if SQLite is not compiled with + ** SQLITE_ENABLE_MEMORY_MANAGEMENT. */ + UNUSED_PARAMETER(n); + return 0; +#endif +} + +/* +** Default value of the hard heap limit. 0 means "no limit". +*/ +#ifndef SQLITE_MAX_MEMORY +# define SQLITE_MAX_MEMORY 0 +#endif + +/* +** State information local to the memory allocation subsystem. +*/ +static SQLITE_WSD struct Mem0Global { + sqlite3_mutex *mutex; /* Mutex to serialize access */ + sqlite3_int64 alarmThreshold; /* The soft heap limit */ + sqlite3_int64 hardLimit; /* The hard upper bound on memory */ + + /* + ** True if heap is nearly "full" where "full" is defined by the + ** sqlite3_soft_heap_limit() setting. + */ + int nearlyFull; +} mem0 = { 0, SQLITE_MAX_MEMORY, SQLITE_MAX_MEMORY, 0 }; + +#define mem0 GLOBAL(struct Mem0Global, mem0) + +/* +** Return the memory allocator mutex. sqlite3_status() needs it. +*/ +SQLITE_PRIVATE sqlite3_mutex *sqlite3MallocMutex(void){ + return mem0.mutex; +} + +#ifndef SQLITE_OMIT_DEPRECATED +/* +** Deprecated external interface. It used to set an alarm callback +** that was invoked when memory usage grew too large. Now it is a +** no-op. +*/ +SQLITE_API int sqlite3_memory_alarm( + void(*xCallback)(void *pArg, sqlite3_int64 used,int N), + void *pArg, + sqlite3_int64 iThreshold +){ + (void)xCallback; + (void)pArg; + (void)iThreshold; + return SQLITE_OK; +} +#endif + +/* +** Set the soft heap-size limit for the library. An argument of +** zero disables the limit. A negative argument is a no-op used to +** obtain the return value. +** +** The return value is the value of the heap limit just before this +** interface was called. +** +** If the hard heap limit is enabled, then the soft heap limit cannot +** be disabled nor raised above the hard heap limit. +*/ +SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 n){ + sqlite3_int64 priorLimit; + sqlite3_int64 excess; + sqlite3_int64 nUsed; +#ifndef SQLITE_OMIT_AUTOINIT + int rc = sqlite3_initialize(); + if( rc ) return -1; +#endif + sqlite3_mutex_enter(mem0.mutex); + priorLimit = mem0.alarmThreshold; + if( n<0 ){ + sqlite3_mutex_leave(mem0.mutex); + return priorLimit; + } + if( mem0.hardLimit>0 && (n>mem0.hardLimit || n==0) ){ + n = mem0.hardLimit; + } + mem0.alarmThreshold = n; + nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED); + AtomicStore(&mem0.nearlyFull, n>0 && n<=nUsed); + sqlite3_mutex_leave(mem0.mutex); + excess = sqlite3_memory_used() - n; + if( excess>0 ) sqlite3_release_memory((int)(excess & 0x7fffffff)); + return priorLimit; +} +SQLITE_API void sqlite3_soft_heap_limit(int n){ + if( n<0 ) n = 0; + sqlite3_soft_heap_limit64(n); +} + +/* +** Set the hard heap-size limit for the library. An argument of zero +** disables the hard heap limit. A negative argument is a no-op used +** to obtain the return value without affecting the hard heap limit. +** +** The return value is the value of the hard heap limit just prior to +** calling this interface. +** +** Setting the hard heap limit will also activate the soft heap limit +** and constrain the soft heap limit to be no more than the hard heap +** limit. +*/ +SQLITE_API sqlite3_int64 sqlite3_hard_heap_limit64(sqlite3_int64 n){ + sqlite3_int64 priorLimit; +#ifndef SQLITE_OMIT_AUTOINIT + int rc = sqlite3_initialize(); + if( rc ) return -1; +#endif + sqlite3_mutex_enter(mem0.mutex); + priorLimit = mem0.hardLimit; + if( n>=0 ){ + mem0.hardLimit = n; + if( n>32) < 0xffffffff ); +} +#else +# define test_oom_breakpoint(X) /* No-op for production builds */ +#endif + +/* +** Do a memory allocation with statistics and alarms. Assume the +** lock is already held. +*/ +static void mallocWithAlarm(int n, void **pp){ + void *p; + int nFull; + assert( sqlite3_mutex_held(mem0.mutex) ); + assert( n>0 ); + + /* In Firefox (circa 2017-02-08), xRoundup() is remapped to an internal + ** implementation of malloc_good_size(), which must be called in debug + ** mode and specifically when the DMD "Dark Matter Detector" is enabled + ** or else a crash results. Hence, do not attempt to optimize out the + ** following xRoundup() call. */ + nFull = sqlite3GlobalConfig.m.xRoundup(n); + + sqlite3StatusHighwater(SQLITE_STATUS_MALLOC_SIZE, n); + if( mem0.alarmThreshold>0 ){ + sqlite3_int64 nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED); + if( nUsed >= mem0.alarmThreshold - nFull ){ + AtomicStore(&mem0.nearlyFull, 1); + sqlite3MallocAlarm(nFull); + if( mem0.hardLimit ){ + nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED); + if( nUsed >= mem0.hardLimit - nFull ){ + test_oom_breakpoint(1); + *pp = 0; + return; + } + } + }else{ + AtomicStore(&mem0.nearlyFull, 0); + } + } + p = sqlite3GlobalConfig.m.xMalloc(nFull); +#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT + if( p==0 && mem0.alarmThreshold>0 ){ + sqlite3MallocAlarm(nFull); + p = sqlite3GlobalConfig.m.xMalloc(nFull); + } +#endif + if( p ){ + nFull = sqlite3MallocSize(p); + sqlite3StatusUp(SQLITE_STATUS_MEMORY_USED, nFull); + sqlite3StatusUp(SQLITE_STATUS_MALLOC_COUNT, 1); + } + *pp = p; +} + +/* +** Allocate memory. This routine is like sqlite3_malloc() except that it +** assumes the memory subsystem has already been initialized. +*/ +SQLITE_PRIVATE void *sqlite3Malloc(u64 n){ + void *p; + if( n==0 || n>SQLITE_MAX_ALLOCATION_SIZE ){ + p = 0; + }else if( sqlite3GlobalConfig.bMemstat ){ + sqlite3_mutex_enter(mem0.mutex); + mallocWithAlarm((int)n, &p); + sqlite3_mutex_leave(mem0.mutex); + }else{ + p = sqlite3GlobalConfig.m.xMalloc((int)n); + } + assert( EIGHT_BYTE_ALIGNMENT(p) ); /* IMP: R-11148-40995 */ + return p; +} + +/* +** This version of the memory allocation is for use by the application. +** First make sure the memory subsystem is initialized, then do the +** allocation. +*/ +SQLITE_API void *sqlite3_malloc(int n){ +#ifndef SQLITE_OMIT_AUTOINIT + if( sqlite3_initialize() ) return 0; +#endif + return n<=0 ? 0 : sqlite3Malloc(n); +} +SQLITE_API void *sqlite3_malloc64(sqlite3_uint64 n){ +#ifndef SQLITE_OMIT_AUTOINIT + if( sqlite3_initialize() ) return 0; +#endif + return sqlite3Malloc(n); +} + +/* +** TRUE if p is a lookaside memory allocation from db +*/ +#ifndef SQLITE_OMIT_LOOKASIDE +static int isLookaside(sqlite3 *db, const void *p){ + return SQLITE_WITHIN(p, db->lookaside.pStart, db->lookaside.pTrueEnd); +} +#else +#define isLookaside(A,B) 0 +#endif + +/* +** Return the size of a memory allocation previously obtained from +** sqlite3Malloc() or sqlite3_malloc(). +*/ +SQLITE_PRIVATE int sqlite3MallocSize(const void *p){ + assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) ); + return sqlite3GlobalConfig.m.xSize((void*)p); +} +static int lookasideMallocSize(sqlite3 *db, const void *p){ +#ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE + return plookaside.pMiddle ? db->lookaside.szTrue : LOOKASIDE_SMALL; +#else + return db->lookaside.szTrue; +#endif +} +SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, const void *p){ + assert( p!=0 ); +#ifdef SQLITE_DEBUG + if( db==0 ){ + assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_HEAP) ); + assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) ); + }else if( !isLookaside(db,p) ){ + assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); + assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); + } +#endif + if( db ){ + if( ((uptr)p)<(uptr)(db->lookaside.pTrueEnd) ){ +#ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE + if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){ + assert( sqlite3_mutex_held(db->mutex) ); + return LOOKASIDE_SMALL; + } +#endif + if( ((uptr)p)>=(uptr)(db->lookaside.pStart) ){ + assert( sqlite3_mutex_held(db->mutex) ); + return db->lookaside.szTrue; + } + } + } + return sqlite3GlobalConfig.m.xSize((void*)p); +} +SQLITE_API sqlite3_uint64 sqlite3_msize(void *p){ + assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_HEAP) ); + assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) ); + return p ? sqlite3GlobalConfig.m.xSize(p) : 0; +} + +/* +** Free memory previously obtained from sqlite3Malloc(). +*/ +SQLITE_API void sqlite3_free(void *p){ + if( p==0 ) return; /* IMP: R-49053-54554 */ + assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) ); + assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_HEAP) ); + if( sqlite3GlobalConfig.bMemstat ){ + sqlite3_mutex_enter(mem0.mutex); + sqlite3StatusDown(SQLITE_STATUS_MEMORY_USED, sqlite3MallocSize(p)); + sqlite3StatusDown(SQLITE_STATUS_MALLOC_COUNT, 1); + sqlite3GlobalConfig.m.xFree(p); + sqlite3_mutex_leave(mem0.mutex); + }else{ + sqlite3GlobalConfig.m.xFree(p); + } +} + +/* +** Add the size of memory allocation "p" to the count in +** *db->pnBytesFreed. +*/ +static SQLITE_NOINLINE void measureAllocationSize(sqlite3 *db, void *p){ + *db->pnBytesFreed += sqlite3DbMallocSize(db,p); +} + +/* +** Free memory that might be associated with a particular database +** connection. Calling sqlite3DbFree(D,X) for X==0 is a harmless no-op. +** The sqlite3DbFreeNN(D,X) version requires that X be non-NULL. +*/ +SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3 *db, void *p){ + assert( db==0 || sqlite3_mutex_held(db->mutex) ); + assert( p!=0 ); + if( db ){ + if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){ +#ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE + if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){ + LookasideSlot *pBuf = (LookasideSlot*)p; + assert( db->pnBytesFreed==0 ); +#ifdef SQLITE_DEBUG + memset(p, 0xaa, LOOKASIDE_SMALL); /* Trash freed content */ +#endif + pBuf->pNext = db->lookaside.pSmallFree; + db->lookaside.pSmallFree = pBuf; + return; + } +#endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */ + if( ((uptr)p)>=(uptr)(db->lookaside.pStart) ){ + LookasideSlot *pBuf = (LookasideSlot*)p; + assert( db->pnBytesFreed==0 ); +#ifdef SQLITE_DEBUG + memset(p, 0xaa, db->lookaside.szTrue); /* Trash freed content */ +#endif + pBuf->pNext = db->lookaside.pFree; + db->lookaside.pFree = pBuf; + return; + } + } + if( db->pnBytesFreed ){ + measureAllocationSize(db, p); + return; + } + } + assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); + assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); + assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) ); + sqlite3MemdebugSetType(p, MEMTYPE_HEAP); + sqlite3_free(p); +} +SQLITE_PRIVATE void sqlite3DbNNFreeNN(sqlite3 *db, void *p){ + assert( db!=0 ); + assert( sqlite3_mutex_held(db->mutex) ); + assert( p!=0 ); + if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){ +#ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE + if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){ + LookasideSlot *pBuf = (LookasideSlot*)p; + assert( db->pnBytesFreed==0 ); +#ifdef SQLITE_DEBUG + memset(p, 0xaa, LOOKASIDE_SMALL); /* Trash freed content */ +#endif + pBuf->pNext = db->lookaside.pSmallFree; + db->lookaside.pSmallFree = pBuf; + return; + } +#endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */ + if( ((uptr)p)>=(uptr)(db->lookaside.pStart) ){ + LookasideSlot *pBuf = (LookasideSlot*)p; + assert( db->pnBytesFreed==0 ); +#ifdef SQLITE_DEBUG + memset(p, 0xaa, db->lookaside.szTrue); /* Trash freed content */ +#endif + pBuf->pNext = db->lookaside.pFree; + db->lookaside.pFree = pBuf; + return; + } + } + if( db->pnBytesFreed ){ + measureAllocationSize(db, p); + return; + } + assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); + assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); + sqlite3MemdebugSetType(p, MEMTYPE_HEAP); + sqlite3_free(p); +} +SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){ + assert( db==0 || sqlite3_mutex_held(db->mutex) ); + if( p ) sqlite3DbFreeNN(db, p); +} + +/* +** Change the size of an existing memory allocation +*/ +SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, u64 nBytes){ + int nOld, nNew, nDiff; + void *pNew; + assert( sqlite3MemdebugHasType(pOld, MEMTYPE_HEAP) ); + assert( sqlite3MemdebugNoType(pOld, (u8)~MEMTYPE_HEAP) ); + if( pOld==0 ){ + return sqlite3Malloc(nBytes); /* IMP: R-04300-56712 */ + } + if( nBytes==0 ){ + sqlite3_free(pOld); /* IMP: R-26507-47431 */ + return 0; + } + if( nBytes>SQLITE_MAX_ALLOCATION_SIZE ){ + return 0; + } + nOld = sqlite3MallocSize(pOld); + /* IMPLEMENTATION-OF: R-46199-30249 SQLite guarantees that the second + ** argument to xRealloc is always a value returned by a prior call to + ** xRoundup. */ + nNew = sqlite3GlobalConfig.m.xRoundup((int)nBytes); + if( nOld==nNew ){ + pNew = pOld; + }else if( sqlite3GlobalConfig.bMemstat ){ + sqlite3_int64 nUsed; + sqlite3_mutex_enter(mem0.mutex); + sqlite3StatusHighwater(SQLITE_STATUS_MALLOC_SIZE, (int)nBytes); + nDiff = nNew - nOld; + if( nDiff>0 && (nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED)) >= + mem0.alarmThreshold-nDiff ){ + sqlite3MallocAlarm(nDiff); + if( mem0.hardLimit>0 && nUsed >= mem0.hardLimit - nDiff ){ + sqlite3_mutex_leave(mem0.mutex); + test_oom_breakpoint(1); + return 0; + } + } + pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew); +#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT + if( pNew==0 && mem0.alarmThreshold>0 ){ + sqlite3MallocAlarm((int)nBytes); + pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew); + } +#endif + if( pNew ){ + nNew = sqlite3MallocSize(pNew); + sqlite3StatusUp(SQLITE_STATUS_MEMORY_USED, nNew-nOld); + } + sqlite3_mutex_leave(mem0.mutex); + }else{ + pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew); + } + assert( EIGHT_BYTE_ALIGNMENT(pNew) ); /* IMP: R-11148-40995 */ + return pNew; +} + +/* +** The public interface to sqlite3Realloc. Make sure that the memory +** subsystem is initialized prior to invoking sqliteRealloc. +*/ +SQLITE_API void *sqlite3_realloc(void *pOld, int n){ +#ifndef SQLITE_OMIT_AUTOINIT + if( sqlite3_initialize() ) return 0; +#endif + if( n<0 ) n = 0; /* IMP: R-26507-47431 */ + return sqlite3Realloc(pOld, n); +} +SQLITE_API void *sqlite3_realloc64(void *pOld, sqlite3_uint64 n){ +#ifndef SQLITE_OMIT_AUTOINIT + if( sqlite3_initialize() ) return 0; +#endif + return sqlite3Realloc(pOld, n); +} + + +/* +** Allocate and zero memory. +*/ +SQLITE_PRIVATE void *sqlite3MallocZero(u64 n){ + void *p = sqlite3Malloc(n); + if( p ){ + memset(p, 0, (size_t)n); + } + return p; +} + +/* +** Allocate and zero memory. If the allocation fails, make +** the mallocFailed flag in the connection pointer. +*/ +SQLITE_PRIVATE void *sqlite3DbMallocZero(sqlite3 *db, u64 n){ + void *p; + testcase( db==0 ); + p = sqlite3DbMallocRaw(db, n); + if( p ) memset(p, 0, (size_t)n); + return p; +} + + +/* Finish the work of sqlite3DbMallocRawNN for the unusual and +** slower case when the allocation cannot be fulfilled using lookaside. +*/ +static SQLITE_NOINLINE void *dbMallocRawFinish(sqlite3 *db, u64 n){ + void *p; + assert( db!=0 ); + p = sqlite3Malloc(n); + if( !p ) sqlite3OomFault(db); + sqlite3MemdebugSetType(p, + (db->lookaside.bDisable==0) ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP); + return p; +} + +/* +** Allocate memory, either lookaside (if possible) or heap. +** If the allocation fails, set the mallocFailed flag in +** the connection pointer. +** +** If db!=0 and db->mallocFailed is true (indicating a prior malloc +** failure on the same database connection) then always return 0. +** Hence for a particular database connection, once malloc starts +** failing, it fails consistently until mallocFailed is reset. +** This is an important assumption. There are many places in the +** code that do things like this: +** +** int *a = (int*)sqlite3DbMallocRaw(db, 100); +** int *b = (int*)sqlite3DbMallocRaw(db, 200); +** if( b ) a[10] = 9; +** +** In other words, if a subsequent malloc (ex: "b") worked, it is assumed +** that all prior mallocs (ex: "a") worked too. +** +** The sqlite3MallocRawNN() variant guarantees that the "db" parameter is +** not a NULL pointer. +*/ +SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3 *db, u64 n){ + void *p; + if( db ) return sqlite3DbMallocRawNN(db, n); + p = sqlite3Malloc(n); + sqlite3MemdebugSetType(p, MEMTYPE_HEAP); + return p; +} +SQLITE_PRIVATE void *sqlite3DbMallocRawNN(sqlite3 *db, u64 n){ +#ifndef SQLITE_OMIT_LOOKASIDE + LookasideSlot *pBuf; + assert( db!=0 ); + assert( sqlite3_mutex_held(db->mutex) ); + assert( db->pnBytesFreed==0 ); + if( n>db->lookaside.sz ){ + if( !db->lookaside.bDisable ){ + db->lookaside.anStat[1]++; + }else if( db->mallocFailed ){ + return 0; + } + return dbMallocRawFinish(db, n); + } +#ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE + if( n<=LOOKASIDE_SMALL ){ + if( (pBuf = db->lookaside.pSmallFree)!=0 ){ + db->lookaside.pSmallFree = pBuf->pNext; + db->lookaside.anStat[0]++; + return (void*)pBuf; + }else if( (pBuf = db->lookaside.pSmallInit)!=0 ){ + db->lookaside.pSmallInit = pBuf->pNext; + db->lookaside.anStat[0]++; + return (void*)pBuf; + } + } +#endif + if( (pBuf = db->lookaside.pFree)!=0 ){ + db->lookaside.pFree = pBuf->pNext; + db->lookaside.anStat[0]++; + return (void*)pBuf; + }else if( (pBuf = db->lookaside.pInit)!=0 ){ + db->lookaside.pInit = pBuf->pNext; + db->lookaside.anStat[0]++; + return (void*)pBuf; + }else{ + db->lookaside.anStat[2]++; + } +#else + assert( db!=0 ); + assert( sqlite3_mutex_held(db->mutex) ); + assert( db->pnBytesFreed==0 ); + if( db->mallocFailed ){ + return 0; + } +#endif + return dbMallocRawFinish(db, n); +} + +/* Forward declaration */ +static SQLITE_NOINLINE void *dbReallocFinish(sqlite3 *db, void *p, u64 n); + +/* +** Resize the block of memory pointed to by p to n bytes. If the +** resize fails, set the mallocFailed flag in the connection object. +*/ +SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *db, void *p, u64 n){ + assert( db!=0 ); + if( p==0 ) return sqlite3DbMallocRawNN(db, n); + assert( sqlite3_mutex_held(db->mutex) ); + if( ((uptr)p)<(uptr)db->lookaside.pEnd ){ +#ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE + if( ((uptr)p)>=(uptr)db->lookaside.pMiddle ){ + if( n<=LOOKASIDE_SMALL ) return p; + }else +#endif + if( ((uptr)p)>=(uptr)db->lookaside.pStart ){ + if( n<=db->lookaside.szTrue ) return p; + } + } + return dbReallocFinish(db, p, n); +} +static SQLITE_NOINLINE void *dbReallocFinish(sqlite3 *db, void *p, u64 n){ + void *pNew = 0; + assert( db!=0 ); + assert( p!=0 ); + if( db->mallocFailed==0 ){ + if( isLookaside(db, p) ){ + pNew = sqlite3DbMallocRawNN(db, n); + if( pNew ){ + memcpy(pNew, p, lookasideMallocSize(db, p)); + sqlite3DbFree(db, p); + } + }else{ + assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); + assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); + sqlite3MemdebugSetType(p, MEMTYPE_HEAP); + pNew = sqlite3Realloc(p, n); + if( !pNew ){ + sqlite3OomFault(db); + } + sqlite3MemdebugSetType(pNew, + (db->lookaside.bDisable==0 ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP)); + } + } + return pNew; +} + +/* +** Attempt to reallocate p. If the reallocation fails, then free p +** and set the mallocFailed flag in the database connection. +*/ +SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *db, void *p, u64 n){ + void *pNew; + pNew = sqlite3DbRealloc(db, p, n); + if( !pNew ){ + sqlite3DbFree(db, p); + } + return pNew; +} + +/* +** Make a copy of a string in memory obtained from sqliteMalloc(). These +** functions call sqlite3MallocRaw() directly instead of sqliteMalloc(). This +** is because when memory debugging is turned on, these two functions are +** called via macros that record the current file and line number in the +** ThreadData structure. +*/ +SQLITE_PRIVATE char *sqlite3DbStrDup(sqlite3 *db, const char *z){ + char *zNew; + size_t n; + if( z==0 ){ + return 0; + } + n = strlen(z) + 1; + zNew = sqlite3DbMallocRaw(db, n); + if( zNew ){ + memcpy(zNew, z, n); + } + return zNew; +} +SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3 *db, const char *z, u64 n){ + char *zNew; + assert( db!=0 ); + assert( z!=0 || n==0 ); + assert( (n&0x7fffffff)==n ); + zNew = z ? sqlite3DbMallocRawNN(db, n+1) : 0; + if( zNew ){ + memcpy(zNew, z, (size_t)n); + zNew[n] = 0; + } + return zNew; +} + +/* +** The text between zStart and zEnd represents a phrase within a larger +** SQL statement. Make a copy of this phrase in space obtained form +** sqlite3DbMalloc(). Omit leading and trailing whitespace. +*/ +SQLITE_PRIVATE char *sqlite3DbSpanDup(sqlite3 *db, const char *zStart, const char *zEnd){ + int n; +#ifdef SQLITE_DEBUG + /* Because of the way the parser works, the span is guaranteed to contain + ** at least one non-space character */ + for(n=0; sqlite3Isspace(zStart[n]); n++){ assert( &zStart[n]mallocFailed, and also +** temporarily disable the lookaside memory allocator and interrupt +** any running VDBEs. +** +** Always return a NULL pointer so that this routine can be invoked using +** +** return sqlite3OomFault(db); +** +** and thereby avoid unnecessary stack frame allocations for the overwhelmingly +** common case where no OOM occurs. +*/ +SQLITE_PRIVATE void *sqlite3OomFault(sqlite3 *db){ + if( db->mallocFailed==0 && db->bBenignMalloc==0 ){ + db->mallocFailed = 1; + if( db->nVdbeExec>0 ){ + AtomicStore(&db->u1.isInterrupted, 1); + } + DisableLookaside; + if( db->pParse ){ + Parse *pParse; + sqlite3ErrorMsg(db->pParse, "out of memory"); + db->pParse->rc = SQLITE_NOMEM_BKPT; + for(pParse=db->pParse->pOuterParse; pParse; pParse = pParse->pOuterParse){ + pParse->nErr++; + pParse->rc = SQLITE_NOMEM; + } + } + } + return 0; +} + +/* +** This routine reactivates the memory allocator and clears the +** db->mallocFailed flag as necessary. +** +** The memory allocator is not restarted if there are running +** VDBEs. +*/ +SQLITE_PRIVATE void sqlite3OomClear(sqlite3 *db){ + if( db->mallocFailed && db->nVdbeExec==0 ){ + db->mallocFailed = 0; + AtomicStore(&db->u1.isInterrupted, 0); + assert( db->lookaside.bDisable>0 ); + EnableLookaside; + } +} + +/* +** Take actions at the end of an API call to deal with error codes. +*/ +static SQLITE_NOINLINE int apiHandleError(sqlite3 *db, int rc){ + if( db->mallocFailed || rc==SQLITE_IOERR_NOMEM ){ + sqlite3OomClear(db); + sqlite3Error(db, SQLITE_NOMEM); + return SQLITE_NOMEM_BKPT; + } + return rc & db->errMask; +} + +/* +** This function must be called before exiting any API function (i.e. +** returning control to the user) that has called sqlite3_malloc or +** sqlite3_realloc. +** +** The returned value is normally a copy of the second argument to this +** function. However, if a malloc() failure has occurred since the previous +** invocation SQLITE_NOMEM is returned instead. +** +** If an OOM as occurred, then the connection error-code (the value +** returned by sqlite3_errcode()) is set to SQLITE_NOMEM. +*/ +SQLITE_PRIVATE int sqlite3ApiExit(sqlite3* db, int rc){ + /* If the db handle must hold the connection handle mutex here. + ** Otherwise the read (and possible write) of db->mallocFailed + ** is unsafe, as is the call to sqlite3Error(). + */ + assert( db!=0 ); + assert( sqlite3_mutex_held(db->mutex) ); + if( db->mallocFailed || rc ){ + return apiHandleError(db, rc); + } + return 0; +} + +/************** End of malloc.c **********************************************/ +/************** Begin file printf.c ******************************************/ +/* +** The "printf" code that follows dates from the 1980's. It is in +** the public domain. +** +************************************************************************** +** +** This file contains code for a set of "printf"-like routines. These +** routines format strings much like the printf() from the standard C +** library, though the implementation here has enhancements to support +** SQLite. +*/ +/* #include "sqliteInt.h" */ + +/* +** Conversion types fall into various categories as defined by the +** following enumeration. +*/ +#define etRADIX 0 /* non-decimal integer types. %x %o */ +#define etFLOAT 1 /* Floating point. %f */ +#define etEXP 2 /* Exponentional notation. %e and %E */ +#define etGENERIC 3 /* Floating or exponential, depending on exponent. %g */ +#define etSIZE 4 /* Return number of characters processed so far. %n */ +#define etSTRING 5 /* Strings. %s */ +#define etDYNSTRING 6 /* Dynamically allocated strings. %z */ +#define etPERCENT 7 /* Percent symbol. %% */ +#define etCHARX 8 /* Characters. %c */ +/* The rest are extensions, not normally found in printf() */ +#define etESCAPE_q 9 /* Strings with '\'' doubled. %q */ +#define etESCAPE_Q 10 /* Strings with '\'' doubled and enclosed in '', + NULL pointers replaced by SQL NULL. %Q */ +#define etTOKEN 11 /* a pointer to a Token structure */ +#define etSRCITEM 12 /* a pointer to a SrcItem */ +#define etPOINTER 13 /* The %p conversion */ +#define etESCAPE_w 14 /* %w -> Strings with '\"' doubled */ +#define etORDINAL 15 /* %r -> 1st, 2nd, 3rd, 4th, etc. English only */ +#define etDECIMAL 16 /* %d or %u, but not %x, %o */ + +#define etINVALID 17 /* Any unrecognized conversion type */ + + +/* +** An "etByte" is an 8-bit unsigned value. +*/ +typedef unsigned char etByte; + +/* +** Each builtin conversion character (ex: the 'd' in "%d") is described +** by an instance of the following structure +*/ +typedef struct et_info { /* Information about each format field */ + char fmttype; /* The format field code letter */ + etByte base; /* The base for radix conversion */ + etByte flags; /* One or more of FLAG_ constants below */ + etByte type; /* Conversion paradigm */ + etByte charset; /* Offset into aDigits[] of the digits string */ + etByte prefix; /* Offset into aPrefix[] of the prefix string */ + char iNxt; /* Next with same hash, or 0 for end of chain */ +} et_info; + +/* +** Allowed values for et_info.flags +*/ +#define FLAG_SIGNED 1 /* True if the value to convert is signed */ +#define FLAG_STRING 4 /* Allow infinite precision */ + +/* +** The table is searched by hash. In the case of %C where C is the character +** and that character has ASCII value j, then the hash is j%23. +** +** The order of the entries in fmtinfo[] and the hash chain was entered +** manually, but based on the output of the following TCL script: +*/ +#if 0 /***** Beginning of script ******/ +foreach c {d s g z q Q w c o u x X f e E G i n % p T S r} { + scan $c %c x + set n($c) $x +} +set mx [llength [array names n]] +puts "count: $mx" + +set mx 27 +puts "*********** mx=$mx ************" +for {set r 0} {$r<$mx} {incr r} { + puts -nonewline [format %2d: $r] + foreach c [array names n] { + if {($n($c))%$mx==$r} {puts -nonewline " $c"} + } + puts "" +} +#endif /***** End of script ********/ + +static const char aDigits[] = "0123456789ABCDEF0123456789abcdef"; +static const char aPrefix[] = "-x0\000X0"; +static const et_info fmtinfo[23] = { + /* 0 */ { 's', 0, 4, etSTRING, 0, 0, 1 }, + /* 1 */ { 'E', 0, 1, etEXP, 14, 0, 0 }, /* Hash: 0 */ + /* 2 */ { 'u', 10, 0, etDECIMAL, 0, 0, 3 }, + /* 3 */ { 'G', 0, 1, etGENERIC, 14, 0, 0 }, /* Hash: 2 */ + /* 4 */ { 'w', 0, 4, etESCAPE_w, 0, 0, 0 }, + /* 5 */ { 'x', 16, 0, etRADIX, 16, 1, 0 }, + /* 6 */ { 'c', 0, 0, etCHARX, 0, 0, 0 }, /* Hash: 7 */ + /* 7 */ { 'z', 0, 4, etDYNSTRING, 0, 0, 6 }, + /* 8 */ { 'd', 10, 1, etDECIMAL, 0, 0, 0 }, + /* 9 */ { 'e', 0, 1, etEXP, 30, 0, 0 }, + /* 10 */ { 'f', 0, 1, etFLOAT, 0, 0, 0 }, + /* 11 */ { 'g', 0, 1, etGENERIC, 30, 0, 0 }, + /* 12 */ { 'Q', 0, 4, etESCAPE_Q, 0, 0, 0 }, + /* 13 */ { 'i', 10, 1, etDECIMAL, 0, 0, 0 }, + /* 14 */ { '%', 0, 0, etPERCENT, 0, 0, 16 }, + /* 15 */ { 'T', 0, 0, etTOKEN, 0, 0, 0 }, + /* 16 */ { 'S', 0, 0, etSRCITEM, 0, 0, 0 }, /* Hash: 14 */ + /* 17 */ { 'X', 16, 0, etRADIX, 0, 4, 0 }, /* Hash: 19 */ + /* 18 */ { 'n', 0, 0, etSIZE, 0, 0, 0 }, + /* 19 */ { 'o', 8, 0, etRADIX, 0, 2, 17 }, + /* 20 */ { 'p', 16, 0, etPOINTER, 0, 1, 0 }, + /* 21 */ { 'q', 0, 4, etESCAPE_q, 0, 0, 0 }, + /* 22 */ { 'r', 10, 1, etORDINAL, 0, 0, 0 } +}; + +/* Additional Notes: +** +** %S Takes a pointer to SrcItem. Shows name or database.name +** %!S Like %S but prefer the zName over the zAlias +*/ + +/* +** Set the StrAccum object to an error mode. +*/ +SQLITE_PRIVATE void sqlite3StrAccumSetError(StrAccum *p, u8 eError){ + assert( eError==SQLITE_NOMEM || eError==SQLITE_TOOBIG ); + p->accError = eError; + if( p->mxAlloc ) sqlite3_str_reset(p); + if( eError==SQLITE_TOOBIG ) sqlite3ErrorToParser(p->db, eError); +} + +/* +** Extra argument values from a PrintfArguments object +*/ +static sqlite3_int64 getIntArg(PrintfArguments *p){ + if( p->nArg<=p->nUsed ) return 0; + return sqlite3_value_int64(p->apArg[p->nUsed++]); +} +static double getDoubleArg(PrintfArguments *p){ + if( p->nArg<=p->nUsed ) return 0.0; + return sqlite3_value_double(p->apArg[p->nUsed++]); +} +static char *getTextArg(PrintfArguments *p){ + if( p->nArg<=p->nUsed ) return 0; + return (char*)sqlite3_value_text(p->apArg[p->nUsed++]); +} + +/* +** Allocate memory for a temporary buffer needed for printf rendering. +** +** If the requested size of the temp buffer is larger than the size +** of the output buffer in pAccum, then cause an SQLITE_TOOBIG error. +** Do the size check before the memory allocation to prevent rogue +** SQL from requesting large allocations using the precision or width +** field of the printf() function. +*/ +static char *printfTempBuf(sqlite3_str *pAccum, sqlite3_int64 n){ + char *z; + if( pAccum->accError ) return 0; + if( n>pAccum->nAlloc && n>pAccum->mxAlloc ){ + sqlite3StrAccumSetError(pAccum, SQLITE_TOOBIG); + return 0; + } + z = sqlite3DbMallocRaw(pAccum->db, n); + if( z==0 ){ + sqlite3StrAccumSetError(pAccum, SQLITE_NOMEM); + } + return z; +} + +/* +** On machines with a small stack size, you can redefine the +** SQLITE_PRINT_BUF_SIZE to be something smaller, if desired. +*/ +#ifndef SQLITE_PRINT_BUF_SIZE +# define SQLITE_PRINT_BUF_SIZE 70 +#endif +#define etBUFSIZE SQLITE_PRINT_BUF_SIZE /* Size of the output buffer */ + +/* +** Hard limit on the precision of floating-point conversions. +*/ +#ifndef SQLITE_PRINTF_PRECISION_LIMIT +# define SQLITE_FP_PRECISION_LIMIT 100000000 +#endif + +/* +** Render a string given by "fmt" into the StrAccum object. +*/ +SQLITE_API void sqlite3_str_vappendf( + sqlite3_str *pAccum, /* Accumulate results here */ + const char *fmt, /* Format string */ + va_list ap /* arguments */ +){ + int c; /* Next character in the format string */ + char *bufpt; /* Pointer to the conversion buffer */ + int precision; /* Precision of the current field */ + int length; /* Length of the field */ + int idx; /* A general purpose loop counter */ + int width; /* Width of the current field */ + etByte flag_leftjustify; /* True if "-" flag is present */ + etByte flag_prefix; /* '+' or ' ' or 0 for prefix */ + etByte flag_alternateform; /* True if "#" flag is present */ + etByte flag_altform2; /* True if "!" flag is present */ + etByte flag_zeropad; /* True if field width constant starts with zero */ + etByte flag_long; /* 1 for the "l" flag, 2 for "ll", 0 by default */ + etByte done; /* Loop termination flag */ + etByte cThousand; /* Thousands separator for %d and %u */ + etByte xtype = etINVALID; /* Conversion paradigm */ + u8 bArgList; /* True for SQLITE_PRINTF_SQLFUNC */ + char prefix; /* Prefix character. "+" or "-" or " " or '\0'. */ + sqlite_uint64 longvalue; /* Value for integer types */ + double realvalue; /* Value for real types */ + const et_info *infop; /* Pointer to the appropriate info structure */ + char *zOut; /* Rendering buffer */ + int nOut; /* Size of the rendering buffer */ + char *zExtra = 0; /* Malloced memory used by some conversion */ + int exp, e2; /* exponent of real numbers */ + etByte flag_dp; /* True if decimal point should be shown */ + etByte flag_rtz; /* True if trailing zeros should be removed */ + + PrintfArguments *pArgList = 0; /* Arguments for SQLITE_PRINTF_SQLFUNC */ + char buf[etBUFSIZE]; /* Conversion buffer */ + + /* pAccum never starts out with an empty buffer that was obtained from + ** malloc(). This precondition is required by the mprintf("%z...") + ** optimization. */ + assert( pAccum->nChar>0 || (pAccum->printfFlags&SQLITE_PRINTF_MALLOCED)==0 ); + + bufpt = 0; + if( (pAccum->printfFlags & SQLITE_PRINTF_SQLFUNC)!=0 ){ + pArgList = va_arg(ap, PrintfArguments*); + bArgList = 1; + }else{ + bArgList = 0; + } + for(; (c=(*fmt))!=0; ++fmt){ + if( c!='%' ){ + bufpt = (char *)fmt; +#if HAVE_STRCHRNUL + fmt = strchrnul(fmt, '%'); +#else + fmt = strchr(fmt, '%'); + if( fmt==0 ){ + fmt = bufpt + strlen(bufpt); + } +#endif + sqlite3_str_append(pAccum, bufpt, (int)(fmt - bufpt)); + if( *fmt==0 ) break; + } + if( (c=(*++fmt))==0 ){ + sqlite3_str_append(pAccum, "%", 1); + break; + } + /* Find out what flags are present */ + flag_leftjustify = flag_prefix = cThousand = + flag_alternateform = flag_altform2 = flag_zeropad = 0; + done = 0; + width = 0; + flag_long = 0; + precision = -1; + do{ + switch( c ){ + case '-': flag_leftjustify = 1; break; + case '+': flag_prefix = '+'; break; + case ' ': flag_prefix = ' '; break; + case '#': flag_alternateform = 1; break; + case '!': flag_altform2 = 1; break; + case '0': flag_zeropad = 1; break; + case ',': cThousand = ','; break; + default: done = 1; break; + case 'l': { + flag_long = 1; + c = *++fmt; + if( c=='l' ){ + c = *++fmt; + flag_long = 2; + } + done = 1; + break; + } + case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': { + unsigned wx = c - '0'; + while( (c = *++fmt)>='0' && c<='9' ){ + wx = wx*10 + c - '0'; + } + testcase( wx>0x7fffffff ); + width = wx & 0x7fffffff; +#ifdef SQLITE_PRINTF_PRECISION_LIMIT + if( width>SQLITE_PRINTF_PRECISION_LIMIT ){ + width = SQLITE_PRINTF_PRECISION_LIMIT; + } +#endif + if( c!='.' && c!='l' ){ + done = 1; + }else{ + fmt--; + } + break; + } + case '*': { + if( bArgList ){ + width = (int)getIntArg(pArgList); + }else{ + width = va_arg(ap,int); + } + if( width<0 ){ + flag_leftjustify = 1; + width = width >= -2147483647 ? -width : 0; + } +#ifdef SQLITE_PRINTF_PRECISION_LIMIT + if( width>SQLITE_PRINTF_PRECISION_LIMIT ){ + width = SQLITE_PRINTF_PRECISION_LIMIT; + } +#endif + if( (c = fmt[1])!='.' && c!='l' ){ + c = *++fmt; + done = 1; + } + break; + } + case '.': { + c = *++fmt; + if( c=='*' ){ + if( bArgList ){ + precision = (int)getIntArg(pArgList); + }else{ + precision = va_arg(ap,int); + } + if( precision<0 ){ + precision = precision >= -2147483647 ? -precision : -1; + } + c = *++fmt; + }else{ + unsigned px = 0; + while( c>='0' && c<='9' ){ + px = px*10 + c - '0'; + c = *++fmt; + } + testcase( px>0x7fffffff ); + precision = px & 0x7fffffff; + } +#ifdef SQLITE_PRINTF_PRECISION_LIMIT + if( precision>SQLITE_PRINTF_PRECISION_LIMIT ){ + precision = SQLITE_PRINTF_PRECISION_LIMIT; + } +#endif + if( c=='l' ){ + --fmt; + }else{ + done = 1; + } + break; + } + } + }while( !done && (c=(*++fmt))!=0 ); + + /* Fetch the info entry for the field */ +#ifdef SQLITE_EBCDIC + /* The hash table only works for ASCII. For EBCDIC, we need to do + ** a linear search of the table */ + infop = &fmtinfo[0]; + xtype = etINVALID; + for(idx=0; idxtype; + break; + } + } +#else + /* Fast hash-table lookup */ + assert( ArraySize(fmtinfo)==23 ); + idx = ((unsigned)c) % 23; + if( fmtinfo[idx].fmttype==c + || fmtinfo[idx = fmtinfo[idx].iNxt].fmttype==c + ){ + infop = &fmtinfo[idx]; + xtype = infop->type; + }else{ + infop = &fmtinfo[0]; + xtype = etINVALID; + } +#endif + + /* + ** At this point, variables are initialized as follows: + ** + ** flag_alternateform TRUE if a '#' is present. + ** flag_altform2 TRUE if a '!' is present. + ** flag_prefix '+' or ' ' or zero + ** flag_leftjustify TRUE if a '-' is present or if the + ** field width was negative. + ** flag_zeropad TRUE if the width began with 0. + ** flag_long 1 for "l", 2 for "ll" + ** width The specified field width. This is + ** always non-negative. Zero is the default. + ** precision The specified precision. The default + ** is -1. + ** xtype The class of the conversion. + ** infop Pointer to the appropriate info struct. + */ + assert( width>=0 ); + assert( precision>=(-1) ); + switch( xtype ){ + case etPOINTER: + flag_long = sizeof(char*)==sizeof(i64) ? 2 : + sizeof(char*)==sizeof(long int) ? 1 : 0; + /* no break */ deliberate_fall_through + case etORDINAL: + case etRADIX: + cThousand = 0; + /* no break */ deliberate_fall_through + case etDECIMAL: + if( infop->flags & FLAG_SIGNED ){ + i64 v; + if( bArgList ){ + v = getIntArg(pArgList); + }else if( flag_long ){ + if( flag_long==2 ){ + v = va_arg(ap,i64) ; + }else{ + v = va_arg(ap,long int); + } + }else{ + v = va_arg(ap,int); + } + if( v<0 ){ + testcase( v==SMALLEST_INT64 ); + testcase( v==(-1) ); + longvalue = ~v; + longvalue++; + prefix = '-'; + }else{ + longvalue = v; + prefix = flag_prefix; + } + }else{ + if( bArgList ){ + longvalue = (u64)getIntArg(pArgList); + }else if( flag_long ){ + if( flag_long==2 ){ + longvalue = va_arg(ap,u64); + }else{ + longvalue = va_arg(ap,unsigned long int); + } + }else{ + longvalue = va_arg(ap,unsigned int); + } + prefix = 0; + } + +#if WHERETRACE_ENABLED + if( xtype==etPOINTER && sqlite3WhereTrace & 0x100000 ) longvalue = 0; +#endif +#if TREETRACE_ENABLED + if( xtype==etPOINTER && sqlite3TreeTrace & 0x100000 ) longvalue = 0; +#endif + + if( longvalue==0 ) flag_alternateform = 0; + if( flag_zeropad && precision=4 || (longvalue/10)%10==1 ){ + x = 0; + } + *(--bufpt) = zOrd[x*2+1]; + *(--bufpt) = zOrd[x*2]; + } + { + const char *cset = &aDigits[infop->charset]; + u8 base = infop->base; + do{ /* Convert to ascii */ + *(--bufpt) = cset[longvalue%base]; + longvalue = longvalue/base; + }while( longvalue>0 ); + } + length = (int)(&zOut[nOut-1]-bufpt); + while( precision>length ){ + *(--bufpt) = '0'; /* Zero pad */ + length++; + } + if( cThousand ){ + int nn = (length - 1)/3; /* Number of "," to insert */ + int ix = (length - 1)%3 + 1; + bufpt -= nn; + for(idx=0; nn>0; idx++){ + bufpt[idx] = bufpt[idx+nn]; + ix--; + if( ix==0 ){ + bufpt[++idx] = cThousand; + nn--; + ix = 3; + } + } + } + if( prefix ) *(--bufpt) = prefix; /* Add sign */ + if( flag_alternateform && infop->prefix ){ /* Add "0" or "0x" */ + const char *pre; + char x; + pre = &aPrefix[infop->prefix]; + for(; (x=(*pre))!=0; pre++) *(--bufpt) = x; + } + length = (int)(&zOut[nOut-1]-bufpt); + break; + case etFLOAT: + case etEXP: + case etGENERIC: { + FpDecode s; + int iRound; + int j; + + if( bArgList ){ + realvalue = getDoubleArg(pArgList); + }else{ + realvalue = va_arg(ap,double); + } + if( precision<0 ) precision = 6; /* Set default precision */ +#ifdef SQLITE_FP_PRECISION_LIMIT + if( precision>SQLITE_FP_PRECISION_LIMIT ){ + precision = SQLITE_FP_PRECISION_LIMIT; + } +#endif + if( xtype==etFLOAT ){ + iRound = -precision; + }else if( xtype==etGENERIC ){ + if( precision==0 ) precision = 1; + iRound = precision; + }else{ + iRound = precision+1; + } + sqlite3FpDecode(&s, realvalue, iRound, flag_altform2 ? 26 : 16); + if( s.isSpecial ){ + if( s.isSpecial==2 ){ + bufpt = flag_zeropad ? "null" : "NaN"; + length = sqlite3Strlen30(bufpt); + break; + }else if( flag_zeropad ){ + s.z[0] = '9'; + s.iDP = 1000; + s.n = 1; + }else{ + memcpy(buf, "-Inf", 5); + bufpt = buf; + if( s.sign=='-' ){ + /* no-op */ + }else if( flag_prefix ){ + buf[0] = flag_prefix; + }else{ + bufpt++; + } + length = sqlite3Strlen30(bufpt); + break; + } + } + if( s.sign=='-' ){ + if( flag_alternateform + && !flag_prefix + && xtype==etFLOAT + && s.iDP<=iRound + ){ + /* Suppress the minus sign if all of the following are true: + ** * The value displayed is zero + ** * The '#' flag is used + ** * The '+' flag is not used, and + ** * The format is %f + */ + prefix = 0; + }else{ + prefix = '-'; + } + }else{ + prefix = flag_prefix; + } + + exp = s.iDP-1; + + /* + ** If the field type is etGENERIC, then convert to either etEXP + ** or etFLOAT, as appropriate. + */ + if( xtype==etGENERIC ){ + assert( precision>0 ); + precision--; + flag_rtz = !flag_alternateform; + if( exp<-4 || exp>precision ){ + xtype = etEXP; + }else{ + precision = precision - exp; + xtype = etFLOAT; + } + }else{ + flag_rtz = flag_altform2; + } + if( xtype==etEXP ){ + e2 = 0; + }else{ + e2 = s.iDP - 1; + } + bufpt = buf; + { + i64 szBufNeeded; /* Size of a temporary buffer needed */ + szBufNeeded = MAX(e2,0)+(i64)precision+(i64)width+15; + if( cThousand && e2>0 ) szBufNeeded += (e2+2)/3; + if( szBufNeeded > etBUFSIZE ){ + bufpt = zExtra = printfTempBuf(pAccum, szBufNeeded); + if( bufpt==0 ) return; + } + } + zOut = bufpt; + flag_dp = (precision>0 ?1:0) | flag_alternateform | flag_altform2; + /* The sign in front of the number */ + if( prefix ){ + *(bufpt++) = prefix; + } + /* Digits prior to the decimal point */ + j = 0; + if( e2<0 ){ + *(bufpt++) = '0'; + }else{ + for(; e2>=0; e2--){ + *(bufpt++) = j1 ) *(bufpt++) = ','; + } + } + /* The decimal point */ + if( flag_dp ){ + *(bufpt++) = '.'; + } + /* "0" digits after the decimal point but before the first + ** significant digit of the number */ + for(e2++; e2<0 && precision>0; precision--, e2++){ + *(bufpt++) = '0'; + } + /* Significant digits after the decimal point */ + while( (precision--)>0 ){ + *(bufpt++) = jzOut ); + if( bufpt[-1]=='.' ){ + if( flag_altform2 ){ + *(bufpt++) = '0'; + }else{ + *(--bufpt) = 0; + } + } + } + /* Add the "eNNN" suffix */ + if( xtype==etEXP ){ + exp = s.iDP - 1; + *(bufpt++) = aDigits[infop->charset]; + if( exp<0 ){ + *(bufpt++) = '-'; exp = -exp; + }else{ + *(bufpt++) = '+'; + } + if( exp>=100 ){ + *(bufpt++) = (char)((exp/100)+'0'); /* 100's digit */ + exp %= 100; + } + *(bufpt++) = (char)(exp/10+'0'); /* 10's digit */ + *(bufpt++) = (char)(exp%10+'0'); /* 1's digit */ + } + *bufpt = 0; + + /* The converted number is in buf[] and zero terminated. Output it. + ** Note that the number is in the usual order, not reversed as with + ** integer conversions. */ + length = (int)(bufpt-zOut); + bufpt = zOut; + + /* Special case: Add leading zeros if the flag_zeropad flag is + ** set and we are not left justified */ + if( flag_zeropad && !flag_leftjustify && length < width){ + int i; + int nPad = width - length; + for(i=width; i>=nPad; i--){ + bufpt[i] = bufpt[i-nPad]; + } + i = prefix!=0; + while( nPad-- ) bufpt[i++] = '0'; + length = width; + } + break; + } + case etSIZE: + if( !bArgList ){ + *(va_arg(ap,int*)) = pAccum->nChar; + } + length = width = 0; + break; + case etPERCENT: + buf[0] = '%'; + bufpt = buf; + length = 1; + break; + case etCHARX: + if( bArgList ){ + bufpt = getTextArg(pArgList); + length = 1; + if( bufpt ){ + buf[0] = c = *(bufpt++); + if( (c&0xc0)==0xc0 ){ + while( length<4 && (bufpt[0]&0xc0)==0x80 ){ + buf[length++] = *(bufpt++); + } + } + }else{ + buf[0] = 0; + } + }else{ + unsigned int ch = va_arg(ap,unsigned int); + length = sqlite3AppendOneUtf8Character(buf, ch); + } + if( precision>1 ){ + i64 nPrior = 1; + width -= precision-1; + if( width>1 && !flag_leftjustify ){ + sqlite3_str_appendchar(pAccum, width-1, ' '); + width = 0; + } + sqlite3_str_append(pAccum, buf, length); + precision--; + while( precision > 1 ){ + i64 nCopyBytes; + if( nPrior > precision-1 ) nPrior = precision - 1; + nCopyBytes = length*nPrior; + if( nCopyBytes + pAccum->nChar >= pAccum->nAlloc ){ + sqlite3StrAccumEnlarge(pAccum, nCopyBytes); + } + if( pAccum->accError ) break; + sqlite3_str_append(pAccum, + &pAccum->zText[pAccum->nChar-nCopyBytes], nCopyBytes); + precision -= nPrior; + nPrior *= 2; + } + } + bufpt = buf; + flag_altform2 = 1; + goto adjust_width_for_utf8; + case etSTRING: + case etDYNSTRING: + if( bArgList ){ + bufpt = getTextArg(pArgList); + xtype = etSTRING; + }else{ + bufpt = va_arg(ap,char*); + } + if( bufpt==0 ){ + bufpt = ""; + }else if( xtype==etDYNSTRING ){ + if( pAccum->nChar==0 + && pAccum->mxAlloc + && width==0 + && precision<0 + && pAccum->accError==0 + ){ + /* Special optimization for sqlite3_mprintf("%z..."): + ** Extend an existing memory allocation rather than creating + ** a new one. */ + assert( (pAccum->printfFlags&SQLITE_PRINTF_MALLOCED)==0 ); + pAccum->zText = bufpt; + pAccum->nAlloc = sqlite3DbMallocSize(pAccum->db, bufpt); + pAccum->nChar = 0x7fffffff & (int)strlen(bufpt); + pAccum->printfFlags |= SQLITE_PRINTF_MALLOCED; + length = 0; + break; + } + zExtra = bufpt; + } + if( precision>=0 ){ + if( flag_altform2 ){ + /* Set length to the number of bytes needed in order to display + ** precision characters */ + unsigned char *z = (unsigned char*)bufpt; + while( precision-- > 0 && z[0] ){ + SQLITE_SKIP_UTF8(z); + } + length = (int)(z - (unsigned char*)bufpt); + }else{ + for(length=0; length0 ){ + /* Adjust width to account for extra bytes in UTF-8 characters */ + int ii = length - 1; + while( ii>=0 ) if( (bufpt[ii--] & 0xc0)==0x80 ) width++; + } + break; + case etESCAPE_q: /* %q: Escape ' characters */ + case etESCAPE_Q: /* %Q: Escape ' and enclose in '...' */ + case etESCAPE_w: { /* %w: Escape " characters */ + i64 i, j, k, n; + int needQuote = 0; + char ch; + char *escarg; + char q; + + if( bArgList ){ + escarg = getTextArg(pArgList); + }else{ + escarg = va_arg(ap,char*); + } + if( escarg==0 ){ + escarg = (xtype==etESCAPE_Q ? "NULL" : "(NULL)"); + }else if( xtype==etESCAPE_Q ){ + needQuote = 1; + } + if( xtype==etESCAPE_w ){ + q = '"'; + flag_alternateform = 0; + }else{ + q = '\''; + } + /* For %q, %Q, and %w, the precision is the number of bytes (or + ** characters if the ! flags is present) to use from the input. + ** Because of the extra quoting characters inserted, the number + ** of output characters may be larger than the precision. + */ + k = precision; + for(i=n=0; k!=0 && (ch=escarg[i])!=0; i++, k--){ + if( ch==q ) n++; + if( flag_altform2 && (ch&0xc0)==0xc0 ){ + while( (escarg[i+1]&0xc0)==0x80 ){ i++; } + } + } + if( flag_alternateform ){ + /* For %#q, do unistr()-style backslash escapes for + ** all control characters, and for backslash itself. + ** For %#Q, do the same but only if there is at least + ** one control character. */ + u32 nBack = 0; + u32 nCtrl = 0; + for(k=0; ketBUFSIZE ){ + bufpt = zExtra = printfTempBuf(pAccum, n); + if( bufpt==0 ) return; + }else{ + bufpt = buf; + } + j = 0; + if( needQuote ){ + if( needQuote==2 ){ + memcpy(&bufpt[j], "unistr('", 8); + j += 8; + }else{ + bufpt[j++] = '\''; + } + } + k = i; + if( flag_alternateform ){ + for(i=0; i=0x10 ? '1' : '0'; + bufpt[j++] = "0123456789abcdef"[ch&0xf]; + } + } + }else{ + for(i=0; iprintfFlags & SQLITE_PRINTF_INTERNAL)==0 ) return; + if( flag_alternateform ){ + /* %#T means an Expr pointer that uses Expr.u.zToken */ + Expr *pExpr = va_arg(ap,Expr*); + if( ALWAYS(pExpr) && ALWAYS(!ExprHasProperty(pExpr,EP_IntValue)) ){ + sqlite3_str_appendall(pAccum, (const char*)pExpr->u.zToken); + sqlite3RecordErrorOffsetOfExpr(pAccum->db, pExpr); + } + }else{ + /* %T means a Token pointer */ + Token *pToken = va_arg(ap, Token*); + assert( bArgList==0 ); + if( pToken && pToken->n ){ + sqlite3_str_append(pAccum, (const char*)pToken->z, pToken->n); + sqlite3RecordErrorByteOffset(pAccum->db, pToken->z); + } + } + length = width = 0; + break; + } + case etSRCITEM: { + SrcItem *pItem; + if( (pAccum->printfFlags & SQLITE_PRINTF_INTERNAL)==0 ) return; + pItem = va_arg(ap, SrcItem*); + assert( bArgList==0 ); + if( pItem->zAlias && !flag_altform2 ){ + sqlite3_str_appendall(pAccum, pItem->zAlias); + }else if( pItem->zName ){ + if( pItem->fg.fixedSchema==0 + && pItem->fg.isSubquery==0 + && pItem->u4.zDatabase!=0 + ){ + sqlite3_str_appendall(pAccum, pItem->u4.zDatabase); + sqlite3_str_append(pAccum, ".", 1); + } + sqlite3_str_appendall(pAccum, pItem->zName); + }else if( pItem->zAlias ){ + sqlite3_str_appendall(pAccum, pItem->zAlias); + }else if( ALWAYS(pItem->fg.isSubquery) ){/* Because of tag-20240424-1 */ + Select *pSel = pItem->u4.pSubq->pSelect; + assert( pSel!=0 ); + if( pSel->selFlags & SF_NestedFrom ){ + sqlite3_str_appendf(pAccum, "(join-%u)", pSel->selId); + }else if( pSel->selFlags & SF_MultiValue ){ + assert( !pItem->fg.isTabFunc && !pItem->fg.isIndexedBy ); + sqlite3_str_appendf(pAccum, "%u-ROW VALUES CLAUSE", + pItem->u1.nRow); + }else{ + sqlite3_str_appendf(pAccum, "(subquery-%u)", pSel->selId); + } + } + length = width = 0; + break; + } + default: { + assert( xtype==etINVALID ); + return; + } + }/* End switch over the format type */ + /* + ** The text of the conversion is pointed to by "bufpt" and is + ** "length" characters long. The field width is "width". Do + ** the output. Both length and width are in bytes, not characters, + ** at this point. If the "!" flag was present on string conversions + ** indicating that width and precision should be expressed in characters, + ** then the values have been translated prior to reaching this point. + */ + width -= length; + if( width>0 ){ + if( !flag_leftjustify ) sqlite3_str_appendchar(pAccum, width, ' '); + sqlite3_str_append(pAccum, bufpt, length); + if( flag_leftjustify ) sqlite3_str_appendchar(pAccum, width, ' '); + }else{ + sqlite3_str_append(pAccum, bufpt, length); + } + + if( zExtra ){ + sqlite3DbFree(pAccum->db, zExtra); + zExtra = 0; + } + }/* End for loop over the format string */ +} /* End of function */ + + +/* +** The z string points to the first character of a token that is +** associated with an error. If db does not already have an error +** byte offset recorded, try to compute the error byte offset for +** z and set the error byte offset in db. +*/ +SQLITE_PRIVATE void sqlite3RecordErrorByteOffset(sqlite3 *db, const char *z){ + const Parse *pParse; + const char *zText; + const char *zEnd; + assert( z!=0 ); + if( NEVER(db==0) ) return; + if( db->errByteOffset!=(-2) ) return; + pParse = db->pParse; + if( NEVER(pParse==0) ) return; + zText =pParse->zTail; + if( NEVER(zText==0) ) return; + zEnd = &zText[strlen(zText)]; + if( SQLITE_WITHIN(z,zText,zEnd) ){ + db->errByteOffset = (int)(z-zText); + } +} + +/* +** If pExpr has a byte offset for the start of a token, record that as +** as the error offset. +*/ +SQLITE_PRIVATE void sqlite3RecordErrorOffsetOfExpr(sqlite3 *db, const Expr *pExpr){ + while( pExpr + && (ExprHasProperty(pExpr,EP_OuterON|EP_InnerON) || pExpr->w.iOfst<=0) + ){ + pExpr = pExpr->pLeft; + } + if( pExpr==0 ) return; + if( ExprHasProperty(pExpr, EP_FromDDL) ) return; + db->errByteOffset = pExpr->w.iOfst; +} + +/* +** Enlarge the memory allocation on a StrAccum object so that it is +** able to accept at least N more bytes of text. +** +** Return the number of bytes of text that StrAccum is able to accept +** after the attempted enlargement. The value returned might be zero. +*/ +SQLITE_PRIVATE int sqlite3StrAccumEnlarge(StrAccum *p, i64 N){ + char *zNew; + assert( p->nChar+N >= p->nAlloc ); /* Only called if really needed */ + if( p->accError ){ + testcase(p->accError==SQLITE_TOOBIG); + testcase(p->accError==SQLITE_NOMEM); + return 0; + } + if( p->mxAlloc==0 ){ + sqlite3StrAccumSetError(p, SQLITE_TOOBIG); + return p->nAlloc - p->nChar - 1; + }else{ + char *zOld = isMalloced(p) ? p->zText : 0; + i64 szNew = p->nChar + N + 1; + if( szNew+p->nChar<=p->mxAlloc ){ + /* Force exponential buffer size growth as long as it does not overflow, + ** to avoid having to call this routine too often */ + szNew += p->nChar; + } + if( szNew > p->mxAlloc ){ + sqlite3_str_reset(p); + sqlite3StrAccumSetError(p, SQLITE_TOOBIG); + return 0; + }else{ + p->nAlloc = (int)szNew; + } + if( p->db ){ + zNew = sqlite3DbRealloc(p->db, zOld, p->nAlloc); + }else{ + zNew = sqlite3Realloc(zOld, p->nAlloc); + } + if( zNew ){ + assert( p->zText!=0 || p->nChar==0 ); + if( !isMalloced(p) && p->nChar>0 ) memcpy(zNew, p->zText, p->nChar); + p->zText = zNew; + p->nAlloc = sqlite3DbMallocSize(p->db, zNew); + p->printfFlags |= SQLITE_PRINTF_MALLOCED; + }else{ + sqlite3_str_reset(p); + sqlite3StrAccumSetError(p, SQLITE_NOMEM); + return 0; + } + } + assert( N>=0 && N<=0x7fffffff ); + return (int)N; +} + +/* +** Append N copies of character c to the given string buffer. +*/ +SQLITE_API void sqlite3_str_appendchar(sqlite3_str *p, int N, char c){ + testcase( p->nChar + (i64)N > 0x7fffffff ); + if( p->nChar+(i64)N >= p->nAlloc && (N = sqlite3StrAccumEnlarge(p, N))<=0 ){ + return; + } + while( (N--)>0 ) p->zText[p->nChar++] = c; +} + +/* +** The StrAccum "p" is not large enough to accept N new bytes of z[]. +** So enlarge if first, then do the append. +** +** This is a helper routine to sqlite3_str_append() that does special-case +** work (enlarging the buffer) using tail recursion, so that the +** sqlite3_str_append() routine can use fast calling semantics. +*/ +static void SQLITE_NOINLINE enlargeAndAppend(StrAccum *p, const char *z, int N){ + N = sqlite3StrAccumEnlarge(p, N); + if( N>0 ){ + memcpy(&p->zText[p->nChar], z, N); + p->nChar += N; + } +} + +/* +** Append N bytes of text from z to the StrAccum object. Increase the +** size of the memory allocation for StrAccum if necessary. +*/ +SQLITE_API void sqlite3_str_append(sqlite3_str *p, const char *z, int N){ + assert( z!=0 || N==0 ); + assert( p->zText!=0 || p->nChar==0 || p->accError ); + assert( N>=0 ); + assert( p->accError==0 || p->nAlloc==0 || p->mxAlloc==0 ); + if( p->nChar+N >= p->nAlloc ){ + enlargeAndAppend(p,z,N); + }else if( N ){ + assert( p->zText ); + p->nChar += N; + memcpy(&p->zText[p->nChar-N], z, N); + } +} + +/* +** Append the complete text of zero-terminated string z[] to the p string. +*/ +SQLITE_API void sqlite3_str_appendall(sqlite3_str *p, const char *z){ + sqlite3_str_append(p, z, sqlite3Strlen30(z)); +} + + +/* +** Finish off a string by making sure it is zero-terminated. +** Return a pointer to the resulting string. Return a NULL +** pointer if any kind of error was encountered. +*/ +static SQLITE_NOINLINE char *strAccumFinishRealloc(StrAccum *p){ + char *zText; + assert( p->mxAlloc>0 && !isMalloced(p) ); + zText = sqlite3DbMallocRaw(p->db, 1+(u64)p->nChar ); + if( zText ){ + memcpy(zText, p->zText, p->nChar+1); + p->printfFlags |= SQLITE_PRINTF_MALLOCED; + }else{ + sqlite3StrAccumSetError(p, SQLITE_NOMEM); + } + p->zText = zText; + return zText; +} +SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum *p){ + if( p->zText ){ + p->zText[p->nChar] = 0; + if( p->mxAlloc>0 && !isMalloced(p) ){ + return strAccumFinishRealloc(p); + } + } + return p->zText; +} + +/* +** Use the content of the StrAccum passed as the second argument +** as the result of an SQL function. +*/ +SQLITE_PRIVATE void sqlite3ResultStrAccum(sqlite3_context *pCtx, StrAccum *p){ + if( p->accError ){ + sqlite3_result_error_code(pCtx, p->accError); + sqlite3_str_reset(p); + }else if( isMalloced(p) ){ + sqlite3_result_text(pCtx, p->zText, p->nChar, SQLITE_DYNAMIC); + }else{ + sqlite3_result_text(pCtx, "", 0, SQLITE_STATIC); + sqlite3_str_reset(p); + } +} + +/* +** This singleton is an sqlite3_str object that is returned if +** sqlite3_malloc() fails to provide space for a real one. This +** sqlite3_str object accepts no new text and always returns +** an SQLITE_NOMEM error. +*/ +static sqlite3_str sqlite3OomStr = { + 0, 0, 0, 0, 0, SQLITE_NOMEM, 0 +}; + +/* Finalize a string created using sqlite3_str_new(). +*/ +SQLITE_API char *sqlite3_str_finish(sqlite3_str *p){ + char *z; + if( p!=0 && p!=&sqlite3OomStr ){ + z = sqlite3StrAccumFinish(p); + sqlite3_free(p); + }else{ + z = 0; + } + return z; +} + +/* Return any error code associated with p */ +SQLITE_API int sqlite3_str_errcode(sqlite3_str *p){ + return p ? p->accError : SQLITE_NOMEM; +} + +/* Return the current length of p in bytes */ +SQLITE_API int sqlite3_str_length(sqlite3_str *p){ + return p ? p->nChar : 0; +} + +/* Return the current value for p */ +SQLITE_API char *sqlite3_str_value(sqlite3_str *p){ + if( p==0 || p->nChar==0 ) return 0; + p->zText[p->nChar] = 0; + return p->zText; +} + +/* +** Reset an StrAccum string. Reclaim all malloced memory. +*/ +SQLITE_API void sqlite3_str_reset(StrAccum *p){ + if( isMalloced(p) ){ + sqlite3DbFree(p->db, p->zText); + p->printfFlags &= ~SQLITE_PRINTF_MALLOCED; + } + p->nAlloc = 0; + p->nChar = 0; + p->zText = 0; +} + +/* +** Initialize a string accumulator. +** +** p: The accumulator to be initialized. +** db: Pointer to a database connection. May be NULL. Lookaside +** memory is used if not NULL. db->mallocFailed is set appropriately +** when not NULL. +** zBase: An initial buffer. May be NULL in which case the initial buffer +** is malloced. +** n: Size of zBase in bytes. If total space requirements never exceed +** n then no memory allocations ever occur. +** mx: Maximum number of bytes to accumulate. If mx==0 then no memory +** allocations will ever occur. +*/ +SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum *p, sqlite3 *db, char *zBase, int n, int mx){ + p->zText = zBase; + p->db = db; + p->nAlloc = n; + p->mxAlloc = mx; + p->nChar = 0; + p->accError = 0; + p->printfFlags = 0; +} + +/* Allocate and initialize a new dynamic string object */ +SQLITE_API sqlite3_str *sqlite3_str_new(sqlite3 *db){ + sqlite3_str *p = sqlite3_malloc64(sizeof(*p)); + if( p ){ + sqlite3StrAccumInit(p, 0, 0, 0, + db ? db->aLimit[SQLITE_LIMIT_LENGTH] : SQLITE_MAX_LENGTH); + }else{ + p = &sqlite3OomStr; + } + return p; +} + +/* +** Print into memory obtained from sqliteMalloc(). Use the internal +** %-conversion extensions. +*/ +SQLITE_PRIVATE char *sqlite3VMPrintf(sqlite3 *db, const char *zFormat, va_list ap){ + char *z; + char zBase[SQLITE_PRINT_BUF_SIZE]; + StrAccum acc; + assert( db!=0 ); + sqlite3StrAccumInit(&acc, db, zBase, sizeof(zBase), + db->aLimit[SQLITE_LIMIT_LENGTH]); + acc.printfFlags = SQLITE_PRINTF_INTERNAL; + sqlite3_str_vappendf(&acc, zFormat, ap); + z = sqlite3StrAccumFinish(&acc); + if( acc.accError==SQLITE_NOMEM ){ + sqlite3OomFault(db); + } + return z; +} + +/* +** Print into memory obtained from sqliteMalloc(). Use the internal +** %-conversion extensions. +*/ +SQLITE_PRIVATE char *sqlite3MPrintf(sqlite3 *db, const char *zFormat, ...){ + va_list ap; + char *z; + va_start(ap, zFormat); + z = sqlite3VMPrintf(db, zFormat, ap); + va_end(ap); + return z; +} + +/* +** Print into memory obtained from sqlite3_malloc(). Omit the internal +** %-conversion extensions. +*/ +SQLITE_API char *sqlite3_vmprintf(const char *zFormat, va_list ap){ + char *z; + char zBase[SQLITE_PRINT_BUF_SIZE]; + StrAccum acc; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( zFormat==0 ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif +#ifndef SQLITE_OMIT_AUTOINIT + if( sqlite3_initialize() ) return 0; +#endif + sqlite3StrAccumInit(&acc, 0, zBase, sizeof(zBase), SQLITE_MAX_LENGTH); + sqlite3_str_vappendf(&acc, zFormat, ap); + z = sqlite3StrAccumFinish(&acc); + return z; +} + +/* +** Print into memory obtained from sqlite3_malloc()(). Omit the internal +** %-conversion extensions. +*/ +SQLITE_API char *sqlite3_mprintf(const char *zFormat, ...){ + va_list ap; + char *z; +#ifndef SQLITE_OMIT_AUTOINIT + if( sqlite3_initialize() ) return 0; +#endif + va_start(ap, zFormat); + z = sqlite3_vmprintf(zFormat, ap); + va_end(ap); + return z; +} + +/* +** sqlite3_snprintf() works like snprintf() except that it ignores the +** current locale settings. This is important for SQLite because we +** are not able to use a "," as the decimal point in place of "." as +** specified by some locales. +** +** Oops: The first two arguments of sqlite3_snprintf() are backwards +** from the snprintf() standard. Unfortunately, it is too late to change +** this without breaking compatibility, so we just have to live with the +** mistake. +** +** sqlite3_vsnprintf() is the varargs version. +*/ +SQLITE_API char *sqlite3_vsnprintf(int n, char *zBuf, const char *zFormat, va_list ap){ + StrAccum acc; + if( n<=0 ) return zBuf; +#ifdef SQLITE_ENABLE_API_ARMOR + if( zBuf==0 || zFormat==0 ) { + (void)SQLITE_MISUSE_BKPT; + if( zBuf ) zBuf[0] = 0; + return zBuf; + } +#endif + sqlite3StrAccumInit(&acc, 0, zBuf, n, 0); + sqlite3_str_vappendf(&acc, zFormat, ap); + zBuf[acc.nChar] = 0; + return zBuf; +} +SQLITE_API char *sqlite3_snprintf(int n, char *zBuf, const char *zFormat, ...){ + StrAccum acc; + va_list ap; + if( n<=0 ) return zBuf; +#ifdef SQLITE_ENABLE_API_ARMOR + if( zBuf==0 || zFormat==0 ) { + (void)SQLITE_MISUSE_BKPT; + if( zBuf ) zBuf[0] = 0; + return zBuf; + } +#endif + sqlite3StrAccumInit(&acc, 0, zBuf, n, 0); + va_start(ap,zFormat); + sqlite3_str_vappendf(&acc, zFormat, ap); + va_end(ap); + zBuf[acc.nChar] = 0; + return zBuf; +} + +/* Maximum size of an sqlite3_log() message. */ +#if defined(SQLITE_MAX_LOG_MESSAGE) + /* Leave the definition as supplied */ +#elif SQLITE_PRINT_BUF_SIZE*10>10000 +# define SQLITE_MAX_LOG_MESSAGE 10000 +#else +# define SQLITE_MAX_LOG_MESSAGE (SQLITE_PRINT_BUF_SIZE*10) +#endif + +/* +** This is the routine that actually formats the sqlite3_log() message. +** We house it in a separate routine from sqlite3_log() to avoid using +** stack space on small-stack systems when logging is disabled. +** +** sqlite3_log() must render into a static buffer. It cannot dynamically +** allocate memory because it might be called while the memory allocator +** mutex is held. +** +** sqlite3_str_vappendf() might ask for *temporary* memory allocations for +** certain format characters (%q) or for very large precisions or widths. +** Care must be taken that any sqlite3_log() calls that occur while the +** memory mutex is held do not use these mechanisms. +*/ +static void renderLogMsg(int iErrCode, const char *zFormat, va_list ap){ + StrAccum acc; /* String accumulator */ + char zMsg[SQLITE_MAX_LOG_MESSAGE]; /* Complete log message */ + + sqlite3StrAccumInit(&acc, 0, zMsg, sizeof(zMsg), 0); + sqlite3_str_vappendf(&acc, zFormat, ap); + sqlite3GlobalConfig.xLog(sqlite3GlobalConfig.pLogArg, iErrCode, + sqlite3StrAccumFinish(&acc)); +} + +/* +** Format and write a message to the log if logging is enabled. +*/ +SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...){ + va_list ap; /* Vararg list */ + if( sqlite3GlobalConfig.xLog ){ + va_start(ap, zFormat); + renderLogMsg(iErrCode, zFormat, ap); + va_end(ap); + } +} + +#if defined(SQLITE_DEBUG) || defined(SQLITE_HAVE_OS_TRACE) +/* +** A version of printf() that understands %lld. Used for debugging. +** The printf() built into some versions of windows does not understand %lld +** and segfaults if you give it a long long int. +*/ +SQLITE_PRIVATE void sqlite3DebugPrintf(const char *zFormat, ...){ + va_list ap; + StrAccum acc; + char zBuf[SQLITE_PRINT_BUF_SIZE*10]; + sqlite3StrAccumInit(&acc, 0, zBuf, sizeof(zBuf), 0); + va_start(ap,zFormat); + sqlite3_str_vappendf(&acc, zFormat, ap); + va_end(ap); + sqlite3StrAccumFinish(&acc); +#ifdef SQLITE_OS_TRACE_PROC + { + extern void SQLITE_OS_TRACE_PROC(const char *zBuf, int nBuf); + SQLITE_OS_TRACE_PROC(zBuf, sizeof(zBuf)); + } +#else + fprintf(stdout,"%s", zBuf); + fflush(stdout); +#endif +} +#endif + + +/* +** variable-argument wrapper around sqlite3_str_vappendf(). The bFlags argument +** can contain the bit SQLITE_PRINTF_INTERNAL enable internal formats. +*/ +SQLITE_API void sqlite3_str_appendf(StrAccum *p, const char *zFormat, ...){ + va_list ap; + va_start(ap,zFormat); + sqlite3_str_vappendf(p, zFormat, ap); + va_end(ap); +} + + +/***************************************************************************** +** Reference counted string/blob storage +*****************************************************************************/ + +/* +** Increase the reference count of the string by one. +** +** The input parameter is returned. +*/ +SQLITE_PRIVATE char *sqlite3RCStrRef(char *z){ + RCStr *p = (RCStr*)z; + assert( p!=0 ); + p--; + p->nRCRef++; + return z; +} + +/* +** Decrease the reference count by one. Free the string when the +** reference count reaches zero. +*/ +SQLITE_PRIVATE void sqlite3RCStrUnref(void *z){ + RCStr *p = (RCStr*)z; + assert( p!=0 ); + p--; + assert( p->nRCRef>0 ); + if( p->nRCRef>=2 ){ + p->nRCRef--; + }else{ + sqlite3_free(p); + } +} + +/* +** Create a new string that is capable of holding N bytes of text, not counting +** the zero byte at the end. The string is uninitialized. +** +** The reference count is initially 1. Call sqlite3RCStrUnref() to free the +** newly allocated string. +** +** This routine returns 0 on an OOM. +*/ +SQLITE_PRIVATE char *sqlite3RCStrNew(u64 N){ + RCStr *p = sqlite3_malloc64( N + sizeof(*p) + 1 ); + if( p==0 ) return 0; + p->nRCRef = 1; + return (char*)&p[1]; +} + +/* +** Change the size of the string so that it is able to hold N bytes. +** The string might be reallocated, so return the new allocation. +*/ +SQLITE_PRIVATE char *sqlite3RCStrResize(char *z, u64 N){ + RCStr *p = (RCStr*)z; + RCStr *pNew; + assert( p!=0 ); + p--; + assert( p->nRCRef==1 ); + pNew = sqlite3_realloc64(p, N+sizeof(RCStr)+1); + if( pNew==0 ){ + sqlite3_free(p); + return 0; + }else{ + return (char*)&pNew[1]; + } +} + +/************** End of printf.c **********************************************/ +/************** Begin file treeview.c ****************************************/ +/* +** 2015-06-08 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file contains C code to implement the TreeView debugging routines. +** These routines print a parse tree to standard output for debugging and +** analysis. +** +** The interfaces in this file is only available when compiling +** with SQLITE_DEBUG. +*/ +/* #include "sqliteInt.h" */ +#ifdef SQLITE_DEBUG + +/* +** Add a new subitem to the tree. The moreToFollow flag indicates that this +** is not the last item in the tree. +*/ +static void sqlite3TreeViewPush(TreeView **pp, u8 moreToFollow){ + TreeView *p = *pp; + if( p==0 ){ + *pp = p = sqlite3_malloc64( sizeof(*p) ); + if( p==0 ) return; + memset(p, 0, sizeof(*p)); + }else{ + p->iLevel++; + } + assert( moreToFollow==0 || moreToFollow==1 ); + if( p->iLevel<(int)sizeof(p->bLine) ) p->bLine[p->iLevel] = moreToFollow; +} + +/* +** Finished with one layer of the tree +*/ +static void sqlite3TreeViewPop(TreeView **pp){ + TreeView *p = *pp; + if( p==0 ) return; + p->iLevel--; + if( p->iLevel<0 ){ + sqlite3_free(p); + *pp = 0; + } +} + +/* +** Generate a single line of output for the tree, with a prefix that contains +** all the appropriate tree lines +*/ +SQLITE_PRIVATE void sqlite3TreeViewLine(TreeView *p, const char *zFormat, ...){ + va_list ap; + int i; + StrAccum acc; + char zBuf[1000]; + sqlite3StrAccumInit(&acc, 0, zBuf, sizeof(zBuf), 0); + if( p ){ + for(i=0; iiLevel && i<(int)sizeof(p->bLine)-1; i++){ + sqlite3_str_append(&acc, p->bLine[i] ? "| " : " ", 4); + } + sqlite3_str_append(&acc, p->bLine[i] ? "|-- " : "'-- ", 4); + } + if( zFormat!=0 ){ + va_start(ap, zFormat); + sqlite3_str_vappendf(&acc, zFormat, ap); + va_end(ap); + assert( acc.nChar>0 || acc.accError ); + sqlite3_str_append(&acc, "\n", 1); + } + sqlite3StrAccumFinish(&acc); + fprintf(stdout,"%s", zBuf); + fflush(stdout); +} + +/* +** Shorthand for starting a new tree item that consists of a single label +*/ +static void sqlite3TreeViewItem(TreeView *p, const char *zLabel,u8 moreFollows){ + sqlite3TreeViewPush(&p, moreFollows); + sqlite3TreeViewLine(p, "%s", zLabel); +} + +/* +** Show a list of Column objects in tree format. +*/ +SQLITE_PRIVATE void sqlite3TreeViewColumnList( + TreeView *pView, + const Column *aCol, + int nCol, + u8 moreToFollow +){ + int i; + sqlite3TreeViewPush(&pView, moreToFollow); + sqlite3TreeViewLine(pView, "COLUMNS"); + for(i=0; inCte==0 ) return; + if( pWith->pOuter ){ + sqlite3TreeViewLine(pView, "WITH (0x%p, pOuter=0x%p)",pWith,pWith->pOuter); + }else{ + sqlite3TreeViewLine(pView, "WITH (0x%p)", pWith); + } + if( pWith->nCte>0 ){ + sqlite3TreeViewPush(&pView, moreToFollow); + for(i=0; inCte; i++){ + StrAccum x; + char zLine[1000]; + const struct Cte *pCte = &pWith->a[i]; + sqlite3StrAccumInit(&x, 0, zLine, sizeof(zLine), 0); + sqlite3_str_appendf(&x, "%s", pCte->zName); + if( pCte->pCols && pCte->pCols->nExpr>0 ){ + char cSep = '('; + int j; + for(j=0; jpCols->nExpr; j++){ + sqlite3_str_appendf(&x, "%c%s", cSep, pCte->pCols->a[j].zEName); + cSep = ','; + } + sqlite3_str_appendf(&x, ")"); + } + if( pCte->eM10d!=M10d_Any ){ + sqlite3_str_appendf(&x, " %sMATERIALIZED", + pCte->eM10d==M10d_No ? "NOT " : ""); + } + if( pCte->pUse ){ + sqlite3_str_appendf(&x, " (pUse=0x%p, nUse=%d)", pCte->pUse, + pCte->pUse->nUse); + } + sqlite3StrAccumFinish(&x); + sqlite3TreeViewItem(pView, zLine, inCte-1); + sqlite3TreeViewSelect(pView, pCte->pSelect, 0); + sqlite3TreeViewPop(&pView); + } + sqlite3TreeViewPop(&pView); + } +} + +/* +** Generate a human-readable description of a SrcList object. +*/ +SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView *pView, const SrcList *pSrc){ + int i; + if( pSrc==0 ) return; + for(i=0; inSrc; i++){ + const SrcItem *pItem = &pSrc->a[i]; + StrAccum x; + int n = 0; + char zLine[1000]; + sqlite3StrAccumInit(&x, 0, zLine, sizeof(zLine), 0); + x.printfFlags |= SQLITE_PRINTF_INTERNAL; + sqlite3_str_appendf(&x, "{%d:*} %!S", pItem->iCursor, pItem); + if( pItem->pSTab ){ + sqlite3_str_appendf(&x, " tab=%Q nCol=%d ptr=%p used=%llx%s", + pItem->pSTab->zName, pItem->pSTab->nCol, pItem->pSTab, + pItem->colUsed, + pItem->fg.rowidUsed ? "+rowid" : ""); + } + if( (pItem->fg.jointype & (JT_LEFT|JT_RIGHT))==(JT_LEFT|JT_RIGHT) ){ + sqlite3_str_appendf(&x, " FULL-OUTER-JOIN"); + }else if( pItem->fg.jointype & JT_LEFT ){ + sqlite3_str_appendf(&x, " LEFT-JOIN"); + }else if( pItem->fg.jointype & JT_RIGHT ){ + sqlite3_str_appendf(&x, " RIGHT-JOIN"); + }else if( pItem->fg.jointype & JT_CROSS ){ + sqlite3_str_appendf(&x, " CROSS-JOIN"); + } + if( pItem->fg.jointype & JT_LTORJ ){ + sqlite3_str_appendf(&x, " LTORJ"); + } + if( pItem->fg.fromDDL ){ + sqlite3_str_appendf(&x, " DDL"); + } + if( pItem->fg.isCte ){ + static const char *aMat[] = {",MAT", "", ",NO-MAT"}; + sqlite3_str_appendf(&x, " CteUse=%d%s", + pItem->u2.pCteUse->nUse, + aMat[pItem->u2.pCteUse->eM10d]); + } + if( pItem->fg.isOn || (pItem->fg.isUsing==0 && pItem->u3.pOn!=0) ){ + sqlite3_str_appendf(&x, " isOn"); + } + if( pItem->fg.isTabFunc ) sqlite3_str_appendf(&x, " isTabFunc"); + if( pItem->fg.isCorrelated ) sqlite3_str_appendf(&x, " isCorrelated"); + if( pItem->fg.isMaterialized ) sqlite3_str_appendf(&x, " isMaterialized"); + if( pItem->fg.viaCoroutine ) sqlite3_str_appendf(&x, " viaCoroutine"); + if( pItem->fg.notCte ) sqlite3_str_appendf(&x, " notCte"); + if( pItem->fg.isNestedFrom ) sqlite3_str_appendf(&x, " isNestedFrom"); + if( pItem->fg.fixedSchema ) sqlite3_str_appendf(&x, " fixedSchema"); + if( pItem->fg.hadSchema ) sqlite3_str_appendf(&x, " hadSchema"); + if( pItem->fg.isSubquery ) sqlite3_str_appendf(&x, " isSubquery"); + + sqlite3StrAccumFinish(&x); + sqlite3TreeViewItem(pView, zLine, inSrc-1); + n = 0; + if( pItem->fg.isSubquery ) n++; + if( pItem->fg.isTabFunc ) n++; + if( pItem->fg.isUsing || pItem->u3.pOn!=0 ) n++; + if( pItem->fg.isUsing ){ + sqlite3TreeViewIdList(pView, pItem->u3.pUsing, (--n)>0, "USING"); + }else if( pItem->u3.pOn!=0 ){ + sqlite3TreeViewItem(pView, "ON", (--n)>0); + sqlite3TreeViewExpr(pView, pItem->u3.pOn, 0); + sqlite3TreeViewPop(&pView); + } + if( pItem->fg.isSubquery ){ + assert( n==1 ); + if( pItem->pSTab ){ + Table *pTab = pItem->pSTab; + sqlite3TreeViewColumnList(pView, pTab->aCol, pTab->nCol, 1); + } + assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem) ); + sqlite3TreeViewSelect(pView, pItem->u4.pSubq->pSelect, 0); + } + if( pItem->fg.isTabFunc ){ + sqlite3TreeViewExprList(pView, pItem->u1.pFuncArg, 0, "func-args:"); + } + sqlite3TreeViewPop(&pView); + } +} + +/* +** Generate a human-readable description of a Select object. +*/ +SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView *pView, const Select *p, u8 moreToFollow){ + int n = 0; + int cnt = 0; + if( p==0 ){ + sqlite3TreeViewLine(pView, "nil-SELECT"); + return; + } + sqlite3TreeViewPush(&pView, moreToFollow); + if( p->pWith ){ + sqlite3TreeViewWith(pView, p->pWith, 1); + cnt = 1; + sqlite3TreeViewPush(&pView, 1); + } + do{ + if( p->selFlags & SF_WhereBegin ){ + sqlite3TreeViewLine(pView, "sqlite3WhereBegin()"); + }else{ + sqlite3TreeViewLine(pView, + "SELECT%s%s (%u/%p) selFlags=0x%x nSelectRow=%d", + ((p->selFlags & SF_Distinct) ? " DISTINCT" : ""), + ((p->selFlags & SF_Aggregate) ? " agg_flag" : ""), + p->selId, p, p->selFlags, + (int)p->nSelectRow + ); + } + if( cnt++ ) sqlite3TreeViewPop(&pView); + if( p->pPrior ){ + n = 1000; + }else{ + n = 0; + if( p->pSrc && p->pSrc->nSrc && p->pSrc->nAlloc ) n++; + if( p->pWhere ) n++; + if( p->pGroupBy ) n++; + if( p->pHaving ) n++; + if( p->pOrderBy ) n++; + if( p->pLimit ) n++; +#ifndef SQLITE_OMIT_WINDOWFUNC + if( p->pWin ) n++; + if( p->pWinDefn ) n++; +#endif + } + if( p->pEList ){ + sqlite3TreeViewExprList(pView, p->pEList, n>0, "result-set"); + } + n--; +#ifndef SQLITE_OMIT_WINDOWFUNC + if( p->pWin ){ + Window *pX; + sqlite3TreeViewPush(&pView, (n--)>0); + sqlite3TreeViewLine(pView, "window-functions"); + for(pX=p->pWin; pX; pX=pX->pNextWin){ + sqlite3TreeViewWinFunc(pView, pX, pX->pNextWin!=0); + } + sqlite3TreeViewPop(&pView); + } +#endif + if( p->pSrc && p->pSrc->nSrc && p->pSrc->nAlloc ){ + sqlite3TreeViewPush(&pView, (n--)>0); + sqlite3TreeViewLine(pView, "FROM"); + sqlite3TreeViewSrcList(pView, p->pSrc); + sqlite3TreeViewPop(&pView); + } + if( p->pWhere ){ + sqlite3TreeViewItem(pView, "WHERE", (n--)>0); + sqlite3TreeViewExpr(pView, p->pWhere, 0); + sqlite3TreeViewPop(&pView); + } + if( p->pGroupBy ){ + sqlite3TreeViewExprList(pView, p->pGroupBy, (n--)>0, "GROUPBY"); + } + if( p->pHaving ){ + sqlite3TreeViewItem(pView, "HAVING", (n--)>0); + sqlite3TreeViewExpr(pView, p->pHaving, 0); + sqlite3TreeViewPop(&pView); + } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( p->pWinDefn ){ + Window *pX; + sqlite3TreeViewItem(pView, "WINDOW", (n--)>0); + for(pX=p->pWinDefn; pX; pX=pX->pNextWin){ + sqlite3TreeViewWindow(pView, pX, pX->pNextWin!=0); + } + sqlite3TreeViewPop(&pView); + } +#endif + if( p->pOrderBy ){ + sqlite3TreeViewExprList(pView, p->pOrderBy, (n--)>0, "ORDERBY"); + } + if( p->pLimit ){ + sqlite3TreeViewItem(pView, "LIMIT", (n--)>0); + sqlite3TreeViewExpr(pView, p->pLimit->pLeft, p->pLimit->pRight!=0); + if( p->pLimit->pRight ){ + sqlite3TreeViewItem(pView, "OFFSET", 0); + sqlite3TreeViewExpr(pView, p->pLimit->pRight, 0); + sqlite3TreeViewPop(&pView); + } + sqlite3TreeViewPop(&pView); + } + if( p->pPrior ){ + const char *zOp = "UNION"; + switch( p->op ){ + case TK_ALL: zOp = "UNION ALL"; break; + case TK_INTERSECT: zOp = "INTERSECT"; break; + case TK_EXCEPT: zOp = "EXCEPT"; break; + } + sqlite3TreeViewItem(pView, zOp, 1); + } + p = p->pPrior; + }while( p!=0 ); + sqlite3TreeViewPop(&pView); +} + +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** Generate a description of starting or stopping bounds +*/ +SQLITE_PRIVATE void sqlite3TreeViewBound( + TreeView *pView, /* View context */ + u8 eBound, /* UNBOUNDED, CURRENT, PRECEDING, FOLLOWING */ + Expr *pExpr, /* Value for PRECEDING or FOLLOWING */ + u8 moreToFollow /* True if more to follow */ +){ + switch( eBound ){ + case TK_UNBOUNDED: { + sqlite3TreeViewItem(pView, "UNBOUNDED", moreToFollow); + sqlite3TreeViewPop(&pView); + break; + } + case TK_CURRENT: { + sqlite3TreeViewItem(pView, "CURRENT", moreToFollow); + sqlite3TreeViewPop(&pView); + break; + } + case TK_PRECEDING: { + sqlite3TreeViewItem(pView, "PRECEDING", moreToFollow); + sqlite3TreeViewExpr(pView, pExpr, 0); + sqlite3TreeViewPop(&pView); + break; + } + case TK_FOLLOWING: { + sqlite3TreeViewItem(pView, "FOLLOWING", moreToFollow); + sqlite3TreeViewExpr(pView, pExpr, 0); + sqlite3TreeViewPop(&pView); + break; + } + } +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ + +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** Generate a human-readable explanation for a Window object +*/ +SQLITE_PRIVATE void sqlite3TreeViewWindow(TreeView *pView, const Window *pWin, u8 more){ + int nElement = 0; + if( pWin==0 ) return; + if( pWin->pFilter ){ + sqlite3TreeViewItem(pView, "FILTER", 1); + sqlite3TreeViewExpr(pView, pWin->pFilter, 0); + sqlite3TreeViewPop(&pView); + if( pWin->eFrmType==TK_FILTER ) return; + } + sqlite3TreeViewPush(&pView, more); + if( pWin->zName ){ + sqlite3TreeViewLine(pView, "OVER %s (%p)", pWin->zName, pWin); + }else{ + sqlite3TreeViewLine(pView, "OVER (%p)", pWin); + } + if( pWin->zBase ) nElement++; + if( pWin->pOrderBy ) nElement++; + if( pWin->eFrmType!=0 && pWin->eFrmType!=TK_FILTER ) nElement++; + if( pWin->eExclude ) nElement++; + if( pWin->zBase ){ + sqlite3TreeViewPush(&pView, (--nElement)>0); + sqlite3TreeViewLine(pView, "window: %s", pWin->zBase); + sqlite3TreeViewPop(&pView); + } + if( pWin->pPartition ){ + sqlite3TreeViewExprList(pView, pWin->pPartition, nElement>0,"PARTITION-BY"); + } + if( pWin->pOrderBy ){ + sqlite3TreeViewExprList(pView, pWin->pOrderBy, (--nElement)>0, "ORDER-BY"); + } + if( pWin->eFrmType!=0 && pWin->eFrmType!=TK_FILTER ){ + char zBuf[30]; + const char *zFrmType = "ROWS"; + if( pWin->eFrmType==TK_RANGE ) zFrmType = "RANGE"; + if( pWin->eFrmType==TK_GROUPS ) zFrmType = "GROUPS"; + sqlite3_snprintf(sizeof(zBuf),zBuf,"%s%s",zFrmType, + pWin->bImplicitFrame ? " (implied)" : ""); + sqlite3TreeViewItem(pView, zBuf, (--nElement)>0); + sqlite3TreeViewBound(pView, pWin->eStart, pWin->pStart, 1); + sqlite3TreeViewBound(pView, pWin->eEnd, pWin->pEnd, 0); + sqlite3TreeViewPop(&pView); + } + if( pWin->eExclude ){ + char zBuf[30]; + const char *zExclude; + switch( pWin->eExclude ){ + case TK_NO: zExclude = "NO OTHERS"; break; + case TK_CURRENT: zExclude = "CURRENT ROW"; break; + case TK_GROUP: zExclude = "GROUP"; break; + case TK_TIES: zExclude = "TIES"; break; + default: + sqlite3_snprintf(sizeof(zBuf),zBuf,"invalid(%d)", pWin->eExclude); + zExclude = zBuf; + break; + } + sqlite3TreeViewPush(&pView, 0); + sqlite3TreeViewLine(pView, "EXCLUDE %s", zExclude); + sqlite3TreeViewPop(&pView); + } + sqlite3TreeViewPop(&pView); +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ + +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** Generate a human-readable explanation for a Window Function object +*/ +SQLITE_PRIVATE void sqlite3TreeViewWinFunc(TreeView *pView, const Window *pWin, u8 more){ + if( pWin==0 ) return; + sqlite3TreeViewPush(&pView, more); + sqlite3TreeViewLine(pView, "WINFUNC %s(%d)", + pWin->pWFunc->zName, pWin->pWFunc->nArg); + sqlite3TreeViewWindow(pView, pWin, 0); + sqlite3TreeViewPop(&pView); +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ + +/* +** Generate a human-readable explanation of an expression tree. +*/ +SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 moreToFollow){ + const char *zBinOp = 0; /* Binary operator */ + const char *zUniOp = 0; /* Unary operator */ + char zFlgs[200]; + sqlite3TreeViewPush(&pView, moreToFollow); + if( pExpr==0 ){ + sqlite3TreeViewLine(pView, "nil"); + sqlite3TreeViewPop(&pView); + return; + } + if( pExpr->flags || pExpr->affExpr || pExpr->vvaFlags || pExpr->pAggInfo ){ + StrAccum x; + sqlite3StrAccumInit(&x, 0, zFlgs, sizeof(zFlgs), 0); + sqlite3_str_appendf(&x, " fg.af=%x.%c", + pExpr->flags, pExpr->affExpr ? pExpr->affExpr : 'n'); + if( ExprHasProperty(pExpr, EP_OuterON) ){ + sqlite3_str_appendf(&x, " outer.iJoin=%d", pExpr->w.iJoin); + } + if( ExprHasProperty(pExpr, EP_InnerON) ){ + sqlite3_str_appendf(&x, " inner.iJoin=%d", pExpr->w.iJoin); + } + if( ExprHasProperty(pExpr, EP_FromDDL) ){ + sqlite3_str_appendf(&x, " DDL"); + } + if( ExprHasVVAProperty(pExpr, EP_Immutable) ){ + sqlite3_str_appendf(&x, " IMMUTABLE"); + } + if( pExpr->pAggInfo!=0 ){ + sqlite3_str_appendf(&x, " agg-column[%d]", pExpr->iAgg); + } + sqlite3StrAccumFinish(&x); + }else{ + zFlgs[0] = 0; + } + switch( pExpr->op ){ + case TK_AGG_COLUMN: { + sqlite3TreeViewLine(pView, "AGG{%d:%d}%s", + pExpr->iTable, pExpr->iColumn, zFlgs); + break; + } + case TK_COLUMN: { + if( pExpr->iTable<0 ){ + /* This only happens when coding check constraints */ + char zOp2[16]; + if( pExpr->op2 ){ + sqlite3_snprintf(sizeof(zOp2),zOp2," op2=0x%02x",pExpr->op2); + }else{ + zOp2[0] = 0; + } + sqlite3TreeViewLine(pView, "COLUMN(%d)%s%s", + pExpr->iColumn, zFlgs, zOp2); + }else{ + assert( ExprUseYTab(pExpr) ); + sqlite3TreeViewLine(pView, "{%d:%d} pTab=%p%s", + pExpr->iTable, pExpr->iColumn, + pExpr->y.pTab, zFlgs); + } + if( ExprHasProperty(pExpr, EP_FixedCol) ){ + sqlite3TreeViewExpr(pView, pExpr->pLeft, 0); + } + break; + } + case TK_INTEGER: { + if( pExpr->flags & EP_IntValue ){ + sqlite3TreeViewLine(pView, "%d", pExpr->u.iValue); + }else{ + sqlite3TreeViewLine(pView, "%s", pExpr->u.zToken); + } + break; + } +#ifndef SQLITE_OMIT_FLOATING_POINT + case TK_FLOAT: { + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + sqlite3TreeViewLine(pView,"%s", pExpr->u.zToken); + break; + } +#endif + case TK_STRING: { + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + sqlite3TreeViewLine(pView,"%Q", pExpr->u.zToken); + break; + } + case TK_NULL: { + sqlite3TreeViewLine(pView,"NULL"); + break; + } + case TK_TRUEFALSE: { + sqlite3TreeViewLine(pView,"%s%s", + sqlite3ExprTruthValue(pExpr) ? "TRUE" : "FALSE", zFlgs); + break; + } +#ifndef SQLITE_OMIT_BLOB_LITERAL + case TK_BLOB: { + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + sqlite3TreeViewLine(pView,"%s", pExpr->u.zToken); + break; + } +#endif + case TK_VARIABLE: { + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + sqlite3TreeViewLine(pView,"VARIABLE(%s,%d)", + pExpr->u.zToken, pExpr->iColumn); + break; + } + case TK_REGISTER: { + sqlite3TreeViewLine(pView,"REGISTER(%d)", pExpr->iTable); + break; + } + case TK_ID: { + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + sqlite3TreeViewLine(pView,"ID \"%w\"", pExpr->u.zToken); + break; + } +#ifndef SQLITE_OMIT_CAST + case TK_CAST: { + /* Expressions of the form: CAST(pLeft AS token) */ + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + sqlite3TreeViewLine(pView,"CAST %Q", pExpr->u.zToken); + sqlite3TreeViewExpr(pView, pExpr->pLeft, 0); + break; + } +#endif /* SQLITE_OMIT_CAST */ + case TK_LT: zBinOp = "LT"; break; + case TK_LE: zBinOp = "LE"; break; + case TK_GT: zBinOp = "GT"; break; + case TK_GE: zBinOp = "GE"; break; + case TK_NE: zBinOp = "NE"; break; + case TK_EQ: zBinOp = "EQ"; break; + case TK_IS: zBinOp = "IS"; break; + case TK_ISNOT: zBinOp = "ISNOT"; break; + case TK_AND: zBinOp = "AND"; break; + case TK_OR: zBinOp = "OR"; break; + case TK_PLUS: zBinOp = "ADD"; break; + case TK_STAR: zBinOp = "MUL"; break; + case TK_MINUS: zBinOp = "SUB"; break; + case TK_REM: zBinOp = "REM"; break; + case TK_BITAND: zBinOp = "BITAND"; break; + case TK_BITOR: zBinOp = "BITOR"; break; + case TK_SLASH: zBinOp = "DIV"; break; + case TK_LSHIFT: zBinOp = "LSHIFT"; break; + case TK_RSHIFT: zBinOp = "RSHIFT"; break; + case TK_CONCAT: zBinOp = "CONCAT"; break; + case TK_DOT: zBinOp = "DOT"; break; + case TK_LIMIT: zBinOp = "LIMIT"; break; + + case TK_UMINUS: zUniOp = "UMINUS"; break; + case TK_UPLUS: zUniOp = "UPLUS"; break; + case TK_BITNOT: zUniOp = "BITNOT"; break; + case TK_NOT: zUniOp = "NOT"; break; + case TK_ISNULL: zUniOp = "ISNULL"; break; + case TK_NOTNULL: zUniOp = "NOTNULL"; break; + + case TK_TRUTH: { + int x; + const char *azOp[] = { + "IS-FALSE", "IS-TRUE", "IS-NOT-FALSE", "IS-NOT-TRUE" + }; + assert( pExpr->op2==TK_IS || pExpr->op2==TK_ISNOT ); + assert( pExpr->pRight ); + assert( sqlite3ExprSkipCollateAndLikely(pExpr->pRight)->op + == TK_TRUEFALSE ); + x = (pExpr->op2==TK_ISNOT)*2 + sqlite3ExprTruthValue(pExpr->pRight); + zUniOp = azOp[x]; + break; + } + + case TK_SPAN: { + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + sqlite3TreeViewLine(pView, "SPAN %Q", pExpr->u.zToken); + sqlite3TreeViewExpr(pView, pExpr->pLeft, 0); + break; + } + + case TK_COLLATE: { + /* COLLATE operators without the EP_Collate flag are intended to + ** emulate collation associated with a table column. These show + ** up in the treeview output as "SOFT-COLLATE". Explicit COLLATE + ** operators that appear in the original SQL always have the + ** EP_Collate bit set and appear in treeview output as just "COLLATE" */ + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + sqlite3TreeViewLine(pView, "%sCOLLATE %Q%s", + !ExprHasProperty(pExpr, EP_Collate) ? "SOFT-" : "", + pExpr->u.zToken, zFlgs); + sqlite3TreeViewExpr(pView, pExpr->pLeft, 0); + break; + } + + case TK_AGG_FUNCTION: + case TK_FUNCTION: { + ExprList *pFarg; /* List of function arguments */ + Window *pWin; + if( ExprHasProperty(pExpr, EP_TokenOnly) ){ + pFarg = 0; + pWin = 0; + }else{ + assert( ExprUseXList(pExpr) ); + pFarg = pExpr->x.pList; +#ifndef SQLITE_OMIT_WINDOWFUNC + pWin = IsWindowFunc(pExpr) ? pExpr->y.pWin : 0; +#else + pWin = 0; +#endif + } + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + if( pExpr->op==TK_AGG_FUNCTION ){ + sqlite3TreeViewLine(pView, "AGG_FUNCTION%d %Q%s agg=%d[%d]/%p", + pExpr->op2, pExpr->u.zToken, zFlgs, + pExpr->pAggInfo ? pExpr->pAggInfo->selId : 0, + pExpr->iAgg, pExpr->pAggInfo); + }else if( pExpr->op2!=0 ){ + const char *zOp2; + char zBuf[8]; + sqlite3_snprintf(sizeof(zBuf),zBuf,"0x%02x",pExpr->op2); + zOp2 = zBuf; + if( pExpr->op2==NC_IsCheck ) zOp2 = "NC_IsCheck"; + if( pExpr->op2==NC_IdxExpr ) zOp2 = "NC_IdxExpr"; + if( pExpr->op2==NC_PartIdx ) zOp2 = "NC_PartIdx"; + if( pExpr->op2==NC_GenCol ) zOp2 = "NC_GenCol"; + sqlite3TreeViewLine(pView, "FUNCTION %Q%s op2=%s", + pExpr->u.zToken, zFlgs, zOp2); + }else{ + sqlite3TreeViewLine(pView, "FUNCTION %Q%s", pExpr->u.zToken, zFlgs); + } + if( pFarg ){ + sqlite3TreeViewExprList(pView, pFarg, pWin!=0 || pExpr->pLeft, 0); + if( pExpr->pLeft ){ + Expr *pOB = pExpr->pLeft; + assert( pOB->op==TK_ORDER ); + assert( ExprUseXList(pOB) ); + sqlite3TreeViewExprList(pView, pOB->x.pList, pWin!=0, "ORDERBY"); + } + } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pWin ){ + sqlite3TreeViewWindow(pView, pWin, 0); + } +#endif + break; + } + case TK_ORDER: { + sqlite3TreeViewExprList(pView, pExpr->x.pList, 0, "ORDERBY"); + break; + } +#ifndef SQLITE_OMIT_SUBQUERY + case TK_EXISTS: { + assert( ExprUseXSelect(pExpr) ); + sqlite3TreeViewLine(pView, "EXISTS-expr flags=0x%x", pExpr->flags); + sqlite3TreeViewSelect(pView, pExpr->x.pSelect, 0); + break; + } + case TK_SELECT: { + assert( ExprUseXSelect(pExpr) ); + sqlite3TreeViewLine(pView, "subquery-expr flags=0x%x", pExpr->flags); + sqlite3TreeViewSelect(pView, pExpr->x.pSelect, 0); + break; + } + case TK_IN: { + sqlite3_str *pStr = sqlite3_str_new(0); + char *z; + sqlite3_str_appendf(pStr, "IN flags=0x%x", pExpr->flags); + if( pExpr->iTable ) sqlite3_str_appendf(pStr, " iTable=%d",pExpr->iTable); + if( ExprHasProperty(pExpr, EP_Subrtn) ){ + sqlite3_str_appendf(pStr, " subrtn(%d,%d)", + pExpr->y.sub.regReturn, pExpr->y.sub.iAddr); + } + z = sqlite3_str_finish(pStr); + sqlite3TreeViewLine(pView, z); + sqlite3_free(z); + sqlite3TreeViewExpr(pView, pExpr->pLeft, 1); + if( ExprUseXSelect(pExpr) ){ + sqlite3TreeViewSelect(pView, pExpr->x.pSelect, 0); + }else{ + sqlite3TreeViewExprList(pView, pExpr->x.pList, 0, 0); + } + break; + } +#endif /* SQLITE_OMIT_SUBQUERY */ + + /* + ** x BETWEEN y AND z + ** + ** This is equivalent to + ** + ** x>=y AND x<=z + ** + ** X is stored in pExpr->pLeft. + ** Y is stored in pExpr->pList->a[0].pExpr. + ** Z is stored in pExpr->pList->a[1].pExpr. + */ + case TK_BETWEEN: { + const Expr *pX, *pY, *pZ; + pX = pExpr->pLeft; + assert( ExprUseXList(pExpr) ); + assert( pExpr->x.pList->nExpr==2 ); + pY = pExpr->x.pList->a[0].pExpr; + pZ = pExpr->x.pList->a[1].pExpr; + sqlite3TreeViewLine(pView, "BETWEEN%s", zFlgs); + sqlite3TreeViewExpr(pView, pX, 1); + sqlite3TreeViewExpr(pView, pY, 1); + sqlite3TreeViewExpr(pView, pZ, 0); + break; + } + case TK_TRIGGER: { + /* If the opcode is TK_TRIGGER, then the expression is a reference + ** to a column in the new.* or old.* pseudo-tables available to + ** trigger programs. In this case Expr.iTable is set to 1 for the + ** new.* pseudo-table, or 0 for the old.* pseudo-table. Expr.iColumn + ** is set to the column of the pseudo-table to read, or to -1 to + ** read the rowid field. + */ + sqlite3TreeViewLine(pView, "%s(%d)", + pExpr->iTable ? "NEW" : "OLD", pExpr->iColumn); + break; + } + case TK_CASE: { + sqlite3TreeViewLine(pView, "CASE"); + sqlite3TreeViewExpr(pView, pExpr->pLeft, 1); + assert( ExprUseXList(pExpr) ); + sqlite3TreeViewExprList(pView, pExpr->x.pList, 0, 0); + break; + } +#ifndef SQLITE_OMIT_TRIGGER + case TK_RAISE: { + const char *zType = "unk"; + switch( pExpr->affExpr ){ + case OE_Rollback: zType = "rollback"; break; + case OE_Abort: zType = "abort"; break; + case OE_Fail: zType = "fail"; break; + case OE_Ignore: zType = "ignore"; break; + } + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + sqlite3TreeViewLine(pView, "RAISE %s", zType); + sqlite3TreeViewExpr(pView, pExpr->pLeft, 0); + break; + } +#endif + case TK_MATCH: { + sqlite3TreeViewLine(pView, "MATCH {%d:%d}%s", + pExpr->iTable, pExpr->iColumn, zFlgs); + sqlite3TreeViewExpr(pView, pExpr->pRight, 0); + break; + } + case TK_VECTOR: { + char *z = sqlite3_mprintf("VECTOR%s",zFlgs); + assert( ExprUseXList(pExpr) ); + sqlite3TreeViewBareExprList(pView, pExpr->x.pList, z); + sqlite3_free(z); + break; + } + case TK_SELECT_COLUMN: { + sqlite3TreeViewLine(pView, "SELECT-COLUMN %d of [0..%d]%s", + pExpr->iColumn, pExpr->iTable-1, + pExpr->pRight==pExpr->pLeft ? " (SELECT-owner)" : ""); + assert( ExprUseXSelect(pExpr->pLeft) ); + sqlite3TreeViewSelect(pView, pExpr->pLeft->x.pSelect, 0); + break; + } + case TK_IF_NULL_ROW: { + sqlite3TreeViewLine(pView, "IF-NULL-ROW %d", pExpr->iTable); + sqlite3TreeViewExpr(pView, pExpr->pLeft, 0); + break; + } + case TK_ERROR: { + Expr tmp; + sqlite3TreeViewLine(pView, "ERROR"); + tmp = *pExpr; + tmp.op = pExpr->op2; + sqlite3TreeViewExpr(pView, &tmp, 0); + break; + } + case TK_ROW: { + if( pExpr->iColumn<=0 ){ + sqlite3TreeViewLine(pView, "First FROM table rowid"); + }else{ + sqlite3TreeViewLine(pView, "First FROM table column %d", + pExpr->iColumn-1); + } + break; + } + default: { + sqlite3TreeViewLine(pView, "op=%d", pExpr->op); + break; + } + } + if( zBinOp ){ + sqlite3TreeViewLine(pView, "%s%s", zBinOp, zFlgs); + sqlite3TreeViewExpr(pView, pExpr->pLeft, 1); + sqlite3TreeViewExpr(pView, pExpr->pRight, 0); + }else if( zUniOp ){ + sqlite3TreeViewLine(pView, "%s%s", zUniOp, zFlgs); + sqlite3TreeViewExpr(pView, pExpr->pLeft, 0); + } + sqlite3TreeViewPop(&pView); +} + + +/* +** Generate a human-readable explanation of an expression list. +*/ +SQLITE_PRIVATE void sqlite3TreeViewBareExprList( + TreeView *pView, + const ExprList *pList, + const char *zLabel +){ + if( zLabel==0 || zLabel[0]==0 ) zLabel = "LIST"; + if( pList==0 ){ + sqlite3TreeViewLine(pView, "%s (empty)", zLabel); + }else{ + int i; + sqlite3TreeViewLine(pView, "%s", zLabel); + for(i=0; inExpr; i++){ + int j = pList->a[i].u.x.iOrderByCol; + u8 sortFlags = pList->a[i].fg.sortFlags; + char *zName = pList->a[i].zEName; + int moreToFollow = inExpr - 1; + if( j || zName || sortFlags ){ + sqlite3TreeViewPush(&pView, moreToFollow); + moreToFollow = 0; + sqlite3TreeViewLine(pView, 0); + if( zName ){ + switch( pList->a[i].fg.eEName ){ + default: + fprintf(stdout, "AS %s ", zName); + break; + case ENAME_TAB: + fprintf(stdout, "TABLE-ALIAS-NAME(\"%s\") ", zName); + if( pList->a[i].fg.bUsed ) fprintf(stdout, "(used) "); + if( pList->a[i].fg.bUsingTerm ) fprintf(stdout, "(USING-term) "); + if( pList->a[i].fg.bNoExpand ) fprintf(stdout, "(NoExpand) "); + break; + case ENAME_SPAN: + fprintf(stdout, "SPAN(\"%s\") ", zName); + break; + } + } + if( j ){ + fprintf(stdout, "iOrderByCol=%d ", j); + } + if( sortFlags & KEYINFO_ORDER_DESC ){ + fprintf(stdout, "DESC "); + }else if( sortFlags & KEYINFO_ORDER_BIGNULL ){ + fprintf(stdout, "NULLS-LAST"); + } + fprintf(stdout, "\n"); + fflush(stdout); + } + sqlite3TreeViewExpr(pView, pList->a[i].pExpr, moreToFollow); + if( j || zName || sortFlags ){ + sqlite3TreeViewPop(&pView); + } + } + } +} +SQLITE_PRIVATE void sqlite3TreeViewExprList( + TreeView *pView, + const ExprList *pList, + u8 moreToFollow, + const char *zLabel +){ + sqlite3TreeViewPush(&pView, moreToFollow); + sqlite3TreeViewBareExprList(pView, pList, zLabel); + sqlite3TreeViewPop(&pView); +} + +/* +** Generate a human-readable explanation of an id-list. +*/ +SQLITE_PRIVATE void sqlite3TreeViewBareIdList( + TreeView *pView, + const IdList *pList, + const char *zLabel +){ + if( zLabel==0 || zLabel[0]==0 ) zLabel = "LIST"; + if( pList==0 ){ + sqlite3TreeViewLine(pView, "%s (empty)", zLabel); + }else{ + int i; + sqlite3TreeViewLine(pView, "%s", zLabel); + for(i=0; inId; i++){ + char *zName = pList->a[i].zName; + int moreToFollow = inId - 1; + if( zName==0 ) zName = "(null)"; + sqlite3TreeViewPush(&pView, moreToFollow); + sqlite3TreeViewLine(pView, 0); + fprintf(stdout, "%s\n", zName); + sqlite3TreeViewPop(&pView); + } + } +} +SQLITE_PRIVATE void sqlite3TreeViewIdList( + TreeView *pView, + const IdList *pList, + u8 moreToFollow, + const char *zLabel +){ + sqlite3TreeViewPush(&pView, moreToFollow); + sqlite3TreeViewBareIdList(pView, pList, zLabel); + sqlite3TreeViewPop(&pView); +} + +/* +** Generate a human-readable explanation of a list of Upsert objects +*/ +SQLITE_PRIVATE void sqlite3TreeViewUpsert( + TreeView *pView, + const Upsert *pUpsert, + u8 moreToFollow +){ + if( pUpsert==0 ) return; + sqlite3TreeViewPush(&pView, moreToFollow); + while( pUpsert ){ + int n; + sqlite3TreeViewPush(&pView, pUpsert->pNextUpsert!=0 || moreToFollow); + sqlite3TreeViewLine(pView, "ON CONFLICT DO %s", + pUpsert->isDoUpdate ? "UPDATE" : "NOTHING"); + n = (pUpsert->pUpsertSet!=0) + (pUpsert->pUpsertWhere!=0); + sqlite3TreeViewExprList(pView, pUpsert->pUpsertTarget, (n--)>0, "TARGET"); + sqlite3TreeViewExprList(pView, pUpsert->pUpsertSet, (n--)>0, "SET"); + if( pUpsert->pUpsertWhere ){ + sqlite3TreeViewItem(pView, "WHERE", (n--)>0); + sqlite3TreeViewExpr(pView, pUpsert->pUpsertWhere, 0); + sqlite3TreeViewPop(&pView); + } + sqlite3TreeViewPop(&pView); + pUpsert = pUpsert->pNextUpsert; + } + sqlite3TreeViewPop(&pView); +} + +#if TREETRACE_ENABLED +/* +** Generate a human-readable diagram of the data structure that go +** into generating an DELETE statement. +*/ +SQLITE_PRIVATE void sqlite3TreeViewDelete( + const With *pWith, + const SrcList *pTabList, + const Expr *pWhere, + const ExprList *pOrderBy, + const Expr *pLimit, + const Trigger *pTrigger +){ + int n = 0; + TreeView *pView = 0; + sqlite3TreeViewPush(&pView, 0); + sqlite3TreeViewLine(pView, "DELETE"); + if( pWith ) n++; + if( pTabList ) n++; + if( pWhere ) n++; + if( pOrderBy ) n++; + if( pLimit ) n++; + if( pTrigger ) n++; + if( pWith ){ + sqlite3TreeViewPush(&pView, (--n)>0); + sqlite3TreeViewWith(pView, pWith, 0); + sqlite3TreeViewPop(&pView); + } + if( pTabList ){ + sqlite3TreeViewPush(&pView, (--n)>0); + sqlite3TreeViewLine(pView, "FROM"); + sqlite3TreeViewSrcList(pView, pTabList); + sqlite3TreeViewPop(&pView); + } + if( pWhere ){ + sqlite3TreeViewPush(&pView, (--n)>0); + sqlite3TreeViewLine(pView, "WHERE"); + sqlite3TreeViewExpr(pView, pWhere, 0); + sqlite3TreeViewPop(&pView); + } + if( pOrderBy ){ + sqlite3TreeViewExprList(pView, pOrderBy, (--n)>0, "ORDER-BY"); + } + if( pLimit ){ + sqlite3TreeViewPush(&pView, (--n)>0); + sqlite3TreeViewLine(pView, "LIMIT"); + sqlite3TreeViewExpr(pView, pLimit, 0); + sqlite3TreeViewPop(&pView); + } + if( pTrigger ){ + sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1); + } + sqlite3TreeViewPop(&pView); +} +#endif /* TREETRACE_ENABLED */ + +#if TREETRACE_ENABLED +/* +** Generate a human-readable diagram of the data structure that go +** into generating an INSERT statement. +*/ +SQLITE_PRIVATE void sqlite3TreeViewInsert( + const With *pWith, + const SrcList *pTabList, + const IdList *pColumnList, + const Select *pSelect, + const ExprList *pExprList, + int onError, + const Upsert *pUpsert, + const Trigger *pTrigger +){ + TreeView *pView = 0; + int n = 0; + const char *zLabel = "INSERT"; + switch( onError ){ + case OE_Replace: zLabel = "REPLACE"; break; + case OE_Ignore: zLabel = "INSERT OR IGNORE"; break; + case OE_Rollback: zLabel = "INSERT OR ROLLBACK"; break; + case OE_Abort: zLabel = "INSERT OR ABORT"; break; + case OE_Fail: zLabel = "INSERT OR FAIL"; break; + } + sqlite3TreeViewPush(&pView, 0); + sqlite3TreeViewLine(pView, zLabel); + if( pWith ) n++; + if( pTabList ) n++; + if( pColumnList ) n++; + if( pSelect ) n++; + if( pExprList ) n++; + if( pUpsert ) n++; + if( pTrigger ) n++; + if( pWith ){ + sqlite3TreeViewPush(&pView, (--n)>0); + sqlite3TreeViewWith(pView, pWith, 0); + sqlite3TreeViewPop(&pView); + } + if( pTabList ){ + sqlite3TreeViewPush(&pView, (--n)>0); + sqlite3TreeViewLine(pView, "INTO"); + sqlite3TreeViewSrcList(pView, pTabList); + sqlite3TreeViewPop(&pView); + } + if( pColumnList ){ + sqlite3TreeViewIdList(pView, pColumnList, (--n)>0, "COLUMNS"); + } + if( pSelect ){ + sqlite3TreeViewPush(&pView, (--n)>0); + sqlite3TreeViewLine(pView, "DATA-SOURCE"); + sqlite3TreeViewSelect(pView, pSelect, 0); + sqlite3TreeViewPop(&pView); + } + if( pExprList ){ + sqlite3TreeViewExprList(pView, pExprList, (--n)>0, "VALUES"); + } + if( pUpsert ){ + sqlite3TreeViewPush(&pView, (--n)>0); + sqlite3TreeViewLine(pView, "UPSERT"); + sqlite3TreeViewUpsert(pView, pUpsert, 0); + sqlite3TreeViewPop(&pView); + } + if( pTrigger ){ + sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1); + } + sqlite3TreeViewPop(&pView); +} +#endif /* TREETRACE_ENABLED */ + +#if TREETRACE_ENABLED +/* +** Generate a human-readable diagram of the data structure that go +** into generating an UPDATE statement. +*/ +SQLITE_PRIVATE void sqlite3TreeViewUpdate( + const With *pWith, + const SrcList *pTabList, + const ExprList *pChanges, + const Expr *pWhere, + int onError, + const ExprList *pOrderBy, + const Expr *pLimit, + const Upsert *pUpsert, + const Trigger *pTrigger +){ + int n = 0; + TreeView *pView = 0; + const char *zLabel = "UPDATE"; + switch( onError ){ + case OE_Replace: zLabel = "UPDATE OR REPLACE"; break; + case OE_Ignore: zLabel = "UPDATE OR IGNORE"; break; + case OE_Rollback: zLabel = "UPDATE OR ROLLBACK"; break; + case OE_Abort: zLabel = "UPDATE OR ABORT"; break; + case OE_Fail: zLabel = "UPDATE OR FAIL"; break; + } + sqlite3TreeViewPush(&pView, 0); + sqlite3TreeViewLine(pView, zLabel); + if( pWith ) n++; + if( pTabList ) n++; + if( pChanges ) n++; + if( pWhere ) n++; + if( pOrderBy ) n++; + if( pLimit ) n++; + if( pUpsert ) n++; + if( pTrigger ) n++; + if( pWith ){ + sqlite3TreeViewPush(&pView, (--n)>0); + sqlite3TreeViewWith(pView, pWith, 0); + sqlite3TreeViewPop(&pView); + } + if( pTabList ){ + sqlite3TreeViewPush(&pView, (--n)>0); + sqlite3TreeViewLine(pView, "FROM"); + sqlite3TreeViewSrcList(pView, pTabList); + sqlite3TreeViewPop(&pView); + } + if( pChanges ){ + sqlite3TreeViewExprList(pView, pChanges, (--n)>0, "SET"); + } + if( pWhere ){ + sqlite3TreeViewPush(&pView, (--n)>0); + sqlite3TreeViewLine(pView, "WHERE"); + sqlite3TreeViewExpr(pView, pWhere, 0); + sqlite3TreeViewPop(&pView); + } + if( pOrderBy ){ + sqlite3TreeViewExprList(pView, pOrderBy, (--n)>0, "ORDER-BY"); + } + if( pLimit ){ + sqlite3TreeViewPush(&pView, (--n)>0); + sqlite3TreeViewLine(pView, "LIMIT"); + sqlite3TreeViewExpr(pView, pLimit, 0); + sqlite3TreeViewPop(&pView); + } + if( pUpsert ){ + sqlite3TreeViewPush(&pView, (--n)>0); + sqlite3TreeViewLine(pView, "UPSERT"); + sqlite3TreeViewUpsert(pView, pUpsert, 0); + sqlite3TreeViewPop(&pView); + } + if( pTrigger ){ + sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1); + } + sqlite3TreeViewPop(&pView); +} +#endif /* TREETRACE_ENABLED */ + +#ifndef SQLITE_OMIT_TRIGGER +/* +** Show a human-readable graph of a TriggerStep +*/ +SQLITE_PRIVATE void sqlite3TreeViewTriggerStep( + TreeView *pView, + const TriggerStep *pStep, + u8 moreToFollow, + u8 showFullList +){ + int cnt = 0; + if( pStep==0 ) return; + sqlite3TreeViewPush(&pView, + moreToFollow || (showFullList && pStep->pNext!=0)); + do{ + if( cnt++ && pStep->pNext==0 ){ + sqlite3TreeViewPop(&pView); + sqlite3TreeViewPush(&pView, 0); + } + sqlite3TreeViewLine(pView, "%s", pStep->zSpan ? pStep->zSpan : "RETURNING"); + }while( showFullList && (pStep = pStep->pNext)!=0 ); + sqlite3TreeViewPop(&pView); +} + +/* +** Show a human-readable graph of a Trigger +*/ +SQLITE_PRIVATE void sqlite3TreeViewTrigger( + TreeView *pView, + const Trigger *pTrigger, + u8 moreToFollow, + u8 showFullList +){ + int cnt = 0; + if( pTrigger==0 ) return; + sqlite3TreeViewPush(&pView, + moreToFollow || (showFullList && pTrigger->pNext!=0)); + do{ + if( cnt++ && pTrigger->pNext==0 ){ + sqlite3TreeViewPop(&pView); + sqlite3TreeViewPush(&pView, 0); + } + sqlite3TreeViewLine(pView, "TRIGGER %s", pTrigger->zName); + sqlite3TreeViewPush(&pView, 0); + sqlite3TreeViewTriggerStep(pView, pTrigger->step_list, 0, 1); + sqlite3TreeViewPop(&pView); + }while( showFullList && (pTrigger = pTrigger->pNext)!=0 ); + sqlite3TreeViewPop(&pView); +} +#endif /* SQLITE_OMIT_TRIGGER */ + + +/* +** These simplified versions of the tree-view routines omit unnecessary +** parameters. These variants are intended to be used from a symbolic +** debugger, such as "gdb", during interactive debugging sessions. +** +** This routines are given external linkage so that they will always be +** accessible to the debugging, and to avoid warnings about unused +** functions. But these routines only exist in debugging builds, so they +** do not contaminate the interface. +** +** See Also: +** +** sqlite3ShowWhereTerm() in where.c +*/ +SQLITE_PRIVATE void sqlite3ShowExpr(const Expr *p){ sqlite3TreeViewExpr(0,p,0); } +SQLITE_PRIVATE void sqlite3ShowExprList(const ExprList *p){ sqlite3TreeViewExprList(0,p,0,0);} +SQLITE_PRIVATE void sqlite3ShowIdList(const IdList *p){ sqlite3TreeViewIdList(0,p,0,0); } +SQLITE_PRIVATE void sqlite3ShowSrcList(const SrcList *p){ sqlite3TreeViewSrcList(0,p); } +SQLITE_PRIVATE void sqlite3ShowSelect(const Select *p){ sqlite3TreeViewSelect(0,p,0); } +SQLITE_PRIVATE void sqlite3ShowWith(const With *p){ sqlite3TreeViewWith(0,p,0); } +SQLITE_PRIVATE void sqlite3ShowUpsert(const Upsert *p){ sqlite3TreeViewUpsert(0,p,0); } +#ifndef SQLITE_OMIT_TRIGGER +SQLITE_PRIVATE void sqlite3ShowTriggerStep(const TriggerStep *p){ + sqlite3TreeViewTriggerStep(0,p,0,0); +} +SQLITE_PRIVATE void sqlite3ShowTriggerStepList(const TriggerStep *p){ + sqlite3TreeViewTriggerStep(0,p,0,1); +} +SQLITE_PRIVATE void sqlite3ShowTrigger(const Trigger *p){ sqlite3TreeViewTrigger(0,p,0,0); } +SQLITE_PRIVATE void sqlite3ShowTriggerList(const Trigger *p){ sqlite3TreeViewTrigger(0,p,0,1);} +#endif +#ifndef SQLITE_OMIT_WINDOWFUNC +SQLITE_PRIVATE void sqlite3ShowWindow(const Window *p){ sqlite3TreeViewWindow(0,p,0); } +SQLITE_PRIVATE void sqlite3ShowWinFunc(const Window *p){ sqlite3TreeViewWinFunc(0,p,0); } +#endif + +#endif /* SQLITE_DEBUG */ + +/************** End of treeview.c ********************************************/ +/************** Begin file random.c ******************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code to implement a pseudo-random number +** generator (PRNG) for SQLite. +** +** Random numbers are used by some of the database backends in order +** to generate random integer keys for tables or random filenames. +*/ +/* #include "sqliteInt.h" */ + + +/* All threads share a single random number generator. +** This structure is the current state of the generator. +*/ +static SQLITE_WSD struct sqlite3PrngType { + u32 s[16]; /* 64 bytes of chacha20 state */ + u8 out[64]; /* Output bytes */ + u8 n; /* Output bytes remaining */ +} sqlite3Prng; + + +/* The RFC-7539 ChaCha20 block function +*/ +#define ROTL(a,b) (((a) << (b)) | ((a) >> (32 - (b)))) +#define QR(a, b, c, d) ( \ + a += b, d ^= a, d = ROTL(d,16), \ + c += d, b ^= c, b = ROTL(b,12), \ + a += b, d ^= a, d = ROTL(d, 8), \ + c += d, b ^= c, b = ROTL(b, 7)) +static void chacha_block(u32 *out, const u32 *in){ + int i; + u32 x[16]; + memcpy(x, in, 64); + for(i=0; i<10; i++){ + QR(x[0], x[4], x[ 8], x[12]); + QR(x[1], x[5], x[ 9], x[13]); + QR(x[2], x[6], x[10], x[14]); + QR(x[3], x[7], x[11], x[15]); + QR(x[0], x[5], x[10], x[15]); + QR(x[1], x[6], x[11], x[12]); + QR(x[2], x[7], x[ 8], x[13]); + QR(x[3], x[4], x[ 9], x[14]); + } + for(i=0; i<16; i++) out[i] = x[i]+in[i]; +} + +/* +** Return N random bytes. +*/ +SQLITE_API void sqlite3_randomness(int N, void *pBuf){ + unsigned char *zBuf = pBuf; + + /* The "wsdPrng" macro will resolve to the pseudo-random number generator + ** state vector. If writable static data is unsupported on the target, + ** we have to locate the state vector at run-time. In the more common + ** case where writable static data is supported, wsdPrng can refer directly + ** to the "sqlite3Prng" state vector declared above. + */ +#ifdef SQLITE_OMIT_WSD + struct sqlite3PrngType *p = &GLOBAL(struct sqlite3PrngType, sqlite3Prng); +# define wsdPrng p[0] +#else +# define wsdPrng sqlite3Prng +#endif + +#if SQLITE_THREADSAFE + sqlite3_mutex *mutex; +#endif + +#ifndef SQLITE_OMIT_AUTOINIT + if( sqlite3_initialize() ) return; +#endif + +#if SQLITE_THREADSAFE + mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG); +#endif + + sqlite3_mutex_enter(mutex); + if( N<=0 || pBuf==0 ){ + wsdPrng.s[0] = 0; + sqlite3_mutex_leave(mutex); + return; + } + + /* Initialize the state of the random number generator once, + ** the first time this routine is called. + */ + if( wsdPrng.s[0]==0 ){ + sqlite3_vfs *pVfs = sqlite3_vfs_find(0); + static const u32 chacha20_init[] = { + 0x61707865, 0x3320646e, 0x79622d32, 0x6b206574 + }; + memcpy(&wsdPrng.s[0], chacha20_init, 16); + if( NEVER(pVfs==0) ){ + memset(&wsdPrng.s[4], 0, 44); + }else{ + sqlite3OsRandomness(pVfs, 44, (char*)&wsdPrng.s[4]); + } + wsdPrng.s[15] = wsdPrng.s[12]; + wsdPrng.s[12] = 0; + wsdPrng.n = 0; + } + + assert( N>0 ); + while( 1 /* exit by break */ ){ + if( N<=wsdPrng.n ){ + memcpy(zBuf, &wsdPrng.out[wsdPrng.n-N], N); + wsdPrng.n -= N; + break; + } + if( wsdPrng.n>0 ){ + memcpy(zBuf, wsdPrng.out, wsdPrng.n); + N -= wsdPrng.n; + zBuf += wsdPrng.n; + } + wsdPrng.s[12]++; + chacha_block((u32*)wsdPrng.out, wsdPrng.s); + wsdPrng.n = 64; + } + sqlite3_mutex_leave(mutex); +} + +#ifndef SQLITE_UNTESTABLE +/* +** For testing purposes, we sometimes want to preserve the state of +** PRNG and restore the PRNG to its saved state at a later time, or +** to reset the PRNG to its initial state. These routines accomplish +** those tasks. +** +** The sqlite3_test_control() interface calls these routines to +** control the PRNG. +*/ +static SQLITE_WSD struct sqlite3PrngType sqlite3SavedPrng; +SQLITE_PRIVATE void sqlite3PrngSaveState(void){ + memcpy( + &GLOBAL(struct sqlite3PrngType, sqlite3SavedPrng), + &GLOBAL(struct sqlite3PrngType, sqlite3Prng), + sizeof(sqlite3Prng) + ); +} +SQLITE_PRIVATE void sqlite3PrngRestoreState(void){ + memcpy( + &GLOBAL(struct sqlite3PrngType, sqlite3Prng), + &GLOBAL(struct sqlite3PrngType, sqlite3SavedPrng), + sizeof(sqlite3Prng) + ); +} +#endif /* SQLITE_UNTESTABLE */ + +/************** End of random.c **********************************************/ +/************** Begin file threads.c *****************************************/ +/* +** 2012 July 21 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This file presents a simple cross-platform threading interface for +** use internally by SQLite. +** +** A "thread" can be created using sqlite3ThreadCreate(). This thread +** runs independently of its creator until it is joined using +** sqlite3ThreadJoin(), at which point it terminates. +** +** Threads do not have to be real. It could be that the work of the +** "thread" is done by the main thread at either the sqlite3ThreadCreate() +** or sqlite3ThreadJoin() call. This is, in fact, what happens in +** single threaded systems. Nothing in SQLite requires multiple threads. +** This interface exists so that applications that want to take advantage +** of multiple cores can do so, while also allowing applications to stay +** single-threaded if desired. +*/ +/* #include "sqliteInt.h" */ +#if SQLITE_OS_WIN +/* # include "os_win.h" */ +#endif + +#if SQLITE_MAX_WORKER_THREADS>0 + +/********************************* Unix Pthreads ****************************/ +#if SQLITE_OS_UNIX && defined(SQLITE_MUTEX_PTHREADS) && SQLITE_THREADSAFE>0 + +#define SQLITE_THREADS_IMPLEMENTED 1 /* Prevent the single-thread code below */ +/* #include */ + +/* A running thread */ +struct SQLiteThread { + pthread_t tid; /* Thread ID */ + int done; /* Set to true when thread finishes */ + void *pOut; /* Result returned by the thread */ + void *(*xTask)(void*); /* The thread routine */ + void *pIn; /* Argument to the thread */ +}; + +/* Create a new thread */ +SQLITE_PRIVATE int sqlite3ThreadCreate( + SQLiteThread **ppThread, /* OUT: Write the thread object here */ + void *(*xTask)(void*), /* Routine to run in a separate thread */ + void *pIn /* Argument passed into xTask() */ +){ + SQLiteThread *p; + int rc; + + assert( ppThread!=0 ); + assert( xTask!=0 ); + /* This routine is never used in single-threaded mode */ + assert( sqlite3GlobalConfig.bCoreMutex!=0 ); + + *ppThread = 0; + p = sqlite3Malloc(sizeof(*p)); + if( p==0 ) return SQLITE_NOMEM_BKPT; + memset(p, 0, sizeof(*p)); + p->xTask = xTask; + p->pIn = pIn; + /* If the SQLITE_TESTCTRL_FAULT_INSTALL callback is registered to a + ** function that returns SQLITE_ERROR when passed the argument 200, that + ** forces worker threads to run sequentially and deterministically + ** for testing purposes. */ + if( sqlite3FaultSim(200) ){ + rc = 1; + }else{ + rc = pthread_create(&p->tid, 0, xTask, pIn); + } + if( rc ){ + p->done = 1; + p->pOut = xTask(pIn); + } + *ppThread = p; + return SQLITE_OK; +} + +/* Get the results of the thread */ +SQLITE_PRIVATE int sqlite3ThreadJoin(SQLiteThread *p, void **ppOut){ + int rc; + + assert( ppOut!=0 ); + if( NEVER(p==0) ) return SQLITE_NOMEM_BKPT; + if( p->done ){ + *ppOut = p->pOut; + rc = SQLITE_OK; + }else{ + rc = pthread_join(p->tid, ppOut) ? SQLITE_ERROR : SQLITE_OK; + } + sqlite3_free(p); + return rc; +} + +#endif /* SQLITE_OS_UNIX && defined(SQLITE_MUTEX_PTHREADS) */ +/******************************** End Unix Pthreads *************************/ + + +/********************************* Win32 Threads ****************************/ +#if SQLITE_OS_WIN_THREADS + +#define SQLITE_THREADS_IMPLEMENTED 1 /* Prevent the single-thread code below */ +#include + +/* A running thread */ +struct SQLiteThread { + void *tid; /* The thread handle */ + unsigned id; /* The thread identifier */ + void *(*xTask)(void*); /* The routine to run as a thread */ + void *pIn; /* Argument to xTask */ + void *pResult; /* Result of xTask */ +}; + +/* Thread procedure Win32 compatibility shim */ +static unsigned __stdcall sqlite3ThreadProc( + void *pArg /* IN: Pointer to the SQLiteThread structure */ +){ + SQLiteThread *p = (SQLiteThread *)pArg; + + assert( p!=0 ); +#if 0 + /* + ** This assert appears to trigger spuriously on certain + ** versions of Windows, possibly due to _beginthreadex() + ** and/or CreateThread() not fully setting their thread + ** ID parameter before starting the thread. + */ + assert( p->id==GetCurrentThreadId() ); +#endif + assert( p->xTask!=0 ); + p->pResult = p->xTask(p->pIn); + + _endthreadex(0); + return 0; /* NOT REACHED */ +} + +/* Create a new thread */ +SQLITE_PRIVATE int sqlite3ThreadCreate( + SQLiteThread **ppThread, /* OUT: Write the thread object here */ + void *(*xTask)(void*), /* Routine to run in a separate thread */ + void *pIn /* Argument passed into xTask() */ +){ + SQLiteThread *p; + + assert( ppThread!=0 ); + assert( xTask!=0 ); + *ppThread = 0; + p = sqlite3Malloc(sizeof(*p)); + if( p==0 ) return SQLITE_NOMEM_BKPT; + /* If the SQLITE_TESTCTRL_FAULT_INSTALL callback is registered to a + ** function that returns SQLITE_ERROR when passed the argument 200, that + ** forces worker threads to run sequentially and deterministically + ** (via the sqlite3FaultSim() term of the conditional) for testing + ** purposes. */ + if( sqlite3GlobalConfig.bCoreMutex==0 || sqlite3FaultSim(200) ){ + memset(p, 0, sizeof(*p)); + }else{ + p->xTask = xTask; + p->pIn = pIn; + p->tid = (void*)_beginthreadex(0, 0, sqlite3ThreadProc, p, 0, &p->id); + if( p->tid==0 ){ + memset(p, 0, sizeof(*p)); + } + } + if( p->xTask==0 ){ + p->id = GetCurrentThreadId(); + p->pResult = xTask(pIn); + } + *ppThread = p; + return SQLITE_OK; +} + +SQLITE_PRIVATE DWORD sqlite3Win32Wait(HANDLE hObject); /* os_win.c */ + +/* Get the results of the thread */ +SQLITE_PRIVATE int sqlite3ThreadJoin(SQLiteThread *p, void **ppOut){ + DWORD rc; + BOOL bRc; + + assert( ppOut!=0 ); + if( NEVER(p==0) ) return SQLITE_NOMEM_BKPT; + if( p->xTask==0 ){ + /* assert( p->id==GetCurrentThreadId() ); */ + rc = WAIT_OBJECT_0; + assert( p->tid==0 ); + }else{ + assert( p->id!=0 && p->id!=GetCurrentThreadId() ); + rc = sqlite3Win32Wait((HANDLE)p->tid); + assert( rc!=WAIT_IO_COMPLETION ); + bRc = CloseHandle((HANDLE)p->tid); + assert( bRc ); + } + if( rc==WAIT_OBJECT_0 ) *ppOut = p->pResult; + sqlite3_free(p); + return (rc==WAIT_OBJECT_0) ? SQLITE_OK : SQLITE_ERROR; +} + +#endif /* SQLITE_OS_WIN_THREADS */ +/******************************** End Win32 Threads *************************/ + + +/********************************* Single-Threaded **************************/ +#ifndef SQLITE_THREADS_IMPLEMENTED +/* +** This implementation does not actually create a new thread. It does the +** work of the thread in the main thread, when either the thread is created +** or when it is joined +*/ + +/* A running thread */ +struct SQLiteThread { + void *(*xTask)(void*); /* The routine to run as a thread */ + void *pIn; /* Argument to xTask */ + void *pResult; /* Result of xTask */ +}; + +/* Create a new thread */ +SQLITE_PRIVATE int sqlite3ThreadCreate( + SQLiteThread **ppThread, /* OUT: Write the thread object here */ + void *(*xTask)(void*), /* Routine to run in a separate thread */ + void *pIn /* Argument passed into xTask() */ +){ + SQLiteThread *p; + + assert( ppThread!=0 ); + assert( xTask!=0 ); + *ppThread = 0; + p = sqlite3Malloc(sizeof(*p)); + if( p==0 ) return SQLITE_NOMEM_BKPT; + if( (SQLITE_PTR_TO_INT(p)/17)&1 ){ + p->xTask = xTask; + p->pIn = pIn; + }else{ + p->xTask = 0; + p->pResult = xTask(pIn); + } + *ppThread = p; + return SQLITE_OK; +} + +/* Get the results of the thread */ +SQLITE_PRIVATE int sqlite3ThreadJoin(SQLiteThread *p, void **ppOut){ + + assert( ppOut!=0 ); + if( NEVER(p==0) ) return SQLITE_NOMEM_BKPT; + if( p->xTask ){ + *ppOut = p->xTask(p->pIn); + }else{ + *ppOut = p->pResult; + } + sqlite3_free(p); + +#if defined(SQLITE_TEST) + { + void *pTstAlloc = sqlite3Malloc(10); + if (!pTstAlloc) return SQLITE_NOMEM_BKPT; + sqlite3_free(pTstAlloc); + } +#endif + + return SQLITE_OK; +} + +#endif /* !defined(SQLITE_THREADS_IMPLEMENTED) */ +/****************************** End Single-Threaded *************************/ +#endif /* SQLITE_MAX_WORKER_THREADS>0 */ + +/************** End of threads.c *********************************************/ +/************** Begin file utf.c *********************************************/ +/* +** 2004 April 13 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains routines used to translate between UTF-8, +** UTF-16, UTF-16BE, and UTF-16LE. +** +** Notes on UTF-8: +** +** Byte-0 Byte-1 Byte-2 Byte-3 Value +** 0xxxxxxx 00000000 00000000 0xxxxxxx +** 110yyyyy 10xxxxxx 00000000 00000yyy yyxxxxxx +** 1110zzzz 10yyyyyy 10xxxxxx 00000000 zzzzyyyy yyxxxxxx +** 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx 000uuuuu zzzzyyyy yyxxxxxx +** +** +** Notes on UTF-16: (with wwww+1==uuuuu) +** +** Word-0 Word-1 Value +** 110110ww wwzzzzyy 110111yy yyxxxxxx 000uuuuu zzzzyyyy yyxxxxxx +** zzzzyyyy yyxxxxxx 00000000 zzzzyyyy yyxxxxxx +** +** +** BOM or Byte Order Mark: +** 0xff 0xfe little-endian utf-16 follows +** 0xfe 0xff big-endian utf-16 follows +** +*/ +/* #include "sqliteInt.h" */ +/* #include */ +/* #include "vdbeInt.h" */ + +#if !defined(SQLITE_AMALGAMATION) && SQLITE_BYTEORDER==0 +/* +** The following constant value is used by the SQLITE_BIGENDIAN and +** SQLITE_LITTLEENDIAN macros. +*/ +SQLITE_PRIVATE const int sqlite3one = 1; +#endif /* SQLITE_AMALGAMATION && SQLITE_BYTEORDER==0 */ + +/* +** This lookup table is used to help decode the first byte of +** a multi-byte UTF8 character. +*/ +static const unsigned char sqlite3Utf8Trans1[] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x00, 0x00, +}; + + +#define WRITE_UTF8(zOut, c) { \ + if( c<0x00080 ){ \ + *zOut++ = (u8)(c&0xFF); \ + } \ + else if( c<0x00800 ){ \ + *zOut++ = 0xC0 + (u8)((c>>6)&0x1F); \ + *zOut++ = 0x80 + (u8)(c & 0x3F); \ + } \ + else if( c<0x10000 ){ \ + *zOut++ = 0xE0 + (u8)((c>>12)&0x0F); \ + *zOut++ = 0x80 + (u8)((c>>6) & 0x3F); \ + *zOut++ = 0x80 + (u8)(c & 0x3F); \ + }else{ \ + *zOut++ = 0xF0 + (u8)((c>>18) & 0x07); \ + *zOut++ = 0x80 + (u8)((c>>12) & 0x3F); \ + *zOut++ = 0x80 + (u8)((c>>6) & 0x3F); \ + *zOut++ = 0x80 + (u8)(c & 0x3F); \ + } \ +} + +#define WRITE_UTF16LE(zOut, c) { \ + if( c<=0xFFFF ){ \ + *zOut++ = (u8)(c&0x00FF); \ + *zOut++ = (u8)((c>>8)&0x00FF); \ + }else{ \ + *zOut++ = (u8)(((c>>10)&0x003F) + (((c-0x10000)>>10)&0x00C0)); \ + *zOut++ = (u8)(0x00D8 + (((c-0x10000)>>18)&0x03)); \ + *zOut++ = (u8)(c&0x00FF); \ + *zOut++ = (u8)(0x00DC + ((c>>8)&0x03)); \ + } \ +} + +#define WRITE_UTF16BE(zOut, c) { \ + if( c<=0xFFFF ){ \ + *zOut++ = (u8)((c>>8)&0x00FF); \ + *zOut++ = (u8)(c&0x00FF); \ + }else{ \ + *zOut++ = (u8)(0x00D8 + (((c-0x10000)>>18)&0x03)); \ + *zOut++ = (u8)(((c>>10)&0x003F) + (((c-0x10000)>>10)&0x00C0)); \ + *zOut++ = (u8)(0x00DC + ((c>>8)&0x03)); \ + *zOut++ = (u8)(c&0x00FF); \ + } \ +} + +/* +** Write a single UTF8 character whose value is v into the +** buffer starting at zOut. zOut must be sized to hold at +** least four bytes. Return the number of bytes needed +** to encode the new character. +*/ +SQLITE_PRIVATE int sqlite3AppendOneUtf8Character(char *zOut, u32 v){ + if( v<0x00080 ){ + zOut[0] = (u8)(v & 0xff); + return 1; + } + if( v<0x00800 ){ + zOut[0] = 0xc0 + (u8)((v>>6) & 0x1f); + zOut[1] = 0x80 + (u8)(v & 0x3f); + return 2; + } + if( v<0x10000 ){ + zOut[0] = 0xe0 + (u8)((v>>12) & 0x0f); + zOut[1] = 0x80 + (u8)((v>>6) & 0x3f); + zOut[2] = 0x80 + (u8)(v & 0x3f); + return 3; + } + zOut[0] = 0xf0 + (u8)((v>>18) & 0x07); + zOut[1] = 0x80 + (u8)((v>>12) & 0x3f); + zOut[2] = 0x80 + (u8)((v>>6) & 0x3f); + zOut[3] = 0x80 + (u8)(v & 0x3f); + return 4; +} + +/* +** Translate a single UTF-8 character. Return the unicode value. +** +** During translation, assume that the byte that zTerm points +** is a 0x00. +** +** Write a pointer to the next unread byte back into *pzNext. +** +** Notes On Invalid UTF-8: +** +** * This routine never allows a 7-bit character (0x00 through 0x7f) to +** be encoded as a multi-byte character. Any multi-byte character that +** attempts to encode a value between 0x00 and 0x7f is rendered as 0xfffd. +** +** * This routine never allows a UTF16 surrogate value to be encoded. +** If a multi-byte character attempts to encode a value between +** 0xd800 and 0xe000 then it is rendered as 0xfffd. +** +** * Bytes in the range of 0x80 through 0xbf which occur as the first +** byte of a character are interpreted as single-byte characters +** and rendered as themselves even though they are technically +** invalid characters. +** +** * This routine accepts over-length UTF8 encodings +** for unicode values 0x80 and greater. It does not change over-length +** encodings to 0xfffd as some systems recommend. +*/ +#define READ_UTF8(zIn, zTerm, c) \ + c = *(zIn++); \ + if( c>=0xc0 ){ \ + c = sqlite3Utf8Trans1[c-0xc0]; \ + while( zIn=0xc0 ){ + c = sqlite3Utf8Trans1[c-0xc0]; + while( (*(*pz) & 0xc0)==0x80 ){ + c = (c<<6) + (0x3f & *((*pz)++)); + } + if( c<0x80 + || (c&0xFFFFF800)==0xD800 + || (c&0xFFFFFFFE)==0xFFFE ){ c = 0xFFFD; } + } + return c; +} + +/* +** Read a single UTF8 character out of buffer z[], but reading no +** more than n characters from the buffer. z[] is not zero-terminated. +** +** Return the number of bytes used to construct the character. +** +** Invalid UTF8 might generate a strange result. No effort is made +** to detect invalid UTF8. +** +** At most 4 bytes will be read out of z[]. The return value will always +** be between 1 and 4. +*/ +SQLITE_PRIVATE int sqlite3Utf8ReadLimited( + const u8 *z, + int n, + u32 *piOut +){ + u32 c; + int i = 1; + assert( n>0 ); + c = z[0]; + if( c>=0xc0 ){ + c = sqlite3Utf8Trans1[c-0xc0]; + if( n>4 ) n = 4; + while( idb==0 || sqlite3_mutex_held(pMem->db->mutex) ); + assert( pMem->flags&MEM_Str ); + assert( pMem->enc!=desiredEnc ); + assert( pMem->enc!=0 ); + assert( pMem->n>=0 ); + +#if defined(TRANSLATE_TRACE) && defined(SQLITE_DEBUG) + { + StrAccum acc; + char zBuf[1000]; + sqlite3StrAccumInit(&acc, 0, zBuf, sizeof(zBuf), 0); + sqlite3VdbeMemPrettyPrint(pMem, &acc); + fprintf(stderr, "INPUT: %s\n", sqlite3StrAccumFinish(&acc)); + } +#endif + + /* If the translation is between UTF-16 little and big endian, then + ** all that is required is to swap the byte order. This case is handled + ** differently from the others. + */ + if( pMem->enc!=SQLITE_UTF8 && desiredEnc!=SQLITE_UTF8 ){ + u8 temp; + int rc; + rc = sqlite3VdbeMemMakeWriteable(pMem); + if( rc!=SQLITE_OK ){ + assert( rc==SQLITE_NOMEM ); + return SQLITE_NOMEM_BKPT; + } + zIn = (u8*)pMem->z; + zTerm = &zIn[pMem->n&~1]; + while( zInenc = desiredEnc; + goto translate_out; + } + + /* Set len to the maximum number of bytes required in the output buffer. */ + if( desiredEnc==SQLITE_UTF8 ){ + /* When converting from UTF-16, the maximum growth results from + ** translating a 2-byte character to a 4-byte UTF-8 character. + ** A single byte is required for the output string + ** nul-terminator. + */ + pMem->n &= ~1; + len = 2 * (sqlite3_int64)pMem->n + 1; + }else{ + /* When converting from UTF-8 to UTF-16 the maximum growth is caused + ** when a 1-byte UTF-8 character is translated into a 2-byte UTF-16 + ** character. Two bytes are required in the output buffer for the + ** nul-terminator. + */ + len = 2 * (sqlite3_int64)pMem->n + 2; + } + + /* Set zIn to point at the start of the input buffer and zTerm to point 1 + ** byte past the end. + ** + ** Variable zOut is set to point at the output buffer, space obtained + ** from sqlite3_malloc(). + */ + zIn = (u8*)pMem->z; + zTerm = &zIn[pMem->n]; + zOut = sqlite3DbMallocRaw(pMem->db, len); + if( !zOut ){ + return SQLITE_NOMEM_BKPT; + } + z = zOut; + + if( pMem->enc==SQLITE_UTF8 ){ + if( desiredEnc==SQLITE_UTF16LE ){ + /* UTF-8 -> UTF-16 Little-endian */ + while( zIn UTF-16 Big-endian */ + while( zInn = (int)(z - zOut); + *z++ = 0; + }else{ + assert( desiredEnc==SQLITE_UTF8 ); + if( pMem->enc==SQLITE_UTF16LE ){ + /* UTF-16 Little-endian -> UTF-8 */ + while( zIn=0xd800 && c<0xe000 ){ +#ifdef SQLITE_REPLACE_INVALID_UTF + if( c>=0xdc00 || zIn>=zTerm ){ + c = 0xfffd; + }else{ + int c2 = *(zIn++); + c2 += (*(zIn++))<<8; + if( c2<0xdc00 || c2>=0xe000 ){ + zIn -= 2; + c = 0xfffd; + }else{ + c = ((c&0x3ff)<<10) + (c2&0x3ff) + 0x10000; + } + } +#else + if( zIn UTF-8 */ + while( zIn=0xd800 && c<0xe000 ){ +#ifdef SQLITE_REPLACE_INVALID_UTF + if( c>=0xdc00 || zIn>=zTerm ){ + c = 0xfffd; + }else{ + int c2 = (*(zIn++))<<8; + c2 += *(zIn++); + if( c2<0xdc00 || c2>=0xe000 ){ + zIn -= 2; + c = 0xfffd; + }else{ + c = ((c&0x3ff)<<10) + (c2&0x3ff) + 0x10000; + } + } +#else + if( zInn = (int)(z - zOut); + } + *z = 0; + assert( (pMem->n+(desiredEnc==SQLITE_UTF8?1:2))<=len ); + + c = MEM_Str|MEM_Term|(pMem->flags&(MEM_AffMask|MEM_Subtype)); + sqlite3VdbeMemRelease(pMem); + pMem->flags = c; + pMem->enc = desiredEnc; + pMem->z = (char*)zOut; + pMem->zMalloc = pMem->z; + pMem->szMalloc = sqlite3DbMallocSize(pMem->db, pMem->z); + +translate_out: +#if defined(TRANSLATE_TRACE) && defined(SQLITE_DEBUG) + { + StrAccum acc; + char zBuf[1000]; + sqlite3StrAccumInit(&acc, 0, zBuf, sizeof(zBuf), 0); + sqlite3VdbeMemPrettyPrint(pMem, &acc); + fprintf(stderr, "OUTPUT: %s\n", sqlite3StrAccumFinish(&acc)); + } +#endif + return SQLITE_OK; +} +#endif /* SQLITE_OMIT_UTF16 */ + +#ifndef SQLITE_OMIT_UTF16 +/* +** This routine checks for a byte-order mark at the beginning of the +** UTF-16 string stored in *pMem. If one is present, it is removed and +** the encoding of the Mem adjusted. This routine does not do any +** byte-swapping, it just sets Mem.enc appropriately. +** +** The allocation (static, dynamic etc.) and encoding of the Mem may be +** changed by this function. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemHandleBom(Mem *pMem){ + int rc = SQLITE_OK; + u8 bom = 0; + + assert( pMem->n>=0 ); + if( pMem->n>1 ){ + u8 b1 = *(u8 *)pMem->z; + u8 b2 = *(((u8 *)pMem->z) + 1); + if( b1==0xFE && b2==0xFF ){ + bom = SQLITE_UTF16BE; + } + if( b1==0xFF && b2==0xFE ){ + bom = SQLITE_UTF16LE; + } + } + + if( bom ){ + rc = sqlite3VdbeMemMakeWriteable(pMem); + if( rc==SQLITE_OK ){ + pMem->n -= 2; + memmove(pMem->z, &pMem->z[2], pMem->n); + pMem->z[pMem->n] = '\0'; + pMem->z[pMem->n+1] = '\0'; + pMem->flags |= MEM_Term; + pMem->enc = bom; + } + } + return rc; +} +#endif /* SQLITE_OMIT_UTF16 */ + +/* +** pZ is a UTF-8 encoded unicode string. If nByte is less than zero, +** return the number of unicode characters in pZ up to (but not including) +** the first 0x00 byte. If nByte is not less than zero, return the +** number of unicode characters in the first nByte of pZ (or up to +** the first 0x00, whichever comes first). +*/ +SQLITE_PRIVATE int sqlite3Utf8CharLen(const char *zIn, int nByte){ + int r = 0; + const u8 *z = (const u8*)zIn; + const u8 *zTerm; + if( nByte>=0 ){ + zTerm = &z[nByte]; + }else{ + zTerm = (const u8*)(-1); + } + assert( z<=zTerm ); + while( *z!=0 && zmallocFailed ){ + sqlite3VdbeMemRelease(&m); + m.z = 0; + } + assert( (m.flags & MEM_Term)!=0 || db->mallocFailed ); + assert( (m.flags & MEM_Str)!=0 || db->mallocFailed ); + assert( m.z || db->mallocFailed ); + return m.z; +} + +/* +** zIn is a UTF-16 encoded unicode string at least nByte bytes long. +** Return the number of bytes in the first nChar unicode characters +** in pZ. nChar must be non-negative. Surrogate pairs count as a single +** character. +*/ +SQLITE_PRIVATE int sqlite3Utf16ByteLen(const void *zIn, int nByte, int nChar){ + int c; + unsigned char const *z = zIn; + unsigned char const *zEnd = &z[nByte-1]; + int n = 0; + + if( SQLITE_UTF16NATIVE==SQLITE_UTF16LE ) z++; + while( n=0xd8 && c<0xdc && z<=zEnd && z[0]>=0xdc && z[0]<0xe0 ) z += 2; + n++; + } + return (int)(z-(unsigned char const *)zIn) + - (SQLITE_UTF16NATIVE==SQLITE_UTF16LE); +} + +#if defined(SQLITE_TEST) +/* +** This routine is called from the TCL test function "translate_selftest". +** It checks that the primitives for serializing and deserializing +** characters in each encoding are inverses of each other. +*/ +SQLITE_PRIVATE void sqlite3UtfSelfTest(void){ + unsigned int i, t; + unsigned char zBuf[20]; + unsigned char *z; + int n; + unsigned int c; + + for(i=0; i<0x00110000; i++){ + z = zBuf; + WRITE_UTF8(z, i); + n = (int)(z-zBuf); + assert( n>0 && n<=4 ); + z[0] = 0; + z = zBuf; + c = sqlite3Utf8Read((const u8**)&z); + t = i; + if( i>=0xD800 && i<=0xDFFF ) t = 0xFFFD; + if( (i&0xFFFFFFFE)==0xFFFE ) t = 0xFFFD; + assert( c==t ); + assert( (z-zBuf)==n ); + } +} +#endif /* SQLITE_TEST */ +#endif /* SQLITE_OMIT_UTF16 */ + +/************** End of utf.c *************************************************/ +/************** Begin file util.c ********************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** Utility functions used throughout sqlite. +** +** This file contains functions for allocating memory, comparing +** strings, and stuff like that. +** +*/ +/* #include "sqliteInt.h" */ +/* #include */ +#ifndef SQLITE_OMIT_FLOATING_POINT +#include +#endif + +/* +** Calls to sqlite3FaultSim() are used to simulate a failure during testing, +** or to bypass normal error detection during testing in order to let +** execute proceed further downstream. +** +** In deployment, sqlite3FaultSim() *always* return SQLITE_OK (0). The +** sqlite3FaultSim() function only returns non-zero during testing. +** +** During testing, if the test harness has set a fault-sim callback using +** a call to sqlite3_test_control(SQLITE_TESTCTRL_FAULT_INSTALL), then +** each call to sqlite3FaultSim() is relayed to that application-supplied +** callback and the integer return value form the application-supplied +** callback is returned by sqlite3FaultSim(). +** +** The integer argument to sqlite3FaultSim() is a code to identify which +** sqlite3FaultSim() instance is being invoked. Each call to sqlite3FaultSim() +** should have a unique code. To prevent legacy testing applications from +** breaking, the codes should not be changed or reused. +*/ +#ifndef SQLITE_UNTESTABLE +SQLITE_PRIVATE int sqlite3FaultSim(int iTest){ + int (*xCallback)(int) = sqlite3GlobalConfig.xTestCallback; + return xCallback ? xCallback(iTest) : SQLITE_OK; +} +#endif + +#ifndef SQLITE_OMIT_FLOATING_POINT +/* +** Return true if the floating point value is Not a Number (NaN). +** +** Use the math library isnan() function if compiled with SQLITE_HAVE_ISNAN. +** Otherwise, we have our own implementation that works on most systems. +*/ +SQLITE_PRIVATE int sqlite3IsNaN(double x){ + int rc; /* The value return */ +#if !SQLITE_HAVE_ISNAN && !HAVE_ISNAN + u64 y; + memcpy(&y,&x,sizeof(y)); + rc = IsNaN(y); +#else + rc = isnan(x); +#endif /* HAVE_ISNAN */ + testcase( rc ); + return rc; +} +#endif /* SQLITE_OMIT_FLOATING_POINT */ + +#ifndef SQLITE_OMIT_FLOATING_POINT +/* +** Return true if the floating point value is NaN or +Inf or -Inf. +*/ +SQLITE_PRIVATE int sqlite3IsOverflow(double x){ + int rc; /* The value return */ + u64 y; + memcpy(&y,&x,sizeof(y)); + rc = IsOvfl(y); + return rc; +} +#endif /* SQLITE_OMIT_FLOATING_POINT */ + +/* +** Compute a string length that is limited to what can be stored in +** lower 30 bits of a 32-bit signed integer. +** +** The value returned will never be negative. Nor will it ever be greater +** than the actual length of the string. For very long strings (greater +** than 1GiB) the value returned might be less than the true string length. +*/ +SQLITE_PRIVATE int sqlite3Strlen30(const char *z){ + if( z==0 ) return 0; + return 0x3fffffff & (int)strlen(z); +} + +/* +** Return the declared type of a column. Or return zDflt if the column +** has no declared type. +** +** The column type is an extra string stored after the zero-terminator on +** the column name if and only if the COLFLAG_HASTYPE flag is set. +*/ +SQLITE_PRIVATE char *sqlite3ColumnType(Column *pCol, char *zDflt){ + if( pCol->colFlags & COLFLAG_HASTYPE ){ + return pCol->zCnName + strlen(pCol->zCnName) + 1; + }else if( pCol->eCType ){ + assert( pCol->eCType<=SQLITE_N_STDTYPE ); + return (char*)sqlite3StdType[pCol->eCType-1]; + }else{ + return zDflt; + } +} + +/* +** Helper function for sqlite3Error() - called rarely. Broken out into +** a separate routine to avoid unnecessary register saves on entry to +** sqlite3Error(). +*/ +static SQLITE_NOINLINE void sqlite3ErrorFinish(sqlite3 *db, int err_code){ + if( db->pErr ) sqlite3ValueSetNull(db->pErr); + sqlite3SystemError(db, err_code); +} + +/* +** Set the current error code to err_code and clear any prior error message. +** Also set iSysErrno (by calling sqlite3System) if the err_code indicates +** that would be appropriate. +*/ +SQLITE_PRIVATE void sqlite3Error(sqlite3 *db, int err_code){ + assert( db!=0 ); + db->errCode = err_code; + if( err_code || db->pErr ){ + sqlite3ErrorFinish(db, err_code); + }else{ + db->errByteOffset = -1; + } +} + +/* +** The equivalent of sqlite3Error(db, SQLITE_OK). Clear the error state +** and error message. +*/ +SQLITE_PRIVATE void sqlite3ErrorClear(sqlite3 *db){ + assert( db!=0 ); + db->errCode = SQLITE_OK; + db->errByteOffset = -1; + if( db->pErr ) sqlite3ValueSetNull(db->pErr); +} + +/* +** Load the sqlite3.iSysErrno field if that is an appropriate thing +** to do based on the SQLite error code in rc. +*/ +SQLITE_PRIVATE void sqlite3SystemError(sqlite3 *db, int rc){ + if( rc==SQLITE_IOERR_NOMEM ) return; +#if defined(SQLITE_USE_SEH) && !defined(SQLITE_OMIT_WAL) + if( rc==SQLITE_IOERR_IN_PAGE ){ + int ii; + int iErr; + sqlite3BtreeEnterAll(db); + for(ii=0; iinDb; ii++){ + if( db->aDb[ii].pBt ){ + iErr = sqlite3PagerWalSystemErrno(sqlite3BtreePager(db->aDb[ii].pBt)); + if( iErr ){ + db->iSysErrno = iErr; + } + } + } + sqlite3BtreeLeaveAll(db); + return; + } +#endif + rc &= 0xff; + if( rc==SQLITE_CANTOPEN || rc==SQLITE_IOERR ){ + db->iSysErrno = sqlite3OsGetLastError(db->pVfs); + } +} + +/* +** Set the most recent error code and error string for the sqlite +** handle "db". The error code is set to "err_code". +** +** If it is not NULL, string zFormat specifies the format of the +** error string. zFormat and any string tokens that follow it are +** assumed to be encoded in UTF-8. +** +** To clear the most recent error for sqlite handle "db", sqlite3Error +** should be called with err_code set to SQLITE_OK and zFormat set +** to NULL. +*/ +SQLITE_PRIVATE void sqlite3ErrorWithMsg(sqlite3 *db, int err_code, const char *zFormat, ...){ + assert( db!=0 ); + db->errCode = err_code; + sqlite3SystemError(db, err_code); + if( zFormat==0 ){ + sqlite3Error(db, err_code); + }else if( db->pErr || (db->pErr = sqlite3ValueNew(db))!=0 ){ + char *z; + va_list ap; + va_start(ap, zFormat); + z = sqlite3VMPrintf(db, zFormat, ap); + va_end(ap); + sqlite3ValueSetStr(db->pErr, -1, z, SQLITE_UTF8, SQLITE_DYNAMIC); + } +} + +/* +** Check for interrupts and invoke progress callback. +*/ +SQLITE_PRIVATE void sqlite3ProgressCheck(Parse *p){ + sqlite3 *db = p->db; + if( AtomicLoad(&db->u1.isInterrupted) ){ + p->nErr++; + p->rc = SQLITE_INTERRUPT; + } +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK + if( db->xProgress ){ + if( p->rc==SQLITE_INTERRUPT ){ + p->nProgressSteps = 0; + }else if( (++p->nProgressSteps)>=db->nProgressOps ){ + if( db->xProgress(db->pProgressArg) ){ + p->nErr++; + p->rc = SQLITE_INTERRUPT; + } + p->nProgressSteps = 0; + } + } +#endif +} + +/* +** Add an error message to pParse->zErrMsg and increment pParse->nErr. +** +** This function should be used to report any error that occurs while +** compiling an SQL statement (i.e. within sqlite3_prepare()). The +** last thing the sqlite3_prepare() function does is copy the error +** stored by this function into the database handle using sqlite3Error(). +** Functions sqlite3Error() or sqlite3ErrorWithMsg() should be used +** during statement execution (sqlite3_step() etc.). +*/ +SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){ + char *zMsg; + va_list ap; + sqlite3 *db = pParse->db; + assert( db!=0 ); + assert( db->pParse==pParse || db->pParse->pToplevel==pParse ); + db->errByteOffset = -2; + va_start(ap, zFormat); + zMsg = sqlite3VMPrintf(db, zFormat, ap); + va_end(ap); + if( db->errByteOffset<-1 ) db->errByteOffset = -1; + if( db->suppressErr ){ + sqlite3DbFree(db, zMsg); + if( db->mallocFailed ){ + pParse->nErr++; + pParse->rc = SQLITE_NOMEM; + } + }else{ + pParse->nErr++; + sqlite3DbFree(db, pParse->zErrMsg); + pParse->zErrMsg = zMsg; + pParse->rc = SQLITE_ERROR; + pParse->pWith = 0; + } +} + +/* +** If database connection db is currently parsing SQL, then transfer +** error code errCode to that parser if the parser has not already +** encountered some other kind of error. +*/ +SQLITE_PRIVATE int sqlite3ErrorToParser(sqlite3 *db, int errCode){ + Parse *pParse; + if( db==0 || (pParse = db->pParse)==0 ) return errCode; + pParse->rc = errCode; + pParse->nErr++; + return errCode; +} + +/* +** Convert an SQL-style quoted string into a normal string by removing +** the quote characters. The conversion is done in-place. If the +** input does not begin with a quote character, then this routine +** is a no-op. +** +** The input string must be zero-terminated. A new zero-terminator +** is added to the dequoted string. +** +** The return value is -1 if no dequoting occurs or the length of the +** dequoted string, exclusive of the zero terminator, if dequoting does +** occur. +** +** 2002-02-14: This routine is extended to remove MS-Access style +** brackets from around identifiers. For example: "[a-b-c]" becomes +** "a-b-c". +*/ +SQLITE_PRIVATE void sqlite3Dequote(char *z){ + char quote; + int i, j; + if( z==0 ) return; + quote = z[0]; + if( !sqlite3Isquote(quote) ) return; + if( quote=='[' ) quote = ']'; + for(i=1, j=0;; i++){ + assert( z[i] ); + if( z[i]==quote ){ + if( z[i+1]==quote ){ + z[j++] = quote; + i++; + }else{ + break; + } + }else{ + z[j++] = z[i]; + } + } + z[j] = 0; +} +SQLITE_PRIVATE void sqlite3DequoteExpr(Expr *p){ + assert( !ExprHasProperty(p, EP_IntValue) ); + assert( sqlite3Isquote(p->u.zToken[0]) ); + p->flags |= p->u.zToken[0]=='"' ? EP_Quoted|EP_DblQuoted : EP_Quoted; + sqlite3Dequote(p->u.zToken); +} + +/* +** Expression p is a QNUMBER (quoted number). Dequote the value in p->u.zToken +** and set the type to INTEGER or FLOAT. "Quoted" integers or floats are those +** that contain '_' characters that must be removed before further processing. +*/ +SQLITE_PRIVATE void sqlite3DequoteNumber(Parse *pParse, Expr *p){ + assert( p!=0 || pParse->db->mallocFailed ); + if( p ){ + const char *pIn = p->u.zToken; + char *pOut = p->u.zToken; + int bHex = (pIn[0]=='0' && (pIn[1]=='x' || pIn[1]=='X')); + int iValue; + assert( p->op==TK_QNUMBER ); + p->op = TK_INTEGER; + do { + if( *pIn!=SQLITE_DIGIT_SEPARATOR ){ + *pOut++ = *pIn; + if( *pIn=='e' || *pIn=='E' || *pIn=='.' ) p->op = TK_FLOAT; + }else{ + if( (bHex==0 && (!sqlite3Isdigit(pIn[-1]) || !sqlite3Isdigit(pIn[1]))) + || (bHex==1 && (!sqlite3Isxdigit(pIn[-1]) || !sqlite3Isxdigit(pIn[1]))) + ){ + sqlite3ErrorMsg(pParse, "unrecognized token: \"%s\"", p->u.zToken); + } + } + }while( *pIn++ ); + if( bHex ) p->op = TK_INTEGER; + + /* tag-20240227-a: If after dequoting, the number is an integer that + ** fits in 32 bits, then it must be converted into EP_IntValue. Other + ** parts of the code expect this. See also tag-20240227-b. */ + if( p->op==TK_INTEGER && sqlite3GetInt32(p->u.zToken, &iValue) ){ + p->u.iValue = iValue; + p->flags |= EP_IntValue; + } + } +} + +/* +** If the input token p is quoted, try to adjust the token to remove +** the quotes. This is not always possible: +** +** "abc" -> abc +** "ab""cd" -> (not possible because of the interior "") +** +** Remove the quotes if possible. This is a optimization. The overall +** system should still return the correct answer even if this routine +** is always a no-op. +*/ +SQLITE_PRIVATE void sqlite3DequoteToken(Token *p){ + unsigned int i; + if( p->n<2 ) return; + if( !sqlite3Isquote(p->z[0]) ) return; + for(i=1; in-1; i++){ + if( sqlite3Isquote(p->z[i]) ) return; + } + p->n -= 2; + p->z++; +} + +/* +** Generate a Token object from a string +*/ +SQLITE_PRIVATE void sqlite3TokenInit(Token *p, char *z){ + p->z = z; + p->n = sqlite3Strlen30(z); +} + +/* Convenient short-hand */ +#define UpperToLower sqlite3UpperToLower + +/* +** Some systems have stricmp(). Others have strcasecmp(). Because +** there is no consistency, we will define our own. +** +** IMPLEMENTATION-OF: R-30243-02494 The sqlite3_stricmp() and +** sqlite3_strnicmp() APIs allow applications and extensions to compare +** the contents of two buffers containing UTF-8 strings in a +** case-independent fashion, using the same definition of "case +** independence" that SQLite uses internally when comparing identifiers. +*/ +SQLITE_API int sqlite3_stricmp(const char *zLeft, const char *zRight){ + if( zLeft==0 ){ + return zRight ? -1 : 0; + }else if( zRight==0 ){ + return 1; + } + return sqlite3StrICmp(zLeft, zRight); +} +SQLITE_PRIVATE int sqlite3StrICmp(const char *zLeft, const char *zRight){ + unsigned char *a, *b; + int c, x; + a = (unsigned char *)zLeft; + b = (unsigned char *)zRight; + for(;;){ + c = *a; + x = *b; + if( c==x ){ + if( c==0 ) break; + }else{ + c = (int)UpperToLower[c] - (int)UpperToLower[x]; + if( c ) break; + } + a++; + b++; + } + return c; +} +SQLITE_API int sqlite3_strnicmp(const char *zLeft, const char *zRight, int N){ + register unsigned char *a, *b; + if( zLeft==0 ){ + return zRight ? -1 : 0; + }else if( zRight==0 ){ + return 1; + } + a = (unsigned char *)zLeft; + b = (unsigned char *)zRight; + while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; } + return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b]; +} + +/* +** Compute an 8-bit hash on a string that is insensitive to case differences +*/ +SQLITE_PRIVATE u8 sqlite3StrIHash(const char *z){ + u8 h = 0; + if( z==0 ) return 0; + while( z[0] ){ + h += UpperToLower[(unsigned char)z[0]]; + z++; + } + return h; +} + +/* Double-Double multiplication. (x[0],x[1]) *= (y,yy) +** +** Reference: +** T. J. Dekker, "A Floating-Point Technique for Extending the +** Available Precision". 1971-07-26. +*/ +static void dekkerMul2(volatile double *x, double y, double yy){ + /* + ** The "volatile" keywords on parameter x[] and on local variables + ** below are needed force intermediate results to be truncated to + ** binary64 rather than be carried around in an extended-precision + ** format. The truncation is necessary for the Dekker algorithm to + ** work. Intel x86 floating point might omit the truncation without + ** the use of volatile. + */ + volatile double tx, ty, p, q, c, cc; + double hx, hy; + u64 m; + memcpy(&m, (void*)&x[0], 8); + m &= 0xfffffffffc000000LL; + memcpy(&hx, &m, 8); + tx = x[0] - hx; + memcpy(&m, &y, 8); + m &= 0xfffffffffc000000LL; + memcpy(&hy, &m, 8); + ty = y - hy; + p = hx*hy; + q = hx*ty + tx*hy; + c = p+q; + cc = p - c + q + tx*ty; + cc = x[0]*yy + x[1]*y + cc; + x[0] = c + cc; + x[1] = c - x[0]; + x[1] += cc; +} + +/* +** The string z[] is an text representation of a real number. +** Convert this string to a double and write it into *pResult. +** +** The string z[] is length bytes in length (bytes, not characters) and +** uses the encoding enc. The string is not necessarily zero-terminated. +** +** Return TRUE if the result is a valid real number (or integer) and FALSE +** if the string is empty or contains extraneous text. More specifically +** return +** 1 => The input string is a pure integer +** 2 or more => The input has a decimal point or eNNN clause +** 0 or less => The input string is not a valid number +** -1 => Not a valid number, but has a valid prefix which +** includes a decimal point and/or an eNNN clause +** +** Valid numbers are in one of these formats: +** +** [+-]digits[E[+-]digits] +** [+-]digits.[digits][E[+-]digits] +** [+-].digits[E[+-]digits] +** +** Leading and trailing whitespace is ignored for the purpose of determining +** validity. +** +** If some prefix of the input string is a valid number, this routine +** returns FALSE but it still converts the prefix and writes the result +** into *pResult. +*/ +#if defined(_MSC_VER) +#pragma warning(disable : 4756) +#endif +SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 enc){ +#ifndef SQLITE_OMIT_FLOATING_POINT + int incr; + const char *zEnd; + /* sign * significand * (10 ^ (esign * exponent)) */ + int sign = 1; /* sign of significand */ + u64 s = 0; /* significand */ + int d = 0; /* adjust exponent for shifting decimal point */ + int esign = 1; /* sign of exponent */ + int e = 0; /* exponent */ + int eValid = 1; /* True exponent is either not used or is well-formed */ + int nDigit = 0; /* Number of digits processed */ + int eType = 1; /* 1: pure integer, 2+: fractional -1 or less: bad UTF16 */ + u64 s2; /* round-tripped significand */ + double rr[2]; + + assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE ); + *pResult = 0.0; /* Default return value, in case of an error */ + if( length==0 ) return 0; + + if( enc==SQLITE_UTF8 ){ + incr = 1; + zEnd = z + length; + }else{ + int i; + incr = 2; + length &= ~1; + assert( SQLITE_UTF16LE==2 && SQLITE_UTF16BE==3 ); + testcase( enc==SQLITE_UTF16LE ); + testcase( enc==SQLITE_UTF16BE ); + for(i=3-enc; i=zEnd ) return 0; + + /* get sign of significand */ + if( *z=='-' ){ + sign = -1; + z+=incr; + }else if( *z=='+' ){ + z+=incr; + } + + /* copy max significant digits to significand */ + while( z=((LARGEST_UINT64-9)/10) ){ + /* skip non-significant significand digits + ** (increase exponent by d to shift decimal left) */ + while( z=zEnd ) goto do_atof_calc; + + /* if decimal point is present */ + if( *z=='.' ){ + z+=incr; + eType++; + /* copy digits from after decimal to significand + ** (decrease exponent by d to shift decimal right) */ + while( z=zEnd ) goto do_atof_calc; + + /* if exponent is present */ + if( *z=='e' || *z=='E' ){ + z+=incr; + eValid = 0; + eType++; + + /* This branch is needed to avoid a (harmless) buffer overread. The + ** special comment alerts the mutation tester that the correct answer + ** is obtained even if the branch is omitted */ + if( z>=zEnd ) goto do_atof_calc; /*PREVENTS-HARMLESS-OVERREAD*/ + + /* get sign of exponent */ + if( *z=='-' ){ + esign = -1; + z+=incr; + }else if( *z=='+' ){ + z+=incr; + } + /* copy digits to exponent */ + while( z0 && s<((LARGEST_UINT64-0x7ff)/10) ){ + s *= 10; + e--; + } + while( e<0 && (s%10)==0 ){ + s /= 10; + e++; + } + + rr[0] = (double)s; + assert( sizeof(s2)==sizeof(rr[0]) ); +#ifdef SQLITE_DEBUG + rr[1] = 18446744073709549568.0; + memcpy(&s2, &rr[1], sizeof(s2)); + assert( s2==0x43efffffffffffffLL ); +#endif + /* Largest double that can be safely converted to u64 + ** vvvvvvvvvvvvvvvvvvvvvv */ + if( rr[0]<=18446744073709549568.0 ){ + s2 = (u64)rr[0]; + rr[1] = s>=s2 ? (double)(s - s2) : -(double)(s2 - s); + }else{ + rr[1] = 0.0; + } + assert( rr[1]<=1.0e-10*rr[0] ); /* Equal only when rr[0]==0.0 */ + + if( e>0 ){ + while( e>=100 ){ + e -= 100; + dekkerMul2(rr, 1.0e+100, -1.5902891109759918046e+83); + } + while( e>=10 ){ + e -= 10; + dekkerMul2(rr, 1.0e+10, 0.0); + } + while( e>=1 ){ + e -= 1; + dekkerMul2(rr, 1.0e+01, 0.0); + } + }else{ + while( e<=-100 ){ + e += 100; + dekkerMul2(rr, 1.0e-100, -1.99918998026028836196e-117); + } + while( e<=-10 ){ + e += 10; + dekkerMul2(rr, 1.0e-10, -3.6432197315497741579e-27); + } + while( e<=-1 ){ + e += 1; + dekkerMul2(rr, 1.0e-01, -5.5511151231257827021e-18); + } + } + *pResult = rr[0]+rr[1]; + if( sqlite3IsNaN(*pResult) ) *pResult = 1e300*1e300; + if( sign<0 ) *pResult = -*pResult; + assert( !sqlite3IsNaN(*pResult) ); + +atof_return: + /* return true if number and no extra non-whitespace characters after */ + if( z==zEnd && nDigit>0 && eValid && eType>0 ){ + return eType; + }else if( eType>=2 && (eType==3 || eValid) && nDigit>0 ){ + return -1; + }else{ + return 0; + } +#else + return !sqlite3Atoi64(z, pResult, length, enc); +#endif /* SQLITE_OMIT_FLOATING_POINT */ +} +#if defined(_MSC_VER) +#pragma warning(default : 4756) +#endif + +/* +** Render an signed 64-bit integer as text. Store the result in zOut[] and +** return the length of the string that was stored, in bytes. The value +** returned does not include the zero terminator at the end of the output +** string. +** +** The caller must ensure that zOut[] is at least 21 bytes in size. +*/ +SQLITE_PRIVATE int sqlite3Int64ToText(i64 v, char *zOut){ + int i; + u64 x; + char zTemp[22]; + if( v<0 ){ + x = (v==SMALLEST_INT64) ? ((u64)1)<<63 : (u64)-v; + }else{ + x = v; + } + i = sizeof(zTemp)-2; + zTemp[sizeof(zTemp)-1] = 0; + while( 1 /*exit-by-break*/ ){ + zTemp[i] = (x%10) + '0'; + x = x/10; + if( x==0 ) break; + i--; + }; + if( v<0 ) zTemp[--i] = '-'; + memcpy(zOut, &zTemp[i], sizeof(zTemp)-i); + return sizeof(zTemp)-1-i; +} + +/* +** Compare the 19-character string zNum against the text representation +** value 2^63: 9223372036854775808. Return negative, zero, or positive +** if zNum is less than, equal to, or greater than the string. +** Note that zNum must contain exactly 19 characters. +** +** Unlike memcmp() this routine is guaranteed to return the difference +** in the values of the last digit if the only difference is in the +** last digit. So, for example, +** +** compare2pow63("9223372036854775800", 1) +** +** will return -8. +*/ +static int compare2pow63(const char *zNum, int incr){ + int c = 0; + int i; + /* 012345678901234567 */ + const char *pow63 = "922337203685477580"; + for(i=0; c==0 && i<18; i++){ + c = (zNum[i*incr]-pow63[i])*10; + } + if( c==0 ){ + c = zNum[18*incr] - '8'; + testcase( c==(-1) ); + testcase( c==0 ); + testcase( c==(+1) ); + } + return c; +} + +/* +** Convert zNum to a 64-bit signed integer. zNum must be decimal. This +** routine does *not* accept hexadecimal notation. +** +** Returns: +** +** -1 Not even a prefix of the input text looks like an integer +** 0 Successful transformation. Fits in a 64-bit signed integer. +** 1 Excess non-space text after the integer value +** 2 Integer too large for a 64-bit signed integer or is malformed +** 3 Special case of 9223372036854775808 +** +** length is the number of bytes in the string (bytes, not characters). +** The string is not necessarily zero-terminated. The encoding is +** given by enc. +*/ +SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc){ + int incr; + u64 u = 0; + int neg = 0; /* assume positive */ + int i; + int c = 0; + int nonNum = 0; /* True if input contains UTF16 with high byte non-zero */ + int rc; /* Baseline return code */ + const char *zStart; + const char *zEnd = zNum + length; + assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE ); + if( enc==SQLITE_UTF8 ){ + incr = 1; + }else{ + incr = 2; + length &= ~1; + assert( SQLITE_UTF16LE==2 && SQLITE_UTF16BE==3 ); + for(i=3-enc; i='0' && c<='9'; i+=incr){ + u = u*10 + c - '0'; + } + testcase( i==18*incr ); + testcase( i==19*incr ); + testcase( i==20*incr ); + if( u>LARGEST_INT64 ){ + /* This test and assignment is needed only to suppress UB warnings + ** from clang and -fsanitize=undefined. This test and assignment make + ** the code a little larger and slower, and no harm comes from omitting + ** them, but we must appease the undefined-behavior pharisees. */ + *pNum = neg ? SMALLEST_INT64 : LARGEST_INT64; + }else if( neg ){ + *pNum = -(i64)u; + }else{ + *pNum = (i64)u; + } + rc = 0; + if( i==0 && zStart==zNum ){ /* No digits */ + rc = -1; + }else if( nonNum ){ /* UTF16 with high-order bytes non-zero */ + rc = 1; + }else if( &zNum[i]19*incr ? 1 : compare2pow63(zNum, incr); + if( c<0 ){ + /* zNum is less than 9223372036854775808 so it fits */ + assert( u<=LARGEST_INT64 ); + return rc; + }else{ + *pNum = neg ? SMALLEST_INT64 : LARGEST_INT64; + if( c>0 ){ + /* zNum is greater than 9223372036854775808 so it overflows */ + return 2; + }else{ + /* zNum is exactly 9223372036854775808. Fits if negative. The + ** special case 2 overflow if positive */ + assert( u-1==LARGEST_INT64 ); + return neg ? rc : 3; + } + } + } +} + +/* +** Transform a UTF-8 integer literal, in either decimal or hexadecimal, +** into a 64-bit signed integer. This routine accepts hexadecimal literals, +** whereas sqlite3Atoi64() does not. +** +** Returns: +** +** 0 Successful transformation. Fits in a 64-bit signed integer. +** 1 Excess text after the integer value +** 2 Integer too large for a 64-bit signed integer or is malformed +** 3 Special case of 9223372036854775808 +*/ +SQLITE_PRIVATE int sqlite3DecOrHexToI64(const char *z, i64 *pOut){ +#ifndef SQLITE_OMIT_HEX_INTEGER + if( z[0]=='0' + && (z[1]=='x' || z[1]=='X') + ){ + u64 u = 0; + int i, k; + for(i=2; z[i]=='0'; i++){} + for(k=i; sqlite3Isxdigit(z[k]); k++){ + u = u*16 + sqlite3HexToInt(z[k]); + } + memcpy(pOut, &u, 8); + if( k-i>16 ) return 2; + if( z[k]!=0 ) return 1; + return 0; + }else +#endif /* SQLITE_OMIT_HEX_INTEGER */ + { + int n = (int)(0x3fffffff&strspn(z,"+- \n\t0123456789")); + if( z[n] ) n++; + return sqlite3Atoi64(z, pOut, n, SQLITE_UTF8); + } +} + +/* +** If zNum represents an integer that will fit in 32-bits, then set +** *pValue to that integer and return true. Otherwise return false. +** +** This routine accepts both decimal and hexadecimal notation for integers. +** +** Any non-numeric characters that following zNum are ignored. +** This is different from sqlite3Atoi64() which requires the +** input number to be zero-terminated. +*/ +SQLITE_PRIVATE int sqlite3GetInt32(const char *zNum, int *pValue){ + sqlite_int64 v = 0; + int i, c; + int neg = 0; + if( zNum[0]=='-' ){ + neg = 1; + zNum++; + }else if( zNum[0]=='+' ){ + zNum++; + } +#ifndef SQLITE_OMIT_HEX_INTEGER + else if( zNum[0]=='0' + && (zNum[1]=='x' || zNum[1]=='X') + && sqlite3Isxdigit(zNum[2]) + ){ + u32 u = 0; + zNum += 2; + while( zNum[0]=='0' ) zNum++; + for(i=0; i<8 && sqlite3Isxdigit(zNum[i]); i++){ + u = u*16 + sqlite3HexToInt(zNum[i]); + } + if( (u&0x80000000)==0 && sqlite3Isxdigit(zNum[i])==0 ){ + memcpy(pValue, &u, 4); + return 1; + }else{ + return 0; + } + } +#endif + if( !sqlite3Isdigit(zNum[0]) ) return 0; + while( zNum[0]=='0' ) zNum++; + for(i=0; i<11 && (c = zNum[i] - '0')>=0 && c<=9; i++){ + v = v*10 + c; + } + + /* The longest decimal representation of a 32 bit integer is 10 digits: + ** + ** 1234567890 + ** 2^31 -> 2147483648 + */ + testcase( i==10 ); + if( i>10 ){ + return 0; + } + testcase( v-neg==2147483647 ); + if( v-neg>2147483647 ){ + return 0; + } + if( neg ){ + v = -v; + } + *pValue = (int)v; + return 1; +} + +/* +** Return a 32-bit integer value extracted from a string. If the +** string is not an integer, just return 0. +*/ +SQLITE_PRIVATE int sqlite3Atoi(const char *z){ + int x = 0; + sqlite3GetInt32(z, &x); + return x; +} + +/* +** Decode a floating-point value into an approximate decimal +** representation. +** +** If iRound<=0 then round to -iRound significant digits to the +** the left of the decimal point, or to a maximum of mxRound total +** significant digits. +** +** If iRound>0 round to min(iRound,mxRound) significant digits total. +** +** mxRound must be positive. +** +** The significant digits of the decimal representation are +** stored in p->z[] which is a often (but not always) a pointer +** into the middle of p->zBuf[]. There are p->n significant digits. +** The p->z[] array is *not* zero-terminated. +*/ +SQLITE_PRIVATE void sqlite3FpDecode(FpDecode *p, double r, int iRound, int mxRound){ + int i; + u64 v; + int e, exp = 0; + double rr[2]; + + p->isSpecial = 0; + p->z = p->zBuf; + assert( mxRound>0 ); + + /* Convert negative numbers to positive. Deal with Infinity, 0.0, and + ** NaN. */ + if( r<0.0 ){ + p->sign = '-'; + r = -r; + }else if( r==0.0 ){ + p->sign = '+'; + p->n = 1; + p->iDP = 1; + p->z = "0"; + return; + }else{ + p->sign = '+'; + } + memcpy(&v,&r,8); + e = v>>52; + if( (e&0x7ff)==0x7ff ){ + p->isSpecial = 1 + (v!=0x7ff0000000000000LL); + p->n = 0; + p->iDP = 0; + return; + } + + /* Multiply r by powers of ten until it lands somewhere in between + ** 1.0e+19 and 1.0e+17. + ** + ** Use Dekker-style double-double computation to increase the + ** precision. + ** + ** The error terms on constants like 1.0e+100 computed using the + ** decimal extension, for example as follows: + ** + ** SELECT decimal_exp(decimal_sub('1.0e+100',decimal(1.0e+100))); + */ + rr[0] = r; + rr[1] = 0.0; + if( rr[0]>9.223372036854774784e+18 ){ + while( rr[0]>9.223372036854774784e+118 ){ + exp += 100; + dekkerMul2(rr, 1.0e-100, -1.99918998026028836196e-117); + } + while( rr[0]>9.223372036854774784e+28 ){ + exp += 10; + dekkerMul2(rr, 1.0e-10, -3.6432197315497741579e-27); + } + while( rr[0]>9.223372036854774784e+18 ){ + exp += 1; + dekkerMul2(rr, 1.0e-01, -5.5511151231257827021e-18); + } + }else{ + while( rr[0]<9.223372036854774784e-83 ){ + exp -= 100; + dekkerMul2(rr, 1.0e+100, -1.5902891109759918046e+83); + } + while( rr[0]<9.223372036854774784e+07 ){ + exp -= 10; + dekkerMul2(rr, 1.0e+10, 0.0); + } + while( rr[0]<9.22337203685477478e+17 ){ + exp -= 1; + dekkerMul2(rr, 1.0e+01, 0.0); + } + } + v = rr[1]<0.0 ? (u64)rr[0]-(u64)(-rr[1]) : (u64)rr[0]+(u64)rr[1]; + + /* Extract significant digits. */ + i = sizeof(p->zBuf)-1; + assert( v>0 ); + while( v ){ p->zBuf[i--] = (v%10) + '0'; v /= 10; } + assert( i>=0 && izBuf)-1 ); + p->n = sizeof(p->zBuf) - 1 - i; + assert( p->n>0 ); + assert( p->nzBuf) ); + p->iDP = p->n + exp; + if( iRound<=0 ){ + iRound = p->iDP - iRound; + if( iRound==0 && p->zBuf[i+1]>='5' ){ + iRound = 1; + p->zBuf[i--] = '0'; + p->n++; + p->iDP++; + } + } + if( iRound>0 && (iRoundn || p->n>mxRound) ){ + char *z = &p->zBuf[i+1]; + if( iRound>mxRound ) iRound = mxRound; + p->n = iRound; + if( z[iRound]>='5' ){ + int j = iRound-1; + while( 1 /*exit-by-break*/ ){ + z[j]++; + if( z[j]<='9' ) break; + z[j] = '0'; + if( j==0 ){ + p->z[i--] = '1'; + p->n++; + p->iDP++; + break; + }else{ + j--; + } + } + } + } + p->z = &p->zBuf[i+1]; + assert( i+p->n < sizeof(p->zBuf) ); + assert( p->n>0 ); + while( p->z[p->n-1]=='0' ){ + p->n--; + assert( p->n>0 ); + } +} + +/* +** Try to convert z into an unsigned 32-bit integer. Return true on +** success and false if there is an error. +** +** Only decimal notation is accepted. +*/ +SQLITE_PRIVATE int sqlite3GetUInt32(const char *z, u32 *pI){ + u64 v = 0; + int i; + for(i=0; sqlite3Isdigit(z[i]); i++){ + v = v*10 + z[i] - '0'; + if( v>4294967296LL ){ *pI = 0; return 0; } + } + if( i==0 || z[i]!=0 ){ *pI = 0; return 0; } + *pI = (u32)v; + return 1; +} + +/* +** The variable-length integer encoding is as follows: +** +** KEY: +** A = 0xxxxxxx 7 bits of data and one flag bit +** B = 1xxxxxxx 7 bits of data and one flag bit +** C = xxxxxxxx 8 bits of data +** +** 7 bits - A +** 14 bits - BA +** 21 bits - BBA +** 28 bits - BBBA +** 35 bits - BBBBA +** 42 bits - BBBBBA +** 49 bits - BBBBBBA +** 56 bits - BBBBBBBA +** 64 bits - BBBBBBBBC +*/ + +/* +** Write a 64-bit variable-length integer to memory starting at p[0]. +** The length of data write will be between 1 and 9 bytes. The number +** of bytes written is returned. +** +** A variable-length integer consists of the lower 7 bits of each byte +** for all bytes that have the 8th bit set and one byte with the 8th +** bit clear. Except, if we get to the 9th byte, it stores the full +** 8 bits and is the last byte. +*/ +static int SQLITE_NOINLINE putVarint64(unsigned char *p, u64 v){ + int i, j, n; + u8 buf[10]; + if( v & (((u64)0xff000000)<<32) ){ + p[8] = (u8)v; + v >>= 8; + for(i=7; i>=0; i--){ + p[i] = (u8)((v & 0x7f) | 0x80); + v >>= 7; + } + return 9; + } + n = 0; + do{ + buf[n++] = (u8)((v & 0x7f) | 0x80); + v >>= 7; + }while( v!=0 ); + buf[0] &= 0x7f; + assert( n<=9 ); + for(i=0, j=n-1; j>=0; j--, i++){ + p[i] = buf[j]; + } + return n; +} +SQLITE_PRIVATE int sqlite3PutVarint(unsigned char *p, u64 v){ + if( v<=0x7f ){ + p[0] = v&0x7f; + return 1; + } + if( v<=0x3fff ){ + p[0] = ((v>>7)&0x7f)|0x80; + p[1] = v&0x7f; + return 2; + } + return putVarint64(p,v); +} + +/* +** Bitmasks used by sqlite3GetVarint(). These precomputed constants +** are defined here rather than simply putting the constant expressions +** inline in order to work around bugs in the RVT compiler. +** +** SLOT_2_0 A mask for (0x7f<<14) | 0x7f +** +** SLOT_4_2_0 A mask for (0x7f<<28) | SLOT_2_0 +*/ +#define SLOT_2_0 0x001fc07f +#define SLOT_4_2_0 0xf01fc07f + + +/* +** Read a 64-bit variable-length integer from memory starting at p[0]. +** Return the number of bytes read. The value is stored in *v. +*/ +SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *p, u64 *v){ + u32 a,b,s; + + if( ((signed char*)p)[0]>=0 ){ + *v = *p; + return 1; + } + if( ((signed char*)p)[1]>=0 ){ + *v = ((u32)(p[0]&0x7f)<<7) | p[1]; + return 2; + } + + /* Verify that constants are precomputed correctly */ + assert( SLOT_2_0 == ((0x7f<<14) | (0x7f)) ); + assert( SLOT_4_2_0 == ((0xfU<<28) | (0x7f<<14) | (0x7f)) ); + + a = ((u32)p[0])<<14; + b = p[1]; + p += 2; + a |= *p; + /* a: p0<<14 | p2 (unmasked) */ + if (!(a&0x80)) + { + a &= SLOT_2_0; + b &= 0x7f; + b = b<<7; + a |= b; + *v = a; + return 3; + } + + /* CSE1 from below */ + a &= SLOT_2_0; + p++; + b = b<<14; + b |= *p; + /* b: p1<<14 | p3 (unmasked) */ + if (!(b&0x80)) + { + b &= SLOT_2_0; + /* moved CSE1 up */ + /* a &= (0x7f<<14)|(0x7f); */ + a = a<<7; + a |= b; + *v = a; + return 4; + } + + /* a: p0<<14 | p2 (masked) */ + /* b: p1<<14 | p3 (unmasked) */ + /* 1:save off p0<<21 | p1<<14 | p2<<7 | p3 (masked) */ + /* moved CSE1 up */ + /* a &= (0x7f<<14)|(0x7f); */ + b &= SLOT_2_0; + s = a; + /* s: p0<<14 | p2 (masked) */ + + p++; + a = a<<14; + a |= *p; + /* a: p0<<28 | p2<<14 | p4 (unmasked) */ + if (!(a&0x80)) + { + /* we can skip these cause they were (effectively) done above + ** while calculating s */ + /* a &= (0x7f<<28)|(0x7f<<14)|(0x7f); */ + /* b &= (0x7f<<14)|(0x7f); */ + b = b<<7; + a |= b; + s = s>>18; + *v = ((u64)s)<<32 | a; + return 5; + } + + /* 2:save off p0<<21 | p1<<14 | p2<<7 | p3 (masked) */ + s = s<<7; + s |= b; + /* s: p0<<21 | p1<<14 | p2<<7 | p3 (masked) */ + + p++; + b = b<<14; + b |= *p; + /* b: p1<<28 | p3<<14 | p5 (unmasked) */ + if (!(b&0x80)) + { + /* we can skip this cause it was (effectively) done above in calc'ing s */ + /* b &= (0x7f<<28)|(0x7f<<14)|(0x7f); */ + a &= SLOT_2_0; + a = a<<7; + a |= b; + s = s>>18; + *v = ((u64)s)<<32 | a; + return 6; + } + + p++; + a = a<<14; + a |= *p; + /* a: p2<<28 | p4<<14 | p6 (unmasked) */ + if (!(a&0x80)) + { + a &= SLOT_4_2_0; + b &= SLOT_2_0; + b = b<<7; + a |= b; + s = s>>11; + *v = ((u64)s)<<32 | a; + return 7; + } + + /* CSE2 from below */ + a &= SLOT_2_0; + p++; + b = b<<14; + b |= *p; + /* b: p3<<28 | p5<<14 | p7 (unmasked) */ + if (!(b&0x80)) + { + b &= SLOT_4_2_0; + /* moved CSE2 up */ + /* a &= (0x7f<<14)|(0x7f); */ + a = a<<7; + a |= b; + s = s>>4; + *v = ((u64)s)<<32 | a; + return 8; + } + + p++; + a = a<<15; + a |= *p; + /* a: p4<<29 | p6<<15 | p8 (unmasked) */ + + /* moved CSE2 up */ + /* a &= (0x7f<<29)|(0x7f<<15)|(0xff); */ + b &= SLOT_2_0; + b = b<<8; + a |= b; + + s = s<<4; + b = p[-4]; + b &= 0x7f; + b = b>>3; + s |= b; + + *v = ((u64)s)<<32 | a; + + return 9; +} + +/* +** Read a 32-bit variable-length integer from memory starting at p[0]. +** Return the number of bytes read. The value is stored in *v. +** +** If the varint stored in p[0] is larger than can fit in a 32-bit unsigned +** integer, then set *v to 0xffffffff. +** +** A MACRO version, getVarint32, is provided which inlines the +** single-byte case. All code should use the MACRO version as +** this function assumes the single-byte case has already been handled. +*/ +SQLITE_PRIVATE u8 sqlite3GetVarint32(const unsigned char *p, u32 *v){ + u64 v64; + u8 n; + + /* Assume that the single-byte case has already been handled by + ** the getVarint32() macro */ + assert( (p[0] & 0x80)!=0 ); + + if( (p[1] & 0x80)==0 ){ + /* This is the two-byte case */ + *v = ((p[0]&0x7f)<<7) | p[1]; + return 2; + } + if( (p[2] & 0x80)==0 ){ + /* This is the three-byte case */ + *v = ((p[0]&0x7f)<<14) | ((p[1]&0x7f)<<7) | p[2]; + return 3; + } + /* four or more bytes */ + n = sqlite3GetVarint(p, &v64); + assert( n>3 && n<=9 ); + if( (v64 & SQLITE_MAX_U32)!=v64 ){ + *v = 0xffffffff; + }else{ + *v = (u32)v64; + } + return n; +} + +/* +** Return the number of bytes that will be needed to store the given +** 64-bit integer. +*/ +SQLITE_PRIVATE int sqlite3VarintLen(u64 v){ + int i; + for(i=1; (v >>= 7)!=0; i++){ assert( i<10 ); } + return i; +} + + +/* +** Read or write a four-byte big-endian integer value. +*/ +SQLITE_PRIVATE u32 sqlite3Get4byte(const u8 *p){ +#if SQLITE_BYTEORDER==4321 + u32 x; + memcpy(&x,p,4); + return x; +#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 + u32 x; + memcpy(&x,p,4); + return __builtin_bswap32(x); +#elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 + u32 x; + memcpy(&x,p,4); + return _byteswap_ulong(x); +#else + testcase( p[0]&0x80 ); + return ((unsigned)p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3]; +#endif +} +SQLITE_PRIVATE void sqlite3Put4byte(unsigned char *p, u32 v){ +#if SQLITE_BYTEORDER==4321 + memcpy(p,&v,4); +#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 + u32 x = __builtin_bswap32(v); + memcpy(p,&x,4); +#elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 + u32 x = _byteswap_ulong(v); + memcpy(p,&x,4); +#else + p[0] = (u8)(v>>24); + p[1] = (u8)(v>>16); + p[2] = (u8)(v>>8); + p[3] = (u8)v; +#endif +} + + + +/* +** Translate a single byte of Hex into an integer. +** This routine only works if h really is a valid hexadecimal +** character: 0..9a..fA..F +*/ +SQLITE_PRIVATE u8 sqlite3HexToInt(int h){ + assert( (h>='0' && h<='9') || (h>='a' && h<='f') || (h>='A' && h<='F') ); +#ifdef SQLITE_ASCII + h += 9*(1&(h>>6)); +#endif +#ifdef SQLITE_EBCDIC + h += 9*(1&~(h>>4)); +#endif + return (u8)(h & 0xf); +} + +#if !defined(SQLITE_OMIT_BLOB_LITERAL) +/* +** Convert a BLOB literal of the form "x'hhhhhh'" into its binary +** value. Return a pointer to its binary value. Space to hold the +** binary value has been obtained from malloc and must be freed by +** the calling routine. +*/ +SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3 *db, const char *z, int n){ + char *zBlob; + int i; + + zBlob = (char *)sqlite3DbMallocRawNN(db, n/2 + 1); + n--; + if( zBlob ){ + for(i=0; ieOpenState; + if( eOpenState!=SQLITE_STATE_OPEN ){ + if( sqlite3SafetyCheckSickOrOk(db) ){ + testcase( sqlite3GlobalConfig.xLog!=0 ); + logBadConnection("unopened"); + } + return 0; + }else{ + return 1; + } +} +SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3 *db){ + u8 eOpenState; + eOpenState = db->eOpenState; + if( eOpenState!=SQLITE_STATE_SICK && + eOpenState!=SQLITE_STATE_OPEN && + eOpenState!=SQLITE_STATE_BUSY ){ + testcase( sqlite3GlobalConfig.xLog!=0 ); + logBadConnection("invalid"); + return 0; + }else{ + return 1; + } +} + +/* +** Attempt to add, subtract, or multiply the 64-bit signed value iB against +** the other 64-bit signed integer at *pA and store the result in *pA. +** Return 0 on success. Or if the operation would have resulted in an +** overflow, leave *pA unchanged and return 1. +*/ +SQLITE_PRIVATE int sqlite3AddInt64(i64 *pA, i64 iB){ +#if GCC_VERSION>=5004000 && !defined(__INTEL_COMPILER) + return __builtin_add_overflow(*pA, iB, pA); +#else + i64 iA = *pA; + testcase( iA==0 ); testcase( iA==1 ); + testcase( iB==-1 ); testcase( iB==0 ); + if( iB>=0 ){ + testcase( iA>0 && LARGEST_INT64 - iA == iB ); + testcase( iA>0 && LARGEST_INT64 - iA == iB - 1 ); + if( iA>0 && LARGEST_INT64 - iA < iB ) return 1; + }else{ + testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 1 ); + testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 2 ); + if( iA<0 && -(iA + LARGEST_INT64) > iB + 1 ) return 1; + } + *pA += iB; + return 0; +#endif +} +SQLITE_PRIVATE int sqlite3SubInt64(i64 *pA, i64 iB){ +#if GCC_VERSION>=5004000 && !defined(__INTEL_COMPILER) + return __builtin_sub_overflow(*pA, iB, pA); +#else + testcase( iB==SMALLEST_INT64+1 ); + if( iB==SMALLEST_INT64 ){ + testcase( (*pA)==(-1) ); testcase( (*pA)==0 ); + if( (*pA)>=0 ) return 1; + *pA -= iB; + return 0; + }else{ + return sqlite3AddInt64(pA, -iB); + } +#endif +} +SQLITE_PRIVATE int sqlite3MulInt64(i64 *pA, i64 iB){ +#if GCC_VERSION>=5004000 && !defined(__INTEL_COMPILER) + return __builtin_mul_overflow(*pA, iB, pA); +#else + i64 iA = *pA; + if( iB>0 ){ + if( iA>LARGEST_INT64/iB ) return 1; + if( iA0 ){ + if( iBLARGEST_INT64/-iB ) return 1; + } + } + *pA = iA*iB; + return 0; +#endif +} + +/* +** Compute the absolute value of a 32-bit signed integer, if possible. Or +** if the integer has a value of -2147483648, return +2147483647 +*/ +SQLITE_PRIVATE int sqlite3AbsInt32(int x){ + if( x>=0 ) return x; + if( x==(int)0x80000000 ) return 0x7fffffff; + return -x; +} + +#ifdef SQLITE_ENABLE_8_3_NAMES +/* +** If SQLITE_ENABLE_8_3_NAMES is set at compile-time and if the database +** filename in zBaseFilename is a URI with the "8_3_names=1" parameter and +** if filename in z[] has a suffix (a.k.a. "extension") that is longer than +** three characters, then shorten the suffix on z[] to be the last three +** characters of the original suffix. +** +** If SQLITE_ENABLE_8_3_NAMES is set to 2 at compile-time, then always +** do the suffix shortening regardless of URI parameter. +** +** Examples: +** +** test.db-journal => test.nal +** test.db-wal => test.wal +** test.db-shm => test.shm +** test.db-mj7f3319fa => test.9fa +*/ +SQLITE_PRIVATE void sqlite3FileSuffix3(const char *zBaseFilename, char *z){ +#if SQLITE_ENABLE_8_3_NAMES<2 + if( sqlite3_uri_boolean(zBaseFilename, "8_3_names", 0) ) +#endif + { + int i, sz; + sz = sqlite3Strlen30(z); + for(i=sz-1; i>0 && z[i]!='/' && z[i]!='.'; i--){} + if( z[i]=='.' && ALWAYS(sz>i+4) ) memmove(&z[i+1], &z[sz-3], 4); + } +} +#endif + +/* +** Find (an approximate) sum of two LogEst values. This computation is +** not a simple "+" operator because LogEst is stored as a logarithmic +** value. +** +*/ +SQLITE_PRIVATE LogEst sqlite3LogEstAdd(LogEst a, LogEst b){ + static const unsigned char x[] = { + 10, 10, /* 0,1 */ + 9, 9, /* 2,3 */ + 8, 8, /* 4,5 */ + 7, 7, 7, /* 6,7,8 */ + 6, 6, 6, /* 9,10,11 */ + 5, 5, 5, /* 12-14 */ + 4, 4, 4, 4, /* 15-18 */ + 3, 3, 3, 3, 3, 3, /* 19-24 */ + 2, 2, 2, 2, 2, 2, 2, /* 25-31 */ + }; + if( a>=b ){ + if( a>b+49 ) return a; + if( a>b+31 ) return a+1; + return a+x[a-b]; + }else{ + if( b>a+49 ) return b; + if( b>a+31 ) return b+1; + return b+x[b-a]; + } +} + +/* +** Convert an integer into a LogEst. In other words, compute an +** approximation for 10*log2(x). +*/ +SQLITE_PRIVATE LogEst sqlite3LogEst(u64 x){ + static LogEst a[] = { 0, 2, 3, 5, 6, 7, 8, 9 }; + LogEst y = 40; + if( x<8 ){ + if( x<2 ) return 0; + while( x<8 ){ y -= 10; x <<= 1; } + }else{ +#if GCC_VERSION>=5004000 + int i = 60 - __builtin_clzll(x); + y += i*10; + x >>= i; +#else + while( x>255 ){ y += 40; x >>= 4; } /*OPTIMIZATION-IF-TRUE*/ + while( x>15 ){ y += 10; x >>= 1; } +#endif + } + return a[x&7] + y - 10; +} + +/* +** Convert a double into a LogEst +** In other words, compute an approximation for 10*log2(x). +*/ +SQLITE_PRIVATE LogEst sqlite3LogEstFromDouble(double x){ + u64 a; + LogEst e; + assert( sizeof(x)==8 && sizeof(a)==8 ); + if( x<=1 ) return 0; + if( x<=2000000000 ) return sqlite3LogEst((u64)x); + memcpy(&a, &x, 8); + e = (a>>52) - 1022; + return e*10; +} + +/* +** Convert a LogEst into an integer. +*/ +SQLITE_PRIVATE u64 sqlite3LogEstToInt(LogEst x){ + u64 n; + n = x%10; + x /= 10; + if( n>=5 ) n -= 2; + else if( n>=1 ) n -= 1; + if( x>60 ) return (u64)LARGEST_INT64; + return x>=3 ? (n+8)<<(x-3) : (n+8)>>(3-x); +} + +/* +** Add a new name/number pair to a VList. This might require that the +** VList object be reallocated, so return the new VList. If an OOM +** error occurs, the original VList returned and the +** db->mallocFailed flag is set. +** +** A VList is really just an array of integers. To destroy a VList, +** simply pass it to sqlite3DbFree(). +** +** The first integer is the number of integers allocated for the whole +** VList. The second integer is the number of integers actually used. +** Each name/number pair is encoded by subsequent groups of 3 or more +** integers. +** +** Each name/number pair starts with two integers which are the numeric +** value for the pair and the size of the name/number pair, respectively. +** The text name overlays one or more following integers. The text name +** is always zero-terminated. +** +** Conceptually: +** +** struct VList { +** int nAlloc; // Number of allocated slots +** int nUsed; // Number of used slots +** struct VListEntry { +** int iValue; // Value for this entry +** int nSlot; // Slots used by this entry +** // ... variable name goes here +** } a[0]; +** } +** +** During code generation, pointers to the variable names within the +** VList are taken. When that happens, nAlloc is set to zero as an +** indication that the VList may never again be enlarged, since the +** accompanying realloc() would invalidate the pointers. +*/ +SQLITE_PRIVATE VList *sqlite3VListAdd( + sqlite3 *db, /* The database connection used for malloc() */ + VList *pIn, /* The input VList. Might be NULL */ + const char *zName, /* Name of symbol to add */ + int nName, /* Bytes of text in zName */ + int iVal /* Value to associate with zName */ +){ + int nInt; /* number of sizeof(int) objects needed for zName */ + char *z; /* Pointer to where zName will be stored */ + int i; /* Index in pIn[] where zName is stored */ + + nInt = nName/4 + 3; + assert( pIn==0 || pIn[0]>=3 ); /* Verify ok to add new elements */ + if( pIn==0 || pIn[1]+nInt > pIn[0] ){ + /* Enlarge the allocation */ + sqlite3_int64 nAlloc = (pIn ? 2*(sqlite3_int64)pIn[0] : 10) + nInt; + VList *pOut = sqlite3DbRealloc(db, pIn, nAlloc*sizeof(int)); + if( pOut==0 ) return pIn; + if( pIn==0 ) pOut[1] = 2; + pIn = pOut; + pIn[0] = nAlloc; + } + i = pIn[1]; + pIn[i] = iVal; + pIn[i+1] = nInt; + z = (char*)&pIn[i+2]; + pIn[1] = i+nInt; + assert( pIn[1]<=pIn[0] ); + memcpy(z, zName, nName); + z[nName] = 0; + return pIn; +} + +/* +** Return a pointer to the name of a variable in the given VList that +** has the value iVal. Or return a NULL if there is no such variable in +** the list +*/ +SQLITE_PRIVATE const char *sqlite3VListNumToName(VList *pIn, int iVal){ + int i, mx; + if( pIn==0 ) return 0; + mx = pIn[1]; + i = 2; + do{ + if( pIn[i]==iVal ) return (char*)&pIn[i+2]; + i += pIn[i+1]; + }while( i */ + +/* Turn bulk memory into a hash table object by initializing the +** fields of the Hash structure. +** +** "pNew" is a pointer to the hash table that is to be initialized. +*/ +SQLITE_PRIVATE void sqlite3HashInit(Hash *pNew){ + assert( pNew!=0 ); + pNew->first = 0; + pNew->count = 0; + pNew->htsize = 0; + pNew->ht = 0; +} + +/* Remove all entries from a hash table. Reclaim all memory. +** Call this routine to delete a hash table or to reset a hash table +** to the empty state. +*/ +SQLITE_PRIVATE void sqlite3HashClear(Hash *pH){ + HashElem *elem; /* For looping over all elements of the table */ + + assert( pH!=0 ); + elem = pH->first; + pH->first = 0; + sqlite3_free(pH->ht); + pH->ht = 0; + pH->htsize = 0; + while( elem ){ + HashElem *next_elem = elem->next; + sqlite3_free(elem); + elem = next_elem; + } + pH->count = 0; +} + +/* +** The hashing function. +*/ +static unsigned int strHash(const char *z){ + unsigned int h = 0; + while( z[0] ){ /*OPTIMIZATION-IF-TRUE*/ + /* Knuth multiplicative hashing. (Sorting & Searching, p. 510). + ** 0x9e3779b1 is 2654435761 which is the closest prime number to + ** (2**32)*golden_ratio, where golden_ratio = (sqrt(5) - 1)/2. + ** + ** Only bits 0xdf for ASCII and bits 0xbf for EBCDIC each octet are + ** hashed since the omitted bits determine the upper/lower case difference. + */ +#ifdef SQLITE_EBCDIC + h += 0xbf & (unsigned char)*(z++); +#else + h += 0xdf & (unsigned char)*(z++); +#endif + h *= 0x9e3779b1; + } + return h; +} + + +/* Link pNew element into the hash table pH. If pEntry!=0 then also +** insert pNew into the pEntry hash bucket. +*/ +static void insertElement( + Hash *pH, /* The complete hash table */ + struct _ht *pEntry, /* The entry into which pNew is inserted */ + HashElem *pNew /* The element to be inserted */ +){ + HashElem *pHead; /* First element already in pEntry */ + if( pEntry ){ + pHead = pEntry->count ? pEntry->chain : 0; + pEntry->count++; + pEntry->chain = pNew; + }else{ + pHead = 0; + } + if( pHead ){ + pNew->next = pHead; + pNew->prev = pHead->prev; + if( pHead->prev ){ pHead->prev->next = pNew; } + else { pH->first = pNew; } + pHead->prev = pNew; + }else{ + pNew->next = pH->first; + if( pH->first ){ pH->first->prev = pNew; } + pNew->prev = 0; + pH->first = pNew; + } +} + + +/* Resize the hash table so that it contains "new_size" buckets. +** +** The hash table might fail to resize if sqlite3_malloc() fails or +** if the new size is the same as the prior size. +** Return TRUE if the resize occurs and false if not. +*/ +static int rehash(Hash *pH, unsigned int new_size){ + struct _ht *new_ht; /* The new hash table */ + HashElem *elem, *next_elem; /* For looping over existing elements */ + +#if SQLITE_MALLOC_SOFT_LIMIT>0 + if( new_size*sizeof(struct _ht)>SQLITE_MALLOC_SOFT_LIMIT ){ + new_size = SQLITE_MALLOC_SOFT_LIMIT/sizeof(struct _ht); + } + if( new_size==pH->htsize ) return 0; +#endif + + /* The inability to allocates space for a larger hash table is + ** a performance hit but it is not a fatal error. So mark the + ** allocation as a benign. Use sqlite3Malloc()/memset(0) instead of + ** sqlite3MallocZero() to make the allocation, as sqlite3MallocZero() + ** only zeroes the requested number of bytes whereas this module will + ** use the actual amount of space allocated for the hash table (which + ** may be larger than the requested amount). + */ + sqlite3BeginBenignMalloc(); + new_ht = (struct _ht *)sqlite3Malloc( new_size*sizeof(struct _ht) ); + sqlite3EndBenignMalloc(); + + if( new_ht==0 ) return 0; + sqlite3_free(pH->ht); + pH->ht = new_ht; + pH->htsize = new_size = sqlite3MallocSize(new_ht)/sizeof(struct _ht); + memset(new_ht, 0, new_size*sizeof(struct _ht)); + for(elem=pH->first, pH->first=0; elem; elem = next_elem){ + next_elem = elem->next; + insertElement(pH, &new_ht[elem->h % new_size], elem); + } + return 1; +} + +/* This function (for internal use only) locates an element in an +** hash table that matches the given key. If no element is found, +** a pointer to a static null element with HashElem.data==0 is returned. +** If pH is not NULL, then the hash for this key is written to *pH. +*/ +static HashElem *findElementWithHash( + const Hash *pH, /* The pH to be searched */ + const char *pKey, /* The key we are searching for */ + unsigned int *pHash /* Write the hash value here */ +){ + HashElem *elem; /* Used to loop thru the element list */ + unsigned int count; /* Number of elements left to test */ + unsigned int h; /* The computed hash */ + static HashElem nullElement = { 0, 0, 0, 0, 0 }; + + h = strHash(pKey); + if( pH->ht ){ /*OPTIMIZATION-IF-TRUE*/ + struct _ht *pEntry; + pEntry = &pH->ht[h % pH->htsize]; + elem = pEntry->chain; + count = pEntry->count; + }else{ + elem = pH->first; + count = pH->count; + } + if( pHash ) *pHash = h; + while( count ){ + assert( elem!=0 ); + if( h==elem->h && sqlite3StrICmp(elem->pKey,pKey)==0 ){ + return elem; + } + elem = elem->next; + count--; + } + return &nullElement; +} + +/* Remove a single entry from the hash table given a pointer to that +** element and a hash on the element's key. +*/ +static void removeElement( + Hash *pH, /* The pH containing "elem" */ + HashElem *elem /* The element to be removed from the pH */ +){ + struct _ht *pEntry; + if( elem->prev ){ + elem->prev->next = elem->next; + }else{ + pH->first = elem->next; + } + if( elem->next ){ + elem->next->prev = elem->prev; + } + if( pH->ht ){ + pEntry = &pH->ht[elem->h % pH->htsize]; + if( pEntry->chain==elem ){ + pEntry->chain = elem->next; + } + assert( pEntry->count>0 ); + pEntry->count--; + } + sqlite3_free( elem ); + pH->count--; + if( pH->count==0 ){ + assert( pH->first==0 ); + assert( pH->count==0 ); + sqlite3HashClear(pH); + } +} + +/* Attempt to locate an element of the hash table pH with a key +** that matches pKey. Return the data for this element if it is +** found, or NULL if there is no match. +*/ +SQLITE_PRIVATE void *sqlite3HashFind(const Hash *pH, const char *pKey){ + assert( pH!=0 ); + assert( pKey!=0 ); + return findElementWithHash(pH, pKey, 0)->data; +} + +/* Insert an element into the hash table pH. The key is pKey +** and the data is "data". +** +** If no element exists with a matching key, then a new +** element is created and NULL is returned. +** +** If another element already exists with the same key, then the +** new data replaces the old data and the old data is returned. +** The key is not copied in this instance. If a malloc fails, then +** the new data is returned and the hash table is unchanged. +** +** If the "data" parameter to this function is NULL, then the +** element corresponding to "key" is removed from the hash table. +*/ +SQLITE_PRIVATE void *sqlite3HashInsert(Hash *pH, const char *pKey, void *data){ + unsigned int h; /* the hash of the key modulo hash table size */ + HashElem *elem; /* Used to loop thru the element list */ + HashElem *new_elem; /* New element added to the pH */ + + assert( pH!=0 ); + assert( pKey!=0 ); + elem = findElementWithHash(pH,pKey,&h); + if( elem->data ){ + void *old_data = elem->data; + if( data==0 ){ + removeElement(pH,elem); + }else{ + elem->data = data; + elem->pKey = pKey; + } + return old_data; + } + if( data==0 ) return 0; + new_elem = (HashElem*)sqlite3Malloc( sizeof(HashElem) ); + if( new_elem==0 ) return data; + new_elem->pKey = pKey; + new_elem->h = h; + new_elem->data = data; + pH->count++; + if( pH->count>=5 && pH->count > 2*pH->htsize ){ + rehash(pH, pH->count*3); + } + insertElement(pH, pH->ht ? &pH->ht[new_elem->h % pH->htsize] : 0, new_elem); + return 0; +} + + +/************** End of hash.c ************************************************/ +/************** Begin file opcodes.c *****************************************/ +/* Automatically generated. Do not edit */ +/* See the tool/mkopcodec.tcl script for details. */ +#if !defined(SQLITE_OMIT_EXPLAIN) \ + || defined(VDBE_PROFILE) \ + || defined(SQLITE_DEBUG) +#if defined(SQLITE_ENABLE_EXPLAIN_COMMENTS) || defined(SQLITE_DEBUG) +# define OpHelp(X) "\0" X +#else +# define OpHelp(X) +#endif +SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){ + static const char *const azName[] = { + /* 0 */ "Savepoint" OpHelp(""), + /* 1 */ "AutoCommit" OpHelp(""), + /* 2 */ "Transaction" OpHelp(""), + /* 3 */ "Checkpoint" OpHelp(""), + /* 4 */ "JournalMode" OpHelp(""), + /* 5 */ "Vacuum" OpHelp(""), + /* 6 */ "VFilter" OpHelp("iplan=r[P3] zplan='P4'"), + /* 7 */ "VUpdate" OpHelp("data=r[P3@P2]"), + /* 8 */ "Init" OpHelp("Start at P2"), + /* 9 */ "Goto" OpHelp(""), + /* 10 */ "Gosub" OpHelp(""), + /* 11 */ "InitCoroutine" OpHelp(""), + /* 12 */ "Yield" OpHelp(""), + /* 13 */ "MustBeInt" OpHelp(""), + /* 14 */ "Jump" OpHelp(""), + /* 15 */ "Once" OpHelp(""), + /* 16 */ "If" OpHelp(""), + /* 17 */ "IfNot" OpHelp(""), + /* 18 */ "IsType" OpHelp("if typeof(P1.P3) in P5 goto P2"), + /* 19 */ "Not" OpHelp("r[P2]= !r[P1]"), + /* 20 */ "IfNullRow" OpHelp("if P1.nullRow then r[P3]=NULL, goto P2"), + /* 21 */ "SeekLT" OpHelp("key=r[P3@P4]"), + /* 22 */ "SeekLE" OpHelp("key=r[P3@P4]"), + /* 23 */ "SeekGE" OpHelp("key=r[P3@P4]"), + /* 24 */ "SeekGT" OpHelp("key=r[P3@P4]"), + /* 25 */ "IfNotOpen" OpHelp("if( !csr[P1] ) goto P2"), + /* 26 */ "IfNoHope" OpHelp("key=r[P3@P4]"), + /* 27 */ "NoConflict" OpHelp("key=r[P3@P4]"), + /* 28 */ "NotFound" OpHelp("key=r[P3@P4]"), + /* 29 */ "Found" OpHelp("key=r[P3@P4]"), + /* 30 */ "SeekRowid" OpHelp("intkey=r[P3]"), + /* 31 */ "NotExists" OpHelp("intkey=r[P3]"), + /* 32 */ "Last" OpHelp(""), + /* 33 */ "IfSizeBetween" OpHelp(""), + /* 34 */ "SorterSort" OpHelp(""), + /* 35 */ "Sort" OpHelp(""), + /* 36 */ "Rewind" OpHelp(""), + /* 37 */ "IfEmpty" OpHelp("if( empty(P1) ) goto P2"), + /* 38 */ "SorterNext" OpHelp(""), + /* 39 */ "Prev" OpHelp(""), + /* 40 */ "Next" OpHelp(""), + /* 41 */ "IdxLE" OpHelp("key=r[P3@P4]"), + /* 42 */ "IdxGT" OpHelp("key=r[P3@P4]"), + /* 43 */ "Or" OpHelp("r[P3]=(r[P1] || r[P2])"), + /* 44 */ "And" OpHelp("r[P3]=(r[P1] && r[P2])"), + /* 45 */ "IdxLT" OpHelp("key=r[P3@P4]"), + /* 46 */ "IdxGE" OpHelp("key=r[P3@P4]"), + /* 47 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"), + /* 48 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"), + /* 49 */ "Program" OpHelp(""), + /* 50 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"), + /* 51 */ "IsNull" OpHelp("if r[P1]==NULL goto P2"), + /* 52 */ "NotNull" OpHelp("if r[P1]!=NULL goto P2"), + /* 53 */ "Ne" OpHelp("IF r[P3]!=r[P1]"), + /* 54 */ "Eq" OpHelp("IF r[P3]==r[P1]"), + /* 55 */ "Gt" OpHelp("IF r[P3]>r[P1]"), + /* 56 */ "Le" OpHelp("IF r[P3]<=r[P1]"), + /* 57 */ "Lt" OpHelp("IF r[P3]=r[P1]"), + /* 59 */ "ElseEq" OpHelp(""), + /* 60 */ "IfPos" OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"), + /* 61 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]--, goto P2"), + /* 62 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"), + /* 63 */ "IncrVacuum" OpHelp(""), + /* 64 */ "VNext" OpHelp(""), + /* 65 */ "Filter" OpHelp("if key(P3@P4) not in filter(P1) goto P2"), + /* 66 */ "PureFunc" OpHelp("r[P3]=func(r[P2@NP])"), + /* 67 */ "Function" OpHelp("r[P3]=func(r[P2@NP])"), + /* 68 */ "Return" OpHelp(""), + /* 69 */ "EndCoroutine" OpHelp(""), + /* 70 */ "HaltIfNull" OpHelp("if r[P3]=null halt"), + /* 71 */ "Halt" OpHelp(""), + /* 72 */ "Integer" OpHelp("r[P2]=P1"), + /* 73 */ "Int64" OpHelp("r[P2]=P4"), + /* 74 */ "String" OpHelp("r[P2]='P4' (len=P1)"), + /* 75 */ "BeginSubrtn" OpHelp("r[P2]=NULL"), + /* 76 */ "Null" OpHelp("r[P2..P3]=NULL"), + /* 77 */ "SoftNull" OpHelp("r[P1]=NULL"), + /* 78 */ "Blob" OpHelp("r[P2]=P4 (len=P1)"), + /* 79 */ "Variable" OpHelp("r[P2]=parameter(P1)"), + /* 80 */ "Move" OpHelp("r[P2@P3]=r[P1@P3]"), + /* 81 */ "Copy" OpHelp("r[P2@P3+1]=r[P1@P3+1]"), + /* 82 */ "SCopy" OpHelp("r[P2]=r[P1]"), + /* 83 */ "IntCopy" OpHelp("r[P2]=r[P1]"), + /* 84 */ "FkCheck" OpHelp(""), + /* 85 */ "ResultRow" OpHelp("output=r[P1@P2]"), + /* 86 */ "CollSeq" OpHelp(""), + /* 87 */ "AddImm" OpHelp("r[P1]=r[P1]+P2"), + /* 88 */ "RealAffinity" OpHelp(""), + /* 89 */ "Cast" OpHelp("affinity(r[P1])"), + /* 90 */ "Permutation" OpHelp(""), + /* 91 */ "Compare" OpHelp("r[P1@P3] <-> r[P2@P3]"), + /* 92 */ "IsTrue" OpHelp("r[P2] = coalesce(r[P1]==TRUE,P3) ^ P4"), + /* 93 */ "ZeroOrNull" OpHelp("r[P2] = 0 OR NULL"), + /* 94 */ "Offset" OpHelp("r[P3] = sqlite_offset(P1)"), + /* 95 */ "Column" OpHelp("r[P3]=PX cursor P1 column P2"), + /* 96 */ "TypeCheck" OpHelp("typecheck(r[P1@P2])"), + /* 97 */ "Affinity" OpHelp("affinity(r[P1@P2])"), + /* 98 */ "MakeRecord" OpHelp("r[P3]=mkrec(r[P1@P2])"), + /* 99 */ "Count" OpHelp("r[P2]=count()"), + /* 100 */ "ReadCookie" OpHelp(""), + /* 101 */ "SetCookie" OpHelp(""), + /* 102 */ "ReopenIdx" OpHelp("root=P2 iDb=P3"), + /* 103 */ "BitAnd" OpHelp("r[P3]=r[P1]&r[P2]"), + /* 104 */ "BitOr" OpHelp("r[P3]=r[P1]|r[P2]"), + /* 105 */ "ShiftLeft" OpHelp("r[P3]=r[P2]<>r[P1]"), + /* 107 */ "Add" OpHelp("r[P3]=r[P1]+r[P2]"), + /* 108 */ "Subtract" OpHelp("r[P3]=r[P2]-r[P1]"), + /* 109 */ "Multiply" OpHelp("r[P3]=r[P1]*r[P2]"), + /* 110 */ "Divide" OpHelp("r[P3]=r[P2]/r[P1]"), + /* 111 */ "Remainder" OpHelp("r[P3]=r[P2]%r[P1]"), + /* 112 */ "Concat" OpHelp("r[P3]=r[P2]+r[P1]"), + /* 113 */ "OpenRead" OpHelp("root=P2 iDb=P3"), + /* 114 */ "OpenWrite" OpHelp("root=P2 iDb=P3"), + /* 115 */ "BitNot" OpHelp("r[P2]= ~r[P1]"), + /* 116 */ "OpenDup" OpHelp(""), + /* 117 */ "OpenAutoindex" OpHelp("nColumn=P2"), + /* 118 */ "String8" OpHelp("r[P2]='P4'"), + /* 119 */ "OpenEphemeral" OpHelp("nColumn=P2"), + /* 120 */ "SorterOpen" OpHelp(""), + /* 121 */ "SequenceTest" OpHelp("if( cursor[P1].ctr++ ) pc = P2"), + /* 122 */ "OpenPseudo" OpHelp("P3 columns in r[P2]"), + /* 123 */ "Close" OpHelp(""), + /* 124 */ "ColumnsUsed" OpHelp(""), + /* 125 */ "SeekScan" OpHelp("Scan-ahead up to P1 rows"), + /* 126 */ "SeekHit" OpHelp("set P2<=seekHit<=P3"), + /* 127 */ "Sequence" OpHelp("r[P2]=cursor[P1].ctr++"), + /* 128 */ "NewRowid" OpHelp("r[P2]=rowid"), + /* 129 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"), + /* 130 */ "RowCell" OpHelp(""), + /* 131 */ "Delete" OpHelp(""), + /* 132 */ "ResetCount" OpHelp(""), + /* 133 */ "SorterCompare" OpHelp("if key(P1)!=trim(r[P3],P4) goto P2"), + /* 134 */ "SorterData" OpHelp("r[P2]=data"), + /* 135 */ "RowData" OpHelp("r[P2]=data"), + /* 136 */ "Rowid" OpHelp("r[P2]=PX rowid of P1"), + /* 137 */ "NullRow" OpHelp(""), + /* 138 */ "SeekEnd" OpHelp(""), + /* 139 */ "IdxInsert" OpHelp("key=r[P2]"), + /* 140 */ "SorterInsert" OpHelp("key=r[P2]"), + /* 141 */ "IdxDelete" OpHelp("key=r[P2@P3]"), + /* 142 */ "DeferredSeek" OpHelp("Move P3 to P1.rowid if needed"), + /* 143 */ "IdxRowid" OpHelp("r[P2]=rowid"), + /* 144 */ "FinishSeek" OpHelp(""), + /* 145 */ "Destroy" OpHelp(""), + /* 146 */ "Clear" OpHelp(""), + /* 147 */ "ResetSorter" OpHelp(""), + /* 148 */ "CreateBtree" OpHelp("r[P2]=root iDb=P1 flags=P3"), + /* 149 */ "SqlExec" OpHelp(""), + /* 150 */ "ParseSchema" OpHelp(""), + /* 151 */ "LoadAnalysis" OpHelp(""), + /* 152 */ "DropTable" OpHelp(""), + /* 153 */ "DropIndex" OpHelp(""), + /* 154 */ "Real" OpHelp("r[P2]=P4"), + /* 155 */ "DropTrigger" OpHelp(""), + /* 156 */ "IntegrityCk" OpHelp(""), + /* 157 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"), + /* 158 */ "Param" OpHelp(""), + /* 159 */ "FkCounter" OpHelp("fkctr[P1]+=P2"), + /* 160 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"), + /* 161 */ "OffsetLimit" OpHelp("if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1)"), + /* 162 */ "AggInverse" OpHelp("accum=r[P3] inverse(r[P2@P5])"), + /* 163 */ "AggStep" OpHelp("accum=r[P3] step(r[P2@P5])"), + /* 164 */ "AggStep1" OpHelp("accum=r[P3] step(r[P2@P5])"), + /* 165 */ "AggValue" OpHelp("r[P3]=value N=P2"), + /* 166 */ "AggFinal" OpHelp("accum=r[P1] N=P2"), + /* 167 */ "Expire" OpHelp(""), + /* 168 */ "CursorLock" OpHelp(""), + /* 169 */ "CursorUnlock" OpHelp(""), + /* 170 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"), + /* 171 */ "VBegin" OpHelp(""), + /* 172 */ "VCreate" OpHelp(""), + /* 173 */ "VDestroy" OpHelp(""), + /* 174 */ "VOpen" OpHelp(""), + /* 175 */ "VCheck" OpHelp(""), + /* 176 */ "VInitIn" OpHelp("r[P2]=ValueList(P1,P3)"), + /* 177 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"), + /* 178 */ "VRename" OpHelp(""), + /* 179 */ "Pagecount" OpHelp(""), + /* 180 */ "MaxPgcnt" OpHelp(""), + /* 181 */ "ClrSubtype" OpHelp("r[P1].subtype = 0"), + /* 182 */ "GetSubtype" OpHelp("r[P2] = r[P1].subtype"), + /* 183 */ "SetSubtype" OpHelp("r[P2].subtype = r[P1]"), + /* 184 */ "FilterAdd" OpHelp("filter(P1) += key(P3@P4)"), + /* 185 */ "Trace" OpHelp(""), + /* 186 */ "CursorHint" OpHelp(""), + /* 187 */ "ReleaseReg" OpHelp("release r[P1@P2] mask P3"), + /* 188 */ "Noop" OpHelp(""), + /* 189 */ "Explain" OpHelp(""), + /* 190 */ "Abortable" OpHelp(""), + }; + return azName[i]; +} +#endif + +/************** End of opcodes.c *********************************************/ +/************** Begin file os_kv.c *******************************************/ +/* +** 2022-09-06 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This file contains an experimental VFS layer that operates on a +** Key/Value storage engine where both keys and values must be pure +** text. +*/ +/* #include */ +#if SQLITE_OS_KV || (SQLITE_OS_UNIX && defined(SQLITE_OS_KV_OPTIONAL)) + +/***************************************************************************** +** Debugging logic +*/ + +/* SQLITE_KV_TRACE() is used for tracing calls to kvstorage routines. */ +#if 0 +#define SQLITE_KV_TRACE(X) printf X +#else +#define SQLITE_KV_TRACE(X) +#endif + +/* SQLITE_KV_LOG() is used for tracing calls to the VFS interface */ +#if 0 +#define SQLITE_KV_LOG(X) printf X +#else +#define SQLITE_KV_LOG(X) +#endif + + +/* +** Forward declaration of objects used by this VFS implementation +*/ +typedef struct KVVfsFile KVVfsFile; + +/* A single open file. There are only two files represented by this +** VFS - the database and the rollback journal. +*/ +struct KVVfsFile { + sqlite3_file base; /* IO methods */ + const char *zClass; /* Storage class */ + int isJournal; /* True if this is a journal file */ + unsigned int nJrnl; /* Space allocated for aJrnl[] */ + char *aJrnl; /* Journal content */ + int szPage; /* Last known page size */ + sqlite3_int64 szDb; /* Database file size. -1 means unknown */ + char *aData; /* Buffer to hold page data */ +}; +#define SQLITE_KVOS_SZ 133073 + +/* +** Methods for KVVfsFile +*/ +static int kvvfsClose(sqlite3_file*); +static int kvvfsReadDb(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst); +static int kvvfsReadJrnl(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst); +static int kvvfsWriteDb(sqlite3_file*,const void*,int iAmt, sqlite3_int64); +static int kvvfsWriteJrnl(sqlite3_file*,const void*,int iAmt, sqlite3_int64); +static int kvvfsTruncateDb(sqlite3_file*, sqlite3_int64 size); +static int kvvfsTruncateJrnl(sqlite3_file*, sqlite3_int64 size); +static int kvvfsSyncDb(sqlite3_file*, int flags); +static int kvvfsSyncJrnl(sqlite3_file*, int flags); +static int kvvfsFileSizeDb(sqlite3_file*, sqlite3_int64 *pSize); +static int kvvfsFileSizeJrnl(sqlite3_file*, sqlite3_int64 *pSize); +static int kvvfsLock(sqlite3_file*, int); +static int kvvfsUnlock(sqlite3_file*, int); +static int kvvfsCheckReservedLock(sqlite3_file*, int *pResOut); +static int kvvfsFileControlDb(sqlite3_file*, int op, void *pArg); +static int kvvfsFileControlJrnl(sqlite3_file*, int op, void *pArg); +static int kvvfsSectorSize(sqlite3_file*); +static int kvvfsDeviceCharacteristics(sqlite3_file*); + +/* +** Methods for sqlite3_vfs +*/ +static int kvvfsOpen(sqlite3_vfs*, const char *, sqlite3_file*, int , int *); +static int kvvfsDelete(sqlite3_vfs*, const char *zName, int syncDir); +static int kvvfsAccess(sqlite3_vfs*, const char *zName, int flags, int *); +static int kvvfsFullPathname(sqlite3_vfs*, const char *zName, int, char *zOut); +static void *kvvfsDlOpen(sqlite3_vfs*, const char *zFilename); +static int kvvfsRandomness(sqlite3_vfs*, int nByte, char *zOut); +static int kvvfsSleep(sqlite3_vfs*, int microseconds); +static int kvvfsCurrentTime(sqlite3_vfs*, double*); +static int kvvfsCurrentTimeInt64(sqlite3_vfs*, sqlite3_int64*); + +static sqlite3_vfs sqlite3OsKvvfsObject = { + 1, /* iVersion */ + sizeof(KVVfsFile), /* szOsFile */ + 1024, /* mxPathname */ + 0, /* pNext */ + "kvvfs", /* zName */ + 0, /* pAppData */ + kvvfsOpen, /* xOpen */ + kvvfsDelete, /* xDelete */ + kvvfsAccess, /* xAccess */ + kvvfsFullPathname, /* xFullPathname */ + kvvfsDlOpen, /* xDlOpen */ + 0, /* xDlError */ + 0, /* xDlSym */ + 0, /* xDlClose */ + kvvfsRandomness, /* xRandomness */ + kvvfsSleep, /* xSleep */ + kvvfsCurrentTime, /* xCurrentTime */ + 0, /* xGetLastError */ + kvvfsCurrentTimeInt64 /* xCurrentTimeInt64 */ +}; + +/* Methods for sqlite3_file objects referencing a database file +*/ +static sqlite3_io_methods kvvfs_db_io_methods = { + 1, /* iVersion */ + kvvfsClose, /* xClose */ + kvvfsReadDb, /* xRead */ + kvvfsWriteDb, /* xWrite */ + kvvfsTruncateDb, /* xTruncate */ + kvvfsSyncDb, /* xSync */ + kvvfsFileSizeDb, /* xFileSize */ + kvvfsLock, /* xLock */ + kvvfsUnlock, /* xUnlock */ + kvvfsCheckReservedLock, /* xCheckReservedLock */ + kvvfsFileControlDb, /* xFileControl */ + kvvfsSectorSize, /* xSectorSize */ + kvvfsDeviceCharacteristics, /* xDeviceCharacteristics */ + 0, /* xShmMap */ + 0, /* xShmLock */ + 0, /* xShmBarrier */ + 0, /* xShmUnmap */ + 0, /* xFetch */ + 0 /* xUnfetch */ +}; + +/* Methods for sqlite3_file objects referencing a rollback journal +*/ +static sqlite3_io_methods kvvfs_jrnl_io_methods = { + 1, /* iVersion */ + kvvfsClose, /* xClose */ + kvvfsReadJrnl, /* xRead */ + kvvfsWriteJrnl, /* xWrite */ + kvvfsTruncateJrnl, /* xTruncate */ + kvvfsSyncJrnl, /* xSync */ + kvvfsFileSizeJrnl, /* xFileSize */ + kvvfsLock, /* xLock */ + kvvfsUnlock, /* xUnlock */ + kvvfsCheckReservedLock, /* xCheckReservedLock */ + kvvfsFileControlJrnl, /* xFileControl */ + kvvfsSectorSize, /* xSectorSize */ + kvvfsDeviceCharacteristics, /* xDeviceCharacteristics */ + 0, /* xShmMap */ + 0, /* xShmLock */ + 0, /* xShmBarrier */ + 0, /* xShmUnmap */ + 0, /* xFetch */ + 0 /* xUnfetch */ +}; + +/****** Storage subsystem **************************************************/ +#include +#include +#include + +/* Forward declarations for the low-level storage engine +*/ +static int kvstorageWrite(const char*, const char *zKey, const char *zData); +static int kvstorageDelete(const char*, const char *zKey); +static int kvstorageRead(const char*, const char *zKey, char *zBuf, int nBuf); +#define KVSTORAGE_KEY_SZ 32 + +/* Expand the key name with an appropriate prefix and put the result +** in zKeyOut[]. The zKeyOut[] buffer is assumed to hold at least +** KVSTORAGE_KEY_SZ bytes. +*/ +static void kvstorageMakeKey( + const char *zClass, + const char *zKeyIn, + char *zKeyOut +){ + sqlite3_snprintf(KVSTORAGE_KEY_SZ, zKeyOut, "kvvfs-%s-%s", zClass, zKeyIn); +} + +/* Write content into a key. zClass is the particular namespace of the +** underlying key/value store to use - either "local" or "session". +** +** Both zKey and zData are zero-terminated pure text strings. +** +** Return the number of errors. +*/ +static int kvstorageWrite( + const char *zClass, + const char *zKey, + const char *zData +){ + FILE *fd; + char zXKey[KVSTORAGE_KEY_SZ]; + kvstorageMakeKey(zClass, zKey, zXKey); + fd = fopen(zXKey, "wb"); + if( fd ){ + SQLITE_KV_TRACE(("KVVFS-WRITE %-15s (%d) %.50s%s\n", zXKey, + (int)strlen(zData), zData, + strlen(zData)>50 ? "..." : "")); + fputs(zData, fd); + fclose(fd); + return 0; + }else{ + return 1; + } +} + +/* Delete a key (with its corresponding data) from the key/value +** namespace given by zClass. If the key does not previously exist, +** this routine is a no-op. +*/ +static int kvstorageDelete(const char *zClass, const char *zKey){ + char zXKey[KVSTORAGE_KEY_SZ]; + kvstorageMakeKey(zClass, zKey, zXKey); + unlink(zXKey); + SQLITE_KV_TRACE(("KVVFS-DELETE %-15s\n", zXKey)); + return 0; +} + +/* Read the value associated with a zKey from the key/value namespace given +** by zClass and put the text data associated with that key in the first +** nBuf bytes of zBuf[]. The value might be truncated if zBuf is not large +** enough to hold it all. The value put into zBuf must always be zero +** terminated, even if it gets truncated because nBuf is not large enough. +** +** Return the total number of bytes in the data, without truncation, and +** not counting the final zero terminator. Return -1 if the key does +** not exist or its key cannot be read. +** +** If nBuf<=0 then this routine simply returns the size of the data +** without actually reading it. Similarly, if nBuf==1 then it +** zero-terminates zBuf at zBuf[0] and returns the size of the data +** without reading it. +*/ +static int kvstorageRead( + const char *zClass, + const char *zKey, + char *zBuf, + int nBuf +){ + FILE *fd; + struct stat buf; + char zXKey[KVSTORAGE_KEY_SZ]; + kvstorageMakeKey(zClass, zKey, zXKey); + if( access(zXKey, R_OK)!=0 + || stat(zXKey, &buf)!=0 + || !S_ISREG(buf.st_mode) + ){ + SQLITE_KV_TRACE(("KVVFS-READ %-15s (-1)\n", zXKey)); + return -1; + } + if( nBuf<=0 ){ + return (int)buf.st_size; + }else if( nBuf==1 ){ + zBuf[0] = 0; + SQLITE_KV_TRACE(("KVVFS-READ %-15s (%d)\n", zXKey, + (int)buf.st_size)); + return (int)buf.st_size; + } + if( nBuf > buf.st_size + 1 ){ + nBuf = buf.st_size + 1; + } + fd = fopen(zXKey, "rb"); + if( fd==0 ){ + SQLITE_KV_TRACE(("KVVFS-READ %-15s (-1)\n", zXKey)); + return -1; + }else{ + sqlite3_int64 n = fread(zBuf, 1, nBuf-1, fd); + fclose(fd); + zBuf[n] = 0; + SQLITE_KV_TRACE(("KVVFS-READ %-15s (%lld) %.50s%s\n", zXKey, + n, zBuf, n>50 ? "..." : "")); + return (int)n; + } +} + +/* +** An internal level of indirection which enables us to replace the +** kvvfs i/o methods with JavaScript implementations in WASM builds. +** Maintenance reminder: if this struct changes in any way, the JSON +** rendering of its structure must be updated in +** sqlite3-wasm.c:sqlite3__wasm_enum_json(). There are no binary +** compatibility concerns, so it does not need an iVersion +** member. +*/ +typedef struct sqlite3_kvvfs_methods sqlite3_kvvfs_methods; +struct sqlite3_kvvfs_methods { + int (*xRead)(const char *zClass, const char *zKey, char *zBuf, int nBuf); + int (*xWrite)(const char *zClass, const char *zKey, const char *zData); + int (*xDelete)(const char *zClass, const char *zKey); + const int nKeySize; +}; + +/* +** This object holds the kvvfs I/O methods which may be swapped out +** for JavaScript-side implementations in WASM builds. In such builds +** it cannot be const, but in native builds it should be so that +** the compiler can hopefully optimize this level of indirection out. +** That said, kvvfs is intended primarily for use in WASM builds. +** +** This is not explicitly flagged as static because the amalgamation +** build will tag it with SQLITE_PRIVATE. +*/ +#ifndef SQLITE_WASM +const +#endif +SQLITE_PRIVATE sqlite3_kvvfs_methods sqlite3KvvfsMethods = { +kvstorageRead, +kvstorageWrite, +kvstorageDelete, +KVSTORAGE_KEY_SZ +}; + +/****** Utility subroutines ************************************************/ + +/* +** Encode binary into the text encoded used to persist on disk. +** The output text is stored in aOut[], which must be at least +** nData+1 bytes in length. +** +** Return the actual length of the encoded text, not counting the +** zero terminator at the end. +** +** Encoding format +** --------------- +** +** * Non-zero bytes are encoded as upper-case hexadecimal +** +** * A sequence of one or more zero-bytes that are not at the +** beginning of the buffer are encoded as a little-endian +** base-26 number using a..z. "a" means 0. "b" means 1, +** "z" means 25. "ab" means 26. "ac" means 52. And so forth. +** +** * Because there is no overlap between the encoding characters +** of hexadecimal and base-26 numbers, it is always clear where +** one stops and the next begins. +*/ +static int kvvfsEncode(const char *aData, int nData, char *aOut){ + int i, j; + const unsigned char *a = (const unsigned char*)aData; + for(i=j=0; i>4]; + aOut[j++] = "0123456789ABCDEF"[c&0xf]; + }else{ + /* A sequence of 1 or more zeros is stored as a little-endian + ** base-26 number using a..z as the digits. So one zero is "b". + ** Two zeros is "c". 25 zeros is "z", 26 zeros is "ab", 27 is "bb", + ** and so forth. + */ + int k; + for(k=1; i+k0 ){ + aOut[j++] = 'a'+(k%26); + k /= 26; + } + } + } + aOut[j] = 0; + return j; +} + +static const signed char kvvfsHexValue[256] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 +}; + +/* +** Decode the text encoding back to binary. The binary content is +** written into pOut, which must be at least nOut bytes in length. +** +** The return value is the number of bytes actually written into aOut[]. +*/ +static int kvvfsDecode(const char *a, char *aOut, int nOut){ + int i, j; + int c; + const unsigned char *aIn = (const unsigned char*)a; + i = 0; + j = 0; + while( 1 ){ + c = kvvfsHexValue[aIn[i]]; + if( c<0 ){ + int n = 0; + int mult = 1; + c = aIn[i]; + if( c==0 ) break; + while( c>='a' && c<='z' ){ + n += (c - 'a')*mult; + mult *= 26; + c = aIn[++i]; + } + if( j+n>nOut ) return -1; + memset(&aOut[j], 0, n); + j += n; + if( c==0 || mult==1 ) break; /* progress stalled if mult==1 */ + }else{ + aOut[j] = c<<4; + c = kvvfsHexValue[aIn[++i]]; + if( c<0 ) break; + aOut[j++] += c; + i++; + } + } + return j; +} + +/* +** Decode a complete journal file. Allocate space in pFile->aJrnl +** and store the decoding there. Or leave pFile->aJrnl set to NULL +** if an error is encountered. +** +** The first few characters of the text encoding will be a little-endian +** base-26 number (digits a..z) that is the total number of bytes +** in the decoded journal file image. This base-26 number is followed +** by a single space, then the encoding of the journal. The space +** separator is required to act as a terminator for the base-26 number. +*/ +static void kvvfsDecodeJournal( + KVVfsFile *pFile, /* Store decoding in pFile->aJrnl */ + const char *zTxt, /* Text encoding. Zero-terminated */ + int nTxt /* Bytes in zTxt, excluding zero terminator */ +){ + unsigned int n = 0; + int c, i, mult; + i = 0; + mult = 1; + while( (c = zTxt[i++])>='a' && c<='z' ){ + n += (zTxt[i] - 'a')*mult; + mult *= 26; + } + sqlite3_free(pFile->aJrnl); + pFile->aJrnl = sqlite3_malloc64( n ); + if( pFile->aJrnl==0 ){ + pFile->nJrnl = 0; + return; + } + pFile->nJrnl = n; + n = kvvfsDecode(zTxt+i, pFile->aJrnl, pFile->nJrnl); + if( nnJrnl ){ + sqlite3_free(pFile->aJrnl); + pFile->aJrnl = 0; + pFile->nJrnl = 0; + } +} + +/* +** Read or write the "sz" element, containing the database file size. +*/ +static sqlite3_int64 kvvfsReadFileSize(KVVfsFile *pFile){ + char zData[50]; + zData[0] = 0; + sqlite3KvvfsMethods.xRead(pFile->zClass, "sz", zData, sizeof(zData)-1); + return strtoll(zData, 0, 0); +} +static int kvvfsWriteFileSize(KVVfsFile *pFile, sqlite3_int64 sz){ + char zData[50]; + sqlite3_snprintf(sizeof(zData), zData, "%lld", sz); + return sqlite3KvvfsMethods.xWrite(pFile->zClass, "sz", zData); +} + +/****** sqlite3_io_methods methods ******************************************/ + +/* +** Close an kvvfs-file. +*/ +static int kvvfsClose(sqlite3_file *pProtoFile){ + KVVfsFile *pFile = (KVVfsFile *)pProtoFile; + + SQLITE_KV_LOG(("xClose %s %s\n", pFile->zClass, + pFile->isJournal ? "journal" : "db")); + sqlite3_free(pFile->aJrnl); + sqlite3_free(pFile->aData); + return SQLITE_OK; +} + +/* +** Read from the -journal file. +*/ +static int kvvfsReadJrnl( + sqlite3_file *pProtoFile, + void *zBuf, + int iAmt, + sqlite_int64 iOfst +){ + KVVfsFile *pFile = (KVVfsFile*)pProtoFile; + assert( pFile->isJournal ); + SQLITE_KV_LOG(("xRead('%s-journal',%d,%lld)\n", pFile->zClass, iAmt, iOfst)); + if( pFile->aJrnl==0 ){ + int szTxt = kvstorageRead(pFile->zClass, "jrnl", 0, 0); + char *aTxt; + if( szTxt<=4 ){ + return SQLITE_IOERR; + } + aTxt = sqlite3_malloc64( szTxt+1 ); + if( aTxt==0 ) return SQLITE_NOMEM; + kvstorageRead(pFile->zClass, "jrnl", aTxt, szTxt+1); + kvvfsDecodeJournal(pFile, aTxt, szTxt); + sqlite3_free(aTxt); + if( pFile->aJrnl==0 ) return SQLITE_IOERR; + } + if( iOfst+iAmt>pFile->nJrnl ){ + return SQLITE_IOERR_SHORT_READ; + } + memcpy(zBuf, pFile->aJrnl+iOfst, iAmt); + return SQLITE_OK; +} + +/* +** Read from the database file. +*/ +static int kvvfsReadDb( + sqlite3_file *pProtoFile, + void *zBuf, + int iAmt, + sqlite_int64 iOfst +){ + KVVfsFile *pFile = (KVVfsFile*)pProtoFile; + unsigned int pgno; + int got, n; + char zKey[30]; + char *aData = pFile->aData; + assert( iOfst>=0 ); + assert( iAmt>=0 ); + SQLITE_KV_LOG(("xRead('%s-db',%d,%lld)\n", pFile->zClass, iAmt, iOfst)); + if( iOfst+iAmt>=512 ){ + if( (iOfst % iAmt)!=0 ){ + return SQLITE_IOERR_READ; + } + if( (iAmt & (iAmt-1))!=0 || iAmt<512 || iAmt>65536 ){ + return SQLITE_IOERR_READ; + } + pFile->szPage = iAmt; + pgno = 1 + iOfst/iAmt; + }else{ + pgno = 1; + } + sqlite3_snprintf(sizeof(zKey), zKey, "%u", pgno); + got = sqlite3KvvfsMethods.xRead(pFile->zClass, zKey, + aData, SQLITE_KVOS_SZ-1); + if( got<0 ){ + n = 0; + }else{ + aData[got] = 0; + if( iOfst+iAmt<512 ){ + int k = iOfst+iAmt; + aData[k*2] = 0; + n = kvvfsDecode(aData, &aData[2000], SQLITE_KVOS_SZ-2000); + if( n>=iOfst+iAmt ){ + memcpy(zBuf, &aData[2000+iOfst], iAmt); + n = iAmt; + }else{ + n = 0; + } + }else{ + n = kvvfsDecode(aData, zBuf, iAmt); + } + } + if( nzClass, iAmt, iOfst)); + if( iEnd>=0x10000000 ) return SQLITE_FULL; + if( pFile->aJrnl==0 || pFile->nJrnlaJrnl, iEnd); + if( aNew==0 ){ + return SQLITE_IOERR_NOMEM; + } + pFile->aJrnl = aNew; + if( pFile->nJrnlaJrnl+pFile->nJrnl, 0, iOfst-pFile->nJrnl); + } + pFile->nJrnl = iEnd; + } + memcpy(pFile->aJrnl+iOfst, zBuf, iAmt); + return SQLITE_OK; +} + +/* +** Write into the database file. +*/ +static int kvvfsWriteDb( + sqlite3_file *pProtoFile, + const void *zBuf, + int iAmt, + sqlite_int64 iOfst +){ + KVVfsFile *pFile = (KVVfsFile*)pProtoFile; + unsigned int pgno; + char zKey[30]; + char *aData = pFile->aData; + SQLITE_KV_LOG(("xWrite('%s-db',%d,%lld)\n", pFile->zClass, iAmt, iOfst)); + assert( iAmt>=512 && iAmt<=65536 ); + assert( (iAmt & (iAmt-1))==0 ); + assert( pFile->szPage<0 || pFile->szPage==iAmt ); + pFile->szPage = iAmt; + pgno = 1 + iOfst/iAmt; + sqlite3_snprintf(sizeof(zKey), zKey, "%u", pgno); + kvvfsEncode(zBuf, iAmt, aData); + if( sqlite3KvvfsMethods.xWrite(pFile->zClass, zKey, aData) ){ + return SQLITE_IOERR; + } + if( iOfst+iAmt > pFile->szDb ){ + pFile->szDb = iOfst + iAmt; + } + return SQLITE_OK; +} + +/* +** Truncate an kvvfs-file. +*/ +static int kvvfsTruncateJrnl(sqlite3_file *pProtoFile, sqlite_int64 size){ + KVVfsFile *pFile = (KVVfsFile *)pProtoFile; + SQLITE_KV_LOG(("xTruncate('%s-journal',%lld)\n", pFile->zClass, size)); + assert( size==0 ); + sqlite3KvvfsMethods.xDelete(pFile->zClass, "jrnl"); + sqlite3_free(pFile->aJrnl); + pFile->aJrnl = 0; + pFile->nJrnl = 0; + return SQLITE_OK; +} +static int kvvfsTruncateDb(sqlite3_file *pProtoFile, sqlite_int64 size){ + KVVfsFile *pFile = (KVVfsFile *)pProtoFile; + if( pFile->szDb>size + && pFile->szPage>0 + && (size % pFile->szPage)==0 + ){ + char zKey[50]; + unsigned int pgno, pgnoMax; + SQLITE_KV_LOG(("xTruncate('%s-db',%lld)\n", pFile->zClass, size)); + pgno = 1 + size/pFile->szPage; + pgnoMax = 2 + pFile->szDb/pFile->szPage; + while( pgno<=pgnoMax ){ + sqlite3_snprintf(sizeof(zKey), zKey, "%u", pgno); + sqlite3KvvfsMethods.xDelete(pFile->zClass, zKey); + pgno++; + } + pFile->szDb = size; + return kvvfsWriteFileSize(pFile, size) ? SQLITE_IOERR : SQLITE_OK; + } + return SQLITE_IOERR; +} + +/* +** Sync an kvvfs-file. +*/ +static int kvvfsSyncJrnl(sqlite3_file *pProtoFile, int flags){ + int i, n; + KVVfsFile *pFile = (KVVfsFile *)pProtoFile; + char *zOut; + SQLITE_KV_LOG(("xSync('%s-journal')\n", pFile->zClass)); + if( pFile->nJrnl<=0 ){ + return kvvfsTruncateJrnl(pProtoFile, 0); + } + zOut = sqlite3_malloc64( pFile->nJrnl*2 + 50 ); + if( zOut==0 ){ + return SQLITE_IOERR_NOMEM; + } + n = pFile->nJrnl; + i = 0; + do{ + zOut[i++] = 'a' + (n%26); + n /= 26; + }while( n>0 ); + zOut[i++] = ' '; + kvvfsEncode(pFile->aJrnl, pFile->nJrnl, &zOut[i]); + i = sqlite3KvvfsMethods.xWrite(pFile->zClass, "jrnl", zOut); + sqlite3_free(zOut); + return i ? SQLITE_IOERR : SQLITE_OK; +} +static int kvvfsSyncDb(sqlite3_file *pProtoFile, int flags){ + return SQLITE_OK; +} + +/* +** Return the current file-size of an kvvfs-file. +*/ +static int kvvfsFileSizeJrnl(sqlite3_file *pProtoFile, sqlite_int64 *pSize){ + KVVfsFile *pFile = (KVVfsFile *)pProtoFile; + SQLITE_KV_LOG(("xFileSize('%s-journal')\n", pFile->zClass)); + *pSize = pFile->nJrnl; + return SQLITE_OK; +} +static int kvvfsFileSizeDb(sqlite3_file *pProtoFile, sqlite_int64 *pSize){ + KVVfsFile *pFile = (KVVfsFile *)pProtoFile; + SQLITE_KV_LOG(("xFileSize('%s-db')\n", pFile->zClass)); + if( pFile->szDb>=0 ){ + *pSize = pFile->szDb; + }else{ + *pSize = kvvfsReadFileSize(pFile); + } + return SQLITE_OK; +} + +/* +** Lock an kvvfs-file. +*/ +static int kvvfsLock(sqlite3_file *pProtoFile, int eLock){ + KVVfsFile *pFile = (KVVfsFile *)pProtoFile; + assert( !pFile->isJournal ); + SQLITE_KV_LOG(("xLock(%s,%d)\n", pFile->zClass, eLock)); + + if( eLock!=SQLITE_LOCK_NONE ){ + pFile->szDb = kvvfsReadFileSize(pFile); + } + return SQLITE_OK; +} + +/* +** Unlock an kvvfs-file. +*/ +static int kvvfsUnlock(sqlite3_file *pProtoFile, int eLock){ + KVVfsFile *pFile = (KVVfsFile *)pProtoFile; + assert( !pFile->isJournal ); + SQLITE_KV_LOG(("xUnlock(%s,%d)\n", pFile->zClass, eLock)); + if( eLock==SQLITE_LOCK_NONE ){ + pFile->szDb = -1; + } + return SQLITE_OK; +} + +/* +** Check if another file-handle holds a RESERVED lock on an kvvfs-file. +*/ +static int kvvfsCheckReservedLock(sqlite3_file *pProtoFile, int *pResOut){ + SQLITE_KV_LOG(("xCheckReservedLock\n")); + *pResOut = 0; + return SQLITE_OK; +} + +/* +** File control method. For custom operations on an kvvfs-file. +*/ +static int kvvfsFileControlJrnl(sqlite3_file *pProtoFile, int op, void *pArg){ + SQLITE_KV_LOG(("xFileControl(%d) on journal\n", op)); + return SQLITE_NOTFOUND; +} +static int kvvfsFileControlDb(sqlite3_file *pProtoFile, int op, void *pArg){ + SQLITE_KV_LOG(("xFileControl(%d) on database\n", op)); + if( op==SQLITE_FCNTL_SYNC ){ + KVVfsFile *pFile = (KVVfsFile *)pProtoFile; + int rc = SQLITE_OK; + SQLITE_KV_LOG(("xSync('%s-db')\n", pFile->zClass)); + if( pFile->szDb>0 && 0!=kvvfsWriteFileSize(pFile, pFile->szDb) ){ + rc = SQLITE_IOERR; + } + return rc; + } + return SQLITE_NOTFOUND; +} + +/* +** Return the sector-size in bytes for an kvvfs-file. +*/ +static int kvvfsSectorSize(sqlite3_file *pFile){ + return 512; +} + +/* +** Return the device characteristic flags supported by an kvvfs-file. +*/ +static int kvvfsDeviceCharacteristics(sqlite3_file *pProtoFile){ + return 0; +} + +/****** sqlite3_vfs methods *************************************************/ + +/* +** Open an kvvfs file handle. +*/ +static int kvvfsOpen( + sqlite3_vfs *pProtoVfs, + const char *zName, + sqlite3_file *pProtoFile, + int flags, + int *pOutFlags +){ + KVVfsFile *pFile = (KVVfsFile*)pProtoFile; + if( zName==0 ) zName = ""; + SQLITE_KV_LOG(("xOpen(\"%s\")\n", zName)); + if( strcmp(zName, "local")==0 + || strcmp(zName, "session")==0 + ){ + pFile->isJournal = 0; + pFile->base.pMethods = &kvvfs_db_io_methods; + }else + if( strcmp(zName, "local-journal")==0 + || strcmp(zName, "session-journal")==0 + ){ + pFile->isJournal = 1; + pFile->base.pMethods = &kvvfs_jrnl_io_methods; + }else{ + return SQLITE_CANTOPEN; + } + if( zName[0]=='s' ){ + pFile->zClass = "session"; + }else{ + pFile->zClass = "local"; + } + pFile->aData = sqlite3_malloc64(SQLITE_KVOS_SZ); + if( pFile->aData==0 ){ + return SQLITE_NOMEM; + } + pFile->aJrnl = 0; + pFile->nJrnl = 0; + pFile->szPage = -1; + pFile->szDb = -1; + return SQLITE_OK; +} + +/* +** Delete the file located at zPath. If the dirSync argument is true, +** ensure the file-system modifications are synced to disk before +** returning. +*/ +static int kvvfsDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){ + if( strcmp(zPath, "local-journal")==0 ){ + sqlite3KvvfsMethods.xDelete("local", "jrnl"); + }else + if( strcmp(zPath, "session-journal")==0 ){ + sqlite3KvvfsMethods.xDelete("session", "jrnl"); + } + return SQLITE_OK; +} + +/* +** Test for access permissions. Return true if the requested permission +** is available, or false otherwise. +*/ +static int kvvfsAccess( + sqlite3_vfs *pProtoVfs, + const char *zPath, + int flags, + int *pResOut +){ + SQLITE_KV_LOG(("xAccess(\"%s\")\n", zPath)); + if( strcmp(zPath, "local-journal")==0 ){ + *pResOut = sqlite3KvvfsMethods.xRead("local", "jrnl", 0, 0)>0; + }else + if( strcmp(zPath, "session-journal")==0 ){ + *pResOut = sqlite3KvvfsMethods.xRead("session", "jrnl", 0, 0)>0; + }else + if( strcmp(zPath, "local")==0 ){ + *pResOut = sqlite3KvvfsMethods.xRead("local", "sz", 0, 0)>0; + }else + if( strcmp(zPath, "session")==0 ){ + *pResOut = sqlite3KvvfsMethods.xRead("session", "sz", 0, 0)>0; + }else + { + *pResOut = 0; + } + SQLITE_KV_LOG(("xAccess returns %d\n",*pResOut)); + return SQLITE_OK; +} + +/* +** Populate buffer zOut with the full canonical pathname corresponding +** to the pathname in zPath. zOut is guaranteed to point to a buffer +** of at least (INST_MAX_PATHNAME+1) bytes. +*/ +static int kvvfsFullPathname( + sqlite3_vfs *pVfs, + const char *zPath, + int nOut, + char *zOut +){ + size_t nPath; +#ifdef SQLITE_OS_KV_ALWAYS_LOCAL + zPath = "local"; +#endif + nPath = strlen(zPath); + SQLITE_KV_LOG(("xFullPathname(\"%s\")\n", zPath)); + if( nOut +static int kvvfsCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *pTimeOut){ + static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000; + struct timeval sNow; + (void)gettimeofday(&sNow, 0); /* Cannot fail given valid arguments */ + *pTimeOut = unixEpoch + 1000*(sqlite3_int64)sNow.tv_sec + sNow.tv_usec/1000; + return SQLITE_OK; +} +#endif /* SQLITE_OS_KV || SQLITE_OS_UNIX */ + +#if SQLITE_OS_KV +/* +** This routine is called initialize the KV-vfs as the default VFS. +*/ +SQLITE_API int sqlite3_os_init(void){ + return sqlite3_vfs_register(&sqlite3OsKvvfsObject, 1); +} +SQLITE_API int sqlite3_os_end(void){ + return SQLITE_OK; +} +#endif /* SQLITE_OS_KV */ + +#if SQLITE_OS_UNIX && defined(SQLITE_OS_KV_OPTIONAL) +SQLITE_PRIVATE int sqlite3KvvfsInit(void){ + return sqlite3_vfs_register(&sqlite3OsKvvfsObject, 0); +} +#endif + +/************** End of os_kv.c ***********************************************/ +/************** Begin file os_unix.c *****************************************/ +/* +** 2004 May 22 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This file contains the VFS implementation for unix-like operating systems +** include Linux, MacOSX, *BSD, QNX, VxWorks, AIX, HPUX, and others. +** +** There are actually several different VFS implementations in this file. +** The differences are in the way that file locking is done. The default +** implementation uses Posix Advisory Locks. Alternative implementations +** use flock(), dot-files, various proprietary locking schemas, or simply +** skip locking all together. +** +** This source file is organized into divisions where the logic for various +** subfunctions is contained within the appropriate division. PLEASE +** KEEP THE STRUCTURE OF THIS FILE INTACT. New code should be placed +** in the correct division and should be clearly labelled. +** +** The layout of divisions is as follows: +** +** * General-purpose declarations and utility functions. +** * Unique file ID logic used by VxWorks. +** * Various locking primitive implementations (all except proxy locking): +** + for Posix Advisory Locks +** + for no-op locks +** + for dot-file locks +** + for flock() locking +** + for named semaphore locks (VxWorks only) +** + for AFP filesystem locks (MacOSX only) +** * sqlite3_file methods not associated with locking. +** * Definitions of sqlite3_io_methods objects for all locking +** methods plus "finder" functions for each locking method. +** * sqlite3_vfs method implementations. +** * Locking primitives for the proxy uber-locking-method. (MacOSX only) +** * Definitions of sqlite3_vfs objects for all locking methods +** plus implementations of sqlite3_os_init() and sqlite3_os_end(). +*/ +/* #include "sqliteInt.h" */ +#if SQLITE_OS_UNIX /* This file is used on unix only */ + +/* +** There are various methods for file locking used for concurrency +** control: +** +** 1. POSIX locking (the default), +** 2. No locking, +** 3. Dot-file locking, +** 4. flock() locking, +** 5. AFP locking (OSX only), +** 6. Named POSIX semaphores (VXWorks only), +** 7. proxy locking. (OSX only) +** +** Styles 4, 5, and 7 are only available of SQLITE_ENABLE_LOCKING_STYLE +** is defined to 1. The SQLITE_ENABLE_LOCKING_STYLE also enables automatic +** selection of the appropriate locking style based on the filesystem +** where the database is located. +*/ +#if !defined(SQLITE_ENABLE_LOCKING_STYLE) +# if defined(__APPLE__) +# define SQLITE_ENABLE_LOCKING_STYLE 1 +# else +# define SQLITE_ENABLE_LOCKING_STYLE 0 +# endif +#endif + +/* Use pread() and pwrite() if they are available */ +#if defined(__APPLE__) || defined(__linux__) +# define HAVE_PREAD 1 +# define HAVE_PWRITE 1 +#endif +#if defined(HAVE_PREAD64) && defined(HAVE_PWRITE64) +# undef USE_PREAD +# define USE_PREAD64 1 +#elif defined(HAVE_PREAD) && defined(HAVE_PWRITE) +# undef USE_PREAD64 +# define USE_PREAD 1 +#endif + +/* +** standard include files. +*/ +#include /* amalgamator: keep */ +#include /* amalgamator: keep */ +#include +#include +#include /* amalgamator: keep */ +/* #include */ +#include /* amalgamator: keep */ +#include +#if (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) \ + && !defined(SQLITE_WASI) +# include +#endif + +#if SQLITE_ENABLE_LOCKING_STYLE +/* # include */ +# include +# include +#endif /* SQLITE_ENABLE_LOCKING_STYLE */ + +/* +** Try to determine if gethostuuid() is available based on standard +** macros. This might sometimes compute the wrong value for some +** obscure platforms. For those cases, simply compile with one of +** the following: +** +** -DHAVE_GETHOSTUUID=0 +** -DHAVE_GETHOSTUUID=1 +** +** None if this matters except when building on Apple products with +** -DSQLITE_ENABLE_LOCKING_STYLE. +*/ +#ifndef HAVE_GETHOSTUUID +# define HAVE_GETHOSTUUID 0 +# if defined(__APPLE__) && ((__MAC_OS_X_VERSION_MIN_REQUIRED > 1050) || \ + (__IPHONE_OS_VERSION_MIN_REQUIRED > 2000)) +# if (!defined(TARGET_OS_EMBEDDED) || (TARGET_OS_EMBEDDED==0)) \ + && (!defined(TARGET_IPHONE_SIMULATOR) || (TARGET_IPHONE_SIMULATOR==0))\ + && (!defined(TARGET_OS_MACCATALYST) || (TARGET_OS_MACCATALYST==0)) +# undef HAVE_GETHOSTUUID +# define HAVE_GETHOSTUUID 1 +# else +# warning "gethostuuid() is disabled." +# endif +# endif +#endif + + +#if OS_VXWORKS +/* # include */ +# include +# include +#endif /* OS_VXWORKS */ + +#if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE +# include +#endif + +#ifdef HAVE_UTIME +# include +#endif + +/* +** Allowed values of unixFile.fsFlags +*/ +#define SQLITE_FSFLAGS_IS_MSDOS 0x1 + +/* +** If we are to be thread-safe, include the pthreads header. +*/ +#if SQLITE_THREADSAFE +/* # include */ +#endif + +/* +** Default permissions when creating a new file +*/ +#ifndef SQLITE_DEFAULT_FILE_PERMISSIONS +# define SQLITE_DEFAULT_FILE_PERMISSIONS 0644 +#endif + +/* +** Default permissions when creating auto proxy dir +*/ +#ifndef SQLITE_DEFAULT_PROXYDIR_PERMISSIONS +# define SQLITE_DEFAULT_PROXYDIR_PERMISSIONS 0755 +#endif + +/* +** Maximum supported path-length. +*/ +#define MAX_PATHNAME 512 + +/* +** Maximum supported symbolic links +*/ +#define SQLITE_MAX_SYMLINKS 100 + +/* +** Remove and stub certain info for WASI (WebAssembly System +** Interface) builds. +*/ +#ifdef SQLITE_WASI +# undef HAVE_FCHMOD +# undef HAVE_FCHOWN +# undef HAVE_MREMAP +# define HAVE_MREMAP 0 +# ifndef SQLITE_DEFAULT_UNIX_VFS +# define SQLITE_DEFAULT_UNIX_VFS "unix-dotfile" + /* ^^^ should SQLITE_DEFAULT_UNIX_VFS be "unix-none"? */ +# endif +# ifndef F_RDLCK +# define F_RDLCK 0 +# define F_WRLCK 1 +# define F_UNLCK 2 +# if __LONG_MAX == 0x7fffffffL +# define F_GETLK 12 +# define F_SETLK 13 +# define F_SETLKW 14 +# else +# define F_GETLK 5 +# define F_SETLK 6 +# define F_SETLKW 7 +# endif +# endif +#else /* !SQLITE_WASI */ +# ifndef HAVE_FCHMOD +# define HAVE_FCHMOD 1 +# endif +#endif /* SQLITE_WASI */ + +#ifdef SQLITE_WASI +# define osGetpid(X) (pid_t)1 +#else +/* Always cast the getpid() return type for compatibility with +** kernel modules in VxWorks. */ +# define osGetpid(X) (pid_t)getpid() +#endif + +/* +** Only set the lastErrno if the error code is a real error and not +** a normal expected return code of SQLITE_BUSY or SQLITE_OK +*/ +#define IS_LOCK_ERROR(x) ((x != SQLITE_OK) && (x != SQLITE_BUSY)) + +/* Forward references */ +typedef struct unixShm unixShm; /* Connection shared memory */ +typedef struct unixShmNode unixShmNode; /* Shared memory instance */ +typedef struct unixInodeInfo unixInodeInfo; /* An i-node */ +typedef struct UnixUnusedFd UnixUnusedFd; /* An unused file descriptor */ + +/* +** Sometimes, after a file handle is closed by SQLite, the file descriptor +** cannot be closed immediately. In these cases, instances of the following +** structure are used to store the file descriptor while waiting for an +** opportunity to either close or reuse it. +*/ +struct UnixUnusedFd { + int fd; /* File descriptor to close */ + int flags; /* Flags this file descriptor was opened with */ + UnixUnusedFd *pNext; /* Next unused file descriptor on same file */ +}; + +/* +** The unixFile structure is subclass of sqlite3_file specific to the unix +** VFS implementations. +*/ +typedef struct unixFile unixFile; +struct unixFile { + sqlite3_io_methods const *pMethod; /* Always the first entry */ + sqlite3_vfs *pVfs; /* The VFS that created this unixFile */ + unixInodeInfo *pInode; /* Info about locks on this inode */ + int h; /* The file descriptor */ + unsigned char eFileLock; /* The type of lock held on this fd */ + unsigned short int ctrlFlags; /* Behavioral bits. UNIXFILE_* flags */ + int lastErrno; /* The unix errno from last I/O error */ + void *lockingContext; /* Locking style specific state */ + UnixUnusedFd *pPreallocatedUnused; /* Pre-allocated UnixUnusedFd */ + const char *zPath; /* Name of the file */ + unixShm *pShm; /* Shared memory segment information */ + int szChunk; /* Configured by FCNTL_CHUNK_SIZE */ +#if SQLITE_MAX_MMAP_SIZE>0 + int nFetchOut; /* Number of outstanding xFetch refs */ + sqlite3_int64 mmapSize; /* Usable size of mapping at pMapRegion */ + sqlite3_int64 mmapSizeActual; /* Actual size of mapping at pMapRegion */ + sqlite3_int64 mmapSizeMax; /* Configured FCNTL_MMAP_SIZE value */ + void *pMapRegion; /* Memory mapped region */ +#endif + int sectorSize; /* Device sector size */ + int deviceCharacteristics; /* Precomputed device characteristics */ +#if SQLITE_ENABLE_LOCKING_STYLE + int openFlags; /* The flags specified at open() */ +#endif +#if SQLITE_ENABLE_LOCKING_STYLE || defined(__APPLE__) + unsigned fsFlags; /* cached details from statfs() */ +#endif +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + unsigned iBusyTimeout; /* Wait this many millisec on locks */ + int bBlockOnConnect; /* True to block for SHARED locks */ +#endif +#if OS_VXWORKS + struct vxworksFileId *pId; /* Unique file ID */ +#endif +#ifdef SQLITE_DEBUG + /* The next group of variables are used to track whether or not the + ** transaction counter in bytes 24-27 of database files are updated + ** whenever any part of the database changes. An assertion fault will + ** occur if a file is updated without also updating the transaction + ** counter. This test is made to avoid new problems similar to the + ** one described by ticket #3584. + */ + unsigned char transCntrChng; /* True if the transaction counter changed */ + unsigned char dbUpdate; /* True if any part of database file changed */ + unsigned char inNormalWrite; /* True if in a normal write operation */ + +#endif + +#ifdef SQLITE_TEST + /* In test mode, increase the size of this structure a bit so that + ** it is larger than the struct CrashFile defined in test6.c. + */ + char aPadding[32]; +#endif +}; + +/* This variable holds the process id (pid) from when the xRandomness() +** method was called. If xOpen() is called from a different process id, +** indicating that a fork() has occurred, the PRNG will be reset. +*/ +static pid_t randomnessPid = 0; + +/* +** Allowed values for the unixFile.ctrlFlags bitmask: +*/ +#define UNIXFILE_EXCL 0x01 /* Connections from one process only */ +#define UNIXFILE_RDONLY 0x02 /* Connection is read only */ +#define UNIXFILE_PERSIST_WAL 0x04 /* Persistent WAL mode */ +#if !defined(SQLITE_DISABLE_DIRSYNC) && !defined(_AIX) +# define UNIXFILE_DIRSYNC 0x08 /* Directory sync needed */ +#else +# define UNIXFILE_DIRSYNC 0x00 +#endif +#define UNIXFILE_PSOW 0x10 /* SQLITE_IOCAP_POWERSAFE_OVERWRITE */ +#define UNIXFILE_DELETE 0x20 /* Delete on close */ +#define UNIXFILE_URI 0x40 /* Filename might have query parameters */ +#define UNIXFILE_NOLOCK 0x80 /* Do no file locking */ + +/* +** Include code that is common to all os_*.c files +*/ +/* #include "os_common.h" */ + +/* +** Define various macros that are missing from some systems. +*/ +#ifndef O_LARGEFILE +# define O_LARGEFILE 0 +#endif +#ifdef SQLITE_DISABLE_LFS +# undef O_LARGEFILE +# define O_LARGEFILE 0 +#endif +#ifndef O_NOFOLLOW +# define O_NOFOLLOW 0 +#endif +#ifndef O_BINARY +# define O_BINARY 0 +#endif + +/* +** The threadid macro resolves to the thread-id or to 0. Used for +** testing and debugging only. +*/ +#if SQLITE_THREADSAFE +#define threadid pthread_self() +#else +#define threadid 0 +#endif + +/* +** HAVE_MREMAP defaults to true on Linux and false everywhere else. +*/ +#if !defined(HAVE_MREMAP) +# if defined(__linux__) && defined(_GNU_SOURCE) +# define HAVE_MREMAP 1 +# else +# define HAVE_MREMAP 0 +# endif +#endif + +/* +** Explicitly call the 64-bit version of lseek() on Android. Otherwise, lseek() +** is the 32-bit version, even if _FILE_OFFSET_BITS=64 is defined. +*/ +#ifdef __ANDROID__ +# define lseek lseek64 +#endif + +#ifdef __linux__ +/* +** Linux-specific IOCTL magic numbers used for controlling F2FS +*/ +#define F2FS_IOCTL_MAGIC 0xf5 +#define F2FS_IOC_START_ATOMIC_WRITE _IO(F2FS_IOCTL_MAGIC, 1) +#define F2FS_IOC_COMMIT_ATOMIC_WRITE _IO(F2FS_IOCTL_MAGIC, 2) +#define F2FS_IOC_START_VOLATILE_WRITE _IO(F2FS_IOCTL_MAGIC, 3) +#define F2FS_IOC_ABORT_VOLATILE_WRITE _IO(F2FS_IOCTL_MAGIC, 5) +#define F2FS_IOC_GET_FEATURES _IOR(F2FS_IOCTL_MAGIC, 12, u32) +#define F2FS_FEATURE_ATOMIC_WRITE 0x0004 +#endif /* __linux__ */ + + +/* +** Different Unix systems declare open() in different ways. Same use +** open(const char*,int,mode_t). Others use open(const char*,int,...). +** The difference is important when using a pointer to the function. +** +** The safest way to deal with the problem is to always use this wrapper +** which always has the same well-defined interface. +*/ +static int posixOpen(const char *zFile, int flags, int mode){ + return open(zFile, flags, mode); +} + +/* Forward reference */ +static int openDirectory(const char*, int*); +static int unixGetpagesize(void); + +/* +** Many system calls are accessed through pointer-to-functions so that +** they may be overridden at runtime to facilitate fault injection during +** testing and sandboxing. The following array holds the names and pointers +** to all overrideable system calls. +*/ +static struct unix_syscall { + const char *zName; /* Name of the system call */ + sqlite3_syscall_ptr pCurrent; /* Current value of the system call */ + sqlite3_syscall_ptr pDefault; /* Default value */ +} aSyscall[] = { + { "open", (sqlite3_syscall_ptr)posixOpen, 0 }, +#define osOpen ((int(*)(const char*,int,int))aSyscall[0].pCurrent) + + { "close", (sqlite3_syscall_ptr)close, 0 }, +#define osClose ((int(*)(int))aSyscall[1].pCurrent) + + { "access", (sqlite3_syscall_ptr)access, 0 }, +#define osAccess ((int(*)(const char*,int))aSyscall[2].pCurrent) + + { "getcwd", (sqlite3_syscall_ptr)getcwd, 0 }, +#define osGetcwd ((char*(*)(char*,size_t))aSyscall[3].pCurrent) + + { "stat", (sqlite3_syscall_ptr)stat, 0 }, +#define osStat ((int(*)(const char*,struct stat*))aSyscall[4].pCurrent) + +/* +** The DJGPP compiler environment looks mostly like Unix, but it +** lacks the fcntl() system call. So redefine fcntl() to be something +** that always succeeds. This means that locking does not occur under +** DJGPP. But it is DOS - what did you expect? +*/ +#ifdef __DJGPP__ + { "fstat", 0, 0 }, +#define osFstat(a,b,c) 0 +#else + { "fstat", (sqlite3_syscall_ptr)fstat, 0 }, +#define osFstat ((int(*)(int,struct stat*))aSyscall[5].pCurrent) +#endif + + { "ftruncate", (sqlite3_syscall_ptr)ftruncate, 0 }, +#define osFtruncate ((int(*)(int,off_t))aSyscall[6].pCurrent) + + { "fcntl", (sqlite3_syscall_ptr)fcntl, 0 }, +#define osFcntl ((int(*)(int,int,...))aSyscall[7].pCurrent) + + { "read", (sqlite3_syscall_ptr)read, 0 }, +#define osRead ((ssize_t(*)(int,void*,size_t))aSyscall[8].pCurrent) + +#if defined(USE_PREAD) || SQLITE_ENABLE_LOCKING_STYLE + { "pread", (sqlite3_syscall_ptr)pread, 0 }, +#else + { "pread", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osPread ((ssize_t(*)(int,void*,size_t,off_t))aSyscall[9].pCurrent) + +#if defined(USE_PREAD64) + { "pread64", (sqlite3_syscall_ptr)pread64, 0 }, +#else + { "pread64", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osPread64 ((ssize_t(*)(int,void*,size_t,off64_t))aSyscall[10].pCurrent) + + { "write", (sqlite3_syscall_ptr)write, 0 }, +#define osWrite ((ssize_t(*)(int,const void*,size_t))aSyscall[11].pCurrent) + +#if defined(USE_PREAD) || SQLITE_ENABLE_LOCKING_STYLE + { "pwrite", (sqlite3_syscall_ptr)pwrite, 0 }, +#else + { "pwrite", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osPwrite ((ssize_t(*)(int,const void*,size_t,off_t))\ + aSyscall[12].pCurrent) + +#if defined(USE_PREAD64) + { "pwrite64", (sqlite3_syscall_ptr)pwrite64, 0 }, +#else + { "pwrite64", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osPwrite64 ((ssize_t(*)(int,const void*,size_t,off64_t))\ + aSyscall[13].pCurrent) + +#if defined(HAVE_FCHMOD) + { "fchmod", (sqlite3_syscall_ptr)fchmod, 0 }, +#define osFchmod ((int(*)(int,mode_t))aSyscall[14].pCurrent) +#else + { "fchmod", (sqlite3_syscall_ptr)0, 0 }, +#define osFchmod(FID,MODE) 0 +#endif + +#if defined(HAVE_POSIX_FALLOCATE) && HAVE_POSIX_FALLOCATE + { "fallocate", (sqlite3_syscall_ptr)posix_fallocate, 0 }, +#else + { "fallocate", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osFallocate ((int(*)(int,off_t,off_t))aSyscall[15].pCurrent) + + { "unlink", (sqlite3_syscall_ptr)unlink, 0 }, +#define osUnlink ((int(*)(const char*))aSyscall[16].pCurrent) + + { "openDirectory", (sqlite3_syscall_ptr)openDirectory, 0 }, +#define osOpenDirectory ((int(*)(const char*,int*))aSyscall[17].pCurrent) + + { "mkdir", (sqlite3_syscall_ptr)mkdir, 0 }, +#define osMkdir ((int(*)(const char*,mode_t))aSyscall[18].pCurrent) + + { "rmdir", (sqlite3_syscall_ptr)rmdir, 0 }, +#define osRmdir ((int(*)(const char*))aSyscall[19].pCurrent) + +#if defined(HAVE_FCHOWN) + { "fchown", (sqlite3_syscall_ptr)fchown, 0 }, +#else + { "fchown", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osFchown ((int(*)(int,uid_t,gid_t))aSyscall[20].pCurrent) + +#if defined(HAVE_FCHOWN) + { "geteuid", (sqlite3_syscall_ptr)geteuid, 0 }, +#else + { "geteuid", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osGeteuid ((uid_t(*)(void))aSyscall[21].pCurrent) + +#if (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) \ + && !defined(SQLITE_WASI) + { "mmap", (sqlite3_syscall_ptr)mmap, 0 }, +#else + { "mmap", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osMmap ((void*(*)(void*,size_t,int,int,int,off_t))aSyscall[22].pCurrent) + +#if (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) \ + && !defined(SQLITE_WASI) + { "munmap", (sqlite3_syscall_ptr)munmap, 0 }, +#else + { "munmap", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osMunmap ((int(*)(void*,size_t))aSyscall[23].pCurrent) + +#if HAVE_MREMAP && (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) + { "mremap", (sqlite3_syscall_ptr)mremap, 0 }, +#else + { "mremap", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osMremap ((void*(*)(void*,size_t,size_t,int,...))aSyscall[24].pCurrent) + +#if !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0 + { "getpagesize", (sqlite3_syscall_ptr)unixGetpagesize, 0 }, +#else + { "getpagesize", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osGetpagesize ((int(*)(void))aSyscall[25].pCurrent) + +#if defined(HAVE_READLINK) + { "readlink", (sqlite3_syscall_ptr)readlink, 0 }, +#else + { "readlink", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osReadlink ((ssize_t(*)(const char*,char*,size_t))aSyscall[26].pCurrent) + +#if defined(HAVE_LSTAT) + { "lstat", (sqlite3_syscall_ptr)lstat, 0 }, +#else + { "lstat", (sqlite3_syscall_ptr)0, 0 }, +#endif +#define osLstat ((int(*)(const char*,struct stat*))aSyscall[27].pCurrent) + +#if defined(__linux__) && defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE) +# ifdef __ANDROID__ + { "ioctl", (sqlite3_syscall_ptr)(int(*)(int, int, ...))ioctl, 0 }, +#define osIoctl ((int(*)(int,int,...))aSyscall[28].pCurrent) +# else + { "ioctl", (sqlite3_syscall_ptr)ioctl, 0 }, +#define osIoctl ((int(*)(int,unsigned long,...))aSyscall[28].pCurrent) +# endif +#else + { "ioctl", (sqlite3_syscall_ptr)0, 0 }, +#endif + +}; /* End of the overrideable system calls */ + + +#if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_FILESTAT) +/* +** Extract Posix Advisory Locking information about file description fd +** from the /proc/PID/fdinfo/FD pseudo-file. Fill the string buffer a[16] +** with characters to indicate which SQLite-relevant locks are held. +** a[16] will be a 15-character zero-terminated string with the following +** schema: +** +** AAA/B.DDD.DDDDD +** +** Each of character A-D will be "w" or "r" or "-" to indicate either a +** write-lock, a read-lock, or no-lock, respectively. The "." and "/" +** characters are delimiters intended to make the string more easily +** readable by humans. Here are the meaning of the specific letters: +** +** AAA -> The main database locks. PENDING_BYTE, RESERVED_BYTE, +** and SHARED_FIRST, respectively. +** +** B -> The deadman switch lock. Offset 128 of the -shm file. +** +** CCC -> WAL locks: WRITE, CKPT, RECOVER +** +** DDDDD -> WAL read-locks 0 through 5 +** +** Note that elements before the "/" apply to the main database file and +** elements after the "/" apply to the -shm file in WAL mode. +** +** Here is another way of thinking about the meaning of the result string: +** +** AAA/B.CCC.DDDDD +** ||| | ||| \___/ +** PENDING--'|| | ||| `----- READ 0-5 +** RESERVED--'| | ||`---- RECOVER +** SHARED ----' | |`----- CKPT +** DMS ------' `------ WRITE +** +** Return SQLITE_OK on success and SQLITE_ERROR_UNABLE if the /proc +** pseudo-filesystem is unavailable. +*/ +static int unixPosixAdvisoryLocks( + int fd, /* The file descriptor to analyze */ + char a[16] /* Write a text description of PALs here */ +){ + int in; + ssize_t n; + char *p, *pNext, *x; + char z[2000]; + + /* 1 */ + /* 012 4 678 01234 */ + memcpy(a, "---/-.---.-----", 16); + sqlite3_snprintf(sizeof(z), z, "/proc/%d/fdinfo/%d", getpid(), fd); + in = osOpen(z, O_RDONLY, 0); + if( in<0 ){ + return SQLITE_ERROR_UNABLE; + } + n = osRead(in, z, sizeof(z)-1); + osClose(in); + if( n<=0 ) return SQLITE_ERROR_UNABLE; + z[n] = 0; + + /* We are looking for lines that begin with "lock:\t". Examples: + ** + ** lock: 1: POSIX ADVISORY READ 494716 08:02:5277597 1073741826 1073742335 + ** lock: 1: POSIX ADVISORY WRITE 494716 08:02:5282282 120 120 + ** lock: 2: POSIX ADVISORY READ 494716 08:02:5282282 123 123 + ** lock: 3: POSIX ADVISORY READ 494716 08:02:5282282 128 128 + */ + pNext = strstr(z, "lock:\t"); + while( pNext ){ + char cType = 0; + sqlite3_int64 iFirst, iLast; + p = pNext+6; + pNext = strstr(p, "lock:\t"); + if( pNext ) pNext[-1] = 0; + if( (x = strstr(p, " READ "))!=0 ){ + cType = 'r'; + x += 6; + }else if( (x = strstr(p, " WRITE "))!=0 ){ + cType = 'w'; + x += 7; + }else{ + continue; + } + x = strrchr(x, ' '); + if( x==0 ) continue; + iLast = strtoll(x+1, 0, 10); + *x = 0; + x = strrchr(p, ' '); + if( x==0 ) continue; + iFirst = strtoll(x+1, 0, 10); + if( iLast>=PENDING_BYTE ){ + if( iFirst<=PENDING_BYTE && iLast>=PENDING_BYTE ) a[0] = cType; + if( iFirst<=PENDING_BYTE+1 && iLast>=PENDING_BYTE+1 ) a[1] = cType; + if( iFirst<=PENDING_BYTE+2 && iLast>=PENDING_BYTE+510 ) a[2] = cType; + }else if( iLast<=128 ){ + if( iFirst<=128 && iLast>=128 ) a[4] = cType; + if( iFirst<=120 && iLast>=120 ) a[6] = cType; + if( iFirst<=121 && iLast>=121 ) a[7] = cType; + if( iFirst<=122 && iLast>=122 ) a[8] = cType; + if( iFirst<=123 && iLast>=123 ) a[10] = cType; + if( iFirst<=124 && iLast>=124 ) a[11] = cType; + if( iFirst<=125 && iLast>=125 ) a[12] = cType; + if( iFirst<=126 && iLast>=126 ) a[13] = cType; + if( iFirst<=127 && iLast>=127 ) a[14] = cType; + } + } + return SQLITE_OK; +} +#else +# define unixPosixAdvisoryLocks(A,B) SQLITE_ERROR_UNABLE +#endif /* SQLITE_DEBUG || SQLITE_ENABLE_FILESTAT */ + +/* +** On some systems, calls to fchown() will trigger a message in a security +** log if they come from non-root processes. So avoid calling fchown() if +** we are not running as root. +*/ +static int robustFchown(int fd, uid_t uid, gid_t gid){ +#if defined(HAVE_FCHOWN) + return osGeteuid() ? 0 : osFchown(fd,uid,gid); +#else + return 0; +#endif +} + +/* +** This is the xSetSystemCall() method of sqlite3_vfs for all of the +** "unix" VFSes. Return SQLITE_OK upon successfully updating the +** system call pointer, or SQLITE_NOTFOUND if there is no configurable +** system call named zName. +*/ +static int unixSetSystemCall( + sqlite3_vfs *pNotUsed, /* The VFS pointer. Not used */ + const char *zName, /* Name of system call to override */ + sqlite3_syscall_ptr pNewFunc /* Pointer to new system call value */ +){ + unsigned int i; + int rc = SQLITE_NOTFOUND; + + UNUSED_PARAMETER(pNotUsed); + if( zName==0 ){ + /* If no zName is given, restore all system calls to their default + ** settings and return NULL + */ + rc = SQLITE_OK; + for(i=0; i=SQLITE_MINIMUM_FILE_DESCRIPTOR ) break; + if( (f & (O_EXCL|O_CREAT))==(O_EXCL|O_CREAT) ){ + (void)osUnlink(z); + } + osClose(fd); + sqlite3_log(SQLITE_WARNING, + "attempt to open \"%s\" as file descriptor %d", z, fd); + fd = -1; + if( osOpen("/dev/null", O_RDONLY, m)<0 ) break; + } + if( fd>=0 ){ + if( m!=0 ){ + struct stat statbuf; + if( osFstat(fd, &statbuf)==0 + && statbuf.st_size==0 + && (statbuf.st_mode&0777)!=m + ){ + osFchmod(fd, m); + } + } +#if defined(FD_CLOEXEC) && (!defined(O_CLOEXEC) || O_CLOEXEC==0) + osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC); +#endif + } + return fd; +} + +/* +** Helper functions to obtain and relinquish the global mutex. The +** global mutex is used to protect the unixInodeInfo objects used by +** this file, all of which may be shared by multiple threads. +** +** Function unixMutexHeld() is used to assert() that the global mutex +** is held when required. This function is only used as part of assert() +** statements. e.g. +** +** unixEnterMutex() +** assert( unixMutexHeld() ); +** unixEnterLeave() +** +** To prevent deadlock, the global unixBigLock must must be acquired +** before the unixInodeInfo.pLockMutex mutex, if both are held. It is +** OK to get the pLockMutex without holding unixBigLock first, but if +** that happens, the unixBigLock mutex must not be acquired until after +** pLockMutex is released. +** +** OK: enter(unixBigLock), enter(pLockInfo) +** OK: enter(unixBigLock) +** OK: enter(pLockInfo) +** ERROR: enter(pLockInfo), enter(unixBigLock) +*/ +static sqlite3_mutex *unixBigLock = 0; +static void unixEnterMutex(void){ + assert( sqlite3_mutex_notheld(unixBigLock) ); /* Not a recursive mutex */ + sqlite3_mutex_enter(unixBigLock); +} +static void unixLeaveMutex(void){ + assert( sqlite3_mutex_held(unixBigLock) ); + sqlite3_mutex_leave(unixBigLock); +} +#ifdef SQLITE_DEBUG +static int unixMutexHeld(void) { + return sqlite3_mutex_held(unixBigLock); +} +#endif + + +#ifdef SQLITE_HAVE_OS_TRACE +/* +** Helper function for printing out trace information from debugging +** binaries. This returns the string representation of the supplied +** integer lock-type. +*/ +static const char *azFileLock(int eFileLock){ + switch( eFileLock ){ + case NO_LOCK: return "NONE"; + case SHARED_LOCK: return "SHARED"; + case RESERVED_LOCK: return "RESERVED"; + case PENDING_LOCK: return "PENDING"; + case EXCLUSIVE_LOCK: return "EXCLUSIVE"; + } + return "ERROR"; +} +#endif + +#ifdef SQLITE_LOCK_TRACE +/* +** Print out information about all locking operations. +** +** This routine is used for troubleshooting locks on multithreaded +** platforms. Enable by compiling with the -DSQLITE_LOCK_TRACE +** command-line option on the compiler. This code is normally +** turned off. +*/ +static int lockTrace(int fd, int op, struct flock *p){ + char *zOpName, *zType; + int s; + int savedErrno; + if( op==F_GETLK ){ + zOpName = "GETLK"; + }else if( op==F_SETLK ){ + zOpName = "SETLK"; + }else{ + s = osFcntl(fd, op, p); + sqlite3DebugPrintf("fcntl unknown %d %d %d\n", fd, op, s); + return s; + } + if( p->l_type==F_RDLCK ){ + zType = "RDLCK"; + }else if( p->l_type==F_WRLCK ){ + zType = "WRLCK"; + }else if( p->l_type==F_UNLCK ){ + zType = "UNLCK"; + }else{ + assert( 0 ); + } + assert( p->l_whence==SEEK_SET ); + s = osFcntl(fd, op, p); + savedErrno = errno; + sqlite3DebugPrintf("fcntl %d %d %s %s %d %d %d %d\n", + threadid, fd, zOpName, zType, (int)p->l_start, (int)p->l_len, + (int)p->l_pid, s); + if( s==(-1) && op==F_SETLK && (p->l_type==F_RDLCK || p->l_type==F_WRLCK) ){ + struct flock l2; + l2 = *p; + osFcntl(fd, F_GETLK, &l2); + if( l2.l_type==F_RDLCK ){ + zType = "RDLCK"; + }else if( l2.l_type==F_WRLCK ){ + zType = "WRLCK"; + }else if( l2.l_type==F_UNLCK ){ + zType = "UNLCK"; + }else{ + assert( 0 ); + } + sqlite3DebugPrintf("fcntl-failure-reason: %s %d %d %d\n", + zType, (int)l2.l_start, (int)l2.l_len, (int)l2.l_pid); + } + errno = savedErrno; + return s; +} +#undef osFcntl +#define osFcntl lockTrace +#endif /* SQLITE_LOCK_TRACE */ + +/* +** Retry ftruncate() calls that fail due to EINTR +** +** All calls to ftruncate() within this file should be made through +** this wrapper. On the Android platform, bypassing the logic below +** could lead to a corrupt database. +*/ +static int robust_ftruncate(int h, sqlite3_int64 sz){ + int rc; +#ifdef __ANDROID__ + /* On Android, ftruncate() always uses 32-bit offsets, even if + ** _FILE_OFFSET_BITS=64 is defined. This means it is unsafe to attempt to + ** truncate a file to any size larger than 2GiB. Silently ignore any + ** such attempts. */ + if( sz>(sqlite3_int64)0x7FFFFFFF ){ + rc = SQLITE_OK; + }else +#endif + do{ rc = osFtruncate(h,sz); }while( rc<0 && errno==EINTR ); + return rc; +} + +/* +** This routine translates a standard POSIX errno code into something +** useful to the clients of the sqlite3 functions. Specifically, it is +** intended to translate a variety of "try again" errors into SQLITE_BUSY +** and a variety of "please close the file descriptor NOW" errors into +** SQLITE_IOERR +** +** Errors during initialization of locks, or file system support for locks, +** should handle ENOLCK, ENOTSUP, EOPNOTSUPP separately. +*/ +static int sqliteErrorFromPosixError(int posixError, int sqliteIOErr) { + assert( (sqliteIOErr == SQLITE_IOERR_LOCK) || + (sqliteIOErr == SQLITE_IOERR_UNLOCK) || + (sqliteIOErr == SQLITE_IOERR_RDLOCK) || + (sqliteIOErr == SQLITE_IOERR_CHECKRESERVEDLOCK) ); + switch (posixError) { + case EACCES: + case EAGAIN: + case ETIMEDOUT: + case EBUSY: + case EINTR: + case ENOLCK: + /* random NFS retry error, unless during file system support + * introspection, in which it actually means what it says */ + return SQLITE_BUSY; + + case EPERM: + return SQLITE_PERM; + + default: + return sqliteIOErr; + } +} + + +/****************************************************************************** +****************** Begin Unique File ID Utility Used By VxWorks *************** +** +** On most versions of unix, we can get a unique ID for a file by concatenating +** the device number and the inode number. But this does not work on VxWorks. +** On VxWorks, a unique file id must be based on the canonical filename. +** +** A pointer to an instance of the following structure can be used as a +** unique file ID in VxWorks. Each instance of this structure contains +** a copy of the canonical filename. There is also a reference count. +** The structure is reclaimed when the number of pointers to it drops to +** zero. +** +** There are never very many files open at one time and lookups are not +** a performance-critical path, so it is sufficient to put these +** structures on a linked list. +*/ +struct vxworksFileId { + struct vxworksFileId *pNext; /* Next in a list of them all */ + int nRef; /* Number of references to this one */ + int nName; /* Length of the zCanonicalName[] string */ + char *zCanonicalName; /* Canonical filename */ +}; + +#if OS_VXWORKS +/* +** All unique filenames are held on a linked list headed by this +** variable: +*/ +static struct vxworksFileId *vxworksFileList = 0; +static sqlite3_mutex *vxworksMutex = 0; + +/* +** Simplify a filename into its canonical form +** by making the following changes: +** +** * removing any trailing and duplicate / +** * convert /./ into just / +** * convert /A/../ where A is any simple name into just / +** +** Changes are made in-place. Return the new name length. +** +** The original filename is in z[0..n-1]. Return the number of +** characters in the simplified name. +*/ +static int vxworksSimplifyName(char *z, int n){ + int i, j; + while( n>1 && z[n-1]=='/' ){ n--; } + for(i=j=0; i0 && z[j-1]!='/' ){ j--; } + if( j>0 ){ j--; } + i += 2; + continue; + } + } + z[j++] = z[i]; + } + z[j] = 0; + return j; +} + +/* +** Find a unique file ID for the given absolute pathname. Return +** a pointer to the vxworksFileId object. This pointer is the unique +** file ID. +** +** The nRef field of the vxworksFileId object is incremented before +** the object is returned. A new vxworksFileId object is created +** and added to the global list if necessary. +** +** If a memory allocation error occurs, return NULL. +*/ +static struct vxworksFileId *vxworksFindFileId(const char *zAbsoluteName){ + struct vxworksFileId *pNew; /* search key and new file ID */ + struct vxworksFileId *pCandidate; /* For looping over existing file IDs */ + int n; /* Length of zAbsoluteName string */ + + assert( zAbsoluteName[0]=='/' ); + n = (int)strlen(zAbsoluteName); + pNew = sqlite3_malloc64( sizeof(*pNew) + (n+1) ); + if( pNew==0 ) return 0; + pNew->zCanonicalName = (char*)&pNew[1]; + memcpy(pNew->zCanonicalName, zAbsoluteName, n+1); + n = vxworksSimplifyName(pNew->zCanonicalName, n); + + /* Search for an existing entry that matching the canonical name. + ** If found, increment the reference count and return a pointer to + ** the existing file ID. + */ + sqlite3_mutex_enter(vxworksMutex); + for(pCandidate=vxworksFileList; pCandidate; pCandidate=pCandidate->pNext){ + if( pCandidate->nName==n + && memcmp(pCandidate->zCanonicalName, pNew->zCanonicalName, n)==0 + ){ + sqlite3_free(pNew); + pCandidate->nRef++; + sqlite3_mutex_leave(vxworksMutex); + return pCandidate; + } + } + + /* No match was found. We will make a new file ID */ + pNew->nRef = 1; + pNew->nName = n; + pNew->pNext = vxworksFileList; + vxworksFileList = pNew; + sqlite3_mutex_leave(vxworksMutex); + return pNew; +} + +/* +** Decrement the reference count on a vxworksFileId object. Free +** the object when the reference count reaches zero. +*/ +static void vxworksReleaseFileId(struct vxworksFileId *pId){ + sqlite3_mutex_enter(vxworksMutex); + assert( pId->nRef>0 ); + pId->nRef--; + if( pId->nRef==0 ){ + struct vxworksFileId **pp; + for(pp=&vxworksFileList; *pp && *pp!=pId; pp = &((*pp)->pNext)){} + assert( *pp==pId ); + *pp = pId->pNext; + sqlite3_free(pId); + } + sqlite3_mutex_leave(vxworksMutex); +} +#endif /* OS_VXWORKS */ +/*************** End of Unique File ID Utility Used By VxWorks **************** +******************************************************************************/ + + +/****************************************************************************** +*************************** Posix Advisory Locking **************************** +** +** POSIX advisory locks are broken by design. ANSI STD 1003.1 (1996) +** section 6.5.2.2 lines 483 through 490 specify that when a process +** sets or clears a lock, that operation overrides any prior locks set +** by the same process. It does not explicitly say so, but this implies +** that it overrides locks set by the same process using a different +** file descriptor. Consider this test case: +** +** int fd1 = open("./file1", O_RDWR|O_CREAT, 0644); +** int fd2 = open("./file2", O_RDWR|O_CREAT, 0644); +** +** Suppose ./file1 and ./file2 are really the same file (because +** one is a hard or symbolic link to the other) then if you set +** an exclusive lock on fd1, then try to get an exclusive lock +** on fd2, it works. I would have expected the second lock to +** fail since there was already a lock on the file due to fd1. +** But not so. Since both locks came from the same process, the +** second overrides the first, even though they were on different +** file descriptors opened on different file names. +** +** This means that we cannot use POSIX locks to synchronize file access +** among competing threads of the same process. POSIX locks will work fine +** to synchronize access for threads in separate processes, but not +** threads within the same process. +** +** To work around the problem, SQLite has to manage file locks internally +** on its own. Whenever a new database is opened, we have to find the +** specific inode of the database file (the inode is determined by the +** st_dev and st_ino fields of the stat structure that fstat() fills in) +** and check for locks already existing on that inode. When locks are +** created or removed, we have to look at our own internal record of the +** locks to see if another thread has previously set a lock on that same +** inode. +** +** (Aside: The use of inode numbers as unique IDs does not work on VxWorks. +** For VxWorks, we have to use the alternative unique ID system based on +** canonical filename and implemented in the previous division.) +** +** The sqlite3_file structure for POSIX is no longer just an integer file +** descriptor. It is now a structure that holds the integer file +** descriptor and a pointer to a structure that describes the internal +** locks on the corresponding inode. There is one locking structure +** per inode, so if the same inode is opened twice, both unixFile structures +** point to the same locking structure. The locking structure keeps +** a reference count (so we will know when to delete it) and a "cnt" +** field that tells us its internal lock status. cnt==0 means the +** file is unlocked. cnt==-1 means the file has an exclusive lock. +** cnt>0 means there are cnt shared locks on the file. +** +** Any attempt to lock or unlock a file first checks the locking +** structure. The fcntl() system call is only invoked to set a +** POSIX lock if the internal lock structure transitions between +** a locked and an unlocked state. +** +** But wait: there are yet more problems with POSIX advisory locks. +** +** If you close a file descriptor that points to a file that has locks, +** all locks on that file that are owned by the current process are +** released. To work around this problem, each unixInodeInfo object +** maintains a count of the number of pending locks on the inode. +** When an attempt is made to close an unixFile, if there are +** other unixFile open on the same inode that are holding locks, the call +** to close() the file descriptor is deferred until all of the locks clear. +** The unixInodeInfo structure keeps a list of file descriptors that need to +** be closed and that list is walked (and cleared) when the last lock +** clears. +** +** Yet another problem: LinuxThreads do not play well with posix locks. +** +** Many older versions of linux use the LinuxThreads library which is +** not posix compliant. Under LinuxThreads, a lock created by thread +** A cannot be modified or overridden by a different thread B. +** Only thread A can modify the lock. Locking behavior is correct +** if the application uses the newer Native Posix Thread Library (NPTL) +** on linux - with NPTL a lock created by thread A can override locks +** in thread B. But there is no way to know at compile-time which +** threading library is being used. So there is no way to know at +** compile-time whether or not thread A can override locks on thread B. +** One has to do a run-time check to discover the behavior of the +** current process. +** +** SQLite used to support LinuxThreads. But support for LinuxThreads +** was dropped beginning with version 3.7.0. SQLite will still work with +** LinuxThreads provided that (1) there is no more than one connection +** per database file in the same process and (2) database connections +** do not move across threads. +*/ + +/* +** An instance of the following structure serves as the key used +** to locate a particular unixInodeInfo object. +*/ +struct unixFileId { + dev_t dev; /* Device number */ +#if OS_VXWORKS + struct vxworksFileId *pId; /* Unique file ID for vxworks. */ +#else + /* We are told that some versions of Android contain a bug that + ** sizes ino_t at only 32-bits instead of 64-bits. (See + ** https://android-review.googlesource.com/#/c/115351/3/dist/sqlite3.c) + ** To work around this, always allocate 64-bits for the inode number. + ** On small machines that only have 32-bit inodes, this wastes 4 bytes, + ** but that should not be a big deal. */ + /* WAS: ino_t ino; */ + u64 ino; /* Inode number */ +#endif +}; + +/* +** An instance of the following structure is allocated for each open +** inode. +** +** A single inode can have multiple file descriptors, so each unixFile +** structure contains a pointer to an instance of this object and this +** object keeps a count of the number of unixFile pointing to it. +** +** Mutex rules: +** +** (1) Only the pLockMutex mutex must be held in order to read or write +** any of the locking fields: +** nShared, nLock, eFileLock, bProcessLock, pUnused +** +** (2) When nRef>0, then the following fields are unchanging and can +** be read (but not written) without holding any mutex: +** fileId, pLockMutex +** +** (3) With the exceptions above, all the fields may only be read +** or written while holding the global unixBigLock mutex. +** +** Deadlock prevention: The global unixBigLock mutex may not +** be acquired while holding the pLockMutex mutex. If both unixBigLock +** and pLockMutex are needed, then unixBigLock must be acquired first. +*/ +struct unixInodeInfo { + struct unixFileId fileId; /* The lookup key */ + sqlite3_mutex *pLockMutex; /* Hold this mutex for... */ + int nShared; /* Number of SHARED locks held */ + int nLock; /* Number of outstanding file locks */ + unsigned char eFileLock; /* One of SHARED_LOCK, RESERVED_LOCK etc. */ + unsigned char bProcessLock; /* An exclusive process lock is held */ + UnixUnusedFd *pUnused; /* Unused file descriptors to close */ + int nRef; /* Number of pointers to this structure */ + unixShmNode *pShmNode; /* Shared memory associated with this inode */ + unixInodeInfo *pNext; /* List of all unixInodeInfo objects */ + unixInodeInfo *pPrev; /* .... doubly linked */ +#if SQLITE_ENABLE_LOCKING_STYLE + unsigned long long sharedByte; /* for AFP simulated shared lock */ +#endif +#if OS_VXWORKS + sem_t *pSem; /* Named POSIX semaphore */ + char aSemName[MAX_PATHNAME+2]; /* Name of that semaphore */ +#endif +}; + +/* +** A lists of all unixInodeInfo objects. +** +** Must hold unixBigLock in order to read or write this variable. +*/ +static unixInodeInfo *inodeList = 0; /* All unixInodeInfo objects */ + +#ifdef SQLITE_DEBUG +/* +** True if the inode mutex (on the unixFile.pFileMutex field) is held, or not. +** This routine is used only within assert() to help verify correct mutex +** usage. +*/ +int unixFileMutexHeld(unixFile *pFile){ + assert( pFile->pInode ); + return sqlite3_mutex_held(pFile->pInode->pLockMutex); +} +int unixFileMutexNotheld(unixFile *pFile){ + assert( pFile->pInode ); + return sqlite3_mutex_notheld(pFile->pInode->pLockMutex); +} +#endif + +/* +** +** This function - unixLogErrorAtLine(), is only ever called via the macro +** unixLogError(). +** +** It is invoked after an error occurs in an OS function and errno has been +** set. It logs a message using sqlite3_log() containing the current value of +** errno and, if possible, the human-readable equivalent from strerror() or +** strerror_r(). +** +** The first argument passed to the macro should be the error code that +** will be returned to SQLite (e.g. SQLITE_IOERR_DELETE, SQLITE_CANTOPEN). +** The two subsequent arguments should be the name of the OS function that +** failed (e.g. "unlink", "open") and the associated file-system path, +** if any. +*/ +#define unixLogError(a,b,c) unixLogErrorAtLine(a,b,c,__LINE__) +static int unixLogErrorAtLine( + int errcode, /* SQLite error code */ + const char *zFunc, /* Name of OS function that failed */ + const char *zPath, /* File path associated with error */ + int iLine /* Source line number where error occurred */ +){ + char *zErr; /* Message from strerror() or equivalent */ + int iErrno = errno; /* Saved syscall error number */ + + /* If this is not a threadsafe build (SQLITE_THREADSAFE==0), then use + ** the strerror() function to obtain the human-readable error message + ** equivalent to errno. Otherwise, use strerror_r(). + */ +#if SQLITE_THREADSAFE && defined(HAVE_STRERROR_R) + char aErr[80]; + memset(aErr, 0, sizeof(aErr)); + zErr = aErr; + + /* If STRERROR_R_CHAR_P (set by autoconf scripts) or __USE_GNU is defined, + ** assume that the system provides the GNU version of strerror_r() that + ** returns a pointer to a buffer containing the error message. That pointer + ** may point to aErr[], or it may point to some static storage somewhere. + ** Otherwise, assume that the system provides the POSIX version of + ** strerror_r(), which always writes an error message into aErr[]. + ** + ** If the code incorrectly assumes that it is the POSIX version that is + ** available, the error message will often be an empty string. Not a + ** huge problem. Incorrectly concluding that the GNU version is available + ** could lead to a segfault though. + ** + ** Forum post 3f13857fa4062301 reports that the Android SDK may use + ** int-type return, depending on its version. + */ +#if (defined(STRERROR_R_CHAR_P) || defined(__USE_GNU)) \ + && !defined(ANDROID) && !defined(__ANDROID__) + zErr = +# endif + strerror_r(iErrno, aErr, sizeof(aErr)-1); + +#elif SQLITE_THREADSAFE + /* This is a threadsafe build, but strerror_r() is not available. */ + zErr = ""; +#else + /* Non-threadsafe build, use strerror(). */ + zErr = strerror(iErrno); +#endif + + if( zPath==0 ) zPath = ""; + sqlite3_log(errcode, + "os_unix.c:%d: (%d) %s(%s) - %s", + iLine, iErrno, zFunc, zPath, zErr + ); + + return errcode; +} + +/* +** Close a file descriptor. +** +** We assume that close() almost always works, since it is only in a +** very sick application or on a very sick platform that it might fail. +** If it does fail, simply leak the file descriptor, but do log the +** error. +** +** Note that it is not safe to retry close() after EINTR since the +** file descriptor might have already been reused by another thread. +** So we don't even try to recover from an EINTR. Just log the error +** and move on. +*/ +static void robust_close(unixFile *pFile, int h, int lineno){ + if( osClose(h) ){ + unixLogErrorAtLine(SQLITE_IOERR_CLOSE, "close", + pFile ? pFile->zPath : 0, lineno); + } +} + +/* +** Set the pFile->lastErrno. Do this in a subroutine as that provides +** a convenient place to set a breakpoint. +*/ +static void storeLastErrno(unixFile *pFile, int error){ + pFile->lastErrno = error; +} + +/* +** Close all file descriptors accumulated in the unixInodeInfo->pUnused list. +*/ +static void closePendingFds(unixFile *pFile){ + unixInodeInfo *pInode = pFile->pInode; + UnixUnusedFd *p; + UnixUnusedFd *pNext; + assert( unixFileMutexHeld(pFile) ); + for(p=pInode->pUnused; p; p=pNext){ + pNext = p->pNext; + robust_close(pFile, p->fd, __LINE__); + sqlite3_free(p); + } + pInode->pUnused = 0; +} + +/* +** Release a unixInodeInfo structure previously allocated by findInodeInfo(). +** +** The global mutex must be held when this routine is called, but the mutex +** on the inode being deleted must NOT be held. +*/ +static void releaseInodeInfo(unixFile *pFile){ + unixInodeInfo *pInode = pFile->pInode; + assert( unixMutexHeld() ); + assert( unixFileMutexNotheld(pFile) ); + if( ALWAYS(pInode) ){ + pInode->nRef--; + if( pInode->nRef==0 ){ + assert( pInode->pShmNode==0 ); + sqlite3_mutex_enter(pInode->pLockMutex); + closePendingFds(pFile); + sqlite3_mutex_leave(pInode->pLockMutex); + if( pInode->pPrev ){ + assert( pInode->pPrev->pNext==pInode ); + pInode->pPrev->pNext = pInode->pNext; + }else{ + assert( inodeList==pInode ); + inodeList = pInode->pNext; + } + if( pInode->pNext ){ + assert( pInode->pNext->pPrev==pInode ); + pInode->pNext->pPrev = pInode->pPrev; + } + sqlite3_mutex_free(pInode->pLockMutex); + sqlite3_free(pInode); + } + } +} + +/* +** Given a file descriptor, locate the unixInodeInfo object that +** describes that file descriptor. Create a new one if necessary. The +** return value might be uninitialized if an error occurs. +** +** The global mutex must held when calling this routine. +** +** Return an appropriate error code. +*/ +static int findInodeInfo( + unixFile *pFile, /* Unix file with file desc used in the key */ + unixInodeInfo **ppInode /* Return the unixInodeInfo object here */ +){ + int rc; /* System call return code */ + int fd; /* The file descriptor for pFile */ + struct unixFileId fileId; /* Lookup key for the unixInodeInfo */ + struct stat statbuf; /* Low-level file information */ + unixInodeInfo *pInode = 0; /* Candidate unixInodeInfo object */ + + assert( unixMutexHeld() ); + + /* Get low-level information about the file that we can used to + ** create a unique name for the file. + */ + fd = pFile->h; + rc = osFstat(fd, &statbuf); + if( rc!=0 ){ + storeLastErrno(pFile, errno); +#if defined(EOVERFLOW) && defined(SQLITE_DISABLE_LFS) + if( pFile->lastErrno==EOVERFLOW ) return SQLITE_NOLFS; +#endif + return SQLITE_IOERR; + } + +#ifdef __APPLE__ + /* On OS X on an msdos filesystem, the inode number is reported + ** incorrectly for zero-size files. See ticket #3260. To work + ** around this problem (we consider it a bug in OS X, not SQLite) + ** we always increase the file size to 1 by writing a single byte + ** prior to accessing the inode number. The one byte written is + ** an ASCII 'S' character which also happens to be the first byte + ** in the header of every SQLite database. In this way, if there + ** is a race condition such that another thread has already populated + ** the first page of the database, no damage is done. + */ + if( statbuf.st_size==0 && (pFile->fsFlags & SQLITE_FSFLAGS_IS_MSDOS)!=0 ){ + do{ rc = osWrite(fd, "S", 1); }while( rc<0 && errno==EINTR ); + if( rc!=1 ){ + storeLastErrno(pFile, errno); + return SQLITE_IOERR; + } + if( fsync(fd) ){ + storeLastErrno(pFile, errno); + return SQLITE_IOERR_FSYNC; + } + rc = osFstat(fd, &statbuf); + if( rc!=0 ){ + storeLastErrno(pFile, errno); + return SQLITE_IOERR; + } + } +#endif + + memset(&fileId, 0, sizeof(fileId)); + fileId.dev = statbuf.st_dev; +#if OS_VXWORKS + fileId.pId = pFile->pId; +#else + fileId.ino = (u64)statbuf.st_ino; +#endif + assert( unixMutexHeld() ); + pInode = inodeList; + while( pInode && memcmp(&fileId, &pInode->fileId, sizeof(fileId)) ){ + pInode = pInode->pNext; + } + if( pInode==0 ){ + pInode = sqlite3_malloc64( sizeof(*pInode) ); + if( pInode==0 ){ + return SQLITE_NOMEM_BKPT; + } + memset(pInode, 0, sizeof(*pInode)); + memcpy(&pInode->fileId, &fileId, sizeof(fileId)); + if( sqlite3GlobalConfig.bCoreMutex ){ + pInode->pLockMutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST); + if( pInode->pLockMutex==0 ){ + sqlite3_free(pInode); + return SQLITE_NOMEM_BKPT; + } + } + pInode->nRef = 1; + assert( unixMutexHeld() ); + pInode->pNext = inodeList; + pInode->pPrev = 0; + if( inodeList ) inodeList->pPrev = pInode; + inodeList = pInode; + }else{ + pInode->nRef++; + } + *ppInode = pInode; + return SQLITE_OK; +} + +/* +** Return TRUE if pFile has been renamed or unlinked since it was first opened. +*/ +static int fileHasMoved(unixFile *pFile){ +#if OS_VXWORKS + return pFile->pInode!=0 && pFile->pId!=pFile->pInode->fileId.pId; +#else + struct stat buf; + return pFile->pInode!=0 && + (osStat(pFile->zPath, &buf)!=0 + || (u64)buf.st_ino!=pFile->pInode->fileId.ino); +#endif +} + + +/* +** Check a unixFile that is a database. Verify the following: +** +** (1) There is exactly one hard link on the file +** (2) The file is not a symbolic link +** (3) The file has not been renamed or unlinked +** +** Issue sqlite3_log(SQLITE_WARNING,...) messages if anything is not right. +*/ +static void verifyDbFile(unixFile *pFile){ + struct stat buf; + int rc; + + /* These verifications occurs for the main database only */ + if( pFile->ctrlFlags & UNIXFILE_NOLOCK ) return; + + rc = osFstat(pFile->h, &buf); + if( rc!=0 ){ + sqlite3_log(SQLITE_WARNING, "cannot fstat db file %s", pFile->zPath); + return; + } + if( buf.st_nlink==0 ){ + sqlite3_log(SQLITE_WARNING, "file unlinked while open: %s", pFile->zPath); + return; + } + if( buf.st_nlink>1 ){ + sqlite3_log(SQLITE_WARNING, "multiple links to file: %s", pFile->zPath); + return; + } + if( fileHasMoved(pFile) ){ + sqlite3_log(SQLITE_WARNING, "file renamed while open: %s", pFile->zPath); + return; + } +} + + +/* +** This routine checks if there is a RESERVED lock held on the specified +** file by this or any other process. If such a lock is held, set *pResOut +** to a non-zero value otherwise *pResOut is set to zero. The return value +** is set to SQLITE_OK unless an I/O error occurs during lock checking. +*/ +static int unixCheckReservedLock(sqlite3_file *id, int *pResOut){ + int rc = SQLITE_OK; + int reserved = 0; + unixFile *pFile = (unixFile*)id; + + SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; ); + + assert( pFile ); + assert( pFile->eFileLock<=SHARED_LOCK ); + sqlite3_mutex_enter(pFile->pInode->pLockMutex); + + /* Check if a thread in this process holds such a lock */ + if( pFile->pInode->eFileLock>SHARED_LOCK ){ + reserved = 1; + } + + /* Otherwise see if some other process holds it. + */ +#ifndef __DJGPP__ + if( !reserved && !pFile->pInode->bProcessLock ){ + struct flock lock; + lock.l_whence = SEEK_SET; + lock.l_start = RESERVED_BYTE; + lock.l_len = 1; + lock.l_type = F_WRLCK; + if( osFcntl(pFile->h, F_GETLK, &lock) ){ + rc = SQLITE_IOERR_CHECKRESERVEDLOCK; + storeLastErrno(pFile, errno); + } else if( lock.l_type!=F_UNLCK ){ + reserved = 1; + } + } +#endif + + sqlite3_mutex_leave(pFile->pInode->pLockMutex); + OSTRACE(("TEST WR-LOCK %d %d %d (unix)\n", pFile->h, rc, reserved)); + + *pResOut = reserved; + return rc; +} + +/* Forward declaration*/ +static int unixSleep(sqlite3_vfs*,int); + +/* +** Set a posix-advisory-lock. +** +** There are two versions of this routine. If compiled with +** SQLITE_ENABLE_SETLK_TIMEOUT then the routine has an extra parameter +** which is a pointer to a unixFile. If the unixFile->iBusyTimeout +** value is set, then it is the number of milliseconds to wait before +** failing the lock. The iBusyTimeout value is always reset back to +** zero on each call. +** +** If SQLITE_ENABLE_SETLK_TIMEOUT is not defined, then do a non-blocking +** attempt to set the lock. +*/ +#ifndef SQLITE_ENABLE_SETLK_TIMEOUT +# define osSetPosixAdvisoryLock(h,x,t) osFcntl(h,F_SETLK,x) +#else +static int osSetPosixAdvisoryLock( + int h, /* The file descriptor on which to take the lock */ + struct flock *pLock, /* The description of the lock */ + unixFile *pFile /* Structure holding timeout value */ +){ + int rc = 0; + + if( pFile->iBusyTimeout==0 ){ + /* unixFile->iBusyTimeout is set to 0. In this case, attempt a + ** non-blocking lock. */ + rc = osFcntl(h,F_SETLK,pLock); + }else{ + /* unixFile->iBusyTimeout is set to greater than zero. In this case, + ** attempt a blocking-lock with a unixFile->iBusyTimeout ms timeout. + ** + ** On systems that support some kind of blocking file lock operation, + ** this block should be replaced by code to attempt a blocking lock + ** with a timeout of unixFile->iBusyTimeout ms. The code below is + ** placeholder code. If SQLITE_TEST is defined, the placeholder code + ** retries the lock once every 1ms until it succeeds or the timeout + ** is reached. Or, if SQLITE_TEST is not defined, the placeholder + ** code attempts a non-blocking lock and sets unixFile->iBusyTimeout + ** to 0. This causes the caller to return SQLITE_BUSY, instead of + ** SQLITE_BUSY_TIMEOUT to SQLite - as required by a VFS that does not + ** support blocking locks. + */ +#ifdef SQLITE_TEST + int tm = pFile->iBusyTimeout; + while( tm>0 ){ + rc = osFcntl(h,F_SETLK,pLock); + if( rc==0 ) break; + unixSleep(0,1000); + tm--; + } +#else + rc = osFcntl(h,F_SETLK,pLock); + pFile->iBusyTimeout = 0; +#endif + /* End of code to replace with real blocking-locks code. */ + } + + return rc; +} +#endif /* SQLITE_ENABLE_SETLK_TIMEOUT */ + + +/* +** Attempt to set a system-lock on the file pFile. The lock is +** described by pLock. +** +** If the pFile was opened read/write from unix-excl, then the only lock +** ever obtained is an exclusive lock, and it is obtained exactly once +** the first time any lock is attempted. All subsequent system locking +** operations become no-ops. Locking operations still happen internally, +** in order to coordinate access between separate database connections +** within this process, but all of that is handled in memory and the +** operating system does not participate. +** +** This function is a pass-through to fcntl(F_SETLK) if pFile is using +** any VFS other than "unix-excl" or if pFile is opened on "unix-excl" +** and is read-only. +** +** Zero is returned if the call completes successfully, or -1 if a call +** to fcntl() fails. In this case, errno is set appropriately (by fcntl()). +*/ +static int unixFileLock(unixFile *pFile, struct flock *pLock){ + int rc; + unixInodeInfo *pInode = pFile->pInode; + assert( pInode!=0 ); + assert( sqlite3_mutex_held(pInode->pLockMutex) ); + if( (pFile->ctrlFlags & (UNIXFILE_EXCL|UNIXFILE_RDONLY))==UNIXFILE_EXCL ){ + if( pInode->bProcessLock==0 ){ + struct flock lock; + /* assert( pInode->nLock==0 ); <-- Not true if unix-excl READONLY used */ + lock.l_whence = SEEK_SET; + lock.l_start = SHARED_FIRST; + lock.l_len = SHARED_SIZE; + lock.l_type = F_WRLCK; + rc = osSetPosixAdvisoryLock(pFile->h, &lock, pFile); + if( rc<0 ) return rc; + pInode->bProcessLock = 1; + pInode->nLock++; + }else{ + rc = 0; + } + }else{ +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + if( pFile->bBlockOnConnect && pLock->l_type==F_RDLCK + && pLock->l_start==SHARED_FIRST && pLock->l_len==SHARED_SIZE + ){ + rc = osFcntl(pFile->h, F_SETLKW, pLock); + }else +#endif + rc = osSetPosixAdvisoryLock(pFile->h, pLock, pFile); + } + return rc; +} + +#if !defined(SQLITE_WASI) && !defined(SQLITE_OMIT_WAL) +/* Forward reference */ +static int unixIsSharingShmNode(unixFile*); +#else +#define unixIsSharingShmNode(pFile) (0) +#endif + +/* +** Lock the file with the lock specified by parameter eFileLock - one +** of the following: +** +** (1) SHARED_LOCK +** (2) RESERVED_LOCK +** (3) PENDING_LOCK +** (4) EXCLUSIVE_LOCK +** +** Sometimes when requesting one lock state, additional lock states +** are inserted in between. The locking might fail on one of the later +** transitions leaving the lock state different from what it started but +** still short of its goal. The following chart shows the allowed +** transitions and the inserted intermediate states: +** +** UNLOCKED -> SHARED +** SHARED -> RESERVED +** SHARED -> EXCLUSIVE +** RESERVED -> (PENDING) -> EXCLUSIVE +** PENDING -> EXCLUSIVE +** +** This routine will only increase a lock. Use the sqlite3OsUnlock() +** routine to lower a locking level. +*/ +static int unixLock(sqlite3_file *id, int eFileLock){ + /* The following describes the implementation of the various locks and + ** lock transitions in terms of the POSIX advisory shared and exclusive + ** lock primitives (called read-locks and write-locks below, to avoid + ** confusion with SQLite lock names). The algorithms are complicated + ** slightly in order to be compatible with Windows95 systems simultaneously + ** accessing the same database file, in case that is ever required. + ** + ** Symbols defined in os.h identify the 'pending byte' and the 'reserved + ** byte', each single bytes at well known offsets, and the 'shared byte + ** range', a range of 510 bytes at a well known offset. + ** + ** To obtain a SHARED lock, a read-lock is obtained on the 'pending + ** byte'. If this is successful, 'shared byte range' is read-locked + ** and the lock on the 'pending byte' released. (Legacy note: When + ** SQLite was first developed, Windows95 systems were still very common, + ** and Windows95 lacks a shared-lock capability. So on Windows95, a + ** single randomly selected by from the 'shared byte range' is locked. + ** Windows95 is now pretty much extinct, but this work-around for the + ** lack of shared-locks on Windows95 lives on, for backwards + ** compatibility.) + ** + ** A process may only obtain a RESERVED lock after it has a SHARED lock. + ** A RESERVED lock is implemented by grabbing a write-lock on the + ** 'reserved byte'. + ** + ** An EXCLUSIVE lock may only be requested after either a SHARED or + ** RESERVED lock is held. An EXCLUSIVE lock is implemented by obtaining + ** a write-lock on the entire 'shared byte range'. Since all other locks + ** require a read-lock on one of the bytes within this range, this ensures + ** that no other locks are held on the database. + ** + ** If a process that holds a RESERVED lock requests an EXCLUSIVE, then + ** a PENDING lock is obtained first. A PENDING lock is implemented by + ** obtaining a write-lock on the 'pending byte'. This ensures that no new + ** SHARED locks can be obtained, but existing SHARED locks are allowed to + ** persist. If the call to this function fails to obtain the EXCLUSIVE + ** lock in this case, it holds the PENDING lock instead. The client may + ** then re-attempt the EXCLUSIVE lock later on, after existing SHARED + ** locks have cleared. + */ + int rc = SQLITE_OK; + unixFile *pFile = (unixFile*)id; + unixInodeInfo *pInode; + struct flock lock; + int tErrno = 0; + + assert( pFile ); + OSTRACE(("LOCK %d %s was %s(%s,%d) pid=%d (unix)\n", pFile->h, + azFileLock(eFileLock), azFileLock(pFile->eFileLock), + azFileLock(pFile->pInode->eFileLock), pFile->pInode->nShared, + osGetpid(0))); + + /* If there is already a lock of this type or more restrictive on the + ** unixFile, do nothing. Don't use the end_lock: exit path, as + ** unixEnterMutex() hasn't been called yet. + */ + if( pFile->eFileLock>=eFileLock ){ + OSTRACE(("LOCK %d %s ok (already held) (unix)\n", pFile->h, + azFileLock(eFileLock))); + return SQLITE_OK; + } + + /* Make sure the locking sequence is correct. + ** (1) We never move from unlocked to anything higher than shared lock. + ** (2) SQLite never explicitly requests a pending lock. + ** (3) A shared lock is always held when a reserve lock is requested. + */ + assert( pFile->eFileLock!=NO_LOCK || eFileLock==SHARED_LOCK ); + assert( eFileLock!=PENDING_LOCK ); + assert( eFileLock!=RESERVED_LOCK || pFile->eFileLock==SHARED_LOCK ); + + /* This mutex is needed because pFile->pInode is shared across threads + */ + pInode = pFile->pInode; + sqlite3_mutex_enter(pInode->pLockMutex); + + /* If some thread using this PID has a lock via a different unixFile* + ** handle that precludes the requested lock, return BUSY. + */ + if( (pFile->eFileLock!=pInode->eFileLock && + (pInode->eFileLock>=PENDING_LOCK || eFileLock>SHARED_LOCK)) + ){ + rc = SQLITE_BUSY; + goto end_lock; + } + + /* If a SHARED lock is requested, and some thread using this PID already + ** has a SHARED or RESERVED lock, then increment reference counts and + ** return SQLITE_OK. + */ + if( eFileLock==SHARED_LOCK && + (pInode->eFileLock==SHARED_LOCK || pInode->eFileLock==RESERVED_LOCK) ){ + assert( eFileLock==SHARED_LOCK ); + assert( pFile->eFileLock==0 ); + assert( pInode->nShared>0 ); + pFile->eFileLock = SHARED_LOCK; + pInode->nShared++; + pInode->nLock++; + goto end_lock; + } + + + /* A PENDING lock is needed before acquiring a SHARED lock and before + ** acquiring an EXCLUSIVE lock. For the SHARED lock, the PENDING will + ** be released. + */ + lock.l_len = 1L; + lock.l_whence = SEEK_SET; + if( eFileLock==SHARED_LOCK + || (eFileLock==EXCLUSIVE_LOCK && pFile->eFileLock==RESERVED_LOCK) + ){ + lock.l_type = (eFileLock==SHARED_LOCK?F_RDLCK:F_WRLCK); + lock.l_start = PENDING_BYTE; + if( unixFileLock(pFile, &lock) ){ + tErrno = errno; + rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK); + if( rc!=SQLITE_BUSY ){ + storeLastErrno(pFile, tErrno); + } + goto end_lock; + }else if( eFileLock==EXCLUSIVE_LOCK ){ + pFile->eFileLock = PENDING_LOCK; + pInode->eFileLock = PENDING_LOCK; + } + } + + + /* If control gets to this point, then actually go ahead and make + ** operating system calls for the specified lock. + */ + if( eFileLock==SHARED_LOCK ){ + assert( pInode->nShared==0 ); + assert( pInode->eFileLock==0 ); + assert( rc==SQLITE_OK ); + + /* Now get the read-lock */ + lock.l_start = SHARED_FIRST; + lock.l_len = SHARED_SIZE; + if( unixFileLock(pFile, &lock) ){ + tErrno = errno; + rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK); + } + + /* Drop the temporary PENDING lock */ + lock.l_start = PENDING_BYTE; + lock.l_len = 1L; + lock.l_type = F_UNLCK; + if( unixFileLock(pFile, &lock) && rc==SQLITE_OK ){ + /* This could happen with a network mount */ + tErrno = errno; + rc = SQLITE_IOERR_UNLOCK; + } + + if( rc ){ + if( rc!=SQLITE_BUSY ){ + storeLastErrno(pFile, tErrno); + } + goto end_lock; + }else{ + pFile->eFileLock = SHARED_LOCK; + pInode->nLock++; + pInode->nShared = 1; + } + }else if( eFileLock==EXCLUSIVE_LOCK && pInode->nShared>1 ){ + /* We are trying for an exclusive lock but another thread in this + ** same process is still holding a shared lock. */ + rc = SQLITE_BUSY; + }else if( unixIsSharingShmNode(pFile) ){ + /* We are in WAL mode and attempting to delete the SHM and WAL + ** files due to closing the connection or changing out of WAL mode, + ** but another process still holds locks on the SHM file, thus + ** indicating that database locks have been broken, perhaps due + ** to a rogue close(open(dbFile)) or similar. + */ + rc = SQLITE_BUSY; + }else{ + /* The request was for a RESERVED or EXCLUSIVE lock. It is + ** assumed that there is a SHARED or greater lock on the file + ** already. + */ + assert( 0!=pFile->eFileLock ); + lock.l_type = F_WRLCK; + + assert( eFileLock==RESERVED_LOCK || eFileLock==EXCLUSIVE_LOCK ); + if( eFileLock==RESERVED_LOCK ){ + lock.l_start = RESERVED_BYTE; + lock.l_len = 1L; + }else{ + lock.l_start = SHARED_FIRST; + lock.l_len = SHARED_SIZE; + } + + if( unixFileLock(pFile, &lock) ){ + tErrno = errno; + rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK); + if( rc!=SQLITE_BUSY ){ + storeLastErrno(pFile, tErrno); + } + } + } + + +#ifdef SQLITE_DEBUG + /* Set up the transaction-counter change checking flags when + ** transitioning from a SHARED to a RESERVED lock. The change + ** from SHARED to RESERVED marks the beginning of a normal + ** write operation (not a hot journal rollback). + */ + if( rc==SQLITE_OK + && pFile->eFileLock<=SHARED_LOCK + && eFileLock==RESERVED_LOCK + ){ + pFile->transCntrChng = 0; + pFile->dbUpdate = 0; + pFile->inNormalWrite = 1; + } +#endif + + if( rc==SQLITE_OK ){ + pFile->eFileLock = eFileLock; + pInode->eFileLock = eFileLock; + } + +end_lock: + sqlite3_mutex_leave(pInode->pLockMutex); + OSTRACE(("LOCK %d %s %s (unix)\n", pFile->h, azFileLock(eFileLock), + rc==SQLITE_OK ? "ok" : "failed")); + return rc; +} + +/* +** Add the file descriptor used by file handle pFile to the corresponding +** pUnused list. +*/ +static void setPendingFd(unixFile *pFile){ + unixInodeInfo *pInode = pFile->pInode; + UnixUnusedFd *p = pFile->pPreallocatedUnused; + assert( unixFileMutexHeld(pFile) ); + p->pNext = pInode->pUnused; + pInode->pUnused = p; + pFile->h = -1; + pFile->pPreallocatedUnused = 0; +} + +/* +** Lower the locking level on file descriptor pFile to eFileLock. eFileLock +** must be either NO_LOCK or SHARED_LOCK. +** +** If the locking level of the file descriptor is already at or below +** the requested locking level, this routine is a no-op. +** +** If handleNFSUnlock is true, then on downgrading an EXCLUSIVE_LOCK to SHARED +** the byte range is divided into 2 parts and the first part is unlocked then +** set to a read lock, then the other part is simply unlocked. This works +** around a bug in BSD NFS lockd (also seen on MacOSX 10.3+) that fails to +** remove the write lock on a region when a read lock is set. +*/ +static int posixUnlock(sqlite3_file *id, int eFileLock, int handleNFSUnlock){ + unixFile *pFile = (unixFile*)id; + unixInodeInfo *pInode; + struct flock lock; + int rc = SQLITE_OK; + + assert( pFile ); + OSTRACE(("UNLOCK %d %d was %d(%d,%d) pid=%d (unix)\n", pFile->h, eFileLock, + pFile->eFileLock, pFile->pInode->eFileLock, pFile->pInode->nShared, + osGetpid(0))); + + assert( eFileLock<=SHARED_LOCK ); + if( pFile->eFileLock<=eFileLock ){ + return SQLITE_OK; + } + pInode = pFile->pInode; + sqlite3_mutex_enter(pInode->pLockMutex); + assert( pInode->nShared!=0 ); + if( pFile->eFileLock>SHARED_LOCK ){ + assert( pInode->eFileLock==pFile->eFileLock ); + +#ifdef SQLITE_DEBUG + /* When reducing a lock such that other processes can start + ** reading the database file again, make sure that the + ** transaction counter was updated if any part of the database + ** file changed. If the transaction counter is not updated, + ** other connections to the same file might not realize that + ** the file has changed and hence might not know to flush their + ** cache. The use of a stale cache can lead to database corruption. + */ + pFile->inNormalWrite = 0; +#endif + + /* downgrading to a shared lock on NFS involves clearing the write lock + ** before establishing the readlock - to avoid a race condition we downgrade + ** the lock in 2 blocks, so that part of the range will be covered by a + ** write lock until the rest is covered by a read lock: + ** 1: [WWWWW] + ** 2: [....W] + ** 3: [RRRRW] + ** 4: [RRRR.] + */ + if( eFileLock==SHARED_LOCK ){ +#if !defined(__APPLE__) || !SQLITE_ENABLE_LOCKING_STYLE + (void)handleNFSUnlock; + assert( handleNFSUnlock==0 ); +#endif +#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE + if( handleNFSUnlock ){ + int tErrno; /* Error code from system call errors */ + off_t divSize = SHARED_SIZE - 1; + + lock.l_type = F_UNLCK; + lock.l_whence = SEEK_SET; + lock.l_start = SHARED_FIRST; + lock.l_len = divSize; + if( unixFileLock(pFile, &lock)==(-1) ){ + tErrno = errno; + rc = SQLITE_IOERR_UNLOCK; + storeLastErrno(pFile, tErrno); + goto end_unlock; + } + lock.l_type = F_RDLCK; + lock.l_whence = SEEK_SET; + lock.l_start = SHARED_FIRST; + lock.l_len = divSize; + if( unixFileLock(pFile, &lock)==(-1) ){ + tErrno = errno; + rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_RDLOCK); + if( IS_LOCK_ERROR(rc) ){ + storeLastErrno(pFile, tErrno); + } + goto end_unlock; + } + lock.l_type = F_UNLCK; + lock.l_whence = SEEK_SET; + lock.l_start = SHARED_FIRST+divSize; + lock.l_len = SHARED_SIZE-divSize; + if( unixFileLock(pFile, &lock)==(-1) ){ + tErrno = errno; + rc = SQLITE_IOERR_UNLOCK; + storeLastErrno(pFile, tErrno); + goto end_unlock; + } + }else +#endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */ + { + lock.l_type = F_RDLCK; + lock.l_whence = SEEK_SET; + lock.l_start = SHARED_FIRST; + lock.l_len = SHARED_SIZE; + if( unixFileLock(pFile, &lock) ){ + /* In theory, the call to unixFileLock() cannot fail because another + ** process is holding an incompatible lock. If it does, this + ** indicates that the other process is not following the locking + ** protocol. If this happens, return SQLITE_IOERR_RDLOCK. Returning + ** SQLITE_BUSY would confuse the upper layer (in practice it causes + ** an assert to fail). */ + rc = SQLITE_IOERR_RDLOCK; + storeLastErrno(pFile, errno); + goto end_unlock; + } + } + } + lock.l_type = F_UNLCK; + lock.l_whence = SEEK_SET; + lock.l_start = PENDING_BYTE; + lock.l_len = 2L; assert( PENDING_BYTE+1==RESERVED_BYTE ); + if( unixFileLock(pFile, &lock)==0 ){ + pInode->eFileLock = SHARED_LOCK; + }else{ + rc = SQLITE_IOERR_UNLOCK; + storeLastErrno(pFile, errno); + goto end_unlock; + } + } + if( eFileLock==NO_LOCK ){ + /* Decrement the shared lock counter. Release the lock using an + ** OS call only when all threads in this same process have released + ** the lock. + */ + pInode->nShared--; + if( pInode->nShared==0 ){ + lock.l_type = F_UNLCK; + lock.l_whence = SEEK_SET; + lock.l_start = lock.l_len = 0L; + if( unixFileLock(pFile, &lock)==0 ){ + pInode->eFileLock = NO_LOCK; + }else{ + rc = SQLITE_IOERR_UNLOCK; + storeLastErrno(pFile, errno); + pInode->eFileLock = NO_LOCK; + pFile->eFileLock = NO_LOCK; + } + } + + /* Decrement the count of locks against this same file. When the + ** count reaches zero, close any other file descriptors whose close + ** was deferred because of outstanding locks. + */ + pInode->nLock--; + assert( pInode->nLock>=0 ); + if( pInode->nLock==0 ) closePendingFds(pFile); + } + +end_unlock: + sqlite3_mutex_leave(pInode->pLockMutex); + if( rc==SQLITE_OK ){ + pFile->eFileLock = eFileLock; + } + return rc; +} + +/* +** Lower the locking level on file descriptor pFile to eFileLock. eFileLock +** must be either NO_LOCK or SHARED_LOCK. +** +** If the locking level of the file descriptor is already at or below +** the requested locking level, this routine is a no-op. +*/ +static int unixUnlock(sqlite3_file *id, int eFileLock){ +#if SQLITE_MAX_MMAP_SIZE>0 + assert( eFileLock==SHARED_LOCK || ((unixFile *)id)->nFetchOut==0 ); +#endif + return posixUnlock(id, eFileLock, 0); +} + +#if SQLITE_MAX_MMAP_SIZE>0 +static int unixMapfile(unixFile *pFd, i64 nByte); +static void unixUnmapfile(unixFile *pFd); +#endif + +/* +** This function performs the parts of the "close file" operation +** common to all locking schemes. It closes the directory and file +** handles, if they are valid, and sets all fields of the unixFile +** structure to 0. +** +** It is *not* necessary to hold the mutex when this routine is called, +** even on VxWorks. A mutex will be acquired on VxWorks by the +** vxworksReleaseFileId() routine. +*/ +static int closeUnixFile(sqlite3_file *id){ + unixFile *pFile = (unixFile*)id; +#if SQLITE_MAX_MMAP_SIZE>0 + unixUnmapfile(pFile); +#endif + if( pFile->h>=0 ){ + robust_close(pFile, pFile->h, __LINE__); + pFile->h = -1; + } +#if OS_VXWORKS + if( pFile->pId ){ + if( pFile->ctrlFlags & UNIXFILE_DELETE ){ + osUnlink(pFile->pId->zCanonicalName); + } + vxworksReleaseFileId(pFile->pId); + pFile->pId = 0; + } +#endif +#ifdef SQLITE_UNLINK_AFTER_CLOSE + if( pFile->ctrlFlags & UNIXFILE_DELETE ){ + osUnlink(pFile->zPath); + sqlite3_free(*(char**)&pFile->zPath); + pFile->zPath = 0; + } +#endif + OSTRACE(("CLOSE %-3d\n", pFile->h)); + OpenCounter(-1); + sqlite3_free(pFile->pPreallocatedUnused); + memset(pFile, 0, sizeof(unixFile)); + return SQLITE_OK; +} + +/* +** Close a file. +*/ +static int unixClose(sqlite3_file *id){ + int rc = SQLITE_OK; + unixFile *pFile = (unixFile *)id; + unixInodeInfo *pInode = pFile->pInode; + + assert( pInode!=0 ); + verifyDbFile(pFile); + unixUnlock(id, NO_LOCK); + assert( unixFileMutexNotheld(pFile) ); + unixEnterMutex(); + + /* unixFile.pInode is always valid here. Otherwise, a different close + ** routine (e.g. nolockClose()) would be called instead. + */ + assert( pFile->pInode->nLock>0 || pFile->pInode->bProcessLock==0 ); + sqlite3_mutex_enter(pInode->pLockMutex); + if( pInode->nLock ){ + /* If there are outstanding locks, do not actually close the file just + ** yet because that would clear those locks. Instead, add the file + ** descriptor to pInode->pUnused list. It will be automatically closed + ** when the last lock is cleared. + */ + setPendingFd(pFile); + } + sqlite3_mutex_leave(pInode->pLockMutex); + releaseInodeInfo(pFile); + assert( pFile->pShm==0 ); + rc = closeUnixFile(id); + unixLeaveMutex(); + return rc; +} + +/************** End of the posix advisory lock implementation ***************** +******************************************************************************/ + +/****************************************************************************** +****************************** No-op Locking ********************************** +** +** Of the various locking implementations available, this is by far the +** simplest: locking is ignored. No attempt is made to lock the database +** file for reading or writing. +** +** This locking mode is appropriate for use on read-only databases +** (ex: databases that are burned into CD-ROM, for example.) It can +** also be used if the application employs some external mechanism to +** prevent simultaneous access of the same database by two or more +** database connections. But there is a serious risk of database +** corruption if this locking mode is used in situations where multiple +** database connections are accessing the same database file at the same +** time and one or more of those connections are writing. +*/ + +static int nolockCheckReservedLock(sqlite3_file *NotUsed, int *pResOut){ + UNUSED_PARAMETER(NotUsed); + *pResOut = 0; + return SQLITE_OK; +} +static int nolockLock(sqlite3_file *NotUsed, int NotUsed2){ + UNUSED_PARAMETER2(NotUsed, NotUsed2); + return SQLITE_OK; +} +static int nolockUnlock(sqlite3_file *NotUsed, int NotUsed2){ + UNUSED_PARAMETER2(NotUsed, NotUsed2); + return SQLITE_OK; +} + +/* +** Close the file. +*/ +static int nolockClose(sqlite3_file *id) { + return closeUnixFile(id); +} + +/******************* End of the no-op lock implementation ********************* +******************************************************************************/ + +/****************************************************************************** +************************* Begin dot-file Locking ****************************** +** +** The dotfile locking implementation uses the existence of separate lock +** files (really a directory) to control access to the database. This works +** on just about every filesystem imaginable. But there are serious downsides: +** +** (1) There is zero concurrency. A single reader blocks all other +** connections from reading or writing the database. +** +** (2) An application crash or power loss can leave stale lock files +** sitting around that need to be cleared manually. +** +** Nevertheless, a dotlock is an appropriate locking mode for use if no +** other locking strategy is available. +** +** Dotfile locking works by creating a subdirectory in the same directory as +** the database and with the same name but with a ".lock" extension added. +** The existence of a lock directory implies an EXCLUSIVE lock. All other +** lock types (SHARED, RESERVED, PENDING) are mapped into EXCLUSIVE. +*/ + +/* +** The file suffix added to the data base filename in order to create the +** lock directory. +*/ +#define DOTLOCK_SUFFIX ".lock" + +/* +** This routine checks if there is a RESERVED lock held on the specified +** file by this or any other process. If the caller holds a SHARED +** or greater lock when it is called, then it is assumed that no other +** client may hold RESERVED. Or, if the caller holds no lock, then it +** is assumed another client holds RESERVED if the lock-file exists. +*/ +static int dotlockCheckReservedLock(sqlite3_file *id, int *pResOut) { + unixFile *pFile = (unixFile*)id; + SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; ); + + if( pFile->eFileLock>=SHARED_LOCK ){ + *pResOut = 0; + }else{ + *pResOut = osAccess((const char*)pFile->lockingContext, 0)==0; + } + OSTRACE(("TEST WR-LOCK %d %d %d (dotlock)\n", pFile->h, 0, *pResOut)); + return SQLITE_OK; +} + +/* +** Lock the file with the lock specified by parameter eFileLock - one +** of the following: +** +** (1) SHARED_LOCK +** (2) RESERVED_LOCK +** (3) PENDING_LOCK +** (4) EXCLUSIVE_LOCK +** +** Sometimes when requesting one lock state, additional lock states +** are inserted in between. The locking might fail on one of the later +** transitions leaving the lock state different from what it started but +** still short of its goal. The following chart shows the allowed +** transitions and the inserted intermediate states: +** +** UNLOCKED -> SHARED +** SHARED -> RESERVED +** SHARED -> (PENDING) -> EXCLUSIVE +** RESERVED -> (PENDING) -> EXCLUSIVE +** PENDING -> EXCLUSIVE +** +** This routine will only increase a lock. Use the sqlite3OsUnlock() +** routine to lower a locking level. +** +** With dotfile locking, we really only support state (4): EXCLUSIVE. +** But we track the other locking levels internally. +*/ +static int dotlockLock(sqlite3_file *id, int eFileLock) { + unixFile *pFile = (unixFile*)id; + char *zLockFile = (char *)pFile->lockingContext; + int rc = SQLITE_OK; + + + /* If we have any lock, then the lock file already exists. All we have + ** to do is adjust our internal record of the lock level. + */ + if( pFile->eFileLock > NO_LOCK ){ + pFile->eFileLock = eFileLock; + /* Always update the timestamp on the old file */ +#ifdef HAVE_UTIME + utime(zLockFile, NULL); +#else + utimes(zLockFile, NULL); +#endif + return SQLITE_OK; + } + + /* grab an exclusive lock */ + rc = osMkdir(zLockFile, 0777); + if( rc<0 ){ + /* failed to open/create the lock directory */ + int tErrno = errno; + if( EEXIST == tErrno ){ + rc = SQLITE_BUSY; + } else { + rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK); + if( rc!=SQLITE_BUSY ){ + storeLastErrno(pFile, tErrno); + } + } + return rc; + } + + /* got it, set the type and return ok */ + pFile->eFileLock = eFileLock; + return rc; +} + +/* +** Lower the locking level on file descriptor pFile to eFileLock. eFileLock +** must be either NO_LOCK or SHARED_LOCK. +** +** If the locking level of the file descriptor is already at or below +** the requested locking level, this routine is a no-op. +** +** When the locking level reaches NO_LOCK, delete the lock file. +*/ +static int dotlockUnlock(sqlite3_file *id, int eFileLock) { + unixFile *pFile = (unixFile*)id; + char *zLockFile = (char *)pFile->lockingContext; + int rc; + + assert( pFile ); + OSTRACE(("UNLOCK %d %d was %d pid=%d (dotlock)\n", pFile->h, eFileLock, + pFile->eFileLock, osGetpid(0))); + assert( eFileLock<=SHARED_LOCK ); + + /* no-op if possible */ + if( pFile->eFileLock==eFileLock ){ + return SQLITE_OK; + } + + /* To downgrade to shared, simply update our internal notion of the + ** lock state. No need to mess with the file on disk. + */ + if( eFileLock==SHARED_LOCK ){ + pFile->eFileLock = SHARED_LOCK; + return SQLITE_OK; + } + + /* To fully unlock the database, delete the lock file */ + assert( eFileLock==NO_LOCK ); + rc = osRmdir(zLockFile); + if( rc<0 ){ + int tErrno = errno; + if( tErrno==ENOENT ){ + rc = SQLITE_OK; + }else{ + rc = SQLITE_IOERR_UNLOCK; + storeLastErrno(pFile, tErrno); + } + return rc; + } + pFile->eFileLock = NO_LOCK; + return SQLITE_OK; +} + +/* +** Close a file. Make sure the lock has been released before closing. +*/ +static int dotlockClose(sqlite3_file *id) { + unixFile *pFile = (unixFile*)id; + assert( id!=0 ); + dotlockUnlock(id, NO_LOCK); + sqlite3_free(pFile->lockingContext); + return closeUnixFile(id); +} +/****************** End of the dot-file lock implementation ******************* +******************************************************************************/ + +/****************************************************************************** +************************** Begin flock Locking ******************************** +** +** Use the flock() system call to do file locking. +** +** flock() locking is like dot-file locking in that the various +** fine-grain locking levels supported by SQLite are collapsed into +** a single exclusive lock. In other words, SHARED, RESERVED, and +** PENDING locks are the same thing as an EXCLUSIVE lock. SQLite +** still works when you do this, but concurrency is reduced since +** only a single process can be reading the database at a time. +** +** Omit this section if SQLITE_ENABLE_LOCKING_STYLE is turned off +*/ +#if SQLITE_ENABLE_LOCKING_STYLE + +/* +** Retry flock() calls that fail with EINTR +*/ +#ifdef EINTR +static int robust_flock(int fd, int op){ + int rc; + do{ rc = flock(fd,op); }while( rc<0 && errno==EINTR ); + return rc; +} +#else +# define robust_flock(a,b) flock(a,b) +#endif + + +/* +** This routine checks if there is a RESERVED lock held on the specified +** file by this or any other process. If such a lock is held, set *pResOut +** to a non-zero value otherwise *pResOut is set to zero. The return value +** is set to SQLITE_OK unless an I/O error occurs during lock checking. +*/ +static int flockCheckReservedLock(sqlite3_file *id, int *pResOut){ +#ifdef SQLITE_DEBUG + unixFile *pFile = (unixFile*)id; +#else + UNUSED_PARAMETER(id); +#endif + + SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; ); + + assert( pFile ); + assert( pFile->eFileLock<=SHARED_LOCK ); + + /* The flock VFS only ever takes exclusive locks (see function flockLock). + ** Therefore, if this connection is holding any lock at all, no other + ** connection may be holding a RESERVED lock. So set *pResOut to 0 + ** in this case. + ** + ** Or, this connection may be holding no lock. In that case, set *pResOut to + ** 0 as well. The caller will then attempt to take an EXCLUSIVE lock on the + ** db in order to roll the hot journal back. If there is another connection + ** holding a lock, that attempt will fail and an SQLITE_BUSY returned to + ** the user. With other VFS, we try to avoid this, in order to allow a reader + ** to proceed while a writer is preparing its transaction. But that won't + ** work with the flock VFS - as it always takes EXCLUSIVE locks - so it is + ** not a problem in this case. */ + *pResOut = 0; + + return SQLITE_OK; +} + +/* +** Lock the file with the lock specified by parameter eFileLock - one +** of the following: +** +** (1) SHARED_LOCK +** (2) RESERVED_LOCK +** (3) PENDING_LOCK +** (4) EXCLUSIVE_LOCK +** +** Sometimes when requesting one lock state, additional lock states +** are inserted in between. The locking might fail on one of the later +** transitions leaving the lock state different from what it started but +** still short of its goal. The following chart shows the allowed +** transitions and the inserted intermediate states: +** +** UNLOCKED -> SHARED +** SHARED -> RESERVED +** SHARED -> (PENDING) -> EXCLUSIVE +** RESERVED -> (PENDING) -> EXCLUSIVE +** PENDING -> EXCLUSIVE +** +** flock() only really support EXCLUSIVE locks. We track intermediate +** lock states in the sqlite3_file structure, but all locks SHARED or +** above are really EXCLUSIVE locks and exclude all other processes from +** access the file. +** +** This routine will only increase a lock. Use the sqlite3OsUnlock() +** routine to lower a locking level. +*/ +static int flockLock(sqlite3_file *id, int eFileLock) { + int rc = SQLITE_OK; + unixFile *pFile = (unixFile*)id; + + assert( pFile ); + + /* if we already have a lock, it is exclusive. + ** Just adjust level and punt on outta here. */ + if (pFile->eFileLock > NO_LOCK) { + pFile->eFileLock = eFileLock; + return SQLITE_OK; + } + + /* grab an exclusive lock */ + + if (robust_flock(pFile->h, LOCK_EX | LOCK_NB)) { + int tErrno = errno; + /* didn't get, must be busy */ + rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK); + if( IS_LOCK_ERROR(rc) ){ + storeLastErrno(pFile, tErrno); + } + } else { + /* got it, set the type and return ok */ + pFile->eFileLock = eFileLock; + } + OSTRACE(("LOCK %d %s %s (flock)\n", pFile->h, azFileLock(eFileLock), + rc==SQLITE_OK ? "ok" : "failed")); +#ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS + if( (rc & 0xff) == SQLITE_IOERR ){ + rc = SQLITE_BUSY; + } +#endif /* SQLITE_IGNORE_FLOCK_LOCK_ERRORS */ + return rc; +} + + +/* +** Lower the locking level on file descriptor pFile to eFileLock. eFileLock +** must be either NO_LOCK or SHARED_LOCK. +** +** If the locking level of the file descriptor is already at or below +** the requested locking level, this routine is a no-op. +*/ +static int flockUnlock(sqlite3_file *id, int eFileLock) { + unixFile *pFile = (unixFile*)id; + + assert( pFile ); + OSTRACE(("UNLOCK %d %d was %d pid=%d (flock)\n", pFile->h, eFileLock, + pFile->eFileLock, osGetpid(0))); + assert( eFileLock<=SHARED_LOCK ); + + /* no-op if possible */ + if( pFile->eFileLock==eFileLock ){ + return SQLITE_OK; + } + + /* shared can just be set because we always have an exclusive */ + if (eFileLock==SHARED_LOCK) { + pFile->eFileLock = eFileLock; + return SQLITE_OK; + } + + /* no, really, unlock. */ + if( robust_flock(pFile->h, LOCK_UN) ){ +#ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS + return SQLITE_OK; +#endif /* SQLITE_IGNORE_FLOCK_LOCK_ERRORS */ + return SQLITE_IOERR_UNLOCK; + }else{ + pFile->eFileLock = NO_LOCK; + return SQLITE_OK; + } +} + +/* +** Close a file. +*/ +static int flockClose(sqlite3_file *id) { + assert( id!=0 ); + flockUnlock(id, NO_LOCK); + return closeUnixFile(id); +} + +#endif /* SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORK */ + +/******************* End of the flock lock implementation ********************* +******************************************************************************/ + +/****************************************************************************** +************************ Begin Named Semaphore Locking ************************ +** +** Named semaphore locking is only supported on VxWorks. +** +** Semaphore locking is like dot-lock and flock in that it really only +** supports EXCLUSIVE locking. Only a single process can read or write +** the database file at a time. This reduces potential concurrency, but +** makes the lock implementation much easier. +*/ +#if OS_VXWORKS + +/* +** This routine checks if there is a RESERVED lock held on the specified +** file by this or any other process. If such a lock is held, set *pResOut +** to a non-zero value otherwise *pResOut is set to zero. The return value +** is set to SQLITE_OK unless an I/O error occurs during lock checking. +*/ +static int semXCheckReservedLock(sqlite3_file *id, int *pResOut) { + int rc = SQLITE_OK; + int reserved = 0; + unixFile *pFile = (unixFile*)id; + + SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; ); + + assert( pFile ); + + /* Check if a thread in this process holds such a lock */ + if( pFile->eFileLock>SHARED_LOCK ){ + reserved = 1; + } + + /* Otherwise see if some other process holds it. */ + if( !reserved ){ + sem_t *pSem = pFile->pInode->pSem; + + if( sem_trywait(pSem)==-1 ){ + int tErrno = errno; + if( EAGAIN != tErrno ){ + rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_CHECKRESERVEDLOCK); + storeLastErrno(pFile, tErrno); + } else { + /* someone else has the lock when we are in NO_LOCK */ + reserved = (pFile->eFileLock < SHARED_LOCK); + } + }else{ + /* we could have it if we want it */ + sem_post(pSem); + } + } + OSTRACE(("TEST WR-LOCK %d %d %d (sem)\n", pFile->h, rc, reserved)); + + *pResOut = reserved; + return rc; +} + +/* +** Lock the file with the lock specified by parameter eFileLock - one +** of the following: +** +** (1) SHARED_LOCK +** (2) RESERVED_LOCK +** (3) PENDING_LOCK +** (4) EXCLUSIVE_LOCK +** +** Sometimes when requesting one lock state, additional lock states +** are inserted in between. The locking might fail on one of the later +** transitions leaving the lock state different from what it started but +** still short of its goal. The following chart shows the allowed +** transitions and the inserted intermediate states: +** +** UNLOCKED -> SHARED +** SHARED -> RESERVED +** SHARED -> (PENDING) -> EXCLUSIVE +** RESERVED -> (PENDING) -> EXCLUSIVE +** PENDING -> EXCLUSIVE +** +** Semaphore locks only really support EXCLUSIVE locks. We track intermediate +** lock states in the sqlite3_file structure, but all locks SHARED or +** above are really EXCLUSIVE locks and exclude all other processes from +** access the file. +** +** This routine will only increase a lock. Use the sqlite3OsUnlock() +** routine to lower a locking level. +*/ +static int semXLock(sqlite3_file *id, int eFileLock) { + unixFile *pFile = (unixFile*)id; + sem_t *pSem = pFile->pInode->pSem; + int rc = SQLITE_OK; + + /* if we already have a lock, it is exclusive. + ** Just adjust level and punt on outta here. */ + if (pFile->eFileLock > NO_LOCK) { + pFile->eFileLock = eFileLock; + rc = SQLITE_OK; + goto sem_end_lock; + } + + /* lock semaphore now but bail out when already locked. */ + if( sem_trywait(pSem)==-1 ){ + rc = SQLITE_BUSY; + goto sem_end_lock; + } + + /* got it, set the type and return ok */ + pFile->eFileLock = eFileLock; + + sem_end_lock: + return rc; +} + +/* +** Lower the locking level on file descriptor pFile to eFileLock. eFileLock +** must be either NO_LOCK or SHARED_LOCK. +** +** If the locking level of the file descriptor is already at or below +** the requested locking level, this routine is a no-op. +*/ +static int semXUnlock(sqlite3_file *id, int eFileLock) { + unixFile *pFile = (unixFile*)id; + sem_t *pSem = pFile->pInode->pSem; + + assert( pFile ); + assert( pSem ); + OSTRACE(("UNLOCK %d %d was %d pid=%d (sem)\n", pFile->h, eFileLock, + pFile->eFileLock, osGetpid(0))); + assert( eFileLock<=SHARED_LOCK ); + + /* no-op if possible */ + if( pFile->eFileLock==eFileLock ){ + return SQLITE_OK; + } + + /* shared can just be set because we always have an exclusive */ + if (eFileLock==SHARED_LOCK) { + pFile->eFileLock = eFileLock; + return SQLITE_OK; + } + + /* no, really unlock. */ + if ( sem_post(pSem)==-1 ) { + int rc, tErrno = errno; + rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK); + if( IS_LOCK_ERROR(rc) ){ + storeLastErrno(pFile, tErrno); + } + return rc; + } + pFile->eFileLock = NO_LOCK; + return SQLITE_OK; +} + +/* + ** Close a file. + */ +static int semXClose(sqlite3_file *id) { + if( id ){ + unixFile *pFile = (unixFile*)id; + semXUnlock(id, NO_LOCK); + assert( pFile ); + assert( unixFileMutexNotheld(pFile) ); + unixEnterMutex(); + releaseInodeInfo(pFile); + unixLeaveMutex(); + closeUnixFile(id); + } + return SQLITE_OK; +} + +#endif /* OS_VXWORKS */ +/* +** Named semaphore locking is only available on VxWorks. +** +*************** End of the named semaphore lock implementation **************** +******************************************************************************/ + + +/****************************************************************************** +*************************** Begin AFP Locking ********************************* +** +** AFP is the Apple Filing Protocol. AFP is a network filesystem found +** on Apple Macintosh computers - both OS9 and OSX. +** +** Third-party implementations of AFP are available. But this code here +** only works on OSX. +*/ + +#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE +/* +** The afpLockingContext structure contains all afp lock specific state +*/ +typedef struct afpLockingContext afpLockingContext; +struct afpLockingContext { + int reserved; + const char *dbPath; /* Name of the open file */ +}; + +struct ByteRangeLockPB2 +{ + unsigned long long offset; /* offset to first byte to lock */ + unsigned long long length; /* nbr of bytes to lock */ + unsigned long long retRangeStart; /* nbr of 1st byte locked if successful */ + unsigned char unLockFlag; /* 1 = unlock, 0 = lock */ + unsigned char startEndFlag; /* 1=rel to end of fork, 0=rel to start */ + int fd; /* file desc to assoc this lock with */ +}; + +#define afpfsByteRangeLock2FSCTL _IOWR('z', 23, struct ByteRangeLockPB2) + +/* +** This is a utility for setting or clearing a bit-range lock on an +** AFP filesystem. +** +** Return SQLITE_OK on success, SQLITE_BUSY on failure. +*/ +static int afpSetLock( + const char *path, /* Name of the file to be locked or unlocked */ + unixFile *pFile, /* Open file descriptor on path */ + unsigned long long offset, /* First byte to be locked */ + unsigned long long length, /* Number of bytes to lock */ + int setLockFlag /* True to set lock. False to clear lock */ +){ + struct ByteRangeLockPB2 pb; + int err; + + pb.unLockFlag = setLockFlag ? 0 : 1; + pb.startEndFlag = 0; + pb.offset = offset; + pb.length = length; + pb.fd = pFile->h; + + OSTRACE(("AFPSETLOCK [%s] for %d%s in range %llx:%llx\n", + (setLockFlag?"ON":"OFF"), pFile->h, (pb.fd==-1?"[testval-1]":""), + offset, length)); + err = fsctl(path, afpfsByteRangeLock2FSCTL, &pb, 0); + if ( err==-1 ) { + int rc; + int tErrno = errno; + OSTRACE(("AFPSETLOCK failed to fsctl() '%s' %d %s\n", + path, tErrno, strerror(tErrno))); +#ifdef SQLITE_IGNORE_AFP_LOCK_ERRORS + rc = SQLITE_BUSY; +#else + rc = sqliteErrorFromPosixError(tErrno, + setLockFlag ? SQLITE_IOERR_LOCK : SQLITE_IOERR_UNLOCK); +#endif /* SQLITE_IGNORE_AFP_LOCK_ERRORS */ + if( IS_LOCK_ERROR(rc) ){ + storeLastErrno(pFile, tErrno); + } + return rc; + } else { + return SQLITE_OK; + } +} + +/* +** This routine checks if there is a RESERVED lock held on the specified +** file by this or any other process. If such a lock is held, set *pResOut +** to a non-zero value otherwise *pResOut is set to zero. The return value +** is set to SQLITE_OK unless an I/O error occurs during lock checking. +*/ +static int afpCheckReservedLock(sqlite3_file *id, int *pResOut){ + int rc = SQLITE_OK; + int reserved = 0; + unixFile *pFile = (unixFile*)id; + afpLockingContext *context; + + SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; ); + + assert( pFile ); + context = (afpLockingContext *) pFile->lockingContext; + if( context->reserved ){ + *pResOut = 1; + return SQLITE_OK; + } + sqlite3_mutex_enter(pFile->pInode->pLockMutex); + /* Check if a thread in this process holds such a lock */ + if( pFile->pInode->eFileLock>SHARED_LOCK ){ + reserved = 1; + } + + /* Otherwise see if some other process holds it. + */ + if( !reserved ){ + /* lock the RESERVED byte */ + int lrc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1,1); + if( SQLITE_OK==lrc ){ + /* if we succeeded in taking the reserved lock, unlock it to restore + ** the original state */ + lrc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1, 0); + } else { + /* if we failed to get the lock then someone else must have it */ + reserved = 1; + } + if( IS_LOCK_ERROR(lrc) ){ + rc=lrc; + } + } + + sqlite3_mutex_leave(pFile->pInode->pLockMutex); + OSTRACE(("TEST WR-LOCK %d %d %d (afp)\n", pFile->h, rc, reserved)); + + *pResOut = reserved; + return rc; +} + +/* +** Lock the file with the lock specified by parameter eFileLock - one +** of the following: +** +** (1) SHARED_LOCK +** (2) RESERVED_LOCK +** (3) PENDING_LOCK +** (4) EXCLUSIVE_LOCK +** +** Sometimes when requesting one lock state, additional lock states +** are inserted in between. The locking might fail on one of the later +** transitions leaving the lock state different from what it started but +** still short of its goal. The following chart shows the allowed +** transitions and the inserted intermediate states: +** +** UNLOCKED -> SHARED +** SHARED -> RESERVED +** SHARED -> (PENDING) -> EXCLUSIVE +** RESERVED -> (PENDING) -> EXCLUSIVE +** PENDING -> EXCLUSIVE +** +** This routine will only increase a lock. Use the sqlite3OsUnlock() +** routine to lower a locking level. +*/ +static int afpLock(sqlite3_file *id, int eFileLock){ + int rc = SQLITE_OK; + unixFile *pFile = (unixFile*)id; + unixInodeInfo *pInode = pFile->pInode; + afpLockingContext *context = (afpLockingContext *) pFile->lockingContext; + + assert( pFile ); + OSTRACE(("LOCK %d %s was %s(%s,%d) pid=%d (afp)\n", pFile->h, + azFileLock(eFileLock), azFileLock(pFile->eFileLock), + azFileLock(pInode->eFileLock), pInode->nShared , osGetpid(0))); + + /* If there is already a lock of this type or more restrictive on the + ** unixFile, do nothing. Don't use the afp_end_lock: exit path, as + ** unixEnterMutex() hasn't been called yet. + */ + if( pFile->eFileLock>=eFileLock ){ + OSTRACE(("LOCK %d %s ok (already held) (afp)\n", pFile->h, + azFileLock(eFileLock))); + return SQLITE_OK; + } + + /* Make sure the locking sequence is correct + ** (1) We never move from unlocked to anything higher than shared lock. + ** (2) SQLite never explicitly requests a pending lock. + ** (3) A shared lock is always held when a reserve lock is requested. + */ + assert( pFile->eFileLock!=NO_LOCK || eFileLock==SHARED_LOCK ); + assert( eFileLock!=PENDING_LOCK ); + assert( eFileLock!=RESERVED_LOCK || pFile->eFileLock==SHARED_LOCK ); + + /* This mutex is needed because pFile->pInode is shared across threads + */ + pInode = pFile->pInode; + sqlite3_mutex_enter(pInode->pLockMutex); + + /* If some thread using this PID has a lock via a different unixFile* + ** handle that precludes the requested lock, return BUSY. + */ + if( (pFile->eFileLock!=pInode->eFileLock && + (pInode->eFileLock>=PENDING_LOCK || eFileLock>SHARED_LOCK)) + ){ + rc = SQLITE_BUSY; + goto afp_end_lock; + } + + /* If a SHARED lock is requested, and some thread using this PID already + ** has a SHARED or RESERVED lock, then increment reference counts and + ** return SQLITE_OK. + */ + if( eFileLock==SHARED_LOCK && + (pInode->eFileLock==SHARED_LOCK || pInode->eFileLock==RESERVED_LOCK) ){ + assert( eFileLock==SHARED_LOCK ); + assert( pFile->eFileLock==0 ); + assert( pInode->nShared>0 ); + pFile->eFileLock = SHARED_LOCK; + pInode->nShared++; + pInode->nLock++; + goto afp_end_lock; + } + + /* A PENDING lock is needed before acquiring a SHARED lock and before + ** acquiring an EXCLUSIVE lock. For the SHARED lock, the PENDING will + ** be released. + */ + if( eFileLock==SHARED_LOCK + || (eFileLock==EXCLUSIVE_LOCK && pFile->eFileLockdbPath, pFile, PENDING_BYTE, 1, 1); + if (failed) { + rc = failed; + goto afp_end_lock; + } + } + + /* If control gets to this point, then actually go ahead and make + ** operating system calls for the specified lock. + */ + if( eFileLock==SHARED_LOCK ){ + int lrc1, lrc2, lrc1Errno = 0; + long lk, mask; + + assert( pInode->nShared==0 ); + assert( pInode->eFileLock==0 ); + + mask = (sizeof(long)==8) ? LARGEST_INT64 : 0x7fffffff; + /* Now get the read-lock SHARED_LOCK */ + /* note that the quality of the randomness doesn't matter that much */ + lk = random(); + pInode->sharedByte = (lk & mask)%(SHARED_SIZE - 1); + lrc1 = afpSetLock(context->dbPath, pFile, + SHARED_FIRST+pInode->sharedByte, 1, 1); + if( IS_LOCK_ERROR(lrc1) ){ + lrc1Errno = pFile->lastErrno; + } + /* Drop the temporary PENDING lock */ + lrc2 = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 0); + + if( IS_LOCK_ERROR(lrc1) ) { + storeLastErrno(pFile, lrc1Errno); + rc = lrc1; + goto afp_end_lock; + } else if( IS_LOCK_ERROR(lrc2) ){ + rc = lrc2; + goto afp_end_lock; + } else if( lrc1 != SQLITE_OK ) { + rc = lrc1; + } else { + pFile->eFileLock = SHARED_LOCK; + pInode->nLock++; + pInode->nShared = 1; + } + }else if( eFileLock==EXCLUSIVE_LOCK && pInode->nShared>1 ){ + /* We are trying for an exclusive lock but another thread in this + ** same process is still holding a shared lock. */ + rc = SQLITE_BUSY; + }else{ + /* The request was for a RESERVED or EXCLUSIVE lock. It is + ** assumed that there is a SHARED or greater lock on the file + ** already. + */ + int failed = 0; + assert( 0!=pFile->eFileLock ); + if (eFileLock >= RESERVED_LOCK && pFile->eFileLock < RESERVED_LOCK) { + /* Acquire a RESERVED lock */ + failed = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1,1); + if( !failed ){ + context->reserved = 1; + } + } + if (!failed && eFileLock == EXCLUSIVE_LOCK) { + /* Acquire an EXCLUSIVE lock */ + + /* Remove the shared lock before trying the range. we'll need to + ** reestablish the shared lock if we can't get the afpUnlock + */ + if( !(failed = afpSetLock(context->dbPath, pFile, SHARED_FIRST + + pInode->sharedByte, 1, 0)) ){ + int failed2 = SQLITE_OK; + /* now attempt to get the exclusive lock range */ + failed = afpSetLock(context->dbPath, pFile, SHARED_FIRST, + SHARED_SIZE, 1); + if( failed && (failed2 = afpSetLock(context->dbPath, pFile, + SHARED_FIRST + pInode->sharedByte, 1, 1)) ){ + /* Can't reestablish the shared lock. Sqlite can't deal, this is + ** a critical I/O error + */ + rc = ((failed & 0xff) == SQLITE_IOERR) ? failed2 : + SQLITE_IOERR_LOCK; + goto afp_end_lock; + } + }else{ + rc = failed; + } + } + if( failed ){ + rc = failed; + } + } + + if( rc==SQLITE_OK ){ + pFile->eFileLock = eFileLock; + pInode->eFileLock = eFileLock; + }else if( eFileLock==EXCLUSIVE_LOCK ){ + pFile->eFileLock = PENDING_LOCK; + pInode->eFileLock = PENDING_LOCK; + } + +afp_end_lock: + sqlite3_mutex_leave(pInode->pLockMutex); + OSTRACE(("LOCK %d %s %s (afp)\n", pFile->h, azFileLock(eFileLock), + rc==SQLITE_OK ? "ok" : "failed")); + return rc; +} + +/* +** Lower the locking level on file descriptor pFile to eFileLock. eFileLock +** must be either NO_LOCK or SHARED_LOCK. +** +** If the locking level of the file descriptor is already at or below +** the requested locking level, this routine is a no-op. +*/ +static int afpUnlock(sqlite3_file *id, int eFileLock) { + int rc = SQLITE_OK; + unixFile *pFile = (unixFile*)id; + unixInodeInfo *pInode; + afpLockingContext *context = (afpLockingContext *) pFile->lockingContext; + int skipShared = 0; + + assert( pFile ); + OSTRACE(("UNLOCK %d %d was %d(%d,%d) pid=%d (afp)\n", pFile->h, eFileLock, + pFile->eFileLock, pFile->pInode->eFileLock, pFile->pInode->nShared, + osGetpid(0))); + + assert( eFileLock<=SHARED_LOCK ); + if( pFile->eFileLock<=eFileLock ){ + return SQLITE_OK; + } + pInode = pFile->pInode; + sqlite3_mutex_enter(pInode->pLockMutex); + assert( pInode->nShared!=0 ); + if( pFile->eFileLock>SHARED_LOCK ){ + assert( pInode->eFileLock==pFile->eFileLock ); + +#ifdef SQLITE_DEBUG + /* When reducing a lock such that other processes can start + ** reading the database file again, make sure that the + ** transaction counter was updated if any part of the database + ** file changed. If the transaction counter is not updated, + ** other connections to the same file might not realize that + ** the file has changed and hence might not know to flush their + ** cache. The use of a stale cache can lead to database corruption. + */ + assert( pFile->inNormalWrite==0 + || pFile->dbUpdate==0 + || pFile->transCntrChng==1 ); + pFile->inNormalWrite = 0; +#endif + + if( pFile->eFileLock==EXCLUSIVE_LOCK ){ + rc = afpSetLock(context->dbPath, pFile, SHARED_FIRST, SHARED_SIZE, 0); + if( rc==SQLITE_OK && (eFileLock==SHARED_LOCK || pInode->nShared>1) ){ + /* only re-establish the shared lock if necessary */ + int sharedLockByte = SHARED_FIRST+pInode->sharedByte; + rc = afpSetLock(context->dbPath, pFile, sharedLockByte, 1, 1); + } else { + skipShared = 1; + } + } + if( rc==SQLITE_OK && pFile->eFileLock>=PENDING_LOCK ){ + rc = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 0); + } + if( rc==SQLITE_OK && pFile->eFileLock>=RESERVED_LOCK && context->reserved ){ + rc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1, 0); + if( !rc ){ + context->reserved = 0; + } + } + if( rc==SQLITE_OK && (eFileLock==SHARED_LOCK || pInode->nShared>1)){ + pInode->eFileLock = SHARED_LOCK; + } + } + if( rc==SQLITE_OK && eFileLock==NO_LOCK ){ + + /* Decrement the shared lock counter. Release the lock using an + ** OS call only when all threads in this same process have released + ** the lock. + */ + unsigned long long sharedLockByte = SHARED_FIRST+pInode->sharedByte; + pInode->nShared--; + if( pInode->nShared==0 ){ + if( !skipShared ){ + rc = afpSetLock(context->dbPath, pFile, sharedLockByte, 1, 0); + } + if( !rc ){ + pInode->eFileLock = NO_LOCK; + pFile->eFileLock = NO_LOCK; + } + } + if( rc==SQLITE_OK ){ + pInode->nLock--; + assert( pInode->nLock>=0 ); + if( pInode->nLock==0 ) closePendingFds(pFile); + } + } + + sqlite3_mutex_leave(pInode->pLockMutex); + if( rc==SQLITE_OK ){ + pFile->eFileLock = eFileLock; + } + return rc; +} + +/* +** Close a file & cleanup AFP specific locking context +*/ +static int afpClose(sqlite3_file *id) { + int rc = SQLITE_OK; + unixFile *pFile = (unixFile*)id; + assert( id!=0 ); + afpUnlock(id, NO_LOCK); + assert( unixFileMutexNotheld(pFile) ); + unixEnterMutex(); + if( pFile->pInode ){ + unixInodeInfo *pInode = pFile->pInode; + sqlite3_mutex_enter(pInode->pLockMutex); + if( pInode->nLock ){ + /* If there are outstanding locks, do not actually close the file just + ** yet because that would clear those locks. Instead, add the file + ** descriptor to pInode->aPending. It will be automatically closed when + ** the last lock is cleared. + */ + setPendingFd(pFile); + } + sqlite3_mutex_leave(pInode->pLockMutex); + } + releaseInodeInfo(pFile); + sqlite3_free(pFile->lockingContext); + rc = closeUnixFile(id); + unixLeaveMutex(); + return rc; +} + +#endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */ +/* +** The code above is the AFP lock implementation. The code is specific +** to MacOSX and does not work on other unix platforms. No alternative +** is available. If you don't compile for a mac, then the "unix-afp" +** VFS is not available. +** +********************* End of the AFP lock implementation ********************** +******************************************************************************/ + +/****************************************************************************** +*************************** Begin NFS Locking ********************************/ + +#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE +/* + ** Lower the locking level on file descriptor pFile to eFileLock. eFileLock + ** must be either NO_LOCK or SHARED_LOCK. + ** + ** If the locking level of the file descriptor is already at or below + ** the requested locking level, this routine is a no-op. + */ +static int nfsUnlock(sqlite3_file *id, int eFileLock){ + return posixUnlock(id, eFileLock, 1); +} + +#endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */ +/* +** The code above is the NFS lock implementation. The code is specific +** to MacOSX and does not work on other unix platforms. No alternative +** is available. +** +********************* End of the NFS lock implementation ********************** +******************************************************************************/ + +/****************************************************************************** +**************** Non-locking sqlite3_file methods ***************************** +** +** The next division contains implementations for all methods of the +** sqlite3_file object other than the locking methods. The locking +** methods were defined in divisions above (one locking method per +** division). Those methods that are common to all locking modes +** are gather together into this division. +*/ + +/* +** Seek to the offset passed as the second argument, then read cnt +** bytes into pBuf. Return the number of bytes actually read. +** +** To avoid stomping the errno value on a failed read the lastErrno value +** is set before returning. +*/ +static int seekAndRead(unixFile *id, sqlite3_int64 offset, void *pBuf, int cnt){ + int got; + int prior = 0; +#if (!defined(USE_PREAD) && !defined(USE_PREAD64)) + i64 newOffset; +#endif + TIMER_START; + assert( cnt==(cnt&0x1ffff) ); + assert( id->h>2 ); + do{ +#if defined(USE_PREAD) + got = osPread(id->h, pBuf, cnt, offset); + SimulateIOError( got = -1 ); +#elif defined(USE_PREAD64) + got = osPread64(id->h, pBuf, cnt, offset); + SimulateIOError( got = -1 ); +#else + newOffset = lseek(id->h, offset, SEEK_SET); + SimulateIOError( newOffset = -1 ); + if( newOffset<0 ){ + storeLastErrno((unixFile*)id, errno); + return -1; + } + got = osRead(id->h, pBuf, cnt); +#endif + if( got==cnt ) break; + if( got<0 ){ + if( errno==EINTR ){ got = 1; continue; } + prior = 0; + storeLastErrno((unixFile*)id, errno); + break; + }else if( got>0 ){ + cnt -= got; + offset += got; + prior += got; + pBuf = (void*)(got + (char*)pBuf); + } + }while( got>0 ); + TIMER_END; + OSTRACE(("READ %-3d %5d %7lld %llu\n", + id->h, got+prior, offset-prior, TIMER_ELAPSED)); + return got+prior; +} + +/* +** Read data from a file into a buffer. Return SQLITE_OK if all +** bytes were read successfully and SQLITE_IOERR if anything goes +** wrong. +*/ +static int unixRead( + sqlite3_file *id, + void *pBuf, + int amt, + sqlite3_int64 offset +){ + unixFile *pFile = (unixFile *)id; + int got; + assert( id ); + assert( offset>=0 ); + assert( amt>0 ); + + /* If this is a database file (not a journal, super-journal or temp + ** file), the bytes in the locking range should never be read or written. */ +#if 0 + assert( pFile->pPreallocatedUnused==0 + || offset>=PENDING_BYTE+512 + || offset+amt<=PENDING_BYTE + ); +#endif + +#if SQLITE_MAX_MMAP_SIZE>0 + /* Deal with as much of this read request as possible by transferring + ** data from the memory mapping using memcpy(). */ + if( offsetmmapSize ){ + if( offset+amt <= pFile->mmapSize ){ + memcpy(pBuf, &((u8 *)(pFile->pMapRegion))[offset], amt); + return SQLITE_OK; + }else{ + int nCopy = pFile->mmapSize - offset; + memcpy(pBuf, &((u8 *)(pFile->pMapRegion))[offset], nCopy); + pBuf = &((u8 *)pBuf)[nCopy]; + amt -= nCopy; + offset += nCopy; + } + } +#endif + + got = seekAndRead(pFile, offset, pBuf, amt); + if( got==amt ){ + return SQLITE_OK; + }else if( got<0 ){ + /* pFile->lastErrno has been set by seekAndRead(). + ** Usually we return SQLITE_IOERR_READ here, though for some + ** kinds of errors we return SQLITE_IOERR_CORRUPTFS. The + ** SQLITE_IOERR_CORRUPTFS will be converted into SQLITE_CORRUPT + ** prior to returning to the application by the sqlite3ApiExit() + ** routine. + */ + switch( pFile->lastErrno ){ + case ERANGE: + case EIO: +#ifdef ENXIO + case ENXIO: +#endif +#ifdef EDEVERR + case EDEVERR: +#endif + return SQLITE_IOERR_CORRUPTFS; + } + return SQLITE_IOERR_READ; + }else{ + storeLastErrno(pFile, 0); /* not a system error */ + /* Unread parts of the buffer must be zero-filled */ + memset(&((char*)pBuf)[got], 0, amt-got); + return SQLITE_IOERR_SHORT_READ; + } +} + +/* +** Attempt to seek the file-descriptor passed as the first argument to +** absolute offset iOff, then attempt to write nBuf bytes of data from +** pBuf to it. If an error occurs, return -1 and set *piErrno. Otherwise, +** return the actual number of bytes written (which may be less than +** nBuf). +*/ +static int seekAndWriteFd( + int fd, /* File descriptor to write to */ + i64 iOff, /* File offset to begin writing at */ + const void *pBuf, /* Copy data from this buffer to the file */ + int nBuf, /* Size of buffer pBuf in bytes */ + int *piErrno /* OUT: Error number if error occurs */ +){ + int rc = 0; /* Value returned by system call */ + + assert( nBuf==(nBuf&0x1ffff) ); + assert( fd>2 ); + assert( piErrno!=0 ); + nBuf &= 0x1ffff; + TIMER_START; + +#if defined(USE_PREAD) + do{ rc = (int)osPwrite(fd, pBuf, nBuf, iOff); }while( rc<0 && errno==EINTR ); +#elif defined(USE_PREAD64) + do{ rc = (int)osPwrite64(fd, pBuf, nBuf, iOff);}while( rc<0 && errno==EINTR); +#else + do{ + i64 iSeek = lseek(fd, iOff, SEEK_SET); + SimulateIOError( iSeek = -1 ); + if( iSeek<0 ){ + rc = -1; + break; + } + rc = osWrite(fd, pBuf, nBuf); + }while( rc<0 && errno==EINTR ); +#endif + + TIMER_END; + OSTRACE(("WRITE %-3d %5d %7lld %llu\n", fd, rc, iOff, TIMER_ELAPSED)); + + if( rc<0 ) *piErrno = errno; + return rc; +} + + +/* +** Seek to the offset in id->offset then read cnt bytes into pBuf. +** Return the number of bytes actually read. Update the offset. +** +** To avoid stomping the errno value on a failed write the lastErrno value +** is set before returning. +*/ +static int seekAndWrite(unixFile *id, i64 offset, const void *pBuf, int cnt){ + return seekAndWriteFd(id->h, offset, pBuf, cnt, &id->lastErrno); +} + + +/* +** Write data from a buffer into a file. Return SQLITE_OK on success +** or some other error code on failure. +*/ +static int unixWrite( + sqlite3_file *id, + const void *pBuf, + int amt, + sqlite3_int64 offset +){ + unixFile *pFile = (unixFile*)id; + int wrote = 0; + assert( id ); + assert( amt>0 ); + + /* If this is a database file (not a journal, super-journal or temp + ** file), the bytes in the locking range should never be read or written. */ +#if 0 + assert( pFile->pPreallocatedUnused==0 + || offset>=PENDING_BYTE+512 + || offset+amt<=PENDING_BYTE + ); +#endif + +#ifdef SQLITE_DEBUG + /* If we are doing a normal write to a database file (as opposed to + ** doing a hot-journal rollback or a write to some file other than a + ** normal database file) then record the fact that the database + ** has changed. If the transaction counter is modified, record that + ** fact too. + */ + if( pFile->inNormalWrite ){ + pFile->dbUpdate = 1; /* The database has been modified */ + if( offset<=24 && offset+amt>=27 ){ + int rc; + char oldCntr[4]; + SimulateIOErrorBenign(1); + rc = seekAndRead(pFile, 24, oldCntr, 4); + SimulateIOErrorBenign(0); + if( rc!=4 || memcmp(oldCntr, &((char*)pBuf)[24-offset], 4)!=0 ){ + pFile->transCntrChng = 1; /* The transaction counter has changed */ + } + } + } +#endif + +#if defined(SQLITE_MMAP_READWRITE) && SQLITE_MAX_MMAP_SIZE>0 + /* Deal with as much of this write request as possible by transferring + ** data from the memory mapping using memcpy(). */ + if( offsetmmapSize ){ + if( offset+amt <= pFile->mmapSize ){ + memcpy(&((u8 *)(pFile->pMapRegion))[offset], pBuf, amt); + return SQLITE_OK; + }else{ + int nCopy = pFile->mmapSize - offset; + memcpy(&((u8 *)(pFile->pMapRegion))[offset], pBuf, nCopy); + pBuf = &((u8 *)pBuf)[nCopy]; + amt -= nCopy; + offset += nCopy; + } + } +#endif + + while( (wrote = seekAndWrite(pFile, offset, pBuf, amt))0 ){ + amt -= wrote; + offset += wrote; + pBuf = &((char*)pBuf)[wrote]; + } + SimulateIOError(( wrote=(-1), amt=1 )); + SimulateDiskfullError(( wrote=0, amt=1 )); + + if( amt>wrote ){ + if( wrote<0 && pFile->lastErrno!=ENOSPC ){ + /* lastErrno set by seekAndWrite */ + return SQLITE_IOERR_WRITE; + }else{ + storeLastErrno(pFile, 0); /* not a system error */ + return SQLITE_FULL; + } + } + + return SQLITE_OK; +} + +#ifdef SQLITE_TEST +/* +** Count the number of fullsyncs and normal syncs. This is used to test +** that syncs and fullsyncs are occurring at the right times. +*/ +SQLITE_API int sqlite3_sync_count = 0; +SQLITE_API int sqlite3_fullsync_count = 0; +#endif + +/* +** We do not trust systems to provide a working fdatasync(). Some do. +** Others do no. To be safe, we will stick with the (slightly slower) +** fsync(). If you know that your system does support fdatasync() correctly, +** then simply compile with -Dfdatasync=fdatasync or -DHAVE_FDATASYNC +*/ +#if !defined(fdatasync) && !HAVE_FDATASYNC +# define fdatasync fsync +#endif + +/* +** Define HAVE_FULLFSYNC to 0 or 1 depending on whether or not +** the F_FULLFSYNC macro is defined. F_FULLFSYNC is currently +** only available on Mac OS X. But that could change. +*/ +#ifdef F_FULLFSYNC +# define HAVE_FULLFSYNC 1 +#else +# define HAVE_FULLFSYNC 0 +#endif + + +/* +** The fsync() system call does not work as advertised on many +** unix systems. The following procedure is an attempt to make +** it work better. +** +** The SQLITE_NO_SYNC macro disables all fsync()s. This is useful +** for testing when we want to run through the test suite quickly. +** You are strongly advised *not* to deploy with SQLITE_NO_SYNC +** enabled, however, since with SQLITE_NO_SYNC enabled, an OS crash +** or power failure will likely corrupt the database file. +** +** SQLite sets the dataOnly flag if the size of the file is unchanged. +** The idea behind dataOnly is that it should only write the file content +** to disk, not the inode. We only set dataOnly if the file size is +** unchanged since the file size is part of the inode. However, +** Ted Ts'o tells us that fdatasync() will also write the inode if the +** file size has changed. The only real difference between fdatasync() +** and fsync(), Ted tells us, is that fdatasync() will not flush the +** inode if the mtime or owner or other inode attributes have changed. +** We only care about the file size, not the other file attributes, so +** as far as SQLite is concerned, an fdatasync() is always adequate. +** So, we always use fdatasync() if it is available, regardless of +** the value of the dataOnly flag. +*/ +static int full_fsync(int fd, int fullSync, int dataOnly){ + int rc; + + /* The following "ifdef/elif/else/" block has the same structure as + ** the one below. It is replicated here solely to avoid cluttering + ** up the real code with the UNUSED_PARAMETER() macros. + */ +#ifdef SQLITE_NO_SYNC + UNUSED_PARAMETER(fd); + UNUSED_PARAMETER(fullSync); + UNUSED_PARAMETER(dataOnly); +#elif HAVE_FULLFSYNC + UNUSED_PARAMETER(dataOnly); +#else + UNUSED_PARAMETER(fullSync); + UNUSED_PARAMETER(dataOnly); +#endif + + /* Record the number of times that we do a normal fsync() and + ** FULLSYNC. This is used during testing to verify that this procedure + ** gets called with the correct arguments. + */ +#ifdef SQLITE_TEST + if( fullSync ) sqlite3_fullsync_count++; + sqlite3_sync_count++; +#endif + + /* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a + ** no-op. But go ahead and call fstat() to validate the file + ** descriptor as we need a method to provoke a failure during + ** coverage testing. + */ +#ifdef SQLITE_NO_SYNC + { + struct stat buf; + rc = osFstat(fd, &buf); + } +#elif HAVE_FULLFSYNC + if( fullSync ){ + rc = osFcntl(fd, F_FULLFSYNC, 0); + }else{ + rc = 1; + } + /* If the FULLFSYNC failed, fall back to attempting an fsync(). + ** It shouldn't be possible for fullfsync to fail on the local + ** file system (on OSX), so failure indicates that FULLFSYNC + ** isn't supported for this file system. So, attempt an fsync + ** and (for now) ignore the overhead of a superfluous fcntl call. + ** It'd be better to detect fullfsync support once and avoid + ** the fcntl call every time sync is called. + */ + if( rc ) rc = fsync(fd); + +#elif defined(__APPLE__) + /* fdatasync() on HFS+ doesn't yet flush the file size if it changed correctly + ** so currently we default to the macro that redefines fdatasync to fsync + */ + rc = fsync(fd); +#else + rc = fdatasync(fd); +#if OS_VXWORKS + if( rc==-1 && errno==ENOTSUP ){ + rc = fsync(fd); + } +#endif /* OS_VXWORKS */ +#endif /* ifdef SQLITE_NO_SYNC elif HAVE_FULLFSYNC */ + + if( OS_VXWORKS && rc!= -1 ){ + rc = 0; + } + return rc; +} + +/* +** Open a file descriptor to the directory containing file zFilename. +** If successful, *pFd is set to the opened file descriptor and +** SQLITE_OK is returned. If an error occurs, either SQLITE_NOMEM +** or SQLITE_CANTOPEN is returned and *pFd is set to an undefined +** value. +** +** The directory file descriptor is used for only one thing - to +** fsync() a directory to make sure file creation and deletion events +** are flushed to disk. Such fsyncs are not needed on newer +** journaling filesystems, but are required on older filesystems. +** +** This routine can be overridden using the xSetSysCall interface. +** The ability to override this routine was added in support of the +** chromium sandbox. Opening a directory is a security risk (we are +** told) so making it overrideable allows the chromium sandbox to +** replace this routine with a harmless no-op. To make this routine +** a no-op, replace it with a stub that returns SQLITE_OK but leaves +** *pFd set to a negative number. +** +** If SQLITE_OK is returned, the caller is responsible for closing +** the file descriptor *pFd using close(). +*/ +static int openDirectory(const char *zFilename, int *pFd){ + int ii; + int fd = -1; + char zDirname[MAX_PATHNAME+1]; + + sqlite3_snprintf(MAX_PATHNAME, zDirname, "%s", zFilename); + for(ii=(int)strlen(zDirname); ii>0 && zDirname[ii]!='/'; ii--); + if( ii>0 ){ + zDirname[ii] = '\0'; + }else{ + if( zDirname[0]!='/' ) zDirname[0] = '.'; + zDirname[1] = 0; + } + fd = robust_open(zDirname, O_RDONLY|O_BINARY, 0); + if( fd>=0 ){ + OSTRACE(("OPENDIR %-3d %s\n", fd, zDirname)); + } + *pFd = fd; + if( fd>=0 ) return SQLITE_OK; + return unixLogError(SQLITE_CANTOPEN_BKPT, "openDirectory", zDirname); +} + +/* +** Make sure all writes to a particular file are committed to disk. +** +** If dataOnly==0 then both the file itself and its metadata (file +** size, access time, etc) are synced. If dataOnly!=0 then only the +** file data is synced. +** +** Under Unix, also make sure that the directory entry for the file +** has been created by fsync-ing the directory that contains the file. +** If we do not do this and we encounter a power failure, the directory +** entry for the journal might not exist after we reboot. The next +** SQLite to access the file will not know that the journal exists (because +** the directory entry for the journal was never created) and the transaction +** will not roll back - possibly leading to database corruption. +*/ +static int unixSync(sqlite3_file *id, int flags){ + int rc; + unixFile *pFile = (unixFile*)id; + + int isDataOnly = (flags&SQLITE_SYNC_DATAONLY); + int isFullsync = (flags&0x0F)==SQLITE_SYNC_FULL; + + /* Check that one of SQLITE_SYNC_NORMAL or FULL was passed */ + assert((flags&0x0F)==SQLITE_SYNC_NORMAL + || (flags&0x0F)==SQLITE_SYNC_FULL + ); + + /* Unix cannot, but some systems may return SQLITE_FULL from here. This + ** line is to test that doing so does not cause any problems. + */ + SimulateDiskfullError( return SQLITE_FULL ); + + assert( pFile ); + OSTRACE(("SYNC %-3d\n", pFile->h)); + rc = full_fsync(pFile->h, isFullsync, isDataOnly); + SimulateIOError( rc=1 ); + if( rc ){ + storeLastErrno(pFile, errno); + return unixLogError(SQLITE_IOERR_FSYNC, "full_fsync", pFile->zPath); + } + + /* Also fsync the directory containing the file if the DIRSYNC flag + ** is set. This is a one-time occurrence. Many systems (examples: AIX) + ** are unable to fsync a directory, so ignore errors on the fsync. + */ + if( pFile->ctrlFlags & UNIXFILE_DIRSYNC ){ + int dirfd; + OSTRACE(("DIRSYNC %s (have_fullfsync=%d fullsync=%d)\n", pFile->zPath, + HAVE_FULLFSYNC, isFullsync)); + rc = osOpenDirectory(pFile->zPath, &dirfd); + if( rc==SQLITE_OK ){ + full_fsync(dirfd, 0, 0); + robust_close(pFile, dirfd, __LINE__); + }else{ + assert( rc==SQLITE_CANTOPEN ); + rc = SQLITE_OK; + } + pFile->ctrlFlags &= ~UNIXFILE_DIRSYNC; + } + return rc; +} + +/* +** Truncate an open file to a specified size +*/ +static int unixTruncate(sqlite3_file *id, i64 nByte){ + unixFile *pFile = (unixFile *)id; + int rc; + assert( pFile ); + SimulateIOError( return SQLITE_IOERR_TRUNCATE ); + + /* If the user has configured a chunk-size for this file, truncate the + ** file so that it consists of an integer number of chunks (i.e. the + ** actual file size after the operation may be larger than the requested + ** size). + */ + if( pFile->szChunk>0 ){ + nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk; + } + + rc = robust_ftruncate(pFile->h, nByte); + if( rc ){ + storeLastErrno(pFile, errno); + return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath); + }else{ +#ifdef SQLITE_DEBUG + /* If we are doing a normal write to a database file (as opposed to + ** doing a hot-journal rollback or a write to some file other than a + ** normal database file) and we truncate the file to zero length, + ** that effectively updates the change counter. This might happen + ** when restoring a database using the backup API from a zero-length + ** source. + */ + if( pFile->inNormalWrite && nByte==0 ){ + pFile->transCntrChng = 1; + } +#endif + +#if SQLITE_MAX_MMAP_SIZE>0 + /* If the file was just truncated to a size smaller than the currently + ** mapped region, reduce the effective mapping size as well. SQLite will + ** use read() and write() to access data beyond this point from now on. + */ + if( nBytemmapSize ){ + pFile->mmapSize = nByte; + } +#endif + + return SQLITE_OK; + } +} + +/* +** Determine the current size of a file in bytes +*/ +static int unixFileSize(sqlite3_file *id, i64 *pSize){ + int rc; + struct stat buf; + assert( id ); + rc = osFstat(((unixFile*)id)->h, &buf); + SimulateIOError( rc=1 ); + if( rc!=0 ){ + storeLastErrno((unixFile*)id, errno); + return SQLITE_IOERR_FSTAT; + } + *pSize = buf.st_size; + + /* When opening a zero-size database, the findInodeInfo() procedure + ** writes a single byte into that file in order to work around a bug + ** in the OS-X msdos filesystem. In order to avoid problems with upper + ** layers, we need to report this file size as zero even though it is + ** really 1. Ticket #3260. + */ + if( *pSize==1 ) *pSize = 0; + + + return SQLITE_OK; +} + +#if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) +/* +** Handler for proxy-locking file-control verbs. Defined below in the +** proxying locking division. +*/ +static int proxyFileControl(sqlite3_file*,int,void*); +#endif + +/* +** This function is called to handle the SQLITE_FCNTL_SIZE_HINT +** file-control operation. Enlarge the database to nBytes in size +** (rounded up to the next chunk-size). If the database is already +** nBytes or larger, this routine is a no-op. +*/ +static int fcntlSizeHint(unixFile *pFile, i64 nByte){ + if( pFile->szChunk>0 ){ + i64 nSize; /* Required file size */ + struct stat buf; /* Used to hold return values of fstat() */ + + if( osFstat(pFile->h, &buf) ){ + return SQLITE_IOERR_FSTAT; + } + + nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk; + if( nSize>(i64)buf.st_size ){ + +#if defined(HAVE_POSIX_FALLOCATE) && HAVE_POSIX_FALLOCATE + /* The code below is handling the return value of osFallocate() + ** correctly. posix_fallocate() is defined to "returns zero on success, + ** or an error number on failure". See the manpage for details. */ + int err; + do{ + err = osFallocate(pFile->h, buf.st_size, nSize-buf.st_size); + }while( err==EINTR ); + if( err && err!=EINVAL ) return SQLITE_IOERR_WRITE; +#else + /* If the OS does not have posix_fallocate(), fake it. Write a + ** single byte to the last byte in each block that falls entirely + ** within the extended region. Then, if required, a single byte + ** at offset (nSize-1), to set the size of the file correctly. + ** This is a similar technique to that used by glibc on systems + ** that do not have a real fallocate() call. + */ + int nBlk = buf.st_blksize; /* File-system block size */ + int nWrite = 0; /* Number of bytes written by seekAndWrite */ + i64 iWrite; /* Next offset to write to */ + + iWrite = (buf.st_size/nBlk)*nBlk + nBlk - 1; + assert( iWrite>=buf.st_size ); + assert( ((iWrite+1)%nBlk)==0 ); + for(/*no-op*/; iWrite=nSize ) iWrite = nSize - 1; + nWrite = seekAndWrite(pFile, iWrite, "", 1); + if( nWrite!=1 ) return SQLITE_IOERR_WRITE; + } +#endif + } + } + +#if SQLITE_MAX_MMAP_SIZE>0 + if( pFile->mmapSizeMax>0 && nByte>pFile->mmapSize ){ + int rc; + if( pFile->szChunk<=0 ){ + if( robust_ftruncate(pFile->h, nByte) ){ + storeLastErrno(pFile, errno); + return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath); + } + } + + rc = unixMapfile(pFile, nByte); + return rc; + } +#endif + + return SQLITE_OK; +} + +/* +** If *pArg is initially negative then this is a query. Set *pArg to +** 1 or 0 depending on whether or not bit mask of pFile->ctrlFlags is set. +** +** If *pArg is 0 or 1, then clear or set the mask bit of pFile->ctrlFlags. +*/ +static void unixModeBit(unixFile *pFile, unsigned char mask, int *pArg){ + if( *pArg<0 ){ + *pArg = (pFile->ctrlFlags & mask)!=0; + }else if( (*pArg)==0 ){ + pFile->ctrlFlags &= ~mask; + }else{ + pFile->ctrlFlags |= mask; + } +} + +/* Forward declaration */ +static int unixGetTempname(int nBuf, char *zBuf); +#if !defined(SQLITE_WASI) && !defined(SQLITE_OMIT_WAL) + static int unixFcntlExternalReader(unixFile*, int*); +#endif +#if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_FILESTAT) + static void unixDescribeShm(sqlite3_str*,unixShm*); +#endif + + +/* +** Information and control of an open file handle. +*/ +static int unixFileControl(sqlite3_file *id, int op, void *pArg){ + unixFile *pFile = (unixFile*)id; + switch( op ){ +#if defined(__linux__) && defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE) + case SQLITE_FCNTL_BEGIN_ATOMIC_WRITE: { + int rc = osIoctl(pFile->h, F2FS_IOC_START_ATOMIC_WRITE); + return rc ? SQLITE_IOERR_BEGIN_ATOMIC : SQLITE_OK; + } + case SQLITE_FCNTL_COMMIT_ATOMIC_WRITE: { + int rc = osIoctl(pFile->h, F2FS_IOC_COMMIT_ATOMIC_WRITE); + return rc ? SQLITE_IOERR_COMMIT_ATOMIC : SQLITE_OK; + } + case SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE: { + int rc = osIoctl(pFile->h, F2FS_IOC_ABORT_VOLATILE_WRITE); + return rc ? SQLITE_IOERR_ROLLBACK_ATOMIC : SQLITE_OK; + } +#endif /* __linux__ && SQLITE_ENABLE_BATCH_ATOMIC_WRITE */ + + case SQLITE_FCNTL_NULL_IO: { + osClose(pFile->h); + pFile->h = -1; + return SQLITE_OK; + } + case SQLITE_FCNTL_LOCKSTATE: { + *(int*)pArg = pFile->eFileLock; + return SQLITE_OK; + } + case SQLITE_FCNTL_LAST_ERRNO: { + *(int*)pArg = pFile->lastErrno; + return SQLITE_OK; + } + case SQLITE_FCNTL_CHUNK_SIZE: { + pFile->szChunk = *(int *)pArg; + return SQLITE_OK; + } + case SQLITE_FCNTL_SIZE_HINT: { + int rc; + SimulateIOErrorBenign(1); + rc = fcntlSizeHint(pFile, *(i64 *)pArg); + SimulateIOErrorBenign(0); + return rc; + } + case SQLITE_FCNTL_PERSIST_WAL: { + unixModeBit(pFile, UNIXFILE_PERSIST_WAL, (int*)pArg); + return SQLITE_OK; + } + case SQLITE_FCNTL_POWERSAFE_OVERWRITE: { + unixModeBit(pFile, UNIXFILE_PSOW, (int*)pArg); + return SQLITE_OK; + } + case SQLITE_FCNTL_VFSNAME: { + *(char**)pArg = sqlite3_mprintf("%s", pFile->pVfs->zName); + return SQLITE_OK; + } + case SQLITE_FCNTL_TEMPFILENAME: { + char *zTFile = sqlite3_malloc64( pFile->pVfs->mxPathname ); + if( zTFile ){ + unixGetTempname(pFile->pVfs->mxPathname, zTFile); + *(char**)pArg = zTFile; + } + return SQLITE_OK; + } + case SQLITE_FCNTL_HAS_MOVED: { + *(int*)pArg = fileHasMoved(pFile); + return SQLITE_OK; + } +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + case SQLITE_FCNTL_LOCK_TIMEOUT: { + int iOld = pFile->iBusyTimeout; + int iNew = *(int*)pArg; +#if SQLITE_ENABLE_SETLK_TIMEOUT==1 + pFile->iBusyTimeout = iNew<0 ? 0x7FFFFFFF : (unsigned)iNew; +#elif SQLITE_ENABLE_SETLK_TIMEOUT==2 + pFile->iBusyTimeout = !!(*(int*)pArg); +#else +# error "SQLITE_ENABLE_SETLK_TIMEOUT must be set to 1 or 2" +#endif + *(int*)pArg = iOld; + return SQLITE_OK; + } + case SQLITE_FCNTL_BLOCK_ON_CONNECT: { + int iNew = *(int*)pArg; + pFile->bBlockOnConnect = iNew; + return SQLITE_OK; + } +#endif /* SQLITE_ENABLE_SETLK_TIMEOUT */ +#if SQLITE_MAX_MMAP_SIZE>0 + case SQLITE_FCNTL_MMAP_SIZE: { + i64 newLimit = *(i64*)pArg; + int rc = SQLITE_OK; + if( newLimit>sqlite3GlobalConfig.mxMmap ){ + newLimit = sqlite3GlobalConfig.mxMmap; + } + + /* The value of newLimit may be eventually cast to (size_t) and passed + ** to mmap(). Restrict its value to 2GB if (size_t) is not at least a + ** 64-bit type. */ + if( newLimit>0 && sizeof(size_t)<8 ){ + newLimit = (newLimit & 0x7FFFFFFF); + } + + *(i64*)pArg = pFile->mmapSizeMax; + if( newLimit>=0 && newLimit!=pFile->mmapSizeMax && pFile->nFetchOut==0 ){ + pFile->mmapSizeMax = newLimit; + if( pFile->mmapSize>0 ){ + unixUnmapfile(pFile); + rc = unixMapfile(pFile, -1); + } + } + return rc; + } +#endif +#ifdef SQLITE_DEBUG + /* The pager calls this method to signal that it has done + ** a rollback and that the database is therefore unchanged and + ** it hence it is OK for the transaction change counter to be + ** unchanged. + */ + case SQLITE_FCNTL_DB_UNCHANGED: { + ((unixFile*)id)->dbUpdate = 0; + return SQLITE_OK; + } +#endif +#if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) + case SQLITE_FCNTL_SET_LOCKPROXYFILE: + case SQLITE_FCNTL_GET_LOCKPROXYFILE: { + return proxyFileControl(id,op,pArg); + } +#endif /* SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) */ + + case SQLITE_FCNTL_EXTERNAL_READER: { +#if !defined(SQLITE_WASI) && !defined(SQLITE_OMIT_WAL) + return unixFcntlExternalReader((unixFile*)id, (int*)pArg); +#else + *(int*)pArg = 0; + return SQLITE_OK; +#endif + } + +#if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_FILESTAT) + case SQLITE_FCNTL_FILESTAT: { + sqlite3_str *pStr = (sqlite3_str*)pArg; + char aLck[16]; + unixInodeInfo *pInode; + static const char *azLock[] = { "SHARED", "RESERVED", + "PENDING", "EXCLUSIVE" }; + sqlite3_str_appendf(pStr, "{\"h\":%d", pFile->h); + sqlite3_str_appendf(pStr, ",\"vfs\":\"%s\"", pFile->pVfs->zName); + if( pFile->eFileLock ){ + sqlite3_str_appendf(pStr, ",\"eFileLock\":\"%s\"", + azLock[pFile->eFileLock-1]); + if( unixPosixAdvisoryLocks(pFile->h, aLck)==SQLITE_OK ){ + sqlite3_str_appendf(pStr, ",\"pal\":\"%s\"", aLck); + } + } + unixEnterMutex(); + if( pFile->pShm ){ + sqlite3_str_appendall(pStr, ",\"shm\":"); + unixDescribeShm(pStr, pFile->pShm); + } +#if SQLITE_MAX_MMAP_SIZE>0 + if( pFile->mmapSize ){ + sqlite3_str_appendf(pStr, ",\"mmapSize\":%lld", pFile->mmapSize); + sqlite3_str_appendf(pStr, ",\"nFetchOut\":%d", pFile->nFetchOut); + } +#endif + if( (pInode = pFile->pInode)!=0 ){ + sqlite3_str_appendf(pStr, ",\"inode\":{\"nRef\":%d",pInode->nRef); + sqlite3_mutex_enter(pInode->pLockMutex); + sqlite3_str_appendf(pStr, ",\"nShared\":%d", pInode->nShared); + if( pInode->eFileLock ){ + sqlite3_str_appendf(pStr, ",\"eFileLock\":\"%s\"", + azLock[pInode->eFileLock-1]); + } + if( pInode->pUnused ){ + char cSep = '['; + UnixUnusedFd *pUFd = pFile->pInode->pUnused; + sqlite3_str_appendall(pStr, ",\"unusedFd\":"); + while( pUFd ){ + sqlite3_str_appendf(pStr, "%c{\"fd\":%d,\"flags\":%d", + cSep, pUFd->fd, pUFd->flags); + cSep = ','; + if( unixPosixAdvisoryLocks(pUFd->fd, aLck)==SQLITE_OK ){ + sqlite3_str_appendf(pStr, ",\"pal\":\"%s\"", aLck); + } + sqlite3_str_append(pStr, "}", 1); + pUFd = pUFd->pNext; + } + sqlite3_str_append(pStr, "]", 1); + } + sqlite3_mutex_leave(pInode->pLockMutex); + sqlite3_str_append(pStr, "}", 1); + } + unixLeaveMutex(); + sqlite3_str_append(pStr, "}", 1); + return SQLITE_OK; + } +#endif /* SQLITE_DEBUG || SQLITE_ENABLE_FILESTAT */ + } + return SQLITE_NOTFOUND; +} + +/* +** If pFd->sectorSize is non-zero when this function is called, it is a +** no-op. Otherwise, the values of pFd->sectorSize and +** pFd->deviceCharacteristics are set according to the file-system +** characteristics. +** +** There are two versions of this function. One for QNX and one for all +** other systems. +*/ +#ifndef __QNXNTO__ +static void setDeviceCharacteristics(unixFile *pFd){ + assert( pFd->deviceCharacteristics==0 || pFd->sectorSize!=0 ); + if( pFd->sectorSize==0 ){ +#if defined(__linux__) && defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE) + int res; + u32 f = 0; + + /* Check for support for F2FS atomic batch writes. */ + res = osIoctl(pFd->h, F2FS_IOC_GET_FEATURES, &f); + if( res==0 && (f & F2FS_FEATURE_ATOMIC_WRITE) ){ + pFd->deviceCharacteristics = SQLITE_IOCAP_BATCH_ATOMIC; + } +#endif /* __linux__ && SQLITE_ENABLE_BATCH_ATOMIC_WRITE */ + + /* Set the POWERSAFE_OVERWRITE flag if requested. */ + if( pFd->ctrlFlags & UNIXFILE_PSOW ){ + pFd->deviceCharacteristics |= SQLITE_IOCAP_POWERSAFE_OVERWRITE; + } + pFd->deviceCharacteristics |= SQLITE_IOCAP_SUBPAGE_READ; + + pFd->sectorSize = SQLITE_DEFAULT_SECTOR_SIZE; + } +} +#else +#include +#include +static void setDeviceCharacteristics(unixFile *pFile){ + if( pFile->sectorSize == 0 ){ + struct statvfs fsInfo; + + /* Set defaults for non-supported filesystems */ + pFile->sectorSize = SQLITE_DEFAULT_SECTOR_SIZE; + pFile->deviceCharacteristics = 0; + if( fstatvfs(pFile->h, &fsInfo) == -1 ) { + return; + } + + if( !strcmp(fsInfo.f_basetype, "tmp") ) { + pFile->sectorSize = fsInfo.f_bsize; + pFile->deviceCharacteristics = + SQLITE_IOCAP_ATOMIC4K | /* All ram filesystem writes are atomic */ + SQLITE_IOCAP_SAFE_APPEND | /* growing the file does not occur until + ** the write succeeds */ + SQLITE_IOCAP_SEQUENTIAL | /* The ram filesystem has no write behind + ** so it is ordered */ + 0; + }else if( strstr(fsInfo.f_basetype, "etfs") ){ + pFile->sectorSize = fsInfo.f_bsize; + pFile->deviceCharacteristics = + /* etfs cluster size writes are atomic */ + (pFile->sectorSize / 512 * SQLITE_IOCAP_ATOMIC512) | + SQLITE_IOCAP_SAFE_APPEND | /* growing the file does not occur until + ** the write succeeds */ + SQLITE_IOCAP_SEQUENTIAL | /* The ram filesystem has no write behind + ** so it is ordered */ + 0; + }else if( !strcmp(fsInfo.f_basetype, "qnx6") ){ + pFile->sectorSize = fsInfo.f_bsize; + pFile->deviceCharacteristics = + SQLITE_IOCAP_ATOMIC | /* All filesystem writes are atomic */ + SQLITE_IOCAP_SAFE_APPEND | /* growing the file does not occur until + ** the write succeeds */ + SQLITE_IOCAP_SEQUENTIAL | /* The ram filesystem has no write behind + ** so it is ordered */ + 0; + }else if( !strcmp(fsInfo.f_basetype, "qnx4") ){ + pFile->sectorSize = fsInfo.f_bsize; + pFile->deviceCharacteristics = + /* full bitset of atomics from max sector size and smaller */ + (((pFile->sectorSize / 512 * SQLITE_IOCAP_ATOMIC512) << 1) - 2) | + SQLITE_IOCAP_SEQUENTIAL | /* The ram filesystem has no write behind + ** so it is ordered */ + 0; + }else if( strstr(fsInfo.f_basetype, "dos") ){ + pFile->sectorSize = fsInfo.f_bsize; + pFile->deviceCharacteristics = + /* full bitset of atomics from max sector size and smaller */ + (((pFile->sectorSize / 512 * SQLITE_IOCAP_ATOMIC512) << 1) - 2) | + SQLITE_IOCAP_SEQUENTIAL | /* The ram filesystem has no write behind + ** so it is ordered */ + 0; + }else{ + pFile->deviceCharacteristics = + SQLITE_IOCAP_ATOMIC512 | /* blocks are atomic */ + SQLITE_IOCAP_SAFE_APPEND | /* growing the file does not occur until + ** the write succeeds */ + 0; + } + } + /* Last chance verification. If the sector size isn't a multiple of 512 + ** then it isn't valid.*/ + if( pFile->sectorSize % 512 != 0 ){ + pFile->deviceCharacteristics = 0; + pFile->sectorSize = SQLITE_DEFAULT_SECTOR_SIZE; + } +} +#endif + +/* +** Return the sector size in bytes of the underlying block device for +** the specified file. This is almost always 512 bytes, but may be +** larger for some devices. +** +** SQLite code assumes this function cannot fail. It also assumes that +** if two files are created in the same file-system directory (i.e. +** a database and its journal file) that the sector size will be the +** same for both. +*/ +static int unixSectorSize(sqlite3_file *id){ + unixFile *pFd = (unixFile*)id; + setDeviceCharacteristics(pFd); + return pFd->sectorSize; +} + +/* +** Return the device characteristics for the file. +** +** This VFS is set up to return SQLITE_IOCAP_POWERSAFE_OVERWRITE by default. +** However, that choice is controversial since technically the underlying +** file system does not always provide powersafe overwrites. (In other +** words, after a power-loss event, parts of the file that were never +** written might end up being altered.) However, non-PSOW behavior is very, +** very rare. And asserting PSOW makes a large reduction in the amount +** of required I/O for journaling, since a lot of padding is eliminated. +** Hence, while POWERSAFE_OVERWRITE is on by default, there is a file-control +** available to turn it off and URI query parameter available to turn it off. +*/ +static int unixDeviceCharacteristics(sqlite3_file *id){ + unixFile *pFd = (unixFile*)id; + setDeviceCharacteristics(pFd); + return pFd->deviceCharacteristics; +} + +#if !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0 + +/* +** Return the system page size. +** +** This function should not be called directly by other code in this file. +** Instead, it should be called via macro osGetpagesize(). +*/ +static int unixGetpagesize(void){ +#if OS_VXWORKS + return 1024; +#elif defined(_BSD_SOURCE) + return getpagesize(); +#else + return (int)sysconf(_SC_PAGESIZE); +#endif +} + +#endif /* !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0 */ + +#if !defined(SQLITE_WASI) && !defined(SQLITE_OMIT_WAL) + +/* +** Object used to represent an shared memory buffer. +** +** When multiple threads all reference the same wal-index, each thread +** has its own unixShm object, but they all point to a single instance +** of this unixShmNode object. In other words, each wal-index is opened +** only once per process. +** +** Each unixShmNode object is connected to a single unixInodeInfo object. +** We could coalesce this object into unixInodeInfo, but that would mean +** every open file that does not use shared memory (in other words, most +** open files) would have to carry around this extra information. So +** the unixInodeInfo object contains a pointer to this unixShmNode object +** and the unixShmNode object is created only when needed. +** +** unixMutexHeld() must be true when creating or destroying +** this object or while reading or writing the following fields: +** +** nRef +** +** The following fields are read-only after the object is created: +** +** hShm +** zFilename +** +** Either unixShmNode.pShmMutex must be held or unixShmNode.nRef==0 and +** unixMutexHeld() is true when reading or writing any other field +** in this structure. +** +** aLock[SQLITE_SHM_NLOCK]: +** This array records the various locks held by clients on each of the +** SQLITE_SHM_NLOCK slots. If the aLock[] entry is set to 0, then no +** locks are held by the process on this slot. If it is set to -1, then +** some client holds an EXCLUSIVE lock on the locking slot. If the aLock[] +** value is set to a positive value, then it is the number of shared +** locks currently held on the slot. +** +** aMutex[SQLITE_SHM_NLOCK]: +** Normally, when SQLITE_ENABLE_SETLK_TIMEOUT is not defined, mutex +** pShmMutex is used to protect the aLock[] array and the right to +** call fcntl() on unixShmNode.hShm to obtain or release locks. +** +** If SQLITE_ENABLE_SETLK_TIMEOUT is defined though, we use an array +** of mutexes - one for each locking slot. To read or write locking +** slot aLock[iSlot], the caller must hold the corresponding mutex +** aMutex[iSlot]. Similarly, to call fcntl() to obtain or release a +** lock corresponding to slot iSlot, mutex aMutex[iSlot] must be held. +*/ +struct unixShmNode { + unixInodeInfo *pInode; /* unixInodeInfo that owns this SHM node */ + sqlite3_mutex *pShmMutex; /* Mutex to access this object */ + char *zFilename; /* Name of the mmapped file */ + int hShm; /* Open file descriptor */ + int szRegion; /* Size of shared-memory regions */ + u16 nRegion; /* Size of array apRegion */ + u8 isReadonly; /* True if read-only */ + u8 isUnlocked; /* True if no DMS lock held */ + char **apRegion; /* Array of mapped shared-memory regions */ + int nRef; /* Number of unixShm objects pointing to this */ + unixShm *pFirst; /* All unixShm objects pointing to this */ +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + sqlite3_mutex *aMutex[SQLITE_SHM_NLOCK]; +#endif + int aLock[SQLITE_SHM_NLOCK]; /* # shared locks on slot, -1==excl lock */ +#ifdef SQLITE_DEBUG + u8 nextShmId; /* Next available unixShm.id value */ +#endif +}; + +/* +** Structure used internally by this VFS to record the state of an +** open shared memory connection. +** +** The following fields are initialized when this object is created and +** are read-only thereafter: +** +** unixShm.pShmNode +** unixShm.id +** +** All other fields are read/write. The unixShm.pShmNode->pShmMutex must +** be held while accessing any read/write fields. +*/ +struct unixShm { + unixShmNode *pShmNode; /* The underlying unixShmNode object */ + unixShm *pNext; /* Next unixShm with the same unixShmNode */ + u8 hasMutex; /* True if holding the unixShmNode->pShmMutex */ + u8 id; /* Id of this connection within its unixShmNode */ + u16 sharedMask; /* Mask of shared locks held */ + u16 exclMask; /* Mask of exclusive locks held */ +}; + +/* +** Constants used for locking +*/ +#define UNIX_SHM_BASE ((22+SQLITE_SHM_NLOCK)*4) /* first lock byte */ +#define UNIX_SHM_DMS (UNIX_SHM_BASE+SQLITE_SHM_NLOCK) /* deadman switch */ + +#if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_FILESTAT) +/* +** Describe the pShm object using JSON. Used for diagnostics only. +*/ +static void unixDescribeShm(sqlite3_str *pStr, unixShm *pShm){ + unixShmNode *pNode = pShm->pShmNode; + char aLck[16]; + sqlite3_str_appendf(pStr, "{\"h\":%d", pNode->hShm); + assert( unixMutexHeld() ); + sqlite3_str_appendf(pStr, ",\"nRef\":%d", pNode->nRef); + sqlite3_str_appendf(pStr, ",\"id\":%d", pShm->id); + sqlite3_str_appendf(pStr, ",\"sharedMask\":%d", pShm->sharedMask); + sqlite3_str_appendf(pStr, ",\"exclMask\":%d", pShm->exclMask); + if( unixPosixAdvisoryLocks(pNode->hShm, aLck)==SQLITE_OK ){ + sqlite3_str_appendf(pStr, ",\"pal\":\"%s\"", aLck); + } + sqlite3_str_append(pStr, "}", 1); +} +#endif /* SQLITE_DEBUG || SQLITE_ENABLE_FILESTAT */ + +/* +** Use F_GETLK to check whether or not there are any readers with open +** wal-mode transactions in other processes on database file pFile. If +** no error occurs, return SQLITE_OK and set (*piOut) to 1 if there are +** such transactions, or 0 otherwise. If an error occurs, return an +** SQLite error code. The final value of *piOut is undefined in this +** case. +*/ +static int unixFcntlExternalReader(unixFile *pFile, int *piOut){ + int rc = SQLITE_OK; + *piOut = 0; + if( pFile->pShm){ + unixShmNode *pShmNode = pFile->pShm->pShmNode; + struct flock f; + + memset(&f, 0, sizeof(f)); + f.l_type = F_WRLCK; + f.l_whence = SEEK_SET; + f.l_start = UNIX_SHM_BASE + 3; + f.l_len = SQLITE_SHM_NLOCK - 3; + + sqlite3_mutex_enter(pShmNode->pShmMutex); + if( osFcntl(pShmNode->hShm, F_GETLK, &f)<0 ){ + rc = SQLITE_IOERR_LOCK; + }else{ + *piOut = (f.l_type!=F_UNLCK); + } + sqlite3_mutex_leave(pShmNode->pShmMutex); + } + + return rc; +} + +/* +** If pFile has a -shm file open and it is sharing that file with some +** other connection, either in the same process or in a separate process, +** then return true. Return false if either pFile does not have a -shm +** file open or if it is the only connection to that -shm file across the +** entire system. +** +** This routine is not required for correct operation. It can always return +** false and SQLite will continue to operate according to spec. However, +** when this routine does its job, it adds extra robustness in cases +** where database file locks have been erroneously deleted in a WAL-mode +** database by doing close(open(DATABASE_PATHNAME)) or similar. +** +** With false negatives, SQLite still operates to spec, though with less +** robustness. With false positives, the last database connection on a +** WAL-mode database will fail to unlink the -wal and -shm files, which +** is annoying but harmless. False positives will also prevent a database +** connection from running "PRAGMA journal_mode=DELETE" in order to take +** the database out of WAL mode, which is perhaps more serious, but is +** still not a disaster. +*/ +static int unixIsSharingShmNode(unixFile *pFile){ + unixShmNode *pShmNode; + struct flock lock; + if( pFile->pShm==0 ) return 0; + if( pFile->ctrlFlags & UNIXFILE_EXCL ) return 0; + pShmNode = pFile->pShm->pShmNode; +#if SQLITE_ATOMIC_INTRINSICS + assert( AtomicLoad(&pShmNode->nRef)==1 ); +#endif + memset(&lock, 0, sizeof(lock)); + lock.l_whence = SEEK_SET; + lock.l_start = UNIX_SHM_DMS; + lock.l_len = 1; + lock.l_type = F_WRLCK; + osFcntl(pShmNode->hShm, F_GETLK, &lock); + return (lock.l_type!=F_UNLCK); +} + +/* +** Apply posix advisory locks for all bytes from ofst through ofst+n-1. +** +** Locks block if the mask is exactly UNIX_SHM_C and are non-blocking +** otherwise. +*/ +static int unixShmSystemLock( + unixFile *pFile, /* Open connection to the WAL file */ + int lockType, /* F_UNLCK, F_RDLCK, or F_WRLCK */ + int ofst, /* First byte of the locking range */ + int n /* Number of bytes to lock */ +){ + unixShmNode *pShmNode; /* Apply locks to this open shared-memory segment */ + struct flock f; /* The posix advisory locking structure */ + int rc = SQLITE_OK; /* Result code form fcntl() */ + + pShmNode = pFile->pInode->pShmNode; + + /* Assert that the parameters are within expected range and that the + ** correct mutex or mutexes are held. */ + assert( pShmNode->nRef>=0 ); + assert( (ofst==UNIX_SHM_DMS && n==1) + || (ofst>=UNIX_SHM_BASE && ofst+n<=(UNIX_SHM_BASE+SQLITE_SHM_NLOCK)) + ); + if( ofst==UNIX_SHM_DMS ){ + assert( pShmNode->nRef>0 || unixMutexHeld() ); + assert( pShmNode->nRef==0 || sqlite3_mutex_held(pShmNode->pShmMutex) ); + }else{ +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + int ii; + for(ii=ofst-UNIX_SHM_BASE; iiaMutex[ii]) ); + } +#else + assert( sqlite3_mutex_held(pShmNode->pShmMutex) ); + assert( pShmNode->nRef>0 ); +#endif + } + + /* Shared locks never span more than one byte */ + assert( n==1 || lockType!=F_RDLCK ); + + /* Locks are within range */ + assert( n>=1 && n<=SQLITE_SHM_NLOCK ); + assert( ofst>=UNIX_SHM_BASE && ofst<=UNIX_SHM_DMS ); + assert( ofst+n-1<=UNIX_SHM_DMS ); + + if( pShmNode->hShm>=0 ){ + int res; + /* Initialize the locking parameters */ + f.l_type = lockType; + f.l_whence = SEEK_SET; + f.l_start = ofst; + f.l_len = n; + res = osSetPosixAdvisoryLock(pShmNode->hShm, &f, pFile); + if( res==-1 ){ +#if defined(SQLITE_ENABLE_SETLK_TIMEOUT) && SQLITE_ENABLE_SETLK_TIMEOUT==1 + rc = (pFile->iBusyTimeout ? SQLITE_BUSY_TIMEOUT : SQLITE_BUSY); +#else + rc = SQLITE_BUSY; +#endif + } + } + + /* Do debug tracing */ +#ifdef SQLITE_DEBUG + OSTRACE(("SHM-LOCK ")); + if( rc==SQLITE_OK ){ + if( lockType==F_UNLCK ){ + OSTRACE(("unlock %d..%d ok\n", ofst, ofst+n-1)); + }else if( lockType==F_RDLCK ){ + OSTRACE(("read-lock %d..%d ok\n", ofst, ofst+n-1)); + }else{ + assert( lockType==F_WRLCK ); + OSTRACE(("write-lock %d..%d ok\n", ofst, ofst+n-1)); + } + }else{ + if( lockType==F_UNLCK ){ + OSTRACE(("unlock %d..%d failed\n", ofst, ofst+n-1)); + }else if( lockType==F_RDLCK ){ + OSTRACE(("read-lock %d..%d failed\n", ofst, ofst+n-1)); + }else{ + assert( lockType==F_WRLCK ); + OSTRACE(("write-lock %d..%d failed\n", ofst, ofst+n-1)); + } + } +#endif + + return rc; +} + +/* +** Return the minimum number of 32KB shm regions that should be mapped at +** a time, assuming that each mapping must be an integer multiple of the +** current system page-size. +** +** Usually, this is 1. The exception seems to be systems that are configured +** to use 64KB pages - in this case each mapping must cover at least two +** shm regions. +*/ +static int unixShmRegionPerMap(void){ + int shmsz = 32*1024; /* SHM region size */ + int pgsz = osGetpagesize(); /* System page size */ + assert( ((pgsz-1)&pgsz)==0 ); /* Page size must be a power of 2 */ + if( pgszpInode->pShmNode; + assert( unixMutexHeld() ); + if( p && ALWAYS(p->nRef==0) ){ + int nShmPerMap = unixShmRegionPerMap(); + int i; + assert( p->pInode==pFd->pInode ); + sqlite3_mutex_free(p->pShmMutex); +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + for(i=0; iaMutex[i]); + } +#endif + for(i=0; inRegion; i+=nShmPerMap){ + if( p->hShm>=0 ){ + osMunmap(p->apRegion[i], p->szRegion); + }else{ + sqlite3_free(p->apRegion[i]); + } + } + sqlite3_free(p->apRegion); + if( p->hShm>=0 ){ + robust_close(pFd, p->hShm, __LINE__); + p->hShm = -1; + } + p->pInode->pShmNode = 0; + sqlite3_free(p); + } +} + +/* +** The DMS lock has not yet been taken on shm file pShmNode. Attempt to +** take it now. Return SQLITE_OK if successful, or an SQLite error +** code otherwise. +** +** If the DMS cannot be locked because this is a readonly_shm=1 +** connection and no other process already holds a lock, return +** SQLITE_READONLY_CANTINIT and set pShmNode->isUnlocked=1. +*/ +static int unixLockSharedMemory(unixFile *pDbFd, unixShmNode *pShmNode){ + struct flock lock; + int rc = SQLITE_OK; + + /* Use F_GETLK to determine the locks other processes are holding + ** on the DMS byte. If it indicates that another process is holding + ** a SHARED lock, then this process may also take a SHARED lock + ** and proceed with opening the *-shm file. + ** + ** Or, if no other process is holding any lock, then this process + ** is the first to open it. In this case take an EXCLUSIVE lock on the + ** DMS byte and truncate the *-shm file to zero bytes in size. Then + ** downgrade to a SHARED lock on the DMS byte. + ** + ** If another process is holding an EXCLUSIVE lock on the DMS byte, + ** return SQLITE_BUSY to the caller (it will try again). An earlier + ** version of this code attempted the SHARED lock at this point. But + ** this introduced a subtle race condition: if the process holding + ** EXCLUSIVE failed just before truncating the *-shm file, then this + ** process might open and use the *-shm file without truncating it. + ** And if the *-shm file has been corrupted by a power failure or + ** system crash, the database itself may also become corrupt. */ + lock.l_whence = SEEK_SET; + lock.l_start = UNIX_SHM_DMS; + lock.l_len = 1; + lock.l_type = F_WRLCK; + if( osFcntl(pShmNode->hShm, F_GETLK, &lock)!=0 ) { + rc = SQLITE_IOERR_LOCK; + }else if( lock.l_type==F_UNLCK ){ + if( pShmNode->isReadonly ){ + pShmNode->isUnlocked = 1; + rc = SQLITE_READONLY_CANTINIT; + }else{ +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + /* Do not use a blocking lock here. If the lock cannot be obtained + ** immediately, it means some other connection is truncating the + ** *-shm file. And after it has done so, it will not release its + ** lock, but only downgrade it to a shared lock. So no point in + ** blocking here. The call below to obtain the shared DMS lock may + ** use a blocking lock. */ + int iSaveTimeout = pDbFd->iBusyTimeout; + pDbFd->iBusyTimeout = 0; +#endif + rc = unixShmSystemLock(pDbFd, F_WRLCK, UNIX_SHM_DMS, 1); +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + pDbFd->iBusyTimeout = iSaveTimeout; +#endif + /* The first connection to attach must truncate the -shm file. We + ** truncate to 3 bytes (an arbitrary small number, less than the + ** -shm header size) rather than 0 as a system debugging aid, to + ** help detect if a -shm file truncation is legitimate or is the work + ** or a rogue process. */ + if( rc==SQLITE_OK && robust_ftruncate(pShmNode->hShm, 3) ){ + rc = unixLogError(SQLITE_IOERR_SHMOPEN,"ftruncate",pShmNode->zFilename); + } + } + }else if( lock.l_type==F_WRLCK ){ + rc = SQLITE_BUSY; + } + + if( rc==SQLITE_OK ){ + assert( lock.l_type==F_UNLCK || lock.l_type==F_RDLCK ); + rc = unixShmSystemLock(pDbFd, F_RDLCK, UNIX_SHM_DMS, 1); + } + return rc; +} + +/* +** Open a shared-memory area associated with open database file pDbFd. +** This particular implementation uses mmapped files. +** +** The file used to implement shared-memory is in the same directory +** as the open database file and has the same name as the open database +** file with the "-shm" suffix added. For example, if the database file +** is "/home/user1/config.db" then the file that is created and mmapped +** for shared memory will be called "/home/user1/config.db-shm". +** +** Another approach to is to use files in /dev/shm or /dev/tmp or an +** some other tmpfs mount. But if a file in a different directory +** from the database file is used, then differing access permissions +** or a chroot() might cause two different processes on the same +** database to end up using different files for shared memory - +** meaning that their memory would not really be shared - resulting +** in database corruption. Nevertheless, this tmpfs file usage +** can be enabled at compile-time using -DSQLITE_SHM_DIRECTORY="/dev/shm" +** or the equivalent. The use of the SQLITE_SHM_DIRECTORY compile-time +** option results in an incompatible build of SQLite; builds of SQLite +** that with differing SQLITE_SHM_DIRECTORY settings attempt to use the +** same database file at the same time, database corruption will likely +** result. The SQLITE_SHM_DIRECTORY compile-time option is considered +** "unsupported" and may go away in a future SQLite release. +** +** When opening a new shared-memory file, if no other instances of that +** file are currently open, in this process or in other processes, then +** the file must be truncated to zero length or have its header cleared. +** +** If the original database file (pDbFd) is using the "unix-excl" VFS +** that means that an exclusive lock is held on the database file and +** that no other processes are able to read or write the database. In +** that case, we do not really need shared memory. No shared memory +** file is created. The shared memory will be simulated with heap memory. +*/ +static int unixOpenSharedMemory(unixFile *pDbFd){ + struct unixShm *p = 0; /* The connection to be opened */ + struct unixShmNode *pShmNode; /* The underlying mmapped file */ + int rc = SQLITE_OK; /* Result code */ + unixInodeInfo *pInode; /* The inode of fd */ + char *zShm; /* Name of the file used for SHM */ + int nShmFilename; /* Size of the SHM filename in bytes */ + + /* Allocate space for the new unixShm object. */ + p = sqlite3_malloc64( sizeof(*p) ); + if( p==0 ) return SQLITE_NOMEM_BKPT; + memset(p, 0, sizeof(*p)); + assert( pDbFd->pShm==0 ); + + /* Check to see if a unixShmNode object already exists. Reuse an existing + ** one if present. Create a new one if necessary. + */ + assert( unixFileMutexNotheld(pDbFd) ); + unixEnterMutex(); + pInode = pDbFd->pInode; + pShmNode = pInode->pShmNode; + if( pShmNode==0 ){ + struct stat sStat; /* fstat() info for database file */ +#ifndef SQLITE_SHM_DIRECTORY + const char *zBasePath = pDbFd->zPath; +#endif + + /* Call fstat() to figure out the permissions on the database file. If + ** a new *-shm file is created, an attempt will be made to create it + ** with the same permissions. + */ + if( osFstat(pDbFd->h, &sStat) ){ + rc = SQLITE_IOERR_FSTAT; + goto shm_open_err; + } + +#ifdef SQLITE_SHM_DIRECTORY + nShmFilename = sizeof(SQLITE_SHM_DIRECTORY) + 31; +#else + nShmFilename = 6 + (int)strlen(zBasePath); +#endif + pShmNode = sqlite3_malloc64( sizeof(*pShmNode) + nShmFilename ); + if( pShmNode==0 ){ + rc = SQLITE_NOMEM_BKPT; + goto shm_open_err; + } + memset(pShmNode, 0, sizeof(*pShmNode)+nShmFilename); + zShm = pShmNode->zFilename = (char*)&pShmNode[1]; +#ifdef SQLITE_SHM_DIRECTORY + sqlite3_snprintf(nShmFilename, zShm, + SQLITE_SHM_DIRECTORY "/sqlite-shm-%x-%x", + (u32)sStat.st_ino, (u32)sStat.st_dev); +#else + sqlite3_snprintf(nShmFilename, zShm, "%s-shm", zBasePath); + sqlite3FileSuffix3(pDbFd->zPath, zShm); +#endif + pShmNode->hShm = -1; + pDbFd->pInode->pShmNode = pShmNode; + pShmNode->pInode = pDbFd->pInode; + if( sqlite3GlobalConfig.bCoreMutex ){ + pShmNode->pShmMutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST); + if( pShmNode->pShmMutex==0 ){ + rc = SQLITE_NOMEM_BKPT; + goto shm_open_err; + } +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + { + int ii; + for(ii=0; iiaMutex[ii] = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST); + if( pShmNode->aMutex[ii]==0 ){ + rc = SQLITE_NOMEM_BKPT; + goto shm_open_err; + } + } + } +#endif + } + + if( pInode->bProcessLock==0 ){ + if( 0==sqlite3_uri_boolean(pDbFd->zPath, "readonly_shm", 0) ){ + pShmNode->hShm = robust_open(zShm, O_RDWR|O_CREAT|O_NOFOLLOW, + (sStat.st_mode&0777)); + } + if( pShmNode->hShm<0 ){ + pShmNode->hShm = robust_open(zShm, O_RDONLY|O_NOFOLLOW, + (sStat.st_mode&0777)); + if( pShmNode->hShm<0 ){ + rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zShm); + goto shm_open_err; + } + pShmNode->isReadonly = 1; + } + + /* If this process is running as root, make sure that the SHM file + ** is owned by the same user that owns the original database. Otherwise, + ** the original owner will not be able to connect. + */ + robustFchown(pShmNode->hShm, sStat.st_uid, sStat.st_gid); + + rc = unixLockSharedMemory(pDbFd, pShmNode); + if( rc!=SQLITE_OK && rc!=SQLITE_READONLY_CANTINIT ) goto shm_open_err; + } + } + + /* Make the new connection a child of the unixShmNode */ + p->pShmNode = pShmNode; +#ifdef SQLITE_DEBUG + p->id = pShmNode->nextShmId++; +#endif + pShmNode->nRef++; + pDbFd->pShm = p; + unixLeaveMutex(); + + /* The reference count on pShmNode has already been incremented under + ** the cover of the unixEnterMutex() mutex and the pointer from the + ** new (struct unixShm) object to the pShmNode has been set. All that is + ** left to do is to link the new object into the linked list starting + ** at pShmNode->pFirst. This must be done while holding the + ** pShmNode->pShmMutex. + */ + sqlite3_mutex_enter(pShmNode->pShmMutex); + p->pNext = pShmNode->pFirst; + pShmNode->pFirst = p; + sqlite3_mutex_leave(pShmNode->pShmMutex); + return rc; + + /* Jump here on any error */ +shm_open_err: + unixShmPurge(pDbFd); /* This call frees pShmNode if required */ + sqlite3_free(p); + unixLeaveMutex(); + return rc; +} + +/* +** This function is called to obtain a pointer to region iRegion of the +** shared-memory associated with the database file fd. Shared-memory regions +** are numbered starting from zero. Each shared-memory region is szRegion +** bytes in size. +** +** If an error occurs, an error code is returned and *pp is set to NULL. +** +** Otherwise, if the bExtend parameter is 0 and the requested shared-memory +** region has not been allocated (by any client, including one running in a +** separate process), then *pp is set to NULL and SQLITE_OK returned. If +** bExtend is non-zero and the requested shared-memory region has not yet +** been allocated, it is allocated by this function. +** +** If the shared-memory region has already been allocated or is allocated by +** this call as described above, then it is mapped into this processes +** address space (if it is not already), *pp is set to point to the mapped +** memory and SQLITE_OK returned. +*/ +static int unixShmMap( + sqlite3_file *fd, /* Handle open on database file */ + int iRegion, /* Region to retrieve */ + int szRegion, /* Size of regions */ + int bExtend, /* True to extend file if necessary */ + void volatile **pp /* OUT: Mapped memory */ +){ + unixFile *pDbFd = (unixFile*)fd; + unixShm *p; + unixShmNode *pShmNode; + int rc = SQLITE_OK; + int nShmPerMap = unixShmRegionPerMap(); + int nReqRegion; + + /* If the shared-memory file has not yet been opened, open it now. */ + if( pDbFd->pShm==0 ){ + rc = unixOpenSharedMemory(pDbFd); + if( rc!=SQLITE_OK ) return rc; + } + + p = pDbFd->pShm; + pShmNode = p->pShmNode; + sqlite3_mutex_enter(pShmNode->pShmMutex); + if( pShmNode->isUnlocked ){ + rc = unixLockSharedMemory(pDbFd, pShmNode); + if( rc!=SQLITE_OK ) goto shmpage_out; + pShmNode->isUnlocked = 0; + } + assert( szRegion==pShmNode->szRegion || pShmNode->nRegion==0 ); + assert( pShmNode->pInode==pDbFd->pInode ); + assert( pShmNode->hShm>=0 || pDbFd->pInode->bProcessLock==1 ); + assert( pShmNode->hShm<0 || pDbFd->pInode->bProcessLock==0 ); + + /* Minimum number of regions required to be mapped. */ + nReqRegion = ((iRegion+nShmPerMap) / nShmPerMap) * nShmPerMap; + + if( pShmNode->nRegionszRegion = szRegion; + + if( pShmNode->hShm>=0 ){ + /* The requested region is not mapped into this processes address space. + ** Check to see if it has been allocated (i.e. if the wal-index file is + ** large enough to contain the requested region). + */ + if( osFstat(pShmNode->hShm, &sStat) ){ + rc = SQLITE_IOERR_SHMSIZE; + goto shmpage_out; + } + + if( sStat.st_sizehShm, iPg*pgsz + pgsz-1,"",1,&x)!=1 ){ + const char *zFile = pShmNode->zFilename; + rc = unixLogError(SQLITE_IOERR_SHMSIZE, "write", zFile); + goto shmpage_out; + } + } + } + } + } + + /* Map the requested memory region into this processes address space. */ + apNew = (char **)sqlite3_realloc( + pShmNode->apRegion, nReqRegion*sizeof(char *) + ); + if( !apNew ){ + rc = SQLITE_IOERR_NOMEM_BKPT; + goto shmpage_out; + } + pShmNode->apRegion = apNew; + while( pShmNode->nRegionhShm>=0 ){ + pMem = osMmap(0, nMap, + pShmNode->isReadonly ? PROT_READ : PROT_READ|PROT_WRITE, + MAP_SHARED, pShmNode->hShm, szRegion*(i64)pShmNode->nRegion + ); + if( pMem==MAP_FAILED ){ + rc = unixLogError(SQLITE_IOERR_SHMMAP, "mmap", pShmNode->zFilename); + goto shmpage_out; + } + }else{ + pMem = sqlite3_malloc64(nMap); + if( pMem==0 ){ + rc = SQLITE_NOMEM_BKPT; + goto shmpage_out; + } + memset(pMem, 0, nMap); + } + + for(i=0; iapRegion[pShmNode->nRegion+i] = &((char*)pMem)[szRegion*i]; + } + pShmNode->nRegion += nShmPerMap; + } + } + +shmpage_out: + if( pShmNode->nRegion>iRegion ){ + *pp = pShmNode->apRegion[iRegion]; + }else{ + *pp = 0; + } + if( pShmNode->isReadonly && rc==SQLITE_OK ) rc = SQLITE_READONLY; + sqlite3_mutex_leave(pShmNode->pShmMutex); + return rc; +} + +/* +** Check that the pShmNode->aLock[] array comports with the locking bitmasks +** held by each client. Return true if it does, or false otherwise. This +** is to be used in an assert(). e.g. +** +** assert( assertLockingArrayOk(pShmNode) ); +*/ +#ifdef SQLITE_DEBUG +static int assertLockingArrayOk(unixShmNode *pShmNode){ +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + return 1; +#else + unixShm *pX; + int aLock[SQLITE_SHM_NLOCK]; + + memset(aLock, 0, sizeof(aLock)); + for(pX=pShmNode->pFirst; pX; pX=pX->pNext){ + int i; + for(i=0; iexclMask & (1<sharedMask & (1<=0 ); + aLock[i]++; + } + } + } + + assert( 0==memcmp(pShmNode->aLock, aLock, sizeof(aLock)) ); + return (memcmp(pShmNode->aLock, aLock, sizeof(aLock))==0); +#endif +} +#endif /* !defined(SQLITE_WASI) && !defined(SQLITE_OMIT_WAL) */ + +/* +** Change the lock state for a shared-memory segment. +** +** Note that the relationship between SHARED and EXCLUSIVE locks is a little +** different here than in posix. In xShmLock(), one can go from unlocked +** to shared and back or from unlocked to exclusive and back. But one may +** not go from shared to exclusive or from exclusive to shared. +*/ +static int unixShmLock( + sqlite3_file *fd, /* Database file holding the shared memory */ + int ofst, /* First lock to acquire or release */ + int n, /* Number of locks to acquire or release */ + int flags /* What to do with the lock */ +){ + unixFile *pDbFd = (unixFile*)fd; /* Connection holding shared memory */ + unixShm *p; /* The shared memory being locked */ + unixShmNode *pShmNode; /* The underlying file iNode */ + int rc = SQLITE_OK; /* Result code */ + u16 mask = (1<<(ofst+n)) - (1<pShm; + if( p==0 ) return SQLITE_IOERR_SHMLOCK; + pShmNode = p->pShmNode; + if( NEVER(pShmNode==0) ) return SQLITE_IOERR_SHMLOCK; + aLock = pShmNode->aLock; + + assert( pShmNode==pDbFd->pInode->pShmNode ); + assert( pShmNode->pInode==pDbFd->pInode ); + assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK ); + assert( n>=1 ); + assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED) + || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE) + || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED) + || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) ); + assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 ); + assert( pShmNode->hShm>=0 || pDbFd->pInode->bProcessLock==1 ); + assert( pShmNode->hShm<0 || pDbFd->pInode->bProcessLock==0 ); + + /* Check that, if this to be a blocking lock, no locks that occur later + ** in the following list than the lock being obtained are already held: + ** + ** 1. Recovery lock (ofst==2). + ** 2. Checkpointer lock (ofst==1). + ** 3. Write lock (ofst==0). + ** 4. Read locks (ofst>=3 && ofstexclMask|p->sharedMask); + assert( (flags & SQLITE_SHM_UNLOCK) || pDbFd->iBusyTimeout==0 || ( + (ofst!=2 || lockMask==0) + && (ofst!=1 || lockMask==0 || lockMask==2) + && (ofst!=0 || lockMask<3) + && (ofst<3 || lockMask<(1<exclMask & mask) + ); + if( ((flags & SQLITE_SHM_UNLOCK) && ((p->exclMask|p->sharedMask) & mask)) + || (flags==(SQLITE_SHM_SHARED|SQLITE_SHM_LOCK) && 0==(p->sharedMask & mask)) + || (flags==(SQLITE_SHM_EXCLUSIVE|SQLITE_SHM_LOCK)) + ){ + + /* Take the required mutexes. In SETLK_TIMEOUT mode (blocking locks), if + ** this is an attempt on an exclusive lock use sqlite3_mutex_try(). If any + ** other thread is holding this mutex, then it is either holding or about + ** to hold a lock exclusive to the one being requested, and we may + ** therefore return SQLITE_BUSY to the caller. + ** + ** Doing this prevents some deadlock scenarios. For example, thread 1 may + ** be a checkpointer blocked waiting on the WRITER lock. And thread 2 + ** may be a normal SQL client upgrading to a write transaction. In this + ** case thread 2 does a non-blocking request for the WRITER lock. But - + ** if it were to use sqlite3_mutex_enter() then it would effectively + ** become a (doomed) blocking request, as thread 2 would block until thread + ** 1 obtained WRITER and released the mutex. Since thread 2 already holds + ** a lock on a read-locking slot at this point, this breaks the + ** anti-deadlock rules (see above). */ +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + int iMutex; + for(iMutex=ofst; iMutexaMutex[iMutex]); + if( rc!=SQLITE_OK ) goto leave_shmnode_mutexes; + }else{ + sqlite3_mutex_enter(pShmNode->aMutex[iMutex]); + } + } +#else + sqlite3_mutex_enter(pShmNode->pShmMutex); +#endif + + if( ALWAYS(rc==SQLITE_OK) ){ + if( flags & SQLITE_SHM_UNLOCK ){ + /* Case (a) - unlock. */ + int bUnlock = 1; + assert( (p->exclMask & p->sharedMask)==0 ); + assert( !(flags & SQLITE_SHM_EXCLUSIVE) || (p->exclMask & mask)==mask ); + assert( !(flags & SQLITE_SHM_SHARED) || (p->sharedMask & mask)==mask ); + + /* If this is a SHARED lock being unlocked, it is possible that other + ** clients within this process are holding the same SHARED lock. In + ** this case, set bUnlock to 0 so that the posix lock is not removed + ** from the file-descriptor below. */ + if( flags & SQLITE_SHM_SHARED ){ + assert( n==1 ); + assert( aLock[ofst]>=1 ); + if( aLock[ofst]>1 ){ + bUnlock = 0; + aLock[ofst]--; + p->sharedMask &= ~mask; + } + } + + if( bUnlock ){ + rc = unixShmSystemLock(pDbFd, F_UNLCK, ofst+UNIX_SHM_BASE, n); + if( rc==SQLITE_OK ){ + memset(&aLock[ofst], 0, sizeof(int)*n); + p->sharedMask &= ~mask; + p->exclMask &= ~mask; + } + } + }else if( flags & SQLITE_SHM_SHARED ){ + /* Case (b) - a shared lock. */ + + if( aLock[ofst]<0 ){ + /* An exclusive lock is held by some other connection. BUSY. */ + rc = SQLITE_BUSY; + }else if( aLock[ofst]==0 ){ + rc = unixShmSystemLock(pDbFd, F_RDLCK, ofst+UNIX_SHM_BASE, n); + } + + /* Get the local shared locks */ + if( rc==SQLITE_OK ){ + p->sharedMask |= mask; + aLock[ofst]++; + } + }else{ + /* Case (c) - an exclusive lock. */ + int ii; + + assert( flags==(SQLITE_SHM_LOCK|SQLITE_SHM_EXCLUSIVE) ); + assert( (p->sharedMask & mask)==0 ); + assert( (p->exclMask & mask)==0 ); + + /* Make sure no sibling connections hold locks that will block this + ** lock. If any do, return SQLITE_BUSY right away. */ + for(ii=ofst; iiexclMask |= mask; + for(ii=ofst; ii=ofst; iMutex--){ + sqlite3_mutex_leave(pShmNode->aMutex[iMutex]); + } +#else + sqlite3_mutex_leave(pShmNode->pShmMutex); +#endif + } + + OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x\n", + p->id, osGetpid(0), p->sharedMask, p->exclMask)); + return rc; +} + +/* +** Implement a memory barrier or memory fence on shared memory. +** +** All loads and stores begun before the barrier must complete before +** any load or store begun after the barrier. +*/ +static void unixShmBarrier( + sqlite3_file *fd /* Database file holding the shared memory */ +){ + UNUSED_PARAMETER(fd); + sqlite3MemoryBarrier(); /* compiler-defined memory barrier */ + assert( fd->pMethods->xLock==nolockLock + || unixFileMutexNotheld((unixFile*)fd) + ); + unixEnterMutex(); /* Also mutex, for redundancy */ + unixLeaveMutex(); +} + +/* +** Close a connection to shared-memory. Delete the underlying +** storage if deleteFlag is true. +** +** If there is no shared memory associated with the connection then this +** routine is a harmless no-op. +*/ +static int unixShmUnmap( + sqlite3_file *fd, /* The underlying database file */ + int deleteFlag /* Delete shared-memory if true */ +){ + unixShm *p; /* The connection to be closed */ + unixShmNode *pShmNode; /* The underlying shared-memory file */ + unixShm **pp; /* For looping over sibling connections */ + unixFile *pDbFd; /* The underlying database file */ + + pDbFd = (unixFile*)fd; + p = pDbFd->pShm; + if( p==0 ) return SQLITE_OK; + pShmNode = p->pShmNode; + + assert( pShmNode==pDbFd->pInode->pShmNode ); + assert( pShmNode->pInode==pDbFd->pInode ); + + /* Remove connection p from the set of connections associated + ** with pShmNode */ + sqlite3_mutex_enter(pShmNode->pShmMutex); + for(pp=&pShmNode->pFirst; (*pp)!=p; pp = &(*pp)->pNext){} + *pp = p->pNext; + + /* Free the connection p */ + sqlite3_free(p); + pDbFd->pShm = 0; + sqlite3_mutex_leave(pShmNode->pShmMutex); + + /* If pShmNode->nRef has reached 0, then close the underlying + ** shared-memory file, too */ + assert( unixFileMutexNotheld(pDbFd) ); + unixEnterMutex(); + assert( pShmNode->nRef>0 ); + pShmNode->nRef--; + if( pShmNode->nRef==0 ){ + if( deleteFlag && pShmNode->hShm>=0 ){ + osUnlink(pShmNode->zFilename); + } + unixShmPurge(pDbFd); + } + unixLeaveMutex(); + + return SQLITE_OK; +} + + +#else +# define unixShmMap 0 +# define unixShmLock 0 +# define unixShmBarrier 0 +# define unixShmUnmap 0 +#endif /* #ifndef SQLITE_OMIT_WAL */ + +#if SQLITE_MAX_MMAP_SIZE>0 +/* +** If it is currently memory mapped, unmap file pFd. +*/ +static void unixUnmapfile(unixFile *pFd){ + assert( pFd->nFetchOut==0 ); + if( pFd->pMapRegion ){ + osMunmap(pFd->pMapRegion, pFd->mmapSizeActual); + pFd->pMapRegion = 0; + pFd->mmapSize = 0; + pFd->mmapSizeActual = 0; + } +} + +/* +** Attempt to set the size of the memory mapping maintained by file +** descriptor pFd to nNew bytes. Any existing mapping is discarded. +** +** If successful, this function sets the following variables: +** +** unixFile.pMapRegion +** unixFile.mmapSize +** unixFile.mmapSizeActual +** +** If unsuccessful, an error message is logged via sqlite3_log() and +** the three variables above are zeroed. In this case SQLite should +** continue accessing the database using the xRead() and xWrite() +** methods. +*/ +static void unixRemapfile( + unixFile *pFd, /* File descriptor object */ + i64 nNew /* Required mapping size */ +){ + const char *zErr = "mmap"; + int h = pFd->h; /* File descriptor open on db file */ + u8 *pOrig = (u8 *)pFd->pMapRegion; /* Pointer to current file mapping */ + i64 nOrig = pFd->mmapSizeActual; /* Size of pOrig region in bytes */ + u8 *pNew = 0; /* Location of new mapping */ + int flags = PROT_READ; /* Flags to pass to mmap() */ + + assert( pFd->nFetchOut==0 ); + assert( nNew>pFd->mmapSize ); + assert( nNew<=pFd->mmapSizeMax ); + assert( nNew>0 ); + assert( pFd->mmapSizeActual>=pFd->mmapSize ); + assert( MAP_FAILED!=0 ); + +#ifdef SQLITE_MMAP_READWRITE + if( (pFd->ctrlFlags & UNIXFILE_RDONLY)==0 ) flags |= PROT_WRITE; +#endif + + if( pOrig ){ +#if HAVE_MREMAP + i64 nReuse = pFd->mmapSize; +#else + const int szSyspage = osGetpagesize(); + i64 nReuse = (pFd->mmapSize & ~(szSyspage-1)); +#endif + u8 *pReq = &pOrig[nReuse]; + + /* Unmap any pages of the existing mapping that cannot be reused. */ + if( nReuse!=nOrig ){ + osMunmap(pReq, nOrig-nReuse); + } + +#if HAVE_MREMAP + pNew = osMremap(pOrig, nReuse, nNew, MREMAP_MAYMOVE); + zErr = "mremap"; +#else + pNew = osMmap(pReq, nNew-nReuse, flags, MAP_SHARED, h, nReuse); + if( pNew!=MAP_FAILED ){ + if( pNew!=pReq ){ + osMunmap(pNew, nNew - nReuse); + pNew = 0; + }else{ + pNew = pOrig; + } + } +#endif + + /* The attempt to extend the existing mapping failed. Free it. */ + if( pNew==MAP_FAILED || pNew==0 ){ + osMunmap(pOrig, nReuse); + } + } + + /* If pNew is still NULL, try to create an entirely new mapping. */ + if( pNew==0 ){ + pNew = osMmap(0, nNew, flags, MAP_SHARED, h, 0); + } + + if( pNew==MAP_FAILED ){ + pNew = 0; + nNew = 0; + unixLogError(SQLITE_OK, zErr, pFd->zPath); + + /* If the mmap() above failed, assume that all subsequent mmap() calls + ** will probably fail too. Fall back to using xRead/xWrite exclusively + ** in this case. */ + pFd->mmapSizeMax = 0; + } + pFd->pMapRegion = (void *)pNew; + pFd->mmapSize = pFd->mmapSizeActual = nNew; +} + +/* +** Memory map or remap the file opened by file-descriptor pFd (if the file +** is already mapped, the existing mapping is replaced by the new). Or, if +** there already exists a mapping for this file, and there are still +** outstanding xFetch() references to it, this function is a no-op. +** +** If parameter nByte is non-negative, then it is the requested size of +** the mapping to create. Otherwise, if nByte is less than zero, then the +** requested size is the size of the file on disk. The actual size of the +** created mapping is either the requested size or the value configured +** using SQLITE_FCNTL_MMAP_LIMIT, whichever is smaller. +** +** SQLITE_OK is returned if no error occurs (even if the mapping is not +** recreated as a result of outstanding references) or an SQLite error +** code otherwise. +*/ +static int unixMapfile(unixFile *pFd, i64 nMap){ + assert( nMap>=0 || pFd->nFetchOut==0 ); + assert( nMap>0 || (pFd->mmapSize==0 && pFd->pMapRegion==0) ); + if( pFd->nFetchOut>0 ) return SQLITE_OK; + + if( nMap<0 ){ + struct stat statbuf; /* Low-level file information */ + if( osFstat(pFd->h, &statbuf) ){ + return SQLITE_IOERR_FSTAT; + } + nMap = statbuf.st_size; + } + if( nMap>pFd->mmapSizeMax ){ + nMap = pFd->mmapSizeMax; + } + + assert( nMap>0 || (pFd->mmapSize==0 && pFd->pMapRegion==0) ); + if( nMap!=pFd->mmapSize ){ + unixRemapfile(pFd, nMap); + } + + return SQLITE_OK; +} +#endif /* SQLITE_MAX_MMAP_SIZE>0 */ + +/* +** If possible, return a pointer to a mapping of file fd starting at offset +** iOff. The mapping must be valid for at least nAmt bytes. +** +** If such a pointer can be obtained, store it in *pp and return SQLITE_OK. +** Or, if one cannot but no error occurs, set *pp to 0 and return SQLITE_OK. +** Finally, if an error does occur, return an SQLite error code. The final +** value of *pp is undefined in this case. +** +** If this function does return a pointer, the caller must eventually +** release the reference by calling unixUnfetch(). +*/ +static int unixFetch(sqlite3_file *fd, i64 iOff, int nAmt, void **pp){ +#if SQLITE_MAX_MMAP_SIZE>0 + unixFile *pFd = (unixFile *)fd; /* The underlying database file */ +#endif + *pp = 0; + +#if SQLITE_MAX_MMAP_SIZE>0 + if( pFd->mmapSizeMax>0 ){ + /* Ensure that there is always at least a 256 byte buffer of addressable + ** memory following the returned page. If the database is corrupt, + ** SQLite may overread the page slightly (in practice only a few bytes, + ** but 256 is safe, round, number). */ + const int nEofBuffer = 256; + if( pFd->pMapRegion==0 ){ + int rc = unixMapfile(pFd, -1); + if( rc!=SQLITE_OK ) return rc; + } + if( pFd->mmapSize >= (iOff+nAmt+nEofBuffer) ){ + *pp = &((u8 *)pFd->pMapRegion)[iOff]; + pFd->nFetchOut++; + } + } +#endif + return SQLITE_OK; +} + +/* +** If the third argument is non-NULL, then this function releases a +** reference obtained by an earlier call to unixFetch(). The second +** argument passed to this function must be the same as the corresponding +** argument that was passed to the unixFetch() invocation. +** +** Or, if the third argument is NULL, then this function is being called +** to inform the VFS layer that, according to POSIX, any existing mapping +** may now be invalid and should be unmapped. +*/ +static int unixUnfetch(sqlite3_file *fd, i64 iOff, void *p){ +#if SQLITE_MAX_MMAP_SIZE>0 + unixFile *pFd = (unixFile *)fd; /* The underlying database file */ + UNUSED_PARAMETER(iOff); + + /* If p==0 (unmap the entire file) then there must be no outstanding + ** xFetch references. Or, if p!=0 (meaning it is an xFetch reference), + ** then there must be at least one outstanding. */ + assert( (p==0)==(pFd->nFetchOut==0) ); + + /* If p!=0, it must match the iOff value. */ + assert( p==0 || p==&((u8 *)pFd->pMapRegion)[iOff] ); + + if( p ){ + pFd->nFetchOut--; + }else{ + unixUnmapfile(pFd); + } + + assert( pFd->nFetchOut>=0 ); +#else + UNUSED_PARAMETER(fd); + UNUSED_PARAMETER(p); + UNUSED_PARAMETER(iOff); +#endif + return SQLITE_OK; +} + +/* +** Here ends the implementation of all sqlite3_file methods. +** +********************** End sqlite3_file Methods ******************************* +******************************************************************************/ + +/* +** This division contains definitions of sqlite3_io_methods objects that +** implement various file locking strategies. It also contains definitions +** of "finder" functions. A finder-function is used to locate the appropriate +** sqlite3_io_methods object for a particular database file. The pAppData +** field of the sqlite3_vfs VFS objects are initialized to be pointers to +** the correct finder-function for that VFS. +** +** Most finder functions return a pointer to a fixed sqlite3_io_methods +** object. The only interesting finder-function is autolockIoFinder, which +** looks at the filesystem type and tries to guess the best locking +** strategy from that. +** +** For finder-function F, two objects are created: +** +** (1) The real finder-function named "FImpt()". +** +** (2) A constant pointer to this function named just "F". +** +** +** A pointer to the F pointer is used as the pAppData value for VFS +** objects. We have to do this instead of letting pAppData point +** directly at the finder-function since C90 rules prevent a void* +** from be cast into a function pointer. +** +** +** Each instance of this macro generates two objects: +** +** * A constant sqlite3_io_methods object call METHOD that has locking +** methods CLOSE, LOCK, UNLOCK, CKRESLOCK. +** +** * An I/O method finder function called FINDER that returns a pointer +** to the METHOD object in the previous bullet. +*/ +#define IOMETHODS(FINDER,METHOD,VERSION,CLOSE,LOCK,UNLOCK,CKLOCK,SHMMAP) \ +static const sqlite3_io_methods METHOD = { \ + VERSION, /* iVersion */ \ + CLOSE, /* xClose */ \ + unixRead, /* xRead */ \ + unixWrite, /* xWrite */ \ + unixTruncate, /* xTruncate */ \ + unixSync, /* xSync */ \ + unixFileSize, /* xFileSize */ \ + LOCK, /* xLock */ \ + UNLOCK, /* xUnlock */ \ + CKLOCK, /* xCheckReservedLock */ \ + unixFileControl, /* xFileControl */ \ + unixSectorSize, /* xSectorSize */ \ + unixDeviceCharacteristics, /* xDeviceCapabilities */ \ + SHMMAP, /* xShmMap */ \ + unixShmLock, /* xShmLock */ \ + unixShmBarrier, /* xShmBarrier */ \ + unixShmUnmap, /* xShmUnmap */ \ + unixFetch, /* xFetch */ \ + unixUnfetch, /* xUnfetch */ \ +}; \ +static const sqlite3_io_methods *FINDER##Impl(const char *z, unixFile *p){ \ + UNUSED_PARAMETER(z); UNUSED_PARAMETER(p); \ + return &METHOD; \ +} \ +static const sqlite3_io_methods *(*const FINDER)(const char*,unixFile *p) \ + = FINDER##Impl; + +/* +** Here are all of the sqlite3_io_methods objects for each of the +** locking strategies. Functions that return pointers to these methods +** are also created. +*/ +IOMETHODS( + posixIoFinder, /* Finder function name */ + posixIoMethods, /* sqlite3_io_methods object name */ + 3, /* shared memory and mmap are enabled */ + unixClose, /* xClose method */ + unixLock, /* xLock method */ + unixUnlock, /* xUnlock method */ + unixCheckReservedLock, /* xCheckReservedLock method */ + unixShmMap /* xShmMap method */ +) +IOMETHODS( + nolockIoFinder, /* Finder function name */ + nolockIoMethods, /* sqlite3_io_methods object name */ + 3, /* shared memory and mmap are enabled */ + nolockClose, /* xClose method */ + nolockLock, /* xLock method */ + nolockUnlock, /* xUnlock method */ + nolockCheckReservedLock, /* xCheckReservedLock method */ + 0 /* xShmMap method */ +) +IOMETHODS( + dotlockIoFinder, /* Finder function name */ + dotlockIoMethods, /* sqlite3_io_methods object name */ + 1, /* shared memory is disabled */ + dotlockClose, /* xClose method */ + dotlockLock, /* xLock method */ + dotlockUnlock, /* xUnlock method */ + dotlockCheckReservedLock, /* xCheckReservedLock method */ + 0 /* xShmMap method */ +) + +#if SQLITE_ENABLE_LOCKING_STYLE +IOMETHODS( + flockIoFinder, /* Finder function name */ + flockIoMethods, /* sqlite3_io_methods object name */ + 1, /* shared memory is disabled */ + flockClose, /* xClose method */ + flockLock, /* xLock method */ + flockUnlock, /* xUnlock method */ + flockCheckReservedLock, /* xCheckReservedLock method */ + 0 /* xShmMap method */ +) +#endif + +#if OS_VXWORKS +IOMETHODS( + semIoFinder, /* Finder function name */ + semIoMethods, /* sqlite3_io_methods object name */ + 1, /* shared memory is disabled */ + semXClose, /* xClose method */ + semXLock, /* xLock method */ + semXUnlock, /* xUnlock method */ + semXCheckReservedLock, /* xCheckReservedLock method */ + 0 /* xShmMap method */ +) +#endif + +#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE +IOMETHODS( + afpIoFinder, /* Finder function name */ + afpIoMethods, /* sqlite3_io_methods object name */ + 1, /* shared memory is disabled */ + afpClose, /* xClose method */ + afpLock, /* xLock method */ + afpUnlock, /* xUnlock method */ + afpCheckReservedLock, /* xCheckReservedLock method */ + 0 /* xShmMap method */ +) +#endif + +/* +** The proxy locking method is a "super-method" in the sense that it +** opens secondary file descriptors for the conch and lock files and +** it uses proxy, dot-file, AFP, and flock() locking methods on those +** secondary files. For this reason, the division that implements +** proxy locking is located much further down in the file. But we need +** to go ahead and define the sqlite3_io_methods and finder function +** for proxy locking here. So we forward declare the I/O methods. +*/ +#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE +static int proxyClose(sqlite3_file*); +static int proxyLock(sqlite3_file*, int); +static int proxyUnlock(sqlite3_file*, int); +static int proxyCheckReservedLock(sqlite3_file*, int*); +IOMETHODS( + proxyIoFinder, /* Finder function name */ + proxyIoMethods, /* sqlite3_io_methods object name */ + 1, /* shared memory is disabled */ + proxyClose, /* xClose method */ + proxyLock, /* xLock method */ + proxyUnlock, /* xUnlock method */ + proxyCheckReservedLock, /* xCheckReservedLock method */ + 0 /* xShmMap method */ +) +#endif + +/* nfs lockd on OSX 10.3+ doesn't clear write locks when a read lock is set */ +#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE +IOMETHODS( + nfsIoFinder, /* Finder function name */ + nfsIoMethods, /* sqlite3_io_methods object name */ + 1, /* shared memory is disabled */ + unixClose, /* xClose method */ + unixLock, /* xLock method */ + nfsUnlock, /* xUnlock method */ + unixCheckReservedLock, /* xCheckReservedLock method */ + 0 /* xShmMap method */ +) +#endif + +#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE +/* +** This "finder" function attempts to determine the best locking strategy +** for the database file "filePath". It then returns the sqlite3_io_methods +** object that implements that strategy. +** +** This is for MacOSX only. +*/ +static const sqlite3_io_methods *autolockIoFinderImpl( + const char *filePath, /* name of the database file */ + unixFile *pNew /* open file object for the database file */ +){ + static const struct Mapping { + const char *zFilesystem; /* Filesystem type name */ + const sqlite3_io_methods *pMethods; /* Appropriate locking method */ + } aMap[] = { + { "hfs", &posixIoMethods }, + { "ufs", &posixIoMethods }, + { "afpfs", &afpIoMethods }, + { "smbfs", &afpIoMethods }, + { "webdav", &nolockIoMethods }, + { 0, 0 } + }; + int i; + struct statfs fsInfo; + struct flock lockInfo; + + if( !filePath ){ + /* If filePath==NULL that means we are dealing with a transient file + ** that does not need to be locked. */ + return &nolockIoMethods; + } + if( statfs(filePath, &fsInfo) != -1 ){ + if( fsInfo.f_flags & MNT_RDONLY ){ + return &nolockIoMethods; + } + for(i=0; aMap[i].zFilesystem; i++){ + if( strcmp(fsInfo.f_fstypename, aMap[i].zFilesystem)==0 ){ + return aMap[i].pMethods; + } + } + } + + /* Default case. Handles, amongst others, "nfs". + ** Test byte-range lock using fcntl(). If the call succeeds, + ** assume that the file-system supports POSIX style locks. + */ + lockInfo.l_len = 1; + lockInfo.l_start = 0; + lockInfo.l_whence = SEEK_SET; + lockInfo.l_type = F_RDLCK; + if( osFcntl(pNew->h, F_GETLK, &lockInfo)!=-1 ) { + if( strcmp(fsInfo.f_fstypename, "nfs")==0 ){ + return &nfsIoMethods; + } else { + return &posixIoMethods; + } + }else{ + return &dotlockIoMethods; + } +} +static const sqlite3_io_methods + *(*const autolockIoFinder)(const char*,unixFile*) = autolockIoFinderImpl; + +#endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */ + +#if OS_VXWORKS +/* +** This "finder" function for VxWorks checks to see if posix advisory +** locking works. If it does, then that is what is used. If it does not +** work, then fallback to named semaphore locking. +*/ +static const sqlite3_io_methods *vxworksIoFinderImpl( + const char *filePath, /* name of the database file */ + unixFile *pNew /* the open file object */ +){ + struct flock lockInfo; + + if( !filePath ){ + /* If filePath==NULL that means we are dealing with a transient file + ** that does not need to be locked. */ + return &nolockIoMethods; + } + + /* Test if fcntl() is supported and use POSIX style locks. + ** Otherwise fall back to the named semaphore method. + */ + lockInfo.l_len = 1; + lockInfo.l_start = 0; + lockInfo.l_whence = SEEK_SET; + lockInfo.l_type = F_RDLCK; + if( osFcntl(pNew->h, F_GETLK, &lockInfo)!=-1 ) { + return &posixIoMethods; + }else{ + return &semIoMethods; + } +} +static const sqlite3_io_methods + *(*const vxworksIoFinder)(const char*,unixFile*) = vxworksIoFinderImpl; + +#endif /* OS_VXWORKS */ + +/* +** An abstract type for a pointer to an IO method finder function: +*/ +typedef const sqlite3_io_methods *(*finder_type)(const char*,unixFile*); + + +/**************************************************************************** +**************************** sqlite3_vfs methods **************************** +** +** This division contains the implementation of methods on the +** sqlite3_vfs object. +*/ + +/* +** Initialize the contents of the unixFile structure pointed to by pId. +*/ +static int fillInUnixFile( + sqlite3_vfs *pVfs, /* Pointer to vfs object */ + int h, /* Open file descriptor of file being opened */ + sqlite3_file *pId, /* Write to the unixFile structure here */ + const char *zFilename, /* Name of the file being opened */ + int ctrlFlags /* Zero or more UNIXFILE_* values */ +){ + const sqlite3_io_methods *pLockingStyle; + unixFile *pNew = (unixFile *)pId; + int rc = SQLITE_OK; + + assert( pNew->pInode==NULL ); + + /* No locking occurs in temporary files */ + assert( zFilename!=0 || (ctrlFlags & UNIXFILE_NOLOCK)!=0 ); + + OSTRACE(("OPEN %-3d %s\n", h, zFilename)); + pNew->h = h; + pNew->pVfs = pVfs; + pNew->zPath = zFilename; + pNew->ctrlFlags = (u8)ctrlFlags; +#if SQLITE_MAX_MMAP_SIZE>0 + pNew->mmapSizeMax = sqlite3GlobalConfig.szMmap; +#endif + if( sqlite3_uri_boolean(((ctrlFlags & UNIXFILE_URI) ? zFilename : 0), + "psow", SQLITE_POWERSAFE_OVERWRITE) ){ + pNew->ctrlFlags |= UNIXFILE_PSOW; + } + if( strcmp(pVfs->zName,"unix-excl")==0 ){ + pNew->ctrlFlags |= UNIXFILE_EXCL; + } + +#if OS_VXWORKS + pNew->pId = vxworksFindFileId(zFilename); + if( pNew->pId==0 ){ + ctrlFlags |= UNIXFILE_NOLOCK; + rc = SQLITE_NOMEM_BKPT; + } +#endif + + if( ctrlFlags & UNIXFILE_NOLOCK ){ + pLockingStyle = &nolockIoMethods; + }else{ + pLockingStyle = (**(finder_type*)pVfs->pAppData)(zFilename, pNew); +#if SQLITE_ENABLE_LOCKING_STYLE + /* Cache zFilename in the locking context (AFP and dotlock override) for + ** proxyLock activation is possible (remote proxy is based on db name) + ** zFilename remains valid until file is closed, to support */ + pNew->lockingContext = (void*)zFilename; +#endif + } + + if( pLockingStyle == &posixIoMethods +#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE + || pLockingStyle == &nfsIoMethods +#endif + ){ + unixEnterMutex(); + rc = findInodeInfo(pNew, &pNew->pInode); + if( rc!=SQLITE_OK ){ + /* If an error occurred in findInodeInfo(), close the file descriptor + ** immediately, before releasing the mutex. findInodeInfo() may fail + ** in two scenarios: + ** + ** (a) A call to fstat() failed. + ** (b) A malloc failed. + ** + ** Scenario (b) may only occur if the process is holding no other + ** file descriptors open on the same file. If there were other file + ** descriptors on this file, then no malloc would be required by + ** findInodeInfo(). If this is the case, it is quite safe to close + ** handle h - as it is guaranteed that no posix locks will be released + ** by doing so. + ** + ** If scenario (a) caused the error then things are not so safe. The + ** implicit assumption here is that if fstat() fails, things are in + ** such bad shape that dropping a lock or two doesn't matter much. + */ + robust_close(pNew, h, __LINE__); + h = -1; + } + unixLeaveMutex(); + } + +#if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) + else if( pLockingStyle == &afpIoMethods ){ + /* AFP locking uses the file path so it needs to be included in + ** the afpLockingContext. + */ + afpLockingContext *pCtx; + pNew->lockingContext = pCtx = sqlite3_malloc64( sizeof(*pCtx) ); + if( pCtx==0 ){ + rc = SQLITE_NOMEM_BKPT; + }else{ + /* NB: zFilename exists and remains valid until the file is closed + ** according to requirement F11141. So we do not need to make a + ** copy of the filename. */ + pCtx->dbPath = zFilename; + pCtx->reserved = 0; + srandomdev(); + unixEnterMutex(); + rc = findInodeInfo(pNew, &pNew->pInode); + if( rc!=SQLITE_OK ){ + sqlite3_free(pNew->lockingContext); + robust_close(pNew, h, __LINE__); + h = -1; + } + unixLeaveMutex(); + } + } +#endif + + else if( pLockingStyle == &dotlockIoMethods ){ + /* Dotfile locking uses the file path so it needs to be included in + ** the dotlockLockingContext + */ + char *zLockFile; + int nFilename; + assert( zFilename!=0 ); + nFilename = (int)strlen(zFilename) + 6; + zLockFile = (char *)sqlite3_malloc64(nFilename); + if( zLockFile==0 ){ + rc = SQLITE_NOMEM_BKPT; + }else{ + sqlite3_snprintf(nFilename, zLockFile, "%s" DOTLOCK_SUFFIX, zFilename); + } + pNew->lockingContext = zLockFile; + } + +#if OS_VXWORKS + else if( pLockingStyle == &semIoMethods ){ + /* Named semaphore locking uses the file path so it needs to be + ** included in the semLockingContext + */ + unixEnterMutex(); + rc = findInodeInfo(pNew, &pNew->pInode); + if( (rc==SQLITE_OK) && (pNew->pInode->pSem==NULL) ){ + char *zSemName = pNew->pInode->aSemName; + int n; + sqlite3_snprintf(MAX_PATHNAME, zSemName, "/%s.sem", + pNew->pId->zCanonicalName); + for( n=1; zSemName[n]; n++ ) + if( zSemName[n]=='/' ) zSemName[n] = '_'; + pNew->pInode->pSem = sem_open(zSemName, O_CREAT, 0666, 1); + if( pNew->pInode->pSem == SEM_FAILED ){ + rc = SQLITE_NOMEM_BKPT; + pNew->pInode->aSemName[0] = '\0'; + } + } + unixLeaveMutex(); + } +#endif + + storeLastErrno(pNew, 0); +#if OS_VXWORKS + if( rc!=SQLITE_OK ){ + if( h>=0 ){ + robust_close(pNew, h, __LINE__); + h = -1; + } + if( pNew->ctrlFlags & UNIXFILE_DELETE ){ + osUnlink(zFilename); + } + if( pNew->pId ){ + vxworksReleaseFileId(pNew->pId); + pNew->pId = 0; + } + } +#endif + if( rc!=SQLITE_OK ){ + if( h>=0 ) robust_close(pNew, h, __LINE__); + }else{ + pId->pMethods = pLockingStyle; + OpenCounter(+1); + verifyDbFile(pNew); + } + return rc; +} + +/* +** Directories to consider for temp files. +*/ +static const char *azTempDirs[] = { + 0, + 0, + "/var/tmp", + "/usr/tmp", + "/tmp", + "." +}; + +/* +** Initialize first two members of azTempDirs[] array. +*/ +static void unixTempFileInit(void){ + azTempDirs[0] = getenv("SQLITE_TMPDIR"); + azTempDirs[1] = getenv("TMPDIR"); +} + +/* +** Return the name of a directory in which to put temporary files. +** If no suitable temporary file directory can be found, return NULL. +*/ +static const char *unixTempFileDir(void){ + unsigned int i = 0; + struct stat buf; + const char *zDir = sqlite3_temp_directory; + + while(1){ + if( zDir!=0 +#if OS_VXWORKS + && zDir[0]=='/' +#endif + && osStat(zDir, &buf)==0 + && S_ISDIR(buf.st_mode) + && osAccess(zDir, 03)==0 + ){ + return zDir; + } + if( i>=sizeof(azTempDirs)/sizeof(azTempDirs[0]) ) break; + zDir = azTempDirs[i++]; + } + return 0; +} + +/* +** Create a temporary file name in zBuf. zBuf must be allocated +** by the calling process and must be big enough to hold at least +** pVfs->mxPathname bytes. +*/ +static int unixGetTempname(int nBuf, char *zBuf){ + const char *zDir; + int iLimit = 0; + int rc = SQLITE_OK; + + /* It's odd to simulate an io-error here, but really this is just + ** using the io-error infrastructure to test that SQLite handles this + ** function failing. + */ + zBuf[0] = 0; + SimulateIOError( return SQLITE_IOERR ); + + sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); + zDir = unixTempFileDir(); + if( zDir==0 ){ + rc = SQLITE_IOERR_GETTEMPPATH; + }else{ + do{ + u64 r; + sqlite3_randomness(sizeof(r), &r); + assert( nBuf>2 ); + zBuf[nBuf-2] = 0; + sqlite3_snprintf(nBuf, zBuf, "%s/"SQLITE_TEMP_FILE_PREFIX"%llx%c", + zDir, r, 0); + if( zBuf[nBuf-2]!=0 || (iLimit++)>10 ){ + rc = SQLITE_ERROR; + break; + } + }while( osAccess(zBuf,0)==0 ); + } + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); + return rc; +} + +#if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) +/* +** Routine to transform a unixFile into a proxy-locking unixFile. +** Implementation in the proxy-lock division, but used by unixOpen() +** if SQLITE_PREFER_PROXY_LOCKING is defined. +*/ +static int proxyTransformUnixFile(unixFile*, const char*); +#endif + +/* +** Search for an unused file descriptor that was opened on the database +** file (not a journal or super-journal file) identified by pathname +** zPath with SQLITE_OPEN_XXX flags matching those passed as the second +** argument to this function. +** +** Such a file descriptor may exist if a database connection was closed +** but the associated file descriptor could not be closed because some +** other file descriptor open on the same file is holding a file-lock. +** Refer to comments in the unixClose() function and the lengthy comment +** describing "Posix Advisory Locking" at the start of this file for +** further details. Also, ticket #4018. +** +** If a suitable file descriptor is found, then it is returned. If no +** such file descriptor is located, -1 is returned. +*/ +static UnixUnusedFd *findReusableFd(const char *zPath, int flags){ + UnixUnusedFd *pUnused = 0; + + /* Do not search for an unused file descriptor on vxworks. Not because + ** vxworks would not benefit from the change (it might, we're not sure), + ** but because no way to test it is currently available. It is better + ** not to risk breaking vxworks support for the sake of such an obscure + ** feature. */ +#if !OS_VXWORKS + struct stat sStat; /* Results of stat() call */ + + unixEnterMutex(); + + /* A stat() call may fail for various reasons. If this happens, it is + ** almost certain that an open() call on the same path will also fail. + ** For this reason, if an error occurs in the stat() call here, it is + ** ignored and -1 is returned. The caller will try to open a new file + ** descriptor on the same path, fail, and return an error to SQLite. + ** + ** Even if a subsequent open() call does succeed, the consequences of + ** not searching for a reusable file descriptor are not dire. */ + if( inodeList!=0 && 0==osStat(zPath, &sStat) ){ + unixInodeInfo *pInode; + + pInode = inodeList; + while( pInode && (pInode->fileId.dev!=sStat.st_dev + || pInode->fileId.ino!=(u64)sStat.st_ino) ){ + pInode = pInode->pNext; + } + if( pInode ){ + UnixUnusedFd **pp; + assert( sqlite3_mutex_notheld(pInode->pLockMutex) ); + sqlite3_mutex_enter(pInode->pLockMutex); + flags &= (SQLITE_OPEN_READONLY|SQLITE_OPEN_READWRITE); + for(pp=&pInode->pUnused; *pp && (*pp)->flags!=flags; pp=&((*pp)->pNext)); + pUnused = *pp; + if( pUnused ){ + *pp = pUnused->pNext; + } + sqlite3_mutex_leave(pInode->pLockMutex); + } + } + unixLeaveMutex(); +#endif /* if !OS_VXWORKS */ + return pUnused; +} + +/* +** Find the mode, uid and gid of file zFile. +*/ +static int getFileMode( + const char *zFile, /* File name */ + mode_t *pMode, /* OUT: Permissions of zFile */ + uid_t *pUid, /* OUT: uid of zFile. */ + gid_t *pGid /* OUT: gid of zFile. */ +){ + struct stat sStat; /* Output of stat() on database file */ + int rc = SQLITE_OK; + if( 0==osStat(zFile, &sStat) ){ + *pMode = sStat.st_mode & 0777; + *pUid = sStat.st_uid; + *pGid = sStat.st_gid; + }else{ + rc = SQLITE_IOERR_FSTAT; + } + return rc; +} + +/* +** This function is called by unixOpen() to determine the unix permissions +** to create new files with. If no error occurs, then SQLITE_OK is returned +** and a value suitable for passing as the third argument to open(2) is +** written to *pMode. If an IO error occurs, an SQLite error code is +** returned and the value of *pMode is not modified. +** +** In most cases, this routine sets *pMode to 0, which will become +** an indication to robust_open() to create the file using +** SQLITE_DEFAULT_FILE_PERMISSIONS adjusted by the umask. +** But if the file being opened is a WAL or regular journal file, then +** this function queries the file-system for the permissions on the +** corresponding database file and sets *pMode to this value. Whenever +** possible, WAL and journal files are created using the same permissions +** as the associated database file. +** +** If the SQLITE_ENABLE_8_3_NAMES option is enabled, then the +** original filename is unavailable. But 8_3_NAMES is only used for +** FAT filesystems and permissions do not matter there, so just use +** the default permissions. In 8_3_NAMES mode, leave *pMode set to zero. +*/ +static int findCreateFileMode( + const char *zPath, /* Path of file (possibly) being created */ + int flags, /* Flags passed as 4th argument to xOpen() */ + mode_t *pMode, /* OUT: Permissions to open file with */ + uid_t *pUid, /* OUT: uid to set on the file */ + gid_t *pGid /* OUT: gid to set on the file */ +){ + int rc = SQLITE_OK; /* Return Code */ + *pMode = 0; + *pUid = 0; + *pGid = 0; + if( flags & (SQLITE_OPEN_WAL|SQLITE_OPEN_MAIN_JOURNAL) ){ + char zDb[MAX_PATHNAME+1]; /* Database file path */ + int nDb; /* Number of valid bytes in zDb */ + + /* zPath is a path to a WAL or journal file. The following block derives + ** the path to the associated database file from zPath. This block handles + ** the following naming conventions: + ** + ** "-journal" + ** "-wal" + ** "-journalNN" + ** "-walNN" + ** + ** where NN is a decimal number. The NN naming schemes are + ** used by the test_multiplex.c module. + ** + ** In normal operation, the journal file name will always contain + ** a '-' character. However in 8+3 filename mode, or if a corrupt + ** rollback journal specifies a super-journal with a goofy name, then + ** the '-' might be missing or the '-' might be the first character in + ** the filename. In that case, just return SQLITE_OK with *pMode==0. + */ + nDb = sqlite3Strlen30(zPath) - 1; + while( nDb>0 && zPath[nDb]!='.' ){ + if( zPath[nDb]=='-' ){ + memcpy(zDb, zPath, nDb); + zDb[nDb] = '\0'; + rc = getFileMode(zDb, pMode, pUid, pGid); + break; + } + nDb--; + } + }else if( flags & SQLITE_OPEN_DELETEONCLOSE ){ + *pMode = 0600; + }else if( flags & SQLITE_OPEN_URI ){ + /* If this is a main database file and the file was opened using a URI + ** filename, check for the "modeof" parameter. If present, interpret + ** its value as a filename and try to copy the mode, uid and gid from + ** that file. */ + const char *z = sqlite3_uri_parameter(zPath, "modeof"); + if( z ){ + rc = getFileMode(z, pMode, pUid, pGid); + } + } + return rc; +} + +/* +** Open the file zPath. +** +** Previously, the SQLite OS layer used three functions in place of this +** one: +** +** sqlite3OsOpenReadWrite(); +** sqlite3OsOpenReadOnly(); +** sqlite3OsOpenExclusive(); +** +** These calls correspond to the following combinations of flags: +** +** ReadWrite() -> (READWRITE | CREATE) +** ReadOnly() -> (READONLY) +** OpenExclusive() -> (READWRITE | CREATE | EXCLUSIVE) +** +** The old OpenExclusive() accepted a boolean argument - "delFlag". If +** true, the file was configured to be automatically deleted when the +** file handle closed. To achieve the same effect using this new +** interface, add the DELETEONCLOSE flag to those specified above for +** OpenExclusive(). +*/ +static int unixOpen( + sqlite3_vfs *pVfs, /* The VFS for which this is the xOpen method */ + const char *zPath, /* Pathname of file to be opened */ + sqlite3_file *pFile, /* The file descriptor to be filled in */ + int flags, /* Input flags to control the opening */ + int *pOutFlags /* Output flags returned to SQLite core */ +){ + unixFile *p = (unixFile *)pFile; + int fd = -1; /* File descriptor returned by open() */ + int openFlags = 0; /* Flags to pass to open() */ + int eType = flags&0x0FFF00; /* Type of file to open */ + int noLock; /* True to omit locking primitives */ + int rc = SQLITE_OK; /* Function Return Code */ + int ctrlFlags = 0; /* UNIXFILE_* flags */ + + int isExclusive = (flags & SQLITE_OPEN_EXCLUSIVE); + int isDelete = (flags & SQLITE_OPEN_DELETEONCLOSE); + int isCreate = (flags & SQLITE_OPEN_CREATE); + int isReadonly = (flags & SQLITE_OPEN_READONLY); + int isReadWrite = (flags & SQLITE_OPEN_READWRITE); +#if SQLITE_ENABLE_LOCKING_STYLE + int isAutoProxy = (flags & SQLITE_OPEN_AUTOPROXY); +#endif +#if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE + struct statfs fsInfo; +#endif + + /* If creating a super- or main-file journal, this function will open + ** a file-descriptor on the directory too. The first time unixSync() + ** is called the directory file descriptor will be fsync()ed and close()d. + */ + int isNewJrnl = (isCreate && ( + eType==SQLITE_OPEN_SUPER_JOURNAL + || eType==SQLITE_OPEN_MAIN_JOURNAL + || eType==SQLITE_OPEN_WAL + )); + + /* If argument zPath is a NULL pointer, this function is required to open + ** a temporary file. Use this buffer to store the file name in. + */ + char zTmpname[MAX_PATHNAME+2]; + const char *zName = zPath; + + /* Check the following statements are true: + ** + ** (a) Exactly one of the READWRITE and READONLY flags must be set, and + ** (b) if CREATE is set, then READWRITE must also be set, and + ** (c) if EXCLUSIVE is set, then CREATE must also be set. + ** (d) if DELETEONCLOSE is set, then CREATE must also be set. + */ + assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly)); + assert(isCreate==0 || isReadWrite); + assert(isExclusive==0 || isCreate); + assert(isDelete==0 || isCreate); + + /* The main DB, main journal, WAL file and super-journal are never + ** automatically deleted. Nor are they ever temporary files. */ + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB ); + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL ); + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_SUPER_JOURNAL ); + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL ); + + /* Assert that the upper layer has set one of the "file-type" flags. */ + assert( eType==SQLITE_OPEN_MAIN_DB || eType==SQLITE_OPEN_TEMP_DB + || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL + || eType==SQLITE_OPEN_SUBJOURNAL || eType==SQLITE_OPEN_SUPER_JOURNAL + || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL + ); + +#if OS_VXWORKS + /* The file-ID mechanism used in Vxworks requires that all pathnames + ** provided to unixOpen must be absolute pathnames. */ + if( zPath!=0 && zPath[0]!='/' ){ return SQLITE_CANTOPEN; } +#endif + + /* Detect a pid change and reset the PRNG. There is a race condition + ** here such that two or more threads all trying to open databases at + ** the same instant might all reset the PRNG. But multiple resets + ** are harmless. + */ + if( randomnessPid!=osGetpid(0) ){ + randomnessPid = osGetpid(0); + sqlite3_randomness(0,0); + } + memset(p, 0, sizeof(unixFile)); + +#ifdef SQLITE_ASSERT_NO_FILES + /* Applications that never read or write a persistent disk files */ + assert( zName==0 ); +#endif + + if( eType==SQLITE_OPEN_MAIN_DB ){ + UnixUnusedFd *pUnused; + pUnused = findReusableFd(zName, flags); + if( pUnused ){ + fd = pUnused->fd; + }else{ + pUnused = sqlite3_malloc64(sizeof(*pUnused)); + if( !pUnused ){ + return SQLITE_NOMEM_BKPT; + } + } + p->pPreallocatedUnused = pUnused; + + /* Database filenames are double-zero terminated if they are not + ** URIs with parameters. Hence, they can always be passed into + ** sqlite3_uri_parameter(). */ + assert( (flags & SQLITE_OPEN_URI) || zName[strlen(zName)+1]==0 ); + + }else if( !zName ){ + /* If zName is NULL, the upper layer is requesting a temp file. */ + assert(isDelete && !isNewJrnl); + rc = unixGetTempname(pVfs->mxPathname, zTmpname); + if( rc!=SQLITE_OK ){ + return rc; + } + zName = zTmpname; + + /* Generated temporary filenames are always double-zero terminated + ** for use by sqlite3_uri_parameter(). */ + assert( zName[strlen(zName)+1]==0 ); + } + + /* Determine the value of the flags parameter passed to POSIX function + ** open(). These must be calculated even if open() is not called, as + ** they may be stored as part of the file handle and used by the + ** 'conch file' locking functions later on. */ + if( isReadonly ) openFlags |= O_RDONLY; + if( isReadWrite ) openFlags |= O_RDWR; + if( isCreate ) openFlags |= O_CREAT; + if( isExclusive ) openFlags |= (O_EXCL|O_NOFOLLOW); + openFlags |= (O_LARGEFILE|O_BINARY|O_NOFOLLOW); + + if( fd<0 ){ + mode_t openMode; /* Permissions to create file with */ + uid_t uid; /* Userid for the file */ + gid_t gid; /* Groupid for the file */ + rc = findCreateFileMode(zName, flags, &openMode, &uid, &gid); + if( rc!=SQLITE_OK ){ + assert( !p->pPreallocatedUnused ); + assert( eType==SQLITE_OPEN_WAL || eType==SQLITE_OPEN_MAIN_JOURNAL ); + return rc; + } + fd = robust_open(zName, openFlags, openMode); + OSTRACE(("OPENX %-3d %s 0%o\n", fd, zName, openFlags)); + assert( !isExclusive || (openFlags & O_CREAT)!=0 ); + if( fd<0 ){ + if( isNewJrnl && errno==EACCES && osAccess(zName, F_OK) ){ + /* If unable to create a journal because the directory is not + ** writable, change the error code to indicate that. */ + rc = SQLITE_READONLY_DIRECTORY; + }else if( errno!=EISDIR && isReadWrite ){ + /* Failed to open the file for read/write access. Try read-only. */ + UnixUnusedFd *pReadonly = 0; + flags &= ~(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE); + openFlags &= ~(O_RDWR|O_CREAT); + flags |= SQLITE_OPEN_READONLY; + openFlags |= O_RDONLY; + isReadonly = 1; + pReadonly = findReusableFd(zName, flags); + if( pReadonly ){ + fd = pReadonly->fd; + sqlite3_free(pReadonly); + }else{ + fd = robust_open(zName, openFlags, openMode); + } + } + } + if( fd<0 ){ + int rc2 = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zName); + if( rc==SQLITE_OK ) rc = rc2; + goto open_finished; + } + + /* The owner of the rollback journal or WAL file should always be the + ** same as the owner of the database file. Try to ensure that this is + ** the case. The chown() system call will be a no-op if the current + ** process lacks root privileges, be we should at least try. Without + ** this step, if a root process opens a database file, it can leave + ** behinds a journal/WAL that is owned by root and hence make the + ** database inaccessible to unprivileged processes. + ** + ** If openMode==0, then that means uid and gid are not set correctly + ** (probably because SQLite is configured to use 8+3 filename mode) and + ** in that case we do not want to attempt the chown(). + */ + if( openMode && (flags & (SQLITE_OPEN_WAL|SQLITE_OPEN_MAIN_JOURNAL))!=0 ){ + robustFchown(fd, uid, gid); + } + } + assert( fd>=0 ); + if( pOutFlags ){ + *pOutFlags = flags; + } + + if( p->pPreallocatedUnused ){ + p->pPreallocatedUnused->fd = fd; + p->pPreallocatedUnused->flags = + flags & (SQLITE_OPEN_READONLY|SQLITE_OPEN_READWRITE); + } + + if( isDelete ){ +#if OS_VXWORKS + zPath = zName; +#elif defined(SQLITE_UNLINK_AFTER_CLOSE) + zPath = sqlite3_mprintf("%s", zName); + if( zPath==0 ){ + robust_close(p, fd, __LINE__); + return SQLITE_NOMEM_BKPT; + } +#else + osUnlink(zName); +#endif + } +#if SQLITE_ENABLE_LOCKING_STYLE + else{ + p->openFlags = openFlags; + } +#endif + +#if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE + if( fstatfs(fd, &fsInfo) == -1 ){ + storeLastErrno(p, errno); + robust_close(p, fd, __LINE__); + return SQLITE_IOERR_ACCESS; + } + if (0 == strncmp("msdos", fsInfo.f_fstypename, 5)) { + ((unixFile*)pFile)->fsFlags |= SQLITE_FSFLAGS_IS_MSDOS; + } + if (0 == strncmp("exfat", fsInfo.f_fstypename, 5)) { + ((unixFile*)pFile)->fsFlags |= SQLITE_FSFLAGS_IS_MSDOS; + } +#endif + + /* Set up appropriate ctrlFlags */ + if( isDelete ) ctrlFlags |= UNIXFILE_DELETE; + if( isReadonly ) ctrlFlags |= UNIXFILE_RDONLY; + noLock = eType!=SQLITE_OPEN_MAIN_DB; + if( noLock ) ctrlFlags |= UNIXFILE_NOLOCK; + if( isNewJrnl ) ctrlFlags |= UNIXFILE_DIRSYNC; + if( flags & SQLITE_OPEN_URI ) ctrlFlags |= UNIXFILE_URI; + +#if SQLITE_ENABLE_LOCKING_STYLE +#if SQLITE_PREFER_PROXY_LOCKING + isAutoProxy = 1; +#endif + if( isAutoProxy && (zPath!=NULL) && (!noLock) && pVfs->xOpen ){ + char *envforce = getenv("SQLITE_FORCE_PROXY_LOCKING"); + int useProxy = 0; + + /* SQLITE_FORCE_PROXY_LOCKING==1 means force always use proxy, 0 means + ** never use proxy, NULL means use proxy for non-local files only. */ + if( envforce!=NULL ){ + useProxy = atoi(envforce)>0; + }else{ + useProxy = !(fsInfo.f_flags&MNT_LOCAL); + } + if( useProxy ){ + rc = fillInUnixFile(pVfs, fd, pFile, zPath, ctrlFlags); + if( rc==SQLITE_OK ){ + rc = proxyTransformUnixFile((unixFile*)pFile, ":auto:"); + if( rc!=SQLITE_OK ){ + /* Use unixClose to clean up the resources added in fillInUnixFile + ** and clear all the structure's references. Specifically, + ** pFile->pMethods will be NULL so sqlite3OsClose will be a no-op + */ + unixClose(pFile); + return rc; + } + } + goto open_finished; + } + } +#endif + + assert( zPath==0 + || zPath[0]=='/' + || eType==SQLITE_OPEN_SUPER_JOURNAL + || eType==SQLITE_OPEN_MAIN_JOURNAL + || eType==SQLITE_OPEN_TEMP_JOURNAL + ); + rc = fillInUnixFile(pVfs, fd, pFile, zPath, ctrlFlags); + +open_finished: + if( rc!=SQLITE_OK ){ + sqlite3_free(p->pPreallocatedUnused); + } + return rc; +} + + +/* +** Delete the file at zPath. If the dirSync argument is true, fsync() +** the directory after deleting the file. +*/ +static int unixDelete( + sqlite3_vfs *NotUsed, /* VFS containing this as the xDelete method */ + const char *zPath, /* Name of file to be deleted */ + int dirSync /* If true, fsync() directory after deleting file */ +){ + int rc = SQLITE_OK; + UNUSED_PARAMETER(NotUsed); + SimulateIOError(return SQLITE_IOERR_DELETE); + if( osUnlink(zPath)==(-1) ){ + if( errno==ENOENT +#if OS_VXWORKS + || osAccess(zPath,0)!=0 +#endif + ){ + rc = SQLITE_IOERR_DELETE_NOENT; + }else{ + rc = unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath); + } + return rc; + } +#ifndef SQLITE_DISABLE_DIRSYNC + if( (dirSync & 1)!=0 ){ + int fd; + rc = osOpenDirectory(zPath, &fd); + if( rc==SQLITE_OK ){ + if( full_fsync(fd,0,0) ){ + rc = unixLogError(SQLITE_IOERR_DIR_FSYNC, "fsync", zPath); + } + robust_close(0, fd, __LINE__); + }else{ + assert( rc==SQLITE_CANTOPEN ); + rc = SQLITE_OK; + } + } +#endif + return rc; +} + +/* +** Test the existence of or access permissions of file zPath. The +** test performed depends on the value of flags: +** +** SQLITE_ACCESS_EXISTS: Return 1 if the file exists +** SQLITE_ACCESS_READWRITE: Return 1 if the file is read and writable. +** SQLITE_ACCESS_READONLY: Return 1 if the file is readable. +** +** Otherwise return 0. +*/ +static int unixAccess( + sqlite3_vfs *NotUsed, /* The VFS containing this xAccess method */ + const char *zPath, /* Path of the file to examine */ + int flags, /* What do we want to learn about the zPath file? */ + int *pResOut /* Write result boolean here */ +){ + UNUSED_PARAMETER(NotUsed); + SimulateIOError( return SQLITE_IOERR_ACCESS; ); + assert( pResOut!=0 ); + + /* The spec says there are three possible values for flags. But only + ** two of them are actually used */ + assert( flags==SQLITE_ACCESS_EXISTS || flags==SQLITE_ACCESS_READWRITE ); + + if( flags==SQLITE_ACCESS_EXISTS ){ + struct stat buf; + *pResOut = 0==osStat(zPath, &buf) && + (!S_ISREG(buf.st_mode) || buf.st_size>0); + }else{ + *pResOut = osAccess(zPath, W_OK|R_OK)==0; + } + return SQLITE_OK; +} + +/* +** A pathname under construction +*/ +typedef struct DbPath DbPath; +struct DbPath { + int rc; /* Non-zero following any error */ + int nSymlink; /* Number of symlinks resolved */ + char *zOut; /* Write the pathname here */ + int nOut; /* Bytes of space available to zOut[] */ + int nUsed; /* Bytes of zOut[] currently being used */ +}; + +/* Forward reference */ +static void appendAllPathElements(DbPath*,const char*); + +/* +** Append a single path element to the DbPath under construction +*/ +static void appendOnePathElement( + DbPath *pPath, /* Path under construction, to which to append zName */ + const char *zName, /* Name to append to pPath. Not zero-terminated */ + int nName /* Number of significant bytes in zName */ +){ + assert( nName>0 ); + assert( zName!=0 ); + if( zName[0]=='.' ){ + if( nName==1 ) return; + if( zName[1]=='.' && nName==2 ){ + if( pPath->nUsed>1 ){ + assert( pPath->zOut[0]=='/' ); + while( pPath->zOut[--pPath->nUsed]!='/' ){} + } + return; + } + } + if( pPath->nUsed + nName + 2 >= pPath->nOut ){ + pPath->rc = SQLITE_ERROR; + return; + } + pPath->zOut[pPath->nUsed++] = '/'; + memcpy(&pPath->zOut[pPath->nUsed], zName, nName); + pPath->nUsed += nName; +#if defined(HAVE_READLINK) && defined(HAVE_LSTAT) + if( pPath->rc==SQLITE_OK ){ + const char *zIn; + struct stat buf; + pPath->zOut[pPath->nUsed] = 0; + zIn = pPath->zOut; + if( osLstat(zIn, &buf)!=0 ){ + if( errno!=ENOENT ){ + pPath->rc = unixLogError(SQLITE_CANTOPEN_BKPT, "lstat", zIn); + } + }else if( S_ISLNK(buf.st_mode) ){ + ssize_t got; + char zLnk[SQLITE_MAX_PATHLEN+2]; + if( pPath->nSymlink++ > SQLITE_MAX_SYMLINK ){ + pPath->rc = SQLITE_CANTOPEN_BKPT; + return; + } + got = osReadlink(zIn, zLnk, sizeof(zLnk)-2); + if( got<=0 || got>=(ssize_t)sizeof(zLnk)-2 ){ + pPath->rc = unixLogError(SQLITE_CANTOPEN_BKPT, "readlink", zIn); + return; + } + zLnk[got] = 0; + if( zLnk[0]=='/' ){ + pPath->nUsed = 0; + }else{ + pPath->nUsed -= nName + 1; + } + appendAllPathElements(pPath, zLnk); + } + } +#endif +} + +/* +** Append all path elements in zPath to the DbPath under construction. +*/ +static void appendAllPathElements( + DbPath *pPath, /* Path under construction, to which to append zName */ + const char *zPath /* Path to append to pPath. Is zero-terminated */ +){ + int i = 0; + int j = 0; + do{ + while( zPath[i] && zPath[i]!='/' ){ i++; } + if( i>j ){ + appendOnePathElement(pPath, &zPath[j], i-j); + } + j = i+1; + }while( zPath[i++] ); +} + +/* +** Turn a relative pathname into a full pathname. The relative path +** is stored as a nul-terminated string in the buffer pointed to by +** zPath. +** +** zOut points to a buffer of at least sqlite3_vfs.mxPathname bytes +** (in this case, MAX_PATHNAME bytes). The full-path is written to +** this buffer before returning. +*/ +static int unixFullPathname( + sqlite3_vfs *pVfs, /* Pointer to vfs object */ + const char *zPath, /* Possibly relative input path */ + int nOut, /* Size of output buffer in bytes */ + char *zOut /* Output buffer */ +){ + DbPath path; + UNUSED_PARAMETER(pVfs); + path.rc = 0; + path.nUsed = 0; + path.nSymlink = 0; + path.nOut = nOut; + path.zOut = zOut; + if( zPath[0]!='/' ){ + char zPwd[SQLITE_MAX_PATHLEN+2]; + if( osGetcwd(zPwd, sizeof(zPwd)-2)==0 ){ + return unixLogError(SQLITE_CANTOPEN_BKPT, "getcwd", zPath); + } + appendAllPathElements(&path, zPwd); + } + appendAllPathElements(&path, zPath); + zOut[path.nUsed] = 0; + if( path.rc || path.nUsed<2 ) return SQLITE_CANTOPEN_BKPT; + if( path.nSymlink ) return SQLITE_OK_SYMLINK; + return SQLITE_OK; +} + +#ifndef SQLITE_OMIT_LOAD_EXTENSION +/* +** Interfaces for opening a shared library, finding entry points +** within the shared library, and closing the shared library. +*/ +#include +static void *unixDlOpen(sqlite3_vfs *NotUsed, const char *zFilename){ + UNUSED_PARAMETER(NotUsed); + return dlopen(zFilename, RTLD_NOW | RTLD_GLOBAL); +} + +/* +** SQLite calls this function immediately after a call to unixDlSym() or +** unixDlOpen() fails (returns a null pointer). If a more detailed error +** message is available, it is written to zBufOut. If no error message +** is available, zBufOut is left unmodified and SQLite uses a default +** error message. +*/ +static void unixDlError(sqlite3_vfs *NotUsed, int nBuf, char *zBufOut){ + const char *zErr; + UNUSED_PARAMETER(NotUsed); + unixEnterMutex(); + zErr = dlerror(); + if( zErr ){ + sqlite3_snprintf(nBuf, zBufOut, "%s", zErr); + } + unixLeaveMutex(); +} +static void (*unixDlSym(sqlite3_vfs *NotUsed, void *p, const char*zSym))(void){ + /* + ** GCC with -pedantic-errors says that C90 does not allow a void* to be + ** cast into a pointer to a function. And yet the library dlsym() routine + ** returns a void* which is really a pointer to a function. So how do we + ** use dlsym() with -pedantic-errors? + ** + ** Variable x below is defined to be a pointer to a function taking + ** parameters void* and const char* and returning a pointer to a function. + ** We initialize x by assigning it a pointer to the dlsym() function. + ** (That assignment requires a cast.) Then we call the function that + ** x points to. + ** + ** This work-around is unlikely to work correctly on any system where + ** you really cannot cast a function pointer into void*. But then, on the + ** other hand, dlsym() will not work on such a system either, so we have + ** not really lost anything. + */ + void (*(*x)(void*,const char*))(void); + UNUSED_PARAMETER(NotUsed); + x = (void(*(*)(void*,const char*))(void))dlsym; + return (*x)(p, zSym); +} +static void unixDlClose(sqlite3_vfs *NotUsed, void *pHandle){ + UNUSED_PARAMETER(NotUsed); + dlclose(pHandle); +} +#else /* if SQLITE_OMIT_LOAD_EXTENSION is defined: */ + #define unixDlOpen 0 + #define unixDlError 0 + #define unixDlSym 0 + #define unixDlClose 0 +#endif + +/* +** Write nBuf bytes of random data to the supplied buffer zBuf. +*/ +static int unixRandomness(sqlite3_vfs *NotUsed, int nBuf, char *zBuf){ + UNUSED_PARAMETER(NotUsed); + assert((size_t)nBuf>=(sizeof(time_t)+sizeof(int))); + + /* We have to initialize zBuf to prevent valgrind from reporting + ** errors. The reports issued by valgrind are incorrect - we would + ** prefer that the randomness be increased by making use of the + ** uninitialized space in zBuf - but valgrind errors tend to worry + ** some users. Rather than argue, it seems easier just to initialize + ** the whole array and silence valgrind, even if that means less randomness + ** in the random seed. + ** + ** When testing, initializing zBuf[] to zero is all we do. That means + ** that we always use the same random number sequence. This makes the + ** tests repeatable. + */ + memset(zBuf, 0, nBuf); + randomnessPid = osGetpid(0); +#if !defined(SQLITE_TEST) && !defined(SQLITE_OMIT_RANDOMNESS) + { + int fd, got; + fd = robust_open("/dev/urandom", O_RDONLY, 0); + if( fd<0 ){ + time_t t; + time(&t); + memcpy(zBuf, &t, sizeof(t)); + memcpy(&zBuf[sizeof(t)], &randomnessPid, sizeof(randomnessPid)); + assert( sizeof(t)+sizeof(randomnessPid)<=(size_t)nBuf ); + nBuf = sizeof(t) + sizeof(randomnessPid); + }else{ + do{ got = osRead(fd, zBuf, nBuf); }while( got<0 && errno==EINTR ); + robust_close(0, fd, __LINE__); + } + } +#endif + return nBuf; +} + + +/* +** Sleep for a little while. Return the amount of time slept. +** The argument is the number of microseconds we want to sleep. +** The return value is the number of microseconds of sleep actually +** requested from the underlying operating system, a number which +** might be greater than or equal to the argument, but not less +** than the argument. +*/ +static int unixSleep(sqlite3_vfs *NotUsed, int microseconds){ +#if !defined(HAVE_NANOSLEEP) || HAVE_NANOSLEEP+0 + struct timespec sp; + sp.tv_sec = microseconds / 1000000; + sp.tv_nsec = (microseconds % 1000000) * 1000; + + /* Almost all modern unix systems support nanosleep(). But if you are + ** compiling for one of the rare exceptions, you can use + ** -DHAVE_NANOSLEEP=0 (perhaps in conjunction with -DHAVE_USLEEP if + ** usleep() is available) in order to bypass the use of nanosleep() */ + nanosleep(&sp, NULL); + + UNUSED_PARAMETER(NotUsed); + return microseconds; +#elif defined(HAVE_USLEEP) && HAVE_USLEEP + if( microseconds>=1000000 ) sleep(microseconds/1000000); + if( microseconds%1000000 ) usleep(microseconds%1000000); + UNUSED_PARAMETER(NotUsed); + return microseconds; +#else + int seconds = (microseconds+999999)/1000000; + sleep(seconds); + UNUSED_PARAMETER(NotUsed); + return seconds*1000000; +#endif +} + +/* +** The following variable, if set to a non-zero value, is interpreted as +** the number of seconds since 1970 and is used to set the result of +** sqlite3OsCurrentTime() during testing. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_current_time = 0; /* Fake system time in seconds since 1970. */ +#endif + +/* +** Find the current time (in Universal Coordinated Time). Write into *piNow +** the current time and date as a Julian Day number times 86_400_000. In +** other words, write into *piNow the number of milliseconds since the Julian +** epoch of noon in Greenwich on November 24, 4714 B.C according to the +** proleptic Gregorian calendar. +** +** On success, return SQLITE_OK. Return SQLITE_ERROR if the time and date +** cannot be found. +*/ +static int unixCurrentTimeInt64(sqlite3_vfs *NotUsed, sqlite3_int64 *piNow){ + static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000; + int rc = SQLITE_OK; +#if defined(NO_GETTOD) + time_t t; + time(&t); + *piNow = ((sqlite3_int64)t)*1000 + unixEpoch; +#elif OS_VXWORKS + struct timespec sNow; + clock_gettime(CLOCK_REALTIME, &sNow); + *piNow = unixEpoch + 1000*(sqlite3_int64)sNow.tv_sec + sNow.tv_nsec/1000000; +#else + struct timeval sNow; + (void)gettimeofday(&sNow, 0); /* Cannot fail given valid arguments */ + *piNow = unixEpoch + 1000*(sqlite3_int64)sNow.tv_sec + sNow.tv_usec/1000; +#endif + +#ifdef SQLITE_TEST + if( sqlite3_current_time ){ + *piNow = 1000*(sqlite3_int64)sqlite3_current_time + unixEpoch; + } +#endif + UNUSED_PARAMETER(NotUsed); + return rc; +} + +#ifndef SQLITE_OMIT_DEPRECATED +/* +** Find the current time (in Universal Coordinated Time). Write the +** current time and date as a Julian Day number into *prNow and +** return 0. Return 1 if the time and date cannot be found. +*/ +static int unixCurrentTime(sqlite3_vfs *NotUsed, double *prNow){ + sqlite3_int64 i = 0; + int rc; + UNUSED_PARAMETER(NotUsed); + rc = unixCurrentTimeInt64(0, &i); + *prNow = i/86400000.0; + return rc; +} +#else +# define unixCurrentTime 0 +#endif + +/* +** The xGetLastError() method is designed to return a better +** low-level error message when operating-system problems come up +** during SQLite operation. Only the integer return code is currently +** used. +*/ +static int unixGetLastError(sqlite3_vfs *NotUsed, int NotUsed2, char *NotUsed3){ + UNUSED_PARAMETER(NotUsed); + UNUSED_PARAMETER(NotUsed2); + UNUSED_PARAMETER(NotUsed3); + return errno; +} + + +/* +************************ End of sqlite3_vfs methods *************************** +******************************************************************************/ + +/****************************************************************************** +************************** Begin Proxy Locking ******************************** +** +** Proxy locking is a "uber-locking-method" in this sense: It uses the +** other locking methods on secondary lock files. Proxy locking is a +** meta-layer over top of the primitive locking implemented above. For +** this reason, the division that implements of proxy locking is deferred +** until late in the file (here) after all of the other I/O methods have +** been defined - so that the primitive locking methods are available +** as services to help with the implementation of proxy locking. +** +**** +** +** The default locking schemes in SQLite use byte-range locks on the +** database file to coordinate safe, concurrent access by multiple readers +** and writers [http://sqlite.org/lockingv3.html]. The five file locking +** states (UNLOCKED, PENDING, SHARED, RESERVED, EXCLUSIVE) are implemented +** as POSIX read & write locks over fixed set of locations (via fsctl), +** on AFP and SMB only exclusive byte-range locks are available via fsctl +** with _IOWR('z', 23, struct ByteRangeLockPB2) to track the same 5 states. +** To simulate a F_RDLCK on the shared range, on AFP a randomly selected +** address in the shared range is taken for a SHARED lock, the entire +** shared range is taken for an EXCLUSIVE lock): +** +** PENDING_BYTE 0x40000000 +** RESERVED_BYTE 0x40000001 +** SHARED_RANGE 0x40000002 -> 0x40000200 +** +** This works well on the local file system, but shows a nearly 100x +** slowdown in read performance on AFP because the AFP client disables +** the read cache when byte-range locks are present. Enabling the read +** cache exposes a cache coherency problem that is present on all OS X +** supported network file systems. NFS and AFP both observe the +** close-to-open semantics for ensuring cache coherency +** [http://nfs.sourceforge.net/#faq_a8], which does not effectively +** address the requirements for concurrent database access by multiple +** readers and writers +** [http://www.nabble.com/SQLite-on-NFS-cache-coherency-td15655701.html]. +** +** To address the performance and cache coherency issues, proxy file locking +** changes the way database access is controlled by limiting access to a +** single host at a time and moving file locks off of the database file +** and onto a proxy file on the local file system. +** +** +** Using proxy locks +** ----------------- +** +** C APIs +** +** sqlite3_file_control(db, dbname, SQLITE_FCNTL_SET_LOCKPROXYFILE, +** | ":auto:"); +** sqlite3_file_control(db, dbname, SQLITE_FCNTL_GET_LOCKPROXYFILE, +** &); +** +** +** SQL pragmas +** +** PRAGMA [database.]lock_proxy_file= | :auto: +** PRAGMA [database.]lock_proxy_file +** +** Specifying ":auto:" means that if there is a conch file with a matching +** host ID in it, the proxy path in the conch file will be used, otherwise +** a proxy path based on the user's temp dir +** (via confstr(_CS_DARWIN_USER_TEMP_DIR,...)) will be used and the +** actual proxy file name is generated from the name and path of the +** database file. For example: +** +** For database path "/Users/me/foo.db" +** The lock path will be "/sqliteplocks/_Users_me_foo.db:auto:") +** +** Once a lock proxy is configured for a database connection, it can not +** be removed, however it may be switched to a different proxy path via +** the above APIs (assuming the conch file is not being held by another +** connection or process). +** +** +** How proxy locking works +** ----------------------- +** +** Proxy file locking relies primarily on two new supporting files: +** +** * conch file to limit access to the database file to a single host +** at a time +** +** * proxy file to act as a proxy for the advisory locks normally +** taken on the database +** +** The conch file - to use a proxy file, sqlite must first "hold the conch" +** by taking an sqlite-style shared lock on the conch file, reading the +** contents and comparing the host's unique host ID (see below) and lock +** proxy path against the values stored in the conch. The conch file is +** stored in the same directory as the database file and the file name +** is patterned after the database file name as ".-conch". +** If the conch file does not exist, or its contents do not match the +** host ID and/or proxy path, then the lock is escalated to an exclusive +** lock and the conch file contents is updated with the host ID and proxy +** path and the lock is downgraded to a shared lock again. If the conch +** is held by another process (with a shared lock), the exclusive lock +** will fail and SQLITE_BUSY is returned. +** +** The proxy file - a single-byte file used for all advisory file locks +** normally taken on the database file. This allows for safe sharing +** of the database file for multiple readers and writers on the same +** host (the conch ensures that they all use the same local lock file). +** +** Requesting the lock proxy does not immediately take the conch, it is +** only taken when the first request to lock database file is made. +** This matches the semantics of the traditional locking behavior, where +** opening a connection to a database file does not take a lock on it. +** The shared lock and an open file descriptor are maintained until +** the connection to the database is closed. +** +** The proxy file and the lock file are never deleted so they only need +** to be created the first time they are used. +** +** Configuration options +** --------------------- +** +** SQLITE_PREFER_PROXY_LOCKING +** +** Database files accessed on non-local file systems are +** automatically configured for proxy locking, lock files are +** named automatically using the same logic as +** PRAGMA lock_proxy_file=":auto:" +** +** SQLITE_PROXY_DEBUG +** +** Enables the logging of error messages during host id file +** retrieval and creation +** +** LOCKPROXYDIR +** +** Overrides the default directory used for lock proxy files that +** are named automatically via the ":auto:" setting +** +** SQLITE_DEFAULT_PROXYDIR_PERMISSIONS +** +** Permissions to use when creating a directory for storing the +** lock proxy files, only used when LOCKPROXYDIR is not set. +** +** +** As mentioned above, when compiled with SQLITE_PREFER_PROXY_LOCKING, +** setting the environment variable SQLITE_FORCE_PROXY_LOCKING to 1 will +** force proxy locking to be used for every database file opened, and 0 +** will force automatic proxy locking to be disabled for all database +** files (explicitly calling the SQLITE_FCNTL_SET_LOCKPROXYFILE pragma or +** sqlite_file_control API is not affected by SQLITE_FORCE_PROXY_LOCKING). +*/ + +/* +** Proxy locking is only available on MacOSX +*/ +#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE + +/* +** The proxyLockingContext has the path and file structures for the remote +** and local proxy files in it +*/ +typedef struct proxyLockingContext proxyLockingContext; +struct proxyLockingContext { + unixFile *conchFile; /* Open conch file */ + char *conchFilePath; /* Name of the conch file */ + unixFile *lockProxy; /* Open proxy lock file */ + char *lockProxyPath; /* Name of the proxy lock file */ + char *dbPath; /* Name of the open file */ + int conchHeld; /* 1 if the conch is held, -1 if lockless */ + int nFails; /* Number of conch taking failures */ + void *oldLockingContext; /* Original lockingcontext to restore on close */ + sqlite3_io_methods const *pOldMethod; /* Original I/O methods for close */ +}; + +/* +** The proxy lock file path for the database at dbPath is written into lPath, +** which must point to valid, writable memory large enough for a maxLen length +** file path. +*/ +static int proxyGetLockPath(const char *dbPath, char *lPath, size_t maxLen){ + int len; + int dbLen; + int i; + +#ifdef LOCKPROXYDIR + len = strlcpy(lPath, LOCKPROXYDIR, maxLen); +#else +# ifdef _CS_DARWIN_USER_TEMP_DIR + { + if( !confstr(_CS_DARWIN_USER_TEMP_DIR, lPath, maxLen) ){ + OSTRACE(("GETLOCKPATH failed %s errno=%d pid=%d\n", + lPath, errno, osGetpid(0))); + return SQLITE_IOERR_LOCK; + } + len = strlcat(lPath, "sqliteplocks", maxLen); + } +# else + len = strlcpy(lPath, "/tmp/", maxLen); +# endif +#endif + + if( lPath[len-1]!='/' ){ + len = strlcat(lPath, "/", maxLen); + } + + /* transform the db path to a unique cache name */ + dbLen = (int)strlen(dbPath); + for( i=0; i 0) ){ + /* only mkdir if leaf dir != "." or "/" or ".." */ + if( i-start>2 || (i-start==1 && buf[start] != '.' && buf[start] != '/') + || (i-start==2 && buf[start] != '.' && buf[start+1] != '.') ){ + buf[i]='\0'; + if( osMkdir(buf, SQLITE_DEFAULT_PROXYDIR_PERMISSIONS) ){ + int err=errno; + if( err!=EEXIST ) { + OSTRACE(("CREATELOCKPATH FAILED creating %s, " + "'%s' proxy lock path=%s pid=%d\n", + buf, strerror(err), lockPath, osGetpid(0))); + return err; + } + } + } + start=i+1; + } + buf[i] = lockPath[i]; + } + OSTRACE(("CREATELOCKPATH proxy lock path=%s pid=%d\n",lockPath,osGetpid(0))); + return 0; +} + +/* +** Create a new VFS file descriptor (stored in memory obtained from +** sqlite3_malloc) and open the file named "path" in the file descriptor. +** +** The caller is responsible not only for closing the file descriptor +** but also for freeing the memory associated with the file descriptor. +*/ +static int proxyCreateUnixFile( + const char *path, /* path for the new unixFile */ + unixFile **ppFile, /* unixFile created and returned by ref */ + int islockfile /* if non zero missing dirs will be created */ +) { + int fd = -1; + unixFile *pNew; + int rc = SQLITE_OK; + int openFlags = O_RDWR | O_CREAT | O_NOFOLLOW; + sqlite3_vfs dummyVfs; + int terrno = 0; + UnixUnusedFd *pUnused = NULL; + + /* 1. first try to open/create the file + ** 2. if that fails, and this is a lock file (not-conch), try creating + ** the parent directories and then try again. + ** 3. if that fails, try to open the file read-only + ** otherwise return BUSY (if lock file) or CANTOPEN for the conch file + */ + pUnused = findReusableFd(path, openFlags); + if( pUnused ){ + fd = pUnused->fd; + }else{ + pUnused = sqlite3_malloc64(sizeof(*pUnused)); + if( !pUnused ){ + return SQLITE_NOMEM_BKPT; + } + } + if( fd<0 ){ + fd = robust_open(path, openFlags, 0); + terrno = errno; + if( fd<0 && errno==ENOENT && islockfile ){ + if( proxyCreateLockPath(path) == SQLITE_OK ){ + fd = robust_open(path, openFlags, 0); + } + } + } + if( fd<0 ){ + openFlags = O_RDONLY | O_NOFOLLOW; + fd = robust_open(path, openFlags, 0); + terrno = errno; + } + if( fd<0 ){ + if( islockfile ){ + return SQLITE_BUSY; + } + switch (terrno) { + case EACCES: + return SQLITE_PERM; + case EIO: + return SQLITE_IOERR_LOCK; /* even though it is the conch */ + default: + return SQLITE_CANTOPEN_BKPT; + } + } + + pNew = (unixFile *)sqlite3_malloc64(sizeof(*pNew)); + if( pNew==NULL ){ + rc = SQLITE_NOMEM_BKPT; + goto end_create_proxy; + } + memset(pNew, 0, sizeof(unixFile)); + pNew->openFlags = openFlags; + memset(&dummyVfs, 0, sizeof(dummyVfs)); + dummyVfs.pAppData = (void*)&autolockIoFinder; + dummyVfs.zName = "dummy"; + pUnused->fd = fd; + pUnused->flags = openFlags; + pNew->pPreallocatedUnused = pUnused; + + rc = fillInUnixFile(&dummyVfs, fd, (sqlite3_file*)pNew, path, 0); + if( rc==SQLITE_OK ){ + *ppFile = pNew; + return SQLITE_OK; + } +end_create_proxy: + robust_close(pNew, fd, __LINE__); + sqlite3_free(pNew); + sqlite3_free(pUnused); + return rc; +} + +#ifdef SQLITE_TEST +/* simulate multiple hosts by creating unique hostid file paths */ +SQLITE_API int sqlite3_hostid_num = 0; +#endif + +#define PROXY_HOSTIDLEN 16 /* conch file host id length */ + +#if HAVE_GETHOSTUUID +/* Not always defined in the headers as it ought to be */ +extern int gethostuuid(uuid_t id, const struct timespec *wait); +#endif + +/* get the host ID via gethostuuid(), pHostID must point to PROXY_HOSTIDLEN +** bytes of writable memory. +*/ +static int proxyGetHostID(unsigned char *pHostID, int *pError){ + assert(PROXY_HOSTIDLEN == sizeof(uuid_t)); + memset(pHostID, 0, PROXY_HOSTIDLEN); +#if HAVE_GETHOSTUUID + { + struct timespec timeout = {1, 0}; /* 1 sec timeout */ + if( gethostuuid(pHostID, &timeout) ){ + int err = errno; + if( pError ){ + *pError = err; + } + return SQLITE_IOERR; + } + } +#else + UNUSED_PARAMETER(pError); +#endif +#ifdef SQLITE_TEST + /* simulate multiple hosts by creating unique hostid file paths */ + if( sqlite3_hostid_num != 0){ + pHostID[0] = (char)(pHostID[0] + (char)(sqlite3_hostid_num & 0xFF)); + } +#endif + + return SQLITE_OK; +} + +/* The conch file contains the header, host id and lock file path + */ +#define PROXY_CONCHVERSION 2 /* 1-byte header, 16-byte host id, path */ +#define PROXY_HEADERLEN 1 /* conch file header length */ +#define PROXY_PATHINDEX (PROXY_HEADERLEN+PROXY_HOSTIDLEN) +#define PROXY_MAXCONCHLEN (PROXY_HEADERLEN+PROXY_HOSTIDLEN+MAXPATHLEN) + +/* +** Takes an open conch file, copies the contents to a new path and then moves +** it back. The newly created file's file descriptor is assigned to the +** conch file structure and finally the original conch file descriptor is +** closed. Returns zero if successful. +*/ +static int proxyBreakConchLock(unixFile *pFile, uuid_t myHostID){ + proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; + unixFile *conchFile = pCtx->conchFile; + char tPath[MAXPATHLEN]; + char buf[PROXY_MAXCONCHLEN]; + char *cPath = pCtx->conchFilePath; + size_t readLen = 0; + size_t pathLen = 0; + char errmsg[64] = ""; + int fd = -1; + int rc = -1; + UNUSED_PARAMETER(myHostID); + + /* create a new path by replace the trailing '-conch' with '-break' */ + pathLen = strlcpy(tPath, cPath, MAXPATHLEN); + if( pathLen>MAXPATHLEN || pathLen<6 || + (strlcpy(&tPath[pathLen-5], "break", 6) != 5) ){ + sqlite3_snprintf(sizeof(errmsg),errmsg,"path error (len %d)",(int)pathLen); + goto end_breaklock; + } + /* read the conch content */ + readLen = osPread(conchFile->h, buf, PROXY_MAXCONCHLEN, 0); + if( readLenh, __LINE__); + conchFile->h = fd; + conchFile->openFlags = O_RDWR | O_CREAT; + +end_breaklock: + if( rc ){ + if( fd>=0 ){ + osUnlink(tPath); + robust_close(pFile, fd, __LINE__); + } + fprintf(stderr, "failed to break stale lock on %s, %s\n", cPath, errmsg); + } + return rc; +} + +/* Take the requested lock on the conch file and break a stale lock if the +** host id matches. +*/ +static int proxyConchLock(unixFile *pFile, uuid_t myHostID, int lockType){ + proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; + unixFile *conchFile = pCtx->conchFile; + int rc = SQLITE_OK; + int nTries = 0; + struct timespec conchModTime; + + memset(&conchModTime, 0, sizeof(conchModTime)); + do { + rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, lockType); + nTries ++; + if( rc==SQLITE_BUSY ){ + /* If the lock failed (busy): + * 1st try: get the mod time of the conch, wait 0.5s and try again. + * 2nd try: fail if the mod time changed or host id is different, wait + * 10 sec and try again + * 3rd try: break the lock unless the mod time has changed. + */ + struct stat buf; + if( osFstat(conchFile->h, &buf) ){ + storeLastErrno(pFile, errno); + return SQLITE_IOERR_LOCK; + } + + if( nTries==1 ){ + conchModTime = buf.st_mtimespec; + unixSleep(0,500000); /* wait 0.5 sec and try the lock again*/ + continue; + } + + assert( nTries>1 ); + if( conchModTime.tv_sec != buf.st_mtimespec.tv_sec || + conchModTime.tv_nsec != buf.st_mtimespec.tv_nsec ){ + return SQLITE_BUSY; + } + + if( nTries==2 ){ + char tBuf[PROXY_MAXCONCHLEN]; + int len = osPread(conchFile->h, tBuf, PROXY_MAXCONCHLEN, 0); + if( len<0 ){ + storeLastErrno(pFile, errno); + return SQLITE_IOERR_LOCK; + } + if( len>PROXY_PATHINDEX && tBuf[0]==(char)PROXY_CONCHVERSION){ + /* don't break the lock if the host id doesn't match */ + if( 0!=memcmp(&tBuf[PROXY_HEADERLEN], myHostID, PROXY_HOSTIDLEN) ){ + return SQLITE_BUSY; + } + }else{ + /* don't break the lock on short read or a version mismatch */ + return SQLITE_BUSY; + } + unixSleep(0,10000000); /* wait 10 sec and try the lock again */ + continue; + } + + assert( nTries==3 ); + if( 0==proxyBreakConchLock(pFile, myHostID) ){ + rc = SQLITE_OK; + if( lockType==EXCLUSIVE_LOCK ){ + rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, SHARED_LOCK); + } + if( !rc ){ + rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, lockType); + } + } + } + } while( rc==SQLITE_BUSY && nTries<3 ); + + return rc; +} + +/* Takes the conch by taking a shared lock and read the contents conch, if +** lockPath is non-NULL, the host ID and lock file path must match. A NULL +** lockPath means that the lockPath in the conch file will be used if the +** host IDs match, or a new lock path will be generated automatically +** and written to the conch file. +*/ +static int proxyTakeConch(unixFile *pFile){ + proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; + + if( pCtx->conchHeld!=0 ){ + return SQLITE_OK; + }else{ + unixFile *conchFile = pCtx->conchFile; + uuid_t myHostID; + int pError = 0; + char readBuf[PROXY_MAXCONCHLEN]; + char lockPath[MAXPATHLEN]; + char *tempLockPath = NULL; + int rc = SQLITE_OK; + int createConch = 0; + int hostIdMatch = 0; + int readLen = 0; + int tryOldLockPath = 0; + int forceNewLockPath = 0; + + OSTRACE(("TAKECONCH %d for %s pid=%d\n", conchFile->h, + (pCtx->lockProxyPath ? pCtx->lockProxyPath : ":auto:"), + osGetpid(0))); + + rc = proxyGetHostID(myHostID, &pError); + if( (rc&0xff)==SQLITE_IOERR ){ + storeLastErrno(pFile, pError); + goto end_takeconch; + } + rc = proxyConchLock(pFile, myHostID, SHARED_LOCK); + if( rc!=SQLITE_OK ){ + goto end_takeconch; + } + /* read the existing conch file */ + readLen = seekAndRead((unixFile*)conchFile, 0, readBuf, PROXY_MAXCONCHLEN); + if( readLen<0 ){ + /* I/O error: lastErrno set by seekAndRead */ + storeLastErrno(pFile, conchFile->lastErrno); + rc = SQLITE_IOERR_READ; + goto end_takeconch; + }else if( readLen<=(PROXY_HEADERLEN+PROXY_HOSTIDLEN) || + readBuf[0]!=(char)PROXY_CONCHVERSION ){ + /* a short read or version format mismatch means we need to create a new + ** conch file. + */ + createConch = 1; + } + /* if the host id matches and the lock path already exists in the conch + ** we'll try to use the path there, if we can't open that path, we'll + ** retry with a new auto-generated path + */ + do { /* in case we need to try again for an :auto: named lock file */ + + if( !createConch && !forceNewLockPath ){ + hostIdMatch = !memcmp(&readBuf[PROXY_HEADERLEN], myHostID, + PROXY_HOSTIDLEN); + /* if the conch has data compare the contents */ + if( !pCtx->lockProxyPath ){ + /* for auto-named local lock file, just check the host ID and we'll + ** use the local lock file path that's already in there + */ + if( hostIdMatch ){ + size_t pathLen = (readLen - PROXY_PATHINDEX); + + if( pathLen>=MAXPATHLEN ){ + pathLen=MAXPATHLEN-1; + } + memcpy(lockPath, &readBuf[PROXY_PATHINDEX], pathLen); + lockPath[pathLen] = 0; + tempLockPath = lockPath; + tryOldLockPath = 1; + /* create a copy of the lock path if the conch is taken */ + goto end_takeconch; + } + }else if( hostIdMatch + && !strncmp(pCtx->lockProxyPath, &readBuf[PROXY_PATHINDEX], + readLen-PROXY_PATHINDEX) + ){ + /* conch host and lock path match */ + goto end_takeconch; + } + } + + /* if the conch isn't writable and doesn't match, we can't take it */ + if( (conchFile->openFlags&O_RDWR) == 0 ){ + rc = SQLITE_BUSY; + goto end_takeconch; + } + + /* either the conch didn't match or we need to create a new one */ + if( !pCtx->lockProxyPath ){ + proxyGetLockPath(pCtx->dbPath, lockPath, MAXPATHLEN); + tempLockPath = lockPath; + /* create a copy of the lock path _only_ if the conch is taken */ + } + + /* update conch with host and path (this will fail if other process + ** has a shared lock already), if the host id matches, use the big + ** stick. + */ + futimes(conchFile->h, NULL); + if( hostIdMatch && !createConch ){ + if( conchFile->pInode && conchFile->pInode->nShared>1 ){ + /* We are trying for an exclusive lock but another thread in this + ** same process is still holding a shared lock. */ + rc = SQLITE_BUSY; + } else { + rc = proxyConchLock(pFile, myHostID, EXCLUSIVE_LOCK); + } + }else{ + rc = proxyConchLock(pFile, myHostID, EXCLUSIVE_LOCK); + } + if( rc==SQLITE_OK ){ + char writeBuffer[PROXY_MAXCONCHLEN]; + int writeSize = 0; + + writeBuffer[0] = (char)PROXY_CONCHVERSION; + memcpy(&writeBuffer[PROXY_HEADERLEN], myHostID, PROXY_HOSTIDLEN); + if( pCtx->lockProxyPath!=NULL ){ + strlcpy(&writeBuffer[PROXY_PATHINDEX], pCtx->lockProxyPath, + MAXPATHLEN); + }else{ + strlcpy(&writeBuffer[PROXY_PATHINDEX], tempLockPath, MAXPATHLEN); + } + writeSize = PROXY_PATHINDEX + strlen(&writeBuffer[PROXY_PATHINDEX]); + robust_ftruncate(conchFile->h, writeSize); + rc = unixWrite((sqlite3_file *)conchFile, writeBuffer, writeSize, 0); + full_fsync(conchFile->h,0,0); + /* If we created a new conch file (not just updated the contents of a + ** valid conch file), try to match the permissions of the database + */ + if( rc==SQLITE_OK && createConch ){ + struct stat buf; + int err = osFstat(pFile->h, &buf); + if( err==0 ){ + mode_t cmode = buf.st_mode&(S_IRUSR|S_IWUSR | S_IRGRP|S_IWGRP | + S_IROTH|S_IWOTH); + /* try to match the database file R/W permissions, ignore failure */ +#ifndef SQLITE_PROXY_DEBUG + osFchmod(conchFile->h, cmode); +#else + do{ + rc = osFchmod(conchFile->h, cmode); + }while( rc==(-1) && errno==EINTR ); + if( rc!=0 ){ + int code = errno; + fprintf(stderr, "fchmod %o FAILED with %d %s\n", + cmode, code, strerror(code)); + } else { + fprintf(stderr, "fchmod %o SUCCEDED\n",cmode); + } + }else{ + int code = errno; + fprintf(stderr, "STAT FAILED[%d] with %d %s\n", + err, code, strerror(code)); +#endif + } + } + } + conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, SHARED_LOCK); + + end_takeconch: + OSTRACE(("TRANSPROXY: CLOSE %d\n", pFile->h)); + if( rc==SQLITE_OK && pFile->openFlags ){ + int fd; + if( pFile->h>=0 ){ + robust_close(pFile, pFile->h, __LINE__); + } + pFile->h = -1; + fd = robust_open(pCtx->dbPath, pFile->openFlags, 0); + OSTRACE(("TRANSPROXY: OPEN %d\n", fd)); + if( fd>=0 ){ + pFile->h = fd; + }else{ + rc=SQLITE_CANTOPEN_BKPT; /* SQLITE_BUSY? proxyTakeConch called + during locking */ + } + } + if( rc==SQLITE_OK && !pCtx->lockProxy ){ + char *path = tempLockPath ? tempLockPath : pCtx->lockProxyPath; + rc = proxyCreateUnixFile(path, &pCtx->lockProxy, 1); + if( rc!=SQLITE_OK && rc!=SQLITE_NOMEM && tryOldLockPath ){ + /* we couldn't create the proxy lock file with the old lock file path + ** so try again via auto-naming + */ + forceNewLockPath = 1; + tryOldLockPath = 0; + continue; /* go back to the do {} while start point, try again */ + } + } + if( rc==SQLITE_OK ){ + /* Need to make a copy of path if we extracted the value + ** from the conch file or the path was allocated on the stack + */ + if( tempLockPath ){ + pCtx->lockProxyPath = sqlite3DbStrDup(0, tempLockPath); + if( !pCtx->lockProxyPath ){ + rc = SQLITE_NOMEM_BKPT; + } + } + } + if( rc==SQLITE_OK ){ + pCtx->conchHeld = 1; + + if( pCtx->lockProxy->pMethod == &afpIoMethods ){ + afpLockingContext *afpCtx; + afpCtx = (afpLockingContext *)pCtx->lockProxy->lockingContext; + afpCtx->dbPath = pCtx->lockProxyPath; + } + } else { + conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, NO_LOCK); + } + OSTRACE(("TAKECONCH %d %s\n", conchFile->h, + rc==SQLITE_OK?"ok":"failed")); + return rc; + } while (1); /* in case we need to retry the :auto: lock file - + ** we should never get here except via the 'continue' call. */ + } +} + +/* +** If pFile holds a lock on a conch file, then release that lock. +*/ +static int proxyReleaseConch(unixFile *pFile){ + int rc = SQLITE_OK; /* Subroutine return code */ + proxyLockingContext *pCtx; /* The locking context for the proxy lock */ + unixFile *conchFile; /* Name of the conch file */ + + pCtx = (proxyLockingContext *)pFile->lockingContext; + conchFile = pCtx->conchFile; + OSTRACE(("RELEASECONCH %d for %s pid=%d\n", conchFile->h, + (pCtx->lockProxyPath ? pCtx->lockProxyPath : ":auto:"), + osGetpid(0))); + if( pCtx->conchHeld>0 ){ + rc = conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, NO_LOCK); + } + pCtx->conchHeld = 0; + OSTRACE(("RELEASECONCH %d %s\n", conchFile->h, + (rc==SQLITE_OK ? "ok" : "failed"))); + return rc; +} + +/* +** Given the name of a database file, compute the name of its conch file. +** Store the conch filename in memory obtained from sqlite3_malloc64(). +** Make *pConchPath point to the new name. Return SQLITE_OK on success +** or SQLITE_NOMEM if unable to obtain memory. +** +** The caller is responsible for ensuring that the allocated memory +** space is eventually freed. +** +** *pConchPath is set to NULL if a memory allocation error occurs. +*/ +static int proxyCreateConchPathname(char *dbPath, char **pConchPath){ + int i; /* Loop counter */ + int len = (int)strlen(dbPath); /* Length of database filename - dbPath */ + char *conchPath; /* buffer in which to construct conch name */ + + /* Allocate space for the conch filename and initialize the name to + ** the name of the original database file. */ + *pConchPath = conchPath = (char *)sqlite3_malloc64(len + 8); + if( conchPath==0 ){ + return SQLITE_NOMEM_BKPT; + } + memcpy(conchPath, dbPath, len+1); + + /* now insert a "." before the last / character */ + for( i=(len-1); i>=0; i-- ){ + if( conchPath[i]=='/' ){ + i++; + break; + } + } + conchPath[i]='.'; + while ( ilockingContext; + char *oldPath = pCtx->lockProxyPath; + int rc = SQLITE_OK; + + if( pFile->eFileLock!=NO_LOCK ){ + return SQLITE_BUSY; + } + + /* nothing to do if the path is NULL, :auto: or matches the existing path */ + if( !path || path[0]=='\0' || !strcmp(path, ":auto:") || + (oldPath && !strncmp(oldPath, path, MAXPATHLEN)) ){ + return SQLITE_OK; + }else{ + unixFile *lockProxy = pCtx->lockProxy; + pCtx->lockProxy=NULL; + pCtx->conchHeld = 0; + if( lockProxy!=NULL ){ + rc=lockProxy->pMethod->xClose((sqlite3_file *)lockProxy); + if( rc ) return rc; + sqlite3_free(lockProxy); + } + sqlite3_free(oldPath); + pCtx->lockProxyPath = sqlite3DbStrDup(0, path); + } + + return rc; +} + +/* +** pFile is a file that has been opened by a prior xOpen call. dbPath +** is a string buffer at least MAXPATHLEN+1 characters in size. +** +** This routine find the filename associated with pFile and writes it +** int dbPath. +*/ +static int proxyGetDbPathForUnixFile(unixFile *pFile, char *dbPath){ +#if defined(__APPLE__) + if( pFile->pMethod == &afpIoMethods ){ + /* afp style keeps a reference to the db path in the filePath field + ** of the struct */ + assert( (int)strlen((char*)pFile->lockingContext)<=MAXPATHLEN ); + strlcpy(dbPath, ((afpLockingContext *)pFile->lockingContext)->dbPath, + MAXPATHLEN); + } else +#endif + if( pFile->pMethod == &dotlockIoMethods ){ + /* dot lock style uses the locking context to store the dot lock + ** file path */ + int len = strlen((char *)pFile->lockingContext) - strlen(DOTLOCK_SUFFIX); + memcpy(dbPath, (char *)pFile->lockingContext, len + 1); + }else{ + /* all other styles use the locking context to store the db file path */ + assert( strlen((char*)pFile->lockingContext)<=MAXPATHLEN ); + strlcpy(dbPath, (char *)pFile->lockingContext, MAXPATHLEN); + } + return SQLITE_OK; +} + +/* +** Takes an already filled in unix file and alters it so all file locking +** will be performed on the local proxy lock file. The following fields +** are preserved in the locking context so that they can be restored and +** the unix structure properly cleaned up at close time: +** ->lockingContext +** ->pMethod +*/ +static int proxyTransformUnixFile(unixFile *pFile, const char *path) { + proxyLockingContext *pCtx; + char dbPath[MAXPATHLEN+1]; /* Name of the database file */ + char *lockPath=NULL; + int rc = SQLITE_OK; + + if( pFile->eFileLock!=NO_LOCK ){ + return SQLITE_BUSY; + } + proxyGetDbPathForUnixFile(pFile, dbPath); + if( !path || path[0]=='\0' || !strcmp(path, ":auto:") ){ + lockPath=NULL; + }else{ + lockPath=(char *)path; + } + + OSTRACE(("TRANSPROXY %d for %s pid=%d\n", pFile->h, + (lockPath ? lockPath : ":auto:"), osGetpid(0))); + + pCtx = sqlite3_malloc64( sizeof(*pCtx) ); + if( pCtx==0 ){ + return SQLITE_NOMEM_BKPT; + } + memset(pCtx, 0, sizeof(*pCtx)); + + rc = proxyCreateConchPathname(dbPath, &pCtx->conchFilePath); + if( rc==SQLITE_OK ){ + rc = proxyCreateUnixFile(pCtx->conchFilePath, &pCtx->conchFile, 0); + if( rc==SQLITE_CANTOPEN && ((pFile->openFlags&O_RDWR) == 0) ){ + /* if (a) the open flags are not O_RDWR, (b) the conch isn't there, and + ** (c) the file system is read-only, then enable no-locking access. + ** Ugh, since O_RDONLY==0x0000 we test for !O_RDWR since unixOpen asserts + ** that openFlags will have only one of O_RDONLY or O_RDWR. + */ + struct statfs fsInfo; + struct stat conchInfo; + int goLockless = 0; + + if( osStat(pCtx->conchFilePath, &conchInfo) == -1 ) { + int err = errno; + if( (err==ENOENT) && (statfs(dbPath, &fsInfo) != -1) ){ + goLockless = (fsInfo.f_flags&MNT_RDONLY) == MNT_RDONLY; + } + } + if( goLockless ){ + pCtx->conchHeld = -1; /* read only FS/ lockless */ + rc = SQLITE_OK; + } + } + } + if( rc==SQLITE_OK && lockPath ){ + pCtx->lockProxyPath = sqlite3DbStrDup(0, lockPath); + } + + if( rc==SQLITE_OK ){ + pCtx->dbPath = sqlite3DbStrDup(0, dbPath); + if( pCtx->dbPath==NULL ){ + rc = SQLITE_NOMEM_BKPT; + } + } + if( rc==SQLITE_OK ){ + /* all memory is allocated, proxys are created and assigned, + ** switch the locking context and pMethod then return. + */ + pCtx->oldLockingContext = pFile->lockingContext; + pFile->lockingContext = pCtx; + pCtx->pOldMethod = pFile->pMethod; + pFile->pMethod = &proxyIoMethods; + }else{ + if( pCtx->conchFile ){ + pCtx->conchFile->pMethod->xClose((sqlite3_file *)pCtx->conchFile); + sqlite3_free(pCtx->conchFile); + } + sqlite3DbFree(0, pCtx->lockProxyPath); + sqlite3_free(pCtx->conchFilePath); + sqlite3_free(pCtx); + } + OSTRACE(("TRANSPROXY %d %s\n", pFile->h, + (rc==SQLITE_OK ? "ok" : "failed"))); + return rc; +} + + +/* +** This routine handles sqlite3_file_control() calls that are specific +** to proxy locking. +*/ +static int proxyFileControl(sqlite3_file *id, int op, void *pArg){ + switch( op ){ + case SQLITE_FCNTL_GET_LOCKPROXYFILE: { + unixFile *pFile = (unixFile*)id; + if( pFile->pMethod == &proxyIoMethods ){ + proxyLockingContext *pCtx = (proxyLockingContext*)pFile->lockingContext; + proxyTakeConch(pFile); + if( pCtx->lockProxyPath ){ + *(const char **)pArg = pCtx->lockProxyPath; + }else{ + *(const char **)pArg = ":auto: (not held)"; + } + } else { + *(const char **)pArg = NULL; + } + return SQLITE_OK; + } + case SQLITE_FCNTL_SET_LOCKPROXYFILE: { + unixFile *pFile = (unixFile*)id; + int rc = SQLITE_OK; + int isProxyStyle = (pFile->pMethod == &proxyIoMethods); + if( pArg==NULL || (const char *)pArg==0 ){ + if( isProxyStyle ){ + /* turn off proxy locking - not supported. If support is added for + ** switching proxy locking mode off then it will need to fail if + ** the journal mode is WAL mode. + */ + rc = SQLITE_ERROR /*SQLITE_PROTOCOL? SQLITE_MISUSE?*/; + }else{ + /* turn off proxy locking - already off - NOOP */ + rc = SQLITE_OK; + } + }else{ + const char *proxyPath = (const char *)pArg; + if( isProxyStyle ){ + proxyLockingContext *pCtx = + (proxyLockingContext*)pFile->lockingContext; + if( !strcmp(pArg, ":auto:") + || (pCtx->lockProxyPath && + !strncmp(pCtx->lockProxyPath, proxyPath, MAXPATHLEN)) + ){ + rc = SQLITE_OK; + }else{ + rc = switchLockProxyPath(pFile, proxyPath); + } + }else{ + /* turn on proxy file locking */ + rc = proxyTransformUnixFile(pFile, proxyPath); + } + } + return rc; + } + default: { + assert( 0 ); /* The call assures that only valid opcodes are sent */ + } + } + /*NOTREACHED*/ assert(0); + return SQLITE_ERROR; +} + +/* +** Within this division (the proxying locking implementation) the procedures +** above this point are all utilities. The lock-related methods of the +** proxy-locking sqlite3_io_method object follow. +*/ + + +/* +** This routine checks if there is a RESERVED lock held on the specified +** file by this or any other process. If such a lock is held, set *pResOut +** to a non-zero value otherwise *pResOut is set to zero. The return value +** is set to SQLITE_OK unless an I/O error occurs during lock checking. +*/ +static int proxyCheckReservedLock(sqlite3_file *id, int *pResOut) { + unixFile *pFile = (unixFile*)id; + int rc = proxyTakeConch(pFile); + if( rc==SQLITE_OK ){ + proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; + if( pCtx->conchHeld>0 ){ + unixFile *proxy = pCtx->lockProxy; + return proxy->pMethod->xCheckReservedLock((sqlite3_file*)proxy, pResOut); + }else{ /* conchHeld < 0 is lockless */ + pResOut=0; + } + } + return rc; +} + +/* +** Lock the file with the lock specified by parameter eFileLock - one +** of the following: +** +** (1) SHARED_LOCK +** (2) RESERVED_LOCK +** (3) PENDING_LOCK +** (4) EXCLUSIVE_LOCK +** +** Sometimes when requesting one lock state, additional lock states +** are inserted in between. The locking might fail on one of the later +** transitions leaving the lock state different from what it started but +** still short of its goal. The following chart shows the allowed +** transitions and the inserted intermediate states: +** +** UNLOCKED -> SHARED +** SHARED -> RESERVED +** SHARED -> (PENDING) -> EXCLUSIVE +** RESERVED -> (PENDING) -> EXCLUSIVE +** PENDING -> EXCLUSIVE +** +** This routine will only increase a lock. Use the sqlite3OsUnlock() +** routine to lower a locking level. +*/ +static int proxyLock(sqlite3_file *id, int eFileLock) { + unixFile *pFile = (unixFile*)id; + int rc = proxyTakeConch(pFile); + if( rc==SQLITE_OK ){ + proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; + if( pCtx->conchHeld>0 ){ + unixFile *proxy = pCtx->lockProxy; + rc = proxy->pMethod->xLock((sqlite3_file*)proxy, eFileLock); + pFile->eFileLock = proxy->eFileLock; + }else{ + /* conchHeld < 0 is lockless */ + } + } + return rc; +} + + +/* +** Lower the locking level on file descriptor pFile to eFileLock. eFileLock +** must be either NO_LOCK or SHARED_LOCK. +** +** If the locking level of the file descriptor is already at or below +** the requested locking level, this routine is a no-op. +*/ +static int proxyUnlock(sqlite3_file *id, int eFileLock) { + unixFile *pFile = (unixFile*)id; + int rc = proxyTakeConch(pFile); + if( rc==SQLITE_OK ){ + proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; + if( pCtx->conchHeld>0 ){ + unixFile *proxy = pCtx->lockProxy; + rc = proxy->pMethod->xUnlock((sqlite3_file*)proxy, eFileLock); + pFile->eFileLock = proxy->eFileLock; + }else{ + /* conchHeld < 0 is lockless */ + } + } + return rc; +} + +/* +** Close a file that uses proxy locks. +*/ +static int proxyClose(sqlite3_file *id) { + if( ALWAYS(id) ){ + unixFile *pFile = (unixFile*)id; + proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; + unixFile *lockProxy = pCtx->lockProxy; + unixFile *conchFile = pCtx->conchFile; + int rc = SQLITE_OK; + + if( lockProxy ){ + rc = lockProxy->pMethod->xUnlock((sqlite3_file*)lockProxy, NO_LOCK); + if( rc ) return rc; + rc = lockProxy->pMethod->xClose((sqlite3_file*)lockProxy); + if( rc ) return rc; + sqlite3_free(lockProxy); + pCtx->lockProxy = 0; + } + if( conchFile ){ + if( pCtx->conchHeld ){ + rc = proxyReleaseConch(pFile); + if( rc ) return rc; + } + rc = conchFile->pMethod->xClose((sqlite3_file*)conchFile); + if( rc ) return rc; + sqlite3_free(conchFile); + } + sqlite3DbFree(0, pCtx->lockProxyPath); + sqlite3_free(pCtx->conchFilePath); + sqlite3DbFree(0, pCtx->dbPath); + /* restore the original locking context and pMethod then close it */ + pFile->lockingContext = pCtx->oldLockingContext; + pFile->pMethod = pCtx->pOldMethod; + sqlite3_free(pCtx); + return pFile->pMethod->xClose(id); + } + return SQLITE_OK; +} + + + +#endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */ +/* +** The proxy locking style is intended for use with AFP filesystems. +** And since AFP is only supported on MacOSX, the proxy locking is also +** restricted to MacOSX. +** +** +******************* End of the proxy lock implementation ********************** +******************************************************************************/ + +/* +** Initialize the operating system interface. +** +** This routine registers all VFS implementations for unix-like operating +** systems. This routine, and the sqlite3_os_end() routine that follows, +** should be the only routines in this file that are visible from other +** files. +** +** This routine is called once during SQLite initialization and by a +** single thread. The memory allocation and mutex subsystems have not +** necessarily been initialized when this routine is called, and so they +** should not be used. +*/ +SQLITE_API int sqlite3_os_init(void){ + /* + ** The following macro defines an initializer for an sqlite3_vfs object. + ** The name of the VFS is NAME. The pAppData is a pointer to a pointer + ** to the "finder" function. (pAppData is a pointer to a pointer because + ** silly C90 rules prohibit a void* from being cast to a function pointer + ** and so we have to go through the intermediate pointer to avoid problems + ** when compiling with -pedantic-errors on GCC.) + ** + ** The FINDER parameter to this macro is the name of the pointer to the + ** finder-function. The finder-function returns a pointer to the + ** sqlite_io_methods object that implements the desired locking + ** behaviors. See the division above that contains the IOMETHODS + ** macro for addition information on finder-functions. + ** + ** Most finders simply return a pointer to a fixed sqlite3_io_methods + ** object. But the "autolockIoFinder" available on MacOSX does a little + ** more than that; it looks at the filesystem type that hosts the + ** database file and tries to choose an locking method appropriate for + ** that filesystem time. + */ + #define UNIXVFS(VFSNAME, FINDER) { \ + 3, /* iVersion */ \ + sizeof(unixFile), /* szOsFile */ \ + MAX_PATHNAME, /* mxPathname */ \ + 0, /* pNext */ \ + VFSNAME, /* zName */ \ + (void*)&FINDER, /* pAppData */ \ + unixOpen, /* xOpen */ \ + unixDelete, /* xDelete */ \ + unixAccess, /* xAccess */ \ + unixFullPathname, /* xFullPathname */ \ + unixDlOpen, /* xDlOpen */ \ + unixDlError, /* xDlError */ \ + unixDlSym, /* xDlSym */ \ + unixDlClose, /* xDlClose */ \ + unixRandomness, /* xRandomness */ \ + unixSleep, /* xSleep */ \ + unixCurrentTime, /* xCurrentTime */ \ + unixGetLastError, /* xGetLastError */ \ + unixCurrentTimeInt64, /* xCurrentTimeInt64 */ \ + unixSetSystemCall, /* xSetSystemCall */ \ + unixGetSystemCall, /* xGetSystemCall */ \ + unixNextSystemCall, /* xNextSystemCall */ \ + } + + /* + ** All default VFSes for unix are contained in the following array. + ** + ** Note that the sqlite3_vfs.pNext field of the VFS object is modified + ** by the SQLite core when the VFS is registered. So the following + ** array cannot be const. + */ + static sqlite3_vfs aVfs[] = { +#if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) + UNIXVFS("unix", autolockIoFinder ), +#elif OS_VXWORKS + UNIXVFS("unix", vxworksIoFinder ), +#else + UNIXVFS("unix", posixIoFinder ), +#endif + UNIXVFS("unix-none", nolockIoFinder ), + UNIXVFS("unix-dotfile", dotlockIoFinder ), + UNIXVFS("unix-excl", posixIoFinder ), +#if OS_VXWORKS + UNIXVFS("unix-namedsem", semIoFinder ), +#endif +#if SQLITE_ENABLE_LOCKING_STYLE || OS_VXWORKS + UNIXVFS("unix-posix", posixIoFinder ), +#endif +#if SQLITE_ENABLE_LOCKING_STYLE + UNIXVFS("unix-flock", flockIoFinder ), +#endif +#if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) + UNIXVFS("unix-afp", afpIoFinder ), + UNIXVFS("unix-nfs", nfsIoFinder ), + UNIXVFS("unix-proxy", proxyIoFinder ), +#endif + }; + unsigned int i; /* Loop counter */ + + /* Double-check that the aSyscall[] array has been constructed + ** correctly. See ticket [bb3a86e890c8e96ab] */ + assert( ArraySize(aSyscall)==29 ); + + /* Register all VFSes defined in the aVfs[] array */ + for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){ +#ifdef SQLITE_DEFAULT_UNIX_VFS + sqlite3_vfs_register(&aVfs[i], + 0==strcmp(aVfs[i].zName,SQLITE_DEFAULT_UNIX_VFS)); +#else + sqlite3_vfs_register(&aVfs[i], i==0); +#endif + } +#ifdef SQLITE_OS_KV_OPTIONAL + sqlite3KvvfsInit(); +#endif + unixBigLock = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1); +#if OS_VXWORKS + vxworksMutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS2); +#endif + +#ifndef SQLITE_OMIT_WAL + /* Validate lock assumptions */ + assert( SQLITE_SHM_NLOCK==8 ); /* Number of available locks */ + assert( UNIX_SHM_BASE==120 ); /* Start of locking area */ + /* Locks: + ** WRITE UNIX_SHM_BASE 120 + ** CKPT UNIX_SHM_BASE+1 121 + ** RECOVER UNIX_SHM_BASE+2 122 + ** READ-0 UNIX_SHM_BASE+3 123 + ** READ-1 UNIX_SHM_BASE+4 124 + ** READ-2 UNIX_SHM_BASE+5 125 + ** READ-3 UNIX_SHM_BASE+6 126 + ** READ-4 UNIX_SHM_BASE+7 127 + ** DMS UNIX_SHM_BASE+8 128 + */ + assert( UNIX_SHM_DMS==128 ); /* Byte offset of the deadman-switch */ +#endif + + /* Initialize temp file dir array. */ + unixTempFileInit(); + + return SQLITE_OK; +} + +/* +** Shutdown the operating system interface. +** +** Some operating systems might need to do some cleanup in this routine, +** to release dynamically allocated objects. But not on unix. +** This routine is a no-op for unix. +*/ +SQLITE_API int sqlite3_os_end(void){ + unixBigLock = 0; +#if OS_VXWORKS + vxworksMutex = 0; +#endif + return SQLITE_OK; +} + +#endif /* SQLITE_OS_UNIX */ + +/************** End of os_unix.c *********************************************/ +/************** Begin file os_win.c ******************************************/ +/* +** 2004 May 22 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This file contains code that is specific to Windows. +*/ +/* #include "sqliteInt.h" */ +#if SQLITE_OS_WIN /* This file is used for Windows only */ + +/* +** Include code that is common to all os_*.c files +*/ +/* #include "os_common.h" */ + +/* +** Include the header file for the Windows VFS. +*/ +/* #include "os_win.h" */ + +/* +** Compiling and using WAL mode requires several APIs that are only +** available in Windows platforms based on the NT kernel. +*/ +#if !SQLITE_OS_WINNT && !defined(SQLITE_OMIT_WAL) +# error "WAL mode requires support from the Windows NT kernel, compile\ + with SQLITE_OMIT_WAL." +#endif + +#if !SQLITE_OS_WINNT && SQLITE_MAX_MMAP_SIZE>0 +# error "Memory mapped files require support from the Windows NT kernel,\ + compile with SQLITE_MAX_MMAP_SIZE=0." +#endif + +/* +** Are most of the Win32 ANSI APIs available (i.e. with certain exceptions +** based on the sub-platform)? +*/ +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT && !defined(SQLITE_WIN32_NO_ANSI) +# define SQLITE_WIN32_HAS_ANSI +#endif + +/* +** Are most of the Win32 Unicode APIs available (i.e. with certain exceptions +** based on the sub-platform)? +*/ +#if (SQLITE_OS_WINCE || SQLITE_OS_WINNT || SQLITE_OS_WINRT) && \ + !defined(SQLITE_WIN32_NO_WIDE) +# define SQLITE_WIN32_HAS_WIDE +#endif + +/* +** Make sure at least one set of Win32 APIs is available. +*/ +#if !defined(SQLITE_WIN32_HAS_ANSI) && !defined(SQLITE_WIN32_HAS_WIDE) +# error "At least one of SQLITE_WIN32_HAS_ANSI and SQLITE_WIN32_HAS_WIDE\ + must be defined." +#endif + +/* +** Define the required Windows SDK version constants if they are not +** already available. +*/ +#ifndef NTDDI_WIN8 +# define NTDDI_WIN8 0x06020000 +#endif + +#ifndef NTDDI_WINBLUE +# define NTDDI_WINBLUE 0x06030000 +#endif + +#ifndef NTDDI_WINTHRESHOLD +# define NTDDI_WINTHRESHOLD 0x06040000 +#endif + +/* +** Check to see if the GetVersionEx[AW] functions are deprecated on the +** target system. GetVersionEx was first deprecated in Win8.1. +*/ +#ifndef SQLITE_WIN32_GETVERSIONEX +# if defined(NTDDI_VERSION) && NTDDI_VERSION >= NTDDI_WINBLUE +# define SQLITE_WIN32_GETVERSIONEX 0 /* GetVersionEx() is deprecated */ +# else +# define SQLITE_WIN32_GETVERSIONEX 1 /* GetVersionEx() is current */ +# endif +#endif + +/* +** Check to see if the CreateFileMappingA function is supported on the +** target system. It is unavailable when using "mincore.lib" on Win10. +** When compiling for Windows 10, always assume "mincore.lib" is in use. +*/ +#ifndef SQLITE_WIN32_CREATEFILEMAPPINGA +# if defined(NTDDI_VERSION) && NTDDI_VERSION >= NTDDI_WINTHRESHOLD +# define SQLITE_WIN32_CREATEFILEMAPPINGA 0 +# else +# define SQLITE_WIN32_CREATEFILEMAPPINGA 1 +# endif +#endif + +/* +** This constant should already be defined (in the "WinDef.h" SDK file). +*/ +#ifndef MAX_PATH +# define MAX_PATH (260) +#endif + +/* +** Maximum pathname length (in chars) for Win32. This should normally be +** MAX_PATH. +*/ +#ifndef SQLITE_WIN32_MAX_PATH_CHARS +# define SQLITE_WIN32_MAX_PATH_CHARS (MAX_PATH) +#endif + +/* +** This constant should already be defined (in the "WinNT.h" SDK file). +*/ +#ifndef UNICODE_STRING_MAX_CHARS +# define UNICODE_STRING_MAX_CHARS (32767) +#endif + +/* +** Maximum pathname length (in chars) for WinNT. This should normally be +** UNICODE_STRING_MAX_CHARS. +*/ +#ifndef SQLITE_WINNT_MAX_PATH_CHARS +# define SQLITE_WINNT_MAX_PATH_CHARS (UNICODE_STRING_MAX_CHARS) +#endif + +/* +** Maximum pathname length (in bytes) for Win32. The MAX_PATH macro is in +** characters, so we allocate 4 bytes per character assuming worst-case of +** 4-bytes-per-character for UTF8. +*/ +#ifndef SQLITE_WIN32_MAX_PATH_BYTES +# define SQLITE_WIN32_MAX_PATH_BYTES (SQLITE_WIN32_MAX_PATH_CHARS*4) +#endif + +/* +** Maximum pathname length (in bytes) for WinNT. This should normally be +** UNICODE_STRING_MAX_CHARS * sizeof(WCHAR). +*/ +#ifndef SQLITE_WINNT_MAX_PATH_BYTES +# define SQLITE_WINNT_MAX_PATH_BYTES \ + (sizeof(WCHAR) * SQLITE_WINNT_MAX_PATH_CHARS) +#endif + +/* +** Maximum error message length (in chars) for WinRT. +*/ +#ifndef SQLITE_WIN32_MAX_ERRMSG_CHARS +# define SQLITE_WIN32_MAX_ERRMSG_CHARS (1024) +#endif + +/* +** Returns non-zero if the character should be treated as a directory +** separator. +*/ +#ifndef winIsDirSep +# define winIsDirSep(a) (((a) == '/') || ((a) == '\\')) +#endif + +/* +** This macro is used when a local variable is set to a value that is +** [sometimes] not used by the code (e.g. via conditional compilation). +*/ +#ifndef UNUSED_VARIABLE_VALUE +# define UNUSED_VARIABLE_VALUE(x) (void)(x) +#endif + +/* +** Returns the character that should be used as the directory separator. +*/ +#ifndef winGetDirSep +# define winGetDirSep() '\\' +#endif + +/* +** Do we need to manually define the Win32 file mapping APIs for use with WAL +** mode or memory mapped files (e.g. these APIs are available in the Windows +** CE SDK; however, they are not present in the header file)? +*/ +#if SQLITE_WIN32_FILEMAPPING_API && \ + (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) +/* +** Two of the file mapping APIs are different under WinRT. Figure out which +** set we need. +*/ +#if SQLITE_OS_WINRT +WINBASEAPI HANDLE WINAPI CreateFileMappingFromApp(HANDLE, \ + LPSECURITY_ATTRIBUTES, ULONG, ULONG64, LPCWSTR); + +WINBASEAPI LPVOID WINAPI MapViewOfFileFromApp(HANDLE, ULONG, ULONG64, SIZE_T); +#else +#if defined(SQLITE_WIN32_HAS_ANSI) +WINBASEAPI HANDLE WINAPI CreateFileMappingA(HANDLE, LPSECURITY_ATTRIBUTES, \ + DWORD, DWORD, DWORD, LPCSTR); +#endif /* defined(SQLITE_WIN32_HAS_ANSI) */ + +#if defined(SQLITE_WIN32_HAS_WIDE) +WINBASEAPI HANDLE WINAPI CreateFileMappingW(HANDLE, LPSECURITY_ATTRIBUTES, \ + DWORD, DWORD, DWORD, LPCWSTR); +#endif /* defined(SQLITE_WIN32_HAS_WIDE) */ + +WINBASEAPI LPVOID WINAPI MapViewOfFile(HANDLE, DWORD, DWORD, DWORD, SIZE_T); +#endif /* SQLITE_OS_WINRT */ + +/* +** These file mapping APIs are common to both Win32 and WinRT. +*/ + +WINBASEAPI BOOL WINAPI FlushViewOfFile(LPCVOID, SIZE_T); +WINBASEAPI BOOL WINAPI UnmapViewOfFile(LPCVOID); +#endif /* SQLITE_WIN32_FILEMAPPING_API */ + +/* +** Some Microsoft compilers lack this definition. +*/ +#ifndef INVALID_FILE_ATTRIBUTES +# define INVALID_FILE_ATTRIBUTES ((DWORD)-1) +#endif + +#ifndef FILE_FLAG_MASK +# define FILE_FLAG_MASK (0xFF3C0000) +#endif + +#ifndef FILE_ATTRIBUTE_MASK +# define FILE_ATTRIBUTE_MASK (0x0003FFF7) +#endif + +#ifndef SQLITE_OMIT_WAL +/* Forward references to structures used for WAL */ +typedef struct winShm winShm; /* A connection to shared-memory */ +typedef struct winShmNode winShmNode; /* A region of shared-memory */ +#endif + +/* +** WinCE lacks native support for file locking so we have to fake it +** with some code of our own. +*/ +#if SQLITE_OS_WINCE +typedef struct winceLock { + int nReaders; /* Number of reader locks obtained */ + BOOL bPending; /* Indicates a pending lock has been obtained */ + BOOL bReserved; /* Indicates a reserved lock has been obtained */ + BOOL bExclusive; /* Indicates an exclusive lock has been obtained */ +} winceLock; +#endif + +/* +** The winFile structure is a subclass of sqlite3_file* specific to the win32 +** portability layer. +*/ +typedef struct winFile winFile; +struct winFile { + const sqlite3_io_methods *pMethod; /*** Must be first ***/ + sqlite3_vfs *pVfs; /* The VFS used to open this file */ + HANDLE h; /* Handle for accessing the file */ + u8 locktype; /* Type of lock currently held on this file */ + short sharedLockByte; /* Randomly chosen byte used as a shared lock */ + u8 ctrlFlags; /* Flags. See WINFILE_* below */ + DWORD lastErrno; /* The Windows errno from the last I/O error */ +#ifndef SQLITE_OMIT_WAL + winShm *pShm; /* Instance of shared memory on this file */ +#endif + const char *zPath; /* Full pathname of this file */ + int szChunk; /* Chunk size configured by FCNTL_CHUNK_SIZE */ +#if SQLITE_OS_WINCE + LPWSTR zDeleteOnClose; /* Name of file to delete when closing */ + HANDLE hMutex; /* Mutex used to control access to shared lock */ + HANDLE hShared; /* Shared memory segment used for locking */ + winceLock local; /* Locks obtained by this instance of winFile */ + winceLock *shared; /* Global shared lock memory for the file */ +#endif +#if SQLITE_MAX_MMAP_SIZE>0 + int nFetchOut; /* Number of outstanding xFetch references */ + HANDLE hMap; /* Handle for accessing memory mapping */ + void *pMapRegion; /* Area memory mapped */ + sqlite3_int64 mmapSize; /* Size of mapped region */ + sqlite3_int64 mmapSizeMax; /* Configured FCNTL_MMAP_SIZE value */ +#endif +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + DWORD iBusyTimeout; /* Wait this many millisec on locks */ + int bBlockOnConnect; +#endif +}; + +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT +# define winFileBusyTimeout(pDbFd) pDbFd->iBusyTimeout +#else +# define winFileBusyTimeout(pDbFd) 0 +#endif + +/* +** The winVfsAppData structure is used for the pAppData member for all of the +** Win32 VFS variants. +*/ +typedef struct winVfsAppData winVfsAppData; +struct winVfsAppData { + const sqlite3_io_methods *pMethod; /* The file I/O methods to use. */ + void *pAppData; /* The extra pAppData, if any. */ + BOOL bNoLock; /* Non-zero if locking is disabled. */ +}; + +/* +** Allowed values for winFile.ctrlFlags +*/ +#define WINFILE_RDONLY 0x02 /* Connection is read only */ +#define WINFILE_PERSIST_WAL 0x04 /* Persistent WAL mode */ +#define WINFILE_PSOW 0x10 /* SQLITE_IOCAP_POWERSAFE_OVERWRITE */ + +/* + * The size of the buffer used by sqlite3_win32_write_debug(). + */ +#ifndef SQLITE_WIN32_DBG_BUF_SIZE +# define SQLITE_WIN32_DBG_BUF_SIZE ((int)(4096-sizeof(DWORD))) +#endif + +/* + * If compiled with SQLITE_WIN32_MALLOC on Windows, we will use the + * various Win32 API heap functions instead of our own. + */ +#ifdef SQLITE_WIN32_MALLOC + +/* + * If this is non-zero, an isolated heap will be created by the native Win32 + * allocator subsystem; otherwise, the default process heap will be used. This + * setting has no effect when compiling for WinRT. By default, this is enabled + * and an isolated heap will be created to store all allocated data. + * + ****************************************************************************** + * WARNING: It is important to note that when this setting is non-zero and the + * winMemShutdown function is called (e.g. by the sqlite3_shutdown + * function), all data that was allocated using the isolated heap will + * be freed immediately and any attempt to access any of that freed + * data will almost certainly result in an immediate access violation. + ****************************************************************************** + */ +#ifndef SQLITE_WIN32_HEAP_CREATE +# define SQLITE_WIN32_HEAP_CREATE (TRUE) +#endif + +/* + * This is the maximum possible initial size of the Win32-specific heap, in + * bytes. + */ +#ifndef SQLITE_WIN32_HEAP_MAX_INIT_SIZE +# define SQLITE_WIN32_HEAP_MAX_INIT_SIZE (4294967295U) +#endif + +/* + * This is the extra space for the initial size of the Win32-specific heap, + * in bytes. This value may be zero. + */ +#ifndef SQLITE_WIN32_HEAP_INIT_EXTRA +# define SQLITE_WIN32_HEAP_INIT_EXTRA (4194304) +#endif + +/* + * Calculate the maximum legal cache size, in pages, based on the maximum + * possible initial heap size and the default page size, setting aside the + * needed extra space. + */ +#ifndef SQLITE_WIN32_MAX_CACHE_SIZE +# define SQLITE_WIN32_MAX_CACHE_SIZE (((SQLITE_WIN32_HEAP_MAX_INIT_SIZE) - \ + (SQLITE_WIN32_HEAP_INIT_EXTRA)) / \ + (SQLITE_DEFAULT_PAGE_SIZE)) +#endif + +/* + * This is cache size used in the calculation of the initial size of the + * Win32-specific heap. It cannot be negative. + */ +#ifndef SQLITE_WIN32_CACHE_SIZE +# if SQLITE_DEFAULT_CACHE_SIZE>=0 +# define SQLITE_WIN32_CACHE_SIZE (SQLITE_DEFAULT_CACHE_SIZE) +# else +# define SQLITE_WIN32_CACHE_SIZE (-(SQLITE_DEFAULT_CACHE_SIZE)) +# endif +#endif + +/* + * Make sure that the calculated cache size, in pages, cannot cause the + * initial size of the Win32-specific heap to exceed the maximum amount + * of memory that can be specified in the call to HeapCreate. + */ +#if SQLITE_WIN32_CACHE_SIZE>SQLITE_WIN32_MAX_CACHE_SIZE +# undef SQLITE_WIN32_CACHE_SIZE +# define SQLITE_WIN32_CACHE_SIZE (2000) +#endif + +/* + * The initial size of the Win32-specific heap. This value may be zero. + */ +#ifndef SQLITE_WIN32_HEAP_INIT_SIZE +# define SQLITE_WIN32_HEAP_INIT_SIZE ((SQLITE_WIN32_CACHE_SIZE) * \ + (SQLITE_DEFAULT_PAGE_SIZE) + \ + (SQLITE_WIN32_HEAP_INIT_EXTRA)) +#endif + +/* + * The maximum size of the Win32-specific heap. This value may be zero. + */ +#ifndef SQLITE_WIN32_HEAP_MAX_SIZE +# define SQLITE_WIN32_HEAP_MAX_SIZE (0) +#endif + +/* + * The extra flags to use in calls to the Win32 heap APIs. This value may be + * zero for the default behavior. + */ +#ifndef SQLITE_WIN32_HEAP_FLAGS +# define SQLITE_WIN32_HEAP_FLAGS (0) +#endif + + +/* +** The winMemData structure stores information required by the Win32-specific +** sqlite3_mem_methods implementation. +*/ +typedef struct winMemData winMemData; +struct winMemData { +#ifndef NDEBUG + u32 magic1; /* Magic number to detect structure corruption. */ +#endif + HANDLE hHeap; /* The handle to our heap. */ + BOOL bOwned; /* Do we own the heap (i.e. destroy it on shutdown)? */ +#ifndef NDEBUG + u32 magic2; /* Magic number to detect structure corruption. */ +#endif +}; + +#ifndef NDEBUG +#define WINMEM_MAGIC1 0x42b2830b +#define WINMEM_MAGIC2 0xbd4d7cf4 +#endif + +static struct winMemData win_mem_data = { +#ifndef NDEBUG + WINMEM_MAGIC1, +#endif + NULL, FALSE +#ifndef NDEBUG + ,WINMEM_MAGIC2 +#endif +}; + +#ifndef NDEBUG +#define winMemAssertMagic1() assert( win_mem_data.magic1==WINMEM_MAGIC1 ) +#define winMemAssertMagic2() assert( win_mem_data.magic2==WINMEM_MAGIC2 ) +#define winMemAssertMagic() winMemAssertMagic1(); winMemAssertMagic2(); +#else +#define winMemAssertMagic() +#endif + +#define winMemGetDataPtr() &win_mem_data +#define winMemGetHeap() win_mem_data.hHeap +#define winMemGetOwned() win_mem_data.bOwned + +static void *winMemMalloc(int nBytes); +static void winMemFree(void *pPrior); +static void *winMemRealloc(void *pPrior, int nBytes); +static int winMemSize(void *p); +static int winMemRoundup(int n); +static int winMemInit(void *pAppData); +static void winMemShutdown(void *pAppData); + +SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetWin32(void); +#endif /* SQLITE_WIN32_MALLOC */ + +/* +** The following variable is (normally) set once and never changes +** thereafter. It records whether the operating system is Win9x +** or WinNT. +** +** 0: Operating system unknown. +** 1: Operating system is Win9x. +** 2: Operating system is WinNT. +** +** In order to facilitate testing on a WinNT system, the test fixture +** can manually set this value to 1 to emulate Win98 behavior. +*/ +#ifdef SQLITE_TEST +SQLITE_API LONG SQLITE_WIN32_VOLATILE sqlite3_os_type = 0; +#else +static LONG SQLITE_WIN32_VOLATILE sqlite3_os_type = 0; +#endif + +#ifndef SYSCALL +# define SYSCALL sqlite3_syscall_ptr +#endif + +/* +** This function is not available on Windows CE or WinRT. + */ + +#if SQLITE_OS_WINCE || SQLITE_OS_WINRT +# define osAreFileApisANSI() 1 +#endif + +/* +** Many system calls are accessed through pointer-to-functions so that +** they may be overridden at runtime to facilitate fault injection during +** testing and sandboxing. The following array holds the names and pointers +** to all overrideable system calls. +*/ +static struct win_syscall { + const char *zName; /* Name of the system call */ + sqlite3_syscall_ptr pCurrent; /* Current value of the system call */ + sqlite3_syscall_ptr pDefault; /* Default value */ +} aSyscall[] = { +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT + { "AreFileApisANSI", (SYSCALL)AreFileApisANSI, 0 }, +#else + { "AreFileApisANSI", (SYSCALL)0, 0 }, +#endif + +#ifndef osAreFileApisANSI +#define osAreFileApisANSI ((BOOL(WINAPI*)(VOID))aSyscall[0].pCurrent) +#endif + +#if SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_WIDE) + { "CharLowerW", (SYSCALL)CharLowerW, 0 }, +#else + { "CharLowerW", (SYSCALL)0, 0 }, +#endif + +#define osCharLowerW ((LPWSTR(WINAPI*)(LPWSTR))aSyscall[1].pCurrent) + +#if SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_WIDE) + { "CharUpperW", (SYSCALL)CharUpperW, 0 }, +#else + { "CharUpperW", (SYSCALL)0, 0 }, +#endif + +#define osCharUpperW ((LPWSTR(WINAPI*)(LPWSTR))aSyscall[2].pCurrent) + + { "CloseHandle", (SYSCALL)CloseHandle, 0 }, + +#define osCloseHandle ((BOOL(WINAPI*)(HANDLE))aSyscall[3].pCurrent) + +#if defined(SQLITE_WIN32_HAS_ANSI) + { "CreateFileA", (SYSCALL)CreateFileA, 0 }, +#else + { "CreateFileA", (SYSCALL)0, 0 }, +#endif + +#define osCreateFileA ((HANDLE(WINAPI*)(LPCSTR,DWORD,DWORD, \ + LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE))aSyscall[4].pCurrent) + +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) + { "CreateFileW", (SYSCALL)CreateFileW, 0 }, +#else + { "CreateFileW", (SYSCALL)0, 0 }, +#endif + +#define osCreateFileW ((HANDLE(WINAPI*)(LPCWSTR,DWORD,DWORD, \ + LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE))aSyscall[5].pCurrent) + +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_ANSI) && \ + (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) && \ + SQLITE_WIN32_CREATEFILEMAPPINGA + { "CreateFileMappingA", (SYSCALL)CreateFileMappingA, 0 }, +#else + { "CreateFileMappingA", (SYSCALL)0, 0 }, +#endif + +#define osCreateFileMappingA ((HANDLE(WINAPI*)(HANDLE,LPSECURITY_ATTRIBUTES, \ + DWORD,DWORD,DWORD,LPCSTR))aSyscall[6].pCurrent) + +#if SQLITE_OS_WINCE || (!SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) && \ + (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0)) + { "CreateFileMappingW", (SYSCALL)CreateFileMappingW, 0 }, +#else + { "CreateFileMappingW", (SYSCALL)0, 0 }, +#endif + +#define osCreateFileMappingW ((HANDLE(WINAPI*)(HANDLE,LPSECURITY_ATTRIBUTES, \ + DWORD,DWORD,DWORD,LPCWSTR))aSyscall[7].pCurrent) + +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) + { "CreateMutexW", (SYSCALL)CreateMutexW, 0 }, +#else + { "CreateMutexW", (SYSCALL)0, 0 }, +#endif + +#define osCreateMutexW ((HANDLE(WINAPI*)(LPSECURITY_ATTRIBUTES,BOOL, \ + LPCWSTR))aSyscall[8].pCurrent) + +#if defined(SQLITE_WIN32_HAS_ANSI) + { "DeleteFileA", (SYSCALL)DeleteFileA, 0 }, +#else + { "DeleteFileA", (SYSCALL)0, 0 }, +#endif + +#define osDeleteFileA ((BOOL(WINAPI*)(LPCSTR))aSyscall[9].pCurrent) + +#if defined(SQLITE_WIN32_HAS_WIDE) + { "DeleteFileW", (SYSCALL)DeleteFileW, 0 }, +#else + { "DeleteFileW", (SYSCALL)0, 0 }, +#endif + +#define osDeleteFileW ((BOOL(WINAPI*)(LPCWSTR))aSyscall[10].pCurrent) + +#if SQLITE_OS_WINCE + { "FileTimeToLocalFileTime", (SYSCALL)FileTimeToLocalFileTime, 0 }, +#else + { "FileTimeToLocalFileTime", (SYSCALL)0, 0 }, +#endif + +#define osFileTimeToLocalFileTime ((BOOL(WINAPI*)(const FILETIME*, \ + LPFILETIME))aSyscall[11].pCurrent) + +#if SQLITE_OS_WINCE + { "FileTimeToSystemTime", (SYSCALL)FileTimeToSystemTime, 0 }, +#else + { "FileTimeToSystemTime", (SYSCALL)0, 0 }, +#endif + +#define osFileTimeToSystemTime ((BOOL(WINAPI*)(const FILETIME*, \ + LPSYSTEMTIME))aSyscall[12].pCurrent) + + { "FlushFileBuffers", (SYSCALL)FlushFileBuffers, 0 }, + +#define osFlushFileBuffers ((BOOL(WINAPI*)(HANDLE))aSyscall[13].pCurrent) + +#if defined(SQLITE_WIN32_HAS_ANSI) + { "FormatMessageA", (SYSCALL)FormatMessageA, 0 }, +#else + { "FormatMessageA", (SYSCALL)0, 0 }, +#endif + +#define osFormatMessageA ((DWORD(WINAPI*)(DWORD,LPCVOID,DWORD,DWORD,LPSTR, \ + DWORD,va_list*))aSyscall[14].pCurrent) + +#if defined(SQLITE_WIN32_HAS_WIDE) + { "FormatMessageW", (SYSCALL)FormatMessageW, 0 }, +#else + { "FormatMessageW", (SYSCALL)0, 0 }, +#endif + +#define osFormatMessageW ((DWORD(WINAPI*)(DWORD,LPCVOID,DWORD,DWORD,LPWSTR, \ + DWORD,va_list*))aSyscall[15].pCurrent) + +#if !defined(SQLITE_OMIT_LOAD_EXTENSION) + { "FreeLibrary", (SYSCALL)FreeLibrary, 0 }, +#else + { "FreeLibrary", (SYSCALL)0, 0 }, +#endif + +#define osFreeLibrary ((BOOL(WINAPI*)(HMODULE))aSyscall[16].pCurrent) + + { "GetCurrentProcessId", (SYSCALL)GetCurrentProcessId, 0 }, + +#define osGetCurrentProcessId ((DWORD(WINAPI*)(VOID))aSyscall[17].pCurrent) + +#if !SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_ANSI) + { "GetDiskFreeSpaceA", (SYSCALL)GetDiskFreeSpaceA, 0 }, +#else + { "GetDiskFreeSpaceA", (SYSCALL)0, 0 }, +#endif + +#define osGetDiskFreeSpaceA ((BOOL(WINAPI*)(LPCSTR,LPDWORD,LPDWORD,LPDWORD, \ + LPDWORD))aSyscall[18].pCurrent) + +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) + { "GetDiskFreeSpaceW", (SYSCALL)GetDiskFreeSpaceW, 0 }, +#else + { "GetDiskFreeSpaceW", (SYSCALL)0, 0 }, +#endif + +#define osGetDiskFreeSpaceW ((BOOL(WINAPI*)(LPCWSTR,LPDWORD,LPDWORD,LPDWORD, \ + LPDWORD))aSyscall[19].pCurrent) + +#if defined(SQLITE_WIN32_HAS_ANSI) + { "GetFileAttributesA", (SYSCALL)GetFileAttributesA, 0 }, +#else + { "GetFileAttributesA", (SYSCALL)0, 0 }, +#endif + +#define osGetFileAttributesA ((DWORD(WINAPI*)(LPCSTR))aSyscall[20].pCurrent) + +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) + { "GetFileAttributesW", (SYSCALL)GetFileAttributesW, 0 }, +#else + { "GetFileAttributesW", (SYSCALL)0, 0 }, +#endif + +#define osGetFileAttributesW ((DWORD(WINAPI*)(LPCWSTR))aSyscall[21].pCurrent) + +#if defined(SQLITE_WIN32_HAS_WIDE) + { "GetFileAttributesExW", (SYSCALL)GetFileAttributesExW, 0 }, +#else + { "GetFileAttributesExW", (SYSCALL)0, 0 }, +#endif + +#define osGetFileAttributesExW ((BOOL(WINAPI*)(LPCWSTR,GET_FILEEX_INFO_LEVELS, \ + LPVOID))aSyscall[22].pCurrent) + +#if !SQLITE_OS_WINRT + { "GetFileSize", (SYSCALL)GetFileSize, 0 }, +#else + { "GetFileSize", (SYSCALL)0, 0 }, +#endif + +#define osGetFileSize ((DWORD(WINAPI*)(HANDLE,LPDWORD))aSyscall[23].pCurrent) + +#if !SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_ANSI) + { "GetFullPathNameA", (SYSCALL)GetFullPathNameA, 0 }, +#else + { "GetFullPathNameA", (SYSCALL)0, 0 }, +#endif + +#define osGetFullPathNameA ((DWORD(WINAPI*)(LPCSTR,DWORD,LPSTR, \ + LPSTR*))aSyscall[24].pCurrent) + +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) + { "GetFullPathNameW", (SYSCALL)GetFullPathNameW, 0 }, +#else + { "GetFullPathNameW", (SYSCALL)0, 0 }, +#endif + +#define osGetFullPathNameW ((DWORD(WINAPI*)(LPCWSTR,DWORD,LPWSTR, \ + LPWSTR*))aSyscall[25].pCurrent) + +/* +** For GetLastError(), MSDN says: +** +** Minimum supported client: Windows XP [desktop apps | UWP apps] +** Minimum supported server: Windows Server 2003 [desktop apps | UWP apps] +*/ + { "GetLastError", (SYSCALL)GetLastError, 0 }, + +#define osGetLastError ((DWORD(WINAPI*)(VOID))aSyscall[26].pCurrent) + +#if !defined(SQLITE_OMIT_LOAD_EXTENSION) +#if SQLITE_OS_WINCE + /* The GetProcAddressA() routine is only available on Windows CE. */ + { "GetProcAddressA", (SYSCALL)GetProcAddressA, 0 }, +#else + /* All other Windows platforms expect GetProcAddress() to take + ** an ANSI string regardless of the _UNICODE setting */ + { "GetProcAddressA", (SYSCALL)GetProcAddress, 0 }, +#endif +#else + { "GetProcAddressA", (SYSCALL)0, 0 }, +#endif + +#define osGetProcAddressA ((FARPROC(WINAPI*)(HMODULE, \ + LPCSTR))aSyscall[27].pCurrent) + +#if !SQLITE_OS_WINRT + { "GetSystemInfo", (SYSCALL)GetSystemInfo, 0 }, +#else + { "GetSystemInfo", (SYSCALL)0, 0 }, +#endif + +#define osGetSystemInfo ((VOID(WINAPI*)(LPSYSTEM_INFO))aSyscall[28].pCurrent) + + { "GetSystemTime", (SYSCALL)GetSystemTime, 0 }, + +#define osGetSystemTime ((VOID(WINAPI*)(LPSYSTEMTIME))aSyscall[29].pCurrent) + +#if !SQLITE_OS_WINCE + { "GetSystemTimeAsFileTime", (SYSCALL)GetSystemTimeAsFileTime, 0 }, +#else + { "GetSystemTimeAsFileTime", (SYSCALL)0, 0 }, +#endif + +#define osGetSystemTimeAsFileTime ((VOID(WINAPI*)( \ + LPFILETIME))aSyscall[30].pCurrent) + +#if defined(SQLITE_WIN32_HAS_ANSI) + { "GetTempPathA", (SYSCALL)GetTempPathA, 0 }, +#else + { "GetTempPathA", (SYSCALL)0, 0 }, +#endif + +#define osGetTempPathA ((DWORD(WINAPI*)(DWORD,LPSTR))aSyscall[31].pCurrent) + +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) + { "GetTempPathW", (SYSCALL)GetTempPathW, 0 }, +#else + { "GetTempPathW", (SYSCALL)0, 0 }, +#endif + +#define osGetTempPathW ((DWORD(WINAPI*)(DWORD,LPWSTR))aSyscall[32].pCurrent) + +#if !SQLITE_OS_WINRT + { "GetTickCount", (SYSCALL)GetTickCount, 0 }, +#else + { "GetTickCount", (SYSCALL)0, 0 }, +#endif + +#define osGetTickCount ((DWORD(WINAPI*)(VOID))aSyscall[33].pCurrent) + +#if defined(SQLITE_WIN32_HAS_ANSI) && SQLITE_WIN32_GETVERSIONEX + { "GetVersionExA", (SYSCALL)GetVersionExA, 0 }, +#else + { "GetVersionExA", (SYSCALL)0, 0 }, +#endif + +#define osGetVersionExA ((BOOL(WINAPI*)( \ + LPOSVERSIONINFOA))aSyscall[34].pCurrent) + +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) && \ + SQLITE_WIN32_GETVERSIONEX + { "GetVersionExW", (SYSCALL)GetVersionExW, 0 }, +#else + { "GetVersionExW", (SYSCALL)0, 0 }, +#endif + +#define osGetVersionExW ((BOOL(WINAPI*)( \ + LPOSVERSIONINFOW))aSyscall[35].pCurrent) + + { "HeapAlloc", (SYSCALL)HeapAlloc, 0 }, + +#define osHeapAlloc ((LPVOID(WINAPI*)(HANDLE,DWORD, \ + SIZE_T))aSyscall[36].pCurrent) + +#if !SQLITE_OS_WINRT + { "HeapCreate", (SYSCALL)HeapCreate, 0 }, +#else + { "HeapCreate", (SYSCALL)0, 0 }, +#endif + +#define osHeapCreate ((HANDLE(WINAPI*)(DWORD,SIZE_T, \ + SIZE_T))aSyscall[37].pCurrent) + +#if !SQLITE_OS_WINRT + { "HeapDestroy", (SYSCALL)HeapDestroy, 0 }, +#else + { "HeapDestroy", (SYSCALL)0, 0 }, +#endif + +#define osHeapDestroy ((BOOL(WINAPI*)(HANDLE))aSyscall[38].pCurrent) + + { "HeapFree", (SYSCALL)HeapFree, 0 }, + +#define osHeapFree ((BOOL(WINAPI*)(HANDLE,DWORD,LPVOID))aSyscall[39].pCurrent) + + { "HeapReAlloc", (SYSCALL)HeapReAlloc, 0 }, + +#define osHeapReAlloc ((LPVOID(WINAPI*)(HANDLE,DWORD,LPVOID, \ + SIZE_T))aSyscall[40].pCurrent) + + { "HeapSize", (SYSCALL)HeapSize, 0 }, + +#define osHeapSize ((SIZE_T(WINAPI*)(HANDLE,DWORD, \ + LPCVOID))aSyscall[41].pCurrent) + +#if !SQLITE_OS_WINRT + { "HeapValidate", (SYSCALL)HeapValidate, 0 }, +#else + { "HeapValidate", (SYSCALL)0, 0 }, +#endif + +#define osHeapValidate ((BOOL(WINAPI*)(HANDLE,DWORD, \ + LPCVOID))aSyscall[42].pCurrent) + +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT + { "HeapCompact", (SYSCALL)HeapCompact, 0 }, +#else + { "HeapCompact", (SYSCALL)0, 0 }, +#endif + +#define osHeapCompact ((UINT(WINAPI*)(HANDLE,DWORD))aSyscall[43].pCurrent) + +#if defined(SQLITE_WIN32_HAS_ANSI) && !defined(SQLITE_OMIT_LOAD_EXTENSION) + { "LoadLibraryA", (SYSCALL)LoadLibraryA, 0 }, +#else + { "LoadLibraryA", (SYSCALL)0, 0 }, +#endif + +#define osLoadLibraryA ((HMODULE(WINAPI*)(LPCSTR))aSyscall[44].pCurrent) + +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) && \ + !defined(SQLITE_OMIT_LOAD_EXTENSION) + { "LoadLibraryW", (SYSCALL)LoadLibraryW, 0 }, +#else + { "LoadLibraryW", (SYSCALL)0, 0 }, +#endif + +#define osLoadLibraryW ((HMODULE(WINAPI*)(LPCWSTR))aSyscall[45].pCurrent) + +#if !SQLITE_OS_WINRT + { "LocalFree", (SYSCALL)LocalFree, 0 }, +#else + { "LocalFree", (SYSCALL)0, 0 }, +#endif + +#define osLocalFree ((HLOCAL(WINAPI*)(HLOCAL))aSyscall[46].pCurrent) + +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT + { "LockFile", (SYSCALL)LockFile, 0 }, +#else + { "LockFile", (SYSCALL)0, 0 }, +#endif + +#if !defined(osLockFile) && defined(SQLITE_WIN32_HAS_ANSI) +#define osLockFile ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \ + DWORD))aSyscall[47].pCurrent) +#endif + +#if !SQLITE_OS_WINCE + { "LockFileEx", (SYSCALL)LockFileEx, 0 }, +#else + { "LockFileEx", (SYSCALL)0, 0 }, +#endif + +#ifndef osLockFileEx +#define osLockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD,DWORD, \ + LPOVERLAPPED))aSyscall[48].pCurrent) +#endif + +#if SQLITE_OS_WINCE || (!SQLITE_OS_WINRT && \ + (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0)) + { "MapViewOfFile", (SYSCALL)MapViewOfFile, 0 }, +#else + { "MapViewOfFile", (SYSCALL)0, 0 }, +#endif + +#define osMapViewOfFile ((LPVOID(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \ + SIZE_T))aSyscall[49].pCurrent) + + { "MultiByteToWideChar", (SYSCALL)MultiByteToWideChar, 0 }, + +#define osMultiByteToWideChar ((int(WINAPI*)(UINT,DWORD,LPCSTR,int,LPWSTR, \ + int))aSyscall[50].pCurrent) + + { "QueryPerformanceCounter", (SYSCALL)QueryPerformanceCounter, 0 }, + +#define osQueryPerformanceCounter ((BOOL(WINAPI*)( \ + LARGE_INTEGER*))aSyscall[51].pCurrent) + + { "ReadFile", (SYSCALL)ReadFile, 0 }, + +#define osReadFile ((BOOL(WINAPI*)(HANDLE,LPVOID,DWORD,LPDWORD, \ + LPOVERLAPPED))aSyscall[52].pCurrent) + + { "SetEndOfFile", (SYSCALL)SetEndOfFile, 0 }, + +#define osSetEndOfFile ((BOOL(WINAPI*)(HANDLE))aSyscall[53].pCurrent) + +#if !SQLITE_OS_WINRT + { "SetFilePointer", (SYSCALL)SetFilePointer, 0 }, +#else + { "SetFilePointer", (SYSCALL)0, 0 }, +#endif + +#define osSetFilePointer ((DWORD(WINAPI*)(HANDLE,LONG,PLONG, \ + DWORD))aSyscall[54].pCurrent) + +#if !SQLITE_OS_WINRT + { "Sleep", (SYSCALL)Sleep, 0 }, +#else + { "Sleep", (SYSCALL)0, 0 }, +#endif + +#define osSleep ((VOID(WINAPI*)(DWORD))aSyscall[55].pCurrent) + + { "SystemTimeToFileTime", (SYSCALL)SystemTimeToFileTime, 0 }, + +#define osSystemTimeToFileTime ((BOOL(WINAPI*)(const SYSTEMTIME*, \ + LPFILETIME))aSyscall[56].pCurrent) + +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT + { "UnlockFile", (SYSCALL)UnlockFile, 0 }, +#else + { "UnlockFile", (SYSCALL)0, 0 }, +#endif + +#if !defined(osUnlockFile) && defined(SQLITE_WIN32_HAS_ANSI) +#define osUnlockFile ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \ + DWORD))aSyscall[57].pCurrent) +#endif + +#if !SQLITE_OS_WINCE + { "UnlockFileEx", (SYSCALL)UnlockFileEx, 0 }, +#else + { "UnlockFileEx", (SYSCALL)0, 0 }, +#endif + +#define osUnlockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \ + LPOVERLAPPED))aSyscall[58].pCurrent) + +#if SQLITE_OS_WINCE || !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0 + { "UnmapViewOfFile", (SYSCALL)UnmapViewOfFile, 0 }, +#else + { "UnmapViewOfFile", (SYSCALL)0, 0 }, +#endif + +#define osUnmapViewOfFile ((BOOL(WINAPI*)(LPCVOID))aSyscall[59].pCurrent) + + { "WideCharToMultiByte", (SYSCALL)WideCharToMultiByte, 0 }, + +#define osWideCharToMultiByte ((int(WINAPI*)(UINT,DWORD,LPCWSTR,int,LPSTR,int, \ + LPCSTR,LPBOOL))aSyscall[60].pCurrent) + + { "WriteFile", (SYSCALL)WriteFile, 0 }, + +#define osWriteFile ((BOOL(WINAPI*)(HANDLE,LPCVOID,DWORD,LPDWORD, \ + LPOVERLAPPED))aSyscall[61].pCurrent) + +#if SQLITE_OS_WINRT + { "CreateEventExW", (SYSCALL)CreateEventExW, 0 }, +#else + { "CreateEventExW", (SYSCALL)0, 0 }, +#endif + +#define osCreateEventExW ((HANDLE(WINAPI*)(LPSECURITY_ATTRIBUTES,LPCWSTR, \ + DWORD,DWORD))aSyscall[62].pCurrent) + +/* +** For WaitForSingleObject(), MSDN says: +** +** Minimum supported client: Windows XP [desktop apps | UWP apps] +** Minimum supported server: Windows Server 2003 [desktop apps | UWP apps] +*/ + { "WaitForSingleObject", (SYSCALL)WaitForSingleObject, 0 }, + +#define osWaitForSingleObject ((DWORD(WINAPI*)(HANDLE, \ + DWORD))aSyscall[63].pCurrent) + +#if !SQLITE_OS_WINCE + { "WaitForSingleObjectEx", (SYSCALL)WaitForSingleObjectEx, 0 }, +#else + { "WaitForSingleObjectEx", (SYSCALL)0, 0 }, +#endif + +#define osWaitForSingleObjectEx ((DWORD(WINAPI*)(HANDLE,DWORD, \ + BOOL))aSyscall[64].pCurrent) + +#if SQLITE_OS_WINRT + { "SetFilePointerEx", (SYSCALL)SetFilePointerEx, 0 }, +#else + { "SetFilePointerEx", (SYSCALL)0, 0 }, +#endif + +#define osSetFilePointerEx ((BOOL(WINAPI*)(HANDLE,LARGE_INTEGER, \ + PLARGE_INTEGER,DWORD))aSyscall[65].pCurrent) + +#if SQLITE_OS_WINRT + { "GetFileInformationByHandleEx", (SYSCALL)GetFileInformationByHandleEx, 0 }, +#else + { "GetFileInformationByHandleEx", (SYSCALL)0, 0 }, +#endif + +#define osGetFileInformationByHandleEx ((BOOL(WINAPI*)(HANDLE, \ + FILE_INFO_BY_HANDLE_CLASS,LPVOID,DWORD))aSyscall[66].pCurrent) + +#if SQLITE_OS_WINRT && (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) + { "MapViewOfFileFromApp", (SYSCALL)MapViewOfFileFromApp, 0 }, +#else + { "MapViewOfFileFromApp", (SYSCALL)0, 0 }, +#endif + +#define osMapViewOfFileFromApp ((LPVOID(WINAPI*)(HANDLE,ULONG,ULONG64, \ + SIZE_T))aSyscall[67].pCurrent) + +#if SQLITE_OS_WINRT + { "CreateFile2", (SYSCALL)CreateFile2, 0 }, +#else + { "CreateFile2", (SYSCALL)0, 0 }, +#endif + +#define osCreateFile2 ((HANDLE(WINAPI*)(LPCWSTR,DWORD,DWORD,DWORD, \ + LPCREATEFILE2_EXTENDED_PARAMETERS))aSyscall[68].pCurrent) + +#if SQLITE_OS_WINRT && !defined(SQLITE_OMIT_LOAD_EXTENSION) + { "LoadPackagedLibrary", (SYSCALL)LoadPackagedLibrary, 0 }, +#else + { "LoadPackagedLibrary", (SYSCALL)0, 0 }, +#endif + +#define osLoadPackagedLibrary ((HMODULE(WINAPI*)(LPCWSTR, \ + DWORD))aSyscall[69].pCurrent) + +#if SQLITE_OS_WINRT + { "GetTickCount64", (SYSCALL)GetTickCount64, 0 }, +#else + { "GetTickCount64", (SYSCALL)0, 0 }, +#endif + +#define osGetTickCount64 ((ULONGLONG(WINAPI*)(VOID))aSyscall[70].pCurrent) + +#if SQLITE_OS_WINRT + { "GetNativeSystemInfo", (SYSCALL)GetNativeSystemInfo, 0 }, +#else + { "GetNativeSystemInfo", (SYSCALL)0, 0 }, +#endif + +#define osGetNativeSystemInfo ((VOID(WINAPI*)( \ + LPSYSTEM_INFO))aSyscall[71].pCurrent) + +#if defined(SQLITE_WIN32_HAS_ANSI) + { "OutputDebugStringA", (SYSCALL)OutputDebugStringA, 0 }, +#else + { "OutputDebugStringA", (SYSCALL)0, 0 }, +#endif + +#define osOutputDebugStringA ((VOID(WINAPI*)(LPCSTR))aSyscall[72].pCurrent) + +#if defined(SQLITE_WIN32_HAS_WIDE) + { "OutputDebugStringW", (SYSCALL)OutputDebugStringW, 0 }, +#else + { "OutputDebugStringW", (SYSCALL)0, 0 }, +#endif + +#define osOutputDebugStringW ((VOID(WINAPI*)(LPCWSTR))aSyscall[73].pCurrent) + + { "GetProcessHeap", (SYSCALL)GetProcessHeap, 0 }, + +#define osGetProcessHeap ((HANDLE(WINAPI*)(VOID))aSyscall[74].pCurrent) + +#if SQLITE_OS_WINRT && (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) + { "CreateFileMappingFromApp", (SYSCALL)CreateFileMappingFromApp, 0 }, +#else + { "CreateFileMappingFromApp", (SYSCALL)0, 0 }, +#endif + +#define osCreateFileMappingFromApp ((HANDLE(WINAPI*)(HANDLE, \ + LPSECURITY_ATTRIBUTES,ULONG,ULONG64,LPCWSTR))aSyscall[75].pCurrent) + +/* +** NOTE: On some sub-platforms, the InterlockedCompareExchange "function" +** is really just a macro that uses a compiler intrinsic (e.g. x64). +** So do not try to make this is into a redefinable interface. +*/ +#if defined(InterlockedCompareExchange) + { "InterlockedCompareExchange", (SYSCALL)0, 0 }, + +#define osInterlockedCompareExchange InterlockedCompareExchange +#else + { "InterlockedCompareExchange", (SYSCALL)InterlockedCompareExchange, 0 }, + +#define osInterlockedCompareExchange ((LONG(WINAPI*)(LONG \ + SQLITE_WIN32_VOLATILE*, LONG,LONG))aSyscall[76].pCurrent) +#endif /* defined(InterlockedCompareExchange) */ + +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT && SQLITE_WIN32_USE_UUID + { "UuidCreate", (SYSCALL)UuidCreate, 0 }, +#else + { "UuidCreate", (SYSCALL)0, 0 }, +#endif + +#define osUuidCreate ((RPC_STATUS(RPC_ENTRY*)(UUID*))aSyscall[77].pCurrent) + +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT && SQLITE_WIN32_USE_UUID + { "UuidCreateSequential", (SYSCALL)UuidCreateSequential, 0 }, +#else + { "UuidCreateSequential", (SYSCALL)0, 0 }, +#endif + +#define osUuidCreateSequential \ + ((RPC_STATUS(RPC_ENTRY*)(UUID*))aSyscall[78].pCurrent) + +#if !defined(SQLITE_NO_SYNC) && SQLITE_MAX_MMAP_SIZE>0 + { "FlushViewOfFile", (SYSCALL)FlushViewOfFile, 0 }, +#else + { "FlushViewOfFile", (SYSCALL)0, 0 }, +#endif + +#define osFlushViewOfFile \ + ((BOOL(WINAPI*)(LPCVOID,SIZE_T))aSyscall[79].pCurrent) + +/* +** If SQLITE_ENABLE_SETLK_TIMEOUT is defined, we require CreateEvent() +** to implement blocking locks with timeouts. MSDN says: +** +** Minimum supported client: Windows XP [desktop apps | UWP apps] +** Minimum supported server: Windows Server 2003 [desktop apps | UWP apps] +*/ +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + { "CreateEvent", (SYSCALL)CreateEvent, 0 }, +#else + { "CreateEvent", (SYSCALL)0, 0 }, +#endif + +#define osCreateEvent ( \ + (HANDLE(WINAPI*) (LPSECURITY_ATTRIBUTES,BOOL,BOOL,LPCSTR)) \ + aSyscall[80].pCurrent \ +) + +/* +** If SQLITE_ENABLE_SETLK_TIMEOUT is defined, we require CancelIo() +** for the case where a timeout expires and a lock request must be +** cancelled. +** +** Minimum supported client: Windows XP [desktop apps | UWP apps] +** Minimum supported server: Windows Server 2003 [desktop apps | UWP apps] +*/ +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + { "CancelIo", (SYSCALL)CancelIo, 0 }, +#else + { "CancelIo", (SYSCALL)0, 0 }, +#endif + +#define osCancelIo ((BOOL(WINAPI*)(HANDLE))aSyscall[81].pCurrent) + +#if defined(SQLITE_WIN32_HAS_WIDE) && defined(_WIN32) + { "GetModuleHandleW", (SYSCALL)GetModuleHandleW, 0 }, +#else + { "GetModuleHandleW", (SYSCALL)0, 0 }, +#endif + +#define osGetModuleHandleW ((HMODULE(WINAPI*)(LPCWSTR))aSyscall[82].pCurrent) + +#ifndef _WIN32 + { "getenv", (SYSCALL)getenv, 0 }, +#else + { "getenv", (SYSCALL)0, 0 }, +#endif + +#define osGetenv ((const char *(*)(const char *))aSyscall[83].pCurrent) + +#ifndef _WIN32 + { "getcwd", (SYSCALL)getcwd, 0 }, +#else + { "getcwd", (SYSCALL)0, 0 }, +#endif + +#define osGetcwd ((char*(*)(char*,size_t))aSyscall[84].pCurrent) + +#ifndef _WIN32 + { "readlink", (SYSCALL)readlink, 0 }, +#else + { "readlink", (SYSCALL)0, 0 }, +#endif + +#define osReadlink ((ssize_t(*)(const char*,char*,size_t))aSyscall[85].pCurrent) + +#ifndef _WIN32 + { "lstat", (SYSCALL)lstat, 0 }, +#else + { "lstat", (SYSCALL)0, 0 }, +#endif + +#define osLstat ((int(*)(const char*,struct stat*))aSyscall[86].pCurrent) + +#ifndef _WIN32 + { "__errno", (SYSCALL)__errno, 0 }, +#else + { "__errno", (SYSCALL)0, 0 }, +#endif + +#define osErrno (*((int*(*)(void))aSyscall[87].pCurrent)()) + +#ifndef _WIN32 + { "cygwin_conv_path", (SYSCALL)cygwin_conv_path, 0 }, +#else + { "cygwin_conv_path", (SYSCALL)0, 0 }, +#endif + +#define osCygwin_conv_path ((size_t(*)(unsigned int, \ + const void *, void *, size_t))aSyscall[88].pCurrent) + +}; /* End of the overrideable system calls */ + +/* +** This is the xSetSystemCall() method of sqlite3_vfs for all of the +** "win32" VFSes. Return SQLITE_OK upon successfully updating the +** system call pointer, or SQLITE_NOTFOUND if there is no configurable +** system call named zName. +*/ +static int winSetSystemCall( + sqlite3_vfs *pNotUsed, /* The VFS pointer. Not used */ + const char *zName, /* Name of system call to override */ + sqlite3_syscall_ptr pNewFunc /* Pointer to new system call value */ +){ + unsigned int i; + int rc = SQLITE_NOTFOUND; + + UNUSED_PARAMETER(pNotUsed); + if( zName==0 ){ + /* If no zName is given, restore all system calls to their default + ** settings and return NULL + */ + rc = SQLITE_OK; + for(i=0; i0 ){ + memset(zDbgBuf, 0, SQLITE_WIN32_DBG_BUF_SIZE); + memcpy(zDbgBuf, zBuf, nMin); + osOutputDebugStringA(zDbgBuf); + }else{ + osOutputDebugStringA(zBuf); + } +#elif defined(SQLITE_WIN32_HAS_WIDE) + memset(zDbgBuf, 0, SQLITE_WIN32_DBG_BUF_SIZE); + if ( osMultiByteToWideChar( + osAreFileApisANSI() ? CP_ACP : CP_OEMCP, 0, zBuf, + nMin, (LPWSTR)zDbgBuf, SQLITE_WIN32_DBG_BUF_SIZE/sizeof(WCHAR))<=0 ){ + return; + } + osOutputDebugStringW((LPCWSTR)zDbgBuf); +#else + if( nMin>0 ){ + memset(zDbgBuf, 0, SQLITE_WIN32_DBG_BUF_SIZE); + memcpy(zDbgBuf, zBuf, nMin); + fprintf(stderr, "%s", zDbgBuf); + }else{ + fprintf(stderr, "%s", zBuf); + } +#endif +} +#endif /* _WIN32 */ + +/* +** The following routine suspends the current thread for at least ms +** milliseconds. This is equivalent to the Win32 Sleep() interface. +*/ +#if SQLITE_OS_WINRT +static HANDLE sleepObj = NULL; +#endif + +SQLITE_API void sqlite3_win32_sleep(DWORD milliseconds){ +#if SQLITE_OS_WINRT + if ( sleepObj==NULL ){ + sleepObj = osCreateEventExW(NULL, NULL, CREATE_EVENT_MANUAL_RESET, + SYNCHRONIZE); + } + assert( sleepObj!=NULL ); + osWaitForSingleObjectEx(sleepObj, milliseconds, FALSE); +#else + osSleep(milliseconds); +#endif +} + +#if SQLITE_MAX_WORKER_THREADS>0 && !SQLITE_OS_WINCE && !SQLITE_OS_WINRT && \ + SQLITE_THREADSAFE>0 +SQLITE_PRIVATE DWORD sqlite3Win32Wait(HANDLE hObject){ + DWORD rc; + while( (rc = osWaitForSingleObjectEx(hObject, INFINITE, + TRUE))==WAIT_IO_COMPLETION ){} + return rc; +} +#endif + +/* +** Return true (non-zero) if we are running under WinNT, Win2K, WinXP, +** or WinCE. Return false (zero) for Win95, Win98, or WinME. +** +** Here is an interesting observation: Win95, Win98, and WinME lack +** the LockFileEx() API. But we can still statically link against that +** API as long as we don't call it when running Win95/98/ME. A call to +** this routine is used to determine if the host is Win95/98/ME or +** WinNT/2K/XP so that we will know whether or not we can safely call +** the LockFileEx() API. +*/ + +#if !SQLITE_WIN32_GETVERSIONEX +# define osIsNT() (1) +#elif SQLITE_OS_WINCE || SQLITE_OS_WINRT || !defined(SQLITE_WIN32_HAS_ANSI) +# define osIsNT() (1) +#elif !defined(SQLITE_WIN32_HAS_WIDE) +# define osIsNT() (0) +#else +# define osIsNT() ((sqlite3_os_type==2) || sqlite3_win32_is_nt()) +#endif + +/* +** This function determines if the machine is running a version of Windows +** based on the NT kernel. +*/ +SQLITE_API int sqlite3_win32_is_nt(void){ +#if SQLITE_OS_WINRT + /* + ** NOTE: The WinRT sub-platform is always assumed to be based on the NT + ** kernel. + */ + return 1; +#elif SQLITE_WIN32_GETVERSIONEX + if( osInterlockedCompareExchange(&sqlite3_os_type, 0, 0)==0 ){ +#if defined(SQLITE_WIN32_HAS_ANSI) + OSVERSIONINFOA sInfo; + sInfo.dwOSVersionInfoSize = sizeof(sInfo); + osGetVersionExA(&sInfo); + osInterlockedCompareExchange(&sqlite3_os_type, + (sInfo.dwPlatformId == VER_PLATFORM_WIN32_NT) ? 2 : 1, 0); +#elif defined(SQLITE_WIN32_HAS_WIDE) + OSVERSIONINFOW sInfo; + sInfo.dwOSVersionInfoSize = sizeof(sInfo); + osGetVersionExW(&sInfo); + osInterlockedCompareExchange(&sqlite3_os_type, + (sInfo.dwPlatformId == VER_PLATFORM_WIN32_NT) ? 2 : 1, 0); +#endif + } + return osInterlockedCompareExchange(&sqlite3_os_type, 2, 2)==2; +#elif SQLITE_TEST + return osInterlockedCompareExchange(&sqlite3_os_type, 2, 2)==2 + || osInterlockedCompareExchange(&sqlite3_os_type, 0, 0)==0 + ; +#else + /* + ** NOTE: All sub-platforms where the GetVersionEx[AW] functions are + ** deprecated are always assumed to be based on the NT kernel. + */ + return 1; +#endif +} + +#ifdef SQLITE_WIN32_MALLOC +/* +** Allocate nBytes of memory. +*/ +static void *winMemMalloc(int nBytes){ + HANDLE hHeap; + void *p; + + winMemAssertMagic(); + hHeap = winMemGetHeap(); + assert( hHeap!=0 ); + assert( hHeap!=INVALID_HANDLE_VALUE ); +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) + assert( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) ); +#endif + assert( nBytes>=0 ); + p = osHeapAlloc(hHeap, SQLITE_WIN32_HEAP_FLAGS, (SIZE_T)nBytes); + if( !p ){ + sqlite3_log(SQLITE_NOMEM, "failed to HeapAlloc %u bytes (%lu), heap=%p", + nBytes, osGetLastError(), (void*)hHeap); + } + return p; +} + +/* +** Free memory. +*/ +static void winMemFree(void *pPrior){ + HANDLE hHeap; + + winMemAssertMagic(); + hHeap = winMemGetHeap(); + assert( hHeap!=0 ); + assert( hHeap!=INVALID_HANDLE_VALUE ); +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) + assert( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) ); +#endif + if( !pPrior ) return; /* Passing NULL to HeapFree is undefined. */ + if( !osHeapFree(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) ){ + sqlite3_log(SQLITE_NOMEM, "failed to HeapFree block %p (%lu), heap=%p", + pPrior, osGetLastError(), (void*)hHeap); + } +} + +/* +** Change the size of an existing memory allocation +*/ +static void *winMemRealloc(void *pPrior, int nBytes){ + HANDLE hHeap; + void *p; + + winMemAssertMagic(); + hHeap = winMemGetHeap(); + assert( hHeap!=0 ); + assert( hHeap!=INVALID_HANDLE_VALUE ); +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) + assert( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) ); +#endif + assert( nBytes>=0 ); + if( !pPrior ){ + p = osHeapAlloc(hHeap, SQLITE_WIN32_HEAP_FLAGS, (SIZE_T)nBytes); + }else{ + p = osHeapReAlloc(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior, (SIZE_T)nBytes); + } + if( !p ){ + sqlite3_log(SQLITE_NOMEM, "failed to %s %u bytes (%lu), heap=%p", + pPrior ? "HeapReAlloc" : "HeapAlloc", nBytes, osGetLastError(), + (void*)hHeap); + } + return p; +} + +/* +** Return the size of an outstanding allocation, in bytes. +*/ +static int winMemSize(void *p){ + HANDLE hHeap; + SIZE_T n; + + winMemAssertMagic(); + hHeap = winMemGetHeap(); + assert( hHeap!=0 ); + assert( hHeap!=INVALID_HANDLE_VALUE ); +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) + assert( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, p) ); +#endif + if( !p ) return 0; + n = osHeapSize(hHeap, SQLITE_WIN32_HEAP_FLAGS, p); + if( n==(SIZE_T)-1 ){ + sqlite3_log(SQLITE_NOMEM, "failed to HeapSize block %p (%lu), heap=%p", + p, osGetLastError(), (void*)hHeap); + return 0; + } + return (int)n; +} + +/* +** Round up a request size to the next valid allocation size. +*/ +static int winMemRoundup(int n){ + return n; +} + +/* +** Initialize this module. +*/ +static int winMemInit(void *pAppData){ + winMemData *pWinMemData = (winMemData *)pAppData; + + if( !pWinMemData ) return SQLITE_ERROR; + assert( pWinMemData->magic1==WINMEM_MAGIC1 ); + assert( pWinMemData->magic2==WINMEM_MAGIC2 ); + +#if !SQLITE_OS_WINRT && SQLITE_WIN32_HEAP_CREATE + if( !pWinMemData->hHeap ){ + DWORD dwInitialSize = SQLITE_WIN32_HEAP_INIT_SIZE; + DWORD dwMaximumSize = (DWORD)sqlite3GlobalConfig.nHeap; + if( dwMaximumSize==0 ){ + dwMaximumSize = SQLITE_WIN32_HEAP_MAX_SIZE; + }else if( dwInitialSize>dwMaximumSize ){ + dwInitialSize = dwMaximumSize; + } + pWinMemData->hHeap = osHeapCreate(SQLITE_WIN32_HEAP_FLAGS, + dwInitialSize, dwMaximumSize); + if( !pWinMemData->hHeap ){ + sqlite3_log(SQLITE_NOMEM, + "failed to HeapCreate (%lu), flags=%u, initSize=%lu, maxSize=%lu", + osGetLastError(), SQLITE_WIN32_HEAP_FLAGS, dwInitialSize, + dwMaximumSize); + return SQLITE_NOMEM_BKPT; + } + pWinMemData->bOwned = TRUE; + assert( pWinMemData->bOwned ); + } +#else + pWinMemData->hHeap = osGetProcessHeap(); + if( !pWinMemData->hHeap ){ + sqlite3_log(SQLITE_NOMEM, + "failed to GetProcessHeap (%lu)", osGetLastError()); + return SQLITE_NOMEM_BKPT; + } + pWinMemData->bOwned = FALSE; + assert( !pWinMemData->bOwned ); +#endif + assert( pWinMemData->hHeap!=0 ); + assert( pWinMemData->hHeap!=INVALID_HANDLE_VALUE ); +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) + assert( osHeapValidate(pWinMemData->hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) ); +#endif + return SQLITE_OK; +} + +/* +** Deinitialize this module. +*/ +static void winMemShutdown(void *pAppData){ + winMemData *pWinMemData = (winMemData *)pAppData; + + if( !pWinMemData ) return; + assert( pWinMemData->magic1==WINMEM_MAGIC1 ); + assert( pWinMemData->magic2==WINMEM_MAGIC2 ); + + if( pWinMemData->hHeap ){ + assert( pWinMemData->hHeap!=INVALID_HANDLE_VALUE ); +#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_MALLOC_VALIDATE) + assert( osHeapValidate(pWinMemData->hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) ); +#endif + if( pWinMemData->bOwned ){ + if( !osHeapDestroy(pWinMemData->hHeap) ){ + sqlite3_log(SQLITE_NOMEM, "failed to HeapDestroy (%lu), heap=%p", + osGetLastError(), (void*)pWinMemData->hHeap); + } + pWinMemData->bOwned = FALSE; + } + pWinMemData->hHeap = NULL; + } +} + +/* +** Populate the low-level memory allocation function pointers in +** sqlite3GlobalConfig.m with pointers to the routines in this file. The +** arguments specify the block of memory to manage. +** +** This routine is only called by sqlite3_config(), and therefore +** is not required to be threadsafe (it is not). +*/ +SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetWin32(void){ + static const sqlite3_mem_methods winMemMethods = { + winMemMalloc, + winMemFree, + winMemRealloc, + winMemSize, + winMemRoundup, + winMemInit, + winMemShutdown, + &win_mem_data + }; + return &winMemMethods; +} + +SQLITE_PRIVATE void sqlite3MemSetDefault(void){ + sqlite3_config(SQLITE_CONFIG_MALLOC, sqlite3MemGetWin32()); +} +#endif /* SQLITE_WIN32_MALLOC */ + +#ifdef _WIN32 +/* +** Convert a UTF-8 string to Microsoft Unicode. +** +** Space to hold the returned string is obtained from sqlite3_malloc(). +*/ +static LPWSTR winUtf8ToUnicode(const char *zText){ + int nChar; + LPWSTR zWideText; + + nChar = osMultiByteToWideChar(CP_UTF8, 0, zText, -1, NULL, 0); + if( nChar==0 ){ + return 0; + } + zWideText = sqlite3MallocZero( nChar*sizeof(WCHAR) ); + if( zWideText==0 ){ + return 0; + } + nChar = osMultiByteToWideChar(CP_UTF8, 0, zText, -1, zWideText, + nChar); + if( nChar==0 ){ + sqlite3_free(zWideText); + zWideText = 0; + } + return zWideText; +} +#endif /* _WIN32 */ + +/* +** Convert a Microsoft Unicode string to UTF-8. +** +** Space to hold the returned string is obtained from sqlite3_malloc(). +*/ +static char *winUnicodeToUtf8(LPCWSTR zWideText){ + int nByte; + char *zText; + + nByte = osWideCharToMultiByte(CP_UTF8, 0, zWideText, -1, 0, 0, 0, 0); + if( nByte == 0 ){ + return 0; + } + zText = sqlite3MallocZero( nByte ); + if( zText==0 ){ + return 0; + } + nByte = osWideCharToMultiByte(CP_UTF8, 0, zWideText, -1, zText, nByte, + 0, 0); + if( nByte == 0 ){ + sqlite3_free(zText); + zText = 0; + } + return zText; +} + +/* +** Convert an ANSI string to Microsoft Unicode, using the ANSI or OEM +** code page. +** +** Space to hold the returned string is obtained from sqlite3_malloc(). +*/ +static LPWSTR winMbcsToUnicode(const char *zText, int useAnsi){ + int nWideChar; + LPWSTR zMbcsText; + int codepage = useAnsi ? CP_ACP : CP_OEMCP; + + nWideChar = osMultiByteToWideChar(codepage, 0, zText, -1, NULL, + 0); + if( nWideChar==0 ){ + return 0; + } + zMbcsText = sqlite3MallocZero( nWideChar*sizeof(WCHAR) ); + if( zMbcsText==0 ){ + return 0; + } + nWideChar = osMultiByteToWideChar(codepage, 0, zText, -1, zMbcsText, + nWideChar); + if( nWideChar==0 ){ + sqlite3_free(zMbcsText); + zMbcsText = 0; + } + return zMbcsText; +} + +#ifdef _WIN32 +/* +** Convert a Microsoft Unicode string to a multi-byte character string, +** using the ANSI or OEM code page. +** +** Space to hold the returned string is obtained from sqlite3_malloc(). +*/ +static char *winUnicodeToMbcs(LPCWSTR zWideText, int useAnsi){ + int nByte; + char *zText; + int codepage = useAnsi ? CP_ACP : CP_OEMCP; + + nByte = osWideCharToMultiByte(codepage, 0, zWideText, -1, 0, 0, 0, 0); + if( nByte == 0 ){ + return 0; + } + zText = sqlite3MallocZero( nByte ); + if( zText==0 ){ + return 0; + } + nByte = osWideCharToMultiByte(codepage, 0, zWideText, -1, zText, + nByte, 0, 0); + if( nByte == 0 ){ + sqlite3_free(zText); + zText = 0; + } + return zText; +} +#endif /* _WIN32 */ + +/* +** Convert a multi-byte character string to UTF-8. +** +** Space to hold the returned string is obtained from sqlite3_malloc(). +*/ +static char *winMbcsToUtf8(const char *zText, int useAnsi){ + char *zTextUtf8; + LPWSTR zTmpWide; + + zTmpWide = winMbcsToUnicode(zText, useAnsi); + if( zTmpWide==0 ){ + return 0; + } + zTextUtf8 = winUnicodeToUtf8(zTmpWide); + sqlite3_free(zTmpWide); + return zTextUtf8; +} + +#ifdef _WIN32 +/* +** Convert a UTF-8 string to a multi-byte character string. +** +** Space to hold the returned string is obtained from sqlite3_malloc(). +*/ +static char *winUtf8ToMbcs(const char *zText, int useAnsi){ + char *zTextMbcs; + LPWSTR zTmpWide; + + zTmpWide = winUtf8ToUnicode(zText); + if( zTmpWide==0 ){ + return 0; + } + zTextMbcs = winUnicodeToMbcs(zTmpWide, useAnsi); + sqlite3_free(zTmpWide); + return zTextMbcs; +} + +/* +** This is a public wrapper for the winUtf8ToUnicode() function. +*/ +SQLITE_API LPWSTR sqlite3_win32_utf8_to_unicode(const char *zText){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !zText ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif +#ifndef SQLITE_OMIT_AUTOINIT + if( sqlite3_initialize() ) return 0; +#endif + return winUtf8ToUnicode(zText); +} + +/* +** This is a public wrapper for the winUnicodeToUtf8() function. +*/ +SQLITE_API char *sqlite3_win32_unicode_to_utf8(LPCWSTR zWideText){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !zWideText ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif +#ifndef SQLITE_OMIT_AUTOINIT + if( sqlite3_initialize() ) return 0; +#endif + return winUnicodeToUtf8(zWideText); +} +#endif /* _WIN32 */ + +/* +** This is a public wrapper for the winMbcsToUtf8() function. +*/ +SQLITE_API char *sqlite3_win32_mbcs_to_utf8(const char *zText){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !zText ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif +#ifndef SQLITE_OMIT_AUTOINIT + if( sqlite3_initialize() ) return 0; +#endif + return winMbcsToUtf8(zText, osAreFileApisANSI()); +} + +#ifdef _WIN32 +/* +** This is a public wrapper for the winMbcsToUtf8() function. +*/ +SQLITE_API char *sqlite3_win32_mbcs_to_utf8_v2(const char *zText, int useAnsi){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !zText ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif +#ifndef SQLITE_OMIT_AUTOINIT + if( sqlite3_initialize() ) return 0; +#endif + return winMbcsToUtf8(zText, useAnsi); +} + +/* +** This is a public wrapper for the winUtf8ToMbcs() function. +*/ +SQLITE_API char *sqlite3_win32_utf8_to_mbcs(const char *zText){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !zText ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif +#ifndef SQLITE_OMIT_AUTOINIT + if( sqlite3_initialize() ) return 0; +#endif + return winUtf8ToMbcs(zText, osAreFileApisANSI()); +} + +/* +** This is a public wrapper for the winUtf8ToMbcs() function. +*/ +SQLITE_API char *sqlite3_win32_utf8_to_mbcs_v2(const char *zText, int useAnsi){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !zText ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif +#ifndef SQLITE_OMIT_AUTOINIT + if( sqlite3_initialize() ) return 0; +#endif + return winUtf8ToMbcs(zText, useAnsi); +} + +/* +** This function is the same as sqlite3_win32_set_directory (below); however, +** it accepts a UTF-8 string. +*/ +SQLITE_API int sqlite3_win32_set_directory8( + unsigned long type, /* Identifier for directory being set or reset */ + const char *zValue /* New value for directory being set or reset */ +){ + char **ppDirectory = 0; + int rc; +#ifndef SQLITE_OMIT_AUTOINIT + rc = sqlite3_initialize(); + if( rc ) return rc; +#endif + sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); + if( type==SQLITE_WIN32_DATA_DIRECTORY_TYPE ){ + ppDirectory = &sqlite3_data_directory; + }else if( type==SQLITE_WIN32_TEMP_DIRECTORY_TYPE ){ + ppDirectory = &sqlite3_temp_directory; + } + assert( !ppDirectory || type==SQLITE_WIN32_DATA_DIRECTORY_TYPE + || type==SQLITE_WIN32_TEMP_DIRECTORY_TYPE + ); + assert( !ppDirectory || sqlite3MemdebugHasType(*ppDirectory, MEMTYPE_HEAP) ); + if( ppDirectory ){ + char *zCopy = 0; + if( zValue && zValue[0] ){ + zCopy = sqlite3_mprintf("%s", zValue); + if ( zCopy==0 ){ + rc = SQLITE_NOMEM_BKPT; + goto set_directory8_done; + } + } + sqlite3_free(*ppDirectory); + *ppDirectory = zCopy; + rc = SQLITE_OK; + }else{ + rc = SQLITE_ERROR; + } +set_directory8_done: + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); + return rc; +} + +/* +** This function is the same as sqlite3_win32_set_directory (below); however, +** it accepts a UTF-16 string. +*/ +SQLITE_API int sqlite3_win32_set_directory16( + unsigned long type, /* Identifier for directory being set or reset */ + const void *zValue /* New value for directory being set or reset */ +){ + int rc; + char *zUtf8 = 0; + if( zValue ){ + zUtf8 = sqlite3_win32_unicode_to_utf8(zValue); + if( zUtf8==0 ) return SQLITE_NOMEM_BKPT; + } + rc = sqlite3_win32_set_directory8(type, zUtf8); + if( zUtf8 ) sqlite3_free(zUtf8); + return rc; +} + +/* +** This function sets the data directory or the temporary directory based on +** the provided arguments. The type argument must be 1 in order to set the +** data directory or 2 in order to set the temporary directory. The zValue +** argument is the name of the directory to use. The return value will be +** SQLITE_OK if successful. +*/ +SQLITE_API int sqlite3_win32_set_directory( + unsigned long type, /* Identifier for directory being set or reset */ + void *zValue /* New value for directory being set or reset */ +){ + return sqlite3_win32_set_directory16(type, zValue); +} +#endif /* _WIN32 */ + +/* +** The return value of winGetLastErrorMsg +** is zero if the error message fits in the buffer, or non-zero +** otherwise (if the message was truncated). +*/ +static int winGetLastErrorMsg(DWORD lastErrno, int nBuf, char *zBuf){ + /* FormatMessage returns 0 on failure. Otherwise it + ** returns the number of TCHARs written to the output + ** buffer, excluding the terminating null char. + */ + DWORD dwLen = 0; + char *zOut = 0; + + if( osIsNT() ){ +#if SQLITE_OS_WINRT + WCHAR zTempWide[SQLITE_WIN32_MAX_ERRMSG_CHARS+1]; + dwLen = osFormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + lastErrno, + 0, + zTempWide, + SQLITE_WIN32_MAX_ERRMSG_CHARS, + 0); +#else + LPWSTR zTempWide = NULL; + dwLen = osFormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + lastErrno, + 0, + (LPWSTR) &zTempWide, + 0, + 0); +#endif + if( dwLen > 0 ){ + /* allocate a buffer and convert to UTF8 */ + sqlite3BeginBenignMalloc(); + zOut = winUnicodeToUtf8(zTempWide); + sqlite3EndBenignMalloc(); +#if !SQLITE_OS_WINRT + /* free the system buffer allocated by FormatMessage */ + osLocalFree(zTempWide); +#endif + } + } +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + char *zTemp = NULL; + dwLen = osFormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + lastErrno, + 0, + (LPSTR) &zTemp, + 0, + 0); + if( dwLen > 0 ){ + /* allocate a buffer and convert to UTF8 */ + sqlite3BeginBenignMalloc(); + zOut = winMbcsToUtf8(zTemp, osAreFileApisANSI()); + sqlite3EndBenignMalloc(); + /* free the system buffer allocated by FormatMessage */ + osLocalFree(zTemp); + } + } +#endif + if( 0 == dwLen ){ + sqlite3_snprintf(nBuf, zBuf, "OsError 0x%lx (%lu)", lastErrno, lastErrno); + }else{ + /* copy a maximum of nBuf chars to output buffer */ + sqlite3_snprintf(nBuf, zBuf, "%s", zOut); + /* free the UTF8 buffer */ + sqlite3_free(zOut); + } + return 0; +} + +/* +** +** This function - winLogErrorAtLine() - is only ever called via the macro +** winLogError(). +** +** This routine is invoked after an error occurs in an OS function. +** It logs a message using sqlite3_log() containing the current value of +** error code and, if possible, the human-readable equivalent from +** FormatMessage. +** +** The first argument passed to the macro should be the error code that +** will be returned to SQLite (e.g. SQLITE_IOERR_DELETE, SQLITE_CANTOPEN). +** The two subsequent arguments should be the name of the OS function that +** failed and the associated file-system path, if any. +*/ +#define winLogError(a,b,c,d) winLogErrorAtLine(a,b,c,d,__LINE__) +static int winLogErrorAtLine( + int errcode, /* SQLite error code */ + DWORD lastErrno, /* Win32 last error */ + const char *zFunc, /* Name of OS function that failed */ + const char *zPath, /* File path associated with error */ + int iLine /* Source line number where error occurred */ +){ + char zMsg[500]; /* Human readable error text */ + int i; /* Loop counter */ + + zMsg[0] = 0; + winGetLastErrorMsg(lastErrno, sizeof(zMsg), zMsg); + assert( errcode!=SQLITE_OK ); + if( zPath==0 ) zPath = ""; + for(i=0; zMsg[i] && zMsg[i]!='\r' && zMsg[i]!='\n'; i++){} + zMsg[i] = 0; + sqlite3_log(errcode, + "os_win.c:%d: (%lu) %s(%s) - %s", + iLine, lastErrno, zFunc, zPath, zMsg + ); + + return errcode; +} + +/* +** The number of times that a ReadFile(), WriteFile(), and DeleteFile() +** will be retried following a locking error - probably caused by +** antivirus software. Also the initial delay before the first retry. +** The delay increases linearly with each retry. +*/ +#ifndef SQLITE_WIN32_IOERR_RETRY +# define SQLITE_WIN32_IOERR_RETRY 10 +#endif +#ifndef SQLITE_WIN32_IOERR_RETRY_DELAY +# define SQLITE_WIN32_IOERR_RETRY_DELAY 25 +#endif +static int winIoerrRetry = SQLITE_WIN32_IOERR_RETRY; +static int winIoerrRetryDelay = SQLITE_WIN32_IOERR_RETRY_DELAY; + +/* +** The "winIoerrCanRetry1" macro is used to determine if a particular I/O +** error code obtained via GetLastError() is eligible to be retried. It +** must accept the error code DWORD as its only argument and should return +** non-zero if the error code is transient in nature and the operation +** responsible for generating the original error might succeed upon being +** retried. The argument to this macro should be a variable. +** +** Additionally, a macro named "winIoerrCanRetry2" may be defined. If it +** is defined, it will be consulted only when the macro "winIoerrCanRetry1" +** returns zero. The "winIoerrCanRetry2" macro is completely optional and +** may be used to include additional error codes in the set that should +** result in the failing I/O operation being retried by the caller. If +** defined, the "winIoerrCanRetry2" macro must exhibit external semantics +** identical to those of the "winIoerrCanRetry1" macro. +*/ +#if !defined(winIoerrCanRetry1) +#define winIoerrCanRetry1(a) (((a)==ERROR_ACCESS_DENIED) || \ + ((a)==ERROR_SHARING_VIOLATION) || \ + ((a)==ERROR_LOCK_VIOLATION) || \ + ((a)==ERROR_DEV_NOT_EXIST) || \ + ((a)==ERROR_NETNAME_DELETED) || \ + ((a)==ERROR_SEM_TIMEOUT) || \ + ((a)==ERROR_NETWORK_UNREACHABLE)) +#endif + +/* +** If a ReadFile() or WriteFile() error occurs, invoke this routine +** to see if it should be retried. Return TRUE to retry. Return FALSE +** to give up with an error. +*/ +static int winRetryIoerr(int *pnRetry, DWORD *pError){ + DWORD e = osGetLastError(); + if( *pnRetry>=winIoerrRetry ){ + if( pError ){ + *pError = e; + } + return 0; + } + if( winIoerrCanRetry1(e) ){ + sqlite3_win32_sleep(winIoerrRetryDelay*(1+*pnRetry)); + ++*pnRetry; + return 1; + } +#if defined(winIoerrCanRetry2) + else if( winIoerrCanRetry2(e) ){ + sqlite3_win32_sleep(winIoerrRetryDelay*(1+*pnRetry)); + ++*pnRetry; + return 1; + } +#endif + if( pError ){ + *pError = e; + } + return 0; +} + +/* +** Log a I/O error retry episode. +*/ +static void winLogIoerr(int nRetry, int lineno){ + if( nRetry ){ + sqlite3_log(SQLITE_NOTICE, + "delayed %dms for lock/sharing conflict at line %d", + winIoerrRetryDelay*nRetry*(nRetry+1)/2, lineno + ); + } +} + +/* +** This #if does not rely on the SQLITE_OS_WINCE define because the +** corresponding section in "date.c" cannot use it. +*/ +#if !defined(SQLITE_OMIT_LOCALTIME) && defined(_WIN32_WCE) && \ + (!defined(SQLITE_MSVC_LOCALTIME_API) || !SQLITE_MSVC_LOCALTIME_API) +/* +** The MSVC CRT on Windows CE may not have a localtime() function. +** So define a substitute. +*/ +/* # include */ +struct tm *__cdecl localtime(const time_t *t) +{ + static struct tm y; + FILETIME uTm, lTm; + SYSTEMTIME pTm; + sqlite3_int64 t64; + t64 = *t; + t64 = (t64 + 11644473600)*10000000; + uTm.dwLowDateTime = (DWORD)(t64 & 0xFFFFFFFF); + uTm.dwHighDateTime= (DWORD)(t64 >> 32); + osFileTimeToLocalFileTime(&uTm,&lTm); + osFileTimeToSystemTime(&lTm,&pTm); + y.tm_year = pTm.wYear - 1900; + y.tm_mon = pTm.wMonth - 1; + y.tm_wday = pTm.wDayOfWeek; + y.tm_mday = pTm.wDay; + y.tm_hour = pTm.wHour; + y.tm_min = pTm.wMinute; + y.tm_sec = pTm.wSecond; + return &y; +} +#endif + +#if SQLITE_OS_WINCE +/************************************************************************* +** This section contains code for WinCE only. +*/ +#define HANDLE_TO_WINFILE(a) (winFile*)&((char*)a)[-(int)offsetof(winFile,h)] + +/* +** Acquire a lock on the handle h +*/ +static void winceMutexAcquire(HANDLE h){ + DWORD dwErr; + do { + dwErr = osWaitForSingleObject(h, INFINITE); + } while (dwErr != WAIT_OBJECT_0 && dwErr != WAIT_ABANDONED); +} +/* +** Release a lock acquired by winceMutexAcquire() +*/ +#define winceMutexRelease(h) ReleaseMutex(h) + +/* +** Create the mutex and shared memory used for locking in the file +** descriptor pFile +*/ +static int winceCreateLock(const char *zFilename, winFile *pFile){ + LPWSTR zTok; + LPWSTR zName; + DWORD lastErrno; + BOOL bLogged = FALSE; + BOOL bInit = TRUE; + + zName = winUtf8ToUnicode(zFilename); + if( zName==0 ){ + /* out of memory */ + return SQLITE_IOERR_NOMEM_BKPT; + } + + /* Initialize the local lockdata */ + memset(&pFile->local, 0, sizeof(pFile->local)); + + /* Replace the backslashes from the filename and lowercase it + ** to derive a mutex name. */ + zTok = osCharLowerW(zName); + for (;*zTok;zTok++){ + if (*zTok == '\\') *zTok = '_'; + } + + /* Create/open the named mutex */ + pFile->hMutex = osCreateMutexW(NULL, FALSE, zName); + if (!pFile->hMutex){ + pFile->lastErrno = osGetLastError(); + sqlite3_free(zName); + return winLogError(SQLITE_IOERR, pFile->lastErrno, + "winceCreateLock1", zFilename); + } + + /* Acquire the mutex before continuing */ + winceMutexAcquire(pFile->hMutex); + + /* Since the names of named mutexes, semaphores, file mappings etc are + ** case-sensitive, take advantage of that by uppercasing the mutex name + ** and using that as the shared filemapping name. + */ + osCharUpperW(zName); + pFile->hShared = osCreateFileMappingW(INVALID_HANDLE_VALUE, NULL, + PAGE_READWRITE, 0, sizeof(winceLock), + zName); + + /* Set a flag that indicates we're the first to create the memory so it + ** must be zero-initialized */ + lastErrno = osGetLastError(); + if (lastErrno == ERROR_ALREADY_EXISTS){ + bInit = FALSE; + } + + sqlite3_free(zName); + + /* If we succeeded in making the shared memory handle, map it. */ + if( pFile->hShared ){ + pFile->shared = (winceLock*)osMapViewOfFile(pFile->hShared, + FILE_MAP_READ|FILE_MAP_WRITE, 0, 0, sizeof(winceLock)); + /* If mapping failed, close the shared memory handle and erase it */ + if( !pFile->shared ){ + pFile->lastErrno = osGetLastError(); + winLogError(SQLITE_IOERR, pFile->lastErrno, + "winceCreateLock2", zFilename); + bLogged = TRUE; + osCloseHandle(pFile->hShared); + pFile->hShared = NULL; + } + } + + /* If shared memory could not be created, then close the mutex and fail */ + if( pFile->hShared==NULL ){ + if( !bLogged ){ + pFile->lastErrno = lastErrno; + winLogError(SQLITE_IOERR, pFile->lastErrno, + "winceCreateLock3", zFilename); + bLogged = TRUE; + } + winceMutexRelease(pFile->hMutex); + osCloseHandle(pFile->hMutex); + pFile->hMutex = NULL; + return SQLITE_IOERR; + } + + /* Initialize the shared memory if we're supposed to */ + if( bInit ){ + memset(pFile->shared, 0, sizeof(winceLock)); + } + + winceMutexRelease(pFile->hMutex); + return SQLITE_OK; +} + +/* +** Destroy the part of winFile that deals with wince locks +*/ +static void winceDestroyLock(winFile *pFile){ + if (pFile->hMutex){ + /* Acquire the mutex */ + winceMutexAcquire(pFile->hMutex); + + /* The following blocks should probably assert in debug mode, but they + are to cleanup in case any locks remained open */ + if (pFile->local.nReaders){ + pFile->shared->nReaders --; + } + if (pFile->local.bReserved){ + pFile->shared->bReserved = FALSE; + } + if (pFile->local.bPending){ + pFile->shared->bPending = FALSE; + } + if (pFile->local.bExclusive){ + pFile->shared->bExclusive = FALSE; + } + + /* De-reference and close our copy of the shared memory handle */ + osUnmapViewOfFile(pFile->shared); + osCloseHandle(pFile->hShared); + + /* Done with the mutex */ + winceMutexRelease(pFile->hMutex); + osCloseHandle(pFile->hMutex); + pFile->hMutex = NULL; + } +} + +/* +** An implementation of the LockFile() API of Windows for CE +*/ +static BOOL winceLockFile( + LPHANDLE phFile, + DWORD dwFileOffsetLow, + DWORD dwFileOffsetHigh, + DWORD nNumberOfBytesToLockLow, + DWORD nNumberOfBytesToLockHigh +){ + winFile *pFile = HANDLE_TO_WINFILE(phFile); + BOOL bReturn = FALSE; + + UNUSED_PARAMETER(dwFileOffsetHigh); + UNUSED_PARAMETER(nNumberOfBytesToLockHigh); + + if (!pFile->hMutex) return TRUE; + winceMutexAcquire(pFile->hMutex); + + /* Wanting an exclusive lock? */ + if (dwFileOffsetLow == (DWORD)SHARED_FIRST + && nNumberOfBytesToLockLow == (DWORD)SHARED_SIZE){ + if (pFile->shared->nReaders == 0 && pFile->shared->bExclusive == 0){ + pFile->shared->bExclusive = TRUE; + pFile->local.bExclusive = TRUE; + bReturn = TRUE; + } + } + + /* Want a read-only lock? */ + else if (dwFileOffsetLow == (DWORD)SHARED_FIRST && + nNumberOfBytesToLockLow == 1){ + if (pFile->shared->bExclusive == 0){ + pFile->local.nReaders ++; + if (pFile->local.nReaders == 1){ + pFile->shared->nReaders ++; + } + bReturn = TRUE; + } + } + + /* Want a pending lock? */ + else if (dwFileOffsetLow == (DWORD)PENDING_BYTE + && nNumberOfBytesToLockLow == 1){ + /* If no pending lock has been acquired, then acquire it */ + if (pFile->shared->bPending == 0) { + pFile->shared->bPending = TRUE; + pFile->local.bPending = TRUE; + bReturn = TRUE; + } + } + + /* Want a reserved lock? */ + else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE + && nNumberOfBytesToLockLow == 1){ + if (pFile->shared->bReserved == 0) { + pFile->shared->bReserved = TRUE; + pFile->local.bReserved = TRUE; + bReturn = TRUE; + } + } + + winceMutexRelease(pFile->hMutex); + return bReturn; +} + +/* +** An implementation of the UnlockFile API of Windows for CE +*/ +static BOOL winceUnlockFile( + LPHANDLE phFile, + DWORD dwFileOffsetLow, + DWORD dwFileOffsetHigh, + DWORD nNumberOfBytesToUnlockLow, + DWORD nNumberOfBytesToUnlockHigh +){ + winFile *pFile = HANDLE_TO_WINFILE(phFile); + BOOL bReturn = FALSE; + + UNUSED_PARAMETER(dwFileOffsetHigh); + UNUSED_PARAMETER(nNumberOfBytesToUnlockHigh); + + if (!pFile->hMutex) return TRUE; + winceMutexAcquire(pFile->hMutex); + + /* Releasing a reader lock or an exclusive lock */ + if (dwFileOffsetLow == (DWORD)SHARED_FIRST){ + /* Did we have an exclusive lock? */ + if (pFile->local.bExclusive){ + assert(nNumberOfBytesToUnlockLow == (DWORD)SHARED_SIZE); + pFile->local.bExclusive = FALSE; + pFile->shared->bExclusive = FALSE; + bReturn = TRUE; + } + + /* Did we just have a reader lock? */ + else if (pFile->local.nReaders){ + assert(nNumberOfBytesToUnlockLow == (DWORD)SHARED_SIZE + || nNumberOfBytesToUnlockLow == 1); + pFile->local.nReaders --; + if (pFile->local.nReaders == 0) + { + pFile->shared->nReaders --; + } + bReturn = TRUE; + } + } + + /* Releasing a pending lock */ + else if (dwFileOffsetLow == (DWORD)PENDING_BYTE + && nNumberOfBytesToUnlockLow == 1){ + if (pFile->local.bPending){ + pFile->local.bPending = FALSE; + pFile->shared->bPending = FALSE; + bReturn = TRUE; + } + } + /* Releasing a reserved lock */ + else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE + && nNumberOfBytesToUnlockLow == 1){ + if (pFile->local.bReserved) { + pFile->local.bReserved = FALSE; + pFile->shared->bReserved = FALSE; + bReturn = TRUE; + } + } + + winceMutexRelease(pFile->hMutex); + return bReturn; +} +/* +** End of the special code for wince +*****************************************************************************/ +#endif /* SQLITE_OS_WINCE */ + +/* +** Lock a file region. +*/ +static BOOL winLockFile( + LPHANDLE phFile, + DWORD flags, + DWORD offsetLow, + DWORD offsetHigh, + DWORD numBytesLow, + DWORD numBytesHigh +){ +#if SQLITE_OS_WINCE + /* + ** NOTE: Windows CE is handled differently here due its lack of the Win32 + ** API LockFile. + */ + return winceLockFile(phFile, offsetLow, offsetHigh, + numBytesLow, numBytesHigh); +#else + if( osIsNT() ){ + OVERLAPPED ovlp; + memset(&ovlp, 0, sizeof(OVERLAPPED)); + ovlp.Offset = offsetLow; + ovlp.OffsetHigh = offsetHigh; + return osLockFileEx(*phFile, flags, 0, numBytesLow, numBytesHigh, &ovlp); +#ifdef SQLITE_WIN32_HAS_ANSI + }else{ + return osLockFile(*phFile, offsetLow, offsetHigh, numBytesLow, + numBytesHigh); +#endif + } +#endif +} + +#ifndef SQLITE_OMIT_WAL +/* +** Lock a region of nByte bytes starting at offset offset of file hFile. +** Take an EXCLUSIVE lock if parameter bExclusive is true, or a SHARED lock +** otherwise. If nMs is greater than zero and the lock cannot be obtained +** immediately, block for that many ms before giving up. +** +** This function returns SQLITE_OK if the lock is obtained successfully. If +** some other process holds the lock, SQLITE_BUSY is returned if nMs==0, or +** SQLITE_BUSY_TIMEOUT otherwise. Or, if an error occurs, SQLITE_IOERR. +*/ +static int winHandleLockTimeout( + HANDLE hFile, + DWORD offset, + DWORD nByte, + int bExcl, + DWORD nMs +){ + DWORD flags = LOCKFILE_FAIL_IMMEDIATELY | (bExcl?LOCKFILE_EXCLUSIVE_LOCK:0); + int rc = SQLITE_OK; + BOOL ret; + + if( !osIsNT() ){ + ret = winLockFile(&hFile, flags, offset, 0, nByte, 0); + }else{ + OVERLAPPED ovlp; + memset(&ovlp, 0, sizeof(OVERLAPPED)); + ovlp.Offset = offset; + +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + if( nMs!=0 ){ + flags &= ~LOCKFILE_FAIL_IMMEDIATELY; + } + ovlp.hEvent = osCreateEvent(NULL, TRUE, FALSE, NULL); + if( ovlp.hEvent==NULL ){ + return SQLITE_IOERR_LOCK; + } +#endif + + ret = osLockFileEx(hFile, flags, 0, nByte, 0, &ovlp); + +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + /* If SQLITE_ENABLE_SETLK_TIMEOUT is defined, then the file-handle was + ** opened with FILE_FLAG_OVERHEAD specified. In this case, the call to + ** LockFileEx() may fail because the request is still pending. This can + ** happen even if LOCKFILE_FAIL_IMMEDIATELY was specified. + ** + ** If nMs is 0, then LOCKFILE_FAIL_IMMEDIATELY was set in the flags + ** passed to LockFileEx(). In this case, if the operation is pending, + ** block indefinitely until it is finished. + ** + ** Otherwise, wait for up to nMs ms for the operation to finish. nMs + ** may be set to INFINITE. + */ + if( !ret && GetLastError()==ERROR_IO_PENDING ){ + DWORD nDelay = (nMs==0 ? INFINITE : nMs); + DWORD res = osWaitForSingleObject(ovlp.hEvent, nDelay); + if( res==WAIT_OBJECT_0 ){ + ret = TRUE; + }else if( res==WAIT_TIMEOUT ){ +#if SQLITE_ENABLE_SETLK_TIMEOUT==1 + rc = SQLITE_BUSY_TIMEOUT; +#else + rc = SQLITE_BUSY; +#endif + }else{ + /* Some other error has occurred */ + rc = SQLITE_IOERR_LOCK; + } + + /* If it is still pending, cancel the LockFileEx() call. */ + osCancelIo(hFile); + } + + osCloseHandle(ovlp.hEvent); +#endif + } + + if( rc==SQLITE_OK && !ret ){ + rc = SQLITE_BUSY; + } + return rc; +} +#endif /* #ifndef SQLITE_OMIT_WAL */ + +/* +** Unlock a file region. + */ +static BOOL winUnlockFile( + LPHANDLE phFile, + DWORD offsetLow, + DWORD offsetHigh, + DWORD numBytesLow, + DWORD numBytesHigh +){ +#if SQLITE_OS_WINCE + /* + ** NOTE: Windows CE is handled differently here due its lack of the Win32 + ** API UnlockFile. + */ + return winceUnlockFile(phFile, offsetLow, offsetHigh, + numBytesLow, numBytesHigh); +#else + if( osIsNT() ){ + OVERLAPPED ovlp; + memset(&ovlp, 0, sizeof(OVERLAPPED)); + ovlp.Offset = offsetLow; + ovlp.OffsetHigh = offsetHigh; + return osUnlockFileEx(*phFile, 0, numBytesLow, numBytesHigh, &ovlp); +#ifdef SQLITE_WIN32_HAS_ANSI + }else{ + return osUnlockFile(*phFile, offsetLow, offsetHigh, numBytesLow, + numBytesHigh); +#endif + } +#endif +} + +#ifndef SQLITE_OMIT_WAL +/* +** Remove an nByte lock starting at offset iOff from HANDLE h. +*/ +static int winHandleUnlock(HANDLE h, int iOff, int nByte){ + BOOL ret = winUnlockFile(&h, iOff, 0, nByte, 0); + return (ret ? SQLITE_OK : SQLITE_IOERR_UNLOCK); +} +#endif + +/***************************************************************************** +** The next group of routines implement the I/O methods specified +** by the sqlite3_io_methods object. +******************************************************************************/ + +/* +** Some Microsoft compilers lack this definition. +*/ +#ifndef INVALID_SET_FILE_POINTER +# define INVALID_SET_FILE_POINTER ((DWORD)-1) +#endif + +/* +** Seek the file handle h to offset nByte of the file. +** +** If successful, return SQLITE_OK. Or, if an error occurs, return an SQLite +** error code. +*/ +static int winHandleSeek(HANDLE h, sqlite3_int64 iOffset){ + int rc = SQLITE_OK; /* Return value */ + +#if !SQLITE_OS_WINRT + LONG upperBits; /* Most sig. 32 bits of new offset */ + LONG lowerBits; /* Least sig. 32 bits of new offset */ + DWORD dwRet; /* Value returned by SetFilePointer() */ + + upperBits = (LONG)((iOffset>>32) & 0x7fffffff); + lowerBits = (LONG)(iOffset & 0xffffffff); + + dwRet = osSetFilePointer(h, lowerBits, &upperBits, FILE_BEGIN); + + /* API oddity: If successful, SetFilePointer() returns a dword + ** containing the lower 32-bits of the new file-offset. Or, if it fails, + ** it returns INVALID_SET_FILE_POINTER. However according to MSDN, + ** INVALID_SET_FILE_POINTER may also be a valid new offset. So to determine + ** whether an error has actually occurred, it is also necessary to call + ** GetLastError(). */ + if( dwRet==INVALID_SET_FILE_POINTER ){ + DWORD lastErrno = osGetLastError(); + if( lastErrno!=NO_ERROR ){ + rc = SQLITE_IOERR_SEEK; + } + } +#else + /* This implementation works for WinRT. */ + LARGE_INTEGER x; /* The new offset */ + BOOL bRet; /* Value returned by SetFilePointerEx() */ + + x.QuadPart = iOffset; + bRet = osSetFilePointerEx(h, x, 0, FILE_BEGIN); + + if(!bRet){ + rc = SQLITE_IOERR_SEEK; + } +#endif + + OSTRACE(("SEEK file=%p, offset=%lld rc=%s\n", h, iOffset, sqlite3ErrName(rc))); + return rc; +} + +/* +** Move the current position of the file handle passed as the first +** argument to offset iOffset within the file. If successful, return 0. +** Otherwise, set pFile->lastErrno and return non-zero. +*/ +static int winSeekFile(winFile *pFile, sqlite3_int64 iOffset){ + int rc; + + rc = winHandleSeek(pFile->h, iOffset); + if( rc!=SQLITE_OK ){ + pFile->lastErrno = osGetLastError(); + winLogError(rc, pFile->lastErrno, "winSeekFile", pFile->zPath); + } + return rc; +} + + +#if SQLITE_MAX_MMAP_SIZE>0 +/* Forward references to VFS helper methods used for memory mapped files */ +static int winMapfile(winFile*, sqlite3_int64); +static int winUnmapfile(winFile*); +#endif + +/* +** Close a file. +** +** It is reported that an attempt to close a handle might sometimes +** fail. This is a very unreasonable result, but Windows is notorious +** for being unreasonable so I do not doubt that it might happen. If +** the close fails, we pause for 100 milliseconds and try again. As +** many as MX_CLOSE_ATTEMPT attempts to close the handle are made before +** giving up and returning an error. +*/ +#define MX_CLOSE_ATTEMPT 3 +static int winClose(sqlite3_file *id){ + int rc, cnt = 0; + winFile *pFile = (winFile*)id; + + assert( id!=0 ); +#ifndef SQLITE_OMIT_WAL + assert( pFile->pShm==0 ); +#endif + assert( pFile->h!=NULL && pFile->h!=INVALID_HANDLE_VALUE ); + OSTRACE(("CLOSE pid=%lu, pFile=%p, file=%p\n", + osGetCurrentProcessId(), pFile, pFile->h)); + +#if SQLITE_MAX_MMAP_SIZE>0 + winUnmapfile(pFile); +#endif + + do{ + rc = osCloseHandle(pFile->h); + /* SimulateIOError( rc=0; cnt=MX_CLOSE_ATTEMPT; ); */ + }while( rc==0 && ++cnt < MX_CLOSE_ATTEMPT && (sqlite3_win32_sleep(100), 1) ); +#if SQLITE_OS_WINCE +#define WINCE_DELETION_ATTEMPTS 3 + { + winVfsAppData *pAppData = (winVfsAppData*)pFile->pVfs->pAppData; + if( pAppData==NULL || !pAppData->bNoLock ){ + winceDestroyLock(pFile); + } + } + if( pFile->zDeleteOnClose ){ + int cnt = 0; + while( + osDeleteFileW(pFile->zDeleteOnClose)==0 + && osGetFileAttributesW(pFile->zDeleteOnClose)!=0xffffffff + && cnt++ < WINCE_DELETION_ATTEMPTS + ){ + sqlite3_win32_sleep(100); /* Wait a little before trying again */ + } + sqlite3_free(pFile->zDeleteOnClose); + } +#endif + if( rc ){ + pFile->h = NULL; + } + OpenCounter(-1); + OSTRACE(("CLOSE pid=%lu, pFile=%p, file=%p, rc=%s\n", + osGetCurrentProcessId(), pFile, pFile->h, rc ? "ok" : "failed")); + return rc ? SQLITE_OK + : winLogError(SQLITE_IOERR_CLOSE, osGetLastError(), + "winClose", pFile->zPath); +} + +/* +** Read data from a file into a buffer. Return SQLITE_OK if all +** bytes were read successfully and SQLITE_IOERR if anything goes +** wrong. +*/ +static int winRead( + sqlite3_file *id, /* File to read from */ + void *pBuf, /* Write content into this buffer */ + int amt, /* Number of bytes to read */ + sqlite3_int64 offset /* Begin reading at this offset */ +){ +#if !SQLITE_OS_WINCE && !defined(SQLITE_WIN32_NO_OVERLAPPED) + OVERLAPPED overlapped; /* The offset for ReadFile. */ +#endif + winFile *pFile = (winFile*)id; /* file handle */ + DWORD nRead; /* Number of bytes actually read from file */ + int nRetry = 0; /* Number of retrys */ + + assert( id!=0 ); + assert( amt>0 ); + assert( offset>=0 ); + SimulateIOError(return SQLITE_IOERR_READ); + OSTRACE(("READ pid=%lu, pFile=%p, file=%p, buffer=%p, amount=%d, " + "offset=%lld, lock=%d\n", osGetCurrentProcessId(), pFile, + pFile->h, pBuf, amt, offset, pFile->locktype)); + +#if SQLITE_MAX_MMAP_SIZE>0 + /* Deal with as much of this read request as possible by transferring + ** data from the memory mapping using memcpy(). */ + if( offsetmmapSize ){ + if( offset+amt <= pFile->mmapSize ){ + memcpy(pBuf, &((u8 *)(pFile->pMapRegion))[offset], amt); + OSTRACE(("READ-MMAP pid=%lu, pFile=%p, file=%p, rc=SQLITE_OK\n", + osGetCurrentProcessId(), pFile, pFile->h)); + return SQLITE_OK; + }else{ + int nCopy = (int)(pFile->mmapSize - offset); + memcpy(pBuf, &((u8 *)(pFile->pMapRegion))[offset], nCopy); + pBuf = &((u8 *)pBuf)[nCopy]; + amt -= nCopy; + offset += nCopy; + } + } +#endif + +#if SQLITE_OS_WINCE || defined(SQLITE_WIN32_NO_OVERLAPPED) + if( winSeekFile(pFile, offset) ){ + OSTRACE(("READ pid=%lu, pFile=%p, file=%p, rc=SQLITE_FULL\n", + osGetCurrentProcessId(), pFile, pFile->h)); + return SQLITE_FULL; + } + while( !osReadFile(pFile->h, pBuf, amt, &nRead, 0) ){ +#else + memset(&overlapped, 0, sizeof(OVERLAPPED)); + overlapped.Offset = (LONG)(offset & 0xffffffff); + overlapped.OffsetHigh = (LONG)((offset>>32) & 0x7fffffff); + while( !osReadFile(pFile->h, pBuf, amt, &nRead, &overlapped) && + osGetLastError()!=ERROR_HANDLE_EOF ){ +#endif + DWORD lastErrno; + if( winRetryIoerr(&nRetry, &lastErrno) ) continue; + pFile->lastErrno = lastErrno; + OSTRACE(("READ pid=%lu, pFile=%p, file=%p, rc=SQLITE_IOERR_READ\n", + osGetCurrentProcessId(), pFile, pFile->h)); + return winLogError(SQLITE_IOERR_READ, pFile->lastErrno, + "winRead", pFile->zPath); + } + winLogIoerr(nRetry, __LINE__); + if( nRead<(DWORD)amt ){ + /* Unread parts of the buffer must be zero-filled */ + memset(&((char*)pBuf)[nRead], 0, amt-nRead); + OSTRACE(("READ pid=%lu, pFile=%p, file=%p, rc=SQLITE_IOERR_SHORT_READ\n", + osGetCurrentProcessId(), pFile, pFile->h)); + return SQLITE_IOERR_SHORT_READ; + } + + OSTRACE(("READ pid=%lu, pFile=%p, file=%p, rc=SQLITE_OK\n", + osGetCurrentProcessId(), pFile, pFile->h)); + return SQLITE_OK; +} + +/* +** Write data from a buffer into a file. Return SQLITE_OK on success +** or some other error code on failure. +*/ +static int winWrite( + sqlite3_file *id, /* File to write into */ + const void *pBuf, /* The bytes to be written */ + int amt, /* Number of bytes to write */ + sqlite3_int64 offset /* Offset into the file to begin writing at */ +){ + int rc = 0; /* True if error has occurred, else false */ + winFile *pFile = (winFile*)id; /* File handle */ + int nRetry = 0; /* Number of retries */ + + assert( amt>0 ); + assert( pFile ); + SimulateIOError(return SQLITE_IOERR_WRITE); + SimulateDiskfullError(return SQLITE_FULL); + + OSTRACE(("WRITE pid=%lu, pFile=%p, file=%p, buffer=%p, amount=%d, " + "offset=%lld, lock=%d\n", osGetCurrentProcessId(), pFile, + pFile->h, pBuf, amt, offset, pFile->locktype)); + +#if defined(SQLITE_MMAP_READWRITE) && SQLITE_MAX_MMAP_SIZE>0 + /* Deal with as much of this write request as possible by transferring + ** data from the memory mapping using memcpy(). */ + if( offsetmmapSize ){ + if( offset+amt <= pFile->mmapSize ){ + memcpy(&((u8 *)(pFile->pMapRegion))[offset], pBuf, amt); + OSTRACE(("WRITE-MMAP pid=%lu, pFile=%p, file=%p, rc=SQLITE_OK\n", + osGetCurrentProcessId(), pFile, pFile->h)); + return SQLITE_OK; + }else{ + int nCopy = (int)(pFile->mmapSize - offset); + memcpy(&((u8 *)(pFile->pMapRegion))[offset], pBuf, nCopy); + pBuf = &((u8 *)pBuf)[nCopy]; + amt -= nCopy; + offset += nCopy; + } + } +#endif + +#if SQLITE_OS_WINCE || defined(SQLITE_WIN32_NO_OVERLAPPED) + rc = winSeekFile(pFile, offset); + if( rc==0 ){ +#else + { +#endif +#if !SQLITE_OS_WINCE && !defined(SQLITE_WIN32_NO_OVERLAPPED) + OVERLAPPED overlapped; /* The offset for WriteFile. */ +#endif + u8 *aRem = (u8 *)pBuf; /* Data yet to be written */ + int nRem = amt; /* Number of bytes yet to be written */ + DWORD nWrite; /* Bytes written by each WriteFile() call */ + DWORD lastErrno = NO_ERROR; /* Value returned by GetLastError() */ + +#if !SQLITE_OS_WINCE && !defined(SQLITE_WIN32_NO_OVERLAPPED) + memset(&overlapped, 0, sizeof(OVERLAPPED)); + overlapped.Offset = (LONG)(offset & 0xffffffff); + overlapped.OffsetHigh = (LONG)((offset>>32) & 0x7fffffff); +#endif + + while( nRem>0 ){ +#if SQLITE_OS_WINCE || defined(SQLITE_WIN32_NO_OVERLAPPED) + if( !osWriteFile(pFile->h, aRem, nRem, &nWrite, 0) ){ +#else + if( !osWriteFile(pFile->h, aRem, nRem, &nWrite, &overlapped) ){ +#endif + if( winRetryIoerr(&nRetry, &lastErrno) ) continue; + break; + } + assert( nWrite==0 || nWrite<=(DWORD)nRem ); + if( nWrite==0 || nWrite>(DWORD)nRem ){ + lastErrno = osGetLastError(); + break; + } +#if !SQLITE_OS_WINCE && !defined(SQLITE_WIN32_NO_OVERLAPPED) + offset += nWrite; + overlapped.Offset = (LONG)(offset & 0xffffffff); + overlapped.OffsetHigh = (LONG)((offset>>32) & 0x7fffffff); +#endif + aRem += nWrite; + nRem -= nWrite; + } + if( nRem>0 ){ + pFile->lastErrno = lastErrno; + rc = 1; + } + } + + if( rc ){ + if( ( pFile->lastErrno==ERROR_HANDLE_DISK_FULL ) + || ( pFile->lastErrno==ERROR_DISK_FULL )){ + OSTRACE(("WRITE pid=%lu, pFile=%p, file=%p, rc=SQLITE_FULL\n", + osGetCurrentProcessId(), pFile, pFile->h)); + return winLogError(SQLITE_FULL, pFile->lastErrno, + "winWrite1", pFile->zPath); + } + OSTRACE(("WRITE pid=%lu, pFile=%p, file=%p, rc=SQLITE_IOERR_WRITE\n", + osGetCurrentProcessId(), pFile, pFile->h)); + return winLogError(SQLITE_IOERR_WRITE, pFile->lastErrno, + "winWrite2", pFile->zPath); + }else{ + winLogIoerr(nRetry, __LINE__); + } + OSTRACE(("WRITE pid=%lu, pFile=%p, file=%p, rc=SQLITE_OK\n", + osGetCurrentProcessId(), pFile, pFile->h)); + return SQLITE_OK; +} + +#ifndef SQLITE_OMIT_WAL +/* +** Truncate the file opened by handle h to nByte bytes in size. +*/ +static int winHandleTruncate(HANDLE h, sqlite3_int64 nByte){ + int rc = SQLITE_OK; /* Return code */ + rc = winHandleSeek(h, nByte); + if( rc==SQLITE_OK ){ + if( 0==osSetEndOfFile(h) ){ + rc = SQLITE_IOERR_TRUNCATE; + } + } + return rc; +} + +/* +** Determine the size in bytes of the file opened by the handle passed as +** the first argument. +*/ +static int winHandleSize(HANDLE h, sqlite3_int64 *pnByte){ + int rc = SQLITE_OK; + +#if SQLITE_OS_WINRT + FILE_STANDARD_INFO info; + BOOL b; + b = osGetFileInformationByHandleEx(h, FileStandardInfo, &info, sizeof(info)); + if( b ){ + *pnByte = info.EndOfFile.QuadPart; + }else{ + rc = SQLITE_IOERR_FSTAT; + } +#else + DWORD upperBits = 0; + DWORD lowerBits = 0; + + assert( pnByte ); + lowerBits = osGetFileSize(h, &upperBits); + *pnByte = (((sqlite3_int64)upperBits)<<32) + lowerBits; + if( lowerBits==INVALID_FILE_SIZE && osGetLastError()!=NO_ERROR ){ + rc = SQLITE_IOERR_FSTAT; + } +#endif + + return rc; +} + +/* +** Close the handle passed as the only argument. +*/ +static void winHandleClose(HANDLE h){ + if( h!=INVALID_HANDLE_VALUE ){ + osCloseHandle(h); + } +} +#endif /* #ifndef SQLITE_OMIT_WAL */ + +/* +** Truncate an open file to a specified size +*/ +static int winTruncate(sqlite3_file *id, sqlite3_int64 nByte){ + winFile *pFile = (winFile*)id; /* File handle object */ + int rc = SQLITE_OK; /* Return code for this function */ + DWORD lastErrno; +#if SQLITE_MAX_MMAP_SIZE>0 + sqlite3_int64 oldMmapSize; + if( pFile->nFetchOut>0 ){ + /* File truncation is a no-op if there are outstanding memory mapped + ** pages. This is because truncating the file means temporarily unmapping + ** the file, and that might delete memory out from under existing cursors. + ** + ** This can result in incremental vacuum not truncating the file, + ** if there is an active read cursor when the incremental vacuum occurs. + ** No real harm comes of this - the database file is not corrupted, + ** though some folks might complain that the file is bigger than it + ** needs to be. + ** + ** The only feasible work-around is to defer the truncation until after + ** all references to memory-mapped content are closed. That is doable, + ** but involves adding a few branches in the common write code path which + ** could slow down normal operations slightly. Hence, we have decided for + ** now to simply make transactions a no-op if there are pending reads. We + ** can maybe revisit this decision in the future. + */ + return SQLITE_OK; + } +#endif + + assert( pFile ); + SimulateIOError(return SQLITE_IOERR_TRUNCATE); + OSTRACE(("TRUNCATE pid=%lu, pFile=%p, file=%p, size=%lld, lock=%d\n", + osGetCurrentProcessId(), pFile, pFile->h, nByte, pFile->locktype)); + + /* If the user has configured a chunk-size for this file, truncate the + ** file so that it consists of an integer number of chunks (i.e. the + ** actual file size after the operation may be larger than the requested + ** size). + */ + if( pFile->szChunk>0 ){ + nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk; + } + +#if SQLITE_MAX_MMAP_SIZE>0 + if( pFile->pMapRegion ){ + oldMmapSize = pFile->mmapSize; + }else{ + oldMmapSize = 0; + } + winUnmapfile(pFile); +#endif + + /* SetEndOfFile() returns non-zero when successful, or zero when it fails. */ + if( winSeekFile(pFile, nByte) ){ + rc = winLogError(SQLITE_IOERR_TRUNCATE, pFile->lastErrno, + "winTruncate1", pFile->zPath); + }else if( 0==osSetEndOfFile(pFile->h) && + ((lastErrno = osGetLastError())!=ERROR_USER_MAPPED_FILE) ){ + pFile->lastErrno = lastErrno; + rc = winLogError(SQLITE_IOERR_TRUNCATE, pFile->lastErrno, + "winTruncate2", pFile->zPath); + } + +#if SQLITE_MAX_MMAP_SIZE>0 + if( rc==SQLITE_OK && oldMmapSize>0 ){ + if( oldMmapSize>nByte ){ + winMapfile(pFile, -1); + }else{ + winMapfile(pFile, oldMmapSize); + } + } +#endif + + OSTRACE(("TRUNCATE pid=%lu, pFile=%p, file=%p, rc=%s\n", + osGetCurrentProcessId(), pFile, pFile->h, sqlite3ErrName(rc))); + return rc; +} + +#ifdef SQLITE_TEST +/* +** Count the number of fullsyncs and normal syncs. This is used to test +** that syncs and fullsyncs are occurring at the right times. +*/ +SQLITE_API int sqlite3_sync_count = 0; +SQLITE_API int sqlite3_fullsync_count = 0; +#endif + +/* +** Make sure all writes to a particular file are committed to disk. +*/ +static int winSync(sqlite3_file *id, int flags){ +#ifndef SQLITE_NO_SYNC + /* + ** Used only when SQLITE_NO_SYNC is not defined. + */ + BOOL rc; +#endif +#if !defined(NDEBUG) || !defined(SQLITE_NO_SYNC) || \ + defined(SQLITE_HAVE_OS_TRACE) + /* + ** Used when SQLITE_NO_SYNC is not defined and by the assert() and/or + ** OSTRACE() macros. + */ + winFile *pFile = (winFile*)id; +#else + UNUSED_PARAMETER(id); +#endif + + assert( pFile ); + /* Check that one of SQLITE_SYNC_NORMAL or FULL was passed */ + assert((flags&0x0F)==SQLITE_SYNC_NORMAL + || (flags&0x0F)==SQLITE_SYNC_FULL + ); + + /* Unix cannot, but some systems may return SQLITE_FULL from here. This + ** line is to test that doing so does not cause any problems. + */ + SimulateDiskfullError( return SQLITE_FULL ); + + OSTRACE(("SYNC pid=%lu, pFile=%p, file=%p, flags=%x, lock=%d\n", + osGetCurrentProcessId(), pFile, pFile->h, flags, + pFile->locktype)); + +#ifndef SQLITE_TEST + UNUSED_PARAMETER(flags); +#else + if( (flags&0x0F)==SQLITE_SYNC_FULL ){ + sqlite3_fullsync_count++; + } + sqlite3_sync_count++; +#endif + + /* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a + ** no-op + */ +#ifdef SQLITE_NO_SYNC + OSTRACE(("SYNC-NOP pid=%lu, pFile=%p, file=%p, rc=SQLITE_OK\n", + osGetCurrentProcessId(), pFile, pFile->h)); + return SQLITE_OK; +#else +#if SQLITE_MAX_MMAP_SIZE>0 + if( pFile->pMapRegion ){ + if( osFlushViewOfFile(pFile->pMapRegion, 0) ){ + OSTRACE(("SYNC-MMAP pid=%lu, pFile=%p, pMapRegion=%p, " + "rc=SQLITE_OK\n", osGetCurrentProcessId(), + pFile, pFile->pMapRegion)); + }else{ + pFile->lastErrno = osGetLastError(); + OSTRACE(("SYNC-MMAP pid=%lu, pFile=%p, pMapRegion=%p, " + "rc=SQLITE_IOERR_MMAP\n", osGetCurrentProcessId(), + pFile, pFile->pMapRegion)); + return winLogError(SQLITE_IOERR_MMAP, pFile->lastErrno, + "winSync1", pFile->zPath); + } + } +#endif + rc = osFlushFileBuffers(pFile->h); + SimulateIOError( rc=FALSE ); + if( rc ){ + OSTRACE(("SYNC pid=%lu, pFile=%p, file=%p, rc=SQLITE_OK\n", + osGetCurrentProcessId(), pFile, pFile->h)); + return SQLITE_OK; + }else{ + pFile->lastErrno = osGetLastError(); + OSTRACE(("SYNC pid=%lu, pFile=%p, file=%p, rc=SQLITE_IOERR_FSYNC\n", + osGetCurrentProcessId(), pFile, pFile->h)); + return winLogError(SQLITE_IOERR_FSYNC, pFile->lastErrno, + "winSync2", pFile->zPath); + } +#endif +} + +/* +** Determine the current size of a file in bytes +*/ +static int winFileSize(sqlite3_file *id, sqlite3_int64 *pSize){ + winFile *pFile = (winFile*)id; + int rc = SQLITE_OK; + + assert( id!=0 ); + assert( pSize!=0 ); + SimulateIOError(return SQLITE_IOERR_FSTAT); + OSTRACE(("SIZE file=%p, pSize=%p\n", pFile->h, pSize)); + +#if SQLITE_OS_WINRT + { + FILE_STANDARD_INFO info; + if( osGetFileInformationByHandleEx(pFile->h, FileStandardInfo, + &info, sizeof(info)) ){ + *pSize = info.EndOfFile.QuadPart; + }else{ + pFile->lastErrno = osGetLastError(); + rc = winLogError(SQLITE_IOERR_FSTAT, pFile->lastErrno, + "winFileSize", pFile->zPath); + } + } +#else + { + DWORD upperBits; + DWORD lowerBits; + DWORD lastErrno; + + lowerBits = osGetFileSize(pFile->h, &upperBits); + *pSize = (((sqlite3_int64)upperBits)<<32) + lowerBits; + if( (lowerBits == INVALID_FILE_SIZE) + && ((lastErrno = osGetLastError())!=NO_ERROR) ){ + pFile->lastErrno = lastErrno; + rc = winLogError(SQLITE_IOERR_FSTAT, pFile->lastErrno, + "winFileSize", pFile->zPath); + } + } +#endif + OSTRACE(("SIZE file=%p, pSize=%p, *pSize=%lld, rc=%s\n", + pFile->h, pSize, *pSize, sqlite3ErrName(rc))); + return rc; +} + +/* +** LOCKFILE_FAIL_IMMEDIATELY is undefined on some Windows systems. +*/ +#ifndef LOCKFILE_FAIL_IMMEDIATELY +# define LOCKFILE_FAIL_IMMEDIATELY 1 +#endif + +#ifndef LOCKFILE_EXCLUSIVE_LOCK +# define LOCKFILE_EXCLUSIVE_LOCK 2 +#endif + +/* +** Historically, SQLite has used both the LockFile and LockFileEx functions. +** When the LockFile function was used, it was always expected to fail +** immediately if the lock could not be obtained. Also, it always expected to +** obtain an exclusive lock. These flags are used with the LockFileEx function +** and reflect those expectations; therefore, they should not be changed. +*/ +#ifndef SQLITE_LOCKFILE_FLAGS +# define SQLITE_LOCKFILE_FLAGS (LOCKFILE_FAIL_IMMEDIATELY | \ + LOCKFILE_EXCLUSIVE_LOCK) +#endif + +/* +** Currently, SQLite never calls the LockFileEx function without wanting the +** call to fail immediately if the lock cannot be obtained. +*/ +#ifndef SQLITE_LOCKFILEEX_FLAGS +# define SQLITE_LOCKFILEEX_FLAGS (LOCKFILE_FAIL_IMMEDIATELY) +#endif + +/* +** Acquire a reader lock. +** Different API routines are called depending on whether or not this +** is Win9x or WinNT. +*/ +static int winGetReadLock(winFile *pFile, int bBlock){ + int res; + DWORD mask = ~(bBlock ? LOCKFILE_FAIL_IMMEDIATELY : 0); + OSTRACE(("READ-LOCK file=%p, lock=%d\n", pFile->h, pFile->locktype)); + if( osIsNT() ){ +#if SQLITE_OS_WINCE + /* + ** NOTE: Windows CE is handled differently here due its lack of the Win32 + ** API LockFileEx. + */ + res = winceLockFile(&pFile->h, SHARED_FIRST, 0, 1, 0); +#else + res = winLockFile(&pFile->h, SQLITE_LOCKFILEEX_FLAGS&mask, SHARED_FIRST, 0, + SHARED_SIZE, 0); +#endif + } +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + int lk; + sqlite3_randomness(sizeof(lk), &lk); + pFile->sharedLockByte = (short)((lk & 0x7fffffff)%(SHARED_SIZE - 1)); + res = winLockFile(&pFile->h, SQLITE_LOCKFILE_FLAGS&mask, + SHARED_FIRST+pFile->sharedLockByte, 0, 1, 0); + } +#endif + if( res == 0 ){ + pFile->lastErrno = osGetLastError(); + /* No need to log a failure to lock */ + } + OSTRACE(("READ-LOCK file=%p, result=%d\n", pFile->h, res)); + return res; +} + +/* +** Undo a readlock +*/ +static int winUnlockReadLock(winFile *pFile){ + int res; + DWORD lastErrno; + OSTRACE(("READ-UNLOCK file=%p, lock=%d\n", pFile->h, pFile->locktype)); + if( osIsNT() ){ + res = winUnlockFile(&pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0); + } +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + res = winUnlockFile(&pFile->h, SHARED_FIRST+pFile->sharedLockByte, 0, 1, 0); + } +#endif + if( res==0 && ((lastErrno = osGetLastError())!=ERROR_NOT_LOCKED) ){ + pFile->lastErrno = lastErrno; + winLogError(SQLITE_IOERR_UNLOCK, pFile->lastErrno, + "winUnlockReadLock", pFile->zPath); + } + OSTRACE(("READ-UNLOCK file=%p, result=%d\n", pFile->h, res)); + return res; +} + +/* +** Lock the file with the lock specified by parameter locktype - one +** of the following: +** +** (1) SHARED_LOCK +** (2) RESERVED_LOCK +** (3) PENDING_LOCK +** (4) EXCLUSIVE_LOCK +** +** Sometimes when requesting one lock state, additional lock states +** are inserted in between. The locking might fail on one of the later +** transitions leaving the lock state different from what it started but +** still short of its goal. The following chart shows the allowed +** transitions and the inserted intermediate states: +** +** UNLOCKED -> SHARED +** SHARED -> RESERVED +** SHARED -> (PENDING) -> EXCLUSIVE +** RESERVED -> (PENDING) -> EXCLUSIVE +** PENDING -> EXCLUSIVE +** +** This routine will only increase a lock. The winUnlock() routine +** erases all locks at once and returns us immediately to locking level 0. +** It is not possible to lower the locking level one step at a time. You +** must go straight to locking level 0. +*/ +static int winLock(sqlite3_file *id, int locktype){ + int rc = SQLITE_OK; /* Return code from subroutines */ + int res = 1; /* Result of a Windows lock call */ + int newLocktype; /* Set pFile->locktype to this value before exiting */ + int gotPendingLock = 0;/* True if we acquired a PENDING lock this time */ + winFile *pFile = (winFile*)id; + DWORD lastErrno = NO_ERROR; + + assert( id!=0 ); + OSTRACE(("LOCK file=%p, oldLock=%d(%d), newLock=%d\n", + pFile->h, pFile->locktype, pFile->sharedLockByte, locktype)); + + /* If there is already a lock of this type or more restrictive on the + ** OsFile, do nothing. Don't use the end_lock: exit path, as + ** sqlite3OsEnterMutex() hasn't been called yet. + */ + if( pFile->locktype>=locktype ){ + OSTRACE(("LOCK-HELD file=%p, rc=SQLITE_OK\n", pFile->h)); + return SQLITE_OK; + } + + /* Do not allow any kind of write-lock on a read-only database + */ + if( (pFile->ctrlFlags & WINFILE_RDONLY)!=0 && locktype>=RESERVED_LOCK ){ + return SQLITE_IOERR_LOCK; + } + + /* Make sure the locking sequence is correct + */ + assert( pFile->locktype!=NO_LOCK || locktype==SHARED_LOCK ); + assert( locktype!=PENDING_LOCK ); + assert( locktype!=RESERVED_LOCK || pFile->locktype==SHARED_LOCK ); + + /* Lock the PENDING_LOCK byte if we need to acquire an EXCLUSIVE lock or + ** a SHARED lock. If we are acquiring a SHARED lock, the acquisition of + ** the PENDING_LOCK byte is temporary. + */ + newLocktype = pFile->locktype; + if( locktype==SHARED_LOCK + || (locktype==EXCLUSIVE_LOCK && pFile->locktype==RESERVED_LOCK) + ){ + int cnt = 3; + + /* Flags for the LockFileEx() call. This should be an exclusive lock if + ** this call is to obtain EXCLUSIVE, or a shared lock if this call is to + ** obtain SHARED. */ + int flags = LOCKFILE_FAIL_IMMEDIATELY; + if( locktype==EXCLUSIVE_LOCK ){ + flags |= LOCKFILE_EXCLUSIVE_LOCK; + } + while( cnt>0 ){ + /* Try 3 times to get the pending lock. This is needed to work + ** around problems caused by indexing and/or anti-virus software on + ** Windows systems. + ** + ** If you are using this code as a model for alternative VFSes, do not + ** copy this retry logic. It is a hack intended for Windows only. */ + res = winLockFile(&pFile->h, flags, PENDING_BYTE, 0, 1, 0); + if( res ) break; + + lastErrno = osGetLastError(); + OSTRACE(("LOCK-PENDING-FAIL file=%p, count=%d, result=%d\n", + pFile->h, cnt, res + )); + + if( lastErrno==ERROR_INVALID_HANDLE ){ + pFile->lastErrno = lastErrno; + rc = SQLITE_IOERR_LOCK; + OSTRACE(("LOCK-FAIL file=%p, count=%d, rc=%s\n", + pFile->h, cnt, sqlite3ErrName(rc) + )); + return rc; + } + + cnt--; + if( cnt>0 ) sqlite3_win32_sleep(1); + } + gotPendingLock = res; + } + + /* Acquire a shared lock + */ + if( locktype==SHARED_LOCK && res ){ + assert( pFile->locktype==NO_LOCK ); +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + res = winGetReadLock(pFile, pFile->bBlockOnConnect); +#else + res = winGetReadLock(pFile, 0); +#endif + if( res ){ + newLocktype = SHARED_LOCK; + }else{ + lastErrno = osGetLastError(); + } + } + + /* Acquire a RESERVED lock + */ + if( locktype==RESERVED_LOCK && res ){ + assert( pFile->locktype==SHARED_LOCK ); + res = winLockFile(&pFile->h, SQLITE_LOCKFILE_FLAGS, RESERVED_BYTE, 0, 1, 0); + if( res ){ + newLocktype = RESERVED_LOCK; + }else{ + lastErrno = osGetLastError(); + } + } + + /* Acquire a PENDING lock + */ + if( locktype==EXCLUSIVE_LOCK && res ){ + newLocktype = PENDING_LOCK; + gotPendingLock = 0; + } + + /* Acquire an EXCLUSIVE lock + */ + if( locktype==EXCLUSIVE_LOCK && res ){ + assert( pFile->locktype>=SHARED_LOCK ); + (void)winUnlockReadLock(pFile); + res = winLockFile(&pFile->h, SQLITE_LOCKFILE_FLAGS, SHARED_FIRST, 0, + SHARED_SIZE, 0); + if( res ){ + newLocktype = EXCLUSIVE_LOCK; + }else{ + lastErrno = osGetLastError(); + winGetReadLock(pFile, 0); + } + } + + /* If we are holding a PENDING lock that ought to be released, then + ** release it now. + */ + if( gotPendingLock && locktype==SHARED_LOCK ){ + winUnlockFile(&pFile->h, PENDING_BYTE, 0, 1, 0); + } + + /* Update the state of the lock has held in the file descriptor then + ** return the appropriate result code. + */ + if( res ){ + rc = SQLITE_OK; + }else{ + pFile->lastErrno = lastErrno; + rc = SQLITE_BUSY; + OSTRACE(("LOCK-FAIL file=%p, wanted=%d, got=%d\n", + pFile->h, locktype, newLocktype)); + } + pFile->locktype = (u8)newLocktype; + OSTRACE(("LOCK file=%p, lock=%d, rc=%s\n", + pFile->h, pFile->locktype, sqlite3ErrName(rc))); + return rc; +} + +/* +** This routine checks if there is a RESERVED lock held on the specified +** file by this or any other process. If such a lock is held, return +** non-zero, otherwise zero. +*/ +static int winCheckReservedLock(sqlite3_file *id, int *pResOut){ + int res; + winFile *pFile = (winFile*)id; + + SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; ); + OSTRACE(("TEST-WR-LOCK file=%p, pResOut=%p\n", pFile->h, pResOut)); + + assert( id!=0 ); + if( pFile->locktype>=RESERVED_LOCK ){ + res = 1; + OSTRACE(("TEST-WR-LOCK file=%p, result=%d (local)\n", pFile->h, res)); + }else{ + res = winLockFile(&pFile->h, SQLITE_LOCKFILEEX_FLAGS,RESERVED_BYTE,0,1,0); + if( res ){ + winUnlockFile(&pFile->h, RESERVED_BYTE, 0, 1, 0); + } + res = !res; + OSTRACE(("TEST-WR-LOCK file=%p, result=%d (remote)\n", pFile->h, res)); + } + *pResOut = res; + OSTRACE(("TEST-WR-LOCK file=%p, pResOut=%p, *pResOut=%d, rc=SQLITE_OK\n", + pFile->h, pResOut, *pResOut)); + return SQLITE_OK; +} + +/* +** Lower the locking level on file descriptor id to locktype. locktype +** must be either NO_LOCK or SHARED_LOCK. +** +** If the locking level of the file descriptor is already at or below +** the requested locking level, this routine is a no-op. +** +** It is not possible for this routine to fail if the second argument +** is NO_LOCK. If the second argument is SHARED_LOCK then this routine +** might return SQLITE_IOERR; +*/ +static int winUnlock(sqlite3_file *id, int locktype){ + int type; + winFile *pFile = (winFile*)id; + int rc = SQLITE_OK; + assert( pFile!=0 ); + assert( locktype<=SHARED_LOCK ); + OSTRACE(("UNLOCK file=%p, oldLock=%d(%d), newLock=%d\n", + pFile->h, pFile->locktype, pFile->sharedLockByte, locktype)); + type = pFile->locktype; + if( type>=EXCLUSIVE_LOCK ){ + winUnlockFile(&pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0); + if( locktype==SHARED_LOCK && !winGetReadLock(pFile, 0) ){ + /* This should never happen. We should always be able to + ** reacquire the read lock */ + rc = winLogError(SQLITE_IOERR_UNLOCK, osGetLastError(), + "winUnlock", pFile->zPath); + } + } + if( type>=RESERVED_LOCK ){ + winUnlockFile(&pFile->h, RESERVED_BYTE, 0, 1, 0); + } + if( locktype==NO_LOCK && type>=SHARED_LOCK ){ + winUnlockReadLock(pFile); + } + if( type>=PENDING_LOCK ){ + winUnlockFile(&pFile->h, PENDING_BYTE, 0, 1, 0); + } + pFile->locktype = (u8)locktype; + OSTRACE(("UNLOCK file=%p, lock=%d, rc=%s\n", + pFile->h, pFile->locktype, sqlite3ErrName(rc))); + return rc; +} + +/****************************************************************************** +****************************** No-op Locking ********************************** +** +** Of the various locking implementations available, this is by far the +** simplest: locking is ignored. No attempt is made to lock the database +** file for reading or writing. +** +** This locking mode is appropriate for use on read-only databases +** (ex: databases that are burned into CD-ROM, for example.) It can +** also be used if the application employs some external mechanism to +** prevent simultaneous access of the same database by two or more +** database connections. But there is a serious risk of database +** corruption if this locking mode is used in situations where multiple +** database connections are accessing the same database file at the same +** time and one or more of those connections are writing. +*/ + +static int winNolockLock(sqlite3_file *id, int locktype){ + UNUSED_PARAMETER(id); + UNUSED_PARAMETER(locktype); + return SQLITE_OK; +} + +static int winNolockCheckReservedLock(sqlite3_file *id, int *pResOut){ + UNUSED_PARAMETER(id); + UNUSED_PARAMETER(pResOut); + return SQLITE_OK; +} + +static int winNolockUnlock(sqlite3_file *id, int locktype){ + UNUSED_PARAMETER(id); + UNUSED_PARAMETER(locktype); + return SQLITE_OK; +} + +/******************* End of the no-op lock implementation ********************* +******************************************************************************/ + +/* +** If *pArg is initially negative then this is a query. Set *pArg to +** 1 or 0 depending on whether or not bit mask of pFile->ctrlFlags is set. +** +** If *pArg is 0 or 1, then clear or set the mask bit of pFile->ctrlFlags. +*/ +static void winModeBit(winFile *pFile, unsigned char mask, int *pArg){ + if( *pArg<0 ){ + *pArg = (pFile->ctrlFlags & mask)!=0; + }else if( (*pArg)==0 ){ + pFile->ctrlFlags &= ~mask; + }else{ + pFile->ctrlFlags |= mask; + } +} + +/* Forward references to VFS helper methods used for temporary files */ +static int winGetTempname(sqlite3_vfs *, char **); +static int winIsDir(const void *); +static BOOL winIsLongPathPrefix(const char *); +static BOOL winIsDriveLetterAndColon(const char *); + +/* +** Control and query of the open file handle. +*/ +static int winFileControl(sqlite3_file *id, int op, void *pArg){ + winFile *pFile = (winFile*)id; + OSTRACE(("FCNTL file=%p, op=%d, pArg=%p\n", pFile->h, op, pArg)); + switch( op ){ + case SQLITE_FCNTL_LOCKSTATE: { + *(int*)pArg = pFile->locktype; + OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h)); + return SQLITE_OK; + } + case SQLITE_FCNTL_LAST_ERRNO: { + *(int*)pArg = (int)pFile->lastErrno; + OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h)); + return SQLITE_OK; + } + case SQLITE_FCNTL_CHUNK_SIZE: { + pFile->szChunk = *(int *)pArg; + OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h)); + return SQLITE_OK; + } + case SQLITE_FCNTL_SIZE_HINT: { + if( pFile->szChunk>0 ){ + sqlite3_int64 oldSz; + int rc = winFileSize(id, &oldSz); + if( rc==SQLITE_OK ){ + sqlite3_int64 newSz = *(sqlite3_int64*)pArg; + if( newSz>oldSz ){ + SimulateIOErrorBenign(1); + rc = winTruncate(id, newSz); + SimulateIOErrorBenign(0); + } + } + OSTRACE(("FCNTL file=%p, rc=%s\n", pFile->h, sqlite3ErrName(rc))); + return rc; + } + OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h)); + return SQLITE_OK; + } + case SQLITE_FCNTL_PERSIST_WAL: { + winModeBit(pFile, WINFILE_PERSIST_WAL, (int*)pArg); + OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h)); + return SQLITE_OK; + } + case SQLITE_FCNTL_POWERSAFE_OVERWRITE: { + winModeBit(pFile, WINFILE_PSOW, (int*)pArg); + OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h)); + return SQLITE_OK; + } + case SQLITE_FCNTL_VFSNAME: { + *(char**)pArg = sqlite3_mprintf("%s", pFile->pVfs->zName); + OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h)); + return SQLITE_OK; + } + case SQLITE_FCNTL_WIN32_AV_RETRY: { + int *a = (int*)pArg; + if( a[0]>0 ){ + winIoerrRetry = a[0]; + }else{ + a[0] = winIoerrRetry; + } + if( a[1]>0 ){ + winIoerrRetryDelay = a[1]; + }else{ + a[1] = winIoerrRetryDelay; + } + OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h)); + return SQLITE_OK; + } + case SQLITE_FCNTL_WIN32_GET_HANDLE: { + LPHANDLE phFile = (LPHANDLE)pArg; + *phFile = pFile->h; + OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h)); + return SQLITE_OK; + } +#ifdef SQLITE_TEST + case SQLITE_FCNTL_WIN32_SET_HANDLE: { + LPHANDLE phFile = (LPHANDLE)pArg; + HANDLE hOldFile = pFile->h; + pFile->h = *phFile; + *phFile = hOldFile; + OSTRACE(("FCNTL oldFile=%p, newFile=%p, rc=SQLITE_OK\n", + hOldFile, pFile->h)); + return SQLITE_OK; + } +#endif + case SQLITE_FCNTL_NULL_IO: { + (void)osCloseHandle(pFile->h); + pFile->h = NULL; + return SQLITE_OK; + } + case SQLITE_FCNTL_TEMPFILENAME: { + char *zTFile = 0; + int rc = winGetTempname(pFile->pVfs, &zTFile); + if( rc==SQLITE_OK ){ + *(char**)pArg = zTFile; + } + OSTRACE(("FCNTL file=%p, rc=%s\n", pFile->h, sqlite3ErrName(rc))); + return rc; + } +#if SQLITE_MAX_MMAP_SIZE>0 + case SQLITE_FCNTL_MMAP_SIZE: { + i64 newLimit = *(i64*)pArg; + int rc = SQLITE_OK; + if( newLimit>sqlite3GlobalConfig.mxMmap ){ + newLimit = sqlite3GlobalConfig.mxMmap; + } + + /* The value of newLimit may be eventually cast to (SIZE_T) and passed + ** to MapViewOfFile(). Restrict its value to 2GB if (SIZE_T) is not at + ** least a 64-bit type. */ + if( newLimit>0 && sizeof(SIZE_T)<8 ){ + newLimit = (newLimit & 0x7FFFFFFF); + } + + *(i64*)pArg = pFile->mmapSizeMax; + if( newLimit>=0 && newLimit!=pFile->mmapSizeMax && pFile->nFetchOut==0 ){ + pFile->mmapSizeMax = newLimit; + if( pFile->mmapSize>0 ){ + winUnmapfile(pFile); + rc = winMapfile(pFile, -1); + } + } + OSTRACE(("FCNTL file=%p, rc=%s\n", pFile->h, sqlite3ErrName(rc))); + return rc; + } +#endif + +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + case SQLITE_FCNTL_LOCK_TIMEOUT: { + int iOld = pFile->iBusyTimeout; + int iNew = *(int*)pArg; +#if SQLITE_ENABLE_SETLK_TIMEOUT==1 + pFile->iBusyTimeout = (iNew < 0) ? INFINITE : (DWORD)iNew; +#elif SQLITE_ENABLE_SETLK_TIMEOUT==2 + pFile->iBusyTimeout = (DWORD)(!!iNew); +#else +# error "SQLITE_ENABLE_SETLK_TIMEOUT must be set to 1 or 2" +#endif + *(int*)pArg = iOld; + return SQLITE_OK; + } + case SQLITE_FCNTL_BLOCK_ON_CONNECT: { + int iNew = *(int*)pArg; + pFile->bBlockOnConnect = iNew; + return SQLITE_OK; + } +#endif /* SQLITE_ENABLE_SETLK_TIMEOUT */ + +#if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_FILESTAT) + case SQLITE_FCNTL_FILESTAT: { + sqlite3_str *pStr = (sqlite3_str*)pArg; + sqlite3_str_appendf(pStr, "{\"h\":%llu", (sqlite3_uint64)pFile->h); + sqlite3_str_appendf(pStr, ",\"vfs\":\"%s\"", pFile->pVfs->zName); + if( pFile->locktype ){ + static const char *azLock[] = { "SHARED", "RESERVED", + "PENDING", "EXCLUSIVE" }; + sqlite3_str_appendf(pStr, ",\"locktype\":\"%s\"", + azLock[pFile->locktype-1]); + } +#if SQLITE_MAX_MMAP_SIZE>0 + if( pFile->mmapSize ){ + sqlite3_str_appendf(pStr, ",\"mmapSize\":%lld", pFile->mmapSize); + sqlite3_str_appendf(pStr, ",\"nFetchOut\":%d", pFile->nFetchOut); + } +#endif + sqlite3_str_append(pStr, "}", 1); + return SQLITE_OK; + } +#endif /* SQLITE_DEBUG || SQLITE_ENABLE_FILESTAT */ + + } + OSTRACE(("FCNTL file=%p, rc=SQLITE_NOTFOUND\n", pFile->h)); + return SQLITE_NOTFOUND; +} + +/* +** Return the sector size in bytes of the underlying block device for +** the specified file. This is almost always 512 bytes, but may be +** larger for some devices. +** +** SQLite code assumes this function cannot fail. It also assumes that +** if two files are created in the same file-system directory (i.e. +** a database and its journal file) that the sector size will be the +** same for both. +*/ +static int winSectorSize(sqlite3_file *id){ + (void)id; + return SQLITE_DEFAULT_SECTOR_SIZE; +} + +/* +** Return a vector of device characteristics. +*/ +static int winDeviceCharacteristics(sqlite3_file *id){ + winFile *p = (winFile*)id; + return SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN | SQLITE_IOCAP_SUBPAGE_READ | + ((p->ctrlFlags & WINFILE_PSOW)?SQLITE_IOCAP_POWERSAFE_OVERWRITE:0); +} + +/* +** Windows will only let you create file view mappings +** on allocation size granularity boundaries. +** During sqlite3_os_init() we do a GetSystemInfo() +** to get the granularity size. +*/ +static SYSTEM_INFO winSysInfo; + +/* +** Convert a UTF-8 filename into whatever form the underlying +** operating system wants filenames in. Space to hold the result +** is obtained from malloc and must be freed by the calling +** function +** +** On Cygwin, 3 possible input forms are accepted: +** - If the filename starts with ":/" or ":\", +** it is converted to UTF-16 as-is. +** - If the filename contains '/', it is assumed to be a +** Cygwin absolute path, it is converted to a win32 +** absolute path in UTF-16. +** - Otherwise it must be a filename only, the win32 filename +** is returned in UTF-16. +** Note: If the function cygwin_conv_path() fails, only +** UTF-8 -> UTF-16 conversion will be done. This can only +** happen when the file path >32k, in which case winUtf8ToUnicode() +** will fail too. +*/ +static void *winConvertFromUtf8Filename(const char *zFilename){ + void *zConverted = 0; + if( osIsNT() ){ +#ifdef __CYGWIN__ + int nChar; + LPWSTR zWideFilename; + + if( osCygwin_conv_path && !(winIsDriveLetterAndColon(zFilename) + && winIsDirSep(zFilename[2])) ){ + i64 nByte; + int convertflag = CCP_POSIX_TO_WIN_W; + if( !strchr(zFilename, '/') ) convertflag |= CCP_RELATIVE; + nByte = (i64)osCygwin_conv_path(convertflag, + zFilename, 0, 0); + if( nByte>0 ){ + zConverted = sqlite3MallocZero(12+(u64)nByte); + if ( zConverted==0 ){ + return zConverted; + } + zWideFilename = zConverted; + /* Filenames should be prefixed, except when converted + * full path already starts with "\\?\". */ + if( osCygwin_conv_path(convertflag, zFilename, + zWideFilename+4, nByte)==0 ){ + if( (convertflag&CCP_RELATIVE) ){ + memmove(zWideFilename, zWideFilename+4, nByte); + }else if( memcmp(zWideFilename+4, L"\\\\", 4) ){ + memcpy(zWideFilename, L"\\\\?\\", 8); + }else if( zWideFilename[6]!='?' ){ + memmove(zWideFilename+6, zWideFilename+4, nByte); + memcpy(zWideFilename, L"\\\\?\\UNC", 14); + }else{ + memmove(zWideFilename, zWideFilename+4, nByte); + } + return zConverted; + } + sqlite3_free(zConverted); + } + } + nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, NULL, 0); + if( nChar==0 ){ + return 0; + } + zWideFilename = sqlite3MallocZero( nChar*sizeof(WCHAR)+12 ); + if( zWideFilename==0 ){ + return 0; + } + nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, + zWideFilename, nChar); + if( nChar==0 ){ + sqlite3_free(zWideFilename); + zWideFilename = 0; + }else if( nChar>MAX_PATH + && winIsDriveLetterAndColon(zFilename) + && winIsDirSep(zFilename[2]) ){ + memmove(zWideFilename+4, zWideFilename, nChar*sizeof(WCHAR)); + zWideFilename[2] = '\\'; + memcpy(zWideFilename, L"\\\\?\\", 8); + }else if( nChar>MAX_PATH + && winIsDirSep(zFilename[0]) && winIsDirSep(zFilename[1]) + && zFilename[2] != '?' ){ + memmove(zWideFilename+6, zWideFilename, nChar*sizeof(WCHAR)); + memcpy(zWideFilename, L"\\\\?\\UNC", 14); + } + zConverted = zWideFilename; +#else + zConverted = winUtf8ToUnicode(zFilename); +#endif /* __CYGWIN__ */ + } +#if defined(SQLITE_WIN32_HAS_ANSI) && defined(_WIN32) + else{ + zConverted = winUtf8ToMbcs(zFilename, osAreFileApisANSI()); + } +#endif + /* caller will handle out of memory */ + return zConverted; +} + +#ifndef SQLITE_OMIT_WAL + +/* +** Helper functions to obtain and relinquish the global mutex. The +** global mutex is used to protect the winLockInfo objects used by +** this file, all of which may be shared by multiple threads. +** +** Function winShmMutexHeld() is used to assert() that the global mutex +** is held when required. This function is only used as part of assert() +** statements. e.g. +** +** winShmEnterMutex() +** assert( winShmMutexHeld() ); +** winShmLeaveMutex() +*/ +static sqlite3_mutex *winBigLock = 0; +static void winShmEnterMutex(void){ + sqlite3_mutex_enter(winBigLock); +} +static void winShmLeaveMutex(void){ + sqlite3_mutex_leave(winBigLock); +} +#ifndef NDEBUG +static int winShmMutexHeld(void) { + return sqlite3_mutex_held(winBigLock); +} +#endif + +/* +** Object used to represent a single file opened and mmapped to provide +** shared memory. When multiple threads all reference the same +** log-summary, each thread has its own winFile object, but they all +** point to a single instance of this object. In other words, each +** log-summary is opened only once per process. +** +** winShmMutexHeld() must be true when creating or destroying +** this object, or while editing the global linked list that starts +** at winShmNodeList. +** +** When reading or writing the linked list starting at winShmNode.pWinShmList, +** pShmNode->mutex must be held. +** +** The following fields are constant after the object is created: +** +** zFilename +** hSharedShm +** mutex +** bUseSharedLockHandle +** +** Either winShmNode.mutex must be held or winShmNode.pWinShmList==0 and +** winShmMutexHeld() is true when reading or writing any other field +** in this structure. +** +** File-handle hSharedShm is always used to (a) take the DMS lock, (b) +** truncate the *-shm file if the DMS-locking protocol demands it, and +** (c) map regions of the *-shm file into memory using MapViewOfFile() +** or similar. If bUseSharedLockHandle is true, then other locks are also +** taken on hSharedShm. Or, if bUseSharedLockHandle is false, then other +** locks are taken using each connection's winShm.hShm handles. +*/ +struct winShmNode { + sqlite3_mutex *mutex; /* Mutex to access this object */ + char *zFilename; /* Name of the file */ + HANDLE hSharedShm; /* File handle open on zFilename */ + int bUseSharedLockHandle; /* True to use hSharedShm for everything */ + + int isUnlocked; /* DMS lock has not yet been obtained */ + int isReadonly; /* True if read-only */ + int szRegion; /* Size of shared-memory regions */ + int nRegion; /* Size of array apRegion */ + + struct ShmRegion { + HANDLE hMap; /* File handle from CreateFileMapping */ + void *pMap; + } *aRegion; + DWORD lastErrno; /* The Windows errno from the last I/O error */ + + winShm *pWinShmList; /* List of winShm objects with ptrs to this */ + + winShmNode *pNext; /* Next in list of all winShmNode objects */ +#if defined(SQLITE_DEBUG) || defined(SQLITE_HAVE_OS_TRACE) + u8 nextShmId; /* Next available winShm.id value */ +#endif +}; + +/* +** A global array of all winShmNode objects. +** +** The winShmMutexHeld() must be true while reading or writing this list. +*/ +static winShmNode *winShmNodeList = 0; + +/* +** Structure used internally by this VFS to record the state of an +** open shared memory connection. There is one such structure for each +** winFile open on a wal mode database. +*/ +struct winShm { + winShmNode *pShmNode; /* The underlying winShmNode object */ + u16 sharedMask; /* Mask of shared locks held */ + u16 exclMask; /* Mask of exclusive locks held */ + HANDLE hShm; /* File-handle on *-shm file. For locking. */ + int bReadonly; /* True if hShm is opened read-only */ +#if defined(SQLITE_DEBUG) || defined(SQLITE_HAVE_OS_TRACE) + u8 id; /* Id of this connection with its winShmNode */ +#endif + winShm *pWinShmNext; /* Next winShm object on same winShmNode */ +}; + +/* +** Constants used for locking +*/ +#define WIN_SHM_BASE ((22+SQLITE_SHM_NLOCK)*4) /* first lock byte */ +#define WIN_SHM_DMS (WIN_SHM_BASE+SQLITE_SHM_NLOCK) /* deadman switch */ + +/* Forward references to VFS methods */ +static int winOpen(sqlite3_vfs*,const char*,sqlite3_file*,int,int*); +static int winDelete(sqlite3_vfs *,const char*,int); + +/* +** Purge the winShmNodeList list of all entries with winShmNode.pWinShmList==0. +** +** This is not a VFS shared-memory method; it is a utility function called +** by VFS shared-memory methods. +*/ +static void winShmPurge(sqlite3_vfs *pVfs, int deleteFlag){ + winShmNode **pp; + winShmNode *p; + assert( winShmMutexHeld() ); + OSTRACE(("SHM-PURGE pid=%lu, deleteFlag=%d\n", + osGetCurrentProcessId(), deleteFlag)); + pp = &winShmNodeList; + while( (p = *pp)!=0 ){ + if( p->pWinShmList==0 ){ + int i; + if( p->mutex ){ sqlite3_mutex_free(p->mutex); } + for(i=0; inRegion; i++){ + BOOL bRc = osUnmapViewOfFile(p->aRegion[i].pMap); + OSTRACE(("SHM-PURGE-UNMAP pid=%lu, region=%d, rc=%s\n", + osGetCurrentProcessId(), i, bRc ? "ok" : "failed")); + UNUSED_VARIABLE_VALUE(bRc); + bRc = osCloseHandle(p->aRegion[i].hMap); + OSTRACE(("SHM-PURGE-CLOSE pid=%lu, region=%d, rc=%s\n", + osGetCurrentProcessId(), i, bRc ? "ok" : "failed")); + UNUSED_VARIABLE_VALUE(bRc); + } + winHandleClose(p->hSharedShm); + if( deleteFlag ){ + SimulateIOErrorBenign(1); + sqlite3BeginBenignMalloc(); + winDelete(pVfs, p->zFilename, 0); + sqlite3EndBenignMalloc(); + SimulateIOErrorBenign(0); + } + *pp = p->pNext; + sqlite3_free(p->aRegion); + sqlite3_free(p); + }else{ + pp = &p->pNext; + } + } +} + +/* +** The DMS lock has not yet been taken on the shm file associated with +** pShmNode. Take the lock. Truncate the *-shm file if required. +** Return SQLITE_OK if successful, or an SQLite error code otherwise. +*/ +static int winLockSharedMemory(winShmNode *pShmNode, DWORD nMs){ + HANDLE h = pShmNode->hSharedShm; + int rc = SQLITE_OK; + + assert( sqlite3_mutex_held(pShmNode->mutex) ); + rc = winHandleLockTimeout(h, WIN_SHM_DMS, 1, 1, 0); + if( rc==SQLITE_OK ){ + /* We have an EXCLUSIVE lock on the DMS byte. This means that this + ** is the first process to open the file. Truncate it to zero bytes + ** in this case. */ + if( pShmNode->isReadonly ){ + rc = SQLITE_READONLY_CANTINIT; + }else{ + rc = winHandleTruncate(h, 0); + } + + /* Release the EXCLUSIVE lock acquired above. */ + winUnlockFile(&h, WIN_SHM_DMS, 0, 1, 0); + }else if( (rc & 0xFF)==SQLITE_BUSY ){ + rc = SQLITE_OK; + } + + if( rc==SQLITE_OK ){ + /* Take a SHARED lock on the DMS byte. */ + rc = winHandleLockTimeout(h, WIN_SHM_DMS, 1, 0, nMs); + if( rc==SQLITE_OK ){ + pShmNode->isUnlocked = 0; + } + } + + return rc; +} + + +/* +** This function is used to open a handle on a *-shm file. +** +** If SQLITE_ENABLE_SETLK_TIMEOUT is defined at build time, then the file +** is opened with FILE_FLAG_OVERLAPPED specified. If not, it is not. +*/ +static int winHandleOpen( + const char *zUtf8, /* File to open */ + int *pbReadonly, /* IN/OUT: True for readonly handle */ + HANDLE *ph /* OUT: New HANDLE for file */ +){ + int rc = SQLITE_OK; + void *zConverted = 0; + int bReadonly = *pbReadonly; + HANDLE h = INVALID_HANDLE_VALUE; + +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + const DWORD flag_overlapped = FILE_FLAG_OVERLAPPED; +#else + const DWORD flag_overlapped = 0; +#endif + + /* Convert the filename to the system encoding. */ + zConverted = winConvertFromUtf8Filename(zUtf8); + if( zConverted==0 ){ + OSTRACE(("OPEN name=%s, rc=SQLITE_IOERR_NOMEM", zUtf8)); + rc = SQLITE_IOERR_NOMEM_BKPT; + goto winopenfile_out; + } + + /* Ensure the file we are trying to open is not actually a directory. */ + if( winIsDir(zConverted) ){ + OSTRACE(("OPEN name=%s, rc=SQLITE_CANTOPEN_ISDIR", zUtf8)); + rc = SQLITE_CANTOPEN_ISDIR; + goto winopenfile_out; + } + + /* TODO: platforms. + ** TODO: retry-on-ioerr. + */ + if( osIsNT() ){ +#if SQLITE_OS_WINRT + CREATEFILE2_EXTENDED_PARAMETERS extendedParameters; + memset(&extendedParameters, 0, sizeof(extendedParameters)); + extendedParameters.dwSize = sizeof(extendedParameters); + extendedParameters.dwFileAttributes = FILE_ATTRIBUTE_NORMAL; + extendedParameters.dwFileFlags = flag_overlapped; + extendedParameters.dwSecurityQosFlags = SECURITY_ANONYMOUS; + h = osCreateFile2((LPCWSTR)zConverted, + (GENERIC_READ | (bReadonly ? 0 : GENERIC_WRITE)),/* dwDesiredAccess */ + FILE_SHARE_READ | FILE_SHARE_WRITE, /* dwShareMode */ + OPEN_ALWAYS, /* dwCreationDisposition */ + &extendedParameters + ); +#else + h = osCreateFileW((LPCWSTR)zConverted, /* lpFileName */ + (GENERIC_READ | (bReadonly ? 0 : GENERIC_WRITE)), /* dwDesiredAccess */ + FILE_SHARE_READ | FILE_SHARE_WRITE, /* dwShareMode */ + NULL, /* lpSecurityAttributes */ + OPEN_ALWAYS, /* dwCreationDisposition */ + FILE_ATTRIBUTE_NORMAL|flag_overlapped, + NULL + ); +#endif + }else{ + /* Due to pre-processor directives earlier in this file, + ** SQLITE_WIN32_HAS_ANSI is always defined if osIsNT() is false. */ +#ifdef SQLITE_WIN32_HAS_ANSI + h = osCreateFileA((LPCSTR)zConverted, + (GENERIC_READ | (bReadonly ? 0 : GENERIC_WRITE)), /* dwDesiredAccess */ + FILE_SHARE_READ | FILE_SHARE_WRITE, /* dwShareMode */ + NULL, /* lpSecurityAttributes */ + OPEN_ALWAYS, /* dwCreationDisposition */ + FILE_ATTRIBUTE_NORMAL|flag_overlapped, + NULL + ); +#endif + } + + if( h==INVALID_HANDLE_VALUE ){ + if( bReadonly==0 ){ + bReadonly = 1; + rc = winHandleOpen(zUtf8, &bReadonly, &h); + }else{ + rc = SQLITE_CANTOPEN_BKPT; + } + } + + winopenfile_out: + sqlite3_free(zConverted); + *pbReadonly = bReadonly; + *ph = h; + return rc; +} + +/* +** Close pDbFd's connection to shared-memory. Delete the underlying +** *-shm file if deleteFlag is true. +*/ +static int winCloseSharedMemory(winFile *pDbFd, int deleteFlag){ + winShm *p; /* The connection to be closed */ + winShm **pp; /* Iterator for pShmNode->pWinShmList */ + winShmNode *pShmNode; /* The underlying shared-memory file */ + + p = pDbFd->pShm; + if( p==0 ) return SQLITE_OK; + if( p->hShm!=INVALID_HANDLE_VALUE ){ + osCloseHandle(p->hShm); + } + + winShmEnterMutex(); + pShmNode = p->pShmNode; + + /* Remove this connection from the winShmNode.pWinShmList list */ + sqlite3_mutex_enter(pShmNode->mutex); + for(pp=&pShmNode->pWinShmList; *pp!=p; pp=&(*pp)->pWinShmNext){} + *pp = p->pWinShmNext; + sqlite3_mutex_leave(pShmNode->mutex); + + winShmPurge(pDbFd->pVfs, deleteFlag); + winShmLeaveMutex(); + + /* Free the connection p */ + sqlite3_free(p); + pDbFd->pShm = 0; + return SQLITE_OK; +} + +/* +** testfixture builds may set this global variable to true via a +** Tcl interface. This forces the VFS to use the locking normally +** only used for UNC paths for all files. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_win_test_unc_locking = 0; +#else +# define sqlite3_win_test_unc_locking 0 +#endif + +/* +** Return true if the string passed as the only argument is likely +** to be a UNC path. In other words, if it starts with "\\". +*/ +static int winIsUNCPath(const char *zFile){ + if( zFile[0]=='\\' && zFile[1]=='\\' ){ + return 1; + } + return sqlite3_win_test_unc_locking; +} + +/* +** Open the shared-memory area associated with database file pDbFd. +*/ +static int winOpenSharedMemory(winFile *pDbFd){ + struct winShm *p; /* The connection to be opened */ + winShmNode *pShmNode = 0; /* The underlying mmapped file */ + int rc = SQLITE_OK; /* Result code */ + winShmNode *pNew; /* Newly allocated winShmNode */ + int nName; /* Size of zName in bytes */ + + assert( pDbFd->pShm==0 ); /* Not previously opened */ + + /* Allocate space for the new sqlite3_shm object. Also speculatively + ** allocate space for a new winShmNode and filename. */ + p = sqlite3MallocZero( sizeof(*p) ); + if( p==0 ) return SQLITE_IOERR_NOMEM_BKPT; + nName = sqlite3Strlen30(pDbFd->zPath); + pNew = sqlite3MallocZero( sizeof(*pShmNode) + (i64)nName + 17 ); + if( pNew==0 ){ + sqlite3_free(p); + return SQLITE_IOERR_NOMEM_BKPT; + } + pNew->zFilename = (char*)&pNew[1]; + pNew->hSharedShm = INVALID_HANDLE_VALUE; + pNew->isUnlocked = 1; + pNew->bUseSharedLockHandle = winIsUNCPath(pDbFd->zPath); + sqlite3_snprintf(nName+15, pNew->zFilename, "%s-shm", pDbFd->zPath); + sqlite3FileSuffix3(pDbFd->zPath, pNew->zFilename); + + /* Look to see if there is an existing winShmNode that can be used. + ** If no matching winShmNode currently exists, then create a new one. */ + winShmEnterMutex(); + for(pShmNode = winShmNodeList; pShmNode; pShmNode=pShmNode->pNext){ + /* TBD need to come up with better match here. Perhaps + ** use FILE_ID_BOTH_DIR_INFO Structure. */ + if( sqlite3StrICmp(pShmNode->zFilename, pNew->zFilename)==0 ) break; + } + if( pShmNode==0 ){ + pShmNode = pNew; + + /* Allocate a mutex for this winShmNode object, if one is required. */ + if( sqlite3GlobalConfig.bCoreMutex ){ + pShmNode->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST); + if( pShmNode->mutex==0 ) rc = SQLITE_IOERR_NOMEM_BKPT; + } + + /* Open a file-handle to use for mappings, and for the DMS lock. */ + if( rc==SQLITE_OK ){ + HANDLE h = INVALID_HANDLE_VALUE; + pShmNode->isReadonly = sqlite3_uri_boolean(pDbFd->zPath,"readonly_shm",0); + rc = winHandleOpen(pNew->zFilename, &pShmNode->isReadonly, &h); + pShmNode->hSharedShm = h; + } + + /* If successful, link the new winShmNode into the global list. If an + ** error occurred, free the object. */ + if( rc==SQLITE_OK ){ + pShmNode->pNext = winShmNodeList; + winShmNodeList = pShmNode; + pNew = 0; + }else{ + sqlite3_mutex_free(pShmNode->mutex); + if( pShmNode->hSharedShm!=INVALID_HANDLE_VALUE ){ + osCloseHandle(pShmNode->hSharedShm); + } + } + } + + /* If no error has occurred, link the winShm object to the winShmNode and + ** the winShm to pDbFd. */ + if( rc==SQLITE_OK ){ + sqlite3_mutex_enter(pShmNode->mutex); + p->pShmNode = pShmNode; + p->pWinShmNext = pShmNode->pWinShmList; + pShmNode->pWinShmList = p; +#if defined(SQLITE_DEBUG) || defined(SQLITE_HAVE_OS_TRACE) + p->id = pShmNode->nextShmId++; +#endif + pDbFd->pShm = p; + sqlite3_mutex_leave(pShmNode->mutex); + }else if( p ){ + sqlite3_free(p); + } + + assert( rc!=SQLITE_OK || pShmNode->isUnlocked==0 || pShmNode->nRegion==0 ); + winShmLeaveMutex(); + sqlite3_free(pNew); + + /* Open a file-handle on the *-shm file for this connection. This file-handle + ** is only used for locking. The mapping of the *-shm file is created using + ** the shared file handle in winShmNode.hSharedShm. */ + if( rc==SQLITE_OK && pShmNode->bUseSharedLockHandle==0 ){ + p->bReadonly = sqlite3_uri_boolean(pDbFd->zPath, "readonly_shm", 0); + rc = winHandleOpen(pShmNode->zFilename, &p->bReadonly, &p->hShm); + if( rc!=SQLITE_OK ){ + assert( p->hShm==INVALID_HANDLE_VALUE ); + winCloseSharedMemory(pDbFd, 0); + } + } + + return rc; +} + +/* +** Close a connection to shared-memory. Delete the underlying +** storage if deleteFlag is true. +*/ +static int winShmUnmap( + sqlite3_file *fd, /* Database holding shared memory */ + int deleteFlag /* Delete after closing if true */ +){ + return winCloseSharedMemory((winFile*)fd, deleteFlag); +} + +/* +** Change the lock state for a shared-memory segment. +*/ +static int winShmLock( + sqlite3_file *fd, /* Database file holding the shared memory */ + int ofst, /* First lock to acquire or release */ + int n, /* Number of locks to acquire or release */ + int flags /* What to do with the lock */ +){ + winFile *pDbFd = (winFile*)fd; /* Connection holding shared memory */ + winShm *p = pDbFd->pShm; /* The shared memory being locked */ + winShmNode *pShmNode; + int rc = SQLITE_OK; /* Result code */ + u16 mask = (u16)((1U<<(ofst+n)) - (1U<pShmNode; + if( NEVER(pShmNode==0) ) return SQLITE_IOERR_SHMLOCK; + + assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK ); + assert( n>=1 ); + assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED) + || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE) + || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED) + || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) ); + assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 ); + + /* Check that, if this to be a blocking lock, no locks that occur later + ** in the following list than the lock being obtained are already held: + ** + ** 1. Recovery lock (ofst==2). + ** 2. Checkpointer lock (ofst==1). + ** 3. Write lock (ofst==0). + ** 4. Read locks (ofst>=3 && ofstexclMask|p->sharedMask); + assert( (flags & SQLITE_SHM_UNLOCK) || pDbFd->iBusyTimeout==0 || ( + (ofst!=2 || lockMask==0) + && (ofst!=1 || lockMask==0 || lockMask==2) + && (ofst!=0 || lockMask<3) + && (ofst<3 || lockMask<(1<exclMask & mask) + ); + if( ((flags & SQLITE_SHM_UNLOCK) && ((p->exclMask|p->sharedMask) & mask)) + || (flags==(SQLITE_SHM_SHARED|SQLITE_SHM_LOCK) && 0==(p->sharedMask & mask)) + || (flags==(SQLITE_SHM_EXCLUSIVE|SQLITE_SHM_LOCK)) + ){ + HANDLE h = p->hShm; + + if( flags & SQLITE_SHM_UNLOCK ){ + /* Case (a) - unlock. */ + + assert( (p->exclMask & p->sharedMask)==0 ); + assert( !(flags & SQLITE_SHM_EXCLUSIVE) || (p->exclMask & mask)==mask ); + assert( !(flags & SQLITE_SHM_SHARED) || (p->sharedMask & mask)==mask ); + + assert( !(flags & SQLITE_SHM_SHARED) || n==1 ); + if( pShmNode->bUseSharedLockHandle ){ + h = pShmNode->hSharedShm; + if( flags & SQLITE_SHM_SHARED ){ + winShm *pShm; + sqlite3_mutex_enter(pShmNode->mutex); + for(pShm=pShmNode->pWinShmList; pShm; pShm=pShm->pWinShmNext){ + if( pShm!=p && (pShm->sharedMask & mask) ){ + /* Another connection within this process is also holding this + ** SHARED lock. So do not actually release the OS lock. */ + h = INVALID_HANDLE_VALUE; + break; + } + } + sqlite3_mutex_leave(pShmNode->mutex); + } + } + + if( h!=INVALID_HANDLE_VALUE ){ + rc = winHandleUnlock(h, ofst+WIN_SHM_BASE, n); + } + + /* If successful, also clear the bits in sharedMask/exclMask */ + if( rc==SQLITE_OK ){ + p->exclMask = (p->exclMask & ~mask); + p->sharedMask = (p->sharedMask & ~mask); + } + }else{ + int bExcl = ((flags & SQLITE_SHM_EXCLUSIVE) ? 1 : 0); + DWORD nMs = winFileBusyTimeout(pDbFd); + + if( pShmNode->bUseSharedLockHandle ){ + winShm *pShm; + h = pShmNode->hSharedShm; + sqlite3_mutex_enter(pShmNode->mutex); + for(pShm=pShmNode->pWinShmList; pShm; pShm=pShm->pWinShmNext){ + if( bExcl ){ + if( (pShm->sharedMask|pShm->exclMask) & mask ){ + rc = SQLITE_BUSY; + h = INVALID_HANDLE_VALUE; + } + }else{ + if( pShm->sharedMask & mask ){ + h = INVALID_HANDLE_VALUE; + }else if( pShm->exclMask & mask ){ + rc = SQLITE_BUSY; + h = INVALID_HANDLE_VALUE; + } + } + } + sqlite3_mutex_leave(pShmNode->mutex); + } + + if( h!=INVALID_HANDLE_VALUE ){ + rc = winHandleLockTimeout(h, ofst+WIN_SHM_BASE, n, bExcl, nMs); + } + if( rc==SQLITE_OK ){ + if( bExcl ){ + p->exclMask = (p->exclMask | mask); + }else{ + p->sharedMask = (p->sharedMask | mask); + } + } + } + } + + OSTRACE(( + "SHM-LOCK(%d,%d,%d) pid=%lu, id=%d, sharedMask=%03x, exclMask=%03x," + " rc=%s\n", + ofst, n, flags, + osGetCurrentProcessId(), p->id, p->sharedMask, p->exclMask, + sqlite3ErrName(rc)) + ); + return rc; +} + +/* +** Implement a memory barrier or memory fence on shared memory. +** +** All loads and stores begun before the barrier must complete before +** any load or store begun after the barrier. +*/ +static void winShmBarrier( + sqlite3_file *fd /* Database holding the shared memory */ +){ + UNUSED_PARAMETER(fd); + sqlite3MemoryBarrier(); /* compiler-defined memory barrier */ + winShmEnterMutex(); /* Also mutex, for redundancy */ + winShmLeaveMutex(); +} + +/* +** This function is called to obtain a pointer to region iRegion of the +** shared-memory associated with the database file fd. Shared-memory regions +** are numbered starting from zero. Each shared-memory region is szRegion +** bytes in size. +** +** If an error occurs, an error code is returned and *pp is set to NULL. +** +** Otherwise, if the isWrite parameter is 0 and the requested shared-memory +** region has not been allocated (by any client, including one running in a +** separate process), then *pp is set to NULL and SQLITE_OK returned. If +** isWrite is non-zero and the requested shared-memory region has not yet +** been allocated, it is allocated by this function. +** +** If the shared-memory region has already been allocated or is allocated by +** this call as described above, then it is mapped into this processes +** address space (if it is not already), *pp is set to point to the mapped +** memory and SQLITE_OK returned. +*/ +static int winShmMap( + sqlite3_file *fd, /* Handle open on database file */ + int iRegion, /* Region to retrieve */ + int szRegion, /* Size of regions */ + int isWrite, /* True to extend file if necessary */ + void volatile **pp /* OUT: Mapped memory */ +){ + winFile *pDbFd = (winFile*)fd; + winShm *pShm = pDbFd->pShm; + winShmNode *pShmNode; + DWORD protect = PAGE_READWRITE; + DWORD flags = FILE_MAP_WRITE | FILE_MAP_READ; + int rc = SQLITE_OK; + + if( !pShm ){ + rc = winOpenSharedMemory(pDbFd); + if( rc!=SQLITE_OK ) return rc; + pShm = pDbFd->pShm; + assert( pShm!=0 ); + } + pShmNode = pShm->pShmNode; + + sqlite3_mutex_enter(pShmNode->mutex); + if( pShmNode->isUnlocked ){ + /* Take the DMS lock. */ + assert( pShmNode->nRegion==0 ); + rc = winLockSharedMemory(pShmNode, winFileBusyTimeout(pDbFd)); + if( rc!=SQLITE_OK ) goto shmpage_out; + } + + assert( szRegion==pShmNode->szRegion || pShmNode->nRegion==0 ); + if( pShmNode->nRegion<=iRegion ){ + HANDLE hShared = pShmNode->hSharedShm; + struct ShmRegion *apNew; /* New aRegion[] array */ + int nByte = (iRegion+1)*szRegion; /* Minimum required file size */ + sqlite3_int64 sz; /* Current size of wal-index file */ + + pShmNode->szRegion = szRegion; + + /* The requested region is not mapped into this processes address space. + ** Check to see if it has been allocated (i.e. if the wal-index file is + ** large enough to contain the requested region). + */ + rc = winHandleSize(hShared, &sz); + if( rc!=SQLITE_OK ){ + rc = winLogError(rc, osGetLastError(), "winShmMap1", pDbFd->zPath); + goto shmpage_out; + } + + if( szzPath); + goto shmpage_out; + } + } + + /* Map the requested memory region into this processes address space. */ + apNew = (struct ShmRegion*)sqlite3_realloc64( + pShmNode->aRegion, (iRegion+1)*sizeof(apNew[0]) + ); + if( !apNew ){ + rc = SQLITE_IOERR_NOMEM_BKPT; + goto shmpage_out; + } + pShmNode->aRegion = apNew; + + if( pShmNode->isReadonly ){ + protect = PAGE_READONLY; + flags = FILE_MAP_READ; + } + + while( pShmNode->nRegion<=iRegion ){ + HANDLE hMap = NULL; /* file-mapping handle */ + void *pMap = 0; /* Mapped memory region */ + +#if SQLITE_OS_WINRT + hMap = osCreateFileMappingFromApp(hShared, NULL, protect, nByte, NULL); +#elif defined(SQLITE_WIN32_HAS_WIDE) + hMap = osCreateFileMappingW(hShared, NULL, protect, 0, nByte, NULL); +#elif defined(SQLITE_WIN32_HAS_ANSI) && SQLITE_WIN32_CREATEFILEMAPPINGA + hMap = osCreateFileMappingA(hShared, NULL, protect, 0, nByte, NULL); +#endif + + OSTRACE(("SHM-MAP-CREATE pid=%lu, region=%d, size=%d, rc=%s\n", + osGetCurrentProcessId(), pShmNode->nRegion, nByte, + hMap ? "ok" : "failed")); + if( hMap ){ + int iOffset = pShmNode->nRegion*szRegion; + int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity; +#if SQLITE_OS_WINRT + pMap = osMapViewOfFileFromApp(hMap, flags, + iOffset - iOffsetShift, szRegion + iOffsetShift + ); +#else + pMap = osMapViewOfFile(hMap, flags, + 0, iOffset - iOffsetShift, szRegion + iOffsetShift + ); +#endif + OSTRACE(("SHM-MAP-MAP pid=%lu, region=%d, offset=%d, size=%d, rc=%s\n", + osGetCurrentProcessId(), pShmNode->nRegion, iOffset, + szRegion, pMap ? "ok" : "failed")); + } + if( !pMap ){ + pShmNode->lastErrno = osGetLastError(); + rc = winLogError(SQLITE_IOERR_SHMMAP, pShmNode->lastErrno, + "winShmMap3", pDbFd->zPath); + if( hMap ) osCloseHandle(hMap); + goto shmpage_out; + } + + pShmNode->aRegion[pShmNode->nRegion].pMap = pMap; + pShmNode->aRegion[pShmNode->nRegion].hMap = hMap; + pShmNode->nRegion++; + } + } + +shmpage_out: + if( pShmNode->nRegion>iRegion ){ + int iOffset = iRegion*szRegion; + int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity; + char *p = (char *)pShmNode->aRegion[iRegion].pMap; + *pp = (void *)&p[iOffsetShift]; + }else{ + *pp = 0; + } + if( pShmNode->isReadonly && rc==SQLITE_OK ){ + rc = SQLITE_READONLY; + } + sqlite3_mutex_leave(pShmNode->mutex); + return rc; +} + +#else +# define winShmMap 0 +# define winShmLock 0 +# define winShmBarrier 0 +# define winShmUnmap 0 +#endif /* #ifndef SQLITE_OMIT_WAL */ + +/* +** Cleans up the mapped region of the specified file, if any. +*/ +#if SQLITE_MAX_MMAP_SIZE>0 +static int winUnmapfile(winFile *pFile){ + assert( pFile!=0 ); + OSTRACE(("UNMAP-FILE pid=%lu, pFile=%p, hMap=%p, pMapRegion=%p, " + "mmapSize=%lld, mmapSizeMax=%lld\n", + osGetCurrentProcessId(), pFile, pFile->hMap, pFile->pMapRegion, + pFile->mmapSize, pFile->mmapSizeMax)); + if( pFile->pMapRegion ){ + if( !osUnmapViewOfFile(pFile->pMapRegion) ){ + pFile->lastErrno = osGetLastError(); + OSTRACE(("UNMAP-FILE pid=%lu, pFile=%p, pMapRegion=%p, " + "rc=SQLITE_IOERR_MMAP\n", osGetCurrentProcessId(), pFile, + pFile->pMapRegion)); + return winLogError(SQLITE_IOERR_MMAP, pFile->lastErrno, + "winUnmapfile1", pFile->zPath); + } + pFile->pMapRegion = 0; + pFile->mmapSize = 0; + } + if( pFile->hMap!=NULL ){ + if( !osCloseHandle(pFile->hMap) ){ + pFile->lastErrno = osGetLastError(); + OSTRACE(("UNMAP-FILE pid=%lu, pFile=%p, hMap=%p, rc=SQLITE_IOERR_MMAP\n", + osGetCurrentProcessId(), pFile, pFile->hMap)); + return winLogError(SQLITE_IOERR_MMAP, pFile->lastErrno, + "winUnmapfile2", pFile->zPath); + } + pFile->hMap = NULL; + } + OSTRACE(("UNMAP-FILE pid=%lu, pFile=%p, rc=SQLITE_OK\n", + osGetCurrentProcessId(), pFile)); + return SQLITE_OK; +} + +/* +** Memory map or remap the file opened by file-descriptor pFd (if the file +** is already mapped, the existing mapping is replaced by the new). Or, if +** there already exists a mapping for this file, and there are still +** outstanding xFetch() references to it, this function is a no-op. +** +** If parameter nByte is non-negative, then it is the requested size of +** the mapping to create. Otherwise, if nByte is less than zero, then the +** requested size is the size of the file on disk. The actual size of the +** created mapping is either the requested size or the value configured +** using SQLITE_FCNTL_MMAP_SIZE, whichever is smaller. +** +** SQLITE_OK is returned if no error occurs (even if the mapping is not +** recreated as a result of outstanding references) or an SQLite error +** code otherwise. +*/ +static int winMapfile(winFile *pFd, sqlite3_int64 nByte){ + sqlite3_int64 nMap = nByte; + int rc; + + assert( nMap>=0 || pFd->nFetchOut==0 ); + OSTRACE(("MAP-FILE pid=%lu, pFile=%p, size=%lld\n", + osGetCurrentProcessId(), pFd, nByte)); + + if( pFd->nFetchOut>0 ) return SQLITE_OK; + + if( nMap<0 ){ + rc = winFileSize((sqlite3_file*)pFd, &nMap); + if( rc ){ + OSTRACE(("MAP-FILE pid=%lu, pFile=%p, rc=SQLITE_IOERR_FSTAT\n", + osGetCurrentProcessId(), pFd)); + return SQLITE_IOERR_FSTAT; + } + } + if( nMap>pFd->mmapSizeMax ){ + nMap = pFd->mmapSizeMax; + } + nMap &= ~(sqlite3_int64)(winSysInfo.dwPageSize - 1); + + if( nMap==0 && pFd->mmapSize>0 ){ + winUnmapfile(pFd); + } + if( nMap!=pFd->mmapSize ){ + void *pNew = 0; + DWORD protect = PAGE_READONLY; + DWORD flags = FILE_MAP_READ; + + winUnmapfile(pFd); +#ifdef SQLITE_MMAP_READWRITE + if( (pFd->ctrlFlags & WINFILE_RDONLY)==0 ){ + protect = PAGE_READWRITE; + flags |= FILE_MAP_WRITE; + } +#endif +#if SQLITE_OS_WINRT + pFd->hMap = osCreateFileMappingFromApp(pFd->h, NULL, protect, nMap, NULL); +#elif defined(SQLITE_WIN32_HAS_WIDE) + pFd->hMap = osCreateFileMappingW(pFd->h, NULL, protect, + (DWORD)((nMap>>32) & 0xffffffff), + (DWORD)(nMap & 0xffffffff), NULL); +#elif defined(SQLITE_WIN32_HAS_ANSI) && SQLITE_WIN32_CREATEFILEMAPPINGA + pFd->hMap = osCreateFileMappingA(pFd->h, NULL, protect, + (DWORD)((nMap>>32) & 0xffffffff), + (DWORD)(nMap & 0xffffffff), NULL); +#endif + if( pFd->hMap==NULL ){ + pFd->lastErrno = osGetLastError(); + rc = winLogError(SQLITE_IOERR_MMAP, pFd->lastErrno, + "winMapfile1", pFd->zPath); + /* Log the error, but continue normal operation using xRead/xWrite */ + OSTRACE(("MAP-FILE-CREATE pid=%lu, pFile=%p, rc=%s\n", + osGetCurrentProcessId(), pFd, sqlite3ErrName(rc))); + return SQLITE_OK; + } + assert( (nMap % winSysInfo.dwPageSize)==0 ); + assert( sizeof(SIZE_T)==sizeof(sqlite3_int64) || nMap<=0xffffffff ); +#if SQLITE_OS_WINRT + pNew = osMapViewOfFileFromApp(pFd->hMap, flags, 0, (SIZE_T)nMap); +#else + pNew = osMapViewOfFile(pFd->hMap, flags, 0, 0, (SIZE_T)nMap); +#endif + if( pNew==NULL ){ + osCloseHandle(pFd->hMap); + pFd->hMap = NULL; + pFd->lastErrno = osGetLastError(); + rc = winLogError(SQLITE_IOERR_MMAP, pFd->lastErrno, + "winMapfile2", pFd->zPath); + /* Log the error, but continue normal operation using xRead/xWrite */ + OSTRACE(("MAP-FILE-MAP pid=%lu, pFile=%p, rc=%s\n", + osGetCurrentProcessId(), pFd, sqlite3ErrName(rc))); + return SQLITE_OK; + } + pFd->pMapRegion = pNew; + pFd->mmapSize = nMap; + } + + OSTRACE(("MAP-FILE pid=%lu, pFile=%p, rc=SQLITE_OK\n", + osGetCurrentProcessId(), pFd)); + return SQLITE_OK; +} +#endif /* SQLITE_MAX_MMAP_SIZE>0 */ + +/* +** If possible, return a pointer to a mapping of file fd starting at offset +** iOff. The mapping must be valid for at least nAmt bytes. +** +** If such a pointer can be obtained, store it in *pp and return SQLITE_OK. +** Or, if one cannot but no error occurs, set *pp to 0 and return SQLITE_OK. +** Finally, if an error does occur, return an SQLite error code. The final +** value of *pp is undefined in this case. +** +** If this function does return a pointer, the caller must eventually +** release the reference by calling winUnfetch(). +*/ +static int winFetch(sqlite3_file *fd, i64 iOff, int nAmt, void **pp){ +#if SQLITE_MAX_MMAP_SIZE>0 + winFile *pFd = (winFile*)fd; /* The underlying database file */ +#endif + *pp = 0; + + OSTRACE(("FETCH pid=%lu, pFile=%p, offset=%lld, amount=%d, pp=%p\n", + osGetCurrentProcessId(), fd, iOff, nAmt, pp)); + +#if SQLITE_MAX_MMAP_SIZE>0 + if( pFd->mmapSizeMax>0 ){ + /* Ensure that there is always at least a 256 byte buffer of addressable + ** memory following the returned page. If the database is corrupt, + ** SQLite may overread the page slightly (in practice only a few bytes, + ** but 256 is safe, round, number). */ + const int nEofBuffer = 256; + if( pFd->pMapRegion==0 ){ + int rc = winMapfile(pFd, -1); + if( rc!=SQLITE_OK ){ + OSTRACE(("FETCH pid=%lu, pFile=%p, rc=%s\n", + osGetCurrentProcessId(), pFd, sqlite3ErrName(rc))); + return rc; + } + } + if( pFd->mmapSize >= (iOff+nAmt+nEofBuffer) ){ + assert( pFd->pMapRegion!=0 ); + *pp = &((u8 *)pFd->pMapRegion)[iOff]; + pFd->nFetchOut++; + } + } +#endif + + OSTRACE(("FETCH pid=%lu, pFile=%p, pp=%p, *pp=%p, rc=SQLITE_OK\n", + osGetCurrentProcessId(), fd, pp, *pp)); + return SQLITE_OK; +} + +/* +** If the third argument is non-NULL, then this function releases a +** reference obtained by an earlier call to winFetch(). The second +** argument passed to this function must be the same as the corresponding +** argument that was passed to the winFetch() invocation. +** +** Or, if the third argument is NULL, then this function is being called +** to inform the VFS layer that, according to POSIX, any existing mapping +** may now be invalid and should be unmapped. +*/ +static int winUnfetch(sqlite3_file *fd, i64 iOff, void *p){ +#if SQLITE_MAX_MMAP_SIZE>0 + winFile *pFd = (winFile*)fd; /* The underlying database file */ + + /* If p==0 (unmap the entire file) then there must be no outstanding + ** xFetch references. Or, if p!=0 (meaning it is an xFetch reference), + ** then there must be at least one outstanding. */ + assert( (p==0)==(pFd->nFetchOut==0) ); + + /* If p!=0, it must match the iOff value. */ + assert( p==0 || p==&((u8 *)pFd->pMapRegion)[iOff] ); + + OSTRACE(("UNFETCH pid=%lu, pFile=%p, offset=%lld, p=%p\n", + osGetCurrentProcessId(), pFd, iOff, p)); + + if( p ){ + pFd->nFetchOut--; + }else{ + /* FIXME: If Windows truly always prevents truncating or deleting a + ** file while a mapping is held, then the following winUnmapfile() call + ** is unnecessary can be omitted - potentially improving + ** performance. */ + winUnmapfile(pFd); + } + + assert( pFd->nFetchOut>=0 ); +#endif + + OSTRACE(("UNFETCH pid=%lu, pFile=%p, rc=SQLITE_OK\n", + osGetCurrentProcessId(), fd)); + return SQLITE_OK; +} + +/* +** Here ends the implementation of all sqlite3_file methods. +** +********************** End sqlite3_file Methods ******************************* +******************************************************************************/ + +/* +** This vector defines all the methods that can operate on an +** sqlite3_file for win32. +*/ +static const sqlite3_io_methods winIoMethod = { + 3, /* iVersion */ + winClose, /* xClose */ + winRead, /* xRead */ + winWrite, /* xWrite */ + winTruncate, /* xTruncate */ + winSync, /* xSync */ + winFileSize, /* xFileSize */ + winLock, /* xLock */ + winUnlock, /* xUnlock */ + winCheckReservedLock, /* xCheckReservedLock */ + winFileControl, /* xFileControl */ + winSectorSize, /* xSectorSize */ + winDeviceCharacteristics, /* xDeviceCharacteristics */ + winShmMap, /* xShmMap */ + winShmLock, /* xShmLock */ + winShmBarrier, /* xShmBarrier */ + winShmUnmap, /* xShmUnmap */ + winFetch, /* xFetch */ + winUnfetch /* xUnfetch */ +}; + +/* +** This vector defines all the methods that can operate on an +** sqlite3_file for win32 without performing any locking. +*/ +static const sqlite3_io_methods winIoNolockMethod = { + 3, /* iVersion */ + winClose, /* xClose */ + winRead, /* xRead */ + winWrite, /* xWrite */ + winTruncate, /* xTruncate */ + winSync, /* xSync */ + winFileSize, /* xFileSize */ + winNolockLock, /* xLock */ + winNolockUnlock, /* xUnlock */ + winNolockCheckReservedLock, /* xCheckReservedLock */ + winFileControl, /* xFileControl */ + winSectorSize, /* xSectorSize */ + winDeviceCharacteristics, /* xDeviceCharacteristics */ + winShmMap, /* xShmMap */ + winShmLock, /* xShmLock */ + winShmBarrier, /* xShmBarrier */ + winShmUnmap, /* xShmUnmap */ + winFetch, /* xFetch */ + winUnfetch /* xUnfetch */ +}; + +static winVfsAppData winAppData = { + &winIoMethod, /* pMethod */ + 0, /* pAppData */ + 0 /* bNoLock */ +}; + +static winVfsAppData winNolockAppData = { + &winIoNolockMethod, /* pMethod */ + 0, /* pAppData */ + 1 /* bNoLock */ +}; + +/**************************************************************************** +**************************** sqlite3_vfs methods **************************** +** +** This division contains the implementation of methods on the +** sqlite3_vfs object. +*/ + +/* +** This function returns non-zero if the specified UTF-8 string buffer +** ends with a directory separator character or one was successfully +** added to it. +*/ +static int winMakeEndInDirSep(int nBuf, char *zBuf){ + if( zBuf ){ + int nLen = sqlite3Strlen30(zBuf); + if( nLen>0 ){ + if( winIsDirSep(zBuf[nLen-1]) ){ + return 1; + }else if( nLen+1mxPathname; + nBuf = 2 + (i64)nMax; + zBuf = sqlite3MallocZero( nBuf ); + if( !zBuf ){ + OSTRACE(("TEMP-FILENAME rc=SQLITE_IOERR_NOMEM\n")); + return SQLITE_IOERR_NOMEM_BKPT; + } + + /* Figure out the effective temporary directory. First, check if one + ** has been explicitly set by the application; otherwise, use the one + ** configured by the operating system. + */ + nDir = nMax - (nPre + 15); + assert( nDir>0 ); + if( winTempDirDefined() ){ + int nDirLen = sqlite3Strlen30(sqlite3_temp_directory); + if( nDirLen>0 ){ + if( !winIsDirSep(sqlite3_temp_directory[nDirLen-1]) ){ + nDirLen++; + } + if( nDirLen>nDir ){ + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); + sqlite3_free(zBuf); + OSTRACE(("TEMP-FILENAME rc=SQLITE_ERROR\n")); + return winLogError(SQLITE_ERROR, 0, "winGetTempname1", 0); + } + sqlite3_snprintf(nMax, zBuf, "%s", sqlite3_temp_directory); + } + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); + } + +#if defined(__CYGWIN__) + else if( osGetenv!=NULL ){ + static const char *azDirs[] = { + 0, /* getenv("SQLITE_TMPDIR") */ + 0, /* getenv("TMPDIR") */ + 0, /* getenv("TMP") */ + 0, /* getenv("TEMP") */ + 0, /* getenv("USERPROFILE") */ + "/var/tmp", + "/usr/tmp", + "/tmp", + ".", + 0 /* List terminator */ + }; + unsigned int i; + const char *zDir = 0; + + if( !azDirs[0] ) azDirs[0] = osGetenv("SQLITE_TMPDIR"); + if( !azDirs[1] ) azDirs[1] = osGetenv("TMPDIR"); + if( !azDirs[2] ) azDirs[2] = osGetenv("TMP"); + if( !azDirs[3] ) azDirs[3] = osGetenv("TEMP"); + if( !azDirs[4] ) azDirs[4] = osGetenv("USERPROFILE"); + for(i=0; i/etilqs_XXXXXXXXXXXXXXX\0\0" + ** + ** If not, return SQLITE_ERROR. The number 17 is used here in order to + ** account for the space used by the 15 character random suffix and the + ** two trailing NUL characters. The final directory separator character + ** has already added if it was not already present. + */ + nLen = sqlite3Strlen30(zBuf); + if( (nLen + nPre + 17) > nBuf ){ + sqlite3_free(zBuf); + OSTRACE(("TEMP-FILENAME rc=SQLITE_ERROR\n")); + return winLogError(SQLITE_ERROR, 0, "winGetTempname5", 0); + } + + sqlite3_snprintf(nBuf-16-nLen, zBuf+nLen, SQLITE_TEMP_FILE_PREFIX); + + j = sqlite3Strlen30(zBuf); + sqlite3_randomness(15, &zBuf[j]); + pid = osGetCurrentProcessId(); + for(i=0; i<15; i++, j++){ + zBuf[j] += pid & 0xff; + pid >>= 8; + zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ]; + } + zBuf[j] = 0; + zBuf[j+1] = 0; + *pzBuf = zBuf; + + OSTRACE(("TEMP-FILENAME name=%s, rc=SQLITE_OK\n", zBuf)); + return SQLITE_OK; +} + +/* +** Return TRUE if the named file is really a directory. Return false if +** it is something other than a directory, or if there is any kind of memory +** allocation failure. +*/ +static int winIsDir(const void *zConverted){ + DWORD attr; + int rc = 0; + DWORD lastErrno; + + if( osIsNT() ){ + int cnt = 0; + WIN32_FILE_ATTRIBUTE_DATA sAttrData; + memset(&sAttrData, 0, sizeof(sAttrData)); + while( !(rc = osGetFileAttributesExW((LPCWSTR)zConverted, + GetFileExInfoStandard, + &sAttrData)) && winRetryIoerr(&cnt, &lastErrno) ){} + if( !rc ){ + return 0; /* Invalid name? */ + } + attr = sAttrData.dwFileAttributes; +#if SQLITE_OS_WINCE==0 && defined(SQLITE_WIN32_HAS_ANSI) + }else{ + attr = osGetFileAttributesA((char*)zConverted); +#endif + } + return (attr!=INVALID_FILE_ATTRIBUTES) && (attr&FILE_ATTRIBUTE_DIRECTORY); +} + +/* forward reference */ +static int winAccess( + sqlite3_vfs *pVfs, /* Not used on win32 */ + const char *zFilename, /* Name of file to check */ + int flags, /* Type of test to make on this file */ + int *pResOut /* OUT: Result */ +); + +/* +** The Windows version of xAccess() accepts an extra bit in the flags +** parameter that prevents an anti-virus retry loop. +*/ +#define NORETRY 0x4000 + +/* +** Open a file. +*/ +static int winOpen( + sqlite3_vfs *pVfs, /* Used to get maximum path length and AppData */ + const char *zName, /* Name of the file (UTF-8) */ + sqlite3_file *id, /* Write the SQLite file handle here */ + int flags, /* Open mode flags */ + int *pOutFlags /* Status return flags */ +){ + HANDLE h; + DWORD lastErrno = 0; + DWORD dwDesiredAccess; + DWORD dwShareMode; + DWORD dwCreationDisposition; + DWORD dwFlagsAndAttributes = 0; +#if SQLITE_OS_WINCE + int isTemp = 0; +#endif + winVfsAppData *pAppData; + winFile *pFile = (winFile*)id; + void *zConverted; /* Filename in OS encoding */ + const char *zUtf8Name = zName; /* Filename in UTF-8 encoding */ + int cnt = 0; + int isRO = 0; /* file is known to be accessible readonly */ + + /* If argument zPath is a NULL pointer, this function is required to open + ** a temporary file. Use this buffer to store the file name in. + */ + char *zTmpname = 0; /* For temporary filename, if necessary. */ + + int rc = SQLITE_OK; /* Function Return Code */ +#if !defined(NDEBUG) || SQLITE_OS_WINCE + int eType = flags&0x0FFF00; /* Type of file to open */ +#endif + + int isExclusive = (flags & SQLITE_OPEN_EXCLUSIVE); + int isDelete = (flags & SQLITE_OPEN_DELETEONCLOSE); + int isCreate = (flags & SQLITE_OPEN_CREATE); + int isReadonly = (flags & SQLITE_OPEN_READONLY); + int isReadWrite = (flags & SQLITE_OPEN_READWRITE); + +#ifndef NDEBUG + int isOpenJournal = (isCreate && ( + eType==SQLITE_OPEN_SUPER_JOURNAL + || eType==SQLITE_OPEN_MAIN_JOURNAL + || eType==SQLITE_OPEN_WAL + )); +#endif + + OSTRACE(("OPEN name=%s, pFile=%p, flags=%x, pOutFlags=%p\n", + zUtf8Name, id, flags, pOutFlags)); + + /* Check the following statements are true: + ** + ** (a) Exactly one of the READWRITE and READONLY flags must be set, and + ** (b) if CREATE is set, then READWRITE must also be set, and + ** (c) if EXCLUSIVE is set, then CREATE must also be set. + ** (d) if DELETEONCLOSE is set, then CREATE must also be set. + */ + assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly)); + assert(isCreate==0 || isReadWrite); + assert(isExclusive==0 || isCreate); + assert(isDelete==0 || isCreate); + + /* The main DB, main journal, WAL file and super-journal are never + ** automatically deleted. Nor are they ever temporary files. */ + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB ); + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL ); + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_SUPER_JOURNAL ); + assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL ); + + /* Assert that the upper layer has set one of the "file-type" flags. */ + assert( eType==SQLITE_OPEN_MAIN_DB || eType==SQLITE_OPEN_TEMP_DB + || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL + || eType==SQLITE_OPEN_SUBJOURNAL || eType==SQLITE_OPEN_SUPER_JOURNAL + || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL + ); + + assert( pFile!=0 ); + memset(pFile, 0, sizeof(winFile)); + pFile->h = INVALID_HANDLE_VALUE; + +#if SQLITE_OS_WINRT + if( !zUtf8Name && !sqlite3_temp_directory ){ + sqlite3_log(SQLITE_ERROR, + "sqlite3_temp_directory variable should be set for WinRT"); + } +#endif + + /* If the second argument to this function is NULL, generate a + ** temporary file name to use + */ + if( !zUtf8Name ){ + assert( isDelete && !isOpenJournal ); + rc = winGetTempname(pVfs, &zTmpname); + if( rc!=SQLITE_OK ){ + OSTRACE(("OPEN name=%s, rc=%s", zUtf8Name, sqlite3ErrName(rc))); + return rc; + } + zUtf8Name = zTmpname; + } + + /* Database filenames are double-zero terminated if they are not + ** URIs with parameters. Hence, they can always be passed into + ** sqlite3_uri_parameter(). + */ + assert( (eType!=SQLITE_OPEN_MAIN_DB) || (flags & SQLITE_OPEN_URI) || + zUtf8Name[sqlite3Strlen30(zUtf8Name)+1]==0 ); + + /* Convert the filename to the system encoding. */ + zConverted = winConvertFromUtf8Filename(zUtf8Name); + if( zConverted==0 ){ + sqlite3_free(zTmpname); + OSTRACE(("OPEN name=%s, rc=SQLITE_IOERR_NOMEM", zUtf8Name)); + return SQLITE_IOERR_NOMEM_BKPT; + } + + if( winIsDir(zConverted) ){ + sqlite3_free(zConverted); + sqlite3_free(zTmpname); + OSTRACE(("OPEN name=%s, rc=SQLITE_CANTOPEN_ISDIR", zUtf8Name)); + return SQLITE_CANTOPEN_ISDIR; + } + + if( isReadWrite ){ + dwDesiredAccess = GENERIC_READ | GENERIC_WRITE; + }else{ + dwDesiredAccess = GENERIC_READ; + } + + /* SQLITE_OPEN_EXCLUSIVE is used to make sure that a new file is + ** created. SQLite doesn't use it to indicate "exclusive access" + ** as it is usually understood. + */ + if( isExclusive ){ + /* Creates a new file, only if it does not already exist. */ + /* If the file exists, it fails. */ + dwCreationDisposition = CREATE_NEW; + }else if( isCreate ){ + /* Open existing file, or create if it doesn't exist */ + dwCreationDisposition = OPEN_ALWAYS; + }else{ + /* Opens a file, only if it exists. */ + dwCreationDisposition = OPEN_EXISTING; + } + + if( 0==sqlite3_uri_boolean(zName, "exclusive", 0) ){ + dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; + }else{ + dwShareMode = 0; + } + + if( isDelete ){ +#if SQLITE_OS_WINCE + dwFlagsAndAttributes = FILE_ATTRIBUTE_HIDDEN; + isTemp = 1; +#else + dwFlagsAndAttributes = FILE_ATTRIBUTE_TEMPORARY + | FILE_ATTRIBUTE_HIDDEN + | FILE_FLAG_DELETE_ON_CLOSE; +#endif + }else{ + dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL; + } + /* Reports from the internet are that performance is always + ** better if FILE_FLAG_RANDOM_ACCESS is used. Ticket #2699. */ +#if SQLITE_OS_WINCE + dwFlagsAndAttributes |= FILE_FLAG_RANDOM_ACCESS; +#endif + + if( osIsNT() ){ +#if SQLITE_OS_WINRT + CREATEFILE2_EXTENDED_PARAMETERS extendedParameters; + extendedParameters.dwSize = sizeof(CREATEFILE2_EXTENDED_PARAMETERS); + extendedParameters.dwFileAttributes = + dwFlagsAndAttributes & FILE_ATTRIBUTE_MASK; + extendedParameters.dwFileFlags = dwFlagsAndAttributes & FILE_FLAG_MASK; + extendedParameters.dwSecurityQosFlags = SECURITY_ANONYMOUS; + extendedParameters.lpSecurityAttributes = NULL; + extendedParameters.hTemplateFile = NULL; + do{ + h = osCreateFile2((LPCWSTR)zConverted, + dwDesiredAccess, + dwShareMode, + dwCreationDisposition, + &extendedParameters); + if( h!=INVALID_HANDLE_VALUE ) break; + if( isReadWrite ){ + int rc2; + sqlite3BeginBenignMalloc(); + rc2 = winAccess(pVfs, zUtf8Name, SQLITE_ACCESS_READ|NORETRY, &isRO); + sqlite3EndBenignMalloc(); + if( rc2==SQLITE_OK && isRO ) break; + } + }while( winRetryIoerr(&cnt, &lastErrno) ); +#else + do{ + h = osCreateFileW((LPCWSTR)zConverted, + dwDesiredAccess, + dwShareMode, NULL, + dwCreationDisposition, + dwFlagsAndAttributes, + NULL); + if( h!=INVALID_HANDLE_VALUE ) break; + if( isReadWrite ){ + int rc2; + sqlite3BeginBenignMalloc(); + rc2 = winAccess(pVfs, zUtf8Name, SQLITE_ACCESS_READ|NORETRY, &isRO); + sqlite3EndBenignMalloc(); + if( rc2==SQLITE_OK && isRO ) break; + } + }while( winRetryIoerr(&cnt, &lastErrno) ); +#endif + } +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + do{ + h = osCreateFileA((LPCSTR)zConverted, + dwDesiredAccess, + dwShareMode, NULL, + dwCreationDisposition, + dwFlagsAndAttributes, + NULL); + if( h!=INVALID_HANDLE_VALUE ) break; + if( isReadWrite ){ + int rc2; + sqlite3BeginBenignMalloc(); + rc2 = winAccess(pVfs, zUtf8Name, SQLITE_ACCESS_READ|NORETRY, &isRO); + sqlite3EndBenignMalloc(); + if( rc2==SQLITE_OK && isRO ) break; + } + }while( winRetryIoerr(&cnt, &lastErrno) ); + } +#endif + winLogIoerr(cnt, __LINE__); + + OSTRACE(("OPEN file=%p, name=%s, access=%lx, rc=%s\n", h, zUtf8Name, + dwDesiredAccess, (h==INVALID_HANDLE_VALUE) ? "failed" : "ok")); + + if( h==INVALID_HANDLE_VALUE ){ + sqlite3_free(zConverted); + sqlite3_free(zTmpname); + if( isReadWrite && isRO && !isExclusive ){ + return winOpen(pVfs, zName, id, + ((flags|SQLITE_OPEN_READONLY) & + ~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)), + pOutFlags); + }else{ + pFile->lastErrno = lastErrno; + winLogError(SQLITE_CANTOPEN, pFile->lastErrno, "winOpen", zUtf8Name); + return SQLITE_CANTOPEN_BKPT; + } + } + + if( pOutFlags ){ + if( isReadWrite ){ + *pOutFlags = SQLITE_OPEN_READWRITE; + }else{ + *pOutFlags = SQLITE_OPEN_READONLY; + } + } + + OSTRACE(("OPEN file=%p, name=%s, access=%lx, pOutFlags=%p, *pOutFlags=%d, " + "rc=%s\n", h, zUtf8Name, dwDesiredAccess, pOutFlags, pOutFlags ? + *pOutFlags : 0, (h==INVALID_HANDLE_VALUE) ? "failed" : "ok")); + + pAppData = (winVfsAppData*)pVfs->pAppData; + +#if SQLITE_OS_WINCE + { + if( isReadWrite && eType==SQLITE_OPEN_MAIN_DB + && ((pAppData==NULL) || !pAppData->bNoLock) + && (rc = winceCreateLock(zName, pFile))!=SQLITE_OK + ){ + osCloseHandle(h); + sqlite3_free(zConverted); + sqlite3_free(zTmpname); + OSTRACE(("OPEN-CE-LOCK name=%s, rc=%s\n", zName, sqlite3ErrName(rc))); + return rc; + } + } + if( isTemp ){ + pFile->zDeleteOnClose = zConverted; + }else +#endif + { + sqlite3_free(zConverted); + } + + sqlite3_free(zTmpname); + id->pMethods = pAppData ? pAppData->pMethod : &winIoMethod; + pFile->pVfs = pVfs; + pFile->h = h; + if( isReadonly ){ + pFile->ctrlFlags |= WINFILE_RDONLY; + } + if( (flags & SQLITE_OPEN_MAIN_DB) + && sqlite3_uri_boolean(zName, "psow", SQLITE_POWERSAFE_OVERWRITE) + ){ + pFile->ctrlFlags |= WINFILE_PSOW; + } + pFile->lastErrno = NO_ERROR; + pFile->zPath = zName; +#if SQLITE_MAX_MMAP_SIZE>0 + pFile->hMap = NULL; + pFile->pMapRegion = 0; + pFile->mmapSize = 0; + pFile->mmapSizeMax = sqlite3GlobalConfig.szMmap; +#endif + + OpenCounter(+1); + return rc; +} + +/* +** Delete the named file. +** +** Note that Windows does not allow a file to be deleted if some other +** process has it open. Sometimes a virus scanner or indexing program +** will open a journal file shortly after it is created in order to do +** whatever it does. While this other process is holding the +** file open, we will be unable to delete it. To work around this +** problem, we delay 100 milliseconds and try to delete again. Up +** to MX_DELETION_ATTEMPTs deletion attempts are run before giving +** up and returning an error. +*/ +static int winDelete( + sqlite3_vfs *pVfs, /* Not used on win32 */ + const char *zFilename, /* Name of file to delete */ + int syncDir /* Not used on win32 */ +){ + int cnt = 0; + int rc; + DWORD attr; + DWORD lastErrno = 0; + void *zConverted; + UNUSED_PARAMETER(pVfs); + UNUSED_PARAMETER(syncDir); + + SimulateIOError(return SQLITE_IOERR_DELETE); + OSTRACE(("DELETE name=%s, syncDir=%d\n", zFilename, syncDir)); + + zConverted = winConvertFromUtf8Filename(zFilename); + if( zConverted==0 ){ + OSTRACE(("DELETE name=%s, rc=SQLITE_IOERR_NOMEM\n", zFilename)); + return SQLITE_IOERR_NOMEM_BKPT; + } + if( osIsNT() ){ + do { +#if SQLITE_OS_WINRT + WIN32_FILE_ATTRIBUTE_DATA sAttrData; + memset(&sAttrData, 0, sizeof(sAttrData)); + if ( osGetFileAttributesExW(zConverted, GetFileExInfoStandard, + &sAttrData) ){ + attr = sAttrData.dwFileAttributes; + }else{ + lastErrno = osGetLastError(); + if( lastErrno==ERROR_FILE_NOT_FOUND + || lastErrno==ERROR_PATH_NOT_FOUND ){ + rc = SQLITE_IOERR_DELETE_NOENT; /* Already gone? */ + }else{ + rc = SQLITE_ERROR; + } + break; + } +#else + attr = osGetFileAttributesW(zConverted); +#endif + if ( attr==INVALID_FILE_ATTRIBUTES ){ + lastErrno = osGetLastError(); + if( lastErrno==ERROR_FILE_NOT_FOUND + || lastErrno==ERROR_PATH_NOT_FOUND ){ + rc = SQLITE_IOERR_DELETE_NOENT; /* Already gone? */ + }else{ + rc = SQLITE_ERROR; + } + break; + } + if ( attr&FILE_ATTRIBUTE_DIRECTORY ){ + rc = SQLITE_ERROR; /* Files only. */ + break; + } + if ( osDeleteFileW(zConverted) ){ + rc = SQLITE_OK; /* Deleted OK. */ + break; + } + if ( !winRetryIoerr(&cnt, &lastErrno) ){ + rc = SQLITE_ERROR; /* No more retries. */ + break; + } + } while(1); + } +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + do { + attr = osGetFileAttributesA(zConverted); + if ( attr==INVALID_FILE_ATTRIBUTES ){ + lastErrno = osGetLastError(); + if( lastErrno==ERROR_FILE_NOT_FOUND + || lastErrno==ERROR_PATH_NOT_FOUND ){ + rc = SQLITE_IOERR_DELETE_NOENT; /* Already gone? */ + }else{ + rc = SQLITE_ERROR; + } + break; + } + if ( attr&FILE_ATTRIBUTE_DIRECTORY ){ + rc = SQLITE_ERROR; /* Files only. */ + break; + } + if ( osDeleteFileA(zConverted) ){ + rc = SQLITE_OK; /* Deleted OK. */ + break; + } + if ( !winRetryIoerr(&cnt, &lastErrno) ){ + rc = SQLITE_ERROR; /* No more retries. */ + break; + } + } while(1); + } +#endif + if( rc && rc!=SQLITE_IOERR_DELETE_NOENT ){ + rc = winLogError(SQLITE_IOERR_DELETE, lastErrno, "winDelete", zFilename); + }else{ + winLogIoerr(cnt, __LINE__); + } + sqlite3_free(zConverted); + OSTRACE(("DELETE name=%s, rc=%s\n", zFilename, sqlite3ErrName(rc))); + return rc; +} + +/* +** Check the existence and status of a file. +*/ +static int winAccess( + sqlite3_vfs *pVfs, /* Not used on win32 */ + const char *zFilename, /* Name of file to check */ + int flags, /* Type of test to make on this file */ + int *pResOut /* OUT: Result */ +){ + DWORD attr; + int rc = 0; + DWORD lastErrno = 0; + void *zConverted; + int noRetry = 0; /* Do not use winRetryIoerr() */ + UNUSED_PARAMETER(pVfs); + + if( (flags & NORETRY)!=0 ){ + noRetry = 1; + flags &= ~NORETRY; + } + + SimulateIOError( return SQLITE_IOERR_ACCESS; ); + OSTRACE(("ACCESS name=%s, flags=%x, pResOut=%p\n", + zFilename, flags, pResOut)); + + if( zFilename==0 ){ + *pResOut = 0; + OSTRACE(("ACCESS name=%s, pResOut=%p, *pResOut=%d, rc=SQLITE_OK\n", + zFilename, pResOut, *pResOut)); + return SQLITE_OK; + } + + zConverted = winConvertFromUtf8Filename(zFilename); + if( zConverted==0 ){ + OSTRACE(("ACCESS name=%s, rc=SQLITE_IOERR_NOMEM\n", zFilename)); + return SQLITE_IOERR_NOMEM_BKPT; + } + if( osIsNT() ){ + int cnt = 0; + WIN32_FILE_ATTRIBUTE_DATA sAttrData; + memset(&sAttrData, 0, sizeof(sAttrData)); + while( !(rc = osGetFileAttributesExW((LPCWSTR)zConverted, + GetFileExInfoStandard, + &sAttrData)) + && !noRetry + && winRetryIoerr(&cnt, &lastErrno) + ){ /* Loop until true */} + if( rc ){ + /* For an SQLITE_ACCESS_EXISTS query, treat a zero-length file + ** as if it does not exist. + */ + if( flags==SQLITE_ACCESS_EXISTS + && sAttrData.nFileSizeHigh==0 + && sAttrData.nFileSizeLow==0 ){ + attr = INVALID_FILE_ATTRIBUTES; + }else{ + attr = sAttrData.dwFileAttributes; + } + }else{ + winLogIoerr(cnt, __LINE__); + if( lastErrno!=ERROR_FILE_NOT_FOUND && lastErrno!=ERROR_PATH_NOT_FOUND ){ + sqlite3_free(zConverted); + return winLogError(SQLITE_IOERR_ACCESS, lastErrno, "winAccess", + zFilename); + }else{ + attr = INVALID_FILE_ATTRIBUTES; + } + } + } +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + attr = osGetFileAttributesA((char*)zConverted); + } +#endif + sqlite3_free(zConverted); + switch( flags ){ + case SQLITE_ACCESS_READ: + case SQLITE_ACCESS_EXISTS: + rc = attr!=INVALID_FILE_ATTRIBUTES; + break; + case SQLITE_ACCESS_READWRITE: + rc = attr!=INVALID_FILE_ATTRIBUTES && + (attr & FILE_ATTRIBUTE_READONLY)==0; + break; + default: + assert(!"Invalid flags argument"); + } + *pResOut = rc; + OSTRACE(("ACCESS name=%s, pResOut=%p, *pResOut=%d, rc=SQLITE_OK\n", + zFilename, pResOut, *pResOut)); + return SQLITE_OK; +} + +/* +** Returns non-zero if the specified path name starts with the "long path" +** prefix. +*/ +static BOOL winIsLongPathPrefix( + const char *zPathname +){ + return ( zPathname[0]=='\\' && zPathname[1]=='\\' + && zPathname[2]=='?' && zPathname[3]=='\\' ); +} + +/* +** Returns non-zero if the specified path name starts with a drive letter +** followed by a colon character. +*/ +static BOOL winIsDriveLetterAndColon( + const char *zPathname +){ + return ( sqlite3Isalpha(zPathname[0]) && zPathname[1]==':' ); +} + +#ifdef _WIN32 +/* +** Returns non-zero if the specified path name should be used verbatim. If +** non-zero is returned from this function, the calling function must simply +** use the provided path name verbatim -OR- resolve it into a full path name +** using the GetFullPathName Win32 API function (if available). +*/ +static BOOL winIsVerbatimPathname( + const char *zPathname +){ + /* + ** If the path name starts with a forward slash or a backslash, it is either + ** a legal UNC name, a volume relative path, or an absolute path name in the + ** "Unix" format on Windows. There is no easy way to differentiate between + ** the final two cases; therefore, we return the safer return value of TRUE + ** so that callers of this function will simply use it verbatim. + */ + if ( winIsDirSep(zPathname[0]) ){ + return TRUE; + } + + /* + ** If the path name starts with a letter and a colon it is either a volume + ** relative path or an absolute path. Callers of this function must not + ** attempt to treat it as a relative path name (i.e. they should simply use + ** it verbatim). + */ + if ( winIsDriveLetterAndColon(zPathname) ){ + return TRUE; + } + + /* + ** If we get to this point, the path name should almost certainly be a purely + ** relative one (i.e. not a UNC name, not absolute, and not volume relative). + */ + return FALSE; +} +#endif /* _WIN32 */ + +#ifdef __CYGWIN__ +/* +** Simplify a filename into its canonical form +** by making the following changes: +** +** * convert any '/' to '\' (win32) or reverse (Cygwin) +** * removing any trailing and duplicate / (except for UNC paths) +** * convert /./ into just / +** +** Changes are made in-place. Return the new name length. +** +** The original filename is in z[0..]. If the path is shortened, +** no-longer used bytes will be written by '\0'. +*/ +static void winSimplifyName(char *z){ + int i, j; + for(i=j=0; z[i]; ++i){ + if( winIsDirSep(z[i]) ){ +#if !defined(SQLITE_TEST) + /* Some test-cases assume that "./foo" and "foo" are different */ + if( z[i+1]=='.' && winIsDirSep(z[i+2]) ){ + ++i; + continue; + } +#endif + if( !z[i+1] || (winIsDirSep(z[i+1]) && (i!=0)) ){ + continue; + } + z[j++] = osGetenv?'/':'\\'; + }else{ + z[j++] = z[i]; + } + } + while(jnOut ){ + /* SQLite assumes that xFullPathname() nul-terminates the output buffer + ** even if it returns an error. */ + zOut[iOff] = '\0'; + return SQLITE_CANTOPEN_BKPT; + } + sqlite3_snprintf(nOut-iOff, &zOut[iOff], "%s", zPath); + return SQLITE_OK; +} +#endif /* __CYGWIN__ */ + +/* +** Turn a relative pathname into a full pathname. Write the full +** pathname into zOut[]. zOut[] will be at least pVfs->mxPathname +** bytes in size. +*/ +static int winFullPathnameNoMutex( + sqlite3_vfs *pVfs, /* Pointer to vfs object */ + const char *zRelative, /* Possibly relative input path */ + int nFull, /* Size of output buffer in bytes */ + char *zFull /* Output buffer */ +){ +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT + int nByte; + void *zConverted; + char *zOut; +#endif + + /* If this path name begins with "/X:" or "\\?\", where "X" is any + ** alphabetic character, discard the initial "/" from the pathname. + */ + if( zRelative[0]=='/' && (winIsDriveLetterAndColon(zRelative+1) + || winIsLongPathPrefix(zRelative+1)) ){ + zRelative++; + } + + SimulateIOError( return SQLITE_ERROR ); + +#ifdef __CYGWIN__ + if( osGetcwd ){ + zFull[nFull-1] = '\0'; + if( !winIsDriveLetterAndColon(zRelative) || !winIsDirSep(zRelative[2]) ){ + int rc = SQLITE_OK; + int nLink = 1; /* Number of symbolic links followed so far */ + const char *zIn = zRelative; /* Input path for each iteration of loop */ + char *zDel = 0; + struct stat buf; + + UNUSED_PARAMETER(pVfs); + + do { + /* Call lstat() on path zIn. Set bLink to true if the path is a symbolic + ** link, or false otherwise. */ + int bLink = 0; + if( osLstat && osReadlink ) { + if( osLstat(zIn, &buf)!=0 ){ + int myErrno = osErrno; + if( myErrno!=ENOENT ){ + rc = winLogError(SQLITE_CANTOPEN_BKPT, (DWORD)myErrno, "lstat", zIn); + } + }else{ + bLink = ((buf.st_mode & 0170000) == 0120000); + } + + if( bLink ){ + if( zDel==0 ){ + zDel = sqlite3MallocZero(nFull); + if( zDel==0 ) rc = SQLITE_NOMEM; + }else if( ++nLink>SQLITE_MAX_SYMLINKS ){ + rc = SQLITE_CANTOPEN_BKPT; + } + + if( rc==SQLITE_OK ){ + nByte = osReadlink(zIn, zDel, nFull-1); + if( nByte ==(DWORD)-1 ){ + rc = winLogError(SQLITE_CANTOPEN_BKPT, (DWORD)osErrno, "readlink", zIn); + }else{ + if( zDel[0]!='/' ){ + int n; + for(n = sqlite3Strlen30(zIn); n>0 && zIn[n-1]!='/'; n--); + if( nByte+n+1>nFull ){ + rc = SQLITE_CANTOPEN_BKPT; + }else{ + memmove(&zDel[n], zDel, nByte+1); + memcpy(zDel, zIn, n); + nByte += n; + } + } + zDel[nByte] = '\0'; + } + } + + zIn = zDel; + } + } + + assert( rc!=SQLITE_OK || zIn!=zFull || zIn[0]=='/' ); + if( rc==SQLITE_OK && zIn!=zFull ){ + rc = mkFullPathname(zIn, zFull, nFull); + } + if( bLink==0 ) break; + zIn = zFull; + }while( rc==SQLITE_OK ); + + sqlite3_free(zDel); + winSimplifyName(zFull); + return rc; + } + } +#endif /* __CYGWIN__ */ + +#if (SQLITE_OS_WINCE || SQLITE_OS_WINRT) && defined(_WIN32) + SimulateIOError( return SQLITE_ERROR ); + /* WinCE has no concept of a relative pathname, or so I am told. */ + /* WinRT has no way to convert a relative path to an absolute one. */ + if ( sqlite3_data_directory && !winIsVerbatimPathname(zRelative) ){ + /* + ** NOTE: We are dealing with a relative path name and the data + ** directory has been set. Therefore, use it as the basis + ** for converting the relative path name to an absolute + ** one by prepending the data directory and a backslash. + */ + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s%c%s", + sqlite3_data_directory, winGetDirSep(), zRelative); + }else{ + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s", zRelative); + } + return SQLITE_OK; +#endif + +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT +#if defined(_WIN32) + /* It's odd to simulate an io-error here, but really this is just + ** using the io-error infrastructure to test that SQLite handles this + ** function failing. This function could fail if, for example, the + ** current working directory has been unlinked. + */ + SimulateIOError( return SQLITE_ERROR ); + if ( sqlite3_data_directory && !winIsVerbatimPathname(zRelative) ){ + /* + ** NOTE: We are dealing with a relative path name and the data + ** directory has been set. Therefore, use it as the basis + ** for converting the relative path name to an absolute + ** one by prepending the data directory and a backslash. + */ + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s%c%s", + sqlite3_data_directory, winGetDirSep(), zRelative); + return SQLITE_OK; + } +#endif + zConverted = winConvertFromUtf8Filename(zRelative); + if( zConverted==0 ){ + return SQLITE_IOERR_NOMEM_BKPT; + } + if( osIsNT() ){ + LPWSTR zTemp; + nByte = osGetFullPathNameW((LPCWSTR)zConverted, 0, 0, 0); + if( nByte==0 ){ + sqlite3_free(zConverted); + return winLogError(SQLITE_CANTOPEN_FULLPATH, osGetLastError(), + "winFullPathname1", zRelative); + } + nByte += 3; + zTemp = sqlite3MallocZero( nByte*sizeof(zTemp[0]) ); + if( zTemp==0 ){ + sqlite3_free(zConverted); + return SQLITE_IOERR_NOMEM_BKPT; + } + nByte = osGetFullPathNameW((LPCWSTR)zConverted, nByte, zTemp, 0); + if( nByte==0 ){ + sqlite3_free(zConverted); + sqlite3_free(zTemp); + return winLogError(SQLITE_CANTOPEN_FULLPATH, osGetLastError(), + "winFullPathname2", zRelative); + } + sqlite3_free(zConverted); + zOut = winUnicodeToUtf8(zTemp); + sqlite3_free(zTemp); + } +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + char *zTemp; + nByte = osGetFullPathNameA((char*)zConverted, 0, 0, 0); + if( nByte==0 ){ + sqlite3_free(zConverted); + return winLogError(SQLITE_CANTOPEN_FULLPATH, osGetLastError(), + "winFullPathname3", zRelative); + } + zTemp = sqlite3MallocZero( nByte*sizeof(zTemp[0]) + 3*sizeof(zTemp[0]) ); + if( zTemp==0 ){ + sqlite3_free(zConverted); + return SQLITE_IOERR_NOMEM_BKPT; + } + nByte = osGetFullPathNameA((char*)zConverted, nByte+3, zTemp, 0); + if( nByte==0 ){ + sqlite3_free(zConverted); + sqlite3_free(zTemp); + return winLogError(SQLITE_CANTOPEN_FULLPATH, osGetLastError(), + "winFullPathname4", zRelative); + } + sqlite3_free(zConverted); + zOut = winMbcsToUtf8(zTemp, osAreFileApisANSI()); + sqlite3_free(zTemp); + } +#endif + if( zOut ){ +#ifdef __CYGWIN__ + if( memcmp(zOut, "\\\\?\\", 4) ){ + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s", zOut); + }else if( memcmp(zOut+4, "UNC\\", 4) ){ + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s", zOut+4); + }else{ + char *p = zOut+6; + *p = '\\'; + if( osGetcwd ){ + /* On Cygwin, UNC paths use forward slashes */ + while( *p ){ + if( *p=='\\' ) *p = '/'; + ++p; + } + } + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s", zOut+6); + } +#else + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s", zOut); +#endif /* __CYGWIN__ */ + sqlite3_free(zOut); + return SQLITE_OK; + }else{ + return SQLITE_IOERR_NOMEM_BKPT; + } +#endif +} +static int winFullPathname( + sqlite3_vfs *pVfs, /* Pointer to vfs object */ + const char *zRelative, /* Possibly relative input path */ + int nFull, /* Size of output buffer in bytes */ + char *zFull /* Output buffer */ +){ + int rc; + MUTEX_LOGIC( sqlite3_mutex *pMutex; ) + MUTEX_LOGIC( pMutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR); ) + sqlite3_mutex_enter(pMutex); + rc = winFullPathnameNoMutex(pVfs, zRelative, nFull, zFull); + sqlite3_mutex_leave(pMutex); + return rc; +} + +#ifndef SQLITE_OMIT_LOAD_EXTENSION +/* +** Interfaces for opening a shared library, finding entry points +** within the shared library, and closing the shared library. +*/ +static void *winDlOpen(sqlite3_vfs *pVfs, const char *zFilename){ + HANDLE h; + void *zConverted = winConvertFromUtf8Filename(zFilename); + UNUSED_PARAMETER(pVfs); + if( zConverted==0 ){ + OSTRACE(("DLOPEN name=%s, handle=%p\n", zFilename, (void*)0)); + return 0; + } + if( osIsNT() ){ +#if SQLITE_OS_WINRT + h = osLoadPackagedLibrary((LPCWSTR)zConverted, 0); +#else + h = osLoadLibraryW((LPCWSTR)zConverted); +#endif + } +#ifdef SQLITE_WIN32_HAS_ANSI + else{ + h = osLoadLibraryA((char*)zConverted); + } +#endif + OSTRACE(("DLOPEN name=%s, handle=%p\n", zFilename, (void*)h)); + sqlite3_free(zConverted); + return (void*)h; +} +static void winDlError(sqlite3_vfs *pVfs, int nBuf, char *zBufOut){ + UNUSED_PARAMETER(pVfs); + winGetLastErrorMsg(osGetLastError(), nBuf, zBufOut); +} +static void (*winDlSym(sqlite3_vfs *pVfs,void *pH,const char *zSym))(void){ + FARPROC proc; + UNUSED_PARAMETER(pVfs); + proc = osGetProcAddressA((HANDLE)pH, zSym); + OSTRACE(("DLSYM handle=%p, symbol=%s, address=%p\n", + (void*)pH, zSym, (void*)proc)); + return (void(*)(void))proc; +} +static void winDlClose(sqlite3_vfs *pVfs, void *pHandle){ + UNUSED_PARAMETER(pVfs); + osFreeLibrary((HANDLE)pHandle); + OSTRACE(("DLCLOSE handle=%p\n", (void*)pHandle)); +} +#else /* if SQLITE_OMIT_LOAD_EXTENSION is defined: */ + #define winDlOpen 0 + #define winDlError 0 + #define winDlSym 0 + #define winDlClose 0 +#endif + +/* State information for the randomness gatherer. */ +typedef struct EntropyGatherer EntropyGatherer; +struct EntropyGatherer { + unsigned char *a; /* Gather entropy into this buffer */ + int na; /* Size of a[] in bytes */ + int i; /* XOR next input into a[i] */ + int nXor; /* Number of XOR operations done */ +}; + +#if !defined(SQLITE_TEST) && !defined(SQLITE_OMIT_RANDOMNESS) +/* Mix sz bytes of entropy into p. */ +static void xorMemory(EntropyGatherer *p, unsigned char *x, int sz){ + int j, k; + for(j=0, k=p->i; ja[k++] ^= x[j]; + if( k>=p->na ) k = 0; + } + p->i = k; + p->nXor += sz; +} +#endif /* !defined(SQLITE_TEST) && !defined(SQLITE_OMIT_RANDOMNESS) */ + +/* +** Write up to nBuf bytes of randomness into zBuf. +*/ +static int winRandomness(sqlite3_vfs *pVfs, int nBuf, char *zBuf){ +#if defined(SQLITE_TEST) || defined(SQLITE_OMIT_RANDOMNESS) + UNUSED_PARAMETER(pVfs); + memset(zBuf, 0, nBuf); + return nBuf; +#else + EntropyGatherer e; + UNUSED_PARAMETER(pVfs); + memset(zBuf, 0, nBuf); + e.a = (unsigned char*)zBuf; + e.na = nBuf; + e.nXor = 0; + e.i = 0; + { + SYSTEMTIME x; + osGetSystemTime(&x); + xorMemory(&e, (unsigned char*)&x, sizeof(SYSTEMTIME)); + } + { + DWORD pid = osGetCurrentProcessId(); + xorMemory(&e, (unsigned char*)&pid, sizeof(DWORD)); + } +#if SQLITE_OS_WINRT + { + ULONGLONG cnt = osGetTickCount64(); + xorMemory(&e, (unsigned char*)&cnt, sizeof(ULONGLONG)); + } +#else + { + DWORD cnt = osGetTickCount(); + xorMemory(&e, (unsigned char*)&cnt, sizeof(DWORD)); + } +#endif /* SQLITE_OS_WINRT */ + { + LARGE_INTEGER i; + osQueryPerformanceCounter(&i); + xorMemory(&e, (unsigned char*)&i, sizeof(LARGE_INTEGER)); + } +#if !SQLITE_OS_WINCE && !SQLITE_OS_WINRT && SQLITE_WIN32_USE_UUID + { + UUID id; + memset(&id, 0, sizeof(UUID)); + osUuidCreate(&id); + xorMemory(&e, (unsigned char*)&id, sizeof(UUID)); + memset(&id, 0, sizeof(UUID)); + osUuidCreateSequential(&id); + xorMemory(&e, (unsigned char*)&id, sizeof(UUID)); + } +#endif /* !SQLITE_OS_WINCE && !SQLITE_OS_WINRT && SQLITE_WIN32_USE_UUID */ + return e.nXor>nBuf ? nBuf : e.nXor; +#endif /* defined(SQLITE_TEST) || defined(SQLITE_OMIT_RANDOMNESS) */ +} + + +/* +** Sleep for a little while. Return the amount of time slept. +*/ +static int winSleep(sqlite3_vfs *pVfs, int microsec){ + sqlite3_win32_sleep((microsec+999)/1000); + UNUSED_PARAMETER(pVfs); + return ((microsec+999)/1000)*1000; +} + +/* +** The following variable, if set to a non-zero value, is interpreted as +** the number of seconds since 1970 and is used to set the result of +** sqlite3OsCurrentTime() during testing. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_current_time = 0; /* Fake system time in seconds since 1970. */ +#endif + +/* +** Find the current time (in Universal Coordinated Time). Write into *piNow +** the current time and date as a Julian Day number times 86_400_000. In +** other words, write into *piNow the number of milliseconds since the Julian +** epoch of noon in Greenwich on November 24, 4714 B.C according to the +** proleptic Gregorian calendar. +** +** On success, return SQLITE_OK. Return SQLITE_ERROR if the time and date +** cannot be found. +*/ +static int winCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *piNow){ + /* FILETIME structure is a 64-bit value representing the number of + 100-nanosecond intervals since January 1, 1601 (= JD 2305813.5). + */ + FILETIME ft; + static const sqlite3_int64 winFiletimeEpoch = 23058135*(sqlite3_int64)8640000; +#ifdef SQLITE_TEST + static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000; +#endif + /* 2^32 - to avoid use of LL and warnings in gcc */ + static const sqlite3_int64 max32BitValue = + (sqlite3_int64)2000000000 + (sqlite3_int64)2000000000 + + (sqlite3_int64)294967296; + +#if SQLITE_OS_WINCE + SYSTEMTIME time; + osGetSystemTime(&time); + /* if SystemTimeToFileTime() fails, it returns zero. */ + if (!osSystemTimeToFileTime(&time,&ft)){ + return SQLITE_ERROR; + } +#else + osGetSystemTimeAsFileTime( &ft ); +#endif + + *piNow = winFiletimeEpoch + + ((((sqlite3_int64)ft.dwHighDateTime)*max32BitValue) + + (sqlite3_int64)ft.dwLowDateTime)/(sqlite3_int64)10000; + +#ifdef SQLITE_TEST + if( sqlite3_current_time ){ + *piNow = 1000*(sqlite3_int64)sqlite3_current_time + unixEpoch; + } +#endif + UNUSED_PARAMETER(pVfs); + return SQLITE_OK; +} + +/* +** Find the current time (in Universal Coordinated Time). Write the +** current time and date as a Julian Day number into *prNow and +** return 0. Return 1 if the time and date cannot be found. +*/ +static int winCurrentTime(sqlite3_vfs *pVfs, double *prNow){ + int rc; + sqlite3_int64 i; + rc = winCurrentTimeInt64(pVfs, &i); + if( !rc ){ + *prNow = i/86400000.0; + } + return rc; +} + +/* +** The idea is that this function works like a combination of +** GetLastError() and FormatMessage() on Windows (or errno and +** strerror_r() on Unix). After an error is returned by an OS +** function, SQLite calls this function with zBuf pointing to +** a buffer of nBuf bytes. The OS layer should populate the +** buffer with a nul-terminated UTF-8 encoded error message +** describing the last IO error to have occurred within the calling +** thread. +** +** If the error message is too large for the supplied buffer, +** it should be truncated. The return value of xGetLastError +** is zero if the error message fits in the buffer, or non-zero +** otherwise (if the message was truncated). If non-zero is returned, +** then it is not necessary to include the nul-terminator character +** in the output buffer. +** +** Not supplying an error message will have no adverse effect +** on SQLite. It is fine to have an implementation that never +** returns an error message: +** +** int xGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){ +** assert(zBuf[0]=='\0'); +** return 0; +** } +** +** However if an error message is supplied, it will be incorporated +** by sqlite into the error message available to the user using +** sqlite3_errmsg(), possibly making IO errors easier to debug. +*/ +static int winGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){ + DWORD e = osGetLastError(); + UNUSED_PARAMETER(pVfs); + if( nBuf>0 ) winGetLastErrorMsg(e, nBuf, zBuf); + return e; +} + +/* +** Initialize and deinitialize the operating system interface. +*/ +SQLITE_API int sqlite3_os_init(void){ + static sqlite3_vfs winVfs = { + 3, /* iVersion */ + sizeof(winFile), /* szOsFile */ + SQLITE_WIN32_MAX_PATH_BYTES, /* mxPathname */ + 0, /* pNext */ + "win32", /* zName */ + &winAppData, /* pAppData */ + winOpen, /* xOpen */ + winDelete, /* xDelete */ + winAccess, /* xAccess */ + winFullPathname, /* xFullPathname */ + winDlOpen, /* xDlOpen */ + winDlError, /* xDlError */ + winDlSym, /* xDlSym */ + winDlClose, /* xDlClose */ + winRandomness, /* xRandomness */ + winSleep, /* xSleep */ + winCurrentTime, /* xCurrentTime */ + winGetLastError, /* xGetLastError */ + winCurrentTimeInt64, /* xCurrentTimeInt64 */ + winSetSystemCall, /* xSetSystemCall */ + winGetSystemCall, /* xGetSystemCall */ + winNextSystemCall, /* xNextSystemCall */ + }; +#if defined(SQLITE_WIN32_HAS_WIDE) + static sqlite3_vfs winLongPathVfs = { + 3, /* iVersion */ + sizeof(winFile), /* szOsFile */ + SQLITE_WINNT_MAX_PATH_BYTES, /* mxPathname */ + 0, /* pNext */ + "win32-longpath", /* zName */ + &winAppData, /* pAppData */ + winOpen, /* xOpen */ + winDelete, /* xDelete */ + winAccess, /* xAccess */ + winFullPathname, /* xFullPathname */ + winDlOpen, /* xDlOpen */ + winDlError, /* xDlError */ + winDlSym, /* xDlSym */ + winDlClose, /* xDlClose */ + winRandomness, /* xRandomness */ + winSleep, /* xSleep */ + winCurrentTime, /* xCurrentTime */ + winGetLastError, /* xGetLastError */ + winCurrentTimeInt64, /* xCurrentTimeInt64 */ + winSetSystemCall, /* xSetSystemCall */ + winGetSystemCall, /* xGetSystemCall */ + winNextSystemCall, /* xNextSystemCall */ + }; +#endif + static sqlite3_vfs winNolockVfs = { + 3, /* iVersion */ + sizeof(winFile), /* szOsFile */ + SQLITE_WIN32_MAX_PATH_BYTES, /* mxPathname */ + 0, /* pNext */ + "win32-none", /* zName */ + &winNolockAppData, /* pAppData */ + winOpen, /* xOpen */ + winDelete, /* xDelete */ + winAccess, /* xAccess */ + winFullPathname, /* xFullPathname */ + winDlOpen, /* xDlOpen */ + winDlError, /* xDlError */ + winDlSym, /* xDlSym */ + winDlClose, /* xDlClose */ + winRandomness, /* xRandomness */ + winSleep, /* xSleep */ + winCurrentTime, /* xCurrentTime */ + winGetLastError, /* xGetLastError */ + winCurrentTimeInt64, /* xCurrentTimeInt64 */ + winSetSystemCall, /* xSetSystemCall */ + winGetSystemCall, /* xGetSystemCall */ + winNextSystemCall, /* xNextSystemCall */ + }; +#if defined(SQLITE_WIN32_HAS_WIDE) + static sqlite3_vfs winLongPathNolockVfs = { + 3, /* iVersion */ + sizeof(winFile), /* szOsFile */ + SQLITE_WINNT_MAX_PATH_BYTES, /* mxPathname */ + 0, /* pNext */ + "win32-longpath-none", /* zName */ + &winNolockAppData, /* pAppData */ + winOpen, /* xOpen */ + winDelete, /* xDelete */ + winAccess, /* xAccess */ + winFullPathname, /* xFullPathname */ + winDlOpen, /* xDlOpen */ + winDlError, /* xDlError */ + winDlSym, /* xDlSym */ + winDlClose, /* xDlClose */ + winRandomness, /* xRandomness */ + winSleep, /* xSleep */ + winCurrentTime, /* xCurrentTime */ + winGetLastError, /* xGetLastError */ + winCurrentTimeInt64, /* xCurrentTimeInt64 */ + winSetSystemCall, /* xSetSystemCall */ + winGetSystemCall, /* xGetSystemCall */ + winNextSystemCall, /* xNextSystemCall */ + }; +#endif + + /* Double-check that the aSyscall[] array has been constructed + ** correctly. See ticket [bb3a86e890c8e96ab] */ + assert( ArraySize(aSyscall)==89 ); + + /* get memory map allocation granularity */ + memset(&winSysInfo, 0, sizeof(SYSTEM_INFO)); +#if SQLITE_OS_WINRT + osGetNativeSystemInfo(&winSysInfo); +#else + osGetSystemInfo(&winSysInfo); +#endif + assert( winSysInfo.dwAllocationGranularity>0 ); + assert( winSysInfo.dwPageSize>0 ); + + sqlite3_vfs_register(&winVfs, 1); + +#if defined(SQLITE_WIN32_HAS_WIDE) + sqlite3_vfs_register(&winLongPathVfs, 0); +#endif + + sqlite3_vfs_register(&winNolockVfs, 0); + +#if defined(SQLITE_WIN32_HAS_WIDE) + sqlite3_vfs_register(&winLongPathNolockVfs, 0); +#endif + +#ifndef SQLITE_OMIT_WAL + winBigLock = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1); +#endif + + return SQLITE_OK; +} + +SQLITE_API int sqlite3_os_end(void){ +#if SQLITE_OS_WINRT + if( sleepObj!=NULL ){ + osCloseHandle(sleepObj); + sleepObj = NULL; + } +#endif + +#ifndef SQLITE_OMIT_WAL + winBigLock = 0; +#endif + + return SQLITE_OK; +} + +#endif /* SQLITE_OS_WIN */ + +/************** End of os_win.c **********************************************/ +/************** Begin file memdb.c *******************************************/ +/* +** 2016-09-07 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This file implements an in-memory VFS. A database is held as a contiguous +** block of memory. +** +** This file also implements interface sqlite3_serialize() and +** sqlite3_deserialize(). +*/ +/* #include "sqliteInt.h" */ +#ifndef SQLITE_OMIT_DESERIALIZE + +/* +** Forward declaration of objects used by this utility +*/ +typedef struct sqlite3_vfs MemVfs; +typedef struct MemFile MemFile; +typedef struct MemStore MemStore; + +/* Access to a lower-level VFS that (might) implement dynamic loading, +** access to randomness, etc. +*/ +#define ORIGVFS(p) ((sqlite3_vfs*)((p)->pAppData)) + +/* Storage for a memdb file. +** +** An memdb object can be shared or separate. Shared memdb objects can be +** used by more than one database connection. Mutexes are used by shared +** memdb objects to coordinate access. Separate memdb objects are only +** connected to a single database connection and do not require additional +** mutexes. +** +** Shared memdb objects have .zFName!=0 and .pMutex!=0. They are created +** using "file:/name?vfs=memdb". The first character of the name must be +** "/" or else the object will be a separate memdb object. All shared +** memdb objects are stored in memdb_g.apMemStore[] in an arbitrary order. +** +** Separate memdb objects are created using a name that does not begin +** with "/" or using sqlite3_deserialize(). +** +** Access rules for shared MemStore objects: +** +** * .zFName is initialized when the object is created and afterwards +** is unchanged until the object is destroyed. So it can be accessed +** at any time as long as we know the object is not being destroyed, +** which means while either the SQLITE_MUTEX_STATIC_VFS1 or +** .pMutex is held or the object is not part of memdb_g.apMemStore[]. +** +** * Can .pMutex can only be changed while holding the +** SQLITE_MUTEX_STATIC_VFS1 mutex or while the object is not part +** of memdb_g.apMemStore[]. +** +** * Other fields can only be changed while holding the .pMutex mutex +** or when the .nRef is less than zero and the object is not part of +** memdb_g.apMemStore[]. +** +** * The .aData pointer has the added requirement that it can can only +** be changed (for resizing) when nMmap is zero. +** +*/ +struct MemStore { + sqlite3_int64 sz; /* Size of the file */ + sqlite3_int64 szAlloc; /* Space allocated to aData */ + sqlite3_int64 szMax; /* Maximum allowed size of the file */ + unsigned char *aData; /* content of the file */ + sqlite3_mutex *pMutex; /* Used by shared stores only */ + int nMmap; /* Number of memory mapped pages */ + unsigned mFlags; /* Flags */ + int nRdLock; /* Number of readers */ + int nWrLock; /* Number of writers. (Always 0 or 1) */ + int nRef; /* Number of users of this MemStore */ + char *zFName; /* The filename for shared stores */ +}; + +/* An open file */ +struct MemFile { + sqlite3_file base; /* IO methods */ + MemStore *pStore; /* The storage */ + int eLock; /* Most recent lock against this file */ +}; + +/* +** File-scope variables for holding the memdb files that are accessible +** to multiple database connections in separate threads. +** +** Must hold SQLITE_MUTEX_STATIC_VFS1 to access any part of this object. +*/ +static struct MemFS { + int nMemStore; /* Number of shared MemStore objects */ + MemStore **apMemStore; /* Array of all shared MemStore objects */ +} memdb_g; + +/* +** Methods for MemFile +*/ +static int memdbClose(sqlite3_file*); +static int memdbRead(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst); +static int memdbWrite(sqlite3_file*,const void*,int iAmt, sqlite3_int64 iOfst); +static int memdbTruncate(sqlite3_file*, sqlite3_int64 size); +static int memdbSync(sqlite3_file*, int flags); +static int memdbFileSize(sqlite3_file*, sqlite3_int64 *pSize); +static int memdbLock(sqlite3_file*, int); +static int memdbUnlock(sqlite3_file*, int); +/* static int memdbCheckReservedLock(sqlite3_file*, int *pResOut);// not used */ +static int memdbFileControl(sqlite3_file*, int op, void *pArg); +/* static int memdbSectorSize(sqlite3_file*); // not used */ +static int memdbDeviceCharacteristics(sqlite3_file*); +static int memdbFetch(sqlite3_file*, sqlite3_int64 iOfst, int iAmt, void **pp); +static int memdbUnfetch(sqlite3_file*, sqlite3_int64 iOfst, void *p); + +/* +** Methods for MemVfs +*/ +static int memdbOpen(sqlite3_vfs*, const char *, sqlite3_file*, int , int *); +/* static int memdbDelete(sqlite3_vfs*, const char *zName, int syncDir); */ +static int memdbAccess(sqlite3_vfs*, const char *zName, int flags, int *); +static int memdbFullPathname(sqlite3_vfs*, const char *zName, int, char *zOut); +static void *memdbDlOpen(sqlite3_vfs*, const char *zFilename); +static void memdbDlError(sqlite3_vfs*, int nByte, char *zErrMsg); +static void (*memdbDlSym(sqlite3_vfs *pVfs, void *p, const char*zSym))(void); +static void memdbDlClose(sqlite3_vfs*, void*); +static int memdbRandomness(sqlite3_vfs*, int nByte, char *zOut); +static int memdbSleep(sqlite3_vfs*, int microseconds); +/* static int memdbCurrentTime(sqlite3_vfs*, double*); */ +static int memdbGetLastError(sqlite3_vfs*, int, char *); +static int memdbCurrentTimeInt64(sqlite3_vfs*, sqlite3_int64*); + +static sqlite3_vfs memdb_vfs = { + 2, /* iVersion */ + 0, /* szOsFile (set when registered) */ + 1024, /* mxPathname */ + 0, /* pNext */ + "memdb", /* zName */ + 0, /* pAppData (set when registered) */ + memdbOpen, /* xOpen */ + 0, /* memdbDelete, */ /* xDelete */ + memdbAccess, /* xAccess */ + memdbFullPathname, /* xFullPathname */ + memdbDlOpen, /* xDlOpen */ + memdbDlError, /* xDlError */ + memdbDlSym, /* xDlSym */ + memdbDlClose, /* xDlClose */ + memdbRandomness, /* xRandomness */ + memdbSleep, /* xSleep */ + 0, /* memdbCurrentTime, */ /* xCurrentTime */ + memdbGetLastError, /* xGetLastError */ + memdbCurrentTimeInt64, /* xCurrentTimeInt64 */ + 0, /* xSetSystemCall */ + 0, /* xGetSystemCall */ + 0, /* xNextSystemCall */ +}; + +static const sqlite3_io_methods memdb_io_methods = { + 3, /* iVersion */ + memdbClose, /* xClose */ + memdbRead, /* xRead */ + memdbWrite, /* xWrite */ + memdbTruncate, /* xTruncate */ + memdbSync, /* xSync */ + memdbFileSize, /* xFileSize */ + memdbLock, /* xLock */ + memdbUnlock, /* xUnlock */ + 0, /* memdbCheckReservedLock, */ /* xCheckReservedLock */ + memdbFileControl, /* xFileControl */ + 0, /* memdbSectorSize,*/ /* xSectorSize */ + memdbDeviceCharacteristics, /* xDeviceCharacteristics */ + 0, /* xShmMap */ + 0, /* xShmLock */ + 0, /* xShmBarrier */ + 0, /* xShmUnmap */ + memdbFetch, /* xFetch */ + memdbUnfetch /* xUnfetch */ +}; + +/* +** Enter/leave the mutex on a MemStore +*/ +#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE==0 +static void memdbEnter(MemStore *p){ + UNUSED_PARAMETER(p); +} +static void memdbLeave(MemStore *p){ + UNUSED_PARAMETER(p); +} +#else +static void memdbEnter(MemStore *p){ + sqlite3_mutex_enter(p->pMutex); +} +static void memdbLeave(MemStore *p){ + sqlite3_mutex_leave(p->pMutex); +} +#endif + + + +/* +** Close an memdb-file. +** Free the underlying MemStore object when its refcount drops to zero +** or less. +*/ +static int memdbClose(sqlite3_file *pFile){ + MemStore *p = ((MemFile*)pFile)->pStore; + if( p->zFName ){ + int i; +#ifndef SQLITE_MUTEX_OMIT + sqlite3_mutex *pVfsMutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1); +#endif + sqlite3_mutex_enter(pVfsMutex); + for(i=0; ALWAYS(inRef==1 ){ + memdb_g.apMemStore[i] = memdb_g.apMemStore[--memdb_g.nMemStore]; + if( memdb_g.nMemStore==0 ){ + sqlite3_free(memdb_g.apMemStore); + memdb_g.apMemStore = 0; + } + } + break; + } + } + sqlite3_mutex_leave(pVfsMutex); + }else{ + memdbEnter(p); + } + p->nRef--; + if( p->nRef<=0 ){ + if( p->mFlags & SQLITE_DESERIALIZE_FREEONCLOSE ){ + sqlite3_free(p->aData); + } + memdbLeave(p); + sqlite3_mutex_free(p->pMutex); + sqlite3_free(p); + }else{ + memdbLeave(p); + } + return SQLITE_OK; +} + +/* +** Read data from an memdb-file. +*/ +static int memdbRead( + sqlite3_file *pFile, + void *zBuf, + int iAmt, + sqlite_int64 iOfst +){ + MemStore *p = ((MemFile*)pFile)->pStore; + memdbEnter(p); + if( iOfst+iAmt>p->sz ){ + memset(zBuf, 0, iAmt); + if( iOfstsz ) memcpy(zBuf, p->aData+iOfst, p->sz - iOfst); + memdbLeave(p); + return SQLITE_IOERR_SHORT_READ; + } + memcpy(zBuf, p->aData+iOfst, iAmt); + memdbLeave(p); + return SQLITE_OK; +} + +/* +** Try to enlarge the memory allocation to hold at least sz bytes +*/ +static int memdbEnlarge(MemStore *p, sqlite3_int64 newSz){ + unsigned char *pNew; + if( (p->mFlags & SQLITE_DESERIALIZE_RESIZEABLE)==0 || NEVER(p->nMmap>0) ){ + return SQLITE_FULL; + } + if( newSz>p->szMax ){ + return SQLITE_FULL; + } + newSz *= 2; + if( newSz>p->szMax ) newSz = p->szMax; + pNew = sqlite3Realloc(p->aData, newSz); + if( pNew==0 ) return SQLITE_IOERR_NOMEM; + p->aData = pNew; + p->szAlloc = newSz; + return SQLITE_OK; +} + +/* +** Write data to an memdb-file. +*/ +static int memdbWrite( + sqlite3_file *pFile, + const void *z, + int iAmt, + sqlite_int64 iOfst +){ + MemStore *p = ((MemFile*)pFile)->pStore; + memdbEnter(p); + if( NEVER(p->mFlags & SQLITE_DESERIALIZE_READONLY) ){ + /* Can't happen: memdbLock() will return SQLITE_READONLY before + ** reaching this point */ + memdbLeave(p); + return SQLITE_IOERR_WRITE; + } + if( iOfst+iAmt>p->sz ){ + int rc; + if( iOfst+iAmt>p->szAlloc + && (rc = memdbEnlarge(p, iOfst+iAmt))!=SQLITE_OK + ){ + memdbLeave(p); + return rc; + } + if( iOfst>p->sz ) memset(p->aData+p->sz, 0, iOfst-p->sz); + p->sz = iOfst+iAmt; + } + memcpy(p->aData+iOfst, z, iAmt); + memdbLeave(p); + return SQLITE_OK; +} + +/* +** Truncate an memdb-file. +** +** In rollback mode (which is always the case for memdb, as it does not +** support WAL mode) the truncate() method is only used to reduce +** the size of a file, never to increase the size. +*/ +static int memdbTruncate(sqlite3_file *pFile, sqlite_int64 size){ + MemStore *p = ((MemFile*)pFile)->pStore; + int rc = SQLITE_OK; + memdbEnter(p); + if( size>p->sz ){ + /* This can only happen with a corrupt wal mode db */ + rc = SQLITE_CORRUPT; + }else{ + p->sz = size; + } + memdbLeave(p); + return rc; +} + +/* +** Sync an memdb-file. +*/ +static int memdbSync(sqlite3_file *pFile, int flags){ + UNUSED_PARAMETER(pFile); + UNUSED_PARAMETER(flags); + return SQLITE_OK; +} + +/* +** Return the current file-size of an memdb-file. +*/ +static int memdbFileSize(sqlite3_file *pFile, sqlite_int64 *pSize){ + MemStore *p = ((MemFile*)pFile)->pStore; + memdbEnter(p); + *pSize = p->sz; + memdbLeave(p); + return SQLITE_OK; +} + +/* +** Lock an memdb-file. +*/ +static int memdbLock(sqlite3_file *pFile, int eLock){ + MemFile *pThis = (MemFile*)pFile; + MemStore *p = pThis->pStore; + int rc = SQLITE_OK; + if( eLock<=pThis->eLock ) return SQLITE_OK; + memdbEnter(p); + + assert( p->nWrLock==0 || p->nWrLock==1 ); + assert( pThis->eLock<=SQLITE_LOCK_SHARED || p->nWrLock==1 ); + assert( pThis->eLock==SQLITE_LOCK_NONE || p->nRdLock>=1 ); + + if( eLock>SQLITE_LOCK_SHARED && (p->mFlags & SQLITE_DESERIALIZE_READONLY) ){ + rc = SQLITE_READONLY; + }else{ + switch( eLock ){ + case SQLITE_LOCK_SHARED: { + assert( pThis->eLock==SQLITE_LOCK_NONE ); + if( p->nWrLock>0 ){ + rc = SQLITE_BUSY; + }else{ + p->nRdLock++; + } + break; + }; + + case SQLITE_LOCK_RESERVED: + case SQLITE_LOCK_PENDING: { + assert( pThis->eLock>=SQLITE_LOCK_SHARED ); + if( ALWAYS(pThis->eLock==SQLITE_LOCK_SHARED) ){ + if( p->nWrLock>0 ){ + rc = SQLITE_BUSY; + }else{ + p->nWrLock = 1; + } + } + break; + } + + default: { + assert( eLock==SQLITE_LOCK_EXCLUSIVE ); + assert( pThis->eLock>=SQLITE_LOCK_SHARED ); + if( p->nRdLock>1 ){ + rc = SQLITE_BUSY; + }else if( pThis->eLock==SQLITE_LOCK_SHARED ){ + p->nWrLock = 1; + } + break; + } + } + } + if( rc==SQLITE_OK ) pThis->eLock = eLock; + memdbLeave(p); + return rc; +} + +/* +** Unlock an memdb-file. +*/ +static int memdbUnlock(sqlite3_file *pFile, int eLock){ + MemFile *pThis = (MemFile*)pFile; + MemStore *p = pThis->pStore; + if( eLock>=pThis->eLock ) return SQLITE_OK; + memdbEnter(p); + + assert( eLock==SQLITE_LOCK_SHARED || eLock==SQLITE_LOCK_NONE ); + if( eLock==SQLITE_LOCK_SHARED ){ + if( ALWAYS(pThis->eLock>SQLITE_LOCK_SHARED) ){ + p->nWrLock--; + } + }else{ + if( pThis->eLock>SQLITE_LOCK_SHARED ){ + p->nWrLock--; + } + p->nRdLock--; + } + + pThis->eLock = eLock; + memdbLeave(p); + return SQLITE_OK; +} + +#if 0 +/* +** This interface is only used for crash recovery, which does not +** occur on an in-memory database. +*/ +static int memdbCheckReservedLock(sqlite3_file *pFile, int *pResOut){ + *pResOut = 0; + return SQLITE_OK; +} +#endif + + +/* +** File control method. For custom operations on an memdb-file. +*/ +static int memdbFileControl(sqlite3_file *pFile, int op, void *pArg){ + MemStore *p = ((MemFile*)pFile)->pStore; + int rc = SQLITE_NOTFOUND; + memdbEnter(p); + if( op==SQLITE_FCNTL_VFSNAME ){ + *(char**)pArg = sqlite3_mprintf("memdb(%p,%lld)", p->aData, p->sz); + rc = SQLITE_OK; + } + if( op==SQLITE_FCNTL_SIZE_LIMIT ){ + sqlite3_int64 iLimit = *(sqlite3_int64*)pArg; + if( iLimitsz ){ + if( iLimit<0 ){ + iLimit = p->szMax; + }else{ + iLimit = p->sz; + } + } + p->szMax = iLimit; + *(sqlite3_int64*)pArg = iLimit; + rc = SQLITE_OK; + } + memdbLeave(p); + return rc; +} + +#if 0 /* Not used because of SQLITE_IOCAP_POWERSAFE_OVERWRITE */ +/* +** Return the sector-size in bytes for an memdb-file. +*/ +static int memdbSectorSize(sqlite3_file *pFile){ + return 1024; +} +#endif + +/* +** Return the device characteristic flags supported by an memdb-file. +*/ +static int memdbDeviceCharacteristics(sqlite3_file *pFile){ + UNUSED_PARAMETER(pFile); + return SQLITE_IOCAP_ATOMIC | + SQLITE_IOCAP_POWERSAFE_OVERWRITE | + SQLITE_IOCAP_SAFE_APPEND | + SQLITE_IOCAP_SEQUENTIAL; +} + +/* Fetch a page of a memory-mapped file */ +static int memdbFetch( + sqlite3_file *pFile, + sqlite3_int64 iOfst, + int iAmt, + void **pp +){ + MemStore *p = ((MemFile*)pFile)->pStore; + memdbEnter(p); + if( iOfst+iAmt>p->sz || (p->mFlags & SQLITE_DESERIALIZE_RESIZEABLE)!=0 ){ + *pp = 0; + }else{ + p->nMmap++; + *pp = (void*)(p->aData + iOfst); + } + memdbLeave(p); + return SQLITE_OK; +} + +/* Release a memory-mapped page */ +static int memdbUnfetch(sqlite3_file *pFile, sqlite3_int64 iOfst, void *pPage){ + MemStore *p = ((MemFile*)pFile)->pStore; + UNUSED_PARAMETER(iOfst); + UNUSED_PARAMETER(pPage); + memdbEnter(p); + p->nMmap--; + memdbLeave(p); + return SQLITE_OK; +} + +/* +** Open an mem file handle. +*/ +static int memdbOpen( + sqlite3_vfs *pVfs, + const char *zName, + sqlite3_file *pFd, + int flags, + int *pOutFlags +){ + MemFile *pFile = (MemFile*)pFd; + MemStore *p = 0; + int szName; + UNUSED_PARAMETER(pVfs); + + memset(pFile, 0, sizeof(*pFile)); + szName = sqlite3Strlen30(zName); + if( szName>1 && (zName[0]=='/' || zName[0]=='\\') ){ + int i; +#ifndef SQLITE_MUTEX_OMIT + sqlite3_mutex *pVfsMutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1); +#endif + sqlite3_mutex_enter(pVfsMutex); + for(i=0; izFName,zName)==0 ){ + p = memdb_g.apMemStore[i]; + break; + } + } + if( p==0 ){ + MemStore **apNew; + p = sqlite3Malloc( sizeof(*p) + (i64)szName + 3 ); + if( p==0 ){ + sqlite3_mutex_leave(pVfsMutex); + return SQLITE_NOMEM; + } + apNew = sqlite3Realloc(memdb_g.apMemStore, + sizeof(apNew[0])*(1+(i64)memdb_g.nMemStore) ); + if( apNew==0 ){ + sqlite3_free(p); + sqlite3_mutex_leave(pVfsMutex); + return SQLITE_NOMEM; + } + apNew[memdb_g.nMemStore++] = p; + memdb_g.apMemStore = apNew; + memset(p, 0, sizeof(*p)); + p->mFlags = SQLITE_DESERIALIZE_RESIZEABLE|SQLITE_DESERIALIZE_FREEONCLOSE; + p->szMax = sqlite3GlobalConfig.mxMemdbSize; + p->zFName = (char*)&p[1]; + memcpy(p->zFName, zName, szName+1); + p->pMutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST); + if( p->pMutex==0 ){ + memdb_g.nMemStore--; + sqlite3_free(p); + sqlite3_mutex_leave(pVfsMutex); + return SQLITE_NOMEM; + } + p->nRef = 1; + memdbEnter(p); + }else{ + memdbEnter(p); + p->nRef++; + } + sqlite3_mutex_leave(pVfsMutex); + }else{ + p = sqlite3Malloc( sizeof(*p) ); + if( p==0 ){ + return SQLITE_NOMEM; + } + memset(p, 0, sizeof(*p)); + p->mFlags = SQLITE_DESERIALIZE_RESIZEABLE | SQLITE_DESERIALIZE_FREEONCLOSE; + p->szMax = sqlite3GlobalConfig.mxMemdbSize; + } + pFile->pStore = p; + if( pOutFlags!=0 ){ + *pOutFlags = flags | SQLITE_OPEN_MEMORY; + } + pFd->pMethods = &memdb_io_methods; + memdbLeave(p); + return SQLITE_OK; +} + +#if 0 /* Only used to delete rollback journals, super-journals, and WAL + ** files, none of which exist in memdb. So this routine is never used */ +/* +** Delete the file located at zPath. If the dirSync argument is true, +** ensure the file-system modifications are synced to disk before +** returning. +*/ +static int memdbDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){ + return SQLITE_IOERR_DELETE; +} +#endif + +/* +** Test for access permissions. Return true if the requested permission +** is available, or false otherwise. +** +** With memdb, no files ever exist on disk. So always return false. +*/ +static int memdbAccess( + sqlite3_vfs *pVfs, + const char *zPath, + int flags, + int *pResOut +){ + UNUSED_PARAMETER(pVfs); + UNUSED_PARAMETER(zPath); + UNUSED_PARAMETER(flags); + *pResOut = 0; + return SQLITE_OK; +} + +/* +** Populate buffer zOut with the full canonical pathname corresponding +** to the pathname in zPath. zOut is guaranteed to point to a buffer +** of at least (INST_MAX_PATHNAME+1) bytes. +*/ +static int memdbFullPathname( + sqlite3_vfs *pVfs, + const char *zPath, + int nOut, + char *zOut +){ + UNUSED_PARAMETER(pVfs); + sqlite3_snprintf(nOut, zOut, "%s", zPath); + return SQLITE_OK; +} + +/* +** Open the dynamic library located at zPath and return a handle. +*/ +static void *memdbDlOpen(sqlite3_vfs *pVfs, const char *zPath){ + return ORIGVFS(pVfs)->xDlOpen(ORIGVFS(pVfs), zPath); +} + +/* +** Populate the buffer zErrMsg (size nByte bytes) with a human readable +** utf-8 string describing the most recent error encountered associated +** with dynamic libraries. +*/ +static void memdbDlError(sqlite3_vfs *pVfs, int nByte, char *zErrMsg){ + ORIGVFS(pVfs)->xDlError(ORIGVFS(pVfs), nByte, zErrMsg); +} + +/* +** Return a pointer to the symbol zSymbol in the dynamic library pHandle. +*/ +static void (*memdbDlSym(sqlite3_vfs *pVfs, void *p, const char *zSym))(void){ + return ORIGVFS(pVfs)->xDlSym(ORIGVFS(pVfs), p, zSym); +} + +/* +** Close the dynamic library handle pHandle. +*/ +static void memdbDlClose(sqlite3_vfs *pVfs, void *pHandle){ + ORIGVFS(pVfs)->xDlClose(ORIGVFS(pVfs), pHandle); +} + +/* +** Populate the buffer pointed to by zBufOut with nByte bytes of +** random data. +*/ +static int memdbRandomness(sqlite3_vfs *pVfs, int nByte, char *zBufOut){ + return ORIGVFS(pVfs)->xRandomness(ORIGVFS(pVfs), nByte, zBufOut); +} + +/* +** Sleep for nMicro microseconds. Return the number of microseconds +** actually slept. +*/ +static int memdbSleep(sqlite3_vfs *pVfs, int nMicro){ + return ORIGVFS(pVfs)->xSleep(ORIGVFS(pVfs), nMicro); +} + +#if 0 /* Never used. Modern cores only call xCurrentTimeInt64() */ +/* +** Return the current time as a Julian Day number in *pTimeOut. +*/ +static int memdbCurrentTime(sqlite3_vfs *pVfs, double *pTimeOut){ + return ORIGVFS(pVfs)->xCurrentTime(ORIGVFS(pVfs), pTimeOut); +} +#endif + +static int memdbGetLastError(sqlite3_vfs *pVfs, int a, char *b){ + return ORIGVFS(pVfs)->xGetLastError(ORIGVFS(pVfs), a, b); +} +static int memdbCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *p){ + return ORIGVFS(pVfs)->xCurrentTimeInt64(ORIGVFS(pVfs), p); +} + +/* +** Translate a database connection pointer and schema name into a +** MemFile pointer. +*/ +static MemFile *memdbFromDbSchema(sqlite3 *db, const char *zSchema){ + MemFile *p = 0; + MemStore *pStore; + int rc = sqlite3_file_control(db, zSchema, SQLITE_FCNTL_FILE_POINTER, &p); + if( rc ) return 0; + if( p->base.pMethods!=&memdb_io_methods ) return 0; + pStore = p->pStore; + memdbEnter(pStore); + if( pStore->zFName!=0 ) p = 0; + memdbLeave(pStore); + return p; +} + +/* +** Return the serialization of a database +*/ +SQLITE_API unsigned char *sqlite3_serialize( + sqlite3 *db, /* The database connection */ + const char *zSchema, /* Which database within the connection */ + sqlite3_int64 *piSize, /* Write size here, if not NULL */ + unsigned int mFlags /* Maybe SQLITE_SERIALIZE_NOCOPY */ +){ + MemFile *p; + int iDb; + Btree *pBt; + sqlite3_int64 sz; + int szPage = 0; + sqlite3_stmt *pStmt = 0; + unsigned char *pOut; + char *zSql; + int rc; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + + if( zSchema==0 ) zSchema = db->aDb[0].zDbSName; + p = memdbFromDbSchema(db, zSchema); + iDb = sqlite3FindDbName(db, zSchema); + if( piSize ) *piSize = -1; + if( iDb<0 ) return 0; + if( p ){ + MemStore *pStore = p->pStore; + assert( pStore->pMutex==0 ); + if( piSize ) *piSize = pStore->sz; + if( mFlags & SQLITE_SERIALIZE_NOCOPY ){ + pOut = pStore->aData; + }else{ + pOut = sqlite3_malloc64( pStore->sz ); + if( pOut ) memcpy(pOut, pStore->aData, pStore->sz); + } + return pOut; + } + pBt = db->aDb[iDb].pBt; + if( pBt==0 ) return 0; + szPage = sqlite3BtreeGetPageSize(pBt); + zSql = sqlite3_mprintf("PRAGMA \"%w\".page_count", zSchema); + rc = zSql ? sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0) : SQLITE_NOMEM; + sqlite3_free(zSql); + if( rc ) return 0; + rc = sqlite3_step(pStmt); + if( rc!=SQLITE_ROW ){ + pOut = 0; + }else{ + sz = sqlite3_column_int64(pStmt, 0)*szPage; + if( sz==0 ){ + sqlite3_reset(pStmt); + sqlite3_exec(db, "BEGIN IMMEDIATE; COMMIT;", 0, 0, 0); + rc = sqlite3_step(pStmt); + if( rc==SQLITE_ROW ){ + sz = sqlite3_column_int64(pStmt, 0)*szPage; + } + } + if( piSize ) *piSize = sz; + if( mFlags & SQLITE_SERIALIZE_NOCOPY ){ + pOut = 0; + }else{ + pOut = sqlite3_malloc64( sz ); + if( pOut ){ + int nPage = sqlite3_column_int(pStmt, 0); + Pager *pPager = sqlite3BtreePager(pBt); + int pgno; + for(pgno=1; pgno<=nPage; pgno++){ + DbPage *pPage = 0; + unsigned char *pTo = pOut + szPage*(sqlite3_int64)(pgno-1); + rc = sqlite3PagerGet(pPager, pgno, (DbPage**)&pPage, 0); + if( rc==SQLITE_OK ){ + memcpy(pTo, sqlite3PagerGetData(pPage), szPage); + }else{ + memset(pTo, 0, szPage); + } + sqlite3PagerUnref(pPage); + } + } + } + } + sqlite3_finalize(pStmt); + return pOut; +} + +/* Convert zSchema to a MemDB and initialize its content. +*/ +SQLITE_API int sqlite3_deserialize( + sqlite3 *db, /* The database connection */ + const char *zSchema, /* Which DB to reopen with the deserialization */ + unsigned char *pData, /* The serialized database content */ + sqlite3_int64 szDb, /* Number bytes in the deserialization */ + sqlite3_int64 szBuf, /* Total size of buffer pData[] */ + unsigned mFlags /* Zero or more SQLITE_DESERIALIZE_* flags */ +){ + MemFile *p; + char *zSql; + sqlite3_stmt *pStmt = 0; + int rc; + int iDb; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + return SQLITE_MISUSE_BKPT; + } + if( szDb<0 ) return SQLITE_MISUSE_BKPT; + if( szBuf<0 ) return SQLITE_MISUSE_BKPT; +#endif + + sqlite3_mutex_enter(db->mutex); + if( zSchema==0 ) zSchema = db->aDb[0].zDbSName; + iDb = sqlite3FindDbName(db, zSchema); + testcase( iDb==1 ); + if( iDb<2 && iDb!=0 ){ + rc = SQLITE_ERROR; + goto end_deserialize; + } + zSql = sqlite3_mprintf("ATTACH x AS %Q", zSchema); + if( zSql==0 ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); + sqlite3_free(zSql); + } + if( rc ) goto end_deserialize; + db->init.iDb = (u8)iDb; + db->init.reopenMemdb = 1; + rc = sqlite3_step(pStmt); + db->init.reopenMemdb = 0; + if( rc!=SQLITE_DONE ){ + rc = SQLITE_ERROR; + goto end_deserialize; + } + p = memdbFromDbSchema(db, zSchema); + if( p==0 ){ + rc = SQLITE_ERROR; + }else{ + MemStore *pStore = p->pStore; + pStore->aData = pData; + pData = 0; + pStore->sz = szDb; + pStore->szAlloc = szBuf; + pStore->szMax = szBuf; + if( pStore->szMaxszMax = sqlite3GlobalConfig.mxMemdbSize; + } + pStore->mFlags = mFlags; + rc = SQLITE_OK; + } + +end_deserialize: + sqlite3_finalize(pStmt); + if( pData && (mFlags & SQLITE_DESERIALIZE_FREEONCLOSE)!=0 ){ + sqlite3_free(pData); + } + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/* +** Return true if the VFS is the memvfs. +*/ +SQLITE_PRIVATE int sqlite3IsMemdb(const sqlite3_vfs *pVfs){ + return pVfs==&memdb_vfs; +} + +/* +** This routine is called when the extension is loaded. +** Register the new VFS. +*/ +SQLITE_PRIVATE int sqlite3MemdbInit(void){ + sqlite3_vfs *pLower = sqlite3_vfs_find(0); + unsigned int sz; + if( NEVER(pLower==0) ) return SQLITE_ERROR; + sz = pLower->szOsFile; + memdb_vfs.pAppData = pLower; + /* The following conditional can only be true when compiled for + ** Windows x86 and SQLITE_MAX_MMAP_SIZE=0. We always leave + ** it in, to be safe, but it is marked as NO_TEST since there + ** is no way to reach it under most builds. */ + if( szBITVEC_NBIT and iDivisor==0 then Bitvec.u.aHash[] is +** a hash table that will hold up to BITVEC_MXHASH distinct values. +** +** Otherwise, the value i is redirected into one of BITVEC_NPTR +** sub-bitmaps pointed to by Bitvec.u.apSub[]. Each subbitmap +** handles up to iDivisor separate values of i. apSub[0] holds +** values between 1 and iDivisor. apSub[1] holds values between +** iDivisor+1 and 2*iDivisor. apSub[N] holds values between +** N*iDivisor+1 and (N+1)*iDivisor. Each subbitmap is normalized +** to hold deal with values between 1 and iDivisor. +*/ +struct Bitvec { + u32 iSize; /* Maximum bit index. Max iSize is 4,294,967,296. */ + u32 nSet; /* Number of bits that are set - only valid for aHash + ** element. Max is BITVEC_NINT. For BITVEC_SZ of 512, + ** this would be 125. */ + u32 iDivisor; /* Number of bits handled by each apSub[] entry. */ + /* Should >=0 for apSub element. */ + /* Max iDivisor is max(u32) / BITVEC_NPTR + 1. */ + /* For a BITVEC_SZ of 512, this would be 34,359,739. */ + union { + BITVEC_TELEM aBitmap[BITVEC_NELEM]; /* Bitmap representation */ + u32 aHash[BITVEC_NINT]; /* Hash table representation */ + Bitvec *apSub[BITVEC_NPTR]; /* Recursive representation */ + } u; +}; + + +/* +** Create a new bitmap object able to handle bits between 0 and iSize, +** inclusive. Return a pointer to the new object. Return NULL if +** malloc fails. +*/ +SQLITE_PRIVATE Bitvec *sqlite3BitvecCreate(u32 iSize){ + Bitvec *p; + assert( sizeof(*p)==BITVEC_SZ ); + p = sqlite3MallocZero( sizeof(*p) ); + if( p ){ + p->iSize = iSize; + } + return p; +} + +/* +** Check to see if the i-th bit is set. Return true or false. +** If p is NULL (if the bitmap has not been created) or if +** i is out of range, then return false. +*/ +SQLITE_PRIVATE int sqlite3BitvecTestNotNull(Bitvec *p, u32 i){ + assert( p!=0 ); + i--; + if( i>=p->iSize ) return 0; + while( p->iDivisor ){ + u32 bin = i/p->iDivisor; + i = i%p->iDivisor; + p = p->u.apSub[bin]; + if (!p) { + return 0; + } + } + if( p->iSize<=BITVEC_NBIT ){ + return (p->u.aBitmap[i/BITVEC_SZELEM] & (1<<(i&(BITVEC_SZELEM-1))))!=0; + } else{ + u32 h = BITVEC_HASH(i++); + while( p->u.aHash[h] ){ + if( p->u.aHash[h]==i ) return 1; + h = (h+1) % BITVEC_NINT; + } + return 0; + } +} +SQLITE_PRIVATE int sqlite3BitvecTest(Bitvec *p, u32 i){ + return p!=0 && sqlite3BitvecTestNotNull(p,i); +} + +/* +** Set the i-th bit. Return 0 on success and an error code if +** anything goes wrong. +** +** This routine might cause sub-bitmaps to be allocated. Failing +** to get the memory needed to hold the sub-bitmap is the only +** that can go wrong with an insert, assuming p and i are valid. +** +** The calling function must ensure that p is a valid Bitvec object +** and that the value for "i" is within range of the Bitvec object. +** Otherwise the behavior is undefined. +*/ +SQLITE_PRIVATE int sqlite3BitvecSet(Bitvec *p, u32 i){ + u32 h; + if( p==0 ) return SQLITE_OK; + assert( i>0 ); + assert( i<=p->iSize ); + i--; + while((p->iSize > BITVEC_NBIT) && p->iDivisor) { + u32 bin = i/p->iDivisor; + i = i%p->iDivisor; + if( p->u.apSub[bin]==0 ){ + p->u.apSub[bin] = sqlite3BitvecCreate( p->iDivisor ); + if( p->u.apSub[bin]==0 ) return SQLITE_NOMEM_BKPT; + } + p = p->u.apSub[bin]; + } + if( p->iSize<=BITVEC_NBIT ){ + p->u.aBitmap[i/BITVEC_SZELEM] |= 1 << (i&(BITVEC_SZELEM-1)); + return SQLITE_OK; + } + h = BITVEC_HASH(i++); + /* if there wasn't a hash collision, and this doesn't */ + /* completely fill the hash, then just add it without */ + /* worrying about sub-dividing and re-hashing. */ + if( !p->u.aHash[h] ){ + if (p->nSet<(BITVEC_NINT-1)) { + goto bitvec_set_end; + } else { + goto bitvec_set_rehash; + } + } + /* there was a collision, check to see if it's already */ + /* in hash, if not, try to find a spot for it */ + do { + if( p->u.aHash[h]==i ) return SQLITE_OK; + h++; + if( h>=BITVEC_NINT ) h = 0; + } while( p->u.aHash[h] ); + /* we didn't find it in the hash. h points to the first */ + /* available free spot. check to see if this is going to */ + /* make our hash too "full". */ +bitvec_set_rehash: + if( p->nSet>=BITVEC_MXHASH ){ + unsigned int j; + int rc; + u32 *aiValues = sqlite3StackAllocRaw(0, sizeof(p->u.aHash)); + if( aiValues==0 ){ + return SQLITE_NOMEM_BKPT; + }else{ + memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash)); + memset(p->u.apSub, 0, sizeof(p->u.apSub)); + p->iDivisor = p->iSize/BITVEC_NPTR; + if( (p->iSize%BITVEC_NPTR)!=0 ) p->iDivisor++; + if( p->iDivisoriDivisor = BITVEC_NBIT; + rc = sqlite3BitvecSet(p, i); + for(j=0; jnSet++; + p->u.aHash[h] = i; + return SQLITE_OK; +} + +/* +** Clear the i-th bit. +** +** pBuf must be a pointer to at least BITVEC_SZ bytes of temporary storage +** that BitvecClear can use to rebuilt its hash table. +*/ +SQLITE_PRIVATE void sqlite3BitvecClear(Bitvec *p, u32 i, void *pBuf){ + if( p==0 ) return; + assert( i>0 ); + i--; + while( p->iDivisor ){ + u32 bin = i/p->iDivisor; + i = i%p->iDivisor; + p = p->u.apSub[bin]; + if (!p) { + return; + } + } + if( p->iSize<=BITVEC_NBIT ){ + p->u.aBitmap[i/BITVEC_SZELEM] &= ~(BITVEC_TELEM)(1<<(i&(BITVEC_SZELEM-1))); + }else{ + unsigned int j; + u32 *aiValues = pBuf; + memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash)); + memset(p->u.aHash, 0, sizeof(p->u.aHash)); + p->nSet = 0; + for(j=0; jnSet++; + while( p->u.aHash[h] ){ + h++; + if( h>=BITVEC_NINT ) h = 0; + } + p->u.aHash[h] = aiValues[j]; + } + } + } +} + +/* +** Destroy a bitmap object. Reclaim all memory used. +*/ +SQLITE_PRIVATE void sqlite3BitvecDestroy(Bitvec *p){ + if( p==0 ) return; + if( p->iDivisor ){ + unsigned int i; + for(i=0; iu.apSub[i]); + } + } + sqlite3_free(p); +} + +/* +** Return the value of the iSize parameter specified when Bitvec *p +** was created. +*/ +SQLITE_PRIVATE u32 sqlite3BitvecSize(Bitvec *p){ + return p->iSize; +} + +#ifdef SQLITE_DEBUG +/* +** Show the content of a Bitvec option and its children. Indent +** everything by n spaces. Add x to each bitvec value. +** +** From a debugger such as gdb, one can type: +** +** call sqlite3ShowBitvec(p) +** +** For some Bitvec p and see a recursive view of the Bitvec's content. +*/ +static void showBitvec(Bitvec *p, int n, unsigned x){ + int i; + if( p==0 ){ + printf("NULL\n"); + return; + } + printf("Bitvec 0x%p iSize=%u", p, p->iSize); + if( p->iSize<=BITVEC_NBIT ){ + printf(" bitmap\n"); + printf("%*s bits:", n, ""); + for(i=1; i<=BITVEC_NBIT; i++){ + if( sqlite3BitvecTest(p,i) ) printf(" %u", x+(unsigned)i); + } + printf("\n"); + }else if( p->iDivisor==0 ){ + printf(" hash with %u entries\n", p->nSet); + printf("%*s bits:", n, ""); + for(i=0; iu.aHash[i] ) printf(" %u", x+(unsigned)p->u.aHash[i]); + } + printf("\n"); + }else{ + printf(" sub-bitvec with iDivisor=%u\n", p->iDivisor); + for(i=0; iu.apSub[i]==0 ) continue; + printf("%*s apSub[%d]=", n, "", i); + showBitvec(p->u.apSub[i], n+4, i*p->iDivisor); + } + } +} +SQLITE_PRIVATE void sqlite3ShowBitvec(Bitvec *p){ + showBitvec(p, 0, 0); +} +#endif + +#ifndef SQLITE_UNTESTABLE +/* +** Let V[] be an array of unsigned characters sufficient to hold +** up to N bits. Let I be an integer between 0 and N. 0<=I>3] |= (1<<(I&7)) +#define CLEARBIT(V,I) V[I>>3] &= ~(BITVEC_TELEM)(1<<(I&7)) +#define TESTBIT(V,I) (V[I>>3]&(1<<(I&7)))!=0 + + +/* +** This routine runs an extensive test of the Bitvec code. +** +** The input is an array of integers that acts as a program +** to test the Bitvec. The integers are opcodes followed +** by 0, 1, or 3 operands, depending on the opcode. Another +** opcode follows immediately after the last operand. +** +** There are opcodes numbered starting with 0. 0 is the +** "halt" opcode and causes the test to end. +** +** 0 Halt and return the number of errors +** 1 N S X Set N bits beginning with S and incrementing by X +** 2 N S X Clear N bits beginning with S and incrementing by X +** 3 N Set N randomly chosen bits +** 4 N Clear N randomly chosen bits +** 5 N S X Set N bits from S increment X in array only, not in bitvec +** 6 Invoice sqlite3ShowBitvec() on the Bitvec object so far +** 7 X Show compile-time parameters and the hash of X +** +** The opcodes 1 through 4 perform set and clear operations are performed +** on both a Bitvec object and on a linear array of bits obtained from malloc. +** Opcode 5 works on the linear array only, not on the Bitvec. +** Opcode 5 is used to deliberately induce a fault in order to +** confirm that error detection works. Opcodes 6 and greater are +** state output opcodes. Opcodes 6 and greater are no-ops unless +** SQLite has been compiled with SQLITE_DEBUG. +** +** At the conclusion of the test the linear array is compared +** against the Bitvec object. If there are any differences, +** an error is returned. If they are the same, zero is returned. +** +** If a memory allocation error occurs, return -1. +** +** sz is the size of the Bitvec. Or if sz is negative, make the size +** 2*(unsigned)(-sz) and disabled the linear vector check. +*/ +SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int sz, int *aOp){ + Bitvec *pBitvec = 0; + unsigned char *pV = 0; + int rc = -1; + int i, nx, pc, op; + void *pTmpSpace; + + /* Allocate the Bitvec to be tested and a linear array of + ** bits to act as the reference */ + if( sz<=0 ){ + pBitvec = sqlite3BitvecCreate( 2*(unsigned)(-sz) ); + pV = 0; + }else{ + pBitvec = sqlite3BitvecCreate( sz ); + pV = sqlite3MallocZero( (7+(i64)sz)/8 + 1 ); + } + pTmpSpace = sqlite3_malloc64(BITVEC_SZ); + if( pBitvec==0 || pTmpSpace==0 || (pV==0 && sz>0) ) goto bitvec_end; + + /* NULL pBitvec tests */ + sqlite3BitvecSet(0, 1); + sqlite3BitvecClear(0, 1, pTmpSpace); + + /* Run the program */ + pc = i = 0; + while( (op = aOp[pc])!=0 ){ + if( op>=6 ){ +#ifdef SQLITE_DEBUG + if( op==6 ){ + sqlite3ShowBitvec(pBitvec); + }else if( op==7 ){ + printf("BITVEC_SZ = %d (%d by sizeof)\n", + BITVEC_SZ, (int)sizeof(Bitvec)); + printf("BITVEC_USIZE = %d\n", (int)BITVEC_USIZE); + printf("BITVEC_NELEM = %d\n", (int)BITVEC_NELEM); + printf("BITVEC_NBIT = %d\n", (int)BITVEC_NBIT); + printf("BITVEC_NINT = %d\n", (int)BITVEC_NINT); + printf("BITVEC_MXHASH = %d\n", (int)BITVEC_MXHASH); + printf("BITVEC_NPTR = %d\n", (int)BITVEC_NPTR); + } +#endif + pc++; + continue; + } + switch( op ){ + case 1: + case 2: + case 5: { + nx = 4; + i = aOp[pc+2] - 1; + aOp[pc+2] += aOp[pc+3]; + break; + } + case 3: + case 4: + default: { + nx = 2; + sqlite3_randomness(sizeof(i), &i); + break; + } + } + if( (--aOp[pc+1]) > 0 ) nx = 0; + pc += nx; + i = (i & 0x7fffffff)%sz; + if( (op & 1)!=0 ){ + if( pV ) SETBIT(pV, (i+1)); + if( op!=5 ){ + if( sqlite3BitvecSet(pBitvec, i+1) ) goto bitvec_end; + } + }else{ + if( pV ) CLEARBIT(pV, (i+1)); + sqlite3BitvecClear(pBitvec, i+1, pTmpSpace); + } + } + + /* Test to make sure the linear array exactly matches the + ** Bitvec object. Start with the assumption that they do + ** match (rc==0). Change rc to non-zero if a discrepancy + ** is found. + */ + if( pV ){ + rc = sqlite3BitvecTest(0,0) + sqlite3BitvecTest(pBitvec, sz+1) + + sqlite3BitvecTest(pBitvec, 0) + + (sqlite3BitvecSize(pBitvec) - sz); + for(i=1; i<=sz; i++){ + if( (TESTBIT(pV,i))!=sqlite3BitvecTest(pBitvec,i) ){ + rc = i; + break; + } + } + }else{ + rc = 0; + } + + /* Free allocated structure */ +bitvec_end: + sqlite3_free(pTmpSpace); + sqlite3_free(pV); + sqlite3BitvecDestroy(pBitvec); + return rc; +} +#endif /* SQLITE_UNTESTABLE */ + +/************** End of bitvec.c **********************************************/ +/************** Begin file pcache.c ******************************************/ +/* +** 2008 August 05 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file implements that page cache. +*/ +/* #include "sqliteInt.h" */ + +/* +** A complete page cache is an instance of this structure. Every +** entry in the cache holds a single page of the database file. The +** btree layer only operates on the cached copy of the database pages. +** +** A page cache entry is "clean" if it exactly matches what is currently +** on disk. A page is "dirty" if it has been modified and needs to be +** persisted to disk. +** +** pDirty, pDirtyTail, pSynced: +** All dirty pages are linked into the doubly linked list using +** PgHdr.pDirtyNext and pDirtyPrev. The list is maintained in LRU order +** such that p was added to the list more recently than p->pDirtyNext. +** PCache.pDirty points to the first (newest) element in the list and +** pDirtyTail to the last (oldest). +** +** The PCache.pSynced variable is used to optimize searching for a dirty +** page to eject from the cache mid-transaction. It is better to eject +** a page that does not require a journal sync than one that does. +** Therefore, pSynced is maintained so that it *almost* always points +** to either the oldest page in the pDirty/pDirtyTail list that has a +** clear PGHDR_NEED_SYNC flag or to a page that is older than this one +** (so that the right page to eject can be found by following pDirtyPrev +** pointers). +*/ +struct PCache { + PgHdr *pDirty, *pDirtyTail; /* List of dirty pages in LRU order */ + PgHdr *pSynced; /* Last synced page in dirty page list */ + i64 nRefSum; /* Sum of ref counts over all pages */ + int szCache; /* Configured cache size */ + int szSpill; /* Size before spilling occurs */ + int szPage; /* Size of every page in this cache */ + int szExtra; /* Size of extra space for each page */ + u8 bPurgeable; /* True if pages are on backing store */ + u8 eCreate; /* eCreate value for for xFetch() */ + int (*xStress)(void*,PgHdr*); /* Call to try make a page clean */ + void *pStress; /* Argument to xStress */ + sqlite3_pcache *pCache; /* Pluggable cache module */ +}; + +/********************************** Test and Debug Logic **********************/ +/* +** Debug tracing macros. Enable by by changing the "0" to "1" and +** recompiling. +** +** When sqlite3PcacheTrace is 1, single line trace messages are issued. +** When sqlite3PcacheTrace is 2, a dump of the pcache showing all cache entries +** is displayed for many operations, resulting in a lot of output. +*/ +#if defined(SQLITE_DEBUG) && 0 + int sqlite3PcacheTrace = 2; /* 0: off 1: simple 2: cache dumps */ + int sqlite3PcacheMxDump = 9999; /* Max cache entries for pcacheDump() */ +# define pcacheTrace(X) if(sqlite3PcacheTrace){sqlite3DebugPrintf X;} + static void pcachePageTrace(int i, sqlite3_pcache_page *pLower){ + PgHdr *pPg; + unsigned char *a; + int j; + if( pLower==0 ){ + printf("%3d: NULL\n", i); + }else{ + pPg = (PgHdr*)pLower->pExtra; + printf("%3d: nRef %2lld flgs %02x data ", i, pPg->nRef, pPg->flags); + a = (unsigned char *)pLower->pBuf; + for(j=0; j<12; j++) printf("%02x", a[j]); + printf(" ptr %p\n", pPg); + } + } + static void pcacheDump(PCache *pCache){ + int N; + int i; + sqlite3_pcache_page *pLower; + + if( sqlite3PcacheTrace<2 ) return; + if( pCache->pCache==0 ) return; + N = sqlite3PcachePagecount(pCache); + if( N>sqlite3PcacheMxDump ) N = sqlite3PcacheMxDump; + for(i=1; i<=N; i++){ + pLower = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, i, 0); + pcachePageTrace(i, pLower); + if( pLower && ((PgHdr*)pLower)->pPage==0 ){ + sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, pLower, 0); + } + } + } +#else +# define pcacheTrace(X) +# define pcachePageTrace(PGNO, X) +# define pcacheDump(X) +#endif + +/* +** Return 1 if pPg is on the dirty list for pCache. Return 0 if not. +** This routine runs inside of assert() statements only. +*/ +#if defined(SQLITE_ENABLE_EXPENSIVE_ASSERT) +static int pageOnDirtyList(PCache *pCache, PgHdr *pPg){ + PgHdr *p; + for(p=pCache->pDirty; p; p=p->pDirtyNext){ + if( p==pPg ) return 1; + } + return 0; +} +static int pageNotOnDirtyList(PCache *pCache, PgHdr *pPg){ + PgHdr *p; + for(p=pCache->pDirty; p; p=p->pDirtyNext){ + if( p==pPg ) return 0; + } + return 1; +} +#else +# define pageOnDirtyList(A,B) 1 +# define pageNotOnDirtyList(A,B) 1 +#endif + +/* +** Check invariants on a PgHdr entry. Return true if everything is OK. +** Return false if any invariant is violated. +** +** This routine is for use inside of assert() statements only. For +** example: +** +** assert( sqlite3PcachePageSanity(pPg) ); +*/ +#ifdef SQLITE_DEBUG +SQLITE_PRIVATE int sqlite3PcachePageSanity(PgHdr *pPg){ + PCache *pCache; + assert( pPg!=0 ); + assert( pPg->pgno>0 || pPg->pPager==0 ); /* Page number is 1 or more */ + pCache = pPg->pCache; + assert( pCache!=0 ); /* Every page has an associated PCache */ + if( pPg->flags & PGHDR_CLEAN ){ + assert( (pPg->flags & PGHDR_DIRTY)==0 );/* Cannot be both CLEAN and DIRTY */ + assert( pageNotOnDirtyList(pCache, pPg) );/* CLEAN pages not on dirtylist */ + }else{ + assert( (pPg->flags & PGHDR_DIRTY)!=0 );/* If not CLEAN must be DIRTY */ + assert( pPg->pDirtyNext==0 || pPg->pDirtyNext->pDirtyPrev==pPg ); + assert( pPg->pDirtyPrev==0 || pPg->pDirtyPrev->pDirtyNext==pPg ); + assert( pPg->pDirtyPrev!=0 || pCache->pDirty==pPg ); + assert( pageOnDirtyList(pCache, pPg) ); + } + /* WRITEABLE pages must also be DIRTY */ + if( pPg->flags & PGHDR_WRITEABLE ){ + assert( pPg->flags & PGHDR_DIRTY ); /* WRITEABLE implies DIRTY */ + } + /* NEED_SYNC can be set independently of WRITEABLE. This can happen, + ** for example, when using the sqlite3PagerDontWrite() optimization: + ** (1) Page X is journalled, and gets WRITEABLE and NEED_SEEK. + ** (2) Page X moved to freelist, WRITEABLE is cleared + ** (3) Page X reused, WRITEABLE is set again + ** If NEED_SYNC had been cleared in step 2, then it would not be reset + ** in step 3, and page might be written into the database without first + ** syncing the rollback journal, which might cause corruption on a power + ** loss. + ** + ** Another example is when the database page size is smaller than the + ** disk sector size. When any page of a sector is journalled, all pages + ** in that sector are marked NEED_SYNC even if they are still CLEAN, just + ** in case they are later modified, since all pages in the same sector + ** must be journalled and synced before any of those pages can be safely + ** written. + */ + return 1; +} +#endif /* SQLITE_DEBUG */ + + +/********************************** Linked List Management ********************/ + +/* Allowed values for second argument to pcacheManageDirtyList() */ +#define PCACHE_DIRTYLIST_REMOVE 1 /* Remove pPage from dirty list */ +#define PCACHE_DIRTYLIST_ADD 2 /* Add pPage to the dirty list */ +#define PCACHE_DIRTYLIST_FRONT 3 /* Move pPage to the front of the list */ + +/* +** Manage pPage's participation on the dirty list. Bits of the addRemove +** argument determines what operation to do. The 0x01 bit means first +** remove pPage from the dirty list. The 0x02 means add pPage back to +** the dirty list. Doing both moves pPage to the front of the dirty list. +*/ +static void pcacheManageDirtyList(PgHdr *pPage, u8 addRemove){ + PCache *p = pPage->pCache; + + pcacheTrace(("%p.DIRTYLIST.%s %d\n", p, + addRemove==1 ? "REMOVE" : addRemove==2 ? "ADD" : "FRONT", + pPage->pgno)); + if( addRemove & PCACHE_DIRTYLIST_REMOVE ){ + assert( pPage->pDirtyNext || pPage==p->pDirtyTail ); + assert( pPage->pDirtyPrev || pPage==p->pDirty ); + + /* Update the PCache1.pSynced variable if necessary. */ + if( p->pSynced==pPage ){ + p->pSynced = pPage->pDirtyPrev; + } + + if( pPage->pDirtyNext ){ + pPage->pDirtyNext->pDirtyPrev = pPage->pDirtyPrev; + }else{ + assert( pPage==p->pDirtyTail ); + p->pDirtyTail = pPage->pDirtyPrev; + } + if( pPage->pDirtyPrev ){ + pPage->pDirtyPrev->pDirtyNext = pPage->pDirtyNext; + }else{ + /* If there are now no dirty pages in the cache, set eCreate to 2. + ** This is an optimization that allows sqlite3PcacheFetch() to skip + ** searching for a dirty page to eject from the cache when it might + ** otherwise have to. */ + assert( pPage==p->pDirty ); + p->pDirty = pPage->pDirtyNext; + assert( p->bPurgeable || p->eCreate==2 ); + if( p->pDirty==0 ){ /*OPTIMIZATION-IF-TRUE*/ + assert( p->bPurgeable==0 || p->eCreate==1 ); + p->eCreate = 2; + } + } + } + if( addRemove & PCACHE_DIRTYLIST_ADD ){ + pPage->pDirtyPrev = 0; + pPage->pDirtyNext = p->pDirty; + if( pPage->pDirtyNext ){ + assert( pPage->pDirtyNext->pDirtyPrev==0 ); + pPage->pDirtyNext->pDirtyPrev = pPage; + }else{ + p->pDirtyTail = pPage; + if( p->bPurgeable ){ + assert( p->eCreate==2 ); + p->eCreate = 1; + } + } + p->pDirty = pPage; + + /* If pSynced is NULL and this page has a clear NEED_SYNC flag, set + ** pSynced to point to it. Checking the NEED_SYNC flag is an + ** optimization, as if pSynced points to a page with the NEED_SYNC + ** flag set sqlite3PcacheFetchStress() searches through all newer + ** entries of the dirty-list for a page with NEED_SYNC clear anyway. */ + if( !p->pSynced + && 0==(pPage->flags&PGHDR_NEED_SYNC) /*OPTIMIZATION-IF-FALSE*/ + ){ + p->pSynced = pPage; + } + } + pcacheDump(p); +} + +/* +** Wrapper around the pluggable caches xUnpin method. If the cache is +** being used for an in-memory database, this function is a no-op. +*/ +static void pcacheUnpin(PgHdr *p){ + if( p->pCache->bPurgeable ){ + pcacheTrace(("%p.UNPIN %d\n", p->pCache, p->pgno)); + sqlite3GlobalConfig.pcache2.xUnpin(p->pCache->pCache, p->pPage, 0); + pcacheDump(p->pCache); + } +} + +/* +** Compute the number of pages of cache requested. p->szCache is the +** cache size requested by the "PRAGMA cache_size" statement. +*/ +static int numberOfCachePages(PCache *p){ + if( p->szCache>=0 ){ + /* IMPLEMENTATION-OF: R-42059-47211 If the argument N is positive then the + ** suggested cache size is set to N. */ + return p->szCache; + }else{ + i64 n; + /* IMPLEMENTATION-OF: R-59858-46238 If the argument N is negative, then the + ** number of cache pages is adjusted to be a number of pages that would + ** use approximately abs(N*1024) bytes of memory based on the current + ** page size. */ + n = ((-1024*(i64)p->szCache)/(p->szPage+p->szExtra)); + if( n>1000000000 ) n = 1000000000; + return (int)n; + } +} + +/*************************************************** General Interfaces ****** +** +** Initialize and shutdown the page cache subsystem. Neither of these +** functions are threadsafe. +*/ +SQLITE_PRIVATE int sqlite3PcacheInitialize(void){ + if( sqlite3GlobalConfig.pcache2.xInit==0 ){ + /* IMPLEMENTATION-OF: R-26801-64137 If the xInit() method is NULL, then the + ** built-in default page cache is used instead of the application defined + ** page cache. */ + sqlite3PCacheSetDefault(); + assert( sqlite3GlobalConfig.pcache2.xInit!=0 ); + } + return sqlite3GlobalConfig.pcache2.xInit(sqlite3GlobalConfig.pcache2.pArg); +} +SQLITE_PRIVATE void sqlite3PcacheShutdown(void){ + if( sqlite3GlobalConfig.pcache2.xShutdown ){ + /* IMPLEMENTATION-OF: R-26000-56589 The xShutdown() method may be NULL. */ + sqlite3GlobalConfig.pcache2.xShutdown(sqlite3GlobalConfig.pcache2.pArg); + } +} + +/* +** Return the size in bytes of a PCache object. +*/ +SQLITE_PRIVATE int sqlite3PcacheSize(void){ return sizeof(PCache); } + +/* +** Create a new PCache object. Storage space to hold the object +** has already been allocated and is passed in as the p pointer. +** The caller discovers how much space needs to be allocated by +** calling sqlite3PcacheSize(). +** +** szExtra is some extra space allocated for each page. The first +** 8 bytes of the extra space will be zeroed as the page is allocated, +** but remaining content will be uninitialized. Though it is opaque +** to this module, the extra space really ends up being the MemPage +** structure in the pager. +*/ +SQLITE_PRIVATE int sqlite3PcacheOpen( + int szPage, /* Size of every page */ + int szExtra, /* Extra space associated with each page */ + int bPurgeable, /* True if pages are on backing store */ + int (*xStress)(void*,PgHdr*),/* Call to try to make pages clean */ + void *pStress, /* Argument to xStress */ + PCache *p /* Preallocated space for the PCache */ +){ + memset(p, 0, sizeof(PCache)); + p->szPage = 1; + p->szExtra = szExtra; + assert( szExtra>=8 ); /* First 8 bytes will be zeroed */ + p->bPurgeable = bPurgeable; + p->eCreate = 2; + p->xStress = xStress; + p->pStress = pStress; + p->szCache = 100; + p->szSpill = 1; + pcacheTrace(("%p.OPEN szPage %d bPurgeable %d\n",p,szPage,bPurgeable)); + return sqlite3PcacheSetPageSize(p, szPage); +} + +/* +** Change the page size for PCache object. The caller must ensure that there +** are no outstanding page references when this function is called. +*/ +SQLITE_PRIVATE int sqlite3PcacheSetPageSize(PCache *pCache, int szPage){ + assert( pCache->nRefSum==0 && pCache->pDirty==0 ); + if( pCache->szPage ){ + sqlite3_pcache *pNew; + pNew = sqlite3GlobalConfig.pcache2.xCreate( + szPage, pCache->szExtra + ROUND8(sizeof(PgHdr)), + pCache->bPurgeable + ); + if( pNew==0 ) return SQLITE_NOMEM_BKPT; + sqlite3GlobalConfig.pcache2.xCachesize(pNew, numberOfCachePages(pCache)); + if( pCache->pCache ){ + sqlite3GlobalConfig.pcache2.xDestroy(pCache->pCache); + } + pCache->pCache = pNew; + pCache->szPage = szPage; + pcacheTrace(("%p.PAGESIZE %d\n",pCache,szPage)); + } + return SQLITE_OK; +} + +/* +** Try to obtain a page from the cache. +** +** This routine returns a pointer to an sqlite3_pcache_page object if +** such an object is already in cache, or if a new one is created. +** This routine returns a NULL pointer if the object was not in cache +** and could not be created. +** +** The createFlags should be 0 to check for existing pages and should +** be 3 (not 1, but 3) to try to create a new page. +** +** If the createFlag is 0, then NULL is always returned if the page +** is not already in the cache. If createFlag is 1, then a new page +** is created only if that can be done without spilling dirty pages +** and without exceeding the cache size limit. +** +** The caller needs to invoke sqlite3PcacheFetchFinish() to properly +** initialize the sqlite3_pcache_page object and convert it into a +** PgHdr object. The sqlite3PcacheFetch() and sqlite3PcacheFetchFinish() +** routines are split this way for performance reasons. When separated +** they can both (usually) operate without having to push values to +** the stack on entry and pop them back off on exit, which saves a +** lot of pushing and popping. +*/ +SQLITE_PRIVATE sqlite3_pcache_page *sqlite3PcacheFetch( + PCache *pCache, /* Obtain the page from this cache */ + Pgno pgno, /* Page number to obtain */ + int createFlag /* If true, create page if it does not exist already */ +){ + int eCreate; + sqlite3_pcache_page *pRes; + + assert( pCache!=0 ); + assert( pCache->pCache!=0 ); + assert( createFlag==3 || createFlag==0 ); + assert( pCache->eCreate==((pCache->bPurgeable && pCache->pDirty) ? 1 : 2) ); + + /* eCreate defines what to do if the page does not exist. + ** 0 Do not allocate a new page. (createFlag==0) + ** 1 Allocate a new page if doing so is inexpensive. + ** (createFlag==1 AND bPurgeable AND pDirty) + ** 2 Allocate a new page even it doing so is difficult. + ** (createFlag==1 AND !(bPurgeable AND pDirty) + */ + eCreate = createFlag & pCache->eCreate; + assert( eCreate==0 || eCreate==1 || eCreate==2 ); + assert( createFlag==0 || pCache->eCreate==eCreate ); + assert( createFlag==0 || eCreate==1+(!pCache->bPurgeable||!pCache->pDirty) ); + pRes = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, eCreate); + pcacheTrace(("%p.FETCH %d%s (result: %p) ",pCache,pgno, + createFlag?" create":"",pRes)); + pcachePageTrace(pgno, pRes); + return pRes; +} + +/* +** If the sqlite3PcacheFetch() routine is unable to allocate a new +** page because no clean pages are available for reuse and the cache +** size limit has been reached, then this routine can be invoked to +** try harder to allocate a page. This routine might invoke the stress +** callback to spill dirty pages to the journal. It will then try to +** allocate the new page and will only fail to allocate a new page on +** an OOM error. +** +** This routine should be invoked only after sqlite3PcacheFetch() fails. +*/ +SQLITE_PRIVATE int sqlite3PcacheFetchStress( + PCache *pCache, /* Obtain the page from this cache */ + Pgno pgno, /* Page number to obtain */ + sqlite3_pcache_page **ppPage /* Write result here */ +){ + PgHdr *pPg; + if( pCache->eCreate==2 ) return 0; + + if( sqlite3PcachePagecount(pCache)>pCache->szSpill ){ + /* Find a dirty page to write-out and recycle. First try to find a + ** page that does not require a journal-sync (one with PGHDR_NEED_SYNC + ** cleared), but if that is not possible settle for any other + ** unreferenced dirty page. + ** + ** If the LRU page in the dirty list that has a clear PGHDR_NEED_SYNC + ** flag is currently referenced, then the following may leave pSynced + ** set incorrectly (pointing to other than the LRU page with NEED_SYNC + ** cleared). This is Ok, as pSynced is just an optimization. */ + for(pPg=pCache->pSynced; + pPg && (pPg->nRef || (pPg->flags&PGHDR_NEED_SYNC)); + pPg=pPg->pDirtyPrev + ); + pCache->pSynced = pPg; + if( !pPg ){ + for(pPg=pCache->pDirtyTail; pPg && pPg->nRef; pPg=pPg->pDirtyPrev); + } + if( pPg ){ + int rc; +#ifdef SQLITE_LOG_CACHE_SPILL + sqlite3_log(SQLITE_FULL, + "spill page %d making room for %d - cache used: %d/%d", + pPg->pgno, pgno, + sqlite3GlobalConfig.pcache2.xPagecount(pCache->pCache), + numberOfCachePages(pCache)); +#endif + pcacheTrace(("%p.SPILL %d\n",pCache,pPg->pgno)); + rc = pCache->xStress(pCache->pStress, pPg); + pcacheDump(pCache); + if( rc!=SQLITE_OK && rc!=SQLITE_BUSY ){ + return rc; + } + } + } + *ppPage = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, 2); + return *ppPage==0 ? SQLITE_NOMEM_BKPT : SQLITE_OK; +} + +/* +** This is a helper routine for sqlite3PcacheFetchFinish() +** +** In the uncommon case where the page being fetched has not been +** initialized, this routine is invoked to do the initialization. +** This routine is broken out into a separate function since it +** requires extra stack manipulation that can be avoided in the common +** case. +*/ +static SQLITE_NOINLINE PgHdr *pcacheFetchFinishWithInit( + PCache *pCache, /* Obtain the page from this cache */ + Pgno pgno, /* Page number obtained */ + sqlite3_pcache_page *pPage /* Page obtained by prior PcacheFetch() call */ +){ + PgHdr *pPgHdr; + assert( pPage!=0 ); + pPgHdr = (PgHdr*)pPage->pExtra; + assert( pPgHdr->pPage==0 ); + memset(&pPgHdr->pDirty, 0, sizeof(PgHdr) - offsetof(PgHdr,pDirty)); + pPgHdr->pPage = pPage; + pPgHdr->pData = pPage->pBuf; + pPgHdr->pExtra = (void *)&pPgHdr[1]; + memset(pPgHdr->pExtra, 0, 8); + assert( EIGHT_BYTE_ALIGNMENT( pPgHdr->pExtra ) ); + pPgHdr->pCache = pCache; + pPgHdr->pgno = pgno; + pPgHdr->flags = PGHDR_CLEAN; + return sqlite3PcacheFetchFinish(pCache,pgno,pPage); +} + +/* +** This routine converts the sqlite3_pcache_page object returned by +** sqlite3PcacheFetch() into an initialized PgHdr object. This routine +** must be called after sqlite3PcacheFetch() in order to get a usable +** result. +*/ +SQLITE_PRIVATE PgHdr *sqlite3PcacheFetchFinish( + PCache *pCache, /* Obtain the page from this cache */ + Pgno pgno, /* Page number obtained */ + sqlite3_pcache_page *pPage /* Page obtained by prior PcacheFetch() call */ +){ + PgHdr *pPgHdr; + + assert( pPage!=0 ); + pPgHdr = (PgHdr *)pPage->pExtra; + + if( !pPgHdr->pPage ){ + return pcacheFetchFinishWithInit(pCache, pgno, pPage); + } + pCache->nRefSum++; + pPgHdr->nRef++; + assert( sqlite3PcachePageSanity(pPgHdr) ); + return pPgHdr; +} + +/* +** Decrement the reference count on a page. If the page is clean and the +** reference count drops to 0, then it is made eligible for recycling. +*/ +SQLITE_PRIVATE void SQLITE_NOINLINE sqlite3PcacheRelease(PgHdr *p){ + assert( p->nRef>0 ); + p->pCache->nRefSum--; + if( (--p->nRef)==0 ){ + if( p->flags&PGHDR_CLEAN ){ + pcacheUnpin(p); + }else{ + pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT); + assert( sqlite3PcachePageSanity(p) ); + } + } +} + +/* +** Increase the reference count of a supplied page by 1. +*/ +SQLITE_PRIVATE void sqlite3PcacheRef(PgHdr *p){ + assert(p->nRef>0); + assert( sqlite3PcachePageSanity(p) ); + p->nRef++; + p->pCache->nRefSum++; +} + +/* +** Drop a page from the cache. There must be exactly one reference to the +** page. This function deletes that reference, so after it returns the +** page pointed to by p is invalid. +*/ +SQLITE_PRIVATE void sqlite3PcacheDrop(PgHdr *p){ + assert( p->nRef==1 ); + assert( sqlite3PcachePageSanity(p) ); + if( p->flags&PGHDR_DIRTY ){ + pcacheManageDirtyList(p, PCACHE_DIRTYLIST_REMOVE); + } + p->pCache->nRefSum--; + sqlite3GlobalConfig.pcache2.xUnpin(p->pCache->pCache, p->pPage, 1); +} + +/* +** Make sure the page is marked as dirty. If it isn't dirty already, +** make it so. +*/ +SQLITE_PRIVATE void sqlite3PcacheMakeDirty(PgHdr *p){ + assert( p->nRef>0 ); + assert( sqlite3PcachePageSanity(p) ); + if( p->flags & (PGHDR_CLEAN|PGHDR_DONT_WRITE) ){ /*OPTIMIZATION-IF-FALSE*/ + p->flags &= ~PGHDR_DONT_WRITE; + if( p->flags & PGHDR_CLEAN ){ + p->flags ^= (PGHDR_DIRTY|PGHDR_CLEAN); + pcacheTrace(("%p.DIRTY %d\n",p->pCache,p->pgno)); + assert( (p->flags & (PGHDR_DIRTY|PGHDR_CLEAN))==PGHDR_DIRTY ); + pcacheManageDirtyList(p, PCACHE_DIRTYLIST_ADD); + assert( sqlite3PcachePageSanity(p) ); + } + assert( sqlite3PcachePageSanity(p) ); + } +} + +/* +** Make sure the page is marked as clean. If it isn't clean already, +** make it so. +*/ +SQLITE_PRIVATE void sqlite3PcacheMakeClean(PgHdr *p){ + assert( sqlite3PcachePageSanity(p) ); + assert( (p->flags & PGHDR_DIRTY)!=0 ); + assert( (p->flags & PGHDR_CLEAN)==0 ); + pcacheManageDirtyList(p, PCACHE_DIRTYLIST_REMOVE); + p->flags &= ~(PGHDR_DIRTY|PGHDR_NEED_SYNC|PGHDR_WRITEABLE); + p->flags |= PGHDR_CLEAN; + pcacheTrace(("%p.CLEAN %d\n",p->pCache,p->pgno)); + assert( sqlite3PcachePageSanity(p) ); + if( p->nRef==0 ){ + pcacheUnpin(p); + } +} + +/* +** Make every page in the cache clean. +*/ +SQLITE_PRIVATE void sqlite3PcacheCleanAll(PCache *pCache){ + PgHdr *p; + pcacheTrace(("%p.CLEAN-ALL\n",pCache)); + while( (p = pCache->pDirty)!=0 ){ + sqlite3PcacheMakeClean(p); + } +} + +/* +** Clear the PGHDR_NEED_SYNC and PGHDR_WRITEABLE flag from all dirty pages. +*/ +SQLITE_PRIVATE void sqlite3PcacheClearWritable(PCache *pCache){ + PgHdr *p; + pcacheTrace(("%p.CLEAR-WRITEABLE\n",pCache)); + for(p=pCache->pDirty; p; p=p->pDirtyNext){ + p->flags &= ~(PGHDR_NEED_SYNC|PGHDR_WRITEABLE); + } + pCache->pSynced = pCache->pDirtyTail; +} + +/* +** Clear the PGHDR_NEED_SYNC flag from all dirty pages. +*/ +SQLITE_PRIVATE void sqlite3PcacheClearSyncFlags(PCache *pCache){ + PgHdr *p; + for(p=pCache->pDirty; p; p=p->pDirtyNext){ + p->flags &= ~PGHDR_NEED_SYNC; + } + pCache->pSynced = pCache->pDirtyTail; +} + +/* +** Change the page number of page p to newPgno. +*/ +SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr *p, Pgno newPgno){ + PCache *pCache = p->pCache; + sqlite3_pcache_page *pOther; + assert( p->nRef>0 ); + assert( newPgno>0 ); + assert( sqlite3PcachePageSanity(p) ); + pcacheTrace(("%p.MOVE %d -> %d\n",pCache,p->pgno,newPgno)); + pOther = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, newPgno, 0); + if( pOther ){ + PgHdr *pXPage = (PgHdr*)pOther->pExtra; + assert( pXPage->nRef==0 ); + pXPage->nRef++; + pCache->nRefSum++; + sqlite3PcacheDrop(pXPage); + } + sqlite3GlobalConfig.pcache2.xRekey(pCache->pCache, p->pPage, p->pgno,newPgno); + p->pgno = newPgno; + if( (p->flags&PGHDR_DIRTY) && (p->flags&PGHDR_NEED_SYNC) ){ + pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT); + assert( sqlite3PcachePageSanity(p) ); + } +} + +/* +** Drop every cache entry whose page number is greater than "pgno". The +** caller must ensure that there are no outstanding references to any pages +** other than page 1 with a page number greater than pgno. +** +** If there is a reference to page 1 and the pgno parameter passed to this +** function is 0, then the data area associated with page 1 is zeroed, but +** the page object is not dropped. +*/ +SQLITE_PRIVATE void sqlite3PcacheTruncate(PCache *pCache, Pgno pgno){ + if( pCache->pCache ){ + PgHdr *p; + PgHdr *pNext; + pcacheTrace(("%p.TRUNCATE %d\n",pCache,pgno)); + for(p=pCache->pDirty; p; p=pNext){ + pNext = p->pDirtyNext; + /* This routine never gets call with a positive pgno except right + ** after sqlite3PcacheCleanAll(). So if there are dirty pages, + ** it must be that pgno==0. + */ + assert( p->pgno>0 ); + if( p->pgno>pgno ){ + assert( p->flags&PGHDR_DIRTY ); + sqlite3PcacheMakeClean(p); + } + } + if( pgno==0 && pCache->nRefSum ){ + sqlite3_pcache_page *pPage1; + pPage1 = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache,1,0); + if( ALWAYS(pPage1) ){ /* Page 1 is always available in cache, because + ** pCache->nRefSum>0 */ + memset(pPage1->pBuf, 0, pCache->szPage); + pgno = 1; + } + } + sqlite3GlobalConfig.pcache2.xTruncate(pCache->pCache, pgno+1); + } +} + +/* +** Close a cache. +*/ +SQLITE_PRIVATE void sqlite3PcacheClose(PCache *pCache){ + assert( pCache->pCache!=0 ); + pcacheTrace(("%p.CLOSE\n",pCache)); + sqlite3GlobalConfig.pcache2.xDestroy(pCache->pCache); +} + +/* +** Discard the contents of the cache. +*/ +SQLITE_PRIVATE void sqlite3PcacheClear(PCache *pCache){ + sqlite3PcacheTruncate(pCache, 0); +} + +/* +** Merge two lists of pages connected by pDirty and in pgno order. +** Do not bother fixing the pDirtyPrev pointers. +*/ +static PgHdr *pcacheMergeDirtyList(PgHdr *pA, PgHdr *pB){ + PgHdr result, *pTail; + pTail = &result; + assert( pA!=0 && pB!=0 ); + for(;;){ + if( pA->pgnopgno ){ + pTail->pDirty = pA; + pTail = pA; + pA = pA->pDirty; + if( pA==0 ){ + pTail->pDirty = pB; + break; + } + }else{ + pTail->pDirty = pB; + pTail = pB; + pB = pB->pDirty; + if( pB==0 ){ + pTail->pDirty = pA; + break; + } + } + } + return result.pDirty; +} + +/* +** Sort the list of pages in ascending order by pgno. Pages are +** connected by pDirty pointers. The pDirtyPrev pointers are +** corrupted by this sort. +** +** Since there cannot be more than 2^31 distinct pages in a database, +** there cannot be more than 31 buckets required by the merge sorter. +** One extra bucket is added to catch overflow in case something +** ever changes to make the previous sentence incorrect. +*/ +#define N_SORT_BUCKET 32 +static PgHdr *pcacheSortDirtyList(PgHdr *pIn){ + PgHdr *a[N_SORT_BUCKET], *p; + int i; + memset(a, 0, sizeof(a)); + while( pIn ){ + p = pIn; + pIn = p->pDirty; + p->pDirty = 0; + for(i=0; ALWAYS(ipDirty; p; p=p->pDirtyNext){ + p->pDirty = p->pDirtyNext; + } + return pcacheSortDirtyList(pCache->pDirty); +} + +/* +** Return the total number of references to all pages held by the cache. +** +** This is not the total number of pages referenced, but the sum of the +** reference count for all pages. +*/ +SQLITE_PRIVATE i64 sqlite3PcacheRefCount(PCache *pCache){ + return pCache->nRefSum; +} + +/* +** Return the number of references to the page supplied as an argument. +*/ +SQLITE_PRIVATE i64 sqlite3PcachePageRefcount(PgHdr *p){ + return p->nRef; +} + +/* +** Return the total number of pages in the cache. +*/ +SQLITE_PRIVATE int sqlite3PcachePagecount(PCache *pCache){ + assert( pCache->pCache!=0 ); + return sqlite3GlobalConfig.pcache2.xPagecount(pCache->pCache); +} + +#ifdef SQLITE_TEST +/* +** Get the suggested cache-size value. +*/ +SQLITE_PRIVATE int sqlite3PcacheGetCachesize(PCache *pCache){ + return numberOfCachePages(pCache); +} +#endif + +/* +** Set the suggested cache-size value. +*/ +SQLITE_PRIVATE void sqlite3PcacheSetCachesize(PCache *pCache, int mxPage){ + assert( pCache->pCache!=0 ); + pCache->szCache = mxPage; + sqlite3GlobalConfig.pcache2.xCachesize(pCache->pCache, + numberOfCachePages(pCache)); +} + +/* +** Set the suggested cache-spill value. Make no changes if if the +** argument is zero. Return the effective cache-spill size, which will +** be the larger of the szSpill and szCache. +*/ +SQLITE_PRIVATE int sqlite3PcacheSetSpillsize(PCache *p, int mxPage){ + int res; + assert( p->pCache!=0 ); + if( mxPage ){ + if( mxPage<0 ){ + mxPage = (int)((-1024*(i64)mxPage)/(p->szPage+p->szExtra)); + } + p->szSpill = mxPage; + } + res = numberOfCachePages(p); + if( resszSpill ) res = p->szSpill; + return res; +} + +/* +** Free up as much memory as possible from the page cache. +*/ +SQLITE_PRIVATE void sqlite3PcacheShrink(PCache *pCache){ + assert( pCache->pCache!=0 ); + sqlite3GlobalConfig.pcache2.xShrink(pCache->pCache); +} + +/* +** Return the size of the header added by this middleware layer +** in the page-cache hierarchy. +*/ +SQLITE_PRIVATE int sqlite3HeaderSizePcache(void){ return ROUND8(sizeof(PgHdr)); } + +/* +** Return the number of dirty pages currently in the cache, as a percentage +** of the configured cache size. +*/ +SQLITE_PRIVATE int sqlite3PCachePercentDirty(PCache *pCache){ + PgHdr *pDirty; + int nDirty = 0; + int nCache = numberOfCachePages(pCache); + for(pDirty=pCache->pDirty; pDirty; pDirty=pDirty->pDirtyNext) nDirty++; + return nCache ? (int)(((i64)nDirty * 100) / nCache) : 0; +} + +#ifdef SQLITE_DIRECT_OVERFLOW_READ +/* +** Return true if there are one or more dirty pages in the cache. Else false. +*/ +SQLITE_PRIVATE int sqlite3PCacheIsDirty(PCache *pCache){ + return (pCache->pDirty!=0); +} +#endif + +#if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG) +/* +** For all dirty pages currently in the cache, invoke the specified +** callback. This is only used if the SQLITE_CHECK_PAGES macro is +** defined. +*/ +SQLITE_PRIVATE void sqlite3PcacheIterateDirty(PCache *pCache, void (*xIter)(PgHdr *)){ + PgHdr *pDirty; + for(pDirty=pCache->pDirty; pDirty; pDirty=pDirty->pDirtyNext){ + xIter(pDirty); + } +} +#endif + +/************** End of pcache.c **********************************************/ +/************** Begin file pcache1.c *****************************************/ +/* +** 2008 November 05 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file implements the default page cache implementation (the +** sqlite3_pcache interface). It also contains part of the implementation +** of the SQLITE_CONFIG_PAGECACHE and sqlite3_release_memory() features. +** If the default page cache implementation is overridden, then neither of +** these two features are available. +** +** A Page cache line looks like this: +** +** ------------------------------------------------------------- +** | database page content | PgHdr1 | MemPage | PgHdr | +** ------------------------------------------------------------- +** +** The database page content is up front (so that buffer overreads tend to +** flow harmlessly into the PgHdr1, MemPage, and PgHdr extensions). MemPage +** is the extension added by the btree.c module containing information such +** as the database page number and how that database page is used. PgHdr +** is added by the pcache.c layer and contains information used to keep track +** of which pages are "dirty". PgHdr1 is an extension added by this +** module (pcache1.c). The PgHdr1 header is a subclass of sqlite3_pcache_page. +** PgHdr1 contains information needed to look up a page by its page number. +** The superclass sqlite3_pcache_page.pBuf points to the start of the +** database page content and sqlite3_pcache_page.pExtra points to PgHdr. +** +** The size of the extension (MemPage+PgHdr+PgHdr1) can be determined at +** runtime using sqlite3_config(SQLITE_CONFIG_PCACHE_HDRSZ, &size). The +** sizes of the extensions sum to 272 bytes on x64 for 3.8.10, but this +** size can vary according to architecture, compile-time options, and +** SQLite library version number. +** +** Historical note: It used to be that if the SQLITE_PCACHE_SEPARATE_HEADER +** was defined, then the page content would be held in a separate memory +** allocation from the PgHdr1. This was intended to avoid clownshoe memory +** allocations. However, the btree layer needs a small (16-byte) overrun +** area after the page content buffer. The header serves as that overrun +** area. Therefore SQLITE_PCACHE_SEPARATE_HEADER was discontinued to avoid +** any possibility of a memory error. +** +** This module tracks pointers to PgHdr1 objects. Only pcache.c communicates +** with this module. Information is passed back and forth as PgHdr1 pointers. +** +** The pcache.c and pager.c modules deal pointers to PgHdr objects. +** The btree.c module deals with pointers to MemPage objects. +** +** SOURCE OF PAGE CACHE MEMORY: +** +** Memory for a page might come from any of three sources: +** +** (1) The general-purpose memory allocator - sqlite3Malloc() +** (2) Global page-cache memory provided using sqlite3_config() with +** SQLITE_CONFIG_PAGECACHE. +** (3) PCache-local bulk allocation. +** +** The third case is a chunk of heap memory (defaulting to 100 pages worth) +** that is allocated when the page cache is created. The size of the local +** bulk allocation can be adjusted using +** +** sqlite3_config(SQLITE_CONFIG_PAGECACHE, (void*)0, 0, N). +** +** If N is positive, then N pages worth of memory are allocated using a single +** sqlite3Malloc() call and that memory is used for the first N pages allocated. +** Or if N is negative, then -1024*N bytes of memory are allocated and used +** for as many pages as can be accommodated. +** +** Only one of (2) or (3) can be used. Once the memory available to (2) or +** (3) is exhausted, subsequent allocations fail over to the general-purpose +** memory allocator (1). +** +** Earlier versions of SQLite used only methods (1) and (2). But experiments +** show that method (3) with N==100 provides about a 5% performance boost for +** common workloads. +*/ +/* #include "sqliteInt.h" */ + +typedef struct PCache1 PCache1; +typedef struct PgHdr1 PgHdr1; +typedef struct PgFreeslot PgFreeslot; +typedef struct PGroup PGroup; + +/* +** Each cache entry is represented by an instance of the following +** structure. A buffer of PgHdr1.pCache->szPage bytes is allocated +** directly before this structure and is used to cache the page content. +** +** When reading a corrupt database file, it is possible that SQLite might +** read a few bytes (no more than 16 bytes) past the end of the page buffer. +** It will only read past the end of the page buffer, never write. This +** object is positioned immediately after the page buffer to serve as an +** overrun area, so that overreads are harmless. +** +** Variables isBulkLocal and isAnchor were once type "u8". That works, +** but causes a 2-byte gap in the structure for most architectures (since +** pointers must be either 4 or 8-byte aligned). As this structure is located +** in memory directly after the associated page data, if the database is +** corrupt, code at the b-tree layer may overread the page buffer and +** read part of this structure before the corruption is detected. This +** can cause a valgrind error if the uninitialized gap is accessed. Using u16 +** ensures there is no such gap, and therefore no bytes of uninitialized +** memory in the structure. +** +** The pLruNext and pLruPrev pointers form a double-linked circular list +** of all pages that are unpinned. The PGroup.lru element (which should be +** the only element on the list with PgHdr1.isAnchor set to 1) forms the +** beginning and the end of the list. +*/ +struct PgHdr1 { + sqlite3_pcache_page page; /* Base class. Must be first. pBuf & pExtra */ + unsigned int iKey; /* Key value (page number) */ + u16 isBulkLocal; /* This page from bulk local storage */ + u16 isAnchor; /* This is the PGroup.lru element */ + PgHdr1 *pNext; /* Next in hash table chain */ + PCache1 *pCache; /* Cache that currently owns this page */ + PgHdr1 *pLruNext; /* Next in circular LRU list of unpinned pages */ + PgHdr1 *pLruPrev; /* Previous in LRU list of unpinned pages */ + /* NB: pLruPrev is only valid if pLruNext!=0 */ +}; + +/* +** A page is pinned if it is not on the LRU list. To be "pinned" means +** that the page is in active use and must not be deallocated. +*/ +#define PAGE_IS_PINNED(p) ((p)->pLruNext==0) +#define PAGE_IS_UNPINNED(p) ((p)->pLruNext!=0) + +/* Each page cache (or PCache) belongs to a PGroup. A PGroup is a set +** of one or more PCaches that are able to recycle each other's unpinned +** pages when they are under memory pressure. A PGroup is an instance of +** the following object. +** +** This page cache implementation works in one of two modes: +** +** (1) Every PCache is the sole member of its own PGroup. There is +** one PGroup per PCache. +** +** (2) There is a single global PGroup that all PCaches are a member +** of. +** +** Mode 1 uses more memory (since PCache instances are not able to rob +** unused pages from other PCaches) but it also operates without a mutex, +** and is therefore often faster. Mode 2 requires a mutex in order to be +** threadsafe, but recycles pages more efficiently. +** +** For mode (1), PGroup.mutex is NULL. For mode (2) there is only a single +** PGroup which is the pcache1.grp global variable and its mutex is +** SQLITE_MUTEX_STATIC_LRU. +*/ +struct PGroup { + sqlite3_mutex *mutex; /* MUTEX_STATIC_LRU or NULL */ + unsigned int nMaxPage; /* Sum of nMax for purgeable caches */ + unsigned int nMinPage; /* Sum of nMin for purgeable caches */ + unsigned int mxPinned; /* nMaxpage + 10 - nMinPage */ + unsigned int nPurgeable; /* Number of purgeable pages allocated */ + PgHdr1 lru; /* The beginning and end of the LRU list */ +}; + +/* Each page cache is an instance of the following object. Every +** open database file (including each in-memory database and each +** temporary or transient database) has a single page cache which +** is an instance of this object. +** +** Pointers to structures of this type are cast and returned as +** opaque sqlite3_pcache* handles. +*/ +struct PCache1 { + /* Cache configuration parameters. Page size (szPage) and the purgeable + ** flag (bPurgeable) and the pnPurgeable pointer are all set when the + ** cache is created and are never changed thereafter. nMax may be + ** modified at any time by a call to the pcache1Cachesize() method. + ** The PGroup mutex must be held when accessing nMax. + */ + PGroup *pGroup; /* PGroup this cache belongs to */ + unsigned int *pnPurgeable; /* Pointer to pGroup->nPurgeable */ + int szPage; /* Size of database content section */ + int szExtra; /* sizeof(MemPage)+sizeof(PgHdr) */ + int szAlloc; /* Total size of one pcache line */ + int bPurgeable; /* True if cache is purgeable */ + unsigned int nMin; /* Minimum number of pages reserved */ + unsigned int nMax; /* Configured "cache_size" value */ + unsigned int n90pct; /* nMax*9/10 */ + unsigned int iMaxKey; /* Largest key seen since xTruncate() */ + unsigned int nPurgeableDummy; /* pnPurgeable points here when not used*/ + + /* Hash table of all pages. The following variables may only be accessed + ** when the accessor is holding the PGroup mutex. + */ + unsigned int nRecyclable; /* Number of pages in the LRU list */ + unsigned int nPage; /* Total number of pages in apHash */ + unsigned int nHash; /* Number of slots in apHash[] */ + PgHdr1 **apHash; /* Hash table for fast lookup by key */ + PgHdr1 *pFree; /* List of unused pcache-local pages */ + void *pBulk; /* Bulk memory used by pcache-local */ +}; + +/* +** Free slots in the allocator used to divide up the global page cache +** buffer provided using the SQLITE_CONFIG_PAGECACHE mechanism. +*/ +struct PgFreeslot { + PgFreeslot *pNext; /* Next free slot */ +}; + +/* +** Global data used by this cache. +*/ +static SQLITE_WSD struct PCacheGlobal { + PGroup grp; /* The global PGroup for mode (2) */ + + /* Variables related to SQLITE_CONFIG_PAGECACHE settings. The + ** szSlot, nSlot, pStart, pEnd, nReserve, and isInit values are all + ** fixed at sqlite3_initialize() time and do not require mutex protection. + ** The nFreeSlot and pFree values do require mutex protection. + */ + int isInit; /* True if initialized */ + int separateCache; /* Use a new PGroup for each PCache */ + int nInitPage; /* Initial bulk allocation size */ + int szSlot; /* Size of each free slot */ + int nSlot; /* The number of pcache slots */ + int nReserve; /* Try to keep nFreeSlot above this */ + void *pStart, *pEnd; /* Bounds of global page cache memory */ + /* Above requires no mutex. Use mutex below for variable that follow. */ + sqlite3_mutex *mutex; /* Mutex for accessing the following: */ + PgFreeslot *pFree; /* Free page blocks */ + int nFreeSlot; /* Number of unused pcache slots */ + int bUnderPressure; /* True if low on PAGECACHE memory */ +} pcache1_g; + +/* +** All code in this file should access the global structure above via the +** alias "pcache1". This ensures that the WSD emulation is used when +** compiling for systems that do not support real WSD. +*/ +#define pcache1 (GLOBAL(struct PCacheGlobal, pcache1_g)) + +/* +** Macros to enter and leave the PCache LRU mutex. +*/ +#if !defined(SQLITE_ENABLE_MEMORY_MANAGEMENT) || SQLITE_THREADSAFE==0 +# define pcache1EnterMutex(X) assert((X)->mutex==0) +# define pcache1LeaveMutex(X) assert((X)->mutex==0) +# define PCACHE1_MIGHT_USE_GROUP_MUTEX 0 +#else +# define pcache1EnterMutex(X) sqlite3_mutex_enter((X)->mutex) +# define pcache1LeaveMutex(X) sqlite3_mutex_leave((X)->mutex) +# define PCACHE1_MIGHT_USE_GROUP_MUTEX 1 +#endif + +/******************************************************************************/ +/******** Page Allocation/SQLITE_CONFIG_PCACHE Related Functions **************/ + + +/* +** This function is called during initialization if a static buffer is +** supplied to use for the page-cache by passing the SQLITE_CONFIG_PAGECACHE +** verb to sqlite3_config(). Parameter pBuf points to an allocation large +** enough to contain 'n' buffers of 'sz' bytes each. +** +** This routine is called from sqlite3_initialize() and so it is guaranteed +** to be serialized already. There is no need for further mutexing. +*/ +SQLITE_PRIVATE void sqlite3PCacheBufferSetup(void *pBuf, int sz, int n){ + if( pcache1.isInit ){ + PgFreeslot *p; + if( pBuf==0 ) sz = n = 0; + if( n==0 ) sz = 0; + sz = ROUNDDOWN8(sz); + pcache1.szSlot = sz; + pcache1.nSlot = pcache1.nFreeSlot = n; + pcache1.nReserve = n>90 ? 10 : (n/10 + 1); + pcache1.pStart = pBuf; + pcache1.pFree = 0; + AtomicStore(&pcache1.bUnderPressure,0); + while( n-- ){ + p = (PgFreeslot*)pBuf; + p->pNext = pcache1.pFree; + pcache1.pFree = p; + pBuf = (void*)&((char*)pBuf)[sz]; + } + pcache1.pEnd = pBuf; + } +} + +/* +** Try to initialize the pCache->pFree and pCache->pBulk fields. Return +** true if pCache->pFree ends up containing one or more free pages. +*/ +static int pcache1InitBulk(PCache1 *pCache){ + i64 szBulk; + char *zBulk; + if( pcache1.nInitPage==0 ) return 0; + /* Do not bother with a bulk allocation if the cache size very small */ + if( pCache->nMax<3 ) return 0; + sqlite3BeginBenignMalloc(); + if( pcache1.nInitPage>0 ){ + szBulk = pCache->szAlloc * (i64)pcache1.nInitPage; + }else{ + szBulk = -1024 * (i64)pcache1.nInitPage; + } + if( szBulk > pCache->szAlloc*(i64)pCache->nMax ){ + szBulk = pCache->szAlloc*(i64)pCache->nMax; + } + zBulk = pCache->pBulk = sqlite3Malloc( szBulk ); + sqlite3EndBenignMalloc(); + if( zBulk ){ + int nBulk = sqlite3MallocSize(zBulk)/pCache->szAlloc; + do{ + PgHdr1 *pX = (PgHdr1*)&zBulk[pCache->szPage]; + pX->page.pBuf = zBulk; + pX->page.pExtra = (u8*)pX + ROUND8(sizeof(*pX)); + assert( EIGHT_BYTE_ALIGNMENT( pX->page.pExtra ) ); + pX->isBulkLocal = 1; + pX->isAnchor = 0; + pX->pNext = pCache->pFree; + pX->pLruPrev = 0; /* Initializing this saves a valgrind error */ + pCache->pFree = pX; + zBulk += pCache->szAlloc; + }while( --nBulk ); + } + return pCache->pFree!=0; +} + +/* +** Malloc function used within this file to allocate space from the buffer +** configured using sqlite3_config(SQLITE_CONFIG_PAGECACHE) option. If no +** such buffer exists or there is no space left in it, this function falls +** back to sqlite3Malloc(). +** +** Multiple threads can run this routine at the same time. Global variables +** in pcache1 need to be protected via mutex. +*/ +static void *pcache1Alloc(int nByte){ + void *p = 0; + assert( sqlite3_mutex_notheld(pcache1.grp.mutex) ); + if( nByte<=pcache1.szSlot ){ + sqlite3_mutex_enter(pcache1.mutex); + p = (PgHdr1 *)pcache1.pFree; + if( p ){ + pcache1.pFree = pcache1.pFree->pNext; + pcache1.nFreeSlot--; + AtomicStore(&pcache1.bUnderPressure,pcache1.nFreeSlot=0 ); + sqlite3StatusHighwater(SQLITE_STATUS_PAGECACHE_SIZE, nByte); + sqlite3StatusUp(SQLITE_STATUS_PAGECACHE_USED, 1); + } + sqlite3_mutex_leave(pcache1.mutex); + } + if( p==0 ){ + /* Memory is not available in the SQLITE_CONFIG_PAGECACHE pool. Get + ** it from sqlite3Malloc instead. + */ + p = sqlite3Malloc(nByte); +#ifndef SQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS + if( p ){ + int sz = sqlite3MallocSize(p); + sqlite3_mutex_enter(pcache1.mutex); + sqlite3StatusHighwater(SQLITE_STATUS_PAGECACHE_SIZE, nByte); + sqlite3StatusUp(SQLITE_STATUS_PAGECACHE_OVERFLOW, sz); + sqlite3_mutex_leave(pcache1.mutex); + } +#endif + sqlite3MemdebugSetType(p, MEMTYPE_PCACHE); + } + return p; +} + +/* +** Free an allocated buffer obtained from pcache1Alloc(). +*/ +static void pcache1Free(void *p){ + if( p==0 ) return; + if( SQLITE_WITHIN(p, pcache1.pStart, pcache1.pEnd) ){ + PgFreeslot *pSlot; + sqlite3_mutex_enter(pcache1.mutex); + sqlite3StatusDown(SQLITE_STATUS_PAGECACHE_USED, 1); + pSlot = (PgFreeslot*)p; + pSlot->pNext = pcache1.pFree; + pcache1.pFree = pSlot; + pcache1.nFreeSlot++; + AtomicStore(&pcache1.bUnderPressure,pcache1.nFreeSlot=pcache1.pStart && ppGroup->mutex) ); + if( pCache->pFree || (pCache->nPage==0 && pcache1InitBulk(pCache)) ){ + assert( pCache->pFree!=0 ); + p = pCache->pFree; + pCache->pFree = p->pNext; + p->pNext = 0; + }else{ +#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT + /* The group mutex must be released before pcache1Alloc() is called. This + ** is because it might call sqlite3_release_memory(), which assumes that + ** this mutex is not held. */ + assert( pcache1.separateCache==0 ); + assert( pCache->pGroup==&pcache1.grp ); + pcache1LeaveMutex(pCache->pGroup); +#endif + if( benignMalloc ){ sqlite3BeginBenignMalloc(); } + pPg = pcache1Alloc(pCache->szAlloc); + if( benignMalloc ){ sqlite3EndBenignMalloc(); } +#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT + pcache1EnterMutex(pCache->pGroup); +#endif + if( pPg==0 ) return 0; + p = (PgHdr1 *)&((u8 *)pPg)[pCache->szPage]; + p->page.pBuf = pPg; + p->page.pExtra = (u8*)p + ROUND8(sizeof(*p)); + assert( EIGHT_BYTE_ALIGNMENT( p->page.pExtra ) ); + p->isBulkLocal = 0; + p->isAnchor = 0; + p->pLruPrev = 0; /* Initializing this saves a valgrind error */ + } + (*pCache->pnPurgeable)++; + return p; +} + +/* +** Free a page object allocated by pcache1AllocPage(). +*/ +static void pcache1FreePage(PgHdr1 *p){ + PCache1 *pCache; + assert( p!=0 ); + pCache = p->pCache; + assert( sqlite3_mutex_held(p->pCache->pGroup->mutex) ); + if( p->isBulkLocal ){ + p->pNext = pCache->pFree; + pCache->pFree = p; + }else{ + pcache1Free(p->page.pBuf); + } + (*pCache->pnPurgeable)--; +} + +/* +** Malloc function used by SQLite to obtain space from the buffer configured +** using sqlite3_config(SQLITE_CONFIG_PAGECACHE) option. If no such buffer +** exists, this function falls back to sqlite3Malloc(). +*/ +SQLITE_PRIVATE void *sqlite3PageMalloc(int sz){ + assert( sz<=65536+8 ); /* These allocations are never very large */ + return pcache1Alloc(sz); +} + +/* +** Free an allocated buffer obtained from sqlite3PageMalloc(). +*/ +SQLITE_PRIVATE void sqlite3PageFree(void *p){ + pcache1Free(p); +} + + +/* +** Return true if it desirable to avoid allocating a new page cache +** entry. +** +** If memory was allocated specifically to the page cache using +** SQLITE_CONFIG_PAGECACHE but that memory has all been used, then +** it is desirable to avoid allocating a new page cache entry because +** presumably SQLITE_CONFIG_PAGECACHE was suppose to be sufficient +** for all page cache needs and we should not need to spill the +** allocation onto the heap. +** +** Or, the heap is used for all page cache memory but the heap is +** under memory pressure, then again it is desirable to avoid +** allocating a new page cache entry in order to avoid stressing +** the heap even further. +*/ +static int pcache1UnderMemoryPressure(PCache1 *pCache){ + if( pcache1.nSlot && (pCache->szPage+pCache->szExtra)<=pcache1.szSlot ){ + return AtomicLoad(&pcache1.bUnderPressure); + }else{ + return sqlite3HeapNearlyFull(); + } +} + +/******************************************************************************/ +/******** General Implementation Functions ************************************/ + +/* +** This function is used to resize the hash table used by the cache passed +** as the first argument. +** +** The PCache mutex must be held when this function is called. +*/ +static void pcache1ResizeHash(PCache1 *p){ + PgHdr1 **apNew; + u64 nNew; + u32 i; + + assert( sqlite3_mutex_held(p->pGroup->mutex) ); + + nNew = 2*(u64)p->nHash; + if( nNew<256 ){ + nNew = 256; + } + + pcache1LeaveMutex(p->pGroup); + if( p->nHash ){ sqlite3BeginBenignMalloc(); } + apNew = (PgHdr1 **)sqlite3MallocZero(sizeof(PgHdr1 *)*nNew); + if( p->nHash ){ sqlite3EndBenignMalloc(); } + pcache1EnterMutex(p->pGroup); + if( apNew ){ + for(i=0; inHash; i++){ + PgHdr1 *pPage; + PgHdr1 *pNext = p->apHash[i]; + while( (pPage = pNext)!=0 ){ + unsigned int h = pPage->iKey % nNew; + pNext = pPage->pNext; + pPage->pNext = apNew[h]; + apNew[h] = pPage; + } + } + sqlite3_free(p->apHash); + p->apHash = apNew; + p->nHash = nNew; + } +} + +/* +** This function is used internally to remove the page pPage from the +** PGroup LRU list, if is part of it. If pPage is not part of the PGroup +** LRU list, then this function is a no-op. +** +** The PGroup mutex must be held when this function is called. +*/ +static PgHdr1 *pcache1PinPage(PgHdr1 *pPage){ + assert( pPage!=0 ); + assert( PAGE_IS_UNPINNED(pPage) ); + assert( pPage->pLruNext ); + assert( pPage->pLruPrev ); + assert( sqlite3_mutex_held(pPage->pCache->pGroup->mutex) ); + pPage->pLruPrev->pLruNext = pPage->pLruNext; + pPage->pLruNext->pLruPrev = pPage->pLruPrev; + pPage->pLruNext = 0; + /* pPage->pLruPrev = 0; + ** No need to clear pLruPrev as it is never accessed if pLruNext is 0 */ + assert( pPage->isAnchor==0 ); + assert( pPage->pCache->pGroup->lru.isAnchor==1 ); + pPage->pCache->nRecyclable--; + return pPage; +} + + +/* +** Remove the page supplied as an argument from the hash table +** (PCache1.apHash structure) that it is currently stored in. +** Also free the page if freePage is true. +** +** The PGroup mutex must be held when this function is called. +*/ +static void pcache1RemoveFromHash(PgHdr1 *pPage, int freeFlag){ + unsigned int h; + PCache1 *pCache = pPage->pCache; + PgHdr1 **pp; + + assert( sqlite3_mutex_held(pCache->pGroup->mutex) ); + h = pPage->iKey % pCache->nHash; + for(pp=&pCache->apHash[h]; (*pp)!=pPage; pp=&(*pp)->pNext); + *pp = (*pp)->pNext; + + pCache->nPage--; + if( freeFlag ) pcache1FreePage(pPage); +} + +/* +** If there are currently more than nMaxPage pages allocated, try +** to recycle pages to reduce the number allocated to nMaxPage. +*/ +static void pcache1EnforceMaxPage(PCache1 *pCache){ + PGroup *pGroup = pCache->pGroup; + PgHdr1 *p; + assert( sqlite3_mutex_held(pGroup->mutex) ); + while( pGroup->nPurgeable>pGroup->nMaxPage + && (p=pGroup->lru.pLruPrev)->isAnchor==0 + ){ + assert( p->pCache->pGroup==pGroup ); + assert( PAGE_IS_UNPINNED(p) ); + pcache1PinPage(p); + pcache1RemoveFromHash(p, 1); + } + if( pCache->nPage==0 && pCache->pBulk ){ + sqlite3_free(pCache->pBulk); + pCache->pBulk = pCache->pFree = 0; + } +} + +/* +** Discard all pages from cache pCache with a page number (key value) +** greater than or equal to iLimit. Any pinned pages that meet this +** criteria are unpinned before they are discarded. +** +** The PCache mutex must be held when this function is called. +*/ +static void pcache1TruncateUnsafe( + PCache1 *pCache, /* The cache to truncate */ + unsigned int iLimit /* Drop pages with this pgno or larger */ +){ + TESTONLY( int nPage = 0; ) /* To assert pCache->nPage is correct */ + unsigned int h, iStop; + assert( sqlite3_mutex_held(pCache->pGroup->mutex) ); + assert( pCache->iMaxKey >= iLimit ); + assert( pCache->nHash > 0 ); + if( pCache->iMaxKey - iLimit < pCache->nHash ){ + /* If we are just shaving the last few pages off the end of the + ** cache, then there is no point in scanning the entire hash table. + ** Only scan those hash slots that might contain pages that need to + ** be removed. */ + h = iLimit % pCache->nHash; + iStop = pCache->iMaxKey % pCache->nHash; + TESTONLY( nPage = -10; ) /* Disable the pCache->nPage validity check */ + }else{ + /* This is the general case where many pages are being removed. + ** It is necessary to scan the entire hash table */ + h = pCache->nHash/2; + iStop = h - 1; + } + for(;;){ + PgHdr1 **pp; + PgHdr1 *pPage; + assert( hnHash ); + pp = &pCache->apHash[h]; + while( (pPage = *pp)!=0 ){ + if( pPage->iKey>=iLimit ){ + pCache->nPage--; + *pp = pPage->pNext; + if( PAGE_IS_UNPINNED(pPage) ) pcache1PinPage(pPage); + pcache1FreePage(pPage); + }else{ + pp = &pPage->pNext; + TESTONLY( if( nPage>=0 ) nPage++; ) + } + } + if( h==iStop ) break; + h = (h+1) % pCache->nHash; + } + assert( nPage<0 || pCache->nPage==(unsigned)nPage ); +} + +/******************************************************************************/ +/******** sqlite3_pcache Methods **********************************************/ + +/* +** Implementation of the sqlite3_pcache.xInit method. +*/ +static int pcache1Init(void *NotUsed){ + UNUSED_PARAMETER(NotUsed); + assert( pcache1.isInit==0 ); + memset(&pcache1, 0, sizeof(pcache1)); + + + /* + ** The pcache1.separateCache variable is true if each PCache has its own + ** private PGroup (mode-1). pcache1.separateCache is false if the single + ** PGroup in pcache1.grp is used for all page caches (mode-2). + ** + ** * Always use a unified cache (mode-2) if ENABLE_MEMORY_MANAGEMENT + ** + ** * Use a unified cache in single-threaded applications that have + ** configured a start-time buffer for use as page-cache memory using + ** sqlite3_config(SQLITE_CONFIG_PAGECACHE, pBuf, sz, N) with non-NULL + ** pBuf argument. + ** + ** * Otherwise use separate caches (mode-1) + */ +#if defined(SQLITE_ENABLE_MEMORY_MANAGEMENT) + pcache1.separateCache = 0; +#elif SQLITE_THREADSAFE + pcache1.separateCache = sqlite3GlobalConfig.pPage==0 + || sqlite3GlobalConfig.bCoreMutex>0; +#else + pcache1.separateCache = sqlite3GlobalConfig.pPage==0; +#endif + +#if SQLITE_THREADSAFE + if( sqlite3GlobalConfig.bCoreMutex ){ + pcache1.grp.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_LRU); + pcache1.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PMEM); + } +#endif + if( pcache1.separateCache + && sqlite3GlobalConfig.nPage!=0 + && sqlite3GlobalConfig.pPage==0 + ){ + pcache1.nInitPage = sqlite3GlobalConfig.nPage; + }else{ + pcache1.nInitPage = 0; + } + pcache1.grp.mxPinned = 10; + pcache1.isInit = 1; + return SQLITE_OK; +} + +/* +** Implementation of the sqlite3_pcache.xShutdown method. +** Note that the static mutex allocated in xInit does +** not need to be freed. +*/ +static void pcache1Shutdown(void *NotUsed){ + UNUSED_PARAMETER(NotUsed); + assert( pcache1.isInit!=0 ); + memset(&pcache1, 0, sizeof(pcache1)); +} + +/* forward declaration */ +static void pcache1Destroy(sqlite3_pcache *p); + +/* +** Implementation of the sqlite3_pcache.xCreate method. +** +** Allocate a new cache. +*/ +static sqlite3_pcache *pcache1Create(int szPage, int szExtra, int bPurgeable){ + PCache1 *pCache; /* The newly created page cache */ + PGroup *pGroup; /* The group the new page cache will belong to */ + i64 sz; /* Bytes of memory required to allocate the new cache */ + + assert( (szPage & (szPage-1))==0 && szPage>=512 && szPage<=65536 ); + assert( szExtra < 300 ); + + sz = sizeof(PCache1) + sizeof(PGroup)*pcache1.separateCache; + pCache = (PCache1 *)sqlite3MallocZero(sz); + if( pCache ){ + if( pcache1.separateCache ){ + pGroup = (PGroup*)&pCache[1]; + pGroup->mxPinned = 10; + }else{ + pGroup = &pcache1.grp; + } + pcache1EnterMutex(pGroup); + if( pGroup->lru.isAnchor==0 ){ + pGroup->lru.isAnchor = 1; + pGroup->lru.pLruPrev = pGroup->lru.pLruNext = &pGroup->lru; + } + pCache->pGroup = pGroup; + pCache->szPage = szPage; + pCache->szExtra = szExtra; + pCache->szAlloc = szPage + szExtra + ROUND8(sizeof(PgHdr1)); + pCache->bPurgeable = (bPurgeable ? 1 : 0); + pcache1ResizeHash(pCache); + if( bPurgeable ){ + pCache->nMin = 10; + pGroup->nMinPage += pCache->nMin; + pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage; + pCache->pnPurgeable = &pGroup->nPurgeable; + }else{ + pCache->pnPurgeable = &pCache->nPurgeableDummy; + } + pcache1LeaveMutex(pGroup); + if( pCache->nHash==0 ){ + pcache1Destroy((sqlite3_pcache*)pCache); + pCache = 0; + } + } + return (sqlite3_pcache *)pCache; +} + +/* +** Implementation of the sqlite3_pcache.xCachesize method. +** +** Configure the cache_size limit for a cache. +*/ +static void pcache1Cachesize(sqlite3_pcache *p, int nMax){ + PCache1 *pCache = (PCache1 *)p; + u32 n; + assert( nMax>=0 ); + if( pCache->bPurgeable ){ + PGroup *pGroup = pCache->pGroup; + pcache1EnterMutex(pGroup); + n = (u32)nMax; + if( n > 0x7fff0000 - pGroup->nMaxPage + pCache->nMax ){ + n = 0x7fff0000 - pGroup->nMaxPage + pCache->nMax; + } + pGroup->nMaxPage += (n - pCache->nMax); + pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage; + pCache->nMax = n; + pCache->n90pct = pCache->nMax*9/10; + pcache1EnforceMaxPage(pCache); + pcache1LeaveMutex(pGroup); + } +} + +/* +** Implementation of the sqlite3_pcache.xShrink method. +** +** Free up as much memory as possible. +*/ +static void pcache1Shrink(sqlite3_pcache *p){ + PCache1 *pCache = (PCache1*)p; + if( pCache->bPurgeable ){ + PGroup *pGroup = pCache->pGroup; + unsigned int savedMaxPage; + pcache1EnterMutex(pGroup); + savedMaxPage = pGroup->nMaxPage; + pGroup->nMaxPage = 0; + pcache1EnforceMaxPage(pCache); + pGroup->nMaxPage = savedMaxPage; + pcache1LeaveMutex(pGroup); + } +} + +/* +** Implementation of the sqlite3_pcache.xPagecount method. +*/ +static int pcache1Pagecount(sqlite3_pcache *p){ + int n; + PCache1 *pCache = (PCache1*)p; + pcache1EnterMutex(pCache->pGroup); + n = pCache->nPage; + pcache1LeaveMutex(pCache->pGroup); + return n; +} + + +/* +** Implement steps 3, 4, and 5 of the pcache1Fetch() algorithm described +** in the header of the pcache1Fetch() procedure. +** +** This steps are broken out into a separate procedure because they are +** usually not needed, and by avoiding the stack initialization required +** for these steps, the main pcache1Fetch() procedure can run faster. +*/ +static SQLITE_NOINLINE PgHdr1 *pcache1FetchStage2( + PCache1 *pCache, + unsigned int iKey, + int createFlag +){ + unsigned int nPinned; + PGroup *pGroup = pCache->pGroup; + PgHdr1 *pPage = 0; + + /* Step 3: Abort if createFlag is 1 but the cache is nearly full */ + assert( pCache->nPage >= pCache->nRecyclable ); + nPinned = pCache->nPage - pCache->nRecyclable; + assert( pGroup->mxPinned == pGroup->nMaxPage + 10 - pGroup->nMinPage ); + assert( pCache->n90pct == pCache->nMax*9/10 ); + if( createFlag==1 && ( + nPinned>=pGroup->mxPinned + || nPinned>=pCache->n90pct + || (pcache1UnderMemoryPressure(pCache) && pCache->nRecyclablenPage>=pCache->nHash ) pcache1ResizeHash(pCache); + assert( pCache->nHash>0 && pCache->apHash ); + + /* Step 4. Try to recycle a page. */ + if( pCache->bPurgeable + && !pGroup->lru.pLruPrev->isAnchor + && ((pCache->nPage+1>=pCache->nMax) || pcache1UnderMemoryPressure(pCache)) + ){ + PCache1 *pOther; + pPage = pGroup->lru.pLruPrev; + assert( PAGE_IS_UNPINNED(pPage) ); + pcache1RemoveFromHash(pPage, 0); + pcache1PinPage(pPage); + pOther = pPage->pCache; + if( pOther->szAlloc != pCache->szAlloc ){ + pcache1FreePage(pPage); + pPage = 0; + }else{ + pGroup->nPurgeable -= (pOther->bPurgeable - pCache->bPurgeable); + } + } + + /* Step 5. If a usable page buffer has still not been found, + ** attempt to allocate a new one. + */ + if( !pPage ){ + pPage = pcache1AllocPage(pCache, createFlag==1); + } + + if( pPage ){ + unsigned int h = iKey % pCache->nHash; + pCache->nPage++; + pPage->iKey = iKey; + pPage->pNext = pCache->apHash[h]; + pPage->pCache = pCache; + pPage->pLruNext = 0; + /* pPage->pLruPrev = 0; + ** No need to clear pLruPrev since it is not accessed when pLruNext==0 */ + *(void **)pPage->page.pExtra = 0; + pCache->apHash[h] = pPage; + if( iKey>pCache->iMaxKey ){ + pCache->iMaxKey = iKey; + } + } + return pPage; +} + +/* +** Implementation of the sqlite3_pcache.xFetch method. +** +** Fetch a page by key value. +** +** Whether or not a new page may be allocated by this function depends on +** the value of the createFlag argument. 0 means do not allocate a new +** page. 1 means allocate a new page if space is easily available. 2 +** means to try really hard to allocate a new page. +** +** For a non-purgeable cache (a cache used as the storage for an in-memory +** database) there is really no difference between createFlag 1 and 2. So +** the calling function (pcache.c) will never have a createFlag of 1 on +** a non-purgeable cache. +** +** There are three different approaches to obtaining space for a page, +** depending on the value of parameter createFlag (which may be 0, 1 or 2). +** +** 1. Regardless of the value of createFlag, the cache is searched for a +** copy of the requested page. If one is found, it is returned. +** +** 2. If createFlag==0 and the page is not already in the cache, NULL is +** returned. +** +** 3. If createFlag is 1, and the page is not already in the cache, then +** return NULL (do not allocate a new page) if any of the following +** conditions are true: +** +** (a) the number of pages pinned by the cache is greater than +** PCache1.nMax, or +** +** (b) the number of pages pinned by the cache is greater than +** the sum of nMax for all purgeable caches, less the sum of +** nMin for all other purgeable caches, or +** +** 4. If none of the first three conditions apply and the cache is marked +** as purgeable, and if one of the following is true: +** +** (a) The number of pages allocated for the cache is already +** PCache1.nMax, or +** +** (b) The number of pages allocated for all purgeable caches is +** already equal to or greater than the sum of nMax for all +** purgeable caches, +** +** (c) The system is under memory pressure and wants to avoid +** unnecessary pages cache entry allocations +** +** then attempt to recycle a page from the LRU list. If it is the right +** size, return the recycled buffer. Otherwise, free the buffer and +** proceed to step 5. +** +** 5. Otherwise, allocate and return a new page buffer. +** +** There are two versions of this routine. pcache1FetchWithMutex() is +** the general case. pcache1FetchNoMutex() is a faster implementation for +** the common case where pGroup->mutex is NULL. The pcache1Fetch() wrapper +** invokes the appropriate routine. +*/ +static PgHdr1 *pcache1FetchNoMutex( + sqlite3_pcache *p, + unsigned int iKey, + int createFlag +){ + PCache1 *pCache = (PCache1 *)p; + PgHdr1 *pPage = 0; + + /* Step 1: Search the hash table for an existing entry. */ + pPage = pCache->apHash[iKey % pCache->nHash]; + while( pPage && pPage->iKey!=iKey ){ pPage = pPage->pNext; } + + /* Step 2: If the page was found in the hash table, then return it. + ** If the page was not in the hash table and createFlag is 0, abort. + ** Otherwise (page not in hash and createFlag!=0) continue with + ** subsequent steps to try to create the page. */ + if( pPage ){ + if( PAGE_IS_UNPINNED(pPage) ){ + return pcache1PinPage(pPage); + }else{ + return pPage; + } + }else if( createFlag ){ + /* Steps 3, 4, and 5 implemented by this subroutine */ + return pcache1FetchStage2(pCache, iKey, createFlag); + }else{ + return 0; + } +} +#if PCACHE1_MIGHT_USE_GROUP_MUTEX +static PgHdr1 *pcache1FetchWithMutex( + sqlite3_pcache *p, + unsigned int iKey, + int createFlag +){ + PCache1 *pCache = (PCache1 *)p; + PgHdr1 *pPage; + + pcache1EnterMutex(pCache->pGroup); + pPage = pcache1FetchNoMutex(p, iKey, createFlag); + assert( pPage==0 || pCache->iMaxKey>=iKey ); + pcache1LeaveMutex(pCache->pGroup); + return pPage; +} +#endif +static sqlite3_pcache_page *pcache1Fetch( + sqlite3_pcache *p, + unsigned int iKey, + int createFlag +){ +#if PCACHE1_MIGHT_USE_GROUP_MUTEX || defined(SQLITE_DEBUG) + PCache1 *pCache = (PCache1 *)p; +#endif + + assert( offsetof(PgHdr1,page)==0 ); + assert( pCache->bPurgeable || createFlag!=1 ); + assert( pCache->bPurgeable || pCache->nMin==0 ); + assert( pCache->bPurgeable==0 || pCache->nMin==10 ); + assert( pCache->nMin==0 || pCache->bPurgeable ); + assert( pCache->nHash>0 ); +#if PCACHE1_MIGHT_USE_GROUP_MUTEX + if( pCache->pGroup->mutex ){ + return (sqlite3_pcache_page*)pcache1FetchWithMutex(p, iKey, createFlag); + }else +#endif + { + return (sqlite3_pcache_page*)pcache1FetchNoMutex(p, iKey, createFlag); + } +} + + +/* +** Implementation of the sqlite3_pcache.xUnpin method. +** +** Mark a page as unpinned (eligible for asynchronous recycling). +*/ +static void pcache1Unpin( + sqlite3_pcache *p, + sqlite3_pcache_page *pPg, + int reuseUnlikely +){ + PCache1 *pCache = (PCache1 *)p; + PgHdr1 *pPage = (PgHdr1 *)pPg; + PGroup *pGroup = pCache->pGroup; + + assert( pPage->pCache==pCache ); + pcache1EnterMutex(pGroup); + + /* It is an error to call this function if the page is already + ** part of the PGroup LRU list. + */ + assert( pPage->pLruNext==0 ); + assert( PAGE_IS_PINNED(pPage) ); + + if( reuseUnlikely || pGroup->nPurgeable>pGroup->nMaxPage ){ + pcache1RemoveFromHash(pPage, 1); + }else{ + /* Add the page to the PGroup LRU list. */ + PgHdr1 **ppFirst = &pGroup->lru.pLruNext; + pPage->pLruPrev = &pGroup->lru; + (pPage->pLruNext = *ppFirst)->pLruPrev = pPage; + *ppFirst = pPage; + pCache->nRecyclable++; + } + + pcache1LeaveMutex(pCache->pGroup); +} + +/* +** Implementation of the sqlite3_pcache.xRekey method. +*/ +static void pcache1Rekey( + sqlite3_pcache *p, + sqlite3_pcache_page *pPg, + unsigned int iOld, + unsigned int iNew +){ + PCache1 *pCache = (PCache1 *)p; + PgHdr1 *pPage = (PgHdr1 *)pPg; + PgHdr1 **pp; + unsigned int hOld, hNew; + assert( pPage->iKey==iOld ); + assert( pPage->pCache==pCache ); + assert( iOld!=iNew ); /* The page number really is changing */ + + pcache1EnterMutex(pCache->pGroup); + + assert( pcache1FetchNoMutex(p, iOld, 0)==pPage ); /* pPg really is iOld */ + hOld = iOld%pCache->nHash; + pp = &pCache->apHash[hOld]; + while( (*pp)!=pPage ){ + pp = &(*pp)->pNext; + } + *pp = pPage->pNext; + + assert( pcache1FetchNoMutex(p, iNew, 0)==0 ); /* iNew not in cache */ + hNew = iNew%pCache->nHash; + pPage->iKey = iNew; + pPage->pNext = pCache->apHash[hNew]; + pCache->apHash[hNew] = pPage; + if( iNew>pCache->iMaxKey ){ + pCache->iMaxKey = iNew; + } + + pcache1LeaveMutex(pCache->pGroup); +} + +/* +** Implementation of the sqlite3_pcache.xTruncate method. +** +** Discard all unpinned pages in the cache with a page number equal to +** or greater than parameter iLimit. Any pinned pages with a page number +** equal to or greater than iLimit are implicitly unpinned. +*/ +static void pcache1Truncate(sqlite3_pcache *p, unsigned int iLimit){ + PCache1 *pCache = (PCache1 *)p; + pcache1EnterMutex(pCache->pGroup); + if( iLimit<=pCache->iMaxKey ){ + pcache1TruncateUnsafe(pCache, iLimit); + pCache->iMaxKey = iLimit-1; + } + pcache1LeaveMutex(pCache->pGroup); +} + +/* +** Implementation of the sqlite3_pcache.xDestroy method. +** +** Destroy a cache allocated using pcache1Create(). +*/ +static void pcache1Destroy(sqlite3_pcache *p){ + PCache1 *pCache = (PCache1 *)p; + PGroup *pGroup = pCache->pGroup; + assert( pCache->bPurgeable || (pCache->nMax==0 && pCache->nMin==0) ); + pcache1EnterMutex(pGroup); + if( pCache->nPage ) pcache1TruncateUnsafe(pCache, 0); + assert( pGroup->nMaxPage >= pCache->nMax ); + pGroup->nMaxPage -= pCache->nMax; + assert( pGroup->nMinPage >= pCache->nMin ); + pGroup->nMinPage -= pCache->nMin; + pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage; + pcache1EnforceMaxPage(pCache); + pcache1LeaveMutex(pGroup); + sqlite3_free(pCache->pBulk); + sqlite3_free(pCache->apHash); + sqlite3_free(pCache); +} + +/* +** This function is called during initialization (sqlite3_initialize()) to +** install the default pluggable cache module, assuming the user has not +** already provided an alternative. +*/ +SQLITE_PRIVATE void sqlite3PCacheSetDefault(void){ + static const sqlite3_pcache_methods2 defaultMethods = { + 1, /* iVersion */ + 0, /* pArg */ + pcache1Init, /* xInit */ + pcache1Shutdown, /* xShutdown */ + pcache1Create, /* xCreate */ + pcache1Cachesize, /* xCachesize */ + pcache1Pagecount, /* xPagecount */ + pcache1Fetch, /* xFetch */ + pcache1Unpin, /* xUnpin */ + pcache1Rekey, /* xRekey */ + pcache1Truncate, /* xTruncate */ + pcache1Destroy, /* xDestroy */ + pcache1Shrink /* xShrink */ + }; + sqlite3_config(SQLITE_CONFIG_PCACHE2, &defaultMethods); +} + +/* +** Return the size of the header on each page of this PCACHE implementation. +*/ +SQLITE_PRIVATE int sqlite3HeaderSizePcache1(void){ return ROUND8(sizeof(PgHdr1)); } + +/* +** Return the global mutex used by this PCACHE implementation. The +** sqlite3_status() routine needs access to this mutex. +*/ +SQLITE_PRIVATE sqlite3_mutex *sqlite3Pcache1Mutex(void){ + return pcache1.mutex; +} + +#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT +/* +** This function is called to free superfluous dynamically allocated memory +** held by the pager system. Memory in use by any SQLite pager allocated +** by the current thread may be sqlite3_free()ed. +** +** nReq is the number of bytes of memory required. Once this much has +** been released, the function returns. The return value is the total number +** of bytes of memory released. +*/ +SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int nReq){ + int nFree = 0; + assert( sqlite3_mutex_notheld(pcache1.grp.mutex) ); + assert( sqlite3_mutex_notheld(pcache1.mutex) ); + if( sqlite3GlobalConfig.pPage==0 ){ + PgHdr1 *p; + pcache1EnterMutex(&pcache1.grp); + while( (nReq<0 || nFreeisAnchor==0 + ){ + nFree += pcache1MemSize(p->page.pBuf); + assert( PAGE_IS_UNPINNED(p) ); + pcache1PinPage(p); + pcache1RemoveFromHash(p, 1); + } + pcache1LeaveMutex(&pcache1.grp); + } + return nFree; +} +#endif /* SQLITE_ENABLE_MEMORY_MANAGEMENT */ + +#ifdef SQLITE_TEST +/* +** This function is used by test procedures to inspect the internal state +** of the global cache. +*/ +SQLITE_PRIVATE void sqlite3PcacheStats( + int *pnCurrent, /* OUT: Total number of pages cached */ + int *pnMax, /* OUT: Global maximum cache size */ + int *pnMin, /* OUT: Sum of PCache1.nMin for purgeable caches */ + int *pnRecyclable /* OUT: Total number of pages available for recycling */ +){ + PgHdr1 *p; + int nRecyclable = 0; + for(p=pcache1.grp.lru.pLruNext; p && !p->isAnchor; p=p->pLruNext){ + assert( PAGE_IS_UNPINNED(p) ); + nRecyclable++; + } + *pnCurrent = pcache1.grp.nPurgeable; + *pnMax = (int)pcache1.grp.nMaxPage; + *pnMin = (int)pcache1.grp.nMinPage; + *pnRecyclable = nRecyclable; +} +#endif + +/************** End of pcache1.c *********************************************/ +/************** Begin file rowset.c ******************************************/ +/* +** 2008 December 3 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This module implements an object we call a "RowSet". +** +** The RowSet object is a collection of rowids. Rowids +** are inserted into the RowSet in an arbitrary order. Inserts +** can be intermixed with tests to see if a given rowid has been +** previously inserted into the RowSet. +** +** After all inserts are finished, it is possible to extract the +** elements of the RowSet in sorted order. Once this extraction +** process has started, no new elements may be inserted. +** +** Hence, the primitive operations for a RowSet are: +** +** CREATE +** INSERT +** TEST +** SMALLEST +** DESTROY +** +** The CREATE and DESTROY primitives are the constructor and destructor, +** obviously. The INSERT primitive adds a new element to the RowSet. +** TEST checks to see if an element is already in the RowSet. SMALLEST +** extracts the least value from the RowSet. +** +** The INSERT primitive might allocate additional memory. Memory is +** allocated in chunks so most INSERTs do no allocation. There is an +** upper bound on the size of allocated memory. No memory is freed +** until DESTROY. +** +** The TEST primitive includes a "batch" number. The TEST primitive +** will only see elements that were inserted before the last change +** in the batch number. In other words, if an INSERT occurs between +** two TESTs where the TESTs have the same batch number, then the +** value added by the INSERT will not be visible to the second TEST. +** The initial batch number is zero, so if the very first TEST contains +** a non-zero batch number, it will see all prior INSERTs. +** +** No INSERTs may occurs after a SMALLEST. An assertion will fail if +** that is attempted. +** +** The cost of an INSERT is roughly constant. (Sometimes new memory +** has to be allocated on an INSERT.) The cost of a TEST with a new +** batch number is O(NlogN) where N is the number of elements in the RowSet. +** The cost of a TEST using the same batch number is O(logN). The cost +** of the first SMALLEST is O(NlogN). Second and subsequent SMALLEST +** primitives are constant time. The cost of DESTROY is O(N). +** +** TEST and SMALLEST may not be used by the same RowSet. This used to +** be possible, but the feature was not used, so it was removed in order +** to simplify the code. +*/ +/* #include "sqliteInt.h" */ + + +/* +** Target size for allocation chunks. +*/ +#define ROWSET_ALLOCATION_SIZE 1024 + +/* +** The number of rowset entries per allocation chunk. +*/ +#define ROWSET_ENTRY_PER_CHUNK \ + ((ROWSET_ALLOCATION_SIZE-8)/sizeof(struct RowSetEntry)) + +/* +** Each entry in a RowSet is an instance of the following object. +** +** This same object is reused to store a linked list of trees of RowSetEntry +** objects. In that alternative use, pRight points to the next entry +** in the list, pLeft points to the tree, and v is unused. The +** RowSet.pForest value points to the head of this forest list. +*/ +struct RowSetEntry { + i64 v; /* ROWID value for this entry */ + struct RowSetEntry *pRight; /* Right subtree (larger entries) or list */ + struct RowSetEntry *pLeft; /* Left subtree (smaller entries) */ +}; + +/* +** RowSetEntry objects are allocated in large chunks (instances of the +** following structure) to reduce memory allocation overhead. The +** chunks are kept on a linked list so that they can be deallocated +** when the RowSet is destroyed. +*/ +struct RowSetChunk { + struct RowSetChunk *pNextChunk; /* Next chunk on list of them all */ + struct RowSetEntry aEntry[ROWSET_ENTRY_PER_CHUNK]; /* Allocated entries */ +}; + +/* +** A RowSet in an instance of the following structure. +** +** A typedef of this structure if found in sqliteInt.h. +*/ +struct RowSet { + struct RowSetChunk *pChunk; /* List of all chunk allocations */ + sqlite3 *db; /* The database connection */ + struct RowSetEntry *pEntry; /* List of entries using pRight */ + struct RowSetEntry *pLast; /* Last entry on the pEntry list */ + struct RowSetEntry *pFresh; /* Source of new entry objects */ + struct RowSetEntry *pForest; /* List of binary trees of entries */ + u16 nFresh; /* Number of objects on pFresh */ + u16 rsFlags; /* Various flags */ + int iBatch; /* Current insert batch */ +}; + +/* +** Allowed values for RowSet.rsFlags +*/ +#define ROWSET_SORTED 0x01 /* True if RowSet.pEntry is sorted */ +#define ROWSET_NEXT 0x02 /* True if sqlite3RowSetNext() has been called */ + +/* +** Allocate a RowSet object. Return NULL if a memory allocation +** error occurs. +*/ +SQLITE_PRIVATE RowSet *sqlite3RowSetInit(sqlite3 *db){ + RowSet *p = sqlite3DbMallocRawNN(db, sizeof(*p)); + if( p ){ + int N = sqlite3DbMallocSize(db, p); + p->pChunk = 0; + p->db = db; + p->pEntry = 0; + p->pLast = 0; + p->pForest = 0; + p->pFresh = (struct RowSetEntry*)(ROUND8(sizeof(*p)) + (char*)p); + p->nFresh = (u16)((N - ROUND8(sizeof(*p)))/sizeof(struct RowSetEntry)); + p->rsFlags = ROWSET_SORTED; + p->iBatch = 0; + } + return p; +} + +/* +** Deallocate all chunks from a RowSet. This frees all memory that +** the RowSet has allocated over its lifetime. This routine is +** the destructor for the RowSet. +*/ +SQLITE_PRIVATE void sqlite3RowSetClear(void *pArg){ + RowSet *p = (RowSet*)pArg; + struct RowSetChunk *pChunk, *pNextChunk; + for(pChunk=p->pChunk; pChunk; pChunk = pNextChunk){ + pNextChunk = pChunk->pNextChunk; + sqlite3DbFree(p->db, pChunk); + } + p->pChunk = 0; + p->nFresh = 0; + p->pEntry = 0; + p->pLast = 0; + p->pForest = 0; + p->rsFlags = ROWSET_SORTED; +} + +/* +** Deallocate all chunks from a RowSet. This frees all memory that +** the RowSet has allocated over its lifetime. This routine is +** the destructor for the RowSet. +*/ +SQLITE_PRIVATE void sqlite3RowSetDelete(void *pArg){ + sqlite3RowSetClear(pArg); + sqlite3DbFree(((RowSet*)pArg)->db, pArg); +} + +/* +** Allocate a new RowSetEntry object that is associated with the +** given RowSet. Return a pointer to the new and completely uninitialized +** object. +** +** In an OOM situation, the RowSet.db->mallocFailed flag is set and this +** routine returns NULL. +*/ +static struct RowSetEntry *rowSetEntryAlloc(RowSet *p){ + assert( p!=0 ); + if( p->nFresh==0 ){ /*OPTIMIZATION-IF-FALSE*/ + /* We could allocate a fresh RowSetEntry each time one is needed, but it + ** is more efficient to pull a preallocated entry from the pool */ + struct RowSetChunk *pNew; + pNew = sqlite3DbMallocRawNN(p->db, sizeof(*pNew)); + if( pNew==0 ){ + return 0; + } + pNew->pNextChunk = p->pChunk; + p->pChunk = pNew; + p->pFresh = pNew->aEntry; + p->nFresh = ROWSET_ENTRY_PER_CHUNK; + } + p->nFresh--; + return p->pFresh++; +} + +/* +** Insert a new value into a RowSet. +** +** The mallocFailed flag of the database connection is set if a +** memory allocation fails. +*/ +SQLITE_PRIVATE void sqlite3RowSetInsert(RowSet *p, i64 rowid){ + struct RowSetEntry *pEntry; /* The new entry */ + struct RowSetEntry *pLast; /* The last prior entry */ + + /* This routine is never called after sqlite3RowSetNext() */ + assert( p!=0 && (p->rsFlags & ROWSET_NEXT)==0 ); + + pEntry = rowSetEntryAlloc(p); + if( pEntry==0 ) return; + pEntry->v = rowid; + pEntry->pRight = 0; + pLast = p->pLast; + if( pLast ){ + if( rowid<=pLast->v ){ /*OPTIMIZATION-IF-FALSE*/ + /* Avoid unnecessary sorts by preserving the ROWSET_SORTED flags + ** where possible */ + p->rsFlags &= ~ROWSET_SORTED; + } + pLast->pRight = pEntry; + }else{ + p->pEntry = pEntry; + } + p->pLast = pEntry; +} + +/* +** Merge two lists of RowSetEntry objects. Remove duplicates. +** +** The input lists are connected via pRight pointers and are +** assumed to each already be in sorted order. +*/ +static struct RowSetEntry *rowSetEntryMerge( + struct RowSetEntry *pA, /* First sorted list to be merged */ + struct RowSetEntry *pB /* Second sorted list to be merged */ +){ + struct RowSetEntry head; + struct RowSetEntry *pTail; + + pTail = &head; + assert( pA!=0 && pB!=0 ); + for(;;){ + assert( pA->pRight==0 || pA->v<=pA->pRight->v ); + assert( pB->pRight==0 || pB->v<=pB->pRight->v ); + if( pA->v<=pB->v ){ + if( pA->vv ) pTail = pTail->pRight = pA; + pA = pA->pRight; + if( pA==0 ){ + pTail->pRight = pB; + break; + } + }else{ + pTail = pTail->pRight = pB; + pB = pB->pRight; + if( pB==0 ){ + pTail->pRight = pA; + break; + } + } + } + return head.pRight; +} + +/* +** Sort all elements on the list of RowSetEntry objects into order of +** increasing v. +*/ +static struct RowSetEntry *rowSetEntrySort(struct RowSetEntry *pIn){ + unsigned int i; + struct RowSetEntry *pNext, *aBucket[40]; + + memset(aBucket, 0, sizeof(aBucket)); + while( pIn ){ + pNext = pIn->pRight; + pIn->pRight = 0; + for(i=0; aBucket[i]; i++){ + pIn = rowSetEntryMerge(aBucket[i], pIn); + aBucket[i] = 0; + } + aBucket[i] = pIn; + pIn = pNext; + } + pIn = aBucket[0]; + for(i=1; ipLeft ){ + struct RowSetEntry *p; + rowSetTreeToList(pIn->pLeft, ppFirst, &p); + p->pRight = pIn; + }else{ + *ppFirst = pIn; + } + if( pIn->pRight ){ + rowSetTreeToList(pIn->pRight, &pIn->pRight, ppLast); + }else{ + *ppLast = pIn; + } + assert( (*ppLast)->pRight==0 ); +} + + +/* +** Convert a sorted list of elements (connected by pRight) into a binary +** tree with depth of iDepth. A depth of 1 means the tree contains a single +** node taken from the head of *ppList. A depth of 2 means a tree with +** three nodes. And so forth. +** +** Use as many entries from the input list as required and update the +** *ppList to point to the unused elements of the list. If the input +** list contains too few elements, then construct an incomplete tree +** and leave *ppList set to NULL. +** +** Return a pointer to the root of the constructed binary tree. +*/ +static struct RowSetEntry *rowSetNDeepTree( + struct RowSetEntry **ppList, + int iDepth +){ + struct RowSetEntry *p; /* Root of the new tree */ + struct RowSetEntry *pLeft; /* Left subtree */ + if( *ppList==0 ){ /*OPTIMIZATION-IF-TRUE*/ + /* Prevent unnecessary deep recursion when we run out of entries */ + return 0; + } + if( iDepth>1 ){ /*OPTIMIZATION-IF-TRUE*/ + /* This branch causes a *balanced* tree to be generated. A valid tree + ** is still generated without this branch, but the tree is wildly + ** unbalanced and inefficient. */ + pLeft = rowSetNDeepTree(ppList, iDepth-1); + p = *ppList; + if( p==0 ){ /*OPTIMIZATION-IF-FALSE*/ + /* It is safe to always return here, but the resulting tree + ** would be unbalanced */ + return pLeft; + } + p->pLeft = pLeft; + *ppList = p->pRight; + p->pRight = rowSetNDeepTree(ppList, iDepth-1); + }else{ + p = *ppList; + *ppList = p->pRight; + p->pLeft = p->pRight = 0; + } + return p; +} + +/* +** Convert a sorted list of elements into a binary tree. Make the tree +** as deep as it needs to be in order to contain the entire list. +*/ +static struct RowSetEntry *rowSetListToTree(struct RowSetEntry *pList){ + int iDepth; /* Depth of the tree so far */ + struct RowSetEntry *p; /* Current tree root */ + struct RowSetEntry *pLeft; /* Left subtree */ + + assert( pList!=0 ); + p = pList; + pList = p->pRight; + p->pLeft = p->pRight = 0; + for(iDepth=1; pList; iDepth++){ + pLeft = p; + p = pList; + pList = p->pRight; + p->pLeft = pLeft; + p->pRight = rowSetNDeepTree(&pList, iDepth); + } + return p; +} + +/* +** Extract the smallest element from the RowSet. +** Write the element into *pRowid. Return 1 on success. Return +** 0 if the RowSet is already empty. +** +** After this routine has been called, the sqlite3RowSetInsert() +** routine may not be called again. +** +** This routine may not be called after sqlite3RowSetTest() has +** been used. Older versions of RowSet allowed that, but as the +** capability was not used by the code generator, it was removed +** for code economy. +*/ +SQLITE_PRIVATE int sqlite3RowSetNext(RowSet *p, i64 *pRowid){ + assert( p!=0 ); + assert( p->pForest==0 ); /* Cannot be used with sqlite3RowSetText() */ + + /* Merge the forest into a single sorted list on first call */ + if( (p->rsFlags & ROWSET_NEXT)==0 ){ /*OPTIMIZATION-IF-FALSE*/ + if( (p->rsFlags & ROWSET_SORTED)==0 ){ /*OPTIMIZATION-IF-FALSE*/ + p->pEntry = rowSetEntrySort(p->pEntry); + } + p->rsFlags |= ROWSET_SORTED|ROWSET_NEXT; + } + + /* Return the next entry on the list */ + if( p->pEntry ){ + *pRowid = p->pEntry->v; + p->pEntry = p->pEntry->pRight; + if( p->pEntry==0 ){ /*OPTIMIZATION-IF-TRUE*/ + /* Free memory immediately, rather than waiting on sqlite3_finalize() */ + sqlite3RowSetClear(p); + } + return 1; + }else{ + return 0; + } +} + +/* +** Check to see if element iRowid was inserted into the rowset as +** part of any insert batch prior to iBatch. Return 1 or 0. +** +** If this is the first test of a new batch and if there exist entries +** on pRowSet->pEntry, then sort those entries into the forest at +** pRowSet->pForest so that they can be tested. +*/ +SQLITE_PRIVATE int sqlite3RowSetTest(RowSet *pRowSet, int iBatch, sqlite3_int64 iRowid){ + struct RowSetEntry *p, *pTree; + + /* This routine is never called after sqlite3RowSetNext() */ + assert( pRowSet!=0 && (pRowSet->rsFlags & ROWSET_NEXT)==0 ); + + /* Sort entries into the forest on the first test of a new batch. + ** To save unnecessary work, only do this when the batch number changes. + */ + if( iBatch!=pRowSet->iBatch ){ /*OPTIMIZATION-IF-FALSE*/ + p = pRowSet->pEntry; + if( p ){ + struct RowSetEntry **ppPrevTree = &pRowSet->pForest; + if( (pRowSet->rsFlags & ROWSET_SORTED)==0 ){ /*OPTIMIZATION-IF-FALSE*/ + /* Only sort the current set of entries if they need it */ + p = rowSetEntrySort(p); + } + for(pTree = pRowSet->pForest; pTree; pTree=pTree->pRight){ + ppPrevTree = &pTree->pRight; + if( pTree->pLeft==0 ){ + pTree->pLeft = rowSetListToTree(p); + break; + }else{ + struct RowSetEntry *pAux, *pTail; + rowSetTreeToList(pTree->pLeft, &pAux, &pTail); + pTree->pLeft = 0; + p = rowSetEntryMerge(pAux, p); + } + } + if( pTree==0 ){ + *ppPrevTree = pTree = rowSetEntryAlloc(pRowSet); + if( pTree ){ + pTree->v = 0; + pTree->pRight = 0; + pTree->pLeft = rowSetListToTree(p); + } + } + pRowSet->pEntry = 0; + pRowSet->pLast = 0; + pRowSet->rsFlags |= ROWSET_SORTED; + } + pRowSet->iBatch = iBatch; + } + + /* Test to see if the iRowid value appears anywhere in the forest. + ** Return 1 if it does and 0 if not. + */ + for(pTree = pRowSet->pForest; pTree; pTree=pTree->pRight){ + p = pTree->pLeft; + while( p ){ + if( p->vpRight; + }else if( p->v>iRowid ){ + p = p->pLeft; + }else{ + return 1; + } + } + } + return 0; +} + +/************** End of rowset.c **********************************************/ +/************** Begin file pager.c *******************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This is the implementation of the page cache subsystem or "pager". +** +** The pager is used to access a database disk file. It implements +** atomic commit and rollback through the use of a journal file that +** is separate from the database file. The pager also implements file +** locking to prevent two processes from writing the same database +** file simultaneously, or one process from reading the database while +** another is writing. +*/ +#ifndef SQLITE_OMIT_DISKIO +/* #include "sqliteInt.h" */ +/************** Include wal.h in the middle of pager.c ***********************/ +/************** Begin file wal.h *********************************************/ +/* +** 2010 February 1 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This header file defines the interface to the write-ahead logging +** system. Refer to the comments below and the header comment attached to +** the implementation of each function in log.c for further details. +*/ + +#ifndef SQLITE_WAL_H +#define SQLITE_WAL_H + +/* #include "sqliteInt.h" */ + +/* Macros for extracting appropriate sync flags for either transaction +** commits (WAL_SYNC_FLAGS(X)) or for checkpoint ops (CKPT_SYNC_FLAGS(X)): +*/ +#define WAL_SYNC_FLAGS(X) ((X)&0x03) +#define CKPT_SYNC_FLAGS(X) (((X)>>2)&0x03) + +#ifdef SQLITE_OMIT_WAL +# define sqlite3WalOpen(x,y,z) 0 +# define sqlite3WalLimit(x,y) +# define sqlite3WalClose(v,w,x,y,z) 0 +# define sqlite3WalBeginReadTransaction(y,z) 0 +# define sqlite3WalEndReadTransaction(z) +# define sqlite3WalDbsize(y) 0 +# define sqlite3WalBeginWriteTransaction(y) 0 +# define sqlite3WalEndWriteTransaction(x) 0 +# define sqlite3WalUndo(x,y,z) 0 +# define sqlite3WalSavepoint(y,z) +# define sqlite3WalSavepointUndo(y,z) 0 +# define sqlite3WalFrames(u,v,w,x,y,z) 0 +# define sqlite3WalCheckpoint(q,r,s,t,u,v,w,x,y,z) 0 +# define sqlite3WalCallback(z) 0 +# define sqlite3WalExclusiveMode(y,z) 0 +# define sqlite3WalHeapMemory(z) 0 +# define sqlite3WalFramesize(z) 0 +# define sqlite3WalFindFrame(x,y,z) 0 +# define sqlite3WalFile(x) 0 +# undef SQLITE_USE_SEH +#else + +#define WAL_SAVEPOINT_NDATA 4 + +/* Connection to a write-ahead log (WAL) file. +** There is one object of this type for each pager. +*/ +typedef struct Wal Wal; + +/* Open and close a connection to a write-ahead log. */ +SQLITE_PRIVATE int sqlite3WalOpen(sqlite3_vfs*, sqlite3_file*, const char *, int, i64, Wal**); +SQLITE_PRIVATE int sqlite3WalClose(Wal *pWal, sqlite3*, int sync_flags, int, u8 *); + +/* Set the limiting size of a WAL file. */ +SQLITE_PRIVATE void sqlite3WalLimit(Wal*, i64); + +/* Used by readers to open (lock) and close (unlock) a snapshot. A +** snapshot is like a read-transaction. It is the state of the database +** at an instant in time. sqlite3WalOpenSnapshot gets a read lock and +** preserves the current state even if the other threads or processes +** write to or checkpoint the WAL. sqlite3WalCloseSnapshot() closes the +** transaction and releases the lock. +*/ +SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *); +SQLITE_PRIVATE void sqlite3WalEndReadTransaction(Wal *pWal); + +/* Read a page from the write-ahead log, if it is present. */ +SQLITE_PRIVATE int sqlite3WalFindFrame(Wal *, Pgno, u32 *); +SQLITE_PRIVATE int sqlite3WalReadFrame(Wal *, u32, int, u8 *); + +/* If the WAL is not empty, return the size of the database. */ +SQLITE_PRIVATE Pgno sqlite3WalDbsize(Wal *pWal); + +/* Obtain or release the WRITER lock. */ +SQLITE_PRIVATE int sqlite3WalBeginWriteTransaction(Wal *pWal); +SQLITE_PRIVATE int sqlite3WalEndWriteTransaction(Wal *pWal); + +/* Undo any frames written (but not committed) to the log */ +SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *pUndoCtx); + +/* Return an integer that records the current (uncommitted) write +** position in the WAL */ +SQLITE_PRIVATE void sqlite3WalSavepoint(Wal *pWal, u32 *aWalData); + +/* Move the write position of the WAL back to iFrame. Called in +** response to a ROLLBACK TO command. */ +SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData); + +/* Write a frame or frames to the log. */ +SQLITE_PRIVATE int sqlite3WalFrames(Wal *pWal, int, PgHdr *, Pgno, int, int); + +/* Copy pages from the log to the database file */ +SQLITE_PRIVATE int sqlite3WalCheckpoint( + Wal *pWal, /* Write-ahead log connection */ + sqlite3 *db, /* Check this handle's interrupt flag */ + int eMode, /* One of PASSIVE, FULL and RESTART */ + int (*xBusy)(void*), /* Function to call when busy */ + void *pBusyArg, /* Context argument for xBusyHandler */ + int sync_flags, /* Flags to sync db file with (or 0) */ + int nBuf, /* Size of buffer nBuf */ + u8 *zBuf, /* Temporary buffer to use */ + int *pnLog, /* OUT: Number of frames in WAL */ + int *pnCkpt /* OUT: Number of backfilled frames in WAL */ +); + +/* Return the value to pass to a sqlite3_wal_hook callback, the +** number of frames in the WAL at the point of the last commit since +** sqlite3WalCallback() was called. If no commits have occurred since +** the last call, then return 0. +*/ +SQLITE_PRIVATE int sqlite3WalCallback(Wal *pWal); + +/* Tell the wal layer that an EXCLUSIVE lock has been obtained (or released) +** by the pager layer on the database file. +*/ +SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op); + +/* Return true if the argument is non-NULL and the WAL module is using +** heap-memory for the wal-index. Otherwise, if the argument is NULL or the +** WAL module is using shared-memory, return false. +*/ +SQLITE_PRIVATE int sqlite3WalHeapMemory(Wal *pWal); + +#ifdef SQLITE_ENABLE_SNAPSHOT +SQLITE_PRIVATE int sqlite3WalSnapshotGet(Wal *pWal, sqlite3_snapshot **ppSnapshot); +SQLITE_PRIVATE void sqlite3WalSnapshotOpen(Wal *pWal, sqlite3_snapshot *pSnapshot); +SQLITE_PRIVATE int sqlite3WalSnapshotRecover(Wal *pWal); +SQLITE_PRIVATE int sqlite3WalSnapshotCheck(Wal *pWal, sqlite3_snapshot *pSnapshot); +SQLITE_PRIVATE void sqlite3WalSnapshotUnlock(Wal *pWal); +#endif + +#ifdef SQLITE_ENABLE_ZIPVFS +/* If the WAL file is not empty, return the number of bytes of content +** stored in each frame (i.e. the db page-size when the WAL was created). +*/ +SQLITE_PRIVATE int sqlite3WalFramesize(Wal *pWal); +#endif + +/* Return the sqlite3_file object for the WAL file */ +SQLITE_PRIVATE sqlite3_file *sqlite3WalFile(Wal *pWal); + +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT +SQLITE_PRIVATE int sqlite3WalWriteLock(Wal *pWal, int bLock); +SQLITE_PRIVATE void sqlite3WalDb(Wal *pWal, sqlite3 *db); +#endif + +#ifdef SQLITE_USE_SEH +SQLITE_PRIVATE int sqlite3WalSystemErrno(Wal*); +#endif + +#endif /* ifndef SQLITE_OMIT_WAL */ +#endif /* SQLITE_WAL_H */ + +/************** End of wal.h *************************************************/ +/************** Continuing where we left off in pager.c **********************/ + + +/******************* NOTES ON THE DESIGN OF THE PAGER ************************ +** +** This comment block describes invariants that hold when using a rollback +** journal. These invariants do not apply for journal_mode=WAL, +** journal_mode=MEMORY, or journal_mode=OFF. +** +** Within this comment block, a page is deemed to have been synced +** automatically as soon as it is written when PRAGMA synchronous=OFF. +** Otherwise, the page is not synced until the xSync method of the VFS +** is called successfully on the file containing the page. +** +** Definition: A page of the database file is said to be "overwriteable" if +** one or more of the following are true about the page: +** +** (a) The original content of the page as it was at the beginning of +** the transaction has been written into the rollback journal and +** synced. +** +** (b) The page was a freelist leaf page at the start of the transaction. +** +** (c) The page number is greater than the largest page that existed in +** the database file at the start of the transaction. +** +** (1) A page of the database file is never overwritten unless one of the +** following are true: +** +** (a) The page and all other pages on the same sector are overwriteable. +** +** (b) The atomic page write optimization is enabled, and the entire +** transaction other than the update of the transaction sequence +** number consists of a single page change. +** +** (2) The content of a page written into the rollback journal exactly matches +** both the content in the database when the rollback journal was written +** and the content in the database at the beginning of the current +** transaction. +** +** (3) Writes to the database file are an integer multiple of the page size +** in length and are aligned on a page boundary. +** +** (4) Reads from the database file are either aligned on a page boundary and +** an integer multiple of the page size in length or are taken from the +** first 100 bytes of the database file. +** +** (5) All writes to the database file are synced prior to the rollback journal +** being deleted, truncated, or zeroed. +** +** (6) If a super-journal file is used, then all writes to the database file +** are synced prior to the super-journal being deleted. +** +** Definition: Two databases (or the same database at two points it time) +** are said to be "logically equivalent" if they give the same answer to +** all queries. Note in particular the content of freelist leaf +** pages can be changed arbitrarily without affecting the logical equivalence +** of the database. +** +** (7) At any time, if any subset, including the empty set and the total set, +** of the unsynced changes to a rollback journal are removed and the +** journal is rolled back, the resulting database file will be logically +** equivalent to the database file at the beginning of the transaction. +** +** (8) When a transaction is rolled back, the xTruncate method of the VFS +** is called to restore the database file to the same size it was at +** the beginning of the transaction. (In some VFSes, the xTruncate +** method is a no-op, but that does not change the fact the SQLite will +** invoke it.) +** +** (9) Whenever the database file is modified, at least one bit in the range +** of bytes from 24 through 39 inclusive will be changed prior to releasing +** the EXCLUSIVE lock, thus signaling other connections on the same +** database to flush their caches. +** +** (10) The pattern of bits in bytes 24 through 39 shall not repeat in less +** than one billion transactions. +** +** (11) A database file is well-formed at the beginning and at the conclusion +** of every transaction. +** +** (12) An EXCLUSIVE lock is held on the database file when writing to +** the database file. +** +** (13) A SHARED lock is held on the database file while reading any +** content out of the database file. +** +******************************************************************************/ + +/* +** Macros for troubleshooting. Normally turned off +*/ +#if 0 +int sqlite3PagerTrace=1; /* True to enable tracing */ +#define sqlite3DebugPrintf printf +#define PAGERTRACE(X) if( sqlite3PagerTrace ){ sqlite3DebugPrintf X; } +#else +#define PAGERTRACE(X) +#endif + +/* +** The following two macros are used within the PAGERTRACE() macros above +** to print out file-descriptors. +** +** PAGERID() takes a pointer to a Pager struct as its argument. The +** associated file-descriptor is returned. FILEHANDLEID() takes an sqlite3_file +** struct as its argument. +*/ +#define PAGERID(p) (SQLITE_PTR_TO_INT(p->fd)) +#define FILEHANDLEID(fd) (SQLITE_PTR_TO_INT(fd)) + +/* +** The Pager.eState variable stores the current 'state' of a pager. A +** pager may be in any one of the seven states shown in the following +** state diagram. +** +** OPEN <------+------+ +** | | | +** V | | +** +---------> READER-------+ | +** | | | +** | V | +** |<-------WRITER_LOCKED------> ERROR +** | | ^ +** | V | +** |<------WRITER_CACHEMOD-------->| +** | | | +** | V | +** |<-------WRITER_DBMOD---------->| +** | | | +** | V | +** +<------WRITER_FINISHED-------->+ +** +** +** List of state transitions and the C [function] that performs each: +** +** OPEN -> READER [sqlite3PagerSharedLock] +** READER -> OPEN [pager_unlock] +** +** READER -> WRITER_LOCKED [sqlite3PagerBegin] +** WRITER_LOCKED -> WRITER_CACHEMOD [pager_open_journal] +** WRITER_CACHEMOD -> WRITER_DBMOD [syncJournal] +** WRITER_DBMOD -> WRITER_FINISHED [sqlite3PagerCommitPhaseOne] +** WRITER_*** -> READER [pager_end_transaction] +** +** WRITER_*** -> ERROR [pager_error] +** ERROR -> OPEN [pager_unlock] +** +** +** OPEN: +** +** The pager starts up in this state. Nothing is guaranteed in this +** state - the file may or may not be locked and the database size is +** unknown. The database may not be read or written. +** +** * No read or write transaction is active. +** * Any lock, or no lock at all, may be held on the database file. +** * The dbSize, dbOrigSize and dbFileSize variables may not be trusted. +** +** READER: +** +** In this state all the requirements for reading the database in +** rollback (non-WAL) mode are met. Unless the pager is (or recently +** was) in exclusive-locking mode, a user-level read transaction is +** open. The database size is known in this state. +** +** A connection running with locking_mode=normal enters this state when +** it opens a read-transaction on the database and returns to state +** OPEN after the read-transaction is completed. However a connection +** running in locking_mode=exclusive (including temp databases) remains in +** this state even after the read-transaction is closed. The only way +** a locking_mode=exclusive connection can transition from READER to OPEN +** is via the ERROR state (see below). +** +** * A read transaction may be active (but a write-transaction cannot). +** * A SHARED or greater lock is held on the database file. +** * The dbSize variable may be trusted (even if a user-level read +** transaction is not active). The dbOrigSize and dbFileSize variables +** may not be trusted at this point. +** * If the database is a WAL database, then the WAL connection is open. +** * Even if a read-transaction is not open, it is guaranteed that +** there is no hot-journal in the file-system. +** +** WRITER_LOCKED: +** +** The pager moves to this state from READER when a write-transaction +** is first opened on the database. In WRITER_LOCKED state, all locks +** required to start a write-transaction are held, but no actual +** modifications to the cache or database have taken place. +** +** In rollback mode, a RESERVED or (if the transaction was opened with +** BEGIN EXCLUSIVE) EXCLUSIVE lock is obtained on the database file when +** moving to this state, but the journal file is not written to or opened +** to in this state. If the transaction is committed or rolled back while +** in WRITER_LOCKED state, all that is required is to unlock the database +** file. +** +** IN WAL mode, WalBeginWriteTransaction() is called to lock the log file. +** If the connection is running with locking_mode=exclusive, an attempt +** is made to obtain an EXCLUSIVE lock on the database file. +** +** * A write transaction is active. +** * If the connection is open in rollback-mode, a RESERVED or greater +** lock is held on the database file. +** * If the connection is open in WAL-mode, a WAL write transaction +** is open (i.e. sqlite3WalBeginWriteTransaction() has been successfully +** called). +** * The dbSize, dbOrigSize and dbFileSize variables are all valid. +** * The contents of the pager cache have not been modified. +** * The journal file may or may not be open. +** * Nothing (not even the first header) has been written to the journal. +** +** WRITER_CACHEMOD: +** +** A pager moves from WRITER_LOCKED state to this state when a page is +** first modified by the upper layer. In rollback mode the journal file +** is opened (if it is not already open) and a header written to the +** start of it. The database file on disk has not been modified. +** +** * A write transaction is active. +** * A RESERVED or greater lock is held on the database file. +** * The journal file is open and the first header has been written +** to it, but the header has not been synced to disk. +** * The contents of the page cache have been modified. +** +** WRITER_DBMOD: +** +** The pager transitions from WRITER_CACHEMOD into WRITER_DBMOD state +** when it modifies the contents of the database file. WAL connections +** never enter this state (since they do not modify the database file, +** just the log file). +** +** * A write transaction is active. +** * An EXCLUSIVE or greater lock is held on the database file. +** * The journal file is open and the first header has been written +** and synced to disk. +** * The contents of the page cache have been modified (and possibly +** written to disk). +** +** WRITER_FINISHED: +** +** It is not possible for a WAL connection to enter this state. +** +** A rollback-mode pager changes to WRITER_FINISHED state from WRITER_DBMOD +** state after the entire transaction has been successfully written into the +** database file. In this state the transaction may be committed simply +** by finalizing the journal file. Once in WRITER_FINISHED state, it is +** not possible to modify the database further. At this point, the upper +** layer must either commit or rollback the transaction. +** +** * A write transaction is active. +** * An EXCLUSIVE or greater lock is held on the database file. +** * All writing and syncing of journal and database data has finished. +** If no error occurred, all that remains is to finalize the journal to +** commit the transaction. If an error did occur, the caller will need +** to rollback the transaction. +** +** ERROR: +** +** The ERROR state is entered when an IO or disk-full error (including +** SQLITE_IOERR_NOMEM) occurs at a point in the code that makes it +** difficult to be sure that the in-memory pager state (cache contents, +** db size etc.) are consistent with the contents of the file-system. +** +** Temporary pager files may enter the ERROR state, but in-memory pagers +** cannot. +** +** For example, if an IO error occurs while performing a rollback, +** the contents of the page-cache may be left in an inconsistent state. +** At this point it would be dangerous to change back to READER state +** (as usually happens after a rollback). Any subsequent readers might +** report database corruption (due to the inconsistent cache), and if +** they upgrade to writers, they may inadvertently corrupt the database +** file. To avoid this hazard, the pager switches into the ERROR state +** instead of READER following such an error. +** +** Once it has entered the ERROR state, any attempt to use the pager +** to read or write data returns an error. Eventually, once all +** outstanding transactions have been abandoned, the pager is able to +** transition back to OPEN state, discarding the contents of the +** page-cache and any other in-memory state at the same time. Everything +** is reloaded from disk (and, if necessary, hot-journal rollback performed) +** when a read-transaction is next opened on the pager (transitioning +** the pager into READER state). At that point the system has recovered +** from the error. +** +** Specifically, the pager jumps into the ERROR state if: +** +** 1. An error occurs while attempting a rollback. This happens in +** function sqlite3PagerRollback(). +** +** 2. An error occurs while attempting to finalize a journal file +** following a commit in function sqlite3PagerCommitPhaseTwo(). +** +** 3. An error occurs while attempting to write to the journal or +** database file in function pagerStress() in order to free up +** memory. +** +** In other cases, the error is returned to the b-tree layer. The b-tree +** layer then attempts a rollback operation. If the error condition +** persists, the pager enters the ERROR state via condition (1) above. +** +** Condition (3) is necessary because it can be triggered by a read-only +** statement executed within a transaction. In this case, if the error +** code were simply returned to the user, the b-tree layer would not +** automatically attempt a rollback, as it assumes that an error in a +** read-only statement cannot leave the pager in an internally inconsistent +** state. +** +** * The Pager.errCode variable is set to something other than SQLITE_OK. +** * There are one or more outstanding references to pages (after the +** last reference is dropped the pager should move back to OPEN state). +** * The pager is not an in-memory pager. +** +** +** Notes: +** +** * A pager is never in WRITER_DBMOD or WRITER_FINISHED state if the +** connection is open in WAL mode. A WAL connection is always in one +** of the first four states. +** +** * Normally, a connection open in exclusive mode is never in PAGER_OPEN +** state. There are two exceptions: immediately after exclusive-mode has +** been turned on (and before any read or write transactions are +** executed), and when the pager is leaving the "error state". +** +** * See also: assert_pager_state(). +*/ +#define PAGER_OPEN 0 +#define PAGER_READER 1 +#define PAGER_WRITER_LOCKED 2 +#define PAGER_WRITER_CACHEMOD 3 +#define PAGER_WRITER_DBMOD 4 +#define PAGER_WRITER_FINISHED 5 +#define PAGER_ERROR 6 + +/* +** The Pager.eLock variable is almost always set to one of the +** following locking-states, according to the lock currently held on +** the database file: NO_LOCK, SHARED_LOCK, RESERVED_LOCK or EXCLUSIVE_LOCK. +** This variable is kept up to date as locks are taken and released by +** the pagerLockDb() and pagerUnlockDb() wrappers. +** +** If the VFS xLock() or xUnlock() returns an error other than SQLITE_BUSY +** (i.e. one of the SQLITE_IOERR subtypes), it is not clear whether or not +** the operation was successful. In these circumstances pagerLockDb() and +** pagerUnlockDb() take a conservative approach - eLock is always updated +** when unlocking the file, and only updated when locking the file if the +** VFS call is successful. This way, the Pager.eLock variable may be set +** to a less exclusive (lower) value than the lock that is actually held +** at the system level, but it is never set to a more exclusive value. +** +** This is usually safe. If an xUnlock fails or appears to fail, there may +** be a few redundant xLock() calls or a lock may be held for longer than +** required, but nothing really goes wrong. +** +** The exception is when the database file is unlocked as the pager moves +** from ERROR to OPEN state. At this point there may be a hot-journal file +** in the file-system that needs to be rolled back (as part of an OPEN->SHARED +** transition, by the same pager or any other). If the call to xUnlock() +** fails at this point and the pager is left holding an EXCLUSIVE lock, this +** can confuse the call to xCheckReservedLock() call made later as part +** of hot-journal detection. +** +** xCheckReservedLock() is defined as returning true "if there is a RESERVED +** lock held by this process or any others". So xCheckReservedLock may +** return true because the caller itself is holding an EXCLUSIVE lock (but +** doesn't know it because of a previous error in xUnlock). If this happens +** a hot-journal may be mistaken for a journal being created by an active +** transaction in another process, causing SQLite to read from the database +** without rolling it back. +** +** To work around this, if a call to xUnlock() fails when unlocking the +** database in the ERROR state, Pager.eLock is set to UNKNOWN_LOCK. It +** is only changed back to a real locking state after a successful call +** to xLock(EXCLUSIVE). Also, the code to do the OPEN->SHARED state transition +** omits the check for a hot-journal if Pager.eLock is set to UNKNOWN_LOCK +** lock. Instead, it assumes a hot-journal exists and obtains an EXCLUSIVE +** lock on the database file before attempting to roll it back. See function +** PagerSharedLock() for more detail. +** +** Pager.eLock may only be set to UNKNOWN_LOCK when the pager is in +** PAGER_OPEN state. +*/ +#define UNKNOWN_LOCK (EXCLUSIVE_LOCK+1) + +/* +** The maximum allowed sector size. 64KiB. If the xSectorsize() method +** returns a value larger than this, then MAX_SECTOR_SIZE is used instead. +** This could conceivably cause corruption following a power failure on +** such a system. This is currently an undocumented limit. +*/ +#define MAX_SECTOR_SIZE 0x10000 + + +/* +** An instance of the following structure is allocated for each active +** savepoint and statement transaction in the system. All such structures +** are stored in the Pager.aSavepoint[] array, which is allocated and +** resized using sqlite3Realloc(). +** +** When a savepoint is created, the PagerSavepoint.iHdrOffset field is +** set to 0. If a journal-header is written into the main journal while +** the savepoint is active, then iHdrOffset is set to the byte offset +** immediately following the last journal record written into the main +** journal before the journal-header. This is required during savepoint +** rollback (see pagerPlaybackSavepoint()). +*/ +typedef struct PagerSavepoint PagerSavepoint; +struct PagerSavepoint { + i64 iOffset; /* Starting offset in main journal */ + i64 iHdrOffset; /* See above */ + Bitvec *pInSavepoint; /* Set of pages in this savepoint */ + Pgno nOrig; /* Original number of pages in file */ + Pgno iSubRec; /* Index of first record in sub-journal */ + int bTruncateOnRelease; /* If stmt journal may be truncated on RELEASE */ +#ifndef SQLITE_OMIT_WAL + u32 aWalData[WAL_SAVEPOINT_NDATA]; /* WAL savepoint context */ +#endif +}; + +/* +** Bits of the Pager.doNotSpill flag. See further description below. +*/ +#define SPILLFLAG_OFF 0x01 /* Never spill cache. Set via pragma */ +#define SPILLFLAG_ROLLBACK 0x02 /* Current rolling back, so do not spill */ +#define SPILLFLAG_NOSYNC 0x04 /* Spill is ok, but do not sync */ + +/* +** An open page cache is an instance of struct Pager. A description of +** some of the more important member variables follows: +** +** eState +** +** The current 'state' of the pager object. See the comment and state +** diagram above for a description of the pager state. +** +** eLock +** +** For a real on-disk database, the current lock held on the database file - +** NO_LOCK, SHARED_LOCK, RESERVED_LOCK or EXCLUSIVE_LOCK. +** +** For a temporary or in-memory database (neither of which require any +** locks), this variable is always set to EXCLUSIVE_LOCK. Since such +** databases always have Pager.exclusiveMode==1, this tricks the pager +** logic into thinking that it already has all the locks it will ever +** need (and no reason to release them). +** +** In some (obscure) circumstances, this variable may also be set to +** UNKNOWN_LOCK. See the comment above the #define of UNKNOWN_LOCK for +** details. +** +** changeCountDone +** +** This boolean variable is used to make sure that the change-counter +** (the 4-byte header field at byte offset 24 of the database file) is +** not updated more often than necessary. +** +** It is set to true when the change-counter field is updated, which +** can only happen if an exclusive lock is held on the database file. +** It is cleared (set to false) whenever an exclusive lock is +** relinquished on the database file. Each time a transaction is committed, +** The changeCountDone flag is inspected. If it is true, the work of +** updating the change-counter is omitted for the current transaction. +** +** This mechanism means that when running in exclusive mode, a connection +** need only update the change-counter once, for the first transaction +** committed. +** +** setSuper +** +** When PagerCommitPhaseOne() is called to commit a transaction, it may +** (or may not) specify a super-journal name to be written into the +** journal file before it is synced to disk. +** +** Whether or not a journal file contains a super-journal pointer affects +** the way in which the journal file is finalized after the transaction is +** committed or rolled back when running in "journal_mode=PERSIST" mode. +** If a journal file does not contain a super-journal pointer, it is +** finalized by overwriting the first journal header with zeroes. If +** it does contain a super-journal pointer the journal file is finalized +** by truncating it to zero bytes, just as if the connection were +** running in "journal_mode=truncate" mode. +** +** Journal files that contain super-journal pointers cannot be finalized +** simply by overwriting the first journal-header with zeroes, as the +** super-journal pointer could interfere with hot-journal rollback of any +** subsequently interrupted transaction that reuses the journal file. +** +** The flag is cleared as soon as the journal file is finalized (either +** by PagerCommitPhaseTwo or PagerRollback). If an IO error prevents the +** journal file from being successfully finalized, the setSuper flag +** is cleared anyway (and the pager will move to ERROR state). +** +** doNotSpill +** +** This variables control the behavior of cache-spills (calls made by +** the pcache module to the pagerStress() routine to write cached data +** to the file-system in order to free up memory). +** +** When bits SPILLFLAG_OFF or SPILLFLAG_ROLLBACK of doNotSpill are set, +** writing to the database from pagerStress() is disabled altogether. +** The SPILLFLAG_ROLLBACK case is done in a very obscure case that +** comes up during savepoint rollback that requires the pcache module +** to allocate a new page to prevent the journal file from being written +** while it is being traversed by code in pager_playback(). The SPILLFLAG_OFF +** case is a user preference. +** +** If the SPILLFLAG_NOSYNC bit is set, writing to the database from +** pagerStress() is permitted, but syncing the journal file is not. +** This flag is set by sqlite3PagerWrite() when the file-system sector-size +** is larger than the database page-size in order to prevent a journal sync +** from happening in between the journalling of two pages on the same sector. +** +** subjInMemory +** +** This is a boolean variable. If true, then any required sub-journal +** is opened as an in-memory journal file. If false, then in-memory +** sub-journals are only used for in-memory pager files. +** +** This variable is updated by the upper layer each time a new +** write-transaction is opened. +** +** dbSize, dbOrigSize, dbFileSize +** +** Variable dbSize is set to the number of pages in the database file. +** It is valid in PAGER_READER and higher states (all states except for +** OPEN and ERROR). +** +** dbSize is set based on the size of the database file, which may be +** larger than the size of the database (the value stored at offset +** 28 of the database header by the btree). If the size of the file +** is not an integer multiple of the page-size, the value stored in +** dbSize is rounded down (i.e. a 5KB file with 2K page-size has dbSize==2). +** Except, any file that is greater than 0 bytes in size is considered +** to have at least one page. (i.e. a 1KB file with 2K page-size leads +** to dbSize==1). +** +** During a write-transaction, if pages with page-numbers greater than +** dbSize are modified in the cache, dbSize is updated accordingly. +** Similarly, if the database is truncated using PagerTruncateImage(), +** dbSize is updated. +** +** Variables dbOrigSize and dbFileSize are valid in states +** PAGER_WRITER_LOCKED and higher. dbOrigSize is a copy of the dbSize +** variable at the start of the transaction. It is used during rollback, +** and to determine whether or not pages need to be journalled before +** being modified. +** +** Throughout a write-transaction, dbFileSize contains the size of +** the file on disk in pages. It is set to a copy of dbSize when the +** write-transaction is first opened, and updated when VFS calls are made +** to write or truncate the database file on disk. +** +** The only reason the dbFileSize variable is required is to suppress +** unnecessary calls to xTruncate() after committing a transaction. If, +** when a transaction is committed, the dbFileSize variable indicates +** that the database file is larger than the database image (Pager.dbSize), +** pager_truncate() is called. The pager_truncate() call uses xFilesize() +** to measure the database file on disk, and then truncates it if required. +** dbFileSize is not used when rolling back a transaction. In this case +** pager_truncate() is called unconditionally (which means there may be +** a call to xFilesize() that is not strictly required). In either case, +** pager_truncate() may cause the file to become smaller or larger. +** +** dbHintSize +** +** The dbHintSize variable is used to limit the number of calls made to +** the VFS xFileControl(FCNTL_SIZE_HINT) method. +** +** dbHintSize is set to a copy of the dbSize variable when a +** write-transaction is opened (at the same time as dbFileSize and +** dbOrigSize). If the xFileControl(FCNTL_SIZE_HINT) method is called, +** dbHintSize is increased to the number of pages that correspond to the +** size-hint passed to the method call. See pager_write_pagelist() for +** details. +** +** errCode +** +** The Pager.errCode variable is only ever used in PAGER_ERROR state. It +** is set to zero in all other states. In PAGER_ERROR state, Pager.errCode +** is always set to SQLITE_FULL, SQLITE_IOERR or one of the SQLITE_IOERR_XXX +** sub-codes. +** +** syncFlags, walSyncFlags +** +** syncFlags is either SQLITE_SYNC_NORMAL (0x02) or SQLITE_SYNC_FULL (0x03). +** syncFlags is used for rollback mode. walSyncFlags is used for WAL mode +** and contains the flags used to sync the checkpoint operations in the +** lower two bits, and sync flags used for transaction commits in the WAL +** file in bits 0x04 and 0x08. In other words, to get the correct sync flags +** for checkpoint operations, use (walSyncFlags&0x03) and to get the correct +** sync flags for transaction commit, use ((walSyncFlags>>2)&0x03). Note +** that with synchronous=NORMAL in WAL mode, transaction commit is not synced +** meaning that the 0x04 and 0x08 bits are both zero. +*/ +struct Pager { + sqlite3_vfs *pVfs; /* OS functions to use for IO */ + u8 exclusiveMode; /* Boolean. True if locking_mode==EXCLUSIVE */ + u8 journalMode; /* One of the PAGER_JOURNALMODE_* values */ + u8 useJournal; /* Use a rollback journal on this file */ + u8 noSync; /* Do not sync the journal if true */ + u8 fullSync; /* Do extra syncs of the journal for robustness */ + u8 extraSync; /* sync directory after journal delete */ + u8 syncFlags; /* SYNC_NORMAL or SYNC_FULL otherwise */ + u8 walSyncFlags; /* See description above */ + u8 tempFile; /* zFilename is a temporary or immutable file */ + u8 noLock; /* Do not lock (except in WAL mode) */ + u8 readOnly; /* True for a read-only database */ + u8 memDb; /* True to inhibit all file I/O */ + u8 memVfs; /* VFS-implemented memory database */ + + /************************************************************************** + ** The following block contains those class members that change during + ** routine operation. Class members not in this block are either fixed + ** when the pager is first created or else only change when there is a + ** significant mode change (such as changing the page_size, locking_mode, + ** or the journal_mode). From another view, these class members describe + ** the "state" of the pager, while other class members describe the + ** "configuration" of the pager. + */ + u8 eState; /* Pager state (OPEN, READER, WRITER_LOCKED..) */ + u8 eLock; /* Current lock held on database file */ + u8 changeCountDone; /* Set after incrementing the change-counter */ + u8 setSuper; /* Super-jrnl name is written into jrnl */ + u8 doNotSpill; /* Do not spill the cache when non-zero */ + u8 subjInMemory; /* True to use in-memory sub-journals */ + u8 bUseFetch; /* True to use xFetch() */ + u8 hasHeldSharedLock; /* True if a shared lock has ever been held */ + Pgno dbSize; /* Number of pages in the database */ + Pgno dbOrigSize; /* dbSize before the current transaction */ + Pgno dbFileSize; /* Number of pages in the database file */ + Pgno dbHintSize; /* Value passed to FCNTL_SIZE_HINT call */ + int errCode; /* One of several kinds of errors */ + int nRec; /* Pages journalled since last j-header written */ + u32 cksumInit; /* Quasi-random value added to every checksum */ + u32 nSubRec; /* Number of records written to sub-journal */ + Bitvec *pInJournal; /* One bit for each page in the database file */ + sqlite3_file *fd; /* File descriptor for database */ + sqlite3_file *jfd; /* File descriptor for main journal */ + sqlite3_file *sjfd; /* File descriptor for sub-journal */ + i64 journalOff; /* Current write offset in the journal file */ + i64 journalHdr; /* Byte offset to previous journal header */ + sqlite3_backup *pBackup; /* Pointer to list of ongoing backup processes */ + PagerSavepoint *aSavepoint; /* Array of active savepoints */ + int nSavepoint; /* Number of elements in aSavepoint[] */ + u32 iDataVersion; /* Changes whenever database content changes */ + char dbFileVers[16]; /* Changes whenever database file changes */ + + int nMmapOut; /* Number of mmap pages currently outstanding */ + sqlite3_int64 szMmap; /* Desired maximum mmap size */ + PgHdr *pMmapFreelist; /* List of free mmap page headers (pDirty) */ + /* + ** End of the routinely-changing class members + ***************************************************************************/ + + u16 nExtra; /* Add this many bytes to each in-memory page */ + i16 nReserve; /* Number of unused bytes at end of each page */ + u32 vfsFlags; /* Flags for sqlite3_vfs.xOpen() */ + u32 sectorSize; /* Assumed sector size during rollback */ + Pgno mxPgno; /* Maximum allowed size of the database */ + Pgno lckPgno; /* Page number for the locking page */ + i64 pageSize; /* Number of bytes in a page */ + i64 journalSizeLimit; /* Size limit for persistent journal files */ + char *zFilename; /* Name of the database file */ + char *zJournal; /* Name of the journal file */ + int (*xBusyHandler)(void*); /* Function to call when busy */ + void *pBusyHandlerArg; /* Context argument for xBusyHandler */ + u32 aStat[4]; /* Total cache hits, misses, writes, spills */ +#ifdef SQLITE_TEST + int nRead; /* Database pages read */ +#endif + void (*xReiniter)(DbPage*); /* Call this routine when reloading pages */ + int (*xGet)(Pager*,Pgno,DbPage**,int); /* Routine to fetch a patch */ + char *pTmpSpace; /* Pager.pageSize bytes of space for tmp use */ + PCache *pPCache; /* Pointer to page cache object */ +#ifndef SQLITE_OMIT_WAL + Wal *pWal; /* Write-ahead log used by "journal_mode=wal" */ + char *zWal; /* File name for write-ahead log */ +#endif +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + sqlite3 *dbWal; +#endif +}; + +/* +** Indexes for use with Pager.aStat[]. The Pager.aStat[] array contains +** the values accessed by passing SQLITE_DBSTATUS_CACHE_HIT, CACHE_MISS +** or CACHE_WRITE to sqlite3_db_status(). +*/ +#define PAGER_STAT_HIT 0 +#define PAGER_STAT_MISS 1 +#define PAGER_STAT_WRITE 2 +#define PAGER_STAT_SPILL 3 + +/* +** The following global variables hold counters used for +** testing purposes only. These variables do not exist in +** a non-testing build. These variables are not thread-safe. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_pager_readdb_count = 0; /* Number of full pages read from DB */ +SQLITE_API int sqlite3_pager_writedb_count = 0; /* Number of full pages written to DB */ +SQLITE_API int sqlite3_pager_writej_count = 0; /* Number of pages written to journal */ +# define PAGER_INCR(v) v++ +#else +# define PAGER_INCR(v) +#endif + + + +/* +** Journal files begin with the following magic string. The data +** was obtained from /dev/random. It is used only as a sanity check. +** +** Since version 2.8.0, the journal format contains additional sanity +** checking information. If the power fails while the journal is being +** written, semi-random garbage data might appear in the journal +** file after power is restored. If an attempt is then made +** to roll the journal back, the database could be corrupted. The additional +** sanity checking data is an attempt to discover the garbage in the +** journal and ignore it. +** +** The sanity checking information for the new journal format consists +** of a 32-bit checksum on each page of data. The checksum covers both +** the page number and the pPager->pageSize bytes of data for the page. +** This cksum is initialized to a 32-bit random value that appears in the +** journal file right after the header. The random initializer is important, +** because garbage data that appears at the end of a journal is likely +** data that was once in other files that have now been deleted. If the +** garbage data came from an obsolete journal file, the checksums might +** be correct. But by initializing the checksum to random value which +** is different for every journal, we minimize that risk. +*/ +static const unsigned char aJournalMagic[] = { + 0xd9, 0xd5, 0x05, 0xf9, 0x20, 0xa1, 0x63, 0xd7, +}; + +/* +** The size of the of each page record in the journal is given by +** the following macro. +*/ +#define JOURNAL_PG_SZ(pPager) ((pPager->pageSize) + 8) + +/* +** The journal header size for this pager. This is usually the same +** size as a single disk sector. See also setSectorSize(). +*/ +#define JOURNAL_HDR_SZ(pPager) (pPager->sectorSize) + +/* +** The macro MEMDB is true if we are dealing with an in-memory database. +** We do this as a macro so that if the SQLITE_OMIT_MEMORYDB macro is set, +** the value of MEMDB will be a constant and the compiler will optimize +** out code that would never execute. +*/ +#ifdef SQLITE_OMIT_MEMORYDB +# define MEMDB 0 +#else +# define MEMDB pPager->memDb +#endif + +/* +** The macro USEFETCH is true if we are allowed to use the xFetch and xUnfetch +** interfaces to access the database using memory-mapped I/O. +*/ +#if SQLITE_MAX_MMAP_SIZE>0 +# define USEFETCH(x) ((x)->bUseFetch) +#else +# define USEFETCH(x) 0 +#endif + +#ifdef SQLITE_DIRECT_OVERFLOW_READ +/* +** Return true if page pgno can be read directly from the database file +** by the b-tree layer. This is the case if: +** +** (1) the database file is open +** (2) the VFS for the database is able to do unaligned sub-page reads +** (3) there are no dirty pages in the cache, and +** (4) the desired page is not currently in the wal file. +*/ +SQLITE_PRIVATE int sqlite3PagerDirectReadOk(Pager *pPager, Pgno pgno){ + assert( pPager!=0 ); + assert( pPager->fd!=0 ); + if( pPager->fd->pMethods==0 ) return 0; /* Case (1) */ + if( sqlite3PCacheIsDirty(pPager->pPCache) ) return 0; /* Failed (3) */ +#ifndef SQLITE_OMIT_WAL + if( pPager->pWal ){ + u32 iRead = 0; + (void)sqlite3WalFindFrame(pPager->pWal, pgno, &iRead); + if( iRead ) return 0; /* Case (4) */ + } +#endif + assert( pPager->fd->pMethods->xDeviceCharacteristics!=0 ); + if( (pPager->fd->pMethods->xDeviceCharacteristics(pPager->fd) + & SQLITE_IOCAP_SUBPAGE_READ)==0 ){ + return 0; /* Case (2) */ + } + return 1; +} +#endif + +#ifndef SQLITE_OMIT_WAL +# define pagerUseWal(x) ((x)->pWal!=0) +#else +# define pagerUseWal(x) 0 +# define pagerRollbackWal(x) 0 +# define pagerWalFrames(v,w,x,y) 0 +# define pagerOpenWalIfPresent(z) SQLITE_OK +# define pagerBeginReadTransaction(z) SQLITE_OK +#endif + +#ifndef NDEBUG +/* +** Usage: +** +** assert( assert_pager_state(pPager) ); +** +** This function runs many asserts to try to find inconsistencies in +** the internal state of the Pager object. +*/ +static int assert_pager_state(Pager *p){ + Pager *pPager = p; + + /* State must be valid. */ + assert( p->eState==PAGER_OPEN + || p->eState==PAGER_READER + || p->eState==PAGER_WRITER_LOCKED + || p->eState==PAGER_WRITER_CACHEMOD + || p->eState==PAGER_WRITER_DBMOD + || p->eState==PAGER_WRITER_FINISHED + || p->eState==PAGER_ERROR + ); + + /* Regardless of the current state, a temp-file connection always behaves + ** as if it has an exclusive lock on the database file. It never updates + ** the change-counter field, so the changeCountDone flag is always set. + */ + assert( p->tempFile==0 || p->eLock==EXCLUSIVE_LOCK ); + assert( p->tempFile==0 || pPager->changeCountDone ); + + /* If the useJournal flag is clear, the journal-mode must be "OFF". + ** And if the journal-mode is "OFF", the journal file must not be open. + */ + assert( p->journalMode==PAGER_JOURNALMODE_OFF || p->useJournal ); + assert( p->journalMode!=PAGER_JOURNALMODE_OFF || !isOpen(p->jfd) ); + + /* Check that MEMDB implies noSync. And an in-memory journal. Since + ** this means an in-memory pager performs no IO at all, it cannot encounter + ** either SQLITE_IOERR or SQLITE_FULL during rollback or while finalizing + ** a journal file. (although the in-memory journal implementation may + ** return SQLITE_IOERR_NOMEM while the journal file is being written). It + ** is therefore not possible for an in-memory pager to enter the ERROR + ** state. + */ + if( MEMDB ){ + assert( !isOpen(p->fd) ); + assert( p->noSync ); + assert( p->journalMode==PAGER_JOURNALMODE_OFF + || p->journalMode==PAGER_JOURNALMODE_MEMORY + ); + assert( p->eState!=PAGER_ERROR && p->eState!=PAGER_OPEN ); + assert( pagerUseWal(p)==0 ); + } + + /* If changeCountDone is set, a RESERVED lock or greater must be held + ** on the file. + */ + assert( pPager->changeCountDone==0 || pPager->eLock>=RESERVED_LOCK ); + assert( p->eLock!=PENDING_LOCK ); + + switch( p->eState ){ + case PAGER_OPEN: + assert( !MEMDB ); + assert( pPager->errCode==SQLITE_OK ); + assert( sqlite3PcacheRefCount(pPager->pPCache)==0 || pPager->tempFile ); + break; + + case PAGER_READER: + assert( pPager->errCode==SQLITE_OK ); + assert( p->eLock!=UNKNOWN_LOCK ); + assert( p->eLock>=SHARED_LOCK ); + break; + + case PAGER_WRITER_LOCKED: + assert( p->eLock!=UNKNOWN_LOCK ); + assert( pPager->errCode==SQLITE_OK ); + if( !pagerUseWal(pPager) ){ + assert( p->eLock>=RESERVED_LOCK ); + } + assert( pPager->dbSize==pPager->dbOrigSize ); + assert( pPager->dbOrigSize==pPager->dbFileSize ); + assert( pPager->dbOrigSize==pPager->dbHintSize ); + assert( pPager->setSuper==0 ); + break; + + case PAGER_WRITER_CACHEMOD: + assert( p->eLock!=UNKNOWN_LOCK ); + assert( pPager->errCode==SQLITE_OK ); + if( !pagerUseWal(pPager) ){ + /* It is possible that if journal_mode=wal here that neither the + ** journal file nor the WAL file are open. This happens during + ** a rollback transaction that switches from journal_mode=off + ** to journal_mode=wal. + */ + assert( p->eLock>=RESERVED_LOCK ); + assert( isOpen(p->jfd) + || p->journalMode==PAGER_JOURNALMODE_OFF + || p->journalMode==PAGER_JOURNALMODE_WAL + ); + } + assert( pPager->dbOrigSize==pPager->dbFileSize ); + assert( pPager->dbOrigSize==pPager->dbHintSize ); + break; + + case PAGER_WRITER_DBMOD: + assert( p->eLock==EXCLUSIVE_LOCK ); + assert( pPager->errCode==SQLITE_OK ); + assert( !pagerUseWal(pPager) ); + assert( p->eLock>=EXCLUSIVE_LOCK ); + assert( isOpen(p->jfd) + || p->journalMode==PAGER_JOURNALMODE_OFF + || p->journalMode==PAGER_JOURNALMODE_WAL + || (sqlite3OsDeviceCharacteristics(p->fd)&SQLITE_IOCAP_BATCH_ATOMIC) + ); + assert( pPager->dbOrigSize<=pPager->dbHintSize ); + break; + + case PAGER_WRITER_FINISHED: + assert( p->eLock==EXCLUSIVE_LOCK ); + assert( pPager->errCode==SQLITE_OK ); + assert( !pagerUseWal(pPager) ); + assert( isOpen(p->jfd) + || p->journalMode==PAGER_JOURNALMODE_OFF + || p->journalMode==PAGER_JOURNALMODE_WAL + || (sqlite3OsDeviceCharacteristics(p->fd)&SQLITE_IOCAP_BATCH_ATOMIC) + ); + break; + + case PAGER_ERROR: + /* There must be at least one outstanding reference to the pager if + ** in ERROR state. Otherwise the pager should have already dropped + ** back to OPEN state. + */ + assert( pPager->errCode!=SQLITE_OK ); + assert( sqlite3PcacheRefCount(pPager->pPCache)>0 || pPager->tempFile ); + break; + } + + return 1; +} +#endif /* ifndef NDEBUG */ + +#ifdef SQLITE_DEBUG +/* +** Return a pointer to a human readable string in a static buffer +** containing the state of the Pager object passed as an argument. This +** is intended to be used within debuggers. For example, as an alternative +** to "print *pPager" in gdb: +** +** (gdb) printf "%s", print_pager_state(pPager) +** +** This routine has external linkage in order to suppress compiler warnings +** about an unused function. It is enclosed within SQLITE_DEBUG and so does +** not appear in normal builds. +*/ +char *print_pager_state(Pager *p){ + static char zRet[1024]; + + sqlite3_snprintf(1024, zRet, + "Filename: %s\n" + "State: %s errCode=%d\n" + "Lock: %s\n" + "Locking mode: locking_mode=%s\n" + "Journal mode: journal_mode=%s\n" + "Backing store: tempFile=%d memDb=%d useJournal=%d\n" + "Journal: journalOff=%lld journalHdr=%lld\n" + "Size: dbsize=%d dbOrigSize=%d dbFileSize=%d\n" + , p->zFilename + , p->eState==PAGER_OPEN ? "OPEN" : + p->eState==PAGER_READER ? "READER" : + p->eState==PAGER_WRITER_LOCKED ? "WRITER_LOCKED" : + p->eState==PAGER_WRITER_CACHEMOD ? "WRITER_CACHEMOD" : + p->eState==PAGER_WRITER_DBMOD ? "WRITER_DBMOD" : + p->eState==PAGER_WRITER_FINISHED ? "WRITER_FINISHED" : + p->eState==PAGER_ERROR ? "ERROR" : "?error?" + , (int)p->errCode + , p->eLock==NO_LOCK ? "NO_LOCK" : + p->eLock==RESERVED_LOCK ? "RESERVED" : + p->eLock==EXCLUSIVE_LOCK ? "EXCLUSIVE" : + p->eLock==SHARED_LOCK ? "SHARED" : + p->eLock==UNKNOWN_LOCK ? "UNKNOWN" : "?error?" + , p->exclusiveMode ? "exclusive" : "normal" + , p->journalMode==PAGER_JOURNALMODE_MEMORY ? "memory" : + p->journalMode==PAGER_JOURNALMODE_OFF ? "off" : + p->journalMode==PAGER_JOURNALMODE_DELETE ? "delete" : + p->journalMode==PAGER_JOURNALMODE_PERSIST ? "persist" : + p->journalMode==PAGER_JOURNALMODE_TRUNCATE ? "truncate" : + p->journalMode==PAGER_JOURNALMODE_WAL ? "wal" : "?error?" + , (int)p->tempFile, (int)p->memDb, (int)p->useJournal + , p->journalOff, p->journalHdr + , (int)p->dbSize, (int)p->dbOrigSize, (int)p->dbFileSize + ); + + return zRet; +} +#endif + +/* Forward references to the various page getters */ +static int getPageNormal(Pager*,Pgno,DbPage**,int); +static int getPageError(Pager*,Pgno,DbPage**,int); +#if SQLITE_MAX_MMAP_SIZE>0 +static int getPageMMap(Pager*,Pgno,DbPage**,int); +#endif + +/* +** Set the Pager.xGet method for the appropriate routine used to fetch +** content from the pager. +*/ +static void setGetterMethod(Pager *pPager){ + if( pPager->errCode ){ + pPager->xGet = getPageError; +#if SQLITE_MAX_MMAP_SIZE>0 + }else if( USEFETCH(pPager) ){ + pPager->xGet = getPageMMap; +#endif /* SQLITE_MAX_MMAP_SIZE>0 */ + }else{ + pPager->xGet = getPageNormal; + } +} + +/* +** Return true if it is necessary to write page *pPg into the sub-journal. +** A page needs to be written into the sub-journal if there exists one +** or more open savepoints for which: +** +** * The page-number is less than or equal to PagerSavepoint.nOrig, and +** * The bit corresponding to the page-number is not set in +** PagerSavepoint.pInSavepoint. +*/ +static int subjRequiresPage(PgHdr *pPg){ + Pager *pPager = pPg->pPager; + PagerSavepoint *p; + Pgno pgno = pPg->pgno; + int i; + for(i=0; inSavepoint; i++){ + p = &pPager->aSavepoint[i]; + if( p->nOrig>=pgno && 0==sqlite3BitvecTestNotNull(p->pInSavepoint, pgno) ){ + for(i=i+1; inSavepoint; i++){ + pPager->aSavepoint[i].bTruncateOnRelease = 0; + } + return 1; + } + } + return 0; +} + +#ifdef SQLITE_DEBUG +/* +** Return true if the page is already in the journal file. +*/ +static int pageInJournal(Pager *pPager, PgHdr *pPg){ + return sqlite3BitvecTest(pPager->pInJournal, pPg->pgno); +} +#endif + +/* +** Read a 32-bit integer from the given file descriptor. Store the integer +** that is read in *pRes. Return SQLITE_OK if everything worked, or an +** error code is something goes wrong. +** +** All values are stored on disk as big-endian. +*/ +static int read32bits(sqlite3_file *fd, i64 offset, u32 *pRes){ + unsigned char ac[4]; + int rc = sqlite3OsRead(fd, ac, sizeof(ac), offset); + if( rc==SQLITE_OK ){ + *pRes = sqlite3Get4byte(ac); + } + return rc; +} + +/* +** Write a 32-bit integer into a string buffer in big-endian byte order. +*/ +#define put32bits(A,B) sqlite3Put4byte((u8*)A,B) + + +/* +** Write a 32-bit integer into the given file descriptor. Return SQLITE_OK +** on success or an error code is something goes wrong. +*/ +static int write32bits(sqlite3_file *fd, i64 offset, u32 val){ + char ac[4]; + put32bits(ac, val); + return sqlite3OsWrite(fd, ac, 4, offset); +} + +/* +** Unlock the database file to level eLock, which must be either NO_LOCK +** or SHARED_LOCK. Regardless of whether or not the call to xUnlock() +** succeeds, set the Pager.eLock variable to match the (attempted) new lock. +** +** Except, if Pager.eLock is set to UNKNOWN_LOCK when this function is +** called, do not modify it. See the comment above the #define of +** UNKNOWN_LOCK for an explanation of this. +*/ +static int pagerUnlockDb(Pager *pPager, int eLock){ + int rc = SQLITE_OK; + + assert( !pPager->exclusiveMode || pPager->eLock==eLock ); + assert( eLock==NO_LOCK || eLock==SHARED_LOCK ); + assert( eLock!=NO_LOCK || pagerUseWal(pPager)==0 ); + if( isOpen(pPager->fd) ){ + assert( pPager->eLock>=eLock ); + rc = pPager->noLock ? SQLITE_OK : sqlite3OsUnlock(pPager->fd, eLock); + if( pPager->eLock!=UNKNOWN_LOCK ){ + pPager->eLock = (u8)eLock; + } + IOTRACE(("UNLOCK %p %d\n", pPager, eLock)) + } + pPager->changeCountDone = pPager->tempFile; /* ticket fb3b3024ea238d5c */ + return rc; +} + +/* +** Lock the database file to level eLock, which must be either SHARED_LOCK, +** RESERVED_LOCK or EXCLUSIVE_LOCK. If the caller is successful, set the +** Pager.eLock variable to the new locking state. +** +** Except, if Pager.eLock is set to UNKNOWN_LOCK when this function is +** called, do not modify it unless the new locking state is EXCLUSIVE_LOCK. +** See the comment above the #define of UNKNOWN_LOCK for an explanation +** of this. +*/ +static int pagerLockDb(Pager *pPager, int eLock){ + int rc = SQLITE_OK; + + assert( eLock==SHARED_LOCK || eLock==RESERVED_LOCK || eLock==EXCLUSIVE_LOCK ); + if( pPager->eLockeLock==UNKNOWN_LOCK ){ + rc = pPager->noLock ? SQLITE_OK : sqlite3OsLock(pPager->fd, eLock); + if( rc==SQLITE_OK && (pPager->eLock!=UNKNOWN_LOCK||eLock==EXCLUSIVE_LOCK) ){ + pPager->eLock = (u8)eLock; + IOTRACE(("LOCK %p %d\n", pPager, eLock)) + } + } + return rc; +} + +/* +** This function determines whether or not the atomic-write or +** atomic-batch-write optimizations can be used with this pager. The +** atomic-write optimization can be used if: +** +** (a) the value returned by OsDeviceCharacteristics() indicates that +** a database page may be written atomically, and +** (b) the value returned by OsSectorSize() is less than or equal +** to the page size. +** +** If it can be used, then the value returned is the size of the journal +** file when it contains rollback data for exactly one page. +** +** The atomic-batch-write optimization can be used if OsDeviceCharacteristics() +** returns a value with the SQLITE_IOCAP_BATCH_ATOMIC bit set. -1 is +** returned in this case. +** +** If neither optimization can be used, 0 is returned. +*/ +static int jrnlBufferSize(Pager *pPager){ + assert( !MEMDB ); + +#if defined(SQLITE_ENABLE_ATOMIC_WRITE) \ + || defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE) + int dc; /* Device characteristics */ + + assert( isOpen(pPager->fd) ); + dc = sqlite3OsDeviceCharacteristics(pPager->fd); +#else + UNUSED_PARAMETER(pPager); +#endif + +#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE + if( pPager->dbSize>0 && (dc&SQLITE_IOCAP_BATCH_ATOMIC) ){ + return -1; + } +#endif + +#ifdef SQLITE_ENABLE_ATOMIC_WRITE + { + int nSector = pPager->sectorSize; + int szPage = pPager->pageSize; + + assert(SQLITE_IOCAP_ATOMIC512==(512>>8)); + assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8)); + if( 0==(dc&(SQLITE_IOCAP_ATOMIC|(szPage>>8)) || nSector>szPage) ){ + return 0; + } + } + + return JOURNAL_HDR_SZ(pPager) + JOURNAL_PG_SZ(pPager); +#endif + + return 0; +} + +/* +** If SQLITE_CHECK_PAGES is defined then we do some sanity checking +** on the cache using a hash function. This is used for testing +** and debugging only. +*/ +#ifdef SQLITE_CHECK_PAGES +/* +** Return a 32-bit hash of the page data for pPage. +*/ +static u32 pager_datahash(int nByte, unsigned char *pData){ + u32 hash = 0; + int i; + for(i=0; ipPager->pageSize, (unsigned char *)pPage->pData); +} +static void pager_set_pagehash(PgHdr *pPage){ + pPage->pageHash = pager_pagehash(pPage); +} + +/* +** The CHECK_PAGE macro takes a PgHdr* as an argument. If SQLITE_CHECK_PAGES +** is defined, and NDEBUG is not defined, an assert() statement checks +** that the page is either dirty or still matches the calculated page-hash. +*/ +#define CHECK_PAGE(x) checkPage(x) +static void checkPage(PgHdr *pPg){ + Pager *pPager = pPg->pPager; + assert( pPager->eState!=PAGER_ERROR ); + assert( (pPg->flags&PGHDR_DIRTY) || pPg->pageHash==pager_pagehash(pPg) ); +} + +#else +#define pager_datahash(X,Y) 0 +#define pager_pagehash(X) 0 +#define pager_set_pagehash(X) +#define CHECK_PAGE(x) +#endif /* SQLITE_CHECK_PAGES */ + +/* +** When this is called the journal file for pager pPager must be open. +** This function attempts to read a super-journal file name from the +** end of the file and, if successful, copies it into memory supplied +** by the caller. See comments above writeSuperJournal() for the format +** used to store a super-journal file name at the end of a journal file. +** +** zSuper must point to a buffer of at least nSuper bytes allocated by +** the caller. This should be sqlite3_vfs.mxPathname+1 (to ensure there is +** enough space to write the super-journal name). If the super-journal +** name in the journal is longer than nSuper bytes (including a +** nul-terminator), then this is handled as if no super-journal name +** were present in the journal. +** +** If a super-journal file name is present at the end of the journal +** file, then it is copied into the buffer pointed to by zSuper. A +** nul-terminator byte is appended to the buffer following the +** super-journal file name. +** +** If it is determined that no super-journal file name is present +** zSuper[0] is set to 0 and SQLITE_OK returned. +** +** If an error occurs while reading from the journal file, an SQLite +** error code is returned. +*/ +static int readSuperJournal(sqlite3_file *pJrnl, char *zSuper, u64 nSuper){ + int rc; /* Return code */ + u32 len; /* Length in bytes of super-journal name */ + i64 szJ; /* Total size in bytes of journal file pJrnl */ + u32 cksum; /* MJ checksum value read from journal */ + u32 u; /* Unsigned loop counter */ + unsigned char aMagic[8]; /* A buffer to hold the magic header */ + zSuper[0] = '\0'; + + if( SQLITE_OK!=(rc = sqlite3OsFileSize(pJrnl, &szJ)) + || szJ<16 + || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-16, &len)) + || len>=nSuper + || len>szJ-16 + || len==0 + || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-12, &cksum)) + || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, aMagic, 8, szJ-8)) + || memcmp(aMagic, aJournalMagic, 8) + || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, zSuper, len, szJ-16-len)) + ){ + return rc; + } + + /* See if the checksum matches the super-journal name */ + for(u=0; ujournalOff, assuming a sector +** size of pPager->sectorSize bytes. +** +** i.e for a sector size of 512: +** +** Pager.journalOff Return value +** --------------------------------------- +** 0 0 +** 512 512 +** 100 512 +** 2000 2048 +** +*/ +static i64 journalHdrOffset(Pager *pPager){ + i64 offset = 0; + i64 c = pPager->journalOff; + if( c ){ + offset = ((c-1)/JOURNAL_HDR_SZ(pPager) + 1) * JOURNAL_HDR_SZ(pPager); + } + assert( offset%JOURNAL_HDR_SZ(pPager)==0 ); + assert( offset>=c ); + assert( (offset-c)jfd) ); + assert( !sqlite3JournalIsInMemory(pPager->jfd) ); + if( pPager->journalOff ){ + const i64 iLimit = pPager->journalSizeLimit; /* Local cache of jsl */ + + IOTRACE(("JZEROHDR %p\n", pPager)) + if( doTruncate || iLimit==0 ){ + rc = sqlite3OsTruncate(pPager->jfd, 0); + }else{ + static const char zeroHdr[28] = {0}; + rc = sqlite3OsWrite(pPager->jfd, zeroHdr, sizeof(zeroHdr), 0); + } + if( rc==SQLITE_OK && !pPager->noSync ){ + rc = sqlite3OsSync(pPager->jfd, SQLITE_SYNC_DATAONLY|pPager->syncFlags); + } + + /* At this point the transaction is committed but the write lock + ** is still held on the file. If there is a size limit configured for + ** the persistent journal and the journal file currently consumes more + ** space than that limit allows for, truncate it now. There is no need + ** to sync the file following this operation. + */ + if( rc==SQLITE_OK && iLimit>0 ){ + i64 sz; + rc = sqlite3OsFileSize(pPager->jfd, &sz); + if( rc==SQLITE_OK && sz>iLimit ){ + rc = sqlite3OsTruncate(pPager->jfd, iLimit); + } + } + } + return rc; +} + +/* +** The journal file must be open when this routine is called. A journal +** header (JOURNAL_HDR_SZ bytes) is written into the journal file at the +** current location. +** +** The format for the journal header is as follows: +** - 8 bytes: Magic identifying journal format. +** - 4 bytes: Number of records in journal, or -1 no-sync mode is on. +** - 4 bytes: Random number used for page hash. +** - 4 bytes: Initial database page count. +** - 4 bytes: Sector size used by the process that wrote this journal. +** - 4 bytes: Database page size. +** +** Followed by (JOURNAL_HDR_SZ - 28) bytes of unused space. +*/ +static int writeJournalHdr(Pager *pPager){ + int rc = SQLITE_OK; /* Return code */ + char *zHeader = pPager->pTmpSpace; /* Temporary space used to build header */ + u32 nHeader = (u32)pPager->pageSize;/* Size of buffer pointed to by zHeader */ + u32 nWrite; /* Bytes of header sector written */ + int ii; /* Loop counter */ + + assert( isOpen(pPager->jfd) ); /* Journal file must be open. */ + + if( nHeader>JOURNAL_HDR_SZ(pPager) ){ + nHeader = JOURNAL_HDR_SZ(pPager); + } + + /* If there are active savepoints and any of them were created + ** since the most recent journal header was written, update the + ** PagerSavepoint.iHdrOffset fields now. + */ + for(ii=0; iinSavepoint; ii++){ + if( pPager->aSavepoint[ii].iHdrOffset==0 ){ + pPager->aSavepoint[ii].iHdrOffset = pPager->journalOff; + } + } + + pPager->journalHdr = pPager->journalOff = journalHdrOffset(pPager); + + /* + ** Write the nRec Field - the number of page records that follow this + ** journal header. Normally, zero is written to this value at this time. + ** After the records are added to the journal (and the journal synced, + ** if in full-sync mode), the zero is overwritten with the true number + ** of records (see syncJournal()). + ** + ** A faster alternative is to write 0xFFFFFFFF to the nRec field. When + ** reading the journal this value tells SQLite to assume that the + ** rest of the journal file contains valid page records. This assumption + ** is dangerous, as if a failure occurred whilst writing to the journal + ** file it may contain some garbage data. There are two scenarios + ** where this risk can be ignored: + ** + ** * When the pager is in no-sync mode. Corruption can follow a + ** power failure in this case anyway. + ** + ** * When the SQLITE_IOCAP_SAFE_APPEND flag is set. This guarantees + ** that garbage data is never appended to the journal file. + */ + assert( isOpen(pPager->fd) || pPager->noSync ); + if( pPager->noSync || (pPager->journalMode==PAGER_JOURNALMODE_MEMORY) + || (sqlite3OsDeviceCharacteristics(pPager->fd)&SQLITE_IOCAP_SAFE_APPEND) + ){ + memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic)); + put32bits(&zHeader[sizeof(aJournalMagic)], 0xffffffff); + }else{ + memset(zHeader, 0, sizeof(aJournalMagic)+4); + } + + + + /* The random check-hash initializer */ + if( pPager->journalMode!=PAGER_JOURNALMODE_MEMORY ){ + sqlite3_randomness(sizeof(pPager->cksumInit), &pPager->cksumInit); + } +#ifdef SQLITE_DEBUG + else{ + /* The Pager.cksumInit variable is usually randomized above to protect + ** against there being existing records in the journal file. This is + ** dangerous, as following a crash they may be mistaken for records + ** written by the current transaction and rolled back into the database + ** file, causing corruption. The following assert statements verify + ** that this is not required in "journal_mode=memory" mode, as in that + ** case the journal file is always 0 bytes in size at this point. + ** It is advantageous to avoid the sqlite3_randomness() call if possible + ** as it takes the global PRNG mutex. */ + i64 sz = 0; + sqlite3OsFileSize(pPager->jfd, &sz); + assert( sz==0 ); + assert( pPager->journalOff==journalHdrOffset(pPager) ); + assert( sqlite3JournalIsInMemory(pPager->jfd) ); + } +#endif + put32bits(&zHeader[sizeof(aJournalMagic)+4], pPager->cksumInit); + + /* The initial database size */ + put32bits(&zHeader[sizeof(aJournalMagic)+8], pPager->dbOrigSize); + /* The assumed sector size for this process */ + put32bits(&zHeader[sizeof(aJournalMagic)+12], pPager->sectorSize); + + /* The page size */ + put32bits(&zHeader[sizeof(aJournalMagic)+16], pPager->pageSize); + + /* Initializing the tail of the buffer is not necessary. Everything + ** works find if the following memset() is omitted. But initializing + ** the memory prevents valgrind from complaining, so we are willing to + ** take the performance hit. + */ + memset(&zHeader[sizeof(aJournalMagic)+20], 0, + nHeader-(sizeof(aJournalMagic)+20)); + + /* In theory, it is only necessary to write the 28 bytes that the + ** journal header consumes to the journal file here. Then increment the + ** Pager.journalOff variable by JOURNAL_HDR_SZ so that the next + ** record is written to the following sector (leaving a gap in the file + ** that will be implicitly filled in by the OS). + ** + ** However it has been discovered that on some systems this pattern can + ** be significantly slower than contiguously writing data to the file, + ** even if that means explicitly writing data to the block of + ** (JOURNAL_HDR_SZ - 28) bytes that will not be used. So that is what + ** is done. + ** + ** The loop is required here in case the sector-size is larger than the + ** database page size. Since the zHeader buffer is only Pager.pageSize + ** bytes in size, more than one call to sqlite3OsWrite() may be required + ** to populate the entire journal header sector. + */ + for(nWrite=0; rc==SQLITE_OK&&nWritejournalHdr, nHeader)) + rc = sqlite3OsWrite(pPager->jfd, zHeader, nHeader, pPager->journalOff); + assert( pPager->journalHdr <= pPager->journalOff ); + pPager->journalOff += nHeader; + } + + return rc; +} + +/* +** The journal file must be open when this is called. A journal header file +** (JOURNAL_HDR_SZ bytes) is read from the current location in the journal +** file. The current location in the journal file is given by +** pPager->journalOff. See comments above function writeJournalHdr() for +** a description of the journal header format. +** +** If the header is read successfully, *pNRec is set to the number of +** page records following this header and *pDbSize is set to the size of the +** database before the transaction began, in pages. Also, pPager->cksumInit +** is set to the value read from the journal header. SQLITE_OK is returned +** in this case. +** +** If the journal header file appears to be corrupted, SQLITE_DONE is +** returned and *pNRec and *PDbSize are undefined. If JOURNAL_HDR_SZ bytes +** cannot be read from the journal file an error code is returned. +*/ +static int readJournalHdr( + Pager *pPager, /* Pager object */ + int isHot, + i64 journalSize, /* Size of the open journal file in bytes */ + u32 *pNRec, /* OUT: Value read from the nRec field */ + u32 *pDbSize /* OUT: Value of original database size field */ +){ + int rc; /* Return code */ + unsigned char aMagic[8]; /* A buffer to hold the magic header */ + i64 iHdrOff; /* Offset of journal header being read */ + + assert( isOpen(pPager->jfd) ); /* Journal file must be open. */ + + /* Advance Pager.journalOff to the start of the next sector. If the + ** journal file is too small for there to be a header stored at this + ** point, return SQLITE_DONE. + */ + pPager->journalOff = journalHdrOffset(pPager); + if( pPager->journalOff+JOURNAL_HDR_SZ(pPager) > journalSize ){ + return SQLITE_DONE; + } + iHdrOff = pPager->journalOff; + + /* Read in the first 8 bytes of the journal header. If they do not match + ** the magic string found at the start of each journal header, return + ** SQLITE_DONE. If an IO error occurs, return an error code. Otherwise, + ** proceed. + */ + if( isHot || iHdrOff!=pPager->journalHdr ){ + rc = sqlite3OsRead(pPager->jfd, aMagic, sizeof(aMagic), iHdrOff); + if( rc ){ + return rc; + } + if( memcmp(aMagic, aJournalMagic, sizeof(aMagic))!=0 ){ + return SQLITE_DONE; + } + } + + /* Read the first three 32-bit fields of the journal header: The nRec + ** field, the checksum-initializer and the database size at the start + ** of the transaction. Return an error code if anything goes wrong. + */ + if( SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+8, pNRec)) + || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+12, &pPager->cksumInit)) + || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+16, pDbSize)) + ){ + return rc; + } + + if( pPager->journalOff==0 ){ + u32 iPageSize; /* Page-size field of journal header */ + u32 iSectorSize; /* Sector-size field of journal header */ + + /* Read the page-size and sector-size journal header fields. */ + if( SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+20, &iSectorSize)) + || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+24, &iPageSize)) + ){ + return rc; + } + + /* Versions of SQLite prior to 3.5.8 set the page-size field of the + ** journal header to zero. In this case, assume that the Pager.pageSize + ** variable is already set to the correct page size. + */ + if( iPageSize==0 ){ + iPageSize = pPager->pageSize; + } + + /* Check that the values read from the page-size and sector-size fields + ** are within range. To be 'in range', both values need to be a power + ** of two greater than or equal to 512 or 32, and not greater than their + ** respective compile time maximum limits. + */ + if( iPageSize<512 || iSectorSize<32 + || iPageSize>SQLITE_MAX_PAGE_SIZE || iSectorSize>MAX_SECTOR_SIZE + || ((iPageSize-1)&iPageSize)!=0 || ((iSectorSize-1)&iSectorSize)!=0 + ){ + /* If the either the page-size or sector-size in the journal-header is + ** invalid, then the process that wrote the journal-header must have + ** crashed before the header was synced. In this case stop reading + ** the journal file here. + */ + return SQLITE_DONE; + } + + /* Update the page-size to match the value read from the journal. + ** Use a testcase() macro to make sure that malloc failure within + ** PagerSetPagesize() is tested. + */ + rc = sqlite3PagerSetPagesize(pPager, &iPageSize, -1); + testcase( rc!=SQLITE_OK ); + + /* Update the assumed sector-size to match the value used by + ** the process that created this journal. If this journal was + ** created by a process other than this one, then this routine + ** is being called from within pager_playback(). The local value + ** of Pager.sectorSize is restored at the end of that routine. + */ + pPager->sectorSize = iSectorSize; + } + + pPager->journalOff += JOURNAL_HDR_SZ(pPager); + return rc; +} + + +/* +** Write the supplied super-journal name into the journal file for pager +** pPager at the current location. The super-journal name must be the last +** thing written to a journal file. If the pager is in full-sync mode, the +** journal file descriptor is advanced to the next sector boundary before +** anything is written. The format is: +** +** + 4 bytes: PAGER_SJ_PGNO. +** + N bytes: super-journal filename in utf-8. +** + 4 bytes: N (length of super-journal name in bytes, no nul-terminator). +** + 4 bytes: super-journal name checksum. +** + 8 bytes: aJournalMagic[]. +** +** The super-journal page checksum is the sum of the bytes in the super-journal +** name, where each byte is interpreted as a signed 8-bit integer. +** +** If zSuper is a NULL pointer (occurs for a single database transaction), +** this call is a no-op. +*/ +static int writeSuperJournal(Pager *pPager, const char *zSuper){ + int rc; /* Return code */ + int nSuper; /* Length of string zSuper */ + i64 iHdrOff; /* Offset of header in journal file */ + i64 jrnlSize; /* Size of journal file on disk */ + u32 cksum = 0; /* Checksum of string zSuper */ + + assert( pPager->setSuper==0 ); + assert( !pagerUseWal(pPager) ); + + if( !zSuper + || pPager->journalMode==PAGER_JOURNALMODE_MEMORY + || !isOpen(pPager->jfd) + ){ + return SQLITE_OK; + } + pPager->setSuper = 1; + assert( pPager->journalHdr <= pPager->journalOff ); + + /* Calculate the length in bytes and the checksum of zSuper */ + for(nSuper=0; zSuper[nSuper]; nSuper++){ + cksum += zSuper[nSuper]; + } + + /* If in full-sync mode, advance to the next disk sector before writing + ** the super-journal name. This is in case the previous page written to + ** the journal has already been synced. + */ + if( pPager->fullSync ){ + pPager->journalOff = journalHdrOffset(pPager); + } + iHdrOff = pPager->journalOff; + + /* Write the super-journal data to the end of the journal file. If + ** an error occurs, return the error code to the caller. + */ + if( (0 != (rc = write32bits(pPager->jfd, iHdrOff, PAGER_SJ_PGNO(pPager)))) + || (0 != (rc = sqlite3OsWrite(pPager->jfd, zSuper, nSuper, iHdrOff+4))) + || (0 != (rc = write32bits(pPager->jfd, iHdrOff+4+nSuper, nSuper))) + || (0 != (rc = write32bits(pPager->jfd, iHdrOff+4+nSuper+4, cksum))) + || (0 != (rc = sqlite3OsWrite(pPager->jfd, aJournalMagic, 8, + iHdrOff+4+nSuper+8))) + ){ + return rc; + } + pPager->journalOff += (nSuper+20); + + /* If the pager is in persistent-journal mode, then the physical + ** journal-file may extend past the end of the super-journal name + ** and 8 bytes of magic data just written to the file. This is + ** dangerous because the code to rollback a hot-journal file + ** will not be able to find the super-journal name to determine + ** whether or not the journal is hot. + ** + ** Easiest thing to do in this scenario is to truncate the journal + ** file to the required size. + */ + if( SQLITE_OK==(rc = sqlite3OsFileSize(pPager->jfd, &jrnlSize)) + && jrnlSize>pPager->journalOff + ){ + rc = sqlite3OsTruncate(pPager->jfd, pPager->journalOff); + } + return rc; +} + +/* +** Discard the entire contents of the in-memory page-cache. +*/ +static void pager_reset(Pager *pPager){ + pPager->iDataVersion++; + sqlite3BackupRestart(pPager->pBackup); + sqlite3PcacheClear(pPager->pPCache); +} + +/* +** Return the pPager->iDataVersion value +*/ +SQLITE_PRIVATE u32 sqlite3PagerDataVersion(Pager *pPager){ + return pPager->iDataVersion; +} + +/* +** Free all structures in the Pager.aSavepoint[] array and set both +** Pager.aSavepoint and Pager.nSavepoint to zero. Close the sub-journal +** if it is open and the pager is not in exclusive mode. +*/ +static void releaseAllSavepoints(Pager *pPager){ + int ii; /* Iterator for looping through Pager.aSavepoint */ + for(ii=0; iinSavepoint; ii++){ + sqlite3BitvecDestroy(pPager->aSavepoint[ii].pInSavepoint); + } + if( !pPager->exclusiveMode || sqlite3JournalIsInMemory(pPager->sjfd) ){ + sqlite3OsClose(pPager->sjfd); + } + sqlite3_free(pPager->aSavepoint); + pPager->aSavepoint = 0; + pPager->nSavepoint = 0; + pPager->nSubRec = 0; +} + +/* +** Set the bit number pgno in the PagerSavepoint.pInSavepoint +** bitvecs of all open savepoints. Return SQLITE_OK if successful +** or SQLITE_NOMEM if a malloc failure occurs. +*/ +static int addToSavepointBitvecs(Pager *pPager, Pgno pgno){ + int ii; /* Loop counter */ + int rc = SQLITE_OK; /* Result code */ + + for(ii=0; iinSavepoint; ii++){ + PagerSavepoint *p = &pPager->aSavepoint[ii]; + if( pgno<=p->nOrig ){ + rc |= sqlite3BitvecSet(p->pInSavepoint, pgno); + testcase( rc==SQLITE_NOMEM ); + assert( rc==SQLITE_OK || rc==SQLITE_NOMEM ); + } + } + return rc; +} + +/* +** This function is a no-op if the pager is in exclusive mode and not +** in the ERROR state. Otherwise, it switches the pager to PAGER_OPEN +** state. +** +** If the pager is not in exclusive-access mode, the database file is +** completely unlocked. If the file is unlocked and the file-system does +** not exhibit the UNDELETABLE_WHEN_OPEN property, the journal file is +** closed (if it is open). +** +** If the pager is in ERROR state when this function is called, the +** contents of the pager cache are discarded before switching back to +** the OPEN state. Regardless of whether the pager is in exclusive-mode +** or not, any journal file left in the file-system will be treated +** as a hot-journal and rolled back the next time a read-transaction +** is opened (by this or by any other connection). +*/ +static void pager_unlock(Pager *pPager){ + + assert( pPager->eState==PAGER_READER + || pPager->eState==PAGER_OPEN + || pPager->eState==PAGER_ERROR + ); + + sqlite3BitvecDestroy(pPager->pInJournal); + pPager->pInJournal = 0; + releaseAllSavepoints(pPager); + + if( pagerUseWal(pPager) ){ + assert( !isOpen(pPager->jfd) ); + if( pPager->eState==PAGER_ERROR ){ + /* If an IO error occurs in wal.c while attempting to wrap the wal file, + ** then the Wal object may be holding a write-lock but no read-lock. + ** This call ensures that the write-lock is dropped as well. We cannot + ** have sqlite3WalEndReadTransaction() drop the write-lock, as it once + ** did, because this would break "BEGIN EXCLUSIVE" handling for + ** SQLITE_ENABLE_SETLK_TIMEOUT builds. */ + (void)sqlite3WalEndWriteTransaction(pPager->pWal); + } + sqlite3WalEndReadTransaction(pPager->pWal); + pPager->eState = PAGER_OPEN; + }else if( !pPager->exclusiveMode ){ + int rc; /* Error code returned by pagerUnlockDb() */ + int iDc = isOpen(pPager->fd)?sqlite3OsDeviceCharacteristics(pPager->fd):0; + + /* If the operating system support deletion of open files, then + ** close the journal file when dropping the database lock. Otherwise + ** another connection with journal_mode=delete might delete the file + ** out from under us. + */ + assert( (PAGER_JOURNALMODE_MEMORY & 5)!=1 ); + assert( (PAGER_JOURNALMODE_OFF & 5)!=1 ); + assert( (PAGER_JOURNALMODE_WAL & 5)!=1 ); + assert( (PAGER_JOURNALMODE_DELETE & 5)!=1 ); + assert( (PAGER_JOURNALMODE_TRUNCATE & 5)==1 ); + assert( (PAGER_JOURNALMODE_PERSIST & 5)==1 ); + if( 0==(iDc & SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN) + || 1!=(pPager->journalMode & 5) + ){ + sqlite3OsClose(pPager->jfd); + } + + /* If the pager is in the ERROR state and the call to unlock the database + ** file fails, set the current lock to UNKNOWN_LOCK. See the comment + ** above the #define for UNKNOWN_LOCK for an explanation of why this + ** is necessary. + */ + rc = pagerUnlockDb(pPager, NO_LOCK); + if( rc!=SQLITE_OK && pPager->eState==PAGER_ERROR ){ + pPager->eLock = UNKNOWN_LOCK; + } + + /* The pager state may be changed from PAGER_ERROR to PAGER_OPEN here + ** without clearing the error code. This is intentional - the error + ** code is cleared and the cache reset in the block below. + */ + assert( pPager->errCode || pPager->eState!=PAGER_ERROR ); + pPager->eState = PAGER_OPEN; + } + + /* If Pager.errCode is set, the contents of the pager cache cannot be + ** trusted. Now that there are no outstanding references to the pager, + ** it can safely move back to PAGER_OPEN state. This happens in both + ** normal and exclusive-locking mode. + */ + assert( pPager->errCode==SQLITE_OK || !MEMDB ); + if( pPager->errCode ){ + if( pPager->tempFile==0 ){ + pager_reset(pPager); + pPager->changeCountDone = 0; + pPager->eState = PAGER_OPEN; + }else{ + pPager->eState = (isOpen(pPager->jfd) ? PAGER_OPEN : PAGER_READER); + } + if( USEFETCH(pPager) ) sqlite3OsUnfetch(pPager->fd, 0, 0); + pPager->errCode = SQLITE_OK; + setGetterMethod(pPager); + } + + pPager->journalOff = 0; + pPager->journalHdr = 0; + pPager->setSuper = 0; +} + +/* +** This function is called whenever an IOERR or FULL error that requires +** the pager to transition into the ERROR state may have occurred. +** The first argument is a pointer to the pager structure, the second +** the error-code about to be returned by a pager API function. The +** value returned is a copy of the second argument to this function. +** +** If the second argument is SQLITE_FULL, SQLITE_IOERR or one of the +** IOERR sub-codes, the pager enters the ERROR state and the error code +** is stored in Pager.errCode. While the pager remains in the ERROR state, +** all major API calls on the Pager will immediately return Pager.errCode. +** +** The ERROR state indicates that the contents of the pager-cache +** cannot be trusted. This state can be cleared by completely discarding +** the contents of the pager-cache. If a transaction was active when +** the persistent error occurred, then the rollback journal may need +** to be replayed to restore the contents of the database file (as if +** it were a hot-journal). +*/ +static int pager_error(Pager *pPager, int rc){ + int rc2 = rc & 0xff; + assert( rc==SQLITE_OK || !MEMDB ); + assert( + pPager->errCode==SQLITE_FULL || + pPager->errCode==SQLITE_OK || + (pPager->errCode & 0xff)==SQLITE_IOERR + ); + if( rc2==SQLITE_FULL || rc2==SQLITE_IOERR ){ + pPager->errCode = rc; + pPager->eState = PAGER_ERROR; + setGetterMethod(pPager); + } + return rc; +} + +static int pager_truncate(Pager *pPager, Pgno nPage); + +/* +** The write transaction open on pPager is being committed (bCommit==1) +** or rolled back (bCommit==0). +** +** Return TRUE if and only if all dirty pages should be flushed to disk. +** +** Rules: +** +** * For non-TEMP databases, always sync to disk. This is necessary +** for transactions to be durable. +** +** * Sync TEMP database only on a COMMIT (not a ROLLBACK) when the backing +** file has been created already (via a spill on pagerStress()) and +** when the number of dirty pages in memory exceeds 25% of the total +** cache size. +*/ +static int pagerFlushOnCommit(Pager *pPager, int bCommit){ + if( pPager->tempFile==0 ) return 1; + if( !bCommit ) return 0; + if( !isOpen(pPager->fd) ) return 0; + return (sqlite3PCachePercentDirty(pPager->pPCache)>=25); +} + +/* +** This routine ends a transaction. A transaction is usually ended by +** either a COMMIT or a ROLLBACK operation. This routine may be called +** after rollback of a hot-journal, or if an error occurs while opening +** the journal file or writing the very first journal-header of a +** database transaction. +** +** This routine is never called in PAGER_ERROR state. If it is called +** in PAGER_NONE or PAGER_SHARED state and the lock held is less +** exclusive than a RESERVED lock, it is a no-op. +** +** Otherwise, any active savepoints are released. +** +** If the journal file is open, then it is "finalized". Once a journal +** file has been finalized it is not possible to use it to roll back a +** transaction. Nor will it be considered to be a hot-journal by this +** or any other database connection. Exactly how a journal is finalized +** depends on whether or not the pager is running in exclusive mode and +** the current journal-mode (Pager.journalMode value), as follows: +** +** journalMode==MEMORY +** Journal file descriptor is simply closed. This destroys an +** in-memory journal. +** +** journalMode==TRUNCATE +** Journal file is truncated to zero bytes in size. +** +** journalMode==PERSIST +** The first 28 bytes of the journal file are zeroed. This invalidates +** the first journal header in the file, and hence the entire journal +** file. An invalid journal file cannot be rolled back. +** +** journalMode==DELETE +** The journal file is closed and deleted using sqlite3OsDelete(). +** +** If the pager is running in exclusive mode, this method of finalizing +** the journal file is never used. Instead, if the journalMode is +** DELETE and the pager is in exclusive mode, the method described under +** journalMode==PERSIST is used instead. +** +** After the journal is finalized, the pager moves to PAGER_READER state. +** If running in non-exclusive rollback mode, the lock on the file is +** downgraded to a SHARED_LOCK. +** +** SQLITE_OK is returned if no error occurs. If an error occurs during +** any of the IO operations to finalize the journal file or unlock the +** database then the IO error code is returned to the user. If the +** operation to finalize the journal file fails, then the code still +** tries to unlock the database file if not in exclusive mode. If the +** unlock operation fails as well, then the first error code related +** to the first error encountered (the journal finalization one) is +** returned. +*/ +static int pager_end_transaction(Pager *pPager, int hasSuper, int bCommit){ + int rc = SQLITE_OK; /* Error code from journal finalization operation */ + int rc2 = SQLITE_OK; /* Error code from db file unlock operation */ + + /* Do nothing if the pager does not have an open write transaction + ** or at least a RESERVED lock. This function may be called when there + ** is no write-transaction active but a RESERVED or greater lock is + ** held under two circumstances: + ** + ** 1. After a successful hot-journal rollback, it is called with + ** eState==PAGER_NONE and eLock==EXCLUSIVE_LOCK. + ** + ** 2. If a connection with locking_mode=exclusive holding an EXCLUSIVE + ** lock switches back to locking_mode=normal and then executes a + ** read-transaction, this function is called with eState==PAGER_READER + ** and eLock==EXCLUSIVE_LOCK when the read-transaction is closed. + */ + assert( assert_pager_state(pPager) ); + assert( pPager->eState!=PAGER_ERROR ); + if( pPager->eStateeLockjfd) || pPager->pInJournal==0 + || (sqlite3OsDeviceCharacteristics(pPager->fd)&SQLITE_IOCAP_BATCH_ATOMIC) + ); + if( isOpen(pPager->jfd) ){ + assert( !pagerUseWal(pPager) ); + + /* Finalize the journal file. */ + if( sqlite3JournalIsInMemory(pPager->jfd) ){ + /* assert( pPager->journalMode==PAGER_JOURNALMODE_MEMORY ); */ + sqlite3OsClose(pPager->jfd); + }else if( pPager->journalMode==PAGER_JOURNALMODE_TRUNCATE ){ + if( pPager->journalOff==0 ){ + rc = SQLITE_OK; + }else{ + rc = sqlite3OsTruncate(pPager->jfd, 0); + if( rc==SQLITE_OK && pPager->fullSync ){ + /* Make sure the new file size is written into the inode right away. + ** Otherwise the journal might resurrect following a power loss and + ** cause the last transaction to roll back. See + ** https://bugzilla.mozilla.org/show_bug.cgi?id=1072773 + */ + rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags); + } + } + pPager->journalOff = 0; + }else if( pPager->journalMode==PAGER_JOURNALMODE_PERSIST + || (pPager->exclusiveMode && pPager->journalModetempFile); + pPager->journalOff = 0; + }else{ + /* This branch may be executed with Pager.journalMode==MEMORY if + ** a hot-journal was just rolled back. In this case the journal + ** file should be closed and deleted. If this connection writes to + ** the database file, it will do so using an in-memory journal. + */ + int bDelete = !pPager->tempFile; + assert( sqlite3JournalIsInMemory(pPager->jfd)==0 ); + assert( pPager->journalMode==PAGER_JOURNALMODE_DELETE + || pPager->journalMode==PAGER_JOURNALMODE_MEMORY + || pPager->journalMode==PAGER_JOURNALMODE_WAL + ); + sqlite3OsClose(pPager->jfd); + if( bDelete ){ + rc = sqlite3OsDelete(pPager->pVfs, pPager->zJournal, pPager->extraSync); + } + } + } + +#ifdef SQLITE_CHECK_PAGES + sqlite3PcacheIterateDirty(pPager->pPCache, pager_set_pagehash); + if( pPager->dbSize==0 && sqlite3PcacheRefCount(pPager->pPCache)>0 ){ + PgHdr *p = sqlite3PagerLookup(pPager, 1); + if( p ){ + p->pageHash = 0; + sqlite3PagerUnrefNotNull(p); + } + } +#endif + + sqlite3BitvecDestroy(pPager->pInJournal); + pPager->pInJournal = 0; + pPager->nRec = 0; + if( rc==SQLITE_OK ){ + if( MEMDB || pagerFlushOnCommit(pPager, bCommit) ){ + sqlite3PcacheCleanAll(pPager->pPCache); + }else{ + sqlite3PcacheClearWritable(pPager->pPCache); + } + sqlite3PcacheTruncate(pPager->pPCache, pPager->dbSize); + } + + if( pagerUseWal(pPager) ){ + /* Drop the WAL write-lock, if any. Also, if the connection was in + ** locking_mode=exclusive mode but is no longer, drop the EXCLUSIVE + ** lock held on the database file. + */ + rc2 = sqlite3WalEndWriteTransaction(pPager->pWal); + assert( rc2==SQLITE_OK ); + }else if( rc==SQLITE_OK && bCommit && pPager->dbFileSize>pPager->dbSize ){ + /* This branch is taken when committing a transaction in rollback-journal + ** mode if the database file on disk is larger than the database image. + ** At this point the journal has been finalized and the transaction + ** successfully committed, but the EXCLUSIVE lock is still held on the + ** file. So it is safe to truncate the database file to its minimum + ** required size. */ + assert( pPager->eLock==EXCLUSIVE_LOCK ); + rc = pager_truncate(pPager, pPager->dbSize); + } + + if( rc==SQLITE_OK && bCommit ){ + rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_COMMIT_PHASETWO, 0); + if( rc==SQLITE_NOTFOUND ) rc = SQLITE_OK; + } + + if( !pPager->exclusiveMode + && (!pagerUseWal(pPager) || sqlite3WalExclusiveMode(pPager->pWal, 0)) + ){ + rc2 = pagerUnlockDb(pPager, SHARED_LOCK); + } + pPager->eState = PAGER_READER; + pPager->setSuper = 0; + + return (rc==SQLITE_OK?rc2:rc); +} + +/* Forward reference */ +static int pager_playback(Pager *pPager, int isHot); + +/* +** Execute a rollback if a transaction is active and unlock the +** database file. +** +** If the pager has already entered the ERROR state, do not attempt +** the rollback at this time. Instead, pager_unlock() is called. The +** call to pager_unlock() will discard all in-memory pages, unlock +** the database file and move the pager back to OPEN state. If this +** means that there is a hot-journal left in the file-system, the next +** connection to obtain a shared lock on the pager (which may be this one) +** will roll it back. +** +** If the pager has not already entered the ERROR state, but an IO or +** malloc error occurs during a rollback, then this will itself cause +** the pager to enter the ERROR state. Which will be cleared by the +** call to pager_unlock(), as described above. +*/ +static void pagerUnlockAndRollback(Pager *pPager){ + if( pPager->eState!=PAGER_ERROR && pPager->eState!=PAGER_OPEN ){ + assert( assert_pager_state(pPager) ); + if( pPager->eState>=PAGER_WRITER_LOCKED ){ + sqlite3BeginBenignMalloc(); + sqlite3PagerRollback(pPager); + sqlite3EndBenignMalloc(); + }else if( !pPager->exclusiveMode ){ + assert( pPager->eState==PAGER_READER ); + pager_end_transaction(pPager, 0, 0); + } + }else if( pPager->eState==PAGER_ERROR + && pPager->journalMode==PAGER_JOURNALMODE_MEMORY + && isOpen(pPager->jfd) + ){ + /* Special case for a ROLLBACK due to I/O error with an in-memory + ** journal: We have to rollback immediately, before the journal is + ** closed, because once it is closed, all content is forgotten. */ + int errCode = pPager->errCode; + u8 eLock = pPager->eLock; + pPager->eState = PAGER_OPEN; + pPager->errCode = SQLITE_OK; + pPager->eLock = EXCLUSIVE_LOCK; + pager_playback(pPager, 1); + pPager->errCode = errCode; + pPager->eLock = eLock; + } + pager_unlock(pPager); +} + +/* +** Parameter aData must point to a buffer of pPager->pageSize bytes +** of data. Compute and return a checksum based on the contents of the +** page of data and the current value of pPager->cksumInit. +** +** This is not a real checksum. It is really just the sum of the +** random initial value (pPager->cksumInit) and every 200th byte +** of the page data, starting with byte offset (pPager->pageSize%200). +** Each byte is interpreted as an 8-bit unsigned integer. +** +** Changing the formula used to compute this checksum results in an +** incompatible journal file format. +** +** If journal corruption occurs due to a power failure, the most likely +** scenario is that one end or the other of the record will be changed. +** It is much less likely that the two ends of the journal record will be +** correct and the middle be corrupt. Thus, this "checksum" scheme, +** though fast and simple, catches the mostly likely kind of corruption. +*/ +static u32 pager_cksum(Pager *pPager, const u8 *aData){ + u32 cksum = pPager->cksumInit; /* Checksum value to return */ + int i = pPager->pageSize-200; /* Loop counter */ + while( i>0 ){ + cksum += aData[i]; + i -= 200; + } + return cksum; +} + +/* +** Read a single page from either the journal file (if isMainJrnl==1) or +** from the sub-journal (if isMainJrnl==0) and playback that page. +** The page begins at offset *pOffset into the file. The *pOffset +** value is increased to the start of the next page in the journal. +** +** The main rollback journal uses checksums - the statement journal does +** not. +** +** If the page number of the page record read from the (sub-)journal file +** is greater than the current value of Pager.dbSize, then playback is +** skipped and SQLITE_OK is returned. +** +** If pDone is not NULL, then it is a record of pages that have already +** been played back. If the page at *pOffset has already been played back +** (if the corresponding pDone bit is set) then skip the playback. +** Make sure the pDone bit corresponding to the *pOffset page is set +** prior to returning. +** +** If the page record is successfully read from the (sub-)journal file +** and played back, then SQLITE_OK is returned. If an IO error occurs +** while reading the record from the (sub-)journal file or while writing +** to the database file, then the IO error code is returned. If data +** is successfully read from the (sub-)journal file but appears to be +** corrupted, SQLITE_DONE is returned. Data is considered corrupted in +** two circumstances: +** +** * If the record page-number is illegal (0 or PAGER_SJ_PGNO), or +** * If the record is being rolled back from the main journal file +** and the checksum field does not match the record content. +** +** Neither of these two scenarios are possible during a savepoint rollback. +** +** If this is a savepoint rollback, then memory may have to be dynamically +** allocated by this function. If this is the case and an allocation fails, +** SQLITE_NOMEM is returned. +*/ +static int pager_playback_one_page( + Pager *pPager, /* The pager being played back */ + i64 *pOffset, /* Offset of record to playback */ + Bitvec *pDone, /* Bitvec of pages already played back */ + int isMainJrnl, /* 1 -> main journal. 0 -> sub-journal. */ + int isSavepnt /* True for a savepoint rollback */ +){ + int rc; + PgHdr *pPg; /* An existing page in the cache */ + Pgno pgno; /* The page number of a page in journal */ + u32 cksum; /* Checksum used for sanity checking */ + char *aData; /* Temporary storage for the page */ + sqlite3_file *jfd; /* The file descriptor for the journal file */ + int isSynced; /* True if journal page is synced */ + + assert( (isMainJrnl&~1)==0 ); /* isMainJrnl is 0 or 1 */ + assert( (isSavepnt&~1)==0 ); /* isSavepnt is 0 or 1 */ + assert( isMainJrnl || pDone ); /* pDone always used on sub-journals */ + assert( isSavepnt || pDone==0 ); /* pDone never used on non-savepoint */ + + aData = pPager->pTmpSpace; + assert( aData ); /* Temp storage must have already been allocated */ + assert( pagerUseWal(pPager)==0 || (!isMainJrnl && isSavepnt) ); + + /* Either the state is greater than PAGER_WRITER_CACHEMOD (a transaction + ** or savepoint rollback done at the request of the caller) or this is + ** a hot-journal rollback. If it is a hot-journal rollback, the pager + ** is in state OPEN and holds an EXCLUSIVE lock. Hot-journal rollback + ** only reads from the main journal, not the sub-journal. + */ + assert( pPager->eState>=PAGER_WRITER_CACHEMOD + || (pPager->eState==PAGER_OPEN && pPager->eLock==EXCLUSIVE_LOCK) + ); + assert( pPager->eState>=PAGER_WRITER_CACHEMOD || isMainJrnl ); + + /* Read the page number and page data from the journal or sub-journal + ** file. Return an error code to the caller if an IO error occurs. + */ + jfd = isMainJrnl ? pPager->jfd : pPager->sjfd; + rc = read32bits(jfd, *pOffset, &pgno); + if( rc!=SQLITE_OK ) return rc; + rc = sqlite3OsRead(jfd, (u8*)aData, pPager->pageSize, (*pOffset)+4); + if( rc!=SQLITE_OK ) return rc; + *pOffset += pPager->pageSize + 4 + isMainJrnl*4; + + /* Sanity checking on the page. This is more important that I originally + ** thought. If a power failure occurs while the journal is being written, + ** it could cause invalid data to be written into the journal. We need to + ** detect this invalid data (with high probability) and ignore it. + */ + if( pgno==0 || pgno==PAGER_SJ_PGNO(pPager) ){ + assert( !isSavepnt ); + return SQLITE_DONE; + } + if( pgno>(Pgno)pPager->dbSize || sqlite3BitvecTest(pDone, pgno) ){ + return SQLITE_OK; + } + if( isMainJrnl ){ + rc = read32bits(jfd, (*pOffset)-4, &cksum); + if( rc ) return rc; + if( !isSavepnt && pager_cksum(pPager, (u8*)aData)!=cksum ){ + return SQLITE_DONE; + } + } + + /* If this page has already been played back before during the current + ** rollback, then don't bother to play it back again. + */ + if( pDone && (rc = sqlite3BitvecSet(pDone, pgno))!=SQLITE_OK ){ + return rc; + } + + /* When playing back page 1, restore the nReserve setting + */ + if( pgno==1 && pPager->nReserve!=((u8*)aData)[20] ){ + pPager->nReserve = ((u8*)aData)[20]; + } + + /* If the pager is in CACHEMOD state, then there must be a copy of this + ** page in the pager cache. In this case just update the pager cache, + ** not the database file. The page is left marked dirty in this case. + ** + ** An exception to the above rule: If the database is in no-sync mode + ** and a page is moved during an incremental vacuum then the page may + ** not be in the pager cache. Later: if a malloc() or IO error occurs + ** during a Movepage() call, then the page may not be in the cache + ** either. So the condition described in the above paragraph is not + ** assert()able. + ** + ** If in WRITER_DBMOD, WRITER_FINISHED or OPEN state, then we update the + ** pager cache if it exists and the main file. The page is then marked + ** not dirty. Since this code is only executed in PAGER_OPEN state for + ** a hot-journal rollback, it is guaranteed that the page-cache is empty + ** if the pager is in OPEN state. + ** + ** Ticket #1171: The statement journal might contain page content that is + ** different from the page content at the start of the transaction. + ** This occurs when a page is changed prior to the start of a statement + ** then changed again within the statement. When rolling back such a + ** statement we must not write to the original database unless we know + ** for certain that original page contents are synced into the main rollback + ** journal. Otherwise, a power loss might leave modified data in the + ** database file without an entry in the rollback journal that can + ** restore the database to its original form. Two conditions must be + ** met before writing to the database files. (1) the database must be + ** locked. (2) we know that the original page content is fully synced + ** in the main journal either because the page is not in cache or else + ** the page is marked as needSync==0. + ** + ** 2008-04-14: When attempting to vacuum a corrupt database file, it + ** is possible to fail a statement on a database that does not yet exist. + ** Do not attempt to write if database file has never been opened. + */ + if( pagerUseWal(pPager) ){ + pPg = 0; + }else{ + pPg = sqlite3PagerLookup(pPager, pgno); + } + assert( pPg || !MEMDB ); + assert( pPager->eState!=PAGER_OPEN || pPg==0 || pPager->tempFile ); + PAGERTRACE(("PLAYBACK %d page %d hash(%08x) %s\n", + PAGERID(pPager), pgno, pager_datahash(pPager->pageSize, (u8*)aData), + (isMainJrnl?"main-journal":"sub-journal") + )); + if( isMainJrnl ){ + isSynced = pPager->noSync || (*pOffset <= pPager->journalHdr); + }else{ + isSynced = (pPg==0 || 0==(pPg->flags & PGHDR_NEED_SYNC)); + } + if( isOpen(pPager->fd) + && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN) + && isSynced + ){ + i64 ofst = (pgno-1)*(i64)pPager->pageSize; + testcase( !isSavepnt && pPg!=0 && (pPg->flags&PGHDR_NEED_SYNC)!=0 ); + assert( !pagerUseWal(pPager) ); + + /* Write the data read from the journal back into the database file. + ** This is usually safe even for an encrypted database - as the data + ** was encrypted before it was written to the journal file. The exception + ** is if the data was just read from an in-memory sub-journal. In that + ** case it must be encrypted here before it is copied into the database + ** file. */ + rc = sqlite3OsWrite(pPager->fd, (u8 *)aData, pPager->pageSize, ofst); + + if( pgno>pPager->dbFileSize ){ + pPager->dbFileSize = pgno; + } + if( pPager->pBackup ){ + sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)aData); + } + }else if( !isMainJrnl && pPg==0 ){ + /* If this is a rollback of a savepoint and data was not written to + ** the database and the page is not in-memory, there is a potential + ** problem. When the page is next fetched by the b-tree layer, it + ** will be read from the database file, which may or may not be + ** current. + ** + ** There are a couple of different ways this can happen. All are quite + ** obscure. When running in synchronous mode, this can only happen + ** if the page is on the free-list at the start of the transaction, then + ** populated, then moved using sqlite3PagerMovepage(). + ** + ** The solution is to add an in-memory page to the cache containing + ** the data just read from the sub-journal. Mark the page as dirty + ** and if the pager requires a journal-sync, then mark the page as + ** requiring a journal-sync before it is written. + */ + assert( isSavepnt ); + assert( (pPager->doNotSpill & SPILLFLAG_ROLLBACK)==0 ); + pPager->doNotSpill |= SPILLFLAG_ROLLBACK; + rc = sqlite3PagerGet(pPager, pgno, &pPg, 1); + assert( (pPager->doNotSpill & SPILLFLAG_ROLLBACK)!=0 ); + pPager->doNotSpill &= ~SPILLFLAG_ROLLBACK; + if( rc!=SQLITE_OK ) return rc; + sqlite3PcacheMakeDirty(pPg); + } + if( pPg ){ + /* No page should ever be explicitly rolled back that is in use, except + ** for page 1 which is held in use in order to keep the lock on the + ** database active. However such a page may be rolled back as a result + ** of an internal error resulting in an automatic call to + ** sqlite3PagerRollback(). + */ + void *pData; + pData = pPg->pData; + memcpy(pData, (u8*)aData, pPager->pageSize); + pPager->xReiniter(pPg); + /* It used to be that sqlite3PcacheMakeClean(pPg) was called here. But + ** that call was dangerous and had no detectable benefit since the cache + ** is normally cleaned by sqlite3PcacheCleanAll() after rollback and so + ** has been removed. */ + pager_set_pagehash(pPg); + + /* If this was page 1, then restore the value of Pager.dbFileVers. + ** Do this before any decoding. */ + if( pgno==1 ){ + memcpy(&pPager->dbFileVers, &((u8*)pData)[24],sizeof(pPager->dbFileVers)); + } + sqlite3PcacheRelease(pPg); + } + return rc; +} + +/* +** Parameter zSuper is the name of a super-journal file. A single journal +** file that referred to the super-journal file has just been rolled back. +** This routine checks if it is possible to delete the super-journal file, +** and does so if it is. +** +** Argument zSuper may point to Pager.pTmpSpace. So that buffer is not +** available for use within this function. +** +** When a super-journal file is created, it is populated with the names +** of all of its child journals, one after another, formatted as utf-8 +** encoded text. The end of each child journal file is marked with a +** nul-terminator byte (0x00). i.e. the entire contents of a super-journal +** file for a transaction involving two databases might be: +** +** "/home/bill/a.db-journal\x00/home/bill/b.db-journal\x00" +** +** A super-journal file may only be deleted once all of its child +** journals have been rolled back. +** +** This function reads the contents of the super-journal file into +** memory and loops through each of the child journal names. For +** each child journal, it checks if: +** +** * if the child journal exists, and if so +** * if the child journal contains a reference to super-journal +** file zSuper +** +** If a child journal can be found that matches both of the criteria +** above, this function returns without doing anything. Otherwise, if +** no such child journal can be found, file zSuper is deleted from +** the file-system using sqlite3OsDelete(). +** +** If an IO error within this function, an error code is returned. This +** function allocates memory by calling sqlite3Malloc(). If an allocation +** fails, SQLITE_NOMEM is returned. Otherwise, if no IO or malloc errors +** occur, SQLITE_OK is returned. +** +** TODO: This function allocates a single block of memory to load +** the entire contents of the super-journal file. This could be +** a couple of kilobytes or so - potentially larger than the page +** size. +*/ +static int pager_delsuper(Pager *pPager, const char *zSuper){ + sqlite3_vfs *pVfs = pPager->pVfs; + int rc; /* Return code */ + sqlite3_file *pSuper; /* Malloc'd super-journal file descriptor */ + sqlite3_file *pJournal; /* Malloc'd child-journal file descriptor */ + char *zSuperJournal = 0; /* Contents of super-journal file */ + i64 nSuperJournal; /* Size of super-journal file */ + char *zJournal; /* Pointer to one journal within MJ file */ + char *zSuperPtr; /* Space to hold super-journal filename */ + char *zFree = 0; /* Free this buffer */ + i64 nSuperPtr; /* Amount of space allocated to zSuperPtr[] */ + + /* Allocate space for both the pJournal and pSuper file descriptors. + ** If successful, open the super-journal file for reading. + */ + pSuper = (sqlite3_file *)sqlite3MallocZero(2 * (i64)pVfs->szOsFile); + if( !pSuper ){ + rc = SQLITE_NOMEM_BKPT; + pJournal = 0; + }else{ + const int flags = (SQLITE_OPEN_READONLY|SQLITE_OPEN_SUPER_JOURNAL); + rc = sqlite3OsOpen(pVfs, zSuper, pSuper, flags, 0); + pJournal = (sqlite3_file *)(((u8 *)pSuper) + pVfs->szOsFile); + } + if( rc!=SQLITE_OK ) goto delsuper_out; + + /* Load the entire super-journal file into space obtained from + ** sqlite3_malloc() and pointed to by zSuperJournal. Also obtain + ** sufficient space (in zSuperPtr) to hold the names of super-journal + ** files extracted from regular rollback-journals. + */ + rc = sqlite3OsFileSize(pSuper, &nSuperJournal); + if( rc!=SQLITE_OK ) goto delsuper_out; + nSuperPtr = 1 + (i64)pVfs->mxPathname; + assert( nSuperJournal>=0 && nSuperPtr>0 ); + zFree = sqlite3Malloc(4 + nSuperJournal + nSuperPtr + 2); + if( !zFree ){ + rc = SQLITE_NOMEM_BKPT; + goto delsuper_out; + }else{ + assert( nSuperJournal<=0x7fffffff ); + } + zFree[0] = zFree[1] = zFree[2] = zFree[3] = 0; + zSuperJournal = &zFree[4]; + zSuperPtr = &zSuperJournal[nSuperJournal+2]; + rc = sqlite3OsRead(pSuper, zSuperJournal, (int)nSuperJournal, 0); + if( rc!=SQLITE_OK ) goto delsuper_out; + zSuperJournal[nSuperJournal] = 0; + zSuperJournal[nSuperJournal+1] = 0; + + zJournal = zSuperJournal; + while( (zJournal-zSuperJournal)pageSize bytes). +** If the file on disk is currently larger than nPage pages, then use the VFS +** xTruncate() method to truncate it. +** +** Or, it might be the case that the file on disk is smaller than +** nPage pages. Some operating system implementations can get confused if +** you try to truncate a file to some size that is larger than it +** currently is, so detect this case and write a single zero byte to +** the end of the new file instead. +** +** If successful, return SQLITE_OK. If an IO error occurs while modifying +** the database file, return the error code to the caller. +*/ +static int pager_truncate(Pager *pPager, Pgno nPage){ + int rc = SQLITE_OK; + assert( pPager->eState!=PAGER_ERROR ); + assert( pPager->eState!=PAGER_READER ); + PAGERTRACE(("Truncate %d npage %u\n", PAGERID(pPager), nPage)); + + + if( isOpen(pPager->fd) + && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN) + ){ + i64 currentSize, newSize; + int szPage = pPager->pageSize; + assert( pPager->eLock==EXCLUSIVE_LOCK ); + /* TODO: Is it safe to use Pager.dbFileSize here? */ + rc = sqlite3OsFileSize(pPager->fd, ¤tSize); + newSize = szPage*(i64)nPage; + if( rc==SQLITE_OK && currentSize!=newSize ){ + if( currentSize>newSize ){ + rc = sqlite3OsTruncate(pPager->fd, newSize); + }else if( (currentSize+szPage)<=newSize ){ + char *pTmp = pPager->pTmpSpace; + memset(pTmp, 0, szPage); + testcase( (newSize-szPage) == currentSize ); + testcase( (newSize-szPage) > currentSize ); + sqlite3OsFileControlHint(pPager->fd, SQLITE_FCNTL_SIZE_HINT, &newSize); + rc = sqlite3OsWrite(pPager->fd, pTmp, szPage, newSize-szPage); + } + if( rc==SQLITE_OK ){ + pPager->dbFileSize = nPage; + } + } + } + return rc; +} + +/* +** Return a sanitized version of the sector-size of OS file pFile. The +** return value is guaranteed to lie between 32 and MAX_SECTOR_SIZE. +*/ +SQLITE_PRIVATE int sqlite3SectorSize(sqlite3_file *pFile){ + int iRet = sqlite3OsSectorSize(pFile); + if( iRet<32 ){ + iRet = 512; + }else if( iRet>MAX_SECTOR_SIZE ){ + assert( MAX_SECTOR_SIZE>=512 ); + iRet = MAX_SECTOR_SIZE; + } + return iRet; +} + +/* +** Set the value of the Pager.sectorSize variable for the given +** pager based on the value returned by the xSectorSize method +** of the open database file. The sector size will be used +** to determine the size and alignment of journal header and +** super-journal pointers within created journal files. +** +** For temporary files the effective sector size is always 512 bytes. +** +** Otherwise, for non-temporary files, the effective sector size is +** the value returned by the xSectorSize() method rounded up to 32 if +** it is less than 32, or rounded down to MAX_SECTOR_SIZE if it +** is greater than MAX_SECTOR_SIZE. +** +** If the file has the SQLITE_IOCAP_POWERSAFE_OVERWRITE property, then set +** the effective sector size to its minimum value (512). The purpose of +** pPager->sectorSize is to define the "blast radius" of bytes that +** might change if a crash occurs while writing to a single byte in +** that range. But with POWERSAFE_OVERWRITE, the blast radius is zero +** (that is what POWERSAFE_OVERWRITE means), so we minimize the sector +** size. For backwards compatibility of the rollback journal file format, +** we cannot reduce the effective sector size below 512. +*/ +static void setSectorSize(Pager *pPager){ + assert( isOpen(pPager->fd) || pPager->tempFile ); + + if( pPager->tempFile + || (sqlite3OsDeviceCharacteristics(pPager->fd) & + SQLITE_IOCAP_POWERSAFE_OVERWRITE)!=0 + ){ + /* Sector size doesn't matter for temporary files. Also, the file + ** may not have been opened yet, in which case the OsSectorSize() + ** call will segfault. */ + pPager->sectorSize = 512; + }else{ + pPager->sectorSize = sqlite3SectorSize(pPager->fd); + } +} + +/* +** Playback the journal and thus restore the database file to +** the state it was in before we started making changes. +** +** The journal file format is as follows: +** +** (1) 8 byte prefix. A copy of aJournalMagic[]. +** (2) 4 byte big-endian integer which is the number of valid page records +** in the journal. If this value is 0xffffffff, then compute the +** number of page records from the journal size. +** (3) 4 byte big-endian integer which is the initial value for the +** sanity checksum. +** (4) 4 byte integer which is the number of pages to truncate the +** database to during a rollback. +** (5) 4 byte big-endian integer which is the sector size. The header +** is this many bytes in size. +** (6) 4 byte big-endian integer which is the page size. +** (7) zero padding out to the next sector size. +** (8) Zero or more pages instances, each as follows: +** + 4 byte page number. +** + pPager->pageSize bytes of data. +** + 4 byte checksum +** +** When we speak of the journal header, we mean the first 7 items above. +** Each entry in the journal is an instance of the 8th item. +** +** Call the value from the second bullet "nRec". nRec is the number of +** valid page entries in the journal. In most cases, you can compute the +** value of nRec from the size of the journal file. But if a power +** failure occurred while the journal was being written, it could be the +** case that the size of the journal file had already been increased but +** the extra entries had not yet made it safely to disk. In such a case, +** the value of nRec computed from the file size would be too large. For +** that reason, we always use the nRec value in the header. +** +** If the nRec value is 0xffffffff it means that nRec should be computed +** from the file size. This value is used when the user selects the +** no-sync option for the journal. A power failure could lead to corruption +** in this case. But for things like temporary table (which will be +** deleted when the power is restored) we don't care. +** +** If the file opened as the journal file is not a well-formed +** journal file then all pages up to the first corrupted page are rolled +** back (or no pages if the journal header is corrupted). The journal file +** is then deleted and SQLITE_OK returned, just as if no corruption had +** been encountered. +** +** If an I/O or malloc() error occurs, the journal-file is not deleted +** and an error code is returned. +** +** The isHot parameter indicates that we are trying to rollback a journal +** that might be a hot journal. Or, it could be that the journal is +** preserved because of JOURNALMODE_PERSIST or JOURNALMODE_TRUNCATE. +** If the journal really is hot, reset the pager cache prior rolling +** back any content. If the journal is merely persistent, no reset is +** needed. +*/ +static int pager_playback(Pager *pPager, int isHot){ + sqlite3_vfs *pVfs = pPager->pVfs; + i64 szJ; /* Size of the journal file in bytes */ + u32 nRec; /* Number of Records in the journal */ + u32 u; /* Unsigned loop counter */ + Pgno mxPg = 0; /* Size of the original file in pages */ + int rc; /* Result code of a subroutine */ + int res = 1; /* Value returned by sqlite3OsAccess() */ + char *zSuper = 0; /* Name of super-journal file if any */ + int needPagerReset; /* True to reset page prior to first page rollback */ + int nPlayback = 0; /* Total number of pages restored from journal */ + u32 savedPageSize = pPager->pageSize; + + /* Figure out how many records are in the journal. Abort early if + ** the journal is empty. + */ + assert( isOpen(pPager->jfd) ); + rc = sqlite3OsFileSize(pPager->jfd, &szJ); + if( rc!=SQLITE_OK ){ + goto end_playback; + } + + /* Read the super-journal name from the journal, if it is present. + ** If a super-journal file name is specified, but the file is not + ** present on disk, then the journal is not hot and does not need to be + ** played back. + ** + ** TODO: Technically the following is an error because it assumes that + ** buffer Pager.pTmpSpace is (mxPathname+1) bytes or larger. i.e. that + ** (pPager->pageSize >= pPager->pVfs->mxPathname+1). Using os_unix.c, + ** mxPathname is 512, which is the same as the minimum allowable value + ** for pageSize. + */ + zSuper = pPager->pTmpSpace; + rc = readSuperJournal(pPager->jfd, zSuper, 1+(i64)pPager->pVfs->mxPathname); + if( rc==SQLITE_OK && zSuper[0] ){ + rc = sqlite3OsAccess(pVfs, zSuper, SQLITE_ACCESS_EXISTS, &res); + } + zSuper = 0; + if( rc!=SQLITE_OK || !res ){ + goto end_playback; + } + pPager->journalOff = 0; + needPagerReset = isHot; + + /* This loop terminates either when a readJournalHdr() or + ** pager_playback_one_page() call returns SQLITE_DONE or an IO error + ** occurs. + */ + while( 1 ){ + /* Read the next journal header from the journal file. If there are + ** not enough bytes left in the journal file for a complete header, or + ** it is corrupted, then a process must have failed while writing it. + ** This indicates nothing more needs to be rolled back. + */ + rc = readJournalHdr(pPager, isHot, szJ, &nRec, &mxPg); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_DONE ){ + rc = SQLITE_OK; + } + goto end_playback; + } + + /* If nRec is 0xffffffff, then this journal was created by a process + ** working in no-sync mode. This means that the rest of the journal + ** file consists of pages, there are no more journal headers. Compute + ** the value of nRec based on this assumption. + */ + if( nRec==0xffffffff ){ + assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) ); + nRec = (int)((szJ - JOURNAL_HDR_SZ(pPager))/JOURNAL_PG_SZ(pPager)); + } + + /* If nRec is 0 and this rollback is of a transaction created by this + ** process and if this is the final header in the journal, then it means + ** that this part of the journal was being filled but has not yet been + ** synced to disk. Compute the number of pages based on the remaining + ** size of the file. + ** + ** The third term of the test was added to fix ticket #2565. + ** When rolling back a hot journal, nRec==0 always means that the next + ** chunk of the journal contains zero pages to be rolled back. But + ** when doing a ROLLBACK and the nRec==0 chunk is the last chunk in + ** the journal, it means that the journal might contain additional + ** pages that need to be rolled back and that the number of pages + ** should be computed based on the journal file size. + */ + if( nRec==0 && !isHot && + pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff ){ + nRec = (int)((szJ - pPager->journalOff) / JOURNAL_PG_SZ(pPager)); + } + + /* If this is the first header read from the journal, truncate the + ** database file back to its original size. + */ + if( pPager->journalOff==JOURNAL_HDR_SZ(pPager) ){ + rc = pager_truncate(pPager, mxPg); + if( rc!=SQLITE_OK ){ + goto end_playback; + } + pPager->dbSize = mxPg; + if( pPager->mxPgnomxPgno = mxPg; + } + } + + /* Copy original pages out of the journal and back into the + ** database file and/or page cache. + */ + for(u=0; ujournalOff,0,1,0); + if( rc==SQLITE_OK ){ + nPlayback++; + }else{ + if( rc==SQLITE_DONE ){ + pPager->journalOff = szJ; + break; + }else if( rc==SQLITE_IOERR_SHORT_READ ){ + /* If the journal has been truncated, simply stop reading and + ** processing the journal. This might happen if the journal was + ** not completely written and synced prior to a crash. In that + ** case, the database should have never been written in the + ** first place so it is OK to simply abandon the rollback. */ + rc = SQLITE_OK; + goto end_playback; + }else{ + /* If we are unable to rollback, quit and return the error + ** code. This will cause the pager to enter the error state + ** so that no further harm will be done. Perhaps the next + ** process to come along will be able to rollback the database. + */ + goto end_playback; + } + } + } + } + /*NOTREACHED*/ + assert( 0 ); + +end_playback: + if( rc==SQLITE_OK ){ + rc = sqlite3PagerSetPagesize(pPager, &savedPageSize, -1); + } + /* Following a rollback, the database file should be back in its original + ** state prior to the start of the transaction, so invoke the + ** SQLITE_FCNTL_DB_UNCHANGED file-control method to disable the + ** assertion that the transaction counter was modified. + */ +#ifdef SQLITE_DEBUG + sqlite3OsFileControlHint(pPager->fd,SQLITE_FCNTL_DB_UNCHANGED,0); +#endif + + /* If this playback is happening automatically as a result of an IO or + ** malloc error that occurred after the change-counter was updated but + ** before the transaction was committed, then the change-counter + ** modification may just have been reverted. If this happens in exclusive + ** mode, then subsequent transactions performed by the connection will not + ** update the change-counter at all. This may lead to cache inconsistency + ** problems for other processes at some point in the future. So, just + ** in case this has happened, clear the changeCountDone flag now. + */ + pPager->changeCountDone = pPager->tempFile; + + if( rc==SQLITE_OK ){ + /* Leave 4 bytes of space before the super-journal filename in memory. + ** This is because it may end up being passed to sqlite3OsOpen(), in + ** which case it requires 4 0x00 bytes in memory immediately before + ** the filename. */ + zSuper = &pPager->pTmpSpace[4]; + rc = readSuperJournal(pPager->jfd, zSuper, 1+(i64)pPager->pVfs->mxPathname); + testcase( rc!=SQLITE_OK ); + } + if( rc==SQLITE_OK + && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN) + ){ + rc = sqlite3PagerSync(pPager, 0); + } + if( rc==SQLITE_OK ){ + rc = pager_end_transaction(pPager, zSuper[0]!='\0', 0); + testcase( rc!=SQLITE_OK ); + } + if( rc==SQLITE_OK && zSuper[0] && res ){ + /* If there was a super-journal and this routine will return success, + ** see if it is possible to delete the super-journal. + */ + assert( zSuper==&pPager->pTmpSpace[4] ); + memset(pPager->pTmpSpace, 0, 4); + rc = pager_delsuper(pPager, zSuper); + testcase( rc!=SQLITE_OK ); + } + if( isHot && nPlayback ){ + sqlite3_log(SQLITE_NOTICE_RECOVER_ROLLBACK, "recovered %d pages from %s", + nPlayback, pPager->zJournal); + } + + /* The Pager.sectorSize variable may have been updated while rolling + ** back a journal created by a process with a different sector size + ** value. Reset it to the correct value for this process. + */ + setSectorSize(pPager); + return rc; +} + + +/* +** Read the content for page pPg out of the database file (or out of +** the WAL if that is where the most recent copy if found) into +** pPg->pData. A shared lock or greater must be held on the database +** file before this function is called. +** +** If page 1 is read, then the value of Pager.dbFileVers[] is set to +** the value read from the database file. +** +** If an IO error occurs, then the IO error is returned to the caller. +** Otherwise, SQLITE_OK is returned. +*/ +static int readDbPage(PgHdr *pPg){ + Pager *pPager = pPg->pPager; /* Pager object associated with page pPg */ + int rc = SQLITE_OK; /* Return code */ + +#ifndef SQLITE_OMIT_WAL + u32 iFrame = 0; /* Frame of WAL containing pgno */ + + assert( pPager->eState>=PAGER_READER && !MEMDB ); + assert( isOpen(pPager->fd) ); + + if( pagerUseWal(pPager) ){ + rc = sqlite3WalFindFrame(pPager->pWal, pPg->pgno, &iFrame); + if( rc ) return rc; + } + if( iFrame ){ + rc = sqlite3WalReadFrame(pPager->pWal, iFrame,pPager->pageSize,pPg->pData); + }else +#endif + { + i64 iOffset = (pPg->pgno-1)*(i64)pPager->pageSize; + rc = sqlite3OsRead(pPager->fd, pPg->pData, pPager->pageSize, iOffset); + if( rc==SQLITE_IOERR_SHORT_READ ){ + rc = SQLITE_OK; + } + } + + if( pPg->pgno==1 ){ + if( rc ){ + /* If the read is unsuccessful, set the dbFileVers[] to something + ** that will never be a valid file version. dbFileVers[] is a copy + ** of bytes 24..39 of the database. Bytes 28..31 should always be + ** zero or the size of the database in page. Bytes 32..35 and 35..39 + ** should be page numbers which are never 0xffffffff. So filling + ** pPager->dbFileVers[] with all 0xff bytes should suffice. + ** + ** For an encrypted database, the situation is more complex: bytes + ** 24..39 of the database are white noise. But the probability of + ** white noise equaling 16 bytes of 0xff is vanishingly small so + ** we should still be ok. + */ + memset(pPager->dbFileVers, 0xff, sizeof(pPager->dbFileVers)); + }else{ + u8 *dbFileVers = &((u8*)pPg->pData)[24]; + memcpy(&pPager->dbFileVers, dbFileVers, sizeof(pPager->dbFileVers)); + } + } + PAGER_INCR(sqlite3_pager_readdb_count); + PAGER_INCR(pPager->nRead); + IOTRACE(("PGIN %p %d\n", pPager, pPg->pgno)); + PAGERTRACE(("FETCH %d page %d hash(%08x)\n", + PAGERID(pPager), pPg->pgno, pager_pagehash(pPg))); + + return rc; +} + +/* +** Update the value of the change-counter at offsets 24 and 92 in +** the header and the sqlite version number at offset 96. +** +** This is an unconditional update. See also the pager_incr_changecounter() +** routine which only updates the change-counter if the update is actually +** needed, as determined by the pPager->changeCountDone state variable. +*/ +static void pager_write_changecounter(PgHdr *pPg){ + u32 change_counter; + if( NEVER(pPg==0) ) return; + + /* Increment the value just read and write it back to byte 24. */ + change_counter = sqlite3Get4byte((u8*)pPg->pPager->dbFileVers)+1; + put32bits(((char*)pPg->pData)+24, change_counter); + + /* Also store the SQLite version number in bytes 96..99 and in + ** bytes 92..95 store the change counter for which the version number + ** is valid. */ + put32bits(((char*)pPg->pData)+92, change_counter); + put32bits(((char*)pPg->pData)+96, SQLITE_VERSION_NUMBER); +} + +#ifndef SQLITE_OMIT_WAL +/* +** This function is invoked once for each page that has already been +** written into the log file when a WAL transaction is rolled back. +** Parameter iPg is the page number of said page. The pCtx argument +** is actually a pointer to the Pager structure. +** +** If page iPg is present in the cache, and has no outstanding references, +** it is discarded. Otherwise, if there are one or more outstanding +** references, the page content is reloaded from the database. If the +** attempt to reload content from the database is required and fails, +** return an SQLite error code. Otherwise, SQLITE_OK. +*/ +static int pagerUndoCallback(void *pCtx, Pgno iPg){ + int rc = SQLITE_OK; + Pager *pPager = (Pager *)pCtx; + PgHdr *pPg; + + assert( pagerUseWal(pPager) ); + pPg = sqlite3PagerLookup(pPager, iPg); + if( pPg ){ + if( sqlite3PcachePageRefcount(pPg)==1 ){ + sqlite3PcacheDrop(pPg); + }else{ + rc = readDbPage(pPg); + if( rc==SQLITE_OK ){ + pPager->xReiniter(pPg); + } + sqlite3PagerUnrefNotNull(pPg); + } + } + + /* Normally, if a transaction is rolled back, any backup processes are + ** updated as data is copied out of the rollback journal and into the + ** database. This is not generally possible with a WAL database, as + ** rollback involves simply truncating the log file. Therefore, if one + ** or more frames have already been written to the log (and therefore + ** also copied into the backup databases) as part of this transaction, + ** the backups must be restarted. + */ + sqlite3BackupRestart(pPager->pBackup); + + return rc; +} + +/* +** This function is called to rollback a transaction on a WAL database. +*/ +static int pagerRollbackWal(Pager *pPager){ + int rc; /* Return Code */ + PgHdr *pList; /* List of dirty pages to revert */ + + /* For all pages in the cache that are currently dirty or have already + ** been written (but not committed) to the log file, do one of the + ** following: + ** + ** + Discard the cached page (if refcount==0), or + ** + Reload page content from the database (if refcount>0). + */ + pPager->dbSize = pPager->dbOrigSize; + rc = sqlite3WalUndo(pPager->pWal, pagerUndoCallback, (void *)pPager); + pList = sqlite3PcacheDirtyList(pPager->pPCache); + while( pList && rc==SQLITE_OK ){ + PgHdr *pNext = pList->pDirty; + rc = pagerUndoCallback((void *)pPager, pList->pgno); + pList = pNext; + } + + return rc; +} + +/* +** This function is a wrapper around sqlite3WalFrames(). As well as logging +** the contents of the list of pages headed by pList (connected by pDirty), +** this function notifies any active backup processes that the pages have +** changed. +** +** The list of pages passed into this routine is always sorted by page number. +** Hence, if page 1 appears anywhere on the list, it will be the first page. +*/ +static int pagerWalFrames( + Pager *pPager, /* Pager object */ + PgHdr *pList, /* List of frames to log */ + Pgno nTruncate, /* Database size after this commit */ + int isCommit /* True if this is a commit */ +){ + int rc; /* Return code */ + int nList; /* Number of pages in pList */ + PgHdr *p; /* For looping over pages */ + + assert( pPager->pWal ); + assert( pList ); +#ifdef SQLITE_DEBUG + /* Verify that the page list is in ascending order */ + for(p=pList; p && p->pDirty; p=p->pDirty){ + assert( p->pgno < p->pDirty->pgno ); + } +#endif + + assert( pList->pDirty==0 || isCommit ); + if( isCommit ){ + /* If a WAL transaction is being committed, there is no point in writing + ** any pages with page numbers greater than nTruncate into the WAL file. + ** They will never be read by any client. So remove them from the pDirty + ** list here. */ + PgHdr **ppNext = &pList; + nList = 0; + for(p=pList; (*ppNext = p)!=0; p=p->pDirty){ + if( p->pgno<=nTruncate ){ + ppNext = &p->pDirty; + nList++; + } + } + assert( pList ); + }else{ + nList = 1; + } + pPager->aStat[PAGER_STAT_WRITE] += nList; + + if( pList->pgno==1 ) pager_write_changecounter(pList); + rc = sqlite3WalFrames(pPager->pWal, + pPager->pageSize, pList, nTruncate, isCommit, pPager->walSyncFlags + ); + if( rc==SQLITE_OK && pPager->pBackup ){ + for(p=pList; p; p=p->pDirty){ + sqlite3BackupUpdate(pPager->pBackup, p->pgno, (u8 *)p->pData); + } + } + +#ifdef SQLITE_CHECK_PAGES + pList = sqlite3PcacheDirtyList(pPager->pPCache); + for(p=pList; p; p=p->pDirty){ + pager_set_pagehash(p); + } +#endif + + return rc; +} + +/* +** Begin a read transaction on the WAL. +** +** This routine used to be called "pagerOpenSnapshot()" because it essentially +** makes a snapshot of the database at the current point in time and preserves +** that snapshot for use by the reader in spite of concurrently changes by +** other writers or checkpointers. +*/ +static int pagerBeginReadTransaction(Pager *pPager){ + int rc; /* Return code */ + int changed = 0; /* True if cache must be reset */ + + assert( pagerUseWal(pPager) ); + assert( pPager->eState==PAGER_OPEN || pPager->eState==PAGER_READER ); + + /* sqlite3WalEndReadTransaction() was not called for the previous + ** transaction in locking_mode=EXCLUSIVE. So call it now. If we + ** are in locking_mode=NORMAL and EndRead() was previously called, + ** the duplicate call is harmless. + */ + sqlite3WalEndReadTransaction(pPager->pWal); + + rc = sqlite3WalBeginReadTransaction(pPager->pWal, &changed); + if( rc!=SQLITE_OK || changed ){ + pager_reset(pPager); + if( USEFETCH(pPager) ) sqlite3OsUnfetch(pPager->fd, 0, 0); + } + + return rc; +} +#endif + +/* +** This function is called as part of the transition from PAGER_OPEN +** to PAGER_READER state to determine the size of the database file +** in pages (assuming the page size currently stored in Pager.pageSize). +** +** If no error occurs, SQLITE_OK is returned and the size of the database +** in pages is stored in *pnPage. Otherwise, an error code (perhaps +** SQLITE_IOERR_FSTAT) is returned and *pnPage is left unmodified. +*/ +static int pagerPagecount(Pager *pPager, Pgno *pnPage){ + Pgno nPage; /* Value to return via *pnPage */ + + /* Query the WAL sub-system for the database size. The WalDbsize() + ** function returns zero if the WAL is not open (i.e. Pager.pWal==0), or + ** if the database size is not available. The database size is not + ** available from the WAL sub-system if the log file is empty or + ** contains no valid committed transactions. + */ + assert( pPager->eState==PAGER_OPEN ); + assert( pPager->eLock>=SHARED_LOCK ); + assert( isOpen(pPager->fd) ); + assert( pPager->tempFile==0 ); + nPage = sqlite3WalDbsize(pPager->pWal); + + /* If the number of pages in the database is not available from the + ** WAL sub-system, determine the page count based on the size of + ** the database file. If the size of the database file is not an + ** integer multiple of the page-size, round up the result. + */ + if( nPage==0 && ALWAYS(isOpen(pPager->fd)) ){ + i64 n = 0; /* Size of db file in bytes */ + int rc = sqlite3OsFileSize(pPager->fd, &n); + if( rc!=SQLITE_OK ){ + return rc; + } + nPage = (Pgno)((n+pPager->pageSize-1) / pPager->pageSize); + } + + /* If the current number of pages in the file is greater than the + ** configured maximum pager number, increase the allowed limit so + ** that the file can be read. + */ + if( nPage>pPager->mxPgno ){ + pPager->mxPgno = (Pgno)nPage; + } + + *pnPage = nPage; + return SQLITE_OK; +} + +#ifndef SQLITE_OMIT_WAL +/* +** Check if the *-wal file that corresponds to the database opened by pPager +** exists if the database is not empty, or verify that the *-wal file does +** not exist (by deleting it) if the database file is empty. +** +** If the database is not empty and the *-wal file exists, open the pager +** in WAL mode. If the database is empty or if no *-wal file exists and +** if no error occurs, make sure Pager.journalMode is not set to +** PAGER_JOURNALMODE_WAL. +** +** Return SQLITE_OK or an error code. +** +** The caller must hold a SHARED lock on the database file to call this +** function. Because an EXCLUSIVE lock on the db file is required to delete +** a WAL on a none-empty database, this ensures there is no race condition +** between the xAccess() below and an xDelete() being executed by some +** other connection. +*/ +static int pagerOpenWalIfPresent(Pager *pPager){ + int rc = SQLITE_OK; + assert( pPager->eState==PAGER_OPEN ); + assert( pPager->eLock>=SHARED_LOCK ); + + if( !pPager->tempFile ){ + int isWal; /* True if WAL file exists */ + rc = sqlite3OsAccess( + pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal + ); + if( rc==SQLITE_OK ){ + if( isWal ){ + Pgno nPage; /* Size of the database file */ + + rc = pagerPagecount(pPager, &nPage); + if( rc ) return rc; + if( nPage==0 ){ + rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0); + }else{ + testcase( sqlite3PcachePagecount(pPager->pPCache)==0 ); + rc = sqlite3PagerOpenWal(pPager, 0); + } + }else if( pPager->journalMode==PAGER_JOURNALMODE_WAL ){ + pPager->journalMode = PAGER_JOURNALMODE_DELETE; + } + } + } + return rc; +} +#endif + +/* +** Playback savepoint pSavepoint. Or, if pSavepoint==NULL, then playback +** the entire super-journal file. The case pSavepoint==NULL occurs when +** a ROLLBACK TO command is invoked on a SAVEPOINT that is a transaction +** savepoint. +** +** When pSavepoint is not NULL (meaning a non-transaction savepoint is +** being rolled back), then the rollback consists of up to three stages, +** performed in the order specified: +** +** * Pages are played back from the main journal starting at byte +** offset PagerSavepoint.iOffset and continuing to +** PagerSavepoint.iHdrOffset, or to the end of the main journal +** file if PagerSavepoint.iHdrOffset is zero. +** +** * If PagerSavepoint.iHdrOffset is not zero, then pages are played +** back starting from the journal header immediately following +** PagerSavepoint.iHdrOffset to the end of the main journal file. +** +** * Pages are then played back from the sub-journal file, starting +** with the PagerSavepoint.iSubRec and continuing to the end of +** the journal file. +** +** Throughout the rollback process, each time a page is rolled back, the +** corresponding bit is set in a bitvec structure (variable pDone in the +** implementation below). This is used to ensure that a page is only +** rolled back the first time it is encountered in either journal. +** +** If pSavepoint is NULL, then pages are only played back from the main +** journal file. There is no need for a bitvec in this case. +** +** In either case, before playback commences the Pager.dbSize variable +** is reset to the value that it held at the start of the savepoint +** (or transaction). No page with a page-number greater than this value +** is played back. If one is encountered it is simply skipped. +*/ +static int pagerPlaybackSavepoint(Pager *pPager, PagerSavepoint *pSavepoint){ + i64 szJ; /* Effective size of the main journal */ + i64 iHdrOff; /* End of first segment of main-journal records */ + int rc = SQLITE_OK; /* Return code */ + Bitvec *pDone = 0; /* Bitvec to ensure pages played back only once */ + + assert( pPager->eState!=PAGER_ERROR ); + assert( pPager->eState>=PAGER_WRITER_LOCKED ); + + /* Allocate a bitvec to use to store the set of pages rolled back */ + if( pSavepoint ){ + pDone = sqlite3BitvecCreate(pSavepoint->nOrig); + if( !pDone ){ + return SQLITE_NOMEM_BKPT; + } + } + + /* Set the database size back to the value it was before the savepoint + ** being reverted was opened. + */ + pPager->dbSize = pSavepoint ? pSavepoint->nOrig : pPager->dbOrigSize; + pPager->changeCountDone = pPager->tempFile; + + if( !pSavepoint && pagerUseWal(pPager) ){ + return pagerRollbackWal(pPager); + } + + /* Use pPager->journalOff as the effective size of the main rollback + ** journal. The actual file might be larger than this in + ** PAGER_JOURNALMODE_TRUNCATE or PAGER_JOURNALMODE_PERSIST. But anything + ** past pPager->journalOff is off-limits to us. + */ + szJ = pPager->journalOff; + assert( pagerUseWal(pPager)==0 || szJ==0 ); + + /* Begin by rolling back records from the main journal starting at + ** PagerSavepoint.iOffset and continuing to the next journal header. + ** There might be records in the main journal that have a page number + ** greater than the current database size (pPager->dbSize) but those + ** will be skipped automatically. Pages are added to pDone as they + ** are played back. + */ + if( pSavepoint && !pagerUseWal(pPager) ){ + iHdrOff = pSavepoint->iHdrOffset ? pSavepoint->iHdrOffset : szJ; + pPager->journalOff = pSavepoint->iOffset; + while( rc==SQLITE_OK && pPager->journalOffjournalOff, pDone, 1, 1); + } + assert( rc!=SQLITE_DONE ); + }else{ + pPager->journalOff = 0; + } + + /* Continue rolling back records out of the main journal starting at + ** the first journal header seen and continuing until the effective end + ** of the main journal file. Continue to skip out-of-range pages and + ** continue adding pages rolled back to pDone. + */ + while( rc==SQLITE_OK && pPager->journalOffjournalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff" + ** test is related to ticket #2565. See the discussion in the + ** pager_playback() function for additional information. + */ + if( nJRec==0 + && pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff + ){ + nJRec = (u32)((szJ - pPager->journalOff)/JOURNAL_PG_SZ(pPager)); + } + for(ii=0; rc==SQLITE_OK && iijournalOffjournalOff, pDone, 1, 1); + } + assert( rc!=SQLITE_DONE ); + } + assert( rc!=SQLITE_OK || pPager->journalOff>=szJ ); + + /* Finally, rollback pages from the sub-journal. Page that were + ** previously rolled back out of the main journal (and are hence in pDone) + ** will be skipped. Out-of-range pages are also skipped. + */ + if( pSavepoint ){ + u32 ii; /* Loop counter */ + i64 offset = (i64)pSavepoint->iSubRec*(4+pPager->pageSize); + + if( pagerUseWal(pPager) ){ + rc = sqlite3WalSavepointUndo(pPager->pWal, pSavepoint->aWalData); + } + for(ii=pSavepoint->iSubRec; rc==SQLITE_OK && iinSubRec; ii++){ + assert( offset==(i64)ii*(4+pPager->pageSize) ); + rc = pager_playback_one_page(pPager, &offset, pDone, 0, 1); + } + assert( rc!=SQLITE_DONE ); + } + + sqlite3BitvecDestroy(pDone); + if( rc==SQLITE_OK ){ + pPager->journalOff = szJ; + } + + return rc; +} + +/* +** Change the maximum number of in-memory pages that are allowed +** before attempting to recycle clean and unused pages. +*/ +SQLITE_PRIVATE void sqlite3PagerSetCachesize(Pager *pPager, int mxPage){ + sqlite3PcacheSetCachesize(pPager->pPCache, mxPage); +} + +/* +** Change the maximum number of in-memory pages that are allowed +** before attempting to spill pages to journal. +*/ +SQLITE_PRIVATE int sqlite3PagerSetSpillsize(Pager *pPager, int mxPage){ + return sqlite3PcacheSetSpillsize(pPager->pPCache, mxPage); +} + +/* +** Invoke SQLITE_FCNTL_MMAP_SIZE based on the current value of szMmap. +*/ +static void pagerFixMaplimit(Pager *pPager){ +#if SQLITE_MAX_MMAP_SIZE>0 + sqlite3_file *fd = pPager->fd; + if( isOpen(fd) && fd->pMethods->iVersion>=3 ){ + sqlite3_int64 sz; + sz = pPager->szMmap; + pPager->bUseFetch = (sz>0); + setGetterMethod(pPager); + sqlite3OsFileControlHint(pPager->fd, SQLITE_FCNTL_MMAP_SIZE, &sz); + } +#endif +} + +/* +** Change the maximum size of any memory mapping made of the database file. +*/ +SQLITE_PRIVATE void sqlite3PagerSetMmapLimit(Pager *pPager, sqlite3_int64 szMmap){ + pPager->szMmap = szMmap; + pagerFixMaplimit(pPager); +} + +/* +** Free as much memory as possible from the pager. +*/ +SQLITE_PRIVATE void sqlite3PagerShrink(Pager *pPager){ + sqlite3PcacheShrink(pPager->pPCache); +} + +/* +** Adjust settings of the pager to those specified in the pgFlags parameter. +** +** The "level" in pgFlags & PAGER_SYNCHRONOUS_MASK sets the robustness +** of the database to damage due to OS crashes or power failures by +** changing the number of syncs()s when writing the journals. +** There are four levels: +** +** OFF sqlite3OsSync() is never called. This is the default +** for temporary and transient files. +** +** NORMAL The journal is synced once before writes begin on the +** database. This is normally adequate protection, but +** it is theoretically possible, though very unlikely, +** that an inopertune power failure could leave the journal +** in a state which would cause damage to the database +** when it is rolled back. +** +** FULL The journal is synced twice before writes begin on the +** database (with some additional information - the nRec field +** of the journal header - being written in between the two +** syncs). If we assume that writing a +** single disk sector is atomic, then this mode provides +** assurance that the journal will not be corrupted to the +** point of causing damage to the database during rollback. +** +** EXTRA This is like FULL except that is also syncs the directory +** that contains the rollback journal after the rollback +** journal is unlinked. +** +** The above is for a rollback-journal mode. For WAL mode, OFF continues +** to mean that no syncs ever occur. NORMAL means that the WAL is synced +** prior to the start of checkpoint and that the database file is synced +** at the conclusion of the checkpoint if the entire content of the WAL +** was written back into the database. But no sync operations occur for +** an ordinary commit in NORMAL mode with WAL. FULL means that the WAL +** file is synced following each commit operation, in addition to the +** syncs associated with NORMAL. There is no difference between FULL +** and EXTRA for WAL mode. +** +** Do not confuse synchronous=FULL with SQLITE_SYNC_FULL. The +** SQLITE_SYNC_FULL macro means to use the MacOSX-style full-fsync +** using fcntl(F_FULLFSYNC). SQLITE_SYNC_NORMAL means to do an +** ordinary fsync() call. There is no difference between SQLITE_SYNC_FULL +** and SQLITE_SYNC_NORMAL on platforms other than MacOSX. But the +** synchronous=FULL versus synchronous=NORMAL setting determines when +** the xSync primitive is called and is relevant to all platforms. +** +** Numeric values associated with these states are OFF==1, NORMAL=2, +** and FULL=3. +*/ +SQLITE_PRIVATE void sqlite3PagerSetFlags( + Pager *pPager, /* The pager to set safety level for */ + unsigned pgFlags /* Various flags */ +){ + unsigned level = pgFlags & PAGER_SYNCHRONOUS_MASK; + if( pPager->tempFile || level==PAGER_SYNCHRONOUS_OFF ){ + pPager->noSync = 1; + pPager->fullSync = 0; + pPager->extraSync = 0; + }else{ + pPager->noSync = 0; + pPager->fullSync = level>=PAGER_SYNCHRONOUS_FULL ?1:0; + + /* Set Pager.extraSync if "PRAGMA synchronous=EXTRA" is requested, or + ** if the file-system supports F2FS style atomic writes. If this flag + ** is set, SQLite syncs the directory to disk immediately after deleting + ** a journal file in "PRAGMA journal_mode=DELETE" mode. */ + if( level==PAGER_SYNCHRONOUS_EXTRA +#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE + || (sqlite3OsDeviceCharacteristics(pPager->fd) & SQLITE_IOCAP_BATCH_ATOMIC) +#endif + ){ + pPager->extraSync = 1; + }else{ + pPager->extraSync = 0; + } + } + if( pPager->noSync ){ + pPager->syncFlags = 0; + }else if( pgFlags & PAGER_FULLFSYNC ){ + pPager->syncFlags = SQLITE_SYNC_FULL; + }else{ + pPager->syncFlags = SQLITE_SYNC_NORMAL; + } + pPager->walSyncFlags = (pPager->syncFlags<<2); + if( pPager->fullSync ){ + pPager->walSyncFlags |= pPager->syncFlags; + } + if( (pgFlags & PAGER_CKPT_FULLFSYNC) && !pPager->noSync ){ + pPager->walSyncFlags |= (SQLITE_SYNC_FULL<<2); + } + if( pgFlags & PAGER_CACHESPILL ){ + pPager->doNotSpill &= ~SPILLFLAG_OFF; + }else{ + pPager->doNotSpill |= SPILLFLAG_OFF; + } +} + +/* +** The following global variable is incremented whenever the library +** attempts to open a temporary file. This information is used for +** testing and analysis only. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_opentemp_count = 0; +#endif + +/* +** Open a temporary file. +** +** Write the file descriptor into *pFile. Return SQLITE_OK on success +** or some other error code if we fail. The OS will automatically +** delete the temporary file when it is closed. +** +** The flags passed to the VFS layer xOpen() call are those specified +** by parameter vfsFlags ORed with the following: +** +** SQLITE_OPEN_READWRITE +** SQLITE_OPEN_CREATE +** SQLITE_OPEN_EXCLUSIVE +** SQLITE_OPEN_DELETEONCLOSE +*/ +static int pagerOpentemp( + Pager *pPager, /* The pager object */ + sqlite3_file *pFile, /* Write the file descriptor here */ + int vfsFlags /* Flags passed through to the VFS */ +){ + int rc; /* Return code */ + +#ifdef SQLITE_TEST + sqlite3_opentemp_count++; /* Used for testing and analysis only */ +#endif + + vfsFlags |= SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | + SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_DELETEONCLOSE; + rc = sqlite3OsOpen(pPager->pVfs, 0, pFile, vfsFlags, 0); + assert( rc!=SQLITE_OK || isOpen(pFile) ); + return rc; +} + +/* +** Set the busy handler function. +** +** The pager invokes the busy-handler if sqlite3OsLock() returns +** SQLITE_BUSY when trying to upgrade from no-lock to a SHARED lock, +** or when trying to upgrade from a RESERVED lock to an EXCLUSIVE +** lock. It does *not* invoke the busy handler when upgrading from +** SHARED to RESERVED, or when upgrading from SHARED to EXCLUSIVE +** (which occurs during hot-journal rollback). Summary: +** +** Transition | Invokes xBusyHandler +** -------------------------------------------------------- +** NO_LOCK -> SHARED_LOCK | Yes +** SHARED_LOCK -> RESERVED_LOCK | No +** SHARED_LOCK -> EXCLUSIVE_LOCK | No +** RESERVED_LOCK -> EXCLUSIVE_LOCK | Yes +** +** If the busy-handler callback returns non-zero, the lock is +** retried. If it returns zero, then the SQLITE_BUSY error is +** returned to the caller of the pager API function. +*/ +SQLITE_PRIVATE void sqlite3PagerSetBusyHandler( + Pager *pPager, /* Pager object */ + int (*xBusyHandler)(void *), /* Pointer to busy-handler function */ + void *pBusyHandlerArg /* Argument to pass to xBusyHandler */ +){ + void **ap; + pPager->xBusyHandler = xBusyHandler; + pPager->pBusyHandlerArg = pBusyHandlerArg; + ap = (void **)&pPager->xBusyHandler; + assert( ((int(*)(void *))(ap[0]))==xBusyHandler ); + assert( ap[1]==pBusyHandlerArg ); + sqlite3OsFileControlHint(pPager->fd, SQLITE_FCNTL_BUSYHANDLER, (void *)ap); +} + +/* +** Change the page size used by the Pager object. The new page size +** is passed in *pPageSize. +** +** If the pager is in the error state when this function is called, it +** is a no-op. The value returned is the error state error code (i.e. +** one of SQLITE_IOERR, an SQLITE_IOERR_xxx sub-code or SQLITE_FULL). +** +** Otherwise, if all of the following are true: +** +** * the new page size (value of *pPageSize) is valid (a power +** of two between 512 and SQLITE_MAX_PAGE_SIZE, inclusive), and +** +** * there are no outstanding page references, and +** +** * the database is either not an in-memory database or it is +** an in-memory database that currently consists of zero pages. +** +** then the pager object page size is set to *pPageSize. +** +** If the page size is changed, then this function uses sqlite3PagerMalloc() +** to obtain a new Pager.pTmpSpace buffer. If this allocation attempt +** fails, SQLITE_NOMEM is returned and the page size remains unchanged. +** In all other cases, SQLITE_OK is returned. +** +** If the page size is not changed, either because one of the enumerated +** conditions above is not true, the pager was in error state when this +** function was called, or because the memory allocation attempt failed, +** then *pPageSize is set to the old, retained page size before returning. +*/ +SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager *pPager, u32 *pPageSize, int nReserve){ + int rc = SQLITE_OK; + + /* It is not possible to do a full assert_pager_state() here, as this + ** function may be called from within PagerOpen(), before the state + ** of the Pager object is internally consistent. + ** + ** At one point this function returned an error if the pager was in + ** PAGER_ERROR state. But since PAGER_ERROR state guarantees that + ** there is at least one outstanding page reference, this function + ** is a no-op for that case anyhow. + */ + + u32 pageSize = *pPageSize; + assert( pageSize==0 || (pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE) ); + if( (pPager->memDb==0 || pPager->dbSize==0) + && sqlite3PcacheRefCount(pPager->pPCache)==0 + && pageSize && pageSize!=(u32)pPager->pageSize + ){ + char *pNew = NULL; /* New temp space */ + i64 nByte = 0; + + if( pPager->eState>PAGER_OPEN && isOpen(pPager->fd) ){ + rc = sqlite3OsFileSize(pPager->fd, &nByte); + } + if( rc==SQLITE_OK ){ + /* 8 bytes of zeroed overrun space is sufficient so that the b-tree + * cell header parser will never run off the end of the allocation */ + pNew = (char *)sqlite3PageMalloc(pageSize+8); + if( !pNew ){ + rc = SQLITE_NOMEM_BKPT; + }else{ + memset(pNew+pageSize, 0, 8); + } + } + + if( rc==SQLITE_OK ){ + pager_reset(pPager); + rc = sqlite3PcacheSetPageSize(pPager->pPCache, pageSize); + } + if( rc==SQLITE_OK ){ + sqlite3PageFree(pPager->pTmpSpace); + pPager->pTmpSpace = pNew; + pPager->dbSize = (Pgno)((nByte+pageSize-1)/pageSize); + pPager->pageSize = pageSize; + pPager->lckPgno = (Pgno)(PENDING_BYTE/pageSize) + 1; + }else{ + sqlite3PageFree(pNew); + } + } + + *pPageSize = pPager->pageSize; + if( rc==SQLITE_OK ){ + if( nReserve<0 ) nReserve = pPager->nReserve; + assert( nReserve>=0 && nReserve<1000 ); + pPager->nReserve = (i16)nReserve; + pagerFixMaplimit(pPager); + } + return rc; +} + +/* +** Return a pointer to the "temporary page" buffer held internally +** by the pager. This is a buffer that is big enough to hold the +** entire content of a database page. This buffer is used internally +** during rollback and will be overwritten whenever a rollback +** occurs. But other modules are free to use it too, as long as +** no rollbacks are happening. +*/ +SQLITE_PRIVATE void *sqlite3PagerTempSpace(Pager *pPager){ + return pPager->pTmpSpace; +} + +/* +** Attempt to set the maximum database page count if mxPage is positive. +** Make no changes if mxPage is zero or negative. And never reduce the +** maximum page count below the current size of the database. +** +** Regardless of mxPage, return the current maximum page count. +*/ +SQLITE_PRIVATE Pgno sqlite3PagerMaxPageCount(Pager *pPager, Pgno mxPage){ + if( mxPage>0 ){ + pPager->mxPgno = mxPage; + } + assert( pPager->eState!=PAGER_OPEN ); /* Called only by OP_MaxPgcnt */ + /* assert( pPager->mxPgno>=pPager->dbSize ); */ + /* OP_MaxPgcnt ensures that the parameter passed to this function is not + ** less than the total number of valid pages in the database. But this + ** may be less than Pager.dbSize, and so the assert() above is not valid */ + return pPager->mxPgno; +} + +/* +** The following set of routines are used to disable the simulated +** I/O error mechanism. These routines are used to avoid simulated +** errors in places where we do not care about errors. +** +** Unless -DSQLITE_TEST=1 is used, these routines are all no-ops +** and generate no code. +*/ +#ifdef SQLITE_TEST +SQLITE_API extern int sqlite3_io_error_pending; +SQLITE_API extern int sqlite3_io_error_hit; +static int saved_cnt; +void disable_simulated_io_errors(void){ + saved_cnt = sqlite3_io_error_pending; + sqlite3_io_error_pending = -1; +} +void enable_simulated_io_errors(void){ + sqlite3_io_error_pending = saved_cnt; +} +#else +# define disable_simulated_io_errors() +# define enable_simulated_io_errors() +#endif + +/* +** Read the first N bytes from the beginning of the file into memory +** that pDest points to. +** +** If the pager was opened on a transient file (zFilename==""), or +** opened on a file less than N bytes in size, the output buffer is +** zeroed and SQLITE_OK returned. The rationale for this is that this +** function is used to read database headers, and a new transient or +** zero sized database has a header than consists entirely of zeroes. +** +** If any IO error apart from SQLITE_IOERR_SHORT_READ is encountered, +** the error code is returned to the caller and the contents of the +** output buffer undefined. +*/ +SQLITE_PRIVATE int sqlite3PagerReadFileheader(Pager *pPager, int N, unsigned char *pDest){ + int rc = SQLITE_OK; + memset(pDest, 0, N); + assert( isOpen(pPager->fd) || pPager->tempFile ); + + /* This routine is only called by btree immediately after creating + ** the Pager object. There has not been an opportunity to transition + ** to WAL mode yet. + */ + assert( !pagerUseWal(pPager) ); + + if( isOpen(pPager->fd) ){ + IOTRACE(("DBHDR %p 0 %d\n", pPager, N)) + rc = sqlite3OsRead(pPager->fd, pDest, N, 0); + if( rc==SQLITE_IOERR_SHORT_READ ){ + rc = SQLITE_OK; + } + } + return rc; +} + +/* +** This function may only be called when a read-transaction is open on +** the pager. It returns the total number of pages in the database. +** +** However, if the file is between 1 and bytes in size, then +** this is considered a 1 page file. +*/ +SQLITE_PRIVATE void sqlite3PagerPagecount(Pager *pPager, int *pnPage){ + assert( pPager->eState>=PAGER_READER ); + assert( pPager->eState!=PAGER_WRITER_FINISHED ); + *pnPage = (int)pPager->dbSize; +} + + +/* +** Try to obtain a lock of type locktype on the database file. If +** a similar or greater lock is already held, this function is a no-op +** (returning SQLITE_OK immediately). +** +** Otherwise, attempt to obtain the lock using sqlite3OsLock(). Invoke +** the busy callback if the lock is currently not available. Repeat +** until the busy callback returns false or until the attempt to +** obtain the lock succeeds. +** +** Return SQLITE_OK on success and an error code if we cannot obtain +** the lock. If the lock is obtained successfully, set the Pager.state +** variable to locktype before returning. +*/ +static int pager_wait_on_lock(Pager *pPager, int locktype){ + int rc; /* Return code */ + + /* Check that this is either a no-op (because the requested lock is + ** already held), or one of the transitions that the busy-handler + ** may be invoked during, according to the comment above + ** sqlite3PagerSetBusyhandler(). + */ + assert( (pPager->eLock>=locktype) + || (pPager->eLock==NO_LOCK && locktype==SHARED_LOCK) + || (pPager->eLock==RESERVED_LOCK && locktype==EXCLUSIVE_LOCK) + ); + + do { + rc = pagerLockDb(pPager, locktype); + }while( rc==SQLITE_BUSY && pPager->xBusyHandler(pPager->pBusyHandlerArg) ); + return rc; +} + +/* +** Function assertTruncateConstraint(pPager) checks that one of the +** following is true for all dirty pages currently in the page-cache: +** +** a) The page number is less than or equal to the size of the +** current database image, in pages, OR +** +** b) if the page content were written at this time, it would not +** be necessary to write the current content out to the sub-journal. +** +** If the condition asserted by this function were not true, and the +** dirty page were to be discarded from the cache via the pagerStress() +** routine, pagerStress() would not write the current page content to +** the database file. If a savepoint transaction were rolled back after +** this happened, the correct behavior would be to restore the current +** content of the page. However, since this content is not present in either +** the database file or the portion of the rollback journal and +** sub-journal rolled back the content could not be restored and the +** database image would become corrupt. It is therefore fortunate that +** this circumstance cannot arise. +*/ +#if defined(SQLITE_DEBUG) +static void assertTruncateConstraintCb(PgHdr *pPg){ + Pager *pPager = pPg->pPager; + assert( pPg->flags&PGHDR_DIRTY ); + if( pPg->pgno>pPager->dbSize ){ /* if (a) is false */ + Pgno pgno = pPg->pgno; + int i; + for(i=0; ipPager->nSavepoint; i++){ + PagerSavepoint *p = &pPager->aSavepoint[i]; + assert( p->nOrigpInSavepoint,pgno) ); + } + } +} +static void assertTruncateConstraint(Pager *pPager){ + sqlite3PcacheIterateDirty(pPager->pPCache, assertTruncateConstraintCb); +} +#else +# define assertTruncateConstraint(pPager) +#endif + +/* +** Truncate the in-memory database file image to nPage pages. This +** function does not actually modify the database file on disk. It +** just sets the internal state of the pager object so that the +** truncation will be done when the current transaction is committed. +** +** This function is only called right before committing a transaction. +** Once this function has been called, the transaction must either be +** rolled back or committed. It is not safe to call this function and +** then continue writing to the database. +*/ +SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager *pPager, Pgno nPage){ + assert( pPager->dbSize>=nPage || CORRUPT_DB ); + assert( pPager->eState>=PAGER_WRITER_CACHEMOD ); + pPager->dbSize = nPage; + + /* At one point the code here called assertTruncateConstraint() to + ** ensure that all pages being truncated away by this operation are, + ** if one or more savepoints are open, present in the savepoint + ** journal so that they can be restored if the savepoint is rolled + ** back. This is no longer necessary as this function is now only + ** called right before committing a transaction. So although the + ** Pager object may still have open savepoints (Pager.nSavepoint!=0), + ** they cannot be rolled back. So the assertTruncateConstraint() call + ** is no longer correct. */ +} + + +/* +** This function is called before attempting a hot-journal rollback. It +** syncs the journal file to disk, then sets pPager->journalHdr to the +** size of the journal file so that the pager_playback() routine knows +** that the entire journal file has been synced. +** +** Syncing a hot-journal to disk before attempting to roll it back ensures +** that if a power-failure occurs during the rollback, the process that +** attempts rollback following system recovery sees the same journal +** content as this process. +** +** If everything goes as planned, SQLITE_OK is returned. Otherwise, +** an SQLite error code. +*/ +static int pagerSyncHotJournal(Pager *pPager){ + int rc = SQLITE_OK; + if( !pPager->noSync ){ + rc = sqlite3OsSync(pPager->jfd, SQLITE_SYNC_NORMAL); + } + if( rc==SQLITE_OK ){ + rc = sqlite3OsFileSize(pPager->jfd, &pPager->journalHdr); + } + return rc; +} + +#if SQLITE_MAX_MMAP_SIZE>0 +/* +** Obtain a reference to a memory mapped page object for page number pgno. +** The new object will use the pointer pData, obtained from xFetch(). +** If successful, set *ppPage to point to the new page reference +** and return SQLITE_OK. Otherwise, return an SQLite error code and set +** *ppPage to zero. +** +** Page references obtained by calling this function should be released +** by calling pagerReleaseMapPage(). +*/ +static int pagerAcquireMapPage( + Pager *pPager, /* Pager object */ + Pgno pgno, /* Page number */ + void *pData, /* xFetch()'d data for this page */ + PgHdr **ppPage /* OUT: Acquired page object */ +){ + PgHdr *p; /* Memory mapped page to return */ + + if( pPager->pMmapFreelist ){ + *ppPage = p = pPager->pMmapFreelist; + pPager->pMmapFreelist = p->pDirty; + p->pDirty = 0; + assert( pPager->nExtra>=8 ); + memset(p->pExtra, 0, 8); + }else{ + *ppPage = p = (PgHdr *)sqlite3MallocZero(sizeof(PgHdr) + pPager->nExtra); + if( p==0 ){ + sqlite3OsUnfetch(pPager->fd, (i64)(pgno-1) * pPager->pageSize, pData); + return SQLITE_NOMEM_BKPT; + } + p->pExtra = (void *)&p[1]; + assert( EIGHT_BYTE_ALIGNMENT( p->pExtra ) ); + p->flags = PGHDR_MMAP; + p->nRef = 1; + p->pPager = pPager; + } + + assert( p->pExtra==(void *)&p[1] ); + assert( p->pPage==0 ); + assert( p->flags==PGHDR_MMAP ); + assert( p->pPager==pPager ); + assert( p->nRef==1 ); + + p->pgno = pgno; + p->pData = pData; + pPager->nMmapOut++; + + return SQLITE_OK; +} +#endif + +/* +** Release a reference to page pPg. pPg must have been returned by an +** earlier call to pagerAcquireMapPage(). +*/ +static void pagerReleaseMapPage(PgHdr *pPg){ + Pager *pPager = pPg->pPager; + pPager->nMmapOut--; + pPg->pDirty = pPager->pMmapFreelist; + pPager->pMmapFreelist = pPg; + + assert( pPager->fd->pMethods->iVersion>=3 ); + sqlite3OsUnfetch(pPager->fd, (i64)(pPg->pgno-1)*pPager->pageSize, pPg->pData); +} + +/* +** Free all PgHdr objects stored in the Pager.pMmapFreelist list. +*/ +static void pagerFreeMapHdrs(Pager *pPager){ + PgHdr *p; + PgHdr *pNext; + for(p=pPager->pMmapFreelist; p; p=pNext){ + pNext = p->pDirty; + sqlite3_free(p); + } +} + +/* Verify that the database file has not be deleted or renamed out from +** under the pager. Return SQLITE_OK if the database is still where it ought +** to be on disk. Return non-zero (SQLITE_READONLY_DBMOVED or some other error +** code from sqlite3OsAccess()) if the database has gone missing. +*/ +static int databaseIsUnmoved(Pager *pPager){ + int bHasMoved = 0; + int rc; + + if( pPager->tempFile ) return SQLITE_OK; + if( pPager->dbSize==0 ) return SQLITE_OK; + assert( pPager->zFilename && pPager->zFilename[0] ); + rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_HAS_MOVED, &bHasMoved); + if( rc==SQLITE_NOTFOUND ){ + /* If the HAS_MOVED file-control is unimplemented, assume that the file + ** has not been moved. That is the historical behavior of SQLite: prior to + ** version 3.8.3, it never checked */ + rc = SQLITE_OK; + }else if( rc==SQLITE_OK && bHasMoved ){ + rc = SQLITE_READONLY_DBMOVED; + } + return rc; +} + + +/* +** Shutdown the page cache. Free all memory and close all files. +** +** If a transaction was in progress when this routine is called, that +** transaction is rolled back. All outstanding pages are invalidated +** and their memory is freed. Any attempt to use a page associated +** with this page cache after this function returns will likely +** result in a coredump. +** +** This function always succeeds. If a transaction is active an attempt +** is made to roll it back. If an error occurs during the rollback +** a hot journal may be left in the filesystem but no error is returned +** to the caller. +*/ +SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager, sqlite3 *db){ + u8 *pTmp = (u8*)pPager->pTmpSpace; + assert( db || pagerUseWal(pPager)==0 ); + assert( assert_pager_state(pPager) ); + disable_simulated_io_errors(); + sqlite3BeginBenignMalloc(); + pagerFreeMapHdrs(pPager); + /* pPager->errCode = 0; */ + pPager->exclusiveMode = 0; +#ifndef SQLITE_OMIT_WAL + { + u8 *a = 0; + assert( db || pPager->pWal==0 ); + if( db && 0==(db->flags & SQLITE_NoCkptOnClose) + && SQLITE_OK==databaseIsUnmoved(pPager) + ){ + a = pTmp; + } + sqlite3WalClose(pPager->pWal, db, pPager->walSyncFlags, pPager->pageSize,a); + pPager->pWal = 0; + } +#endif + pager_reset(pPager); + if( MEMDB ){ + pager_unlock(pPager); + }else{ + /* If it is open, sync the journal file before calling UnlockAndRollback. + ** If this is not done, then an unsynced portion of the open journal + ** file may be played back into the database. If a power failure occurs + ** while this is happening, the database could become corrupt. + ** + ** If an error occurs while trying to sync the journal, shift the pager + ** into the ERROR state. This causes UnlockAndRollback to unlock the + ** database and close the journal file without attempting to roll it + ** back or finalize it. The next database user will have to do hot-journal + ** rollback before accessing the database file. + */ + if( isOpen(pPager->jfd) ){ + pager_error(pPager, pagerSyncHotJournal(pPager)); + } + pagerUnlockAndRollback(pPager); + } + sqlite3EndBenignMalloc(); + enable_simulated_io_errors(); + PAGERTRACE(("CLOSE %d\n", PAGERID(pPager))); + IOTRACE(("CLOSE %p\n", pPager)) + sqlite3OsClose(pPager->jfd); + sqlite3OsClose(pPager->fd); + sqlite3PageFree(pTmp); + sqlite3PcacheClose(pPager->pPCache); + assert( !pPager->aSavepoint && !pPager->pInJournal ); + assert( !isOpen(pPager->jfd) && !isOpen(pPager->sjfd) ); + + sqlite3_free(pPager); + return SQLITE_OK; +} + +#if !defined(NDEBUG) || defined(SQLITE_TEST) +/* +** Return the page number for page pPg. +*/ +SQLITE_PRIVATE Pgno sqlite3PagerPagenumber(DbPage *pPg){ + return pPg->pgno; +} +#endif + +/* +** Increment the reference count for page pPg. +*/ +SQLITE_PRIVATE void sqlite3PagerRef(DbPage *pPg){ + sqlite3PcacheRef(pPg); +} + +/* +** Sync the journal. In other words, make sure all the pages that have +** been written to the journal have actually reached the surface of the +** disk and can be restored in the event of a hot-journal rollback. +** +** If the Pager.noSync flag is set, then this function is a no-op. +** Otherwise, the actions required depend on the journal-mode and the +** device characteristics of the file-system, as follows: +** +** * If the journal file is an in-memory journal file, no action need +** be taken. +** +** * Otherwise, if the device does not support the SAFE_APPEND property, +** then the nRec field of the most recently written journal header +** is updated to contain the number of journal records that have +** been written following it. If the pager is operating in full-sync +** mode, then the journal file is synced before this field is updated. +** +** * If the device does not support the SEQUENTIAL property, then +** journal file is synced. +** +** Or, in pseudo-code: +** +** if( NOT ){ +** if( NOT SAFE_APPEND ){ +** if( ) xSync(); +** +** } +** if( NOT SEQUENTIAL ) xSync(); +** } +** +** If successful, this routine clears the PGHDR_NEED_SYNC flag of every +** page currently held in memory before returning SQLITE_OK. If an IO +** error is encountered, then the IO error code is returned to the caller. +*/ +static int syncJournal(Pager *pPager, int newHdr){ + int rc; /* Return code */ + + assert( pPager->eState==PAGER_WRITER_CACHEMOD + || pPager->eState==PAGER_WRITER_DBMOD + ); + assert( assert_pager_state(pPager) ); + assert( !pagerUseWal(pPager) ); + + rc = sqlite3PagerExclusiveLock(pPager); + if( rc!=SQLITE_OK ) return rc; + + if( !pPager->noSync ){ + assert( !pPager->tempFile ); + if( isOpen(pPager->jfd) && pPager->journalMode!=PAGER_JOURNALMODE_MEMORY ){ + const int iDc = sqlite3OsDeviceCharacteristics(pPager->fd); + assert( isOpen(pPager->jfd) ); + + if( 0==(iDc&SQLITE_IOCAP_SAFE_APPEND) ){ + /* This block deals with an obscure problem. If the last connection + ** that wrote to this database was operating in persistent-journal + ** mode, then the journal file may at this point actually be larger + ** than Pager.journalOff bytes. If the next thing in the journal + ** file happens to be a journal-header (written as part of the + ** previous connection's transaction), and a crash or power-failure + ** occurs after nRec is updated but before this connection writes + ** anything else to the journal file (or commits/rolls back its + ** transaction), then SQLite may become confused when doing the + ** hot-journal rollback following recovery. It may roll back all + ** of this connections data, then proceed to rolling back the old, + ** out-of-date data that follows it. Database corruption. + ** + ** To work around this, if the journal file does appear to contain + ** a valid header following Pager.journalOff, then write a 0x00 + ** byte to the start of it to prevent it from being recognized. + ** + ** Variable iNextHdrOffset is set to the offset at which this + ** problematic header will occur, if it exists. aMagic is used + ** as a temporary buffer to inspect the first couple of bytes of + ** the potential journal header. + */ + i64 iNextHdrOffset; + u8 aMagic[8]; + u8 zHeader[sizeof(aJournalMagic)+4]; + + memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic)); + put32bits(&zHeader[sizeof(aJournalMagic)], pPager->nRec); + + iNextHdrOffset = journalHdrOffset(pPager); + rc = sqlite3OsRead(pPager->jfd, aMagic, 8, iNextHdrOffset); + if( rc==SQLITE_OK && 0==memcmp(aMagic, aJournalMagic, 8) ){ + static const u8 zerobyte = 0; + rc = sqlite3OsWrite(pPager->jfd, &zerobyte, 1, iNextHdrOffset); + } + if( rc!=SQLITE_OK && rc!=SQLITE_IOERR_SHORT_READ ){ + return rc; + } + + /* Write the nRec value into the journal file header. If in + ** full-synchronous mode, sync the journal first. This ensures that + ** all data has really hit the disk before nRec is updated to mark + ** it as a candidate for rollback. + ** + ** This is not required if the persistent media supports the + ** SAFE_APPEND property. Because in this case it is not possible + ** for garbage data to be appended to the file, the nRec field + ** is populated with 0xFFFFFFFF when the journal header is written + ** and never needs to be updated. + */ + if( pPager->fullSync && 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){ + PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager))); + IOTRACE(("JSYNC %p\n", pPager)) + rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags); + if( rc!=SQLITE_OK ) return rc; + } + IOTRACE(("JHDR %p %lld\n", pPager, pPager->journalHdr)); + rc = sqlite3OsWrite( + pPager->jfd, zHeader, sizeof(zHeader), pPager->journalHdr + ); + if( rc!=SQLITE_OK ) return rc; + } + if( 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){ + PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager))); + IOTRACE(("JSYNC %p\n", pPager)) + rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags| + (pPager->syncFlags==SQLITE_SYNC_FULL?SQLITE_SYNC_DATAONLY:0) + ); + if( rc!=SQLITE_OK ) return rc; + } + + pPager->journalHdr = pPager->journalOff; + if( newHdr && 0==(iDc&SQLITE_IOCAP_SAFE_APPEND) ){ + pPager->nRec = 0; + rc = writeJournalHdr(pPager); + if( rc!=SQLITE_OK ) return rc; + } + }else{ + pPager->journalHdr = pPager->journalOff; + } + } + + /* Unless the pager is in noSync mode, the journal file was just + ** successfully synced. Either way, clear the PGHDR_NEED_SYNC flag on + ** all pages. + */ + sqlite3PcacheClearSyncFlags(pPager->pPCache); + pPager->eState = PAGER_WRITER_DBMOD; + assert( assert_pager_state(pPager) ); + return SQLITE_OK; +} + +/* +** The argument is the first in a linked list of dirty pages connected +** by the PgHdr.pDirty pointer. This function writes each one of the +** in-memory pages in the list to the database file. The argument may +** be NULL, representing an empty list. In this case this function is +** a no-op. +** +** The pager must hold at least a RESERVED lock when this function +** is called. Before writing anything to the database file, this lock +** is upgraded to an EXCLUSIVE lock. If the lock cannot be obtained, +** SQLITE_BUSY is returned and no data is written to the database file. +** +** If the pager is a temp-file pager and the actual file-system file +** is not yet open, it is created and opened before any data is +** written out. +** +** Once the lock has been upgraded and, if necessary, the file opened, +** the pages are written out to the database file in list order. Writing +** a page is skipped if it meets either of the following criteria: +** +** * The page number is greater than Pager.dbSize, or +** * The PGHDR_DONT_WRITE flag is set on the page. +** +** If writing out a page causes the database file to grow, Pager.dbFileSize +** is updated accordingly. If page 1 is written out, then the value cached +** in Pager.dbFileVers[] is updated to match the new value stored in +** the database file. +** +** If everything is successful, SQLITE_OK is returned. If an IO error +** occurs, an IO error code is returned. Or, if the EXCLUSIVE lock cannot +** be obtained, SQLITE_BUSY is returned. +*/ +static int pager_write_pagelist(Pager *pPager, PgHdr *pList){ + int rc = SQLITE_OK; /* Return code */ + + /* This function is only called for rollback pagers in WRITER_DBMOD state. */ + assert( !pagerUseWal(pPager) ); + assert( pPager->tempFile || pPager->eState==PAGER_WRITER_DBMOD ); + assert( pPager->eLock==EXCLUSIVE_LOCK ); + assert( isOpen(pPager->fd) || pList->pDirty==0 ); + + /* If the file is a temp-file has not yet been opened, open it now. It + ** is not possible for rc to be other than SQLITE_OK if this branch + ** is taken, as pager_wait_on_lock() is a no-op for temp-files. + */ + if( !isOpen(pPager->fd) ){ + assert( pPager->tempFile && rc==SQLITE_OK ); + rc = pagerOpentemp(pPager, pPager->fd, pPager->vfsFlags); + } + + /* Before the first write, give the VFS a hint of what the final + ** file size will be. + */ + assert( rc!=SQLITE_OK || isOpen(pPager->fd) ); + if( rc==SQLITE_OK + && pPager->dbHintSizedbSize + && (pList->pDirty || pList->pgno>pPager->dbHintSize) + ){ + sqlite3_int64 szFile = pPager->pageSize * (sqlite3_int64)pPager->dbSize; + sqlite3OsFileControlHint(pPager->fd, SQLITE_FCNTL_SIZE_HINT, &szFile); + pPager->dbHintSize = pPager->dbSize; + } + + while( rc==SQLITE_OK && pList ){ + Pgno pgno = pList->pgno; + + /* If there are dirty pages in the page cache with page numbers greater + ** than Pager.dbSize, this means sqlite3PagerTruncateImage() was called to + ** make the file smaller (presumably by auto-vacuum code). Do not write + ** any such pages to the file. + ** + ** Also, do not write out any page that has the PGHDR_DONT_WRITE flag + ** set (set by sqlite3PagerDontWrite()). + */ + if( pgno<=pPager->dbSize && 0==(pList->flags&PGHDR_DONT_WRITE) ){ + i64 offset = (pgno-1)*(i64)pPager->pageSize; /* Offset to write */ + char *pData; /* Data to write */ + + assert( (pList->flags&PGHDR_NEED_SYNC)==0 ); + if( pList->pgno==1 ) pager_write_changecounter(pList); + + pData = pList->pData; + + /* Write out the page data. */ + rc = sqlite3OsWrite(pPager->fd, pData, pPager->pageSize, offset); + + /* If page 1 was just written, update Pager.dbFileVers to match + ** the value now stored in the database file. If writing this + ** page caused the database file to grow, update dbFileSize. + */ + if( pgno==1 ){ + memcpy(&pPager->dbFileVers, &pData[24], sizeof(pPager->dbFileVers)); + } + if( pgno>pPager->dbFileSize ){ + pPager->dbFileSize = pgno; + } + pPager->aStat[PAGER_STAT_WRITE]++; + + /* Update any backup objects copying the contents of this pager. */ + sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)pList->pData); + + PAGERTRACE(("STORE %d page %d hash(%08x)\n", + PAGERID(pPager), pgno, pager_pagehash(pList))); + IOTRACE(("PGOUT %p %d\n", pPager, pgno)); + PAGER_INCR(sqlite3_pager_writedb_count); + }else{ + PAGERTRACE(("NOSTORE %d page %d\n", PAGERID(pPager), pgno)); + } + pager_set_pagehash(pList); + pList = pList->pDirty; + } + + return rc; +} + +/* +** Ensure that the sub-journal file is open. If it is already open, this +** function is a no-op. +** +** SQLITE_OK is returned if everything goes according to plan. An +** SQLITE_IOERR_XXX error code is returned if a call to sqlite3OsOpen() +** fails. +*/ +static int openSubJournal(Pager *pPager){ + int rc = SQLITE_OK; + if( !isOpen(pPager->sjfd) ){ + const int flags = SQLITE_OPEN_SUBJOURNAL | SQLITE_OPEN_READWRITE + | SQLITE_OPEN_CREATE | SQLITE_OPEN_EXCLUSIVE + | SQLITE_OPEN_DELETEONCLOSE; + int nStmtSpill = sqlite3Config.nStmtSpill; + if( pPager->journalMode==PAGER_JOURNALMODE_MEMORY || pPager->subjInMemory ){ + nStmtSpill = -1; + } + rc = sqlite3JournalOpen(pPager->pVfs, 0, pPager->sjfd, flags, nStmtSpill); + } + return rc; +} + +/* +** Append a record of the current state of page pPg to the sub-journal. +** +** If successful, set the bit corresponding to pPg->pgno in the bitvecs +** for all open savepoints before returning. +** +** This function returns SQLITE_OK if everything is successful, an IO +** error code if the attempt to write to the sub-journal fails, or +** SQLITE_NOMEM if a malloc fails while setting a bit in a savepoint +** bitvec. +*/ +static int subjournalPage(PgHdr *pPg){ + int rc = SQLITE_OK; + Pager *pPager = pPg->pPager; + if( pPager->journalMode!=PAGER_JOURNALMODE_OFF ){ + + /* Open the sub-journal, if it has not already been opened */ + assert( pPager->useJournal ); + assert( isOpen(pPager->jfd) || pagerUseWal(pPager) ); + assert( isOpen(pPager->sjfd) || pPager->nSubRec==0 ); + assert( pagerUseWal(pPager) + || pageInJournal(pPager, pPg) + || pPg->pgno>pPager->dbOrigSize + ); + rc = openSubJournal(pPager); + + /* If the sub-journal was opened successfully (or was already open), + ** write the journal record into the file. */ + if( rc==SQLITE_OK ){ + void *pData = pPg->pData; + i64 offset = (i64)pPager->nSubRec*(4+pPager->pageSize); + char *pData2; + pData2 = pData; + PAGERTRACE(("STMT-JOURNAL %d page %d\n", PAGERID(pPager), pPg->pgno)); + rc = write32bits(pPager->sjfd, offset, pPg->pgno); + if( rc==SQLITE_OK ){ + rc = sqlite3OsWrite(pPager->sjfd, pData2, pPager->pageSize, offset+4); + } + } + } + if( rc==SQLITE_OK ){ + pPager->nSubRec++; + assert( pPager->nSavepoint>0 ); + rc = addToSavepointBitvecs(pPager, pPg->pgno); + } + return rc; +} +static int subjournalPageIfRequired(PgHdr *pPg){ + if( subjRequiresPage(pPg) ){ + return subjournalPage(pPg); + }else{ + return SQLITE_OK; + } +} + +/* +** This function is called by the pcache layer when it has reached some +** soft memory limit. The first argument is a pointer to a Pager object +** (cast as a void*). The pager is always 'purgeable' (not an in-memory +** database). The second argument is a reference to a page that is +** currently dirty but has no outstanding references. The page +** is always associated with the Pager object passed as the first +** argument. +** +** The job of this function is to make pPg clean by writing its contents +** out to the database file, if possible. This may involve syncing the +** journal file. +** +** If successful, sqlite3PcacheMakeClean() is called on the page and +** SQLITE_OK returned. If an IO error occurs while trying to make the +** page clean, the IO error code is returned. If the page cannot be +** made clean for some other reason, but no error occurs, then SQLITE_OK +** is returned by sqlite3PcacheMakeClean() is not called. +*/ +static int pagerStress(void *p, PgHdr *pPg){ + Pager *pPager = (Pager *)p; + int rc = SQLITE_OK; + + assert( pPg->pPager==pPager ); + assert( pPg->flags&PGHDR_DIRTY ); + + /* The doNotSpill NOSYNC bit is set during times when doing a sync of + ** journal (and adding a new header) is not allowed. This occurs + ** during calls to sqlite3PagerWrite() while trying to journal multiple + ** pages belonging to the same sector. + ** + ** The doNotSpill ROLLBACK and OFF bits inhibits all cache spilling + ** regardless of whether or not a sync is required. This is set during + ** a rollback or by user request, respectively. + ** + ** Spilling is also prohibited when in an error state since that could + ** lead to database corruption. In the current implementation it + ** is impossible for sqlite3PcacheFetch() to be called with createFlag==3 + ** while in the error state, hence it is impossible for this routine to + ** be called in the error state. Nevertheless, we include a NEVER() + ** test for the error state as a safeguard against future changes. + */ + if( NEVER(pPager->errCode) ) return SQLITE_OK; + testcase( pPager->doNotSpill & SPILLFLAG_ROLLBACK ); + testcase( pPager->doNotSpill & SPILLFLAG_OFF ); + testcase( pPager->doNotSpill & SPILLFLAG_NOSYNC ); + if( pPager->doNotSpill + && ((pPager->doNotSpill & (SPILLFLAG_ROLLBACK|SPILLFLAG_OFF))!=0 + || (pPg->flags & PGHDR_NEED_SYNC)!=0) + ){ + return SQLITE_OK; + } + + pPager->aStat[PAGER_STAT_SPILL]++; + pPg->pDirty = 0; + if( pagerUseWal(pPager) ){ + /* Write a single frame for this page to the log. */ + rc = subjournalPageIfRequired(pPg); + if( rc==SQLITE_OK ){ + rc = pagerWalFrames(pPager, pPg, 0, 0); + } + }else{ + +#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE + if( pPager->tempFile==0 ){ + rc = sqlite3JournalCreate(pPager->jfd); + if( rc!=SQLITE_OK ) return pager_error(pPager, rc); + } +#endif + + /* Sync the journal file if required. */ + if( pPg->flags&PGHDR_NEED_SYNC + || pPager->eState==PAGER_WRITER_CACHEMOD + ){ + rc = syncJournal(pPager, 1); + } + + /* Write the contents of the page out to the database file. */ + if( rc==SQLITE_OK ){ + assert( (pPg->flags&PGHDR_NEED_SYNC)==0 ); + rc = pager_write_pagelist(pPager, pPg); + } + } + + /* Mark the page as clean. */ + if( rc==SQLITE_OK ){ + PAGERTRACE(("STRESS %d page %d\n", PAGERID(pPager), pPg->pgno)); + sqlite3PcacheMakeClean(pPg); + } + + return pager_error(pPager, rc); +} + +/* +** Flush all unreferenced dirty pages to disk. +*/ +SQLITE_PRIVATE int sqlite3PagerFlush(Pager *pPager){ + int rc = pPager->errCode; + if( !MEMDB ){ + PgHdr *pList = sqlite3PcacheDirtyList(pPager->pPCache); + assert( assert_pager_state(pPager) ); + while( rc==SQLITE_OK && pList ){ + PgHdr *pNext = pList->pDirty; + if( pList->nRef==0 ){ + rc = pagerStress((void*)pPager, pList); + } + pList = pNext; + } + } + + return rc; +} + +/* +** Allocate and initialize a new Pager object and put a pointer to it +** in *ppPager. The pager should eventually be freed by passing it +** to sqlite3PagerClose(). +** +** The zFilename argument is the path to the database file to open. +** If zFilename is NULL then a randomly-named temporary file is created +** and used as the file to be cached. Temporary files are be deleted +** automatically when they are closed. If zFilename is ":memory:" then +** all information is held in cache. It is never written to disk. +** This can be used to implement an in-memory database. +** +** The nExtra parameter specifies the number of bytes of space allocated +** along with each page reference. This space is available to the user +** via the sqlite3PagerGetExtra() API. When a new page is allocated, the +** first 8 bytes of this space are zeroed but the remainder is uninitialized. +** (The extra space is used by btree as the MemPage object.) +** +** The flags argument is used to specify properties that affect the +** operation of the pager. It should be passed some bitwise combination +** of the PAGER_* flags. +** +** The vfsFlags parameter is a bitmask to pass to the flags parameter +** of the xOpen() method of the supplied VFS when opening files. +** +** If the pager object is allocated and the specified file opened +** successfully, SQLITE_OK is returned and *ppPager set to point to +** the new pager object. If an error occurs, *ppPager is set to NULL +** and error code returned. This function may return SQLITE_NOMEM +** (sqlite3Malloc() is used to allocate memory), SQLITE_CANTOPEN or +** various SQLITE_IO_XXX errors. +*/ +SQLITE_PRIVATE int sqlite3PagerOpen( + sqlite3_vfs *pVfs, /* The virtual file system to use */ + Pager **ppPager, /* OUT: Return the Pager structure here */ + const char *zFilename, /* Name of the database file to open */ + int nExtra, /* Extra bytes append to each in-memory page */ + int flags, /* flags controlling this file */ + int vfsFlags, /* flags passed through to sqlite3_vfs.xOpen() */ + void (*xReinit)(DbPage*) /* Function to reinitialize pages */ +){ + u8 *pPtr; + Pager *pPager = 0; /* Pager object to allocate and return */ + int rc = SQLITE_OK; /* Return code */ + int tempFile = 0; /* True for temp files (incl. in-memory files) */ + int memDb = 0; /* True if this is an in-memory file */ + int memJM = 0; /* Memory journal mode */ + int readOnly = 0; /* True if this is a read-only file */ + int journalFileSize; /* Bytes to allocate for each journal fd */ + char *zPathname = 0; /* Full path to database file */ + int nPathname = 0; /* Number of bytes in zPathname */ + int useJournal = (flags & PAGER_OMIT_JOURNAL)==0; /* False to omit journal */ + int pcacheSize = sqlite3PcacheSize(); /* Bytes to allocate for PCache */ + u32 szPageDflt = SQLITE_DEFAULT_PAGE_SIZE; /* Default page size */ + const char *zUri = 0; /* URI args to copy */ + int nUriByte = 1; /* Number of bytes of URI args at *zUri */ + + + /* Figure out how much space is required for each journal file-handle + ** (there are two of them, the main journal and the sub-journal). */ + journalFileSize = ROUND8(sqlite3JournalSize(pVfs)); + + /* Set the output variable to NULL in case an error occurs. */ + *ppPager = 0; + +#ifndef SQLITE_OMIT_MEMORYDB + if( flags & PAGER_MEMORY ){ + memDb = 1; + if( zFilename && zFilename[0] ){ + zPathname = sqlite3DbStrDup(0, zFilename); + if( zPathname==0 ) return SQLITE_NOMEM_BKPT; + nPathname = sqlite3Strlen30(zPathname); + zFilename = 0; + } + } +#endif + + /* Compute and store the full pathname in an allocated buffer pointed + ** to by zPathname, length nPathname. Or, if this is a temporary file, + ** leave both nPathname and zPathname set to 0. + */ + if( zFilename && zFilename[0] ){ + const char *z; + nPathname = pVfs->mxPathname + 1; + zPathname = sqlite3DbMallocRaw(0, 2*(i64)nPathname); + if( zPathname==0 ){ + return SQLITE_NOMEM_BKPT; + } + zPathname[0] = 0; /* Make sure initialized even if FullPathname() fails */ + rc = sqlite3OsFullPathname(pVfs, zFilename, nPathname, zPathname); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_OK_SYMLINK ){ + if( vfsFlags & SQLITE_OPEN_NOFOLLOW ){ + rc = SQLITE_CANTOPEN_SYMLINK; + }else{ + rc = SQLITE_OK; + } + } + } + nPathname = sqlite3Strlen30(zPathname); + z = zUri = &zFilename[sqlite3Strlen30(zFilename)+1]; + while( *z ){ + z += strlen(z)+1; + z += strlen(z)+1; + } + nUriByte = (int)(&z[1] - zUri); + assert( nUriByte>=1 ); + if( rc==SQLITE_OK && nPathname+8>pVfs->mxPathname ){ + /* This branch is taken when the journal path required by + ** the database being opened will be more than pVfs->mxPathname + ** bytes in length. This means the database cannot be opened, + ** as it will not be possible to open the journal file or even + ** check for a hot-journal before reading. + */ + rc = SQLITE_CANTOPEN_BKPT; + } + if( rc!=SQLITE_OK ){ + sqlite3DbFree(0, zPathname); + return rc; + } + } + + /* Allocate memory for the Pager structure, PCache object, the + ** three file descriptors, the database file name and the journal + ** file name. The layout in memory is as follows: + ** + ** Pager object (sizeof(Pager) bytes) + ** PCache object (sqlite3PcacheSize() bytes) + ** Database file handle (pVfs->szOsFile bytes) + ** Sub-journal file handle (journalFileSize bytes) + ** Main journal file handle (journalFileSize bytes) + ** Ptr back to the Pager (sizeof(Pager*) bytes) + ** \0\0\0\0 database prefix (4 bytes) + ** Database file name (nPathname+1 bytes) + ** URI query parameters (nUriByte bytes) + ** Journal filename (nPathname+8+1 bytes) + ** WAL filename (nPathname+4+1 bytes) + ** \0\0\0 terminator (3 bytes) + ** + ** Some 3rd-party software, over which we have no control, depends on + ** the specific order of the filenames and the \0 separators between them + ** so that it can (for example) find the database filename given the WAL + ** filename without using the sqlite3_filename_database() API. This is a + ** misuse of SQLite and a bug in the 3rd-party software, but the 3rd-party + ** software is in widespread use, so we try to avoid changing the filename + ** order and formatting if possible. In particular, the details of the + ** filename format expected by 3rd-party software should be as follows: + ** + ** - Main Database Path + ** - \0 + ** - Multiple URI components consisting of: + ** - Key + ** - \0 + ** - Value + ** - \0 + ** - \0 + ** - Journal Path + ** - \0 + ** - WAL Path (zWALName) + ** - \0 + ** + ** The sqlite3_create_filename() interface and the databaseFilename() utility + ** that is used by sqlite3_filename_database() and kin also depend on the + ** specific formatting and order of the various filenames, so if the format + ** changes here, be sure to change it there as well. + */ + assert( SQLITE_PTRSIZE==sizeof(Pager*) ); + pPtr = (u8 *)sqlite3MallocZero( + ROUND8(sizeof(*pPager)) + /* Pager structure */ + ROUND8(pcacheSize) + /* PCache object */ + ROUND8(pVfs->szOsFile) + /* The main db file */ + (u64)journalFileSize * 2 + /* The two journal files */ + SQLITE_PTRSIZE + /* Space to hold a pointer */ + 4 + /* Database prefix */ + (u64)nPathname + 1 + /* database filename */ + (u64)nUriByte + /* query parameters */ + (u64)nPathname + 8 + 1 + /* Journal filename */ +#ifndef SQLITE_OMIT_WAL + (u64)nPathname + 4 + 1 + /* WAL filename */ +#endif + 3 /* Terminator */ + ); + assert( EIGHT_BYTE_ALIGNMENT(SQLITE_INT_TO_PTR(journalFileSize)) ); + if( !pPtr ){ + sqlite3DbFree(0, zPathname); + return SQLITE_NOMEM_BKPT; + } + pPager = (Pager*)pPtr; pPtr += ROUND8(sizeof(*pPager)); + pPager->pPCache = (PCache*)pPtr; pPtr += ROUND8(pcacheSize); + pPager->fd = (sqlite3_file*)pPtr; pPtr += ROUND8(pVfs->szOsFile); + pPager->sjfd = (sqlite3_file*)pPtr; pPtr += journalFileSize; + pPager->jfd = (sqlite3_file*)pPtr; pPtr += journalFileSize; + assert( EIGHT_BYTE_ALIGNMENT(pPager->jfd) ); + memcpy(pPtr, &pPager, SQLITE_PTRSIZE); pPtr += SQLITE_PTRSIZE; + + /* Fill in the Pager.zFilename and pPager.zQueryParam fields */ + pPtr += 4; /* Skip zero prefix */ + pPager->zFilename = (char*)pPtr; + if( nPathname>0 ){ + memcpy(pPtr, zPathname, nPathname); pPtr += nPathname + 1; + if( zUri ){ + memcpy(pPtr, zUri, nUriByte); pPtr += nUriByte; + }else{ + pPtr++; + } + } + + + /* Fill in Pager.zJournal */ + if( nPathname>0 ){ + pPager->zJournal = (char*)pPtr; + memcpy(pPtr, zPathname, nPathname); pPtr += nPathname; + memcpy(pPtr, "-journal",8); pPtr += 8 + 1; +#ifdef SQLITE_ENABLE_8_3_NAMES + sqlite3FileSuffix3(zFilename,pPager->zJournal); + pPtr = (u8*)(pPager->zJournal + sqlite3Strlen30(pPager->zJournal)+1); +#endif + }else{ + pPager->zJournal = 0; + } + +#ifndef SQLITE_OMIT_WAL + /* Fill in Pager.zWal */ + if( nPathname>0 ){ + pPager->zWal = (char*)pPtr; + memcpy(pPtr, zPathname, nPathname); pPtr += nPathname; + memcpy(pPtr, "-wal", 4); pPtr += 4 + 1; +#ifdef SQLITE_ENABLE_8_3_NAMES + sqlite3FileSuffix3(zFilename, pPager->zWal); + pPtr = (u8*)(pPager->zWal + sqlite3Strlen30(pPager->zWal)+1); +#endif + }else{ + pPager->zWal = 0; + } +#endif + (void)pPtr; /* Suppress warning about unused pPtr value */ + + if( nPathname ) sqlite3DbFree(0, zPathname); + pPager->pVfs = pVfs; + pPager->vfsFlags = vfsFlags; + + /* Open the pager file. + */ + if( zFilename && zFilename[0] ){ + int fout = 0; /* VFS flags returned by xOpen() */ + rc = sqlite3OsOpen(pVfs, pPager->zFilename, pPager->fd, vfsFlags, &fout); + assert( !memDb ); + pPager->memVfs = memJM = (fout&SQLITE_OPEN_MEMORY)!=0; + readOnly = (fout&SQLITE_OPEN_READONLY)!=0; + + /* If the file was successfully opened for read/write access, + ** choose a default page size in case we have to create the + ** database file. The default page size is the maximum of: + ** + ** + SQLITE_DEFAULT_PAGE_SIZE, + ** + The value returned by sqlite3OsSectorSize() + ** + The largest page size that can be written atomically. + */ + if( rc==SQLITE_OK ){ + int iDc = sqlite3OsDeviceCharacteristics(pPager->fd); + if( !readOnly ){ + setSectorSize(pPager); + assert(SQLITE_DEFAULT_PAGE_SIZE<=SQLITE_MAX_DEFAULT_PAGE_SIZE); + if( szPageDfltsectorSize ){ + if( pPager->sectorSize>SQLITE_MAX_DEFAULT_PAGE_SIZE ){ + szPageDflt = SQLITE_MAX_DEFAULT_PAGE_SIZE; + }else{ + szPageDflt = (u32)pPager->sectorSize; + } + } +#ifdef SQLITE_ENABLE_ATOMIC_WRITE + { + int ii; + assert(SQLITE_IOCAP_ATOMIC512==(512>>8)); + assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8)); + assert(SQLITE_MAX_DEFAULT_PAGE_SIZE<=65536); + for(ii=szPageDflt; ii<=SQLITE_MAX_DEFAULT_PAGE_SIZE; ii=ii*2){ + if( iDc&(SQLITE_IOCAP_ATOMIC|(ii>>8)) ){ + szPageDflt = ii; + } + } + } +#endif + } + pPager->noLock = sqlite3_uri_boolean(pPager->zFilename, "nolock", 0); + if( (iDc & SQLITE_IOCAP_IMMUTABLE)!=0 + || sqlite3_uri_boolean(pPager->zFilename, "immutable", 0) ){ + vfsFlags |= SQLITE_OPEN_READONLY; + goto act_like_temp_file; + } + } + }else{ + /* If a temporary file is requested, it is not opened immediately. + ** In this case we accept the default page size and delay actually + ** opening the file until the first call to OsWrite(). + ** + ** This branch is also run for an in-memory database. An in-memory + ** database is the same as a temp-file that is never written out to + ** disk and uses an in-memory rollback journal. + ** + ** This branch also runs for files marked as immutable. + */ +act_like_temp_file: + tempFile = 1; + pPager->eState = PAGER_READER; /* Pretend we already have a lock */ + pPager->eLock = EXCLUSIVE_LOCK; /* Pretend we are in EXCLUSIVE mode */ + pPager->noLock = 1; /* Do no locking */ + readOnly = (vfsFlags&SQLITE_OPEN_READONLY); + } + + /* The following call to PagerSetPagesize() serves to set the value of + ** Pager.pageSize and to allocate the Pager.pTmpSpace buffer. + */ + if( rc==SQLITE_OK ){ + assert( pPager->memDb==0 ); + rc = sqlite3PagerSetPagesize(pPager, &szPageDflt, -1); + testcase( rc!=SQLITE_OK ); + } + + /* Initialize the PCache object. */ + if( rc==SQLITE_OK ){ + nExtra = ROUND8(nExtra); + assert( nExtra>=8 && nExtra<1000 ); + rc = sqlite3PcacheOpen(szPageDflt, nExtra, !memDb, + !memDb?pagerStress:0, (void *)pPager, pPager->pPCache); + } + + /* If an error occurred above, free the Pager structure and close the file. + */ + if( rc!=SQLITE_OK ){ + sqlite3OsClose(pPager->fd); + sqlite3PageFree(pPager->pTmpSpace); + sqlite3_free(pPager); + return rc; + } + + PAGERTRACE(("OPEN %d %s\n", FILEHANDLEID(pPager->fd), pPager->zFilename)); + IOTRACE(("OPEN %p %s\n", pPager, pPager->zFilename)) + + pPager->useJournal = (u8)useJournal; + /* pPager->stmtOpen = 0; */ + /* pPager->stmtInUse = 0; */ + /* pPager->nRef = 0; */ + /* pPager->stmtSize = 0; */ + /* pPager->stmtJSize = 0; */ + /* pPager->nPage = 0; */ + pPager->mxPgno = SQLITE_MAX_PAGE_COUNT; + /* pPager->state = PAGER_UNLOCK; */ + /* pPager->errMask = 0; */ + pPager->tempFile = (u8)tempFile; + assert( tempFile==PAGER_LOCKINGMODE_NORMAL + || tempFile==PAGER_LOCKINGMODE_EXCLUSIVE ); + assert( PAGER_LOCKINGMODE_EXCLUSIVE==1 ); + pPager->exclusiveMode = (u8)tempFile; + pPager->changeCountDone = pPager->tempFile; + pPager->memDb = (u8)memDb; + pPager->readOnly = (u8)readOnly; + assert( useJournal || pPager->tempFile ); + sqlite3PagerSetFlags(pPager, (SQLITE_DEFAULT_SYNCHRONOUS+1)|PAGER_CACHESPILL); + /* pPager->pFirst = 0; */ + /* pPager->pFirstSynced = 0; */ + /* pPager->pLast = 0; */ + pPager->nExtra = (u16)nExtra; + pPager->journalSizeLimit = SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT; + assert( isOpen(pPager->fd) || tempFile ); + setSectorSize(pPager); + if( !useJournal ){ + pPager->journalMode = PAGER_JOURNALMODE_OFF; + }else if( memDb || memJM ){ + pPager->journalMode = PAGER_JOURNALMODE_MEMORY; + } + /* pPager->xBusyHandler = 0; */ + /* pPager->pBusyHandlerArg = 0; */ + pPager->xReiniter = xReinit; + setGetterMethod(pPager); + /* memset(pPager->aHash, 0, sizeof(pPager->aHash)); */ + /* pPager->szMmap = SQLITE_DEFAULT_MMAP_SIZE // will be set by btree.c */ + + *ppPager = pPager; + return SQLITE_OK; +} + +/* +** Return the sqlite3_file for the main database given the name +** of the corresponding WAL or Journal name as passed into +** xOpen. +*/ +SQLITE_API sqlite3_file *sqlite3_database_file_object(const char *zName){ + Pager *pPager; + const char *p; + while( zName[-1]!=0 || zName[-2]!=0 || zName[-3]!=0 || zName[-4]!=0 ){ + zName--; + } + p = zName - 4 - sizeof(Pager*); + assert( EIGHT_BYTE_ALIGNMENT(p) ); + pPager = *(Pager**)p; + return pPager->fd; +} + + +/* +** This function is called after transitioning from PAGER_UNLOCK to +** PAGER_SHARED state. It tests if there is a hot journal present in +** the file-system for the given pager. A hot journal is one that +** needs to be played back. According to this function, a hot-journal +** file exists if the following criteria are met: +** +** * The journal file exists in the file system, and +** * No process holds a RESERVED or greater lock on the database file, and +** * The database file itself is greater than 0 bytes in size, and +** * The first byte of the journal file exists and is not 0x00. +** +** If the current size of the database file is 0 but a journal file +** exists, that is probably an old journal left over from a prior +** database with the same name. In this case the journal file is +** just deleted using OsDelete, *pExists is set to 0 and SQLITE_OK +** is returned. +** +** This routine does not check if there is a super-journal filename +** at the end of the file. If there is, and that super-journal file +** does not exist, then the journal file is not really hot. In this +** case this routine will return a false-positive. The pager_playback() +** routine will discover that the journal file is not really hot and +** will not roll it back. +** +** If a hot-journal file is found to exist, *pExists is set to 1 and +** SQLITE_OK returned. If no hot-journal file is present, *pExists is +** set to 0 and SQLITE_OK returned. If an IO error occurs while trying +** to determine whether or not a hot-journal file exists, the IO error +** code is returned and the value of *pExists is undefined. +*/ +static int hasHotJournal(Pager *pPager, int *pExists){ + sqlite3_vfs * const pVfs = pPager->pVfs; + int rc = SQLITE_OK; /* Return code */ + int exists = 1; /* True if a journal file is present */ + int jrnlOpen = !!isOpen(pPager->jfd); + + assert( pPager->useJournal ); + assert( isOpen(pPager->fd) ); + assert( pPager->eState==PAGER_OPEN ); + + assert( jrnlOpen==0 || ( sqlite3OsDeviceCharacteristics(pPager->jfd) & + SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN + )); + + *pExists = 0; + if( !jrnlOpen ){ + rc = sqlite3OsAccess(pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &exists); + } + if( rc==SQLITE_OK && exists ){ + int locked = 0; /* True if some process holds a RESERVED lock */ + + /* Race condition here: Another process might have been holding the + ** the RESERVED lock and have a journal open at the sqlite3OsAccess() + ** call above, but then delete the journal and drop the lock before + ** we get to the following sqlite3OsCheckReservedLock() call. If that + ** is the case, this routine might think there is a hot journal when + ** in fact there is none. This results in a false-positive which will + ** be dealt with by the playback routine. Ticket #3883. + */ + rc = sqlite3OsCheckReservedLock(pPager->fd, &locked); + if( rc==SQLITE_OK && !locked ){ + Pgno nPage; /* Number of pages in database file */ + + assert( pPager->tempFile==0 ); + rc = pagerPagecount(pPager, &nPage); + if( rc==SQLITE_OK ){ + /* If the database is zero pages in size, that means that either (1) the + ** journal is a remnant from a prior database with the same name where + ** the database file but not the journal was deleted, or (2) the initial + ** transaction that populates a new database is being rolled back. + ** In either case, the journal file can be deleted. However, take care + ** not to delete the journal file if it is already open due to + ** journal_mode=PERSIST. + */ + if( nPage==0 && !jrnlOpen ){ + sqlite3BeginBenignMalloc(); + if( pagerLockDb(pPager, RESERVED_LOCK)==SQLITE_OK ){ + sqlite3OsDelete(pVfs, pPager->zJournal, 0); + if( !pPager->exclusiveMode ) pagerUnlockDb(pPager, SHARED_LOCK); + } + sqlite3EndBenignMalloc(); + }else{ + /* The journal file exists and no other connection has a reserved + ** or greater lock on the database file. Now check that there is + ** at least one non-zero bytes at the start of the journal file. + ** If there is, then we consider this journal to be hot. If not, + ** it can be ignored. + */ + if( !jrnlOpen ){ + int f = SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_JOURNAL; + rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, f, &f); + } + if( rc==SQLITE_OK ){ + u8 first = 0; + rc = sqlite3OsRead(pPager->jfd, (void *)&first, 1, 0); + if( rc==SQLITE_IOERR_SHORT_READ ){ + rc = SQLITE_OK; + } + if( !jrnlOpen ){ + sqlite3OsClose(pPager->jfd); + } + *pExists = (first!=0); + }else if( rc==SQLITE_CANTOPEN ){ + /* If we cannot open the rollback journal file in order to see if + ** it has a zero header, that might be due to an I/O error, or + ** it might be due to the race condition described above and in + ** ticket #3883. Either way, assume that the journal is hot. + ** This might be a false positive. But if it is, then the + ** automatic journal playback and recovery mechanism will deal + ** with it under an EXCLUSIVE lock where we do not need to + ** worry so much with race conditions. + */ + *pExists = 1; + rc = SQLITE_OK; + } + } + } + } + } + + return rc; +} + +/* +** This function is called to obtain a shared lock on the database file. +** It is illegal to call sqlite3PagerGet() until after this function +** has been successfully called. If a shared-lock is already held when +** this function is called, it is a no-op. +** +** The following operations are also performed by this function. +** +** 1) If the pager is currently in PAGER_OPEN state (no lock held +** on the database file), then an attempt is made to obtain a +** SHARED lock on the database file. Immediately after obtaining +** the SHARED lock, the file-system is checked for a hot-journal, +** which is played back if present. Following any hot-journal +** rollback, the contents of the cache are validated by checking +** the 'change-counter' field of the database file header and +** discarded if they are found to be invalid. +** +** 2) If the pager is running in exclusive-mode, and there are currently +** no outstanding references to any pages, and is in the error state, +** then an attempt is made to clear the error state by discarding +** the contents of the page cache and rolling back any open journal +** file. +** +** If everything is successful, SQLITE_OK is returned. If an IO error +** occurs while locking the database, checking for a hot-journal file or +** rolling back a journal file, the IO error code is returned. +*/ +SQLITE_PRIVATE int sqlite3PagerSharedLock(Pager *pPager){ + int rc = SQLITE_OK; /* Return code */ + + /* This routine is only called from b-tree and only when there are no + ** outstanding pages. This implies that the pager state should either + ** be OPEN or READER. READER is only possible if the pager is or was in + ** exclusive access mode. */ + assert( sqlite3PcacheRefCount(pPager->pPCache)==0 ); + assert( assert_pager_state(pPager) ); + assert( pPager->eState==PAGER_OPEN || pPager->eState==PAGER_READER ); + assert( pPager->errCode==SQLITE_OK ); + + if( !pagerUseWal(pPager) && pPager->eState==PAGER_OPEN ){ + int bHotJournal = 1; /* True if there exists a hot journal-file */ + + assert( !MEMDB ); + assert( pPager->tempFile==0 || pPager->eLock==EXCLUSIVE_LOCK ); + + rc = pager_wait_on_lock(pPager, SHARED_LOCK); + if( rc!=SQLITE_OK ){ + assert( pPager->eLock==NO_LOCK || pPager->eLock==UNKNOWN_LOCK ); + goto failed; + } + + /* If a journal file exists, and there is no RESERVED lock on the + ** database file, then it either needs to be played back or deleted. + */ + if( pPager->eLock<=SHARED_LOCK ){ + rc = hasHotJournal(pPager, &bHotJournal); + } + if( rc!=SQLITE_OK ){ + goto failed; + } + if( bHotJournal ){ + if( pPager->readOnly ){ + rc = SQLITE_READONLY_ROLLBACK; + goto failed; + } + + /* Get an EXCLUSIVE lock on the database file. At this point it is + ** important that a RESERVED lock is not obtained on the way to the + ** EXCLUSIVE lock. If it were, another process might open the + ** database file, detect the RESERVED lock, and conclude that the + ** database is safe to read while this process is still rolling the + ** hot-journal back. + ** + ** Because the intermediate RESERVED lock is not requested, any + ** other process attempting to access the database file will get to + ** this point in the code and fail to obtain its own EXCLUSIVE lock + ** on the database file. + ** + ** Unless the pager is in locking_mode=exclusive mode, the lock is + ** downgraded to SHARED_LOCK before this function returns. + */ + rc = pagerLockDb(pPager, EXCLUSIVE_LOCK); + if( rc!=SQLITE_OK ){ + goto failed; + } + + /* If it is not already open and the file exists on disk, open the + ** journal for read/write access. Write access is required because + ** in exclusive-access mode the file descriptor will be kept open + ** and possibly used for a transaction later on. Also, write-access + ** is usually required to finalize the journal in journal_mode=persist + ** mode (and also for journal_mode=truncate on some systems). + ** + ** If the journal does not exist, it usually means that some + ** other connection managed to get in and roll it back before + ** this connection obtained the exclusive lock above. Or, it + ** may mean that the pager was in the error-state when this + ** function was called and the journal file does not exist. + */ + if( !isOpen(pPager->jfd) && pPager->journalMode!=PAGER_JOURNALMODE_OFF ){ + sqlite3_vfs * const pVfs = pPager->pVfs; + int bExists; /* True if journal file exists */ + rc = sqlite3OsAccess( + pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &bExists); + if( rc==SQLITE_OK && bExists ){ + int fout = 0; + int f = SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_JOURNAL; + assert( !pPager->tempFile ); + rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, f, &fout); + assert( rc!=SQLITE_OK || isOpen(pPager->jfd) ); + if( rc==SQLITE_OK && fout&SQLITE_OPEN_READONLY ){ + rc = SQLITE_CANTOPEN_BKPT; + sqlite3OsClose(pPager->jfd); + } + } + } + + /* Playback and delete the journal. Drop the database write + ** lock and reacquire the read lock. Purge the cache before + ** playing back the hot-journal so that we don't end up with + ** an inconsistent cache. Sync the hot journal before playing + ** it back since the process that crashed and left the hot journal + ** probably did not sync it and we are required to always sync + ** the journal before playing it back. + */ + if( isOpen(pPager->jfd) ){ + assert( rc==SQLITE_OK ); + rc = pagerSyncHotJournal(pPager); + if( rc==SQLITE_OK ){ + rc = pager_playback(pPager, !pPager->tempFile); + pPager->eState = PAGER_OPEN; + } + }else if( !pPager->exclusiveMode ){ + pagerUnlockDb(pPager, SHARED_LOCK); + } + + if( rc!=SQLITE_OK ){ + /* This branch is taken if an error occurs while trying to open + ** or roll back a hot-journal while holding an EXCLUSIVE lock. The + ** pager_unlock() routine will be called before returning to unlock + ** the file. If the unlock attempt fails, then Pager.eLock must be + ** set to UNKNOWN_LOCK (see the comment above the #define for + ** UNKNOWN_LOCK above for an explanation). + ** + ** In order to get pager_unlock() to do this, set Pager.eState to + ** PAGER_ERROR now. This is not actually counted as a transition + ** to ERROR state in the state diagram at the top of this file, + ** since we know that the same call to pager_unlock() will very + ** shortly transition the pager object to the OPEN state. Calling + ** assert_pager_state() would fail now, as it should not be possible + ** to be in ERROR state when there are zero outstanding page + ** references. + */ + pager_error(pPager, rc); + goto failed; + } + + assert( pPager->eState==PAGER_OPEN ); + assert( (pPager->eLock==SHARED_LOCK) + || (pPager->exclusiveMode && pPager->eLock>SHARED_LOCK) + ); + } + + if( !pPager->tempFile && pPager->hasHeldSharedLock ){ + /* The shared-lock has just been acquired then check to + ** see if the database has been modified. If the database has changed, + ** flush the cache. The hasHeldSharedLock flag prevents this from + ** occurring on the very first access to a file, in order to save a + ** single unnecessary sqlite3OsRead() call at the start-up. + ** + ** Database changes are detected by looking at 15 bytes beginning + ** at offset 24 into the file. The first 4 of these 16 bytes are + ** a 32-bit counter that is incremented with each change. The + ** other bytes change randomly with each file change when + ** a codec is in use. + ** + ** There is a vanishingly small chance that a change will not be + ** detected. The chance of an undetected change is so small that + ** it can be neglected. + */ + char dbFileVers[sizeof(pPager->dbFileVers)]; + + IOTRACE(("CKVERS %p %d\n", pPager, sizeof(dbFileVers))); + rc = sqlite3OsRead(pPager->fd, &dbFileVers, sizeof(dbFileVers), 24); + if( rc!=SQLITE_OK ){ + if( rc!=SQLITE_IOERR_SHORT_READ ){ + goto failed; + } + memset(dbFileVers, 0, sizeof(dbFileVers)); + } + + if( memcmp(pPager->dbFileVers, dbFileVers, sizeof(dbFileVers))!=0 ){ + pager_reset(pPager); + + /* Unmap the database file. It is possible that external processes + ** may have truncated the database file and then extended it back + ** to its original size while this process was not holding a lock. + ** In this case there may exist a Pager.pMap mapping that appears + ** to be the right size but is not actually valid. Avoid this + ** possibility by unmapping the db here. */ + if( USEFETCH(pPager) ){ + sqlite3OsUnfetch(pPager->fd, 0, 0); + } + } + } + + /* If there is a WAL file in the file-system, open this database in WAL + ** mode. Otherwise, the following function call is a no-op. + */ + rc = pagerOpenWalIfPresent(pPager); +#ifndef SQLITE_OMIT_WAL + assert( pPager->pWal==0 || rc==SQLITE_OK ); +#endif + } + + if( pagerUseWal(pPager) ){ + assert( rc==SQLITE_OK ); + rc = pagerBeginReadTransaction(pPager); + } + + if( pPager->tempFile==0 && pPager->eState==PAGER_OPEN && rc==SQLITE_OK ){ + rc = pagerPagecount(pPager, &pPager->dbSize); + } + + failed: + if( rc!=SQLITE_OK ){ + assert( !MEMDB ); + pager_unlock(pPager); + assert( pPager->eState==PAGER_OPEN ); + }else{ + pPager->eState = PAGER_READER; + pPager->hasHeldSharedLock = 1; + } + return rc; +} + +/* +** If the reference count has reached zero, rollback any active +** transaction and unlock the pager. +** +** Except, in locking_mode=EXCLUSIVE when there is nothing to in +** the rollback journal, the unlock is not performed and there is +** nothing to rollback, so this routine is a no-op. +*/ +static void pagerUnlockIfUnused(Pager *pPager){ + if( sqlite3PcacheRefCount(pPager->pPCache)==0 ){ + assert( pPager->nMmapOut==0 ); /* because page1 is never memory mapped */ + pagerUnlockAndRollback(pPager); + } +} + +/* +** The page getter methods each try to acquire a reference to a +** page with page number pgno. If the requested reference is +** successfully obtained, it is copied to *ppPage and SQLITE_OK returned. +** +** There are different implementations of the getter method depending +** on the current state of the pager. +** +** getPageNormal() -- The normal getter +** getPageError() -- Used if the pager is in an error state +** getPageMmap() -- Used if memory-mapped I/O is enabled +** +** If the requested page is already in the cache, it is returned. +** Otherwise, a new page object is allocated and populated with data +** read from the database file. In some cases, the pcache module may +** choose not to allocate a new page object and may reuse an existing +** object with no outstanding references. +** +** The extra data appended to a page is always initialized to zeros the +** first time a page is loaded into memory. If the page requested is +** already in the cache when this function is called, then the extra +** data is left as it was when the page object was last used. +** +** If the database image is smaller than the requested page or if +** the flags parameter contains the PAGER_GET_NOCONTENT bit and the +** requested page is not already stored in the cache, then no +** actual disk read occurs. In this case the memory image of the +** page is initialized to all zeros. +** +** If PAGER_GET_NOCONTENT is true, it means that we do not care about +** the contents of the page. This occurs in two scenarios: +** +** a) When reading a free-list leaf page from the database, and +** +** b) When a savepoint is being rolled back and we need to load +** a new page into the cache to be filled with the data read +** from the savepoint journal. +** +** If PAGER_GET_NOCONTENT is true, then the data returned is zeroed instead +** of being read from the database. Additionally, the bits corresponding +** to pgno in Pager.pInJournal (bitvec of pages already written to the +** journal file) and the PagerSavepoint.pInSavepoint bitvecs of any open +** savepoints are set. This means if the page is made writable at any +** point in the future, using a call to sqlite3PagerWrite(), its contents +** will not be journaled. This saves IO. +** +** The acquisition might fail for several reasons. In all cases, +** an appropriate error code is returned and *ppPage is set to NULL. +** +** See also sqlite3PagerLookup(). Both this routine and Lookup() attempt +** to find a page in the in-memory cache first. If the page is not already +** in memory, this routine goes to disk to read it in whereas Lookup() +** just returns 0. This routine acquires a read-lock the first time it +** has to go to disk, and could also playback an old journal if necessary. +** Since Lookup() never goes to disk, it never has to deal with locks +** or journal files. +*/ +static int getPageNormal( + Pager *pPager, /* The pager open on the database file */ + Pgno pgno, /* Page number to fetch */ + DbPage **ppPage, /* Write a pointer to the page here */ + int flags /* PAGER_GET_XXX flags */ +){ + int rc = SQLITE_OK; + PgHdr *pPg; + u8 noContent; /* True if PAGER_GET_NOCONTENT is set */ + sqlite3_pcache_page *pBase; + + assert( pPager->errCode==SQLITE_OK ); + assert( pPager->eState>=PAGER_READER ); + assert( assert_pager_state(pPager) ); + assert( pPager->hasHeldSharedLock==1 ); + + if( pgno==0 ) return SQLITE_CORRUPT_BKPT; + pBase = sqlite3PcacheFetch(pPager->pPCache, pgno, 3); + if( pBase==0 ){ + pPg = 0; + rc = sqlite3PcacheFetchStress(pPager->pPCache, pgno, &pBase); + if( rc!=SQLITE_OK ) goto pager_acquire_err; + if( pBase==0 ){ + rc = SQLITE_NOMEM_BKPT; + goto pager_acquire_err; + } + } + pPg = *ppPage = sqlite3PcacheFetchFinish(pPager->pPCache, pgno, pBase); + assert( pPg==(*ppPage) ); + assert( pPg->pgno==pgno ); + assert( pPg->pPager==pPager || pPg->pPager==0 ); + + noContent = (flags & PAGER_GET_NOCONTENT)!=0; + if( pPg->pPager && !noContent ){ + /* In this case the pcache already contains an initialized copy of + ** the page. Return without further ado. */ + assert( pgno!=PAGER_SJ_PGNO(pPager) ); + pPager->aStat[PAGER_STAT_HIT]++; + return SQLITE_OK; + + }else{ + /* The pager cache has created a new page. Its content needs to + ** be initialized. But first some error checks: + ** + ** (*) obsolete. Was: maximum page number is 2^31 + ** (2) Never try to fetch the locking page + */ + if( pgno==PAGER_SJ_PGNO(pPager) ){ + rc = SQLITE_CORRUPT_BKPT; + goto pager_acquire_err; + } + + pPg->pPager = pPager; + + assert( !isOpen(pPager->fd) || !MEMDB ); + if( !isOpen(pPager->fd) || pPager->dbSizepPager->mxPgno ){ + rc = SQLITE_FULL; + if( pgno<=pPager->dbSize ){ + sqlite3PcacheRelease(pPg); + pPg = 0; + } + goto pager_acquire_err; + } + if( noContent ){ + /* Failure to set the bits in the InJournal bit-vectors is benign. + ** It merely means that we might do some extra work to journal a + ** page that does not need to be journaled. Nevertheless, be sure + ** to test the case where a malloc error occurs while trying to set + ** a bit in a bit vector. + */ + sqlite3BeginBenignMalloc(); + if( pgno<=pPager->dbOrigSize ){ + TESTONLY( rc = ) sqlite3BitvecSet(pPager->pInJournal, pgno); + testcase( rc==SQLITE_NOMEM ); + } + TESTONLY( rc = ) addToSavepointBitvecs(pPager, pgno); + testcase( rc==SQLITE_NOMEM ); + sqlite3EndBenignMalloc(); + } + memset(pPg->pData, 0, pPager->pageSize); + IOTRACE(("ZERO %p %d\n", pPager, pgno)); + }else{ + assert( pPg->pPager==pPager ); + pPager->aStat[PAGER_STAT_MISS]++; + rc = readDbPage(pPg); + if( rc!=SQLITE_OK ){ + goto pager_acquire_err; + } + } + pager_set_pagehash(pPg); + } + return SQLITE_OK; + +pager_acquire_err: + assert( rc!=SQLITE_OK ); + if( pPg ){ + sqlite3PcacheDrop(pPg); + } + pagerUnlockIfUnused(pPager); + *ppPage = 0; + return rc; +} + +#if SQLITE_MAX_MMAP_SIZE>0 +/* The page getter for when memory-mapped I/O is enabled */ +static int getPageMMap( + Pager *pPager, /* The pager open on the database file */ + Pgno pgno, /* Page number to fetch */ + DbPage **ppPage, /* Write a pointer to the page here */ + int flags /* PAGER_GET_XXX flags */ +){ + int rc = SQLITE_OK; + PgHdr *pPg = 0; + u32 iFrame = 0; /* Frame to read from WAL file */ + + /* It is acceptable to use a read-only (mmap) page for any page except + ** page 1 if there is no write-transaction open or the ACQUIRE_READONLY + ** flag was specified by the caller. And so long as the db is not a + ** temporary or in-memory database. */ + const int bMmapOk = (pgno>1 + && (pPager->eState==PAGER_READER || (flags & PAGER_GET_READONLY)) + ); + + assert( USEFETCH(pPager) ); + + /* Optimization note: Adding the "pgno<=1" term before "pgno==0" here + ** allows the compiler optimizer to reuse the results of the "pgno>1" + ** test in the previous statement, and avoid testing pgno==0 in the + ** common case where pgno is large. */ + if( pgno<=1 && pgno==0 ){ + return SQLITE_CORRUPT_BKPT; + } + assert( pPager->eState>=PAGER_READER ); + assert( assert_pager_state(pPager) ); + assert( pPager->hasHeldSharedLock==1 ); + assert( pPager->errCode==SQLITE_OK ); + + if( bMmapOk && pagerUseWal(pPager) ){ + rc = sqlite3WalFindFrame(pPager->pWal, pgno, &iFrame); + if( rc!=SQLITE_OK ){ + *ppPage = 0; + return rc; + } + } + if( bMmapOk && iFrame==0 ){ + void *pData = 0; + rc = sqlite3OsFetch(pPager->fd, + (i64)(pgno-1) * pPager->pageSize, pPager->pageSize, &pData + ); + if( rc==SQLITE_OK && pData ){ + if( pPager->eState>PAGER_READER || pPager->tempFile ){ + pPg = sqlite3PagerLookup(pPager, pgno); + } + if( pPg==0 ){ + rc = pagerAcquireMapPage(pPager, pgno, pData, &pPg); + }else{ + sqlite3OsUnfetch(pPager->fd, (i64)(pgno-1)*pPager->pageSize, pData); + } + if( pPg ){ + assert( rc==SQLITE_OK ); + *ppPage = pPg; + return SQLITE_OK; + } + } + if( rc!=SQLITE_OK ){ + *ppPage = 0; + return rc; + } + } + return getPageNormal(pPager, pgno, ppPage, flags); +} +#endif /* SQLITE_MAX_MMAP_SIZE>0 */ + +/* The page getter method for when the pager is an error state */ +static int getPageError( + Pager *pPager, /* The pager open on the database file */ + Pgno pgno, /* Page number to fetch */ + DbPage **ppPage, /* Write a pointer to the page here */ + int flags /* PAGER_GET_XXX flags */ +){ + UNUSED_PARAMETER(pgno); + UNUSED_PARAMETER(flags); + assert( pPager->errCode!=SQLITE_OK ); + *ppPage = 0; + return pPager->errCode; +} + + +/* Dispatch all page fetch requests to the appropriate getter method. +*/ +SQLITE_PRIVATE int sqlite3PagerGet( + Pager *pPager, /* The pager open on the database file */ + Pgno pgno, /* Page number to fetch */ + DbPage **ppPage, /* Write a pointer to the page here */ + int flags /* PAGER_GET_XXX flags */ +){ +#if 0 /* Trace page fetch by setting to 1 */ + int rc; + printf("PAGE %u\n", pgno); + fflush(stdout); + rc = pPager->xGet(pPager, pgno, ppPage, flags); + if( rc ){ + printf("PAGE %u failed with 0x%02x\n", pgno, rc); + fflush(stdout); + } + return rc; +#else + /* Normal, high-speed version of sqlite3PagerGet() */ + return pPager->xGet(pPager, pgno, ppPage, flags); +#endif +} + +/* +** Acquire a page if it is already in the in-memory cache. Do +** not read the page from disk. Return a pointer to the page, +** or 0 if the page is not in cache. +** +** See also sqlite3PagerGet(). The difference between this routine +** and sqlite3PagerGet() is that _get() will go to the disk and read +** in the page if the page is not already in cache. This routine +** returns NULL if the page is not in cache or if a disk I/O error +** has ever happened. +*/ +SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno){ + sqlite3_pcache_page *pPage; + assert( pPager!=0 ); + assert( pgno!=0 ); + assert( pPager->pPCache!=0 ); + pPage = sqlite3PcacheFetch(pPager->pPCache, pgno, 0); + assert( pPage==0 || pPager->hasHeldSharedLock ); + if( pPage==0 ) return 0; + return sqlite3PcacheFetchFinish(pPager->pPCache, pgno, pPage); +} + +/* +** Release a page reference. +** +** The sqlite3PagerUnref() and sqlite3PagerUnrefNotNull() may only be used +** if we know that the page being released is not the last reference to page1. +** The btree layer always holds page1 open until the end, so these first +** two routines can be used to release any page other than BtShared.pPage1. +** The assert() at tag-20230419-2 proves that this constraint is always +** honored. +** +** Use sqlite3PagerUnrefPageOne() to release page1. This latter routine +** checks the total number of outstanding pages and if the number of +** pages reaches zero it drops the database lock. +*/ +SQLITE_PRIVATE void sqlite3PagerUnrefNotNull(DbPage *pPg){ + TESTONLY( Pager *pPager = pPg->pPager; ) + assert( pPg!=0 ); + if( pPg->flags & PGHDR_MMAP ){ + assert( pPg->pgno!=1 ); /* Page1 is never memory mapped */ + pagerReleaseMapPage(pPg); + }else{ + sqlite3PcacheRelease(pPg); + } + /* Do not use this routine to release the last reference to page1 */ + assert( sqlite3PcacheRefCount(pPager->pPCache)>0 ); /* tag-20230419-2 */ +} +SQLITE_PRIVATE void sqlite3PagerUnref(DbPage *pPg){ + if( pPg ) sqlite3PagerUnrefNotNull(pPg); +} +SQLITE_PRIVATE void sqlite3PagerUnrefPageOne(DbPage *pPg){ + Pager *pPager; + assert( pPg!=0 ); + assert( pPg->pgno==1 ); + assert( (pPg->flags & PGHDR_MMAP)==0 ); /* Page1 is never memory mapped */ + pPager = pPg->pPager; + sqlite3PcacheRelease(pPg); + pagerUnlockIfUnused(pPager); +} + +/* +** This function is called at the start of every write transaction. +** There must already be a RESERVED or EXCLUSIVE lock on the database +** file when this routine is called. +** +** Open the journal file for pager pPager and write a journal header +** to the start of it. If there are active savepoints, open the sub-journal +** as well. This function is only used when the journal file is being +** opened to write a rollback log for a transaction. It is not used +** when opening a hot journal file to roll it back. +** +** If the journal file is already open (as it may be in exclusive mode), +** then this function just writes a journal header to the start of the +** already open file. +** +** Whether or not the journal file is opened by this function, the +** Pager.pInJournal bitvec structure is allocated. +** +** Return SQLITE_OK if everything is successful. Otherwise, return +** SQLITE_NOMEM if the attempt to allocate Pager.pInJournal fails, or +** an IO error code if opening or writing the journal file fails. +*/ +static int pager_open_journal(Pager *pPager){ + int rc = SQLITE_OK; /* Return code */ + sqlite3_vfs * const pVfs = pPager->pVfs; /* Local cache of vfs pointer */ + + assert( pPager->eState==PAGER_WRITER_LOCKED ); + assert( assert_pager_state(pPager) ); + assert( pPager->pInJournal==0 ); + + /* If already in the error state, this function is a no-op. But on + ** the other hand, this routine is never called if we are already in + ** an error state. */ + if( NEVER(pPager->errCode) ) return pPager->errCode; + + if( !pagerUseWal(pPager) && pPager->journalMode!=PAGER_JOURNALMODE_OFF ){ + pPager->pInJournal = sqlite3BitvecCreate(pPager->dbSize); + if( pPager->pInJournal==0 ){ + return SQLITE_NOMEM_BKPT; + } + + /* Open the journal file if it is not already open. */ + if( !isOpen(pPager->jfd) ){ + if( pPager->journalMode==PAGER_JOURNALMODE_MEMORY ){ + sqlite3MemJournalOpen(pPager->jfd); + }else{ + int flags = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE; + int nSpill; + + if( pPager->tempFile ){ + flags |= (SQLITE_OPEN_DELETEONCLOSE|SQLITE_OPEN_TEMP_JOURNAL); + flags |= SQLITE_OPEN_EXCLUSIVE; + nSpill = sqlite3Config.nStmtSpill; + }else{ + flags |= SQLITE_OPEN_MAIN_JOURNAL; + nSpill = jrnlBufferSize(pPager); + } + + /* Verify that the database still has the same name as it did when + ** it was originally opened. */ + rc = databaseIsUnmoved(pPager); + if( rc==SQLITE_OK ){ + rc = sqlite3JournalOpen ( + pVfs, pPager->zJournal, pPager->jfd, flags, nSpill + ); + } + } + assert( rc!=SQLITE_OK || isOpen(pPager->jfd) ); + } + + + /* Write the first journal header to the journal file and open + ** the sub-journal if necessary. + */ + if( rc==SQLITE_OK ){ + /* TODO: Check if all of these are really required. */ + pPager->nRec = 0; + pPager->journalOff = 0; + pPager->setSuper = 0; + pPager->journalHdr = 0; + rc = writeJournalHdr(pPager); + } + } + + if( rc!=SQLITE_OK ){ + sqlite3BitvecDestroy(pPager->pInJournal); + pPager->pInJournal = 0; + pPager->journalOff = 0; + }else{ + assert( pPager->eState==PAGER_WRITER_LOCKED ); + pPager->eState = PAGER_WRITER_CACHEMOD; + } + + return rc; +} + +/* +** Begin a write-transaction on the specified pager object. If a +** write-transaction has already been opened, this function is a no-op. +** +** If the exFlag argument is false, then acquire at least a RESERVED +** lock on the database file. If exFlag is true, then acquire at least +** an EXCLUSIVE lock. If such a lock is already held, no locking +** functions need be called. +** +** If the subjInMemory argument is non-zero, then any sub-journal opened +** within this transaction will be opened as an in-memory file. This +** has no effect if the sub-journal is already opened (as it may be when +** running in exclusive mode) or if the transaction does not require a +** sub-journal. If the subjInMemory argument is zero, then any required +** sub-journal is implemented in-memory if pPager is an in-memory database, +** or using a temporary file otherwise. +*/ +SQLITE_PRIVATE int sqlite3PagerBegin(Pager *pPager, int exFlag, int subjInMemory){ + int rc = SQLITE_OK; + + if( pPager->errCode ) return pPager->errCode; + assert( pPager->eState>=PAGER_READER && pPager->eStatesubjInMemory = (u8)subjInMemory; + + if( pPager->eState==PAGER_READER ){ + assert( pPager->pInJournal==0 ); + + if( pagerUseWal(pPager) ){ + /* If the pager is configured to use locking_mode=exclusive, and an + ** exclusive lock on the database is not already held, obtain it now. + */ + if( pPager->exclusiveMode && sqlite3WalExclusiveMode(pPager->pWal, -1) ){ + rc = pagerLockDb(pPager, EXCLUSIVE_LOCK); + if( rc!=SQLITE_OK ){ + return rc; + } + (void)sqlite3WalExclusiveMode(pPager->pWal, 1); + } + + /* Grab the write lock on the log file. If successful, upgrade to + ** PAGER_RESERVED state. Otherwise, return an error code to the caller. + ** The busy-handler is not invoked if another connection already + ** holds the write-lock. If possible, the upper layer will call it. + */ + rc = sqlite3WalBeginWriteTransaction(pPager->pWal); + }else{ + /* Obtain a RESERVED lock on the database file. If the exFlag parameter + ** is true, then immediately upgrade this to an EXCLUSIVE lock. The + ** busy-handler callback can be used when upgrading to the EXCLUSIVE + ** lock, but not when obtaining the RESERVED lock. + */ + rc = pagerLockDb(pPager, RESERVED_LOCK); + if( rc==SQLITE_OK && exFlag ){ + rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK); + } + } + + if( rc==SQLITE_OK ){ + /* Change to WRITER_LOCKED state. + ** + ** WAL mode sets Pager.eState to PAGER_WRITER_LOCKED or CACHEMOD + ** when it has an open transaction, but never to DBMOD or FINISHED. + ** This is because in those states the code to roll back savepoint + ** transactions may copy data from the sub-journal into the database + ** file as well as into the page cache. Which would be incorrect in + ** WAL mode. + */ + pPager->eState = PAGER_WRITER_LOCKED; + pPager->dbHintSize = pPager->dbSize; + pPager->dbFileSize = pPager->dbSize; + pPager->dbOrigSize = pPager->dbSize; + pPager->journalOff = 0; + } + + assert( rc==SQLITE_OK || pPager->eState==PAGER_READER ); + assert( rc!=SQLITE_OK || pPager->eState==PAGER_WRITER_LOCKED ); + assert( assert_pager_state(pPager) ); + } + + PAGERTRACE(("TRANSACTION %d\n", PAGERID(pPager))); + return rc; +} + +/* +** Write page pPg onto the end of the rollback journal. +*/ +static SQLITE_NOINLINE int pagerAddPageToRollbackJournal(PgHdr *pPg){ + Pager *pPager = pPg->pPager; + int rc; + u32 cksum; + char *pData2; + i64 iOff = pPager->journalOff; + + /* We should never write to the journal file the page that + ** contains the database locks. The following assert verifies + ** that we do not. */ + assert( pPg->pgno!=PAGER_SJ_PGNO(pPager) ); + + assert( pPager->journalHdr<=pPager->journalOff ); + pData2 = pPg->pData; + cksum = pager_cksum(pPager, (u8*)pData2); + + /* Even if an IO or diskfull error occurs while journalling the + ** page in the block above, set the need-sync flag for the page. + ** Otherwise, when the transaction is rolled back, the logic in + ** playback_one_page() will think that the page needs to be restored + ** in the database file. And if an IO error occurs while doing so, + ** then corruption may follow. + */ + pPg->flags |= PGHDR_NEED_SYNC; + + rc = write32bits(pPager->jfd, iOff, pPg->pgno); + if( rc!=SQLITE_OK ) return rc; + rc = sqlite3OsWrite(pPager->jfd, pData2, pPager->pageSize, iOff+4); + if( rc!=SQLITE_OK ) return rc; + rc = write32bits(pPager->jfd, iOff+pPager->pageSize+4, cksum); + if( rc!=SQLITE_OK ) return rc; + + IOTRACE(("JOUT %p %d %lld %d\n", pPager, pPg->pgno, + pPager->journalOff, pPager->pageSize)); + PAGER_INCR(sqlite3_pager_writej_count); + PAGERTRACE(("JOURNAL %d page %d needSync=%d hash(%08x)\n", + PAGERID(pPager), pPg->pgno, + ((pPg->flags&PGHDR_NEED_SYNC)?1:0), pager_pagehash(pPg))); + + pPager->journalOff += 8 + pPager->pageSize; + pPager->nRec++; + assert( pPager->pInJournal!=0 ); + rc = sqlite3BitvecSet(pPager->pInJournal, pPg->pgno); + testcase( rc==SQLITE_NOMEM ); + assert( rc==SQLITE_OK || rc==SQLITE_NOMEM ); + rc |= addToSavepointBitvecs(pPager, pPg->pgno); + assert( rc==SQLITE_OK || rc==SQLITE_NOMEM ); + return rc; +} + +/* +** Mark a single data page as writeable. The page is written into the +** main journal or sub-journal as required. If the page is written into +** one of the journals, the corresponding bit is set in the +** Pager.pInJournal bitvec and the PagerSavepoint.pInSavepoint bitvecs +** of any open savepoints as appropriate. +*/ +static int pager_write(PgHdr *pPg){ + Pager *pPager = pPg->pPager; + int rc = SQLITE_OK; + + /* This routine is not called unless a write-transaction has already + ** been started. The journal file may or may not be open at this point. + ** It is never called in the ERROR state. + */ + assert( pPager->eState==PAGER_WRITER_LOCKED + || pPager->eState==PAGER_WRITER_CACHEMOD + || pPager->eState==PAGER_WRITER_DBMOD + ); + assert( assert_pager_state(pPager) ); + assert( pPager->errCode==0 ); + assert( pPager->readOnly==0 ); + CHECK_PAGE(pPg); + + /* The journal file needs to be opened. Higher level routines have already + ** obtained the necessary locks to begin the write-transaction, but the + ** rollback journal might not yet be open. Open it now if this is the case. + ** + ** This is done before calling sqlite3PcacheMakeDirty() on the page. + ** Otherwise, if it were done after calling sqlite3PcacheMakeDirty(), then + ** an error might occur and the pager would end up in WRITER_LOCKED state + ** with pages marked as dirty in the cache. + */ + if( pPager->eState==PAGER_WRITER_LOCKED ){ + rc = pager_open_journal(pPager); + if( rc!=SQLITE_OK ) return rc; + } + assert( pPager->eState>=PAGER_WRITER_CACHEMOD ); + assert( assert_pager_state(pPager) ); + + /* Mark the page that is about to be modified as dirty. */ + sqlite3PcacheMakeDirty(pPg); + + /* If a rollback journal is in use, them make sure the page that is about + ** to change is in the rollback journal, or if the page is a new page off + ** then end of the file, make sure it is marked as PGHDR_NEED_SYNC. + */ + assert( (pPager->pInJournal!=0) == isOpen(pPager->jfd) ); + if( pPager->pInJournal!=0 + && sqlite3BitvecTestNotNull(pPager->pInJournal, pPg->pgno)==0 + ){ + assert( pagerUseWal(pPager)==0 ); + if( pPg->pgno<=pPager->dbOrigSize ){ + rc = pagerAddPageToRollbackJournal(pPg); + if( rc!=SQLITE_OK ){ + return rc; + } + }else{ + if( pPager->eState!=PAGER_WRITER_DBMOD ){ + pPg->flags |= PGHDR_NEED_SYNC; + } + PAGERTRACE(("APPEND %d page %d needSync=%d\n", + PAGERID(pPager), pPg->pgno, + ((pPg->flags&PGHDR_NEED_SYNC)?1:0))); + } + } + + /* The PGHDR_DIRTY bit is set above when the page was added to the dirty-list + ** and before writing the page into the rollback journal. Wait until now, + ** after the page has been successfully journalled, before setting the + ** PGHDR_WRITEABLE bit that indicates that the page can be safely modified. + */ + pPg->flags |= PGHDR_WRITEABLE; + + /* If the statement journal is open and the page is not in it, + ** then write the page into the statement journal. + */ + if( pPager->nSavepoint>0 ){ + rc = subjournalPageIfRequired(pPg); + } + + /* Update the database size and return. */ + if( pPager->dbSizepgno ){ + pPager->dbSize = pPg->pgno; + } + return rc; +} + +/* +** This is a variant of sqlite3PagerWrite() that runs when the sector size +** is larger than the page size. SQLite makes the (reasonable) assumption that +** all bytes of a sector are written together by hardware. Hence, all bytes of +** a sector need to be journalled in case of a power loss in the middle of +** a write. +** +** Usually, the sector size is less than or equal to the page size, in which +** case pages can be individually written. This routine only runs in the +** exceptional case where the page size is smaller than the sector size. +*/ +static SQLITE_NOINLINE int pagerWriteLargeSector(PgHdr *pPg){ + int rc = SQLITE_OK; /* Return code */ + Pgno nPageCount; /* Total number of pages in database file */ + Pgno pg1; /* First page of the sector pPg is located on. */ + int nPage = 0; /* Number of pages starting at pg1 to journal */ + int ii; /* Loop counter */ + int needSync = 0; /* True if any page has PGHDR_NEED_SYNC */ + Pager *pPager = pPg->pPager; /* The pager that owns pPg */ + Pgno nPagePerSector = (pPager->sectorSize/pPager->pageSize); + + /* Set the doNotSpill NOSYNC bit to 1. This is because we cannot allow + ** a journal header to be written between the pages journaled by + ** this function. + */ + assert( !MEMDB ); + assert( (pPager->doNotSpill & SPILLFLAG_NOSYNC)==0 ); + pPager->doNotSpill |= SPILLFLAG_NOSYNC; + + /* This trick assumes that both the page-size and sector-size are + ** an integer power of 2. It sets variable pg1 to the identifier + ** of the first page of the sector pPg is located on. + */ + pg1 = ((pPg->pgno-1) & ~(nPagePerSector-1)) + 1; + + nPageCount = pPager->dbSize; + if( pPg->pgno>nPageCount ){ + nPage = (pPg->pgno - pg1)+1; + }else if( (pg1+nPagePerSector-1)>nPageCount ){ + nPage = nPageCount+1-pg1; + }else{ + nPage = nPagePerSector; + } + assert(nPage>0); + assert(pg1<=pPg->pgno); + assert((pg1+nPage)>pPg->pgno); + + for(ii=0; iipgno || !sqlite3BitvecTest(pPager->pInJournal, pg) ){ + if( pg!=PAGER_SJ_PGNO(pPager) ){ + rc = sqlite3PagerGet(pPager, pg, &pPage, 0); + if( rc==SQLITE_OK ){ + rc = pager_write(pPage); + if( pPage->flags&PGHDR_NEED_SYNC ){ + needSync = 1; + } + sqlite3PagerUnrefNotNull(pPage); + } + } + }else if( (pPage = sqlite3PagerLookup(pPager, pg))!=0 ){ + if( pPage->flags&PGHDR_NEED_SYNC ){ + needSync = 1; + } + sqlite3PagerUnrefNotNull(pPage); + } + } + + /* If the PGHDR_NEED_SYNC flag is set for any of the nPage pages + ** starting at pg1, then it needs to be set for all of them. Because + ** writing to any of these nPage pages may damage the others, the + ** journal file must contain sync()ed copies of all of them + ** before any of them can be written out to the database file. + */ + if( rc==SQLITE_OK && needSync ){ + assert( !MEMDB ); + for(ii=0; iiflags |= PGHDR_NEED_SYNC; + sqlite3PagerUnrefNotNull(pPage); + } + } + } + + assert( (pPager->doNotSpill & SPILLFLAG_NOSYNC)!=0 ); + pPager->doNotSpill &= ~SPILLFLAG_NOSYNC; + return rc; +} + +/* +** Mark a data page as writeable. This routine must be called before +** making changes to a page. The caller must check the return value +** of this function and be careful not to change any page data unless +** this routine returns SQLITE_OK. +** +** The difference between this function and pager_write() is that this +** function also deals with the special case where 2 or more pages +** fit on a single disk sector. In this case all co-resident pages +** must have been written to the journal file before returning. +** +** If an error occurs, SQLITE_NOMEM or an IO error code is returned +** as appropriate. Otherwise, SQLITE_OK. +*/ +SQLITE_PRIVATE int sqlite3PagerWrite(PgHdr *pPg){ + Pager *pPager = pPg->pPager; + assert( (pPg->flags & PGHDR_MMAP)==0 ); + assert( pPager->eState>=PAGER_WRITER_LOCKED ); + assert( assert_pager_state(pPager) ); + if( (pPg->flags & PGHDR_WRITEABLE)!=0 && pPager->dbSize>=pPg->pgno ){ + if( pPager->nSavepoint ) return subjournalPageIfRequired(pPg); + return SQLITE_OK; + }else if( pPager->errCode ){ + return pPager->errCode; + }else if( pPager->sectorSize > (u32)pPager->pageSize ){ + assert( pPager->tempFile==0 ); + return pagerWriteLargeSector(pPg); + }else{ + return pager_write(pPg); + } +} + +/* +** Return TRUE if the page given in the argument was previously passed +** to sqlite3PagerWrite(). In other words, return TRUE if it is ok +** to change the content of the page. +*/ +#ifndef NDEBUG +SQLITE_PRIVATE int sqlite3PagerIswriteable(DbPage *pPg){ + return pPg->flags & PGHDR_WRITEABLE; +} +#endif + +/* +** A call to this routine tells the pager that it is not necessary to +** write the information on page pPg back to the disk, even though +** that page might be marked as dirty. This happens, for example, when +** the page has been added as a leaf of the freelist and so its +** content no longer matters. +** +** The overlying software layer calls this routine when all of the data +** on the given page is unused. The pager marks the page as clean so +** that it does not get written to disk. +** +** Tests show that this optimization can quadruple the speed of large +** DELETE operations. +** +** This optimization cannot be used with a temp-file, as the page may +** have been dirty at the start of the transaction. In that case, if +** memory pressure forces page pPg out of the cache, the data does need +** to be written out to disk so that it may be read back in if the +** current transaction is rolled back. +*/ +SQLITE_PRIVATE void sqlite3PagerDontWrite(PgHdr *pPg){ + Pager *pPager = pPg->pPager; + if( !pPager->tempFile && (pPg->flags&PGHDR_DIRTY) && pPager->nSavepoint==0 ){ + PAGERTRACE(("DONT_WRITE page %d of %d\n", pPg->pgno, PAGERID(pPager))); + IOTRACE(("CLEAN %p %d\n", pPager, pPg->pgno)) + pPg->flags |= PGHDR_DONT_WRITE; + pPg->flags &= ~PGHDR_WRITEABLE; + testcase( pPg->flags & PGHDR_NEED_SYNC ); + pager_set_pagehash(pPg); + } +} + +/* +** This routine is called to increment the value of the database file +** change-counter, stored as a 4-byte big-endian integer starting at +** byte offset 24 of the pager file. The secondary change counter at +** 92 is also updated, as is the SQLite version number at offset 96. +** +** But this only happens if the pPager->changeCountDone flag is false. +** To avoid excess churning of page 1, the update only happens once. +** See also the pager_write_changecounter() routine that does an +** unconditional update of the change counters. +** +** If the isDirectMode flag is zero, then this is done by calling +** sqlite3PagerWrite() on page 1, then modifying the contents of the +** page data. In this case the file will be updated when the current +** transaction is committed. +** +** The isDirectMode flag may only be non-zero if the library was compiled +** with the SQLITE_ENABLE_ATOMIC_WRITE macro defined. In this case, +** if isDirect is non-zero, then the database file is updated directly +** by writing an updated version of page 1 using a call to the +** sqlite3OsWrite() function. +*/ +static int pager_incr_changecounter(Pager *pPager, int isDirectMode){ + int rc = SQLITE_OK; + + assert( pPager->eState==PAGER_WRITER_CACHEMOD + || pPager->eState==PAGER_WRITER_DBMOD + ); + assert( assert_pager_state(pPager) ); + + /* Declare and initialize constant integer 'isDirect'. If the + ** atomic-write optimization is enabled in this build, then isDirect + ** is initialized to the value passed as the isDirectMode parameter + ** to this function. Otherwise, it is always set to zero. + ** + ** The idea is that if the atomic-write optimization is not + ** enabled at compile time, the compiler can omit the tests of + ** 'isDirect' below, as well as the block enclosed in the + ** "if( isDirect )" condition. + */ +#ifndef SQLITE_ENABLE_ATOMIC_WRITE +# define DIRECT_MODE 0 + assert( isDirectMode==0 ); + UNUSED_PARAMETER(isDirectMode); +#else +# define DIRECT_MODE isDirectMode +#endif + + if( !pPager->changeCountDone && pPager->dbSize>0 ){ + PgHdr *pPgHdr; /* Reference to page 1 */ + + assert( !pPager->tempFile && isOpen(pPager->fd) ); + + /* Open page 1 of the file for writing. */ + rc = sqlite3PagerGet(pPager, 1, &pPgHdr, 0); + assert( pPgHdr==0 || rc==SQLITE_OK ); + + /* If page one was fetched successfully, and this function is not + ** operating in direct-mode, make page 1 writable. When not in + ** direct mode, page 1 is always held in cache and hence the PagerGet() + ** above is always successful - hence the ALWAYS on rc==SQLITE_OK. + */ + if( !DIRECT_MODE && ALWAYS(rc==SQLITE_OK) ){ + rc = sqlite3PagerWrite(pPgHdr); + } + + if( rc==SQLITE_OK ){ + /* Actually do the update of the change counter */ + pager_write_changecounter(pPgHdr); + + /* If running in direct mode, write the contents of page 1 to the file. */ + if( DIRECT_MODE ){ + const void *zBuf; + assert( pPager->dbFileSize>0 ); + zBuf = pPgHdr->pData; + if( rc==SQLITE_OK ){ + rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0); + pPager->aStat[PAGER_STAT_WRITE]++; + } + if( rc==SQLITE_OK ){ + /* Update the pager's copy of the change-counter. Otherwise, the + ** next time a read transaction is opened the cache will be + ** flushed (as the change-counter values will not match). */ + const void *pCopy = (const void *)&((const char *)zBuf)[24]; + memcpy(&pPager->dbFileVers, pCopy, sizeof(pPager->dbFileVers)); + pPager->changeCountDone = 1; + } + }else{ + pPager->changeCountDone = 1; + } + } + + /* Release the page reference. */ + sqlite3PagerUnref(pPgHdr); + } + return rc; +} + +/* +** Sync the database file to disk. This is a no-op for in-memory databases +** or pages with the Pager.noSync flag set. +** +** If successful, or if called on a pager for which it is a no-op, this +** function returns SQLITE_OK. Otherwise, an IO error code is returned. +*/ +SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager, const char *zSuper){ + int rc = SQLITE_OK; + void *pArg = (void*)zSuper; + rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_SYNC, pArg); + if( rc==SQLITE_NOTFOUND ) rc = SQLITE_OK; + if( rc==SQLITE_OK && !pPager->noSync ){ + assert( !MEMDB ); + rc = sqlite3OsSync(pPager->fd, pPager->syncFlags); + } + return rc; +} + +/* +** This function may only be called while a write-transaction is active in +** rollback. If the connection is in WAL mode, this call is a no-op. +** Otherwise, if the connection does not already have an EXCLUSIVE lock on +** the database file, an attempt is made to obtain one. +** +** If the EXCLUSIVE lock is already held or the attempt to obtain it is +** successful, or the connection is in WAL mode, SQLITE_OK is returned. +** Otherwise, either SQLITE_BUSY or an SQLITE_IOERR_XXX error code is +** returned. +*/ +SQLITE_PRIVATE int sqlite3PagerExclusiveLock(Pager *pPager){ + int rc = pPager->errCode; + assert( assert_pager_state(pPager) ); + if( rc==SQLITE_OK ){ + assert( pPager->eState==PAGER_WRITER_CACHEMOD + || pPager->eState==PAGER_WRITER_DBMOD + || pPager->eState==PAGER_WRITER_LOCKED + ); + assert( assert_pager_state(pPager) ); + if( 0==pagerUseWal(pPager) ){ + rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK); + } + } + return rc; +} + +/* +** Sync the database file for the pager pPager. zSuper points to the name +** of a super-journal file that should be written into the individual +** journal file. zSuper may be NULL, which is interpreted as no +** super-journal (a single database transaction). +** +** This routine ensures that: +** +** * The database file change-counter is updated, +** * the journal is synced (unless the atomic-write optimization is used), +** * all dirty pages are written to the database file, +** * the database file is truncated (if required), and +** * the database file synced. +** +** The only thing that remains to commit the transaction is to finalize +** (delete, truncate or zero the first part of) the journal file (or +** delete the super-journal file if specified). +** +** Note that if zSuper==NULL, this does not overwrite a previous value +** passed to an sqlite3PagerCommitPhaseOne() call. +** +** If the final parameter - noSync - is true, then the database file itself +** is not synced. The caller must call sqlite3PagerSync() directly to +** sync the database file before calling CommitPhaseTwo() to delete the +** journal file in this case. +*/ +SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne( + Pager *pPager, /* Pager object */ + const char *zSuper, /* If not NULL, the super-journal name */ + int noSync /* True to omit the xSync on the db file */ +){ + int rc = SQLITE_OK; /* Return code */ + + assert( pPager->eState==PAGER_WRITER_LOCKED + || pPager->eState==PAGER_WRITER_CACHEMOD + || pPager->eState==PAGER_WRITER_DBMOD + || pPager->eState==PAGER_ERROR + ); + assert( assert_pager_state(pPager) ); + + /* If a prior error occurred, report that error again. */ + if( NEVER(pPager->errCode) ) return pPager->errCode; + + /* Provide the ability to easily simulate an I/O error during testing */ + if( sqlite3FaultSim(400) ) return SQLITE_IOERR; + + PAGERTRACE(("DATABASE SYNC: File=%s zSuper=%s nSize=%d\n", + pPager->zFilename, zSuper, pPager->dbSize)); + + /* If no database changes have been made, return early. */ + if( pPager->eStatetempFile ); + assert( isOpen(pPager->fd) || pPager->tempFile ); + if( 0==pagerFlushOnCommit(pPager, 1) ){ + /* If this is an in-memory db, or no pages have been written to, or this + ** function has already been called, it is mostly a no-op. However, any + ** backup in progress needs to be restarted. */ + sqlite3BackupRestart(pPager->pBackup); + }else{ + PgHdr *pList; + if( pagerUseWal(pPager) ){ + PgHdr *pPageOne = 0; + pList = sqlite3PcacheDirtyList(pPager->pPCache); + if( pList==0 ){ + /* Must have at least one page for the WAL commit flag. + ** Ticket [2d1a5c67dfc2363e44f29d9bbd57f] 2011-05-18 */ + rc = sqlite3PagerGet(pPager, 1, &pPageOne, 0); + pList = pPageOne; + pList->pDirty = 0; + } + assert( rc==SQLITE_OK ); + if( ALWAYS(pList) ){ + rc = pagerWalFrames(pPager, pList, pPager->dbSize, 1); + } + sqlite3PagerUnref(pPageOne); + if( rc==SQLITE_OK ){ + sqlite3PcacheCleanAll(pPager->pPCache); + } + }else{ + /* The bBatch boolean is true if the batch-atomic-write commit method + ** should be used. No rollback journal is created if batch-atomic-write + ** is enabled. + */ +#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE + sqlite3_file *fd = pPager->fd; + int bBatch = zSuper==0 /* An SQLITE_IOCAP_BATCH_ATOMIC commit */ + && (sqlite3OsDeviceCharacteristics(fd) & SQLITE_IOCAP_BATCH_ATOMIC) + && !pPager->noSync + && sqlite3JournalIsInMemory(pPager->jfd); +#else +# define bBatch 0 +#endif + +#ifdef SQLITE_ENABLE_ATOMIC_WRITE + /* The following block updates the change-counter. Exactly how it + ** does this depends on whether or not the atomic-update optimization + ** was enabled at compile time, and if this transaction meets the + ** runtime criteria to use the operation: + ** + ** * The file-system supports the atomic-write property for + ** blocks of size page-size, and + ** * This commit is not part of a multi-file transaction, and + ** * Exactly one page has been modified and store in the journal file. + ** + ** If the optimization was not enabled at compile time, then the + ** pager_incr_changecounter() function is called to update the change + ** counter in 'indirect-mode'. If the optimization is compiled in but + ** is not applicable to this transaction, call sqlite3JournalCreate() + ** to make sure the journal file has actually been created, then call + ** pager_incr_changecounter() to update the change-counter in indirect + ** mode. + ** + ** Otherwise, if the optimization is both enabled and applicable, + ** then call pager_incr_changecounter() to update the change-counter + ** in 'direct' mode. In this case the journal file will never be + ** created for this transaction. + */ + if( bBatch==0 ){ + PgHdr *pPg; + assert( isOpen(pPager->jfd) + || pPager->journalMode==PAGER_JOURNALMODE_OFF + || pPager->journalMode==PAGER_JOURNALMODE_WAL + ); + if( !zSuper && isOpen(pPager->jfd) + && pPager->journalOff==jrnlBufferSize(pPager) + && pPager->dbSize>=pPager->dbOrigSize + && (!(pPg = sqlite3PcacheDirtyList(pPager->pPCache)) || 0==pPg->pDirty) + ){ + /* Update the db file change counter via the direct-write method. The + ** following call will modify the in-memory representation of page 1 + ** to include the updated change counter and then write page 1 + ** directly to the database file. Because of the atomic-write + ** property of the host file-system, this is safe. + */ + rc = pager_incr_changecounter(pPager, 1); + }else{ + rc = sqlite3JournalCreate(pPager->jfd); + if( rc==SQLITE_OK ){ + rc = pager_incr_changecounter(pPager, 0); + } + } + } +#else /* SQLITE_ENABLE_ATOMIC_WRITE */ +#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE + if( zSuper ){ + rc = sqlite3JournalCreate(pPager->jfd); + if( rc!=SQLITE_OK ) goto commit_phase_one_exit; + assert( bBatch==0 ); + } +#endif + rc = pager_incr_changecounter(pPager, 0); +#endif /* !SQLITE_ENABLE_ATOMIC_WRITE */ + if( rc!=SQLITE_OK ) goto commit_phase_one_exit; + + /* Write the super-journal name into the journal file. If a + ** super-journal file name has already been written to the journal file, + ** or if zSuper is NULL (no super-journal), then this call is a no-op. + */ + rc = writeSuperJournal(pPager, zSuper); + if( rc!=SQLITE_OK ) goto commit_phase_one_exit; + + /* Sync the journal file and write all dirty pages to the database. + ** If the atomic-update optimization is being used, this sync will not + ** create the journal file or perform any real IO. + ** + ** Because the change-counter page was just modified, unless the + ** atomic-update optimization is used it is almost certain that the + ** journal requires a sync here. However, in locking_mode=exclusive + ** on a system under memory pressure it is just possible that this is + ** not the case. In this case it is likely enough that the redundant + ** xSync() call will be changed to a no-op by the OS anyhow. + */ + rc = syncJournal(pPager, 0); + if( rc!=SQLITE_OK ) goto commit_phase_one_exit; + + pList = sqlite3PcacheDirtyList(pPager->pPCache); +#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE + if( bBatch ){ + rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_BEGIN_ATOMIC_WRITE, 0); + if( rc==SQLITE_OK ){ + rc = pager_write_pagelist(pPager, pList); + if( rc==SQLITE_OK && pPager->dbSize>pPager->dbFileSize ){ + char *pTmp = pPager->pTmpSpace; + int szPage = (int)pPager->pageSize; + memset(pTmp, 0, szPage); + rc = sqlite3OsWrite(pPager->fd, pTmp, szPage, + ((i64)pPager->dbSize*pPager->pageSize)-szPage); + } + if( rc==SQLITE_OK ){ + rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, 0); + } + if( rc!=SQLITE_OK ){ + sqlite3OsFileControlHint(fd, SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE, 0); + } + } + + if( (rc&0xFF)==SQLITE_IOERR && rc!=SQLITE_IOERR_NOMEM ){ + rc = sqlite3JournalCreate(pPager->jfd); + if( rc!=SQLITE_OK ){ + sqlite3OsClose(pPager->jfd); + goto commit_phase_one_exit; + } + bBatch = 0; + }else{ + sqlite3OsClose(pPager->jfd); + } + } +#endif /* SQLITE_ENABLE_BATCH_ATOMIC_WRITE */ + + if( bBatch==0 ){ + rc = pager_write_pagelist(pPager, pList); + } + if( rc!=SQLITE_OK ){ + assert( rc!=SQLITE_IOERR_BLOCKED ); + goto commit_phase_one_exit; + } + sqlite3PcacheCleanAll(pPager->pPCache); + + /* If the file on disk is smaller than the database image, use + ** pager_truncate to grow the file here. This can happen if the database + ** image was extended as part of the current transaction and then the + ** last page in the db image moved to the free-list. In this case the + ** last page is never written out to disk, leaving the database file + ** undersized. Fix this now if it is the case. */ + if( pPager->dbSize>pPager->dbFileSize ){ + Pgno nNew = pPager->dbSize - (pPager->dbSize==PAGER_SJ_PGNO(pPager)); + assert( pPager->eState==PAGER_WRITER_DBMOD ); + rc = pager_truncate(pPager, nNew); + if( rc!=SQLITE_OK ) goto commit_phase_one_exit; + } + + /* Finally, sync the database file. */ + if( !noSync ){ + rc = sqlite3PagerSync(pPager, zSuper); + } + IOTRACE(("DBSYNC %p\n", pPager)) + } + } + +commit_phase_one_exit: + if( rc==SQLITE_OK && !pagerUseWal(pPager) ){ + pPager->eState = PAGER_WRITER_FINISHED; + } + return rc; +} + + +/* +** When this function is called, the database file has been completely +** updated to reflect the changes made by the current transaction and +** synced to disk. The journal file still exists in the file-system +** though, and if a failure occurs at this point it will eventually +** be used as a hot-journal and the current transaction rolled back. +** +** This function finalizes the journal file, either by deleting, +** truncating or partially zeroing it, so that it cannot be used +** for hot-journal rollback. Once this is done the transaction is +** irrevocably committed. +** +** If an error occurs, an IO error code is returned and the pager +** moves into the error state. Otherwise, SQLITE_OK is returned. +*/ +SQLITE_PRIVATE int sqlite3PagerCommitPhaseTwo(Pager *pPager){ + int rc = SQLITE_OK; /* Return code */ + + /* This routine should not be called if a prior error has occurred. + ** But if (due to a coding error elsewhere in the system) it does get + ** called, just return the same error code without doing anything. */ + if( NEVER(pPager->errCode) ) return pPager->errCode; + pPager->iDataVersion++; + + assert( pPager->eState==PAGER_WRITER_LOCKED + || pPager->eState==PAGER_WRITER_FINISHED + || (pagerUseWal(pPager) && pPager->eState==PAGER_WRITER_CACHEMOD) + ); + assert( assert_pager_state(pPager) ); + + /* An optimization. If the database was not actually modified during + ** this transaction, the pager is running in exclusive-mode and is + ** using persistent journals, then this function is a no-op. + ** + ** The start of the journal file currently contains a single journal + ** header with the nRec field set to 0. If such a journal is used as + ** a hot-journal during hot-journal rollback, 0 changes will be made + ** to the database file. So there is no need to zero the journal + ** header. Since the pager is in exclusive mode, there is no need + ** to drop any locks either. + */ + if( pPager->eState==PAGER_WRITER_LOCKED + && pPager->exclusiveMode + && pPager->journalMode==PAGER_JOURNALMODE_PERSIST + ){ + assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) || !pPager->journalOff ); + pPager->eState = PAGER_READER; + return SQLITE_OK; + } + + PAGERTRACE(("COMMIT %d\n", PAGERID(pPager))); + rc = pager_end_transaction(pPager, pPager->setSuper, 1); + return pager_error(pPager, rc); +} + +/* +** If a write transaction is open, then all changes made within the +** transaction are reverted and the current write-transaction is closed. +** The pager falls back to PAGER_READER state if successful, or PAGER_ERROR +** state if an error occurs. +** +** If the pager is already in PAGER_ERROR state when this function is called, +** it returns Pager.errCode immediately. No work is performed in this case. +** +** Otherwise, in rollback mode, this function performs two functions: +** +** 1) It rolls back the journal file, restoring all database file and +** in-memory cache pages to the state they were in when the transaction +** was opened, and +** +** 2) It finalizes the journal file, so that it is not used for hot +** rollback at any point in the future. +** +** Finalization of the journal file (task 2) is only performed if the +** rollback is successful. +** +** In WAL mode, all cache-entries containing data modified within the +** current transaction are either expelled from the cache or reverted to +** their pre-transaction state by re-reading data from the database or +** WAL files. The WAL transaction is then closed. +*/ +SQLITE_PRIVATE int sqlite3PagerRollback(Pager *pPager){ + int rc = SQLITE_OK; /* Return code */ + PAGERTRACE(("ROLLBACK %d\n", PAGERID(pPager))); + + /* PagerRollback() is a no-op if called in READER or OPEN state. If + ** the pager is already in the ERROR state, the rollback is not + ** attempted here. Instead, the error code is returned to the caller. + */ + assert( assert_pager_state(pPager) ); + if( pPager->eState==PAGER_ERROR ) return pPager->errCode; + if( pPager->eState<=PAGER_READER ) return SQLITE_OK; + + if( pagerUseWal(pPager) ){ + int rc2; + rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_ROLLBACK, -1); + rc2 = pager_end_transaction(pPager, pPager->setSuper, 0); + if( rc==SQLITE_OK ) rc = rc2; + }else if( !isOpen(pPager->jfd) || pPager->eState==PAGER_WRITER_LOCKED ){ + int eState = pPager->eState; + rc = pager_end_transaction(pPager, 0, 0); + if( !MEMDB && eState>PAGER_WRITER_LOCKED ){ + /* This can happen using journal_mode=off. Move the pager to the error + ** state to indicate that the contents of the cache may not be trusted. + ** Any active readers will get SQLITE_ABORT. + */ + pPager->errCode = SQLITE_ABORT; + pPager->eState = PAGER_ERROR; + setGetterMethod(pPager); + return rc; + } + }else{ + rc = pager_playback(pPager, 0); + } + + assert( pPager->eState==PAGER_READER || rc!=SQLITE_OK ); + assert( rc==SQLITE_OK || rc==SQLITE_FULL || rc==SQLITE_CORRUPT + || rc==SQLITE_NOMEM || (rc&0xFF)==SQLITE_IOERR + || rc==SQLITE_CANTOPEN + ); + + /* If an error occurs during a ROLLBACK, we can no longer trust the pager + ** cache. So call pager_error() on the way out to make any error persistent. + */ + return pager_error(pPager, rc); +} + +/* +** Return TRUE if the database file is opened read-only. Return FALSE +** if the database is (in theory) writable. +*/ +SQLITE_PRIVATE u8 sqlite3PagerIsreadonly(Pager *pPager){ + return pPager->readOnly; +} + +#ifdef SQLITE_DEBUG +/* +** Return the sum of the reference counts for all pages held by pPager. +*/ +SQLITE_PRIVATE int sqlite3PagerRefcount(Pager *pPager){ + return sqlite3PcacheRefCount(pPager->pPCache); +} +#endif + +/* +** Return the approximate number of bytes of memory currently +** used by the pager and its associated cache. +*/ +SQLITE_PRIVATE int sqlite3PagerMemUsed(Pager *pPager){ + int perPageSize = pPager->pageSize + pPager->nExtra + + (int)(sizeof(PgHdr) + 5*sizeof(void*)); + return perPageSize*sqlite3PcachePagecount(pPager->pPCache) + + sqlite3MallocSize(pPager) + + pPager->pageSize; +} + +/* +** Return the number of references to the specified page. +*/ +SQLITE_PRIVATE int sqlite3PagerPageRefcount(DbPage *pPage){ + return sqlite3PcachePageRefcount(pPage); +} + +#ifdef SQLITE_TEST +/* +** This routine is used for testing and analysis only. +*/ +SQLITE_PRIVATE int *sqlite3PagerStats(Pager *pPager){ + static int a[11]; + a[0] = sqlite3PcacheRefCount(pPager->pPCache); + a[1] = sqlite3PcachePagecount(pPager->pPCache); + a[2] = sqlite3PcacheGetCachesize(pPager->pPCache); + a[3] = pPager->eState==PAGER_OPEN ? -1 : (int) pPager->dbSize; + a[4] = pPager->eState; + a[5] = pPager->errCode; + a[6] = (int)pPager->aStat[PAGER_STAT_HIT] & 0x7fffffff; + a[7] = (int)pPager->aStat[PAGER_STAT_MISS] & 0x7fffffff; + a[8] = 0; /* Used to be pPager->nOvfl */ + a[9] = pPager->nRead; + a[10] = (int)pPager->aStat[PAGER_STAT_WRITE] & 0x7fffffff; + return a; +} +#endif + +/* +** Parameter eStat must be one of SQLITE_DBSTATUS_CACHE_HIT, _MISS, _WRITE, +** or _WRITE+1. The SQLITE_DBSTATUS_CACHE_WRITE+1 case is a translation +** of SQLITE_DBSTATUS_CACHE_SPILL. The _SPILL case is not contiguous because +** it was added later. +** +** Before returning, *pnVal is incremented by the +** current cache hit or miss count, according to the value of eStat. If the +** reset parameter is non-zero, the cache hit or miss count is zeroed before +** returning. +*/ +SQLITE_PRIVATE void sqlite3PagerCacheStat(Pager *pPager, int eStat, int reset, u64 *pnVal){ + + assert( eStat==SQLITE_DBSTATUS_CACHE_HIT + || eStat==SQLITE_DBSTATUS_CACHE_MISS + || eStat==SQLITE_DBSTATUS_CACHE_WRITE + || eStat==SQLITE_DBSTATUS_CACHE_WRITE+1 + ); + + assert( SQLITE_DBSTATUS_CACHE_HIT+1==SQLITE_DBSTATUS_CACHE_MISS ); + assert( SQLITE_DBSTATUS_CACHE_HIT+2==SQLITE_DBSTATUS_CACHE_WRITE ); + assert( PAGER_STAT_HIT==0 && PAGER_STAT_MISS==1 + && PAGER_STAT_WRITE==2 && PAGER_STAT_SPILL==3 ); + + eStat -= SQLITE_DBSTATUS_CACHE_HIT; + *pnVal += pPager->aStat[eStat]; + if( reset ){ + pPager->aStat[eStat] = 0; + } +} + +/* +** Return true if this is an in-memory or temp-file backed pager. +*/ +SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager *pPager){ + return pPager->tempFile || pPager->memVfs; +} + +/* +** Check that there are at least nSavepoint savepoints open. If there are +** currently less than nSavepoints open, then open one or more savepoints +** to make up the difference. If the number of savepoints is already +** equal to nSavepoint, then this function is a no-op. +** +** If a memory allocation fails, SQLITE_NOMEM is returned. If an error +** occurs while opening the sub-journal file, then an IO error code is +** returned. Otherwise, SQLITE_OK. +*/ +static SQLITE_NOINLINE int pagerOpenSavepoint(Pager *pPager, int nSavepoint){ + int rc = SQLITE_OK; /* Return code */ + int nCurrent = pPager->nSavepoint; /* Current number of savepoints */ + int ii; /* Iterator variable */ + PagerSavepoint *aNew; /* New Pager.aSavepoint array */ + + assert( pPager->eState>=PAGER_WRITER_LOCKED ); + assert( assert_pager_state(pPager) ); + assert( nSavepoint>nCurrent && pPager->useJournal ); + + /* Grow the Pager.aSavepoint array using realloc(). Return SQLITE_NOMEM + ** if the allocation fails. Otherwise, zero the new portion in case a + ** malloc failure occurs while populating it in the for(...) loop below. + */ + aNew = (PagerSavepoint *)sqlite3Realloc( + pPager->aSavepoint, sizeof(PagerSavepoint)*nSavepoint + ); + if( !aNew ){ + return SQLITE_NOMEM_BKPT; + } + memset(&aNew[nCurrent], 0, (nSavepoint-nCurrent) * sizeof(PagerSavepoint)); + pPager->aSavepoint = aNew; + + /* Populate the PagerSavepoint structures just allocated. */ + for(ii=nCurrent; iidbSize; + if( isOpen(pPager->jfd) && pPager->journalOff>0 ){ + aNew[ii].iOffset = pPager->journalOff; + }else{ + aNew[ii].iOffset = JOURNAL_HDR_SZ(pPager); + } + aNew[ii].iSubRec = pPager->nSubRec; + aNew[ii].pInSavepoint = sqlite3BitvecCreate(pPager->dbSize); + aNew[ii].bTruncateOnRelease = 1; + if( !aNew[ii].pInSavepoint ){ + return SQLITE_NOMEM_BKPT; + } + if( pagerUseWal(pPager) ){ + sqlite3WalSavepoint(pPager->pWal, aNew[ii].aWalData); + } + pPager->nSavepoint = ii+1; + } + assert( pPager->nSavepoint==nSavepoint ); + assertTruncateConstraint(pPager); + return rc; +} +SQLITE_PRIVATE int sqlite3PagerOpenSavepoint(Pager *pPager, int nSavepoint){ + assert( pPager->eState>=PAGER_WRITER_LOCKED ); + assert( assert_pager_state(pPager) ); + + if( nSavepoint>pPager->nSavepoint && pPager->useJournal ){ + return pagerOpenSavepoint(pPager, nSavepoint); + }else{ + return SQLITE_OK; + } +} + + +/* +** This function is called to rollback or release (commit) a savepoint. +** The savepoint to release or rollback need not be the most recently +** created savepoint. +** +** Parameter op is always either SAVEPOINT_ROLLBACK or SAVEPOINT_RELEASE. +** If it is SAVEPOINT_RELEASE, then release and destroy the savepoint with +** index iSavepoint. If it is SAVEPOINT_ROLLBACK, then rollback all changes +** that have occurred since the specified savepoint was created. +** +** The savepoint to rollback or release is identified by parameter +** iSavepoint. A value of 0 means to operate on the outermost savepoint +** (the first created). A value of (Pager.nSavepoint-1) means operate +** on the most recently created savepoint. If iSavepoint is greater than +** (Pager.nSavepoint-1), then this function is a no-op. +** +** If a negative value is passed to this function, then the current +** transaction is rolled back. This is different to calling +** sqlite3PagerRollback() because this function does not terminate +** the transaction or unlock the database, it just restores the +** contents of the database to its original state. +** +** In any case, all savepoints with an index greater than iSavepoint +** are destroyed. If this is a release operation (op==SAVEPOINT_RELEASE), +** then savepoint iSavepoint is also destroyed. +** +** This function may return SQLITE_NOMEM if a memory allocation fails, +** or an IO error code if an IO error occurs while rolling back a +** savepoint. If no errors occur, SQLITE_OK is returned. +*/ +SQLITE_PRIVATE int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint){ + int rc = pPager->errCode; + +#ifdef SQLITE_ENABLE_ZIPVFS + if( op==SAVEPOINT_RELEASE ) rc = SQLITE_OK; +#endif + + assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK ); + assert( iSavepoint>=0 || op==SAVEPOINT_ROLLBACK ); + + if( rc==SQLITE_OK && iSavepointnSavepoint ){ + int ii; /* Iterator variable */ + int nNew; /* Number of remaining savepoints after this op. */ + + /* Figure out how many savepoints will still be active after this + ** operation. Store this value in nNew. Then free resources associated + ** with any savepoints that are destroyed by this operation. + */ + nNew = iSavepoint + (( op==SAVEPOINT_RELEASE ) ? 0 : 1); + for(ii=nNew; iinSavepoint; ii++){ + sqlite3BitvecDestroy(pPager->aSavepoint[ii].pInSavepoint); + } + pPager->nSavepoint = nNew; + + /* Truncate the sub-journal so that it only includes the parts + ** that are still in use. */ + if( op==SAVEPOINT_RELEASE ){ + PagerSavepoint *pRel = &pPager->aSavepoint[nNew]; + if( pRel->bTruncateOnRelease && isOpen(pPager->sjfd) ){ + /* Only truncate if it is an in-memory sub-journal. */ + if( sqlite3JournalIsInMemory(pPager->sjfd) ){ + i64 sz = (pPager->pageSize+4)*(i64)pRel->iSubRec; + rc = sqlite3OsTruncate(pPager->sjfd, sz); + assert( rc==SQLITE_OK ); + } + pPager->nSubRec = pRel->iSubRec; + } + } + /* Else this is a rollback operation, playback the specified savepoint. + ** If this is a temp-file, it is possible that the journal file has + ** not yet been opened. In this case there have been no changes to + ** the database file, so the playback operation can be skipped. + */ + else if( pagerUseWal(pPager) || isOpen(pPager->jfd) ){ + PagerSavepoint *pSavepoint = (nNew==0)?0:&pPager->aSavepoint[nNew-1]; + rc = pagerPlaybackSavepoint(pPager, pSavepoint); + assert(rc!=SQLITE_DONE); + } + +#ifdef SQLITE_ENABLE_ZIPVFS + /* If the cache has been modified but the savepoint cannot be rolled + ** back journal_mode=off, put the pager in the error state. This way, + ** if the VFS used by this pager includes ZipVFS, the entire transaction + ** can be rolled back at the ZipVFS level. */ + else if( + pPager->journalMode==PAGER_JOURNALMODE_OFF + && pPager->eState>=PAGER_WRITER_CACHEMOD + ){ + pPager->errCode = SQLITE_ABORT; + pPager->eState = PAGER_ERROR; + setGetterMethod(pPager); + } +#endif + } + + return rc; +} + +/* +** Return the full pathname of the database file. +** +** Except, if the pager is in-memory only, then return an empty string if +** nullIfMemDb is true. This routine is called with nullIfMemDb==1 when +** used to report the filename to the user, for compatibility with legacy +** behavior. But when the Btree needs to know the filename for matching to +** shared cache, it uses nullIfMemDb==0 so that in-memory databases can +** participate in shared-cache. +** +** The return value to this routine is always safe to use with +** sqlite3_uri_parameter() and sqlite3_filename_database() and friends. +*/ +SQLITE_PRIVATE const char *sqlite3PagerFilename(const Pager *pPager, int nullIfMemDb){ + static const char zFake[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; + if( nullIfMemDb && (pPager->memDb || sqlite3IsMemdb(pPager->pVfs)) ){ + return &zFake[4]; + }else{ + return pPager->zFilename; + } +} + +/* +** Return the VFS structure for the pager. +*/ +SQLITE_PRIVATE sqlite3_vfs *sqlite3PagerVfs(Pager *pPager){ + return pPager->pVfs; +} + +/* +** Return the file handle for the database file associated +** with the pager. This might return NULL if the file has +** not yet been opened. +*/ +SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager *pPager){ + return pPager->fd; +} + +/* +** Return the file handle for the journal file (if it exists). +** This will be either the rollback journal or the WAL file. +*/ +SQLITE_PRIVATE sqlite3_file *sqlite3PagerJrnlFile(Pager *pPager){ +#ifdef SQLITE_OMIT_WAL + return pPager->jfd; +#else + return pPager->pWal ? sqlite3WalFile(pPager->pWal) : pPager->jfd; +#endif +} + +/* +** Return the full pathname of the journal file. +*/ +SQLITE_PRIVATE const char *sqlite3PagerJournalname(Pager *pPager){ + return pPager->zJournal; +} + +#ifndef SQLITE_OMIT_AUTOVACUUM +/* +** Move the page pPg to location pgno in the file. +** +** There must be no references to the page previously located at +** pgno (which we call pPgOld) though that page is allowed to be +** in cache. If the page previously located at pgno is not already +** in the rollback journal, it is not put there by by this routine. +** +** References to the page pPg remain valid. Updating any +** meta-data associated with pPg (i.e. data stored in the nExtra bytes +** allocated along with the page) is the responsibility of the caller. +** +** A transaction must be active when this routine is called. It used to be +** required that a statement transaction was not active, but this restriction +** has been removed (CREATE INDEX needs to move a page when a statement +** transaction is active). +** +** If the fourth argument, isCommit, is non-zero, then this page is being +** moved as part of a database reorganization just before the transaction +** is being committed. In this case, it is guaranteed that the database page +** pPg refers to will not be written to again within this transaction. +** +** This function may return SQLITE_NOMEM or an IO error code if an error +** occurs. Otherwise, it returns SQLITE_OK. +*/ +SQLITE_PRIVATE int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, int isCommit){ + PgHdr *pPgOld; /* The page being overwritten. */ + Pgno needSyncPgno = 0; /* Old value of pPg->pgno, if sync is required */ + int rc; /* Return code */ + Pgno origPgno; /* The original page number */ + + assert( pPg->nRef>0 ); + assert( pPager->eState==PAGER_WRITER_CACHEMOD + || pPager->eState==PAGER_WRITER_DBMOD + ); + assert( assert_pager_state(pPager) ); + + /* In order to be able to rollback, an in-memory database must journal + ** the page we are moving from. + */ + assert( pPager->tempFile || !MEMDB ); + if( pPager->tempFile ){ + rc = sqlite3PagerWrite(pPg); + if( rc ) return rc; + } + + /* If the page being moved is dirty and has not been saved by the latest + ** savepoint, then save the current contents of the page into the + ** sub-journal now. This is required to handle the following scenario: + ** + ** BEGIN; + ** + ** SAVEPOINT one; + ** + ** ROLLBACK TO one; + ** + ** If page X were not written to the sub-journal here, it would not + ** be possible to restore its contents when the "ROLLBACK TO one" + ** statement were is processed. + ** + ** subjournalPage() may need to allocate space to store pPg->pgno into + ** one or more savepoint bitvecs. This is the reason this function + ** may return SQLITE_NOMEM. + */ + if( (pPg->flags & PGHDR_DIRTY)!=0 + && SQLITE_OK!=(rc = subjournalPageIfRequired(pPg)) + ){ + return rc; + } + + PAGERTRACE(("MOVE %d page %d (needSync=%d) moves to %d\n", + PAGERID(pPager), pPg->pgno, (pPg->flags&PGHDR_NEED_SYNC)?1:0, pgno)); + IOTRACE(("MOVE %p %d %d\n", pPager, pPg->pgno, pgno)) + + /* If the journal needs to be sync()ed before page pPg->pgno can + ** be written to, store pPg->pgno in local variable needSyncPgno. + ** + ** If the isCommit flag is set, there is no need to remember that + ** the journal needs to be sync()ed before database page pPg->pgno + ** can be written to. The caller has already promised not to write to it. + */ + if( (pPg->flags&PGHDR_NEED_SYNC) && !isCommit ){ + needSyncPgno = pPg->pgno; + assert( pPager->journalMode==PAGER_JOURNALMODE_OFF || + pageInJournal(pPager, pPg) || pPg->pgno>pPager->dbOrigSize ); + assert( pPg->flags&PGHDR_DIRTY ); + } + + /* If the cache contains a page with page-number pgno, remove it + ** from its hash chain. Also, if the PGHDR_NEED_SYNC flag was set for + ** page pgno before the 'move' operation, it needs to be retained + ** for the page moved there. + */ + pPg->flags &= ~PGHDR_NEED_SYNC; + pPgOld = sqlite3PagerLookup(pPager, pgno); + assert( !pPgOld || pPgOld->nRef==1 || CORRUPT_DB ); + if( pPgOld ){ + if( NEVER(pPgOld->nRef>1) ){ + sqlite3PagerUnrefNotNull(pPgOld); + return SQLITE_CORRUPT_BKPT; + } + pPg->flags |= (pPgOld->flags&PGHDR_NEED_SYNC); + if( pPager->tempFile ){ + /* Do not discard pages from an in-memory database since we might + ** need to rollback later. Just move the page out of the way. */ + sqlite3PcacheMove(pPgOld, pPager->dbSize+1); + }else{ + sqlite3PcacheDrop(pPgOld); + } + } + + origPgno = pPg->pgno; + sqlite3PcacheMove(pPg, pgno); + sqlite3PcacheMakeDirty(pPg); + + /* For an in-memory database, make sure the original page continues + ** to exist, in case the transaction needs to roll back. Use pPgOld + ** as the original page since it has already been allocated. + */ + if( pPager->tempFile && pPgOld ){ + sqlite3PcacheMove(pPgOld, origPgno); + sqlite3PagerUnrefNotNull(pPgOld); + } + + if( needSyncPgno ){ + /* If needSyncPgno is non-zero, then the journal file needs to be + ** sync()ed before any data is written to database file page needSyncPgno. + ** Currently, no such page exists in the page-cache and the + ** "is journaled" bitvec flag has been set. This needs to be remedied by + ** loading the page into the pager-cache and setting the PGHDR_NEED_SYNC + ** flag. + ** + ** If the attempt to load the page into the page-cache fails, (due + ** to a malloc() or IO failure), clear the bit in the pInJournal[] + ** array. Otherwise, if the page is loaded and written again in + ** this transaction, it may be written to the database file before + ** it is synced into the journal file. This way, it may end up in + ** the journal file twice, but that is not a problem. + */ + PgHdr *pPgHdr; + rc = sqlite3PagerGet(pPager, needSyncPgno, &pPgHdr, 0); + if( rc!=SQLITE_OK ){ + if( needSyncPgno<=pPager->dbOrigSize ){ + assert( pPager->pTmpSpace!=0 ); + sqlite3BitvecClear(pPager->pInJournal, needSyncPgno, pPager->pTmpSpace); + } + return rc; + } + pPgHdr->flags |= PGHDR_NEED_SYNC; + sqlite3PcacheMakeDirty(pPgHdr); + sqlite3PagerUnrefNotNull(pPgHdr); + } + + return SQLITE_OK; +} +#endif + +/* +** The page handle passed as the first argument refers to a dirty page +** with a page number other than iNew. This function changes the page's +** page number to iNew and sets the value of the PgHdr.flags field to +** the value passed as the third parameter. +*/ +SQLITE_PRIVATE void sqlite3PagerRekey(DbPage *pPg, Pgno iNew, u16 flags){ + assert( pPg->pgno!=iNew ); + pPg->flags = flags; + sqlite3PcacheMove(pPg, iNew); +} + +/* +** Return a pointer to the data for the specified page. +*/ +SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *pPg){ + assert( pPg->nRef>0 || pPg->pPager->memDb ); + return pPg->pData; +} + +/* +** Return a pointer to the Pager.nExtra bytes of "extra" space +** allocated along with the specified page. +*/ +SQLITE_PRIVATE void *sqlite3PagerGetExtra(DbPage *pPg){ + return pPg->pExtra; +} + +/* +** Get/set the locking-mode for this pager. Parameter eMode must be one +** of PAGER_LOCKINGMODE_QUERY, PAGER_LOCKINGMODE_NORMAL or +** PAGER_LOCKINGMODE_EXCLUSIVE. If the parameter is not _QUERY, then +** the locking-mode is set to the value specified. +** +** The returned value is either PAGER_LOCKINGMODE_NORMAL or +** PAGER_LOCKINGMODE_EXCLUSIVE, indicating the current (possibly updated) +** locking-mode. +*/ +SQLITE_PRIVATE int sqlite3PagerLockingMode(Pager *pPager, int eMode){ + assert( eMode==PAGER_LOCKINGMODE_QUERY + || eMode==PAGER_LOCKINGMODE_NORMAL + || eMode==PAGER_LOCKINGMODE_EXCLUSIVE ); + assert( PAGER_LOCKINGMODE_QUERY<0 ); + assert( PAGER_LOCKINGMODE_NORMAL>=0 && PAGER_LOCKINGMODE_EXCLUSIVE>=0 ); + assert( pPager->exclusiveMode || 0==sqlite3WalHeapMemory(pPager->pWal) ); + if( eMode>=0 && !pPager->tempFile && !sqlite3WalHeapMemory(pPager->pWal) ){ + pPager->exclusiveMode = (u8)eMode; + } + return (int)pPager->exclusiveMode; +} + +/* +** Set the journal-mode for this pager. Parameter eMode must be one of: +** +** PAGER_JOURNALMODE_DELETE +** PAGER_JOURNALMODE_TRUNCATE +** PAGER_JOURNALMODE_PERSIST +** PAGER_JOURNALMODE_OFF +** PAGER_JOURNALMODE_MEMORY +** PAGER_JOURNALMODE_WAL +** +** The journalmode is set to the value specified if the change is allowed. +** The change may be disallowed for the following reasons: +** +** * An in-memory database can only have its journal_mode set to _OFF +** or _MEMORY. +** +** * Temporary databases cannot have _WAL journalmode. +** +** The returned indicate the current (possibly updated) journal-mode. +*/ +SQLITE_PRIVATE int sqlite3PagerSetJournalMode(Pager *pPager, int eMode){ + u8 eOld = pPager->journalMode; /* Prior journalmode */ + + /* The eMode parameter is always valid */ + assert( eMode==PAGER_JOURNALMODE_DELETE /* 0 */ + || eMode==PAGER_JOURNALMODE_PERSIST /* 1 */ + || eMode==PAGER_JOURNALMODE_OFF /* 2 */ + || eMode==PAGER_JOURNALMODE_TRUNCATE /* 3 */ + || eMode==PAGER_JOURNALMODE_MEMORY /* 4 */ + || eMode==PAGER_JOURNALMODE_WAL /* 5 */ ); + + /* This routine is only called from the OP_JournalMode opcode, and + ** the logic there will never allow a temporary file to be changed + ** to WAL mode. + */ + assert( pPager->tempFile==0 || eMode!=PAGER_JOURNALMODE_WAL ); + + /* Do allow the journalmode of an in-memory database to be set to + ** anything other than MEMORY or OFF + */ + if( MEMDB ){ + assert( eOld==PAGER_JOURNALMODE_MEMORY || eOld==PAGER_JOURNALMODE_OFF ); + if( eMode!=PAGER_JOURNALMODE_MEMORY && eMode!=PAGER_JOURNALMODE_OFF ){ + eMode = eOld; + } + } + + if( eMode!=eOld ){ + + /* Change the journal mode. */ + assert( pPager->eState!=PAGER_ERROR ); + pPager->journalMode = (u8)eMode; + + /* When transitioning from TRUNCATE or PERSIST to any other journal + ** mode except WAL, unless the pager is in locking_mode=exclusive mode, + ** delete the journal file. + */ + assert( (PAGER_JOURNALMODE_TRUNCATE & 5)==1 ); + assert( (PAGER_JOURNALMODE_PERSIST & 5)==1 ); + assert( (PAGER_JOURNALMODE_DELETE & 5)==0 ); + assert( (PAGER_JOURNALMODE_MEMORY & 5)==4 ); + assert( (PAGER_JOURNALMODE_OFF & 5)==0 ); + assert( (PAGER_JOURNALMODE_WAL & 5)==5 ); + + assert( isOpen(pPager->fd) || pPager->exclusiveMode ); + if( !pPager->exclusiveMode && (eOld & 5)==1 && (eMode & 1)==0 ){ + /* In this case we would like to delete the journal file. If it is + ** not possible, then that is not a problem. Deleting the journal file + ** here is an optimization only. + ** + ** Before deleting the journal file, obtain a RESERVED lock on the + ** database file. This ensures that the journal file is not deleted + ** while it is in use by some other client. + */ + sqlite3OsClose(pPager->jfd); + if( pPager->eLock>=RESERVED_LOCK ){ + sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0); + }else{ + int rc = SQLITE_OK; + int state = pPager->eState; + assert( state==PAGER_OPEN || state==PAGER_READER ); + if( state==PAGER_OPEN ){ + rc = sqlite3PagerSharedLock(pPager); + } + if( pPager->eState==PAGER_READER ){ + assert( rc==SQLITE_OK ); + rc = pagerLockDb(pPager, RESERVED_LOCK); + } + if( rc==SQLITE_OK ){ + sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0); + } + if( rc==SQLITE_OK && state==PAGER_READER ){ + pagerUnlockDb(pPager, SHARED_LOCK); + }else if( state==PAGER_OPEN ){ + pager_unlock(pPager); + } + assert( state==pPager->eState ); + } + }else if( eMode==PAGER_JOURNALMODE_OFF || eMode==PAGER_JOURNALMODE_MEMORY ){ + sqlite3OsClose(pPager->jfd); + } + } + + /* Return the new journal mode */ + return (int)pPager->journalMode; +} + +/* +** Return the current journal mode. +*/ +SQLITE_PRIVATE int sqlite3PagerGetJournalMode(Pager *pPager){ + return (int)pPager->journalMode; +} + +/* +** Return TRUE if the pager is in a state where it is OK to change the +** journalmode. Journalmode changes can only happen when the database +** is unmodified. +*/ +SQLITE_PRIVATE int sqlite3PagerOkToChangeJournalMode(Pager *pPager){ + assert( assert_pager_state(pPager) ); + if( pPager->eState>=PAGER_WRITER_CACHEMOD ) return 0; + if( NEVER(isOpen(pPager->jfd) && pPager->journalOff>0) ) return 0; + return 1; +} + +/* +** Get/set the size-limit used for persistent journal files. +** +** Setting the size limit to -1 means no limit is enforced. +** An attempt to set a limit smaller than -1 is a no-op. +*/ +SQLITE_PRIVATE i64 sqlite3PagerJournalSizeLimit(Pager *pPager, i64 iLimit){ + if( iLimit>=-1 ){ + pPager->journalSizeLimit = iLimit; + sqlite3WalLimit(pPager->pWal, iLimit); + } + return pPager->journalSizeLimit; +} + +/* +** Return a pointer to the pPager->pBackup variable. The backup module +** in backup.c maintains the content of this variable. This module +** uses it opaquely as an argument to sqlite3BackupRestart() and +** sqlite3BackupUpdate() only. +*/ +SQLITE_PRIVATE sqlite3_backup **sqlite3PagerBackupPtr(Pager *pPager){ + return &pPager->pBackup; +} + +#ifndef SQLITE_OMIT_VACUUM +/* +** Unless this is an in-memory or temporary database, clear the pager cache. +*/ +SQLITE_PRIVATE void sqlite3PagerClearCache(Pager *pPager){ + assert( MEMDB==0 || pPager->tempFile ); + if( pPager->tempFile==0 ) pager_reset(pPager); +} +#endif + + +#ifndef SQLITE_OMIT_WAL +/* +** This function is called when the user invokes "PRAGMA wal_checkpoint", +** "PRAGMA wal_blocking_checkpoint" or calls the sqlite3_wal_checkpoint() +** or wal_blocking_checkpoint() API functions. +** +** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART. +*/ +SQLITE_PRIVATE int sqlite3PagerCheckpoint( + Pager *pPager, /* Checkpoint on this pager */ + sqlite3 *db, /* Db handle used to check for interrupts */ + int eMode, /* Type of checkpoint */ + int *pnLog, /* OUT: Final number of frames in log */ + int *pnCkpt /* OUT: Final number of checkpointed frames */ +){ + int rc = SQLITE_OK; + if( pPager->pWal==0 && pPager->journalMode==PAGER_JOURNALMODE_WAL ){ + /* This only happens when a database file is zero bytes in size opened and + ** then "PRAGMA journal_mode=WAL" is run and then sqlite3_wal_checkpoint() + ** is invoked without any intervening transactions. We need to start + ** a transaction to initialize pWal. The PRAGMA table_list statement is + ** used for this since it starts transactions on every database file, + ** including all ATTACHed databases. This seems expensive for a single + ** sqlite3_wal_checkpoint() call, but it happens very rarely. + ** https://sqlite.org/forum/forumpost/fd0f19d229156939 + */ + sqlite3_exec(db, "PRAGMA table_list",0,0,0); + } + if( pPager->pWal ){ + rc = sqlite3WalCheckpoint(pPager->pWal, db, eMode, + (eMode<=SQLITE_CHECKPOINT_PASSIVE ? 0 : pPager->xBusyHandler), + pPager->pBusyHandlerArg, + pPager->walSyncFlags, pPager->pageSize, (u8 *)pPager->pTmpSpace, + pnLog, pnCkpt + ); + } + return rc; +} + +SQLITE_PRIVATE int sqlite3PagerWalCallback(Pager *pPager){ + return sqlite3WalCallback(pPager->pWal); +} + +/* +** Return true if the underlying VFS for the given pager supports the +** primitives necessary for write-ahead logging. +*/ +SQLITE_PRIVATE int sqlite3PagerWalSupported(Pager *pPager){ + const sqlite3_io_methods *pMethods = pPager->fd->pMethods; + if( pPager->noLock ) return 0; + return pPager->exclusiveMode || (pMethods->iVersion>=2 && pMethods->xShmMap); +} + +/* +** Attempt to take an exclusive lock on the database file. If a PENDING lock +** is obtained instead, immediately release it. +*/ +static int pagerExclusiveLock(Pager *pPager){ + int rc; /* Return code */ + u8 eOrigLock; /* Original lock */ + + assert( pPager->eLock>=SHARED_LOCK ); + eOrigLock = pPager->eLock; + rc = pagerLockDb(pPager, EXCLUSIVE_LOCK); + if( rc!=SQLITE_OK ){ + /* If the attempt to grab the exclusive lock failed, release the + ** pending lock that may have been obtained instead. */ + pagerUnlockDb(pPager, eOrigLock); + } + + return rc; +} + +/* +** Call sqlite3WalOpen() to open the WAL handle. If the pager is in +** exclusive-locking mode when this function is called, take an EXCLUSIVE +** lock on the database file and use heap-memory to store the wal-index +** in. Otherwise, use the normal shared-memory. +*/ +static int pagerOpenWal(Pager *pPager){ + int rc = SQLITE_OK; + + assert( pPager->pWal==0 && pPager->tempFile==0 ); + assert( pPager->eLock==SHARED_LOCK || pPager->eLock==EXCLUSIVE_LOCK ); + + /* If the pager is already in exclusive-mode, the WAL module will use + ** heap-memory for the wal-index instead of the VFS shared-memory + ** implementation. Take the exclusive lock now, before opening the WAL + ** file, to make sure this is safe. + */ + if( pPager->exclusiveMode ){ + rc = pagerExclusiveLock(pPager); + } + + /* Open the connection to the log file. If this operation fails, + ** (e.g. due to malloc() failure), return an error code. + */ + if( rc==SQLITE_OK ){ + rc = sqlite3WalOpen(pPager->pVfs, + pPager->fd, pPager->zWal, pPager->exclusiveMode, + pPager->journalSizeLimit, &pPager->pWal + ); +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + if( rc==SQLITE_OK ){ + sqlite3WalDb(pPager->pWal, pPager->dbWal); + } +#endif + } + pagerFixMaplimit(pPager); + + return rc; +} + + +/* +** The caller must be holding a SHARED lock on the database file to call +** this function. +** +** If the pager passed as the first argument is open on a real database +** file (not a temp file or an in-memory database), and the WAL file +** is not already open, make an attempt to open it now. If successful, +** return SQLITE_OK. If an error occurs or the VFS used by the pager does +** not support the xShmXXX() methods, return an error code. *pbOpen is +** not modified in either case. +** +** If the pager is open on a temp-file (or in-memory database), or if +** the WAL file is already open, set *pbOpen to 1 and return SQLITE_OK +** without doing anything. +*/ +SQLITE_PRIVATE int sqlite3PagerOpenWal( + Pager *pPager, /* Pager object */ + int *pbOpen /* OUT: Set to true if call is a no-op */ +){ + int rc = SQLITE_OK; /* Return code */ + + assert( assert_pager_state(pPager) ); + assert( pPager->eState==PAGER_OPEN || pbOpen ); + assert( pPager->eState==PAGER_READER || !pbOpen ); + assert( pbOpen==0 || *pbOpen==0 ); + assert( pbOpen!=0 || (!pPager->tempFile && !pPager->pWal) ); + + if( !pPager->tempFile && !pPager->pWal ){ + if( !sqlite3PagerWalSupported(pPager) ) return SQLITE_CANTOPEN; + + /* Close any rollback journal previously open */ + sqlite3OsClose(pPager->jfd); + + rc = pagerOpenWal(pPager); + if( rc==SQLITE_OK ){ + pPager->journalMode = PAGER_JOURNALMODE_WAL; + pPager->eState = PAGER_OPEN; + } + }else{ + *pbOpen = 1; + } + + return rc; +} + +/* +** This function is called to close the connection to the log file prior +** to switching from WAL to rollback mode. +** +** Before closing the log file, this function attempts to take an +** EXCLUSIVE lock on the database file. If this cannot be obtained, an +** error (SQLITE_BUSY) is returned and the log connection is not closed. +** If successful, the EXCLUSIVE lock is not released before returning. +*/ +SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager, sqlite3 *db){ + int rc = SQLITE_OK; + + assert( pPager->journalMode==PAGER_JOURNALMODE_WAL ); + + /* If the log file is not already open, but does exist in the file-system, + ** it may need to be checkpointed before the connection can switch to + ** rollback mode. Open it now so this can happen. + */ + if( !pPager->pWal ){ + int logexists = 0; + rc = pagerLockDb(pPager, SHARED_LOCK); + if( rc==SQLITE_OK ){ + rc = sqlite3OsAccess( + pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &logexists + ); + } + if( rc==SQLITE_OK && logexists ){ + rc = pagerOpenWal(pPager); + } + } + + /* Checkpoint and close the log. Because an EXCLUSIVE lock is held on + ** the database file, the log and log-summary files will be deleted. + */ + if( rc==SQLITE_OK && pPager->pWal ){ + rc = pagerExclusiveLock(pPager); + if( rc==SQLITE_OK ){ + rc = sqlite3WalClose(pPager->pWal, db, pPager->walSyncFlags, + pPager->pageSize, (u8*)pPager->pTmpSpace); + pPager->pWal = 0; + pagerFixMaplimit(pPager); + if( rc && !pPager->exclusiveMode ) pagerUnlockDb(pPager, SHARED_LOCK); + } + } + return rc; +} + +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT +/* +** If pager pPager is a wal-mode database not in exclusive locking mode, +** invoke the sqlite3WalWriteLock() function on the associated Wal object +** with the same db and bLock parameters as were passed to this function. +** Return an SQLite error code if an error occurs, or SQLITE_OK otherwise. +*/ +SQLITE_PRIVATE int sqlite3PagerWalWriteLock(Pager *pPager, int bLock){ + int rc = SQLITE_OK; + if( pagerUseWal(pPager) && pPager->exclusiveMode==0 ){ + rc = sqlite3WalWriteLock(pPager->pWal, bLock); + } + return rc; +} + +/* +** Set the database handle used by the wal layer to determine if +** blocking locks are required. +*/ +SQLITE_PRIVATE void sqlite3PagerWalDb(Pager *pPager, sqlite3 *db){ + pPager->dbWal = db; + if( pagerUseWal(pPager) ){ + sqlite3WalDb(pPager->pWal, db); + } +} +#endif + +#ifdef SQLITE_ENABLE_SNAPSHOT +/* +** If this is a WAL database, obtain a snapshot handle for the snapshot +** currently open. Otherwise, return an error. +*/ +SQLITE_PRIVATE int sqlite3PagerSnapshotGet(Pager *pPager, sqlite3_snapshot **ppSnapshot){ + int rc = SQLITE_ERROR; + if( pPager->pWal ){ + rc = sqlite3WalSnapshotGet(pPager->pWal, ppSnapshot); + } + return rc; +} + +/* +** If this is a WAL database, store a pointer to pSnapshot. Next time a +** read transaction is opened, attempt to read from the snapshot it +** identifies. If this is not a WAL database, return an error. +*/ +SQLITE_PRIVATE int sqlite3PagerSnapshotOpen( + Pager *pPager, + sqlite3_snapshot *pSnapshot +){ + int rc = SQLITE_OK; + if( pPager->pWal ){ + sqlite3WalSnapshotOpen(pPager->pWal, pSnapshot); + }else{ + rc = SQLITE_ERROR; + } + return rc; +} + +/* +** If this is a WAL database, call sqlite3WalSnapshotRecover(). If this +** is not a WAL database, return an error. +*/ +SQLITE_PRIVATE int sqlite3PagerSnapshotRecover(Pager *pPager){ + int rc; + if( pPager->pWal ){ + rc = sqlite3WalSnapshotRecover(pPager->pWal); + }else{ + rc = SQLITE_ERROR; + } + return rc; +} + +/* +** The caller currently has a read transaction open on the database. +** If this is not a WAL database, SQLITE_ERROR is returned. Otherwise, +** this function takes a SHARED lock on the CHECKPOINTER slot and then +** checks if the snapshot passed as the second argument is still +** available. If so, SQLITE_OK is returned. +** +** If the snapshot is not available, SQLITE_ERROR is returned. Or, if +** the CHECKPOINTER lock cannot be obtained, SQLITE_BUSY. If any error +** occurs (any value other than SQLITE_OK is returned), the CHECKPOINTER +** lock is released before returning. +*/ +SQLITE_PRIVATE int sqlite3PagerSnapshotCheck(Pager *pPager, sqlite3_snapshot *pSnapshot){ + int rc; + if( pPager->pWal ){ + rc = sqlite3WalSnapshotCheck(pPager->pWal, pSnapshot); + }else{ + rc = SQLITE_ERROR; + } + return rc; +} + +/* +** Release a lock obtained by an earlier successful call to +** sqlite3PagerSnapshotCheck(). +*/ +SQLITE_PRIVATE void sqlite3PagerSnapshotUnlock(Pager *pPager){ + assert( pPager->pWal ); + sqlite3WalSnapshotUnlock(pPager->pWal); +} + +#endif /* SQLITE_ENABLE_SNAPSHOT */ +#endif /* !SQLITE_OMIT_WAL */ + +#ifdef SQLITE_ENABLE_ZIPVFS +/* +** A read-lock must be held on the pager when this function is called. If +** the pager is in WAL mode and the WAL file currently contains one or more +** frames, return the size in bytes of the page images stored within the +** WAL frames. Otherwise, if this is not a WAL database or the WAL file +** is empty, return 0. +*/ +SQLITE_PRIVATE int sqlite3PagerWalFramesize(Pager *pPager){ + assert( pPager->eState>=PAGER_READER ); + return sqlite3WalFramesize(pPager->pWal); +} +#endif + +#if defined(SQLITE_USE_SEH) && !defined(SQLITE_OMIT_WAL) +SQLITE_PRIVATE int sqlite3PagerWalSystemErrno(Pager *pPager){ + return sqlite3WalSystemErrno(pPager->pWal); +} +#endif + +#endif /* SQLITE_OMIT_DISKIO */ + +/************** End of pager.c ***********************************************/ +/************** Begin file wal.c *********************************************/ +/* +** 2010 February 1 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file contains the implementation of a write-ahead log (WAL) used in +** "journal_mode=WAL" mode. +** +** WRITE-AHEAD LOG (WAL) FILE FORMAT +** +** A WAL file consists of a header followed by zero or more "frames". +** Each frame records the revised content of a single page from the +** database file. All changes to the database are recorded by writing +** frames into the WAL. Transactions commit when a frame is written that +** contains a commit marker. A single WAL can and usually does record +** multiple transactions. Periodically, the content of the WAL is +** transferred back into the database file in an operation called a +** "checkpoint". +** +** A single WAL file can be used multiple times. In other words, the +** WAL can fill up with frames and then be checkpointed and then new +** frames can overwrite the old ones. A WAL always grows from beginning +** toward the end. Checksums and counters attached to each frame are +** used to determine which frames within the WAL are valid and which +** are leftovers from prior checkpoints. +** +** The WAL header is 32 bytes in size and consists of the following eight +** big-endian 32-bit unsigned integer values: +** +** 0: Magic number. 0x377f0682 or 0x377f0683 +** 4: File format version. Currently 3007000 +** 8: Database page size. Example: 1024 +** 12: Checkpoint sequence number +** 16: Salt-1, random integer incremented with each checkpoint +** 20: Salt-2, a different random integer changing with each ckpt +** 24: Checksum-1 (first part of checksum for first 24 bytes of header). +** 28: Checksum-2 (second part of checksum for first 24 bytes of header). +** +** Immediately following the wal-header are zero or more frames. Each +** frame consists of a 24-byte frame-header followed by bytes +** of page data. The frame-header is six big-endian 32-bit unsigned +** integer values, as follows: +** +** 0: Page number. +** 4: For commit records, the size of the database image in pages +** after the commit. For all other records, zero. +** 8: Salt-1 (copied from the header) +** 12: Salt-2 (copied from the header) +** 16: Checksum-1. +** 20: Checksum-2. +** +** A frame is considered valid if and only if the following conditions are +** true: +** +** (1) The salt-1 and salt-2 values in the frame-header match +** salt values in the wal-header +** +** (2) The checksum values in the final 8 bytes of the frame-header +** exactly match the checksum computed consecutively on the +** WAL header and the first 8 bytes and the content of all frames +** up to and including the current frame. +** +** The checksum is computed using 32-bit big-endian integers if the +** magic number in the first 4 bytes of the WAL is 0x377f0683 and it +** is computed using little-endian if the magic number is 0x377f0682. +** The checksum values are always stored in the frame header in a +** big-endian format regardless of which byte order is used to compute +** the checksum. The checksum is computed by interpreting the input as +** an even number of unsigned 32-bit integers: x[0] through x[N]. The +** algorithm used for the checksum is as follows: +** +** for i from 0 to n-1 step 2: +** s0 += x[i] + s1; +** s1 += x[i+1] + s0; +** endfor +** +** Note that s0 and s1 are both weighted checksums using fibonacci weights +** in reverse order (the largest fibonacci weight occurs on the first element +** of the sequence being summed.) The s1 value spans all 32-bit +** terms of the sequence whereas s0 omits the final term. +** +** On a checkpoint, the WAL is first VFS.xSync-ed, then valid content of the +** WAL is transferred into the database, then the database is VFS.xSync-ed. +** The VFS.xSync operations serve as write barriers - all writes launched +** before the xSync must complete before any write that launches after the +** xSync begins. +** +** After each checkpoint, the salt-1 value is incremented and the salt-2 +** value is randomized. This prevents old and new frames in the WAL from +** being considered valid at the same time and being checkpointing together +** following a crash. +** +** READER ALGORITHM +** +** To read a page from the database (call it page number P), a reader +** first checks the WAL to see if it contains page P. If so, then the +** last valid instance of page P that is a followed by a commit frame +** or is a commit frame itself becomes the value read. If the WAL +** contains no copies of page P that are valid and which are a commit +** frame or are followed by a commit frame, then page P is read from +** the database file. +** +** To start a read transaction, the reader records the index of the last +** valid frame in the WAL. The reader uses this recorded "mxFrame" value +** for all subsequent read operations. New transactions can be appended +** to the WAL, but as long as the reader uses its original mxFrame value +** and ignores the newly appended content, it will see a consistent snapshot +** of the database from a single point in time. This technique allows +** multiple concurrent readers to view different versions of the database +** content simultaneously. +** +** The reader algorithm in the previous paragraphs works correctly, but +** because frames for page P can appear anywhere within the WAL, the +** reader has to scan the entire WAL looking for page P frames. If the +** WAL is large (multiple megabytes is typical) that scan can be slow, +** and read performance suffers. To overcome this problem, a separate +** data structure called the wal-index is maintained to expedite the +** search for frames of a particular page. +** +** WAL-INDEX FORMAT +** +** Conceptually, the wal-index is shared memory, though VFS implementations +** might choose to implement the wal-index using a mmapped file. Because +** the wal-index is shared memory, SQLite does not support journal_mode=WAL +** on a network filesystem. All users of the database must be able to +** share memory. +** +** In the default unix and windows implementation, the wal-index is a mmapped +** file whose name is the database name with a "-shm" suffix added. For that +** reason, the wal-index is sometimes called the "shm" file. +** +** The wal-index is transient. After a crash, the wal-index can (and should +** be) reconstructed from the original WAL file. In fact, the VFS is required +** to either truncate or zero the header of the wal-index when the last +** connection to it closes. Because the wal-index is transient, it can +** use an architecture-specific format; it does not have to be cross-platform. +** Hence, unlike the database and WAL file formats which store all values +** as big endian, the wal-index can store multi-byte values in the native +** byte order of the host computer. +** +** The purpose of the wal-index is to answer this question quickly: Given +** a page number P and a maximum frame index M, return the index of the +** last frame in the wal before frame M for page P in the WAL, or return +** NULL if there are no frames for page P in the WAL prior to M. +** +** The wal-index consists of a header region, followed by an one or +** more index blocks. +** +** The wal-index header contains the total number of frames within the WAL +** in the mxFrame field. +** +** Each index block except for the first contains information on +** HASHTABLE_NPAGE frames. The first index block contains information on +** HASHTABLE_NPAGE_ONE frames. The values of HASHTABLE_NPAGE_ONE and +** HASHTABLE_NPAGE are selected so that together the wal-index header and +** first index block are the same size as all other index blocks in the +** wal-index. The values are: +** +** HASHTABLE_NPAGE 4096 +** HASHTABLE_NPAGE_ONE 4062 +** +** Each index block contains two sections, a page-mapping that contains the +** database page number associated with each wal frame, and a hash-table +** that allows readers to query an index block for a specific page number. +** The page-mapping is an array of HASHTABLE_NPAGE (or HASHTABLE_NPAGE_ONE +** for the first index block) 32-bit page numbers. The first entry in the +** first index-block contains the database page number corresponding to the +** first frame in the WAL file. The first entry in the second index block +** in the WAL file corresponds to the (HASHTABLE_NPAGE_ONE+1)th frame in +** the log, and so on. +** +** The last index block in a wal-index usually contains less than the full +** complement of HASHTABLE_NPAGE (or HASHTABLE_NPAGE_ONE) page-numbers, +** depending on the contents of the WAL file. This does not change the +** allocated size of the page-mapping array - the page-mapping array merely +** contains unused entries. +** +** Even without using the hash table, the last frame for page P +** can be found by scanning the page-mapping sections of each index block +** starting with the last index block and moving toward the first, and +** within each index block, starting at the end and moving toward the +** beginning. The first entry that equals P corresponds to the frame +** holding the content for that page. +** +** The hash table consists of HASHTABLE_NSLOT 16-bit unsigned integers. +** HASHTABLE_NSLOT = 2*HASHTABLE_NPAGE, and there is one entry in the +** hash table for each page number in the mapping section, so the hash +** table is never more than half full. The expected number of collisions +** prior to finding a match is 1. Each entry of the hash table is an +** 1-based index of an entry in the mapping section of the same +** index block. Let K be the 1-based index of the largest entry in +** the mapping section. (For index blocks other than the last, K will +** always be exactly HASHTABLE_NPAGE (4096) and for the last index block +** K will be (mxFrame%HASHTABLE_NPAGE).) Unused slots of the hash table +** contain a value of 0. +** +** To look for page P in the hash table, first compute a hash iKey on +** P as follows: +** +** iKey = (P * 383) % HASHTABLE_NSLOT +** +** Then start scanning entries of the hash table, starting with iKey +** (wrapping around to the beginning when the end of the hash table is +** reached) until an unused hash slot is found. Let the first unused slot +** be at index iUnused. (iUnused might be less than iKey if there was +** wrap-around.) Because the hash table is never more than half full, +** the search is guaranteed to eventually hit an unused entry. Let +** iMax be the value between iKey and iUnused, closest to iUnused, +** where aHash[iMax]==P. If there is no iMax entry (if there exists +** no hash slot such that aHash[i]==p) then page P is not in the +** current index block. Otherwise the iMax-th mapping entry of the +** current index block corresponds to the last entry that references +** page P. +** +** A hash search begins with the last index block and moves toward the +** first index block, looking for entries corresponding to page P. On +** average, only two or three slots in each index block need to be +** examined in order to either find the last entry for page P, or to +** establish that no such entry exists in the block. Each index block +** holds over 4000 entries. So two or three index blocks are sufficient +** to cover a typical 10 megabyte WAL file, assuming 1K pages. 8 or 10 +** comparisons (on average) suffice to either locate a frame in the +** WAL or to establish that the frame does not exist in the WAL. This +** is much faster than scanning the entire 10MB WAL. +** +** Note that entries are added in order of increasing K. Hence, one +** reader might be using some value K0 and a second reader that started +** at a later time (after additional transactions were added to the WAL +** and to the wal-index) might be using a different value K1, where K1>K0. +** Both readers can use the same hash table and mapping section to get +** the correct result. There may be entries in the hash table with +** K>K0 but to the first reader, those entries will appear to be unused +** slots in the hash table and so the first reader will get an answer as +** if no values greater than K0 had ever been inserted into the hash table +** in the first place - which is what reader one wants. Meanwhile, the +** second reader using K1 will see additional values that were inserted +** later, which is exactly what reader two wants. +** +** When a rollback occurs, the value of K is decreased. Hash table entries +** that correspond to frames greater than the new K value are removed +** from the hash table at this point. +*/ +#ifndef SQLITE_OMIT_WAL + +/* #include "wal.h" */ + +/* +** Trace output macros +*/ +#if defined(SQLITE_TEST) && defined(SQLITE_DEBUG) +SQLITE_PRIVATE int sqlite3WalTrace = 0; +# define WALTRACE(X) if(sqlite3WalTrace) sqlite3DebugPrintf X +#else +# define WALTRACE(X) +#endif + +/* +** The maximum (and only) versions of the wal and wal-index formats +** that may be interpreted by this version of SQLite. +** +** If a client begins recovering a WAL file and finds that (a) the checksum +** values in the wal-header are correct and (b) the version field is not +** WAL_MAX_VERSION, recovery fails and SQLite returns SQLITE_CANTOPEN. +** +** Similarly, if a client successfully reads a wal-index header (i.e. the +** checksum test is successful) and finds that the version field is not +** WALINDEX_MAX_VERSION, then no read-transaction is opened and SQLite +** returns SQLITE_CANTOPEN. +*/ +#define WAL_MAX_VERSION 3007000 +#define WALINDEX_MAX_VERSION 3007000 + +/* +** Index numbers for various locking bytes. WAL_NREADER is the number +** of available reader locks and should be at least 3. The default +** is SQLITE_SHM_NLOCK==8 and WAL_NREADER==5. +** +** Technically, the various VFSes are free to implement these locks however +** they see fit. However, compatibility is encouraged so that VFSes can +** interoperate. The standard implementation used on both unix and windows +** is for the index number to indicate a byte offset into the +** WalCkptInfo.aLock[] array in the wal-index header. In other words, all +** locks are on the shm file. The WALINDEX_LOCK_OFFSET constant (which +** should be 120) is the location in the shm file for the first locking +** byte. +*/ +#define WAL_WRITE_LOCK 0 +#define WAL_ALL_BUT_WRITE 1 +#define WAL_CKPT_LOCK 1 +#define WAL_RECOVER_LOCK 2 +#define WAL_READ_LOCK(I) (3+(I)) +#define WAL_NREADER (SQLITE_SHM_NLOCK-3) + + +/* Object declarations */ +typedef struct WalIndexHdr WalIndexHdr; +typedef struct WalIterator WalIterator; +typedef struct WalCkptInfo WalCkptInfo; + + +/* +** The following object holds a copy of the wal-index header content. +** +** The actual header in the wal-index consists of two copies of this +** object followed by one instance of the WalCkptInfo object. +** For all versions of SQLite through 3.10.0 and probably beyond, +** the locking bytes (WalCkptInfo.aLock) start at offset 120 and +** the total header size is 136 bytes. +** +** The szPage value can be any power of 2 between 512 and 32768, inclusive. +** Or it can be 1 to represent a 65536-byte page. The latter case was +** added in 3.7.1 when support for 64K pages was added. +*/ +struct WalIndexHdr { + u32 iVersion; /* Wal-index version */ + u32 unused; /* Unused (padding) field */ + u32 iChange; /* Counter incremented each transaction */ + u8 isInit; /* 1 when initialized */ + u8 bigEndCksum; /* True if checksums in WAL are big-endian */ + u16 szPage; /* Database page size in bytes. 1==64K */ + u32 mxFrame; /* Index of last valid frame in the WAL */ + u32 nPage; /* Size of database in pages */ + u32 aFrameCksum[2]; /* Checksum of last frame in log */ + u32 aSalt[2]; /* Two salt values copied from WAL header */ + u32 aCksum[2]; /* Checksum over all prior fields */ +}; + +/* +** A copy of the following object occurs in the wal-index immediately +** following the second copy of the WalIndexHdr. This object stores +** information used by checkpoint. +** +** nBackfill is the number of frames in the WAL that have been written +** back into the database. (We call the act of moving content from WAL to +** database "backfilling".) The nBackfill number is never greater than +** WalIndexHdr.mxFrame. nBackfill can only be increased by threads +** holding the WAL_CKPT_LOCK lock (which includes a recovery thread). +** However, a WAL_WRITE_LOCK thread can move the value of nBackfill from +** mxFrame back to zero when the WAL is reset. +** +** nBackfillAttempted is the largest value of nBackfill that a checkpoint +** has attempted to achieve. Normally nBackfill==nBackfillAtempted, however +** the nBackfillAttempted is set before any backfilling is done and the +** nBackfill is only set after all backfilling completes. So if a checkpoint +** crashes, nBackfillAttempted might be larger than nBackfill. The +** WalIndexHdr.mxFrame must never be less than nBackfillAttempted. +** +** The aLock[] field is a set of bytes used for locking. These bytes should +** never be read or written. +** +** There is one entry in aReadMark[] for each reader lock. If a reader +** holds read-lock K, then the value in aReadMark[K] is no greater than +** the mxFrame for that reader. The value READMARK_NOT_USED (0xffffffff) +** for any aReadMark[] means that entry is unused. aReadMark[0] is +** a special case; its value is never used and it exists as a place-holder +** to avoid having to offset aReadMark[] indexes by one. Readers holding +** WAL_READ_LOCK(0) always ignore the entire WAL and read all content +** directly from the database. +** +** The value of aReadMark[K] may only be changed by a thread that +** is holding an exclusive lock on WAL_READ_LOCK(K). Thus, the value of +** aReadMark[K] cannot changed while there is a reader is using that mark +** since the reader will be holding a shared lock on WAL_READ_LOCK(K). +** +** The checkpointer may only transfer frames from WAL to database where +** the frame numbers are less than or equal to every aReadMark[] that is +** in use (that is, every aReadMark[j] for which there is a corresponding +** WAL_READ_LOCK(j)). New readers (usually) pick the aReadMark[] with the +** largest value and will increase an unused aReadMark[] to mxFrame if there +** is not already an aReadMark[] equal to mxFrame. The exception to the +** previous sentence is when nBackfill equals mxFrame (meaning that everything +** in the WAL has been backfilled into the database) then new readers +** will choose aReadMark[0] which has value 0 and hence such reader will +** get all their all content directly from the database file and ignore +** the WAL. +** +** Writers normally append new frames to the end of the WAL. However, +** if nBackfill equals mxFrame (meaning that all WAL content has been +** written back into the database) and if no readers are using the WAL +** (in other words, if there are no WAL_READ_LOCK(i) where i>0) then +** the writer will first "reset" the WAL back to the beginning and start +** writing new content beginning at frame 1. +** +** We assume that 32-bit loads are atomic and so no locks are needed in +** order to read from any aReadMark[] entries. +*/ +struct WalCkptInfo { + u32 nBackfill; /* Number of WAL frames backfilled into DB */ + u32 aReadMark[WAL_NREADER]; /* Reader marks */ + u8 aLock[SQLITE_SHM_NLOCK]; /* Reserved space for locks */ + u32 nBackfillAttempted; /* WAL frames perhaps written, or maybe not */ + u32 notUsed0; /* Available for future enhancements */ +}; +#define READMARK_NOT_USED 0xffffffff + +/* +** This is a schematic view of the complete 136-byte header of the +** wal-index file (also known as the -shm file): +** +** +-----------------------------+ +** 0: | iVersion | \ +** +-----------------------------+ | +** 4: | (unused padding) | | +** +-----------------------------+ | +** 8: | iChange | | +** +-------+-------+-------------+ | +** 12: | bInit | bBig | szPage | | +** +-------+-------+-------------+ | +** 16: | mxFrame | | First copy of the +** +-----------------------------+ | WalIndexHdr object +** 20: | nPage | | +** +-----------------------------+ | +** 24: | aFrameCksum | | +** | | | +** +-----------------------------+ | +** 32: | aSalt | | +** | | | +** +-----------------------------+ | +** 40: | aCksum | | +** | | / +** +-----------------------------+ +** 48: | iVersion | \ +** +-----------------------------+ | +** 52: | (unused padding) | | +** +-----------------------------+ | +** 56: | iChange | | +** +-------+-------+-------------+ | +** 60: | bInit | bBig | szPage | | +** +-------+-------+-------------+ | Second copy of the +** 64: | mxFrame | | WalIndexHdr +** +-----------------------------+ | +** 68: | nPage | | +** +-----------------------------+ | +** 72: | aFrameCksum | | +** | | | +** +-----------------------------+ | +** 80: | aSalt | | +** | | | +** +-----------------------------+ | +** 88: | aCksum | | +** | | / +** +-----------------------------+ +** 96: | nBackfill | +** +-----------------------------+ +** 100: | 5 read marks | +** | | +** | | +** | | +** | | +** +-------+-------+------+------+ +** 120: | Write | Ckpt | Rcvr | Rd0 | \ +** +-------+-------+------+------+ ) 8 lock bytes +** | Read1 | Read2 | Rd3 | Rd4 | / +** +-------+-------+------+------+ +** 128: | nBackfillAttempted | +** +-----------------------------+ +** 132: | (unused padding) | +** +-----------------------------+ +*/ + +/* A block of WALINDEX_LOCK_RESERVED bytes beginning at +** WALINDEX_LOCK_OFFSET is reserved for locks. Since some systems +** only support mandatory file-locks, we do not read or write data +** from the region of the file on which locks are applied. +*/ +#define WALINDEX_LOCK_OFFSET (sizeof(WalIndexHdr)*2+offsetof(WalCkptInfo,aLock)) +#define WALINDEX_HDR_SIZE (sizeof(WalIndexHdr)*2+sizeof(WalCkptInfo)) + +/* Size of header before each frame in wal */ +#define WAL_FRAME_HDRSIZE 24 + +/* Size of write ahead log header, including checksum. */ +#define WAL_HDRSIZE 32 + +/* WAL magic value. Either this value, or the same value with the least +** significant bit also set (WAL_MAGIC | 0x00000001) is stored in 32-bit +** big-endian format in the first 4 bytes of a WAL file. +** +** If the LSB is set, then the checksums for each frame within the WAL +** file are calculated by treating all data as an array of 32-bit +** big-endian words. Otherwise, they are calculated by interpreting +** all data as 32-bit little-endian words. +*/ +#define WAL_MAGIC 0x377f0682 + +/* +** Return the offset of frame iFrame in the write-ahead log file, +** assuming a database page size of szPage bytes. The offset returned +** is to the start of the write-ahead log frame-header. +*/ +#define walFrameOffset(iFrame, szPage) ( \ + WAL_HDRSIZE + ((iFrame)-1)*(i64)((szPage)+WAL_FRAME_HDRSIZE) \ +) + +/* +** An open write-ahead log file is represented by an instance of the +** following object. +** +** writeLock: +** This is usually set to 1 whenever the WRITER lock is held. However, +** if it is set to 2, then the WRITER lock is held but must be released +** by walHandleException() if a SEH exception is thrown. +*/ +struct Wal { + sqlite3_vfs *pVfs; /* The VFS used to create pDbFd */ + sqlite3_file *pDbFd; /* File handle for the database file */ + sqlite3_file *pWalFd; /* File handle for WAL file */ + u32 iCallback; /* Value to pass to log callback (or 0) */ + i64 mxWalSize; /* Truncate WAL to this size upon reset */ + int nWiData; /* Size of array apWiData */ + int szFirstBlock; /* Size of first block written to WAL file */ + volatile u32 **apWiData; /* Pointer to wal-index content in memory */ + u32 szPage; /* Database page size */ + i16 readLock; /* Which read lock is being held. -1 for none */ + u8 syncFlags; /* Flags to use to sync header writes */ + u8 exclusiveMode; /* Non-zero if connection is in exclusive mode */ + u8 writeLock; /* True if in a write transaction */ + u8 ckptLock; /* True if holding a checkpoint lock */ + u8 readOnly; /* WAL_RDWR, WAL_RDONLY, or WAL_SHM_RDONLY */ + u8 truncateOnCommit; /* True to truncate WAL file on commit */ + u8 syncHeader; /* Fsync the WAL header if true */ + u8 padToSectorBoundary; /* Pad transactions out to the next sector */ + u8 bShmUnreliable; /* SHM content is read-only and unreliable */ + WalIndexHdr hdr; /* Wal-index header for current transaction */ + u32 minFrame; /* Ignore wal frames before this one */ + u32 iReCksum; /* On commit, recalculate checksums from here */ + const char *zWalName; /* Name of WAL file */ + u32 nCkpt; /* Checkpoint sequence counter in the wal-header */ +#ifdef SQLITE_USE_SEH + u32 lockMask; /* Mask of locks held */ + void *pFree; /* Pointer to sqlite3_free() if exception thrown */ + u32 *pWiValue; /* Value to write into apWiData[iWiPg] */ + int iWiPg; /* Write pWiValue into apWiData[iWiPg] */ + int iSysErrno; /* System error code following exception */ +#endif +#ifdef SQLITE_DEBUG + int nSehTry; /* Number of nested SEH_TRY{} blocks */ + u8 lockError; /* True if a locking error has occurred */ +#endif +#ifdef SQLITE_ENABLE_SNAPSHOT + WalIndexHdr *pSnapshot; /* Start transaction here if not NULL */ + int bGetSnapshot; /* Transaction opened for sqlite3_get_snapshot() */ +#endif +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + sqlite3 *db; +#endif +}; + +/* +** Candidate values for Wal.exclusiveMode. +*/ +#define WAL_NORMAL_MODE 0 +#define WAL_EXCLUSIVE_MODE 1 +#define WAL_HEAPMEMORY_MODE 2 + +/* +** Possible values for WAL.readOnly +*/ +#define WAL_RDWR 0 /* Normal read/write connection */ +#define WAL_RDONLY 1 /* The WAL file is readonly */ +#define WAL_SHM_RDONLY 2 /* The SHM file is readonly */ + +/* +** Each page of the wal-index mapping contains a hash-table made up of +** an array of HASHTABLE_NSLOT elements of the following type. +*/ +typedef u16 ht_slot; + +/* +** This structure is used to implement an iterator that loops through +** all frames in the WAL in database page order. Where two or more frames +** correspond to the same database page, the iterator visits only the +** frame most recently written to the WAL (in other words, the frame with +** the largest index). +** +** The internals of this structure are only accessed by: +** +** walIteratorInit() - Create a new iterator, +** walIteratorNext() - Step an iterator, +** walIteratorFree() - Free an iterator. +** +** This functionality is used by the checkpoint code (see walCheckpoint()). +*/ +struct WalIterator { + u32 iPrior; /* Last result returned from the iterator */ + int nSegment; /* Number of entries in aSegment[] */ + struct WalSegment { + int iNext; /* Next slot in aIndex[] not yet returned */ + ht_slot *aIndex; /* i0, i1, i2... such that aPgno[iN] ascend */ + u32 *aPgno; /* Array of page numbers. */ + int nEntry; /* Nr. of entries in aPgno[] and aIndex[] */ + int iZero; /* Frame number associated with aPgno[0] */ + } aSegment[FLEXARRAY]; /* One for every 32KB page in the wal-index */ +}; + +/* Size (in bytes) of a WalIterator object suitable for N or fewer segments */ +#define SZ_WALITERATOR(N) \ + (offsetof(WalIterator,aSegment)+(N)*sizeof(struct WalSegment)) + +/* +** Define the parameters of the hash tables in the wal-index file. There +** is a hash-table following every HASHTABLE_NPAGE page numbers in the +** wal-index. +** +** Changing any of these constants will alter the wal-index format and +** create incompatibilities. +*/ +#define HASHTABLE_NPAGE 4096 /* Must be power of 2 */ +#define HASHTABLE_HASH_1 383 /* Should be prime */ +#define HASHTABLE_NSLOT (HASHTABLE_NPAGE*2) /* Must be a power of 2 */ + +/* +** The block of page numbers associated with the first hash-table in a +** wal-index is smaller than usual. This is so that there is a complete +** hash-table on each aligned 32KB page of the wal-index. +*/ +#define HASHTABLE_NPAGE_ONE (HASHTABLE_NPAGE - (WALINDEX_HDR_SIZE/sizeof(u32))) + +/* The wal-index is divided into pages of WALINDEX_PGSZ bytes each. */ +#define WALINDEX_PGSZ ( \ + sizeof(ht_slot)*HASHTABLE_NSLOT + HASHTABLE_NPAGE*sizeof(u32) \ +) + +/* +** Structured Exception Handling (SEH) is a Windows-specific technique +** for catching exceptions raised while accessing memory-mapped files. +** +** The -DSQLITE_USE_SEH compile-time option means to use SEH to catch and +** deal with system-level errors that arise during WAL -shm file processing. +** Without this compile-time option, any system-level faults that appear +** while accessing the memory-mapped -shm file will cause a process-wide +** signal to be deliver, which will more than likely cause the entire +** process to exit. +*/ +#ifdef SQLITE_USE_SEH +#include + +/* Beginning of a block of code in which an exception might occur */ +# define SEH_TRY __try { \ + assert( walAssertLockmask(pWal) && pWal->nSehTry==0 ); \ + VVA_ONLY(pWal->nSehTry++); + +/* The end of a block of code in which an exception might occur */ +# define SEH_EXCEPT(X) \ + VVA_ONLY(pWal->nSehTry--); \ + assert( pWal->nSehTry==0 ); \ + } __except( sehExceptionFilter(pWal, GetExceptionCode(), GetExceptionInformation() ) ){ X } + +/* Simulate a memory-mapping fault in the -shm file for testing purposes */ +# define SEH_INJECT_FAULT sehInjectFault(pWal) + +/* +** The second argument is the return value of GetExceptionCode() for the +** current exception. Return EXCEPTION_EXECUTE_HANDLER if the exception code +** indicates that the exception may have been caused by accessing the *-shm +** file mapping. Or EXCEPTION_CONTINUE_SEARCH otherwise. +*/ +static int sehExceptionFilter(Wal *pWal, int eCode, EXCEPTION_POINTERS *p){ + VVA_ONLY(pWal->nSehTry--); + if( eCode==EXCEPTION_IN_PAGE_ERROR ){ + if( p && p->ExceptionRecord && p->ExceptionRecord->NumberParameters>=3 ){ + /* From MSDN: For this type of exception, the first element of the + ** ExceptionInformation[] array is a read-write flag - 0 if the exception + ** was thrown while reading, 1 if while writing. The second element is + ** the virtual address being accessed. The "third array element specifies + ** the underlying NTSTATUS code that resulted in the exception". */ + pWal->iSysErrno = (int)p->ExceptionRecord->ExceptionInformation[2]; + } + return EXCEPTION_EXECUTE_HANDLER; + } + return EXCEPTION_CONTINUE_SEARCH; +} + +/* +** If one is configured, invoke the xTestCallback callback with 650 as +** the argument. If it returns true, throw the same exception that is +** thrown by the system if the *-shm file mapping is accessed after it +** has been invalidated. +*/ +static void sehInjectFault(Wal *pWal){ + int res; + assert( pWal->nSehTry>0 ); + + res = sqlite3FaultSim(650); + if( res!=0 ){ + ULONG_PTR aArg[3]; + aArg[0] = 0; + aArg[1] = 0; + aArg[2] = (ULONG_PTR)res; + RaiseException(EXCEPTION_IN_PAGE_ERROR, 0, 3, (const ULONG_PTR*)aArg); + } +} + +/* +** There are two ways to use this macro. To set a pointer to be freed +** if an exception is thrown: +** +** SEH_FREE_ON_ERROR(0, pPtr); +** +** and to cancel the same: +** +** SEH_FREE_ON_ERROR(pPtr, 0); +** +** In the first case, there must not already be a pointer registered to +** be freed. In the second case, pPtr must be the registered pointer. +*/ +#define SEH_FREE_ON_ERROR(X,Y) \ + assert( (X==0 || Y==0) && pWal->pFree==X ); pWal->pFree = Y + +/* +** There are two ways to use this macro. To arrange for pWal->apWiData[iPg] +** to be set to pValue if an exception is thrown: +** +** SEH_SET_ON_ERROR(iPg, pValue); +** +** and to cancel the same: +** +** SEH_SET_ON_ERROR(0, 0); +*/ +#define SEH_SET_ON_ERROR(X,Y) pWal->iWiPg = X; pWal->pWiValue = Y + +#else +# define SEH_TRY VVA_ONLY(pWal->nSehTry++); +# define SEH_EXCEPT(X) VVA_ONLY(pWal->nSehTry--); assert( pWal->nSehTry==0 ); +# define SEH_INJECT_FAULT assert( pWal->nSehTry>0 ); +# define SEH_FREE_ON_ERROR(X,Y) +# define SEH_SET_ON_ERROR(X,Y) +#endif /* ifdef SQLITE_USE_SEH */ + + +/* +** Obtain a pointer to the iPage'th page of the wal-index. The wal-index +** is broken into pages of WALINDEX_PGSZ bytes. Wal-index pages are +** numbered from zero. +** +** If the wal-index is currently smaller the iPage pages then the size +** of the wal-index might be increased, but only if it is safe to do +** so. It is safe to enlarge the wal-index if pWal->writeLock is true +** or pWal->exclusiveMode==WAL_HEAPMEMORY_MODE. +** +** Three possible result scenarios: +** +** (1) rc==SQLITE_OK and *ppPage==Requested-Wal-Index-Page +** (2) rc>=SQLITE_ERROR and *ppPage==NULL +** (3) rc==SQLITE_OK and *ppPage==NULL // only if iPage==0 +** +** Scenario (3) can only occur when pWal->writeLock is false and iPage==0 +*/ +static SQLITE_NOINLINE int walIndexPageRealloc( + Wal *pWal, /* The WAL context */ + int iPage, /* The page we seek */ + volatile u32 **ppPage /* Write the page pointer here */ +){ + int rc = SQLITE_OK; + + /* Enlarge the pWal->apWiData[] array if required */ + if( pWal->nWiData<=iPage ){ + sqlite3_int64 nByte = sizeof(u32*)*(1+(i64)iPage); + volatile u32 **apNew; + apNew = (volatile u32 **)sqlite3Realloc((void *)pWal->apWiData, nByte); + if( !apNew ){ + *ppPage = 0; + return SQLITE_NOMEM_BKPT; + } + memset((void*)&apNew[pWal->nWiData], 0, + sizeof(u32*)*(iPage+1-pWal->nWiData)); + pWal->apWiData = apNew; + pWal->nWiData = iPage+1; + } + + /* Request a pointer to the required page from the VFS */ + assert( pWal->apWiData[iPage]==0 ); + if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){ + pWal->apWiData[iPage] = (u32 volatile *)sqlite3MallocZero(WALINDEX_PGSZ); + if( !pWal->apWiData[iPage] ) rc = SQLITE_NOMEM_BKPT; + }else{ + rc = sqlite3OsShmMap(pWal->pDbFd, iPage, WALINDEX_PGSZ, + pWal->writeLock, (void volatile **)&pWal->apWiData[iPage] + ); + assert( pWal->apWiData[iPage]!=0 + || rc!=SQLITE_OK + || (pWal->writeLock==0 && iPage==0) ); + testcase( pWal->apWiData[iPage]==0 && rc==SQLITE_OK ); + if( rc==SQLITE_OK ){ + if( iPage>0 && sqlite3FaultSim(600) ) rc = SQLITE_NOMEM; + }else if( (rc&0xff)==SQLITE_READONLY ){ + pWal->readOnly |= WAL_SHM_RDONLY; + if( rc==SQLITE_READONLY ){ + rc = SQLITE_OK; + } + } + } + + *ppPage = pWal->apWiData[iPage]; + assert( iPage==0 || *ppPage || rc!=SQLITE_OK ); + return rc; +} +static int walIndexPage( + Wal *pWal, /* The WAL context */ + int iPage, /* The page we seek */ + volatile u32 **ppPage /* Write the page pointer here */ +){ + SEH_INJECT_FAULT; + if( pWal->nWiData<=iPage || (*ppPage = pWal->apWiData[iPage])==0 ){ + return walIndexPageRealloc(pWal, iPage, ppPage); + } + return SQLITE_OK; +} + +/* +** Return a pointer to the WalCkptInfo structure in the wal-index. +*/ +static volatile WalCkptInfo *walCkptInfo(Wal *pWal){ + assert( pWal->nWiData>0 && pWal->apWiData[0] ); + SEH_INJECT_FAULT; + return (volatile WalCkptInfo*)&(pWal->apWiData[0][sizeof(WalIndexHdr)/2]); +} + +/* +** Return a pointer to the WalIndexHdr structure in the wal-index. +*/ +static volatile WalIndexHdr *walIndexHdr(Wal *pWal){ + assert( pWal->nWiData>0 && pWal->apWiData[0] ); + SEH_INJECT_FAULT; + return (volatile WalIndexHdr*)pWal->apWiData[0]; +} + +/* +** The argument to this macro must be of type u32. On a little-endian +** architecture, it returns the u32 value that results from interpreting +** the 4 bytes as a big-endian value. On a big-endian architecture, it +** returns the value that would be produced by interpreting the 4 bytes +** of the input value as a little-endian integer. +*/ +#define BYTESWAP32(x) ( \ + (((x)&0x000000FF)<<24) + (((x)&0x0000FF00)<<8) \ + + (((x)&0x00FF0000)>>8) + (((x)&0xFF000000)>>24) \ +) + +/* +** Generate or extend an 8 byte checksum based on the data in +** array aByte[] and the initial values of aIn[0] and aIn[1] (or +** initial values of 0 and 0 if aIn==NULL). +** +** The checksum is written back into aOut[] before returning. +** +** nByte must be a positive multiple of 8. +*/ +static void walChecksumBytes( + int nativeCksum, /* True for native byte-order, false for non-native */ + u8 *a, /* Content to be checksummed */ + int nByte, /* Bytes of content in a[]. Must be a multiple of 8. */ + const u32 *aIn, /* Initial checksum value input */ + u32 *aOut /* OUT: Final checksum value output */ +){ + u32 s1, s2; + u32 *aData = (u32 *)a; + u32 *aEnd = (u32 *)&a[nByte]; + + if( aIn ){ + s1 = aIn[0]; + s2 = aIn[1]; + }else{ + s1 = s2 = 0; + } + + /* nByte is a multiple of 8 between 8 and 65536 */ + assert( nByte>=8 && (nByte&7)==0 && nByte<=65536 ); + + if( !nativeCksum ){ + do { + s1 += BYTESWAP32(aData[0]) + s2; + s2 += BYTESWAP32(aData[1]) + s1; + aData += 2; + }while( aDataexclusiveMode!=WAL_HEAPMEMORY_MODE ){ + sqlite3OsShmBarrier(pWal->pDbFd); + } +} + +/* +** Add the SQLITE_NO_TSAN as part of the return-type of a function +** definition as a hint that the function contains constructs that +** might give false-positive TSAN warnings. +** +** See tag-20200519-1. +*/ +#if defined(__clang__) && !defined(SQLITE_NO_TSAN) +# define SQLITE_NO_TSAN __attribute__((no_sanitize_thread)) +#else +# define SQLITE_NO_TSAN +#endif + +/* +** Write the header information in pWal->hdr into the wal-index. +** +** The checksum on pWal->hdr is updated before it is written. +*/ +static SQLITE_NO_TSAN void walIndexWriteHdr(Wal *pWal){ + volatile WalIndexHdr *aHdr = walIndexHdr(pWal); + const int nCksum = offsetof(WalIndexHdr, aCksum); + + assert( pWal->writeLock ); + pWal->hdr.isInit = 1; + pWal->hdr.iVersion = WALINDEX_MAX_VERSION; + walChecksumBytes(1, (u8*)&pWal->hdr, nCksum, 0, pWal->hdr.aCksum); + /* Possible TSAN false-positive. See tag-20200519-1 */ + memcpy((void*)&aHdr[1], (const void*)&pWal->hdr, sizeof(WalIndexHdr)); + walShmBarrier(pWal); + memcpy((void*)&aHdr[0], (const void*)&pWal->hdr, sizeof(WalIndexHdr)); +} + +/* +** This function encodes a single frame header and writes it to a buffer +** supplied by the caller. A frame-header is made up of a series of +** 4-byte big-endian integers, as follows: +** +** 0: Page number. +** 4: For commit records, the size of the database image in pages +** after the commit. For all other records, zero. +** 8: Salt-1 (copied from the wal-header) +** 12: Salt-2 (copied from the wal-header) +** 16: Checksum-1. +** 20: Checksum-2. +*/ +static void walEncodeFrame( + Wal *pWal, /* The write-ahead log */ + u32 iPage, /* Database page number for frame */ + u32 nTruncate, /* New db size (or 0 for non-commit frames) */ + u8 *aData, /* Pointer to page data */ + u8 *aFrame /* OUT: Write encoded frame here */ +){ + int nativeCksum; /* True for native byte-order checksums */ + u32 *aCksum = pWal->hdr.aFrameCksum; + assert( WAL_FRAME_HDRSIZE==24 ); + sqlite3Put4byte(&aFrame[0], iPage); + sqlite3Put4byte(&aFrame[4], nTruncate); + if( pWal->iReCksum==0 ){ + memcpy(&aFrame[8], pWal->hdr.aSalt, 8); + + nativeCksum = (pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN); + walChecksumBytes(nativeCksum, aFrame, 8, aCksum, aCksum); + walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum); + + sqlite3Put4byte(&aFrame[16], aCksum[0]); + sqlite3Put4byte(&aFrame[20], aCksum[1]); + }else{ + memset(&aFrame[8], 0, 16); + } +} + +/* +** Check to see if the frame with header in aFrame[] and content +** in aData[] is valid. If it is a valid frame, fill *piPage and +** *pnTruncate and return true. Return if the frame is not valid. +*/ +static int walDecodeFrame( + Wal *pWal, /* The write-ahead log */ + u32 *piPage, /* OUT: Database page number for frame */ + u32 *pnTruncate, /* OUT: New db size (or 0 if not commit) */ + u8 *aData, /* Pointer to page data (for checksum) */ + u8 *aFrame /* Frame data */ +){ + int nativeCksum; /* True for native byte-order checksums */ + u32 *aCksum = pWal->hdr.aFrameCksum; + u32 pgno; /* Page number of the frame */ + assert( WAL_FRAME_HDRSIZE==24 ); + + /* A frame is only valid if the salt values in the frame-header + ** match the salt values in the wal-header. + */ + if( memcmp(&pWal->hdr.aSalt, &aFrame[8], 8)!=0 ){ + return 0; + } + + /* A frame is only valid if the page number is greater than zero. + */ + pgno = sqlite3Get4byte(&aFrame[0]); + if( pgno==0 ){ + return 0; + } + + /* A frame is only valid if a checksum of the WAL header, + ** all prior frames, the first 16 bytes of this frame-header, + ** and the frame-data matches the checksum in the last 8 + ** bytes of this frame-header. + */ + nativeCksum = (pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN); + walChecksumBytes(nativeCksum, aFrame, 8, aCksum, aCksum); + walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum); + if( aCksum[0]!=sqlite3Get4byte(&aFrame[16]) + || aCksum[1]!=sqlite3Get4byte(&aFrame[20]) + ){ + /* Checksum failed. */ + return 0; + } + + /* If we reach this point, the frame is valid. Return the page number + ** and the new database size. + */ + *piPage = pgno; + *pnTruncate = sqlite3Get4byte(&aFrame[4]); + return 1; +} + + +#if defined(SQLITE_TEST) && defined(SQLITE_DEBUG) +/* +** Names of locks. This routine is used to provide debugging output and is not +** a part of an ordinary build. +*/ +static const char *walLockName(int lockIdx){ + if( lockIdx==WAL_WRITE_LOCK ){ + return "WRITE-LOCK"; + }else if( lockIdx==WAL_CKPT_LOCK ){ + return "CKPT-LOCK"; + }else if( lockIdx==WAL_RECOVER_LOCK ){ + return "RECOVER-LOCK"; + }else{ + static char zName[15]; + sqlite3_snprintf(sizeof(zName), zName, "READ-LOCK[%d]", + lockIdx-WAL_READ_LOCK(0)); + return zName; + } +} +#endif /*defined(SQLITE_TEST) || defined(SQLITE_DEBUG) */ + + +/* +** Set or release locks on the WAL. Locks are either shared or exclusive. +** A lock cannot be moved directly between shared and exclusive - it must go +** through the unlocked state first. +** +** In locking_mode=EXCLUSIVE, all of these routines become no-ops. +*/ +static int walLockShared(Wal *pWal, int lockIdx){ + int rc; + if( pWal->exclusiveMode ) return SQLITE_OK; + rc = sqlite3OsShmLock(pWal->pDbFd, lockIdx, 1, + SQLITE_SHM_LOCK | SQLITE_SHM_SHARED); + WALTRACE(("WAL%p: acquire SHARED-%s %s\n", pWal, + walLockName(lockIdx), rc ? "failed" : "ok")); + VVA_ONLY( pWal->lockError = (u8)(rc!=SQLITE_OK && (rc&0xFF)!=SQLITE_BUSY); ) +#ifdef SQLITE_USE_SEH + if( rc==SQLITE_OK ) pWal->lockMask |= (1 << lockIdx); +#endif + return rc; +} +static void walUnlockShared(Wal *pWal, int lockIdx){ + if( pWal->exclusiveMode ) return; + (void)sqlite3OsShmLock(pWal->pDbFd, lockIdx, 1, + SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED); +#ifdef SQLITE_USE_SEH + pWal->lockMask &= ~(1 << lockIdx); +#endif + WALTRACE(("WAL%p: release SHARED-%s\n", pWal, walLockName(lockIdx))); +} +static int walLockExclusive(Wal *pWal, int lockIdx, int n){ + int rc; + if( pWal->exclusiveMode ) return SQLITE_OK; + rc = sqlite3OsShmLock(pWal->pDbFd, lockIdx, n, + SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE); + WALTRACE(("WAL%p: acquire EXCLUSIVE-%s cnt=%d %s\n", pWal, + walLockName(lockIdx), n, rc ? "failed" : "ok")); + VVA_ONLY( pWal->lockError = (u8)(rc!=SQLITE_OK && (rc&0xFF)!=SQLITE_BUSY); ) +#ifdef SQLITE_USE_SEH + if( rc==SQLITE_OK ){ + pWal->lockMask |= (((1<exclusiveMode ) return; + (void)sqlite3OsShmLock(pWal->pDbFd, lockIdx, n, + SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE); +#ifdef SQLITE_USE_SEH + pWal->lockMask &= ~(((1<0 ); + assert( (HASHTABLE_NSLOT & (HASHTABLE_NSLOT-1))==0 ); + return (iPage*HASHTABLE_HASH_1) & (HASHTABLE_NSLOT-1); +} +static int walNextHash(int iPriorHash){ + return (iPriorHash+1)&(HASHTABLE_NSLOT-1); +} + +/* +** An instance of the WalHashLoc object is used to describe the location +** of a page hash table in the wal-index. This becomes the return value +** from walHashGet(). +*/ +typedef struct WalHashLoc WalHashLoc; +struct WalHashLoc { + volatile ht_slot *aHash; /* Start of the wal-index hash table */ + volatile u32 *aPgno; /* aPgno[1] is the page of first frame indexed */ + u32 iZero; /* One less than the frame number of first indexed*/ +}; + +/* +** Return pointers to the hash table and page number array stored on +** page iHash of the wal-index. The wal-index is broken into 32KB pages +** numbered starting from 0. +** +** Set output variable pLoc->aHash to point to the start of the hash table +** in the wal-index file. Set pLoc->iZero to one less than the frame +** number of the first frame indexed by this hash table. If a +** slot in the hash table is set to N, it refers to frame number +** (pLoc->iZero+N) in the log. +** +** Finally, set pLoc->aPgno so that pLoc->aPgno[0] is the page number of the +** first frame indexed by the hash table, frame (pLoc->iZero). +*/ +static int walHashGet( + Wal *pWal, /* WAL handle */ + int iHash, /* Find the iHash'th table */ + WalHashLoc *pLoc /* OUT: Hash table location */ +){ + int rc; /* Return code */ + + rc = walIndexPage(pWal, iHash, &pLoc->aPgno); + assert( rc==SQLITE_OK || iHash>0 ); + + if( pLoc->aPgno ){ + pLoc->aHash = (volatile ht_slot *)&pLoc->aPgno[HASHTABLE_NPAGE]; + if( iHash==0 ){ + pLoc->aPgno = &pLoc->aPgno[WALINDEX_HDR_SIZE/sizeof(u32)]; + pLoc->iZero = 0; + }else{ + pLoc->iZero = HASHTABLE_NPAGE_ONE + (iHash-1)*HASHTABLE_NPAGE; + } + }else if( NEVER(rc==SQLITE_OK) ){ + rc = SQLITE_ERROR; + } + return rc; +} + +/* +** Return the number of the wal-index page that contains the hash-table +** and page-number array that contain entries corresponding to WAL frame +** iFrame. The wal-index is broken up into 32KB pages. Wal-index pages +** are numbered starting from 0. +*/ +static int walFramePage(u32 iFrame){ + int iHash = (iFrame+HASHTABLE_NPAGE-HASHTABLE_NPAGE_ONE-1) / HASHTABLE_NPAGE; + assert( (iHash==0 || iFrame>HASHTABLE_NPAGE_ONE) + && (iHash>=1 || iFrame<=HASHTABLE_NPAGE_ONE) + && (iHash<=1 || iFrame>(HASHTABLE_NPAGE_ONE+HASHTABLE_NPAGE)) + && (iHash>=2 || iFrame<=HASHTABLE_NPAGE_ONE+HASHTABLE_NPAGE) + && (iHash<=2 || iFrame>(HASHTABLE_NPAGE_ONE+2*HASHTABLE_NPAGE)) + ); + assert( iHash>=0 ); + return iHash; +} + +/* +** Return the page number associated with frame iFrame in this WAL. +*/ +static u32 walFramePgno(Wal *pWal, u32 iFrame){ + int iHash = walFramePage(iFrame); + SEH_INJECT_FAULT; + if( iHash==0 ){ + return pWal->apWiData[0][WALINDEX_HDR_SIZE/sizeof(u32) + iFrame - 1]; + } + return pWal->apWiData[iHash][(iFrame-1-HASHTABLE_NPAGE_ONE)%HASHTABLE_NPAGE]; +} + +/* +** Remove entries from the hash table that point to WAL slots greater +** than pWal->hdr.mxFrame. +** +** This function is called whenever pWal->hdr.mxFrame is decreased due +** to a rollback or savepoint. +** +** At most only the hash table containing pWal->hdr.mxFrame needs to be +** updated. Any later hash tables will be automatically cleared when +** pWal->hdr.mxFrame advances to the point where those hash tables are +** actually needed. +*/ +static void walCleanupHash(Wal *pWal){ + WalHashLoc sLoc; /* Hash table location */ + int iLimit = 0; /* Zero values greater than this */ + int nByte; /* Number of bytes to zero in aPgno[] */ + int i; /* Used to iterate through aHash[] */ + + assert( pWal->writeLock ); + testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE-1 ); + testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE ); + testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE+1 ); + + if( pWal->hdr.mxFrame==0 ) return; + + /* Obtain pointers to the hash-table and page-number array containing + ** the entry that corresponds to frame pWal->hdr.mxFrame. It is guaranteed + ** that the page said hash-table and array reside on is already mapped.(1) + */ + assert( pWal->nWiData>walFramePage(pWal->hdr.mxFrame) ); + assert( pWal->apWiData[walFramePage(pWal->hdr.mxFrame)] ); + i = walHashGet(pWal, walFramePage(pWal->hdr.mxFrame), &sLoc); + if( NEVER(i) ) return; /* Defense-in-depth, in case (1) above is wrong */ + + /* Zero all hash-table entries that correspond to frame numbers greater + ** than pWal->hdr.mxFrame. + */ + iLimit = pWal->hdr.mxFrame - sLoc.iZero; + assert( iLimit>0 ); + for(i=0; iiLimit ){ + sLoc.aHash[i] = 0; + } + } + + /* Zero the entries in the aPgno array that correspond to frames with + ** frame numbers greater than pWal->hdr.mxFrame. + */ + nByte = (int)((char *)sLoc.aHash - (char *)&sLoc.aPgno[iLimit]); + assert( nByte>=0 ); + memset((void *)&sLoc.aPgno[iLimit], 0, nByte); + +#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT + /* Verify that the every entry in the mapping region is still reachable + ** via the hash table even after the cleanup. + */ + if( iLimit ){ + int j; /* Loop counter */ + int iKey; /* Hash key */ + for(j=0; j=0 ); + memset((void*)sLoc.aPgno, 0, nByte); + } + + /* If the entry in aPgno[] is already set, then the previous writer + ** must have exited unexpectedly in the middle of a transaction (after + ** writing one or more dirty pages to the WAL to free up memory). + ** Remove the remnants of that writers uncommitted transaction from + ** the hash-table before writing any new entries. + */ + if( sLoc.aPgno[idx-1] ){ + walCleanupHash(pWal); + assert( !sLoc.aPgno[idx-1] ); + } + + /* Write the aPgno[] array entry and the hash-table slot. */ + nCollide = idx; + for(iKey=walHash(iPage); sLoc.aHash[iKey]; iKey=walNextHash(iKey)){ + if( (nCollide--)==0 ) return SQLITE_CORRUPT_BKPT; + } + sLoc.aPgno[idx-1] = iPage; + AtomicStore(&sLoc.aHash[iKey], (ht_slot)idx); + +#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT + /* Verify that the number of entries in the hash table exactly equals + ** the number of entries in the mapping region. + */ + { + int i; /* Loop counter */ + int nEntry = 0; /* Number of entries in the hash table */ + for(i=0; ickptLock==1 || pWal->ckptLock==0 ); + assert( WAL_ALL_BUT_WRITE==WAL_WRITE_LOCK+1 ); + assert( WAL_CKPT_LOCK==WAL_ALL_BUT_WRITE ); + assert( pWal->writeLock ); + iLock = WAL_ALL_BUT_WRITE + pWal->ckptLock; + rc = walLockExclusive(pWal, iLock, WAL_READ_LOCK(0)-iLock); + if( rc ){ + return rc; + } + + WALTRACE(("WAL%p: recovery begin...\n", pWal)); + + memset(&pWal->hdr, 0, sizeof(WalIndexHdr)); + + rc = sqlite3OsFileSize(pWal->pWalFd, &nSize); + if( rc!=SQLITE_OK ){ + goto recovery_error; + } + + if( nSize>WAL_HDRSIZE ){ + u8 aBuf[WAL_HDRSIZE]; /* Buffer to load WAL header into */ + u32 *aPrivate = 0; /* Heap copy of *-shm hash being populated */ + u8 *aFrame = 0; /* Malloc'd buffer to load entire frame */ + int szFrame; /* Number of bytes in buffer aFrame[] */ + u8 *aData; /* Pointer to data part of aFrame buffer */ + int szPage; /* Page size according to the log */ + u32 magic; /* Magic value read from WAL header */ + u32 version; /* Magic value read from WAL header */ + int isValid; /* True if this frame is valid */ + u32 iPg; /* Current 32KB wal-index page */ + u32 iLastFrame; /* Last frame in wal, based on nSize alone */ + + /* Read in the WAL header. */ + rc = sqlite3OsRead(pWal->pWalFd, aBuf, WAL_HDRSIZE, 0); + if( rc!=SQLITE_OK ){ + goto recovery_error; + } + + /* If the database page size is not a power of two, or is greater than + ** SQLITE_MAX_PAGE_SIZE, conclude that the WAL file contains no valid + ** data. Similarly, if the 'magic' value is invalid, ignore the whole + ** WAL file. + */ + magic = sqlite3Get4byte(&aBuf[0]); + szPage = sqlite3Get4byte(&aBuf[8]); + if( (magic&0xFFFFFFFE)!=WAL_MAGIC + || szPage&(szPage-1) + || szPage>SQLITE_MAX_PAGE_SIZE + || szPage<512 + ){ + goto finished; + } + pWal->hdr.bigEndCksum = (u8)(magic&0x00000001); + pWal->szPage = szPage; + pWal->nCkpt = sqlite3Get4byte(&aBuf[12]); + memcpy(&pWal->hdr.aSalt, &aBuf[16], 8); + + /* Verify that the WAL header checksum is correct */ + walChecksumBytes(pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN, + aBuf, WAL_HDRSIZE-2*4, 0, pWal->hdr.aFrameCksum + ); + if( pWal->hdr.aFrameCksum[0]!=sqlite3Get4byte(&aBuf[24]) + || pWal->hdr.aFrameCksum[1]!=sqlite3Get4byte(&aBuf[28]) + ){ + goto finished; + } + + /* Verify that the version number on the WAL format is one that + ** are able to understand */ + version = sqlite3Get4byte(&aBuf[4]); + if( version!=WAL_MAX_VERSION ){ + rc = SQLITE_CANTOPEN_BKPT; + goto finished; + } + + /* Malloc a buffer to read frames into. */ + szFrame = szPage + WAL_FRAME_HDRSIZE; + aFrame = (u8 *)sqlite3_malloc64(szFrame + WALINDEX_PGSZ); + SEH_FREE_ON_ERROR(0, aFrame); + if( !aFrame ){ + rc = SQLITE_NOMEM_BKPT; + goto recovery_error; + } + aData = &aFrame[WAL_FRAME_HDRSIZE]; + aPrivate = (u32*)&aData[szPage]; + + /* Read all frames from the log file. */ + iLastFrame = (nSize - WAL_HDRSIZE) / szFrame; + for(iPg=0; iPg<=(u32)walFramePage(iLastFrame); iPg++){ + u32 *aShare; + u32 iFrame; /* Index of last frame read */ + u32 iLast = MIN(iLastFrame, HASHTABLE_NPAGE_ONE+iPg*HASHTABLE_NPAGE); + u32 iFirst = 1 + (iPg==0?0:HASHTABLE_NPAGE_ONE+(iPg-1)*HASHTABLE_NPAGE); + u32 nHdr, nHdr32; + rc = walIndexPage(pWal, iPg, (volatile u32**)&aShare); + assert( aShare!=0 || rc!=SQLITE_OK ); + if( aShare==0 ) break; + SEH_SET_ON_ERROR(iPg, aShare); + pWal->apWiData[iPg] = aPrivate; + + for(iFrame=iFirst; iFrame<=iLast; iFrame++){ + i64 iOffset = walFrameOffset(iFrame, szPage); + u32 pgno; /* Database page number for frame */ + u32 nTruncate; /* dbsize field from frame header */ + + /* Read and decode the next log frame. */ + rc = sqlite3OsRead(pWal->pWalFd, aFrame, szFrame, iOffset); + if( rc!=SQLITE_OK ) break; + isValid = walDecodeFrame(pWal, &pgno, &nTruncate, aData, aFrame); + if( !isValid ) break; + rc = walIndexAppend(pWal, iFrame, pgno); + if( NEVER(rc!=SQLITE_OK) ) break; + + /* If nTruncate is non-zero, this is a commit record. */ + if( nTruncate ){ + pWal->hdr.mxFrame = iFrame; + pWal->hdr.nPage = nTruncate; + pWal->hdr.szPage = (u16)((szPage&0xff00) | (szPage>>16)); + testcase( szPage<=32768 ); + testcase( szPage>=65536 ); + aFrameCksum[0] = pWal->hdr.aFrameCksum[0]; + aFrameCksum[1] = pWal->hdr.aFrameCksum[1]; + } + } + pWal->apWiData[iPg] = aShare; + SEH_SET_ON_ERROR(0,0); + nHdr = (iPg==0 ? WALINDEX_HDR_SIZE : 0); + nHdr32 = nHdr / sizeof(u32); +#ifndef SQLITE_SAFER_WALINDEX_RECOVERY + /* Memcpy() should work fine here, on all reasonable implementations. + ** Technically, memcpy() might change the destination to some + ** intermediate value before setting to the final value, and that might + ** cause a concurrent reader to malfunction. Memcpy() is allowed to + ** do that, according to the spec, but no memcpy() implementation that + ** we know of actually does that, which is why we say that memcpy() + ** is safe for this. Memcpy() is certainly a lot faster. + */ + memcpy(&aShare[nHdr32], &aPrivate[nHdr32], WALINDEX_PGSZ-nHdr); +#else + /* In the event that some platform is found for which memcpy() + ** changes the destination to some intermediate value before + ** setting the final value, this alternative copy routine is + ** provided. + */ + { + int i; + for(i=nHdr32; ihdr.aFrameCksum[0] = aFrameCksum[0]; + pWal->hdr.aFrameCksum[1] = aFrameCksum[1]; + walIndexWriteHdr(pWal); + + /* Reset the checkpoint-header. This is safe because this thread is + ** currently holding locks that exclude all other writers and + ** checkpointers. Then set the values of read-mark slots 1 through N. + */ + pInfo = walCkptInfo(pWal); + pInfo->nBackfill = 0; + pInfo->nBackfillAttempted = pWal->hdr.mxFrame; + pInfo->aReadMark[0] = 0; + for(i=1; ihdr.mxFrame ){ + pInfo->aReadMark[i] = pWal->hdr.mxFrame; + }else{ + pInfo->aReadMark[i] = READMARK_NOT_USED; + } + SEH_INJECT_FAULT; + walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1); + }else if( rc!=SQLITE_BUSY ){ + goto recovery_error; + } + } + + /* If more than one frame was recovered from the log file, report an + ** event via sqlite3_log(). This is to help with identifying performance + ** problems caused by applications routinely shutting down without + ** checkpointing the log file. + */ + if( pWal->hdr.nPage ){ + sqlite3_log(SQLITE_NOTICE_RECOVER_WAL, + "recovered %d frames from WAL file %s", + pWal->hdr.mxFrame, pWal->zWalName + ); + } + } + +recovery_error: + WALTRACE(("WAL%p: recovery %s\n", pWal, rc ? "failed" : "ok")); + walUnlockExclusive(pWal, iLock, WAL_READ_LOCK(0)-iLock); + return rc; +} + +/* +** Close an open wal-index. +*/ +static void walIndexClose(Wal *pWal, int isDelete){ + if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE || pWal->bShmUnreliable ){ + int i; + for(i=0; inWiData; i++){ + sqlite3_free((void *)pWal->apWiData[i]); + pWal->apWiData[i] = 0; + } + } + if( pWal->exclusiveMode!=WAL_HEAPMEMORY_MODE ){ + sqlite3OsShmUnmap(pWal->pDbFd, isDelete); + } +} + +/* +** Open a connection to the WAL file zWalName. The database file must +** already be opened on connection pDbFd. The buffer that zWalName points +** to must remain valid for the lifetime of the returned Wal* handle. +** +** A SHARED lock should be held on the database file when this function +** is called. The purpose of this SHARED lock is to prevent any other +** client from unlinking the WAL or wal-index file. If another process +** were to do this just after this client opened one of these files, the +** system would be badly broken. +** +** If the log file is successfully opened, SQLITE_OK is returned and +** *ppWal is set to point to a new WAL handle. If an error occurs, +** an SQLite error code is returned and *ppWal is left unmodified. +*/ +SQLITE_PRIVATE int sqlite3WalOpen( + sqlite3_vfs *pVfs, /* vfs module to open wal and wal-index */ + sqlite3_file *pDbFd, /* The open database file */ + const char *zWalName, /* Name of the WAL file */ + int bNoShm, /* True to run in heap-memory mode */ + i64 mxWalSize, /* Truncate WAL to this size on reset */ + Wal **ppWal /* OUT: Allocated Wal handle */ +){ + int rc; /* Return Code */ + Wal *pRet; /* Object to allocate and return */ + int flags; /* Flags passed to OsOpen() */ + + assert( zWalName && zWalName[0] ); + assert( pDbFd ); + + /* Verify the values of various constants. Any changes to the values + ** of these constants would result in an incompatible on-disk format + ** for the -shm file. Any change that causes one of these asserts to + ** fail is a backward compatibility problem, even if the change otherwise + ** works. + ** + ** This table also serves as a helpful cross-reference when trying to + ** interpret hex dumps of the -shm file. + */ + assert( 48 == sizeof(WalIndexHdr) ); + assert( 40 == sizeof(WalCkptInfo) ); + assert( 120 == WALINDEX_LOCK_OFFSET ); + assert( 136 == WALINDEX_HDR_SIZE ); + assert( 4096 == HASHTABLE_NPAGE ); + assert( 4062 == HASHTABLE_NPAGE_ONE ); + assert( 8192 == HASHTABLE_NSLOT ); + assert( 383 == HASHTABLE_HASH_1 ); + assert( 32768 == WALINDEX_PGSZ ); + assert( 8 == SQLITE_SHM_NLOCK ); + assert( 5 == WAL_NREADER ); + assert( 24 == WAL_FRAME_HDRSIZE ); + assert( 32 == WAL_HDRSIZE ); + assert( 120 == WALINDEX_LOCK_OFFSET + WAL_WRITE_LOCK ); + assert( 121 == WALINDEX_LOCK_OFFSET + WAL_CKPT_LOCK ); + assert( 122 == WALINDEX_LOCK_OFFSET + WAL_RECOVER_LOCK ); + assert( 123 == WALINDEX_LOCK_OFFSET + WAL_READ_LOCK(0) ); + assert( 124 == WALINDEX_LOCK_OFFSET + WAL_READ_LOCK(1) ); + assert( 125 == WALINDEX_LOCK_OFFSET + WAL_READ_LOCK(2) ); + assert( 126 == WALINDEX_LOCK_OFFSET + WAL_READ_LOCK(3) ); + assert( 127 == WALINDEX_LOCK_OFFSET + WAL_READ_LOCK(4) ); + + /* In the amalgamation, the os_unix.c and os_win.c source files come before + ** this source file. Verify that the #defines of the locking byte offsets + ** in os_unix.c and os_win.c agree with the WALINDEX_LOCK_OFFSET value. + ** For that matter, if the lock offset ever changes from its initial design + ** value of 120, we need to know that so there is an assert() to check it. + */ +#ifdef WIN_SHM_BASE + assert( WIN_SHM_BASE==WALINDEX_LOCK_OFFSET ); +#endif +#ifdef UNIX_SHM_BASE + assert( UNIX_SHM_BASE==WALINDEX_LOCK_OFFSET ); +#endif + + + /* Allocate an instance of struct Wal to return. */ + *ppWal = 0; + pRet = (Wal*)sqlite3MallocZero(sizeof(Wal) + pVfs->szOsFile); + if( !pRet ){ + return SQLITE_NOMEM_BKPT; + } + + pRet->pVfs = pVfs; + pRet->pWalFd = (sqlite3_file *)&pRet[1]; + pRet->pDbFd = pDbFd; + pRet->readLock = -1; + pRet->mxWalSize = mxWalSize; + pRet->zWalName = zWalName; + pRet->syncHeader = 1; + pRet->padToSectorBoundary = 1; + pRet->exclusiveMode = (bNoShm ? WAL_HEAPMEMORY_MODE: WAL_NORMAL_MODE); + + /* Open file handle on the write-ahead log file. */ + flags = (SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_WAL); + rc = sqlite3OsOpen(pVfs, zWalName, pRet->pWalFd, flags, &flags); + if( rc==SQLITE_OK && flags&SQLITE_OPEN_READONLY ){ + pRet->readOnly = WAL_RDONLY; + } + + if( rc!=SQLITE_OK ){ + walIndexClose(pRet, 0); + sqlite3OsClose(pRet->pWalFd); + sqlite3_free(pRet); + }else{ + int iDC = sqlite3OsDeviceCharacteristics(pDbFd); + if( iDC & SQLITE_IOCAP_SEQUENTIAL ){ pRet->syncHeader = 0; } + if( iDC & SQLITE_IOCAP_POWERSAFE_OVERWRITE ){ + pRet->padToSectorBoundary = 0; + } + *ppWal = pRet; + WALTRACE(("WAL%d: opened\n", pRet)); + } + return rc; +} + +/* +** Change the size to which the WAL file is truncated on each reset. +*/ +SQLITE_PRIVATE void sqlite3WalLimit(Wal *pWal, i64 iLimit){ + if( pWal ) pWal->mxWalSize = iLimit; +} + +/* +** Find the smallest page number out of all pages held in the WAL that +** has not been returned by any prior invocation of this method on the +** same WalIterator object. Write into *piFrame the frame index where +** that page was last written into the WAL. Write into *piPage the page +** number. +** +** Return 0 on success. If there are no pages in the WAL with a page +** number larger than *piPage, then return 1. +*/ +static int walIteratorNext( + WalIterator *p, /* Iterator */ + u32 *piPage, /* OUT: The page number of the next page */ + u32 *piFrame /* OUT: Wal frame index of next page */ +){ + u32 iMin; /* Result pgno must be greater than iMin */ + u32 iRet = 0xFFFFFFFF; /* 0xffffffff is never a valid page number */ + int i; /* For looping through segments */ + + iMin = p->iPrior; + assert( iMin<0xffffffff ); + for(i=p->nSegment-1; i>=0; i--){ + struct WalSegment *pSegment = &p->aSegment[i]; + while( pSegment->iNextnEntry ){ + u32 iPg = pSegment->aPgno[pSegment->aIndex[pSegment->iNext]]; + if( iPg>iMin ){ + if( iPgiZero + pSegment->aIndex[pSegment->iNext]; + } + break; + } + pSegment->iNext++; + } + } + + *piPage = p->iPrior = iRet; + return (iRet==0xFFFFFFFF); +} + +/* +** This function merges two sorted lists into a single sorted list. +** +** aLeft[] and aRight[] are arrays of indices. The sort key is +** aContent[aLeft[]] and aContent[aRight[]]. Upon entry, the following +** is guaranteed for all J0 && nRight>0 ); + while( iRight=nRight || aContent[aLeft[iLeft]]=nLeft || aContent[aLeft[iLeft]]>dbpage ); + assert( iRight>=nRight || aContent[aRight[iRight]]>dbpage ); + } + + *paRight = aLeft; + *pnRight = iOut; + memcpy(aLeft, aTmp, sizeof(aTmp[0])*iOut); +} + +/* +** Sort the elements in list aList using aContent[] as the sort key. +** Remove elements with duplicate keys, preferring to keep the +** larger aList[] values. +** +** The aList[] entries are indices into aContent[]. The values in +** aList[] are to be sorted so that for all J0 ); + assert( HASHTABLE_NPAGE==(1<<(ArraySize(aSub)-1)) ); + + for(iList=0; iListaList && p->nList<=(1<aList==&aList[iList&~((2<aList, p->nList, &aMerge, &nMerge, aBuffer); + } + aSub[iSub].aList = aMerge; + aSub[iSub].nList = nMerge; + } + + for(iSub++; iSubnList<=(1<aList==&aList[nList&~((2<aList, p->nList, &aMerge, &nMerge, aBuffer); + } + } + assert( aMerge==aList ); + *pnList = nMerge; + +#ifdef SQLITE_DEBUG + { + int i; + for(i=1; i<*pnList; i++){ + assert( aContent[aList[i]] > aContent[aList[i-1]] ); + } + } +#endif +} + +/* +** Free an iterator allocated by walIteratorInit(). +*/ +static void walIteratorFree(WalIterator *p){ + sqlite3_free(p); +} + +/* +** Construct a WalInterator object that can be used to loop over all +** pages in the WAL following frame nBackfill in ascending order. Frames +** nBackfill or earlier may be included - excluding them is an optimization +** only. The caller must hold the checkpoint lock. +** +** On success, make *pp point to the newly allocated WalInterator object +** return SQLITE_OK. Otherwise, return an error code. If this routine +** returns an error, the value of *pp is undefined. +** +** The calling routine should invoke walIteratorFree() to destroy the +** WalIterator object when it has finished with it. +*/ +static int walIteratorInit(Wal *pWal, u32 nBackfill, WalIterator **pp){ + WalIterator *p; /* Return value */ + int nSegment; /* Number of segments to merge */ + u32 iLast; /* Last frame in log */ + sqlite3_int64 nByte; /* Number of bytes to allocate */ + int i; /* Iterator variable */ + ht_slot *aTmp; /* Temp space used by merge-sort */ + int rc = SQLITE_OK; /* Return Code */ + + /* This routine only runs while holding the checkpoint lock. And + ** it only runs if there is actually content in the log (mxFrame>0). + */ + assert( pWal->ckptLock && pWal->hdr.mxFrame>0 ); + iLast = pWal->hdr.mxFrame; + + /* Allocate space for the WalIterator object. */ + nSegment = walFramePage(iLast) + 1; + nByte = SZ_WALITERATOR(nSegment) + + iLast*sizeof(ht_slot); + p = (WalIterator *)sqlite3_malloc64(nByte + + sizeof(ht_slot) * (iLast>HASHTABLE_NPAGE?HASHTABLE_NPAGE:iLast) + ); + if( !p ){ + return SQLITE_NOMEM_BKPT; + } + memset(p, 0, nByte); + p->nSegment = nSegment; + aTmp = (ht_slot*)&(((u8*)p)[nByte]); + SEH_FREE_ON_ERROR(0, p); + for(i=walFramePage(nBackfill+1); rc==SQLITE_OK && iaSegment[p->nSegment])[sLoc.iZero]; + sLoc.iZero++; + + for(j=0; jaSegment[i].iZero = sLoc.iZero; + p->aSegment[i].nEntry = nEntry; + p->aSegment[i].aIndex = aIndex; + p->aSegment[i].aPgno = (u32 *)sLoc.aPgno; + } + } + if( rc!=SQLITE_OK ){ + SEH_FREE_ON_ERROR(p, 0); + walIteratorFree(p); + p = 0; + } + *pp = p; + return rc; +} + +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + + +/* +** Attempt to enable blocking locks that block for nMs ms. Return 1 if +** blocking locks are successfully enabled, or 0 otherwise. +*/ +static int walEnableBlockingMs(Wal *pWal, int nMs){ + int rc = sqlite3OsFileControl( + pWal->pDbFd, SQLITE_FCNTL_LOCK_TIMEOUT, (void*)&nMs + ); + return (rc==SQLITE_OK); +} + +/* +** Attempt to enable blocking locks. Blocking locks are enabled only if (a) +** they are supported by the VFS, and (b) the database handle is configured +** with a busy-timeout. Return 1 if blocking locks are successfully enabled, +** or 0 otherwise. +*/ +static int walEnableBlocking(Wal *pWal){ + int res = 0; + if( pWal->db ){ + int tmout = pWal->db->setlkTimeout; + if( tmout ){ + res = walEnableBlockingMs(pWal, tmout); + } + } + return res; +} + +/* +** Disable blocking locks. +*/ +static void walDisableBlocking(Wal *pWal){ + int tmout = 0; + sqlite3OsFileControl(pWal->pDbFd, SQLITE_FCNTL_LOCK_TIMEOUT, (void*)&tmout); +} + +/* +** If parameter bLock is true, attempt to enable blocking locks, take +** the WRITER lock, and then disable blocking locks. If blocking locks +** cannot be enabled, no attempt to obtain the WRITER lock is made. Return +** an SQLite error code if an error occurs, or SQLITE_OK otherwise. It is not +** an error if blocking locks can not be enabled. +** +** If the bLock parameter is false and the WRITER lock is held, release it. +*/ +SQLITE_PRIVATE int sqlite3WalWriteLock(Wal *pWal, int bLock){ + int rc = SQLITE_OK; + assert( pWal->readLock<0 || bLock==0 ); + if( bLock ){ + assert( pWal->db ); + if( walEnableBlocking(pWal) ){ + rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1); + if( rc==SQLITE_OK ){ + pWal->writeLock = 1; + } + walDisableBlocking(pWal); + } + }else if( pWal->writeLock ){ + walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1); + pWal->writeLock = 0; + } + return rc; +} + +/* +** Set the database handle used to determine if blocking locks are required. +*/ +SQLITE_PRIVATE void sqlite3WalDb(Wal *pWal, sqlite3 *db){ + pWal->db = db; +} + +#else +# define walEnableBlocking(x) 0 +# define walDisableBlocking(x) +# define walEnableBlockingMs(pWal, ms) 0 +# define sqlite3WalDb(pWal, db) +#endif /* ifdef SQLITE_ENABLE_SETLK_TIMEOUT */ + + +/* +** Attempt to obtain the exclusive WAL lock defined by parameters lockIdx and +** n. If the attempt fails and parameter xBusy is not NULL, then it is a +** busy-handler function. Invoke it and retry the lock until either the +** lock is successfully obtained or the busy-handler returns 0. +*/ +static int walBusyLock( + Wal *pWal, /* WAL connection */ + int (*xBusy)(void*), /* Function to call when busy */ + void *pBusyArg, /* Context argument for xBusyHandler */ + int lockIdx, /* Offset of first byte to lock */ + int n /* Number of bytes to lock */ +){ + int rc; + do { + rc = walLockExclusive(pWal, lockIdx, n); + }while( xBusy && rc==SQLITE_BUSY && xBusy(pBusyArg) ); +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + if( rc==SQLITE_BUSY_TIMEOUT ){ + walDisableBlocking(pWal); + rc = SQLITE_BUSY; + } +#endif + return rc; +} + +/* +** The cache of the wal-index header must be valid to call this function. +** Return the page-size in bytes used by the database. +*/ +static int walPagesize(Wal *pWal){ + return (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16); +} + +/* +** The following is guaranteed when this function is called: +** +** a) the WRITER lock is held, +** b) the entire log file has been checkpointed, and +** c) any existing readers are reading exclusively from the database +** file - there are no readers that may attempt to read a frame from +** the log file. +** +** This function updates the shared-memory structures so that the next +** client to write to the database (which may be this one) does so by +** writing frames into the start of the log file. +** +** The value of parameter salt1 is used as the aSalt[1] value in the +** new wal-index header. It should be passed a pseudo-random value (i.e. +** one obtained from sqlite3_randomness()). +*/ +static void walRestartHdr(Wal *pWal, u32 salt1){ + volatile WalCkptInfo *pInfo = walCkptInfo(pWal); + int i; /* Loop counter */ + u32 *aSalt = pWal->hdr.aSalt; /* Big-endian salt values */ + pWal->nCkpt++; + pWal->hdr.mxFrame = 0; + sqlite3Put4byte((u8*)&aSalt[0], 1 + sqlite3Get4byte((u8*)&aSalt[0])); + memcpy(&pWal->hdr.aSalt[1], &salt1, 4); + walIndexWriteHdr(pWal); + AtomicStore(&pInfo->nBackfill, 0); + pInfo->nBackfillAttempted = 0; + pInfo->aReadMark[1] = 0; + for(i=2; iaReadMark[i] = READMARK_NOT_USED; + assert( pInfo->aReadMark[0]==0 ); +} + +/* +** Copy as much content as we can from the WAL back into the database file +** in response to an sqlite3_wal_checkpoint() request or the equivalent. +** +** The amount of information copies from WAL to database might be limited +** by active readers. This routine will never overwrite a database page +** that a concurrent reader might be using. +** +** All I/O barrier operations (a.k.a fsyncs) occur in this routine when +** SQLite is in WAL-mode in synchronous=NORMAL. That means that if +** checkpoints are always run by a background thread or background +** process, foreground threads will never block on a lengthy fsync call. +** +** Fsync is called on the WAL before writing content out of the WAL and +** into the database. This ensures that if the new content is persistent +** in the WAL and can be recovered following a power-loss or hard reset. +** +** Fsync is also called on the database file if (and only if) the entire +** WAL content is copied into the database file. This second fsync makes +** it safe to delete the WAL since the new content will persist in the +** database file. +** +** This routine uses and updates the nBackfill field of the wal-index header. +** This is the only routine that will increase the value of nBackfill. +** (A WAL reset or recovery will revert nBackfill to zero, but not increase +** its value.) +** +** The caller must be holding sufficient locks to ensure that no other +** checkpoint is running (in any other thread or process) at the same +** time. +*/ +static int walCheckpoint( + Wal *pWal, /* Wal connection */ + sqlite3 *db, /* Check for interrupts on this handle */ + int eMode, /* One of PASSIVE, FULL or RESTART */ + int (*xBusy)(void*), /* Function to call when busy */ + void *pBusyArg, /* Context argument for xBusyHandler */ + int sync_flags, /* Flags for OsSync() (or 0) */ + u8 *zBuf /* Temporary buffer to use */ +){ + int rc = SQLITE_OK; /* Return code */ + int szPage; /* Database page-size */ + WalIterator *pIter = 0; /* Wal iterator context */ + u32 iDbpage = 0; /* Next database page to write */ + u32 iFrame = 0; /* Wal frame containing data for iDbpage */ + u32 mxSafeFrame; /* Max frame that can be backfilled */ + u32 mxPage; /* Max database page to write */ + int i; /* Loop counter */ + volatile WalCkptInfo *pInfo; /* The checkpoint status information */ + + szPage = walPagesize(pWal); + testcase( szPage<=32768 ); + testcase( szPage>=65536 ); + pInfo = walCkptInfo(pWal); + if( pInfo->nBackfillhdr.mxFrame ){ + + /* EVIDENCE-OF: R-62920-47450 The busy-handler callback is never invoked + ** in the SQLITE_CHECKPOINT_PASSIVE mode. */ + assert( eMode!=SQLITE_CHECKPOINT_PASSIVE || xBusy==0 ); + + /* Compute in mxSafeFrame the index of the last frame of the WAL that is + ** safe to write into the database. Frames beyond mxSafeFrame might + ** overwrite database pages that are in use by active readers and thus + ** cannot be backfilled from the WAL. + */ + mxSafeFrame = pWal->hdr.mxFrame; + mxPage = pWal->hdr.nPage; + for(i=1; iaReadMark+i); SEH_INJECT_FAULT; + if( mxSafeFrame>y ){ + assert( y<=pWal->hdr.mxFrame ); + rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(i), 1); + if( rc==SQLITE_OK ){ + u32 iMark = (i==1 ? mxSafeFrame : READMARK_NOT_USED); + AtomicStore(pInfo->aReadMark+i, iMark); SEH_INJECT_FAULT; + walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1); + }else if( rc==SQLITE_BUSY ){ + mxSafeFrame = y; + xBusy = 0; + }else{ + goto walcheckpoint_out; + } + } + } + + /* Allocate the iterator */ + if( pInfo->nBackfillnBackfill, &pIter); + assert( rc==SQLITE_OK || pIter==0 ); + } + + if( pIter + && (rc = walBusyLock(pWal,xBusy,pBusyArg,WAL_READ_LOCK(0),1))==SQLITE_OK + ){ + u32 nBackfill = pInfo->nBackfill; + WalIndexHdr *pLive = (WalIndexHdr*)walIndexHdr(pWal); + + /* Now that read-lock slot 0 is locked, check that the wal has not been + ** wrapped since the header was read for this checkpoint. If it was, then + ** there was no work to do anyway. In this case the + ** (pInfo->nBackfillhdr.mxFrame) test above only passed because + ** pInfo->nBackfill had already been set to 0 by the writer that wrapped + ** the wal file. It would also be dangerous to proceed, as there may be + ** fewer than pWal->hdr.mxFrame valid frames in the wal file. */ + int bChg = memcmp(pLive->aSalt, pWal->hdr.aSalt, sizeof(pWal->hdr.aSalt)); + if( 0==bChg ){ + pInfo->nBackfillAttempted = mxSafeFrame; SEH_INJECT_FAULT; + + /* Sync the WAL to disk */ + rc = sqlite3OsSync(pWal->pWalFd, CKPT_SYNC_FLAGS(sync_flags)); + + /* If the database may grow as a result of this checkpoint, hint + ** about the eventual size of the db file to the VFS layer. + */ + if( rc==SQLITE_OK ){ + i64 nReq = ((i64)mxPage * szPage); + i64 nSize; /* Current size of database file */ + sqlite3OsFileControl(pWal->pDbFd, SQLITE_FCNTL_CKPT_START, 0); + rc = sqlite3OsFileSize(pWal->pDbFd, &nSize); + if( rc==SQLITE_OK && nSizehdr.mxFrame*szPage)pDbFd, SQLITE_FCNTL_SIZE_HINT, &nReq); + } + } + + } + + /* Iterate through the contents of the WAL, copying data to the + ** db file */ + while( rc==SQLITE_OK && 0==walIteratorNext(pIter, &iDbpage, &iFrame) ){ + i64 iOffset; + assert( walFramePgno(pWal, iFrame)==iDbpage ); + SEH_INJECT_FAULT; + if( AtomicLoad(&db->u1.isInterrupted) ){ + rc = db->mallocFailed ? SQLITE_NOMEM_BKPT : SQLITE_INTERRUPT; + break; + } + if( iFrame<=nBackfill || iFrame>mxSafeFrame || iDbpage>mxPage ){ + continue; + } + iOffset = walFrameOffset(iFrame, szPage) + WAL_FRAME_HDRSIZE; + /* testcase( IS_BIG_INT(iOffset) ); // requires a 4GiB WAL file */ + rc = sqlite3OsRead(pWal->pWalFd, zBuf, szPage, iOffset); + if( rc!=SQLITE_OK ) break; + iOffset = (iDbpage-1)*(i64)szPage; + testcase( IS_BIG_INT(iOffset) ); + rc = sqlite3OsWrite(pWal->pDbFd, zBuf, szPage, iOffset); + if( rc!=SQLITE_OK ) break; + } + sqlite3OsFileControl(pWal->pDbFd, SQLITE_FCNTL_CKPT_DONE, 0); + + /* If work was actually accomplished... */ + if( rc==SQLITE_OK ){ + if( mxSafeFrame==walIndexHdr(pWal)->mxFrame ){ + i64 szDb = pWal->hdr.nPage*(i64)szPage; + testcase( IS_BIG_INT(szDb) ); + rc = sqlite3OsTruncate(pWal->pDbFd, szDb); + if( rc==SQLITE_OK ){ + rc = sqlite3OsSync(pWal->pDbFd, CKPT_SYNC_FLAGS(sync_flags)); + } + } + if( rc==SQLITE_OK ){ + AtomicStore(&pInfo->nBackfill, mxSafeFrame); SEH_INJECT_FAULT; + } + } + } + + /* Release the reader lock held while backfilling */ + walUnlockExclusive(pWal, WAL_READ_LOCK(0), 1); + } + + if( rc==SQLITE_BUSY ){ + /* Reset the return code so as not to report a checkpoint failure + ** just because there are active readers. */ + rc = SQLITE_OK; + } + } + + /* If this is an SQLITE_CHECKPOINT_RESTART or TRUNCATE operation, and the + ** entire wal file has been copied into the database file, then block + ** until all readers have finished using the wal file. This ensures that + ** the next process to write to the database restarts the wal file. + */ + if( rc==SQLITE_OK && eMode!=SQLITE_CHECKPOINT_PASSIVE ){ + assert( pWal->writeLock ); + SEH_INJECT_FAULT; + if( pInfo->nBackfillhdr.mxFrame ){ + rc = SQLITE_BUSY; + }else if( eMode>=SQLITE_CHECKPOINT_RESTART ){ + u32 salt1; + sqlite3_randomness(4, &salt1); + assert( pInfo->nBackfill==pWal->hdr.mxFrame ); + rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(1), WAL_NREADER-1); + if( rc==SQLITE_OK ){ + if( eMode==SQLITE_CHECKPOINT_TRUNCATE ){ + /* IMPLEMENTATION-OF: R-44699-57140 This mode works the same way as + ** SQLITE_CHECKPOINT_RESTART with the addition that it also + ** truncates the log file to zero bytes just prior to a + ** successful return. + ** + ** In theory, it might be safe to do this without updating the + ** wal-index header in shared memory, as all subsequent reader or + ** writer clients should see that the entire log file has been + ** checkpointed and behave accordingly. This seems unsafe though, + ** as it would leave the system in a state where the contents of + ** the wal-index header do not match the contents of the + ** file-system. To avoid this, update the wal-index header to + ** indicate that the log file contains zero valid frames. */ + walRestartHdr(pWal, salt1); + rc = sqlite3OsTruncate(pWal->pWalFd, 0); + } + walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1); + } + } + } + + walcheckpoint_out: + SEH_FREE_ON_ERROR(pIter, 0); + walIteratorFree(pIter); + return rc; +} + +/* +** If the WAL file is currently larger than nMax bytes in size, truncate +** it to exactly nMax bytes. If an error occurs while doing so, ignore it. +*/ +static void walLimitSize(Wal *pWal, i64 nMax){ + i64 sz; + int rx; + sqlite3BeginBenignMalloc(); + rx = sqlite3OsFileSize(pWal->pWalFd, &sz); + if( rx==SQLITE_OK && (sz > nMax ) ){ + rx = sqlite3OsTruncate(pWal->pWalFd, nMax); + } + sqlite3EndBenignMalloc(); + if( rx ){ + sqlite3_log(rx, "cannot limit WAL size: %s", pWal->zWalName); + } +} + +#ifdef SQLITE_USE_SEH +/* +** This is the "standard" exception handler used in a few places to handle +** an exception thrown by reading from the *-shm mapping after it has become +** invalid in SQLITE_USE_SEH builds. It is used as follows: +** +** SEH_TRY { ... } +** SEH_EXCEPT( rc = walHandleException(pWal); ) +** +** This function does three things: +** +** 1) Determines the locks that should be held, based on the contents of +** the Wal.readLock, Wal.writeLock and Wal.ckptLock variables. All other +** held locks are assumed to be transient locks that would have been +** released had the exception not been thrown and are dropped. +** +** 2) Frees the pointer at Wal.pFree, if any, using sqlite3_free(). +** +** 3) Set pWal->apWiData[pWal->iWiPg] to pWal->pWiValue if not NULL +** +** 4) Returns SQLITE_IOERR. +*/ +static int walHandleException(Wal *pWal){ + if( pWal->exclusiveMode==0 ){ + static const int S = 1; + static const int E = (1<writeLock==2 ) pWal->writeLock = 0; + mUnlock = pWal->lockMask & ~( + (pWal->readLock<0 ? 0 : (S << WAL_READ_LOCK(pWal->readLock))) + | (pWal->writeLock ? (E << WAL_WRITE_LOCK) : 0) + | (pWal->ckptLock ? (E << WAL_CKPT_LOCK) : 0) + ); + for(ii=0; iipFree); + pWal->pFree = 0; + if( pWal->pWiValue ){ + pWal->apWiData[pWal->iWiPg] = pWal->pWiValue; + pWal->pWiValue = 0; + } + return SQLITE_IOERR_IN_PAGE; +} + +/* +** Assert that the Wal.lockMask mask, which indicates the locks held +** by the connection, is consistent with the Wal.readLock, Wal.writeLock +** and Wal.ckptLock variables. To be used as: +** +** assert( walAssertLockmask(pWal) ); +*/ +static int walAssertLockmask(Wal *pWal){ + if( pWal->exclusiveMode==0 ){ + static const int S = 1; + static const int E = (1<readLock<0 ? 0 : (S << WAL_READ_LOCK(pWal->readLock))) + | (pWal->writeLock ? (E << WAL_WRITE_LOCK) : 0) + | (pWal->ckptLock ? (E << WAL_CKPT_LOCK) : 0) +#ifdef SQLITE_ENABLE_SNAPSHOT + | (pWal->pSnapshot ? (pWal->lockMask & (1 << WAL_CKPT_LOCK)) : 0) +#endif + ); + assert( mExpect==pWal->lockMask ); + } + return 1; +} + +/* +** Return and zero the "system error" field set when an +** EXCEPTION_IN_PAGE_ERROR exception is caught. +*/ +SQLITE_PRIVATE int sqlite3WalSystemErrno(Wal *pWal){ + int iRet = 0; + if( pWal ){ + iRet = pWal->iSysErrno; + pWal->iSysErrno = 0; + } + return iRet; +} + +#else +# define walAssertLockmask(x) 1 +#endif /* ifdef SQLITE_USE_SEH */ + +/* +** Close a connection to a log file. +*/ +SQLITE_PRIVATE int sqlite3WalClose( + Wal *pWal, /* Wal to close */ + sqlite3 *db, /* For interrupt flag */ + int sync_flags, /* Flags to pass to OsSync() (or 0) */ + int nBuf, + u8 *zBuf /* Buffer of at least nBuf bytes */ +){ + int rc = SQLITE_OK; + if( pWal ){ + int isDelete = 0; /* True to unlink wal and wal-index files */ + + assert( walAssertLockmask(pWal) ); + + /* If an EXCLUSIVE lock can be obtained on the database file (using the + ** ordinary, rollback-mode locking methods, this guarantees that the + ** connection associated with this log file is the only connection to + ** the database. In this case checkpoint the database and unlink both + ** the wal and wal-index files. + ** + ** The EXCLUSIVE lock is not released before returning. + */ + if( zBuf!=0 + && SQLITE_OK==(rc = sqlite3OsLock(pWal->pDbFd, SQLITE_LOCK_EXCLUSIVE)) + ){ + if( pWal->exclusiveMode==WAL_NORMAL_MODE ){ + pWal->exclusiveMode = WAL_EXCLUSIVE_MODE; + } + rc = sqlite3WalCheckpoint(pWal, db, + SQLITE_CHECKPOINT_PASSIVE, 0, 0, sync_flags, nBuf, zBuf, 0, 0 + ); + if( rc==SQLITE_OK ){ + int bPersist = -1; + sqlite3OsFileControlHint( + pWal->pDbFd, SQLITE_FCNTL_PERSIST_WAL, &bPersist + ); + if( bPersist!=1 ){ + /* Try to delete the WAL file if the checkpoint completed and + ** fsynced (rc==SQLITE_OK) and if we are not in persistent-wal + ** mode (!bPersist) */ + isDelete = 1; + }else if( pWal->mxWalSize>=0 ){ + /* Try to truncate the WAL file to zero bytes if the checkpoint + ** completed and fsynced (rc==SQLITE_OK) and we are in persistent + ** WAL mode (bPersist) and if the PRAGMA journal_size_limit is a + ** non-negative value (pWal->mxWalSize>=0). Note that we truncate + ** to zero bytes as truncating to the journal_size_limit might + ** leave a corrupt WAL file on disk. */ + walLimitSize(pWal, 0); + } + } + } + + walIndexClose(pWal, isDelete); + sqlite3OsClose(pWal->pWalFd); + if( isDelete ){ + sqlite3BeginBenignMalloc(); + sqlite3OsDelete(pWal->pVfs, pWal->zWalName, 0); + sqlite3EndBenignMalloc(); + } + WALTRACE(("WAL%p: closed\n", pWal)); + sqlite3_free((void *)pWal->apWiData); + sqlite3_free(pWal); + } + return rc; +} + +/* +** Try to read the wal-index header. Return 0 on success and 1 if +** there is a problem. +** +** The wal-index is in shared memory. Another thread or process might +** be writing the header at the same time this procedure is trying to +** read it, which might result in inconsistency. A dirty read is detected +** by verifying that both copies of the header are the same and also by +** a checksum on the header. +** +** If and only if the read is consistent and the header is different from +** pWal->hdr, then pWal->hdr is updated to the content of the new header +** and *pChanged is set to 1. +** +** If the checksum cannot be verified return non-zero. If the header +** is read successfully and the checksum verified, return zero. +*/ +static SQLITE_NO_TSAN int walIndexTryHdr(Wal *pWal, int *pChanged){ + u32 aCksum[2]; /* Checksum on the header content */ + WalIndexHdr h1, h2; /* Two copies of the header content */ + WalIndexHdr volatile *aHdr; /* Header in shared memory */ + + /* The first page of the wal-index must be mapped at this point. */ + assert( pWal->nWiData>0 && pWal->apWiData[0] ); + + /* Read the header. This might happen concurrently with a write to the + ** same area of shared memory on a different CPU in a SMP, + ** meaning it is possible that an inconsistent snapshot is read + ** from the file. If this happens, return non-zero. + ** + ** tag-20200519-1: + ** There are two copies of the header at the beginning of the wal-index. + ** When reading, read [0] first then [1]. Writes are in the reverse order. + ** Memory barriers are used to prevent the compiler or the hardware from + ** reordering the reads and writes. TSAN and similar tools can sometimes + ** give false-positive warnings about these accesses because the tools do not + ** account for the double-read and the memory barrier. The use of mutexes + ** here would be problematic as the memory being accessed is potentially + ** shared among multiple processes and not all mutex implementations work + ** reliably in that environment. + */ + aHdr = walIndexHdr(pWal); + memcpy(&h1, (void *)&aHdr[0], sizeof(h1)); /* Possible TSAN false-positive */ + walShmBarrier(pWal); + memcpy(&h2, (void *)&aHdr[1], sizeof(h2)); + + if( memcmp(&h1, &h2, sizeof(h1))!=0 ){ + return 1; /* Dirty read */ + } + if( h1.isInit==0 ){ + return 1; /* Malformed header - probably all zeros */ + } + walChecksumBytes(1, (u8*)&h1, sizeof(h1)-sizeof(h1.aCksum), 0, aCksum); + if( aCksum[0]!=h1.aCksum[0] || aCksum[1]!=h1.aCksum[1] ){ + return 1; /* Checksum does not match */ + } + + if( memcmp(&pWal->hdr, &h1, sizeof(WalIndexHdr)) ){ + *pChanged = 1; + memcpy(&pWal->hdr, &h1, sizeof(WalIndexHdr)); + pWal->szPage = (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16); + testcase( pWal->szPage<=32768 ); + testcase( pWal->szPage>=65536 ); + } + + /* The header was successfully read. Return zero. */ + return 0; +} + +/* +** This is the value that walTryBeginRead returns when it needs to +** be retried. +*/ +#define WAL_RETRY (-1) + +/* +** Read the wal-index header from the wal-index and into pWal->hdr. +** If the wal-header appears to be corrupt, try to reconstruct the +** wal-index from the WAL before returning. +** +** Set *pChanged to 1 if the wal-index header value in pWal->hdr is +** changed by this operation. If pWal->hdr is unchanged, set *pChanged +** to 0. +** +** If the wal-index header is successfully read, return SQLITE_OK. +** Otherwise an SQLite error code. +*/ +static int walIndexReadHdr(Wal *pWal, int *pChanged){ + int rc; /* Return code */ + int badHdr; /* True if a header read failed */ + volatile u32 *page0; /* Chunk of wal-index containing header */ + + /* Ensure that page 0 of the wal-index (the page that contains the + ** wal-index header) is mapped. Return early if an error occurs here. + */ + assert( pChanged ); + rc = walIndexPage(pWal, 0, &page0); + if( rc!=SQLITE_OK ){ + assert( rc!=SQLITE_READONLY ); /* READONLY changed to OK in walIndexPage */ + if( rc==SQLITE_READONLY_CANTINIT ){ + /* The SQLITE_READONLY_CANTINIT return means that the shared-memory + ** was openable but is not writable, and this thread is unable to + ** confirm that another write-capable connection has the shared-memory + ** open, and hence the content of the shared-memory is unreliable, + ** since the shared-memory might be inconsistent with the WAL file + ** and there is no writer on hand to fix it. */ + assert( page0==0 ); + assert( pWal->writeLock==0 ); + assert( pWal->readOnly & WAL_SHM_RDONLY ); + pWal->bShmUnreliable = 1; + pWal->exclusiveMode = WAL_HEAPMEMORY_MODE; + *pChanged = 1; + }else{ + return rc; /* Any other non-OK return is just an error */ + } + }else{ + /* page0 can be NULL if the SHM is zero bytes in size and pWal->writeLock + ** is zero, which prevents the SHM from growing */ + testcase( page0!=0 ); + } + assert( page0!=0 || pWal->writeLock==0 ); + + /* If the first page of the wal-index has been mapped, try to read the + ** wal-index header immediately, without holding any lock. This usually + ** works, but may fail if the wal-index header is corrupt or currently + ** being modified by another thread or process. + */ + badHdr = (page0 ? walIndexTryHdr(pWal, pChanged) : 1); + + /* If the first attempt failed, it might have been due to a race + ** with a writer. So get a WRITE lock and try again. + */ + if( badHdr ){ + if( pWal->bShmUnreliable==0 && (pWal->readOnly & WAL_SHM_RDONLY) ){ + if( SQLITE_OK==(rc = walLockShared(pWal, WAL_WRITE_LOCK)) ){ + walUnlockShared(pWal, WAL_WRITE_LOCK); + rc = SQLITE_READONLY_RECOVERY; + } + }else{ + int bWriteLock = pWal->writeLock; + if( bWriteLock + || SQLITE_OK==(rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1)) + ){ + /* If the write-lock was just obtained, set writeLock to 2 instead of + ** the usual 1. This causes walIndexPage() to behave as if the + ** write-lock were held (so that it allocates new pages as required), + ** and walHandleException() to unlock the write-lock if a SEH exception + ** is thrown. */ + if( !bWriteLock ) pWal->writeLock = 2; + if( SQLITE_OK==(rc = walIndexPage(pWal, 0, &page0)) ){ + badHdr = walIndexTryHdr(pWal, pChanged); + if( badHdr ){ + /* If the wal-index header is still malformed even while holding + ** a WRITE lock, it can only mean that the header is corrupted and + ** needs to be reconstructed. So run recovery to do exactly that. + ** Disable blocking locks first. */ + walDisableBlocking(pWal); + rc = walIndexRecover(pWal); + *pChanged = 1; + } + } + if( bWriteLock==0 ){ + pWal->writeLock = 0; + walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1); + } + } + } + } + + /* If the header is read successfully, check the version number to make + ** sure the wal-index was not constructed with some future format that + ** this version of SQLite cannot understand. + */ + if( badHdr==0 && pWal->hdr.iVersion!=WALINDEX_MAX_VERSION ){ + rc = SQLITE_CANTOPEN_BKPT; + } + if( pWal->bShmUnreliable ){ + if( rc!=SQLITE_OK ){ + walIndexClose(pWal, 0); + pWal->bShmUnreliable = 0; + assert( pWal->nWiData>0 && pWal->apWiData[0]==0 ); + /* walIndexRecover() might have returned SHORT_READ if a concurrent + ** writer truncated the WAL out from under it. If that happens, it + ** indicates that a writer has fixed the SHM file for us, so retry */ + if( rc==SQLITE_IOERR_SHORT_READ ) rc = WAL_RETRY; + } + pWal->exclusiveMode = WAL_NORMAL_MODE; + } + + return rc; +} + +/* +** Open a transaction in a connection where the shared-memory is read-only +** and where we cannot verify that there is a separate write-capable connection +** on hand to keep the shared-memory up-to-date with the WAL file. +** +** This can happen, for example, when the shared-memory is implemented by +** memory-mapping a *-shm file, where a prior writer has shut down and +** left the *-shm file on disk, and now the present connection is trying +** to use that database but lacks write permission on the *-shm file. +** Other scenarios are also possible, depending on the VFS implementation. +** +** Precondition: +** +** The *-wal file has been read and an appropriate wal-index has been +** constructed in pWal->apWiData[] using heap memory instead of shared +** memory. +** +** If this function returns SQLITE_OK, then the read transaction has +** been successfully opened. In this case output variable (*pChanged) +** is set to true before returning if the caller should discard the +** contents of the page cache before proceeding. Or, if it returns +** WAL_RETRY, then the heap memory wal-index has been discarded and +** the caller should retry opening the read transaction from the +** beginning (including attempting to map the *-shm file). +** +** If an error occurs, an SQLite error code is returned. +*/ +static int walBeginShmUnreliable(Wal *pWal, int *pChanged){ + i64 szWal; /* Size of wal file on disk in bytes */ + i64 iOffset; /* Current offset when reading wal file */ + u8 aBuf[WAL_HDRSIZE]; /* Buffer to load WAL header into */ + u8 *aFrame = 0; /* Malloc'd buffer to load entire frame */ + int szFrame; /* Number of bytes in buffer aFrame[] */ + u8 *aData; /* Pointer to data part of aFrame buffer */ + volatile void *pDummy; /* Dummy argument for xShmMap */ + int rc; /* Return code */ + u32 aSaveCksum[2]; /* Saved copy of pWal->hdr.aFrameCksum */ + + assert( pWal->bShmUnreliable ); + assert( pWal->readOnly & WAL_SHM_RDONLY ); + assert( pWal->nWiData>0 && pWal->apWiData[0] ); + + /* Take WAL_READ_LOCK(0). This has the effect of preventing any + ** writers from running a checkpoint, but does not stop them + ** from running recovery. */ + rc = walLockShared(pWal, WAL_READ_LOCK(0)); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_BUSY ) rc = WAL_RETRY; + goto begin_unreliable_shm_out; + } + pWal->readLock = 0; + + /* Check to see if a separate writer has attached to the shared-memory area, + ** thus making the shared-memory "reliable" again. Do this by invoking + ** the xShmMap() routine of the VFS and looking to see if the return + ** is SQLITE_READONLY instead of SQLITE_READONLY_CANTINIT. + ** + ** If the shared-memory is now "reliable" return WAL_RETRY, which will + ** cause the heap-memory WAL-index to be discarded and the actual + ** shared memory to be used in its place. + ** + ** This step is important because, even though this connection is holding + ** the WAL_READ_LOCK(0) which prevents a checkpoint, a writer might + ** have already checkpointed the WAL file and, while the current + ** is active, wrap the WAL and start overwriting frames that this + ** process wants to use. + ** + ** Once sqlite3OsShmMap() has been called for an sqlite3_file and has + ** returned any SQLITE_READONLY value, it must return only SQLITE_READONLY + ** or SQLITE_READONLY_CANTINIT or some error for all subsequent invocations, + ** even if some external agent does a "chmod" to make the shared-memory + ** writable by us, until sqlite3OsShmUnmap() has been called. + ** This is a requirement on the VFS implementation. + */ + rc = sqlite3OsShmMap(pWal->pDbFd, 0, WALINDEX_PGSZ, 0, &pDummy); + assert( rc!=SQLITE_OK ); /* SQLITE_OK not possible for read-only connection */ + if( rc!=SQLITE_READONLY_CANTINIT ){ + rc = (rc==SQLITE_READONLY ? WAL_RETRY : rc); + goto begin_unreliable_shm_out; + } + + /* We reach this point only if the real shared-memory is still unreliable. + ** Assume the in-memory WAL-index substitute is correct and load it + ** into pWal->hdr. + */ + memcpy(&pWal->hdr, (void*)walIndexHdr(pWal), sizeof(WalIndexHdr)); + + /* Make sure some writer hasn't come in and changed the WAL file out + ** from under us, then disconnected, while we were not looking. + */ + rc = sqlite3OsFileSize(pWal->pWalFd, &szWal); + if( rc!=SQLITE_OK ){ + goto begin_unreliable_shm_out; + } + if( szWalhdr.mxFrame==0 ? SQLITE_OK : WAL_RETRY); + goto begin_unreliable_shm_out; + } + + /* Check the salt keys at the start of the wal file still match. */ + rc = sqlite3OsRead(pWal->pWalFd, aBuf, WAL_HDRSIZE, 0); + if( rc!=SQLITE_OK ){ + goto begin_unreliable_shm_out; + } + if( memcmp(&pWal->hdr.aSalt, &aBuf[16], 8) ){ + /* Some writer has wrapped the WAL file while we were not looking. + ** Return WAL_RETRY which will cause the in-memory WAL-index to be + ** rebuilt. */ + rc = WAL_RETRY; + goto begin_unreliable_shm_out; + } + + /* Allocate a buffer to read frames into */ + assert( (pWal->szPage & (pWal->szPage-1))==0 ); + assert( pWal->szPage>=512 && pWal->szPage<=65536 ); + szFrame = pWal->szPage + WAL_FRAME_HDRSIZE; + aFrame = (u8 *)sqlite3_malloc64(szFrame); + if( aFrame==0 ){ + rc = SQLITE_NOMEM_BKPT; + goto begin_unreliable_shm_out; + } + aData = &aFrame[WAL_FRAME_HDRSIZE]; + + /* Check to see if a complete transaction has been appended to the + ** wal file since the heap-memory wal-index was created. If so, the + ** heap-memory wal-index is discarded and WAL_RETRY returned to + ** the caller. */ + aSaveCksum[0] = pWal->hdr.aFrameCksum[0]; + aSaveCksum[1] = pWal->hdr.aFrameCksum[1]; + for(iOffset=walFrameOffset(pWal->hdr.mxFrame+1, pWal->szPage); + iOffset+szFrame<=szWal; + iOffset+=szFrame + ){ + u32 pgno; /* Database page number for frame */ + u32 nTruncate; /* dbsize field from frame header */ + + /* Read and decode the next log frame. */ + rc = sqlite3OsRead(pWal->pWalFd, aFrame, szFrame, iOffset); + if( rc!=SQLITE_OK ) break; + if( !walDecodeFrame(pWal, &pgno, &nTruncate, aData, aFrame) ) break; + + /* If nTruncate is non-zero, then a complete transaction has been + ** appended to this wal file. Set rc to WAL_RETRY and break out of + ** the loop. */ + if( nTruncate ){ + rc = WAL_RETRY; + break; + } + } + pWal->hdr.aFrameCksum[0] = aSaveCksum[0]; + pWal->hdr.aFrameCksum[1] = aSaveCksum[1]; + + begin_unreliable_shm_out: + sqlite3_free(aFrame); + if( rc!=SQLITE_OK ){ + int i; + for(i=0; inWiData; i++){ + sqlite3_free((void*)pWal->apWiData[i]); + pWal->apWiData[i] = 0; + } + pWal->bShmUnreliable = 0; + sqlite3WalEndReadTransaction(pWal); + *pChanged = 1; + } + return rc; +} + +/* +** The final argument passed to walTryBeginRead() is of type (int*). The +** caller should invoke walTryBeginRead as follows: +** +** int cnt = 0; +** do { +** rc = walTryBeginRead(..., &cnt); +** }while( rc==WAL_RETRY ); +** +** The final value of "cnt" is of no use to the caller. It is used by +** the implementation of walTryBeginRead() as follows: +** +** + Each time walTryBeginRead() is called, it is incremented. Once +** it reaches WAL_RETRY_PROTOCOL_LIMIT - indicating that walTryBeginRead() +** has many times been invoked and failed with WAL_RETRY - walTryBeginRead() +** returns SQLITE_PROTOCOL. +** +** + If SQLITE_ENABLE_SETLK_TIMEOUT is defined and walTryBeginRead() failed +** because a blocking lock timed out (SQLITE_BUSY_TIMEOUT from the OS +** layer), the WAL_RETRY_BLOCKED_MASK bit is set in "cnt". In this case +** the next invocation of walTryBeginRead() may omit an expected call to +** sqlite3OsSleep(). There has already been a delay when the previous call +** waited on a lock. +*/ +#define WAL_RETRY_PROTOCOL_LIMIT 100 +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT +# define WAL_RETRY_BLOCKED_MASK 0x10000000 +#else +# define WAL_RETRY_BLOCKED_MASK 0 +#endif + +/* +** Attempt to start a read transaction. This might fail due to a race or +** other transient condition. When that happens, it returns WAL_RETRY to +** indicate to the caller that it is safe to retry immediately. +** +** On success return SQLITE_OK. On a permanent failure (such an +** I/O error or an SQLITE_BUSY because another process is running +** recovery) return a positive error code. +** +** The useWal parameter is true to force the use of the WAL and disable +** the case where the WAL is bypassed because it has been completely +** checkpointed. If useWal==0 then this routine calls walIndexReadHdr() +** to make a copy of the wal-index header into pWal->hdr. If the +** wal-index header has changed, *pChanged is set to 1 (as an indication +** to the caller that the local page cache is obsolete and needs to be +** flushed.) When useWal==1, the wal-index header is assumed to already +** be loaded and the pChanged parameter is unused. +** +** The caller must set the cnt parameter to the number of prior calls to +** this routine during the current read attempt that returned WAL_RETRY. +** This routine will start taking more aggressive measures to clear the +** race conditions after multiple WAL_RETRY returns, and after an excessive +** number of errors will ultimately return SQLITE_PROTOCOL. The +** SQLITE_PROTOCOL return indicates that some other process has gone rogue +** and is not honoring the locking protocol. There is a vanishingly small +** chance that SQLITE_PROTOCOL could be returned because of a run of really +** bad luck when there is lots of contention for the wal-index, but that +** possibility is so small that it can be safely neglected, we believe. +** +** On success, this routine obtains a read lock on +** WAL_READ_LOCK(pWal->readLock). The pWal->readLock integer is +** in the range 0 <= pWal->readLock < WAL_NREADER. If pWal->readLock==(-1) +** that means the Wal does not hold any read lock. The reader must not +** access any database page that is modified by a WAL frame up to and +** including frame number aReadMark[pWal->readLock]. The reader will +** use WAL frames up to and including pWal->hdr.mxFrame if pWal->readLock>0 +** Or if pWal->readLock==0, then the reader will ignore the WAL +** completely and get all content directly from the database file. +** If the useWal parameter is 1 then the WAL will never be ignored and +** this routine will always set pWal->readLock>0 on success. +** When the read transaction is completed, the caller must release the +** lock on WAL_READ_LOCK(pWal->readLock) and set pWal->readLock to -1. +** +** This routine uses the nBackfill and aReadMark[] fields of the header +** to select a particular WAL_READ_LOCK() that strives to let the +** checkpoint process do as much work as possible. This routine might +** update values of the aReadMark[] array in the header, but if it does +** so it takes care to hold an exclusive lock on the corresponding +** WAL_READ_LOCK() while changing values. +*/ +static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int *pCnt){ + volatile WalCkptInfo *pInfo; /* Checkpoint information in wal-index */ + int rc = SQLITE_OK; /* Return code */ +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + int nBlockTmout = 0; +#endif + + assert( pWal->readLock<0 ); /* Not currently locked */ + + /* useWal may only be set for read/write connections */ + assert( (pWal->readOnly & WAL_SHM_RDONLY)==0 || useWal==0 ); + + /* Take steps to avoid spinning forever if there is a protocol error. + ** + ** Circumstances that cause a RETRY should only last for the briefest + ** instances of time. No I/O or other system calls are done while the + ** locks are held, so the locks should not be held for very long. But + ** if we are unlucky, another process that is holding a lock might get + ** paged out or take a page-fault that is time-consuming to resolve, + ** during the few nanoseconds that it is holding the lock. In that case, + ** it might take longer than normal for the lock to free. + ** + ** After 5 RETRYs, we begin calling sqlite3OsSleep(). The first few + ** calls to sqlite3OsSleep() have a delay of 1 microsecond. Really this + ** is more of a scheduler yield than an actual delay. But on the 10th + ** an subsequent retries, the delays start becoming longer and longer, + ** so that on the 100th (and last) RETRY we delay for 323 milliseconds. + ** The total delay time before giving up is less than 10 seconds. + */ + (*pCnt)++; + if( *pCnt>5 ){ + int nDelay = 1; /* Pause time in microseconds */ + int cnt = (*pCnt & ~WAL_RETRY_BLOCKED_MASK); + if( cnt>WAL_RETRY_PROTOCOL_LIMIT ){ + VVA_ONLY( pWal->lockError = 1; ) + return SQLITE_PROTOCOL; + } + if( *pCnt>=10 ) nDelay = (cnt-9)*(cnt-9)*39; +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + /* In SQLITE_ENABLE_SETLK_TIMEOUT builds, configure the file-descriptor + ** to block for locks for approximately nDelay us. This affects three + ** locks: (a) the shared lock taken on the DMS slot in os_unix.c (if + ** using os_unix.c), (b) the WRITER lock taken in walIndexReadHdr() if the + ** first attempted read fails, and (c) the shared lock taken on the + ** read-mark. + ** + ** If the previous call failed due to an SQLITE_BUSY_TIMEOUT error, + ** then sleep for the minimum of 1us. The previous call already provided + ** an extra delay while it was blocking on the lock. + */ + nBlockTmout = (nDelay+998) / 1000; + if( !useWal && walEnableBlockingMs(pWal, nBlockTmout) ){ + if( *pCnt & WAL_RETRY_BLOCKED_MASK ) nDelay = 1; + } +#endif + sqlite3OsSleep(pWal->pVfs, nDelay); + *pCnt &= ~WAL_RETRY_BLOCKED_MASK; + } + + if( !useWal ){ + assert( rc==SQLITE_OK ); + if( pWal->bShmUnreliable==0 ){ + rc = walIndexReadHdr(pWal, pChanged); + } +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + if( rc==SQLITE_BUSY_TIMEOUT ){ + rc = SQLITE_BUSY; + *pCnt |= WAL_RETRY_BLOCKED_MASK; + } +#endif + if( rc==SQLITE_BUSY ){ + /* If there is not a recovery running in another thread or process + ** then convert BUSY errors to WAL_RETRY. If recovery is known to + ** be running, convert BUSY to BUSY_RECOVERY. There is a race here + ** which might cause WAL_RETRY to be returned even if BUSY_RECOVERY + ** would be technically correct. But the race is benign since with + ** WAL_RETRY this routine will be called again and will probably be + ** right on the second iteration. + */ + (void)walEnableBlocking(pWal); + if( pWal->apWiData[0]==0 ){ + /* This branch is taken when the xShmMap() method returns SQLITE_BUSY. + ** We assume this is a transient condition, so return WAL_RETRY. The + ** xShmMap() implementation used by the default unix and win32 VFS + ** modules may return SQLITE_BUSY due to a race condition in the + ** code that determines whether or not the shared-memory region + ** must be zeroed before the requested page is returned. + */ + rc = WAL_RETRY; + }else if( SQLITE_OK==(rc = walLockShared(pWal, WAL_RECOVER_LOCK)) ){ + walUnlockShared(pWal, WAL_RECOVER_LOCK); + rc = WAL_RETRY; + }else if( rc==SQLITE_BUSY ){ + rc = SQLITE_BUSY_RECOVERY; + } + } + walDisableBlocking(pWal); + if( rc!=SQLITE_OK ){ + return rc; + } + else if( pWal->bShmUnreliable ){ + return walBeginShmUnreliable(pWal, pChanged); + } + } + + assert( pWal->nWiData>0 ); + assert( pWal->apWiData[0]!=0 ); + pInfo = walCkptInfo(pWal); + SEH_INJECT_FAULT; + { + u32 mxReadMark; /* Largest aReadMark[] value */ + int mxI; /* Index of largest aReadMark[] value */ + int i; /* Loop counter */ + u32 mxFrame; /* Wal frame to lock to */ + if( !useWal && AtomicLoad(&pInfo->nBackfill)==pWal->hdr.mxFrame +#ifdef SQLITE_ENABLE_SNAPSHOT + && ((pWal->bGetSnapshot==0 && pWal->pSnapshot==0) || pWal->hdr.mxFrame==0) +#endif + ){ + /* The WAL has been completely backfilled (or it is empty). + ** and can be safely ignored. + */ + rc = walLockShared(pWal, WAL_READ_LOCK(0)); + walShmBarrier(pWal); + if( rc==SQLITE_OK ){ + if( memcmp((void *)walIndexHdr(pWal), &pWal->hdr,sizeof(WalIndexHdr)) ){ + /* It is not safe to allow the reader to continue here if frames + ** may have been appended to the log before READ_LOCK(0) was obtained. + ** When holding READ_LOCK(0), the reader ignores the entire log file, + ** which implies that the database file contains a trustworthy + ** snapshot. Since holding READ_LOCK(0) prevents a checkpoint from + ** happening, this is usually correct. + ** + ** However, if frames have been appended to the log (or if the log + ** is wrapped and written for that matter) before the READ_LOCK(0) + ** is obtained, that is not necessarily true. A checkpointer may + ** have started to backfill the appended frames but crashed before + ** it finished. Leaving a corrupt image in the database file. + */ + walUnlockShared(pWal, WAL_READ_LOCK(0)); + return WAL_RETRY; + } + pWal->readLock = 0; + return SQLITE_OK; + }else if( rc!=SQLITE_BUSY ){ + return rc; + } + } + + /* If we get this far, it means that the reader will want to use + ** the WAL to get at content from recent commits. The job now is + ** to select one of the aReadMark[] entries that is closest to + ** but not exceeding pWal->hdr.mxFrame and lock that entry. + */ + mxReadMark = 0; + mxI = 0; + mxFrame = pWal->hdr.mxFrame; +#ifdef SQLITE_ENABLE_SNAPSHOT + if( pWal->pSnapshot && pWal->pSnapshot->mxFramepSnapshot->mxFrame; + } +#endif + for(i=1; iaReadMark+i); SEH_INJECT_FAULT; + if( mxReadMark<=thisMark && thisMark<=mxFrame ){ + assert( thisMark!=READMARK_NOT_USED ); + mxReadMark = thisMark; + mxI = i; + } + } + if( (pWal->readOnly & WAL_SHM_RDONLY)==0 + && (mxReadMarkaReadMark+i,mxFrame); + mxReadMark = mxFrame; + mxI = i; + walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1); + break; + }else if( rc!=SQLITE_BUSY ){ + return rc; + } + } + } + if( mxI==0 ){ + assert( rc==SQLITE_BUSY || (pWal->readOnly & WAL_SHM_RDONLY)!=0 ); + return rc==SQLITE_BUSY ? WAL_RETRY : SQLITE_READONLY_CANTINIT; + } + + (void)walEnableBlockingMs(pWal, nBlockTmout); + rc = walLockShared(pWal, WAL_READ_LOCK(mxI)); + walDisableBlocking(pWal); + if( rc ){ +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + if( rc==SQLITE_BUSY_TIMEOUT ){ + *pCnt |= WAL_RETRY_BLOCKED_MASK; + } +#else + assert( rc!=SQLITE_BUSY_TIMEOUT ); +#endif + assert((rc&0xFF)!=SQLITE_BUSY||rc==SQLITE_BUSY||rc==SQLITE_BUSY_TIMEOUT); + return (rc&0xFF)==SQLITE_BUSY ? WAL_RETRY : rc; + } + /* Now that the read-lock has been obtained, check that neither the + ** value in the aReadMark[] array or the contents of the wal-index + ** header have changed. + ** + ** It is necessary to check that the wal-index header did not change + ** between the time it was read and when the shared-lock was obtained + ** on WAL_READ_LOCK(mxI) was obtained to account for the possibility + ** that the log file may have been wrapped by a writer, or that frames + ** that occur later in the log than pWal->hdr.mxFrame may have been + ** copied into the database by a checkpointer. If either of these things + ** happened, then reading the database with the current value of + ** pWal->hdr.mxFrame risks reading a corrupted snapshot. So, retry + ** instead. + ** + ** Before checking that the live wal-index header has not changed + ** since it was read, set Wal.minFrame to the first frame in the wal + ** file that has not yet been checkpointed. This client will not need + ** to read any frames earlier than minFrame from the wal file - they + ** can be safely read directly from the database file. + ** + ** Because a ShmBarrier() call is made between taking the copy of + ** nBackfill and checking that the wal-header in shared-memory still + ** matches the one cached in pWal->hdr, it is guaranteed that the + ** checkpointer that set nBackfill was not working with a wal-index + ** header newer than that cached in pWal->hdr. If it were, that could + ** cause a problem. The checkpointer could omit to checkpoint + ** a version of page X that lies before pWal->minFrame (call that version + ** A) on the basis that there is a newer version (version B) of the same + ** page later in the wal file. But if version B happens to like past + ** frame pWal->hdr.mxFrame - then the client would incorrectly assume + ** that it can read version A from the database file. However, since + ** we can guarantee that the checkpointer that set nBackfill could not + ** see any pages past pWal->hdr.mxFrame, this problem does not come up. + */ + pWal->minFrame = AtomicLoad(&pInfo->nBackfill)+1; SEH_INJECT_FAULT; + walShmBarrier(pWal); + if( AtomicLoad(pInfo->aReadMark+mxI)!=mxReadMark + || memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr)) + ){ + walUnlockShared(pWal, WAL_READ_LOCK(mxI)); + return WAL_RETRY; + }else{ + assert( mxReadMark<=pWal->hdr.mxFrame ); + pWal->readLock = (i16)mxI; + } + } + return rc; +} + +#ifdef SQLITE_ENABLE_SNAPSHOT +/* +** This function does the work of sqlite3WalSnapshotRecover(). +*/ +static int walSnapshotRecover( + Wal *pWal, /* WAL handle */ + void *pBuf1, /* Temp buffer pWal->szPage bytes in size */ + void *pBuf2 /* Temp buffer pWal->szPage bytes in size */ +){ + int szPage = (int)pWal->szPage; + int rc; + i64 szDb; /* Size of db file in bytes */ + + rc = sqlite3OsFileSize(pWal->pDbFd, &szDb); + if( rc==SQLITE_OK ){ + volatile WalCkptInfo *pInfo = walCkptInfo(pWal); + u32 i = pInfo->nBackfillAttempted; + for(i=pInfo->nBackfillAttempted; i>AtomicLoad(&pInfo->nBackfill); i--){ + WalHashLoc sLoc; /* Hash table location */ + u32 pgno; /* Page number in db file */ + i64 iDbOff; /* Offset of db file entry */ + i64 iWalOff; /* Offset of wal file entry */ + + rc = walHashGet(pWal, walFramePage(i), &sLoc); + if( rc!=SQLITE_OK ) break; + assert( i - sLoc.iZero - 1 >=0 ); + pgno = sLoc.aPgno[i-sLoc.iZero-1]; + iDbOff = (i64)(pgno-1) * szPage; + + if( iDbOff+szPage<=szDb ){ + iWalOff = walFrameOffset(i, szPage) + WAL_FRAME_HDRSIZE; + rc = sqlite3OsRead(pWal->pWalFd, pBuf1, szPage, iWalOff); + + if( rc==SQLITE_OK ){ + rc = sqlite3OsRead(pWal->pDbFd, pBuf2, szPage, iDbOff); + } + + if( rc!=SQLITE_OK || 0==memcmp(pBuf1, pBuf2, szPage) ){ + break; + } + } + + pInfo->nBackfillAttempted = i-1; + } + } + + return rc; +} + +/* +** Attempt to reduce the value of the WalCkptInfo.nBackfillAttempted +** variable so that older snapshots can be accessed. To do this, loop +** through all wal frames from nBackfillAttempted to (nBackfill+1), +** comparing their content to the corresponding page with the database +** file, if any. Set nBackfillAttempted to the frame number of the +** first frame for which the wal file content matches the db file. +** +** This is only really safe if the file-system is such that any page +** writes made by earlier checkpointers were atomic operations, which +** is not always true. It is also possible that nBackfillAttempted +** may be left set to a value larger than expected, if a wal frame +** contains content that duplicate of an earlier version of the same +** page. +** +** SQLITE_OK is returned if successful, or an SQLite error code if an +** error occurs. It is not an error if nBackfillAttempted cannot be +** decreased at all. +*/ +SQLITE_PRIVATE int sqlite3WalSnapshotRecover(Wal *pWal){ + int rc; + + assert( pWal->readLock>=0 ); + rc = walLockExclusive(pWal, WAL_CKPT_LOCK, 1); + if( rc==SQLITE_OK ){ + void *pBuf1 = sqlite3_malloc(pWal->szPage); + void *pBuf2 = sqlite3_malloc(pWal->szPage); + if( pBuf1==0 || pBuf2==0 ){ + rc = SQLITE_NOMEM; + }else{ + pWal->ckptLock = 1; + SEH_TRY { + rc = walSnapshotRecover(pWal, pBuf1, pBuf2); + } + SEH_EXCEPT( rc = SQLITE_IOERR_IN_PAGE; ) + pWal->ckptLock = 0; + } + + sqlite3_free(pBuf1); + sqlite3_free(pBuf2); + walUnlockExclusive(pWal, WAL_CKPT_LOCK, 1); + } + + return rc; +} +#endif /* SQLITE_ENABLE_SNAPSHOT */ + +/* +** This function does the work of sqlite3WalBeginReadTransaction() (see +** below). That function simply calls this one inside an SEH_TRY{...} block. +*/ +static int walBeginReadTransaction(Wal *pWal, int *pChanged){ + int rc; /* Return code */ + int cnt = 0; /* Number of TryBeginRead attempts */ +#ifdef SQLITE_ENABLE_SNAPSHOT + int ckptLock = 0; + int bChanged = 0; + WalIndexHdr *pSnapshot = pWal->pSnapshot; +#endif + + assert( pWal->ckptLock==0 ); + assert( pWal->nSehTry>0 ); + +#ifdef SQLITE_ENABLE_SNAPSHOT + if( pSnapshot ){ + if( memcmp(pSnapshot, &pWal->hdr, sizeof(WalIndexHdr))!=0 ){ + bChanged = 1; + } + + /* It is possible that there is a checkpointer thread running + ** concurrent with this code. If this is the case, it may be that the + ** checkpointer has already determined that it will checkpoint + ** snapshot X, where X is later in the wal file than pSnapshot, but + ** has not yet set the pInfo->nBackfillAttempted variable to indicate + ** its intent. To avoid the race condition this leads to, ensure that + ** there is no checkpointer process by taking a shared CKPT lock + ** before checking pInfo->nBackfillAttempted. */ + (void)walEnableBlocking(pWal); + rc = walLockShared(pWal, WAL_CKPT_LOCK); + walDisableBlocking(pWal); + + if( rc!=SQLITE_OK ){ + return rc; + } + ckptLock = 1; + } +#endif + + do{ + rc = walTryBeginRead(pWal, pChanged, 0, &cnt); + }while( rc==WAL_RETRY ); + testcase( (rc&0xff)==SQLITE_BUSY ); + testcase( (rc&0xff)==SQLITE_IOERR ); + testcase( rc==SQLITE_PROTOCOL ); + testcase( rc==SQLITE_OK ); + +#ifdef SQLITE_ENABLE_SNAPSHOT + if( rc==SQLITE_OK ){ + if( pSnapshot && memcmp(pSnapshot, &pWal->hdr, sizeof(WalIndexHdr))!=0 ){ + /* At this point the client has a lock on an aReadMark[] slot holding + ** a value equal to or smaller than pSnapshot->mxFrame, but pWal->hdr + ** is populated with the wal-index header corresponding to the head + ** of the wal file. Verify that pSnapshot is still valid before + ** continuing. Reasons why pSnapshot might no longer be valid: + ** + ** (1) The WAL file has been reset since the snapshot was taken. + ** In this case, the salt will have changed. + ** + ** (2) A checkpoint as been attempted that wrote frames past + ** pSnapshot->mxFrame into the database file. Note that the + ** checkpoint need not have completed for this to cause problems. + */ + volatile WalCkptInfo *pInfo = walCkptInfo(pWal); + + assert( pWal->readLock>0 || pWal->hdr.mxFrame==0 ); + assert( pInfo->aReadMark[pWal->readLock]<=pSnapshot->mxFrame ); + + /* Check that the wal file has not been wrapped. Assuming that it has + ** not, also check that no checkpointer has attempted to checkpoint any + ** frames beyond pSnapshot->mxFrame. If either of these conditions are + ** true, return SQLITE_ERROR_SNAPSHOT. Otherwise, overwrite pWal->hdr + ** with *pSnapshot and set *pChanged as appropriate for opening the + ** snapshot. */ + if( !memcmp(pSnapshot->aSalt, pWal->hdr.aSalt, sizeof(pWal->hdr.aSalt)) + && pSnapshot->mxFrame>=pInfo->nBackfillAttempted + ){ + assert( pWal->readLock>0 ); + memcpy(&pWal->hdr, pSnapshot, sizeof(WalIndexHdr)); + *pChanged = bChanged; + }else{ + rc = SQLITE_ERROR_SNAPSHOT; + } + + /* A client using a non-current snapshot may not ignore any frames + ** from the start of the wal file. This is because, for a system + ** where (minFrame < iSnapshot < maxFrame), a checkpointer may + ** have omitted to checkpoint a frame earlier than minFrame in + ** the file because there exists a frame after iSnapshot that + ** is the same database page. */ + pWal->minFrame = 1; + + if( rc!=SQLITE_OK ){ + sqlite3WalEndReadTransaction(pWal); + } + } + } + + /* Release the shared CKPT lock obtained above. */ + if( ckptLock ){ + assert( pSnapshot ); + walUnlockShared(pWal, WAL_CKPT_LOCK); + } +#endif + return rc; +} + +/* +** Begin a read transaction on the database. +** +** This routine used to be called sqlite3OpenSnapshot() and with good reason: +** it takes a snapshot of the state of the WAL and wal-index for the current +** instant in time. The current thread will continue to use this snapshot. +** Other threads might append new content to the WAL and wal-index but +** that extra content is ignored by the current thread. +** +** If the database contents have changes since the previous read +** transaction, then *pChanged is set to 1 before returning. The +** Pager layer will use this to know that its cache is stale and +** needs to be flushed. +*/ +SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *pChanged){ + int rc; + SEH_TRY { + rc = walBeginReadTransaction(pWal, pChanged); + } + SEH_EXCEPT( rc = walHandleException(pWal); ) + return rc; +} + +/* +** Finish with a read transaction. All this does is release the +** read-lock. +*/ +SQLITE_PRIVATE void sqlite3WalEndReadTransaction(Wal *pWal){ +#ifndef SQLITE_ENABLE_SETLK_TIMEOUT + assert( pWal->writeLock==0 || pWal->readLock<0 ); +#endif + if( pWal->readLock>=0 ){ + (void)sqlite3WalEndWriteTransaction(pWal); + walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock)); + pWal->readLock = -1; + } +} + +/* +** Search the wal file for page pgno. If found, set *piRead to the frame that +** contains the page. Otherwise, if pgno is not in the wal file, set *piRead +** to zero. +** +** Return SQLITE_OK if successful, or an error code if an error occurs. If an +** error does occur, the final value of *piRead is undefined. +*/ +static int walFindFrame( + Wal *pWal, /* WAL handle */ + Pgno pgno, /* Database page number to read data for */ + u32 *piRead /* OUT: Frame number (or zero) */ +){ + u32 iRead = 0; /* If !=0, WAL frame to return data from */ + u32 iLast = pWal->hdr.mxFrame; /* Last page in WAL for this reader */ + int iHash; /* Used to loop through N hash tables */ + int iMinHash; + + /* This routine is only be called from within a read transaction. */ + assert( pWal->readLock>=0 || pWal->lockError ); + + /* If the "last page" field of the wal-index header snapshot is 0, then + ** no data will be read from the wal under any circumstances. Return early + ** in this case as an optimization. Likewise, if pWal->readLock==0, + ** then the WAL is ignored by the reader so return early, as if the + ** WAL were empty. + */ + if( iLast==0 || (pWal->readLock==0 && pWal->bShmUnreliable==0) ){ + *piRead = 0; + return SQLITE_OK; + } + + /* Search the hash table or tables for an entry matching page number + ** pgno. Each iteration of the following for() loop searches one + ** hash table (each hash table indexes up to HASHTABLE_NPAGE frames). + ** + ** This code might run concurrently to the code in walIndexAppend() + ** that adds entries to the wal-index (and possibly to this hash + ** table). This means the value just read from the hash + ** slot (aHash[iKey]) may have been added before or after the + ** current read transaction was opened. Values added after the + ** read transaction was opened may have been written incorrectly - + ** i.e. these slots may contain garbage data. However, we assume + ** that any slots written before the current read transaction was + ** opened remain unmodified. + ** + ** For the reasons above, the if(...) condition featured in the inner + ** loop of the following block is more stringent that would be required + ** if we had exclusive access to the hash-table: + ** + ** (aPgno[iFrame]==pgno): + ** This condition filters out normal hash-table collisions. + ** + ** (iFrame<=iLast): + ** This condition filters out entries that were added to the hash + ** table after the current read-transaction had started. + */ + iMinHash = walFramePage(pWal->minFrame); + for(iHash=walFramePage(iLast); iHash>=iMinHash; iHash--){ + WalHashLoc sLoc; /* Hash table location */ + int iKey; /* Hash slot index */ + int nCollide; /* Number of hash collisions remaining */ + int rc; /* Error code */ + u32 iH; + + rc = walHashGet(pWal, iHash, &sLoc); + if( rc!=SQLITE_OK ){ + return rc; + } + nCollide = HASHTABLE_NSLOT; + iKey = walHash(pgno); + SEH_INJECT_FAULT; + while( (iH = AtomicLoad(&sLoc.aHash[iKey]))!=0 ){ + u32 iFrame = iH + sLoc.iZero; + if( iFrame<=iLast && iFrame>=pWal->minFrame && sLoc.aPgno[iH-1]==pgno ){ + assert( iFrame>iRead || CORRUPT_DB ); + iRead = iFrame; + } + if( (nCollide--)==0 ){ + *piRead = 0; + return SQLITE_CORRUPT_BKPT; + } + iKey = walNextHash(iKey); + } + if( iRead ) break; + } + +#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT + /* If expensive assert() statements are available, do a linear search + ** of the wal-index file content. Make sure the results agree with the + ** result obtained using the hash indexes above. */ + { + u32 iRead2 = 0; + u32 iTest; + assert( pWal->bShmUnreliable || pWal->minFrame>0 ); + for(iTest=iLast; iTest>=pWal->minFrame && iTest>0; iTest--){ + if( walFramePgno(pWal, iTest)==pgno ){ + iRead2 = iTest; + break; + } + } + assert( iRead==iRead2 ); + } +#endif + + *piRead = iRead; + return SQLITE_OK; +} + +/* +** Search the wal file for page pgno. If found, set *piRead to the frame that +** contains the page. Otherwise, if pgno is not in the wal file, set *piRead +** to zero. +** +** Return SQLITE_OK if successful, or an error code if an error occurs. If an +** error does occur, the final value of *piRead is undefined. +** +** The difference between this function and walFindFrame() is that this +** function wraps walFindFrame() in an SEH_TRY{...} block. +*/ +SQLITE_PRIVATE int sqlite3WalFindFrame( + Wal *pWal, /* WAL handle */ + Pgno pgno, /* Database page number to read data for */ + u32 *piRead /* OUT: Frame number (or zero) */ +){ + int rc; + SEH_TRY { + rc = walFindFrame(pWal, pgno, piRead); + } + SEH_EXCEPT( rc = SQLITE_IOERR_IN_PAGE; ) + return rc; +} + +/* +** Read the contents of frame iRead from the wal file into buffer pOut +** (which is nOut bytes in size). Return SQLITE_OK if successful, or an +** error code otherwise. +*/ +SQLITE_PRIVATE int sqlite3WalReadFrame( + Wal *pWal, /* WAL handle */ + u32 iRead, /* Frame to read */ + int nOut, /* Size of buffer pOut in bytes */ + u8 *pOut /* Buffer to write page data to */ +){ + int sz; + i64 iOffset; + sz = pWal->hdr.szPage; + sz = (sz&0xfe00) + ((sz&0x0001)<<16); + testcase( sz<=32768 ); + testcase( sz>=65536 ); + iOffset = walFrameOffset(iRead, sz) + WAL_FRAME_HDRSIZE; + /* testcase( IS_BIG_INT(iOffset) ); // requires a 4GiB WAL */ + return sqlite3OsRead(pWal->pWalFd, pOut, (nOut>sz ? sz : nOut), iOffset); +} + +/* +** Return the size of the database in pages (or zero, if unknown). +*/ +SQLITE_PRIVATE Pgno sqlite3WalDbsize(Wal *pWal){ + if( pWal && ALWAYS(pWal->readLock>=0) ){ + return pWal->hdr.nPage; + } + return 0; +} + + +/* +** This function starts a write transaction on the WAL. +** +** A read transaction must have already been started by a prior call +** to sqlite3WalBeginReadTransaction(). +** +** If another thread or process has written into the database since +** the read transaction was started, then it is not possible for this +** thread to write as doing so would cause a fork. So this routine +** returns SQLITE_BUSY in that case and no write transaction is started. +** +** There can only be a single writer active at a time. +*/ +SQLITE_PRIVATE int sqlite3WalBeginWriteTransaction(Wal *pWal){ + int rc; + +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + /* If the write-lock is already held, then it was obtained before the + ** read-transaction was even opened, making this call a no-op. + ** Return early. */ + if( pWal->writeLock ){ + assert( !memcmp(&pWal->hdr,(void*)pWal->apWiData[0],sizeof(WalIndexHdr)) ); + return SQLITE_OK; + } +#endif + + /* Cannot start a write transaction without first holding a read + ** transaction. */ + assert( pWal->readLock>=0 ); + assert( pWal->writeLock==0 && pWal->iReCksum==0 ); + + if( pWal->readOnly ){ + return SQLITE_READONLY; + } + + /* Only one writer allowed at a time. Get the write lock. Return + ** SQLITE_BUSY if unable. + */ + rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1); + if( rc ){ + return rc; + } + pWal->writeLock = 1; + + /* If another connection has written to the database file since the + ** time the read transaction on this connection was started, then + ** the write is disallowed. + */ + SEH_TRY { + if( memcmp(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr))!=0 ){ + rc = SQLITE_BUSY_SNAPSHOT; + } + } + SEH_EXCEPT( rc = SQLITE_IOERR_IN_PAGE; ) + + if( rc!=SQLITE_OK ){ + walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1); + pWal->writeLock = 0; + } + return rc; +} + +/* +** End a write transaction. The commit has already been done. This +** routine merely releases the lock. +*/ +SQLITE_PRIVATE int sqlite3WalEndWriteTransaction(Wal *pWal){ + if( pWal->writeLock ){ + walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1); + pWal->writeLock = 0; + pWal->iReCksum = 0; + pWal->truncateOnCommit = 0; + } + return SQLITE_OK; +} + +/* +** If any data has been written (but not committed) to the log file, this +** function moves the write-pointer back to the start of the transaction. +** +** Additionally, the callback function is invoked for each frame written +** to the WAL since the start of the transaction. If the callback returns +** other than SQLITE_OK, it is not invoked again and the error code is +** returned to the caller. +** +** Otherwise, if the callback function does not return an error, this +** function returns SQLITE_OK. +*/ +SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *pUndoCtx){ + int rc = SQLITE_OK; + if( ALWAYS(pWal->writeLock) ){ + Pgno iMax = pWal->hdr.mxFrame; + Pgno iFrame; + + SEH_TRY { + /* Restore the clients cache of the wal-index header to the state it + ** was in before the client began writing to the database. + */ + memcpy(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr)); + + for(iFrame=pWal->hdr.mxFrame+1; + ALWAYS(rc==SQLITE_OK) && iFrame<=iMax; + iFrame++ + ){ + /* This call cannot fail. Unless the page for which the page number + ** is passed as the second argument is (a) in the cache and + ** (b) has an outstanding reference, then xUndo is either a no-op + ** (if (a) is false) or simply expels the page from the cache (if (b) + ** is false). + ** + ** If the upper layer is doing a rollback, it is guaranteed that there + ** are no outstanding references to any page other than page 1. And + ** page 1 is never written to the log until the transaction is + ** committed. As a result, the call to xUndo may not fail. + */ + assert( walFramePgno(pWal, iFrame)!=1 ); + rc = xUndo(pUndoCtx, walFramePgno(pWal, iFrame)); + } + if( iMax!=pWal->hdr.mxFrame ) walCleanupHash(pWal); + } + SEH_EXCEPT( rc = SQLITE_IOERR_IN_PAGE; ) + pWal->iReCksum = 0; + } + return rc; +} + +/* +** Argument aWalData must point to an array of WAL_SAVEPOINT_NDATA u32 +** values. This function populates the array with values required to +** "rollback" the write position of the WAL handle back to the current +** point in the event of a savepoint rollback (via WalSavepointUndo()). +*/ +SQLITE_PRIVATE void sqlite3WalSavepoint(Wal *pWal, u32 *aWalData){ + assert( pWal->writeLock ); + aWalData[0] = pWal->hdr.mxFrame; + aWalData[1] = pWal->hdr.aFrameCksum[0]; + aWalData[2] = pWal->hdr.aFrameCksum[1]; + aWalData[3] = pWal->nCkpt; +} + +/* +** Move the write position of the WAL back to the point identified by +** the values in the aWalData[] array. aWalData must point to an array +** of WAL_SAVEPOINT_NDATA u32 values that has been previously populated +** by a call to WalSavepoint(). +*/ +SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData){ + int rc = SQLITE_OK; + + assert( pWal->writeLock ); + assert( aWalData[3]!=pWal->nCkpt || aWalData[0]<=pWal->hdr.mxFrame ); + + if( aWalData[3]!=pWal->nCkpt ){ + /* This savepoint was opened immediately after the write-transaction + ** was started. Right after that, the writer decided to wrap around + ** to the start of the log. Update the savepoint values to match. + */ + aWalData[0] = 0; + aWalData[3] = pWal->nCkpt; + } + + if( aWalData[0]hdr.mxFrame ){ + pWal->hdr.mxFrame = aWalData[0]; + pWal->hdr.aFrameCksum[0] = aWalData[1]; + pWal->hdr.aFrameCksum[1] = aWalData[2]; + SEH_TRY { + walCleanupHash(pWal); + } + SEH_EXCEPT( rc = SQLITE_IOERR_IN_PAGE; ) + if( pWal->iReCksum>pWal->hdr.mxFrame ){ + pWal->iReCksum = 0; + } + } + + return rc; +} + +/* +** This function is called just before writing a set of frames to the log +** file (see sqlite3WalFrames()). It checks to see if, instead of appending +** to the current log file, it is possible to overwrite the start of the +** existing log file with the new frames (i.e. "reset" the log). If so, +** it sets pWal->hdr.mxFrame to 0. Otherwise, pWal->hdr.mxFrame is left +** unchanged. +** +** SQLITE_OK is returned if no error is encountered (regardless of whether +** or not pWal->hdr.mxFrame is modified). An SQLite error code is returned +** if an error occurs. +*/ +static int walRestartLog(Wal *pWal){ + int rc = SQLITE_OK; + int cnt; + + if( pWal->readLock==0 ){ + volatile WalCkptInfo *pInfo = walCkptInfo(pWal); + assert( pInfo->nBackfill==pWal->hdr.mxFrame ); + if( pInfo->nBackfill>0 ){ + u32 salt1; + sqlite3_randomness(4, &salt1); + rc = walLockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1); + if( rc==SQLITE_OK ){ + /* If all readers are using WAL_READ_LOCK(0) (in other words if no + ** readers are currently using the WAL), then the transactions + ** frames will overwrite the start of the existing log. Update the + ** wal-index header to reflect this. + ** + ** In theory it would be Ok to update the cache of the header only + ** at this point. But updating the actual wal-index header is also + ** safe and means there is no special case for sqlite3WalUndo() + ** to handle if this transaction is rolled back. */ + walRestartHdr(pWal, salt1); + walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1); + }else if( rc!=SQLITE_BUSY ){ + return rc; + } + } + walUnlockShared(pWal, WAL_READ_LOCK(0)); + pWal->readLock = -1; + cnt = 0; + do{ + int notUsed; + rc = walTryBeginRead(pWal, ¬Used, 1, &cnt); + }while( rc==WAL_RETRY ); + assert( (rc&0xff)!=SQLITE_BUSY ); /* BUSY not possible when useWal==1 */ + testcase( (rc&0xff)==SQLITE_IOERR ); + testcase( rc==SQLITE_PROTOCOL ); + testcase( rc==SQLITE_OK ); + } + return rc; +} + +/* +** Information about the current state of the WAL file and where +** the next fsync should occur - passed from sqlite3WalFrames() into +** walWriteToLog(). +*/ +typedef struct WalWriter { + Wal *pWal; /* The complete WAL information */ + sqlite3_file *pFd; /* The WAL file to which we write */ + sqlite3_int64 iSyncPoint; /* Fsync at this offset */ + int syncFlags; /* Flags for the fsync */ + int szPage; /* Size of one page */ +} WalWriter; + +/* +** Write iAmt bytes of content into the WAL file beginning at iOffset. +** Do a sync when crossing the p->iSyncPoint boundary. +** +** In other words, if iSyncPoint is in between iOffset and iOffset+iAmt, +** first write the part before iSyncPoint, then sync, then write the +** rest. +*/ +static int walWriteToLog( + WalWriter *p, /* WAL to write to */ + void *pContent, /* Content to be written */ + int iAmt, /* Number of bytes to write */ + sqlite3_int64 iOffset /* Start writing at this offset */ +){ + int rc; + if( iOffsetiSyncPoint && iOffset+iAmt>=p->iSyncPoint ){ + int iFirstAmt = (int)(p->iSyncPoint - iOffset); + rc = sqlite3OsWrite(p->pFd, pContent, iFirstAmt, iOffset); + if( rc ) return rc; + iOffset += iFirstAmt; + iAmt -= iFirstAmt; + pContent = (void*)(iFirstAmt + (char*)pContent); + assert( WAL_SYNC_FLAGS(p->syncFlags)!=0 ); + rc = sqlite3OsSync(p->pFd, WAL_SYNC_FLAGS(p->syncFlags)); + if( iAmt==0 || rc ) return rc; + } + rc = sqlite3OsWrite(p->pFd, pContent, iAmt, iOffset); + return rc; +} + +/* +** Write out a single frame of the WAL +*/ +static int walWriteOneFrame( + WalWriter *p, /* Where to write the frame */ + PgHdr *pPage, /* The page of the frame to be written */ + int nTruncate, /* The commit flag. Usually 0. >0 for commit */ + sqlite3_int64 iOffset /* Byte offset at which to write */ +){ + int rc; /* Result code from subfunctions */ + void *pData; /* Data actually written */ + u8 aFrame[WAL_FRAME_HDRSIZE]; /* Buffer to assemble frame-header in */ + pData = pPage->pData; + walEncodeFrame(p->pWal, pPage->pgno, nTruncate, pData, aFrame); + rc = walWriteToLog(p, aFrame, sizeof(aFrame), iOffset); + if( rc ) return rc; + /* Write the page data */ + rc = walWriteToLog(p, pData, p->szPage, iOffset+sizeof(aFrame)); + return rc; +} + +/* +** This function is called as part of committing a transaction within which +** one or more frames have been overwritten. It updates the checksums for +** all frames written to the wal file by the current transaction starting +** with the earliest to have been overwritten. +** +** SQLITE_OK is returned if successful, or an SQLite error code otherwise. +*/ +static int walRewriteChecksums(Wal *pWal, u32 iLast){ + const int szPage = pWal->szPage;/* Database page size */ + int rc = SQLITE_OK; /* Return code */ + u8 *aBuf; /* Buffer to load data from wal file into */ + u8 aFrame[WAL_FRAME_HDRSIZE]; /* Buffer to assemble frame-headers in */ + u32 iRead; /* Next frame to read from wal file */ + i64 iCksumOff; + + aBuf = sqlite3_malloc(szPage + WAL_FRAME_HDRSIZE); + if( aBuf==0 ) return SQLITE_NOMEM_BKPT; + + /* Find the checksum values to use as input for the recalculating the + ** first checksum. If the first frame is frame 1 (implying that the current + ** transaction restarted the wal file), these values must be read from the + ** wal-file header. Otherwise, read them from the frame header of the + ** previous frame. */ + assert( pWal->iReCksum>0 ); + if( pWal->iReCksum==1 ){ + iCksumOff = 24; + }else{ + iCksumOff = walFrameOffset(pWal->iReCksum-1, szPage) + 16; + } + rc = sqlite3OsRead(pWal->pWalFd, aBuf, sizeof(u32)*2, iCksumOff); + pWal->hdr.aFrameCksum[0] = sqlite3Get4byte(aBuf); + pWal->hdr.aFrameCksum[1] = sqlite3Get4byte(&aBuf[sizeof(u32)]); + + iRead = pWal->iReCksum; + pWal->iReCksum = 0; + for(; rc==SQLITE_OK && iRead<=iLast; iRead++){ + i64 iOff = walFrameOffset(iRead, szPage); + rc = sqlite3OsRead(pWal->pWalFd, aBuf, szPage+WAL_FRAME_HDRSIZE, iOff); + if( rc==SQLITE_OK ){ + u32 iPgno, nDbSize; + iPgno = sqlite3Get4byte(aBuf); + nDbSize = sqlite3Get4byte(&aBuf[4]); + + walEncodeFrame(pWal, iPgno, nDbSize, &aBuf[WAL_FRAME_HDRSIZE], aFrame); + rc = sqlite3OsWrite(pWal->pWalFd, aFrame, sizeof(aFrame), iOff); + } + } + + sqlite3_free(aBuf); + return rc; +} + +/* +** Write a set of frames to the log. The caller must hold the write-lock +** on the log file (obtained using sqlite3WalBeginWriteTransaction()). +*/ +static int walFrames( + Wal *pWal, /* Wal handle to write to */ + int szPage, /* Database page-size in bytes */ + PgHdr *pList, /* List of dirty pages to write */ + Pgno nTruncate, /* Database size after this commit */ + int isCommit, /* True if this is a commit */ + int sync_flags /* Flags to pass to OsSync() (or 0) */ +){ + int rc; /* Used to catch return codes */ + u32 iFrame; /* Next frame address */ + PgHdr *p; /* Iterator to run through pList with. */ + PgHdr *pLast = 0; /* Last frame in list */ + int nExtra = 0; /* Number of extra copies of last page */ + int szFrame; /* The size of a single frame */ + i64 iOffset; /* Next byte to write in WAL file */ + WalWriter w; /* The writer */ + u32 iFirst = 0; /* First frame that may be overwritten */ + WalIndexHdr *pLive; /* Pointer to shared header */ + + assert( pList ); + assert( pWal->writeLock ); + + /* If this frame set completes a transaction, then nTruncate>0. If + ** nTruncate==0 then this frame set does not complete the transaction. */ + assert( (isCommit!=0)==(nTruncate!=0) ); + +#if defined(SQLITE_TEST) && defined(SQLITE_DEBUG) + { int cnt; for(cnt=0, p=pList; p; p=p->pDirty, cnt++){} + WALTRACE(("WAL%p: frame write begin. %d frames. mxFrame=%d. %s\n", + pWal, cnt, pWal->hdr.mxFrame, isCommit ? "Commit" : "Spill")); + } +#endif + + pLive = (WalIndexHdr*)walIndexHdr(pWal); + if( memcmp(&pWal->hdr, (void *)pLive, sizeof(WalIndexHdr))!=0 ){ + iFirst = pLive->mxFrame+1; + } + + /* See if it is possible to write these frames into the start of the + ** log file, instead of appending to it at pWal->hdr.mxFrame. + */ + if( SQLITE_OK!=(rc = walRestartLog(pWal)) ){ + return rc; + } + + /* If this is the first frame written into the log, write the WAL + ** header to the start of the WAL file. See comments at the top of + ** this source file for a description of the WAL header format. + */ + iFrame = pWal->hdr.mxFrame; + if( iFrame==0 ){ + u8 aWalHdr[WAL_HDRSIZE]; /* Buffer to assemble wal-header in */ + u32 aCksum[2]; /* Checksum for wal-header */ + + sqlite3Put4byte(&aWalHdr[0], (WAL_MAGIC | SQLITE_BIGENDIAN)); + sqlite3Put4byte(&aWalHdr[4], WAL_MAX_VERSION); + sqlite3Put4byte(&aWalHdr[8], szPage); + sqlite3Put4byte(&aWalHdr[12], pWal->nCkpt); + if( pWal->nCkpt==0 ) sqlite3_randomness(8, pWal->hdr.aSalt); + memcpy(&aWalHdr[16], pWal->hdr.aSalt, 8); + walChecksumBytes(1, aWalHdr, WAL_HDRSIZE-2*4, 0, aCksum); + sqlite3Put4byte(&aWalHdr[24], aCksum[0]); + sqlite3Put4byte(&aWalHdr[28], aCksum[1]); + + pWal->szPage = szPage; + pWal->hdr.bigEndCksum = SQLITE_BIGENDIAN; + pWal->hdr.aFrameCksum[0] = aCksum[0]; + pWal->hdr.aFrameCksum[1] = aCksum[1]; + pWal->truncateOnCommit = 1; + + rc = sqlite3OsWrite(pWal->pWalFd, aWalHdr, sizeof(aWalHdr), 0); + WALTRACE(("WAL%p: wal-header write %s\n", pWal, rc ? "failed" : "ok")); + if( rc!=SQLITE_OK ){ + return rc; + } + + /* Sync the header (unless SQLITE_IOCAP_SEQUENTIAL is true or unless + ** all syncing is turned off by PRAGMA synchronous=OFF). Otherwise + ** an out-of-order write following a WAL restart could result in + ** database corruption. See the ticket: + ** + ** https://sqlite.org/src/info/ff5be73dee + */ + if( pWal->syncHeader ){ + rc = sqlite3OsSync(pWal->pWalFd, CKPT_SYNC_FLAGS(sync_flags)); + if( rc ) return rc; + } + } + if( (int)pWal->szPage!=szPage ){ + return SQLITE_CORRUPT_BKPT; /* TH3 test case: cov1/corrupt155.test */ + } + + /* Setup information needed to write frames into the WAL */ + w.pWal = pWal; + w.pFd = pWal->pWalFd; + w.iSyncPoint = 0; + w.syncFlags = sync_flags; + w.szPage = szPage; + iOffset = walFrameOffset(iFrame+1, szPage); + szFrame = szPage + WAL_FRAME_HDRSIZE; + + /* Write all frames into the log file exactly once */ + for(p=pList; p; p=p->pDirty){ + int nDbSize; /* 0 normally. Positive == commit flag */ + + /* Check if this page has already been written into the wal file by + ** the current transaction. If so, overwrite the existing frame and + ** set Wal.writeLock to WAL_WRITELOCK_RECKSUM - indicating that + ** checksums must be recomputed when the transaction is committed. */ + if( iFirst && (p->pDirty || isCommit==0) ){ + u32 iWrite = 0; + VVA_ONLY(rc =) walFindFrame(pWal, p->pgno, &iWrite); + assert( rc==SQLITE_OK || iWrite==0 ); + if( iWrite>=iFirst ){ + i64 iOff = walFrameOffset(iWrite, szPage) + WAL_FRAME_HDRSIZE; + void *pData; + if( pWal->iReCksum==0 || iWriteiReCksum ){ + pWal->iReCksum = iWrite; + } + pData = p->pData; + rc = sqlite3OsWrite(pWal->pWalFd, pData, szPage, iOff); + if( rc ) return rc; + p->flags &= ~PGHDR_WAL_APPEND; + continue; + } + } + + iFrame++; + assert( iOffset==walFrameOffset(iFrame, szPage) ); + nDbSize = (isCommit && p->pDirty==0) ? nTruncate : 0; + rc = walWriteOneFrame(&w, p, nDbSize, iOffset); + if( rc ) return rc; + pLast = p; + iOffset += szFrame; + p->flags |= PGHDR_WAL_APPEND; + } + + /* Recalculate checksums within the wal file if required. */ + if( isCommit && pWal->iReCksum ){ + rc = walRewriteChecksums(pWal, iFrame); + if( rc ) return rc; + } + + /* If this is the end of a transaction, then we might need to pad + ** the transaction and/or sync the WAL file. + ** + ** Padding and syncing only occur if this set of frames complete a + ** transaction and if PRAGMA synchronous=FULL. If synchronous==NORMAL + ** or synchronous==OFF, then no padding or syncing are needed. + ** + ** If SQLITE_IOCAP_POWERSAFE_OVERWRITE is defined, then padding is not + ** needed and only the sync is done. If padding is needed, then the + ** final frame is repeated (with its commit mark) until the next sector + ** boundary is crossed. Only the part of the WAL prior to the last + ** sector boundary is synced; the part of the last frame that extends + ** past the sector boundary is written after the sync. + */ + if( isCommit && WAL_SYNC_FLAGS(sync_flags)!=0 ){ + int bSync = 1; + if( pWal->padToSectorBoundary ){ + int sectorSize = sqlite3SectorSize(pWal->pWalFd); + w.iSyncPoint = ((iOffset+sectorSize-1)/sectorSize)*sectorSize; + bSync = (w.iSyncPoint==iOffset); + testcase( bSync ); + while( iOffsettruncateOnCommit && pWal->mxWalSize>=0 ){ + i64 sz = pWal->mxWalSize; + if( walFrameOffset(iFrame+nExtra+1, szPage)>pWal->mxWalSize ){ + sz = walFrameOffset(iFrame+nExtra+1, szPage); + } + walLimitSize(pWal, sz); + pWal->truncateOnCommit = 0; + } + + /* Append data to the wal-index. It is not necessary to lock the + ** wal-index to do this as the SQLITE_SHM_WRITE lock held on the wal-index + ** guarantees that there are no other writers, and no data that may + ** be in use by existing readers is being overwritten. + */ + iFrame = pWal->hdr.mxFrame; + for(p=pList; p && rc==SQLITE_OK; p=p->pDirty){ + if( (p->flags & PGHDR_WAL_APPEND)==0 ) continue; + iFrame++; + rc = walIndexAppend(pWal, iFrame, p->pgno); + } + assert( pLast!=0 || nExtra==0 ); + while( rc==SQLITE_OK && nExtra>0 ){ + iFrame++; + nExtra--; + rc = walIndexAppend(pWal, iFrame, pLast->pgno); + } + + if( rc==SQLITE_OK ){ + /* Update the private copy of the header. */ + pWal->hdr.szPage = (u16)((szPage&0xff00) | (szPage>>16)); + testcase( szPage<=32768 ); + testcase( szPage>=65536 ); + pWal->hdr.mxFrame = iFrame; + if( isCommit ){ + pWal->hdr.iChange++; + pWal->hdr.nPage = nTruncate; + } + /* If this is a commit, update the wal-index header too. */ + if( isCommit ){ + walIndexWriteHdr(pWal); + pWal->iCallback = iFrame; + } + } + + WALTRACE(("WAL%p: frame write %s\n", pWal, rc ? "failed" : "ok")); + return rc; +} + +/* +** Write a set of frames to the log. The caller must hold the write-lock +** on the log file (obtained using sqlite3WalBeginWriteTransaction()). +** +** The difference between this function and walFrames() is that this +** function wraps walFrames() in an SEH_TRY{...} block. +*/ +SQLITE_PRIVATE int sqlite3WalFrames( + Wal *pWal, /* Wal handle to write to */ + int szPage, /* Database page-size in bytes */ + PgHdr *pList, /* List of dirty pages to write */ + Pgno nTruncate, /* Database size after this commit */ + int isCommit, /* True if this is a commit */ + int sync_flags /* Flags to pass to OsSync() (or 0) */ +){ + int rc; + SEH_TRY { + rc = walFrames(pWal, szPage, pList, nTruncate, isCommit, sync_flags); + } + SEH_EXCEPT( rc = walHandleException(pWal); ) + return rc; +} + +/* +** This routine is called to implement sqlite3_wal_checkpoint() and +** related interfaces. +** +** Obtain a CHECKPOINT lock and then backfill as much information as +** we can from WAL into the database. +** +** If parameter xBusy is not NULL, it is a pointer to a busy-handler +** callback. In this case this function runs a blocking checkpoint. +*/ +SQLITE_PRIVATE int sqlite3WalCheckpoint( + Wal *pWal, /* Wal connection */ + sqlite3 *db, /* Check this handle's interrupt flag */ + int eMode, /* PASSIVE, FULL, RESTART, or TRUNCATE */ + int (*xBusy)(void*), /* Function to call when busy */ + void *pBusyArg, /* Context argument for xBusyHandler */ + int sync_flags, /* Flags to sync db file with (or 0) */ + int nBuf, /* Size of temporary buffer */ + u8 *zBuf, /* Temporary buffer to use */ + int *pnLog, /* OUT: Number of frames in WAL */ + int *pnCkpt /* OUT: Number of backfilled frames in WAL */ +){ + int rc; /* Return code */ + int isChanged = 0; /* True if a new wal-index header is loaded */ + int eMode2 = eMode; /* Mode to pass to walCheckpoint() */ + int (*xBusy2)(void*) = xBusy; /* Busy handler for eMode2 */ + + assert( pWal->ckptLock==0 ); + assert( pWal->writeLock==0 ); + + /* EVIDENCE-OF: R-62920-47450 The busy-handler callback is never invoked + ** in the SQLITE_CHECKPOINT_PASSIVE mode. */ + assert( SQLITE_CHECKPOINT_NOOPSQLITE_CHECKPOINT_PASSIVE || xBusy==0 ); + + if( pWal->readOnly ) return SQLITE_READONLY; + WALTRACE(("WAL%p: checkpoint begins\n", pWal)); + + /* Enable blocking locks, if possible. */ + sqlite3WalDb(pWal, db); + if( xBusy2 ) (void)walEnableBlocking(pWal); + + /* IMPLEMENTATION-OF: R-62028-47212 All calls obtain an exclusive + ** "checkpoint" lock on the database file. + ** EVIDENCE-OF: R-10421-19736 If any other process is running a + ** checkpoint operation at the same time, the lock cannot be obtained and + ** SQLITE_BUSY is returned. + ** EVIDENCE-OF: R-53820-33897 Even if there is a busy-handler configured, + ** it will not be invoked in this case. + */ + if( eMode!=SQLITE_CHECKPOINT_NOOP ){ + rc = walLockExclusive(pWal, WAL_CKPT_LOCK, 1); + testcase( rc==SQLITE_BUSY ); + testcase( rc!=SQLITE_OK && xBusy2!=0 ); + if( rc==SQLITE_OK ){ + pWal->ckptLock = 1; + + /* IMPLEMENTATION-OF: R-59782-36818 The SQLITE_CHECKPOINT_FULL, RESTART + ** and TRUNCATE modes also obtain the exclusive "writer" lock on the + ** database file. + ** + ** EVIDENCE-OF: R-60642-04082 If the writer lock cannot be obtained + ** immediately, and a busy-handler is configured, it is invoked and the + ** writer lock retried until either the busy-handler returns 0 or the + ** lock is successfully obtained. + */ + if( eMode!=SQLITE_CHECKPOINT_PASSIVE ){ + rc = walBusyLock(pWal, xBusy2, pBusyArg, WAL_WRITE_LOCK, 1); + if( rc==SQLITE_OK ){ + pWal->writeLock = 1; + }else if( rc==SQLITE_BUSY ){ + eMode2 = SQLITE_CHECKPOINT_PASSIVE; + xBusy2 = 0; + rc = SQLITE_OK; + } + } + } + }else{ + rc = SQLITE_OK; + } + + + /* Read the wal-index header. */ + SEH_TRY { + if( rc==SQLITE_OK ){ + /* For a passive checkpoint, do not re-enable blocking locks after + ** reading the wal-index header. A passive checkpoint should not block + ** or invoke the busy handler. The only lock such a checkpoint may + ** attempt to obtain is a lock on a read-slot, and it should give up + ** immediately and do a partial checkpoint if it cannot obtain it. */ + walDisableBlocking(pWal); + rc = walIndexReadHdr(pWal, &isChanged); + if( eMode2>SQLITE_CHECKPOINT_PASSIVE ) (void)walEnableBlocking(pWal); + if( isChanged && pWal->pDbFd->pMethods->iVersion>=3 ){ + sqlite3OsUnfetch(pWal->pDbFd, 0, 0); + } + } + + /* Copy data from the log to the database file. */ + if( rc==SQLITE_OK ){ + sqlite3FaultSim(660); + if( pWal->hdr.mxFrame && walPagesize(pWal)!=nBuf ){ + rc = SQLITE_CORRUPT_BKPT; + }else if( eMode2!=SQLITE_CHECKPOINT_NOOP ){ + rc = walCheckpoint(pWal, db, eMode2, xBusy2, pBusyArg, sync_flags,zBuf); + } + + /* If no error occurred, set the output variables. */ + if( rc==SQLITE_OK || rc==SQLITE_BUSY ){ + if( pnLog ) *pnLog = (int)pWal->hdr.mxFrame; + SEH_INJECT_FAULT; + if( pnCkpt ) *pnCkpt = (int)(walCkptInfo(pWal)->nBackfill); + } + } + } + SEH_EXCEPT( rc = walHandleException(pWal); ) + + if( isChanged ){ + /* If a new wal-index header was loaded before the checkpoint was + ** performed, then the pager-cache associated with pWal is now + ** out of date. So zero the cached wal-index header to ensure that + ** next time the pager opens a snapshot on this database it knows that + ** the cache needs to be reset. + */ + memset(&pWal->hdr, 0, sizeof(WalIndexHdr)); + } + + walDisableBlocking(pWal); + sqlite3WalDb(pWal, 0); + + /* Release the locks. */ + (void)sqlite3WalEndWriteTransaction(pWal); + if( pWal->ckptLock ){ + walUnlockExclusive(pWal, WAL_CKPT_LOCK, 1); + pWal->ckptLock = 0; + } + WALTRACE(("WAL%p: checkpoint %s\n", pWal, rc ? "failed" : "ok")); +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + if( rc==SQLITE_BUSY_TIMEOUT ) rc = SQLITE_BUSY; +#endif + return (rc==SQLITE_OK && eMode!=eMode2 ? SQLITE_BUSY : rc); +} + +/* Return the value to pass to a sqlite3_wal_hook callback, the +** number of frames in the WAL at the point of the last commit since +** sqlite3WalCallback() was called. If no commits have occurred since +** the last call, then return 0. +*/ +SQLITE_PRIVATE int sqlite3WalCallback(Wal *pWal){ + u32 ret = 0; + if( pWal ){ + ret = pWal->iCallback; + pWal->iCallback = 0; + } + return (int)ret; +} + +/* +** This function is called to change the WAL subsystem into or out +** of locking_mode=EXCLUSIVE. +** +** If op is zero, then attempt to change from locking_mode=EXCLUSIVE +** into locking_mode=NORMAL. This means that we must acquire a lock +** on the pWal->readLock byte. If the WAL is already in locking_mode=NORMAL +** or if the acquisition of the lock fails, then return 0. If the +** transition out of exclusive-mode is successful, return 1. This +** operation must occur while the pager is still holding the exclusive +** lock on the main database file. +** +** If op is one, then change from locking_mode=NORMAL into +** locking_mode=EXCLUSIVE. This means that the pWal->readLock must +** be released. Return 1 if the transition is made and 0 if the +** WAL is already in exclusive-locking mode - meaning that this +** routine is a no-op. The pager must already hold the exclusive lock +** on the main database file before invoking this operation. +** +** If op is negative, then do a dry-run of the op==1 case but do +** not actually change anything. The pager uses this to see if it +** should acquire the database exclusive lock prior to invoking +** the op==1 case. +*/ +SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op){ + int rc; + assert( pWal->writeLock==0 ); + assert( pWal->exclusiveMode!=WAL_HEAPMEMORY_MODE || op==-1 ); + + /* pWal->readLock is usually set, but might be -1 if there was a + ** prior error while attempting to acquire are read-lock. This cannot + ** happen if the connection is actually in exclusive mode (as no xShmLock + ** locks are taken in this case). Nor should the pager attempt to + ** upgrade to exclusive-mode following such an error. + */ +#ifndef SQLITE_USE_SEH + assert( pWal->readLock>=0 || pWal->lockError ); +#endif + assert( pWal->readLock>=0 || (op<=0 && pWal->exclusiveMode==0) ); + + if( op==0 ){ + if( pWal->exclusiveMode!=WAL_NORMAL_MODE ){ + pWal->exclusiveMode = WAL_NORMAL_MODE; + if( walLockShared(pWal, WAL_READ_LOCK(pWal->readLock))!=SQLITE_OK ){ + pWal->exclusiveMode = WAL_EXCLUSIVE_MODE; + } + rc = pWal->exclusiveMode==WAL_NORMAL_MODE; + }else{ + /* Already in locking_mode=NORMAL */ + rc = 0; + } + }else if( op>0 ){ + assert( pWal->exclusiveMode==WAL_NORMAL_MODE ); + assert( pWal->readLock>=0 ); + walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock)); + pWal->exclusiveMode = WAL_EXCLUSIVE_MODE; + rc = 1; + }else{ + rc = pWal->exclusiveMode==WAL_NORMAL_MODE; + } + return rc; +} + +/* +** Return true if the argument is non-NULL and the WAL module is using +** heap-memory for the wal-index. Otherwise, if the argument is NULL or the +** WAL module is using shared-memory, return false. +*/ +SQLITE_PRIVATE int sqlite3WalHeapMemory(Wal *pWal){ + return (pWal && pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ); +} + +#ifdef SQLITE_ENABLE_SNAPSHOT +/* Create a snapshot object. The content of a snapshot is opaque to +** every other subsystem, so the WAL module can put whatever it needs +** in the object. +*/ +SQLITE_PRIVATE int sqlite3WalSnapshotGet(Wal *pWal, sqlite3_snapshot **ppSnapshot){ + int rc = SQLITE_OK; + WalIndexHdr *pRet; + static const u32 aZero[4] = { 0, 0, 0, 0 }; + + assert( pWal->readLock>=0 && pWal->writeLock==0 ); + + if( memcmp(&pWal->hdr.aFrameCksum[0],aZero,16)==0 ){ + *ppSnapshot = 0; + return SQLITE_ERROR; + } + pRet = (WalIndexHdr*)sqlite3_malloc(sizeof(WalIndexHdr)); + if( pRet==0 ){ + rc = SQLITE_NOMEM_BKPT; + }else{ + memcpy(pRet, &pWal->hdr, sizeof(WalIndexHdr)); + *ppSnapshot = (sqlite3_snapshot*)pRet; + } + + return rc; +} + +/* Try to open on pSnapshot when the next read-transaction starts +*/ +SQLITE_PRIVATE void sqlite3WalSnapshotOpen( + Wal *pWal, + sqlite3_snapshot *pSnapshot +){ + if( pSnapshot && ((WalIndexHdr*)pSnapshot)->iVersion==0 ){ + /* iVersion==0 means that this is a call to sqlite3_snapshot_get(). In + ** this case set the bGetSnapshot flag so that if the call to + ** sqlite3_snapshot_get() is about to read transaction on this wal + ** file, it does not take read-lock 0 if the wal file has been completely + ** checkpointed. Taking read-lock 0 would work, but then it would be + ** possible for a subsequent writer to destroy the snapshot even while + ** this connection is holding its read-transaction open. This is contrary + ** to user expectations, so we avoid it by not taking read-lock 0. */ + pWal->bGetSnapshot = 1; + }else{ + pWal->pSnapshot = (WalIndexHdr*)pSnapshot; + pWal->bGetSnapshot = 0; + } +} + +/* +** Return a +ve value if snapshot p1 is newer than p2. A -ve value if +** p1 is older than p2 and zero if p1 and p2 are the same snapshot. +*/ +SQLITE_API int sqlite3_snapshot_cmp(sqlite3_snapshot *p1, sqlite3_snapshot *p2){ + WalIndexHdr *pHdr1 = (WalIndexHdr*)p1; + WalIndexHdr *pHdr2 = (WalIndexHdr*)p2; + + /* aSalt[0] is a copy of the value stored in the wal file header. It + ** is incremented each time the wal file is restarted. */ + if( pHdr1->aSalt[0]aSalt[0] ) return -1; + if( pHdr1->aSalt[0]>pHdr2->aSalt[0] ) return +1; + if( pHdr1->mxFramemxFrame ) return -1; + if( pHdr1->mxFrame>pHdr2->mxFrame ) return +1; + return 0; +} + +/* +** The caller currently has a read transaction open on the database. +** This function takes a SHARED lock on the CHECKPOINTER slot and then +** checks if the snapshot passed as the second argument is still +** available. If so, SQLITE_OK is returned. +** +** If the snapshot is not available, SQLITE_ERROR is returned. Or, if +** the CHECKPOINTER lock cannot be obtained, SQLITE_BUSY. If any error +** occurs (any value other than SQLITE_OK is returned), the CHECKPOINTER +** lock is released before returning. +*/ +SQLITE_PRIVATE int sqlite3WalSnapshotCheck(Wal *pWal, sqlite3_snapshot *pSnapshot){ + int rc; + SEH_TRY { + rc = walLockShared(pWal, WAL_CKPT_LOCK); + if( rc==SQLITE_OK ){ + WalIndexHdr *pNew = (WalIndexHdr*)pSnapshot; + if( memcmp(pNew->aSalt, pWal->hdr.aSalt, sizeof(pWal->hdr.aSalt)) + || pNew->mxFramenBackfillAttempted + ){ + rc = SQLITE_ERROR_SNAPSHOT; + walUnlockShared(pWal, WAL_CKPT_LOCK); + } + } + } + SEH_EXCEPT( rc = walHandleException(pWal); ) + return rc; +} + +/* +** Release a lock obtained by an earlier successful call to +** sqlite3WalSnapshotCheck(). +*/ +SQLITE_PRIVATE void sqlite3WalSnapshotUnlock(Wal *pWal){ + assert( pWal ); + walUnlockShared(pWal, WAL_CKPT_LOCK); +} + + +#endif /* SQLITE_ENABLE_SNAPSHOT */ + +#ifdef SQLITE_ENABLE_ZIPVFS +/* +** If the argument is not NULL, it points to a Wal object that holds a +** read-lock. This function returns the database page-size if it is known, +** or zero if it is not (or if pWal is NULL). +*/ +SQLITE_PRIVATE int sqlite3WalFramesize(Wal *pWal){ + assert( pWal==0 || pWal->readLock>=0 ); + return (pWal ? pWal->szPage : 0); +} +#endif + +/* Return the sqlite3_file object for the WAL file +*/ +SQLITE_PRIVATE sqlite3_file *sqlite3WalFile(Wal *pWal){ + return pWal->pWalFd; +} + +#endif /* #ifndef SQLITE_OMIT_WAL */ + +/************** End of wal.c *************************************************/ +/************** Begin file btmutex.c *****************************************/ +/* +** 2007 August 27 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file contains code used to implement mutexes on Btree objects. +** This code really belongs in btree.c. But btree.c is getting too +** big and we want to break it down some. This packaged seemed like +** a good breakout. +*/ +/************** Include btreeInt.h in the middle of btmutex.c ****************/ +/************** Begin file btreeInt.h ****************************************/ +/* +** 2004 April 6 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file implements an external (disk-based) database using BTrees. +** For a detailed discussion of BTrees, refer to +** +** Donald E. Knuth, THE ART OF COMPUTER PROGRAMMING, Volume 3: +** "Sorting And Searching", pages 473-480. Addison-Wesley +** Publishing Company, Reading, Massachusetts. +** +** The basic idea is that each page of the file contains N database +** entries and N+1 pointers to subpages. +** +** ---------------------------------------------------------------- +** | Ptr(0) | Key(0) | Ptr(1) | Key(1) | ... | Key(N-1) | Ptr(N) | +** ---------------------------------------------------------------- +** +** All of the keys on the page that Ptr(0) points to have values less +** than Key(0). All of the keys on page Ptr(1) and its subpages have +** values greater than Key(0) and less than Key(1). All of the keys +** on Ptr(N) and its subpages have values greater than Key(N-1). And +** so forth. +** +** Finding a particular key requires reading O(log(M)) pages from the +** disk where M is the number of entries in the tree. +** +** In this implementation, a single file can hold one or more separate +** BTrees. Each BTree is identified by the index of its root page. The +** key and data for any entry are combined to form the "payload". A +** fixed amount of payload can be carried directly on the database +** page. If the payload is larger than the preset amount then surplus +** bytes are stored on overflow pages. The payload for an entry +** and the preceding pointer are combined to form a "Cell". Each +** page has a small header which contains the Ptr(N) pointer and other +** information such as the size of key and data. +** +** FORMAT DETAILS +** +** The file is divided into pages. The first page is called page 1, +** the second is page 2, and so forth. A page number of zero indicates +** "no such page". The page size can be any power of 2 between 512 and 65536. +** Each page can be either a btree page, a freelist page, an overflow +** page, or a pointer-map page. +** +** The first page is always a btree page. The first 100 bytes of the first +** page contain a special header (the "file header") that describes the file. +** The format of the file header is as follows: +** +** OFFSET SIZE DESCRIPTION +** 0 16 Header string: "SQLite format 3\000" +** 16 2 Page size in bytes. (1 means 65536) +** 18 1 File format write version +** 19 1 File format read version +** 20 1 Bytes of unused space at the end of each page +** 21 1 Max embedded payload fraction (must be 64) +** 22 1 Min embedded payload fraction (must be 32) +** 23 1 Min leaf payload fraction (must be 32) +** 24 4 File change counter +** 28 4 The size of the database in pages +** 32 4 First freelist page +** 36 4 Number of freelist pages in the file +** 40 60 15 4-byte meta values passed to higher layers +** +** 40 4 Schema cookie +** 44 4 File format of schema layer +** 48 4 Size of page cache +** 52 4 Largest root-page (auto/incr_vacuum) +** 56 4 1=UTF-8 2=UTF16le 3=UTF16be +** 60 4 User version +** 64 4 Incremental vacuum mode +** 68 4 Application-ID +** 72 20 unused +** 92 4 The version-valid-for number +** 96 4 SQLITE_VERSION_NUMBER +** +** All of the integer values are big-endian (most significant byte first). +** +** The file change counter is incremented when the database is changed +** This counter allows other processes to know when the file has changed +** and thus when they need to flush their cache. +** +** The max embedded payload fraction is the amount of the total usable +** space in a page that can be consumed by a single cell for standard +** B-tree (non-LEAFDATA) tables. A value of 255 means 100%. The default +** is to limit the maximum cell size so that at least 4 cells will fit +** on one page. Thus the default max embedded payload fraction is 64. +** +** If the payload for a cell is larger than the max payload, then extra +** payload is spilled to overflow pages. Once an overflow page is allocated, +** as many bytes as possible are moved into the overflow pages without letting +** the cell size drop below the min embedded payload fraction. +** +** The min leaf payload fraction is like the min embedded payload fraction +** except that it applies to leaf nodes in a LEAFDATA tree. The maximum +** payload fraction for a LEAFDATA tree is always 100% (or 255) and it +** not specified in the header. +** +** Each btree pages is divided into three sections: The header, the +** cell pointer array, and the cell content area. Page 1 also has a 100-byte +** file header that occurs before the page header. +** +** |----------------| +** | file header | 100 bytes. Page 1 only. +** |----------------| +** | page header | 8 bytes for leaves. 12 bytes for interior nodes +** |----------------| +** | cell pointer | | 2 bytes per cell. Sorted order. +** | array | | Grows downward +** | | v +** |----------------| +** | unallocated | +** | space | +** |----------------| ^ Grows upwards +** | cell content | | Arbitrary order interspersed with freeblocks. +** | area | | and free space fragments. +** |----------------| +** +** The page headers looks like this: +** +** OFFSET SIZE DESCRIPTION +** 0 1 Flags. 1: intkey, 2: zerodata, 4: leafdata, 8: leaf +** 1 2 byte offset to the first freeblock +** 3 2 number of cells on this page +** 5 2 first byte of the cell content area +** 7 1 number of fragmented free bytes +** 8 4 Right child (the Ptr(N) value). Omitted on leaves. +** +** The flags define the format of this btree page. The leaf flag means that +** this page has no children. The zerodata flag means that this page carries +** only keys and no data. The intkey flag means that the key is an integer +** which is stored in the key size entry of the cell header rather than in +** the payload area. +** +** The cell pointer array begins on the first byte after the page header. +** The cell pointer array contains zero or more 2-byte numbers which are +** offsets from the beginning of the page to the cell content in the cell +** content area. The cell pointers occur in sorted order. The system strives +** to keep free space after the last cell pointer so that new cells can +** be easily added without having to defragment the page. +** +** Cell content is stored at the very end of the page and grows toward the +** beginning of the page. +** +** Unused space within the cell content area is collected into a linked list of +** freeblocks. Each freeblock is at least 4 bytes in size. The byte offset +** to the first freeblock is given in the header. Freeblocks occur in +** increasing order. Because a freeblock must be at least 4 bytes in size, +** any group of 3 or fewer unused bytes in the cell content area cannot +** exist on the freeblock chain. A group of 3 or fewer free bytes is called +** a fragment. The total number of bytes in all fragments is recorded. +** in the page header at offset 7. +** +** SIZE DESCRIPTION +** 2 Byte offset of the next freeblock +** 2 Bytes in this freeblock +** +** Cells are of variable length. Cells are stored in the cell content area at +** the end of the page. Pointers to the cells are in the cell pointer array +** that immediately follows the page header. Cells is not necessarily +** contiguous or in order, but cell pointers are contiguous and in order. +** +** Cell content makes use of variable length integers. A variable +** length integer is 1 to 9 bytes where the lower 7 bits of each +** byte are used. The integer consists of all bytes that have bit 8 set and +** the first byte with bit 8 clear. The most significant byte of the integer +** appears first. A variable-length integer may not be more than 9 bytes long. +** As a special case, all 8 bits of the 9th byte are used as data. This +** allows a 64-bit integer to be encoded in 9 bytes. +** +** 0x00 becomes 0x00000000 +** 0x7f becomes 0x0000007f +** 0x81 0x00 becomes 0x00000080 +** 0x82 0x00 becomes 0x00000100 +** 0x80 0x7f becomes 0x0000007f +** 0x81 0x91 0xd1 0xac 0x78 becomes 0x12345678 +** 0x81 0x81 0x81 0x81 0x01 becomes 0x10204081 +** +** Variable length integers are used for rowids and to hold the number of +** bytes of key and data in a btree cell. +** +** The content of a cell looks like this: +** +** SIZE DESCRIPTION +** 4 Page number of the left child. Omitted if leaf flag is set. +** var Number of bytes of data. Omitted if the zerodata flag is set. +** var Number of bytes of key. Or the key itself if intkey flag is set. +** * Payload +** 4 First page of the overflow chain. Omitted if no overflow +** +** Overflow pages form a linked list. Each page except the last is completely +** filled with data (pagesize - 4 bytes). The last page can have as little +** as 1 byte of data. +** +** SIZE DESCRIPTION +** 4 Page number of next overflow page +** * Data +** +** Freelist pages come in two subtypes: trunk pages and leaf pages. The +** file header points to the first in a linked list of trunk page. Each trunk +** page points to multiple leaf pages. The content of a leaf page is +** unspecified. A trunk page looks like this: +** +** SIZE DESCRIPTION +** 4 Page number of next trunk page +** 4 Number of leaf pointers on this page +** * zero or more pages numbers of leaves +*/ +/* #include "sqliteInt.h" */ + + +/* The following value is the maximum cell size assuming a maximum page +** size give above. +*/ +#define MX_CELL_SIZE(pBt) ((int)(pBt->pageSize-8)) + +/* The maximum number of cells on a single page of the database. This +** assumes a minimum cell size of 6 bytes (4 bytes for the cell itself +** plus 2 bytes for the index to the cell in the page header). Such +** small cells will be rare, but they are possible. +*/ +#define MX_CELL(pBt) ((pBt->pageSize-8)/6) + +/* Forward declarations */ +typedef struct MemPage MemPage; +typedef struct BtLock BtLock; +typedef struct CellInfo CellInfo; + +/* +** This is a magic string that appears at the beginning of every +** SQLite database in order to identify the file as a real database. +** +** You can change this value at compile-time by specifying a +** -DSQLITE_FILE_HEADER="..." on the compiler command-line. The +** header must be exactly 16 bytes including the zero-terminator so +** the string itself should be 15 characters long. If you change +** the header, then your custom library will not be able to read +** databases generated by the standard tools and the standard tools +** will not be able to read databases created by your custom library. +*/ +#ifndef SQLITE_FILE_HEADER /* 123456789 123456 */ +# define SQLITE_FILE_HEADER "SQLite format 3" +#endif + +/* +** Page type flags. An ORed combination of these flags appear as the +** first byte of on-disk image of every BTree page. +*/ +#define PTF_INTKEY 0x01 +#define PTF_ZERODATA 0x02 +#define PTF_LEAFDATA 0x04 +#define PTF_LEAF 0x08 + +/* +** An instance of this object stores information about each a single database +** page that has been loaded into memory. The information in this object +** is derived from the raw on-disk page content. +** +** As each database page is loaded into memory, the pager allocates an +** instance of this object and zeros the first 8 bytes. (This is the +** "extra" information associated with each page of the pager.) +** +** Access to all fields of this structure is controlled by the mutex +** stored in MemPage.pBt->mutex. +*/ +struct MemPage { + u8 isInit; /* True if previously initialized. MUST BE FIRST! */ + u8 intKey; /* True if table b-trees. False for index b-trees */ + u8 intKeyLeaf; /* True if the leaf of an intKey table */ + Pgno pgno; /* Page number for this page */ + /* Only the first 8 bytes (above) are zeroed by pager.c when a new page + ** is allocated. All fields that follow must be initialized before use */ + u8 leaf; /* True if a leaf page */ + u8 hdrOffset; /* 100 for page 1. 0 otherwise */ + u8 childPtrSize; /* 0 if leaf==1. 4 if leaf==0 */ + u8 max1bytePayload; /* min(maxLocal,127) */ + u8 nOverflow; /* Number of overflow cell bodies in aCell[] */ + u16 maxLocal; /* Copy of BtShared.maxLocal or BtShared.maxLeaf */ + u16 minLocal; /* Copy of BtShared.minLocal or BtShared.minLeaf */ + u16 cellOffset; /* Index in aData of first cell pointer */ + int nFree; /* Number of free bytes on the page. -1 for unknown */ + u16 nCell; /* Number of cells on this page, local and ovfl */ + u16 maskPage; /* Mask for page offset */ + u16 aiOvfl[4]; /* Insert the i-th overflow cell before the aiOvfl-th + ** non-overflow cell */ + u8 *apOvfl[4]; /* Pointers to the body of overflow cells */ + BtShared *pBt; /* Pointer to BtShared that this page is part of */ + u8 *aData; /* Pointer to disk image of the page data */ + u8 *aDataEnd; /* One byte past the end of the entire page - not just + ** the usable space, the entire page. Used to prevent + ** corruption-induced buffer overflow. */ + u8 *aCellIdx; /* The cell index area */ + u8 *aDataOfst; /* Same as aData for leaves. aData+4 for interior */ + DbPage *pDbPage; /* Pager page handle */ + u16 (*xCellSize)(MemPage*,u8*); /* cellSizePtr method */ + void (*xParseCell)(MemPage*,u8*,CellInfo*); /* btreeParseCell method */ +}; + +/* +** A linked list of the following structures is stored at BtShared.pLock. +** Locks are added (or upgraded from READ_LOCK to WRITE_LOCK) when a cursor +** is opened on the table with root page BtShared.iTable. Locks are removed +** from this list when a transaction is committed or rolled back, or when +** a btree handle is closed. +*/ +struct BtLock { + Btree *pBtree; /* Btree handle holding this lock */ + Pgno iTable; /* Root page of table */ + u8 eLock; /* READ_LOCK or WRITE_LOCK */ + BtLock *pNext; /* Next in BtShared.pLock list */ +}; + +/* Candidate values for BtLock.eLock */ +#define READ_LOCK 1 +#define WRITE_LOCK 2 + +/* A Btree handle +** +** A database connection contains a pointer to an instance of +** this object for every database file that it has open. This structure +** is opaque to the database connection. The database connection cannot +** see the internals of this structure and only deals with pointers to +** this structure. +** +** For some database files, the same underlying database cache might be +** shared between multiple connections. In that case, each connection +** has it own instance of this object. But each instance of this object +** points to the same BtShared object. The database cache and the +** schema associated with the database file are all contained within +** the BtShared object. +** +** All fields in this structure are accessed under sqlite3.mutex. +** The pBt pointer itself may not be changed while there exists cursors +** in the referenced BtShared that point back to this Btree since those +** cursors have to go through this Btree to find their BtShared and +** they often do so without holding sqlite3.mutex. +*/ +struct Btree { + sqlite3 *db; /* The database connection holding this btree */ + BtShared *pBt; /* Sharable content of this btree */ + u8 inTrans; /* TRANS_NONE, TRANS_READ or TRANS_WRITE */ + u8 sharable; /* True if we can share pBt with another db */ + u8 locked; /* True if db currently has pBt locked */ + u8 hasIncrblobCur; /* True if there are one or more Incrblob cursors */ + int wantToLock; /* Number of nested calls to sqlite3BtreeEnter() */ + int nBackup; /* Number of backup operations reading this btree */ + u32 iBDataVersion; /* Combines with pBt->pPager->iDataVersion */ + Btree *pNext; /* List of other sharable Btrees from the same db */ + Btree *pPrev; /* Back pointer of the same list */ +#ifdef SQLITE_DEBUG + u64 nSeek; /* Calls to sqlite3BtreeMovetoUnpacked() */ +#endif +#ifndef SQLITE_OMIT_SHARED_CACHE + BtLock lock; /* Object used to lock page 1 */ +#endif +}; + +/* +** Btree.inTrans may take one of the following values. +** +** If the shared-data extension is enabled, there may be multiple users +** of the Btree structure. At most one of these may open a write transaction, +** but any number may have active read transactions. +** +** These values must match SQLITE_TXN_NONE, SQLITE_TXN_READ, and +** SQLITE_TXN_WRITE +*/ +#define TRANS_NONE 0 +#define TRANS_READ 1 +#define TRANS_WRITE 2 + +#if TRANS_NONE!=SQLITE_TXN_NONE +# error wrong numeric code for no-transaction +#endif +#if TRANS_READ!=SQLITE_TXN_READ +# error wrong numeric code for read-transaction +#endif +#if TRANS_WRITE!=SQLITE_TXN_WRITE +# error wrong numeric code for write-transaction +#endif + + +/* +** An instance of this object represents a single database file. +** +** A single database file can be in use at the same time by two +** or more database connections. When two or more connections are +** sharing the same database file, each connection has it own +** private Btree object for the file and each of those Btrees points +** to this one BtShared object. BtShared.nRef is the number of +** connections currently sharing this database file. +** +** Fields in this structure are accessed under the BtShared.mutex +** mutex, except for nRef and pNext which are accessed under the +** global SQLITE_MUTEX_STATIC_MAIN mutex. The pPager field +** may not be modified once it is initially set as long as nRef>0. +** The pSchema field may be set once under BtShared.mutex and +** thereafter is unchanged as long as nRef>0. +** +** isPending: +** +** If a BtShared client fails to obtain a write-lock on a database +** table (because there exists one or more read-locks on the table), +** the shared-cache enters 'pending-lock' state and isPending is +** set to true. +** +** The shared-cache leaves the 'pending lock' state when either of +** the following occur: +** +** 1) The current writer (BtShared.pWriter) concludes its transaction, OR +** 2) The number of locks held by other connections drops to zero. +** +** while in the 'pending-lock' state, no connection may start a new +** transaction. +** +** This feature is included to help prevent writer-starvation. +*/ +struct BtShared { + Pager *pPager; /* The page cache */ + sqlite3 *db; /* Database connection currently using this Btree */ + BtCursor *pCursor; /* A list of all open cursors */ + MemPage *pPage1; /* First page of the database */ + u8 openFlags; /* Flags to sqlite3BtreeOpen() */ +#ifndef SQLITE_OMIT_AUTOVACUUM + u8 autoVacuum; /* True if auto-vacuum is enabled */ + u8 incrVacuum; /* True if incr-vacuum is enabled */ + u8 bDoTruncate; /* True to truncate db on commit */ +#endif + u8 inTransaction; /* Transaction state */ + u8 max1bytePayload; /* Maximum first byte of cell for a 1-byte payload */ + u8 nReserveWanted; /* Desired number of extra bytes per page */ + u16 btsFlags; /* Boolean parameters. See BTS_* macros below */ + u16 maxLocal; /* Maximum local payload in non-LEAFDATA tables */ + u16 minLocal; /* Minimum local payload in non-LEAFDATA tables */ + u16 maxLeaf; /* Maximum local payload in a LEAFDATA table */ + u16 minLeaf; /* Minimum local payload in a LEAFDATA table */ + u32 pageSize; /* Total number of bytes on a page */ + u32 usableSize; /* Number of usable bytes on each page */ + int nTransaction; /* Number of open transactions (read + write) */ + u32 nPage; /* Number of pages in the database */ + void *pSchema; /* Pointer to space allocated by sqlite3BtreeSchema() */ + void (*xFreeSchema)(void*); /* Destructor for BtShared.pSchema */ + sqlite3_mutex *mutex; /* Non-recursive mutex required to access this object */ + Bitvec *pHasContent; /* Set of pages moved to free-list this transaction */ +#ifndef SQLITE_OMIT_SHARED_CACHE + int nRef; /* Number of references to this structure */ + BtShared *pNext; /* Next on a list of sharable BtShared structs */ + BtLock *pLock; /* List of locks held on this shared-btree struct */ + Btree *pWriter; /* Btree with currently open write transaction */ +#endif + u8 *pTmpSpace; /* Temp space sufficient to hold a single cell */ + int nPreformatSize; /* Size of last cell written by TransferRow() */ +}; + +/* +** Allowed values for BtShared.btsFlags +*/ +#define BTS_READ_ONLY 0x0001 /* Underlying file is readonly */ +#define BTS_PAGESIZE_FIXED 0x0002 /* Page size can no longer be changed */ +#define BTS_SECURE_DELETE 0x0004 /* PRAGMA secure_delete is enabled */ +#define BTS_OVERWRITE 0x0008 /* Overwrite deleted content with zeros */ +#define BTS_FAST_SECURE 0x000c /* Combination of the previous two */ +#define BTS_INITIALLY_EMPTY 0x0010 /* Database was empty at trans start */ +#define BTS_NO_WAL 0x0020 /* Do not open write-ahead-log files */ +#define BTS_EXCLUSIVE 0x0040 /* pWriter has an exclusive lock */ +#define BTS_PENDING 0x0080 /* Waiting for read-locks to clear */ + +/* +** An instance of the following structure is used to hold information +** about a cell. The parseCellPtr() function fills in this structure +** based on information extract from the raw disk page. +*/ +struct CellInfo { + i64 nKey; /* The key for INTKEY tables, or nPayload otherwise */ + u8 *pPayload; /* Pointer to the start of payload */ + u32 nPayload; /* Bytes of payload */ + u16 nLocal; /* Amount of payload held locally, not on overflow */ + u16 nSize; /* Size of the cell content on the main b-tree page */ +}; + +/* +** Maximum depth of an SQLite B-Tree structure. Any B-Tree deeper than +** this will be declared corrupt. This value is calculated based on a +** maximum database size of 2^31 pages a minimum fanout of 2 for a +** root-node and 3 for all other internal nodes. +** +** If a tree that appears to be taller than this is encountered, it is +** assumed that the database is corrupt. +*/ +#define BTCURSOR_MAX_DEPTH 20 + +/* +** Maximum amount of storage local to a database page, regardless of +** page size. +*/ +#define BT_MAX_LOCAL 65501 /* 65536 - 35 */ + +/* +** A cursor is a pointer to a particular entry within a particular +** b-tree within a database file. +** +** The entry is identified by its MemPage and the index in +** MemPage.aCell[] of the entry. +** +** A single database file can be shared by two more database connections, +** but cursors cannot be shared. Each cursor is associated with a +** particular database connection identified BtCursor.pBtree.db. +** +** Fields in this structure are accessed under the BtShared.mutex +** found at self->pBt->mutex. +** +** skipNext meaning: +** The meaning of skipNext depends on the value of eState: +** +** eState Meaning of skipNext +** VALID skipNext is meaningless and is ignored +** INVALID skipNext is meaningless and is ignored +** SKIPNEXT sqlite3BtreeNext() is a no-op if skipNext>0 and +** sqlite3BtreePrevious() is no-op if skipNext<0. +** REQUIRESEEK restoreCursorPosition() restores the cursor to +** eState=SKIPNEXT if skipNext!=0 +** FAULT skipNext holds the cursor fault error code. +*/ +struct BtCursor { + u8 eState; /* One of the CURSOR_XXX constants (see below) */ + u8 curFlags; /* zero or more BTCF_* flags defined below */ + u8 curPagerFlags; /* Flags to send to sqlite3PagerGet() */ + u8 hints; /* As configured by CursorSetHints() */ + int skipNext; /* Prev() is noop if negative. Next() is noop if positive. + ** Error code if eState==CURSOR_FAULT */ + Btree *pBtree; /* The Btree to which this cursor belongs */ + Pgno *aOverflow; /* Cache of overflow page locations */ + void *pKey; /* Saved key that was cursor last known position */ + /* All fields above are zeroed when the cursor is allocated. See + ** sqlite3BtreeCursorZero(). Fields that follow must be manually + ** initialized. */ +#define BTCURSOR_FIRST_UNINIT pBt /* Name of first uninitialized field */ + BtShared *pBt; /* The BtShared this cursor points to */ + BtCursor *pNext; /* Forms a linked list of all cursors */ + CellInfo info; /* A parse of the cell we are pointing at */ + i64 nKey; /* Size of pKey, or last integer key */ + Pgno pgnoRoot; /* The root page of this tree */ + i8 iPage; /* Index of current page in apPage */ + u8 curIntKey; /* Value of apPage[0]->intKey */ + u16 ix; /* Current index for apPage[iPage] */ + u16 aiIdx[BTCURSOR_MAX_DEPTH-1]; /* Current index in apPage[i] */ + struct KeyInfo *pKeyInfo; /* Arg passed to comparison function */ + MemPage *pPage; /* Current page */ + MemPage *apPage[BTCURSOR_MAX_DEPTH-1]; /* Stack of parents of current page */ +}; + +/* +** Legal values for BtCursor.curFlags +*/ +#define BTCF_WriteFlag 0x01 /* True if a write cursor */ +#define BTCF_ValidNKey 0x02 /* True if info.nKey is valid */ +#define BTCF_ValidOvfl 0x04 /* True if aOverflow is valid */ +#define BTCF_AtLast 0x08 /* Cursor is pointing to the last entry */ +#define BTCF_Incrblob 0x10 /* True if an incremental I/O handle */ +#define BTCF_Multiple 0x20 /* Maybe another cursor on the same btree */ +#define BTCF_Pinned 0x40 /* Cursor is busy and cannot be moved */ + +/* +** Potential values for BtCursor.eState. +** +** CURSOR_INVALID: +** Cursor does not point to a valid entry. This can happen (for example) +** because the table is empty or because BtreeCursorFirst() has not been +** called. +** +** CURSOR_VALID: +** Cursor points to a valid entry. getPayload() etc. may be called. +** +** CURSOR_SKIPNEXT: +** Cursor is valid except that the Cursor.skipNext field is non-zero +** indicating that the next sqlite3BtreeNext() or sqlite3BtreePrevious() +** operation should be a no-op. +** +** CURSOR_REQUIRESEEK: +** The table that this cursor was opened on still exists, but has been +** modified since the cursor was last used. The cursor position is saved +** in variables BtCursor.pKey and BtCursor.nKey. When a cursor is in +** this state, restoreCursorPosition() can be called to attempt to +** seek the cursor to the saved position. +** +** CURSOR_FAULT: +** An unrecoverable error (an I/O error or a malloc failure) has occurred +** on a different connection that shares the BtShared cache with this +** cursor. The error has left the cache in an inconsistent state. +** Do nothing else with this cursor. Any attempt to use the cursor +** should return the error code stored in BtCursor.skipNext +*/ +#define CURSOR_VALID 0 +#define CURSOR_INVALID 1 +#define CURSOR_SKIPNEXT 2 +#define CURSOR_REQUIRESEEK 3 +#define CURSOR_FAULT 4 + +/* +** The database page the PENDING_BYTE occupies. This page is never used. +*/ +#define PENDING_BYTE_PAGE(pBt) ((Pgno)((PENDING_BYTE/((pBt)->pageSize))+1)) + +/* +** These macros define the location of the pointer-map entry for a +** database page. The first argument to each is the number of usable +** bytes on each page of the database (often 1024). The second is the +** page number to look up in the pointer map. +** +** PTRMAP_PAGENO returns the database page number of the pointer-map +** page that stores the required pointer. PTRMAP_PTROFFSET returns +** the offset of the requested map entry. +** +** If the pgno argument passed to PTRMAP_PAGENO is a pointer-map page, +** then pgno is returned. So (pgno==PTRMAP_PAGENO(pgsz, pgno)) can be +** used to test if pgno is a pointer-map page. PTRMAP_ISPAGE implements +** this test. +*/ +#define PTRMAP_PAGENO(pBt, pgno) ptrmapPageno(pBt, pgno) +#define PTRMAP_PTROFFSET(pgptrmap, pgno) (5*(pgno-pgptrmap-1)) +#define PTRMAP_ISPAGE(pBt, pgno) (PTRMAP_PAGENO((pBt),(pgno))==(pgno)) + +/* +** The pointer map is a lookup table that identifies the parent page for +** each child page in the database file. The parent page is the page that +** contains a pointer to the child. Every page in the database contains +** 0 or 1 parent pages. (In this context 'database page' refers +** to any page that is not part of the pointer map itself.) Each pointer map +** entry consists of a single byte 'type' and a 4 byte parent page number. +** The PTRMAP_XXX identifiers below are the valid types. +** +** The purpose of the pointer map is to facility moving pages from one +** position in the file to another as part of autovacuum. When a page +** is moved, the pointer in its parent must be updated to point to the +** new location. The pointer map is used to locate the parent page quickly. +** +** PTRMAP_ROOTPAGE: The database page is a root-page. The page-number is not +** used in this case. +** +** PTRMAP_FREEPAGE: The database page is an unused (free) page. The page-number +** is not used in this case. +** +** PTRMAP_OVERFLOW1: The database page is the first page in a list of +** overflow pages. The page number identifies the page that +** contains the cell with a pointer to this overflow page. +** +** PTRMAP_OVERFLOW2: The database page is the second or later page in a list of +** overflow pages. The page-number identifies the previous +** page in the overflow page list. +** +** PTRMAP_BTREE: The database page is a non-root btree page. The page number +** identifies the parent page in the btree. +*/ +#define PTRMAP_ROOTPAGE 1 +#define PTRMAP_FREEPAGE 2 +#define PTRMAP_OVERFLOW1 3 +#define PTRMAP_OVERFLOW2 4 +#define PTRMAP_BTREE 5 + +/* A bunch of assert() statements to check the transaction state variables +** of handle p (type Btree*) are internally consistent. +*/ +#define btreeIntegrity(p) \ + assert( p->pBt->inTransaction!=TRANS_NONE || p->pBt->nTransaction==0 ); \ + assert( p->pBt->inTransaction>=p->inTrans ); + + +/* +** The ISAUTOVACUUM macro is used within balance_nonroot() to determine +** if the database supports auto-vacuum or not. Because it is used +** within an expression that is an argument to another macro +** (sqliteMallocRaw), it is not possible to use conditional compilation. +** So, this macro is defined instead. +*/ +#ifndef SQLITE_OMIT_AUTOVACUUM +#define ISAUTOVACUUM(pBt) (pBt->autoVacuum) +#else +#define ISAUTOVACUUM(pBt) 0 +#endif + + +/* +** This structure is passed around through all the PRAGMA integrity_check +** checking routines in order to keep track of some global state information. +** +** The aRef[] array is allocated so that there is 1 bit for each page in +** the database. As the integrity-check proceeds, for each page used in +** the database the corresponding bit is set. This allows integrity-check to +** detect pages that are used twice and orphaned pages (both of which +** indicate corruption). +*/ +typedef struct IntegrityCk IntegrityCk; +struct IntegrityCk { + BtShared *pBt; /* The tree being checked out */ + Pager *pPager; /* The associated pager. Also accessible by pBt->pPager */ + u8 *aPgRef; /* 1 bit per page in the db (see above) */ + Pgno nCkPage; /* Pages in the database. 0 for partial check */ + int mxErr; /* Stop accumulating errors when this reaches zero */ + int nErr; /* Number of messages written to zErrMsg so far */ + int rc; /* SQLITE_OK, SQLITE_NOMEM, or SQLITE_INTERRUPT */ + u32 nStep; /* Number of steps into the integrity_check process */ + const char *zPfx; /* Error message prefix */ + Pgno v0; /* Value for first %u substitution in zPfx (root page) */ + Pgno v1; /* Value for second %u substitution in zPfx (current pg) */ + int v2; /* Value for third %d substitution in zPfx */ + StrAccum errMsg; /* Accumulate the error message text here */ + u32 *heap; /* Min-heap used for analyzing cell coverage */ + sqlite3 *db; /* Database connection running the check */ + i64 nRow; /* Number of rows visited in current tree */ +}; + +/* +** Routines to read or write a two- and four-byte big-endian integer values. +*/ +#define get2byte(x) ((x)[0]<<8 | (x)[1]) +#define put2byte(p,v) ((p)[0] = (u8)((v)>>8), (p)[1] = (u8)(v)) +#define get4byte sqlite3Get4byte +#define put4byte sqlite3Put4byte + +/* +** get2byteAligned(), unlike get2byte(), requires that its argument point to a +** two-byte aligned address. get2byteAligned() is only used for accessing the +** cell addresses in a btree header. +*/ +#if SQLITE_BYTEORDER==4321 +# define get2byteAligned(x) (*(u16*)(x)) +#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4008000 +# define get2byteAligned(x) __builtin_bswap16(*(u16*)(x)) +#elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 +# define get2byteAligned(x) _byteswap_ushort(*(u16*)(x)) +#else +# define get2byteAligned(x) ((x)[0]<<8 | (x)[1]) +#endif + +/************** End of btreeInt.h ********************************************/ +/************** Continuing where we left off in btmutex.c ********************/ +#ifndef SQLITE_OMIT_SHARED_CACHE +#if SQLITE_THREADSAFE + +/* +** Obtain the BtShared mutex associated with B-Tree handle p. Also, +** set BtShared.db to the database handle associated with p and the +** p->locked boolean to true. +*/ +static void lockBtreeMutex(Btree *p){ + assert( p->locked==0 ); + assert( sqlite3_mutex_notheld(p->pBt->mutex) ); + assert( sqlite3_mutex_held(p->db->mutex) ); + + sqlite3_mutex_enter(p->pBt->mutex); + p->pBt->db = p->db; + p->locked = 1; +} + +/* +** Release the BtShared mutex associated with B-Tree handle p and +** clear the p->locked boolean. +*/ +static void SQLITE_NOINLINE unlockBtreeMutex(Btree *p){ + BtShared *pBt = p->pBt; + assert( p->locked==1 ); + assert( sqlite3_mutex_held(pBt->mutex) ); + assert( sqlite3_mutex_held(p->db->mutex) ); + assert( p->db==pBt->db ); + + sqlite3_mutex_leave(pBt->mutex); + p->locked = 0; +} + +/* Forward reference */ +static void SQLITE_NOINLINE btreeLockCarefully(Btree *p); + +/* +** Enter a mutex on the given BTree object. +** +** If the object is not sharable, then no mutex is ever required +** and this routine is a no-op. The underlying mutex is non-recursive. +** But we keep a reference count in Btree.wantToLock so the behavior +** of this interface is recursive. +** +** To avoid deadlocks, multiple Btrees are locked in the same order +** by all database connections. The p->pNext is a list of other +** Btrees belonging to the same database connection as the p Btree +** which need to be locked after p. If we cannot get a lock on +** p, then first unlock all of the others on p->pNext, then wait +** for the lock to become available on p, then relock all of the +** subsequent Btrees that desire a lock. +*/ +SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){ + /* Some basic sanity checking on the Btree. The list of Btrees + ** connected by pNext and pPrev should be in sorted order by + ** Btree.pBt value. All elements of the list should belong to + ** the same connection. Only shared Btrees are on the list. */ + assert( p->pNext==0 || p->pNext->pBt>p->pBt ); + assert( p->pPrev==0 || p->pPrev->pBtpBt ); + assert( p->pNext==0 || p->pNext->db==p->db ); + assert( p->pPrev==0 || p->pPrev->db==p->db ); + assert( p->sharable || (p->pNext==0 && p->pPrev==0) ); + + /* Check for locking consistency */ + assert( !p->locked || p->wantToLock>0 ); + assert( p->sharable || p->wantToLock==0 ); + + /* We should already hold a lock on the database connection */ + assert( sqlite3_mutex_held(p->db->mutex) ); + + /* Unless the database is sharable and unlocked, then BtShared.db + ** should already be set correctly. */ + assert( (p->locked==0 && p->sharable) || p->pBt->db==p->db ); + + if( !p->sharable ) return; + p->wantToLock++; + if( p->locked ) return; + btreeLockCarefully(p); +} + +/* This is a helper function for sqlite3BtreeLock(). By moving +** complex, but seldom used logic, out of sqlite3BtreeLock() and +** into this routine, we avoid unnecessary stack pointer changes +** and thus help the sqlite3BtreeLock() routine to run much faster +** in the common case. +*/ +static void SQLITE_NOINLINE btreeLockCarefully(Btree *p){ + Btree *pLater; + + /* In most cases, we should be able to acquire the lock we + ** want without having to go through the ascending lock + ** procedure that follows. Just be sure not to block. + */ + if( sqlite3_mutex_try(p->pBt->mutex)==SQLITE_OK ){ + p->pBt->db = p->db; + p->locked = 1; + return; + } + + /* To avoid deadlock, first release all locks with a larger + ** BtShared address. Then acquire our lock. Then reacquire + ** the other BtShared locks that we used to hold in ascending + ** order. + */ + for(pLater=p->pNext; pLater; pLater=pLater->pNext){ + assert( pLater->sharable ); + assert( pLater->pNext==0 || pLater->pNext->pBt>pLater->pBt ); + assert( !pLater->locked || pLater->wantToLock>0 ); + if( pLater->locked ){ + unlockBtreeMutex(pLater); + } + } + lockBtreeMutex(p); + for(pLater=p->pNext; pLater; pLater=pLater->pNext){ + if( pLater->wantToLock ){ + lockBtreeMutex(pLater); + } + } +} + + +/* +** Exit the recursive mutex on a Btree. +*/ +SQLITE_PRIVATE void sqlite3BtreeLeave(Btree *p){ + assert( sqlite3_mutex_held(p->db->mutex) ); + if( p->sharable ){ + assert( p->wantToLock>0 ); + p->wantToLock--; + if( p->wantToLock==0 ){ + unlockBtreeMutex(p); + } + } +} + +#ifndef NDEBUG +/* +** Return true if the BtShared mutex is held on the btree, or if the +** B-Tree is not marked as sharable. +** +** This routine is used only from within assert() statements. +*/ +SQLITE_PRIVATE int sqlite3BtreeHoldsMutex(Btree *p){ + assert( p->sharable==0 || p->locked==0 || p->wantToLock>0 ); + assert( p->sharable==0 || p->locked==0 || p->db==p->pBt->db ); + assert( p->sharable==0 || p->locked==0 || sqlite3_mutex_held(p->pBt->mutex) ); + assert( p->sharable==0 || p->locked==0 || sqlite3_mutex_held(p->db->mutex) ); + + return (p->sharable==0 || p->locked); +} +#endif + + +/* +** Enter the mutex on every Btree associated with a database +** connection. This is needed (for example) prior to parsing +** a statement since we will be comparing table and column names +** against all schemas and we do not want those schemas being +** reset out from under us. +** +** There is a corresponding leave-all procedures. +** +** Enter the mutexes in ascending order by BtShared pointer address +** to avoid the possibility of deadlock when two threads with +** two or more btrees in common both try to lock all their btrees +** at the same instant. +*/ +static void SQLITE_NOINLINE btreeEnterAll(sqlite3 *db){ + int i; + u8 skipOk = 1; + Btree *p; + assert( sqlite3_mutex_held(db->mutex) ); + for(i=0; inDb; i++){ + p = db->aDb[i].pBt; + if( p && p->sharable ){ + sqlite3BtreeEnter(p); + skipOk = 0; + } + } + db->noSharedCache = skipOk; +} +SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){ + if( db->noSharedCache==0 ) btreeEnterAll(db); +} +static void SQLITE_NOINLINE btreeLeaveAll(sqlite3 *db){ + int i; + Btree *p; + assert( sqlite3_mutex_held(db->mutex) ); + for(i=0; inDb; i++){ + p = db->aDb[i].pBt; + if( p ) sqlite3BtreeLeave(p); + } +} +SQLITE_PRIVATE void sqlite3BtreeLeaveAll(sqlite3 *db){ + if( db->noSharedCache==0 ) btreeLeaveAll(db); +} + +#ifndef NDEBUG +/* +** Return true if the current thread holds the database connection +** mutex and all required BtShared mutexes. +** +** This routine is used inside assert() statements only. +*/ +SQLITE_PRIVATE int sqlite3BtreeHoldsAllMutexes(sqlite3 *db){ + int i; + if( !sqlite3_mutex_held(db->mutex) ){ + return 0; + } + for(i=0; inDb; i++){ + Btree *p; + p = db->aDb[i].pBt; + if( p && p->sharable && + (p->wantToLock==0 || !sqlite3_mutex_held(p->pBt->mutex)) ){ + return 0; + } + } + return 1; +} +#endif /* NDEBUG */ + +#ifndef NDEBUG +/* +** Return true if the correct mutexes are held for accessing the +** db->aDb[iDb].pSchema structure. The mutexes required for schema +** access are: +** +** (1) The mutex on db +** (2) if iDb!=1, then the mutex on db->aDb[iDb].pBt. +** +** If pSchema is not NULL, then iDb is computed from pSchema and +** db using sqlite3SchemaToIndex(). +*/ +SQLITE_PRIVATE int sqlite3SchemaMutexHeld(sqlite3 *db, int iDb, Schema *pSchema){ + Btree *p; + assert( db!=0 ); + if( db->pVfs==0 && db->nDb==0 ) return 1; + if( pSchema ) iDb = sqlite3SchemaToIndex(db, pSchema); + assert( iDb>=0 && iDbnDb ); + if( !sqlite3_mutex_held(db->mutex) ) return 0; + if( iDb==1 ) return 1; + p = db->aDb[iDb].pBt; + assert( p!=0 ); + return p->sharable==0 || p->locked==1; +} +#endif /* NDEBUG */ + +#else /* SQLITE_THREADSAFE>0 above. SQLITE_THREADSAFE==0 below */ +/* +** The following are special cases for mutex enter routines for use +** in single threaded applications that use shared cache. Except for +** these two routines, all mutex operations are no-ops in that case and +** are null #defines in btree.h. +** +** If shared cache is disabled, then all btree mutex routines, including +** the ones below, are no-ops and are null #defines in btree.h. +*/ + +SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){ + p->pBt->db = p->db; +} +SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){ + int i; + for(i=0; inDb; i++){ + Btree *p = db->aDb[i].pBt; + if( p ){ + p->pBt->db = p->db; + } + } +} +#endif /* if SQLITE_THREADSAFE */ + +#ifndef SQLITE_OMIT_INCRBLOB +/* +** Enter a mutex on a Btree given a cursor owned by that Btree. +** +** These entry points are used by incremental I/O only. Enter() is required +** any time OMIT_SHARED_CACHE is not defined, regardless of whether or not +** the build is threadsafe. Leave() is only required by threadsafe builds. +*/ +SQLITE_PRIVATE void sqlite3BtreeEnterCursor(BtCursor *pCur){ + sqlite3BtreeEnter(pCur->pBtree); +} +# if SQLITE_THREADSAFE +SQLITE_PRIVATE void sqlite3BtreeLeaveCursor(BtCursor *pCur){ + sqlite3BtreeLeave(pCur->pBtree); +} +# endif +#endif /* ifndef SQLITE_OMIT_INCRBLOB */ + +#endif /* ifndef SQLITE_OMIT_SHARED_CACHE */ + +/************** End of btmutex.c *********************************************/ +/************** Begin file btree.c *******************************************/ +/* +** 2004 April 6 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file implements an external (disk-based) database using BTrees. +** See the header comment on "btreeInt.h" for additional information. +** Including a description of file format and an overview of operation. +*/ +/* #include "btreeInt.h" */ + +/* +** The header string that appears at the beginning of every +** SQLite database. +*/ +static const char zMagicHeader[] = SQLITE_FILE_HEADER; + +/* +** Set this global variable to 1 to enable tracing using the TRACE +** macro. +*/ +#if 0 +int sqlite3BtreeTrace=1; /* True to enable tracing */ +# define TRACE(X) if(sqlite3BtreeTrace){printf X;fflush(stdout);} +#else +# define TRACE(X) +#endif + +/* +** Extract a 2-byte big-endian integer from an array of unsigned bytes. +** But if the value is zero, make it 65536. +** +** This routine is used to extract the "offset to cell content area" value +** from the header of a btree page. If the page size is 65536 and the page +** is empty, the offset should be 65536, but the 2-byte value stores zero. +** This routine makes the necessary adjustment to 65536. +*/ +#define get2byteNotZero(X) (((((int)get2byte(X))-1)&0xffff)+1) + +/* +** Values passed as the 5th argument to allocateBtreePage() +*/ +#define BTALLOC_ANY 0 /* Allocate any page */ +#define BTALLOC_EXACT 1 /* Allocate exact page if possible */ +#define BTALLOC_LE 2 /* Allocate any page <= the parameter */ + +/* +** Macro IfNotOmitAV(x) returns (x) if SQLITE_OMIT_AUTOVACUUM is not +** defined, or 0 if it is. For example: +** +** bIncrVacuum = IfNotOmitAV(pBtShared->incrVacuum); +*/ +#ifndef SQLITE_OMIT_AUTOVACUUM +#define IfNotOmitAV(expr) (expr) +#else +#define IfNotOmitAV(expr) 0 +#endif + +#ifndef SQLITE_OMIT_SHARED_CACHE +/* +** A list of BtShared objects that are eligible for participation +** in shared cache. This variable has file scope during normal builds, +** but the test harness needs to access it so we make it global for +** test builds. +** +** Access to this variable is protected by SQLITE_MUTEX_STATIC_MAIN. +*/ +#ifdef SQLITE_TEST +SQLITE_PRIVATE BtShared *SQLITE_WSD sqlite3SharedCacheList = 0; +#else +static BtShared *SQLITE_WSD sqlite3SharedCacheList = 0; +#endif +#endif /* SQLITE_OMIT_SHARED_CACHE */ + +#ifndef SQLITE_OMIT_SHARED_CACHE +/* +** Enable or disable the shared pager and schema features. +** +** This routine has no effect on existing database connections. +** The shared cache setting effects only future calls to +** sqlite3_open(), sqlite3_open16(), or sqlite3_open_v2(). +*/ +SQLITE_API int sqlite3_enable_shared_cache(int enable){ + sqlite3GlobalConfig.sharedCacheEnabled = enable; + return SQLITE_OK; +} +#endif + + + +#ifdef SQLITE_OMIT_SHARED_CACHE + /* + ** The functions querySharedCacheTableLock(), setSharedCacheTableLock(), + ** and clearAllSharedCacheTableLocks() + ** manipulate entries in the BtShared.pLock linked list used to store + ** shared-cache table level locks. If the library is compiled with the + ** shared-cache feature disabled, then there is only ever one user + ** of each BtShared structure and so this locking is not necessary. + ** So define the lock related functions as no-ops. + */ + #define querySharedCacheTableLock(a,b,c) SQLITE_OK + #define setSharedCacheTableLock(a,b,c) SQLITE_OK + #define clearAllSharedCacheTableLocks(a) + #define downgradeAllSharedCacheTableLocks(a) + #define hasSharedCacheTableLock(a,b,c,d) 1 + #define hasReadConflicts(a, b) 0 +#endif + +#ifdef SQLITE_DEBUG +/* +** Return and reset the seek counter for a Btree object. +*/ +SQLITE_PRIVATE sqlite3_uint64 sqlite3BtreeSeekCount(Btree *pBt){ + u64 n = pBt->nSeek; + pBt->nSeek = 0; + return n; +} +#endif + +/* +** Implementation of the SQLITE_CORRUPT_PAGE() macro. Takes a single +** (MemPage*) as an argument. The (MemPage*) must not be NULL. +** +** If SQLITE_DEBUG is not defined, then this macro is equivalent to +** SQLITE_CORRUPT_BKPT. Or, if SQLITE_DEBUG is set, then the log message +** normally produced as a side-effect of SQLITE_CORRUPT_BKPT is augmented +** with the page number and filename associated with the (MemPage*). +*/ +#ifdef SQLITE_DEBUG +int corruptPageError(int lineno, MemPage *p){ + char *zMsg; + sqlite3BeginBenignMalloc(); + zMsg = sqlite3_mprintf("database corruption page %u of %s", + p->pgno, sqlite3PagerFilename(p->pBt->pPager, 0) + ); + sqlite3EndBenignMalloc(); + if( zMsg ){ + sqlite3ReportError(SQLITE_CORRUPT, lineno, zMsg); + } + sqlite3_free(zMsg); + return SQLITE_CORRUPT_BKPT; +} +# define SQLITE_CORRUPT_PAGE(pMemPage) corruptPageError(__LINE__, pMemPage) +#else +# define SQLITE_CORRUPT_PAGE(pMemPage) SQLITE_CORRUPT_PGNO(pMemPage->pgno) +#endif + +/* Default value for SHARED_LOCK_TRACE macro if shared-cache is disabled +** or if the lock tracking is disabled. This is always the value for +** release builds. +*/ +#define SHARED_LOCK_TRACE(X,MSG,TAB,TYPE) /*no-op*/ + +#ifndef SQLITE_OMIT_SHARED_CACHE + +#if 0 +/* ^---- Change to 1 and recompile to enable shared-lock tracing +** for debugging purposes. +** +** Print all shared-cache locks on a BtShared. Debugging use only. +*/ +static void sharedLockTrace( + BtShared *pBt, + const char *zMsg, + int iRoot, + int eLockType +){ + BtLock *pLock; + if( iRoot>0 ){ + printf("%s-%p %u%s:", zMsg, pBt, iRoot, eLockType==READ_LOCK?"R":"W"); + }else{ + printf("%s-%p:", zMsg, pBt); + } + for(pLock=pBt->pLock; pLock; pLock=pLock->pNext){ + printf(" %p/%u%s", pLock->pBtree, pLock->iTable, + pLock->eLock==READ_LOCK ? "R" : "W"); + while( pLock->pNext && pLock->pBtree==pLock->pNext->pBtree ){ + pLock = pLock->pNext; + printf(",%u%s", pLock->iTable, pLock->eLock==READ_LOCK ? "R" : "W"); + } + } + printf("\n"); + fflush(stdout); +} +#undef SHARED_LOCK_TRACE +#define SHARED_LOCK_TRACE(X,MSG,TAB,TYPE) sharedLockTrace(X,MSG,TAB,TYPE) +#endif /* Shared-lock tracing */ + +#ifdef SQLITE_DEBUG +/* +**** This function is only used as part of an assert() statement. *** +** +** Check to see if pBtree holds the required locks to read or write to the +** table with root page iRoot. Return 1 if it does and 0 if not. +** +** For example, when writing to a table with root-page iRoot via +** Btree connection pBtree: +** +** assert( hasSharedCacheTableLock(pBtree, iRoot, 0, WRITE_LOCK) ); +** +** When writing to an index that resides in a sharable database, the +** caller should have first obtained a lock specifying the root page of +** the corresponding table. This makes things a bit more complicated, +** as this module treats each table as a separate structure. To determine +** the table corresponding to the index being written, this +** function has to search through the database schema. +** +** Instead of a lock on the table/index rooted at page iRoot, the caller may +** hold a write-lock on the schema table (root page 1). This is also +** acceptable. +*/ +static int hasSharedCacheTableLock( + Btree *pBtree, /* Handle that must hold lock */ + Pgno iRoot, /* Root page of b-tree */ + int isIndex, /* True if iRoot is the root of an index b-tree */ + int eLockType /* Required lock type (READ_LOCK or WRITE_LOCK) */ +){ + Schema *pSchema = (Schema *)pBtree->pBt->pSchema; + Pgno iTab = 0; + BtLock *pLock; + + /* If this database is not shareable, or if the client is reading + ** and has the read-uncommitted flag set, then no lock is required. + ** Return true immediately. + */ + if( (pBtree->sharable==0) + || (eLockType==READ_LOCK && (pBtree->db->flags & SQLITE_ReadUncommit)) + ){ + return 1; + } + + /* If the client is reading or writing an index and the schema is + ** not loaded, then it is too difficult to actually check to see if + ** the correct locks are held. So do not bother - just return true. + ** This case does not come up very often anyhow. + */ + if( isIndex && (!pSchema || (pSchema->schemaFlags&DB_SchemaLoaded)==0) ){ + return 1; + } + + /* Figure out the root-page that the lock should be held on. For table + ** b-trees, this is just the root page of the b-tree being read or + ** written. For index b-trees, it is the root page of the associated + ** table. */ + if( isIndex ){ + HashElem *p; + int bSeen = 0; + for(p=sqliteHashFirst(&pSchema->idxHash); p; p=sqliteHashNext(p)){ + Index *pIdx = (Index *)sqliteHashData(p); + if( pIdx->tnum==iRoot ){ + if( bSeen ){ + /* Two or more indexes share the same root page. There must + ** be imposter tables. So just return true. The assert is not + ** useful in that case. */ + return 1; + } + iTab = pIdx->pTable->tnum; + bSeen = 1; + } + } + }else{ + iTab = iRoot; + } + + SHARED_LOCK_TRACE(pBtree->pBt,"hasLock",iRoot,eLockType); + + /* Search for the required lock. Either a write-lock on root-page iTab, a + ** write-lock on the schema table, or (if the client is reading) a + ** read-lock on iTab will suffice. Return 1 if any of these are found. */ + for(pLock=pBtree->pBt->pLock; pLock; pLock=pLock->pNext){ + if( pLock->pBtree==pBtree + && (pLock->iTable==iTab || (pLock->eLock==WRITE_LOCK && pLock->iTable==1)) + && pLock->eLock>=eLockType + ){ + return 1; + } + } + + /* Failed to find the required lock. */ + return 0; +} +#endif /* SQLITE_DEBUG */ + +#ifdef SQLITE_DEBUG +/* +**** This function may be used as part of assert() statements only. **** +** +** Return true if it would be illegal for pBtree to write into the +** table or index rooted at iRoot because other shared connections are +** simultaneously reading that same table or index. +** +** It is illegal for pBtree to write if some other Btree object that +** shares the same BtShared object is currently reading or writing +** the iRoot table. Except, if the other Btree object has the +** read-uncommitted flag set, then it is OK for the other object to +** have a read cursor. +** +** For example, before writing to any part of the table or index +** rooted at page iRoot, one should call: +** +** assert( !hasReadConflicts(pBtree, iRoot) ); +*/ +static int hasReadConflicts(Btree *pBtree, Pgno iRoot){ + BtCursor *p; + for(p=pBtree->pBt->pCursor; p; p=p->pNext){ + if( p->pgnoRoot==iRoot + && p->pBtree!=pBtree + && 0==(p->pBtree->db->flags & SQLITE_ReadUncommit) + ){ + return 1; + } + } + return 0; +} +#endif /* #ifdef SQLITE_DEBUG */ + +/* +** Query to see if Btree handle p may obtain a lock of type eLock +** (READ_LOCK or WRITE_LOCK) on the table with root-page iTab. Return +** SQLITE_OK if the lock may be obtained (by calling +** setSharedCacheTableLock()), or SQLITE_LOCKED if not. +*/ +static int querySharedCacheTableLock(Btree *p, Pgno iTab, u8 eLock){ + BtShared *pBt = p->pBt; + BtLock *pIter; + + assert( sqlite3BtreeHoldsMutex(p) ); + assert( eLock==READ_LOCK || eLock==WRITE_LOCK ); + assert( p->db!=0 ); + assert( !(p->db->flags&SQLITE_ReadUncommit)||eLock==WRITE_LOCK||iTab==1 ); + + /* If requesting a write-lock, then the Btree must have an open write + ** transaction on this file. And, obviously, for this to be so there + ** must be an open write transaction on the file itself. + */ + assert( eLock==READ_LOCK || (p==pBt->pWriter && p->inTrans==TRANS_WRITE) ); + assert( eLock==READ_LOCK || pBt->inTransaction==TRANS_WRITE ); + + /* This routine is a no-op if the shared-cache is not enabled */ + if( !p->sharable ){ + return SQLITE_OK; + } + + /* If some other connection is holding an exclusive lock, the + ** requested lock may not be obtained. + */ + if( pBt->pWriter!=p && (pBt->btsFlags & BTS_EXCLUSIVE)!=0 ){ + sqlite3ConnectionBlocked(p->db, pBt->pWriter->db); + return SQLITE_LOCKED_SHAREDCACHE; + } + + for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){ + /* The condition (pIter->eLock!=eLock) in the following if(...) + ** statement is a simplification of: + ** + ** (eLock==WRITE_LOCK || pIter->eLock==WRITE_LOCK) + ** + ** since we know that if eLock==WRITE_LOCK, then no other connection + ** may hold a WRITE_LOCK on any table in this file (since there can + ** only be a single writer). + */ + assert( pIter->eLock==READ_LOCK || pIter->eLock==WRITE_LOCK ); + assert( eLock==READ_LOCK || pIter->pBtree==p || pIter->eLock==READ_LOCK); + if( pIter->pBtree!=p && pIter->iTable==iTab && pIter->eLock!=eLock ){ + sqlite3ConnectionBlocked(p->db, pIter->pBtree->db); + if( eLock==WRITE_LOCK ){ + assert( p==pBt->pWriter ); + pBt->btsFlags |= BTS_PENDING; + } + return SQLITE_LOCKED_SHAREDCACHE; + } + } + return SQLITE_OK; +} +#endif /* !SQLITE_OMIT_SHARED_CACHE */ + +#ifndef SQLITE_OMIT_SHARED_CACHE +/* +** Add a lock on the table with root-page iTable to the shared-btree used +** by Btree handle p. Parameter eLock must be either READ_LOCK or +** WRITE_LOCK. +** +** This function assumes the following: +** +** (a) The specified Btree object p is connected to a sharable +** database (one with the BtShared.sharable flag set), and +** +** (b) No other Btree objects hold a lock that conflicts +** with the requested lock (i.e. querySharedCacheTableLock() has +** already been called and returned SQLITE_OK). +** +** SQLITE_OK is returned if the lock is added successfully. SQLITE_NOMEM +** is returned if a malloc attempt fails. +*/ +static int setSharedCacheTableLock(Btree *p, Pgno iTable, u8 eLock){ + BtShared *pBt = p->pBt; + BtLock *pLock = 0; + BtLock *pIter; + + SHARED_LOCK_TRACE(pBt,"setLock", iTable, eLock); + + assert( sqlite3BtreeHoldsMutex(p) ); + assert( eLock==READ_LOCK || eLock==WRITE_LOCK ); + assert( p->db!=0 ); + + /* A connection with the read-uncommitted flag set will never try to + ** obtain a read-lock using this function. The only read-lock obtained + ** by a connection in read-uncommitted mode is on the sqlite_schema + ** table, and that lock is obtained in BtreeBeginTrans(). */ + assert( 0==(p->db->flags&SQLITE_ReadUncommit) || eLock==WRITE_LOCK ); + + /* This function should only be called on a sharable b-tree after it + ** has been determined that no other b-tree holds a conflicting lock. */ + assert( p->sharable ); + assert( SQLITE_OK==querySharedCacheTableLock(p, iTable, eLock) ); + + /* First search the list for an existing lock on this table. */ + for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){ + if( pIter->iTable==iTable && pIter->pBtree==p ){ + pLock = pIter; + break; + } + } + + /* If the above search did not find a BtLock struct associating Btree p + ** with table iTable, allocate one and link it into the list. + */ + if( !pLock ){ + pLock = (BtLock *)sqlite3MallocZero(sizeof(BtLock)); + if( !pLock ){ + return SQLITE_NOMEM_BKPT; + } + pLock->iTable = iTable; + pLock->pBtree = p; + pLock->pNext = pBt->pLock; + pBt->pLock = pLock; + } + + /* Set the BtLock.eLock variable to the maximum of the current lock + ** and the requested lock. This means if a write-lock was already held + ** and a read-lock requested, we don't incorrectly downgrade the lock. + */ + assert( WRITE_LOCK>READ_LOCK ); + if( eLock>pLock->eLock ){ + pLock->eLock = eLock; + } + + return SQLITE_OK; +} +#endif /* !SQLITE_OMIT_SHARED_CACHE */ + +#ifndef SQLITE_OMIT_SHARED_CACHE +/* +** Release all the table locks (locks obtained via calls to +** the setSharedCacheTableLock() procedure) held by Btree object p. +** +** This function assumes that Btree p has an open read or write +** transaction. If it does not, then the BTS_PENDING flag +** may be incorrectly cleared. +*/ +static void clearAllSharedCacheTableLocks(Btree *p){ + BtShared *pBt = p->pBt; + BtLock **ppIter = &pBt->pLock; + + assert( sqlite3BtreeHoldsMutex(p) ); + assert( p->sharable || 0==*ppIter ); + assert( p->inTrans>0 ); + + SHARED_LOCK_TRACE(pBt, "clearAllLocks", 0, 0); + + while( *ppIter ){ + BtLock *pLock = *ppIter; + assert( (pBt->btsFlags & BTS_EXCLUSIVE)==0 || pBt->pWriter==pLock->pBtree ); + assert( pLock->pBtree->inTrans>=pLock->eLock ); + if( pLock->pBtree==p ){ + *ppIter = pLock->pNext; + assert( pLock->iTable!=1 || pLock==&p->lock ); + if( pLock->iTable!=1 ){ + sqlite3_free(pLock); + } + }else{ + ppIter = &pLock->pNext; + } + } + + assert( (pBt->btsFlags & BTS_PENDING)==0 || pBt->pWriter ); + if( pBt->pWriter==p ){ + pBt->pWriter = 0; + pBt->btsFlags &= ~(BTS_EXCLUSIVE|BTS_PENDING); + }else if( pBt->nTransaction==2 ){ + /* This function is called when Btree p is concluding its + ** transaction. If there currently exists a writer, and p is not + ** that writer, then the number of locks held by connections other + ** than the writer must be about to drop to zero. In this case + ** set the BTS_PENDING flag to 0. + ** + ** If there is not currently a writer, then BTS_PENDING must + ** be zero already. So this next line is harmless in that case. + */ + pBt->btsFlags &= ~BTS_PENDING; + } +} + +/* +** This function changes all write-locks held by Btree p into read-locks. +*/ +static void downgradeAllSharedCacheTableLocks(Btree *p){ + BtShared *pBt = p->pBt; + + SHARED_LOCK_TRACE(pBt, "downgradeLocks", 0, 0); + + if( pBt->pWriter==p ){ + BtLock *pLock; + pBt->pWriter = 0; + pBt->btsFlags &= ~(BTS_EXCLUSIVE|BTS_PENDING); + for(pLock=pBt->pLock; pLock; pLock=pLock->pNext){ + assert( pLock->eLock==READ_LOCK || pLock->pBtree==p ); + pLock->eLock = READ_LOCK; + } + } +} + +#endif /* SQLITE_OMIT_SHARED_CACHE */ + +static void releasePage(MemPage *pPage); /* Forward reference */ +static void releasePageOne(MemPage *pPage); /* Forward reference */ +static void releasePageNotNull(MemPage *pPage); /* Forward reference */ + +/* +***** This routine is used inside of assert() only **** +** +** Verify that the cursor holds the mutex on its BtShared +*/ +#ifdef SQLITE_DEBUG +static int cursorHoldsMutex(BtCursor *p){ + return sqlite3_mutex_held(p->pBt->mutex); +} + +/* Verify that the cursor and the BtShared agree about what is the current +** database connetion. This is important in shared-cache mode. If the database +** connection pointers get out-of-sync, it is possible for routines like +** btreeInitPage() to reference an stale connection pointer that references a +** a connection that has already closed. This routine is used inside assert() +** statements only and for the purpose of double-checking that the btree code +** does keep the database connection pointers up-to-date. +*/ +static int cursorOwnsBtShared(BtCursor *p){ + assert( cursorHoldsMutex(p) ); + return (p->pBtree->db==p->pBt->db); +} +#endif + +/* +** Invalidate the overflow cache of the cursor passed as the first argument. +** on the shared btree structure pBt. +*/ +#define invalidateOverflowCache(pCur) (pCur->curFlags &= ~BTCF_ValidOvfl) + +/* +** Invalidate the overflow page-list cache for all cursors opened +** on the shared btree structure pBt. +*/ +static void invalidateAllOverflowCache(BtShared *pBt){ + BtCursor *p; + assert( sqlite3_mutex_held(pBt->mutex) ); + for(p=pBt->pCursor; p; p=p->pNext){ + invalidateOverflowCache(p); + } +} + +#ifndef SQLITE_OMIT_INCRBLOB +/* +** This function is called before modifying the contents of a table +** to invalidate any incrblob cursors that are open on the +** row or one of the rows being modified. +** +** If argument isClearTable is true, then the entire contents of the +** table is about to be deleted. In this case invalidate all incrblob +** cursors open on any row within the table with root-page pgnoRoot. +** +** Otherwise, if argument isClearTable is false, then the row with +** rowid iRow is being replaced or deleted. In this case invalidate +** only those incrblob cursors open on that specific row. +*/ +static void invalidateIncrblobCursors( + Btree *pBtree, /* The database file to check */ + Pgno pgnoRoot, /* The table that might be changing */ + i64 iRow, /* The rowid that might be changing */ + int isClearTable /* True if all rows are being deleted */ +){ + BtCursor *p; + assert( pBtree->hasIncrblobCur ); + assert( sqlite3BtreeHoldsMutex(pBtree) ); + pBtree->hasIncrblobCur = 0; + for(p=pBtree->pBt->pCursor; p; p=p->pNext){ + if( (p->curFlags & BTCF_Incrblob)!=0 ){ + pBtree->hasIncrblobCur = 1; + if( p->pgnoRoot==pgnoRoot && (isClearTable || p->info.nKey==iRow) ){ + p->eState = CURSOR_INVALID; + } + } + } +} + +#else + /* Stub function when INCRBLOB is omitted */ + #define invalidateIncrblobCursors(w,x,y,z) +#endif /* SQLITE_OMIT_INCRBLOB */ + +/* +** Set bit pgno of the BtShared.pHasContent bitvec. This is called +** when a page that previously contained data becomes a free-list leaf +** page. +** +** The BtShared.pHasContent bitvec exists to work around an obscure +** bug caused by the interaction of two useful IO optimizations surrounding +** free-list leaf pages: +** +** 1) When all data is deleted from a page and the page becomes +** a free-list leaf page, the page is not written to the database +** (as free-list leaf pages contain no meaningful data). Sometimes +** such a page is not even journalled (as it will not be modified, +** why bother journalling it?). +** +** 2) When a free-list leaf page is reused, its content is not read +** from the database or written to the journal file (why should it +** be, if it is not at all meaningful?). +** +** By themselves, these optimizations work fine and provide a handy +** performance boost to bulk delete or insert operations. However, if +** a page is moved to the free-list and then reused within the same +** transaction, a problem comes up. If the page is not journalled when +** it is moved to the free-list and it is also not journalled when it +** is extracted from the free-list and reused, then the original data +** may be lost. In the event of a rollback, it may not be possible +** to restore the database to its original configuration. +** +** The solution is the BtShared.pHasContent bitvec. Whenever a page is +** moved to become a free-list leaf page, the corresponding bit is +** set in the bitvec. Whenever a leaf page is extracted from the free-list, +** optimization 2 above is omitted if the corresponding bit is already +** set in BtShared.pHasContent. The contents of the bitvec are cleared +** at the end of every transaction. +*/ +static int btreeSetHasContent(BtShared *pBt, Pgno pgno){ + int rc = SQLITE_OK; + if( !pBt->pHasContent ){ + assert( pgno<=pBt->nPage ); + pBt->pHasContent = sqlite3BitvecCreate(pBt->nPage); + if( !pBt->pHasContent ){ + rc = SQLITE_NOMEM_BKPT; + } + } + if( rc==SQLITE_OK && pgno<=sqlite3BitvecSize(pBt->pHasContent) ){ + rc = sqlite3BitvecSet(pBt->pHasContent, pgno); + } + return rc; +} + +/* +** Query the BtShared.pHasContent vector. +** +** This function is called when a free-list leaf page is removed from the +** free-list for reuse. It returns false if it is safe to retrieve the +** page from the pager layer with the 'no-content' flag set. True otherwise. +*/ +static int btreeGetHasContent(BtShared *pBt, Pgno pgno){ + Bitvec *p = pBt->pHasContent; + return p && (pgno>sqlite3BitvecSize(p) || sqlite3BitvecTestNotNull(p, pgno)); +} + +/* +** Clear (destroy) the BtShared.pHasContent bitvec. This should be +** invoked at the conclusion of each write-transaction. +*/ +static void btreeClearHasContent(BtShared *pBt){ + sqlite3BitvecDestroy(pBt->pHasContent); + pBt->pHasContent = 0; +} + +/* +** Release all of the apPage[] pages for a cursor. +*/ +static void btreeReleaseAllCursorPages(BtCursor *pCur){ + int i; + if( pCur->iPage>=0 ){ + for(i=0; iiPage; i++){ + releasePageNotNull(pCur->apPage[i]); + } + releasePageNotNull(pCur->pPage); + pCur->iPage = -1; + } +} + +/* +** The cursor passed as the only argument must point to a valid entry +** when this function is called (i.e. have eState==CURSOR_VALID). This +** function saves the current cursor key in variables pCur->nKey and +** pCur->pKey. SQLITE_OK is returned if successful or an SQLite error +** code otherwise. +** +** If the cursor is open on an intkey table, then the integer key +** (the rowid) is stored in pCur->nKey and pCur->pKey is left set to +** NULL. If the cursor is open on a non-intkey table, then pCur->pKey is +** set to point to a malloced buffer pCur->nKey bytes in size containing +** the key. +*/ +static int saveCursorKey(BtCursor *pCur){ + int rc = SQLITE_OK; + assert( CURSOR_VALID==pCur->eState ); + assert( 0==pCur->pKey ); + assert( cursorHoldsMutex(pCur) ); + + if( pCur->curIntKey ){ + /* Only the rowid is required for a table btree */ + pCur->nKey = sqlite3BtreeIntegerKey(pCur); + }else{ + /* For an index btree, save the complete key content. It is possible + ** that the current key is corrupt. In that case, it is possible that + ** the sqlite3VdbeRecordUnpack() function may overread the buffer by + ** up to the size of 1 varint plus 1 8-byte value when the cursor + ** position is restored. Hence the 17 bytes of padding allocated + ** below. */ + void *pKey; + pCur->nKey = sqlite3BtreePayloadSize(pCur); + pKey = sqlite3Malloc( ((i64)pCur->nKey) + 9 + 8 ); + if( pKey ){ + rc = sqlite3BtreePayload(pCur, 0, (int)pCur->nKey, pKey); + if( rc==SQLITE_OK ){ + memset(((u8*)pKey)+pCur->nKey, 0, 9+8); + pCur->pKey = pKey; + }else{ + sqlite3_free(pKey); + } + }else{ + rc = SQLITE_NOMEM_BKPT; + } + } + assert( !pCur->curIntKey || !pCur->pKey ); + return rc; +} + +/* +** Save the current cursor position in the variables BtCursor.nKey +** and BtCursor.pKey. The cursor's state is set to CURSOR_REQUIRESEEK. +** +** The caller must ensure that the cursor is valid (has eState==CURSOR_VALID) +** prior to calling this routine. +*/ +static int saveCursorPosition(BtCursor *pCur){ + int rc; + + assert( CURSOR_VALID==pCur->eState || CURSOR_SKIPNEXT==pCur->eState ); + assert( 0==pCur->pKey ); + assert( cursorHoldsMutex(pCur) ); + + if( pCur->curFlags & BTCF_Pinned ){ + return SQLITE_CONSTRAINT_PINNED; + } + if( pCur->eState==CURSOR_SKIPNEXT ){ + pCur->eState = CURSOR_VALID; + }else{ + pCur->skipNext = 0; + } + + rc = saveCursorKey(pCur); + if( rc==SQLITE_OK ){ + btreeReleaseAllCursorPages(pCur); + pCur->eState = CURSOR_REQUIRESEEK; + } + + pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl|BTCF_AtLast); + return rc; +} + +/* Forward reference */ +static int SQLITE_NOINLINE saveCursorsOnList(BtCursor*,Pgno,BtCursor*); + +/* +** Save the positions of all cursors (except pExcept) that are open on +** the table with root-page iRoot. "Saving the cursor position" means that +** the location in the btree is remembered in such a way that it can be +** moved back to the same spot after the btree has been modified. This +** routine is called just before cursor pExcept is used to modify the +** table, for example in BtreeDelete() or BtreeInsert(). +** +** If there are two or more cursors on the same btree, then all such +** cursors should have their BTCF_Multiple flag set. The btreeCursor() +** routine enforces that rule. This routine only needs to be called in +** the uncommon case when pExpect has the BTCF_Multiple flag set. +** +** If pExpect!=NULL and if no other cursors are found on the same root-page, +** then the BTCF_Multiple flag on pExpect is cleared, to avoid another +** pointless call to this routine. +** +** Implementation note: This routine merely checks to see if any cursors +** need to be saved. It calls out to saveCursorsOnList() in the (unusual) +** event that cursors are in need to being saved. +*/ +static int saveAllCursors(BtShared *pBt, Pgno iRoot, BtCursor *pExcept){ + BtCursor *p; + assert( sqlite3_mutex_held(pBt->mutex) ); + assert( pExcept==0 || pExcept->pBt==pBt ); + for(p=pBt->pCursor; p; p=p->pNext){ + if( p!=pExcept && (0==iRoot || p->pgnoRoot==iRoot) ) break; + } + if( p ) return saveCursorsOnList(p, iRoot, pExcept); + if( pExcept ) pExcept->curFlags &= ~BTCF_Multiple; + return SQLITE_OK; +} + +/* This helper routine to saveAllCursors does the actual work of saving +** the cursors if and when a cursor is found that actually requires saving. +** The common case is that no cursors need to be saved, so this routine is +** broken out from its caller to avoid unnecessary stack pointer movement. +*/ +static int SQLITE_NOINLINE saveCursorsOnList( + BtCursor *p, /* The first cursor that needs saving */ + Pgno iRoot, /* Only save cursor with this iRoot. Save all if zero */ + BtCursor *pExcept /* Do not save this cursor */ +){ + do{ + if( p!=pExcept && (0==iRoot || p->pgnoRoot==iRoot) ){ + if( p->eState==CURSOR_VALID || p->eState==CURSOR_SKIPNEXT ){ + int rc = saveCursorPosition(p); + if( SQLITE_OK!=rc ){ + return rc; + } + }else{ + testcase( p->iPage>=0 ); + btreeReleaseAllCursorPages(p); + } + } + p = p->pNext; + }while( p ); + return SQLITE_OK; +} + +/* +** Clear the current cursor position. +*/ +SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *pCur){ + assert( cursorHoldsMutex(pCur) ); + sqlite3_free(pCur->pKey); + pCur->pKey = 0; + pCur->eState = CURSOR_INVALID; +} + +/* +** In this version of BtreeMoveto, pKey is a packed index record +** such as is generated by the OP_MakeRecord opcode. Unpack the +** record and then call sqlite3BtreeIndexMoveto() to do the work. +*/ +static int btreeMoveto( + BtCursor *pCur, /* Cursor open on the btree to be searched */ + const void *pKey, /* Packed key if the btree is an index */ + i64 nKey, /* Integer key for tables. Size of pKey for indices */ + int bias, /* Bias search to the high end */ + int *pRes /* Write search results here */ +){ + int rc; /* Status code */ + UnpackedRecord *pIdxKey; /* Unpacked index key */ + + if( pKey ){ + KeyInfo *pKeyInfo = pCur->pKeyInfo; + assert( nKey==(i64)(int)nKey ); + pIdxKey = sqlite3VdbeAllocUnpackedRecord(pKeyInfo); + if( pIdxKey==0 ) return SQLITE_NOMEM_BKPT; + sqlite3VdbeRecordUnpack((int)nKey, pKey, pIdxKey); + if( pIdxKey->nField==0 || pIdxKey->nField>pKeyInfo->nAllField ){ + rc = SQLITE_CORRUPT_BKPT; + }else{ + rc = sqlite3BtreeIndexMoveto(pCur, pIdxKey, pRes); + } + sqlite3DbFree(pCur->pKeyInfo->db, pIdxKey); + }else{ + pIdxKey = 0; + rc = sqlite3BtreeTableMoveto(pCur, nKey, bias, pRes); + } + return rc; +} + +/* +** Restore the cursor to the position it was in (or as close to as possible) +** when saveCursorPosition() was called. Note that this call deletes the +** saved position info stored by saveCursorPosition(), so there can be +** at most one effective restoreCursorPosition() call after each +** saveCursorPosition(). +*/ +static int btreeRestoreCursorPosition(BtCursor *pCur){ + int rc; + int skipNext = 0; + assert( cursorOwnsBtShared(pCur) ); + assert( pCur->eState>=CURSOR_REQUIRESEEK ); + if( pCur->eState==CURSOR_FAULT ){ + return pCur->skipNext; + } + pCur->eState = CURSOR_INVALID; + if( sqlite3FaultSim(410) ){ + rc = SQLITE_IOERR; + }else{ + rc = btreeMoveto(pCur, pCur->pKey, pCur->nKey, 0, &skipNext); + } + if( rc==SQLITE_OK ){ + sqlite3_free(pCur->pKey); + pCur->pKey = 0; + assert( pCur->eState==CURSOR_VALID || pCur->eState==CURSOR_INVALID ); + if( skipNext ) pCur->skipNext = skipNext; + if( pCur->skipNext && pCur->eState==CURSOR_VALID ){ + pCur->eState = CURSOR_SKIPNEXT; + } + } + return rc; +} + +#define restoreCursorPosition(p) \ + (p->eState>=CURSOR_REQUIRESEEK ? \ + btreeRestoreCursorPosition(p) : \ + SQLITE_OK) + +/* +** Determine whether or not a cursor has moved from the position where +** it was last placed, or has been invalidated for any other reason. +** Cursors can move when the row they are pointing at is deleted out +** from under them, for example. Cursor might also move if a btree +** is rebalanced. +** +** Calling this routine with a NULL cursor pointer returns false. +** +** Use the separate sqlite3BtreeCursorRestore() routine to restore a cursor +** back to where it ought to be if this routine returns true. +*/ +SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor *pCur){ + assert( EIGHT_BYTE_ALIGNMENT(pCur) + || pCur==sqlite3BtreeFakeValidCursor() ); + assert( offsetof(BtCursor, eState)==0 ); + assert( sizeof(pCur->eState)==1 ); + return CURSOR_VALID != *(u8*)pCur; +} + +/* +** Return a pointer to a fake BtCursor object that will always answer +** false to the sqlite3BtreeCursorHasMoved() routine above. The fake +** cursor returned must not be used with any other Btree interface. +*/ +SQLITE_PRIVATE BtCursor *sqlite3BtreeFakeValidCursor(void){ + static u8 fakeCursor = CURSOR_VALID; + assert( offsetof(BtCursor, eState)==0 ); + return (BtCursor*)&fakeCursor; +} + +/* +** This routine restores a cursor back to its original position after it +** has been moved by some outside activity (such as a btree rebalance or +** a row having been deleted out from under the cursor). +** +** On success, the *pDifferentRow parameter is false if the cursor is left +** pointing at exactly the same row. *pDifferntRow is the row the cursor +** was pointing to has been deleted, forcing the cursor to point to some +** nearby row. +** +** This routine should only be called for a cursor that just returned +** TRUE from sqlite3BtreeCursorHasMoved(). +*/ +SQLITE_PRIVATE int sqlite3BtreeCursorRestore(BtCursor *pCur, int *pDifferentRow){ + int rc; + + assert( pCur!=0 ); + assert( pCur->eState!=CURSOR_VALID ); + rc = restoreCursorPosition(pCur); + if( rc ){ + *pDifferentRow = 1; + return rc; + } + if( pCur->eState!=CURSOR_VALID ){ + *pDifferentRow = 1; + }else{ + *pDifferentRow = 0; + } + return SQLITE_OK; +} + +#ifdef SQLITE_ENABLE_CURSOR_HINTS +/* +** Provide hints to the cursor. The particular hint given (and the type +** and number of the varargs parameters) is determined by the eHintType +** parameter. See the definitions of the BTREE_HINT_* macros for details. +*/ +SQLITE_PRIVATE void sqlite3BtreeCursorHint(BtCursor *pCur, int eHintType, ...){ + /* Used only by system that substitute their own storage engine */ +#ifdef SQLITE_DEBUG + if( ALWAYS(eHintType==BTREE_HINT_RANGE) ){ + va_list ap; + Expr *pExpr; + Walker w; + memset(&w, 0, sizeof(w)); + w.xExprCallback = sqlite3CursorRangeHintExprCheck; + va_start(ap, eHintType); + pExpr = va_arg(ap, Expr*); + w.u.aMem = va_arg(ap, Mem*); + va_end(ap); + assert( pExpr!=0 ); + assert( w.u.aMem!=0 ); + sqlite3WalkExpr(&w, pExpr); + } +#endif /* SQLITE_DEBUG */ +} +#endif /* SQLITE_ENABLE_CURSOR_HINTS */ + + +/* +** Provide flag hints to the cursor. +*/ +SQLITE_PRIVATE void sqlite3BtreeCursorHintFlags(BtCursor *pCur, unsigned x){ + assert( x==BTREE_SEEK_EQ || x==BTREE_BULKLOAD || x==0 ); + pCur->hints = (u8)x; +} + + +#ifndef SQLITE_OMIT_AUTOVACUUM +/* +** Given a page number of a regular database page, return the page +** number for the pointer-map page that contains the entry for the +** input page number. +** +** Return 0 (not a valid page) for pgno==1 since there is +** no pointer map associated with page 1. The integrity_check logic +** requires that ptrmapPageno(*,1)!=1. +*/ +static Pgno ptrmapPageno(BtShared *pBt, Pgno pgno){ + int nPagesPerMapPage; + Pgno iPtrMap, ret; + assert( sqlite3_mutex_held(pBt->mutex) ); + if( pgno<2 ) return 0; + nPagesPerMapPage = (pBt->usableSize/5)+1; + iPtrMap = (pgno-2)/nPagesPerMapPage; + ret = (iPtrMap*nPagesPerMapPage) + 2; + if( ret==PENDING_BYTE_PAGE(pBt) ){ + ret++; + } + return ret; +} + +/* +** Write an entry into the pointer map. +** +** This routine updates the pointer map entry for page number 'key' +** so that it maps to type 'eType' and parent page number 'pgno'. +** +** If *pRC is initially non-zero (non-SQLITE_OK) then this routine is +** a no-op. If an error occurs, the appropriate error code is written +** into *pRC. +*/ +static void ptrmapPut(BtShared *pBt, Pgno key, u8 eType, Pgno parent, int *pRC){ + DbPage *pDbPage; /* The pointer map page */ + u8 *pPtrmap; /* The pointer map data */ + Pgno iPtrmap; /* The pointer map page number */ + int offset; /* Offset in pointer map page */ + int rc; /* Return code from subfunctions */ + + if( *pRC ) return; + + assert( sqlite3_mutex_held(pBt->mutex) ); + /* The super-journal page number must never be used as a pointer map page */ + assert( 0==PTRMAP_ISPAGE(pBt, PENDING_BYTE_PAGE(pBt)) ); + + assert( pBt->autoVacuum ); + if( key==0 ){ + *pRC = SQLITE_CORRUPT_BKPT; + return; + } + iPtrmap = PTRMAP_PAGENO(pBt, key); + rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage, 0); + if( rc!=SQLITE_OK ){ + *pRC = rc; + return; + } + if( ((char*)sqlite3PagerGetExtra(pDbPage))[0]!=0 ){ + /* The first byte of the extra data is the MemPage.isInit byte. + ** If that byte is set, it means this page is also being used + ** as a btree page. */ + *pRC = SQLITE_CORRUPT_BKPT; + goto ptrmap_exit; + } + offset = PTRMAP_PTROFFSET(iPtrmap, key); + if( offset<0 ){ + *pRC = SQLITE_CORRUPT_BKPT; + goto ptrmap_exit; + } + assert( offset <= (int)pBt->usableSize-5 ); + pPtrmap = (u8 *)sqlite3PagerGetData(pDbPage); + + if( eType!=pPtrmap[offset] || get4byte(&pPtrmap[offset+1])!=parent ){ + TRACE(("PTRMAP_UPDATE: %u->(%u,%u)\n", key, eType, parent)); + *pRC= rc = sqlite3PagerWrite(pDbPage); + if( rc==SQLITE_OK ){ + pPtrmap[offset] = eType; + put4byte(&pPtrmap[offset+1], parent); + } + } + +ptrmap_exit: + sqlite3PagerUnref(pDbPage); +} + +/* +** Read an entry from the pointer map. +** +** This routine retrieves the pointer map entry for page 'key', writing +** the type and parent page number to *pEType and *pPgno respectively. +** An error code is returned if something goes wrong, otherwise SQLITE_OK. +*/ +static int ptrmapGet(BtShared *pBt, Pgno key, u8 *pEType, Pgno *pPgno){ + DbPage *pDbPage; /* The pointer map page */ + int iPtrmap; /* Pointer map page index */ + u8 *pPtrmap; /* Pointer map page data */ + int offset; /* Offset of entry in pointer map */ + int rc; + + assert( sqlite3_mutex_held(pBt->mutex) ); + + iPtrmap = PTRMAP_PAGENO(pBt, key); + rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage, 0); + if( rc!=0 ){ + return rc; + } + pPtrmap = (u8 *)sqlite3PagerGetData(pDbPage); + + offset = PTRMAP_PTROFFSET(iPtrmap, key); + if( offset<0 ){ + sqlite3PagerUnref(pDbPage); + return SQLITE_CORRUPT_BKPT; + } + assert( offset <= (int)pBt->usableSize-5 ); + assert( pEType!=0 ); + *pEType = pPtrmap[offset]; + if( pPgno ) *pPgno = get4byte(&pPtrmap[offset+1]); + + sqlite3PagerUnref(pDbPage); + if( *pEType<1 || *pEType>5 ) return SQLITE_CORRUPT_PGNO(iPtrmap); + return SQLITE_OK; +} + +#else /* if defined SQLITE_OMIT_AUTOVACUUM */ + #define ptrmapPut(w,x,y,z,rc) + #define ptrmapGet(w,x,y,z) SQLITE_OK + #define ptrmapPutOvflPtr(x, y, z, rc) +#endif + +/* +** Given a btree page and a cell index (0 means the first cell on +** the page, 1 means the second cell, and so forth) return a pointer +** to the cell content. +** +** findCellPastPtr() does the same except it skips past the initial +** 4-byte child pointer found on interior pages, if there is one. +** +** This routine works only for pages that do not contain overflow cells. +*/ +#define findCell(P,I) \ + ((P)->aData + ((P)->maskPage & get2byteAligned(&(P)->aCellIdx[2*(I)]))) +#define findCellPastPtr(P,I) \ + ((P)->aDataOfst + ((P)->maskPage & get2byteAligned(&(P)->aCellIdx[2*(I)]))) + + +/* +** This is common tail processing for btreeParseCellPtr() and +** btreeParseCellPtrIndex() for the case when the cell does not fit entirely +** on a single B-tree page. Make necessary adjustments to the CellInfo +** structure. +*/ +static SQLITE_NOINLINE void btreeParseCellAdjustSizeForOverflow( + MemPage *pPage, /* Page containing the cell */ + u8 *pCell, /* Pointer to the cell text. */ + CellInfo *pInfo /* Fill in this structure */ +){ + /* If the payload will not fit completely on the local page, we have + ** to decide how much to store locally and how much to spill onto + ** overflow pages. The strategy is to minimize the amount of unused + ** space on overflow pages while keeping the amount of local storage + ** in between minLocal and maxLocal. + ** + ** Warning: changing the way overflow payload is distributed in any + ** way will result in an incompatible file format. + */ + int minLocal; /* Minimum amount of payload held locally */ + int maxLocal; /* Maximum amount of payload held locally */ + int surplus; /* Overflow payload available for local storage */ + + minLocal = pPage->minLocal; + maxLocal = pPage->maxLocal; + surplus = minLocal + (pInfo->nPayload - minLocal)%(pPage->pBt->usableSize-4); + testcase( surplus==maxLocal ); + testcase( surplus==maxLocal+1 ); + if( surplus <= maxLocal ){ + pInfo->nLocal = (u16)surplus; + }else{ + pInfo->nLocal = (u16)minLocal; + } + pInfo->nSize = (u16)(&pInfo->pPayload[pInfo->nLocal] - pCell) + 4; +} + +/* +** Given a record with nPayload bytes of payload stored within btree +** page pPage, return the number of bytes of payload stored locally. +*/ +static int btreePayloadToLocal(MemPage *pPage, i64 nPayload){ + int maxLocal; /* Maximum amount of payload held locally */ + maxLocal = pPage->maxLocal; + assert( nPayload>=0 ); + if( nPayload<=maxLocal ){ + return (int)nPayload; + }else{ + int minLocal; /* Minimum amount of payload held locally */ + int surplus; /* Overflow payload available for local storage */ + minLocal = pPage->minLocal; + surplus = (int)(minLocal +(nPayload - minLocal)%(pPage->pBt->usableSize-4)); + return (surplus <= maxLocal) ? surplus : minLocal; + } +} + +/* +** The following routines are implementations of the MemPage.xParseCell() +** method. +** +** Parse a cell content block and fill in the CellInfo structure. +** +** btreeParseCellPtr() => table btree leaf nodes +** btreeParseCellNoPayload() => table btree internal nodes +** btreeParseCellPtrIndex() => index btree nodes +** +** There is also a wrapper function btreeParseCell() that works for +** all MemPage types and that references the cell by index rather than +** by pointer. +*/ +static void btreeParseCellPtrNoPayload( + MemPage *pPage, /* Page containing the cell */ + u8 *pCell, /* Pointer to the cell text. */ + CellInfo *pInfo /* Fill in this structure */ +){ + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( pPage->leaf==0 ); + assert( pPage->childPtrSize==4 ); +#ifndef SQLITE_DEBUG + UNUSED_PARAMETER(pPage); +#endif + pInfo->nSize = 4 + getVarint(&pCell[4], (u64*)&pInfo->nKey); + pInfo->nPayload = 0; + pInfo->nLocal = 0; + pInfo->pPayload = 0; + return; +} +static void btreeParseCellPtr( + MemPage *pPage, /* Page containing the cell */ + u8 *pCell, /* Pointer to the cell text. */ + CellInfo *pInfo /* Fill in this structure */ +){ + u8 *pIter; /* For scanning through pCell */ + u32 nPayload; /* Number of bytes of cell payload */ + u64 iKey; /* Extracted Key value */ + + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( pPage->leaf==0 || pPage->leaf==1 ); + assert( pPage->intKeyLeaf ); + assert( pPage->childPtrSize==0 ); + pIter = pCell; + + /* The next block of code is equivalent to: + ** + ** pIter += getVarint32(pIter, nPayload); + ** + ** The code is inlined to avoid a function call. + */ + nPayload = *pIter; + if( nPayload>=0x80 ){ + u8 *pEnd = &pIter[8]; + nPayload &= 0x7f; + do{ + nPayload = (nPayload<<7) | (*++pIter & 0x7f); + }while( (*pIter)>=0x80 && pIternKey); + ** + ** The code is inlined and the loop is unrolled for performance. + ** This routine is a high-runner. + */ + iKey = *pIter; + if( iKey>=0x80 ){ + u8 x; + iKey = (iKey<<7) ^ (x = *++pIter); + if( x>=0x80 ){ + iKey = (iKey<<7) ^ (x = *++pIter); + if( x>=0x80 ){ + iKey = (iKey<<7) ^ 0x10204000 ^ (x = *++pIter); + if( x>=0x80 ){ + iKey = (iKey<<7) ^ 0x4000 ^ (x = *++pIter); + if( x>=0x80 ){ + iKey = (iKey<<7) ^ 0x4000 ^ (x = *++pIter); + if( x>=0x80 ){ + iKey = (iKey<<7) ^ 0x4000 ^ (x = *++pIter); + if( x>=0x80 ){ + iKey = (iKey<<7) ^ 0x4000 ^ (x = *++pIter); + if( x>=0x80 ){ + iKey = (iKey<<8) ^ 0x8000 ^ (*++pIter); + } + } + } + } + } + }else{ + iKey ^= 0x204000; + } + }else{ + iKey ^= 0x4000; + } + } + pIter++; + + pInfo->nKey = *(i64*)&iKey; + pInfo->nPayload = nPayload; + pInfo->pPayload = pIter; + testcase( nPayload==pPage->maxLocal ); + testcase( nPayload==(u32)pPage->maxLocal+1 ); + assert( nPayload>=0 ); + assert( pPage->maxLocal <= BT_MAX_LOCAL ); + if( nPayload<=pPage->maxLocal ){ + /* This is the (easy) common case where the entire payload fits + ** on the local page. No overflow is required. + */ + pInfo->nSize = (u16)nPayload + (u16)(pIter - pCell); + if( pInfo->nSize<4 ) pInfo->nSize = 4; + pInfo->nLocal = (u16)nPayload; + }else{ + btreeParseCellAdjustSizeForOverflow(pPage, pCell, pInfo); + } +} +static void btreeParseCellPtrIndex( + MemPage *pPage, /* Page containing the cell */ + u8 *pCell, /* Pointer to the cell text. */ + CellInfo *pInfo /* Fill in this structure */ +){ + u8 *pIter; /* For scanning through pCell */ + u32 nPayload; /* Number of bytes of cell payload */ + + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( pPage->leaf==0 || pPage->leaf==1 ); + assert( pPage->intKeyLeaf==0 ); + pIter = pCell + pPage->childPtrSize; + nPayload = *pIter; + if( nPayload>=0x80 ){ + u8 *pEnd = &pIter[8]; + nPayload &= 0x7f; + do{ + nPayload = (nPayload<<7) | (*++pIter & 0x7f); + }while( *(pIter)>=0x80 && pIternKey = nPayload; + pInfo->nPayload = nPayload; + pInfo->pPayload = pIter; + testcase( nPayload==pPage->maxLocal ); + testcase( nPayload==(u32)pPage->maxLocal+1 ); + assert( nPayload>=0 ); + assert( pPage->maxLocal <= BT_MAX_LOCAL ); + if( nPayload<=pPage->maxLocal ){ + /* This is the (easy) common case where the entire payload fits + ** on the local page. No overflow is required. + */ + pInfo->nSize = (u16)nPayload + (u16)(pIter - pCell); + if( pInfo->nSize<4 ) pInfo->nSize = 4; + pInfo->nLocal = (u16)nPayload; + }else{ + btreeParseCellAdjustSizeForOverflow(pPage, pCell, pInfo); + } +} +static void btreeParseCell( + MemPage *pPage, /* Page containing the cell */ + int iCell, /* The cell index. First cell is 0 */ + CellInfo *pInfo /* Fill in this structure */ +){ + pPage->xParseCell(pPage, findCell(pPage, iCell), pInfo); +} + +/* +** The following routines are implementations of the MemPage.xCellSize +** method. +** +** Compute the total number of bytes that a Cell needs in the cell +** data area of the btree-page. The return number includes the cell +** data header and the local payload, but not any overflow page or +** the space used by the cell pointer. +** +** cellSizePtrNoPayload() => table internal nodes +** cellSizePtrTableLeaf() => table leaf nodes +** cellSizePtr() => index internal nodes +** cellSizeIdxLeaf() => index leaf nodes +*/ +static u16 cellSizePtr(MemPage *pPage, u8 *pCell){ + u8 *pIter = pCell + 4; /* For looping over bytes of pCell */ + u8 *pEnd; /* End mark for a varint */ + u32 nSize; /* Size value to return */ + +#ifdef SQLITE_DEBUG + /* The value returned by this function should always be the same as + ** the (CellInfo.nSize) value found by doing a full parse of the + ** cell. If SQLITE_DEBUG is defined, an assert() at the bottom of + ** this function verifies that this invariant is not violated. */ + CellInfo debuginfo; + pPage->xParseCell(pPage, pCell, &debuginfo); +#endif + + assert( pPage->childPtrSize==4 ); + nSize = *pIter; + if( nSize>=0x80 ){ + pEnd = &pIter[8]; + nSize &= 0x7f; + do{ + nSize = (nSize<<7) | (*++pIter & 0x7f); + }while( *(pIter)>=0x80 && pItermaxLocal ); + testcase( nSize==(u32)pPage->maxLocal+1 ); + if( nSize<=pPage->maxLocal ){ + nSize += (u32)(pIter - pCell); + assert( nSize>4 ); + }else{ + int minLocal = pPage->minLocal; + nSize = minLocal + (nSize - minLocal) % (pPage->pBt->usableSize - 4); + testcase( nSize==pPage->maxLocal ); + testcase( nSize==(u32)pPage->maxLocal+1 ); + if( nSize>pPage->maxLocal ){ + nSize = minLocal; + } + nSize += 4 + (u16)(pIter - pCell); + } + assert( nSize==debuginfo.nSize || CORRUPT_DB ); + return (u16)nSize; +} +static u16 cellSizePtrIdxLeaf(MemPage *pPage, u8 *pCell){ + u8 *pIter = pCell; /* For looping over bytes of pCell */ + u8 *pEnd; /* End mark for a varint */ + u32 nSize; /* Size value to return */ + +#ifdef SQLITE_DEBUG + /* The value returned by this function should always be the same as + ** the (CellInfo.nSize) value found by doing a full parse of the + ** cell. If SQLITE_DEBUG is defined, an assert() at the bottom of + ** this function verifies that this invariant is not violated. */ + CellInfo debuginfo; + pPage->xParseCell(pPage, pCell, &debuginfo); +#endif + + assert( pPage->childPtrSize==0 ); + nSize = *pIter; + if( nSize>=0x80 ){ + pEnd = &pIter[8]; + nSize &= 0x7f; + do{ + nSize = (nSize<<7) | (*++pIter & 0x7f); + }while( *(pIter)>=0x80 && pItermaxLocal ); + testcase( nSize==(u32)pPage->maxLocal+1 ); + if( nSize<=pPage->maxLocal ){ + nSize += (u32)(pIter - pCell); + if( nSize<4 ) nSize = 4; + }else{ + int minLocal = pPage->minLocal; + nSize = minLocal + (nSize - minLocal) % (pPage->pBt->usableSize - 4); + testcase( nSize==pPage->maxLocal ); + testcase( nSize==(u32)pPage->maxLocal+1 ); + if( nSize>pPage->maxLocal ){ + nSize = minLocal; + } + nSize += 4 + (u16)(pIter - pCell); + } + assert( nSize==debuginfo.nSize || CORRUPT_DB ); + return (u16)nSize; +} +static u16 cellSizePtrNoPayload(MemPage *pPage, u8 *pCell){ + u8 *pIter = pCell + 4; /* For looping over bytes of pCell */ + u8 *pEnd; /* End mark for a varint */ + +#ifdef SQLITE_DEBUG + /* The value returned by this function should always be the same as + ** the (CellInfo.nSize) value found by doing a full parse of the + ** cell. If SQLITE_DEBUG is defined, an assert() at the bottom of + ** this function verifies that this invariant is not violated. */ + CellInfo debuginfo; + pPage->xParseCell(pPage, pCell, &debuginfo); +#else + UNUSED_PARAMETER(pPage); +#endif + + assert( pPage->childPtrSize==4 ); + pEnd = pIter + 9; + while( (*pIter++)&0x80 && pIterxParseCell(pPage, pCell, &debuginfo); +#endif + + nSize = *pIter; + if( nSize>=0x80 ){ + pEnd = &pIter[8]; + nSize &= 0x7f; + do{ + nSize = (nSize<<7) | (*++pIter & 0x7f); + }while( *(pIter)>=0x80 && pItermaxLocal ); + testcase( nSize==(u32)pPage->maxLocal+1 ); + if( nSize<=pPage->maxLocal ){ + nSize += (u32)(pIter - pCell); + if( nSize<4 ) nSize = 4; + }else{ + int minLocal = pPage->minLocal; + nSize = minLocal + (nSize - minLocal) % (pPage->pBt->usableSize - 4); + testcase( nSize==pPage->maxLocal ); + testcase( nSize==(u32)pPage->maxLocal+1 ); + if( nSize>pPage->maxLocal ){ + nSize = minLocal; + } + nSize += 4 + (u16)(pIter - pCell); + } + assert( nSize==debuginfo.nSize || CORRUPT_DB ); + return (u16)nSize; +} + + +#ifdef SQLITE_DEBUG +/* This variation on cellSizePtr() is used inside of assert() statements +** only. */ +static u16 cellSize(MemPage *pPage, int iCell){ + return pPage->xCellSize(pPage, findCell(pPage, iCell)); +} +#endif + +#ifndef SQLITE_OMIT_AUTOVACUUM +/* +** The cell pCell is currently part of page pSrc but will ultimately be part +** of pPage. (pSrc and pPage are often the same.) If pCell contains a +** pointer to an overflow page, insert an entry into the pointer-map for +** the overflow page that will be valid after pCell has been moved to pPage. +*/ +static void ptrmapPutOvflPtr(MemPage *pPage, MemPage *pSrc, u8 *pCell,int *pRC){ + CellInfo info; + if( *pRC ) return; + assert( pCell!=0 ); + pPage->xParseCell(pPage, pCell, &info); + if( info.nLocalaDataEnd, pCell, pCell+info.nLocal) ){ + testcase( pSrc!=pPage ); + *pRC = SQLITE_CORRUPT_BKPT; + return; + } + ovfl = get4byte(&pCell[info.nSize-4]); + ptrmapPut(pPage->pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, pRC); + } +} +#endif + + +/* +** Defragment the page given. This routine reorganizes cells within the +** page so that there are no free-blocks on the free-block list. +** +** Parameter nMaxFrag is the maximum amount of fragmented space that may be +** present in the page after this routine returns. +** +** EVIDENCE-OF: R-44582-60138 SQLite may from time to time reorganize a +** b-tree page so that there are no freeblocks or fragment bytes, all +** unused bytes are contained in the unallocated space region, and all +** cells are packed tightly at the end of the page. +*/ +static int defragmentPage(MemPage *pPage, int nMaxFrag){ + int i; /* Loop counter */ + int pc; /* Address of the i-th cell */ + int hdr; /* Offset to the page header */ + int size; /* Size of a cell */ + int usableSize; /* Number of usable bytes on a page */ + int cellOffset; /* Offset to the cell pointer array */ + int cbrk; /* Offset to the cell content area */ + int nCell; /* Number of cells on the page */ + unsigned char *data; /* The page data */ + unsigned char *temp; /* Temp area for cell content */ + unsigned char *src; /* Source of content */ + int iCellFirst; /* First allowable cell index */ + int iCellLast; /* Last possible cell index */ + int iCellStart; /* First cell offset in input */ + + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + assert( pPage->pBt!=0 ); + assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE ); + assert( pPage->nOverflow==0 ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + data = pPage->aData; + hdr = pPage->hdrOffset; + cellOffset = pPage->cellOffset; + nCell = pPage->nCell; + assert( nCell==get2byte(&data[hdr+3]) || CORRUPT_DB ); + iCellFirst = cellOffset + 2*nCell; + usableSize = pPage->pBt->usableSize; + + /* This block handles pages with two or fewer free blocks and nMaxFrag + ** or fewer fragmented bytes. In this case it is faster to move the + ** two (or one) blocks of cells using memmove() and add the required + ** offsets to each pointer in the cell-pointer array than it is to + ** reconstruct the entire page. */ + if( (int)data[hdr+7]<=nMaxFrag ){ + int iFree = get2byte(&data[hdr+1]); + if( iFree>usableSize-4 ) return SQLITE_CORRUPT_PAGE(pPage); + if( iFree ){ + int iFree2 = get2byte(&data[iFree]); + if( iFree2>usableSize-4 ) return SQLITE_CORRUPT_PAGE(pPage); + if( 0==iFree2 || (data[iFree2]==0 && data[iFree2+1]==0) ){ + u8 *pEnd = &data[cellOffset + nCell*2]; + u8 *pAddr; + int sz2 = 0; + int sz = get2byte(&data[iFree+2]); + int top = get2byte(&data[hdr+5]); + if( top>=iFree ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + if( iFree2 ){ + if( iFree+sz>iFree2 ) return SQLITE_CORRUPT_PAGE(pPage); + sz2 = get2byte(&data[iFree2+2]); + if( iFree2+sz2 > usableSize ) return SQLITE_CORRUPT_PAGE(pPage); + memmove(&data[iFree+sz+sz2], &data[iFree+sz], iFree2-(iFree+sz)); + sz += sz2; + }else if( iFree+sz>usableSize ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + + cbrk = top+sz; + assert( cbrk+(iFree-top) <= usableSize ); + memmove(&data[cbrk], &data[top], iFree-top); + for(pAddr=&data[cellOffset]; pAddr0 ){ + temp = sqlite3PagerTempSpace(pPage->pBt->pPager); + memcpy(temp, data, usableSize); + src = temp; + for(i=0; iiCellLast ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + assert( pc>=0 && pc<=iCellLast ); + size = pPage->xCellSize(pPage, &src[pc]); + cbrk -= size; + if( cbrkusableSize ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + assert( cbrk+size<=usableSize && cbrk>=iCellStart ); + testcase( cbrk+size==usableSize ); + testcase( pc+size==usableSize ); + put2byte(pAddr, cbrk); + memcpy(&data[cbrk], &src[pc], size); + } + } + data[hdr+7] = 0; + +defragment_out: + assert( pPage->nFree>=0 ); + if( data[hdr+7]+cbrk-iCellFirst!=pPage->nFree ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + assert( cbrk>=iCellFirst ); + put2byte(&data[hdr+5], cbrk); + data[hdr+1] = 0; + data[hdr+2] = 0; + memset(&data[iCellFirst], 0, cbrk-iCellFirst); + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + return SQLITE_OK; +} + +/* +** Search the free-list on page pPg for space to store a cell nByte bytes in +** size. If one can be found, return a pointer to the space and remove it +** from the free-list. +** +** If no suitable space can be found on the free-list, return NULL. +** +** This function may detect corruption within pPg. If corruption is +** detected then *pRc is set to SQLITE_CORRUPT and NULL is returned. +** +** Slots on the free list that are between 1 and 3 bytes larger than nByte +** will be ignored if adding the extra space to the fragmentation count +** causes the fragmentation count to exceed 60. +*/ +static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){ + const int hdr = pPg->hdrOffset; /* Offset to page header */ + u8 * const aData = pPg->aData; /* Page data */ + int iAddr = hdr + 1; /* Address of ptr to pc */ + u8 *pTmp = &aData[iAddr]; /* Temporary ptr into aData[] */ + int pc = get2byte(pTmp); /* Address of a free slot */ + int x; /* Excess size of the slot */ + int maxPC = pPg->pBt->usableSize - nByte; /* Max address for a usable slot */ + int size; /* Size of the free slot */ + + assert( pc>0 ); + while( pc<=maxPC ){ + /* EVIDENCE-OF: R-22710-53328 The third and fourth bytes of each + ** freeblock form a big-endian integer which is the size of the freeblock + ** in bytes, including the 4-byte header. */ + pTmp = &aData[pc+2]; + size = get2byte(pTmp); + if( (x = size - nByte)>=0 ){ + testcase( x==4 ); + testcase( x==3 ); + if( x<4 ){ + /* EVIDENCE-OF: R-11498-58022 In a well-formed b-tree page, the total + ** number of bytes in fragments may not exceed 60. */ + if( aData[hdr+7]>57 ) return 0; + + /* Remove the slot from the free-list. Update the number of + ** fragmented bytes within the page. */ + memcpy(&aData[iAddr], &aData[pc], 2); + aData[hdr+7] += (u8)x; + return &aData[pc]; + }else if( x+pc > maxPC ){ + /* This slot extends off the end of the usable part of the page */ + *pRc = SQLITE_CORRUPT_PAGE(pPg); + return 0; + }else{ + /* The slot remains on the free-list. Reduce its size to account + ** for the portion used by the new allocation. */ + put2byte(&aData[pc+2], x); + } + return &aData[pc + x]; + } + iAddr = pc; + pTmp = &aData[pc]; + pc = get2byte(pTmp); + if( pc<=iAddr ){ + if( pc ){ + /* The next slot in the chain comes before the current slot */ + *pRc = SQLITE_CORRUPT_PAGE(pPg); + } + return 0; + } + } + if( pc>maxPC+nByte-4 ){ + /* The free slot chain extends off the end of the page */ + *pRc = SQLITE_CORRUPT_PAGE(pPg); + } + return 0; +} + +/* +** Allocate nByte bytes of space from within the B-Tree page passed +** as the first argument. Write into *pIdx the index into pPage->aData[] +** of the first byte of allocated space. Return either SQLITE_OK or +** an error code (usually SQLITE_CORRUPT). +** +** The caller guarantees that there is sufficient space to make the +** allocation. This routine might need to defragment in order to bring +** all the space together, however. This routine will avoid using +** the first two bytes past the cell pointer area since presumably this +** allocation is being made in order to insert a new cell, so we will +** also end up needing a new cell pointer. +*/ +static SQLITE_INLINE int allocateSpace(MemPage *pPage, int nByte, int *pIdx){ + const int hdr = pPage->hdrOffset; /* Local cache of pPage->hdrOffset */ + u8 * const data = pPage->aData; /* Local cache of pPage->aData */ + int top; /* First byte of cell content area */ + int rc = SQLITE_OK; /* Integer return code */ + u8 *pTmp; /* Temp ptr into data[] */ + int gap; /* First byte of gap between cell pointers and cell content */ + + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + assert( pPage->pBt ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( nByte>=0 ); /* Minimum cell size is 4 */ + assert( pPage->nFree>=nByte ); + assert( pPage->nOverflow==0 ); + assert( nByte < (int)(pPage->pBt->usableSize-8) ); + + assert( pPage->cellOffset == hdr + 12 - 4*pPage->leaf ); + gap = pPage->cellOffset + 2*pPage->nCell; + assert( gap<=65536 ); + /* EVIDENCE-OF: R-29356-02391 If the database uses a 65536-byte page size + ** and the reserved space is zero (the usual value for reserved space) + ** then the cell content offset of an empty page wants to be 65536. + ** However, that integer is too large to be stored in a 2-byte unsigned + ** integer, so a value of 0 is used in its place. */ + pTmp = &data[hdr+5]; + top = get2byte(pTmp); + if( gap>top ){ + if( top==0 && pPage->pBt->usableSize==65536 ){ + top = 65536; + }else{ + return SQLITE_CORRUPT_PAGE(pPage); + } + }else if( top>(int)pPage->pBt->usableSize ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + + /* If there is enough space between gap and top for one more cell pointer, + ** and if the freelist is not empty, then search the + ** freelist looking for a slot big enough to satisfy the request. + */ + testcase( gap+2==top ); + testcase( gap+1==top ); + testcase( gap==top ); + if( (data[hdr+2] || data[hdr+1]) && gap+2<=top ){ + u8 *pSpace = pageFindSlot(pPage, nByte, &rc); + if( pSpace ){ + int g2; + assert( pSpace+nByte<=data+pPage->pBt->usableSize ); + *pIdx = g2 = (int)(pSpace-data); + if( g2<=gap ){ + return SQLITE_CORRUPT_PAGE(pPage); + }else{ + return SQLITE_OK; + } + }else if( rc ){ + return rc; + } + } + + /* The request could not be fulfilled using a freelist slot. Check + ** to see if defragmentation is necessary. + */ + testcase( gap+2+nByte==top ); + if( gap+2+nByte>top ){ + assert( pPage->nCell>0 || CORRUPT_DB ); + assert( pPage->nFree>=0 ); + rc = defragmentPage(pPage, MIN(4, pPage->nFree - (2+nByte))); + if( rc ) return rc; + top = get2byteNotZero(&data[hdr+5]); + assert( gap+2+nByte<=top ); + } + + + /* Allocate memory from the gap in between the cell pointer array + ** and the cell content area. The btreeComputeFreeSpace() call has already + ** validated the freelist. Given that the freelist is valid, there + ** is no way that the allocation can extend off the end of the page. + ** The assert() below verifies the previous sentence. + */ + top -= nByte; + put2byte(&data[hdr+5], top); + assert( top+nByte <= (int)pPage->pBt->usableSize ); + *pIdx = top; + return SQLITE_OK; +} + +/* +** Return a section of the pPage->aData to the freelist. +** The first byte of the new free block is pPage->aData[iStart] +** and the size of the block is iSize bytes. +** +** Adjacent freeblocks are coalesced. +** +** Even though the freeblock list was checked by btreeComputeFreeSpace(), +** that routine will not detect overlap between cells or freeblocks. Nor +** does it detect cells or freeblocks that encroach into the reserved bytes +** at the end of the page. So do additional corruption checks inside this +** routine and return SQLITE_CORRUPT if any problems are found. +*/ +static int freeSpace(MemPage *pPage, int iStart, int iSize){ + int iPtr; /* Address of ptr to next freeblock */ + int iFreeBlk; /* Address of the next freeblock */ + u8 hdr; /* Page header size. 0 or 100 */ + int nFrag = 0; /* Reduction in fragmentation */ + int iOrigSize = iSize; /* Original value of iSize */ + int x; /* Offset to cell content area */ + int iEnd = iStart + iSize; /* First byte past the iStart buffer */ + unsigned char *data = pPage->aData; /* Page content */ + u8 *pTmp; /* Temporary ptr into data[] */ + + assert( pPage->pBt!=0 ); + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + assert( CORRUPT_DB || iStart>=pPage->hdrOffset+6+pPage->childPtrSize ); + assert( CORRUPT_DB || iEnd <= (int)pPage->pBt->usableSize ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( iSize>=4 ); /* Minimum cell size is 4 */ + assert( CORRUPT_DB || iStart<=(int)pPage->pBt->usableSize-4 ); + + /* The list of freeblocks must be in ascending order. Find the + ** spot on the list where iStart should be inserted. + */ + hdr = pPage->hdrOffset; + iPtr = hdr + 1; + if( data[iPtr+1]==0 && data[iPtr]==0 ){ + iFreeBlk = 0; /* Shortcut for the case when the freelist is empty */ + }else{ + while( (iFreeBlk = get2byte(&data[iPtr]))(int)pPage->pBt->usableSize-4 ){ /* TH3: corrupt081.100 */ + return SQLITE_CORRUPT_PAGE(pPage); + } + assert( iFreeBlk>iPtr || iFreeBlk==0 || CORRUPT_DB ); + + /* At this point: + ** iFreeBlk: First freeblock after iStart, or zero if none + ** iPtr: The address of a pointer to iFreeBlk + ** + ** Check to see if iFreeBlk should be coalesced onto the end of iStart. + */ + if( iFreeBlk && iEnd+3>=iFreeBlk ){ + nFrag = iFreeBlk - iEnd; + if( iEnd>iFreeBlk ) return SQLITE_CORRUPT_PAGE(pPage); + iEnd = iFreeBlk + get2byte(&data[iFreeBlk+2]); + if( iEnd > (int)pPage->pBt->usableSize ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + iSize = iEnd - iStart; + iFreeBlk = get2byte(&data[iFreeBlk]); + } + + /* If iPtr is another freeblock (that is, if iPtr is not the freelist + ** pointer in the page header) then check to see if iStart should be + ** coalesced onto the end of iPtr. + */ + if( iPtr>hdr+1 ){ + int iPtrEnd = iPtr + get2byte(&data[iPtr+2]); + if( iPtrEnd+3>=iStart ){ + if( iPtrEnd>iStart ) return SQLITE_CORRUPT_PAGE(pPage); + nFrag += iStart - iPtrEnd; + iSize = iEnd - iPtr; + iStart = iPtr; + } + } + if( nFrag>data[hdr+7] ) return SQLITE_CORRUPT_PAGE(pPage); + data[hdr+7] -= (u8)nFrag; + } + pTmp = &data[hdr+5]; + x = get2byte(pTmp); + if( pPage->pBt->btsFlags & BTS_FAST_SECURE ){ + /* Overwrite deleted information with zeros when the secure_delete + ** option is enabled */ + memset(&data[iStart], 0, iSize); + } + if( iStart<=x ){ + /* The new freeblock is at the beginning of the cell content area, + ** so just extend the cell content area rather than create another + ** freelist entry */ + if( iStart=0 && iSize<=0xffff ); + put2byte(&data[iStart+2], (u16)iSize); + } + pPage->nFree += iOrigSize; + return SQLITE_OK; +} + +/* +** Decode the flags byte (the first byte of the header) for a page +** and initialize fields of the MemPage structure accordingly. +** +** Only the following combinations are supported. Anything different +** indicates a corrupt database files: +** +** PTF_ZERODATA (0x02, 2) +** PTF_LEAFDATA | PTF_INTKEY (0x05, 5) +** PTF_ZERODATA | PTF_LEAF (0x0a, 10) +** PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF (0x0d, 13) +*/ +static int decodeFlags(MemPage *pPage, int flagByte){ + BtShared *pBt; /* A copy of pPage->pBt */ + + assert( pPage->hdrOffset==(pPage->pgno==1 ? 100 : 0) ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + pBt = pPage->pBt; + pPage->max1bytePayload = pBt->max1bytePayload; + if( flagByte>=(PTF_ZERODATA | PTF_LEAF) ){ + pPage->childPtrSize = 0; + pPage->leaf = 1; + if( flagByte==(PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF) ){ + pPage->intKeyLeaf = 1; + pPage->xCellSize = cellSizePtrTableLeaf; + pPage->xParseCell = btreeParseCellPtr; + pPage->intKey = 1; + pPage->maxLocal = pBt->maxLeaf; + pPage->minLocal = pBt->minLeaf; + }else if( flagByte==(PTF_ZERODATA | PTF_LEAF) ){ + pPage->intKey = 0; + pPage->intKeyLeaf = 0; + pPage->xCellSize = cellSizePtrIdxLeaf; + pPage->xParseCell = btreeParseCellPtrIndex; + pPage->maxLocal = pBt->maxLocal; + pPage->minLocal = pBt->minLocal; + }else{ + pPage->intKey = 0; + pPage->intKeyLeaf = 0; + pPage->xCellSize = cellSizePtrIdxLeaf; + pPage->xParseCell = btreeParseCellPtrIndex; + return SQLITE_CORRUPT_PAGE(pPage); + } + }else{ + pPage->childPtrSize = 4; + pPage->leaf = 0; + if( flagByte==(PTF_ZERODATA) ){ + pPage->intKey = 0; + pPage->intKeyLeaf = 0; + pPage->xCellSize = cellSizePtr; + pPage->xParseCell = btreeParseCellPtrIndex; + pPage->maxLocal = pBt->maxLocal; + pPage->minLocal = pBt->minLocal; + }else if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){ + pPage->intKeyLeaf = 0; + pPage->xCellSize = cellSizePtrNoPayload; + pPage->xParseCell = btreeParseCellPtrNoPayload; + pPage->intKey = 1; + pPage->maxLocal = pBt->maxLeaf; + pPage->minLocal = pBt->minLeaf; + }else{ + pPage->intKey = 0; + pPage->intKeyLeaf = 0; + pPage->xCellSize = cellSizePtr; + pPage->xParseCell = btreeParseCellPtrIndex; + return SQLITE_CORRUPT_PAGE(pPage); + } + } + return SQLITE_OK; +} + +/* +** Compute the amount of freespace on the page. In other words, fill +** in the pPage->nFree field. +*/ +static int btreeComputeFreeSpace(MemPage *pPage){ + int pc; /* Address of a freeblock within pPage->aData[] */ + u8 hdr; /* Offset to beginning of page header */ + u8 *data; /* Equal to pPage->aData */ + int usableSize; /* Amount of usable space on each page */ + int nFree; /* Number of unused bytes on the page */ + int top; /* First byte of the cell content area */ + int iCellFirst; /* First allowable cell or freeblock offset */ + int iCellLast; /* Last possible cell or freeblock offset */ + + assert( pPage->pBt!=0 ); + assert( pPage->pBt->db!=0 ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( pPage->pgno==sqlite3PagerPagenumber(pPage->pDbPage) ); + assert( pPage == sqlite3PagerGetExtra(pPage->pDbPage) ); + assert( pPage->aData == sqlite3PagerGetData(pPage->pDbPage) ); + assert( pPage->isInit==1 ); + assert( pPage->nFree<0 ); + + usableSize = pPage->pBt->usableSize; + hdr = pPage->hdrOffset; + data = pPage->aData; + /* EVIDENCE-OF: R-58015-48175 The two-byte integer at offset 5 designates + ** the start of the cell content area. A zero value for this integer is + ** interpreted as 65536. */ + top = get2byteNotZero(&data[hdr+5]); + iCellFirst = hdr + 8 + pPage->childPtrSize + 2*pPage->nCell; + iCellLast = usableSize - 4; + + /* Compute the total free space on the page + ** EVIDENCE-OF: R-23588-34450 The two-byte integer at offset 1 gives the + ** start of the first freeblock on the page, or is zero if there are no + ** freeblocks. */ + pc = get2byte(&data[hdr+1]); + nFree = data[hdr+7] + top; /* Init nFree to non-freeblock free space */ + if( pc>0 ){ + u32 next, size; + if( pciCellLast ){ + /* Freeblock off the end of the page */ + return SQLITE_CORRUPT_PAGE(pPage); + } + next = get2byte(&data[pc]); + size = get2byte(&data[pc+2]); + nFree = nFree + size; + if( next<=pc+size+3 ) break; + pc = next; + } + if( next>0 ){ + /* Freeblock not in ascending order */ + return SQLITE_CORRUPT_PAGE(pPage); + } + if( pc+size>(unsigned int)usableSize ){ + /* Last freeblock extends past page end */ + return SQLITE_CORRUPT_PAGE(pPage); + } + } + + /* At this point, nFree contains the sum of the offset to the start + ** of the cell-content area plus the number of free bytes within + ** the cell-content area. If this is greater than the usable-size + ** of the page, then the page must be corrupted. This check also + ** serves to verify that the offset to the start of the cell-content + ** area, according to the page header, lies within the page. + */ + if( nFree>usableSize || nFreenFree = (u16)(nFree - iCellFirst); + return SQLITE_OK; +} + +/* +** Do additional sanity check after btreeInitPage() if +** PRAGMA cell_size_check=ON +*/ +static SQLITE_NOINLINE int btreeCellSizeCheck(MemPage *pPage){ + int iCellFirst; /* First allowable cell or freeblock offset */ + int iCellLast; /* Last possible cell or freeblock offset */ + int i; /* Index into the cell pointer array */ + int sz; /* Size of a cell */ + int pc; /* Address of a freeblock within pPage->aData[] */ + u8 *data; /* Equal to pPage->aData */ + int usableSize; /* Maximum usable space on the page */ + int cellOffset; /* Start of cell content area */ + + iCellFirst = pPage->cellOffset + 2*pPage->nCell; + usableSize = pPage->pBt->usableSize; + iCellLast = usableSize - 4; + data = pPage->aData; + cellOffset = pPage->cellOffset; + if( !pPage->leaf ) iCellLast--; + for(i=0; inCell; i++){ + pc = get2byteAligned(&data[cellOffset+i*2]); + testcase( pc==iCellFirst ); + testcase( pc==iCellLast ); + if( pciCellLast ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + sz = pPage->xCellSize(pPage, &data[pc]); + testcase( pc+sz==usableSize ); + if( pc+sz>usableSize ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + } + return SQLITE_OK; +} + +/* +** Initialize the auxiliary information for a disk block. +** +** Return SQLITE_OK on success. If we see that the page does +** not contain a well-formed database page, then return +** SQLITE_CORRUPT. Note that a return of SQLITE_OK does not +** guarantee that the page is well-formed. It only shows that +** we failed to detect any corruption. +*/ +static int btreeInitPage(MemPage *pPage){ + u8 *data; /* Equal to pPage->aData */ + BtShared *pBt; /* The main btree structure */ + + assert( pPage->pBt!=0 ); + assert( pPage->pBt->db!=0 ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( pPage->pgno==sqlite3PagerPagenumber(pPage->pDbPage) ); + assert( pPage == sqlite3PagerGetExtra(pPage->pDbPage) ); + assert( pPage->aData == sqlite3PagerGetData(pPage->pDbPage) ); + assert( pPage->isInit==0 ); + + pBt = pPage->pBt; + data = pPage->aData + pPage->hdrOffset; + /* EVIDENCE-OF: R-28594-02890 The one-byte flag at offset 0 indicating + ** the b-tree page type. */ + if( decodeFlags(pPage, data[0]) ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + assert( pBt->pageSize>=512 && pBt->pageSize<=65536 ); + pPage->maskPage = (u16)(pBt->pageSize - 1); + pPage->nOverflow = 0; + pPage->cellOffset = (u16)(pPage->hdrOffset + 8 + pPage->childPtrSize); + pPage->aCellIdx = data + pPage->childPtrSize + 8; + pPage->aDataEnd = pPage->aData + pBt->pageSize; + pPage->aDataOfst = pPage->aData + pPage->childPtrSize; + /* EVIDENCE-OF: R-37002-32774 The two-byte integer at offset 3 gives the + ** number of cells on the page. */ + pPage->nCell = get2byte(&data[3]); + if( pPage->nCell>MX_CELL(pBt) ){ + /* To many cells for a single page. The page must be corrupt */ + return SQLITE_CORRUPT_PAGE(pPage); + } + testcase( pPage->nCell==MX_CELL(pBt) ); + /* EVIDENCE-OF: R-24089-57979 If a page contains no cells (which is only + ** possible for a root page of a table that contains no rows) then the + ** offset to the cell content area will equal the page size minus the + ** bytes of reserved space. */ + assert( pPage->nCell>0 + || get2byteNotZero(&data[5])==(int)pBt->usableSize + || CORRUPT_DB ); + pPage->nFree = -1; /* Indicate that this value is yet uncomputed */ + pPage->isInit = 1; + if( pBt->db->flags & SQLITE_CellSizeCk ){ + return btreeCellSizeCheck(pPage); + } + return SQLITE_OK; +} + +/* +** Set up a raw page so that it looks like a database page holding +** no entries. +*/ +static void zeroPage(MemPage *pPage, int flags){ + unsigned char *data = pPage->aData; + BtShared *pBt = pPage->pBt; + int hdr = pPage->hdrOffset; + int first; + + assert( sqlite3PagerPagenumber(pPage->pDbPage)==pPage->pgno || CORRUPT_DB ); + assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage ); + assert( sqlite3PagerGetData(pPage->pDbPage) == data ); + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + assert( sqlite3_mutex_held(pBt->mutex) ); + if( pBt->btsFlags & BTS_FAST_SECURE ){ + memset(&data[hdr], 0, pBt->usableSize - hdr); + } + data[hdr] = (char)flags; + first = hdr + ((flags&PTF_LEAF)==0 ? 12 : 8); + memset(&data[hdr+1], 0, 4); + data[hdr+7] = 0; + put2byte(&data[hdr+5], pBt->usableSize); + pPage->nFree = (u16)(pBt->usableSize - first); + decodeFlags(pPage, flags); + pPage->cellOffset = (u16)first; + pPage->aDataEnd = &data[pBt->pageSize]; + pPage->aCellIdx = &data[first]; + pPage->aDataOfst = &data[pPage->childPtrSize]; + pPage->nOverflow = 0; + assert( pBt->pageSize>=512 && pBt->pageSize<=65536 ); + pPage->maskPage = (u16)(pBt->pageSize - 1); + pPage->nCell = 0; + pPage->isInit = 1; +} + + +/* +** Convert a DbPage obtained from the pager into a MemPage used by +** the btree layer. +*/ +static MemPage *btreePageFromDbPage(DbPage *pDbPage, Pgno pgno, BtShared *pBt){ + MemPage *pPage = (MemPage*)sqlite3PagerGetExtra(pDbPage); + if( pgno!=pPage->pgno ){ + pPage->aData = sqlite3PagerGetData(pDbPage); + pPage->pDbPage = pDbPage; + pPage->pBt = pBt; + pPage->pgno = pgno; + pPage->hdrOffset = pgno==1 ? 100 : 0; + } + assert( pPage->aData==sqlite3PagerGetData(pDbPage) ); + return pPage; +} + +/* +** Get a page from the pager. Initialize the MemPage.pBt and +** MemPage.aData elements if needed. See also: btreeGetUnusedPage(). +** +** If the PAGER_GET_NOCONTENT flag is set, it means that we do not care +** about the content of the page at this time. So do not go to the disk +** to fetch the content. Just fill in the content with zeros for now. +** If in the future we call sqlite3PagerWrite() on this page, that +** means we have started to be concerned about content and the disk +** read should occur at that point. +*/ +static int btreeGetPage( + BtShared *pBt, /* The btree */ + Pgno pgno, /* Number of the page to fetch */ + MemPage **ppPage, /* Return the page in this parameter */ + int flags /* PAGER_GET_NOCONTENT or PAGER_GET_READONLY */ +){ + int rc; + DbPage *pDbPage; + + assert( flags==0 || flags==PAGER_GET_NOCONTENT || flags==PAGER_GET_READONLY ); + assert( sqlite3_mutex_held(pBt->mutex) ); + rc = sqlite3PagerGet(pBt->pPager, pgno, (DbPage**)&pDbPage, flags); + if( rc ) return rc; + *ppPage = btreePageFromDbPage(pDbPage, pgno, pBt); + return SQLITE_OK; +} + +/* +** Retrieve a page from the pager cache. If the requested page is not +** already in the pager cache return NULL. Initialize the MemPage.pBt and +** MemPage.aData elements if needed. +*/ +static MemPage *btreePageLookup(BtShared *pBt, Pgno pgno){ + DbPage *pDbPage; + assert( sqlite3_mutex_held(pBt->mutex) ); + pDbPage = sqlite3PagerLookup(pBt->pPager, pgno); + if( pDbPage ){ + return btreePageFromDbPage(pDbPage, pgno, pBt); + } + return 0; +} + +/* +** Return the size of the database file in pages. If there is any kind of +** error, return ((unsigned int)-1). +*/ +static Pgno btreePagecount(BtShared *pBt){ + return pBt->nPage; +} +SQLITE_PRIVATE Pgno sqlite3BtreeLastPage(Btree *p){ + assert( sqlite3BtreeHoldsMutex(p) ); + return btreePagecount(p->pBt); +} + +/* +** Get a page from the pager and initialize it. +*/ +static int getAndInitPage( + BtShared *pBt, /* The database file */ + Pgno pgno, /* Number of the page to get */ + MemPage **ppPage, /* Write the page pointer here */ + int bReadOnly /* True for a read-only page */ +){ + int rc; + DbPage *pDbPage; + MemPage *pPage; + assert( sqlite3_mutex_held(pBt->mutex) ); + + if( pgno>btreePagecount(pBt) ){ + *ppPage = 0; + return SQLITE_CORRUPT_BKPT; + } + rc = sqlite3PagerGet(pBt->pPager, pgno, (DbPage**)&pDbPage, bReadOnly); + if( rc ){ + *ppPage = 0; + return rc; + } + pPage = (MemPage*)sqlite3PagerGetExtra(pDbPage); + if( pPage->isInit==0 ){ + btreePageFromDbPage(pDbPage, pgno, pBt); + rc = btreeInitPage(pPage); + if( rc!=SQLITE_OK ){ + releasePage(pPage); + *ppPage = 0; + return rc; + } + } + assert( pPage->pgno==pgno || CORRUPT_DB ); + assert( pPage->aData==sqlite3PagerGetData(pDbPage) ); + *ppPage = pPage; + return SQLITE_OK; +} + +/* +** Release a MemPage. This should be called once for each prior +** call to btreeGetPage. +** +** Page1 is a special case and must be released using releasePageOne(). +*/ +static void releasePageNotNull(MemPage *pPage){ + assert( pPage->aData ); + assert( pPage->pBt ); + assert( pPage->pDbPage!=0 ); + assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage ); + assert( sqlite3PagerGetData(pPage->pDbPage)==pPage->aData ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + sqlite3PagerUnrefNotNull(pPage->pDbPage); +} +static void releasePage(MemPage *pPage){ + if( pPage ) releasePageNotNull(pPage); +} +static void releasePageOne(MemPage *pPage){ + assert( pPage!=0 ); + assert( pPage->aData ); + assert( pPage->pBt ); + assert( pPage->pDbPage!=0 ); + assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage ); + assert( sqlite3PagerGetData(pPage->pDbPage)==pPage->aData ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + sqlite3PagerUnrefPageOne(pPage->pDbPage); +} + +/* +** Get an unused page. +** +** This works just like btreeGetPage() with the addition: +** +** * If the page is already in use for some other purpose, immediately +** release it and return an SQLITE_CURRUPT error. +** * Make sure the isInit flag is clear +*/ +static int btreeGetUnusedPage( + BtShared *pBt, /* The btree */ + Pgno pgno, /* Number of the page to fetch */ + MemPage **ppPage, /* Return the page in this parameter */ + int flags /* PAGER_GET_NOCONTENT or PAGER_GET_READONLY */ +){ + int rc = btreeGetPage(pBt, pgno, ppPage, flags); + if( rc==SQLITE_OK ){ + if( sqlite3PagerPageRefcount((*ppPage)->pDbPage)>1 ){ + releasePage(*ppPage); + *ppPage = 0; + return SQLITE_CORRUPT_BKPT; + } + (*ppPage)->isInit = 0; + }else{ + *ppPage = 0; + } + return rc; +} + + +/* +** During a rollback, when the pager reloads information into the cache +** so that the cache is restored to its original state at the start of +** the transaction, for each page restored this routine is called. +** +** This routine needs to reset the extra data section at the end of the +** page to agree with the restored data. +*/ +static void pageReinit(DbPage *pData){ + MemPage *pPage; + pPage = (MemPage *)sqlite3PagerGetExtra(pData); + assert( sqlite3PagerPageRefcount(pData)>0 ); + if( pPage->isInit ){ + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + pPage->isInit = 0; + if( sqlite3PagerPageRefcount(pData)>1 ){ + /* pPage might not be a btree page; it might be an overflow page + ** or ptrmap page or a free page. In those cases, the following + ** call to btreeInitPage() will likely return SQLITE_CORRUPT. + ** But no harm is done by this. And it is very important that + ** btreeInitPage() be called on every btree page so we make + ** the call for every page that comes in for re-initializing. */ + btreeInitPage(pPage); + } + } +} + +/* +** Invoke the busy handler for a btree. +*/ +static int btreeInvokeBusyHandler(void *pArg){ + BtShared *pBt = (BtShared*)pArg; + assert( pBt->db ); + assert( sqlite3_mutex_held(pBt->db->mutex) ); + return sqlite3InvokeBusyHandler(&pBt->db->busyHandler); +} + +/* +** Open a database file. +** +** zFilename is the name of the database file. If zFilename is NULL +** then an ephemeral database is created. The ephemeral database might +** be exclusively in memory, or it might use a disk-based memory cache. +** Either way, the ephemeral database will be automatically deleted +** when sqlite3BtreeClose() is called. +** +** If zFilename is ":memory:" then an in-memory database is created +** that is automatically destroyed when it is closed. +** +** The "flags" parameter is a bitmask that might contain bits like +** BTREE_OMIT_JOURNAL and/or BTREE_MEMORY. +** +** If the database is already opened in the same database connection +** and we are in shared cache mode, then the open will fail with an +** SQLITE_CONSTRAINT error. We cannot allow two or more BtShared +** objects in the same database connection since doing so will lead +** to problems with locking. +*/ +SQLITE_PRIVATE int sqlite3BtreeOpen( + sqlite3_vfs *pVfs, /* VFS to use for this b-tree */ + const char *zFilename, /* Name of the file containing the BTree database */ + sqlite3 *db, /* Associated database handle */ + Btree **ppBtree, /* Pointer to new Btree object written here */ + int flags, /* Options */ + int vfsFlags /* Flags passed through to sqlite3_vfs.xOpen() */ +){ + BtShared *pBt = 0; /* Shared part of btree structure */ + Btree *p; /* Handle to return */ + sqlite3_mutex *mutexOpen = 0; /* Prevents a race condition. Ticket #3537 */ + int rc = SQLITE_OK; /* Result code from this function */ + u8 nReserve; /* Byte of unused space on each page */ + unsigned char zDbHeader[100]; /* Database header content */ + + /* True if opening an ephemeral, temporary database */ + const int isTempDb = zFilename==0 || zFilename[0]==0; + + /* Set the variable isMemdb to true for an in-memory database, or + ** false for a file-based database. + */ +#ifdef SQLITE_OMIT_MEMORYDB + const int isMemdb = 0; +#else + const int isMemdb = (zFilename && strcmp(zFilename, ":memory:")==0) + || (isTempDb && sqlite3TempInMemory(db)) + || (vfsFlags & SQLITE_OPEN_MEMORY)!=0; +#endif + + assert( db!=0 ); + assert( pVfs!=0 ); + assert( sqlite3_mutex_held(db->mutex) ); + assert( (flags&0xff)==flags ); /* flags fit in 8 bits */ + + /* Only a BTREE_SINGLE database can be BTREE_UNORDERED */ + assert( (flags & BTREE_UNORDERED)==0 || (flags & BTREE_SINGLE)!=0 ); + + /* A BTREE_SINGLE database is always a temporary and/or ephemeral */ + assert( (flags & BTREE_SINGLE)==0 || isTempDb ); + + if( isMemdb ){ + flags |= BTREE_MEMORY; + } + if( (vfsFlags & SQLITE_OPEN_MAIN_DB)!=0 && (isMemdb || isTempDb) ){ + vfsFlags = (vfsFlags & ~SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB; + } + p = sqlite3MallocZero(sizeof(Btree)); + if( !p ){ + return SQLITE_NOMEM_BKPT; + } + p->inTrans = TRANS_NONE; + p->db = db; +#ifndef SQLITE_OMIT_SHARED_CACHE + p->lock.pBtree = p; + p->lock.iTable = 1; +#endif + +#if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO) + /* + ** If this Btree is a candidate for shared cache, try to find an + ** existing BtShared object that we can share with + */ + if( isTempDb==0 && (isMemdb==0 || (vfsFlags&SQLITE_OPEN_URI)!=0) ){ + if( vfsFlags & SQLITE_OPEN_SHAREDCACHE ){ + int nFilename = sqlite3Strlen30(zFilename)+1; + int nFullPathname = pVfs->mxPathname+1; + char *zFullPathname = sqlite3Malloc(MAX(nFullPathname,nFilename)); + MUTEX_LOGIC( sqlite3_mutex *mutexShared; ) + + p->sharable = 1; + if( !zFullPathname ){ + sqlite3_free(p); + return SQLITE_NOMEM_BKPT; + } + if( isMemdb ){ + memcpy(zFullPathname, zFilename, nFilename); + }else{ + rc = sqlite3OsFullPathname(pVfs, zFilename, + nFullPathname, zFullPathname); + if( rc ){ + if( rc==SQLITE_OK_SYMLINK ){ + rc = SQLITE_OK; + }else{ + sqlite3_free(zFullPathname); + sqlite3_free(p); + return rc; + } + } + } +#if SQLITE_THREADSAFE + mutexOpen = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_OPEN); + sqlite3_mutex_enter(mutexOpen); + mutexShared = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MAIN); + sqlite3_mutex_enter(mutexShared); +#endif + for(pBt=GLOBAL(BtShared*,sqlite3SharedCacheList); pBt; pBt=pBt->pNext){ + assert( pBt->nRef>0 ); + if( 0==strcmp(zFullPathname, sqlite3PagerFilename(pBt->pPager, 0)) + && sqlite3PagerVfs(pBt->pPager)==pVfs ){ + int iDb; + for(iDb=db->nDb-1; iDb>=0; iDb--){ + Btree *pExisting = db->aDb[iDb].pBt; + if( pExisting && pExisting->pBt==pBt ){ + sqlite3_mutex_leave(mutexShared); + sqlite3_mutex_leave(mutexOpen); + sqlite3_free(zFullPathname); + sqlite3_free(p); + return SQLITE_CONSTRAINT; + } + } + p->pBt = pBt; + pBt->nRef++; + break; + } + } + sqlite3_mutex_leave(mutexShared); + sqlite3_free(zFullPathname); + } +#ifdef SQLITE_DEBUG + else{ + /* In debug mode, we mark all persistent databases as sharable + ** even when they are not. This exercises the locking code and + ** gives more opportunity for asserts(sqlite3_mutex_held()) + ** statements to find locking problems. + */ + p->sharable = 1; + } +#endif + } +#endif + if( pBt==0 ){ + /* + ** The following asserts make sure that structures used by the btree are + ** the right size. This is to guard against size changes that result + ** when compiling on a different architecture. + */ + assert( sizeof(i64)==8 ); + assert( sizeof(u64)==8 ); + assert( sizeof(u32)==4 ); + assert( sizeof(u16)==2 ); + assert( sizeof(Pgno)==4 ); + + /* Suppress false-positive compiler warning from PVS-Studio */ + memset(&zDbHeader[16], 0, 8); + + pBt = sqlite3MallocZero( sizeof(*pBt) ); + if( pBt==0 ){ + rc = SQLITE_NOMEM_BKPT; + goto btree_open_out; + } + rc = sqlite3PagerOpen(pVfs, &pBt->pPager, zFilename, + sizeof(MemPage), flags, vfsFlags, pageReinit); + if( rc==SQLITE_OK ){ + sqlite3PagerSetMmapLimit(pBt->pPager, db->szMmap); + rc = sqlite3PagerReadFileheader(pBt->pPager,sizeof(zDbHeader),zDbHeader); + } + if( rc!=SQLITE_OK ){ + goto btree_open_out; + } + pBt->openFlags = (u8)flags; + pBt->db = db; + sqlite3PagerSetBusyHandler(pBt->pPager, btreeInvokeBusyHandler, pBt); + p->pBt = pBt; + + pBt->pCursor = 0; + pBt->pPage1 = 0; + if( sqlite3PagerIsreadonly(pBt->pPager) ) pBt->btsFlags |= BTS_READ_ONLY; +#if defined(SQLITE_SECURE_DELETE) + pBt->btsFlags |= BTS_SECURE_DELETE; +#elif defined(SQLITE_FAST_SECURE_DELETE) + pBt->btsFlags |= BTS_OVERWRITE; +#endif + /* EVIDENCE-OF: R-51873-39618 The page size for a database file is + ** determined by the 2-byte integer located at an offset of 16 bytes from + ** the beginning of the database file. */ + pBt->pageSize = (zDbHeader[16]<<8) | (zDbHeader[17]<<16); + if( pBt->pageSize<512 || pBt->pageSize>SQLITE_MAX_PAGE_SIZE + || ((pBt->pageSize-1)&pBt->pageSize)!=0 ){ + pBt->pageSize = 0; +#ifndef SQLITE_OMIT_AUTOVACUUM + /* If the magic name ":memory:" will create an in-memory database, then + ** leave the autoVacuum mode at 0 (do not auto-vacuum), even if + ** SQLITE_DEFAULT_AUTOVACUUM is true. On the other hand, if + ** SQLITE_OMIT_MEMORYDB has been defined, then ":memory:" is just a + ** regular file-name. In this case the auto-vacuum applies as per normal. + */ + if( zFilename && !isMemdb ){ + pBt->autoVacuum = (SQLITE_DEFAULT_AUTOVACUUM ? 1 : 0); + pBt->incrVacuum = (SQLITE_DEFAULT_AUTOVACUUM==2 ? 1 : 0); + } +#endif + nReserve = 0; + }else{ + /* EVIDENCE-OF: R-37497-42412 The size of the reserved region is + ** determined by the one-byte unsigned integer found at an offset of 20 + ** into the database file header. */ + nReserve = zDbHeader[20]; + pBt->btsFlags |= BTS_PAGESIZE_FIXED; +#ifndef SQLITE_OMIT_AUTOVACUUM + pBt->autoVacuum = (get4byte(&zDbHeader[36 + 4*4])?1:0); + pBt->incrVacuum = (get4byte(&zDbHeader[36 + 7*4])?1:0); +#endif + } + rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve); + if( rc ) goto btree_open_out; + pBt->usableSize = pBt->pageSize - nReserve; + assert( (pBt->pageSize & 7)==0 ); /* 8-byte alignment of pageSize */ + +#if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO) + /* Add the new BtShared object to the linked list sharable BtShareds. + */ + pBt->nRef = 1; + if( p->sharable ){ + MUTEX_LOGIC( sqlite3_mutex *mutexShared; ) + MUTEX_LOGIC( mutexShared = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MAIN);) + if( SQLITE_THREADSAFE && sqlite3GlobalConfig.bCoreMutex ){ + pBt->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_FAST); + if( pBt->mutex==0 ){ + rc = SQLITE_NOMEM_BKPT; + goto btree_open_out; + } + } + sqlite3_mutex_enter(mutexShared); + pBt->pNext = GLOBAL(BtShared*,sqlite3SharedCacheList); + GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt; + sqlite3_mutex_leave(mutexShared); + } +#endif + } + +#if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO) + /* If the new Btree uses a sharable pBtShared, then link the new + ** Btree into the list of all sharable Btrees for the same connection. + ** The list is kept in ascending order by pBt address. + */ + if( p->sharable ){ + int i; + Btree *pSib; + for(i=0; inDb; i++){ + if( (pSib = db->aDb[i].pBt)!=0 && pSib->sharable ){ + while( pSib->pPrev ){ pSib = pSib->pPrev; } + if( (uptr)p->pBt<(uptr)pSib->pBt ){ + p->pNext = pSib; + p->pPrev = 0; + pSib->pPrev = p; + }else{ + while( pSib->pNext && (uptr)pSib->pNext->pBt<(uptr)p->pBt ){ + pSib = pSib->pNext; + } + p->pNext = pSib->pNext; + p->pPrev = pSib; + if( p->pNext ){ + p->pNext->pPrev = p; + } + pSib->pNext = p; + } + break; + } + } + } +#endif + *ppBtree = p; + +btree_open_out: + if( rc!=SQLITE_OK ){ + if( pBt && pBt->pPager ){ + sqlite3PagerClose(pBt->pPager, 0); + } + sqlite3_free(pBt); + sqlite3_free(p); + *ppBtree = 0; + }else{ + sqlite3_file *pFile; + + /* If the B-Tree was successfully opened, set the pager-cache size to the + ** default value. Except, when opening on an existing shared pager-cache, + ** do not change the pager-cache size. + */ + if( sqlite3BtreeSchema(p, 0, 0)==0 ){ + sqlite3BtreeSetCacheSize(p, SQLITE_DEFAULT_CACHE_SIZE); + } + + pFile = sqlite3PagerFile(pBt->pPager); + if( pFile->pMethods ){ + sqlite3OsFileControlHint(pFile, SQLITE_FCNTL_PDB, (void*)&pBt->db); + } + } + if( mutexOpen ){ + assert( sqlite3_mutex_held(mutexOpen) ); + sqlite3_mutex_leave(mutexOpen); + } + assert( rc!=SQLITE_OK || sqlite3BtreeConnectionCount(*ppBtree)>0 ); + return rc; +} + +/* +** Decrement the BtShared.nRef counter. When it reaches zero, +** remove the BtShared structure from the sharing list. Return +** true if the BtShared.nRef counter reaches zero and return +** false if it is still positive. +*/ +static int removeFromSharingList(BtShared *pBt){ +#ifndef SQLITE_OMIT_SHARED_CACHE + MUTEX_LOGIC( sqlite3_mutex *pMainMtx; ) + BtShared *pList; + int removed = 0; + + assert( sqlite3_mutex_notheld(pBt->mutex) ); + MUTEX_LOGIC( pMainMtx = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MAIN); ) + sqlite3_mutex_enter(pMainMtx); + pBt->nRef--; + if( pBt->nRef<=0 ){ + if( GLOBAL(BtShared*,sqlite3SharedCacheList)==pBt ){ + GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt->pNext; + }else{ + pList = GLOBAL(BtShared*,sqlite3SharedCacheList); + while( ALWAYS(pList) && pList->pNext!=pBt ){ + pList=pList->pNext; + } + if( ALWAYS(pList) ){ + pList->pNext = pBt->pNext; + } + } + if( SQLITE_THREADSAFE ){ + sqlite3_mutex_free(pBt->mutex); + } + removed = 1; + } + sqlite3_mutex_leave(pMainMtx); + return removed; +#else + UNUSED_PARAMETER( pBt ); + return 1; +#endif +} + +/* +** Make sure pBt->pTmpSpace points to an allocation of +** MX_CELL_SIZE(pBt) bytes with a 4-byte prefix for a left-child +** pointer. +*/ +static SQLITE_NOINLINE int allocateTempSpace(BtShared *pBt){ + assert( pBt!=0 ); + assert( pBt->pTmpSpace==0 ); + /* This routine is called only by btreeCursor() when allocating the + ** first write cursor for the BtShared object */ + assert( pBt->pCursor!=0 && (pBt->pCursor->curFlags & BTCF_WriteFlag)!=0 ); + pBt->pTmpSpace = sqlite3PageMalloc( pBt->pageSize ); + if( pBt->pTmpSpace==0 ){ + BtCursor *pCur = pBt->pCursor; + pBt->pCursor = pCur->pNext; /* Unlink the cursor */ + memset(pCur, 0, sizeof(*pCur)); + return SQLITE_NOMEM_BKPT; + } + + /* One of the uses of pBt->pTmpSpace is to format cells before + ** inserting them into a leaf page (function fillInCell()). If + ** a cell is less than 4 bytes in size, it is rounded up to 4 bytes + ** by the various routines that manipulate binary cells. Which + ** can mean that fillInCell() only initializes the first 2 or 3 + ** bytes of pTmpSpace, but that the first 4 bytes are copied from + ** it into a database page. This is not actually a problem, but it + ** does cause a valgrind error when the 1 or 2 bytes of uninitialized + ** data is passed to system call write(). So to avoid this error, + ** zero the first 4 bytes of temp space here. + ** + ** Also: Provide four bytes of initialized space before the + ** beginning of pTmpSpace as an area available to prepend the + ** left-child pointer to the beginning of a cell. + */ + memset(pBt->pTmpSpace, 0, 8); + pBt->pTmpSpace += 4; + return SQLITE_OK; +} + +/* +** Free the pBt->pTmpSpace allocation +*/ +static void freeTempSpace(BtShared *pBt){ + if( pBt->pTmpSpace ){ + pBt->pTmpSpace -= 4; + sqlite3PageFree(pBt->pTmpSpace); + pBt->pTmpSpace = 0; + } +} + +/* +** Close an open database and invalidate all cursors. +*/ +SQLITE_PRIVATE int sqlite3BtreeClose(Btree *p){ + BtShared *pBt = p->pBt; + + /* Close all cursors opened via this handle. */ + assert( sqlite3_mutex_held(p->db->mutex) ); + sqlite3BtreeEnter(p); + + /* Verify that no other cursors have this Btree open */ +#ifdef SQLITE_DEBUG + { + BtCursor *pCur = pBt->pCursor; + while( pCur ){ + BtCursor *pTmp = pCur; + pCur = pCur->pNext; + assert( pTmp->pBtree!=p ); + + } + } +#endif + + /* Rollback any active transaction and free the handle structure. + ** The call to sqlite3BtreeRollback() drops any table-locks held by + ** this handle. + */ + sqlite3BtreeRollback(p, SQLITE_OK, 0); + sqlite3BtreeLeave(p); + + /* If there are still other outstanding references to the shared-btree + ** structure, return now. The remainder of this procedure cleans + ** up the shared-btree. + */ + assert( p->wantToLock==0 && p->locked==0 ); + if( !p->sharable || removeFromSharingList(pBt) ){ + /* The pBt is no longer on the sharing list, so we can access + ** it without having to hold the mutex. + ** + ** Clean out and delete the BtShared object. + */ + assert( !pBt->pCursor ); + sqlite3PagerClose(pBt->pPager, p->db); + if( pBt->xFreeSchema && pBt->pSchema ){ + pBt->xFreeSchema(pBt->pSchema); + } + sqlite3DbFree(0, pBt->pSchema); + freeTempSpace(pBt); + sqlite3_free(pBt); + } + +#ifndef SQLITE_OMIT_SHARED_CACHE + assert( p->wantToLock==0 ); + assert( p->locked==0 ); + if( p->pPrev ) p->pPrev->pNext = p->pNext; + if( p->pNext ) p->pNext->pPrev = p->pPrev; +#endif + + sqlite3_free(p); + return SQLITE_OK; +} + +/* +** Change the "soft" limit on the number of pages in the cache. +** Unused and unmodified pages will be recycled when the number of +** pages in the cache exceeds this soft limit. But the size of the +** cache is allowed to grow larger than this limit if it contains +** dirty pages or pages still in active use. +*/ +SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree *p, int mxPage){ + BtShared *pBt = p->pBt; + assert( sqlite3_mutex_held(p->db->mutex) ); + sqlite3BtreeEnter(p); + sqlite3PagerSetCachesize(pBt->pPager, mxPage); + sqlite3BtreeLeave(p); + return SQLITE_OK; +} + +/* +** Change the "spill" limit on the number of pages in the cache. +** If the number of pages exceeds this limit during a write transaction, +** the pager might attempt to "spill" pages to the journal early in +** order to free up memory. +** +** The value returned is the current spill size. If zero is passed +** as an argument, no changes are made to the spill size setting, so +** using mxPage of 0 is a way to query the current spill size. +*/ +SQLITE_PRIVATE int sqlite3BtreeSetSpillSize(Btree *p, int mxPage){ + BtShared *pBt = p->pBt; + int res; + assert( sqlite3_mutex_held(p->db->mutex) ); + sqlite3BtreeEnter(p); + res = sqlite3PagerSetSpillsize(pBt->pPager, mxPage); + sqlite3BtreeLeave(p); + return res; +} + +#if SQLITE_MAX_MMAP_SIZE>0 +/* +** Change the limit on the amount of the database file that may be +** memory mapped. +*/ +SQLITE_PRIVATE int sqlite3BtreeSetMmapLimit(Btree *p, sqlite3_int64 szMmap){ + BtShared *pBt = p->pBt; + assert( sqlite3_mutex_held(p->db->mutex) ); + sqlite3BtreeEnter(p); + sqlite3PagerSetMmapLimit(pBt->pPager, szMmap); + sqlite3BtreeLeave(p); + return SQLITE_OK; +} +#endif /* SQLITE_MAX_MMAP_SIZE>0 */ + +/* +** Change the way data is synced to disk in order to increase or decrease +** how well the database resists damage due to OS crashes and power +** failures. Level 1 is the same as asynchronous (no syncs() occur and +** there is a high probability of damage) Level 2 is the default. There +** is a very low but non-zero probability of damage. Level 3 reduces the +** probability of damage to near zero but with a write performance reduction. +*/ +#ifndef SQLITE_OMIT_PAGER_PRAGMAS +SQLITE_PRIVATE int sqlite3BtreeSetPagerFlags( + Btree *p, /* The btree to set the safety level on */ + unsigned pgFlags /* Various PAGER_* flags */ +){ + BtShared *pBt = p->pBt; + assert( sqlite3_mutex_held(p->db->mutex) ); + sqlite3BtreeEnter(p); + sqlite3PagerSetFlags(pBt->pPager, pgFlags); + sqlite3BtreeLeave(p); + return SQLITE_OK; +} +#endif + +/* +** Change the default pages size and the number of reserved bytes per page. +** Or, if the page size has already been fixed, return SQLITE_READONLY +** without changing anything. +** +** The page size must be a power of 2 between 512 and 65536. If the page +** size supplied does not meet this constraint then the page size is not +** changed. +** +** Page sizes are constrained to be a power of two so that the region +** of the database file used for locking (beginning at PENDING_BYTE, +** the first byte past the 1GB boundary, 0x40000000) needs to occur +** at the beginning of a page. +** +** If parameter nReserve is less than zero, then the number of reserved +** bytes per page is left unchanged. +** +** If the iFix!=0 then the BTS_PAGESIZE_FIXED flag is set so that the page size +** and autovacuum mode can no longer be changed. +*/ +SQLITE_PRIVATE int sqlite3BtreeSetPageSize(Btree *p, int pageSize, int nReserve, int iFix){ + int rc = SQLITE_OK; + int x; + BtShared *pBt = p->pBt; + assert( nReserve>=0 && nReserve<=255 ); + sqlite3BtreeEnter(p); + pBt->nReserveWanted = (u8)nReserve; + x = pBt->pageSize - pBt->usableSize; + if( x==nReserve && (pageSize==0 || (u32)pageSize==pBt->pageSize) ){ + sqlite3BtreeLeave(p); + return SQLITE_OK; + } + if( nReservebtsFlags & BTS_PAGESIZE_FIXED ){ + sqlite3BtreeLeave(p); + return SQLITE_READONLY; + } + assert( nReserve>=0 && nReserve<=255 ); + if( pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE && + ((pageSize-1)&pageSize)==0 ){ + assert( (pageSize & 7)==0 ); + assert( !pBt->pCursor ); + if( nReserve>32 && pageSize==512 ) pageSize = 1024; + pBt->pageSize = (u32)pageSize; + freeTempSpace(pBt); + } + rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve); + pBt->usableSize = pBt->pageSize - (u16)nReserve; + if( iFix ) pBt->btsFlags |= BTS_PAGESIZE_FIXED; + sqlite3BtreeLeave(p); + return rc; +} + +/* +** Return the currently defined page size +*/ +SQLITE_PRIVATE int sqlite3BtreeGetPageSize(Btree *p){ + return p->pBt->pageSize; +} + +/* +** This function is similar to sqlite3BtreeGetReserve(), except that it +** may only be called if it is guaranteed that the b-tree mutex is already +** held. +** +** This is useful in one special case in the backup API code where it is +** known that the shared b-tree mutex is held, but the mutex on the +** database handle that owns *p is not. In this case if sqlite3BtreeEnter() +** were to be called, it might collide with some other operation on the +** database handle that owns *p, causing undefined behavior. +*/ +SQLITE_PRIVATE int sqlite3BtreeGetReserveNoMutex(Btree *p){ + int n; + assert( sqlite3_mutex_held(p->pBt->mutex) ); + n = p->pBt->pageSize - p->pBt->usableSize; + return n; +} + +/* +** Return the number of bytes of space at the end of every page that +** are intentionally left unused. This is the "reserved" space that is +** sometimes used by extensions. +** +** The value returned is the larger of the current reserve size and +** the latest reserve size requested by SQLITE_FILECTRL_RESERVE_BYTES. +** The amount of reserve can only grow - never shrink. +*/ +SQLITE_PRIVATE int sqlite3BtreeGetRequestedReserve(Btree *p){ + int n1, n2; + sqlite3BtreeEnter(p); + n1 = (int)p->pBt->nReserveWanted; + n2 = sqlite3BtreeGetReserveNoMutex(p); + sqlite3BtreeLeave(p); + return n1>n2 ? n1 : n2; +} + + +/* +** Set the maximum page count for a database if mxPage is positive. +** No changes are made if mxPage is 0 or negative. +** Regardless of the value of mxPage, return the maximum page count. +*/ +SQLITE_PRIVATE Pgno sqlite3BtreeMaxPageCount(Btree *p, Pgno mxPage){ + Pgno n; + sqlite3BtreeEnter(p); + n = sqlite3PagerMaxPageCount(p->pBt->pPager, mxPage); + sqlite3BtreeLeave(p); + return n; +} + +/* +** Change the values for the BTS_SECURE_DELETE and BTS_OVERWRITE flags: +** +** newFlag==0 Both BTS_SECURE_DELETE and BTS_OVERWRITE are cleared +** newFlag==1 BTS_SECURE_DELETE set and BTS_OVERWRITE is cleared +** newFlag==2 BTS_SECURE_DELETE cleared and BTS_OVERWRITE is set +** newFlag==(-1) No changes +** +** This routine acts as a query if newFlag is less than zero +** +** With BTS_OVERWRITE set, deleted content is overwritten by zeros, but +** freelist leaf pages are not written back to the database. Thus in-page +** deleted content is cleared, but freelist deleted content is not. +** +** With BTS_SECURE_DELETE, operation is like BTS_OVERWRITE with the addition +** that freelist leaf pages are written back into the database, increasing +** the amount of disk I/O. +*/ +SQLITE_PRIVATE int sqlite3BtreeSecureDelete(Btree *p, int newFlag){ + int b; + if( p==0 ) return 0; + sqlite3BtreeEnter(p); + assert( BTS_OVERWRITE==BTS_SECURE_DELETE*2 ); + assert( BTS_FAST_SECURE==(BTS_OVERWRITE|BTS_SECURE_DELETE) ); + if( newFlag>=0 ){ + p->pBt->btsFlags &= ~BTS_FAST_SECURE; + p->pBt->btsFlags |= (u16)(BTS_SECURE_DELETE*newFlag); + } + b = (p->pBt->btsFlags & BTS_FAST_SECURE)/BTS_SECURE_DELETE; + sqlite3BtreeLeave(p); + return b; +} + +/* +** Change the 'auto-vacuum' property of the database. If the 'autoVacuum' +** parameter is non-zero, then auto-vacuum mode is enabled. If zero, it +** is disabled. The default value for the auto-vacuum property is +** determined by the SQLITE_DEFAULT_AUTOVACUUM macro. +*/ +SQLITE_PRIVATE int sqlite3BtreeSetAutoVacuum(Btree *p, int autoVacuum){ +#ifdef SQLITE_OMIT_AUTOVACUUM + return SQLITE_READONLY; +#else + BtShared *pBt = p->pBt; + int rc = SQLITE_OK; + u8 av = (u8)autoVacuum; + + sqlite3BtreeEnter(p); + if( (pBt->btsFlags & BTS_PAGESIZE_FIXED)!=0 && (av ?1:0)!=pBt->autoVacuum ){ + rc = SQLITE_READONLY; + }else{ + pBt->autoVacuum = av ?1:0; + pBt->incrVacuum = av==2 ?1:0; + } + sqlite3BtreeLeave(p); + return rc; +#endif +} + +/* +** Return the value of the 'auto-vacuum' property. If auto-vacuum is +** enabled 1 is returned. Otherwise 0. +*/ +SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *p){ +#ifdef SQLITE_OMIT_AUTOVACUUM + return BTREE_AUTOVACUUM_NONE; +#else + int rc; + sqlite3BtreeEnter(p); + rc = ( + (!p->pBt->autoVacuum)?BTREE_AUTOVACUUM_NONE: + (!p->pBt->incrVacuum)?BTREE_AUTOVACUUM_FULL: + BTREE_AUTOVACUUM_INCR + ); + sqlite3BtreeLeave(p); + return rc; +#endif +} + +/* +** If the user has not set the safety-level for this database connection +** using "PRAGMA synchronous", and if the safety-level is not already +** set to the value passed to this function as the second parameter, +** set it so. +*/ +#if SQLITE_DEFAULT_SYNCHRONOUS!=SQLITE_DEFAULT_WAL_SYNCHRONOUS \ + && !defined(SQLITE_OMIT_WAL) +static void setDefaultSyncFlag(BtShared *pBt, u8 safety_level){ + sqlite3 *db; + Db *pDb; + if( (db=pBt->db)!=0 && (pDb=db->aDb)!=0 ){ + while( pDb->pBt==0 || pDb->pBt->pBt!=pBt ){ pDb++; } + if( pDb->bSyncSet==0 + && pDb->safety_level!=safety_level + && pDb!=&db->aDb[1] + ){ + pDb->safety_level = safety_level; + sqlite3PagerSetFlags(pBt->pPager, + pDb->safety_level | (db->flags & PAGER_FLAGS_MASK)); + } + } +} +#else +# define setDefaultSyncFlag(pBt,safety_level) +#endif + +/* Forward declaration */ +static int newDatabase(BtShared*); + + +/* +** Get a reference to pPage1 of the database file. This will +** also acquire a readlock on that file. +** +** SQLITE_OK is returned on success. If the file is not a +** well-formed database file, then SQLITE_CORRUPT is returned. +** SQLITE_BUSY is returned if the database is locked. SQLITE_NOMEM +** is returned if we run out of memory. +*/ +static int lockBtree(BtShared *pBt){ + int rc; /* Result code from subfunctions */ + MemPage *pPage1; /* Page 1 of the database file */ + u32 nPage; /* Number of pages in the database */ + u32 nPageFile = 0; /* Number of pages in the database file */ + + assert( sqlite3_mutex_held(pBt->mutex) ); + assert( pBt->pPage1==0 ); + rc = sqlite3PagerSharedLock(pBt->pPager); + if( rc!=SQLITE_OK ) return rc; + rc = btreeGetPage(pBt, 1, &pPage1, 0); + if( rc!=SQLITE_OK ) return rc; + + /* Do some checking to help insure the file we opened really is + ** a valid database file. + */ + nPage = get4byte(28+(u8*)pPage1->aData); + sqlite3PagerPagecount(pBt->pPager, (int*)&nPageFile); + if( nPage==0 || memcmp(24+(u8*)pPage1->aData, 92+(u8*)pPage1->aData,4)!=0 ){ + nPage = nPageFile; + } + if( (pBt->db->flags & SQLITE_ResetDatabase)!=0 ){ + nPage = 0; + } + if( nPage>0 ){ + u32 pageSize; + u32 usableSize; + u8 *page1 = pPage1->aData; + rc = SQLITE_NOTADB; + /* EVIDENCE-OF: R-43737-39999 Every valid SQLite database file begins + ** with the following 16 bytes (in hex): 53 51 4c 69 74 65 20 66 6f 72 6d + ** 61 74 20 33 00. */ + if( memcmp(page1, zMagicHeader, 16)!=0 ){ + goto page1_init_failed; + } + +#ifdef SQLITE_OMIT_WAL + if( page1[18]>1 ){ + pBt->btsFlags |= BTS_READ_ONLY; + } + if( page1[19]>1 ){ + goto page1_init_failed; + } +#else + if( page1[18]>2 ){ + pBt->btsFlags |= BTS_READ_ONLY; + } + if( page1[19]>2 ){ + goto page1_init_failed; + } + + /* If the read version is set to 2, this database should be accessed + ** in WAL mode. If the log is not already open, open it now. Then + ** return SQLITE_OK and return without populating BtShared.pPage1. + ** The caller detects this and calls this function again. This is + ** required as the version of page 1 currently in the page1 buffer + ** may not be the latest version - there may be a newer one in the log + ** file. + */ + if( page1[19]==2 && (pBt->btsFlags & BTS_NO_WAL)==0 ){ + int isOpen = 0; + rc = sqlite3PagerOpenWal(pBt->pPager, &isOpen); + if( rc!=SQLITE_OK ){ + goto page1_init_failed; + }else{ + setDefaultSyncFlag(pBt, SQLITE_DEFAULT_WAL_SYNCHRONOUS+1); + if( isOpen==0 ){ + releasePageOne(pPage1); + return SQLITE_OK; + } + } + rc = SQLITE_NOTADB; + }else{ + setDefaultSyncFlag(pBt, SQLITE_DEFAULT_SYNCHRONOUS+1); + } +#endif + + /* EVIDENCE-OF: R-15465-20813 The maximum and minimum embedded payload + ** fractions and the leaf payload fraction values must be 64, 32, and 32. + ** + ** The original design allowed these amounts to vary, but as of + ** version 3.6.0, we require them to be fixed. + */ + if( memcmp(&page1[21], "\100\040\040",3)!=0 ){ + goto page1_init_failed; + } + /* EVIDENCE-OF: R-51873-39618 The page size for a database file is + ** determined by the 2-byte integer located at an offset of 16 bytes from + ** the beginning of the database file. */ + pageSize = (page1[16]<<8) | (page1[17]<<16); + /* EVIDENCE-OF: R-25008-21688 The size of a page is a power of two + ** between 512 and 65536 inclusive. */ + if( ((pageSize-1)&pageSize)!=0 + || pageSize>SQLITE_MAX_PAGE_SIZE + || pageSize<=256 + ){ + goto page1_init_failed; + } + assert( (pageSize & 7)==0 ); + /* EVIDENCE-OF: R-59310-51205 The "reserved space" size in the 1-byte + ** integer at offset 20 is the number of bytes of space at the end of + ** each page to reserve for extensions. + ** + ** EVIDENCE-OF: R-37497-42412 The size of the reserved region is + ** determined by the one-byte unsigned integer found at an offset of 20 + ** into the database file header. */ + usableSize = pageSize - page1[20]; + if( (u32)pageSize!=pBt->pageSize ){ + /* After reading the first page of the database assuming a page size + ** of BtShared.pageSize, we have discovered that the page-size is + ** actually pageSize. Unlock the database, leave pBt->pPage1 at + ** zero and return SQLITE_OK. The caller will call this function + ** again with the correct page-size. + */ + releasePageOne(pPage1); + pBt->usableSize = usableSize; + pBt->pageSize = pageSize; + pBt->btsFlags |= BTS_PAGESIZE_FIXED; + freeTempSpace(pBt); + rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, + pageSize-usableSize); + return rc; + } + if( nPage>nPageFile ){ + if( sqlite3WritableSchema(pBt->db)==0 ){ + rc = SQLITE_CORRUPT_BKPT; + goto page1_init_failed; + }else{ + nPage = nPageFile; + } + } + /* EVIDENCE-OF: R-28312-64704 However, the usable size is not allowed to + ** be less than 480. In other words, if the page size is 512, then the + ** reserved space size cannot exceed 32. */ + if( usableSize<480 ){ + goto page1_init_failed; + } + pBt->btsFlags |= BTS_PAGESIZE_FIXED; + pBt->pageSize = pageSize; + pBt->usableSize = usableSize; +#ifndef SQLITE_OMIT_AUTOVACUUM + pBt->autoVacuum = (get4byte(&page1[36 + 4*4])?1:0); + pBt->incrVacuum = (get4byte(&page1[36 + 7*4])?1:0); +#endif + } + + /* maxLocal is the maximum amount of payload to store locally for + ** a cell. Make sure it is small enough so that at least minFanout + ** cells can will fit on one page. We assume a 10-byte page header. + ** Besides the payload, the cell must store: + ** 2-byte pointer to the cell + ** 4-byte child pointer + ** 9-byte nKey value + ** 4-byte nData value + ** 4-byte overflow page pointer + ** So a cell consists of a 2-byte pointer, a header which is as much as + ** 17 bytes long, 0 to N bytes of payload, and an optional 4 byte overflow + ** page pointer. + */ + pBt->maxLocal = (u16)((pBt->usableSize-12)*64/255 - 23); + pBt->minLocal = (u16)((pBt->usableSize-12)*32/255 - 23); + pBt->maxLeaf = (u16)(pBt->usableSize - 35); + pBt->minLeaf = (u16)((pBt->usableSize-12)*32/255 - 23); + if( pBt->maxLocal>127 ){ + pBt->max1bytePayload = 127; + }else{ + pBt->max1bytePayload = (u8)pBt->maxLocal; + } + assert( pBt->maxLeaf + 23 <= MX_CELL_SIZE(pBt) ); + pBt->pPage1 = pPage1; + pBt->nPage = nPage; + return SQLITE_OK; + +page1_init_failed: + releasePageOne(pPage1); + pBt->pPage1 = 0; + return rc; +} + +#ifndef NDEBUG +/* +** Return the number of cursors open on pBt. This is for use +** in assert() expressions, so it is only compiled if NDEBUG is not +** defined. +** +** Only write cursors are counted if wrOnly is true. If wrOnly is +** false then all cursors are counted. +** +** For the purposes of this routine, a cursor is any cursor that +** is capable of reading or writing to the database. Cursors that +** have been tripped into the CURSOR_FAULT state are not counted. +*/ +static int countValidCursors(BtShared *pBt, int wrOnly){ + BtCursor *pCur; + int r = 0; + for(pCur=pBt->pCursor; pCur; pCur=pCur->pNext){ + if( (wrOnly==0 || (pCur->curFlags & BTCF_WriteFlag)!=0) + && pCur->eState!=CURSOR_FAULT ) r++; + } + return r; +} +#endif + +/* +** If there are no outstanding cursors and we are not in the middle +** of a transaction but there is a read lock on the database, then +** this routine unrefs the first page of the database file which +** has the effect of releasing the read lock. +** +** If there is a transaction in progress, this routine is a no-op. +*/ +static void unlockBtreeIfUnused(BtShared *pBt){ + assert( sqlite3_mutex_held(pBt->mutex) ); + assert( countValidCursors(pBt,0)==0 || pBt->inTransaction>TRANS_NONE ); + if( pBt->inTransaction==TRANS_NONE && pBt->pPage1!=0 ){ + MemPage *pPage1 = pBt->pPage1; + assert( pPage1->aData ); + assert( sqlite3PagerRefcount(pBt->pPager)==1 ); + pBt->pPage1 = 0; + releasePageOne(pPage1); + } +} + +/* +** If pBt points to an empty file then convert that empty file +** into a new empty database by initializing the first page of +** the database. +*/ +static int newDatabase(BtShared *pBt){ + MemPage *pP1; + unsigned char *data; + int rc; + + assert( sqlite3_mutex_held(pBt->mutex) ); + if( pBt->nPage>0 ){ + return SQLITE_OK; + } + pP1 = pBt->pPage1; + assert( pP1!=0 ); + data = pP1->aData; + rc = sqlite3PagerWrite(pP1->pDbPage); + if( rc ) return rc; + memcpy(data, zMagicHeader, sizeof(zMagicHeader)); + assert( sizeof(zMagicHeader)==16 ); + data[16] = (u8)((pBt->pageSize>>8)&0xff); + data[17] = (u8)((pBt->pageSize>>16)&0xff); + data[18] = 1; + data[19] = 1; + assert( pBt->usableSize<=pBt->pageSize && pBt->usableSize+255>=pBt->pageSize); + data[20] = (u8)(pBt->pageSize - pBt->usableSize); + data[21] = 64; + data[22] = 32; + data[23] = 32; + memset(&data[24], 0, 100-24); + zeroPage(pP1, PTF_INTKEY|PTF_LEAF|PTF_LEAFDATA ); + pBt->btsFlags |= BTS_PAGESIZE_FIXED; +#ifndef SQLITE_OMIT_AUTOVACUUM + assert( pBt->autoVacuum==1 || pBt->autoVacuum==0 ); + assert( pBt->incrVacuum==1 || pBt->incrVacuum==0 ); + put4byte(&data[36 + 4*4], pBt->autoVacuum); + put4byte(&data[36 + 7*4], pBt->incrVacuum); +#endif + pBt->nPage = 1; + data[31] = 1; + return SQLITE_OK; +} + +/* +** Initialize the first page of the database file (creating a database +** consisting of a single page and no schema objects). Return SQLITE_OK +** if successful, or an SQLite error code otherwise. +*/ +SQLITE_PRIVATE int sqlite3BtreeNewDb(Btree *p){ + int rc; + sqlite3BtreeEnter(p); + p->pBt->nPage = 0; + rc = newDatabase(p->pBt); + sqlite3BtreeLeave(p); + return rc; +} + +/* +** Attempt to start a new transaction. A write-transaction +** is started if the second argument is nonzero, otherwise a read- +** transaction. If the second argument is 2 or more and exclusive +** transaction is started, meaning that no other process is allowed +** to access the database. A preexisting transaction may not be +** upgraded to exclusive by calling this routine a second time - the +** exclusivity flag only works for a new transaction. +** +** A write-transaction must be started before attempting any +** changes to the database. None of the following routines +** will work unless a transaction is started first: +** +** sqlite3BtreeCreateTable() +** sqlite3BtreeCreateIndex() +** sqlite3BtreeClearTable() +** sqlite3BtreeDropTable() +** sqlite3BtreeInsert() +** sqlite3BtreeDelete() +** sqlite3BtreeUpdateMeta() +** +** If an initial attempt to acquire the lock fails because of lock contention +** and the database was previously unlocked, then invoke the busy handler +** if there is one. But if there was previously a read-lock, do not +** invoke the busy handler - just return SQLITE_BUSY. SQLITE_BUSY is +** returned when there is already a read-lock in order to avoid a deadlock. +** +** Suppose there are two processes A and B. A has a read lock and B has +** a reserved lock. B tries to promote to exclusive but is blocked because +** of A's read lock. A tries to promote to reserved but is blocked by B. +** One or the other of the two processes must give way or there can be +** no progress. By returning SQLITE_BUSY and not invoking the busy callback +** when A already has a read lock, we encourage A to give up and let B +** proceed. +*/ +static SQLITE_NOINLINE int btreeBeginTrans( + Btree *p, /* The btree in which to start the transaction */ + int wrflag, /* True to start a write transaction */ + int *pSchemaVersion /* Put schema version number here, if not NULL */ +){ + BtShared *pBt = p->pBt; + Pager *pPager = pBt->pPager; + int rc = SQLITE_OK; + + sqlite3BtreeEnter(p); + btreeIntegrity(p); + + /* If the btree is already in a write-transaction, or it + ** is already in a read-transaction and a read-transaction + ** is requested, this is a no-op. + */ + if( p->inTrans==TRANS_WRITE || (p->inTrans==TRANS_READ && !wrflag) ){ + goto trans_begun; + } + assert( pBt->inTransaction==TRANS_WRITE || IfNotOmitAV(pBt->bDoTruncate)==0 ); + + if( (p->db->flags & SQLITE_ResetDatabase) + && sqlite3PagerIsreadonly(pPager)==0 + ){ + pBt->btsFlags &= ~BTS_READ_ONLY; + } + + /* Write transactions are not possible on a read-only database */ + if( (pBt->btsFlags & BTS_READ_ONLY)!=0 && wrflag ){ + rc = SQLITE_READONLY; + goto trans_begun; + } + +#ifndef SQLITE_OMIT_SHARED_CACHE + { + sqlite3 *pBlock = 0; + /* If another database handle has already opened a write transaction + ** on this shared-btree structure and a second write transaction is + ** requested, return SQLITE_LOCKED. + */ + if( (wrflag && pBt->inTransaction==TRANS_WRITE) + || (pBt->btsFlags & BTS_PENDING)!=0 + ){ + pBlock = pBt->pWriter->db; + }else if( wrflag>1 ){ + BtLock *pIter; + for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){ + if( pIter->pBtree!=p ){ + pBlock = pIter->pBtree->db; + break; + } + } + } + if( pBlock ){ + sqlite3ConnectionBlocked(p->db, pBlock); + rc = SQLITE_LOCKED_SHAREDCACHE; + goto trans_begun; + } + } +#endif + + /* Any read-only or read-write transaction implies a read-lock on + ** page 1. So if some other shared-cache client already has a write-lock + ** on page 1, the transaction cannot be opened. */ + rc = querySharedCacheTableLock(p, SCHEMA_ROOT, READ_LOCK); + if( SQLITE_OK!=rc ) goto trans_begun; + + pBt->btsFlags &= ~BTS_INITIALLY_EMPTY; + if( pBt->nPage==0 ) pBt->btsFlags |= BTS_INITIALLY_EMPTY; + do { + sqlite3PagerWalDb(pPager, p->db); + +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + /* If transitioning from no transaction directly to a write transaction, + ** block for the WRITER lock first if possible. */ + if( pBt->pPage1==0 && wrflag ){ + assert( pBt->inTransaction==TRANS_NONE ); + rc = sqlite3PagerWalWriteLock(pPager, 1); + if( rc!=SQLITE_BUSY && rc!=SQLITE_OK ) break; + } +#endif + + /* Call lockBtree() until either pBt->pPage1 is populated or + ** lockBtree() returns something other than SQLITE_OK. lockBtree() + ** may return SQLITE_OK but leave pBt->pPage1 set to 0 if after + ** reading page 1 it discovers that the page-size of the database + ** file is not pBt->pageSize. In this case lockBtree() will update + ** pBt->pageSize to the page-size of the file on disk. + */ + while( pBt->pPage1==0 && SQLITE_OK==(rc = lockBtree(pBt)) ); + + if( rc==SQLITE_OK && wrflag ){ + if( (pBt->btsFlags & BTS_READ_ONLY)!=0 ){ + rc = SQLITE_READONLY; + }else{ + rc = sqlite3PagerBegin(pPager, wrflag>1, sqlite3TempInMemory(p->db)); + if( rc==SQLITE_OK ){ + rc = newDatabase(pBt); + }else if( rc==SQLITE_BUSY_SNAPSHOT && pBt->inTransaction==TRANS_NONE ){ + /* if there was no transaction opened when this function was + ** called and SQLITE_BUSY_SNAPSHOT is returned, change the error + ** code to SQLITE_BUSY. */ + rc = SQLITE_BUSY; + } + } + } + + if( rc!=SQLITE_OK ){ + (void)sqlite3PagerWalWriteLock(pPager, 0); + unlockBtreeIfUnused(pBt); + } +#if defined(SQLITE_ENABLE_SETLK_TIMEOUT) + if( rc==SQLITE_BUSY_TIMEOUT ){ + /* If a blocking lock timed out, break out of the loop here so that + ** the busy-handler is not invoked. */ + break; + } +#endif + }while( (rc&0xFF)==SQLITE_BUSY && pBt->inTransaction==TRANS_NONE && + btreeInvokeBusyHandler(pBt) ); + sqlite3PagerWalDb(pPager, 0); +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + if( rc==SQLITE_BUSY_TIMEOUT ) rc = SQLITE_BUSY; +#endif + + if( rc==SQLITE_OK ){ + if( p->inTrans==TRANS_NONE ){ + pBt->nTransaction++; +#ifndef SQLITE_OMIT_SHARED_CACHE + if( p->sharable ){ + assert( p->lock.pBtree==p && p->lock.iTable==1 ); + p->lock.eLock = READ_LOCK; + p->lock.pNext = pBt->pLock; + pBt->pLock = &p->lock; + } +#endif + } + p->inTrans = (wrflag?TRANS_WRITE:TRANS_READ); + if( p->inTrans>pBt->inTransaction ){ + pBt->inTransaction = p->inTrans; + } + if( wrflag ){ + MemPage *pPage1 = pBt->pPage1; +#ifndef SQLITE_OMIT_SHARED_CACHE + assert( !pBt->pWriter ); + pBt->pWriter = p; + pBt->btsFlags &= ~BTS_EXCLUSIVE; + if( wrflag>1 ) pBt->btsFlags |= BTS_EXCLUSIVE; +#endif + + /* If the db-size header field is incorrect (as it may be if an old + ** client has been writing the database file), update it now. Doing + ** this sooner rather than later means the database size can safely + ** re-read the database size from page 1 if a savepoint or transaction + ** rollback occurs within the transaction. + */ + if( pBt->nPage!=get4byte(&pPage1->aData[28]) ){ + rc = sqlite3PagerWrite(pPage1->pDbPage); + if( rc==SQLITE_OK ){ + put4byte(&pPage1->aData[28], pBt->nPage); + } + } + } + } + +trans_begun: + if( rc==SQLITE_OK ){ + if( pSchemaVersion ){ + *pSchemaVersion = get4byte(&pBt->pPage1->aData[40]); + } + if( wrflag ){ + /* This call makes sure that the pager has the correct number of + ** open savepoints. If the second parameter is greater than 0 and + ** the sub-journal is not already open, then it will be opened here. + */ + rc = sqlite3PagerOpenSavepoint(pPager, p->db->nSavepoint); + } + } + + btreeIntegrity(p); + sqlite3BtreeLeave(p); + return rc; +} +SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree *p, int wrflag, int *pSchemaVersion){ + BtShared *pBt; + if( p->sharable + || p->inTrans==TRANS_NONE + || (p->inTrans==TRANS_READ && wrflag!=0) + ){ + return btreeBeginTrans(p,wrflag,pSchemaVersion); + } + pBt = p->pBt; + if( pSchemaVersion ){ + *pSchemaVersion = get4byte(&pBt->pPage1->aData[40]); + } + if( wrflag ){ + /* This call makes sure that the pager has the correct number of + ** open savepoints. If the second parameter is greater than 0 and + ** the sub-journal is not already open, then it will be opened here. + */ + return sqlite3PagerOpenSavepoint(pBt->pPager, p->db->nSavepoint); + }else{ + return SQLITE_OK; + } +} + +#ifndef SQLITE_OMIT_AUTOVACUUM + +/* +** Set the pointer-map entries for all children of page pPage. Also, if +** pPage contains cells that point to overflow pages, set the pointer +** map entries for the overflow pages as well. +*/ +static int setChildPtrmaps(MemPage *pPage){ + int i; /* Counter variable */ + int nCell; /* Number of cells in page pPage */ + int rc; /* Return code */ + BtShared *pBt = pPage->pBt; + Pgno pgno = pPage->pgno; + + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + rc = pPage->isInit ? SQLITE_OK : btreeInitPage(pPage); + if( rc!=SQLITE_OK ) return rc; + nCell = pPage->nCell; + + for(i=0; ileaf ){ + Pgno childPgno = get4byte(pCell); + ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno, &rc); + } + } + + if( !pPage->leaf ){ + Pgno childPgno = get4byte(&pPage->aData[pPage->hdrOffset+8]); + ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno, &rc); + } + + return rc; +} + +/* +** Somewhere on pPage is a pointer to page iFrom. Modify this pointer so +** that it points to iTo. Parameter eType describes the type of pointer to +** be modified, as follows: +** +** PTRMAP_BTREE: pPage is a btree-page. The pointer points at a child +** page of pPage. +** +** PTRMAP_OVERFLOW1: pPage is a btree-page. The pointer points at an overflow +** page pointed to by one of the cells on pPage. +** +** PTRMAP_OVERFLOW2: pPage is an overflow-page. The pointer points at the next +** overflow page in the list. +*/ +static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){ + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + if( eType==PTRMAP_OVERFLOW2 ){ + /* The pointer is always the first 4 bytes of the page in this case. */ + if( get4byte(pPage->aData)!=iFrom ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + put4byte(pPage->aData, iTo); + }else{ + int i; + int nCell; + int rc; + + rc = pPage->isInit ? SQLITE_OK : btreeInitPage(pPage); + if( rc ) return rc; + nCell = pPage->nCell; + + for(i=0; ixParseCell(pPage, pCell, &info); + if( info.nLocal pPage->aData+pPage->pBt->usableSize ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + if( iFrom==get4byte(pCell+info.nSize-4) ){ + put4byte(pCell+info.nSize-4, iTo); + break; + } + } + }else{ + if( pCell+4 > pPage->aData+pPage->pBt->usableSize ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + if( get4byte(pCell)==iFrom ){ + put4byte(pCell, iTo); + break; + } + } + } + + if( i==nCell ){ + if( eType!=PTRMAP_BTREE || + get4byte(&pPage->aData[pPage->hdrOffset+8])!=iFrom ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + put4byte(&pPage->aData[pPage->hdrOffset+8], iTo); + } + } + return SQLITE_OK; +} + + +/* +** Move the open database page pDbPage to location iFreePage in the +** database. The pDbPage reference remains valid. +** +** The isCommit flag indicates that there is no need to remember that +** the journal needs to be sync()ed before database page pDbPage->pgno +** can be written to. The caller has already promised not to write to that +** page. +*/ +static int relocatePage( + BtShared *pBt, /* Btree */ + MemPage *pDbPage, /* Open page to move */ + u8 eType, /* Pointer map 'type' entry for pDbPage */ + Pgno iPtrPage, /* Pointer map 'page-no' entry for pDbPage */ + Pgno iFreePage, /* The location to move pDbPage to */ + int isCommit /* isCommit flag passed to sqlite3PagerMovepage */ +){ + MemPage *pPtrPage; /* The page that contains a pointer to pDbPage */ + Pgno iDbPage = pDbPage->pgno; + Pager *pPager = pBt->pPager; + int rc; + + assert( eType==PTRMAP_OVERFLOW2 || eType==PTRMAP_OVERFLOW1 || + eType==PTRMAP_BTREE || eType==PTRMAP_ROOTPAGE ); + assert( sqlite3_mutex_held(pBt->mutex) ); + assert( pDbPage->pBt==pBt ); + if( iDbPage<3 ) return SQLITE_CORRUPT_BKPT; + + /* Move page iDbPage from its current location to page number iFreePage */ + TRACE(("AUTOVACUUM: Moving %u to free page %u (ptr page %u type %u)\n", + iDbPage, iFreePage, iPtrPage, eType)); + rc = sqlite3PagerMovepage(pPager, pDbPage->pDbPage, iFreePage, isCommit); + if( rc!=SQLITE_OK ){ + return rc; + } + pDbPage->pgno = iFreePage; + + /* If pDbPage was a btree-page, then it may have child pages and/or cells + ** that point to overflow pages. The pointer map entries for all these + ** pages need to be changed. + ** + ** If pDbPage is an overflow page, then the first 4 bytes may store a + ** pointer to a subsequent overflow page. If this is the case, then + ** the pointer map needs to be updated for the subsequent overflow page. + */ + if( eType==PTRMAP_BTREE || eType==PTRMAP_ROOTPAGE ){ + rc = setChildPtrmaps(pDbPage); + if( rc!=SQLITE_OK ){ + return rc; + } + }else{ + Pgno nextOvfl = get4byte(pDbPage->aData); + if( nextOvfl!=0 ){ + ptrmapPut(pBt, nextOvfl, PTRMAP_OVERFLOW2, iFreePage, &rc); + if( rc!=SQLITE_OK ){ + return rc; + } + } + } + + /* Fix the database pointer on page iPtrPage that pointed at iDbPage so + ** that it points at iFreePage. Also fix the pointer map entry for + ** iPtrPage. + */ + if( eType!=PTRMAP_ROOTPAGE ){ + rc = btreeGetPage(pBt, iPtrPage, &pPtrPage, 0); + if( rc!=SQLITE_OK ){ + return rc; + } + rc = sqlite3PagerWrite(pPtrPage->pDbPage); + if( rc!=SQLITE_OK ){ + releasePage(pPtrPage); + return rc; + } + rc = modifyPagePointer(pPtrPage, iDbPage, iFreePage, eType); + releasePage(pPtrPage); + if( rc==SQLITE_OK ){ + ptrmapPut(pBt, iFreePage, eType, iPtrPage, &rc); + } + } + return rc; +} + +/* Forward declaration required by incrVacuumStep(). */ +static int allocateBtreePage(BtShared *, MemPage **, Pgno *, Pgno, u8); + +/* +** Perform a single step of an incremental-vacuum. If successful, return +** SQLITE_OK. If there is no work to do (and therefore no point in +** calling this function again), return SQLITE_DONE. Or, if an error +** occurs, return some other error code. +** +** More specifically, this function attempts to re-organize the database so +** that the last page of the file currently in use is no longer in use. +** +** Parameter nFin is the number of pages that this database would contain +** were this function called until it returns SQLITE_DONE. +** +** If the bCommit parameter is non-zero, this function assumes that the +** caller will keep calling incrVacuumStep() until it returns SQLITE_DONE +** or an error. bCommit is passed true for an auto-vacuum-on-commit +** operation, or false for an incremental vacuum. +*/ +static int incrVacuumStep(BtShared *pBt, Pgno nFin, Pgno iLastPg, int bCommit){ + Pgno nFreeList; /* Number of pages still on the free-list */ + int rc; + + assert( sqlite3_mutex_held(pBt->mutex) ); + assert( iLastPg>nFin ); + + if( !PTRMAP_ISPAGE(pBt, iLastPg) && iLastPg!=PENDING_BYTE_PAGE(pBt) ){ + u8 eType; + Pgno iPtrPage; + + nFreeList = get4byte(&pBt->pPage1->aData[36]); + if( nFreeList==0 ){ + return SQLITE_DONE; + } + + rc = ptrmapGet(pBt, iLastPg, &eType, &iPtrPage); + if( rc!=SQLITE_OK ){ + return rc; + } + if( eType==PTRMAP_ROOTPAGE ){ + return SQLITE_CORRUPT_BKPT; + } + + if( eType==PTRMAP_FREEPAGE ){ + if( bCommit==0 ){ + /* Remove the page from the files free-list. This is not required + ** if bCommit is non-zero. In that case, the free-list will be + ** truncated to zero after this function returns, so it doesn't + ** matter if it still contains some garbage entries. + */ + Pgno iFreePg; + MemPage *pFreePg; + rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iLastPg, BTALLOC_EXACT); + if( rc!=SQLITE_OK ){ + return rc; + } + assert( iFreePg==iLastPg ); + releasePage(pFreePg); + } + } else { + Pgno iFreePg; /* Index of free page to move pLastPg to */ + MemPage *pLastPg; + u8 eMode = BTALLOC_ANY; /* Mode parameter for allocateBtreePage() */ + Pgno iNear = 0; /* nearby parameter for allocateBtreePage() */ + + rc = btreeGetPage(pBt, iLastPg, &pLastPg, 0); + if( rc!=SQLITE_OK ){ + return rc; + } + + /* If bCommit is zero, this loop runs exactly once and page pLastPg + ** is swapped with the first free page pulled off the free list. + ** + ** On the other hand, if bCommit is greater than zero, then keep + ** looping until a free-page located within the first nFin pages + ** of the file is found. + */ + if( bCommit==0 ){ + eMode = BTALLOC_LE; + iNear = nFin; + } + do { + MemPage *pFreePg; + Pgno dbSize = btreePagecount(pBt); + rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iNear, eMode); + if( rc!=SQLITE_OK ){ + releasePage(pLastPg); + return rc; + } + releasePage(pFreePg); + if( iFreePg>dbSize ){ + releasePage(pLastPg); + return SQLITE_CORRUPT_BKPT; + } + }while( bCommit && iFreePg>nFin ); + assert( iFreePgbDoTruncate = 1; + pBt->nPage = iLastPg; + } + return SQLITE_OK; +} + +/* +** The database opened by the first argument is an auto-vacuum database +** nOrig pages in size containing nFree free pages. Return the expected +** size of the database in pages following an auto-vacuum operation. +*/ +static Pgno finalDbSize(BtShared *pBt, Pgno nOrig, Pgno nFree){ + int nEntry; /* Number of entries on one ptrmap page */ + Pgno nPtrmap; /* Number of PtrMap pages to be freed */ + Pgno nFin; /* Return value */ + + nEntry = pBt->usableSize/5; + nPtrmap = (nFree-nOrig+PTRMAP_PAGENO(pBt, nOrig)+nEntry)/nEntry; + nFin = nOrig - nFree - nPtrmap; + if( nOrig>PENDING_BYTE_PAGE(pBt) && nFinpBt; + + sqlite3BtreeEnter(p); + assert( pBt->inTransaction==TRANS_WRITE && p->inTrans==TRANS_WRITE ); + if( !pBt->autoVacuum ){ + rc = SQLITE_DONE; + }else{ + Pgno nOrig = btreePagecount(pBt); + Pgno nFree = get4byte(&pBt->pPage1->aData[36]); + Pgno nFin = finalDbSize(pBt, nOrig, nFree); + + if( nOrig=nOrig ){ + rc = SQLITE_CORRUPT_BKPT; + }else if( nFree>0 ){ + rc = saveAllCursors(pBt, 0, 0); + if( rc==SQLITE_OK ){ + invalidateAllOverflowCache(pBt); + rc = incrVacuumStep(pBt, nFin, nOrig, 0); + } + if( rc==SQLITE_OK ){ + rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); + put4byte(&pBt->pPage1->aData[28], pBt->nPage); + } + }else{ + rc = SQLITE_DONE; + } + } + sqlite3BtreeLeave(p); + return rc; +} + +/* +** This routine is called prior to sqlite3PagerCommit when a transaction +** is committed for an auto-vacuum database. +*/ +static int autoVacuumCommit(Btree *p){ + int rc = SQLITE_OK; + Pager *pPager; + BtShared *pBt; + sqlite3 *db; + VVA_ONLY( int nRef ); + + assert( p!=0 ); + pBt = p->pBt; + pPager = pBt->pPager; + VVA_ONLY( nRef = sqlite3PagerRefcount(pPager); ) + + assert( sqlite3_mutex_held(pBt->mutex) ); + invalidateAllOverflowCache(pBt); + assert(pBt->autoVacuum); + if( !pBt->incrVacuum ){ + Pgno nFin; /* Number of pages in database after autovacuuming */ + Pgno nFree; /* Number of pages on the freelist initially */ + Pgno nVac; /* Number of pages to vacuum */ + Pgno iFree; /* The next page to be freed */ + Pgno nOrig; /* Database size before freeing */ + + nOrig = btreePagecount(pBt); + if( PTRMAP_ISPAGE(pBt, nOrig) || nOrig==PENDING_BYTE_PAGE(pBt) ){ + /* It is not possible to create a database for which the final page + ** is either a pointer-map page or the pending-byte page. If one + ** is encountered, this indicates corruption. + */ + return SQLITE_CORRUPT_BKPT; + } + + nFree = get4byte(&pBt->pPage1->aData[36]); + db = p->db; + if( db->xAutovacPages ){ + int iDb; + for(iDb=0; ALWAYS(iDbnDb); iDb++){ + if( db->aDb[iDb].pBt==p ) break; + } + nVac = db->xAutovacPages( + db->pAutovacPagesArg, + db->aDb[iDb].zDbSName, + nOrig, + nFree, + pBt->pageSize + ); + if( nVac>nFree ){ + nVac = nFree; + } + if( nVac==0 ){ + return SQLITE_OK; + } + }else{ + nVac = nFree; + } + nFin = finalDbSize(pBt, nOrig, nVac); + if( nFin>nOrig ) return SQLITE_CORRUPT_BKPT; + if( nFinnFin && rc==SQLITE_OK; iFree--){ + rc = incrVacuumStep(pBt, nFin, iFree, nVac==nFree); + } + if( (rc==SQLITE_DONE || rc==SQLITE_OK) && nFree>0 ){ + rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); + if( nVac==nFree ){ + put4byte(&pBt->pPage1->aData[32], 0); + put4byte(&pBt->pPage1->aData[36], 0); + } + put4byte(&pBt->pPage1->aData[28], nFin); + pBt->bDoTruncate = 1; + pBt->nPage = nFin; + } + if( rc!=SQLITE_OK ){ + sqlite3PagerRollback(pPager); + } + } + + assert( nRef>=sqlite3PagerRefcount(pPager) ); + return rc; +} + +#else /* ifndef SQLITE_OMIT_AUTOVACUUM */ +# define setChildPtrmaps(x) SQLITE_OK +#endif + +/* +** This routine does the first phase of a two-phase commit. This routine +** causes a rollback journal to be created (if it does not already exist) +** and populated with enough information so that if a power loss occurs +** the database can be restored to its original state by playing back +** the journal. Then the contents of the journal are flushed out to +** the disk. After the journal is safely on oxide, the changes to the +** database are written into the database file and flushed to oxide. +** At the end of this call, the rollback journal still exists on the +** disk and we are still holding all locks, so the transaction has not +** committed. See sqlite3BtreeCommitPhaseTwo() for the second phase of the +** commit process. +** +** This call is a no-op if no write-transaction is currently active on pBt. +** +** Otherwise, sync the database file for the btree pBt. zSuperJrnl points to +** the name of a super-journal file that should be written into the +** individual journal file, or is NULL, indicating no super-journal file +** (single database transaction). +** +** When this is called, the super-journal should already have been +** created, populated with this journal pointer and synced to disk. +** +** Once this is routine has returned, the only thing required to commit +** the write-transaction for this database file is to delete the journal. +*/ +SQLITE_PRIVATE int sqlite3BtreeCommitPhaseOne(Btree *p, const char *zSuperJrnl){ + int rc = SQLITE_OK; + if( p->inTrans==TRANS_WRITE ){ + BtShared *pBt = p->pBt; + sqlite3BtreeEnter(p); +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pBt->autoVacuum ){ + rc = autoVacuumCommit(p); + if( rc!=SQLITE_OK ){ + sqlite3BtreeLeave(p); + return rc; + } + } + if( pBt->bDoTruncate ){ + sqlite3PagerTruncateImage(pBt->pPager, pBt->nPage); + } +#endif + rc = sqlite3PagerCommitPhaseOne(pBt->pPager, zSuperJrnl, 0); + sqlite3BtreeLeave(p); + } + return rc; +} + +/* +** This function is called from both BtreeCommitPhaseTwo() and BtreeRollback() +** at the conclusion of a transaction. +*/ +static void btreeEndTransaction(Btree *p){ + BtShared *pBt = p->pBt; + sqlite3 *db = p->db; + assert( sqlite3BtreeHoldsMutex(p) ); + +#ifndef SQLITE_OMIT_AUTOVACUUM + pBt->bDoTruncate = 0; +#endif + if( p->inTrans>TRANS_NONE && db->nVdbeRead>1 ){ + /* If there are other active statements that belong to this database + ** handle, downgrade to a read-only transaction. The other statements + ** may still be reading from the database. */ + downgradeAllSharedCacheTableLocks(p); + p->inTrans = TRANS_READ; + }else{ + /* If the handle had any kind of transaction open, decrement the + ** transaction count of the shared btree. If the transaction count + ** reaches 0, set the shared state to TRANS_NONE. The unlockBtreeIfUnused() + ** call below will unlock the pager. */ + if( p->inTrans!=TRANS_NONE ){ + clearAllSharedCacheTableLocks(p); + pBt->nTransaction--; + if( 0==pBt->nTransaction ){ + pBt->inTransaction = TRANS_NONE; + } + } + + /* Set the current transaction state to TRANS_NONE and unlock the + ** pager if this call closed the only read or write transaction. */ + p->inTrans = TRANS_NONE; + unlockBtreeIfUnused(pBt); + } + + btreeIntegrity(p); +} + +/* +** Commit the transaction currently in progress. +** +** This routine implements the second phase of a 2-phase commit. The +** sqlite3BtreeCommitPhaseOne() routine does the first phase and should +** be invoked prior to calling this routine. The sqlite3BtreeCommitPhaseOne() +** routine did all the work of writing information out to disk and flushing the +** contents so that they are written onto the disk platter. All this +** routine has to do is delete or truncate or zero the header in the +** the rollback journal (which causes the transaction to commit) and +** drop locks. +** +** Normally, if an error occurs while the pager layer is attempting to +** finalize the underlying journal file, this function returns an error and +** the upper layer will attempt a rollback. However, if the second argument +** is non-zero then this b-tree transaction is part of a multi-file +** transaction. In this case, the transaction has already been committed +** (by deleting a super-journal file) and the caller will ignore this +** functions return code. So, even if an error occurs in the pager layer, +** reset the b-tree objects internal state to indicate that the write +** transaction has been closed. This is quite safe, as the pager will have +** transitioned to the error state. +** +** This will release the write lock on the database file. If there +** are no active cursors, it also releases the read lock. +*/ +SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree *p, int bCleanup){ + + if( p->inTrans==TRANS_NONE ) return SQLITE_OK; + sqlite3BtreeEnter(p); + btreeIntegrity(p); + + /* If the handle has a write-transaction open, commit the shared-btrees + ** transaction and set the shared state to TRANS_READ. + */ + if( p->inTrans==TRANS_WRITE ){ + int rc; + BtShared *pBt = p->pBt; + assert( pBt->inTransaction==TRANS_WRITE ); + assert( pBt->nTransaction>0 ); + rc = sqlite3PagerCommitPhaseTwo(pBt->pPager); + if( rc!=SQLITE_OK && bCleanup==0 ){ + sqlite3BtreeLeave(p); + return rc; + } + p->iBDataVersion--; /* Compensate for pPager->iDataVersion++; */ + pBt->inTransaction = TRANS_READ; + btreeClearHasContent(pBt); + } + + btreeEndTransaction(p); + sqlite3BtreeLeave(p); + return SQLITE_OK; +} + +/* +** Do both phases of a commit. +*/ +SQLITE_PRIVATE int sqlite3BtreeCommit(Btree *p){ + int rc; + sqlite3BtreeEnter(p); + rc = sqlite3BtreeCommitPhaseOne(p, 0); + if( rc==SQLITE_OK ){ + rc = sqlite3BtreeCommitPhaseTwo(p, 0); + } + sqlite3BtreeLeave(p); + return rc; +} + +/* +** This routine sets the state to CURSOR_FAULT and the error +** code to errCode for every cursor on any BtShared that pBtree +** references. Or if the writeOnly flag is set to 1, then only +** trip write cursors and leave read cursors unchanged. +** +** Every cursor is a candidate to be tripped, including cursors +** that belong to other database connections that happen to be +** sharing the cache with pBtree. +** +** This routine gets called when a rollback occurs. If the writeOnly +** flag is true, then only write-cursors need be tripped - read-only +** cursors save their current positions so that they may continue +** following the rollback. Or, if writeOnly is false, all cursors are +** tripped. In general, writeOnly is false if the transaction being +** rolled back modified the database schema. In this case b-tree root +** pages may be moved or deleted from the database altogether, making +** it unsafe for read cursors to continue. +** +** If the writeOnly flag is true and an error is encountered while +** saving the current position of a read-only cursor, all cursors, +** including all read-cursors are tripped. +** +** SQLITE_OK is returned if successful, or if an error occurs while +** saving a cursor position, an SQLite error code. +*/ +SQLITE_PRIVATE int sqlite3BtreeTripAllCursors(Btree *pBtree, int errCode, int writeOnly){ + BtCursor *p; + int rc = SQLITE_OK; + + assert( (writeOnly==0 || writeOnly==1) && BTCF_WriteFlag==1 ); + if( pBtree ){ + sqlite3BtreeEnter(pBtree); + for(p=pBtree->pBt->pCursor; p; p=p->pNext){ + if( writeOnly && (p->curFlags & BTCF_WriteFlag)==0 ){ + if( p->eState==CURSOR_VALID || p->eState==CURSOR_SKIPNEXT ){ + rc = saveCursorPosition(p); + if( rc!=SQLITE_OK ){ + (void)sqlite3BtreeTripAllCursors(pBtree, rc, 0); + break; + } + } + }else{ + sqlite3BtreeClearCursor(p); + p->eState = CURSOR_FAULT; + p->skipNext = errCode; + } + btreeReleaseAllCursorPages(p); + } + sqlite3BtreeLeave(pBtree); + } + return rc; +} + +/* +** Set the pBt->nPage field correctly, according to the current +** state of the database. Assume pBt->pPage1 is valid. +*/ +static void btreeSetNPage(BtShared *pBt, MemPage *pPage1){ + int nPage = get4byte(&pPage1->aData[28]); + testcase( nPage==0 ); + if( nPage==0 ) sqlite3PagerPagecount(pBt->pPager, &nPage); + testcase( pBt->nPage!=(u32)nPage ); + pBt->nPage = nPage; +} + +/* +** Rollback the transaction in progress. +** +** If tripCode is not SQLITE_OK then cursors will be invalidated (tripped). +** Only write cursors are tripped if writeOnly is true but all cursors are +** tripped if writeOnly is false. Any attempt to use +** a tripped cursor will result in an error. +** +** This will release the write lock on the database file. If there +** are no active cursors, it also releases the read lock. +*/ +SQLITE_PRIVATE int sqlite3BtreeRollback(Btree *p, int tripCode, int writeOnly){ + int rc; + BtShared *pBt = p->pBt; + MemPage *pPage1; + + assert( writeOnly==1 || writeOnly==0 ); + assert( tripCode==SQLITE_ABORT_ROLLBACK || tripCode==SQLITE_OK ); + sqlite3BtreeEnter(p); + if( tripCode==SQLITE_OK ){ + rc = tripCode = saveAllCursors(pBt, 0, 0); + if( rc ) writeOnly = 0; + }else{ + rc = SQLITE_OK; + } + if( tripCode ){ + int rc2 = sqlite3BtreeTripAllCursors(p, tripCode, writeOnly); + assert( rc==SQLITE_OK || (writeOnly==0 && rc2==SQLITE_OK) ); + if( rc2!=SQLITE_OK ) rc = rc2; + } + btreeIntegrity(p); + + if( p->inTrans==TRANS_WRITE ){ + int rc2; + + assert( TRANS_WRITE==pBt->inTransaction ); + rc2 = sqlite3PagerRollback(pBt->pPager); + if( rc2!=SQLITE_OK ){ + rc = rc2; + } + + /* The rollback may have destroyed the pPage1->aData value. So + ** call btreeGetPage() on page 1 again to make + ** sure pPage1->aData is set correctly. */ + if( btreeGetPage(pBt, 1, &pPage1, 0)==SQLITE_OK ){ + btreeSetNPage(pBt, pPage1); + releasePageOne(pPage1); + } + assert( countValidCursors(pBt, 1)==0 ); + pBt->inTransaction = TRANS_READ; + btreeClearHasContent(pBt); + } + + btreeEndTransaction(p); + sqlite3BtreeLeave(p); + return rc; +} + +/* +** Start a statement subtransaction. The subtransaction can be rolled +** back independently of the main transaction. You must start a transaction +** before starting a subtransaction. The subtransaction is ended automatically +** if the main transaction commits or rolls back. +** +** Statement subtransactions are used around individual SQL statements +** that are contained within a BEGIN...COMMIT block. If a constraint +** error occurs within the statement, the effect of that one statement +** can be rolled back without having to rollback the entire transaction. +** +** A statement sub-transaction is implemented as an anonymous savepoint. The +** value passed as the second parameter is the total number of savepoints, +** including the new anonymous savepoint, open on the B-Tree. i.e. if there +** are no active savepoints and no other statement-transactions open, +** iStatement is 1. This anonymous savepoint can be released or rolled back +** using the sqlite3BtreeSavepoint() function. +*/ +SQLITE_PRIVATE int sqlite3BtreeBeginStmt(Btree *p, int iStatement){ + int rc; + BtShared *pBt = p->pBt; + sqlite3BtreeEnter(p); + assert( p->inTrans==TRANS_WRITE ); + assert( (pBt->btsFlags & BTS_READ_ONLY)==0 ); + assert( iStatement>0 ); + assert( iStatement>p->db->nSavepoint ); + assert( pBt->inTransaction==TRANS_WRITE ); + /* At the pager level, a statement transaction is a savepoint with + ** an index greater than all savepoints created explicitly using + ** SQL statements. It is illegal to open, release or rollback any + ** such savepoints while the statement transaction savepoint is active. + */ + rc = sqlite3PagerOpenSavepoint(pBt->pPager, iStatement); + sqlite3BtreeLeave(p); + return rc; +} + +/* +** The second argument to this function, op, is always SAVEPOINT_ROLLBACK +** or SAVEPOINT_RELEASE. This function either releases or rolls back the +** savepoint identified by parameter iSavepoint, depending on the value +** of op. +** +** Normally, iSavepoint is greater than or equal to zero. However, if op is +** SAVEPOINT_ROLLBACK, then iSavepoint may also be -1. In this case the +** contents of the entire transaction are rolled back. This is different +** from a normal transaction rollback, as no locks are released and the +** transaction remains open. +*/ +SQLITE_PRIVATE int sqlite3BtreeSavepoint(Btree *p, int op, int iSavepoint){ + int rc = SQLITE_OK; + if( p && p->inTrans==TRANS_WRITE ){ + BtShared *pBt = p->pBt; + assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK ); + assert( iSavepoint>=0 || (iSavepoint==-1 && op==SAVEPOINT_ROLLBACK) ); + sqlite3BtreeEnter(p); + if( op==SAVEPOINT_ROLLBACK ){ + rc = saveAllCursors(pBt, 0, 0); + } + if( rc==SQLITE_OK ){ + rc = sqlite3PagerSavepoint(pBt->pPager, op, iSavepoint); + } + if( rc==SQLITE_OK ){ + if( iSavepoint<0 && (pBt->btsFlags & BTS_INITIALLY_EMPTY)!=0 ){ + pBt->nPage = 0; + } + rc = newDatabase(pBt); + btreeSetNPage(pBt, pBt->pPage1); + + /* pBt->nPage might be zero if the database was corrupt when + ** the transaction was started. Otherwise, it must be at least 1. */ + assert( CORRUPT_DB || pBt->nPage>0 ); + } + sqlite3BtreeLeave(p); + } + return rc; +} + +/* +** Create a new cursor for the BTree whose root is on the page +** iTable. If a read-only cursor is requested, it is assumed that +** the caller already has at least a read-only transaction open +** on the database already. If a write-cursor is requested, then +** the caller is assumed to have an open write transaction. +** +** If the BTREE_WRCSR bit of wrFlag is clear, then the cursor can only +** be used for reading. If the BTREE_WRCSR bit is set, then the cursor +** can be used for reading or for writing if other conditions for writing +** are also met. These are the conditions that must be met in order +** for writing to be allowed: +** +** 1: The cursor must have been opened with wrFlag containing BTREE_WRCSR +** +** 2: Other database connections that share the same pager cache +** but which are not in the READ_UNCOMMITTED state may not have +** cursors open with wrFlag==0 on the same table. Otherwise +** the changes made by this write cursor would be visible to +** the read cursors in the other database connection. +** +** 3: The database must be writable (not on read-only media) +** +** 4: There must be an active transaction. +** +** The BTREE_FORDELETE bit of wrFlag may optionally be set if BTREE_WRCSR +** is set. If FORDELETE is set, that is a hint to the implementation that +** this cursor will only be used to seek to and delete entries of an index +** as part of a larger DELETE statement. The FORDELETE hint is not used by +** this implementation. But in a hypothetical alternative storage engine +** in which index entries are automatically deleted when corresponding table +** rows are deleted, the FORDELETE flag is a hint that all SEEK and DELETE +** operations on this cursor can be no-ops and all READ operations can +** return a null row (2-bytes: 0x01 0x00). +** +** No checking is done to make sure that page iTable really is the +** root page of a b-tree. If it is not, then the cursor acquired +** will not work correctly. +** +** It is assumed that the sqlite3BtreeCursorZero() has been called +** on pCur to initialize the memory space prior to invoking this routine. +*/ +static int btreeCursor( + Btree *p, /* The btree */ + Pgno iTable, /* Root page of table to open */ + int wrFlag, /* 1 to write. 0 read-only */ + struct KeyInfo *pKeyInfo, /* First arg to comparison function */ + BtCursor *pCur /* Space for new cursor */ +){ + BtShared *pBt = p->pBt; /* Shared b-tree handle */ + BtCursor *pX; /* Looping over other all cursors */ + + assert( sqlite3BtreeHoldsMutex(p) ); + assert( wrFlag==0 + || wrFlag==BTREE_WRCSR + || wrFlag==(BTREE_WRCSR|BTREE_FORDELETE) + ); + + /* The following assert statements verify that if this is a sharable + ** b-tree database, the connection is holding the required table locks, + ** and that no other connection has any open cursor that conflicts with + ** this lock. The iTable<1 term disables the check for corrupt schemas. */ + assert( hasSharedCacheTableLock(p, iTable, pKeyInfo!=0, (wrFlag?2:1)) + || iTable<1 ); + assert( wrFlag==0 || !hasReadConflicts(p, iTable) ); + + /* Assert that the caller has opened the required transaction. */ + assert( p->inTrans>TRANS_NONE ); + assert( wrFlag==0 || p->inTrans==TRANS_WRITE ); + assert( pBt->pPage1 && pBt->pPage1->aData ); + assert( wrFlag==0 || (pBt->btsFlags & BTS_READ_ONLY)==0 ); + + if( iTable<=1 ){ + if( iTable<1 ){ + return SQLITE_CORRUPT_BKPT; + }else if( btreePagecount(pBt)==0 ){ + assert( wrFlag==0 ); + iTable = 0; + } + } + + /* Now that no other errors can occur, finish filling in the BtCursor + ** variables and link the cursor into the BtShared list. */ + pCur->pgnoRoot = iTable; + pCur->iPage = -1; + pCur->pKeyInfo = pKeyInfo; + pCur->pBtree = p; + pCur->pBt = pBt; + pCur->curFlags = 0; + /* If there are two or more cursors on the same btree, then all such + ** cursors *must* have the BTCF_Multiple flag set. */ + for(pX=pBt->pCursor; pX; pX=pX->pNext){ + if( pX->pgnoRoot==iTable ){ + pX->curFlags |= BTCF_Multiple; + pCur->curFlags = BTCF_Multiple; + } + } + pCur->eState = CURSOR_INVALID; + pCur->pNext = pBt->pCursor; + pBt->pCursor = pCur; + if( wrFlag ){ + pCur->curFlags |= BTCF_WriteFlag; + pCur->curPagerFlags = 0; + if( pBt->pTmpSpace==0 ) return allocateTempSpace(pBt); + }else{ + pCur->curPagerFlags = PAGER_GET_READONLY; + } + return SQLITE_OK; +} +static int btreeCursorWithLock( + Btree *p, /* The btree */ + Pgno iTable, /* Root page of table to open */ + int wrFlag, /* 1 to write. 0 read-only */ + struct KeyInfo *pKeyInfo, /* First arg to comparison function */ + BtCursor *pCur /* Space for new cursor */ +){ + int rc; + sqlite3BtreeEnter(p); + rc = btreeCursor(p, iTable, wrFlag, pKeyInfo, pCur); + sqlite3BtreeLeave(p); + return rc; +} +SQLITE_PRIVATE int sqlite3BtreeCursor( + Btree *p, /* The btree */ + Pgno iTable, /* Root page of table to open */ + int wrFlag, /* 1 to write. 0 read-only */ + struct KeyInfo *pKeyInfo, /* First arg to xCompare() */ + BtCursor *pCur /* Write new cursor here */ +){ + if( p->sharable ){ + return btreeCursorWithLock(p, iTable, wrFlag, pKeyInfo, pCur); + }else{ + return btreeCursor(p, iTable, wrFlag, pKeyInfo, pCur); + } +} + +/* +** Return the size of a BtCursor object in bytes. +** +** This interfaces is needed so that users of cursors can preallocate +** sufficient storage to hold a cursor. The BtCursor object is opaque +** to users so they cannot do the sizeof() themselves - they must call +** this routine. +*/ +SQLITE_PRIVATE int sqlite3BtreeCursorSize(void){ + return ROUND8(sizeof(BtCursor)); +} + +#ifdef SQLITE_DEBUG +/* +** Return true if and only if the Btree object will be automatically +** closed with the BtCursor closes. This is used within assert() statements +** only. +*/ +SQLITE_PRIVATE int sqlite3BtreeClosesWithCursor( + Btree *pBtree, /* the btree object */ + BtCursor *pCur /* Corresponding cursor */ +){ + BtShared *pBt = pBtree->pBt; + if( (pBt->openFlags & BTREE_SINGLE)==0 ) return 0; + if( pBt->pCursor!=pCur ) return 0; + if( pCur->pNext!=0 ) return 0; + if( pCur->pBtree!=pBtree ) return 0; + return 1; +} +#endif + +/* +** Initialize memory that will be converted into a BtCursor object. +** +** The simple approach here would be to memset() the entire object +** to zero. But it turns out that the apPage[] and aiIdx[] arrays +** do not need to be zeroed and they are large, so we can save a lot +** of run-time by skipping the initialization of those elements. +*/ +SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor *p){ + memset(p, 0, offsetof(BtCursor, BTCURSOR_FIRST_UNINIT)); +} + +/* +** Close a cursor. The read lock on the database file is released +** when the last cursor is closed. +*/ +SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){ + Btree *pBtree = pCur->pBtree; + if( pBtree ){ + BtShared *pBt = pCur->pBt; + sqlite3BtreeEnter(pBtree); + assert( pBt->pCursor!=0 ); + if( pBt->pCursor==pCur ){ + pBt->pCursor = pCur->pNext; + }else{ + BtCursor *pPrev = pBt->pCursor; + do{ + if( pPrev->pNext==pCur ){ + pPrev->pNext = pCur->pNext; + break; + } + pPrev = pPrev->pNext; + }while( ALWAYS(pPrev) ); + } + btreeReleaseAllCursorPages(pCur); + unlockBtreeIfUnused(pBt); + sqlite3_free(pCur->aOverflow); + sqlite3_free(pCur->pKey); + if( (pBt->openFlags & BTREE_SINGLE) && pBt->pCursor==0 ){ + /* Since the BtShared is not sharable, there is no need to + ** worry about the missing sqlite3BtreeLeave() call here. */ + assert( pBtree->sharable==0 ); + sqlite3BtreeClose(pBtree); + }else{ + sqlite3BtreeLeave(pBtree); + } + pCur->pBtree = 0; + } + return SQLITE_OK; +} + +/* +** Make sure the BtCursor* given in the argument has a valid +** BtCursor.info structure. If it is not already valid, call +** btreeParseCell() to fill it in. +** +** BtCursor.info is a cache of the information in the current cell. +** Using this cache reduces the number of calls to btreeParseCell(). +*/ +#ifndef NDEBUG + static int cellInfoEqual(CellInfo *a, CellInfo *b){ + if( a->nKey!=b->nKey ) return 0; + if( a->pPayload!=b->pPayload ) return 0; + if( a->nPayload!=b->nPayload ) return 0; + if( a->nLocal!=b->nLocal ) return 0; + if( a->nSize!=b->nSize ) return 0; + return 1; + } + static void assertCellInfo(BtCursor *pCur){ + CellInfo info; + memset(&info, 0, sizeof(info)); + btreeParseCell(pCur->pPage, pCur->ix, &info); + assert( CORRUPT_DB || cellInfoEqual(&info, &pCur->info) ); + } +#else + #define assertCellInfo(x) +#endif +static SQLITE_NOINLINE void getCellInfo(BtCursor *pCur){ + if( pCur->info.nSize==0 ){ + pCur->curFlags |= BTCF_ValidNKey; + btreeParseCell(pCur->pPage,pCur->ix,&pCur->info); + }else{ + assertCellInfo(pCur); + } +} + +#ifndef NDEBUG /* The next routine used only within assert() statements */ +/* +** Return true if the given BtCursor is valid. A valid cursor is one +** that is currently pointing to a row in a (non-empty) table. +** This is a verification routine is used only within assert() statements. +*/ +SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor *pCur){ + return pCur && pCur->eState==CURSOR_VALID; +} +#endif /* NDEBUG */ +SQLITE_PRIVATE int sqlite3BtreeCursorIsValidNN(BtCursor *pCur){ + assert( pCur!=0 ); + return pCur->eState==CURSOR_VALID; +} + +/* +** Return the value of the integer key or "rowid" for a table btree. +** This routine is only valid for a cursor that is pointing into a +** ordinary table btree. If the cursor points to an index btree or +** is invalid, the result of this routine is undefined. +*/ +SQLITE_PRIVATE i64 sqlite3BtreeIntegerKey(BtCursor *pCur){ + assert( cursorHoldsMutex(pCur) ); + assert( pCur->eState==CURSOR_VALID ); + assert( pCur->curIntKey ); + getCellInfo(pCur); + return pCur->info.nKey; +} + +/* +** Pin or unpin a cursor. +*/ +SQLITE_PRIVATE void sqlite3BtreeCursorPin(BtCursor *pCur){ + assert( (pCur->curFlags & BTCF_Pinned)==0 ); + pCur->curFlags |= BTCF_Pinned; +} +SQLITE_PRIVATE void sqlite3BtreeCursorUnpin(BtCursor *pCur){ + assert( (pCur->curFlags & BTCF_Pinned)!=0 ); + pCur->curFlags &= ~BTCF_Pinned; +} + +/* +** Return the offset into the database file for the start of the +** payload to which the cursor is pointing. +*/ +SQLITE_PRIVATE i64 sqlite3BtreeOffset(BtCursor *pCur){ + assert( cursorHoldsMutex(pCur) ); + assert( pCur->eState==CURSOR_VALID ); + getCellInfo(pCur); + return (i64)pCur->pBt->pageSize*((i64)pCur->pPage->pgno - 1) + + (i64)(pCur->info.pPayload - pCur->pPage->aData); +} + +/* +** Return the number of bytes of payload for the entry that pCur is +** currently pointing to. For table btrees, this will be the amount +** of data. For index btrees, this will be the size of the key. +** +** The caller must guarantee that the cursor is pointing to a non-NULL +** valid entry. In other words, the calling procedure must guarantee +** that the cursor has Cursor.eState==CURSOR_VALID. +*/ +SQLITE_PRIVATE u32 sqlite3BtreePayloadSize(BtCursor *pCur){ + assert( cursorHoldsMutex(pCur) ); + assert( pCur->eState==CURSOR_VALID ); + getCellInfo(pCur); + return pCur->info.nPayload; +} + +/* +** Return an upper bound on the size of any record for the table +** that the cursor is pointing into. +** +** This is an optimization. Everything will still work if this +** routine always returns 2147483647 (which is the largest record +** that SQLite can handle) or more. But returning a smaller value might +** prevent large memory allocations when trying to interpret a +** corrupt database. +** +** The current implementation merely returns the size of the underlying +** database file. +*/ +SQLITE_PRIVATE sqlite3_int64 sqlite3BtreeMaxRecordSize(BtCursor *pCur){ + assert( cursorHoldsMutex(pCur) ); + assert( pCur->eState==CURSOR_VALID ); + return pCur->pBt->pageSize * (sqlite3_int64)pCur->pBt->nPage; +} + +/* +** Given the page number of an overflow page in the database (parameter +** ovfl), this function finds the page number of the next page in the +** linked list of overflow pages. If possible, it uses the auto-vacuum +** pointer-map data instead of reading the content of page ovfl to do so. +** +** If an error occurs an SQLite error code is returned. Otherwise: +** +** The page number of the next overflow page in the linked list is +** written to *pPgnoNext. If page ovfl is the last page in its linked +** list, *pPgnoNext is set to zero. +** +** If ppPage is not NULL, and a reference to the MemPage object corresponding +** to page number pOvfl was obtained, then *ppPage is set to point to that +** reference. It is the responsibility of the caller to call releasePage() +** on *ppPage to free the reference. In no reference was obtained (because +** the pointer-map was used to obtain the value for *pPgnoNext), then +** *ppPage is set to zero. +*/ +static int getOverflowPage( + BtShared *pBt, /* The database file */ + Pgno ovfl, /* Current overflow page number */ + MemPage **ppPage, /* OUT: MemPage handle (may be NULL) */ + Pgno *pPgnoNext /* OUT: Next overflow page number */ +){ + Pgno next = 0; + MemPage *pPage = 0; + int rc = SQLITE_OK; + + assert( sqlite3_mutex_held(pBt->mutex) ); + assert(pPgnoNext); + +#ifndef SQLITE_OMIT_AUTOVACUUM + /* Try to find the next page in the overflow list using the + ** autovacuum pointer-map pages. Guess that the next page in + ** the overflow list is page number (ovfl+1). If that guess turns + ** out to be wrong, fall back to loading the data of page + ** number ovfl to determine the next page number. + */ + if( pBt->autoVacuum ){ + Pgno pgno; + Pgno iGuess = ovfl+1; + u8 eType; + + while( PTRMAP_ISPAGE(pBt, iGuess) || iGuess==PENDING_BYTE_PAGE(pBt) ){ + iGuess++; + } + + if( iGuess<=btreePagecount(pBt) ){ + rc = ptrmapGet(pBt, iGuess, &eType, &pgno); + if( rc==SQLITE_OK && eType==PTRMAP_OVERFLOW2 && pgno==ovfl ){ + next = iGuess; + rc = SQLITE_DONE; + } + } + } +#endif + + assert( next==0 || rc==SQLITE_DONE ); + if( rc==SQLITE_OK ){ + rc = btreeGetPage(pBt, ovfl, &pPage, (ppPage==0) ? PAGER_GET_READONLY : 0); + assert( rc==SQLITE_OK || pPage==0 ); + if( rc==SQLITE_OK ){ + next = get4byte(pPage->aData); + } + } + + *pPgnoNext = next; + if( ppPage ){ + *ppPage = pPage; + }else{ + releasePage(pPage); + } + return (rc==SQLITE_DONE ? SQLITE_OK : rc); +} + +/* +** Copy data from a buffer to a page, or from a page to a buffer. +** +** pPayload is a pointer to data stored on database page pDbPage. +** If argument eOp is false, then nByte bytes of data are copied +** from pPayload to the buffer pointed at by pBuf. If eOp is true, +** then sqlite3PagerWrite() is called on pDbPage and nByte bytes +** of data are copied from the buffer pBuf to pPayload. +** +** SQLITE_OK is returned on success, otherwise an error code. +*/ +static int copyPayload( + void *pPayload, /* Pointer to page data */ + void *pBuf, /* Pointer to buffer */ + int nByte, /* Number of bytes to copy */ + int eOp, /* 0 -> copy from page, 1 -> copy to page */ + DbPage *pDbPage /* Page containing pPayload */ +){ + if( eOp ){ + /* Copy data from buffer to page (a write operation) */ + int rc = sqlite3PagerWrite(pDbPage); + if( rc!=SQLITE_OK ){ + return rc; + } + memcpy(pPayload, pBuf, nByte); + }else{ + /* Copy data from page to buffer (a read operation) */ + memcpy(pBuf, pPayload, nByte); + } + return SQLITE_OK; +} + +/* +** This function is used to read or overwrite payload information +** for the entry that the pCur cursor is pointing to. The eOp +** argument is interpreted as follows: +** +** 0: The operation is a read. Populate the overflow cache. +** 1: The operation is a write. Populate the overflow cache. +** +** A total of "amt" bytes are read or written beginning at "offset". +** Data is read to or from the buffer pBuf. +** +** The content being read or written might appear on the main page +** or be scattered out on multiple overflow pages. +** +** If the current cursor entry uses one or more overflow pages +** this function may allocate space for and lazily populate +** the overflow page-list cache array (BtCursor.aOverflow). +** Subsequent calls use this cache to make seeking to the supplied offset +** more efficient. +** +** Once an overflow page-list cache has been allocated, it must be +** invalidated if some other cursor writes to the same table, or if +** the cursor is moved to a different row. Additionally, in auto-vacuum +** mode, the following events may invalidate an overflow page-list cache. +** +** * An incremental vacuum, +** * A commit in auto_vacuum="full" mode, +** * Creating a table (may require moving an overflow page). +*/ +static int accessPayload( + BtCursor *pCur, /* Cursor pointing to entry to read from */ + u32 offset, /* Begin reading this far into payload */ + u32 amt, /* Read this many bytes */ + unsigned char *pBuf, /* Write the bytes into this buffer */ + int eOp /* zero to read. non-zero to write. */ +){ + unsigned char *aPayload; + int rc = SQLITE_OK; + int iIdx = 0; + MemPage *pPage = pCur->pPage; /* Btree page of current entry */ + BtShared *pBt = pCur->pBt; /* Btree this cursor belongs to */ +#ifdef SQLITE_DIRECT_OVERFLOW_READ + unsigned char * const pBufStart = pBuf; /* Start of original out buffer */ +#endif + + assert( pPage ); + assert( eOp==0 || eOp==1 ); + assert( pCur->eState==CURSOR_VALID ); + if( pCur->ix>=pPage->nCell ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + assert( cursorHoldsMutex(pCur) ); + + getCellInfo(pCur); + aPayload = pCur->info.pPayload; + assert( (u64)offset+(u64)amt <= (u64)pCur->info.nPayload ); + + assert( aPayload > pPage->aData ); + if( (uptr)(aPayload - pPage->aData) > (pBt->usableSize - pCur->info.nLocal) ){ + /* Trying to read or write past the end of the data is an error. The + ** conditional above is really: + ** &aPayload[pCur->info.nLocal] > &pPage->aData[pBt->usableSize] + ** but is recast into its current form to avoid integer overflow problems + */ + return SQLITE_CORRUPT_PAGE(pPage); + } + + /* Check if data must be read/written to/from the btree page itself. */ + if( offsetinfo.nLocal ){ + int a = amt; + if( a+offset>pCur->info.nLocal ){ + a = pCur->info.nLocal - offset; + } + rc = copyPayload(&aPayload[offset], pBuf, a, eOp, pPage->pDbPage); + offset = 0; + pBuf += a; + amt -= a; + }else{ + offset -= pCur->info.nLocal; + } + + + if( rc==SQLITE_OK && amt>0 ){ + const u32 ovflSize = pBt->usableSize - 4; /* Bytes content per ovfl page */ + Pgno nextPage; + + nextPage = get4byte(&aPayload[pCur->info.nLocal]); + + /* If the BtCursor.aOverflow[] has not been allocated, allocate it now. + ** + ** The aOverflow[] array is sized at one entry for each overflow page + ** in the overflow chain. The page number of the first overflow page is + ** stored in aOverflow[0], etc. A value of 0 in the aOverflow[] array + ** means "not yet known" (the cache is lazily populated). + */ + if( (pCur->curFlags & BTCF_ValidOvfl)==0 ){ + int nOvfl = (pCur->info.nPayload-pCur->info.nLocal+ovflSize-1)/ovflSize; + if( pCur->aOverflow==0 + || nOvfl*(int)sizeof(Pgno) > sqlite3MallocSize(pCur->aOverflow) + ){ + Pgno *aNew; + if( sqlite3FaultSim(413) ){ + aNew = 0; + }else{ + aNew = (Pgno*)sqlite3Realloc(pCur->aOverflow, nOvfl*2*sizeof(Pgno)); + } + if( aNew==0 ){ + return SQLITE_NOMEM_BKPT; + }else{ + pCur->aOverflow = aNew; + } + } + memset(pCur->aOverflow, 0, nOvfl*sizeof(Pgno)); + pCur->curFlags |= BTCF_ValidOvfl; + }else{ + /* Sanity check the validity of the overflow page cache */ + assert( pCur->aOverflow[0]==nextPage + || pCur->aOverflow[0]==0 + || CORRUPT_DB ); + assert( pCur->aOverflow[0]!=0 || pCur->aOverflow[offset/ovflSize]==0 ); + + /* If the overflow page-list cache has been allocated and the + ** entry for the first required overflow page is valid, skip + ** directly to it. + */ + if( pCur->aOverflow[offset/ovflSize] ){ + iIdx = (offset/ovflSize); + nextPage = pCur->aOverflow[iIdx]; + offset = (offset%ovflSize); + } + } + + assert( rc==SQLITE_OK && amt>0 ); + while( nextPage ){ + /* If required, populate the overflow page-list cache. */ + if( nextPage > pBt->nPage ) return SQLITE_CORRUPT_BKPT; + assert( pCur->aOverflow[iIdx]==0 + || pCur->aOverflow[iIdx]==nextPage + || CORRUPT_DB ); + pCur->aOverflow[iIdx] = nextPage; + + if( offset>=ovflSize ){ + /* The only reason to read this page is to obtain the page + ** number for the next page in the overflow chain. The page + ** data is not required. So first try to lookup the overflow + ** page-list cache, if any, then fall back to the getOverflowPage() + ** function. + */ + assert( pCur->curFlags & BTCF_ValidOvfl ); + assert( pCur->pBtree->db==pBt->db ); + if( pCur->aOverflow[iIdx+1] ){ + nextPage = pCur->aOverflow[iIdx+1]; + }else{ + rc = getOverflowPage(pBt, nextPage, 0, &nextPage); + } + offset -= ovflSize; + }else{ + /* Need to read this page properly. It contains some of the + ** range of data that is being read (eOp==0) or written (eOp!=0). + */ + int a = amt; + if( a + offset > ovflSize ){ + a = ovflSize - offset; + } + +#ifdef SQLITE_DIRECT_OVERFLOW_READ + /* If all the following are true: + ** + ** 1) this is a read operation, and + ** 2) data is required from the start of this overflow page, and + ** 3) there are no dirty pages in the page-cache + ** 4) the database is file-backed, and + ** 5) the page is not in the WAL file + ** 6) at least 4 bytes have already been read into the output buffer + ** + ** then data can be read directly from the database file into the + ** output buffer, bypassing the page-cache altogether. This speeds + ** up loading large records that span many overflow pages. + */ + if( eOp==0 /* (1) */ + && offset==0 /* (2) */ + && sqlite3PagerDirectReadOk(pBt->pPager, nextPage) /* (3,4,5) */ + && &pBuf[-4]>=pBufStart /* (6) */ + ){ + sqlite3_file *fd = sqlite3PagerFile(pBt->pPager); + u8 aSave[4]; + u8 *aWrite = &pBuf[-4]; + assert( aWrite>=pBufStart ); /* due to (6) */ + memcpy(aSave, aWrite, 4); + rc = sqlite3OsRead(fd, aWrite, a+4, (i64)pBt->pageSize*(nextPage-1)); + nextPage = get4byte(aWrite); + memcpy(aWrite, aSave, 4); + }else +#endif + + { + DbPage *pDbPage; + rc = sqlite3PagerGet(pBt->pPager, nextPage, &pDbPage, + (eOp==0 ? PAGER_GET_READONLY : 0) + ); + if( rc==SQLITE_OK ){ + aPayload = sqlite3PagerGetData(pDbPage); + nextPage = get4byte(aPayload); + rc = copyPayload(&aPayload[offset+4], pBuf, a, eOp, pDbPage); + sqlite3PagerUnref(pDbPage); + offset = 0; + } + } + amt -= a; + if( amt==0 ) return rc; + pBuf += a; + } + if( rc ) break; + iIdx++; + } + } + + if( rc==SQLITE_OK && amt>0 ){ + /* Overflow chain ends prematurely */ + return SQLITE_CORRUPT_PAGE(pPage); + } + return rc; +} + +/* +** Read part of the payload for the row at which that cursor pCur is currently +** pointing. "amt" bytes will be transferred into pBuf[]. The transfer +** begins at "offset". +** +** pCur can be pointing to either a table or an index b-tree. +** If pointing to a table btree, then the content section is read. If +** pCur is pointing to an index b-tree then the key section is read. +** +** For sqlite3BtreePayload(), the caller must ensure that pCur is pointing +** to a valid row in the table. For sqlite3BtreePayloadChecked(), the +** cursor might be invalid or might need to be restored before being read. +** +** Return SQLITE_OK on success or an error code if anything goes +** wrong. An error is returned if "offset+amt" is larger than +** the available payload. +*/ +SQLITE_PRIVATE int sqlite3BtreePayload(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){ + assert( cursorHoldsMutex(pCur) ); + assert( pCur->eState==CURSOR_VALID ); + assert( pCur->iPage>=0 && pCur->pPage ); + return accessPayload(pCur, offset, amt, (unsigned char*)pBuf, 0); +} + +/* +** This variant of sqlite3BtreePayload() works even if the cursor has not +** in the CURSOR_VALID state. It is only used by the sqlite3_blob_read() +** interface. +*/ +#ifndef SQLITE_OMIT_INCRBLOB +static SQLITE_NOINLINE int accessPayloadChecked( + BtCursor *pCur, + u32 offset, + u32 amt, + void *pBuf +){ + int rc; + if ( pCur->eState==CURSOR_INVALID ){ + return SQLITE_ABORT; + } + assert( cursorOwnsBtShared(pCur) ); + rc = btreeRestoreCursorPosition(pCur); + return rc ? rc : accessPayload(pCur, offset, amt, pBuf, 0); +} +SQLITE_PRIVATE int sqlite3BtreePayloadChecked(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){ + if( pCur->eState==CURSOR_VALID ){ + assert( cursorOwnsBtShared(pCur) ); + return accessPayload(pCur, offset, amt, pBuf, 0); + }else{ + return accessPayloadChecked(pCur, offset, amt, pBuf); + } +} +#endif /* SQLITE_OMIT_INCRBLOB */ + +/* +** Return a pointer to payload information from the entry that the +** pCur cursor is pointing to. The pointer is to the beginning of +** the key if index btrees (pPage->intKey==0) and is the data for +** table btrees (pPage->intKey==1). The number of bytes of available +** key/data is written into *pAmt. If *pAmt==0, then the value +** returned will not be a valid pointer. +** +** This routine is an optimization. It is common for the entire key +** and data to fit on the local page and for there to be no overflow +** pages. When that is so, this routine can be used to access the +** key and data without making a copy. If the key and/or data spills +** onto overflow pages, then accessPayload() must be used to reassemble +** the key/data and copy it into a preallocated buffer. +** +** The pointer returned by this routine looks directly into the cached +** page of the database. The data might change or move the next time +** any btree routine is called. +*/ +static const void *fetchPayload( + BtCursor *pCur, /* Cursor pointing to entry to read from */ + u32 *pAmt /* Write the number of available bytes here */ +){ + int amt; + assert( pCur!=0 && pCur->iPage>=0 && pCur->pPage); + assert( pCur->eState==CURSOR_VALID ); + assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); + assert( cursorOwnsBtShared(pCur) ); + assert( pCur->ixpPage->nCell || CORRUPT_DB ); + assert( pCur->info.nSize>0 ); + assert( pCur->info.pPayload>pCur->pPage->aData || CORRUPT_DB ); + assert( pCur->info.pPayloadpPage->aDataEnd ||CORRUPT_DB); + amt = pCur->info.nLocal; + if( amt>(int)(pCur->pPage->aDataEnd - pCur->info.pPayload) ){ + /* There is too little space on the page for the expected amount + ** of local content. Database must be corrupt. */ + assert( CORRUPT_DB ); + amt = MAX(0, (int)(pCur->pPage->aDataEnd - pCur->info.pPayload)); + } + *pAmt = (u32)amt; + return (void*)pCur->info.pPayload; +} + + +/* +** For the entry that cursor pCur is point to, return as +** many bytes of the key or data as are available on the local +** b-tree page. Write the number of available bytes into *pAmt. +** +** The pointer returned is ephemeral. The key/data may move +** or be destroyed on the next call to any Btree routine, +** including calls from other threads against the same cache. +** Hence, a mutex on the BtShared should be held prior to calling +** this routine. +** +** These routines is used to get quick access to key and data +** in the common case where no overflow pages are used. +*/ +SQLITE_PRIVATE const void *sqlite3BtreePayloadFetch(BtCursor *pCur, u32 *pAmt){ + return fetchPayload(pCur, pAmt); +} + + +/* +** Move the cursor down to a new child page. The newPgno argument is the +** page number of the child page to move to. +** +** This function returns SQLITE_CORRUPT if the page-header flags field of +** the new child page does not match the flags field of the parent (i.e. +** if an intkey page appears to be the parent of a non-intkey page, or +** vice-versa). +*/ +static int moveToChild(BtCursor *pCur, u32 newPgno){ + int rc; + assert( cursorOwnsBtShared(pCur) ); + assert( pCur->eState==CURSOR_VALID ); + assert( pCur->iPageiPage>=0 ); + if( pCur->iPage>=(BTCURSOR_MAX_DEPTH-1) ){ + return SQLITE_CORRUPT_BKPT; + } + pCur->info.nSize = 0; + pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl); + pCur->aiIdx[pCur->iPage] = pCur->ix; + pCur->apPage[pCur->iPage] = pCur->pPage; + pCur->ix = 0; + pCur->iPage++; + rc = getAndInitPage(pCur->pBt, newPgno, &pCur->pPage, pCur->curPagerFlags); + assert( pCur->pPage!=0 || rc!=SQLITE_OK ); + if( rc==SQLITE_OK + && (pCur->pPage->nCell<1 || pCur->pPage->intKey!=pCur->curIntKey) + ){ + releasePage(pCur->pPage); + rc = SQLITE_CORRUPT_PGNO(newPgno); + } + if( rc ){ + pCur->pPage = pCur->apPage[--pCur->iPage]; + } + return rc; +} + +#ifdef SQLITE_DEBUG +/* +** Page pParent is an internal (non-leaf) tree page. This function +** asserts that page number iChild is the left-child if the iIdx'th +** cell in page pParent. Or, if iIdx is equal to the total number of +** cells in pParent, that page number iChild is the right-child of +** the page. +*/ +static void assertParentIndex(MemPage *pParent, int iIdx, Pgno iChild){ + if( CORRUPT_DB ) return; /* The conditions tested below might not be true + ** in a corrupt database */ + assert( iIdx<=pParent->nCell ); + if( iIdx==pParent->nCell ){ + assert( get4byte(&pParent->aData[pParent->hdrOffset+8])==iChild ); + }else{ + assert( get4byte(findCell(pParent, iIdx))==iChild ); + } +} +#else +# define assertParentIndex(x,y,z) +#endif + +/* +** Move the cursor up to the parent page. +** +** pCur->idx is set to the cell index that contains the pointer +** to the page we are coming from. If we are coming from the +** right-most child page then pCur->idx is set to one more than +** the largest cell index. +*/ +static void moveToParent(BtCursor *pCur){ + MemPage *pLeaf; + assert( cursorOwnsBtShared(pCur) ); + assert( pCur->eState==CURSOR_VALID ); + assert( pCur->iPage>0 ); + assert( pCur->pPage ); + assertParentIndex( + pCur->apPage[pCur->iPage-1], + pCur->aiIdx[pCur->iPage-1], + pCur->pPage->pgno + ); + testcase( pCur->aiIdx[pCur->iPage-1] > pCur->apPage[pCur->iPage-1]->nCell ); + pCur->info.nSize = 0; + pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl); + pCur->ix = pCur->aiIdx[pCur->iPage-1]; + pLeaf = pCur->pPage; + pCur->pPage = pCur->apPage[--pCur->iPage]; + releasePageNotNull(pLeaf); +} + +/* +** Move the cursor to point to the root page of its b-tree structure. +** +** If the table has a virtual root page, then the cursor is moved to point +** to the virtual root page instead of the actual root page. A table has a +** virtual root page when the actual root page contains no cells and a +** single child page. This can only happen with the table rooted at page 1. +** +** If the b-tree structure is empty, the cursor state is set to +** CURSOR_INVALID and this routine returns SQLITE_EMPTY. Otherwise, +** the cursor is set to point to the first cell located on the root +** (or virtual root) page and the cursor state is set to CURSOR_VALID. +** +** If this function returns successfully, it may be assumed that the +** page-header flags indicate that the [virtual] root-page is the expected +** kind of b-tree page (i.e. if when opening the cursor the caller did not +** specify a KeyInfo structure the flags byte is set to 0x05 or 0x0D, +** indicating a table b-tree, or if the caller did specify a KeyInfo +** structure the flags byte is set to 0x02 or 0x0A, indicating an index +** b-tree). +*/ +static int moveToRoot(BtCursor *pCur){ + MemPage *pRoot; + int rc = SQLITE_OK; + + assert( cursorOwnsBtShared(pCur) ); + assert( CURSOR_INVALID < CURSOR_REQUIRESEEK ); + assert( CURSOR_VALID < CURSOR_REQUIRESEEK ); + assert( CURSOR_FAULT > CURSOR_REQUIRESEEK ); + assert( pCur->eState < CURSOR_REQUIRESEEK || pCur->iPage<0 ); + assert( pCur->pgnoRoot>0 || pCur->iPage<0 ); + + if( pCur->iPage>=0 ){ + if( pCur->iPage ){ + releasePageNotNull(pCur->pPage); + while( --pCur->iPage ){ + releasePageNotNull(pCur->apPage[pCur->iPage]); + } + pRoot = pCur->pPage = pCur->apPage[0]; + goto skip_init; + } + }else if( pCur->pgnoRoot==0 ){ + pCur->eState = CURSOR_INVALID; + return SQLITE_EMPTY; + }else{ + assert( pCur->iPage==(-1) ); + if( pCur->eState>=CURSOR_REQUIRESEEK ){ + if( pCur->eState==CURSOR_FAULT ){ + assert( pCur->skipNext!=SQLITE_OK ); + return pCur->skipNext; + } + sqlite3BtreeClearCursor(pCur); + } + rc = getAndInitPage(pCur->pBt, pCur->pgnoRoot, &pCur->pPage, + pCur->curPagerFlags); + if( rc!=SQLITE_OK ){ + pCur->eState = CURSOR_INVALID; + return rc; + } + pCur->iPage = 0; + pCur->curIntKey = pCur->pPage->intKey; + } + pRoot = pCur->pPage; + assert( pRoot->pgno==pCur->pgnoRoot || CORRUPT_DB ); + + /* If pCur->pKeyInfo is not NULL, then the caller that opened this cursor + ** expected to open it on an index b-tree. Otherwise, if pKeyInfo is + ** NULL, the caller expects a table b-tree. If this is not the case, + ** return an SQLITE_CORRUPT error. + ** + ** Earlier versions of SQLite assumed that this test could not fail + ** if the root page was already loaded when this function was called (i.e. + ** if pCur->iPage>=0). But this is not so if the database is corrupted + ** in such a way that page pRoot is linked into a second b-tree table + ** (or the freelist). */ + assert( pRoot->intKey==1 || pRoot->intKey==0 ); + if( pRoot->isInit==0 || (pCur->pKeyInfo==0)!=pRoot->intKey ){ + return SQLITE_CORRUPT_PAGE(pCur->pPage); + } + +skip_init: + pCur->ix = 0; + pCur->info.nSize = 0; + pCur->curFlags &= ~(BTCF_AtLast|BTCF_ValidNKey|BTCF_ValidOvfl); + + if( pRoot->nCell>0 ){ + pCur->eState = CURSOR_VALID; + }else if( !pRoot->leaf ){ + Pgno subpage; + if( pRoot->pgno!=1 ) return SQLITE_CORRUPT_BKPT; + subpage = get4byte(&pRoot->aData[pRoot->hdrOffset+8]); + pCur->eState = CURSOR_VALID; + rc = moveToChild(pCur, subpage); + }else{ + pCur->eState = CURSOR_INVALID; + rc = SQLITE_EMPTY; + } + return rc; +} + +/* +** Move the cursor down to the left-most leaf entry beneath the +** entry to which it is currently pointing. +** +** The left-most leaf is the one with the smallest key - the first +** in ascending order. +*/ +static int moveToLeftmost(BtCursor *pCur){ + Pgno pgno; + int rc = SQLITE_OK; + MemPage *pPage; + + assert( cursorOwnsBtShared(pCur) ); + assert( pCur->eState==CURSOR_VALID ); + while( rc==SQLITE_OK && !(pPage = pCur->pPage)->leaf ){ + assert( pCur->ixnCell ); + pgno = get4byte(findCell(pPage, pCur->ix)); + rc = moveToChild(pCur, pgno); + } + return rc; +} + +/* +** Move the cursor down to the right-most leaf entry beneath the +** page to which it is currently pointing. Notice the difference +** between moveToLeftmost() and moveToRightmost(). moveToLeftmost() +** finds the left-most entry beneath the *entry* whereas moveToRightmost() +** finds the right-most entry beneath the *page*. +** +** The right-most entry is the one with the largest key - the last +** key in ascending order. +*/ +static int moveToRightmost(BtCursor *pCur){ + Pgno pgno; + int rc = SQLITE_OK; + MemPage *pPage = 0; + + assert( cursorOwnsBtShared(pCur) ); + assert( pCur->eState==CURSOR_VALID ); + while( !(pPage = pCur->pPage)->leaf ){ + pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]); + pCur->ix = pPage->nCell; + rc = moveToChild(pCur, pgno); + if( rc ) return rc; + } + pCur->ix = pPage->nCell-1; + assert( pCur->info.nSize==0 ); + assert( (pCur->curFlags & BTCF_ValidNKey)==0 ); + return SQLITE_OK; +} + +/* Move the cursor to the first entry in the table. Return SQLITE_OK +** on success. Set *pRes to 0 if the cursor actually points to something +** or set *pRes to 1 if the table is empty. +*/ +SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){ + int rc; + + assert( cursorOwnsBtShared(pCur) ); + assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); + rc = moveToRoot(pCur); + if( rc==SQLITE_OK ){ + assert( pCur->pPage->nCell>0 ); + *pRes = 0; + rc = moveToLeftmost(pCur); + }else if( rc==SQLITE_EMPTY ){ + assert( pCur->pgnoRoot==0 || (pCur->pPage!=0 && pCur->pPage->nCell==0) ); + *pRes = 1; + rc = SQLITE_OK; + } + return rc; +} + +/* Set *pRes to 1 (true) if the BTree pointed to by cursor pCur contains zero +** rows of content. Set *pRes to 0 (false) if the table contains content. +** Return SQLITE_OK on success or some error code (ex: SQLITE_NOMEM) if +** something goes wrong. +*/ +SQLITE_PRIVATE int sqlite3BtreeIsEmpty(BtCursor *pCur, int *pRes){ + int rc; + + assert( cursorOwnsBtShared(pCur) ); + assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); + if( pCur->eState==CURSOR_VALID ){ + *pRes = 0; + return SQLITE_OK; + } + rc = moveToRoot(pCur); + if( rc==SQLITE_EMPTY ){ + *pRes = 1; + rc = SQLITE_OK; + }else{ + *pRes = 0; + } + return rc; +} + +#ifdef SQLITE_DEBUG +/* The cursors is CURSOR_VALID and has BTCF_AtLast set. Verify that +** this flags are true for a consistent database. +** +** This routine is is called from within assert() statements only. +** It is an internal verification routine and does not appear in production +** builds. +*/ +static int cursorIsAtLastEntry(BtCursor *pCur){ + int ii; + for(ii=0; iiiPage; ii++){ + if( pCur->aiIdx[ii]!=pCur->apPage[ii]->nCell ) return 0; + } + return pCur->ix==pCur->pPage->nCell-1 && pCur->pPage->leaf!=0; +} +#endif + +/* Move the cursor to the last entry in the table. Return SQLITE_OK +** on success. Set *pRes to 0 if the cursor actually points to something +** or set *pRes to 1 if the table is empty. +*/ +static SQLITE_NOINLINE int btreeLast(BtCursor *pCur, int *pRes){ + int rc = moveToRoot(pCur); + if( rc==SQLITE_OK ){ + assert( pCur->eState==CURSOR_VALID ); + *pRes = 0; + rc = moveToRightmost(pCur); + if( rc==SQLITE_OK ){ + pCur->curFlags |= BTCF_AtLast; + }else{ + pCur->curFlags &= ~BTCF_AtLast; + } + }else if( rc==SQLITE_EMPTY ){ + assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 ); + *pRes = 1; + rc = SQLITE_OK; + } + return rc; +} +SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){ + assert( cursorOwnsBtShared(pCur) ); + assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); + + /* If the cursor already points to the last entry, this is a no-op. */ + if( CURSOR_VALID==pCur->eState && (pCur->curFlags & BTCF_AtLast)!=0 ){ + assert( cursorIsAtLastEntry(pCur) || CORRUPT_DB ); + *pRes = 0; + return SQLITE_OK; + } + return btreeLast(pCur, pRes); +} + +/* Move the cursor so that it points to an entry in a table (a.k.a INTKEY) +** table near the key intKey. Return a success code. +** +** If an exact match is not found, then the cursor is always +** left pointing at a leaf page which would hold the entry if it +** were present. The cursor might point to an entry that comes +** before or after the key. +** +** An integer is written into *pRes which is the result of +** comparing the key with the entry to which the cursor is +** pointing. The meaning of the integer written into +** *pRes is as follows: +** +** *pRes<0 The cursor is left pointing at an entry that +** is smaller than intKey or if the table is empty +** and the cursor is therefore left point to nothing. +** +** *pRes==0 The cursor is left pointing at an entry that +** exactly matches intKey. +** +** *pRes>0 The cursor is left pointing at an entry that +** is larger than intKey. +*/ +SQLITE_PRIVATE int sqlite3BtreeTableMoveto( + BtCursor *pCur, /* The cursor to be moved */ + i64 intKey, /* The table key */ + int biasRight, /* If true, bias the search to the high end */ + int *pRes /* Write search results here */ +){ + int rc; + + assert( cursorOwnsBtShared(pCur) ); + assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); + assert( pRes ); + assert( pCur->pKeyInfo==0 ); + assert( pCur->eState!=CURSOR_VALID || pCur->curIntKey!=0 ); + + /* If the cursor is already positioned at the point we are trying + ** to move to, then just return without doing any work */ + if( pCur->eState==CURSOR_VALID && (pCur->curFlags & BTCF_ValidNKey)!=0 ){ + if( pCur->info.nKey==intKey ){ + *pRes = 0; + return SQLITE_OK; + } + if( pCur->info.nKeycurFlags & BTCF_AtLast)!=0 ){ + assert( cursorIsAtLastEntry(pCur) || CORRUPT_DB ); + *pRes = -1; + return SQLITE_OK; + } + /* If the requested key is one more than the previous key, then + ** try to get there using sqlite3BtreeNext() rather than a full + ** binary search. This is an optimization only. The correct answer + ** is still obtained without this case, only a little more slowly. */ + if( pCur->info.nKey+1==intKey ){ + *pRes = 0; + rc = sqlite3BtreeNext(pCur, 0); + if( rc==SQLITE_OK ){ + getCellInfo(pCur); + if( pCur->info.nKey==intKey ){ + return SQLITE_OK; + } + }else if( rc!=SQLITE_DONE ){ + return rc; + } + } + } + } + +#ifdef SQLITE_DEBUG + pCur->pBtree->nSeek++; /* Performance measurement during testing */ +#endif + + rc = moveToRoot(pCur); + if( rc ){ + if( rc==SQLITE_EMPTY ){ + assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 ); + *pRes = -1; + return SQLITE_OK; + } + return rc; + } + assert( pCur->pPage ); + assert( pCur->pPage->isInit ); + assert( pCur->eState==CURSOR_VALID ); + assert( pCur->pPage->nCell > 0 ); + assert( pCur->iPage==0 || pCur->apPage[0]->intKey==pCur->curIntKey ); + assert( pCur->curIntKey ); + + for(;;){ + int lwr, upr, idx, c; + Pgno chldPg; + MemPage *pPage = pCur->pPage; + u8 *pCell; /* Pointer to current cell in pPage */ + + /* pPage->nCell must be greater than zero. If this is the root-page + ** the cursor would have been INVALID above and this for(;;) loop + ** not run. If this is not the root-page, then the moveToChild() routine + ** would have already detected db corruption. Similarly, pPage must + ** be the right kind (index or table) of b-tree page. Otherwise + ** a moveToChild() or moveToRoot() call would have detected corruption. */ + assert( pPage->nCell>0 ); + assert( pPage->intKey ); + lwr = 0; + upr = pPage->nCell-1; + assert( biasRight==0 || biasRight==1 ); + idx = upr>>(1-biasRight); /* idx = biasRight ? upr : (lwr+upr)/2; */ + for(;;){ + i64 nCellKey; + pCell = findCellPastPtr(pPage, idx); + if( pPage->intKeyLeaf ){ + while( 0x80 <= *(pCell++) ){ + if( pCell>=pPage->aDataEnd ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + } + } + getVarint(pCell, (u64*)&nCellKey); + if( nCellKeyupr ){ c = -1; break; } + }else if( nCellKey>intKey ){ + upr = idx-1; + if( lwr>upr ){ c = +1; break; } + }else{ + assert( nCellKey==intKey ); + pCur->ix = (u16)idx; + if( !pPage->leaf ){ + lwr = idx; + goto moveto_table_next_layer; + }else{ + pCur->curFlags |= BTCF_ValidNKey; + pCur->info.nKey = nCellKey; + pCur->info.nSize = 0; + *pRes = 0; + return SQLITE_OK; + } + } + assert( lwr+upr>=0 ); + idx = (lwr+upr)>>1; /* idx = (lwr+upr)/2; */ + } + assert( lwr==upr+1 || !pPage->leaf ); + assert( pPage->isInit ); + if( pPage->leaf ){ + assert( pCur->ixpPage->nCell ); + pCur->ix = (u16)idx; + *pRes = c; + rc = SQLITE_OK; + goto moveto_table_finish; + } +moveto_table_next_layer: + if( lwr>=pPage->nCell ){ + chldPg = get4byte(&pPage->aData[pPage->hdrOffset+8]); + }else{ + chldPg = get4byte(findCell(pPage, lwr)); + } + pCur->ix = (u16)lwr; + rc = moveToChild(pCur, chldPg); + if( rc ) break; + } +moveto_table_finish: + pCur->info.nSize = 0; + assert( (pCur->curFlags & BTCF_ValidOvfl)==0 ); + return rc; +} + +/* +** Compare the "idx"-th cell on the page pPage against the key +** pointing to by pIdxKey using xRecordCompare. Return negative or +** zero if the cell is less than or equal pIdxKey. Return positive +** if unknown. +** +** Return value negative: Cell at pCur[idx] less than pIdxKey +** +** Return value is zero: Cell at pCur[idx] equals pIdxKey +** +** Return value positive: Nothing is known about the relationship +** of the cell at pCur[idx] and pIdxKey. +** +** This routine is part of an optimization. It is always safe to return +** a positive value as that will cause the optimization to be skipped. +*/ +static int indexCellCompare( + MemPage *pPage, + int idx, + UnpackedRecord *pIdxKey, + RecordCompare xRecordCompare +){ + int c; + int nCell; /* Size of the pCell cell in bytes */ + u8 *pCell = findCellPastPtr(pPage, idx); + + nCell = pCell[0]; + if( nCell<=pPage->max1bytePayload ){ + /* This branch runs if the record-size field of the cell is a + ** single byte varint and the record fits entirely on the main + ** b-tree page. */ + testcase( pCell+nCell+1==pPage->aDataEnd ); + c = xRecordCompare(nCell, (void*)&pCell[1], pIdxKey); + }else if( !(pCell[1] & 0x80) + && (nCell = ((nCell&0x7f)<<7) + pCell[1])<=pPage->maxLocal + ){ + /* The record-size field is a 2 byte varint and the record + ** fits entirely on the main b-tree page. */ + testcase( pCell+nCell+2==pPage->aDataEnd ); + c = xRecordCompare(nCell, (void*)&pCell[2], pIdxKey); + }else{ + /* If the record extends into overflow pages, do not attempt + ** the optimization. */ + c = 99; + } + return c; +} + +/* +** Return true (non-zero) if pCur is current pointing to the last +** page of a table. +*/ +static int cursorOnLastPage(BtCursor *pCur){ + int i; + assert( pCur->eState==CURSOR_VALID ); + for(i=0; iiPage; i++){ + MemPage *pPage = pCur->apPage[i]; + if( pCur->aiIdx[i]nCell ) return 0; + } + return 1; +} + +/* Move the cursor so that it points to an entry in an index table +** near the key pIdxKey. Return a success code. +** +** If an exact match is not found, then the cursor is always +** left pointing at a leaf page which would hold the entry if it +** were present. The cursor might point to an entry that comes +** before or after the key. +** +** An integer is written into *pRes which is the result of +** comparing the key with the entry to which the cursor is +** pointing. The meaning of the integer written into +** *pRes is as follows: +** +** *pRes<0 The cursor is left pointing at an entry that +** is smaller than pIdxKey or if the table is empty +** and the cursor is therefore left point to nothing. +** +** *pRes==0 The cursor is left pointing at an entry that +** exactly matches pIdxKey. +** +** *pRes>0 The cursor is left pointing at an entry that +** is larger than pIdxKey. +** +** The pIdxKey->eqSeen field is set to 1 if there +** exists an entry in the table that exactly matches pIdxKey. +*/ +SQLITE_PRIVATE int sqlite3BtreeIndexMoveto( + BtCursor *pCur, /* The cursor to be moved */ + UnpackedRecord *pIdxKey, /* Unpacked index key */ + int *pRes /* Write search results here */ +){ + int rc; + RecordCompare xRecordCompare; + + assert( cursorOwnsBtShared(pCur) ); + assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); + assert( pRes ); + assert( pCur->pKeyInfo!=0 ); + +#ifdef SQLITE_DEBUG + pCur->pBtree->nSeek++; /* Performance measurement during testing */ +#endif + + xRecordCompare = sqlite3VdbeFindCompare(pIdxKey); + pIdxKey->errCode = 0; + assert( pIdxKey->default_rc==1 + || pIdxKey->default_rc==0 + || pIdxKey->default_rc==-1 + ); + + + /* Check to see if we can skip a lot of work. Two cases: + ** + ** (1) If the cursor is already pointing to the very last cell + ** in the table and the pIdxKey search key is greater than or + ** equal to that last cell, then no movement is required. + ** + ** (2) If the cursor is on the last page of the table and the first + ** cell on that last page is less than or equal to the pIdxKey + ** search key, then we can start the search on the current page + ** without needing to go back to root. + */ + if( pCur->eState==CURSOR_VALID + && pCur->pPage->leaf + && cursorOnLastPage(pCur) + ){ + int c; + if( pCur->ix==pCur->pPage->nCell-1 + && (c = indexCellCompare(pCur->pPage,pCur->ix,pIdxKey,xRecordCompare))<=0 + && pIdxKey->errCode==SQLITE_OK + ){ + *pRes = c; + return SQLITE_OK; /* Cursor already pointing at the correct spot */ + } + if( pCur->iPage>0 + && indexCellCompare(pCur->pPage, 0, pIdxKey, xRecordCompare)<=0 + && pIdxKey->errCode==SQLITE_OK + ){ + pCur->curFlags &= ~(BTCF_ValidOvfl|BTCF_AtLast); + if( !pCur->pPage->isInit ){ + return SQLITE_CORRUPT_BKPT; + } + goto bypass_moveto_root; /* Start search on the current page */ + } + pIdxKey->errCode = SQLITE_OK; + } + + rc = moveToRoot(pCur); + if( rc ){ + if( rc==SQLITE_EMPTY ){ + assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 ); + *pRes = -1; + return SQLITE_OK; + } + return rc; + } + +bypass_moveto_root: + assert( pCur->pPage ); + assert( pCur->pPage->isInit ); + assert( pCur->eState==CURSOR_VALID ); + assert( pCur->pPage->nCell > 0 ); + assert( pCur->curIntKey==0 ); + assert( pIdxKey!=0 ); + for(;;){ + int lwr, upr, idx, c; + Pgno chldPg; + MemPage *pPage = pCur->pPage; + u8 *pCell; /* Pointer to current cell in pPage */ + + /* pPage->nCell must be greater than zero. If this is the root-page + ** the cursor would have been INVALID above and this for(;;) loop + ** not run. If this is not the root-page, then the moveToChild() routine + ** would have already detected db corruption. Similarly, pPage must + ** be the right kind (index or table) of b-tree page. Otherwise + ** a moveToChild() or moveToRoot() call would have detected corruption. */ + assert( pPage->nCell>0 ); + assert( pPage->intKey==0 ); + lwr = 0; + upr = pPage->nCell-1; + idx = upr>>1; /* idx = (lwr+upr)/2; */ + for(;;){ + int nCell; /* Size of the pCell cell in bytes */ + pCell = findCellPastPtr(pPage, idx); + + /* The maximum supported page-size is 65536 bytes. This means that + ** the maximum number of record bytes stored on an index B-Tree + ** page is less than 16384 bytes and may be stored as a 2-byte + ** varint. This information is used to attempt to avoid parsing + ** the entire cell by checking for the cases where the record is + ** stored entirely within the b-tree page by inspecting the first + ** 2 bytes of the cell. + */ + nCell = pCell[0]; + if( nCell<=pPage->max1bytePayload ){ + /* This branch runs if the record-size field of the cell is a + ** single byte varint and the record fits entirely on the main + ** b-tree page. */ + testcase( pCell+nCell+1==pPage->aDataEnd ); + c = xRecordCompare(nCell, (void*)&pCell[1], pIdxKey); + }else if( !(pCell[1] & 0x80) + && (nCell = ((nCell&0x7f)<<7) + pCell[1])<=pPage->maxLocal + ){ + /* The record-size field is a 2 byte varint and the record + ** fits entirely on the main b-tree page. */ + testcase( pCell+nCell+2==pPage->aDataEnd ); + c = xRecordCompare(nCell, (void*)&pCell[2], pIdxKey); + }else{ + /* The record flows over onto one or more overflow pages. In + ** this case the whole cell needs to be parsed, a buffer allocated + ** and accessPayload() used to retrieve the record into the + ** buffer before VdbeRecordCompare() can be called. + ** + ** If the record is corrupt, the xRecordCompare routine may read + ** up to two varints past the end of the buffer. An extra 18 + ** bytes of padding is allocated at the end of the buffer in + ** case this happens. */ + void *pCellKey; + u8 * const pCellBody = pCell - pPage->childPtrSize; + const int nOverrun = 18; /* Size of the overrun padding */ + pPage->xParseCell(pPage, pCellBody, &pCur->info); + nCell = (int)pCur->info.nKey; + testcase( nCell<0 ); /* True if key size is 2^32 or more */ + testcase( nCell==0 ); /* Invalid key size: 0x80 0x80 0x00 */ + testcase( nCell==1 ); /* Invalid key size: 0x80 0x80 0x01 */ + testcase( nCell==2 ); /* Minimum legal index key size */ + if( nCell<2 || nCell/pCur->pBt->usableSize>pCur->pBt->nPage ){ + rc = SQLITE_CORRUPT_PAGE(pPage); + goto moveto_index_finish; + } + pCellKey = sqlite3Malloc( (u64)nCell+(u64)nOverrun ); + if( pCellKey==0 ){ + rc = SQLITE_NOMEM_BKPT; + goto moveto_index_finish; + } + pCur->ix = (u16)idx; + rc = accessPayload(pCur, 0, nCell, (unsigned char*)pCellKey, 0); + memset(((u8*)pCellKey)+nCell,0,nOverrun); /* Fix uninit warnings */ + pCur->curFlags &= ~BTCF_ValidOvfl; + if( rc ){ + sqlite3_free(pCellKey); + goto moveto_index_finish; + } + c = sqlite3VdbeRecordCompare(nCell, pCellKey, pIdxKey); + sqlite3_free(pCellKey); + } + assert( + (pIdxKey->errCode!=SQLITE_CORRUPT || c==0) + && (pIdxKey->errCode!=SQLITE_NOMEM || pCur->pBtree->db->mallocFailed) + ); + if( c<0 ){ + lwr = idx+1; + }else if( c>0 ){ + upr = idx-1; + }else{ + assert( c==0 ); + *pRes = 0; + rc = SQLITE_OK; + pCur->ix = (u16)idx; + if( pIdxKey->errCode ) rc = SQLITE_CORRUPT_BKPT; + goto moveto_index_finish; + } + if( lwr>upr ) break; + assert( lwr+upr>=0 ); + idx = (lwr+upr)>>1; /* idx = (lwr+upr)/2 */ + } + assert( lwr==upr+1 || (pPage->intKey && !pPage->leaf) ); + assert( pPage->isInit ); + if( pPage->leaf ){ + assert( pCur->ixpPage->nCell || CORRUPT_DB ); + pCur->ix = (u16)idx; + *pRes = c; + rc = SQLITE_OK; + goto moveto_index_finish; + } + if( lwr>=pPage->nCell ){ + chldPg = get4byte(&pPage->aData[pPage->hdrOffset+8]); + }else{ + chldPg = get4byte(findCell(pPage, lwr)); + } + + /* This block is similar to an in-lined version of: + ** + ** pCur->ix = (u16)lwr; + ** rc = moveToChild(pCur, chldPg); + ** if( rc ) break; + */ + pCur->info.nSize = 0; + pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl); + if( pCur->iPage>=(BTCURSOR_MAX_DEPTH-1) ){ + return SQLITE_CORRUPT_BKPT; + } + pCur->aiIdx[pCur->iPage] = (u16)lwr; + pCur->apPage[pCur->iPage] = pCur->pPage; + pCur->ix = 0; + pCur->iPage++; + rc = getAndInitPage(pCur->pBt, chldPg, &pCur->pPage, pCur->curPagerFlags); + if( rc==SQLITE_OK + && (pCur->pPage->nCell<1 || pCur->pPage->intKey!=pCur->curIntKey) + ){ + releasePage(pCur->pPage); + rc = SQLITE_CORRUPT_PGNO(chldPg); + } + if( rc ){ + pCur->pPage = pCur->apPage[--pCur->iPage]; + break; + } + /* + ***** End of in-lined moveToChild() call */ + } +moveto_index_finish: + pCur->info.nSize = 0; + assert( (pCur->curFlags & BTCF_ValidOvfl)==0 ); + return rc; +} + + +/* +** Return TRUE if the cursor is not pointing at an entry of the table. +** +** TRUE will be returned after a call to sqlite3BtreeNext() moves +** past the last entry in the table or sqlite3BtreePrev() moves past +** the first entry. TRUE is also returned if the table is empty. +*/ +SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor *pCur){ + /* TODO: What if the cursor is in CURSOR_REQUIRESEEK but all table entries + ** have been deleted? This API will need to change to return an error code + ** as well as the boolean result value. + */ + return (CURSOR_VALID!=pCur->eState); +} + +/* +** Return an estimate for the number of rows in the table that pCur is +** pointing to. Return a negative number if no estimate is currently +** available. +*/ +SQLITE_PRIVATE i64 sqlite3BtreeRowCountEst(BtCursor *pCur){ + i64 n; + u8 i; + + assert( cursorOwnsBtShared(pCur) ); + assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); + + /* Currently this interface is only called by the OP_IfSizeBetween + ** opcode and the OP_Count opcode with P3=1. In either case, + ** the cursor will always be valid unless the btree is empty. */ + if( pCur->eState!=CURSOR_VALID ) return 0; + if( NEVER(pCur->pPage->leaf==0) ) return -1; + + n = pCur->pPage->nCell; + for(i=0; iiPage; i++){ + n *= pCur->apPage[i]->nCell+1; + } + return n; +} + +/* +** Advance the cursor to the next entry in the database. +** Return value: +** +** SQLITE_OK success +** SQLITE_DONE cursor is already pointing at the last element +** otherwise some kind of error occurred +** +** The main entry point is sqlite3BtreeNext(). That routine is optimized +** for the common case of merely incrementing the cell counter BtCursor.aiIdx +** to the next cell on the current page. The (slower) btreeNext() helper +** routine is called when it is necessary to move to a different page or +** to restore the cursor. +** +** If bit 0x01 of the F argument in sqlite3BtreeNext(C,F) is 1, then the +** cursor corresponds to an SQL index and this routine could have been +** skipped if the SQL index had been a unique index. The F argument +** is a hint to the implement. SQLite btree implementation does not use +** this hint, but COMDB2 does. +*/ +static SQLITE_NOINLINE int btreeNext(BtCursor *pCur){ + int rc; + int idx; + MemPage *pPage; + + assert( cursorOwnsBtShared(pCur) ); + if( pCur->eState!=CURSOR_VALID ){ + assert( (pCur->curFlags & BTCF_ValidOvfl)==0 ); + rc = restoreCursorPosition(pCur); + if( rc!=SQLITE_OK ){ + return rc; + } + if( CURSOR_INVALID==pCur->eState ){ + return SQLITE_DONE; + } + if( pCur->eState==CURSOR_SKIPNEXT ){ + pCur->eState = CURSOR_VALID; + if( pCur->skipNext>0 ) return SQLITE_OK; + } + } + + pPage = pCur->pPage; + idx = ++pCur->ix; + if( sqlite3FaultSim(412) ) pPage->isInit = 0; + if( !pPage->isInit ){ + return SQLITE_CORRUPT_BKPT; + } + + if( idx>=pPage->nCell ){ + if( !pPage->leaf ){ + rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8])); + if( rc ) return rc; + return moveToLeftmost(pCur); + } + do{ + if( pCur->iPage==0 ){ + pCur->eState = CURSOR_INVALID; + return SQLITE_DONE; + } + moveToParent(pCur); + pPage = pCur->pPage; + }while( pCur->ix>=pPage->nCell ); + if( pPage->intKey ){ + return sqlite3BtreeNext(pCur, 0); + }else{ + return SQLITE_OK; + } + } + if( pPage->leaf ){ + return SQLITE_OK; + }else{ + return moveToLeftmost(pCur); + } +} +SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int flags){ + MemPage *pPage; + UNUSED_PARAMETER( flags ); /* Used in COMDB2 but not native SQLite */ + assert( cursorOwnsBtShared(pCur) ); + assert( flags==0 || flags==1 ); + pCur->info.nSize = 0; + pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl); + if( pCur->eState!=CURSOR_VALID ) return btreeNext(pCur); + pPage = pCur->pPage; + if( (++pCur->ix)>=pPage->nCell ){ + pCur->ix--; + return btreeNext(pCur); + } + if( pPage->leaf ){ + return SQLITE_OK; + }else{ + return moveToLeftmost(pCur); + } +} + +/* +** Step the cursor to the back to the previous entry in the database. +** Return values: +** +** SQLITE_OK success +** SQLITE_DONE the cursor is already on the first element of the table +** otherwise some kind of error occurred +** +** The main entry point is sqlite3BtreePrevious(). That routine is optimized +** for the common case of merely decrementing the cell counter BtCursor.aiIdx +** to the previous cell on the current page. The (slower) btreePrevious() +** helper routine is called when it is necessary to move to a different page +** or to restore the cursor. +** +** If bit 0x01 of the F argument to sqlite3BtreePrevious(C,F) is 1, then +** the cursor corresponds to an SQL index and this routine could have been +** skipped if the SQL index had been a unique index. The F argument is a +** hint to the implement. The native SQLite btree implementation does not +** use this hint, but COMDB2 does. +*/ +static SQLITE_NOINLINE int btreePrevious(BtCursor *pCur){ + int rc; + MemPage *pPage; + + assert( cursorOwnsBtShared(pCur) ); + assert( (pCur->curFlags & (BTCF_AtLast|BTCF_ValidOvfl|BTCF_ValidNKey))==0 ); + assert( pCur->info.nSize==0 ); + if( pCur->eState!=CURSOR_VALID ){ + rc = restoreCursorPosition(pCur); + if( rc!=SQLITE_OK ){ + return rc; + } + if( CURSOR_INVALID==pCur->eState ){ + return SQLITE_DONE; + } + if( CURSOR_SKIPNEXT==pCur->eState ){ + pCur->eState = CURSOR_VALID; + if( pCur->skipNext<0 ) return SQLITE_OK; + } + } + + pPage = pCur->pPage; + if( sqlite3FaultSim(412) ) pPage->isInit = 0; + if( !pPage->isInit ){ + return SQLITE_CORRUPT_BKPT; + } + if( !pPage->leaf ){ + int idx = pCur->ix; + rc = moveToChild(pCur, get4byte(findCell(pPage, idx))); + if( rc ) return rc; + rc = moveToRightmost(pCur); + }else{ + while( pCur->ix==0 ){ + if( pCur->iPage==0 ){ + pCur->eState = CURSOR_INVALID; + return SQLITE_DONE; + } + moveToParent(pCur); + } + assert( pCur->info.nSize==0 ); + assert( (pCur->curFlags & (BTCF_ValidOvfl))==0 ); + + pCur->ix--; + pPage = pCur->pPage; + if( pPage->intKey && !pPage->leaf ){ + rc = sqlite3BtreePrevious(pCur, 0); + }else{ + rc = SQLITE_OK; + } + } + return rc; +} +SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int flags){ + assert( cursorOwnsBtShared(pCur) ); + assert( flags==0 || flags==1 ); + UNUSED_PARAMETER( flags ); /* Used in COMDB2 but not native SQLite */ + pCur->curFlags &= ~(BTCF_AtLast|BTCF_ValidOvfl|BTCF_ValidNKey); + pCur->info.nSize = 0; + if( pCur->eState!=CURSOR_VALID + || pCur->ix==0 + || pCur->pPage->leaf==0 + ){ + return btreePrevious(pCur); + } + pCur->ix--; + return SQLITE_OK; +} + +/* +** Allocate a new page from the database file. +** +** The new page is marked as dirty. (In other words, sqlite3PagerWrite() +** has already been called on the new page.) The new page has also +** been referenced and the calling routine is responsible for calling +** sqlite3PagerUnref() on the new page when it is done. +** +** SQLITE_OK is returned on success. Any other return value indicates +** an error. *ppPage is set to NULL in the event of an error. +** +** If the "nearby" parameter is not 0, then an effort is made to +** locate a page close to the page number "nearby". This can be used in an +** attempt to keep related pages close to each other in the database file, +** which in turn can make database access faster. +** +** If the eMode parameter is BTALLOC_EXACT and the nearby page exists +** anywhere on the free-list, then it is guaranteed to be returned. If +** eMode is BTALLOC_LT then the page returned will be less than or equal +** to nearby if any such page exists. If eMode is BTALLOC_ANY then there +** are no restrictions on which page is returned. +*/ +static int allocateBtreePage( + BtShared *pBt, /* The btree */ + MemPage **ppPage, /* Store pointer to the allocated page here */ + Pgno *pPgno, /* Store the page number here */ + Pgno nearby, /* Search for a page near this one */ + u8 eMode /* BTALLOC_EXACT, BTALLOC_LT, or BTALLOC_ANY */ +){ + MemPage *pPage1; + int rc; + u32 n; /* Number of pages on the freelist */ + u32 k; /* Number of leaves on the trunk of the freelist */ + MemPage *pTrunk = 0; + MemPage *pPrevTrunk = 0; + Pgno mxPage; /* Total size of the database file */ + + assert( sqlite3_mutex_held(pBt->mutex) ); + assert( eMode==BTALLOC_ANY || (nearby>0 && IfNotOmitAV(pBt->autoVacuum)) ); + pPage1 = pBt->pPage1; + mxPage = btreePagecount(pBt); + /* EVIDENCE-OF: R-21003-45125 The 4-byte big-endian integer at offset 36 + ** stores the total number of pages on the freelist. */ + n = get4byte(&pPage1->aData[36]); + testcase( n==mxPage-1 ); + if( n>=mxPage ){ + return SQLITE_CORRUPT_BKPT; + } + if( n>0 ){ + /* There are pages on the freelist. Reuse one of those pages. */ + Pgno iTrunk; + u8 searchList = 0; /* If the free-list must be searched for 'nearby' */ + u32 nSearch = 0; /* Count of the number of search attempts */ + + /* If eMode==BTALLOC_EXACT and a query of the pointer-map + ** shows that the page 'nearby' is somewhere on the free-list, then + ** the entire-list will be searched for that page. + */ +#ifndef SQLITE_OMIT_AUTOVACUUM + if( eMode==BTALLOC_EXACT ){ + if( nearby<=mxPage ){ + u8 eType; + assert( nearby>0 ); + assert( pBt->autoVacuum ); + rc = ptrmapGet(pBt, nearby, &eType, 0); + if( rc ) return rc; + if( eType==PTRMAP_FREEPAGE ){ + searchList = 1; + } + } + }else if( eMode==BTALLOC_LE ){ + searchList = 1; + } +#endif + + /* Decrement the free-list count by 1. Set iTrunk to the index of the + ** first free-list trunk page. iPrevTrunk is initially 1. + */ + rc = sqlite3PagerWrite(pPage1->pDbPage); + if( rc ) return rc; + put4byte(&pPage1->aData[36], n-1); + + /* The code within this loop is run only once if the 'searchList' variable + ** is not true. Otherwise, it runs once for each trunk-page on the + ** free-list until the page 'nearby' is located (eMode==BTALLOC_EXACT) + ** or until a page less than 'nearby' is located (eMode==BTALLOC_LT) + */ + do { + pPrevTrunk = pTrunk; + if( pPrevTrunk ){ + /* EVIDENCE-OF: R-01506-11053 The first integer on a freelist trunk page + ** is the page number of the next freelist trunk page in the list or + ** zero if this is the last freelist trunk page. */ + iTrunk = get4byte(&pPrevTrunk->aData[0]); + }else{ + /* EVIDENCE-OF: R-59841-13798 The 4-byte big-endian integer at offset 32 + ** stores the page number of the first page of the freelist, or zero if + ** the freelist is empty. */ + iTrunk = get4byte(&pPage1->aData[32]); + } + testcase( iTrunk==mxPage ); + if( iTrunk>mxPage || nSearch++ > n ){ + rc = SQLITE_CORRUPT_PGNO(pPrevTrunk ? pPrevTrunk->pgno : 1); + }else{ + rc = btreeGetUnusedPage(pBt, iTrunk, &pTrunk, 0); + } + if( rc ){ + pTrunk = 0; + goto end_allocate_page; + } + assert( pTrunk!=0 ); + assert( pTrunk->aData!=0 ); + /* EVIDENCE-OF: R-13523-04394 The second integer on a freelist trunk page + ** is the number of leaf page pointers to follow. */ + k = get4byte(&pTrunk->aData[4]); + if( k==0 && !searchList ){ + /* The trunk has no leaves and the list is not being searched. + ** So extract the trunk page itself and use it as the newly + ** allocated page */ + assert( pPrevTrunk==0 ); + rc = sqlite3PagerWrite(pTrunk->pDbPage); + if( rc ){ + goto end_allocate_page; + } + *pPgno = iTrunk; + memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4); + *ppPage = pTrunk; + pTrunk = 0; + TRACE(("ALLOCATE: %u trunk - %u free pages left\n", *pPgno, n-1)); + }else if( k>(u32)(pBt->usableSize/4 - 2) ){ + /* Value of k is out of range. Database corruption */ + rc = SQLITE_CORRUPT_PGNO(iTrunk); + goto end_allocate_page; +#ifndef SQLITE_OMIT_AUTOVACUUM + }else if( searchList + && (nearby==iTrunk || (iTrunkpDbPage); + if( rc ){ + goto end_allocate_page; + } + if( k==0 ){ + if( !pPrevTrunk ){ + memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4); + }else{ + rc = sqlite3PagerWrite(pPrevTrunk->pDbPage); + if( rc!=SQLITE_OK ){ + goto end_allocate_page; + } + memcpy(&pPrevTrunk->aData[0], &pTrunk->aData[0], 4); + } + }else{ + /* The trunk page is required by the caller but it contains + ** pointers to free-list leaves. The first leaf becomes a trunk + ** page in this case. + */ + MemPage *pNewTrunk; + Pgno iNewTrunk = get4byte(&pTrunk->aData[8]); + if( iNewTrunk>mxPage ){ + rc = SQLITE_CORRUPT_PGNO(iTrunk); + goto end_allocate_page; + } + testcase( iNewTrunk==mxPage ); + rc = btreeGetUnusedPage(pBt, iNewTrunk, &pNewTrunk, 0); + if( rc!=SQLITE_OK ){ + goto end_allocate_page; + } + rc = sqlite3PagerWrite(pNewTrunk->pDbPage); + if( rc!=SQLITE_OK ){ + releasePage(pNewTrunk); + goto end_allocate_page; + } + memcpy(&pNewTrunk->aData[0], &pTrunk->aData[0], 4); + put4byte(&pNewTrunk->aData[4], k-1); + memcpy(&pNewTrunk->aData[8], &pTrunk->aData[12], (k-1)*4); + releasePage(pNewTrunk); + if( !pPrevTrunk ){ + assert( sqlite3PagerIswriteable(pPage1->pDbPage) ); + put4byte(&pPage1->aData[32], iNewTrunk); + }else{ + rc = sqlite3PagerWrite(pPrevTrunk->pDbPage); + if( rc ){ + goto end_allocate_page; + } + put4byte(&pPrevTrunk->aData[0], iNewTrunk); + } + } + pTrunk = 0; + TRACE(("ALLOCATE: %u trunk - %u free pages left\n", *pPgno, n-1)); +#endif + }else if( k>0 ){ + /* Extract a leaf from the trunk */ + u32 closest; + Pgno iPage; + unsigned char *aData = pTrunk->aData; + if( nearby>0 ){ + u32 i; + closest = 0; + if( eMode==BTALLOC_LE ){ + for(i=0; imxPage || iPage<2 ){ + rc = SQLITE_CORRUPT_PGNO(iTrunk); + goto end_allocate_page; + } + testcase( iPage==mxPage ); + if( !searchList + || (iPage==nearby || (iPagepgno, n-1)); + rc = sqlite3PagerWrite(pTrunk->pDbPage); + if( rc ) goto end_allocate_page; + if( closestpDbPage); + if( rc!=SQLITE_OK ){ + releasePage(*ppPage); + *ppPage = 0; + } + } + searchList = 0; + } + } + releasePage(pPrevTrunk); + pPrevTrunk = 0; + }while( searchList ); + }else{ + /* There are no pages on the freelist, so append a new page to the + ** database image. + ** + ** Normally, new pages allocated by this block can be requested from the + ** pager layer with the 'no-content' flag set. This prevents the pager + ** from trying to read the pages content from disk. However, if the + ** current transaction has already run one or more incremental-vacuum + ** steps, then the page we are about to allocate may contain content + ** that is required in the event of a rollback. In this case, do + ** not set the no-content flag. This causes the pager to load and journal + ** the current page content before overwriting it. + ** + ** Note that the pager will not actually attempt to load or journal + ** content for any page that really does lie past the end of the database + ** file on disk. So the effects of disabling the no-content optimization + ** here are confined to those pages that lie between the end of the + ** database image and the end of the database file. + */ + int bNoContent = (0==IfNotOmitAV(pBt->bDoTruncate))? PAGER_GET_NOCONTENT:0; + + rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); + if( rc ) return rc; + pBt->nPage++; + if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ) pBt->nPage++; + +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pBt->autoVacuum && PTRMAP_ISPAGE(pBt, pBt->nPage) ){ + /* If *pPgno refers to a pointer-map page, allocate two new pages + ** at the end of the file instead of one. The first allocated page + ** becomes a new pointer-map page, the second is used by the caller. + */ + MemPage *pPg = 0; + TRACE(("ALLOCATE: %u from end of file (pointer-map page)\n", pBt->nPage)); + assert( pBt->nPage!=PENDING_BYTE_PAGE(pBt) ); + rc = btreeGetUnusedPage(pBt, pBt->nPage, &pPg, bNoContent); + if( rc==SQLITE_OK ){ + rc = sqlite3PagerWrite(pPg->pDbPage); + releasePage(pPg); + } + if( rc ) return rc; + pBt->nPage++; + if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ){ pBt->nPage++; } + } +#endif + put4byte(28 + (u8*)pBt->pPage1->aData, pBt->nPage); + *pPgno = pBt->nPage; + + assert( *pPgno!=PENDING_BYTE_PAGE(pBt) ); + rc = btreeGetUnusedPage(pBt, *pPgno, ppPage, bNoContent); + if( rc ) return rc; + rc = sqlite3PagerWrite((*ppPage)->pDbPage); + if( rc!=SQLITE_OK ){ + releasePage(*ppPage); + *ppPage = 0; + } + TRACE(("ALLOCATE: %u from end of file\n", *pPgno)); + } + + assert( CORRUPT_DB || *pPgno!=PENDING_BYTE_PAGE(pBt) ); + +end_allocate_page: + releasePage(pTrunk); + releasePage(pPrevTrunk); + assert( rc!=SQLITE_OK || sqlite3PagerPageRefcount((*ppPage)->pDbPage)<=1 ); + assert( rc!=SQLITE_OK || (*ppPage)->isInit==0 ); + return rc; +} + +/* +** This function is used to add page iPage to the database file free-list. +** It is assumed that the page is not already a part of the free-list. +** +** The value passed as the second argument to this function is optional. +** If the caller happens to have a pointer to the MemPage object +** corresponding to page iPage handy, it may pass it as the second value. +** Otherwise, it may pass NULL. +** +** If a pointer to a MemPage object is passed as the second argument, +** its reference count is not altered by this function. +*/ +static int freePage2(BtShared *pBt, MemPage *pMemPage, Pgno iPage){ + MemPage *pTrunk = 0; /* Free-list trunk page */ + Pgno iTrunk = 0; /* Page number of free-list trunk page */ + MemPage *pPage1 = pBt->pPage1; /* Local reference to page 1 */ + MemPage *pPage; /* Page being freed. May be NULL. */ + int rc; /* Return Code */ + u32 nFree; /* Initial number of pages on free-list */ + + assert( sqlite3_mutex_held(pBt->mutex) ); + assert( CORRUPT_DB || iPage>1 ); + assert( !pMemPage || pMemPage->pgno==iPage ); + + if( iPage<2 || iPage>pBt->nPage ){ + return SQLITE_CORRUPT_BKPT; + } + if( pMemPage ){ + pPage = pMemPage; + sqlite3PagerRef(pPage->pDbPage); + }else{ + pPage = btreePageLookup(pBt, iPage); + } + + /* Increment the free page count on pPage1 */ + rc = sqlite3PagerWrite(pPage1->pDbPage); + if( rc ) goto freepage_out; + nFree = get4byte(&pPage1->aData[36]); + put4byte(&pPage1->aData[36], nFree+1); + + if( pBt->btsFlags & BTS_SECURE_DELETE ){ + /* If the secure_delete option is enabled, then + ** always fully overwrite deleted information with zeros. + */ + if( (!pPage && ((rc = btreeGetPage(pBt, iPage, &pPage, 0))!=0) ) + || ((rc = sqlite3PagerWrite(pPage->pDbPage))!=0) + ){ + goto freepage_out; + } + memset(pPage->aData, 0, pPage->pBt->pageSize); + } + + /* If the database supports auto-vacuum, write an entry in the pointer-map + ** to indicate that the page is free. + */ + if( ISAUTOVACUUM(pBt) ){ + ptrmapPut(pBt, iPage, PTRMAP_FREEPAGE, 0, &rc); + if( rc ) goto freepage_out; + } + + /* Now manipulate the actual database free-list structure. There are two + ** possibilities. If the free-list is currently empty, or if the first + ** trunk page in the free-list is full, then this page will become a + ** new free-list trunk page. Otherwise, it will become a leaf of the + ** first trunk page in the current free-list. This block tests if it + ** is possible to add the page as a new free-list leaf. + */ + if( nFree!=0 ){ + u32 nLeaf; /* Initial number of leaf cells on trunk page */ + + iTrunk = get4byte(&pPage1->aData[32]); + if( iTrunk>btreePagecount(pBt) ){ + rc = SQLITE_CORRUPT_BKPT; + goto freepage_out; + } + rc = btreeGetPage(pBt, iTrunk, &pTrunk, 0); + if( rc!=SQLITE_OK ){ + goto freepage_out; + } + + nLeaf = get4byte(&pTrunk->aData[4]); + assert( pBt->usableSize>32 ); + if( nLeaf > (u32)pBt->usableSize/4 - 2 ){ + rc = SQLITE_CORRUPT_BKPT; + goto freepage_out; + } + if( nLeaf < (u32)pBt->usableSize/4 - 8 ){ + /* In this case there is room on the trunk page to insert the page + ** being freed as a new leaf. + ** + ** Note that the trunk page is not really full until it contains + ** usableSize/4 - 2 entries, not usableSize/4 - 8 entries as we have + ** coded. But due to a coding error in versions of SQLite prior to + ** 3.6.0, databases with freelist trunk pages holding more than + ** usableSize/4 - 8 entries will be reported as corrupt. In order + ** to maintain backwards compatibility with older versions of SQLite, + ** we will continue to restrict the number of entries to usableSize/4 - 8 + ** for now. At some point in the future (once everyone has upgraded + ** to 3.6.0 or later) we should consider fixing the conditional above + ** to read "usableSize/4-2" instead of "usableSize/4-8". + ** + ** EVIDENCE-OF: R-19920-11576 However, newer versions of SQLite still + ** avoid using the last six entries in the freelist trunk page array in + ** order that database files created by newer versions of SQLite can be + ** read by older versions of SQLite. + */ + rc = sqlite3PagerWrite(pTrunk->pDbPage); + if( rc==SQLITE_OK ){ + put4byte(&pTrunk->aData[4], nLeaf+1); + put4byte(&pTrunk->aData[8+nLeaf*4], iPage); + if( pPage && (pBt->btsFlags & BTS_SECURE_DELETE)==0 ){ + sqlite3PagerDontWrite(pPage->pDbPage); + } + rc = btreeSetHasContent(pBt, iPage); + } + TRACE(("FREE-PAGE: %u leaf on trunk page %u\n",pPage->pgno,pTrunk->pgno)); + goto freepage_out; + } + } + + /* If control flows to this point, then it was not possible to add the + ** the page being freed as a leaf page of the first trunk in the free-list. + ** Possibly because the free-list is empty, or possibly because the + ** first trunk in the free-list is full. Either way, the page being freed + ** will become the new first trunk page in the free-list. + */ + if( pPage==0 && SQLITE_OK!=(rc = btreeGetPage(pBt, iPage, &pPage, 0)) ){ + goto freepage_out; + } + rc = sqlite3PagerWrite(pPage->pDbPage); + if( rc!=SQLITE_OK ){ + goto freepage_out; + } + put4byte(pPage->aData, iTrunk); + put4byte(&pPage->aData[4], 0); + put4byte(&pPage1->aData[32], iPage); + TRACE(("FREE-PAGE: %u new trunk page replacing %u\n", pPage->pgno, iTrunk)); + +freepage_out: + if( pPage ){ + pPage->isInit = 0; + } + releasePage(pPage); + releasePage(pTrunk); + return rc; +} +static void freePage(MemPage *pPage, int *pRC){ + if( (*pRC)==SQLITE_OK ){ + *pRC = freePage2(pPage->pBt, pPage, pPage->pgno); + } +} + +/* +** Free the overflow pages associated with the given Cell. +*/ +static SQLITE_NOINLINE int clearCellOverflow( + MemPage *pPage, /* The page that contains the Cell */ + unsigned char *pCell, /* First byte of the Cell */ + CellInfo *pInfo /* Size information about the cell */ +){ + BtShared *pBt; + Pgno ovflPgno; + int rc; + int nOvfl; + u32 ovflPageSize; + + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( pInfo->nLocal!=pInfo->nPayload ); + testcase( pCell + pInfo->nSize == pPage->aDataEnd ); + testcase( pCell + (pInfo->nSize-1) == pPage->aDataEnd ); + if( pCell + pInfo->nSize > pPage->aDataEnd ){ + /* Cell extends past end of page */ + return SQLITE_CORRUPT_PAGE(pPage); + } + ovflPgno = get4byte(pCell + pInfo->nSize - 4); + pBt = pPage->pBt; + assert( pBt->usableSize > 4 ); + ovflPageSize = pBt->usableSize - 4; + nOvfl = (pInfo->nPayload - pInfo->nLocal + ovflPageSize - 1)/ovflPageSize; + assert( nOvfl>0 || + (CORRUPT_DB && (pInfo->nPayload + ovflPageSize)btreePagecount(pBt) ){ + /* 0 is not a legal page number and page 1 cannot be an + ** overflow page. Therefore if ovflPgno<2 or past the end of the + ** file the database must be corrupt. */ + return SQLITE_CORRUPT_BKPT; + } + if( nOvfl ){ + rc = getOverflowPage(pBt, ovflPgno, &pOvfl, &iNext); + if( rc ) return rc; + } + + if( ( pOvfl || ((pOvfl = btreePageLookup(pBt, ovflPgno))!=0) ) + && sqlite3PagerPageRefcount(pOvfl->pDbPage)!=1 + ){ + /* There is no reason any cursor should have an outstanding reference + ** to an overflow page belonging to a cell that is being deleted/updated. + ** So if there exists more than one reference to this page, then it + ** must not really be an overflow page and the database must be corrupt. + ** It is helpful to detect this before calling freePage2(), as + ** freePage2() may zero the page contents if secure-delete mode is + ** enabled. If this 'overflow' page happens to be a page that the + ** caller is iterating through or using in some other way, this + ** can be problematic. + */ + rc = SQLITE_CORRUPT_BKPT; + }else{ + rc = freePage2(pBt, pOvfl, ovflPgno); + } + + if( pOvfl ){ + sqlite3PagerUnref(pOvfl->pDbPage); + } + if( rc ) return rc; + ovflPgno = iNext; + } + return SQLITE_OK; +} + +/* Call xParseCell to compute the size of a cell. If the cell contains +** overflow, then invoke cellClearOverflow to clear out that overflow. +** Store the result code (SQLITE_OK or some error code) in rc. +** +** Implemented as macro to force inlining for performance. +*/ +#define BTREE_CLEAR_CELL(rc, pPage, pCell, sInfo) \ + pPage->xParseCell(pPage, pCell, &sInfo); \ + if( sInfo.nLocal!=sInfo.nPayload ){ \ + rc = clearCellOverflow(pPage, pCell, &sInfo); \ + }else{ \ + rc = SQLITE_OK; \ + } + + +/* +** Create the byte sequence used to represent a cell on page pPage +** and write that byte sequence into pCell[]. Overflow pages are +** allocated and filled in as necessary. The calling procedure +** is responsible for making sure sufficient space has been allocated +** for pCell[]. +** +** Note that pCell does not necessary need to point to the pPage->aData +** area. pCell might point to some temporary storage. The cell will +** be constructed in this temporary area then copied into pPage->aData +** later. +*/ +static int fillInCell( + MemPage *pPage, /* The page that contains the cell */ + unsigned char *pCell, /* Complete text of the cell */ + const BtreePayload *pX, /* Payload with which to construct the cell */ + int *pnSize /* Write cell size here */ +){ + int nPayload; + const u8 *pSrc; + int nSrc, n, rc, mn; + int spaceLeft; + MemPage *pToRelease; + unsigned char *pPrior; + unsigned char *pPayload; + BtShared *pBt; + Pgno pgnoOvfl; + int nHeader; + + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + + /* pPage is not necessarily writeable since pCell might be auxiliary + ** buffer space that is separate from the pPage buffer area */ + assert( pCellaData || pCell>=&pPage->aData[pPage->pBt->pageSize] + || sqlite3PagerIswriteable(pPage->pDbPage) ); + + /* Fill in the header. */ + nHeader = pPage->childPtrSize; + if( pPage->intKey ){ + nPayload = pX->nData + pX->nZero; + pSrc = pX->pData; + nSrc = pX->nData; + assert( pPage->intKeyLeaf ); /* fillInCell() only called for leaves */ + nHeader += putVarint32(&pCell[nHeader], nPayload); + nHeader += putVarint(&pCell[nHeader], *(u64*)&pX->nKey); + }else{ + assert( pX->nKey<=0x7fffffff && pX->pKey!=0 ); + nSrc = nPayload = (int)pX->nKey; + pSrc = pX->pKey; + nHeader += putVarint32(&pCell[nHeader], nPayload); + } + + /* Fill in the payload */ + pPayload = &pCell[nHeader]; + if( nPayload<=pPage->maxLocal ){ + /* This is the common case where everything fits on the btree page + ** and no overflow pages are required. */ + n = nHeader + nPayload; + testcase( n==3 ); + testcase( n==4 ); + if( n<4 ){ + n = 4; + pPayload[nPayload] = 0; + } + *pnSize = n; + assert( nSrc<=nPayload ); + testcase( nSrcminLocal; + n = mn + (nPayload - mn) % (pPage->pBt->usableSize - 4); + testcase( n==pPage->maxLocal ); + testcase( n==pPage->maxLocal+1 ); + if( n > pPage->maxLocal ) n = mn; + spaceLeft = n; + *pnSize = n + nHeader + 4; + pPrior = &pCell[nHeader+n]; + pToRelease = 0; + pgnoOvfl = 0; + pBt = pPage->pBt; + + /* At this point variables should be set as follows: + ** + ** nPayload Total payload size in bytes + ** pPayload Begin writing payload here + ** spaceLeft Space available at pPayload. If nPayload>spaceLeft, + ** that means content must spill into overflow pages. + ** *pnSize Size of the local cell (not counting overflow pages) + ** pPrior Where to write the pgno of the first overflow page + ** + ** Use a call to btreeParseCellPtr() to verify that the values above + ** were computed correctly. + */ +#ifdef SQLITE_DEBUG + { + CellInfo info; + pPage->xParseCell(pPage, pCell, &info); + assert( nHeader==(int)(info.pPayload - pCell) ); + assert( info.nKey==pX->nKey ); + assert( *pnSize == info.nSize ); + assert( spaceLeft == info.nLocal ); + } +#endif + + /* Write the payload into the local Cell and any extra into overflow pages */ + while( 1 ){ + n = nPayload; + if( n>spaceLeft ) n = spaceLeft; + + /* If pToRelease is not zero than pPayload points into the data area + ** of pToRelease. Make sure pToRelease is still writeable. */ + assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) ); + + /* If pPayload is part of the data area of pPage, then make sure pPage + ** is still writeable */ + assert( pPayloadaData || pPayload>=&pPage->aData[pBt->pageSize] + || sqlite3PagerIswriteable(pPage->pDbPage) ); + + if( nSrc>=n ){ + memcpy(pPayload, pSrc, n); + }else if( nSrc>0 ){ + n = nSrc; + memcpy(pPayload, pSrc, n); + }else{ + memset(pPayload, 0, n); + } + nPayload -= n; + if( nPayload<=0 ) break; + pPayload += n; + pSrc += n; + nSrc -= n; + spaceLeft -= n; + if( spaceLeft==0 ){ + MemPage *pOvfl = 0; +#ifndef SQLITE_OMIT_AUTOVACUUM + Pgno pgnoPtrmap = pgnoOvfl; /* Overflow page pointer-map entry page */ + if( pBt->autoVacuum ){ + do{ + pgnoOvfl++; + } while( + PTRMAP_ISPAGE(pBt, pgnoOvfl) || pgnoOvfl==PENDING_BYTE_PAGE(pBt) + ); + } +#endif + rc = allocateBtreePage(pBt, &pOvfl, &pgnoOvfl, pgnoOvfl, 0); +#ifndef SQLITE_OMIT_AUTOVACUUM + /* If the database supports auto-vacuum, and the second or subsequent + ** overflow page is being allocated, add an entry to the pointer-map + ** for that page now. + ** + ** If this is the first overflow page, then write a partial entry + ** to the pointer-map. If we write nothing to this pointer-map slot, + ** then the optimistic overflow chain processing in clearCell() + ** may misinterpret the uninitialized values and delete the + ** wrong pages from the database. + */ + if( pBt->autoVacuum && rc==SQLITE_OK ){ + u8 eType = (pgnoPtrmap?PTRMAP_OVERFLOW2:PTRMAP_OVERFLOW1); + ptrmapPut(pBt, pgnoOvfl, eType, pgnoPtrmap, &rc); + if( rc ){ + releasePage(pOvfl); + } + } +#endif + if( rc ){ + releasePage(pToRelease); + return rc; + } + + /* If pToRelease is not zero than pPrior points into the data area + ** of pToRelease. Make sure pToRelease is still writeable. */ + assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) ); + + /* If pPrior is part of the data area of pPage, then make sure pPage + ** is still writeable */ + assert( pPrioraData || pPrior>=&pPage->aData[pBt->pageSize] + || sqlite3PagerIswriteable(pPage->pDbPage) ); + + put4byte(pPrior, pgnoOvfl); + releasePage(pToRelease); + pToRelease = pOvfl; + pPrior = pOvfl->aData; + put4byte(pPrior, 0); + pPayload = &pOvfl->aData[4]; + spaceLeft = pBt->usableSize - 4; + } + } + releasePage(pToRelease); + return SQLITE_OK; +} + +/* +** Remove the i-th cell from pPage. This routine effects pPage only. +** The cell content is not freed or deallocated. It is assumed that +** the cell content has been copied someplace else. This routine just +** removes the reference to the cell from pPage. +** +** "sz" must be the number of bytes in the cell. +*/ +static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){ + u32 pc; /* Offset to cell content of cell being deleted */ + u8 *data; /* pPage->aData */ + u8 *ptr; /* Used to move bytes around within data[] */ + int rc; /* The return code */ + int hdr; /* Beginning of the header. 0 most pages. 100 page 1 */ + + if( *pRC ) return; + assert( idx>=0 ); + assert( idxnCell ); + assert( CORRUPT_DB || sz==cellSize(pPage, idx) ); + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( pPage->nFree>=0 ); + data = pPage->aData; + ptr = &pPage->aCellIdx[2*idx]; + assert( pPage->pBt->usableSize > (u32)(ptr-data) ); + pc = get2byte(ptr); + hdr = pPage->hdrOffset; + testcase( pc==(u32)get2byte(&data[hdr+5]) ); + testcase( pc+sz==pPage->pBt->usableSize ); + if( pc+sz > pPage->pBt->usableSize ){ + *pRC = SQLITE_CORRUPT_BKPT; + return; + } + rc = freeSpace(pPage, pc, sz); + if( rc ){ + *pRC = rc; + return; + } + pPage->nCell--; + if( pPage->nCell==0 ){ + memset(&data[hdr+1], 0, 4); + data[hdr+7] = 0; + put2byte(&data[hdr+5], pPage->pBt->usableSize); + pPage->nFree = pPage->pBt->usableSize - pPage->hdrOffset + - pPage->childPtrSize - 8; + }else{ + memmove(ptr, ptr+2, 2*(pPage->nCell - idx)); + put2byte(&data[hdr+3], pPage->nCell); + pPage->nFree += 2; + } +} + +/* +** Insert a new cell on pPage at cell index "i". pCell points to the +** content of the cell. +** +** If the cell content will fit on the page, then put it there. If it +** will not fit, then make a copy of the cell content into pTemp if +** pTemp is not null. Regardless of pTemp, allocate a new entry +** in pPage->apOvfl[] and make it point to the cell content (either +** in pTemp or the original pCell) and also record its index. +** Allocating a new entry in pPage->aCell[] implies that +** pPage->nOverflow is incremented. +** +** The insertCellFast() routine below works exactly the same as +** insertCell() except that it lacks the pTemp and iChild parameters +** which are assumed zero. Other than that, the two routines are the +** same. +** +** Fixes or enhancements to this routine should be reflected in +** insertCellFast()! +*/ +static int insertCell( + MemPage *pPage, /* Page into which we are copying */ + int i, /* New cell becomes the i-th cell of the page */ + u8 *pCell, /* Content of the new cell */ + int sz, /* Bytes of content in pCell */ + u8 *pTemp, /* Temp storage space for pCell, if needed */ + Pgno iChild /* If non-zero, replace first 4 bytes with this value */ +){ + int idx = 0; /* Where to write new cell content in data[] */ + int j; /* Loop counter */ + u8 *data; /* The content of the whole page */ + u8 *pIns; /* The point in pPage->aCellIdx[] where no cell inserted */ + + assert( i>=0 && i<=pPage->nCell+pPage->nOverflow ); + assert( MX_CELL(pPage->pBt)<=10921 ); + assert( pPage->nCell<=MX_CELL(pPage->pBt) || CORRUPT_DB ); + assert( pPage->nOverflow<=ArraySize(pPage->apOvfl) ); + assert( ArraySize(pPage->apOvfl)==ArraySize(pPage->aiOvfl) ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( sz==pPage->xCellSize(pPage, pCell) || CORRUPT_DB ); + assert( pPage->nFree>=0 ); + assert( iChild>0 ); + if( pPage->nOverflow || sz+2>pPage->nFree ){ + if( pTemp ){ + memcpy(pTemp, pCell, sz); + pCell = pTemp; + } + put4byte(pCell, iChild); + j = pPage->nOverflow++; + /* Comparison against ArraySize-1 since we hold back one extra slot + ** as a contingency. In other words, never need more than 3 overflow + ** slots but 4 are allocated, just to be safe. */ + assert( j < ArraySize(pPage->apOvfl)-1 ); + pPage->apOvfl[j] = pCell; + pPage->aiOvfl[j] = (u16)i; + + /* When multiple overflows occur, they are always sequential and in + ** sorted order. This invariants arise because multiple overflows can + ** only occur when inserting divider cells into the parent page during + ** balancing, and the dividers are adjacent and sorted. + */ + assert( j==0 || pPage->aiOvfl[j-1]<(u16)i ); /* Overflows in sorted order */ + assert( j==0 || i==pPage->aiOvfl[j-1]+1 ); /* Overflows are sequential */ + }else{ + int rc = sqlite3PagerWrite(pPage->pDbPage); + if( NEVER(rc!=SQLITE_OK) ){ + return rc; + } + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + data = pPage->aData; + assert( &data[pPage->cellOffset]==pPage->aCellIdx ); + rc = allocateSpace(pPage, sz, &idx); + if( rc ){ return rc; } + /* The allocateSpace() routine guarantees the following properties + ** if it returns successfully */ + assert( idx >= 0 ); + assert( idx >= pPage->cellOffset+2*pPage->nCell+2 || CORRUPT_DB ); + assert( idx+sz <= (int)pPage->pBt->usableSize ); + pPage->nFree -= (u16)(2 + sz); + /* In a corrupt database where an entry in the cell index section of + ** a btree page has a value of 3 or less, the pCell value might point + ** as many as 4 bytes in front of the start of the aData buffer for + ** the source page. Make sure this does not cause problems by not + ** reading the first 4 bytes */ + memcpy(&data[idx+4], pCell+4, sz-4); + put4byte(&data[idx], iChild); + pIns = pPage->aCellIdx + i*2; + memmove(pIns+2, pIns, 2*(pPage->nCell - i)); + put2byte(pIns, idx); + pPage->nCell++; + /* increment the cell count */ + if( (++data[pPage->hdrOffset+4])==0 ) data[pPage->hdrOffset+3]++; + assert( get2byte(&data[pPage->hdrOffset+3])==pPage->nCell || CORRUPT_DB ); +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pPage->pBt->autoVacuum ){ + int rc2 = SQLITE_OK; + /* The cell may contain a pointer to an overflow page. If so, write + ** the entry for the overflow page into the pointer map. + */ + ptrmapPutOvflPtr(pPage, pPage, pCell, &rc2); + if( rc2 ) return rc2; + } +#endif + } + return SQLITE_OK; +} + +/* +** This variant of insertCell() assumes that the pTemp and iChild +** parameters are both zero. Use this variant in sqlite3BtreeInsert() +** for performance improvement, and also so that this variant is only +** called from that one place, and is thus inlined, and thus runs must +** faster. +** +** Fixes or enhancements to this routine should be reflected into +** the insertCell() routine. +*/ +static int insertCellFast( + MemPage *pPage, /* Page into which we are copying */ + int i, /* New cell becomes the i-th cell of the page */ + u8 *pCell, /* Content of the new cell */ + int sz /* Bytes of content in pCell */ +){ + int idx = 0; /* Where to write new cell content in data[] */ + int j; /* Loop counter */ + u8 *data; /* The content of the whole page */ + u8 *pIns; /* The point in pPage->aCellIdx[] where no cell inserted */ + + assert( i>=0 && i<=pPage->nCell+pPage->nOverflow ); + assert( MX_CELL(pPage->pBt)<=10921 ); + assert( pPage->nCell<=MX_CELL(pPage->pBt) || CORRUPT_DB ); + assert( pPage->nOverflow<=ArraySize(pPage->apOvfl) ); + assert( ArraySize(pPage->apOvfl)==ArraySize(pPage->aiOvfl) ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( sz==pPage->xCellSize(pPage, pCell) || CORRUPT_DB ); + assert( pPage->nFree>=0 ); + assert( pPage->nOverflow==0 ); + if( sz+2>pPage->nFree ){ + j = pPage->nOverflow++; + /* Comparison against ArraySize-1 since we hold back one extra slot + ** as a contingency. In other words, never need more than 3 overflow + ** slots but 4 are allocated, just to be safe. */ + assert( j < ArraySize(pPage->apOvfl)-1 ); + pPage->apOvfl[j] = pCell; + pPage->aiOvfl[j] = (u16)i; + + /* When multiple overflows occur, they are always sequential and in + ** sorted order. This invariants arise because multiple overflows can + ** only occur when inserting divider cells into the parent page during + ** balancing, and the dividers are adjacent and sorted. + */ + assert( j==0 || pPage->aiOvfl[j-1]<(u16)i ); /* Overflows in sorted order */ + assert( j==0 || i==pPage->aiOvfl[j-1]+1 ); /* Overflows are sequential */ + }else{ + int rc = sqlite3PagerWrite(pPage->pDbPage); + if( rc!=SQLITE_OK ){ + return rc; + } + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + data = pPage->aData; + assert( &data[pPage->cellOffset]==pPage->aCellIdx ); + rc = allocateSpace(pPage, sz, &idx); + if( rc ){ return rc; } + /* The allocateSpace() routine guarantees the following properties + ** if it returns successfully */ + assert( idx >= 0 ); + assert( idx >= pPage->cellOffset+2*pPage->nCell+2 || CORRUPT_DB ); + assert( idx+sz <= (int)pPage->pBt->usableSize ); + pPage->nFree -= (u16)(2 + sz); + memcpy(&data[idx], pCell, sz); + pIns = pPage->aCellIdx + i*2; + memmove(pIns+2, pIns, 2*(pPage->nCell - i)); + put2byte(pIns, idx); + pPage->nCell++; + /* increment the cell count */ + if( (++data[pPage->hdrOffset+4])==0 ) data[pPage->hdrOffset+3]++; + assert( get2byte(&data[pPage->hdrOffset+3])==pPage->nCell || CORRUPT_DB ); +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pPage->pBt->autoVacuum ){ + int rc2 = SQLITE_OK; + /* The cell may contain a pointer to an overflow page. If so, write + ** the entry for the overflow page into the pointer map. + */ + ptrmapPutOvflPtr(pPage, pPage, pCell, &rc2); + if( rc2 ) return rc2; + } +#endif + } + return SQLITE_OK; +} + +/* +** The following parameters determine how many adjacent pages get involved +** in a balancing operation. NN is the number of neighbors on either side +** of the page that participate in the balancing operation. NB is the +** total number of pages that participate, including the target page and +** NN neighbors on either side. +** +** The minimum value of NN is 1 (of course). Increasing NN above 1 +** (to 2 or 3) gives a modest improvement in SELECT and DELETE performance +** in exchange for a larger degradation in INSERT and UPDATE performance. +** The value of NN appears to give the best results overall. +** +** (Later:) The description above makes it seem as if these values are +** tunable - as if you could change them and recompile and it would all work. +** But that is unlikely. NB has been 3 since the inception of SQLite and +** we have never tested any other value. +*/ +#define NN 1 /* Number of neighbors on either side of pPage */ +#define NB 3 /* (NN*2+1): Total pages involved in the balance */ + +/* +** A CellArray object contains a cache of pointers and sizes for a +** consecutive sequence of cells that might be held on multiple pages. +** +** The cells in this array are the divider cell or cells from the pParent +** page plus up to three child pages. There are a total of nCell cells. +** +** pRef is a pointer to one of the pages that contributes cells. This is +** used to access information such as MemPage.intKey and MemPage.pBt->pageSize +** which should be common to all pages that contribute cells to this array. +** +** apCell[] and szCell[] hold, respectively, pointers to the start of each +** cell and the size of each cell. Some of the apCell[] pointers might refer +** to overflow cells. In other words, some apCel[] pointers might not point +** to content area of the pages. +** +** A szCell[] of zero means the size of that cell has not yet been computed. +** +** The cells come from as many as four different pages: +** +** ----------- +** | Parent | +** ----------- +** / | \ +** / | \ +** --------- --------- --------- +** |Child-1| |Child-2| |Child-3| +** --------- --------- --------- +** +** The order of cells is in the array is for an index btree is: +** +** 1. All cells from Child-1 in order +** 2. The first divider cell from Parent +** 3. All cells from Child-2 in order +** 4. The second divider cell from Parent +** 5. All cells from Child-3 in order +** +** For a table-btree (with rowids) the items 2 and 4 are empty because +** content exists only in leaves and there are no divider cells. +** +** For an index btree, the apEnd[] array holds pointer to the end of page +** for Child-1, the Parent, Child-2, the Parent (again), and Child-3, +** respectively. The ixNx[] array holds the number of cells contained in +** each of these 5 stages, and all stages to the left. Hence: +** +** ixNx[0] = Number of cells in Child-1. +** ixNx[1] = Number of cells in Child-1 plus 1 for first divider. +** ixNx[2] = Number of cells in Child-1 and Child-2 + 1 for 1st divider. +** ixNx[3] = Number of cells in Child-1 and Child-2 + both divider cells +** ixNx[4] = Total number of cells. +** +** For a table-btree, the concept is similar, except only apEnd[0]..apEnd[2] +** are used and they point to the leaf pages only, and the ixNx value are: +** +** ixNx[0] = Number of cells in Child-1. +** ixNx[1] = Number of cells in Child-1 and Child-2. +** ixNx[2] = Total number of cells. +** +** Sometimes when deleting, a child page can have zero cells. In those +** cases, ixNx[] entries with higher indexes, and the corresponding apEnd[] +** entries, shift down. The end result is that each ixNx[] entry should +** be larger than the previous +*/ +typedef struct CellArray CellArray; +struct CellArray { + int nCell; /* Number of cells in apCell[] */ + MemPage *pRef; /* Reference page */ + u8 **apCell; /* All cells begin balanced */ + u16 *szCell; /* Local size of all cells in apCell[] */ + u8 *apEnd[NB*2]; /* MemPage.aDataEnd values */ + int ixNx[NB*2]; /* Index of at which we move to the next apEnd[] */ +}; + +/* +** Make sure the cell sizes at idx, idx+1, ..., idx+N-1 have been +** computed. +*/ +static void populateCellCache(CellArray *p, int idx, int N){ + MemPage *pRef = p->pRef; + u16 *szCell = p->szCell; + assert( idx>=0 && idx+N<=p->nCell ); + while( N>0 ){ + assert( p->apCell[idx]!=0 ); + if( szCell[idx]==0 ){ + szCell[idx] = pRef->xCellSize(pRef, p->apCell[idx]); + }else{ + assert( CORRUPT_DB || + szCell[idx]==pRef->xCellSize(pRef, p->apCell[idx]) ); + } + idx++; + N--; + } +} + +/* +** Return the size of the Nth element of the cell array +*/ +static SQLITE_NOINLINE u16 computeCellSize(CellArray *p, int N){ + assert( N>=0 && NnCell ); + assert( p->szCell[N]==0 ); + p->szCell[N] = p->pRef->xCellSize(p->pRef, p->apCell[N]); + return p->szCell[N]; +} +static u16 cachedCellSize(CellArray *p, int N){ + assert( N>=0 && NnCell ); + if( p->szCell[N] ) return p->szCell[N]; + return computeCellSize(p, N); +} + +/* +** Array apCell[] contains pointers to nCell b-tree page cells. The +** szCell[] array contains the size in bytes of each cell. This function +** replaces the current contents of page pPg with the contents of the cell +** array. +** +** Some of the cells in apCell[] may currently be stored in pPg. This +** function works around problems caused by this by making a copy of any +** such cells before overwriting the page data. +** +** The MemPage.nFree field is invalidated by this function. It is the +** responsibility of the caller to set it correctly. +*/ +static int rebuildPage( + CellArray *pCArray, /* Content to be added to page pPg */ + int iFirst, /* First cell in pCArray to use */ + int nCell, /* Final number of cells on page */ + MemPage *pPg /* The page to be reconstructed */ +){ + const int hdr = pPg->hdrOffset; /* Offset of header on pPg */ + u8 * const aData = pPg->aData; /* Pointer to data for pPg */ + const int usableSize = pPg->pBt->usableSize; + u8 * const pEnd = &aData[usableSize]; + int i = iFirst; /* Which cell to copy from pCArray*/ + u32 j; /* Start of cell content area */ + int iEnd = i+nCell; /* Loop terminator */ + u8 *pCellptr = pPg->aCellIdx; + u8 *pTmp = sqlite3PagerTempSpace(pPg->pBt->pPager); + u8 *pData; + int k; /* Current slot in pCArray->apEnd[] */ + u8 *pSrcEnd; /* Current pCArray->apEnd[k] value */ + + assert( nCell>0 ); + assert( i(u32)usableSize ){ j = 0; } + memcpy(&pTmp[j], &aData[j], usableSize - j); + + assert( pCArray->ixNx[NB*2-1]>i ); + for(k=0; pCArray->ixNx[k]<=i; k++){} + pSrcEnd = pCArray->apEnd[k]; + + pData = pEnd; + while( 1/*exit by break*/ ){ + u8 *pCell = pCArray->apCell[i]; + u16 sz = pCArray->szCell[i]; + assert( sz>0 ); + if( SQLITE_WITHIN(pCell,aData+j,pEnd) ){ + if( ((uptr)(pCell+sz))>(uptr)pEnd ) return SQLITE_CORRUPT_BKPT; + pCell = &pTmp[pCell - aData]; + }else if( (uptr)(pCell+sz)>(uptr)pSrcEnd + && (uptr)(pCell)<(uptr)pSrcEnd + ){ + return SQLITE_CORRUPT_BKPT; + } + + pData -= sz; + put2byte(pCellptr, (pData - aData)); + pCellptr += 2; + if( pData < pCellptr ) return SQLITE_CORRUPT_BKPT; + memmove(pData, pCell, sz); + assert( sz==pPg->xCellSize(pPg, pCell) || CORRUPT_DB ); + i++; + if( i>=iEnd ) break; + if( pCArray->ixNx[k]<=i ){ + k++; + pSrcEnd = pCArray->apEnd[k]; + } + } + + /* The pPg->nFree field is now set incorrectly. The caller will fix it. */ + assert( nCell < 10922 ); + pPg->nCell = (u16)nCell; + pPg->nOverflow = 0; + + put2byte(&aData[hdr+1], 0); + put2byte(&aData[hdr+3], pPg->nCell); + put2byte(&aData[hdr+5], pData - aData); + aData[hdr+7] = 0x00; + return SQLITE_OK; +} + +/* +** The pCArray objects contains pointers to b-tree cells and the cell sizes. +** This function attempts to add the cells stored in the array to page pPg. +** If it cannot (because the page needs to be defragmented before the cells +** will fit), non-zero is returned. Otherwise, if the cells are added +** successfully, zero is returned. +** +** Argument pCellptr points to the first entry in the cell-pointer array +** (part of page pPg) to populate. After cell apCell[0] is written to the +** page body, a 16-bit offset is written to pCellptr. And so on, for each +** cell in the array. It is the responsibility of the caller to ensure +** that it is safe to overwrite this part of the cell-pointer array. +** +** When this function is called, *ppData points to the start of the +** content area on page pPg. If the size of the content area is extended, +** *ppData is updated to point to the new start of the content area +** before returning. +** +** Finally, argument pBegin points to the byte immediately following the +** end of the space required by this page for the cell-pointer area (for +** all cells - not just those inserted by the current call). If the content +** area must be extended to before this point in order to accommodate all +** cells in apCell[], then the cells do not fit and non-zero is returned. +*/ +static int pageInsertArray( + MemPage *pPg, /* Page to add cells to */ + u8 *pBegin, /* End of cell-pointer array */ + u8 **ppData, /* IN/OUT: Page content-area pointer */ + u8 *pCellptr, /* Pointer to cell-pointer area */ + int iFirst, /* Index of first cell to add */ + int nCell, /* Number of cells to add to pPg */ + CellArray *pCArray /* Array of cells */ +){ + int i = iFirst; /* Loop counter - cell index to insert */ + u8 *aData = pPg->aData; /* Complete page */ + u8 *pData = *ppData; /* Content area. A subset of aData[] */ + int iEnd = iFirst + nCell; /* End of loop. One past last cell to ins */ + int k; /* Current slot in pCArray->apEnd[] */ + u8 *pEnd; /* Maximum extent of cell data */ + assert( CORRUPT_DB || pPg->hdrOffset==0 ); /* Never called on page 1 */ + if( iEnd<=iFirst ) return 0; + assert( pCArray->ixNx[NB*2-1]>i ); + for(k=0; pCArray->ixNx[k]<=i ; k++){} + pEnd = pCArray->apEnd[k]; + while( 1 /*Exit by break*/ ){ + int sz, rc; + u8 *pSlot; + assert( pCArray->szCell[i]!=0 ); + sz = pCArray->szCell[i]; + if( (aData[1]==0 && aData[2]==0) || (pSlot = pageFindSlot(pPg,sz,&rc))==0 ){ + if( (pData - pBegin)apCell[i] will never overlap on a well-formed + ** database. But they might for a corrupt database. Hence use memmove() + ** since memcpy() sends SIGABORT with overlapping buffers on OpenBSD */ + assert( (pSlot+sz)<=pCArray->apCell[i] + || pSlot>=(pCArray->apCell[i]+sz) + || CORRUPT_DB ); + if( (uptr)(pCArray->apCell[i]+sz)>(uptr)pEnd + && (uptr)(pCArray->apCell[i])<(uptr)pEnd + ){ + assert( CORRUPT_DB ); + (void)SQLITE_CORRUPT_BKPT; + return 1; + } + memmove(pSlot, pCArray->apCell[i], sz); + put2byte(pCellptr, (pSlot - aData)); + pCellptr += 2; + i++; + if( i>=iEnd ) break; + if( pCArray->ixNx[k]<=i ){ + k++; + pEnd = pCArray->apEnd[k]; + } + } + *ppData = pData; + return 0; +} + +/* +** The pCArray object contains pointers to b-tree cells and their sizes. +** +** This function adds the space associated with each cell in the array +** that is currently stored within the body of pPg to the pPg free-list. +** The cell-pointers and other fields of the page are not updated. +** +** This function returns the total number of cells added to the free-list. +*/ +static int pageFreeArray( + MemPage *pPg, /* Page to edit */ + int iFirst, /* First cell to delete */ + int nCell, /* Cells to delete */ + CellArray *pCArray /* Array of cells */ +){ + u8 * const aData = pPg->aData; + u8 * const pEnd = &aData[pPg->pBt->usableSize]; + u8 * const pStart = &aData[pPg->hdrOffset + 8 + pPg->childPtrSize]; + int nRet = 0; + int i, j; + int iEnd = iFirst + nCell; + int nFree = 0; + int aOfst[10]; + int aAfter[10]; + + for(i=iFirst; iapCell[i]; + if( SQLITE_WITHIN(pCell, pStart, pEnd) ){ + int sz; + int iAfter; + int iOfst; + /* No need to use cachedCellSize() here. The sizes of all cells that + ** are to be freed have already been computing while deciding which + ** cells need freeing */ + sz = pCArray->szCell[i]; assert( sz>0 ); + iOfst = (u16)(pCell - aData); + iAfter = iOfst+sz; + for(j=0; j=nFree ){ + if( nFree>=(int)(sizeof(aOfst)/sizeof(aOfst[0])) ){ + for(j=0; jpEnd ) return 0; + nFree++; + } + nRet++; + } + } + for(j=0; jnCell cells starting with +** pCArray->apCell[iOld]. After balancing, this page should hold nNew cells +** starting at apCell[iNew]. +** +** This routine makes the necessary adjustments to pPg so that it contains +** the correct cells after being balanced. +** +** The pPg->nFree field is invalid when this function returns. It is the +** responsibility of the caller to set it correctly. +*/ +static int editPage( + MemPage *pPg, /* Edit this page */ + int iOld, /* Index of first cell currently on page */ + int iNew, /* Index of new first cell on page */ + int nNew, /* Final number of cells on page */ + CellArray *pCArray /* Array of cells and sizes */ +){ + u8 * const aData = pPg->aData; + const int hdr = pPg->hdrOffset; + u8 *pBegin = &pPg->aCellIdx[nNew * 2]; + int nCell = pPg->nCell; /* Cells stored on pPg */ + u8 *pData; + u8 *pCellptr; + int i; + int iOldEnd = iOld + pPg->nCell + pPg->nOverflow; + int iNewEnd = iNew + nNew; + +#ifdef SQLITE_DEBUG + u8 *pTmp = sqlite3PagerTempSpace(pPg->pBt->pPager); + memcpy(pTmp, aData, pPg->pBt->usableSize); +#endif + + /* Remove cells from the start and end of the page */ + assert( nCell>=0 ); + if( iOldnCell) ) return SQLITE_CORRUPT_BKPT; + memmove(pPg->aCellIdx, &pPg->aCellIdx[nShift*2], nCell*2); + nCell -= nShift; + } + if( iNewEnd < iOldEnd ){ + int nTail = pageFreeArray(pPg, iNewEnd, iOldEnd - iNewEnd, pCArray); + assert( nCell>=nTail ); + nCell -= nTail; + } + + pData = &aData[get2byte(&aData[hdr+5])]; + if( pDatapPg->aDataEnd) ) goto editpage_fail; + + /* Add cells to the start of the page */ + if( iNew=0 ); + pCellptr = pPg->aCellIdx; + memmove(&pCellptr[nAdd*2], pCellptr, nCell*2); + if( pageInsertArray( + pPg, pBegin, &pData, pCellptr, + iNew, nAdd, pCArray + ) ) goto editpage_fail; + nCell += nAdd; + } + + /* Add any overflow cells */ + for(i=0; inOverflow; i++){ + int iCell = (iOld + pPg->aiOvfl[i]) - iNew; + if( iCell>=0 && iCellaCellIdx[iCell * 2]; + if( nCell>iCell ){ + memmove(&pCellptr[2], pCellptr, (nCell - iCell) * 2); + } + nCell++; + cachedCellSize(pCArray, iCell+iNew); + if( pageInsertArray( + pPg, pBegin, &pData, pCellptr, + iCell+iNew, 1, pCArray + ) ) goto editpage_fail; + } + } + + /* Append cells to the end of the page */ + assert( nCell>=0 ); + pCellptr = &pPg->aCellIdx[nCell*2]; + if( pageInsertArray( + pPg, pBegin, &pData, pCellptr, + iNew+nCell, nNew-nCell, pCArray + ) + ){ + goto editpage_fail; + } + + assert( nNew < 10922 ); + pPg->nCell = (u16)nNew; + pPg->nOverflow = 0; + + put2byte(&aData[hdr+3], pPg->nCell); + put2byte(&aData[hdr+5], pData - aData); + +#ifdef SQLITE_DEBUG + for(i=0; iapCell[i+iNew]; + int iOff = get2byteAligned(&pPg->aCellIdx[i*2]); + if( SQLITE_WITHIN(pCell, aData, &aData[pPg->pBt->usableSize]) ){ + pCell = &pTmp[pCell - aData]; + } + assert( 0==memcmp(pCell, &aData[iOff], + pCArray->pRef->xCellSize(pCArray->pRef, pCArray->apCell[i+iNew])) ); + } +#endif + + return SQLITE_OK; + editpage_fail: + /* Unable to edit this page. Rebuild it from scratch instead. */ + if( nNew<1 ) return SQLITE_CORRUPT_BKPT; + populateCellCache(pCArray, iNew, nNew); + return rebuildPage(pCArray, iNew, nNew, pPg); +} + + +#ifndef SQLITE_OMIT_QUICKBALANCE +/* +** This version of balance() handles the common special case where +** a new entry is being inserted on the extreme right-end of the +** tree, in other words, when the new entry will become the largest +** entry in the tree. +** +** Instead of trying to balance the 3 right-most leaf pages, just add +** a new page to the right-hand side and put the one new entry in +** that page. This leaves the right side of the tree somewhat +** unbalanced. But odds are that we will be inserting new entries +** at the end soon afterwards so the nearly empty page will quickly +** fill up. On average. +** +** pPage is the leaf page which is the right-most page in the tree. +** pParent is its parent. pPage must have a single overflow entry +** which is also the right-most entry on the page. +** +** The pSpace buffer is used to store a temporary copy of the divider +** cell that will be inserted into pParent. Such a cell consists of a 4 +** byte page number followed by a variable length integer. In other +** words, at most 13 bytes. Hence the pSpace buffer must be at +** least 13 bytes in size. +*/ +static int balance_quick(MemPage *pParent, MemPage *pPage, u8 *pSpace){ + BtShared *const pBt = pPage->pBt; /* B-Tree Database */ + MemPage *pNew; /* Newly allocated page */ + int rc; /* Return Code */ + Pgno pgnoNew; /* Page number of pNew */ + + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( sqlite3PagerIswriteable(pParent->pDbPage) ); + assert( pPage->nOverflow==1 ); + + if( pPage->nCell==0 ) return SQLITE_CORRUPT_BKPT; /* dbfuzz001.test */ + assert( pPage->nFree>=0 ); + assert( pParent->nFree>=0 ); + + /* Allocate a new page. This page will become the right-sibling of + ** pPage. Make the parent page writable, so that the new divider cell + ** may be inserted. If both these operations are successful, proceed. + */ + rc = allocateBtreePage(pBt, &pNew, &pgnoNew, 0, 0); + + if( rc==SQLITE_OK ){ + + u8 *pOut = &pSpace[4]; + u8 *pCell = pPage->apOvfl[0]; + u16 szCell = pPage->xCellSize(pPage, pCell); + u8 *pStop; + CellArray b; + + assert( sqlite3PagerIswriteable(pNew->pDbPage) ); + assert( CORRUPT_DB || pPage->aData[0]==(PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF) ); + zeroPage(pNew, PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF); + b.nCell = 1; + b.pRef = pPage; + b.apCell = &pCell; + b.szCell = &szCell; + b.apEnd[0] = pPage->aDataEnd; + b.ixNx[0] = 2; + b.ixNx[NB*2-1] = 0x7fffffff; + rc = rebuildPage(&b, 0, 1, pNew); + if( NEVER(rc) ){ + releasePage(pNew); + return rc; + } + pNew->nFree = pBt->usableSize - pNew->cellOffset - 2 - szCell; + + /* If this is an auto-vacuum database, update the pointer map + ** with entries for the new page, and any pointer from the + ** cell on the page to an overflow page. If either of these + ** operations fails, the return code is set, but the contents + ** of the parent page are still manipulated by the code below. + ** That is Ok, at this point the parent page is guaranteed to + ** be marked as dirty. Returning an error code will cause a + ** rollback, undoing any changes made to the parent page. + */ + if( ISAUTOVACUUM(pBt) ){ + ptrmapPut(pBt, pgnoNew, PTRMAP_BTREE, pParent->pgno, &rc); + if( szCell>pNew->minLocal ){ + ptrmapPutOvflPtr(pNew, pNew, pCell, &rc); + } + } + + /* Create a divider cell to insert into pParent. The divider cell + ** consists of a 4-byte page number (the page number of pPage) and + ** a variable length key value (which must be the same value as the + ** largest key on pPage). + ** + ** To find the largest key value on pPage, first find the right-most + ** cell on pPage. The first two fields of this cell are the + ** record-length (a variable length integer at most 32-bits in size) + ** and the key value (a variable length integer, may have any value). + ** The first of the while(...) loops below skips over the record-length + ** field. The second while(...) loop copies the key value from the + ** cell on pPage into the pSpace buffer. + */ + pCell = findCell(pPage, pPage->nCell-1); + pStop = &pCell[9]; + while( (*(pCell++)&0x80) && pCellnCell, pSpace, (int)(pOut-pSpace), + 0, pPage->pgno); + } + + /* Set the right-child pointer of pParent to point to the new page. */ + put4byte(&pParent->aData[pParent->hdrOffset+8], pgnoNew); + + /* Release the reference to the new page. */ + releasePage(pNew); + } + + return rc; +} +#endif /* SQLITE_OMIT_QUICKBALANCE */ + +#if 0 +/* +** This function does not contribute anything to the operation of SQLite. +** it is sometimes activated temporarily while debugging code responsible +** for setting pointer-map entries. +*/ +static int ptrmapCheckPages(MemPage **apPage, int nPage){ + int i, j; + for(i=0; ipBt; + assert( pPage->isInit ); + + for(j=0; jnCell; j++){ + CellInfo info; + u8 *z; + + z = findCell(pPage, j); + pPage->xParseCell(pPage, z, &info); + if( info.nLocalpgno && e==PTRMAP_OVERFLOW1 ); + } + if( !pPage->leaf ){ + Pgno child = get4byte(z); + ptrmapGet(pBt, child, &e, &n); + assert( n==pPage->pgno && e==PTRMAP_BTREE ); + } + } + if( !pPage->leaf ){ + Pgno child = get4byte(&pPage->aData[pPage->hdrOffset+8]); + ptrmapGet(pBt, child, &e, &n); + assert( n==pPage->pgno && e==PTRMAP_BTREE ); + } + } + return 1; +} +#endif + +/* +** This function is used to copy the contents of the b-tree node stored +** on page pFrom to page pTo. If page pFrom was not a leaf page, then +** the pointer-map entries for each child page are updated so that the +** parent page stored in the pointer map is page pTo. If pFrom contained +** any cells with overflow page pointers, then the corresponding pointer +** map entries are also updated so that the parent page is page pTo. +** +** If pFrom is currently carrying any overflow cells (entries in the +** MemPage.apOvfl[] array), they are not copied to pTo. +** +** Before returning, page pTo is reinitialized using btreeInitPage(). +** +** The performance of this function is not critical. It is only used by +** the balance_shallower() and balance_deeper() procedures, neither of +** which are called often under normal circumstances. +*/ +static void copyNodeContent(MemPage *pFrom, MemPage *pTo, int *pRC){ + if( (*pRC)==SQLITE_OK ){ + BtShared * const pBt = pFrom->pBt; + u8 * const aFrom = pFrom->aData; + u8 * const aTo = pTo->aData; + int const iFromHdr = pFrom->hdrOffset; + int const iToHdr = ((pTo->pgno==1) ? 100 : 0); + int rc; + int iData; + + + assert( pFrom->isInit ); + assert( pFrom->nFree>=iToHdr ); + assert( get2byte(&aFrom[iFromHdr+5]) <= (int)pBt->usableSize ); + + /* Copy the b-tree node content from page pFrom to page pTo. */ + iData = get2byte(&aFrom[iFromHdr+5]); + memcpy(&aTo[iData], &aFrom[iData], pBt->usableSize-iData); + memcpy(&aTo[iToHdr], &aFrom[iFromHdr], pFrom->cellOffset + 2*pFrom->nCell); + + /* Reinitialize page pTo so that the contents of the MemPage structure + ** match the new data. The initialization of pTo can actually fail under + ** fairly obscure circumstances, even though it is a copy of initialized + ** page pFrom. + */ + pTo->isInit = 0; + rc = btreeInitPage(pTo); + if( rc==SQLITE_OK ) rc = btreeComputeFreeSpace(pTo); + if( rc!=SQLITE_OK ){ + *pRC = rc; + return; + } + + /* If this is an auto-vacuum database, update the pointer-map entries + ** for any b-tree or overflow pages that pTo now contains the pointers to. + */ + if( ISAUTOVACUUM(pBt) ){ + *pRC = setChildPtrmaps(pTo); + } + } +} + +/* +** This routine redistributes cells on the iParentIdx'th child of pParent +** (hereafter "the page") and up to 2 siblings so that all pages have about the +** same amount of free space. Usually a single sibling on either side of the +** page are used in the balancing, though both siblings might come from one +** side if the page is the first or last child of its parent. If the page +** has fewer than 2 siblings (something which can only happen if the page +** is a root page or a child of a root page) then all available siblings +** participate in the balancing. +** +** The number of siblings of the page might be increased or decreased by +** one or two in an effort to keep pages nearly full but not over full. +** +** Note that when this routine is called, some of the cells on the page +** might not actually be stored in MemPage.aData[]. This can happen +** if the page is overfull. This routine ensures that all cells allocated +** to the page and its siblings fit into MemPage.aData[] before returning. +** +** In the course of balancing the page and its siblings, cells may be +** inserted into or removed from the parent page (pParent). Doing so +** may cause the parent page to become overfull or underfull. If this +** happens, it is the responsibility of the caller to invoke the correct +** balancing routine to fix this problem (see the balance() routine). +** +** If this routine fails for any reason, it might leave the database +** in a corrupted state. So if this routine fails, the database should +** be rolled back. +** +** The third argument to this function, aOvflSpace, is a pointer to a +** buffer big enough to hold one page. If while inserting cells into the parent +** page (pParent) the parent page becomes overfull, this buffer is +** used to store the parent's overflow cells. Because this function inserts +** a maximum of four divider cells into the parent page, and the maximum +** size of a cell stored within an internal node is always less than 1/4 +** of the page-size, the aOvflSpace[] buffer is guaranteed to be large +** enough for all overflow cells. +** +** If aOvflSpace is set to a null pointer, this function returns +** SQLITE_NOMEM. +*/ +static int balance_nonroot( + MemPage *pParent, /* Parent page of siblings being balanced */ + int iParentIdx, /* Index of "the page" in pParent */ + u8 *aOvflSpace, /* page-size bytes of space for parent ovfl */ + int isRoot, /* True if pParent is a root-page */ + int bBulk /* True if this call is part of a bulk load */ +){ + BtShared *pBt; /* The whole database */ + int nMaxCells = 0; /* Allocated size of apCell, szCell, aFrom. */ + int nNew = 0; /* Number of pages in apNew[] */ + int nOld; /* Number of pages in apOld[] */ + int i, j, k; /* Loop counters */ + int nxDiv; /* Next divider slot in pParent->aCell[] */ + int rc = SQLITE_OK; /* The return code */ + u16 leafCorrection; /* 4 if pPage is a leaf. 0 if not */ + int leafData; /* True if pPage is a leaf of a LEAFDATA tree */ + int usableSpace; /* Bytes in pPage beyond the header */ + int pageFlags; /* Value of pPage->aData[0] */ + int iSpace1 = 0; /* First unused byte of aSpace1[] */ + int iOvflSpace = 0; /* First unused byte of aOvflSpace[] */ + u64 szScratch; /* Size of scratch memory requested */ + MemPage *apOld[NB]; /* pPage and up to two siblings */ + MemPage *apNew[NB+2]; /* pPage and up to NB siblings after balancing */ + u8 *pRight; /* Location in parent of right-sibling pointer */ + u8 *apDiv[NB-1]; /* Divider cells in pParent */ + int cntNew[NB+2]; /* Index in b.paCell[] of cell after i-th page */ + int cntOld[NB+2]; /* Old index in b.apCell[] */ + int szNew[NB+2]; /* Combined size of cells placed on i-th page */ + u8 *aSpace1; /* Space for copies of dividers cells */ + Pgno pgno; /* Temp var to store a page number in */ + u8 abDone[NB+2]; /* True after i'th new page is populated */ + Pgno aPgno[NB+2]; /* Page numbers of new pages before shuffling */ + CellArray b; /* Parsed information on cells being balanced */ + + memset(abDone, 0, sizeof(abDone)); + assert( sizeof(b) - sizeof(b.ixNx) == offsetof(CellArray,ixNx) ); + memset(&b, 0, sizeof(b)-sizeof(b.ixNx[0])); + b.ixNx[NB*2-1] = 0x7fffffff; + pBt = pParent->pBt; + assert( sqlite3_mutex_held(pBt->mutex) ); + assert( sqlite3PagerIswriteable(pParent->pDbPage) ); + + /* At this point pParent may have at most one overflow cell. And if + ** this overflow cell is present, it must be the cell with + ** index iParentIdx. This scenario comes about when this function + ** is called (indirectly) from sqlite3BtreeDelete(). + */ + assert( pParent->nOverflow==0 || pParent->nOverflow==1 ); + assert( pParent->nOverflow==0 || pParent->aiOvfl[0]==iParentIdx ); + + if( !aOvflSpace ){ + return SQLITE_NOMEM_BKPT; + } + assert( pParent->nFree>=0 ); + + /* Find the sibling pages to balance. Also locate the cells in pParent + ** that divide the siblings. An attempt is made to find NN siblings on + ** either side of pPage. More siblings are taken from one side, however, + ** if there are fewer than NN siblings on the other side. If pParent + ** has NB or fewer children then all children of pParent are taken. + ** + ** This loop also drops the divider cells from the parent page. This + ** way, the remainder of the function does not have to deal with any + ** overflow cells in the parent page, since if any existed they will + ** have already been removed. + */ + i = pParent->nOverflow + pParent->nCell; + if( i<2 ){ + nxDiv = 0; + }else{ + assert( bBulk==0 || bBulk==1 ); + if( iParentIdx==0 ){ + nxDiv = 0; + }else if( iParentIdx==i ){ + nxDiv = i-2+bBulk; + }else{ + nxDiv = iParentIdx-1; + } + i = 2-bBulk; + } + nOld = i+1; + if( (i+nxDiv-pParent->nOverflow)==pParent->nCell ){ + pRight = &pParent->aData[pParent->hdrOffset+8]; + }else{ + pRight = findCell(pParent, i+nxDiv-pParent->nOverflow); + } + pgno = get4byte(pRight); + while( 1 ){ + if( rc==SQLITE_OK ){ + rc = getAndInitPage(pBt, pgno, &apOld[i], 0); + } + if( rc ){ + memset(apOld, 0, (i+1)*sizeof(MemPage*)); + goto balance_cleanup; + } + if( apOld[i]->nFree<0 ){ + rc = btreeComputeFreeSpace(apOld[i]); + if( rc ){ + memset(apOld, 0, (i)*sizeof(MemPage*)); + goto balance_cleanup; + } + } + nMaxCells += apOld[i]->nCell + ArraySize(pParent->apOvfl); + if( (i--)==0 ) break; + + if( pParent->nOverflow && i+nxDiv==pParent->aiOvfl[0] ){ + apDiv[i] = pParent->apOvfl[0]; + pgno = get4byte(apDiv[i]); + szNew[i] = pParent->xCellSize(pParent, apDiv[i]); + pParent->nOverflow = 0; + }else{ + apDiv[i] = findCell(pParent, i+nxDiv-pParent->nOverflow); + pgno = get4byte(apDiv[i]); + szNew[i] = pParent->xCellSize(pParent, apDiv[i]); + + /* Drop the cell from the parent page. apDiv[i] still points to + ** the cell within the parent, even though it has been dropped. + ** This is safe because dropping a cell only overwrites the first + ** four bytes of it, and this function does not need the first + ** four bytes of the divider cell. So the pointer is safe to use + ** later on. + ** + ** But not if we are in secure-delete mode. In secure-delete mode, + ** the dropCell() routine will overwrite the entire cell with zeroes. + ** In this case, temporarily copy the cell into the aOvflSpace[] + ** buffer. It will be copied out again as soon as the aSpace[] buffer + ** is allocated. */ + if( pBt->btsFlags & BTS_FAST_SECURE ){ + int iOff; + + /* If the following if() condition is not true, the db is corrupted. + ** The call to dropCell() below will detect this. */ + iOff = SQLITE_PTR_TO_INT(apDiv[i]) - SQLITE_PTR_TO_INT(pParent->aData); + if( (iOff+szNew[i])<=(int)pBt->usableSize ){ + memcpy(&aOvflSpace[iOff], apDiv[i], szNew[i]); + apDiv[i] = &aOvflSpace[apDiv[i]-pParent->aData]; + } + } + dropCell(pParent, i+nxDiv-pParent->nOverflow, szNew[i], &rc); + } + } + + /* Make nMaxCells a multiple of 4 in order to preserve 8-byte + ** alignment */ + nMaxCells = (nMaxCells + 3)&~3; + + /* + ** Allocate space for memory structures + */ + szScratch = + nMaxCells*sizeof(u8*) /* b.apCell */ + + nMaxCells*sizeof(u16) /* b.szCell */ + + pBt->pageSize; /* aSpace1 */ + + assert( szScratch<=7*(int)pBt->pageSize ); + b.apCell = sqlite3StackAllocRaw(0, szScratch ); + if( b.apCell==0 ){ + rc = SQLITE_NOMEM_BKPT; + goto balance_cleanup; + } + b.szCell = (u16*)&b.apCell[nMaxCells]; + aSpace1 = (u8*)&b.szCell[nMaxCells]; + assert( EIGHT_BYTE_ALIGNMENT(aSpace1) ); + + /* + ** Load pointers to all cells on sibling pages and the divider cells + ** into the local b.apCell[] array. Make copies of the divider cells + ** into space obtained from aSpace1[]. The divider cells have already + ** been removed from pParent. + ** + ** If the siblings are on leaf pages, then the child pointers of the + ** divider cells are stripped from the cells before they are copied + ** into aSpace1[]. In this way, all cells in b.apCell[] are without + ** child pointers. If siblings are not leaves, then all cell in + ** b.apCell[] include child pointers. Either way, all cells in b.apCell[] + ** are alike. + ** + ** leafCorrection: 4 if pPage is a leaf. 0 if pPage is not a leaf. + ** leafData: 1 if pPage holds key+data and pParent holds only keys. + */ + b.pRef = apOld[0]; + leafCorrection = b.pRef->leaf*4; + leafData = b.pRef->intKeyLeaf; + for(i=0; inCell; + u8 *aData = pOld->aData; + u16 maskPage = pOld->maskPage; + u8 *piCell = aData + pOld->cellOffset; + u8 *piEnd; + VVA_ONLY( int nCellAtStart = b.nCell; ) + + /* Verify that all sibling pages are of the same "type" (table-leaf, + ** table-interior, index-leaf, or index-interior). + */ + if( pOld->aData[0]!=apOld[0]->aData[0] ){ + rc = SQLITE_CORRUPT_PAGE(pOld); + goto balance_cleanup; + } + + /* Load b.apCell[] with pointers to all cells in pOld. If pOld + ** contains overflow cells, include them in the b.apCell[] array + ** in the correct spot. + ** + ** Note that when there are multiple overflow cells, it is always the + ** case that they are sequential and adjacent. This invariant arises + ** because multiple overflows can only occurs when inserting divider + ** cells into a parent on a prior balance, and divider cells are always + ** adjacent and are inserted in order. There is an assert() tagged + ** with "NOTE 1" in the overflow cell insertion loop to prove this + ** invariant. + ** + ** This must be done in advance. Once the balance starts, the cell + ** offset section of the btree page will be overwritten and we will no + ** long be able to find the cells if a pointer to each cell is not saved + ** first. + */ + memset(&b.szCell[b.nCell], 0, sizeof(b.szCell[0])*(limit+pOld->nOverflow)); + if( pOld->nOverflow>0 ){ + if( NEVER(limitaiOvfl[0]) ){ + rc = SQLITE_CORRUPT_PAGE(pOld); + goto balance_cleanup; + } + limit = pOld->aiOvfl[0]; + for(j=0; jnOverflow; k++){ + assert( k==0 || pOld->aiOvfl[k-1]+1==pOld->aiOvfl[k] );/* NOTE 1 */ + b.apCell[b.nCell] = pOld->apOvfl[k]; + b.nCell++; + } + } + piEnd = aData + pOld->cellOffset + 2*pOld->nCell; + while( piCellnCell+pOld->nOverflow) ); + + cntOld[i] = b.nCell; + if( imaxLocal+23 ); + assert( iSpace1 <= (int)pBt->pageSize ); + memcpy(pTemp, apDiv[i], sz); + b.apCell[b.nCell] = pTemp+leafCorrection; + assert( leafCorrection==0 || leafCorrection==4 ); + b.szCell[b.nCell] = b.szCell[b.nCell] - leafCorrection; + if( !pOld->leaf ){ + assert( leafCorrection==0 ); + assert( pOld->hdrOffset==0 || CORRUPT_DB ); + /* The right pointer of the child page pOld becomes the left + ** pointer of the divider cell */ + memcpy(b.apCell[b.nCell], &pOld->aData[8], 4); + }else{ + assert( leafCorrection==4 ); + while( b.szCell[b.nCell]<4 ){ + /* Do not allow any cells smaller than 4 bytes. If a smaller cell + ** does exist, pad it with 0x00 bytes. */ + assert( b.szCell[b.nCell]==3 || CORRUPT_DB ); + assert( b.apCell[b.nCell]==&aSpace1[iSpace1-3] || CORRUPT_DB ); + aSpace1[iSpace1++] = 0x00; + b.szCell[b.nCell]++; + } + } + b.nCell++; + } + } + + /* + ** Figure out the number of pages needed to hold all b.nCell cells. + ** Store this number in "k". Also compute szNew[] which is the total + ** size of all cells on the i-th page and cntNew[] which is the index + ** in b.apCell[] of the cell that divides page i from page i+1. + ** cntNew[k] should equal b.nCell. + ** + ** Values computed by this block: + ** + ** k: The total number of sibling pages + ** szNew[i]: Spaced used on the i-th sibling page. + ** cntNew[i]: Index in b.apCell[] and b.szCell[] for the first cell to + ** the right of the i-th sibling page. + ** usableSpace: Number of bytes of space available on each sibling. + ** + */ + usableSpace = pBt->usableSize - 12 + leafCorrection; + for(i=k=0; iaDataEnd; + b.ixNx[k] = cntOld[i]; + if( k && b.ixNx[k]==b.ixNx[k-1] ){ + k--; /* Omit b.ixNx[] entry for child pages with no cells */ + } + if( !leafData ){ + k++; + b.apEnd[k] = pParent->aDataEnd; + b.ixNx[k] = cntOld[i]+1; + } + assert( p->nFree>=0 ); + szNew[i] = usableSpace - p->nFree; + for(j=0; jnOverflow; j++){ + szNew[i] += 2 + p->xCellSize(p, p->apOvfl[j]); + } + cntNew[i] = cntOld[i]; + } + k = nOld; + for(i=0; iusableSpace ){ + if( i+1>=k ){ + k = i+2; + if( k>NB+2 ){ rc = SQLITE_CORRUPT_BKPT; goto balance_cleanup; } + szNew[k-1] = 0; + cntNew[k-1] = b.nCell; + } + sz = 2 + cachedCellSize(&b, cntNew[i]-1); + szNew[i] -= sz; + if( !leafData ){ + if( cntNew[i]usableSpace ) break; + szNew[i] += sz; + cntNew[i]++; + if( !leafData ){ + if( cntNew[i]=b.nCell ){ + k = i+1; + }else if( cntNew[i] <= (i>0 ? cntNew[i-1] : 0) ){ + rc = SQLITE_CORRUPT_BKPT; + goto balance_cleanup; + } + } + + /* + ** The packing computed by the previous block is biased toward the siblings + ** on the left side (siblings with smaller keys). The left siblings are + ** always nearly full, while the right-most sibling might be nearly empty. + ** The next block of code attempts to adjust the packing of siblings to + ** get a better balance. + ** + ** This adjustment is more than an optimization. The packing above might + ** be so out of balance as to be illegal. For example, the right-most + ** sibling might be completely empty. This adjustment is not optional. + */ + for(i=k-1; i>0; i--){ + int szRight = szNew[i]; /* Size of sibling on the right */ + int szLeft = szNew[i-1]; /* Size of sibling on the left */ + int r; /* Index of right-most cell in left sibling */ + int d; /* Index of first cell to the left of right sibling */ + + r = cntNew[i-1] - 1; + d = r + 1 - leafData; + (void)cachedCellSize(&b, d); + do{ + int szR, szD; + assert( d szLeft-(szR+(i==k-1?0:2)))){ + break; + } + szRight += szD + 2; + szLeft -= szR + 2; + cntNew[i-1] = r; + r--; + d--; + }while( r>=0 ); + szNew[i] = szRight; + szNew[i-1] = szLeft; + if( cntNew[i-1] <= (i>1 ? cntNew[i-2] : 0) ){ + rc = SQLITE_CORRUPT_BKPT; + goto balance_cleanup; + } + } + + /* Sanity check: For a non-corrupt database file one of the following + ** must be true: + ** (1) We found one or more cells (cntNew[0])>0), or + ** (2) pPage is a virtual root page. A virtual root page is when + ** the real root page is page 1 and we are the only child of + ** that page. + */ + assert( cntNew[0]>0 || (pParent->pgno==1 && pParent->nCell==0) || CORRUPT_DB); + TRACE(("BALANCE: old: %u(nc=%u) %u(nc=%u) %u(nc=%u)\n", + apOld[0]->pgno, apOld[0]->nCell, + nOld>=2 ? apOld[1]->pgno : 0, nOld>=2 ? apOld[1]->nCell : 0, + nOld>=3 ? apOld[2]->pgno : 0, nOld>=3 ? apOld[2]->nCell : 0 + )); + + /* + ** Allocate k new pages. Reuse old pages where possible. + */ + pageFlags = apOld[0]->aData[0]; + for(i=0; ipDbPage); + nNew++; + if( sqlite3PagerPageRefcount(pNew->pDbPage)!=1+(i==(iParentIdx-nxDiv)) + && rc==SQLITE_OK + ){ + rc = SQLITE_CORRUPT_BKPT; + } + if( rc ) goto balance_cleanup; + }else{ + assert( i>0 ); + rc = allocateBtreePage(pBt, &pNew, &pgno, (bBulk ? 1 : pgno), 0); + if( rc ) goto balance_cleanup; + zeroPage(pNew, pageFlags); + apNew[i] = pNew; + nNew++; + cntOld[i] = b.nCell; + + /* Set the pointer-map entry for the new sibling page. */ + if( ISAUTOVACUUM(pBt) ){ + ptrmapPut(pBt, pNew->pgno, PTRMAP_BTREE, pParent->pgno, &rc); + if( rc!=SQLITE_OK ){ + goto balance_cleanup; + } + } + } + } + + /* + ** Reassign page numbers so that the new pages are in ascending order. + ** This helps to keep entries in the disk file in order so that a scan + ** of the table is closer to a linear scan through the file. That in turn + ** helps the operating system to deliver pages from the disk more rapidly. + ** + ** An O(N*N) sort algorithm is used, but since N is never more than NB+2 + ** (5), that is not a performance concern. + ** + ** When NB==3, this one optimization makes the database about 25% faster + ** for large insertions and deletions. + */ + for(i=0; ipgno; + assert( apNew[i]->pDbPage->flags & PGHDR_WRITEABLE ); + assert( apNew[i]->pDbPage->flags & PGHDR_DIRTY ); + } + for(i=0; ipgno < apNew[iB]->pgno ) iB = j; + } + + /* If apNew[i] has a page number that is bigger than any of the + ** subsequence apNew[i] entries, then swap apNew[i] with the subsequent + ** entry that has the smallest page number (which we know to be + ** entry apNew[iB]). + */ + if( iB!=i ){ + Pgno pgnoA = apNew[i]->pgno; + Pgno pgnoB = apNew[iB]->pgno; + Pgno pgnoTemp = (PENDING_BYTE/pBt->pageSize)+1; + u16 fgA = apNew[i]->pDbPage->flags; + u16 fgB = apNew[iB]->pDbPage->flags; + sqlite3PagerRekey(apNew[i]->pDbPage, pgnoTemp, fgB); + sqlite3PagerRekey(apNew[iB]->pDbPage, pgnoA, fgA); + sqlite3PagerRekey(apNew[i]->pDbPage, pgnoB, fgB); + apNew[i]->pgno = pgnoB; + apNew[iB]->pgno = pgnoA; + } + } + + TRACE(("BALANCE: new: %u(%u nc=%u) %u(%u nc=%u) %u(%u nc=%u) " + "%u(%u nc=%u) %u(%u nc=%u)\n", + apNew[0]->pgno, szNew[0], cntNew[0], + nNew>=2 ? apNew[1]->pgno : 0, nNew>=2 ? szNew[1] : 0, + nNew>=2 ? cntNew[1] - cntNew[0] - !leafData : 0, + nNew>=3 ? apNew[2]->pgno : 0, nNew>=3 ? szNew[2] : 0, + nNew>=3 ? cntNew[2] - cntNew[1] - !leafData : 0, + nNew>=4 ? apNew[3]->pgno : 0, nNew>=4 ? szNew[3] : 0, + nNew>=4 ? cntNew[3] - cntNew[2] - !leafData : 0, + nNew>=5 ? apNew[4]->pgno : 0, nNew>=5 ? szNew[4] : 0, + nNew>=5 ? cntNew[4] - cntNew[3] - !leafData : 0 + )); + + assert( sqlite3PagerIswriteable(pParent->pDbPage) ); + assert( nNew>=1 && nNew<=ArraySize(apNew) ); + assert( apNew[nNew-1]!=0 ); + put4byte(pRight, apNew[nNew-1]->pgno); + + /* If the sibling pages are not leaves, ensure that the right-child pointer + ** of the right-most new sibling page is set to the value that was + ** originally in the same field of the right-most old sibling page. */ + if( (pageFlags & PTF_LEAF)==0 && nOld!=nNew ){ + MemPage *pOld; + if( nNew>nOld ){ + pOld = apNew[nOld-1]; + }else{ + pOld = apOld[nOld-1]; + } + memcpy(&apNew[nNew-1]->aData[8], &pOld->aData[8], 4); + } + + /* Make any required updates to pointer map entries associated with + ** cells stored on sibling pages following the balance operation. Pointer + ** map entries associated with divider cells are set by the insertCell() + ** routine. The associated pointer map entries are: + ** + ** a) if the cell contains a reference to an overflow chain, the + ** entry associated with the first page in the overflow chain, and + ** + ** b) if the sibling pages are not leaves, the child page associated + ** with the cell. + ** + ** If the sibling pages are not leaves, then the pointer map entry + ** associated with the right-child of each sibling may also need to be + ** updated. This happens below, after the sibling pages have been + ** populated, not here. + */ + if( ISAUTOVACUUM(pBt) ){ + MemPage *pOld; + MemPage *pNew = pOld = apNew[0]; + int cntOldNext = pNew->nCell + pNew->nOverflow; + int iNew = 0; + int iOld = 0; + + for(i=0; i=0 && iOldnCell + pOld->nOverflow + !leafData; + } + if( i==cntNew[iNew] ){ + pNew = apNew[++iNew]; + if( !leafData ) continue; + } + + /* Cell pCell is destined for new sibling page pNew. Originally, it + ** was either part of sibling page iOld (possibly an overflow cell), + ** or else the divider cell to the left of sibling page iOld. So, + ** if sibling page iOld had the same page number as pNew, and if + ** pCell really was a part of sibling page iOld (not a divider or + ** overflow cell), we can skip updating the pointer map entries. */ + if( iOld>=nNew + || pNew->pgno!=aPgno[iOld] + || !SQLITE_WITHIN(pCell,pOld->aData,pOld->aDataEnd) + ){ + if( !leafCorrection ){ + ptrmapPut(pBt, get4byte(pCell), PTRMAP_BTREE, pNew->pgno, &rc); + } + if( cachedCellSize(&b,i)>pNew->minLocal ){ + ptrmapPutOvflPtr(pNew, pOld, pCell, &rc); + } + if( rc ) goto balance_cleanup; + } + } + } + + /* Insert new divider cells into pParent. */ + for(i=0; ileaf ){ + memcpy(&pNew->aData[8], pCell, 4); + }else if( leafData ){ + /* If the tree is a leaf-data tree, and the siblings are leaves, + ** then there is no divider cell in b.apCell[]. Instead, the divider + ** cell consists of the integer key for the right-most cell of + ** the sibling-page assembled above only. + */ + CellInfo info; + j--; + pNew->xParseCell(pNew, b.apCell[j], &info); + pCell = pTemp; + sz = 4 + putVarint(&pCell[4], info.nKey); + pTemp = 0; + }else{ + pCell -= 4; + /* Obscure case for non-leaf-data trees: If the cell at pCell was + ** previously stored on a leaf node, and its reported size was 4 + ** bytes, then it may actually be smaller than this + ** (see btreeParseCellPtr(), 4 bytes is the minimum size of + ** any cell). But it is important to pass the correct size to + ** insertCell(), so reparse the cell now. + ** + ** This can only happen for b-trees used to evaluate "IN (SELECT ...)" + ** and WITHOUT ROWID tables with exactly one column which is the + ** primary key. + */ + if( b.szCell[j]==4 ){ + assert(leafCorrection==4); + sz = pParent->xCellSize(pParent, pCell); + } + } + iOvflSpace += sz; + assert( sz<=pBt->maxLocal+23 ); + assert( iOvflSpace <= (int)pBt->pageSize ); + assert( b.ixNx[NB*2-1]>j ); + for(k=0; b.ixNx[k]<=j; k++){} + pSrcEnd = b.apEnd[k]; + if( SQLITE_OVERFLOW(pSrcEnd, pCell, pCell+sz) ){ + rc = SQLITE_CORRUPT_BKPT; + goto balance_cleanup; + } + rc = insertCell(pParent, nxDiv+i, pCell, sz, pTemp, pNew->pgno); + if( rc!=SQLITE_OK ) goto balance_cleanup; + assert( sqlite3PagerIswriteable(pParent->pDbPage) ); + } + + /* Now update the actual sibling pages. The order in which they are updated + ** is important, as this code needs to avoid disrupting any page from which + ** cells may still to be read. In practice, this means: + ** + ** (1) If cells are moving left (from apNew[iPg] to apNew[iPg-1]) + ** then it is not safe to update page apNew[iPg] until after + ** the left-hand sibling apNew[iPg-1] has been updated. + ** + ** (2) If cells are moving right (from apNew[iPg] to apNew[iPg+1]) + ** then it is not safe to update page apNew[iPg] until after + ** the right-hand sibling apNew[iPg+1] has been updated. + ** + ** If neither of the above apply, the page is safe to update. + ** + ** The iPg value in the following loop starts at nNew-1 goes down + ** to 0, then back up to nNew-1 again, thus making two passes over + ** the pages. On the initial downward pass, only condition (1) above + ** needs to be tested because (2) will always be true from the previous + ** step. On the upward pass, both conditions are always true, so the + ** upwards pass simply processes pages that were missed on the downward + ** pass. + */ + for(i=1-nNew; i=0 && iPg=1 || i>=0 ); + assert( iPg=0 /* On the upwards pass, or... */ + || cntOld[iPg-1]>=cntNew[iPg-1] /* Condition (1) is true */ + ){ + int iNew; + int iOld; + int nNewCell; + + /* Verify condition (1): If cells are moving left, update iPg + ** only after iPg-1 has already been updated. */ + assert( iPg==0 || cntOld[iPg-1]>=cntNew[iPg-1] || abDone[iPg-1] ); + + /* Verify condition (2): If cells are moving right, update iPg + ** only after iPg+1 has already been updated. */ + assert( cntNew[iPg]>=cntOld[iPg] || abDone[iPg+1] ); + + if( iPg==0 ){ + iNew = iOld = 0; + nNewCell = cntNew[0]; + }else{ + iOld = iPgnFree = usableSpace-szNew[iPg]; + assert( apNew[iPg]->nOverflow==0 ); + assert( apNew[iPg]->nCell==nNewCell ); + } + } + + /* All pages have been processed exactly once */ + assert( memcmp(abDone, "\01\01\01\01\01", nNew)==0 ); + + assert( nOld>0 ); + assert( nNew>0 ); + + if( isRoot && pParent->nCell==0 && pParent->hdrOffset<=apNew[0]->nFree ){ + /* The root page of the b-tree now contains no cells. The only sibling + ** page is the right-child of the parent. Copy the contents of the + ** child page into the parent, decreasing the overall height of the + ** b-tree structure by one. This is described as the "balance-shallower" + ** sub-algorithm in some documentation. + ** + ** If this is an auto-vacuum database, the call to copyNodeContent() + ** sets all pointer-map entries corresponding to database image pages + ** for which the pointer is stored within the content being copied. + ** + ** It is critical that the child page be defragmented before being + ** copied into the parent, because if the parent is page 1 then it will + ** by smaller than the child due to the database header, and so all the + ** free space needs to be up front. + */ + assert( nNew==1 || CORRUPT_DB ); + rc = defragmentPage(apNew[0], -1); + testcase( rc!=SQLITE_OK ); + assert( apNew[0]->nFree == + (get2byteNotZero(&apNew[0]->aData[5]) - apNew[0]->cellOffset + - apNew[0]->nCell*2) + || rc!=SQLITE_OK + ); + copyNodeContent(apNew[0], pParent, &rc); + freePage(apNew[0], &rc); + }else if( ISAUTOVACUUM(pBt) && !leafCorrection ){ + /* Fix the pointer map entries associated with the right-child of each + ** sibling page. All other pointer map entries have already been taken + ** care of. */ + for(i=0; iaData[8]); + ptrmapPut(pBt, key, PTRMAP_BTREE, apNew[i]->pgno, &rc); + } + } + + assert( pParent->isInit ); + TRACE(("BALANCE: finished: old=%u new=%u cells=%u\n", + nOld, nNew, b.nCell)); + + /* Free any old pages that were not reused as new pages. + */ + for(i=nNew; iisInit ){ + /* The ptrmapCheckPages() contains assert() statements that verify that + ** all pointer map pages are set correctly. This is helpful while + ** debugging. This is usually disabled because a corrupt database may + ** cause an assert() statement to fail. */ + ptrmapCheckPages(apNew, nNew); + ptrmapCheckPages(&pParent, 1); + } +#endif + + /* + ** Cleanup before returning. + */ +balance_cleanup: + sqlite3StackFree(0, b.apCell); + for(i=0; ipBt; /* The BTree */ + + assert( pRoot->nOverflow>0 ); + assert( sqlite3_mutex_held(pBt->mutex) ); + + /* Make pRoot, the root page of the b-tree, writable. Allocate a new + ** page that will become the new right-child of pPage. Copy the contents + ** of the node stored on pRoot into the new child page. + */ + rc = sqlite3PagerWrite(pRoot->pDbPage); + if( rc==SQLITE_OK ){ + rc = allocateBtreePage(pBt,&pChild,&pgnoChild,pRoot->pgno,0); + copyNodeContent(pRoot, pChild, &rc); + if( ISAUTOVACUUM(pBt) ){ + ptrmapPut(pBt, pgnoChild, PTRMAP_BTREE, pRoot->pgno, &rc); + } + } + if( rc ){ + *ppChild = 0; + releasePage(pChild); + return rc; + } + assert( sqlite3PagerIswriteable(pChild->pDbPage) ); + assert( sqlite3PagerIswriteable(pRoot->pDbPage) ); + assert( pChild->nCell==pRoot->nCell || CORRUPT_DB ); + + TRACE(("BALANCE: copy root %u into %u\n", pRoot->pgno, pChild->pgno)); + + /* Copy the overflow cells from pRoot to pChild */ + memcpy(pChild->aiOvfl, pRoot->aiOvfl, + pRoot->nOverflow*sizeof(pRoot->aiOvfl[0])); + memcpy(pChild->apOvfl, pRoot->apOvfl, + pRoot->nOverflow*sizeof(pRoot->apOvfl[0])); + pChild->nOverflow = pRoot->nOverflow; + + /* Zero the contents of pRoot. Then install pChild as the right-child. */ + zeroPage(pRoot, pChild->aData[0] & ~PTF_LEAF); + put4byte(&pRoot->aData[pRoot->hdrOffset+8], pgnoChild); + + *ppChild = pChild; + return SQLITE_OK; +} + +/* +** Return SQLITE_CORRUPT if any cursor other than pCur is currently valid +** on the same B-tree as pCur. +** +** This can occur if a database is corrupt with two or more SQL tables +** pointing to the same b-tree. If an insert occurs on one SQL table +** and causes a BEFORE TRIGGER to do a secondary insert on the other SQL +** table linked to the same b-tree. If the secondary insert causes a +** rebalance, that can change content out from under the cursor on the +** first SQL table, violating invariants on the first insert. +*/ +static int anotherValidCursor(BtCursor *pCur){ + BtCursor *pOther; + for(pOther=pCur->pBt->pCursor; pOther; pOther=pOther->pNext){ + if( pOther!=pCur + && pOther->eState==CURSOR_VALID + && pOther->pPage==pCur->pPage + ){ + return SQLITE_CORRUPT_PAGE(pCur->pPage); + } + } + return SQLITE_OK; +} + +/* +** The page that pCur currently points to has just been modified in +** some way. This function figures out if this modification means the +** tree needs to be balanced, and if so calls the appropriate balancing +** routine. Balancing routines are: +** +** balance_quick() +** balance_deeper() +** balance_nonroot() +*/ +static int balance(BtCursor *pCur){ + int rc = SQLITE_OK; + u8 aBalanceQuickSpace[13]; + u8 *pFree = 0; + + VVA_ONLY( int balance_quick_called = 0 ); + VVA_ONLY( int balance_deeper_called = 0 ); + + do { + int iPage; + MemPage *pPage = pCur->pPage; + + if( NEVER(pPage->nFree<0) && btreeComputeFreeSpace(pPage) ) break; + if( pPage->nOverflow==0 && pPage->nFree*3<=(int)pCur->pBt->usableSize*2 ){ + /* No rebalance required as long as: + ** (1) There are no overflow cells + ** (2) The amount of free space on the page is less than 2/3rds of + ** the total usable space on the page. */ + break; + }else if( (iPage = pCur->iPage)==0 ){ + if( pPage->nOverflow && (rc = anotherValidCursor(pCur))==SQLITE_OK ){ + /* The root page of the b-tree is overfull. In this case call the + ** balance_deeper() function to create a new child for the root-page + ** and copy the current contents of the root-page to it. The + ** next iteration of the do-loop will balance the child page. + */ + assert( balance_deeper_called==0 ); + VVA_ONLY( balance_deeper_called++ ); + rc = balance_deeper(pPage, &pCur->apPage[1]); + if( rc==SQLITE_OK ){ + pCur->iPage = 1; + pCur->ix = 0; + pCur->aiIdx[0] = 0; + pCur->apPage[0] = pPage; + pCur->pPage = pCur->apPage[1]; + assert( pCur->pPage->nOverflow ); + } + }else{ + break; + } + }else if( sqlite3PagerPageRefcount(pPage->pDbPage)>1 ){ + /* The page being written is not a root page, and there is currently + ** more than one reference to it. This only happens if the page is one + ** of its own ancestor pages. Corruption. */ + rc = SQLITE_CORRUPT_PAGE(pPage); + }else{ + MemPage * const pParent = pCur->apPage[iPage-1]; + int const iIdx = pCur->aiIdx[iPage-1]; + + rc = sqlite3PagerWrite(pParent->pDbPage); + if( rc==SQLITE_OK && pParent->nFree<0 ){ + rc = btreeComputeFreeSpace(pParent); + } + if( rc==SQLITE_OK ){ +#ifndef SQLITE_OMIT_QUICKBALANCE + if( pPage->intKeyLeaf + && pPage->nOverflow==1 + && pPage->aiOvfl[0]==pPage->nCell + && pParent->pgno!=1 + && pParent->nCell==iIdx + ){ + /* Call balance_quick() to create a new sibling of pPage on which + ** to store the overflow cell. balance_quick() inserts a new cell + ** into pParent, which may cause pParent overflow. If this + ** happens, the next iteration of the do-loop will balance pParent + ** use either balance_nonroot() or balance_deeper(). Until this + ** happens, the overflow cell is stored in the aBalanceQuickSpace[] + ** buffer. + ** + ** The purpose of the following assert() is to check that only a + ** single call to balance_quick() is made for each call to this + ** function. If this were not verified, a subtle bug involving reuse + ** of the aBalanceQuickSpace[] might sneak in. + */ + assert( balance_quick_called==0 ); + VVA_ONLY( balance_quick_called++ ); + rc = balance_quick(pParent, pPage, aBalanceQuickSpace); + }else +#endif + { + /* In this case, call balance_nonroot() to redistribute cells + ** between pPage and up to 2 of its sibling pages. This involves + ** modifying the contents of pParent, which may cause pParent to + ** become overfull or underfull. The next iteration of the do-loop + ** will balance the parent page to correct this. + ** + ** If the parent page becomes overfull, the overflow cell or cells + ** are stored in the pSpace buffer allocated immediately below. + ** A subsequent iteration of the do-loop will deal with this by + ** calling balance_nonroot() (balance_deeper() may be called first, + ** but it doesn't deal with overflow cells - just moves them to a + ** different page). Once this subsequent call to balance_nonroot() + ** has completed, it is safe to release the pSpace buffer used by + ** the previous call, as the overflow cell data will have been + ** copied either into the body of a database page or into the new + ** pSpace buffer passed to the latter call to balance_nonroot(). + */ + u8 *pSpace = sqlite3PageMalloc(pCur->pBt->pageSize); + rc = balance_nonroot(pParent, iIdx, pSpace, iPage==1, + pCur->hints&BTREE_BULKLOAD); + if( pFree ){ + /* If pFree is not NULL, it points to the pSpace buffer used + ** by a previous call to balance_nonroot(). Its contents are + ** now stored either on real database pages or within the + ** new pSpace buffer, so it may be safely freed here. */ + sqlite3PageFree(pFree); + } + + /* The pSpace buffer will be freed after the next call to + ** balance_nonroot(), or just before this function returns, whichever + ** comes first. */ + pFree = pSpace; + } + } + + pPage->nOverflow = 0; + + /* The next iteration of the do-loop balances the parent page. */ + releasePage(pPage); + pCur->iPage--; + assert( pCur->iPage>=0 ); + pCur->pPage = pCur->apPage[pCur->iPage]; + } + }while( rc==SQLITE_OK ); + + if( pFree ){ + sqlite3PageFree(pFree); + } + return rc; +} + +/* Overwrite content from pX into pDest. Only do the write if the +** content is different from what is already there. +*/ +static int btreeOverwriteContent( + MemPage *pPage, /* MemPage on which writing will occur */ + u8 *pDest, /* Pointer to the place to start writing */ + const BtreePayload *pX, /* Source of data to write */ + int iOffset, /* Offset of first byte to write */ + int iAmt /* Number of bytes to be written */ +){ + int nData = pX->nData - iOffset; + if( nData<=0 ){ + /* Overwriting with zeros */ + int i; + for(i=0; ipDbPage); + if( rc ) return rc; + memset(pDest + i, 0, iAmt - i); + } + }else{ + if( nDatapData) + iOffset, iAmt)!=0 ){ + int rc = sqlite3PagerWrite(pPage->pDbPage); + if( rc ) return rc; + /* In a corrupt database, it is possible for the source and destination + ** buffers to overlap. This is harmless since the database is already + ** corrupt but it does cause valgrind and ASAN warnings. So use + ** memmove(). */ + memmove(pDest, ((u8*)pX->pData) + iOffset, iAmt); + } + } + return SQLITE_OK; +} + +/* +** Overwrite the cell that cursor pCur is pointing to with fresh content +** contained in pX. In this variant, pCur is pointing to an overflow +** cell. +*/ +static SQLITE_NOINLINE int btreeOverwriteOverflowCell( + BtCursor *pCur, /* Cursor pointing to cell to overwrite */ + const BtreePayload *pX /* Content to write into the cell */ +){ + int iOffset; /* Next byte of pX->pData to write */ + int nTotal = pX->nData + pX->nZero; /* Total bytes of to write */ + int rc; /* Return code */ + MemPage *pPage = pCur->pPage; /* Page being written */ + BtShared *pBt; /* Btree */ + Pgno ovflPgno; /* Next overflow page to write */ + u32 ovflPageSize; /* Size to write on overflow page */ + + assert( pCur->info.nLocalinfo.pPayload, pX, + 0, pCur->info.nLocal); + if( rc ) return rc; + + /* Now overwrite the overflow pages */ + iOffset = pCur->info.nLocal; + assert( nTotal>=0 ); + assert( iOffset>=0 ); + ovflPgno = get4byte(pCur->info.pPayload + iOffset); + pBt = pPage->pBt; + ovflPageSize = pBt->usableSize - 4; + do{ + rc = btreeGetPage(pBt, ovflPgno, &pPage, 0); + if( rc ) return rc; + if( sqlite3PagerPageRefcount(pPage->pDbPage)!=1 || pPage->isInit ){ + rc = SQLITE_CORRUPT_PAGE(pPage); + }else{ + if( iOffset+ovflPageSize<(u32)nTotal ){ + ovflPgno = get4byte(pPage->aData); + }else{ + ovflPageSize = nTotal - iOffset; + } + rc = btreeOverwriteContent(pPage, pPage->aData+4, pX, + iOffset, ovflPageSize); + } + sqlite3PagerUnref(pPage->pDbPage); + if( rc ) return rc; + iOffset += ovflPageSize; + }while( iOffsetnData + pX->nZero; /* Total bytes of to write */ + MemPage *pPage = pCur->pPage; /* Page being written */ + + if( pCur->info.pPayload + pCur->info.nLocal > pPage->aDataEnd + || pCur->info.pPayload < pPage->aData + pPage->cellOffset + ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + if( pCur->info.nLocal==nTotal ){ + /* The entire cell is local */ + return btreeOverwriteContent(pPage, pCur->info.pPayload, pX, + 0, pCur->info.nLocal); + }else{ + /* The cell contains overflow content */ + return btreeOverwriteOverflowCell(pCur, pX); + } +} + + +/* +** Insert a new record into the BTree. The content of the new record +** is described by the pX object. The pCur cursor is used only to +** define what table the record should be inserted into, and is left +** pointing at a random location. +** +** For a table btree (used for rowid tables), only the pX.nKey value of +** the key is used. The pX.pKey value must be NULL. The pX.nKey is the +** rowid or INTEGER PRIMARY KEY of the row. The pX.nData,pData,nZero fields +** hold the content of the row. +** +** For an index btree (used for indexes and WITHOUT ROWID tables), the +** key is an arbitrary byte sequence stored in pX.pKey,nKey. The +** pX.pData,nData,nZero fields must be zero. +** +** If the seekResult parameter is non-zero, then a successful call to +** sqlite3BtreeIndexMoveto() to seek cursor pCur to (pKey,nKey) has already +** been performed. In other words, if seekResult!=0 then the cursor +** is currently pointing to a cell that will be adjacent to the cell +** to be inserted. If seekResult<0 then pCur points to a cell that is +** smaller then (pKey,nKey). If seekResult>0 then pCur points to a cell +** that is larger than (pKey,nKey). +** +** If seekResult==0, that means pCur is pointing at some unknown location. +** In that case, this routine must seek the cursor to the correct insertion +** point for (pKey,nKey) before doing the insertion. For index btrees, +** if pX->nMem is non-zero, then pX->aMem contains pointers to the unpacked +** key values and pX->aMem can be used instead of pX->pKey to avoid having +** to decode the key. +*/ +SQLITE_PRIVATE int sqlite3BtreeInsert( + BtCursor *pCur, /* Insert data into the table of this cursor */ + const BtreePayload *pX, /* Content of the row to be inserted */ + int flags, /* True if this is likely an append */ + int seekResult /* Result of prior IndexMoveto() call */ +){ + int rc; + int loc = seekResult; /* -1: before desired location +1: after */ + int szNew = 0; + int idx; + MemPage *pPage; + Btree *p = pCur->pBtree; + unsigned char *oldCell; + unsigned char *newCell = 0; + + assert( (flags & (BTREE_SAVEPOSITION|BTREE_APPEND|BTREE_PREFORMAT))==flags ); + assert( (flags & BTREE_PREFORMAT)==0 || seekResult || pCur->pKeyInfo==0 ); + + /* Save the positions of any other cursors open on this table. + ** + ** In some cases, the call to btreeMoveto() below is a no-op. For + ** example, when inserting data into a table with auto-generated integer + ** keys, the VDBE layer invokes sqlite3BtreeLast() to figure out the + ** integer key to use. It then calls this function to actually insert the + ** data into the intkey B-Tree. In this case btreeMoveto() recognizes + ** that the cursor is already where it needs to be and returns without + ** doing any work. To avoid thwarting these optimizations, it is important + ** not to clear the cursor here. + */ + if( pCur->curFlags & BTCF_Multiple ){ + rc = saveAllCursors(p->pBt, pCur->pgnoRoot, pCur); + if( rc ) return rc; + if( loc && pCur->iPage<0 ){ + /* This can only happen if the schema is corrupt such that there is more + ** than one table or index with the same root page as used by the cursor. + ** Which can only happen if the SQLITE_NoSchemaError flag was set when + ** the schema was loaded. This cannot be asserted though, as a user might + ** set the flag, load the schema, and then unset the flag. */ + return SQLITE_CORRUPT_PGNO(pCur->pgnoRoot); + } + } + + /* Ensure that the cursor is not in the CURSOR_FAULT state and that it + ** points to a valid cell. + */ + if( pCur->eState>=CURSOR_REQUIRESEEK ){ + testcase( pCur->eState==CURSOR_REQUIRESEEK ); + testcase( pCur->eState==CURSOR_FAULT ); + rc = moveToRoot(pCur); + if( rc && rc!=SQLITE_EMPTY ) return rc; + } + + assert( cursorOwnsBtShared(pCur) ); + assert( (pCur->curFlags & BTCF_WriteFlag)!=0 + && p->pBt->inTransaction==TRANS_WRITE + && (p->pBt->btsFlags & BTS_READ_ONLY)==0 ); + assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) ); + + /* Assert that the caller has been consistent. If this cursor was opened + ** expecting an index b-tree, then the caller should be inserting blob + ** keys with no associated data. If the cursor was opened expecting an + ** intkey table, the caller should be inserting integer keys with a + ** blob of associated data. */ + assert( (flags & BTREE_PREFORMAT) || (pX->pKey==0)==(pCur->pKeyInfo==0) ); + + if( pCur->pKeyInfo==0 ){ + assert( pX->pKey==0 ); + /* If this is an insert into a table b-tree, invalidate any incrblob + ** cursors open on the row being replaced */ + if( p->hasIncrblobCur ){ + invalidateIncrblobCursors(p, pCur->pgnoRoot, pX->nKey, 0); + } + + /* If BTREE_SAVEPOSITION is set, the cursor must already be pointing + ** to a row with the same key as the new entry being inserted. + */ +#ifdef SQLITE_DEBUG + if( flags & BTREE_SAVEPOSITION ){ + assert( pCur->curFlags & BTCF_ValidNKey ); + assert( pX->nKey==pCur->info.nKey ); + assert( loc==0 ); + } +#endif + + /* On the other hand, BTREE_SAVEPOSITION==0 does not imply + ** that the cursor is not pointing to a row to be overwritten. + ** So do a complete check. + */ + if( (pCur->curFlags&BTCF_ValidNKey)!=0 && pX->nKey==pCur->info.nKey ){ + /* The cursor is pointing to the entry that is to be + ** overwritten */ + assert( pX->nData>=0 && pX->nZero>=0 ); + if( pCur->info.nSize!=0 + && pCur->info.nPayload==(u32)pX->nData+pX->nZero + ){ + /* New entry is the same size as the old. Do an overwrite */ + return btreeOverwriteCell(pCur, pX); + } + assert( loc==0 ); + }else if( loc==0 ){ + /* The cursor is *not* pointing to the cell to be overwritten, nor + ** to an adjacent cell. Move the cursor so that it is pointing either + ** to the cell to be overwritten or an adjacent cell. + */ + rc = sqlite3BtreeTableMoveto(pCur, pX->nKey, + (flags & BTREE_APPEND)!=0, &loc); + if( rc ) return rc; + } + }else{ + /* This is an index or a WITHOUT ROWID table */ + + /* If BTREE_SAVEPOSITION is set, the cursor must already be pointing + ** to a row with the same key as the new entry being inserted. + */ + assert( (flags & BTREE_SAVEPOSITION)==0 || loc==0 ); + + /* If the cursor is not already pointing either to the cell to be + ** overwritten, or if a new cell is being inserted, if the cursor is + ** not pointing to an immediately adjacent cell, then move the cursor + ** so that it does. + */ + if( loc==0 && (flags & BTREE_SAVEPOSITION)==0 ){ + if( pX->nMem ){ + UnpackedRecord r; + r.pKeyInfo = pCur->pKeyInfo; + r.aMem = pX->aMem; + r.nField = pX->nMem; + r.default_rc = 0; + r.eqSeen = 0; + rc = sqlite3BtreeIndexMoveto(pCur, &r, &loc); + }else{ + rc = btreeMoveto(pCur, pX->pKey, pX->nKey, + (flags & BTREE_APPEND)!=0, &loc); + } + if( rc ) return rc; + } + + /* If the cursor is currently pointing to an entry to be overwritten + ** and the new content is the same as as the old, then use the + ** overwrite optimization. + */ + if( loc==0 ){ + getCellInfo(pCur); + if( pCur->info.nKey==pX->nKey ){ + BtreePayload x2; + x2.pData = pX->pKey; + x2.nData = (int)pX->nKey; assert( pX->nKey<=0x7fffffff ); + x2.nZero = 0; + return btreeOverwriteCell(pCur, &x2); + } + } + } + assert( pCur->eState==CURSOR_VALID + || (pCur->eState==CURSOR_INVALID && loc) || CORRUPT_DB ); + + pPage = pCur->pPage; + assert( pPage->intKey || pX->nKey>=0 || (flags & BTREE_PREFORMAT) ); + assert( pPage->leaf || !pPage->intKey ); + if( pPage->nFree<0 ){ + if( NEVER(pCur->eState>CURSOR_INVALID) ){ + /* ^^^^^--- due to the moveToRoot() call above */ + rc = SQLITE_CORRUPT_PAGE(pPage); + }else{ + rc = btreeComputeFreeSpace(pPage); + } + if( rc ) return rc; + } + + TRACE(("INSERT: table=%u nkey=%lld ndata=%u page=%u %s\n", + pCur->pgnoRoot, pX->nKey, pX->nData, pPage->pgno, + loc==0 ? "overwrite" : "new entry")); + assert( pPage->isInit || CORRUPT_DB ); + newCell = p->pBt->pTmpSpace; + assert( newCell!=0 ); + assert( BTREE_PREFORMAT==OPFLAG_PREFORMAT ); + if( flags & BTREE_PREFORMAT ){ + rc = SQLITE_OK; + szNew = p->pBt->nPreformatSize; + if( szNew<4 ){ + szNew = 4; + newCell[3] = 0; + } + if( ISAUTOVACUUM(p->pBt) && szNew>pPage->maxLocal ){ + CellInfo info; + pPage->xParseCell(pPage, newCell, &info); + if( info.nPayload!=info.nLocal ){ + Pgno ovfl = get4byte(&newCell[szNew-4]); + ptrmapPut(p->pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, &rc); + if( NEVER(rc) ) goto end_insert; + } + } + }else{ + rc = fillInCell(pPage, newCell, pX, &szNew); + if( rc ) goto end_insert; + } + assert( szNew==pPage->xCellSize(pPage, newCell) ); + assert( szNew <= MX_CELL_SIZE(p->pBt) ); + idx = pCur->ix; + pCur->info.nSize = 0; + if( loc==0 ){ + CellInfo info; + assert( idx>=0 ); + if( idx>=pPage->nCell ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + rc = sqlite3PagerWrite(pPage->pDbPage); + if( rc ){ + goto end_insert; + } + oldCell = findCell(pPage, idx); + if( !pPage->leaf ){ + memcpy(newCell, oldCell, 4); + } + BTREE_CLEAR_CELL(rc, pPage, oldCell, info); + testcase( pCur->curFlags & BTCF_ValidOvfl ); + invalidateOverflowCache(pCur); + if( info.nSize==szNew && info.nLocal==info.nPayload + && (!ISAUTOVACUUM(p->pBt) || szNewminLocal) + ){ + /* Overwrite the old cell with the new if they are the same size. + ** We could also try to do this if the old cell is smaller, then add + ** the leftover space to the free list. But experiments show that + ** doing that is no faster then skipping this optimization and just + ** calling dropCell() and insertCell(). + ** + ** This optimization cannot be used on an autovacuum database if the + ** new entry uses overflow pages, as the insertCell() call below is + ** necessary to add the PTRMAP_OVERFLOW1 pointer-map entry. */ + assert( rc==SQLITE_OK ); /* clearCell never fails when nLocal==nPayload */ + if( oldCell < pPage->aData+pPage->hdrOffset+10 ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + if( oldCell+szNew > pPage->aDataEnd ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + memcpy(oldCell, newCell, szNew); + return SQLITE_OK; + } + dropCell(pPage, idx, info.nSize, &rc); + if( rc ) goto end_insert; + }else if( loc<0 && pPage->nCell>0 ){ + assert( pPage->leaf ); + idx = ++pCur->ix; + pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl); + }else{ + assert( pPage->leaf ); + } + rc = insertCellFast(pPage, idx, newCell, szNew); + assert( pPage->nOverflow==0 || rc==SQLITE_OK ); + assert( rc!=SQLITE_OK || pPage->nCell>0 || pPage->nOverflow>0 ); + + /* If no error has occurred and pPage has an overflow cell, call balance() + ** to redistribute the cells within the tree. Since balance() may move + ** the cursor, zero the BtCursor.info.nSize and BTCF_ValidNKey + ** variables. + ** + ** Previous versions of SQLite called moveToRoot() to move the cursor + ** back to the root page as balance() used to invalidate the contents + ** of BtCursor.apPage[] and BtCursor.aiIdx[]. Instead of doing that, + ** set the cursor state to "invalid". This makes common insert operations + ** slightly faster. + ** + ** There is a subtle but important optimization here too. When inserting + ** multiple records into an intkey b-tree using a single cursor (as can + ** happen while processing an "INSERT INTO ... SELECT" statement), it + ** is advantageous to leave the cursor pointing to the last entry in + ** the b-tree if possible. If the cursor is left pointing to the last + ** entry in the table, and the next row inserted has an integer key + ** larger than the largest existing key, it is possible to insert the + ** row without seeking the cursor. This can be a big performance boost. + */ + if( pPage->nOverflow ){ + assert( rc==SQLITE_OK ); + pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl); + rc = balance(pCur); + + /* Must make sure nOverflow is reset to zero even if the balance() + ** fails. Internal data structure corruption will result otherwise. + ** Also, set the cursor state to invalid. This stops saveCursorPosition() + ** from trying to save the current position of the cursor. */ + pCur->pPage->nOverflow = 0; + pCur->eState = CURSOR_INVALID; + if( (flags & BTREE_SAVEPOSITION) && rc==SQLITE_OK ){ + btreeReleaseAllCursorPages(pCur); + if( pCur->pKeyInfo ){ + assert( pCur->pKey==0 ); + pCur->pKey = sqlite3Malloc( pX->nKey ); + if( pCur->pKey==0 ){ + rc = SQLITE_NOMEM; + }else{ + memcpy(pCur->pKey, pX->pKey, pX->nKey); + } + } + pCur->eState = CURSOR_REQUIRESEEK; + pCur->nKey = pX->nKey; + } + } + assert( pCur->iPage<0 || pCur->pPage->nOverflow==0 ); + +end_insert: + return rc; +} + +/* +** This function is used as part of copying the current row from cursor +** pSrc into cursor pDest. If the cursors are open on intkey tables, then +** parameter iKey is used as the rowid value when the record is copied +** into pDest. Otherwise, the record is copied verbatim. +** +** This function does not actually write the new value to cursor pDest. +** Instead, it creates and populates any required overflow pages and +** writes the data for the new cell into the BtShared.pTmpSpace buffer +** for the destination database. The size of the cell, in bytes, is left +** in BtShared.nPreformatSize. The caller completes the insertion by +** calling sqlite3BtreeInsert() with the BTREE_PREFORMAT flag specified. +** +** SQLITE_OK is returned if successful, or an SQLite error code otherwise. +*/ +SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64 iKey){ + BtShared *pBt = pDest->pBt; + u8 *aOut = pBt->pTmpSpace; /* Pointer to next output buffer */ + const u8 *aIn; /* Pointer to next input buffer */ + u32 nIn; /* Size of input buffer aIn[] */ + u32 nRem; /* Bytes of data still to copy */ + + getCellInfo(pSrc); + if( pSrc->info.nPayload<0x80 ){ + *(aOut++) = (u8)pSrc->info.nPayload; + }else{ + aOut += sqlite3PutVarint(aOut, pSrc->info.nPayload); + } + if( pDest->pKeyInfo==0 ) aOut += putVarint(aOut, iKey); + nIn = pSrc->info.nLocal; + aIn = pSrc->info.pPayload; + if( aIn+nIn>pSrc->pPage->aDataEnd ){ + return SQLITE_CORRUPT_PAGE(pSrc->pPage); + } + nRem = pSrc->info.nPayload; + if( nIn==nRem && nInpPage->maxLocal ){ + memcpy(aOut, aIn, nIn); + pBt->nPreformatSize = nIn + (int)(aOut - pBt->pTmpSpace); + return SQLITE_OK; + }else{ + int rc = SQLITE_OK; + Pager *pSrcPager = pSrc->pBt->pPager; + u8 *pPgnoOut = 0; + Pgno ovflIn = 0; + DbPage *pPageIn = 0; + MemPage *pPageOut = 0; + u32 nOut; /* Size of output buffer aOut[] */ + + nOut = btreePayloadToLocal(pDest->pPage, pSrc->info.nPayload); + pBt->nPreformatSize = (int)nOut + (int)(aOut - pBt->pTmpSpace); + if( nOutinfo.nPayload ){ + pPgnoOut = &aOut[nOut]; + pBt->nPreformatSize += 4; + } + + if( nRem>nIn ){ + if( aIn+nIn+4>pSrc->pPage->aDataEnd ){ + return SQLITE_CORRUPT_PAGE(pSrc->pPage); + } + ovflIn = get4byte(&pSrc->info.pPayload[nIn]); + } + + do { + nRem -= nOut; + do{ + assert( nOut>0 ); + if( nIn>0 ){ + int nCopy = MIN(nOut, nIn); + memcpy(aOut, aIn, nCopy); + nOut -= nCopy; + nIn -= nCopy; + aOut += nCopy; + aIn += nCopy; + } + if( nOut>0 ){ + sqlite3PagerUnref(pPageIn); + pPageIn = 0; + rc = sqlite3PagerGet(pSrcPager, ovflIn, &pPageIn, PAGER_GET_READONLY); + if( rc==SQLITE_OK ){ + aIn = (const u8*)sqlite3PagerGetData(pPageIn); + ovflIn = get4byte(aIn); + aIn += 4; + nIn = pSrc->pBt->usableSize - 4; + } + } + }while( rc==SQLITE_OK && nOut>0 ); + + if( rc==SQLITE_OK && nRem>0 && ALWAYS(pPgnoOut) ){ + Pgno pgnoNew; + MemPage *pNew = 0; + rc = allocateBtreePage(pBt, &pNew, &pgnoNew, 0, 0); + put4byte(pPgnoOut, pgnoNew); + if( ISAUTOVACUUM(pBt) && pPageOut ){ + ptrmapPut(pBt, pgnoNew, PTRMAP_OVERFLOW2, pPageOut->pgno, &rc); + } + releasePage(pPageOut); + pPageOut = pNew; + if( pPageOut ){ + pPgnoOut = pPageOut->aData; + put4byte(pPgnoOut, 0); + aOut = &pPgnoOut[4]; + nOut = MIN(pBt->usableSize - 4, nRem); + } + } + }while( nRem>0 && rc==SQLITE_OK ); + + releasePage(pPageOut); + sqlite3PagerUnref(pPageIn); + return rc; + } +} + +/* +** Delete the entry that the cursor is pointing to. +** +** If the BTREE_SAVEPOSITION bit of the flags parameter is zero, then +** the cursor is left pointing at an arbitrary location after the delete. +** But if that bit is set, then the cursor is left in a state such that +** the next call to BtreeNext() or BtreePrev() moves it to the same row +** as it would have been on if the call to BtreeDelete() had been omitted. +** +** The BTREE_AUXDELETE bit of flags indicates that is one of several deletes +** associated with a single table entry and its indexes. Only one of those +** deletes is considered the "primary" delete. The primary delete occurs +** on a cursor that is not a BTREE_FORDELETE cursor. All but one delete +** operation on non-FORDELETE cursors is tagged with the AUXDELETE flag. +** The BTREE_AUXDELETE bit is a hint that is not used by this implementation, +** but which might be used by alternative storage engines. +*/ +SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){ + Btree *p = pCur->pBtree; + BtShared *pBt = p->pBt; + int rc; /* Return code */ + MemPage *pPage; /* Page to delete cell from */ + unsigned char *pCell; /* Pointer to cell to delete */ + int iCellIdx; /* Index of cell to delete */ + int iCellDepth; /* Depth of node containing pCell */ + CellInfo info; /* Size of the cell being deleted */ + u8 bPreserve; /* Keep cursor valid. 2 for CURSOR_SKIPNEXT */ + + assert( cursorOwnsBtShared(pCur) ); + assert( pBt->inTransaction==TRANS_WRITE ); + assert( (pBt->btsFlags & BTS_READ_ONLY)==0 ); + assert( pCur->curFlags & BTCF_WriteFlag ); + assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) ); + assert( !hasReadConflicts(p, pCur->pgnoRoot) ); + assert( (flags & ~(BTREE_SAVEPOSITION | BTREE_AUXDELETE))==0 ); + if( pCur->eState!=CURSOR_VALID ){ + if( pCur->eState>=CURSOR_REQUIRESEEK ){ + rc = btreeRestoreCursorPosition(pCur); + assert( rc!=SQLITE_OK || CORRUPT_DB || pCur->eState==CURSOR_VALID ); + if( rc || pCur->eState!=CURSOR_VALID ) return rc; + }else{ + return SQLITE_CORRUPT_PGNO(pCur->pgnoRoot); + } + } + assert( pCur->eState==CURSOR_VALID ); + + iCellDepth = pCur->iPage; + iCellIdx = pCur->ix; + pPage = pCur->pPage; + if( pPage->nCell<=iCellIdx ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + pCell = findCell(pPage, iCellIdx); + if( pPage->nFree<0 && btreeComputeFreeSpace(pPage) ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + if( pCell<&pPage->aCellIdx[pPage->nCell] ){ + return SQLITE_CORRUPT_PAGE(pPage); + } + + /* If the BTREE_SAVEPOSITION bit is on, then the cursor position must + ** be preserved following this delete operation. If the current delete + ** will cause a b-tree rebalance, then this is done by saving the cursor + ** key and leaving the cursor in CURSOR_REQUIRESEEK state before + ** returning. + ** + ** If the current delete will not cause a rebalance, then the cursor + ** will be left in CURSOR_SKIPNEXT state pointing to the entry immediately + ** before or after the deleted entry. + ** + ** The bPreserve value records which path is required: + ** + ** bPreserve==0 Not necessary to save the cursor position + ** bPreserve==1 Use CURSOR_REQUIRESEEK to save the cursor position + ** bPreserve==2 Cursor won't move. Set CURSOR_SKIPNEXT. + */ + bPreserve = (flags & BTREE_SAVEPOSITION)!=0; + if( bPreserve ){ + if( !pPage->leaf + || (pPage->nFree+pPage->xCellSize(pPage,pCell)+2) > + (int)(pBt->usableSize*2/3) + || pPage->nCell==1 /* See dbfuzz001.test for a test case */ + ){ + /* A b-tree rebalance will be required after deleting this entry. + ** Save the cursor key. */ + rc = saveCursorKey(pCur); + if( rc ) return rc; + }else{ + bPreserve = 2; + } + } + + /* If the page containing the entry to delete is not a leaf page, move + ** the cursor to the largest entry in the tree that is smaller than + ** the entry being deleted. This cell will replace the cell being deleted + ** from the internal node. The 'previous' entry is used for this instead + ** of the 'next' entry, as the previous entry is always a part of the + ** sub-tree headed by the child page of the cell being deleted. This makes + ** balancing the tree following the delete operation easier. */ + if( !pPage->leaf ){ + rc = sqlite3BtreePrevious(pCur, 0); + assert( rc!=SQLITE_DONE ); + if( rc ) return rc; + } + + /* Save the positions of any other cursors open on this table before + ** making any modifications. */ + if( pCur->curFlags & BTCF_Multiple ){ + rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur); + if( rc ) return rc; + } + + /* If this is a delete operation to remove a row from a table b-tree, + ** invalidate any incrblob cursors open on the row being deleted. */ + if( pCur->pKeyInfo==0 && p->hasIncrblobCur ){ + invalidateIncrblobCursors(p, pCur->pgnoRoot, pCur->info.nKey, 0); + } + + /* Make the page containing the entry to be deleted writable. Then free any + ** overflow pages associated with the entry and finally remove the cell + ** itself from within the page. */ + rc = sqlite3PagerWrite(pPage->pDbPage); + if( rc ) return rc; + BTREE_CLEAR_CELL(rc, pPage, pCell, info); + dropCell(pPage, iCellIdx, info.nSize, &rc); + if( rc ) return rc; + + /* If the cell deleted was not located on a leaf page, then the cursor + ** is currently pointing to the largest entry in the sub-tree headed + ** by the child-page of the cell that was just deleted from an internal + ** node. The cell from the leaf node needs to be moved to the internal + ** node to replace the deleted cell. */ + if( !pPage->leaf ){ + MemPage *pLeaf = pCur->pPage; + int nCell; + Pgno n; + unsigned char *pTmp; + + if( pLeaf->nFree<0 ){ + rc = btreeComputeFreeSpace(pLeaf); + if( rc ) return rc; + } + if( iCellDepthiPage-1 ){ + n = pCur->apPage[iCellDepth+1]->pgno; + }else{ + n = pCur->pPage->pgno; + } + pCell = findCell(pLeaf, pLeaf->nCell-1); + if( pCell<&pLeaf->aData[4] ) return SQLITE_CORRUPT_PAGE(pLeaf); + nCell = pLeaf->xCellSize(pLeaf, pCell); + assert( MX_CELL_SIZE(pBt) >= nCell ); + pTmp = pBt->pTmpSpace; + assert( pTmp!=0 ); + rc = sqlite3PagerWrite(pLeaf->pDbPage); + if( rc==SQLITE_OK ){ + rc = insertCell(pPage, iCellIdx, pCell-4, nCell+4, pTmp, n); + } + dropCell(pLeaf, pLeaf->nCell-1, nCell, &rc); + if( rc ) return rc; + } + + /* Balance the tree. If the entry deleted was located on a leaf page, + ** then the cursor still points to that page. In this case the first + ** call to balance() repairs the tree, and the if(...) condition is + ** never true. + ** + ** Otherwise, if the entry deleted was on an internal node page, then + ** pCur is pointing to the leaf page from which a cell was removed to + ** replace the cell deleted from the internal node. This is slightly + ** tricky as the leaf node may be underfull, and the internal node may + ** be either under or overfull. In this case run the balancing algorithm + ** on the leaf node first. If the balance proceeds far enough up the + ** tree that we can be sure that any problem in the internal node has + ** been corrected, so be it. Otherwise, after balancing the leaf node, + ** walk the cursor up the tree to the internal node and balance it as + ** well. */ + assert( pCur->pPage->nOverflow==0 ); + assert( pCur->pPage->nFree>=0 ); + if( pCur->pPage->nFree*3<=(int)pCur->pBt->usableSize*2 ){ + /* Optimization: If the free space is less than 2/3rds of the page, + ** then balance() will always be a no-op. No need to invoke it. */ + rc = SQLITE_OK; + }else{ + rc = balance(pCur); + } + if( rc==SQLITE_OK && pCur->iPage>iCellDepth ){ + releasePageNotNull(pCur->pPage); + pCur->iPage--; + while( pCur->iPage>iCellDepth ){ + releasePage(pCur->apPage[pCur->iPage--]); + } + pCur->pPage = pCur->apPage[pCur->iPage]; + rc = balance(pCur); + } + + if( rc==SQLITE_OK ){ + if( bPreserve>1 ){ + assert( (pCur->iPage==iCellDepth || CORRUPT_DB) ); + assert( pPage==pCur->pPage || CORRUPT_DB ); + assert( (pPage->nCell>0 || CORRUPT_DB) && iCellIdx<=pPage->nCell ); + pCur->eState = CURSOR_SKIPNEXT; + if( iCellIdx>=pPage->nCell ){ + pCur->skipNext = -1; + pCur->ix = pPage->nCell-1; + }else{ + pCur->skipNext = 1; + } + }else{ + rc = moveToRoot(pCur); + if( bPreserve ){ + btreeReleaseAllCursorPages(pCur); + pCur->eState = CURSOR_REQUIRESEEK; + } + if( rc==SQLITE_EMPTY ) rc = SQLITE_OK; + } + } + return rc; +} + +/* +** Create a new BTree table. Write into *piTable the page +** number for the root page of the new table. +** +** The type of type is determined by the flags parameter. Only the +** following values of flags are currently in use. Other values for +** flags might not work: +** +** BTREE_INTKEY|BTREE_LEAFDATA Used for SQL tables with rowid keys +** BTREE_ZERODATA Used for SQL indices +*/ +static int btreeCreateTable(Btree *p, Pgno *piTable, int createTabFlags){ + BtShared *pBt = p->pBt; + MemPage *pRoot; + Pgno pgnoRoot; + int rc; + int ptfFlags; /* Page-type flags for the root page of new table */ + + assert( sqlite3BtreeHoldsMutex(p) ); + assert( pBt->inTransaction==TRANS_WRITE ); + assert( (pBt->btsFlags & BTS_READ_ONLY)==0 ); + +#ifdef SQLITE_OMIT_AUTOVACUUM + rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0); + if( rc ){ + return rc; + } +#else + if( pBt->autoVacuum ){ + Pgno pgnoMove; /* Move a page here to make room for the root-page */ + MemPage *pPageMove; /* The page to move to. */ + + /* Creating a new table may probably require moving an existing database + ** to make room for the new tables root page. In case this page turns + ** out to be an overflow page, delete all overflow page-map caches + ** held by open cursors. + */ + invalidateAllOverflowCache(pBt); + + /* Read the value of meta[3] from the database to determine where the + ** root page of the new table should go. meta[3] is the largest root-page + ** created so far, so the new root-page is (meta[3]+1). + */ + sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &pgnoRoot); + if( pgnoRoot>btreePagecount(pBt) ){ + return SQLITE_CORRUPT_PGNO(pgnoRoot); + } + pgnoRoot++; + + /* The new root-page may not be allocated on a pointer-map page, or the + ** PENDING_BYTE page. + */ + while( pgnoRoot==PTRMAP_PAGENO(pBt, pgnoRoot) || + pgnoRoot==PENDING_BYTE_PAGE(pBt) ){ + pgnoRoot++; + } + assert( pgnoRoot>=3 ); + + /* Allocate a page. The page that currently resides at pgnoRoot will + ** be moved to the allocated page (unless the allocated page happens + ** to reside at pgnoRoot). + */ + rc = allocateBtreePage(pBt, &pPageMove, &pgnoMove, pgnoRoot, BTALLOC_EXACT); + if( rc!=SQLITE_OK ){ + return rc; + } + + if( pgnoMove!=pgnoRoot ){ + /* pgnoRoot is the page that will be used for the root-page of + ** the new table (assuming an error did not occur). But we were + ** allocated pgnoMove. If required (i.e. if it was not allocated + ** by extending the file), the current page at position pgnoMove + ** is already journaled. + */ + u8 eType = 0; + Pgno iPtrPage = 0; + + /* Save the positions of any open cursors. This is required in + ** case they are holding a reference to an xFetch reference + ** corresponding to page pgnoRoot. */ + rc = saveAllCursors(pBt, 0, 0); + releasePage(pPageMove); + if( rc!=SQLITE_OK ){ + return rc; + } + + /* Move the page currently at pgnoRoot to pgnoMove. */ + rc = btreeGetPage(pBt, pgnoRoot, &pRoot, 0); + if( rc!=SQLITE_OK ){ + return rc; + } + rc = ptrmapGet(pBt, pgnoRoot, &eType, &iPtrPage); + if( eType==PTRMAP_ROOTPAGE || eType==PTRMAP_FREEPAGE ){ + rc = SQLITE_CORRUPT_PGNO(pgnoRoot); + } + if( rc!=SQLITE_OK ){ + releasePage(pRoot); + return rc; + } + assert( eType!=PTRMAP_ROOTPAGE ); + assert( eType!=PTRMAP_FREEPAGE ); + rc = relocatePage(pBt, pRoot, eType, iPtrPage, pgnoMove, 0); + releasePage(pRoot); + + /* Obtain the page at pgnoRoot */ + if( rc!=SQLITE_OK ){ + return rc; + } + rc = btreeGetPage(pBt, pgnoRoot, &pRoot, 0); + if( rc!=SQLITE_OK ){ + return rc; + } + rc = sqlite3PagerWrite(pRoot->pDbPage); + if( rc!=SQLITE_OK ){ + releasePage(pRoot); + return rc; + } + }else{ + pRoot = pPageMove; + } + + /* Update the pointer-map and meta-data with the new root-page number. */ + ptrmapPut(pBt, pgnoRoot, PTRMAP_ROOTPAGE, 0, &rc); + if( rc ){ + releasePage(pRoot); + return rc; + } + + /* When the new root page was allocated, page 1 was made writable in + ** order either to increase the database filesize, or to decrement the + ** freelist count. Hence, the sqlite3BtreeUpdateMeta() call cannot fail. + */ + assert( sqlite3PagerIswriteable(pBt->pPage1->pDbPage) ); + rc = sqlite3BtreeUpdateMeta(p, 4, pgnoRoot); + if( NEVER(rc) ){ + releasePage(pRoot); + return rc; + } + + }else{ + rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0); + if( rc ) return rc; + } +#endif + assert( sqlite3PagerIswriteable(pRoot->pDbPage) ); + if( createTabFlags & BTREE_INTKEY ){ + ptfFlags = PTF_INTKEY | PTF_LEAFDATA | PTF_LEAF; + }else{ + ptfFlags = PTF_ZERODATA | PTF_LEAF; + } + zeroPage(pRoot, ptfFlags); + sqlite3PagerUnref(pRoot->pDbPage); + assert( (pBt->openFlags & BTREE_SINGLE)==0 || pgnoRoot==2 ); + *piTable = pgnoRoot; + return SQLITE_OK; +} +SQLITE_PRIVATE int sqlite3BtreeCreateTable(Btree *p, Pgno *piTable, int flags){ + int rc; + sqlite3BtreeEnter(p); + rc = btreeCreateTable(p, piTable, flags); + sqlite3BtreeLeave(p); + return rc; +} + +/* +** Erase the given database page and all its children. Return +** the page to the freelist. +*/ +static int clearDatabasePage( + BtShared *pBt, /* The BTree that contains the table */ + Pgno pgno, /* Page number to clear */ + int freePageFlag, /* Deallocate page if true */ + i64 *pnChange /* Add number of Cells freed to this counter */ +){ + MemPage *pPage; + int rc; + unsigned char *pCell; + int i; + int hdr; + CellInfo info; + + assert( sqlite3_mutex_held(pBt->mutex) ); + if( pgno>btreePagecount(pBt) ){ + return SQLITE_CORRUPT_PGNO(pgno); + } + rc = getAndInitPage(pBt, pgno, &pPage, 0); + if( rc ) return rc; + if( (pBt->openFlags & BTREE_SINGLE)==0 + && sqlite3PagerPageRefcount(pPage->pDbPage) != (1 + (pgno==1)) + ){ + rc = SQLITE_CORRUPT_PAGE(pPage); + goto cleardatabasepage_out; + } + hdr = pPage->hdrOffset; + for(i=0; inCell; i++){ + pCell = findCell(pPage, i); + if( !pPage->leaf ){ + rc = clearDatabasePage(pBt, get4byte(pCell), 1, pnChange); + if( rc ) goto cleardatabasepage_out; + } + BTREE_CLEAR_CELL(rc, pPage, pCell, info); + if( rc ) goto cleardatabasepage_out; + } + if( !pPage->leaf ){ + rc = clearDatabasePage(pBt, get4byte(&pPage->aData[hdr+8]), 1, pnChange); + if( rc ) goto cleardatabasepage_out; + if( pPage->intKey ) pnChange = 0; + } + if( pnChange ){ + testcase( !pPage->intKey ); + *pnChange += pPage->nCell; + } + if( freePageFlag ){ + freePage(pPage, &rc); + }else if( (rc = sqlite3PagerWrite(pPage->pDbPage))==0 ){ + zeroPage(pPage, pPage->aData[hdr] | PTF_LEAF); + } + +cleardatabasepage_out: + releasePage(pPage); + return rc; +} + +/* +** Delete all information from a single table in the database. iTable is +** the page number of the root of the table. After this routine returns, +** the root page is empty, but still exists. +** +** This routine will fail with SQLITE_LOCKED if there are any open +** read cursors on the table. Open write cursors are moved to the +** root of the table. +** +** If pnChange is not NULL, then the integer value pointed to by pnChange +** is incremented by the number of entries in the table. +*/ +SQLITE_PRIVATE int sqlite3BtreeClearTable(Btree *p, int iTable, i64 *pnChange){ + int rc; + BtShared *pBt = p->pBt; + sqlite3BtreeEnter(p); + assert( p->inTrans==TRANS_WRITE ); + + rc = saveAllCursors(pBt, (Pgno)iTable, 0); + + if( SQLITE_OK==rc ){ + /* Invalidate all incrblob cursors open on table iTable (assuming iTable + ** is the root of a table b-tree - if it is not, the following call is + ** a no-op). */ + if( p->hasIncrblobCur ){ + invalidateIncrblobCursors(p, (Pgno)iTable, 0, 1); + } + rc = clearDatabasePage(pBt, (Pgno)iTable, 0, pnChange); + } + sqlite3BtreeLeave(p); + return rc; +} + +/* +** Delete all information from the single table that pCur is open on. +** +** This routine only work for pCur on an ephemeral table. +*/ +SQLITE_PRIVATE int sqlite3BtreeClearTableOfCursor(BtCursor *pCur){ + return sqlite3BtreeClearTable(pCur->pBtree, pCur->pgnoRoot, 0); +} + +/* +** Erase all information in a table and add the root of the table to +** the freelist. Except, the root of the principle table (the one on +** page 1) is never added to the freelist. +** +** This routine will fail with SQLITE_LOCKED if there are any open +** cursors on the table. +** +** If AUTOVACUUM is enabled and the page at iTable is not the last +** root page in the database file, then the last root page +** in the database file is moved into the slot formerly occupied by +** iTable and that last slot formerly occupied by the last root page +** is added to the freelist instead of iTable. In this say, all +** root pages are kept at the beginning of the database file, which +** is necessary for AUTOVACUUM to work right. *piMoved is set to the +** page number that used to be the last root page in the file before +** the move. If no page gets moved, *piMoved is set to 0. +** The last root page is recorded in meta[3] and the value of +** meta[3] is updated by this procedure. +*/ +static int btreeDropTable(Btree *p, Pgno iTable, int *piMoved){ + int rc; + MemPage *pPage = 0; + BtShared *pBt = p->pBt; + + assert( sqlite3BtreeHoldsMutex(p) ); + assert( p->inTrans==TRANS_WRITE ); + assert( iTable>=2 ); + if( iTable>btreePagecount(pBt) ){ + return SQLITE_CORRUPT_PGNO(iTable); + } + + rc = sqlite3BtreeClearTable(p, iTable, 0); + if( rc ) return rc; + rc = btreeGetPage(pBt, (Pgno)iTable, &pPage, 0); + if( NEVER(rc) ){ + releasePage(pPage); + return rc; + } + + *piMoved = 0; + +#ifdef SQLITE_OMIT_AUTOVACUUM + freePage(pPage, &rc); + releasePage(pPage); +#else + if( pBt->autoVacuum ){ + Pgno maxRootPgno; + sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &maxRootPgno); + + if( iTable==maxRootPgno ){ + /* If the table being dropped is the table with the largest root-page + ** number in the database, put the root page on the free list. + */ + freePage(pPage, &rc); + releasePage(pPage); + if( rc!=SQLITE_OK ){ + return rc; + } + }else{ + /* The table being dropped does not have the largest root-page + ** number in the database. So move the page that does into the + ** gap left by the deleted root-page. + */ + MemPage *pMove; + releasePage(pPage); + rc = btreeGetPage(pBt, maxRootPgno, &pMove, 0); + if( rc!=SQLITE_OK ){ + return rc; + } + rc = relocatePage(pBt, pMove, PTRMAP_ROOTPAGE, 0, iTable, 0); + releasePage(pMove); + if( rc!=SQLITE_OK ){ + return rc; + } + pMove = 0; + rc = btreeGetPage(pBt, maxRootPgno, &pMove, 0); + freePage(pMove, &rc); + releasePage(pMove); + if( rc!=SQLITE_OK ){ + return rc; + } + *piMoved = maxRootPgno; + } + + /* Set the new 'max-root-page' value in the database header. This + ** is the old value less one, less one more if that happens to + ** be a root-page number, less one again if that is the + ** PENDING_BYTE_PAGE. + */ + maxRootPgno--; + while( maxRootPgno==PENDING_BYTE_PAGE(pBt) + || PTRMAP_ISPAGE(pBt, maxRootPgno) ){ + maxRootPgno--; + } + assert( maxRootPgno!=PENDING_BYTE_PAGE(pBt) ); + + rc = sqlite3BtreeUpdateMeta(p, 4, maxRootPgno); + }else{ + freePage(pPage, &rc); + releasePage(pPage); + } +#endif + return rc; +} +SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree *p, int iTable, int *piMoved){ + int rc; + sqlite3BtreeEnter(p); + rc = btreeDropTable(p, iTable, piMoved); + sqlite3BtreeLeave(p); + return rc; +} + + +/* +** This function may only be called if the b-tree connection already +** has a read or write transaction open on the database. +** +** Read the meta-information out of a database file. Meta[0] +** is the number of free pages currently in the database. Meta[1] +** through meta[15] are available for use by higher layers. Meta[0] +** is read-only, the others are read/write. +** +** The schema layer numbers meta values differently. At the schema +** layer (and the SetCookie and ReadCookie opcodes) the number of +** free pages is not visible. So Cookie[0] is the same as Meta[1]. +** +** This routine treats Meta[BTREE_DATA_VERSION] as a special case. Instead +** of reading the value out of the header, it instead loads the "DataVersion" +** from the pager. The BTREE_DATA_VERSION value is not actually stored in the +** database file. It is a number computed by the pager. But its access +** pattern is the same as header meta values, and so it is convenient to +** read it from this routine. +*/ +SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *p, int idx, u32 *pMeta){ + BtShared *pBt = p->pBt; + + sqlite3BtreeEnter(p); + assert( p->inTrans>TRANS_NONE ); + assert( SQLITE_OK==querySharedCacheTableLock(p, SCHEMA_ROOT, READ_LOCK) ); + assert( pBt->pPage1 ); + assert( idx>=0 && idx<=15 ); + + if( idx==BTREE_DATA_VERSION ){ + *pMeta = sqlite3PagerDataVersion(pBt->pPager) + p->iBDataVersion; + }else{ + *pMeta = get4byte(&pBt->pPage1->aData[36 + idx*4]); + } + + /* If auto-vacuum is disabled in this build and this is an auto-vacuum + ** database, mark the database as read-only. */ +#ifdef SQLITE_OMIT_AUTOVACUUM + if( idx==BTREE_LARGEST_ROOT_PAGE && *pMeta>0 ){ + pBt->btsFlags |= BTS_READ_ONLY; + } +#endif + + sqlite3BtreeLeave(p); +} + +/* +** Write meta-information back into the database. Meta[0] is +** read-only and may not be written. +*/ +SQLITE_PRIVATE int sqlite3BtreeUpdateMeta(Btree *p, int idx, u32 iMeta){ + BtShared *pBt = p->pBt; + unsigned char *pP1; + int rc; + assert( idx>=1 && idx<=15 ); + sqlite3BtreeEnter(p); + assert( p->inTrans==TRANS_WRITE ); + assert( pBt->pPage1!=0 ); + pP1 = pBt->pPage1->aData; + rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); + if( rc==SQLITE_OK ){ + put4byte(&pP1[36 + idx*4], iMeta); +#ifndef SQLITE_OMIT_AUTOVACUUM + if( idx==BTREE_INCR_VACUUM ){ + assert( pBt->autoVacuum || iMeta==0 ); + assert( iMeta==0 || iMeta==1 ); + pBt->incrVacuum = (u8)iMeta; + } +#endif + } + sqlite3BtreeLeave(p); + return rc; +} + +/* +** The first argument, pCur, is a cursor opened on some b-tree. Count the +** number of entries in the b-tree and write the result to *pnEntry. +** +** SQLITE_OK is returned if the operation is successfully executed. +** Otherwise, if an error is encountered (i.e. an IO error or database +** corruption) an SQLite error code is returned. +*/ +SQLITE_PRIVATE int sqlite3BtreeCount(sqlite3 *db, BtCursor *pCur, i64 *pnEntry){ + i64 nEntry = 0; /* Value to return in *pnEntry */ + int rc; /* Return code */ + + rc = moveToRoot(pCur); + if( rc==SQLITE_EMPTY ){ + *pnEntry = 0; + return SQLITE_OK; + } + + /* Unless an error occurs, the following loop runs one iteration for each + ** page in the B-Tree structure (not including overflow pages). + */ + while( rc==SQLITE_OK && !AtomicLoad(&db->u1.isInterrupted) ){ + int iIdx; /* Index of child node in parent */ + MemPage *pPage; /* Current page of the b-tree */ + + /* If this is a leaf page or the tree is not an int-key tree, then + ** this page contains countable entries. Increment the entry counter + ** accordingly. + */ + pPage = pCur->pPage; + if( pPage->leaf || !pPage->intKey ){ + nEntry += pPage->nCell; + } + + /* pPage is a leaf node. This loop navigates the cursor so that it + ** points to the first interior cell that it points to the parent of + ** the next page in the tree that has not yet been visited. The + ** pCur->aiIdx[pCur->iPage] value is set to the index of the parent cell + ** of the page, or to the number of cells in the page if the next page + ** to visit is the right-child of its parent. + ** + ** If all pages in the tree have been visited, return SQLITE_OK to the + ** caller. + */ + if( pPage->leaf ){ + do { + if( pCur->iPage==0 ){ + /* All pages of the b-tree have been visited. Return successfully. */ + *pnEntry = nEntry; + return moveToRoot(pCur); + } + moveToParent(pCur); + }while ( pCur->ix>=pCur->pPage->nCell ); + + pCur->ix++; + pPage = pCur->pPage; + } + + /* Descend to the child node of the cell that the cursor currently + ** points at. This is the right-child if (iIdx==pPage->nCell). + */ + iIdx = pCur->ix; + if( iIdx==pPage->nCell ){ + rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8])); + }else{ + rc = moveToChild(pCur, get4byte(findCell(pPage, iIdx))); + } + } + + /* An error has occurred. Return an error code. */ + return rc; +} + +/* +** Return the pager associated with a BTree. This routine is used for +** testing and debugging only. +*/ +SQLITE_PRIVATE Pager *sqlite3BtreePager(Btree *p){ + return p->pBt->pPager; +} + +#ifndef SQLITE_OMIT_INTEGRITY_CHECK +/* +** Record an OOM error during integrity_check +*/ +static void checkOom(IntegrityCk *pCheck){ + pCheck->rc = SQLITE_NOMEM; + pCheck->mxErr = 0; /* Causes integrity_check processing to stop */ + if( pCheck->nErr==0 ) pCheck->nErr++; +} + +/* +** Invoke the progress handler, if appropriate. Also check for an +** interrupt. +*/ +static void checkProgress(IntegrityCk *pCheck){ + sqlite3 *db = pCheck->db; + if( AtomicLoad(&db->u1.isInterrupted) ){ + pCheck->rc = SQLITE_INTERRUPT; + pCheck->nErr++; + pCheck->mxErr = 0; + } +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK + if( db->xProgress ){ + assert( db->nProgressOps>0 ); + pCheck->nStep++; + if( (pCheck->nStep % db->nProgressOps)==0 + && db->xProgress(db->pProgressArg) + ){ + pCheck->rc = SQLITE_INTERRUPT; + pCheck->nErr++; + pCheck->mxErr = 0; + } + } +#endif +} + +/* +** Append a message to the error message string. +*/ +static void checkAppendMsg( + IntegrityCk *pCheck, + const char *zFormat, + ... +){ + va_list ap; + checkProgress(pCheck); + if( !pCheck->mxErr ) return; + pCheck->mxErr--; + pCheck->nErr++; + va_start(ap, zFormat); + if( pCheck->errMsg.nChar ){ + sqlite3_str_append(&pCheck->errMsg, "\n", 1); + } + if( pCheck->zPfx ){ + sqlite3_str_appendf(&pCheck->errMsg, pCheck->zPfx, + pCheck->v0, pCheck->v1, pCheck->v2); + } + sqlite3_str_vappendf(&pCheck->errMsg, zFormat, ap); + va_end(ap); + if( pCheck->errMsg.accError==SQLITE_NOMEM ){ + checkOom(pCheck); + } +} +#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ + +#ifndef SQLITE_OMIT_INTEGRITY_CHECK + +/* +** Return non-zero if the bit in the IntegrityCk.aPgRef[] array that +** corresponds to page iPg is already set. +*/ +static int getPageReferenced(IntegrityCk *pCheck, Pgno iPg){ + assert( pCheck->aPgRef!=0 ); + assert( iPg<=pCheck->nCkPage && sizeof(pCheck->aPgRef[0])==1 ); + return (pCheck->aPgRef[iPg/8] & (1 << (iPg & 0x07))); +} + +/* +** Set the bit in the IntegrityCk.aPgRef[] array that corresponds to page iPg. +*/ +static void setPageReferenced(IntegrityCk *pCheck, Pgno iPg){ + assert( pCheck->aPgRef!=0 ); + assert( iPg<=pCheck->nCkPage && sizeof(pCheck->aPgRef[0])==1 ); + pCheck->aPgRef[iPg/8] |= (1 << (iPg & 0x07)); +} + + +/* +** Add 1 to the reference count for page iPage. If this is the second +** reference to the page, add an error message to pCheck->zErrMsg. +** Return 1 if there are 2 or more references to the page and 0 if +** if this is the first reference to the page. +** +** Also check that the page number is in bounds. +*/ +static int checkRef(IntegrityCk *pCheck, Pgno iPage){ + if( iPage>pCheck->nCkPage || iPage==0 ){ + checkAppendMsg(pCheck, "invalid page number %u", iPage); + return 1; + } + if( getPageReferenced(pCheck, iPage) ){ + checkAppendMsg(pCheck, "2nd reference to page %u", iPage); + return 1; + } + setPageReferenced(pCheck, iPage); + return 0; +} + +#ifndef SQLITE_OMIT_AUTOVACUUM +/* +** Check that the entry in the pointer-map for page iChild maps to +** page iParent, pointer type ptrType. If not, append an error message +** to pCheck. +*/ +static void checkPtrmap( + IntegrityCk *pCheck, /* Integrity check context */ + Pgno iChild, /* Child page number */ + u8 eType, /* Expected pointer map type */ + Pgno iParent /* Expected pointer map parent page number */ +){ + int rc; + u8 ePtrmapType; + Pgno iPtrmapParent; + + rc = ptrmapGet(pCheck->pBt, iChild, &ePtrmapType, &iPtrmapParent); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ) checkOom(pCheck); + checkAppendMsg(pCheck, "Failed to read ptrmap key=%u", iChild); + return; + } + + if( ePtrmapType!=eType || iPtrmapParent!=iParent ){ + checkAppendMsg(pCheck, + "Bad ptr map entry key=%u expected=(%u,%u) got=(%u,%u)", + iChild, eType, iParent, ePtrmapType, iPtrmapParent); + } +} +#endif + +/* +** Check the integrity of the freelist or of an overflow page list. +** Verify that the number of pages on the list is N. +*/ +static void checkList( + IntegrityCk *pCheck, /* Integrity checking context */ + int isFreeList, /* True for a freelist. False for overflow page list */ + Pgno iPage, /* Page number for first page in the list */ + u32 N /* Expected number of pages in the list */ +){ + int i; + u32 expected = N; + int nErrAtStart = pCheck->nErr; + while( iPage!=0 && pCheck->mxErr ){ + DbPage *pOvflPage; + unsigned char *pOvflData; + if( checkRef(pCheck, iPage) ) break; + N--; + if( sqlite3PagerGet(pCheck->pPager, (Pgno)iPage, &pOvflPage, 0) ){ + checkAppendMsg(pCheck, "failed to get page %u", iPage); + break; + } + pOvflData = (unsigned char *)sqlite3PagerGetData(pOvflPage); + if( isFreeList ){ + u32 n = (u32)get4byte(&pOvflData[4]); +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pCheck->pBt->autoVacuum ){ + checkPtrmap(pCheck, iPage, PTRMAP_FREEPAGE, 0); + } +#endif + if( n>pCheck->pBt->usableSize/4-2 ){ + checkAppendMsg(pCheck, + "freelist leaf count too big on page %u", iPage); + N--; + }else{ + for(i=0; i<(int)n; i++){ + Pgno iFreePage = get4byte(&pOvflData[8+i*4]); +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pCheck->pBt->autoVacuum ){ + checkPtrmap(pCheck, iFreePage, PTRMAP_FREEPAGE, 0); + } +#endif + checkRef(pCheck, iFreePage); + } + N -= n; + } + } +#ifndef SQLITE_OMIT_AUTOVACUUM + else{ + /* If this database supports auto-vacuum and iPage is not the last + ** page in this overflow list, check that the pointer-map entry for + ** the following page matches iPage. + */ + if( pCheck->pBt->autoVacuum && N>0 ){ + i = get4byte(pOvflData); + checkPtrmap(pCheck, i, PTRMAP_OVERFLOW2, iPage); + } + } +#endif + iPage = get4byte(pOvflData); + sqlite3PagerUnref(pOvflPage); + } + if( N && nErrAtStart==pCheck->nErr ){ + checkAppendMsg(pCheck, + "%s is %u but should be %u", + isFreeList ? "size" : "overflow list length", + expected-N, expected); + } +} +#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ + +/* +** An implementation of a min-heap. +** +** aHeap[0] is the number of elements on the heap. aHeap[1] is the +** root element. The daughter nodes of aHeap[N] are aHeap[N*2] +** and aHeap[N*2+1]. +** +** The heap property is this: Every node is less than or equal to both +** of its daughter nodes. A consequence of the heap property is that the +** root node aHeap[1] is always the minimum value currently in the heap. +** +** The btreeHeapInsert() routine inserts an unsigned 32-bit number onto +** the heap, preserving the heap property. The btreeHeapPull() routine +** removes the root element from the heap (the minimum value in the heap) +** and then moves other nodes around as necessary to preserve the heap +** property. +** +** This heap is used for cell overlap and coverage testing. Each u32 +** entry represents the span of a cell or freeblock on a btree page. +** The upper 16 bits are the index of the first byte of a range and the +** lower 16 bits are the index of the last byte of that range. +*/ +static void btreeHeapInsert(u32 *aHeap, u32 x){ + u32 j, i; + assert( aHeap!=0 ); + i = ++aHeap[0]; + aHeap[i] = x; + while( (j = i/2)>0 && aHeap[j]>aHeap[i] ){ + x = aHeap[j]; + aHeap[j] = aHeap[i]; + aHeap[i] = x; + i = j; + } +} +static int btreeHeapPull(u32 *aHeap, u32 *pOut){ + u32 j, i, x; + if( (x = aHeap[0])==0 ) return 0; + *pOut = aHeap[1]; + aHeap[1] = aHeap[x]; + aHeap[x] = 0xffffffff; + aHeap[0]--; + i = 1; + while( (j = i*2)<=aHeap[0] ){ + if( aHeap[j]>aHeap[j+1] ) j++; + if( aHeap[i]zPfx; + int saved_v1 = pCheck->v1; + int saved_v2 = pCheck->v2; + u8 savedIsInit = 0; + + /* Check that the page exists + */ + checkProgress(pCheck); + if( pCheck->mxErr==0 ) goto end_of_check; + pBt = pCheck->pBt; + usableSize = pBt->usableSize; + if( iPage==0 ) return 0; + if( checkRef(pCheck, iPage) ) return 0; + pCheck->zPfx = "Tree %u page %u: "; + pCheck->v1 = iPage; + if( (rc = btreeGetPage(pBt, iPage, &pPage, 0))!=0 ){ + checkAppendMsg(pCheck, + "unable to get the page. error code=%d", rc); + if( rc==SQLITE_IOERR_NOMEM ) pCheck->rc = SQLITE_NOMEM; + goto end_of_check; + } + + /* Clear MemPage.isInit to make sure the corruption detection code in + ** btreeInitPage() is executed. */ + savedIsInit = pPage->isInit; + pPage->isInit = 0; + if( (rc = btreeInitPage(pPage))!=0 ){ + assert( rc==SQLITE_CORRUPT ); /* The only possible error from InitPage */ + checkAppendMsg(pCheck, + "btreeInitPage() returns error code %d", rc); + goto end_of_check; + } + if( (rc = btreeComputeFreeSpace(pPage))!=0 ){ + assert( rc==SQLITE_CORRUPT ); + checkAppendMsg(pCheck, "free space corruption", rc); + goto end_of_check; + } + data = pPage->aData; + hdr = pPage->hdrOffset; + + /* Set up for cell analysis */ + pCheck->zPfx = "Tree %u page %u cell %u: "; + contentOffset = get2byteNotZero(&data[hdr+5]); + assert( contentOffset<=usableSize ); /* Enforced by btreeInitPage() */ + + /* EVIDENCE-OF: R-37002-32774 The two-byte integer at offset 3 gives the + ** number of cells on the page. */ + nCell = get2byte(&data[hdr+3]); + assert( pPage->nCell==nCell ); + if( pPage->leaf || pPage->intKey==0 ){ + pCheck->nRow += nCell; + } + + /* EVIDENCE-OF: R-23882-45353 The cell pointer array of a b-tree page + ** immediately follows the b-tree page header. */ + cellStart = hdr + 12 - 4*pPage->leaf; + assert( pPage->aCellIdx==&data[cellStart] ); + pCellIdx = &data[cellStart + 2*(nCell-1)]; + + if( !pPage->leaf ){ + /* Analyze the right-child page of internal pages */ + pgno = get4byte(&data[hdr+8]); +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pBt->autoVacuum ){ + pCheck->zPfx = "Tree %u page %u right child: "; + checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage); + } +#endif + depth = checkTreePage(pCheck, pgno, &maxKey, maxKey); + keyCanBeEqual = 0; + }else{ + /* For leaf pages, the coverage check will occur in the same loop + ** as the other cell checks, so initialize the heap. */ + heap = pCheck->heap; + heap[0] = 0; + } + + /* EVIDENCE-OF: R-02776-14802 The cell pointer array consists of K 2-byte + ** integer offsets to the cell contents. */ + for(i=nCell-1; i>=0 && pCheck->mxErr; i--){ + CellInfo info; + + /* Check cell size */ + pCheck->v2 = i; + assert( pCellIdx==&data[cellStart + i*2] ); + pc = get2byteAligned(pCellIdx); + pCellIdx -= 2; + if( pcusableSize-4 ){ + checkAppendMsg(pCheck, "Offset %u out of range %u..%u", + pc, contentOffset, usableSize-4); + doCoverageCheck = 0; + continue; + } + pCell = &data[pc]; + pPage->xParseCell(pPage, pCell, &info); + if( pc+info.nSize>usableSize ){ + checkAppendMsg(pCheck, "Extends off end of page"); + doCoverageCheck = 0; + continue; + } + + /* Check for integer primary key out of range */ + if( pPage->intKey ){ + if( keyCanBeEqual ? (info.nKey > maxKey) : (info.nKey >= maxKey) ){ + checkAppendMsg(pCheck, "Rowid %lld out of order", info.nKey); + } + maxKey = info.nKey; + keyCanBeEqual = 0; /* Only the first key on the page may ==maxKey */ + } + + /* Check the content overflow list */ + if( info.nPayload>info.nLocal ){ + u32 nPage; /* Number of pages on the overflow chain */ + Pgno pgnoOvfl; /* First page of the overflow chain */ + assert( pc + info.nSize - 4 <= usableSize ); + nPage = (info.nPayload - info.nLocal + usableSize - 5)/(usableSize - 4); + pgnoOvfl = get4byte(&pCell[info.nSize - 4]); +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pBt->autoVacuum ){ + checkPtrmap(pCheck, pgnoOvfl, PTRMAP_OVERFLOW1, iPage); + } +#endif + checkList(pCheck, 0, pgnoOvfl, nPage); + } + + if( !pPage->leaf ){ + /* Check sanity of left child page for internal pages */ + pgno = get4byte(pCell); +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pBt->autoVacuum ){ + checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage); + } +#endif + d2 = checkTreePage(pCheck, pgno, &maxKey, maxKey); + keyCanBeEqual = 0; + if( d2!=depth ){ + checkAppendMsg(pCheck, "Child page depth differs"); + depth = d2; + } + }else{ + /* Populate the coverage-checking heap for leaf pages */ + btreeHeapInsert(heap, (pc<<16)|(pc+info.nSize-1)); + } + } + *piMinKey = maxKey; + + /* Check for complete coverage of the page + */ + pCheck->zPfx = 0; + if( doCoverageCheck && pCheck->mxErr>0 ){ + /* For leaf pages, the min-heap has already been initialized and the + ** cells have already been inserted. But for internal pages, that has + ** not yet been done, so do it now */ + if( !pPage->leaf ){ + heap = pCheck->heap; + heap[0] = 0; + for(i=nCell-1; i>=0; i--){ + u32 size; + pc = get2byteAligned(&data[cellStart+i*2]); + size = pPage->xCellSize(pPage, &data[pc]); + btreeHeapInsert(heap, (pc<<16)|(pc+size-1)); + } + } + assert( heap!=0 ); + /* Add the freeblocks to the min-heap + ** + ** EVIDENCE-OF: R-20690-50594 The second field of the b-tree page header + ** is the offset of the first freeblock, or zero if there are no + ** freeblocks on the page. + */ + i = get2byte(&data[hdr+1]); + while( i>0 ){ + int size, j; + assert( (u32)i<=usableSize-4 ); /* Enforced by btreeComputeFreeSpace() */ + size = get2byte(&data[i+2]); + assert( (u32)(i+size)<=usableSize ); /* due to btreeComputeFreeSpace() */ + btreeHeapInsert(heap, (((u32)i)<<16)|(i+size-1)); + /* EVIDENCE-OF: R-58208-19414 The first 2 bytes of a freeblock are a + ** big-endian integer which is the offset in the b-tree page of the next + ** freeblock in the chain, or zero if the freeblock is the last on the + ** chain. */ + j = get2byte(&data[i]); + /* EVIDENCE-OF: R-06866-39125 Freeblocks are always connected in order of + ** increasing offset. */ + assert( j==0 || j>i+size ); /* Enforced by btreeComputeFreeSpace() */ + assert( (u32)j<=usableSize-4 ); /* Enforced by btreeComputeFreeSpace() */ + i = j; + } + /* Analyze the min-heap looking for overlap between cells and/or + ** freeblocks, and counting the number of untracked bytes in nFrag. + ** + ** Each min-heap entry is of the form: (start_address<<16)|end_address. + ** There is an implied first entry the covers the page header, the cell + ** pointer index, and the gap between the cell pointer index and the start + ** of cell content. + ** + ** The loop below pulls entries from the min-heap in order and compares + ** the start_address against the previous end_address. If there is an + ** overlap, that means bytes are used multiple times. If there is a gap, + ** that gap is added to the fragmentation count. + */ + nFrag = 0; + prev = contentOffset - 1; /* Implied first min-heap entry */ + while( btreeHeapPull(heap,&x) ){ + if( (prev&0xffff)>=(x>>16) ){ + checkAppendMsg(pCheck, + "Multiple uses for byte %u of page %u", x>>16, iPage); + break; + }else{ + nFrag += (x>>16) - (prev&0xffff) - 1; + prev = x; + } + } + nFrag += usableSize - (prev&0xffff) - 1; + /* EVIDENCE-OF: R-43263-13491 The total number of bytes in all fragments + ** is stored in the fifth field of the b-tree page header. + ** EVIDENCE-OF: R-07161-27322 The one-byte integer at offset 7 gives the + ** number of fragmented free bytes within the cell content area. + */ + if( heap[0]==0 && nFrag!=data[hdr+7] ){ + checkAppendMsg(pCheck, + "Fragmentation of %u bytes reported as %u on page %u", + nFrag, data[hdr+7], iPage); + } + } + +end_of_check: + if( !doCoverageCheck ) pPage->isInit = savedIsInit; + releasePage(pPage); + pCheck->zPfx = saved_zPfx; + pCheck->v1 = saved_v1; + pCheck->v2 = saved_v2; + return depth+1; +} +#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ + +#ifndef SQLITE_OMIT_INTEGRITY_CHECK +/* +** This routine does a complete check of the given BTree file. aRoot[] is +** an array of pages numbers were each page number is the root page of +** a table. nRoot is the number of entries in aRoot. +** +** A read-only or read-write transaction must be opened before calling +** this function. +** +** Write the number of error seen in *pnErr. Except for some memory +** allocation errors, an error message held in memory obtained from +** malloc is returned if *pnErr is non-zero. If *pnErr==0 then NULL is +** returned. If a memory allocation error occurs, NULL is returned. +** +** If the first entry in aRoot[] is 0, that indicates that the list of +** root pages is incomplete. This is a "partial integrity-check". This +** happens when performing an integrity check on a single table. The +** zero is skipped, of course. But in addition, the freelist checks +** and the checks to make sure every page is referenced are also skipped, +** since obviously it is not possible to know which pages are covered by +** the unverified btrees. Except, if aRoot[1] is 1, then the freelist +** checks are still performed. +*/ +SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck( + sqlite3 *db, /* Database connection that is running the check */ + Btree *p, /* The btree to be checked */ + Pgno *aRoot, /* An array of root pages numbers for individual trees */ + Mem *aCnt, /* Memory cells to write counts for each tree to */ + int nRoot, /* Number of entries in aRoot[] */ + int mxErr, /* Stop reporting errors after this many */ + int *pnErr, /* OUT: Write number of errors seen to this variable */ + char **pzOut /* OUT: Write the error message string here */ +){ + Pgno i; + IntegrityCk sCheck; + BtShared *pBt = p->pBt; + u64 savedDbFlags = pBt->db->flags; + char zErr[100]; + int bPartial = 0; /* True if not checking all btrees */ + int bCkFreelist = 1; /* True to scan the freelist */ + VVA_ONLY( int nRef ); + + assert( nRoot>0 ); + assert( aCnt!=0 ); + + /* aRoot[0]==0 means this is a partial check */ + if( aRoot[0]==0 ){ + assert( nRoot>1 ); + bPartial = 1; + if( aRoot[1]!=1 ) bCkFreelist = 0; + } + + sqlite3BtreeEnter(p); + assert( p->inTrans>TRANS_NONE && pBt->inTransaction>TRANS_NONE ); + VVA_ONLY( nRef = sqlite3PagerRefcount(pBt->pPager) ); + assert( nRef>=0 ); + memset(&sCheck, 0, sizeof(sCheck)); + sCheck.db = db; + sCheck.pBt = pBt; + sCheck.pPager = pBt->pPager; + sCheck.nCkPage = btreePagecount(sCheck.pBt); + sCheck.mxErr = mxErr; + sqlite3StrAccumInit(&sCheck.errMsg, 0, zErr, sizeof(zErr), SQLITE_MAX_LENGTH); + sCheck.errMsg.printfFlags = SQLITE_PRINTF_INTERNAL; + if( sCheck.nCkPage==0 ){ + goto integrity_ck_cleanup; + } + + sCheck.aPgRef = sqlite3MallocZero((sCheck.nCkPage / 8)+ 1); + if( !sCheck.aPgRef ){ + checkOom(&sCheck); + goto integrity_ck_cleanup; + } + sCheck.heap = (u32*)sqlite3PageMalloc( pBt->pageSize ); + if( sCheck.heap==0 ){ + checkOom(&sCheck); + goto integrity_ck_cleanup; + } + + i = PENDING_BYTE_PAGE(pBt); + if( i<=sCheck.nCkPage ) setPageReferenced(&sCheck, i); + + /* Check the integrity of the freelist + */ + if( bCkFreelist ){ + sCheck.zPfx = "Freelist: "; + checkList(&sCheck, 1, get4byte(&pBt->pPage1->aData[32]), + get4byte(&pBt->pPage1->aData[36])); + sCheck.zPfx = 0; + } + + /* Check all the tables. + */ +#ifndef SQLITE_OMIT_AUTOVACUUM + if( !bPartial ){ + if( pBt->autoVacuum ){ + Pgno mx = 0; + Pgno mxInHdr; + for(i=0; (int)ipPage1->aData[52]); + if( mx!=mxInHdr ){ + checkAppendMsg(&sCheck, + "max rootpage (%u) disagrees with header (%u)", + mx, mxInHdr + ); + } + }else if( get4byte(&pBt->pPage1->aData[64])!=0 ){ + checkAppendMsg(&sCheck, + "incremental_vacuum enabled with a max rootpage of zero" + ); + } + } +#endif + testcase( pBt->db->flags & SQLITE_CellSizeCk ); + pBt->db->flags &= ~(u64)SQLITE_CellSizeCk; + for(i=0; (int)iautoVacuum && aRoot[i]>1 && !bPartial ){ + checkPtrmap(&sCheck, aRoot[i], PTRMAP_ROOTPAGE, 0); + } +#endif + sCheck.v0 = aRoot[i]; + checkTreePage(&sCheck, aRoot[i], ¬Used, LARGEST_INT64); + } + sqlite3MemSetArrayInt64(aCnt, i, sCheck.nRow); + } + pBt->db->flags = savedDbFlags; + + /* Make sure every page in the file is referenced + */ + if( !bPartial ){ + for(i=1; i<=sCheck.nCkPage && sCheck.mxErr; i++){ +#ifdef SQLITE_OMIT_AUTOVACUUM + if( getPageReferenced(&sCheck, i)==0 ){ + checkAppendMsg(&sCheck, "Page %u: never used", i); + } +#else + /* If the database supports auto-vacuum, make sure no tables contain + ** references to pointer-map pages. + */ + if( getPageReferenced(&sCheck, i)==0 && + (PTRMAP_PAGENO(pBt, i)!=i || !pBt->autoVacuum) ){ + checkAppendMsg(&sCheck, "Page %u: never used", i); + } + if( getPageReferenced(&sCheck, i)!=0 && + (PTRMAP_PAGENO(pBt, i)==i && pBt->autoVacuum) ){ + checkAppendMsg(&sCheck, "Page %u: pointer map referenced", i); + } +#endif + } + } + + /* Clean up and report errors. + */ +integrity_ck_cleanup: + sqlite3PageFree(sCheck.heap); + sqlite3_free(sCheck.aPgRef); + *pnErr = sCheck.nErr; + if( sCheck.nErr==0 ){ + sqlite3_str_reset(&sCheck.errMsg); + *pzOut = 0; + }else{ + *pzOut = sqlite3StrAccumFinish(&sCheck.errMsg); + } + /* Make sure this analysis did not leave any unref() pages. */ + assert( nRef==sqlite3PagerRefcount(pBt->pPager) ); + sqlite3BtreeLeave(p); + return sCheck.rc; +} +#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ + +/* +** Return the full pathname of the underlying database file. Return +** an empty string if the database is in-memory or a TEMP database. +** +** The pager filename is invariant as long as the pager is +** open so it is safe to access without the BtShared mutex. +*/ +SQLITE_PRIVATE const char *sqlite3BtreeGetFilename(Btree *p){ + assert( p->pBt->pPager!=0 ); + return sqlite3PagerFilename(p->pBt->pPager, 1); +} + +/* +** Return the pathname of the journal file for this database. The return +** value of this routine is the same regardless of whether the journal file +** has been created or not. +** +** The pager journal filename is invariant as long as the pager is +** open so it is safe to access without the BtShared mutex. +*/ +SQLITE_PRIVATE const char *sqlite3BtreeGetJournalname(Btree *p){ + assert( p->pBt->pPager!=0 ); + return sqlite3PagerJournalname(p->pBt->pPager); +} + +/* +** Return one of SQLITE_TXN_NONE, SQLITE_TXN_READ, or SQLITE_TXN_WRITE +** to describe the current transaction state of Btree p. +*/ +SQLITE_PRIVATE int sqlite3BtreeTxnState(Btree *p){ + assert( p==0 || sqlite3_mutex_held(p->db->mutex) ); + return p ? p->inTrans : 0; +} + +#ifndef SQLITE_OMIT_WAL +/* +** Run a checkpoint on the Btree passed as the first argument. +** +** Return SQLITE_LOCKED if this or any other connection has an open +** transaction on the shared-cache the argument Btree is connected to. +** +** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART. +*/ +SQLITE_PRIVATE int sqlite3BtreeCheckpoint(Btree *p, int eMode, int *pnLog, int *pnCkpt){ + int rc = SQLITE_OK; + if( p ){ + BtShared *pBt = p->pBt; + sqlite3BtreeEnter(p); + if( pBt->inTransaction!=TRANS_NONE ){ + rc = SQLITE_LOCKED; + }else{ + rc = sqlite3PagerCheckpoint(pBt->pPager, p->db, eMode, pnLog, pnCkpt); + } + sqlite3BtreeLeave(p); + } + return rc; +} +#endif + +/* +** Return true if there is currently a backup running on Btree p. +*/ +SQLITE_PRIVATE int sqlite3BtreeIsInBackup(Btree *p){ + assert( p ); + assert( sqlite3_mutex_held(p->db->mutex) ); + return p->nBackup!=0; +} + +/* +** This function returns a pointer to a blob of memory associated with +** a single shared-btree. The memory is used by client code for its own +** purposes (for example, to store a high-level schema associated with +** the shared-btree). The btree layer manages reference counting issues. +** +** The first time this is called on a shared-btree, nBytes bytes of memory +** are allocated, zeroed, and returned to the caller. For each subsequent +** call the nBytes parameter is ignored and a pointer to the same blob +** of memory returned. +** +** If the nBytes parameter is 0 and the blob of memory has not yet been +** allocated, a null pointer is returned. If the blob has already been +** allocated, it is returned as normal. +** +** Just before the shared-btree is closed, the function passed as the +** xFree argument when the memory allocation was made is invoked on the +** blob of allocated memory. The xFree function should not call sqlite3_free() +** on the memory, the btree layer does that. +*/ +SQLITE_PRIVATE void *sqlite3BtreeSchema(Btree *p, int nBytes, void(*xFree)(void *)){ + BtShared *pBt = p->pBt; + assert( nBytes==0 || nBytes==sizeof(Schema) ); + sqlite3BtreeEnter(p); + if( !pBt->pSchema && nBytes ){ + pBt->pSchema = sqlite3DbMallocZero(0, nBytes); + pBt->xFreeSchema = xFree; + } + sqlite3BtreeLeave(p); + return pBt->pSchema; +} + +/* +** Return SQLITE_LOCKED_SHAREDCACHE if another user of the same shared +** btree as the argument handle holds an exclusive lock on the +** sqlite_schema table. Otherwise SQLITE_OK. +*/ +SQLITE_PRIVATE int sqlite3BtreeSchemaLocked(Btree *p){ + int rc; + UNUSED_PARAMETER(p); /* only used in DEBUG builds */ + assert( sqlite3_mutex_held(p->db->mutex) ); + sqlite3BtreeEnter(p); + rc = querySharedCacheTableLock(p, SCHEMA_ROOT, READ_LOCK); + assert( rc==SQLITE_OK || rc==SQLITE_LOCKED_SHAREDCACHE ); + sqlite3BtreeLeave(p); + return rc; +} + + +#ifndef SQLITE_OMIT_SHARED_CACHE +/* +** Obtain a lock on the table whose root page is iTab. The +** lock is a write lock if isWritelock is true or a read lock +** if it is false. +*/ +SQLITE_PRIVATE int sqlite3BtreeLockTable(Btree *p, int iTab, u8 isWriteLock){ + int rc = SQLITE_OK; + assert( p->inTrans!=TRANS_NONE ); + if( p->sharable ){ + u8 lockType = READ_LOCK + isWriteLock; + assert( READ_LOCK+1==WRITE_LOCK ); + assert( isWriteLock==0 || isWriteLock==1 ); + + sqlite3BtreeEnter(p); + rc = querySharedCacheTableLock(p, iTab, lockType); + if( rc==SQLITE_OK ){ + rc = setSharedCacheTableLock(p, iTab, lockType); + } + sqlite3BtreeLeave(p); + } + return rc; +} +#endif + +#ifndef SQLITE_OMIT_INCRBLOB +/* +** Argument pCsr must be a cursor opened for writing on an +** INTKEY table currently pointing at a valid table entry. +** This function modifies the data stored as part of that entry. +** +** Only the data content may only be modified, it is not possible to +** change the length of the data stored. If this function is called with +** parameters that attempt to write past the end of the existing data, +** no modifications are made and SQLITE_CORRUPT is returned. +*/ +SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor *pCsr, u32 offset, u32 amt, void *z){ + int rc; + assert( cursorOwnsBtShared(pCsr) ); + assert( sqlite3_mutex_held(pCsr->pBtree->db->mutex) ); + assert( pCsr->curFlags & BTCF_Incrblob ); + + rc = restoreCursorPosition(pCsr); + if( rc!=SQLITE_OK ){ + return rc; + } + assert( pCsr->eState!=CURSOR_REQUIRESEEK ); + if( pCsr->eState!=CURSOR_VALID ){ + return SQLITE_ABORT; + } + + /* Save the positions of all other cursors open on this table. This is + ** required in case any of them are holding references to an xFetch + ** version of the b-tree page modified by the accessPayload call below. + ** + ** Note that pCsr must be open on a INTKEY table and saveCursorPosition() + ** and hence saveAllCursors() cannot fail on a BTREE_INTKEY table, hence + ** saveAllCursors can only return SQLITE_OK. + */ + VVA_ONLY(rc =) saveAllCursors(pCsr->pBt, pCsr->pgnoRoot, pCsr); + assert( rc==SQLITE_OK ); + + /* Check some assumptions: + ** (a) the cursor is open for writing, + ** (b) there is a read/write transaction open, + ** (c) the connection holds a write-lock on the table (if required), + ** (d) there are no conflicting read-locks, and + ** (e) the cursor points at a valid row of an intKey table. + */ + if( (pCsr->curFlags & BTCF_WriteFlag)==0 ){ + return SQLITE_READONLY; + } + assert( (pCsr->pBt->btsFlags & BTS_READ_ONLY)==0 + && pCsr->pBt->inTransaction==TRANS_WRITE ); + assert( hasSharedCacheTableLock(pCsr->pBtree, pCsr->pgnoRoot, 0, 2) ); + assert( !hasReadConflicts(pCsr->pBtree, pCsr->pgnoRoot) ); + assert( pCsr->pPage->intKey ); + + return accessPayload(pCsr, offset, amt, (unsigned char *)z, 1); +} + +/* +** Mark this cursor as an incremental blob cursor. +*/ +SQLITE_PRIVATE void sqlite3BtreeIncrblobCursor(BtCursor *pCur){ + pCur->curFlags |= BTCF_Incrblob; + pCur->pBtree->hasIncrblobCur = 1; +} +#endif + +/* +** Set both the "read version" (single byte at byte offset 18) and +** "write version" (single byte at byte offset 19) fields in the database +** header to iVersion. +*/ +SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBtree, int iVersion){ + BtShared *pBt = pBtree->pBt; + int rc; /* Return code */ + + assert( iVersion==1 || iVersion==2 ); + + /* If setting the version fields to 1, do not automatically open the + ** WAL connection, even if the version fields are currently set to 2. + */ + pBt->btsFlags &= ~BTS_NO_WAL; + if( iVersion==1 ) pBt->btsFlags |= BTS_NO_WAL; + + rc = sqlite3BtreeBeginTrans(pBtree, 0, 0); + if( rc==SQLITE_OK ){ + u8 *aData = pBt->pPage1->aData; + if( aData[18]!=(u8)iVersion || aData[19]!=(u8)iVersion ){ + rc = sqlite3BtreeBeginTrans(pBtree, 2, 0); + if( rc==SQLITE_OK ){ + rc = sqlite3PagerWrite(pBt->pPage1->pDbPage); + if( rc==SQLITE_OK ){ + aData[18] = (u8)iVersion; + aData[19] = (u8)iVersion; + } + } + } + } + + pBt->btsFlags &= ~BTS_NO_WAL; + return rc; +} + +/* +** Return true if the cursor has a hint specified. This routine is +** only used from within assert() statements +*/ +SQLITE_PRIVATE int sqlite3BtreeCursorHasHint(BtCursor *pCsr, unsigned int mask){ + return (pCsr->hints & mask)!=0; +} + +/* +** Return true if the given Btree is read-only. +*/ +SQLITE_PRIVATE int sqlite3BtreeIsReadonly(Btree *p){ + return (p->pBt->btsFlags & BTS_READ_ONLY)!=0; +} + +/* +** Return the size of the header added to each page by this module. +*/ +SQLITE_PRIVATE int sqlite3HeaderSizeBtree(void){ return ROUND8(sizeof(MemPage)); } + +/* +** If no transaction is active and the database is not a temp-db, clear +** the in-memory pager cache. +*/ +SQLITE_PRIVATE void sqlite3BtreeClearCache(Btree *p){ + BtShared *pBt = p->pBt; + if( pBt->inTransaction==TRANS_NONE ){ + sqlite3PagerClearCache(pBt->pPager); + } +} + +#if !defined(SQLITE_OMIT_SHARED_CACHE) +/* +** Return true if the Btree passed as the only argument is sharable. +*/ +SQLITE_PRIVATE int sqlite3BtreeSharable(Btree *p){ + return p->sharable; +} + +/* +** Return the number of connections to the BtShared object accessed by +** the Btree handle passed as the only argument. For private caches +** this is always 1. For shared caches it may be 1 or greater. +*/ +SQLITE_PRIVATE int sqlite3BtreeConnectionCount(Btree *p){ + testcase( p->sharable ); + return p->pBt->nRef; +} +#endif + +/************** End of btree.c ***********************************************/ +/************** Begin file backup.c ******************************************/ +/* +** 2009 January 28 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains the implementation of the sqlite3_backup_XXX() +** API functions and the related features. +*/ +/* #include "sqliteInt.h" */ +/* #include "btreeInt.h" */ + +/* +** Structure allocated for each backup operation. +*/ +struct sqlite3_backup { + sqlite3* pDestDb; /* Destination database handle */ + Btree *pDest; /* Destination b-tree file */ + u32 iDestSchema; /* Original schema cookie in destination */ + int bDestLocked; /* True once a write-transaction is open on pDest */ + + Pgno iNext; /* Page number of the next source page to copy */ + sqlite3* pSrcDb; /* Source database handle */ + Btree *pSrc; /* Source b-tree file */ + + int rc; /* Backup process error code */ + + /* These two variables are set by every call to backup_step(). They are + ** read by calls to backup_remaining() and backup_pagecount(). + */ + Pgno nRemaining; /* Number of pages left to copy */ + Pgno nPagecount; /* Total number of pages to copy */ + + int isAttached; /* True once backup has been registered with pager */ + sqlite3_backup *pNext; /* Next backup associated with source pager */ +}; + +/* +** THREAD SAFETY NOTES: +** +** Once it has been created using backup_init(), a single sqlite3_backup +** structure may be accessed via two groups of thread-safe entry points: +** +** * Via the sqlite3_backup_XXX() API function backup_step() and +** backup_finish(). Both these functions obtain the source database +** handle mutex and the mutex associated with the source BtShared +** structure, in that order. +** +** * Via the BackupUpdate() and BackupRestart() functions, which are +** invoked by the pager layer to report various state changes in +** the page cache associated with the source database. The mutex +** associated with the source database BtShared structure will always +** be held when either of these functions are invoked. +** +** The other sqlite3_backup_XXX() API functions, backup_remaining() and +** backup_pagecount() are not thread-safe functions. If they are called +** while some other thread is calling backup_step() or backup_finish(), +** the values returned may be invalid. There is no way for a call to +** BackupUpdate() or BackupRestart() to interfere with backup_remaining() +** or backup_pagecount(). +** +** Depending on the SQLite configuration, the database handles and/or +** the Btree objects may have their own mutexes that require locking. +** Non-sharable Btrees (in-memory databases for example), do not have +** associated mutexes. +*/ + +/* +** Return a pointer corresponding to database zDb (i.e. "main", "temp") +** in connection handle pDb. If such a database cannot be found, return +** a NULL pointer and write an error message to pErrorDb. +** +** If the "temp" database is requested, it may need to be opened by this +** function. If an error occurs while doing so, return 0 and write an +** error message to pErrorDb. +*/ +static Btree *findBtree(sqlite3 *pErrorDb, sqlite3 *pDb, const char *zDb){ + int i = sqlite3FindDbName(pDb, zDb); + + if( i==1 ){ + Parse sParse; + int rc = 0; + sqlite3ParseObjectInit(&sParse,pDb); + if( sqlite3OpenTempDatabase(&sParse) ){ + sqlite3ErrorWithMsg(pErrorDb, sParse.rc, "%s", sParse.zErrMsg); + rc = SQLITE_ERROR; + } + sqlite3DbFree(pErrorDb, sParse.zErrMsg); + sqlite3ParseObjectReset(&sParse); + if( rc ){ + return 0; + } + } + + if( i<0 ){ + sqlite3ErrorWithMsg(pErrorDb, SQLITE_ERROR, "unknown database %s", zDb); + return 0; + } + + return pDb->aDb[i].pBt; +} + +/* +** Attempt to set the page size of the destination to match the page size +** of the source. +*/ +static int setDestPgsz(sqlite3_backup *p){ + int rc; + rc = sqlite3BtreeSetPageSize(p->pDest,sqlite3BtreeGetPageSize(p->pSrc),0,0); + return rc; +} + +/* +** Check that there is no open read-transaction on the b-tree passed as the +** second argument. If there is not, return SQLITE_OK. Otherwise, if there +** is an open read-transaction, return SQLITE_ERROR and leave an error +** message in database handle db. +*/ +static int checkReadTransaction(sqlite3 *db, Btree *p){ + if( sqlite3BtreeTxnState(p)!=SQLITE_TXN_NONE ){ + sqlite3ErrorWithMsg(db, SQLITE_ERROR, "destination database is in use"); + return SQLITE_ERROR; + } + return SQLITE_OK; +} + +/* +** Create an sqlite3_backup process to copy the contents of zSrcDb from +** connection handle pSrcDb to zDestDb in pDestDb. If successful, return +** a pointer to the new sqlite3_backup object. +** +** If an error occurs, NULL is returned and an error code and error message +** stored in database handle pDestDb. +*/ +SQLITE_API sqlite3_backup *sqlite3_backup_init( + sqlite3* pDestDb, /* Database to write to */ + const char *zDestDb, /* Name of database within pDestDb */ + sqlite3* pSrcDb, /* Database connection to read from */ + const char *zSrcDb /* Name of database within pSrcDb */ +){ + sqlite3_backup *p; /* Value to return */ + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(pSrcDb)||!sqlite3SafetyCheckOk(pDestDb) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + + /* Lock the source database handle. The destination database + ** handle is not locked in this routine, but it is locked in + ** sqlite3_backup_step(). The user is required to ensure that no + ** other thread accesses the destination handle for the duration + ** of the backup operation. Any attempt to use the destination + ** database connection while a backup is in progress may cause + ** a malfunction or a deadlock. + */ + sqlite3_mutex_enter(pSrcDb->mutex); + sqlite3_mutex_enter(pDestDb->mutex); + + if( pSrcDb==pDestDb ){ + sqlite3ErrorWithMsg( + pDestDb, SQLITE_ERROR, "source and destination must be distinct" + ); + p = 0; + }else { + /* Allocate space for a new sqlite3_backup object... + ** EVIDENCE-OF: R-64852-21591 The sqlite3_backup object is created by a + ** call to sqlite3_backup_init() and is destroyed by a call to + ** sqlite3_backup_finish(). */ + p = (sqlite3_backup *)sqlite3MallocZero(sizeof(sqlite3_backup)); + if( !p ){ + sqlite3Error(pDestDb, SQLITE_NOMEM_BKPT); + } + } + + /* If the allocation succeeded, populate the new object. */ + if( p ){ + p->pSrc = findBtree(pDestDb, pSrcDb, zSrcDb); + p->pDest = findBtree(pDestDb, pDestDb, zDestDb); + p->pDestDb = pDestDb; + p->pSrcDb = pSrcDb; + p->iNext = 1; + p->isAttached = 0; + + if( 0==p->pSrc || 0==p->pDest + || checkReadTransaction(pDestDb, p->pDest)!=SQLITE_OK + ){ + /* One (or both) of the named databases did not exist or an OOM + ** error was hit. Or there is a transaction open on the destination + ** database. The error has already been written into the pDestDb + ** handle. All that is left to do here is free the sqlite3_backup + ** structure. */ + sqlite3_free(p); + p = 0; + } + } + if( p ){ + p->pSrc->nBackup++; + } + + sqlite3_mutex_leave(pDestDb->mutex); + sqlite3_mutex_leave(pSrcDb->mutex); + return p; +} + +/* +** Argument rc is an SQLite error code. Return true if this error is +** considered fatal if encountered during a backup operation. All errors +** are considered fatal except for SQLITE_BUSY and SQLITE_LOCKED. +*/ +static int isFatalError(int rc){ + return (rc!=SQLITE_OK && rc!=SQLITE_BUSY && ALWAYS(rc!=SQLITE_LOCKED)); +} + +/* +** Parameter zSrcData points to a buffer containing the data for +** page iSrcPg from the source database. Copy this data into the +** destination database. +*/ +static int backupOnePage( + sqlite3_backup *p, /* Backup handle */ + Pgno iSrcPg, /* Source database page to backup */ + const u8 *zSrcData, /* Source database page data */ + int bUpdate /* True for an update, false otherwise */ +){ + Pager * const pDestPager = sqlite3BtreePager(p->pDest); + const int nSrcPgsz = sqlite3BtreeGetPageSize(p->pSrc); + int nDestPgsz = sqlite3BtreeGetPageSize(p->pDest); + const int nCopy = MIN(nSrcPgsz, nDestPgsz); + const i64 iEnd = (i64)iSrcPg*(i64)nSrcPgsz; + int rc = SQLITE_OK; + i64 iOff; + + assert( sqlite3BtreeGetReserveNoMutex(p->pSrc)>=0 ); + assert( p->bDestLocked ); + assert( !isFatalError(p->rc) ); + assert( iSrcPg!=PENDING_BYTE_PAGE(p->pSrc->pBt) ); + assert( zSrcData ); + assert( nSrcPgsz==nDestPgsz || sqlite3PagerIsMemdb(pDestPager)==0 ); + + /* This loop runs once for each destination page spanned by the source + ** page. For each iteration, variable iOff is set to the byte offset + ** of the destination page. + */ + for(iOff=iEnd-(i64)nSrcPgsz; rc==SQLITE_OK && iOffpDest->pBt) ) continue; + if( SQLITE_OK==(rc = sqlite3PagerGet(pDestPager, iDest, &pDestPg, 0)) + && SQLITE_OK==(rc = sqlite3PagerWrite(pDestPg)) + ){ + const u8 *zIn = &zSrcData[iOff%nSrcPgsz]; + u8 *zDestData = sqlite3PagerGetData(pDestPg); + u8 *zOut = &zDestData[iOff%nDestPgsz]; + + /* Copy the data from the source page into the destination page. + ** Then clear the Btree layer MemPage.isInit flag. Both this module + ** and the pager code use this trick (clearing the first byte + ** of the page 'extra' space to invalidate the Btree layers + ** cached parse of the page). MemPage.isInit is marked + ** "MUST BE FIRST" for this purpose. + */ + memcpy(zOut, zIn, nCopy); + ((u8 *)sqlite3PagerGetExtra(pDestPg))[0] = 0; + if( iOff==0 && bUpdate==0 ){ + sqlite3Put4byte(&zOut[28], sqlite3BtreeLastPage(p->pSrc)); + } + } + sqlite3PagerUnref(pDestPg); + } + + return rc; +} + +/* +** If pFile is currently larger than iSize bytes, then truncate it to +** exactly iSize bytes. If pFile is not larger than iSize bytes, then +** this function is a no-op. +** +** Return SQLITE_OK if everything is successful, or an SQLite error +** code if an error occurs. +*/ +static int backupTruncateFile(sqlite3_file *pFile, i64 iSize){ + i64 iCurrent; + int rc = sqlite3OsFileSize(pFile, &iCurrent); + if( rc==SQLITE_OK && iCurrent>iSize ){ + rc = sqlite3OsTruncate(pFile, iSize); + } + return rc; +} + +/* +** Register this backup object with the associated source pager for +** callbacks when pages are changed or the cache invalidated. +*/ +static void attachBackupObject(sqlite3_backup *p){ + sqlite3_backup **pp; + assert( sqlite3BtreeHoldsMutex(p->pSrc) ); + pp = sqlite3PagerBackupPtr(sqlite3BtreePager(p->pSrc)); + p->pNext = *pp; + *pp = p; + p->isAttached = 1; +} + +/* +** Copy nPage pages from the source b-tree to the destination. +*/ +SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage){ + int rc; + int destMode; /* Destination journal mode */ + int pgszSrc = 0; /* Source page size */ + int pgszDest = 0; /* Destination page size */ + +#ifdef SQLITE_ENABLE_API_ARMOR + if( p==0 ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(p->pSrcDb->mutex); + sqlite3BtreeEnter(p->pSrc); + if( p->pDestDb ){ + sqlite3_mutex_enter(p->pDestDb->mutex); + } + + rc = p->rc; + if( !isFatalError(rc) ){ + Pager * const pSrcPager = sqlite3BtreePager(p->pSrc); /* Source pager */ + Pager * const pDestPager = sqlite3BtreePager(p->pDest); /* Dest pager */ + int ii; /* Iterator variable */ + int nSrcPage = -1; /* Size of source db in pages */ + int bCloseTrans = 0; /* True if src db requires unlocking */ + + /* If the source pager is currently in a write-transaction, return + ** SQLITE_BUSY immediately. + */ + if( p->pDestDb && p->pSrc->pBt->inTransaction==TRANS_WRITE ){ + rc = SQLITE_BUSY; + }else{ + rc = SQLITE_OK; + } + + /* If there is no open read-transaction on the source database, open + ** one now. If a transaction is opened here, then it will be closed + ** before this function exits. + */ + if( rc==SQLITE_OK && SQLITE_TXN_NONE==sqlite3BtreeTxnState(p->pSrc) ){ + rc = sqlite3BtreeBeginTrans(p->pSrc, 0, 0); + bCloseTrans = 1; + } + + /* If the destination database has not yet been locked (i.e. if this + ** is the first call to backup_step() for the current backup operation), + ** try to set its page size to the same as the source database. This + ** is especially important on ZipVFS systems, as in that case it is + ** not possible to create a database file that uses one page size by + ** writing to it with another. */ + if( p->bDestLocked==0 && rc==SQLITE_OK && setDestPgsz(p)==SQLITE_NOMEM ){ + rc = SQLITE_NOMEM; + } + + /* Lock the destination database, if it is not locked already. */ + if( SQLITE_OK==rc && p->bDestLocked==0 + && SQLITE_OK==(rc = sqlite3BtreeBeginTrans(p->pDest, 2, + (int*)&p->iDestSchema)) + ){ + p->bDestLocked = 1; + } + + /* Do not allow backup if the destination database is in WAL mode + ** and the page sizes are different between source and destination */ + pgszSrc = sqlite3BtreeGetPageSize(p->pSrc); + pgszDest = sqlite3BtreeGetPageSize(p->pDest); + destMode = sqlite3PagerGetJournalMode(sqlite3BtreePager(p->pDest)); + if( SQLITE_OK==rc + && (destMode==PAGER_JOURNALMODE_WAL || sqlite3PagerIsMemdb(pDestPager)) + && pgszSrc!=pgszDest + ){ + rc = SQLITE_READONLY; + } + + /* Now that there is a read-lock on the source database, query the + ** source pager for the number of pages in the database. + */ + nSrcPage = (int)sqlite3BtreeLastPage(p->pSrc); + assert( nSrcPage>=0 ); + for(ii=0; (nPage<0 || iiiNext<=(Pgno)nSrcPage && !rc; ii++){ + const Pgno iSrcPg = p->iNext; /* Source page number */ + if( iSrcPg!=PENDING_BYTE_PAGE(p->pSrc->pBt) ){ + DbPage *pSrcPg; /* Source page object */ + rc = sqlite3PagerGet(pSrcPager, iSrcPg, &pSrcPg,PAGER_GET_READONLY); + if( rc==SQLITE_OK ){ + rc = backupOnePage(p, iSrcPg, sqlite3PagerGetData(pSrcPg), 0); + sqlite3PagerUnref(pSrcPg); + } + } + p->iNext++; + } + if( rc==SQLITE_OK ){ + p->nPagecount = nSrcPage; + p->nRemaining = nSrcPage+1-p->iNext; + if( p->iNext>(Pgno)nSrcPage ){ + rc = SQLITE_DONE; + }else if( !p->isAttached ){ + attachBackupObject(p); + } + } + + /* Update the schema version field in the destination database. This + ** is to make sure that the schema-version really does change in + ** the case where the source and destination databases have the + ** same schema version. + */ + if( rc==SQLITE_DONE ){ + if( nSrcPage==0 ){ + rc = sqlite3BtreeNewDb(p->pDest); + nSrcPage = 1; + } + if( rc==SQLITE_OK || rc==SQLITE_DONE ){ + rc = sqlite3BtreeUpdateMeta(p->pDest,1,p->iDestSchema+1); + } + if( rc==SQLITE_OK ){ + if( p->pDestDb ){ + sqlite3ResetAllSchemasOfConnection(p->pDestDb); + } + if( destMode==PAGER_JOURNALMODE_WAL ){ + rc = sqlite3BtreeSetVersion(p->pDest, 2); + } + } + if( rc==SQLITE_OK ){ + int nDestTruncate; + /* Set nDestTruncate to the final number of pages in the destination + ** database. The complication here is that the destination page + ** size may be different to the source page size. + ** + ** If the source page size is smaller than the destination page size, + ** round up. In this case the call to sqlite3OsTruncate() below will + ** fix the size of the file. However it is important to call + ** sqlite3PagerTruncateImage() here so that any pages in the + ** destination file that lie beyond the nDestTruncate page mark are + ** journalled by PagerCommitPhaseOne() before they are destroyed + ** by the file truncation. + */ + assert( pgszSrc==sqlite3BtreeGetPageSize(p->pSrc) ); + assert( pgszDest==sqlite3BtreeGetPageSize(p->pDest) ); + if( pgszSrcpDest->pBt) ){ + nDestTruncate--; + } + }else{ + nDestTruncate = nSrcPage * (pgszSrc/pgszDest); + } + assert( nDestTruncate>0 ); + + if( pgszSrc= iSize || ( + nDestTruncate==(int)(PENDING_BYTE_PAGE(p->pDest->pBt)-1) + && iSize>=PENDING_BYTE && iSize<=PENDING_BYTE+pgszDest + )); + + /* This block ensures that all data required to recreate the original + ** database has been stored in the journal for pDestPager and the + ** journal synced to disk. So at this point we may safely modify + ** the database file in any way, knowing that if a power failure + ** occurs, the original database will be reconstructed from the + ** journal file. */ + sqlite3PagerPagecount(pDestPager, &nDstPage); + for(iPg=nDestTruncate; rc==SQLITE_OK && iPg<=(Pgno)nDstPage; iPg++){ + if( iPg!=PENDING_BYTE_PAGE(p->pDest->pBt) ){ + DbPage *pPg; + rc = sqlite3PagerGet(pDestPager, iPg, &pPg, 0); + if( rc==SQLITE_OK ){ + rc = sqlite3PagerWrite(pPg); + sqlite3PagerUnref(pPg); + } + } + } + if( rc==SQLITE_OK ){ + rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 1); + } + + /* Write the extra pages and truncate the database file as required */ + iEnd = MIN(PENDING_BYTE + pgszDest, iSize); + for( + iOff=PENDING_BYTE+pgszSrc; + rc==SQLITE_OK && iOffpDest, 0)) + ){ + rc = SQLITE_DONE; + } + } + } + + /* If bCloseTrans is true, then this function opened a read transaction + ** on the source database. Close the read transaction here. There is + ** no need to check the return values of the btree methods here, as + ** "committing" a read-only transaction cannot fail. + */ + if( bCloseTrans ){ + TESTONLY( int rc2 ); + TESTONLY( rc2 = ) sqlite3BtreeCommitPhaseOne(p->pSrc, 0); + TESTONLY( rc2 |= ) sqlite3BtreeCommitPhaseTwo(p->pSrc, 0); + assert( rc2==SQLITE_OK ); + } + + if( rc==SQLITE_IOERR_NOMEM ){ + rc = SQLITE_NOMEM_BKPT; + } + p->rc = rc; + } + if( p->pDestDb ){ + sqlite3_mutex_leave(p->pDestDb->mutex); + } + sqlite3BtreeLeave(p->pSrc); + sqlite3_mutex_leave(p->pSrcDb->mutex); + return rc; +} + +/* +** Release all resources associated with an sqlite3_backup* handle. +*/ +SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p){ + sqlite3_backup **pp; /* Ptr to head of pagers backup list */ + sqlite3 *pSrcDb; /* Source database connection */ + int rc; /* Value to return */ + + /* Enter the mutexes */ + if( p==0 ) return SQLITE_OK; + pSrcDb = p->pSrcDb; + sqlite3_mutex_enter(pSrcDb->mutex); + sqlite3BtreeEnter(p->pSrc); + if( p->pDestDb ){ + sqlite3_mutex_enter(p->pDestDb->mutex); + } + + /* Detach this backup from the source pager. */ + if( p->pDestDb ){ + p->pSrc->nBackup--; + } + if( p->isAttached ){ + pp = sqlite3PagerBackupPtr(sqlite3BtreePager(p->pSrc)); + assert( pp!=0 ); + while( *pp!=p ){ + pp = &(*pp)->pNext; + assert( pp!=0 ); + } + *pp = p->pNext; + } + + /* If a transaction is still open on the Btree, roll it back. */ + sqlite3BtreeRollback(p->pDest, SQLITE_OK, 0); + + /* Set the error code of the destination database handle. */ + rc = (p->rc==SQLITE_DONE) ? SQLITE_OK : p->rc; + if( p->pDestDb ){ + sqlite3Error(p->pDestDb, rc); + + /* Exit the mutexes and free the backup context structure. */ + sqlite3LeaveMutexAndCloseZombie(p->pDestDb); + } + sqlite3BtreeLeave(p->pSrc); + if( p->pDestDb ){ + /* EVIDENCE-OF: R-64852-21591 The sqlite3_backup object is created by a + ** call to sqlite3_backup_init() and is destroyed by a call to + ** sqlite3_backup_finish(). */ + sqlite3_free(p); + } + sqlite3LeaveMutexAndCloseZombie(pSrcDb); + return rc; +} + +/* +** Return the number of pages still to be backed up as of the most recent +** call to sqlite3_backup_step(). +*/ +SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( p==0 ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + return p->nRemaining; +} + +/* +** Return the total number of pages in the source database as of the most +** recent call to sqlite3_backup_step(). +*/ +SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( p==0 ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + return p->nPagecount; +} + +/* +** This function is called after the contents of page iPage of the +** source database have been modified. If page iPage has already been +** copied into the destination database, then the data written to the +** destination is now invalidated. The destination copy of iPage needs +** to be updated with the new data before the backup operation is +** complete. +** +** It is assumed that the mutex associated with the BtShared object +** corresponding to the source database is held when this function is +** called. +*/ +static SQLITE_NOINLINE void backupUpdate( + sqlite3_backup *p, + Pgno iPage, + const u8 *aData +){ + assert( p!=0 ); + do{ + assert( sqlite3_mutex_held(p->pSrc->pBt->mutex) ); + if( !isFatalError(p->rc) && iPageiNext ){ + /* The backup process p has already copied page iPage. But now it + ** has been modified by a transaction on the source pager. Copy + ** the new data into the backup. + */ + int rc; + assert( p->pDestDb ); + sqlite3_mutex_enter(p->pDestDb->mutex); + rc = backupOnePage(p, iPage, aData, 1); + sqlite3_mutex_leave(p->pDestDb->mutex); + assert( rc!=SQLITE_BUSY && rc!=SQLITE_LOCKED ); + if( rc!=SQLITE_OK ){ + p->rc = rc; + } + } + }while( (p = p->pNext)!=0 ); +} +SQLITE_PRIVATE void sqlite3BackupUpdate(sqlite3_backup *pBackup, Pgno iPage, const u8 *aData){ + if( pBackup ) backupUpdate(pBackup, iPage, aData); +} + +/* +** Restart the backup process. This is called when the pager layer +** detects that the database has been modified by an external database +** connection. In this case there is no way of knowing which of the +** pages that have been copied into the destination database are still +** valid and which are not, so the entire process needs to be restarted. +** +** It is assumed that the mutex associated with the BtShared object +** corresponding to the source database is held when this function is +** called. +*/ +SQLITE_PRIVATE void sqlite3BackupRestart(sqlite3_backup *pBackup){ + sqlite3_backup *p; /* Iterator variable */ + for(p=pBackup; p; p=p->pNext){ + assert( sqlite3_mutex_held(p->pSrc->pBt->mutex) ); + p->iNext = 1; + } +} + +#ifndef SQLITE_OMIT_VACUUM +/* +** Copy the complete content of pBtFrom into pBtTo. A transaction +** must be active for both files. +** +** The size of file pTo may be reduced by this operation. If anything +** goes wrong, the transaction on pTo is rolled back. If successful, the +** transaction is committed before returning. +*/ +SQLITE_PRIVATE int sqlite3BtreeCopyFile(Btree *pTo, Btree *pFrom){ + int rc; + sqlite3_file *pFd; /* File descriptor for database pTo */ + sqlite3_backup b; + sqlite3BtreeEnter(pTo); + sqlite3BtreeEnter(pFrom); + + assert( sqlite3BtreeTxnState(pTo)==SQLITE_TXN_WRITE ); + pFd = sqlite3PagerFile(sqlite3BtreePager(pTo)); + if( pFd->pMethods ){ + i64 nByte = sqlite3BtreeGetPageSize(pFrom)*(i64)sqlite3BtreeLastPage(pFrom); + rc = sqlite3OsFileControl(pFd, SQLITE_FCNTL_OVERWRITE, &nByte); + if( rc==SQLITE_NOTFOUND ) rc = SQLITE_OK; + if( rc ) goto copy_finished; + } + + /* Set up an sqlite3_backup object. sqlite3_backup.pDestDb must be set + ** to 0. This is used by the implementations of sqlite3_backup_step() + ** and sqlite3_backup_finish() to detect that they are being called + ** from this function, not directly by the user. + */ + memset(&b, 0, sizeof(b)); + b.pSrcDb = pFrom->db; + b.pSrc = pFrom; + b.pDest = pTo; + b.iNext = 1; + + /* 0x7FFFFFFF is the hard limit for the number of pages in a database + ** file. By passing this as the number of pages to copy to + ** sqlite3_backup_step(), we can guarantee that the copy finishes + ** within a single call (unless an error occurs). The assert() statement + ** checks this assumption - (p->rc) should be set to either SQLITE_DONE + ** or an error code. */ + sqlite3_backup_step(&b, 0x7FFFFFFF); + assert( b.rc!=SQLITE_OK ); + + rc = sqlite3_backup_finish(&b); + if( rc==SQLITE_OK ){ + pTo->pBt->btsFlags &= ~BTS_PAGESIZE_FIXED; + }else{ + sqlite3PagerClearCache(sqlite3BtreePager(b.pDest)); + } + + assert( sqlite3BtreeTxnState(pTo)!=SQLITE_TXN_WRITE ); +copy_finished: + sqlite3BtreeLeave(pFrom); + sqlite3BtreeLeave(pTo); + return rc; +} +#endif /* SQLITE_OMIT_VACUUM */ + +/************** End of backup.c **********************************************/ +/************** Begin file vdbemem.c *****************************************/ +/* +** 2004 May 26 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file contains code use to manipulate "Mem" structure. A "Mem" +** stores a single value in the VDBE. Mem is an opaque structure visible +** only within the VDBE. Interface routines refer to a Mem using the +** name sqlite_value +*/ +/* #include "sqliteInt.h" */ +/* #include "vdbeInt.h" */ + +/* True if X is a power of two. 0 is considered a power of two here. +** In other words, return true if X has at most one bit set. +*/ +#define ISPOWEROF2(X) (((X)&((X)-1))==0) + +#ifdef SQLITE_DEBUG +/* +** Check invariants on a Mem object. +** +** This routine is intended for use inside of assert() statements, like +** this: assert( sqlite3VdbeCheckMemInvariants(pMem) ); +*/ +SQLITE_PRIVATE int sqlite3VdbeCheckMemInvariants(Mem *p){ + /* If MEM_Dyn is set then Mem.xDel!=0. + ** Mem.xDel might not be initialized if MEM_Dyn is clear. + */ + assert( (p->flags & MEM_Dyn)==0 || p->xDel!=0 ); + + /* MEM_Dyn may only be set if Mem.szMalloc==0. In this way we + ** ensure that if Mem.szMalloc>0 then it is safe to do + ** Mem.z = Mem.zMalloc without having to check Mem.flags&MEM_Dyn. + ** That saves a few cycles in inner loops. */ + assert( (p->flags & MEM_Dyn)==0 || p->szMalloc==0 ); + + /* Cannot have more than one of MEM_Int, MEM_Real, or MEM_IntReal */ + assert( ISPOWEROF2(p->flags & (MEM_Int|MEM_Real|MEM_IntReal)) ); + + if( p->flags & MEM_Null ){ + /* Cannot be both MEM_Null and some other type */ + assert( (p->flags & (MEM_Int|MEM_Real|MEM_Str|MEM_Blob|MEM_Agg))==0 ); + + /* If MEM_Null is set, then either the value is a pure NULL (the usual + ** case) or it is a pointer set using sqlite3_bind_pointer() or + ** sqlite3_result_pointer(). If a pointer, then MEM_Term must also be + ** set. + */ + if( (p->flags & (MEM_Term|MEM_Subtype))==(MEM_Term|MEM_Subtype) ){ + /* This is a pointer type. There may be a flag to indicate what to + ** do with the pointer. */ + assert( ((p->flags&MEM_Dyn)!=0 ? 1 : 0) + + ((p->flags&MEM_Ephem)!=0 ? 1 : 0) + + ((p->flags&MEM_Static)!=0 ? 1 : 0) <= 1 ); + + /* No other bits set */ + assert( (p->flags & ~(MEM_Null|MEM_Term|MEM_Subtype|MEM_FromBind + |MEM_Dyn|MEM_Ephem|MEM_Static))==0 ); + }else{ + /* A pure NULL might have other flags, such as MEM_Static, MEM_Dyn, + ** MEM_Ephem, MEM_Cleared, or MEM_Subtype */ + } + }else{ + /* The MEM_Cleared bit is only allowed on NULLs */ + assert( (p->flags & MEM_Cleared)==0 ); + } + + /* The szMalloc field holds the correct memory allocation size */ + assert( p->szMalloc==0 + || (p->flags==MEM_Undefined + && p->szMalloc<=sqlite3DbMallocSize(p->db,p->zMalloc)) + || p->szMalloc==sqlite3DbMallocSize(p->db,p->zMalloc)); + + /* If p holds a string or blob, the Mem.z must point to exactly + ** one of the following: + ** + ** (1) Memory in Mem.zMalloc and managed by the Mem object + ** (2) Memory to be freed using Mem.xDel + ** (3) An ephemeral string or blob + ** (4) A static string or blob + */ + if( (p->flags & (MEM_Str|MEM_Blob)) && p->n>0 ){ + assert( + ((p->szMalloc>0 && p->z==p->zMalloc)? 1 : 0) + + ((p->flags&MEM_Dyn)!=0 ? 1 : 0) + + ((p->flags&MEM_Ephem)!=0 ? 1 : 0) + + ((p->flags&MEM_Static)!=0 ? 1 : 0) == 1 + ); + } + return 1; +} +#endif + +/* +** Render a Mem object which is one of MEM_Int, MEM_Real, or MEM_IntReal +** into a buffer. +*/ +static void vdbeMemRenderNum(int sz, char *zBuf, Mem *p){ + StrAccum acc; + assert( p->flags & (MEM_Int|MEM_Real|MEM_IntReal) ); + assert( sz>22 ); + if( p->flags & MEM_Int ){ +#if GCC_VERSION>=7000000 + /* Work-around for GCC bug + ** https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96270 */ + i64 x; + assert( (p->flags&MEM_Int)*2==sizeof(x) ); + memcpy(&x, (char*)&p->u, (p->flags&MEM_Int)*2); + p->n = sqlite3Int64ToText(x, zBuf); +#else + p->n = sqlite3Int64ToText(p->u.i, zBuf); +#endif + }else{ + sqlite3StrAccumInit(&acc, 0, zBuf, sz, 0); + sqlite3_str_appendf(&acc, "%!.15g", + (p->flags & MEM_IntReal)!=0 ? (double)p->u.i : p->u.r); + assert( acc.zText==zBuf && acc.mxAlloc<=0 ); + zBuf[acc.nChar] = 0; /* Fast version of sqlite3StrAccumFinish(&acc) */ + p->n = acc.nChar; + } +} + +#ifdef SQLITE_DEBUG +/* +** Validity checks on pMem. pMem holds a string. +** +** (1) Check that string value of pMem agrees with its integer or real value. +** (2) Check that the string is correctly zero terminated +** +** A single int or real value always converts to the same strings. But +** many different strings can be converted into the same int or real. +** If a table contains a numeric value and an index is based on the +** corresponding string value, then it is important that the string be +** derived from the numeric value, not the other way around, to ensure +** that the index and table are consistent. See ticket +** https://sqlite.org/src/info/343634942dd54ab (2018-01-31) for +** an example. +** +** This routine looks at pMem to verify that if it has both a numeric +** representation and a string representation then the string rep has +** been derived from the numeric and not the other way around. It returns +** true if everything is ok and false if there is a problem. +** +** This routine is for use inside of assert() statements only. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemValidStrRep(Mem *p){ + Mem tmp; + char zBuf[100]; + char *z; + int i, j, incr; + if( (p->flags & MEM_Str)==0 ) return 1; + if( p->db && p->db->mallocFailed ) return 1; + if( p->flags & MEM_Term ){ + /* Insure that the string is properly zero-terminated. Pay particular + ** attention to the case where p->n is odd */ + if( p->szMalloc>0 && p->z==p->zMalloc ){ + assert( p->enc==SQLITE_UTF8 || p->szMalloc >= ((p->n+1)&~1)+2 ); + assert( p->enc!=SQLITE_UTF8 || p->szMalloc >= p->n+1 ); + } + assert( p->z[p->n]==0 ); + assert( p->enc==SQLITE_UTF8 || p->z[(p->n+1)&~1]==0 ); + assert( p->enc==SQLITE_UTF8 || p->z[((p->n+1)&~1)+1]==0 ); + } + if( (p->flags & (MEM_Int|MEM_Real|MEM_IntReal))==0 ) return 1; + memcpy(&tmp, p, sizeof(tmp)); + vdbeMemRenderNum(sizeof(zBuf), zBuf, &tmp); + z = p->z; + i = j = 0; + incr = 1; + if( p->enc!=SQLITE_UTF8 ){ + incr = 2; + if( p->enc==SQLITE_UTF16BE ) z++; + } + while( zBuf[j] ){ + if( zBuf[j++]!=z[i] ) return 0; + i += incr; + } + return 1; +} +#endif /* SQLITE_DEBUG */ + +/* +** If pMem is an object with a valid string representation, this routine +** ensures the internal encoding for the string representation is +** 'desiredEnc', one of SQLITE_UTF8, SQLITE_UTF16LE or SQLITE_UTF16BE. +** +** If pMem is not a string object, or the encoding of the string +** representation is already stored using the requested encoding, then this +** routine is a no-op. +** +** SQLITE_OK is returned if the conversion is successful (or not required). +** SQLITE_NOMEM may be returned if a malloc() fails during conversion +** between formats. +*/ +SQLITE_PRIVATE int sqlite3VdbeChangeEncoding(Mem *pMem, int desiredEnc){ +#ifndef SQLITE_OMIT_UTF16 + int rc; +#endif + assert( pMem!=0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); + assert( desiredEnc==SQLITE_UTF8 || desiredEnc==SQLITE_UTF16LE + || desiredEnc==SQLITE_UTF16BE ); + if( !(pMem->flags&MEM_Str) ){ + pMem->enc = desiredEnc; + return SQLITE_OK; + } + if( pMem->enc==desiredEnc ){ + return SQLITE_OK; + } + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); +#ifdef SQLITE_OMIT_UTF16 + return SQLITE_ERROR; +#else + + /* MemTranslate() may return SQLITE_OK or SQLITE_NOMEM. If NOMEM is returned, + ** then the encoding of the value may not have changed. + */ + rc = sqlite3VdbeMemTranslate(pMem, (u8)desiredEnc); + assert(rc==SQLITE_OK || rc==SQLITE_NOMEM); + assert(rc==SQLITE_OK || pMem->enc!=desiredEnc); + assert(rc==SQLITE_NOMEM || pMem->enc==desiredEnc); + return rc; +#endif +} + +/* +** Make sure pMem->z points to a writable allocation of at least n bytes. +** +** If the bPreserve argument is true, then copy of the content of +** pMem->z into the new allocation. pMem must be either a string or +** blob if bPreserve is true. If bPreserve is false, any prior content +** in pMem->z is discarded. +*/ +SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPreserve){ + assert( sqlite3VdbeCheckMemInvariants(pMem) ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); + testcase( pMem->db==0 ); + + /* If the bPreserve flag is set to true, then the memory cell must already + ** contain a valid string or blob value. */ + assert( bPreserve==0 || pMem->flags&(MEM_Blob|MEM_Str) ); + testcase( bPreserve && pMem->z==0 ); + + assert( pMem->szMalloc==0 + || (pMem->flags==MEM_Undefined + && pMem->szMalloc<=sqlite3DbMallocSize(pMem->db,pMem->zMalloc)) + || pMem->szMalloc==sqlite3DbMallocSize(pMem->db,pMem->zMalloc)); + if( pMem->szMalloc>0 && bPreserve && pMem->z==pMem->zMalloc ){ + if( pMem->db ){ + pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n); + }else{ + pMem->zMalloc = sqlite3Realloc(pMem->z, n); + if( pMem->zMalloc==0 ) sqlite3_free(pMem->z); + pMem->z = pMem->zMalloc; + } + bPreserve = 0; + }else{ + if( pMem->szMalloc>0 ) sqlite3DbFreeNN(pMem->db, pMem->zMalloc); + pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n); + } + if( pMem->zMalloc==0 ){ + sqlite3VdbeMemSetNull(pMem); + pMem->z = 0; + pMem->szMalloc = 0; + return SQLITE_NOMEM_BKPT; + }else{ + pMem->szMalloc = sqlite3DbMallocSize(pMem->db, pMem->zMalloc); + } + + if( bPreserve && pMem->z ){ + assert( pMem->z!=pMem->zMalloc ); + memcpy(pMem->zMalloc, pMem->z, pMem->n); + } + if( (pMem->flags&MEM_Dyn)!=0 ){ + assert( pMem->xDel!=0 && pMem->xDel!=SQLITE_DYNAMIC ); + pMem->xDel((void *)(pMem->z)); + } + + pMem->z = pMem->zMalloc; + pMem->flags &= ~(MEM_Dyn|MEM_Ephem|MEM_Static); + return SQLITE_OK; +} + +/* +** Change the pMem->zMalloc allocation to be at least szNew bytes. +** If pMem->zMalloc already meets or exceeds the requested size, this +** routine is a no-op. +** +** Any prior string or blob content in the pMem object may be discarded. +** The pMem->xDel destructor is called, if it exists. Though MEM_Str +** and MEM_Blob values may be discarded, MEM_Int, MEM_Real, MEM_IntReal, +** and MEM_Null values are preserved. +** +** Return SQLITE_OK on success or an error code (probably SQLITE_NOMEM) +** if unable to complete the resizing. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemClearAndResize(Mem *pMem, int szNew){ + assert( CORRUPT_DB || szNew>0 ); + assert( (pMem->flags & MEM_Dyn)==0 || pMem->szMalloc==0 ); + if( pMem->szMallocflags & MEM_Dyn)==0 ); + pMem->z = pMem->zMalloc; + pMem->flags &= (MEM_Null|MEM_Int|MEM_Real|MEM_IntReal); + return SQLITE_OK; +} + +/* +** If pMem is already a string, detect if it is a zero-terminated +** string, or make it into one if possible, and mark it as such. +** +** This is an optimization. Correct operation continues even if +** this routine is a no-op. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemZeroTerminateIfAble(Mem *pMem){ + if( (pMem->flags & (MEM_Str|MEM_Term|MEM_Ephem|MEM_Static))!=MEM_Str ){ + /* pMem must be a string, and it cannot be an ephemeral or static string */ + return; + } + if( pMem->enc!=SQLITE_UTF8 ) return; + assert( pMem->z!=0 ); + if( pMem->flags & MEM_Dyn ){ + if( pMem->xDel==sqlite3_free + && sqlite3_msize(pMem->z) >= (u64)(pMem->n+1) + ){ + pMem->z[pMem->n] = 0; + pMem->flags |= MEM_Term; + return; + } + if( pMem->xDel==sqlite3RCStrUnref ){ + /* Blindly assume that all RCStr objects are zero-terminated */ + pMem->flags |= MEM_Term; + return; + } + }else if( pMem->szMalloc >= pMem->n+1 ){ + pMem->z[pMem->n] = 0; + pMem->flags |= MEM_Term; + return; + } +} + +/* +** It is already known that pMem contains an unterminated string. +** Add the zero terminator. +** +** Three bytes of zero are added. In this way, there is guaranteed +** to be a double-zero byte at an even byte boundary in order to +** terminate a UTF16 string, even if the initial size of the buffer +** is an odd number of bytes. +*/ +static SQLITE_NOINLINE int vdbeMemAddTerminator(Mem *pMem){ + if( sqlite3VdbeMemGrow(pMem, pMem->n+3, 1) ){ + return SQLITE_NOMEM_BKPT; + } + pMem->z[pMem->n] = 0; + pMem->z[pMem->n+1] = 0; + pMem->z[pMem->n+2] = 0; + pMem->flags |= MEM_Term; + return SQLITE_OK; +} + +/* +** Change pMem so that its MEM_Str or MEM_Blob value is stored in +** MEM.zMalloc, where it can be safely written. +** +** Return SQLITE_OK on success or SQLITE_NOMEM if malloc fails. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem *pMem){ + assert( pMem!=0 ); + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); + if( (pMem->flags & (MEM_Str|MEM_Blob))!=0 ){ + if( ExpandBlob(pMem) ) return SQLITE_NOMEM; + if( pMem->szMalloc==0 || pMem->z!=pMem->zMalloc ){ + int rc = vdbeMemAddTerminator(pMem); + if( rc ) return rc; + } + } + pMem->flags &= ~MEM_Ephem; +#ifdef SQLITE_DEBUG + pMem->pScopyFrom = 0; +#endif + + return SQLITE_OK; +} + +/* +** If the given Mem* has a zero-filled tail, turn it into an ordinary +** blob stored in dynamically allocated space. +*/ +#ifndef SQLITE_OMIT_INCRBLOB +SQLITE_PRIVATE int sqlite3VdbeMemExpandBlob(Mem *pMem){ + int nByte; + assert( pMem!=0 ); + assert( pMem->flags & MEM_Zero ); + assert( (pMem->flags&MEM_Blob)!=0 || MemNullNochng(pMem) ); + testcase( sqlite3_value_nochange(pMem) ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + + /* Set nByte to the number of bytes required to store the expanded blob. */ + nByte = pMem->n + pMem->u.nZero; + if( nByte<=0 ){ + if( (pMem->flags & MEM_Blob)==0 ) return SQLITE_OK; + nByte = 1; + } + if( sqlite3VdbeMemGrow(pMem, nByte, 1) ){ + return SQLITE_NOMEM_BKPT; + } + assert( pMem->z!=0 ); + assert( sqlite3DbMallocSize(pMem->db,pMem->z) >= nByte ); + + memset(&pMem->z[pMem->n], 0, pMem->u.nZero); + pMem->n += pMem->u.nZero; + pMem->flags &= ~(MEM_Zero|MEM_Term); + return SQLITE_OK; +} +#endif + +/* +** Make sure the given Mem is \u0000 terminated. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem *pMem){ + assert( pMem!=0 ); + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + testcase( (pMem->flags & (MEM_Term|MEM_Str))==(MEM_Term|MEM_Str) ); + testcase( (pMem->flags & (MEM_Term|MEM_Str))==0 ); + if( (pMem->flags & (MEM_Term|MEM_Str))!=MEM_Str ){ + return SQLITE_OK; /* Nothing to do */ + }else{ + return vdbeMemAddTerminator(pMem); + } +} + +/* +** Add MEM_Str to the set of representations for the given Mem. This +** routine is only called if pMem is a number of some kind, not a NULL +** or a BLOB. +** +** Existing representations MEM_Int, MEM_Real, or MEM_IntReal are invalidated +** if bForce is true but are retained if bForce is false. +** +** A MEM_Null value will never be passed to this function. This function is +** used for converting values to text for returning to the user (i.e. via +** sqlite3_value_text()), or for ensuring that values to be used as btree +** keys are strings. In the former case a NULL pointer is returned the +** user and the latter is an internal programming error. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, u8 enc, u8 bForce){ + const int nByte = 32; + + assert( pMem!=0 ); + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + assert( !(pMem->flags&MEM_Zero) ); + assert( !(pMem->flags&(MEM_Str|MEM_Blob)) ); + assert( pMem->flags&(MEM_Int|MEM_Real|MEM_IntReal) ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); + assert( EIGHT_BYTE_ALIGNMENT(pMem) ); + + + if( sqlite3VdbeMemClearAndResize(pMem, nByte) ){ + pMem->enc = 0; + return SQLITE_NOMEM_BKPT; + } + + vdbeMemRenderNum(nByte, pMem->z, pMem); + assert( pMem->z!=0 ); + assert( pMem->n==(int)sqlite3Strlen30NN(pMem->z) ); + pMem->enc = SQLITE_UTF8; + pMem->flags |= MEM_Str|MEM_Term; + if( bForce ) pMem->flags &= ~(MEM_Int|MEM_Real|MEM_IntReal); + sqlite3VdbeChangeEncoding(pMem, enc); + return SQLITE_OK; +} + +/* +** Memory cell pMem contains the context of an aggregate function. +** This routine calls the finalize method for that function. The +** result of the aggregate is stored back into pMem. +** +** Return SQLITE_ERROR if the finalizer reports an error. SQLITE_OK +** otherwise. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){ + sqlite3_context ctx; + Mem t; + assert( pFunc!=0 ); + assert( pMem!=0 ); + assert( pMem->db!=0 ); + assert( pFunc->xFinalize!=0 ); + assert( (pMem->flags & MEM_Null)!=0 || pFunc==pMem->u.pDef ); + assert( sqlite3_mutex_held(pMem->db->mutex) ); + memset(&ctx, 0, sizeof(ctx)); + memset(&t, 0, sizeof(t)); + t.flags = MEM_Null; + t.db = pMem->db; + ctx.pOut = &t; + ctx.pMem = pMem; + ctx.pFunc = pFunc; + ctx.enc = ENC(t.db); + pFunc->xFinalize(&ctx); /* IMP: R-24505-23230 */ + assert( (pMem->flags & MEM_Dyn)==0 ); + if( pMem->szMalloc>0 ) sqlite3DbFreeNN(pMem->db, pMem->zMalloc); + memcpy(pMem, &t, sizeof(t)); + return ctx.isError; +} + +/* +** Memory cell pAccum contains the context of an aggregate function. +** This routine calls the xValue method for that function and stores +** the results in memory cell pMem. +** +** SQLITE_ERROR is returned if xValue() reports an error. SQLITE_OK +** otherwise. +*/ +#ifndef SQLITE_OMIT_WINDOWFUNC +SQLITE_PRIVATE int sqlite3VdbeMemAggValue(Mem *pAccum, Mem *pOut, FuncDef *pFunc){ + sqlite3_context ctx; + assert( pFunc!=0 ); + assert( pFunc->xValue!=0 ); + assert( (pAccum->flags & MEM_Null)!=0 || pFunc==pAccum->u.pDef ); + assert( pAccum->db!=0 ); + assert( sqlite3_mutex_held(pAccum->db->mutex) ); + memset(&ctx, 0, sizeof(ctx)); + sqlite3VdbeMemSetNull(pOut); + ctx.pOut = pOut; + ctx.pMem = pAccum; + ctx.pFunc = pFunc; + ctx.enc = ENC(pAccum->db); + pFunc->xValue(&ctx); + return ctx.isError; +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ + +/* +** If the memory cell contains a value that must be freed by +** invoking the external callback in Mem.xDel, then this routine +** will free that value. It also sets Mem.flags to MEM_Null. +** +** This is a helper routine for sqlite3VdbeMemSetNull() and +** for sqlite3VdbeMemRelease(). Use those other routines as the +** entry point for releasing Mem resources. +*/ +static SQLITE_NOINLINE void vdbeMemClearExternAndSetNull(Mem *p){ + assert( p->db==0 || sqlite3_mutex_held(p->db->mutex) ); + assert( VdbeMemDynamic(p) ); + if( p->flags&MEM_Agg ){ + sqlite3VdbeMemFinalize(p, p->u.pDef); + assert( (p->flags & MEM_Agg)==0 ); + testcase( p->flags & MEM_Dyn ); + } + if( p->flags&MEM_Dyn ){ + assert( p->xDel!=SQLITE_DYNAMIC && p->xDel!=0 ); + p->xDel((void *)p->z); + } + p->flags = MEM_Null; +} + +/* +** Release memory held by the Mem p, both external memory cleared +** by p->xDel and memory in p->zMalloc. +** +** This is a helper routine invoked by sqlite3VdbeMemRelease() in +** the unusual case where there really is memory in p that needs +** to be freed. +*/ +static SQLITE_NOINLINE void vdbeMemClear(Mem *p){ + if( VdbeMemDynamic(p) ){ + vdbeMemClearExternAndSetNull(p); + } + if( p->szMalloc ){ + sqlite3DbFreeNN(p->db, p->zMalloc); + p->szMalloc = 0; + } + p->z = 0; +} + +/* +** Release any memory resources held by the Mem. Both the memory that is +** free by Mem.xDel and the Mem.zMalloc allocation are freed. +** +** Use this routine prior to clean up prior to abandoning a Mem, or to +** reset a Mem back to its minimum memory utilization. +** +** Use sqlite3VdbeMemSetNull() to release just the Mem.xDel space +** prior to inserting new content into the Mem. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p){ + assert( sqlite3VdbeCheckMemInvariants(p) ); + if( VdbeMemDynamic(p) || p->szMalloc ){ + vdbeMemClear(p); + } +} + +/* Like sqlite3VdbeMemRelease() but faster for cases where we +** know in advance that the Mem is not MEM_Dyn or MEM_Agg. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemReleaseMalloc(Mem *p){ + assert( !VdbeMemDynamic(p) ); + if( p->szMalloc ) vdbeMemClear(p); +} + +/* +** Return some kind of integer value which is the best we can do +** at representing the value that *pMem describes as an integer. +** If pMem is an integer, then the value is exact. If pMem is +** a floating-point then the value returned is the integer part. +** If pMem is a string or blob, then we make an attempt to convert +** it into an integer and return that. If pMem represents an +** an SQL-NULL value, return 0. +** +** If pMem represents a string value, its encoding might be changed. +*/ +static SQLITE_NOINLINE i64 memIntValue(const Mem *pMem){ + i64 value = 0; + sqlite3Atoi64(pMem->z, &value, pMem->n, pMem->enc); + return value; +} +SQLITE_PRIVATE i64 sqlite3VdbeIntValue(const Mem *pMem){ + int flags; + assert( pMem!=0 ); + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + assert( EIGHT_BYTE_ALIGNMENT(pMem) ); + flags = pMem->flags; + if( flags & (MEM_Int|MEM_IntReal) ){ + testcase( flags & MEM_IntReal ); + return pMem->u.i; + }else if( flags & MEM_Real ){ + return sqlite3RealToI64(pMem->u.r); + }else if( (flags & (MEM_Str|MEM_Blob))!=0 && pMem->z!=0 ){ + return memIntValue(pMem); + }else{ + return 0; + } +} + +/* +** Return the best representation of pMem that we can get into a +** double. If pMem is already a double or an integer, return its +** value. If it is a string or blob, try to convert it to a double. +** If it is a NULL, return 0.0. +*/ +static SQLITE_NOINLINE double memRealValue(Mem *pMem){ + /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ + double val = (double)0; + sqlite3AtoF(pMem->z, &val, pMem->n, pMem->enc); + return val; +} +SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem *pMem){ + assert( pMem!=0 ); + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + assert( EIGHT_BYTE_ALIGNMENT(pMem) ); + if( pMem->flags & MEM_Real ){ + return pMem->u.r; + }else if( pMem->flags & (MEM_Int|MEM_IntReal) ){ + testcase( pMem->flags & MEM_IntReal ); + return (double)pMem->u.i; + }else if( pMem->flags & (MEM_Str|MEM_Blob) ){ + return memRealValue(pMem); + }else{ + /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ + return (double)0; + } +} + +/* +** Return 1 if pMem represents true, and return 0 if pMem represents false. +** Return the value ifNull if pMem is NULL. +*/ +SQLITE_PRIVATE int sqlite3VdbeBooleanValue(Mem *pMem, int ifNull){ + testcase( pMem->flags & MEM_IntReal ); + if( pMem->flags & (MEM_Int|MEM_IntReal) ) return pMem->u.i!=0; + if( pMem->flags & MEM_Null ) return ifNull; + return sqlite3VdbeRealValue(pMem)!=0.0; +} + +/* +** The MEM structure is already a MEM_Real or MEM_IntReal. Try to +** make it a MEM_Int if we can. +*/ +SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem *pMem){ + assert( pMem!=0 ); + assert( pMem->flags & (MEM_Real|MEM_IntReal) ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + assert( EIGHT_BYTE_ALIGNMENT(pMem) ); + + if( pMem->flags & MEM_IntReal ){ + MemSetTypeFlag(pMem, MEM_Int); + }else{ + i64 ix = sqlite3RealToI64(pMem->u.r); + + /* Only mark the value as an integer if + ** + ** (1) the round-trip conversion real->int->real is a no-op, and + ** (2) The integer is neither the largest nor the smallest + ** possible integer (ticket #3922) + ** + ** The second and third terms in the following conditional enforces + ** the second condition under the assumption that addition overflow causes + ** values to wrap around. + */ + if( pMem->u.r==ix && ix>SMALLEST_INT64 && ixu.i = ix; + MemSetTypeFlag(pMem, MEM_Int); + } + } +} + +/* +** Convert pMem to type integer. Invalidate any prior representations. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem *pMem){ + assert( pMem!=0 ); + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); + assert( EIGHT_BYTE_ALIGNMENT(pMem) ); + + pMem->u.i = sqlite3VdbeIntValue(pMem); + MemSetTypeFlag(pMem, MEM_Int); + return SQLITE_OK; +} + +/* +** Convert pMem so that it is of type MEM_Real. +** Invalidate any prior representations. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem *pMem){ + assert( pMem!=0 ); + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + assert( EIGHT_BYTE_ALIGNMENT(pMem) ); + + pMem->u.r = sqlite3VdbeRealValue(pMem); + MemSetTypeFlag(pMem, MEM_Real); + return SQLITE_OK; +} + +/* Compare a floating point value to an integer. Return true if the two +** values are the same within the precision of the floating point value. +** +** This function assumes that i was obtained by assignment from r1. +** +** For some versions of GCC on 32-bit machines, if you do the more obvious +** comparison of "r1==(double)i" you sometimes get an answer of false even +** though the r1 and (double)i values are bit-for-bit the same. +*/ +SQLITE_PRIVATE int sqlite3RealSameAsInt(double r1, sqlite3_int64 i){ + double r2 = (double)i; + return r1==0.0 + || (memcmp(&r1, &r2, sizeof(r1))==0 + && i >= -2251799813685248LL && i < 2251799813685248LL); +} + +/* Convert a floating point value to its closest integer. Do so in +** a way that avoids 'outside the range of representable values' warnings +** from UBSAN. +*/ +SQLITE_PRIVATE i64 sqlite3RealToI64(double r){ + if( r<-9223372036854774784.0 ) return SMALLEST_INT64; + if( r>+9223372036854774784.0 ) return LARGEST_INT64; + return (i64)r; +} + +/* +** Convert pMem so that it has type MEM_Real or MEM_Int. +** Invalidate any prior representations. +** +** Every effort is made to force the conversion, even if the input +** is a string that does not look completely like a number. Convert +** as much of the string as we can and ignore the rest. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem *pMem){ + assert( pMem!=0 ); + testcase( pMem->flags & MEM_Int ); + testcase( pMem->flags & MEM_Real ); + testcase( pMem->flags & MEM_IntReal ); + testcase( pMem->flags & MEM_Null ); + if( (pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Null))==0 ){ + int rc; + sqlite3_int64 ix; + assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 ); + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + rc = sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc); + if( ((rc==0 || rc==1) && sqlite3Atoi64(pMem->z, &ix, pMem->n, pMem->enc)<=1) + || sqlite3RealSameAsInt(pMem->u.r, (ix = sqlite3RealToI64(pMem->u.r))) + ){ + pMem->u.i = ix; + MemSetTypeFlag(pMem, MEM_Int); + }else{ + MemSetTypeFlag(pMem, MEM_Real); + } + } + assert( (pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Null))!=0 ); + pMem->flags &= ~(MEM_Str|MEM_Blob|MEM_Zero); + return SQLITE_OK; +} + +/* +** Cast the datatype of the value in pMem according to the affinity +** "aff". Casting is different from applying affinity in that a cast +** is forced. In other words, the value is converted into the desired +** affinity even if that results in loss of data. This routine is +** used (for example) to implement the SQL "cast()" operator. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemCast(Mem *pMem, u8 aff, u8 encoding){ + if( pMem->flags & MEM_Null ) return SQLITE_OK; + switch( aff ){ + case SQLITE_AFF_BLOB: { /* Really a cast to BLOB */ + if( (pMem->flags & MEM_Blob)==0 ){ + sqlite3ValueApplyAffinity(pMem, SQLITE_AFF_TEXT, encoding); + assert( pMem->flags & MEM_Str || pMem->db->mallocFailed ); + if( pMem->flags & MEM_Str ) MemSetTypeFlag(pMem, MEM_Blob); + }else{ + pMem->flags &= ~(MEM_TypeMask&~MEM_Blob); + } + break; + } + case SQLITE_AFF_NUMERIC: { + sqlite3VdbeMemNumerify(pMem); + break; + } + case SQLITE_AFF_INTEGER: { + sqlite3VdbeMemIntegerify(pMem); + break; + } + case SQLITE_AFF_REAL: { + sqlite3VdbeMemRealify(pMem); + break; + } + default: { + int rc; + assert( aff==SQLITE_AFF_TEXT ); + assert( MEM_Str==(MEM_Blob>>3) ); + pMem->flags |= (pMem->flags&MEM_Blob)>>3; + sqlite3ValueApplyAffinity(pMem, SQLITE_AFF_TEXT, encoding); + assert( pMem->flags & MEM_Str || pMem->db->mallocFailed ); + pMem->flags &= ~(MEM_Int|MEM_Real|MEM_IntReal|MEM_Blob|MEM_Zero); + if( encoding!=SQLITE_UTF8 ) pMem->n &= ~1; + rc = sqlite3VdbeChangeEncoding(pMem, encoding); + if( rc ) return rc; + sqlite3VdbeMemZeroTerminateIfAble(pMem); + } + } + return SQLITE_OK; +} + +/* +** Initialize bulk memory to be a consistent Mem object. +** +** The minimum amount of initialization feasible is performed. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemInit(Mem *pMem, sqlite3 *db, u16 flags){ + assert( (flags & ~MEM_TypeMask)==0 ); + pMem->flags = flags; + pMem->db = db; + pMem->szMalloc = 0; +} + + +/* +** Delete any previous value and set the value stored in *pMem to NULL. +** +** This routine calls the Mem.xDel destructor to dispose of values that +** require the destructor. But it preserves the Mem.zMalloc memory allocation. +** To free all resources, use sqlite3VdbeMemRelease(), which both calls this +** routine to invoke the destructor and deallocates Mem.zMalloc. +** +** Use this routine to reset the Mem prior to insert a new value. +** +** Use sqlite3VdbeMemRelease() to complete erase the Mem prior to abandoning it. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem *pMem){ + if( VdbeMemDynamic(pMem) ){ + vdbeMemClearExternAndSetNull(pMem); + }else{ + pMem->flags = MEM_Null; + } +} +SQLITE_PRIVATE void sqlite3ValueSetNull(sqlite3_value *p){ + sqlite3VdbeMemSetNull((Mem*)p); +} + +/* +** Delete any previous value and set the value to be a BLOB of length +** n containing all zeros. +*/ +#ifndef SQLITE_OMIT_INCRBLOB +SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem *pMem, int n){ + sqlite3VdbeMemRelease(pMem); + pMem->flags = MEM_Blob|MEM_Zero; + pMem->n = 0; + if( n<0 ) n = 0; + pMem->u.nZero = n; + pMem->enc = SQLITE_UTF8; + pMem->z = 0; +} +#else +SQLITE_PRIVATE int sqlite3VdbeMemSetZeroBlob(Mem *pMem, int n){ + int nByte = n>0?n:1; + if( sqlite3VdbeMemGrow(pMem, nByte, 0) ){ + return SQLITE_NOMEM_BKPT; + } + assert( pMem->z!=0 ); + assert( sqlite3DbMallocSize(pMem->db, pMem->z)>=nByte ); + memset(pMem->z, 0, nByte); + pMem->n = n>0?n:0; + pMem->flags = MEM_Blob; + pMem->enc = SQLITE_UTF8; + return SQLITE_OK; +} +#endif + +/* +** The pMem is known to contain content that needs to be destroyed prior +** to a value change. So invoke the destructor, then set the value to +** a 64-bit integer. +*/ +static SQLITE_NOINLINE void vdbeReleaseAndSetInt64(Mem *pMem, i64 val){ + sqlite3VdbeMemSetNull(pMem); + pMem->u.i = val; + pMem->flags = MEM_Int; +} + +/* +** Delete any previous value and set the value stored in *pMem to val, +** manifest type INTEGER. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){ + if( VdbeMemDynamic(pMem) ){ + vdbeReleaseAndSetInt64(pMem, val); + }else{ + pMem->u.i = val; + pMem->flags = MEM_Int; + } +} + +/* +** Set the iIdx'th entry of array aMem[] to contain integer value val. +*/ +SQLITE_PRIVATE void sqlite3MemSetArrayInt64(sqlite3_value *aMem, int iIdx, i64 val){ + sqlite3VdbeMemSetInt64(&aMem[iIdx], val); +} + +/* A no-op destructor */ +SQLITE_PRIVATE void sqlite3NoopDestructor(void *p){ UNUSED_PARAMETER(p); } + +/* +** Set the value stored in *pMem should already be a NULL. +** Also store a pointer to go with it. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemSetPointer( + Mem *pMem, + void *pPtr, + const char *zPType, + void (*xDestructor)(void*) +){ + assert( pMem->flags==MEM_Null ); + vdbeMemClear(pMem); + pMem->u.zPType = zPType ? zPType : ""; + pMem->z = pPtr; + pMem->flags = MEM_Null|MEM_Dyn|MEM_Subtype|MEM_Term; + pMem->eSubtype = 'p'; + pMem->xDel = xDestructor ? xDestructor : sqlite3NoopDestructor; +} + +#ifndef SQLITE_OMIT_FLOATING_POINT +/* +** Delete any previous value and set the value stored in *pMem to val, +** manifest type REAL. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemSetDouble(Mem *pMem, double val){ + sqlite3VdbeMemSetNull(pMem); + if( !sqlite3IsNaN(val) ){ + pMem->u.r = val; + pMem->flags = MEM_Real; + } +} +#endif + +#ifdef SQLITE_DEBUG +/* +** Return true if the Mem holds a RowSet object. This routine is intended +** for use inside of assert() statements. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemIsRowSet(const Mem *pMem){ + return (pMem->flags&(MEM_Blob|MEM_Dyn))==(MEM_Blob|MEM_Dyn) + && pMem->xDel==sqlite3RowSetDelete; +} +#endif + +/* +** Delete any previous value and set the value of pMem to be an +** empty boolean index. +** +** Return SQLITE_OK on success and SQLITE_NOMEM if a memory allocation +** error occurs. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemSetRowSet(Mem *pMem){ + sqlite3 *db = pMem->db; + RowSet *p; + assert( db!=0 ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); + sqlite3VdbeMemRelease(pMem); + p = sqlite3RowSetInit(db); + if( p==0 ) return SQLITE_NOMEM; + pMem->z = (char*)p; + pMem->flags = MEM_Blob|MEM_Dyn; + pMem->xDel = sqlite3RowSetDelete; + return SQLITE_OK; +} + +/* +** Return true if the Mem object contains a TEXT or BLOB that is +** too large - whose size exceeds SQLITE_MAX_LENGTH. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemTooBig(Mem *p){ + assert( p->db!=0 ); + if( p->flags & (MEM_Str|MEM_Blob) ){ + int n = p->n; + if( p->flags & MEM_Zero ){ + n += p->u.nZero; + } + return n>p->db->aLimit[SQLITE_LIMIT_LENGTH]; + } + return 0; +} + +#ifdef SQLITE_DEBUG +/* +** This routine prepares a memory cell for modification by breaking +** its link to a shallow copy and by marking any current shallow +** copies of this cell as invalid. +** +** This is used for testing and debugging only - to help ensure that shallow +** copies (created by OP_SCopy) are not misused. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemAboutToChange(Vdbe *pVdbe, Mem *pMem){ + int i; + Mem *pX; + if( pMem->bScopy ){ + for(i=1, pX=pVdbe->aMem+1; inMem; i++, pX++){ + if( pX->pScopyFrom==pMem ){ + u16 mFlags; + if( pVdbe->db->flags & SQLITE_VdbeTrace ){ + sqlite3DebugPrintf("Invalidate R[%d] due to change in R[%d]\n", + (int)(pX - pVdbe->aMem), (int)(pMem - pVdbe->aMem)); + } + /* If pX is marked as a shallow copy of pMem, then try to verify that + ** no significant changes have been made to pX since the OP_SCopy. + ** A significant change would indicated a missed call to this + ** function for pX. Minor changes, such as adding or removing a + ** dual type, are allowed, as long as the underlying value is the + ** same. */ + mFlags = pMem->flags & pX->flags & pX->mScopyFlags; + assert( (mFlags&(MEM_Int|MEM_IntReal))==0 || pMem->u.i==pX->u.i ); + + /* pMem is the register that is changing. But also mark pX as + ** undefined so that we can quickly detect the shallow-copy error */ + pX->flags = MEM_Undefined; + pX->pScopyFrom = 0; + } + } + pMem->bScopy = 0; + } + pMem->pScopyFrom = 0; +} +#endif /* SQLITE_DEBUG */ + +/* +** Make an shallow copy of pFrom into pTo. Prior contents of +** pTo are freed. The pFrom->z field is not duplicated. If +** pFrom->z is used, then pTo->z points to the same thing as pFrom->z +** and flags gets srcType (either MEM_Ephem or MEM_Static). +*/ +static SQLITE_NOINLINE void vdbeClrCopy(Mem *pTo, const Mem *pFrom, int eType){ + vdbeMemClearExternAndSetNull(pTo); + assert( !VdbeMemDynamic(pTo) ); + sqlite3VdbeMemShallowCopy(pTo, pFrom, eType); +} +SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int srcType){ + assert( !sqlite3VdbeMemIsRowSet(pFrom) ); + assert( pTo->db==pFrom->db ); + if( VdbeMemDynamic(pTo) ){ vdbeClrCopy(pTo,pFrom,srcType); return; } + memcpy(pTo, pFrom, MEMCELLSIZE); + if( (pFrom->flags&MEM_Static)==0 ){ + pTo->flags &= ~(MEM_Dyn|MEM_Static|MEM_Ephem); + assert( srcType==MEM_Ephem || srcType==MEM_Static ); + pTo->flags |= srcType; + } +} + +/* +** Make a full copy of pFrom into pTo. Prior contents of pTo are +** freed before the copy is made. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemCopy(Mem *pTo, const Mem *pFrom){ + int rc = SQLITE_OK; + + assert( !sqlite3VdbeMemIsRowSet(pFrom) ); + if( VdbeMemDynamic(pTo) ) vdbeMemClearExternAndSetNull(pTo); + memcpy(pTo, pFrom, MEMCELLSIZE); + pTo->flags &= ~MEM_Dyn; + if( pTo->flags&(MEM_Str|MEM_Blob) ){ + if( 0==(pFrom->flags&MEM_Static) ){ + pTo->flags |= MEM_Ephem; + rc = sqlite3VdbeMemMakeWriteable(pTo); + } + } + + return rc; +} + +/* +** Transfer the contents of pFrom to pTo. Any existing value in pTo is +** freed. If pFrom contains ephemeral data, a copy is made. +** +** pFrom contains an SQL NULL when this routine returns. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemMove(Mem *pTo, Mem *pFrom){ + assert( pFrom->db==0 || sqlite3_mutex_held(pFrom->db->mutex) ); + assert( pTo->db==0 || sqlite3_mutex_held(pTo->db->mutex) ); + assert( pFrom->db==0 || pTo->db==0 || pFrom->db==pTo->db ); + + sqlite3VdbeMemRelease(pTo); + memcpy(pTo, pFrom, sizeof(Mem)); + pFrom->flags = MEM_Null; + pFrom->szMalloc = 0; +} + +/* +** Change the value of a Mem to be a string or a BLOB. +** +** The memory management strategy depends on the value of the xDel +** parameter. If the value passed is SQLITE_TRANSIENT, then the +** string is copied into a (possibly existing) buffer managed by the +** Mem structure. Otherwise, any existing buffer is freed and the +** pointer copied. +** +** If the string is too large (if it exceeds the SQLITE_LIMIT_LENGTH +** size limit) then no memory allocation occurs. If the string can be +** stored without allocating memory, then it is. If a memory allocation +** is required to store the string, then value of pMem is unchanged. In +** either case, SQLITE_TOOBIG is returned. +** +** The "enc" parameter is the text encoding for the string, or zero +** to store a blob. +** +** If n is negative, then the string consists of all bytes up to but +** excluding the first zero character. The n parameter must be +** non-negative for blobs. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemSetStr( + Mem *pMem, /* Memory cell to set to string value */ + const char *z, /* String pointer */ + i64 n, /* Bytes in string, or negative */ + u8 enc, /* Encoding of z. 0 for BLOBs */ + void (*xDel)(void*) /* Destructor function */ +){ + i64 nByte = n; /* New value for pMem->n */ + int iLimit; /* Maximum allowed string or blob size */ + u16 flags; /* New value for pMem->flags */ + + assert( pMem!=0 ); + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + assert( !sqlite3VdbeMemIsRowSet(pMem) ); + assert( enc!=0 || n>=0 ); + + /* If z is a NULL pointer, set pMem to contain an SQL NULL. */ + if( !z ){ + sqlite3VdbeMemSetNull(pMem); + return SQLITE_OK; + } + + if( pMem->db ){ + iLimit = pMem->db->aLimit[SQLITE_LIMIT_LENGTH]; + }else{ + iLimit = SQLITE_MAX_LENGTH; + } + if( nByte<0 ){ + assert( enc!=0 ); + if( enc==SQLITE_UTF8 ){ + nByte = strlen(z); + }else{ + for(nByte=0; nByte<=iLimit && (z[nByte] | z[nByte+1]); nByte+=2){} + } + flags= MEM_Str|MEM_Term; + }else if( enc==0 ){ + flags = MEM_Blob; + enc = SQLITE_UTF8; + }else{ + flags = MEM_Str; + } + if( nByte>iLimit ){ + if( xDel && xDel!=SQLITE_TRANSIENT ){ + if( xDel==SQLITE_DYNAMIC ){ + sqlite3DbFree(pMem->db, (void*)z); + }else{ + xDel((void*)z); + } + } + sqlite3VdbeMemSetNull(pMem); + return sqlite3ErrorToParser(pMem->db, SQLITE_TOOBIG); + } + + /* The following block sets the new values of Mem.z and Mem.xDel. It + ** also sets a flag in local variable "flags" to indicate the memory + ** management (one of MEM_Dyn or MEM_Static). + */ + if( xDel==SQLITE_TRANSIENT ){ + i64 nAlloc = nByte; + if( flags&MEM_Term ){ + nAlloc += (enc==SQLITE_UTF8?1:2); + } + testcase( nAlloc==0 ); + testcase( nAlloc==31 ); + testcase( nAlloc==32 ); + if( sqlite3VdbeMemClearAndResize(pMem, (int)MAX(nAlloc,32)) ){ + return SQLITE_NOMEM_BKPT; + } + assert( pMem->z!=0 ); + memcpy(pMem->z, z, nAlloc); + }else{ + sqlite3VdbeMemRelease(pMem); + pMem->z = (char *)z; + if( xDel==SQLITE_DYNAMIC ){ + pMem->zMalloc = pMem->z; + pMem->szMalloc = sqlite3DbMallocSize(pMem->db, pMem->zMalloc); + }else{ + pMem->xDel = xDel; + flags |= ((xDel==SQLITE_STATIC)?MEM_Static:MEM_Dyn); + } + } + + pMem->n = (int)(nByte & 0x7fffffff); + pMem->flags = flags; + pMem->enc = enc; + +#ifndef SQLITE_OMIT_UTF16 + if( enc>SQLITE_UTF8 && sqlite3VdbeMemHandleBom(pMem) ){ + return SQLITE_NOMEM_BKPT; + } +#endif + + + return SQLITE_OK; +} + +/* +** Move data out of a btree key or data field and into a Mem structure. +** The data is payload from the entry that pCur is currently pointing +** to. offset and amt determine what portion of the data or key to retrieve. +** The result is written into the pMem element. +** +** The pMem object must have been initialized. This routine will use +** pMem->zMalloc to hold the content from the btree, if possible. New +** pMem->zMalloc space will be allocated if necessary. The calling routine +** is responsible for making sure that the pMem object is eventually +** destroyed. +** +** If this routine fails for any reason (malloc returns NULL or unable +** to read from the disk) then the pMem is left in an inconsistent state. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemFromBtree( + BtCursor *pCur, /* Cursor pointing at record to retrieve. */ + u32 offset, /* Offset from the start of data to return bytes from. */ + u32 amt, /* Number of bytes to return. */ + Mem *pMem /* OUT: Return data in this Mem structure. */ +){ + int rc; + pMem->flags = MEM_Null; + testcase( amt==SQLITE_MAX_ALLOCATION_SIZE-1 ); + testcase( amt==SQLITE_MAX_ALLOCATION_SIZE ); + if( amt>=SQLITE_MAX_ALLOCATION_SIZE ){ + return SQLITE_NOMEM_BKPT; + } + if( (u64)amt + (u64)offset > (u64)sqlite3BtreeMaxRecordSize(pCur) ){ + return SQLITE_CORRUPT_BKPT; + } + if( SQLITE_OK==(rc = sqlite3VdbeMemClearAndResize(pMem, amt+1)) ){ + rc = sqlite3BtreePayload(pCur, offset, amt, pMem->z); + if( rc==SQLITE_OK ){ + pMem->z[amt] = 0; /* Overrun area used when reading malformed records */ + pMem->flags = MEM_Blob; + pMem->n = (int)amt; + }else{ + sqlite3VdbeMemRelease(pMem); + } + } + return rc; +} +SQLITE_PRIVATE int sqlite3VdbeMemFromBtreeZeroOffset( + BtCursor *pCur, /* Cursor pointing at record to retrieve. */ + u32 amt, /* Number of bytes to return. */ + Mem *pMem /* OUT: Return data in this Mem structure. */ +){ + u32 available = 0; /* Number of bytes available on the local btree page */ + int rc = SQLITE_OK; /* Return code */ + + assert( sqlite3BtreeCursorIsValid(pCur) ); + assert( !VdbeMemDynamic(pMem) ); + + /* Note: the calls to BtreeKeyFetch() and DataFetch() below assert() + ** that both the BtShared and database handle mutexes are held. */ + assert( !sqlite3VdbeMemIsRowSet(pMem) ); + pMem->z = (char *)sqlite3BtreePayloadFetch(pCur, &available); + assert( pMem->z!=0 ); + + if( amt<=available ){ + pMem->flags = MEM_Blob|MEM_Ephem; + pMem->n = (int)amt; + }else{ + rc = sqlite3VdbeMemFromBtree(pCur, 0, amt, pMem); + } + + return rc; +} + +/* +** The pVal argument is known to be a value other than NULL. +** Convert it into a string with encoding enc and return a pointer +** to a zero-terminated version of that string. +*/ +static SQLITE_NOINLINE const void *valueToText(sqlite3_value* pVal, u8 enc){ + assert( pVal!=0 ); + assert( pVal->db==0 || sqlite3_mutex_held(pVal->db->mutex) ); + assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) ); + assert( !sqlite3VdbeMemIsRowSet(pVal) ); + assert( (pVal->flags & (MEM_Null))==0 ); + if( pVal->flags & (MEM_Blob|MEM_Str) ){ + if( ExpandBlob(pVal) ) return 0; + pVal->flags |= MEM_Str; + if( pVal->enc != (enc & ~SQLITE_UTF16_ALIGNED) ){ + sqlite3VdbeChangeEncoding(pVal, enc & ~SQLITE_UTF16_ALIGNED); + } + if( (enc & SQLITE_UTF16_ALIGNED)!=0 && 1==(1&SQLITE_PTR_TO_INT(pVal->z)) ){ + assert( (pVal->flags & (MEM_Ephem|MEM_Static))!=0 ); + if( sqlite3VdbeMemMakeWriteable(pVal)!=SQLITE_OK ){ + return 0; + } + } + sqlite3VdbeMemNulTerminate(pVal); /* IMP: R-31275-44060 */ + }else{ + sqlite3VdbeMemStringify(pVal, enc, 0); + assert( 0==(1&SQLITE_PTR_TO_INT(pVal->z)) ); + } + assert(pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) || pVal->db==0 + || pVal->db->mallocFailed ); + if( pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) ){ + assert( sqlite3VdbeMemValidStrRep(pVal) ); + return pVal->z; + }else{ + return 0; + } +} + +/* This function is only available internally, it is not part of the +** external API. It works in a similar way to sqlite3_value_text(), +** except the data returned is in the encoding specified by the second +** parameter, which must be one of SQLITE_UTF16BE, SQLITE_UTF16LE or +** SQLITE_UTF8. +** +** (2006-02-16:) The enc value can be or-ed with SQLITE_UTF16_ALIGNED. +** If that is the case, then the result must be aligned on an even byte +** boundary. +*/ +SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value* pVal, u8 enc){ + if( !pVal ) return 0; + assert( pVal->db==0 || sqlite3_mutex_held(pVal->db->mutex) ); + assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) ); + assert( !sqlite3VdbeMemIsRowSet(pVal) ); + if( (pVal->flags&(MEM_Str|MEM_Term))==(MEM_Str|MEM_Term) && pVal->enc==enc ){ + assert( sqlite3VdbeMemValidStrRep(pVal) ); + return pVal->z; + } + if( pVal->flags&MEM_Null ){ + return 0; + } + return valueToText(pVal, enc); +} + +/* Return true if sqlit3_value object pVal is a string or blob value +** that uses the destructor specified in the second argument. +** +** TODO: Maybe someday promote this interface into a published API so +** that third-party extensions can get access to it? +*/ +SQLITE_PRIVATE int sqlite3ValueIsOfClass(const sqlite3_value *pVal, void(*xFree)(void*)){ + if( ALWAYS(pVal!=0) + && ALWAYS((pVal->flags & (MEM_Str|MEM_Blob))!=0) + && (pVal->flags & MEM_Dyn)!=0 + && pVal->xDel==xFree + ){ + return 1; + }else{ + return 0; + } +} + +/* +** Create a new sqlite3_value object. +*/ +SQLITE_PRIVATE sqlite3_value *sqlite3ValueNew(sqlite3 *db){ + Mem *p = sqlite3DbMallocZero(db, sizeof(*p)); + if( p ){ + p->flags = MEM_Null; + p->db = db; + } + return p; +} + +/* +** Context object passed by sqlite3Stat4ProbeSetValue() through to +** valueNew(). See comments above valueNew() for details. +*/ +struct ValueNewStat4Ctx { + Parse *pParse; + Index *pIdx; + UnpackedRecord **ppRec; + int iVal; +}; + +/* +** Allocate and return a pointer to a new sqlite3_value object. If +** the second argument to this function is NULL, the object is allocated +** by calling sqlite3ValueNew(). +** +** Otherwise, if the second argument is non-zero, then this function is +** being called indirectly by sqlite3Stat4ProbeSetValue(). If it has not +** already been allocated, allocate the UnpackedRecord structure that +** that function will return to its caller here. Then return a pointer to +** an sqlite3_value within the UnpackedRecord.a[] array. +*/ +static sqlite3_value *valueNew(sqlite3 *db, struct ValueNewStat4Ctx *p){ +#ifdef SQLITE_ENABLE_STAT4 + if( p ){ + UnpackedRecord *pRec = p->ppRec[0]; + + if( pRec==0 ){ + Index *pIdx = p->pIdx; /* Index being probed */ + i64 nByte; /* Bytes of space to allocate */ + int i; /* Counter variable */ + int nCol = pIdx->nColumn; /* Number of index columns including rowid */ + + nByte = sizeof(Mem) * nCol + ROUND8(sizeof(UnpackedRecord)); + pRec = (UnpackedRecord*)sqlite3DbMallocZero(db, nByte); + if( pRec ){ + pRec->pKeyInfo = sqlite3KeyInfoOfIndex(p->pParse, pIdx); + if( pRec->pKeyInfo ){ + assert( pRec->pKeyInfo->nAllField==nCol ); + assert( pRec->pKeyInfo->enc==ENC(db) ); + pRec->aMem = (Mem *)((u8*)pRec + ROUND8(sizeof(UnpackedRecord))); + for(i=0; iaMem[i].flags = MEM_Null; + pRec->aMem[i].db = db; + } + }else{ + sqlite3DbFreeNN(db, pRec); + pRec = 0; + } + } + if( pRec==0 ) return 0; + p->ppRec[0] = pRec; + } + + pRec->nField = p->iVal+1; + sqlite3VdbeMemSetNull(&pRec->aMem[p->iVal]); + return &pRec->aMem[p->iVal]; + } +#else + UNUSED_PARAMETER(p); +#endif /* defined(SQLITE_ENABLE_STAT4) */ + return sqlite3ValueNew(db); +} + +/* +** The expression object indicated by the second argument is guaranteed +** to be a scalar SQL function. If +** +** * all function arguments are SQL literals, +** * one of the SQLITE_FUNC_CONSTANT or _SLOCHNG function flags is set, and +** * the SQLITE_FUNC_NEEDCOLL function flag is not set, +** +** then this routine attempts to invoke the SQL function. Assuming no +** error occurs, output parameter (*ppVal) is set to point to a value +** object containing the result before returning SQLITE_OK. +** +** Affinity aff is applied to the result of the function before returning. +** If the result is a text value, the sqlite3_value object uses encoding +** enc. +** +** If the conditions above are not met, this function returns SQLITE_OK +** and sets (*ppVal) to NULL. Or, if an error occurs, (*ppVal) is set to +** NULL and an SQLite error code returned. +*/ +#ifdef SQLITE_ENABLE_STAT4 +static int valueFromFunction( + sqlite3 *db, /* The database connection */ + const Expr *p, /* The expression to evaluate */ + u8 enc, /* Encoding to use */ + u8 aff, /* Affinity to use */ + sqlite3_value **ppVal, /* Write the new value here */ + struct ValueNewStat4Ctx *pCtx /* Second argument for valueNew() */ +){ + sqlite3_context ctx; /* Context object for function invocation */ + sqlite3_value **apVal = 0; /* Function arguments */ + int nVal = 0; /* Number of function arguments */ + FuncDef *pFunc = 0; /* Function definition */ + sqlite3_value *pVal = 0; /* New value */ + int rc = SQLITE_OK; /* Return code */ + ExprList *pList = 0; /* Function arguments */ + int i; /* Iterator variable */ + + assert( pCtx!=0 ); + assert( (p->flags & EP_TokenOnly)==0 ); + assert( ExprUseXList(p) ); + pList = p->x.pList; + if( pList ) nVal = pList->nExpr; + assert( !ExprHasProperty(p, EP_IntValue) ); + pFunc = sqlite3FindFunction(db, p->u.zToken, nVal, enc, 0); +#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION + if( pFunc==0 ) return SQLITE_OK; +#endif + assert( pFunc ); + if( (pFunc->funcFlags & (SQLITE_FUNC_CONSTANT|SQLITE_FUNC_SLOCHNG))==0 + || (pFunc->funcFlags & (SQLITE_FUNC_NEEDCOLL|SQLITE_FUNC_RUNONLY))!=0 + ){ + return SQLITE_OK; + } + + if( pList ){ + apVal = (sqlite3_value**)sqlite3DbMallocZero(db, sizeof(apVal[0]) * nVal); + if( apVal==0 ){ + rc = SQLITE_NOMEM_BKPT; + goto value_from_function_out; + } + for(i=0; ipParse, pList->a[i].pExpr, aff, + &apVal[i]); + if( apVal[i]==0 || rc!=SQLITE_OK ) goto value_from_function_out; + } + } + + pVal = valueNew(db, pCtx); + if( pVal==0 ){ + rc = SQLITE_NOMEM_BKPT; + goto value_from_function_out; + } + + memset(&ctx, 0, sizeof(ctx)); + ctx.pOut = pVal; + ctx.pFunc = pFunc; + ctx.enc = ENC(db); + pFunc->xSFunc(&ctx, nVal, apVal); + if( ctx.isError ){ + rc = ctx.isError; + sqlite3ErrorMsg(pCtx->pParse, "%s", sqlite3_value_text(pVal)); + }else{ + sqlite3ValueApplyAffinity(pVal, aff, SQLITE_UTF8); + assert( rc==SQLITE_OK ); + rc = sqlite3VdbeChangeEncoding(pVal, enc); + if( NEVER(rc==SQLITE_OK && sqlite3VdbeMemTooBig(pVal)) ){ + rc = SQLITE_TOOBIG; + pCtx->pParse->nErr++; + } + } + + value_from_function_out: + if( rc!=SQLITE_OK ){ + pVal = 0; + pCtx->pParse->rc = rc; + } + if( apVal ){ + for(i=0; iop)==TK_UPLUS || op==TK_SPAN ) pExpr = pExpr->pLeft; + if( op==TK_REGISTER ) op = pExpr->op2; + + /* Compressed expressions only appear when parsing the DEFAULT clause + ** on a table column definition, and hence only when pCtx==0. This + ** check ensures that an EP_TokenOnly expression is never passed down + ** into valueFromFunction(). */ + assert( (pExpr->flags & EP_TokenOnly)==0 || pCtx==0 ); + + if( op==TK_CAST ){ + u8 aff; + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + aff = sqlite3AffinityType(pExpr->u.zToken,0); + rc = valueFromExpr(db, pExpr->pLeft, enc, aff, ppVal, pCtx); + testcase( rc!=SQLITE_OK ); + if( *ppVal ){ +#ifdef SQLITE_ENABLE_STAT4 + rc = ExpandBlob(*ppVal); +#else + /* zero-blobs only come from functions, not literal values. And + ** functions are only processed under STAT4 */ + assert( (ppVal[0][0].flags & MEM_Zero)==0 ); +#endif + sqlite3VdbeMemCast(*ppVal, aff, enc); + sqlite3ValueApplyAffinity(*ppVal, affinity, enc); + } + return rc; + } + + /* Handle negative integers in a single step. This is needed in the + ** case when the value is -9223372036854775808. Except - do not do this + ** for hexadecimal literals. */ + if( op==TK_UMINUS ){ + Expr *pLeft = pExpr->pLeft; + if( (pLeft->op==TK_INTEGER || pLeft->op==TK_FLOAT) ){ + if( ExprHasProperty(pLeft, EP_IntValue) + || pLeft->u.zToken[0]!='0' || (pLeft->u.zToken[1] & ~0x20)!='X' + ){ + pExpr = pLeft; + op = pExpr->op; + negInt = -1; + zNeg = "-"; + } + } + } + + if( op==TK_STRING || op==TK_FLOAT || op==TK_INTEGER ){ + pVal = valueNew(db, pCtx); + if( pVal==0 ) goto no_mem; + if( ExprHasProperty(pExpr, EP_IntValue) ){ + sqlite3VdbeMemSetInt64(pVal, (i64)pExpr->u.iValue*negInt); + }else{ + i64 iVal; + if( op==TK_INTEGER && 0==sqlite3DecOrHexToI64(pExpr->u.zToken, &iVal) ){ + sqlite3VdbeMemSetInt64(pVal, iVal*negInt); + }else{ + zVal = sqlite3MPrintf(db, "%s%s", zNeg, pExpr->u.zToken); + if( zVal==0 ) goto no_mem; + sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC); + } + } + if( affinity==SQLITE_AFF_BLOB ){ + if( op==TK_FLOAT ){ + assert( pVal && pVal->z && pVal->flags==(MEM_Str|MEM_Term) ); + sqlite3AtoF(pVal->z, &pVal->u.r, pVal->n, SQLITE_UTF8); + pVal->flags = MEM_Real; + }else if( op==TK_INTEGER ){ + /* This case is required by -9223372036854775808 and other strings + ** that look like integers but cannot be handled by the + ** sqlite3DecOrHexToI64() call above. */ + sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8); + } + }else{ + sqlite3ValueApplyAffinity(pVal, affinity, SQLITE_UTF8); + } + assert( (pVal->flags & MEM_IntReal)==0 ); + if( pVal->flags & (MEM_Int|MEM_IntReal|MEM_Real) ){ + testcase( pVal->flags & MEM_Int ); + testcase( pVal->flags & MEM_Real ); + pVal->flags &= ~MEM_Str; + } + if( enc!=SQLITE_UTF8 ){ + rc = sqlite3VdbeChangeEncoding(pVal, enc); + } + }else if( op==TK_UMINUS ) { + /* This branch happens for multiple negative signs. Ex: -(-5) */ + if( SQLITE_OK==valueFromExpr(db,pExpr->pLeft,enc,affinity,&pVal,pCtx) + && pVal!=0 + ){ + sqlite3VdbeMemNumerify(pVal); + if( pVal->flags & MEM_Real ){ + pVal->u.r = -pVal->u.r; + }else if( pVal->u.i==SMALLEST_INT64 ){ +#ifndef SQLITE_OMIT_FLOATING_POINT + pVal->u.r = -(double)SMALLEST_INT64; +#else + pVal->u.r = LARGEST_INT64; +#endif + MemSetTypeFlag(pVal, MEM_Real); + }else{ + pVal->u.i = -pVal->u.i; + } + sqlite3ValueApplyAffinity(pVal, affinity, enc); + } + }else if( op==TK_NULL ){ + pVal = valueNew(db, pCtx); + if( pVal==0 ) goto no_mem; + sqlite3VdbeMemSetNull(pVal); + } +#ifndef SQLITE_OMIT_BLOB_LITERAL + else if( op==TK_BLOB ){ + int nVal; + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' ); + assert( pExpr->u.zToken[1]=='\'' ); + pVal = valueNew(db, pCtx); + if( !pVal ) goto no_mem; + zVal = &pExpr->u.zToken[2]; + nVal = sqlite3Strlen30(zVal)-1; + assert( zVal[nVal]=='\'' ); + sqlite3VdbeMemSetStr(pVal, sqlite3HexToBlob(db, zVal, nVal), nVal/2, + 0, SQLITE_DYNAMIC); + } +#endif +#ifdef SQLITE_ENABLE_STAT4 + else if( op==TK_FUNCTION && pCtx!=0 ){ + rc = valueFromFunction(db, pExpr, enc, affinity, &pVal, pCtx); + } +#endif + else if( op==TK_TRUEFALSE ){ + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + pVal = valueNew(db, pCtx); + if( pVal ){ + pVal->flags = MEM_Int; + pVal->u.i = pExpr->u.zToken[4]==0; + sqlite3ValueApplyAffinity(pVal, affinity, enc); + } + } + + *ppVal = pVal; + return rc; + +no_mem: +#ifdef SQLITE_ENABLE_STAT4 + if( pCtx==0 || NEVER(pCtx->pParse->nErr==0) ) +#endif + sqlite3OomFault(db); + sqlite3DbFree(db, zVal); + assert( *ppVal==0 ); +#ifdef SQLITE_ENABLE_STAT4 + if( pCtx==0 ) sqlite3ValueFree(pVal); +#else + assert( pCtx==0 ); sqlite3ValueFree(pVal); +#endif + return SQLITE_NOMEM_BKPT; +} + +/* +** Create a new sqlite3_value object, containing the value of pExpr. +** +** This only works for very simple expressions that consist of one constant +** token (i.e. "5", "5.1", "'a string'"). If the expression can +** be converted directly into a value, then the value is allocated and +** a pointer written to *ppVal. The caller is responsible for deallocating +** the value by passing it to sqlite3ValueFree() later on. If the expression +** cannot be converted to a value, then *ppVal is set to NULL. +*/ +SQLITE_PRIVATE int sqlite3ValueFromExpr( + sqlite3 *db, /* The database connection */ + const Expr *pExpr, /* The expression to evaluate */ + u8 enc, /* Encoding to use */ + u8 affinity, /* Affinity to use */ + sqlite3_value **ppVal /* Write the new value here */ +){ + return pExpr ? valueFromExpr(db, pExpr, enc, affinity, ppVal, 0) : 0; +} + +#ifdef SQLITE_ENABLE_STAT4 +/* +** Attempt to extract a value from pExpr and use it to construct *ppVal. +** +** If pAlloc is not NULL, then an UnpackedRecord object is created for +** pAlloc if one does not exist and the new value is added to the +** UnpackedRecord object. +** +** A value is extracted in the following cases: +** +** * (pExpr==0). In this case the value is assumed to be an SQL NULL, +** +** * The expression is a bound variable, and this is a reprepare, or +** +** * The expression is a literal value. +** +** On success, *ppVal is made to point to the extracted value. The caller +** is responsible for ensuring that the value is eventually freed. +*/ +static int stat4ValueFromExpr( + Parse *pParse, /* Parse context */ + Expr *pExpr, /* The expression to extract a value from */ + u8 affinity, /* Affinity to use */ + struct ValueNewStat4Ctx *pAlloc,/* How to allocate space. Or NULL */ + sqlite3_value **ppVal /* OUT: New value object (or NULL) */ +){ + int rc = SQLITE_OK; + sqlite3_value *pVal = 0; + sqlite3 *db = pParse->db; + + /* Skip over any TK_COLLATE nodes */ + pExpr = sqlite3ExprSkipCollate(pExpr); + + assert( pExpr==0 || pExpr->op!=TK_REGISTER || pExpr->op2!=TK_VARIABLE ); + if( !pExpr ){ + pVal = valueNew(db, pAlloc); + if( pVal ){ + sqlite3VdbeMemSetNull((Mem*)pVal); + } + }else if( pExpr->op==TK_VARIABLE && (db->flags & SQLITE_EnableQPSG)==0 ){ + Vdbe *v; + int iBindVar = pExpr->iColumn; + sqlite3VdbeSetVarmask(pParse->pVdbe, iBindVar); + if( (v = pParse->pReprepare)!=0 ){ + pVal = valueNew(db, pAlloc); + if( pVal ){ + rc = sqlite3VdbeMemCopy((Mem*)pVal, &v->aVar[iBindVar-1]); + sqlite3ValueApplyAffinity(pVal, affinity, ENC(db)); + pVal->db = pParse->db; + } + } + }else{ + rc = valueFromExpr(db, pExpr, ENC(db), affinity, &pVal, pAlloc); + } + + assert( pVal==0 || pVal->db==db ); + *ppVal = pVal; + return rc; +} + +/* +** This function is used to allocate and populate UnpackedRecord +** structures intended to be compared against sample index keys stored +** in the sqlite_stat4 table. +** +** A single call to this function populates zero or more fields of the +** record starting with field iVal (fields are numbered from left to +** right starting with 0). A single field is populated if: +** +** * (pExpr==0). In this case the value is assumed to be an SQL NULL, +** +** * The expression is a bound variable, and this is a reprepare, or +** +** * The sqlite3ValueFromExpr() function is able to extract a value +** from the expression (i.e. the expression is a literal value). +** +** Or, if pExpr is a TK_VECTOR, one field is populated for each of the +** vector components that match either of the two latter criteria listed +** above. +** +** Before any value is appended to the record, the affinity of the +** corresponding column within index pIdx is applied to it. Before +** this function returns, output parameter *pnExtract is set to the +** number of values appended to the record. +** +** When this function is called, *ppRec must either point to an object +** allocated by an earlier call to this function, or must be NULL. If it +** is NULL and a value can be successfully extracted, a new UnpackedRecord +** is allocated (and *ppRec set to point to it) before returning. +** +** Unless an error is encountered, SQLITE_OK is returned. It is not an +** error if a value cannot be extracted from pExpr. If an error does +** occur, an SQLite error code is returned. +*/ +SQLITE_PRIVATE int sqlite3Stat4ProbeSetValue( + Parse *pParse, /* Parse context */ + Index *pIdx, /* Index being probed */ + UnpackedRecord **ppRec, /* IN/OUT: Probe record */ + Expr *pExpr, /* The expression to extract a value from */ + int nElem, /* Maximum number of values to append */ + int iVal, /* Array element to populate */ + int *pnExtract /* OUT: Values appended to the record */ +){ + int rc = SQLITE_OK; + int nExtract = 0; + + if( pExpr==0 || pExpr->op!=TK_SELECT ){ + int i; + struct ValueNewStat4Ctx alloc; + + alloc.pParse = pParse; + alloc.pIdx = pIdx; + alloc.ppRec = ppRec; + + for(i=0; idb, pIdx, iVal+i); + alloc.iVal = iVal+i; + rc = stat4ValueFromExpr(pParse, pElem, aff, &alloc, &pVal); + if( !pVal ) break; + nExtract++; + } + } + + *pnExtract = nExtract; + return rc; +} + +/* +** Attempt to extract a value from expression pExpr using the methods +** as described for sqlite3Stat4ProbeSetValue() above. +** +** If successful, set *ppVal to point to a new value object and return +** SQLITE_OK. If no value can be extracted, but no other error occurs +** (e.g. OOM), return SQLITE_OK and set *ppVal to NULL. Or, if an error +** does occur, return an SQLite error code. The final value of *ppVal +** is undefined in this case. +*/ +SQLITE_PRIVATE int sqlite3Stat4ValueFromExpr( + Parse *pParse, /* Parse context */ + Expr *pExpr, /* The expression to extract a value from */ + u8 affinity, /* Affinity to use */ + sqlite3_value **ppVal /* OUT: New value object (or NULL) */ +){ + return stat4ValueFromExpr(pParse, pExpr, affinity, 0, ppVal); +} + +/* +** Extract the iCol-th column from the nRec-byte record in pRec. Write +** the column value into *ppVal. If *ppVal is initially NULL then a new +** sqlite3_value object is allocated. +** +** If *ppVal is initially NULL then the caller is responsible for +** ensuring that the value written into *ppVal is eventually freed. +*/ +SQLITE_PRIVATE int sqlite3Stat4Column( + sqlite3 *db, /* Database handle */ + const void *pRec, /* Pointer to buffer containing record */ + int nRec, /* Size of buffer pRec in bytes */ + int iCol, /* Column to extract */ + sqlite3_value **ppVal /* OUT: Extracted value */ +){ + u32 t = 0; /* a column type code */ + u32 nHdr; /* Size of the header in the record */ + u32 iHdr; /* Next unread header byte */ + i64 iField; /* Next unread data byte */ + u32 szField = 0; /* Size of the current data field */ + int i; /* Column index */ + u8 *a = (u8*)pRec; /* Typecast byte array */ + Mem *pMem = *ppVal; /* Write result into this Mem object */ + + assert( iCol>0 ); + iHdr = getVarint32(a, nHdr); + if( nHdr>(u32)nRec || iHdr>=nHdr ) return SQLITE_CORRUPT_BKPT; + iField = nHdr; + for(i=0; i<=iCol; i++){ + iHdr += getVarint32(&a[iHdr], t); + testcase( iHdr==nHdr ); + testcase( iHdr==nHdr+1 ); + if( iHdr>nHdr ) return SQLITE_CORRUPT_BKPT; + szField = sqlite3VdbeSerialTypeLen(t); + iField += szField; + } + testcase( iField==nRec ); + testcase( iField==nRec+1 ); + if( iField>nRec ) return SQLITE_CORRUPT_BKPT; + if( pMem==0 ){ + pMem = *ppVal = sqlite3ValueNew(db); + if( pMem==0 ) return SQLITE_NOMEM_BKPT; + } + sqlite3VdbeSerialGet(&a[iField-szField], t, pMem); + pMem->enc = ENC(db); + return SQLITE_OK; +} + +/* +** Unless it is NULL, the argument must be an UnpackedRecord object returned +** by an earlier call to sqlite3Stat4ProbeSetValue(). This call deletes +** the object. +*/ +SQLITE_PRIVATE void sqlite3Stat4ProbeFree(UnpackedRecord *pRec){ + if( pRec ){ + int i; + int nCol = pRec->pKeyInfo->nAllField; + Mem *aMem = pRec->aMem; + sqlite3 *db = aMem[0].db; + for(i=0; ipKeyInfo); + sqlite3DbFreeNN(db, pRec); + } +} +#endif /* ifdef SQLITE_ENABLE_STAT4 */ + +/* +** Change the string value of an sqlite3_value object +*/ +SQLITE_PRIVATE void sqlite3ValueSetStr( + sqlite3_value *v, /* Value to be set */ + int n, /* Length of string z */ + const void *z, /* Text of the new string */ + u8 enc, /* Encoding to use */ + void (*xDel)(void*) /* Destructor for the string */ +){ + if( v ) sqlite3VdbeMemSetStr((Mem *)v, z, n, enc, xDel); +} + +/* +** Free an sqlite3_value object +*/ +SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value *v){ + if( !v ) return; + sqlite3VdbeMemRelease((Mem *)v); + sqlite3DbFreeNN(((Mem*)v)->db, v); +} + +/* +** The sqlite3ValueBytes() routine returns the number of bytes in the +** sqlite3_value object assuming that it uses the encoding "enc". +** The valueBytes() routine is a helper function. +*/ +static SQLITE_NOINLINE int valueBytes(sqlite3_value *pVal, u8 enc){ + return valueToText(pVal, enc)!=0 ? pVal->n : 0; +} +SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value *pVal, u8 enc){ + Mem *p = (Mem*)pVal; + assert( (p->flags & MEM_Null)==0 || (p->flags & (MEM_Str|MEM_Blob))==0 ); + if( (p->flags & MEM_Str)!=0 && pVal->enc==enc ){ + return p->n; + } + if( (p->flags & MEM_Str)!=0 && enc!=SQLITE_UTF8 && pVal->enc!=SQLITE_UTF8 ){ + return p->n; + } + if( (p->flags & MEM_Blob)!=0 ){ + if( p->flags & MEM_Zero ){ + return p->n + p->u.nZero; + }else{ + return p->n; + } + } + if( p->flags & MEM_Null ) return 0; + return valueBytes(pVal, enc); +} + +/************** End of vdbemem.c *********************************************/ +/************** Begin file vdbeaux.c *****************************************/ +/* +** 2003 September 6 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code used for creating, destroying, and populating +** a VDBE (or an "sqlite3_stmt" as it is known to the outside world.) +*/ +/* #include "sqliteInt.h" */ +/* #include "vdbeInt.h" */ + +/* Forward references */ +static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef); +static void vdbeFreeOpArray(sqlite3 *, Op *, int); + +/* +** Create a new virtual database engine. +*/ +SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(Parse *pParse){ + sqlite3 *db = pParse->db; + Vdbe *p; + p = sqlite3DbMallocRawNN(db, sizeof(Vdbe) ); + if( p==0 ) return 0; + memset(&p->aOp, 0, sizeof(Vdbe)-offsetof(Vdbe,aOp)); + p->db = db; + if( db->pVdbe ){ + db->pVdbe->ppVPrev = &p->pVNext; + } + p->pVNext = db->pVdbe; + p->ppVPrev = &db->pVdbe; + db->pVdbe = p; + assert( p->eVdbeState==VDBE_INIT_STATE ); + p->pParse = pParse; + pParse->pVdbe = p; + assert( pParse->aLabel==0 ); + assert( pParse->nLabel==0 ); + assert( p->nOpAlloc==0 ); + assert( pParse->szOpAlloc==0 ); + sqlite3VdbeAddOp2(p, OP_Init, 0, 1); + return p; +} + +/* +** Return the Parse object that owns a Vdbe object. +*/ +SQLITE_PRIVATE Parse *sqlite3VdbeParser(Vdbe *p){ + return p->pParse; +} + +/* +** Change the error string stored in Vdbe.zErrMsg +*/ +SQLITE_PRIVATE void sqlite3VdbeError(Vdbe *p, const char *zFormat, ...){ + va_list ap; + sqlite3DbFree(p->db, p->zErrMsg); + va_start(ap, zFormat); + p->zErrMsg = sqlite3VMPrintf(p->db, zFormat, ap); + va_end(ap); +} + +/* +** Remember the SQL string for a prepared statement. +*/ +SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n, u8 prepFlags){ + if( p==0 ) return; + p->prepFlags = prepFlags; + if( (prepFlags & SQLITE_PREPARE_SAVESQL)==0 ){ + p->expmask = 0; + } + assert( p->zSql==0 ); + p->zSql = sqlite3DbStrNDup(p->db, z, n); +} + +#ifdef SQLITE_ENABLE_NORMALIZE +/* +** Add a new element to the Vdbe->pDblStr list. +*/ +SQLITE_PRIVATE void sqlite3VdbeAddDblquoteStr(sqlite3 *db, Vdbe *p, const char *z){ + if( p ){ + int n = sqlite3Strlen30(z); + DblquoteStr *pStr = sqlite3DbMallocRawNN(db, + sizeof(*pStr)+n+1-sizeof(pStr->z)); + if( pStr ){ + pStr->pNextStr = p->pDblStr; + p->pDblStr = pStr; + memcpy(pStr->z, z, n+1); + } + } +} +#endif + +#ifdef SQLITE_ENABLE_NORMALIZE +/* +** zId of length nId is a double-quoted identifier. Check to see if +** that identifier is really used as a string literal. +*/ +SQLITE_PRIVATE int sqlite3VdbeUsesDoubleQuotedString( + Vdbe *pVdbe, /* The prepared statement */ + const char *zId /* The double-quoted identifier, already dequoted */ +){ + DblquoteStr *pStr; + assert( zId!=0 ); + if( pVdbe->pDblStr==0 ) return 0; + for(pStr=pVdbe->pDblStr; pStr; pStr=pStr->pNextStr){ + if( strcmp(zId, pStr->z)==0 ) return 1; + } + return 0; +} +#endif + +/* +** Swap byte-code between two VDBE structures. +** +** This happens after pB was previously run and returned +** SQLITE_SCHEMA. The statement was then reprepared in pA. +** This routine transfers the new bytecode in pA over to pB +** so that pB can be run again. The old pB byte code is +** moved back to pA so that it will be cleaned up when pA is +** finalized. +*/ +SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){ + Vdbe tmp, *pTmp, **ppTmp; + char *zTmp; + assert( pA->db==pB->db ); + tmp = *pA; + *pA = *pB; + *pB = tmp; + pTmp = pA->pVNext; + pA->pVNext = pB->pVNext; + pB->pVNext = pTmp; + ppTmp = pA->ppVPrev; + pA->ppVPrev = pB->ppVPrev; + pB->ppVPrev = ppTmp; + zTmp = pA->zSql; + pA->zSql = pB->zSql; + pB->zSql = zTmp; +#ifdef SQLITE_ENABLE_NORMALIZE + zTmp = pA->zNormSql; + pA->zNormSql = pB->zNormSql; + pB->zNormSql = zTmp; +#endif + pB->expmask = pA->expmask; + pB->prepFlags = pA->prepFlags; + memcpy(pB->aCounter, pA->aCounter, sizeof(pB->aCounter)); + pB->aCounter[SQLITE_STMTSTATUS_REPREPARE]++; +} + +/* +** Resize the Vdbe.aOp array so that it is at least nOp elements larger +** than its current size. nOp is guaranteed to be less than or equal +** to 1024/sizeof(Op). +** +** If an out-of-memory error occurs while resizing the array, return +** SQLITE_NOMEM. In this case Vdbe.aOp and Vdbe.nOpAlloc remain +** unchanged (this is so that any opcodes already allocated can be +** correctly deallocated along with the rest of the Vdbe). +*/ +static int growOpArray(Vdbe *v, int nOp){ + VdbeOp *pNew; + Parse *p = v->pParse; + + /* The SQLITE_TEST_REALLOC_STRESS compile-time option is designed to force + ** more frequent reallocs and hence provide more opportunities for + ** simulated OOM faults. SQLITE_TEST_REALLOC_STRESS is generally used + ** during testing only. With SQLITE_TEST_REALLOC_STRESS grow the op array + ** by the minimum* amount required until the size reaches 512. Normal + ** operation (without SQLITE_TEST_REALLOC_STRESS) is to double the current + ** size of the op array or add 1KB of space, whichever is smaller. */ +#ifdef SQLITE_TEST_REALLOC_STRESS + sqlite3_int64 nNew = (v->nOpAlloc>=512 ? 2*(sqlite3_int64)v->nOpAlloc + : (sqlite3_int64)v->nOpAlloc+nOp); +#else + sqlite3_int64 nNew = (v->nOpAlloc ? 2*(sqlite3_int64)v->nOpAlloc + : (sqlite3_int64)(1024/sizeof(Op))); + UNUSED_PARAMETER(nOp); +#endif + + /* Ensure that the size of a VDBE does not grow too large */ + if( nNew > p->db->aLimit[SQLITE_LIMIT_VDBE_OP] ){ + sqlite3OomFault(p->db); + return SQLITE_NOMEM; + } + + assert( nOp<=(int)(1024/sizeof(Op)) ); + assert( nNew>=(v->nOpAlloc+nOp) ); + pNew = sqlite3DbRealloc(p->db, v->aOp, nNew*sizeof(Op)); + if( pNew ){ + p->szOpAlloc = sqlite3DbMallocSize(p->db, pNew); + v->nOpAlloc = p->szOpAlloc/sizeof(Op); + v->aOp = pNew; + } + return (pNew ? SQLITE_OK : SQLITE_NOMEM_BKPT); +} + +#ifdef SQLITE_DEBUG +/* This routine is just a convenient place to set a breakpoint that will +** fire after each opcode is inserted and displayed using +** "PRAGMA vdbe_addoptrace=on". Parameters "pc" (program counter) and +** pOp are available to make the breakpoint conditional. +** +** Other useful labels for breakpoints include: +** test_trace_breakpoint(pc,pOp) +** sqlite3CorruptError(lineno) +** sqlite3MisuseError(lineno) +** sqlite3CantopenError(lineno) +*/ +static void test_addop_breakpoint(int pc, Op *pOp){ + static u64 n = 0; + (void)pc; + (void)pOp; + n++; + if( n==LARGEST_UINT64 ) abort(); /* so that n is used, preventing a warning */ +} +#endif + +/* +** Slow paths for sqlite3VdbeAddOp3() and sqlite3VdbeAddOp4Int() for the +** unusual case when we need to increase the size of the Vdbe.aOp[] array +** before adding the new opcode. +*/ +static SQLITE_NOINLINE int growOp3(Vdbe *p, int op, int p1, int p2, int p3){ + assert( p->nOpAlloc<=p->nOp ); + if( growOpArray(p, 1) ) return 1; + assert( p->nOpAlloc>p->nOp ); + return sqlite3VdbeAddOp3(p, op, p1, p2, p3); +} +static SQLITE_NOINLINE int addOp4IntSlow( + Vdbe *p, /* Add the opcode to this VM */ + int op, /* The new opcode */ + int p1, /* The P1 operand */ + int p2, /* The P2 operand */ + int p3, /* The P3 operand */ + int p4 /* The P4 operand as an integer */ +){ + int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3); + if( p->db->mallocFailed==0 ){ + VdbeOp *pOp = &p->aOp[addr]; + pOp->p4type = P4_INT32; + pOp->p4.i = p4; + } + return addr; +} + + +/* +** Add a new instruction to the list of instructions current in the +** VDBE. Return the address of the new instruction. +** +** Parameters: +** +** p Pointer to the VDBE +** +** op The opcode for this instruction +** +** p1, p2, p3, p4 Operands +*/ +SQLITE_PRIVATE int sqlite3VdbeAddOp0(Vdbe *p, int op){ + return sqlite3VdbeAddOp3(p, op, 0, 0, 0); +} +SQLITE_PRIVATE int sqlite3VdbeAddOp1(Vdbe *p, int op, int p1){ + return sqlite3VdbeAddOp3(p, op, p1, 0, 0); +} +SQLITE_PRIVATE int sqlite3VdbeAddOp2(Vdbe *p, int op, int p1, int p2){ + return sqlite3VdbeAddOp3(p, op, p1, p2, 0); +} +SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){ + int i; + VdbeOp *pOp; + + i = p->nOp; + assert( p->eVdbeState==VDBE_INIT_STATE ); + assert( op>=0 && op<0xff ); + if( p->nOpAlloc<=i ){ + return growOp3(p, op, p1, p2, p3); + } + assert( p->aOp!=0 ); + p->nOp++; + pOp = &p->aOp[i]; + assert( pOp!=0 ); + pOp->opcode = (u8)op; + pOp->p5 = 0; + pOp->p1 = p1; + pOp->p2 = p2; + pOp->p3 = p3; + pOp->p4.p = 0; + pOp->p4type = P4_NOTUSED; + + /* Replicate this logic in sqlite3VdbeAddOp4Int() + ** vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */ +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS + pOp->zComment = 0; +#endif +#if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || defined(VDBE_PROFILE) + pOp->nExec = 0; + pOp->nCycle = 0; +#endif +#ifdef SQLITE_DEBUG + if( p->db->flags & SQLITE_VdbeAddopTrace ){ + sqlite3VdbePrintOp(0, i, &p->aOp[i]); + test_addop_breakpoint(i, &p->aOp[i]); + } +#endif +#ifdef SQLITE_VDBE_COVERAGE + pOp->iSrcLine = 0; +#endif + /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ** Replicate in sqlite3VdbeAddOp4Int() */ + + return i; +} +SQLITE_PRIVATE int sqlite3VdbeAddOp4Int( + Vdbe *p, /* Add the opcode to this VM */ + int op, /* The new opcode */ + int p1, /* The P1 operand */ + int p2, /* The P2 operand */ + int p3, /* The P3 operand */ + int p4 /* The P4 operand as an integer */ +){ + int i; + VdbeOp *pOp; + + i = p->nOp; + if( p->nOpAlloc<=i ){ + return addOp4IntSlow(p, op, p1, p2, p3, p4); + } + p->nOp++; + pOp = &p->aOp[i]; + assert( pOp!=0 ); + pOp->opcode = (u8)op; + pOp->p5 = 0; + pOp->p1 = p1; + pOp->p2 = p2; + pOp->p3 = p3; + pOp->p4.i = p4; + pOp->p4type = P4_INT32; + + /* Replicate this logic in sqlite3VdbeAddOp3() + ** vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */ +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS + pOp->zComment = 0; +#endif +#if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || defined(VDBE_PROFILE) + pOp->nExec = 0; + pOp->nCycle = 0; +#endif +#ifdef SQLITE_DEBUG + if( p->db->flags & SQLITE_VdbeAddopTrace ){ + sqlite3VdbePrintOp(0, i, &p->aOp[i]); + test_addop_breakpoint(i, &p->aOp[i]); + } +#endif +#ifdef SQLITE_VDBE_COVERAGE + pOp->iSrcLine = 0; +#endif + /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ** Replicate in sqlite3VdbeAddOp3() */ + + return i; +} + +/* Generate code for an unconditional jump to instruction iDest +*/ +SQLITE_PRIVATE int sqlite3VdbeGoto(Vdbe *p, int iDest){ + return sqlite3VdbeAddOp3(p, OP_Goto, 0, iDest, 0); +} + +/* Generate code to cause the string zStr to be loaded into +** register iDest +*/ +SQLITE_PRIVATE int sqlite3VdbeLoadString(Vdbe *p, int iDest, const char *zStr){ + return sqlite3VdbeAddOp4(p, OP_String8, 0, iDest, 0, zStr, 0); +} + +/* +** Generate code that initializes multiple registers to string or integer +** constants. The registers begin with iDest and increase consecutively. +** One register is initialized for each characgter in zTypes[]. For each +** "s" character in zTypes[], the register is a string if the argument is +** not NULL, or OP_Null if the value is a null pointer. For each "i" character +** in zTypes[], the register is initialized to an integer. +** +** If the input string does not end with "X" then an OP_ResultRow instruction +** is generated for the values inserted. +*/ +SQLITE_PRIVATE void sqlite3VdbeMultiLoad(Vdbe *p, int iDest, const char *zTypes, ...){ + va_list ap; + int i; + char c; + va_start(ap, zTypes); + for(i=0; (c = zTypes[i])!=0; i++){ + if( c=='s' ){ + const char *z = va_arg(ap, const char*); + sqlite3VdbeAddOp4(p, z==0 ? OP_Null : OP_String8, 0, iDest+i, 0, z, 0); + }else if( c=='i' ){ + sqlite3VdbeAddOp2(p, OP_Integer, va_arg(ap, int), iDest+i); + }else{ + goto skip_op_resultrow; + } + } + sqlite3VdbeAddOp2(p, OP_ResultRow, iDest, i); +skip_op_resultrow: + va_end(ap); +} + +/* +** Add an opcode that includes the p4 value as a pointer. +*/ +SQLITE_PRIVATE int sqlite3VdbeAddOp4( + Vdbe *p, /* Add the opcode to this VM */ + int op, /* The new opcode */ + int p1, /* The P1 operand */ + int p2, /* The P2 operand */ + int p3, /* The P3 operand */ + const char *zP4, /* The P4 operand */ + int p4type /* P4 operand type */ +){ + int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3); + sqlite3VdbeChangeP4(p, addr, zP4, p4type); + return addr; +} + +/* +** Add an OP_Function or OP_PureFunc opcode. +** +** The eCallCtx argument is information (typically taken from Expr.op2) +** that describes the calling context of the function. 0 means a general +** function call. NC_IsCheck means called by a check constraint, +** NC_IdxExpr means called as part of an index expression. NC_PartIdx +** means in the WHERE clause of a partial index. NC_GenCol means called +** while computing a generated column value. 0 is the usual case. +*/ +SQLITE_PRIVATE int sqlite3VdbeAddFunctionCall( + Parse *pParse, /* Parsing context */ + int p1, /* Constant argument mask */ + int p2, /* First argument register */ + int p3, /* Register into which results are written */ + int nArg, /* Number of argument */ + const FuncDef *pFunc, /* The function to be invoked */ + int eCallCtx /* Calling context */ +){ + Vdbe *v = pParse->pVdbe; + int addr; + sqlite3_context *pCtx; + assert( v ); + pCtx = sqlite3DbMallocRawNN(pParse->db, SZ_CONTEXT(nArg)); + if( pCtx==0 ){ + assert( pParse->db->mallocFailed ); + freeEphemeralFunction(pParse->db, (FuncDef*)pFunc); + return 0; + } + pCtx->pOut = 0; + pCtx->pFunc = (FuncDef*)pFunc; + pCtx->pVdbe = 0; + pCtx->isError = 0; + pCtx->argc = nArg; + pCtx->iOp = sqlite3VdbeCurrentAddr(v); + addr = sqlite3VdbeAddOp4(v, eCallCtx ? OP_PureFunc : OP_Function, + p1, p2, p3, (char*)pCtx, P4_FUNCCTX); + sqlite3VdbeChangeP5(v, eCallCtx & NC_SelfRef); + sqlite3MayAbort(pParse); + return addr; +} + +/* +** Add an opcode that includes the p4 value with a P4_INT64 or +** P4_REAL type. +*/ +SQLITE_PRIVATE int sqlite3VdbeAddOp4Dup8( + Vdbe *p, /* Add the opcode to this VM */ + int op, /* The new opcode */ + int p1, /* The P1 operand */ + int p2, /* The P2 operand */ + int p3, /* The P3 operand */ + const u8 *zP4, /* The P4 operand */ + int p4type /* P4 operand type */ +){ + char *p4copy = sqlite3DbMallocRawNN(sqlite3VdbeDb(p), 8); + if( p4copy ) memcpy(p4copy, zP4, 8); + return sqlite3VdbeAddOp4(p, op, p1, p2, p3, p4copy, p4type); +} + +#ifndef SQLITE_OMIT_EXPLAIN +/* +** Return the address of the current EXPLAIN QUERY PLAN baseline. +** 0 means "none". +*/ +SQLITE_PRIVATE int sqlite3VdbeExplainParent(Parse *pParse){ + VdbeOp *pOp; + if( pParse->addrExplain==0 ) return 0; + pOp = sqlite3VdbeGetOp(pParse->pVdbe, pParse->addrExplain); + return pOp->p2; +} + +/* +** Set a debugger breakpoint on the following routine in order to +** monitor the EXPLAIN QUERY PLAN code generation. +*/ +#if defined(SQLITE_DEBUG) +SQLITE_PRIVATE void sqlite3ExplainBreakpoint(const char *z1, const char *z2){ + (void)z1; + (void)z2; +} +#endif + +/* +** Add a new OP_Explain opcode. +** +** If the bPush flag is true, then make this opcode the parent for +** subsequent Explains until sqlite3VdbeExplainPop() is called. +*/ +SQLITE_PRIVATE int sqlite3VdbeExplain(Parse *pParse, u8 bPush, const char *zFmt, ...){ + int addr = 0; +#if !defined(SQLITE_DEBUG) + /* Always include the OP_Explain opcodes if SQLITE_DEBUG is defined. + ** But omit them (for performance) during production builds */ + if( pParse->explain==2 || IS_STMT_SCANSTATUS(pParse->db) ) +#endif + { + char *zMsg; + Vdbe *v; + va_list ap; + int iThis; + va_start(ap, zFmt); + zMsg = sqlite3VMPrintf(pParse->db, zFmt, ap); + va_end(ap); + v = pParse->pVdbe; + iThis = v->nOp; + addr = sqlite3VdbeAddOp4(v, OP_Explain, iThis, pParse->addrExplain, 0, + zMsg, P4_DYNAMIC); + sqlite3ExplainBreakpoint(bPush?"PUSH":"", sqlite3VdbeGetLastOp(v)->p4.z); + if( bPush){ + pParse->addrExplain = iThis; + } + sqlite3VdbeScanStatus(v, iThis, -1, -1, 0, 0); + } + return addr; +} + +/* +** Pop the EXPLAIN QUERY PLAN stack one level. +*/ +SQLITE_PRIVATE void sqlite3VdbeExplainPop(Parse *pParse){ + sqlite3ExplainBreakpoint("POP", 0); + pParse->addrExplain = sqlite3VdbeExplainParent(pParse); +} +#endif /* SQLITE_OMIT_EXPLAIN */ + +/* +** Add an OP_ParseSchema opcode. This routine is broken out from +** sqlite3VdbeAddOp4() since it needs to also needs to mark all btrees +** as having been used. +** +** The zWhere string must have been obtained from sqlite3_malloc(). +** This routine will take ownership of the allocated memory. +*/ +SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe *p, int iDb, char *zWhere, u16 p5){ + int j; + sqlite3VdbeAddOp4(p, OP_ParseSchema, iDb, 0, 0, zWhere, P4_DYNAMIC); + sqlite3VdbeChangeP5(p, p5); + for(j=0; jdb->nDb; j++) sqlite3VdbeUsesBtree(p, j); + sqlite3MayAbort(p->pParse); +} + +/* Insert the end of a co-routine +*/ +SQLITE_PRIVATE void sqlite3VdbeEndCoroutine(Vdbe *v, int regYield){ + sqlite3VdbeAddOp1(v, OP_EndCoroutine, regYield); + + /* Clear the temporary register cache, thereby ensuring that each + ** co-routine has its own independent set of registers, because co-routines + ** might expect their registers to be preserved across an OP_Yield, and + ** that could cause problems if two or more co-routines are using the same + ** temporary register. + */ + v->pParse->nTempReg = 0; + v->pParse->nRangeReg = 0; +} + +/* +** Create a new symbolic label for an instruction that has yet to be +** coded. The symbolic label is really just a negative number. The +** label can be used as the P2 value of an operation. Later, when +** the label is resolved to a specific address, the VDBE will scan +** through its operation list and change all values of P2 which match +** the label into the resolved address. +** +** The VDBE knows that a P2 value is a label because labels are +** always negative and P2 values are suppose to be non-negative. +** Hence, a negative P2 value is a label that has yet to be resolved. +** (Later:) This is only true for opcodes that have the OPFLG_JUMP +** property. +** +** Variable usage notes: +** +** Parse.aLabel[x] Stores the address that the x-th label resolves +** into. For testing (SQLITE_DEBUG), unresolved +** labels stores -1, but that is not required. +** Parse.nLabelAlloc Number of slots allocated to Parse.aLabel[] +** Parse.nLabel The *negative* of the number of labels that have +** been issued. The negative is stored because +** that gives a performance improvement over storing +** the equivalent positive value. +*/ +SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Parse *pParse){ + return --pParse->nLabel; +} + +/* +** Resolve label "x" to be the address of the next instruction to +** be inserted. The parameter "x" must have been obtained from +** a prior call to sqlite3VdbeMakeLabel(). +*/ +static SQLITE_NOINLINE void resizeResolveLabel(Parse *p, Vdbe *v, int j){ + int nNewSize = 10 - p->nLabel; + p->aLabel = sqlite3DbReallocOrFree(p->db, p->aLabel, + nNewSize*sizeof(p->aLabel[0])); + if( p->aLabel==0 ){ + p->nLabelAlloc = 0; + }else{ +#ifdef SQLITE_DEBUG + int i; + for(i=p->nLabelAlloc; iaLabel[i] = -1; +#endif + if( nNewSize>=100 && (nNewSize/100)>(p->nLabelAlloc/100) ){ + sqlite3ProgressCheck(p); + } + p->nLabelAlloc = nNewSize; + p->aLabel[j] = v->nOp; + } +} +SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe *v, int x){ + Parse *p = v->pParse; + int j = ADDR(x); + assert( v->eVdbeState==VDBE_INIT_STATE ); + assert( j<-p->nLabel ); + assert( j>=0 ); +#ifdef SQLITE_DEBUG + if( p->db->flags & SQLITE_VdbeAddopTrace ){ + printf("RESOLVE LABEL %d to %d\n", x, v->nOp); + } +#endif + if( p->nLabelAlloc + p->nLabel < 0 ){ + resizeResolveLabel(p,v,j); + }else{ + assert( p->aLabel[j]==(-1) ); /* Labels may only be resolved once */ + p->aLabel[j] = v->nOp; + } +} + +/* +** Mark the VDBE as one that can only be run one time. +*/ +SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe *p){ + sqlite3VdbeAddOp2(p, OP_Expire, 1, 1); +} + +/* +** Mark the VDBE as one that can be run multiple times. +*/ +SQLITE_PRIVATE void sqlite3VdbeReusable(Vdbe *p){ + int i; + for(i=1; ALWAYS(inOp); i++){ + if( ALWAYS(p->aOp[i].opcode==OP_Expire) ){ + p->aOp[1].opcode = OP_Noop; + break; + } + } +} + +#ifdef SQLITE_DEBUG /* sqlite3AssertMayAbort() logic */ + +/* +** The following type and function are used to iterate through all opcodes +** in a Vdbe main program and each of the sub-programs (triggers) it may +** invoke directly or indirectly. It should be used as follows: +** +** Op *pOp; +** VdbeOpIter sIter; +** +** memset(&sIter, 0, sizeof(sIter)); +** sIter.v = v; // v is of type Vdbe* +** while( (pOp = opIterNext(&sIter)) ){ +** // Do something with pOp +** } +** sqlite3DbFree(v->db, sIter.apSub); +** +*/ +typedef struct VdbeOpIter VdbeOpIter; +struct VdbeOpIter { + Vdbe *v; /* Vdbe to iterate through the opcodes of */ + SubProgram **apSub; /* Array of subprograms */ + int nSub; /* Number of entries in apSub */ + int iAddr; /* Address of next instruction to return */ + int iSub; /* 0 = main program, 1 = first sub-program etc. */ +}; +static Op *opIterNext(VdbeOpIter *p){ + Vdbe *v = p->v; + Op *pRet = 0; + Op *aOp; + int nOp; + + if( p->iSub<=p->nSub ){ + + if( p->iSub==0 ){ + aOp = v->aOp; + nOp = v->nOp; + }else{ + aOp = p->apSub[p->iSub-1]->aOp; + nOp = p->apSub[p->iSub-1]->nOp; + } + assert( p->iAddriAddr]; + p->iAddr++; + if( p->iAddr==nOp ){ + p->iSub++; + p->iAddr = 0; + } + + if( pRet->p4type==P4_SUBPROGRAM ){ + i64 nByte = (1+(u64)p->nSub)*sizeof(SubProgram*); + int j; + for(j=0; jnSub; j++){ + if( p->apSub[j]==pRet->p4.pProgram ) break; + } + if( j==p->nSub ){ + p->apSub = sqlite3DbReallocOrFree(v->db, p->apSub, nByte); + if( !p->apSub ){ + pRet = 0; + }else{ + p->apSub[p->nSub++] = pRet->p4.pProgram; + } + } + } + } + + return pRet; +} + +/* +** Check if the program stored in the VM associated with pParse may +** throw an ABORT exception (causing the statement, but not entire transaction +** to be rolled back). This condition is true if the main program or any +** sub-programs contains any of the following: +** +** * OP_Halt with P1=SQLITE_CONSTRAINT and P2=OE_Abort. +** * OP_HaltIfNull with P1=SQLITE_CONSTRAINT and P2=OE_Abort. +** * OP_Destroy +** * OP_VUpdate +** * OP_VCreate +** * OP_VRename +** * OP_FkCounter with P2==0 (immediate foreign key constraint) +** * OP_CreateBtree/BTREE_INTKEY and OP_InitCoroutine +** (for CREATE TABLE AS SELECT ...) +** +** Then check that the value of Parse.mayAbort is true if an +** ABORT may be thrown, or false otherwise. Return true if it does +** match, or false otherwise. This function is intended to be used as +** part of an assert statement in the compiler. Similar to: +** +** assert( sqlite3VdbeAssertMayAbort(pParse->pVdbe, pParse->mayAbort) ); +*/ +SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){ + int hasAbort = 0; + int hasFkCounter = 0; + int hasCreateTable = 0; + int hasCreateIndex = 0; + int hasInitCoroutine = 0; + Op *pOp; + VdbeOpIter sIter; + + if( v==0 ) return 0; + memset(&sIter, 0, sizeof(sIter)); + sIter.v = v; + + while( (pOp = opIterNext(&sIter))!=0 ){ + int opcode = pOp->opcode; + if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename + || opcode==OP_VDestroy + || opcode==OP_VCreate + || opcode==OP_ParseSchema + || opcode==OP_Function || opcode==OP_PureFunc + || ((opcode==OP_Halt || opcode==OP_HaltIfNull) + && ((pOp->p1)!=SQLITE_OK && pOp->p2==OE_Abort)) + ){ + hasAbort = 1; + break; + } + if( opcode==OP_CreateBtree && pOp->p3==BTREE_INTKEY ) hasCreateTable = 1; + if( mayAbort ){ + /* hasCreateIndex may also be set for some DELETE statements that use + ** OP_Clear. So this routine may end up returning true in the case + ** where a "DELETE FROM tbl" has a statement-journal but does not + ** require one. This is not so bad - it is an inefficiency, not a bug. */ + if( opcode==OP_CreateBtree && pOp->p3==BTREE_BLOBKEY ) hasCreateIndex = 1; + if( opcode==OP_Clear ) hasCreateIndex = 1; + } + if( opcode==OP_InitCoroutine ) hasInitCoroutine = 1; +#ifndef SQLITE_OMIT_FOREIGN_KEY + if( opcode==OP_FkCounter && pOp->p1==0 && pOp->p2==1 ){ + hasFkCounter = 1; + } +#endif + } + sqlite3DbFree(v->db, sIter.apSub); + + /* Return true if hasAbort==mayAbort. Or if a malloc failure occurred. + ** If malloc failed, then the while() loop above may not have iterated + ** through all opcodes and hasAbort may be set incorrectly. Return + ** true for this case to prevent the assert() in the callers frame + ** from failing. */ + return ( v->db->mallocFailed || hasAbort==mayAbort || hasFkCounter + || (hasCreateTable && hasInitCoroutine) || hasCreateIndex + ); +} +#endif /* SQLITE_DEBUG - the sqlite3AssertMayAbort() function */ + +#ifdef SQLITE_DEBUG +/* +** Increment the nWrite counter in the VDBE if the cursor is not an +** ephemeral cursor, or if the cursor argument is NULL. +*/ +SQLITE_PRIVATE void sqlite3VdbeIncrWriteCounter(Vdbe *p, VdbeCursor *pC){ + if( pC==0 + || (pC->eCurType!=CURTYPE_SORTER + && pC->eCurType!=CURTYPE_PSEUDO + && !pC->isEphemeral) + ){ + p->nWrite++; + } +} +#endif + +#ifdef SQLITE_DEBUG +/* +** Assert if an Abort at this point in time might result in a corrupt +** database. +*/ +SQLITE_PRIVATE void sqlite3VdbeAssertAbortable(Vdbe *p){ + assert( p->nWrite==0 || p->usesStmtJournal ); +} +#endif + +/* +** This routine is called after all opcodes have been inserted. It loops +** through all the opcodes and fixes up some details. +** +** (1) For each jump instruction with a negative P2 value (a label) +** resolve the P2 value to an actual address. +** +** (2) Compute the maximum number of arguments used by the xUpdate/xFilter +** methods of any virtual table and store that value in *pMaxVtabArgs. +** +** (3) Update the Vdbe.readOnly and Vdbe.bIsReader flags to accurately +** indicate what the prepared statement actually does. +** +** (4) (discontinued) +** +** (5) Reclaim the memory allocated for storing labels. +** +** This routine will only function correctly if the mkopcodeh.tcl generator +** script numbers the opcodes correctly. Changes to this routine must be +** coordinated with changes to mkopcodeh.tcl. +*/ +static void resolveP2Values(Vdbe *p, int *pMaxVtabArgs){ + int nMaxVtabArgs = *pMaxVtabArgs; + Op *pOp; + Parse *pParse = p->pParse; + int *aLabel = pParse->aLabel; + + assert( pParse->db->mallocFailed==0 ); /* tag-20230419-1 */ + p->readOnly = 1; + p->bIsReader = 0; + pOp = &p->aOp[p->nOp-1]; + assert( p->aOp[0].opcode==OP_Init ); + while( 1 /* Loop terminates when it reaches the OP_Init opcode */ ){ + /* Only JUMP opcodes and the short list of special opcodes in the switch + ** below need to be considered. The mkopcodeh.tcl generator script groups + ** all these opcodes together near the front of the opcode list. Skip + ** any opcode that does not need processing by virtual of the fact that + ** it is larger than SQLITE_MX_JUMP_OPCODE, as a performance optimization. + */ + if( pOp->opcode<=SQLITE_MX_JUMP_OPCODE ){ + /* NOTE: Be sure to update mkopcodeh.tcl when adding or removing + ** cases from this switch! */ + switch( pOp->opcode ){ + case OP_Transaction: { + if( pOp->p2!=0 ) p->readOnly = 0; + /* no break */ deliberate_fall_through + } + case OP_AutoCommit: + case OP_Savepoint: { + p->bIsReader = 1; + break; + } +#ifndef SQLITE_OMIT_WAL + case OP_Checkpoint: +#endif + case OP_Vacuum: + case OP_JournalMode: { + p->readOnly = 0; + p->bIsReader = 1; + break; + } + case OP_Init: { + assert( pOp->p2>=0 ); + goto resolve_p2_values_loop_exit; + } +#ifndef SQLITE_OMIT_VIRTUALTABLE + case OP_VUpdate: { + if( pOp->p2>nMaxVtabArgs ) nMaxVtabArgs = pOp->p2; + break; + } + case OP_VFilter: { + int n; + /* The instruction immediately prior to VFilter will be an + ** OP_Integer that sets the "argc" value for the VFilter. See + ** the code where OP_VFilter is generated at tag-20250207a. */ + assert( (pOp - p->aOp) >= 3 ); + assert( pOp[-1].opcode==OP_Integer ); + assert( pOp[-1].p2==pOp->p3+1 ); + n = pOp[-1].p1; + if( n>nMaxVtabArgs ) nMaxVtabArgs = n; + /* Fall through into the default case */ + /* no break */ deliberate_fall_through + } +#endif + default: { + if( pOp->p2<0 ){ + /* The mkopcodeh.tcl script has so arranged things that the only + ** non-jump opcodes less than SQLITE_MX_JUMP_CODE are guaranteed to + ** have non-negative values for P2. */ + assert( (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_JUMP)!=0 ); + assert( ADDR(pOp->p2)<-pParse->nLabel ); + assert( aLabel!=0 ); /* True because of tag-20230419-1 */ + pOp->p2 = aLabel[ADDR(pOp->p2)]; + } + + /* OPFLG_JUMP opcodes never have P2==0, though OPFLG_JUMP0 opcodes + ** might */ + assert( pOp->p2>0 + || (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_JUMP0)!=0 ); + + /* Jumps never go off the end of the bytecode array */ + assert( pOp->p2nOp + || (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_JUMP)==0 ); + break; + } + } + /* The mkopcodeh.tcl script has so arranged things that the only + ** non-jump opcodes less than SQLITE_MX_JUMP_CODE are guaranteed to + ** have non-negative values for P2. */ + assert( (sqlite3OpcodeProperty[pOp->opcode]&OPFLG_JUMP)==0 || pOp->p2>=0); + } + assert( pOp>p->aOp ); + pOp--; + } +resolve_p2_values_loop_exit: + if( aLabel ){ + sqlite3DbNNFreeNN(p->db, pParse->aLabel); + pParse->aLabel = 0; + } + pParse->nLabel = 0; + *pMaxVtabArgs = nMaxVtabArgs; + assert( p->bIsReader!=0 || DbMaskAllZero(p->btreeMask) ); +} + +#ifdef SQLITE_DEBUG +/* +** Check to see if a subroutine contains a jump to a location outside of +** the subroutine. If a jump outside the subroutine is detected, add code +** that will cause the program to halt with an error message. +** +** The subroutine consists of opcodes between iFirst and iLast. Jumps to +** locations within the subroutine are acceptable. iRetReg is a register +** that contains the return address. Jumps to outside the range of iFirst +** through iLast are also acceptable as long as the jump destination is +** an OP_Return to iReturnAddr. +** +** A jump to an unresolved label means that the jump destination will be +** beyond the current address. That is normally a jump to an early +** termination and is consider acceptable. +** +** This routine only runs during debug builds. The purpose is (of course) +** to detect invalid escapes out of a subroutine. The OP_Halt opcode +** is generated rather than an assert() or other error, so that ".eqp full" +** will still work to show the original bytecode, to aid in debugging. +*/ +SQLITE_PRIVATE void sqlite3VdbeNoJumpsOutsideSubrtn( + Vdbe *v, /* The byte-code program under construction */ + int iFirst, /* First opcode of the subroutine */ + int iLast, /* Last opcode of the subroutine */ + int iRetReg /* Subroutine return address register */ +){ + VdbeOp *pOp; + Parse *pParse; + int i; + sqlite3_str *pErr = 0; + assert( v!=0 ); + pParse = v->pParse; + assert( pParse!=0 ); + if( pParse->nErr ) return; + assert( iLast>=iFirst ); + assert( iLastnOp ); + pOp = &v->aOp[iFirst]; + for(i=iFirst; i<=iLast; i++, pOp++){ + if( (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_JUMP)!=0 ){ + int iDest = pOp->p2; /* Jump destination */ + if( iDest==0 ) continue; + if( pOp->opcode==OP_Gosub ) continue; + if( pOp->p3==20230325 && pOp->opcode==OP_NotNull ){ + /* This is a deliberately taken illegal branch. tag-20230325-2 */ + continue; + } + if( iDest<0 ){ + int j = ADDR(iDest); + assert( j>=0 ); + if( j>=-pParse->nLabel || pParse->aLabel[j]<0 ){ + continue; + } + iDest = pParse->aLabel[j]; + } + if( iDestiLast ){ + int j = iDest; + for(; jnOp; j++){ + VdbeOp *pX = &v->aOp[j]; + if( pX->opcode==OP_Return ){ + if( pX->p1==iRetReg ) break; + continue; + } + if( pX->opcode==OP_Noop ) continue; + if( pX->opcode==OP_Explain ) continue; + if( pErr==0 ){ + pErr = sqlite3_str_new(0); + }else{ + sqlite3_str_appendchar(pErr, 1, '\n'); + } + sqlite3_str_appendf(pErr, + "Opcode at %d jumps to %d which is outside the " + "subroutine at %d..%d", + i, iDest, iFirst, iLast); + break; + } + } + } + } + if( pErr ){ + char *zErr = sqlite3_str_finish(pErr); + sqlite3VdbeAddOp4(v, OP_Halt, SQLITE_INTERNAL, OE_Abort, 0, zErr, 0); + sqlite3_free(zErr); + sqlite3MayAbort(pParse); + } +} +#endif /* SQLITE_DEBUG */ + +/* +** Return the address of the next instruction to be inserted. +*/ +SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe *p){ + assert( p->eVdbeState==VDBE_INIT_STATE ); + return p->nOp; +} + +/* +** Verify that at least N opcode slots are available in p without +** having to malloc for more space (except when compiled using +** SQLITE_TEST_REALLOC_STRESS). This interface is used during testing +** to verify that certain calls to sqlite3VdbeAddOpList() can never +** fail due to a OOM fault and hence that the return value from +** sqlite3VdbeAddOpList() will always be non-NULL. +*/ +#if defined(SQLITE_DEBUG) && !defined(SQLITE_TEST_REALLOC_STRESS) +SQLITE_PRIVATE void sqlite3VdbeVerifyNoMallocRequired(Vdbe *p, int N){ + assert( p->nOp + N <= p->nOpAlloc ); +} +#endif + +/* +** Verify that the VM passed as the only argument does not contain +** an OP_ResultRow opcode. Fail an assert() if it does. This is used +** by code in pragma.c to ensure that the implementation of certain +** pragmas comports with the flags specified in the mkpragmatab.tcl +** script. +*/ +#if defined(SQLITE_DEBUG) && !defined(SQLITE_TEST_REALLOC_STRESS) +SQLITE_PRIVATE void sqlite3VdbeVerifyNoResultRow(Vdbe *p){ + int i; + for(i=0; inOp; i++){ + assert( p->aOp[i].opcode!=OP_ResultRow ); + } +} +#endif + +/* +** Generate code (a single OP_Abortable opcode) that will +** verify that the VDBE program can safely call Abort in the current +** context. +*/ +#if defined(SQLITE_DEBUG) +SQLITE_PRIVATE void sqlite3VdbeVerifyAbortable(Vdbe *p, int onError){ + if( onError==OE_Abort ) sqlite3VdbeAddOp0(p, OP_Abortable); +} +#endif + +/* +** This function returns a pointer to the array of opcodes associated with +** the Vdbe passed as the first argument. It is the callers responsibility +** to arrange for the returned array to be eventually freed using the +** vdbeFreeOpArray() function. +** +** Before returning, *pnOp is set to the number of entries in the returned +** array. Also, *pnMaxArg is set to the larger of its current value and +** the number of entries in the Vdbe.apArg[] array required to execute the +** returned program. +*/ +SQLITE_PRIVATE VdbeOp *sqlite3VdbeTakeOpArray(Vdbe *p, int *pnOp, int *pnMaxArg){ + VdbeOp *aOp = p->aOp; + assert( aOp && !p->db->mallocFailed ); + + /* Check that sqlite3VdbeUsesBtree() was not called on this VM */ + assert( DbMaskAllZero(p->btreeMask) ); + + resolveP2Values(p, pnMaxArg); + *pnOp = p->nOp; + p->aOp = 0; + return aOp; +} + +/* +** Add a whole list of operations to the operation stack. Return a +** pointer to the first operation inserted. +** +** Non-zero P2 arguments to jump instructions are automatically adjusted +** so that the jump target is relative to the first operation inserted. +*/ +SQLITE_PRIVATE VdbeOp *sqlite3VdbeAddOpList( + Vdbe *p, /* Add opcodes to the prepared statement */ + int nOp, /* Number of opcodes to add */ + VdbeOpList const *aOp, /* The opcodes to be added */ + int iLineno /* Source-file line number of first opcode */ +){ + int i; + VdbeOp *pOut, *pFirst; + assert( nOp>0 ); + assert( p->eVdbeState==VDBE_INIT_STATE ); + if( p->nOp + nOp > p->nOpAlloc && growOpArray(p, nOp) ){ + return 0; + } + pFirst = pOut = &p->aOp[p->nOp]; + for(i=0; iopcode = aOp->opcode; + pOut->p1 = aOp->p1; + pOut->p2 = aOp->p2; + assert( aOp->p2>=0 ); + if( (sqlite3OpcodeProperty[aOp->opcode] & OPFLG_JUMP)!=0 && aOp->p2>0 ){ + pOut->p2 += p->nOp; + } + pOut->p3 = aOp->p3; + pOut->p4type = P4_NOTUSED; + pOut->p4.p = 0; + pOut->p5 = 0; +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS + pOut->zComment = 0; +#endif +#ifdef SQLITE_VDBE_COVERAGE + pOut->iSrcLine = iLineno+i; +#else + (void)iLineno; +#endif +#ifdef SQLITE_DEBUG + if( p->db->flags & SQLITE_VdbeAddopTrace ){ + sqlite3VdbePrintOp(0, i+p->nOp, &p->aOp[i+p->nOp]); + } +#endif + } + p->nOp += nOp; + return pFirst; +} + +#if defined(SQLITE_ENABLE_STMT_SCANSTATUS) +/* +** Add an entry to the array of counters managed by sqlite3_stmt_scanstatus(). +*/ +SQLITE_PRIVATE void sqlite3VdbeScanStatus( + Vdbe *p, /* VM to add scanstatus() to */ + int addrExplain, /* Address of OP_Explain (or 0) */ + int addrLoop, /* Address of loop counter */ + int addrVisit, /* Address of rows visited counter */ + LogEst nEst, /* Estimated number of output rows */ + const char *zName /* Name of table or index being scanned */ +){ + if( IS_STMT_SCANSTATUS(p->db) ){ + i64 nByte = (1+(i64)p->nScan) * sizeof(ScanStatus); + ScanStatus *aNew; + aNew = (ScanStatus*)sqlite3DbRealloc(p->db, p->aScan, nByte); + if( aNew ){ + ScanStatus *pNew = &aNew[p->nScan++]; + memset(pNew, 0, sizeof(ScanStatus)); + pNew->addrExplain = addrExplain; + pNew->addrLoop = addrLoop; + pNew->addrVisit = addrVisit; + pNew->nEst = nEst; + pNew->zName = sqlite3DbStrDup(p->db, zName); + p->aScan = aNew; + } + } +} + +/* +** Add the range of instructions from addrStart to addrEnd (inclusive) to +** the set of those corresponding to the sqlite3_stmt_scanstatus() counters +** associated with the OP_Explain instruction at addrExplain. The +** sum of the sqlite3Hwtime() values for each of these instructions +** will be returned for SQLITE_SCANSTAT_NCYCLE requests. +*/ +SQLITE_PRIVATE void sqlite3VdbeScanStatusRange( + Vdbe *p, + int addrExplain, + int addrStart, + int addrEnd +){ + if( IS_STMT_SCANSTATUS(p->db) ){ + ScanStatus *pScan = 0; + int ii; + for(ii=p->nScan-1; ii>=0; ii--){ + pScan = &p->aScan[ii]; + if( pScan->addrExplain==addrExplain ) break; + pScan = 0; + } + if( pScan ){ + if( addrEnd<0 ) addrEnd = sqlite3VdbeCurrentAddr(p)-1; + for(ii=0; iiaAddrRange); ii+=2){ + if( pScan->aAddrRange[ii]==0 ){ + pScan->aAddrRange[ii] = addrStart; + pScan->aAddrRange[ii+1] = addrEnd; + break; + } + } + } + } +} + +/* +** Set the addresses for the SQLITE_SCANSTAT_NLOOP and SQLITE_SCANSTAT_NROW +** counters for the query element associated with the OP_Explain at +** addrExplain. +*/ +SQLITE_PRIVATE void sqlite3VdbeScanStatusCounters( + Vdbe *p, + int addrExplain, + int addrLoop, + int addrVisit +){ + if( IS_STMT_SCANSTATUS(p->db) ){ + ScanStatus *pScan = 0; + int ii; + for(ii=p->nScan-1; ii>=0; ii--){ + pScan = &p->aScan[ii]; + if( pScan->addrExplain==addrExplain ) break; + pScan = 0; + } + if( pScan ){ + if( addrLoop>0 ) pScan->addrLoop = addrLoop; + if( addrVisit>0 ) pScan->addrVisit = addrVisit; + } + } +} +#endif /* defined(SQLITE_ENABLE_STMT_SCANSTATUS) */ + + +/* +** Change the value of the opcode, or P1, P2, P3, or P5 operands +** for a specific instruction. +*/ +SQLITE_PRIVATE void sqlite3VdbeChangeOpcode(Vdbe *p, int addr, u8 iNewOpcode){ + assert( addr>=0 ); + sqlite3VdbeGetOp(p,addr)->opcode = iNewOpcode; +} +SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe *p, int addr, int val){ + assert( addr>=0 ); + sqlite3VdbeGetOp(p,addr)->p1 = val; +} +SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, int addr, int val){ + assert( addr>=0 || p->db->mallocFailed ); + sqlite3VdbeGetOp(p,addr)->p2 = val; +} +SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, int addr, int val){ + assert( addr>=0 ); + sqlite3VdbeGetOp(p,addr)->p3 = val; +} +SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u16 p5){ + assert( p->nOp>0 || p->db->mallocFailed ); + if( p->nOp>0 ) p->aOp[p->nOp-1].p5 = p5; +} + +/* +** If the previous opcode is an OP_Column that delivers results +** into register iDest, then add the OPFLAG_TYPEOFARG flag to that +** opcode. +*/ +SQLITE_PRIVATE void sqlite3VdbeTypeofColumn(Vdbe *p, int iDest){ + VdbeOp *pOp = sqlite3VdbeGetLastOp(p); +#ifdef SQLITE_DEBUG + while( pOp->opcode==OP_ReleaseReg ) pOp--; +#endif + if( pOp->p3==iDest && pOp->opcode==OP_Column ){ + pOp->p5 |= OPFLAG_TYPEOFARG; + } +} + +/* +** Change the P2 operand of instruction addr so that it points to +** the address of the next instruction to be coded. +*/ +SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe *p, int addr){ + sqlite3VdbeChangeP2(p, addr, p->nOp); +} + +/* +** Change the P2 operand of the jump instruction at addr so that +** the jump lands on the next opcode. Or if the jump instruction was +** the previous opcode (and is thus a no-op) then simply back up +** the next instruction counter by one slot so that the jump is +** overwritten by the next inserted opcode. +** +** This routine is an optimization of sqlite3VdbeJumpHere() that +** strives to omit useless byte-code like this: +** +** 7 Once 0 8 0 +** 8 ... +*/ +SQLITE_PRIVATE void sqlite3VdbeJumpHereOrPopInst(Vdbe *p, int addr){ + if( addr==p->nOp-1 ){ + assert( p->aOp[addr].opcode==OP_Once + || p->aOp[addr].opcode==OP_If + || p->aOp[addr].opcode==OP_FkIfZero ); + assert( p->aOp[addr].p4type==0 ); +#ifdef SQLITE_VDBE_COVERAGE + sqlite3VdbeGetLastOp(p)->iSrcLine = 0; /* Erase VdbeCoverage() macros */ +#endif + p->nOp--; + }else{ + sqlite3VdbeChangeP2(p, addr, p->nOp); + } +} + + +/* +** If the input FuncDef structure is ephemeral, then free it. If +** the FuncDef is not ephemeral, then do nothing. +*/ +static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){ + assert( db!=0 ); + if( (pDef->funcFlags & SQLITE_FUNC_EPHEM)!=0 ){ + sqlite3DbNNFreeNN(db, pDef); + } +} + +/* +** Delete a P4 value if necessary. +*/ +static SQLITE_NOINLINE void freeP4Mem(sqlite3 *db, Mem *p){ + if( p->szMalloc ) sqlite3DbFree(db, p->zMalloc); + sqlite3DbNNFreeNN(db, p); +} +static SQLITE_NOINLINE void freeP4FuncCtx(sqlite3 *db, sqlite3_context *p){ + assert( db!=0 ); + freeEphemeralFunction(db, p->pFunc); + sqlite3DbNNFreeNN(db, p); +} +static void freeP4(sqlite3 *db, int p4type, void *p4){ + assert( db ); + switch( p4type ){ + case P4_FUNCCTX: { + freeP4FuncCtx(db, (sqlite3_context*)p4); + break; + } + case P4_REAL: + case P4_INT64: + case P4_DYNAMIC: + case P4_INTARRAY: { + if( p4 ) sqlite3DbNNFreeNN(db, p4); + break; + } + case P4_KEYINFO: { + if( db->pnBytesFreed==0 ) sqlite3KeyInfoUnref((KeyInfo*)p4); + break; + } +#ifdef SQLITE_ENABLE_CURSOR_HINTS + case P4_EXPR: { + sqlite3ExprDelete(db, (Expr*)p4); + break; + } +#endif + case P4_FUNCDEF: { + freeEphemeralFunction(db, (FuncDef*)p4); + break; + } + case P4_MEM: { + if( db->pnBytesFreed==0 ){ + sqlite3ValueFree((sqlite3_value*)p4); + }else{ + freeP4Mem(db, (Mem*)p4); + } + break; + } + case P4_VTAB : { + if( db->pnBytesFreed==0 ) sqlite3VtabUnlock((VTable *)p4); + break; + } + case P4_TABLEREF: { + if( db->pnBytesFreed==0 ) sqlite3DeleteTable(db, (Table*)p4); + break; + } + case P4_SUBRTNSIG: { + SubrtnSig *pSig = (SubrtnSig*)p4; + sqlite3DbFree(db, pSig->zAff); + sqlite3DbFree(db, pSig); + break; + } + } +} + +/* +** Free the space allocated for aOp and any p4 values allocated for the +** opcodes contained within. If aOp is not NULL it is assumed to contain +** nOp entries. +*/ +static void vdbeFreeOpArray(sqlite3 *db, Op *aOp, int nOp){ + assert( nOp>=0 ); + assert( db!=0 ); + if( aOp ){ + Op *pOp = &aOp[nOp-1]; + while(1){ /* Exit via break */ + if( pOp->p4type <= P4_FREE_IF_LE ) freeP4(db, pOp->p4type, pOp->p4.p); +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS + sqlite3DbFree(db, pOp->zComment); +#endif + if( pOp==aOp ) break; + pOp--; + } + sqlite3DbNNFreeNN(db, aOp); + } +} + +/* +** Link the SubProgram object passed as the second argument into the linked +** list at Vdbe.pSubProgram. This list is used to delete all sub-program +** objects when the VM is no longer required. +*/ +SQLITE_PRIVATE void sqlite3VdbeLinkSubProgram(Vdbe *pVdbe, SubProgram *p){ + p->pNext = pVdbe->pProgram; + pVdbe->pProgram = p; +} + +/* +** Return true if the given Vdbe has any SubPrograms. +*/ +SQLITE_PRIVATE int sqlite3VdbeHasSubProgram(Vdbe *pVdbe){ + return pVdbe->pProgram!=0; +} + +/* +** Change the opcode at addr into OP_Noop +*/ +SQLITE_PRIVATE int sqlite3VdbeChangeToNoop(Vdbe *p, int addr){ + VdbeOp *pOp; + if( p->db->mallocFailed ) return 0; + assert( addr>=0 && addrnOp ); + pOp = &p->aOp[addr]; + freeP4(p->db, pOp->p4type, pOp->p4.p); + pOp->p4type = P4_NOTUSED; + pOp->p4.z = 0; + pOp->opcode = OP_Noop; + return 1; +} + +/* +** If the last opcode is "op" and it is not a jump destination, +** then remove it. Return true if and only if an opcode was removed. +*/ +SQLITE_PRIVATE int sqlite3VdbeDeletePriorOpcode(Vdbe *p, u8 op){ + if( p->nOp>0 && p->aOp[p->nOp-1].opcode==op ){ + return sqlite3VdbeChangeToNoop(p, p->nOp-1); + }else{ + return 0; + } +} + +#ifdef SQLITE_DEBUG +/* +** Generate an OP_ReleaseReg opcode to indicate that a range of +** registers, except any identified by mask, are no longer in use. +*/ +SQLITE_PRIVATE void sqlite3VdbeReleaseRegisters( + Parse *pParse, /* Parsing context */ + int iFirst, /* Index of first register to be released */ + int N, /* Number of registers to release */ + u32 mask, /* Mask of registers to NOT release */ + int bUndefine /* If true, mark registers as undefined */ +){ + if( N==0 || OptimizationDisabled(pParse->db, SQLITE_ReleaseReg) ) return; + assert( pParse->pVdbe ); + assert( iFirst>=1 ); + assert( iFirst+N-1<=pParse->nMem ); + if( N<=31 && mask!=0 ){ + while( N>0 && (mask&1)!=0 ){ + mask >>= 1; + iFirst++; + N--; + } + while( N>0 && N<=32 && (mask & MASKBIT32(N-1))!=0 ){ + mask &= ~MASKBIT32(N-1); + N--; + } + } + if( N>0 ){ + sqlite3VdbeAddOp3(pParse->pVdbe, OP_ReleaseReg, iFirst, N, *(int*)&mask); + if( bUndefine ) sqlite3VdbeChangeP5(pParse->pVdbe, 1); + } +} +#endif /* SQLITE_DEBUG */ + +/* +** Change the value of the P4 operand for a specific instruction. +** This routine is useful when a large program is loaded from a +** static array using sqlite3VdbeAddOpList but we want to make a +** few minor changes to the program. +** +** If n>=0 then the P4 operand is dynamic, meaning that a copy of +** the string is made into memory obtained from sqlite3_malloc(). +** A value of n==0 means copy bytes of zP4 up to and including the +** first null byte. If n>0 then copy n+1 bytes of zP4. +** +** Other values of n (P4_STATIC, P4_COLLSEQ etc.) indicate that zP4 points +** to a string or structure that is guaranteed to exist for the lifetime of +** the Vdbe. In these cases we can just copy the pointer. +** +** If addr<0 then change P4 on the most recently inserted instruction. +*/ +static void SQLITE_NOINLINE vdbeChangeP4Full( + Vdbe *p, + Op *pOp, + const char *zP4, + int n +){ + if( pOp->p4type ){ + assert( pOp->p4type > P4_FREE_IF_LE ); + pOp->p4type = 0; + pOp->p4.p = 0; + } + if( n<0 ){ + sqlite3VdbeChangeP4(p, (int)(pOp - p->aOp), zP4, n); + }else{ + if( n==0 ) n = sqlite3Strlen30(zP4); + pOp->p4.z = sqlite3DbStrNDup(p->db, zP4, n); + pOp->p4type = P4_DYNAMIC; + } +} +SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe *p, int addr, const char *zP4, int n){ + Op *pOp; + sqlite3 *db; + assert( p!=0 ); + db = p->db; + assert( p->eVdbeState==VDBE_INIT_STATE ); + assert( p->aOp!=0 || db->mallocFailed ); + if( db->mallocFailed ){ + if( n!=P4_VTAB ) freeP4(db, n, (void*)*(char**)&zP4); + return; + } + assert( p->nOp>0 ); + assert( addrnOp ); + if( addr<0 ){ + addr = p->nOp - 1; + } + pOp = &p->aOp[addr]; + if( n>=0 || pOp->p4type ){ + vdbeChangeP4Full(p, pOp, zP4, n); + return; + } + if( n==P4_INT32 ){ + /* Note: this cast is safe, because the origin data point was an int + ** that was cast to a (const char *). */ + pOp->p4.i = SQLITE_PTR_TO_INT(zP4); + pOp->p4type = P4_INT32; + }else if( zP4!=0 ){ + assert( n<0 ); + pOp->p4.p = (void*)zP4; + pOp->p4type = (signed char)n; + if( n==P4_VTAB ) sqlite3VtabLock((VTable*)zP4); + } +} + +/* +** Change the P4 operand of the most recently coded instruction +** to the value defined by the arguments. This is a high-speed +** version of sqlite3VdbeChangeP4(). +** +** The P4 operand must not have been previously defined. And the new +** P4 must not be P4_INT32. Use sqlite3VdbeChangeP4() in either of +** those cases. +*/ +SQLITE_PRIVATE void sqlite3VdbeAppendP4(Vdbe *p, void *pP4, int n){ + VdbeOp *pOp; + assert( n!=P4_INT32 && n!=P4_VTAB ); + assert( n<=0 ); + if( p->db->mallocFailed ){ + freeP4(p->db, n, pP4); + }else{ + assert( pP4!=0 || n==P4_DYNAMIC ); + assert( p->nOp>0 ); + pOp = &p->aOp[p->nOp-1]; + assert( pOp->p4type==P4_NOTUSED ); + pOp->p4type = n; + pOp->p4.p = pP4; + } +} + +/* +** Set the P4 on the most recently added opcode to the KeyInfo for the +** index given. +*/ +SQLITE_PRIVATE void sqlite3VdbeSetP4KeyInfo(Parse *pParse, Index *pIdx){ + Vdbe *v = pParse->pVdbe; + KeyInfo *pKeyInfo; + assert( v!=0 ); + assert( pIdx!=0 ); + pKeyInfo = sqlite3KeyInfoOfIndex(pParse, pIdx); + if( pKeyInfo ) sqlite3VdbeAppendP4(v, pKeyInfo, P4_KEYINFO); +} + +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS +/* +** Change the comment on the most recently coded instruction. Or +** insert a No-op and add the comment to that new instruction. This +** makes the code easier to read during debugging. None of this happens +** in a production build. +*/ +static void vdbeVComment(Vdbe *p, const char *zFormat, va_list ap){ + assert( p->nOp>0 || p->aOp==0 ); + assert( p->aOp==0 || p->aOp[p->nOp-1].zComment==0 || p->pParse->nErr>0 ); + if( p->nOp ){ + assert( p->aOp ); + sqlite3DbFree(p->db, p->aOp[p->nOp-1].zComment); + p->aOp[p->nOp-1].zComment = sqlite3VMPrintf(p->db, zFormat, ap); + } +} +SQLITE_PRIVATE void sqlite3VdbeComment(Vdbe *p, const char *zFormat, ...){ + va_list ap; + if( p ){ + va_start(ap, zFormat); + vdbeVComment(p, zFormat, ap); + va_end(ap); + } +} +SQLITE_PRIVATE void sqlite3VdbeNoopComment(Vdbe *p, const char *zFormat, ...){ + va_list ap; + if( p ){ + sqlite3VdbeAddOp0(p, OP_Noop); + va_start(ap, zFormat); + vdbeVComment(p, zFormat, ap); + va_end(ap); + } +} +#endif /* NDEBUG */ + +#ifdef SQLITE_VDBE_COVERAGE +/* +** Set the value if the iSrcLine field for the previously coded instruction. +*/ +SQLITE_PRIVATE void sqlite3VdbeSetLineNumber(Vdbe *v, int iLine){ + sqlite3VdbeGetLastOp(v)->iSrcLine = iLine; +} +#endif /* SQLITE_VDBE_COVERAGE */ + +/* +** Return the opcode for a given address. The address must be non-negative. +** See sqlite3VdbeGetLastOp() to get the most recently added opcode. +** +** If a memory allocation error has occurred prior to the calling of this +** routine, then a pointer to a dummy VdbeOp will be returned. That opcode +** is readable but not writable, though it is cast to a writable value. +** The return of a dummy opcode allows the call to continue functioning +** after an OOM fault without having to check to see if the return from +** this routine is a valid pointer. But because the dummy.opcode is 0, +** dummy will never be written to. This is verified by code inspection and +** by running with Valgrind. +*/ +SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){ + /* C89 specifies that the constant "dummy" will be initialized to all + ** zeros, which is correct. MSVC generates a warning, nevertheless. */ + static VdbeOp dummy; /* Ignore the MSVC warning about no initializer */ + assert( p->eVdbeState==VDBE_INIT_STATE ); + assert( (addr>=0 && addrnOp) || p->db->mallocFailed ); + if( p->db->mallocFailed ){ + return (VdbeOp*)&dummy; + }else{ + return &p->aOp[addr]; + } +} + +/* Return the most recently added opcode +*/ +SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetLastOp(Vdbe *p){ + return sqlite3VdbeGetOp(p, p->nOp - 1); +} + +#if defined(SQLITE_ENABLE_EXPLAIN_COMMENTS) +/* +** Return an integer value for one of the parameters to the opcode pOp +** determined by character c. +*/ +static int translateP(char c, const Op *pOp){ + if( c=='1' ) return pOp->p1; + if( c=='2' ) return pOp->p2; + if( c=='3' ) return pOp->p3; + if( c=='4' ) return pOp->p4.i; + return pOp->p5; +} + +/* +** Compute a string for the "comment" field of a VDBE opcode listing. +** +** The Synopsis: field in comments in the vdbe.c source file gets converted +** to an extra string that is appended to the sqlite3OpcodeName(). In the +** absence of other comments, this synopsis becomes the comment on the opcode. +** Some translation occurs: +** +** "PX" -> "r[X]" +** "PX@PY" -> "r[X..X+Y-1]" or "r[x]" if y is 0 or 1 +** "PX@PY+1" -> "r[X..X+Y]" or "r[x]" if y is 0 +** "PY..PY" -> "r[X..Y]" or "r[x]" if y<=x +*/ +SQLITE_PRIVATE char *sqlite3VdbeDisplayComment( + sqlite3 *db, /* Optional - Oom error reporting only */ + const Op *pOp, /* The opcode to be commented */ + const char *zP4 /* Previously obtained value for P4 */ +){ + const char *zOpName; + const char *zSynopsis; + int nOpName; + int ii; + char zAlt[50]; + StrAccum x; + + sqlite3StrAccumInit(&x, 0, 0, 0, SQLITE_MAX_LENGTH); + zOpName = sqlite3OpcodeName(pOp->opcode); + nOpName = sqlite3Strlen30(zOpName); + if( zOpName[nOpName+1] ){ + int seenCom = 0; + char c; + zSynopsis = zOpName + nOpName + 1; + if( strncmp(zSynopsis,"IF ",3)==0 ){ + sqlite3_snprintf(sizeof(zAlt), zAlt, "if %s goto P2", zSynopsis+3); + zSynopsis = zAlt; + } + for(ii=0; (c = zSynopsis[ii])!=0; ii++){ + if( c=='P' ){ + c = zSynopsis[++ii]; + if( c=='4' ){ + sqlite3_str_appendall(&x, zP4); + }else if( c=='X' ){ + if( pOp->zComment && pOp->zComment[0] ){ + sqlite3_str_appendall(&x, pOp->zComment); + seenCom = 1; + break; + } + }else{ + int v1 = translateP(c, pOp); + int v2; + if( strncmp(zSynopsis+ii+1, "@P", 2)==0 ){ + ii += 3; + v2 = translateP(zSynopsis[ii], pOp); + if( strncmp(zSynopsis+ii+1,"+1",2)==0 ){ + ii += 2; + v2++; + } + if( v2<2 ){ + sqlite3_str_appendf(&x, "%d", v1); + }else{ + sqlite3_str_appendf(&x, "%d..%d", v1, v1+v2-1); + } + }else if( strncmp(zSynopsis+ii+1, "@NP", 3)==0 ){ + sqlite3_context *pCtx = pOp->p4.pCtx; + if( pOp->p4type!=P4_FUNCCTX || pCtx->argc==1 ){ + sqlite3_str_appendf(&x, "%d", v1); + }else if( pCtx->argc>1 ){ + sqlite3_str_appendf(&x, "%d..%d", v1, v1+pCtx->argc-1); + }else if( x.accError==0 ){ + assert( x.nChar>2 ); + x.nChar -= 2; + ii++; + } + ii += 3; + }else{ + sqlite3_str_appendf(&x, "%d", v1); + if( strncmp(zSynopsis+ii+1, "..P3", 4)==0 && pOp->p3==0 ){ + ii += 4; + } + } + } + }else{ + sqlite3_str_appendchar(&x, 1, c); + } + } + if( !seenCom && pOp->zComment ){ + sqlite3_str_appendf(&x, "; %s", pOp->zComment); + } + }else if( pOp->zComment ){ + sqlite3_str_appendall(&x, pOp->zComment); + } + if( (x.accError & SQLITE_NOMEM)!=0 && db!=0 ){ + sqlite3OomFault(db); + } + return sqlite3StrAccumFinish(&x); +} +#endif /* SQLITE_ENABLE_EXPLAIN_COMMENTS */ + +#if VDBE_DISPLAY_P4 && defined(SQLITE_ENABLE_CURSOR_HINTS) +/* +** Translate the P4.pExpr value for an OP_CursorHint opcode into text +** that can be displayed in the P4 column of EXPLAIN output. +*/ +static void displayP4Expr(StrAccum *p, Expr *pExpr){ + const char *zOp = 0; + switch( pExpr->op ){ + case TK_STRING: + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + sqlite3_str_appendf(p, "%Q", pExpr->u.zToken); + break; + case TK_INTEGER: + sqlite3_str_appendf(p, "%d", pExpr->u.iValue); + break; + case TK_NULL: + sqlite3_str_appendf(p, "NULL"); + break; + case TK_REGISTER: { + sqlite3_str_appendf(p, "r[%d]", pExpr->iTable); + break; + } + case TK_COLUMN: { + if( pExpr->iColumn<0 ){ + sqlite3_str_appendf(p, "rowid"); + }else{ + sqlite3_str_appendf(p, "c%d", (int)pExpr->iColumn); + } + break; + } + case TK_LT: zOp = "LT"; break; + case TK_LE: zOp = "LE"; break; + case TK_GT: zOp = "GT"; break; + case TK_GE: zOp = "GE"; break; + case TK_NE: zOp = "NE"; break; + case TK_EQ: zOp = "EQ"; break; + case TK_IS: zOp = "IS"; break; + case TK_ISNOT: zOp = "ISNOT"; break; + case TK_AND: zOp = "AND"; break; + case TK_OR: zOp = "OR"; break; + case TK_PLUS: zOp = "ADD"; break; + case TK_STAR: zOp = "MUL"; break; + case TK_MINUS: zOp = "SUB"; break; + case TK_REM: zOp = "REM"; break; + case TK_BITAND: zOp = "BITAND"; break; + case TK_BITOR: zOp = "BITOR"; break; + case TK_SLASH: zOp = "DIV"; break; + case TK_LSHIFT: zOp = "LSHIFT"; break; + case TK_RSHIFT: zOp = "RSHIFT"; break; + case TK_CONCAT: zOp = "CONCAT"; break; + case TK_UMINUS: zOp = "MINUS"; break; + case TK_UPLUS: zOp = "PLUS"; break; + case TK_BITNOT: zOp = "BITNOT"; break; + case TK_NOT: zOp = "NOT"; break; + case TK_ISNULL: zOp = "ISNULL"; break; + case TK_NOTNULL: zOp = "NOTNULL"; break; + + default: + sqlite3_str_appendf(p, "%s", "expr"); + break; + } + + if( zOp ){ + sqlite3_str_appendf(p, "%s(", zOp); + displayP4Expr(p, pExpr->pLeft); + if( pExpr->pRight ){ + sqlite3_str_append(p, ",", 1); + displayP4Expr(p, pExpr->pRight); + } + sqlite3_str_append(p, ")", 1); + } +} +#endif /* VDBE_DISPLAY_P4 && defined(SQLITE_ENABLE_CURSOR_HINTS) */ + + +#if VDBE_DISPLAY_P4 +/* +** Compute a string that describes the P4 parameter for an opcode. +** Use zTemp for any required temporary buffer space. +*/ +SQLITE_PRIVATE char *sqlite3VdbeDisplayP4(sqlite3 *db, Op *pOp){ + char *zP4 = 0; + StrAccum x; + + sqlite3StrAccumInit(&x, 0, 0, 0, SQLITE_MAX_LENGTH); + switch( pOp->p4type ){ + case P4_KEYINFO: { + int j; + KeyInfo *pKeyInfo = pOp->p4.pKeyInfo; + assert( pKeyInfo->aSortFlags!=0 ); + sqlite3_str_appendf(&x, "k(%d", pKeyInfo->nKeyField); + for(j=0; jnKeyField; j++){ + CollSeq *pColl = pKeyInfo->aColl[j]; + const char *zColl = pColl ? pColl->zName : ""; + if( strcmp(zColl, "BINARY")==0 ) zColl = "B"; + sqlite3_str_appendf(&x, ",%s%s%s", + (pKeyInfo->aSortFlags[j] & KEYINFO_ORDER_DESC) ? "-" : "", + (pKeyInfo->aSortFlags[j] & KEYINFO_ORDER_BIGNULL)? "N." : "", + zColl); + } + sqlite3_str_append(&x, ")", 1); + break; + } +#ifdef SQLITE_ENABLE_CURSOR_HINTS + case P4_EXPR: { + displayP4Expr(&x, pOp->p4.pExpr); + break; + } +#endif + case P4_COLLSEQ: { + static const char *const encnames[] = {"?", "8", "16LE", "16BE"}; + CollSeq *pColl = pOp->p4.pColl; + assert( pColl->enc<4 ); + sqlite3_str_appendf(&x, "%.18s-%s", pColl->zName, + encnames[pColl->enc]); + break; + } + case P4_FUNCDEF: { + FuncDef *pDef = pOp->p4.pFunc; + sqlite3_str_appendf(&x, "%s(%d)", pDef->zName, pDef->nArg); + break; + } + case P4_FUNCCTX: { + FuncDef *pDef = pOp->p4.pCtx->pFunc; + sqlite3_str_appendf(&x, "%s(%d)", pDef->zName, pDef->nArg); + break; + } + case P4_INT64: { + sqlite3_str_appendf(&x, "%lld", *pOp->p4.pI64); + break; + } + case P4_INT32: { + sqlite3_str_appendf(&x, "%d", pOp->p4.i); + break; + } + case P4_REAL: { + sqlite3_str_appendf(&x, "%.16g", *pOp->p4.pReal); + break; + } + case P4_MEM: { + Mem *pMem = pOp->p4.pMem; + if( pMem->flags & MEM_Str ){ + zP4 = pMem->z; + }else if( pMem->flags & (MEM_Int|MEM_IntReal) ){ + sqlite3_str_appendf(&x, "%lld", pMem->u.i); + }else if( pMem->flags & MEM_Real ){ + sqlite3_str_appendf(&x, "%.16g", pMem->u.r); + }else if( pMem->flags & MEM_Null ){ + zP4 = "NULL"; + }else{ + assert( pMem->flags & MEM_Blob ); + zP4 = "(blob)"; + } + break; + } +#ifndef SQLITE_OMIT_VIRTUALTABLE + case P4_VTAB: { + sqlite3_vtab *pVtab = pOp->p4.pVtab->pVtab; + sqlite3_str_appendf(&x, "vtab:%p", pVtab); + break; + } +#endif + case P4_INTARRAY: { + u32 i; + u32 *ai = pOp->p4.ai; + u32 n = ai[0]; /* The first element of an INTARRAY is always the + ** count of the number of elements to follow */ + for(i=1; i<=n; i++){ + sqlite3_str_appendf(&x, "%c%u", (i==1 ? '[' : ','), ai[i]); + } + sqlite3_str_append(&x, "]", 1); + break; + } + case P4_SUBPROGRAM: { + zP4 = "program"; + break; + } + case P4_TABLE: { + zP4 = pOp->p4.pTab->zName; + break; + } + case P4_SUBRTNSIG: { + SubrtnSig *pSig = pOp->p4.pSubrtnSig; + sqlite3_str_appendf(&x, "subrtnsig:%d,%s", pSig->selId, pSig->zAff); + break; + } + default: { + zP4 = pOp->p4.z; + } + } + if( zP4 ) sqlite3_str_appendall(&x, zP4); + if( (x.accError & SQLITE_NOMEM)!=0 ){ + sqlite3OomFault(db); + } + return sqlite3StrAccumFinish(&x); +} +#endif /* VDBE_DISPLAY_P4 */ + +/* +** Declare to the Vdbe that the BTree object at db->aDb[i] is used. +** +** The prepared statements need to know in advance the complete set of +** attached databases that will be use. A mask of these databases +** is maintained in p->btreeMask. The p->lockMask value is the subset of +** p->btreeMask of databases that will require a lock. +*/ +SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe *p, int i){ + assert( i>=0 && idb->nDb && i<(int)sizeof(yDbMask)*8 ); + assert( i<(int)sizeof(p->btreeMask)*8 ); + DbMaskSet(p->btreeMask, i); + if( i!=1 && sqlite3BtreeSharable(p->db->aDb[i].pBt) ){ + DbMaskSet(p->lockMask, i); + } +} + +#if !defined(SQLITE_OMIT_SHARED_CACHE) +/* +** If SQLite is compiled to support shared-cache mode and to be threadsafe, +** this routine obtains the mutex associated with each BtShared structure +** that may be accessed by the VM passed as an argument. In doing so it also +** sets the BtShared.db member of each of the BtShared structures, ensuring +** that the correct busy-handler callback is invoked if required. +** +** If SQLite is not threadsafe but does support shared-cache mode, then +** sqlite3BtreeEnter() is invoked to set the BtShared.db variables +** of all of BtShared structures accessible via the database handle +** associated with the VM. +** +** If SQLite is not threadsafe and does not support shared-cache mode, this +** function is a no-op. +** +** The p->btreeMask field is a bitmask of all btrees that the prepared +** statement p will ever use. Let N be the number of bits in p->btreeMask +** corresponding to btrees that use shared cache. Then the runtime of +** this routine is N*N. But as N is rarely more than 1, this should not +** be a problem. +*/ +SQLITE_PRIVATE void sqlite3VdbeEnter(Vdbe *p){ + int i; + sqlite3 *db; + Db *aDb; + int nDb; + if( DbMaskAllZero(p->lockMask) ) return; /* The common case */ + db = p->db; + aDb = db->aDb; + nDb = db->nDb; + for(i=0; ilockMask,i) && ALWAYS(aDb[i].pBt!=0) ){ + sqlite3BtreeEnter(aDb[i].pBt); + } + } +} +#endif + +#if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0 +/* +** Unlock all of the btrees previously locked by a call to sqlite3VdbeEnter(). +*/ +static SQLITE_NOINLINE void vdbeLeave(Vdbe *p){ + int i; + sqlite3 *db; + Db *aDb; + int nDb; + db = p->db; + aDb = db->aDb; + nDb = db->nDb; + for(i=0; ilockMask,i) && ALWAYS(aDb[i].pBt!=0) ){ + sqlite3BtreeLeave(aDb[i].pBt); + } + } +} +SQLITE_PRIVATE void sqlite3VdbeLeave(Vdbe *p){ + if( DbMaskAllZero(p->lockMask) ) return; /* The common case */ + vdbeLeave(p); +} +#endif + +#if defined(VDBE_PROFILE) || defined(SQLITE_DEBUG) +/* +** Print a single opcode. This routine is used for debugging only. +*/ +SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE *pOut, int pc, VdbeOp *pOp){ + char *zP4; + char *zCom; + sqlite3 dummyDb; + static const char *zFormat1 = "%4d %-13s %4d %4d %4d %-13s %.2X %s\n"; + if( pOut==0 ) pOut = stdout; + sqlite3BeginBenignMalloc(); + dummyDb.mallocFailed = 1; + zP4 = sqlite3VdbeDisplayP4(&dummyDb, pOp); +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS + zCom = sqlite3VdbeDisplayComment(0, pOp, zP4); +#else + zCom = 0; +#endif + /* NB: The sqlite3OpcodeName() function is implemented by code created + ** by the mkopcodeh.awk and mkopcodec.awk scripts which extract the + ** information from the vdbe.c source text */ + fprintf(pOut, zFormat1, pc, + sqlite3OpcodeName(pOp->opcode), pOp->p1, pOp->p2, pOp->p3, + zP4 ? zP4 : "", pOp->p5, + zCom ? zCom : "" + ); + fflush(pOut); + sqlite3_free(zP4); + sqlite3_free(zCom); + sqlite3EndBenignMalloc(); +} +#endif + +/* +** Initialize an array of N Mem element. +** +** This is a high-runner, so only those fields that really do need to +** be initialized are set. The Mem structure is organized so that +** the fields that get initialized are nearby and hopefully on the same +** cache line. +** +** Mem.flags = flags +** Mem.db = db +** Mem.szMalloc = 0 +** +** All other fields of Mem can safely remain uninitialized for now. They +** will be initialized before use. +*/ +static void initMemArray(Mem *p, int N, sqlite3 *db, u16 flags){ + assert( db!=0 ); + if( N>0 ){ + do{ + p->flags = flags; + p->db = db; + p->szMalloc = 0; +#ifdef SQLITE_DEBUG + p->pScopyFrom = 0; + p->bScopy = 0; +#endif + p++; + }while( (--N)>0 ); + } +} + +/* +** Release auxiliary memory held in an array of N Mem elements. +** +** After this routine returns, all Mem elements in the array will still +** be valid. Those Mem elements that were not holding auxiliary resources +** will be unchanged. Mem elements which had something freed will be +** set to MEM_Undefined. +*/ +static void releaseMemArray(Mem *p, int N){ + if( p && N ){ + Mem *pEnd = &p[N]; + sqlite3 *db = p->db; + assert( db!=0 ); + if( db->pnBytesFreed ){ + do{ + if( p->szMalloc ) sqlite3DbFree(db, p->zMalloc); + }while( (++p)flags & MEM_Agg ); + testcase( p->flags & MEM_Dyn ); + if( p->flags&(MEM_Agg|MEM_Dyn) ){ + testcase( (p->flags & MEM_Dyn)!=0 && p->xDel==sqlite3VdbeFrameMemDel ); + sqlite3VdbeMemRelease(p); + p->flags = MEM_Undefined; + }else if( p->szMalloc ){ + sqlite3DbNNFreeNN(db, p->zMalloc); + p->szMalloc = 0; + p->flags = MEM_Undefined; + } +#ifdef SQLITE_DEBUG + else{ + p->flags = MEM_Undefined; + } +#endif + }while( (++p)iFrameMagic!=SQLITE_FRAME_MAGIC ) return 0; + return 1; +} +#endif + + +/* +** This is a destructor on a Mem object (which is really an sqlite3_value) +** that deletes the Frame object that is attached to it as a blob. +** +** This routine does not delete the Frame right away. It merely adds the +** frame to a list of frames to be deleted when the Vdbe halts. +*/ +SQLITE_PRIVATE void sqlite3VdbeFrameMemDel(void *pArg){ + VdbeFrame *pFrame = (VdbeFrame*)pArg; + assert( sqlite3VdbeFrameIsValid(pFrame) ); + pFrame->pParent = pFrame->v->pDelFrame; + pFrame->v->pDelFrame = pFrame; +} + +#if defined(SQLITE_ENABLE_BYTECODE_VTAB) || !defined(SQLITE_OMIT_EXPLAIN) +/* +** Locate the next opcode to be displayed in EXPLAIN or EXPLAIN +** QUERY PLAN output. +** +** Return SQLITE_ROW on success. Return SQLITE_DONE if there are no +** more opcodes to be displayed. +*/ +SQLITE_PRIVATE int sqlite3VdbeNextOpcode( + Vdbe *p, /* The statement being explained */ + Mem *pSub, /* Storage for keeping track of subprogram nesting */ + int eMode, /* 0: normal. 1: EQP. 2: TablesUsed */ + int *piPc, /* IN/OUT: Current rowid. Overwritten with next rowid */ + int *piAddr, /* OUT: Write index into (*paOp)[] here */ + Op **paOp /* OUT: Write the opcode array here */ +){ + int nRow; /* Stop when row count reaches this */ + int nSub = 0; /* Number of sub-vdbes seen so far */ + SubProgram **apSub = 0; /* Array of sub-vdbes */ + int i; /* Next instruction address */ + int rc = SQLITE_OK; /* Result code */ + Op *aOp = 0; /* Opcode array */ + int iPc; /* Rowid. Copy of value in *piPc */ + + /* When the number of output rows reaches nRow, that means the + ** listing has finished and sqlite3_step() should return SQLITE_DONE. + ** nRow is the sum of the number of rows in the main program, plus + ** the sum of the number of rows in all trigger subprograms encountered + ** so far. The nRow value will increase as new trigger subprograms are + ** encountered, but p->pc will eventually catch up to nRow. + */ + nRow = p->nOp; + if( pSub!=0 ){ + if( pSub->flags&MEM_Blob ){ + /* pSub is initiallly NULL. It is initialized to a BLOB by + ** the P4_SUBPROGRAM processing logic below */ + nSub = pSub->n/sizeof(Vdbe*); + apSub = (SubProgram **)pSub->z; + } + for(i=0; inOp; + } + } + iPc = *piPc; + while(1){ /* Loop exits via break */ + i = iPc++; + if( i>=nRow ){ + p->rc = SQLITE_OK; + rc = SQLITE_DONE; + break; + } + if( inOp ){ + /* The rowid is small enough that we are still in the + ** main program. */ + aOp = p->aOp; + }else{ + /* We are currently listing subprograms. Figure out which one and + ** pick up the appropriate opcode. */ + int j; + i -= p->nOp; + assert( apSub!=0 ); + assert( nSub>0 ); + for(j=0; i>=apSub[j]->nOp; j++){ + i -= apSub[j]->nOp; + assert( inOp || j+1aOp; + } + + /* When an OP_Program opcode is encounter (the only opcode that has + ** a P4_SUBPROGRAM argument), expand the size of the array of subprograms + ** kept in p->aMem[9].z to hold the new program - assuming this subprogram + ** has not already been seen. + */ + if( pSub!=0 && aOp[i].p4type==P4_SUBPROGRAM ){ + int nByte = (nSub+1)*sizeof(SubProgram*); + int j; + for(j=0; jrc = sqlite3VdbeMemGrow(pSub, nByte, nSub!=0); + if( p->rc!=SQLITE_OK ){ + rc = SQLITE_ERROR; + break; + } + apSub = (SubProgram **)pSub->z; + apSub[nSub++] = aOp[i].p4.pProgram; + MemSetTypeFlag(pSub, MEM_Blob); + pSub->n = nSub*sizeof(SubProgram*); + nRow += aOp[i].p4.pProgram->nOp; + } + } + if( eMode==0 ) break; +#ifdef SQLITE_ENABLE_BYTECODE_VTAB + if( eMode==2 ){ + Op *pOp = aOp + i; + if( pOp->opcode==OP_OpenRead ) break; + if( pOp->opcode==OP_OpenWrite && (pOp->p5 & OPFLAG_P2ISREG)==0 ) break; + if( pOp->opcode==OP_ReopenIdx ) break; + }else +#endif + { + assert( eMode==1 ); + if( aOp[i].opcode==OP_Explain ) break; + if( aOp[i].opcode==OP_Init && iPc>1 ) break; + } + } + *piPc = iPc; + *piAddr = i; + *paOp = aOp; + return rc; +} +#endif /* SQLITE_ENABLE_BYTECODE_VTAB || !SQLITE_OMIT_EXPLAIN */ + + +/* +** Delete a VdbeFrame object and its contents. VdbeFrame objects are +** allocated by the OP_Program opcode in sqlite3VdbeExec(). +*/ +SQLITE_PRIVATE void sqlite3VdbeFrameDelete(VdbeFrame *p){ + int i; + Mem *aMem = VdbeFrameMem(p); + VdbeCursor **apCsr = (VdbeCursor **)&aMem[p->nChildMem]; + assert( sqlite3VdbeFrameIsValid(p) ); + for(i=0; inChildCsr; i++){ + if( apCsr[i] ) sqlite3VdbeFreeCursorNN(p->v, apCsr[i]); + } + releaseMemArray(aMem, p->nChildMem); + sqlite3VdbeDeleteAuxData(p->v->db, &p->pAuxData, -1, 0); + sqlite3DbFree(p->v->db, p); +} + +#ifndef SQLITE_OMIT_EXPLAIN +/* +** Give a listing of the program in the virtual machine. +** +** The interface is the same as sqlite3VdbeExec(). But instead of +** running the code, it invokes the callback once for each instruction. +** This feature is used to implement "EXPLAIN". +** +** When p->explain==1, each instruction is listed. When +** p->explain==2, only OP_Explain instructions are listed and these +** are shown in a different format. p->explain==2 is used to implement +** EXPLAIN QUERY PLAN. +** 2018-04-24: In p->explain==2 mode, the OP_Init opcodes of triggers +** are also shown, so that the boundaries between the main program and +** each trigger are clear. +** +** When p->explain==1, first the main program is listed, then each of +** the trigger subprograms are listed one by one. +*/ +SQLITE_PRIVATE int sqlite3VdbeList( + Vdbe *p /* The VDBE */ +){ + Mem *pSub = 0; /* Memory cell hold array of subprogs */ + sqlite3 *db = p->db; /* The database connection */ + int i; /* Loop counter */ + int rc = SQLITE_OK; /* Return code */ + Mem *pMem = &p->aMem[1]; /* First Mem of result set */ + int bListSubprogs = (p->explain==1 || (db->flags & SQLITE_TriggerEQP)!=0); + Op *aOp; /* Array of opcodes */ + Op *pOp; /* Current opcode */ + + assert( p->explain ); + assert( p->eVdbeState==VDBE_RUN_STATE ); + assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY || p->rc==SQLITE_NOMEM ); + + /* Even though this opcode does not use dynamic strings for + ** the result, result columns may become dynamic if the user calls + ** sqlite3_column_text16(), causing a translation to UTF-16 encoding. + */ + releaseMemArray(pMem, 8); + + if( p->rc==SQLITE_NOMEM ){ + /* This happens if a malloc() inside a call to sqlite3_column_text() or + ** sqlite3_column_text16() failed. */ + sqlite3OomFault(db); + return SQLITE_ERROR; + } + + if( bListSubprogs ){ + /* The first 8 memory cells are used for the result set. So we will + ** commandeer the 9th cell to use as storage for an array of pointers + ** to trigger subprograms. The VDBE is guaranteed to have at least 9 + ** cells. */ + assert( p->nMem>9 ); + pSub = &p->aMem[9]; + }else{ + pSub = 0; + } + + /* Figure out which opcode is next to display */ + rc = sqlite3VdbeNextOpcode(p, pSub, p->explain==2, &p->pc, &i, &aOp); + + if( rc==SQLITE_OK ){ + pOp = aOp + i; + if( AtomicLoad(&db->u1.isInterrupted) ){ + p->rc = SQLITE_INTERRUPT; + rc = SQLITE_ERROR; + sqlite3VdbeError(p, sqlite3ErrStr(p->rc)); + }else{ + char *zP4 = sqlite3VdbeDisplayP4(db, pOp); + if( p->explain==2 ){ + sqlite3VdbeMemSetInt64(pMem, pOp->p1); + sqlite3VdbeMemSetInt64(pMem+1, pOp->p2); + sqlite3VdbeMemSetInt64(pMem+2, pOp->p3); + sqlite3VdbeMemSetStr(pMem+3, zP4, -1, SQLITE_UTF8, sqlite3_free); + assert( p->nResColumn==4 ); + }else{ + sqlite3VdbeMemSetInt64(pMem+0, i); + sqlite3VdbeMemSetStr(pMem+1, (char*)sqlite3OpcodeName(pOp->opcode), + -1, SQLITE_UTF8, SQLITE_STATIC); + sqlite3VdbeMemSetInt64(pMem+2, pOp->p1); + sqlite3VdbeMemSetInt64(pMem+3, pOp->p2); + sqlite3VdbeMemSetInt64(pMem+4, pOp->p3); + /* pMem+5 for p4 is done last */ + sqlite3VdbeMemSetInt64(pMem+6, pOp->p5); +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS + { + char *zCom = sqlite3VdbeDisplayComment(db, pOp, zP4); + sqlite3VdbeMemSetStr(pMem+7, zCom, -1, SQLITE_UTF8, sqlite3_free); + } +#else + sqlite3VdbeMemSetNull(pMem+7); +#endif + sqlite3VdbeMemSetStr(pMem+5, zP4, -1, SQLITE_UTF8, sqlite3_free); + assert( p->nResColumn==8 ); + } + p->pResultRow = pMem; + if( db->mallocFailed ){ + p->rc = SQLITE_NOMEM; + rc = SQLITE_ERROR; + }else{ + p->rc = SQLITE_OK; + rc = SQLITE_ROW; + } + } + } + return rc; +} +#endif /* SQLITE_OMIT_EXPLAIN */ + +#ifdef SQLITE_DEBUG +/* +** Print the SQL that was used to generate a VDBE program. +*/ +SQLITE_PRIVATE void sqlite3VdbePrintSql(Vdbe *p){ + const char *z = 0; + if( p->zSql ){ + z = p->zSql; + }else if( p->nOp>=1 ){ + const VdbeOp *pOp = &p->aOp[0]; + if( pOp->opcode==OP_Init && pOp->p4.z!=0 ){ + z = pOp->p4.z; + while( sqlite3Isspace(*z) ) z++; + } + } + if( z ) printf("SQL: [%s]\n", z); +} +#endif + +#if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE) +/* +** Print an IOTRACE message showing SQL content. +*/ +SQLITE_PRIVATE void sqlite3VdbeIOTraceSql(Vdbe *p){ + int nOp = p->nOp; + VdbeOp *pOp; + if( sqlite3IoTrace==0 ) return; + if( nOp<1 ) return; + pOp = &p->aOp[0]; + if( pOp->opcode==OP_Init && pOp->p4.z!=0 ){ + int i, j; + char z[1000]; + sqlite3_snprintf(sizeof(z), z, "%s", pOp->p4.z); + for(i=0; sqlite3Isspace(z[i]); i++){} + for(j=0; z[i]; i++){ + if( sqlite3Isspace(z[i]) ){ + if( z[i-1]!=' ' ){ + z[j++] = ' '; + } + }else{ + z[j++] = z[i]; + } + } + z[j] = 0; + sqlite3IoTrace("SQL %s\n", z); + } +} +#endif /* !SQLITE_OMIT_TRACE && SQLITE_ENABLE_IOTRACE */ + +/* An instance of this object describes bulk memory available for use +** by subcomponents of a prepared statement. Space is allocated out +** of a ReusableSpace object by the allocSpace() routine below. +*/ +struct ReusableSpace { + u8 *pSpace; /* Available memory */ + sqlite3_int64 nFree; /* Bytes of available memory */ + sqlite3_int64 nNeeded; /* Total bytes that could not be allocated */ +}; + +/* Try to allocate nByte bytes of 8-byte aligned bulk memory for pBuf +** from the ReusableSpace object. Return a pointer to the allocated +** memory on success. If insufficient memory is available in the +** ReusableSpace object, increase the ReusableSpace.nNeeded +** value by the amount needed and return NULL. +** +** If pBuf is not initially NULL, that means that the memory has already +** been allocated by a prior call to this routine, so just return a copy +** of pBuf and leave ReusableSpace unchanged. +** +** This allocator is employed to repurpose unused slots at the end of the +** opcode array of prepared state for other memory needs of the prepared +** statement. +*/ +static void *allocSpace( + struct ReusableSpace *p, /* Bulk memory available for allocation */ + void *pBuf, /* Pointer to a prior allocation */ + sqlite3_int64 nByte /* Bytes of memory needed. */ +){ + assert( EIGHT_BYTE_ALIGNMENT(p->pSpace) ); + if( pBuf==0 ){ + nByte = ROUND8P(nByte); + if( nByte <= p->nFree ){ + p->nFree -= nByte; + pBuf = &p->pSpace[p->nFree]; + }else{ + p->nNeeded += nByte; + } + } + assert( EIGHT_BYTE_ALIGNMENT(pBuf) ); + return pBuf; +} + +/* +** Rewind the VDBE back to the beginning in preparation for +** running it. +*/ +SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe *p){ +#if defined(SQLITE_DEBUG) + int i; +#endif + assert( p!=0 ); + assert( p->eVdbeState==VDBE_INIT_STATE + || p->eVdbeState==VDBE_READY_STATE + || p->eVdbeState==VDBE_HALT_STATE ); + + /* There should be at least one opcode. + */ + assert( p->nOp>0 ); + + p->eVdbeState = VDBE_READY_STATE; + +#ifdef SQLITE_DEBUG + for(i=0; inMem; i++){ + assert( p->aMem[i].db==p->db ); + } +#endif + p->pc = -1; + p->rc = SQLITE_OK; + p->errorAction = OE_Abort; + p->nChange = 0; + p->cacheCtr = 1; + p->minWriteFileFormat = 255; + p->iStatement = 0; + p->nFkConstraint = 0; +#ifdef VDBE_PROFILE + for(i=0; inOp; i++){ + p->aOp[i].nExec = 0; + p->aOp[i].nCycle = 0; + } +#endif +} + +/* +** Prepare a virtual machine for execution for the first time after +** creating the virtual machine. This involves things such +** as allocating registers and initializing the program counter. +** After the VDBE has be prepped, it can be executed by one or more +** calls to sqlite3VdbeExec(). +** +** This function may be called exactly once on each virtual machine. +** After this routine is called the VM has been "packaged" and is ready +** to run. After this routine is called, further calls to +** sqlite3VdbeAddOp() functions are prohibited. This routine disconnects +** the Vdbe from the Parse object that helped generate it so that the +** the Vdbe becomes an independent entity and the Parse object can be +** destroyed. +** +** Use the sqlite3VdbeRewind() procedure to restore a virtual machine back +** to its initial state after it has been run. +*/ +SQLITE_PRIVATE void sqlite3VdbeMakeReady( + Vdbe *p, /* The VDBE */ + Parse *pParse /* Parsing context */ +){ + sqlite3 *db; /* The database connection */ + int nVar; /* Number of parameters */ + int nMem; /* Number of VM memory registers */ + int nCursor; /* Number of cursors required */ + int nArg; /* Max number args to xFilter or xUpdate */ + int n; /* Loop counter */ + struct ReusableSpace x; /* Reusable bulk memory */ + + assert( p!=0 ); + assert( p->nOp>0 ); + assert( pParse!=0 ); + assert( p->eVdbeState==VDBE_INIT_STATE ); + assert( pParse==p->pParse ); + assert( pParse->db==p->db ); + p->pVList = pParse->pVList; + pParse->pVList = 0; + db = p->db; + assert( db->mallocFailed==0 ); + nVar = pParse->nVar; + nMem = pParse->nMem; + nCursor = pParse->nTab; + nArg = pParse->nMaxArg; + + /* Each cursor uses a memory cell. The first cursor (cursor 0) can + ** use aMem[0] which is not otherwise used by the VDBE program. Allocate + ** space at the end of aMem[] for cursors 1 and greater. + ** See also: allocateCursor(). + */ + nMem += nCursor; + if( nCursor==0 && nMem>0 ) nMem++; /* Space for aMem[0] even if not used */ + + /* Figure out how much reusable memory is available at the end of the + ** opcode array. This extra memory will be reallocated for other elements + ** of the prepared statement. + */ + n = ROUND8P(sizeof(Op)*p->nOp); /* Bytes of opcode memory used */ + x.pSpace = &((u8*)p->aOp)[n]; /* Unused opcode memory */ + assert( EIGHT_BYTE_ALIGNMENT(x.pSpace) ); + x.nFree = ROUNDDOWN8(pParse->szOpAlloc - n); /* Bytes of unused memory */ + assert( x.nFree>=0 ); + assert( EIGHT_BYTE_ALIGNMENT(&x.pSpace[x.nFree]) ); + + resolveP2Values(p, &nArg); + p->usesStmtJournal = (u8)(pParse->isMultiWrite && pParse->mayAbort); + if( pParse->explain ){ + if( nMem<10 ) nMem = 10; + p->explain = pParse->explain; + p->nResColumn = 12 - 4*p->explain; + } + p->expired = 0; + + /* Memory for registers, parameters, cursor, etc, is allocated in one or two + ** passes. On the first pass, we try to reuse unused memory at the + ** end of the opcode array. If we are unable to satisfy all memory + ** requirements by reusing the opcode array tail, then the second + ** pass will fill in the remainder using a fresh memory allocation. + ** + ** This two-pass approach that reuses as much memory as possible from + ** the leftover memory at the end of the opcode array. This can significantly + ** reduce the amount of memory held by a prepared statement. + */ + x.nNeeded = 0; + p->aMem = allocSpace(&x, 0, nMem*sizeof(Mem)); + p->aVar = allocSpace(&x, 0, nVar*sizeof(Mem)); + p->apArg = allocSpace(&x, 0, nArg*sizeof(Mem*)); + p->apCsr = allocSpace(&x, 0, nCursor*sizeof(VdbeCursor*)); + if( x.nNeeded ){ + x.pSpace = p->pFree = sqlite3DbMallocRawNN(db, x.nNeeded); + x.nFree = x.nNeeded; + if( !db->mallocFailed ){ + p->aMem = allocSpace(&x, p->aMem, nMem*sizeof(Mem)); + p->aVar = allocSpace(&x, p->aVar, nVar*sizeof(Mem)); + p->apArg = allocSpace(&x, p->apArg, nArg*sizeof(Mem*)); + p->apCsr = allocSpace(&x, p->apCsr, nCursor*sizeof(VdbeCursor*)); + } + } +#ifdef SQLITE_DEBUG + p->napArg = nArg; +#endif + + if( db->mallocFailed ){ + p->nVar = 0; + p->nCursor = 0; + p->nMem = 0; + }else{ + p->nCursor = nCursor; + p->nVar = (ynVar)nVar; + initMemArray(p->aVar, nVar, db, MEM_Null); + p->nMem = nMem; + initMemArray(p->aMem, nMem, db, MEM_Undefined); + memset(p->apCsr, 0, nCursor*sizeof(VdbeCursor*)); + } + sqlite3VdbeRewind(p); +} + +/* +** Close a VDBE cursor and release all the resources that cursor +** happens to hold. +*/ +SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){ + if( pCx ) sqlite3VdbeFreeCursorNN(p,pCx); +} +static SQLITE_NOINLINE void freeCursorWithCache(Vdbe *p, VdbeCursor *pCx){ + VdbeTxtBlbCache *pCache = pCx->pCache; + assert( pCx->colCache ); + pCx->colCache = 0; + pCx->pCache = 0; + if( pCache->pCValue ){ + sqlite3RCStrUnref(pCache->pCValue); + pCache->pCValue = 0; + } + sqlite3DbFree(p->db, pCache); + sqlite3VdbeFreeCursorNN(p, pCx); +} +SQLITE_PRIVATE void sqlite3VdbeFreeCursorNN(Vdbe *p, VdbeCursor *pCx){ + if( pCx->colCache ){ + freeCursorWithCache(p, pCx); + return; + } + switch( pCx->eCurType ){ + case CURTYPE_SORTER: { + sqlite3VdbeSorterClose(p->db, pCx); + break; + } + case CURTYPE_BTREE: { + assert( pCx->uc.pCursor!=0 ); + sqlite3BtreeCloseCursor(pCx->uc.pCursor); + break; + } +#ifndef SQLITE_OMIT_VIRTUALTABLE + case CURTYPE_VTAB: { + sqlite3_vtab_cursor *pVCur = pCx->uc.pVCur; + const sqlite3_module *pModule = pVCur->pVtab->pModule; + assert( pVCur->pVtab->nRef>0 ); + pVCur->pVtab->nRef--; + pModule->xClose(pVCur); + break; + } +#endif + } +} + +/* +** Close all cursors in the current frame. +*/ +static void closeCursorsInFrame(Vdbe *p){ + int i; + for(i=0; inCursor; i++){ + VdbeCursor *pC = p->apCsr[i]; + if( pC ){ + sqlite3VdbeFreeCursorNN(p, pC); + p->apCsr[i] = 0; + } + } +} + +/* +** Copy the values stored in the VdbeFrame structure to its Vdbe. This +** is used, for example, when a trigger sub-program is halted to restore +** control to the main program. +*/ +SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){ + Vdbe *v = pFrame->v; + closeCursorsInFrame(v); + v->aOp = pFrame->aOp; + v->nOp = pFrame->nOp; + v->aMem = pFrame->aMem; + v->nMem = pFrame->nMem; + v->apCsr = pFrame->apCsr; + v->nCursor = pFrame->nCursor; + v->db->lastRowid = pFrame->lastRowid; + v->nChange = pFrame->nChange; + v->db->nChange = pFrame->nDbChange; + sqlite3VdbeDeleteAuxData(v->db, &v->pAuxData, -1, 0); + v->pAuxData = pFrame->pAuxData; + pFrame->pAuxData = 0; + return pFrame->pc; +} + +/* +** Close all cursors. +** +** Also release any dynamic memory held by the VM in the Vdbe.aMem memory +** cell array. This is necessary as the memory cell array may contain +** pointers to VdbeFrame objects, which may in turn contain pointers to +** open cursors. +*/ +static void closeAllCursors(Vdbe *p){ + if( p->pFrame ){ + VdbeFrame *pFrame; + for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent); + sqlite3VdbeFrameRestore(pFrame); + p->pFrame = 0; + p->nFrame = 0; + } + assert( p->nFrame==0 ); + closeCursorsInFrame(p); + releaseMemArray(p->aMem, p->nMem); + while( p->pDelFrame ){ + VdbeFrame *pDel = p->pDelFrame; + p->pDelFrame = pDel->pParent; + sqlite3VdbeFrameDelete(pDel); + } + + /* Delete any auxdata allocations made by the VM */ + if( p->pAuxData ) sqlite3VdbeDeleteAuxData(p->db, &p->pAuxData, -1, 0); + assert( p->pAuxData==0 ); +} + +/* +** Set the number of result columns that will be returned by this SQL +** statement. This is now set at compile time, rather than during +** execution of the vdbe program so that sqlite3_column_count() can +** be called on an SQL statement before sqlite3_step(). +*/ +SQLITE_PRIVATE void sqlite3VdbeSetNumCols(Vdbe *p, int nResColumn){ + int n; + sqlite3 *db = p->db; + + if( p->nResAlloc ){ + releaseMemArray(p->aColName, p->nResAlloc*COLNAME_N); + sqlite3DbFree(db, p->aColName); + } + n = nResColumn*COLNAME_N; + p->nResColumn = p->nResAlloc = (u16)nResColumn; + p->aColName = (Mem*)sqlite3DbMallocRawNN(db, sizeof(Mem)*n ); + if( p->aColName==0 ) return; + initMemArray(p->aColName, n, db, MEM_Null); +} + +/* +** Set the name of the idx'th column to be returned by the SQL statement. +** zName must be a pointer to a nul terminated string. +** +** This call must be made after a call to sqlite3VdbeSetNumCols(). +** +** The final parameter, xDel, must be one of SQLITE_DYNAMIC, SQLITE_STATIC +** or SQLITE_TRANSIENT. If it is SQLITE_DYNAMIC, then the buffer pointed +** to by zName will be freed by sqlite3DbFree() when the vdbe is destroyed. +*/ +SQLITE_PRIVATE int sqlite3VdbeSetColName( + Vdbe *p, /* Vdbe being configured */ + int idx, /* Index of column zName applies to */ + int var, /* One of the COLNAME_* constants */ + const char *zName, /* Pointer to buffer containing name */ + void (*xDel)(void*) /* Memory management strategy for zName */ +){ + int rc; + Mem *pColName; + assert( idxnResAlloc ); + assert( vardb->mallocFailed ){ + assert( !zName || xDel!=SQLITE_DYNAMIC ); + return SQLITE_NOMEM_BKPT; + } + assert( p->aColName!=0 ); + pColName = &(p->aColName[idx+var*p->nResAlloc]); + rc = sqlite3VdbeMemSetStr(pColName, zName, -1, SQLITE_UTF8, xDel); + assert( rc!=0 || !zName || (pColName->flags&MEM_Term)!=0 ); + return rc; +} + +/* +** A read or write transaction may or may not be active on database handle +** db. If a transaction is active, commit it. If there is a +** write-transaction spanning more than one database file, this routine +** takes care of the super-journal trickery. +*/ +static int vdbeCommit(sqlite3 *db, Vdbe *p){ + int i; + int nTrans = 0; /* Number of databases with an active write-transaction + ** that are candidates for a two-phase commit using a + ** super-journal */ + int rc = SQLITE_OK; + int needXcommit = 0; + +#ifdef SQLITE_OMIT_VIRTUALTABLE + /* With this option, sqlite3VtabSync() is defined to be simply + ** SQLITE_OK so p is not used. + */ + UNUSED_PARAMETER(p); +#endif + + /* Before doing anything else, call the xSync() callback for any + ** virtual module tables written in this transaction. This has to + ** be done before determining whether a super-journal file is + ** required, as an xSync() callback may add an attached database + ** to the transaction. + */ + rc = sqlite3VtabSync(db, p); + + /* This loop determines (a) if the commit hook should be invoked and + ** (b) how many database files have open write transactions, not + ** including the temp database. (b) is important because if more than + ** one database file has an open write transaction, a super-journal + ** file is required for an atomic commit. + */ + for(i=0; rc==SQLITE_OK && inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( sqlite3BtreeTxnState(pBt)==SQLITE_TXN_WRITE ){ + /* Whether or not a database might need a super-journal depends upon + ** its journal mode (among other things). This matrix determines which + ** journal modes use a super-journal and which do not */ + static const u8 aMJNeeded[] = { + /* DELETE */ 1, + /* PERSIST */ 1, + /* OFF */ 0, + /* TRUNCATE */ 1, + /* MEMORY */ 0, + /* WAL */ 0 + }; + Pager *pPager; /* Pager associated with pBt */ + needXcommit = 1; + sqlite3BtreeEnter(pBt); + pPager = sqlite3BtreePager(pBt); + if( db->aDb[i].safety_level!=PAGER_SYNCHRONOUS_OFF + && aMJNeeded[sqlite3PagerGetJournalMode(pPager)] + && sqlite3PagerIsMemdb(pPager)==0 + ){ + assert( i!=1 ); + nTrans++; + } + rc = sqlite3PagerExclusiveLock(pPager); + sqlite3BtreeLeave(pBt); + } + } + if( rc!=SQLITE_OK ){ + return rc; + } + + /* If there are any write-transactions at all, invoke the commit hook */ + if( needXcommit && db->xCommitCallback ){ + rc = db->xCommitCallback(db->pCommitArg); + if( rc ){ + return SQLITE_CONSTRAINT_COMMITHOOK; + } + } + + /* The simple case - no more than one database file (not counting the + ** TEMP database) has a transaction active. There is no need for the + ** super-journal. + ** + ** If the return value of sqlite3BtreeGetFilename() is a zero length + ** string, it means the main database is :memory: or a temp file. In + ** that case we do not support atomic multi-file commits, so use the + ** simple case then too. + */ + if( 0==sqlite3Strlen30(sqlite3BtreeGetFilename(db->aDb[0].pBt)) + || nTrans<=1 + ){ + if( needXcommit ){ + for(i=0; rc==SQLITE_OK && inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( sqlite3BtreeTxnState(pBt)>=SQLITE_TXN_WRITE ){ + rc = sqlite3BtreeCommitPhaseOne(pBt, 0); + } + } + } + + /* Do the commit only if all databases successfully complete phase 1. + ** If one of the BtreeCommitPhaseOne() calls fails, this indicates an + ** IO error while deleting or truncating a journal file. It is unlikely, + ** but could happen. In this case abandon processing and return the error. + */ + for(i=0; rc==SQLITE_OK && inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + int txn = sqlite3BtreeTxnState(pBt); + if( txn!=SQLITE_TXN_NONE ){ + assert( needXcommit || txn==SQLITE_TXN_READ ); + rc = sqlite3BtreeCommitPhaseTwo(pBt, 0); + } + } + if( rc==SQLITE_OK ){ + sqlite3VtabCommit(db); + } + } + + /* The complex case - There is a multi-file write-transaction active. + ** This requires a super-journal file to ensure the transaction is + ** committed atomically. + */ +#ifndef SQLITE_OMIT_DISKIO + else{ + sqlite3_vfs *pVfs = db->pVfs; + char *zSuper = 0; /* File-name for the super-journal */ + char const *zMainFile = sqlite3BtreeGetFilename(db->aDb[0].pBt); + sqlite3_file *pSuperJrnl = 0; + i64 offset = 0; + int res; + int retryCount = 0; + int nMainFile; + + /* Select a super-journal file name */ + nMainFile = sqlite3Strlen30(zMainFile); + zSuper = sqlite3MPrintf(db, "%.4c%s%.16c", 0,zMainFile,0); + if( zSuper==0 ) return SQLITE_NOMEM_BKPT; + zSuper += 4; + do { + u32 iRandom; + if( retryCount ){ + if( retryCount>100 ){ + sqlite3_log(SQLITE_FULL, "MJ delete: %s", zSuper); + sqlite3OsDelete(pVfs, zSuper, 0); + break; + }else if( retryCount==1 ){ + sqlite3_log(SQLITE_FULL, "MJ collide: %s", zSuper); + } + } + retryCount++; + sqlite3_randomness(sizeof(iRandom), &iRandom); + sqlite3_snprintf(13, &zSuper[nMainFile], "-mj%06X9%02X", + (iRandom>>8)&0xffffff, iRandom&0xff); + /* The antipenultimate character of the super-journal name must + ** be "9" to avoid name collisions when using 8+3 filenames. */ + assert( zSuper[sqlite3Strlen30(zSuper)-3]=='9' ); + sqlite3FileSuffix3(zMainFile, zSuper); + rc = sqlite3OsAccess(pVfs, zSuper, SQLITE_ACCESS_EXISTS, &res); + }while( rc==SQLITE_OK && res ); + if( rc==SQLITE_OK ){ + /* Open the super-journal. */ + rc = sqlite3OsOpenMalloc(pVfs, zSuper, &pSuperJrnl, + SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE| + SQLITE_OPEN_EXCLUSIVE|SQLITE_OPEN_SUPER_JOURNAL, 0 + ); + } + if( rc!=SQLITE_OK ){ + sqlite3DbFree(db, zSuper-4); + return rc; + } + + /* Write the name of each database file in the transaction into the new + ** super-journal file. If an error occurs at this point close + ** and delete the super-journal file. All the individual journal files + ** still have 'null' as the super-journal pointer, so they will roll + ** back independently if a failure occurs. + */ + for(i=0; inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( sqlite3BtreeTxnState(pBt)==SQLITE_TXN_WRITE ){ + char const *zFile = sqlite3BtreeGetJournalname(pBt); + if( zFile==0 ){ + continue; /* Ignore TEMP and :memory: databases */ + } + assert( zFile[0]!=0 ); + rc = sqlite3OsWrite(pSuperJrnl, zFile, sqlite3Strlen30(zFile)+1,offset); + offset += sqlite3Strlen30(zFile)+1; + if( rc!=SQLITE_OK ){ + sqlite3OsCloseFree(pSuperJrnl); + sqlite3OsDelete(pVfs, zSuper, 0); + sqlite3DbFree(db, zSuper-4); + return rc; + } + } + } + + /* Sync the super-journal file. If the IOCAP_SEQUENTIAL device + ** flag is set this is not required. + */ + if( 0==(sqlite3OsDeviceCharacteristics(pSuperJrnl)&SQLITE_IOCAP_SEQUENTIAL) + && SQLITE_OK!=(rc = sqlite3OsSync(pSuperJrnl, SQLITE_SYNC_NORMAL)) + ){ + sqlite3OsCloseFree(pSuperJrnl); + sqlite3OsDelete(pVfs, zSuper, 0); + sqlite3DbFree(db, zSuper-4); + return rc; + } + + /* Sync all the db files involved in the transaction. The same call + ** sets the super-journal pointer in each individual journal. If + ** an error occurs here, do not delete the super-journal file. + ** + ** If the error occurs during the first call to + ** sqlite3BtreeCommitPhaseOne(), then there is a chance that the + ** super-journal file will be orphaned. But we cannot delete it, + ** in case the super-journal file name was written into the journal + ** file before the failure occurred. + */ + for(i=0; rc==SQLITE_OK && inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( pBt ){ + rc = sqlite3BtreeCommitPhaseOne(pBt, zSuper); + } + } + sqlite3OsCloseFree(pSuperJrnl); + assert( rc!=SQLITE_BUSY ); + if( rc!=SQLITE_OK ){ + sqlite3DbFree(db, zSuper-4); + return rc; + } + + /* Delete the super-journal file. This commits the transaction. After + ** doing this the directory is synced again before any individual + ** transaction files are deleted. + */ + rc = sqlite3OsDelete(pVfs, zSuper, 1); + sqlite3DbFree(db, zSuper-4); + zSuper = 0; + if( rc ){ + return rc; + } + + /* All files and directories have already been synced, so the following + ** calls to sqlite3BtreeCommitPhaseTwo() are only closing files and + ** deleting or truncating journals. If something goes wrong while + ** this is happening we don't really care. The integrity of the + ** transaction is already guaranteed, but some stray 'cold' journals + ** may be lying around. Returning an error code won't help matters. + */ + disable_simulated_io_errors(); + sqlite3BeginBenignMalloc(); + for(i=0; inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( pBt ){ + sqlite3BtreeCommitPhaseTwo(pBt, 1); + } + } + sqlite3EndBenignMalloc(); + enable_simulated_io_errors(); + + sqlite3VtabCommit(db); + } +#endif + + return rc; +} + +/* +** This routine checks that the sqlite3.nVdbeActive count variable +** matches the number of vdbe's in the list sqlite3.pVdbe that are +** currently active. An assertion fails if the two counts do not match. +** This is an internal self-check only - it is not an essential processing +** step. +** +** This is a no-op if NDEBUG is defined. +*/ +#ifndef NDEBUG +static void checkActiveVdbeCnt(sqlite3 *db){ + Vdbe *p; + int cnt = 0; + int nWrite = 0; + int nRead = 0; + p = db->pVdbe; + while( p ){ + if( sqlite3_stmt_busy((sqlite3_stmt*)p) ){ + cnt++; + if( p->readOnly==0 ) nWrite++; + if( p->bIsReader ) nRead++; + } + p = p->pVNext; + } + assert( cnt==db->nVdbeActive ); + assert( nWrite==db->nVdbeWrite ); + assert( nRead==db->nVdbeRead ); +} +#else +#define checkActiveVdbeCnt(x) +#endif + +/* +** If the Vdbe passed as the first argument opened a statement-transaction, +** close it now. Argument eOp must be either SAVEPOINT_ROLLBACK or +** SAVEPOINT_RELEASE. If it is SAVEPOINT_ROLLBACK, then the statement +** transaction is rolled back. If eOp is SAVEPOINT_RELEASE, then the +** statement transaction is committed. +** +** If an IO error occurs, an SQLITE_IOERR_XXX error code is returned. +** Otherwise SQLITE_OK. +*/ +static SQLITE_NOINLINE int vdbeCloseStatement(Vdbe *p, int eOp){ + sqlite3 *const db = p->db; + int rc = SQLITE_OK; + int i; + const int iSavepoint = p->iStatement-1; + + assert( eOp==SAVEPOINT_ROLLBACK || eOp==SAVEPOINT_RELEASE); + assert( db->nStatement>0 ); + assert( p->iStatement==(db->nStatement+db->nSavepoint) ); + + for(i=0; inDb; i++){ + int rc2 = SQLITE_OK; + Btree *pBt = db->aDb[i].pBt; + if( pBt ){ + if( eOp==SAVEPOINT_ROLLBACK ){ + rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_ROLLBACK, iSavepoint); + } + if( rc2==SQLITE_OK ){ + rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_RELEASE, iSavepoint); + } + if( rc==SQLITE_OK ){ + rc = rc2; + } + } + } + db->nStatement--; + p->iStatement = 0; + + if( rc==SQLITE_OK ){ + if( eOp==SAVEPOINT_ROLLBACK ){ + rc = sqlite3VtabSavepoint(db, SAVEPOINT_ROLLBACK, iSavepoint); + } + if( rc==SQLITE_OK ){ + rc = sqlite3VtabSavepoint(db, SAVEPOINT_RELEASE, iSavepoint); + } + } + + /* If the statement transaction is being rolled back, also restore the + ** database handles deferred constraint counter to the value it had when + ** the statement transaction was opened. */ + if( eOp==SAVEPOINT_ROLLBACK ){ + db->nDeferredCons = p->nStmtDefCons; + db->nDeferredImmCons = p->nStmtDefImmCons; + } + return rc; +} +SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *p, int eOp){ + if( p->db->nStatement && p->iStatement ){ + return vdbeCloseStatement(p, eOp); + } + return SQLITE_OK; +} + + +/* +** These functions are called when a transaction opened by the database +** handle associated with the VM passed as an argument is about to be +** committed. If there are outstanding foreign key constraint violations +** return an error code. Otherwise, SQLITE_OK. +** +** If there are outstanding FK violations and this function returns +** non-zero, set the result of the VM to SQLITE_CONSTRAINT_FOREIGNKEY +** and write an error message to it. +*/ +#ifndef SQLITE_OMIT_FOREIGN_KEY +static SQLITE_NOINLINE int vdbeFkError(Vdbe *p){ + p->rc = SQLITE_CONSTRAINT_FOREIGNKEY; + p->errorAction = OE_Abort; + sqlite3VdbeError(p, "FOREIGN KEY constraint failed"); + if( (p->prepFlags & SQLITE_PREPARE_SAVESQL)==0 ) return SQLITE_ERROR; + return SQLITE_CONSTRAINT_FOREIGNKEY; +} +SQLITE_PRIVATE int sqlite3VdbeCheckFkImmediate(Vdbe *p){ + if( p->nFkConstraint==0 ) return SQLITE_OK; + return vdbeFkError(p); +} +SQLITE_PRIVATE int sqlite3VdbeCheckFkDeferred(Vdbe *p){ + sqlite3 *db = p->db; + if( (db->nDeferredCons+db->nDeferredImmCons)==0 ) return SQLITE_OK; + return vdbeFkError(p); +} +#endif + +/* +** This routine is called the when a VDBE tries to halt. If the VDBE +** has made changes and is in autocommit mode, then commit those +** changes. If a rollback is needed, then do the rollback. +** +** This routine is the only way to move the sqlite3eOpenState of a VM from +** SQLITE_STATE_RUN to SQLITE_STATE_HALT. It is harmless to +** call this on a VM that is in the SQLITE_STATE_HALT state. +** +** Return an error code. If the commit could not complete because of +** lock contention, return SQLITE_BUSY. If SQLITE_BUSY is returned, it +** means the close did not happen and needs to be repeated. +*/ +SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){ + int rc; /* Used to store transient return codes */ + sqlite3 *db = p->db; + + /* This function contains the logic that determines if a statement or + ** transaction will be committed or rolled back as a result of the + ** execution of this virtual machine. + ** + ** If any of the following errors occur: + ** + ** SQLITE_NOMEM + ** SQLITE_IOERR + ** SQLITE_FULL + ** SQLITE_INTERRUPT + ** + ** Then the internal cache might have been left in an inconsistent + ** state. We need to rollback the statement transaction, if there is + ** one, or the complete transaction if there is no statement transaction. + */ + + assert( p->eVdbeState==VDBE_RUN_STATE ); + if( db->mallocFailed ){ + p->rc = SQLITE_NOMEM_BKPT; + } + closeAllCursors(p); + checkActiveVdbeCnt(db); + + /* No commit or rollback needed if the program never started or if the + ** SQL statement does not read or write a database file. */ + if( p->bIsReader ){ + int mrc; /* Primary error code from p->rc */ + int eStatementOp = 0; + int isSpecialError; /* Set to true if a 'special' error */ + + /* Lock all btrees used by the statement */ + sqlite3VdbeEnter(p); + + /* Check for one of the special errors */ + if( p->rc ){ + mrc = p->rc & 0xff; + isSpecialError = mrc==SQLITE_NOMEM + || mrc==SQLITE_IOERR + || mrc==SQLITE_INTERRUPT + || mrc==SQLITE_FULL; + }else{ + mrc = isSpecialError = 0; + } + if( isSpecialError ){ + /* If the query was read-only and the error code is SQLITE_INTERRUPT, + ** no rollback is necessary. Otherwise, at least a savepoint + ** transaction must be rolled back to restore the database to a + ** consistent state. + ** + ** Even if the statement is read-only, it is important to perform + ** a statement or transaction rollback operation. If the error + ** occurred while writing to the journal, sub-journal or database + ** file as part of an effort to free up cache space (see function + ** pagerStress() in pager.c), the rollback is required to restore + ** the pager to a consistent state. + */ + if( !p->readOnly || mrc!=SQLITE_INTERRUPT ){ + if( (mrc==SQLITE_NOMEM || mrc==SQLITE_FULL) && p->usesStmtJournal ){ + eStatementOp = SAVEPOINT_ROLLBACK; + }else{ + /* We are forced to roll back the active transaction. Before doing + ** so, abort any other statements this handle currently has active. + */ + sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK); + sqlite3CloseSavepoints(db); + db->autoCommit = 1; + p->nChange = 0; + } + } + } + + /* Check for immediate foreign key violations. */ + if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){ + (void)sqlite3VdbeCheckFkImmediate(p); + } + + /* If the auto-commit flag is set and this is the only active writer + ** VM, then we do either a commit or rollback of the current transaction. + ** + ** Note: This block also runs if one of the special errors handled + ** above has occurred. + */ + if( !sqlite3VtabInSync(db) + && db->autoCommit + && db->nVdbeWrite==(p->readOnly==0) + ){ + if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){ + rc = sqlite3VdbeCheckFkDeferred(p); + if( rc!=SQLITE_OK ){ + if( NEVER(p->readOnly) ){ + sqlite3VdbeLeave(p); + return SQLITE_ERROR; + } + rc = SQLITE_CONSTRAINT_FOREIGNKEY; + }else if( db->flags & SQLITE_CorruptRdOnly ){ + rc = SQLITE_CORRUPT; + db->flags &= ~SQLITE_CorruptRdOnly; + }else{ + /* The auto-commit flag is true, the vdbe program was successful + ** or hit an 'OR FAIL' constraint and there are no deferred foreign + ** key constraints to hold up the transaction. This means a commit + ** is required. */ + rc = vdbeCommit(db, p); + } + if( rc==SQLITE_BUSY && p->readOnly ){ + sqlite3VdbeLeave(p); + return SQLITE_BUSY; + }else if( rc!=SQLITE_OK ){ + sqlite3SystemError(db, rc); + p->rc = rc; + sqlite3RollbackAll(db, SQLITE_OK); + p->nChange = 0; + }else{ + db->nDeferredCons = 0; + db->nDeferredImmCons = 0; + db->flags &= ~(u64)SQLITE_DeferFKs; + sqlite3CommitInternalChanges(db); + } + }else if( p->rc==SQLITE_SCHEMA && db->nVdbeActive>1 ){ + p->nChange = 0; + }else{ + sqlite3RollbackAll(db, SQLITE_OK); + p->nChange = 0; + } + db->nStatement = 0; + }else if( eStatementOp==0 ){ + if( p->rc==SQLITE_OK || p->errorAction==OE_Fail ){ + eStatementOp = SAVEPOINT_RELEASE; + }else if( p->errorAction==OE_Abort ){ + eStatementOp = SAVEPOINT_ROLLBACK; + }else{ + sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK); + sqlite3CloseSavepoints(db); + db->autoCommit = 1; + p->nChange = 0; + } + } + + /* If eStatementOp is non-zero, then a statement transaction needs to + ** be committed or rolled back. Call sqlite3VdbeCloseStatement() to + ** do so. If this operation returns an error, and the current statement + ** error code is SQLITE_OK or SQLITE_CONSTRAINT, then promote the + ** current statement error code. + */ + if( eStatementOp ){ + rc = sqlite3VdbeCloseStatement(p, eStatementOp); + if( rc ){ + if( p->rc==SQLITE_OK || (p->rc&0xff)==SQLITE_CONSTRAINT ){ + p->rc = rc; + sqlite3DbFree(db, p->zErrMsg); + p->zErrMsg = 0; + } + sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK); + sqlite3CloseSavepoints(db); + db->autoCommit = 1; + p->nChange = 0; + } + } + + /* If this was an INSERT, UPDATE or DELETE and no statement transaction + ** has been rolled back, update the database connection change-counter. + */ + if( p->changeCntOn ){ + if( eStatementOp!=SAVEPOINT_ROLLBACK ){ + sqlite3VdbeSetChanges(db, p->nChange); + }else{ + sqlite3VdbeSetChanges(db, 0); + } + p->nChange = 0; + } + + /* Release the locks */ + sqlite3VdbeLeave(p); + } + + /* We have successfully halted and closed the VM. Record this fact. */ + db->nVdbeActive--; + if( !p->readOnly ) db->nVdbeWrite--; + if( p->bIsReader ) db->nVdbeRead--; + assert( db->nVdbeActive>=db->nVdbeRead ); + assert( db->nVdbeRead>=db->nVdbeWrite ); + assert( db->nVdbeWrite>=0 ); + p->eVdbeState = VDBE_HALT_STATE; + checkActiveVdbeCnt(db); + if( db->mallocFailed ){ + p->rc = SQLITE_NOMEM_BKPT; + } + + /* If the auto-commit flag is set to true, then any locks that were held + ** by connection db have now been released. Call sqlite3ConnectionUnlocked() + ** to invoke any required unlock-notify callbacks. + */ + if( db->autoCommit ){ + sqlite3ConnectionUnlocked(db); + } + + assert( db->nVdbeActive>0 || db->autoCommit==0 || db->nStatement==0 ); + return (p->rc==SQLITE_BUSY ? SQLITE_BUSY : SQLITE_OK); +} + + +/* +** Each VDBE holds the result of the most recent sqlite3_step() call +** in p->rc. This routine sets that result back to SQLITE_OK. +*/ +SQLITE_PRIVATE void sqlite3VdbeResetStepResult(Vdbe *p){ + p->rc = SQLITE_OK; +} + +/* +** Copy the error code and error message belonging to the VDBE passed +** as the first argument to its database handle (so that they will be +** returned by calls to sqlite3_errcode() and sqlite3_errmsg()). +** +** This function does not clear the VDBE error code or message, just +** copies them to the database handle. +*/ +SQLITE_PRIVATE int sqlite3VdbeTransferError(Vdbe *p){ + sqlite3 *db = p->db; + int rc = p->rc; + if( p->zErrMsg ){ + db->bBenignMalloc++; + sqlite3BeginBenignMalloc(); + if( db->pErr==0 ) db->pErr = sqlite3ValueNew(db); + sqlite3ValueSetStr(db->pErr, -1, p->zErrMsg, SQLITE_UTF8, SQLITE_TRANSIENT); + sqlite3EndBenignMalloc(); + db->bBenignMalloc--; + }else if( db->pErr ){ + sqlite3ValueSetNull(db->pErr); + } + db->errCode = rc; + db->errByteOffset = -1; + return rc; +} + +#ifdef SQLITE_ENABLE_SQLLOG +/* +** If an SQLITE_CONFIG_SQLLOG hook is registered and the VM has been run, +** invoke it. +*/ +static void vdbeInvokeSqllog(Vdbe *v){ + if( sqlite3GlobalConfig.xSqllog && v->rc==SQLITE_OK && v->zSql && v->pc>=0 ){ + char *zExpanded = sqlite3VdbeExpandSql(v, v->zSql); + assert( v->db->init.busy==0 ); + if( zExpanded ){ + sqlite3GlobalConfig.xSqllog( + sqlite3GlobalConfig.pSqllogArg, v->db, zExpanded, 1 + ); + sqlite3DbFree(v->db, zExpanded); + } + } +} +#else +# define vdbeInvokeSqllog(x) +#endif + +/* +** Clean up a VDBE after execution but do not delete the VDBE just yet. +** Write any error messages into *pzErrMsg. Return the result code. +** +** After this routine is run, the VDBE should be ready to be executed +** again. +** +** To look at it another way, this routine resets the state of the +** virtual machine from VDBE_RUN_STATE or VDBE_HALT_STATE back to +** VDBE_READY_STATE. +*/ +SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){ +#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE) + int i; +#endif + + sqlite3 *db; + db = p->db; + + /* If the VM did not run to completion or if it encountered an + ** error, then it might not have been halted properly. So halt + ** it now. + */ + if( p->eVdbeState==VDBE_RUN_STATE ) sqlite3VdbeHalt(p); + + /* If the VDBE has been run even partially, then transfer the error code + ** and error message from the VDBE into the main database structure. But + ** if the VDBE has just been set to run but has not actually executed any + ** instructions yet, leave the main database error information unchanged. + */ + if( p->pc>=0 ){ + vdbeInvokeSqllog(p); + if( db->pErr || p->zErrMsg ){ + sqlite3VdbeTransferError(p); + }else{ + db->errCode = p->rc; + } + } + + /* Reset register contents and reclaim error message memory. + */ +#ifdef SQLITE_DEBUG + /* Execute assert() statements to ensure that the Vdbe.apCsr[] and + ** Vdbe.aMem[] arrays have already been cleaned up. */ + if( p->apCsr ) for(i=0; inCursor; i++) assert( p->apCsr[i]==0 ); + if( p->aMem ){ + for(i=0; inMem; i++) assert( p->aMem[i].flags==MEM_Undefined ); + } +#endif + if( p->zErrMsg ){ + sqlite3DbFree(db, p->zErrMsg); + p->zErrMsg = 0; + } + p->pResultRow = 0; +#ifdef SQLITE_DEBUG + p->nWrite = 0; +#endif + + /* Save profiling information from this VDBE run. + */ +#ifdef VDBE_PROFILE + { + FILE *out = fopen("vdbe_profile.out", "a"); + if( out ){ + fprintf(out, "---- "); + for(i=0; inOp; i++){ + fprintf(out, "%02x", p->aOp[i].opcode); + } + fprintf(out, "\n"); + if( p->zSql ){ + char c, pc = 0; + fprintf(out, "-- "); + for(i=0; (c = p->zSql[i])!=0; i++){ + if( pc=='\n' ) fprintf(out, "-- "); + putc(c, out); + pc = c; + } + if( pc!='\n' ) fprintf(out, "\n"); + } + for(i=0; inOp; i++){ + char zHdr[100]; + i64 cnt = p->aOp[i].nExec; + i64 cycles = p->aOp[i].nCycle; + sqlite3_snprintf(sizeof(zHdr), zHdr, "%6u %12llu %8llu ", + cnt, + cycles, + cnt>0 ? cycles/cnt : 0 + ); + fprintf(out, "%s", zHdr); + sqlite3VdbePrintOp(out, i, &p->aOp[i]); + } + fclose(out); + } + } +#endif + return p->rc & db->errMask; +} + +/* +** Clean up and delete a VDBE after execution. Return an integer which is +** the result code. Write any error message text into *pzErrMsg. +*/ +SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe *p){ + int rc = SQLITE_OK; + assert( VDBE_RUN_STATE>VDBE_READY_STATE ); + assert( VDBE_HALT_STATE>VDBE_READY_STATE ); + assert( VDBE_INIT_STATEeVdbeState>=VDBE_READY_STATE ){ + rc = sqlite3VdbeReset(p); + assert( (rc & p->db->errMask)==rc ); + } + sqlite3VdbeDelete(p); + return rc; +} + +/* +** If parameter iOp is less than zero, then invoke the destructor for +** all auxiliary data pointers currently cached by the VM passed as +** the first argument. +** +** Or, if iOp is greater than or equal to zero, then the destructor is +** only invoked for those auxiliary data pointers created by the user +** function invoked by the OP_Function opcode at instruction iOp of +** VM pVdbe, and only then if: +** +** * the associated function parameter is the 32nd or later (counting +** from left to right), or +** +** * the corresponding bit in argument mask is clear (where the first +** function parameter corresponds to bit 0 etc.). +*/ +SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(sqlite3 *db, AuxData **pp, int iOp, int mask){ + while( *pp ){ + AuxData *pAux = *pp; + if( (iOp<0) + || (pAux->iAuxOp==iOp + && pAux->iAuxArg>=0 + && (pAux->iAuxArg>31 || !(mask & MASKBIT32(pAux->iAuxArg)))) + ){ + testcase( pAux->iAuxArg==31 ); + if( pAux->xDeleteAux ){ + pAux->xDeleteAux(pAux->pAux); + } + *pp = pAux->pNextAux; + sqlite3DbFree(db, pAux); + }else{ + pp= &pAux->pNextAux; + } + } +} + +/* +** Free all memory associated with the Vdbe passed as the second argument, +** except for object itself, which is preserved. +** +** The difference between this function and sqlite3VdbeDelete() is that +** VdbeDelete() also unlinks the Vdbe from the list of VMs associated with +** the database connection and frees the object itself. +*/ +static void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){ + SubProgram *pSub, *pNext; + assert( db!=0 ); + assert( p->db==0 || p->db==db ); + if( p->aColName ){ + releaseMemArray(p->aColName, p->nResAlloc*COLNAME_N); + sqlite3DbNNFreeNN(db, p->aColName); + } + for(pSub=p->pProgram; pSub; pSub=pNext){ + pNext = pSub->pNext; + vdbeFreeOpArray(db, pSub->aOp, pSub->nOp); + sqlite3DbFree(db, pSub); + } + if( p->eVdbeState!=VDBE_INIT_STATE ){ + releaseMemArray(p->aVar, p->nVar); + if( p->pVList ) sqlite3DbNNFreeNN(db, p->pVList); + if( p->pFree ) sqlite3DbNNFreeNN(db, p->pFree); + } + vdbeFreeOpArray(db, p->aOp, p->nOp); + if( p->zSql ) sqlite3DbNNFreeNN(db, p->zSql); +#ifdef SQLITE_ENABLE_NORMALIZE + sqlite3DbFree(db, p->zNormSql); + { + DblquoteStr *pThis, *pNxt; + for(pThis=p->pDblStr; pThis; pThis=pNxt){ + pNxt = pThis->pNextStr; + sqlite3DbFree(db, pThis); + } + } +#endif +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + { + int i; + for(i=0; inScan; i++){ + sqlite3DbFree(db, p->aScan[i].zName); + } + sqlite3DbFree(db, p->aScan); + } +#endif +} + +/* +** Delete an entire VDBE. +*/ +SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){ + sqlite3 *db; + + assert( p!=0 ); + db = p->db; + assert( db!=0 ); + assert( sqlite3_mutex_held(db->mutex) ); + sqlite3VdbeClearObject(db, p); + if( db->pnBytesFreed==0 ){ + assert( p->ppVPrev!=0 ); + *p->ppVPrev = p->pVNext; + if( p->pVNext ){ + p->pVNext->ppVPrev = p->ppVPrev; + } + } + sqlite3DbNNFreeNN(db, p); +} + +/* +** The cursor "p" has a pending seek operation that has not yet been +** carried out. Seek the cursor now. If an error occurs, return +** the appropriate error code. +*/ +SQLITE_PRIVATE int SQLITE_NOINLINE sqlite3VdbeFinishMoveto(VdbeCursor *p){ + int res, rc; +#ifdef SQLITE_TEST + extern int sqlite3_search_count; +#endif + assert( p->deferredMoveto ); + assert( p->isTable ); + assert( p->eCurType==CURTYPE_BTREE ); + rc = sqlite3BtreeTableMoveto(p->uc.pCursor, p->movetoTarget, 0, &res); + if( rc ) return rc; + if( res!=0 ) return SQLITE_CORRUPT_BKPT; +#ifdef SQLITE_TEST + sqlite3_search_count++; +#endif + p->deferredMoveto = 0; + p->cacheStatus = CACHE_STALE; + return SQLITE_OK; +} + +/* +** Something has moved cursor "p" out of place. Maybe the row it was +** pointed to was deleted out from under it. Or maybe the btree was +** rebalanced. Whatever the cause, try to restore "p" to the place it +** is supposed to be pointing. If the row was deleted out from under the +** cursor, set the cursor to point to a NULL row. +*/ +SQLITE_PRIVATE int SQLITE_NOINLINE sqlite3VdbeHandleMovedCursor(VdbeCursor *p){ + int isDifferentRow, rc; + assert( p->eCurType==CURTYPE_BTREE ); + assert( p->uc.pCursor!=0 ); + assert( sqlite3BtreeCursorHasMoved(p->uc.pCursor) ); + rc = sqlite3BtreeCursorRestore(p->uc.pCursor, &isDifferentRow); + p->cacheStatus = CACHE_STALE; + if( isDifferentRow ) p->nullRow = 1; + return rc; +} + +/* +** Check to ensure that the cursor is valid. Restore the cursor +** if need be. Return any I/O error from the restore operation. +*/ +SQLITE_PRIVATE int sqlite3VdbeCursorRestore(VdbeCursor *p){ + assert( p->eCurType==CURTYPE_BTREE || IsNullCursor(p) ); + if( sqlite3BtreeCursorHasMoved(p->uc.pCursor) ){ + return sqlite3VdbeHandleMovedCursor(p); + } + return SQLITE_OK; +} + +/* +** The following functions: +** +** sqlite3VdbeSerialType() +** sqlite3VdbeSerialTypeLen() +** sqlite3VdbeSerialLen() +** sqlite3VdbeSerialPut() <--- in-lined into OP_MakeRecord as of 2022-04-02 +** sqlite3VdbeSerialGet() +** +** encapsulate the code that serializes values for storage in SQLite +** data and index records. Each serialized value consists of a +** 'serial-type' and a blob of data. The serial type is an 8-byte unsigned +** integer, stored as a varint. +** +** In an SQLite index record, the serial type is stored directly before +** the blob of data that it corresponds to. In a table record, all serial +** types are stored at the start of the record, and the blobs of data at +** the end. Hence these functions allow the caller to handle the +** serial-type and data blob separately. +** +** The following table describes the various storage classes for data: +** +** serial type bytes of data type +** -------------- --------------- --------------- +** 0 0 NULL +** 1 1 signed integer +** 2 2 signed integer +** 3 3 signed integer +** 4 4 signed integer +** 5 6 signed integer +** 6 8 signed integer +** 7 8 IEEE float +** 8 0 Integer constant 0 +** 9 0 Integer constant 1 +** 10,11 reserved for expansion +** N>=12 and even (N-12)/2 BLOB +** N>=13 and odd (N-13)/2 text +** +** The 8 and 9 types were added in 3.3.0, file format 4. Prior versions +** of SQLite will not understand those serial types. +*/ + +#if 0 /* Inlined into the OP_MakeRecord opcode */ +/* +** Return the serial-type for the value stored in pMem. +** +** This routine might convert a large MEM_IntReal value into MEM_Real. +** +** 2019-07-11: The primary user of this subroutine was the OP_MakeRecord +** opcode in the byte-code engine. But by moving this routine in-line, we +** can omit some redundant tests and make that opcode a lot faster. So +** this routine is now only used by the STAT3 logic and STAT3 support has +** ended. The code is kept here for historical reference only. +*/ +SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem *pMem, int file_format, u32 *pLen){ + int flags = pMem->flags; + u32 n; + + assert( pLen!=0 ); + if( flags&MEM_Null ){ + *pLen = 0; + return 0; + } + if( flags&(MEM_Int|MEM_IntReal) ){ + /* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */ +# define MAX_6BYTE ((((i64)0x00008000)<<32)-1) + i64 i = pMem->u.i; + u64 u; + testcase( flags & MEM_Int ); + testcase( flags & MEM_IntReal ); + if( i<0 ){ + u = ~i; + }else{ + u = i; + } + if( u<=127 ){ + if( (i&1)==i && file_format>=4 ){ + *pLen = 0; + return 8+(u32)u; + }else{ + *pLen = 1; + return 1; + } + } + if( u<=32767 ){ *pLen = 2; return 2; } + if( u<=8388607 ){ *pLen = 3; return 3; } + if( u<=2147483647 ){ *pLen = 4; return 4; } + if( u<=MAX_6BYTE ){ *pLen = 6; return 5; } + *pLen = 8; + if( flags&MEM_IntReal ){ + /* If the value is IntReal and is going to take up 8 bytes to store + ** as an integer, then we might as well make it an 8-byte floating + ** point value */ + pMem->u.r = (double)pMem->u.i; + pMem->flags &= ~MEM_IntReal; + pMem->flags |= MEM_Real; + return 7; + } + return 6; + } + if( flags&MEM_Real ){ + *pLen = 8; + return 7; + } + assert( pMem->db->mallocFailed || flags&(MEM_Str|MEM_Blob) ); + assert( pMem->n>=0 ); + n = (u32)pMem->n; + if( flags & MEM_Zero ){ + n += pMem->u.nZero; + } + *pLen = n; + return ((n*2) + 12 + ((flags&MEM_Str)!=0)); +} +#endif /* inlined into OP_MakeRecord */ + +/* +** The sizes for serial types less than 128 +*/ +SQLITE_PRIVATE const u8 sqlite3SmallTypeSizes[128] = { + /* 0 1 2 3 4 5 6 7 8 9 */ +/* 0 */ 0, 1, 2, 3, 4, 6, 8, 8, 0, 0, +/* 10 */ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, +/* 20 */ 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, +/* 30 */ 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, +/* 40 */ 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, +/* 50 */ 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, +/* 60 */ 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, +/* 70 */ 29, 29, 30, 30, 31, 31, 32, 32, 33, 33, +/* 80 */ 34, 34, 35, 35, 36, 36, 37, 37, 38, 38, +/* 90 */ 39, 39, 40, 40, 41, 41, 42, 42, 43, 43, +/* 100 */ 44, 44, 45, 45, 46, 46, 47, 47, 48, 48, +/* 110 */ 49, 49, 50, 50, 51, 51, 52, 52, 53, 53, +/* 120 */ 54, 54, 55, 55, 56, 56, 57, 57 +}; + +/* +** Return the length of the data corresponding to the supplied serial-type. +*/ +SQLITE_PRIVATE u32 sqlite3VdbeSerialTypeLen(u32 serial_type){ + if( serial_type>=128 ){ + return (serial_type-12)/2; + }else{ + assert( serial_type<12 + || sqlite3SmallTypeSizes[serial_type]==(serial_type - 12)/2 ); + return sqlite3SmallTypeSizes[serial_type]; + } +} +SQLITE_PRIVATE u8 sqlite3VdbeOneByteSerialTypeLen(u8 serial_type){ + assert( serial_type<128 ); + return sqlite3SmallTypeSizes[serial_type]; +} + +/* +** If we are on an architecture with mixed-endian floating +** points (ex: ARM7) then swap the lower 4 bytes with the +** upper 4 bytes. Return the result. +** +** For most architectures, this is a no-op. +** +** (later): It is reported to me that the mixed-endian problem +** on ARM7 is an issue with GCC, not with the ARM7 chip. It seems +** that early versions of GCC stored the two words of a 64-bit +** float in the wrong order. And that error has been propagated +** ever since. The blame is not necessarily with GCC, though. +** GCC might have just copying the problem from a prior compiler. +** I am also told that newer versions of GCC that follow a different +** ABI get the byte order right. +** +** Developers using SQLite on an ARM7 should compile and run their +** application using -DSQLITE_DEBUG=1 at least once. With DEBUG +** enabled, some asserts below will ensure that the byte order of +** floating point values is correct. +** +** (2007-08-30) Frank van Vugt has studied this problem closely +** and has send his findings to the SQLite developers. Frank +** writes that some Linux kernels offer floating point hardware +** emulation that uses only 32-bit mantissas instead of a full +** 48-bits as required by the IEEE standard. (This is the +** CONFIG_FPE_FASTFPE option.) On such systems, floating point +** byte swapping becomes very complicated. To avoid problems, +** the necessary byte swapping is carried out using a 64-bit integer +** rather than a 64-bit float. Frank assures us that the code here +** works for him. We, the developers, have no way to independently +** verify this, but Frank seems to know what he is talking about +** so we trust him. +*/ +#ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT +SQLITE_PRIVATE u64 sqlite3FloatSwap(u64 in){ + union { + u64 r; + u32 i[2]; + } u; + u32 t; + + u.r = in; + t = u.i[0]; + u.i[0] = u.i[1]; + u.i[1] = t; + return u.r; +} +#endif /* SQLITE_MIXED_ENDIAN_64BIT_FLOAT */ + + +/* Input "x" is a sequence of unsigned characters that represent a +** big-endian integer. Return the equivalent native integer +*/ +#define ONE_BYTE_INT(x) ((i8)(x)[0]) +#define TWO_BYTE_INT(x) (256*(i8)((x)[0])|(x)[1]) +#define THREE_BYTE_INT(x) (65536*(i8)((x)[0])|((x)[1]<<8)|(x)[2]) +#define FOUR_BYTE_UINT(x) (((u32)(x)[0]<<24)|((x)[1]<<16)|((x)[2]<<8)|(x)[3]) +#define FOUR_BYTE_INT(x) (16777216*(i8)((x)[0])|((x)[1]<<16)|((x)[2]<<8)|(x)[3]) + +/* +** Deserialize the data blob pointed to by buf as serial type serial_type +** and store the result in pMem. +** +** This function is implemented as two separate routines for performance. +** The few cases that require local variables are broken out into a separate +** routine so that in most cases the overhead of moving the stack pointer +** is avoided. +*/ +static void serialGet( + const unsigned char *buf, /* Buffer to deserialize from */ + u32 serial_type, /* Serial type to deserialize */ + Mem *pMem /* Memory cell to write value into */ +){ + u64 x = FOUR_BYTE_UINT(buf); + u32 y = FOUR_BYTE_UINT(buf+4); + x = (x<<32) + y; + if( serial_type==6 ){ + /* EVIDENCE-OF: R-29851-52272 Value is a big-endian 64-bit + ** twos-complement integer. */ + pMem->u.i = *(i64*)&x; + pMem->flags = MEM_Int; + testcase( pMem->u.i<0 ); + }else{ + /* EVIDENCE-OF: R-57343-49114 Value is a big-endian IEEE 754-2008 64-bit + ** floating point number. */ +#if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT) + /* Verify that integers and floating point values use the same + ** byte order. Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is + ** defined that 64-bit floating point values really are mixed + ** endian. + */ + static const u64 t1 = ((u64)0x3ff00000)<<32; + static const double r1 = 1.0; + u64 t2 = t1; + swapMixedEndianFloat(t2); + assert( sizeof(r1)==sizeof(t2) && memcmp(&r1, &t2, sizeof(r1))==0 ); +#endif + assert( sizeof(x)==8 && sizeof(pMem->u.r)==8 ); + swapMixedEndianFloat(x); + memcpy(&pMem->u.r, &x, sizeof(x)); + pMem->flags = IsNaN(x) ? MEM_Null : MEM_Real; + } +} +static int serialGet7( + const unsigned char *buf, /* Buffer to deserialize from */ + Mem *pMem /* Memory cell to write value into */ +){ + u64 x = FOUR_BYTE_UINT(buf); + u32 y = FOUR_BYTE_UINT(buf+4); + x = (x<<32) + y; + assert( sizeof(x)==8 && sizeof(pMem->u.r)==8 ); + swapMixedEndianFloat(x); + memcpy(&pMem->u.r, &x, sizeof(x)); + if( IsNaN(x) ){ + pMem->flags = MEM_Null; + return 1; + } + pMem->flags = MEM_Real; + return 0; +} +SQLITE_PRIVATE void sqlite3VdbeSerialGet( + const unsigned char *buf, /* Buffer to deserialize from */ + u32 serial_type, /* Serial type to deserialize */ + Mem *pMem /* Memory cell to write value into */ +){ + switch( serial_type ){ + case 10: { /* Internal use only: NULL with virtual table + ** UPDATE no-change flag set */ + pMem->flags = MEM_Null|MEM_Zero; + pMem->n = 0; + pMem->u.nZero = 0; + return; + } + case 11: /* Reserved for future use */ + case 0: { /* Null */ + /* EVIDENCE-OF: R-24078-09375 Value is a NULL. */ + pMem->flags = MEM_Null; + return; + } + case 1: { + /* EVIDENCE-OF: R-44885-25196 Value is an 8-bit twos-complement + ** integer. */ + pMem->u.i = ONE_BYTE_INT(buf); + pMem->flags = MEM_Int; + testcase( pMem->u.i<0 ); + return; + } + case 2: { /* 2-byte signed integer */ + /* EVIDENCE-OF: R-49794-35026 Value is a big-endian 16-bit + ** twos-complement integer. */ + pMem->u.i = TWO_BYTE_INT(buf); + pMem->flags = MEM_Int; + testcase( pMem->u.i<0 ); + return; + } + case 3: { /* 3-byte signed integer */ + /* EVIDENCE-OF: R-37839-54301 Value is a big-endian 24-bit + ** twos-complement integer. */ + pMem->u.i = THREE_BYTE_INT(buf); + pMem->flags = MEM_Int; + testcase( pMem->u.i<0 ); + return; + } + case 4: { /* 4-byte signed integer */ + /* EVIDENCE-OF: R-01849-26079 Value is a big-endian 32-bit + ** twos-complement integer. */ + pMem->u.i = FOUR_BYTE_INT(buf); +#ifdef __HP_cc + /* Work around a sign-extension bug in the HP compiler for HP/UX */ + if( buf[0]&0x80 ) pMem->u.i |= 0xffffffff80000000LL; +#endif + pMem->flags = MEM_Int; + testcase( pMem->u.i<0 ); + return; + } + case 5: { /* 6-byte signed integer */ + /* EVIDENCE-OF: R-50385-09674 Value is a big-endian 48-bit + ** twos-complement integer. */ + pMem->u.i = FOUR_BYTE_UINT(buf+2) + (((i64)1)<<32)*TWO_BYTE_INT(buf); + pMem->flags = MEM_Int; + testcase( pMem->u.i<0 ); + return; + } + case 6: /* 8-byte signed integer */ + case 7: { /* IEEE floating point */ + /* These use local variables, so do them in a separate routine + ** to avoid having to move the frame pointer in the common case */ + serialGet(buf,serial_type,pMem); + return; + } + case 8: /* Integer 0 */ + case 9: { /* Integer 1 */ + /* EVIDENCE-OF: R-12976-22893 Value is the integer 0. */ + /* EVIDENCE-OF: R-18143-12121 Value is the integer 1. */ + pMem->u.i = serial_type-8; + pMem->flags = MEM_Int; + return; + } + default: { + /* EVIDENCE-OF: R-14606-31564 Value is a BLOB that is (N-12)/2 bytes in + ** length. + ** EVIDENCE-OF: R-28401-00140 Value is a string in the text encoding and + ** (N-13)/2 bytes in length. */ + static const u16 aFlag[] = { MEM_Blob|MEM_Ephem, MEM_Str|MEM_Ephem }; + pMem->z = (char *)buf; + pMem->n = (serial_type-12)/2; + pMem->flags = aFlag[serial_type&1]; + return; + } + } + return; +} +/* +** Allocate sufficient space for an UnpackedRecord structure large enough +** to hold a decoded index record for pKeyInfo. +** +** The space is allocated using sqlite3DbMallocRaw(). If an OOM error +** occurs, NULL is returned. +*/ +SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeAllocUnpackedRecord( + KeyInfo *pKeyInfo /* Description of the record */ +){ + UnpackedRecord *p; /* Unpacked record to return */ + u64 nByte; /* Number of bytes required for *p */ + assert( sizeof(UnpackedRecord) + sizeof(Mem)*65536 < 0x7fffffff ); + nByte = ROUND8P(sizeof(UnpackedRecord)) + sizeof(Mem)*(pKeyInfo->nKeyField+1); + p = (UnpackedRecord *)sqlite3DbMallocRaw(pKeyInfo->db, nByte); + if( !p ) return 0; + p->aMem = (Mem*)&((char*)p)[ROUND8P(sizeof(UnpackedRecord))]; + p->pKeyInfo = pKeyInfo; + p->nField = pKeyInfo->nKeyField + 1; + return p; +} + +/* +** Given the nKey-byte encoding of a record in pKey[], populate the +** UnpackedRecord structure indicated by the fourth argument with the +** contents of the decoded record. +*/ +SQLITE_PRIVATE void sqlite3VdbeRecordUnpack( + int nKey, /* Size of the binary record */ + const void *pKey, /* The binary record */ + UnpackedRecord *p /* Populate this structure before returning. */ +){ + const unsigned char *aKey = (const unsigned char *)pKey; + u32 d; + u32 idx; /* Offset in aKey[] to read from */ + u16 u; /* Unsigned loop counter */ + u32 szHdr; + Mem *pMem = p->aMem; + KeyInfo *pKeyInfo = p->pKeyInfo; + + p->default_rc = 0; + assert( EIGHT_BYTE_ALIGNMENT(pMem) ); + idx = getVarint32(aKey, szHdr); + d = szHdr; + u = 0; + while( idxenc = pKeyInfo->enc; + pMem->db = pKeyInfo->db; + /* pMem->flags = 0; // sqlite3VdbeSerialGet() will set this for us */ + pMem->szMalloc = 0; + pMem->z = 0; + sqlite3VdbeSerialGet(&aKey[d], serial_type, pMem); + d += sqlite3VdbeSerialTypeLen(serial_type); + if( (++u)>=p->nField ) break; + pMem++; + } + if( d>(u32)nKey && u ){ + assert( CORRUPT_DB ); + /* In a corrupt record entry, the last pMem might have been set up using + ** uninitialized memory. Overwrite its value with NULL, to prevent + ** warnings from MSAN. */ + sqlite3VdbeMemSetNull(pMem-(unField)); + } + testcase( u == pKeyInfo->nKeyField + 1 ); + testcase( u < pKeyInfo->nKeyField + 1 ); + assert( u<=pKeyInfo->nKeyField + 1 ); + p->nField = u; +} + +#ifdef SQLITE_DEBUG +/* +** This function compares two index or table record keys in the same way +** as the sqlite3VdbeRecordCompare() routine. Unlike VdbeRecordCompare(), +** this function deserializes and compares values using the +** sqlite3VdbeSerialGet() and sqlite3MemCompare() functions. It is used +** in assert() statements to ensure that the optimized code in +** sqlite3VdbeRecordCompare() returns results with these two primitives. +** +** Return true if the result of comparison is equivalent to desiredResult. +** Return false if there is a disagreement. +*/ +static int vdbeRecordCompareDebug( + int nKey1, const void *pKey1, /* Left key */ + const UnpackedRecord *pPKey2, /* Right key */ + int desiredResult /* Correct answer */ +){ + u32 d1; /* Offset into aKey[] of next data element */ + u32 idx1; /* Offset into aKey[] of next header element */ + u32 szHdr1; /* Number of bytes in header */ + int i = 0; + int rc = 0; + const unsigned char *aKey1 = (const unsigned char *)pKey1; + KeyInfo *pKeyInfo; + Mem mem1; + + pKeyInfo = pPKey2->pKeyInfo; + if( pKeyInfo->db==0 ) return 1; + mem1.enc = pKeyInfo->enc; + mem1.db = pKeyInfo->db; + /* mem1.flags = 0; // Will be initialized by sqlite3VdbeSerialGet() */ + VVA_ONLY( mem1.szMalloc = 0; ) /* Only needed by assert() statements */ + + /* Compilers may complain that mem1.u.i is potentially uninitialized. + ** We could initialize it, as shown here, to silence those complaints. + ** But in fact, mem1.u.i will never actually be used uninitialized, and doing + ** the unnecessary initialization has a measurable negative performance + ** impact, since this routine is a very high runner. And so, we choose + ** to ignore the compiler warnings and leave this variable uninitialized. + */ + /* mem1.u.i = 0; // not needed, here to silence compiler warning */ + + idx1 = getVarint32(aKey1, szHdr1); + if( szHdr1>98307 ) return SQLITE_CORRUPT; + d1 = szHdr1; + assert( pKeyInfo->nAllField>=pPKey2->nField || CORRUPT_DB ); + assert( pKeyInfo->aSortFlags!=0 ); + assert( pKeyInfo->nKeyField>0 ); + assert( idx1<=szHdr1 || CORRUPT_DB ); + do{ + u32 serial_type1; + + /* Read the serial types for the next element in each key. */ + idx1 += getVarint32( aKey1+idx1, serial_type1 ); + + /* Verify that there is enough key space remaining to avoid + ** a buffer overread. The "d1+serial_type1+2" subexpression will + ** always be greater than or equal to the amount of required key space. + ** Use that approximation to avoid the more expensive call to + ** sqlite3VdbeSerialTypeLen() in the common case. + */ + if( d1+(u64)serial_type1+2>(u64)nKey1 + && d1+(u64)sqlite3VdbeSerialTypeLen(serial_type1)>(u64)nKey1 + ){ + if( serial_type1>=1 + && serial_type1<=7 + && d1+(u64)sqlite3VdbeSerialTypeLen(serial_type1)<=(u64)nKey1+8 + && CORRUPT_DB + ){ + return 1; /* corrupt record not detected by + ** sqlite3VdbeRecordCompareWithSkip(). Return true + ** to avoid firing the assert() */ + } + break; + } + + /* Extract the values to be compared. + */ + sqlite3VdbeSerialGet(&aKey1[d1], serial_type1, &mem1); + d1 += sqlite3VdbeSerialTypeLen(serial_type1); + + /* Do the comparison + */ + rc = sqlite3MemCompare(&mem1, &pPKey2->aMem[i], + pKeyInfo->nAllField>i ? pKeyInfo->aColl[i] : 0); + if( rc!=0 ){ + assert( mem1.szMalloc==0 ); /* See comment below */ + if( (pKeyInfo->aSortFlags[i] & KEYINFO_ORDER_BIGNULL) + && ((mem1.flags & MEM_Null) || (pPKey2->aMem[i].flags & MEM_Null)) + ){ + rc = -rc; + } + if( pKeyInfo->aSortFlags[i] & KEYINFO_ORDER_DESC ){ + rc = -rc; /* Invert the result for DESC sort order. */ + } + goto debugCompareEnd; + } + i++; + }while( idx1nField ); + + /* No memory allocation is ever used on mem1. Prove this using + ** the following assert(). If the assert() fails, it indicates a + ** memory leak and a need to call sqlite3VdbeMemRelease(&mem1). + */ + assert( mem1.szMalloc==0 ); + + /* rc==0 here means that one of the keys ran out of fields and + ** all the fields up to that point were equal. Return the default_rc + ** value. */ + rc = pPKey2->default_rc; + +debugCompareEnd: + if( desiredResult==0 && rc==0 ) return 1; + if( desiredResult<0 && rc<0 ) return 1; + if( desiredResult>0 && rc>0 ) return 1; + if( CORRUPT_DB ) return 1; + if( pKeyInfo->db->mallocFailed ) return 1; + return 0; +} +#endif + +#ifdef SQLITE_DEBUG +/* +** Count the number of fields (a.k.a. columns) in the record given by +** pKey,nKey. The verify that this count is less than or equal to the +** limit given by pKeyInfo->nAllField. +** +** If this constraint is not satisfied, it means that the high-speed +** vdbeRecordCompareInt() and vdbeRecordCompareString() routines will +** not work correctly. If this assert() ever fires, it probably means +** that the KeyInfo.nKeyField or KeyInfo.nAllField values were computed +** incorrectly. +*/ +static void vdbeAssertFieldCountWithinLimits( + int nKey, const void *pKey, /* The record to verify */ + const KeyInfo *pKeyInfo /* Compare size with this KeyInfo */ +){ + int nField = 0; + u32 szHdr; + u32 idx; + u32 notUsed; + const unsigned char *aKey = (const unsigned char*)pKey; + + if( CORRUPT_DB ) return; + idx = getVarint32(aKey, szHdr); + assert( nKey>=0 ); + assert( szHdr<=(u32)nKey ); + while( idxnAllField ); +} +#else +# define vdbeAssertFieldCountWithinLimits(A,B,C) +#endif + +/* +** Both *pMem1 and *pMem2 contain string values. Compare the two values +** using the collation sequence pColl. As usual, return a negative , zero +** or positive value if *pMem1 is less than, equal to or greater than +** *pMem2, respectively. Similar in spirit to "rc = (*pMem1) - (*pMem2);". +*/ +static SQLITE_NOINLINE int vdbeCompareMemStringWithEncodingChange( + const Mem *pMem1, + const Mem *pMem2, + const CollSeq *pColl, + u8 *prcErr /* If an OOM occurs, set to SQLITE_NOMEM */ +){ + int rc; + const void *v1, *v2; + Mem c1; + Mem c2; + sqlite3VdbeMemInit(&c1, pMem1->db, MEM_Null); + sqlite3VdbeMemInit(&c2, pMem1->db, MEM_Null); + sqlite3VdbeMemShallowCopy(&c1, pMem1, MEM_Ephem); + sqlite3VdbeMemShallowCopy(&c2, pMem2, MEM_Ephem); + v1 = sqlite3ValueText((sqlite3_value*)&c1, pColl->enc); + v2 = sqlite3ValueText((sqlite3_value*)&c2, pColl->enc); + if( (v1==0 || v2==0) ){ + if( prcErr ) *prcErr = SQLITE_NOMEM_BKPT; + rc = 0; + }else{ + rc = pColl->xCmp(pColl->pUser, c1.n, v1, c2.n, v2); + } + sqlite3VdbeMemReleaseMalloc(&c1); + sqlite3VdbeMemReleaseMalloc(&c2); + return rc; +} +static int vdbeCompareMemString( + const Mem *pMem1, + const Mem *pMem2, + const CollSeq *pColl, + u8 *prcErr /* If an OOM occurs, set to SQLITE_NOMEM */ +){ + if( pMem1->enc==pColl->enc ){ + /* The strings are already in the correct encoding. Call the + ** comparison function directly */ + return pColl->xCmp(pColl->pUser,pMem1->n,pMem1->z,pMem2->n,pMem2->z); + }else{ + return vdbeCompareMemStringWithEncodingChange(pMem1,pMem2,pColl,prcErr); + } +} + +/* +** The input pBlob is guaranteed to be a Blob that is not marked +** with MEM_Zero. Return true if it could be a zero-blob. +*/ +static int isAllZero(const char *z, int n){ + int i; + for(i=0; in; + int n2 = pB2->n; + + /* It is possible to have a Blob value that has some non-zero content + ** followed by zero content. But that only comes up for Blobs formed + ** by the OP_MakeRecord opcode, and such Blobs never get passed into + ** sqlite3MemCompare(). */ + assert( (pB1->flags & MEM_Zero)==0 || n1==0 ); + assert( (pB2->flags & MEM_Zero)==0 || n2==0 ); + + if( (pB1->flags|pB2->flags) & MEM_Zero ){ + if( pB1->flags & pB2->flags & MEM_Zero ){ + return pB1->u.nZero - pB2->u.nZero; + }else if( pB1->flags & MEM_Zero ){ + if( !isAllZero(pB2->z, pB2->n) ) return -1; + return pB1->u.nZero - n2; + }else{ + if( !isAllZero(pB1->z, pB1->n) ) return +1; + return n1 - pB2->u.nZero; + } + } + c = memcmp(pB1->z, pB2->z, n1>n2 ? n2 : n1); + if( c ) return c; + return n1 - n2; +} + +/* The following two functions are used only within testcase() to prove +** test coverage. These functions do no exist for production builds. +** We must use separate SQLITE_NOINLINE functions here, since otherwise +** optimizer code movement causes gcov to become very confused. +*/ +#if defined(SQLITE_COVERAGE_TEST) || defined(SQLITE_DEBUG) +static int SQLITE_NOINLINE doubleLt(double a, double b){ return a=9223372036854775808.0 ) return -1; + y = (i64)r; + if( iy ) return +1; + testcase( doubleLt(((double)i),r) ); + testcase( doubleLt(r,((double)i)) ); + testcase( doubleEq(r,((double)i)) ); + return (((double)i)r); + } +} + +/* +** Compare the values contained by the two memory cells, returning +** negative, zero or positive if pMem1 is less than, equal to, or greater +** than pMem2. Sorting order is NULL's first, followed by numbers (integers +** and reals) sorted numerically, followed by text ordered by the collating +** sequence pColl and finally blob's ordered by memcmp(). +** +** Two NULL values are considered equal by this function. +*/ +SQLITE_PRIVATE int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){ + int f1, f2; + int combined_flags; + + f1 = pMem1->flags; + f2 = pMem2->flags; + combined_flags = f1|f2; + assert( !sqlite3VdbeMemIsRowSet(pMem1) && !sqlite3VdbeMemIsRowSet(pMem2) ); + + /* If one value is NULL, it is less than the other. If both values + ** are NULL, return 0. + */ + if( combined_flags&MEM_Null ){ + return (f2&MEM_Null) - (f1&MEM_Null); + } + + /* At least one of the two values is a number + */ + if( combined_flags&(MEM_Int|MEM_Real|MEM_IntReal) ){ + testcase( combined_flags & MEM_Int ); + testcase( combined_flags & MEM_Real ); + testcase( combined_flags & MEM_IntReal ); + if( (f1 & f2 & (MEM_Int|MEM_IntReal))!=0 ){ + testcase( f1 & f2 & MEM_Int ); + testcase( f1 & f2 & MEM_IntReal ); + if( pMem1->u.i < pMem2->u.i ) return -1; + if( pMem1->u.i > pMem2->u.i ) return +1; + return 0; + } + if( (f1 & f2 & MEM_Real)!=0 ){ + if( pMem1->u.r < pMem2->u.r ) return -1; + if( pMem1->u.r > pMem2->u.r ) return +1; + return 0; + } + if( (f1&(MEM_Int|MEM_IntReal))!=0 ){ + testcase( f1 & MEM_Int ); + testcase( f1 & MEM_IntReal ); + if( (f2&MEM_Real)!=0 ){ + return sqlite3IntFloatCompare(pMem1->u.i, pMem2->u.r); + }else if( (f2&(MEM_Int|MEM_IntReal))!=0 ){ + if( pMem1->u.i < pMem2->u.i ) return -1; + if( pMem1->u.i > pMem2->u.i ) return +1; + return 0; + }else{ + return -1; + } + } + if( (f1&MEM_Real)!=0 ){ + if( (f2&(MEM_Int|MEM_IntReal))!=0 ){ + testcase( f2 & MEM_Int ); + testcase( f2 & MEM_IntReal ); + return -sqlite3IntFloatCompare(pMem2->u.i, pMem1->u.r); + }else{ + return -1; + } + } + return +1; + } + + /* If one value is a string and the other is a blob, the string is less. + ** If both are strings, compare using the collating functions. + */ + if( combined_flags&MEM_Str ){ + if( (f1 & MEM_Str)==0 ){ + return 1; + } + if( (f2 & MEM_Str)==0 ){ + return -1; + } + + assert( pMem1->enc==pMem2->enc || pMem1->db->mallocFailed ); + assert( pMem1->enc==SQLITE_UTF8 || + pMem1->enc==SQLITE_UTF16LE || pMem1->enc==SQLITE_UTF16BE ); + + /* The collation sequence must be defined at this point, even if + ** the user deletes the collation sequence after the vdbe program is + ** compiled (this was not always the case). + */ + assert( !pColl || pColl->xCmp ); + + if( pColl ){ + return vdbeCompareMemString(pMem1, pMem2, pColl, 0); + } + /* If a NULL pointer was passed as the collate function, fall through + ** to the blob case and use memcmp(). */ + } + + /* Both values must be blobs. Compare using memcmp(). */ + return sqlite3BlobCompare(pMem1, pMem2); +} + + +/* +** The first argument passed to this function is a serial-type that +** corresponds to an integer - all values between 1 and 9 inclusive +** except 7. The second points to a buffer containing an integer value +** serialized according to serial_type. This function deserializes +** and returns the value. +*/ +static i64 vdbeRecordDecodeInt(u32 serial_type, const u8 *aKey){ + u32 y; + assert( CORRUPT_DB || (serial_type>=1 && serial_type<=9 && serial_type!=7) ); + switch( serial_type ){ + case 0: + case 1: + testcase( aKey[0]&0x80 ); + return ONE_BYTE_INT(aKey); + case 2: + testcase( aKey[0]&0x80 ); + return TWO_BYTE_INT(aKey); + case 3: + testcase( aKey[0]&0x80 ); + return THREE_BYTE_INT(aKey); + case 4: { + testcase( aKey[0]&0x80 ); + y = FOUR_BYTE_UINT(aKey); + return (i64)*(int*)&y; + } + case 5: { + testcase( aKey[0]&0x80 ); + return FOUR_BYTE_UINT(aKey+2) + (((i64)1)<<32)*TWO_BYTE_INT(aKey); + } + case 6: { + u64 x = FOUR_BYTE_UINT(aKey); + testcase( aKey[0]&0x80 ); + x = (x<<32) | FOUR_BYTE_UINT(aKey+4); + return (i64)*(i64*)&x; + } + } + + return (serial_type - 8); +} + +/* +** This function compares the two table rows or index records +** specified by {nKey1, pKey1} and pPKey2. It returns a negative, zero +** or positive integer if key1 is less than, equal to or +** greater than key2. The {nKey1, pKey1} key must be a blob +** created by the OP_MakeRecord opcode of the VDBE. The pPKey2 +** key must be a parsed key such as obtained from +** sqlite3VdbeParseRecord. +** +** If argument bSkip is non-zero, it is assumed that the caller has already +** determined that the first fields of the keys are equal. +** +** Key1 and Key2 do not have to contain the same number of fields. If all +** fields that appear in both keys are equal, then pPKey2->default_rc is +** returned. +** +** If database corruption is discovered, set pPKey2->errCode to +** SQLITE_CORRUPT and return 0. If an OOM error is encountered, +** pPKey2->errCode is set to SQLITE_NOMEM and, if it is not NULL, the +** malloc-failed flag set on database handle (pPKey2->pKeyInfo->db). +*/ +SQLITE_PRIVATE int sqlite3VdbeRecordCompareWithSkip( + int nKey1, const void *pKey1, /* Left key */ + UnpackedRecord *pPKey2, /* Right key */ + int bSkip /* If true, skip the first field */ +){ + u32 d1; /* Offset into aKey[] of next data element */ + int i; /* Index of next field to compare */ + u32 szHdr1; /* Size of record header in bytes */ + u32 idx1; /* Offset of first type in header */ + int rc = 0; /* Return value */ + Mem *pRhs = pPKey2->aMem; /* Next field of pPKey2 to compare */ + KeyInfo *pKeyInfo; + const unsigned char *aKey1 = (const unsigned char *)pKey1; + Mem mem1; + + /* If bSkip is true, then the caller has already determined that the first + ** two elements in the keys are equal. Fix the various stack variables so + ** that this routine begins comparing at the second field. */ + if( bSkip ){ + u32 s1 = aKey1[1]; + if( s1<0x80 ){ + idx1 = 2; + }else{ + idx1 = 1 + sqlite3GetVarint32(&aKey1[1], &s1); + } + szHdr1 = aKey1[0]; + d1 = szHdr1 + sqlite3VdbeSerialTypeLen(s1); + i = 1; + pRhs++; + }else{ + if( (szHdr1 = aKey1[0])<0x80 ){ + idx1 = 1; + }else{ + idx1 = sqlite3GetVarint32(aKey1, &szHdr1); + } + d1 = szHdr1; + i = 0; + } + if( d1>(unsigned)nKey1 ){ + pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT; + return 0; /* Corruption */ + } + + VVA_ONLY( mem1.szMalloc = 0; ) /* Only needed by assert() statements */ + assert( pPKey2->pKeyInfo->nAllField>=pPKey2->nField + || CORRUPT_DB ); + assert( pPKey2->pKeyInfo->aSortFlags!=0 ); + assert( pPKey2->pKeyInfo->nKeyField>0 ); + assert( idx1<=szHdr1 || CORRUPT_DB ); + while( 1 /*exit-by-break*/ ){ + u32 serial_type; + + /* RHS is an integer */ + if( pRhs->flags & (MEM_Int|MEM_IntReal) ){ + testcase( pRhs->flags & MEM_Int ); + testcase( pRhs->flags & MEM_IntReal ); + serial_type = aKey1[idx1]; + testcase( serial_type==12 ); + if( serial_type>=10 ){ + rc = serial_type==10 ? -1 : +1; + }else if( serial_type==0 ){ + rc = -1; + }else if( serial_type==7 ){ + serialGet7(&aKey1[d1], &mem1); + rc = -sqlite3IntFloatCompare(pRhs->u.i, mem1.u.r); + }else{ + i64 lhs = vdbeRecordDecodeInt(serial_type, &aKey1[d1]); + i64 rhs = pRhs->u.i; + if( lhsrhs ){ + rc = +1; + } + } + } + + /* RHS is real */ + else if( pRhs->flags & MEM_Real ){ + serial_type = aKey1[idx1]; + if( serial_type>=10 ){ + /* Serial types 12 or greater are strings and blobs (greater than + ** numbers). Types 10 and 11 are currently "reserved for future + ** use", so it doesn't really matter what the results of comparing + ** them to numeric values are. */ + rc = serial_type==10 ? -1 : +1; + }else if( serial_type==0 ){ + rc = -1; + }else{ + if( serial_type==7 ){ + if( serialGet7(&aKey1[d1], &mem1) ){ + rc = -1; /* mem1 is a NaN */ + }else if( mem1.u.ru.r ){ + rc = -1; + }else if( mem1.u.r>pRhs->u.r ){ + rc = +1; + }else{ + assert( rc==0 ); + } + }else{ + sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1); + rc = sqlite3IntFloatCompare(mem1.u.i, pRhs->u.r); + } + } + } + + /* RHS is a string */ + else if( pRhs->flags & MEM_Str ){ + getVarint32NR(&aKey1[idx1], serial_type); + testcase( serial_type==12 ); + if( serial_type<12 ){ + rc = -1; + }else if( !(serial_type & 0x01) ){ + rc = +1; + }else{ + mem1.n = (serial_type - 12) / 2; + testcase( (d1+mem1.n)==(unsigned)nKey1 ); + testcase( (d1+mem1.n+1)==(unsigned)nKey1 ); + if( (d1+mem1.n) > (unsigned)nKey1 + || (pKeyInfo = pPKey2->pKeyInfo)->nAllField<=i + ){ + pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT; + return 0; /* Corruption */ + }else if( pKeyInfo->aColl[i] ){ + mem1.enc = pKeyInfo->enc; + mem1.db = pKeyInfo->db; + mem1.flags = MEM_Str; + mem1.z = (char*)&aKey1[d1]; + rc = vdbeCompareMemString( + &mem1, pRhs, pKeyInfo->aColl[i], &pPKey2->errCode + ); + }else{ + int nCmp = MIN(mem1.n, pRhs->n); + rc = memcmp(&aKey1[d1], pRhs->z, nCmp); + if( rc==0 ) rc = mem1.n - pRhs->n; + } + } + } + + /* RHS is a blob */ + else if( pRhs->flags & MEM_Blob ){ + assert( (pRhs->flags & MEM_Zero)==0 || pRhs->n==0 ); + getVarint32NR(&aKey1[idx1], serial_type); + testcase( serial_type==12 ); + if( serial_type<12 || (serial_type & 0x01) ){ + rc = -1; + }else{ + int nStr = (serial_type - 12) / 2; + testcase( (d1+nStr)==(unsigned)nKey1 ); + testcase( (d1+nStr+1)==(unsigned)nKey1 ); + if( (d1+nStr) > (unsigned)nKey1 ){ + pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT; + return 0; /* Corruption */ + }else if( pRhs->flags & MEM_Zero ){ + if( !isAllZero((const char*)&aKey1[d1],nStr) ){ + rc = 1; + }else{ + rc = nStr - pRhs->u.nZero; + } + }else{ + int nCmp = MIN(nStr, pRhs->n); + rc = memcmp(&aKey1[d1], pRhs->z, nCmp); + if( rc==0 ) rc = nStr - pRhs->n; + } + } + } + + /* RHS is null */ + else{ + serial_type = aKey1[idx1]; + if( serial_type==0 + || serial_type==10 + || (serial_type==7 && serialGet7(&aKey1[d1], &mem1)!=0) + ){ + assert( rc==0 ); + }else{ + rc = 1; + } + } + + if( rc!=0 ){ + int sortFlags = pPKey2->pKeyInfo->aSortFlags[i]; + if( sortFlags ){ + if( (sortFlags & KEYINFO_ORDER_BIGNULL)==0 + || ((sortFlags & KEYINFO_ORDER_DESC) + !=(serial_type==0 || (pRhs->flags&MEM_Null))) + ){ + rc = -rc; + } + } + assert( vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, rc) ); + assert( mem1.szMalloc==0 ); /* See comment below */ + return rc; + } + + i++; + if( i==pPKey2->nField ) break; + pRhs++; + d1 += sqlite3VdbeSerialTypeLen(serial_type); + if( d1>(unsigned)nKey1 ) break; + idx1 += sqlite3VarintLen(serial_type); + if( idx1>=(unsigned)szHdr1 ){ + pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT; + return 0; /* Corrupt index */ + } + } + + /* No memory allocation is ever used on mem1. Prove this using + ** the following assert(). If the assert() fails, it indicates a + ** memory leak and a need to call sqlite3VdbeMemRelease(&mem1). */ + assert( mem1.szMalloc==0 ); + + /* rc==0 here means that one or both of the keys ran out of fields and + ** all the fields up to that point were equal. Return the default_rc + ** value. */ + assert( CORRUPT_DB + || vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, pPKey2->default_rc) + || pPKey2->pKeyInfo->db->mallocFailed + ); + pPKey2->eqSeen = 1; + return pPKey2->default_rc; +} +SQLITE_PRIVATE int sqlite3VdbeRecordCompare( + int nKey1, const void *pKey1, /* Left key */ + UnpackedRecord *pPKey2 /* Right key */ +){ + return sqlite3VdbeRecordCompareWithSkip(nKey1, pKey1, pPKey2, 0); +} + + +/* +** This function is an optimized version of sqlite3VdbeRecordCompare() +** that (a) the first field of pPKey2 is an integer, and (b) the +** size-of-header varint at the start of (pKey1/nKey1) fits in a single +** byte (i.e. is less than 128). +** +** To avoid concerns about buffer overreads, this routine is only used +** on schemas where the maximum valid header size is 63 bytes or less. +*/ +static int vdbeRecordCompareInt( + int nKey1, const void *pKey1, /* Left key */ + UnpackedRecord *pPKey2 /* Right key */ +){ + const u8 *aKey = &((const u8*)pKey1)[*(const u8*)pKey1 & 0x3F]; + int serial_type = ((const u8*)pKey1)[1]; + int res; + u32 y; + u64 x; + i64 v; + i64 lhs; + + vdbeAssertFieldCountWithinLimits(nKey1, pKey1, pPKey2->pKeyInfo); + assert( (*(u8*)pKey1)<=0x3F || CORRUPT_DB ); + switch( serial_type ){ + case 1: { /* 1-byte signed integer */ + lhs = ONE_BYTE_INT(aKey); + testcase( lhs<0 ); + break; + } + case 2: { /* 2-byte signed integer */ + lhs = TWO_BYTE_INT(aKey); + testcase( lhs<0 ); + break; + } + case 3: { /* 3-byte signed integer */ + lhs = THREE_BYTE_INT(aKey); + testcase( lhs<0 ); + break; + } + case 4: { /* 4-byte signed integer */ + y = FOUR_BYTE_UINT(aKey); + lhs = (i64)*(int*)&y; + testcase( lhs<0 ); + break; + } + case 5: { /* 6-byte signed integer */ + lhs = FOUR_BYTE_UINT(aKey+2) + (((i64)1)<<32)*TWO_BYTE_INT(aKey); + testcase( lhs<0 ); + break; + } + case 6: { /* 8-byte signed integer */ + x = FOUR_BYTE_UINT(aKey); + x = (x<<32) | FOUR_BYTE_UINT(aKey+4); + lhs = *(i64*)&x; + testcase( lhs<0 ); + break; + } + case 8: + lhs = 0; + break; + case 9: + lhs = 1; + break; + + /* This case could be removed without changing the results of running + ** this code. Including it causes gcc to generate a faster switch + ** statement (since the range of switch targets now starts at zero and + ** is contiguous) but does not cause any duplicate code to be generated + ** (as gcc is clever enough to combine the two like cases). Other + ** compilers might be similar. */ + case 0: case 7: + return sqlite3VdbeRecordCompare(nKey1, pKey1, pPKey2); + + default: + return sqlite3VdbeRecordCompare(nKey1, pKey1, pPKey2); + } + + assert( pPKey2->u.i == pPKey2->aMem[0].u.i ); + v = pPKey2->u.i; + if( v>lhs ){ + res = pPKey2->r1; + }else if( vr2; + }else if( pPKey2->nField>1 ){ + /* The first fields of the two keys are equal. Compare the trailing + ** fields. */ + res = sqlite3VdbeRecordCompareWithSkip(nKey1, pKey1, pPKey2, 1); + }else{ + /* The first fields of the two keys are equal and there are no trailing + ** fields. Return pPKey2->default_rc in this case. */ + res = pPKey2->default_rc; + pPKey2->eqSeen = 1; + } + + assert( vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, res) ); + return res; +} + +/* +** This function is an optimized version of sqlite3VdbeRecordCompare() +** that (a) the first field of pPKey2 is a string, that (b) the first field +** uses the collation sequence BINARY and (c) that the size-of-header varint +** at the start of (pKey1/nKey1) fits in a single byte. +*/ +static int vdbeRecordCompareString( + int nKey1, const void *pKey1, /* Left key */ + UnpackedRecord *pPKey2 /* Right key */ +){ + const u8 *aKey1 = (const u8*)pKey1; + int serial_type; + int res; + + assert( pPKey2->aMem[0].flags & MEM_Str ); + assert( pPKey2->aMem[0].n == pPKey2->n ); + assert( pPKey2->aMem[0].z == pPKey2->u.z ); + vdbeAssertFieldCountWithinLimits(nKey1, pKey1, pPKey2->pKeyInfo); + serial_type = (signed char)(aKey1[1]); + +vrcs_restart: + if( serial_type<12 ){ + if( serial_type<0 ){ + sqlite3GetVarint32(&aKey1[1], (u32*)&serial_type); + if( serial_type>=12 ) goto vrcs_restart; + assert( CORRUPT_DB ); + } + res = pPKey2->r1; /* (pKey1/nKey1) is a number or a null */ + }else if( !(serial_type & 0x01) ){ + res = pPKey2->r2; /* (pKey1/nKey1) is a blob */ + }else{ + int nCmp; + int nStr; + int szHdr = aKey1[0]; + + nStr = (serial_type-12) / 2; + if( (szHdr + nStr) > nKey1 ){ + pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT; + return 0; /* Corruption */ + } + nCmp = MIN( pPKey2->n, nStr ); + res = memcmp(&aKey1[szHdr], pPKey2->u.z, nCmp); + + if( res>0 ){ + res = pPKey2->r2; + }else if( res<0 ){ + res = pPKey2->r1; + }else{ + res = nStr - pPKey2->n; + if( res==0 ){ + if( pPKey2->nField>1 ){ + res = sqlite3VdbeRecordCompareWithSkip(nKey1, pKey1, pPKey2, 1); + }else{ + res = pPKey2->default_rc; + pPKey2->eqSeen = 1; + } + }else if( res>0 ){ + res = pPKey2->r2; + }else{ + res = pPKey2->r1; + } + } + } + + assert( vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, res) + || CORRUPT_DB + || pPKey2->pKeyInfo->db->mallocFailed + ); + return res; +} + +/* +** Return a pointer to an sqlite3VdbeRecordCompare() compatible function +** suitable for comparing serialized records to the unpacked record passed +** as the only argument. +*/ +SQLITE_PRIVATE RecordCompare sqlite3VdbeFindCompare(UnpackedRecord *p){ + /* varintRecordCompareInt() and varintRecordCompareString() both assume + ** that the size-of-header varint that occurs at the start of each record + ** fits in a single byte (i.e. is 127 or less). varintRecordCompareInt() + ** also assumes that it is safe to overread a buffer by at least the + ** maximum possible legal header size plus 8 bytes. Because there is + ** guaranteed to be at least 74 (but not 136) bytes of padding following each + ** buffer passed to varintRecordCompareInt() this makes it convenient to + ** limit the size of the header to 64 bytes in cases where the first field + ** is an integer. + ** + ** The easiest way to enforce this limit is to consider only records with + ** 13 fields or less. If the first field is an integer, the maximum legal + ** header size is (12*5 + 1 + 1) bytes. */ + assert( p->pKeyInfo->aSortFlags!=0 ); + if( p->pKeyInfo->nAllField<=13 ){ + int flags = p->aMem[0].flags; + if( p->pKeyInfo->aSortFlags[0] ){ + if( p->pKeyInfo->aSortFlags[0] & KEYINFO_ORDER_BIGNULL ){ + return sqlite3VdbeRecordCompare; + } + p->r1 = 1; + p->r2 = -1; + }else{ + p->r1 = -1; + p->r2 = 1; + } + if( (flags & MEM_Int) ){ + p->u.i = p->aMem[0].u.i; + return vdbeRecordCompareInt; + } + testcase( flags & MEM_Real ); + testcase( flags & MEM_Null ); + testcase( flags & MEM_Blob ); + if( (flags & (MEM_Real|MEM_IntReal|MEM_Null|MEM_Blob))==0 + && p->pKeyInfo->aColl[0]==0 + ){ + assert( flags & MEM_Str ); + p->u.z = p->aMem[0].z; + p->n = p->aMem[0].n; + return vdbeRecordCompareString; + } + } + + return sqlite3VdbeRecordCompare; +} + +/* +** pCur points at an index entry created using the OP_MakeRecord opcode. +** Read the rowid (the last field in the record) and store it in *rowid. +** Return SQLITE_OK if everything works, or an error code otherwise. +** +** pCur might be pointing to text obtained from a corrupt database file. +** So the content cannot be trusted. Do appropriate checks on the content. +*/ +SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3 *db, BtCursor *pCur, i64 *rowid){ + i64 nCellKey = 0; + int rc; + u32 szHdr; /* Size of the header */ + u32 typeRowid; /* Serial type of the rowid */ + u32 lenRowid; /* Size of the rowid */ + Mem m, v; + + /* Get the size of the index entry. Only indices entries of less + ** than 2GiB are support - anything large must be database corruption. + ** Any corruption is detected in sqlite3BtreeParseCellPtr(), though, so + ** this code can safely assume that nCellKey is 32-bits + */ + assert( sqlite3BtreeCursorIsValid(pCur) ); + nCellKey = sqlite3BtreePayloadSize(pCur); + assert( (nCellKey & SQLITE_MAX_U32)==(u64)nCellKey ); + + /* Read in the complete content of the index entry */ + sqlite3VdbeMemInit(&m, db, 0); + rc = sqlite3VdbeMemFromBtreeZeroOffset(pCur, (u32)nCellKey, &m); + if( rc ){ + return rc; + } + + /* The index entry must begin with a header size */ + getVarint32NR((u8*)m.z, szHdr); + testcase( szHdr==3 ); + testcase( szHdr==(u32)m.n ); + testcase( szHdr>0x7fffffff ); + assert( m.n>=0 ); + if( unlikely(szHdr<3 || szHdr>(unsigned)m.n) ){ + goto idx_rowid_corruption; + } + + /* The last field of the index should be an integer - the ROWID. + ** Verify that the last entry really is an integer. */ + getVarint32NR((u8*)&m.z[szHdr-1], typeRowid); + testcase( typeRowid==1 ); + testcase( typeRowid==2 ); + testcase( typeRowid==3 ); + testcase( typeRowid==4 ); + testcase( typeRowid==5 ); + testcase( typeRowid==6 ); + testcase( typeRowid==8 ); + testcase( typeRowid==9 ); + if( unlikely(typeRowid<1 || typeRowid>9 || typeRowid==7) ){ + goto idx_rowid_corruption; + } + lenRowid = sqlite3SmallTypeSizes[typeRowid]; + testcase( (u32)m.n==szHdr+lenRowid ); + if( unlikely((u32)m.neCurType==CURTYPE_BTREE ); + pCur = pC->uc.pCursor; + assert( sqlite3BtreeCursorIsValid(pCur) ); + nCellKey = sqlite3BtreePayloadSize(pCur); + /* nCellKey will always be between 0 and 0xffffffff because of the way + ** that btreeParseCellPtr() and sqlite3GetVarint32() are implemented */ + if( nCellKey<=0 || nCellKey>0x7fffffff ){ + *res = 0; + return SQLITE_CORRUPT_BKPT; + } + sqlite3VdbeMemInit(&m, db, 0); + rc = sqlite3VdbeMemFromBtreeZeroOffset(pCur, (u32)nCellKey, &m); + if( rc ){ + return rc; + } + *res = sqlite3VdbeRecordCompareWithSkip(m.n, m.z, pUnpacked, 0); + sqlite3VdbeMemReleaseMalloc(&m); + return SQLITE_OK; +} + +/* +** This routine sets the value to be returned by subsequent calls to +** sqlite3_changes() on the database handle 'db'. +*/ +SQLITE_PRIVATE void sqlite3VdbeSetChanges(sqlite3 *db, i64 nChange){ + assert( sqlite3_mutex_held(db->mutex) ); + db->nChange = nChange; + db->nTotalChange += nChange; +} + +/* +** Set a flag in the vdbe to update the change counter when it is finalised +** or reset. +*/ +SQLITE_PRIVATE void sqlite3VdbeCountChanges(Vdbe *v){ + v->changeCntOn = 1; +} + +/* +** Mark every prepared statement associated with a database connection +** as expired. +** +** An expired statement means that recompilation of the statement is +** recommend. Statements expire when things happen that make their +** programs obsolete. Removing user-defined functions or collating +** sequences, or changing an authorization function are the types of +** things that make prepared statements obsolete. +** +** If iCode is 1, then expiration is advisory. The statement should +** be reprepared before being restarted, but if it is already running +** it is allowed to run to completion. +** +** Internally, this function just sets the Vdbe.expired flag on all +** prepared statements. The flag is set to 1 for an immediate expiration +** and set to 2 for an advisory expiration. +*/ +SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3 *db, int iCode){ + Vdbe *p; + for(p = db->pVdbe; p; p=p->pVNext){ + p->expired = iCode+1; + } +} + +/* +** Return the database associated with the Vdbe. +*/ +SQLITE_PRIVATE sqlite3 *sqlite3VdbeDb(Vdbe *v){ + return v->db; +} + +/* +** Return the SQLITE_PREPARE flags for a Vdbe. +*/ +SQLITE_PRIVATE u8 sqlite3VdbePrepareFlags(Vdbe *v){ + return v->prepFlags; +} + +/* +** Return a pointer to an sqlite3_value structure containing the value bound +** parameter iVar of VM v. Except, if the value is an SQL NULL, return +** 0 instead. Unless it is NULL, apply affinity aff (one of the SQLITE_AFF_* +** constants) to the value before returning it. +** +** The returned value must be freed by the caller using sqlite3ValueFree(). +*/ +SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetBoundValue(Vdbe *v, int iVar, u8 aff){ + assert( iVar>0 ); + if( v ){ + Mem *pMem = &v->aVar[iVar-1]; + assert( (v->db->flags & SQLITE_EnableQPSG)==0 + || (v->db->mDbFlags & DBFLAG_InternalFunc)!=0 ); + if( 0==(pMem->flags & MEM_Null) ){ + sqlite3_value *pRet = sqlite3ValueNew(v->db); + if( pRet ){ + sqlite3VdbeMemCopy((Mem *)pRet, pMem); + sqlite3ValueApplyAffinity(pRet, aff, SQLITE_UTF8); + } + return pRet; + } + } + return 0; +} + +/* +** Configure SQL variable iVar so that binding a new value to it signals +** to sqlite3_reoptimize() that re-preparing the statement may result +** in a better query plan. +*/ +SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe *v, int iVar){ + assert( iVar>0 ); + assert( (v->db->flags & SQLITE_EnableQPSG)==0 + || (v->db->mDbFlags & DBFLAG_InternalFunc)!=0 ); + if( iVar>=32 ){ + v->expmask |= 0x80000000; + }else{ + v->expmask |= ((u32)1 << (iVar-1)); + } +} + +#ifndef SQLITE_OMIT_DATETIME_FUNCS +/* +** Cause a function to throw an error if it was call from OP_PureFunc +** rather than OP_Function. +** +** OP_PureFunc means that the function must be deterministic, and should +** throw an error if it is given inputs that would make it non-deterministic. +** This routine is invoked by date/time functions that use non-deterministic +** features such as 'now'. +*/ +SQLITE_PRIVATE int sqlite3NotPureFunc(sqlite3_context *pCtx){ + const VdbeOp *pOp; +#ifdef SQLITE_ENABLE_STAT4 + if( pCtx->pVdbe==0 ) return 1; +#endif + pOp = pCtx->pVdbe->aOp + pCtx->iOp; + if( pOp->opcode==OP_PureFunc ){ + const char *zContext; + char *zMsg; + if( pOp->p5 & NC_IsCheck ){ + zContext = "a CHECK constraint"; + }else if( pOp->p5 & NC_GenCol ){ + zContext = "a generated column"; + }else{ + zContext = "an index"; + } + zMsg = sqlite3_mprintf("non-deterministic use of %s() in %s", + pCtx->pFunc->zName, zContext); + sqlite3_result_error(pCtx, zMsg, -1); + sqlite3_free(zMsg); + return 0; + } + return 1; +} +#endif /* SQLITE_OMIT_DATETIME_FUNCS */ + +#if defined(SQLITE_ENABLE_CURSOR_HINTS) && defined(SQLITE_DEBUG) +/* +** This Walker callback is used to help verify that calls to +** sqlite3BtreeCursorHint() with opcode BTREE_HINT_RANGE have +** byte-code register values correctly initialized. +*/ +SQLITE_PRIVATE int sqlite3CursorRangeHintExprCheck(Walker *pWalker, Expr *pExpr){ + if( pExpr->op==TK_REGISTER ){ + assert( (pWalker->u.aMem[pExpr->iTable].flags & MEM_Undefined)==0 ); + } + return WRC_Continue; +} +#endif /* SQLITE_ENABLE_CURSOR_HINTS && SQLITE_DEBUG */ + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* +** Transfer error message text from an sqlite3_vtab.zErrMsg (text stored +** in memory obtained from sqlite3_malloc) into a Vdbe.zErrMsg (text stored +** in memory obtained from sqlite3DbMalloc). +*/ +SQLITE_PRIVATE void sqlite3VtabImportErrmsg(Vdbe *p, sqlite3_vtab *pVtab){ + if( pVtab->zErrMsg ){ + sqlite3 *db = p->db; + sqlite3DbFree(db, p->zErrMsg); + p->zErrMsg = sqlite3DbStrDup(db, pVtab->zErrMsg); + sqlite3_free(pVtab->zErrMsg); + pVtab->zErrMsg = 0; + } +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + +/* +** If the second argument is not NULL, release any allocations associated +** with the memory cells in the p->aMem[] array. Also free the UnpackedRecord +** structure itself, using sqlite3DbFree(). +** +** This function is used to free UnpackedRecord structures allocated by +** the vdbeUnpackRecord() function found in vdbeapi.c. +*/ +static void vdbeFreeUnpacked(sqlite3 *db, int nField, UnpackedRecord *p){ + assert( db!=0 ); + if( p ){ + int i; + for(i=0; iaMem[i]; + if( pMem->zMalloc ) sqlite3VdbeMemReleaseMalloc(pMem); + } + sqlite3DbNNFreeNN(db, p); + } +} +#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ + +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK +/* +** Invoke the pre-update hook. If this is an UPDATE or DELETE pre-update call, +** then cursor passed as the second argument should point to the row about +** to be update or deleted. If the application calls sqlite3_preupdate_old(), +** the required value will be read from the row the cursor points to. +*/ +SQLITE_PRIVATE void sqlite3VdbePreUpdateHook( + Vdbe *v, /* Vdbe pre-update hook is invoked by */ + VdbeCursor *pCsr, /* Cursor to grab old.* values from */ + int op, /* SQLITE_INSERT, UPDATE or DELETE */ + const char *zDb, /* Database name */ + Table *pTab, /* Modified table */ + i64 iKey1, /* Initial key value */ + int iReg, /* Register for new.* record */ + int iBlobWrite +){ + sqlite3 *db = v->db; + i64 iKey2; + PreUpdate preupdate; + const char *zTbl = pTab->zName; +#ifdef SQLITE_DEBUG + int nRealCol; + if( pTab->tabFlags & TF_WithoutRowid ){ + nRealCol = sqlite3PrimaryKeyIndex(pTab)->nColumn; + }else if( pTab->tabFlags & TF_HasVirtual ){ + nRealCol = pTab->nNVCol; + }else{ + nRealCol = pTab->nCol; + } +#endif + + assert( db->pPreUpdate==0 ); + memset(&preupdate, 0, sizeof(PreUpdate)); + if( HasRowid(pTab)==0 ){ + iKey1 = iKey2 = 0; + preupdate.pPk = sqlite3PrimaryKeyIndex(pTab); + }else{ + if( op==SQLITE_UPDATE ){ + iKey2 = v->aMem[iReg].u.i; + }else{ + iKey2 = iKey1; + } + } + + assert( pCsr!=0 ); + assert( pCsr->eCurType==CURTYPE_BTREE ); + assert( pCsr->nField==nRealCol + || (pCsr->nField==nRealCol+1 && op==SQLITE_DELETE && iReg==-1) + ); + + preupdate.v = v; + preupdate.pCsr = pCsr; + preupdate.op = op; + preupdate.iNewReg = iReg; + preupdate.pKeyinfo = (KeyInfo*)&preupdate.uKey; + preupdate.pKeyinfo->db = db; + preupdate.pKeyinfo->enc = ENC(db); + preupdate.pKeyinfo->nKeyField = pTab->nCol; + preupdate.pKeyinfo->aSortFlags = 0; /* Indicate .aColl, .nAllField uninit */ + preupdate.iKey1 = iKey1; + preupdate.iKey2 = iKey2; + preupdate.pTab = pTab; + preupdate.iBlobWrite = iBlobWrite; + + db->pPreUpdate = &preupdate; + db->xPreUpdateCallback(db->pPreUpdateArg, db, op, zDb, zTbl, iKey1, iKey2); + db->pPreUpdate = 0; + sqlite3DbFree(db, preupdate.aRecord); + vdbeFreeUnpacked(db, preupdate.pKeyinfo->nKeyField+1,preupdate.pUnpacked); + vdbeFreeUnpacked(db, preupdate.pKeyinfo->nKeyField+1,preupdate.pNewUnpacked); + sqlite3VdbeMemRelease(&preupdate.oldipk); + if( preupdate.aNew ){ + int i; + for(i=0; inField; i++){ + sqlite3VdbeMemRelease(&preupdate.aNew[i]); + } + sqlite3DbNNFreeNN(db, preupdate.aNew); + } + if( preupdate.apDflt ){ + int i; + for(i=0; inCol; i++){ + sqlite3ValueFree(preupdate.apDflt[i]); + } + sqlite3DbFree(db, preupdate.apDflt); + } +} +#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ + +#ifdef SQLITE_ENABLE_PERCENTILE +/* +** Return the name of an SQL function associated with the sqlite3_context. +*/ +SQLITE_PRIVATE const char *sqlite3VdbeFuncName(const sqlite3_context *pCtx){ + assert( pCtx!=0 ); + assert( pCtx->pFunc!=0 ); + return pCtx->pFunc->zName; +} +#endif /* SQLITE_ENABLE_PERCENTILE */ + +/************** End of vdbeaux.c *********************************************/ +/************** Begin file vdbeapi.c *****************************************/ +/* +** 2004 May 26 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file contains code use to implement APIs that are part of the +** VDBE. +*/ +/* #include "sqliteInt.h" */ +/* #include "vdbeInt.h" */ +/* #include "opcodes.h" */ + +#ifndef SQLITE_OMIT_DEPRECATED +/* +** Return TRUE (non-zero) of the statement supplied as an argument needs +** to be recompiled. A statement needs to be recompiled whenever the +** execution environment changes in a way that would alter the program +** that sqlite3_prepare() generates. For example, if new functions or +** collating sequences are registered or if an authorizer function is +** added or changed. +*/ +SQLITE_API int sqlite3_expired(sqlite3_stmt *pStmt){ + Vdbe *p = (Vdbe*)pStmt; + return p==0 || p->expired; +} +#endif + +/* +** Check on a Vdbe to make sure it has not been finalized. Log +** an error and return true if it has been finalized (or is otherwise +** invalid). Return false if it is ok. +*/ +static int vdbeSafety(Vdbe *p){ + if( p->db==0 ){ + sqlite3_log(SQLITE_MISUSE, "API called with finalized prepared statement"); + return 1; + }else{ + return 0; + } +} +static int vdbeSafetyNotNull(Vdbe *p){ + if( p==0 ){ + sqlite3_log(SQLITE_MISUSE, "API called with NULL prepared statement"); + return 1; + }else{ + return vdbeSafety(p); + } +} + +#ifndef SQLITE_OMIT_TRACE +/* +** Invoke the profile callback. This routine is only called if we already +** know that the profile callback is defined and needs to be invoked. +*/ +static SQLITE_NOINLINE void invokeProfileCallback(sqlite3 *db, Vdbe *p){ + sqlite3_int64 iNow; + sqlite3_int64 iElapse; + assert( p->startTime>0 ); + assert( db->init.busy==0 ); + assert( p->zSql!=0 ); + sqlite3OsCurrentTimeInt64(db->pVfs, &iNow); + iElapse = (iNow - p->startTime)*1000000; +#ifndef SQLITE_OMIT_DEPRECATED + if( db->xProfile ){ + db->xProfile(db->pProfileArg, p->zSql, iElapse); + } +#endif + if( db->mTrace & SQLITE_TRACE_PROFILE ){ + db->trace.xV2(SQLITE_TRACE_PROFILE, db->pTraceArg, p, (void*)&iElapse); + } + p->startTime = 0; +} +/* +** The checkProfileCallback(DB,P) macro checks to see if a profile callback +** is needed, and it invokes the callback if it is needed. +*/ +# define checkProfileCallback(DB,P) \ + if( ((P)->startTime)>0 ){ invokeProfileCallback(DB,P); } +#else +# define checkProfileCallback(DB,P) /*no-op*/ +#endif + +/* +** The following routine destroys a virtual machine that is created by +** the sqlite3_compile() routine. The integer returned is an SQLITE_ +** success/failure code that describes the result of executing the virtual +** machine. +** +** This routine sets the error code and string returned by +** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). +*/ +SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt){ + int rc; + if( pStmt==0 ){ + /* IMPLEMENTATION-OF: R-57228-12904 Invoking sqlite3_finalize() on a NULL + ** pointer is a harmless no-op. */ + rc = SQLITE_OK; + }else{ + Vdbe *v = (Vdbe*)pStmt; + sqlite3 *db = v->db; + if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT; + sqlite3_mutex_enter(db->mutex); + checkProfileCallback(db, v); + assert( v->eVdbeState>=VDBE_READY_STATE ); + rc = sqlite3VdbeReset(v); + sqlite3VdbeDelete(v); + rc = sqlite3ApiExit(db, rc); + sqlite3LeaveMutexAndCloseZombie(db); + } + return rc; +} + +/* +** Terminate the current execution of an SQL statement and reset it +** back to its starting state so that it can be reused. A success code from +** the prior execution is returned. +** +** This routine sets the error code and string returned by +** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16(). +*/ +SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt){ + int rc; + if( pStmt==0 ){ + rc = SQLITE_OK; + }else{ + Vdbe *v = (Vdbe*)pStmt; + sqlite3 *db = v->db; + sqlite3_mutex_enter(db->mutex); + checkProfileCallback(db, v); + rc = sqlite3VdbeReset(v); + sqlite3VdbeRewind(v); + assert( (rc & (db->errMask))==rc ); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + } + return rc; +} + +/* +** Set all the parameters in the compiled SQL statement to NULL. +*/ +SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt *pStmt){ + int i; + int rc = SQLITE_OK; + Vdbe *p = (Vdbe*)pStmt; +#if SQLITE_THREADSAFE + sqlite3_mutex *mutex; +#endif +#ifdef SQLITE_ENABLE_API_ARMOR + if( pStmt==0 ){ + return SQLITE_MISUSE_BKPT; + } +#endif +#if SQLITE_THREADSAFE + mutex = p->db->mutex; +#endif + sqlite3_mutex_enter(mutex); + for(i=0; inVar; i++){ + sqlite3VdbeMemRelease(&p->aVar[i]); + p->aVar[i].flags = MEM_Null; + } + assert( (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 || p->expmask==0 ); + if( p->expmask ){ + p->expired = 1; + } + sqlite3_mutex_leave(mutex); + return rc; +} + + +/**************************** sqlite3_value_ ******************************* +** The following routines extract information from a Mem or sqlite3_value +** structure. +*/ +SQLITE_API const void *sqlite3_value_blob(sqlite3_value *pVal){ + Mem *p = (Mem*)pVal; + if( p->flags & (MEM_Blob|MEM_Str) ){ + if( ExpandBlob(p)!=SQLITE_OK ){ + assert( p->flags==MEM_Null && p->z==0 ); + return 0; + } + p->flags |= MEM_Blob; + return p->n ? p->z : 0; + }else{ + return sqlite3_value_text(pVal); + } +} +SQLITE_API int sqlite3_value_bytes(sqlite3_value *pVal){ + return sqlite3ValueBytes(pVal, SQLITE_UTF8); +} +SQLITE_API int sqlite3_value_bytes16(sqlite3_value *pVal){ + return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE); +} +SQLITE_API double sqlite3_value_double(sqlite3_value *pVal){ + return sqlite3VdbeRealValue((Mem*)pVal); +} +SQLITE_API int sqlite3_value_int(sqlite3_value *pVal){ + return (int)sqlite3VdbeIntValue((Mem*)pVal); +} +SQLITE_API sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){ + return sqlite3VdbeIntValue((Mem*)pVal); +} +SQLITE_API unsigned int sqlite3_value_subtype(sqlite3_value *pVal){ + Mem *pMem = (Mem*)pVal; + return ((pMem->flags & MEM_Subtype) ? pMem->eSubtype : 0); +} +SQLITE_API void *sqlite3_value_pointer(sqlite3_value *pVal, const char *zPType){ + Mem *p = (Mem*)pVal; + if( (p->flags&(MEM_TypeMask|MEM_Term|MEM_Subtype)) == + (MEM_Null|MEM_Term|MEM_Subtype) + && zPType!=0 + && p->eSubtype=='p' + && strcmp(p->u.zPType, zPType)==0 + ){ + return (void*)p->z; + }else{ + return 0; + } +} +SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value *pVal){ + return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8); +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API const void *sqlite3_value_text16(sqlite3_value* pVal){ + return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE); +} +SQLITE_API const void *sqlite3_value_text16be(sqlite3_value *pVal){ + return sqlite3ValueText(pVal, SQLITE_UTF16BE); +} +SQLITE_API const void *sqlite3_value_text16le(sqlite3_value *pVal){ + return sqlite3ValueText(pVal, SQLITE_UTF16LE); +} +#endif /* SQLITE_OMIT_UTF16 */ +/* EVIDENCE-OF: R-12793-43283 Every value in SQLite has one of five +** fundamental datatypes: 64-bit signed integer 64-bit IEEE floating +** point number string BLOB NULL +*/ +SQLITE_API int sqlite3_value_type(sqlite3_value* pVal){ + static const u8 aType[] = { + SQLITE_BLOB, /* 0x00 (not possible) */ + SQLITE_NULL, /* 0x01 NULL */ + SQLITE_TEXT, /* 0x02 TEXT */ + SQLITE_NULL, /* 0x03 (not possible) */ + SQLITE_INTEGER, /* 0x04 INTEGER */ + SQLITE_NULL, /* 0x05 (not possible) */ + SQLITE_INTEGER, /* 0x06 INTEGER + TEXT */ + SQLITE_NULL, /* 0x07 (not possible) */ + SQLITE_FLOAT, /* 0x08 FLOAT */ + SQLITE_NULL, /* 0x09 (not possible) */ + SQLITE_FLOAT, /* 0x0a FLOAT + TEXT */ + SQLITE_NULL, /* 0x0b (not possible) */ + SQLITE_INTEGER, /* 0x0c (not possible) */ + SQLITE_NULL, /* 0x0d (not possible) */ + SQLITE_INTEGER, /* 0x0e (not possible) */ + SQLITE_NULL, /* 0x0f (not possible) */ + SQLITE_BLOB, /* 0x10 BLOB */ + SQLITE_NULL, /* 0x11 (not possible) */ + SQLITE_TEXT, /* 0x12 (not possible) */ + SQLITE_NULL, /* 0x13 (not possible) */ + SQLITE_INTEGER, /* 0x14 INTEGER + BLOB */ + SQLITE_NULL, /* 0x15 (not possible) */ + SQLITE_INTEGER, /* 0x16 (not possible) */ + SQLITE_NULL, /* 0x17 (not possible) */ + SQLITE_FLOAT, /* 0x18 FLOAT + BLOB */ + SQLITE_NULL, /* 0x19 (not possible) */ + SQLITE_FLOAT, /* 0x1a (not possible) */ + SQLITE_NULL, /* 0x1b (not possible) */ + SQLITE_INTEGER, /* 0x1c (not possible) */ + SQLITE_NULL, /* 0x1d (not possible) */ + SQLITE_INTEGER, /* 0x1e (not possible) */ + SQLITE_NULL, /* 0x1f (not possible) */ + SQLITE_FLOAT, /* 0x20 INTREAL */ + SQLITE_NULL, /* 0x21 (not possible) */ + SQLITE_FLOAT, /* 0x22 INTREAL + TEXT */ + SQLITE_NULL, /* 0x23 (not possible) */ + SQLITE_FLOAT, /* 0x24 (not possible) */ + SQLITE_NULL, /* 0x25 (not possible) */ + SQLITE_FLOAT, /* 0x26 (not possible) */ + SQLITE_NULL, /* 0x27 (not possible) */ + SQLITE_FLOAT, /* 0x28 (not possible) */ + SQLITE_NULL, /* 0x29 (not possible) */ + SQLITE_FLOAT, /* 0x2a (not possible) */ + SQLITE_NULL, /* 0x2b (not possible) */ + SQLITE_FLOAT, /* 0x2c (not possible) */ + SQLITE_NULL, /* 0x2d (not possible) */ + SQLITE_FLOAT, /* 0x2e (not possible) */ + SQLITE_NULL, /* 0x2f (not possible) */ + SQLITE_BLOB, /* 0x30 (not possible) */ + SQLITE_NULL, /* 0x31 (not possible) */ + SQLITE_TEXT, /* 0x32 (not possible) */ + SQLITE_NULL, /* 0x33 (not possible) */ + SQLITE_FLOAT, /* 0x34 (not possible) */ + SQLITE_NULL, /* 0x35 (not possible) */ + SQLITE_FLOAT, /* 0x36 (not possible) */ + SQLITE_NULL, /* 0x37 (not possible) */ + SQLITE_FLOAT, /* 0x38 (not possible) */ + SQLITE_NULL, /* 0x39 (not possible) */ + SQLITE_FLOAT, /* 0x3a (not possible) */ + SQLITE_NULL, /* 0x3b (not possible) */ + SQLITE_FLOAT, /* 0x3c (not possible) */ + SQLITE_NULL, /* 0x3d (not possible) */ + SQLITE_FLOAT, /* 0x3e (not possible) */ + SQLITE_NULL, /* 0x3f (not possible) */ + }; +#ifdef SQLITE_DEBUG + { + int eType = SQLITE_BLOB; + if( pVal->flags & MEM_Null ){ + eType = SQLITE_NULL; + }else if( pVal->flags & (MEM_Real|MEM_IntReal) ){ + eType = SQLITE_FLOAT; + }else if( pVal->flags & MEM_Int ){ + eType = SQLITE_INTEGER; + }else if( pVal->flags & MEM_Str ){ + eType = SQLITE_TEXT; + } + assert( eType == aType[pVal->flags&MEM_AffMask] ); + } +#endif + return aType[pVal->flags&MEM_AffMask]; +} +SQLITE_API int sqlite3_value_encoding(sqlite3_value *pVal){ + return pVal->enc; +} + +/* Return true if a parameter to xUpdate represents an unchanged column */ +SQLITE_API int sqlite3_value_nochange(sqlite3_value *pVal){ + return (pVal->flags&(MEM_Null|MEM_Zero))==(MEM_Null|MEM_Zero); +} + +/* Return true if a parameter value originated from an sqlite3_bind() */ +SQLITE_API int sqlite3_value_frombind(sqlite3_value *pVal){ + return (pVal->flags&MEM_FromBind)!=0; +} + +/* Make a copy of an sqlite3_value object +*/ +SQLITE_API sqlite3_value *sqlite3_value_dup(const sqlite3_value *pOrig){ + sqlite3_value *pNew; + if( pOrig==0 ) return 0; + pNew = sqlite3_malloc( sizeof(*pNew) ); + if( pNew==0 ) return 0; + memset(pNew, 0, sizeof(*pNew)); + memcpy(pNew, pOrig, MEMCELLSIZE); + pNew->flags &= ~MEM_Dyn; + pNew->db = 0; + if( pNew->flags&(MEM_Str|MEM_Blob) ){ + pNew->flags &= ~(MEM_Static|MEM_Dyn); + pNew->flags |= MEM_Ephem; + if( sqlite3VdbeMemMakeWriteable(pNew)!=SQLITE_OK ){ + sqlite3ValueFree(pNew); + pNew = 0; + } + }else if( pNew->flags & MEM_Null ){ + /* Do not duplicate pointer values */ + pNew->flags &= ~(MEM_Term|MEM_Subtype); + } + return pNew; +} + +/* Destroy an sqlite3_value object previously obtained from +** sqlite3_value_dup(). +*/ +SQLITE_API void sqlite3_value_free(sqlite3_value *pOld){ + sqlite3ValueFree(pOld); +} + + +/**************************** sqlite3_result_ ******************************* +** The following routines are used by user-defined functions to specify +** the function result. +** +** The setStrOrError() function calls sqlite3VdbeMemSetStr() to store the +** result as a string or blob. Appropriate errors are set if the string/blob +** is too big or if an OOM occurs. +** +** The invokeValueDestructor(P,X) routine invokes destructor function X() +** on value P if P is not going to be used and need to be destroyed. +*/ +static void setResultStrOrError( + sqlite3_context *pCtx, /* Function context */ + const char *z, /* String pointer */ + int n, /* Bytes in string, or negative */ + u8 enc, /* Encoding of z. 0 for BLOBs */ + void (*xDel)(void*) /* Destructor function */ +){ + Mem *pOut = pCtx->pOut; + int rc = sqlite3VdbeMemSetStr(pOut, z, n, enc, xDel); + if( rc ){ + if( rc==SQLITE_TOOBIG ){ + sqlite3_result_error_toobig(pCtx); + }else{ + /* The only errors possible from sqlite3VdbeMemSetStr are + ** SQLITE_TOOBIG and SQLITE_NOMEM */ + assert( rc==SQLITE_NOMEM ); + sqlite3_result_error_nomem(pCtx); + } + return; + } + sqlite3VdbeChangeEncoding(pOut, pCtx->enc); + if( sqlite3VdbeMemTooBig(pOut) ){ + sqlite3_result_error_toobig(pCtx); + } +} +static int invokeValueDestructor( + const void *p, /* Value to destroy */ + void (*xDel)(void*), /* The destructor */ + sqlite3_context *pCtx /* Set a SQLITE_TOOBIG error if not NULL */ +){ + assert( xDel!=SQLITE_DYNAMIC ); + if( xDel==0 ){ + /* noop */ + }else if( xDel==SQLITE_TRANSIENT ){ + /* noop */ + }else{ + xDel((void*)p); + } +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx!=0 ){ + sqlite3_result_error_toobig(pCtx); + } +#else + assert( pCtx!=0 ); + sqlite3_result_error_toobig(pCtx); +#endif + return SQLITE_TOOBIG; +} +SQLITE_API void sqlite3_result_blob( + sqlite3_context *pCtx, + const void *z, + int n, + void (*xDel)(void *) +){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 || n<0 ){ + invokeValueDestructor(z, xDel, pCtx); + return; + } +#endif + assert( n>=0 ); + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); + setResultStrOrError(pCtx, z, n, 0, xDel); +} +SQLITE_API void sqlite3_result_blob64( + sqlite3_context *pCtx, + const void *z, + sqlite3_uint64 n, + void (*xDel)(void *) +){ + assert( xDel!=SQLITE_DYNAMIC ); +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ){ + invokeValueDestructor(z, xDel, 0); + return; + } +#endif + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); + if( n>0x7fffffff ){ + (void)invokeValueDestructor(z, xDel, pCtx); + }else{ + setResultStrOrError(pCtx, z, (int)n, 0, xDel); + } +} +SQLITE_API void sqlite3_result_double(sqlite3_context *pCtx, double rVal){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); + sqlite3VdbeMemSetDouble(pCtx->pOut, rVal); +} +SQLITE_API void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); + pCtx->isError = SQLITE_ERROR; + sqlite3VdbeMemSetStr(pCtx->pOut, z, n, SQLITE_UTF8, SQLITE_TRANSIENT); +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); + pCtx->isError = SQLITE_ERROR; + sqlite3VdbeMemSetStr(pCtx->pOut, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT); +} +#endif +SQLITE_API void sqlite3_result_int(sqlite3_context *pCtx, int iVal){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); + sqlite3VdbeMemSetInt64(pCtx->pOut, (i64)iVal); +} +SQLITE_API void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); + sqlite3VdbeMemSetInt64(pCtx->pOut, iVal); +} +SQLITE_API void sqlite3_result_null(sqlite3_context *pCtx){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); + sqlite3VdbeMemSetNull(pCtx->pOut); +} +SQLITE_API void sqlite3_result_pointer( + sqlite3_context *pCtx, + void *pPtr, + const char *zPType, + void (*xDestructor)(void*) +){ + Mem *pOut; +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ){ + invokeValueDestructor(pPtr, xDestructor, 0); + return; + } +#endif + pOut = pCtx->pOut; + assert( sqlite3_mutex_held(pOut->db->mutex) ); + sqlite3VdbeMemRelease(pOut); + pOut->flags = MEM_Null; + sqlite3VdbeMemSetPointer(pOut, pPtr, zPType, xDestructor); +} +SQLITE_API void sqlite3_result_subtype(sqlite3_context *pCtx, unsigned int eSubtype){ + Mem *pOut; +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif +#if defined(SQLITE_STRICT_SUBTYPE) && SQLITE_STRICT_SUBTYPE+0!=0 + if( pCtx->pFunc!=0 + && (pCtx->pFunc->funcFlags & SQLITE_RESULT_SUBTYPE)==0 + ){ + char zErr[200]; + sqlite3_snprintf(sizeof(zErr), zErr, + "misuse of sqlite3_result_subtype() by %s()", + pCtx->pFunc->zName); + sqlite3_result_error(pCtx, zErr, -1); + return; + } +#endif /* SQLITE_STRICT_SUBTYPE */ + pOut = pCtx->pOut; + assert( sqlite3_mutex_held(pOut->db->mutex) ); + pOut->eSubtype = eSubtype & 0xff; + pOut->flags |= MEM_Subtype; +} +SQLITE_API void sqlite3_result_text( + sqlite3_context *pCtx, + const char *z, + int n, + void (*xDel)(void *) +){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ){ + invokeValueDestructor(z, xDel, 0); + return; + } +#endif + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); + setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel); +} +SQLITE_API void sqlite3_result_text64( + sqlite3_context *pCtx, + const char *z, + sqlite3_uint64 n, + void (*xDel)(void *), + unsigned char enc +){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ){ + invokeValueDestructor(z, xDel, 0); + return; + } +#endif + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); + assert( xDel!=SQLITE_DYNAMIC ); + if( enc!=SQLITE_UTF8 ){ + if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE; + n &= ~(u64)1; + } + if( n>0x7fffffff ){ + (void)invokeValueDestructor(z, xDel, pCtx); + }else{ + setResultStrOrError(pCtx, z, (int)n, enc, xDel); + sqlite3VdbeMemZeroTerminateIfAble(pCtx->pOut); + } +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API void sqlite3_result_text16( + sqlite3_context *pCtx, + const void *z, + int n, + void (*xDel)(void *) +){ + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); + setResultStrOrError(pCtx, z, n & ~(u64)1, SQLITE_UTF16NATIVE, xDel); +} +SQLITE_API void sqlite3_result_text16be( + sqlite3_context *pCtx, + const void *z, + int n, + void (*xDel)(void *) +){ + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); + setResultStrOrError(pCtx, z, n & ~(u64)1, SQLITE_UTF16BE, xDel); +} +SQLITE_API void sqlite3_result_text16le( + sqlite3_context *pCtx, + const void *z, + int n, + void (*xDel)(void *) +){ + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); + setResultStrOrError(pCtx, z, n & ~(u64)1, SQLITE_UTF16LE, xDel); +} +#endif /* SQLITE_OMIT_UTF16 */ +SQLITE_API void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){ + Mem *pOut; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; + if( pValue==0 ){ + sqlite3_result_null(pCtx); + return; + } +#endif + pOut = pCtx->pOut; + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); + sqlite3VdbeMemCopy(pOut, pValue); + sqlite3VdbeChangeEncoding(pOut, pCtx->enc); + if( sqlite3VdbeMemTooBig(pOut) ){ + sqlite3_result_error_toobig(pCtx); + } +} +SQLITE_API void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){ + sqlite3_result_zeroblob64(pCtx, n>0 ? n : 0); +} +SQLITE_API int sqlite3_result_zeroblob64(sqlite3_context *pCtx, u64 n){ + Mem *pOut; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return SQLITE_MISUSE_BKPT; +#endif + pOut = pCtx->pOut; + assert( sqlite3_mutex_held(pOut->db->mutex) ); + if( n>(u64)pOut->db->aLimit[SQLITE_LIMIT_LENGTH] ){ + sqlite3_result_error_toobig(pCtx); + return SQLITE_TOOBIG; + } +#ifndef SQLITE_OMIT_INCRBLOB + sqlite3VdbeMemSetZeroBlob(pCtx->pOut, (int)n); + return SQLITE_OK; +#else + return sqlite3VdbeMemSetZeroBlob(pCtx->pOut, (int)n); +#endif +} +SQLITE_API void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif + pCtx->isError = errCode ? errCode : -1; +#ifdef SQLITE_DEBUG + if( pCtx->pVdbe ) pCtx->pVdbe->rcApp = errCode; +#endif + if( pCtx->pOut->flags & MEM_Null ){ + setResultStrOrError(pCtx, sqlite3ErrStr(errCode), -1, SQLITE_UTF8, + SQLITE_STATIC); + } +} + +/* Force an SQLITE_TOOBIG error. */ +SQLITE_API void sqlite3_result_error_toobig(sqlite3_context *pCtx){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); + pCtx->isError = SQLITE_TOOBIG; + sqlite3VdbeMemSetStr(pCtx->pOut, "string or blob too big", -1, + SQLITE_UTF8, SQLITE_STATIC); +} + +/* An SQLITE_NOMEM error. */ +SQLITE_API void sqlite3_result_error_nomem(sqlite3_context *pCtx){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); + sqlite3VdbeMemSetNull(pCtx->pOut); + pCtx->isError = SQLITE_NOMEM_BKPT; + sqlite3OomFault(pCtx->pOut->db); +} + +#ifndef SQLITE_UNTESTABLE +/* Force the INT64 value currently stored as the result to be +** a MEM_IntReal value. See the SQLITE_TESTCTRL_RESULT_INTREAL +** test-control. +*/ +SQLITE_PRIVATE void sqlite3ResultIntReal(sqlite3_context *pCtx){ + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); + if( pCtx->pOut->flags & MEM_Int ){ + pCtx->pOut->flags &= ~MEM_Int; + pCtx->pOut->flags |= MEM_IntReal; + } +} +#endif + + +/* +** This function is called after a transaction has been committed. It +** invokes callbacks registered with sqlite3_wal_hook() as required. +*/ +static int doWalCallbacks(sqlite3 *db){ + int rc = SQLITE_OK; +#ifndef SQLITE_OMIT_WAL + int i; + for(i=0; inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( pBt ){ + int nEntry; + sqlite3BtreeEnter(pBt); + nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt)); + sqlite3BtreeLeave(pBt); + if( nEntry>0 && db->xWalCallback && rc==SQLITE_OK ){ + rc = db->xWalCallback(db->pWalArg, db, db->aDb[i].zDbSName, nEntry); + } + } + } +#endif + return rc; +} + + +/* +** Execute the statement pStmt, either until a row of data is ready, the +** statement is completely executed or an error occurs. +** +** This routine implements the bulk of the logic behind the sqlite_step() +** API. The only thing omitted is the automatic recompile if a +** schema change has occurred. That detail is handled by the +** outer sqlite3_step() wrapper procedure. +*/ +static int sqlite3Step(Vdbe *p){ + sqlite3 *db; + int rc; + + assert(p); + db = p->db; + if( p->eVdbeState!=VDBE_RUN_STATE ){ + restart_step: + if( p->eVdbeState==VDBE_READY_STATE ){ + if( p->expired ){ + p->rc = SQLITE_SCHEMA; + rc = SQLITE_ERROR; + if( (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 ){ + /* If this statement was prepared using saved SQL and an + ** error has occurred, then return the error code in p->rc to the + ** caller. Set the error code in the database handle to the same + ** value. + */ + rc = sqlite3VdbeTransferError(p); + } + goto end_of_step; + } + + /* If there are no other statements currently running, then + ** reset the interrupt flag. This prevents a call to sqlite3_interrupt + ** from interrupting a statement that has not yet started. + */ + if( db->nVdbeActive==0 ){ + AtomicStore(&db->u1.isInterrupted, 0); + } + + assert( db->nVdbeWrite>0 || db->autoCommit==0 + || ((db->nDeferredCons + db->nDeferredImmCons)==0) + ); + +#ifndef SQLITE_OMIT_TRACE + if( (db->mTrace & (SQLITE_TRACE_PROFILE|SQLITE_TRACE_XPROFILE))!=0 + && !db->init.busy && p->zSql ){ + sqlite3OsCurrentTimeInt64(db->pVfs, &p->startTime); + }else{ + assert( p->startTime==0 ); + } +#endif + + db->nVdbeActive++; + if( p->readOnly==0 ) db->nVdbeWrite++; + if( p->bIsReader ) db->nVdbeRead++; + p->pc = 0; + p->eVdbeState = VDBE_RUN_STATE; + }else + + if( ALWAYS(p->eVdbeState==VDBE_HALT_STATE) ){ + /* We used to require that sqlite3_reset() be called before retrying + ** sqlite3_step() after any error or after SQLITE_DONE. But beginning + ** with version 3.7.0, we changed this so that sqlite3_reset() would + ** be called automatically instead of throwing the SQLITE_MISUSE error. + ** This "automatic-reset" change is not technically an incompatibility, + ** since any application that receives an SQLITE_MISUSE is broken by + ** definition. + ** + ** Nevertheless, some published applications that were originally written + ** for version 3.6.23 or earlier do in fact depend on SQLITE_MISUSE + ** returns, and those were broken by the automatic-reset change. As a + ** a work-around, the SQLITE_OMIT_AUTORESET compile-time restores the + ** legacy behavior of returning SQLITE_MISUSE for cases where the + ** previous sqlite3_step() returned something other than a SQLITE_LOCKED + ** or SQLITE_BUSY error. + */ +#ifdef SQLITE_OMIT_AUTORESET + if( (rc = p->rc&0xff)==SQLITE_BUSY || rc==SQLITE_LOCKED ){ + sqlite3_reset((sqlite3_stmt*)p); + }else{ + return SQLITE_MISUSE_BKPT; + } +#else + sqlite3_reset((sqlite3_stmt*)p); +#endif + assert( p->eVdbeState==VDBE_READY_STATE ); + goto restart_step; + } + } + +#ifdef SQLITE_DEBUG + p->rcApp = SQLITE_OK; +#endif +#ifndef SQLITE_OMIT_EXPLAIN + if( p->explain ){ + rc = sqlite3VdbeList(p); + }else +#endif /* SQLITE_OMIT_EXPLAIN */ + { + db->nVdbeExec++; + rc = sqlite3VdbeExec(p); + db->nVdbeExec--; + } + + if( rc==SQLITE_ROW ){ + assert( p->rc==SQLITE_OK ); + assert( db->mallocFailed==0 ); + db->errCode = SQLITE_ROW; + return SQLITE_ROW; + }else{ +#ifndef SQLITE_OMIT_TRACE + /* If the statement completed successfully, invoke the profile callback */ + checkProfileCallback(db, p); +#endif + p->pResultRow = 0; + if( rc==SQLITE_DONE && db->autoCommit ){ + assert( p->rc==SQLITE_OK ); + p->rc = doWalCallbacks(db); + if( p->rc!=SQLITE_OK ){ + rc = SQLITE_ERROR; + } + }else if( rc!=SQLITE_DONE && (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 ){ + /* If this statement was prepared using saved SQL and an + ** error has occurred, then return the error code in p->rc to the + ** caller. Set the error code in the database handle to the same value. + */ + rc = sqlite3VdbeTransferError(p); + } + } + + db->errCode = rc; + if( SQLITE_NOMEM==sqlite3ApiExit(p->db, p->rc) ){ + p->rc = SQLITE_NOMEM_BKPT; + if( (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 ) rc = p->rc; + } +end_of_step: + /* There are only a limited number of result codes allowed from the + ** statements prepared using the legacy sqlite3_prepare() interface */ + assert( (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 + || rc==SQLITE_ROW || rc==SQLITE_DONE || rc==SQLITE_ERROR + || (rc&0xff)==SQLITE_BUSY || rc==SQLITE_MISUSE + ); + return (rc&db->errMask); +} + +/* +** This is the top-level implementation of sqlite3_step(). Call +** sqlite3Step() to do most of the work. If a schema error occurs, +** call sqlite3Reprepare() and try again. +*/ +SQLITE_API int sqlite3_step(sqlite3_stmt *pStmt){ + int rc = SQLITE_OK; /* Result from sqlite3Step() */ + Vdbe *v = (Vdbe*)pStmt; /* the prepared statement */ + int cnt = 0; /* Counter to prevent infinite loop of reprepares */ + sqlite3 *db; /* The database connection */ + + if( vdbeSafetyNotNull(v) ){ + return SQLITE_MISUSE_BKPT; + } + db = v->db; + sqlite3_mutex_enter(db->mutex); + while( (rc = sqlite3Step(v))==SQLITE_SCHEMA + && cnt++ < SQLITE_MAX_SCHEMA_RETRY ){ + int savedPc = v->pc; + rc = sqlite3Reprepare(v); + if( rc!=SQLITE_OK ){ + /* This case occurs after failing to recompile an sql statement. + ** The error message from the SQL compiler has already been loaded + ** into the database handle. This block copies the error message + ** from the database handle into the statement and sets the statement + ** program counter to 0 to ensure that when the statement is + ** finalized or reset the parser error message is available via + ** sqlite3_errmsg() and sqlite3_errcode(). + */ + const char *zErr = (const char *)sqlite3_value_text(db->pErr); + sqlite3DbFree(db, v->zErrMsg); + if( !db->mallocFailed ){ + v->zErrMsg = sqlite3DbStrDup(db, zErr); + v->rc = rc = sqlite3ApiExit(db, rc); + } else { + v->zErrMsg = 0; + v->rc = rc = SQLITE_NOMEM_BKPT; + } + break; + } + sqlite3_reset(pStmt); + if( savedPc>=0 ){ + /* Setting minWriteFileFormat to 254 is a signal to the OP_Init and + ** OP_Trace opcodes to *not* perform SQLITE_TRACE_STMT because it has + ** already been done once on a prior invocation that failed due to + ** SQLITE_SCHEMA. tag-20220401a */ + v->minWriteFileFormat = 254; + } + assert( v->expired==0 ); + } + sqlite3_mutex_leave(db->mutex); + return rc; +} + + +/* +** Extract the user data from a sqlite3_context structure and return a +** pointer to it. +*/ +SQLITE_API void *sqlite3_user_data(sqlite3_context *p){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( p==0 ) return 0; +#endif + assert( p && p->pFunc ); + return p->pFunc->pUserData; +} + +/* +** Extract the user data from a sqlite3_context structure and return a +** pointer to it. +** +** IMPLEMENTATION-OF: R-46798-50301 The sqlite3_context_db_handle() interface +** returns a copy of the pointer to the database connection (the 1st +** parameter) of the sqlite3_create_function() and +** sqlite3_create_function16() routines that originally registered the +** application defined function. +*/ +SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( p==0 ) return 0; +#else + assert( p && p->pOut ); +#endif + return p->pOut->db; +} + +/* +** If this routine is invoked from within an xColumn method of a virtual +** table, then it returns true if and only if the the call is during an +** UPDATE operation and the value of the column will not be modified +** by the UPDATE. +** +** If this routine is called from any context other than within the +** xColumn method of a virtual table, then the return value is meaningless +** and arbitrary. +** +** Virtual table implements might use this routine to optimize their +** performance by substituting a NULL result, or some other light-weight +** value, as a signal to the xUpdate routine that the column is unchanged. +*/ +SQLITE_API int sqlite3_vtab_nochange(sqlite3_context *p){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( p==0 ) return 0; +#else + assert( p ); +#endif + return sqlite3_value_nochange(p->pOut); +} + +/* +** The destructor function for a ValueList object. This needs to be +** a separate function, unknowable to the application, to ensure that +** calls to sqlite3_vtab_in_first()/sqlite3_vtab_in_next() that are not +** preceded by activation of IN processing via sqlite3_vtab_int() do not +** try to access a fake ValueList object inserted by a hostile extension. +*/ +SQLITE_PRIVATE void sqlite3VdbeValueListFree(void *pToDelete){ + sqlite3_free(pToDelete); +} + +/* +** Implementation of sqlite3_vtab_in_first() (if bNext==0) and +** sqlite3_vtab_in_next() (if bNext!=0). +*/ +static int valueFromValueList( + sqlite3_value *pVal, /* Pointer to the ValueList object */ + sqlite3_value **ppOut, /* Store the next value from the list here */ + int bNext /* 1 for _next(). 0 for _first() */ +){ + int rc; + ValueList *pRhs; + + *ppOut = 0; + if( pVal==0 ) return SQLITE_MISUSE_BKPT; + if( (pVal->flags & MEM_Dyn)==0 || pVal->xDel!=sqlite3VdbeValueListFree ){ + return SQLITE_ERROR; + }else{ + assert( (pVal->flags&(MEM_TypeMask|MEM_Term|MEM_Subtype)) == + (MEM_Null|MEM_Term|MEM_Subtype) ); + assert( pVal->eSubtype=='p' ); + assert( pVal->u.zPType!=0 && strcmp(pVal->u.zPType,"ValueList")==0 ); + pRhs = (ValueList*)pVal->z; + } + if( bNext ){ + rc = sqlite3BtreeNext(pRhs->pCsr, 0); + }else{ + int dummy = 0; + rc = sqlite3BtreeFirst(pRhs->pCsr, &dummy); + assert( rc==SQLITE_OK || sqlite3BtreeEof(pRhs->pCsr) ); + if( sqlite3BtreeEof(pRhs->pCsr) ) rc = SQLITE_DONE; + } + if( rc==SQLITE_OK ){ + u32 sz; /* Size of current row in bytes */ + Mem sMem; /* Raw content of current row */ + memset(&sMem, 0, sizeof(sMem)); + sz = sqlite3BtreePayloadSize(pRhs->pCsr); + rc = sqlite3VdbeMemFromBtreeZeroOffset(pRhs->pCsr,sz,&sMem); + if( rc==SQLITE_OK ){ + u8 *zBuf = (u8*)sMem.z; + u32 iSerial; + sqlite3_value *pOut = pRhs->pOut; + int iOff = 1 + getVarint32(&zBuf[1], iSerial); + sqlite3VdbeSerialGet(&zBuf[iOff], iSerial, pOut); + pOut->enc = ENC(pOut->db); + if( (pOut->flags & MEM_Ephem)!=0 && sqlite3VdbeMemMakeWriteable(pOut) ){ + rc = SQLITE_NOMEM; + }else{ + *ppOut = pOut; + } + } + sqlite3VdbeMemRelease(&sMem); + } + return rc; +} + +/* +** Set the iterator value pVal to point to the first value in the set. +** Set (*ppOut) to point to this value before returning. +*/ +SQLITE_API int sqlite3_vtab_in_first(sqlite3_value *pVal, sqlite3_value **ppOut){ + return valueFromValueList(pVal, ppOut, 0); +} + +/* +** Set the iterator value pVal to point to the next value in the set. +** Set (*ppOut) to point to this value before returning. +*/ +SQLITE_API int sqlite3_vtab_in_next(sqlite3_value *pVal, sqlite3_value **ppOut){ + return valueFromValueList(pVal, ppOut, 1); +} + +/* +** Return the current time for a statement. If the current time +** is requested more than once within the same run of a single prepared +** statement, the exact same time is returned for each invocation regardless +** of the amount of time that elapses between invocations. In other words, +** the time returned is always the time of the first call. +*/ +SQLITE_PRIVATE sqlite3_int64 sqlite3StmtCurrentTime(sqlite3_context *p){ + int rc; +#ifndef SQLITE_ENABLE_STAT4 + sqlite3_int64 *piTime = &p->pVdbe->iCurrentTime; + assert( p->pVdbe!=0 ); +#else + sqlite3_int64 iTime = 0; + sqlite3_int64 *piTime = p->pVdbe!=0 ? &p->pVdbe->iCurrentTime : &iTime; +#endif + if( *piTime==0 ){ + rc = sqlite3OsCurrentTimeInt64(p->pOut->db->pVfs, piTime); + if( rc ) *piTime = 0; + } + return *piTime; +} + +/* +** Create a new aggregate context for p and return a pointer to +** its pMem->z element. +*/ +static SQLITE_NOINLINE void *createAggContext(sqlite3_context *p, int nByte){ + Mem *pMem = p->pMem; + assert( (pMem->flags & MEM_Agg)==0 ); + if( nByte<=0 ){ + sqlite3VdbeMemSetNull(pMem); + pMem->z = 0; + }else{ + sqlite3VdbeMemClearAndResize(pMem, nByte); + pMem->flags = MEM_Agg; + pMem->u.pDef = p->pFunc; + if( pMem->z ){ + memset(pMem->z, 0, nByte); + } + } + return (void*)pMem->z; +} + +/* +** Allocate or return the aggregate context for a user function. A new +** context is allocated on the first call. Subsequent calls return the +** same context that was returned on prior calls. +*/ +SQLITE_API void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){ + assert( p && p->pFunc && p->pFunc->xFinalize ); + assert( sqlite3_mutex_held(p->pOut->db->mutex) ); + testcase( nByte<0 ); + if( (p->pMem->flags & MEM_Agg)==0 ){ + return createAggContext(p, nByte); + }else{ + return (void*)p->pMem->z; + } +} + +/* +** Return the auxiliary data pointer, if any, for the iArg'th argument to +** the user-function defined by pCtx. +** +** The left-most argument is 0. +** +** Undocumented behavior: If iArg is negative then access a cache of +** auxiliary data pointers that is available to all functions within a +** single prepared statement. The iArg values must match. +*/ +SQLITE_API void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){ + AuxData *pAuxData; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return 0; +#endif + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); +#if SQLITE_ENABLE_STAT4 + if( pCtx->pVdbe==0 ) return 0; +#else + assert( pCtx->pVdbe!=0 ); +#endif + for(pAuxData=pCtx->pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNextAux){ + if( pAuxData->iAuxArg==iArg && (pAuxData->iAuxOp==pCtx->iOp || iArg<0) ){ + return pAuxData->pAux; + } + } + return 0; +} + +/* +** Set the auxiliary data pointer and delete function, for the iArg'th +** argument to the user-function defined by pCtx. Any previous value is +** deleted by calling the delete function specified when it was set. +** +** The left-most argument is 0. +** +** Undocumented behavior: If iArg is negative then make the data available +** to all functions within the current prepared statement using iArg as an +** access code. +*/ +SQLITE_API void sqlite3_set_auxdata( + sqlite3_context *pCtx, + int iArg, + void *pAux, + void (*xDelete)(void*) +){ + AuxData *pAuxData; + Vdbe *pVdbe; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( pCtx==0 ) return; +#endif + pVdbe= pCtx->pVdbe; + assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); +#ifdef SQLITE_ENABLE_STAT4 + if( pVdbe==0 ) goto failed; +#else + assert( pVdbe!=0 ); +#endif + + for(pAuxData=pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNextAux){ + if( pAuxData->iAuxArg==iArg && (pAuxData->iAuxOp==pCtx->iOp || iArg<0) ){ + break; + } + } + if( pAuxData==0 ){ + pAuxData = sqlite3DbMallocZero(pVdbe->db, sizeof(AuxData)); + if( !pAuxData ) goto failed; + pAuxData->iAuxOp = pCtx->iOp; + pAuxData->iAuxArg = iArg; + pAuxData->pNextAux = pVdbe->pAuxData; + pVdbe->pAuxData = pAuxData; + if( pCtx->isError==0 ) pCtx->isError = -1; + }else if( pAuxData->xDeleteAux ){ + pAuxData->xDeleteAux(pAuxData->pAux); + } + + pAuxData->pAux = pAux; + pAuxData->xDeleteAux = xDelete; + return; + +failed: + if( xDelete ){ + xDelete(pAux); + } +} + +#ifndef SQLITE_OMIT_DEPRECATED +/* +** Return the number of times the Step function of an aggregate has been +** called. +** +** This function is deprecated. Do not use it for new code. It is +** provide only to avoid breaking legacy code. New aggregate function +** implementations should keep their own counts within their aggregate +** context. +*/ +SQLITE_API int sqlite3_aggregate_count(sqlite3_context *p){ + assert( p && p->pMem && p->pFunc && p->pFunc->xFinalize ); + return p->pMem->n; +} +#endif + +/* +** Return the number of columns in the result set for the statement pStmt. +*/ +SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt){ + Vdbe *pVm = (Vdbe *)pStmt; + if( pVm==0 ) return 0; + return pVm->nResColumn; +} + +/* +** Return the number of values available from the current row of the +** currently executing statement pStmt. +*/ +SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt){ + Vdbe *pVm = (Vdbe *)pStmt; + if( pVm==0 || pVm->pResultRow==0 ) return 0; + return pVm->nResColumn; +} + +/* +** Return a pointer to static memory containing an SQL NULL value. +*/ +static const Mem *columnNullValue(void){ + /* Even though the Mem structure contains an element + ** of type i64, on certain architectures (x86) with certain compiler + ** switches (-Os), gcc may align this Mem object on a 4-byte boundary + ** instead of an 8-byte one. This all works fine, except that when + ** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s + ** that a Mem structure is located on an 8-byte boundary. To prevent + ** these assert()s from failing, when building with SQLITE_DEBUG defined + ** using gcc, we force nullMem to be 8-byte aligned using the magical + ** __attribute__((aligned(8))) macro. */ + static const Mem nullMem +#if defined(SQLITE_DEBUG) && defined(__GNUC__) + __attribute__((aligned(8))) +#endif + = { + /* .u = */ {0}, + /* .z = */ (char*)0, + /* .n = */ (int)0, + /* .flags = */ (u16)MEM_Null, + /* .enc = */ (u8)0, + /* .eSubtype = */ (u8)0, + /* .db = */ (sqlite3*)0, + /* .szMalloc = */ (int)0, + /* .uTemp = */ (u32)0, + /* .zMalloc = */ (char*)0, + /* .xDel = */ (void(*)(void*))0, +#ifdef SQLITE_DEBUG + /* .pScopyFrom = */ (Mem*)0, + /* .mScopyFlags= */ 0, + /* .bScopy = */ 0, +#endif + }; + return &nullMem; +} + +/* +** Check to see if column iCol of the given statement is valid. If +** it is, return a pointer to the Mem for the value of that column. +** If iCol is not valid, return a pointer to a Mem which has a value +** of NULL. +*/ +static Mem *columnMem(sqlite3_stmt *pStmt, int i){ + Vdbe *pVm; + Mem *pOut; + + pVm = (Vdbe *)pStmt; + if( pVm==0 ) return (Mem*)columnNullValue(); + assert( pVm->db ); + sqlite3_mutex_enter(pVm->db->mutex); + if( pVm->pResultRow!=0 && inResColumn && i>=0 ){ + pOut = &pVm->pResultRow[i]; + }else{ + sqlite3Error(pVm->db, SQLITE_RANGE); + pOut = (Mem*)columnNullValue(); + } + return pOut; +} + +/* +** This function is called after invoking an sqlite3_value_XXX function on a +** column value (i.e. a value returned by evaluating an SQL expression in the +** select list of a SELECT statement) that may cause a malloc() failure. If +** malloc() has failed, the threads mallocFailed flag is cleared and the result +** code of statement pStmt set to SQLITE_NOMEM. +** +** Specifically, this is called from within: +** +** sqlite3_column_int() +** sqlite3_column_int64() +** sqlite3_column_text() +** sqlite3_column_text16() +** sqlite3_column_double() +** sqlite3_column_bytes() +** sqlite3_column_bytes16() +** sqlite3_column_blob() +*/ +static void columnMallocFailure(sqlite3_stmt *pStmt) +{ + /* If malloc() failed during an encoding conversion within an + ** sqlite3_column_XXX API, then set the return code of the statement to + ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR + ** and _finalize() will return NOMEM. + */ + Vdbe *p = (Vdbe *)pStmt; + if( p ){ + assert( p->db!=0 ); + assert( sqlite3_mutex_held(p->db->mutex) ); + p->rc = sqlite3ApiExit(p->db, p->rc); + sqlite3_mutex_leave(p->db->mutex); + } +} + +/**************************** sqlite3_column_ ******************************* +** The following routines are used to access elements of the current row +** in the result set. +*/ +SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){ + const void *val; + val = sqlite3_value_blob( columnMem(pStmt,i) ); + /* Even though there is no encoding conversion, value_blob() might + ** need to call malloc() to expand the result of a zeroblob() + ** expression. + */ + columnMallocFailure(pStmt); + return val; +} +SQLITE_API int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){ + int val = sqlite3_value_bytes( columnMem(pStmt,i) ); + columnMallocFailure(pStmt); + return val; +} +SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){ + int val = sqlite3_value_bytes16( columnMem(pStmt,i) ); + columnMallocFailure(pStmt); + return val; +} +SQLITE_API double sqlite3_column_double(sqlite3_stmt *pStmt, int i){ + double val = sqlite3_value_double( columnMem(pStmt,i) ); + columnMallocFailure(pStmt); + return val; +} +SQLITE_API int sqlite3_column_int(sqlite3_stmt *pStmt, int i){ + int val = sqlite3_value_int( columnMem(pStmt,i) ); + columnMallocFailure(pStmt); + return val; +} +SQLITE_API sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){ + sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) ); + columnMallocFailure(pStmt); + return val; +} +SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){ + const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) ); + columnMallocFailure(pStmt); + return val; +} +SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){ + Mem *pOut = columnMem(pStmt, i); + if( pOut->flags&MEM_Static ){ + pOut->flags &= ~MEM_Static; + pOut->flags |= MEM_Ephem; + } + columnMallocFailure(pStmt); + return (sqlite3_value *)pOut; +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){ + const void *val = sqlite3_value_text16( columnMem(pStmt,i) ); + columnMallocFailure(pStmt); + return val; +} +#endif /* SQLITE_OMIT_UTF16 */ +SQLITE_API int sqlite3_column_type(sqlite3_stmt *pStmt, int i){ + int iType = sqlite3_value_type( columnMem(pStmt,i) ); + columnMallocFailure(pStmt); + return iType; +} + +/* +** Column names appropriate for EXPLAIN or EXPLAIN QUERY PLAN. +*/ +static const char * const azExplainColNames8[] = { + "addr", "opcode", "p1", "p2", "p3", "p4", "p5", "comment", /* EXPLAIN */ + "id", "parent", "notused", "detail" /* EQP */ +}; +static const u16 azExplainColNames16data[] = { + /* 0 */ 'a', 'd', 'd', 'r', 0, + /* 5 */ 'o', 'p', 'c', 'o', 'd', 'e', 0, + /* 12 */ 'p', '1', 0, + /* 15 */ 'p', '2', 0, + /* 18 */ 'p', '3', 0, + /* 21 */ 'p', '4', 0, + /* 24 */ 'p', '5', 0, + /* 27 */ 'c', 'o', 'm', 'm', 'e', 'n', 't', 0, + /* 35 */ 'i', 'd', 0, + /* 38 */ 'p', 'a', 'r', 'e', 'n', 't', 0, + /* 45 */ 'n', 'o', 't', 'u', 's', 'e', 'd', 0, + /* 53 */ 'd', 'e', 't', 'a', 'i', 'l', 0 +}; +static const u8 iExplainColNames16[] = { + 0, 5, 12, 15, 18, 21, 24, 27, + 35, 38, 45, 53 +}; + +/* +** Convert the N-th element of pStmt->pColName[] into a string using +** xFunc() then return that string. If N is out of range, return 0. +** +** There are up to 5 names for each column. useType determines which +** name is returned. Here are the names: +** +** 0 The column name as it should be displayed for output +** 1 The datatype name for the column +** 2 The name of the database that the column derives from +** 3 The name of the table that the column derives from +** 4 The name of the table column that the result column derives from +** +** If the result is not a simple column reference (if it is an expression +** or a constant) then useTypes 2, 3, and 4 return NULL. +*/ +static const void *columnName( + sqlite3_stmt *pStmt, /* The statement */ + int N, /* Which column to get the name for */ + int useUtf16, /* True to return the name as UTF16 */ + int useType /* What type of name */ +){ + const void *ret; + Vdbe *p; + int n; + sqlite3 *db; +#ifdef SQLITE_ENABLE_API_ARMOR + if( pStmt==0 ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + if( N<0 ) return 0; + ret = 0; + p = (Vdbe *)pStmt; + db = p->db; + assert( db!=0 ); + sqlite3_mutex_enter(db->mutex); + + if( p->explain ){ + if( useType>0 ) goto columnName_end; + n = p->explain==1 ? 8 : 4; + if( N>=n ) goto columnName_end; + if( useUtf16 ){ + int i = iExplainColNames16[N + 8*p->explain - 8]; + ret = (void*)&azExplainColNames16data[i]; + }else{ + ret = (void*)azExplainColNames8[N + 8*p->explain - 8]; + } + goto columnName_end; + } + n = p->nResColumn; + if( NmallocFailed; + N += useType*n; +#ifndef SQLITE_OMIT_UTF16 + if( useUtf16 ){ + ret = sqlite3_value_text16((sqlite3_value*)&p->aColName[N]); + }else +#endif + { + ret = sqlite3_value_text((sqlite3_value*)&p->aColName[N]); + } + /* A malloc may have failed inside of the _text() call. If this + ** is the case, clear the mallocFailed flag and return NULL. + */ + assert( db->mallocFailed==0 || db->mallocFailed==1 ); + if( db->mallocFailed > prior_mallocFailed ){ + sqlite3OomClear(db); + ret = 0; + } + } +columnName_end: + sqlite3_mutex_leave(db->mutex); + return ret; +} + +/* +** Return the name of the Nth column of the result set returned by SQL +** statement pStmt. +*/ +SQLITE_API const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){ + return columnName(pStmt, N, 0, COLNAME_NAME); +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){ + return columnName(pStmt, N, 1, COLNAME_NAME); +} +#endif + +/* +** Constraint: If you have ENABLE_COLUMN_METADATA then you must +** not define OMIT_DECLTYPE. +*/ +#if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA) +# error "Must not define both SQLITE_OMIT_DECLTYPE \ + and SQLITE_ENABLE_COLUMN_METADATA" +#endif + +#ifndef SQLITE_OMIT_DECLTYPE +/* +** Return the column declaration type (if applicable) of the 'i'th column +** of the result set of SQL statement pStmt. +*/ +SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){ + return columnName(pStmt, N, 0, COLNAME_DECLTYPE); +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){ + return columnName(pStmt, N, 1, COLNAME_DECLTYPE); +} +#endif /* SQLITE_OMIT_UTF16 */ +#endif /* SQLITE_OMIT_DECLTYPE */ + +#ifdef SQLITE_ENABLE_COLUMN_METADATA +/* +** Return the name of the database from which a result column derives. +** NULL is returned if the result column is an expression or constant or +** anything else which is not an unambiguous reference to a database column. +*/ +SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){ + return columnName(pStmt, N, 0, COLNAME_DATABASE); +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){ + return columnName(pStmt, N, 1, COLNAME_DATABASE); +} +#endif /* SQLITE_OMIT_UTF16 */ + +/* +** Return the name of the table from which a result column derives. +** NULL is returned if the result column is an expression or constant or +** anything else which is not an unambiguous reference to a database column. +*/ +SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){ + return columnName(pStmt, N, 0, COLNAME_TABLE); +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){ + return columnName(pStmt, N, 1, COLNAME_TABLE); +} +#endif /* SQLITE_OMIT_UTF16 */ + +/* +** Return the name of the table column from which a result column derives. +** NULL is returned if the result column is an expression or constant or +** anything else which is not an unambiguous reference to a database column. +*/ +SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){ + return columnName(pStmt, N, 0, COLNAME_COLUMN); +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){ + return columnName(pStmt, N, 1, COLNAME_COLUMN); +} +#endif /* SQLITE_OMIT_UTF16 */ +#endif /* SQLITE_ENABLE_COLUMN_METADATA */ + + +/******************************* sqlite3_bind_ *************************** +** +** Routines used to attach values to wildcards in a compiled SQL statement. +*/ +/* +** Unbind the value bound to variable i in virtual machine p. This is the +** the same as binding a NULL value to the column. If the "i" parameter is +** out of range, then SQLITE_RANGE is returned. Otherwise SQLITE_OK. +** +** A successful evaluation of this routine acquires the mutex on p. +** the mutex is released if any kind of error occurs. +** +** The error code stored in database p->db is overwritten with the return +** value in any case. +** +** (tag-20240917-01) If vdbeUnbind(p,(u32)(i-1)) returns SQLITE_OK, +** that means all of the the following will be true: +** +** p!=0 +** p->pVar!=0 +** i>0 +** i<=p->nVar +** +** An assert() is normally added after vdbeUnbind() to help static analyzers +** realize this. +*/ +static int vdbeUnbind(Vdbe *p, unsigned int i){ + Mem *pVar; + if( vdbeSafetyNotNull(p) ){ + return SQLITE_MISUSE_BKPT; + } + sqlite3_mutex_enter(p->db->mutex); + if( p->eVdbeState!=VDBE_READY_STATE ){ + sqlite3Error(p->db, SQLITE_MISUSE_BKPT); + sqlite3_mutex_leave(p->db->mutex); + sqlite3_log(SQLITE_MISUSE, + "bind on a busy prepared statement: [%s]", p->zSql); + return SQLITE_MISUSE_BKPT; + } + if( i>=(unsigned int)p->nVar ){ + sqlite3Error(p->db, SQLITE_RANGE); + sqlite3_mutex_leave(p->db->mutex); + return SQLITE_RANGE; + } + pVar = &p->aVar[i]; + sqlite3VdbeMemRelease(pVar); + pVar->flags = MEM_Null; + p->db->errCode = SQLITE_OK; + + /* If the bit corresponding to this variable in Vdbe.expmask is set, then + ** binding a new value to this variable invalidates the current query plan. + ** + ** IMPLEMENTATION-OF: R-57496-20354 If the specific value bound to a host + ** parameter in the WHERE clause might influence the choice of query plan + ** for a statement, then the statement will be automatically recompiled, + ** as if there had been a schema change, on the first sqlite3_step() call + ** following any change to the bindings of that parameter. + */ + assert( (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 || p->expmask==0 ); + if( p->expmask!=0 && (p->expmask & (i>=31 ? 0x80000000 : (u32)1<expired = 1; + } + return SQLITE_OK; +} + +/* +** Bind a text or BLOB value. +*/ +static int bindText( + sqlite3_stmt *pStmt, /* The statement to bind against */ + int i, /* Index of the parameter to bind */ + const void *zData, /* Pointer to the data to be bound */ + i64 nData, /* Number of bytes of data to be bound */ + void (*xDel)(void*), /* Destructor for the data */ + u8 encoding /* Encoding for the data */ +){ + Vdbe *p = (Vdbe *)pStmt; + Mem *pVar; + int rc; + + rc = vdbeUnbind(p, (u32)(i-1)); + if( rc==SQLITE_OK ){ + assert( p!=0 && p->aVar!=0 && i>0 && i<=p->nVar ); /* tag-20240917-01 */ + if( zData!=0 ){ + pVar = &p->aVar[i-1]; + rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel); + if( rc==SQLITE_OK ){ + if( encoding==0 ){ + pVar->enc = ENC(p->db); + }else{ + rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db)); + } + } + if( rc ){ + sqlite3Error(p->db, rc); + rc = sqlite3ApiExit(p->db, rc); + } + } + sqlite3_mutex_leave(p->db->mutex); + }else if( xDel!=SQLITE_STATIC && xDel!=SQLITE_TRANSIENT ){ + xDel((void*)zData); + } + return rc; +} + + +/* +** Bind a blob value to an SQL statement variable. +*/ +SQLITE_API int sqlite3_bind_blob( + sqlite3_stmt *pStmt, + int i, + const void *zData, + int nData, + void (*xDel)(void*) +){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( nData<0 ) return SQLITE_MISUSE_BKPT; +#endif + return bindText(pStmt, i, zData, nData, xDel, 0); +} +SQLITE_API int sqlite3_bind_blob64( + sqlite3_stmt *pStmt, + int i, + const void *zData, + sqlite3_uint64 nData, + void (*xDel)(void*) +){ + assert( xDel!=SQLITE_DYNAMIC ); + return bindText(pStmt, i, zData, nData, xDel, 0); +} +SQLITE_API int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){ + int rc; + Vdbe *p = (Vdbe *)pStmt; + rc = vdbeUnbind(p, (u32)(i-1)); + if( rc==SQLITE_OK ){ + assert( p!=0 && p->aVar!=0 && i>0 && i<=p->nVar ); /* tag-20240917-01 */ + sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue); + sqlite3_mutex_leave(p->db->mutex); + } + return rc; +} +SQLITE_API int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){ + return sqlite3_bind_int64(p, i, (i64)iValue); +} +SQLITE_API int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){ + int rc; + Vdbe *p = (Vdbe *)pStmt; + rc = vdbeUnbind(p, (u32)(i-1)); + if( rc==SQLITE_OK ){ + assert( p!=0 && p->aVar!=0 && i>0 && i<=p->nVar ); /* tag-20240917-01 */ + sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue); + sqlite3_mutex_leave(p->db->mutex); + } + return rc; +} +SQLITE_API int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){ + int rc; + Vdbe *p = (Vdbe*)pStmt; + rc = vdbeUnbind(p, (u32)(i-1)); + if( rc==SQLITE_OK ){ + assert( p!=0 && p->aVar!=0 && i>0 && i<=p->nVar ); /* tag-20240917-01 */ + sqlite3_mutex_leave(p->db->mutex); + } + return rc; +} +SQLITE_API int sqlite3_bind_pointer( + sqlite3_stmt *pStmt, + int i, + void *pPtr, + const char *zPTtype, + void (*xDestructor)(void*) +){ + int rc; + Vdbe *p = (Vdbe*)pStmt; + rc = vdbeUnbind(p, (u32)(i-1)); + if( rc==SQLITE_OK ){ + assert( p!=0 && p->aVar!=0 && i>0 && i<=p->nVar ); /* tag-20240917-01 */ + sqlite3VdbeMemSetPointer(&p->aVar[i-1], pPtr, zPTtype, xDestructor); + sqlite3_mutex_leave(p->db->mutex); + }else if( xDestructor ){ + xDestructor(pPtr); + } + return rc; +} +SQLITE_API int sqlite3_bind_text( + sqlite3_stmt *pStmt, + int i, + const char *zData, + int nData, + void (*xDel)(void*) +){ + return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8); +} +SQLITE_API int sqlite3_bind_text64( + sqlite3_stmt *pStmt, + int i, + const char *zData, + sqlite3_uint64 nData, + void (*xDel)(void*), + unsigned char enc +){ + assert( xDel!=SQLITE_DYNAMIC ); + if( enc!=SQLITE_UTF8 ){ + if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE; + nData &= ~(u64)1; + } + return bindText(pStmt, i, zData, nData, xDel, enc); +} +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API int sqlite3_bind_text16( + sqlite3_stmt *pStmt, + int i, + const void *zData, + int n, + void (*xDel)(void*) +){ + return bindText(pStmt, i, zData, n & ~(u64)1, xDel, SQLITE_UTF16NATIVE); +} +#endif /* SQLITE_OMIT_UTF16 */ +SQLITE_API int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){ + int rc; + switch( sqlite3_value_type((sqlite3_value*)pValue) ){ + case SQLITE_INTEGER: { + rc = sqlite3_bind_int64(pStmt, i, pValue->u.i); + break; + } + case SQLITE_FLOAT: { + assert( pValue->flags & (MEM_Real|MEM_IntReal) ); + rc = sqlite3_bind_double(pStmt, i, + (pValue->flags & MEM_Real) ? pValue->u.r : (double)pValue->u.i + ); + break; + } + case SQLITE_BLOB: { + if( pValue->flags & MEM_Zero ){ + rc = sqlite3_bind_zeroblob(pStmt, i, pValue->u.nZero); + }else{ + rc = sqlite3_bind_blob(pStmt, i, pValue->z, pValue->n,SQLITE_TRANSIENT); + } + break; + } + case SQLITE_TEXT: { + rc = bindText(pStmt,i, pValue->z, pValue->n, SQLITE_TRANSIENT, + pValue->enc); + break; + } + default: { + rc = sqlite3_bind_null(pStmt, i); + break; + } + } + return rc; +} +SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){ + int rc; + Vdbe *p = (Vdbe *)pStmt; + rc = vdbeUnbind(p, (u32)(i-1)); + if( rc==SQLITE_OK ){ + assert( p!=0 && p->aVar!=0 && i>0 && i<=p->nVar ); /* tag-20240917-01 */ +#ifndef SQLITE_OMIT_INCRBLOB + sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n); +#else + rc = sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n); +#endif + sqlite3_mutex_leave(p->db->mutex); + } + return rc; +} +SQLITE_API int sqlite3_bind_zeroblob64(sqlite3_stmt *pStmt, int i, sqlite3_uint64 n){ + int rc; + Vdbe *p = (Vdbe *)pStmt; +#ifdef SQLITE_ENABLE_API_ARMOR + if( p==0 ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(p->db->mutex); + if( n>(u64)p->db->aLimit[SQLITE_LIMIT_LENGTH] ){ + rc = SQLITE_TOOBIG; + }else{ + assert( (n & 0x7FFFFFFF)==n ); + rc = sqlite3_bind_zeroblob(pStmt, i, n); + } + rc = sqlite3ApiExit(p->db, rc); + sqlite3_mutex_leave(p->db->mutex); + return rc; +} + +/* +** Return the number of wildcards that can be potentially bound to. +** This routine is added to support DBD::SQLite. +*/ +SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){ + Vdbe *p = (Vdbe*)pStmt; + return p ? p->nVar : 0; +} + +/* +** Return the name of a wildcard parameter. Return NULL if the index +** is out of range or if the wildcard is unnamed. +** +** The result is always UTF-8. +*/ +SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){ + Vdbe *p = (Vdbe*)pStmt; + if( p==0 ) return 0; + return sqlite3VListNumToName(p->pVList, i); +} + +/* +** Given a wildcard parameter name, return the index of the variable +** with that name. If there is no variable with the given name, +** return 0. +*/ +SQLITE_PRIVATE int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName, int nName){ + if( p==0 || zName==0 ) return 0; + return sqlite3VListNameToNum(p->pVList, zName, nName); +} +SQLITE_API int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){ + return sqlite3VdbeParameterIndex((Vdbe*)pStmt, zName, sqlite3Strlen30(zName)); +} + +/* +** Transfer all bindings from the first statement over to the second. +*/ +SQLITE_PRIVATE int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){ + Vdbe *pFrom = (Vdbe*)pFromStmt; + Vdbe *pTo = (Vdbe*)pToStmt; + int i; + assert( pTo->db==pFrom->db ); + assert( pTo->nVar==pFrom->nVar ); + sqlite3_mutex_enter(pTo->db->mutex); + for(i=0; inVar; i++){ + sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]); + } + sqlite3_mutex_leave(pTo->db->mutex); + return SQLITE_OK; +} + +#ifndef SQLITE_OMIT_DEPRECATED +/* +** Deprecated external interface. Internal/core SQLite code +** should call sqlite3TransferBindings. +** +** It is misuse to call this routine with statements from different +** database connections. But as this is a deprecated interface, we +** will not bother to check for that condition. +** +** If the two statements contain a different number of bindings, then +** an SQLITE_ERROR is returned. Nothing else can go wrong, so otherwise +** SQLITE_OK is returned. +*/ +SQLITE_API int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){ + Vdbe *pFrom = (Vdbe*)pFromStmt; + Vdbe *pTo = (Vdbe*)pToStmt; + if( pFrom->nVar!=pTo->nVar ){ + return SQLITE_ERROR; + } + assert( (pTo->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 || pTo->expmask==0 ); + if( pTo->expmask ){ + pTo->expired = 1; + } + assert( (pFrom->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 || pFrom->expmask==0 ); + if( pFrom->expmask ){ + pFrom->expired = 1; + } + return sqlite3TransferBindings(pFromStmt, pToStmt); +} +#endif + +/* +** Return the sqlite3* database handle to which the prepared statement given +** in the argument belongs. This is the same database handle that was +** the first argument to the sqlite3_prepare() that was used to create +** the statement in the first place. +*/ +SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){ + return pStmt ? ((Vdbe*)pStmt)->db : 0; +} + +/* +** Return true if the prepared statement is guaranteed to not modify the +** database. +*/ +SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt){ + return pStmt ? ((Vdbe*)pStmt)->readOnly : 1; +} + +/* +** Return 1 if the statement is an EXPLAIN and return 2 if the +** statement is an EXPLAIN QUERY PLAN +*/ +SQLITE_API int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt){ + return pStmt ? ((Vdbe*)pStmt)->explain : 0; +} + +/* +** Set the explain mode for a statement. +*/ +SQLITE_API int sqlite3_stmt_explain(sqlite3_stmt *pStmt, int eMode){ + Vdbe *v = (Vdbe*)pStmt; + int rc; +#ifdef SQLITE_ENABLE_API_ARMOR + if( pStmt==0 ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(v->db->mutex); + if( ((int)v->explain)==eMode ){ + rc = SQLITE_OK; + }else if( eMode<0 || eMode>2 ){ + rc = SQLITE_ERROR; + }else if( (v->prepFlags & SQLITE_PREPARE_SAVESQL)==0 ){ + rc = SQLITE_ERROR; + }else if( v->eVdbeState!=VDBE_READY_STATE ){ + rc = SQLITE_BUSY; + }else if( v->nMem>=10 && (eMode!=2 || v->haveEqpOps) ){ + /* No reprepare necessary */ + v->explain = eMode; + rc = SQLITE_OK; + }else{ + v->explain = eMode; + rc = sqlite3Reprepare(v); + v->haveEqpOps = eMode==2; + } + if( v->explain ){ + v->nResColumn = 12 - 4*v->explain; + }else{ + v->nResColumn = v->nResAlloc; + } + sqlite3_mutex_leave(v->db->mutex); + return rc; +} + +/* +** Return true if the prepared statement is in need of being reset. +*/ +SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt *pStmt){ + Vdbe *v = (Vdbe*)pStmt; + return v!=0 && v->eVdbeState==VDBE_RUN_STATE; +} + +/* +** Return a pointer to the next prepared statement after pStmt associated +** with database connection pDb. If pStmt is NULL, return the first +** prepared statement for the database connection. Return NULL if there +** are no more. +*/ +SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){ + sqlite3_stmt *pNext; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(pDb) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + sqlite3_mutex_enter(pDb->mutex); + if( pStmt==0 ){ + pNext = (sqlite3_stmt*)pDb->pVdbe; + }else{ + pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pVNext; + } + sqlite3_mutex_leave(pDb->mutex); + return pNext; +} + +/* +** Return the value of a status counter for a prepared statement +*/ +SQLITE_API int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){ + Vdbe *pVdbe = (Vdbe*)pStmt; + u32 v; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !pStmt + || (op!=SQLITE_STMTSTATUS_MEMUSED && (op<0||op>=ArraySize(pVdbe->aCounter))) + ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + if( op==SQLITE_STMTSTATUS_MEMUSED ){ + sqlite3 *db = pVdbe->db; + sqlite3_mutex_enter(db->mutex); + v = 0; + db->pnBytesFreed = (int*)&v; + assert( db->lookaside.pEnd==db->lookaside.pTrueEnd ); + db->lookaside.pEnd = db->lookaside.pStart; + sqlite3VdbeDelete(pVdbe); + db->pnBytesFreed = 0; + db->lookaside.pEnd = db->lookaside.pTrueEnd; + sqlite3_mutex_leave(db->mutex); + }else{ + v = pVdbe->aCounter[op]; + if( resetFlag ) pVdbe->aCounter[op] = 0; + } + return (int)v; +} + +/* +** Return the SQL associated with a prepared statement +*/ +SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt){ + Vdbe *p = (Vdbe *)pStmt; + return p ? p->zSql : 0; +} + +/* +** Return the SQL associated with a prepared statement with +** bound parameters expanded. Space to hold the returned string is +** obtained from sqlite3_malloc(). The caller is responsible for +** freeing the returned string by passing it to sqlite3_free(). +** +** The SQLITE_TRACE_SIZE_LIMIT puts an upper bound on the size of +** expanded bound parameters. +*/ +SQLITE_API char *sqlite3_expanded_sql(sqlite3_stmt *pStmt){ +#ifdef SQLITE_OMIT_TRACE + return 0; +#else + char *z = 0; + const char *zSql = sqlite3_sql(pStmt); + if( zSql ){ + Vdbe *p = (Vdbe *)pStmt; + sqlite3_mutex_enter(p->db->mutex); + z = sqlite3VdbeExpandSql(p, zSql); + sqlite3_mutex_leave(p->db->mutex); + } + return z; +#endif +} + +#ifdef SQLITE_ENABLE_NORMALIZE +/* +** Return the normalized SQL associated with a prepared statement. +*/ +SQLITE_API const char *sqlite3_normalized_sql(sqlite3_stmt *pStmt){ + Vdbe *p = (Vdbe *)pStmt; + if( p==0 ) return 0; + if( p->zNormSql==0 && ALWAYS(p->zSql!=0) ){ + sqlite3_mutex_enter(p->db->mutex); + p->zNormSql = sqlite3Normalize(p, p->zSql); + sqlite3_mutex_leave(p->db->mutex); + } + return p->zNormSql; +} +#endif /* SQLITE_ENABLE_NORMALIZE */ + +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK +/* +** Allocate and populate an UnpackedRecord structure based on the serialized +** record in nKey/pKey. Return a pointer to the new UnpackedRecord structure +** if successful, or a NULL pointer if an OOM error is encountered. +*/ +static UnpackedRecord *vdbeUnpackRecord( + KeyInfo *pKeyInfo, + int nKey, + const void *pKey +){ + UnpackedRecord *pRet; /* Return value */ + + pRet = sqlite3VdbeAllocUnpackedRecord(pKeyInfo); + if( pRet ){ + memset(pRet->aMem, 0, sizeof(Mem)*(pKeyInfo->nKeyField+1)); + sqlite3VdbeRecordUnpack(nKey, pKey, pRet); + } + return pRet; +} + +/* +** This function is called from within a pre-update callback to retrieve +** a field of the row currently being updated or deleted. +*/ +SQLITE_API int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppValue){ + PreUpdate *p; + Mem *pMem; + int rc = SQLITE_OK; + int iStore = 0; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( db==0 || ppValue==0 ){ + return SQLITE_MISUSE_BKPT; + } +#endif + p = db->pPreUpdate; + /* Test that this call is being made from within an SQLITE_DELETE or + ** SQLITE_UPDATE pre-update callback, and that iIdx is within range. */ + if( !p || p->op==SQLITE_INSERT ){ + rc = SQLITE_MISUSE_BKPT; + goto preupdate_old_out; + } + if( p->pPk ){ + iStore = sqlite3TableColumnToIndex(p->pPk, iIdx); + }else if( iIdx >= p->pTab->nCol ){ + rc = SQLITE_MISUSE_BKPT; + goto preupdate_old_out; + }else{ + iStore = sqlite3TableColumnToStorage(p->pTab, iIdx); + } + if( iStore>=p->pCsr->nField || iStore<0 ){ + rc = SQLITE_RANGE; + goto preupdate_old_out; + } + + if( iIdx==p->pTab->iPKey ){ + *ppValue = pMem = &p->oldipk; + sqlite3VdbeMemSetInt64(pMem, p->iKey1); + }else{ + + /* If the old.* record has not yet been loaded into memory, do so now. */ + if( p->pUnpacked==0 ){ + u32 nRec; + u8 *aRec; + + assert( p->pCsr->eCurType==CURTYPE_BTREE ); + nRec = sqlite3BtreePayloadSize(p->pCsr->uc.pCursor); + aRec = sqlite3DbMallocRaw(db, nRec); + if( !aRec ) goto preupdate_old_out; + rc = sqlite3BtreePayload(p->pCsr->uc.pCursor, 0, nRec, aRec); + if( rc==SQLITE_OK ){ + p->pUnpacked = vdbeUnpackRecord(p->pKeyinfo, nRec, aRec); + if( !p->pUnpacked ) rc = SQLITE_NOMEM; + } + if( rc!=SQLITE_OK ){ + sqlite3DbFree(db, aRec); + goto preupdate_old_out; + } + p->aRecord = aRec; + } + + pMem = *ppValue = &p->pUnpacked->aMem[iStore]; + if( iStore>=p->pUnpacked->nField ){ + /* This occurs when the table has been extended using ALTER TABLE + ** ADD COLUMN. The value to return is the default value of the column. */ + Column *pCol = &p->pTab->aCol[iIdx]; + if( pCol->iDflt>0 ){ + if( p->apDflt==0 ){ + int nByte; + assert( sizeof(sqlite3_value*)*UMXV(p->pTab->nCol) < 0x7fffffff ); + nByte = sizeof(sqlite3_value*)*p->pTab->nCol; + p->apDflt = (sqlite3_value**)sqlite3DbMallocZero(db, nByte); + if( p->apDflt==0 ) goto preupdate_old_out; + } + if( p->apDflt[iIdx]==0 ){ + sqlite3_value *pVal = 0; + Expr *pDflt; + assert( p->pTab!=0 && IsOrdinaryTable(p->pTab) ); + pDflt = p->pTab->u.tab.pDfltList->a[pCol->iDflt-1].pExpr; + rc = sqlite3ValueFromExpr(db, pDflt, ENC(db), pCol->affinity, &pVal); + if( rc==SQLITE_OK && pVal==0 ){ + rc = SQLITE_CORRUPT_BKPT; + } + p->apDflt[iIdx] = pVal; + } + *ppValue = p->apDflt[iIdx]; + }else{ + *ppValue = (sqlite3_value *)columnNullValue(); + } + }else if( p->pTab->aCol[iIdx].affinity==SQLITE_AFF_REAL ){ + if( pMem->flags & (MEM_Int|MEM_IntReal) ){ + testcase( pMem->flags & MEM_Int ); + testcase( pMem->flags & MEM_IntReal ); + sqlite3VdbeMemRealify(pMem); + } + } + } + + preupdate_old_out: + sqlite3Error(db, rc); + return sqlite3ApiExit(db, rc); +} +#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ + +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK +/* +** This function is called from within a pre-update callback to retrieve +** the number of columns in the row being updated, deleted or inserted. +*/ +SQLITE_API int sqlite3_preupdate_count(sqlite3 *db){ + PreUpdate *p; +#ifdef SQLITE_ENABLE_API_ARMOR + p = db!=0 ? db->pPreUpdate : 0; +#else + p = db->pPreUpdate; +#endif + return (p ? p->pKeyinfo->nKeyField : 0); +} +#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ + +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK +/* +** This function is designed to be called from within a pre-update callback +** only. It returns zero if the change that caused the callback was made +** immediately by a user SQL statement. Or, if the change was made by a +** trigger program, it returns the number of trigger programs currently +** on the stack (1 for a top-level trigger, 2 for a trigger fired by a +** top-level trigger etc.). +** +** For the purposes of the previous paragraph, a foreign key CASCADE, SET NULL +** or SET DEFAULT action is considered a trigger. +*/ +SQLITE_API int sqlite3_preupdate_depth(sqlite3 *db){ + PreUpdate *p; +#ifdef SQLITE_ENABLE_API_ARMOR + p = db!=0 ? db->pPreUpdate : 0; +#else + p = db->pPreUpdate; +#endif + return (p ? p->v->nFrame : 0); +} +#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ + +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK +/* +** This function is designed to be called from within a pre-update callback +** only. +*/ +SQLITE_API int sqlite3_preupdate_blobwrite(sqlite3 *db){ + PreUpdate *p; +#ifdef SQLITE_ENABLE_API_ARMOR + p = db!=0 ? db->pPreUpdate : 0; +#else + p = db->pPreUpdate; +#endif + return (p ? p->iBlobWrite : -1); +} +#endif + +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK +/* +** This function is called from within a pre-update callback to retrieve +** a field of the row currently being updated or inserted. +*/ +SQLITE_API int sqlite3_preupdate_new(sqlite3 *db, int iIdx, sqlite3_value **ppValue){ + PreUpdate *p; + int rc = SQLITE_OK; + Mem *pMem; + int iStore = 0; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( db==0 || ppValue==0 ){ + return SQLITE_MISUSE_BKPT; + } +#endif + p = db->pPreUpdate; + if( !p || p->op==SQLITE_DELETE ){ + rc = SQLITE_MISUSE_BKPT; + goto preupdate_new_out; + } + if( p->pPk && p->op!=SQLITE_UPDATE ){ + iStore = sqlite3TableColumnToIndex(p->pPk, iIdx); + }else if( iIdx >= p->pTab->nCol ){ + return SQLITE_MISUSE_BKPT; + }else{ + iStore = sqlite3TableColumnToStorage(p->pTab, iIdx); + } + + if( iStore>=p->pCsr->nField || iStore<0 ){ + rc = SQLITE_RANGE; + goto preupdate_new_out; + } + + if( p->op==SQLITE_INSERT ){ + /* For an INSERT, memory cell p->iNewReg contains the serialized record + ** that is being inserted. Deserialize it. */ + UnpackedRecord *pUnpack = p->pNewUnpacked; + if( !pUnpack ){ + Mem *pData = &p->v->aMem[p->iNewReg]; + rc = ExpandBlob(pData); + if( rc!=SQLITE_OK ) goto preupdate_new_out; + pUnpack = vdbeUnpackRecord(p->pKeyinfo, pData->n, pData->z); + if( !pUnpack ){ + rc = SQLITE_NOMEM; + goto preupdate_new_out; + } + p->pNewUnpacked = pUnpack; + } + pMem = &pUnpack->aMem[iStore]; + if( iIdx==p->pTab->iPKey ){ + sqlite3VdbeMemSetInt64(pMem, p->iKey2); + }else if( iStore>=pUnpack->nField ){ + pMem = (sqlite3_value *)columnNullValue(); + } + }else{ + /* For an UPDATE, memory cell (p->iNewReg+1+iStore) contains the required + ** value. Make a copy of the cell contents and return a pointer to it. + ** It is not safe to return a pointer to the memory cell itself as the + ** caller may modify the value text encoding. + */ + assert( p->op==SQLITE_UPDATE ); + if( !p->aNew ){ + assert( sizeof(Mem)*UMXV(p->pCsr->nField) < 0x7fffffff ); + p->aNew = (Mem *)sqlite3DbMallocZero(db, sizeof(Mem)*p->pCsr->nField); + if( !p->aNew ){ + rc = SQLITE_NOMEM; + goto preupdate_new_out; + } + } + assert( iStore>=0 && iStorepCsr->nField ); + pMem = &p->aNew[iStore]; + if( pMem->flags==0 ){ + if( iIdx==p->pTab->iPKey ){ + sqlite3VdbeMemSetInt64(pMem, p->iKey2); + }else{ + rc = sqlite3VdbeMemCopy(pMem, &p->v->aMem[p->iNewReg+1+iStore]); + if( rc!=SQLITE_OK ) goto preupdate_new_out; + } + } + } + *ppValue = pMem; + + preupdate_new_out: + sqlite3Error(db, rc); + return sqlite3ApiExit(db, rc); +} +#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ + +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS +/* +** Return status data for a single loop within query pStmt. +*/ +SQLITE_API int sqlite3_stmt_scanstatus_v2( + sqlite3_stmt *pStmt, /* Prepared statement being queried */ + int iScan, /* Index of loop to report on */ + int iScanStatusOp, /* Which metric to return */ + int flags, + void *pOut /* OUT: Write the answer here */ +){ + Vdbe *p = (Vdbe*)pStmt; + VdbeOp *aOp; + int nOp; + ScanStatus *pScan = 0; + int idx; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( p==0 || pOut==0 + || iScanStatusOpSQLITE_SCANSTAT_NCYCLE ){ + return 1; + } +#endif + aOp = p->aOp; + nOp = p->nOp; + if( p->pFrame ){ + VdbeFrame *pFrame; + for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent); + aOp = pFrame->aOp; + nOp = pFrame->nOp; + } + + if( iScan<0 ){ + int ii; + if( iScanStatusOp==SQLITE_SCANSTAT_NCYCLE ){ + i64 res = 0; + for(ii=0; iinScan; idx++){ + pScan = &p->aScan[idx]; + if( pScan->zName ){ + iScan--; + if( iScan<0 ) break; + } + } + } + if( idx>=p->nScan ) return 1; + assert( pScan==0 || pScan==&p->aScan[idx] ); + pScan = &p->aScan[idx]; + + switch( iScanStatusOp ){ + case SQLITE_SCANSTAT_NLOOP: { + if( pScan->addrLoop>0 ){ + *(sqlite3_int64*)pOut = aOp[pScan->addrLoop].nExec; + }else{ + *(sqlite3_int64*)pOut = -1; + } + break; + } + case SQLITE_SCANSTAT_NVISIT: { + if( pScan->addrVisit>0 ){ + *(sqlite3_int64*)pOut = aOp[pScan->addrVisit].nExec; + }else{ + *(sqlite3_int64*)pOut = -1; + } + break; + } + case SQLITE_SCANSTAT_EST: { + double r = 1.0; + LogEst x = pScan->nEst; + while( x<100 ){ + x += 10; + r *= 0.5; + } + *(double*)pOut = r*sqlite3LogEstToInt(x); + break; + } + case SQLITE_SCANSTAT_NAME: { + *(const char**)pOut = pScan->zName; + break; + } + case SQLITE_SCANSTAT_EXPLAIN: { + if( pScan->addrExplain ){ + *(const char**)pOut = aOp[ pScan->addrExplain ].p4.z; + }else{ + *(const char**)pOut = 0; + } + break; + } + case SQLITE_SCANSTAT_SELECTID: { + if( pScan->addrExplain ){ + *(int*)pOut = aOp[ pScan->addrExplain ].p1; + }else{ + *(int*)pOut = -1; + } + break; + } + case SQLITE_SCANSTAT_PARENTID: { + if( pScan->addrExplain ){ + *(int*)pOut = aOp[ pScan->addrExplain ].p2; + }else{ + *(int*)pOut = -1; + } + break; + } + case SQLITE_SCANSTAT_NCYCLE: { + i64 res = 0; + if( pScan->aAddrRange[0]==0 ){ + res = -1; + }else{ + int ii; + for(ii=0; iiaAddrRange); ii+=2){ + int iIns = pScan->aAddrRange[ii]; + int iEnd = pScan->aAddrRange[ii+1]; + if( iIns==0 ) break; + if( iIns>0 ){ + while( iIns<=iEnd ){ + res += aOp[iIns].nCycle; + iIns++; + } + }else{ + int iOp; + for(iOp=0; iOpp1!=iEnd ) continue; + if( (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_NCYCLE)==0 ){ + continue; + } + res += aOp[iOp].nCycle; + } + } + } + } + *(i64*)pOut = res; + break; + } + default: { + return 1; + } + } + return 0; +} + +/* +** Return status data for a single loop within query pStmt. +*/ +SQLITE_API int sqlite3_stmt_scanstatus( + sqlite3_stmt *pStmt, /* Prepared statement being queried */ + int iScan, /* Index of loop to report on */ + int iScanStatusOp, /* Which metric to return */ + void *pOut /* OUT: Write the answer here */ +){ + return sqlite3_stmt_scanstatus_v2(pStmt, iScan, iScanStatusOp, 0, pOut); +} + +/* +** Zero all counters associated with the sqlite3_stmt_scanstatus() data. +*/ +SQLITE_API void sqlite3_stmt_scanstatus_reset(sqlite3_stmt *pStmt){ + Vdbe *p = (Vdbe*)pStmt; + int ii; + for(ii=0; p!=0 && iinOp; ii++){ + Op *pOp = &p->aOp[ii]; + pOp->nExec = 0; + pOp->nCycle = 0; + } +} +#endif /* SQLITE_ENABLE_STMT_SCANSTATUS */ + +/************** End of vdbeapi.c *********************************************/ +/************** Begin file vdbetrace.c ***************************************/ +/* +** 2009 November 25 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file contains code used to insert the values of host parameters +** (aka "wildcards") into the SQL text output by sqlite3_trace(). +** +** The Vdbe parse-tree explainer is also found here. +*/ +/* #include "sqliteInt.h" */ +/* #include "vdbeInt.h" */ + +#ifndef SQLITE_OMIT_TRACE + +/* +** zSql is a zero-terminated string of UTF-8 SQL text. Return the number of +** bytes in this text up to but excluding the first character in +** a host parameter. If the text contains no host parameters, return +** the total number of bytes in the text. +*/ +static i64 findNextHostParameter(const char *zSql, i64 *pnToken){ + int tokenType; + i64 nTotal = 0; + i64 n; + + *pnToken = 0; + while( zSql[0] ){ + n = sqlite3GetToken((u8*)zSql, &tokenType); + assert( n>0 && tokenType!=TK_ILLEGAL ); + if( tokenType==TK_VARIABLE ){ + *pnToken = n; + break; + } + nTotal += n; + zSql += n; + } + return nTotal; +} + +/* +** This function returns a pointer to a nul-terminated string in memory +** obtained from sqlite3DbMalloc(). If sqlite3.nVdbeExec is 1, then the +** string contains a copy of zRawSql but with host parameters expanded to +** their current bindings. Or, if sqlite3.nVdbeExec is greater than 1, +** then the returned string holds a copy of zRawSql with "-- " prepended +** to each line of text. +** +** If the SQLITE_TRACE_SIZE_LIMIT macro is defined to an integer, then +** then long strings and blobs are truncated to that many bytes. This +** can be used to prevent unreasonably large trace strings when dealing +** with large (multi-megabyte) strings and blobs. +** +** The calling function is responsible for making sure the memory returned +** is eventually freed. +** +** ALGORITHM: Scan the input string looking for host parameters in any of +** these forms: ?, ?N, $A, @A, :A. Take care to avoid text within +** string literals, quoted identifier names, and comments. For text forms, +** the host parameter index is found by scanning the prepared +** statement for the corresponding OP_Variable opcode. Once the host +** parameter index is known, locate the value in p->aVar[]. Then render +** the value as a literal in place of the host parameter name. +*/ +SQLITE_PRIVATE char *sqlite3VdbeExpandSql( + Vdbe *p, /* The prepared statement being evaluated */ + const char *zRawSql /* Raw text of the SQL statement */ +){ + sqlite3 *db; /* The database connection */ + int idx = 0; /* Index of a host parameter */ + int nextIndex = 1; /* Index of next ? host parameter */ + i64 n; /* Length of a token prefix */ + i64 nToken; /* Length of the parameter token */ + int i; /* Loop counter */ + Mem *pVar; /* Value of a host parameter */ + StrAccum out; /* Accumulate the output here */ +#ifndef SQLITE_OMIT_UTF16 + Mem utf8; /* Used to convert UTF16 into UTF8 for display */ +#endif + + db = p->db; + sqlite3StrAccumInit(&out, 0, 0, 0, db->aLimit[SQLITE_LIMIT_LENGTH]); + if( db->nVdbeExec>1 ){ + while( *zRawSql ){ + const char *zStart = zRawSql; + while( *(zRawSql++)!='\n' && *zRawSql ); + sqlite3_str_append(&out, "-- ", 3); + assert( (zRawSql - zStart) > 0 ); + sqlite3_str_append(&out, zStart, (int)(zRawSql-zStart)); + } + }else if( p->nVar==0 ){ + sqlite3_str_append(&out, zRawSql, sqlite3Strlen30(zRawSql)); + }else{ + while( zRawSql[0] ){ + n = findNextHostParameter(zRawSql, &nToken); + assert( n>0 ); + sqlite3_str_append(&out, zRawSql, n); + zRawSql += n; + assert( zRawSql[0] || nToken==0 ); + if( nToken==0 ) break; + if( zRawSql[0]=='?' ){ + if( nToken>1 ){ + assert( sqlite3Isdigit(zRawSql[1]) ); + sqlite3GetInt32(&zRawSql[1], &idx); + }else{ + idx = nextIndex; + } + }else{ + assert( zRawSql[0]==':' || zRawSql[0]=='$' || + zRawSql[0]=='@' || zRawSql[0]=='#' ); + testcase( zRawSql[0]==':' ); + testcase( zRawSql[0]=='$' ); + testcase( zRawSql[0]=='@' ); + testcase( zRawSql[0]=='#' ); + idx = sqlite3VdbeParameterIndex(p, zRawSql, nToken); + assert( idx>0 ); + } + zRawSql += nToken; + nextIndex = MAX(idx + 1, nextIndex); + assert( idx>0 && idx<=p->nVar ); + pVar = &p->aVar[idx-1]; + if( pVar->flags & MEM_Null ){ + sqlite3_str_append(&out, "NULL", 4); + }else if( pVar->flags & (MEM_Int|MEM_IntReal) ){ + sqlite3_str_appendf(&out, "%lld", pVar->u.i); + }else if( pVar->flags & MEM_Real ){ + sqlite3_str_appendf(&out, "%!.15g", pVar->u.r); + }else if( pVar->flags & MEM_Str ){ + int nOut; /* Number of bytes of the string text to include in output */ +#ifndef SQLITE_OMIT_UTF16 + u8 enc = ENC(db); + if( enc!=SQLITE_UTF8 ){ + memset(&utf8, 0, sizeof(utf8)); + utf8.db = db; + sqlite3VdbeMemSetStr(&utf8, pVar->z, pVar->n, enc, SQLITE_STATIC); + if( SQLITE_NOMEM==sqlite3VdbeChangeEncoding(&utf8, SQLITE_UTF8) ){ + out.accError = SQLITE_NOMEM; + out.nAlloc = 0; + } + pVar = &utf8; + } +#endif + nOut = pVar->n; +#ifdef SQLITE_TRACE_SIZE_LIMIT + if( nOut>SQLITE_TRACE_SIZE_LIMIT ){ + nOut = SQLITE_TRACE_SIZE_LIMIT; + while( nOutn && (pVar->z[nOut]&0xc0)==0x80 ){ nOut++; } + } +#endif + sqlite3_str_appendf(&out, "'%.*q'", nOut, pVar->z); +#ifdef SQLITE_TRACE_SIZE_LIMIT + if( nOutn ){ + sqlite3_str_appendf(&out, "/*+%d bytes*/", pVar->n-nOut); + } +#endif +#ifndef SQLITE_OMIT_UTF16 + if( enc!=SQLITE_UTF8 ) sqlite3VdbeMemRelease(&utf8); +#endif + }else if( pVar->flags & MEM_Zero ){ + sqlite3_str_appendf(&out, "zeroblob(%d)", pVar->u.nZero); + }else{ + int nOut; /* Number of bytes of the blob to include in output */ + assert( pVar->flags & MEM_Blob ); + sqlite3_str_append(&out, "x'", 2); + nOut = pVar->n; +#ifdef SQLITE_TRACE_SIZE_LIMIT + if( nOut>SQLITE_TRACE_SIZE_LIMIT ) nOut = SQLITE_TRACE_SIZE_LIMIT; +#endif + for(i=0; iz[i]&0xff); + } + sqlite3_str_append(&out, "'", 1); +#ifdef SQLITE_TRACE_SIZE_LIMIT + if( nOutn ){ + sqlite3_str_appendf(&out, "/*+%d bytes*/", pVar->n-nOut); + } +#endif + } + } + } + if( out.accError ) sqlite3_str_reset(&out); + return sqlite3StrAccumFinish(&out); +} + +#endif /* #ifndef SQLITE_OMIT_TRACE */ + +/************** End of vdbetrace.c *******************************************/ +/************** Begin file vdbe.c ********************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** The code in this file implements the function that runs the +** bytecode of a prepared statement. +** +** Various scripts scan this source file in order to generate HTML +** documentation, headers files, or other derived files. The formatting +** of the code in this file is, therefore, important. See other comments +** in this file for details. If in doubt, do not deviate from existing +** commenting and indentation practices when changing or adding code. +*/ +/* #include "sqliteInt.h" */ +/* #include "vdbeInt.h" */ + +/* +** High-resolution hardware timer used for debugging and testing only. +*/ +#if defined(VDBE_PROFILE) \ + || defined(SQLITE_PERFORMANCE_TRACE) \ + || defined(SQLITE_ENABLE_STMT_SCANSTATUS) +/************** Include hwtime.h in the middle of vdbe.c *********************/ +/************** Begin file hwtime.h ******************************************/ +/* +** 2008 May 27 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This file contains inline asm code for retrieving "high-performance" +** counters for x86 and x86_64 class CPUs. +*/ +#ifndef SQLITE_HWTIME_H +#define SQLITE_HWTIME_H + +/* +** The following routine only works on Pentium-class (or newer) processors. +** It uses the RDTSC opcode to read the cycle count value out of the +** processor and returns that value. This can be used for high-res +** profiling. +*/ +#if !defined(__STRICT_ANSI__) && \ + (defined(__GNUC__) || defined(_MSC_VER)) && \ + (defined(i386) || defined(__i386__) || defined(_M_IX86)) + + #if defined(__GNUC__) + + __inline__ sqlite_uint64 sqlite3Hwtime(void){ + unsigned int lo, hi; + __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi)); + return (sqlite_uint64)hi << 32 | lo; + } + + #elif defined(_MSC_VER) + + __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){ + __asm { + rdtsc + ret ; return value at EDX:EAX + } + } + + #endif + +#elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__x86_64__)) + + __inline__ sqlite_uint64 sqlite3Hwtime(void){ + unsigned int lo, hi; + __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi)); + return (sqlite_uint64)hi << 32 | lo; + } + +#elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__ppc__)) + + __inline__ sqlite_uint64 sqlite3Hwtime(void){ + unsigned long long retval; + unsigned long junk; + __asm__ __volatile__ ("\n\ + 1: mftbu %1\n\ + mftb %L0\n\ + mftbu %0\n\ + cmpw %0,%1\n\ + bne 1b" + : "=r" (retval), "=r" (junk)); + return retval; + } + +#else + + /* + ** asm() is needed for hardware timing support. Without asm(), + ** disable the sqlite3Hwtime() routine. + ** + ** sqlite3Hwtime() is only used for some obscure debugging + ** and analysis configurations, not in any deliverable, so this + ** should not be a great loss. + */ +SQLITE_PRIVATE sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); } + +#endif + +#endif /* !defined(SQLITE_HWTIME_H) */ + +/************** End of hwtime.h **********************************************/ +/************** Continuing where we left off in vdbe.c ***********************/ +#endif + +/* +** Invoke this macro on memory cells just prior to changing the +** value of the cell. This macro verifies that shallow copies are +** not misused. A shallow copy of a string or blob just copies a +** pointer to the string or blob, not the content. If the original +** is changed while the copy is still in use, the string or blob might +** be changed out from under the copy. This macro verifies that nothing +** like that ever happens. +*/ +#ifdef SQLITE_DEBUG +# define memAboutToChange(P,M) sqlite3VdbeMemAboutToChange(P,M) +#else +# define memAboutToChange(P,M) +#endif + +/* +** The following global variable is incremented every time a cursor +** moves, either by the OP_SeekXX, OP_Next, or OP_Prev opcodes. The test +** procedures use this information to make sure that indices are +** working correctly. This variable has no function other than to +** help verify the correct operation of the library. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_search_count = 0; +#endif + +/* +** When this global variable is positive, it gets decremented once before +** each instruction in the VDBE. When it reaches zero, the u1.isInterrupted +** field of the sqlite3 structure is set in order to simulate an interrupt. +** +** This facility is used for testing purposes only. It does not function +** in an ordinary build. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_interrupt_count = 0; +#endif + +/* +** The next global variable is incremented each type the OP_Sort opcode +** is executed. The test procedures use this information to make sure that +** sorting is occurring or not occurring at appropriate times. This variable +** has no function other than to help verify the correct operation of the +** library. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_sort_count = 0; +#endif + +/* +** The next global variable records the size of the largest MEM_Blob +** or MEM_Str that has been used by a VDBE opcode. The test procedures +** use this information to make sure that the zero-blob functionality +** is working correctly. This variable has no function other than to +** help verify the correct operation of the library. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_max_blobsize = 0; +static void updateMaxBlobsize(Mem *p){ + if( (p->flags & (MEM_Str|MEM_Blob))!=0 && p->n>sqlite3_max_blobsize ){ + sqlite3_max_blobsize = p->n; + } +} +#endif + +/* +** This macro evaluates to true if either the update hook or the preupdate +** hook are enabled for database connect DB. +*/ +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK +# define HAS_UPDATE_HOOK(DB) ((DB)->xPreUpdateCallback||(DB)->xUpdateCallback) +#else +# define HAS_UPDATE_HOOK(DB) ((DB)->xUpdateCallback) +#endif + +/* +** The next global variable is incremented each time the OP_Found opcode +** is executed. This is used to test whether or not the foreign key +** operation implemented using OP_FkIsZero is working. This variable +** has no function other than to help verify the correct operation of the +** library. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_found_count = 0; +#endif + +/* +** Test a register to see if it exceeds the current maximum blob size. +** If it does, record the new maximum blob size. +*/ +#if defined(SQLITE_TEST) && !defined(SQLITE_UNTESTABLE) +# define UPDATE_MAX_BLOBSIZE(P) updateMaxBlobsize(P) +#else +# define UPDATE_MAX_BLOBSIZE(P) +#endif + +#ifdef SQLITE_DEBUG +/* This routine provides a convenient place to set a breakpoint during +** tracing with PRAGMA vdbe_trace=on. The breakpoint fires right after +** each opcode is printed. Variables "pc" (program counter) and pOp are +** available to add conditionals to the breakpoint. GDB example: +** +** break test_trace_breakpoint if pc=22 +** +** Other useful labels for breakpoints include: +** test_addop_breakpoint(pc,pOp) +** sqlite3CorruptError(lineno) +** sqlite3MisuseError(lineno) +** sqlite3CantopenError(lineno) +*/ +static void test_trace_breakpoint(int pc, Op *pOp, Vdbe *v){ + static u64 n = 0; + (void)pc; + (void)pOp; + (void)v; + n++; + if( n==LARGEST_UINT64 ) abort(); /* So that n is used, preventing a warning */ +} +#endif + +/* +** Invoke the VDBE coverage callback, if that callback is defined. This +** feature is used for test suite validation only and does not appear an +** production builds. +** +** M is the type of branch. I is the direction taken for this instance of +** the branch. +** +** M: 2 - two-way branch (I=0: fall-thru 1: jump ) +** 3 - two-way + NULL (I=0: fall-thru 1: jump 2: NULL ) +** 4 - OP_Jump (I=0: jump p1 1: jump p2 2: jump p3) +** +** In other words, if M is 2, then I is either 0 (for fall-through) or +** 1 (for when the branch is taken). If M is 3, the I is 0 for an +** ordinary fall-through, I is 1 if the branch was taken, and I is 2 +** if the result of comparison is NULL. For M=3, I=2 the jump may or +** may not be taken, depending on the SQLITE_JUMPIFNULL flags in p5. +** When M is 4, that means that an OP_Jump is being run. I is 0, 1, or 2 +** depending on if the operands are less than, equal, or greater than. +** +** iSrcLine is the source code line (from the __LINE__ macro) that +** generated the VDBE instruction combined with flag bits. The source +** code line number is in the lower 24 bits of iSrcLine and the upper +** 8 bytes are flags. The lower three bits of the flags indicate +** values for I that should never occur. For example, if the branch is +** always taken, the flags should be 0x05 since the fall-through and +** alternate branch are never taken. If a branch is never taken then +** flags should be 0x06 since only the fall-through approach is allowed. +** +** Bit 0x08 of the flags indicates an OP_Jump opcode that is only +** interested in equal or not-equal. In other words, I==0 and I==2 +** should be treated as equivalent +** +** Since only a line number is retained, not the filename, this macro +** only works for amalgamation builds. But that is ok, since these macros +** should be no-ops except for special builds used to measure test coverage. +*/ +#if !defined(SQLITE_VDBE_COVERAGE) +# define VdbeBranchTaken(I,M) +#else +# define VdbeBranchTaken(I,M) vdbeTakeBranch(pOp->iSrcLine,I,M) + static void vdbeTakeBranch(u32 iSrcLine, u8 I, u8 M){ + u8 mNever; + assert( I<=2 ); /* 0: fall through, 1: taken, 2: alternate taken */ + assert( M<=4 ); /* 2: two-way branch, 3: three-way branch, 4: OP_Jump */ + assert( I> 24; + assert( (I & mNever)==0 ); + if( sqlite3GlobalConfig.xVdbeBranch==0 ) return; /*NO_TEST*/ + /* Invoke the branch coverage callback with three arguments: + ** iSrcLine - the line number of the VdbeCoverage() macro, with + ** flags removed. + ** I - Mask of bits 0x07 indicating which cases are are + ** fulfilled by this instance of the jump. 0x01 means + ** fall-thru, 0x02 means taken, 0x04 means NULL. Any + ** impossible cases (ex: if the comparison is never NULL) + ** are filled in automatically so that the coverage + ** measurement logic does not flag those impossible cases + ** as missed coverage. + ** M - Type of jump. Same as M argument above + */ + I |= mNever; + if( M==2 ) I |= 0x04; + if( M==4 ){ + I |= 0x08; + if( (mNever&0x08)!=0 && (I&0x05)!=0) I |= 0x05; /*NO_TEST*/ + } + sqlite3GlobalConfig.xVdbeBranch(sqlite3GlobalConfig.pVdbeBranchArg, + iSrcLine&0xffffff, I, M); + } +#endif + +/* +** An ephemeral string value (signified by the MEM_Ephem flag) contains +** a pointer to a dynamically allocated string where some other entity +** is responsible for deallocating that string. Because the register +** does not control the string, it might be deleted without the register +** knowing it. +** +** This routine converts an ephemeral string into a dynamically allocated +** string that the register itself controls. In other words, it +** converts an MEM_Ephem string into a string with P.z==P.zMalloc. +*/ +#define Deephemeralize(P) \ + if( ((P)->flags&MEM_Ephem)!=0 \ + && sqlite3VdbeMemMakeWriteable(P) ){ goto no_mem;} + +/* Return true if the cursor was opened using the OP_OpenSorter opcode. */ +#define isSorter(x) ((x)->eCurType==CURTYPE_SORTER) + +/* +** Allocate VdbeCursor number iCur. Return a pointer to it. Return NULL +** if we run out of memory. +*/ +static VdbeCursor *allocateCursor( + Vdbe *p, /* The virtual machine */ + int iCur, /* Index of the new VdbeCursor */ + int nField, /* Number of fields in the table or index */ + u8 eCurType /* Type of the new cursor */ +){ + /* Find the memory cell that will be used to store the blob of memory + ** required for this VdbeCursor structure. It is convenient to use a + ** vdbe memory cell to manage the memory allocation required for a + ** VdbeCursor structure for the following reasons: + ** + ** * Sometimes cursor numbers are used for a couple of different + ** purposes in a vdbe program. The different uses might require + ** different sized allocations. Memory cells provide growable + ** allocations. + ** + ** * When using ENABLE_MEMORY_MANAGEMENT, memory cell buffers can + ** be freed lazily via the sqlite3_release_memory() API. This + ** minimizes the number of malloc calls made by the system. + ** + ** The memory cell for cursor 0 is aMem[0]. The rest are allocated from + ** the top of the register space. Cursor 1 is at Mem[p->nMem-1]. + ** Cursor 2 is at Mem[p->nMem-2]. And so forth. + */ + Mem *pMem = iCur>0 ? &p->aMem[p->nMem-iCur] : p->aMem; + + i64 nByte; + VdbeCursor *pCx = 0; + nByte = SZ_VDBECURSOR(nField); + assert( ROUND8(nByte)==nByte ); + if( eCurType==CURTYPE_BTREE ) nByte += sqlite3BtreeCursorSize(); + + assert( iCur>=0 && iCurnCursor ); + if( p->apCsr[iCur] ){ /*OPTIMIZATION-IF-FALSE*/ + sqlite3VdbeFreeCursorNN(p, p->apCsr[iCur]); + p->apCsr[iCur] = 0; + } + + /* There used to be a call to sqlite3VdbeMemClearAndResize() to make sure + ** the pMem used to hold space for the cursor has enough storage available + ** in pMem->zMalloc. But for the special case of the aMem[] entries used + ** to hold cursors, it is faster to in-line the logic. */ + assert( pMem->flags==MEM_Undefined ); + assert( (pMem->flags & MEM_Dyn)==0 ); + assert( pMem->szMalloc==0 || pMem->z==pMem->zMalloc ); + if( pMem->szMallocszMalloc>0 ){ + sqlite3DbFreeNN(pMem->db, pMem->zMalloc); + } + pMem->z = pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, nByte); + if( pMem->zMalloc==0 ){ + pMem->szMalloc = 0; + return 0; + } + pMem->szMalloc = (int)nByte; + } + + p->apCsr[iCur] = pCx = (VdbeCursor*)pMem->zMalloc; + memset(pCx, 0, offsetof(VdbeCursor,pAltCursor)); + pCx->eCurType = eCurType; + pCx->nField = nField; + pCx->aOffset = &pCx->aType[nField]; + if( eCurType==CURTYPE_BTREE ){ + assert( ROUND8(SZ_VDBECURSOR(nField))==SZ_VDBECURSOR(nField) ); + pCx->uc.pCursor = (BtCursor*)&pMem->z[SZ_VDBECURSOR(nField)]; + sqlite3BtreeCursorZero(pCx->uc.pCursor); + } + return pCx; +} + +/* +** The string in pRec is known to look like an integer and to have a +** floating point value of rValue. Return true and set *piValue to the +** integer value if the string is in range to be an integer. Otherwise, +** return false. +*/ +static int alsoAnInt(Mem *pRec, double rValue, i64 *piValue){ + i64 iValue; + iValue = sqlite3RealToI64(rValue); + if( sqlite3RealSameAsInt(rValue,iValue) ){ + *piValue = iValue; + return 1; + } + return 0==sqlite3Atoi64(pRec->z, piValue, pRec->n, pRec->enc); +} + +/* +** Try to convert a value into a numeric representation if we can +** do so without loss of information. In other words, if the string +** looks like a number, convert it into a number. If it does not +** look like a number, leave it alone. +** +** If the bTryForInt flag is true, then extra effort is made to give +** an integer representation. Strings that look like floating point +** values but which have no fractional component (example: '48.00') +** will have a MEM_Int representation when bTryForInt is true. +** +** If bTryForInt is false, then if the input string contains a decimal +** point or exponential notation, the result is only MEM_Real, even +** if there is an exact integer representation of the quantity. +*/ +static void applyNumericAffinity(Mem *pRec, int bTryForInt){ + double rValue; + u8 enc = pRec->enc; + int rc; + assert( (pRec->flags & (MEM_Str|MEM_Int|MEM_Real|MEM_IntReal))==MEM_Str ); + rc = sqlite3AtoF(pRec->z, &rValue, pRec->n, enc); + if( rc<=0 ) return; + if( rc==1 && alsoAnInt(pRec, rValue, &pRec->u.i) ){ + pRec->flags |= MEM_Int; + }else{ + pRec->u.r = rValue; + pRec->flags |= MEM_Real; + if( bTryForInt ) sqlite3VdbeIntegerAffinity(pRec); + } + /* TEXT->NUMERIC is many->one. Hence, it is important to invalidate the + ** string representation after computing a numeric equivalent, because the + ** string representation might not be the canonical representation for the + ** numeric value. Ticket [343634942dd54ab57b7024] 2018-01-31. */ + pRec->flags &= ~MEM_Str; +} + +/* +** Processing is determine by the affinity parameter: +** +** SQLITE_AFF_INTEGER: +** SQLITE_AFF_REAL: +** SQLITE_AFF_NUMERIC: +** Try to convert pRec to an integer representation or a +** floating-point representation if an integer representation +** is not possible. Note that the integer representation is +** always preferred, even if the affinity is REAL, because +** an integer representation is more space efficient on disk. +** +** SQLITE_AFF_FLEXNUM: +** If the value is text, then try to convert it into a number of +** some kind (integer or real) but do not make any other changes. +** +** SQLITE_AFF_TEXT: +** Convert pRec to a text representation. +** +** SQLITE_AFF_BLOB: +** SQLITE_AFF_NONE: +** No-op. pRec is unchanged. +*/ +static void applyAffinity( + Mem *pRec, /* The value to apply affinity to */ + char affinity, /* The affinity to be applied */ + u8 enc /* Use this text encoding */ +){ + if( affinity>=SQLITE_AFF_NUMERIC ){ + assert( affinity==SQLITE_AFF_INTEGER || affinity==SQLITE_AFF_REAL + || affinity==SQLITE_AFF_NUMERIC || affinity==SQLITE_AFF_FLEXNUM ); + if( (pRec->flags & MEM_Int)==0 ){ /*OPTIMIZATION-IF-FALSE*/ + if( (pRec->flags & (MEM_Real|MEM_IntReal))==0 ){ + if( pRec->flags & MEM_Str ) applyNumericAffinity(pRec,1); + }else if( affinity<=SQLITE_AFF_REAL ){ + sqlite3VdbeIntegerAffinity(pRec); + } + } + }else if( affinity==SQLITE_AFF_TEXT ){ + /* Only attempt the conversion to TEXT if there is an integer or real + ** representation (blob and NULL do not get converted) but no string + ** representation. It would be harmless to repeat the conversion if + ** there is already a string rep, but it is pointless to waste those + ** CPU cycles. */ + if( 0==(pRec->flags&MEM_Str) ){ /*OPTIMIZATION-IF-FALSE*/ + if( (pRec->flags&(MEM_Real|MEM_Int|MEM_IntReal)) ){ + testcase( pRec->flags & MEM_Int ); + testcase( pRec->flags & MEM_Real ); + testcase( pRec->flags & MEM_IntReal ); + sqlite3VdbeMemStringify(pRec, enc, 1); + } + } + pRec->flags &= ~(MEM_Real|MEM_Int|MEM_IntReal); + } +} + +/* +** Try to convert the type of a function argument or a result column +** into a numeric representation. Use either INTEGER or REAL whichever +** is appropriate. But only do the conversion if it is possible without +** loss of information and return the revised type of the argument. +*/ +SQLITE_API int sqlite3_value_numeric_type(sqlite3_value *pVal){ + int eType = sqlite3_value_type(pVal); + if( eType==SQLITE_TEXT ){ + Mem *pMem = (Mem*)pVal; + applyNumericAffinity(pMem, 0); + eType = sqlite3_value_type(pVal); + } + return eType; +} + +/* +** Exported version of applyAffinity(). This one works on sqlite3_value*, +** not the internal Mem* type. +*/ +SQLITE_PRIVATE void sqlite3ValueApplyAffinity( + sqlite3_value *pVal, + u8 affinity, + u8 enc +){ + applyAffinity((Mem *)pVal, affinity, enc); +} + +/* +** pMem currently only holds a string type (or maybe a BLOB that we can +** interpret as a string if we want to). Compute its corresponding +** numeric type, if has one. Set the pMem->u.r and pMem->u.i fields +** accordingly. +*/ +static u16 SQLITE_NOINLINE computeNumericType(Mem *pMem){ + int rc; + sqlite3_int64 ix; + assert( (pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal))==0 ); + assert( (pMem->flags & (MEM_Str|MEM_Blob))!=0 ); + if( ExpandBlob(pMem) ){ + pMem->u.i = 0; + return MEM_Int; + } + rc = sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc); + if( rc<=0 ){ + if( rc==0 && sqlite3Atoi64(pMem->z, &ix, pMem->n, pMem->enc)<=1 ){ + pMem->u.i = ix; + return MEM_Int; + }else{ + return MEM_Real; + } + }else if( rc==1 && sqlite3Atoi64(pMem->z, &ix, pMem->n, pMem->enc)==0 ){ + pMem->u.i = ix; + return MEM_Int; + } + return MEM_Real; +} + +/* +** Return the numeric type for pMem, either MEM_Int or MEM_Real or both or +** none. +** +** Unlike applyNumericAffinity(), this routine does not modify pMem->flags. +** But it does set pMem->u.r and pMem->u.i appropriately. +*/ +static u16 numericType(Mem *pMem){ + assert( (pMem->flags & MEM_Null)==0 + || pMem->db==0 || pMem->db->mallocFailed ); + if( pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Null) ){ + testcase( pMem->flags & MEM_Int ); + testcase( pMem->flags & MEM_Real ); + testcase( pMem->flags & MEM_IntReal ); + return pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Null); + } + assert( pMem->flags & (MEM_Str|MEM_Blob) ); + testcase( pMem->flags & MEM_Str ); + testcase( pMem->flags & MEM_Blob ); + return computeNumericType(pMem); + return 0; +} + +#ifdef SQLITE_DEBUG +/* +** Write a nice string representation of the contents of cell pMem +** into buffer zBuf, length nBuf. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemPrettyPrint(Mem *pMem, StrAccum *pStr){ + int f = pMem->flags; + static const char *const encnames[] = {"(X)", "(8)", "(16LE)", "(16BE)"}; + if( f&MEM_Blob ){ + int i; + char c; + if( f & MEM_Dyn ){ + c = 'z'; + assert( (f & (MEM_Static|MEM_Ephem))==0 ); + }else if( f & MEM_Static ){ + c = 't'; + assert( (f & (MEM_Dyn|MEM_Ephem))==0 ); + }else if( f & MEM_Ephem ){ + c = 'e'; + assert( (f & (MEM_Static|MEM_Dyn))==0 ); + }else{ + c = 's'; + } + sqlite3_str_appendf(pStr, "%cx[", c); + for(i=0; i<25 && in; i++){ + sqlite3_str_appendf(pStr, "%02X", ((int)pMem->z[i] & 0xFF)); + } + sqlite3_str_appendf(pStr, "|"); + for(i=0; i<25 && in; i++){ + char z = pMem->z[i]; + sqlite3_str_appendchar(pStr, 1, (z<32||z>126)?'.':z); + } + sqlite3_str_appendf(pStr,"]"); + if( f & MEM_Zero ){ + sqlite3_str_appendf(pStr, "+%dz",pMem->u.nZero); + } + }else if( f & MEM_Str ){ + int j; + u8 c; + if( f & MEM_Dyn ){ + c = 'z'; + assert( (f & (MEM_Static|MEM_Ephem))==0 ); + }else if( f & MEM_Static ){ + c = 't'; + assert( (f & (MEM_Dyn|MEM_Ephem))==0 ); + }else if( f & MEM_Ephem ){ + c = 'e'; + assert( (f & (MEM_Static|MEM_Dyn))==0 ); + }else{ + c = 's'; + } + sqlite3_str_appendf(pStr, " %c%d[", c, pMem->n); + for(j=0; j<25 && jn; j++){ + c = pMem->z[j]; + sqlite3_str_appendchar(pStr, 1, (c>=0x20&&c<=0x7f) ? c : '.'); + } + sqlite3_str_appendf(pStr, "]%s", encnames[pMem->enc]); + if( f & MEM_Term ){ + sqlite3_str_appendf(pStr, "(0-term)"); + } + } +} +#endif + +#ifdef SQLITE_DEBUG +/* +** Print the value of a register for tracing purposes: +*/ +static void memTracePrint(Mem *p){ + if( p->flags & MEM_Undefined ){ + printf(" undefined"); + }else if( p->flags & MEM_Null ){ + printf(p->flags & MEM_Zero ? " NULL-nochng" : " NULL"); + }else if( (p->flags & (MEM_Int|MEM_Str))==(MEM_Int|MEM_Str) ){ + printf(" si:%lld", p->u.i); + }else if( (p->flags & (MEM_IntReal))!=0 ){ + printf(" ir:%lld", p->u.i); + }else if( p->flags & MEM_Int ){ + printf(" i:%lld", p->u.i); +#ifndef SQLITE_OMIT_FLOATING_POINT + }else if( p->flags & MEM_Real ){ + printf(" r:%.17g", p->u.r); +#endif + }else if( sqlite3VdbeMemIsRowSet(p) ){ + printf(" (rowset)"); + }else{ + StrAccum acc; + char zBuf[1000]; + sqlite3StrAccumInit(&acc, 0, zBuf, sizeof(zBuf), 0); + sqlite3VdbeMemPrettyPrint(p, &acc); + printf(" %s", sqlite3StrAccumFinish(&acc)); + } + if( p->flags & MEM_Subtype ) printf(" subtype=0x%02x", p->eSubtype); +} +static void registerTrace(int iReg, Mem *p){ + printf("R[%d] = ", iReg); + memTracePrint(p); + if( p->pScopyFrom ){ + assert( p->pScopyFrom->bScopy ); + printf(" <== R[%d]", (int)(p->pScopyFrom - &p[-iReg])); + } + printf("\n"); + sqlite3VdbeCheckMemInvariants(p); +} +/**/ void sqlite3PrintMem(Mem *pMem){ + memTracePrint(pMem); + printf("\n"); + fflush(stdout); +} +#endif + +#ifdef SQLITE_DEBUG +/* +** Show the values of all registers in the virtual machine. Used for +** interactive debugging. +*/ +SQLITE_PRIVATE void sqlite3VdbeRegisterDump(Vdbe *v){ + int i; + for(i=1; inMem; i++) registerTrace(i, v->aMem+i); +} +#endif /* SQLITE_DEBUG */ + + +#ifdef SQLITE_DEBUG +# define REGISTER_TRACE(R,M) if(db->flags&SQLITE_VdbeTrace)registerTrace(R,M) +#else +# define REGISTER_TRACE(R,M) +#endif + +#ifndef NDEBUG +/* +** This function is only called from within an assert() expression. It +** checks that the sqlite3.nTransaction variable is correctly set to +** the number of non-transaction savepoints currently in the +** linked list starting at sqlite3.pSavepoint. +** +** Usage: +** +** assert( checkSavepointCount(db) ); +*/ +static int checkSavepointCount(sqlite3 *db){ + int n = 0; + Savepoint *p; + for(p=db->pSavepoint; p; p=p->pNext) n++; + assert( n==(db->nSavepoint + db->isTransactionSavepoint) ); + return 1; +} +#endif + +/* +** Return the register of pOp->p2 after first preparing it to be +** overwritten with an integer value. +*/ +static SQLITE_NOINLINE Mem *out2PrereleaseWithClear(Mem *pOut){ + sqlite3VdbeMemSetNull(pOut); + pOut->flags = MEM_Int; + return pOut; +} +static Mem *out2Prerelease(Vdbe *p, VdbeOp *pOp){ + Mem *pOut; + assert( pOp->p2>0 ); + assert( pOp->p2<=(p->nMem+1 - p->nCursor) ); + pOut = &p->aMem[pOp->p2]; + memAboutToChange(p, pOut); + if( VdbeMemDynamic(pOut) ){ /*OPTIMIZATION-IF-FALSE*/ + return out2PrereleaseWithClear(pOut); + }else{ + pOut->flags = MEM_Int; + return pOut; + } +} + +/* +** Compute a bloom filter hash using pOp->p4.i registers from aMem[] beginning +** with pOp->p3. Return the hash. +*/ +static u64 filterHash(const Mem *aMem, const Op *pOp){ + int i, mx; + u64 h = 0; + + assert( pOp->p4type==P4_INT32 ); + for(i=pOp->p3, mx=i+pOp->p4.i; iflags & (MEM_Int|MEM_IntReal) ){ + h += p->u.i; + }else if( p->flags & MEM_Real ){ + h += sqlite3VdbeIntValue(p); + }else if( p->flags & (MEM_Str|MEM_Blob) ){ + /* All strings have the same hash and all blobs have the same hash, + ** though, at least, those hashes are different from each other and + ** from NULL. */ + h += 4093 + (p->flags & (MEM_Str|MEM_Blob)); + } + } + return h; +} + + +/* +** For OP_Column, factor out the case where content is loaded from +** overflow pages, so that the code to implement this case is separate +** the common case where all content fits on the page. Factoring out +** the code reduces register pressure and helps the common case +** to run faster. +*/ +static SQLITE_NOINLINE int vdbeColumnFromOverflow( + VdbeCursor *pC, /* The BTree cursor from which we are reading */ + int iCol, /* The column to read */ + u32 t, /* The serial-type code for the column value */ + i64 iOffset, /* Offset to the start of the content value */ + u32 cacheStatus, /* Current Vdbe.cacheCtr value */ + u32 colCacheCtr, /* Current value of the column cache counter */ + Mem *pDest /* Store the value into this register. */ +){ + int rc; + sqlite3 *db = pDest->db; + int encoding = pDest->enc; + int len = sqlite3VdbeSerialTypeLen(t); + assert( pC->eCurType==CURTYPE_BTREE ); + if( len>db->aLimit[SQLITE_LIMIT_LENGTH] ) return SQLITE_TOOBIG; + if( len > 4000 && pC->pKeyInfo==0 ){ + /* Cache large column values that are on overflow pages using + ** an RCStr (reference counted string) so that if they are reloaded, + ** that do not have to be copied a second time. The overhead of + ** creating and managing the cache is such that this is only + ** profitable for larger TEXT and BLOB values. + ** + ** Only do this on table-btrees so that writes to index-btrees do not + ** need to clear the cache. This buys performance in the common case + ** in exchange for generality. + */ + VdbeTxtBlbCache *pCache; + char *pBuf; + if( pC->colCache==0 ){ + pC->pCache = sqlite3DbMallocZero(db, sizeof(VdbeTxtBlbCache) ); + if( pC->pCache==0 ) return SQLITE_NOMEM; + pC->colCache = 1; + } + pCache = pC->pCache; + if( pCache->pCValue==0 + || pCache->iCol!=iCol + || pCache->cacheStatus!=cacheStatus + || pCache->colCacheCtr!=colCacheCtr + || pCache->iOffset!=sqlite3BtreeOffset(pC->uc.pCursor) + ){ + if( pCache->pCValue ) sqlite3RCStrUnref(pCache->pCValue); + pBuf = pCache->pCValue = sqlite3RCStrNew( len+3 ); + if( pBuf==0 ) return SQLITE_NOMEM; + rc = sqlite3BtreePayload(pC->uc.pCursor, iOffset, len, pBuf); + if( rc ) return rc; + pBuf[len] = 0; + pBuf[len+1] = 0; + pBuf[len+2] = 0; + pCache->iCol = iCol; + pCache->cacheStatus = cacheStatus; + pCache->colCacheCtr = colCacheCtr; + pCache->iOffset = sqlite3BtreeOffset(pC->uc.pCursor); + }else{ + pBuf = pCache->pCValue; + } + assert( t>=12 ); + sqlite3RCStrRef(pBuf); + if( t&1 ){ + rc = sqlite3VdbeMemSetStr(pDest, pBuf, len, encoding, + sqlite3RCStrUnref); + pDest->flags |= MEM_Term; + }else{ + rc = sqlite3VdbeMemSetStr(pDest, pBuf, len, 0, + sqlite3RCStrUnref); + } + }else{ + rc = sqlite3VdbeMemFromBtree(pC->uc.pCursor, iOffset, len, pDest); + if( rc ) return rc; + sqlite3VdbeSerialGet((const u8*)pDest->z, t, pDest); + if( (t&1)!=0 && encoding==SQLITE_UTF8 ){ + pDest->z[len] = 0; + pDest->flags |= MEM_Term; + } + } + pDest->flags &= ~MEM_Ephem; + return rc; +} + +/* +** Send a "statement aborts" message to the error log. +*/ +static SQLITE_NOINLINE void sqlite3VdbeLogAbort( + Vdbe *p, /* The statement that is running at the time of failure */ + int rc, /* Error code */ + Op *pOp, /* Opcode that filed */ + Op *aOp /* All opcodes */ +){ + const char *zSql = p->zSql; /* Original SQL text */ + const char *zPrefix = ""; /* Prefix added to SQL text */ + int pc; /* Opcode address */ + char zXtra[100]; /* Buffer space to store zPrefix */ + + if( p->pFrame ){ + assert( aOp[0].opcode==OP_Init ); + if( aOp[0].p4.z!=0 ){ + assert( aOp[0].p4.z[0]=='-' + && aOp[0].p4.z[1]=='-' + && aOp[0].p4.z[2]==' ' ); + sqlite3_snprintf(sizeof(zXtra), zXtra,"/* %s */ ",aOp[0].p4.z+3); + zPrefix = zXtra; + }else{ + zPrefix = "/* unknown trigger */ "; + } + } + pc = (int)(pOp - aOp); + sqlite3_log(rc, "statement aborts at %d: %s; [%s%s]", + pc, p->zErrMsg, zPrefix, zSql); +} + +/* +** Return the symbolic name for the data type of a pMem +*/ +static const char *vdbeMemTypeName(Mem *pMem){ + static const char *azTypes[] = { + /* SQLITE_INTEGER */ "INT", + /* SQLITE_FLOAT */ "REAL", + /* SQLITE_TEXT */ "TEXT", + /* SQLITE_BLOB */ "BLOB", + /* SQLITE_NULL */ "NULL" + }; + return azTypes[sqlite3_value_type(pMem)-1]; +} + +/* +** Execute as much of a VDBE program as we can. +** This is the core of sqlite3_step(). +*/ +SQLITE_PRIVATE int sqlite3VdbeExec( + Vdbe *p /* The VDBE */ +){ + Op *aOp = p->aOp; /* Copy of p->aOp */ + Op *pOp = aOp; /* Current operation */ +#ifdef SQLITE_DEBUG + Op *pOrigOp; /* Value of pOp at the top of the loop */ + int nExtraDelete = 0; /* Verifies FORDELETE and AUXDELETE flags */ + u8 iCompareIsInit = 0; /* iCompare is initialized */ +#endif + int rc = SQLITE_OK; /* Value to return */ + sqlite3 *db = p->db; /* The database */ + u8 resetSchemaOnFault = 0; /* Reset schema after an error if positive */ + u8 encoding = ENC(db); /* The database encoding */ + int iCompare = 0; /* Result of last comparison */ + u64 nVmStep = 0; /* Number of virtual machine steps */ +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK + u64 nProgressLimit; /* Invoke xProgress() when nVmStep reaches this */ +#endif + Mem *aMem = p->aMem; /* Copy of p->aMem */ + Mem *pIn1 = 0; /* 1st input operand */ + Mem *pIn2 = 0; /* 2nd input operand */ + Mem *pIn3 = 0; /* 3rd input operand */ + Mem *pOut = 0; /* Output operand */ + u32 colCacheCtr = 0; /* Column cache counter */ +#if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || defined(VDBE_PROFILE) + u64 *pnCycle = 0; + int bStmtScanStatus = IS_STMT_SCANSTATUS(db)!=0; +#endif + /*** INSERT STACK UNION HERE ***/ + + assert( p->eVdbeState==VDBE_RUN_STATE ); /* sqlite3_step() verifies this */ + if( DbMaskNonZero(p->lockMask) ){ + sqlite3VdbeEnter(p); + } +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK + if( db->xProgress ){ + u32 iPrior = p->aCounter[SQLITE_STMTSTATUS_VM_STEP]; + assert( 0 < db->nProgressOps ); + nProgressLimit = db->nProgressOps - (iPrior % db->nProgressOps); + }else{ + nProgressLimit = LARGEST_UINT64; + } +#endif + if( p->rc==SQLITE_NOMEM ){ + /* This happens if a malloc() inside a call to sqlite3_column_text() or + ** sqlite3_column_text16() failed. */ + goto no_mem; + } + assert( p->rc==SQLITE_OK || (p->rc&0xff)==SQLITE_BUSY ); + testcase( p->rc!=SQLITE_OK ); + p->rc = SQLITE_OK; + assert( p->bIsReader || p->readOnly!=0 ); + p->iCurrentTime = 0; + assert( p->explain==0 ); + db->busyHandler.nBusy = 0; + if( AtomicLoad(&db->u1.isInterrupted) ) goto abort_due_to_interrupt; + sqlite3VdbeIOTraceSql(p); +#ifdef SQLITE_DEBUG + sqlite3BeginBenignMalloc(); + if( p->pc==0 + && (p->db->flags & (SQLITE_VdbeListing|SQLITE_VdbeEQP|SQLITE_VdbeTrace))!=0 + ){ + int i; + int once = 1; + sqlite3VdbePrintSql(p); + if( p->db->flags & SQLITE_VdbeListing ){ + printf("VDBE Program Listing:\n"); + for(i=0; inOp; i++){ + sqlite3VdbePrintOp(stdout, i, &aOp[i]); + } + } + if( p->db->flags & SQLITE_VdbeEQP ){ + for(i=0; inOp; i++){ + if( aOp[i].opcode==OP_Explain ){ + if( once ) printf("VDBE Query Plan:\n"); + printf("%s\n", aOp[i].p4.z); + once = 0; + } + } + } + if( p->db->flags & SQLITE_VdbeTrace ) printf("VDBE Trace:\n"); + } + sqlite3EndBenignMalloc(); +#endif + for(pOp=&aOp[p->pc]; 1; pOp++){ + /* Errors are detected by individual opcodes, with an immediate + ** jumps to abort_due_to_error. */ + assert( rc==SQLITE_OK ); + + assert( pOp>=aOp && pOp<&aOp[p->nOp]); + nVmStep++; + +#if defined(VDBE_PROFILE) + pOp->nExec++; + pnCycle = &pOp->nCycle; + if( sqlite3NProfileCnt==0 ) *pnCycle -= sqlite3Hwtime(); +#elif defined(SQLITE_ENABLE_STMT_SCANSTATUS) + if( bStmtScanStatus ){ + pOp->nExec++; + pnCycle = &pOp->nCycle; + *pnCycle -= sqlite3Hwtime(); + } +#endif + + /* Only allow tracing if SQLITE_DEBUG is defined. + */ +#ifdef SQLITE_DEBUG + if( db->flags & SQLITE_VdbeTrace ){ + sqlite3VdbePrintOp(stdout, (int)(pOp - aOp), pOp); + test_trace_breakpoint((int)(pOp - aOp),pOp,p); + } +#endif + + + /* Check to see if we need to simulate an interrupt. This only happens + ** if we have a special test build. + */ +#ifdef SQLITE_TEST + if( sqlite3_interrupt_count>0 ){ + sqlite3_interrupt_count--; + if( sqlite3_interrupt_count==0 ){ + sqlite3_interrupt(db); + } + } +#endif + + /* Sanity checking on other operands */ +#ifdef SQLITE_DEBUG + { + u8 opProperty = sqlite3OpcodeProperty[pOp->opcode]; + if( (opProperty & OPFLG_IN1)!=0 ){ + assert( pOp->p1>0 ); + assert( pOp->p1<=(p->nMem+1 - p->nCursor) ); + assert( memIsValid(&aMem[pOp->p1]) ); + assert( sqlite3VdbeCheckMemInvariants(&aMem[pOp->p1]) ); + REGISTER_TRACE(pOp->p1, &aMem[pOp->p1]); + } + if( (opProperty & OPFLG_IN2)!=0 ){ + assert( pOp->p2>0 ); + assert( pOp->p2<=(p->nMem+1 - p->nCursor) ); + assert( memIsValid(&aMem[pOp->p2]) ); + assert( sqlite3VdbeCheckMemInvariants(&aMem[pOp->p2]) ); + REGISTER_TRACE(pOp->p2, &aMem[pOp->p2]); + } + if( (opProperty & OPFLG_IN3)!=0 ){ + assert( pOp->p3>0 ); + assert( pOp->p3<=(p->nMem+1 - p->nCursor) ); + assert( memIsValid(&aMem[pOp->p3]) ); + assert( sqlite3VdbeCheckMemInvariants(&aMem[pOp->p3]) ); + REGISTER_TRACE(pOp->p3, &aMem[pOp->p3]); + } + if( (opProperty & OPFLG_OUT2)!=0 ){ + assert( pOp->p2>0 ); + assert( pOp->p2<=(p->nMem+1 - p->nCursor) ); + memAboutToChange(p, &aMem[pOp->p2]); + } + if( (opProperty & OPFLG_OUT3)!=0 ){ + assert( pOp->p3>0 ); + assert( pOp->p3<=(p->nMem+1 - p->nCursor) ); + memAboutToChange(p, &aMem[pOp->p3]); + } + } +#endif +#ifdef SQLITE_DEBUG + pOrigOp = pOp; +#endif + + switch( pOp->opcode ){ + +/***************************************************************************** +** What follows is a massive switch statement where each case implements a +** separate instruction in the virtual machine. If we follow the usual +** indentation conventions, each case should be indented by 6 spaces. But +** that is a lot of wasted space on the left margin. So the code within +** the switch statement will break with convention and be flush-left. Another +** big comment (similar to this one) will mark the point in the code where +** we transition back to normal indentation. +** +** The formatting of each case is important. The makefile for SQLite +** generates two C files "opcodes.h" and "opcodes.c" by scanning this +** file looking for lines that begin with "case OP_". The opcodes.h files +** will be filled with #defines that give unique integer values to each +** opcode and the opcodes.c file is filled with an array of strings where +** each string is the symbolic name for the corresponding opcode. If the +** case statement is followed by a comment of the form "/# same as ... #/" +** that comment is used to determine the particular value of the opcode. +** +** Other keywords in the comment that follows each case are used to +** construct the OPFLG_INITIALIZER value that initializes opcodeProperty[]. +** Keywords include: in1, in2, in3, out2, out3. See +** the mkopcodeh.awk script for additional information. +** +** Documentation about VDBE opcodes is generated by scanning this file +** for lines of that contain "Opcode:". That line and all subsequent +** comment lines are used in the generation of the opcode.html documentation +** file. +** +** SUMMARY: +** +** Formatting is important to scripts that scan this file. +** Do not deviate from the formatting style currently in use. +** +*****************************************************************************/ + +/* Opcode: Goto * P2 * * * +** +** An unconditional jump to address P2. +** The next instruction executed will be +** the one at index P2 from the beginning of +** the program. +** +** The P1 parameter is not actually used by this opcode. However, it +** is sometimes set to 1 instead of 0 as a hint to the command-line shell +** that this Goto is the bottom of a loop and that the lines from P2 down +** to the current line should be indented for EXPLAIN output. +*/ +case OP_Goto: { /* jump */ + +#ifdef SQLITE_DEBUG + /* In debugging mode, when the p5 flags is set on an OP_Goto, that + ** means we should really jump back to the preceding OP_ReleaseReg + ** instruction. */ + if( pOp->p5 ){ + assert( pOp->p2 < (int)(pOp - aOp) ); + assert( pOp->p2 > 1 ); + pOp = &aOp[pOp->p2 - 2]; + assert( pOp[1].opcode==OP_ReleaseReg ); + goto check_for_interrupt; + } +#endif + +jump_to_p2_and_check_for_interrupt: + pOp = &aOp[pOp->p2 - 1]; + + /* Opcodes that are used as the bottom of a loop (OP_Next, OP_Prev, + ** OP_VNext, or OP_SorterNext) all jump here upon + ** completion. Check to see if sqlite3_interrupt() has been called + ** or if the progress callback needs to be invoked. + ** + ** This code uses unstructured "goto" statements and does not look clean. + ** But that is not due to sloppy coding habits. The code is written this + ** way for performance, to avoid having to run the interrupt and progress + ** checks on every opcode. This helps sqlite3_step() to run about 1.5% + ** faster according to "valgrind --tool=cachegrind" */ +check_for_interrupt: + if( AtomicLoad(&db->u1.isInterrupted) ) goto abort_due_to_interrupt; +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK + /* Call the progress callback if it is configured and the required number + ** of VDBE ops have been executed (either since this invocation of + ** sqlite3VdbeExec() or since last time the progress callback was called). + ** If the progress callback returns non-zero, exit the virtual machine with + ** a return code SQLITE_ABORT. + */ + while( nVmStep>=nProgressLimit && db->xProgress!=0 ){ + assert( db->nProgressOps!=0 ); + nProgressLimit += db->nProgressOps; + if( db->xProgress(db->pProgressArg) ){ + nProgressLimit = LARGEST_UINT64; + rc = SQLITE_INTERRUPT; + goto abort_due_to_error; + } + } +#endif + + break; +} + +/* Opcode: Gosub P1 P2 * * * +** +** Write the current address onto register P1 +** and then jump to address P2. +*/ +case OP_Gosub: { /* jump */ + assert( pOp->p1>0 && pOp->p1<=(p->nMem+1 - p->nCursor) ); + pIn1 = &aMem[pOp->p1]; + assert( VdbeMemDynamic(pIn1)==0 ); + memAboutToChange(p, pIn1); + pIn1->flags = MEM_Int; + pIn1->u.i = (int)(pOp-aOp); + REGISTER_TRACE(pOp->p1, pIn1); + goto jump_to_p2_and_check_for_interrupt; +} + +/* Opcode: Return P1 P2 P3 * * +** +** Jump to the address stored in register P1. If P1 is a return address +** register, then this accomplishes a return from a subroutine. +** +** If P3 is 1, then the jump is only taken if register P1 holds an integer +** values, otherwise execution falls through to the next opcode, and the +** OP_Return becomes a no-op. If P3 is 0, then register P1 must hold an +** integer or else an assert() is raised. P3 should be set to 1 when +** this opcode is used in combination with OP_BeginSubrtn, and set to 0 +** otherwise. +** +** The value in register P1 is unchanged by this opcode. +** +** P2 is not used by the byte-code engine. However, if P2 is positive +** and also less than the current address, then the "EXPLAIN" output +** formatter in the CLI will indent all opcodes from the P2 opcode up +** to be not including the current Return. P2 should be the first opcode +** in the subroutine from which this opcode is returning. Thus the P2 +** value is a byte-code indentation hint. See tag-20220407a in +** wherecode.c and shell.c. +*/ +case OP_Return: { /* in1 */ + pIn1 = &aMem[pOp->p1]; + if( pIn1->flags & MEM_Int ){ + if( pOp->p3 ){ VdbeBranchTaken(1, 2); } + pOp = &aOp[pIn1->u.i]; + }else if( ALWAYS(pOp->p3) ){ + VdbeBranchTaken(0, 2); + } + break; +} + +/* Opcode: InitCoroutine P1 P2 P3 * * +** +** Set up register P1 so that it will Yield to the coroutine +** located at address P3. +** +** If P2!=0 then the coroutine implementation immediately follows +** this opcode. So jump over the coroutine implementation to +** address P2. +** +** See also: EndCoroutine +*/ +case OP_InitCoroutine: { /* jump0 */ + assert( pOp->p1>0 && pOp->p1<=(p->nMem+1 - p->nCursor) ); + assert( pOp->p2>=0 && pOp->p2nOp ); + assert( pOp->p3>=0 && pOp->p3nOp ); + pOut = &aMem[pOp->p1]; + assert( !VdbeMemDynamic(pOut) ); + pOut->u.i = pOp->p3 - 1; + pOut->flags = MEM_Int; + if( pOp->p2==0 ) break; + + /* Most jump operations do a goto to this spot in order to update + ** the pOp pointer. */ +jump_to_p2: + assert( pOp->p2>0 ); /* There are never any jumps to instruction 0 */ + assert( pOp->p2nOp ); /* Jumps must be in range */ + pOp = &aOp[pOp->p2 - 1]; + break; +} + +/* Opcode: EndCoroutine P1 * * * * +** +** The instruction at the address in register P1 is a Yield. +** Jump to the P2 parameter of that Yield. +** After the jump, the value register P1 is left with a value +** such that subsequent OP_Yields go back to the this same +** OP_EndCoroutine instruction. +** +** See also: InitCoroutine +*/ +case OP_EndCoroutine: { /* in1 */ + VdbeOp *pCaller; + pIn1 = &aMem[pOp->p1]; + assert( pIn1->flags==MEM_Int ); + assert( pIn1->u.i>=0 && pIn1->u.inOp ); + pCaller = &aOp[pIn1->u.i]; + assert( pCaller->opcode==OP_Yield ); + assert( pCaller->p2>=0 && pCaller->p2nOp ); + pIn1->u.i = (int)(pOp - p->aOp) - 1; + pOp = &aOp[pCaller->p2 - 1]; + break; +} + +/* Opcode: Yield P1 P2 * * * +** +** Swap the program counter with the value in register P1. This +** has the effect of yielding to a coroutine. +** +** If the coroutine that is launched by this instruction ends with +** Yield or Return then continue to the next instruction. But if +** the coroutine launched by this instruction ends with +** EndCoroutine, then jump to P2 rather than continuing with the +** next instruction. +** +** See also: InitCoroutine +*/ +case OP_Yield: { /* in1, jump0 */ + int pcDest; + pIn1 = &aMem[pOp->p1]; + assert( VdbeMemDynamic(pIn1)==0 ); + pIn1->flags = MEM_Int; + pcDest = (int)pIn1->u.i; + pIn1->u.i = (int)(pOp - aOp); + REGISTER_TRACE(pOp->p1, pIn1); + pOp = &aOp[pcDest]; + break; +} + +/* Opcode: HaltIfNull P1 P2 P3 P4 P5 +** Synopsis: if r[P3]=null halt +** +** Check the value in register P3. If it is NULL then Halt using +** parameter P1, P2, and P4 as if this were a Halt instruction. If the +** value in register P3 is not NULL, then this routine is a no-op. +** The P5 parameter should be 1. +*/ +case OP_HaltIfNull: { /* in3 */ + pIn3 = &aMem[pOp->p3]; +#ifdef SQLITE_DEBUG + if( pOp->p2==OE_Abort ){ sqlite3VdbeAssertAbortable(p); } +#endif + if( (pIn3->flags & MEM_Null)==0 ) break; + /* Fall through into OP_Halt */ + /* no break */ deliberate_fall_through +} + +/* Opcode: Halt P1 P2 P3 P4 P5 +** +** Exit immediately. All open cursors, etc are closed +** automatically. +** +** P1 is the result code returned by sqlite3_exec(), sqlite3_reset(), +** or sqlite3_finalize(). For a normal halt, this should be SQLITE_OK (0). +** For errors, it can be some other value. If P1!=0 then P2 will determine +** whether or not to rollback the current transaction. Do not rollback +** if P2==OE_Fail. Do the rollback if P2==OE_Rollback. If P2==OE_Abort, +** then back out all changes that have occurred during this execution of the +** VDBE, but do not rollback the transaction. +** +** If P3 is not zero and P4 is NULL, then P3 is a register that holds the +** text of an error message. +** +** If P3 is zero and P4 is not null then the error message string is held +** in P4. +** +** P5 is a value between 1 and 4, inclusive, then the P4 error message +** string is modified as follows: +** +** 1: NOT NULL constraint failed: P4 +** 2: UNIQUE constraint failed: P4 +** 3: CHECK constraint failed: P4 +** 4: FOREIGN KEY constraint failed: P4 +** +** If P3 is zero and P5 is not zero and P4 is NULL, then everything after +** the ":" is omitted. +** +** There is an implied "Halt 0 0 0" instruction inserted at the very end of +** every program. So a jump past the last instruction of the program +** is the same as executing Halt. +*/ +case OP_Halt: { + VdbeFrame *pFrame; + int pcx; + +#ifdef SQLITE_DEBUG + if( pOp->p2==OE_Abort ){ sqlite3VdbeAssertAbortable(p); } +#endif + assert( pOp->p4type==P4_NOTUSED + || pOp->p4type==P4_STATIC + || pOp->p4type==P4_DYNAMIC ); + + /* A deliberately coded "OP_Halt SQLITE_INTERNAL * * * *" opcode indicates + ** something is wrong with the code generator. Raise an assertion in order + ** to bring this to the attention of fuzzers and other testing tools. */ + assert( pOp->p1!=SQLITE_INTERNAL ); + + if( p->pFrame && pOp->p1==SQLITE_OK ){ + /* Halt the sub-program. Return control to the parent frame. */ + pFrame = p->pFrame; + p->pFrame = pFrame->pParent; + p->nFrame--; + sqlite3VdbeSetChanges(db, p->nChange); + pcx = sqlite3VdbeFrameRestore(pFrame); + if( pOp->p2==OE_Ignore ){ + /* Instruction pcx is the OP_Program that invoked the sub-program + ** currently being halted. If the p2 instruction of this OP_Halt + ** instruction is set to OE_Ignore, then the sub-program is throwing + ** an IGNORE exception. In this case jump to the address specified + ** as the p2 of the calling OP_Program. */ + pcx = p->aOp[pcx].p2-1; + } + aOp = p->aOp; + aMem = p->aMem; + pOp = &aOp[pcx]; + break; + } + p->rc = pOp->p1; + p->errorAction = (u8)pOp->p2; + assert( pOp->p5<=4 ); + if( p->rc ){ + if( pOp->p3>0 && pOp->p4type==P4_NOTUSED ){ + const char *zErr; + assert( pOp->p3<=(p->nMem + 1 - p->nCursor) ); + zErr = sqlite3ValueText(&aMem[pOp->p3], SQLITE_UTF8); + sqlite3VdbeError(p, "%s", zErr); + }else if( pOp->p5 ){ + static const char * const azType[] = { "NOT NULL", "UNIQUE", "CHECK", + "FOREIGN KEY" }; + testcase( pOp->p5==1 ); + testcase( pOp->p5==2 ); + testcase( pOp->p5==3 ); + testcase( pOp->p5==4 ); + sqlite3VdbeError(p, "%s constraint failed", azType[pOp->p5-1]); + if( pOp->p4.z ){ + p->zErrMsg = sqlite3MPrintf(db, "%z: %s", p->zErrMsg, pOp->p4.z); + } + }else{ + sqlite3VdbeError(p, "%s", pOp->p4.z); + } + sqlite3VdbeLogAbort(p, pOp->p1, pOp, aOp); + } + rc = sqlite3VdbeHalt(p); + assert( rc==SQLITE_BUSY || rc==SQLITE_OK || rc==SQLITE_ERROR ); + if( rc==SQLITE_BUSY ){ + p->rc = SQLITE_BUSY; + }else{ + assert( rc==SQLITE_OK || (p->rc&0xff)==SQLITE_CONSTRAINT ); + assert( rc==SQLITE_OK || db->nDeferredCons>0 || db->nDeferredImmCons>0 ); + rc = p->rc ? SQLITE_ERROR : SQLITE_DONE; + } + goto vdbe_return; +} + +/* Opcode: Integer P1 P2 * * * +** Synopsis: r[P2]=P1 +** +** The 32-bit integer value P1 is written into register P2. +*/ +case OP_Integer: { /* out2 */ + pOut = out2Prerelease(p, pOp); + pOut->u.i = pOp->p1; + break; +} + +/* Opcode: Int64 * P2 * P4 * +** Synopsis: r[P2]=P4 +** +** P4 is a pointer to a 64-bit integer value. +** Write that value into register P2. +*/ +case OP_Int64: { /* out2 */ + pOut = out2Prerelease(p, pOp); + assert( pOp->p4.pI64!=0 ); + pOut->u.i = *pOp->p4.pI64; + break; +} + +#ifndef SQLITE_OMIT_FLOATING_POINT +/* Opcode: Real * P2 * P4 * +** Synopsis: r[P2]=P4 +** +** P4 is a pointer to a 64-bit floating point value. +** Write that value into register P2. +*/ +case OP_Real: { /* same as TK_FLOAT, out2 */ + pOut = out2Prerelease(p, pOp); + pOut->flags = MEM_Real; + assert( !sqlite3IsNaN(*pOp->p4.pReal) ); + pOut->u.r = *pOp->p4.pReal; + break; +} +#endif + +/* Opcode: String8 * P2 * P4 * +** Synopsis: r[P2]='P4' +** +** P4 points to a nul terminated UTF-8 string. This opcode is transformed +** into a String opcode before it is executed for the first time. During +** this transformation, the length of string P4 is computed and stored +** as the P1 parameter. +*/ +case OP_String8: { /* same as TK_STRING, out2 */ + assert( pOp->p4.z!=0 ); + pOut = out2Prerelease(p, pOp); + pOp->p1 = sqlite3Strlen30(pOp->p4.z); + +#ifndef SQLITE_OMIT_UTF16 + if( encoding!=SQLITE_UTF8 ){ + rc = sqlite3VdbeMemSetStr(pOut, pOp->p4.z, -1, SQLITE_UTF8, SQLITE_STATIC); + assert( rc==SQLITE_OK || rc==SQLITE_TOOBIG ); + if( rc ) goto too_big; + if( SQLITE_OK!=sqlite3VdbeChangeEncoding(pOut, encoding) ) goto no_mem; + assert( pOut->szMalloc>0 && pOut->zMalloc==pOut->z ); + assert( VdbeMemDynamic(pOut)==0 ); + pOut->szMalloc = 0; + pOut->flags |= MEM_Static; + if( pOp->p4type==P4_DYNAMIC ){ + sqlite3DbFree(db, pOp->p4.z); + } + pOp->p4type = P4_DYNAMIC; + pOp->p4.z = pOut->z; + pOp->p1 = pOut->n; + } +#endif + if( pOp->p1>db->aLimit[SQLITE_LIMIT_LENGTH] ){ + goto too_big; + } + pOp->opcode = OP_String; + assert( rc==SQLITE_OK ); + /* Fall through to the next case, OP_String */ + /* no break */ deliberate_fall_through +} + +/* Opcode: String P1 P2 P3 P4 P5 +** Synopsis: r[P2]='P4' (len=P1) +** +** The string value P4 of length P1 (bytes) is stored in register P2. +** +** If P3 is not zero and the content of register P3 is equal to P5, then +** the datatype of the register P2 is converted to BLOB. The content is +** the same sequence of bytes, it is merely interpreted as a BLOB instead +** of a string, as if it had been CAST. In other words: +** +** if( P3!=0 and reg[P3]==P5 ) reg[P2] := CAST(reg[P2] as BLOB) +*/ +case OP_String: { /* out2 */ + assert( pOp->p4.z!=0 ); + pOut = out2Prerelease(p, pOp); + pOut->flags = MEM_Str|MEM_Static|MEM_Term; + pOut->z = pOp->p4.z; + pOut->n = pOp->p1; + pOut->enc = encoding; + UPDATE_MAX_BLOBSIZE(pOut); +#ifndef SQLITE_LIKE_DOESNT_MATCH_BLOBS + if( pOp->p3>0 ){ + assert( pOp->p3<=(p->nMem+1 - p->nCursor) ); + pIn3 = &aMem[pOp->p3]; + assert( pIn3->flags & MEM_Int ); + if( pIn3->u.i==pOp->p5 ) pOut->flags = MEM_Blob|MEM_Static|MEM_Term; + } +#endif + break; +} + +/* Opcode: BeginSubrtn * P2 * * * +** Synopsis: r[P2]=NULL +** +** Mark the beginning of a subroutine that can be entered in-line +** or that can be called using OP_Gosub. The subroutine should +** be terminated by an OP_Return instruction that has a P1 operand that +** is the same as the P2 operand to this opcode and that has P3 set to 1. +** If the subroutine is entered in-line, then the OP_Return will simply +** fall through. But if the subroutine is entered using OP_Gosub, then +** the OP_Return will jump back to the first instruction after the OP_Gosub. +** +** This routine works by loading a NULL into the P2 register. When the +** return address register contains a NULL, the OP_Return instruction is +** a no-op that simply falls through to the next instruction (assuming that +** the OP_Return opcode has a P3 value of 1). Thus if the subroutine is +** entered in-line, then the OP_Return will cause in-line execution to +** continue. But if the subroutine is entered via OP_Gosub, then the +** OP_Return will cause a return to the address following the OP_Gosub. +** +** This opcode is identical to OP_Null. It has a different name +** only to make the byte code easier to read and verify. +*/ +/* Opcode: Null P1 P2 P3 * * +** Synopsis: r[P2..P3]=NULL +** +** Write a NULL into registers P2. If P3 greater than P2, then also write +** NULL into register P3 and every register in between P2 and P3. If P3 +** is less than P2 (typically P3 is zero) then only register P2 is +** set to NULL. +** +** If the P1 value is non-zero, then also set the MEM_Cleared flag so that +** NULL values will not compare equal even if SQLITE_NULLEQ is set on +** OP_Ne or OP_Eq. +*/ +case OP_BeginSubrtn: +case OP_Null: { /* out2 */ + int cnt; + u16 nullFlag; + pOut = out2Prerelease(p, pOp); + cnt = pOp->p3-pOp->p2; + assert( pOp->p3<=(p->nMem+1 - p->nCursor) ); + pOut->flags = nullFlag = pOp->p1 ? (MEM_Null|MEM_Cleared) : MEM_Null; + pOut->n = 0; +#ifdef SQLITE_DEBUG + pOut->uTemp = 0; +#endif + while( cnt>0 ){ + pOut++; + memAboutToChange(p, pOut); + sqlite3VdbeMemSetNull(pOut); + pOut->flags = nullFlag; + pOut->n = 0; + cnt--; + } + break; +} + +/* Opcode: SoftNull P1 * * * * +** Synopsis: r[P1]=NULL +** +** Set register P1 to have the value NULL as seen by the OP_MakeRecord +** instruction, but do not free any string or blob memory associated with +** the register, so that if the value was a string or blob that was +** previously copied using OP_SCopy, the copies will continue to be valid. +*/ +case OP_SoftNull: { + assert( pOp->p1>0 && pOp->p1<=(p->nMem+1 - p->nCursor) ); + pOut = &aMem[pOp->p1]; + pOut->flags = (pOut->flags&~(MEM_Undefined|MEM_AffMask))|MEM_Null; + break; +} + +/* Opcode: Blob P1 P2 * P4 * +** Synopsis: r[P2]=P4 (len=P1) +** +** P4 points to a blob of data P1 bytes long. Store this +** blob in register P2. If P4 is a NULL pointer, then construct +** a zero-filled blob that is P1 bytes long in P2. +*/ +case OP_Blob: { /* out2 */ + assert( pOp->p1 <= SQLITE_MAX_LENGTH ); + pOut = out2Prerelease(p, pOp); + if( pOp->p4.z==0 ){ + sqlite3VdbeMemSetZeroBlob(pOut, pOp->p1); + if( sqlite3VdbeMemExpandBlob(pOut) ) goto no_mem; + }else{ + sqlite3VdbeMemSetStr(pOut, pOp->p4.z, pOp->p1, 0, 0); + } + pOut->enc = encoding; + UPDATE_MAX_BLOBSIZE(pOut); + break; +} + +/* Opcode: Variable P1 P2 * * * +** Synopsis: r[P2]=parameter(P1) +** +** Transfer the values of bound parameter P1 into register P2 +*/ +case OP_Variable: { /* out2 */ + Mem *pVar; /* Value being transferred */ + + assert( pOp->p1>0 && pOp->p1<=p->nVar ); + pVar = &p->aVar[pOp->p1 - 1]; + if( sqlite3VdbeMemTooBig(pVar) ){ + goto too_big; + } + pOut = &aMem[pOp->p2]; + if( VdbeMemDynamic(pOut) ) sqlite3VdbeMemSetNull(pOut); + memcpy(pOut, pVar, MEMCELLSIZE); + pOut->flags &= ~(MEM_Dyn|MEM_Ephem); + pOut->flags |= MEM_Static|MEM_FromBind; + UPDATE_MAX_BLOBSIZE(pOut); + break; +} + +/* Opcode: Move P1 P2 P3 * * +** Synopsis: r[P2@P3]=r[P1@P3] +** +** Move the P3 values in register P1..P1+P3-1 over into +** registers P2..P2+P3-1. Registers P1..P1+P3-1 are +** left holding a NULL. It is an error for register ranges +** P1..P1+P3-1 and P2..P2+P3-1 to overlap. It is an error +** for P3 to be less than 1. +*/ +case OP_Move: { + int n; /* Number of registers left to copy */ + int p1; /* Register to copy from */ + int p2; /* Register to copy to */ + + n = pOp->p3; + p1 = pOp->p1; + p2 = pOp->p2; + assert( n>0 && p1>0 && p2>0 ); + assert( p1+n<=p2 || p2+n<=p1 ); + + pIn1 = &aMem[p1]; + pOut = &aMem[p2]; + do{ + assert( pOut<=&aMem[(p->nMem+1 - p->nCursor)] ); + assert( pIn1<=&aMem[(p->nMem+1 - p->nCursor)] ); + assert( memIsValid(pIn1) ); + memAboutToChange(p, pOut); + sqlite3VdbeMemMove(pOut, pIn1); +#ifdef SQLITE_DEBUG + pIn1->pScopyFrom = 0; + { int i; + for(i=1; inMem; i++){ + if( aMem[i].pScopyFrom==pIn1 ){ + assert( aMem[i].bScopy ); + aMem[i].pScopyFrom = pOut; + } + } + } +#endif + Deephemeralize(pOut); + REGISTER_TRACE(p2++, pOut); + pIn1++; + pOut++; + }while( --n ); + break; +} + +/* Opcode: Copy P1 P2 P3 * P5 +** Synopsis: r[P2@P3+1]=r[P1@P3+1] +** +** Make a copy of registers P1..P1+P3 into registers P2..P2+P3. +** +** If the 0x0002 bit of P5 is set then also clear the MEM_Subtype flag in the +** destination. The 0x0001 bit of P5 indicates that this Copy opcode cannot +** be merged. The 0x0001 bit is used by the query planner and does not +** come into play during query execution. +** +** This instruction makes a deep copy of the value. A duplicate +** is made of any string or blob constant. See also OP_SCopy. +*/ +case OP_Copy: { + int n; + + n = pOp->p3; + pIn1 = &aMem[pOp->p1]; + pOut = &aMem[pOp->p2]; + assert( pOut!=pIn1 ); + while( 1 ){ + memAboutToChange(p, pOut); + sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem); + Deephemeralize(pOut); + if( (pOut->flags & MEM_Subtype)!=0 && (pOp->p5 & 0x0002)!=0 ){ + pOut->flags &= ~MEM_Subtype; + } +#ifdef SQLITE_DEBUG + pOut->pScopyFrom = 0; +#endif + REGISTER_TRACE(pOp->p2+pOp->p3-n, pOut); + if( (n--)==0 ) break; + pOut++; + pIn1++; + } + break; +} + +/* Opcode: SCopy P1 P2 * * * +** Synopsis: r[P2]=r[P1] +** +** Make a shallow copy of register P1 into register P2. +** +** This instruction makes a shallow copy of the value. If the value +** is a string or blob, then the copy is only a pointer to the +** original and hence if the original changes so will the copy. +** Worse, if the original is deallocated, the copy becomes invalid. +** Thus the program must guarantee that the original will not change +** during the lifetime of the copy. Use OP_Copy to make a complete +** copy. +*/ +case OP_SCopy: { /* out2 */ + pIn1 = &aMem[pOp->p1]; + pOut = &aMem[pOp->p2]; + assert( pOut!=pIn1 ); + sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem); +#ifdef SQLITE_DEBUG + pOut->pScopyFrom = pIn1; + pOut->mScopyFlags = pIn1->flags; + pIn1->bScopy = 1; +#endif + break; +} + +/* Opcode: IntCopy P1 P2 * * * +** Synopsis: r[P2]=r[P1] +** +** Transfer the integer value held in register P1 into register P2. +** +** This is an optimized version of SCopy that works only for integer +** values. +*/ +case OP_IntCopy: { /* out2 */ + pIn1 = &aMem[pOp->p1]; + assert( (pIn1->flags & MEM_Int)!=0 ); + pOut = &aMem[pOp->p2]; + sqlite3VdbeMemSetInt64(pOut, pIn1->u.i); + break; +} + +/* Opcode: FkCheck * * * * * +** +** Halt with an SQLITE_CONSTRAINT error if there are any unresolved +** foreign key constraint violations. If there are no foreign key +** constraint violations, this is a no-op. +** +** FK constraint violations are also checked when the prepared statement +** exits. This opcode is used to raise foreign key constraint errors prior +** to returning results such as a row change count or the result of a +** RETURNING clause. +*/ +case OP_FkCheck: { + if( (rc = sqlite3VdbeCheckFkImmediate(p))!=SQLITE_OK ){ + goto abort_due_to_error; + } + break; +} + +/* Opcode: ResultRow P1 P2 * * * +** Synopsis: output=r[P1@P2] +** +** The registers P1 through P1+P2-1 contain a single row of +** results. This opcode causes the sqlite3_step() call to terminate +** with an SQLITE_ROW return code and it sets up the sqlite3_stmt +** structure to provide access to the r(P1)..r(P1+P2-1) values as +** the result row. +*/ +case OP_ResultRow: { + assert( p->nResColumn==pOp->p2 ); + assert( pOp->p1>0 || CORRUPT_DB ); + assert( pOp->p1+pOp->p2<=(p->nMem+1 - p->nCursor)+1 ); + + p->cacheCtr = (p->cacheCtr + 2)|1; + p->pResultRow = &aMem[pOp->p1]; +#ifdef SQLITE_DEBUG + { + Mem *pMem = p->pResultRow; + int i; + for(i=0; ip2; i++){ + assert( memIsValid(&pMem[i]) ); + REGISTER_TRACE(pOp->p1+i, &pMem[i]); + /* The registers in the result will not be used again when the + ** prepared statement restarts. This is because sqlite3_column() + ** APIs might have caused type conversions of made other changes to + ** the register values. Therefore, we can go ahead and break any + ** OP_SCopy dependencies. */ + pMem[i].pScopyFrom = 0; + } + } +#endif + if( db->mallocFailed ) goto no_mem; + if( db->mTrace & SQLITE_TRACE_ROW ){ + db->trace.xV2(SQLITE_TRACE_ROW, db->pTraceArg, p, 0); + } + p->pc = (int)(pOp - aOp) + 1; + rc = SQLITE_ROW; + goto vdbe_return; +} + +/* Opcode: Concat P1 P2 P3 * * +** Synopsis: r[P3]=r[P2]+r[P1] +** +** Add the text in register P1 onto the end of the text in +** register P2 and store the result in register P3. +** If either the P1 or P2 text are NULL then store NULL in P3. +** +** P3 = P2 || P1 +** +** It is illegal for P1 and P3 to be the same register. Sometimes, +** if P3 is the same register as P2, the implementation is able +** to avoid a memcpy(). +*/ +case OP_Concat: { /* same as TK_CONCAT, in1, in2, out3 */ + i64 nByte; /* Total size of the output string or blob */ + u16 flags1; /* Initial flags for P1 */ + u16 flags2; /* Initial flags for P2 */ + + pIn1 = &aMem[pOp->p1]; + pIn2 = &aMem[pOp->p2]; + pOut = &aMem[pOp->p3]; + testcase( pOut==pIn2 ); + assert( pIn1!=pOut ); + flags1 = pIn1->flags; + testcase( flags1 & MEM_Null ); + testcase( pIn2->flags & MEM_Null ); + if( (flags1 | pIn2->flags) & MEM_Null ){ + sqlite3VdbeMemSetNull(pOut); + break; + } + if( (flags1 & (MEM_Str|MEM_Blob))==0 ){ + if( sqlite3VdbeMemStringify(pIn1,encoding,0) ) goto no_mem; + flags1 = pIn1->flags & ~MEM_Str; + }else if( (flags1 & MEM_Zero)!=0 ){ + if( sqlite3VdbeMemExpandBlob(pIn1) ) goto no_mem; + flags1 = pIn1->flags & ~MEM_Str; + } + flags2 = pIn2->flags; + if( (flags2 & (MEM_Str|MEM_Blob))==0 ){ + if( sqlite3VdbeMemStringify(pIn2,encoding,0) ) goto no_mem; + flags2 = pIn2->flags & ~MEM_Str; + }else if( (flags2 & MEM_Zero)!=0 ){ + if( sqlite3VdbeMemExpandBlob(pIn2) ) goto no_mem; + flags2 = pIn2->flags & ~MEM_Str; + } + nByte = pIn1->n; + nByte += pIn2->n; + if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){ + goto too_big; + } +#if SQLITE_MAX_LENGTH>2147483645 + if( nByte>2147483645 ){ goto too_big; } +#endif + if( sqlite3VdbeMemGrow(pOut, (int)nByte+2, pOut==pIn2) ){ + goto no_mem; + } + MemSetTypeFlag(pOut, MEM_Str); + if( pOut!=pIn2 ){ + memcpy(pOut->z, pIn2->z, pIn2->n); + assert( (pIn2->flags & MEM_Dyn) == (flags2 & MEM_Dyn) ); + pIn2->flags = flags2; + } + memcpy(&pOut->z[pIn2->n], pIn1->z, pIn1->n); + assert( (pIn1->flags & MEM_Dyn) == (flags1 & MEM_Dyn) ); + pIn1->flags = flags1; + if( encoding>SQLITE_UTF8 ) nByte &= ~1; + pOut->z[nByte]=0; + pOut->z[nByte+1] = 0; + pOut->flags |= MEM_Term; + pOut->n = (int)nByte; + pOut->enc = encoding; + UPDATE_MAX_BLOBSIZE(pOut); + break; +} + +/* Opcode: Add P1 P2 P3 * * +** Synopsis: r[P3]=r[P1]+r[P2] +** +** Add the value in register P1 to the value in register P2 +** and store the result in register P3. +** If either input is NULL, the result is NULL. +*/ +/* Opcode: Multiply P1 P2 P3 * * +** Synopsis: r[P3]=r[P1]*r[P2] +** +** +** Multiply the value in register P1 by the value in register P2 +** and store the result in register P3. +** If either input is NULL, the result is NULL. +*/ +/* Opcode: Subtract P1 P2 P3 * * +** Synopsis: r[P3]=r[P2]-r[P1] +** +** Subtract the value in register P1 from the value in register P2 +** and store the result in register P3. +** If either input is NULL, the result is NULL. +*/ +/* Opcode: Divide P1 P2 P3 * * +** Synopsis: r[P3]=r[P2]/r[P1] +** +** Divide the value in register P1 by the value in register P2 +** and store the result in register P3 (P3=P2/P1). If the value in +** register P1 is zero, then the result is NULL. If either input is +** NULL, the result is NULL. +*/ +/* Opcode: Remainder P1 P2 P3 * * +** Synopsis: r[P3]=r[P2]%r[P1] +** +** Compute the remainder after integer register P2 is divided by +** register P1 and store the result in register P3. +** If the value in register P1 is zero the result is NULL. +** If either operand is NULL, the result is NULL. +*/ +case OP_Add: /* same as TK_PLUS, in1, in2, out3 */ +case OP_Subtract: /* same as TK_MINUS, in1, in2, out3 */ +case OP_Multiply: /* same as TK_STAR, in1, in2, out3 */ +case OP_Divide: /* same as TK_SLASH, in1, in2, out3 */ +case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */ + u16 type1; /* Numeric type of left operand */ + u16 type2; /* Numeric type of right operand */ + i64 iA; /* Integer value of left operand */ + i64 iB; /* Integer value of right operand */ + double rA; /* Real value of left operand */ + double rB; /* Real value of right operand */ + + pIn1 = &aMem[pOp->p1]; + type1 = pIn1->flags; + pIn2 = &aMem[pOp->p2]; + type2 = pIn2->flags; + pOut = &aMem[pOp->p3]; + if( (type1 & type2 & MEM_Int)!=0 ){ +int_math: + iA = pIn1->u.i; + iB = pIn2->u.i; + switch( pOp->opcode ){ + case OP_Add: if( sqlite3AddInt64(&iB,iA) ) goto fp_math; break; + case OP_Subtract: if( sqlite3SubInt64(&iB,iA) ) goto fp_math; break; + case OP_Multiply: if( sqlite3MulInt64(&iB,iA) ) goto fp_math; break; + case OP_Divide: { + if( iA==0 ) goto arithmetic_result_is_null; + if( iA==-1 && iB==SMALLEST_INT64 ) goto fp_math; + iB /= iA; + break; + } + default: { + if( iA==0 ) goto arithmetic_result_is_null; + if( iA==-1 ) iA = 1; + iB %= iA; + break; + } + } + pOut->u.i = iB; + MemSetTypeFlag(pOut, MEM_Int); + }else if( ((type1 | type2) & MEM_Null)!=0 ){ + goto arithmetic_result_is_null; + }else{ + type1 = numericType(pIn1); + type2 = numericType(pIn2); + if( (type1 & type2 & MEM_Int)!=0 ) goto int_math; +fp_math: + rA = sqlite3VdbeRealValue(pIn1); + rB = sqlite3VdbeRealValue(pIn2); + switch( pOp->opcode ){ + case OP_Add: rB += rA; break; + case OP_Subtract: rB -= rA; break; + case OP_Multiply: rB *= rA; break; + case OP_Divide: { + /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ + if( rA==(double)0 ) goto arithmetic_result_is_null; + rB /= rA; + break; + } + default: { + iA = sqlite3VdbeIntValue(pIn1); + iB = sqlite3VdbeIntValue(pIn2); + if( iA==0 ) goto arithmetic_result_is_null; + if( iA==-1 ) iA = 1; + rB = (double)(iB % iA); + break; + } + } +#ifdef SQLITE_OMIT_FLOATING_POINT + pOut->u.i = rB; + MemSetTypeFlag(pOut, MEM_Int); +#else + if( sqlite3IsNaN(rB) ){ + goto arithmetic_result_is_null; + } + pOut->u.r = rB; + MemSetTypeFlag(pOut, MEM_Real); +#endif + } + break; + +arithmetic_result_is_null: + sqlite3VdbeMemSetNull(pOut); + break; +} + +/* Opcode: CollSeq P1 * * P4 +** +** P4 is a pointer to a CollSeq object. If the next call to a user function +** or aggregate calls sqlite3GetFuncCollSeq(), this collation sequence will +** be returned. This is used by the built-in min(), max() and nullif() +** functions. +** +** If P1 is not zero, then it is a register that a subsequent min() or +** max() aggregate will set to 1 if the current row is not the minimum or +** maximum. The P1 register is initialized to 0 by this instruction. +** +** The interface used by the implementation of the aforementioned functions +** to retrieve the collation sequence set by this opcode is not available +** publicly. Only built-in functions have access to this feature. +*/ +case OP_CollSeq: { + assert( pOp->p4type==P4_COLLSEQ ); + if( pOp->p1 ){ + sqlite3VdbeMemSetInt64(&aMem[pOp->p1], 0); + } + break; +} + +/* Opcode: BitAnd P1 P2 P3 * * +** Synopsis: r[P3]=r[P1]&r[P2] +** +** Take the bit-wise AND of the values in register P1 and P2 and +** store the result in register P3. +** If either input is NULL, the result is NULL. +*/ +/* Opcode: BitOr P1 P2 P3 * * +** Synopsis: r[P3]=r[P1]|r[P2] +** +** Take the bit-wise OR of the values in register P1 and P2 and +** store the result in register P3. +** If either input is NULL, the result is NULL. +*/ +/* Opcode: ShiftLeft P1 P2 P3 * * +** Synopsis: r[P3]=r[P2]<>r[P1] +** +** Shift the integer value in register P2 to the right by the +** number of bits specified by the integer in register P1. +** Store the result in register P3. +** If either input is NULL, the result is NULL. +*/ +case OP_BitAnd: /* same as TK_BITAND, in1, in2, out3 */ +case OP_BitOr: /* same as TK_BITOR, in1, in2, out3 */ +case OP_ShiftLeft: /* same as TK_LSHIFT, in1, in2, out3 */ +case OP_ShiftRight: { /* same as TK_RSHIFT, in1, in2, out3 */ + i64 iA; + u64 uA; + i64 iB; + u8 op; + + pIn1 = &aMem[pOp->p1]; + pIn2 = &aMem[pOp->p2]; + pOut = &aMem[pOp->p3]; + if( (pIn1->flags | pIn2->flags) & MEM_Null ){ + sqlite3VdbeMemSetNull(pOut); + break; + } + iA = sqlite3VdbeIntValue(pIn2); + iB = sqlite3VdbeIntValue(pIn1); + op = pOp->opcode; + if( op==OP_BitAnd ){ + iA &= iB; + }else if( op==OP_BitOr ){ + iA |= iB; + }else if( iB!=0 ){ + assert( op==OP_ShiftRight || op==OP_ShiftLeft ); + + /* If shifting by a negative amount, shift in the other direction */ + if( iB<0 ){ + assert( OP_ShiftRight==OP_ShiftLeft+1 ); + op = 2*OP_ShiftLeft + 1 - op; + iB = iB>(-64) ? -iB : 64; + } + + if( iB>=64 ){ + iA = (iA>=0 || op==OP_ShiftLeft) ? 0 : -1; + }else{ + memcpy(&uA, &iA, sizeof(uA)); + if( op==OP_ShiftLeft ){ + uA <<= iB; + }else{ + uA >>= iB; + /* Sign-extend on a right shift of a negative number */ + if( iA<0 ) uA |= ((((u64)0xffffffff)<<32)|0xffffffff) << (64-iB); + } + memcpy(&iA, &uA, sizeof(iA)); + } + } + pOut->u.i = iA; + MemSetTypeFlag(pOut, MEM_Int); + break; +} + +/* Opcode: AddImm P1 P2 * * * +** Synopsis: r[P1]=r[P1]+P2 +** +** Add the constant P2 to the value in register P1. +** The result is always an integer. +** +** To force any register to be an integer, just add 0. +*/ +case OP_AddImm: { /* in1 */ + pIn1 = &aMem[pOp->p1]; + memAboutToChange(p, pIn1); + sqlite3VdbeMemIntegerify(pIn1); + *(u64*)&pIn1->u.i += (u64)pOp->p2; + break; +} + +/* Opcode: MustBeInt P1 P2 * * * +** +** Force the value in register P1 to be an integer. If the value +** in P1 is not an integer and cannot be converted into an integer +** without data loss, then jump immediately to P2, or if P2==0 +** raise an SQLITE_MISMATCH exception. +*/ +case OP_MustBeInt: { /* jump0, in1 */ + pIn1 = &aMem[pOp->p1]; + if( (pIn1->flags & MEM_Int)==0 ){ + applyAffinity(pIn1, SQLITE_AFF_NUMERIC, encoding); + if( (pIn1->flags & MEM_Int)==0 ){ + VdbeBranchTaken(1, 2); + if( pOp->p2==0 ){ + rc = SQLITE_MISMATCH; + goto abort_due_to_error; + }else{ + goto jump_to_p2; + } + } + } + VdbeBranchTaken(0, 2); + MemSetTypeFlag(pIn1, MEM_Int); + break; +} + +#ifndef SQLITE_OMIT_FLOATING_POINT +/* Opcode: RealAffinity P1 * * * * +** +** If register P1 holds an integer convert it to a real value. +** +** This opcode is used when extracting information from a column that +** has REAL affinity. Such column values may still be stored as +** integers, for space efficiency, but after extraction we want them +** to have only a real value. +*/ +case OP_RealAffinity: { /* in1 */ + pIn1 = &aMem[pOp->p1]; + if( pIn1->flags & (MEM_Int|MEM_IntReal) ){ + testcase( pIn1->flags & MEM_Int ); + testcase( pIn1->flags & MEM_IntReal ); + sqlite3VdbeMemRealify(pIn1); + REGISTER_TRACE(pOp->p1, pIn1); + } + break; +} +#endif + +#if !defined(SQLITE_OMIT_CAST) || !defined(SQLITE_OMIT_ANALYZE) +/* Opcode: Cast P1 P2 * * * +** Synopsis: affinity(r[P1]) +** +** Force the value in register P1 to be the type defined by P2. +** +**
      +**
    • P2=='A' → BLOB +**
    • P2=='B' → TEXT +**
    • P2=='C' → NUMERIC +**
    • P2=='D' → INTEGER +**
    • P2=='E' → REAL +**
    +** +** A NULL value is not changed by this routine. It remains NULL. +*/ +case OP_Cast: { /* in1 */ + assert( pOp->p2>=SQLITE_AFF_BLOB && pOp->p2<=SQLITE_AFF_REAL ); + testcase( pOp->p2==SQLITE_AFF_TEXT ); + testcase( pOp->p2==SQLITE_AFF_BLOB ); + testcase( pOp->p2==SQLITE_AFF_NUMERIC ); + testcase( pOp->p2==SQLITE_AFF_INTEGER ); + testcase( pOp->p2==SQLITE_AFF_REAL ); + pIn1 = &aMem[pOp->p1]; + memAboutToChange(p, pIn1); + rc = ExpandBlob(pIn1); + if( rc ) goto abort_due_to_error; + rc = sqlite3VdbeMemCast(pIn1, pOp->p2, encoding); + if( rc ) goto abort_due_to_error; + UPDATE_MAX_BLOBSIZE(pIn1); + REGISTER_TRACE(pOp->p1, pIn1); + break; +} +#endif /* SQLITE_OMIT_CAST */ + +/* Opcode: Eq P1 P2 P3 P4 P5 +** Synopsis: IF r[P3]==r[P1] +** +** Compare the values in register P1 and P3. If reg(P3)==reg(P1) then +** jump to address P2. +** +** The SQLITE_AFF_MASK portion of P5 must be an affinity character - +** SQLITE_AFF_TEXT, SQLITE_AFF_INTEGER, and so forth. An attempt is made +** to coerce both inputs according to this affinity before the +** comparison is made. If the SQLITE_AFF_MASK is 0x00, then numeric +** affinity is used. Note that the affinity conversions are stored +** back into the input registers P1 and P3. So this opcode can cause +** persistent changes to registers P1 and P3. +** +** Once any conversions have taken place, and neither value is NULL, +** the values are compared. If both values are blobs then memcmp() is +** used to determine the results of the comparison. If both values +** are text, then the appropriate collating function specified in +** P4 is used to do the comparison. If P4 is not specified then +** memcmp() is used to compare text string. If both values are +** numeric, then a numeric comparison is used. If the two values +** are of different types, then numbers are considered less than +** strings and strings are considered less than blobs. +** +** If SQLITE_NULLEQ is set in P5 then the result of comparison is always either +** true or false and is never NULL. If both operands are NULL then the result +** of comparison is true. If either operand is NULL then the result is false. +** If neither operand is NULL the result is the same as it would be if +** the SQLITE_NULLEQ flag were omitted from P5. +** +** This opcode saves the result of comparison for use by the new +** OP_Jump opcode. +*/ +/* Opcode: Ne P1 P2 P3 P4 P5 +** Synopsis: IF r[P3]!=r[P1] +** +** This works just like the Eq opcode except that the jump is taken if +** the operands in registers P1 and P3 are not equal. See the Eq opcode for +** additional information. +*/ +/* Opcode: Lt P1 P2 P3 P4 P5 +** Synopsis: IF r[P3]r[P1] +** +** This works just like the Lt opcode except that the jump is taken if +** the content of register P3 is greater than the content of +** register P1. See the Lt opcode for additional information. +*/ +/* Opcode: Ge P1 P2 P3 P4 P5 +** Synopsis: IF r[P3]>=r[P1] +** +** This works just like the Lt opcode except that the jump is taken if +** the content of register P3 is greater than or equal to the content of +** register P1. See the Lt opcode for additional information. +*/ +case OP_Eq: /* same as TK_EQ, jump, in1, in3 */ +case OP_Ne: /* same as TK_NE, jump, in1, in3 */ +case OP_Lt: /* same as TK_LT, jump, in1, in3 */ +case OP_Le: /* same as TK_LE, jump, in1, in3 */ +case OP_Gt: /* same as TK_GT, jump, in1, in3 */ +case OP_Ge: { /* same as TK_GE, jump, in1, in3 */ + int res, res2; /* Result of the comparison of pIn1 against pIn3 */ + char affinity; /* Affinity to use for comparison */ + u16 flags1; /* Copy of initial value of pIn1->flags */ + u16 flags3; /* Copy of initial value of pIn3->flags */ + + pIn1 = &aMem[pOp->p1]; + pIn3 = &aMem[pOp->p3]; + flags1 = pIn1->flags; + flags3 = pIn3->flags; + if( (flags1 & flags3 & MEM_Int)!=0 ){ + /* Common case of comparison of two integers */ + if( pIn3->u.i > pIn1->u.i ){ + if( sqlite3aGTb[pOp->opcode] ){ + VdbeBranchTaken(1, (pOp->p5 & SQLITE_NULLEQ)?2:3); + goto jump_to_p2; + } + iCompare = +1; + VVA_ONLY( iCompareIsInit = 1; ) + }else if( pIn3->u.i < pIn1->u.i ){ + if( sqlite3aLTb[pOp->opcode] ){ + VdbeBranchTaken(1, (pOp->p5 & SQLITE_NULLEQ)?2:3); + goto jump_to_p2; + } + iCompare = -1; + VVA_ONLY( iCompareIsInit = 1; ) + }else{ + if( sqlite3aEQb[pOp->opcode] ){ + VdbeBranchTaken(1, (pOp->p5 & SQLITE_NULLEQ)?2:3); + goto jump_to_p2; + } + iCompare = 0; + VVA_ONLY( iCompareIsInit = 1; ) + } + VdbeBranchTaken(0, (pOp->p5 & SQLITE_NULLEQ)?2:3); + break; + } + if( (flags1 | flags3)&MEM_Null ){ + /* One or both operands are NULL */ + if( pOp->p5 & SQLITE_NULLEQ ){ + /* If SQLITE_NULLEQ is set (which will only happen if the operator is + ** OP_Eq or OP_Ne) then take the jump or not depending on whether + ** or not both operands are null. + */ + assert( (flags1 & MEM_Cleared)==0 ); + assert( (pOp->p5 & SQLITE_JUMPIFNULL)==0 || CORRUPT_DB ); + testcase( (pOp->p5 & SQLITE_JUMPIFNULL)!=0 ); + if( (flags1&flags3&MEM_Null)!=0 + && (flags3&MEM_Cleared)==0 + ){ + res = 0; /* Operands are equal */ + }else{ + res = ((flags3 & MEM_Null) ? -1 : +1); /* Operands are not equal */ + } + }else{ + /* SQLITE_NULLEQ is clear and at least one operand is NULL, + ** then the result is always NULL. + ** The jump is taken if the SQLITE_JUMPIFNULL bit is set. + */ + VdbeBranchTaken(2,3); + if( pOp->p5 & SQLITE_JUMPIFNULL ){ + goto jump_to_p2; + } + iCompare = 1; /* Operands are not equal */ + VVA_ONLY( iCompareIsInit = 1; ) + break; + } + }else{ + /* Neither operand is NULL and we couldn't do the special high-speed + ** integer comparison case. So do a general-case comparison. */ + affinity = pOp->p5 & SQLITE_AFF_MASK; + if( affinity>=SQLITE_AFF_NUMERIC ){ + if( (flags1 | flags3)&MEM_Str ){ + if( (flags1 & (MEM_Int|MEM_IntReal|MEM_Real|MEM_Str))==MEM_Str ){ + applyNumericAffinity(pIn1,0); + assert( flags3==pIn3->flags || CORRUPT_DB ); + flags3 = pIn3->flags; + } + if( (flags3 & (MEM_Int|MEM_IntReal|MEM_Real|MEM_Str))==MEM_Str ){ + applyNumericAffinity(pIn3,0); + } + } + }else if( affinity==SQLITE_AFF_TEXT && ((flags1 | flags3) & MEM_Str)!=0 ){ + if( (flags1 & MEM_Str)!=0 ){ + pIn1->flags &= ~(MEM_Int|MEM_Real|MEM_IntReal); + }else if( (flags1&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){ + testcase( pIn1->flags & MEM_Int ); + testcase( pIn1->flags & MEM_Real ); + testcase( pIn1->flags & MEM_IntReal ); + sqlite3VdbeMemStringify(pIn1, encoding, 1); + testcase( (flags1&MEM_Dyn) != (pIn1->flags&MEM_Dyn) ); + flags1 = (pIn1->flags & ~MEM_TypeMask) | (flags1 & MEM_TypeMask); + if( NEVER(pIn1==pIn3) ) flags3 = flags1 | MEM_Str; + } + if( (flags3 & MEM_Str)!=0 ){ + pIn3->flags &= ~(MEM_Int|MEM_Real|MEM_IntReal); + }else if( (flags3&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){ + testcase( pIn3->flags & MEM_Int ); + testcase( pIn3->flags & MEM_Real ); + testcase( pIn3->flags & MEM_IntReal ); + sqlite3VdbeMemStringify(pIn3, encoding, 1); + testcase( (flags3&MEM_Dyn) != (pIn3->flags&MEM_Dyn) ); + flags3 = (pIn3->flags & ~MEM_TypeMask) | (flags3 & MEM_TypeMask); + } + } + assert( pOp->p4type==P4_COLLSEQ || pOp->p4.pColl==0 ); + res = sqlite3MemCompare(pIn3, pIn1, pOp->p4.pColl); + } + + /* At this point, res is negative, zero, or positive if reg[P1] is + ** less than, equal to, or greater than reg[P3], respectively. Compute + ** the answer to this operator in res2, depending on what the comparison + ** operator actually is. The next block of code depends on the fact + ** that the 6 comparison operators are consecutive integers in this + ** order: NE, EQ, GT, LE, LT, GE */ + assert( OP_Eq==OP_Ne+1 ); assert( OP_Gt==OP_Ne+2 ); assert( OP_Le==OP_Ne+3 ); + assert( OP_Lt==OP_Ne+4 ); assert( OP_Ge==OP_Ne+5 ); + if( res<0 ){ + res2 = sqlite3aLTb[pOp->opcode]; + }else if( res==0 ){ + res2 = sqlite3aEQb[pOp->opcode]; + }else{ + res2 = sqlite3aGTb[pOp->opcode]; + } + iCompare = res; + VVA_ONLY( iCompareIsInit = 1; ) + + /* Undo any changes made by applyAffinity() to the input registers. */ + assert( (pIn3->flags & MEM_Dyn) == (flags3 & MEM_Dyn) ); + pIn3->flags = flags3; + assert( (pIn1->flags & MEM_Dyn) == (flags1 & MEM_Dyn) ); + pIn1->flags = flags1; + + VdbeBranchTaken(res2!=0, (pOp->p5 & SQLITE_NULLEQ)?2:3); + if( res2 ){ + goto jump_to_p2; + } + break; +} + +/* Opcode: ElseEq * P2 * * * +** +** This opcode must follow an OP_Lt or OP_Gt comparison operator. There +** can be zero or more OP_ReleaseReg opcodes intervening, but no other +** opcodes are allowed to occur between this instruction and the previous +** OP_Lt or OP_Gt. +** +** If the result of an OP_Eq comparison on the same two operands as +** the prior OP_Lt or OP_Gt would have been true, then jump to P2. If +** the result of an OP_Eq comparison on the two previous operands +** would have been false or NULL, then fall through. +*/ +case OP_ElseEq: { /* same as TK_ESCAPE, jump */ + +#ifdef SQLITE_DEBUG + /* Verify the preconditions of this opcode - that it follows an OP_Lt or + ** OP_Gt with zero or more intervening OP_ReleaseReg opcodes */ + int iAddr; + for(iAddr = (int)(pOp - aOp) - 1; ALWAYS(iAddr>=0); iAddr--){ + if( aOp[iAddr].opcode==OP_ReleaseReg ) continue; + assert( aOp[iAddr].opcode==OP_Lt || aOp[iAddr].opcode==OP_Gt ); + break; + } +#endif /* SQLITE_DEBUG */ + assert( iCompareIsInit ); + VdbeBranchTaken(iCompare==0, 2); + if( iCompare==0 ) goto jump_to_p2; + break; +} + + +/* Opcode: Permutation * * * P4 * +** +** Set the permutation used by the OP_Compare operator in the next +** instruction. The permutation is stored in the P4 operand. +** +** The permutation is only valid for the next opcode which must be +** an OP_Compare that has the OPFLAG_PERMUTE bit set in P5. +** +** The first integer in the P4 integer array is the length of the array +** and does not become part of the permutation. +*/ +case OP_Permutation: { + assert( pOp->p4type==P4_INTARRAY ); + assert( pOp->p4.ai ); + assert( pOp[1].opcode==OP_Compare ); + assert( pOp[1].p5 & OPFLAG_PERMUTE ); + break; +} + +/* Opcode: Compare P1 P2 P3 P4 P5 +** Synopsis: r[P1@P3] <-> r[P2@P3] +** +** Compare two vectors of registers in reg(P1)..reg(P1+P3-1) (call this +** vector "A") and in reg(P2)..reg(P2+P3-1) ("B"). Save the result of +** the comparison for use by the next OP_Jump instruct. +** +** If P5 has the OPFLAG_PERMUTE bit set, then the order of comparison is +** determined by the most recent OP_Permutation operator. If the +** OPFLAG_PERMUTE bit is clear, then register are compared in sequential +** order. +** +** P4 is a KeyInfo structure that defines collating sequences and sort +** orders for the comparison. The permutation applies to registers +** only. The KeyInfo elements are used sequentially. +** +** The comparison is a sort comparison, so NULLs compare equal, +** NULLs are less than numbers, numbers are less than strings, +** and strings are less than blobs. +** +** This opcode must be immediately followed by an OP_Jump opcode. +*/ +case OP_Compare: { + int n; + int i; + int p1; + int p2; + const KeyInfo *pKeyInfo; + u32 idx; + CollSeq *pColl; /* Collating sequence to use on this term */ + int bRev; /* True for DESCENDING sort order */ + u32 *aPermute; /* The permutation */ + + if( (pOp->p5 & OPFLAG_PERMUTE)==0 ){ + aPermute = 0; + }else{ + assert( pOp>aOp ); + assert( pOp[-1].opcode==OP_Permutation ); + assert( pOp[-1].p4type==P4_INTARRAY ); + aPermute = pOp[-1].p4.ai + 1; + assert( aPermute!=0 ); + } + n = pOp->p3; + pKeyInfo = pOp->p4.pKeyInfo; + assert( n>0 ); + assert( pKeyInfo!=0 ); + assert( pKeyInfo->aSortFlags!=0 ); + p1 = pOp->p1; + p2 = pOp->p2; +#ifdef SQLITE_DEBUG + if( aPermute ){ + int k, mx = 0; + for(k=0; k(u32)mx ) mx = aPermute[k]; + assert( p1>0 && p1+mx<=(p->nMem+1 - p->nCursor)+1 ); + assert( p2>0 && p2+mx<=(p->nMem+1 - p->nCursor)+1 ); + }else{ + assert( p1>0 && p1+n<=(p->nMem+1 - p->nCursor)+1 ); + assert( p2>0 && p2+n<=(p->nMem+1 - p->nCursor)+1 ); + } +#endif /* SQLITE_DEBUG */ + for(i=0; inKeyField ); + pColl = pKeyInfo->aColl[i]; + bRev = (pKeyInfo->aSortFlags[i] & KEYINFO_ORDER_DESC); + iCompare = sqlite3MemCompare(&aMem[p1+idx], &aMem[p2+idx], pColl); + VVA_ONLY( iCompareIsInit = 1; ) + if( iCompare ){ + if( (pKeyInfo->aSortFlags[i] & KEYINFO_ORDER_BIGNULL) + && ((aMem[p1+idx].flags & MEM_Null) || (aMem[p2+idx].flags & MEM_Null)) + ){ + iCompare = -iCompare; + } + if( bRev ) iCompare = -iCompare; + break; + } + } + assert( pOp[1].opcode==OP_Jump ); + break; +} + +/* Opcode: Jump P1 P2 P3 * * +** +** Jump to the instruction at address P1, P2, or P3 depending on whether +** in the most recent OP_Compare instruction the P1 vector was less than, +** equal to, or greater than the P2 vector, respectively. +** +** This opcode must immediately follow an OP_Compare opcode. +*/ +case OP_Jump: { /* jump */ + assert( pOp>aOp && pOp[-1].opcode==OP_Compare ); + assert( iCompareIsInit ); + if( iCompare<0 ){ + VdbeBranchTaken(0,4); pOp = &aOp[pOp->p1 - 1]; + }else if( iCompare==0 ){ + VdbeBranchTaken(1,4); pOp = &aOp[pOp->p2 - 1]; + }else{ + VdbeBranchTaken(2,4); pOp = &aOp[pOp->p3 - 1]; + } + break; +} + +/* Opcode: And P1 P2 P3 * * +** Synopsis: r[P3]=(r[P1] && r[P2]) +** +** Take the logical AND of the values in registers P1 and P2 and +** write the result into register P3. +** +** If either P1 or P2 is 0 (false) then the result is 0 even if +** the other input is NULL. A NULL and true or two NULLs give +** a NULL output. +*/ +/* Opcode: Or P1 P2 P3 * * +** Synopsis: r[P3]=(r[P1] || r[P2]) +** +** Take the logical OR of the values in register P1 and P2 and +** store the answer in register P3. +** +** If either P1 or P2 is nonzero (true) then the result is 1 (true) +** even if the other input is NULL. A NULL and false or two NULLs +** give a NULL output. +*/ +case OP_And: /* same as TK_AND, in1, in2, out3 */ +case OP_Or: { /* same as TK_OR, in1, in2, out3 */ + int v1; /* Left operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */ + int v2; /* Right operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */ + + v1 = sqlite3VdbeBooleanValue(&aMem[pOp->p1], 2); + v2 = sqlite3VdbeBooleanValue(&aMem[pOp->p2], 2); + if( pOp->opcode==OP_And ){ + static const unsigned char and_logic[] = { 0, 0, 0, 0, 1, 2, 0, 2, 2 }; + v1 = and_logic[v1*3+v2]; + }else{ + static const unsigned char or_logic[] = { 0, 1, 2, 1, 1, 1, 2, 1, 2 }; + v1 = or_logic[v1*3+v2]; + } + pOut = &aMem[pOp->p3]; + if( v1==2 ){ + MemSetTypeFlag(pOut, MEM_Null); + }else{ + pOut->u.i = v1; + MemSetTypeFlag(pOut, MEM_Int); + } + break; +} + +/* Opcode: IsTrue P1 P2 P3 P4 * +** Synopsis: r[P2] = coalesce(r[P1]==TRUE,P3) ^ P4 +** +** This opcode implements the IS TRUE, IS FALSE, IS NOT TRUE, and +** IS NOT FALSE operators. +** +** Interpret the value in register P1 as a boolean value. Store that +** boolean (a 0 or 1) in register P2. Or if the value in register P1 is +** NULL, then the P3 is stored in register P2. Invert the answer if P4 +** is 1. +** +** The logic is summarized like this: +** +**
      +**
    • If P3==0 and P4==0 then r[P2] := r[P1] IS TRUE +**
    • If P3==1 and P4==1 then r[P2] := r[P1] IS FALSE +**
    • If P3==0 and P4==1 then r[P2] := r[P1] IS NOT TRUE +**
    • If P3==1 and P4==0 then r[P2] := r[P1] IS NOT FALSE +**
    +*/ +case OP_IsTrue: { /* in1, out2 */ + assert( pOp->p4type==P4_INT32 ); + assert( pOp->p4.i==0 || pOp->p4.i==1 ); + assert( pOp->p3==0 || pOp->p3==1 ); + sqlite3VdbeMemSetInt64(&aMem[pOp->p2], + sqlite3VdbeBooleanValue(&aMem[pOp->p1], pOp->p3) ^ pOp->p4.i); + break; +} + +/* Opcode: Not P1 P2 * * * +** Synopsis: r[P2]= !r[P1] +** +** Interpret the value in register P1 as a boolean value. Store the +** boolean complement in register P2. If the value in register P1 is +** NULL, then a NULL is stored in P2. +*/ +case OP_Not: { /* same as TK_NOT, in1, out2 */ + pIn1 = &aMem[pOp->p1]; + pOut = &aMem[pOp->p2]; + if( (pIn1->flags & MEM_Null)==0 ){ + sqlite3VdbeMemSetInt64(pOut, !sqlite3VdbeBooleanValue(pIn1,0)); + }else{ + sqlite3VdbeMemSetNull(pOut); + } + break; +} + +/* Opcode: BitNot P1 P2 * * * +** Synopsis: r[P2]= ~r[P1] +** +** Interpret the content of register P1 as an integer. Store the +** ones-complement of the P1 value into register P2. If P1 holds +** a NULL then store a NULL in P2. +*/ +case OP_BitNot: { /* same as TK_BITNOT, in1, out2 */ + pIn1 = &aMem[pOp->p1]; + pOut = &aMem[pOp->p2]; + sqlite3VdbeMemSetNull(pOut); + if( (pIn1->flags & MEM_Null)==0 ){ + pOut->flags = MEM_Int; + pOut->u.i = ~sqlite3VdbeIntValue(pIn1); + } + break; +} + +/* Opcode: Once P1 P2 P3 * * +** +** Fall through to the next instruction the first time this opcode is +** encountered on each invocation of the byte-code program. Jump to P2 +** on the second and all subsequent encounters during the same invocation. +** +** Top-level programs determine first invocation by comparing the P1 +** operand against the P1 operand on the OP_Init opcode at the beginning +** of the program. If the P1 values differ, then fall through and make +** the P1 of this opcode equal to the P1 of OP_Init. If P1 values are +** the same then take the jump. +** +** For subprograms, there is a bitmask in the VdbeFrame that determines +** whether or not the jump should be taken. The bitmask is necessary +** because the self-altering code trick does not work for recursive +** triggers. +** +** The P3 operand is not used directly by this opcode. However P3 is +** used by the code generator as follows: If this opcode is the start +** of a subroutine and that subroutine uses a Bloom filter, then P3 will +** be the register that holds that Bloom filter. See tag-202407032019 +** in the source code for implementation details. +*/ +case OP_Once: { /* jump */ + u32 iAddr; /* Address of this instruction */ + assert( p->aOp[0].opcode==OP_Init ); + if( p->pFrame ){ + iAddr = (int)(pOp - p->aOp); + if( (p->pFrame->aOnce[iAddr/8] & (1<<(iAddr & 7)))!=0 ){ + VdbeBranchTaken(1, 2); + goto jump_to_p2; + } + p->pFrame->aOnce[iAddr/8] |= 1<<(iAddr & 7); + }else{ + if( p->aOp[0].p1==pOp->p1 ){ + VdbeBranchTaken(1, 2); + goto jump_to_p2; + } + } + VdbeBranchTaken(0, 2); + pOp->p1 = p->aOp[0].p1; + break; +} + +/* Opcode: If P1 P2 P3 * * +** +** Jump to P2 if the value in register P1 is true. The value +** is considered true if it is numeric and non-zero. If the value +** in P1 is NULL then take the jump if and only if P3 is non-zero. +*/ +case OP_If: { /* jump, in1 */ + int c; + c = sqlite3VdbeBooleanValue(&aMem[pOp->p1], pOp->p3); + VdbeBranchTaken(c!=0, 2); + if( c ) goto jump_to_p2; + break; +} + +/* Opcode: IfNot P1 P2 P3 * * +** +** Jump to P2 if the value in register P1 is False. The value +** is considered false if it has a numeric value of zero. If the value +** in P1 is NULL then take the jump if and only if P3 is non-zero. +*/ +case OP_IfNot: { /* jump, in1 */ + int c; + c = !sqlite3VdbeBooleanValue(&aMem[pOp->p1], !pOp->p3); + VdbeBranchTaken(c!=0, 2); + if( c ) goto jump_to_p2; + break; +} + +/* Opcode: IsNull P1 P2 * * * +** Synopsis: if r[P1]==NULL goto P2 +** +** Jump to P2 if the value in register P1 is NULL. +*/ +case OP_IsNull: { /* same as TK_ISNULL, jump, in1 */ + pIn1 = &aMem[pOp->p1]; + VdbeBranchTaken( (pIn1->flags & MEM_Null)!=0, 2); + if( (pIn1->flags & MEM_Null)!=0 ){ + goto jump_to_p2; + } + break; +} + +/* Opcode: IsType P1 P2 P3 P4 P5 +** Synopsis: if typeof(P1.P3) in P5 goto P2 +** +** Jump to P2 if the type of a column in a btree is one of the types specified +** by the P5 bitmask. +** +** P1 is normally a cursor on a btree for which the row decode cache is +** valid through at least column P3. In other words, there should have been +** a prior OP_Column for column P3 or greater. If the cursor is not valid, +** then this opcode might give spurious results. +** The the btree row has fewer than P3 columns, then use P4 as the +** datatype. +** +** If P1 is -1, then P3 is a register number and the datatype is taken +** from the value in that register. +** +** P5 is a bitmask of data types. SQLITE_INTEGER is the least significant +** (0x01) bit. SQLITE_FLOAT is the 0x02 bit. SQLITE_TEXT is 0x04. +** SQLITE_BLOB is 0x08. SQLITE_NULL is 0x10. +** +** WARNING: This opcode does not reliably distinguish between NULL and REAL +** when P1>=0. If the database contains a NaN value, this opcode will think +** that the datatype is REAL when it should be NULL. When P1<0 and the value +** is already stored in register P3, then this opcode does reliably +** distinguish between NULL and REAL. The problem only arises then P1>=0. +** +** Take the jump to address P2 if and only if the datatype of the +** value determined by P1 and P3 corresponds to one of the bits in the +** P5 bitmask. +** +*/ +case OP_IsType: { /* jump */ + VdbeCursor *pC; + u16 typeMask; + u32 serialType; + + assert( pOp->p1>=(-1) && pOp->p1nCursor ); + assert( pOp->p1>=0 || (pOp->p3>=0 && pOp->p3<=(p->nMem+1 - p->nCursor)) ); + if( pOp->p1>=0 ){ + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pOp->p3>=0 ); + if( pOp->p3nHdrParsed ){ + serialType = pC->aType[pOp->p3]; + if( serialType>=12 ){ + if( serialType&1 ){ + typeMask = 0x04; /* SQLITE_TEXT */ + }else{ + typeMask = 0x08; /* SQLITE_BLOB */ + } + }else{ + static const unsigned char aMask[] = { + 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2, + 0x01, 0x01, 0x10, 0x10 + }; + testcase( serialType==0 ); + testcase( serialType==1 ); + testcase( serialType==2 ); + testcase( serialType==3 ); + testcase( serialType==4 ); + testcase( serialType==5 ); + testcase( serialType==6 ); + testcase( serialType==7 ); + testcase( serialType==8 ); + testcase( serialType==9 ); + testcase( serialType==10 ); + testcase( serialType==11 ); + typeMask = aMask[serialType]; + } + }else{ + typeMask = 1 << (pOp->p4.i - 1); + testcase( typeMask==0x01 ); + testcase( typeMask==0x02 ); + testcase( typeMask==0x04 ); + testcase( typeMask==0x08 ); + testcase( typeMask==0x10 ); + } + }else{ + assert( memIsValid(&aMem[pOp->p3]) ); + typeMask = 1 << (sqlite3_value_type((sqlite3_value*)&aMem[pOp->p3])-1); + testcase( typeMask==0x01 ); + testcase( typeMask==0x02 ); + testcase( typeMask==0x04 ); + testcase( typeMask==0x08 ); + testcase( typeMask==0x10 ); + } + VdbeBranchTaken( (typeMask & pOp->p5)!=0, 2); + if( typeMask & pOp->p5 ){ + goto jump_to_p2; + } + break; +} + +/* Opcode: ZeroOrNull P1 P2 P3 * * +** Synopsis: r[P2] = 0 OR NULL +** +** If both registers P1 and P3 are NOT NULL, then store a zero in +** register P2. If either registers P1 or P3 are NULL then put +** a NULL in register P2. +*/ +case OP_ZeroOrNull: { /* in1, in2, out2, in3 */ + if( (aMem[pOp->p1].flags & MEM_Null)!=0 + || (aMem[pOp->p3].flags & MEM_Null)!=0 + ){ + sqlite3VdbeMemSetNull(aMem + pOp->p2); + }else{ + sqlite3VdbeMemSetInt64(aMem + pOp->p2, 0); + } + break; +} + +/* Opcode: NotNull P1 P2 * * * +** Synopsis: if r[P1]!=NULL goto P2 +** +** Jump to P2 if the value in register P1 is not NULL. +*/ +case OP_NotNull: { /* same as TK_NOTNULL, jump, in1 */ + pIn1 = &aMem[pOp->p1]; + VdbeBranchTaken( (pIn1->flags & MEM_Null)==0, 2); + if( (pIn1->flags & MEM_Null)==0 ){ + goto jump_to_p2; + } + break; +} + +/* Opcode: IfNullRow P1 P2 P3 * * +** Synopsis: if P1.nullRow then r[P3]=NULL, goto P2 +** +** Check the cursor P1 to see if it is currently pointing at a NULL row. +** If it is, then set register P3 to NULL and jump immediately to P2. +** If P1 is not on a NULL row, then fall through without making any +** changes. +** +** If P1 is not an open cursor, then this opcode is a no-op. +*/ +case OP_IfNullRow: { /* jump */ + VdbeCursor *pC; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + if( pC && pC->nullRow ){ + sqlite3VdbeMemSetNull(aMem + pOp->p3); + goto jump_to_p2; + } + break; +} + +#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC +/* Opcode: Offset P1 P2 P3 * * +** Synopsis: r[P3] = sqlite_offset(P1) +** +** Store in register r[P3] the byte offset into the database file that is the +** start of the payload for the record at which that cursor P1 is currently +** pointing. +** +** P2 is the column number for the argument to the sqlite_offset() function. +** This opcode does not use P2 itself, but the P2 value is used by the +** code generator. The P1, P2, and P3 operands to this opcode are the +** same as for OP_Column. +** +** This opcode is only available if SQLite is compiled with the +** -DSQLITE_ENABLE_OFFSET_SQL_FUNC option. +*/ +case OP_Offset: { /* out3 */ + VdbeCursor *pC; /* The VDBE cursor */ + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + pOut = &p->aMem[pOp->p3]; + if( pC==0 || pC->eCurType!=CURTYPE_BTREE ){ + sqlite3VdbeMemSetNull(pOut); + }else{ + if( pC->deferredMoveto ){ + rc = sqlite3VdbeFinishMoveto(pC); + if( rc ) goto abort_due_to_error; + } + if( sqlite3BtreeEof(pC->uc.pCursor) ){ + sqlite3VdbeMemSetNull(pOut); + }else{ + sqlite3VdbeMemSetInt64(pOut, sqlite3BtreeOffset(pC->uc.pCursor)); + } + } + break; +} +#endif /* SQLITE_ENABLE_OFFSET_SQL_FUNC */ + +/* Opcode: Column P1 P2 P3 P4 P5 +** Synopsis: r[P3]=PX cursor P1 column P2 +** +** Interpret the data that cursor P1 points to as a structure built using +** the MakeRecord instruction. (See the MakeRecord opcode for additional +** information about the format of the data.) Extract the P2-th column +** from this record. If there are less than (P2+1) +** values in the record, extract a NULL. +** +** The value extracted is stored in register P3. +** +** If the record contains fewer than P2 fields, then extract a NULL. Or, +** if the P4 argument is a P4_MEM use the value of the P4 argument as +** the result. +** +** If the OPFLAG_LENGTHARG bit is set in P5 then the result is guaranteed +** to only be used by the length() function or the equivalent. The content +** of large blobs is not loaded, thus saving CPU cycles. If the +** OPFLAG_TYPEOFARG bit is set then the result will only be used by the +** typeof() function or the IS NULL or IS NOT NULL operators or the +** equivalent. In this case, all content loading can be omitted. +*/ +case OP_Column: { /* ncycle */ + u32 p2; /* column number to retrieve */ + VdbeCursor *pC; /* The VDBE cursor */ + BtCursor *pCrsr; /* The B-Tree cursor corresponding to pC */ + u32 *aOffset; /* aOffset[i] is offset to start of data for i-th column */ + int len; /* The length of the serialized data for the column */ + int i; /* Loop counter */ + Mem *pDest; /* Where to write the extracted value */ + Mem sMem; /* For storing the record being decoded */ + const u8 *zData; /* Part of the record being decoded */ + const u8 *zHdr; /* Next unparsed byte of the header */ + const u8 *zEndHdr; /* Pointer to first byte after the header */ + u64 offset64; /* 64-bit offset */ + u32 t; /* A type code from the record header */ + Mem *pReg; /* PseudoTable input register */ + + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( pOp->p3>0 && pOp->p3<=(p->nMem+1 - p->nCursor) ); + pC = p->apCsr[pOp->p1]; + p2 = (u32)pOp->p2; + +op_column_restart: + assert( pC!=0 ); + assert( p2<(u32)pC->nField + || (pC->eCurType==CURTYPE_PSEUDO && pC->seekResult==0) ); + aOffset = pC->aOffset; + assert( aOffset==pC->aType+pC->nField ); + assert( pC->eCurType!=CURTYPE_VTAB ); + assert( pC->eCurType!=CURTYPE_PSEUDO || pC->nullRow ); + assert( pC->eCurType!=CURTYPE_SORTER ); + + if( pC->cacheStatus!=p->cacheCtr ){ /*OPTIMIZATION-IF-FALSE*/ + if( pC->nullRow ){ + if( pC->eCurType==CURTYPE_PSEUDO && pC->seekResult>0 ){ + /* For the special case of as pseudo-cursor, the seekResult field + ** identifies the register that holds the record */ + pReg = &aMem[pC->seekResult]; + assert( pReg->flags & MEM_Blob ); + assert( memIsValid(pReg) ); + pC->payloadSize = pC->szRow = pReg->n; + pC->aRow = (u8*)pReg->z; + }else{ + pDest = &aMem[pOp->p3]; + memAboutToChange(p, pDest); + sqlite3VdbeMemSetNull(pDest); + goto op_column_out; + } + }else{ + pCrsr = pC->uc.pCursor; + if( pC->deferredMoveto ){ + u32 iMap; + assert( !pC->isEphemeral ); + if( pC->ub.aAltMap && (iMap = pC->ub.aAltMap[1+p2])>0 ){ + pC = pC->pAltCursor; + p2 = iMap - 1; + goto op_column_restart; + } + rc = sqlite3VdbeFinishMoveto(pC); + if( rc ) goto abort_due_to_error; + }else if( sqlite3BtreeCursorHasMoved(pCrsr) ){ + rc = sqlite3VdbeHandleMovedCursor(pC); + if( rc ) goto abort_due_to_error; + goto op_column_restart; + } + assert( pC->eCurType==CURTYPE_BTREE ); + assert( pCrsr ); + assert( sqlite3BtreeCursorIsValid(pCrsr) ); + pC->payloadSize = sqlite3BtreePayloadSize(pCrsr); + pC->aRow = sqlite3BtreePayloadFetch(pCrsr, &pC->szRow); + assert( pC->szRow<=pC->payloadSize ); + assert( pC->szRow<=65536 ); /* Maximum page size is 64KiB */ + } + pC->cacheStatus = p->cacheCtr; + if( (aOffset[0] = pC->aRow[0])<0x80 ){ + pC->iHdrOffset = 1; + }else{ + pC->iHdrOffset = sqlite3GetVarint32(pC->aRow, aOffset); + } + pC->nHdrParsed = 0; + + if( pC->szRowaRow does not have to hold the entire row, but it does at least + ** need to cover the header of the record. If pC->aRow does not contain + ** the complete header, then set it to zero, forcing the header to be + ** dynamically allocated. */ + pC->aRow = 0; + pC->szRow = 0; + + /* Make sure a corrupt database has not given us an oversize header. + ** Do this now to avoid an oversize memory allocation. + ** + ** Type entries can be between 1 and 5 bytes each. But 4 and 5 byte + ** types use so much data space that there can only be 4096 and 32 of + ** them, respectively. So the maximum header length results from a + ** 3-byte type for each of the maximum of 32768 columns plus three + ** extra bytes for the header length itself. 32768*3 + 3 = 98307. + */ + if( aOffset[0] > 98307 || aOffset[0] > pC->payloadSize ){ + goto op_column_corrupt; + } + }else{ + /* This is an optimization. By skipping over the first few tests + ** (ex: pC->nHdrParsed<=p2) in the next section, we achieve a + ** measurable performance gain. + ** + ** This branch is taken even if aOffset[0]==0. Such a record is never + ** generated by SQLite, and could be considered corruption, but we + ** accept it for historical reasons. When aOffset[0]==0, the code this + ** branch jumps to reads past the end of the record, but never more + ** than a few bytes. Even if the record occurs at the end of the page + ** content area, the "page header" comes after the page content and so + ** this overread is harmless. Similar overreads can occur for a corrupt + ** database file. + */ + zData = pC->aRow; + assert( pC->nHdrParsed<=p2 ); /* Conditional skipped */ + testcase( aOffset[0]==0 ); + goto op_column_read_header; + } + }else if( sqlite3BtreeCursorHasMoved(pC->uc.pCursor) ){ + rc = sqlite3VdbeHandleMovedCursor(pC); + if( rc ) goto abort_due_to_error; + goto op_column_restart; + } + + /* Make sure at least the first p2+1 entries of the header have been + ** parsed and valid information is in aOffset[] and pC->aType[]. + */ + if( pC->nHdrParsed<=p2 ){ + /* If there is more header available for parsing in the record, try + ** to extract additional fields up through the p2+1-th field + */ + if( pC->iHdrOffsetaRow==0 ){ + memset(&sMem, 0, sizeof(sMem)); + rc = sqlite3VdbeMemFromBtreeZeroOffset(pC->uc.pCursor,aOffset[0],&sMem); + if( rc!=SQLITE_OK ) goto abort_due_to_error; + zData = (u8*)sMem.z; + }else{ + zData = pC->aRow; + } + + /* Fill in pC->aType[i] and aOffset[i] values through the p2-th field. */ + op_column_read_header: + i = pC->nHdrParsed; + offset64 = aOffset[i]; + zHdr = zData + pC->iHdrOffset; + zEndHdr = zData + aOffset[0]; + testcase( zHdr>=zEndHdr ); + do{ + if( (pC->aType[i] = t = zHdr[0])<0x80 ){ + zHdr++; + offset64 += sqlite3VdbeOneByteSerialTypeLen(t); + }else{ + zHdr += sqlite3GetVarint32(zHdr, &t); + pC->aType[i] = t; + offset64 += sqlite3VdbeSerialTypeLen(t); + } + aOffset[++i] = (u32)(offset64 & 0xffffffff); + }while( (u32)i<=p2 && zHdr=zEndHdr && (zHdr>zEndHdr || offset64!=pC->payloadSize)) + || (offset64 > pC->payloadSize) + ){ + if( aOffset[0]==0 ){ + i = 0; + zHdr = zEndHdr; + }else{ + if( pC->aRow==0 ) sqlite3VdbeMemRelease(&sMem); + goto op_column_corrupt; + } + } + + pC->nHdrParsed = i; + pC->iHdrOffset = (u32)(zHdr - zData); + if( pC->aRow==0 ) sqlite3VdbeMemRelease(&sMem); + }else{ + t = 0; + } + + /* If after trying to extract new entries from the header, nHdrParsed is + ** still not up to p2, that means that the record has fewer than p2 + ** columns. So the result will be either the default value or a NULL. + */ + if( pC->nHdrParsed<=p2 ){ + pDest = &aMem[pOp->p3]; + memAboutToChange(p, pDest); + if( pOp->p4type==P4_MEM ){ + sqlite3VdbeMemShallowCopy(pDest, pOp->p4.pMem, MEM_Static); + }else{ + sqlite3VdbeMemSetNull(pDest); + } + goto op_column_out; + } + }else{ + t = pC->aType[p2]; + } + + /* Extract the content for the p2+1-th column. Control can only + ** reach this point if aOffset[p2], aOffset[p2+1], and pC->aType[p2] are + ** all valid. + */ + assert( p2nHdrParsed ); + assert( rc==SQLITE_OK ); + pDest = &aMem[pOp->p3]; + memAboutToChange(p, pDest); + assert( sqlite3VdbeCheckMemInvariants(pDest) ); + if( VdbeMemDynamic(pDest) ){ + sqlite3VdbeMemSetNull(pDest); + } + assert( t==pC->aType[p2] ); + if( pC->szRow>=aOffset[p2+1] ){ + /* This is the common case where the desired content fits on the original + ** page - where the content is not on an overflow page */ + zData = pC->aRow + aOffset[p2]; + if( t<12 ){ + sqlite3VdbeSerialGet(zData, t, pDest); + }else{ + /* If the column value is a string, we need a persistent value, not + ** a MEM_Ephem value. This branch is a fast short-cut that is equivalent + ** to calling sqlite3VdbeSerialGet() and sqlite3VdbeDeephemeralize(). + */ + static const u16 aFlag[] = { MEM_Blob, MEM_Str|MEM_Term }; + pDest->n = len = (t-12)/2; + pDest->enc = encoding; + if( pDest->szMalloc < len+2 ){ + if( len>db->aLimit[SQLITE_LIMIT_LENGTH] ) goto too_big; + pDest->flags = MEM_Null; + if( sqlite3VdbeMemGrow(pDest, len+2, 0) ) goto no_mem; + }else{ + pDest->z = pDest->zMalloc; + } + memcpy(pDest->z, zData, len); + pDest->z[len] = 0; + pDest->z[len+1] = 0; + pDest->flags = aFlag[t&1]; + } + }else{ + u8 p5; + pDest->enc = encoding; + assert( pDest->db==db ); + /* This branch happens only when content is on overflow pages */ + if( ((p5 = (pOp->p5 & OPFLAG_BYTELENARG))!=0 + && (p5==OPFLAG_TYPEOFARG + || (t>=12 && ((t&1)==0 || p5==OPFLAG_BYTELENARG)) + ) + ) + || sqlite3VdbeSerialTypeLen(t)==0 + ){ + /* Content is irrelevant for + ** 1. the typeof() function, + ** 2. the length(X) function if X is a blob, and + ** 3. if the content length is zero. + ** So we might as well use bogus content rather than reading + ** content from disk. + ** + ** Although sqlite3VdbeSerialGet() may read at most 8 bytes from the + ** buffer passed to it, debugging function VdbeMemPrettyPrint() may + ** read more. Use the global constant sqlite3CtypeMap[] as the array, + ** as that array is 256 bytes long (plenty for VdbeMemPrettyPrint()) + ** and it begins with a bunch of zeros. + */ + sqlite3VdbeSerialGet((u8*)sqlite3CtypeMap, t, pDest); + }else{ + rc = vdbeColumnFromOverflow(pC, p2, t, aOffset[p2], + p->cacheCtr, colCacheCtr, pDest); + if( rc ){ + if( rc==SQLITE_NOMEM ) goto no_mem; + if( rc==SQLITE_TOOBIG ) goto too_big; + goto abort_due_to_error; + } + } + } + +op_column_out: + UPDATE_MAX_BLOBSIZE(pDest); + REGISTER_TRACE(pOp->p3, pDest); + break; + +op_column_corrupt: + if( aOp[0].p3>0 ){ + pOp = &aOp[aOp[0].p3-1]; + break; + }else{ + rc = SQLITE_CORRUPT_BKPT; + goto abort_due_to_error; + } +} + +/* Opcode: TypeCheck P1 P2 P3 P4 * +** Synopsis: typecheck(r[P1@P2]) +** +** Apply affinities to the range of P2 registers beginning with P1. +** Take the affinities from the Table object in P4. If any value +** cannot be coerced into the correct type, then raise an error. +** +** If P3==0, then omit checking of VIRTUAL columns. +** +** If P3==1, then omit checking of all generated column, both VIRTUAL +** and STORED. +** +** If P3>=2, then only check column number P3-2 in the table (which will +** be a VIRTUAL column) against the value in reg[P1]. In this case, +** P2 will be 1. +** +** This opcode is similar to OP_Affinity except that this opcode +** forces the register type to the Table column type. This is used +** to implement "strict affinity". +** +** GENERATED ALWAYS AS ... STATIC columns are only checked if P3 +** is zero. When P3 is non-zero, no type checking occurs for +** static generated columns. Virtual columns are computed at query time +** and so they are never checked. +** +** Preconditions: +** +**
      +**
    • P2 should be the number of non-virtual columns in the +** table of P4 unless P3>1, in which case P2 will be 1. +**
    • Table P4 is a STRICT table. +**
    +** +** If any precondition is false, an assertion fault occurs. +*/ +case OP_TypeCheck: { + Table *pTab; + Column *aCol; + int i; + int nCol; + + assert( pOp->p4type==P4_TABLE ); + pTab = pOp->p4.pTab; + assert( pTab->tabFlags & TF_Strict ); + assert( pOp->p3>=0 && pOp->p3nCol+2 ); + aCol = pTab->aCol; + pIn1 = &aMem[pOp->p1]; + if( pOp->p3<2 ){ + assert( pTab->nNVCol==pOp->p2 ); + i = 0; + nCol = pTab->nCol; + }else{ + i = pOp->p3-2; + nCol = i+1; + assert( inCol ); + assert( aCol[i].colFlags & COLFLAG_VIRTUAL ); + assert( pOp->p2==1 ); + } + for(; ip3<2 ){ + if( (aCol[i].colFlags & COLFLAG_VIRTUAL)!=0 ) continue; + if( pOp->p3 ){ pIn1++; continue; } + } + assert( pIn1 < &aMem[pOp->p1+pOp->p2] ); + applyAffinity(pIn1, aCol[i].affinity, encoding); + if( (pIn1->flags & MEM_Null)==0 ){ + switch( aCol[i].eCType ){ + case COLTYPE_BLOB: { + if( (pIn1->flags & MEM_Blob)==0 ) goto vdbe_type_error; + break; + } + case COLTYPE_INTEGER: + case COLTYPE_INT: { + if( (pIn1->flags & MEM_Int)==0 ) goto vdbe_type_error; + break; + } + case COLTYPE_TEXT: { + if( (pIn1->flags & MEM_Str)==0 ) goto vdbe_type_error; + break; + } + case COLTYPE_REAL: { + testcase( (pIn1->flags & (MEM_Real|MEM_IntReal))==MEM_Real ); + assert( (pIn1->flags & MEM_IntReal)==0 ); + if( pIn1->flags & MEM_Int ){ + /* When applying REAL affinity, if the result is still an MEM_Int + ** that will fit in 6 bytes, then change the type to MEM_IntReal + ** so that we keep the high-resolution integer value but know that + ** the type really wants to be REAL. */ + testcase( pIn1->u.i==140737488355328LL ); + testcase( pIn1->u.i==140737488355327LL ); + testcase( pIn1->u.i==-140737488355328LL ); + testcase( pIn1->u.i==-140737488355329LL ); + if( pIn1->u.i<=140737488355327LL && pIn1->u.i>=-140737488355328LL){ + pIn1->flags |= MEM_IntReal; + pIn1->flags &= ~MEM_Int; + }else{ + pIn1->u.r = (double)pIn1->u.i; + pIn1->flags |= MEM_Real; + pIn1->flags &= ~MEM_Int; + } + }else if( (pIn1->flags & (MEM_Real|MEM_IntReal))==0 ){ + goto vdbe_type_error; + } + break; + } + default: { + /* COLTYPE_ANY. Accept anything. */ + break; + } + } + } + REGISTER_TRACE((int)(pIn1-aMem), pIn1); + pIn1++; + } + assert( pIn1 == &aMem[pOp->p1+pOp->p2] ); + break; + +vdbe_type_error: + sqlite3VdbeError(p, "cannot store %s value in %s column %s.%s", + vdbeMemTypeName(pIn1), sqlite3StdType[aCol[i].eCType-1], + pTab->zName, aCol[i].zCnName); + rc = SQLITE_CONSTRAINT_DATATYPE; + goto abort_due_to_error; +} + +/* Opcode: Affinity P1 P2 * P4 * +** Synopsis: affinity(r[P1@P2]) +** +** Apply affinities to a range of P2 registers starting with P1. +** +** P4 is a string that is P2 characters long. The N-th character of the +** string indicates the column affinity that should be used for the N-th +** memory cell in the range. +*/ +case OP_Affinity: { + const char *zAffinity; /* The affinity to be applied */ + + zAffinity = pOp->p4.z; + assert( zAffinity!=0 ); + assert( pOp->p2>0 ); + assert( zAffinity[pOp->p2]==0 ); + pIn1 = &aMem[pOp->p1]; + while( 1 /*exit-by-break*/ ){ + assert( pIn1 <= &p->aMem[(p->nMem+1 - p->nCursor)] ); + assert( zAffinity[0]==SQLITE_AFF_NONE || memIsValid(pIn1) ); + applyAffinity(pIn1, zAffinity[0], encoding); + if( zAffinity[0]==SQLITE_AFF_REAL && (pIn1->flags & MEM_Int)!=0 ){ + /* When applying REAL affinity, if the result is still an MEM_Int + ** that will fit in 6 bytes, then change the type to MEM_IntReal + ** so that we keep the high-resolution integer value but know that + ** the type really wants to be REAL. */ + testcase( pIn1->u.i==140737488355328LL ); + testcase( pIn1->u.i==140737488355327LL ); + testcase( pIn1->u.i==-140737488355328LL ); + testcase( pIn1->u.i==-140737488355329LL ); + if( pIn1->u.i<=140737488355327LL && pIn1->u.i>=-140737488355328LL ){ + pIn1->flags |= MEM_IntReal; + pIn1->flags &= ~MEM_Int; + }else{ + pIn1->u.r = (double)pIn1->u.i; + pIn1->flags |= MEM_Real; + pIn1->flags &= ~(MEM_Int|MEM_Str); + } + } + REGISTER_TRACE((int)(pIn1-aMem), pIn1); + zAffinity++; + if( zAffinity[0]==0 ) break; + pIn1++; + } + break; +} + +/* Opcode: MakeRecord P1 P2 P3 P4 * +** Synopsis: r[P3]=mkrec(r[P1@P2]) +** +** Convert P2 registers beginning with P1 into the [record format] +** use as a data record in a database table or as a key +** in an index. The OP_Column opcode can decode the record later. +** +** P4 may be a string that is P2 characters long. The N-th character of the +** string indicates the column affinity that should be used for the N-th +** field of the index key. +** +** The mapping from character to affinity is given by the SQLITE_AFF_ +** macros defined in sqliteInt.h. +** +** If P4 is NULL then all index fields have the affinity BLOB. +** +** The meaning of P5 depends on whether or not the SQLITE_ENABLE_NULL_TRIM +** compile-time option is enabled: +** +** * If SQLITE_ENABLE_NULL_TRIM is enabled, then the P5 is the index +** of the right-most table that can be null-trimmed. +** +** * If SQLITE_ENABLE_NULL_TRIM is omitted, then P5 has the value +** OPFLAG_NOCHNG_MAGIC if the OP_MakeRecord opcode is allowed to +** accept no-change records with serial_type 10. This value is +** only used inside an assert() and does not affect the end result. +*/ +case OP_MakeRecord: { + Mem *pRec; /* The new record */ + u64 nData; /* Number of bytes of data space */ + int nHdr; /* Number of bytes of header space */ + i64 nByte; /* Data space required for this record */ + i64 nZero; /* Number of zero bytes at the end of the record */ + int nVarint; /* Number of bytes in a varint */ + u32 serial_type; /* Type field */ + Mem *pData0; /* First field to be combined into the record */ + Mem *pLast; /* Last field of the record */ + int nField; /* Number of fields in the record */ + char *zAffinity; /* The affinity string for the record */ + u32 len; /* Length of a field */ + u8 *zHdr; /* Where to write next byte of the header */ + u8 *zPayload; /* Where to write next byte of the payload */ + + /* Assuming the record contains N fields, the record format looks + ** like this: + ** + ** ------------------------------------------------------------------------ + ** | hdr-size | type 0 | type 1 | ... | type N-1 | data0 | ... | data N-1 | + ** ------------------------------------------------------------------------ + ** + ** Data(0) is taken from register P1. Data(1) comes from register P1+1 + ** and so forth. + ** + ** Each type field is a varint representing the serial type of the + ** corresponding data element (see sqlite3VdbeSerialType()). The + ** hdr-size field is also a varint which is the offset from the beginning + ** of the record to data0. + */ + nData = 0; /* Number of bytes of data space */ + nHdr = 0; /* Number of bytes of header space */ + nZero = 0; /* Number of zero bytes at the end of the record */ + nField = pOp->p1; + zAffinity = pOp->p4.z; + assert( nField>0 && pOp->p2>0 && pOp->p2+nField<=(p->nMem+1 - p->nCursor)+1 ); + pData0 = &aMem[nField]; + nField = pOp->p2; + pLast = &pData0[nField-1]; + + /* Identify the output register */ + assert( pOp->p3p1 || pOp->p3>=pOp->p1+pOp->p2 ); + pOut = &aMem[pOp->p3]; + memAboutToChange(p, pOut); + + /* Apply the requested affinity to all inputs + */ + assert( pData0<=pLast ); + if( zAffinity ){ + pRec = pData0; + do{ + applyAffinity(pRec, zAffinity[0], encoding); + if( zAffinity[0]==SQLITE_AFF_REAL && (pRec->flags & MEM_Int) ){ + pRec->flags |= MEM_IntReal; + pRec->flags &= ~(MEM_Int); + } + REGISTER_TRACE((int)(pRec-aMem), pRec); + zAffinity++; + pRec++; + assert( zAffinity[0]==0 || pRec<=pLast ); + }while( zAffinity[0] ); + } + +#ifdef SQLITE_ENABLE_NULL_TRIM + /* NULLs can be safely trimmed from the end of the record, as long as + ** as the schema format is 2 or more and none of the omitted columns + ** have a non-NULL default value. Also, the record must be left with + ** at least one field. If P5>0 then it will be one more than the + ** index of the right-most column with a non-NULL default value */ + if( pOp->p5 ){ + while( (pLast->flags & MEM_Null)!=0 && nField>pOp->p5 ){ + pLast--; + nField--; + } + } +#endif + + /* Loop through the elements that will make up the record to figure + ** out how much space is required for the new record. After this loop, + ** the Mem.uTemp field of each term should hold the serial-type that will + ** be used for that term in the generated record: + ** + ** Mem.uTemp value type + ** --------------- --------------- + ** 0 NULL + ** 1 1-byte signed integer + ** 2 2-byte signed integer + ** 3 3-byte signed integer + ** 4 4-byte signed integer + ** 5 6-byte signed integer + ** 6 8-byte signed integer + ** 7 IEEE float + ** 8 Integer constant 0 + ** 9 Integer constant 1 + ** 10,11 reserved for expansion + ** N>=12 and even BLOB + ** N>=13 and odd text + ** + ** The following additional values are computed: + ** nHdr Number of bytes needed for the record header + ** nData Number of bytes of data space needed for the record + ** nZero Zero bytes at the end of the record + */ + pRec = pLast; + do{ + assert( memIsValid(pRec) ); + if( pRec->flags & MEM_Null ){ + if( pRec->flags & MEM_Zero ){ + /* Values with MEM_Null and MEM_Zero are created by xColumn virtual + ** table methods that never invoke sqlite3_result_xxxxx() while + ** computing an unchanging column value in an UPDATE statement. + ** Give such values a special internal-use-only serial-type of 10 + ** so that they can be passed through to xUpdate and have + ** a true sqlite3_value_nochange(). */ +#ifndef SQLITE_ENABLE_NULL_TRIM + assert( pOp->p5==OPFLAG_NOCHNG_MAGIC || CORRUPT_DB ); +#endif + pRec->uTemp = 10; + }else{ + pRec->uTemp = 0; + } + nHdr++; + }else if( pRec->flags & (MEM_Int|MEM_IntReal) ){ + /* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */ + i64 i = pRec->u.i; + u64 uu; + testcase( pRec->flags & MEM_Int ); + testcase( pRec->flags & MEM_IntReal ); + if( i<0 ){ + uu = ~i; + }else{ + uu = i; + } + nHdr++; + testcase( uu==127 ); testcase( uu==128 ); + testcase( uu==32767 ); testcase( uu==32768 ); + testcase( uu==8388607 ); testcase( uu==8388608 ); + testcase( uu==2147483647 ); testcase( uu==2147483648LL ); + testcase( uu==140737488355327LL ); testcase( uu==140737488355328LL ); + if( uu<=127 ){ + if( (i&1)==i && p->minWriteFileFormat>=4 ){ + pRec->uTemp = 8+(u32)uu; + }else{ + nData++; + pRec->uTemp = 1; + } + }else if( uu<=32767 ){ + nData += 2; + pRec->uTemp = 2; + }else if( uu<=8388607 ){ + nData += 3; + pRec->uTemp = 3; + }else if( uu<=2147483647 ){ + nData += 4; + pRec->uTemp = 4; + }else if( uu<=140737488355327LL ){ + nData += 6; + pRec->uTemp = 5; + }else{ + nData += 8; + if( pRec->flags & MEM_IntReal ){ + /* If the value is IntReal and is going to take up 8 bytes to store + ** as an integer, then we might as well make it an 8-byte floating + ** point value */ + pRec->u.r = (double)pRec->u.i; + pRec->flags &= ~MEM_IntReal; + pRec->flags |= MEM_Real; + pRec->uTemp = 7; + }else{ + pRec->uTemp = 6; + } + } + }else if( pRec->flags & MEM_Real ){ + nHdr++; + nData += 8; + pRec->uTemp = 7; + }else{ + assert( db->mallocFailed || pRec->flags&(MEM_Str|MEM_Blob) ); + assert( pRec->n>=0 ); + len = (u32)pRec->n; + serial_type = (len*2) + 12 + ((pRec->flags & MEM_Str)!=0); + if( pRec->flags & MEM_Zero ){ + serial_type += (u32)pRec->u.nZero*2; + if( nData ){ + if( sqlite3VdbeMemExpandBlob(pRec) ) goto no_mem; + len += pRec->u.nZero; + }else{ + nZero += pRec->u.nZero; + } + } + nData += len; + nHdr += sqlite3VarintLen(serial_type); + pRec->uTemp = serial_type; + } + if( pRec==pData0 ) break; + pRec--; + }while(1); + + /* EVIDENCE-OF: R-22564-11647 The header begins with a single varint + ** which determines the total number of bytes in the header. The varint + ** value is the size of the header in bytes including the size varint + ** itself. */ + testcase( nHdr==126 ); + testcase( nHdr==127 ); + if( nHdr<=126 ){ + /* The common case */ + nHdr += 1; + }else{ + /* Rare case of a really large header */ + nVarint = sqlite3VarintLen(nHdr); + nHdr += nVarint; + if( nVarintp3) is not allowed to + ** be one of the input registers (because the following call to + ** sqlite3VdbeMemClearAndResize() could clobber the value before it is used). + */ + if( nByte+nZero<=pOut->szMalloc ){ + /* The output register is already large enough to hold the record. + ** No error checks or buffer enlargement is required */ + pOut->z = pOut->zMalloc; + }else{ + /* Need to make sure that the output is not too big and then enlarge + ** the output register to hold the full result */ + if( nByte+nZero>db->aLimit[SQLITE_LIMIT_LENGTH] ){ + goto too_big; + } + if( sqlite3VdbeMemClearAndResize(pOut, (int)nByte) ){ + goto no_mem; + } + } + pOut->n = (int)nByte; + pOut->flags = MEM_Blob; + if( nZero ){ + pOut->u.nZero = nZero; + pOut->flags |= MEM_Zero; + } + UPDATE_MAX_BLOBSIZE(pOut); + zHdr = (u8 *)pOut->z; + zPayload = zHdr + nHdr; + + /* Write the record */ + if( nHdr<0x80 ){ + *(zHdr++) = nHdr; + }else{ + zHdr += sqlite3PutVarint(zHdr,nHdr); + } + assert( pData0<=pLast ); + pRec = pData0; + while( 1 /*exit-by-break*/ ){ + serial_type = pRec->uTemp; + /* EVIDENCE-OF: R-06529-47362 Following the size varint are one or more + ** additional varints, one per column. + ** EVIDENCE-OF: R-64536-51728 The values for each column in the record + ** immediately follow the header. */ + if( serial_type<=7 ){ + *(zHdr++) = serial_type; + if( serial_type==0 ){ + /* NULL value. No change in zPayload */ + }else{ + u64 v; + if( serial_type==7 ){ + assert( sizeof(v)==sizeof(pRec->u.r) ); + memcpy(&v, &pRec->u.r, sizeof(v)); + swapMixedEndianFloat(v); + }else{ + v = pRec->u.i; + } + len = sqlite3SmallTypeSizes[serial_type]; + assert( len>=1 && len<=8 && len!=5 && len!=7 ); + switch( len ){ + default: zPayload[7] = (u8)(v&0xff); v >>= 8; + zPayload[6] = (u8)(v&0xff); v >>= 8; + /* no break */ deliberate_fall_through + case 6: zPayload[5] = (u8)(v&0xff); v >>= 8; + zPayload[4] = (u8)(v&0xff); v >>= 8; + /* no break */ deliberate_fall_through + case 4: zPayload[3] = (u8)(v&0xff); v >>= 8; + /* no break */ deliberate_fall_through + case 3: zPayload[2] = (u8)(v&0xff); v >>= 8; + /* no break */ deliberate_fall_through + case 2: zPayload[1] = (u8)(v&0xff); v >>= 8; + /* no break */ deliberate_fall_through + case 1: zPayload[0] = (u8)(v&0xff); + } + zPayload += len; + } + }else if( serial_type<0x80 ){ + *(zHdr++) = serial_type; + if( serial_type>=14 && pRec->n>0 ){ + assert( pRec->z!=0 ); + memcpy(zPayload, pRec->z, pRec->n); + zPayload += pRec->n; + } + }else{ + zHdr += sqlite3PutVarint(zHdr, serial_type); + if( pRec->n ){ + assert( pRec->z!=0 ); + assert( pRec->z!=(const char*)sqlite3CtypeMap ); + memcpy(zPayload, pRec->z, pRec->n); + zPayload += pRec->n; + } + } + if( pRec==pLast ) break; + pRec++; + } + assert( nHdr==(int)(zHdr - (u8*)pOut->z) ); + assert( nByte==(int)(zPayload - (u8*)pOut->z) ); + + assert( pOp->p3>0 && pOp->p3<=(p->nMem+1 - p->nCursor) ); + REGISTER_TRACE(pOp->p3, pOut); + break; +} + +/* Opcode: Count P1 P2 P3 * * +** Synopsis: r[P2]=count() +** +** Store the number of entries (an integer value) in the table or index +** opened by cursor P1 in register P2. +** +** If P3==0, then an exact count is obtained, which involves visiting +** every btree page of the table. But if P3 is non-zero, an estimate +** is returned based on the current cursor position. +*/ +case OP_Count: { /* out2 */ + i64 nEntry; + BtCursor *pCrsr; + + assert( p->apCsr[pOp->p1]->eCurType==CURTYPE_BTREE ); + pCrsr = p->apCsr[pOp->p1]->uc.pCursor; + assert( pCrsr ); + if( pOp->p3 ){ + nEntry = sqlite3BtreeRowCountEst(pCrsr); + }else{ + nEntry = 0; /* Not needed. Only used to silence a warning. */ + rc = sqlite3BtreeCount(db, pCrsr, &nEntry); + if( rc ) goto abort_due_to_error; + } + pOut = out2Prerelease(p, pOp); + pOut->u.i = nEntry; + goto check_for_interrupt; +} + +/* Opcode: Savepoint P1 * * P4 * +** +** Open, release or rollback the savepoint named by parameter P4, depending +** on the value of P1. To open a new savepoint set P1==0 (SAVEPOINT_BEGIN). +** To release (commit) an existing savepoint set P1==1 (SAVEPOINT_RELEASE). +** To rollback an existing savepoint set P1==2 (SAVEPOINT_ROLLBACK). +*/ +case OP_Savepoint: { + int p1; /* Value of P1 operand */ + char *zName; /* Name of savepoint */ + int nName; + Savepoint *pNew; + Savepoint *pSavepoint; + Savepoint *pTmp; + int iSavepoint; + int ii; + + p1 = pOp->p1; + zName = pOp->p4.z; + + /* Assert that the p1 parameter is valid. Also that if there is no open + ** transaction, then there cannot be any savepoints. + */ + assert( db->pSavepoint==0 || db->autoCommit==0 ); + assert( p1==SAVEPOINT_BEGIN||p1==SAVEPOINT_RELEASE||p1==SAVEPOINT_ROLLBACK ); + assert( db->pSavepoint || db->isTransactionSavepoint==0 ); + assert( checkSavepointCount(db) ); + assert( p->bIsReader ); + + if( p1==SAVEPOINT_BEGIN ){ + if( db->nVdbeWrite>0 ){ + /* A new savepoint cannot be created if there are active write + ** statements (i.e. open read/write incremental blob handles). + */ + sqlite3VdbeError(p, "cannot open savepoint - SQL statements in progress"); + rc = SQLITE_BUSY; + }else{ + nName = sqlite3Strlen30(zName); + +#ifndef SQLITE_OMIT_VIRTUALTABLE + /* This call is Ok even if this savepoint is actually a transaction + ** savepoint (and therefore should not prompt xSavepoint()) callbacks. + ** If this is a transaction savepoint being opened, it is guaranteed + ** that the db->aVTrans[] array is empty. */ + assert( db->autoCommit==0 || db->nVTrans==0 ); + rc = sqlite3VtabSavepoint(db, SAVEPOINT_BEGIN, + db->nStatement+db->nSavepoint); + if( rc!=SQLITE_OK ) goto abort_due_to_error; +#endif + + /* Create a new savepoint structure. */ + pNew = sqlite3DbMallocRawNN(db, sizeof(Savepoint)+nName+1); + if( pNew ){ + pNew->zName = (char *)&pNew[1]; + memcpy(pNew->zName, zName, nName+1); + + /* If there is no open transaction, then mark this as a special + ** "transaction savepoint". */ + if( db->autoCommit ){ + db->autoCommit = 0; + db->isTransactionSavepoint = 1; + }else{ + db->nSavepoint++; + } + + /* Link the new savepoint into the database handle's list. */ + pNew->pNext = db->pSavepoint; + db->pSavepoint = pNew; + pNew->nDeferredCons = db->nDeferredCons; + pNew->nDeferredImmCons = db->nDeferredImmCons; + } + } + }else{ + assert( p1==SAVEPOINT_RELEASE || p1==SAVEPOINT_ROLLBACK ); + iSavepoint = 0; + + /* Find the named savepoint. If there is no such savepoint, then an + ** an error is returned to the user. */ + for( + pSavepoint = db->pSavepoint; + pSavepoint && sqlite3StrICmp(pSavepoint->zName, zName); + pSavepoint = pSavepoint->pNext + ){ + iSavepoint++; + } + if( !pSavepoint ){ + sqlite3VdbeError(p, "no such savepoint: %s", zName); + rc = SQLITE_ERROR; + }else if( db->nVdbeWrite>0 && p1==SAVEPOINT_RELEASE ){ + /* It is not possible to release (commit) a savepoint if there are + ** active write statements. + */ + sqlite3VdbeError(p, "cannot release savepoint - " + "SQL statements in progress"); + rc = SQLITE_BUSY; + }else{ + + /* Determine whether or not this is a transaction savepoint. If so, + ** and this is a RELEASE command, then the current transaction + ** is committed. + */ + int isTransaction = pSavepoint->pNext==0 && db->isTransactionSavepoint; + if( isTransaction && p1==SAVEPOINT_RELEASE ){ + if( (rc = sqlite3VdbeCheckFkDeferred(p))!=SQLITE_OK ){ + goto vdbe_return; + } + db->autoCommit = 1; + if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){ + p->pc = (int)(pOp - aOp); + db->autoCommit = 0; + p->rc = rc = SQLITE_BUSY; + goto vdbe_return; + } + rc = p->rc; + if( rc ){ + db->autoCommit = 0; + }else{ + db->isTransactionSavepoint = 0; + } + }else{ + int isSchemaChange; + iSavepoint = db->nSavepoint - iSavepoint - 1; + if( p1==SAVEPOINT_ROLLBACK ){ + isSchemaChange = (db->mDbFlags & DBFLAG_SchemaChange)!=0; + for(ii=0; iinDb; ii++){ + rc = sqlite3BtreeTripAllCursors(db->aDb[ii].pBt, + SQLITE_ABORT_ROLLBACK, + isSchemaChange==0); + if( rc!=SQLITE_OK ) goto abort_due_to_error; + } + }else{ + assert( p1==SAVEPOINT_RELEASE ); + isSchemaChange = 0; + } + for(ii=0; iinDb; ii++){ + rc = sqlite3BtreeSavepoint(db->aDb[ii].pBt, p1, iSavepoint); + if( rc!=SQLITE_OK ){ + goto abort_due_to_error; + } + } + if( isSchemaChange ){ + sqlite3ExpirePreparedStatements(db, 0); + sqlite3ResetAllSchemasOfConnection(db); + db->mDbFlags |= DBFLAG_SchemaChange; + } + } + if( rc ) goto abort_due_to_error; + + /* Regardless of whether this is a RELEASE or ROLLBACK, destroy all + ** savepoints nested inside of the savepoint being operated on. */ + while( db->pSavepoint!=pSavepoint ){ + pTmp = db->pSavepoint; + db->pSavepoint = pTmp->pNext; + sqlite3DbFree(db, pTmp); + db->nSavepoint--; + } + + /* If it is a RELEASE, then destroy the savepoint being operated on + ** too. If it is a ROLLBACK TO, then set the number of deferred + ** constraint violations present in the database to the value stored + ** when the savepoint was created. */ + if( p1==SAVEPOINT_RELEASE ){ + assert( pSavepoint==db->pSavepoint ); + db->pSavepoint = pSavepoint->pNext; + sqlite3DbFree(db, pSavepoint); + if( !isTransaction ){ + db->nSavepoint--; + } + }else{ + assert( p1==SAVEPOINT_ROLLBACK ); + db->nDeferredCons = pSavepoint->nDeferredCons; + db->nDeferredImmCons = pSavepoint->nDeferredImmCons; + } + + if( !isTransaction || p1==SAVEPOINT_ROLLBACK ){ + rc = sqlite3VtabSavepoint(db, p1, iSavepoint); + if( rc!=SQLITE_OK ) goto abort_due_to_error; + } + } + } + if( rc ) goto abort_due_to_error; + if( p->eVdbeState==VDBE_HALT_STATE ){ + rc = SQLITE_DONE; + goto vdbe_return; + } + break; +} + +/* Opcode: AutoCommit P1 P2 * * * +** +** Set the database auto-commit flag to P1 (1 or 0). If P2 is true, roll +** back any currently active btree transactions. If there are any active +** VMs (apart from this one), then a ROLLBACK fails. A COMMIT fails if +** there are active writing VMs or active VMs that use shared cache. +** +** This instruction causes the VM to halt. +*/ +case OP_AutoCommit: { + int desiredAutoCommit; + int iRollback; + + desiredAutoCommit = pOp->p1; + iRollback = pOp->p2; + assert( desiredAutoCommit==1 || desiredAutoCommit==0 ); + assert( desiredAutoCommit==1 || iRollback==0 ); + assert( db->nVdbeActive>0 ); /* At least this one VM is active */ + assert( p->bIsReader ); + + if( desiredAutoCommit!=db->autoCommit ){ + if( iRollback ){ + assert( desiredAutoCommit==1 ); + sqlite3RollbackAll(db, SQLITE_ABORT_ROLLBACK); + db->autoCommit = 1; + }else if( desiredAutoCommit && db->nVdbeWrite>0 ){ + /* If this instruction implements a COMMIT and other VMs are writing + ** return an error indicating that the other VMs must complete first. + */ + sqlite3VdbeError(p, "cannot commit transaction - " + "SQL statements in progress"); + rc = SQLITE_BUSY; + goto abort_due_to_error; + }else if( (rc = sqlite3VdbeCheckFkDeferred(p))!=SQLITE_OK ){ + goto vdbe_return; + }else{ + db->autoCommit = (u8)desiredAutoCommit; + } + if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){ + p->pc = (int)(pOp - aOp); + db->autoCommit = (u8)(1-desiredAutoCommit); + p->rc = rc = SQLITE_BUSY; + goto vdbe_return; + } + sqlite3CloseSavepoints(db); + if( p->rc==SQLITE_OK ){ + rc = SQLITE_DONE; + }else{ + rc = SQLITE_ERROR; + } + goto vdbe_return; + }else{ + sqlite3VdbeError(p, + (!desiredAutoCommit)?"cannot start a transaction within a transaction":( + (iRollback)?"cannot rollback - no transaction is active": + "cannot commit - no transaction is active")); + + rc = SQLITE_ERROR; + goto abort_due_to_error; + } + /*NOTREACHED*/ assert(0); +} + +/* Opcode: Transaction P1 P2 P3 P4 P5 +** +** Begin a transaction on database P1 if a transaction is not already +** active. +** If P2 is non-zero, then a write-transaction is started, or if a +** read-transaction is already active, it is upgraded to a write-transaction. +** If P2 is zero, then a read-transaction is started. If P2 is 2 or more +** then an exclusive transaction is started. +** +** P1 is the index of the database file on which the transaction is +** started. Index 0 is the main database file and index 1 is the +** file used for temporary tables. Indices of 2 or more are used for +** attached databases. +** +** If a write-transaction is started and the Vdbe.usesStmtJournal flag is +** true (this flag is set if the Vdbe may modify more than one row and may +** throw an ABORT exception), a statement transaction may also be opened. +** More specifically, a statement transaction is opened iff the database +** connection is currently not in autocommit mode, or if there are other +** active statements. A statement transaction allows the changes made by this +** VDBE to be rolled back after an error without having to roll back the +** entire transaction. If no error is encountered, the statement transaction +** will automatically commit when the VDBE halts. +** +** If P5!=0 then this opcode also checks the schema cookie against P3 +** and the schema generation counter against P4. +** The cookie changes its value whenever the database schema changes. +** This operation is used to detect when that the cookie has changed +** and that the current process needs to reread the schema. If the schema +** cookie in P3 differs from the schema cookie in the database header or +** if the schema generation counter in P4 differs from the current +** generation counter, then an SQLITE_SCHEMA error is raised and execution +** halts. The sqlite3_step() wrapper function might then reprepare the +** statement and rerun it from the beginning. +*/ +case OP_Transaction: { + Btree *pBt; + Db *pDb; + int iMeta = 0; + + assert( p->bIsReader ); + assert( p->readOnly==0 || pOp->p2==0 ); + assert( pOp->p2>=0 && pOp->p2<=2 ); + assert( pOp->p1>=0 && pOp->p1nDb ); + assert( DbMaskTest(p->btreeMask, pOp->p1) ); + assert( rc==SQLITE_OK ); + if( pOp->p2 && (db->flags & (SQLITE_QueryOnly|SQLITE_CorruptRdOnly))!=0 ){ + if( db->flags & SQLITE_QueryOnly ){ + /* Writes prohibited by the "PRAGMA query_only=TRUE" statement */ + rc = SQLITE_READONLY; + }else{ + /* Writes prohibited due to a prior SQLITE_CORRUPT in the current + ** transaction */ + rc = SQLITE_CORRUPT; + } + goto abort_due_to_error; + } + pDb = &db->aDb[pOp->p1]; + pBt = pDb->pBt; + + if( pBt ){ + rc = sqlite3BtreeBeginTrans(pBt, pOp->p2, &iMeta); + testcase( rc==SQLITE_BUSY_SNAPSHOT ); + testcase( rc==SQLITE_BUSY_RECOVERY ); + if( rc!=SQLITE_OK ){ + if( (rc&0xff)==SQLITE_BUSY ){ + p->pc = (int)(pOp - aOp); + p->rc = rc; + goto vdbe_return; + } + goto abort_due_to_error; + } + + if( p->usesStmtJournal + && pOp->p2 + && (db->autoCommit==0 || db->nVdbeRead>1) + ){ + assert( sqlite3BtreeTxnState(pBt)==SQLITE_TXN_WRITE ); + if( p->iStatement==0 ){ + assert( db->nStatement>=0 && db->nSavepoint>=0 ); + db->nStatement++; + p->iStatement = db->nSavepoint + db->nStatement; + } + + rc = sqlite3VtabSavepoint(db, SAVEPOINT_BEGIN, p->iStatement-1); + if( rc==SQLITE_OK ){ + rc = sqlite3BtreeBeginStmt(pBt, p->iStatement); + } + + /* Store the current value of the database handles deferred constraint + ** counter. If the statement transaction needs to be rolled back, + ** the value of this counter needs to be restored too. */ + p->nStmtDefCons = db->nDeferredCons; + p->nStmtDefImmCons = db->nDeferredImmCons; + } + } + assert( pOp->p5==0 || pOp->p4type==P4_INT32 ); + if( rc==SQLITE_OK + && pOp->p5 + && (iMeta!=pOp->p3 || pDb->pSchema->iGeneration!=pOp->p4.i) + ){ + /* + ** IMPLEMENTATION-OF: R-03189-51135 As each SQL statement runs, the schema + ** version is checked to ensure that the schema has not changed since the + ** SQL statement was prepared. + */ + sqlite3DbFree(db, p->zErrMsg); + p->zErrMsg = sqlite3DbStrDup(db, "database schema has changed"); + /* If the schema-cookie from the database file matches the cookie + ** stored with the in-memory representation of the schema, do + ** not reload the schema from the database file. + ** + ** If virtual-tables are in use, this is not just an optimization. + ** Often, v-tables store their data in other SQLite tables, which + ** are queried from within xNext() and other v-table methods using + ** prepared queries. If such a query is out-of-date, we do not want to + ** discard the database schema, as the user code implementing the + ** v-table would have to be ready for the sqlite3_vtab structure itself + ** to be invalidated whenever sqlite3_step() is called from within + ** a v-table method. + */ + if( db->aDb[pOp->p1].pSchema->schema_cookie!=iMeta ){ + sqlite3ResetOneSchema(db, pOp->p1); + } + p->expired = 1; + rc = SQLITE_SCHEMA; + + /* Set changeCntOn to 0 to prevent the value returned by sqlite3_changes() + ** from being modified in sqlite3VdbeHalt(). If this statement is + ** reprepared, changeCntOn will be set again. */ + p->changeCntOn = 0; + } + if( rc ) goto abort_due_to_error; + break; +} + +/* Opcode: ReadCookie P1 P2 P3 * * +** +** Read cookie number P3 from database P1 and write it into register P2. +** P3==1 is the schema version. P3==2 is the database format. +** P3==3 is the recommended pager cache size, and so forth. P1==0 is +** the main database file and P1==1 is the database file used to store +** temporary tables. +** +** There must be a read-lock on the database (either a transaction +** must be started or there must be an open cursor) before +** executing this instruction. +*/ +case OP_ReadCookie: { /* out2 */ + int iMeta; + int iDb; + int iCookie; + + assert( p->bIsReader ); + iDb = pOp->p1; + iCookie = pOp->p3; + assert( pOp->p3=0 && iDbnDb ); + assert( db->aDb[iDb].pBt!=0 ); + assert( DbMaskTest(p->btreeMask, iDb) ); + + sqlite3BtreeGetMeta(db->aDb[iDb].pBt, iCookie, (u32 *)&iMeta); + pOut = out2Prerelease(p, pOp); + pOut->u.i = iMeta; + break; +} + +/* Opcode: SetCookie P1 P2 P3 * P5 +** +** Write the integer value P3 into cookie number P2 of database P1. +** P2==1 is the schema version. P2==2 is the database format. +** P2==3 is the recommended pager cache +** size, and so forth. P1==0 is the main database file and P1==1 is the +** database file used to store temporary tables. +** +** A transaction must be started before executing this opcode. +** +** If P2 is the SCHEMA_VERSION cookie (cookie number 1) then the internal +** schema version is set to P3-P5. The "PRAGMA schema_version=N" statement +** has P5 set to 1, so that the internal schema version will be different +** from the database schema version, resulting in a schema reset. +*/ +case OP_SetCookie: { + Db *pDb; + + sqlite3VdbeIncrWriteCounter(p, 0); + assert( pOp->p2p1>=0 && pOp->p1nDb ); + assert( DbMaskTest(p->btreeMask, pOp->p1) ); + assert( p->readOnly==0 ); + pDb = &db->aDb[pOp->p1]; + assert( pDb->pBt!=0 ); + assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) ); + /* See note about index shifting on OP_ReadCookie */ + rc = sqlite3BtreeUpdateMeta(pDb->pBt, pOp->p2, pOp->p3); + if( pOp->p2==BTREE_SCHEMA_VERSION ){ + /* When the schema cookie changes, record the new cookie internally */ + *(u32*)&pDb->pSchema->schema_cookie = *(u32*)&pOp->p3 - pOp->p5; + db->mDbFlags |= DBFLAG_SchemaChange; + sqlite3FkClearTriggerCache(db, pOp->p1); + }else if( pOp->p2==BTREE_FILE_FORMAT ){ + /* Record changes in the file format */ + pDb->pSchema->file_format = pOp->p3; + } + if( pOp->p1==1 ){ + /* Invalidate all prepared statements whenever the TEMP database + ** schema is changed. Ticket #1644 */ + sqlite3ExpirePreparedStatements(db, 0); + p->expired = 0; + } + if( rc ) goto abort_due_to_error; + break; +} + +/* Opcode: OpenRead P1 P2 P3 P4 P5 +** Synopsis: root=P2 iDb=P3 +** +** Open a read-only cursor for the database table whose root page is +** P2 in a database file. The database file is determined by P3. +** P3==0 means the main database, P3==1 means the database used for +** temporary tables, and P3>1 means used the corresponding attached +** database. Give the new cursor an identifier of P1. The P1 +** values need not be contiguous but all P1 values should be small integers. +** It is an error for P1 to be negative. +** +** Allowed P5 bits: +**
      +**
    • 0x02 OPFLAG_SEEKEQ: This cursor will only be used for +** equality lookups (implemented as a pair of opcodes OP_SeekGE/OP_IdxGT +** of OP_SeekLE/OP_IdxLT) +**
    +** +** The P4 value may be either an integer (P4_INT32) or a pointer to +** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo +** object, then table being opened must be an [index b-tree] where the +** KeyInfo object defines the content and collating +** sequence of that index b-tree. Otherwise, if P4 is an integer +** value, then the table being opened must be a [table b-tree] with a +** number of columns no less than the value of P4. +** +** See also: OpenWrite, ReopenIdx +*/ +/* Opcode: ReopenIdx P1 P2 P3 P4 P5 +** Synopsis: root=P2 iDb=P3 +** +** The ReopenIdx opcode works like OP_OpenRead except that it first +** checks to see if the cursor on P1 is already open on the same +** b-tree and if it is this opcode becomes a no-op. In other words, +** if the cursor is already open, do not reopen it. +** +** The ReopenIdx opcode may only be used with P5==0 or P5==OPFLAG_SEEKEQ +** and with P4 being a P4_KEYINFO object. Furthermore, the P3 value must +** be the same as every other ReopenIdx or OpenRead for the same cursor +** number. +** +** Allowed P5 bits: +**
      +**
    • 0x02 OPFLAG_SEEKEQ: This cursor will only be used for +** equality lookups (implemented as a pair of opcodes OP_SeekGE/OP_IdxGT +** of OP_SeekLE/OP_IdxLT) +**
    +** +** See also: OP_OpenRead, OP_OpenWrite +*/ +/* Opcode: OpenWrite P1 P2 P3 P4 P5 +** Synopsis: root=P2 iDb=P3 +** +** Open a read/write cursor named P1 on the table or index whose root +** page is P2 (or whose root page is held in register P2 if the +** OPFLAG_P2ISREG bit is set in P5 - see below). +** +** The P4 value may be either an integer (P4_INT32) or a pointer to +** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo +** object, then table being opened must be an [index b-tree] where the +** KeyInfo object defines the content and collating +** sequence of that index b-tree. Otherwise, if P4 is an integer +** value, then the table being opened must be a [table b-tree] with a +** number of columns no less than the value of P4. +** +** Allowed P5 bits: +**
      +**
    • 0x02 OPFLAG_SEEKEQ: This cursor will only be used for +** equality lookups (implemented as a pair of opcodes OP_SeekGE/OP_IdxGT +** of OP_SeekLE/OP_IdxLT) +**
    • 0x08 OPFLAG_FORDELETE: This cursor is used only to seek +** and subsequently delete entries in an index btree. This is a +** hint to the storage engine that the storage engine is allowed to +** ignore. The hint is not used by the official SQLite b*tree storage +** engine, but is used by COMDB2. +**
    • 0x10 OPFLAG_P2ISREG: Use the content of register P2 +** as the root page, not the value of P2 itself. +**
    +** +** This instruction works like OpenRead except that it opens the cursor +** in read/write mode. +** +** See also: OP_OpenRead, OP_ReopenIdx +*/ +case OP_ReopenIdx: { /* ncycle */ + int nField; + KeyInfo *pKeyInfo; + u32 p2; + int iDb; + int wrFlag; + Btree *pX; + VdbeCursor *pCur; + Db *pDb; + + assert( pOp->p5==0 || pOp->p5==OPFLAG_SEEKEQ ); + assert( pOp->p4type==P4_KEYINFO ); + pCur = p->apCsr[pOp->p1]; + if( pCur && pCur->pgnoRoot==(u32)pOp->p2 ){ + assert( pCur->iDb==pOp->p3 ); /* Guaranteed by the code generator */ + assert( pCur->eCurType==CURTYPE_BTREE ); + sqlite3BtreeClearCursor(pCur->uc.pCursor); + goto open_cursor_set_hints; + } + /* If the cursor is not currently open or is open on a different + ** index, then fall through into OP_OpenRead to force a reopen */ +case OP_OpenRead: /* ncycle */ +case OP_OpenWrite: + + assert( pOp->opcode==OP_OpenWrite || pOp->p5==0 || pOp->p5==OPFLAG_SEEKEQ ); + assert( p->bIsReader ); + assert( pOp->opcode==OP_OpenRead || pOp->opcode==OP_ReopenIdx + || p->readOnly==0 ); + + if( p->expired==1 ){ + rc = SQLITE_ABORT_ROLLBACK; + goto abort_due_to_error; + } + + nField = 0; + pKeyInfo = 0; + p2 = (u32)pOp->p2; + iDb = pOp->p3; + assert( iDb>=0 && iDbnDb ); + assert( DbMaskTest(p->btreeMask, iDb) ); + pDb = &db->aDb[iDb]; + pX = pDb->pBt; + assert( pX!=0 ); + if( pOp->opcode==OP_OpenWrite ){ + assert( OPFLAG_FORDELETE==BTREE_FORDELETE ); + wrFlag = BTREE_WRCSR | (pOp->p5 & OPFLAG_FORDELETE); + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + if( pDb->pSchema->file_format < p->minWriteFileFormat ){ + p->minWriteFileFormat = pDb->pSchema->file_format; + } + if( pOp->p5 & OPFLAG_P2ISREG ){ + assert( p2>0 ); + assert( p2<=(u32)(p->nMem+1 - p->nCursor) ); + pIn2 = &aMem[p2]; + assert( memIsValid(pIn2) ); + assert( (pIn2->flags & MEM_Int)!=0 ); + sqlite3VdbeMemIntegerify(pIn2); + p2 = (int)pIn2->u.i; + /* The p2 value always comes from a prior OP_CreateBtree opcode and + ** that opcode will always set the p2 value to 2 or more or else fail. + ** If there were a failure, the prepared statement would have halted + ** before reaching this instruction. */ + assert( p2>=2 ); + } + }else{ + wrFlag = 0; + assert( (pOp->p5 & OPFLAG_P2ISREG)==0 ); + } + if( pOp->p4type==P4_KEYINFO ){ + pKeyInfo = pOp->p4.pKeyInfo; + assert( pKeyInfo->enc==ENC(db) ); + assert( pKeyInfo->db==db ); + nField = pKeyInfo->nAllField; + }else if( pOp->p4type==P4_INT32 ){ + nField = pOp->p4.i; + } + assert( pOp->p1>=0 ); + assert( nField>=0 ); + testcase( nField==0 ); /* Table with INTEGER PRIMARY KEY and nothing else */ + pCur = allocateCursor(p, pOp->p1, nField, CURTYPE_BTREE); + if( pCur==0 ) goto no_mem; + pCur->iDb = iDb; + pCur->nullRow = 1; + pCur->isOrdered = 1; + pCur->pgnoRoot = p2; +#ifdef SQLITE_DEBUG + pCur->wrFlag = wrFlag; +#endif + rc = sqlite3BtreeCursor(pX, p2, wrFlag, pKeyInfo, pCur->uc.pCursor); + pCur->pKeyInfo = pKeyInfo; + /* Set the VdbeCursor.isTable variable. Previous versions of + ** SQLite used to check if the root-page flags were sane at this point + ** and report database corruption if they were not, but this check has + ** since moved into the btree layer. */ + pCur->isTable = pOp->p4type!=P4_KEYINFO; + +open_cursor_set_hints: + assert( OPFLAG_BULKCSR==BTREE_BULKLOAD ); + assert( OPFLAG_SEEKEQ==BTREE_SEEK_EQ ); + testcase( pOp->p5 & OPFLAG_BULKCSR ); + testcase( pOp->p2 & OPFLAG_SEEKEQ ); + sqlite3BtreeCursorHintFlags(pCur->uc.pCursor, + (pOp->p5 & (OPFLAG_BULKCSR|OPFLAG_SEEKEQ))); + if( rc ) goto abort_due_to_error; + break; +} + +/* Opcode: OpenDup P1 P2 * * * +** +** Open a new cursor P1 that points to the same ephemeral table as +** cursor P2. The P2 cursor must have been opened by a prior OP_OpenEphemeral +** opcode. Only ephemeral cursors may be duplicated. +** +** Duplicate ephemeral cursors are used for self-joins of materialized views. +*/ +case OP_OpenDup: { /* ncycle */ + VdbeCursor *pOrig; /* The original cursor to be duplicated */ + VdbeCursor *pCx; /* The new cursor */ + + pOrig = p->apCsr[pOp->p2]; + assert( pOrig ); + assert( pOrig->isEphemeral ); /* Only ephemeral cursors can be duplicated */ + + pCx = allocateCursor(p, pOp->p1, pOrig->nField, CURTYPE_BTREE); + if( pCx==0 ) goto no_mem; + pCx->nullRow = 1; + pCx->isEphemeral = 1; + pCx->pKeyInfo = pOrig->pKeyInfo; + pCx->isTable = pOrig->isTable; + pCx->pgnoRoot = pOrig->pgnoRoot; + pCx->isOrdered = pOrig->isOrdered; + pCx->ub.pBtx = pOrig->ub.pBtx; + pCx->noReuse = 1; + pOrig->noReuse = 1; + rc = sqlite3BtreeCursor(pCx->ub.pBtx, pCx->pgnoRoot, BTREE_WRCSR, + pCx->pKeyInfo, pCx->uc.pCursor); + /* The sqlite3BtreeCursor() routine can only fail for the first cursor + ** opened for a database. Since there is already an open cursor when this + ** opcode is run, the sqlite3BtreeCursor() cannot fail */ + assert( rc==SQLITE_OK ); + break; +} + + +/* Opcode: OpenEphemeral P1 P2 P3 P4 P5 +** Synopsis: nColumn=P2 +** +** Open a new cursor P1 to a transient table. +** The cursor is always opened read/write even if +** the main database is read-only. The ephemeral +** table is deleted automatically when the cursor is closed. +** +** If the cursor P1 is already opened on an ephemeral table, the table +** is cleared (all content is erased). +** +** P2 is the number of columns in the ephemeral table. +** The cursor points to a BTree table if P4==0 and to a BTree index +** if P4 is not 0. If P4 is not NULL, it points to a KeyInfo structure +** that defines the format of keys in the index. +** +** The P5 parameter can be a mask of the BTREE_* flags defined +** in btree.h. These flags control aspects of the operation of +** the btree. The BTREE_OMIT_JOURNAL and BTREE_SINGLE flags are +** added automatically. +** +** If P3 is positive, then reg[P3] is modified slightly so that it +** can be used as zero-length data for OP_Insert. This is an optimization +** that avoids an extra OP_Blob opcode to initialize that register. +*/ +/* Opcode: OpenAutoindex P1 P2 * P4 * +** Synopsis: nColumn=P2 +** +** This opcode works the same as OP_OpenEphemeral. It has a +** different name to distinguish its use. Tables created using +** by this opcode will be used for automatically created transient +** indices in joins. +*/ +case OP_OpenAutoindex: /* ncycle */ +case OP_OpenEphemeral: { /* ncycle */ + VdbeCursor *pCx; + KeyInfo *pKeyInfo; + + static const int vfsFlags = + SQLITE_OPEN_READWRITE | + SQLITE_OPEN_CREATE | + SQLITE_OPEN_EXCLUSIVE | + SQLITE_OPEN_DELETEONCLOSE | + SQLITE_OPEN_TRANSIENT_DB; + assert( pOp->p1>=0 ); + assert( pOp->p2>=0 ); + if( pOp->p3>0 ){ + /* Make register reg[P3] into a value that can be used as the data + ** form sqlite3BtreeInsert() where the length of the data is zero. */ + assert( pOp->p2==0 ); /* Only used when number of columns is zero */ + assert( pOp->opcode==OP_OpenEphemeral ); + assert( aMem[pOp->p3].flags & MEM_Null ); + aMem[pOp->p3].n = 0; + aMem[pOp->p3].z = ""; + } + pCx = p->apCsr[pOp->p1]; + if( pCx && !pCx->noReuse && ALWAYS(pOp->p2<=pCx->nField) ){ + /* If the ephemeral table is already open and has no duplicates from + ** OP_OpenDup, then erase all existing content so that the table is + ** empty again, rather than creating a new table. */ + assert( pCx->isEphemeral ); + pCx->seqCount = 0; + pCx->cacheStatus = CACHE_STALE; + rc = sqlite3BtreeClearTable(pCx->ub.pBtx, pCx->pgnoRoot, 0); + }else{ + pCx = allocateCursor(p, pOp->p1, pOp->p2, CURTYPE_BTREE); + if( pCx==0 ) goto no_mem; + pCx->isEphemeral = 1; + rc = sqlite3BtreeOpen(db->pVfs, 0, db, &pCx->ub.pBtx, + BTREE_OMIT_JOURNAL | BTREE_SINGLE | pOp->p5, + vfsFlags); + if( rc==SQLITE_OK ){ + rc = sqlite3BtreeBeginTrans(pCx->ub.pBtx, 1, 0); + if( rc==SQLITE_OK ){ + /* If a transient index is required, create it by calling + ** sqlite3BtreeCreateTable() with the BTREE_BLOBKEY flag before + ** opening it. If a transient table is required, just use the + ** automatically created table with root-page 1 (an BLOB_INTKEY table). + */ + if( (pCx->pKeyInfo = pKeyInfo = pOp->p4.pKeyInfo)!=0 ){ + assert( pOp->p4type==P4_KEYINFO ); + rc = sqlite3BtreeCreateTable(pCx->ub.pBtx, &pCx->pgnoRoot, + BTREE_BLOBKEY | pOp->p5); + if( rc==SQLITE_OK ){ + assert( pCx->pgnoRoot==SCHEMA_ROOT+1 ); + assert( pKeyInfo->db==db ); + assert( pKeyInfo->enc==ENC(db) ); + rc = sqlite3BtreeCursor(pCx->ub.pBtx, pCx->pgnoRoot, BTREE_WRCSR, + pKeyInfo, pCx->uc.pCursor); + } + pCx->isTable = 0; + }else{ + pCx->pgnoRoot = SCHEMA_ROOT; + rc = sqlite3BtreeCursor(pCx->ub.pBtx, SCHEMA_ROOT, BTREE_WRCSR, + 0, pCx->uc.pCursor); + pCx->isTable = 1; + } + } + pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED); + assert( p->apCsr[pOp->p1]==pCx ); + if( rc ){ + assert( !sqlite3BtreeClosesWithCursor(pCx->ub.pBtx, pCx->uc.pCursor) ); + sqlite3BtreeClose(pCx->ub.pBtx); + p->apCsr[pOp->p1] = 0; /* Not required; helps with static analysis */ + }else{ + assert( sqlite3BtreeClosesWithCursor(pCx->ub.pBtx, pCx->uc.pCursor) ); + } + } + } + if( rc ) goto abort_due_to_error; + pCx->nullRow = 1; + break; +} + +/* Opcode: SorterOpen P1 P2 P3 P4 * +** +** This opcode works like OP_OpenEphemeral except that it opens +** a transient index that is specifically designed to sort large +** tables using an external merge-sort algorithm. +** +** If argument P3 is non-zero, then it indicates that the sorter may +** assume that a stable sort considering the first P3 fields of each +** key is sufficient to produce the required results. +*/ +case OP_SorterOpen: { + VdbeCursor *pCx; + + assert( pOp->p1>=0 ); + assert( pOp->p2>=0 ); + pCx = allocateCursor(p, pOp->p1, pOp->p2, CURTYPE_SORTER); + if( pCx==0 ) goto no_mem; + pCx->pKeyInfo = pOp->p4.pKeyInfo; + assert( pCx->pKeyInfo->db==db ); + assert( pCx->pKeyInfo->enc==ENC(db) ); + rc = sqlite3VdbeSorterInit(db, pOp->p3, pCx); + if( rc ) goto abort_due_to_error; + break; +} + +/* Opcode: SequenceTest P1 P2 * * * +** Synopsis: if( cursor[P1].ctr++ ) pc = P2 +** +** P1 is a sorter cursor. If the sequence counter is currently zero, jump +** to P2. Regardless of whether or not the jump is taken, increment the +** the sequence value. +*/ +case OP_SequenceTest: { + VdbeCursor *pC; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( isSorter(pC) ); + if( (pC->seqCount++)==0 ){ + goto jump_to_p2; + } + break; +} + +/* Opcode: OpenPseudo P1 P2 P3 * * +** Synopsis: P3 columns in r[P2] +** +** Open a new cursor that points to a fake table that contains a single +** row of data. The content of that one row is the content of memory +** register P2. In other words, cursor P1 becomes an alias for the +** MEM_Blob content contained in register P2. +** +** A pseudo-table created by this opcode is used to hold a single +** row output from the sorter so that the row can be decomposed into +** individual columns using the OP_Column opcode. The OP_Column opcode +** is the only cursor opcode that works with a pseudo-table. +** +** P3 is the number of fields in the records that will be stored by +** the pseudo-table. If P2 is 0 or negative then the pseudo-cursor +** will return NULL for every column. +*/ +case OP_OpenPseudo: { + VdbeCursor *pCx; + + assert( pOp->p1>=0 ); + assert( pOp->p3>=0 ); + pCx = allocateCursor(p, pOp->p1, pOp->p3, CURTYPE_PSEUDO); + if( pCx==0 ) goto no_mem; + pCx->nullRow = 1; + pCx->seekResult = pOp->p2; + pCx->isTable = 1; + /* Give this pseudo-cursor a fake BtCursor pointer so that pCx + ** can be safely passed to sqlite3VdbeCursorMoveto(). This avoids a test + ** for pCx->eCurType==CURTYPE_BTREE inside of sqlite3VdbeCursorMoveto() + ** which is a performance optimization */ + pCx->uc.pCursor = sqlite3BtreeFakeValidCursor(); + assert( pOp->p5==0 ); + break; +} + +/* Opcode: Close P1 * * * * +** +** Close a cursor previously opened as P1. If P1 is not +** currently open, this instruction is a no-op. +*/ +case OP_Close: { /* ncycle */ + assert( pOp->p1>=0 && pOp->p1nCursor ); + sqlite3VdbeFreeCursor(p, p->apCsr[pOp->p1]); + p->apCsr[pOp->p1] = 0; + break; +} + +#ifdef SQLITE_ENABLE_COLUMN_USED_MASK +/* Opcode: ColumnsUsed P1 * * P4 * +** +** This opcode (which only exists if SQLite was compiled with +** SQLITE_ENABLE_COLUMN_USED_MASK) identifies which columns of the +** table or index for cursor P1 are used. P4 is a 64-bit integer +** (P4_INT64) in which the first 63 bits are one for each of the +** first 63 columns of the table or index that are actually used +** by the cursor. The high-order bit is set if any column after +** the 64th is used. +*/ +case OP_ColumnsUsed: { + VdbeCursor *pC; + pC = p->apCsr[pOp->p1]; + assert( pC->eCurType==CURTYPE_BTREE ); + pC->maskUsed = *(u64*)pOp->p4.pI64; + break; +} +#endif + +/* Opcode: SeekGE P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] +** +** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), +** use the value in register P3 as the key. If cursor P1 refers +** to an SQL index, then P3 is the first in an array of P4 registers +** that are used as an unpacked index key. +** +** Reposition cursor P1 so that it points to the smallest entry that +** is greater than or equal to the key value. If there are no records +** greater than or equal to the key and P2 is not zero, then jump to P2. +** +** If the cursor P1 was opened using the OPFLAG_SEEKEQ flag, then this +** opcode will either land on a record that exactly matches the key, or +** else it will cause a jump to P2. When the cursor is OPFLAG_SEEKEQ, +** this opcode must be followed by an IdxLE opcode with the same arguments. +** The IdxGT opcode will be skipped if this opcode succeeds, but the +** IdxGT opcode will be used on subsequent loop iterations. The +** OPFLAG_SEEKEQ flags is a hint to the btree layer to say that this +** is an equality search. +** +** This opcode leaves the cursor configured to move in forward order, +** from the beginning toward the end. In other words, the cursor is +** configured to use Next, not Prev. +** +** See also: Found, NotFound, SeekLt, SeekGt, SeekLe +*/ +/* Opcode: SeekGT P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] +** +** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), +** use the value in register P3 as a key. If cursor P1 refers +** to an SQL index, then P3 is the first in an array of P4 registers +** that are used as an unpacked index key. +** +** Reposition cursor P1 so that it points to the smallest entry that +** is greater than the key value. If there are no records greater than +** the key and P2 is not zero, then jump to P2. +** +** This opcode leaves the cursor configured to move in forward order, +** from the beginning toward the end. In other words, the cursor is +** configured to use Next, not Prev. +** +** See also: Found, NotFound, SeekLt, SeekGe, SeekLe +*/ +/* Opcode: SeekLT P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] +** +** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), +** use the value in register P3 as a key. If cursor P1 refers +** to an SQL index, then P3 is the first in an array of P4 registers +** that are used as an unpacked index key. +** +** Reposition cursor P1 so that it points to the largest entry that +** is less than the key value. If there are no records less than +** the key and P2 is not zero, then jump to P2. +** +** This opcode leaves the cursor configured to move in reverse order, +** from the end toward the beginning. In other words, the cursor is +** configured to use Prev, not Next. +** +** See also: Found, NotFound, SeekGt, SeekGe, SeekLe +*/ +/* Opcode: SeekLE P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] +** +** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), +** use the value in register P3 as a key. If cursor P1 refers +** to an SQL index, then P3 is the first in an array of P4 registers +** that are used as an unpacked index key. +** +** Reposition cursor P1 so that it points to the largest entry that +** is less than or equal to the key value. If there are no records +** less than or equal to the key and P2 is not zero, then jump to P2. +** +** This opcode leaves the cursor configured to move in reverse order, +** from the end toward the beginning. In other words, the cursor is +** configured to use Prev, not Next. +** +** If the cursor P1 was opened using the OPFLAG_SEEKEQ flag, then this +** opcode will either land on a record that exactly matches the key, or +** else it will cause a jump to P2. When the cursor is OPFLAG_SEEKEQ, +** this opcode must be followed by an IdxLE opcode with the same arguments. +** The IdxGE opcode will be skipped if this opcode succeeds, but the +** IdxGE opcode will be used on subsequent loop iterations. The +** OPFLAG_SEEKEQ flags is a hint to the btree layer to say that this +** is an equality search. +** +** See also: Found, NotFound, SeekGt, SeekGe, SeekLt +*/ +case OP_SeekLT: /* jump0, in3, group, ncycle */ +case OP_SeekLE: /* jump0, in3, group, ncycle */ +case OP_SeekGE: /* jump0, in3, group, ncycle */ +case OP_SeekGT: { /* jump0, in3, group, ncycle */ + int res; /* Comparison result */ + int oc; /* Opcode */ + VdbeCursor *pC; /* The cursor to seek */ + UnpackedRecord r; /* The key to seek for */ + int nField; /* Number of columns or fields in the key */ + i64 iKey; /* The rowid we are to seek to */ + int eqOnly; /* Only interested in == results */ + + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( pOp->p2!=0 ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->eCurType==CURTYPE_BTREE ); + assert( OP_SeekLE == OP_SeekLT+1 ); + assert( OP_SeekGE == OP_SeekLT+2 ); + assert( OP_SeekGT == OP_SeekLT+3 ); + assert( pC->isOrdered ); + assert( pC->uc.pCursor!=0 ); + oc = pOp->opcode; + eqOnly = 0; + pC->nullRow = 0; +#ifdef SQLITE_DEBUG + pC->seekOp = pOp->opcode; +#endif + + pC->deferredMoveto = 0; + pC->cacheStatus = CACHE_STALE; + if( pC->isTable ){ + u16 flags3, newType; + /* The OPFLAG_SEEKEQ/BTREE_SEEK_EQ flag is only set on index cursors */ + assert( sqlite3BtreeCursorHasHint(pC->uc.pCursor, BTREE_SEEK_EQ)==0 + || CORRUPT_DB ); + + /* The input value in P3 might be of any type: integer, real, string, + ** blob, or NULL. But it needs to be an integer before we can do + ** the seek, so convert it. */ + pIn3 = &aMem[pOp->p3]; + flags3 = pIn3->flags; + if( (flags3 & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Str))==MEM_Str ){ + applyNumericAffinity(pIn3, 0); + } + iKey = sqlite3VdbeIntValue(pIn3); /* Get the integer key value */ + newType = pIn3->flags; /* Record the type after applying numeric affinity */ + pIn3->flags = flags3; /* But convert the type back to its original */ + + /* If the P3 value could not be converted into an integer without + ** loss of information, then special processing is required... */ + if( (newType & (MEM_Int|MEM_IntReal))==0 ){ + int c; + if( (newType & MEM_Real)==0 ){ + if( (newType & MEM_Null) || oc>=OP_SeekGE ){ + VdbeBranchTaken(1,2); + goto jump_to_p2; + }else{ + rc = sqlite3BtreeLast(pC->uc.pCursor, &res); + if( rc!=SQLITE_OK ) goto abort_due_to_error; + goto seek_not_found; + } + } + c = sqlite3IntFloatCompare(iKey, pIn3->u.r); + + /* If the approximation iKey is larger than the actual real search + ** term, substitute >= for > and < for <=. e.g. if the search term + ** is 4.9 and the integer approximation 5: + ** + ** (x > 4.9) -> (x >= 5) + ** (x <= 4.9) -> (x < 5) + */ + if( c>0 ){ + assert( OP_SeekGE==(OP_SeekGT-1) ); + assert( OP_SeekLT==(OP_SeekLE-1) ); + assert( (OP_SeekLE & 0x0001)==(OP_SeekGT & 0x0001) ); + if( (oc & 0x0001)==(OP_SeekGT & 0x0001) ) oc--; + } + + /* If the approximation iKey is smaller than the actual real search + ** term, substitute <= for < and > for >=. */ + else if( c<0 ){ + assert( OP_SeekLE==(OP_SeekLT+1) ); + assert( OP_SeekGT==(OP_SeekGE+1) ); + assert( (OP_SeekLT & 0x0001)==(OP_SeekGE & 0x0001) ); + if( (oc & 0x0001)==(OP_SeekLT & 0x0001) ) oc++; + } + } + rc = sqlite3BtreeTableMoveto(pC->uc.pCursor, (u64)iKey, 0, &res); + pC->movetoTarget = iKey; /* Used by OP_Delete */ + if( rc!=SQLITE_OK ){ + goto abort_due_to_error; + } + }else{ + /* For a cursor with the OPFLAG_SEEKEQ/BTREE_SEEK_EQ hint, only the + ** OP_SeekGE and OP_SeekLE opcodes are allowed, and these must be + ** immediately followed by an OP_IdxGT or OP_IdxLT opcode, respectively, + ** with the same key. + */ + if( sqlite3BtreeCursorHasHint(pC->uc.pCursor, BTREE_SEEK_EQ) ){ + eqOnly = 1; + assert( pOp->opcode==OP_SeekGE || pOp->opcode==OP_SeekLE ); + assert( pOp[1].opcode==OP_IdxLT || pOp[1].opcode==OP_IdxGT ); + assert( pOp->opcode==OP_SeekGE || pOp[1].opcode==OP_IdxLT ); + assert( pOp->opcode==OP_SeekLE || pOp[1].opcode==OP_IdxGT ); + assert( pOp[1].p1==pOp[0].p1 ); + assert( pOp[1].p2==pOp[0].p2 ); + assert( pOp[1].p3==pOp[0].p3 ); + assert( pOp[1].p4.i==pOp[0].p4.i ); + } + + nField = pOp->p4.i; + assert( pOp->p4type==P4_INT32 ); + assert( nField>0 ); + r.pKeyInfo = pC->pKeyInfo; + r.nField = (u16)nField; + + /* The next line of code computes as follows, only faster: + ** if( oc==OP_SeekGT || oc==OP_SeekLE ){ + ** r.default_rc = -1; + ** }else{ + ** r.default_rc = +1; + ** } + */ + r.default_rc = ((1 & (oc - OP_SeekLT)) ? -1 : +1); + assert( oc!=OP_SeekGT || r.default_rc==-1 ); + assert( oc!=OP_SeekLE || r.default_rc==-1 ); + assert( oc!=OP_SeekGE || r.default_rc==+1 ); + assert( oc!=OP_SeekLT || r.default_rc==+1 ); + + r.aMem = &aMem[pOp->p3]; +#ifdef SQLITE_DEBUG + { + int i; + for(i=0; i0 ) REGISTER_TRACE(pOp->p3+i, &r.aMem[i]); + } + } +#endif + r.eqSeen = 0; + rc = sqlite3BtreeIndexMoveto(pC->uc.pCursor, &r, &res); + if( rc!=SQLITE_OK ){ + goto abort_due_to_error; + } + if( eqOnly && r.eqSeen==0 ){ + assert( res!=0 ); + goto seek_not_found; + } + } +#ifdef SQLITE_TEST + sqlite3_search_count++; +#endif + if( oc>=OP_SeekGE ){ assert( oc==OP_SeekGE || oc==OP_SeekGT ); + if( res<0 || (res==0 && oc==OP_SeekGT) ){ + res = 0; + rc = sqlite3BtreeNext(pC->uc.pCursor, 0); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_DONE ){ + rc = SQLITE_OK; + res = 1; + }else{ + goto abort_due_to_error; + } + } + }else{ + res = 0; + } + }else{ + assert( oc==OP_SeekLT || oc==OP_SeekLE ); + if( res>0 || (res==0 && oc==OP_SeekLT) ){ + res = 0; + rc = sqlite3BtreePrevious(pC->uc.pCursor, 0); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_DONE ){ + rc = SQLITE_OK; + res = 1; + }else{ + goto abort_due_to_error; + } + } + }else{ + /* res might be negative because the table is empty. Check to + ** see if this is the case. + */ + res = sqlite3BtreeEof(pC->uc.pCursor); + } + } +seek_not_found: + assert( pOp->p2>0 ); + VdbeBranchTaken(res!=0,2); + if( res ){ + goto jump_to_p2; + }else if( eqOnly ){ + assert( pOp[1].opcode==OP_IdxLT || pOp[1].opcode==OP_IdxGT ); + pOp++; /* Skip the OP_IdxLt or OP_IdxGT that follows */ + } + break; +} + + +/* Opcode: SeekScan P1 P2 * * P5 +** Synopsis: Scan-ahead up to P1 rows +** +** This opcode is a prefix opcode to OP_SeekGE. In other words, this +** opcode must be immediately followed by OP_SeekGE. This constraint is +** checked by assert() statements. +** +** This opcode uses the P1 through P4 operands of the subsequent +** OP_SeekGE. In the text that follows, the operands of the subsequent +** OP_SeekGE opcode are denoted as SeekOP.P1 through SeekOP.P4. Only +** the P1, P2 and P5 operands of this opcode are also used, and are called +** This.P1, This.P2 and This.P5. +** +** This opcode helps to optimize IN operators on a multi-column index +** where the IN operator is on the later terms of the index by avoiding +** unnecessary seeks on the btree, substituting steps to the next row +** of the b-tree instead. A correct answer is obtained if this opcode +** is omitted or is a no-op. +** +** The SeekGE.P3 and SeekGE.P4 operands identify an unpacked key which +** is the desired entry that we want the cursor SeekGE.P1 to be pointing +** to. Call this SeekGE.P3/P4 row the "target". +** +** If the SeekGE.P1 cursor is not currently pointing to a valid row, +** then this opcode is a no-op and control passes through into the OP_SeekGE. +** +** If the SeekGE.P1 cursor is pointing to a valid row, then that row +** might be the target row, or it might be near and slightly before the +** target row, or it might be after the target row. If the cursor is +** currently before the target row, then this opcode attempts to position +** the cursor on or after the target row by invoking sqlite3BtreeStep() +** on the cursor between 1 and This.P1 times. +** +** The This.P5 parameter is a flag that indicates what to do if the +** cursor ends up pointing at a valid row that is past the target +** row. If This.P5 is false (0) then a jump is made to SeekGE.P2. If +** This.P5 is true (non-zero) then a jump is made to This.P2. The P5==0 +** case occurs when there are no inequality constraints to the right of +** the IN constraint. The jump to SeekGE.P2 ends the loop. The P5!=0 case +** occurs when there are inequality constraints to the right of the IN +** operator. In that case, the This.P2 will point either directly to or +** to setup code prior to the OP_IdxGT or OP_IdxGE opcode that checks for +** loop terminate. +** +** Possible outcomes from this opcode:
      +** +**
    1. If the cursor is initially not pointed to any valid row, then +** fall through into the subsequent OP_SeekGE opcode. +** +**
    2. If the cursor is left pointing to a row that is before the target +** row, even after making as many as This.P1 calls to +** sqlite3BtreeNext(), then also fall through into OP_SeekGE. +** +**
    3. If the cursor is left pointing at the target row, either because it +** was at the target row to begin with or because one or more +** sqlite3BtreeNext() calls moved the cursor to the target row, +** then jump to This.P2.., +** +**
    4. If the cursor started out before the target row and a call to +** to sqlite3BtreeNext() moved the cursor off the end of the index +** (indicating that the target row definitely does not exist in the +** btree) then jump to SeekGE.P2, ending the loop. +** +**
    5. If the cursor ends up on a valid row that is past the target row +** (indicating that the target row does not exist in the btree) then +** jump to SeekOP.P2 if This.P5==0 or to This.P2 if This.P5>0. +**
    +*/ +case OP_SeekScan: { /* ncycle */ + VdbeCursor *pC; + int res; + int nStep; + UnpackedRecord r; + + assert( pOp[1].opcode==OP_SeekGE ); + + /* If pOp->p5 is clear, then pOp->p2 points to the first instruction past the + ** OP_IdxGT that follows the OP_SeekGE. Otherwise, it points to the first + ** opcode past the OP_SeekGE itself. */ + assert( pOp->p2>=(int)(pOp-aOp)+2 ); +#ifdef SQLITE_DEBUG + if( pOp->p5==0 ){ + /* There are no inequality constraints following the IN constraint. */ + assert( pOp[1].p1==aOp[pOp->p2-1].p1 ); + assert( pOp[1].p2==aOp[pOp->p2-1].p2 ); + assert( pOp[1].p3==aOp[pOp->p2-1].p3 ); + assert( aOp[pOp->p2-1].opcode==OP_IdxGT + || aOp[pOp->p2-1].opcode==OP_IdxGE ); + testcase( aOp[pOp->p2-1].opcode==OP_IdxGE ); + }else{ + /* There are inequality constraints. */ + assert( pOp->p2==(int)(pOp-aOp)+2 ); + assert( aOp[pOp->p2-1].opcode==OP_SeekGE ); + } +#endif + + assert( pOp->p1>0 ); + pC = p->apCsr[pOp[1].p1]; + assert( pC!=0 ); + assert( pC->eCurType==CURTYPE_BTREE ); + assert( !pC->isTable ); + if( !sqlite3BtreeCursorIsValidNN(pC->uc.pCursor) ){ +#ifdef SQLITE_DEBUG + if( db->flags&SQLITE_VdbeTrace ){ + printf("... cursor not valid - fall through\n"); + } +#endif + break; + } + nStep = pOp->p1; + assert( nStep>=1 ); + r.pKeyInfo = pC->pKeyInfo; + r.nField = (u16)pOp[1].p4.i; + r.default_rc = 0; + r.aMem = &aMem[pOp[1].p3]; +#ifdef SQLITE_DEBUG + { + int i; + for(i=0; i0 && pOp->p5==0 ){ + seekscan_search_fail: + /* Jump to SeekGE.P2, ending the loop */ +#ifdef SQLITE_DEBUG + if( db->flags&SQLITE_VdbeTrace ){ + printf("... %d steps and then skip\n", pOp->p1 - nStep); + } +#endif + VdbeBranchTaken(1,3); + pOp++; + goto jump_to_p2; + } + if( res>=0 ){ + /* Jump to This.P2, bypassing the OP_SeekGE opcode */ +#ifdef SQLITE_DEBUG + if( db->flags&SQLITE_VdbeTrace ){ + printf("... %d steps and then success\n", pOp->p1 - nStep); + } +#endif + VdbeBranchTaken(2,3); + goto jump_to_p2; + break; + } + if( nStep<=0 ){ +#ifdef SQLITE_DEBUG + if( db->flags&SQLITE_VdbeTrace ){ + printf("... fall through after %d steps\n", pOp->p1); + } +#endif + VdbeBranchTaken(0,3); + break; + } + nStep--; + pC->cacheStatus = CACHE_STALE; + rc = sqlite3BtreeNext(pC->uc.pCursor, 0); + if( rc ){ + if( rc==SQLITE_DONE ){ + rc = SQLITE_OK; + goto seekscan_search_fail; + }else{ + goto abort_due_to_error; + } + } + } + + break; +} + + +/* Opcode: SeekHit P1 P2 P3 * * +** Synopsis: set P2<=seekHit<=P3 +** +** Increase or decrease the seekHit value for cursor P1, if necessary, +** so that it is no less than P2 and no greater than P3. +** +** The seekHit integer represents the maximum of terms in an index for which +** there is known to be at least one match. If the seekHit value is smaller +** than the total number of equality terms in an index lookup, then the +** OP_IfNoHope opcode might run to see if the IN loop can be abandoned +** early, thus saving work. This is part of the IN-early-out optimization. +** +** P1 must be a valid b-tree cursor. +*/ +case OP_SeekHit: { /* ncycle */ + VdbeCursor *pC; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pOp->p3>=pOp->p2 ); + if( pC->seekHitp2 ){ +#ifdef SQLITE_DEBUG + if( db->flags&SQLITE_VdbeTrace ){ + printf("seekHit changes from %d to %d\n", pC->seekHit, pOp->p2); + } +#endif + pC->seekHit = pOp->p2; + }else if( pC->seekHit>pOp->p3 ){ +#ifdef SQLITE_DEBUG + if( db->flags&SQLITE_VdbeTrace ){ + printf("seekHit changes from %d to %d\n", pC->seekHit, pOp->p3); + } +#endif + pC->seekHit = pOp->p3; + } + break; +} + +/* Opcode: IfNotOpen P1 P2 * * * +** Synopsis: if( !csr[P1] ) goto P2 +** +** If cursor P1 is not open or if P1 is set to a NULL row using the +** OP_NullRow opcode, then jump to instruction P2. Otherwise, fall through. +*/ +case OP_IfNotOpen: { /* jump */ + VdbeCursor *pCur; + + assert( pOp->p1>=0 && pOp->p1nCursor ); + pCur = p->apCsr[pOp->p1]; + VdbeBranchTaken(pCur==0 || pCur->nullRow, 2); + if( pCur==0 || pCur->nullRow ){ + goto jump_to_p2_and_check_for_interrupt; + } + break; +} + +/* Opcode: Found P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] +** +** If P4==0 then register P3 holds a blob constructed by MakeRecord. If +** P4>0 then register P3 is the first of P4 registers that form an unpacked +** record. +** +** Cursor P1 is on an index btree. If the record identified by P3 and P4 +** is a prefix of any entry in P1 then a jump is made to P2 and +** P1 is left pointing at the matching entry. +** +** This operation leaves the cursor in a state where it can be +** advanced in the forward direction. The Next instruction will work, +** but not the Prev instruction. +** +** See also: NotFound, NoConflict, NotExists. SeekGe +*/ +/* Opcode: NotFound P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] +** +** If P4==0 then register P3 holds a blob constructed by MakeRecord. If +** P4>0 then register P3 is the first of P4 registers that form an unpacked +** record. +** +** Cursor P1 is on an index btree. If the record identified by P3 and P4 +** is not the prefix of any entry in P1 then a jump is made to P2. If P1 +** does contain an entry whose prefix matches the P3/P4 record then control +** falls through to the next instruction and P1 is left pointing at the +** matching entry. +** +** This operation leaves the cursor in a state where it cannot be +** advanced in either direction. In other words, the Next and Prev +** opcodes do not work after this operation. +** +** See also: Found, NotExists, NoConflict, IfNoHope +*/ +/* Opcode: IfNoHope P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] +** +** Register P3 is the first of P4 registers that form an unpacked +** record. Cursor P1 is an index btree. P2 is a jump destination. +** In other words, the operands to this opcode are the same as the +** operands to OP_NotFound and OP_IdxGT. +** +** This opcode is an optimization attempt only. If this opcode always +** falls through, the correct answer is still obtained, but extra work +** is performed. +** +** A value of N in the seekHit flag of cursor P1 means that there exists +** a key P3:N that will match some record in the index. We want to know +** if it is possible for a record P3:P4 to match some record in the +** index. If it is not possible, we can skip some work. So if seekHit +** is less than P4, attempt to find out if a match is possible by running +** OP_NotFound. +** +** This opcode is used in IN clause processing for a multi-column key. +** If an IN clause is attached to an element of the key other than the +** left-most element, and if there are no matches on the most recent +** seek over the whole key, then it might be that one of the key element +** to the left is prohibiting a match, and hence there is "no hope" of +** any match regardless of how many IN clause elements are checked. +** In such a case, we abandon the IN clause search early, using this +** opcode. The opcode name comes from the fact that the +** jump is taken if there is "no hope" of achieving a match. +** +** See also: NotFound, SeekHit +*/ +/* Opcode: NoConflict P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] +** +** If P4==0 then register P3 holds a blob constructed by MakeRecord. If +** P4>0 then register P3 is the first of P4 registers that form an unpacked +** record. +** +** Cursor P1 is on an index btree. If the record identified by P3 and P4 +** contains any NULL value, jump immediately to P2. If all terms of the +** record are not-NULL then a check is done to determine if any row in the +** P1 index btree has a matching key prefix. If there are no matches, jump +** immediately to P2. If there is a match, fall through and leave the P1 +** cursor pointing to the matching row. +** +** This opcode is similar to OP_NotFound with the exceptions that the +** branch is always taken if any part of the search key input is NULL. +** +** This operation leaves the cursor in a state where it cannot be +** advanced in either direction. In other words, the Next and Prev +** opcodes do not work after this operation. +** +** See also: NotFound, Found, NotExists +*/ +case OP_IfNoHope: { /* jump, in3, ncycle */ + VdbeCursor *pC; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); +#ifdef SQLITE_DEBUG + if( db->flags&SQLITE_VdbeTrace ){ + printf("seekHit is %d\n", pC->seekHit); + } +#endif + if( pC->seekHit>=pOp->p4.i ) break; + /* Fall through into OP_NotFound */ + /* no break */ deliberate_fall_through +} +case OP_NoConflict: /* jump, in3, ncycle */ +case OP_NotFound: /* jump, in3, ncycle */ +case OP_Found: { /* jump, in3, ncycle */ + int alreadyExists; + int ii; + VdbeCursor *pC; + UnpackedRecord *pIdxKey; + UnpackedRecord r; + +#ifdef SQLITE_TEST + if( pOp->opcode!=OP_NoConflict ) sqlite3_found_count++; +#endif + + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( pOp->p4type==P4_INT32 ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); +#ifdef SQLITE_DEBUG + pC->seekOp = pOp->opcode; +#endif + r.aMem = &aMem[pOp->p3]; + assert( pC->eCurType==CURTYPE_BTREE ); + assert( pC->uc.pCursor!=0 ); + assert( pC->isTable==0 ); + r.nField = (u16)pOp->p4.i; + if( r.nField>0 ){ + /* Key values in an array of registers */ + r.pKeyInfo = pC->pKeyInfo; + r.default_rc = 0; +#ifdef SQLITE_DEBUG + (void)sqlite3FaultSim(50); /* For use by --counter in TH3 */ + for(ii=0; iip3+ii, &r.aMem[ii]); + } +#endif + rc = sqlite3BtreeIndexMoveto(pC->uc.pCursor, &r, &pC->seekResult); + }else{ + /* Composite key generated by OP_MakeRecord */ + assert( r.aMem->flags & MEM_Blob ); + assert( pOp->opcode!=OP_NoConflict ); + rc = ExpandBlob(r.aMem); + assert( rc==SQLITE_OK || rc==SQLITE_NOMEM ); + if( rc ) goto no_mem; + pIdxKey = sqlite3VdbeAllocUnpackedRecord(pC->pKeyInfo); + if( pIdxKey==0 ) goto no_mem; + sqlite3VdbeRecordUnpack(r.aMem->n, r.aMem->z, pIdxKey); + pIdxKey->default_rc = 0; + rc = sqlite3BtreeIndexMoveto(pC->uc.pCursor, pIdxKey, &pC->seekResult); + sqlite3DbFreeNN(db, pIdxKey); + } + if( rc!=SQLITE_OK ){ + goto abort_due_to_error; + } + alreadyExists = (pC->seekResult==0); + pC->nullRow = 1-alreadyExists; + pC->deferredMoveto = 0; + pC->cacheStatus = CACHE_STALE; + if( pOp->opcode==OP_Found ){ + VdbeBranchTaken(alreadyExists!=0,2); + if( alreadyExists ) goto jump_to_p2; + }else{ + if( !alreadyExists ){ + VdbeBranchTaken(1,2); + goto jump_to_p2; + } + if( pOp->opcode==OP_NoConflict ){ + /* For the OP_NoConflict opcode, take the jump if any of the + ** input fields are NULL, since any key with a NULL will not + ** conflict */ + for(ii=0; iiopcode==OP_IfNoHope ){ + pC->seekHit = pOp->p4.i; + } + } + break; +} + +/* Opcode: SeekRowid P1 P2 P3 * * +** Synopsis: intkey=r[P3] +** +** P1 is the index of a cursor open on an SQL table btree (with integer +** keys). If register P3 does not contain an integer or if P1 does not +** contain a record with rowid P3 then jump immediately to P2. +** Or, if P2 is 0, raise an SQLITE_CORRUPT error. If P1 does contain +** a record with rowid P3 then +** leave the cursor pointing at that record and fall through to the next +** instruction. +** +** The OP_NotExists opcode performs the same operation, but with OP_NotExists +** the P3 register must be guaranteed to contain an integer value. With this +** opcode, register P3 might not contain an integer. +** +** The OP_NotFound opcode performs the same operation on index btrees +** (with arbitrary multi-value keys). +** +** This opcode leaves the cursor in a state where it cannot be advanced +** in either direction. In other words, the Next and Prev opcodes will +** not work following this opcode. +** +** See also: Found, NotFound, NoConflict, SeekRowid +*/ +/* Opcode: NotExists P1 P2 P3 * * +** Synopsis: intkey=r[P3] +** +** P1 is the index of a cursor open on an SQL table btree (with integer +** keys). P3 is an integer rowid. If P1 does not contain a record with +** rowid P3 then jump immediately to P2. Or, if P2 is 0, raise an +** SQLITE_CORRUPT error. If P1 does contain a record with rowid P3 then +** leave the cursor pointing at that record and fall through to the next +** instruction. +** +** The OP_SeekRowid opcode performs the same operation but also allows the +** P3 register to contain a non-integer value, in which case the jump is +** always taken. This opcode requires that P3 always contain an integer. +** +** The OP_NotFound opcode performs the same operation on index btrees +** (with arbitrary multi-value keys). +** +** This opcode leaves the cursor in a state where it cannot be advanced +** in either direction. In other words, the Next and Prev opcodes will +** not work following this opcode. +** +** See also: Found, NotFound, NoConflict, SeekRowid +*/ +case OP_SeekRowid: { /* jump0, in3, ncycle */ + VdbeCursor *pC; + BtCursor *pCrsr; + int res; + u64 iKey; + + pIn3 = &aMem[pOp->p3]; + testcase( pIn3->flags & MEM_Int ); + testcase( pIn3->flags & MEM_IntReal ); + testcase( pIn3->flags & MEM_Real ); + testcase( (pIn3->flags & (MEM_Str|MEM_Int))==MEM_Str ); + if( (pIn3->flags & (MEM_Int|MEM_IntReal))==0 ){ + /* If pIn3->u.i does not contain an integer, compute iKey as the + ** integer value of pIn3. Jump to P2 if pIn3 cannot be converted + ** into an integer without loss of information. Take care to avoid + ** changing the datatype of pIn3, however, as it is used by other + ** parts of the prepared statement. */ + Mem x = pIn3[0]; + applyAffinity(&x, SQLITE_AFF_NUMERIC, encoding); + if( (x.flags & MEM_Int)==0 ) goto jump_to_p2; + iKey = x.u.i; + goto notExistsWithKey; + } + /* Fall through into OP_NotExists */ + /* no break */ deliberate_fall_through +case OP_NotExists: /* jump, in3, ncycle */ + pIn3 = &aMem[pOp->p3]; + assert( (pIn3->flags & MEM_Int)!=0 || pOp->opcode==OP_SeekRowid ); + assert( pOp->p1>=0 && pOp->p1nCursor ); + iKey = pIn3->u.i; +notExistsWithKey: + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); +#ifdef SQLITE_DEBUG + if( pOp->opcode==OP_SeekRowid ) pC->seekOp = OP_SeekRowid; +#endif + assert( pC->isTable ); + assert( pC->eCurType==CURTYPE_BTREE ); + pCrsr = pC->uc.pCursor; + assert( pCrsr!=0 ); + res = 0; + rc = sqlite3BtreeTableMoveto(pCrsr, iKey, 0, &res); + assert( rc==SQLITE_OK || res==0 ); + pC->movetoTarget = iKey; /* Used by OP_Delete */ + pC->nullRow = 0; + pC->cacheStatus = CACHE_STALE; + pC->deferredMoveto = 0; + VdbeBranchTaken(res!=0,2); + pC->seekResult = res; + if( res!=0 ){ + assert( rc==SQLITE_OK ); + if( pOp->p2==0 ){ + rc = SQLITE_CORRUPT_BKPT; + }else{ + goto jump_to_p2; + } + } + if( rc ) goto abort_due_to_error; + break; +} + +/* Opcode: Sequence P1 P2 * * * +** Synopsis: r[P2]=cursor[P1].ctr++ +** +** Find the next available sequence number for cursor P1. +** Write the sequence number into register P2. +** The sequence number on the cursor is incremented after this +** instruction. +*/ +case OP_Sequence: { /* out2 */ + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( p->apCsr[pOp->p1]!=0 ); + assert( p->apCsr[pOp->p1]->eCurType!=CURTYPE_VTAB ); + pOut = out2Prerelease(p, pOp); + pOut->u.i = p->apCsr[pOp->p1]->seqCount++; + break; +} + + +/* Opcode: NewRowid P1 P2 P3 * * +** Synopsis: r[P2]=rowid +** +** Get a new integer record number (a.k.a "rowid") used as the key to a table. +** The record number is not previously used as a key in the database +** table that cursor P1 points to. The new record number is written +** written to register P2. +** +** If P3>0 then P3 is a register in the root frame of this VDBE that holds +** the largest previously generated record number. No new record numbers are +** allowed to be less than this value. When this value reaches its maximum, +** an SQLITE_FULL error is generated. The P3 register is updated with the ' +** generated record number. This P3 mechanism is used to help implement the +** AUTOINCREMENT feature. +*/ +case OP_NewRowid: { /* out2 */ + i64 v; /* The new rowid */ + VdbeCursor *pC; /* Cursor of table to get the new rowid */ + int res; /* Result of an sqlite3BtreeLast() */ + int cnt; /* Counter to limit the number of searches */ +#ifndef SQLITE_OMIT_AUTOINCREMENT + Mem *pMem; /* Register holding largest rowid for AUTOINCREMENT */ + VdbeFrame *pFrame; /* Root frame of VDBE */ +#endif + + v = 0; + res = 0; + pOut = out2Prerelease(p, pOp); + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->isTable ); + assert( pC->eCurType==CURTYPE_BTREE ); + assert( pC->uc.pCursor!=0 ); + { + /* The next rowid or record number (different terms for the same + ** thing) is obtained in a two-step algorithm. + ** + ** First we attempt to find the largest existing rowid and add one + ** to that. But if the largest existing rowid is already the maximum + ** positive integer, we have to fall through to the second + ** probabilistic algorithm + ** + ** The second algorithm is to select a rowid at random and see if + ** it already exists in the table. If it does not exist, we have + ** succeeded. If the random rowid does exist, we select a new one + ** and try again, up to 100 times. + */ + assert( pC->isTable ); + +#ifdef SQLITE_32BIT_ROWID +# define MAX_ROWID 0x7fffffff +#else + /* Some compilers complain about constants of the form 0x7fffffffffffffff. + ** Others complain about 0x7ffffffffffffffffLL. The following macro seems + ** to provide the constant while making all compilers happy. + */ +# define MAX_ROWID (i64)( (((u64)0x7fffffff)<<32) | (u64)0xffffffff ) +#endif + + if( !pC->useRandomRowid ){ + rc = sqlite3BtreeLast(pC->uc.pCursor, &res); + if( rc!=SQLITE_OK ){ + goto abort_due_to_error; + } + if( res ){ + v = 1; /* IMP: R-61914-48074 */ + }else{ + assert( sqlite3BtreeCursorIsValid(pC->uc.pCursor) ); + v = sqlite3BtreeIntegerKey(pC->uc.pCursor); + if( v>=MAX_ROWID ){ + pC->useRandomRowid = 1; + }else{ + v++; /* IMP: R-29538-34987 */ + } + } + } + +#ifndef SQLITE_OMIT_AUTOINCREMENT + if( pOp->p3 ){ + /* Assert that P3 is a valid memory cell. */ + assert( pOp->p3>0 ); + if( p->pFrame ){ + for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent); + /* Assert that P3 is a valid memory cell. */ + assert( pOp->p3<=pFrame->nMem ); + pMem = &pFrame->aMem[pOp->p3]; + }else{ + /* Assert that P3 is a valid memory cell. */ + assert( pOp->p3<=(p->nMem+1 - p->nCursor) ); + pMem = &aMem[pOp->p3]; + memAboutToChange(p, pMem); + } + assert( memIsValid(pMem) ); + + REGISTER_TRACE(pOp->p3, pMem); + sqlite3VdbeMemIntegerify(pMem); + assert( (pMem->flags & MEM_Int)!=0 ); /* mem(P3) holds an integer */ + if( pMem->u.i==MAX_ROWID || pC->useRandomRowid ){ + rc = SQLITE_FULL; /* IMP: R-17817-00630 */ + goto abort_due_to_error; + } + if( vu.i+1 ){ + v = pMem->u.i + 1; + } + pMem->u.i = v; + } +#endif + if( pC->useRandomRowid ){ + /* IMPLEMENTATION-OF: R-07677-41881 If the largest ROWID is equal to the + ** largest possible integer (9223372036854775807) then the database + ** engine starts picking positive candidate ROWIDs at random until + ** it finds one that is not previously used. */ + assert( pOp->p3==0 ); /* We cannot be in random rowid mode if this is + ** an AUTOINCREMENT table. */ + cnt = 0; + do{ + sqlite3_randomness(sizeof(v), &v); + v &= (MAX_ROWID>>1); v++; /* Ensure that v is greater than zero */ + }while( ((rc = sqlite3BtreeTableMoveto(pC->uc.pCursor, (u64)v, + 0, &res))==SQLITE_OK) + && (res==0) + && (++cnt<100)); + if( rc ) goto abort_due_to_error; + if( res==0 ){ + rc = SQLITE_FULL; /* IMP: R-38219-53002 */ + goto abort_due_to_error; + } + assert( v>0 ); /* EV: R-40812-03570 */ + } + pC->deferredMoveto = 0; + pC->cacheStatus = CACHE_STALE; + } + pOut->u.i = v; + break; +} + +/* Opcode: Insert P1 P2 P3 P4 P5 +** Synopsis: intkey=r[P3] data=r[P2] +** +** Write an entry into the table of cursor P1. A new entry is +** created if it doesn't already exist or the data for an existing +** entry is overwritten. The data is the value MEM_Blob stored in register +** number P2. The key is stored in register P3. The key must +** be a MEM_Int. +** +** If the OPFLAG_NCHANGE flag of P5 is set, then the row change count is +** incremented (otherwise not). If the OPFLAG_LASTROWID flag of P5 is set, +** then rowid is stored for subsequent return by the +** sqlite3_last_insert_rowid() function (otherwise it is unmodified). +** +** If the OPFLAG_USESEEKRESULT flag of P5 is set, the implementation might +** run faster by avoiding an unnecessary seek on cursor P1. However, +** the OPFLAG_USESEEKRESULT flag must only be set if there have been no prior +** seeks on the cursor or if the most recent seek used a key equal to P3. +** +** If the OPFLAG_ISUPDATE flag is set, then this opcode is part of an +** UPDATE operation. Otherwise (if the flag is clear) then this opcode +** is part of an INSERT operation. The difference is only important to +** the update hook. +** +** Parameter P4 may point to a Table structure, or may be NULL. If it is +** not NULL, then the update-hook (sqlite3.xUpdateCallback) is invoked +** following a successful insert. +** +** (WARNING/TODO: If P1 is a pseudo-cursor and P2 is dynamically +** allocated, then ownership of P2 is transferred to the pseudo-cursor +** and register P2 becomes ephemeral. If the cursor is changed, the +** value of register P2 will then change. Make sure this does not +** cause any problems.) +** +** This instruction only works on tables. The equivalent instruction +** for indices is OP_IdxInsert. +*/ +case OP_Insert: { + Mem *pData; /* MEM cell holding data for the record to be inserted */ + Mem *pKey; /* MEM cell holding key for the record */ + VdbeCursor *pC; /* Cursor to table into which insert is written */ + int seekResult; /* Result of prior seek or 0 if no USESEEKRESULT flag */ + const char *zDb; /* database name - used by the update hook */ + Table *pTab; /* Table structure - used by update and pre-update hooks */ + BtreePayload x; /* Payload to be inserted */ + + pData = &aMem[pOp->p2]; + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( memIsValid(pData) ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->eCurType==CURTYPE_BTREE ); + assert( pC->deferredMoveto==0 ); + assert( pC->uc.pCursor!=0 ); + assert( (pOp->p5 & OPFLAG_ISNOOP) || pC->isTable ); + assert( pOp->p4type==P4_TABLE || pOp->p4type>=P4_STATIC ); + REGISTER_TRACE(pOp->p2, pData); + sqlite3VdbeIncrWriteCounter(p, pC); + + pKey = &aMem[pOp->p3]; + assert( pKey->flags & MEM_Int ); + assert( memIsValid(pKey) ); + REGISTER_TRACE(pOp->p3, pKey); + x.nKey = pKey->u.i; + + if( pOp->p4type==P4_TABLE && HAS_UPDATE_HOOK(db) ){ + assert( pC->iDb>=0 ); + zDb = db->aDb[pC->iDb].zDbSName; + pTab = pOp->p4.pTab; + assert( (pOp->p5 & OPFLAG_ISNOOP) || HasRowid(pTab) ); + }else{ + pTab = 0; + zDb = 0; + } + +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + /* Invoke the pre-update hook, if any */ + if( pTab ){ + if( db->xPreUpdateCallback && !(pOp->p5 & OPFLAG_ISUPDATE) ){ + sqlite3VdbePreUpdateHook(p,pC,SQLITE_INSERT,zDb,pTab,x.nKey,pOp->p2,-1); + } + if( db->xUpdateCallback==0 || pTab->aCol==0 ){ + /* Prevent post-update hook from running in cases when it should not */ + pTab = 0; + } + } + if( pOp->p5 & OPFLAG_ISNOOP ) break; +#endif + + assert( (pOp->p5 & OPFLAG_LASTROWID)==0 || (pOp->p5 & OPFLAG_NCHANGE)!=0 ); + if( pOp->p5 & OPFLAG_NCHANGE ){ + p->nChange++; + if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = x.nKey; + } + assert( (pData->flags & (MEM_Blob|MEM_Str))!=0 || pData->n==0 ); + x.pData = pData->z; + x.nData = pData->n; + seekResult = ((pOp->p5 & OPFLAG_USESEEKRESULT) ? pC->seekResult : 0); + if( pData->flags & MEM_Zero ){ + x.nZero = pData->u.nZero; + }else{ + x.nZero = 0; + } + x.pKey = 0; + assert( BTREE_PREFORMAT==OPFLAG_PREFORMAT ); + rc = sqlite3BtreeInsert(pC->uc.pCursor, &x, + (pOp->p5 & (OPFLAG_APPEND|OPFLAG_SAVEPOSITION|OPFLAG_PREFORMAT)), + seekResult + ); + pC->deferredMoveto = 0; + pC->cacheStatus = CACHE_STALE; + colCacheCtr++; + + /* Invoke the update-hook if required. */ + if( rc ) goto abort_due_to_error; + if( pTab ){ + assert( db->xUpdateCallback!=0 ); + assert( pTab->aCol!=0 ); + db->xUpdateCallback(db->pUpdateArg, + (pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT, + zDb, pTab->zName, x.nKey); + } + break; +} + +/* Opcode: RowCell P1 P2 P3 * * +** +** P1 and P2 are both open cursors. Both must be opened on the same type +** of table - intkey or index. This opcode is used as part of copying +** the current row from P2 into P1. If the cursors are opened on intkey +** tables, register P3 contains the rowid to use with the new record in +** P1. If they are opened on index tables, P3 is not used. +** +** This opcode must be followed by either an Insert or InsertIdx opcode +** with the OPFLAG_PREFORMAT flag set to complete the insert operation. +*/ +case OP_RowCell: { + VdbeCursor *pDest; /* Cursor to write to */ + VdbeCursor *pSrc; /* Cursor to read from */ + i64 iKey; /* Rowid value to insert with */ + assert( pOp[1].opcode==OP_Insert || pOp[1].opcode==OP_IdxInsert ); + assert( pOp[1].opcode==OP_Insert || pOp->p3==0 ); + assert( pOp[1].opcode==OP_IdxInsert || pOp->p3>0 ); + assert( pOp[1].p5 & OPFLAG_PREFORMAT ); + pDest = p->apCsr[pOp->p1]; + pSrc = p->apCsr[pOp->p2]; + iKey = pOp->p3 ? aMem[pOp->p3].u.i : 0; + rc = sqlite3BtreeTransferRow(pDest->uc.pCursor, pSrc->uc.pCursor, iKey); + if( rc!=SQLITE_OK ) goto abort_due_to_error; + break; +}; + +/* Opcode: Delete P1 P2 P3 P4 P5 +** +** Delete the record at which the P1 cursor is currently pointing. +** +** If the OPFLAG_SAVEPOSITION bit of the P5 parameter is set, then +** the cursor will be left pointing at either the next or the previous +** record in the table. If it is left pointing at the next record, then +** the next Next instruction will be a no-op. As a result, in this case +** it is ok to delete a record from within a Next loop. If +** OPFLAG_SAVEPOSITION bit of P5 is clear, then the cursor will be +** left in an undefined state. +** +** If the OPFLAG_AUXDELETE bit is set on P5, that indicates that this +** delete is one of several associated with deleting a table row and +** all its associated index entries. Exactly one of those deletes is +** the "primary" delete. The others are all on OPFLAG_FORDELETE +** cursors or else are marked with the AUXDELETE flag. +** +** If the OPFLAG_NCHANGE (0x01) flag of P2 (NB: P2 not P5) is set, then +** the row change count is incremented (otherwise not). +** +** If the OPFLAG_ISNOOP (0x40) flag of P2 (not P5!) is set, then the +** pre-update-hook for deletes is run, but the btree is otherwise unchanged. +** This happens when the OP_Delete is to be shortly followed by an OP_Insert +** with the same key, causing the btree entry to be overwritten. +** +** P1 must not be pseudo-table. It has to be a real table with +** multiple rows. +** +** If P4 is not NULL then it points to a Table object. In this case either +** the update or pre-update hook, or both, may be invoked. The P1 cursor must +** have been positioned using OP_NotFound prior to invoking this opcode in +** this case. Specifically, if one is configured, the pre-update hook is +** invoked if P4 is not NULL. The update-hook is invoked if one is configured, +** P4 is not NULL, and the OPFLAG_NCHANGE flag is set in P2. +** +** If the OPFLAG_ISUPDATE flag is set in P2, then P3 contains the address +** of the memory cell that contains the value that the rowid of the row will +** be set to by the update. +*/ +case OP_Delete: { + VdbeCursor *pC; + const char *zDb; + Table *pTab; + int opflags; + + opflags = pOp->p2; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->eCurType==CURTYPE_BTREE ); + assert( pC->uc.pCursor!=0 ); + assert( pC->deferredMoveto==0 ); + sqlite3VdbeIncrWriteCounter(p, pC); + +#ifdef SQLITE_DEBUG + if( pOp->p4type==P4_TABLE + && HasRowid(pOp->p4.pTab) + && pOp->p5==0 + && sqlite3BtreeCursorIsValidNN(pC->uc.pCursor) + ){ + /* If p5 is zero, the seek operation that positioned the cursor prior to + ** OP_Delete will have also set the pC->movetoTarget field to the rowid of + ** the row that is being deleted */ + i64 iKey = sqlite3BtreeIntegerKey(pC->uc.pCursor); + assert( CORRUPT_DB || pC->movetoTarget==iKey ); + } +#endif + + /* If the update-hook or pre-update-hook will be invoked, set zDb to + ** the name of the db to pass as to it. Also set local pTab to a copy + ** of p4.pTab. Finally, if p5 is true, indicating that this cursor was + ** last moved with OP_Next or OP_Prev, not Seek or NotFound, set + ** VdbeCursor.movetoTarget to the current rowid. */ + if( pOp->p4type==P4_TABLE && HAS_UPDATE_HOOK(db) ){ + assert( pC->iDb>=0 ); + assert( pOp->p4.pTab!=0 ); + zDb = db->aDb[pC->iDb].zDbSName; + pTab = pOp->p4.pTab; + if( (pOp->p5 & OPFLAG_SAVEPOSITION)!=0 && pC->isTable ){ + pC->movetoTarget = sqlite3BtreeIntegerKey(pC->uc.pCursor); + } + }else{ + zDb = 0; + pTab = 0; + } + +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + /* Invoke the pre-update-hook if required. */ + assert( db->xPreUpdateCallback==0 || pTab==pOp->p4.pTab ); + if( db->xPreUpdateCallback && pTab ){ + assert( !(opflags & OPFLAG_ISUPDATE) + || HasRowid(pTab)==0 + || (aMem[pOp->p3].flags & MEM_Int) + ); + sqlite3VdbePreUpdateHook(p, pC, + (opflags & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_DELETE, + zDb, pTab, pC->movetoTarget, + pOp->p3, -1 + ); + } + if( opflags & OPFLAG_ISNOOP ) break; +#endif + + /* Only flags that can be set are SAVEPOISTION and AUXDELETE */ + assert( (pOp->p5 & ~(OPFLAG_SAVEPOSITION|OPFLAG_AUXDELETE))==0 ); + assert( OPFLAG_SAVEPOSITION==BTREE_SAVEPOSITION ); + assert( OPFLAG_AUXDELETE==BTREE_AUXDELETE ); + +#ifdef SQLITE_DEBUG + if( p->pFrame==0 ){ + if( pC->isEphemeral==0 + && (pOp->p5 & OPFLAG_AUXDELETE)==0 + && (pC->wrFlag & OPFLAG_FORDELETE)==0 + ){ + nExtraDelete++; + } + if( pOp->p2 & OPFLAG_NCHANGE ){ + nExtraDelete--; + } + } +#endif + + rc = sqlite3BtreeDelete(pC->uc.pCursor, pOp->p5); + pC->cacheStatus = CACHE_STALE; + colCacheCtr++; + pC->seekResult = 0; + if( rc ) goto abort_due_to_error; + + /* Invoke the update-hook if required. */ + if( opflags & OPFLAG_NCHANGE ){ + p->nChange++; + if( db->xUpdateCallback && ALWAYS(pTab!=0) && HasRowid(pTab) ){ + db->xUpdateCallback(db->pUpdateArg, SQLITE_DELETE, zDb, pTab->zName, + pC->movetoTarget); + assert( pC->iDb>=0 ); + } + } + + break; +} +/* Opcode: ResetCount * * * * * +** +** The value of the change counter is copied to the database handle +** change counter (returned by subsequent calls to sqlite3_changes()). +** Then the VMs internal change counter resets to 0. +** This is used by trigger programs. +*/ +case OP_ResetCount: { + sqlite3VdbeSetChanges(db, p->nChange); + p->nChange = 0; + break; +} + +/* Opcode: SorterCompare P1 P2 P3 P4 +** Synopsis: if key(P1)!=trim(r[P3],P4) goto P2 +** +** P1 is a sorter cursor. This instruction compares a prefix of the +** record blob in register P3 against a prefix of the entry that +** the sorter cursor currently points to. Only the first P4 fields +** of r[P3] and the sorter record are compared. +** +** If either P3 or the sorter contains a NULL in one of their significant +** fields (not counting the P4 fields at the end which are ignored) then +** the comparison is assumed to be equal. +** +** Fall through to next instruction if the two records compare equal to +** each other. Jump to P2 if they are different. +*/ +case OP_SorterCompare: { + VdbeCursor *pC; + int res; + int nKeyCol; + + pC = p->apCsr[pOp->p1]; + assert( isSorter(pC) ); + assert( pOp->p4type==P4_INT32 ); + pIn3 = &aMem[pOp->p3]; + nKeyCol = pOp->p4.i; + res = 0; + rc = sqlite3VdbeSorterCompare(pC, pIn3, nKeyCol, &res); + VdbeBranchTaken(res!=0,2); + if( rc ) goto abort_due_to_error; + if( res ) goto jump_to_p2; + break; +}; + +/* Opcode: SorterData P1 P2 P3 * * +** Synopsis: r[P2]=data +** +** Write into register P2 the current sorter data for sorter cursor P1. +** Then clear the column header cache on cursor P3. +** +** This opcode is normally used to move a record out of the sorter and into +** a register that is the source for a pseudo-table cursor created using +** OpenPseudo. That pseudo-table cursor is the one that is identified by +** parameter P3. Clearing the P3 column cache as part of this opcode saves +** us from having to issue a separate NullRow instruction to clear that cache. +*/ +case OP_SorterData: { /* ncycle */ + VdbeCursor *pC; + + pOut = &aMem[pOp->p2]; + pC = p->apCsr[pOp->p1]; + assert( isSorter(pC) ); + rc = sqlite3VdbeSorterRowkey(pC, pOut); + assert( rc!=SQLITE_OK || (pOut->flags & MEM_Blob) ); + assert( pOp->p1>=0 && pOp->p1nCursor ); + if( rc ) goto abort_due_to_error; + p->apCsr[pOp->p3]->cacheStatus = CACHE_STALE; + break; +} + +/* Opcode: RowData P1 P2 P3 * * +** Synopsis: r[P2]=data +** +** Write into register P2 the complete row content for the row at +** which cursor P1 is currently pointing. +** There is no interpretation of the data. +** It is just copied onto the P2 register exactly as +** it is found in the database file. +** +** If cursor P1 is an index, then the content is the key of the row. +** If cursor P2 is a table, then the content extracted is the data. +** +** If the P1 cursor must be pointing to a valid row (not a NULL row) +** of a real table, not a pseudo-table. +** +** If P3!=0 then this opcode is allowed to make an ephemeral pointer +** into the database page. That means that the content of the output +** register will be invalidated as soon as the cursor moves - including +** moves caused by other cursors that "save" the current cursors +** position in order that they can write to the same table. If P3==0 +** then a copy of the data is made into memory. P3!=0 is faster, but +** P3==0 is safer. +** +** If P3!=0 then the content of the P2 register is unsuitable for use +** in OP_Result and any OP_Result will invalidate the P2 register content. +** The P2 register content is invalidated by opcodes like OP_Function or +** by any use of another cursor pointing to the same table. +*/ +case OP_RowData: { + VdbeCursor *pC; + BtCursor *pCrsr; + u32 n; + + pOut = out2Prerelease(p, pOp); + + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->eCurType==CURTYPE_BTREE ); + assert( isSorter(pC)==0 ); + assert( pC->nullRow==0 ); + assert( pC->uc.pCursor!=0 ); + pCrsr = pC->uc.pCursor; + + /* The OP_RowData opcodes always follow OP_NotExists or + ** OP_SeekRowid or OP_Rewind/Op_Next with no intervening instructions + ** that might invalidate the cursor. + ** If this were not the case, one of the following assert()s + ** would fail. Should this ever change (because of changes in the code + ** generator) then the fix would be to insert a call to + ** sqlite3VdbeCursorMoveto(). + */ + assert( pC->deferredMoveto==0 ); + assert( sqlite3BtreeCursorIsValid(pCrsr) ); + + n = sqlite3BtreePayloadSize(pCrsr); + if( n>(u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){ + goto too_big; + } + testcase( n==0 ); + rc = sqlite3VdbeMemFromBtreeZeroOffset(pCrsr, n, pOut); + if( rc ) goto abort_due_to_error; + if( !pOp->p3 ) Deephemeralize(pOut); + UPDATE_MAX_BLOBSIZE(pOut); + REGISTER_TRACE(pOp->p2, pOut); + break; +} + +/* Opcode: Rowid P1 P2 * * * +** Synopsis: r[P2]=PX rowid of P1 +** +** Store in register P2 an integer which is the key of the table entry that +** P1 is currently point to. +** +** P1 can be either an ordinary table or a virtual table. There used to +** be a separate OP_VRowid opcode for use with virtual tables, but this +** one opcode now works for both table types. +*/ +case OP_Rowid: { /* out2, ncycle */ + VdbeCursor *pC; + i64 v; + sqlite3_vtab *pVtab; + const sqlite3_module *pModule; + + pOut = out2Prerelease(p, pOp); + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->eCurType!=CURTYPE_PSEUDO || pC->nullRow ); + if( pC->nullRow ){ + pOut->flags = MEM_Null; + break; + }else if( pC->deferredMoveto ){ + v = pC->movetoTarget; +#ifndef SQLITE_OMIT_VIRTUALTABLE + }else if( pC->eCurType==CURTYPE_VTAB ){ + assert( pC->uc.pVCur!=0 ); + pVtab = pC->uc.pVCur->pVtab; + pModule = pVtab->pModule; + assert( pModule->xRowid ); + rc = pModule->xRowid(pC->uc.pVCur, &v); + sqlite3VtabImportErrmsg(p, pVtab); + if( rc ) goto abort_due_to_error; +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + }else{ + assert( pC->eCurType==CURTYPE_BTREE ); + assert( pC->uc.pCursor!=0 ); + rc = sqlite3VdbeCursorRestore(pC); + if( rc ) goto abort_due_to_error; + if( pC->nullRow ){ + pOut->flags = MEM_Null; + break; + } + v = sqlite3BtreeIntegerKey(pC->uc.pCursor); + } + pOut->u.i = v; + break; +} + +/* Opcode: NullRow P1 * * * * +** +** Move the cursor P1 to a null row. Any OP_Column operations +** that occur while the cursor is on the null row will always +** write a NULL. +** +** If cursor P1 is not previously opened, open it now to a special +** pseudo-cursor that always returns NULL for every column. +*/ +case OP_NullRow: { + VdbeCursor *pC; + + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + if( pC==0 ){ + /* If the cursor is not already open, create a special kind of + ** pseudo-cursor that always gives null rows. */ + pC = allocateCursor(p, pOp->p1, 1, CURTYPE_PSEUDO); + if( pC==0 ) goto no_mem; + pC->seekResult = 0; + pC->isTable = 1; + pC->noReuse = 1; + pC->uc.pCursor = sqlite3BtreeFakeValidCursor(); + } + pC->nullRow = 1; + pC->cacheStatus = CACHE_STALE; + if( pC->eCurType==CURTYPE_BTREE ){ + assert( pC->uc.pCursor!=0 ); + sqlite3BtreeClearCursor(pC->uc.pCursor); + } +#ifdef SQLITE_DEBUG + if( pC->seekOp==0 ) pC->seekOp = OP_NullRow; +#endif + break; +} + +/* Opcode: SeekEnd P1 * * * * +** +** Position cursor P1 at the end of the btree for the purpose of +** appending a new entry onto the btree. +** +** It is assumed that the cursor is used only for appending and so +** if the cursor is valid, then the cursor must already be pointing +** at the end of the btree and so no changes are made to +** the cursor. +*/ +/* Opcode: Last P1 P2 * * * +** +** The next use of the Rowid or Column or Prev instruction for P1 +** will refer to the last entry in the database table or index. +** If the table or index is empty and P2>0, then jump immediately to P2. +** If P2 is 0 or if the table or index is not empty, fall through +** to the following instruction. +** +** This opcode leaves the cursor configured to move in reverse order, +** from the end toward the beginning. In other words, the cursor is +** configured to use Prev, not Next. +*/ +case OP_SeekEnd: /* ncycle */ +case OP_Last: { /* jump0, ncycle */ + VdbeCursor *pC; + BtCursor *pCrsr; + int res; + + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->eCurType==CURTYPE_BTREE ); + pCrsr = pC->uc.pCursor; + res = 0; + assert( pCrsr!=0 ); +#ifdef SQLITE_DEBUG + pC->seekOp = pOp->opcode; +#endif + if( pOp->opcode==OP_SeekEnd ){ + assert( pOp->p2==0 ); + pC->seekResult = -1; + if( sqlite3BtreeCursorIsValidNN(pCrsr) ){ + break; + } + } + rc = sqlite3BtreeLast(pCrsr, &res); + pC->nullRow = (u8)res; + pC->deferredMoveto = 0; + pC->cacheStatus = CACHE_STALE; + if( rc ) goto abort_due_to_error; + if( pOp->p2>0 ){ + VdbeBranchTaken(res!=0,2); + if( res ) goto jump_to_p2; + } + break; +} + +/* Opcode: IfSizeBetween P1 P2 P3 P4 * +** +** Let N be the approximate number of rows in the table or index +** with cursor P1 and let X be 10*log2(N) if N is positive or -1 +** if N is zero. +** +** Jump to P2 if X is in between P3 and P4, inclusive. +*/ +case OP_IfSizeBetween: { /* jump */ + VdbeCursor *pC; + BtCursor *pCrsr; + int res; + i64 sz; + + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( pOp->p4type==P4_INT32 ); + assert( pOp->p3>=-1 && pOp->p3<=640*2 ); + assert( pOp->p4.i>=-1 && pOp->p4.i<=640*2 ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + pCrsr = pC->uc.pCursor; + assert( pCrsr ); + rc = sqlite3BtreeFirst(pCrsr, &res); + if( rc ) goto abort_due_to_error; + if( res!=0 ){ + sz = -1; /* -Infinity encoding */ + }else{ + sz = sqlite3BtreeRowCountEst(pCrsr); + assert( sz>0 ); + sz = sqlite3LogEst((u64)sz); + } + res = sz>=pOp->p3 && sz<=pOp->p4.i; + VdbeBranchTaken(res!=0,2); + if( res ) goto jump_to_p2; + break; +} + + +/* Opcode: SorterSort P1 P2 * * * +** +** After all records have been inserted into the Sorter object +** identified by P1, invoke this opcode to actually do the sorting. +** Jump to P2 if there are no records to be sorted. +** +** This opcode is an alias for OP_Sort and OP_Rewind that is used +** for Sorter objects. +*/ +/* Opcode: Sort P1 P2 * * * +** +** This opcode does exactly the same thing as OP_Rewind except that +** it increments an undocumented global variable used for testing. +** +** Sorting is accomplished by writing records into a sorting index, +** then rewinding that index and playing it back from beginning to +** end. We use the OP_Sort opcode instead of OP_Rewind to do the +** rewinding so that the global variable will be incremented and +** regression tests can determine whether or not the optimizer is +** correctly optimizing out sorts. +*/ +case OP_SorterSort: /* jump ncycle */ +case OP_Sort: { /* jump ncycle */ +#ifdef SQLITE_TEST + sqlite3_sort_count++; + sqlite3_search_count--; +#endif + p->aCounter[SQLITE_STMTSTATUS_SORT]++; + /* Fall through into OP_Rewind */ + /* no break */ deliberate_fall_through +} +/* Opcode: Rewind P1 P2 * * * +** +** The next use of the Rowid or Column or Next instruction for P1 +** will refer to the first entry in the database table or index. +** If the table or index is empty, jump immediately to P2. +** If the table or index is not empty, fall through to the following +** instruction. +** +** If P2 is zero, that is an assertion that the P1 table is never +** empty and hence the jump will never be taken. +** +** This opcode leaves the cursor configured to move in forward order, +** from the beginning toward the end. In other words, the cursor is +** configured to use Next, not Prev. +*/ +case OP_Rewind: { /* jump0, ncycle */ + VdbeCursor *pC; + BtCursor *pCrsr; + int res; + + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( pOp->p5==0 ); + assert( pOp->p2>=0 && pOp->p2nOp ); + + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( isSorter(pC)==(pOp->opcode==OP_SorterSort) ); + res = 1; +#ifdef SQLITE_DEBUG + pC->seekOp = OP_Rewind; +#endif + if( isSorter(pC) ){ + rc = sqlite3VdbeSorterRewind(pC, &res); + }else{ + assert( pC->eCurType==CURTYPE_BTREE ); + pCrsr = pC->uc.pCursor; + assert( pCrsr ); + rc = sqlite3BtreeFirst(pCrsr, &res); + pC->deferredMoveto = 0; + pC->cacheStatus = CACHE_STALE; + } + if( rc ) goto abort_due_to_error; + pC->nullRow = (u8)res; + if( pOp->p2>0 ){ + VdbeBranchTaken(res!=0,2); + if( res ) goto jump_to_p2; + } + break; +} + +/* Opcode: IfEmpty P1 P2 * * * +** Synopsis: if( empty(P1) ) goto P2 +** +** Check to see if the b-tree table that cursor P1 references is empty +** and jump to P2 if it is. +*/ +case OP_IfEmpty: { /* jump */ + VdbeCursor *pC; + BtCursor *pCrsr; + int res; + + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( pOp->p2>=0 && pOp->p2nOp ); + + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->eCurType==CURTYPE_BTREE ); + pCrsr = pC->uc.pCursor; + assert( pCrsr ); + rc = sqlite3BtreeIsEmpty(pCrsr, &res); + if( rc ) goto abort_due_to_error; + VdbeBranchTaken(res!=0,2); + if( res ) goto jump_to_p2; + break; +} + +/* Opcode: Next P1 P2 P3 * P5 +** +** Advance cursor P1 so that it points to the next key/data pair in its +** table or index. If there are no more key/value pairs then fall through +** to the following instruction. But if the cursor advance was successful, +** jump immediately to P2. +** +** The Next opcode is only valid following an SeekGT, SeekGE, or +** OP_Rewind opcode used to position the cursor. Next is not allowed +** to follow SeekLT, SeekLE, or OP_Last. +** +** The P1 cursor must be for a real table, not a pseudo-table. P1 must have +** been opened prior to this opcode or the program will segfault. +** +** The P3 value is a hint to the btree implementation. If P3==1, that +** means P1 is an SQL index and that this instruction could have been +** omitted if that index had been unique. P3 is usually 0. P3 is +** always either 0 or 1. +** +** If P5 is positive and the jump is taken, then event counter +** number P5-1 in the prepared statement is incremented. +** +** See also: Prev +*/ +/* Opcode: Prev P1 P2 P3 * P5 +** +** Back up cursor P1 so that it points to the previous key/data pair in its +** table or index. If there is no previous key/value pairs then fall through +** to the following instruction. But if the cursor backup was successful, +** jump immediately to P2. +** +** +** The Prev opcode is only valid following an SeekLT, SeekLE, or +** OP_Last opcode used to position the cursor. Prev is not allowed +** to follow SeekGT, SeekGE, or OP_Rewind. +** +** The P1 cursor must be for a real table, not a pseudo-table. If P1 is +** not open then the behavior is undefined. +** +** The P3 value is a hint to the btree implementation. If P3==1, that +** means P1 is an SQL index and that this instruction could have been +** omitted if that index had been unique. P3 is usually 0. P3 is +** always either 0 or 1. +** +** If P5 is positive and the jump is taken, then event counter +** number P5-1 in the prepared statement is incremented. +*/ +/* Opcode: SorterNext P1 P2 * * P5 +** +** This opcode works just like OP_Next except that P1 must be a +** sorter object for which the OP_SorterSort opcode has been +** invoked. This opcode advances the cursor to the next sorted +** record, or jumps to P2 if there are no more sorted records. +*/ +case OP_SorterNext: { /* jump */ + VdbeCursor *pC; + + pC = p->apCsr[pOp->p1]; + assert( isSorter(pC) ); + rc = sqlite3VdbeSorterNext(db, pC); + goto next_tail; + +case OP_Prev: /* jump, ncycle */ + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( pOp->p5==0 + || pOp->p5==SQLITE_STMTSTATUS_FULLSCAN_STEP + || pOp->p5==SQLITE_STMTSTATUS_AUTOINDEX); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->deferredMoveto==0 ); + assert( pC->eCurType==CURTYPE_BTREE ); + assert( pC->seekOp==OP_SeekLT || pC->seekOp==OP_SeekLE + || pC->seekOp==OP_Last || pC->seekOp==OP_IfNoHope + || pC->seekOp==OP_NullRow); + rc = sqlite3BtreePrevious(pC->uc.pCursor, pOp->p3); + goto next_tail; + +case OP_Next: /* jump, ncycle */ + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( pOp->p5==0 + || pOp->p5==SQLITE_STMTSTATUS_FULLSCAN_STEP + || pOp->p5==SQLITE_STMTSTATUS_AUTOINDEX); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->deferredMoveto==0 ); + assert( pC->eCurType==CURTYPE_BTREE ); + assert( pC->seekOp==OP_SeekGT || pC->seekOp==OP_SeekGE + || pC->seekOp==OP_Rewind || pC->seekOp==OP_Found + || pC->seekOp==OP_NullRow|| pC->seekOp==OP_SeekRowid + || pC->seekOp==OP_IfNoHope); + rc = sqlite3BtreeNext(pC->uc.pCursor, pOp->p3); + +next_tail: + pC->cacheStatus = CACHE_STALE; + VdbeBranchTaken(rc==SQLITE_OK,2); + if( rc==SQLITE_OK ){ + pC->nullRow = 0; + p->aCounter[pOp->p5]++; +#ifdef SQLITE_TEST + sqlite3_search_count++; +#endif + goto jump_to_p2_and_check_for_interrupt; + } + if( rc!=SQLITE_DONE ) goto abort_due_to_error; + rc = SQLITE_OK; + pC->nullRow = 1; + goto check_for_interrupt; +} + +/* Opcode: IdxInsert P1 P2 P3 P4 P5 +** Synopsis: key=r[P2] +** +** Register P2 holds an SQL index key made using the +** MakeRecord instructions. This opcode writes that key +** into the index P1. Data for the entry is nil. +** +** If P4 is not zero, then it is the number of values in the unpacked +** key of reg(P2). In that case, P3 is the index of the first register +** for the unpacked key. The availability of the unpacked key can sometimes +** be an optimization. +** +** If P5 has the OPFLAG_APPEND bit set, that is a hint to the b-tree layer +** that this insert is likely to be an append. +** +** If P5 has the OPFLAG_NCHANGE bit set, then the change counter is +** incremented by this instruction. If the OPFLAG_NCHANGE bit is clear, +** then the change counter is unchanged. +** +** If the OPFLAG_USESEEKRESULT flag of P5 is set, the implementation might +** run faster by avoiding an unnecessary seek on cursor P1. However, +** the OPFLAG_USESEEKRESULT flag must only be set if there have been no prior +** seeks on the cursor or if the most recent seek used a key equivalent +** to P2. +** +** This instruction only works for indices. The equivalent instruction +** for tables is OP_Insert. +*/ +case OP_IdxInsert: { /* in2 */ + VdbeCursor *pC; + BtreePayload x; + + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + sqlite3VdbeIncrWriteCounter(p, pC); + assert( pC!=0 ); + assert( !isSorter(pC) ); + pIn2 = &aMem[pOp->p2]; + assert( (pIn2->flags & MEM_Blob) || (pOp->p5 & OPFLAG_PREFORMAT) ); + if( pOp->p5 & OPFLAG_NCHANGE ) p->nChange++; + assert( pC->eCurType==CURTYPE_BTREE ); + assert( pC->isTable==0 ); + rc = ExpandBlob(pIn2); + if( rc ) goto abort_due_to_error; + x.nKey = pIn2->n; + x.pKey = pIn2->z; + x.aMem = aMem + pOp->p3; + x.nMem = (u16)pOp->p4.i; + rc = sqlite3BtreeInsert(pC->uc.pCursor, &x, + (pOp->p5 & (OPFLAG_APPEND|OPFLAG_SAVEPOSITION|OPFLAG_PREFORMAT)), + ((pOp->p5 & OPFLAG_USESEEKRESULT) ? pC->seekResult : 0) + ); + assert( pC->deferredMoveto==0 ); + pC->cacheStatus = CACHE_STALE; + if( rc) goto abort_due_to_error; + break; +} + +/* Opcode: SorterInsert P1 P2 * * * +** Synopsis: key=r[P2] +** +** Register P2 holds an SQL index key made using the +** MakeRecord instructions. This opcode writes that key +** into the sorter P1. Data for the entry is nil. +*/ +case OP_SorterInsert: { /* in2 */ + VdbeCursor *pC; + + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + sqlite3VdbeIncrWriteCounter(p, pC); + assert( pC!=0 ); + assert( isSorter(pC) ); + pIn2 = &aMem[pOp->p2]; + assert( pIn2->flags & MEM_Blob ); + assert( pC->isTable==0 ); + rc = ExpandBlob(pIn2); + if( rc ) goto abort_due_to_error; + rc = sqlite3VdbeSorterWrite(pC, pIn2); + if( rc) goto abort_due_to_error; + break; +} + +/* Opcode: IdxDelete P1 P2 P3 * P5 +** Synopsis: key=r[P2@P3] +** +** The content of P3 registers starting at register P2 form +** an unpacked index key. This opcode removes that entry from the +** index opened by cursor P1. +** +** If P5 is not zero, then raise an SQLITE_CORRUPT_INDEX error +** if no matching index entry is found. This happens when running +** an UPDATE or DELETE statement and the index entry to be updated +** or deleted is not found. For some uses of IdxDelete +** (example: the EXCEPT operator) it does not matter that no matching +** entry is found. For those cases, P5 is zero. Also, do not raise +** this (self-correcting and non-critical) error if in writable_schema mode. +*/ +case OP_IdxDelete: { + VdbeCursor *pC; + BtCursor *pCrsr; + int res; + UnpackedRecord r; + + assert( pOp->p3>0 ); + assert( pOp->p2>0 && pOp->p2+pOp->p3<=(p->nMem+1 - p->nCursor)+1 ); + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->eCurType==CURTYPE_BTREE ); + sqlite3VdbeIncrWriteCounter(p, pC); + pCrsr = pC->uc.pCursor; + assert( pCrsr!=0 ); + r.pKeyInfo = pC->pKeyInfo; + r.nField = (u16)pOp->p3; + r.default_rc = 0; + r.aMem = &aMem[pOp->p2]; + rc = sqlite3BtreeIndexMoveto(pCrsr, &r, &res); + if( rc ) goto abort_due_to_error; + if( res==0 ){ + rc = sqlite3BtreeDelete(pCrsr, BTREE_AUXDELETE); + if( rc ) goto abort_due_to_error; + }else if( pOp->p5 && !sqlite3WritableSchema(db) ){ + rc = sqlite3ReportError(SQLITE_CORRUPT_INDEX, __LINE__, "index corruption"); + goto abort_due_to_error; + } + assert( pC->deferredMoveto==0 ); + pC->cacheStatus = CACHE_STALE; + pC->seekResult = 0; + break; +} + +/* Opcode: DeferredSeek P1 * P3 P4 * +** Synopsis: Move P3 to P1.rowid if needed +** +** P1 is an open index cursor and P3 is a cursor on the corresponding +** table. This opcode does a deferred seek of the P3 table cursor +** to the row that corresponds to the current row of P1. +** +** This is a deferred seek. Nothing actually happens until +** the cursor is used to read a record. That way, if no reads +** occur, no unnecessary I/O happens. +** +** P4 may be an array of integers (type P4_INTARRAY) containing +** one entry for each column in the P3 table. If array entry a(i) +** is non-zero, then reading column a(i)-1 from cursor P3 is +** equivalent to performing the deferred seek and then reading column i +** from P1. This information is stored in P3 and used to redirect +** reads against P3 over to P1, thus possibly avoiding the need to +** seek and read cursor P3. +*/ +/* Opcode: IdxRowid P1 P2 * * * +** Synopsis: r[P2]=rowid +** +** Write into register P2 an integer which is the last entry in the record at +** the end of the index key pointed to by cursor P1. This integer should be +** the rowid of the table entry to which this index entry points. +** +** See also: Rowid, MakeRecord. +*/ +case OP_DeferredSeek: /* ncycle */ +case OP_IdxRowid: { /* out2, ncycle */ + VdbeCursor *pC; /* The P1 index cursor */ + VdbeCursor *pTabCur; /* The P2 table cursor (OP_DeferredSeek only) */ + i64 rowid; /* Rowid that P1 current points to */ + + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->eCurType==CURTYPE_BTREE || IsNullCursor(pC) ); + assert( pC->uc.pCursor!=0 ); + assert( pC->isTable==0 || IsNullCursor(pC) ); + assert( pC->deferredMoveto==0 ); + assert( !pC->nullRow || pOp->opcode==OP_IdxRowid ); + + /* The IdxRowid and Seek opcodes are combined because of the commonality + ** of sqlite3VdbeCursorRestore() and sqlite3VdbeIdxRowid(). */ + rc = sqlite3VdbeCursorRestore(pC); + + /* sqlite3VdbeCursorRestore() may fail if the cursor has been disturbed + ** since it was last positioned and an error (e.g. OOM or an IO error) + ** occurs while trying to reposition it. */ + if( rc!=SQLITE_OK ) goto abort_due_to_error; + + if( !pC->nullRow ){ + rowid = 0; /* Not needed. Only used to silence a warning. */ + rc = sqlite3VdbeIdxRowid(db, pC->uc.pCursor, &rowid); + if( rc!=SQLITE_OK ){ + goto abort_due_to_error; + } + if( pOp->opcode==OP_DeferredSeek ){ + assert( pOp->p3>=0 && pOp->p3nCursor ); + pTabCur = p->apCsr[pOp->p3]; + assert( pTabCur!=0 ); + assert( pTabCur->eCurType==CURTYPE_BTREE ); + assert( pTabCur->uc.pCursor!=0 ); + assert( pTabCur->isTable ); + pTabCur->nullRow = 0; + pTabCur->movetoTarget = rowid; + pTabCur->deferredMoveto = 1; + pTabCur->cacheStatus = CACHE_STALE; + assert( pOp->p4type==P4_INTARRAY || pOp->p4.ai==0 ); + assert( !pTabCur->isEphemeral ); + pTabCur->ub.aAltMap = pOp->p4.ai; + assert( !pC->isEphemeral ); + pTabCur->pAltCursor = pC; + }else{ + pOut = out2Prerelease(p, pOp); + pOut->u.i = rowid; + } + }else{ + assert( pOp->opcode==OP_IdxRowid ); + sqlite3VdbeMemSetNull(&aMem[pOp->p2]); + } + break; +} + +/* Opcode: FinishSeek P1 * * * * +** +** If cursor P1 was previously moved via OP_DeferredSeek, complete that +** seek operation now, without further delay. If the cursor seek has +** already occurred, this instruction is a no-op. +*/ +case OP_FinishSeek: { /* ncycle */ + VdbeCursor *pC; /* The P1 index cursor */ + + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + if( pC->deferredMoveto ){ + rc = sqlite3VdbeFinishMoveto(pC); + if( rc ) goto abort_due_to_error; + } + break; +} + +/* Opcode: IdxGE P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] +** +** The P4 register values beginning with P3 form an unpacked index +** key that omits the PRIMARY KEY. Compare this key value against the index +** that P1 is currently pointing to, ignoring the PRIMARY KEY or ROWID +** fields at the end. +** +** If the P1 index entry is greater than or equal to the key value +** then jump to P2. Otherwise fall through to the next instruction. +*/ +/* Opcode: IdxGT P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] +** +** The P4 register values beginning with P3 form an unpacked index +** key that omits the PRIMARY KEY. Compare this key value against the index +** that P1 is currently pointing to, ignoring the PRIMARY KEY or ROWID +** fields at the end. +** +** If the P1 index entry is greater than the key value +** then jump to P2. Otherwise fall through to the next instruction. +*/ +/* Opcode: IdxLT P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] +** +** The P4 register values beginning with P3 form an unpacked index +** key that omits the PRIMARY KEY or ROWID. Compare this key value against +** the index that P1 is currently pointing to, ignoring the PRIMARY KEY or +** ROWID on the P1 index. +** +** If the P1 index entry is less than the key value then jump to P2. +** Otherwise fall through to the next instruction. +*/ +/* Opcode: IdxLE P1 P2 P3 P4 * +** Synopsis: key=r[P3@P4] +** +** The P4 register values beginning with P3 form an unpacked index +** key that omits the PRIMARY KEY or ROWID. Compare this key value against +** the index that P1 is currently pointing to, ignoring the PRIMARY KEY or +** ROWID on the P1 index. +** +** If the P1 index entry is less than or equal to the key value then jump +** to P2. Otherwise fall through to the next instruction. +*/ +case OP_IdxLE: /* jump, ncycle */ +case OP_IdxGT: /* jump, ncycle */ +case OP_IdxLT: /* jump, ncycle */ +case OP_IdxGE: { /* jump, ncycle */ + VdbeCursor *pC; + int res; + UnpackedRecord r; + + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->isOrdered ); + assert( pC->eCurType==CURTYPE_BTREE ); + assert( pC->uc.pCursor!=0); + assert( pC->deferredMoveto==0 ); + assert( pOp->p4type==P4_INT32 ); + r.pKeyInfo = pC->pKeyInfo; + r.nField = (u16)pOp->p4.i; + if( pOp->opcodeopcode==OP_IdxLE || pOp->opcode==OP_IdxGT ); + r.default_rc = -1; + }else{ + assert( pOp->opcode==OP_IdxGE || pOp->opcode==OP_IdxLT ); + r.default_rc = 0; + } + r.aMem = &aMem[pOp->p3]; +#ifdef SQLITE_DEBUG + { + int i; + for(i=0; ip3+i, &aMem[pOp->p3+i]); + } + } +#endif + + /* Inlined version of sqlite3VdbeIdxKeyCompare() */ + { + i64 nCellKey = 0; + BtCursor *pCur; + Mem m; + + assert( pC->eCurType==CURTYPE_BTREE ); + pCur = pC->uc.pCursor; + assert( sqlite3BtreeCursorIsValid(pCur) ); + nCellKey = sqlite3BtreePayloadSize(pCur); + /* nCellKey will always be between 0 and 0xffffffff because of the way + ** that btreeParseCellPtr() and sqlite3GetVarint32() are implemented */ + if( nCellKey<=0 || nCellKey>0x7fffffff ){ + rc = SQLITE_CORRUPT_BKPT; + goto abort_due_to_error; + } + sqlite3VdbeMemInit(&m, db, 0); + rc = sqlite3VdbeMemFromBtreeZeroOffset(pCur, (u32)nCellKey, &m); + if( rc ) goto abort_due_to_error; + res = sqlite3VdbeRecordCompareWithSkip(m.n, m.z, &r, 0); + sqlite3VdbeMemReleaseMalloc(&m); + } + /* End of inlined sqlite3VdbeIdxKeyCompare() */ + + assert( (OP_IdxLE&1)==(OP_IdxLT&1) && (OP_IdxGE&1)==(OP_IdxGT&1) ); + if( (pOp->opcode&1)==(OP_IdxLT&1) ){ + assert( pOp->opcode==OP_IdxLE || pOp->opcode==OP_IdxLT ); + res = -res; + }else{ + assert( pOp->opcode==OP_IdxGE || pOp->opcode==OP_IdxGT ); + res++; + } + VdbeBranchTaken(res>0,2); + assert( rc==SQLITE_OK ); + if( res>0 ) goto jump_to_p2; + break; +} + +/* Opcode: Destroy P1 P2 P3 * * +** +** Delete an entire database table or index whose root page in the database +** file is given by P1. +** +** The table being destroyed is in the main database file if P3==0. If +** P3==1 then the table to be destroyed is in the auxiliary database file +** that is used to store tables create using CREATE TEMPORARY TABLE. +** +** If AUTOVACUUM is enabled then it is possible that another root page +** might be moved into the newly deleted root page in order to keep all +** root pages contiguous at the beginning of the database. The former +** value of the root page that moved - its value before the move occurred - +** is stored in register P2. If no page movement was required (because the +** table being dropped was already the last one in the database) then a +** zero is stored in register P2. If AUTOVACUUM is disabled then a zero +** is stored in register P2. +** +** This opcode throws an error if there are any active reader VMs when +** it is invoked. This is done to avoid the difficulty associated with +** updating existing cursors when a root page is moved in an AUTOVACUUM +** database. This error is thrown even if the database is not an AUTOVACUUM +** db in order to avoid introducing an incompatibility between autovacuum +** and non-autovacuum modes. +** +** See also: Clear +*/ +case OP_Destroy: { /* out2 */ + int iMoved; + int iDb; + + sqlite3VdbeIncrWriteCounter(p, 0); + assert( p->readOnly==0 ); + assert( pOp->p1>1 ); + pOut = out2Prerelease(p, pOp); + pOut->flags = MEM_Null; + if( db->nVdbeRead > db->nVDestroy+1 ){ + rc = SQLITE_LOCKED; + p->errorAction = OE_Abort; + goto abort_due_to_error; + }else{ + iDb = pOp->p3; + assert( DbMaskTest(p->btreeMask, iDb) ); + iMoved = 0; /* Not needed. Only to silence a warning. */ + rc = sqlite3BtreeDropTable(db->aDb[iDb].pBt, pOp->p1, &iMoved); + pOut->flags = MEM_Int; + pOut->u.i = iMoved; + if( rc ) goto abort_due_to_error; +#ifndef SQLITE_OMIT_AUTOVACUUM + if( iMoved!=0 ){ + sqlite3RootPageMoved(db, iDb, iMoved, pOp->p1); + /* All OP_Destroy operations occur on the same btree */ + assert( resetSchemaOnFault==0 || resetSchemaOnFault==iDb+1 ); + resetSchemaOnFault = iDb+1; + } +#endif + } + break; +} + +/* Opcode: Clear P1 P2 P3 +** +** Delete all contents of the database table or index whose root page +** in the database file is given by P1. But, unlike Destroy, do not +** remove the table or index from the database file. +** +** The table being cleared is in the main database file if P2==0. If +** P2==1 then the table to be cleared is in the auxiliary database file +** that is used to store tables create using CREATE TEMPORARY TABLE. +** +** If the P3 value is non-zero, then the row change count is incremented +** by the number of rows in the table being cleared. If P3 is greater +** than zero, then the value stored in register P3 is also incremented +** by the number of rows in the table being cleared. +** +** See also: Destroy +*/ +case OP_Clear: { + i64 nChange; + + sqlite3VdbeIncrWriteCounter(p, 0); + nChange = 0; + assert( p->readOnly==0 ); + assert( DbMaskTest(p->btreeMask, pOp->p2) ); + rc = sqlite3BtreeClearTable(db->aDb[pOp->p2].pBt, (u32)pOp->p1, &nChange); + if( pOp->p3 ){ + p->nChange += nChange; + if( pOp->p3>0 ){ + assert( memIsValid(&aMem[pOp->p3]) ); + memAboutToChange(p, &aMem[pOp->p3]); + aMem[pOp->p3].u.i += nChange; + } + } + if( rc ) goto abort_due_to_error; + break; +} + +/* Opcode: ResetSorter P1 * * * * +** +** Delete all contents from the ephemeral table or sorter +** that is open on cursor P1. +** +** This opcode only works for cursors used for sorting and +** opened with OP_OpenEphemeral or OP_SorterOpen. +*/ +case OP_ResetSorter: { + VdbeCursor *pC; + + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + if( isSorter(pC) ){ + sqlite3VdbeSorterReset(db, pC->uc.pSorter); + }else{ + assert( pC->eCurType==CURTYPE_BTREE ); + assert( pC->isEphemeral ); + rc = sqlite3BtreeClearTableOfCursor(pC->uc.pCursor); + if( rc ) goto abort_due_to_error; + } + break; +} + +/* Opcode: CreateBtree P1 P2 P3 * * +** Synopsis: r[P2]=root iDb=P1 flags=P3 +** +** Allocate a new b-tree in the main database file if P1==0 or in the +** TEMP database file if P1==1 or in an attached database if +** P1>1. The P3 argument must be 1 (BTREE_INTKEY) for a rowid table +** it must be 2 (BTREE_BLOBKEY) for an index or WITHOUT ROWID table. +** The root page number of the new b-tree is stored in register P2. +*/ +case OP_CreateBtree: { /* out2 */ + Pgno pgno; + Db *pDb; + + sqlite3VdbeIncrWriteCounter(p, 0); + pOut = out2Prerelease(p, pOp); + pgno = 0; + assert( pOp->p3==BTREE_INTKEY || pOp->p3==BTREE_BLOBKEY ); + assert( pOp->p1>=0 && pOp->p1nDb ); + assert( DbMaskTest(p->btreeMask, pOp->p1) ); + assert( p->readOnly==0 ); + pDb = &db->aDb[pOp->p1]; + assert( pDb->pBt!=0 ); + rc = sqlite3BtreeCreateTable(pDb->pBt, &pgno, pOp->p3); + if( rc ) goto abort_due_to_error; + pOut->u.i = pgno; + break; +} + +/* Opcode: SqlExec P1 P2 * P4 * +** +** Run the SQL statement or statements specified in the P4 string. +** +** The P1 parameter is a bitmask of options: +** +** 0x0001 Disable Auth and Trace callbacks while the statements +** in P4 are running. +** +** 0x0002 Set db->nAnalysisLimit to P2 while the statements in +** P4 are running. +** +*/ +case OP_SqlExec: { + char *zErr; +#ifndef SQLITE_OMIT_AUTHORIZATION + sqlite3_xauth xAuth; +#endif + u8 mTrace; + int savedAnalysisLimit; + + sqlite3VdbeIncrWriteCounter(p, 0); + db->nSqlExec++; + zErr = 0; +#ifndef SQLITE_OMIT_AUTHORIZATION + xAuth = db->xAuth; +#endif + mTrace = db->mTrace; + savedAnalysisLimit = db->nAnalysisLimit; + if( pOp->p1 & 0x0001 ){ +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = 0; +#endif + db->mTrace = 0; + } + if( pOp->p1 & 0x0002 ){ + db->nAnalysisLimit = pOp->p2; + } + rc = sqlite3_exec(db, pOp->p4.z, 0, 0, &zErr); + db->nSqlExec--; +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = xAuth; +#endif + db->mTrace = mTrace; + db->nAnalysisLimit = savedAnalysisLimit; + if( zErr || rc ){ + sqlite3VdbeError(p, "%s", zErr); + sqlite3_free(zErr); + if( rc==SQLITE_NOMEM ) goto no_mem; + goto abort_due_to_error; + } + break; +} + +/* Opcode: ParseSchema P1 * * P4 * +** +** Read and parse all entries from the schema table of database P1 +** that match the WHERE clause P4. If P4 is a NULL pointer, then the +** entire schema for P1 is reparsed. +** +** This opcode invokes the parser to create a new virtual machine, +** then runs the new virtual machine. It is thus a re-entrant opcode. +*/ +case OP_ParseSchema: { + int iDb; + const char *zSchema; + char *zSql; + InitData initData; + + /* Any prepared statement that invokes this opcode will hold mutexes + ** on every btree. This is a prerequisite for invoking + ** sqlite3InitCallback(). + */ +#ifdef SQLITE_DEBUG + for(iDb=0; iDbnDb; iDb++){ + assert( iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[iDb].pBt) ); + } +#endif + + iDb = pOp->p1; + assert( iDb>=0 && iDbnDb ); + assert( DbHasProperty(db, iDb, DB_SchemaLoaded) + || db->mallocFailed + || (CORRUPT_DB && (db->flags & SQLITE_NoSchemaError)!=0) ); + +#ifndef SQLITE_OMIT_ALTERTABLE + if( pOp->p4.z==0 ){ + sqlite3SchemaClear(db->aDb[iDb].pSchema); + db->mDbFlags &= ~DBFLAG_SchemaKnownOk; + rc = sqlite3InitOne(db, iDb, &p->zErrMsg, pOp->p5); + db->mDbFlags |= DBFLAG_SchemaChange; + p->expired = 0; + }else +#endif + { + zSchema = LEGACY_SCHEMA_TABLE; + initData.db = db; + initData.iDb = iDb; + initData.pzErrMsg = &p->zErrMsg; + initData.mInitFlags = 0; + initData.mxPage = sqlite3BtreeLastPage(db->aDb[iDb].pBt); + zSql = sqlite3MPrintf(db, + "SELECT*FROM\"%w\".%s WHERE %s ORDER BY rowid", + db->aDb[iDb].zDbSName, zSchema, pOp->p4.z); + if( zSql==0 ){ + rc = SQLITE_NOMEM_BKPT; + }else{ + assert( db->init.busy==0 ); + db->init.busy = 1; + initData.rc = SQLITE_OK; + initData.nInitRow = 0; + assert( !db->mallocFailed ); + rc = sqlite3_exec(db, zSql, sqlite3InitCallback, &initData, 0); + if( rc==SQLITE_OK ) rc = initData.rc; + if( rc==SQLITE_OK && initData.nInitRow==0 ){ + /* The OP_ParseSchema opcode with a non-NULL P4 argument should parse + ** at least one SQL statement. Any less than that indicates that + ** the sqlite_schema table is corrupt. */ + rc = SQLITE_CORRUPT_BKPT; + } + sqlite3DbFreeNN(db, zSql); + db->init.busy = 0; + } + } + if( rc ){ + sqlite3ResetAllSchemasOfConnection(db); + if( rc==SQLITE_NOMEM ){ + goto no_mem; + } + goto abort_due_to_error; + } + break; +} + +#if !defined(SQLITE_OMIT_ANALYZE) +/* Opcode: LoadAnalysis P1 * * * * +** +** Read the sqlite_stat1 table for database P1 and load the content +** of that table into the internal index hash table. This will cause +** the analysis to be used when preparing all subsequent queries. +*/ +case OP_LoadAnalysis: { + assert( pOp->p1>=0 && pOp->p1nDb ); + rc = sqlite3AnalysisLoad(db, pOp->p1); + if( rc ) goto abort_due_to_error; + break; +} +#endif /* !defined(SQLITE_OMIT_ANALYZE) */ + +/* Opcode: DropTable P1 * * P4 * +** +** Remove the internal (in-memory) data structures that describe +** the table named P4 in database P1. This is called after a table +** is dropped from disk (using the Destroy opcode) in order to keep +** the internal representation of the +** schema consistent with what is on disk. +*/ +case OP_DropTable: { + sqlite3VdbeIncrWriteCounter(p, 0); + sqlite3UnlinkAndDeleteTable(db, pOp->p1, pOp->p4.z); + break; +} + +/* Opcode: DropIndex P1 * * P4 * +** +** Remove the internal (in-memory) data structures that describe +** the index named P4 in database P1. This is called after an index +** is dropped from disk (using the Destroy opcode) +** in order to keep the internal representation of the +** schema consistent with what is on disk. +*/ +case OP_DropIndex: { + sqlite3VdbeIncrWriteCounter(p, 0); + sqlite3UnlinkAndDeleteIndex(db, pOp->p1, pOp->p4.z); + break; +} + +/* Opcode: DropTrigger P1 * * P4 * +** +** Remove the internal (in-memory) data structures that describe +** the trigger named P4 in database P1. This is called after a trigger +** is dropped from disk (using the Destroy opcode) in order to keep +** the internal representation of the +** schema consistent with what is on disk. +*/ +case OP_DropTrigger: { + sqlite3VdbeIncrWriteCounter(p, 0); + sqlite3UnlinkAndDeleteTrigger(db, pOp->p1, pOp->p4.z); + break; +} + + +#ifndef SQLITE_OMIT_INTEGRITY_CHECK +/* Opcode: IntegrityCk P1 P2 P3 P4 P5 +** +** Do an analysis of the currently open database. Store in +** register (P1+1) the text of an error message describing any problems. +** If no problems are found, store a NULL in register (P1+1). +** +** The register (P1) contains one less than the maximum number of allowed +** errors. At most reg(P1) errors will be reported. +** In other words, the analysis stops as soon as reg(P1) errors are +** seen. Reg(P1) is updated with the number of errors remaining. +** +** The root page numbers of all tables in the database are integers +** stored in P4_INTARRAY argument. +** +** If P5 is not zero, the check is done on the auxiliary database +** file, not the main database file. +** +** This opcode is used to implement the integrity_check pragma. +*/ +case OP_IntegrityCk: { + int nRoot; /* Number of tables to check. (Number of root pages.) */ + Pgno *aRoot; /* Array of rootpage numbers for tables to be checked */ + int nErr; /* Number of errors reported */ + char *z; /* Text of the error report */ + Mem *pnErr; /* Register keeping track of errors remaining */ + + assert( p->bIsReader ); + assert( pOp->p4type==P4_INTARRAY ); + nRoot = pOp->p2; + aRoot = pOp->p4.ai; + assert( nRoot>0 ); + assert( aRoot!=0 ); + assert( aRoot[0]==(Pgno)nRoot ); + assert( pOp->p1>0 && (pOp->p1+1)<=(p->nMem+1 - p->nCursor) ); + pnErr = &aMem[pOp->p1]; + assert( (pnErr->flags & MEM_Int)!=0 ); + assert( (pnErr->flags & (MEM_Str|MEM_Blob))==0 ); + pIn1 = &aMem[pOp->p1+1]; + assert( pOp->p5nDb ); + assert( DbMaskTest(p->btreeMask, pOp->p5) ); + rc = sqlite3BtreeIntegrityCheck(db, db->aDb[pOp->p5].pBt, &aRoot[1], + &aMem[pOp->p3], nRoot, (int)pnErr->u.i+1, &nErr, &z); + sqlite3VdbeMemSetNull(pIn1); + if( nErr==0 ){ + assert( z==0 ); + }else if( rc ){ + sqlite3_free(z); + goto abort_due_to_error; + }else{ + pnErr->u.i -= nErr-1; + sqlite3VdbeMemSetStr(pIn1, z, -1, SQLITE_UTF8, sqlite3_free); + } + UPDATE_MAX_BLOBSIZE(pIn1); + sqlite3VdbeChangeEncoding(pIn1, encoding); + goto check_for_interrupt; +} +#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ + +/* Opcode: RowSetAdd P1 P2 * * * +** Synopsis: rowset(P1)=r[P2] +** +** Insert the integer value held by register P2 into a RowSet object +** held in register P1. +** +** An assertion fails if P2 is not an integer. +*/ +case OP_RowSetAdd: { /* in1, in2 */ + pIn1 = &aMem[pOp->p1]; + pIn2 = &aMem[pOp->p2]; + assert( (pIn2->flags & MEM_Int)!=0 ); + if( (pIn1->flags & MEM_Blob)==0 ){ + if( sqlite3VdbeMemSetRowSet(pIn1) ) goto no_mem; + } + assert( sqlite3VdbeMemIsRowSet(pIn1) ); + sqlite3RowSetInsert((RowSet*)pIn1->z, pIn2->u.i); + break; +} + +/* Opcode: RowSetRead P1 P2 P3 * * +** Synopsis: r[P3]=rowset(P1) +** +** Extract the smallest value from the RowSet object in P1 +** and put that value into register P3. +** Or, if RowSet object P1 is initially empty, leave P3 +** unchanged and jump to instruction P2. +*/ +case OP_RowSetRead: { /* jump, in1, out3 */ + i64 val; + + pIn1 = &aMem[pOp->p1]; + assert( (pIn1->flags & MEM_Blob)==0 || sqlite3VdbeMemIsRowSet(pIn1) ); + if( (pIn1->flags & MEM_Blob)==0 + || sqlite3RowSetNext((RowSet*)pIn1->z, &val)==0 + ){ + /* The boolean index is empty */ + sqlite3VdbeMemSetNull(pIn1); + VdbeBranchTaken(1,2); + goto jump_to_p2_and_check_for_interrupt; + }else{ + /* A value was pulled from the index */ + VdbeBranchTaken(0,2); + sqlite3VdbeMemSetInt64(&aMem[pOp->p3], val); + } + goto check_for_interrupt; +} + +/* Opcode: RowSetTest P1 P2 P3 P4 +** Synopsis: if r[P3] in rowset(P1) goto P2 +** +** Register P3 is assumed to hold a 64-bit integer value. If register P1 +** contains a RowSet object and that RowSet object contains +** the value held in P3, jump to register P2. Otherwise, insert the +** integer in P3 into the RowSet and continue on to the +** next opcode. +** +** The RowSet object is optimized for the case where sets of integers +** are inserted in distinct phases, which each set contains no duplicates. +** Each set is identified by a unique P4 value. The first set +** must have P4==0, the final set must have P4==-1, and for all other sets +** must have P4>0. +** +** This allows optimizations: (a) when P4==0 there is no need to test +** the RowSet object for P3, as it is guaranteed not to contain it, +** (b) when P4==-1 there is no need to insert the value, as it will +** never be tested for, and (c) when a value that is part of set X is +** inserted, there is no need to search to see if the same value was +** previously inserted as part of set X (only if it was previously +** inserted as part of some other set). +*/ +case OP_RowSetTest: { /* jump, in1, in3 */ + int iSet; + int exists; + + pIn1 = &aMem[pOp->p1]; + pIn3 = &aMem[pOp->p3]; + iSet = pOp->p4.i; + assert( pIn3->flags&MEM_Int ); + + /* If there is anything other than a rowset object in memory cell P1, + ** delete it now and initialize P1 with an empty rowset + */ + if( (pIn1->flags & MEM_Blob)==0 ){ + if( sqlite3VdbeMemSetRowSet(pIn1) ) goto no_mem; + } + assert( sqlite3VdbeMemIsRowSet(pIn1) ); + assert( pOp->p4type==P4_INT32 ); + assert( iSet==-1 || iSet>=0 ); + if( iSet ){ + exists = sqlite3RowSetTest((RowSet*)pIn1->z, iSet, pIn3->u.i); + VdbeBranchTaken(exists!=0,2); + if( exists ) goto jump_to_p2; + } + if( iSet>=0 ){ + sqlite3RowSetInsert((RowSet*)pIn1->z, pIn3->u.i); + } + break; +} + + +#ifndef SQLITE_OMIT_TRIGGER + +/* Opcode: Program P1 P2 P3 P4 P5 +** +** Execute the trigger program passed as P4 (type P4_SUBPROGRAM). +** +** P1 contains the address of the memory cell that contains the first memory +** cell in an array of values used as arguments to the sub-program. P2 +** contains the address to jump to if the sub-program throws an IGNORE +** exception using the RAISE() function. P2 might be zero, if there is +** no possibility that an IGNORE exception will be raised. +** Register P3 contains the address +** of a memory cell in this (the parent) VM that is used to allocate the +** memory required by the sub-vdbe at runtime. +** +** P4 is a pointer to the VM containing the trigger program. +** +** If P5 is non-zero, then recursive program invocation is enabled. +*/ +case OP_Program: { /* jump0 */ + int nMem; /* Number of memory registers for sub-program */ + i64 nByte; /* Bytes of runtime space required for sub-program */ + Mem *pRt; /* Register to allocate runtime space */ + Mem *pMem; /* Used to iterate through memory cells */ + Mem *pEnd; /* Last memory cell in new array */ + VdbeFrame *pFrame; /* New vdbe frame to execute in */ + SubProgram *pProgram; /* Sub-program to execute */ + void *t; /* Token identifying trigger */ + + pProgram = pOp->p4.pProgram; + pRt = &aMem[pOp->p3]; + assert( pProgram->nOp>0 ); + + /* If the p5 flag is clear, then recursive invocation of triggers is + ** disabled for backwards compatibility (p5 is set if this sub-program + ** is really a trigger, not a foreign key action, and the flag set + ** and cleared by the "PRAGMA recursive_triggers" command is clear). + ** + ** It is recursive invocation of triggers, at the SQL level, that is + ** disabled. In some cases a single trigger may generate more than one + ** SubProgram (if the trigger may be executed with more than one different + ** ON CONFLICT algorithm). SubProgram structures associated with a + ** single trigger all have the same value for the SubProgram.token + ** variable. */ + if( pOp->p5 ){ + t = pProgram->token; + for(pFrame=p->pFrame; pFrame && pFrame->token!=t; pFrame=pFrame->pParent); + if( pFrame ) break; + } + + if( p->nFrame>=db->aLimit[SQLITE_LIMIT_TRIGGER_DEPTH] ){ + rc = SQLITE_ERROR; + sqlite3VdbeError(p, "too many levels of trigger recursion"); + goto abort_due_to_error; + } + + /* Register pRt is used to store the memory required to save the state + ** of the current program, and the memory required at runtime to execute + ** the trigger program. If this trigger has been fired before, then pRt + ** is already allocated. Otherwise, it must be initialized. */ + if( (pRt->flags&MEM_Blob)==0 ){ + /* SubProgram.nMem is set to the number of memory cells used by the + ** program stored in SubProgram.aOp. As well as these, one memory + ** cell is required for each cursor used by the program. Set local + ** variable nMem (and later, VdbeFrame.nChildMem) to this value. + */ + nMem = pProgram->nMem + pProgram->nCsr; + assert( nMem>0 ); + if( pProgram->nCsr==0 ) nMem++; + nByte = ROUND8(sizeof(VdbeFrame)) + + nMem * sizeof(Mem) + + pProgram->nCsr * sizeof(VdbeCursor*) + + (7 + (i64)pProgram->nOp)/8; + pFrame = sqlite3DbMallocZero(db, nByte); + if( !pFrame ){ + goto no_mem; + } + sqlite3VdbeMemRelease(pRt); + pRt->flags = MEM_Blob|MEM_Dyn; + pRt->z = (char*)pFrame; + pRt->n = (int)nByte; + pRt->xDel = sqlite3VdbeFrameMemDel; + + pFrame->v = p; + pFrame->nChildMem = nMem; + pFrame->nChildCsr = pProgram->nCsr; + pFrame->pc = (int)(pOp - aOp); + pFrame->aMem = p->aMem; + pFrame->nMem = p->nMem; + pFrame->apCsr = p->apCsr; + pFrame->nCursor = p->nCursor; + pFrame->aOp = p->aOp; + pFrame->nOp = p->nOp; + pFrame->token = pProgram->token; +#ifdef SQLITE_DEBUG + pFrame->iFrameMagic = SQLITE_FRAME_MAGIC; +#endif + + pEnd = &VdbeFrameMem(pFrame)[pFrame->nChildMem]; + for(pMem=VdbeFrameMem(pFrame); pMem!=pEnd; pMem++){ + pMem->flags = MEM_Undefined; + pMem->db = db; + } + }else{ + pFrame = (VdbeFrame*)pRt->z; + assert( pRt->xDel==sqlite3VdbeFrameMemDel ); + assert( pProgram->nMem+pProgram->nCsr==pFrame->nChildMem + || (pProgram->nCsr==0 && pProgram->nMem+1==pFrame->nChildMem) ); + assert( pProgram->nCsr==pFrame->nChildCsr ); + assert( (int)(pOp - aOp)==pFrame->pc ); + } + + p->nFrame++; + pFrame->pParent = p->pFrame; + pFrame->lastRowid = db->lastRowid; + pFrame->nChange = p->nChange; + pFrame->nDbChange = p->db->nChange; + assert( pFrame->pAuxData==0 ); + pFrame->pAuxData = p->pAuxData; + p->pAuxData = 0; + p->nChange = 0; + p->pFrame = pFrame; + p->aMem = aMem = VdbeFrameMem(pFrame); + p->nMem = pFrame->nChildMem; + p->nCursor = (u16)pFrame->nChildCsr; + p->apCsr = (VdbeCursor **)&aMem[p->nMem]; + pFrame->aOnce = (u8*)&p->apCsr[pProgram->nCsr]; + memset(pFrame->aOnce, 0, (pProgram->nOp + 7)/8); + p->aOp = aOp = pProgram->aOp; + p->nOp = pProgram->nOp; +#ifdef SQLITE_DEBUG + /* Verify that second and subsequent executions of the same trigger do not + ** try to reuse register values from the first use. */ + { + int i; + for(i=0; inMem; i++){ + aMem[i].pScopyFrom = 0; /* Prevent false-positive AboutToChange() errs */ + MemSetTypeFlag(&aMem[i], MEM_Undefined); /* Fault if this reg is reused */ + } + } +#endif + pOp = &aOp[-1]; + goto check_for_interrupt; +} + +/* Opcode: Param P1 P2 * * * +** +** This opcode is only ever present in sub-programs called via the +** OP_Program instruction. Copy a value currently stored in a memory +** cell of the calling (parent) frame to cell P2 in the current frames +** address space. This is used by trigger programs to access the new.* +** and old.* values. +** +** The address of the cell in the parent frame is determined by adding +** the value of the P1 argument to the value of the P1 argument to the +** calling OP_Program instruction. +*/ +case OP_Param: { /* out2 */ + VdbeFrame *pFrame; + Mem *pIn; + pOut = out2Prerelease(p, pOp); + pFrame = p->pFrame; + pIn = &pFrame->aMem[pOp->p1 + pFrame->aOp[pFrame->pc].p1]; + sqlite3VdbeMemShallowCopy(pOut, pIn, MEM_Ephem); + break; +} + +#endif /* #ifndef SQLITE_OMIT_TRIGGER */ + +#ifndef SQLITE_OMIT_FOREIGN_KEY +/* Opcode: FkCounter P1 P2 * * * +** Synopsis: fkctr[P1]+=P2 +** +** Increment a "constraint counter" by P2 (P2 may be negative or positive). +** If P1 is non-zero, the database constraint counter is incremented +** (deferred foreign key constraints). Otherwise, if P1 is zero, the +** statement counter is incremented (immediate foreign key constraints). +*/ +case OP_FkCounter: { + if( pOp->p1 ){ + db->nDeferredCons += pOp->p2; + }else{ + if( db->flags & SQLITE_DeferFKs ){ + db->nDeferredImmCons += pOp->p2; + }else{ + p->nFkConstraint += pOp->p2; + } + } + break; +} + +/* Opcode: FkIfZero P1 P2 * * * +** Synopsis: if fkctr[P1]==0 goto P2 +** +** This opcode tests if a foreign key constraint-counter is currently zero. +** If so, jump to instruction P2. Otherwise, fall through to the next +** instruction. +** +** If P1 is non-zero, then the jump is taken if the database constraint-counter +** is zero (the one that counts deferred constraint violations). If P1 is +** zero, the jump is taken if the statement constraint-counter is zero +** (immediate foreign key constraint violations). +*/ +case OP_FkIfZero: { /* jump */ + if( pOp->p1 ){ + VdbeBranchTaken(db->nDeferredCons==0 && db->nDeferredImmCons==0, 2); + if( db->nDeferredCons==0 && db->nDeferredImmCons==0 ) goto jump_to_p2; + }else{ + VdbeBranchTaken(p->nFkConstraint==0 && db->nDeferredImmCons==0, 2); + if( p->nFkConstraint==0 && db->nDeferredImmCons==0 ) goto jump_to_p2; + } + break; +} +#endif /* #ifndef SQLITE_OMIT_FOREIGN_KEY */ + +#ifndef SQLITE_OMIT_AUTOINCREMENT +/* Opcode: MemMax P1 P2 * * * +** Synopsis: r[P1]=max(r[P1],r[P2]) +** +** P1 is a register in the root frame of this VM (the root frame is +** different from the current frame if this instruction is being executed +** within a sub-program). Set the value of register P1 to the maximum of +** its current value and the value in register P2. +** +** This instruction throws an error if the memory cell is not initially +** an integer. +*/ +case OP_MemMax: { /* in2 */ + VdbeFrame *pFrame; + if( p->pFrame ){ + for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent); + pIn1 = &pFrame->aMem[pOp->p1]; + }else{ + pIn1 = &aMem[pOp->p1]; + } + assert( memIsValid(pIn1) ); + sqlite3VdbeMemIntegerify(pIn1); + pIn2 = &aMem[pOp->p2]; + sqlite3VdbeMemIntegerify(pIn2); + if( pIn1->u.iu.i){ + pIn1->u.i = pIn2->u.i; + } + break; +} +#endif /* SQLITE_OMIT_AUTOINCREMENT */ + +/* Opcode: IfPos P1 P2 P3 * * +** Synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 +** +** Register P1 must contain an integer. +** If the value of register P1 is 1 or greater, subtract P3 from the +** value in P1 and jump to P2. +** +** If the initial value of register P1 is less than 1, then the +** value is unchanged and control passes through to the next instruction. +*/ +case OP_IfPos: { /* jump, in1 */ + pIn1 = &aMem[pOp->p1]; + assert( pIn1->flags&MEM_Int ); + VdbeBranchTaken( pIn1->u.i>0, 2); + if( pIn1->u.i>0 ){ + pIn1->u.i -= pOp->p3; + goto jump_to_p2; + } + break; +} + +/* Opcode: OffsetLimit P1 P2 P3 * * +** Synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1) +** +** This opcode performs a commonly used computation associated with +** LIMIT and OFFSET processing. r[P1] holds the limit counter. r[P3] +** holds the offset counter. The opcode computes the combined value +** of the LIMIT and OFFSET and stores that value in r[P2]. The r[P2] +** value computed is the total number of rows that will need to be +** visited in order to complete the query. +** +** If r[P3] is zero or negative, that means there is no OFFSET +** and r[P2] is set to be the value of the LIMIT, r[P1]. +** +** if r[P1] is zero or negative, that means there is no LIMIT +** and r[P2] is set to -1. +** +** Otherwise, r[P2] is set to the sum of r[P1] and r[P3]. +*/ +case OP_OffsetLimit: { /* in1, out2, in3 */ + i64 x; + pIn1 = &aMem[pOp->p1]; + pIn3 = &aMem[pOp->p3]; + pOut = out2Prerelease(p, pOp); + assert( pIn1->flags & MEM_Int ); + assert( pIn3->flags & MEM_Int ); + x = pIn1->u.i; + if( x<=0 || sqlite3AddInt64(&x, pIn3->u.i>0?pIn3->u.i:0) ){ + /* If the LIMIT is less than or equal to zero, loop forever. This + ** is documented. But also, if the LIMIT+OFFSET exceeds 2^63 then + ** also loop forever. This is undocumented. In fact, one could argue + ** that the loop should terminate. But assuming 1 billion iterations + ** per second (far exceeding the capabilities of any current hardware) + ** it would take nearly 300 years to actually reach the limit. So + ** looping forever is a reasonable approximation. */ + pOut->u.i = -1; + }else{ + pOut->u.i = x; + } + break; +} + +/* Opcode: IfNotZero P1 P2 * * * +** Synopsis: if r[P1]!=0 then r[P1]--, goto P2 +** +** Register P1 must contain an integer. If the content of register P1 is +** initially greater than zero, then decrement the value in register P1. +** If it is non-zero (negative or positive) and then also jump to P2. +** If register P1 is initially zero, leave it unchanged and fall through. +*/ +case OP_IfNotZero: { /* jump, in1 */ + pIn1 = &aMem[pOp->p1]; + assert( pIn1->flags&MEM_Int ); + VdbeBranchTaken(pIn1->u.i<0, 2); + if( pIn1->u.i ){ + if( pIn1->u.i>0 ) pIn1->u.i--; + goto jump_to_p2; + } + break; +} + +/* Opcode: DecrJumpZero P1 P2 * * * +** Synopsis: if (--r[P1])==0 goto P2 +** +** Register P1 must hold an integer. Decrement the value in P1 +** and jump to P2 if the new value is exactly zero. +*/ +case OP_DecrJumpZero: { /* jump, in1 */ + pIn1 = &aMem[pOp->p1]; + assert( pIn1->flags&MEM_Int ); + if( pIn1->u.i>SMALLEST_INT64 ) pIn1->u.i--; + VdbeBranchTaken(pIn1->u.i==0, 2); + if( pIn1->u.i==0 ) goto jump_to_p2; + break; +} + + +/* Opcode: AggStep * P2 P3 P4 P5 +** Synopsis: accum=r[P3] step(r[P2@P5]) +** +** Execute the xStep function for an aggregate. +** The function has P5 arguments. P4 is a pointer to the +** FuncDef structure that specifies the function. Register P3 is the +** accumulator. +** +** The P5 arguments are taken from register P2 and its +** successors. +*/ +/* Opcode: AggInverse * P2 P3 P4 P5 +** Synopsis: accum=r[P3] inverse(r[P2@P5]) +** +** Execute the xInverse function for an aggregate. +** The function has P5 arguments. P4 is a pointer to the +** FuncDef structure that specifies the function. Register P3 is the +** accumulator. +** +** The P5 arguments are taken from register P2 and its +** successors. +*/ +/* Opcode: AggStep1 P1 P2 P3 P4 P5 +** Synopsis: accum=r[P3] step(r[P2@P5]) +** +** Execute the xStep (if P1==0) or xInverse (if P1!=0) function for an +** aggregate. The function has P5 arguments. P4 is a pointer to the +** FuncDef structure that specifies the function. Register P3 is the +** accumulator. +** +** The P5 arguments are taken from register P2 and its +** successors. +** +** This opcode is initially coded as OP_AggStep0. On first evaluation, +** the FuncDef stored in P4 is converted into an sqlite3_context and +** the opcode is changed. In this way, the initialization of the +** sqlite3_context only happens once, instead of on each call to the +** step function. +*/ +case OP_AggInverse: +case OP_AggStep: { + int n; + sqlite3_context *pCtx; + u64 nAlloc; + + assert( pOp->p4type==P4_FUNCDEF ); + n = pOp->p5; + assert( pOp->p3>0 && pOp->p3<=(p->nMem+1 - p->nCursor) ); + assert( n==0 || (pOp->p2>0 && pOp->p2+n<=(p->nMem+1 - p->nCursor)+1) ); + assert( pOp->p3p2 || pOp->p3>=pOp->p2+n ); + + /* Allocate space for (a) the context object and (n-1) extra pointers + ** to append to the sqlite3_context.argv[1] array, and (b) a memory + ** cell in which to store the accumulation. Be careful that the memory + ** cell is 8-byte aligned, even on platforms where a pointer is 32-bits. + ** + ** Note: We could avoid this by using a regular memory cell from aMem[] for + ** the accumulator, instead of allocating one here. */ + nAlloc = ROUND8P( SZ_CONTEXT(n) ); + pCtx = sqlite3DbMallocRawNN(db, nAlloc + sizeof(Mem)); + if( pCtx==0 ) goto no_mem; + pCtx->pOut = (Mem*)((u8*)pCtx + nAlloc); + assert( EIGHT_BYTE_ALIGNMENT(pCtx->pOut) ); + + sqlite3VdbeMemInit(pCtx->pOut, db, MEM_Null); + pCtx->pMem = 0; + pCtx->pFunc = pOp->p4.pFunc; + pCtx->iOp = (int)(pOp - aOp); + pCtx->pVdbe = p; + pCtx->skipFlag = 0; + pCtx->isError = 0; + pCtx->enc = encoding; + pCtx->argc = n; + pOp->p4type = P4_FUNCCTX; + pOp->p4.pCtx = pCtx; + + /* OP_AggInverse must have P1==1 and OP_AggStep must have P1==0 */ + assert( pOp->p1==(pOp->opcode==OP_AggInverse) ); + + pOp->opcode = OP_AggStep1; + /* Fall through into OP_AggStep */ + /* no break */ deliberate_fall_through +} +case OP_AggStep1: { + int i; + sqlite3_context *pCtx; + Mem *pMem; + + assert( pOp->p4type==P4_FUNCCTX ); + pCtx = pOp->p4.pCtx; + pMem = &aMem[pOp->p3]; + +#ifdef SQLITE_DEBUG + if( pOp->p1 ){ + /* This is an OP_AggInverse call. Verify that xStep has always + ** been called at least once prior to any xInverse call. */ + assert( pMem->uTemp==0x1122e0e3 ); + }else{ + /* This is an OP_AggStep call. Mark it as such. */ + pMem->uTemp = 0x1122e0e3; + } +#endif + + /* If this function is inside of a trigger, the register array in aMem[] + ** might change from one evaluation to the next. The next block of code + ** checks to see if the register array has changed, and if so it + ** reinitializes the relevant parts of the sqlite3_context object */ + if( pCtx->pMem != pMem ){ + pCtx->pMem = pMem; + for(i=pCtx->argc-1; i>=0; i--) pCtx->argv[i] = &aMem[pOp->p2+i]; + } + +#ifdef SQLITE_DEBUG + for(i=0; iargc; i++){ + assert( memIsValid(pCtx->argv[i]) ); + REGISTER_TRACE(pOp->p2+i, pCtx->argv[i]); + } +#endif + + pMem->n++; + assert( pCtx->pOut->flags==MEM_Null ); + assert( pCtx->isError==0 ); + assert( pCtx->skipFlag==0 ); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pOp->p1 ){ + (pCtx->pFunc->xInverse)(pCtx,pCtx->argc,pCtx->argv); + }else +#endif + (pCtx->pFunc->xSFunc)(pCtx,pCtx->argc,pCtx->argv); /* IMP: R-24505-23230 */ + + if( pCtx->isError ){ + if( pCtx->isError>0 ){ + sqlite3VdbeError(p, "%s", sqlite3_value_text(pCtx->pOut)); + rc = pCtx->isError; + } + if( pCtx->skipFlag ){ + assert( pOp[-1].opcode==OP_CollSeq ); + i = pOp[-1].p1; + if( i ) sqlite3VdbeMemSetInt64(&aMem[i], 1); + pCtx->skipFlag = 0; + } + sqlite3VdbeMemRelease(pCtx->pOut); + pCtx->pOut->flags = MEM_Null; + pCtx->isError = 0; + if( rc ) goto abort_due_to_error; + } + assert( pCtx->pOut->flags==MEM_Null ); + assert( pCtx->skipFlag==0 ); + break; +} + +/* Opcode: AggFinal P1 P2 * P4 * +** Synopsis: accum=r[P1] N=P2 +** +** P1 is the memory location that is the accumulator for an aggregate +** or window function. Execute the finalizer function +** for an aggregate and store the result in P1. +** +** P2 is the number of arguments that the step function takes and +** P4 is a pointer to the FuncDef for this function. The P2 +** argument is not used by this opcode. It is only there to disambiguate +** functions that can take varying numbers of arguments. The +** P4 argument is only needed for the case where +** the step function was not previously called. +*/ +/* Opcode: AggValue * P2 P3 P4 * +** Synopsis: r[P3]=value N=P2 +** +** Invoke the xValue() function and store the result in register P3. +** +** P2 is the number of arguments that the step function takes and +** P4 is a pointer to the FuncDef for this function. The P2 +** argument is not used by this opcode. It is only there to disambiguate +** functions that can take varying numbers of arguments. The +** P4 argument is only needed for the case where +** the step function was not previously called. +*/ +case OP_AggValue: +case OP_AggFinal: { + Mem *pMem; + assert( pOp->p1>0 && pOp->p1<=(p->nMem+1 - p->nCursor) ); + assert( pOp->p3==0 || pOp->opcode==OP_AggValue ); + pMem = &aMem[pOp->p1]; + assert( (pMem->flags & ~(MEM_Null|MEM_Agg))==0 ); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pOp->p3 ){ + memAboutToChange(p, &aMem[pOp->p3]); + rc = sqlite3VdbeMemAggValue(pMem, &aMem[pOp->p3], pOp->p4.pFunc); + pMem = &aMem[pOp->p3]; + }else +#endif + { + rc = sqlite3VdbeMemFinalize(pMem, pOp->p4.pFunc); + } + + if( rc ){ + sqlite3VdbeError(p, "%s", sqlite3_value_text(pMem)); + goto abort_due_to_error; + } + sqlite3VdbeChangeEncoding(pMem, encoding); + UPDATE_MAX_BLOBSIZE(pMem); + REGISTER_TRACE((int)(pMem-aMem), pMem); + break; +} + +#ifndef SQLITE_OMIT_WAL +/* Opcode: Checkpoint P1 P2 P3 * * +** +** Checkpoint database P1. This is a no-op if P1 is not currently in +** WAL mode. Parameter P2 is one of SQLITE_CHECKPOINT_PASSIVE, FULL, +** RESTART, or TRUNCATE. Write 1 or 0 into mem[P3] if the checkpoint returns +** SQLITE_BUSY or not, respectively. Write the number of pages in the +** WAL after the checkpoint into mem[P3+1] and the number of pages +** in the WAL that have been checkpointed after the checkpoint +** completes into mem[P3+2]. However on an error, mem[P3+1] and +** mem[P3+2] are initialized to -1. +*/ +case OP_Checkpoint: { + int i; /* Loop counter */ + int aRes[3]; /* Results */ + Mem *pMem; /* Write results here */ + + assert( p->readOnly==0 ); + aRes[0] = 0; + aRes[1] = aRes[2] = -1; + assert( pOp->p2==SQLITE_CHECKPOINT_PASSIVE + || pOp->p2==SQLITE_CHECKPOINT_FULL + || pOp->p2==SQLITE_CHECKPOINT_RESTART + || pOp->p2==SQLITE_CHECKPOINT_TRUNCATE + || pOp->p2==SQLITE_CHECKPOINT_NOOP + ); + rc = sqlite3Checkpoint(db, pOp->p1, pOp->p2, &aRes[1], &aRes[2]); + if( rc ){ + if( rc!=SQLITE_BUSY ) goto abort_due_to_error; + rc = SQLITE_OK; + aRes[0] = 1; + } + for(i=0, pMem = &aMem[pOp->p3]; i<3; i++, pMem++){ + sqlite3VdbeMemSetInt64(pMem, (i64)aRes[i]); + } + break; +}; +#endif + +#ifndef SQLITE_OMIT_PRAGMA +/* Opcode: JournalMode P1 P2 P3 * * +** +** Change the journal mode of database P1 to P3. P3 must be one of the +** PAGER_JOURNALMODE_XXX values. If changing between the various rollback +** modes (delete, truncate, persist, off and memory), this is a simple +** operation. No IO is required. +** +** If changing into or out of WAL mode the procedure is more complicated. +** +** Write a string containing the final journal-mode to register P2. +*/ +case OP_JournalMode: { /* out2 */ + Btree *pBt; /* Btree to change journal mode of */ + Pager *pPager; /* Pager associated with pBt */ + int eNew; /* New journal mode */ + int eOld; /* The old journal mode */ +#ifndef SQLITE_OMIT_WAL + const char *zFilename; /* Name of database file for pPager */ +#endif + + pOut = out2Prerelease(p, pOp); + eNew = pOp->p3; + assert( eNew==PAGER_JOURNALMODE_DELETE + || eNew==PAGER_JOURNALMODE_TRUNCATE + || eNew==PAGER_JOURNALMODE_PERSIST + || eNew==PAGER_JOURNALMODE_OFF + || eNew==PAGER_JOURNALMODE_MEMORY + || eNew==PAGER_JOURNALMODE_WAL + || eNew==PAGER_JOURNALMODE_QUERY + ); + assert( pOp->p1>=0 && pOp->p1nDb ); + assert( p->readOnly==0 ); + + pBt = db->aDb[pOp->p1].pBt; + pPager = sqlite3BtreePager(pBt); + eOld = sqlite3PagerGetJournalMode(pPager); + if( eNew==PAGER_JOURNALMODE_QUERY ) eNew = eOld; + assert( sqlite3BtreeHoldsMutex(pBt) ); + if( !sqlite3PagerOkToChangeJournalMode(pPager) ) eNew = eOld; + +#ifndef SQLITE_OMIT_WAL + zFilename = sqlite3PagerFilename(pPager, 1); + + /* Do not allow a transition to journal_mode=WAL for a database + ** in temporary storage or if the VFS does not support shared memory + */ + if( eNew==PAGER_JOURNALMODE_WAL + && (sqlite3Strlen30(zFilename)==0 /* Temp file */ + || !sqlite3PagerWalSupported(pPager)) /* No shared-memory support */ + ){ + eNew = eOld; + } + + if( (eNew!=eOld) + && (eOld==PAGER_JOURNALMODE_WAL || eNew==PAGER_JOURNALMODE_WAL) + ){ + if( !db->autoCommit || db->nVdbeRead>1 ){ + rc = SQLITE_ERROR; + sqlite3VdbeError(p, + "cannot change %s wal mode from within a transaction", + (eNew==PAGER_JOURNALMODE_WAL ? "into" : "out of") + ); + goto abort_due_to_error; + }else{ + + if( eOld==PAGER_JOURNALMODE_WAL ){ + /* If leaving WAL mode, close the log file. If successful, the call + ** to PagerCloseWal() checkpoints and deletes the write-ahead-log + ** file. An EXCLUSIVE lock may still be held on the database file + ** after a successful return. + */ + rc = sqlite3PagerCloseWal(pPager, db); + if( rc==SQLITE_OK ){ + sqlite3PagerSetJournalMode(pPager, eNew); + } + }else if( eOld==PAGER_JOURNALMODE_MEMORY ){ + /* Cannot transition directly from MEMORY to WAL. Use mode OFF + ** as an intermediate */ + sqlite3PagerSetJournalMode(pPager, PAGER_JOURNALMODE_OFF); + } + + /* Open a transaction on the database file. Regardless of the journal + ** mode, this transaction always uses a rollback journal. + */ + assert( sqlite3BtreeTxnState(pBt)!=SQLITE_TXN_WRITE ); + if( rc==SQLITE_OK ){ + rc = sqlite3BtreeSetVersion(pBt, (eNew==PAGER_JOURNALMODE_WAL ? 2 : 1)); + } + } + } +#endif /* ifndef SQLITE_OMIT_WAL */ + + if( rc ) eNew = eOld; + eNew = sqlite3PagerSetJournalMode(pPager, eNew); + + pOut->flags = MEM_Str|MEM_Static|MEM_Term; + pOut->z = (char *)sqlite3JournalModename(eNew); + pOut->n = sqlite3Strlen30(pOut->z); + pOut->enc = SQLITE_UTF8; + sqlite3VdbeChangeEncoding(pOut, encoding); + if( rc ) goto abort_due_to_error; + break; +}; +#endif /* SQLITE_OMIT_PRAGMA */ + +#if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH) +/* Opcode: Vacuum P1 P2 * * * +** +** Vacuum the entire database P1. P1 is 0 for "main", and 2 or more +** for an attached database. The "temp" database may not be vacuumed. +** +** If P2 is not zero, then it is a register holding a string which is +** the file into which the result of vacuum should be written. When +** P2 is zero, the vacuum overwrites the original database. +*/ +case OP_Vacuum: { + assert( p->readOnly==0 ); + rc = sqlite3RunVacuum(&p->zErrMsg, db, pOp->p1, + pOp->p2 ? &aMem[pOp->p2] : 0); + if( rc ) goto abort_due_to_error; + break; +} +#endif + +#if !defined(SQLITE_OMIT_AUTOVACUUM) +/* Opcode: IncrVacuum P1 P2 * * * +** +** Perform a single step of the incremental vacuum procedure on +** the P1 database. If the vacuum has finished, jump to instruction +** P2. Otherwise, fall through to the next instruction. +*/ +case OP_IncrVacuum: { /* jump */ + Btree *pBt; + + assert( pOp->p1>=0 && pOp->p1nDb ); + assert( DbMaskTest(p->btreeMask, pOp->p1) ); + assert( p->readOnly==0 ); + pBt = db->aDb[pOp->p1].pBt; + rc = sqlite3BtreeIncrVacuum(pBt); + VdbeBranchTaken(rc==SQLITE_DONE,2); + if( rc ){ + if( rc!=SQLITE_DONE ) goto abort_due_to_error; + rc = SQLITE_OK; + goto jump_to_p2; + } + break; +} +#endif + +/* Opcode: Expire P1 P2 * * * +** +** Cause precompiled statements to expire. When an expired statement +** is executed using sqlite3_step() it will either automatically +** reprepare itself (if it was originally created using sqlite3_prepare_v2()) +** or it will fail with SQLITE_SCHEMA. +** +** If P1 is 0, then all SQL statements become expired. If P1 is non-zero, +** then only the currently executing statement is expired. +** +** If P2 is 0, then SQL statements are expired immediately. If P2 is 1, +** then running SQL statements are allowed to continue to run to completion. +** The P2==1 case occurs when a CREATE INDEX or similar schema change happens +** that might help the statement run faster but which does not affect the +** correctness of operation. +*/ +case OP_Expire: { + assert( pOp->p2==0 || pOp->p2==1 ); + if( !pOp->p1 ){ + sqlite3ExpirePreparedStatements(db, pOp->p2); + }else{ + p->expired = pOp->p2+1; + } + break; +} + +/* Opcode: CursorLock P1 * * * * +** +** Lock the btree to which cursor P1 is pointing so that the btree cannot be +** written by an other cursor. +*/ +case OP_CursorLock: { + VdbeCursor *pC; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->eCurType==CURTYPE_BTREE ); + sqlite3BtreeCursorPin(pC->uc.pCursor); + break; +} + +/* Opcode: CursorUnlock P1 * * * * +** +** Unlock the btree to which cursor P1 is pointing so that it can be +** written by other cursors. +*/ +case OP_CursorUnlock: { + VdbeCursor *pC; + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + assert( pC->eCurType==CURTYPE_BTREE ); + sqlite3BtreeCursorUnpin(pC->uc.pCursor); + break; +} + +#ifndef SQLITE_OMIT_SHARED_CACHE +/* Opcode: TableLock P1 P2 P3 P4 * +** Synopsis: iDb=P1 root=P2 write=P3 +** +** Obtain a lock on a particular table. This instruction is only used when +** the shared-cache feature is enabled. +** +** P1 is the index of the database in sqlite3.aDb[] of the database +** on which the lock is acquired. A readlock is obtained if P3==0 or +** a write lock if P3==1. +** +** P2 contains the root-page of the table to lock. +** +** P4 contains a pointer to the name of the table being locked. This is only +** used to generate an error message if the lock cannot be obtained. +*/ +case OP_TableLock: { + u8 isWriteLock = (u8)pOp->p3; + if( isWriteLock || 0==(db->flags&SQLITE_ReadUncommit) ){ + int p1 = pOp->p1; + assert( p1>=0 && p1nDb ); + assert( DbMaskTest(p->btreeMask, p1) ); + assert( isWriteLock==0 || isWriteLock==1 ); + rc = sqlite3BtreeLockTable(db->aDb[p1].pBt, pOp->p2, isWriteLock); + if( rc ){ + if( (rc&0xFF)==SQLITE_LOCKED ){ + const char *z = pOp->p4.z; + sqlite3VdbeError(p, "database table is locked: %s", z); + } + goto abort_due_to_error; + } + } + break; +} +#endif /* SQLITE_OMIT_SHARED_CACHE */ + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VBegin * * * P4 * +** +** P4 may be a pointer to an sqlite3_vtab structure. If so, call the +** xBegin method for that table. +** +** Also, whether or not P4 is set, check that this is not being called from +** within a callback to a virtual table xSync() method. If it is, the error +** code will be set to SQLITE_LOCKED. +*/ +case OP_VBegin: { + VTable *pVTab; + pVTab = pOp->p4.pVtab; + rc = sqlite3VtabBegin(db, pVTab); + if( pVTab ) sqlite3VtabImportErrmsg(p, pVTab->pVtab); + if( rc ) goto abort_due_to_error; + break; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VCreate P1 P2 * * * +** +** P2 is a register that holds the name of a virtual table in database +** P1. Call the xCreate method for that table. +*/ +case OP_VCreate: { + Mem sMem; /* For storing the record being decoded */ + const char *zTab; /* Name of the virtual table */ + + memset(&sMem, 0, sizeof(sMem)); + sMem.db = db; + /* Because P2 is always a static string, it is impossible for the + ** sqlite3VdbeMemCopy() to fail */ + assert( (aMem[pOp->p2].flags & MEM_Str)!=0 ); + assert( (aMem[pOp->p2].flags & MEM_Static)!=0 ); + rc = sqlite3VdbeMemCopy(&sMem, &aMem[pOp->p2]); + assert( rc==SQLITE_OK ); + zTab = (const char*)sqlite3_value_text(&sMem); + assert( zTab || db->mallocFailed ); + if( zTab ){ + rc = sqlite3VtabCallCreate(db, pOp->p1, zTab, &p->zErrMsg); + } + sqlite3VdbeMemRelease(&sMem); + if( rc ) goto abort_due_to_error; + break; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VDestroy P1 * * P4 * +** +** P4 is the name of a virtual table in database P1. Call the xDestroy method +** of that table. +*/ +case OP_VDestroy: { + db->nVDestroy++; + rc = sqlite3VtabCallDestroy(db, pOp->p1, pOp->p4.z); + db->nVDestroy--; + assert( p->errorAction==OE_Abort && p->usesStmtJournal ); + if( rc ) goto abort_due_to_error; + break; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VOpen P1 * * P4 * +** +** P4 is a pointer to a virtual table object, an sqlite3_vtab structure. +** P1 is a cursor number. This opcode opens a cursor to the virtual +** table and stores that cursor in P1. +*/ +case OP_VOpen: { /* ncycle */ + VdbeCursor *pCur; + sqlite3_vtab_cursor *pVCur; + sqlite3_vtab *pVtab; + const sqlite3_module *pModule; + + assert( p->bIsReader ); + pCur = p->apCsr[pOp->p1]; + if( pCur!=0 + && ALWAYS( pCur->eCurType==CURTYPE_VTAB ) + && ALWAYS( pCur->uc.pVCur->pVtab==pOp->p4.pVtab->pVtab ) + ){ + /* This opcode is a no-op if the cursor is already open */ + break; + } + pVCur = 0; + pVtab = pOp->p4.pVtab->pVtab; + if( pVtab==0 || NEVER(pVtab->pModule==0) ){ + rc = SQLITE_LOCKED; + goto abort_due_to_error; + } + pModule = pVtab->pModule; + rc = pModule->xOpen(pVtab, &pVCur); + sqlite3VtabImportErrmsg(p, pVtab); + if( rc ) goto abort_due_to_error; + + /* Initialize sqlite3_vtab_cursor base class */ + pVCur->pVtab = pVtab; + + /* Initialize vdbe cursor object */ + pCur = allocateCursor(p, pOp->p1, 0, CURTYPE_VTAB); + if( pCur ){ + pCur->uc.pVCur = pVCur; + pVtab->nRef++; + }else{ + assert( db->mallocFailed ); + pModule->xClose(pVCur); + goto no_mem; + } + break; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VCheck P1 P2 P3 P4 * +** +** P4 is a pointer to a Table object that is a virtual table in schema P1 +** that supports the xIntegrity() method. This opcode runs the xIntegrity() +** method for that virtual table, using P3 as the integer argument. If +** an error is reported back, the table name is prepended to the error +** message and that message is stored in P2. If no errors are seen, +** register P2 is set to NULL. +*/ +case OP_VCheck: { /* out2 */ + Table *pTab; + sqlite3_vtab *pVtab; + const sqlite3_module *pModule; + char *zErr = 0; + + pOut = &aMem[pOp->p2]; + sqlite3VdbeMemSetNull(pOut); /* Innocent until proven guilty */ + assert( pOp->p4type==P4_TABLEREF ); + pTab = pOp->p4.pTab; + assert( pTab!=0 ); + assert( pTab->nTabRef>0 ); + assert( IsVirtual(pTab) ); + if( pTab->u.vtab.p==0 ) break; + pVtab = pTab->u.vtab.p->pVtab; + assert( pVtab!=0 ); + pModule = pVtab->pModule; + assert( pModule!=0 ); + assert( pModule->iVersion>=4 ); + assert( pModule->xIntegrity!=0 ); + sqlite3VtabLock(pTab->u.vtab.p); + assert( pOp->p1>=0 && pOp->p1nDb ); + rc = pModule->xIntegrity(pVtab, db->aDb[pOp->p1].zDbSName, pTab->zName, + pOp->p3, &zErr); + sqlite3VtabUnlock(pTab->u.vtab.p); + if( rc ){ + sqlite3_free(zErr); + goto abort_due_to_error; + } + if( zErr ){ + sqlite3VdbeMemSetStr(pOut, zErr, -1, SQLITE_UTF8, sqlite3_free); + } + break; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VInitIn P1 P2 P3 * * +** Synopsis: r[P2]=ValueList(P1,P3) +** +** Set register P2 to be a pointer to a ValueList object for cursor P1 +** with cache register P3 and output register P3+1. This ValueList object +** can be used as the first argument to sqlite3_vtab_in_first() and +** sqlite3_vtab_in_next() to extract all of the values stored in the P1 +** cursor. Register P3 is used to hold the values returned by +** sqlite3_vtab_in_first() and sqlite3_vtab_in_next(). +*/ +case OP_VInitIn: { /* out2, ncycle */ + VdbeCursor *pC; /* The cursor containing the RHS values */ + ValueList *pRhs; /* New ValueList object to put in reg[P2] */ + + pC = p->apCsr[pOp->p1]; + pRhs = sqlite3_malloc64( sizeof(*pRhs) ); + if( pRhs==0 ) goto no_mem; + pRhs->pCsr = pC->uc.pCursor; + pRhs->pOut = &aMem[pOp->p3]; + pOut = out2Prerelease(p, pOp); + pOut->flags = MEM_Null; + sqlite3VdbeMemSetPointer(pOut, pRhs, "ValueList", sqlite3VdbeValueListFree); + break; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VFilter P1 P2 P3 P4 * +** Synopsis: iplan=r[P3] zplan='P4' +** +** P1 is a cursor opened using VOpen. P2 is an address to jump to if +** the filtered result set is empty. +** +** P4 is either NULL or a string that was generated by the xBestIndex +** method of the module. The interpretation of the P4 string is left +** to the module implementation. +** +** This opcode invokes the xFilter method on the virtual table specified +** by P1. The integer query plan parameter to xFilter is stored in register +** P3. Register P3+1 stores the argc parameter to be passed to the +** xFilter method. Registers P3+2..P3+1+argc are the argc +** additional parameters which are passed to +** xFilter as argv. Register P3+2 becomes argv[0] when passed to xFilter. +** +** A jump is made to P2 if the result set after filtering would be empty. +*/ +case OP_VFilter: { /* jump, ncycle */ + int nArg; + int iQuery; + const sqlite3_module *pModule; + Mem *pQuery; + Mem *pArgc; + sqlite3_vtab_cursor *pVCur; + sqlite3_vtab *pVtab; + VdbeCursor *pCur; + int res; + int i; + Mem **apArg; + + pQuery = &aMem[pOp->p3]; + pArgc = &pQuery[1]; + pCur = p->apCsr[pOp->p1]; + assert( memIsValid(pQuery) ); + REGISTER_TRACE(pOp->p3, pQuery); + assert( pCur!=0 ); + assert( pCur->eCurType==CURTYPE_VTAB ); + pVCur = pCur->uc.pVCur; + pVtab = pVCur->pVtab; + pModule = pVtab->pModule; + + /* Grab the index number and argc parameters */ + assert( (pQuery->flags&MEM_Int)!=0 && pArgc->flags==MEM_Int ); + nArg = (int)pArgc->u.i; + iQuery = (int)pQuery->u.i; + + /* Invoke the xFilter method */ + apArg = p->apArg; + assert( nArg<=p->napArg ); + for(i = 0; ixFilter(pVCur, iQuery, pOp->p4.z, nArg, apArg); + sqlite3VtabImportErrmsg(p, pVtab); + if( rc ) goto abort_due_to_error; + res = pModule->xEof(pVCur); + pCur->nullRow = 0; + VdbeBranchTaken(res!=0,2); + if( res ) goto jump_to_p2; + break; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VColumn P1 P2 P3 * P5 +** Synopsis: r[P3]=vcolumn(P2) +** +** Store in register P3 the value of the P2-th column of +** the current row of the virtual-table of cursor P1. +** +** If the VColumn opcode is being used to fetch the value of +** an unchanging column during an UPDATE operation, then the P5 +** value is OPFLAG_NOCHNG. This will cause the sqlite3_vtab_nochange() +** function to return true inside the xColumn method of the virtual +** table implementation. The P5 column might also contain other +** bits (OPFLAG_LENGTHARG or OPFLAG_TYPEOFARG) but those bits are +** unused by OP_VColumn. +*/ +case OP_VColumn: { /* ncycle */ + sqlite3_vtab *pVtab; + const sqlite3_module *pModule; + Mem *pDest; + sqlite3_context sContext; + FuncDef nullFunc; + + VdbeCursor *pCur = p->apCsr[pOp->p1]; + assert( pCur!=0 ); + assert( pOp->p3>0 && pOp->p3<=(p->nMem+1 - p->nCursor) ); + pDest = &aMem[pOp->p3]; + memAboutToChange(p, pDest); + if( pCur->nullRow ){ + sqlite3VdbeMemSetNull(pDest); + break; + } + assert( pCur->eCurType==CURTYPE_VTAB ); + pVtab = pCur->uc.pVCur->pVtab; + pModule = pVtab->pModule; + assert( pModule->xColumn ); + memset(&sContext, 0, sizeof(sContext)); + sContext.pOut = pDest; + sContext.enc = encoding; + nullFunc.pUserData = 0; + nullFunc.funcFlags = SQLITE_RESULT_SUBTYPE; + sContext.pFunc = &nullFunc; + assert( pOp->p5==OPFLAG_NOCHNG || pOp->p5==0 ); + if( pOp->p5 & OPFLAG_NOCHNG ){ + sqlite3VdbeMemSetNull(pDest); + pDest->flags = MEM_Null|MEM_Zero; + pDest->u.nZero = 0; + }else{ + MemSetTypeFlag(pDest, MEM_Null); + } + rc = pModule->xColumn(pCur->uc.pVCur, &sContext, pOp->p2); + sqlite3VtabImportErrmsg(p, pVtab); + if( sContext.isError>0 ){ + sqlite3VdbeError(p, "%s", sqlite3_value_text(pDest)); + rc = sContext.isError; + } + sqlite3VdbeChangeEncoding(pDest, encoding); + REGISTER_TRACE(pOp->p3, pDest); + UPDATE_MAX_BLOBSIZE(pDest); + + if( rc ) goto abort_due_to_error; + break; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VNext P1 P2 * * * +** +** Advance virtual table P1 to the next row in its result set and +** jump to instruction P2. Or, if the virtual table has reached +** the end of its result set, then fall through to the next instruction. +*/ +case OP_VNext: { /* jump, ncycle */ + sqlite3_vtab *pVtab; + const sqlite3_module *pModule; + int res; + VdbeCursor *pCur; + + pCur = p->apCsr[pOp->p1]; + assert( pCur!=0 ); + assert( pCur->eCurType==CURTYPE_VTAB ); + if( pCur->nullRow ){ + break; + } + pVtab = pCur->uc.pVCur->pVtab; + pModule = pVtab->pModule; + assert( pModule->xNext ); + + /* Invoke the xNext() method of the module. There is no way for the + ** underlying implementation to return an error if one occurs during + ** xNext(). Instead, if an error occurs, true is returned (indicating that + ** data is available) and the error code returned when xColumn or + ** some other method is next invoked on the save virtual table cursor. + */ + rc = pModule->xNext(pCur->uc.pVCur); + sqlite3VtabImportErrmsg(p, pVtab); + if( rc ) goto abort_due_to_error; + res = pModule->xEof(pCur->uc.pVCur); + VdbeBranchTaken(!res,2); + if( !res ){ + /* If there is data, jump to P2 */ + goto jump_to_p2_and_check_for_interrupt; + } + goto check_for_interrupt; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VRename P1 * * P4 * +** +** P4 is a pointer to a virtual table object, an sqlite3_vtab structure. +** This opcode invokes the corresponding xRename method. The value +** in register P1 is passed as the zName argument to the xRename method. +*/ +case OP_VRename: { + sqlite3_vtab *pVtab; + Mem *pName; + int isLegacy; + + isLegacy = (db->flags & SQLITE_LegacyAlter); + db->flags |= SQLITE_LegacyAlter; + pVtab = pOp->p4.pVtab->pVtab; + pName = &aMem[pOp->p1]; + assert( pVtab->pModule->xRename ); + assert( memIsValid(pName) ); + assert( p->readOnly==0 ); + REGISTER_TRACE(pOp->p1, pName); + assert( pName->flags & MEM_Str ); + testcase( pName->enc==SQLITE_UTF8 ); + testcase( pName->enc==SQLITE_UTF16BE ); + testcase( pName->enc==SQLITE_UTF16LE ); + rc = sqlite3VdbeChangeEncoding(pName, SQLITE_UTF8); + if( rc ) goto abort_due_to_error; + rc = pVtab->pModule->xRename(pVtab, pName->z); + if( isLegacy==0 ) db->flags &= ~(u64)SQLITE_LegacyAlter; + sqlite3VtabImportErrmsg(p, pVtab); + p->expired = 0; + if( rc ) goto abort_due_to_error; + break; +} +#endif + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Opcode: VUpdate P1 P2 P3 P4 P5 +** Synopsis: data=r[P3@P2] +** +** P4 is a pointer to a virtual table object, an sqlite3_vtab structure. +** This opcode invokes the corresponding xUpdate method. P2 values +** are contiguous memory cells starting at P3 to pass to the xUpdate +** invocation. The value in register (P3+P2-1) corresponds to the +** p2th element of the argv array passed to xUpdate. +** +** The xUpdate method will do a DELETE or an INSERT or both. +** The argv[0] element (which corresponds to memory cell P3) +** is the rowid of a row to delete. If argv[0] is NULL then no +** deletion occurs. The argv[1] element is the rowid of the new +** row. This can be NULL to have the virtual table select the new +** rowid for itself. The subsequent elements in the array are +** the values of columns in the new row. +** +** If P2==1 then no insert is performed. argv[0] is the rowid of +** a row to delete. +** +** P1 is a boolean flag. If it is set to true and the xUpdate call +** is successful, then the value returned by sqlite3_last_insert_rowid() +** is set to the value of the rowid for the row just inserted. +** +** P5 is the error actions (OE_Replace, OE_Fail, OE_Ignore, etc) to +** apply in the case of a constraint failure on an insert or update. +*/ +case OP_VUpdate: { + sqlite3_vtab *pVtab; + const sqlite3_module *pModule; + int nArg; + int i; + sqlite_int64 rowid = 0; + Mem **apArg; + Mem *pX; + + assert( pOp->p2==1 || pOp->p5==OE_Fail || pOp->p5==OE_Rollback + || pOp->p5==OE_Abort || pOp->p5==OE_Ignore || pOp->p5==OE_Replace + ); + assert( p->readOnly==0 ); + if( db->mallocFailed ) goto no_mem; + sqlite3VdbeIncrWriteCounter(p, 0); + pVtab = pOp->p4.pVtab->pVtab; + if( pVtab==0 || NEVER(pVtab->pModule==0) ){ + rc = SQLITE_LOCKED; + goto abort_due_to_error; + } + pModule = pVtab->pModule; + nArg = pOp->p2; + assert( pOp->p4type==P4_VTAB ); + if( ALWAYS(pModule->xUpdate) ){ + u8 vtabOnConflict = db->vtabOnConflict; + apArg = p->apArg; + pX = &aMem[pOp->p3]; + assert( nArg<=p->napArg ); + for(i=0; ivtabOnConflict = pOp->p5; + rc = pModule->xUpdate(pVtab, nArg, apArg, &rowid); + db->vtabOnConflict = vtabOnConflict; + sqlite3VtabImportErrmsg(p, pVtab); + if( rc==SQLITE_OK && pOp->p1 ){ + assert( nArg>1 && apArg[0] && (apArg[0]->flags&MEM_Null) ); + db->lastRowid = rowid; + } + if( (rc&0xff)==SQLITE_CONSTRAINT && pOp->p4.pVtab->bConstraint ){ + if( pOp->p5==OE_Ignore ){ + rc = SQLITE_OK; + }else{ + p->errorAction = ((pOp->p5==OE_Replace) ? OE_Abort : pOp->p5); + } + }else{ + p->nChange++; + } + if( rc ) goto abort_due_to_error; + } + break; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +#ifndef SQLITE_OMIT_PAGER_PRAGMAS +/* Opcode: Pagecount P1 P2 * * * +** +** Write the current number of pages in database P1 to memory cell P2. +*/ +case OP_Pagecount: { /* out2 */ + pOut = out2Prerelease(p, pOp); + pOut->u.i = sqlite3BtreeLastPage(db->aDb[pOp->p1].pBt); + break; +} +#endif + + +#ifndef SQLITE_OMIT_PAGER_PRAGMAS +/* Opcode: MaxPgcnt P1 P2 P3 * * +** +** Try to set the maximum page count for database P1 to the value in P3. +** Do not let the maximum page count fall below the current page count and +** do not change the maximum page count value if P3==0. +** +** Store the maximum page count after the change in register P2. +*/ +case OP_MaxPgcnt: { /* out2 */ + unsigned int newMax; + Btree *pBt; + + pOut = out2Prerelease(p, pOp); + pBt = db->aDb[pOp->p1].pBt; + newMax = 0; + if( pOp->p3 ){ + newMax = sqlite3BtreeLastPage(pBt); + if( newMax < (unsigned)pOp->p3 ) newMax = (unsigned)pOp->p3; + } + pOut->u.i = sqlite3BtreeMaxPageCount(pBt, newMax); + break; +} +#endif + +/* Opcode: Function P1 P2 P3 P4 * +** Synopsis: r[P3]=func(r[P2@NP]) +** +** Invoke a user function (P4 is a pointer to an sqlite3_context object that +** contains a pointer to the function to be run) with arguments taken +** from register P2 and successors. The number of arguments is in +** the sqlite3_context object that P4 points to. +** The result of the function is stored +** in register P3. Register P3 must not be one of the function inputs. +** +** P1 is a 32-bit bitmask indicating whether or not each argument to the +** function was determined to be constant at compile time. If the first +** argument was constant then bit 0 of P1 is set. This is used to determine +** whether meta data associated with a user function argument using the +** sqlite3_set_auxdata() API may be safely retained until the next +** invocation of this opcode. +** +** See also: AggStep, AggFinal, PureFunc +*/ +/* Opcode: PureFunc P1 P2 P3 P4 * +** Synopsis: r[P3]=func(r[P2@NP]) +** +** Invoke a user function (P4 is a pointer to an sqlite3_context object that +** contains a pointer to the function to be run) with arguments taken +** from register P2 and successors. The number of arguments is in +** the sqlite3_context object that P4 points to. +** The result of the function is stored +** in register P3. Register P3 must not be one of the function inputs. +** +** P1 is a 32-bit bitmask indicating whether or not each argument to the +** function was determined to be constant at compile time. If the first +** argument was constant then bit 0 of P1 is set. This is used to determine +** whether meta data associated with a user function argument using the +** sqlite3_set_auxdata() API may be safely retained until the next +** invocation of this opcode. +** +** This opcode works exactly like OP_Function. The only difference is in +** its name. This opcode is used in places where the function must be +** purely non-deterministic. Some built-in date/time functions can be +** either deterministic of non-deterministic, depending on their arguments. +** When those function are used in a non-deterministic way, they will check +** to see if they were called using OP_PureFunc instead of OP_Function, and +** if they were, they throw an error. +** +** See also: AggStep, AggFinal, Function +*/ +case OP_PureFunc: /* group */ +case OP_Function: { /* group */ + int i; + sqlite3_context *pCtx; + + assert( pOp->p4type==P4_FUNCCTX ); + pCtx = pOp->p4.pCtx; + + /* If this function is inside of a trigger, the register array in aMem[] + ** might change from one evaluation to the next. The next block of code + ** checks to see if the register array has changed, and if so it + ** reinitializes the relevant parts of the sqlite3_context object */ + pOut = &aMem[pOp->p3]; + if( pCtx->pOut != pOut ){ + pCtx->pVdbe = p; + pCtx->pOut = pOut; + pCtx->enc = encoding; + for(i=pCtx->argc-1; i>=0; i--) pCtx->argv[i] = &aMem[pOp->p2+i]; + } + assert( pCtx->pVdbe==p ); + + memAboutToChange(p, pOut); +#ifdef SQLITE_DEBUG + for(i=0; iargc; i++){ + assert( memIsValid(pCtx->argv[i]) ); + REGISTER_TRACE(pOp->p2+i, pCtx->argv[i]); + } +#endif + MemSetTypeFlag(pOut, MEM_Null); + assert( pCtx->isError==0 ); + (*pCtx->pFunc->xSFunc)(pCtx, pCtx->argc, pCtx->argv);/* IMP: R-24505-23230 */ + + /* If the function returned an error, throw an exception */ + if( pCtx->isError ){ + if( pCtx->isError>0 ){ + sqlite3VdbeError(p, "%s", sqlite3_value_text(pOut)); + rc = pCtx->isError; + } + sqlite3VdbeDeleteAuxData(db, &p->pAuxData, pCtx->iOp, pOp->p1); + pCtx->isError = 0; + if( rc ) goto abort_due_to_error; + } + + assert( (pOut->flags&MEM_Str)==0 + || pOut->enc==encoding + || db->mallocFailed ); + assert( !sqlite3VdbeMemTooBig(pOut) ); + + REGISTER_TRACE(pOp->p3, pOut); + UPDATE_MAX_BLOBSIZE(pOut); + break; +} + +/* Opcode: ClrSubtype P1 * * * * +** Synopsis: r[P1].subtype = 0 +** +** Clear the subtype from register P1. +*/ +case OP_ClrSubtype: { /* in1 */ + pIn1 = &aMem[pOp->p1]; + pIn1->flags &= ~MEM_Subtype; + break; +} + +/* Opcode: GetSubtype P1 P2 * * * +** Synopsis: r[P2] = r[P1].subtype +** +** Extract the subtype value from register P1 and write that subtype +** into register P2. If P1 has no subtype, then P1 gets a NULL. +*/ +case OP_GetSubtype: { /* in1 out2 */ + pIn1 = &aMem[pOp->p1]; + pOut = &aMem[pOp->p2]; + if( pIn1->flags & MEM_Subtype ){ + sqlite3VdbeMemSetInt64(pOut, pIn1->eSubtype); + }else{ + sqlite3VdbeMemSetNull(pOut); + } + break; +} + +/* Opcode: SetSubtype P1 P2 * * * +** Synopsis: r[P2].subtype = r[P1] +** +** Set the subtype value of register P2 to the integer from register P1. +** If P1 is NULL, clear the subtype from p2. +*/ +case OP_SetSubtype: { /* in1 out2 */ + pIn1 = &aMem[pOp->p1]; + pOut = &aMem[pOp->p2]; + if( pIn1->flags & MEM_Null ){ + pOut->flags &= ~MEM_Subtype; + }else{ + assert( pIn1->flags & MEM_Int ); + pOut->flags |= MEM_Subtype; + pOut->eSubtype = (u8)(pIn1->u.i & 0xff); + } + break; +} + +/* Opcode: FilterAdd P1 * P3 P4 * +** Synopsis: filter(P1) += key(P3@P4) +** +** Compute a hash on the P4 registers starting with r[P3] and +** add that hash to the bloom filter contained in r[P1]. +*/ +case OP_FilterAdd: { + u64 h; + + assert( pOp->p1>0 && pOp->p1<=(p->nMem+1 - p->nCursor) ); + pIn1 = &aMem[pOp->p1]; + assert( pIn1->flags & MEM_Blob ); + assert( pIn1->n>0 ); + h = filterHash(aMem, pOp); +#ifdef SQLITE_DEBUG + if( db->flags&SQLITE_VdbeTrace ){ + int ii; + for(ii=pOp->p3; iip3+pOp->p4.i; ii++){ + registerTrace(ii, &aMem[ii]); + } + printf("hash: %llu modulo %d -> %u\n", h, pIn1->n, (int)(h%pIn1->n)); + } +#endif + h %= (pIn1->n*8); + pIn1->z[h/8] |= 1<<(h&7); + break; +} + +/* Opcode: Filter P1 P2 P3 P4 * +** Synopsis: if key(P3@P4) not in filter(P1) goto P2 +** +** Compute a hash on the key contained in the P4 registers starting +** with r[P3]. Check to see if that hash is found in the +** bloom filter hosted by register P1. If it is not present then +** maybe jump to P2. Otherwise fall through. +** +** False negatives are harmless. It is always safe to fall through, +** even if the value is in the bloom filter. A false negative causes +** more CPU cycles to be used, but it should still yield the correct +** answer. However, an incorrect answer may well arise from a +** false positive - if the jump is taken when it should fall through. +*/ +case OP_Filter: { /* jump */ + u64 h; + + assert( pOp->p1>0 && pOp->p1<=(p->nMem+1 - p->nCursor) ); + pIn1 = &aMem[pOp->p1]; + assert( (pIn1->flags & MEM_Blob)!=0 ); + assert( pIn1->n >= 1 ); + h = filterHash(aMem, pOp); +#ifdef SQLITE_DEBUG + if( db->flags&SQLITE_VdbeTrace ){ + int ii; + for(ii=pOp->p3; iip3+pOp->p4.i; ii++){ + registerTrace(ii, &aMem[ii]); + } + printf("hash: %llu modulo %d -> %u\n", h, pIn1->n, (int)(h%pIn1->n)); + } +#endif + h %= (pIn1->n*8); + if( (pIn1->z[h/8] & (1<<(h&7)))==0 ){ + VdbeBranchTaken(1, 2); + p->aCounter[SQLITE_STMTSTATUS_FILTER_HIT]++; + goto jump_to_p2; + }else{ + p->aCounter[SQLITE_STMTSTATUS_FILTER_MISS]++; + VdbeBranchTaken(0, 2); + } + break; +} + +/* Opcode: Trace P1 P2 * P4 * +** +** Write P4 on the statement trace output if statement tracing is +** enabled. +** +** Operand P1 must be 0x7fffffff and P2 must positive. +*/ +/* Opcode: Init P1 P2 P3 P4 * +** Synopsis: Start at P2 +** +** Programs contain a single instance of this opcode as the very first +** opcode. +** +** If tracing is enabled (by the sqlite3_trace()) interface, then +** the UTF-8 string contained in P4 is emitted on the trace callback. +** Or if P4 is blank, use the string returned by sqlite3_sql(). +** +** If P2 is not zero, jump to instruction P2. +** +** Increment the value of P1 so that OP_Once opcodes will jump the +** first time they are evaluated for this run. +** +** If P3 is not zero, then it is an address to jump to if an SQLITE_CORRUPT +** error is encountered. +*/ +case OP_Trace: +case OP_Init: { /* jump0 */ + int i; +#ifndef SQLITE_OMIT_TRACE + char *zTrace; +#endif + + /* If the P4 argument is not NULL, then it must be an SQL comment string. + ** The "--" string is broken up to prevent false-positives with srcck1.c. + ** + ** This assert() provides evidence for: + ** EVIDENCE-OF: R-50676-09860 The callback can compute the same text that + ** would have been returned by the legacy sqlite3_trace() interface by + ** using the X argument when X begins with "--" and invoking + ** sqlite3_expanded_sql(P) otherwise. + */ + assert( pOp->p4.z==0 || strncmp(pOp->p4.z, "-" "- ", 3)==0 ); + + /* OP_Init is always instruction 0 */ + assert( pOp==p->aOp || pOp->opcode==OP_Trace ); + +#ifndef SQLITE_OMIT_TRACE + if( (db->mTrace & (SQLITE_TRACE_STMT|SQLITE_TRACE_LEGACY))!=0 + && p->minWriteFileFormat!=254 /* tag-20220401a */ + && (zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0 + ){ +#ifndef SQLITE_OMIT_DEPRECATED + if( db->mTrace & SQLITE_TRACE_LEGACY ){ + char *z = sqlite3VdbeExpandSql(p, zTrace); + db->trace.xLegacy(db->pTraceArg, z); + sqlite3_free(z); + }else +#endif + if( db->nVdbeExec>1 ){ + char *z = sqlite3MPrintf(db, "-- %s", zTrace); + (void)db->trace.xV2(SQLITE_TRACE_STMT, db->pTraceArg, p, z); + sqlite3DbFree(db, z); + }else{ + (void)db->trace.xV2(SQLITE_TRACE_STMT, db->pTraceArg, p, zTrace); + } + } +#ifdef SQLITE_USE_FCNTL_TRACE + zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql); + if( zTrace ){ + int j; + for(j=0; jnDb; j++){ + if( DbMaskTest(p->btreeMask, j)==0 ) continue; + sqlite3_file_control(db, db->aDb[j].zDbSName, SQLITE_FCNTL_TRACE, zTrace); + } + } +#endif /* SQLITE_USE_FCNTL_TRACE */ +#ifdef SQLITE_DEBUG + if( (db->flags & SQLITE_SqlTrace)!=0 + && (zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0 + ){ + sqlite3DebugPrintf("SQL-trace: %s\n", zTrace); + } +#endif /* SQLITE_DEBUG */ +#endif /* SQLITE_OMIT_TRACE */ + assert( pOp->p2>0 ); + if( pOp->p1>=sqlite3GlobalConfig.iOnceResetThreshold ){ + if( pOp->opcode==OP_Trace ) break; + for(i=1; inOp; i++){ + if( p->aOp[i].opcode==OP_Once ) p->aOp[i].p1 = 0; + } + pOp->p1 = 0; + } + pOp->p1++; + p->aCounter[SQLITE_STMTSTATUS_RUN]++; + goto jump_to_p2; +} + +#ifdef SQLITE_ENABLE_CURSOR_HINTS +/* Opcode: CursorHint P1 * * P4 * +** +** Provide a hint to cursor P1 that it only needs to return rows that +** satisfy the Expr in P4. TK_REGISTER terms in the P4 expression refer +** to values currently held in registers. TK_COLUMN terms in the P4 +** expression refer to columns in the b-tree to which cursor P1 is pointing. +*/ +case OP_CursorHint: { + VdbeCursor *pC; + + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( pOp->p4type==P4_EXPR ); + pC = p->apCsr[pOp->p1]; + if( pC ){ + assert( pC->eCurType==CURTYPE_BTREE ); + sqlite3BtreeCursorHint(pC->uc.pCursor, BTREE_HINT_RANGE, + pOp->p4.pExpr, aMem); + } + break; +} +#endif /* SQLITE_ENABLE_CURSOR_HINTS */ + +#ifdef SQLITE_DEBUG +/* Opcode: Abortable * * * * * +** +** Verify that an Abort can happen. Assert if an Abort at this point +** might cause database corruption. This opcode only appears in debugging +** builds. +** +** An Abort is safe if either there have been no writes, or if there is +** an active statement journal. +*/ +case OP_Abortable: { + sqlite3VdbeAssertAbortable(p); + break; +} +#endif + +#ifdef SQLITE_DEBUG +/* Opcode: ReleaseReg P1 P2 P3 * P5 +** Synopsis: release r[P1@P2] mask P3 +** +** Release registers from service. Any content that was in the +** the registers is unreliable after this opcode completes. +** +** The registers released will be the P2 registers starting at P1, +** except if bit ii of P3 set, then do not release register P1+ii. +** In other words, P3 is a mask of registers to preserve. +** +** Releasing a register clears the Mem.pScopyFrom pointer. That means +** that if the content of the released register was set using OP_SCopy, +** a change to the value of the source register for the OP_SCopy will no longer +** generate an assertion fault in sqlite3VdbeMemAboutToChange(). +** +** If P5 is set, then all released registers have their type set +** to MEM_Undefined so that any subsequent attempt to read the released +** register (before it is reinitialized) will generate an assertion fault. +** +** P5 ought to be set on every call to this opcode. +** However, there are places in the code generator will release registers +** before their are used, under the (valid) assumption that the registers +** will not be reallocated for some other purpose before they are used and +** hence are safe to release. +** +** This opcode is only available in testing and debugging builds. It is +** not generated for release builds. The purpose of this opcode is to help +** validate the generated bytecode. This opcode does not actually contribute +** to computing an answer. +*/ +case OP_ReleaseReg: { + Mem *pMem; + int i; + u32 constMask; + assert( pOp->p1>0 ); + assert( pOp->p1+pOp->p2<=(p->nMem+1 - p->nCursor)+1 ); + pMem = &aMem[pOp->p1]; + constMask = pOp->p3; + for(i=0; ip2; i++, pMem++){ + if( i>=32 || (constMask & MASKBIT32(i))==0 ){ + pMem->pScopyFrom = 0; + if( i<32 && pOp->p5 ) MemSetTypeFlag(pMem, MEM_Undefined); + } + } + break; +} +#endif + +/* Opcode: Noop * * * * * +** +** Do nothing. Continue downward to the next opcode. +*/ +/* Opcode: Explain P1 P2 P3 P4 * +** +** This is the same as OP_Noop during normal query execution. The +** purpose of this opcode is to hold information about the query +** plan for the purpose of EXPLAIN QUERY PLAN output. +** +** The P4 value is human-readable text that describes the query plan +** element. Something like "SCAN t1" or "SEARCH t2 USING INDEX t2x1". +** +** The P1 value is the ID of the current element and P2 is the parent +** element for the case of nested query plan elements. If P2 is zero +** then this element is a top-level element. +** +** For loop elements, P3 is the estimated code of each invocation of this +** element. +** +** As with all opcodes, the meanings of the parameters for OP_Explain +** are subject to change from one release to the next. Applications +** should not attempt to interpret or use any of the information +** contained in the OP_Explain opcode. The information provided by this +** opcode is intended for testing and debugging use only. +*/ +default: { /* This is really OP_Noop, OP_Explain */ + assert( pOp->opcode==OP_Noop || pOp->opcode==OP_Explain ); + + break; +} + +/***************************************************************************** +** The cases of the switch statement above this line should all be indented +** by 6 spaces. But the left-most 6 spaces have been removed to improve the +** readability. From this point on down, the normal indentation rules are +** restored. +*****************************************************************************/ + } + +#if defined(VDBE_PROFILE) + *pnCycle += sqlite3NProfileCnt ? sqlite3NProfileCnt : sqlite3Hwtime(); + pnCycle = 0; +#elif defined(SQLITE_ENABLE_STMT_SCANSTATUS) + if( pnCycle ){ + *pnCycle += sqlite3Hwtime(); + pnCycle = 0; + } +#endif + + /* The following code adds nothing to the actual functionality + ** of the program. It is only here for testing and debugging. + ** On the other hand, it does burn CPU cycles every time through + ** the evaluator loop. So we can leave it out when NDEBUG is defined. + */ +#ifndef NDEBUG + assert( pOp>=&aOp[-1] && pOp<&aOp[p->nOp-1] ); + +#ifdef SQLITE_DEBUG + if( db->flags & SQLITE_VdbeTrace ){ + u8 opProperty = sqlite3OpcodeProperty[pOrigOp->opcode]; + if( rc!=0 ) printf("rc=%d\n",rc); + if( opProperty & (OPFLG_OUT2) ){ + registerTrace(pOrigOp->p2, &aMem[pOrigOp->p2]); + } + if( opProperty & OPFLG_OUT3 ){ + registerTrace(pOrigOp->p3, &aMem[pOrigOp->p3]); + } + if( opProperty==0xff ){ + /* Never happens. This code exists to avoid a harmless linkage + ** warning about sqlite3VdbeRegisterDump() being defined but not + ** used. */ + sqlite3VdbeRegisterDump(p); + } + } +#endif /* SQLITE_DEBUG */ +#endif /* NDEBUG */ + } /* The end of the for(;;) loop the loops through opcodes */ + + /* If we reach this point, it means that execution is finished with + ** an error of some kind. + */ +abort_due_to_error: + if( db->mallocFailed ){ + rc = SQLITE_NOMEM_BKPT; + }else if( rc==SQLITE_IOERR_CORRUPTFS ){ + rc = SQLITE_CORRUPT_BKPT; + } + assert( rc ); +#ifdef SQLITE_DEBUG + if( db->flags & SQLITE_VdbeTrace ){ + const char *zTrace = p->zSql; + if( zTrace==0 ){ + if( aOp[0].opcode==OP_Trace ){ + zTrace = aOp[0].p4.z; + } + if( zTrace==0 ) zTrace = "???"; + } + printf("ABORT-due-to-error (rc=%d): %s\n", rc, zTrace); + } +#endif + if( p->zErrMsg==0 && rc!=SQLITE_IOERR_NOMEM ){ + sqlite3VdbeError(p, "%s", sqlite3ErrStr(rc)); + } + p->rc = rc; + sqlite3SystemError(db, rc); + testcase( sqlite3GlobalConfig.xLog!=0 ); + sqlite3VdbeLogAbort(p, rc, pOp, aOp); + if( p->eVdbeState==VDBE_RUN_STATE ) sqlite3VdbeHalt(p); + if( rc==SQLITE_IOERR_NOMEM ) sqlite3OomFault(db); + if( rc==SQLITE_CORRUPT && db->autoCommit==0 ){ + db->flags |= SQLITE_CorruptRdOnly; + } + rc = SQLITE_ERROR; + if( resetSchemaOnFault>0 ){ + sqlite3ResetOneSchema(db, resetSchemaOnFault-1); + } + + /* This is the only way out of this procedure. We have to + ** release the mutexes on btrees that were acquired at the + ** top. */ +vdbe_return: +#if defined(VDBE_PROFILE) + if( pnCycle ){ + *pnCycle += sqlite3NProfileCnt ? sqlite3NProfileCnt : sqlite3Hwtime(); + pnCycle = 0; + } +#elif defined(SQLITE_ENABLE_STMT_SCANSTATUS) + if( pnCycle ){ + *pnCycle += sqlite3Hwtime(); + pnCycle = 0; + } +#endif + +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK + while( nVmStep>=nProgressLimit && db->xProgress!=0 ){ + nProgressLimit += db->nProgressOps; + if( db->xProgress(db->pProgressArg) ){ + nProgressLimit = LARGEST_UINT64; + rc = SQLITE_INTERRUPT; + goto abort_due_to_error; + } + } +#endif + p->aCounter[SQLITE_STMTSTATUS_VM_STEP] += (int)nVmStep; + if( DbMaskNonZero(p->lockMask) ){ + sqlite3VdbeLeave(p); + } + assert( rc!=SQLITE_OK || nExtraDelete==0 + || sqlite3_strlike("DELETE%",p->zSql,0)!=0 + ); + return rc; + + /* Jump to here if a string or blob larger than SQLITE_MAX_LENGTH + ** is encountered. + */ +too_big: + sqlite3VdbeError(p, "string or blob too big"); + rc = SQLITE_TOOBIG; + goto abort_due_to_error; + + /* Jump to here if a malloc() fails. + */ +no_mem: + sqlite3OomFault(db); + sqlite3VdbeError(p, "out of memory"); + rc = SQLITE_NOMEM_BKPT; + goto abort_due_to_error; + + /* Jump to here if the sqlite3_interrupt() API sets the interrupt + ** flag. + */ +abort_due_to_interrupt: + assert( AtomicLoad(&db->u1.isInterrupted) ); + rc = SQLITE_INTERRUPT; + goto abort_due_to_error; +} + + +/************** End of vdbe.c ************************************************/ +/************** Begin file vdbeblob.c ****************************************/ +/* +** 2007 May 1 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file contains code used to implement incremental BLOB I/O. +*/ + +/* #include "sqliteInt.h" */ +/* #include "vdbeInt.h" */ + +#ifndef SQLITE_OMIT_INCRBLOB + +/* +** Valid sqlite3_blob* handles point to Incrblob structures. +*/ +typedef struct Incrblob Incrblob; +struct Incrblob { + int nByte; /* Size of open blob, in bytes */ + int iOffset; /* Byte offset of blob in cursor data */ + u16 iCol; /* Table column this handle is open on */ + BtCursor *pCsr; /* Cursor pointing at blob row */ + sqlite3_stmt *pStmt; /* Statement holding cursor open */ + sqlite3 *db; /* The associated database */ + char *zDb; /* Database name */ + Table *pTab; /* Table object */ +}; + + +/* +** This function is used by both blob_open() and blob_reopen(). It seeks +** the b-tree cursor associated with blob handle p to point to row iRow. +** If successful, SQLITE_OK is returned and subsequent calls to +** sqlite3_blob_read() or sqlite3_blob_write() access the specified row. +** +** If an error occurs, or if the specified row does not exist or does not +** contain a value of type TEXT or BLOB in the column nominated when the +** blob handle was opened, then an error code is returned and *pzErr may +** be set to point to a buffer containing an error message. It is the +** responsibility of the caller to free the error message buffer using +** sqlite3DbFree(). +** +** If an error does occur, then the b-tree cursor is closed. All subsequent +** calls to sqlite3_blob_read(), blob_write() or blob_reopen() will +** immediately return SQLITE_ABORT. +*/ +static int blobSeekToRow(Incrblob *p, sqlite3_int64 iRow, char **pzErr){ + int rc; /* Error code */ + char *zErr = 0; /* Error message */ + Vdbe *v = (Vdbe *)p->pStmt; + + /* Set the value of register r[1] in the SQL statement to integer iRow. + ** This is done directly as a performance optimization + */ + sqlite3VdbeMemSetInt64(&v->aMem[1], iRow); + + /* If the statement has been run before (and is paused at the OP_ResultRow) + ** then back it up to the point where it does the OP_NotExists. This could + ** have been down with an extra OP_Goto, but simply setting the program + ** counter is faster. */ + if( v->pc>4 ){ + v->pc = 4; + assert( v->aOp[v->pc].opcode==OP_NotExists ); + rc = sqlite3VdbeExec(v); + }else{ + rc = sqlite3_step(p->pStmt); + } + if( rc==SQLITE_ROW ){ + VdbeCursor *pC = v->apCsr[0]; + u32 type; + assert( pC!=0 ); + assert( pC->eCurType==CURTYPE_BTREE ); + type = pC->nHdrParsed>p->iCol ? pC->aType[p->iCol] : 0; + testcase( pC->nHdrParsed==p->iCol ); + testcase( pC->nHdrParsed==p->iCol+1 ); + if( type<12 ){ + zErr = sqlite3MPrintf(p->db, "cannot open value of type %s", + type==0?"null": type==7?"real": "integer" + ); + rc = SQLITE_ERROR; + sqlite3_finalize(p->pStmt); + p->pStmt = 0; + }else{ + p->iOffset = pC->aType[p->iCol + pC->nField]; + p->nByte = sqlite3VdbeSerialTypeLen(type); + p->pCsr = pC->uc.pCursor; + sqlite3BtreeIncrblobCursor(p->pCsr); + } + } + + if( rc==SQLITE_ROW ){ + rc = SQLITE_OK; + }else if( p->pStmt ){ + rc = sqlite3_finalize(p->pStmt); + p->pStmt = 0; + if( rc==SQLITE_OK ){ + zErr = sqlite3MPrintf(p->db, "no such rowid: %lld", iRow); + rc = SQLITE_ERROR; + }else{ + zErr = sqlite3MPrintf(p->db, "%s", sqlite3_errmsg(p->db)); + } + } + + assert( rc!=SQLITE_OK || zErr==0 ); + assert( rc!=SQLITE_ROW && rc!=SQLITE_DONE ); + + *pzErr = zErr; + return rc; +} + +/* +** Open a blob handle. +*/ +SQLITE_API int sqlite3_blob_open( + sqlite3* db, /* The database connection */ + const char *zDb, /* The attached database containing the blob */ + const char *zTable, /* The table containing the blob */ + const char *zColumn, /* The column containing the blob */ + sqlite_int64 iRow, /* The row containing the glob */ + int wrFlag, /* True -> read/write access, false -> read-only */ + sqlite3_blob **ppBlob /* Handle for accessing the blob returned here */ +){ + int nAttempt = 0; + int iCol; /* Index of zColumn in row-record */ + int rc = SQLITE_OK; + char *zErr = 0; + Table *pTab; + Incrblob *pBlob = 0; + int iDb; + Parse sParse; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( ppBlob==0 ){ + return SQLITE_MISUSE_BKPT; + } +#endif + *ppBlob = 0; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || zTable==0 || zColumn==0 ){ + return SQLITE_MISUSE_BKPT; + } +#endif + wrFlag = !!wrFlag; /* wrFlag = (wrFlag ? 1 : 0); */ + + sqlite3_mutex_enter(db->mutex); + + pBlob = (Incrblob *)sqlite3DbMallocZero(db, sizeof(Incrblob)); + while(1){ + sqlite3ParseObjectInit(&sParse,db); + if( !pBlob ) goto blob_open_out; + sqlite3DbFree(db, zErr); + zErr = 0; + + sqlite3BtreeEnterAll(db); + pTab = sqlite3LocateTable(&sParse, 0, zTable, zDb); + if( pTab && IsVirtual(pTab) ){ + pTab = 0; + sqlite3ErrorMsg(&sParse, "cannot open virtual table: %s", zTable); + } + if( pTab && !HasRowid(pTab) ){ + pTab = 0; + sqlite3ErrorMsg(&sParse, "cannot open table without rowid: %s", zTable); + } + if( pTab && (pTab->tabFlags&TF_HasGenerated)!=0 ){ + pTab = 0; + sqlite3ErrorMsg(&sParse, "cannot open table with generated columns: %s", + zTable); + } +#ifndef SQLITE_OMIT_VIEW + if( pTab && IsView(pTab) ){ + pTab = 0; + sqlite3ErrorMsg(&sParse, "cannot open view: %s", zTable); + } +#endif + if( pTab==0 + || ((iDb = sqlite3SchemaToIndex(db, pTab->pSchema))==1 && + sqlite3OpenTempDatabase(&sParse)) + ){ + if( sParse.zErrMsg ){ + sqlite3DbFree(db, zErr); + zErr = sParse.zErrMsg; + sParse.zErrMsg = 0; + } + rc = SQLITE_ERROR; + sqlite3BtreeLeaveAll(db); + goto blob_open_out; + } + pBlob->pTab = pTab; + pBlob->zDb = db->aDb[iDb].zDbSName; + + /* Now search pTab for the exact column. */ + iCol = sqlite3ColumnIndex(pTab, zColumn); + if( iCol<0 ){ + sqlite3DbFree(db, zErr); + zErr = sqlite3MPrintf(db, "no such column: \"%s\"", zColumn); + rc = SQLITE_ERROR; + sqlite3BtreeLeaveAll(db); + goto blob_open_out; + } + + /* If the value is being opened for writing, check that the + ** column is not indexed, and that it is not part of a foreign key. + */ + if( wrFlag ){ + const char *zFault = 0; + Index *pIdx; +#ifndef SQLITE_OMIT_FOREIGN_KEY + if( db->flags&SQLITE_ForeignKeys ){ + /* Check that the column is not part of an FK child key definition. It + ** is not necessary to check if it is part of a parent key, as parent + ** key columns must be indexed. The check below will pick up this + ** case. */ + FKey *pFKey; + assert( IsOrdinaryTable(pTab) ); + for(pFKey=pTab->u.tab.pFKey; pFKey; pFKey=pFKey->pNextFrom){ + int j; + for(j=0; jnCol; j++){ + if( pFKey->aCol[j].iFrom==iCol ){ + zFault = "foreign key"; + } + } + } + } +#endif + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + int j; + for(j=0; jnKeyCol; j++){ + /* FIXME: Be smarter about indexes that use expressions */ + if( pIdx->aiColumn[j]==iCol || pIdx->aiColumn[j]==XN_EXPR ){ + zFault = "indexed"; + } + } + } + if( zFault ){ + sqlite3DbFree(db, zErr); + zErr = sqlite3MPrintf(db, "cannot open %s column for writing", zFault); + rc = SQLITE_ERROR; + sqlite3BtreeLeaveAll(db); + goto blob_open_out; + } + } + + pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(&sParse); + assert( pBlob->pStmt || db->mallocFailed ); + if( pBlob->pStmt ){ + + /* This VDBE program seeks a btree cursor to the identified + ** db/table/row entry. The reason for using a vdbe program instead + ** of writing code to use the b-tree layer directly is that the + ** vdbe program will take advantage of the various transaction, + ** locking and error handling infrastructure built into the vdbe. + ** + ** After seeking the cursor, the vdbe executes an OP_ResultRow. + ** Code external to the Vdbe then "borrows" the b-tree cursor and + ** uses it to implement the blob_read(), blob_write() and + ** blob_bytes() functions. + ** + ** The sqlite3_blob_close() function finalizes the vdbe program, + ** which closes the b-tree cursor and (possibly) commits the + ** transaction. + */ + static const int iLn = VDBE_OFFSET_LINENO(2); + static const VdbeOpList openBlob[] = { + {OP_TableLock, 0, 0, 0}, /* 0: Acquire a read or write lock */ + {OP_OpenRead, 0, 0, 0}, /* 1: Open a cursor */ + /* blobSeekToRow() will initialize r[1] to the desired rowid */ + {OP_NotExists, 0, 5, 1}, /* 2: Seek the cursor to rowid=r[1] */ + {OP_Column, 0, 0, 1}, /* 3 */ + {OP_ResultRow, 1, 0, 0}, /* 4 */ + {OP_Halt, 0, 0, 0}, /* 5 */ + }; + Vdbe *v = (Vdbe *)pBlob->pStmt; + VdbeOp *aOp; + + sqlite3VdbeAddOp4Int(v, OP_Transaction, iDb, wrFlag, + pTab->pSchema->schema_cookie, + pTab->pSchema->iGeneration); + sqlite3VdbeChangeP5(v, 1); + assert( sqlite3VdbeCurrentAddr(v)==2 || db->mallocFailed ); + aOp = sqlite3VdbeAddOpList(v, ArraySize(openBlob), openBlob, iLn); + + /* Make sure a mutex is held on the table to be accessed */ + sqlite3VdbeUsesBtree(v, iDb); + + if( db->mallocFailed==0 ){ + assert( aOp!=0 ); + /* Configure the OP_TableLock instruction */ +#ifdef SQLITE_OMIT_SHARED_CACHE + aOp[0].opcode = OP_Noop; +#else + aOp[0].p1 = iDb; + aOp[0].p2 = pTab->tnum; + aOp[0].p3 = wrFlag; + sqlite3VdbeChangeP4(v, 2, pTab->zName, P4_TRANSIENT); + } + if( db->mallocFailed==0 ){ +#endif + + /* Remove either the OP_OpenWrite or OpenRead. Set the P2 + ** parameter of the other to pTab->tnum. */ + if( wrFlag ) aOp[1].opcode = OP_OpenWrite; + aOp[1].p2 = pTab->tnum; + aOp[1].p3 = iDb; + + /* Configure the number of columns. Configure the cursor to + ** think that the table has one more column than it really + ** does. An OP_Column to retrieve this imaginary column will + ** always return an SQL NULL. This is useful because it means + ** we can invoke OP_Column to fill in the vdbe cursors type + ** and offset cache without causing any IO. + */ + aOp[1].p4type = P4_INT32; + aOp[1].p4.i = pTab->nCol+1; + aOp[3].p2 = pTab->nCol; + + sParse.nVar = 0; + sParse.nMem = 1; + sParse.nTab = 1; + sqlite3VdbeMakeReady(v, &sParse); + } + } + + pBlob->iCol = iCol; + pBlob->db = db; + sqlite3BtreeLeaveAll(db); + if( db->mallocFailed ){ + goto blob_open_out; + } + rc = blobSeekToRow(pBlob, iRow, &zErr); + if( (++nAttempt)>=SQLITE_MAX_SCHEMA_RETRY || rc!=SQLITE_SCHEMA ) break; + sqlite3ParseObjectReset(&sParse); + } + +blob_open_out: + if( rc==SQLITE_OK && db->mallocFailed==0 ){ + *ppBlob = (sqlite3_blob *)pBlob; + }else{ + if( pBlob && pBlob->pStmt ) sqlite3VdbeFinalize((Vdbe *)pBlob->pStmt); + sqlite3DbFree(db, pBlob); + } + sqlite3ErrorWithMsg(db, rc, (zErr ? "%s" : (char*)0), zErr); + sqlite3DbFree(db, zErr); + sqlite3ParseObjectReset(&sParse); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/* +** Close a blob handle that was previously created using +** sqlite3_blob_open(). +*/ +SQLITE_API int sqlite3_blob_close(sqlite3_blob *pBlob){ + Incrblob *p = (Incrblob *)pBlob; + int rc; + sqlite3 *db; + + if( p ){ + sqlite3_stmt *pStmt = p->pStmt; + db = p->db; + sqlite3_mutex_enter(db->mutex); + sqlite3DbFree(db, p); + sqlite3_mutex_leave(db->mutex); + rc = sqlite3_finalize(pStmt); + }else{ + rc = SQLITE_OK; + } + return rc; +} + +/* +** Perform a read or write operation on a blob +*/ +static int blobReadWrite( + sqlite3_blob *pBlob, + void *z, + int n, + int iOffset, + int (*xCall)(BtCursor*, u32, u32, void*) +){ + int rc = SQLITE_OK; + Incrblob *p = (Incrblob *)pBlob; + Vdbe *v; + sqlite3 *db; + + if( p==0 ) return SQLITE_MISUSE_BKPT; + db = p->db; + sqlite3_mutex_enter(db->mutex); + v = (Vdbe*)p->pStmt; + + if( n<0 || iOffset<0 || ((sqlite3_int64)iOffset+n)>p->nByte ){ + /* Request is out of range. Return a transient error. */ + rc = SQLITE_ERROR; + }else if( v==0 ){ + /* If there is no statement handle, then the blob-handle has + ** already been invalidated. Return SQLITE_ABORT in this case. + */ + rc = SQLITE_ABORT; + }else{ + /* Call either BtreeData() or BtreePutData(). If SQLITE_ABORT is + ** returned, clean-up the statement handle. + */ + assert( db == v->db ); + sqlite3BtreeEnterCursor(p->pCsr); + +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + if( xCall==sqlite3BtreePutData && db->xPreUpdateCallback ){ + /* If a pre-update hook is registered and this is a write cursor, + ** invoke it here. + ** + ** TODO: The preupdate-hook is passed SQLITE_DELETE, even though this + ** operation should really be an SQLITE_UPDATE. This is probably + ** incorrect, but is convenient because at this point the new.* values + ** are not easily obtainable. And for the sessions module, an + ** SQLITE_UPDATE where the PK columns do not change is handled in the + ** same way as an SQLITE_DELETE (the SQLITE_DELETE code is actually + ** slightly more efficient). Since you cannot write to a PK column + ** using the incremental-blob API, this works. For the sessions module + ** anyhow. + */ + if( sqlite3BtreeCursorIsValidNN(p->pCsr)==0 ){ + /* If the cursor is not currently valid, try to reseek it. This + ** always either fails or finds the correct row - the cursor will + ** have been marked permanently CURSOR_INVALID if the open row has + ** been deleted. */ + int bDiff = 0; + rc = sqlite3BtreeCursorRestore(p->pCsr, &bDiff); + assert( bDiff==0 || sqlite3BtreeCursorIsValidNN(p->pCsr)==0 ); + } + if( sqlite3BtreeCursorIsValidNN(p->pCsr) ){ + sqlite3_int64 iKey; + iKey = sqlite3BtreeIntegerKey(p->pCsr); + assert( v->apCsr[0]!=0 ); + assert( v->apCsr[0]->eCurType==CURTYPE_BTREE ); + sqlite3VdbePreUpdateHook( + v, v->apCsr[0], SQLITE_DELETE, p->zDb, p->pTab, iKey, -1, p->iCol + ); + } + } + if( rc==SQLITE_OK ){ + rc = xCall(p->pCsr, iOffset+p->iOffset, n, z); + } +#else + rc = xCall(p->pCsr, iOffset+p->iOffset, n, z); +#endif + + sqlite3BtreeLeaveCursor(p->pCsr); + if( rc==SQLITE_ABORT ){ + sqlite3VdbeFinalize(v); + p->pStmt = 0; + }else{ + v->rc = rc; + } + } + sqlite3Error(db, rc); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/* +** Read data from a blob handle. +*/ +SQLITE_API int sqlite3_blob_read(sqlite3_blob *pBlob, void *z, int n, int iOffset){ + return blobReadWrite(pBlob, z, n, iOffset, sqlite3BtreePayloadChecked); +} + +/* +** Write data to a blob handle. +*/ +SQLITE_API int sqlite3_blob_write(sqlite3_blob *pBlob, const void *z, int n, int iOffset){ + return blobReadWrite(pBlob, (void *)z, n, iOffset, sqlite3BtreePutData); +} + +/* +** Query a blob handle for the size of the data. +** +** The Incrblob.nByte field is fixed for the lifetime of the Incrblob +** so no mutex is required for access. +*/ +SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *pBlob){ + Incrblob *p = (Incrblob *)pBlob; + return (p && p->pStmt) ? p->nByte : 0; +} + +/* +** Move an existing blob handle to point to a different row of the same +** database table. +** +** If an error occurs, or if the specified row does not exist or does not +** contain a blob or text value, then an error code is returned and the +** database handle error code and message set. If this happens, then all +** subsequent calls to sqlite3_blob_xxx() functions (except blob_close()) +** immediately return SQLITE_ABORT. +*/ +SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iRow){ + int rc; + Incrblob *p = (Incrblob *)pBlob; + sqlite3 *db; + + if( p==0 ) return SQLITE_MISUSE_BKPT; + db = p->db; + sqlite3_mutex_enter(db->mutex); + + if( p->pStmt==0 ){ + /* If there is no statement handle, then the blob-handle has + ** already been invalidated. Return SQLITE_ABORT in this case. + */ + rc = SQLITE_ABORT; + }else{ + char *zErr; + ((Vdbe*)p->pStmt)->rc = SQLITE_OK; + rc = blobSeekToRow(p, iRow, &zErr); + if( rc!=SQLITE_OK ){ + sqlite3ErrorWithMsg(db, rc, (zErr ? "%s" : (char*)0), zErr); + sqlite3DbFree(db, zErr); + } + assert( rc!=SQLITE_SCHEMA ); + } + + rc = sqlite3ApiExit(db, rc); + assert( rc==SQLITE_OK || p->pStmt==0 ); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +#endif /* #ifndef SQLITE_OMIT_INCRBLOB */ + +/************** End of vdbeblob.c ********************************************/ +/************** Begin file vdbesort.c ****************************************/ +/* +** 2011-07-09 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code for the VdbeSorter object, used in concert with +** a VdbeCursor to sort large numbers of keys for CREATE INDEX statements +** or by SELECT statements with ORDER BY clauses that cannot be satisfied +** using indexes and without LIMIT clauses. +** +** The VdbeSorter object implements a multi-threaded external merge sort +** algorithm that is efficient even if the number of elements being sorted +** exceeds the available memory. +** +** Here is the (internal, non-API) interface between this module and the +** rest of the SQLite system: +** +** sqlite3VdbeSorterInit() Create a new VdbeSorter object. +** +** sqlite3VdbeSorterWrite() Add a single new row to the VdbeSorter +** object. The row is a binary blob in the +** OP_MakeRecord format that contains both +** the ORDER BY key columns and result columns +** in the case of a SELECT w/ ORDER BY, or +** the complete record for an index entry +** in the case of a CREATE INDEX. +** +** sqlite3VdbeSorterRewind() Sort all content previously added. +** Position the read cursor on the +** first sorted element. +** +** sqlite3VdbeSorterNext() Advance the read cursor to the next sorted +** element. +** +** sqlite3VdbeSorterRowkey() Return the complete binary blob for the +** row currently under the read cursor. +** +** sqlite3VdbeSorterCompare() Compare the binary blob for the row +** currently under the read cursor against +** another binary blob X and report if +** X is strictly less than the read cursor. +** Used to enforce uniqueness in a +** CREATE UNIQUE INDEX statement. +** +** sqlite3VdbeSorterClose() Close the VdbeSorter object and reclaim +** all resources. +** +** sqlite3VdbeSorterReset() Refurbish the VdbeSorter for reuse. This +** is like Close() followed by Init() only +** much faster. +** +** The interfaces above must be called in a particular order. Write() can +** only occur in between Init()/Reset() and Rewind(). Next(), Rowkey(), and +** Compare() can only occur in between Rewind() and Close()/Reset(). i.e. +** +** Init() +** for each record: Write() +** Rewind() +** Rowkey()/Compare() +** Next() +** Close() +** +** Algorithm: +** +** Records passed to the sorter via calls to Write() are initially held +** unsorted in main memory. Assuming the amount of memory used never exceeds +** a threshold, when Rewind() is called the set of records is sorted using +** an in-memory merge sort. In this case, no temporary files are required +** and subsequent calls to Rowkey(), Next() and Compare() read records +** directly from main memory. +** +** If the amount of space used to store records in main memory exceeds the +** threshold, then the set of records currently in memory are sorted and +** written to a temporary file in "Packed Memory Array" (PMA) format. +** A PMA created at this point is known as a "level-0 PMA". Higher levels +** of PMAs may be created by merging existing PMAs together - for example +** merging two or more level-0 PMAs together creates a level-1 PMA. +** +** The threshold for the amount of main memory to use before flushing +** records to a PMA is roughly the same as the limit configured for the +** page-cache of the main database. Specifically, the threshold is set to +** the value returned by "PRAGMA main.page_size" multiplied by +** that returned by "PRAGMA main.cache_size", in bytes. +** +** If the sorter is running in single-threaded mode, then all PMAs generated +** are appended to a single temporary file. Or, if the sorter is running in +** multi-threaded mode then up to (N+1) temporary files may be opened, where +** N is the configured number of worker threads. In this case, instead of +** sorting the records and writing the PMA to a temporary file itself, the +** calling thread usually launches a worker thread to do so. Except, if +** there are already N worker threads running, the main thread does the work +** itself. +** +** The sorter is running in multi-threaded mode if (a) the library was built +** with pre-processor symbol SQLITE_MAX_WORKER_THREADS set to a value greater +** than zero, and (b) worker threads have been enabled at runtime by calling +** "PRAGMA threads=N" with some value of N greater than 0. +** +** When Rewind() is called, any data remaining in memory is flushed to a +** final PMA. So at this point the data is stored in some number of sorted +** PMAs within temporary files on disk. +** +** If there are fewer than SORTER_MAX_MERGE_COUNT PMAs in total and the +** sorter is running in single-threaded mode, then these PMAs are merged +** incrementally as keys are retrieved from the sorter by the VDBE. The +** MergeEngine object, described in further detail below, performs this +** merge. +** +** Or, if running in multi-threaded mode, then a background thread is +** launched to merge the existing PMAs. Once the background thread has +** merged T bytes of data into a single sorted PMA, the main thread +** begins reading keys from that PMA while the background thread proceeds +** with merging the next T bytes of data. And so on. +** +** Parameter T is set to half the value of the memory threshold used +** by Write() above to determine when to create a new PMA. +** +** If there are more than SORTER_MAX_MERGE_COUNT PMAs in total when +** Rewind() is called, then a hierarchy of incremental-merges is used. +** First, T bytes of data from the first SORTER_MAX_MERGE_COUNT PMAs on +** disk are merged together. Then T bytes of data from the second set, and +** so on, such that no operation ever merges more than SORTER_MAX_MERGE_COUNT +** PMAs at a time. This done is to improve locality. +** +** If running in multi-threaded mode and there are more than +** SORTER_MAX_MERGE_COUNT PMAs on disk when Rewind() is called, then more +** than one background thread may be created. Specifically, there may be +** one background thread for each temporary file on disk, and one background +** thread to merge the output of each of the others to a single PMA for +** the main thread to read from. +*/ +/* #include "sqliteInt.h" */ +/* #include "vdbeInt.h" */ + +/* +** If SQLITE_DEBUG_SORTER_THREADS is defined, this module outputs various +** messages to stderr that may be helpful in understanding the performance +** characteristics of the sorter in multi-threaded mode. +*/ +#if 0 +# define SQLITE_DEBUG_SORTER_THREADS 1 +#endif + +/* +** Hard-coded maximum amount of data to accumulate in memory before flushing +** to a level 0 PMA. The purpose of this limit is to prevent various integer +** overflows. 512MiB. +*/ +#define SQLITE_MAX_PMASZ (1<<29) + +/* +** Private objects used by the sorter +*/ +typedef struct MergeEngine MergeEngine; /* Merge PMAs together */ +typedef struct PmaReader PmaReader; /* Incrementally read one PMA */ +typedef struct PmaWriter PmaWriter; /* Incrementally write one PMA */ +typedef struct SorterRecord SorterRecord; /* A record being sorted */ +typedef struct SortSubtask SortSubtask; /* A sub-task in the sort process */ +typedef struct SorterFile SorterFile; /* Temporary file object wrapper */ +typedef struct SorterList SorterList; /* In-memory list of records */ +typedef struct IncrMerger IncrMerger; /* Read & merge multiple PMAs */ + +/* +** A container for a temp file handle and the current amount of data +** stored in the file. +*/ +struct SorterFile { + sqlite3_file *pFd; /* File handle */ + i64 iEof; /* Bytes of data stored in pFd */ +}; + +/* +** An in-memory list of objects to be sorted. +** +** If aMemory==0 then each object is allocated separately and the objects +** are connected using SorterRecord.u.pNext. If aMemory!=0 then all objects +** are stored in the aMemory[] bulk memory, one right after the other, and +** are connected using SorterRecord.u.iNext. +*/ +struct SorterList { + SorterRecord *pList; /* Linked list of records */ + u8 *aMemory; /* If non-NULL, bulk memory to hold pList */ + i64 szPMA; /* Size of pList as PMA in bytes */ +}; + +/* +** The MergeEngine object is used to combine two or more smaller PMAs into +** one big PMA using a merge operation. Separate PMAs all need to be +** combined into one big PMA in order to be able to step through the sorted +** records in order. +** +** The aReadr[] array contains a PmaReader object for each of the PMAs being +** merged. An aReadr[] object either points to a valid key or else is at EOF. +** ("EOF" means "End Of File". When aReadr[] is at EOF there is no more data.) +** For the purposes of the paragraphs below, we assume that the array is +** actually N elements in size, where N is the smallest power of 2 greater +** to or equal to the number of PMAs being merged. The extra aReadr[] elements +** are treated as if they are empty (always at EOF). +** +** The aTree[] array is also N elements in size. The value of N is stored in +** the MergeEngine.nTree variable. +** +** The final (N/2) elements of aTree[] contain the results of comparing +** pairs of PMA keys together. Element i contains the result of +** comparing aReadr[2*i-N] and aReadr[2*i-N+1]. Whichever key is smaller, the +** aTree element is set to the index of it. +** +** For the purposes of this comparison, EOF is considered greater than any +** other key value. If the keys are equal (only possible with two EOF +** values), it doesn't matter which index is stored. +** +** The (N/4) elements of aTree[] that precede the final (N/2) described +** above contains the index of the smallest of each block of 4 PmaReaders +** And so on. So that aTree[1] contains the index of the PmaReader that +** currently points to the smallest key value. aTree[0] is unused. +** +** Example: +** +** aReadr[0] -> Banana +** aReadr[1] -> Feijoa +** aReadr[2] -> Elderberry +** aReadr[3] -> Currant +** aReadr[4] -> Grapefruit +** aReadr[5] -> Apple +** aReadr[6] -> Durian +** aReadr[7] -> EOF +** +** aTree[] = { X, 5 0, 5 0, 3, 5, 6 } +** +** The current element is "Apple" (the value of the key indicated by +** PmaReader 5). When the Next() operation is invoked, PmaReader 5 will +** be advanced to the next key in its segment. Say the next key is +** "Eggplant": +** +** aReadr[5] -> Eggplant +** +** The contents of aTree[] are updated first by comparing the new PmaReader +** 5 key to the current key of PmaReader 4 (still "Grapefruit"). The PmaReader +** 5 value is still smaller, so aTree[6] is set to 5. And so on up the tree. +** The value of PmaReader 6 - "Durian" - is now smaller than that of PmaReader +** 5, so aTree[3] is set to 6. Key 0 is smaller than key 6 (Bananafile2. And instead of using a +** background thread to prepare data for the PmaReader, with a single +** threaded IncrMerger the allocate part of pTask->file2 is "refilled" with +** keys from pMerger by the calling thread whenever the PmaReader runs out +** of data. +*/ +struct IncrMerger { + SortSubtask *pTask; /* Task that owns this merger */ + MergeEngine *pMerger; /* Merge engine thread reads data from */ + i64 iStartOff; /* Offset to start writing file at */ + int mxSz; /* Maximum bytes of data to store */ + int bEof; /* Set to true when merge is finished */ + int bUseThread; /* True to use a bg thread for this object */ + SorterFile aFile[2]; /* aFile[0] for reading, [1] for writing */ +}; + +/* +** An instance of this object is used for writing a PMA. +** +** The PMA is written one record at a time. Each record is of an arbitrary +** size. But I/O is more efficient if it occurs in page-sized blocks where +** each block is aligned on a page boundary. This object caches writes to +** the PMA so that aligned, page-size blocks are written. +*/ +struct PmaWriter { + int eFWErr; /* Non-zero if in an error state */ + u8 *aBuffer; /* Pointer to write buffer */ + int nBuffer; /* Size of write buffer in bytes */ + int iBufStart; /* First byte of buffer to write */ + int iBufEnd; /* Last byte of buffer to write */ + i64 iWriteOff; /* Offset of start of buffer in file */ + sqlite3_file *pFd; /* File handle to write to */ + u64 nPmaSpill; /* Total number of bytes written */ +}; + +/* +** This object is the header on a single record while that record is being +** held in memory and prior to being written out as part of a PMA. +** +** How the linked list is connected depends on how memory is being managed +** by this module. If using a separate allocation for each in-memory record +** (VdbeSorter.list.aMemory==0), then the list is always connected using the +** SorterRecord.u.pNext pointers. +** +** Or, if using the single large allocation method (VdbeSorter.list.aMemory!=0), +** then while records are being accumulated the list is linked using the +** SorterRecord.u.iNext offset. This is because the aMemory[] array may +** be sqlite3Realloc()ed while records are being accumulated. Once the VM +** has finished passing records to the sorter, or when the in-memory buffer +** is full, the list is sorted. As part of the sorting process, it is +** converted to use the SorterRecord.u.pNext pointers. See function +** vdbeSorterSort() for details. +*/ +struct SorterRecord { + int nVal; /* Size of the record in bytes */ + union { + SorterRecord *pNext; /* Pointer to next record in list */ + int iNext; /* Offset within aMemory of next record */ + } u; + /* The data for the record immediately follows this header */ +}; + +/* Return a pointer to the buffer containing the record data for SorterRecord +** object p. Should be used as if: +** +** void *SRVAL(SorterRecord *p) { return (void*)&p[1]; } +*/ +#define SRVAL(p) ((void*)((SorterRecord*)(p) + 1)) + + +/* Maximum number of PMAs that a single MergeEngine can merge */ +#define SORTER_MAX_MERGE_COUNT 16 + +static int vdbeIncrSwap(IncrMerger*); +static void vdbeIncrFree(IncrMerger *); + +/* +** Free all memory belonging to the PmaReader object passed as the +** argument. All structure fields are set to zero before returning. +*/ +static void vdbePmaReaderClear(PmaReader *pReadr){ + sqlite3_free(pReadr->aAlloc); + sqlite3_free(pReadr->aBuffer); + if( pReadr->aMap ) sqlite3OsUnfetch(pReadr->pFd, 0, pReadr->aMap); + vdbeIncrFree(pReadr->pIncr); + memset(pReadr, 0, sizeof(PmaReader)); +} + +/* +** Read the next nByte bytes of data from the PMA p. +** If successful, set *ppOut to point to a buffer containing the data +** and return SQLITE_OK. Otherwise, if an error occurs, return an SQLite +** error code. +** +** The buffer returned in *ppOut is only valid until the +** next call to this function. +*/ +static int vdbePmaReadBlob( + PmaReader *p, /* PmaReader from which to take the blob */ + int nByte, /* Bytes of data to read */ + u8 **ppOut /* OUT: Pointer to buffer containing data */ +){ + int iBuf; /* Offset within buffer to read from */ + int nAvail; /* Bytes of data available in buffer */ + + if( p->aMap ){ + *ppOut = &p->aMap[p->iReadOff]; + p->iReadOff += nByte; + return SQLITE_OK; + } + + assert( p->aBuffer ); + + /* If there is no more data to be read from the buffer, read the next + ** p->nBuffer bytes of data from the file into it. Or, if there are less + ** than p->nBuffer bytes remaining in the PMA, read all remaining data. */ + iBuf = p->iReadOff % p->nBuffer; + if( iBuf==0 ){ + int nRead; /* Bytes to read from disk */ + int rc; /* sqlite3OsRead() return code */ + + /* Determine how many bytes of data to read. */ + if( (p->iEof - p->iReadOff) > (i64)p->nBuffer ){ + nRead = p->nBuffer; + }else{ + nRead = (int)(p->iEof - p->iReadOff); + } + assert( nRead>0 ); + + /* Readr data from the file. Return early if an error occurs. */ + rc = sqlite3OsRead(p->pFd, p->aBuffer, nRead, p->iReadOff); + assert( rc!=SQLITE_IOERR_SHORT_READ ); + if( rc!=SQLITE_OK ) return rc; + } + nAvail = p->nBuffer - iBuf; + + if( nByte<=nAvail ){ + /* The requested data is available in the in-memory buffer. In this + ** case there is no need to make a copy of the data, just return a + ** pointer into the buffer to the caller. */ + *ppOut = &p->aBuffer[iBuf]; + p->iReadOff += nByte; + }else{ + /* The requested data is not all available in the in-memory buffer. + ** In this case, allocate space at p->aAlloc[] to copy the requested + ** range into. Then return a copy of pointer p->aAlloc to the caller. */ + int nRem; /* Bytes remaining to copy */ + + /* Extend the p->aAlloc[] allocation if required. */ + if( p->nAllocnAlloc); + while( nByte>nNew ) nNew = nNew*2; + aNew = sqlite3Realloc(p->aAlloc, nNew); + if( !aNew ) return SQLITE_NOMEM_BKPT; + p->nAlloc = nNew; + p->aAlloc = aNew; + } + + /* Copy as much data as is available in the buffer into the start of + ** p->aAlloc[]. */ + memcpy(p->aAlloc, &p->aBuffer[iBuf], nAvail); + p->iReadOff += nAvail; + nRem = nByte - nAvail; + + /* The following loop copies up to p->nBuffer bytes per iteration into + ** the p->aAlloc[] buffer. */ + while( nRem>0 ){ + int rc; /* vdbePmaReadBlob() return code */ + int nCopy; /* Number of bytes to copy */ + u8 *aNext = 0; /* Pointer to buffer to copy data from */ + + nCopy = nRem; + if( nRem>p->nBuffer ) nCopy = p->nBuffer; + rc = vdbePmaReadBlob(p, nCopy, &aNext); + if( rc!=SQLITE_OK ) return rc; + assert( aNext!=p->aAlloc ); + assert( aNext!=0 ); + memcpy(&p->aAlloc[nByte - nRem], aNext, nCopy); + nRem -= nCopy; + } + + *ppOut = p->aAlloc; + } + + return SQLITE_OK; +} + +/* +** Read a varint from the stream of data accessed by p. Set *pnOut to +** the value read. +*/ +static int vdbePmaReadVarint(PmaReader *p, u64 *pnOut){ + int iBuf; + + if( p->aMap ){ + p->iReadOff += sqlite3GetVarint(&p->aMap[p->iReadOff], pnOut); + }else{ + iBuf = p->iReadOff % p->nBuffer; + if( iBuf && (p->nBuffer-iBuf)>=9 ){ + p->iReadOff += sqlite3GetVarint(&p->aBuffer[iBuf], pnOut); + }else{ + u8 aVarint[16], *a; + int i = 0, rc; + do{ + rc = vdbePmaReadBlob(p, 1, &a); + if( rc ) return rc; + aVarint[(i++)&0xf] = a[0]; + }while( (a[0]&0x80)!=0 ); + sqlite3GetVarint(aVarint, pnOut); + } + } + + return SQLITE_OK; +} + +/* +** Attempt to memory map file pFile. If successful, set *pp to point to the +** new mapping and return SQLITE_OK. If the mapping is not attempted +** (because the file is too large or the VFS layer is configured not to use +** mmap), return SQLITE_OK and set *pp to NULL. +** +** Or, if an error occurs, return an SQLite error code. The final value of +** *pp is undefined in this case. +*/ +static int vdbeSorterMapFile(SortSubtask *pTask, SorterFile *pFile, u8 **pp){ + int rc = SQLITE_OK; + if( pFile->iEof<=(i64)(pTask->pSorter->db->nMaxSorterMmap) ){ + sqlite3_file *pFd = pFile->pFd; + if( pFd->pMethods->iVersion>=3 ){ + rc = sqlite3OsFetch(pFd, 0, (int)pFile->iEof, (void**)pp); + testcase( rc!=SQLITE_OK ); + } + } + return rc; +} + +/* +** Attach PmaReader pReadr to file pFile (if it is not already attached to +** that file) and seek it to offset iOff within the file. Return SQLITE_OK +** if successful, or an SQLite error code if an error occurs. +*/ +static int vdbePmaReaderSeek( + SortSubtask *pTask, /* Task context */ + PmaReader *pReadr, /* Reader whose cursor is to be moved */ + SorterFile *pFile, /* Sorter file to read from */ + i64 iOff /* Offset in pFile */ +){ + int rc = SQLITE_OK; + + assert( pReadr->pIncr==0 || pReadr->pIncr->bEof==0 ); + + if( sqlite3FaultSim(201) ) return SQLITE_IOERR_READ; + if( pReadr->aMap ){ + sqlite3OsUnfetch(pReadr->pFd, 0, pReadr->aMap); + pReadr->aMap = 0; + } + pReadr->iReadOff = iOff; + pReadr->iEof = pFile->iEof; + pReadr->pFd = pFile->pFd; + + rc = vdbeSorterMapFile(pTask, pFile, &pReadr->aMap); + if( rc==SQLITE_OK && pReadr->aMap==0 ){ + int pgsz = pTask->pSorter->pgsz; + int iBuf = pReadr->iReadOff % pgsz; + if( pReadr->aBuffer==0 ){ + pReadr->aBuffer = (u8*)sqlite3Malloc(pgsz); + if( pReadr->aBuffer==0 ) rc = SQLITE_NOMEM_BKPT; + pReadr->nBuffer = pgsz; + } + if( rc==SQLITE_OK && iBuf ){ + int nRead = pgsz - iBuf; + if( (pReadr->iReadOff + nRead) > pReadr->iEof ){ + nRead = (int)(pReadr->iEof - pReadr->iReadOff); + } + rc = sqlite3OsRead( + pReadr->pFd, &pReadr->aBuffer[iBuf], nRead, pReadr->iReadOff + ); + testcase( rc!=SQLITE_OK ); + } + } + + return rc; +} + +/* +** Advance PmaReader pReadr to the next key in its PMA. Return SQLITE_OK if +** no error occurs, or an SQLite error code if one does. +*/ +static int vdbePmaReaderNext(PmaReader *pReadr){ + int rc = SQLITE_OK; /* Return Code */ + u64 nRec = 0; /* Size of record in bytes */ + + + if( pReadr->iReadOff>=pReadr->iEof ){ + IncrMerger *pIncr = pReadr->pIncr; + int bEof = 1; + if( pIncr ){ + rc = vdbeIncrSwap(pIncr); + if( rc==SQLITE_OK && pIncr->bEof==0 ){ + rc = vdbePmaReaderSeek( + pIncr->pTask, pReadr, &pIncr->aFile[0], pIncr->iStartOff + ); + bEof = 0; + } + } + + if( bEof ){ + /* This is an EOF condition */ + vdbePmaReaderClear(pReadr); + testcase( rc!=SQLITE_OK ); + return rc; + } + } + + if( rc==SQLITE_OK ){ + rc = vdbePmaReadVarint(pReadr, &nRec); + } + if( rc==SQLITE_OK ){ + pReadr->nKey = (int)nRec; + rc = vdbePmaReadBlob(pReadr, (int)nRec, &pReadr->aKey); + testcase( rc!=SQLITE_OK ); + } + + return rc; +} + +/* +** Initialize PmaReader pReadr to scan through the PMA stored in file pFile +** starting at offset iStart and ending at offset iEof-1. This function +** leaves the PmaReader pointing to the first key in the PMA (or EOF if the +** PMA is empty). +** +** If the pnByte parameter is NULL, then it is assumed that the file +** contains a single PMA, and that that PMA omits the initial length varint. +*/ +static int vdbePmaReaderInit( + SortSubtask *pTask, /* Task context */ + SorterFile *pFile, /* Sorter file to read from */ + i64 iStart, /* Start offset in pFile */ + PmaReader *pReadr, /* PmaReader to populate */ + i64 *pnByte /* IN/OUT: Increment this value by PMA size */ +){ + int rc; + + assert( pFile->iEof>iStart ); + assert( pReadr->aAlloc==0 && pReadr->nAlloc==0 ); + assert( pReadr->aBuffer==0 ); + assert( pReadr->aMap==0 ); + + rc = vdbePmaReaderSeek(pTask, pReadr, pFile, iStart); + if( rc==SQLITE_OK ){ + u64 nByte = 0; /* Size of PMA in bytes */ + rc = vdbePmaReadVarint(pReadr, &nByte); + pReadr->iEof = pReadr->iReadOff + nByte; + *pnByte += nByte; + } + + if( rc==SQLITE_OK ){ + rc = vdbePmaReaderNext(pReadr); + } + return rc; +} + +/* +** A version of vdbeSorterCompare() that assumes that it has already been +** determined that the first field of key1 is equal to the first field of +** key2. +*/ +static int vdbeSorterCompareTail( + SortSubtask *pTask, /* Subtask context (for pKeyInfo) */ + int *pbKey2Cached, /* True if pTask->pUnpacked is pKey2 */ + const void *pKey1, int nKey1, /* Left side of comparison */ + const void *pKey2, int nKey2 /* Right side of comparison */ +){ + UnpackedRecord *r2 = pTask->pUnpacked; + if( *pbKey2Cached==0 ){ + sqlite3VdbeRecordUnpack(nKey2, pKey2, r2); + *pbKey2Cached = 1; + } + return sqlite3VdbeRecordCompareWithSkip(nKey1, pKey1, r2, 1); +} + +/* +** Compare key1 (buffer pKey1, size nKey1 bytes) with key2 (buffer pKey2, +** size nKey2 bytes). Use (pTask->pKeyInfo) for the collation sequences +** used by the comparison. Return the result of the comparison. +** +** If IN/OUT parameter *pbKey2Cached is true when this function is called, +** it is assumed that (pTask->pUnpacked) contains the unpacked version +** of key2. If it is false, (pTask->pUnpacked) is populated with the unpacked +** version of key2 and *pbKey2Cached set to true before returning. +** +** If an OOM error is encountered, (pTask->pUnpacked->error_rc) is set +** to SQLITE_NOMEM. +*/ +static int vdbeSorterCompare( + SortSubtask *pTask, /* Subtask context (for pKeyInfo) */ + int *pbKey2Cached, /* True if pTask->pUnpacked is pKey2 */ + const void *pKey1, int nKey1, /* Left side of comparison */ + const void *pKey2, int nKey2 /* Right side of comparison */ +){ + UnpackedRecord *r2 = pTask->pUnpacked; + if( !*pbKey2Cached ){ + sqlite3VdbeRecordUnpack(nKey2, pKey2, r2); + *pbKey2Cached = 1; + } + return sqlite3VdbeRecordCompare(nKey1, pKey1, r2); +} + +/* +** A specially optimized version of vdbeSorterCompare() that assumes that +** the first field of each key is a TEXT value and that the collation +** sequence to compare them with is BINARY. +*/ +static int vdbeSorterCompareText( + SortSubtask *pTask, /* Subtask context (for pKeyInfo) */ + int *pbKey2Cached, /* True if pTask->pUnpacked is pKey2 */ + const void *pKey1, int nKey1, /* Left side of comparison */ + const void *pKey2, int nKey2 /* Right side of comparison */ +){ + const u8 * const p1 = (const u8 * const)pKey1; + const u8 * const p2 = (const u8 * const)pKey2; + const u8 * const v1 = &p1[ p1[0] ]; /* Pointer to value 1 */ + const u8 * const v2 = &p2[ p2[0] ]; /* Pointer to value 2 */ + + int n1; + int n2; + int res; + + getVarint32NR(&p1[1], n1); + getVarint32NR(&p2[1], n2); + res = memcmp(v1, v2, (MIN(n1, n2) - 13)/2); + if( res==0 ){ + res = n1 - n2; + } + + if( res==0 ){ + if( pTask->pSorter->pKeyInfo->nKeyField>1 ){ + res = vdbeSorterCompareTail( + pTask, pbKey2Cached, pKey1, nKey1, pKey2, nKey2 + ); + } + }else{ + assert( pTask->pSorter->pKeyInfo->aSortFlags!=0 ); + assert( !(pTask->pSorter->pKeyInfo->aSortFlags[0]&KEYINFO_ORDER_BIGNULL) ); + if( pTask->pSorter->pKeyInfo->aSortFlags[0] ){ + res = res * -1; + } + } + + return res; +} + +/* +** A specially optimized version of vdbeSorterCompare() that assumes that +** the first field of each key is an INTEGER value. +*/ +static int vdbeSorterCompareInt( + SortSubtask *pTask, /* Subtask context (for pKeyInfo) */ + int *pbKey2Cached, /* True if pTask->pUnpacked is pKey2 */ + const void *pKey1, int nKey1, /* Left side of comparison */ + const void *pKey2, int nKey2 /* Right side of comparison */ +){ + const u8 * const p1 = (const u8 * const)pKey1; + const u8 * const p2 = (const u8 * const)pKey2; + const int s1 = p1[1]; /* Left hand serial type */ + const int s2 = p2[1]; /* Right hand serial type */ + const u8 * const v1 = &p1[ p1[0] ]; /* Pointer to value 1 */ + const u8 * const v2 = &p2[ p2[0] ]; /* Pointer to value 2 */ + int res; /* Return value */ + + assert( (s1>0 && s1<7) || s1==8 || s1==9 ); + assert( (s2>0 && s2<7) || s2==8 || s2==9 ); + + if( s1==s2 ){ + /* The two values have the same sign. Compare using memcmp(). */ + static const u8 aLen[] = {0, 1, 2, 3, 4, 6, 8, 0, 0, 0 }; + const u8 n = aLen[s1]; + int i; + res = 0; + for(i=0; i7 && s2>7 ){ + res = s1 - s2; + }else{ + if( s2>7 ){ + res = +1; + }else if( s1>7 ){ + res = -1; + }else{ + res = s1 - s2; + } + assert( res!=0 ); + + if( res>0 ){ + if( *v1 & 0x80 ) res = -1; + }else{ + if( *v2 & 0x80 ) res = +1; + } + } + + assert( pTask->pSorter->pKeyInfo->aSortFlags!=0 ); + if( res==0 ){ + if( pTask->pSorter->pKeyInfo->nKeyField>1 ){ + res = vdbeSorterCompareTail( + pTask, pbKey2Cached, pKey1, nKey1, pKey2, nKey2 + ); + } + }else if( pTask->pSorter->pKeyInfo->aSortFlags[0] ){ + assert( !(pTask->pSorter->pKeyInfo->aSortFlags[0]&KEYINFO_ORDER_BIGNULL) ); + res = res * -1; + } + + return res; +} + +/* +** Initialize the temporary index cursor just opened as a sorter cursor. +** +** Usually, the sorter module uses the value of (pCsr->pKeyInfo->nKeyField) +** to determine the number of fields that should be compared from the +** records being sorted. However, if the value passed as argument nField +** is non-zero and the sorter is able to guarantee a stable sort, nField +** is used instead. This is used when sorting records for a CREATE INDEX +** statement. In this case, keys are always delivered to the sorter in +** order of the primary key, which happens to be make up the final part +** of the records being sorted. So if the sort is stable, there is never +** any reason to compare PK fields and they can be ignored for a small +** performance boost. +** +** The sorter can guarantee a stable sort when running in single-threaded +** mode, but not in multi-threaded mode. +** +** SQLITE_OK is returned if successful, or an SQLite error code otherwise. +*/ +SQLITE_PRIVATE int sqlite3VdbeSorterInit( + sqlite3 *db, /* Database connection (for malloc()) */ + int nField, /* Number of key fields in each record */ + VdbeCursor *pCsr /* Cursor that holds the new sorter */ +){ + int pgsz; /* Page size of main database */ + int i; /* Used to iterate through aTask[] */ + VdbeSorter *pSorter; /* The new sorter */ + KeyInfo *pKeyInfo; /* Copy of pCsr->pKeyInfo with db==0 */ + int szKeyInfo; /* Size of pCsr->pKeyInfo in bytes */ + i64 sz; /* Size of pSorter in bytes */ + int rc = SQLITE_OK; +#if SQLITE_MAX_WORKER_THREADS==0 +# define nWorker 0 +#else + int nWorker; +#endif + + /* Initialize the upper limit on the number of worker threads */ +#if SQLITE_MAX_WORKER_THREADS>0 + if( sqlite3TempInMemory(db) || sqlite3GlobalConfig.bCoreMutex==0 ){ + nWorker = 0; + }else{ + nWorker = db->aLimit[SQLITE_LIMIT_WORKER_THREADS]; + } +#endif + + /* Do not allow the total number of threads (main thread + all workers) + ** to exceed the maximum merge count */ +#if SQLITE_MAX_WORKER_THREADS>=SORTER_MAX_MERGE_COUNT + if( nWorker>=SORTER_MAX_MERGE_COUNT ){ + nWorker = SORTER_MAX_MERGE_COUNT-1; + } +#endif + + assert( pCsr->pKeyInfo ); + assert( !pCsr->isEphemeral ); + assert( pCsr->eCurType==CURTYPE_SORTER ); + assert( sizeof(KeyInfo) + UMXV(pCsr->pKeyInfo->nKeyField)*sizeof(CollSeq*) + < 0x7fffffff ); + assert( pCsr->pKeyInfo->nKeyField<=pCsr->pKeyInfo->nAllField ); + szKeyInfo = SZ_KEYINFO(pCsr->pKeyInfo->nAllField); + sz = SZ_VDBESORTER(nWorker+1); + + pSorter = (VdbeSorter*)sqlite3DbMallocZero(db, sz + szKeyInfo); + pCsr->uc.pSorter = pSorter; + if( pSorter==0 ){ + rc = SQLITE_NOMEM_BKPT; + }else{ + Btree *pBt = db->aDb[0].pBt; + pSorter->pKeyInfo = pKeyInfo = (KeyInfo*)((u8*)pSorter + sz); + memcpy(pKeyInfo, pCsr->pKeyInfo, szKeyInfo); + pKeyInfo->db = 0; + if( nField && nWorker==0 ){ + pKeyInfo->nKeyField = nField; + assert( nField<=pCsr->pKeyInfo->nAllField ); + } + /* It is OK that pKeyInfo reuses the aSortFlags field from pCsr->pKeyInfo, + ** since the pCsr->pKeyInfo->aSortFlags[] array is invariant and lives + ** longer that pSorter. */ + assert( pKeyInfo->aSortFlags==pCsr->pKeyInfo->aSortFlags ); + sqlite3BtreeEnter(pBt); + pSorter->pgsz = pgsz = sqlite3BtreeGetPageSize(pBt); + sqlite3BtreeLeave(pBt); + pSorter->nTask = nWorker + 1; + pSorter->iPrev = (u8)(nWorker - 1); + pSorter->bUseThreads = (pSorter->nTask>1); + pSorter->db = db; + for(i=0; inTask; i++){ + SortSubtask *pTask = &pSorter->aTask[i]; + pTask->pSorter = pSorter; + } + + if( !sqlite3TempInMemory(db) ){ + i64 mxCache; /* Cache size in bytes*/ + u32 szPma = sqlite3GlobalConfig.szPma; + pSorter->mnPmaSize = szPma * pgsz; + + mxCache = db->aDb[0].pSchema->cache_size; + if( mxCache<0 ){ + /* A negative cache-size value C indicates that the cache is abs(C) + ** KiB in size. */ + mxCache = mxCache * -1024; + }else{ + mxCache = mxCache * pgsz; + } + mxCache = MIN(mxCache, SQLITE_MAX_PMASZ); + pSorter->mxPmaSize = MAX(pSorter->mnPmaSize, (int)mxCache); + + /* Avoid large memory allocations if the application has requested + ** SQLITE_CONFIG_SMALL_MALLOC. */ + if( sqlite3GlobalConfig.bSmallMalloc==0 ){ + assert( pSorter->iMemory==0 ); + pSorter->nMemory = pgsz; + pSorter->list.aMemory = (u8*)sqlite3Malloc(pgsz); + if( !pSorter->list.aMemory ) rc = SQLITE_NOMEM_BKPT; + } + } + + if( pKeyInfo->nAllField<13 + && (pKeyInfo->aColl[0]==0 || pKeyInfo->aColl[0]==db->pDfltColl) + && (pKeyInfo->aSortFlags[0] & KEYINFO_ORDER_BIGNULL)==0 + ){ + pSorter->typeMask = SORTER_TYPE_INTEGER | SORTER_TYPE_TEXT; + } + } + + return rc; +} +#undef nWorker /* Defined at the top of this function */ + +/* +** Free the list of sorted records starting at pRecord. +*/ +static void vdbeSorterRecordFree(sqlite3 *db, SorterRecord *pRecord){ + SorterRecord *p; + SorterRecord *pNext; + for(p=pRecord; p; p=pNext){ + pNext = p->u.pNext; + sqlite3DbFree(db, p); + } +} + +/* +** Free all resources owned by the object indicated by argument pTask. All +** fields of *pTask are zeroed before returning. +*/ +static void vdbeSortSubtaskCleanup(sqlite3 *db, SortSubtask *pTask){ + sqlite3DbFree(db, pTask->pUnpacked); +#if SQLITE_MAX_WORKER_THREADS>0 + /* pTask->list.aMemory can only be non-zero if it was handed memory + ** from the main thread. That only occurs SQLITE_MAX_WORKER_THREADS>0 */ + if( pTask->list.aMemory ){ + sqlite3_free(pTask->list.aMemory); + }else +#endif + { + assert( pTask->list.aMemory==0 ); + vdbeSorterRecordFree(0, pTask->list.pList); + } + if( pTask->file.pFd ){ + sqlite3OsCloseFree(pTask->file.pFd); + } + if( pTask->file2.pFd ){ + sqlite3OsCloseFree(pTask->file2.pFd); + } + memset(pTask, 0, sizeof(SortSubtask)); +} + +#ifdef SQLITE_DEBUG_SORTER_THREADS +static void vdbeSorterWorkDebug(SortSubtask *pTask, const char *zEvent){ + i64 t; + int iTask = (pTask - pTask->pSorter->aTask); + sqlite3OsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t); + fprintf(stderr, "%lld:%d %s\n", t, iTask, zEvent); +} +static void vdbeSorterRewindDebug(const char *zEvent){ + i64 t = 0; + sqlite3_vfs *pVfs = sqlite3_vfs_find(0); + if( ALWAYS(pVfs) ) sqlite3OsCurrentTimeInt64(pVfs, &t); + fprintf(stderr, "%lld:X %s\n", t, zEvent); +} +static void vdbeSorterPopulateDebug( + SortSubtask *pTask, + const char *zEvent +){ + i64 t; + int iTask = (pTask - pTask->pSorter->aTask); + sqlite3OsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t); + fprintf(stderr, "%lld:bg%d %s\n", t, iTask, zEvent); +} +static void vdbeSorterBlockDebug( + SortSubtask *pTask, + int bBlocked, + const char *zEvent +){ + if( bBlocked ){ + i64 t; + sqlite3OsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t); + fprintf(stderr, "%lld:main %s\n", t, zEvent); + } +} +#else +# define vdbeSorterWorkDebug(x,y) +# define vdbeSorterRewindDebug(y) +# define vdbeSorterPopulateDebug(x,y) +# define vdbeSorterBlockDebug(x,y,z) +#endif + +#if SQLITE_MAX_WORKER_THREADS>0 +/* +** Join thread pTask->thread. +*/ +static int vdbeSorterJoinThread(SortSubtask *pTask){ + int rc = SQLITE_OK; + if( pTask->pThread ){ +#ifdef SQLITE_DEBUG_SORTER_THREADS + int bDone = pTask->bDone; +#endif + void *pRet = SQLITE_INT_TO_PTR(SQLITE_ERROR); + vdbeSorterBlockDebug(pTask, !bDone, "enter"); + (void)sqlite3ThreadJoin(pTask->pThread, &pRet); + vdbeSorterBlockDebug(pTask, !bDone, "exit"); + rc = SQLITE_PTR_TO_INT(pRet); + assert( pTask->bDone==1 ); + pTask->bDone = 0; + pTask->pThread = 0; + } + return rc; +} + +/* +** Launch a background thread to run xTask(pIn). +*/ +static int vdbeSorterCreateThread( + SortSubtask *pTask, /* Thread will use this task object */ + void *(*xTask)(void*), /* Routine to run in a separate thread */ + void *pIn /* Argument passed into xTask() */ +){ + assert( pTask->pThread==0 && pTask->bDone==0 ); + return sqlite3ThreadCreate(&pTask->pThread, xTask, pIn); +} + +/* +** Join all outstanding threads launched by SorterWrite() to create +** level-0 PMAs. +*/ +static int vdbeSorterJoinAll(VdbeSorter *pSorter, int rcin){ + int rc = rcin; + int i; + + /* This function is always called by the main user thread. + ** + ** If this function is being called after SorterRewind() has been called, + ** it is possible that thread pSorter->aTask[pSorter->nTask-1].pThread + ** is currently attempt to join one of the other threads. To avoid a race + ** condition where this thread also attempts to join the same object, join + ** thread pSorter->aTask[pSorter->nTask-1].pThread first. */ + for(i=pSorter->nTask-1; i>=0; i--){ + SortSubtask *pTask = &pSorter->aTask[i]; + int rc2 = vdbeSorterJoinThread(pTask); + if( rc==SQLITE_OK ) rc = rc2; + } + return rc; +} +#else +# define vdbeSorterJoinAll(x,rcin) (rcin) +# define vdbeSorterJoinThread(pTask) SQLITE_OK +#endif + +/* +** Allocate a new MergeEngine object capable of handling up to +** nReader PmaReader inputs. +** +** nReader is automatically rounded up to the next power of two. +** nReader may not exceed SORTER_MAX_MERGE_COUNT even after rounding up. +*/ +static MergeEngine *vdbeMergeEngineNew(int nReader){ + int N = 2; /* Smallest power of two >= nReader */ + i64 nByte; /* Total bytes of space to allocate */ + MergeEngine *pNew; /* Pointer to allocated object to return */ + + assert( nReader<=SORTER_MAX_MERGE_COUNT ); + + while( NnTree = N; + pNew->pTask = 0; + pNew->aReadr = (PmaReader*)&pNew[1]; + pNew->aTree = (int*)&pNew->aReadr[N]; + } + return pNew; +} + +/* +** Free the MergeEngine object passed as the only argument. +*/ +static void vdbeMergeEngineFree(MergeEngine *pMerger){ + int i; + if( pMerger ){ + for(i=0; inTree; i++){ + vdbePmaReaderClear(&pMerger->aReadr[i]); + } + } + sqlite3_free(pMerger); +} + +/* +** Free all resources associated with the IncrMerger object indicated by +** the first argument. +*/ +static void vdbeIncrFree(IncrMerger *pIncr){ + if( pIncr ){ +#if SQLITE_MAX_WORKER_THREADS>0 + if( pIncr->bUseThread ){ + vdbeSorterJoinThread(pIncr->pTask); + if( pIncr->aFile[0].pFd ) sqlite3OsCloseFree(pIncr->aFile[0].pFd); + if( pIncr->aFile[1].pFd ) sqlite3OsCloseFree(pIncr->aFile[1].pFd); + } +#endif + vdbeMergeEngineFree(pIncr->pMerger); + sqlite3_free(pIncr); + } +} + +/* +** Reset a sorting cursor back to its original empty state. +*/ +SQLITE_PRIVATE void sqlite3VdbeSorterReset(sqlite3 *db, VdbeSorter *pSorter){ + int i; + (void)vdbeSorterJoinAll(pSorter, SQLITE_OK); + assert( pSorter->bUseThreads || pSorter->pReader==0 ); +#if SQLITE_MAX_WORKER_THREADS>0 + if( pSorter->pReader ){ + vdbePmaReaderClear(pSorter->pReader); + sqlite3DbFree(db, pSorter->pReader); + pSorter->pReader = 0; + } +#endif + vdbeMergeEngineFree(pSorter->pMerger); + pSorter->pMerger = 0; + for(i=0; inTask; i++){ + SortSubtask *pTask = &pSorter->aTask[i]; + vdbeSortSubtaskCleanup(db, pTask); + pTask->pSorter = pSorter; + } + if( pSorter->list.aMemory==0 ){ + vdbeSorterRecordFree(0, pSorter->list.pList); + } + pSorter->list.pList = 0; + pSorter->list.szPMA = 0; + pSorter->bUsePMA = 0; + pSorter->iMemory = 0; + pSorter->mxKeysize = 0; + sqlite3DbFree(db, pSorter->pUnpacked); + pSorter->pUnpacked = 0; +} + +/* +** Free any cursor components allocated by sqlite3VdbeSorterXXX routines. +*/ +SQLITE_PRIVATE void sqlite3VdbeSorterClose(sqlite3 *db, VdbeCursor *pCsr){ + VdbeSorter *pSorter; + assert( pCsr->eCurType==CURTYPE_SORTER ); + pSorter = pCsr->uc.pSorter; + if( pSorter ){ + /* Increment db->nSpill by the total number of bytes of data written + ** to temp files by this sort operation. */ + int ii; + for(ii=0; iinTask; ii++){ + db->nSpill += pSorter->aTask[ii].nSpill; + } + sqlite3VdbeSorterReset(db, pSorter); + sqlite3_free(pSorter->list.aMemory); + sqlite3DbFree(db, pSorter); + pCsr->uc.pSorter = 0; + } +} + +#if SQLITE_MAX_MMAP_SIZE>0 +/* +** The first argument is a file-handle open on a temporary file. The file +** is guaranteed to be nByte bytes or smaller in size. This function +** attempts to extend the file to nByte bytes in size and to ensure that +** the VFS has memory mapped it. +** +** Whether or not the file does end up memory mapped of course depends on +** the specific VFS implementation. +*/ +static void vdbeSorterExtendFile(sqlite3 *db, sqlite3_file *pFd, i64 nByte){ + if( nByte<=(i64)(db->nMaxSorterMmap) && pFd->pMethods->iVersion>=3 ){ + void *p = 0; + int chunksize = 4*1024; + sqlite3OsFileControlHint(pFd, SQLITE_FCNTL_CHUNK_SIZE, &chunksize); + sqlite3OsFileControlHint(pFd, SQLITE_FCNTL_SIZE_HINT, &nByte); + sqlite3OsFetch(pFd, 0, (int)nByte, &p); + if( p ) sqlite3OsUnfetch(pFd, 0, p); + } +} +#else +# define vdbeSorterExtendFile(x,y,z) +#endif + +/* +** Allocate space for a file-handle and open a temporary file. If successful, +** set *ppFd to point to the malloc'd file-handle and return SQLITE_OK. +** Otherwise, set *ppFd to 0 and return an SQLite error code. +*/ +static int vdbeSorterOpenTempFile( + sqlite3 *db, /* Database handle doing sort */ + i64 nExtend, /* Attempt to extend file to this size */ + sqlite3_file **ppFd +){ + int rc; + if( sqlite3FaultSim(202) ) return SQLITE_IOERR_ACCESS; + rc = sqlite3OsOpenMalloc(db->pVfs, 0, ppFd, + SQLITE_OPEN_TEMP_JOURNAL | + SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | + SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_DELETEONCLOSE, &rc + ); + if( rc==SQLITE_OK ){ + i64 max = SQLITE_MAX_MMAP_SIZE; + sqlite3OsFileControlHint(*ppFd, SQLITE_FCNTL_MMAP_SIZE, (void*)&max); + if( nExtend>0 ){ + vdbeSorterExtendFile(db, *ppFd, nExtend); + } + } + return rc; +} + +/* +** If it has not already been allocated, allocate the UnpackedRecord +** structure at pTask->pUnpacked. Return SQLITE_OK if successful (or +** if no allocation was required), or SQLITE_NOMEM otherwise. +*/ +static int vdbeSortAllocUnpacked(SortSubtask *pTask){ + if( pTask->pUnpacked==0 ){ + pTask->pUnpacked = sqlite3VdbeAllocUnpackedRecord(pTask->pSorter->pKeyInfo); + if( pTask->pUnpacked==0 ) return SQLITE_NOMEM_BKPT; + pTask->pUnpacked->nField = pTask->pSorter->pKeyInfo->nKeyField; + pTask->pUnpacked->errCode = 0; + } + return SQLITE_OK; +} + + +/* +** Merge the two sorted lists p1 and p2 into a single list. +*/ +static SorterRecord *vdbeSorterMerge( + SortSubtask *pTask, /* Calling thread context */ + SorterRecord *p1, /* First list to merge */ + SorterRecord *p2 /* Second list to merge */ +){ + SorterRecord *pFinal = 0; + SorterRecord **pp = &pFinal; + int bCached = 0; + + assert( p1!=0 && p2!=0 ); + for(;;){ + int res; + res = pTask->xCompare( + pTask, &bCached, SRVAL(p1), p1->nVal, SRVAL(p2), p2->nVal + ); + + if( res<=0 ){ + *pp = p1; + pp = &p1->u.pNext; + p1 = p1->u.pNext; + if( p1==0 ){ + *pp = p2; + break; + } + }else{ + *pp = p2; + pp = &p2->u.pNext; + p2 = p2->u.pNext; + bCached = 0; + if( p2==0 ){ + *pp = p1; + break; + } + } + } + return pFinal; +} + +/* +** Return the SorterCompare function to compare values collected by the +** sorter object passed as the only argument. +*/ +static SorterCompare vdbeSorterGetCompare(VdbeSorter *p){ + if( p->typeMask==SORTER_TYPE_INTEGER ){ + return vdbeSorterCompareInt; + }else if( p->typeMask==SORTER_TYPE_TEXT ){ + return vdbeSorterCompareText; + } + return vdbeSorterCompare; +} + +/* +** Sort the linked list of records headed at pTask->pList. Return +** SQLITE_OK if successful, or an SQLite error code (i.e. SQLITE_NOMEM) if +** an error occurs. +*/ +static int vdbeSorterSort(SortSubtask *pTask, SorterList *pList){ + int i; + SorterRecord *p; + int rc; + SorterRecord *aSlot[64]; + + rc = vdbeSortAllocUnpacked(pTask); + if( rc!=SQLITE_OK ) return rc; + + p = pList->pList; + pTask->xCompare = vdbeSorterGetCompare(pTask->pSorter); + memset(aSlot, 0, sizeof(aSlot)); + + while( p ){ + SorterRecord *pNext; + if( pList->aMemory ){ + if( (u8*)p==pList->aMemory ){ + pNext = 0; + }else{ + assert( p->u.iNextaMemory) ); + pNext = (SorterRecord*)&pList->aMemory[p->u.iNext]; + } + }else{ + pNext = p->u.pNext; + } + + p->u.pNext = 0; + for(i=0; aSlot[i]; i++){ + p = vdbeSorterMerge(pTask, p, aSlot[i]); + /* ,--Each aSlot[] holds twice as much as the previous. So we cannot use + ** | up all 64 aSlots[] with only a 64-bit address space. + ** v */ + assert( ipList = p; + + assert( pTask->pUnpacked->errCode==SQLITE_OK + || pTask->pUnpacked->errCode==SQLITE_NOMEM + ); + return pTask->pUnpacked->errCode; +} + +/* +** Initialize a PMA-writer object. +*/ +static void vdbePmaWriterInit( + sqlite3_file *pFd, /* File handle to write to */ + PmaWriter *p, /* Object to populate */ + int nBuf, /* Buffer size */ + i64 iStart /* Offset of pFd to begin writing at */ +){ + memset(p, 0, sizeof(PmaWriter)); + p->aBuffer = (u8*)sqlite3Malloc(nBuf); + if( !p->aBuffer ){ + p->eFWErr = SQLITE_NOMEM_BKPT; + }else{ + p->iBufEnd = p->iBufStart = (iStart % nBuf); + p->iWriteOff = iStart - p->iBufStart; + p->nBuffer = nBuf; + p->pFd = pFd; + } +} + +/* +** Write nData bytes of data to the PMA. Return SQLITE_OK +** if successful, or an SQLite error code if an error occurs. +*/ +static void vdbePmaWriteBlob(PmaWriter *p, u8 *pData, int nData){ + int nRem = nData; + while( nRem>0 && p->eFWErr==0 ){ + int nCopy = nRem; + if( nCopy>(p->nBuffer - p->iBufEnd) ){ + nCopy = p->nBuffer - p->iBufEnd; + } + + memcpy(&p->aBuffer[p->iBufEnd], &pData[nData-nRem], nCopy); + p->iBufEnd += nCopy; + if( p->iBufEnd==p->nBuffer ){ + p->eFWErr = sqlite3OsWrite(p->pFd, + &p->aBuffer[p->iBufStart], p->iBufEnd - p->iBufStart, + p->iWriteOff + p->iBufStart + ); + p->nPmaSpill += (p->iBufEnd - p->iBufStart); + p->iBufStart = p->iBufEnd = 0; + p->iWriteOff += p->nBuffer; + } + assert( p->iBufEndnBuffer ); + + nRem -= nCopy; + } +} + +/* +** Flush any buffered data to disk and clean up the PMA-writer object. +** The results of using the PMA-writer after this call are undefined. +** Return SQLITE_OK if flushing the buffered data succeeds or is not +** required. Otherwise, return an SQLite error code. +** +** Before returning, set *piEof to the offset immediately following the +** last byte written to the file. Also, increment (*pnSpill) by the total +** number of bytes written to the file. +*/ +static int vdbePmaWriterFinish(PmaWriter *p, i64 *piEof, u64 *pnSpill){ + int rc; + if( p->eFWErr==0 && ALWAYS(p->aBuffer) && p->iBufEnd>p->iBufStart ){ + p->eFWErr = sqlite3OsWrite(p->pFd, + &p->aBuffer[p->iBufStart], p->iBufEnd - p->iBufStart, + p->iWriteOff + p->iBufStart + ); + p->nPmaSpill += (p->iBufEnd - p->iBufStart); + } + *piEof = (p->iWriteOff + p->iBufEnd); + *pnSpill += p->nPmaSpill; + sqlite3_free(p->aBuffer); + rc = p->eFWErr; + memset(p, 0, sizeof(PmaWriter)); + return rc; +} + +/* +** Write value iVal encoded as a varint to the PMA. Return +** SQLITE_OK if successful, or an SQLite error code if an error occurs. +*/ +static void vdbePmaWriteVarint(PmaWriter *p, u64 iVal){ + int nByte; + u8 aByte[10]; + nByte = sqlite3PutVarint(aByte, iVal); + vdbePmaWriteBlob(p, aByte, nByte); +} + +/* +** Write the current contents of in-memory linked-list pList to a level-0 +** PMA in the temp file belonging to sub-task pTask. Return SQLITE_OK if +** successful, or an SQLite error code otherwise. +** +** The format of a PMA is: +** +** * A varint. This varint contains the total number of bytes of content +** in the PMA (not including the varint itself). +** +** * One or more records packed end-to-end in order of ascending keys. +** Each record consists of a varint followed by a blob of data (the +** key). The varint is the number of bytes in the blob of data. +*/ +static int vdbeSorterListToPMA(SortSubtask *pTask, SorterList *pList){ + sqlite3 *db = pTask->pSorter->db; + int rc = SQLITE_OK; /* Return code */ + PmaWriter writer; /* Object used to write to the file */ + +#ifdef SQLITE_DEBUG + /* Set iSz to the expected size of file pTask->file after writing the PMA. + ** This is used by an assert() statement at the end of this function. */ + i64 iSz = pList->szPMA + sqlite3VarintLen(pList->szPMA) + pTask->file.iEof; +#endif + + vdbeSorterWorkDebug(pTask, "enter"); + memset(&writer, 0, sizeof(PmaWriter)); + assert( pList->szPMA>0 ); + + /* If the first temporary PMA file has not been opened, open it now. */ + if( pTask->file.pFd==0 ){ + rc = vdbeSorterOpenTempFile(db, 0, &pTask->file.pFd); + assert( rc!=SQLITE_OK || pTask->file.pFd ); + assert( pTask->file.iEof==0 ); + assert( pTask->nPMA==0 ); + } + + /* Try to get the file to memory map */ + if( rc==SQLITE_OK ){ + vdbeSorterExtendFile(db, pTask->file.pFd, pTask->file.iEof+pList->szPMA+9); + } + + /* Sort the list */ + if( rc==SQLITE_OK ){ + rc = vdbeSorterSort(pTask, pList); + } + + if( rc==SQLITE_OK ){ + SorterRecord *p; + SorterRecord *pNext = 0; + + vdbePmaWriterInit(pTask->file.pFd, &writer, pTask->pSorter->pgsz, + pTask->file.iEof); + pTask->nPMA++; + vdbePmaWriteVarint(&writer, pList->szPMA); + for(p=pList->pList; p; p=pNext){ + pNext = p->u.pNext; + vdbePmaWriteVarint(&writer, p->nVal); + vdbePmaWriteBlob(&writer, SRVAL(p), p->nVal); + if( pList->aMemory==0 ) sqlite3_free(p); + } + pList->pList = p; + rc = vdbePmaWriterFinish(&writer, &pTask->file.iEof, &pTask->nSpill); + } + + vdbeSorterWorkDebug(pTask, "exit"); + assert( rc!=SQLITE_OK || pList->pList==0 ); + assert( rc!=SQLITE_OK || pTask->file.iEof==iSz ); + return rc; +} + +/* +** Advance the MergeEngine to its next entry. +** Set *pbEof to true there is no next entry because +** the MergeEngine has reached the end of all its inputs. +** +** Return SQLITE_OK if successful or an error code if an error occurs. +*/ +static int vdbeMergeEngineStep( + MergeEngine *pMerger, /* The merge engine to advance to the next row */ + int *pbEof /* Set TRUE at EOF. Set false for more content */ +){ + int rc; + int iPrev = pMerger->aTree[1];/* Index of PmaReader to advance */ + SortSubtask *pTask = pMerger->pTask; + + /* Advance the current PmaReader */ + rc = vdbePmaReaderNext(&pMerger->aReadr[iPrev]); + + /* Update contents of aTree[] */ + if( rc==SQLITE_OK ){ + int i; /* Index of aTree[] to recalculate */ + PmaReader *pReadr1; /* First PmaReader to compare */ + PmaReader *pReadr2; /* Second PmaReader to compare */ + int bCached = 0; + + /* Find the first two PmaReaders to compare. The one that was just + ** advanced (iPrev) and the one next to it in the array. */ + pReadr1 = &pMerger->aReadr[(iPrev & 0xFFFE)]; + pReadr2 = &pMerger->aReadr[(iPrev | 0x0001)]; + + for(i=(pMerger->nTree+iPrev)/2; i>0; i=i/2){ + /* Compare pReadr1 and pReadr2. Store the result in variable iRes. */ + int iRes; + if( pReadr1->pFd==0 ){ + iRes = +1; + }else if( pReadr2->pFd==0 ){ + iRes = -1; + }else{ + iRes = pTask->xCompare(pTask, &bCached, + pReadr1->aKey, pReadr1->nKey, pReadr2->aKey, pReadr2->nKey + ); + } + + /* If pReadr1 contained the smaller value, set aTree[i] to its index. + ** Then set pReadr2 to the next PmaReader to compare to pReadr1. In this + ** case there is no cache of pReadr2 in pTask->pUnpacked, so set + ** pKey2 to point to the record belonging to pReadr2. + ** + ** Alternatively, if pReadr2 contains the smaller of the two values, + ** set aTree[i] to its index and update pReadr1. If vdbeSorterCompare() + ** was actually called above, then pTask->pUnpacked now contains + ** a value equivalent to pReadr2. So set pKey2 to NULL to prevent + ** vdbeSorterCompare() from decoding pReadr2 again. + ** + ** If the two values were equal, then the value from the oldest + ** PMA should be considered smaller. The VdbeSorter.aReadr[] array + ** is sorted from oldest to newest, so pReadr1 contains older values + ** than pReadr2 iff (pReadr1aTree[i] = (int)(pReadr1 - pMerger->aReadr); + pReadr2 = &pMerger->aReadr[ pMerger->aTree[i ^ 0x0001] ]; + bCached = 0; + }else{ + if( pReadr1->pFd ) bCached = 0; + pMerger->aTree[i] = (int)(pReadr2 - pMerger->aReadr); + pReadr1 = &pMerger->aReadr[ pMerger->aTree[i ^ 0x0001] ]; + } + } + *pbEof = (pMerger->aReadr[pMerger->aTree[1]].pFd==0); + } + + return (rc==SQLITE_OK ? pTask->pUnpacked->errCode : rc); +} + +#if SQLITE_MAX_WORKER_THREADS>0 +/* +** The main routine for background threads that write level-0 PMAs. +*/ +static void *vdbeSorterFlushThread(void *pCtx){ + SortSubtask *pTask = (SortSubtask*)pCtx; + int rc; /* Return code */ + assert( pTask->bDone==0 ); + rc = vdbeSorterListToPMA(pTask, &pTask->list); + pTask->bDone = 1; + return SQLITE_INT_TO_PTR(rc); +} +#endif /* SQLITE_MAX_WORKER_THREADS>0 */ + +/* +** Flush the current contents of VdbeSorter.list to a new PMA, possibly +** using a background thread. +*/ +static int vdbeSorterFlushPMA(VdbeSorter *pSorter){ +#if SQLITE_MAX_WORKER_THREADS==0 + pSorter->bUsePMA = 1; + return vdbeSorterListToPMA(&pSorter->aTask[0], &pSorter->list); +#else + int rc = SQLITE_OK; + int i; + SortSubtask *pTask = 0; /* Thread context used to create new PMA */ + int nWorker = (pSorter->nTask-1); + + /* Set the flag to indicate that at least one PMA has been written. + ** Or will be, anyhow. */ + pSorter->bUsePMA = 1; + + /* Select a sub-task to sort and flush the current list of in-memory + ** records to disk. If the sorter is running in multi-threaded mode, + ** round-robin between the first (pSorter->nTask-1) tasks. Except, if + ** the background thread from a sub-tasks previous turn is still running, + ** skip it. If the first (pSorter->nTask-1) sub-tasks are all still busy, + ** fall back to using the final sub-task. The first (pSorter->nTask-1) + ** sub-tasks are preferred as they use background threads - the final + ** sub-task uses the main thread. */ + for(i=0; iiPrev + i + 1) % nWorker; + pTask = &pSorter->aTask[iTest]; + if( pTask->bDone ){ + rc = vdbeSorterJoinThread(pTask); + } + if( rc!=SQLITE_OK || pTask->pThread==0 ) break; + } + + if( rc==SQLITE_OK ){ + if( i==nWorker ){ + /* Use the foreground thread for this operation */ + rc = vdbeSorterListToPMA(&pSorter->aTask[nWorker], &pSorter->list); + }else{ + /* Launch a background thread for this operation */ + u8 *aMem; + void *pCtx; + + assert( pTask!=0 ); + assert( pTask->pThread==0 && pTask->bDone==0 ); + assert( pTask->list.pList==0 ); + assert( pTask->list.aMemory==0 || pSorter->list.aMemory!=0 ); + + aMem = pTask->list.aMemory; + pCtx = (void*)pTask; + pSorter->iPrev = (u8)(pTask - pSorter->aTask); + pTask->list = pSorter->list; + pSorter->list.pList = 0; + pSorter->list.szPMA = 0; + if( aMem ){ + pSorter->list.aMemory = aMem; + pSorter->nMemory = sqlite3MallocSize(aMem); + }else if( pSorter->list.aMemory ){ + pSorter->list.aMemory = sqlite3Malloc(pSorter->nMemory); + if( !pSorter->list.aMemory ) return SQLITE_NOMEM_BKPT; + } + + rc = vdbeSorterCreateThread(pTask, vdbeSorterFlushThread, pCtx); + } + } + + return rc; +#endif /* SQLITE_MAX_WORKER_THREADS!=0 */ +} + +/* +** Add a record to the sorter. +*/ +SQLITE_PRIVATE int sqlite3VdbeSorterWrite( + const VdbeCursor *pCsr, /* Sorter cursor */ + Mem *pVal /* Memory cell containing record */ +){ + VdbeSorter *pSorter; + int rc = SQLITE_OK; /* Return Code */ + SorterRecord *pNew; /* New list element */ + int bFlush; /* True to flush contents of memory to PMA */ + i64 nReq; /* Bytes of memory required */ + i64 nPMA; /* Bytes of PMA space required */ + int t; /* serial type of first record field */ + + assert( pCsr->eCurType==CURTYPE_SORTER ); + pSorter = pCsr->uc.pSorter; + getVarint32NR((const u8*)&pVal->z[1], t); + if( t>0 && t<10 && t!=7 ){ + pSorter->typeMask &= SORTER_TYPE_INTEGER; + }else if( t>10 && (t & 0x01) ){ + pSorter->typeMask &= SORTER_TYPE_TEXT; + }else{ + pSorter->typeMask = 0; + } + + assert( pSorter ); + + /* Figure out whether or not the current contents of memory should be + ** flushed to a PMA before continuing. If so, do so. + ** + ** If using the single large allocation mode (pSorter->aMemory!=0), then + ** flush the contents of memory to a new PMA if (a) at least one value is + ** already in memory and (b) the new value will not fit in memory. + ** + ** Or, if using separate allocations for each record, flush the contents + ** of memory to a PMA if either of the following are true: + ** + ** * The total memory allocated for the in-memory list is greater + ** than (page-size * cache-size), or + ** + ** * The total memory allocated for the in-memory list is greater + ** than (page-size * 10) and sqlite3HeapNearlyFull() returns true. + */ + nReq = pVal->n + sizeof(SorterRecord); + nPMA = pVal->n + sqlite3VarintLen(pVal->n); + if( pSorter->mxPmaSize ){ + if( pSorter->list.aMemory ){ + bFlush = pSorter->iMemory && (pSorter->iMemory+nReq) > pSorter->mxPmaSize; + }else{ + bFlush = ( + (pSorter->list.szPMA > pSorter->mxPmaSize) + || (pSorter->list.szPMA > pSorter->mnPmaSize && sqlite3HeapNearlyFull()) + ); + } + if( bFlush ){ + rc = vdbeSorterFlushPMA(pSorter); + pSorter->list.szPMA = 0; + pSorter->iMemory = 0; + assert( rc!=SQLITE_OK || pSorter->list.pList==0 ); + } + } + + pSorter->list.szPMA += nPMA; + if( nPMA>pSorter->mxKeysize ){ + pSorter->mxKeysize = nPMA; + } + + if( pSorter->list.aMemory ){ + int nMin = pSorter->iMemory + nReq; + + if( nMin>pSorter->nMemory ){ + u8 *aNew; + sqlite3_int64 nNew = 2 * (sqlite3_int64)pSorter->nMemory; + int iListOff = -1; + if( pSorter->list.pList ){ + iListOff = (u8*)pSorter->list.pList - pSorter->list.aMemory; + } + while( nNew < nMin ) nNew = nNew*2; + if( nNew > pSorter->mxPmaSize ) nNew = pSorter->mxPmaSize; + if( nNew < nMin ) nNew = nMin; + aNew = sqlite3Realloc(pSorter->list.aMemory, nNew); + if( !aNew ) return SQLITE_NOMEM_BKPT; + if( iListOff>=0 ){ + pSorter->list.pList = (SorterRecord*)&aNew[iListOff]; + } + pSorter->list.aMemory = aNew; + pSorter->nMemory = nNew; + } + + pNew = (SorterRecord*)&pSorter->list.aMemory[pSorter->iMemory]; + pSorter->iMemory += ROUND8(nReq); + if( pSorter->list.pList ){ + pNew->u.iNext = (int)((u8*)(pSorter->list.pList) - pSorter->list.aMemory); + } + }else{ + pNew = (SorterRecord *)sqlite3Malloc(nReq); + if( pNew==0 ){ + return SQLITE_NOMEM_BKPT; + } + pNew->u.pNext = pSorter->list.pList; + } + + memcpy(SRVAL(pNew), pVal->z, pVal->n); + pNew->nVal = pVal->n; + pSorter->list.pList = pNew; + + return rc; +} + +/* +** Read keys from pIncr->pMerger and populate pIncr->aFile[1]. The format +** of the data stored in aFile[1] is the same as that used by regular PMAs, +** except that the number-of-bytes varint is omitted from the start. +*/ +static int vdbeIncrPopulate(IncrMerger *pIncr){ + int rc = SQLITE_OK; + int rc2; + i64 iStart = pIncr->iStartOff; + SorterFile *pOut = &pIncr->aFile[1]; + SortSubtask *pTask = pIncr->pTask; + MergeEngine *pMerger = pIncr->pMerger; + PmaWriter writer; + assert( pIncr->bEof==0 ); + + vdbeSorterPopulateDebug(pTask, "enter"); + + vdbePmaWriterInit(pOut->pFd, &writer, pTask->pSorter->pgsz, iStart); + while( rc==SQLITE_OK ){ + int dummy; + PmaReader *pReader = &pMerger->aReadr[ pMerger->aTree[1] ]; + int nKey = pReader->nKey; + i64 iEof = writer.iWriteOff + writer.iBufEnd; + + /* Check if the output file is full or if the input has been exhausted. + ** In either case exit the loop. */ + if( pReader->pFd==0 ) break; + if( (iEof + nKey + sqlite3VarintLen(nKey))>(iStart + pIncr->mxSz) ) break; + + /* Write the next key to the output. */ + vdbePmaWriteVarint(&writer, nKey); + vdbePmaWriteBlob(&writer, pReader->aKey, nKey); + assert( pIncr->pMerger->pTask==pTask ); + rc = vdbeMergeEngineStep(pIncr->pMerger, &dummy); + } + + rc2 = vdbePmaWriterFinish(&writer, &pOut->iEof, &pTask->nSpill); + if( rc==SQLITE_OK ) rc = rc2; + vdbeSorterPopulateDebug(pTask, "exit"); + return rc; +} + +#if SQLITE_MAX_WORKER_THREADS>0 +/* +** The main routine for background threads that populate aFile[1] of +** multi-threaded IncrMerger objects. +*/ +static void *vdbeIncrPopulateThread(void *pCtx){ + IncrMerger *pIncr = (IncrMerger*)pCtx; + void *pRet = SQLITE_INT_TO_PTR( vdbeIncrPopulate(pIncr) ); + pIncr->pTask->bDone = 1; + return pRet; +} + +/* +** Launch a background thread to populate aFile[1] of pIncr. +*/ +static int vdbeIncrBgPopulate(IncrMerger *pIncr){ + void *p = (void*)pIncr; + assert( pIncr->bUseThread ); + return vdbeSorterCreateThread(pIncr->pTask, vdbeIncrPopulateThread, p); +} +#endif + +/* +** This function is called when the PmaReader corresponding to pIncr has +** finished reading the contents of aFile[0]. Its purpose is to "refill" +** aFile[0] such that the PmaReader should start rereading it from the +** beginning. +** +** For single-threaded objects, this is accomplished by literally reading +** keys from pIncr->pMerger and repopulating aFile[0]. +** +** For multi-threaded objects, all that is required is to wait until the +** background thread is finished (if it is not already) and then swap +** aFile[0] and aFile[1] in place. If the contents of pMerger have not +** been exhausted, this function also launches a new background thread +** to populate the new aFile[1]. +** +** SQLITE_OK is returned on success, or an SQLite error code otherwise. +*/ +static int vdbeIncrSwap(IncrMerger *pIncr){ + int rc = SQLITE_OK; + +#if SQLITE_MAX_WORKER_THREADS>0 + if( pIncr->bUseThread ){ + rc = vdbeSorterJoinThread(pIncr->pTask); + + if( rc==SQLITE_OK ){ + SorterFile f0 = pIncr->aFile[0]; + pIncr->aFile[0] = pIncr->aFile[1]; + pIncr->aFile[1] = f0; + } + + if( rc==SQLITE_OK ){ + if( pIncr->aFile[0].iEof==pIncr->iStartOff ){ + pIncr->bEof = 1; + }else{ + rc = vdbeIncrBgPopulate(pIncr); + } + } + }else +#endif + { + rc = vdbeIncrPopulate(pIncr); + pIncr->aFile[0] = pIncr->aFile[1]; + if( pIncr->aFile[0].iEof==pIncr->iStartOff ){ + pIncr->bEof = 1; + } + } + + return rc; +} + +/* +** Allocate and return a new IncrMerger object to read data from pMerger. +** +** If an OOM condition is encountered, return NULL. In this case free the +** pMerger argument before returning. +*/ +static int vdbeIncrMergerNew( + SortSubtask *pTask, /* The thread that will be using the new IncrMerger */ + MergeEngine *pMerger, /* The MergeEngine that the IncrMerger will control */ + IncrMerger **ppOut /* Write the new IncrMerger here */ +){ + int rc = SQLITE_OK; + IncrMerger *pIncr = *ppOut = (IncrMerger*) + (sqlite3FaultSim(100) ? 0 : sqlite3MallocZero(sizeof(*pIncr))); + if( pIncr ){ + pIncr->pMerger = pMerger; + pIncr->pTask = pTask; + pIncr->mxSz = MAX(pTask->pSorter->mxKeysize+9,pTask->pSorter->mxPmaSize/2); + pTask->file2.iEof += pIncr->mxSz; + }else{ + vdbeMergeEngineFree(pMerger); + rc = SQLITE_NOMEM_BKPT; + } + assert( *ppOut!=0 || rc!=SQLITE_OK ); + return rc; +} + +#if SQLITE_MAX_WORKER_THREADS>0 +/* +** Set the "use-threads" flag on object pIncr. +*/ +static void vdbeIncrMergerSetThreads(IncrMerger *pIncr){ + pIncr->bUseThread = 1; + pIncr->pTask->file2.iEof -= pIncr->mxSz; +} +#endif /* SQLITE_MAX_WORKER_THREADS>0 */ + + + +/* +** Recompute pMerger->aTree[iOut] by comparing the next keys on the +** two PmaReaders that feed that entry. Neither of the PmaReaders +** are advanced. This routine merely does the comparison. +*/ +static void vdbeMergeEngineCompare( + MergeEngine *pMerger, /* Merge engine containing PmaReaders to compare */ + int iOut /* Store the result in pMerger->aTree[iOut] */ +){ + int i1; + int i2; + int iRes; + PmaReader *p1; + PmaReader *p2; + + assert( iOutnTree && iOut>0 ); + + if( iOut>=(pMerger->nTree/2) ){ + i1 = (iOut - pMerger->nTree/2) * 2; + i2 = i1 + 1; + }else{ + i1 = pMerger->aTree[iOut*2]; + i2 = pMerger->aTree[iOut*2+1]; + } + + p1 = &pMerger->aReadr[i1]; + p2 = &pMerger->aReadr[i2]; + + if( p1->pFd==0 ){ + iRes = i2; + }else if( p2->pFd==0 ){ + iRes = i1; + }else{ + SortSubtask *pTask = pMerger->pTask; + int bCached = 0; + int res; + assert( pTask->pUnpacked!=0 ); /* from vdbeSortSubtaskMain() */ + res = pTask->xCompare( + pTask, &bCached, p1->aKey, p1->nKey, p2->aKey, p2->nKey + ); + if( res<=0 ){ + iRes = i1; + }else{ + iRes = i2; + } + } + + pMerger->aTree[iOut] = iRes; +} + +/* +** Allowed values for the eMode parameter to vdbeMergeEngineInit() +** and vdbePmaReaderIncrMergeInit(). +** +** Only INCRINIT_NORMAL is valid in single-threaded builds (when +** SQLITE_MAX_WORKER_THREADS==0). The other values are only used +** when there exists one or more separate worker threads. +*/ +#define INCRINIT_NORMAL 0 +#define INCRINIT_TASK 1 +#define INCRINIT_ROOT 2 + +/* +** Forward reference required as the vdbeIncrMergeInit() and +** vdbePmaReaderIncrInit() routines are called mutually recursively when +** building a merge tree. +*/ +static int vdbePmaReaderIncrInit(PmaReader *pReadr, int eMode); + +/* +** Initialize the MergeEngine object passed as the second argument. Once this +** function returns, the first key of merged data may be read from the +** MergeEngine object in the usual fashion. +** +** If argument eMode is INCRINIT_ROOT, then it is assumed that any IncrMerge +** objects attached to the PmaReader objects that the merger reads from have +** already been populated, but that they have not yet populated aFile[0] and +** set the PmaReader objects up to read from it. In this case all that is +** required is to call vdbePmaReaderNext() on each PmaReader to point it at +** its first key. +** +** Otherwise, if eMode is any value other than INCRINIT_ROOT, then use +** vdbePmaReaderIncrMergeInit() to initialize each PmaReader that feeds data +** to pMerger. +** +** SQLITE_OK is returned if successful, or an SQLite error code otherwise. +*/ +static int vdbeMergeEngineInit( + SortSubtask *pTask, /* Thread that will run pMerger */ + MergeEngine *pMerger, /* MergeEngine to initialize */ + int eMode /* One of the INCRINIT_XXX constants */ +){ + int rc = SQLITE_OK; /* Return code */ + int i; /* For looping over PmaReader objects */ + int nTree; /* Number of subtrees to merge */ + + /* Failure to allocate the merge would have been detected prior to + ** invoking this routine */ + assert( pMerger!=0 ); + + /* eMode is always INCRINIT_NORMAL in single-threaded mode */ + assert( SQLITE_MAX_WORKER_THREADS>0 || eMode==INCRINIT_NORMAL ); + + /* Verify that the MergeEngine is assigned to a single thread */ + assert( pMerger->pTask==0 ); + pMerger->pTask = pTask; + + nTree = pMerger->nTree; + for(i=0; i0 && eMode==INCRINIT_ROOT ){ + /* PmaReaders should be normally initialized in order, as if they are + ** reading from the same temp file this makes for more linear file IO. + ** However, in the INCRINIT_ROOT case, if PmaReader aReadr[nTask-1] is + ** in use it will block the vdbePmaReaderNext() call while it uses + ** the main thread to fill its buffer. So calling PmaReaderNext() + ** on this PmaReader before any of the multi-threaded PmaReaders takes + ** better advantage of multi-processor hardware. */ + rc = vdbePmaReaderNext(&pMerger->aReadr[nTree-i-1]); + }else{ + rc = vdbePmaReaderIncrInit(&pMerger->aReadr[i], INCRINIT_NORMAL); + } + if( rc!=SQLITE_OK ) return rc; + } + + for(i=pMerger->nTree-1; i>0; i--){ + vdbeMergeEngineCompare(pMerger, i); + } + return pTask->pUnpacked->errCode; +} + +/* +** The PmaReader passed as the first argument is guaranteed to be an +** incremental-reader (pReadr->pIncr!=0). This function serves to open +** and/or initialize the temp file related fields of the IncrMerge +** object at (pReadr->pIncr). +** +** If argument eMode is set to INCRINIT_NORMAL, then all PmaReaders +** in the sub-tree headed by pReadr are also initialized. Data is then +** loaded into the buffers belonging to pReadr and it is set to point to +** the first key in its range. +** +** If argument eMode is set to INCRINIT_TASK, then pReadr is guaranteed +** to be a multi-threaded PmaReader and this function is being called in a +** background thread. In this case all PmaReaders in the sub-tree are +** initialized as for INCRINIT_NORMAL and the aFile[1] buffer belonging to +** pReadr is populated. However, pReadr itself is not set up to point +** to its first key. A call to vdbePmaReaderNext() is still required to do +** that. +** +** The reason this function does not call vdbePmaReaderNext() immediately +** in the INCRINIT_TASK case is that vdbePmaReaderNext() assumes that it has +** to block on thread (pTask->thread) before accessing aFile[1]. But, since +** this entire function is being run by thread (pTask->thread), that will +** lead to the current background thread attempting to join itself. +** +** Finally, if argument eMode is set to INCRINIT_ROOT, it may be assumed +** that pReadr->pIncr is a multi-threaded IncrMerge objects, and that all +** child-trees have already been initialized using IncrInit(INCRINIT_TASK). +** In this case vdbePmaReaderNext() is called on all child PmaReaders and +** the current PmaReader set to point to the first key in its range. +** +** SQLITE_OK is returned if successful, or an SQLite error code otherwise. +*/ +static int vdbePmaReaderIncrMergeInit(PmaReader *pReadr, int eMode){ + int rc = SQLITE_OK; + IncrMerger *pIncr = pReadr->pIncr; + SortSubtask *pTask = pIncr->pTask; + sqlite3 *db = pTask->pSorter->db; + + /* eMode is always INCRINIT_NORMAL in single-threaded mode */ + assert( SQLITE_MAX_WORKER_THREADS>0 || eMode==INCRINIT_NORMAL ); + + rc = vdbeMergeEngineInit(pTask, pIncr->pMerger, eMode); + + /* Set up the required files for pIncr. A multi-threaded IncrMerge object + ** requires two temp files to itself, whereas a single-threaded object + ** only requires a region of pTask->file2. */ + if( rc==SQLITE_OK ){ + int mxSz = pIncr->mxSz; +#if SQLITE_MAX_WORKER_THREADS>0 + if( pIncr->bUseThread ){ + rc = vdbeSorterOpenTempFile(db, mxSz, &pIncr->aFile[0].pFd); + if( rc==SQLITE_OK ){ + rc = vdbeSorterOpenTempFile(db, mxSz, &pIncr->aFile[1].pFd); + } + }else +#endif + /*if( !pIncr->bUseThread )*/{ + if( pTask->file2.pFd==0 ){ + assert( pTask->file2.iEof>0 ); + rc = vdbeSorterOpenTempFile(db, pTask->file2.iEof, &pTask->file2.pFd); + pTask->file2.iEof = 0; + } + if( rc==SQLITE_OK ){ + pIncr->aFile[1].pFd = pTask->file2.pFd; + pIncr->iStartOff = pTask->file2.iEof; + pTask->file2.iEof += mxSz; + } + } + } + +#if SQLITE_MAX_WORKER_THREADS>0 + if( rc==SQLITE_OK && pIncr->bUseThread ){ + /* Use the current thread to populate aFile[1], even though this + ** PmaReader is multi-threaded. If this is an INCRINIT_TASK object, + ** then this function is already running in background thread + ** pIncr->pTask->thread. + ** + ** If this is the INCRINIT_ROOT object, then it is running in the + ** main VDBE thread. But that is Ok, as that thread cannot return + ** control to the VDBE or proceed with anything useful until the + ** first results are ready from this merger object anyway. + */ + assert( eMode==INCRINIT_ROOT || eMode==INCRINIT_TASK ); + rc = vdbeIncrPopulate(pIncr); + } +#endif + + if( rc==SQLITE_OK && (SQLITE_MAX_WORKER_THREADS==0 || eMode!=INCRINIT_TASK) ){ + rc = vdbePmaReaderNext(pReadr); + } + + return rc; +} + +#if SQLITE_MAX_WORKER_THREADS>0 +/* +** The main routine for vdbePmaReaderIncrMergeInit() operations run in +** background threads. +*/ +static void *vdbePmaReaderBgIncrInit(void *pCtx){ + PmaReader *pReader = (PmaReader*)pCtx; + void *pRet = SQLITE_INT_TO_PTR( + vdbePmaReaderIncrMergeInit(pReader,INCRINIT_TASK) + ); + pReader->pIncr->pTask->bDone = 1; + return pRet; +} +#endif + +/* +** If the PmaReader passed as the first argument is not an incremental-reader +** (if pReadr->pIncr==0), then this function is a no-op. Otherwise, it invokes +** the vdbePmaReaderIncrMergeInit() function with the parameters passed to +** this routine to initialize the incremental merge. +** +** If the IncrMerger object is multi-threaded (IncrMerger.bUseThread==1), +** then a background thread is launched to call vdbePmaReaderIncrMergeInit(). +** Or, if the IncrMerger is single threaded, the same function is called +** using the current thread. +*/ +static int vdbePmaReaderIncrInit(PmaReader *pReadr, int eMode){ + IncrMerger *pIncr = pReadr->pIncr; /* Incremental merger */ + int rc = SQLITE_OK; /* Return code */ + if( pIncr ){ +#if SQLITE_MAX_WORKER_THREADS>0 + assert( pIncr->bUseThread==0 || eMode==INCRINIT_TASK ); + if( pIncr->bUseThread ){ + void *pCtx = (void*)pReadr; + rc = vdbeSorterCreateThread(pIncr->pTask, vdbePmaReaderBgIncrInit, pCtx); + }else +#endif + { + rc = vdbePmaReaderIncrMergeInit(pReadr, eMode); + } + } + return rc; +} + +/* +** Allocate a new MergeEngine object to merge the contents of nPMA level-0 +** PMAs from pTask->file. If no error occurs, set *ppOut to point to +** the new object and return SQLITE_OK. Or, if an error does occur, set *ppOut +** to NULL and return an SQLite error code. +** +** When this function is called, *piOffset is set to the offset of the +** first PMA to read from pTask->file. Assuming no error occurs, it is +** set to the offset immediately following the last byte of the last +** PMA before returning. If an error does occur, then the final value of +** *piOffset is undefined. +*/ +static int vdbeMergeEngineLevel0( + SortSubtask *pTask, /* Sorter task to read from */ + int nPMA, /* Number of PMAs to read */ + i64 *piOffset, /* IN/OUT: Readr offset in pTask->file */ + MergeEngine **ppOut /* OUT: New merge-engine */ +){ + MergeEngine *pNew; /* Merge engine to return */ + i64 iOff = *piOffset; + int i; + int rc = SQLITE_OK; + + *ppOut = pNew = vdbeMergeEngineNew(nPMA); + if( pNew==0 ) rc = SQLITE_NOMEM_BKPT; + + for(i=0; iaReadr[i]; + rc = vdbePmaReaderInit(pTask, &pTask->file, iOff, pReadr, &nDummy); + iOff = pReadr->iEof; + } + + if( rc!=SQLITE_OK ){ + vdbeMergeEngineFree(pNew); + *ppOut = 0; + } + *piOffset = iOff; + return rc; +} + +/* +** Return the depth of a tree comprising nPMA PMAs, assuming a fanout of +** SORTER_MAX_MERGE_COUNT. The returned value does not include leaf nodes. +** +** i.e. +** +** nPMA<=16 -> TreeDepth() == 0 +** nPMA<=256 -> TreeDepth() == 1 +** nPMA<=65536 -> TreeDepth() == 2 +*/ +static int vdbeSorterTreeDepth(int nPMA){ + int nDepth = 0; + i64 nDiv = SORTER_MAX_MERGE_COUNT; + while( nDiv < (i64)nPMA ){ + nDiv = nDiv * SORTER_MAX_MERGE_COUNT; + nDepth++; + } + return nDepth; +} + +/* +** pRoot is the root of an incremental merge-tree with depth nDepth (according +** to vdbeSorterTreeDepth()). pLeaf is the iSeq'th leaf to be added to the +** tree, counting from zero. This function adds pLeaf to the tree. +** +** If successful, SQLITE_OK is returned. If an error occurs, an SQLite error +** code is returned and pLeaf is freed. +*/ +static int vdbeSorterAddToTree( + SortSubtask *pTask, /* Task context */ + int nDepth, /* Depth of tree according to TreeDepth() */ + int iSeq, /* Sequence number of leaf within tree */ + MergeEngine *pRoot, /* Root of tree */ + MergeEngine *pLeaf /* Leaf to add to tree */ +){ + int rc = SQLITE_OK; + int nDiv = 1; + int i; + MergeEngine *p = pRoot; + IncrMerger *pIncr; + + rc = vdbeIncrMergerNew(pTask, pLeaf, &pIncr); + + for(i=1; iaReadr[iIter]; + + if( pReadr->pIncr==0 ){ + MergeEngine *pNew = vdbeMergeEngineNew(SORTER_MAX_MERGE_COUNT); + if( pNew==0 ){ + rc = SQLITE_NOMEM_BKPT; + }else{ + rc = vdbeIncrMergerNew(pTask, pNew, &pReadr->pIncr); + } + } + if( rc==SQLITE_OK ){ + p = pReadr->pIncr->pMerger; + nDiv = nDiv / SORTER_MAX_MERGE_COUNT; + } + } + + if( rc==SQLITE_OK ){ + p->aReadr[iSeq % SORTER_MAX_MERGE_COUNT].pIncr = pIncr; + }else{ + vdbeIncrFree(pIncr); + } + return rc; +} + +/* +** This function is called as part of a SorterRewind() operation on a sorter +** that has already written two or more level-0 PMAs to one or more temp +** files. It builds a tree of MergeEngine/IncrMerger/PmaReader objects that +** can be used to incrementally merge all PMAs on disk. +** +** If successful, SQLITE_OK is returned and *ppOut set to point to the +** MergeEngine object at the root of the tree before returning. Or, if an +** error occurs, an SQLite error code is returned and the final value +** of *ppOut is undefined. +*/ +static int vdbeSorterMergeTreeBuild( + VdbeSorter *pSorter, /* The VDBE cursor that implements the sort */ + MergeEngine **ppOut /* Write the MergeEngine here */ +){ + MergeEngine *pMain = 0; + int rc = SQLITE_OK; + int iTask; + +#if SQLITE_MAX_WORKER_THREADS>0 + /* If the sorter uses more than one task, then create the top-level + ** MergeEngine here. This MergeEngine will read data from exactly + ** one PmaReader per sub-task. */ + assert( pSorter->bUseThreads || pSorter->nTask==1 ); + if( pSorter->nTask>1 ){ + pMain = vdbeMergeEngineNew(pSorter->nTask); + if( pMain==0 ) rc = SQLITE_NOMEM_BKPT; + } +#endif + + for(iTask=0; rc==SQLITE_OK && iTasknTask; iTask++){ + SortSubtask *pTask = &pSorter->aTask[iTask]; + assert( pTask->nPMA>0 || SQLITE_MAX_WORKER_THREADS>0 ); + if( SQLITE_MAX_WORKER_THREADS==0 || pTask->nPMA ){ + MergeEngine *pRoot = 0; /* Root node of tree for this task */ + int nDepth = vdbeSorterTreeDepth(pTask->nPMA); + i64 iReadOff = 0; + + if( pTask->nPMA<=SORTER_MAX_MERGE_COUNT ){ + rc = vdbeMergeEngineLevel0(pTask, pTask->nPMA, &iReadOff, &pRoot); + }else{ + int i; + int iSeq = 0; + pRoot = vdbeMergeEngineNew(SORTER_MAX_MERGE_COUNT); + if( pRoot==0 ) rc = SQLITE_NOMEM_BKPT; + for(i=0; inPMA && rc==SQLITE_OK; i += SORTER_MAX_MERGE_COUNT){ + MergeEngine *pMerger = 0; /* New level-0 PMA merger */ + int nReader; /* Number of level-0 PMAs to merge */ + + nReader = MIN(pTask->nPMA - i, SORTER_MAX_MERGE_COUNT); + rc = vdbeMergeEngineLevel0(pTask, nReader, &iReadOff, &pMerger); + if( rc==SQLITE_OK ){ + rc = vdbeSorterAddToTree(pTask, nDepth, iSeq++, pRoot, pMerger); + } + } + } + + if( rc==SQLITE_OK ){ +#if SQLITE_MAX_WORKER_THREADS>0 + if( pMain!=0 ){ + rc = vdbeIncrMergerNew(pTask, pRoot, &pMain->aReadr[iTask].pIncr); + }else +#endif + { + assert( pMain==0 ); + pMain = pRoot; + } + }else{ + vdbeMergeEngineFree(pRoot); + } + } + } + + if( rc!=SQLITE_OK ){ + vdbeMergeEngineFree(pMain); + pMain = 0; + } + *ppOut = pMain; + return rc; +} + +/* +** This function is called as part of an sqlite3VdbeSorterRewind() operation +** on a sorter that has written two or more PMAs to temporary files. It sets +** up either VdbeSorter.pMerger (for single threaded sorters) or pReader +** (for multi-threaded sorters) so that it can be used to iterate through +** all records stored in the sorter. +** +** SQLITE_OK is returned if successful, or an SQLite error code otherwise. +*/ +static int vdbeSorterSetupMerge(VdbeSorter *pSorter){ + int rc; /* Return code */ + SortSubtask *pTask0 = &pSorter->aTask[0]; + MergeEngine *pMain = 0; +#if SQLITE_MAX_WORKER_THREADS + sqlite3 *db = pTask0->pSorter->db; + int i; + SorterCompare xCompare = vdbeSorterGetCompare(pSorter); + for(i=0; inTask; i++){ + pSorter->aTask[i].xCompare = xCompare; + } +#endif + + rc = vdbeSorterMergeTreeBuild(pSorter, &pMain); + if( rc==SQLITE_OK ){ +#if SQLITE_MAX_WORKER_THREADS + assert( pSorter->bUseThreads==0 || pSorter->nTask>1 ); + if( pSorter->bUseThreads ){ + int iTask; + PmaReader *pReadr = 0; + SortSubtask *pLast = &pSorter->aTask[pSorter->nTask-1]; + rc = vdbeSortAllocUnpacked(pLast); + if( rc==SQLITE_OK ){ + pReadr = (PmaReader*)sqlite3DbMallocZero(db, sizeof(PmaReader)); + pSorter->pReader = pReadr; + if( pReadr==0 ) rc = SQLITE_NOMEM_BKPT; + } + if( rc==SQLITE_OK ){ + rc = vdbeIncrMergerNew(pLast, pMain, &pReadr->pIncr); + if( rc==SQLITE_OK ){ + vdbeIncrMergerSetThreads(pReadr->pIncr); + for(iTask=0; iTask<(pSorter->nTask-1); iTask++){ + IncrMerger *pIncr; + if( (pIncr = pMain->aReadr[iTask].pIncr) ){ + vdbeIncrMergerSetThreads(pIncr); + assert( pIncr->pTask!=pLast ); + } + } + for(iTask=0; rc==SQLITE_OK && iTasknTask; iTask++){ + /* Check that: + ** + ** a) The incremental merge object is configured to use the + ** right task, and + ** b) If it is using task (nTask-1), it is configured to run + ** in single-threaded mode. This is important, as the + ** root merge (INCRINIT_ROOT) will be using the same task + ** object. + */ + PmaReader *p = &pMain->aReadr[iTask]; + assert( p->pIncr==0 || ( + (p->pIncr->pTask==&pSorter->aTask[iTask]) /* a */ + && (iTask!=pSorter->nTask-1 || p->pIncr->bUseThread==0) /* b */ + )); + rc = vdbePmaReaderIncrInit(p, INCRINIT_TASK); + } + } + pMain = 0; + } + if( rc==SQLITE_OK ){ + rc = vdbePmaReaderIncrMergeInit(pReadr, INCRINIT_ROOT); + } + }else +#endif + { + rc = vdbeMergeEngineInit(pTask0, pMain, INCRINIT_NORMAL); + pSorter->pMerger = pMain; + pMain = 0; + } + } + + if( rc!=SQLITE_OK ){ + vdbeMergeEngineFree(pMain); + } + return rc; +} + + +/* +** Once the sorter has been populated by calls to sqlite3VdbeSorterWrite, +** this function is called to prepare for iterating through the records +** in sorted order. +*/ +SQLITE_PRIVATE int sqlite3VdbeSorterRewind(const VdbeCursor *pCsr, int *pbEof){ + VdbeSorter *pSorter; + int rc = SQLITE_OK; /* Return code */ + + assert( pCsr->eCurType==CURTYPE_SORTER ); + pSorter = pCsr->uc.pSorter; + assert( pSorter ); + + /* If no data has been written to disk, then do not do so now. Instead, + ** sort the VdbeSorter.pRecord list. The vdbe layer will read data directly + ** from the in-memory list. */ + if( pSorter->bUsePMA==0 ){ + if( pSorter->list.pList ){ + *pbEof = 0; + rc = vdbeSorterSort(&pSorter->aTask[0], &pSorter->list); + }else{ + *pbEof = 1; + } + return rc; + } + + /* Write the current in-memory list to a PMA. When the VdbeSorterWrite() + ** function flushes the contents of memory to disk, it immediately always + ** creates a new list consisting of a single key immediately afterwards. + ** So the list is never empty at this point. */ + assert( pSorter->list.pList ); + rc = vdbeSorterFlushPMA(pSorter); + + /* Join all threads */ + rc = vdbeSorterJoinAll(pSorter, rc); + + vdbeSorterRewindDebug("rewind"); + + /* Assuming no errors have occurred, set up a merger structure to + ** incrementally read and merge all remaining PMAs. */ + assert( pSorter->pReader==0 ); + if( rc==SQLITE_OK ){ + rc = vdbeSorterSetupMerge(pSorter); + *pbEof = 0; + } + + vdbeSorterRewindDebug("rewinddone"); + return rc; +} + +/* +** Advance to the next element in the sorter. Return value: +** +** SQLITE_OK success +** SQLITE_DONE end of data +** otherwise some kind of error. +*/ +SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *db, const VdbeCursor *pCsr){ + VdbeSorter *pSorter; + int rc; /* Return code */ + + assert( pCsr->eCurType==CURTYPE_SORTER ); + pSorter = pCsr->uc.pSorter; + assert( pSorter->bUsePMA || (pSorter->pReader==0 && pSorter->pMerger==0) ); + if( pSorter->bUsePMA ){ + assert( pSorter->pReader==0 || pSorter->pMerger==0 ); + assert( pSorter->bUseThreads==0 || pSorter->pReader ); + assert( pSorter->bUseThreads==1 || pSorter->pMerger ); +#if SQLITE_MAX_WORKER_THREADS>0 + if( pSorter->bUseThreads ){ + rc = vdbePmaReaderNext(pSorter->pReader); + if( rc==SQLITE_OK && pSorter->pReader->pFd==0 ) rc = SQLITE_DONE; + }else +#endif + /*if( !pSorter->bUseThreads )*/ { + int res = 0; + assert( pSorter->pMerger!=0 ); + assert( pSorter->pMerger->pTask==(&pSorter->aTask[0]) ); + rc = vdbeMergeEngineStep(pSorter->pMerger, &res); + if( rc==SQLITE_OK && res ) rc = SQLITE_DONE; + } + }else{ + SorterRecord *pFree = pSorter->list.pList; + pSorter->list.pList = pFree->u.pNext; + pFree->u.pNext = 0; + if( pSorter->list.aMemory==0 ) vdbeSorterRecordFree(db, pFree); + rc = pSorter->list.pList ? SQLITE_OK : SQLITE_DONE; + } + return rc; +} + +/* +** Return a pointer to a buffer owned by the sorter that contains the +** current key. +*/ +static void *vdbeSorterRowkey( + const VdbeSorter *pSorter, /* Sorter object */ + int *pnKey /* OUT: Size of current key in bytes */ +){ + void *pKey; + if( pSorter->bUsePMA ){ + PmaReader *pReader; +#if SQLITE_MAX_WORKER_THREADS>0 + if( pSorter->bUseThreads ){ + pReader = pSorter->pReader; + }else +#endif + /*if( !pSorter->bUseThreads )*/{ + pReader = &pSorter->pMerger->aReadr[pSorter->pMerger->aTree[1]]; + } + *pnKey = pReader->nKey; + pKey = pReader->aKey; + }else{ + *pnKey = pSorter->list.pList->nVal; + pKey = SRVAL(pSorter->list.pList); + } + return pKey; +} + +/* +** Copy the current sorter key into the memory cell pOut. +*/ +SQLITE_PRIVATE int sqlite3VdbeSorterRowkey(const VdbeCursor *pCsr, Mem *pOut){ + VdbeSorter *pSorter; + void *pKey; int nKey; /* Sorter key to copy into pOut */ + + assert( pCsr->eCurType==CURTYPE_SORTER ); + pSorter = pCsr->uc.pSorter; + pKey = vdbeSorterRowkey(pSorter, &nKey); + if( sqlite3VdbeMemClearAndResize(pOut, nKey) ){ + return SQLITE_NOMEM_BKPT; + } + pOut->n = nKey; + MemSetTypeFlag(pOut, MEM_Blob); + memcpy(pOut->z, pKey, nKey); + + return SQLITE_OK; +} + +/* +** Compare the key in memory cell pVal with the key that the sorter cursor +** passed as the first argument currently points to. For the purposes of +** the comparison, ignore the rowid field at the end of each record. +** +** If the sorter cursor key contains any NULL values, consider it to be +** less than pVal. Even if pVal also contains NULL values. +** +** If an error occurs, return an SQLite error code (i.e. SQLITE_NOMEM). +** Otherwise, set *pRes to a negative, zero or positive value if the +** key in pVal is smaller than, equal to or larger than the current sorter +** key. +** +** This routine forms the core of the OP_SorterCompare opcode, which in +** turn is used to verify uniqueness when constructing a UNIQUE INDEX. +*/ +SQLITE_PRIVATE int sqlite3VdbeSorterCompare( + const VdbeCursor *pCsr, /* Sorter cursor */ + Mem *pVal, /* Value to compare to current sorter key */ + int nKeyCol, /* Compare this many columns */ + int *pRes /* OUT: Result of comparison */ +){ + VdbeSorter *pSorter; + UnpackedRecord *r2; + KeyInfo *pKeyInfo; + int i; + void *pKey; int nKey; /* Sorter key to compare pVal with */ + + assert( pCsr->eCurType==CURTYPE_SORTER ); + pSorter = pCsr->uc.pSorter; + r2 = pSorter->pUnpacked; + pKeyInfo = pCsr->pKeyInfo; + if( r2==0 ){ + r2 = pSorter->pUnpacked = sqlite3VdbeAllocUnpackedRecord(pKeyInfo); + if( r2==0 ) return SQLITE_NOMEM_BKPT; + r2->nField = nKeyCol; + } + assert( r2->nField==nKeyCol ); + + pKey = vdbeSorterRowkey(pSorter, &nKey); + sqlite3VdbeRecordUnpack(nKey, pKey, r2); + for(i=0; iaMem[i].flags & MEM_Null ){ + *pRes = -1; + return SQLITE_OK; + } + } + + *pRes = sqlite3VdbeRecordCompare(pVal->n, pVal->z, r2); + return SQLITE_OK; +} + +/************** End of vdbesort.c ********************************************/ +/************** Begin file vdbevtab.c ****************************************/ +/* +** 2020-03-23 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file implements virtual-tables for examining the bytecode content +** of a prepared statement. +*/ +/* #include "sqliteInt.h" */ +#if defined(SQLITE_ENABLE_BYTECODE_VTAB) && !defined(SQLITE_OMIT_VIRTUALTABLE) +/* #include "vdbeInt.h" */ + +/* An instance of the bytecode() table-valued function. +*/ +typedef struct bytecodevtab bytecodevtab; +struct bytecodevtab { + sqlite3_vtab base; /* Base class - must be first */ + sqlite3 *db; /* Database connection */ + int bTablesUsed; /* 2 for tables_used(). 0 for bytecode(). */ +}; + +/* A cursor for scanning through the bytecode +*/ +typedef struct bytecodevtab_cursor bytecodevtab_cursor; +struct bytecodevtab_cursor { + sqlite3_vtab_cursor base; /* Base class - must be first */ + sqlite3_stmt *pStmt; /* The statement whose bytecode is displayed */ + int iRowid; /* The rowid of the output table */ + int iAddr; /* Address */ + int needFinalize; /* Cursors owns pStmt and must finalize it */ + int showSubprograms; /* Provide a listing of subprograms */ + Op *aOp; /* Operand array */ + char *zP4; /* Rendered P4 value */ + const char *zType; /* tables_used.type */ + const char *zSchema; /* tables_used.schema */ + const char *zName; /* tables_used.name */ + Mem sub; /* Subprograms */ +}; + +/* +** Create a new bytecode() table-valued function. +*/ +static int bytecodevtabConnect( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + bytecodevtab *pNew; + int rc; + int isTabUsed = pAux!=0; + const char *azSchema[2] = { + /* bytecode() schema */ + "CREATE TABLE x(" + "addr INT," + "opcode TEXT," + "p1 INT," + "p2 INT," + "p3 INT," + "p4 TEXT," + "p5 INT," + "comment TEXT," + "subprog TEXT," + "nexec INT," + "ncycle INT," + "stmt HIDDEN" + ");", + + /* Tables_used() schema */ + "CREATE TABLE x(" + "type TEXT," + "schema TEXT," + "name TEXT," + "wr INT," + "subprog TEXT," + "stmt HIDDEN" + ");" + }; + + (void)argc; + (void)argv; + (void)pzErr; + rc = sqlite3_declare_vtab(db, azSchema[isTabUsed]); + if( rc==SQLITE_OK ){ + pNew = sqlite3_malloc( sizeof(*pNew) ); + *ppVtab = (sqlite3_vtab*)pNew; + if( pNew==0 ) return SQLITE_NOMEM; + memset(pNew, 0, sizeof(*pNew)); + pNew->db = db; + pNew->bTablesUsed = isTabUsed*2; + } + return rc; +} + +/* +** This method is the destructor for bytecodevtab objects. +*/ +static int bytecodevtabDisconnect(sqlite3_vtab *pVtab){ + bytecodevtab *p = (bytecodevtab*)pVtab; + sqlite3_free(p); + return SQLITE_OK; +} + +/* +** Constructor for a new bytecodevtab_cursor object. +*/ +static int bytecodevtabOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ + bytecodevtab *pVTab = (bytecodevtab*)p; + bytecodevtab_cursor *pCur; + pCur = sqlite3_malloc( sizeof(*pCur) ); + if( pCur==0 ) return SQLITE_NOMEM; + memset(pCur, 0, sizeof(*pCur)); + sqlite3VdbeMemInit(&pCur->sub, pVTab->db, 1); + *ppCursor = &pCur->base; + return SQLITE_OK; +} + +/* +** Clear all internal content from a bytecodevtab cursor. +*/ +static void bytecodevtabCursorClear(bytecodevtab_cursor *pCur){ + sqlite3_free(pCur->zP4); + pCur->zP4 = 0; + sqlite3VdbeMemRelease(&pCur->sub); + sqlite3VdbeMemSetNull(&pCur->sub); + if( pCur->needFinalize ){ + sqlite3_finalize(pCur->pStmt); + } + pCur->pStmt = 0; + pCur->needFinalize = 0; + pCur->zType = 0; + pCur->zSchema = 0; + pCur->zName = 0; +} + +/* +** Destructor for a bytecodevtab_cursor. +*/ +static int bytecodevtabClose(sqlite3_vtab_cursor *cur){ + bytecodevtab_cursor *pCur = (bytecodevtab_cursor*)cur; + bytecodevtabCursorClear(pCur); + sqlite3_free(pCur); + return SQLITE_OK; +} + + +/* +** Advance a bytecodevtab_cursor to its next row of output. +*/ +static int bytecodevtabNext(sqlite3_vtab_cursor *cur){ + bytecodevtab_cursor *pCur = (bytecodevtab_cursor*)cur; + bytecodevtab *pTab = (bytecodevtab*)cur->pVtab; + int rc; + if( pCur->zP4 ){ + sqlite3_free(pCur->zP4); + pCur->zP4 = 0; + } + if( pCur->zName ){ + pCur->zName = 0; + pCur->zType = 0; + pCur->zSchema = 0; + } + rc = sqlite3VdbeNextOpcode( + (Vdbe*)pCur->pStmt, + pCur->showSubprograms ? &pCur->sub : 0, + pTab->bTablesUsed, + &pCur->iRowid, + &pCur->iAddr, + &pCur->aOp); + if( rc!=SQLITE_OK ){ + sqlite3VdbeMemSetNull(&pCur->sub); + pCur->aOp = 0; + } + return SQLITE_OK; +} + +/* +** Return TRUE if the cursor has been moved off of the last +** row of output. +*/ +static int bytecodevtabEof(sqlite3_vtab_cursor *cur){ + bytecodevtab_cursor *pCur = (bytecodevtab_cursor*)cur; + return pCur->aOp==0; +} + +/* +** Return values of columns for the row at which the bytecodevtab_cursor +** is currently pointing. +*/ +static int bytecodevtabColumn( + sqlite3_vtab_cursor *cur, /* The cursor */ + sqlite3_context *ctx, /* First argument to sqlite3_result_...() */ + int i /* Which column to return */ +){ + bytecodevtab_cursor *pCur = (bytecodevtab_cursor*)cur; + bytecodevtab *pVTab = (bytecodevtab*)cur->pVtab; + Op *pOp = pCur->aOp + pCur->iAddr; + if( pVTab->bTablesUsed ){ + if( i==4 ){ + i = 8; + }else{ + if( i<=2 && pCur->zType==0 ){ + Schema *pSchema; + HashElem *k; + int iDb = pOp->p3; + Pgno iRoot = (Pgno)pOp->p2; + sqlite3 *db = pVTab->db; + pSchema = db->aDb[iDb].pSchema; + pCur->zSchema = db->aDb[iDb].zDbSName; + for(k=sqliteHashFirst(&pSchema->tblHash); k; k=sqliteHashNext(k)){ + Table *pTab = (Table*)sqliteHashData(k); + if( !IsVirtual(pTab) && pTab->tnum==iRoot ){ + pCur->zName = pTab->zName; + pCur->zType = "table"; + break; + } + } + if( pCur->zName==0 ){ + for(k=sqliteHashFirst(&pSchema->idxHash); k; k=sqliteHashNext(k)){ + Index *pIdx = (Index*)sqliteHashData(k); + if( pIdx->tnum==iRoot ){ + pCur->zName = pIdx->zName; + pCur->zType = "index"; + } + } + } + } + i += 20; + } + } + switch( i ){ + case 0: /* addr */ + sqlite3_result_int(ctx, pCur->iAddr); + break; + case 1: /* opcode */ + sqlite3_result_text(ctx, (char*)sqlite3OpcodeName(pOp->opcode), + -1, SQLITE_STATIC); + break; + case 2: /* p1 */ + sqlite3_result_int(ctx, pOp->p1); + break; + case 3: /* p2 */ + sqlite3_result_int(ctx, pOp->p2); + break; + case 4: /* p3 */ + sqlite3_result_int(ctx, pOp->p3); + break; + case 5: /* p4 */ + case 7: /* comment */ + if( pCur->zP4==0 ){ + pCur->zP4 = sqlite3VdbeDisplayP4(pVTab->db, pOp); + } + if( i==5 ){ + sqlite3_result_text(ctx, pCur->zP4, -1, SQLITE_STATIC); + }else{ +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS + char *zCom = sqlite3VdbeDisplayComment(pVTab->db, pOp, pCur->zP4); + sqlite3_result_text(ctx, zCom, -1, sqlite3_free); +#endif + } + break; + case 6: /* p5 */ + sqlite3_result_int(ctx, pOp->p5); + break; + case 8: { /* subprog */ + Op *aOp = pCur->aOp; + assert( aOp[0].opcode==OP_Init ); + assert( aOp[0].p4.z==0 || strncmp(aOp[0].p4.z,"-" "- ",3)==0 ); + if( pCur->iRowid==pCur->iAddr+1 ){ + break; /* Result is NULL for the main program */ + }else if( aOp[0].p4.z!=0 ){ + sqlite3_result_text(ctx, aOp[0].p4.z+3, -1, SQLITE_STATIC); + }else{ + sqlite3_result_text(ctx, "(FK)", 4, SQLITE_STATIC); + } + break; + } + +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + case 9: /* nexec */ + sqlite3_result_int64(ctx, pOp->nExec); + break; + case 10: /* ncycle */ + sqlite3_result_int64(ctx, pOp->nCycle); + break; +#else + case 9: /* nexec */ + case 10: /* ncycle */ + sqlite3_result_int(ctx, 0); + break; +#endif + + case 20: /* tables_used.type */ + sqlite3_result_text(ctx, pCur->zType, -1, SQLITE_STATIC); + break; + case 21: /* tables_used.schema */ + sqlite3_result_text(ctx, pCur->zSchema, -1, SQLITE_STATIC); + break; + case 22: /* tables_used.name */ + sqlite3_result_text(ctx, pCur->zName, -1, SQLITE_STATIC); + break; + case 23: /* tables_used.wr */ + sqlite3_result_int(ctx, pOp->opcode==OP_OpenWrite); + break; + } + return SQLITE_OK; +} + +/* +** Return the rowid for the current row. In this implementation, the +** rowid is the same as the output value. +*/ +static int bytecodevtabRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){ + bytecodevtab_cursor *pCur = (bytecodevtab_cursor*)cur; + *pRowid = pCur->iRowid; + return SQLITE_OK; +} + +/* +** Initialize a cursor. +** +** idxNum==0 means show all subprograms +** idxNum==1 means show only the main bytecode and omit subprograms. +*/ +static int bytecodevtabFilter( + sqlite3_vtab_cursor *pVtabCursor, + int idxNum, const char *idxStr, + int argc, sqlite3_value **argv +){ + bytecodevtab_cursor *pCur = (bytecodevtab_cursor *)pVtabCursor; + bytecodevtab *pVTab = (bytecodevtab *)pVtabCursor->pVtab; + int rc = SQLITE_OK; + (void)idxStr; + + bytecodevtabCursorClear(pCur); + pCur->iRowid = 0; + pCur->iAddr = 0; + pCur->showSubprograms = idxNum==0; + assert( argc==1 ); + if( sqlite3_value_type(argv[0])==SQLITE_TEXT ){ + const char *zSql = (const char*)sqlite3_value_text(argv[0]); + if( zSql==0 ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_prepare_v2(pVTab->db, zSql, -1, &pCur->pStmt, 0); + pCur->needFinalize = 1; + } + }else{ + pCur->pStmt = (sqlite3_stmt*)sqlite3_value_pointer(argv[0],"stmt-pointer"); + } + if( pCur->pStmt==0 ){ + pVTab->base.zErrMsg = sqlite3_mprintf( + "argument to %s() is not a valid SQL statement", + pVTab->bTablesUsed ? "tables_used" : "bytecode" + ); + rc = SQLITE_ERROR; + }else{ + bytecodevtabNext(pVtabCursor); + } + return rc; +} + +/* +** We must have a single stmt=? constraint that will be passed through +** into the xFilter method. If there is no valid stmt=? constraint, +** then return an SQLITE_CONSTRAINT error. +*/ +static int bytecodevtabBestIndex( + sqlite3_vtab *tab, + sqlite3_index_info *pIdxInfo +){ + int i; + int rc = SQLITE_CONSTRAINT; + struct sqlite3_index_constraint *p; + bytecodevtab *pVTab = (bytecodevtab*)tab; + int iBaseCol = pVTab->bTablesUsed ? 4 : 10; + pIdxInfo->estimatedCost = (double)100; + pIdxInfo->estimatedRows = 100; + pIdxInfo->idxNum = 0; + for(i=0, p=pIdxInfo->aConstraint; inConstraint; i++, p++){ + if( p->usable==0 ) continue; + if( p->op==SQLITE_INDEX_CONSTRAINT_EQ && p->iColumn==iBaseCol+1 ){ + rc = SQLITE_OK; + pIdxInfo->aConstraintUsage[i].omit = 1; + pIdxInfo->aConstraintUsage[i].argvIndex = 1; + } + if( p->op==SQLITE_INDEX_CONSTRAINT_ISNULL && p->iColumn==iBaseCol ){ + pIdxInfo->aConstraintUsage[i].omit = 1; + pIdxInfo->idxNum = 1; + } + } + return rc; +} + +/* +** This following structure defines all the methods for the +** virtual table. +*/ +static sqlite3_module bytecodevtabModule = { + /* iVersion */ 0, + /* xCreate */ 0, + /* xConnect */ bytecodevtabConnect, + /* xBestIndex */ bytecodevtabBestIndex, + /* xDisconnect */ bytecodevtabDisconnect, + /* xDestroy */ 0, + /* xOpen */ bytecodevtabOpen, + /* xClose */ bytecodevtabClose, + /* xFilter */ bytecodevtabFilter, + /* xNext */ bytecodevtabNext, + /* xEof */ bytecodevtabEof, + /* xColumn */ bytecodevtabColumn, + /* xRowid */ bytecodevtabRowid, + /* xUpdate */ 0, + /* xBegin */ 0, + /* xSync */ 0, + /* xCommit */ 0, + /* xRollback */ 0, + /* xFindMethod */ 0, + /* xRename */ 0, + /* xSavepoint */ 0, + /* xRelease */ 0, + /* xRollbackTo */ 0, + /* xShadowName */ 0, + /* xIntegrity */ 0 +}; + + +SQLITE_PRIVATE int sqlite3VdbeBytecodeVtabInit(sqlite3 *db){ + int rc; + rc = sqlite3_create_module(db, "bytecode", &bytecodevtabModule, 0); + if( rc==SQLITE_OK ){ + rc = sqlite3_create_module(db, "tables_used", &bytecodevtabModule, &db); + } + return rc; +} +#elif defined(SQLITE_ENABLE_BYTECODE_VTAB) +SQLITE_PRIVATE int sqlite3VdbeBytecodeVtabInit(sqlite3 *db){ return SQLITE_OK; } +#endif /* SQLITE_ENABLE_BYTECODE_VTAB */ + +/************** End of vdbevtab.c ********************************************/ +/************** Begin file memjournal.c **************************************/ +/* +** 2008 October 7 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file contains code use to implement an in-memory rollback journal. +** The in-memory rollback journal is used to journal transactions for +** ":memory:" databases and when the journal_mode=MEMORY pragma is used. +** +** Update: The in-memory journal is also used to temporarily cache +** smaller journals that are not critical for power-loss recovery. +** For example, statement journals that are not too big will be held +** entirely in memory, thus reducing the number of file I/O calls, and +** more importantly, reducing temporary file creation events. If these +** journals become too large for memory, they are spilled to disk. But +** in the common case, they are usually small and no file I/O needs to +** occur. +*/ +/* #include "sqliteInt.h" */ + +/* Forward references to internal structures */ +typedef struct MemJournal MemJournal; +typedef struct FilePoint FilePoint; +typedef struct FileChunk FileChunk; + +/* +** The rollback journal is composed of a linked list of these structures. +** +** The zChunk array is always at least 8 bytes in size - usually much more. +** Its actual size is stored in the MemJournal.nChunkSize variable. +*/ +struct FileChunk { + FileChunk *pNext; /* Next chunk in the journal */ + u8 zChunk[8]; /* Content of this chunk */ +}; + +/* +** By default, allocate this many bytes of memory for each FileChunk object. +*/ +#define MEMJOURNAL_DFLT_FILECHUNKSIZE 1024 + +/* +** For chunk size nChunkSize, return the number of bytes that should +** be allocated for each FileChunk structure. +*/ +#define fileChunkSize(nChunkSize) (sizeof(FileChunk) + ((nChunkSize)-8)) + +/* +** An instance of this object serves as a cursor into the rollback journal. +** The cursor can be either for reading or writing. +*/ +struct FilePoint { + sqlite3_int64 iOffset; /* Offset from the beginning of the file */ + FileChunk *pChunk; /* Specific chunk into which cursor points */ +}; + +/* +** This structure is a subclass of sqlite3_file. Each open memory-journal +** is an instance of this class. +*/ +struct MemJournal { + const sqlite3_io_methods *pMethod; /* Parent class. MUST BE FIRST */ + int nChunkSize; /* In-memory chunk-size */ + + int nSpill; /* Bytes of data before flushing */ + FileChunk *pFirst; /* Head of in-memory chunk-list */ + FilePoint endpoint; /* Pointer to the end of the file */ + FilePoint readpoint; /* Pointer to the end of the last xRead() */ + + int flags; /* xOpen flags */ + sqlite3_vfs *pVfs; /* The "real" underlying VFS */ + const char *zJournal; /* Name of the journal file */ +}; + +/* +** Read data from the in-memory journal file. This is the implementation +** of the sqlite3_vfs.xRead method. +*/ +static int memjrnlRead( + sqlite3_file *pJfd, /* The journal file from which to read */ + void *zBuf, /* Put the results here */ + int iAmt, /* Number of bytes to read */ + sqlite_int64 iOfst /* Begin reading at this offset */ +){ + MemJournal *p = (MemJournal *)pJfd; + u8 *zOut = zBuf; + int nRead = iAmt; + int iChunkOffset; + FileChunk *pChunk; + + if( (iAmt+iOfst)>p->endpoint.iOffset ){ + return SQLITE_IOERR_SHORT_READ; + } + assert( p->readpoint.iOffset==0 || p->readpoint.pChunk!=0 ); + if( p->readpoint.iOffset!=iOfst || iOfst==0 ){ + sqlite3_int64 iOff = 0; + for(pChunk=p->pFirst; + ALWAYS(pChunk) && (iOff+p->nChunkSize)<=iOfst; + pChunk=pChunk->pNext + ){ + iOff += p->nChunkSize; + } + }else{ + pChunk = p->readpoint.pChunk; + assert( pChunk!=0 ); + } + + iChunkOffset = (int)(iOfst%p->nChunkSize); + do { + int iSpace = p->nChunkSize - iChunkOffset; + int nCopy = MIN(nRead, (p->nChunkSize - iChunkOffset)); + memcpy(zOut, (u8*)pChunk->zChunk + iChunkOffset, nCopy); + zOut += nCopy; + nRead -= iSpace; + iChunkOffset = 0; + } while( nRead>=0 && (pChunk=pChunk->pNext)!=0 && nRead>0 ); + p->readpoint.iOffset = pChunk ? iOfst+iAmt : 0; + p->readpoint.pChunk = pChunk; + + return SQLITE_OK; +} + +/* +** Free the list of FileChunk structures headed at MemJournal.pFirst. +*/ +static void memjrnlFreeChunks(FileChunk *pFirst){ + FileChunk *pIter; + FileChunk *pNext; + for(pIter=pFirst; pIter; pIter=pNext){ + pNext = pIter->pNext; + sqlite3_free(pIter); + } +} + +/* +** Flush the contents of memory to a real file on disk. +*/ +static int memjrnlCreateFile(MemJournal *p){ + int rc; + sqlite3_file *pReal = (sqlite3_file*)p; + MemJournal copy = *p; + + memset(p, 0, sizeof(MemJournal)); + rc = sqlite3OsOpen(copy.pVfs, copy.zJournal, pReal, copy.flags, 0); + if( rc==SQLITE_OK ){ + int nChunk = copy.nChunkSize; + i64 iOff = 0; + FileChunk *pIter; + for(pIter=copy.pFirst; pIter; pIter=pIter->pNext){ + if( iOff + nChunk > copy.endpoint.iOffset ){ + nChunk = copy.endpoint.iOffset - iOff; + } + rc = sqlite3OsWrite(pReal, (u8*)pIter->zChunk, nChunk, iOff); + if( rc ) break; + iOff += nChunk; + } + if( rc==SQLITE_OK ){ + /* No error has occurred. Free the in-memory buffers. */ + memjrnlFreeChunks(copy.pFirst); + } + } + if( rc!=SQLITE_OK ){ + /* If an error occurred while creating or writing to the file, restore + ** the original before returning. This way, SQLite uses the in-memory + ** journal data to roll back changes made to the internal page-cache + ** before this function was called. */ + sqlite3OsClose(pReal); + *p = copy; + } + return rc; +} + + +/* Forward reference */ +static int memjrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size); + +/* +** Write data to the file. +*/ +static int memjrnlWrite( + sqlite3_file *pJfd, /* The journal file into which to write */ + const void *zBuf, /* Take data to be written from here */ + int iAmt, /* Number of bytes to write */ + sqlite_int64 iOfst /* Begin writing at this offset into the file */ +){ + MemJournal *p = (MemJournal *)pJfd; + int nWrite = iAmt; + u8 *zWrite = (u8 *)zBuf; + + /* If the file should be created now, create it and write the new data + ** into the file on disk. */ + if( p->nSpill>0 && (iAmt+iOfst)>p->nSpill ){ + int rc = memjrnlCreateFile(p); + if( rc==SQLITE_OK ){ + rc = sqlite3OsWrite(pJfd, zBuf, iAmt, iOfst); + } + return rc; + } + + /* If the contents of this write should be stored in memory */ + else{ + /* An in-memory journal file should only ever be appended to. Random + ** access writes are not required. The only exception to this is when + ** the in-memory journal is being used by a connection using the + ** atomic-write optimization. In this case the first 28 bytes of the + ** journal file may be written as part of committing the transaction. */ + assert( iOfst<=p->endpoint.iOffset ); + if( iOfst>0 && iOfst!=p->endpoint.iOffset ){ + memjrnlTruncate(pJfd, iOfst); + } + if( iOfst==0 && p->pFirst ){ + assert( p->nChunkSize>iAmt ); + memcpy((u8*)p->pFirst->zChunk, zBuf, iAmt); + }else{ + while( nWrite>0 ){ + FileChunk *pChunk = p->endpoint.pChunk; + int iChunkOffset = (int)(p->endpoint.iOffset%p->nChunkSize); + int iSpace = MIN(nWrite, p->nChunkSize - iChunkOffset); + + assert( pChunk!=0 || iChunkOffset==0 ); + if( iChunkOffset==0 ){ + /* New chunk is required to extend the file. */ + FileChunk *pNew = sqlite3_malloc(fileChunkSize(p->nChunkSize)); + if( !pNew ){ + return SQLITE_IOERR_NOMEM_BKPT; + } + pNew->pNext = 0; + if( pChunk ){ + assert( p->pFirst ); + pChunk->pNext = pNew; + }else{ + assert( !p->pFirst ); + p->pFirst = pNew; + } + pChunk = p->endpoint.pChunk = pNew; + } + + assert( pChunk!=0 ); + memcpy((u8*)pChunk->zChunk + iChunkOffset, zWrite, iSpace); + zWrite += iSpace; + nWrite -= iSpace; + p->endpoint.iOffset += iSpace; + } + } + } + + return SQLITE_OK; +} + +/* +** Truncate the in-memory file. +*/ +static int memjrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size){ + MemJournal *p = (MemJournal *)pJfd; + assert( p->endpoint.pChunk==0 || p->endpoint.pChunk->pNext==0 ); + if( sizeendpoint.iOffset ){ + FileChunk *pIter = 0; + if( size==0 ){ + memjrnlFreeChunks(p->pFirst); + p->pFirst = 0; + }else{ + i64 iOff = p->nChunkSize; + for(pIter=p->pFirst; ALWAYS(pIter) && iOffpNext){ + iOff += p->nChunkSize; + } + if( ALWAYS(pIter) ){ + memjrnlFreeChunks(pIter->pNext); + pIter->pNext = 0; + } + } + + p->endpoint.pChunk = pIter; + p->endpoint.iOffset = size; + p->readpoint.pChunk = 0; + p->readpoint.iOffset = 0; + } + return SQLITE_OK; +} + +/* +** Close the file. +*/ +static int memjrnlClose(sqlite3_file *pJfd){ + MemJournal *p = (MemJournal *)pJfd; + memjrnlFreeChunks(p->pFirst); + return SQLITE_OK; +} + +/* +** Sync the file. +** +** If the real file has been created, call its xSync method. Otherwise, +** syncing an in-memory journal is a no-op. +*/ +static int memjrnlSync(sqlite3_file *pJfd, int flags){ + UNUSED_PARAMETER2(pJfd, flags); + return SQLITE_OK; +} + +/* +** Query the size of the file in bytes. +*/ +static int memjrnlFileSize(sqlite3_file *pJfd, sqlite_int64 *pSize){ + MemJournal *p = (MemJournal *)pJfd; + *pSize = (sqlite_int64) p->endpoint.iOffset; + return SQLITE_OK; +} + +/* +** Table of methods for MemJournal sqlite3_file object. +*/ +static const struct sqlite3_io_methods MemJournalMethods = { + 1, /* iVersion */ + memjrnlClose, /* xClose */ + memjrnlRead, /* xRead */ + memjrnlWrite, /* xWrite */ + memjrnlTruncate, /* xTruncate */ + memjrnlSync, /* xSync */ + memjrnlFileSize, /* xFileSize */ + 0, /* xLock */ + 0, /* xUnlock */ + 0, /* xCheckReservedLock */ + 0, /* xFileControl */ + 0, /* xSectorSize */ + 0, /* xDeviceCharacteristics */ + 0, /* xShmMap */ + 0, /* xShmLock */ + 0, /* xShmBarrier */ + 0, /* xShmUnmap */ + 0, /* xFetch */ + 0 /* xUnfetch */ +}; + +/* +** Open a journal file. +** +** The behaviour of the journal file depends on the value of parameter +** nSpill. If nSpill is 0, then the journal file is always create and +** accessed using the underlying VFS. If nSpill is less than zero, then +** all content is always stored in main-memory. Finally, if nSpill is a +** positive value, then the journal file is initially created in-memory +** but may be flushed to disk later on. In this case the journal file is +** flushed to disk either when it grows larger than nSpill bytes in size, +** or when sqlite3JournalCreate() is called. +*/ +SQLITE_PRIVATE int sqlite3JournalOpen( + sqlite3_vfs *pVfs, /* The VFS to use for actual file I/O */ + const char *zName, /* Name of the journal file */ + sqlite3_file *pJfd, /* Preallocated, blank file handle */ + int flags, /* Opening flags */ + int nSpill /* Bytes buffered before opening the file */ +){ + MemJournal *p = (MemJournal*)pJfd; + + assert( zName || nSpill<0 || (flags & SQLITE_OPEN_EXCLUSIVE) ); + + /* Zero the file-handle object. If nSpill was passed zero, initialize + ** it using the sqlite3OsOpen() function of the underlying VFS. In this + ** case none of the code in this module is executed as a result of calls + ** made on the journal file-handle. */ + memset(p, 0, sizeof(MemJournal)); + if( nSpill==0 ){ + return sqlite3OsOpen(pVfs, zName, pJfd, flags, 0); + } + + if( nSpill>0 ){ + p->nChunkSize = nSpill; + }else{ + p->nChunkSize = 8 + MEMJOURNAL_DFLT_FILECHUNKSIZE - sizeof(FileChunk); + assert( MEMJOURNAL_DFLT_FILECHUNKSIZE==fileChunkSize(p->nChunkSize) ); + } + + pJfd->pMethods = (const sqlite3_io_methods*)&MemJournalMethods; + p->nSpill = nSpill; + p->flags = flags; + p->zJournal = zName; + p->pVfs = pVfs; + return SQLITE_OK; +} + +/* +** Open an in-memory journal file. +*/ +SQLITE_PRIVATE void sqlite3MemJournalOpen(sqlite3_file *pJfd){ + sqlite3JournalOpen(0, 0, pJfd, 0, -1); +} + +#if defined(SQLITE_ENABLE_ATOMIC_WRITE) \ + || defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE) +/* +** If the argument p points to a MemJournal structure that is not an +** in-memory-only journal file (i.e. is one that was opened with a +ve +** nSpill parameter or as SQLITE_OPEN_MAIN_JOURNAL), and the underlying +** file has not yet been created, create it now. +*/ +SQLITE_PRIVATE int sqlite3JournalCreate(sqlite3_file *pJfd){ + int rc = SQLITE_OK; + MemJournal *p = (MemJournal*)pJfd; + if( pJfd->pMethods==&MemJournalMethods && ( +#ifdef SQLITE_ENABLE_ATOMIC_WRITE + p->nSpill>0 +#else + /* While this appears to not be possible without ATOMIC_WRITE, the + ** paths are complex, so it seems prudent to leave the test in as + ** a NEVER(), in case our analysis is subtly flawed. */ + NEVER(p->nSpill>0) +#endif +#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE + || (p->flags & SQLITE_OPEN_MAIN_JOURNAL) +#endif + )){ + rc = memjrnlCreateFile(p); + } + return rc; +} +#endif + +/* +** The file-handle passed as the only argument is open on a journal file. +** Return true if this "journal file" is currently stored in heap memory, +** or false otherwise. +*/ +SQLITE_PRIVATE int sqlite3JournalIsInMemory(sqlite3_file *p){ + return p->pMethods==&MemJournalMethods; +} + +/* +** Return the number of bytes required to store a JournalFile that uses vfs +** pVfs to create the underlying on-disk files. +*/ +SQLITE_PRIVATE int sqlite3JournalSize(sqlite3_vfs *pVfs){ + return MAX(pVfs->szOsFile, (int)sizeof(MemJournal)); +} + +/************** End of memjournal.c ******************************************/ +/************** Begin file walker.c ******************************************/ +/* +** 2008 August 16 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains routines used for walking the parser tree for +** an SQL statement. +*/ +/* #include "sqliteInt.h" */ +/* #include */ +/* #include */ + + +#if !defined(SQLITE_OMIT_WINDOWFUNC) +/* +** Walk all expressions linked into the list of Window objects passed +** as the second argument. +*/ +static int walkWindowList(Walker *pWalker, Window *pList, int bOneOnly){ + Window *pWin; + for(pWin=pList; pWin; pWin=pWin->pNextWin){ + int rc; + rc = sqlite3WalkExprList(pWalker, pWin->pOrderBy); + if( rc ) return WRC_Abort; + rc = sqlite3WalkExprList(pWalker, pWin->pPartition); + if( rc ) return WRC_Abort; + rc = sqlite3WalkExpr(pWalker, pWin->pFilter); + if( rc ) return WRC_Abort; + rc = sqlite3WalkExpr(pWalker, pWin->pStart); + if( rc ) return WRC_Abort; + rc = sqlite3WalkExpr(pWalker, pWin->pEnd); + if( rc ) return WRC_Abort; + if( bOneOnly ) break; + } + return WRC_Continue; +} +#endif + +/* +** Walk an expression tree. Invoke the callback once for each node +** of the expression, while descending. (In other words, the callback +** is invoked before visiting children.) +** +** The return value from the callback should be one of the WRC_* +** constants to specify how to proceed with the walk. +** +** WRC_Continue Continue descending down the tree. +** +** WRC_Prune Do not descend into child nodes, but allow +** the walk to continue with sibling nodes. +** +** WRC_Abort Do no more callbacks. Unwind the stack and +** return from the top-level walk call. +** +** The return value from this routine is WRC_Abort to abandon the tree walk +** and WRC_Continue to continue. +*/ +SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3WalkExprNN(Walker *pWalker, Expr *pExpr){ + int rc; + testcase( ExprHasProperty(pExpr, EP_TokenOnly) ); + testcase( ExprHasProperty(pExpr, EP_Reduced) ); + while(1){ + rc = pWalker->xExprCallback(pWalker, pExpr); + if( rc ) return rc & WRC_Abort; + if( !ExprHasProperty(pExpr,(EP_TokenOnly|EP_Leaf)) ){ + assert( pExpr->x.pList==0 || pExpr->pRight==0 ); + if( pExpr->pLeft && sqlite3WalkExprNN(pWalker, pExpr->pLeft) ){ + return WRC_Abort; + } + if( pExpr->pRight ){ + assert( !ExprHasProperty(pExpr, EP_WinFunc) ); + pExpr = pExpr->pRight; + continue; + }else if( ExprUseXSelect(pExpr) ){ + assert( !ExprHasProperty(pExpr, EP_WinFunc) ); + if( sqlite3WalkSelect(pWalker, pExpr->x.pSelect) ) return WRC_Abort; + }else{ + if( pExpr->x.pList ){ + if( sqlite3WalkExprList(pWalker, pExpr->x.pList) ) return WRC_Abort; + } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( ExprHasProperty(pExpr, EP_WinFunc) ){ + if( walkWindowList(pWalker, pExpr->y.pWin, 1) ) return WRC_Abort; + } +#endif + } + } + break; + } + return WRC_Continue; +} +SQLITE_PRIVATE int sqlite3WalkExpr(Walker *pWalker, Expr *pExpr){ + return pExpr ? sqlite3WalkExprNN(pWalker,pExpr) : WRC_Continue; +} + +/* +** Call sqlite3WalkExpr() for every expression in list p or until +** an abort request is seen. +*/ +SQLITE_PRIVATE int sqlite3WalkExprList(Walker *pWalker, ExprList *p){ + int i; + struct ExprList_item *pItem; + if( p ){ + for(i=p->nExpr, pItem=p->a; i>0; i--, pItem++){ + if( sqlite3WalkExpr(pWalker, pItem->pExpr) ) return WRC_Abort; + } + } + return WRC_Continue; +} + +/* +** This is a no-op callback for Walker->xSelectCallback2. If this +** callback is set, then the Select->pWinDefn list is traversed. +*/ +SQLITE_PRIVATE void sqlite3WalkWinDefnDummyCallback(Walker *pWalker, Select *p){ + UNUSED_PARAMETER(pWalker); + UNUSED_PARAMETER(p); + /* No-op */ +} + +/* +** Walk all expressions associated with SELECT statement p. Do +** not invoke the SELECT callback on p, but do (of course) invoke +** any expr callbacks and SELECT callbacks that come from subqueries. +** Return WRC_Abort or WRC_Continue. +*/ +SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker *pWalker, Select *p){ + if( sqlite3WalkExprList(pWalker, p->pEList) ) return WRC_Abort; + if( sqlite3WalkExpr(pWalker, p->pWhere) ) return WRC_Abort; + if( sqlite3WalkExprList(pWalker, p->pGroupBy) ) return WRC_Abort; + if( sqlite3WalkExpr(pWalker, p->pHaving) ) return WRC_Abort; + if( sqlite3WalkExprList(pWalker, p->pOrderBy) ) return WRC_Abort; + if( sqlite3WalkExpr(pWalker, p->pLimit) ) return WRC_Abort; +#if !defined(SQLITE_OMIT_WINDOWFUNC) + if( p->pWinDefn ){ + Parse *pParse; + if( pWalker->xSelectCallback2==sqlite3WalkWinDefnDummyCallback + || ((pParse = pWalker->pParse)!=0 && IN_RENAME_OBJECT) +#ifndef SQLITE_OMIT_CTE + || pWalker->xSelectCallback2==sqlite3SelectPopWith +#endif + ){ + /* The following may return WRC_Abort if there are unresolvable + ** symbols (e.g. a table that does not exist) in a window definition. */ + int rc = walkWindowList(pWalker, p->pWinDefn, 0); + return rc; + } + } +#endif + return WRC_Continue; +} + +/* +** Walk the parse trees associated with all subqueries in the +** FROM clause of SELECT statement p. Do not invoke the select +** callback on p, but do invoke it on each FROM clause subquery +** and on any subqueries further down in the tree. Return +** WRC_Abort or WRC_Continue; +*/ +SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker *pWalker, Select *p){ + SrcList *pSrc; + int i; + SrcItem *pItem; + + pSrc = p->pSrc; + if( ALWAYS(pSrc) ){ + for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){ + if( pItem->fg.isSubquery + && sqlite3WalkSelect(pWalker, pItem->u4.pSubq->pSelect) + ){ + return WRC_Abort; + } + if( pItem->fg.isTabFunc + && sqlite3WalkExprList(pWalker, pItem->u1.pFuncArg) + ){ + return WRC_Abort; + } + } + } + return WRC_Continue; +} + +/* +** Call sqlite3WalkExpr() for every expression in Select statement p. +** Invoke sqlite3WalkSelect() for subqueries in the FROM clause and +** on the compound select chain, p->pPrior. +** +** If it is not NULL, the xSelectCallback() callback is invoked before +** the walk of the expressions and FROM clause. The xSelectCallback2() +** method is invoked following the walk of the expressions and FROM clause, +** but only if both xSelectCallback and xSelectCallback2 are both non-NULL +** and if the expressions and FROM clause both return WRC_Continue; +** +** Return WRC_Continue under normal conditions. Return WRC_Abort if +** there is an abort request. +** +** If the Walker does not have an xSelectCallback() then this routine +** is a no-op returning WRC_Continue. +*/ +SQLITE_PRIVATE int sqlite3WalkSelect(Walker *pWalker, Select *p){ + int rc; + if( p==0 ) return WRC_Continue; + if( pWalker->xSelectCallback==0 ) return WRC_Continue; + do{ + rc = pWalker->xSelectCallback(pWalker, p); + if( rc ) return rc & WRC_Abort; + if( sqlite3WalkSelectExpr(pWalker, p) + || sqlite3WalkSelectFrom(pWalker, p) + ){ + return WRC_Abort; + } + if( pWalker->xSelectCallback2 ){ + pWalker->xSelectCallback2(pWalker, p); + } + p = p->pPrior; + }while( p!=0 ); + return WRC_Continue; +} + +/* Increase the walkerDepth when entering a subquery, and +** decrease when leaving the subquery. +*/ +SQLITE_PRIVATE int sqlite3WalkerDepthIncrease(Walker *pWalker, Select *pSelect){ + UNUSED_PARAMETER(pSelect); + pWalker->walkerDepth++; + return WRC_Continue; +} +SQLITE_PRIVATE void sqlite3WalkerDepthDecrease(Walker *pWalker, Select *pSelect){ + UNUSED_PARAMETER(pSelect); + pWalker->walkerDepth--; +} + + +/* +** No-op routine for the parse-tree walker. +** +** When this routine is the Walker.xExprCallback then expression trees +** are walked without any actions being taken at each node. Presumably, +** when this routine is used for Walker.xExprCallback then +** Walker.xSelectCallback is set to do something useful for every +** subquery in the parser tree. +*/ +SQLITE_PRIVATE int sqlite3ExprWalkNoop(Walker *NotUsed, Expr *NotUsed2){ + UNUSED_PARAMETER2(NotUsed, NotUsed2); + return WRC_Continue; +} + +/* +** No-op routine for the parse-tree walker for SELECT statements. +** subquery in the parser tree. +*/ +SQLITE_PRIVATE int sqlite3SelectWalkNoop(Walker *NotUsed, Select *NotUsed2){ + UNUSED_PARAMETER2(NotUsed, NotUsed2); + return WRC_Continue; +} + +/************** End of walker.c **********************************************/ +/************** Begin file resolve.c *****************************************/ +/* +** 2008 August 18 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file contains routines used for walking the parser tree and +** resolve all identifiers by associating them with a particular +** table and column. +*/ +/* #include "sqliteInt.h" */ + +/* +** Magic table number to mean the EXCLUDED table in an UPSERT statement. +*/ +#define EXCLUDED_TABLE_NUMBER 2 + +/* +** Walk the expression tree pExpr and increase the aggregate function +** depth (the Expr.op2 field) by N on every TK_AGG_FUNCTION node. +** This needs to occur when copying a TK_AGG_FUNCTION node from an +** outer query into an inner subquery. +** +** incrAggFunctionDepth(pExpr,n) is the main routine. incrAggDepth(..) +** is a helper function - a callback for the tree walker. +** +** See also the sqlite3WindowExtraAggFuncDepth() routine in window.c +*/ +static int incrAggDepth(Walker *pWalker, Expr *pExpr){ + if( pExpr->op==TK_AGG_FUNCTION ) pExpr->op2 += pWalker->u.n; + return WRC_Continue; +} +static void incrAggFunctionDepth(Expr *pExpr, int N){ + if( N>0 ){ + Walker w; + memset(&w, 0, sizeof(w)); + w.xExprCallback = incrAggDepth; + w.u.n = N; + sqlite3WalkExpr(&w, pExpr); + } +} + +/* +** Turn the pExpr expression into an alias for the iCol-th column of the +** result set in pEList. +** +** If the reference is followed by a COLLATE operator, then make sure +** the COLLATE operator is preserved. For example: +** +** SELECT a+b, c+d FROM t1 ORDER BY 1 COLLATE nocase; +** +** Should be transformed into: +** +** SELECT a+b, c+d FROM t1 ORDER BY (a+b) COLLATE nocase; +** +** The nSubquery parameter specifies how many levels of subquery the +** alias is removed from the original expression. The usual value is +** zero but it might be more if the alias is contained within a subquery +** of the original expression. The Expr.op2 field of TK_AGG_FUNCTION +** structures must be increased by the nSubquery amount. +*/ +static void resolveAlias( + Parse *pParse, /* Parsing context */ + ExprList *pEList, /* A result set */ + int iCol, /* A column in the result set. 0..pEList->nExpr-1 */ + Expr *pExpr, /* Transform this into an alias to the result set */ + int nSubquery /* Number of subqueries that the label is moving */ +){ + Expr *pOrig; /* The iCol-th column of the result set */ + Expr *pDup; /* Copy of pOrig */ + sqlite3 *db; /* The database connection */ + + assert( iCol>=0 && iColnExpr ); + pOrig = pEList->a[iCol].pExpr; + assert( pOrig!=0 ); + assert( !ExprHasProperty(pExpr, EP_Reduced|EP_TokenOnly) ); + if( pExpr->pAggInfo ) return; + db = pParse->db; + pDup = sqlite3ExprDup(db, pOrig, 0); + if( db->mallocFailed ){ + sqlite3ExprDelete(db, pDup); + pDup = 0; + }else{ + Expr temp; + incrAggFunctionDepth(pDup, nSubquery); + if( pExpr->op==TK_COLLATE ){ + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + pDup = sqlite3ExprAddCollateString(pParse, pDup, pExpr->u.zToken); + } + memcpy(&temp, pDup, sizeof(Expr)); + memcpy(pDup, pExpr, sizeof(Expr)); + memcpy(pExpr, &temp, sizeof(Expr)); + if( ExprHasProperty(pExpr, EP_WinFunc) ){ + if( ALWAYS(pExpr->y.pWin!=0) ){ + pExpr->y.pWin->pOwner = pExpr; + } + } + sqlite3ExprDeferredDelete(pParse, pDup); + } +} + +/* +** Subqueries store the original database, table and column names for their +** result sets in ExprList.a[].zSpan, in the form "DATABASE.TABLE.COLUMN", +** and mark the expression-list item by setting ExprList.a[].fg.eEName +** to ENAME_TAB. +** +** Check to see if the zSpan/eEName of the expression-list item passed to this +** routine matches the zDb, zTab, and zCol. If any of zDb, zTab, and zCol are +** NULL then those fields will match anything. Return true if there is a match, +** or false otherwise. +** +** SF_NestedFrom subqueries also store an entry for the implicit rowid (or +** _rowid_, or oid) column by setting ExprList.a[].fg.eEName to ENAME_ROWID, +** and setting zSpan to "DATABASE.TABLE.". This type of pItem +** argument matches if zCol is a rowid alias. If it is not NULL, (*pbRowid) +** is set to 1 if there is this kind of match. +*/ +SQLITE_PRIVATE int sqlite3MatchEName( + const struct ExprList_item *pItem, + const char *zCol, + const char *zTab, + const char *zDb, + int *pbRowid +){ + int n; + const char *zSpan; + int eEName = pItem->fg.eEName; + if( eEName!=ENAME_TAB && (eEName!=ENAME_ROWID || NEVER(pbRowid==0)) ){ + return 0; + } + assert( pbRowid==0 || *pbRowid==0 ); + zSpan = pItem->zEName; + for(n=0; ALWAYS(zSpan[n]) && zSpan[n]!='.'; n++){} + if( zDb && (sqlite3StrNICmp(zSpan, zDb, n)!=0 || zDb[n]!=0) ){ + return 0; + } + zSpan += n+1; + for(n=0; ALWAYS(zSpan[n]) && zSpan[n]!='.'; n++){} + if( zTab && (sqlite3StrNICmp(zSpan, zTab, n)!=0 || zTab[n]!=0) ){ + return 0; + } + zSpan += n+1; + if( zCol ){ + if( eEName==ENAME_TAB && sqlite3StrICmp(zSpan, zCol)!=0 ) return 0; + if( eEName==ENAME_ROWID && sqlite3IsRowid(zCol)==0 ) return 0; + } + if( eEName==ENAME_ROWID ) *pbRowid = 1; + return 1; +} + +/* +** Return TRUE if the double-quoted string mis-feature should be supported. +*/ +static int areDoubleQuotedStringsEnabled(sqlite3 *db, NameContext *pTopNC){ + if( db->init.busy ) return 1; /* Always support for legacy schemas */ + if( pTopNC->ncFlags & NC_IsDDL ){ + /* Currently parsing a DDL statement */ + if( sqlite3WritableSchema(db) && (db->flags & SQLITE_DqsDML)!=0 ){ + return 1; + } + return (db->flags & SQLITE_DqsDDL)!=0; + }else{ + /* Currently parsing a DML statement */ + return (db->flags & SQLITE_DqsDML)!=0; + } +} + +/* +** The argument is guaranteed to be a non-NULL Expr node of type TK_COLUMN. +** return the appropriate colUsed mask. +*/ +SQLITE_PRIVATE Bitmask sqlite3ExprColUsed(Expr *pExpr){ + int n; + Table *pExTab; + + n = pExpr->iColumn; + assert( ExprUseYTab(pExpr) ); + pExTab = pExpr->y.pTab; + assert( pExTab!=0 ); + assert( n < pExTab->nCol ); + if( (pExTab->tabFlags & TF_HasGenerated)!=0 + && (pExTab->aCol[n].colFlags & COLFLAG_GENERATED)!=0 + ){ + testcase( pExTab->nCol==BMS-1 ); + testcase( pExTab->nCol==BMS ); + return pExTab->nCol>=BMS ? ALLBITS : MASKBIT(pExTab->nCol)-1; + }else{ + testcase( n==BMS-1 ); + testcase( n==BMS ); + if( n>=BMS ) n = BMS-1; + return ((Bitmask)1)<db, TK_COLUMN, 0, 0); + if( pNew ){ + pNew->iTable = pMatch->iCursor; + pNew->iColumn = iColumn; + pNew->y.pTab = pMatch->pSTab; + assert( (pMatch->fg.jointype & (JT_LEFT|JT_LTORJ))!=0 ); + ExprSetProperty(pNew, EP_CanBeNull); + *ppList = sqlite3ExprListAppend(pParse, *ppList, pNew); + } +} + +/* +** Return TRUE (non-zero) if zTab is a valid name for the schema table pTab. +*/ +static SQLITE_NOINLINE int isValidSchemaTableName( + const char *zTab, /* Name as it appears in the SQL */ + Table *pTab, /* The schema table we are trying to match */ + const char *zDb /* non-NULL if a database qualifier is present */ +){ + const char *zLegacy; + assert( pTab!=0 ); + assert( pTab->tnum==1 ); + if( sqlite3StrNICmp(zTab, "sqlite_", 7)!=0 ) return 0; + zLegacy = pTab->zName; + if( strcmp(zLegacy+7, &LEGACY_TEMP_SCHEMA_TABLE[7])==0 ){ + if( sqlite3StrICmp(zTab+7, &PREFERRED_TEMP_SCHEMA_TABLE[7])==0 ){ + return 1; + } + if( zDb==0 ) return 0; + if( sqlite3StrICmp(zTab+7, &LEGACY_SCHEMA_TABLE[7])==0 ) return 1; + if( sqlite3StrICmp(zTab+7, &PREFERRED_SCHEMA_TABLE[7])==0 ) return 1; + }else{ + if( sqlite3StrICmp(zTab+7, &PREFERRED_SCHEMA_TABLE[7])==0 ) return 1; + } + return 0; +} + +/* +** Given the name of a column of the form X.Y.Z or Y.Z or just Z, look up +** that name in the set of source tables in pSrcList and make the pExpr +** expression node refer back to that source column. The following changes +** are made to pExpr: +** +** pExpr->iDb Set the index in db->aDb[] of the database X +** (even if X is implied). +** pExpr->iTable Set to the cursor number for the table obtained +** from pSrcList. +** pExpr->y.pTab Points to the Table structure of X.Y (even if +** X and/or Y are implied.) +** pExpr->iColumn Set to the column number within the table. +** pExpr->op Set to TK_COLUMN. +** pExpr->pLeft Any expression this points to is deleted +** pExpr->pRight Any expression this points to is deleted. +** +** The zDb variable is the name of the database (the "X"). This value may be +** NULL meaning that name is of the form Y.Z or Z. Any available database +** can be used. The zTable variable is the name of the table (the "Y"). This +** value can be NULL if zDb is also NULL. If zTable is NULL it +** means that the form of the name is Z and that columns from any table +** can be used. +** +** If the name cannot be resolved unambiguously, leave an error message +** in pParse and return WRC_Abort. Return WRC_Prune on success. +*/ +static int lookupName( + Parse *pParse, /* The parsing context */ + const char *zDb, /* Name of the database containing table, or NULL */ + const char *zTab, /* Name of table containing column, or NULL */ + const Expr *pRight, /* Name of the column. */ + NameContext *pNC, /* The name context used to resolve the name */ + Expr *pExpr /* Make this EXPR node point to the selected column */ +){ + int i, j; /* Loop counters */ + int cnt = 0; /* Number of matching column names */ + int cntTab = 0; /* Number of potential "rowid" matches */ + int nSubquery = 0; /* How many levels of subquery */ + sqlite3 *db = pParse->db; /* The database connection */ + SrcItem *pItem; /* Use for looping over pSrcList items */ + SrcItem *pMatch = 0; /* The matching pSrcList item */ + NameContext *pTopNC = pNC; /* First namecontext in the list */ + Schema *pSchema = 0; /* Schema of the expression */ + int eNewExprOp = TK_COLUMN; /* New value for pExpr->op on success */ + Table *pTab = 0; /* Table holding the row */ + ExprList *pFJMatch = 0; /* Matches for FULL JOIN .. USING */ + const char *zCol = pRight->u.zToken; + + assert( pNC ); /* the name context cannot be NULL. */ + assert( zCol ); /* The Z in X.Y.Z cannot be NULL */ + assert( zDb==0 || zTab!=0 ); + assert( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) ); + + /* Initialize the node to no-match */ + pExpr->iTable = -1; + ExprSetVVAProperty(pExpr, EP_NoReduce); + + /* Translate the schema name in zDb into a pointer to the corresponding + ** schema. If not found, pSchema will remain NULL and nothing will match + ** resulting in an appropriate error message toward the end of this routine + */ + if( zDb ){ + testcase( pNC->ncFlags & NC_PartIdx ); + testcase( pNC->ncFlags & NC_IsCheck ); + if( (pNC->ncFlags & (NC_PartIdx|NC_IsCheck))!=0 ){ + /* Silently ignore database qualifiers inside CHECK constraints and + ** partial indices. Do not raise errors because that might break + ** legacy and because it does not hurt anything to just ignore the + ** database name. */ + zDb = 0; + }else{ + for(i=0; inDb; i++){ + assert( db->aDb[i].zDbSName ); + if( sqlite3StrICmp(db->aDb[i].zDbSName,zDb)==0 ){ + pSchema = db->aDb[i].pSchema; + break; + } + } + if( i==db->nDb && sqlite3StrICmp("main", zDb)==0 ){ + /* This branch is taken when the main database has been renamed + ** using SQLITE_DBCONFIG_MAINDBNAME. */ + pSchema = db->aDb[0].pSchema; + zDb = db->aDb[0].zDbSName; + } + } + } + + /* Start at the inner-most context and move outward until a match is found */ + assert( pNC && cnt==0 ); + do{ + ExprList *pEList; + SrcList *pSrcList = pNC->pSrcList; + + if( pSrcList ){ + for(i=0, pItem=pSrcList->a; inSrc; i++, pItem++){ + pTab = pItem->pSTab; + assert( pTab!=0 && pTab->zName!=0 ); + assert( pTab->nCol>0 || pParse->nErr ); + assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem)); + if( pItem->fg.isNestedFrom ){ + /* In this case, pItem is a subquery that has been formed from a + ** parenthesized subset of the FROM clause terms. Example: + ** .... FROM t1 LEFT JOIN (t2 RIGHT JOIN t3 USING(x)) USING(y) ... + ** \_________________________/ + ** This pItem -------------^ + */ + int hit = 0; + Select *pSel; + assert( pItem->fg.isSubquery ); + assert( pItem->u4.pSubq!=0 ); + pSel = pItem->u4.pSubq->pSelect; + assert( pSel!=0 ); + pEList = pSel->pEList; + assert( pEList!=0 ); + assert( pEList->nExpr==pTab->nCol ); + for(j=0; jnExpr; j++){ + int bRowid = 0; /* True if possible rowid match */ + if( !sqlite3MatchEName(&pEList->a[j], zCol, zTab, zDb, &bRowid) ){ + continue; + } + if( bRowid==0 ){ + if( cnt>0 ){ + if( pItem->fg.isUsing==0 + || sqlite3IdListIndex(pItem->u3.pUsing, zCol)<0 + || pMatch==pItem + ){ + /* Two or more tables have the same column name which is + ** not joined by USING. Or, a single table has two columns + ** that match a USING term (if pMatch==pItem). These are both + ** "ambiguous column name" errors. Signal as much by clearing + ** pFJMatch and letting cnt go above 1. */ + sqlite3ExprListDelete(db, pFJMatch); + pFJMatch = 0; + }else + if( (pItem->fg.jointype & JT_RIGHT)==0 ){ + /* An INNER or LEFT JOIN. Use the left-most table */ + continue; + }else + if( (pItem->fg.jointype & JT_LEFT)==0 ){ + /* A RIGHT JOIN. Use the right-most table */ + cnt = 0; + sqlite3ExprListDelete(db, pFJMatch); + pFJMatch = 0; + }else{ + /* For a FULL JOIN, we must construct a coalesce() func */ + extendFJMatch(pParse, &pFJMatch, pMatch, pExpr->iColumn); + } + } + cnt++; + hit = 1; + }else if( cnt>0 ){ + /* This is a potential rowid match, but there has already been + ** a real match found. So this can be ignored. */ + continue; + } + cntTab++; + pMatch = pItem; + pExpr->iColumn = j; + pEList->a[j].fg.bUsed = 1; + + /* rowid cannot be part of a USING clause - assert() this. */ + assert( bRowid==0 || pEList->a[j].fg.bUsingTerm==0 ); + if( pEList->a[j].fg.bUsingTerm ) break; + } + if( hit || zTab==0 ) continue; + } + assert( zDb==0 || zTab!=0 ); + if( zTab ){ + if( zDb ){ + if( pTab->pSchema!=pSchema ) continue; + if( pSchema==0 && strcmp(zDb,"*")!=0 ) continue; + } + if( pItem->zAlias!=0 ){ + if( sqlite3StrICmp(zTab, pItem->zAlias)!=0 ){ + continue; + } + }else if( sqlite3StrICmp(zTab, pTab->zName)!=0 ){ + if( pTab->tnum!=1 ) continue; + if( !isValidSchemaTableName(zTab, pTab, zDb) ) continue; + } + assert( ExprUseYTab(pExpr) ); + if( IN_RENAME_OBJECT && pItem->zAlias ){ + sqlite3RenameTokenRemap(pParse, 0, (void*)&pExpr->y.pTab); + } + } + j = sqlite3ColumnIndex(pTab, zCol); + if( j>=0 ){ + if( cnt>0 ){ + if( pItem->fg.isUsing==0 + || sqlite3IdListIndex(pItem->u3.pUsing, zCol)<0 + ){ + /* Two or more tables have the same column name which is + ** not joined by USING. This is an error. Signal as much + ** by clearing pFJMatch and letting cnt go above 1. */ + sqlite3ExprListDelete(db, pFJMatch); + pFJMatch = 0; + }else + if( (pItem->fg.jointype & JT_RIGHT)==0 ){ + /* An INNER or LEFT JOIN. Use the left-most table */ + continue; + }else + if( (pItem->fg.jointype & JT_LEFT)==0 ){ + /* A RIGHT JOIN. Use the right-most table */ + cnt = 0; + sqlite3ExprListDelete(db, pFJMatch); + pFJMatch = 0; + }else{ + /* For a FULL JOIN, we must construct a coalesce() func */ + extendFJMatch(pParse, &pFJMatch, pMatch, pExpr->iColumn); + } + } + cnt++; + pMatch = pItem; + /* Substitute the rowid (column -1) for the INTEGER PRIMARY KEY */ + pExpr->iColumn = j==pTab->iPKey ? -1 : (i16)j; + if( pItem->fg.isNestedFrom ){ + sqlite3SrcItemColumnUsed(pItem, j); + } + } + if( 0==cnt && VisibleRowid(pTab) ){ + /* pTab is a potential ROWID match. Keep track of it and match + ** the ROWID later if that seems appropriate. (Search for "cntTab" + ** to find related code.) Only allow a ROWID match if there is + ** a single ROWID match candidate. + */ +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + /* In SQLITE_ALLOW_ROWID_IN_VIEW mode, allow a ROWID match + ** if there is a single VIEW candidate or if there is a single + ** non-VIEW candidate plus multiple VIEW candidates. In other + ** words non-VIEW candidate terms take precedence over VIEWs. + */ + if( cntTab==0 + || (cntTab==1 + && pMatch!=0 + && ALWAYS(pMatch->pSTab!=0) + && (pMatch->pSTab->tabFlags & TF_Ephemeral)!=0 + && (pTab->tabFlags & TF_Ephemeral)==0) + ){ + cntTab = 1; + pMatch = pItem; + }else{ + cntTab++; + } +#else + /* The (much more common) non-SQLITE_ALLOW_ROWID_IN_VIEW case is + ** simpler since we require exactly one candidate, which will + ** always be a non-VIEW + */ + cntTab++; + pMatch = pItem; +#endif + } + } + if( pMatch ){ + pExpr->iTable = pMatch->iCursor; + assert( ExprUseYTab(pExpr) ); + pExpr->y.pTab = pMatch->pSTab; + if( (pMatch->fg.jointype & (JT_LEFT|JT_LTORJ))!=0 ){ + ExprSetProperty(pExpr, EP_CanBeNull); + } + pSchema = pExpr->y.pTab->pSchema; + } + } /* if( pSrcList ) */ + +#if !defined(SQLITE_OMIT_TRIGGER) || !defined(SQLITE_OMIT_UPSERT) + /* If we have not already resolved the name, then maybe + ** it is a new.* or old.* trigger argument reference. Or + ** maybe it is an excluded.* from an upsert. Or maybe it is + ** a reference in the RETURNING clause to a table being modified. + */ + if( cnt==0 && zDb==0 ){ + pTab = 0; +#ifndef SQLITE_OMIT_TRIGGER + if( pParse->pTriggerTab!=0 ){ + int op = pParse->eTriggerOp; + assert( op==TK_DELETE || op==TK_UPDATE || op==TK_INSERT ); + if( pParse->bReturning ){ + if( (pNC->ncFlags & NC_UBaseReg)!=0 + && ALWAYS(zTab==0 + || sqlite3StrICmp(zTab,pParse->pTriggerTab->zName)==0 + || isValidSchemaTableName(zTab, pParse->pTriggerTab, 0)) + ){ + pExpr->iTable = op!=TK_DELETE; + pTab = pParse->pTriggerTab; + } + }else if( op!=TK_DELETE && zTab && sqlite3StrICmp("new",zTab) == 0 ){ + pExpr->iTable = 1; + pTab = pParse->pTriggerTab; + }else if( op!=TK_INSERT && zTab && sqlite3StrICmp("old",zTab)==0 ){ + pExpr->iTable = 0; + pTab = pParse->pTriggerTab; + } + } +#endif /* SQLITE_OMIT_TRIGGER */ +#ifndef SQLITE_OMIT_UPSERT + if( (pNC->ncFlags & NC_UUpsert)!=0 && zTab!=0 ){ + Upsert *pUpsert = pNC->uNC.pUpsert; + if( pUpsert && sqlite3StrICmp("excluded",zTab)==0 ){ + pTab = pUpsert->pUpsertSrc->a[0].pSTab; + pExpr->iTable = EXCLUDED_TABLE_NUMBER; + } + } +#endif /* SQLITE_OMIT_UPSERT */ + + if( pTab ){ + int iCol; + pSchema = pTab->pSchema; + cntTab++; + iCol = sqlite3ColumnIndex(pTab, zCol); + if( iCol>=0 ){ + if( pTab->iPKey==iCol ) iCol = -1; + }else{ + if( sqlite3IsRowid(zCol) && VisibleRowid(pTab) ){ + iCol = -1; + }else{ + iCol = pTab->nCol; + } + } + if( iColnCol ){ + cnt++; + pMatch = 0; +#ifndef SQLITE_OMIT_UPSERT + if( pExpr->iTable==EXCLUDED_TABLE_NUMBER ){ + testcase( iCol==(-1) ); + assert( ExprUseYTab(pExpr) ); + if( IN_RENAME_OBJECT ){ + pExpr->iColumn = iCol; + pExpr->y.pTab = pTab; + eNewExprOp = TK_COLUMN; + }else{ + pExpr->iTable = pNC->uNC.pUpsert->regData + + sqlite3TableColumnToStorage(pTab, iCol); + eNewExprOp = TK_REGISTER; + } + }else +#endif /* SQLITE_OMIT_UPSERT */ + { + assert( ExprUseYTab(pExpr) ); + pExpr->y.pTab = pTab; + if( pParse->bReturning ){ + eNewExprOp = TK_REGISTER; + pExpr->op2 = TK_COLUMN; + pExpr->iColumn = iCol; + pExpr->iTable = pNC->uNC.iBaseReg + (pTab->nCol+1)*pExpr->iTable + + sqlite3TableColumnToStorage(pTab, iCol) + 1; + }else{ + pExpr->iColumn = (i16)iCol; + eNewExprOp = TK_TRIGGER; +#ifndef SQLITE_OMIT_TRIGGER + if( iCol<0 ){ + pExpr->affExpr = SQLITE_AFF_INTEGER; + }else if( pExpr->iTable==0 ){ + testcase( iCol==31 ); + testcase( iCol==32 ); + pParse->oldmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<newmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<=1 + && pMatch + && (pNC->ncFlags & (NC_IdxExpr|NC_GenCol))==0 + && sqlite3IsRowid(zCol) + && ALWAYS(VisibleRowid(pMatch->pSTab) || pMatch->fg.isNestedFrom) + ){ + cnt = cntTab; +#if SQLITE_ALLOW_ROWID_IN_VIEW+0==2 + if( pMatch->pSTab!=0 && IsView(pMatch->pSTab) ){ + eNewExprOp = TK_NULL; + } +#endif + if( pMatch->fg.isNestedFrom==0 ) pExpr->iColumn = -1; + pExpr->affExpr = SQLITE_AFF_INTEGER; + } + + /* + ** If the input is of the form Z (not Y.Z or X.Y.Z) then the name Z + ** might refer to an result-set alias. This happens, for example, when + ** we are resolving names in the WHERE clause of the following command: + ** + ** SELECT a+b AS x FROM table WHERE x<10; + ** + ** In cases like this, replace pExpr with a copy of the expression that + ** forms the result set entry ("a+b" in the example) and return immediately. + ** Note that the expression in the result set should have already been + ** resolved by the time the WHERE clause is resolved. + ** + ** The ability to use an output result-set column in the WHERE, GROUP BY, + ** or HAVING clauses, or as part of a larger expression in the ORDER BY + ** clause is not standard SQL. This is a (goofy) SQLite extension, that + ** is supported for backwards compatibility only. Hence, we issue a warning + ** on sqlite3_log() whenever the capability is used. + */ + if( cnt==0 + && (pNC->ncFlags & NC_UEList)!=0 + && zTab==0 + ){ + pEList = pNC->uNC.pEList; + assert( pEList!=0 ); + for(j=0; jnExpr; j++){ + char *zAs = pEList->a[j].zEName; + if( pEList->a[j].fg.eEName==ENAME_NAME + && sqlite3_stricmp(zAs, zCol)==0 + ){ + Expr *pOrig; + assert( pExpr->pLeft==0 && pExpr->pRight==0 ); + assert( ExprUseXList(pExpr)==0 || pExpr->x.pList==0 ); + assert( ExprUseXSelect(pExpr)==0 || pExpr->x.pSelect==0 ); + pOrig = pEList->a[j].pExpr; + if( (pNC->ncFlags&NC_AllowAgg)==0 && ExprHasProperty(pOrig, EP_Agg) ){ + sqlite3ErrorMsg(pParse, "misuse of aliased aggregate %s", zAs); + return WRC_Abort; + } + if( ExprHasProperty(pOrig, EP_Win) + && ((pNC->ncFlags&NC_AllowWin)==0 || pNC!=pTopNC ) + ){ + sqlite3ErrorMsg(pParse, "misuse of aliased window function %s",zAs); + return WRC_Abort; + } + if( sqlite3ExprVectorSize(pOrig)!=1 ){ + sqlite3ErrorMsg(pParse, "row value misused"); + return WRC_Abort; + } + resolveAlias(pParse, pEList, j, pExpr, nSubquery); + cnt = 1; + pMatch = 0; + assert( zTab==0 && zDb==0 ); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, 0, (void*)pExpr); + } + goto lookupname_end; + } + } + } + + /* Advance to the next name context. The loop will exit when either + ** we have a match (cnt>0) or when we run out of name contexts. + */ + if( cnt ) break; + pNC = pNC->pNext; + nSubquery++; + }while( pNC ); + + + /* + ** If X and Y are NULL (in other words if only the column name Z is + ** supplied) and the value of Z is enclosed in double-quotes, then + ** Z is a string literal if it doesn't match any column names. In that + ** case, we need to return right away and not make any changes to + ** pExpr. + ** + ** Because no reference was made to outer contexts, the pNC->nRef + ** fields are not changed in any context. + */ + if( cnt==0 && zTab==0 ){ + assert( pExpr->op==TK_ID ); + if( ExprHasProperty(pExpr,EP_DblQuoted) + && areDoubleQuotedStringsEnabled(db, pTopNC) + ){ + /* If a double-quoted identifier does not match any known column name, + ** then treat it as a string. + ** + ** This hack was added in the early days of SQLite in a misguided attempt + ** to be compatible with MySQL 3.x, which used double-quotes for strings. + ** I now sorely regret putting in this hack. The effect of this hack is + ** that misspelled identifier names are silently converted into strings + ** rather than causing an error, to the frustration of countless + ** programmers. To all those frustrated programmers, my apologies. + ** + ** Someday, I hope to get rid of this hack. Unfortunately there is + ** a huge amount of legacy SQL that uses it. So for now, we just + ** issue a warning. + */ + sqlite3_log(SQLITE_WARNING, + "double-quoted string literal: \"%w\"", zCol); +#ifdef SQLITE_ENABLE_NORMALIZE + sqlite3VdbeAddDblquoteStr(db, pParse->pVdbe, zCol); +#endif + pExpr->op = TK_STRING; + memset(&pExpr->y, 0, sizeof(pExpr->y)); + return WRC_Prune; + } + if( sqlite3ExprIdToTrueFalse(pExpr) ){ + return WRC_Prune; + } + } + + /* + ** cnt==0 means there was not match. + ** cnt>1 means there were two or more matches. + ** + ** cnt==0 is always an error. cnt>1 is often an error, but might + ** be multiple matches for a NATURAL LEFT JOIN or a LEFT JOIN USING. + */ + assert( pFJMatch==0 || cnt>0 ); + assert( !ExprHasProperty(pExpr, EP_xIsSelect|EP_IntValue) ); + if( cnt!=1 ){ + const char *zErr; + if( pFJMatch ){ + if( pFJMatch->nExpr==cnt-1 ){ + if( ExprHasProperty(pExpr,EP_Leaf) ){ + ExprClearProperty(pExpr,EP_Leaf); + }else{ + sqlite3ExprDelete(db, pExpr->pLeft); + pExpr->pLeft = 0; + sqlite3ExprDelete(db, pExpr->pRight); + pExpr->pRight = 0; + } + extendFJMatch(pParse, &pFJMatch, pMatch, pExpr->iColumn); + pExpr->op = TK_FUNCTION; + pExpr->u.zToken = "coalesce"; + pExpr->x.pList = pFJMatch; + cnt = 1; + goto lookupname_end; + }else{ + sqlite3ExprListDelete(db, pFJMatch); + pFJMatch = 0; + } + } + zErr = cnt==0 ? "no such column" : "ambiguous column name"; + if( zDb ){ + sqlite3ErrorMsg(pParse, "%s: %s.%s.%s", zErr, zDb, zTab, zCol); + }else if( zTab ){ + sqlite3ErrorMsg(pParse, "%s: %s.%s", zErr, zTab, zCol); + }else if( cnt==0 && ExprHasProperty(pRight,EP_DblQuoted) ){ + sqlite3ErrorMsg(pParse, "%s: \"%s\" - should this be a" + " string literal in single-quotes?", + zErr, zCol); + }else{ + sqlite3ErrorMsg(pParse, "%s: %s", zErr, zCol); + } + sqlite3RecordErrorOffsetOfExpr(pParse->db, pExpr); + pParse->checkSchema = 1; + pTopNC->nNcErr++; + eNewExprOp = TK_NULL; + } + assert( pFJMatch==0 ); + + /* Remove all substructure from pExpr */ + if( !ExprHasProperty(pExpr,(EP_TokenOnly|EP_Leaf)) ){ + sqlite3ExprDelete(db, pExpr->pLeft); + pExpr->pLeft = 0; + sqlite3ExprDelete(db, pExpr->pRight); + pExpr->pRight = 0; + ExprSetProperty(pExpr, EP_Leaf); + } + + /* If a column from a table in pSrcList is referenced, then record + ** this fact in the pSrcList.a[].colUsed bitmask. Column 0 causes + ** bit 0 to be set. Column 1 sets bit 1. And so forth. Bit 63 is + ** set if the 63rd or any subsequent column is used. + ** + ** The colUsed mask is an optimization used to help determine if an + ** index is a covering index. The correct answer is still obtained + ** if the mask contains extra set bits. However, it is important to + ** avoid setting bits beyond the maximum column number of the table. + ** (See ticket [b92e5e8ec2cdbaa1]). + ** + ** If a generated column is referenced, set bits for every column + ** of the table. + */ + if( pMatch ){ + if( pExpr->iColumn>=0 ){ + pMatch->colUsed |= sqlite3ExprColUsed(pExpr); + }else{ + pMatch->fg.rowidUsed = 1; + } + } + + pExpr->op = eNewExprOp; +lookupname_end: + if( cnt==1 ){ + assert( pNC!=0 ); +#ifndef SQLITE_OMIT_AUTHORIZATION + if( pParse->db->xAuth + && (pExpr->op==TK_COLUMN || pExpr->op==TK_TRIGGER) + ){ + sqlite3AuthRead(pParse, pExpr, pSchema, pNC->pSrcList); + } +#endif + /* Increment the nRef value on all name contexts from TopNC up to + ** the point where the name matched. */ + for(;;){ + assert( pTopNC!=0 ); + pTopNC->nRef++; + if( pTopNC==pNC ) break; + pTopNC = pTopNC->pNext; + } + return WRC_Prune; + } else { + return WRC_Abort; + } +} + +/* +** Allocate and return a pointer to an expression to load the column iCol +** from datasource iSrc in SrcList pSrc. +*/ +SQLITE_PRIVATE Expr *sqlite3CreateColumnExpr(sqlite3 *db, SrcList *pSrc, int iSrc, int iCol){ + Expr *p = sqlite3ExprAlloc(db, TK_COLUMN, 0, 0); + if( p ){ + SrcItem *pItem = &pSrc->a[iSrc]; + Table *pTab; + assert( ExprUseYTab(p) ); + pTab = p->y.pTab = pItem->pSTab; + p->iTable = pItem->iCursor; + if( p->y.pTab->iPKey==iCol ){ + p->iColumn = -1; + }else{ + p->iColumn = (ynVar)iCol; + if( (pTab->tabFlags & TF_HasGenerated)!=0 + && (pTab->aCol[iCol].colFlags & COLFLAG_GENERATED)!=0 + ){ + testcase( pTab->nCol==63 ); + testcase( pTab->nCol==64 ); + pItem->colUsed = pTab->nCol>=64 ? ALLBITS : MASKBIT(pTab->nCol)-1; + }else{ + testcase( iCol==BMS ); + testcase( iCol==BMS-1 ); + pItem->colUsed |= ((Bitmask)1)<<(iCol>=BMS ? BMS-1 : iCol); + } + } + } + return p; +} + +/* +** Report an error that an expression is not valid for some set of +** pNC->ncFlags values determined by validMask. +** +** static void notValid( +** Parse *pParse, // Leave error message here +** NameContext *pNC, // The name context +** const char *zMsg, // Type of error +** int validMask, // Set of contexts for which prohibited +** Expr *pExpr // Invalidate this expression on error +** ){...} +** +** As an optimization, since the conditional is almost always false +** (because errors are rare), the conditional is moved outside of the +** function call using a macro. +*/ +static void notValidImpl( + Parse *pParse, /* Leave error message here */ + NameContext *pNC, /* The name context */ + const char *zMsg, /* Type of error */ + Expr *pExpr, /* Invalidate this expression on error */ + Expr *pError /* Associate error with this expression */ +){ + const char *zIn = "partial index WHERE clauses"; + if( pNC->ncFlags & NC_IdxExpr ) zIn = "index expressions"; +#ifndef SQLITE_OMIT_CHECK + else if( pNC->ncFlags & NC_IsCheck ) zIn = "CHECK constraints"; +#endif +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + else if( pNC->ncFlags & NC_GenCol ) zIn = "generated columns"; +#endif + sqlite3ErrorMsg(pParse, "%s prohibited in %s", zMsg, zIn); + if( pExpr ) pExpr->op = TK_NULL; + sqlite3RecordErrorOffsetOfExpr(pParse->db, pError); +} +#define sqlite3ResolveNotValid(P,N,M,X,E,R) \ + assert( ((X)&~(NC_IsCheck|NC_PartIdx|NC_IdxExpr|NC_GenCol))==0 ); \ + if( ((N)->ncFlags & (X))!=0 ) notValidImpl(P,N,M,E,R); + +/* +** Expression p should encode a floating point value between 1.0 and 0.0. +** Return 134,217,728 (2^27) times this value. Or return -1 if p is not +** a floating point value between 1.0 and 0.0. +*/ +static int exprProbability(Expr *p){ + double r = -1.0; + if( p->op!=TK_FLOAT ) return -1; + assert( !ExprHasProperty(p, EP_IntValue) ); + sqlite3AtoF(p->u.zToken, &r, sqlite3Strlen30(p->u.zToken), SQLITE_UTF8); + assert( r>=0.0 ); + if( r>1.0 ) return -1; + return (int)(r*134217728.0); +} + +/* +** This routine is callback for sqlite3WalkExpr(). +** +** Resolve symbolic names into TK_COLUMN operators for the current +** node in the expression tree. Return 0 to continue the search down +** the tree or 2 to abort the tree walk. +** +** This routine also does error checking and name resolution for +** function names. The operator for aggregate functions is changed +** to TK_AGG_FUNCTION. +*/ +static int resolveExprStep(Walker *pWalker, Expr *pExpr){ + NameContext *pNC; + Parse *pParse; + + pNC = pWalker->u.pNC; + assert( pNC!=0 ); + pParse = pNC->pParse; + assert( pParse==pWalker->pParse ); + +#ifndef NDEBUG + if( pNC->pSrcList && pNC->pSrcList->nAlloc>0 ){ + SrcList *pSrcList = pNC->pSrcList; + int i; + for(i=0; ipSrcList->nSrc; i++){ + assert( pSrcList->a[i].iCursor>=0 && pSrcList->a[i].iCursornTab); + } + } +#endif + switch( pExpr->op ){ + + /* The special operator TK_ROW means use the rowid for the first + ** column in the FROM clause. This is used by the LIMIT and ORDER BY + ** clause processing on UPDATE and DELETE statements, and by + ** UPDATE ... FROM statement processing. + */ + case TK_ROW: { + SrcList *pSrcList = pNC->pSrcList; + SrcItem *pItem; + assert( pSrcList && pSrcList->nSrc>=1 ); + pItem = pSrcList->a; + pExpr->op = TK_COLUMN; + assert( ExprUseYTab(pExpr) ); + pExpr->y.pTab = pItem->pSTab; + pExpr->iTable = pItem->iCursor; + pExpr->iColumn--; + pExpr->affExpr = SQLITE_AFF_INTEGER; + break; + } + + /* An optimization: Attempt to convert + ** + ** "expr IS NOT NULL" --> "TRUE" + ** "expr IS NULL" --> "FALSE" + ** + ** if we can prove that "expr" is never NULL. Call this the + ** "NOT NULL strength reduction optimization". + ** + ** If this optimization occurs, also restore the NameContext ref-counts + ** to the state they where in before the "column" LHS expression was + ** resolved. This prevents "column" from being counted as having been + ** referenced, which might prevent a SELECT from being erroneously + ** marked as correlated. + ** + ** 2024-03-28: Beware of aggregates. A bare column of aggregated table + ** can still evaluate to NULL even though it is marked as NOT NULL. + ** Example: + ** + ** CREATE TABLE t1(a INT NOT NULL); + ** SELECT a, a IS NULL, a IS NOT NULL, count(*) FROM t1; + ** + ** The "a IS NULL" and "a IS NOT NULL" expressions cannot be optimized + ** here because at the time this case is hit, we do not yet know whether + ** or not t1 is being aggregated. We have to assume the worst and omit + ** the optimization. The only time it is safe to apply this optimization + ** is within the WHERE clause. + */ + case TK_NOTNULL: + case TK_ISNULL: { + int anRef[8]; + NameContext *p; + int i; + for(i=0, p=pNC; p && ipNext, i++){ + anRef[i] = p->nRef; + } + sqlite3WalkExpr(pWalker, pExpr->pLeft); + if( IN_RENAME_OBJECT ) return WRC_Prune; + if( sqlite3ExprCanBeNull(pExpr->pLeft) ){ + /* The expression can be NULL. So the optimization does not apply */ + return WRC_Prune; + } + + for(i=0, p=pNC; p; p=p->pNext, i++){ + if( (p->ncFlags & NC_Where)==0 ){ + return WRC_Prune; /* Not in a WHERE clause. Unsafe to optimize. */ + } + } + testcase( ExprHasProperty(pExpr, EP_OuterON) ); + assert( !ExprHasProperty(pExpr, EP_IntValue) ); +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x80000 ){ + sqlite3DebugPrintf( + "NOT NULL strength reduction converts the following to %d:\n", + pExpr->op==TK_NOTNULL + ); + sqlite3ShowExpr(pExpr); + } +#endif /* TREETRACE_ENABLED */ + pExpr->u.iValue = (pExpr->op==TK_NOTNULL); + pExpr->flags |= EP_IntValue; + pExpr->op = TK_INTEGER; + for(i=0, p=pNC; p && ipNext, i++){ + p->nRef = anRef[i]; + } + sqlite3ExprDelete(pParse->db, pExpr->pLeft); + pExpr->pLeft = 0; + return WRC_Prune; + } + + /* A column name: ID + ** Or table name and column name: ID.ID + ** Or a database, table and column: ID.ID.ID + ** + ** The TK_ID and TK_OUT cases are combined so that there will only + ** be one call to lookupName(). Then the compiler will in-line + ** lookupName() for a size reduction and performance increase. + */ + case TK_ID: + case TK_DOT: { + const char *zTable; + const char *zDb; + Expr *pRight; + + if( pExpr->op==TK_ID ){ + zDb = 0; + zTable = 0; + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + pRight = pExpr; + }else{ + Expr *pLeft = pExpr->pLeft; + testcase( pNC->ncFlags & NC_IdxExpr ); + testcase( pNC->ncFlags & NC_GenCol ); + sqlite3ResolveNotValid(pParse, pNC, "the \".\" operator", + NC_IdxExpr|NC_GenCol, 0, pExpr); + pRight = pExpr->pRight; + if( pRight->op==TK_ID ){ + zDb = 0; + }else{ + assert( pRight->op==TK_DOT ); + assert( !ExprHasProperty(pRight, EP_IntValue) ); + zDb = pLeft->u.zToken; + pLeft = pRight->pLeft; + pRight = pRight->pRight; + } + assert( ExprUseUToken(pLeft) && ExprUseUToken(pRight) ); + zTable = pLeft->u.zToken; + assert( ExprUseYTab(pExpr) ); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, (void*)pExpr, (void*)pRight); + sqlite3RenameTokenRemap(pParse, (void*)&pExpr->y.pTab, (void*)pLeft); + } + } + return lookupName(pParse, zDb, zTable, pRight, pNC, pExpr); + } + + /* Resolve function names + */ + case TK_FUNCTION: { + ExprList *pList; /* The argument list */ + int n; /* Number of arguments */ + int no_such_func = 0; /* True if no such function exists */ + int wrong_num_args = 0; /* True if wrong number of arguments */ + int is_agg = 0; /* True if is an aggregate function */ + const char *zId; /* The function name. */ + FuncDef *pDef; /* Information about the function */ + u8 enc = ENC(pParse->db); /* The database encoding */ + int savedAllowFlags = (pNC->ncFlags & (NC_AllowAgg | NC_AllowWin)); +#ifndef SQLITE_OMIT_WINDOWFUNC + Window *pWin = (IsWindowFunc(pExpr) ? pExpr->y.pWin : 0); +#endif + assert( !ExprHasProperty(pExpr, EP_xIsSelect|EP_IntValue) ); + assert( pExpr->pLeft==0 || pExpr->pLeft->op==TK_ORDER ); + pList = pExpr->x.pList; + n = pList ? pList->nExpr : 0; + zId = pExpr->u.zToken; + pDef = sqlite3FindFunction(pParse->db, zId, n, enc, 0); + if( pDef==0 ){ + pDef = sqlite3FindFunction(pParse->db, zId, -2, enc, 0); + if( pDef==0 ){ + no_such_func = 1; + }else{ + wrong_num_args = 1; + } + }else{ + is_agg = pDef->xFinalize!=0; + if( pDef->funcFlags & SQLITE_FUNC_UNLIKELY ){ + ExprSetProperty(pExpr, EP_Unlikely); + if( n==2 ){ + pExpr->iTable = exprProbability(pList->a[1].pExpr); + if( pExpr->iTable<0 ){ + sqlite3ErrorMsg(pParse, + "second argument to %#T() must be a " + "constant between 0.0 and 1.0", pExpr); + pNC->nNcErr++; + } + }else{ + /* EVIDENCE-OF: R-61304-29449 The unlikely(X) function is + ** equivalent to likelihood(X, 0.0625). + ** EVIDENCE-OF: R-01283-11636 The unlikely(X) function is + ** short-hand for likelihood(X,0.0625). + ** EVIDENCE-OF: R-36850-34127 The likely(X) function is short-hand + ** for likelihood(X,0.9375). + ** EVIDENCE-OF: R-53436-40973 The likely(X) function is equivalent + ** to likelihood(X,0.9375). */ + /* TUNING: unlikely() probability is 0.0625. likely() is 0.9375 */ + pExpr->iTable = pDef->zName[0]=='u' ? 8388608 : 125829120; + } + } +#ifndef SQLITE_OMIT_AUTHORIZATION + { + int auth = sqlite3AuthCheck(pParse, SQLITE_FUNCTION, 0,pDef->zName,0); + if( auth!=SQLITE_OK ){ + if( auth==SQLITE_DENY ){ + sqlite3ErrorMsg(pParse, "not authorized to use function: %#T", + pExpr); + pNC->nNcErr++; + } + pExpr->op = TK_NULL; + return WRC_Prune; + } + } +#endif + + /* If the function may call sqlite3_value_subtype(), then set the + ** EP_SubtArg flag on all of its argument expressions. This prevents + ** where.c from replacing the expression with a value read from an + ** index on the same expression, which will not have the correct + ** subtype. Also set the flag if the function expression itself is + ** an EP_SubtArg expression. In this case subtypes are required as + ** the function may return a value with a subtype back to its + ** caller using sqlite3_result_value(). */ + if( (pDef->funcFlags & SQLITE_SUBTYPE) + || ExprHasProperty(pExpr, EP_SubtArg) + ){ + int ii; + for(ii=0; iia[ii].pExpr, EP_SubtArg); + } + } + + if( pDef->funcFlags & (SQLITE_FUNC_CONSTANT|SQLITE_FUNC_SLOCHNG) ){ + /* For the purposes of the EP_ConstFunc flag, date and time + ** functions and other functions that change slowly are considered + ** constant because they are constant for the duration of one query. + ** This allows them to be factored out of inner loops. */ + ExprSetProperty(pExpr,EP_ConstFunc); + } + if( (pDef->funcFlags & SQLITE_FUNC_CONSTANT)==0 ){ + /* Clearly non-deterministic functions like random(), but also + ** date/time functions that use 'now', and other functions like + ** sqlite_version() that might change over time cannot be used + ** in an index or generated column. Curiously, they can be used + ** in a CHECK constraint. SQLServer, MySQL, and PostgreSQL all + ** allow this. */ + sqlite3ResolveNotValid(pParse, pNC, "non-deterministic functions", + NC_IdxExpr|NC_PartIdx|NC_GenCol, 0, pExpr); + }else{ + assert( (NC_SelfRef & 0xff)==NC_SelfRef ); /* Must fit in 8 bits */ + pExpr->op2 = pNC->ncFlags & NC_SelfRef; + } + if( (pDef->funcFlags & SQLITE_FUNC_INTERNAL)!=0 + && pParse->nested==0 + && (pParse->db->mDbFlags & DBFLAG_InternalFunc)==0 + ){ + /* Internal-use-only functions are disallowed unless the + ** SQL is being compiled using sqlite3NestedParse() or + ** the SQLITE_TESTCTRL_INTERNAL_FUNCTIONS test-control has be + ** used to activate internal functions for testing purposes */ + no_such_func = 1; + pDef = 0; + }else + if( (pDef->funcFlags & (SQLITE_FUNC_DIRECT|SQLITE_FUNC_UNSAFE))!=0 + && !IN_RENAME_OBJECT + ){ + if( pNC->ncFlags & NC_FromDDL ) ExprSetProperty(pExpr, EP_FromDDL); + sqlite3ExprFunctionUsable(pParse, pExpr, pDef); + } + } + + if( 0==IN_RENAME_OBJECT ){ +#ifndef SQLITE_OMIT_WINDOWFUNC + assert( is_agg==0 || (pDef->funcFlags & SQLITE_FUNC_MINMAX) + || (pDef->xValue==0 && pDef->xInverse==0) + || (pDef->xValue && pDef->xInverse && pDef->xSFunc && pDef->xFinalize) + ); + if( pDef && pDef->xValue==0 && pWin ){ + sqlite3ErrorMsg(pParse, + "%#T() may not be used as a window function", pExpr + ); + pNC->nNcErr++; + }else if( + (is_agg && (pNC->ncFlags & NC_AllowAgg)==0) + || (is_agg && (pDef->funcFlags&SQLITE_FUNC_WINDOW) && !pWin) + || (is_agg && pWin && (pNC->ncFlags & NC_AllowWin)==0) + ){ + const char *zType; + if( (pDef->funcFlags & SQLITE_FUNC_WINDOW) || pWin ){ + zType = "window"; + }else{ + zType = "aggregate"; + } + sqlite3ErrorMsg(pParse, "misuse of %s function %#T()",zType,pExpr); + pNC->nNcErr++; + is_agg = 0; + } +#else + if( (is_agg && (pNC->ncFlags & NC_AllowAgg)==0) ){ + sqlite3ErrorMsg(pParse,"misuse of aggregate function %#T()",pExpr); + pNC->nNcErr++; + is_agg = 0; + } +#endif + else if( no_such_func && pParse->db->init.busy==0 +#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION + && pParse->explain==0 +#endif + ){ + sqlite3ErrorMsg(pParse, "no such function: %#T", pExpr); + pNC->nNcErr++; + }else if( wrong_num_args ){ + sqlite3ErrorMsg(pParse,"wrong number of arguments to function %#T()", + pExpr); + pNC->nNcErr++; + } +#ifndef SQLITE_OMIT_WINDOWFUNC + else if( is_agg==0 && ExprHasProperty(pExpr, EP_WinFunc) ){ + sqlite3ErrorMsg(pParse, + "FILTER may not be used with non-aggregate %#T()", + pExpr + ); + pNC->nNcErr++; + } +#endif + else if( is_agg==0 && pExpr->pLeft ){ + sqlite3ExprOrderByAggregateError(pParse, pExpr); + pNC->nNcErr++; + } + if( is_agg ){ + /* Window functions may not be arguments of aggregate functions. + ** Or arguments of other window functions. But aggregate functions + ** may be arguments for window functions. */ +#ifndef SQLITE_OMIT_WINDOWFUNC + pNC->ncFlags &= ~(NC_AllowWin | (!pWin ? NC_AllowAgg : 0)); +#else + pNC->ncFlags &= ~NC_AllowAgg; +#endif + } + } + else if( ExprHasProperty(pExpr, EP_WinFunc) || pExpr->pLeft ){ + is_agg = 1; + } + sqlite3WalkExprList(pWalker, pList); + if( is_agg ){ + if( pExpr->pLeft ){ + assert( pExpr->pLeft->op==TK_ORDER ); + assert( ExprUseXList(pExpr->pLeft) ); + sqlite3WalkExprList(pWalker, pExpr->pLeft->x.pList); + } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pWin && pParse->nErr==0 ){ + Select *pSel = pNC->pWinSelect; + assert( ExprUseYWin(pExpr) && pWin==pExpr->y.pWin ); + if( IN_RENAME_OBJECT==0 ){ + sqlite3WindowUpdate(pParse, pSel ? pSel->pWinDefn : 0, pWin, pDef); + if( pParse->db->mallocFailed ) break; + } + sqlite3WalkExprList(pWalker, pWin->pPartition); + sqlite3WalkExprList(pWalker, pWin->pOrderBy); + sqlite3WalkExpr(pWalker, pWin->pFilter); + sqlite3WindowLink(pSel, pWin); + pNC->ncFlags |= NC_HasWin; + }else +#endif /* SQLITE_OMIT_WINDOWFUNC */ + { + NameContext *pNC2; /* For looping up thru outer contexts */ + pExpr->op = TK_AGG_FUNCTION; + pExpr->op2 = 0; +#ifndef SQLITE_OMIT_WINDOWFUNC + if( ExprHasProperty(pExpr, EP_WinFunc) ){ + sqlite3WalkExpr(pWalker, pExpr->y.pWin->pFilter); + } +#endif + pNC2 = pNC; + while( pNC2 + && sqlite3ReferencesSrcList(pParse, pExpr, pNC2->pSrcList)==0 + ){ + pExpr->op2 += (1 + pNC2->nNestedSelect); + pNC2 = pNC2->pNext; + } + assert( pDef!=0 || IN_RENAME_OBJECT ); + if( pNC2 && pDef ){ + pExpr->op2 += pNC2->nNestedSelect; + assert( SQLITE_FUNC_MINMAX==NC_MinMaxAgg ); + assert( SQLITE_FUNC_ANYORDER==NC_OrderAgg ); + testcase( (pDef->funcFlags & SQLITE_FUNC_MINMAX)!=0 ); + testcase( (pDef->funcFlags & SQLITE_FUNC_ANYORDER)!=0 ); + pNC2->ncFlags |= NC_HasAgg + | ((pDef->funcFlags^SQLITE_FUNC_ANYORDER) + & (SQLITE_FUNC_MINMAX|SQLITE_FUNC_ANYORDER)); + } + } + pNC->ncFlags |= savedAllowFlags; + } + /* FIX ME: Compute pExpr->affinity based on the expected return + ** type of the function + */ + return WRC_Prune; + } +#ifndef SQLITE_OMIT_SUBQUERY + case TK_EXISTS: + case TK_SELECT: +#endif + case TK_IN: { + testcase( pExpr->op==TK_IN ); + testcase( pExpr->op==TK_EXISTS ); + testcase( pExpr->op==TK_SELECT ); + if( ExprUseXSelect(pExpr) ){ + int nRef = pNC->nRef; + testcase( pNC->ncFlags & NC_IsCheck ); + testcase( pNC->ncFlags & NC_PartIdx ); + testcase( pNC->ncFlags & NC_IdxExpr ); + testcase( pNC->ncFlags & NC_GenCol ); + assert( pExpr->x.pSelect ); + if( pExpr->op==TK_EXISTS ) pParse->bHasExists = 1; + if( pNC->ncFlags & NC_SelfRef ){ + notValidImpl(pParse, pNC, "subqueries", pExpr, pExpr); + }else{ + sqlite3WalkSelect(pWalker, pExpr->x.pSelect); + } + assert( pNC->nRef>=nRef ); + if( nRef!=pNC->nRef ){ + ExprSetProperty(pExpr, EP_VarSelect); + pExpr->x.pSelect->selFlags |= SF_Correlated; + } + pNC->ncFlags |= NC_Subquery; + } + break; + } + case TK_VARIABLE: { + testcase( pNC->ncFlags & NC_IsCheck ); + testcase( pNC->ncFlags & NC_PartIdx ); + testcase( pNC->ncFlags & NC_IdxExpr ); + testcase( pNC->ncFlags & NC_GenCol ); + sqlite3ResolveNotValid(pParse, pNC, "parameters", + NC_IsCheck|NC_PartIdx|NC_IdxExpr|NC_GenCol, pExpr, pExpr); + break; + } + case TK_IS: + case TK_ISNOT: { + Expr *pRight = sqlite3ExprSkipCollateAndLikely(pExpr->pRight); + assert( !ExprHasProperty(pExpr, EP_Reduced) ); + /* Handle special cases of "x IS TRUE", "x IS FALSE", "x IS NOT TRUE", + ** and "x IS NOT FALSE". */ + if( ALWAYS(pRight) && (pRight->op==TK_ID || pRight->op==TK_TRUEFALSE) ){ + int rc = resolveExprStep(pWalker, pRight); + if( rc==WRC_Abort ) return WRC_Abort; + if( pRight->op==TK_TRUEFALSE ){ + pExpr->op2 = pExpr->op; + pExpr->op = TK_TRUTH; + return WRC_Continue; + } + } + /* no break */ deliberate_fall_through + } + case TK_BETWEEN: + case TK_EQ: + case TK_NE: + case TK_LT: + case TK_LE: + case TK_GT: + case TK_GE: { + int nLeft, nRight; + if( pParse->db->mallocFailed ) break; + assert( pExpr->pLeft!=0 ); + nLeft = sqlite3ExprVectorSize(pExpr->pLeft); + if( pExpr->op==TK_BETWEEN ){ + assert( ExprUseXList(pExpr) ); + nRight = sqlite3ExprVectorSize(pExpr->x.pList->a[0].pExpr); + if( nRight==nLeft ){ + nRight = sqlite3ExprVectorSize(pExpr->x.pList->a[1].pExpr); + } + }else{ + assert( pExpr->pRight!=0 ); + nRight = sqlite3ExprVectorSize(pExpr->pRight); + } + if( nLeft!=nRight ){ + testcase( pExpr->op==TK_EQ ); + testcase( pExpr->op==TK_NE ); + testcase( pExpr->op==TK_LT ); + testcase( pExpr->op==TK_LE ); + testcase( pExpr->op==TK_GT ); + testcase( pExpr->op==TK_GE ); + testcase( pExpr->op==TK_IS ); + testcase( pExpr->op==TK_ISNOT ); + testcase( pExpr->op==TK_BETWEEN ); + sqlite3ErrorMsg(pParse, "row value misused"); + sqlite3RecordErrorOffsetOfExpr(pParse->db, pExpr); + } + break; + } + } + assert( pParse->db->mallocFailed==0 || pParse->nErr!=0 ); + return pParse->nErr ? WRC_Abort : WRC_Continue; +} + +/* +** pEList is a list of expressions which are really the result set of the +** a SELECT statement. pE is a term in an ORDER BY or GROUP BY clause. +** This routine checks to see if pE is a simple identifier which corresponds +** to the AS-name of one of the terms of the expression list. If it is, +** this routine return an integer between 1 and N where N is the number of +** elements in pEList, corresponding to the matching entry. If there is +** no match, or if pE is not a simple identifier, then this routine +** return 0. +** +** pEList has been resolved. pE has not. +*/ +static int resolveAsName( + Parse *pParse, /* Parsing context for error messages */ + ExprList *pEList, /* List of expressions to scan */ + Expr *pE /* Expression we are trying to match */ +){ + int i; /* Loop counter */ + + UNUSED_PARAMETER(pParse); + + if( pE->op==TK_ID ){ + const char *zCol; + assert( !ExprHasProperty(pE, EP_IntValue) ); + zCol = pE->u.zToken; + for(i=0; inExpr; i++){ + if( pEList->a[i].fg.eEName==ENAME_NAME + && sqlite3_stricmp(pEList->a[i].zEName, zCol)==0 + ){ + return i+1; + } + } + } + return 0; +} + +/* +** pE is a pointer to an expression which is a single term in the +** ORDER BY of a compound SELECT. The expression has not been +** name resolved. +** +** At the point this routine is called, we already know that the +** ORDER BY term is not an integer index into the result set. That +** case is handled by the calling routine. +** +** Attempt to match pE against result set columns in the left-most +** SELECT statement. Return the index i of the matching column, +** as an indication to the caller that it should sort by the i-th column. +** The left-most column is 1. In other words, the value returned is the +** same integer value that would be used in the SQL statement to indicate +** the column. +** +** If there is no match, return 0. Return -1 if an error occurs. +*/ +static int resolveOrderByTermToExprList( + Parse *pParse, /* Parsing context for error messages */ + Select *pSelect, /* The SELECT statement with the ORDER BY clause */ + Expr *pE /* The specific ORDER BY term */ +){ + int i; /* Loop counter */ + ExprList *pEList; /* The columns of the result set */ + NameContext nc; /* Name context for resolving pE */ + sqlite3 *db; /* Database connection */ + int rc; /* Return code from subprocedures */ + u8 savedSuppErr; /* Saved value of db->suppressErr */ + + assert( sqlite3ExprIsInteger(pE, &i, 0)==0 ); + pEList = pSelect->pEList; + + /* Resolve all names in the ORDER BY term expression + */ + memset(&nc, 0, sizeof(nc)); + nc.pParse = pParse; + nc.pSrcList = pSelect->pSrc; + nc.uNC.pEList = pEList; + nc.ncFlags = NC_AllowAgg|NC_UEList|NC_NoSelect; + nc.nNcErr = 0; + db = pParse->db; + savedSuppErr = db->suppressErr; + db->suppressErr = 1; + rc = sqlite3ResolveExprNames(&nc, pE); + db->suppressErr = savedSuppErr; + if( rc ) return 0; + + /* Try to match the ORDER BY expression against an expression + ** in the result set. Return an 1-based index of the matching + ** result-set entry. + */ + for(i=0; inExpr; i++){ + if( sqlite3ExprCompare(0, pEList->a[i].pExpr, pE, -1)<2 ){ + return i+1; + } + } + + /* If no match, return 0. */ + return 0; +} + +/* +** Generate an ORDER BY or GROUP BY term out-of-range error. +*/ +static void resolveOutOfRangeError( + Parse *pParse, /* The error context into which to write the error */ + const char *zType, /* "ORDER" or "GROUP" */ + int i, /* The index (1-based) of the term out of range */ + int mx, /* Largest permissible value of i */ + Expr *pError /* Associate the error with the expression */ +){ + sqlite3ErrorMsg(pParse, + "%r %s BY term out of range - should be " + "between 1 and %d", i, zType, mx); + sqlite3RecordErrorOffsetOfExpr(pParse->db, pError); +} + +/* +** Analyze the ORDER BY clause in a compound SELECT statement. Modify +** each term of the ORDER BY clause is a constant integer between 1 +** and N where N is the number of columns in the compound SELECT. +** +** ORDER BY terms that are already an integer between 1 and N are +** unmodified. ORDER BY terms that are integers outside the range of +** 1 through N generate an error. ORDER BY terms that are expressions +** are matched against result set expressions of compound SELECT +** beginning with the left-most SELECT and working toward the right. +** At the first match, the ORDER BY expression is transformed into +** the integer column number. +** +** Return the number of errors seen. +*/ +static int resolveCompoundOrderBy( + Parse *pParse, /* Parsing context. Leave error messages here */ + Select *pSelect /* The SELECT statement containing the ORDER BY */ +){ + int i; + ExprList *pOrderBy; + ExprList *pEList; + sqlite3 *db; + int moreToDo = 1; + + pOrderBy = pSelect->pOrderBy; + if( pOrderBy==0 ) return 0; + db = pParse->db; + if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){ + sqlite3ErrorMsg(pParse, "too many terms in ORDER BY clause"); + return 1; + } + for(i=0; inExpr; i++){ + pOrderBy->a[i].fg.done = 0; + } + pSelect->pNext = 0; + while( pSelect->pPrior ){ + pSelect->pPrior->pNext = pSelect; + pSelect = pSelect->pPrior; + } + while( pSelect && moreToDo ){ + struct ExprList_item *pItem; + moreToDo = 0; + pEList = pSelect->pEList; + assert( pEList!=0 ); + for(i=0, pItem=pOrderBy->a; inExpr; i++, pItem++){ + int iCol = -1; + Expr *pE, *pDup; + if( pItem->fg.done ) continue; + pE = sqlite3ExprSkipCollateAndLikely(pItem->pExpr); + if( NEVER(pE==0) ) continue; + if( sqlite3ExprIsInteger(pE, &iCol, 0) ){ + if( iCol<=0 || iCol>pEList->nExpr ){ + resolveOutOfRangeError(pParse, "ORDER", i+1, pEList->nExpr, pE); + return 1; + } + }else{ + iCol = resolveAsName(pParse, pEList, pE); + if( iCol==0 ){ + /* Now test if expression pE matches one of the values returned + ** by pSelect. In the usual case this is done by duplicating the + ** expression, resolving any symbols in it, and then comparing + ** it against each expression returned by the SELECT statement. + ** Once the comparisons are finished, the duplicate expression + ** is deleted. + ** + ** If this is running as part of an ALTER TABLE operation and + ** the symbols resolve successfully, also resolve the symbols in the + ** actual expression. This allows the code in alter.c to modify + ** column references within the ORDER BY expression as required. */ + pDup = sqlite3ExprDup(db, pE, 0); + if( !db->mallocFailed ){ + assert(pDup); + iCol = resolveOrderByTermToExprList(pParse, pSelect, pDup); + if( IN_RENAME_OBJECT && iCol>0 ){ + resolveOrderByTermToExprList(pParse, pSelect, pE); + } + } + sqlite3ExprDelete(db, pDup); + } + } + if( iCol>0 ){ + /* Convert the ORDER BY term into an integer column number iCol, + ** taking care to preserve the COLLATE clause if it exists. */ + if( !IN_RENAME_OBJECT ){ + Expr *pNew = sqlite3Expr(db, TK_INTEGER, 0); + if( pNew==0 ) return 1; + pNew->flags |= EP_IntValue; + pNew->u.iValue = iCol; + if( pItem->pExpr==pE ){ + pItem->pExpr = pNew; + }else{ + Expr *pParent = pItem->pExpr; + assert( pParent->op==TK_COLLATE ); + while( pParent->pLeft->op==TK_COLLATE ) pParent = pParent->pLeft; + assert( pParent->pLeft==pE ); + pParent->pLeft = pNew; + } + sqlite3ExprDelete(db, pE); + pItem->u.x.iOrderByCol = (u16)iCol; + } + pItem->fg.done = 1; + }else{ + moreToDo = 1; + } + } + pSelect = pSelect->pNext; + } + for(i=0; inExpr; i++){ + if( pOrderBy->a[i].fg.done==0 ){ + sqlite3ErrorMsg(pParse, "%r ORDER BY term does not match any " + "column in the result set", i+1); + return 1; + } + } + return 0; +} + +/* +** Check every term in the ORDER BY or GROUP BY clause pOrderBy of +** the SELECT statement pSelect. If any term is reference to a +** result set expression (as determined by the ExprList.a.u.x.iOrderByCol +** field) then convert that term into a copy of the corresponding result set +** column. +** +** If any errors are detected, add an error message to pParse and +** return non-zero. Return zero if no errors are seen. +*/ +SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy( + Parse *pParse, /* Parsing context. Leave error messages here */ + Select *pSelect, /* The SELECT statement containing the clause */ + ExprList *pOrderBy, /* The ORDER BY or GROUP BY clause to be processed */ + const char *zType /* "ORDER" or "GROUP" */ +){ + int i; + sqlite3 *db = pParse->db; + ExprList *pEList; + struct ExprList_item *pItem; + + if( pOrderBy==0 || pParse->db->mallocFailed || IN_RENAME_OBJECT ) return 0; + if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){ + sqlite3ErrorMsg(pParse, "too many terms in %s BY clause", zType); + return 1; + } + pEList = pSelect->pEList; + assert( pEList!=0 ); /* sqlite3SelectNew() guarantees this */ + for(i=0, pItem=pOrderBy->a; inExpr; i++, pItem++){ + if( pItem->u.x.iOrderByCol ){ + if( pItem->u.x.iOrderByCol>pEList->nExpr ){ + resolveOutOfRangeError(pParse, zType, i+1, pEList->nExpr, 0); + return 1; + } + resolveAlias(pParse, pEList, pItem->u.x.iOrderByCol-1, pItem->pExpr,0); + } + } + return 0; +} + +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** Walker callback for windowRemoveExprFromSelect(). +*/ +static int resolveRemoveWindowsCb(Walker *pWalker, Expr *pExpr){ + UNUSED_PARAMETER(pWalker); + if( ExprHasProperty(pExpr, EP_WinFunc) ){ + Window *pWin = pExpr->y.pWin; + sqlite3WindowUnlinkFromSelect(pWin); + } + return WRC_Continue; +} + +/* +** Remove any Window objects owned by the expression pExpr from the +** Select.pWin list of Select object pSelect. +*/ +static void windowRemoveExprFromSelect(Select *pSelect, Expr *pExpr){ + if( pSelect->pWin ){ + Walker sWalker; + memset(&sWalker, 0, sizeof(Walker)); + sWalker.xExprCallback = resolveRemoveWindowsCb; + sWalker.u.pSelect = pSelect; + sqlite3WalkExpr(&sWalker, pExpr); + } +} +#else +# define windowRemoveExprFromSelect(a, b) +#endif /* SQLITE_OMIT_WINDOWFUNC */ + +/* +** pOrderBy is an ORDER BY or GROUP BY clause in SELECT statement pSelect. +** The Name context of the SELECT statement is pNC. zType is either +** "ORDER" or "GROUP" depending on which type of clause pOrderBy is. +** +** This routine resolves each term of the clause into an expression. +** If the order-by term is an integer I between 1 and N (where N is the +** number of columns in the result set of the SELECT) then the expression +** in the resolution is a copy of the I-th result-set expression. If +** the order-by term is an identifier that corresponds to the AS-name of +** a result-set expression, then the term resolves to a copy of the +** result-set expression. Otherwise, the expression is resolved in +** the usual way - using sqlite3ResolveExprNames(). +** +** This routine returns the number of errors. If errors occur, then +** an appropriate error message might be left in pParse. (OOM errors +** excepted.) +*/ +static int resolveOrderGroupBy( + NameContext *pNC, /* The name context of the SELECT statement */ + Select *pSelect, /* The SELECT statement holding pOrderBy */ + ExprList *pOrderBy, /* An ORDER BY or GROUP BY clause to resolve */ + const char *zType /* Either "ORDER" or "GROUP", as appropriate */ +){ + int i, j; /* Loop counters */ + int iCol; /* Column number */ + struct ExprList_item *pItem; /* A term of the ORDER BY clause */ + Parse *pParse; /* Parsing context */ + int nResult; /* Number of terms in the result set */ + + assert( pOrderBy!=0 ); + nResult = pSelect->pEList->nExpr; + pParse = pNC->pParse; + for(i=0, pItem=pOrderBy->a; inExpr; i++, pItem++){ + Expr *pE = pItem->pExpr; + Expr *pE2 = sqlite3ExprSkipCollateAndLikely(pE); + if( NEVER(pE2==0) ) continue; + if( zType[0]!='G' ){ + iCol = resolveAsName(pParse, pSelect->pEList, pE2); + if( iCol>0 ){ + /* If an AS-name match is found, mark this ORDER BY column as being + ** a copy of the iCol-th result-set column. The subsequent call to + ** sqlite3ResolveOrderGroupBy() will convert the expression to a + ** copy of the iCol-th result-set expression. */ + pItem->u.x.iOrderByCol = (u16)iCol; + continue; + } + } + if( sqlite3ExprIsInteger(pE2, &iCol, 0) ){ + /* The ORDER BY term is an integer constant. Again, set the column + ** number so that sqlite3ResolveOrderGroupBy() will convert the + ** order-by term to a copy of the result-set expression */ + if( iCol<1 || iCol>0xffff ){ + resolveOutOfRangeError(pParse, zType, i+1, nResult, pE2); + return 1; + } + pItem->u.x.iOrderByCol = (u16)iCol; + continue; + } + + /* Otherwise, treat the ORDER BY term as an ordinary expression */ + pItem->u.x.iOrderByCol = 0; + if( sqlite3ResolveExprNames(pNC, pE) ){ + return 1; + } + for(j=0; jpEList->nExpr; j++){ + if( sqlite3ExprCompare(0, pE, pSelect->pEList->a[j].pExpr, -1)==0 ){ + /* Since this expression is being changed into a reference + ** to an identical expression in the result set, remove all Window + ** objects belonging to the expression from the Select.pWin list. */ + windowRemoveExprFromSelect(pSelect, pE); + pItem->u.x.iOrderByCol = j+1; + } + } + } + return sqlite3ResolveOrderGroupBy(pParse, pSelect, pOrderBy, zType); +} + +/* +** Resolve names in the SELECT statement p and all of its descendants. +*/ +static int resolveSelectStep(Walker *pWalker, Select *p){ + NameContext *pOuterNC; /* Context that contains this SELECT */ + NameContext sNC; /* Name context of this SELECT */ + int isCompound; /* True if p is a compound select */ + int nCompound; /* Number of compound terms processed so far */ + Parse *pParse; /* Parsing context */ + int i; /* Loop counter */ + ExprList *pGroupBy; /* The GROUP BY clause */ + Select *pLeftmost; /* Left-most of SELECT of a compound */ + sqlite3 *db; /* Database connection */ + + + assert( p!=0 ); + if( p->selFlags & SF_Resolved ){ + return WRC_Prune; + } + pOuterNC = pWalker->u.pNC; + pParse = pWalker->pParse; + db = pParse->db; + + /* Normally sqlite3SelectExpand() will be called first and will have + ** already expanded this SELECT. However, if this is a subquery within + ** an expression, sqlite3ResolveExprNames() will be called without a + ** prior call to sqlite3SelectExpand(). When that happens, let + ** sqlite3SelectPrep() do all of the processing for this SELECT. + ** sqlite3SelectPrep() will invoke both sqlite3SelectExpand() and + ** this routine in the correct order. + */ + if( (p->selFlags & SF_Expanded)==0 ){ + sqlite3SelectPrep(pParse, p, pOuterNC); + return pParse->nErr ? WRC_Abort : WRC_Prune; + } + + isCompound = p->pPrior!=0; + nCompound = 0; + pLeftmost = p; + while( p ){ + assert( (p->selFlags & SF_Expanded)!=0 ); + assert( (p->selFlags & SF_Resolved)==0 ); + p->selFlags |= SF_Resolved; + + /* Resolve the expressions in the LIMIT and OFFSET clauses. These + ** are not allowed to refer to any names, so pass an empty NameContext. + */ + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = pParse; + sNC.pWinSelect = p; + if( sqlite3ResolveExprNames(&sNC, p->pLimit) ){ + return WRC_Abort; + } + + /* If the SF_Converted flags is set, then this Select object was + ** was created by the convertCompoundSelectToSubquery() function. + ** In this case the ORDER BY clause (p->pOrderBy) should be resolved + ** as if it were part of the sub-query, not the parent. This block + ** moves the pOrderBy down to the sub-query. It will be moved back + ** after the names have been resolved. */ + if( p->selFlags & SF_Converted ){ + Select *pSub; + assert( p->pSrc->a[0].fg.isSubquery ); + assert( p->pSrc->a[0].u4.pSubq!=0 ); + pSub = p->pSrc->a[0].u4.pSubq->pSelect; + assert( pSub!=0 ); + assert( p->pSrc->nSrc==1 && p->pOrderBy ); + assert( pSub->pPrior && pSub->pOrderBy==0 ); + pSub->pOrderBy = p->pOrderBy; + p->pOrderBy = 0; + } + + /* Recursively resolve names in all subqueries in the FROM clause + */ + if( pOuterNC ) pOuterNC->nNestedSelect++; + for(i=0; ipSrc->nSrc; i++){ + SrcItem *pItem = &p->pSrc->a[i]; + assert( pItem->zName!=0 + || pItem->fg.isSubquery ); /* Test of tag-20240424-1*/ + if( pItem->fg.isSubquery + && (pItem->u4.pSubq->pSelect->selFlags & SF_Resolved)==0 + ){ + int nRef = pOuterNC ? pOuterNC->nRef : 0; + const char *zSavedContext = pParse->zAuthContext; + + if( pItem->zName ) pParse->zAuthContext = pItem->zName; + sqlite3ResolveSelectNames(pParse, pItem->u4.pSubq->pSelect, pOuterNC); + pParse->zAuthContext = zSavedContext; + if( pParse->nErr ) return WRC_Abort; + assert( db->mallocFailed==0 ); + + /* If the number of references to the outer context changed when + ** expressions in the sub-select were resolved, the sub-select + ** is correlated. It is not required to check the refcount on any + ** but the innermost outer context object, as lookupName() increments + ** the refcount on all contexts between the current one and the + ** context containing the column when it resolves a name. */ + if( pOuterNC ){ + assert( pItem->fg.isCorrelated==0 && pOuterNC->nRef>=nRef ); + pItem->fg.isCorrelated = (pOuterNC->nRef>nRef); + } + } + } + if( pOuterNC && ALWAYS(pOuterNC->nNestedSelect>0) ){ + pOuterNC->nNestedSelect--; + } + + /* Set up the local name-context to pass to sqlite3ResolveExprNames() to + ** resolve the result-set expression list. + */ + sNC.ncFlags = NC_AllowAgg|NC_AllowWin; + sNC.pSrcList = p->pSrc; + sNC.pNext = pOuterNC; + + /* Resolve names in the result set. */ + if( sqlite3ResolveExprListNames(&sNC, p->pEList) ) return WRC_Abort; + sNC.ncFlags &= ~NC_AllowWin; + + /* If there are no aggregate functions in the result-set, and no GROUP BY + ** expression, do not allow aggregates in any of the other expressions. + */ + assert( (p->selFlags & SF_Aggregate)==0 ); + pGroupBy = p->pGroupBy; + if( pGroupBy || (sNC.ncFlags & NC_HasAgg)!=0 ){ + assert( NC_MinMaxAgg==SF_MinMaxAgg ); + assert( NC_OrderAgg==SF_OrderByReqd ); + p->selFlags |= SF_Aggregate | (sNC.ncFlags&(NC_MinMaxAgg|NC_OrderAgg)); + }else{ + sNC.ncFlags &= ~NC_AllowAgg; + } + + /* Add the output column list to the name-context before parsing the + ** other expressions in the SELECT statement. This is so that + ** expressions in the WHERE clause (etc.) can refer to expressions by + ** aliases in the result set. + ** + ** Minor point: If this is the case, then the expression will be + ** re-evaluated for each reference to it. + */ + assert( (sNC.ncFlags & (NC_UAggInfo|NC_UUpsert|NC_UBaseReg))==0 ); + sNC.uNC.pEList = p->pEList; + sNC.ncFlags |= NC_UEList; + if( p->pHaving ){ + if( (p->selFlags & SF_Aggregate)==0 ){ + sqlite3ErrorMsg(pParse, "HAVING clause on a non-aggregate query"); + return WRC_Abort; + } + if( sqlite3ResolveExprNames(&sNC, p->pHaving) ) return WRC_Abort; + } + sNC.ncFlags |= NC_Where; + if( sqlite3ResolveExprNames(&sNC, p->pWhere) ) return WRC_Abort; + sNC.ncFlags &= ~NC_Where; + + /* Resolve names in table-valued-function arguments */ + for(i=0; ipSrc->nSrc; i++){ + SrcItem *pItem = &p->pSrc->a[i]; + if( pItem->fg.isTabFunc + && sqlite3ResolveExprListNames(&sNC, pItem->u1.pFuncArg) + ){ + return WRC_Abort; + } + } + +#ifndef SQLITE_OMIT_WINDOWFUNC + if( IN_RENAME_OBJECT ){ + Window *pWin; + for(pWin=p->pWinDefn; pWin; pWin=pWin->pNextWin){ + if( sqlite3ResolveExprListNames(&sNC, pWin->pOrderBy) + || sqlite3ResolveExprListNames(&sNC, pWin->pPartition) + ){ + return WRC_Abort; + } + } + } +#endif + + /* The ORDER BY and GROUP BY clauses may not refer to terms in + ** outer queries + */ + sNC.pNext = 0; + sNC.ncFlags |= NC_AllowAgg|NC_AllowWin; + + /* If this is a converted compound query, move the ORDER BY clause from + ** the sub-query back to the parent query. At this point each term + ** within the ORDER BY clause has been transformed to an integer value. + ** These integers will be replaced by copies of the corresponding result + ** set expressions by the call to resolveOrderGroupBy() below. */ + if( p->selFlags & SF_Converted ){ + Select *pSub; + assert( p->pSrc->a[0].fg.isSubquery ); + pSub = p->pSrc->a[0].u4.pSubq->pSelect; + assert( pSub!=0 ); + p->pOrderBy = pSub->pOrderBy; + pSub->pOrderBy = 0; + } + + /* Process the ORDER BY clause for singleton SELECT statements. + ** The ORDER BY clause for compounds SELECT statements is handled + ** below, after all of the result-sets for all of the elements of + ** the compound have been resolved. + ** + ** If there is an ORDER BY clause on a term of a compound-select other + ** than the right-most term, then that is a syntax error. But the error + ** is not detected until much later, and so we need to go ahead and + ** resolve those symbols on the incorrect ORDER BY for consistency. + */ + if( p->pOrderBy!=0 + && isCompound<=nCompound /* Defer right-most ORDER BY of a compound */ + && resolveOrderGroupBy(&sNC, p, p->pOrderBy, "ORDER") + ){ + return WRC_Abort; + } + if( db->mallocFailed ){ + return WRC_Abort; + } + sNC.ncFlags &= ~NC_AllowWin; + + /* Resolve the GROUP BY clause. At the same time, make sure + ** the GROUP BY clause does not contain aggregate functions. + */ + if( pGroupBy ){ + struct ExprList_item *pItem; + + if( resolveOrderGroupBy(&sNC, p, pGroupBy, "GROUP") || db->mallocFailed ){ + return WRC_Abort; + } + for(i=0, pItem=pGroupBy->a; inExpr; i++, pItem++){ + if( ExprHasProperty(pItem->pExpr, EP_Agg) ){ + sqlite3ErrorMsg(pParse, "aggregate functions are not allowed in " + "the GROUP BY clause"); + return WRC_Abort; + } + } + } + + /* If this is part of a compound SELECT, check that it has the right + ** number of expressions in the select list. */ + if( p->pNext && p->pEList->nExpr!=p->pNext->pEList->nExpr ){ + sqlite3SelectWrongNumTermsError(pParse, p->pNext); + return WRC_Abort; + } + + /* If the SELECT statement contains ON clauses that were moved into + ** the WHERE clause, go through and verify that none of the terms + ** in the ON clauses reference tables to the right of the ON clause. */ + if( (p->selFlags & SF_OnToWhere) ){ + sqlite3SelectCheckOnClauses(pParse, p); + if( pParse->nErr ) return WRC_Abort; + } + + /* Advance to the next term of the compound + */ + p = p->pPrior; + nCompound++; + } + + /* Resolve the ORDER BY on a compound SELECT after all terms of + ** the compound have been resolved. + */ + if( isCompound && resolveCompoundOrderBy(pParse, pLeftmost) ){ + return WRC_Abort; + } + + return WRC_Prune; +} + +/* +** This routine walks an expression tree and resolves references to +** table columns and result-set columns. At the same time, do error +** checking on function usage and set a flag if any aggregate functions +** are seen. +** +** To resolve table columns references we look for nodes (or subtrees) of the +** form X.Y.Z or Y.Z or just Z where +** +** X: The name of a database. Ex: "main" or "temp" or +** the symbolic name assigned to an ATTACH-ed database. +** +** Y: The name of a table in a FROM clause. Or in a trigger +** one of the special names "old" or "new". +** +** Z: The name of a column in table Y. +** +** The node at the root of the subtree is modified as follows: +** +** Expr.op Changed to TK_COLUMN +** Expr.pTab Points to the Table object for X.Y +** Expr.iColumn The column index in X.Y. -1 for the rowid. +** Expr.iTable The VDBE cursor number for X.Y +** +** +** To resolve result-set references, look for expression nodes of the +** form Z (with no X and Y prefix) where the Z matches the right-hand +** size of an AS clause in the result-set of a SELECT. The Z expression +** is replaced by a copy of the left-hand side of the result-set expression. +** Table-name and function resolution occurs on the substituted expression +** tree. For example, in: +** +** SELECT a+b AS x, c+d AS y FROM t1 ORDER BY x; +** +** The "x" term of the order by is replaced by "a+b" to render: +** +** SELECT a+b AS x, c+d AS y FROM t1 ORDER BY a+b; +** +** Function calls are checked to make sure that the function is +** defined and that the correct number of arguments are specified. +** If the function is an aggregate function, then the NC_HasAgg flag is +** set and the opcode is changed from TK_FUNCTION to TK_AGG_FUNCTION. +** If an expression contains aggregate functions then the EP_Agg +** property on the expression is set. +** +** An error message is left in pParse if anything is amiss. The number +** if errors is returned. +*/ +SQLITE_PRIVATE int sqlite3ResolveExprNames( + NameContext *pNC, /* Namespace to resolve expressions in. */ + Expr *pExpr /* The expression to be analyzed. */ +){ + int savedHasAgg; + Walker w; + + if( pExpr==0 ) return SQLITE_OK; + savedHasAgg = pNC->ncFlags & (NC_HasAgg|NC_MinMaxAgg|NC_HasWin|NC_OrderAgg); + pNC->ncFlags &= ~(NC_HasAgg|NC_MinMaxAgg|NC_HasWin|NC_OrderAgg); + w.pParse = pNC->pParse; + w.xExprCallback = resolveExprStep; + w.xSelectCallback = (pNC->ncFlags & NC_NoSelect) ? 0 : resolveSelectStep; + w.xSelectCallback2 = 0; + w.u.pNC = pNC; +#if SQLITE_MAX_EXPR_DEPTH>0 + w.pParse->nHeight += pExpr->nHeight; + if( sqlite3ExprCheckHeight(w.pParse, w.pParse->nHeight) ){ + return SQLITE_ERROR; + } +#endif + assert( pExpr!=0 ); + sqlite3WalkExprNN(&w, pExpr); +#if SQLITE_MAX_EXPR_DEPTH>0 + w.pParse->nHeight -= pExpr->nHeight; +#endif + assert( EP_Agg==NC_HasAgg ); + assert( EP_Win==NC_HasWin ); + testcase( pNC->ncFlags & NC_HasAgg ); + testcase( pNC->ncFlags & NC_HasWin ); + ExprSetProperty(pExpr, pNC->ncFlags & (NC_HasAgg|NC_HasWin) ); + pNC->ncFlags |= savedHasAgg; + return pNC->nNcErr>0 || w.pParse->nErr>0; +} + +/* +** Resolve all names for all expression in an expression list. This is +** just like sqlite3ResolveExprNames() except that it works for an expression +** list rather than a single expression. +** +** The return value is SQLITE_OK (0) for success or SQLITE_ERROR (1) for a +** failure. +*/ +SQLITE_PRIVATE int sqlite3ResolveExprListNames( + NameContext *pNC, /* Namespace to resolve expressions in. */ + ExprList *pList /* The expression list to be analyzed. */ +){ + int i; + int savedHasAgg = 0; + Walker w; + if( pList==0 ) return SQLITE_OK; + w.pParse = pNC->pParse; + w.xExprCallback = resolveExprStep; + w.xSelectCallback = resolveSelectStep; + w.xSelectCallback2 = 0; + w.u.pNC = pNC; + savedHasAgg = pNC->ncFlags & (NC_HasAgg|NC_MinMaxAgg|NC_HasWin|NC_OrderAgg); + pNC->ncFlags &= ~(NC_HasAgg|NC_MinMaxAgg|NC_HasWin|NC_OrderAgg); + for(i=0; inExpr; i++){ + Expr *pExpr = pList->a[i].pExpr; + if( pExpr==0 ) continue; +#if SQLITE_MAX_EXPR_DEPTH>0 + w.pParse->nHeight += pExpr->nHeight; + if( sqlite3ExprCheckHeight(w.pParse, w.pParse->nHeight) ){ + return SQLITE_ERROR; + } +#endif + sqlite3WalkExprNN(&w, pExpr); +#if SQLITE_MAX_EXPR_DEPTH>0 + w.pParse->nHeight -= pExpr->nHeight; +#endif + assert( EP_Agg==NC_HasAgg ); + assert( EP_Win==NC_HasWin ); + testcase( pNC->ncFlags & NC_HasAgg ); + testcase( pNC->ncFlags & NC_HasWin ); + if( pNC->ncFlags & (NC_HasAgg|NC_MinMaxAgg|NC_HasWin|NC_OrderAgg) ){ + ExprSetProperty(pExpr, pNC->ncFlags & (NC_HasAgg|NC_HasWin) ); + savedHasAgg |= pNC->ncFlags & + (NC_HasAgg|NC_MinMaxAgg|NC_HasWin|NC_OrderAgg); + pNC->ncFlags &= ~(NC_HasAgg|NC_MinMaxAgg|NC_HasWin|NC_OrderAgg); + } + if( w.pParse->nErr>0 ) return SQLITE_ERROR; + } + pNC->ncFlags |= savedHasAgg; + return SQLITE_OK; +} + +/* +** Resolve all names in all expressions of a SELECT and in all +** descendants of the SELECT, including compounds off of p->pPrior, +** subqueries in expressions, and subqueries used as FROM clause +** terms. +** +** See sqlite3ResolveExprNames() for a description of the kinds of +** transformations that occur. +** +** All SELECT statements should have been expanded using +** sqlite3SelectExpand() prior to invoking this routine. +*/ +SQLITE_PRIVATE void sqlite3ResolveSelectNames( + Parse *pParse, /* The parser context */ + Select *p, /* The SELECT statement being coded. */ + NameContext *pOuterNC /* Name context for parent SELECT statement */ +){ + Walker w; + + assert( p!=0 ); + w.xExprCallback = resolveExprStep; + w.xSelectCallback = resolveSelectStep; + w.xSelectCallback2 = 0; + w.pParse = pParse; + w.u.pNC = pOuterNC; + sqlite3WalkSelect(&w, p); +} + +/* +** Resolve names in expressions that can only reference a single table +** or which cannot reference any tables at all. Examples: +** +** "type" flag +** ------------ +** (1) CHECK constraints NC_IsCheck +** (2) WHERE clauses on partial indices NC_PartIdx +** (3) Expressions in indexes on expressions NC_IdxExpr +** (4) Expression arguments to VACUUM INTO. 0 +** (5) GENERATED ALWAYS as expressions NC_GenCol +** +** In all cases except (4), the Expr.iTable value for Expr.op==TK_COLUMN +** nodes of the expression is set to -1 and the Expr.iColumn value is +** set to the column number. In case (4), TK_COLUMN nodes cause an error. +** +** Any errors cause an error message to be set in pParse. +*/ +SQLITE_PRIVATE int sqlite3ResolveSelfReference( + Parse *pParse, /* Parsing context */ + Table *pTab, /* The table being referenced, or NULL */ + int type, /* NC_IsCheck, NC_PartIdx, NC_IdxExpr, NC_GenCol, or 0 */ + Expr *pExpr, /* Expression to resolve. May be NULL. */ + ExprList *pList /* Expression list to resolve. May be NULL. */ +){ + SrcList *pSrc; /* Fake SrcList for pParse->pNewTable */ + NameContext sNC; /* Name context for pParse->pNewTable */ + int rc; + union { + SrcList sSrc; + u8 srcSpace[SZ_SRCLIST_1]; /* Memory space for the fake SrcList */ + } uSrc; + + assert( type==0 || pTab!=0 ); + assert( type==NC_IsCheck || type==NC_PartIdx || type==NC_IdxExpr + || type==NC_GenCol || pTab==0 ); + memset(&sNC, 0, sizeof(sNC)); + memset(&uSrc, 0, sizeof(uSrc)); + pSrc = &uSrc.sSrc; + if( pTab ){ + pSrc->nSrc = 1; + pSrc->a[0].zName = pTab->zName; + pSrc->a[0].pSTab = pTab; + pSrc->a[0].iCursor = -1; + if( pTab->pSchema!=pParse->db->aDb[1].pSchema ){ + /* Cause EP_FromDDL to be set on TK_FUNCTION nodes of non-TEMP + ** schema elements */ + type |= NC_FromDDL; + } + } + sNC.pParse = pParse; + sNC.pSrcList = pSrc; + sNC.ncFlags = type | NC_IsDDL; + if( (rc = sqlite3ResolveExprNames(&sNC, pExpr))!=SQLITE_OK ) return rc; + if( pList ) rc = sqlite3ResolveExprListNames(&sNC, pList); + return rc; +} + +/************** End of resolve.c *********************************************/ +/************** Begin file expr.c ********************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains routines used for analyzing expressions and +** for generating VDBE code that evaluates expressions in SQLite. +*/ +/* #include "sqliteInt.h" */ + +/* Forward declarations */ +static void exprCodeBetween(Parse*,Expr*,int,void(*)(Parse*,Expr*,int,int),int); +static int exprCodeVector(Parse *pParse, Expr *p, int *piToFree); + +/* +** Return the affinity character for a single column of a table. +*/ +SQLITE_PRIVATE char sqlite3TableColumnAffinity(const Table *pTab, int iCol){ + if( iCol<0 || NEVER(iCol>=pTab->nCol) ) return SQLITE_AFF_INTEGER; + return pTab->aCol[iCol].affinity; +} + +/* +** Return the 'affinity' of the expression pExpr if any. +** +** If pExpr is a column, a reference to a column via an 'AS' alias, +** or a sub-select with a column as the return value, then the +** affinity of that column is returned. Otherwise, 0x00 is returned, +** indicating no affinity for the expression. +** +** i.e. the WHERE clause expressions in the following statements all +** have an affinity: +** +** CREATE TABLE t1(a); +** SELECT * FROM t1 WHERE a; +** SELECT a AS b FROM t1 WHERE b; +** SELECT * FROM t1 WHERE (select a from t1); +*/ +SQLITE_PRIVATE char sqlite3ExprAffinity(const Expr *pExpr){ + int op; + op = pExpr->op; + while( 1 /* exit-by-break */ ){ + if( op==TK_COLUMN || (op==TK_AGG_COLUMN && pExpr->y.pTab!=0) ){ + assert( ExprUseYTab(pExpr) ); + assert( pExpr->y.pTab!=0 ); + return sqlite3TableColumnAffinity(pExpr->y.pTab, pExpr->iColumn); + } + if( op==TK_SELECT ){ + assert( ExprUseXSelect(pExpr) ); + assert( pExpr->x.pSelect!=0 ); + assert( pExpr->x.pSelect->pEList!=0 ); + assert( pExpr->x.pSelect->pEList->a[0].pExpr!=0 ); + return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr); + } +#ifndef SQLITE_OMIT_CAST + if( op==TK_CAST ){ + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + return sqlite3AffinityType(pExpr->u.zToken, 0); + } +#endif + if( op==TK_SELECT_COLUMN ){ + assert( pExpr->pLeft!=0 && ExprUseXSelect(pExpr->pLeft) ); + assert( pExpr->iColumn < pExpr->iTable ); + assert( pExpr->iColumn >= 0 ); + assert( pExpr->iTable==pExpr->pLeft->x.pSelect->pEList->nExpr ); + return sqlite3ExprAffinity( + pExpr->pLeft->x.pSelect->pEList->a[pExpr->iColumn].pExpr + ); + } + if( op==TK_VECTOR + || (op==TK_FUNCTION && pExpr->affExpr==SQLITE_AFF_DEFER) + ){ + assert( ExprUseXList(pExpr) ); + return sqlite3ExprAffinity(pExpr->x.pList->a[0].pExpr); + } + if( ExprHasProperty(pExpr, EP_Skip|EP_IfNullRow) ){ + assert( pExpr->op==TK_COLLATE + || pExpr->op==TK_IF_NULL_ROW + || (pExpr->op==TK_REGISTER && pExpr->op2==TK_IF_NULL_ROW) ); + pExpr = pExpr->pLeft; + op = pExpr->op; + continue; + } + if( op!=TK_REGISTER ) break; + op = pExpr->op2; + if( NEVER( op==TK_REGISTER ) ) break; + } + return pExpr->affExpr; +} + +/* +** Make a guess at all the possible datatypes of the result that could +** be returned by an expression. Return a bitmask indicating the answer: +** +** 0x01 Numeric +** 0x02 Text +** 0x04 Blob +** +** If the expression must return NULL, then 0x00 is returned. +*/ +SQLITE_PRIVATE int sqlite3ExprDataType(const Expr *pExpr){ + while( pExpr ){ + switch( pExpr->op ){ + case TK_COLLATE: + case TK_IF_NULL_ROW: + case TK_UPLUS: { + pExpr = pExpr->pLeft; + break; + } + case TK_NULL: { + pExpr = 0; + break; + } + case TK_STRING: { + return 0x02; + } + case TK_BLOB: { + return 0x04; + } + case TK_CONCAT: { + return 0x06; + } + case TK_VARIABLE: + case TK_AGG_FUNCTION: + case TK_FUNCTION: { + return 0x07; + } + case TK_COLUMN: + case TK_AGG_COLUMN: + case TK_SELECT: + case TK_CAST: + case TK_SELECT_COLUMN: + case TK_VECTOR: { + int aff = sqlite3ExprAffinity(pExpr); + if( aff>=SQLITE_AFF_NUMERIC ) return 0x05; + if( aff==SQLITE_AFF_TEXT ) return 0x06; + return 0x07; + } + case TK_CASE: { + int res = 0; + int ii; + ExprList *pList = pExpr->x.pList; + assert( ExprUseXList(pExpr) && pList!=0 ); + assert( pList->nExpr > 0); + for(ii=1; iinExpr; ii+=2){ + res |= sqlite3ExprDataType(pList->a[ii].pExpr); + } + if( pList->nExpr % 2 ){ + res |= sqlite3ExprDataType(pList->a[pList->nExpr-1].pExpr); + } + return res; + } + default: { + return 0x01; + } + } /* End of switch(op) */ + } /* End of while(pExpr) */ + return 0x00; +} + +/* +** Set the collating sequence for expression pExpr to be the collating +** sequence named by pToken. Return a pointer to a new Expr node that +** implements the COLLATE operator. +** +** If a memory allocation error occurs, that fact is recorded in pParse->db +** and the pExpr parameter is returned unchanged. +*/ +SQLITE_PRIVATE Expr *sqlite3ExprAddCollateToken( + const Parse *pParse, /* Parsing context */ + Expr *pExpr, /* Add the "COLLATE" clause to this expression */ + const Token *pCollName, /* Name of collating sequence */ + int dequote /* True to dequote pCollName */ +){ + if( pCollName->n>0 ){ + Expr *pNew = sqlite3ExprAlloc(pParse->db, TK_COLLATE, pCollName, dequote); + if( pNew ){ + pNew->pLeft = pExpr; + pNew->flags |= EP_Collate|EP_Skip; + pExpr = pNew; + } + } + return pExpr; +} +SQLITE_PRIVATE Expr *sqlite3ExprAddCollateString( + const Parse *pParse, /* Parsing context */ + Expr *pExpr, /* Add the "COLLATE" clause to this expression */ + const char *zC /* The collating sequence name */ +){ + Token s; + assert( zC!=0 ); + sqlite3TokenInit(&s, (char*)zC); + return sqlite3ExprAddCollateToken(pParse, pExpr, &s, 0); +} + +/* +** Skip over any TK_COLLATE operators. +*/ +SQLITE_PRIVATE Expr *sqlite3ExprSkipCollate(Expr *pExpr){ + while( pExpr && ExprHasProperty(pExpr, EP_Skip) ){ + assert( pExpr->op==TK_COLLATE ); + pExpr = pExpr->pLeft; + } + return pExpr; +} + +/* +** Skip over any TK_COLLATE operators and/or any unlikely() +** or likelihood() or likely() functions at the root of an +** expression. +*/ +SQLITE_PRIVATE Expr *sqlite3ExprSkipCollateAndLikely(Expr *pExpr){ + while( pExpr && ExprHasProperty(pExpr, EP_Skip|EP_Unlikely) ){ + if( ExprHasProperty(pExpr, EP_Unlikely) ){ + assert( ExprUseXList(pExpr) ); + assert( pExpr->x.pList->nExpr>0 ); + assert( pExpr->op==TK_FUNCTION ); + pExpr = pExpr->x.pList->a[0].pExpr; + }else if( pExpr->op==TK_COLLATE ){ + pExpr = pExpr->pLeft; + }else{ + break; + } + } + return pExpr; +} + +/* +** Return the collation sequence for the expression pExpr. If +** there is no defined collating sequence, return NULL. +** +** See also: sqlite3ExprNNCollSeq() +** +** The sqlite3ExprNNCollSeq() works the same exact that it returns the +** default collation if pExpr has no defined collation. +** +** The collating sequence might be determined by a COLLATE operator +** or by the presence of a column with a defined collating sequence. +** COLLATE operators take first precedence. Left operands take +** precedence over right operands. +*/ +SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, const Expr *pExpr){ + sqlite3 *db = pParse->db; + CollSeq *pColl = 0; + const Expr *p = pExpr; + while( p ){ + int op = p->op; + if( op==TK_REGISTER ) op = p->op2; + if( (op==TK_AGG_COLUMN && p->y.pTab!=0) + || op==TK_COLUMN || op==TK_TRIGGER + ){ + int j; + assert( ExprUseYTab(p) ); + assert( p->y.pTab!=0 ); + if( (j = p->iColumn)>=0 ){ + const char *zColl = sqlite3ColumnColl(&p->y.pTab->aCol[j]); + pColl = sqlite3FindCollSeq(db, ENC(db), zColl, 0); + } + break; + } + if( op==TK_CAST || op==TK_UPLUS ){ + p = p->pLeft; + continue; + } + if( op==TK_VECTOR + || (op==TK_FUNCTION && p->affExpr==SQLITE_AFF_DEFER) + ){ + assert( ExprUseXList(p) ); + p = p->x.pList->a[0].pExpr; + continue; + } + if( op==TK_COLLATE ){ + assert( !ExprHasProperty(p, EP_IntValue) ); + pColl = sqlite3GetCollSeq(pParse, ENC(db), 0, p->u.zToken); + break; + } + if( p->flags & EP_Collate ){ + if( p->pLeft && (p->pLeft->flags & EP_Collate)!=0 ){ + p = p->pLeft; + }else{ + Expr *pNext = p->pRight; + /* The Expr.x union is never used at the same time as Expr.pRight */ + assert( !ExprUseXList(p) || p->x.pList==0 || p->pRight==0 ); + if( ExprUseXList(p) && p->x.pList!=0 && !db->mallocFailed ){ + int i; + for(i=0; ix.pList->nExpr; i++){ + if( ExprHasProperty(p->x.pList->a[i].pExpr, EP_Collate) ){ + pNext = p->x.pList->a[i].pExpr; + break; + } + } + } + p = pNext; + } + }else{ + break; + } + } + if( sqlite3CheckCollSeq(pParse, pColl) ){ + pColl = 0; + } + return pColl; +} + +/* +** Return the collation sequence for the expression pExpr. If +** there is no defined collating sequence, return a pointer to the +** default collation sequence. +** +** See also: sqlite3ExprCollSeq() +** +** The sqlite3ExprCollSeq() routine works the same except that it +** returns NULL if there is no defined collation. +*/ +SQLITE_PRIVATE CollSeq *sqlite3ExprNNCollSeq(Parse *pParse, const Expr *pExpr){ + CollSeq *p = sqlite3ExprCollSeq(pParse, pExpr); + if( p==0 ) p = pParse->db->pDfltColl; + assert( p!=0 ); + return p; +} + +/* +** Return TRUE if the two expressions have equivalent collating sequences. +*/ +SQLITE_PRIVATE int sqlite3ExprCollSeqMatch(Parse *pParse, const Expr *pE1, const Expr *pE2){ + CollSeq *pColl1 = sqlite3ExprNNCollSeq(pParse, pE1); + CollSeq *pColl2 = sqlite3ExprNNCollSeq(pParse, pE2); + return sqlite3StrICmp(pColl1->zName, pColl2->zName)==0; +} + +/* +** pExpr is an operand of a comparison operator. aff2 is the +** type affinity of the other operand. This routine returns the +** type affinity that should be used for the comparison operator. +*/ +SQLITE_PRIVATE char sqlite3CompareAffinity(const Expr *pExpr, char aff2){ + char aff1 = sqlite3ExprAffinity(pExpr); + if( aff1>SQLITE_AFF_NONE && aff2>SQLITE_AFF_NONE ){ + /* Both sides of the comparison are columns. If one has numeric + ** affinity, use that. Otherwise use no affinity. + */ + if( sqlite3IsNumericAffinity(aff1) || sqlite3IsNumericAffinity(aff2) ){ + return SQLITE_AFF_NUMERIC; + }else{ + return SQLITE_AFF_BLOB; + } + }else{ + /* One side is a column, the other is not. Use the columns affinity. */ + assert( aff1<=SQLITE_AFF_NONE || aff2<=SQLITE_AFF_NONE ); + return (aff1<=SQLITE_AFF_NONE ? aff2 : aff1) | SQLITE_AFF_NONE; + } +} + +/* +** pExpr is a comparison operator. Return the type affinity that should +** be applied to both operands prior to doing the comparison. +*/ +static char comparisonAffinity(const Expr *pExpr){ + char aff; + assert( pExpr->op==TK_EQ || pExpr->op==TK_IN || pExpr->op==TK_LT || + pExpr->op==TK_GT || pExpr->op==TK_GE || pExpr->op==TK_LE || + pExpr->op==TK_NE || pExpr->op==TK_IS || pExpr->op==TK_ISNOT ); + assert( pExpr->pLeft ); + aff = sqlite3ExprAffinity(pExpr->pLeft); + if( pExpr->pRight ){ + aff = sqlite3CompareAffinity(pExpr->pRight, aff); + }else if( ExprUseXSelect(pExpr) ){ + aff = sqlite3CompareAffinity(pExpr->x.pSelect->pEList->a[0].pExpr, aff); + }else if( aff==0 ){ + aff = SQLITE_AFF_BLOB; + } + return aff; +} + +/* +** pExpr is a comparison expression, eg. '=', '<', IN(...) etc. +** idx_affinity is the affinity of an indexed column. Return true +** if the index with affinity idx_affinity may be used to implement +** the comparison in pExpr. +*/ +SQLITE_PRIVATE int sqlite3IndexAffinityOk(const Expr *pExpr, char idx_affinity){ + char aff = comparisonAffinity(pExpr); + if( affflags & EP_Collate ){ + pColl = sqlite3ExprCollSeq(pParse, pLeft); + }else if( pRight && (pRight->flags & EP_Collate)!=0 ){ + pColl = sqlite3ExprCollSeq(pParse, pRight); + }else{ + pColl = sqlite3ExprCollSeq(pParse, pLeft); + if( !pColl ){ + pColl = sqlite3ExprCollSeq(pParse, pRight); + } + } + return pColl; +} + +/* Expression p is a comparison operator. Return a collation sequence +** appropriate for the comparison operator. +** +** This is normally just a wrapper around sqlite3BinaryCompareCollSeq(). +** However, if the OP_Commuted flag is set, then the order of the operands +** is reversed in the sqlite3BinaryCompareCollSeq() call so that the +** correct collating sequence is found. +*/ +SQLITE_PRIVATE CollSeq *sqlite3ExprCompareCollSeq(Parse *pParse, const Expr *p){ + if( ExprHasProperty(p, EP_Commuted) ){ + return sqlite3BinaryCompareCollSeq(pParse, p->pRight, p->pLeft); + }else{ + return sqlite3BinaryCompareCollSeq(pParse, p->pLeft, p->pRight); + } +} + +/* +** Generate code for a comparison operator. +*/ +static int codeCompare( + Parse *pParse, /* The parsing (and code generating) context */ + Expr *pLeft, /* The left operand */ + Expr *pRight, /* The right operand */ + int opcode, /* The comparison opcode */ + int in1, int in2, /* Register holding operands */ + int dest, /* Jump here if true. */ + int jumpIfNull, /* If true, jump if either operand is NULL */ + int isCommuted /* The comparison has been commuted */ +){ + int p5; + int addr; + CollSeq *p4; + + if( pParse->nErr ) return 0; + if( isCommuted ){ + p4 = sqlite3BinaryCompareCollSeq(pParse, pRight, pLeft); + }else{ + p4 = sqlite3BinaryCompareCollSeq(pParse, pLeft, pRight); + } + p5 = binaryCompareP5(pLeft, pRight, jumpIfNull); + addr = sqlite3VdbeAddOp4(pParse->pVdbe, opcode, in2, dest, in1, + (void*)p4, P4_COLLSEQ); + sqlite3VdbeChangeP5(pParse->pVdbe, (u16)p5); + return addr; +} + +/* +** Return true if expression pExpr is a vector, or false otherwise. +** +** A vector is defined as any expression that results in two or more +** columns of result. Every TK_VECTOR node is an vector because the +** parser will not generate a TK_VECTOR with fewer than two entries. +** But a TK_SELECT might be either a vector or a scalar. It is only +** considered a vector if it has two or more result columns. +*/ +SQLITE_PRIVATE int sqlite3ExprIsVector(const Expr *pExpr){ + return sqlite3ExprVectorSize(pExpr)>1; +} + +/* +** If the expression passed as the only argument is of type TK_VECTOR +** return the number of expressions in the vector. Or, if the expression +** is a sub-select, return the number of columns in the sub-select. For +** any other type of expression, return 1. +*/ +SQLITE_PRIVATE int sqlite3ExprVectorSize(const Expr *pExpr){ + u8 op = pExpr->op; + if( op==TK_REGISTER ) op = pExpr->op2; + if( op==TK_VECTOR ){ + assert( ExprUseXList(pExpr) ); + return pExpr->x.pList->nExpr; + }else if( op==TK_SELECT ){ + assert( ExprUseXSelect(pExpr) ); + return pExpr->x.pSelect->pEList->nExpr; + }else{ + return 1; + } +} + +/* +** Return a pointer to a subexpression of pVector that is the i-th +** column of the vector (numbered starting with 0). The caller must +** ensure that i is within range. +** +** If pVector is really a scalar (and "scalar" here includes subqueries +** that return a single column!) then return pVector unmodified. +** +** pVector retains ownership of the returned subexpression. +** +** If the vector is a (SELECT ...) then the expression returned is +** just the expression for the i-th term of the result set, and may +** not be ready for evaluation because the table cursor has not yet +** been positioned. +*/ +SQLITE_PRIVATE Expr *sqlite3VectorFieldSubexpr(Expr *pVector, int i){ + assert( iop==TK_ERROR ); + if( sqlite3ExprIsVector(pVector) ){ + assert( pVector->op2==0 || pVector->op==TK_REGISTER ); + if( pVector->op==TK_SELECT || pVector->op2==TK_SELECT ){ + assert( ExprUseXSelect(pVector) ); + return pVector->x.pSelect->pEList->a[i].pExpr; + }else{ + assert( ExprUseXList(pVector) ); + return pVector->x.pList->a[i].pExpr; + } + } + return pVector; +} + +/* +** Compute and return a new Expr object which when passed to +** sqlite3ExprCode() will generate all necessary code to compute +** the iField-th column of the vector expression pVector. +** +** It is ok for pVector to be a scalar (as long as iField==0). +** In that case, this routine works like sqlite3ExprDup(). +** +** The caller owns the returned Expr object and is responsible for +** ensuring that the returned value eventually gets freed. +** +** The caller retains ownership of pVector. If pVector is a TK_SELECT, +** then the returned object will reference pVector and so pVector must remain +** valid for the life of the returned object. If pVector is a TK_VECTOR +** or a scalar expression, then it can be deleted as soon as this routine +** returns. +** +** A trick to cause a TK_SELECT pVector to be deleted together with +** the returned Expr object is to attach the pVector to the pRight field +** of the returned TK_SELECT_COLUMN Expr object. +*/ +SQLITE_PRIVATE Expr *sqlite3ExprForVectorField( + Parse *pParse, /* Parsing context */ + Expr *pVector, /* The vector. List of expressions or a sub-SELECT */ + int iField, /* Which column of the vector to return */ + int nField /* Total number of columns in the vector */ +){ + Expr *pRet; + if( pVector->op==TK_SELECT ){ + assert( ExprUseXSelect(pVector) ); + /* The TK_SELECT_COLUMN Expr node: + ** + ** pLeft: pVector containing TK_SELECT. Not deleted. + ** pRight: not used. But recursively deleted. + ** iColumn: Index of a column in pVector + ** iTable: 0 or the number of columns on the LHS of an assignment + ** pLeft->iTable: First in an array of register holding result, or 0 + ** if the result is not yet computed. + ** + ** sqlite3ExprDelete() specifically skips the recursive delete of + ** pLeft on TK_SELECT_COLUMN nodes. But pRight is followed, so pVector + ** can be attached to pRight to cause this node to take ownership of + ** pVector. Typically there will be multiple TK_SELECT_COLUMN nodes + ** with the same pLeft pointer to the pVector, but only one of them + ** will own the pVector. + */ + pRet = sqlite3PExpr(pParse, TK_SELECT_COLUMN, 0, 0); + if( pRet ){ + ExprSetProperty(pRet, EP_FullSize); + pRet->iTable = nField; + pRet->iColumn = iField; + pRet->pLeft = pVector; + } + }else{ + if( pVector->op==TK_VECTOR ){ + Expr **ppVector; + assert( ExprUseXList(pVector) ); + ppVector = &pVector->x.pList->a[iField].pExpr; + pVector = *ppVector; + if( IN_RENAME_OBJECT ){ + /* This must be a vector UPDATE inside a trigger */ + *ppVector = 0; + return pVector; + } + } + pRet = sqlite3ExprDup(pParse->db, pVector, 0); + } + return pRet; +} + +/* +** If expression pExpr is of type TK_SELECT, generate code to evaluate +** it. Return the register in which the result is stored (or, if the +** sub-select returns more than one column, the first in an array +** of registers in which the result is stored). +** +** If pExpr is not a TK_SELECT expression, return 0. +*/ +static int exprCodeSubselect(Parse *pParse, Expr *pExpr){ + int reg = 0; +#ifndef SQLITE_OMIT_SUBQUERY + if( pExpr->op==TK_SELECT ){ + reg = sqlite3CodeSubselect(pParse, pExpr); + } +#endif + return reg; +} + +/* +** Argument pVector points to a vector expression - either a TK_VECTOR +** or TK_SELECT that returns more than one column. This function returns +** the register number of a register that contains the value of +** element iField of the vector. +** +** If pVector is a TK_SELECT expression, then code for it must have +** already been generated using the exprCodeSubselect() routine. In this +** case parameter regSelect should be the first in an array of registers +** containing the results of the sub-select. +** +** If pVector is of type TK_VECTOR, then code for the requested field +** is generated. In this case (*pRegFree) may be set to the number of +** a temporary register to be freed by the caller before returning. +** +** Before returning, output parameter (*ppExpr) is set to point to the +** Expr object corresponding to element iElem of the vector. +*/ +static int exprVectorRegister( + Parse *pParse, /* Parse context */ + Expr *pVector, /* Vector to extract element from */ + int iField, /* Field to extract from pVector */ + int regSelect, /* First in array of registers */ + Expr **ppExpr, /* OUT: Expression element */ + int *pRegFree /* OUT: Temp register to free */ +){ + u8 op = pVector->op; + assert( op==TK_VECTOR || op==TK_REGISTER || op==TK_SELECT || op==TK_ERROR ); + if( op==TK_REGISTER ){ + *ppExpr = sqlite3VectorFieldSubexpr(pVector, iField); + return pVector->iTable+iField; + } + if( op==TK_SELECT ){ + assert( ExprUseXSelect(pVector) ); + *ppExpr = pVector->x.pSelect->pEList->a[iField].pExpr; + return regSelect+iField; + } + if( op==TK_VECTOR ){ + assert( ExprUseXList(pVector) ); + *ppExpr = pVector->x.pList->a[iField].pExpr; + return sqlite3ExprCodeTemp(pParse, *ppExpr, pRegFree); + } + return 0; +} + +/* +** Expression pExpr is a comparison between two vector values. Compute +** the result of the comparison (1, 0, or NULL) and write that +** result into register dest. +** +** The caller must satisfy the following preconditions: +** +** if pExpr->op==TK_IS: op==TK_EQ and p5==SQLITE_NULLEQ +** if pExpr->op==TK_ISNOT: op==TK_NE and p5==SQLITE_NULLEQ +** otherwise: op==pExpr->op and p5==0 +*/ +static void codeVectorCompare( + Parse *pParse, /* Code generator context */ + Expr *pExpr, /* The comparison operation */ + int dest, /* Write results into this register */ + u8 op, /* Comparison operator */ + u8 p5 /* SQLITE_NULLEQ or zero */ +){ + Vdbe *v = pParse->pVdbe; + Expr *pLeft = pExpr->pLeft; + Expr *pRight = pExpr->pRight; + int nLeft = sqlite3ExprVectorSize(pLeft); + int i; + int regLeft = 0; + int regRight = 0; + u8 opx = op; + int addrCmp = 0; + int addrDone = sqlite3VdbeMakeLabel(pParse); + int isCommuted = ExprHasProperty(pExpr,EP_Commuted); + + assert( !ExprHasVVAProperty(pExpr,EP_Immutable) ); + if( pParse->nErr ) return; + if( nLeft!=sqlite3ExprVectorSize(pRight) ){ + sqlite3ErrorMsg(pParse, "row value misused"); + return; + } + assert( pExpr->op==TK_EQ || pExpr->op==TK_NE + || pExpr->op==TK_IS || pExpr->op==TK_ISNOT + || pExpr->op==TK_LT || pExpr->op==TK_GT + || pExpr->op==TK_LE || pExpr->op==TK_GE + ); + assert( pExpr->op==op || (pExpr->op==TK_IS && op==TK_EQ) + || (pExpr->op==TK_ISNOT && op==TK_NE) ); + assert( p5==0 || pExpr->op!=op ); + assert( p5==SQLITE_NULLEQ || pExpr->op==op ); + + if( op==TK_LE ) opx = TK_LT; + if( op==TK_GE ) opx = TK_GT; + if( op==TK_NE ) opx = TK_EQ; + + regLeft = exprCodeSubselect(pParse, pLeft); + regRight = exprCodeSubselect(pParse, pRight); + + sqlite3VdbeAddOp2(v, OP_Integer, 1, dest); + for(i=0; 1 /*Loop exits by "break"*/; i++){ + int regFree1 = 0, regFree2 = 0; + Expr *pL = 0, *pR = 0; + int r1, r2; + assert( i>=0 && i0 +/* +** Check that argument nHeight is less than or equal to the maximum +** expression depth allowed. If it is not, leave an error message in +** pParse. +*/ +SQLITE_PRIVATE int sqlite3ExprCheckHeight(Parse *pParse, int nHeight){ + int rc = SQLITE_OK; + int mxHeight = pParse->db->aLimit[SQLITE_LIMIT_EXPR_DEPTH]; + if( nHeight>mxHeight ){ + sqlite3ErrorMsg(pParse, + "Expression tree is too large (maximum depth %d)", mxHeight + ); + rc = SQLITE_ERROR; + } + return rc; +} + +/* The following three functions, heightOfExpr(), heightOfExprList() +** and heightOfSelect(), are used to determine the maximum height +** of any expression tree referenced by the structure passed as the +** first argument. +** +** If this maximum height is greater than the current value pointed +** to by pnHeight, the second parameter, then set *pnHeight to that +** value. +*/ +static void heightOfExpr(const Expr *p, int *pnHeight){ + if( p ){ + if( p->nHeight>*pnHeight ){ + *pnHeight = p->nHeight; + } + } +} +static void heightOfExprList(const ExprList *p, int *pnHeight){ + if( p ){ + int i; + for(i=0; inExpr; i++){ + heightOfExpr(p->a[i].pExpr, pnHeight); + } + } +} +static void heightOfSelect(const Select *pSelect, int *pnHeight){ + const Select *p; + for(p=pSelect; p; p=p->pPrior){ + heightOfExpr(p->pWhere, pnHeight); + heightOfExpr(p->pHaving, pnHeight); + heightOfExpr(p->pLimit, pnHeight); + heightOfExprList(p->pEList, pnHeight); + heightOfExprList(p->pGroupBy, pnHeight); + heightOfExprList(p->pOrderBy, pnHeight); + } +} + +/* +** Set the Expr.nHeight variable in the structure passed as an +** argument. An expression with no children, Expr.pList or +** Expr.pSelect member has a height of 1. Any other expression +** has a height equal to the maximum height of any other +** referenced Expr plus one. +** +** Also propagate EP_Propagate flags up from Expr.x.pList to Expr.flags, +** if appropriate. +*/ +static void exprSetHeight(Expr *p){ + int nHeight = p->pLeft ? p->pLeft->nHeight : 0; + if( NEVER(p->pRight) && p->pRight->nHeight>nHeight ){ + nHeight = p->pRight->nHeight; + } + if( ExprUseXSelect(p) ){ + heightOfSelect(p->x.pSelect, &nHeight); + }else if( p->x.pList ){ + heightOfExprList(p->x.pList, &nHeight); + p->flags |= EP_Propagate & sqlite3ExprListFlags(p->x.pList); + } + p->nHeight = nHeight + 1; +} + +/* +** Set the Expr.nHeight variable using the exprSetHeight() function. If +** the height is greater than the maximum allowed expression depth, +** leave an error in pParse. +** +** Also propagate all EP_Propagate flags from the Expr.x.pList into +** Expr.flags. +*/ +SQLITE_PRIVATE void sqlite3ExprSetHeightAndFlags(Parse *pParse, Expr *p){ + if( pParse->nErr ) return; + exprSetHeight(p); + sqlite3ExprCheckHeight(pParse, p->nHeight); +} + +/* +** Return the maximum height of any expression tree referenced +** by the select statement passed as an argument. +*/ +SQLITE_PRIVATE int sqlite3SelectExprHeight(const Select *p){ + int nHeight = 0; + heightOfSelect(p, &nHeight); + return nHeight; +} +#else /* ABOVE: Height enforcement enabled. BELOW: Height enforcement off */ +/* +** Propagate all EP_Propagate flags from the Expr.x.pList into +** Expr.flags. +*/ +SQLITE_PRIVATE void sqlite3ExprSetHeightAndFlags(Parse *pParse, Expr *p){ + if( pParse->nErr ) return; + if( p && ExprUseXList(p) && p->x.pList ){ + p->flags |= EP_Propagate & sqlite3ExprListFlags(p->x.pList); + } +} +#define exprSetHeight(y) +#endif /* SQLITE_MAX_EXPR_DEPTH>0 */ + +/* +** Set the error offset for an Expr node, if possible. +*/ +SQLITE_PRIVATE void sqlite3ExprSetErrorOffset(Expr *pExpr, int iOfst){ + if( pExpr==0 ) return; + if( NEVER(ExprUseWJoin(pExpr)) ) return; + pExpr->w.iOfst = iOfst; +} + +/* +** This routine is the core allocator for Expr nodes. +** +** Construct a new expression node and return a pointer to it. Memory +** for this node and for the pToken argument is a single allocation +** obtained from sqlite3DbMalloc(). The calling function +** is responsible for making sure the node eventually gets freed. +** +** If dequote is true, then the token (if it exists) is dequoted. +** If dequote is false, no dequoting is performed. The deQuote +** parameter is ignored if pToken is NULL or if the token does not +** appear to be quoted. If the quotes were of the form "..." (double-quotes) +** then the EP_DblQuoted flag is set on the expression node. +** +** Special case (tag-20240227-a): If op==TK_INTEGER and pToken points to +** a string that can be translated into a 32-bit integer, then the token is +** not stored in u.zToken. Instead, the integer values is written +** into u.iValue and the EP_IntValue flag is set. No extra storage +** is allocated to hold the integer text and the dequote flag is ignored. +** See also tag-20240227-b. +*/ +SQLITE_PRIVATE Expr *sqlite3ExprAlloc( + sqlite3 *db, /* Handle for sqlite3DbMallocRawNN() */ + int op, /* Expression opcode */ + const Token *pToken, /* Token argument. Might be NULL */ + int dequote /* True to dequote */ +){ + Expr *pNew; + int nExtra = 0; + int iValue = 0; + + assert( db!=0 ); + if( pToken ){ + if( op!=TK_INTEGER || pToken->z==0 + || sqlite3GetInt32(pToken->z, &iValue)==0 ){ + nExtra = pToken->n+1; /* tag-20240227-a */ + assert( iValue>=0 ); + } + } + pNew = sqlite3DbMallocRawNN(db, sizeof(Expr)+nExtra); + if( pNew ){ + memset(pNew, 0, sizeof(Expr)); + pNew->op = (u8)op; + pNew->iAgg = -1; + if( pToken ){ + if( nExtra==0 ){ + pNew->flags |= EP_IntValue|EP_Leaf|(iValue?EP_IsTrue:EP_IsFalse); + pNew->u.iValue = iValue; + }else{ + pNew->u.zToken = (char*)&pNew[1]; + assert( pToken->z!=0 || pToken->n==0 ); + if( pToken->n ) memcpy(pNew->u.zToken, pToken->z, pToken->n); + pNew->u.zToken[pToken->n] = 0; + if( dequote && sqlite3Isquote(pNew->u.zToken[0]) ){ + sqlite3DequoteExpr(pNew); + } + } + } +#if SQLITE_MAX_EXPR_DEPTH>0 + pNew->nHeight = 1; +#endif + } + return pNew; +} + +/* +** Allocate a new expression node from a zero-terminated token that has +** already been dequoted. +*/ +SQLITE_PRIVATE Expr *sqlite3Expr( + sqlite3 *db, /* Handle for sqlite3DbMallocZero() (may be null) */ + int op, /* Expression opcode */ + const char *zToken /* Token argument. Might be NULL */ +){ + Token x; + x.z = zToken; + x.n = sqlite3Strlen30(zToken); + return sqlite3ExprAlloc(db, op, &x, 0); +} + +/* +** Attach subtrees pLeft and pRight to the Expr node pRoot. +** +** If pRoot==NULL that means that a memory allocation error has occurred. +** In that case, delete the subtrees pLeft and pRight. +*/ +SQLITE_PRIVATE void sqlite3ExprAttachSubtrees( + sqlite3 *db, + Expr *pRoot, + Expr *pLeft, + Expr *pRight +){ + if( pRoot==0 ){ + assert( db->mallocFailed ); + sqlite3ExprDelete(db, pLeft); + sqlite3ExprDelete(db, pRight); + }else{ + assert( ExprUseXList(pRoot) ); + assert( pRoot->x.pSelect==0 ); + if( pRight ){ + pRoot->pRight = pRight; + pRoot->flags |= EP_Propagate & pRight->flags; +#if SQLITE_MAX_EXPR_DEPTH>0 + pRoot->nHeight = pRight->nHeight+1; + }else{ + pRoot->nHeight = 1; +#endif + } + if( pLeft ){ + pRoot->pLeft = pLeft; + pRoot->flags |= EP_Propagate & pLeft->flags; +#if SQLITE_MAX_EXPR_DEPTH>0 + if( pLeft->nHeight>=pRoot->nHeight ){ + pRoot->nHeight = pLeft->nHeight+1; + } +#endif + } + } +} + +/* +** Allocate an Expr node which joins as many as two subtrees. +** +** One or both of the subtrees can be NULL. Return a pointer to the new +** Expr node. Or, if an OOM error occurs, set pParse->db->mallocFailed, +** free the subtrees and return NULL. +*/ +SQLITE_PRIVATE Expr *sqlite3PExpr( + Parse *pParse, /* Parsing context */ + int op, /* Expression opcode */ + Expr *pLeft, /* Left operand */ + Expr *pRight /* Right operand */ +){ + Expr *p; + p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)); + if( p ){ + memset(p, 0, sizeof(Expr)); + p->op = op & 0xff; + p->iAgg = -1; + sqlite3ExprAttachSubtrees(pParse->db, p, pLeft, pRight); + sqlite3ExprCheckHeight(pParse, p->nHeight); + }else{ + sqlite3ExprDelete(pParse->db, pLeft); + sqlite3ExprDelete(pParse->db, pRight); + } + return p; +} + +/* +** Add pSelect to the Expr.x.pSelect field. Or, if pExpr is NULL (due +** do a memory allocation failure) then delete the pSelect object. +*/ +SQLITE_PRIVATE void sqlite3PExprAddSelect(Parse *pParse, Expr *pExpr, Select *pSelect){ + if( pExpr ){ + pExpr->x.pSelect = pSelect; + ExprSetProperty(pExpr, EP_xIsSelect|EP_Subquery); + sqlite3ExprSetHeightAndFlags(pParse, pExpr); + }else{ + assert( pParse->db->mallocFailed ); + sqlite3SelectDelete(pParse->db, pSelect); + } +} + +/* +** Expression list pEList is a list of vector values. This function +** converts the contents of pEList to a VALUES(...) Select statement +** returning 1 row for each element of the list. For example, the +** expression list: +** +** ( (1,2), (3,4) (5,6) ) +** +** is translated to the equivalent of: +** +** VALUES(1,2), (3,4), (5,6) +** +** Each of the vector values in pEList must contain exactly nElem terms. +** If a list element that is not a vector or does not contain nElem terms, +** an error message is left in pParse. +** +** This is used as part of processing IN(...) expressions with a list +** of vectors on the RHS. e.g. "... IN ((1,2), (3,4), (5,6))". +*/ +SQLITE_PRIVATE Select *sqlite3ExprListToValues(Parse *pParse, int nElem, ExprList *pEList){ + int ii; + Select *pRet = 0; + assert( nElem>1 ); + for(ii=0; iinExpr; ii++){ + Select *pSel; + Expr *pExpr = pEList->a[ii].pExpr; + int nExprElem; + if( pExpr->op==TK_VECTOR ){ + assert( ExprUseXList(pExpr) ); + nExprElem = pExpr->x.pList->nExpr; + }else{ + nExprElem = 1; + } + if( nExprElem!=nElem ){ + sqlite3ErrorMsg(pParse, "IN(...) element has %d term%s - expected %d", + nExprElem, nExprElem>1?"s":"", nElem + ); + break; + } + assert( ExprUseXList(pExpr) ); + pSel = sqlite3SelectNew(pParse, pExpr->x.pList, 0, 0, 0, 0, 0, SF_Values,0); + pExpr->x.pList = 0; + if( pSel ){ + if( pRet ){ + pSel->op = TK_ALL; + pSel->pPrior = pRet; + } + pRet = pSel; + } + } + + if( pRet && pRet->pPrior ){ + pRet->selFlags |= SF_MultiValue; + } + sqlite3ExprListDelete(pParse->db, pEList); + return pRet; +} + +/* +** Join two expressions using an AND operator. If either expression is +** NULL, then just return the other expression. +** +** If one side or the other of the AND is known to be false, and neither side +** is part of an ON clause, then instead of returning an AND expression, +** just return a constant expression with a value of false. +*/ +SQLITE_PRIVATE Expr *sqlite3ExprAnd(Parse *pParse, Expr *pLeft, Expr *pRight){ + sqlite3 *db = pParse->db; + if( pLeft==0 ){ + return pRight; + }else if( pRight==0 ){ + return pLeft; + }else{ + u32 f = pLeft->flags | pRight->flags; + if( (f&(EP_OuterON|EP_InnerON|EP_IsFalse|EP_HasFunc))==EP_IsFalse + && !IN_RENAME_OBJECT + ){ + sqlite3ExprDeferredDelete(pParse, pLeft); + sqlite3ExprDeferredDelete(pParse, pRight); + return sqlite3Expr(db, TK_INTEGER, "0"); + }else{ + return sqlite3PExpr(pParse, TK_AND, pLeft, pRight); + } + } +} + +/* +** Construct a new expression node for a function with multiple +** arguments. +*/ +SQLITE_PRIVATE Expr *sqlite3ExprFunction( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* Argument list */ + const Token *pToken, /* Name of the function */ + int eDistinct /* SF_Distinct or SF_ALL or 0 */ +){ + Expr *pNew; + sqlite3 *db = pParse->db; + assert( pToken ); + pNew = sqlite3ExprAlloc(db, TK_FUNCTION, pToken, 1); + if( pNew==0 ){ + sqlite3ExprListDelete(db, pList); /* Avoid memory leak when malloc fails */ + return 0; + } + assert( !ExprHasProperty(pNew, EP_InnerON|EP_OuterON) ); + pNew->w.iOfst = (int)(pToken->z - pParse->zTail); + if( pList + && pList->nExpr > pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] + && !pParse->nested + ){ + sqlite3ErrorMsg(pParse, "too many arguments on function %T", pToken); + } + pNew->x.pList = pList; + ExprSetProperty(pNew, EP_HasFunc); + assert( ExprUseXList(pNew) ); + sqlite3ExprSetHeightAndFlags(pParse, pNew); + if( eDistinct==SF_Distinct ) ExprSetProperty(pNew, EP_Distinct); + return pNew; +} + +/* +** Report an error when attempting to use an ORDER BY clause within +** the arguments of a non-aggregate function. +*/ +SQLITE_PRIVATE void sqlite3ExprOrderByAggregateError(Parse *pParse, Expr *p){ + sqlite3ErrorMsg(pParse, + "ORDER BY may not be used with non-aggregate %#T()", p + ); +} + +/* +** Attach an ORDER BY clause to a function call. +** +** functionname( arguments ORDER BY sortlist ) +** \_____________________/ \______/ +** pExpr pOrderBy +** +** The ORDER BY clause is inserted into a new Expr node of type TK_ORDER +** and added to the Expr.pLeft field of the parent TK_FUNCTION node. +*/ +SQLITE_PRIVATE void sqlite3ExprAddFunctionOrderBy( + Parse *pParse, /* Parsing context */ + Expr *pExpr, /* The function call to which ORDER BY is to be added */ + ExprList *pOrderBy /* The ORDER BY clause to add */ +){ + Expr *pOB; + sqlite3 *db = pParse->db; + if( NEVER(pOrderBy==0) ){ + assert( db->mallocFailed ); + return; + } + if( pExpr==0 ){ + assert( db->mallocFailed ); + sqlite3ExprListDelete(db, pOrderBy); + return; + } + assert( pExpr->op==TK_FUNCTION ); + assert( pExpr->pLeft==0 ); + assert( ExprUseXList(pExpr) ); + if( pExpr->x.pList==0 || NEVER(pExpr->x.pList->nExpr==0) ){ + /* Ignore ORDER BY on zero-argument aggregates */ + sqlite3ParserAddCleanup(pParse, sqlite3ExprListDeleteGeneric, pOrderBy); + return; + } + if( IsWindowFunc(pExpr) ){ + sqlite3ExprOrderByAggregateError(pParse, pExpr); + sqlite3ExprListDelete(db, pOrderBy); + return; + } + if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){ + sqlite3ErrorMsg(pParse, "too many terms in ORDER BY clause"); + sqlite3ExprListDelete(db, pOrderBy); + return; + } + + pOB = sqlite3ExprAlloc(db, TK_ORDER, 0, 0); + if( pOB==0 ){ + sqlite3ExprListDelete(db, pOrderBy); + return; + } + pOB->x.pList = pOrderBy; + assert( ExprUseXList(pOB) ); + pExpr->pLeft = pOB; + ExprSetProperty(pOB, EP_FullSize); +} + +/* +** Check to see if a function is usable according to current access +** rules: +** +** SQLITE_FUNC_DIRECT - Only usable from top-level SQL +** +** SQLITE_FUNC_UNSAFE - Usable if TRUSTED_SCHEMA or from +** top-level SQL +** +** If the function is not usable, create an error. +*/ +SQLITE_PRIVATE void sqlite3ExprFunctionUsable( + Parse *pParse, /* Parsing and code generating context */ + const Expr *pExpr, /* The function invocation */ + const FuncDef *pDef /* The function being invoked */ +){ + assert( !IN_RENAME_OBJECT ); + assert( (pDef->funcFlags & (SQLITE_FUNC_DIRECT|SQLITE_FUNC_UNSAFE))!=0 ); + if( ExprHasProperty(pExpr, EP_FromDDL) ){ + if( (pDef->funcFlags & SQLITE_FUNC_DIRECT)!=0 + || (pParse->db->flags & SQLITE_TrustedSchema)==0 + ){ + /* Functions prohibited in triggers and views if: + ** (1) tagged with SQLITE_DIRECTONLY + ** (2) not tagged with SQLITE_INNOCUOUS (which means it + ** is tagged with SQLITE_FUNC_UNSAFE) and + ** SQLITE_DBCONFIG_TRUSTED_SCHEMA is off (meaning + ** that the schema is possibly tainted). + */ + sqlite3ErrorMsg(pParse, "unsafe use of %#T()", pExpr); + } + } +} + +/* +** Assign a variable number to an expression that encodes a wildcard +** in the original SQL statement. +** +** Wildcards consisting of a single "?" are assigned the next sequential +** variable number. +** +** Wildcards of the form "?nnn" are assigned the number "nnn". We make +** sure "nnn" is not too big to avoid a denial of service attack when +** the SQL statement comes from an external source. +** +** Wildcards of the form ":aaa", "@aaa", or "$aaa" are assigned the same number +** as the previous instance of the same wildcard. Or if this is the first +** instance of the wildcard, the next sequential variable number is +** assigned. +*/ +SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr, u32 n){ + sqlite3 *db = pParse->db; + const char *z; + ynVar x; + + if( pExpr==0 ) return; + assert( !ExprHasProperty(pExpr, EP_IntValue|EP_Reduced|EP_TokenOnly) ); + z = pExpr->u.zToken; + assert( z!=0 ); + assert( z[0]!=0 ); + assert( n==(u32)sqlite3Strlen30(z) ); + if( z[1]==0 ){ + /* Wildcard of the form "?". Assign the next variable number */ + assert( z[0]=='?' ); + x = (ynVar)(++pParse->nVar); + }else{ + int doAdd = 0; + if( z[0]=='?' ){ + /* Wildcard of the form "?nnn". Convert "nnn" to an integer and + ** use it as the variable number */ + i64 i; + int bOk; + if( n==2 ){ /*OPTIMIZATION-IF-TRUE*/ + i = z[1]-'0'; /* The common case of ?N for a single digit N */ + bOk = 1; + }else{ + bOk = 0==sqlite3Atoi64(&z[1], &i, n-1, SQLITE_UTF8); + } + testcase( i==0 ); + testcase( i==1 ); + testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]-1 ); + testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ); + if( bOk==0 || i<1 || i>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){ + sqlite3ErrorMsg(pParse, "variable number must be between ?1 and ?%d", + db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]); + sqlite3RecordErrorOffsetOfExpr(pParse->db, pExpr); + return; + } + x = (ynVar)i; + if( x>pParse->nVar ){ + pParse->nVar = (int)x; + doAdd = 1; + }else if( sqlite3VListNumToName(pParse->pVList, x)==0 ){ + doAdd = 1; + } + }else{ + /* Wildcards like ":aaa", "$aaa" or "@aaa". Reuse the same variable + ** number as the prior appearance of the same name, or if the name + ** has never appeared before, reuse the same variable number + */ + x = (ynVar)sqlite3VListNameToNum(pParse->pVList, z, n); + if( x==0 ){ + x = (ynVar)(++pParse->nVar); + doAdd = 1; + } + } + if( doAdd ){ + pParse->pVList = sqlite3VListAdd(db, pParse->pVList, z, n, x); + } + } + pExpr->iColumn = x; + if( x>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){ + sqlite3ErrorMsg(pParse, "too many SQL variables"); + sqlite3RecordErrorOffsetOfExpr(pParse->db, pExpr); + } +} + +/* +** Recursively delete an expression tree. +*/ +static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){ + assert( p!=0 ); + assert( db!=0 ); +exprDeleteRestart: + assert( !ExprUseUValue(p) || p->u.iValue>=0 ); + assert( !ExprUseYWin(p) || !ExprUseYSub(p) ); + assert( !ExprUseYWin(p) || p->y.pWin!=0 || db->mallocFailed ); + assert( p->op!=TK_FUNCTION || !ExprUseYSub(p) ); +#ifdef SQLITE_DEBUG + if( ExprHasProperty(p, EP_Leaf) && !ExprHasProperty(p, EP_TokenOnly) ){ + assert( p->pLeft==0 ); + assert( p->pRight==0 ); + assert( !ExprUseXSelect(p) || p->x.pSelect==0 ); + assert( !ExprUseXList(p) || p->x.pList==0 ); + } +#endif + if( !ExprHasProperty(p, (EP_TokenOnly|EP_Leaf)) ){ + /* The Expr.x union is never used at the same time as Expr.pRight */ + assert( (ExprUseXList(p) && p->x.pList==0) || p->pRight==0 ); + if( p->pRight ){ + assert( !ExprHasProperty(p, EP_WinFunc) ); + sqlite3ExprDeleteNN(db, p->pRight); + }else if( ExprUseXSelect(p) ){ + assert( !ExprHasProperty(p, EP_WinFunc) ); + sqlite3SelectDelete(db, p->x.pSelect); + }else{ + sqlite3ExprListDelete(db, p->x.pList); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( ExprHasProperty(p, EP_WinFunc) ){ + sqlite3WindowDelete(db, p->y.pWin); + } +#endif + } + if( p->pLeft && p->op!=TK_SELECT_COLUMN ){ + Expr *pLeft = p->pLeft; + if( !ExprHasProperty(p, EP_Static) + && !ExprHasProperty(pLeft, EP_Static) + ){ + /* Avoid unnecessary recursion on unary operators */ + sqlite3DbNNFreeNN(db, p); + p = pLeft; + goto exprDeleteRestart; + }else{ + sqlite3ExprDeleteNN(db, pLeft); + } + } + } + if( !ExprHasProperty(p, EP_Static) ){ + sqlite3DbNNFreeNN(db, p); + } +} +SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){ + if( p ) sqlite3ExprDeleteNN(db, p); +} +SQLITE_PRIVATE void sqlite3ExprDeleteGeneric(sqlite3 *db, void *p){ + if( ALWAYS(p) ) sqlite3ExprDeleteNN(db, (Expr*)p); +} + +/* +** Clear both elements of an OnOrUsing object +*/ +SQLITE_PRIVATE void sqlite3ClearOnOrUsing(sqlite3 *db, OnOrUsing *p){ + if( p==0 ){ + /* Nothing to clear */ + }else if( p->pOn ){ + sqlite3ExprDeleteNN(db, p->pOn); + }else if( p->pUsing ){ + sqlite3IdListDelete(db, p->pUsing); + } +} + +/* +** Arrange to cause pExpr to be deleted when the pParse is deleted. +** This is similar to sqlite3ExprDelete() except that the delete is +** deferred until the pParse is deleted. +** +** The pExpr might be deleted immediately on an OOM error. +** +** Return 0 if the delete was successfully deferred. Return non-zero +** if the delete happened immediately because of an OOM. +*/ +SQLITE_PRIVATE int sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){ + return 0==sqlite3ParserAddCleanup(pParse, sqlite3ExprDeleteGeneric, pExpr); +} + +/* Invoke sqlite3RenameExprUnmap() and sqlite3ExprDelete() on the +** expression. +*/ +SQLITE_PRIVATE void sqlite3ExprUnmapAndDelete(Parse *pParse, Expr *p){ + if( p ){ + if( IN_RENAME_OBJECT ){ + sqlite3RenameExprUnmap(pParse, p); + } + sqlite3ExprDeleteNN(pParse->db, p); + } +} + +/* +** Return the number of bytes allocated for the expression structure +** passed as the first argument. This is always one of EXPR_FULLSIZE, +** EXPR_REDUCEDSIZE or EXPR_TOKENONLYSIZE. +*/ +static int exprStructSize(const Expr *p){ + if( ExprHasProperty(p, EP_TokenOnly) ) return EXPR_TOKENONLYSIZE; + if( ExprHasProperty(p, EP_Reduced) ) return EXPR_REDUCEDSIZE; + return EXPR_FULLSIZE; +} + +/* +** The dupedExpr*Size() routines each return the number of bytes required +** to store a copy of an expression or expression tree. They differ in +** how much of the tree is measured. +** +** dupedExprStructSize() Size of only the Expr structure +** dupedExprNodeSize() Size of Expr + space for token +** dupedExprSize() Expr + token + subtree components +** +*************************************************************************** +** +** The dupedExprStructSize() function returns two values OR-ed together: +** (1) the space required for a copy of the Expr structure only and +** (2) the EP_xxx flags that indicate what the structure size should be. +** The return values is always one of: +** +** EXPR_FULLSIZE +** EXPR_REDUCEDSIZE | EP_Reduced +** EXPR_TOKENONLYSIZE | EP_TokenOnly +** +** The size of the structure can be found by masking the return value +** of this routine with 0xfff. The flags can be found by masking the +** return value with EP_Reduced|EP_TokenOnly. +** +** Note that with flags==EXPRDUP_REDUCE, this routines works on full-size +** (unreduced) Expr objects as they or originally constructed by the parser. +** During expression analysis, extra information is computed and moved into +** later parts of the Expr object and that extra information might get chopped +** off if the expression is reduced. Note also that it does not work to +** make an EXPRDUP_REDUCE copy of a reduced expression. It is only legal +** to reduce a pristine expression tree from the parser. The implementation +** of dupedExprStructSize() contain multiple assert() statements that attempt +** to enforce this constraint. +*/ +static int dupedExprStructSize(const Expr *p, int flags){ + int nSize; + assert( flags==EXPRDUP_REDUCE || flags==0 ); /* Only one flag value allowed */ + assert( EXPR_FULLSIZE<=0xfff ); + assert( (0xfff & (EP_Reduced|EP_TokenOnly))==0 ); + if( 0==flags || ExprHasProperty(p, EP_FullSize) ){ + nSize = EXPR_FULLSIZE; + }else{ + assert( !ExprHasProperty(p, EP_TokenOnly|EP_Reduced) ); + assert( !ExprHasProperty(p, EP_OuterON) ); + assert( !ExprHasVVAProperty(p, EP_NoReduce) ); + if( p->pLeft || p->x.pList ){ + nSize = EXPR_REDUCEDSIZE | EP_Reduced; + }else{ + assert( p->pRight==0 ); + nSize = EXPR_TOKENONLYSIZE | EP_TokenOnly; + } + } + return nSize; +} + +/* +** This function returns the space in bytes required to store the copy +** of the Expr structure and a copy of the Expr.u.zToken string (if that +** string is defined.) +*/ +static int dupedExprNodeSize(const Expr *p, int flags){ + int nByte = dupedExprStructSize(p, flags) & 0xfff; + if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){ + nByte += sqlite3Strlen30NN(p->u.zToken)+1; + } + return ROUND8(nByte); +} + +/* +** Return the number of bytes required to create a duplicate of the +** expression passed as the first argument. +** +** The value returned includes space to create a copy of the Expr struct +** itself and the buffer referred to by Expr.u.zToken, if any. +** +** The return value includes space to duplicate all Expr nodes in the +** tree formed by Expr.pLeft and Expr.pRight, but not any other +** substructure such as Expr.x.pList, Expr.x.pSelect, and Expr.y.pWin. +*/ +static int dupedExprSize(const Expr *p){ + int nByte; + assert( p!=0 ); + nByte = dupedExprNodeSize(p, EXPRDUP_REDUCE); + if( p->pLeft ) nByte += dupedExprSize(p->pLeft); + if( p->pRight ) nByte += dupedExprSize(p->pRight); + assert( nByte==ROUND8(nByte) ); + return nByte; +} + +/* +** An EdupBuf is a memory allocation used to stored multiple Expr objects +** together with their Expr.zToken content. This is used to help implement +** compression while doing sqlite3ExprDup(). The top-level Expr does the +** allocation for itself and many of its decendents, then passes an instance +** of the structure down into exprDup() so that they decendents can have +** access to that memory. +*/ +typedef struct EdupBuf EdupBuf; +struct EdupBuf { + u8 *zAlloc; /* Memory space available for storage */ +#ifdef SQLITE_DEBUG + u8 *zEnd; /* First byte past the end of memory */ +#endif +}; + +/* +** This function is similar to sqlite3ExprDup(), except that if pEdupBuf +** is not NULL then it points to memory that can be used to store a copy +** of the input Expr p together with its p->u.zToken (if any). pEdupBuf +** is updated with the new buffer tail prior to returning. +*/ +static Expr *exprDup( + sqlite3 *db, /* Database connection (for memory allocation) */ + const Expr *p, /* Expr tree to be duplicated */ + int dupFlags, /* EXPRDUP_REDUCE for compression. 0 if not */ + EdupBuf *pEdupBuf /* Preallocated storage space, or NULL */ +){ + Expr *pNew; /* Value to return */ + EdupBuf sEdupBuf; /* Memory space from which to build Expr object */ + u32 staticFlag; /* EP_Static if space not obtained from malloc */ + int nToken = -1; /* Space needed for p->u.zToken. -1 means unknown */ + + assert( db!=0 ); + assert( p ); + assert( dupFlags==0 || dupFlags==EXPRDUP_REDUCE ); + assert( pEdupBuf==0 || dupFlags==EXPRDUP_REDUCE ); + + /* Figure out where to write the new Expr structure. */ + if( pEdupBuf ){ + sEdupBuf.zAlloc = pEdupBuf->zAlloc; +#ifdef SQLITE_DEBUG + sEdupBuf.zEnd = pEdupBuf->zEnd; +#endif + staticFlag = EP_Static; + assert( sEdupBuf.zAlloc!=0 ); + assert( dupFlags==EXPRDUP_REDUCE ); + }else{ + int nAlloc; + if( dupFlags ){ + nAlloc = dupedExprSize(p); + }else if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){ + nToken = sqlite3Strlen30NN(p->u.zToken)+1; + nAlloc = ROUND8(EXPR_FULLSIZE + nToken); + }else{ + nToken = 0; + nAlloc = ROUND8(EXPR_FULLSIZE); + } + assert( nAlloc==ROUND8(nAlloc) ); + sEdupBuf.zAlloc = sqlite3DbMallocRawNN(db, nAlloc); +#ifdef SQLITE_DEBUG + sEdupBuf.zEnd = sEdupBuf.zAlloc ? sEdupBuf.zAlloc+nAlloc : 0; +#endif + + staticFlag = 0; + } + pNew = (Expr *)sEdupBuf.zAlloc; + assert( EIGHT_BYTE_ALIGNMENT(pNew) ); + + if( pNew ){ + /* Set nNewSize to the size allocated for the structure pointed to + ** by pNew. This is either EXPR_FULLSIZE, EXPR_REDUCEDSIZE or + ** EXPR_TOKENONLYSIZE. nToken is set to the number of bytes consumed + ** by the copy of the p->u.zToken string (if any). + */ + const unsigned nStructSize = dupedExprStructSize(p, dupFlags); + int nNewSize = nStructSize & 0xfff; + if( nToken<0 ){ + if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){ + nToken = sqlite3Strlen30(p->u.zToken) + 1; + }else{ + nToken = 0; + } + } + if( dupFlags ){ + assert( (int)(sEdupBuf.zEnd - sEdupBuf.zAlloc) >= nNewSize+nToken ); + assert( ExprHasProperty(p, EP_Reduced)==0 ); + memcpy(sEdupBuf.zAlloc, p, nNewSize); + }else{ + u32 nSize = (u32)exprStructSize(p); + assert( (int)(sEdupBuf.zEnd - sEdupBuf.zAlloc) >= + (int)EXPR_FULLSIZE+nToken ); + memcpy(sEdupBuf.zAlloc, p, nSize); + if( nSizeflags &= ~(EP_Reduced|EP_TokenOnly|EP_Static); + pNew->flags |= nStructSize & (EP_Reduced|EP_TokenOnly); + pNew->flags |= staticFlag; + ExprClearVVAProperties(pNew); + if( dupFlags ){ + ExprSetVVAProperty(pNew, EP_Immutable); + } + + /* Copy the p->u.zToken string, if any. */ + assert( nToken>=0 ); + if( nToken>0 ){ + char *zToken = pNew->u.zToken = (char*)&sEdupBuf.zAlloc[nNewSize]; + memcpy(zToken, p->u.zToken, nToken); + nNewSize += nToken; + } + sEdupBuf.zAlloc += ROUND8(nNewSize); + + if( ((p->flags|pNew->flags)&(EP_TokenOnly|EP_Leaf))==0 ){ + + /* Fill in the pNew->x.pSelect or pNew->x.pList member. */ + if( ExprUseXSelect(p) ){ + pNew->x.pSelect = sqlite3SelectDup(db, p->x.pSelect, dupFlags); + }else{ + pNew->x.pList = sqlite3ExprListDup(db, p->x.pList, + p->op!=TK_ORDER ? dupFlags : 0); + } + +#ifndef SQLITE_OMIT_WINDOWFUNC + if( ExprHasProperty(p, EP_WinFunc) ){ + pNew->y.pWin = sqlite3WindowDup(db, pNew, p->y.pWin); + assert( ExprHasProperty(pNew, EP_WinFunc) ); + } +#endif /* SQLITE_OMIT_WINDOWFUNC */ + + /* Fill in pNew->pLeft and pNew->pRight. */ + if( dupFlags ){ + if( p->op==TK_SELECT_COLUMN ){ + pNew->pLeft = p->pLeft; + assert( p->pRight==0 + || p->pRight==p->pLeft + || ExprHasProperty(p->pLeft, EP_Subquery) ); + }else{ + pNew->pLeft = p->pLeft ? + exprDup(db, p->pLeft, EXPRDUP_REDUCE, &sEdupBuf) : 0; + } + pNew->pRight = p->pRight ? + exprDup(db, p->pRight, EXPRDUP_REDUCE, &sEdupBuf) : 0; + }else{ + if( p->op==TK_SELECT_COLUMN ){ + pNew->pLeft = p->pLeft; + assert( p->pRight==0 + || p->pRight==p->pLeft + || ExprHasProperty(p->pLeft, EP_Subquery) ); + }else{ + pNew->pLeft = sqlite3ExprDup(db, p->pLeft, 0); + } + pNew->pRight = sqlite3ExprDup(db, p->pRight, 0); + } + } + } + if( pEdupBuf ) memcpy(pEdupBuf, &sEdupBuf, sizeof(sEdupBuf)); + assert( sEdupBuf.zAlloc <= sEdupBuf.zEnd ); + return pNew; +} + +/* +** Create and return a deep copy of the object passed as the second +** argument. If an OOM condition is encountered, NULL is returned +** and the db->mallocFailed flag set. +*/ +#ifndef SQLITE_OMIT_CTE +SQLITE_PRIVATE With *sqlite3WithDup(sqlite3 *db, With *p){ + With *pRet = 0; + if( p ){ + sqlite3_int64 nByte = SZ_WITH(p->nCte); + pRet = sqlite3DbMallocZero(db, nByte); + if( pRet ){ + int i; + pRet->nCte = p->nCte; + for(i=0; inCte; i++){ + pRet->a[i].pSelect = sqlite3SelectDup(db, p->a[i].pSelect, 0); + pRet->a[i].pCols = sqlite3ExprListDup(db, p->a[i].pCols, 0); + pRet->a[i].zName = sqlite3DbStrDup(db, p->a[i].zName); + pRet->a[i].eM10d = p->a[i].eM10d; + } + } + } + return pRet; +} +#else +# define sqlite3WithDup(x,y) 0 +#endif + +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** The gatherSelectWindows() procedure and its helper routine +** gatherSelectWindowsCallback() are used to scan all the expressions +** an a newly duplicated SELECT statement and gather all of the Window +** objects found there, assembling them onto the linked list at Select->pWin. +*/ +static int gatherSelectWindowsCallback(Walker *pWalker, Expr *pExpr){ + if( pExpr->op==TK_FUNCTION && ExprHasProperty(pExpr, EP_WinFunc) ){ + Select *pSelect = pWalker->u.pSelect; + Window *pWin = pExpr->y.pWin; + assert( pWin ); + assert( IsWindowFunc(pExpr) ); + assert( pWin->ppThis==0 ); + sqlite3WindowLink(pSelect, pWin); + } + return WRC_Continue; +} +static int gatherSelectWindowsSelectCallback(Walker *pWalker, Select *p){ + return p==pWalker->u.pSelect ? WRC_Continue : WRC_Prune; +} +static void gatherSelectWindows(Select *p){ + Walker w; + w.xExprCallback = gatherSelectWindowsCallback; + w.xSelectCallback = gatherSelectWindowsSelectCallback; + w.xSelectCallback2 = 0; + w.pParse = 0; + w.u.pSelect = p; + sqlite3WalkSelect(&w, p); +} +#endif + + +/* +** The following group of routines make deep copies of expressions, +** expression lists, ID lists, and select statements. The copies can +** be deleted (by being passed to their respective ...Delete() routines) +** without effecting the originals. +** +** The expression list, ID, and source lists return by sqlite3ExprListDup(), +** sqlite3IdListDup(), and sqlite3SrcListDup() can not be further expanded +** by subsequent calls to sqlite*ListAppend() routines. +** +** Any tables that the SrcList might point to are not duplicated. +** +** The flags parameter contains a combination of the EXPRDUP_XXX flags. +** If the EXPRDUP_REDUCE flag is set, then the structure returned is a +** truncated version of the usual Expr structure that will be stored as +** part of the in-memory representation of the database schema. +*/ +SQLITE_PRIVATE Expr *sqlite3ExprDup(sqlite3 *db, const Expr *p, int flags){ + assert( flags==0 || flags==EXPRDUP_REDUCE ); + return p ? exprDup(db, p, flags, 0) : 0; +} +SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3 *db, const ExprList *p, int flags){ + ExprList *pNew; + struct ExprList_item *pItem; + const struct ExprList_item *pOldItem; + int i; + Expr *pPriorSelectColOld = 0; + Expr *pPriorSelectColNew = 0; + assert( db!=0 ); + if( p==0 ) return 0; + pNew = sqlite3DbMallocRawNN(db, sqlite3DbMallocSize(db, p)); + if( pNew==0 ) return 0; + pNew->nExpr = p->nExpr; + pNew->nAlloc = p->nAlloc; + pItem = pNew->a; + pOldItem = p->a; + for(i=0; inExpr; i++, pItem++, pOldItem++){ + Expr *pOldExpr = pOldItem->pExpr; + Expr *pNewExpr; + pItem->pExpr = sqlite3ExprDup(db, pOldExpr, flags); + if( pOldExpr + && pOldExpr->op==TK_SELECT_COLUMN + && (pNewExpr = pItem->pExpr)!=0 + ){ + if( pNewExpr->pRight ){ + pPriorSelectColOld = pOldExpr->pRight; + pPriorSelectColNew = pNewExpr->pRight; + pNewExpr->pLeft = pNewExpr->pRight; + }else{ + if( pOldExpr->pLeft!=pPriorSelectColOld ){ + pPriorSelectColOld = pOldExpr->pLeft; + pPriorSelectColNew = sqlite3ExprDup(db, pPriorSelectColOld, flags); + pNewExpr->pRight = pPriorSelectColNew; + } + pNewExpr->pLeft = pPriorSelectColNew; + } + } + pItem->zEName = sqlite3DbStrDup(db, pOldItem->zEName); + pItem->fg = pOldItem->fg; + pItem->u = pOldItem->u; + } + return pNew; +} + +/* +** If cursors, triggers, views and subqueries are all omitted from +** the build, then none of the following routines, except for +** sqlite3SelectDup(), can be called. sqlite3SelectDup() is sometimes +** called with a NULL argument. +*/ +#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER) \ + || !defined(SQLITE_OMIT_SUBQUERY) +SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3 *db, const SrcList *p, int flags){ + SrcList *pNew; + int i; + assert( db!=0 ); + if( p==0 ) return 0; + pNew = sqlite3DbMallocRawNN(db, SZ_SRCLIST(p->nSrc) ); + if( pNew==0 ) return 0; + pNew->nSrc = pNew->nAlloc = p->nSrc; + for(i=0; inSrc; i++){ + SrcItem *pNewItem = &pNew->a[i]; + const SrcItem *pOldItem = &p->a[i]; + Table *pTab; + pNewItem->fg = pOldItem->fg; + if( pOldItem->fg.isSubquery ){ + Subquery *pNewSubq = sqlite3DbMallocRaw(db, sizeof(Subquery)); + if( pNewSubq==0 ){ + assert( db->mallocFailed ); + pNewItem->fg.isSubquery = 0; + }else{ + memcpy(pNewSubq, pOldItem->u4.pSubq, sizeof(*pNewSubq)); + pNewSubq->pSelect = sqlite3SelectDup(db, pNewSubq->pSelect, flags); + if( pNewSubq->pSelect==0 ){ + sqlite3DbFree(db, pNewSubq); + pNewSubq = 0; + pNewItem->fg.isSubquery = 0; + } + } + pNewItem->u4.pSubq = pNewSubq; + }else if( pOldItem->fg.fixedSchema ){ + pNewItem->u4.pSchema = pOldItem->u4.pSchema; + }else{ + pNewItem->u4.zDatabase = sqlite3DbStrDup(db, pOldItem->u4.zDatabase); + } + pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName); + pNewItem->zAlias = sqlite3DbStrDup(db, pOldItem->zAlias); + pNewItem->iCursor = pOldItem->iCursor; + if( pNewItem->fg.isIndexedBy ){ + pNewItem->u1.zIndexedBy = sqlite3DbStrDup(db, pOldItem->u1.zIndexedBy); + }else if( pNewItem->fg.isTabFunc ){ + pNewItem->u1.pFuncArg = + sqlite3ExprListDup(db, pOldItem->u1.pFuncArg, flags); + }else{ + pNewItem->u1.nRow = pOldItem->u1.nRow; + } + pNewItem->u2 = pOldItem->u2; + if( pNewItem->fg.isCte ){ + pNewItem->u2.pCteUse->nUse++; + } + pTab = pNewItem->pSTab = pOldItem->pSTab; + if( pTab ){ + pTab->nTabRef++; + } + if( pOldItem->fg.isUsing ){ + assert( pNewItem->fg.isUsing ); + pNewItem->u3.pUsing = sqlite3IdListDup(db, pOldItem->u3.pUsing); + }else{ + pNewItem->u3.pOn = sqlite3ExprDup(db, pOldItem->u3.pOn, flags); + } + pNewItem->colUsed = pOldItem->colUsed; + } + return pNew; +} +SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3 *db, const IdList *p){ + IdList *pNew; + int i; + assert( db!=0 ); + if( p==0 ) return 0; + pNew = sqlite3DbMallocRawNN(db, SZ_IDLIST(p->nId)); + if( pNew==0 ) return 0; + pNew->nId = p->nId; + for(i=0; inId; i++){ + struct IdList_item *pNewItem = &pNew->a[i]; + const struct IdList_item *pOldItem = &p->a[i]; + pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName); + } + return pNew; +} +SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, const Select *pDup, int flags){ + Select *pRet = 0; + Select *pNext = 0; + Select **pp = &pRet; + const Select *p; + + assert( db!=0 ); + for(p=pDup; p; p=p->pPrior){ + Select *pNew = sqlite3DbMallocRawNN(db, sizeof(*p) ); + if( pNew==0 ) break; + pNew->pEList = sqlite3ExprListDup(db, p->pEList, flags); + pNew->pSrc = sqlite3SrcListDup(db, p->pSrc, flags); + pNew->pWhere = sqlite3ExprDup(db, p->pWhere, flags); + pNew->pGroupBy = sqlite3ExprListDup(db, p->pGroupBy, flags); + pNew->pHaving = sqlite3ExprDup(db, p->pHaving, flags); + pNew->pOrderBy = sqlite3ExprListDup(db, p->pOrderBy, flags); + pNew->op = p->op; + pNew->pNext = pNext; + pNew->pPrior = 0; + pNew->pLimit = sqlite3ExprDup(db, p->pLimit, flags); + pNew->iLimit = 0; + pNew->iOffset = 0; + pNew->selFlags = p->selFlags & ~(u32)SF_UsesEphemeral; + pNew->addrOpenEphm[0] = -1; + pNew->addrOpenEphm[1] = -1; + pNew->nSelectRow = p->nSelectRow; + pNew->pWith = sqlite3WithDup(db, p->pWith); +#ifndef SQLITE_OMIT_WINDOWFUNC + pNew->pWin = 0; + pNew->pWinDefn = sqlite3WindowListDup(db, p->pWinDefn); + if( p->pWin && db->mallocFailed==0 ) gatherSelectWindows(pNew); +#endif + pNew->selId = p->selId; + if( db->mallocFailed ){ + /* Any prior OOM might have left the Select object incomplete. + ** Delete the whole thing rather than allow an incomplete Select + ** to be used by the code generator. */ + pNew->pNext = 0; + sqlite3SelectDelete(db, pNew); + break; + } + *pp = pNew; + pp = &pNew->pPrior; + pNext = pNew; + } + return pRet; +} +#else +SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, const Select *p, int flags){ + assert( p==0 ); + return 0; +} +#endif + + +/* +** Add a new element to the end of an expression list. If pList is +** initially NULL, then create a new expression list. +** +** The pList argument must be either NULL or a pointer to an ExprList +** obtained from a prior call to sqlite3ExprListAppend(). +** +** If a memory allocation error occurs, the entire list is freed and +** NULL is returned. If non-NULL is returned, then it is guaranteed +** that the new entry was successfully appended. +*/ +static const struct ExprList_item zeroItem = {0}; +SQLITE_PRIVATE SQLITE_NOINLINE ExprList *sqlite3ExprListAppendNew( + sqlite3 *db, /* Database handle. Used for memory allocation */ + Expr *pExpr /* Expression to be appended. Might be NULL */ +){ + struct ExprList_item *pItem; + ExprList *pList; + + pList = sqlite3DbMallocRawNN(db, SZ_EXPRLIST(4)); + if( pList==0 ){ + sqlite3ExprDelete(db, pExpr); + return 0; + } + pList->nAlloc = 4; + pList->nExpr = 1; + pItem = &pList->a[0]; + *pItem = zeroItem; + pItem->pExpr = pExpr; + return pList; +} +SQLITE_PRIVATE SQLITE_NOINLINE ExprList *sqlite3ExprListAppendGrow( + sqlite3 *db, /* Database handle. Used for memory allocation */ + ExprList *pList, /* List to which to append. Might be NULL */ + Expr *pExpr /* Expression to be appended. Might be NULL */ +){ + struct ExprList_item *pItem; + ExprList *pNew; + pList->nAlloc *= 2; + pNew = sqlite3DbRealloc(db, pList, SZ_EXPRLIST(pList->nAlloc)); + if( pNew==0 ){ + sqlite3ExprListDelete(db, pList); + sqlite3ExprDelete(db, pExpr); + return 0; + }else{ + pList = pNew; + } + pItem = &pList->a[pList->nExpr++]; + *pItem = zeroItem; + pItem->pExpr = pExpr; + return pList; +} +SQLITE_PRIVATE ExprList *sqlite3ExprListAppend( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* List to which to append. Might be NULL */ + Expr *pExpr /* Expression to be appended. Might be NULL */ +){ + struct ExprList_item *pItem; + if( pList==0 ){ + return sqlite3ExprListAppendNew(pParse->db,pExpr); + } + if( pList->nAllocnExpr+1 ){ + return sqlite3ExprListAppendGrow(pParse->db,pList,pExpr); + } + pItem = &pList->a[pList->nExpr++]; + *pItem = zeroItem; + pItem->pExpr = pExpr; + return pList; +} + +/* +** pColumns and pExpr form a vector assignment which is part of the SET +** clause of an UPDATE statement. Like this: +** +** (a,b,c) = (expr1,expr2,expr3) +** Or: (a,b,c) = (SELECT x,y,z FROM ....) +** +** For each term of the vector assignment, append new entries to the +** expression list pList. In the case of a subquery on the RHS, append +** TK_SELECT_COLUMN expressions. +*/ +SQLITE_PRIVATE ExprList *sqlite3ExprListAppendVector( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* List to which to append. Might be NULL */ + IdList *pColumns, /* List of names of LHS of the assignment */ + Expr *pExpr /* Vector expression to be appended. Might be NULL */ +){ + sqlite3 *db = pParse->db; + int n; + int i; + int iFirst = pList ? pList->nExpr : 0; + /* pColumns can only be NULL due to an OOM but an OOM will cause an + ** exit prior to this routine being invoked */ + if( NEVER(pColumns==0) ) goto vector_append_error; + if( pExpr==0 ) goto vector_append_error; + + /* If the RHS is a vector, then we can immediately check to see that + ** the size of the RHS and LHS match. But if the RHS is a SELECT, + ** wildcards ("*") in the result set of the SELECT must be expanded before + ** we can do the size check, so defer the size check until code generation. + */ + if( pExpr->op!=TK_SELECT && pColumns->nId!=(n=sqlite3ExprVectorSize(pExpr)) ){ + sqlite3ErrorMsg(pParse, "%d columns assigned %d values", + pColumns->nId, n); + goto vector_append_error; + } + + for(i=0; inId; i++){ + Expr *pSubExpr = sqlite3ExprForVectorField(pParse, pExpr, i, pColumns->nId); + assert( pSubExpr!=0 || db->mallocFailed ); + if( pSubExpr==0 ) continue; + pList = sqlite3ExprListAppend(pParse, pList, pSubExpr); + if( pList ){ + assert( pList->nExpr==iFirst+i+1 ); + pList->a[pList->nExpr-1].zEName = pColumns->a[i].zName; + pColumns->a[i].zName = 0; + } + } + + if( !db->mallocFailed && pExpr->op==TK_SELECT && ALWAYS(pList!=0) ){ + Expr *pFirst = pList->a[iFirst].pExpr; + assert( pFirst!=0 ); + assert( pFirst->op==TK_SELECT_COLUMN ); + + /* Store the SELECT statement in pRight so it will be deleted when + ** sqlite3ExprListDelete() is called */ + pFirst->pRight = pExpr; + pExpr = 0; + + /* Remember the size of the LHS in iTable so that we can check that + ** the RHS and LHS sizes match during code generation. */ + pFirst->iTable = pColumns->nId; + } + +vector_append_error: + sqlite3ExprUnmapAndDelete(pParse, pExpr); + sqlite3IdListDelete(db, pColumns); + return pList; +} + +/* +** Set the sort order for the last element on the given ExprList. +*/ +SQLITE_PRIVATE void sqlite3ExprListSetSortOrder(ExprList *p, int iSortOrder, int eNulls){ + struct ExprList_item *pItem; + if( p==0 ) return; + assert( p->nExpr>0 ); + + assert( SQLITE_SO_UNDEFINED<0 && SQLITE_SO_ASC==0 && SQLITE_SO_DESC>0 ); + assert( iSortOrder==SQLITE_SO_UNDEFINED + || iSortOrder==SQLITE_SO_ASC + || iSortOrder==SQLITE_SO_DESC + ); + assert( eNulls==SQLITE_SO_UNDEFINED + || eNulls==SQLITE_SO_ASC + || eNulls==SQLITE_SO_DESC + ); + + pItem = &p->a[p->nExpr-1]; + assert( pItem->fg.bNulls==0 ); + if( iSortOrder==SQLITE_SO_UNDEFINED ){ + iSortOrder = SQLITE_SO_ASC; + } + pItem->fg.sortFlags = (u8)iSortOrder; + + if( eNulls!=SQLITE_SO_UNDEFINED ){ + pItem->fg.bNulls = 1; + if( iSortOrder!=eNulls ){ + pItem->fg.sortFlags |= KEYINFO_ORDER_BIGNULL; + } + } +} + +/* +** Set the ExprList.a[].zEName element of the most recently added item +** on the expression list. +** +** pList might be NULL following an OOM error. But pName should never be +** NULL. If a memory allocation fails, the pParse->db->mallocFailed flag +** is set. +*/ +SQLITE_PRIVATE void sqlite3ExprListSetName( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* List to which to add the span. */ + const Token *pName, /* Name to be added */ + int dequote /* True to cause the name to be dequoted */ +){ + assert( pList!=0 || pParse->db->mallocFailed!=0 ); + assert( pParse->eParseMode!=PARSE_MODE_UNMAP || dequote==0 ); + if( pList ){ + struct ExprList_item *pItem; + assert( pList->nExpr>0 ); + pItem = &pList->a[pList->nExpr-1]; + assert( pItem->zEName==0 ); + assert( pItem->fg.eEName==ENAME_NAME ); + pItem->zEName = sqlite3DbStrNDup(pParse->db, pName->z, pName->n); + if( dequote ){ + /* If dequote==0, then pName->z does not point to part of a DDL + ** statement handled by the parser. And so no token need be added + ** to the token-map. */ + sqlite3Dequote(pItem->zEName); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, (const void*)pItem->zEName, pName); + } + } + } +} + +/* +** Set the ExprList.a[].zSpan element of the most recently added item +** on the expression list. +** +** pList might be NULL following an OOM error. But pSpan should never be +** NULL. If a memory allocation fails, the pParse->db->mallocFailed flag +** is set. +*/ +SQLITE_PRIVATE void sqlite3ExprListSetSpan( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* List to which to add the span. */ + const char *zStart, /* Start of the span */ + const char *zEnd /* End of the span */ +){ + sqlite3 *db = pParse->db; + assert( pList!=0 || db->mallocFailed!=0 ); + if( pList ){ + struct ExprList_item *pItem = &pList->a[pList->nExpr-1]; + assert( pList->nExpr>0 ); + if( pItem->zEName==0 ){ + pItem->zEName = sqlite3DbSpanDup(db, zStart, zEnd); + pItem->fg.eEName = ENAME_SPAN; + } + } +} + +/* +** If the expression list pEList contains more than iLimit elements, +** leave an error message in pParse. +*/ +SQLITE_PRIVATE void sqlite3ExprListCheckLength( + Parse *pParse, + ExprList *pEList, + const char *zObject +){ + int mx = pParse->db->aLimit[SQLITE_LIMIT_COLUMN]; + testcase( pEList && pEList->nExpr==mx ); + testcase( pEList && pEList->nExpr==mx+1 ); + if( pEList && pEList->nExpr>mx ){ + sqlite3ErrorMsg(pParse, "too many columns in %s", zObject); + } +} + +/* +** Delete an entire expression list. +*/ +static SQLITE_NOINLINE void exprListDeleteNN(sqlite3 *db, ExprList *pList){ + int i = pList->nExpr; + struct ExprList_item *pItem = pList->a; + assert( pList->nExpr>0 ); + assert( db!=0 ); + do{ + sqlite3ExprDelete(db, pItem->pExpr); + if( pItem->zEName ) sqlite3DbNNFreeNN(db, pItem->zEName); + pItem++; + }while( --i>0 ); + sqlite3DbNNFreeNN(db, pList); +} +SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){ + if( pList ) exprListDeleteNN(db, pList); +} +SQLITE_PRIVATE void sqlite3ExprListDeleteGeneric(sqlite3 *db, void *pList){ + if( ALWAYS(pList) ) exprListDeleteNN(db, (ExprList*)pList); +} + +/* +** Return the bitwise-OR of all Expr.flags fields in the given +** ExprList. +*/ +SQLITE_PRIVATE u32 sqlite3ExprListFlags(const ExprList *pList){ + int i; + u32 m = 0; + assert( pList!=0 ); + for(i=0; inExpr; i++){ + Expr *pExpr = pList->a[i].pExpr; + assert( pExpr!=0 ); + m |= pExpr->flags; + } + return m; +} + +/* +** This is a SELECT-node callback for the expression walker that +** always "fails". By "fail" in this case, we mean set +** pWalker->eCode to zero and abort. +** +** This callback is used by multiple expression walkers. +*/ +SQLITE_PRIVATE int sqlite3SelectWalkFail(Walker *pWalker, Select *NotUsed){ + UNUSED_PARAMETER(NotUsed); + pWalker->eCode = 0; + return WRC_Abort; +} + +/* +** Check the input string to see if it is "true" or "false" (in any case). +** +** If the string is.... Return +** "true" EP_IsTrue +** "false" EP_IsFalse +** anything else 0 +*/ +SQLITE_PRIVATE u32 sqlite3IsTrueOrFalse(const char *zIn){ + if( sqlite3StrICmp(zIn, "true")==0 ) return EP_IsTrue; + if( sqlite3StrICmp(zIn, "false")==0 ) return EP_IsFalse; + return 0; +} + + +/* +** If the input expression is an ID with the name "true" or "false" +** then convert it into an TK_TRUEFALSE term. Return non-zero if +** the conversion happened, and zero if the expression is unaltered. +*/ +SQLITE_PRIVATE int sqlite3ExprIdToTrueFalse(Expr *pExpr){ + u32 v; + assert( pExpr->op==TK_ID || pExpr->op==TK_STRING ); + if( !ExprHasProperty(pExpr, EP_Quoted|EP_IntValue) + && (v = sqlite3IsTrueOrFalse(pExpr->u.zToken))!=0 + ){ + pExpr->op = TK_TRUEFALSE; + ExprSetProperty(pExpr, v); + return 1; + } + return 0; +} + +/* +** The argument must be a TK_TRUEFALSE Expr node. Return 1 if it is TRUE +** and 0 if it is FALSE. +*/ +SQLITE_PRIVATE int sqlite3ExprTruthValue(const Expr *pExpr){ + pExpr = sqlite3ExprSkipCollateAndLikely((Expr*)pExpr); + assert( pExpr->op==TK_TRUEFALSE ); + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + assert( sqlite3StrICmp(pExpr->u.zToken,"true")==0 + || sqlite3StrICmp(pExpr->u.zToken,"false")==0 ); + return pExpr->u.zToken[4]==0; +} + +/* +** If pExpr is an AND or OR expression, try to simplify it by eliminating +** terms that are always true or false. Return the simplified expression. +** Or return the original expression if no simplification is possible. +** +** Examples: +** +** (x<10) AND true => (x<10) +** (x<10) AND false => false +** (x<10) AND (y=22 OR false) => (x<10) AND (y=22) +** (x<10) AND (y=22 OR true) => (x<10) +** (y=22) OR true => true +*/ +SQLITE_PRIVATE Expr *sqlite3ExprSimplifiedAndOr(Expr *pExpr){ + assert( pExpr!=0 ); + if( pExpr->op==TK_AND || pExpr->op==TK_OR ){ + Expr *pRight = sqlite3ExprSimplifiedAndOr(pExpr->pRight); + Expr *pLeft = sqlite3ExprSimplifiedAndOr(pExpr->pLeft); + if( ExprAlwaysTrue(pLeft) || ExprAlwaysFalse(pRight) ){ + pExpr = pExpr->op==TK_AND ? pRight : pLeft; + }else if( ExprAlwaysTrue(pRight) || ExprAlwaysFalse(pLeft) ){ + pExpr = pExpr->op==TK_AND ? pLeft : pRight; + } + } + return pExpr; +} + +/* +** Return true if it might be advantageous to compute the right operand +** of expression pExpr first, before the left operand. +** +** Normally the left operand is computed before the right operand. But if +** the left operand contains a subquery and the right does not, then it +** might be more efficient to compute the right operand first. +*/ +static int exprEvalRhsFirst(Expr *pExpr){ + if( ExprHasProperty(pExpr->pLeft, EP_Subquery) + && !ExprHasProperty(pExpr->pRight, EP_Subquery) + ){ + return 1; + }else{ + return 0; + } +} + +/* +** Compute the two operands of a binary operator. +** +** If either operand contains a subquery, then the code strives to +** compute the operand containing the subquery second. If the other +** operand evalutes to NULL, then a jump is made. The address of the +** IsNull operand that does this jump is returned. The caller can use +** this to optimize the computation so as to avoid doing the potentially +** expensive subquery. +** +** If no optimization opportunities exist, return 0. +*/ +static int exprComputeOperands( + Parse *pParse, /* Parsing context */ + Expr *pExpr, /* The comparison expression */ + int *pR1, /* OUT: Register holding the left operand */ + int *pR2, /* OUT: Register holding the right operand */ + int *pFree1, /* OUT: Temp register to free if not zero */ + int *pFree2 /* OUT: Another temp register to free if not zero */ +){ + int addrIsNull; + int r1, r2; + Vdbe *v = pParse->pVdbe; + + assert( v!=0 ); + /* + ** If the left operand contains a (possibly expensive) subquery and the + ** right operand does not and the right operation might be NULL, + ** then compute the right operand first and do an IsNull jump if the + ** right operand evalutes to NULL. + */ + if( exprEvalRhsFirst(pExpr) && sqlite3ExprCanBeNull(pExpr->pRight) ){ + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, pFree2); + addrIsNull = sqlite3VdbeAddOp1(v, OP_IsNull, r2); + VdbeComment((v, "skip left operand")); + VdbeCoverage(v); + }else{ + r2 = 0; /* Silence a false-positive uninit-var warning in MSVC */ + addrIsNull = 0; + } + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, pFree1); + if( addrIsNull==0 ){ + /* + ** If the right operand contains a subquery and the left operand does not + ** and the left operand might be NULL, then do an IsNull check + ** check on the left operand before computing the right operand. + */ + if( ExprHasProperty(pExpr->pRight, EP_Subquery) + && sqlite3ExprCanBeNull(pExpr->pLeft) + ){ + addrIsNull = sqlite3VdbeAddOp1(v, OP_IsNull, r1); + VdbeComment((v, "skip right operand")); + VdbeCoverage(v); + } + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, pFree2); + } + *pR1 = r1; + *pR2 = r2; + return addrIsNull; +} + +/* +** pExpr is a TK_FUNCTION node. Try to determine whether or not the +** function is a constant function. A function is constant if all of +** the following are true: +** +** (1) It is a scalar function (not an aggregate or window function) +** (2) It has either the SQLITE_FUNC_CONSTANT or SQLITE_FUNC_SLOCHNG +** property. +** (3) All of its arguments are constants +** +** This routine sets pWalker->eCode to 0 if pExpr is not a constant. +** It makes no changes to pWalker->eCode if pExpr is constant. In +** every case, it returns WRC_Abort. +** +** Called as a service subroutine from exprNodeIsConstant(). +*/ +static SQLITE_NOINLINE int exprNodeIsConstantFunction( + Walker *pWalker, + Expr *pExpr +){ + int n; /* Number of arguments */ + ExprList *pList; /* List of arguments */ + FuncDef *pDef; /* The function */ + sqlite3 *db; /* The database */ + + assert( pExpr->op==TK_FUNCTION ); + if( ExprHasProperty(pExpr, EP_TokenOnly) + || (pList = pExpr->x.pList)==0 + ){; + n = 0; + }else{ + n = pList->nExpr; + sqlite3WalkExprList(pWalker, pList); + if( pWalker->eCode==0 ) return WRC_Abort; + } + db = pWalker->pParse->db; + pDef = sqlite3FindFunction(db, pExpr->u.zToken, n, ENC(db), 0); + if( pDef==0 + || pDef->xFinalize!=0 + || (pDef->funcFlags & (SQLITE_FUNC_CONSTANT|SQLITE_FUNC_SLOCHNG))==0 + || ExprHasProperty(pExpr, EP_WinFunc) + ){ + pWalker->eCode = 0; + return WRC_Abort; + } + return WRC_Prune; +} + + +/* +** These routines are Walker callbacks used to check expressions to +** see if they are "constant" for some definition of constant. The +** Walker.eCode value determines the type of "constant" we are looking +** for. +** +** These callback routines are used to implement the following: +** +** sqlite3ExprIsConstant() pWalker->eCode==1 +** sqlite3ExprIsConstantNotJoin() pWalker->eCode==2 +** sqlite3ExprIsTableConstant() pWalker->eCode==3 +** sqlite3ExprIsConstantOrFunction() pWalker->eCode==4 or 5 +** +** In all cases, the callbacks set Walker.eCode=0 and abort if the expression +** is found to not be a constant. +** +** The sqlite3ExprIsConstantOrFunction() is used for evaluating DEFAULT +** expressions in a CREATE TABLE statement. The Walker.eCode value is 5 +** when parsing an existing schema out of the sqlite_schema table and 4 +** when processing a new CREATE TABLE statement. A bound parameter raises +** an error for new statements, but is silently converted +** to NULL for existing schemas. This allows sqlite_schema tables that +** contain a bound parameter because they were generated by older versions +** of SQLite to be parsed by newer versions of SQLite without raising a +** malformed schema error. +*/ +static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){ + assert( pWalker->eCode>0 ); + + /* If pWalker->eCode is 2 then any term of the expression that comes from + ** the ON or USING clauses of an outer join disqualifies the expression + ** from being considered constant. */ + if( pWalker->eCode==2 && ExprHasProperty(pExpr, EP_OuterON) ){ + pWalker->eCode = 0; + return WRC_Abort; + } + + switch( pExpr->op ){ + /* Consider functions to be constant if all their arguments are constant + ** and either pWalker->eCode==4 or 5 or the function has the + ** SQLITE_FUNC_CONST flag. */ + case TK_FUNCTION: + if( (pWalker->eCode>=4 || ExprHasProperty(pExpr,EP_ConstFunc)) + && !ExprHasProperty(pExpr, EP_WinFunc) + ){ + if( pWalker->eCode==5 ) ExprSetProperty(pExpr, EP_FromDDL); + return WRC_Continue; + }else if( pWalker->pParse ){ + return exprNodeIsConstantFunction(pWalker, pExpr); + }else{ + pWalker->eCode = 0; + return WRC_Abort; + } + case TK_ID: + /* Convert "true" or "false" in a DEFAULT clause into the + ** appropriate TK_TRUEFALSE operator */ + if( sqlite3ExprIdToTrueFalse(pExpr) ){ + return WRC_Prune; + } + /* no break */ deliberate_fall_through + case TK_COLUMN: + case TK_AGG_FUNCTION: + case TK_AGG_COLUMN: + testcase( pExpr->op==TK_ID ); + testcase( pExpr->op==TK_COLUMN ); + testcase( pExpr->op==TK_AGG_FUNCTION ); + testcase( pExpr->op==TK_AGG_COLUMN ); + if( ExprHasProperty(pExpr, EP_FixedCol) && pWalker->eCode!=2 ){ + return WRC_Continue; + } + if( pWalker->eCode==3 && pExpr->iTable==pWalker->u.iCur ){ + return WRC_Continue; + } + /* no break */ deliberate_fall_through + case TK_IF_NULL_ROW: + case TK_REGISTER: + case TK_DOT: + case TK_RAISE: + testcase( pExpr->op==TK_REGISTER ); + testcase( pExpr->op==TK_IF_NULL_ROW ); + testcase( pExpr->op==TK_DOT ); + testcase( pExpr->op==TK_RAISE ); + pWalker->eCode = 0; + return WRC_Abort; + case TK_VARIABLE: + if( pWalker->eCode==5 ){ + /* Silently convert bound parameters that appear inside of CREATE + ** statements into a NULL when parsing the CREATE statement text out + ** of the sqlite_schema table */ + pExpr->op = TK_NULL; + }else if( pWalker->eCode==4 ){ + /* A bound parameter in a CREATE statement that originates from + ** sqlite3_prepare() causes an error */ + pWalker->eCode = 0; + return WRC_Abort; + } + /* no break */ deliberate_fall_through + default: + testcase( pExpr->op==TK_SELECT ); /* sqlite3SelectWalkFail() disallows */ + testcase( pExpr->op==TK_EXISTS ); /* sqlite3SelectWalkFail() disallows */ + return WRC_Continue; + } +} +static int exprIsConst(Parse *pParse, Expr *p, int initFlag){ + Walker w; + w.eCode = initFlag; + w.pParse = pParse; + w.xExprCallback = exprNodeIsConstant; + w.xSelectCallback = sqlite3SelectWalkFail; +#ifdef SQLITE_DEBUG + w.xSelectCallback2 = sqlite3SelectWalkAssert2; +#endif + sqlite3WalkExpr(&w, p); + return w.eCode; +} + +/* +** Walk an expression tree. Return non-zero if the expression is constant +** and 0 if it involves variables or function calls. +** +** For the purposes of this function, a double-quoted string (ex: "abc") +** is considered a variable but a single-quoted string (ex: 'abc') is +** a constant. +** +** The pParse parameter may be NULL. But if it is NULL, there is no way +** to determine if function calls are constant or not, and hence all +** function calls will be considered to be non-constant. If pParse is +** not NULL, then a function call might be constant, depending on the +** function and on its parameters. +*/ +SQLITE_PRIVATE int sqlite3ExprIsConstant(Parse *pParse, Expr *p){ + return exprIsConst(pParse, p, 1); +} + +/* +** Walk an expression tree. Return non-zero if +** +** (1) the expression is constant, and +** (2) the expression does originate in the ON or USING clause +** of a LEFT JOIN, and +** (3) the expression does not contain any EP_FixedCol TK_COLUMN +** operands created by the constant propagation optimization. +** +** When this routine returns true, it indicates that the expression +** can be added to the pParse->pConstExpr list and evaluated once when +** the prepared statement starts up. See sqlite3ExprCodeRunJustOnce(). +*/ +static int sqlite3ExprIsConstantNotJoin(Parse *pParse, Expr *p){ + return exprIsConst(pParse, p, 2); +} + +/* +** This routine examines sub-SELECT statements as an expression is being +** walked as part of sqlite3ExprIsTableConstant(). Sub-SELECTs are considered +** constant as long as they are uncorrelated - meaning that they do not +** contain any terms from outer contexts. +*/ +static int exprSelectWalkTableConstant(Walker *pWalker, Select *pSelect){ + assert( pSelect!=0 ); + assert( pWalker->eCode==3 || pWalker->eCode==0 ); + if( (pSelect->selFlags & SF_Correlated)!=0 ){ + pWalker->eCode = 0; + return WRC_Abort; + } + return WRC_Prune; +} + +/* +** Walk an expression tree. Return non-zero if the expression is constant +** for any single row of the table with cursor iCur. In other words, the +** expression must not refer to any non-deterministic function nor any +** table other than iCur. +** +** Consider uncorrelated subqueries to be constants if the bAllowSubq +** parameter is true. +*/ +static int sqlite3ExprIsTableConstant(Expr *p, int iCur, int bAllowSubq){ + Walker w; + w.eCode = 3; + w.pParse = 0; + w.xExprCallback = exprNodeIsConstant; + if( bAllowSubq ){ + w.xSelectCallback = exprSelectWalkTableConstant; + }else{ + w.xSelectCallback = sqlite3SelectWalkFail; +#ifdef SQLITE_DEBUG + w.xSelectCallback2 = sqlite3SelectWalkAssert2; +#endif + } + w.u.iCur = iCur; + sqlite3WalkExpr(&w, p); + return w.eCode; +} + +/* +** Check pExpr to see if it is an constraint on the single data source +** pSrc = &pSrcList->a[iSrc]. In other words, check to see if pExpr +** constrains pSrc but does not depend on any other tables or data +** sources anywhere else in the query. Return true (non-zero) if pExpr +** is a constraint on pSrc only. +** +** This is an optimization. False negatives will perhaps cause slower +** queries, but false positives will yield incorrect answers. So when in +** doubt, return 0. +** +** To be an single-source constraint, the following must be true: +** +** (1) pExpr cannot refer to any table other than pSrc->iCursor. +** +** (2a) pExpr cannot use subqueries unless the bAllowSubq parameter is +** true and the subquery is non-correlated +** +** (2b) pExpr cannot use non-deterministic functions. +** +** (3) pSrc cannot be part of the left operand for a RIGHT JOIN. +** (Is there some way to relax this constraint?) +** +** (4) If pSrc is the right operand of a LEFT JOIN, then... +** (4a) pExpr must come from an ON clause.. +** (4b) and specifically the ON clause associated with the LEFT JOIN. +** +** (5) If pSrc is the right operand of a LEFT JOIN or the left +** operand of a RIGHT JOIN, then pExpr must be from the WHERE +** clause, not an ON clause. +** +** (6) Either: +** +** (6a) pExpr does not originate in an ON or USING clause, or +** +** (6b) The ON or USING clause from which pExpr is derived is +** not to the left of a RIGHT JOIN (or FULL JOIN). +** +** Without this restriction, accepting pExpr as a single-table +** constraint might move the the ON/USING filter expression +** from the left side of a RIGHT JOIN over to the right side, +** which leads to incorrect answers. See also restriction (9) +** on push-down. +*/ +SQLITE_PRIVATE int sqlite3ExprIsSingleTableConstraint( + Expr *pExpr, /* The constraint */ + const SrcList *pSrcList, /* Complete FROM clause */ + int iSrc, /* Which element of pSrcList to use */ + int bAllowSubq /* Allow non-correlated subqueries */ +){ + const SrcItem *pSrc = &pSrcList->a[iSrc]; + if( pSrc->fg.jointype & JT_LTORJ ){ + return 0; /* rule (3) */ + } + if( pSrc->fg.jointype & JT_LEFT ){ + if( !ExprHasProperty(pExpr, EP_OuterON) ) return 0; /* rule (4a) */ + if( pExpr->w.iJoin!=pSrc->iCursor ) return 0; /* rule (4b) */ + }else{ + if( ExprHasProperty(pExpr, EP_OuterON) ) return 0; /* rule (5) */ + } + if( ExprHasProperty(pExpr, EP_OuterON|EP_InnerON) /* (6a) */ + && (pSrcList->a[0].fg.jointype & JT_LTORJ)!=0 /* Fast pre-test of (6b) */ + ){ + int jj; + for(jj=0; jjw.iJoin==pSrcList->a[jj].iCursor ){ + if( (pSrcList->a[jj].fg.jointype & JT_LTORJ)!=0 ){ + return 0; /* restriction (6) */ + } + break; + } + } + } + /* Rules (1), (2a), and (2b) handled by the following: */ + return sqlite3ExprIsTableConstant(pExpr, pSrc->iCursor, bAllowSubq); +} + + +/* +** sqlite3WalkExpr() callback used by sqlite3ExprIsConstantOrGroupBy(). +*/ +static int exprNodeIsConstantOrGroupBy(Walker *pWalker, Expr *pExpr){ + ExprList *pGroupBy = pWalker->u.pGroupBy; + int i; + + /* Check if pExpr is identical to any GROUP BY term. If so, consider + ** it constant. */ + for(i=0; inExpr; i++){ + Expr *p = pGroupBy->a[i].pExpr; + if( sqlite3ExprCompare(0, pExpr, p, -1)<2 ){ + CollSeq *pColl = sqlite3ExprNNCollSeq(pWalker->pParse, p); + if( sqlite3IsBinary(pColl) ){ + return WRC_Prune; + } + } + } + + /* Check if pExpr is a sub-select. If so, consider it variable. */ + if( ExprUseXSelect(pExpr) ){ + pWalker->eCode = 0; + return WRC_Abort; + } + + return exprNodeIsConstant(pWalker, pExpr); +} + +/* +** Walk the expression tree passed as the first argument. Return non-zero +** if the expression consists entirely of constants or copies of terms +** in pGroupBy that sort with the BINARY collation sequence. +** +** This routine is used to determine if a term of the HAVING clause can +** be promoted into the WHERE clause. In order for such a promotion to work, +** the value of the HAVING clause term must be the same for all members of +** a "group". The requirement that the GROUP BY term must be BINARY +** assumes that no other collating sequence will have a finer-grained +** grouping than binary. In other words (A=B COLLATE binary) implies +** A=B in every other collating sequence. The requirement that the +** GROUP BY be BINARY is stricter than necessary. It would also work +** to promote HAVING clauses that use the same alternative collating +** sequence as the GROUP BY term, but that is much harder to check, +** alternative collating sequences are uncommon, and this is only an +** optimization, so we take the easy way out and simply require the +** GROUP BY to use the BINARY collating sequence. +*/ +SQLITE_PRIVATE int sqlite3ExprIsConstantOrGroupBy(Parse *pParse, Expr *p, ExprList *pGroupBy){ + Walker w; + w.eCode = 1; + w.xExprCallback = exprNodeIsConstantOrGroupBy; + w.xSelectCallback = 0; + w.u.pGroupBy = pGroupBy; + w.pParse = pParse; + sqlite3WalkExpr(&w, p); + return w.eCode; +} + +/* +** Walk an expression tree for the DEFAULT field of a column definition +** in a CREATE TABLE statement. Return non-zero if the expression is +** acceptable for use as a DEFAULT. That is to say, return non-zero if +** the expression is constant or a function call with constant arguments. +** Return and 0 if there are any variables. +** +** isInit is true when parsing from sqlite_schema. isInit is false when +** processing a new CREATE TABLE statement. When isInit is true, parameters +** (such as ? or $abc) in the expression are converted into NULL. When +** isInit is false, parameters raise an error. Parameters should not be +** allowed in a CREATE TABLE statement, but some legacy versions of SQLite +** allowed it, so we need to support it when reading sqlite_schema for +** backwards compatibility. +** +** If isInit is true, set EP_FromDDL on every TK_FUNCTION node. +** +** For the purposes of this function, a double-quoted string (ex: "abc") +** is considered a variable but a single-quoted string (ex: 'abc') is +** a constant. +*/ +SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p, u8 isInit){ + assert( isInit==0 || isInit==1 ); + return exprIsConst(0, p, 4+isInit); +} + +#ifdef SQLITE_ENABLE_CURSOR_HINTS +/* +** Walk an expression tree. Return 1 if the expression contains a +** subquery of some kind. Return 0 if there are no subqueries. +*/ +SQLITE_PRIVATE int sqlite3ExprContainsSubquery(Expr *p){ + Walker w; + w.eCode = 1; + w.xExprCallback = sqlite3ExprWalkNoop; + w.xSelectCallback = sqlite3SelectWalkFail; +#ifdef SQLITE_DEBUG + w.xSelectCallback2 = sqlite3SelectWalkAssert2; +#endif + sqlite3WalkExpr(&w, p); + return w.eCode==0; +} +#endif + +/* +** If the expression p codes a constant integer that is small enough +** to fit in a 32-bit integer, return 1 and put the value of the integer +** in *pValue. If the expression is not an integer or if it is too big +** to fit in a signed 32-bit integer, return 0 and leave *pValue unchanged. +** +** If the pParse pointer is provided, then allow the expression p to be +** a parameter (TK_VARIABLE) that is bound to an integer. +** But if pParse is NULL, then p must be a pure integer literal. +*/ +SQLITE_PRIVATE int sqlite3ExprIsInteger(const Expr *p, int *pValue, Parse *pParse){ + int rc = 0; + if( NEVER(p==0) ) return 0; /* Used to only happen following on OOM */ + + /* If an expression is an integer literal that fits in a signed 32-bit + ** integer, then the EP_IntValue flag will have already been set */ + assert( p->op!=TK_INTEGER || (p->flags & EP_IntValue)!=0 + || sqlite3GetInt32(p->u.zToken, &rc)==0 ); + + if( p->flags & EP_IntValue ){ + *pValue = p->u.iValue; + return 1; + } + switch( p->op ){ + case TK_UPLUS: { + rc = sqlite3ExprIsInteger(p->pLeft, pValue, 0); + break; + } + case TK_UMINUS: { + int v = 0; + if( sqlite3ExprIsInteger(p->pLeft, &v, 0) ){ + assert( ((unsigned int)v)!=0x80000000 ); + *pValue = -v; + rc = 1; + } + break; + } + case TK_VARIABLE: { + sqlite3_value *pVal; + if( pParse==0 ) break; + if( NEVER(pParse->pVdbe==0) ) break; + if( (pParse->db->flags & SQLITE_EnableQPSG)!=0 ) break; + sqlite3VdbeSetVarmask(pParse->pVdbe, p->iColumn); + pVal = sqlite3VdbeGetBoundValue(pParse->pReprepare, p->iColumn, + SQLITE_AFF_BLOB); + if( pVal ){ + if( sqlite3_value_type(pVal)==SQLITE_INTEGER ){ + sqlite3_int64 vv = sqlite3_value_int64(pVal); + if( vv == (vv & 0x7fffffff) ){ /* non-negative numbers only */ + *pValue = (int)vv; + rc = 1; + } + } + sqlite3ValueFree(pVal); + } + break; + } + default: break; + } + return rc; +} + +/* +** Return FALSE if there is no chance that the expression can be NULL. +** +** If the expression might be NULL or if the expression is too complex +** to tell return TRUE. +** +** This routine is used as an optimization, to skip OP_IsNull opcodes +** when we know that a value cannot be NULL. Hence, a false positive +** (returning TRUE when in fact the expression can never be NULL) might +** be a small performance hit but is otherwise harmless. On the other +** hand, a false negative (returning FALSE when the result could be NULL) +** will likely result in an incorrect answer. So when in doubt, return +** TRUE. +*/ +SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr *p){ + u8 op; + assert( p!=0 ); + while( p->op==TK_UPLUS || p->op==TK_UMINUS ){ + p = p->pLeft; + assert( p!=0 ); + } + op = p->op; + if( op==TK_REGISTER ) op = p->op2; + switch( op ){ + case TK_INTEGER: + case TK_STRING: + case TK_FLOAT: + case TK_BLOB: + return 0; + case TK_COLUMN: + assert( ExprUseYTab(p) ); + return ExprHasProperty(p, EP_CanBeNull) + || NEVER(p->y.pTab==0) /* Reference to column of index on expr */ +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + || (p->iColumn==XN_ROWID && IsView(p->y.pTab)) +#endif + || (p->iColumn>=0 + && p->y.pTab->aCol!=0 /* Possible due to prior error */ + && ALWAYS(p->iColumny.pTab->nCol) + && p->y.pTab->aCol[p->iColumn].notNull==0); + default: + return 1; + } +} + +/* +** Return TRUE if the given expression is a constant which would be +** unchanged by OP_Affinity with the affinity given in the second +** argument. +** +** This routine is used to determine if the OP_Affinity operation +** can be omitted. When in doubt return FALSE. A false negative +** is harmless. A false positive, however, can result in the wrong +** answer. +*/ +SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr *p, char aff){ + u8 op; + int unaryMinus = 0; + if( aff==SQLITE_AFF_BLOB ) return 1; + while( p->op==TK_UPLUS || p->op==TK_UMINUS ){ + if( p->op==TK_UMINUS ) unaryMinus = 1; + p = p->pLeft; + } + op = p->op; + if( op==TK_REGISTER ) op = p->op2; + switch( op ){ + case TK_INTEGER: { + return aff>=SQLITE_AFF_NUMERIC; + } + case TK_FLOAT: { + return aff>=SQLITE_AFF_NUMERIC; + } + case TK_STRING: { + return !unaryMinus && aff==SQLITE_AFF_TEXT; + } + case TK_BLOB: { + return !unaryMinus; + } + case TK_COLUMN: { + assert( p->iTable>=0 ); /* p cannot be part of a CHECK constraint */ + return aff>=SQLITE_AFF_NUMERIC && p->iColumn<0; + } + default: { + return 0; + } + } +} + +/* +** Return TRUE if the given string is a row-id column name. +*/ +SQLITE_PRIVATE int sqlite3IsRowid(const char *z){ + if( sqlite3StrICmp(z, "_ROWID_")==0 ) return 1; + if( sqlite3StrICmp(z, "ROWID")==0 ) return 1; + if( sqlite3StrICmp(z, "OID")==0 ) return 1; + return 0; +} + +/* +** Return a pointer to a buffer containing a usable rowid alias for table +** pTab. An alias is usable if there is not an explicit user-defined column +** of the same name. +*/ +SQLITE_PRIVATE const char *sqlite3RowidAlias(Table *pTab){ + const char *azOpt[] = {"_ROWID_", "ROWID", "OID"}; + int ii; + assert( VisibleRowid(pTab) ); + for(ii=0; iix.pSelect; + if( p->pPrior ) return 0; /* Not a compound SELECT */ + if( p->selFlags & (SF_Distinct|SF_Aggregate) ){ + testcase( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct ); + testcase( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate ); + return 0; /* No DISTINCT keyword and no aggregate functions */ + } + assert( p->pGroupBy==0 ); /* Has no GROUP BY clause */ + if( p->pLimit ) return 0; /* Has no LIMIT clause */ + if( p->pWhere ) return 0; /* Has no WHERE clause */ + pSrc = p->pSrc; + assert( pSrc!=0 ); + if( pSrc->nSrc!=1 ) return 0; /* Single term in FROM clause */ + if( pSrc->a[0].fg.isSubquery) return 0;/* FROM is not a subquery or view */ + pTab = pSrc->a[0].pSTab; + assert( pTab!=0 ); + assert( !IsView(pTab) ); /* FROM clause is not a view */ + if( IsVirtual(pTab) ) return 0; /* FROM clause not a virtual table */ + pEList = p->pEList; + assert( pEList!=0 ); + /* All SELECT results must be columns. */ + for(i=0; inExpr; i++){ + Expr *pRes = pEList->a[i].pExpr; + if( pRes->op!=TK_COLUMN ) return 0; + assert( pRes->iTable==pSrc->a[0].iCursor ); /* Not a correlated subquery */ + } + return p; +} +#endif /* SQLITE_OMIT_SUBQUERY */ + +#ifndef SQLITE_OMIT_SUBQUERY +/* +** Generate code that checks the left-most column of index table iCur to see if +** it contains any NULL entries. Cause the register at regHasNull to be set +** to a non-NULL value if iCur contains no NULLs. Cause register regHasNull +** to be set to NULL if iCur contains one or more NULL values. +*/ +static void sqlite3SetHasNullFlag(Vdbe *v, int iCur, int regHasNull){ + int addr1; + sqlite3VdbeAddOp2(v, OP_Integer, 0, regHasNull); + addr1 = sqlite3VdbeAddOp1(v, OP_Rewind, iCur); VdbeCoverage(v); + sqlite3VdbeAddOp3(v, OP_Column, iCur, 0, regHasNull); + sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG); + VdbeComment((v, "first_entry_in(%d)", iCur)); + sqlite3VdbeJumpHere(v, addr1); +} +#endif + + +#ifndef SQLITE_OMIT_SUBQUERY +/* +** The argument is an IN operator with a list (not a subquery) on the +** right-hand side. Return TRUE if that list is constant. +*/ +static int sqlite3InRhsIsConstant(Parse *pParse, Expr *pIn){ + Expr *pLHS; + int res; + assert( !ExprHasProperty(pIn, EP_xIsSelect) ); + pLHS = pIn->pLeft; + pIn->pLeft = 0; + res = sqlite3ExprIsConstant(pParse, pIn); + pIn->pLeft = pLHS; + return res; +} +#endif + +/* +** This function is used by the implementation of the IN (...) operator. +** The pX parameter is the expression on the RHS of the IN operator, which +** might be either a list of expressions or a subquery. +** +** The job of this routine is to find or create a b-tree object that can +** be used either to test for membership in the RHS set or to iterate through +** all members of the RHS set, skipping duplicates. +** +** A cursor is opened on the b-tree object that is the RHS of the IN operator +** and the *piTab parameter is set to the index of that cursor. +** +** The returned value of this function indicates the b-tree type, as follows: +** +** IN_INDEX_ROWID - The cursor was opened on a database table. +** IN_INDEX_INDEX_ASC - The cursor was opened on an ascending index. +** IN_INDEX_INDEX_DESC - The cursor was opened on a descending index. +** IN_INDEX_EPH - The cursor was opened on a specially created and +** populated ephemeral table. +** IN_INDEX_NOOP - No cursor was allocated. The IN operator must be +** implemented as a sequence of comparisons. +** +** An existing b-tree might be used if the RHS expression pX is a simple +** subquery such as: +** +** SELECT , ... FROM +** +** If the RHS of the IN operator is a list or a more complex subquery, then +** an ephemeral table might need to be generated from the RHS and then +** pX->iTable made to point to the ephemeral table instead of an +** existing table. In this case, the creation and initialization of the +** ephemeral table might be put inside of a subroutine, the EP_Subrtn flag +** will be set on pX and the pX->y.sub fields will be set to show where +** the subroutine is coded. +** +** The inFlags parameter must contain, at a minimum, one of the bits +** IN_INDEX_MEMBERSHIP or IN_INDEX_LOOP but not both. If inFlags contains +** IN_INDEX_MEMBERSHIP, then the generated table will be used for a fast +** membership test. When the IN_INDEX_LOOP bit is set, the IN index will +** be used to loop over all values of the RHS of the IN operator. +** +** When IN_INDEX_LOOP is used (and the b-tree will be used to iterate +** through the set members) then the b-tree must not contain duplicates. +** An ephemeral table will be created unless the selected columns are guaranteed +** to be unique - either because it is an INTEGER PRIMARY KEY or due to +** a UNIQUE constraint or index. +** +** When IN_INDEX_MEMBERSHIP is used (and the b-tree will be used +** for fast set membership tests) then an ephemeral table must +** be used unless is a single INTEGER PRIMARY KEY column or an +** index can be found with the specified as its left-most. +** +** If the IN_INDEX_NOOP_OK and IN_INDEX_MEMBERSHIP are both set and +** if the RHS of the IN operator is a list (not a subquery) then this +** routine might decide that creating an ephemeral b-tree for membership +** testing is too expensive and return IN_INDEX_NOOP. In that case, the +** calling routine should implement the IN operator using a sequence +** of Eq or Ne comparison operations. +** +** When the b-tree is being used for membership tests, the calling function +** might need to know whether or not the RHS side of the IN operator +** contains a NULL. If prRhsHasNull is not a NULL pointer and +** if there is any chance that the (...) might contain a NULL value at +** runtime, then a register is allocated and the register number written +** to *prRhsHasNull. If there is no chance that the (...) contains a +** NULL value, then *prRhsHasNull is left unchanged. +** +** If a register is allocated and its location stored in *prRhsHasNull, then +** the value in that register will be NULL if the b-tree contains one or more +** NULL values, and it will be some non-NULL value if the b-tree contains no +** NULL values. +** +** If the aiMap parameter is not NULL, it must point to an array containing +** one element for each column returned by the SELECT statement on the RHS +** of the IN(...) operator. The i'th entry of the array is populated with the +** offset of the index column that matches the i'th column returned by the +** SELECT. For example, if the expression and selected index are: +** +** (?,?,?) IN (SELECT a, b, c FROM t1) +** CREATE INDEX i1 ON t1(b, c, a); +** +** then aiMap[] is populated with {2, 0, 1}. +*/ +#ifndef SQLITE_OMIT_SUBQUERY +SQLITE_PRIVATE int sqlite3FindInIndex( + Parse *pParse, /* Parsing context */ + Expr *pX, /* The IN expression */ + u32 inFlags, /* IN_INDEX_LOOP, _MEMBERSHIP, and/or _NOOP_OK */ + int *prRhsHasNull, /* Register holding NULL status. See notes */ + int *aiMap, /* Mapping from Index fields to RHS fields */ + int *piTab /* OUT: index to use */ +){ + Select *p; /* SELECT to the right of IN operator */ + int eType = 0; /* Type of RHS table. IN_INDEX_* */ + int iTab; /* Cursor of the RHS table */ + int mustBeUnique; /* True if RHS must be unique */ + Vdbe *v = sqlite3GetVdbe(pParse); /* Virtual machine being coded */ + + assert( pX->op==TK_IN ); + mustBeUnique = (inFlags & IN_INDEX_LOOP)!=0; + iTab = pParse->nTab++; + + /* If the RHS of this IN(...) operator is a SELECT, and if it matters + ** whether or not the SELECT result contains NULL values, check whether + ** or not NULL is actually possible (it may not be, for example, due + ** to NOT NULL constraints in the schema). If no NULL values are possible, + ** set prRhsHasNull to 0 before continuing. */ + if( prRhsHasNull && ExprUseXSelect(pX) ){ + int i; + ExprList *pEList = pX->x.pSelect->pEList; + for(i=0; inExpr; i++){ + if( sqlite3ExprCanBeNull(pEList->a[i].pExpr) ) break; + } + if( i==pEList->nExpr ){ + prRhsHasNull = 0; + } + } + + /* Check to see if an existing table or index can be used to + ** satisfy the query. This is preferable to generating a new + ** ephemeral table. */ + if( pParse->nErr==0 && (p = isCandidateForInOpt(pX))!=0 ){ + sqlite3 *db = pParse->db; /* Database connection */ + Table *pTab; /* Table
    . */ + int iDb; /* Database idx for pTab */ + ExprList *pEList = p->pEList; + int nExpr = pEList->nExpr; + + assert( p->pEList!=0 ); /* Because of isCandidateForInOpt(p) */ + assert( p->pEList->a[0].pExpr!=0 ); /* Because of isCandidateForInOpt(p) */ + assert( p->pSrc!=0 ); /* Because of isCandidateForInOpt(p) */ + pTab = p->pSrc->a[0].pSTab; + + /* Code an OP_Transaction and OP_TableLock for
    . */ + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + assert( iDb>=0 && iDbtnum, 0, pTab->zName); + + assert(v); /* sqlite3GetVdbe() has always been previously called */ + if( nExpr==1 && pEList->a[0].pExpr->iColumn<0 ){ + /* The "x IN (SELECT rowid FROM table)" case */ + int iAddr = sqlite3VdbeAddOp0(v, OP_Once); + VdbeCoverage(v); + + sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead); + eType = IN_INDEX_ROWID; + ExplainQueryPlan((pParse, 0, + "USING ROWID SEARCH ON TABLE %s FOR IN-OPERATOR",pTab->zName)); + sqlite3VdbeJumpHere(v, iAddr); + }else{ + Index *pIdx; /* Iterator variable */ + int affinity_ok = 1; + int i; + + /* Check that the affinity that will be used to perform each + ** comparison is the same as the affinity of each column in table + ** on the RHS of the IN operator. If it not, it is not possible to + ** use any index of the RHS table. */ + for(i=0; ipLeft, i); + int iCol = pEList->a[i].pExpr->iColumn; + char idxaff = sqlite3TableColumnAffinity(pTab,iCol); /* RHS table */ + char cmpaff = sqlite3CompareAffinity(pLhs, idxaff); + testcase( cmpaff==SQLITE_AFF_BLOB ); + testcase( cmpaff==SQLITE_AFF_TEXT ); + switch( cmpaff ){ + case SQLITE_AFF_BLOB: + break; + case SQLITE_AFF_TEXT: + /* sqlite3CompareAffinity() only returns TEXT if one side or the + ** other has no affinity and the other side is TEXT. Hence, + ** the only way for cmpaff to be TEXT is for idxaff to be TEXT + ** and for the term on the LHS of the IN to have no affinity. */ + assert( idxaff==SQLITE_AFF_TEXT ); + break; + default: + affinity_ok = sqlite3IsNumericAffinity(idxaff); + } + } + + if( affinity_ok ){ + /* Search for an existing index that will work for this IN operator */ + for(pIdx=pTab->pIndex; pIdx && eType==0; pIdx=pIdx->pNext){ + Bitmask colUsed; /* Columns of the index used */ + Bitmask mCol; /* Mask for the current column */ + if( pIdx->nColumnpPartIdxWhere!=0 ) continue; + /* Maximum nColumn is BMS-2, not BMS-1, so that we can compute + ** BITMASK(nExpr) without overflowing */ + testcase( pIdx->nColumn==BMS-2 ); + testcase( pIdx->nColumn==BMS-1 ); + if( pIdx->nColumn>=BMS-1 ) continue; + if( mustBeUnique ){ + if( pIdx->nKeyCol>nExpr + ||(pIdx->nColumn>nExpr && !IsUniqueIndex(pIdx)) + ){ + continue; /* This index is not unique over the IN RHS columns */ + } + } + + colUsed = 0; /* Columns of index used so far */ + for(i=0; ipLeft, i); + Expr *pRhs = pEList->a[i].pExpr; + CollSeq *pReq = sqlite3BinaryCompareCollSeq(pParse, pLhs, pRhs); + int j; + + for(j=0; jaiColumn[j]!=pRhs->iColumn ) continue; + assert( pIdx->azColl[j] ); + if( pReq!=0 && sqlite3StrICmp(pReq->zName, pIdx->azColl[j])!=0 ){ + continue; + } + break; + } + if( j==nExpr ) break; + mCol = MASKBIT(j); + if( mCol & colUsed ) break; /* Each column used only once */ + colUsed |= mCol; + if( aiMap ) aiMap[i] = j; + } + + assert( nExpr>0 && nExprzName)); + sqlite3VdbeAddOp3(v, OP_OpenRead, iTab, pIdx->tnum, iDb); + sqlite3VdbeSetP4KeyInfo(pParse, pIdx); + VdbeComment((v, "%s", pIdx->zName)); + assert( IN_INDEX_INDEX_DESC == IN_INDEX_INDEX_ASC+1 ); + eType = IN_INDEX_INDEX_ASC + pIdx->aSortOrder[0]; + + if( prRhsHasNull ){ +#ifdef SQLITE_ENABLE_COLUMN_USED_MASK + i64 mask = (1<nMem; + if( nExpr==1 ){ + sqlite3SetHasNullFlag(v, iTab, *prRhsHasNull); + } + } + sqlite3VdbeJumpHere(v, iAddr); + } + } /* End loop over indexes */ + } /* End if( affinity_ok ) */ + } /* End if not an rowid index */ + } /* End attempt to optimize using an index */ + + /* If no preexisting index is available for the IN clause + ** and IN_INDEX_NOOP is an allowed reply + ** and the RHS of the IN operator is a list, not a subquery + ** and the RHS is not constant or has two or fewer terms, + ** then it is not worth creating an ephemeral table to evaluate + ** the IN operator so return IN_INDEX_NOOP. + */ + if( eType==0 + && (inFlags & IN_INDEX_NOOP_OK) + && ExprUseXList(pX) + && (!sqlite3InRhsIsConstant(pParse,pX) || pX->x.pList->nExpr<=2) + ){ + pParse->nTab--; /* Back out the allocation of the unused cursor */ + iTab = -1; /* Cursor is not allocated */ + eType = IN_INDEX_NOOP; + } + + if( eType==0 ){ + /* Could not find an existing table or index to use as the RHS b-tree. + ** We will have to generate an ephemeral table to do the job. + */ + u32 savedNQueryLoop = pParse->nQueryLoop; + int rMayHaveNull = 0; + eType = IN_INDEX_EPH; + if( inFlags & IN_INDEX_LOOP ){ + pParse->nQueryLoop = 0; + }else if( prRhsHasNull ){ + *prRhsHasNull = rMayHaveNull = ++pParse->nMem; + } + assert( pX->op==TK_IN ); + sqlite3CodeRhsOfIN(pParse, pX, iTab); + if( rMayHaveNull ){ + sqlite3SetHasNullFlag(v, iTab, rMayHaveNull); + } + pParse->nQueryLoop = savedNQueryLoop; + } + + if( aiMap && eType!=IN_INDEX_INDEX_ASC && eType!=IN_INDEX_INDEX_DESC ){ + int i, n; + n = sqlite3ExprVectorSize(pX->pLeft); + for(i=0; ipLeft; + int nVal = sqlite3ExprVectorSize(pLeft); + Select *pSelect = ExprUseXSelect(pExpr) ? pExpr->x.pSelect : 0; + char *zRet; + + assert( pExpr->op==TK_IN ); + zRet = sqlite3DbMallocRaw(pParse->db, 1+(i64)nVal); + if( zRet ){ + int i; + for(i=0; ipEList->a[i].pExpr, a); + }else{ + zRet[i] = a; + } + } + zRet[nVal] = '\0'; + } + return zRet; +} +#endif + +#ifndef SQLITE_OMIT_SUBQUERY +/* +** Load the Parse object passed as the first argument with an error +** message of the form: +** +** "sub-select returns N columns - expected M" +*/ +SQLITE_PRIVATE void sqlite3SubselectError(Parse *pParse, int nActual, int nExpect){ + if( pParse->nErr==0 ){ + const char *zFmt = "sub-select returns %d columns - expected %d"; + sqlite3ErrorMsg(pParse, zFmt, nActual, nExpect); + } +} +#endif + +/* +** Expression pExpr is a vector that has been used in a context where +** it is not permitted. If pExpr is a sub-select vector, this routine +** loads the Parse object with a message of the form: +** +** "sub-select returns N columns - expected 1" +** +** Or, if it is a regular scalar vector: +** +** "row value misused" +*/ +SQLITE_PRIVATE void sqlite3VectorErrorMsg(Parse *pParse, Expr *pExpr){ +#ifndef SQLITE_OMIT_SUBQUERY + if( ExprUseXSelect(pExpr) ){ + sqlite3SubselectError(pParse, pExpr->x.pSelect->pEList->nExpr, 1); + }else +#endif + { + sqlite3ErrorMsg(pParse, "row value misused"); + } +} + +#ifndef SQLITE_OMIT_SUBQUERY +/* +** Scan all previously generated bytecode looking for an OP_BeginSubrtn +** that is compatible with pExpr. If found, add the y.sub values +** to pExpr and return true. If not found, return false. +*/ +static int findCompatibleInRhsSubrtn( + Parse *pParse, /* Parsing context */ + Expr *pExpr, /* IN operator with RHS that we want to reuse */ + SubrtnSig *pNewSig /* Signature for the IN operator */ +){ + VdbeOp *pOp, *pEnd; + SubrtnSig *pSig; + Vdbe *v; + + if( pNewSig==0 ) return 0; + if( (pParse->mSubrtnSig & (1<<(pNewSig->selId&7)))==0 ) return 0; + assert( pExpr->op==TK_IN ); + assert( !ExprUseYSub(pExpr) ); + assert( ExprUseXSelect(pExpr) ); + assert( pExpr->x.pSelect!=0 ); + assert( (pExpr->x.pSelect->selFlags & SF_All)==0 ); + v = pParse->pVdbe; + assert( v!=0 ); + pOp = sqlite3VdbeGetOp(v, 1); + pEnd = sqlite3VdbeGetLastOp(v); + for(; pOpp4type!=P4_SUBRTNSIG ) continue; + assert( pOp->opcode==OP_BeginSubrtn ); + pSig = pOp->p4.pSubrtnSig; + assert( pSig!=0 ); + if( !pSig->bComplete ) continue; + if( pNewSig->selId!=pSig->selId ) continue; + if( strcmp(pNewSig->zAff,pSig->zAff)!=0 ) continue; + pExpr->y.sub.iAddr = pSig->iAddr; + pExpr->y.sub.regReturn = pSig->regReturn; + pExpr->iTable = pSig->iTable; + ExprSetProperty(pExpr, EP_Subrtn); + return 1; + } + return 0; +} +#endif /* SQLITE_OMIT_SUBQUERY */ + +#ifndef SQLITE_OMIT_SUBQUERY +/* +** Generate code that will construct an ephemeral table containing all terms +** in the RHS of an IN operator. The IN operator can be in either of two +** forms: +** +** x IN (4,5,11) -- IN operator with list on right-hand side +** x IN (SELECT a FROM b) -- IN operator with subquery on the right +** +** The pExpr parameter is the IN operator. The cursor number for the +** constructed ephemeral table is returned. The first time the ephemeral +** table is computed, the cursor number is also stored in pExpr->iTable, +** however the cursor number returned might not be the same, as it might +** have been duplicated using OP_OpenDup. +** +** If the LHS expression ("x" in the examples) is a column value, or +** the SELECT statement returns a column value, then the affinity of that +** column is used to build the index keys. If both 'x' and the +** SELECT... statement are columns, then numeric affinity is used +** if either column has NUMERIC or INTEGER affinity. If neither +** 'x' nor the SELECT... statement are columns, then numeric affinity +** is used. +*/ +SQLITE_PRIVATE void sqlite3CodeRhsOfIN( + Parse *pParse, /* Parsing context */ + Expr *pExpr, /* The IN operator */ + int iTab /* Use this cursor number */ +){ + int addrOnce = 0; /* Address of the OP_Once instruction at top */ + int addr; /* Address of OP_OpenEphemeral instruction */ + Expr *pLeft; /* the LHS of the IN operator */ + KeyInfo *pKeyInfo = 0; /* Key information */ + int nVal; /* Size of vector pLeft */ + Vdbe *v; /* The prepared statement under construction */ + SubrtnSig *pSig = 0; /* Signature for this subroutine */ + + v = pParse->pVdbe; + assert( v!=0 ); + + /* The evaluation of the IN must be repeated every time it + ** is encountered if any of the following is true: + ** + ** * The right-hand side is a correlated subquery + ** * The right-hand side is an expression list containing variables + ** * We are inside a trigger + ** + ** If all of the above are false, then we can compute the RHS just once + ** and reuse it many names. + */ + if( !ExprHasProperty(pExpr, EP_VarSelect) && pParse->iSelfTab==0 ){ + /* Reuse of the RHS is allowed + ** + ** Compute a signature for the RHS of the IN operator to facility + ** finding and reusing prior instances of the same IN operator. + */ + assert( !ExprUseXSelect(pExpr) || pExpr->x.pSelect!=0 ); + if( ExprUseXSelect(pExpr) && (pExpr->x.pSelect->selFlags & SF_All)==0 ){ + pSig = sqlite3DbMallocRawNN(pParse->db, sizeof(pSig[0])); + if( pSig ){ + pSig->selId = pExpr->x.pSelect->selId; + pSig->zAff = exprINAffinity(pParse, pExpr); + } + } + + /* Check to see if there is a prior materialization of the RHS of + ** this IN operator. If there is, then make use of that prior + ** materialization rather than recomputing it. + */ + if( ExprHasProperty(pExpr, EP_Subrtn) + || findCompatibleInRhsSubrtn(pParse, pExpr, pSig) + ){ + addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); + if( ExprUseXSelect(pExpr) ){ + ExplainQueryPlan((pParse, 0, "REUSE LIST SUBQUERY %d", + pExpr->x.pSelect->selId)); + } + assert( ExprUseYSub(pExpr) ); + sqlite3VdbeAddOp2(v, OP_Gosub, pExpr->y.sub.regReturn, + pExpr->y.sub.iAddr); + assert( iTab!=pExpr->iTable ); + sqlite3VdbeAddOp2(v, OP_OpenDup, iTab, pExpr->iTable); + sqlite3VdbeJumpHere(v, addrOnce); + if( pSig ){ + sqlite3DbFree(pParse->db, pSig->zAff); + sqlite3DbFree(pParse->db, pSig); + } + return; + } + + /* Begin coding the subroutine */ + assert( !ExprUseYWin(pExpr) ); + ExprSetProperty(pExpr, EP_Subrtn); + assert( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) ); + pExpr->y.sub.regReturn = ++pParse->nMem; + pExpr->y.sub.iAddr = + sqlite3VdbeAddOp2(v, OP_BeginSubrtn, 0, pExpr->y.sub.regReturn) + 1; + if( pSig ){ + pSig->bComplete = 0; + pSig->iAddr = pExpr->y.sub.iAddr; + pSig->regReturn = pExpr->y.sub.regReturn; + pSig->iTable = iTab; + pParse->mSubrtnSig = 1 << (pSig->selId&7); + sqlite3VdbeChangeP4(v, -1, (const char*)pSig, P4_SUBRTNSIG); + } + addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); + } + + /* Check to see if this is a vector IN operator */ + pLeft = pExpr->pLeft; + nVal = sqlite3ExprVectorSize(pLeft); + + /* Construct the ephemeral table that will contain the content of + ** RHS of the IN operator. + */ + pExpr->iTable = iTab; + addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pExpr->iTable, nVal); +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS + if( ExprUseXSelect(pExpr) ){ + VdbeComment((v, "Result of SELECT %u", pExpr->x.pSelect->selId)); + }else{ + VdbeComment((v, "RHS of IN operator")); + } +#endif + pKeyInfo = sqlite3KeyInfoAlloc(pParse->db, nVal, 1); + + if( ExprUseXSelect(pExpr) ){ + /* Case 1: expr IN (SELECT ...) + ** + ** Generate code to write the results of the select into the temporary + ** table allocated and opened above. + */ + Select *pSelect = pExpr->x.pSelect; + ExprList *pEList = pSelect->pEList; + + ExplainQueryPlan((pParse, 1, "%sLIST SUBQUERY %d", + addrOnce?"":"CORRELATED ", pSelect->selId + )); + /* If the LHS and RHS of the IN operator do not match, that + ** error will have been caught long before we reach this point. */ + if( ALWAYS(pEList->nExpr==nVal) ){ + Select *pCopy; + SelectDest dest; + int i; + int rc; + int addrBloom = 0; + sqlite3SelectDestInit(&dest, SRT_Set, iTab); + dest.zAffSdst = exprINAffinity(pParse, pExpr); + pSelect->iLimit = 0; + if( addrOnce && OptimizationEnabled(pParse->db, SQLITE_BloomFilter) ){ + int regBloom = ++pParse->nMem; + addrBloom = sqlite3VdbeAddOp2(v, OP_Blob, 10000, regBloom); + VdbeComment((v, "Bloom filter")); + dest.iSDParm2 = regBloom; + } + testcase( pSelect->selFlags & SF_Distinct ); + testcase( pKeyInfo==0 ); /* Caused by OOM in sqlite3KeyInfoAlloc() */ + pCopy = sqlite3SelectDup(pParse->db, pSelect, 0); + rc = pParse->db->mallocFailed ? 1 :sqlite3Select(pParse, pCopy, &dest); + sqlite3SelectDelete(pParse->db, pCopy); + sqlite3DbFree(pParse->db, dest.zAffSdst); + if( addrBloom ){ + /* Remember that location of the Bloom filter in the P3 operand + ** of the OP_Once that began this subroutine. tag-202407032019 */ + sqlite3VdbeGetOp(v, addrOnce)->p3 = dest.iSDParm2; + if( dest.iSDParm2==0 ){ + /* If the Bloom filter won't actually be used, keep it small */ + sqlite3VdbeGetOp(v, addrBloom)->p1 = 10; + } + } + if( rc ){ + sqlite3KeyInfoUnref(pKeyInfo); + return; + } + assert( pKeyInfo!=0 ); /* OOM will cause exit after sqlite3Select() */ + assert( pEList!=0 ); + assert( pEList->nExpr>0 ); + assert( sqlite3KeyInfoIsWriteable(pKeyInfo) ); + for(i=0; iaColl[i] = sqlite3BinaryCompareCollSeq( + pParse, p, pEList->a[i].pExpr + ); + } + } + }else if( ALWAYS(pExpr->x.pList!=0) ){ + /* Case 2: expr IN (exprlist) + ** + ** For each expression, build an index key from the evaluation and + ** store it in the temporary table. If is a column, then use + ** that columns affinity when building index keys. If is not + ** a column, use numeric affinity. + */ + char affinity; /* Affinity of the LHS of the IN */ + int i; + ExprList *pList = pExpr->x.pList; + struct ExprList_item *pItem; + int r1, r2; + affinity = sqlite3ExprAffinity(pLeft); + if( affinity<=SQLITE_AFF_NONE ){ + affinity = SQLITE_AFF_BLOB; + }else if( affinity==SQLITE_AFF_REAL ){ + affinity = SQLITE_AFF_NUMERIC; + } + if( pKeyInfo ){ + assert( sqlite3KeyInfoIsWriteable(pKeyInfo) ); + pKeyInfo->aColl[0] = sqlite3ExprCollSeq(pParse, pExpr->pLeft); + } + + /* Loop through each expression in . */ + r1 = sqlite3GetTempReg(pParse); + r2 = sqlite3GetTempReg(pParse); + for(i=pList->nExpr, pItem=pList->a; i>0; i--, pItem++){ + Expr *pE2 = pItem->pExpr; + + /* If the expression is not constant then we will need to + ** disable the test that was generated above that makes sure + ** this code only executes once. Because for a non-constant + ** expression we need to rerun this code each time. + */ + if( addrOnce && !sqlite3ExprIsConstant(pParse, pE2) ){ + sqlite3VdbeChangeToNoop(v, addrOnce-1); + sqlite3VdbeChangeToNoop(v, addrOnce); + ExprClearProperty(pExpr, EP_Subrtn); + addrOnce = 0; + } + + /* Evaluate the expression and insert it into the temp table */ + sqlite3ExprCode(pParse, pE2, r1); + sqlite3VdbeAddOp4(v, OP_MakeRecord, r1, 1, r2, &affinity, 1); + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iTab, r2, r1, 1); + } + sqlite3ReleaseTempReg(pParse, r1); + sqlite3ReleaseTempReg(pParse, r2); + } + if( pSig ) pSig->bComplete = 1; + if( pKeyInfo ){ + sqlite3VdbeChangeP4(v, addr, (void *)pKeyInfo, P4_KEYINFO); + } + if( addrOnce ){ + sqlite3VdbeAddOp1(v, OP_NullRow, iTab); + sqlite3VdbeJumpHere(v, addrOnce); + /* Subroutine return */ + assert( ExprUseYSub(pExpr) ); + assert( sqlite3VdbeGetOp(v,pExpr->y.sub.iAddr-1)->opcode==OP_BeginSubrtn + || pParse->nErr ); + sqlite3VdbeAddOp3(v, OP_Return, pExpr->y.sub.regReturn, + pExpr->y.sub.iAddr, 1); + VdbeCoverage(v); + sqlite3ClearTempRegCache(pParse); + } +} +#endif /* SQLITE_OMIT_SUBQUERY */ + +/* +** Generate code for scalar subqueries used as a subquery expression +** or EXISTS operator: +** +** (SELECT a FROM b) -- subquery +** EXISTS (SELECT a FROM b) -- EXISTS subquery +** +** The pExpr parameter is the SELECT or EXISTS operator to be coded. +** +** Return the register that holds the result. For a multi-column SELECT, +** the result is stored in a contiguous array of registers and the +** return value is the register of the left-most result column. +** Return 0 if an error occurs. +*/ +#ifndef SQLITE_OMIT_SUBQUERY +SQLITE_PRIVATE int sqlite3CodeSubselect(Parse *pParse, Expr *pExpr){ + int addrOnce = 0; /* Address of OP_Once at top of subroutine */ + int rReg = 0; /* Register storing resulting */ + Select *pSel; /* SELECT statement to encode */ + SelectDest dest; /* How to deal with SELECT result */ + int nReg; /* Registers to allocate */ + Expr *pLimit; /* New limit expression */ +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + int addrExplain; /* Address of OP_Explain instruction */ +#endif + + Vdbe *v = pParse->pVdbe; + assert( v!=0 ); + if( pParse->nErr ) return 0; + testcase( pExpr->op==TK_EXISTS ); + testcase( pExpr->op==TK_SELECT ); + assert( pExpr->op==TK_EXISTS || pExpr->op==TK_SELECT ); + assert( ExprUseXSelect(pExpr) ); + pSel = pExpr->x.pSelect; + + /* If this routine has already been coded, then invoke it as a + ** subroutine. */ + if( ExprHasProperty(pExpr, EP_Subrtn) ){ + ExplainQueryPlan((pParse, 0, "REUSE SUBQUERY %d", pSel->selId)); + assert( ExprUseYSub(pExpr) ); + sqlite3VdbeAddOp2(v, OP_Gosub, pExpr->y.sub.regReturn, + pExpr->y.sub.iAddr); + return pExpr->iTable; + } + + /* Begin coding the subroutine */ + assert( !ExprUseYWin(pExpr) ); + assert( !ExprHasProperty(pExpr, EP_Reduced|EP_TokenOnly) ); + ExprSetProperty(pExpr, EP_Subrtn); + pExpr->y.sub.regReturn = ++pParse->nMem; + pExpr->y.sub.iAddr = + sqlite3VdbeAddOp2(v, OP_BeginSubrtn, 0, pExpr->y.sub.regReturn) + 1; + + /* The evaluation of the EXISTS/SELECT must be repeated every time it + ** is encountered if any of the following is true: + ** + ** * The right-hand side is a correlated subquery + ** * The right-hand side is an expression list containing variables + ** * We are inside a trigger + ** + ** If all of the above are false, then we can run this code just once + ** save the results, and reuse the same result on subsequent invocations. + */ + if( !ExprHasProperty(pExpr, EP_VarSelect) ){ + addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); + } + + /* For a SELECT, generate code to put the values for all columns of + ** the first row into an array of registers and return the index of + ** the first register. + ** + ** If this is an EXISTS, write an integer 0 (not exists) or 1 (exists) + ** into a register and return that register number. + ** + ** In both cases, the query is augmented with "LIMIT 1". Any + ** preexisting limit is discarded in place of the new LIMIT 1. + */ + ExplainQueryPlan2(addrExplain, (pParse, 1, "%sSCALAR SUBQUERY %d", + addrOnce?"":"CORRELATED ", pSel->selId)); + sqlite3VdbeScanStatusCounters(v, addrExplain, addrExplain, -1); + nReg = pExpr->op==TK_SELECT ? pSel->pEList->nExpr : 1; + sqlite3SelectDestInit(&dest, 0, pParse->nMem+1); + pParse->nMem += nReg; + if( pExpr->op==TK_SELECT ){ + dest.eDest = SRT_Mem; + if( (pSel->selFlags&SF_Distinct) && pSel->pLimit && pSel->pLimit->pRight ){ + /* If there is both a DISTINCT and an OFFSET clause, then allocate + ** a separate dest.iSdst array for sqlite3Select() and other + ** routines to populate. In this case results will be copied over + ** into the dest.iSDParm array only after OFFSET processing. This + ** ensures that in the case where OFFSET excludes all rows, the + ** dest.iSDParm array is not left populated with the contents of the + ** last row visited - it should be all NULLs if all rows were + ** excluded by OFFSET. */ + dest.iSdst = pParse->nMem+1; + pParse->nMem += nReg; + }else{ + dest.iSdst = dest.iSDParm; + } + dest.nSdst = nReg; + sqlite3VdbeAddOp3(v, OP_Null, 0, dest.iSDParm, pParse->nMem); + VdbeComment((v, "Init subquery result")); + }else{ + dest.eDest = SRT_Exists; + sqlite3VdbeAddOp2(v, OP_Integer, 0, dest.iSDParm); + VdbeComment((v, "Init EXISTS result")); + } + if( pSel->pLimit ){ + /* The subquery already has a limit. If the pre-existing limit X is + ** not already integer value 1 or 0, then make the new limit X<>0 so that + ** the new limit is either 1 or 0 */ + Expr *pLeft = pSel->pLimit->pLeft; + if( ExprHasProperty(pLeft, EP_IntValue)==0 + || (pLeft->u.iValue!=1 && pLeft->u.iValue!=0) + ){ + sqlite3 *db = pParse->db; + pLimit = sqlite3Expr(db, TK_INTEGER, "0"); + if( pLimit ){ + pLimit->affExpr = SQLITE_AFF_NUMERIC; + pLimit = sqlite3PExpr(pParse, TK_NE, + sqlite3ExprDup(db, pLeft, 0), pLimit); + } + sqlite3ExprDeferredDelete(pParse, pLeft); + pSel->pLimit->pLeft = pLimit; + } + }else{ + /* If there is no pre-existing limit add a limit of 1 */ + pLimit = sqlite3Expr(pParse->db, TK_INTEGER, "1"); + pSel->pLimit = sqlite3PExpr(pParse, TK_LIMIT, pLimit, 0); + } + pSel->iLimit = 0; + if( sqlite3Select(pParse, pSel, &dest) ){ + pExpr->op2 = pExpr->op; + pExpr->op = TK_ERROR; + return 0; + } + pExpr->iTable = rReg = dest.iSDParm; + ExprSetVVAProperty(pExpr, EP_NoReduce); + if( addrOnce ){ + sqlite3VdbeJumpHere(v, addrOnce); + } + sqlite3VdbeScanStatusRange(v, addrExplain, addrExplain, -1); + + /* Subroutine return */ + assert( ExprUseYSub(pExpr) ); + assert( sqlite3VdbeGetOp(v,pExpr->y.sub.iAddr-1)->opcode==OP_BeginSubrtn + || pParse->nErr ); + sqlite3VdbeAddOp3(v, OP_Return, pExpr->y.sub.regReturn, + pExpr->y.sub.iAddr, 1); + VdbeCoverage(v); + sqlite3ClearTempRegCache(pParse); + return rReg; +} +#endif /* SQLITE_OMIT_SUBQUERY */ + +#ifndef SQLITE_OMIT_SUBQUERY +/* +** Expr pIn is an IN(...) expression. This function checks that the +** sub-select on the RHS of the IN() operator has the same number of +** columns as the vector on the LHS. Or, if the RHS of the IN() is not +** a sub-query, that the LHS is a vector of size 1. +*/ +SQLITE_PRIVATE int sqlite3ExprCheckIN(Parse *pParse, Expr *pIn){ + int nVector = sqlite3ExprVectorSize(pIn->pLeft); + if( ExprUseXSelect(pIn) && !pParse->db->mallocFailed ){ + if( nVector!=pIn->x.pSelect->pEList->nExpr ){ + sqlite3SubselectError(pParse, pIn->x.pSelect->pEList->nExpr, nVector); + return 1; + } + }else if( nVector!=1 ){ + sqlite3VectorErrorMsg(pParse, pIn->pLeft); + return 1; + } + return 0; +} +#endif + +#ifndef SQLITE_OMIT_SUBQUERY +/* +** Generate code for an IN expression. +** +** x IN (SELECT ...) +** x IN (value, value, ...) +** +** The left-hand side (LHS) is a scalar or vector expression. The +** right-hand side (RHS) is an array of zero or more scalar values, or a +** subquery. If the RHS is a subquery, the number of result columns must +** match the number of columns in the vector on the LHS. If the RHS is +** a list of values, the LHS must be a scalar. +** +** The IN operator is true if the LHS value is contained within the RHS. +** The result is false if the LHS is definitely not in the RHS. The +** result is NULL if the presence of the LHS in the RHS cannot be +** determined due to NULLs. +** +** This routine generates code that jumps to destIfFalse if the LHS is not +** contained within the RHS. If due to NULLs we cannot determine if the LHS +** is contained in the RHS then jump to destIfNull. If the LHS is contained +** within the RHS then fall through. +** +** See the separate in-operator.md documentation file in the canonical +** SQLite source tree for additional information. +*/ +static void sqlite3ExprCodeIN( + Parse *pParse, /* Parsing and code generating context */ + Expr *pExpr, /* The IN expression */ + int destIfFalse, /* Jump here if LHS is not contained in the RHS */ + int destIfNull /* Jump here if the results are unknown due to NULLs */ +){ + int rRhsHasNull = 0; /* Register that is true if RHS contains NULL values */ + int eType; /* Type of the RHS */ + int rLhs; /* Register(s) holding the LHS values */ + Vdbe *v; /* Statement under construction */ + int *aiMap = 0; /* Map from vector field to index column */ + char *zAff = 0; /* Affinity string for comparisons */ + int nVector; /* Size of vectors for this IN operator */ + int iDummy; /* Dummy parameter to exprCodeVector() */ + Expr *pLeft; /* The LHS of the IN operator */ + int i; /* loop counter */ + int destStep2; /* Where to jump when NULLs seen in step 2 */ + int destStep6 = 0; /* Start of code for Step 6 */ + int addrTruthOp; /* Address of opcode that determines the IN is true */ + int destNotNull; /* Jump here if a comparison is not true in step 6 */ + int addrTop; /* Top of the step-6 loop */ + int iTab = 0; /* Index to use */ + u8 okConstFactor = pParse->okConstFactor; + + assert( !ExprHasVVAProperty(pExpr,EP_Immutable) ); + pLeft = pExpr->pLeft; + if( sqlite3ExprCheckIN(pParse, pExpr) ) return; + zAff = exprINAffinity(pParse, pExpr); + nVector = sqlite3ExprVectorSize(pExpr->pLeft); + aiMap = (int*)sqlite3DbMallocZero(pParse->db, nVector*sizeof(int)); + if( pParse->db->mallocFailed ) goto sqlite3ExprCodeIN_oom_error; + + /* Attempt to compute the RHS. After this step, if anything other than + ** IN_INDEX_NOOP is returned, the table opened with cursor iTab + ** contains the values that make up the RHS. If IN_INDEX_NOOP is returned, + ** the RHS has not yet been coded. */ + v = pParse->pVdbe; + assert( v!=0 ); /* OOM detected prior to this routine */ + VdbeNoopComment((v, "begin IN expr")); + eType = sqlite3FindInIndex(pParse, pExpr, + IN_INDEX_MEMBERSHIP | IN_INDEX_NOOP_OK, + destIfFalse==destIfNull ? 0 : &rRhsHasNull, + aiMap, &iTab); + + assert( pParse->nErr || nVector==1 || eType==IN_INDEX_EPH + || eType==IN_INDEX_INDEX_ASC || eType==IN_INDEX_INDEX_DESC + ); +#ifdef SQLITE_DEBUG + /* Confirm that aiMap[] contains nVector integer values between 0 and + ** nVector-1. */ + for(i=0; i from " IN (...)". If the LHS is a + ** vector, then it is stored in an array of nVector registers starting + ** at r1. + ** + ** sqlite3FindInIndex() might have reordered the fields of the LHS vector + ** so that the fields are in the same order as an existing index. The + ** aiMap[] array contains a mapping from the original LHS field order to + ** the field order that matches the RHS index. + ** + ** Avoid factoring the LHS of the IN(...) expression out of the loop, + ** even if it is constant, as OP_Affinity may be used on the register + ** by code generated below. */ + assert( pParse->okConstFactor==okConstFactor ); + pParse->okConstFactor = 0; + rLhs = exprCodeVector(pParse, pLeft, &iDummy); + pParse->okConstFactor = okConstFactor; + + /* If sqlite3FindInIndex() did not find or create an index that is + ** suitable for evaluating the IN operator, then evaluate using a + ** sequence of comparisons. + ** + ** This is step (1) in the in-operator.md optimized algorithm. + */ + if( eType==IN_INDEX_NOOP ){ + ExprList *pList; + CollSeq *pColl; + int labelOk = sqlite3VdbeMakeLabel(pParse); + int r2, regToFree; + int regCkNull = 0; + int ii; + assert( nVector==1 ); + assert( ExprUseXList(pExpr) ); + pList = pExpr->x.pList; + pColl = sqlite3ExprCollSeq(pParse, pExpr->pLeft); + if( destIfNull!=destIfFalse ){ + regCkNull = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_BitAnd, rLhs, rLhs, regCkNull); + } + for(ii=0; iinExpr; ii++){ + r2 = sqlite3ExprCodeTemp(pParse, pList->a[ii].pExpr, ®ToFree); + if( regCkNull && sqlite3ExprCanBeNull(pList->a[ii].pExpr) ){ + sqlite3VdbeAddOp3(v, OP_BitAnd, regCkNull, r2, regCkNull); + } + sqlite3ReleaseTempReg(pParse, regToFree); + if( iinExpr-1 || destIfNull!=destIfFalse ){ + int op = rLhs!=r2 ? OP_Eq : OP_NotNull; + sqlite3VdbeAddOp4(v, op, rLhs, labelOk, r2, + (void*)pColl, P4_COLLSEQ); + VdbeCoverageIf(v, iinExpr-1 && op==OP_Eq); + VdbeCoverageIf(v, ii==pList->nExpr-1 && op==OP_Eq); + VdbeCoverageIf(v, iinExpr-1 && op==OP_NotNull); + VdbeCoverageIf(v, ii==pList->nExpr-1 && op==OP_NotNull); + sqlite3VdbeChangeP5(v, zAff[0]); + }else{ + int op = rLhs!=r2 ? OP_Ne : OP_IsNull; + assert( destIfNull==destIfFalse ); + sqlite3VdbeAddOp4(v, op, rLhs, destIfFalse, r2, + (void*)pColl, P4_COLLSEQ); + VdbeCoverageIf(v, op==OP_Ne); + VdbeCoverageIf(v, op==OP_IsNull); + sqlite3VdbeChangeP5(v, zAff[0] | SQLITE_JUMPIFNULL); + } + } + if( regCkNull ){ + sqlite3VdbeAddOp2(v, OP_IsNull, regCkNull, destIfNull); VdbeCoverage(v); + sqlite3VdbeGoto(v, destIfFalse); + } + sqlite3VdbeResolveLabel(v, labelOk); + sqlite3ReleaseTempReg(pParse, regCkNull); + goto sqlite3ExprCodeIN_finished; + } + + if( eType!=IN_INDEX_ROWID ){ + /* If this IN operator will use an index, then the order of columns in the + ** vector might be different from the order in the index. In that case, + ** we need to reorder the LHS values to be in index order. Run Affinity + ** before reordering the columns, so that the affinity is correct. + */ + sqlite3VdbeAddOp4(v, OP_Affinity, rLhs, nVector, 0, zAff, nVector); + for(i=0; ipLeft, i); + if( pParse->nErr ) goto sqlite3ExprCodeIN_oom_error; + if( sqlite3ExprCanBeNull(p) ){ + sqlite3VdbeAddOp2(v, OP_IsNull, rLhs+i, destStep2); + VdbeCoverage(v); + } + } + + /* Step 3. The LHS is now known to be non-NULL. Do the binary search + ** of the RHS using the LHS as a probe. If found, the result is + ** true. + */ + if( eType==IN_INDEX_ROWID ){ + /* In this case, the RHS is the ROWID of table b-tree and so we also + ** know that the RHS is non-NULL. Hence, we combine steps 3 and 4 + ** into a single opcode. */ + assert( nVector==1 ); + sqlite3VdbeAddOp3(v, OP_SeekRowid, iTab, destIfFalse, rLhs); + VdbeCoverage(v); + addrTruthOp = sqlite3VdbeAddOp0(v, OP_Goto); /* Return True */ + }else{ + if( destIfFalse==destIfNull ){ + /* Combine Step 3 and Step 5 into a single opcode */ + if( ExprHasProperty(pExpr, EP_Subrtn) ){ + const VdbeOp *pOp = sqlite3VdbeGetOp(v, pExpr->y.sub.iAddr); + assert( pOp->opcode==OP_Once || pParse->nErr ); + if( pOp->opcode==OP_Once && pOp->p3>0 ){ /* tag-202407032019 */ + assert( OptimizationEnabled(pParse->db, SQLITE_BloomFilter) ); + sqlite3VdbeAddOp4Int(v, OP_Filter, pOp->p3, destIfFalse, + rLhs, nVector); VdbeCoverage(v); + } + } + sqlite3VdbeAddOp4Int(v, OP_NotFound, iTab, destIfFalse, + rLhs, nVector); VdbeCoverage(v); + goto sqlite3ExprCodeIN_finished; + } + /* Ordinary Step 3, for the case where FALSE and NULL are distinct */ + addrTruthOp = sqlite3VdbeAddOp4Int(v, OP_Found, iTab, 0, + rLhs, nVector); VdbeCoverage(v); + } + + /* Step 4. If the RHS is known to be non-NULL and we did not find + ** an match on the search above, then the result must be FALSE. + */ + if( rRhsHasNull && nVector==1 ){ + sqlite3VdbeAddOp2(v, OP_NotNull, rRhsHasNull, destIfFalse); + VdbeCoverage(v); + } + + /* Step 5. If we do not care about the difference between NULL and + ** FALSE, then just return false. + */ + if( destIfFalse==destIfNull ) sqlite3VdbeGoto(v, destIfFalse); + + /* Step 6: Loop through rows of the RHS. Compare each row to the LHS. + ** If any comparison is NULL, then the result is NULL. If all + ** comparisons are FALSE then the final result is FALSE. + ** + ** For a scalar LHS, it is sufficient to check just the first row + ** of the RHS. + */ + if( destStep6 ) sqlite3VdbeResolveLabel(v, destStep6); + addrTop = sqlite3VdbeAddOp2(v, OP_Rewind, iTab, destIfFalse); + VdbeCoverage(v); + if( nVector>1 ){ + destNotNull = sqlite3VdbeMakeLabel(pParse); + }else{ + /* For nVector==1, combine steps 6 and 7 by immediately returning + ** FALSE if the first comparison is not NULL */ + destNotNull = destIfFalse; + } + for(i=0; i1 ){ + sqlite3VdbeResolveLabel(v, destNotNull); + sqlite3VdbeAddOp2(v, OP_Next, iTab, addrTop+1); + VdbeCoverage(v); + + /* Step 7: If we reach this point, we know that the result must + ** be false. */ + sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfFalse); + } + + /* Jumps here in order to return true. */ + sqlite3VdbeJumpHere(v, addrTruthOp); + +sqlite3ExprCodeIN_finished: + VdbeComment((v, "end IN expr")); +sqlite3ExprCodeIN_oom_error: + sqlite3DbFree(pParse->db, aiMap); + sqlite3DbFree(pParse->db, zAff); +} +#endif /* SQLITE_OMIT_SUBQUERY */ + +#ifndef SQLITE_OMIT_FLOATING_POINT +/* +** Generate an instruction that will put the floating point +** value described by z[0..n-1] into register iMem. +** +** The z[] string will probably not be zero-terminated. But the +** z[n] character is guaranteed to be something that does not look +** like the continuation of the number. +*/ +static void codeReal(Vdbe *v, const char *z, int negateFlag, int iMem){ + if( ALWAYS(z!=0) ){ + double value; + sqlite3AtoF(z, &value, sqlite3Strlen30(z), SQLITE_UTF8); + assert( !sqlite3IsNaN(value) ); /* The new AtoF never returns NaN */ + if( negateFlag ) value = -value; + sqlite3VdbeAddOp4Dup8(v, OP_Real, 0, iMem, 0, (u8*)&value, P4_REAL); + } +} +#endif + + +/* +** Generate an instruction that will put the integer describe by +** text z[0..n-1] into register iMem. +** +** Expr.u.zToken is always UTF8 and zero-terminated. +*/ +static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){ + Vdbe *v = pParse->pVdbe; + if( pExpr->flags & EP_IntValue ){ + int i = pExpr->u.iValue; + assert( i>=0 ); + if( negFlag ) i = -i; + sqlite3VdbeAddOp2(v, OP_Integer, i, iMem); + }else{ + int c; + i64 value; + const char *z = pExpr->u.zToken; + assert( z!=0 ); + c = sqlite3DecOrHexToI64(z, &value); + if( (c==3 && !negFlag) || (c==2) || (negFlag && value==SMALLEST_INT64)){ +#ifdef SQLITE_OMIT_FLOATING_POINT + sqlite3ErrorMsg(pParse, "oversized integer: %s%#T", negFlag?"-":"",pExpr); +#else +#ifndef SQLITE_OMIT_HEX_INTEGER + if( sqlite3_strnicmp(z,"0x",2)==0 ){ + sqlite3ErrorMsg(pParse, "hex literal too big: %s%#T", + negFlag?"-":"",pExpr); + }else +#endif + { + codeReal(v, z, negFlag, iMem); + } +#endif + }else{ + if( negFlag ){ value = c==3 ? SMALLEST_INT64 : -value; } + sqlite3VdbeAddOp4Dup8(v, OP_Int64, 0, iMem, 0, (u8*)&value, P4_INT64); + } + } +} + + +/* Generate code that will load into register regOut a value that is +** appropriate for the iIdxCol-th column of index pIdx. +*/ +SQLITE_PRIVATE void sqlite3ExprCodeLoadIndexColumn( + Parse *pParse, /* The parsing context */ + Index *pIdx, /* The index whose column is to be loaded */ + int iTabCur, /* Cursor pointing to a table row */ + int iIdxCol, /* The column of the index to be loaded */ + int regOut /* Store the index column value in this register */ +){ + i16 iTabCol = pIdx->aiColumn[iIdxCol]; + if( iTabCol==XN_EXPR ){ + assert( pIdx->aColExpr ); + assert( pIdx->aColExpr->nExpr>iIdxCol ); + pParse->iSelfTab = iTabCur + 1; + sqlite3ExprCodeCopy(pParse, pIdx->aColExpr->a[iIdxCol].pExpr, regOut); + pParse->iSelfTab = 0; + }else{ + sqlite3ExprCodeGetColumnOfTable(pParse->pVdbe, pIdx->pTable, iTabCur, + iTabCol, regOut); + } +} + +#ifndef SQLITE_OMIT_GENERATED_COLUMNS +/* +** Generate code that will compute the value of generated column pCol +** and store the result in register regOut +*/ +SQLITE_PRIVATE void sqlite3ExprCodeGeneratedColumn( + Parse *pParse, /* Parsing context */ + Table *pTab, /* Table containing the generated column */ + Column *pCol, /* The generated column */ + int regOut /* Put the result in this register */ +){ + int iAddr; + Vdbe *v = pParse->pVdbe; + int nErr = pParse->nErr; + assert( v!=0 ); + assert( pParse->iSelfTab!=0 ); + if( pParse->iSelfTab>0 ){ + iAddr = sqlite3VdbeAddOp3(v, OP_IfNullRow, pParse->iSelfTab-1, 0, regOut); + }else{ + iAddr = 0; + } + sqlite3ExprCodeCopy(pParse, sqlite3ColumnExpr(pTab,pCol), regOut); + if( (pCol->colFlags & COLFLAG_VIRTUAL)!=0 + && (pTab->tabFlags & TF_Strict)!=0 + ){ + int p3 = 2+(int)(pCol - pTab->aCol); + sqlite3VdbeAddOp4(v, OP_TypeCheck, regOut, 1, p3, (char*)pTab, P4_TABLE); + }else if( pCol->affinity>=SQLITE_AFF_TEXT ){ + sqlite3VdbeAddOp4(v, OP_Affinity, regOut, 1, 0, &pCol->affinity, 1); + } + if( iAddr ) sqlite3VdbeJumpHere(v, iAddr); + if( pParse->nErr>nErr ) pParse->db->errByteOffset = -1; +} +#endif /* SQLITE_OMIT_GENERATED_COLUMNS */ + +/* +** Generate code to extract the value of the iCol-th column of a table. +*/ +SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable( + Vdbe *v, /* Parsing context */ + Table *pTab, /* The table containing the value */ + int iTabCur, /* The table cursor. Or the PK cursor for WITHOUT ROWID */ + int iCol, /* Index of the column to extract */ + int regOut /* Extract the value into this register */ +){ + Column *pCol; + assert( v!=0 ); + assert( pTab!=0 ); + assert( iCol!=XN_EXPR ); + if( iCol<0 || iCol==pTab->iPKey ){ + sqlite3VdbeAddOp2(v, OP_Rowid, iTabCur, regOut); + VdbeComment((v, "%s.rowid", pTab->zName)); + }else{ + int op; + int x; + if( IsVirtual(pTab) ){ + op = OP_VColumn; + x = iCol; +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + }else if( (pCol = &pTab->aCol[iCol])->colFlags & COLFLAG_VIRTUAL ){ + Parse *pParse = sqlite3VdbeParser(v); + if( pCol->colFlags & COLFLAG_BUSY ){ + sqlite3ErrorMsg(pParse, "generated column loop on \"%s\"", + pCol->zCnName); + }else{ + int savedSelfTab = pParse->iSelfTab; + pCol->colFlags |= COLFLAG_BUSY; + pParse->iSelfTab = iTabCur+1; + sqlite3ExprCodeGeneratedColumn(pParse, pTab, pCol, regOut); + pParse->iSelfTab = savedSelfTab; + pCol->colFlags &= ~COLFLAG_BUSY; + } + return; +#endif + }else if( !HasRowid(pTab) ){ + testcase( iCol!=sqlite3TableColumnToStorage(pTab, iCol) ); + x = sqlite3TableColumnToIndex(sqlite3PrimaryKeyIndex(pTab), iCol); + op = OP_Column; + }else{ + x = sqlite3TableColumnToStorage(pTab,iCol); + testcase( x!=iCol ); + op = OP_Column; + } + sqlite3VdbeAddOp3(v, op, iTabCur, x, regOut); + sqlite3ColumnDefault(v, pTab, iCol, regOut); + } +} + +/* +** Generate code that will extract the iColumn-th column from +** table pTab and store the column value in register iReg. +** +** There must be an open cursor to pTab in iTable when this routine +** is called. If iColumn<0 then code is generated that extracts the rowid. +*/ +SQLITE_PRIVATE int sqlite3ExprCodeGetColumn( + Parse *pParse, /* Parsing and code generating context */ + Table *pTab, /* Description of the table we are reading from */ + int iColumn, /* Index of the table column */ + int iTable, /* The cursor pointing to the table */ + int iReg, /* Store results here */ + u8 p5 /* P5 value for OP_Column + FLAGS */ +){ + assert( pParse->pVdbe!=0 ); + assert( (p5 & (OPFLAG_NOCHNG|OPFLAG_TYPEOFARG|OPFLAG_LENGTHARG))==p5 ); + assert( IsVirtual(pTab) || (p5 & OPFLAG_NOCHNG)==0 ); + sqlite3ExprCodeGetColumnOfTable(pParse->pVdbe, pTab, iTable, iColumn, iReg); + if( p5 ){ + VdbeOp *pOp = sqlite3VdbeGetLastOp(pParse->pVdbe); + if( pOp->opcode==OP_Column ) pOp->p5 = p5; + if( pOp->opcode==OP_VColumn ) pOp->p5 = (p5 & OPFLAG_NOCHNG); + } + return iReg; +} + +/* +** Generate code to move content from registers iFrom...iFrom+nReg-1 +** over to iTo..iTo+nReg-1. +*/ +SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse *pParse, int iFrom, int iTo, int nReg){ + sqlite3VdbeAddOp3(pParse->pVdbe, OP_Move, iFrom, iTo, nReg); +} + +/* +** Convert a scalar expression node to a TK_REGISTER referencing +** register iReg. The caller must ensure that iReg already contains +** the correct value for the expression. +*/ +SQLITE_PRIVATE void sqlite3ExprToRegister(Expr *pExpr, int iReg){ + Expr *p = sqlite3ExprSkipCollateAndLikely(pExpr); + if( NEVER(p==0) ) return; + if( p->op==TK_REGISTER ){ + assert( p->iTable==iReg ); + }else{ + p->op2 = p->op; + p->op = TK_REGISTER; + p->iTable = iReg; + ExprClearProperty(p, EP_Skip); + } +} + +/* +** Evaluate an expression (either a vector or a scalar expression) and store +** the result in contiguous temporary registers. Return the index of +** the first register used to store the result. +** +** If the returned result register is a temporary scalar, then also write +** that register number into *piFreeable. If the returned result register +** is not a temporary or if the expression is a vector set *piFreeable +** to 0. +*/ +static int exprCodeVector(Parse *pParse, Expr *p, int *piFreeable){ + int iResult; + int nResult = sqlite3ExprVectorSize(p); + if( nResult==1 ){ + iResult = sqlite3ExprCodeTemp(pParse, p, piFreeable); + }else{ + *piFreeable = 0; + if( p->op==TK_SELECT ){ +#if SQLITE_OMIT_SUBQUERY + iResult = 0; +#else + iResult = sqlite3CodeSubselect(pParse, p); +#endif + }else{ + int i; + iResult = pParse->nMem+1; + pParse->nMem += nResult; + assert( ExprUseXList(p) ); + for(i=0; ix.pList->a[i].pExpr, i+iResult); + } + } + } + return iResult; +} + +/* +** If the last opcode is a OP_Copy, then set the do-not-merge flag (p5) +** so that a subsequent copy will not be merged into this one. +*/ +static void setDoNotMergeFlagOnCopy(Vdbe *v){ + if( sqlite3VdbeGetLastOp(v)->opcode==OP_Copy ){ + sqlite3VdbeChangeP5(v, 1); /* Tag trailing OP_Copy as not mergeable */ + } +} + +/* +** Generate code to implement special SQL functions that are implemented +** in-line rather than by using the usual callbacks. +*/ +static int exprCodeInlineFunction( + Parse *pParse, /* Parsing context */ + ExprList *pFarg, /* List of function arguments */ + int iFuncId, /* Function ID. One of the INTFUNC_... values */ + int target /* Store function result in this register */ +){ + int nFarg; + Vdbe *v = pParse->pVdbe; + assert( v!=0 ); + assert( pFarg!=0 ); + nFarg = pFarg->nExpr; + assert( nFarg>0 ); /* All in-line functions have at least one argument */ + switch( iFuncId ){ + case INLINEFUNC_coalesce: { + /* Attempt a direct implementation of the built-in COALESCE() and + ** IFNULL() functions. This avoids unnecessary evaluation of + ** arguments past the first non-NULL argument. + */ + int endCoalesce = sqlite3VdbeMakeLabel(pParse); + int i; + assert( nFarg>=2 ); + sqlite3ExprCode(pParse, pFarg->a[0].pExpr, target); + for(i=1; ia[i].pExpr, target); + } + setDoNotMergeFlagOnCopy(v); + sqlite3VdbeResolveLabel(v, endCoalesce); + break; + } + case INLINEFUNC_iif: { + Expr caseExpr; + memset(&caseExpr, 0, sizeof(caseExpr)); + caseExpr.op = TK_CASE; + caseExpr.x.pList = pFarg; + return sqlite3ExprCodeTarget(pParse, &caseExpr, target); + } +#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC + case INLINEFUNC_sqlite_offset: { + Expr *pArg = pFarg->a[0].pExpr; + if( pArg->op==TK_COLUMN && pArg->iTable>=0 ){ + sqlite3VdbeAddOp3(v, OP_Offset, pArg->iTable, pArg->iColumn, target); + }else{ + sqlite3VdbeAddOp2(v, OP_Null, 0, target); + } + break; + } +#endif + default: { + /* The UNLIKELY() function is a no-op. The result is the value + ** of the first argument. + */ + assert( nFarg==1 || nFarg==2 ); + target = sqlite3ExprCodeTarget(pParse, pFarg->a[0].pExpr, target); + break; + } + + /*********************************************************************** + ** Test-only SQL functions that are only usable if enabled + ** via SQLITE_TESTCTRL_INTERNAL_FUNCTIONS + */ +#if !defined(SQLITE_UNTESTABLE) + case INLINEFUNC_expr_compare: { + /* Compare two expressions using sqlite3ExprCompare() */ + assert( nFarg==2 ); + sqlite3VdbeAddOp2(v, OP_Integer, + sqlite3ExprCompare(0,pFarg->a[0].pExpr, pFarg->a[1].pExpr,-1), + target); + break; + } + + case INLINEFUNC_expr_implies_expr: { + /* Compare two expressions using sqlite3ExprImpliesExpr() */ + assert( nFarg==2 ); + sqlite3VdbeAddOp2(v, OP_Integer, + sqlite3ExprImpliesExpr(pParse,pFarg->a[0].pExpr, pFarg->a[1].pExpr,-1), + target); + break; + } + + case INLINEFUNC_implies_nonnull_row: { + /* Result of sqlite3ExprImpliesNonNullRow() */ + Expr *pA1; + assert( nFarg==2 ); + pA1 = pFarg->a[1].pExpr; + if( pA1->op==TK_COLUMN ){ + sqlite3VdbeAddOp2(v, OP_Integer, + sqlite3ExprImpliesNonNullRow(pFarg->a[0].pExpr,pA1->iTable,1), + target); + }else{ + sqlite3VdbeAddOp2(v, OP_Null, 0, target); + } + break; + } + + case INLINEFUNC_affinity: { + /* The AFFINITY() function evaluates to a string that describes + ** the type affinity of the argument. This is used for testing of + ** the SQLite type logic. + */ + const char *azAff[] = { "blob", "text", "numeric", "integer", + "real", "flexnum" }; + char aff; + assert( nFarg==1 ); + aff = sqlite3ExprAffinity(pFarg->a[0].pExpr); + assert( aff<=SQLITE_AFF_NONE + || (aff>=SQLITE_AFF_BLOB && aff<=SQLITE_AFF_FLEXNUM) ); + sqlite3VdbeLoadString(v, target, + (aff<=SQLITE_AFF_NONE) ? "none" : azAff[aff-SQLITE_AFF_BLOB]); + break; + } +#endif /* !defined(SQLITE_UNTESTABLE) */ + } + return target; +} + +/* +** Expression Node callback for sqlite3ExprCanReturnSubtype(). +** +** Only a function call is able to return a subtype. So if the node +** is not a function call, return WRC_Prune immediately. +** +** A function call is able to return a subtype if it has the +** SQLITE_RESULT_SUBTYPE property. +** +** Assume that every function is able to pass-through a subtype from +** one of its argument (using sqlite3_result_value()). Most functions +** are not this way, but we don't have a mechanism to distinguish those +** that are from those that are not, so assume they all work this way. +** That means that if one of its arguments is another function and that +** other function is able to return a subtype, then this function is +** able to return a subtype. +*/ +static int exprNodeCanReturnSubtype(Walker *pWalker, Expr *pExpr){ + int n; + FuncDef *pDef; + sqlite3 *db; + if( pExpr->op!=TK_FUNCTION ){ + return WRC_Prune; + } + assert( ExprUseXList(pExpr) ); + db = pWalker->pParse->db; + n = ALWAYS(pExpr->x.pList) ? pExpr->x.pList->nExpr : 0; + pDef = sqlite3FindFunction(db, pExpr->u.zToken, n, ENC(db), 0); + if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_RESULT_SUBTYPE)!=0 ){ + pWalker->eCode = 1; + return WRC_Prune; + } + return WRC_Continue; +} + +/* +** Return TRUE if expression pExpr is able to return a subtype. +** +** A TRUE return does not guarantee that a subtype will be returned. +** It only indicates that a subtype return is possible. False positives +** are acceptable as they only disable an optimization. False negatives, +** on the other hand, can lead to incorrect answers. +*/ +static int sqlite3ExprCanReturnSubtype(Parse *pParse, Expr *pExpr){ + Walker w; + memset(&w, 0, sizeof(w)); + w.pParse = pParse; + w.xExprCallback = exprNodeCanReturnSubtype; + sqlite3WalkExpr(&w, pExpr); + return w.eCode; +} + + +/* +** Check to see if pExpr is one of the indexed expressions on pParse->pIdxEpr. +** If it is, then resolve the expression by reading from the index and +** return the register into which the value has been read. If pExpr is +** not an indexed expression, then return negative. +*/ +static SQLITE_NOINLINE int sqlite3IndexedExprLookup( + Parse *pParse, /* The parsing context */ + Expr *pExpr, /* The expression to potentially bypass */ + int target /* Where to store the result of the expression */ +){ + IndexedExpr *p; + Vdbe *v; + for(p=pParse->pIdxEpr; p; p=p->pIENext){ + u8 exprAff; + int iDataCur = p->iDataCur; + if( iDataCur<0 ) continue; + if( pParse->iSelfTab ){ + if( p->iDataCur!=pParse->iSelfTab-1 ) continue; + iDataCur = -1; + } + if( sqlite3ExprCompare(0, pExpr, p->pExpr, iDataCur)!=0 ) continue; + assert( p->aff>=SQLITE_AFF_BLOB && p->aff<=SQLITE_AFF_NUMERIC ); + exprAff = sqlite3ExprAffinity(pExpr); + if( (exprAff<=SQLITE_AFF_BLOB && p->aff!=SQLITE_AFF_BLOB) + || (exprAff==SQLITE_AFF_TEXT && p->aff!=SQLITE_AFF_TEXT) + || (exprAff>=SQLITE_AFF_NUMERIC && p->aff!=SQLITE_AFF_NUMERIC) + ){ + /* Affinity mismatch on a generated column */ + continue; + } + + + /* Functions that might set a subtype should not be replaced by the + ** value taken from an expression index if they are themselves an + ** argument to another scalar function or aggregate. + ** https://sqlite.org/forum/forumpost/68d284c86b082c3e */ + if( ExprHasProperty(pExpr, EP_SubtArg) + && sqlite3ExprCanReturnSubtype(pParse, pExpr) + ){ + continue; + } + + v = pParse->pVdbe; + assert( v!=0 ); + if( p->bMaybeNullRow ){ + /* If the index is on a NULL row due to an outer join, then we + ** cannot extract the value from the index. The value must be + ** computed using the original expression. */ + int addr = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeAddOp3(v, OP_IfNullRow, p->iIdxCur, addr+3, target); + VdbeCoverage(v); + sqlite3VdbeAddOp3(v, OP_Column, p->iIdxCur, p->iIdxCol, target); + VdbeComment((v, "%s expr-column %d", p->zIdxName, p->iIdxCol)); + sqlite3VdbeGoto(v, 0); + p = pParse->pIdxEpr; + pParse->pIdxEpr = 0; + sqlite3ExprCode(pParse, pExpr, target); + pParse->pIdxEpr = p; + sqlite3VdbeJumpHere(v, addr+2); + }else{ + sqlite3VdbeAddOp3(v, OP_Column, p->iIdxCur, p->iIdxCol, target); + VdbeComment((v, "%s expr-column %d", p->zIdxName, p->iIdxCol)); + } + return target; + } + return -1; /* Not found */ +} + + +/* +** Expression pExpr is guaranteed to be a TK_COLUMN or equivalent. This +** function checks the Parse.pIdxPartExpr list to see if this column +** can be replaced with a constant value. If so, it generates code to +** put the constant value in a register (ideally, but not necessarily, +** register iTarget) and returns the register number. +** +** Or, if the TK_COLUMN cannot be replaced by a constant, zero is +** returned. +*/ +static int exprPartidxExprLookup(Parse *pParse, Expr *pExpr, int iTarget){ + IndexedExpr *p; + for(p=pParse->pIdxPartExpr; p; p=p->pIENext){ + if( pExpr->iColumn==p->iIdxCol && pExpr->iTable==p->iDataCur ){ + Vdbe *v = pParse->pVdbe; + int addr = 0; + int ret; + + if( p->bMaybeNullRow ){ + addr = sqlite3VdbeAddOp1(v, OP_IfNullRow, p->iIdxCur); + } + ret = sqlite3ExprCodeTarget(pParse, p->pExpr, iTarget); + sqlite3VdbeAddOp4(pParse->pVdbe, OP_Affinity, ret, 1, 0, + (const char*)&p->aff, 1); + if( addr ){ + sqlite3VdbeJumpHere(v, addr); + sqlite3VdbeChangeP3(v, addr, ret); + } + return ret; + } + } + return 0; +} + +/* +** Generate code that evaluates an AND or OR operator leaving a +** boolean result in a register. pExpr is the AND/OR expression. +** Store the result in the "target" register. Use short-circuit +** evaluation to avoid computing both operands, if possible. +** +** The code generated might require the use of a temporary register. +** If it does, then write the number of that temporary register +** into *pTmpReg. If not, leave *pTmpReg unchanged. +*/ +static SQLITE_NOINLINE int exprCodeTargetAndOr( + Parse *pParse, /* Parsing context */ + Expr *pExpr, /* AND or OR expression to be coded */ + int target, /* Put result in this register, guaranteed */ + int *pTmpReg /* Write a temporary register here */ +){ + int op; /* The opcode. TK_AND or TK_OR */ + int skipOp; /* Opcode for the branch that skips one operand */ + int addrSkip; /* Branch instruction that skips one of the operands */ + int regSS = 0; /* Register holding computed operand when other omitted */ + int r1, r2; /* Registers for left and right operands, respectively */ + Expr *pAlt; /* Alternative, simplified expression */ + Vdbe *v; /* statement being coded */ + + assert( pExpr!=0 ); + op = pExpr->op; + assert( op==TK_AND || op==TK_OR ); + assert( TK_AND==OP_And ); testcase( op==TK_AND ); + assert( TK_OR==OP_Or ); testcase( op==TK_OR ); + assert( pParse->pVdbe!=0 ); + v = pParse->pVdbe; + pAlt = sqlite3ExprSimplifiedAndOr(pExpr); + if( pAlt!=pExpr ){ + r1 = sqlite3ExprCodeTarget(pParse, pAlt, target); + sqlite3VdbeAddOp3(v, OP_And, r1, r1, target); + return target; + } + skipOp = op==TK_AND ? OP_IfNot : OP_If; + if( exprEvalRhsFirst(pExpr) ){ + /* Compute the right operand first. Skip the computation of the left + ** operand if the right operand fully determines the result */ + r2 = regSS = sqlite3ExprCodeTarget(pParse, pExpr->pRight, target); + addrSkip = sqlite3VdbeAddOp1(v, skipOp, r2); + VdbeComment((v, "skip left operand")); + VdbeCoverage(v); + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, pTmpReg); + }else{ + /* Compute the left operand first */ + r1 = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target); + if( ExprHasProperty(pExpr->pRight, EP_Subquery) ){ + /* Skip over the computation of the right operand if the right + ** operand is a subquery and the left operand completely determines + ** the result */ + regSS = r1; + addrSkip = sqlite3VdbeAddOp1(v, skipOp, r1); + VdbeComment((v, "skip right operand")); + VdbeCoverage(v); + }else{ + addrSkip = regSS = 0; + } + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, pTmpReg); + } + sqlite3VdbeAddOp3(v, op, r2, r1, target); + testcase( (*pTmpReg)==0 ); + if( addrSkip ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, sqlite3VdbeCurrentAddr(v)+2); + sqlite3VdbeJumpHere(v, addrSkip); + sqlite3VdbeAddOp3(v, OP_Or, regSS, regSS, target); + VdbeComment((v, "short-circut value")); + } + return target; +} + + + +/* +** Generate code into the current Vdbe to evaluate the given +** expression. Attempt to store the results in register "target". +** Return the register where results are stored. +** +** With this routine, there is no guarantee that results will +** be stored in target. The result might be stored in some other +** register if it is convenient to do so. The calling function +** must check the return code and move the results to the desired +** register. +*/ +SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target){ + Vdbe *v = pParse->pVdbe; /* The VM under construction */ + int op; /* The opcode being coded */ + int inReg = target; /* Results stored in register inReg */ + int regFree1 = 0; /* If non-zero free this temporary register */ + int regFree2 = 0; /* If non-zero free this temporary register */ + int r1, r2; /* Various register numbers */ + Expr tempX; /* Temporary expression node */ + int p5 = 0; + + assert( target>0 && target<=pParse->nMem ); + assert( v!=0 ); + +expr_code_doover: + if( pExpr==0 ){ + op = TK_NULL; + }else if( pParse->pIdxEpr!=0 + && !ExprHasProperty(pExpr, EP_Leaf) + && (r1 = sqlite3IndexedExprLookup(pParse, pExpr, target))>=0 + ){ + return r1; + }else{ + assert( !ExprHasVVAProperty(pExpr,EP_Immutable) ); + op = pExpr->op; + } + assert( op!=TK_ORDER ); + switch( op ){ + case TK_AGG_COLUMN: { + AggInfo *pAggInfo = pExpr->pAggInfo; + struct AggInfo_col *pCol; + assert( pAggInfo!=0 ); + assert( pExpr->iAgg>=0 ); + if( pExpr->iAgg>=pAggInfo->nColumn ){ + /* Happens when the left table of a RIGHT JOIN is null and + ** is using an expression index */ + sqlite3VdbeAddOp2(v, OP_Null, 0, target); +#ifdef SQLITE_VDBE_COVERAGE + /* Verify that the OP_Null above is exercised by tests + ** tag-20230325-2 */ + sqlite3VdbeAddOp3(v, OP_NotNull, target, 1, 20230325); + VdbeCoverageNeverTaken(v); +#endif + break; + } + pCol = &pAggInfo->aCol[pExpr->iAgg]; + if( !pAggInfo->directMode ){ + return AggInfoColumnReg(pAggInfo, pExpr->iAgg); + }else if( pAggInfo->useSortingIdx ){ + Table *pTab = pCol->pTab; + sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab, + pCol->iSorterColumn, target); + if( pTab==0 ){ + /* No comment added */ + }else if( pCol->iColumn<0 ){ + VdbeComment((v,"%s.rowid",pTab->zName)); + }else{ + VdbeComment((v,"%s.%s", + pTab->zName, pTab->aCol[pCol->iColumn].zCnName)); + if( pTab->aCol[pCol->iColumn].affinity==SQLITE_AFF_REAL ){ + sqlite3VdbeAddOp1(v, OP_RealAffinity, target); + } + } + return target; + }else if( pExpr->y.pTab==0 ){ + /* This case happens when the argument to an aggregate function + ** is rewritten by aggregateConvertIndexedExprRefToColumn() */ + sqlite3VdbeAddOp3(v, OP_Column, pExpr->iTable, pExpr->iColumn, target); + return target; + } + /* Otherwise, fall thru into the TK_COLUMN case */ + /* no break */ deliberate_fall_through + } + case TK_COLUMN: { + int iTab = pExpr->iTable; + int iReg; + if( ExprHasProperty(pExpr, EP_FixedCol) ){ + /* This COLUMN expression is really a constant due to WHERE clause + ** constraints, and that constant is coded by the pExpr->pLeft + ** expression. However, make sure the constant has the correct + ** datatype by applying the Affinity of the table column to the + ** constant. + */ + int aff; + iReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft,target); + assert( ExprUseYTab(pExpr) ); + assert( pExpr->y.pTab!=0 ); + aff = sqlite3TableColumnAffinity(pExpr->y.pTab, pExpr->iColumn); + if( aff>SQLITE_AFF_BLOB ){ + static const char zAff[] = "B\000C\000D\000E\000F"; + assert( SQLITE_AFF_BLOB=='A' ); + assert( SQLITE_AFF_TEXT=='B' ); + sqlite3VdbeAddOp4(v, OP_Affinity, iReg, 1, 0, + &zAff[(aff-'B')*2], P4_STATIC); + } + return iReg; + } + if( iTab<0 ){ + if( pParse->iSelfTab<0 ){ + /* Other columns in the same row for CHECK constraints or + ** generated columns or for inserting into partial index. + ** The row is unpacked into registers beginning at + ** 0-(pParse->iSelfTab). The rowid (if any) is in a register + ** immediately prior to the first column. + */ + Column *pCol; + Table *pTab; + int iSrc; + int iCol = pExpr->iColumn; + assert( ExprUseYTab(pExpr) ); + pTab = pExpr->y.pTab; + assert( pTab!=0 ); + assert( iCol>=XN_ROWID ); + assert( iColnCol ); + if( iCol<0 ){ + return -1-pParse->iSelfTab; + } + pCol = pTab->aCol + iCol; + testcase( iCol!=sqlite3TableColumnToStorage(pTab,iCol) ); + iSrc = sqlite3TableColumnToStorage(pTab, iCol) - pParse->iSelfTab; +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + if( pCol->colFlags & COLFLAG_GENERATED ){ + if( pCol->colFlags & COLFLAG_BUSY ){ + sqlite3ErrorMsg(pParse, "generated column loop on \"%s\"", + pCol->zCnName); + return 0; + } + pCol->colFlags |= COLFLAG_BUSY; + if( pCol->colFlags & COLFLAG_NOTAVAIL ){ + sqlite3ExprCodeGeneratedColumn(pParse, pTab, pCol, iSrc); + } + pCol->colFlags &= ~(COLFLAG_BUSY|COLFLAG_NOTAVAIL); + return iSrc; + }else +#endif /* SQLITE_OMIT_GENERATED_COLUMNS */ + if( pCol->affinity==SQLITE_AFF_REAL ){ + sqlite3VdbeAddOp2(v, OP_SCopy, iSrc, target); + sqlite3VdbeAddOp1(v, OP_RealAffinity, target); + return target; + }else{ + return iSrc; + } + }else{ + /* Coding an expression that is part of an index where column names + ** in the index refer to the table to which the index belongs */ + iTab = pParse->iSelfTab - 1; + } + } + else if( pParse->pIdxPartExpr + && 0!=(r1 = exprPartidxExprLookup(pParse, pExpr, target)) + ){ + return r1; + } + assert( ExprUseYTab(pExpr) ); + assert( pExpr->y.pTab!=0 ); + iReg = sqlite3ExprCodeGetColumn(pParse, pExpr->y.pTab, + pExpr->iColumn, iTab, target, + pExpr->op2); + return iReg; + } + case TK_INTEGER: { + codeInteger(pParse, pExpr, 0, target); + return target; + } + case TK_TRUEFALSE: { + sqlite3VdbeAddOp2(v, OP_Integer, sqlite3ExprTruthValue(pExpr), target); + return target; + } +#ifndef SQLITE_OMIT_FLOATING_POINT + case TK_FLOAT: { + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + codeReal(v, pExpr->u.zToken, 0, target); + return target; + } +#endif + case TK_STRING: { + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + sqlite3VdbeLoadString(v, target, pExpr->u.zToken); + return target; + } + case TK_NULLS: { + /* Set a range of registers to NULL. pExpr->y.nReg registers starting + ** with target */ + sqlite3VdbeAddOp3(v, OP_Null, 0, target, target + pExpr->y.nReg - 1); + return target; + } + default: { + /* Make NULL the default case so that if a bug causes an illegal + ** Expr node to be passed into this function, it will be handled + ** sanely and not crash. But keep the assert() to bring the problem + ** to the attention of the developers. */ + assert( op==TK_NULL || op==TK_ERROR || pParse->db->mallocFailed ); + sqlite3VdbeAddOp2(v, OP_Null, 0, target); + return target; + } +#ifndef SQLITE_OMIT_BLOB_LITERAL + case TK_BLOB: { + int n; + const char *z; + char *zBlob; + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' ); + assert( pExpr->u.zToken[1]=='\'' ); + z = &pExpr->u.zToken[2]; + n = sqlite3Strlen30(z) - 1; + assert( z[n]=='\'' ); + zBlob = sqlite3HexToBlob(sqlite3VdbeDb(v), z, n); + sqlite3VdbeAddOp4(v, OP_Blob, n/2, target, 0, zBlob, P4_DYNAMIC); + return target; + } +#endif + case TK_VARIABLE: { + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + assert( pExpr->u.zToken!=0 ); + assert( pExpr->u.zToken[0]!=0 ); + sqlite3VdbeAddOp2(v, OP_Variable, pExpr->iColumn, target); + return target; + } + case TK_REGISTER: { + return pExpr->iTable; + } +#ifndef SQLITE_OMIT_CAST + case TK_CAST: { + /* Expressions of the form: CAST(pLeft AS token) */ + sqlite3ExprCode(pParse, pExpr->pLeft, target); + assert( inReg==target ); + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + sqlite3VdbeAddOp2(v, OP_Cast, target, + sqlite3AffinityType(pExpr->u.zToken, 0)); + return inReg; + } +#endif /* SQLITE_OMIT_CAST */ + case TK_IS: + case TK_ISNOT: + op = (op==TK_IS) ? TK_EQ : TK_NE; + p5 = SQLITE_NULLEQ; + /* fall-through */ + case TK_LT: + case TK_LE: + case TK_GT: + case TK_GE: + case TK_NE: + case TK_EQ: { + Expr *pLeft = pExpr->pLeft; + int addrIsNull = 0; + if( sqlite3ExprIsVector(pLeft) ){ + codeVectorCompare(pParse, pExpr, target, op, p5); + }else{ + if( ExprHasProperty(pExpr, EP_Subquery) && p5!=SQLITE_NULLEQ ){ + addrIsNull = exprComputeOperands(pParse, pExpr, + &r1, &r2, ®Free1, ®Free2); + }else{ + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + } + sqlite3VdbeAddOp2(v, OP_Integer, 1, inReg); + codeCompare(pParse, pLeft, pExpr->pRight, op, r1, r2, + sqlite3VdbeCurrentAddr(v)+2, p5, + ExprHasProperty(pExpr,EP_Commuted)); + assert(TK_LT==OP_Lt); testcase(op==OP_Lt); VdbeCoverageIf(v,op==OP_Lt); + assert(TK_LE==OP_Le); testcase(op==OP_Le); VdbeCoverageIf(v,op==OP_Le); + assert(TK_GT==OP_Gt); testcase(op==OP_Gt); VdbeCoverageIf(v,op==OP_Gt); + assert(TK_GE==OP_Ge); testcase(op==OP_Ge); VdbeCoverageIf(v,op==OP_Ge); + assert(TK_EQ==OP_Eq); testcase(op==OP_Eq); VdbeCoverageIf(v,op==OP_Eq); + assert(TK_NE==OP_Ne); testcase(op==OP_Ne); VdbeCoverageIf(v,op==OP_Ne); + if( p5==SQLITE_NULLEQ ){ + sqlite3VdbeAddOp2(v, OP_Integer, 0, inReg); + }else{ + sqlite3VdbeAddOp3(v, OP_ZeroOrNull, r1, inReg, r2); + if( addrIsNull ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, sqlite3VdbeCurrentAddr(v)+2); + sqlite3VdbeJumpHere(v, addrIsNull); + sqlite3VdbeAddOp2(v, OP_Null, 0, inReg); + } + } + testcase( regFree1==0 ); + testcase( regFree2==0 ); + } + break; + } + case TK_AND: + case TK_OR: { + inReg = exprCodeTargetAndOr(pParse, pExpr, target, ®Free1); + break; + } + case TK_PLUS: + case TK_STAR: + case TK_MINUS: + case TK_REM: + case TK_BITAND: + case TK_BITOR: + case TK_SLASH: + case TK_LSHIFT: + case TK_RSHIFT: + case TK_CONCAT: { + int addrIsNull; + assert( TK_PLUS==OP_Add ); testcase( op==TK_PLUS ); + assert( TK_MINUS==OP_Subtract ); testcase( op==TK_MINUS ); + assert( TK_REM==OP_Remainder ); testcase( op==TK_REM ); + assert( TK_BITAND==OP_BitAnd ); testcase( op==TK_BITAND ); + assert( TK_BITOR==OP_BitOr ); testcase( op==TK_BITOR ); + assert( TK_SLASH==OP_Divide ); testcase( op==TK_SLASH ); + assert( TK_LSHIFT==OP_ShiftLeft ); testcase( op==TK_LSHIFT ); + assert( TK_RSHIFT==OP_ShiftRight ); testcase( op==TK_RSHIFT ); + assert( TK_CONCAT==OP_Concat ); testcase( op==TK_CONCAT ); + if( ExprHasProperty(pExpr, EP_Subquery) ){ + addrIsNull = exprComputeOperands(pParse, pExpr, + &r1, &r2, ®Free1, ®Free2); + }else{ + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + addrIsNull = 0; + } + sqlite3VdbeAddOp3(v, op, r2, r1, target); + testcase( regFree1==0 ); + testcase( regFree2==0 ); + if( addrIsNull ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, sqlite3VdbeCurrentAddr(v)+2); + sqlite3VdbeJumpHere(v, addrIsNull); + sqlite3VdbeAddOp2(v, OP_Null, 0, target); + VdbeComment((v, "short-circut value")); + } + break; + } + case TK_UMINUS: { + Expr *pLeft = pExpr->pLeft; + assert( pLeft ); + if( pLeft->op==TK_INTEGER ){ + codeInteger(pParse, pLeft, 1, target); + return target; +#ifndef SQLITE_OMIT_FLOATING_POINT + }else if( pLeft->op==TK_FLOAT ){ + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + codeReal(v, pLeft->u.zToken, 1, target); + return target; +#endif + }else{ + tempX.op = TK_INTEGER; + tempX.flags = EP_IntValue|EP_TokenOnly; + tempX.u.iValue = 0; + ExprClearVVAProperties(&tempX); + r1 = sqlite3ExprCodeTemp(pParse, &tempX, ®Free1); + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free2); + sqlite3VdbeAddOp3(v, OP_Subtract, r2, r1, target); + testcase( regFree2==0 ); + } + break; + } + case TK_BITNOT: + case TK_NOT: { + assert( TK_BITNOT==OP_BitNot ); testcase( op==TK_BITNOT ); + assert( TK_NOT==OP_Not ); testcase( op==TK_NOT ); + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + testcase( regFree1==0 ); + sqlite3VdbeAddOp2(v, op, r1, inReg); + break; + } + case TK_TRUTH: { + int isTrue; /* IS TRUE or IS NOT TRUE */ + int bNormal; /* IS TRUE or IS FALSE */ + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + testcase( regFree1==0 ); + isTrue = sqlite3ExprTruthValue(pExpr->pRight); + bNormal = pExpr->op2==TK_IS; + testcase( isTrue && bNormal); + testcase( !isTrue && bNormal); + sqlite3VdbeAddOp4Int(v, OP_IsTrue, r1, inReg, !isTrue, isTrue ^ bNormal); + break; + } + case TK_ISNULL: + case TK_NOTNULL: { + int addr; + assert( TK_ISNULL==OP_IsNull ); testcase( op==TK_ISNULL ); + assert( TK_NOTNULL==OP_NotNull ); testcase( op==TK_NOTNULL ); + sqlite3VdbeAddOp2(v, OP_Integer, 1, target); + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + testcase( regFree1==0 ); + addr = sqlite3VdbeAddOp1(v, op, r1); + VdbeCoverageIf(v, op==TK_ISNULL); + VdbeCoverageIf(v, op==TK_NOTNULL); + sqlite3VdbeAddOp2(v, OP_Integer, 0, target); + sqlite3VdbeJumpHere(v, addr); + break; + } + case TK_AGG_FUNCTION: { + AggInfo *pInfo = pExpr->pAggInfo; + if( pInfo==0 + || NEVER(pExpr->iAgg<0) + || NEVER(pExpr->iAgg>=pInfo->nFunc) + ){ + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + sqlite3ErrorMsg(pParse, "misuse of aggregate: %#T()", pExpr); + }else{ + return AggInfoFuncReg(pInfo, pExpr->iAgg); + } + break; + } + case TK_FUNCTION: { + ExprList *pFarg; /* List of function arguments */ + int nFarg; /* Number of function arguments */ + FuncDef *pDef; /* The function definition object */ + const char *zId; /* The function name */ + u32 constMask = 0; /* Mask of function arguments that are constant */ + int i; /* Loop counter */ + sqlite3 *db = pParse->db; /* The database connection */ + u8 enc = ENC(db); /* The text encoding used by this database */ + CollSeq *pColl = 0; /* A collating sequence */ + +#ifndef SQLITE_OMIT_WINDOWFUNC + if( ExprHasProperty(pExpr, EP_WinFunc) ){ + return pExpr->y.pWin->regResult; + } +#endif + + if( ConstFactorOk(pParse) + && sqlite3ExprIsConstantNotJoin(pParse,pExpr) + ){ + /* SQL functions can be expensive. So try to avoid running them + ** multiple times if we know they always give the same result */ + return sqlite3ExprCodeRunJustOnce(pParse, pExpr, -1); + } + assert( !ExprHasProperty(pExpr, EP_TokenOnly) ); + assert( ExprUseXList(pExpr) ); + pFarg = pExpr->x.pList; + nFarg = pFarg ? pFarg->nExpr : 0; + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + zId = pExpr->u.zToken; + pDef = sqlite3FindFunction(db, zId, nFarg, enc, 0); +#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION + if( pDef==0 && pParse->explain ){ + pDef = sqlite3FindFunction(db, "unknown", nFarg, enc, 0); + } +#endif + if( pDef==0 || pDef->xFinalize!=0 ){ + sqlite3ErrorMsg(pParse, "unknown function: %#T()", pExpr); + break; + } + if( (pDef->funcFlags & SQLITE_FUNC_INLINE)!=0 && ALWAYS(pFarg!=0) ){ + assert( (pDef->funcFlags & SQLITE_FUNC_UNSAFE)==0 ); + assert( (pDef->funcFlags & SQLITE_FUNC_DIRECT)==0 ); + return exprCodeInlineFunction(pParse, pFarg, + SQLITE_PTR_TO_INT(pDef->pUserData), target); + }else if( pDef->funcFlags & (SQLITE_FUNC_DIRECT|SQLITE_FUNC_UNSAFE) ){ + sqlite3ExprFunctionUsable(pParse, pExpr, pDef); + } + + for(i=0; ia[i].pExpr) ){ + testcase( i==31 ); + constMask |= MASKBIT32(i); + } + if( (pDef->funcFlags & SQLITE_FUNC_NEEDCOLL)!=0 && !pColl ){ + pColl = sqlite3ExprCollSeq(pParse, pFarg->a[i].pExpr); + } + } + if( pFarg ){ + if( constMask ){ + r1 = pParse->nMem+1; + pParse->nMem += nFarg; + }else{ + r1 = sqlite3GetTempRange(pParse, nFarg); + } + + /* For length() and typeof() and octet_length() functions, + ** set the P5 parameter to the OP_Column opcode to OPFLAG_LENGTHARG + ** or OPFLAG_TYPEOFARG or OPFLAG_BYTELENARG respectively, to avoid + ** unnecessary data loading. + */ + if( (pDef->funcFlags & (SQLITE_FUNC_LENGTH|SQLITE_FUNC_TYPEOF))!=0 ){ + u8 exprOp; + assert( nFarg==1 ); + assert( pFarg->a[0].pExpr!=0 ); + exprOp = pFarg->a[0].pExpr->op; + if( exprOp==TK_COLUMN || exprOp==TK_AGG_COLUMN ){ + assert( SQLITE_FUNC_LENGTH==OPFLAG_LENGTHARG ); + assert( SQLITE_FUNC_TYPEOF==OPFLAG_TYPEOFARG ); + assert( SQLITE_FUNC_BYTELEN==OPFLAG_BYTELENARG ); + assert( (OPFLAG_LENGTHARG|OPFLAG_TYPEOFARG)==OPFLAG_BYTELENARG ); + testcase( (pDef->funcFlags & OPFLAG_BYTELENARG)==OPFLAG_LENGTHARG ); + testcase( (pDef->funcFlags & OPFLAG_BYTELENARG)==OPFLAG_TYPEOFARG ); + testcase( (pDef->funcFlags & OPFLAG_BYTELENARG)==OPFLAG_BYTELENARG); + pFarg->a[0].pExpr->op2 = pDef->funcFlags & OPFLAG_BYTELENARG; + } + } + + sqlite3ExprCodeExprList(pParse, pFarg, r1, 0, SQLITE_ECEL_FACTOR); + }else{ + r1 = 0; + } +#ifndef SQLITE_OMIT_VIRTUALTABLE + /* Possibly overload the function if the first argument is + ** a virtual table column. + ** + ** For infix functions (LIKE, GLOB, REGEXP, and MATCH) use the + ** second argument, not the first, as the argument to test to + ** see if it is a column in a virtual table. This is done because + ** the left operand of infix functions (the operand we want to + ** control overloading) ends up as the second argument to the + ** function. The expression "A glob B" is equivalent to + ** "glob(B,A). We want to use the A in "A glob B" to test + ** for function overloading. But we use the B term in "glob(B,A)". + */ + if( nFarg>=2 && ExprHasProperty(pExpr, EP_InfixFunc) ){ + pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[1].pExpr); + }else if( nFarg>0 ){ + pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[0].pExpr); + } +#endif + if( pDef->funcFlags & SQLITE_FUNC_NEEDCOLL ){ + if( !pColl ) pColl = db->pDfltColl; + sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ); + } + sqlite3VdbeAddFunctionCall(pParse, constMask, r1, target, nFarg, + pDef, pExpr->op2); + if( nFarg ){ + if( constMask==0 ){ + sqlite3ReleaseTempRange(pParse, r1, nFarg); + }else{ + sqlite3VdbeReleaseRegisters(pParse, r1, nFarg, constMask, 1); + } + } + return target; + } +#ifndef SQLITE_OMIT_SUBQUERY + case TK_EXISTS: + case TK_SELECT: { + int nCol; + testcase( op==TK_EXISTS ); + testcase( op==TK_SELECT ); + if( pParse->db->mallocFailed ){ + return 0; + }else if( op==TK_SELECT + && ALWAYS( ExprUseXSelect(pExpr) ) + && (nCol = pExpr->x.pSelect->pEList->nExpr)!=1 + ){ + sqlite3SubselectError(pParse, nCol, 1); + }else{ + return sqlite3CodeSubselect(pParse, pExpr); + } + break; + } + case TK_SELECT_COLUMN: { + int n; + Expr *pLeft = pExpr->pLeft; + if( pLeft->iTable==0 || pParse->withinRJSubrtn > pLeft->op2 ){ + pLeft->iTable = sqlite3CodeSubselect(pParse, pLeft); + pLeft->op2 = pParse->withinRJSubrtn; + } + assert( pLeft->op==TK_SELECT || pLeft->op==TK_ERROR ); + n = sqlite3ExprVectorSize(pLeft); + if( pExpr->iTable!=n ){ + sqlite3ErrorMsg(pParse, "%d columns assigned %d values", + pExpr->iTable, n); + } + return pLeft->iTable + pExpr->iColumn; + } + case TK_IN: { + int destIfFalse = sqlite3VdbeMakeLabel(pParse); + int destIfNull = sqlite3VdbeMakeLabel(pParse); + sqlite3VdbeAddOp2(v, OP_Null, 0, target); + sqlite3ExprCodeIN(pParse, pExpr, destIfFalse, destIfNull); + sqlite3VdbeAddOp2(v, OP_Integer, 1, target); + sqlite3VdbeResolveLabel(v, destIfFalse); + sqlite3VdbeAddOp2(v, OP_AddImm, target, 0); + sqlite3VdbeResolveLabel(v, destIfNull); + return target; + } +#endif /* SQLITE_OMIT_SUBQUERY */ + + + /* + ** x BETWEEN y AND z + ** + ** This is equivalent to + ** + ** x>=y AND x<=z + ** + ** X is stored in pExpr->pLeft. + ** Y is stored in pExpr->pList->a[0].pExpr. + ** Z is stored in pExpr->pList->a[1].pExpr. + */ + case TK_BETWEEN: { + exprCodeBetween(pParse, pExpr, target, 0, 0); + return target; + } + case TK_COLLATE: { + if( !ExprHasProperty(pExpr, EP_Collate) ){ + /* A TK_COLLATE Expr node without the EP_Collate tag is a so-called + ** "SOFT-COLLATE" that is added to constraints that are pushed down + ** from outer queries into sub-queries by the WHERE-clause push-down + ** optimization. Clear subtypes as subtypes may not cross a subquery + ** boundary. + */ + assert( pExpr->pLeft ); + sqlite3ExprCode(pParse, pExpr->pLeft, target); + sqlite3VdbeAddOp1(v, OP_ClrSubtype, target); + return target; + }else{ + pExpr = pExpr->pLeft; + goto expr_code_doover; /* 2018-04-28: Prevent deep recursion. */ + } + } + case TK_SPAN: + case TK_UPLUS: { + pExpr = pExpr->pLeft; + goto expr_code_doover; /* 2018-04-28: Prevent deep recursion. OSSFuzz. */ + } + + case TK_TRIGGER: { + /* If the opcode is TK_TRIGGER, then the expression is a reference + ** to a column in the new.* or old.* pseudo-tables available to + ** trigger programs. In this case Expr.iTable is set to 1 for the + ** new.* pseudo-table, or 0 for the old.* pseudo-table. Expr.iColumn + ** is set to the column of the pseudo-table to read, or to -1 to + ** read the rowid field. + ** + ** The expression is implemented using an OP_Param opcode. The p1 + ** parameter is set to 0 for an old.rowid reference, or to (i+1) + ** to reference another column of the old.* pseudo-table, where + ** i is the index of the column. For a new.rowid reference, p1 is + ** set to (n+1), where n is the number of columns in each pseudo-table. + ** For a reference to any other column in the new.* pseudo-table, p1 + ** is set to (n+2+i), where n and i are as defined previously. For + ** example, if the table on which triggers are being fired is + ** declared as: + ** + ** CREATE TABLE t1(a, b); + ** + ** Then p1 is interpreted as follows: + ** + ** p1==0 -> old.rowid p1==3 -> new.rowid + ** p1==1 -> old.a p1==4 -> new.a + ** p1==2 -> old.b p1==5 -> new.b + */ + Table *pTab; + int iCol; + int p1; + + assert( ExprUseYTab(pExpr) ); + pTab = pExpr->y.pTab; + iCol = pExpr->iColumn; + p1 = pExpr->iTable * (pTab->nCol+1) + 1 + + sqlite3TableColumnToStorage(pTab, iCol); + + assert( pExpr->iTable==0 || pExpr->iTable==1 ); + assert( iCol>=-1 && iColnCol ); + assert( pTab->iPKey<0 || iCol!=pTab->iPKey ); + assert( p1>=0 && p1<(pTab->nCol*2+2) ); + + sqlite3VdbeAddOp2(v, OP_Param, p1, target); + VdbeComment((v, "r[%d]=%s.%s", target, + (pExpr->iTable ? "new" : "old"), + (pExpr->iColumn<0 ? "rowid" : pExpr->y.pTab->aCol[iCol].zCnName) + )); + +#ifndef SQLITE_OMIT_FLOATING_POINT + /* If the column has REAL affinity, it may currently be stored as an + ** integer. Use OP_RealAffinity to make sure it is really real. + ** + ** EVIDENCE-OF: R-60985-57662 SQLite will convert the value back to + ** floating point when extracting it from the record. */ + if( iCol>=0 && pTab->aCol[iCol].affinity==SQLITE_AFF_REAL ){ + sqlite3VdbeAddOp1(v, OP_RealAffinity, target); + } +#endif + break; + } + + case TK_VECTOR: { + sqlite3ErrorMsg(pParse, "row value misused"); + break; + } + + /* TK_IF_NULL_ROW Expr nodes are inserted ahead of expressions + ** that derive from the right-hand table of a LEFT JOIN. The + ** Expr.iTable value is the table number for the right-hand table. + ** The expression is only evaluated if that table is not currently + ** on a LEFT JOIN NULL row. + */ + case TK_IF_NULL_ROW: { + int addrINR; + u8 okConstFactor = pParse->okConstFactor; + AggInfo *pAggInfo = pExpr->pAggInfo; + if( pAggInfo ){ + assert( pExpr->iAgg>=0 && pExpr->iAggnColumn ); + if( !pAggInfo->directMode ){ + inReg = AggInfoColumnReg(pAggInfo, pExpr->iAgg); + break; + } + if( pExpr->pAggInfo->useSortingIdx ){ + sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab, + pAggInfo->aCol[pExpr->iAgg].iSorterColumn, + target); + inReg = target; + break; + } + } + addrINR = sqlite3VdbeAddOp3(v, OP_IfNullRow, pExpr->iTable, 0, target); + /* The OP_IfNullRow opcode above can overwrite the result register with + ** NULL. So we have to ensure that the result register is not a value + ** that is suppose to be a constant. Two defenses are needed: + ** (1) Temporarily disable factoring of constant expressions + ** (2) Make sure the computed value really is stored in register + ** "target" and not someplace else. + */ + pParse->okConstFactor = 0; /* note (1) above */ + sqlite3ExprCode(pParse, pExpr->pLeft, target); + assert( target==inReg ); + pParse->okConstFactor = okConstFactor; + sqlite3VdbeJumpHere(v, addrINR); + break; + } + + /* + ** Form A: + ** CASE x WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END + ** + ** Form B: + ** CASE WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END + ** + ** Form A is can be transformed into the equivalent form B as follows: + ** CASE WHEN x=e1 THEN r1 WHEN x=e2 THEN r2 ... + ** WHEN x=eN THEN rN ELSE y END + ** + ** X (if it exists) is in pExpr->pLeft. + ** Y is in the last element of pExpr->x.pList if pExpr->x.pList->nExpr is + ** odd. The Y is also optional. If the number of elements in x.pList + ** is even, then Y is omitted and the "otherwise" result is NULL. + ** Ei is in pExpr->pList->a[i*2] and Ri is pExpr->pList->a[i*2+1]. + ** + ** The result of the expression is the Ri for the first matching Ei, + ** or if there is no matching Ei, the ELSE term Y, or if there is + ** no ELSE term, NULL. + */ + case TK_CASE: { + int endLabel; /* GOTO label for end of CASE stmt */ + int nextCase; /* GOTO label for next WHEN clause */ + int nExpr; /* 2x number of WHEN terms */ + int i; /* Loop counter */ + ExprList *pEList; /* List of WHEN terms */ + struct ExprList_item *aListelem; /* Array of WHEN terms */ + Expr opCompare; /* The X==Ei expression */ + Expr *pX; /* The X expression */ + Expr *pTest = 0; /* X==Ei (form A) or just Ei (form B) */ + Expr *pDel = 0; + sqlite3 *db = pParse->db; + + assert( ExprUseXList(pExpr) && pExpr->x.pList!=0 ); + assert(pExpr->x.pList->nExpr > 0); + pEList = pExpr->x.pList; + aListelem = pEList->a; + nExpr = pEList->nExpr; + endLabel = sqlite3VdbeMakeLabel(pParse); + if( (pX = pExpr->pLeft)!=0 ){ + pDel = sqlite3ExprDup(db, pX, 0); + if( db->mallocFailed ){ + sqlite3ExprDelete(db, pDel); + break; + } + testcase( pX->op==TK_COLUMN ); + sqlite3ExprToRegister(pDel, exprCodeVector(pParse, pDel, ®Free1)); + testcase( regFree1==0 ); + memset(&opCompare, 0, sizeof(opCompare)); + opCompare.op = TK_EQ; + opCompare.pLeft = pDel; + pTest = &opCompare; + /* Ticket b351d95f9cd5ef17e9d9dbae18f5ca8611190001: + ** The value in regFree1 might get SCopy-ed into the file result. + ** So make sure that the regFree1 register is not reused for other + ** purposes and possibly overwritten. */ + regFree1 = 0; + } + for(i=0; iop==TK_COLUMN ); + sqlite3ExprIfFalse(pParse, pTest, nextCase, SQLITE_JUMPIFNULL); + testcase( aListelem[i+1].pExpr->op==TK_COLUMN ); + sqlite3ExprCode(pParse, aListelem[i+1].pExpr, target); + sqlite3VdbeGoto(v, endLabel); + sqlite3VdbeResolveLabel(v, nextCase); + } + if( (nExpr&1)!=0 ){ + sqlite3ExprCode(pParse, pEList->a[nExpr-1].pExpr, target); + }else{ + sqlite3VdbeAddOp2(v, OP_Null, 0, target); + } + sqlite3ExprDelete(db, pDel); + setDoNotMergeFlagOnCopy(v); + sqlite3VdbeResolveLabel(v, endLabel); + break; + } +#ifndef SQLITE_OMIT_TRIGGER + case TK_RAISE: { + assert( pExpr->affExpr==OE_Rollback + || pExpr->affExpr==OE_Abort + || pExpr->affExpr==OE_Fail + || pExpr->affExpr==OE_Ignore + ); + if( !pParse->pTriggerTab && !pParse->nested ){ + sqlite3ErrorMsg(pParse, + "RAISE() may only be used within a trigger-program"); + return 0; + } + if( pExpr->affExpr==OE_Abort ){ + sqlite3MayAbort(pParse); + } + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + if( pExpr->affExpr==OE_Ignore ){ + sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_OK, OE_Ignore); + VdbeCoverage(v); + }else{ + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + sqlite3VdbeAddOp3(v, OP_Halt, + pParse->pTriggerTab ? SQLITE_CONSTRAINT_TRIGGER : SQLITE_ERROR, + pExpr->affExpr, r1); + } + break; + } +#endif + } + sqlite3ReleaseTempReg(pParse, regFree1); + sqlite3ReleaseTempReg(pParse, regFree2); + return inReg; +} + +/* +** Generate code that will evaluate expression pExpr just one time +** per prepared statement execution. +** +** If the expression uses functions (that might throw an exception) then +** guard them with an OP_Once opcode to ensure that the code is only executed +** once. If no functions are involved, then factor the code out and put it at +** the end of the prepared statement in the initialization section. +** +** If regDest>0 then the result is always stored in that register and the +** result is not reusable. If regDest<0 then this routine is free to +** store the value wherever it wants. The register where the expression +** is stored is returned. When regDest<0, two identical expressions might +** code to the same register, if they do not contain function calls and hence +** are factored out into the initialization section at the end of the +** prepared statement. +*/ +SQLITE_PRIVATE int sqlite3ExprCodeRunJustOnce( + Parse *pParse, /* Parsing context */ + Expr *pExpr, /* The expression to code when the VDBE initializes */ + int regDest /* Store the value in this register */ +){ + ExprList *p; + assert( ConstFactorOk(pParse) ); + assert( regDest!=0 ); + p = pParse->pConstExpr; + if( regDest<0 && p ){ + struct ExprList_item *pItem; + int i; + for(pItem=p->a, i=p->nExpr; i>0; pItem++, i--){ + if( pItem->fg.reusable + && sqlite3ExprCompare(0,pItem->pExpr,pExpr,-1)==0 + ){ + return pItem->u.iConstExprReg; + } + } + } + pExpr = sqlite3ExprDup(pParse->db, pExpr, 0); + if( pExpr!=0 && ExprHasProperty(pExpr, EP_HasFunc) ){ + Vdbe *v = pParse->pVdbe; + int addr; + assert( v ); + addr = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); + pParse->okConstFactor = 0; + if( !pParse->db->mallocFailed ){ + if( regDest<0 ) regDest = ++pParse->nMem; + sqlite3ExprCode(pParse, pExpr, regDest); + } + pParse->okConstFactor = 1; + sqlite3ExprDelete(pParse->db, pExpr); + sqlite3VdbeJumpHere(v, addr); + }else{ + p = sqlite3ExprListAppend(pParse, p, pExpr); + if( p ){ + struct ExprList_item *pItem = &p->a[p->nExpr-1]; + pItem->fg.reusable = regDest<0; + if( regDest<0 ) regDest = ++pParse->nMem; + pItem->u.iConstExprReg = regDest; + } + pParse->pConstExpr = p; + } + return regDest; +} + +/* +** Make arrangements to invoke OP_Null on a range of registers +** during initialization. +*/ +SQLITE_PRIVATE SQLITE_NOINLINE void sqlite3ExprNullRegisterRange( + Parse *pParse, /* Parsing context */ + int iReg, /* First register to set to NULL */ + int nReg /* Number of sequential registers to NULL out */ +){ + u8 okConstFactor = pParse->okConstFactor; + Expr t; + memset(&t, 0, sizeof(t)); + t.op = TK_NULLS; + t.y.nReg = nReg; + pParse->okConstFactor = 1; + sqlite3ExprCodeRunJustOnce(pParse, &t, iReg); + pParse->okConstFactor = okConstFactor; +} + +/* +** Generate code to evaluate an expression and store the results +** into a register. Return the register number where the results +** are stored. +** +** If the register is a temporary register that can be deallocated, +** then write its number into *pReg. If the result register is not +** a temporary, then set *pReg to zero. +** +** If pExpr is a constant, then this routine might generate this +** code to fill the register in the initialization section of the +** VDBE program, in order to factor it out of the evaluation loop. +*/ +SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *pReg){ + int r2; + pExpr = sqlite3ExprSkipCollateAndLikely(pExpr); + if( ConstFactorOk(pParse) + && ALWAYS(pExpr!=0) + && pExpr->op!=TK_REGISTER + && sqlite3ExprIsConstantNotJoin(pParse, pExpr) + ){ + *pReg = 0; + r2 = sqlite3ExprCodeRunJustOnce(pParse, pExpr, -1); + }else{ + int r1 = sqlite3GetTempReg(pParse); + r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1); + if( r2==r1 ){ + *pReg = r1; + }else{ + sqlite3ReleaseTempReg(pParse, r1); + *pReg = 0; + } + } + return r2; +} + +/* +** Generate code that will evaluate expression pExpr and store the +** results in register target. The results are guaranteed to appear +** in register target. +*/ +SQLITE_PRIVATE void sqlite3ExprCode(Parse *pParse, Expr *pExpr, int target){ + int inReg; + + assert( pExpr==0 || !ExprHasVVAProperty(pExpr,EP_Immutable) ); + assert( target>0 && target<=pParse->nMem ); + assert( pParse->pVdbe!=0 || pParse->db->mallocFailed ); + if( pParse->pVdbe==0 ) return; + inReg = sqlite3ExprCodeTarget(pParse, pExpr, target); + if( inReg!=target ){ + u8 op; + Expr *pX = sqlite3ExprSkipCollateAndLikely(pExpr); + testcase( pX!=pExpr ); + if( ALWAYS(pX) + && (ExprHasProperty(pX,EP_Subquery) || pX->op==TK_REGISTER) + ){ + op = OP_Copy; + }else{ + op = OP_SCopy; + } + sqlite3VdbeAddOp2(pParse->pVdbe, op, inReg, target); + } +} + +/* +** Make a transient copy of expression pExpr and then code it using +** sqlite3ExprCode(). This routine works just like sqlite3ExprCode() +** except that the input expression is guaranteed to be unchanged. +*/ +SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse *pParse, Expr *pExpr, int target){ + sqlite3 *db = pParse->db; + pExpr = sqlite3ExprDup(db, pExpr, 0); + if( !db->mallocFailed ) sqlite3ExprCode(pParse, pExpr, target); + sqlite3ExprDelete(db, pExpr); +} + +/* +** Generate code that will evaluate expression pExpr and store the +** results in register target. The results are guaranteed to appear +** in register target. If the expression is constant, then this routine +** might choose to code the expression at initialization time. +*/ +SQLITE_PRIVATE void sqlite3ExprCodeFactorable(Parse *pParse, Expr *pExpr, int target){ + if( pParse->okConstFactor && sqlite3ExprIsConstantNotJoin(pParse,pExpr) ){ + sqlite3ExprCodeRunJustOnce(pParse, pExpr, target); + }else{ + sqlite3ExprCodeCopy(pParse, pExpr, target); + } +} + +/* +** Generate code that pushes the value of every element of the given +** expression list into a sequence of registers beginning at target. +** +** Return the number of elements evaluated. The number returned will +** usually be pList->nExpr but might be reduced if SQLITE_ECEL_OMITREF +** is defined. +** +** The SQLITE_ECEL_DUP flag prevents the arguments from being +** filled using OP_SCopy. OP_Copy must be used instead. +** +** The SQLITE_ECEL_FACTOR argument allows constant arguments to be +** factored out into initialization code. +** +** The SQLITE_ECEL_REF flag means that expressions in the list with +** ExprList.a[].u.x.iOrderByCol>0 have already been evaluated and stored +** in registers at srcReg, and so the value can be copied from there. +** If SQLITE_ECEL_OMITREF is also set, then the values with u.x.iOrderByCol>0 +** are simply omitted rather than being copied from srcReg. +*/ +SQLITE_PRIVATE int sqlite3ExprCodeExprList( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* The expression list to be coded */ + int target, /* Where to write results */ + int srcReg, /* Source registers if SQLITE_ECEL_REF */ + u8 flags /* SQLITE_ECEL_* flags */ +){ + struct ExprList_item *pItem; + int i, j, n; + u8 copyOp = (flags & SQLITE_ECEL_DUP) ? OP_Copy : OP_SCopy; + Vdbe *v = pParse->pVdbe; + assert( pList!=0 ); + assert( target>0 ); + assert( pParse->pVdbe!=0 ); /* Never gets this far otherwise */ + n = pList->nExpr; + if( !ConstFactorOk(pParse) ) flags &= ~SQLITE_ECEL_FACTOR; + for(pItem=pList->a, i=0; ipExpr; +#ifdef SQLITE_ENABLE_SORTER_REFERENCES + if( pItem->fg.bSorterRef ){ + i--; + n--; + }else +#endif + if( (flags & SQLITE_ECEL_REF)!=0 && (j = pItem->u.x.iOrderByCol)>0 ){ + if( flags & SQLITE_ECEL_OMITREF ){ + i--; + n--; + }else{ + sqlite3VdbeAddOp2(v, copyOp, j+srcReg-1, target+i); + } + }else if( (flags & SQLITE_ECEL_FACTOR)!=0 + && sqlite3ExprIsConstantNotJoin(pParse,pExpr) + ){ + sqlite3ExprCodeRunJustOnce(pParse, pExpr, target+i); + }else{ + int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i); + if( inReg!=target+i ){ + VdbeOp *pOp; + if( copyOp==OP_Copy + && (pOp=sqlite3VdbeGetLastOp(v))->opcode==OP_Copy + && pOp->p1+pOp->p3+1==inReg + && pOp->p2+pOp->p3+1==target+i + && pOp->p5==0 /* The do-not-merge flag must be clear */ + ){ + pOp->p3++; + }else{ + sqlite3VdbeAddOp2(v, copyOp, inReg, target+i); + } + } + } + } + return n; +} + +/* +** Generate code for a BETWEEN operator. +** +** x BETWEEN y AND z +** +** The above is equivalent to +** +** x>=y AND x<=z +** +** Code it as such, taking care to do the common subexpression +** elimination of x. +** +** The xJumpIf parameter determines details: +** +** NULL: Store the boolean result in reg[dest] +** sqlite3ExprIfTrue: Jump to dest if true +** sqlite3ExprIfFalse: Jump to dest if false +** +** The jumpIfNull parameter is ignored if xJumpIf is NULL. +*/ +static void exprCodeBetween( + Parse *pParse, /* Parsing and code generating context */ + Expr *pExpr, /* The BETWEEN expression */ + int dest, /* Jump destination or storage location */ + void (*xJump)(Parse*,Expr*,int,int), /* Action to take */ + int jumpIfNull /* Take the jump if the BETWEEN is NULL */ +){ + Expr exprAnd; /* The AND operator in x>=y AND x<=z */ + Expr compLeft; /* The x>=y term */ + Expr compRight; /* The x<=z term */ + int regFree1 = 0; /* Temporary use register */ + Expr *pDel = 0; + sqlite3 *db = pParse->db; + + memset(&compLeft, 0, sizeof(Expr)); + memset(&compRight, 0, sizeof(Expr)); + memset(&exprAnd, 0, sizeof(Expr)); + + assert( ExprUseXList(pExpr) ); + pDel = sqlite3ExprDup(db, pExpr->pLeft, 0); + if( db->mallocFailed==0 ){ + exprAnd.op = TK_AND; + exprAnd.pLeft = &compLeft; + exprAnd.pRight = &compRight; + compLeft.op = TK_GE; + compLeft.pLeft = pDel; + compLeft.pRight = pExpr->x.pList->a[0].pExpr; + compRight.op = TK_LE; + compRight.pLeft = pDel; + compRight.pRight = pExpr->x.pList->a[1].pExpr; + sqlite3ExprToRegister(pDel, exprCodeVector(pParse, pDel, ®Free1)); + if( xJump ){ + xJump(pParse, &exprAnd, dest, jumpIfNull); + }else{ + /* Mark the expression is being from the ON or USING clause of a join + ** so that the sqlite3ExprCodeTarget() routine will not attempt to move + ** it into the Parse.pConstExpr list. We should use a new bit for this, + ** for clarity, but we are out of bits in the Expr.flags field so we + ** have to reuse the EP_OuterON bit. Bummer. */ + pDel->flags |= EP_OuterON; + sqlite3ExprCodeTarget(pParse, &exprAnd, dest); + } + sqlite3ReleaseTempReg(pParse, regFree1); + } + sqlite3ExprDelete(db, pDel); + + /* Ensure adequate test coverage */ + testcase( xJump==sqlite3ExprIfTrue && jumpIfNull==0 && regFree1==0 ); + testcase( xJump==sqlite3ExprIfTrue && jumpIfNull==0 && regFree1!=0 ); + testcase( xJump==sqlite3ExprIfTrue && jumpIfNull!=0 && regFree1==0 ); + testcase( xJump==sqlite3ExprIfTrue && jumpIfNull!=0 && regFree1!=0 ); + testcase( xJump==sqlite3ExprIfFalse && jumpIfNull==0 && regFree1==0 ); + testcase( xJump==sqlite3ExprIfFalse && jumpIfNull==0 && regFree1!=0 ); + testcase( xJump==sqlite3ExprIfFalse && jumpIfNull!=0 && regFree1==0 ); + testcase( xJump==sqlite3ExprIfFalse && jumpIfNull!=0 && regFree1!=0 ); + testcase( xJump==0 ); +} + +/* +** Generate code for a boolean expression such that a jump is made +** to the label "dest" if the expression is true but execution +** continues straight thru if the expression is false. +** +** If the expression evaluates to NULL (neither true nor false), then +** take the jump if the jumpIfNull flag is SQLITE_JUMPIFNULL. +** +** This code depends on the fact that certain token values (ex: TK_EQ) +** are the same as opcode values (ex: OP_Eq) that implement the corresponding +** operation. Special comments in vdbe.c and the mkopcodeh.awk script in +** the make process cause these values to align. Assert()s in the code +** below verify that the numbers are aligned correctly. +*/ +SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){ + Vdbe *v = pParse->pVdbe; + int op = 0; + int regFree1 = 0; + int regFree2 = 0; + int r1, r2; + + assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 ); + if( NEVER(v==0) ) return; /* Existence of VDBE checked by caller */ + if( NEVER(pExpr==0) ) return; /* No way this can happen */ + assert( !ExprHasVVAProperty(pExpr, EP_Immutable) ); + op = pExpr->op; + switch( op ){ + case TK_AND: + case TK_OR: { + Expr *pAlt = sqlite3ExprSimplifiedAndOr(pExpr); + if( pAlt!=pExpr ){ + sqlite3ExprIfTrue(pParse, pAlt, dest, jumpIfNull); + }else{ + Expr *pFirst, *pSecond; + if( exprEvalRhsFirst(pExpr) ){ + pFirst = pExpr->pRight; + pSecond = pExpr->pLeft; + }else{ + pFirst = pExpr->pLeft; + pSecond = pExpr->pRight; + } + if( op==TK_AND ){ + int d2 = sqlite3VdbeMakeLabel(pParse); + testcase( jumpIfNull==0 ); + sqlite3ExprIfFalse(pParse, pFirst, d2, + jumpIfNull^SQLITE_JUMPIFNULL); + sqlite3ExprIfTrue(pParse, pSecond, dest, jumpIfNull); + sqlite3VdbeResolveLabel(v, d2); + }else{ + testcase( jumpIfNull==0 ); + sqlite3ExprIfTrue(pParse, pFirst, dest, jumpIfNull); + sqlite3ExprIfTrue(pParse, pSecond, dest, jumpIfNull); + } + } + break; + } + case TK_NOT: { + testcase( jumpIfNull==0 ); + sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull); + break; + } + case TK_TRUTH: { + int isNot; /* IS NOT TRUE or IS NOT FALSE */ + int isTrue; /* IS TRUE or IS NOT TRUE */ + testcase( jumpIfNull==0 ); + isNot = pExpr->op2==TK_ISNOT; + isTrue = sqlite3ExprTruthValue(pExpr->pRight); + testcase( isTrue && isNot ); + testcase( !isTrue && isNot ); + if( isTrue ^ isNot ){ + sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, + isNot ? SQLITE_JUMPIFNULL : 0); + }else{ + sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, + isNot ? SQLITE_JUMPIFNULL : 0); + } + break; + } + case TK_IS: + case TK_ISNOT: + testcase( op==TK_IS ); + testcase( op==TK_ISNOT ); + op = (op==TK_IS) ? TK_EQ : TK_NE; + jumpIfNull = SQLITE_NULLEQ; + /* no break */ deliberate_fall_through + case TK_LT: + case TK_LE: + case TK_GT: + case TK_GE: + case TK_NE: + case TK_EQ: { + int addrIsNull; + if( sqlite3ExprIsVector(pExpr->pLeft) ) goto default_expr; + if( ExprHasProperty(pExpr, EP_Subquery) && jumpIfNull!=SQLITE_NULLEQ ){ + addrIsNull = exprComputeOperands(pParse, pExpr, + &r1, &r2, ®Free1, ®Free2); + }else{ + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + addrIsNull = 0; + } + codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op, + r1, r2, dest, jumpIfNull, ExprHasProperty(pExpr,EP_Commuted)); + assert(TK_LT==OP_Lt); testcase(op==OP_Lt); VdbeCoverageIf(v,op==OP_Lt); + assert(TK_LE==OP_Le); testcase(op==OP_Le); VdbeCoverageIf(v,op==OP_Le); + assert(TK_GT==OP_Gt); testcase(op==OP_Gt); VdbeCoverageIf(v,op==OP_Gt); + assert(TK_GE==OP_Ge); testcase(op==OP_Ge); VdbeCoverageIf(v,op==OP_Ge); + assert(TK_EQ==OP_Eq); testcase(op==OP_Eq); + VdbeCoverageIf(v, op==OP_Eq && jumpIfNull==SQLITE_NULLEQ); + VdbeCoverageIf(v, op==OP_Eq && jumpIfNull!=SQLITE_NULLEQ); + assert(TK_NE==OP_Ne); testcase(op==OP_Ne); + VdbeCoverageIf(v, op==OP_Ne && jumpIfNull==SQLITE_NULLEQ); + VdbeCoverageIf(v, op==OP_Ne && jumpIfNull!=SQLITE_NULLEQ); + testcase( regFree1==0 ); + testcase( regFree2==0 ); + if( addrIsNull ){ + if( jumpIfNull ){ + sqlite3VdbeChangeP2(v, addrIsNull, dest); + }else{ + sqlite3VdbeJumpHere(v, addrIsNull); + } + } + break; + } + case TK_ISNULL: + case TK_NOTNULL: { + assert( TK_ISNULL==OP_IsNull ); testcase( op==TK_ISNULL ); + assert( TK_NOTNULL==OP_NotNull ); testcase( op==TK_NOTNULL ); + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + assert( regFree1==0 || regFree1==r1 ); + if( regFree1 ) sqlite3VdbeTypeofColumn(v, r1); + sqlite3VdbeAddOp2(v, op, r1, dest); + VdbeCoverageIf(v, op==TK_ISNULL); + VdbeCoverageIf(v, op==TK_NOTNULL); + break; + } + case TK_BETWEEN: { + testcase( jumpIfNull==0 ); + exprCodeBetween(pParse, pExpr, dest, sqlite3ExprIfTrue, jumpIfNull); + break; + } +#ifndef SQLITE_OMIT_SUBQUERY + case TK_IN: { + int destIfFalse = sqlite3VdbeMakeLabel(pParse); + int destIfNull = jumpIfNull ? dest : destIfFalse; + sqlite3ExprCodeIN(pParse, pExpr, destIfFalse, destIfNull); + sqlite3VdbeGoto(v, dest); + sqlite3VdbeResolveLabel(v, destIfFalse); + break; + } +#endif + default: { + default_expr: + if( ExprAlwaysTrue(pExpr) ){ + sqlite3VdbeGoto(v, dest); + }else if( ExprAlwaysFalse(pExpr) ){ + /* No-op */ + }else{ + r1 = sqlite3ExprCodeTemp(pParse, pExpr, ®Free1); + sqlite3VdbeAddOp3(v, OP_If, r1, dest, jumpIfNull!=0); + VdbeCoverage(v); + testcase( regFree1==0 ); + testcase( jumpIfNull==0 ); + } + break; + } + } + sqlite3ReleaseTempReg(pParse, regFree1); + sqlite3ReleaseTempReg(pParse, regFree2); +} + +/* +** Generate code for a boolean expression such that a jump is made +** to the label "dest" if the expression is false but execution +** continues straight thru if the expression is true. +** +** If the expression evaluates to NULL (neither true nor false) then +** jump if jumpIfNull is SQLITE_JUMPIFNULL or fall through if jumpIfNull +** is 0. +*/ +SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){ + Vdbe *v = pParse->pVdbe; + int op = 0; + int regFree1 = 0; + int regFree2 = 0; + int r1, r2; + + assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 ); + if( NEVER(v==0) ) return; /* Existence of VDBE checked by caller */ + if( pExpr==0 ) return; + assert( !ExprHasVVAProperty(pExpr,EP_Immutable) ); + + /* The value of pExpr->op and op are related as follows: + ** + ** pExpr->op op + ** --------- ---------- + ** TK_ISNULL OP_NotNull + ** TK_NOTNULL OP_IsNull + ** TK_NE OP_Eq + ** TK_EQ OP_Ne + ** TK_GT OP_Le + ** TK_LE OP_Gt + ** TK_GE OP_Lt + ** TK_LT OP_Ge + ** + ** For other values of pExpr->op, op is undefined and unused. + ** The value of TK_ and OP_ constants are arranged such that we + ** can compute the mapping above using the following expression. + ** Assert()s verify that the computation is correct. + */ + op = ((pExpr->op+(TK_ISNULL&1))^1)-(TK_ISNULL&1); + + /* Verify correct alignment of TK_ and OP_ constants + */ + assert( pExpr->op!=TK_ISNULL || op==OP_NotNull ); + assert( pExpr->op!=TK_NOTNULL || op==OP_IsNull ); + assert( pExpr->op!=TK_NE || op==OP_Eq ); + assert( pExpr->op!=TK_EQ || op==OP_Ne ); + assert( pExpr->op!=TK_LT || op==OP_Ge ); + assert( pExpr->op!=TK_LE || op==OP_Gt ); + assert( pExpr->op!=TK_GT || op==OP_Le ); + assert( pExpr->op!=TK_GE || op==OP_Lt ); + + switch( pExpr->op ){ + case TK_AND: + case TK_OR: { + Expr *pAlt = sqlite3ExprSimplifiedAndOr(pExpr); + if( pAlt!=pExpr ){ + sqlite3ExprIfFalse(pParse, pAlt, dest, jumpIfNull); + }else{ + Expr *pFirst, *pSecond; + if( exprEvalRhsFirst(pExpr) ){ + pFirst = pExpr->pRight; + pSecond = pExpr->pLeft; + }else{ + pFirst = pExpr->pLeft; + pSecond = pExpr->pRight; + } + if( pExpr->op==TK_AND ){ + testcase( jumpIfNull==0 ); + sqlite3ExprIfFalse(pParse, pFirst, dest, jumpIfNull); + sqlite3ExprIfFalse(pParse, pSecond, dest, jumpIfNull); + }else{ + int d2 = sqlite3VdbeMakeLabel(pParse); + testcase( jumpIfNull==0 ); + sqlite3ExprIfTrue(pParse, pFirst, d2, + jumpIfNull^SQLITE_JUMPIFNULL); + sqlite3ExprIfFalse(pParse, pSecond, dest, jumpIfNull); + sqlite3VdbeResolveLabel(v, d2); + } + } + break; + } + case TK_NOT: { + testcase( jumpIfNull==0 ); + sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull); + break; + } + case TK_TRUTH: { + int isNot; /* IS NOT TRUE or IS NOT FALSE */ + int isTrue; /* IS TRUE or IS NOT TRUE */ + testcase( jumpIfNull==0 ); + isNot = pExpr->op2==TK_ISNOT; + isTrue = sqlite3ExprTruthValue(pExpr->pRight); + testcase( isTrue && isNot ); + testcase( !isTrue && isNot ); + if( isTrue ^ isNot ){ + /* IS TRUE and IS NOT FALSE */ + sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, + isNot ? 0 : SQLITE_JUMPIFNULL); + + }else{ + /* IS FALSE and IS NOT TRUE */ + sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, + isNot ? 0 : SQLITE_JUMPIFNULL); + } + break; + } + case TK_IS: + case TK_ISNOT: + testcase( pExpr->op==TK_IS ); + testcase( pExpr->op==TK_ISNOT ); + op = (pExpr->op==TK_IS) ? TK_NE : TK_EQ; + jumpIfNull = SQLITE_NULLEQ; + /* no break */ deliberate_fall_through + case TK_LT: + case TK_LE: + case TK_GT: + case TK_GE: + case TK_NE: + case TK_EQ: { + int addrIsNull; + if( sqlite3ExprIsVector(pExpr->pLeft) ) goto default_expr; + if( ExprHasProperty(pExpr, EP_Subquery) && jumpIfNull!=SQLITE_NULLEQ ){ + addrIsNull = exprComputeOperands(pParse, pExpr, + &r1, &r2, ®Free1, ®Free2); + }else{ + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, ®Free2); + addrIsNull = 0; + } + codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op, + r1, r2, dest, jumpIfNull,ExprHasProperty(pExpr,EP_Commuted)); + assert(TK_LT==OP_Lt); testcase(op==OP_Lt); VdbeCoverageIf(v,op==OP_Lt); + assert(TK_LE==OP_Le); testcase(op==OP_Le); VdbeCoverageIf(v,op==OP_Le); + assert(TK_GT==OP_Gt); testcase(op==OP_Gt); VdbeCoverageIf(v,op==OP_Gt); + assert(TK_GE==OP_Ge); testcase(op==OP_Ge); VdbeCoverageIf(v,op==OP_Ge); + assert(TK_EQ==OP_Eq); testcase(op==OP_Eq); + VdbeCoverageIf(v, op==OP_Eq && jumpIfNull!=SQLITE_NULLEQ); + VdbeCoverageIf(v, op==OP_Eq && jumpIfNull==SQLITE_NULLEQ); + assert(TK_NE==OP_Ne); testcase(op==OP_Ne); + VdbeCoverageIf(v, op==OP_Ne && jumpIfNull!=SQLITE_NULLEQ); + VdbeCoverageIf(v, op==OP_Ne && jumpIfNull==SQLITE_NULLEQ); + testcase( regFree1==0 ); + testcase( regFree2==0 ); + if( addrIsNull ){ + if( jumpIfNull ){ + sqlite3VdbeChangeP2(v, addrIsNull, dest); + }else{ + sqlite3VdbeJumpHere(v, addrIsNull); + } + } + break; + } + case TK_ISNULL: + case TK_NOTNULL: { + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + assert( regFree1==0 || regFree1==r1 ); + if( regFree1 ) sqlite3VdbeTypeofColumn(v, r1); + sqlite3VdbeAddOp2(v, op, r1, dest); + testcase( op==TK_ISNULL ); VdbeCoverageIf(v, op==TK_ISNULL); + testcase( op==TK_NOTNULL ); VdbeCoverageIf(v, op==TK_NOTNULL); + break; + } + case TK_BETWEEN: { + testcase( jumpIfNull==0 ); + exprCodeBetween(pParse, pExpr, dest, sqlite3ExprIfFalse, jumpIfNull); + break; + } +#ifndef SQLITE_OMIT_SUBQUERY + case TK_IN: { + if( jumpIfNull ){ + sqlite3ExprCodeIN(pParse, pExpr, dest, dest); + }else{ + int destIfNull = sqlite3VdbeMakeLabel(pParse); + sqlite3ExprCodeIN(pParse, pExpr, dest, destIfNull); + sqlite3VdbeResolveLabel(v, destIfNull); + } + break; + } +#endif + default: { + default_expr: + if( ExprAlwaysFalse(pExpr) ){ + sqlite3VdbeGoto(v, dest); + }else if( ExprAlwaysTrue(pExpr) ){ + /* no-op */ + }else{ + r1 = sqlite3ExprCodeTemp(pParse, pExpr, ®Free1); + sqlite3VdbeAddOp3(v, OP_IfNot, r1, dest, jumpIfNull!=0); + VdbeCoverage(v); + testcase( regFree1==0 ); + testcase( jumpIfNull==0 ); + } + break; + } + } + sqlite3ReleaseTempReg(pParse, regFree1); + sqlite3ReleaseTempReg(pParse, regFree2); +} + +/* +** Like sqlite3ExprIfFalse() except that a copy is made of pExpr before +** code generation, and that copy is deleted after code generation. This +** ensures that the original pExpr is unchanged. +*/ +SQLITE_PRIVATE void sqlite3ExprIfFalseDup(Parse *pParse, Expr *pExpr, int dest,int jumpIfNull){ + sqlite3 *db = pParse->db; + Expr *pCopy = sqlite3ExprDup(db, pExpr, 0); + if( db->mallocFailed==0 ){ + sqlite3ExprIfFalse(pParse, pCopy, dest, jumpIfNull); + } + sqlite3ExprDelete(db, pCopy); +} + +/* +** Expression pVar is guaranteed to be an SQL variable. pExpr may be any +** type of expression. +** +** If pExpr is a simple SQL value - an integer, real, string, blob +** or NULL value - then the VDBE currently being prepared is configured +** to re-prepare each time a new value is bound to variable pVar. +** +** Additionally, if pExpr is a simple SQL value and the value is the +** same as that currently bound to variable pVar, non-zero is returned. +** Otherwise, if the values are not the same or if pExpr is not a simple +** SQL value, zero is returned. +** +** If the SQLITE_EnableQPSG flag is set on the database connection, then +** this routine always returns false. +*/ +static SQLITE_NOINLINE int exprCompareVariable( + const Parse *pParse, + const Expr *pVar, + const Expr *pExpr +){ + int res = 2; + int iVar; + sqlite3_value *pL, *pR = 0; + + if( pExpr->op==TK_VARIABLE && pVar->iColumn==pExpr->iColumn ){ + return 0; + } + if( (pParse->db->flags & SQLITE_EnableQPSG)!=0 ) return 2; + sqlite3ValueFromExpr(pParse->db, pExpr, SQLITE_UTF8, SQLITE_AFF_BLOB, &pR); + if( pR ){ + iVar = pVar->iColumn; + sqlite3VdbeSetVarmask(pParse->pVdbe, iVar); + pL = sqlite3VdbeGetBoundValue(pParse->pReprepare, iVar, SQLITE_AFF_BLOB); + if( pL ){ + if( sqlite3_value_type(pL)==SQLITE_TEXT ){ + sqlite3_value_text(pL); /* Make sure the encoding is UTF-8 */ + } + res = sqlite3MemCompare(pL, pR, 0) ? 2 : 0; + } + sqlite3ValueFree(pR); + sqlite3ValueFree(pL); + } + return res; +} + +/* +** Do a deep comparison of two expression trees. Return 0 if the two +** expressions are completely identical. Return 1 if they differ only +** by a COLLATE operator at the top level. Return 2 if there are differences +** other than the top-level COLLATE operator. +** +** If any subelement of pB has Expr.iTable==(-1) then it is allowed +** to compare equal to an equivalent element in pA with Expr.iTable==iTab. +** +** The pA side might be using TK_REGISTER. If that is the case and pB is +** not using TK_REGISTER but is otherwise equivalent, then still return 0. +** +** Sometimes this routine will return 2 even if the two expressions +** really are equivalent. If we cannot prove that the expressions are +** identical, we return 2 just to be safe. So if this routine +** returns 2, then you do not really know for certain if the two +** expressions are the same. But if you get a 0 or 1 return, then you +** can be sure the expressions are the same. In the places where +** this routine is used, it does not hurt to get an extra 2 - that +** just might result in some slightly slower code. But returning +** an incorrect 0 or 1 could lead to a malfunction. +** +** If pParse is not NULL and SQLITE_EnableQPSG is off then TK_VARIABLE +** terms in pA with bindings in pParse->pReprepare can be matched against +** literals in pB. The pParse->pVdbe->expmask bitmask is updated for +** each variable referenced. +*/ +SQLITE_PRIVATE int sqlite3ExprCompare( + const Parse *pParse, + const Expr *pA, + const Expr *pB, + int iTab +){ + u32 combinedFlags; + if( pA==0 || pB==0 ){ + return pB==pA ? 0 : 2; + } + if( pParse && pA->op==TK_VARIABLE ){ + return exprCompareVariable(pParse, pA, pB); + } + combinedFlags = pA->flags | pB->flags; + if( combinedFlags & EP_IntValue ){ + if( (pA->flags&pB->flags&EP_IntValue)!=0 && pA->u.iValue==pB->u.iValue ){ + return 0; + } + return 2; + } + if( pA->op!=pB->op || pA->op==TK_RAISE ){ + if( pA->op==TK_COLLATE && sqlite3ExprCompare(pParse, pA->pLeft,pB,iTab)<2 ){ + return 1; + } + if( pB->op==TK_COLLATE && sqlite3ExprCompare(pParse, pA,pB->pLeft,iTab)<2 ){ + return 1; + } + if( pA->op==TK_AGG_COLUMN && pB->op==TK_COLUMN + && pB->iTable<0 && pA->iTable==iTab + ){ + /* fall through */ + }else{ + return 2; + } + } + assert( !ExprHasProperty(pA, EP_IntValue) ); + assert( !ExprHasProperty(pB, EP_IntValue) ); + if( pA->u.zToken ){ + if( pA->op==TK_FUNCTION || pA->op==TK_AGG_FUNCTION ){ + if( sqlite3StrICmp(pA->u.zToken,pB->u.zToken)!=0 ) return 2; +#ifndef SQLITE_OMIT_WINDOWFUNC + assert( pA->op==pB->op ); + if( ExprHasProperty(pA,EP_WinFunc)!=ExprHasProperty(pB,EP_WinFunc) ){ + return 2; + } + if( ExprHasProperty(pA,EP_WinFunc) ){ + if( sqlite3WindowCompare(pParse, pA->y.pWin, pB->y.pWin, 1)!=0 ){ + return 2; + } + } +#endif + }else if( pA->op==TK_NULL ){ + return 0; + }else if( pA->op==TK_COLLATE ){ + if( sqlite3_stricmp(pA->u.zToken,pB->u.zToken)!=0 ) return 2; + }else + if( pB->u.zToken!=0 + && pA->op!=TK_COLUMN + && pA->op!=TK_AGG_COLUMN + && strcmp(pA->u.zToken,pB->u.zToken)!=0 + ){ + return 2; + } + } + if( (pA->flags & (EP_Distinct|EP_Commuted)) + != (pB->flags & (EP_Distinct|EP_Commuted)) ) return 2; + if( ALWAYS((combinedFlags & EP_TokenOnly)==0) ){ + if( combinedFlags & EP_xIsSelect ) return 2; + if( (combinedFlags & EP_FixedCol)==0 + && sqlite3ExprCompare(pParse, pA->pLeft, pB->pLeft, iTab) ) return 2; + if( sqlite3ExprCompare(pParse, pA->pRight, pB->pRight, iTab) ) return 2; + if( sqlite3ExprListCompare(pA->x.pList, pB->x.pList, iTab) ) return 2; + if( pA->op!=TK_STRING + && pA->op!=TK_TRUEFALSE + && ALWAYS((combinedFlags & EP_Reduced)==0) + ){ + if( pA->iColumn!=pB->iColumn ) return 2; + if( pA->op2!=pB->op2 && pA->op==TK_TRUTH ) return 2; + if( pA->op!=TK_IN && pA->iTable!=pB->iTable && pA->iTable!=iTab ){ + return 2; + } + } + } + return 0; +} + +/* +** Compare two ExprList objects. Return 0 if they are identical, 1 +** if they are certainly different, or 2 if it is not possible to +** determine if they are identical or not. +** +** If any subelement of pB has Expr.iTable==(-1) then it is allowed +** to compare equal to an equivalent element in pA with Expr.iTable==iTab. +** +** This routine might return non-zero for equivalent ExprLists. The +** only consequence will be disabled optimizations. But this routine +** must never return 0 if the two ExprList objects are different, or +** a malfunction will result. +** +** Two NULL pointers are considered to be the same. But a NULL pointer +** always differs from a non-NULL pointer. +*/ +SQLITE_PRIVATE int sqlite3ExprListCompare(const ExprList *pA, const ExprList *pB, int iTab){ + int i; + if( pA==0 && pB==0 ) return 0; + if( pA==0 || pB==0 ) return 1; + if( pA->nExpr!=pB->nExpr ) return 1; + for(i=0; inExpr; i++){ + int res; + Expr *pExprA = pA->a[i].pExpr; + Expr *pExprB = pB->a[i].pExpr; + if( pA->a[i].fg.sortFlags!=pB->a[i].fg.sortFlags ) return 1; + if( (res = sqlite3ExprCompare(0, pExprA, pExprB, iTab)) ) return res; + } + return 0; +} + +/* +** Like sqlite3ExprCompare() except COLLATE operators at the top-level +** are ignored. +*/ +SQLITE_PRIVATE int sqlite3ExprCompareSkip(Expr *pA,Expr *pB, int iTab){ + return sqlite3ExprCompare(0, + sqlite3ExprSkipCollate(pA), + sqlite3ExprSkipCollate(pB), + iTab); +} + +/* +** Return non-zero if Expr p can only be true if pNN is not NULL. +** +** Or if seenNot is true, return non-zero if Expr p can only be +** non-NULL if pNN is not NULL +*/ +static int exprImpliesNotNull( + const Parse *pParse,/* Parsing context */ + const Expr *p, /* The expression to be checked */ + const Expr *pNN, /* The expression that is NOT NULL */ + int iTab, /* Table being evaluated */ + int seenNot /* Return true only if p can be any non-NULL value */ +){ + assert( p ); + assert( pNN ); + if( sqlite3ExprCompare(pParse, p, pNN, iTab)==0 ){ + return pNN->op!=TK_NULL; + } + switch( p->op ){ + case TK_IN: { + if( seenNot && ExprHasProperty(p, EP_xIsSelect) ) return 0; + assert( ExprUseXSelect(p) || (p->x.pList!=0 && p->x.pList->nExpr>0) ); + return exprImpliesNotNull(pParse, p->pLeft, pNN, iTab, 1); + } + case TK_BETWEEN: { + ExprList *pList; + assert( ExprUseXList(p) ); + pList = p->x.pList; + assert( pList!=0 ); + assert( pList->nExpr==2 ); + if( seenNot ) return 0; + if( exprImpliesNotNull(pParse, pList->a[0].pExpr, pNN, iTab, 1) + || exprImpliesNotNull(pParse, pList->a[1].pExpr, pNN, iTab, 1) + ){ + return 1; + } + return exprImpliesNotNull(pParse, p->pLeft, pNN, iTab, 1); + } + case TK_EQ: + case TK_NE: + case TK_LT: + case TK_LE: + case TK_GT: + case TK_GE: + case TK_PLUS: + case TK_MINUS: + case TK_BITOR: + case TK_LSHIFT: + case TK_RSHIFT: + case TK_CONCAT: + seenNot = 1; + /* no break */ deliberate_fall_through + case TK_STAR: + case TK_REM: + case TK_BITAND: + case TK_SLASH: { + if( exprImpliesNotNull(pParse, p->pRight, pNN, iTab, seenNot) ) return 1; + /* no break */ deliberate_fall_through + } + case TK_SPAN: + case TK_COLLATE: + case TK_UPLUS: + case TK_UMINUS: { + return exprImpliesNotNull(pParse, p->pLeft, pNN, iTab, seenNot); + } + case TK_TRUTH: { + if( seenNot ) return 0; + if( p->op2!=TK_IS ) return 0; + return exprImpliesNotNull(pParse, p->pLeft, pNN, iTab, 1); + } + case TK_BITNOT: + case TK_NOT: { + return exprImpliesNotNull(pParse, p->pLeft, pNN, iTab, 1); + } + } + return 0; +} + +/* +** Return true if the boolean value of the expression is always either +** FALSE or NULL. +*/ +static int sqlite3ExprIsNotTrue(Expr *pExpr){ + int v; + if( pExpr->op==TK_NULL ) return 1; + if( pExpr->op==TK_TRUEFALSE && sqlite3ExprTruthValue(pExpr)==0 ) return 1; + v = 1; + if( sqlite3ExprIsInteger(pExpr, &v, 0) && v==0 ) return 1; + return 0; +} + +/* +** Return true if the expression is one of the following: +** +** CASE WHEN x THEN y END +** CASE WHEN x THEN y ELSE NULL END +** CASE WHEN x THEN y ELSE false END +** iif(x,y) +** iif(x,y,NULL) +** iif(x,y,false) +*/ +static int sqlite3ExprIsIIF(sqlite3 *db, const Expr *pExpr){ + ExprList *pList; + if( pExpr->op==TK_FUNCTION ){ + const char *z = pExpr->u.zToken; + FuncDef *pDef; + if( (z[0]!='i' && z[0]!='I') ) return 0; + if( pExpr->x.pList==0 ) return 0; + pDef = sqlite3FindFunction(db, z, pExpr->x.pList->nExpr, ENC(db), 0); +#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION + if( pDef==0 ) return 0; +#else + if( NEVER(pDef==0) ) return 0; +#endif + if( (pDef->funcFlags & SQLITE_FUNC_INLINE)==0 ) return 0; + if( SQLITE_PTR_TO_INT(pDef->pUserData)!=INLINEFUNC_iif ) return 0; + }else if( pExpr->op==TK_CASE ){ + if( pExpr->pLeft!=0 ) return 0; + }else{ + return 0; + } + pList = pExpr->x.pList; + assert( pList!=0 ); + if( pList->nExpr==2 ) return 1; + if( pList->nExpr==3 && sqlite3ExprIsNotTrue(pList->a[2].pExpr) ) return 1; + return 0; +} + +/* +** Return true if we can prove the pE2 will always be true if pE1 is +** true. Return false if we cannot complete the proof or if pE2 might +** be false. Examples: +** +** pE1: x==5 pE2: x==5 Result: true +** pE1: x>0 pE2: x==5 Result: false +** pE1: x=21 pE2: x=21 OR y=43 Result: true +** pE1: x!=123 pE2: x IS NOT NULL Result: true +** pE1: x!=?1 pE2: x IS NOT NULL Result: true +** pE1: x IS NULL pE2: x IS NOT NULL Result: false +** pE1: x IS ?2 pE2: x IS NOT NULL Result: false +** pE1: iif(x,y) pE2: x Result: true +** PE1: iif(x,y,0) pE2: x Result: true +** +** When comparing TK_COLUMN nodes between pE1 and pE2, if pE2 has +** Expr.iTable<0 then assume a table number given by iTab. +** +** If pParse is not NULL, then the values of bound variables in pE1 are +** compared against literal values in pE2 and pParse->pVdbe->expmask is +** modified to record which bound variables are referenced. If pParse +** is NULL, then false will be returned if pE1 contains any bound variables. +** +** When in doubt, return false. Returning true might give a performance +** improvement. Returning false might cause a performance reduction, but +** it will always give the correct answer and is hence always safe. +*/ +SQLITE_PRIVATE int sqlite3ExprImpliesExpr( + const Parse *pParse, + const Expr *pE1, + const Expr *pE2, + int iTab +){ + if( sqlite3ExprCompare(pParse, pE1, pE2, iTab)==0 ){ + return 1; + } + if( pE2->op==TK_OR + && (sqlite3ExprImpliesExpr(pParse, pE1, pE2->pLeft, iTab) + || sqlite3ExprImpliesExpr(pParse, pE1, pE2->pRight, iTab) ) + ){ + return 1; + } + if( pE2->op==TK_NOTNULL + && exprImpliesNotNull(pParse, pE1, pE2->pLeft, iTab, 0) + ){ + return 1; + } + if( sqlite3ExprIsIIF(pParse->db, pE1) ){ + return sqlite3ExprImpliesExpr(pParse,pE1->x.pList->a[0].pExpr,pE2,iTab); + } + return 0; +} + +/* This is a helper function to impliesNotNullRow(). In this routine, +** set pWalker->eCode to one only if *both* of the input expressions +** separately have the implies-not-null-row property. +*/ +static void bothImplyNotNullRow(Walker *pWalker, Expr *pE1, Expr *pE2){ + if( pWalker->eCode==0 ){ + sqlite3WalkExpr(pWalker, pE1); + if( pWalker->eCode ){ + pWalker->eCode = 0; + sqlite3WalkExpr(pWalker, pE2); + } + } +} + +/* +** This is the Expr node callback for sqlite3ExprImpliesNonNullRow(). +** If the expression node requires that the table at pWalker->iCur +** have one or more non-NULL column, then set pWalker->eCode to 1 and abort. +** +** pWalker->mWFlags is non-zero if this inquiry is being undertaking on +** behalf of a RIGHT JOIN (or FULL JOIN). That makes a difference when +** evaluating terms in the ON clause of an inner join. +** +** This routine controls an optimization. False positives (setting +** pWalker->eCode to 1 when it should not be) are deadly, but false-negatives +** (never setting pWalker->eCode) is a harmless missed optimization. +*/ +static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){ + testcase( pExpr->op==TK_AGG_COLUMN ); + testcase( pExpr->op==TK_AGG_FUNCTION ); + if( ExprHasProperty(pExpr, EP_OuterON) ) return WRC_Prune; + if( ExprHasProperty(pExpr, EP_InnerON) && pWalker->mWFlags ){ + /* If iCur is used in an inner-join ON clause to the left of a + ** RIGHT JOIN, that does *not* mean that the table must be non-null. + ** But it is difficult to check for that condition precisely. + ** To keep things simple, any use of iCur from any inner-join is + ** ignored while attempting to simplify a RIGHT JOIN. */ + return WRC_Prune; + } + switch( pExpr->op ){ + case TK_ISNOT: + case TK_ISNULL: + case TK_NOTNULL: + case TK_IS: + case TK_VECTOR: + case TK_FUNCTION: + case TK_TRUTH: + case TK_CASE: + testcase( pExpr->op==TK_ISNOT ); + testcase( pExpr->op==TK_ISNULL ); + testcase( pExpr->op==TK_NOTNULL ); + testcase( pExpr->op==TK_IS ); + testcase( pExpr->op==TK_VECTOR ); + testcase( pExpr->op==TK_FUNCTION ); + testcase( pExpr->op==TK_TRUTH ); + testcase( pExpr->op==TK_CASE ); + return WRC_Prune; + + case TK_COLUMN: + if( pWalker->u.iCur==pExpr->iTable ){ + pWalker->eCode = 1; + return WRC_Abort; + } + return WRC_Prune; + + case TK_OR: + case TK_AND: + /* Both sides of an AND or OR must separately imply non-null-row. + ** Consider these cases: + ** 1. NOT (x AND y) + ** 2. x OR y + ** If only one of x or y is non-null-row, then the overall expression + ** can be true if the other arm is false (case 1) or true (case 2). + */ + testcase( pExpr->op==TK_OR ); + testcase( pExpr->op==TK_AND ); + bothImplyNotNullRow(pWalker, pExpr->pLeft, pExpr->pRight); + return WRC_Prune; + + case TK_IN: + /* Beware of "x NOT IN ()" and "x NOT IN (SELECT 1 WHERE false)", + ** both of which can be true. But apart from these cases, if + ** the left-hand side of the IN is NULL then the IN itself will be + ** NULL. */ + if( ExprUseXList(pExpr) && ALWAYS(pExpr->x.pList->nExpr>0) ){ + sqlite3WalkExpr(pWalker, pExpr->pLeft); + } + return WRC_Prune; + + case TK_BETWEEN: + /* In "x NOT BETWEEN y AND z" either x must be non-null-row or else + ** both y and z must be non-null row */ + assert( ExprUseXList(pExpr) ); + assert( pExpr->x.pList->nExpr==2 ); + sqlite3WalkExpr(pWalker, pExpr->pLeft); + bothImplyNotNullRow(pWalker, pExpr->x.pList->a[0].pExpr, + pExpr->x.pList->a[1].pExpr); + return WRC_Prune; + + /* Virtual tables are allowed to use constraints like x=NULL. So + ** a term of the form x=y does not prove that y is not null if x + ** is the column of a virtual table */ + case TK_EQ: + case TK_NE: + case TK_LT: + case TK_LE: + case TK_GT: + case TK_GE: { + Expr *pLeft = pExpr->pLeft; + Expr *pRight = pExpr->pRight; + testcase( pExpr->op==TK_EQ ); + testcase( pExpr->op==TK_NE ); + testcase( pExpr->op==TK_LT ); + testcase( pExpr->op==TK_LE ); + testcase( pExpr->op==TK_GT ); + testcase( pExpr->op==TK_GE ); + /* The y.pTab=0 assignment in wherecode.c always happens after the + ** impliesNotNullRow() test */ + assert( pLeft->op!=TK_COLUMN || ExprUseYTab(pLeft) ); + assert( pRight->op!=TK_COLUMN || ExprUseYTab(pRight) ); + if( (pLeft->op==TK_COLUMN + && ALWAYS(pLeft->y.pTab!=0) + && IsVirtual(pLeft->y.pTab)) + || (pRight->op==TK_COLUMN + && ALWAYS(pRight->y.pTab!=0) + && IsVirtual(pRight->y.pTab)) + ){ + return WRC_Prune; + } + /* no break */ deliberate_fall_through + } + default: + return WRC_Continue; + } +} + +/* +** Return true (non-zero) if expression p can only be true if at least +** one column of table iTab is non-null. In other words, return true +** if expression p will always be NULL or false if every column of iTab +** is NULL. +** +** False negatives are acceptable. In other words, it is ok to return +** zero even if expression p will never be true of every column of iTab +** is NULL. A false negative is merely a missed optimization opportunity. +** +** False positives are not allowed, however. A false positive may result +** in an incorrect answer. +** +** Terms of p that are marked with EP_OuterON (and hence that come from +** the ON or USING clauses of OUTER JOINS) are excluded from the analysis. +** +** This routine is used to check if a LEFT JOIN can be converted into +** an ordinary JOIN. The p argument is the WHERE clause. If the WHERE +** clause requires that some column of the right table of the LEFT JOIN +** be non-NULL, then the LEFT JOIN can be safely converted into an +** ordinary join. +*/ +SQLITE_PRIVATE int sqlite3ExprImpliesNonNullRow(Expr *p, int iTab, int isRJ){ + Walker w; + p = sqlite3ExprSkipCollateAndLikely(p); + if( p==0 ) return 0; + if( p->op==TK_NOTNULL ){ + p = p->pLeft; + }else{ + while( p->op==TK_AND ){ + if( sqlite3ExprImpliesNonNullRow(p->pLeft, iTab, isRJ) ) return 1; + p = p->pRight; + } + } + w.xExprCallback = impliesNotNullRow; + w.xSelectCallback = 0; + w.xSelectCallback2 = 0; + w.eCode = 0; + w.mWFlags = isRJ!=0; + w.u.iCur = iTab; + sqlite3WalkExpr(&w, p); + return w.eCode; +} + +/* +** An instance of the following structure is used by the tree walker +** to determine if an expression can be evaluated by reference to the +** index only, without having to do a search for the corresponding +** table entry. The IdxCover.pIdx field is the index. IdxCover.iCur +** is the cursor for the table. +*/ +struct IdxCover { + Index *pIdx; /* The index to be tested for coverage */ + int iCur; /* Cursor number for the table corresponding to the index */ +}; + +/* +** Check to see if there are references to columns in table +** pWalker->u.pIdxCover->iCur can be satisfied using the index +** pWalker->u.pIdxCover->pIdx. +*/ +static int exprIdxCover(Walker *pWalker, Expr *pExpr){ + if( pExpr->op==TK_COLUMN + && pExpr->iTable==pWalker->u.pIdxCover->iCur + && sqlite3TableColumnToIndex(pWalker->u.pIdxCover->pIdx, pExpr->iColumn)<0 + ){ + pWalker->eCode = 1; + return WRC_Abort; + } + return WRC_Continue; +} + +/* +** Determine if an index pIdx on table with cursor iCur contains will +** the expression pExpr. Return true if the index does cover the +** expression and false if the pExpr expression references table columns +** that are not found in the index pIdx. +** +** An index covering an expression means that the expression can be +** evaluated using only the index and without having to lookup the +** corresponding table entry. +*/ +SQLITE_PRIVATE int sqlite3ExprCoveredByIndex( + Expr *pExpr, /* The index to be tested */ + int iCur, /* The cursor number for the corresponding table */ + Index *pIdx /* The index that might be used for coverage */ +){ + Walker w; + struct IdxCover xcov; + memset(&w, 0, sizeof(w)); + xcov.iCur = iCur; + xcov.pIdx = pIdx; + w.xExprCallback = exprIdxCover; + w.u.pIdxCover = &xcov; + sqlite3WalkExpr(&w, pExpr); + return !w.eCode; +} + + +/* Structure used to pass information throughout the Walker in order to +** implement sqlite3ReferencesSrcList(). +*/ +struct RefSrcList { + sqlite3 *db; /* Database connection used for sqlite3DbRealloc() */ + SrcList *pRef; /* Looking for references to these tables */ + i64 nExclude; /* Number of tables to exclude from the search */ + int *aiExclude; /* Cursor IDs for tables to exclude from the search */ +}; + +/* +** Walker SELECT callbacks for sqlite3ReferencesSrcList(). +** +** When entering a new subquery on the pExpr argument, add all FROM clause +** entries for that subquery to the exclude list. +** +** When leaving the subquery, remove those entries from the exclude list. +*/ +static int selectRefEnter(Walker *pWalker, Select *pSelect){ + struct RefSrcList *p = pWalker->u.pRefSrcList; + SrcList *pSrc = pSelect->pSrc; + i64 i, j; + int *piNew; + if( pSrc->nSrc==0 ) return WRC_Continue; + j = p->nExclude; + p->nExclude += pSrc->nSrc; + piNew = sqlite3DbRealloc(p->db, p->aiExclude, p->nExclude*sizeof(int)); + if( piNew==0 ){ + p->nExclude = 0; + return WRC_Abort; + }else{ + p->aiExclude = piNew; + } + for(i=0; inSrc; i++, j++){ + p->aiExclude[j] = pSrc->a[i].iCursor; + } + return WRC_Continue; +} +static void selectRefLeave(Walker *pWalker, Select *pSelect){ + struct RefSrcList *p = pWalker->u.pRefSrcList; + SrcList *pSrc = pSelect->pSrc; + if( p->nExclude ){ + assert( p->nExclude>=pSrc->nSrc ); + p->nExclude -= pSrc->nSrc; + } +} + +/* This is the Walker EXPR callback for sqlite3ReferencesSrcList(). +** +** Set the 0x01 bit of pWalker->eCode if there is a reference to any +** of the tables shown in RefSrcList.pRef. +** +** Set the 0x02 bit of pWalker->eCode if there is a reference to a +** table is in neither RefSrcList.pRef nor RefSrcList.aiExclude. +*/ +static int exprRefToSrcList(Walker *pWalker, Expr *pExpr){ + if( pExpr->op==TK_COLUMN + || pExpr->op==TK_AGG_COLUMN + ){ + int i; + struct RefSrcList *p = pWalker->u.pRefSrcList; + SrcList *pSrc = p->pRef; + int nSrc = pSrc ? pSrc->nSrc : 0; + for(i=0; iiTable==pSrc->a[i].iCursor ){ + pWalker->eCode |= 1; + return WRC_Continue; + } + } + for(i=0; inExclude && p->aiExclude[i]!=pExpr->iTable; i++){} + if( i>=p->nExclude ){ + pWalker->eCode |= 2; + } + } + return WRC_Continue; +} + +/* +** Check to see if pExpr references any tables in pSrcList. +** Possible return values: +** +** 1 pExpr does references a table in pSrcList. +** +** 0 pExpr references some table that is not defined in either +** pSrcList or in subqueries of pExpr itself. +** +** -1 pExpr only references no tables at all, or it only +** references tables defined in subqueries of pExpr itself. +** +** As currently used, pExpr is always an aggregate function call. That +** fact is exploited for efficiency. +*/ +SQLITE_PRIVATE int sqlite3ReferencesSrcList(Parse *pParse, Expr *pExpr, SrcList *pSrcList){ + Walker w; + struct RefSrcList x; + assert( pParse->db!=0 ); + memset(&w, 0, sizeof(w)); + memset(&x, 0, sizeof(x)); + w.xExprCallback = exprRefToSrcList; + w.xSelectCallback = selectRefEnter; + w.xSelectCallback2 = selectRefLeave; + w.u.pRefSrcList = &x; + x.db = pParse->db; + x.pRef = pSrcList; + assert( pExpr->op==TK_AGG_FUNCTION ); + assert( ExprUseXList(pExpr) ); + sqlite3WalkExprList(&w, pExpr->x.pList); + if( pExpr->pLeft ){ + assert( pExpr->pLeft->op==TK_ORDER ); + assert( ExprUseXList(pExpr->pLeft) ); + assert( pExpr->pLeft->x.pList!=0 ); + sqlite3WalkExprList(&w, pExpr->pLeft->x.pList); + } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( ExprHasProperty(pExpr, EP_WinFunc) ){ + sqlite3WalkExpr(&w, pExpr->y.pWin->pFilter); + } +#endif + if( x.aiExclude ) sqlite3DbNNFreeNN(pParse->db, x.aiExclude); + if( w.eCode & 0x01 ){ + return 1; + }else if( w.eCode ){ + return 0; + }else{ + return -1; + } +} + +/* +** This is a Walker expression node callback. +** +** For Expr nodes that contain pAggInfo pointers, make sure the AggInfo +** object that is referenced does not refer directly to the Expr. If +** it does, make a copy. This is done because the pExpr argument is +** subject to change. +** +** The copy is scheduled for deletion using the sqlite3ExprDeferredDelete() +** which builds on the sqlite3ParserAddCleanup() mechanism. +*/ +static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){ + if( ALWAYS(!ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced)) + && pExpr->pAggInfo!=0 + ){ + AggInfo *pAggInfo = pExpr->pAggInfo; + int iAgg = pExpr->iAgg; + Parse *pParse = pWalker->pParse; + sqlite3 *db = pParse->db; + assert( iAgg>=0 ); + if( pExpr->op!=TK_AGG_FUNCTION ){ + if( iAggnColumn + && pAggInfo->aCol[iAgg].pCExpr==pExpr + ){ + pExpr = sqlite3ExprDup(db, pExpr, 0); + if( pExpr && !sqlite3ExprDeferredDelete(pParse, pExpr) ){ + pAggInfo->aCol[iAgg].pCExpr = pExpr; + } + } + }else{ + assert( pExpr->op==TK_AGG_FUNCTION ); + if( ALWAYS(iAggnFunc) + && pAggInfo->aFunc[iAgg].pFExpr==pExpr + ){ + pExpr = sqlite3ExprDup(db, pExpr, 0); + if( pExpr && !sqlite3ExprDeferredDelete(pParse, pExpr) ){ + pAggInfo->aFunc[iAgg].pFExpr = pExpr; + } + } + } + } + return WRC_Continue; +} + +/* +** Initialize a Walker object so that will persist AggInfo entries referenced +** by the tree that is walked. +*/ +SQLITE_PRIVATE void sqlite3AggInfoPersistWalkerInit(Walker *pWalker, Parse *pParse){ + memset(pWalker, 0, sizeof(*pWalker)); + pWalker->pParse = pParse; + pWalker->xExprCallback = agginfoPersistExprCb; + pWalker->xSelectCallback = sqlite3SelectWalkNoop; +} + +/* +** Add a new element to the pAggInfo->aCol[] array. Return the index of +** the new element. Return a negative number if malloc fails. +*/ +static int addAggInfoColumn(sqlite3 *db, AggInfo *pInfo){ + int i; + pInfo->aCol = sqlite3ArrayAllocate( + db, + pInfo->aCol, + sizeof(pInfo->aCol[0]), + &pInfo->nColumn, + &i + ); + return i; +} + +/* +** Add a new element to the pAggInfo->aFunc[] array. Return the index of +** the new element. Return a negative number if malloc fails. +*/ +static int addAggInfoFunc(sqlite3 *db, AggInfo *pInfo){ + int i; + pInfo->aFunc = sqlite3ArrayAllocate( + db, + pInfo->aFunc, + sizeof(pInfo->aFunc[0]), + &pInfo->nFunc, + &i + ); + return i; +} + +/* +** Search the AggInfo object for an aCol[] entry that has iTable and iColumn. +** Return the index in aCol[] of the entry that describes that column. +** +** If no prior entry is found, create a new one and return -1. The +** new column will have an index of pAggInfo->nColumn-1. +*/ +static void findOrCreateAggInfoColumn( + Parse *pParse, /* Parsing context */ + AggInfo *pAggInfo, /* The AggInfo object to search and/or modify */ + Expr *pExpr /* Expr describing the column to find or insert */ +){ + struct AggInfo_col *pCol; + int k; + int mxTerm = pParse->db->aLimit[SQLITE_LIMIT_COLUMN]; + + assert( mxTerm <= SMXV(i16) ); + assert( pAggInfo->iFirstReg==0 ); + pCol = pAggInfo->aCol; + for(k=0; knColumn; k++, pCol++){ + if( pCol->pCExpr==pExpr ) return; + if( pCol->iTable==pExpr->iTable + && pCol->iColumn==pExpr->iColumn + && pExpr->op!=TK_IF_NULL_ROW + ){ + goto fix_up_expr; + } + } + k = addAggInfoColumn(pParse->db, pAggInfo); + if( k<0 ){ + /* OOM on resize */ + assert( pParse->db->mallocFailed ); + return; + } + if( k>mxTerm ){ + sqlite3ErrorMsg(pParse, "more than %d aggregate terms", mxTerm); + k = mxTerm; + } + pCol = &pAggInfo->aCol[k]; + assert( ExprUseYTab(pExpr) ); + pCol->pTab = pExpr->y.pTab; + pCol->iTable = pExpr->iTable; + pCol->iColumn = pExpr->iColumn; + pCol->iSorterColumn = -1; + pCol->pCExpr = pExpr; + if( pAggInfo->pGroupBy && pExpr->op!=TK_IF_NULL_ROW ){ + int j, n; + ExprList *pGB = pAggInfo->pGroupBy; + struct ExprList_item *pTerm = pGB->a; + n = pGB->nExpr; + for(j=0; jpExpr; + if( pE->op==TK_COLUMN + && pE->iTable==pExpr->iTable + && pE->iColumn==pExpr->iColumn + ){ + pCol->iSorterColumn = j; + break; + } + } + } + if( pCol->iSorterColumn<0 ){ + pCol->iSorterColumn = pAggInfo->nSortingColumn++; + } +fix_up_expr: + ExprSetVVAProperty(pExpr, EP_NoReduce); + assert( pExpr->pAggInfo==0 || pExpr->pAggInfo==pAggInfo ); + pExpr->pAggInfo = pAggInfo; + if( pExpr->op==TK_COLUMN ){ + pExpr->op = TK_AGG_COLUMN; + } + assert( k <= SMXV(pExpr->iAgg) ); + pExpr->iAgg = (i16)k; +} + +/* +** This is the xExprCallback for a tree walker. It is used to +** implement sqlite3ExprAnalyzeAggregates(). See sqlite3ExprAnalyzeAggregates +** for additional information. +*/ +static int analyzeAggregate(Walker *pWalker, Expr *pExpr){ + int i; + NameContext *pNC = pWalker->u.pNC; + Parse *pParse = pNC->pParse; + SrcList *pSrcList = pNC->pSrcList; + AggInfo *pAggInfo = pNC->uNC.pAggInfo; + + assert( pNC->ncFlags & NC_UAggInfo ); + assert( pAggInfo->iFirstReg==0 ); + switch( pExpr->op ){ + default: { + IndexedExpr *pIEpr; + Expr tmp; + assert( pParse->iSelfTab==0 ); + if( (pNC->ncFlags & NC_InAggFunc)==0 ) break; + if( pParse->pIdxEpr==0 ) break; + for(pIEpr=pParse->pIdxEpr; pIEpr; pIEpr=pIEpr->pIENext){ + int iDataCur = pIEpr->iDataCur; + if( iDataCur<0 ) continue; + if( sqlite3ExprCompare(0, pExpr, pIEpr->pExpr, iDataCur)==0 ) break; + } + if( pIEpr==0 ) break; + if( NEVER(!ExprUseYTab(pExpr)) ) break; + for(i=0; inSrc; i++){ + if( pSrcList->a[0].iCursor==pIEpr->iDataCur ) break; + } + if( i>=pSrcList->nSrc ) break; + if( NEVER(pExpr->pAggInfo!=0) ) break; /* Resolved by outer context */ + if( pParse->nErr ){ return WRC_Abort; } + + /* If we reach this point, it means that expression pExpr can be + ** translated into a reference to an index column as described by + ** pIEpr. + */ + memset(&tmp, 0, sizeof(tmp)); + tmp.op = TK_AGG_COLUMN; + tmp.iTable = pIEpr->iIdxCur; + tmp.iColumn = pIEpr->iIdxCol; + findOrCreateAggInfoColumn(pParse, pAggInfo, &tmp); + if( pParse->nErr ){ return WRC_Abort; } + assert( pAggInfo->aCol!=0 ); + assert( tmp.iAggnColumn ); + pAggInfo->aCol[tmp.iAgg].pCExpr = pExpr; + pExpr->pAggInfo = pAggInfo; + pExpr->iAgg = tmp.iAgg; + return WRC_Prune; + } + case TK_IF_NULL_ROW: + case TK_AGG_COLUMN: + case TK_COLUMN: { + testcase( pExpr->op==TK_AGG_COLUMN ); + testcase( pExpr->op==TK_COLUMN ); + testcase( pExpr->op==TK_IF_NULL_ROW ); + /* Check to see if the column is in one of the tables in the FROM + ** clause of the aggregate query */ + if( ALWAYS(pSrcList!=0) ){ + SrcItem *pItem = pSrcList->a; + for(i=0; inSrc; i++, pItem++){ + assert( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) ); + if( pExpr->iTable==pItem->iCursor ){ + findOrCreateAggInfoColumn(pParse, pAggInfo, pExpr); + break; + } /* endif pExpr->iTable==pItem->iCursor */ + } /* end loop over pSrcList */ + } + return WRC_Continue; + } + case TK_AGG_FUNCTION: { + if( (pNC->ncFlags & NC_InAggFunc)==0 + && pWalker->walkerDepth==pExpr->op2 + && pExpr->pAggInfo==0 + ){ + /* Check to see if pExpr is a duplicate of another aggregate + ** function that is already in the pAggInfo structure + */ + struct AggInfo_func *pItem = pAggInfo->aFunc; + int mxTerm = pParse->db->aLimit[SQLITE_LIMIT_COLUMN]; + assert( mxTerm <= SMXV(i16) ); + for(i=0; inFunc; i++, pItem++){ + if( NEVER(pItem->pFExpr==pExpr) ) break; + if( sqlite3ExprCompare(0, pItem->pFExpr, pExpr, -1)==0 ){ + break; + } + } + if( i>mxTerm ){ + sqlite3ErrorMsg(pParse, "more than %d aggregate terms", mxTerm); + i = mxTerm; + assert( inFunc ); + }else if( i>=pAggInfo->nFunc ){ + /* pExpr is original. Make a new entry in pAggInfo->aFunc[] + */ + u8 enc = ENC(pParse->db); + i = addAggInfoFunc(pParse->db, pAggInfo); + if( i>=0 ){ + int nArg; + assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); + pItem = &pAggInfo->aFunc[i]; + pItem->pFExpr = pExpr; + assert( ExprUseUToken(pExpr) ); + nArg = pExpr->x.pList ? pExpr->x.pList->nExpr : 0; + pItem->pFunc = sqlite3FindFunction(pParse->db, + pExpr->u.zToken, nArg, enc, 0); + assert( pItem->bOBUnique==0 ); + if( pExpr->pLeft + && (pItem->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL)==0 + ){ + /* The NEEDCOLL test above causes any ORDER BY clause on + ** aggregate min() or max() to be ignored. */ + ExprList *pOBList; + assert( nArg>0 ); + assert( pExpr->pLeft->op==TK_ORDER ); + assert( ExprUseXList(pExpr->pLeft) ); + pItem->iOBTab = pParse->nTab++; + pOBList = pExpr->pLeft->x.pList; + assert( pOBList->nExpr>0 ); + assert( pItem->bOBUnique==0 ); + if( pOBList->nExpr==1 + && nArg==1 + && sqlite3ExprCompare(0,pOBList->a[0].pExpr, + pExpr->x.pList->a[0].pExpr,0)==0 + ){ + pItem->bOBPayload = 0; + pItem->bOBUnique = ExprHasProperty(pExpr, EP_Distinct); + }else{ + pItem->bOBPayload = 1; + } + pItem->bUseSubtype = + (pItem->pFunc->funcFlags & SQLITE_SUBTYPE)!=0; + }else{ + pItem->iOBTab = -1; + } + if( ExprHasProperty(pExpr, EP_Distinct) && !pItem->bOBUnique ){ + pItem->iDistinct = pParse->nTab++; + }else{ + pItem->iDistinct = -1; + } + } + } + /* Make pExpr point to the appropriate pAggInfo->aFunc[] entry + */ + assert( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) ); + ExprSetVVAProperty(pExpr, EP_NoReduce); + assert( i <= SMXV(pExpr->iAgg) ); + pExpr->iAgg = (i16)i; + pExpr->pAggInfo = pAggInfo; + return WRC_Prune; + }else{ + return WRC_Continue; + } + } + } + return WRC_Continue; +} + +/* +** Analyze the pExpr expression looking for aggregate functions and +** for variables that need to be added to AggInfo object that pNC->pAggInfo +** points to. Additional entries are made on the AggInfo object as +** necessary. +** +** This routine should only be called after the expression has been +** analyzed by sqlite3ResolveExprNames(). +*/ +SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){ + Walker w; + w.xExprCallback = analyzeAggregate; + w.xSelectCallback = sqlite3WalkerDepthIncrease; + w.xSelectCallback2 = sqlite3WalkerDepthDecrease; + w.walkerDepth = 0; + w.u.pNC = pNC; + w.pParse = 0; + assert( pNC->pSrcList!=0 ); + sqlite3WalkExpr(&w, pExpr); +} + +/* +** Call sqlite3ExprAnalyzeAggregates() for every expression in an +** expression list. Return the number of errors. +** +** If an error is found, the analysis is cut short. +*/ +SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext *pNC, ExprList *pList){ + struct ExprList_item *pItem; + int i; + if( pList ){ + for(pItem=pList->a, i=0; inExpr; i++, pItem++){ + sqlite3ExprAnalyzeAggregates(pNC, pItem->pExpr); + } + } +} + +/* +** Allocate a single new register for use to hold some intermediate result. +*/ +SQLITE_PRIVATE int sqlite3GetTempReg(Parse *pParse){ + if( pParse->nTempReg==0 ){ + return ++pParse->nMem; + } + return pParse->aTempReg[--pParse->nTempReg]; +} + +/* +** Deallocate a register, making available for reuse for some other +** purpose. +*/ +SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse *pParse, int iReg){ + if( iReg ){ + sqlite3VdbeReleaseRegisters(pParse, iReg, 1, 0, 0); + if( pParse->nTempRegaTempReg) ){ + pParse->aTempReg[pParse->nTempReg++] = iReg; + } + } +} + +/* +** Allocate or deallocate a block of nReg consecutive registers. +*/ +SQLITE_PRIVATE int sqlite3GetTempRange(Parse *pParse, int nReg){ + int i, n; + if( nReg==1 ) return sqlite3GetTempReg(pParse); + i = pParse->iRangeReg; + n = pParse->nRangeReg; + if( nReg<=n ){ + pParse->iRangeReg += nReg; + pParse->nRangeReg -= nReg; + }else{ + i = pParse->nMem+1; + pParse->nMem += nReg; + } + return i; +} +SQLITE_PRIVATE void sqlite3ReleaseTempRange(Parse *pParse, int iReg, int nReg){ + if( nReg==1 ){ + sqlite3ReleaseTempReg(pParse, iReg); + return; + } + sqlite3VdbeReleaseRegisters(pParse, iReg, nReg, 0, 0); + if( nReg>pParse->nRangeReg ){ + pParse->nRangeReg = nReg; + pParse->iRangeReg = iReg; + } +} + +/* +** Mark all temporary registers as being unavailable for reuse. +** +** Always invoke this procedure after coding a subroutine or co-routine +** that might be invoked from other parts of the code, to ensure that +** the sub/co-routine does not use registers in common with the code that +** invokes the sub/co-routine. +*/ +SQLITE_PRIVATE void sqlite3ClearTempRegCache(Parse *pParse){ + pParse->nTempReg = 0; + pParse->nRangeReg = 0; +} + +/* +** Make sure sufficient registers have been allocated so that +** iReg is a valid register number. +*/ +SQLITE_PRIVATE void sqlite3TouchRegister(Parse *pParse, int iReg){ + if( pParse->nMemnMem = iReg; +} + +#if defined(SQLITE_ENABLE_STAT4) || defined(SQLITE_DEBUG) +/* +** Return the latest reusable register in the set of all registers. +** The value returned is no less than iMin. If any register iMin or +** greater is in permanent use, then return one more than that last +** permanent register. +*/ +SQLITE_PRIVATE int sqlite3FirstAvailableRegister(Parse *pParse, int iMin){ + const ExprList *pList = pParse->pConstExpr; + if( pList ){ + int i; + for(i=0; inExpr; i++){ + if( pList->a[i].u.iConstExprReg>=iMin ){ + iMin = pList->a[i].u.iConstExprReg + 1; + } + } + } + pParse->nTempReg = 0; + pParse->nRangeReg = 0; + return iMin; +} +#endif /* SQLITE_ENABLE_STAT4 || SQLITE_DEBUG */ + +/* +** Validate that no temporary register falls within the range of +** iFirst..iLast, inclusive. This routine is only call from within assert() +** statements. +*/ +#ifdef SQLITE_DEBUG +SQLITE_PRIVATE int sqlite3NoTempsInRange(Parse *pParse, int iFirst, int iLast){ + int i; + if( pParse->nRangeReg>0 + && pParse->iRangeReg+pParse->nRangeReg > iFirst + && pParse->iRangeReg <= iLast + ){ + return 0; + } + for(i=0; inTempReg; i++){ + if( pParse->aTempReg[i]>=iFirst && pParse->aTempReg[i]<=iLast ){ + return 0; + } + } + if( pParse->pConstExpr ){ + ExprList *pList = pParse->pConstExpr; + for(i=0; inExpr; i++){ + int iReg = pList->a[i].u.iConstExprReg; + if( iReg==0 ) continue; + if( iReg>=iFirst && iReg<=iLast ) return 0; + } + } + return 1; +} +#endif /* SQLITE_DEBUG */ + +/************** End of expr.c ************************************************/ +/************** Begin file alter.c *******************************************/ +/* +** 2005 February 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains C code routines that used to generate VDBE code +** that implements the ALTER TABLE command. +*/ +/* #include "sqliteInt.h" */ + +/* +** The code in this file only exists if we are not omitting the +** ALTER TABLE logic from the build. +*/ +#ifndef SQLITE_OMIT_ALTERTABLE + +/* +** Parameter zName is the name of a table that is about to be altered +** (either with ALTER TABLE ... RENAME TO or ALTER TABLE ... ADD COLUMN). +** If the table is a system table, this function leaves an error message +** in pParse->zErr (system tables may not be altered) and returns non-zero. +** +** Or, if zName is not a system table, zero is returned. +*/ +static int isAlterableTable(Parse *pParse, Table *pTab){ + if( 0==sqlite3StrNICmp(pTab->zName, "sqlite_", 7) +#ifndef SQLITE_OMIT_VIRTUALTABLE + || (pTab->tabFlags & TF_Eponymous)!=0 + || ( (pTab->tabFlags & TF_Shadow)!=0 + && sqlite3ReadOnlyShadowTables(pParse->db) + ) +#endif + ){ + sqlite3ErrorMsg(pParse, "table %s may not be altered", pTab->zName); + return 1; + } + return 0; +} + +/* +** Generate code to verify that the schemas of database zDb and, if +** bTemp is not true, database "temp", can still be parsed. This is +** called at the end of the generation of an ALTER TABLE ... RENAME ... +** statement to ensure that the operation has not rendered any schema +** objects unusable. +*/ +static void renameTestSchema( + Parse *pParse, /* Parse context */ + const char *zDb, /* Name of db to verify schema of */ + int bTemp, /* True if this is the temp db */ + const char *zWhen, /* "when" part of error message */ + int bNoDQS /* Do not allow DQS in the schema */ +){ + pParse->colNamesSet = 1; + sqlite3NestedParse(pParse, + "SELECT 1 " + "FROM \"%w\"." LEGACY_SCHEMA_TABLE " " + "WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X'" + " AND sql NOT LIKE 'create virtual%%'" + " AND sqlite_rename_test(%Q, sql, type, name, %d, %Q, %d)=NULL ", + zDb, + zDb, bTemp, zWhen, bNoDQS + ); + + if( bTemp==0 ){ + sqlite3NestedParse(pParse, + "SELECT 1 " + "FROM temp." LEGACY_SCHEMA_TABLE " " + "WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X'" + " AND sql NOT LIKE 'create virtual%%'" + " AND sqlite_rename_test(%Q, sql, type, name, 1, %Q, %d)=NULL ", + zDb, zWhen, bNoDQS + ); + } +} + +/* +** Generate VM code to replace any double-quoted strings (but not double-quoted +** identifiers) within the "sql" column of the sqlite_schema table in +** database zDb with their single-quoted equivalents. If argument bTemp is +** not true, similarly update all SQL statements in the sqlite_schema table +** of the temp db. +*/ +static void renameFixQuotes(Parse *pParse, const char *zDb, int bTemp){ + sqlite3NestedParse(pParse, + "UPDATE \"%w\"." LEGACY_SCHEMA_TABLE + " SET sql = sqlite_rename_quotefix(%Q, sql)" + "WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X'" + " AND sql NOT LIKE 'create virtual%%'" , zDb, zDb + ); + if( bTemp==0 ){ + sqlite3NestedParse(pParse, + "UPDATE temp." LEGACY_SCHEMA_TABLE + " SET sql = sqlite_rename_quotefix('temp', sql)" + "WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X'" + " AND sql NOT LIKE 'create virtual%%'" + ); + } +} + +/* +** Generate code to reload the schema for database iDb. And, if iDb!=1, for +** the temp database as well. +*/ +static void renameReloadSchema(Parse *pParse, int iDb, u16 p5){ + Vdbe *v = pParse->pVdbe; + if( v ){ + sqlite3ChangeCookie(pParse, iDb); + sqlite3VdbeAddParseSchemaOp(pParse->pVdbe, iDb, 0, p5); + if( iDb!=1 ) sqlite3VdbeAddParseSchemaOp(pParse->pVdbe, 1, 0, p5); + } +} + +/* +** Generate code to implement the "ALTER TABLE xxx RENAME TO yyy" +** command. +*/ +SQLITE_PRIVATE void sqlite3AlterRenameTable( + Parse *pParse, /* Parser context. */ + SrcList *pSrc, /* The table to rename. */ + Token *pName /* The new table name. */ +){ + int iDb; /* Database that contains the table */ + char *zDb; /* Name of database iDb */ + Table *pTab; /* Table being renamed */ + char *zName = 0; /* NULL-terminated version of pName */ + sqlite3 *db = pParse->db; /* Database connection */ + int nTabName; /* Number of UTF-8 characters in zTabName */ + const char *zTabName; /* Original name of the table */ + Vdbe *v; + VTable *pVTab = 0; /* Non-zero if this is a v-tab with an xRename() */ + + if( NEVER(db->mallocFailed) ) goto exit_rename_table; + assert( pSrc->nSrc==1 ); + assert( sqlite3BtreeHoldsAllMutexes(pParse->db) ); + + pTab = sqlite3LocateTableItem(pParse, 0, &pSrc->a[0]); + if( !pTab ) goto exit_rename_table; + iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + zDb = db->aDb[iDb].zDbSName; + + /* Get a NULL terminated version of the new table name. */ + zName = sqlite3NameFromToken(db, pName); + if( !zName ) goto exit_rename_table; + + /* Check that a table or index named 'zName' does not already exist + ** in database iDb. If so, this is an error. + */ + if( sqlite3FindTable(db, zName, zDb) + || sqlite3FindIndex(db, zName, zDb) + || sqlite3IsShadowTableOf(db, pTab, zName) + ){ + sqlite3ErrorMsg(pParse, + "there is already another table or index with this name: %s", zName); + goto exit_rename_table; + } + + /* Make sure it is not a system table being altered, or a reserved name + ** that the table is being renamed to. + */ + if( SQLITE_OK!=isAlterableTable(pParse, pTab) ){ + goto exit_rename_table; + } + if( SQLITE_OK!=sqlite3CheckObjectName(pParse,zName,"table",zName) ){ + goto exit_rename_table; + } + +#ifndef SQLITE_OMIT_VIEW + if( IsView(pTab) ){ + sqlite3ErrorMsg(pParse, "view %s may not be altered", pTab->zName); + goto exit_rename_table; + } +#endif + +#ifndef SQLITE_OMIT_AUTHORIZATION + /* Invoke the authorization callback. */ + if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){ + goto exit_rename_table; + } +#endif + +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( sqlite3ViewGetColumnNames(pParse, pTab) ){ + goto exit_rename_table; + } + if( IsVirtual(pTab) ){ + pVTab = sqlite3GetVTable(db, pTab); + if( pVTab->pVtab->pModule->xRename==0 ){ + pVTab = 0; + } + } +#endif + + /* Begin a transaction for database iDb. Then modify the schema cookie + ** (since the ALTER TABLE modifies the schema). Call sqlite3MayAbort(), + ** as the scalar functions (e.g. sqlite_rename_table()) invoked by the + ** nested SQL may raise an exception. */ + v = sqlite3GetVdbe(pParse); + if( v==0 ){ + goto exit_rename_table; + } + sqlite3MayAbort(pParse); + + /* figure out how many UTF-8 characters are in zName */ + zTabName = pTab->zName; + nTabName = sqlite3Utf8CharLen(zTabName, -1); + + /* Rewrite all CREATE TABLE, INDEX, TRIGGER or VIEW statements in + ** the schema to use the new table name. */ + sqlite3NestedParse(pParse, + "UPDATE \"%w\"." LEGACY_SCHEMA_TABLE " SET " + "sql = sqlite_rename_table(%Q, type, name, sql, %Q, %Q, %d) " + "WHERE (type!='index' OR tbl_name=%Q COLLATE nocase)" + "AND name NOT LIKE 'sqliteX_%%' ESCAPE 'X'" + , zDb, zDb, zTabName, zName, (iDb==1), zTabName + ); + + /* Update the tbl_name and name columns of the sqlite_schema table + ** as required. */ + sqlite3NestedParse(pParse, + "UPDATE %Q." LEGACY_SCHEMA_TABLE " SET " + "tbl_name = %Q, " + "name = CASE " + "WHEN type='table' THEN %Q " + "WHEN name LIKE 'sqliteX_autoindex%%' ESCAPE 'X' " + " AND type='index' THEN " + "'sqlite_autoindex_' || %Q || substr(name,%d+18) " + "ELSE name END " + "WHERE tbl_name=%Q COLLATE nocase AND " + "(type='table' OR type='index' OR type='trigger');", + zDb, + zName, zName, zName, + nTabName, zTabName + ); + +#ifndef SQLITE_OMIT_AUTOINCREMENT + /* If the sqlite_sequence table exists in this database, then update + ** it with the new table name. + */ + if( sqlite3FindTable(db, "sqlite_sequence", zDb) ){ + sqlite3NestedParse(pParse, + "UPDATE \"%w\".sqlite_sequence set name = %Q WHERE name = %Q", + zDb, zName, pTab->zName); + } +#endif + + /* If the table being renamed is not itself part of the temp database, + ** edit view and trigger definitions within the temp database + ** as required. */ + if( iDb!=1 ){ + sqlite3NestedParse(pParse, + "UPDATE sqlite_temp_schema SET " + "sql = sqlite_rename_table(%Q, type, name, sql, %Q, %Q, 1), " + "tbl_name = " + "CASE WHEN tbl_name=%Q COLLATE nocase AND " + " sqlite_rename_test(%Q, sql, type, name, 1, 'after rename', 0) " + "THEN %Q ELSE tbl_name END " + "WHERE type IN ('view', 'trigger')" + , zDb, zTabName, zName, zTabName, zDb, zName); + } + + /* If this is a virtual table, invoke the xRename() function if + ** one is defined. The xRename() callback will modify the names + ** of any resources used by the v-table implementation (including other + ** SQLite tables) that are identified by the name of the virtual table. + */ +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( pVTab ){ + int i = ++pParse->nMem; + sqlite3VdbeLoadString(v, i, zName); + sqlite3VdbeAddOp4(v, OP_VRename, i, 0, 0,(const char*)pVTab, P4_VTAB); + } +#endif + + renameReloadSchema(pParse, iDb, INITFLAG_AlterRename); + renameTestSchema(pParse, zDb, iDb==1, "after rename", 0); + +exit_rename_table: + sqlite3SrcListDelete(db, pSrc); + sqlite3DbFree(db, zName); +} + +/* +** Write code that will raise an error if the table described by +** zDb and zTab is not empty. +*/ +static void sqlite3ErrorIfNotEmpty( + Parse *pParse, /* Parsing context */ + const char *zDb, /* Schema holding the table */ + const char *zTab, /* Table to check for empty */ + const char *zErr /* Error message text */ +){ + sqlite3NestedParse(pParse, + "SELECT raise(ABORT,%Q) FROM \"%w\".\"%w\"", + zErr, zDb, zTab + ); +} + +/* +** This function is called after an "ALTER TABLE ... ADD" statement +** has been parsed. Argument pColDef contains the text of the new +** column definition. +** +** The Table structure pParse->pNewTable was extended to include +** the new column during parsing. +*/ +SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){ + Table *pNew; /* Copy of pParse->pNewTable */ + Table *pTab; /* Table being altered */ + int iDb; /* Database number */ + const char *zDb; /* Database name */ + const char *zTab; /* Table name */ + char *zCol; /* Null-terminated column definition */ + Column *pCol; /* The new column */ + Expr *pDflt; /* Default value for the new column */ + sqlite3 *db; /* The database connection; */ + Vdbe *v; /* The prepared statement under construction */ + int r1; /* Temporary registers */ + + db = pParse->db; + assert( db->pParse==pParse ); + if( pParse->nErr ) return; + assert( db->mallocFailed==0 ); + pNew = pParse->pNewTable; + assert( pNew ); + + assert( sqlite3BtreeHoldsAllMutexes(db) ); + iDb = sqlite3SchemaToIndex(db, pNew->pSchema); + zDb = db->aDb[iDb].zDbSName; + zTab = &pNew->zName[16]; /* Skip the "sqlite_altertab_" prefix on the name */ + pCol = &pNew->aCol[pNew->nCol-1]; + pDflt = sqlite3ColumnExpr(pNew, pCol); + pTab = sqlite3FindTable(db, zTab, zDb); + assert( pTab ); + +#ifndef SQLITE_OMIT_AUTHORIZATION + /* Invoke the authorization callback. */ + if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){ + return; + } +#endif + + + /* Check that the new column is not specified as PRIMARY KEY or UNIQUE. + ** If there is a NOT NULL constraint, then the default value for the + ** column must not be NULL. + */ + if( pCol->colFlags & COLFLAG_PRIMKEY ){ + sqlite3ErrorMsg(pParse, "Cannot add a PRIMARY KEY column"); + return; + } + if( pNew->pIndex ){ + sqlite3ErrorMsg(pParse, + "Cannot add a UNIQUE column"); + return; + } + if( (pCol->colFlags & COLFLAG_GENERATED)==0 ){ + /* If the default value for the new column was specified with a + ** literal NULL, then set pDflt to 0. This simplifies checking + ** for an SQL NULL default below. + */ + assert( pDflt==0 || pDflt->op==TK_SPAN ); + if( pDflt && pDflt->pLeft->op==TK_NULL ){ + pDflt = 0; + } + assert( IsOrdinaryTable(pNew) ); + if( (db->flags&SQLITE_ForeignKeys) && pNew->u.tab.pFKey && pDflt ){ + sqlite3ErrorIfNotEmpty(pParse, zDb, zTab, + "Cannot add a REFERENCES column with non-NULL default value"); + } + if( pCol->notNull && !pDflt ){ + sqlite3ErrorIfNotEmpty(pParse, zDb, zTab, + "Cannot add a NOT NULL column with default value NULL"); + } + + + /* Ensure the default expression is something that sqlite3ValueFromExpr() + ** can handle (i.e. not CURRENT_TIME etc.) + */ + if( pDflt ){ + sqlite3_value *pVal = 0; + int rc; + rc = sqlite3ValueFromExpr(db, pDflt, SQLITE_UTF8, SQLITE_AFF_BLOB, &pVal); + assert( rc==SQLITE_OK || rc==SQLITE_NOMEM ); + if( rc!=SQLITE_OK ){ + assert( db->mallocFailed == 1 ); + return; + } + if( !pVal ){ + sqlite3ErrorIfNotEmpty(pParse, zDb, zTab, + "Cannot add a column with non-constant default"); + } + sqlite3ValueFree(pVal); + } + }else if( pCol->colFlags & COLFLAG_STORED ){ + sqlite3ErrorIfNotEmpty(pParse, zDb, zTab, "cannot add a STORED column"); + } + + + /* Modify the CREATE TABLE statement. */ + zCol = sqlite3DbStrNDup(db, (char*)pColDef->z, pColDef->n); + if( zCol ){ + char *zEnd = &zCol[pColDef->n-1]; + while( zEnd>zCol && (*zEnd==';' || sqlite3Isspace(*zEnd)) ){ + *zEnd-- = '\0'; + } + /* substr() operations on characters, but addColOffset is in bytes. So we + ** have to use printf() to translate between these units: */ + assert( IsOrdinaryTable(pTab) ); + assert( IsOrdinaryTable(pNew) ); + sqlite3NestedParse(pParse, + "UPDATE \"%w\"." LEGACY_SCHEMA_TABLE " SET " + "sql = printf('%%.%ds, ',sql) || %Q" + " || substr(sql,1+length(printf('%%.%ds',sql))) " + "WHERE type = 'table' AND name = %Q", + zDb, pNew->u.tab.addColOffset, zCol, pNew->u.tab.addColOffset, + zTab + ); + sqlite3DbFree(db, zCol); + } + + v = sqlite3GetVdbe(pParse); + if( v ){ + /* Make sure the schema version is at least 3. But do not upgrade + ** from less than 3 to 4, as that will corrupt any preexisting DESC + ** index. + */ + r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, r1, BTREE_FILE_FORMAT); + sqlite3VdbeUsesBtree(v, iDb); + sqlite3VdbeAddOp2(v, OP_AddImm, r1, -2); + sqlite3VdbeAddOp2(v, OP_IfPos, r1, sqlite3VdbeCurrentAddr(v)+2); + VdbeCoverage(v); + sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, 3); + sqlite3ReleaseTempReg(pParse, r1); + + /* Reload the table definition */ + renameReloadSchema(pParse, iDb, INITFLAG_AlterAdd); + + /* Verify that constraints are still satisfied */ + if( pNew->pCheck!=0 + || (pCol->notNull && (pCol->colFlags & COLFLAG_GENERATED)!=0) + || (pTab->tabFlags & TF_Strict)!=0 + ){ + sqlite3NestedParse(pParse, + "SELECT CASE WHEN quick_check GLOB 'CHECK*'" + " THEN raise(ABORT,'CHECK constraint failed')" + " WHEN quick_check GLOB 'non-* value in*'" + " THEN raise(ABORT,'type mismatch on DEFAULT')" + " ELSE raise(ABORT,'NOT NULL constraint failed')" + " END" + " FROM pragma_quick_check(%Q,%Q)" + " WHERE quick_check GLOB 'CHECK*'" + " OR quick_check GLOB 'NULL*'" + " OR quick_check GLOB 'non-* value in*'", + zTab, zDb + ); + } + } +} + +/* +** This function is called by the parser after the table-name in +** an "ALTER TABLE ADD" statement is parsed. Argument +** pSrc is the full-name of the table being altered. +** +** This routine makes a (partial) copy of the Table structure +** for the table being altered and sets Parse.pNewTable to point +** to it. Routines called by the parser as the column definition +** is parsed (i.e. sqlite3AddColumn()) add the new Column data to +** the copy. The copy of the Table structure is deleted by tokenize.c +** after parsing is finished. +** +** Routine sqlite3AlterFinishAddColumn() will be called to complete +** coding the "ALTER TABLE ... ADD" statement. +*/ +SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){ + Table *pNew; + Table *pTab; + int iDb; + int i; + int nAlloc; + sqlite3 *db = pParse->db; + + /* Look up the table being altered. */ + assert( pParse->pNewTable==0 ); + assert( sqlite3BtreeHoldsAllMutexes(db) ); + if( db->mallocFailed ) goto exit_begin_add_column; + pTab = sqlite3LocateTableItem(pParse, 0, &pSrc->a[0]); + if( !pTab ) goto exit_begin_add_column; + +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pTab) ){ + sqlite3ErrorMsg(pParse, "virtual tables may not be altered"); + goto exit_begin_add_column; + } +#endif + + /* Make sure this is not an attempt to ALTER a view. */ + if( IsView(pTab) ){ + sqlite3ErrorMsg(pParse, "Cannot add a column to a view"); + goto exit_begin_add_column; + } + if( SQLITE_OK!=isAlterableTable(pParse, pTab) ){ + goto exit_begin_add_column; + } + + sqlite3MayAbort(pParse); + assert( IsOrdinaryTable(pTab) ); + assert( pTab->u.tab.addColOffset>0 ); + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + + /* Put a copy of the Table struct in Parse.pNewTable for the + ** sqlite3AddColumn() function and friends to modify. But modify + ** the name by adding an "sqlite_altertab_" prefix. By adding this + ** prefix, we insure that the name will not collide with an existing + ** table because user table are not allowed to have the "sqlite_" + ** prefix on their name. + */ + pNew = (Table*)sqlite3DbMallocZero(db, sizeof(Table)); + if( !pNew ) goto exit_begin_add_column; + pParse->pNewTable = pNew; + pNew->nTabRef = 1; + pNew->nCol = pTab->nCol; + assert( pNew->nCol>0 ); + nAlloc = (((pNew->nCol-1)/8)*8)+8; + assert( nAlloc>=pNew->nCol && nAlloc%8==0 && nAlloc-pNew->nCol<8 ); + pNew->aCol = (Column*)sqlite3DbMallocZero(db, sizeof(Column)*(u32)nAlloc); + pNew->zName = sqlite3MPrintf(db, "sqlite_altertab_%s", pTab->zName); + if( !pNew->aCol || !pNew->zName ){ + assert( db->mallocFailed ); + goto exit_begin_add_column; + } + memcpy(pNew->aCol, pTab->aCol, sizeof(Column)*(size_t)pNew->nCol); + for(i=0; inCol; i++){ + Column *pCol = &pNew->aCol[i]; + pCol->zCnName = sqlite3DbStrDup(db, pCol->zCnName); + pCol->hName = sqlite3StrIHash(pCol->zCnName); + } + assert( IsOrdinaryTable(pNew) ); + pNew->u.tab.pDfltList = sqlite3ExprListDup(db, pTab->u.tab.pDfltList, 0); + pNew->pSchema = db->aDb[iDb].pSchema; + pNew->u.tab.addColOffset = pTab->u.tab.addColOffset; + assert( pNew->nTabRef==1 ); + +exit_begin_add_column: + sqlite3SrcListDelete(db, pSrc); + return; +} + +/* +** Parameter pTab is the subject of an ALTER TABLE ... RENAME COLUMN +** command. This function checks if the table is a view or virtual +** table (columns of views or virtual tables may not be renamed). If so, +** it loads an error message into pParse and returns non-zero. +** +** Or, if pTab is not a view or virtual table, zero is returned. +*/ +#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) +static int isRealTable(Parse *pParse, Table *pTab, int bDrop){ + const char *zType = 0; +#ifndef SQLITE_OMIT_VIEW + if( IsView(pTab) ){ + zType = "view"; + } +#endif +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pTab) ){ + zType = "virtual table"; + } +#endif + if( zType ){ + sqlite3ErrorMsg(pParse, "cannot %s %s \"%s\"", + (bDrop ? "drop column from" : "rename columns of"), + zType, pTab->zName + ); + return 1; + } + return 0; +} +#else /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */ +# define isRealTable(x,y,z) (0) +#endif + +/* +** Handles the following parser reduction: +** +** cmd ::= ALTER TABLE pSrc RENAME COLUMN pOld TO pNew +*/ +SQLITE_PRIVATE void sqlite3AlterRenameColumn( + Parse *pParse, /* Parsing context */ + SrcList *pSrc, /* Table being altered. pSrc->nSrc==1 */ + Token *pOld, /* Name of column being changed */ + Token *pNew /* New column name */ +){ + sqlite3 *db = pParse->db; /* Database connection */ + Table *pTab; /* Table being updated */ + int iCol; /* Index of column being renamed */ + char *zOld = 0; /* Old column name */ + char *zNew = 0; /* New column name */ + const char *zDb; /* Name of schema containing the table */ + int iSchema; /* Index of the schema */ + int bQuote; /* True to quote the new name */ + + /* Locate the table to be altered */ + pTab = sqlite3LocateTableItem(pParse, 0, &pSrc->a[0]); + if( !pTab ) goto exit_rename_column; + + /* Cannot alter a system table */ + if( SQLITE_OK!=isAlterableTable(pParse, pTab) ) goto exit_rename_column; + if( SQLITE_OK!=isRealTable(pParse, pTab, 0) ) goto exit_rename_column; + + /* Which schema holds the table to be altered */ + iSchema = sqlite3SchemaToIndex(db, pTab->pSchema); + assert( iSchema>=0 ); + zDb = db->aDb[iSchema].zDbSName; + +#ifndef SQLITE_OMIT_AUTHORIZATION + /* Invoke the authorization callback. */ + if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){ + goto exit_rename_column; + } +#endif + + /* Make sure the old name really is a column name in the table to be + ** altered. Set iCol to be the index of the column being renamed */ + zOld = sqlite3NameFromToken(db, pOld); + if( !zOld ) goto exit_rename_column; + iCol = sqlite3ColumnIndex(pTab, zOld); + if( iCol<0 ){ + sqlite3ErrorMsg(pParse, "no such column: \"%T\"", pOld); + goto exit_rename_column; + } + + /* Ensure the schema contains no double-quoted strings */ + renameTestSchema(pParse, zDb, iSchema==1, "", 0); + renameFixQuotes(pParse, zDb, iSchema==1); + + /* Do the rename operation using a recursive UPDATE statement that + ** uses the sqlite_rename_column() SQL function to compute the new + ** CREATE statement text for the sqlite_schema table. + */ + sqlite3MayAbort(pParse); + zNew = sqlite3NameFromToken(db, pNew); + if( !zNew ) goto exit_rename_column; + assert( pNew->n>0 ); + bQuote = sqlite3Isquote(pNew->z[0]); + sqlite3NestedParse(pParse, + "UPDATE \"%w\"." LEGACY_SCHEMA_TABLE " SET " + "sql = sqlite_rename_column(sql, type, name, %Q, %Q, %d, %Q, %d, %d) " + "WHERE name NOT LIKE 'sqliteX_%%' ESCAPE 'X' " + " AND (type != 'index' OR tbl_name = %Q)", + zDb, + zDb, pTab->zName, iCol, zNew, bQuote, iSchema==1, + pTab->zName + ); + + sqlite3NestedParse(pParse, + "UPDATE temp." LEGACY_SCHEMA_TABLE " SET " + "sql = sqlite_rename_column(sql, type, name, %Q, %Q, %d, %Q, %d, 1) " + "WHERE type IN ('trigger', 'view')", + zDb, pTab->zName, iCol, zNew, bQuote + ); + + /* Drop and reload the database schema. */ + renameReloadSchema(pParse, iSchema, INITFLAG_AlterRename); + renameTestSchema(pParse, zDb, iSchema==1, "after rename", 1); + + exit_rename_column: + sqlite3SrcListDelete(db, pSrc); + sqlite3DbFree(db, zOld); + sqlite3DbFree(db, zNew); + return; +} + +/* +** Each RenameToken object maps an element of the parse tree into +** the token that generated that element. The parse tree element +** might be one of: +** +** * A pointer to an Expr that represents an ID +** * The name of a table column in Column.zName +** +** A list of RenameToken objects can be constructed during parsing. +** Each new object is created by sqlite3RenameTokenMap(). +** As the parse tree is transformed, the sqlite3RenameTokenRemap() +** routine is used to keep the mapping current. +** +** After the parse finishes, renameTokenFind() routine can be used +** to look up the actual token value that created some element in +** the parse tree. +*/ +struct RenameToken { + const void *p; /* Parse tree element created by token t */ + Token t; /* The token that created parse tree element p */ + RenameToken *pNext; /* Next is a list of all RenameToken objects */ +}; + +/* +** The context of an ALTER TABLE RENAME COLUMN operation that gets passed +** down into the Walker. +*/ +typedef struct RenameCtx RenameCtx; +struct RenameCtx { + RenameToken *pList; /* List of tokens to overwrite */ + int nList; /* Number of tokens in pList */ + int iCol; /* Index of column being renamed */ + Table *pTab; /* Table being ALTERed */ + const char *zOld; /* Old column name */ +}; + +#ifdef SQLITE_DEBUG +/* +** This function is only for debugging. It performs two tasks: +** +** 1. Checks that pointer pPtr does not already appear in the +** rename-token list. +** +** 2. Dereferences each pointer in the rename-token list. +** +** The second is most effective when debugging under valgrind or +** address-sanitizer or similar. If any of these pointers no longer +** point to valid objects, an exception is raised by the memory-checking +** tool. +** +** The point of this is to prevent comparisons of invalid pointer values. +** Even though this always seems to work, it is undefined according to the +** C standard. Example of undefined comparison: +** +** sqlite3_free(x); +** if( x==y ) ... +** +** Technically, as x no longer points into a valid object or to the byte +** following a valid object, it may not be used in comparison operations. +*/ +static void renameTokenCheckAll(Parse *pParse, const void *pPtr){ + assert( pParse==pParse->db->pParse ); + assert( pParse->db->mallocFailed==0 || pParse->nErr!=0 ); + if( pParse->nErr==0 ){ + const RenameToken *p; + u32 i = 1; + for(p=pParse->pRename; p; p=p->pNext){ + if( p->p ){ + assert( p->p!=pPtr ); + i += *(u8*)(p->p) | 1; + } + } + assert( i>0 ); + } +} +#else +# define renameTokenCheckAll(x,y) +#endif + +/* +** Remember that the parser tree element pPtr was created using +** the token pToken. +** +** In other words, construct a new RenameToken object and add it +** to the list of RenameToken objects currently being built up +** in pParse->pRename. +** +** The pPtr argument is returned so that this routine can be used +** with tail recursion in tokenExpr() routine, for a small performance +** improvement. +*/ +SQLITE_PRIVATE const void *sqlite3RenameTokenMap( + Parse *pParse, + const void *pPtr, + const Token *pToken +){ + RenameToken *pNew; + assert( pPtr || pParse->db->mallocFailed ); + renameTokenCheckAll(pParse, pPtr); + if( ALWAYS(pParse->eParseMode!=PARSE_MODE_UNMAP) ){ + pNew = sqlite3DbMallocZero(pParse->db, sizeof(RenameToken)); + if( pNew ){ + pNew->p = pPtr; + pNew->t = *pToken; + pNew->pNext = pParse->pRename; + pParse->pRename = pNew; + } + } + + return pPtr; +} + +/* +** It is assumed that there is already a RenameToken object associated +** with parse tree element pFrom. This function remaps the associated token +** to parse tree element pTo. +*/ +SQLITE_PRIVATE void sqlite3RenameTokenRemap(Parse *pParse, const void *pTo, const void *pFrom){ + RenameToken *p; + renameTokenCheckAll(pParse, pTo); + for(p=pParse->pRename; p; p=p->pNext){ + if( p->p==pFrom ){ + p->p = pTo; + break; + } + } +} + +/* +** Walker callback used by sqlite3RenameExprUnmap(). +*/ +static int renameUnmapExprCb(Walker *pWalker, Expr *pExpr){ + Parse *pParse = pWalker->pParse; + sqlite3RenameTokenRemap(pParse, 0, (const void*)pExpr); + if( ExprUseYTab(pExpr) ){ + sqlite3RenameTokenRemap(pParse, 0, (const void*)&pExpr->y.pTab); + } + return WRC_Continue; +} + +/* +** Iterate through the Select objects that are part of WITH clauses attached +** to select statement pSelect. +*/ +static void renameWalkWith(Walker *pWalker, Select *pSelect){ + With *pWith = pSelect->pWith; + if( pWith ){ + Parse *pParse = pWalker->pParse; + int i; + With *pCopy = 0; + assert( pWith->nCte>0 ); + if( (pWith->a[0].pSelect->selFlags & SF_Expanded)==0 ){ + /* Push a copy of the With object onto the with-stack. We use a copy + ** here as the original will be expanded and resolved (flags SF_Expanded + ** and SF_Resolved) below. And the parser code that uses the with-stack + ** fails if the Select objects on it have already been expanded and + ** resolved. */ + pCopy = sqlite3WithDup(pParse->db, pWith); + pCopy = sqlite3WithPush(pParse, pCopy, 1); + } + for(i=0; inCte; i++){ + Select *p = pWith->a[i].pSelect; + NameContext sNC; + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = pParse; + if( pCopy ) sqlite3SelectPrep(sNC.pParse, p, &sNC); + if( sNC.pParse->db->mallocFailed ) return; + sqlite3WalkSelect(pWalker, p); + sqlite3RenameExprlistUnmap(pParse, pWith->a[i].pCols); + } + if( pCopy && pParse->pWith==pCopy ){ + pParse->pWith = pCopy->pOuter; + } + } +} + +/* +** Unmap all tokens in the IdList object passed as the second argument. +*/ +static void unmapColumnIdlistNames( + Parse *pParse, + const IdList *pIdList +){ + int ii; + assert( pIdList!=0 ); + for(ii=0; iinId; ii++){ + sqlite3RenameTokenRemap(pParse, 0, (const void*)pIdList->a[ii].zName); + } +} + +/* +** Walker callback used by sqlite3RenameExprUnmap(). +*/ +static int renameUnmapSelectCb(Walker *pWalker, Select *p){ + Parse *pParse = pWalker->pParse; + int i; + if( pParse->nErr ) return WRC_Abort; + testcase( p->selFlags & SF_View ); + testcase( p->selFlags & SF_CopyCte ); + if( p->selFlags & (SF_View|SF_CopyCte) ){ + return WRC_Prune; + } + if( ALWAYS(p->pEList) ){ + ExprList *pList = p->pEList; + for(i=0; inExpr; i++){ + if( pList->a[i].zEName && pList->a[i].fg.eEName==ENAME_NAME ){ + sqlite3RenameTokenRemap(pParse, 0, (void*)pList->a[i].zEName); + } + } + } + if( ALWAYS(p->pSrc) ){ /* Every Select as a SrcList, even if it is empty */ + SrcList *pSrc = p->pSrc; + for(i=0; inSrc; i++){ + sqlite3RenameTokenRemap(pParse, 0, (void*)pSrc->a[i].zName); + if( pSrc->a[i].fg.isUsing==0 ){ + sqlite3WalkExpr(pWalker, pSrc->a[i].u3.pOn); + }else{ + unmapColumnIdlistNames(pParse, pSrc->a[i].u3.pUsing); + } + } + } + + renameWalkWith(pWalker, p); + return WRC_Continue; +} + +/* +** Remove all nodes that are part of expression pExpr from the rename list. +*/ +SQLITE_PRIVATE void sqlite3RenameExprUnmap(Parse *pParse, Expr *pExpr){ + u8 eMode = pParse->eParseMode; + Walker sWalker; + memset(&sWalker, 0, sizeof(Walker)); + sWalker.pParse = pParse; + sWalker.xExprCallback = renameUnmapExprCb; + sWalker.xSelectCallback = renameUnmapSelectCb; + pParse->eParseMode = PARSE_MODE_UNMAP; + sqlite3WalkExpr(&sWalker, pExpr); + pParse->eParseMode = eMode; +} + +/* +** Remove all nodes that are part of expression-list pEList from the +** rename list. +*/ +SQLITE_PRIVATE void sqlite3RenameExprlistUnmap(Parse *pParse, ExprList *pEList){ + if( pEList ){ + int i; + Walker sWalker; + memset(&sWalker, 0, sizeof(Walker)); + sWalker.pParse = pParse; + sWalker.xExprCallback = renameUnmapExprCb; + sqlite3WalkExprList(&sWalker, pEList); + for(i=0; inExpr; i++){ + if( ALWAYS(pEList->a[i].fg.eEName==ENAME_NAME) ){ + sqlite3RenameTokenRemap(pParse, 0, (void*)pEList->a[i].zEName); + } + } + } +} + +/* +** Free the list of RenameToken objects given in the second argument +*/ +static void renameTokenFree(sqlite3 *db, RenameToken *pToken){ + RenameToken *pNext; + RenameToken *p; + for(p=pToken; p; p=pNext){ + pNext = p->pNext; + sqlite3DbFree(db, p); + } +} + +/* +** Search the Parse object passed as the first argument for a RenameToken +** object associated with parse tree element pPtr. If found, return a pointer +** to it. Otherwise, return NULL. +** +** If the second argument passed to this function is not NULL and a matching +** RenameToken object is found, remove it from the Parse object and add it to +** the list maintained by the RenameCtx object. +*/ +static RenameToken *renameTokenFind( + Parse *pParse, + struct RenameCtx *pCtx, + const void *pPtr +){ + RenameToken **pp; + if( NEVER(pPtr==0) ){ + return 0; + } + for(pp=&pParse->pRename; (*pp); pp=&(*pp)->pNext){ + if( (*pp)->p==pPtr ){ + RenameToken *pToken = *pp; + if( pCtx ){ + *pp = pToken->pNext; + pToken->pNext = pCtx->pList; + pCtx->pList = pToken; + pCtx->nList++; + } + return pToken; + } + } + return 0; +} + +/* +** This is a Walker select callback. It does nothing. It is only required +** because without a dummy callback, sqlite3WalkExpr() and similar do not +** descend into sub-select statements. +*/ +static int renameColumnSelectCb(Walker *pWalker, Select *p){ + if( p->selFlags & (SF_View|SF_CopyCte) ){ + testcase( p->selFlags & SF_View ); + testcase( p->selFlags & SF_CopyCte ); + return WRC_Prune; + } + renameWalkWith(pWalker, p); + return WRC_Continue; +} + +/* +** This is a Walker expression callback. +** +** For every TK_COLUMN node in the expression tree, search to see +** if the column being references is the column being renamed by an +** ALTER TABLE statement. If it is, then attach its associated +** RenameToken object to the list of RenameToken objects being +** constructed in RenameCtx object at pWalker->u.pRename. +*/ +static int renameColumnExprCb(Walker *pWalker, Expr *pExpr){ + RenameCtx *p = pWalker->u.pRename; + if( pExpr->op==TK_TRIGGER + && pExpr->iColumn==p->iCol + && pWalker->pParse->pTriggerTab==p->pTab + ){ + renameTokenFind(pWalker->pParse, p, (void*)pExpr); + }else if( pExpr->op==TK_COLUMN + && pExpr->iColumn==p->iCol + && ALWAYS(ExprUseYTab(pExpr)) + && p->pTab==pExpr->y.pTab + ){ + renameTokenFind(pWalker->pParse, p, (void*)pExpr); + } + return WRC_Continue; +} + +/* +** The RenameCtx contains a list of tokens that reference a column that +** is being renamed by an ALTER TABLE statement. Return the "last" +** RenameToken in the RenameCtx and remove that RenameToken from the +** RenameContext. "Last" means the last RenameToken encountered when +** the input SQL is parsed from left to right. Repeated calls to this routine +** return all column name tokens in the order that they are encountered +** in the SQL statement. +*/ +static RenameToken *renameColumnTokenNext(RenameCtx *pCtx){ + RenameToken *pBest = pCtx->pList; + RenameToken *pToken; + RenameToken **pp; + + for(pToken=pBest->pNext; pToken; pToken=pToken->pNext){ + if( pToken->t.z>pBest->t.z ) pBest = pToken; + } + for(pp=&pCtx->pList; *pp!=pBest; pp=&(*pp)->pNext); + *pp = pBest->pNext; + + return pBest; +} + +/* +** An error occurred while parsing or otherwise processing a database +** object (either pParse->pNewTable, pNewIndex or pNewTrigger) as part of an +** ALTER TABLE RENAME COLUMN program. The error message emitted by the +** sub-routine is currently stored in pParse->zErrMsg. This function +** adds context to the error message and then stores it in pCtx. +*/ +static void renameColumnParseError( + sqlite3_context *pCtx, + const char *zWhen, + sqlite3_value *pType, + sqlite3_value *pObject, + Parse *pParse +){ + const char *zT = (const char*)sqlite3_value_text(pType); + const char *zN = (const char*)sqlite3_value_text(pObject); + char *zErr; + + zErr = sqlite3MPrintf(pParse->db, "error in %s %s%s%s: %s", + zT, zN, (zWhen[0] ? " " : ""), zWhen, + pParse->zErrMsg + ); + sqlite3_result_error(pCtx, zErr, -1); + sqlite3DbFree(pParse->db, zErr); +} + +/* +** For each name in the the expression-list pEList (i.e. each +** pEList->a[i].zName) that matches the string in zOld, extract the +** corresponding rename-token from Parse object pParse and add it +** to the RenameCtx pCtx. +*/ +static void renameColumnElistNames( + Parse *pParse, + RenameCtx *pCtx, + const ExprList *pEList, + const char *zOld +){ + if( pEList ){ + int i; + for(i=0; inExpr; i++){ + const char *zName = pEList->a[i].zEName; + if( ALWAYS(pEList->a[i].fg.eEName==ENAME_NAME) + && ALWAYS(zName!=0) + && 0==sqlite3_stricmp(zName, zOld) + ){ + renameTokenFind(pParse, pCtx, (const void*)zName); + } + } + } +} + +/* +** For each name in the the id-list pIdList (i.e. each pIdList->a[i].zName) +** that matches the string in zOld, extract the corresponding rename-token +** from Parse object pParse and add it to the RenameCtx pCtx. +*/ +static void renameColumnIdlistNames( + Parse *pParse, + RenameCtx *pCtx, + const IdList *pIdList, + const char *zOld +){ + if( pIdList ){ + int i; + for(i=0; inId; i++){ + const char *zName = pIdList->a[i].zName; + if( 0==sqlite3_stricmp(zName, zOld) ){ + renameTokenFind(pParse, pCtx, (const void*)zName); + } + } + } +} + + +/* +** Parse the SQL statement zSql using Parse object (*p). The Parse object +** is initialized by this function before it is used. +*/ +static int renameParseSql( + Parse *p, /* Memory to use for Parse object */ + const char *zDb, /* Name of schema SQL belongs to */ + sqlite3 *db, /* Database handle */ + const char *zSql, /* SQL to parse */ + int bTemp /* True if SQL is from temp schema */ +){ + int rc; + u64 flags; + + sqlite3ParseObjectInit(p, db); + if( zSql==0 ){ + return SQLITE_NOMEM; + } + if( sqlite3StrNICmp(zSql,"CREATE ",7)!=0 ){ + return SQLITE_CORRUPT_BKPT; + } + if( bTemp ){ + db->init.iDb = 1; + }else{ + int iDb = sqlite3FindDbName(db, zDb); + assert( iDb>=0 && iDb<=0xff ); + db->init.iDb = (u8)iDb; + } + p->eParseMode = PARSE_MODE_RENAME; + p->db = db; + p->nQueryLoop = 1; + flags = db->flags; + testcase( (db->flags & SQLITE_Comments)==0 && strstr(zSql," /* ")!=0 ); + db->flags |= SQLITE_Comments; + rc = sqlite3RunParser(p, zSql); + db->flags = flags; + if( db->mallocFailed ) rc = SQLITE_NOMEM; + if( rc==SQLITE_OK + && NEVER(p->pNewTable==0 && p->pNewIndex==0 && p->pNewTrigger==0) + ){ + rc = SQLITE_CORRUPT_BKPT; + } + +#ifdef SQLITE_DEBUG + /* Ensure that all mappings in the Parse.pRename list really do map to + ** a part of the input string. */ + if( rc==SQLITE_OK ){ + int nSql = sqlite3Strlen30(zSql); + RenameToken *pToken; + for(pToken=p->pRename; pToken; pToken=pToken->pNext){ + assert( pToken->t.z>=zSql && &pToken->t.z[pToken->t.n]<=&zSql[nSql] ); + } + } +#endif + + db->init.iDb = 0; + return rc; +} + +/* +** This function edits SQL statement zSql, replacing each token identified +** by the linked list pRename with the text of zNew. If argument bQuote is +** true, then zNew is always quoted first. If no error occurs, the result +** is loaded into context object pCtx as the result. +** +** Or, if an error occurs (i.e. an OOM condition), an error is left in +** pCtx and an SQLite error code returned. +*/ +static int renameEditSql( + sqlite3_context *pCtx, /* Return result here */ + RenameCtx *pRename, /* Rename context */ + const char *zSql, /* SQL statement to edit */ + const char *zNew, /* New token text */ + int bQuote /* True to always quote token */ +){ + i64 nNew = sqlite3Strlen30(zNew); + i64 nSql = sqlite3Strlen30(zSql); + sqlite3 *db = sqlite3_context_db_handle(pCtx); + int rc = SQLITE_OK; + char *zQuot = 0; + char *zOut; + i64 nQuot = 0; + char *zBuf1 = 0; + char *zBuf2 = 0; + + if( zNew ){ + /* Set zQuot to point to a buffer containing a quoted copy of the + ** identifier zNew. If the corresponding identifier in the original + ** ALTER TABLE statement was quoted (bQuote==1), then set zNew to + ** point to zQuot so that all substitutions are made using the + ** quoted version of the new column name. */ + zQuot = sqlite3MPrintf(db, "\"%w\" ", zNew); + if( zQuot==0 ){ + return SQLITE_NOMEM; + }else{ + nQuot = sqlite3Strlen30(zQuot)-1; + } + + assert( nQuot>=nNew && nSql>=0 && nNew>=0 ); + zOut = sqlite3DbMallocZero(db, (u64)nSql + pRename->nList*(u64)nQuot + 1); + }else{ + assert( nSql>0 ); + zOut = (char*)sqlite3DbMallocZero(db, (2*(u64)nSql + 1) * 3); + if( zOut ){ + zBuf1 = &zOut[nSql*2+1]; + zBuf2 = &zOut[nSql*4+2]; + } + } + + /* At this point pRename->pList contains a list of RenameToken objects + ** corresponding to all tokens in the input SQL that must be replaced + ** with the new column name, or with single-quoted versions of themselves. + ** All that remains is to construct and return the edited SQL string. */ + if( zOut ){ + i64 nOut = nSql; + assert( nSql>0 ); + memcpy(zOut, zSql, (size_t)nSql); + while( pRename->pList ){ + int iOff; /* Offset of token to replace in zOut */ + i64 nReplace; + const char *zReplace; + RenameToken *pBest = renameColumnTokenNext(pRename); + + if( zNew ){ + if( bQuote==0 && sqlite3IsIdChar(*(u8*)pBest->t.z) ){ + nReplace = nNew; + zReplace = zNew; + }else{ + nReplace = nQuot; + zReplace = zQuot; + if( pBest->t.z[pBest->t.n]=='"' ) nReplace++; + } + }else{ + /* Dequote the double-quoted token. Then requote it again, this time + ** using single quotes. If the character immediately following the + ** original token within the input SQL was a single quote ('), then + ** add another space after the new, single-quoted version of the + ** token. This is so that (SELECT "string"'alias') maps to + ** (SELECT 'string' 'alias'), and not (SELECT 'string''alias'). */ + memcpy(zBuf1, pBest->t.z, pBest->t.n); + zBuf1[pBest->t.n] = 0; + sqlite3Dequote(zBuf1); + assert( nSql < 0x15555554 /* otherwise malloc would have failed */ ); + sqlite3_snprintf((int)(nSql*2), zBuf2, "%Q%s", zBuf1, + pBest->t.z[pBest->t.n]=='\'' ? " " : "" + ); + zReplace = zBuf2; + nReplace = sqlite3Strlen30(zReplace); + } + + iOff = (int)(pBest->t.z - zSql); + if( pBest->t.n!=nReplace ){ + memmove(&zOut[iOff + nReplace], &zOut[iOff + pBest->t.n], + nOut - (iOff + pBest->t.n) + ); + nOut += nReplace - pBest->t.n; + zOut[nOut] = '\0'; + } + memcpy(&zOut[iOff], zReplace, nReplace); + sqlite3DbFree(db, pBest); + } + + sqlite3_result_text(pCtx, zOut, -1, SQLITE_TRANSIENT); + sqlite3DbFree(db, zOut); + }else{ + rc = SQLITE_NOMEM; + } + + sqlite3_free(zQuot); + return rc; +} + +/* +** Set all pEList->a[].fg.eEName fields in the expression-list to val. +*/ +static void renameSetENames(ExprList *pEList, int val){ + assert( val==ENAME_NAME || val==ENAME_TAB || val==ENAME_SPAN ); + if( pEList ){ + int i; + for(i=0; inExpr; i++){ + assert( val==ENAME_NAME || pEList->a[i].fg.eEName==ENAME_NAME ); + pEList->a[i].fg.eEName = val&0x3; + } + } +} + +/* +** Resolve all symbols in the trigger at pParse->pNewTrigger, assuming +** it was read from the schema of database zDb. Return SQLITE_OK if +** successful. Otherwise, return an SQLite error code and leave an error +** message in the Parse object. +*/ +static int renameResolveTrigger(Parse *pParse){ + sqlite3 *db = pParse->db; + Trigger *pNew = pParse->pNewTrigger; + TriggerStep *pStep; + NameContext sNC; + int rc = SQLITE_OK; + + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = pParse; + assert( pNew->pTabSchema ); + pParse->pTriggerTab = sqlite3FindTable(db, pNew->table, + db->aDb[sqlite3SchemaToIndex(db, pNew->pTabSchema)].zDbSName + ); + pParse->eTriggerOp = pNew->op; + /* ALWAYS() because if the table of the trigger does not exist, the + ** error would have been hit before this point */ + if( ALWAYS(pParse->pTriggerTab) ){ + rc = sqlite3ViewGetColumnNames(pParse, pParse->pTriggerTab)!=0; + } + + /* Resolve symbols in WHEN clause */ + if( rc==SQLITE_OK && pNew->pWhen ){ + rc = sqlite3ResolveExprNames(&sNC, pNew->pWhen); + } + + for(pStep=pNew->step_list; rc==SQLITE_OK && pStep; pStep=pStep->pNext){ + if( pStep->pSelect ){ + sqlite3SelectPrep(pParse, pStep->pSelect, &sNC); + if( pParse->nErr ) rc = pParse->rc; + } + if( rc==SQLITE_OK && pStep->zTarget ){ + SrcList *pSrc = sqlite3TriggerStepSrc(pParse, pStep); + if( pSrc ){ + Select *pSel = sqlite3SelectNew( + pParse, pStep->pExprList, pSrc, 0, 0, 0, 0, 0, 0 + ); + if( pSel==0 ){ + pStep->pExprList = 0; + pSrc = 0; + rc = SQLITE_NOMEM; + }else{ + /* pStep->pExprList contains an expression-list used for an UPDATE + ** statement. So the a[].zEName values are the RHS of the + ** "= " clauses of the UPDATE statement. So, before + ** running SelectPrep(), change all the eEName values in + ** pStep->pExprList to ENAME_SPAN (from their current value of + ** ENAME_NAME). This is to prevent any ids in ON() clauses that are + ** part of pSrc from being incorrectly resolved against the + ** a[].zEName values as if they were column aliases. */ + renameSetENames(pStep->pExprList, ENAME_SPAN); + sqlite3SelectPrep(pParse, pSel, 0); + renameSetENames(pStep->pExprList, ENAME_NAME); + rc = pParse->nErr ? SQLITE_ERROR : SQLITE_OK; + assert( pStep->pExprList==0 || pStep->pExprList==pSel->pEList ); + assert( pSrc==pSel->pSrc ); + if( pStep->pExprList ) pSel->pEList = 0; + pSel->pSrc = 0; + sqlite3SelectDelete(db, pSel); + } + if( pStep->pFrom ){ + int i; + for(i=0; ipFrom->nSrc && rc==SQLITE_OK; i++){ + SrcItem *p = &pStep->pFrom->a[i]; + if( p->fg.isSubquery ){ + assert( p->u4.pSubq!=0 ); + sqlite3SelectPrep(pParse, p->u4.pSubq->pSelect, 0); + } + } + } + + if( db->mallocFailed ){ + rc = SQLITE_NOMEM; + } + sNC.pSrcList = pSrc; + if( rc==SQLITE_OK && pStep->pWhere ){ + rc = sqlite3ResolveExprNames(&sNC, pStep->pWhere); + } + if( rc==SQLITE_OK ){ + rc = sqlite3ResolveExprListNames(&sNC, pStep->pExprList); + } + assert( !pStep->pUpsert || (!pStep->pWhere && !pStep->pExprList) ); + if( pStep->pUpsert && rc==SQLITE_OK ){ + Upsert *pUpsert = pStep->pUpsert; + pUpsert->pUpsertSrc = pSrc; + sNC.uNC.pUpsert = pUpsert; + sNC.ncFlags = NC_UUpsert; + rc = sqlite3ResolveExprListNames(&sNC, pUpsert->pUpsertTarget); + if( rc==SQLITE_OK ){ + ExprList *pUpsertSet = pUpsert->pUpsertSet; + rc = sqlite3ResolveExprListNames(&sNC, pUpsertSet); + } + if( rc==SQLITE_OK ){ + rc = sqlite3ResolveExprNames(&sNC, pUpsert->pUpsertWhere); + } + if( rc==SQLITE_OK ){ + rc = sqlite3ResolveExprNames(&sNC, pUpsert->pUpsertTargetWhere); + } + sNC.ncFlags = 0; + } + sNC.pSrcList = 0; + sqlite3SrcListDelete(db, pSrc); + }else{ + rc = SQLITE_NOMEM; + } + } + } + return rc; +} + +/* +** Invoke sqlite3WalkExpr() or sqlite3WalkSelect() on all Select or Expr +** objects that are part of the trigger passed as the second argument. +*/ +static void renameWalkTrigger(Walker *pWalker, Trigger *pTrigger){ + TriggerStep *pStep; + + /* Find tokens to edit in WHEN clause */ + sqlite3WalkExpr(pWalker, pTrigger->pWhen); + + /* Find tokens to edit in trigger steps */ + for(pStep=pTrigger->step_list; pStep; pStep=pStep->pNext){ + sqlite3WalkSelect(pWalker, pStep->pSelect); + sqlite3WalkExpr(pWalker, pStep->pWhere); + sqlite3WalkExprList(pWalker, pStep->pExprList); + if( pStep->pUpsert ){ + Upsert *pUpsert = pStep->pUpsert; + sqlite3WalkExprList(pWalker, pUpsert->pUpsertTarget); + sqlite3WalkExprList(pWalker, pUpsert->pUpsertSet); + sqlite3WalkExpr(pWalker, pUpsert->pUpsertWhere); + sqlite3WalkExpr(pWalker, pUpsert->pUpsertTargetWhere); + } + if( pStep->pFrom ){ + int i; + SrcList *pFrom = pStep->pFrom; + for(i=0; inSrc; i++){ + if( pFrom->a[i].fg.isSubquery ){ + assert( pFrom->a[i].u4.pSubq!=0 ); + sqlite3WalkSelect(pWalker, pFrom->a[i].u4.pSubq->pSelect); + } + } + } + } +} + +/* +** Free the contents of Parse object (*pParse). Do not free the memory +** occupied by the Parse object itself. +*/ +static void renameParseCleanup(Parse *pParse){ + sqlite3 *db = pParse->db; + Index *pIdx; + if( pParse->pVdbe ){ + sqlite3VdbeFinalize(pParse->pVdbe); + } + sqlite3DeleteTable(db, pParse->pNewTable); + while( (pIdx = pParse->pNewIndex)!=0 ){ + pParse->pNewIndex = pIdx->pNext; + sqlite3FreeIndex(db, pIdx); + } + sqlite3DeleteTrigger(db, pParse->pNewTrigger); + sqlite3DbFree(db, pParse->zErrMsg); + renameTokenFree(db, pParse->pRename); + sqlite3ParseObjectReset(pParse); +} + +/* +** SQL function: +** +** sqlite_rename_column(SQL,TYPE,OBJ,DB,TABLE,COL,NEWNAME,QUOTE,TEMP) +** +** 0. zSql: SQL statement to rewrite +** 1. type: Type of object ("table", "view" etc.) +** 2. object: Name of object +** 3. Database: Database name (e.g. "main") +** 4. Table: Table name +** 5. iCol: Index of column to rename +** 6. zNew: New column name +** 7. bQuote: Non-zero if the new column name should be quoted. +** 8. bTemp: True if zSql comes from temp schema +** +** Do a column rename operation on the CREATE statement given in zSql. +** The iCol-th column (left-most is 0) of table zTable is renamed from zCol +** into zNew. The name should be quoted if bQuote is true. +** +** This function is used internally by the ALTER TABLE RENAME COLUMN command. +** It is only accessible to SQL created using sqlite3NestedParse(). It is +** not reachable from ordinary SQL passed into sqlite3_prepare() unless the +** SQLITE_TESTCTRL_INTERNAL_FUNCTIONS test setting is enabled. +*/ +static void renameColumnFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + sqlite3 *db = sqlite3_context_db_handle(context); + RenameCtx sCtx; + const char *zSql = (const char*)sqlite3_value_text(argv[0]); + const char *zDb = (const char*)sqlite3_value_text(argv[3]); + const char *zTable = (const char*)sqlite3_value_text(argv[4]); + int iCol = sqlite3_value_int(argv[5]); + const char *zNew = (const char*)sqlite3_value_text(argv[6]); + int bQuote = sqlite3_value_int(argv[7]); + int bTemp = sqlite3_value_int(argv[8]); + const char *zOld; + int rc; + Parse sParse; + Walker sWalker; + Index *pIdx; + int i; + Table *pTab; +#ifndef SQLITE_OMIT_AUTHORIZATION + sqlite3_xauth xAuth = db->xAuth; +#endif + + UNUSED_PARAMETER(NotUsed); + if( zSql==0 ) return; + if( zTable==0 ) return; + if( zNew==0 ) return; + if( iCol<0 ) return; + sqlite3BtreeEnterAll(db); + pTab = sqlite3FindTable(db, zTable, zDb); + if( pTab==0 || iCol>=pTab->nCol ){ + sqlite3BtreeLeaveAll(db); + return; + } + zOld = pTab->aCol[iCol].zCnName; + memset(&sCtx, 0, sizeof(sCtx)); + sCtx.iCol = ((iCol==pTab->iPKey) ? -1 : iCol); + +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = 0; +#endif + rc = renameParseSql(&sParse, zDb, db, zSql, bTemp); + + /* Find tokens that need to be replaced. */ + memset(&sWalker, 0, sizeof(Walker)); + sWalker.pParse = &sParse; + sWalker.xExprCallback = renameColumnExprCb; + sWalker.xSelectCallback = renameColumnSelectCb; + sWalker.u.pRename = &sCtx; + + sCtx.pTab = pTab; + if( rc!=SQLITE_OK ) goto renameColumnFunc_done; + if( sParse.pNewTable ){ + if( IsView(sParse.pNewTable) ){ + Select *pSelect = sParse.pNewTable->u.view.pSelect; + pSelect->selFlags &= ~(u32)SF_View; + sParse.rc = SQLITE_OK; + sqlite3SelectPrep(&sParse, pSelect, 0); + rc = (db->mallocFailed ? SQLITE_NOMEM : sParse.rc); + if( rc==SQLITE_OK ){ + sqlite3WalkSelect(&sWalker, pSelect); + } + if( rc!=SQLITE_OK ) goto renameColumnFunc_done; + }else if( IsOrdinaryTable(sParse.pNewTable) ){ + /* A regular table */ + int bFKOnly = sqlite3_stricmp(zTable, sParse.pNewTable->zName); + FKey *pFKey; + sCtx.pTab = sParse.pNewTable; + if( bFKOnly==0 ){ + if( iColnCol ){ + renameTokenFind( + &sParse, &sCtx, (void*)sParse.pNewTable->aCol[iCol].zCnName + ); + } + if( sCtx.iCol<0 ){ + renameTokenFind(&sParse, &sCtx, (void*)&sParse.pNewTable->iPKey); + } + sqlite3WalkExprList(&sWalker, sParse.pNewTable->pCheck); + for(pIdx=sParse.pNewTable->pIndex; pIdx; pIdx=pIdx->pNext){ + sqlite3WalkExprList(&sWalker, pIdx->aColExpr); + } + for(pIdx=sParse.pNewIndex; pIdx; pIdx=pIdx->pNext){ + sqlite3WalkExprList(&sWalker, pIdx->aColExpr); + } +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + for(i=0; inCol; i++){ + Expr *pExpr = sqlite3ColumnExpr(sParse.pNewTable, + &sParse.pNewTable->aCol[i]); + sqlite3WalkExpr(&sWalker, pExpr); + } +#endif + } + + assert( IsOrdinaryTable(sParse.pNewTable) ); + for(pFKey=sParse.pNewTable->u.tab.pFKey; pFKey; pFKey=pFKey->pNextFrom){ + for(i=0; inCol; i++){ + if( bFKOnly==0 && pFKey->aCol[i].iFrom==iCol ){ + renameTokenFind(&sParse, &sCtx, (void*)&pFKey->aCol[i]); + } + if( 0==sqlite3_stricmp(pFKey->zTo, zTable) + && 0==sqlite3_stricmp(pFKey->aCol[i].zCol, zOld) + ){ + renameTokenFind(&sParse, &sCtx, (void*)pFKey->aCol[i].zCol); + } + } + } + } + }else if( sParse.pNewIndex ){ + sqlite3WalkExprList(&sWalker, sParse.pNewIndex->aColExpr); + sqlite3WalkExpr(&sWalker, sParse.pNewIndex->pPartIdxWhere); + }else{ + /* A trigger */ + TriggerStep *pStep; + rc = renameResolveTrigger(&sParse); + if( rc!=SQLITE_OK ) goto renameColumnFunc_done; + + for(pStep=sParse.pNewTrigger->step_list; pStep; pStep=pStep->pNext){ + if( pStep->zTarget ){ + Table *pTarget = sqlite3LocateTable(&sParse, 0, pStep->zTarget, zDb); + if( pTarget==pTab ){ + if( pStep->pUpsert ){ + ExprList *pUpsertSet = pStep->pUpsert->pUpsertSet; + renameColumnElistNames(&sParse, &sCtx, pUpsertSet, zOld); + } + renameColumnIdlistNames(&sParse, &sCtx, pStep->pIdList, zOld); + renameColumnElistNames(&sParse, &sCtx, pStep->pExprList, zOld); + } + } + } + + + /* Find tokens to edit in UPDATE OF clause */ + if( sParse.pTriggerTab==pTab ){ + renameColumnIdlistNames(&sParse, &sCtx,sParse.pNewTrigger->pColumns,zOld); + } + + /* Find tokens to edit in various expressions and selects */ + renameWalkTrigger(&sWalker, sParse.pNewTrigger); + } + + assert( rc==SQLITE_OK ); + rc = renameEditSql(context, &sCtx, zSql, zNew, bQuote); + +renameColumnFunc_done: + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_ERROR && sqlite3WritableSchema(db) ){ + sqlite3_result_value(context, argv[0]); + }else if( sParse.zErrMsg ){ + renameColumnParseError(context, "", argv[1], argv[2], &sParse); + }else{ + sqlite3_result_error_code(context, rc); + } + } + + renameParseCleanup(&sParse); + renameTokenFree(db, sCtx.pList); +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = xAuth; +#endif + sqlite3BtreeLeaveAll(db); +} + +/* +** Walker expression callback used by "RENAME TABLE". +*/ +static int renameTableExprCb(Walker *pWalker, Expr *pExpr){ + RenameCtx *p = pWalker->u.pRename; + if( pExpr->op==TK_COLUMN + && ALWAYS(ExprUseYTab(pExpr)) + && p->pTab==pExpr->y.pTab + ){ + renameTokenFind(pWalker->pParse, p, (void*)&pExpr->y.pTab); + } + return WRC_Continue; +} + +/* +** Walker select callback used by "RENAME TABLE". +*/ +static int renameTableSelectCb(Walker *pWalker, Select *pSelect){ + int i; + RenameCtx *p = pWalker->u.pRename; + SrcList *pSrc = pSelect->pSrc; + if( pSelect->selFlags & (SF_View|SF_CopyCte) ){ + testcase( pSelect->selFlags & SF_View ); + testcase( pSelect->selFlags & SF_CopyCte ); + return WRC_Prune; + } + if( NEVER(pSrc==0) ){ + assert( pWalker->pParse->db->mallocFailed ); + return WRC_Abort; + } + for(i=0; inSrc; i++){ + SrcItem *pItem = &pSrc->a[i]; + if( pItem->pSTab==p->pTab ){ + renameTokenFind(pWalker->pParse, p, pItem->zName); + } + } + renameWalkWith(pWalker, pSelect); + + return WRC_Continue; +} + + +/* +** This C function implements an SQL user function that is used by SQL code +** generated by the ALTER TABLE ... RENAME command to modify the definition +** of any foreign key constraints that use the table being renamed as the +** parent table. It is passed three arguments: +** +** 0: The database containing the table being renamed. +** 1. type: Type of object ("table", "view" etc.) +** 2. object: Name of object +** 3: The complete text of the schema statement being modified, +** 4: The old name of the table being renamed, and +** 5: The new name of the table being renamed. +** 6: True if the schema statement comes from the temp db. +** +** It returns the new schema statement. For example: +** +** sqlite_rename_table('main', 'CREATE TABLE t1(a REFERENCES t2)','t2','t3',0) +** -> 'CREATE TABLE t1(a REFERENCES t3)' +*/ +static void renameTableFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + sqlite3 *db = sqlite3_context_db_handle(context); + const char *zDb = (const char*)sqlite3_value_text(argv[0]); + const char *zInput = (const char*)sqlite3_value_text(argv[3]); + const char *zOld = (const char*)sqlite3_value_text(argv[4]); + const char *zNew = (const char*)sqlite3_value_text(argv[5]); + int bTemp = sqlite3_value_int(argv[6]); + UNUSED_PARAMETER(NotUsed); + + if( zInput && zOld && zNew ){ + Parse sParse; + int rc; + int bQuote = 1; + RenameCtx sCtx; + Walker sWalker; + +#ifndef SQLITE_OMIT_AUTHORIZATION + sqlite3_xauth xAuth = db->xAuth; + db->xAuth = 0; +#endif + + sqlite3BtreeEnterAll(db); + + memset(&sCtx, 0, sizeof(RenameCtx)); + sCtx.pTab = sqlite3FindTable(db, zOld, zDb); + memset(&sWalker, 0, sizeof(Walker)); + sWalker.pParse = &sParse; + sWalker.xExprCallback = renameTableExprCb; + sWalker.xSelectCallback = renameTableSelectCb; + sWalker.u.pRename = &sCtx; + + rc = renameParseSql(&sParse, zDb, db, zInput, bTemp); + + if( rc==SQLITE_OK ){ + int isLegacy = (db->flags & SQLITE_LegacyAlter); + if( sParse.pNewTable ){ + Table *pTab = sParse.pNewTable; + + if( IsView(pTab) ){ + if( isLegacy==0 ){ + Select *pSelect = pTab->u.view.pSelect; + NameContext sNC; + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = &sParse; + + assert( pSelect->selFlags & SF_View ); + pSelect->selFlags &= ~(u32)SF_View; + sqlite3SelectPrep(&sParse, pTab->u.view.pSelect, &sNC); + if( sParse.nErr ){ + rc = sParse.rc; + }else{ + sqlite3WalkSelect(&sWalker, pTab->u.view.pSelect); + } + } + }else{ + /* Modify any FK definitions to point to the new table. */ +#ifndef SQLITE_OMIT_FOREIGN_KEY + if( (isLegacy==0 || (db->flags & SQLITE_ForeignKeys)) + && !IsVirtual(pTab) + ){ + FKey *pFKey; + assert( IsOrdinaryTable(pTab) ); + for(pFKey=pTab->u.tab.pFKey; pFKey; pFKey=pFKey->pNextFrom){ + if( sqlite3_stricmp(pFKey->zTo, zOld)==0 ){ + renameTokenFind(&sParse, &sCtx, (void*)pFKey->zTo); + } + } + } +#endif + + /* If this is the table being altered, fix any table refs in CHECK + ** expressions. Also update the name that appears right after the + ** "CREATE [VIRTUAL] TABLE" bit. */ + if( sqlite3_stricmp(zOld, pTab->zName)==0 ){ + sCtx.pTab = pTab; + if( isLegacy==0 ){ + sqlite3WalkExprList(&sWalker, pTab->pCheck); + } + renameTokenFind(&sParse, &sCtx, pTab->zName); + } + } + } + + else if( sParse.pNewIndex ){ + renameTokenFind(&sParse, &sCtx, sParse.pNewIndex->zName); + if( isLegacy==0 ){ + sqlite3WalkExpr(&sWalker, sParse.pNewIndex->pPartIdxWhere); + } + } + +#ifndef SQLITE_OMIT_TRIGGER + else{ + Trigger *pTrigger = sParse.pNewTrigger; + TriggerStep *pStep; + if( 0==sqlite3_stricmp(sParse.pNewTrigger->table, zOld) + && sCtx.pTab->pSchema==pTrigger->pTabSchema + ){ + renameTokenFind(&sParse, &sCtx, sParse.pNewTrigger->table); + } + + if( isLegacy==0 ){ + rc = renameResolveTrigger(&sParse); + if( rc==SQLITE_OK ){ + renameWalkTrigger(&sWalker, pTrigger); + for(pStep=pTrigger->step_list; pStep; pStep=pStep->pNext){ + if( pStep->zTarget && 0==sqlite3_stricmp(pStep->zTarget, zOld) ){ + renameTokenFind(&sParse, &sCtx, pStep->zTarget); + } + if( pStep->pFrom ){ + int i; + for(i=0; ipFrom->nSrc; i++){ + SrcItem *pItem = &pStep->pFrom->a[i]; + if( 0==sqlite3_stricmp(pItem->zName, zOld) ){ + renameTokenFind(&sParse, &sCtx, pItem->zName); + } + } + } + } + } + } + } +#endif + } + + if( rc==SQLITE_OK ){ + rc = renameEditSql(context, &sCtx, zInput, zNew, bQuote); + } + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_ERROR && sqlite3WritableSchema(db) ){ + sqlite3_result_value(context, argv[3]); + }else if( sParse.zErrMsg ){ + renameColumnParseError(context, "", argv[1], argv[2], &sParse); + }else{ + sqlite3_result_error_code(context, rc); + } + } + + renameParseCleanup(&sParse); + renameTokenFree(db, sCtx.pList); + sqlite3BtreeLeaveAll(db); +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = xAuth; +#endif + } + + return; +} + +static int renameQuotefixExprCb(Walker *pWalker, Expr *pExpr){ + if( pExpr->op==TK_STRING && (pExpr->flags & EP_DblQuoted) ){ + renameTokenFind(pWalker->pParse, pWalker->u.pRename, (const void*)pExpr); + } + return WRC_Continue; +} + +/* SQL function: sqlite_rename_quotefix(DB,SQL) +** +** Rewrite the DDL statement "SQL" so that any string literals that use +** double-quotes use single quotes instead. +** +** Two arguments must be passed: +** +** 0: Database name ("main", "temp" etc.). +** 1: SQL statement to edit. +** +** The returned value is the modified SQL statement. For example, given +** the database schema: +** +** CREATE TABLE t1(a, b, c); +** +** SELECT sqlite_rename_quotefix('main', +** 'CREATE VIEW v1 AS SELECT "a", "string" FROM t1' +** ); +** +** returns the string: +** +** CREATE VIEW v1 AS SELECT "a", 'string' FROM t1 +** +** If there is a error in the input SQL, then raise an error, except +** if PRAGMA writable_schema=ON, then just return the input string +** unmodified following an error. +*/ +static void renameQuotefixFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + sqlite3 *db = sqlite3_context_db_handle(context); + char const *zDb = (const char*)sqlite3_value_text(argv[0]); + char const *zInput = (const char*)sqlite3_value_text(argv[1]); + +#ifndef SQLITE_OMIT_AUTHORIZATION + sqlite3_xauth xAuth = db->xAuth; + db->xAuth = 0; +#endif + + sqlite3BtreeEnterAll(db); + + UNUSED_PARAMETER(NotUsed); + if( zDb && zInput ){ + int rc; + Parse sParse; + rc = renameParseSql(&sParse, zDb, db, zInput, 0); + + if( rc==SQLITE_OK ){ + RenameCtx sCtx; + Walker sWalker; + + /* Walker to find tokens that need to be replaced. */ + memset(&sCtx, 0, sizeof(RenameCtx)); + memset(&sWalker, 0, sizeof(Walker)); + sWalker.pParse = &sParse; + sWalker.xExprCallback = renameQuotefixExprCb; + sWalker.xSelectCallback = renameColumnSelectCb; + sWalker.u.pRename = &sCtx; + + if( sParse.pNewTable ){ + if( IsView(sParse.pNewTable) ){ + Select *pSelect = sParse.pNewTable->u.view.pSelect; + pSelect->selFlags &= ~(u32)SF_View; + sParse.rc = SQLITE_OK; + sqlite3SelectPrep(&sParse, pSelect, 0); + rc = (db->mallocFailed ? SQLITE_NOMEM : sParse.rc); + if( rc==SQLITE_OK ){ + sqlite3WalkSelect(&sWalker, pSelect); + } + }else{ + int i; + sqlite3WalkExprList(&sWalker, sParse.pNewTable->pCheck); +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + for(i=0; inCol; i++){ + sqlite3WalkExpr(&sWalker, + sqlite3ColumnExpr(sParse.pNewTable, + &sParse.pNewTable->aCol[i])); + } +#endif /* SQLITE_OMIT_GENERATED_COLUMNS */ + } + }else if( sParse.pNewIndex ){ + sqlite3WalkExprList(&sWalker, sParse.pNewIndex->aColExpr); + sqlite3WalkExpr(&sWalker, sParse.pNewIndex->pPartIdxWhere); + }else{ +#ifndef SQLITE_OMIT_TRIGGER + rc = renameResolveTrigger(&sParse); + if( rc==SQLITE_OK ){ + renameWalkTrigger(&sWalker, sParse.pNewTrigger); + } +#endif /* SQLITE_OMIT_TRIGGER */ + } + + if( rc==SQLITE_OK ){ + rc = renameEditSql(context, &sCtx, zInput, 0, 0); + } + renameTokenFree(db, sCtx.pList); + } + if( rc!=SQLITE_OK ){ + if( sqlite3WritableSchema(db) && rc==SQLITE_ERROR ){ + sqlite3_result_value(context, argv[1]); + }else{ + sqlite3_result_error_code(context, rc); + } + } + renameParseCleanup(&sParse); + } + +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = xAuth; +#endif + + sqlite3BtreeLeaveAll(db); +} + +/* Function: sqlite_rename_test(DB,SQL,TYPE,NAME,ISTEMP,WHEN,DQS) +** +** An SQL user function that checks that there are no parse or symbol +** resolution problems in a CREATE TRIGGER|TABLE|VIEW|INDEX statement. +** After an ALTER TABLE .. RENAME operation is performed and the schema +** reloaded, this function is called on each SQL statement in the schema +** to ensure that it is still usable. +** +** 0: Database name ("main", "temp" etc.). +** 1: SQL statement. +** 2: Object type ("view", "table", "trigger" or "index"). +** 3: Object name. +** 4: True if object is from temp schema. +** 5: "when" part of error message. +** 6: True to disable the DQS quirk when parsing SQL. +** +** The return value is computed as follows: +** +** A. If an error is seen and not in PRAGMA writable_schema=ON mode, +** then raise the error. +** B. Else if a trigger is created and the the table that the trigger is +** attached to is in database zDb, then return 1. +** C. Otherwise return NULL. +*/ +static void renameTableTest( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + sqlite3 *db = sqlite3_context_db_handle(context); + char const *zDb = (const char*)sqlite3_value_text(argv[0]); + char const *zInput = (const char*)sqlite3_value_text(argv[1]); + int bTemp = sqlite3_value_int(argv[4]); + int isLegacy = (db->flags & SQLITE_LegacyAlter); + char const *zWhen = (const char*)sqlite3_value_text(argv[5]); + int bNoDQS = sqlite3_value_int(argv[6]); + +#ifndef SQLITE_OMIT_AUTHORIZATION + sqlite3_xauth xAuth = db->xAuth; + db->xAuth = 0; +#endif + + UNUSED_PARAMETER(NotUsed); + + if( zDb && zInput ){ + int rc; + Parse sParse; + u64 flags = db->flags; + if( bNoDQS ) db->flags &= ~(SQLITE_DqsDML|SQLITE_DqsDDL); + rc = renameParseSql(&sParse, zDb, db, zInput, bTemp); + db->flags = flags; + if( rc==SQLITE_OK ){ + if( isLegacy==0 && sParse.pNewTable && IsView(sParse.pNewTable) ){ + NameContext sNC; + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = &sParse; + sqlite3SelectPrep(&sParse, sParse.pNewTable->u.view.pSelect, &sNC); + if( sParse.nErr ) rc = sParse.rc; + } + + else if( sParse.pNewTrigger ){ + if( isLegacy==0 ){ + rc = renameResolveTrigger(&sParse); + } + if( rc==SQLITE_OK ){ + int i1 = sqlite3SchemaToIndex(db, sParse.pNewTrigger->pTabSchema); + int i2 = sqlite3FindDbName(db, zDb); + if( i1==i2 ){ + /* Handle output case B */ + sqlite3_result_int(context, 1); + } + } + } + } + + if( rc!=SQLITE_OK && zWhen && !sqlite3WritableSchema(db) ){ + /* Output case A */ + renameColumnParseError(context, zWhen, argv[2], argv[3],&sParse); + } + renameParseCleanup(&sParse); + } + +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = xAuth; +#endif +} + +/* +** The implementation of internal UDF sqlite_drop_column(). +** +** Arguments: +** +** argv[0]: An integer - the index of the schema containing the table +** argv[1]: CREATE TABLE statement to modify. +** argv[2]: An integer - the index of the column to remove. +** +** The value returned is a string containing the CREATE TABLE statement +** with column argv[2] removed. +*/ +static void dropColumnFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + sqlite3 *db = sqlite3_context_db_handle(context); + int iSchema = sqlite3_value_int(argv[0]); + const char *zSql = (const char*)sqlite3_value_text(argv[1]); + int iCol = sqlite3_value_int(argv[2]); + const char *zDb = db->aDb[iSchema].zDbSName; + int rc; + Parse sParse; + RenameToken *pCol; + Table *pTab; + const char *zEnd; + char *zNew = 0; + +#ifndef SQLITE_OMIT_AUTHORIZATION + sqlite3_xauth xAuth = db->xAuth; + db->xAuth = 0; +#endif + + UNUSED_PARAMETER(NotUsed); + rc = renameParseSql(&sParse, zDb, db, zSql, iSchema==1); + if( rc!=SQLITE_OK ) goto drop_column_done; + pTab = sParse.pNewTable; + if( pTab==0 || pTab->nCol==1 || iCol>=pTab->nCol ){ + /* This can happen if the sqlite_schema table is corrupt */ + rc = SQLITE_CORRUPT_BKPT; + goto drop_column_done; + } + + pCol = renameTokenFind(&sParse, 0, (void*)pTab->aCol[iCol].zCnName); + if( iColnCol-1 ){ + RenameToken *pEnd; + pEnd = renameTokenFind(&sParse, 0, (void*)pTab->aCol[iCol+1].zCnName); + zEnd = (const char*)pEnd->t.z; + }else{ + assert( IsOrdinaryTable(pTab) ); + zEnd = (const char*)&zSql[pTab->u.tab.addColOffset]; + while( ALWAYS(pCol->t.z[0]!=0) && pCol->t.z[0]!=',' ) pCol->t.z--; + } + + zNew = sqlite3MPrintf(db, "%.*s%s", pCol->t.z-zSql, zSql, zEnd); + sqlite3_result_text(context, zNew, -1, SQLITE_TRANSIENT); + sqlite3_free(zNew); + +drop_column_done: + renameParseCleanup(&sParse); +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = xAuth; +#endif + if( rc!=SQLITE_OK ){ + sqlite3_result_error_code(context, rc); + } +} + +/* +** This function is called by the parser upon parsing an +** +** ALTER TABLE pSrc DROP COLUMN pName +** +** statement. Argument pSrc contains the possibly qualified name of the +** table being edited, and token pName the name of the column to drop. +*/ +SQLITE_PRIVATE void sqlite3AlterDropColumn(Parse *pParse, SrcList *pSrc, const Token *pName){ + sqlite3 *db = pParse->db; /* Database handle */ + Table *pTab; /* Table to modify */ + int iDb; /* Index of db containing pTab in aDb[] */ + const char *zDb; /* Database containing pTab ("main" etc.) */ + char *zCol = 0; /* Name of column to drop */ + int iCol; /* Index of column zCol in pTab->aCol[] */ + + /* Look up the table being altered. */ + assert( pParse->pNewTable==0 ); + assert( sqlite3BtreeHoldsAllMutexes(db) ); + if( NEVER(db->mallocFailed) ) goto exit_drop_column; + pTab = sqlite3LocateTableItem(pParse, 0, &pSrc->a[0]); + if( !pTab ) goto exit_drop_column; + + /* Make sure this is not an attempt to ALTER a view, virtual table or + ** system table. */ + if( SQLITE_OK!=isAlterableTable(pParse, pTab) ) goto exit_drop_column; + if( SQLITE_OK!=isRealTable(pParse, pTab, 1) ) goto exit_drop_column; + + /* Find the index of the column being dropped. */ + zCol = sqlite3NameFromToken(db, pName); + if( zCol==0 ){ + assert( db->mallocFailed ); + goto exit_drop_column; + } + iCol = sqlite3ColumnIndex(pTab, zCol); + if( iCol<0 ){ + sqlite3ErrorMsg(pParse, "no such column: \"%T\"", pName); + goto exit_drop_column; + } + + /* Do not allow the user to drop a PRIMARY KEY column or a column + ** constrained by a UNIQUE constraint. */ + if( pTab->aCol[iCol].colFlags & (COLFLAG_PRIMKEY|COLFLAG_UNIQUE) ){ + sqlite3ErrorMsg(pParse, "cannot drop %s column: \"%s\"", + (pTab->aCol[iCol].colFlags&COLFLAG_PRIMKEY) ? "PRIMARY KEY" : "UNIQUE", + zCol + ); + goto exit_drop_column; + } + + /* Do not allow the number of columns to go to zero */ + if( pTab->nCol<=1 ){ + sqlite3ErrorMsg(pParse, "cannot drop column \"%s\": no other columns exist",zCol); + goto exit_drop_column; + } + + /* Edit the sqlite_schema table */ + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + assert( iDb>=0 ); + zDb = db->aDb[iDb].zDbSName; +#ifndef SQLITE_OMIT_AUTHORIZATION + /* Invoke the authorization callback. */ + if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, zCol) ){ + goto exit_drop_column; + } +#endif + renameTestSchema(pParse, zDb, iDb==1, "", 0); + renameFixQuotes(pParse, zDb, iDb==1); + sqlite3NestedParse(pParse, + "UPDATE \"%w\"." LEGACY_SCHEMA_TABLE " SET " + "sql = sqlite_drop_column(%d, sql, %d) " + "WHERE (type=='table' AND tbl_name=%Q COLLATE nocase)" + , zDb, iDb, iCol, pTab->zName + ); + + /* Drop and reload the database schema. */ + renameReloadSchema(pParse, iDb, INITFLAG_AlterDrop); + renameTestSchema(pParse, zDb, iDb==1, "after drop column", 1); + + /* Edit rows of table on disk */ + if( pParse->nErr==0 && (pTab->aCol[iCol].colFlags & COLFLAG_VIRTUAL)==0 ){ + int i; + int addr; + int reg; + int regRec; + Index *pPk = 0; + int nField = 0; /* Number of non-virtual columns after drop */ + int iCur; + Vdbe *v = sqlite3GetVdbe(pParse); + iCur = pParse->nTab++; + sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenWrite); + addr = sqlite3VdbeAddOp1(v, OP_Rewind, iCur); VdbeCoverage(v); + reg = ++pParse->nMem; + if( HasRowid(pTab) ){ + sqlite3VdbeAddOp2(v, OP_Rowid, iCur, reg); + pParse->nMem += pTab->nCol; + }else{ + pPk = sqlite3PrimaryKeyIndex(pTab); + pParse->nMem += pPk->nColumn; + for(i=0; inKeyCol; i++){ + sqlite3VdbeAddOp3(v, OP_Column, iCur, i, reg+i+1); + } + nField = pPk->nKeyCol; + } + regRec = ++pParse->nMem; + for(i=0; inCol; i++){ + if( i!=iCol && (pTab->aCol[i].colFlags & COLFLAG_VIRTUAL)==0 ){ + int regOut; + if( pPk ){ + int iPos = sqlite3TableColumnToIndex(pPk, i); + int iColPos = sqlite3TableColumnToIndex(pPk, iCol); + if( iPosnKeyCol ) continue; + regOut = reg+1+iPos-(iPos>iColPos); + }else{ + regOut = reg+1+nField; + } + if( i==pTab->iPKey ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, regOut); + }else{ + char aff = pTab->aCol[i].affinity; + if( aff==SQLITE_AFF_REAL ){ + pTab->aCol[i].affinity = SQLITE_AFF_NUMERIC; + } + sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, i, regOut); + pTab->aCol[i].affinity = aff; + } + nField++; + } + } + if( nField==0 ){ + /* dbsqlfuzz 5f09e7bcc78b4954d06bf9f2400d7715f48d1fef */ + pParse->nMem++; + sqlite3VdbeAddOp2(v, OP_Null, 0, reg+1); + nField = 1; + } + sqlite3VdbeAddOp3(v, OP_MakeRecord, reg+1, nField, regRec); + if( pPk ){ + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iCur, regRec, reg+1, pPk->nKeyCol); + }else{ + sqlite3VdbeAddOp3(v, OP_Insert, iCur, regRec, reg); + } + sqlite3VdbeChangeP5(v, OPFLAG_SAVEPOSITION); + + sqlite3VdbeAddOp2(v, OP_Next, iCur, addr+1); VdbeCoverage(v); + sqlite3VdbeJumpHere(v, addr); + } + +exit_drop_column: + sqlite3DbFree(db, zCol); + sqlite3SrcListDelete(db, pSrc); +} + +/* +** Register built-in functions used to help implement ALTER TABLE +*/ +SQLITE_PRIVATE void sqlite3AlterFunctions(void){ + static FuncDef aAlterTableFuncs[] = { + INTERNAL_FUNCTION(sqlite_rename_column, 9, renameColumnFunc), + INTERNAL_FUNCTION(sqlite_rename_table, 7, renameTableFunc), + INTERNAL_FUNCTION(sqlite_rename_test, 7, renameTableTest), + INTERNAL_FUNCTION(sqlite_drop_column, 3, dropColumnFunc), + INTERNAL_FUNCTION(sqlite_rename_quotefix,2, renameQuotefixFunc), + }; + sqlite3InsertBuiltinFuncs(aAlterTableFuncs, ArraySize(aAlterTableFuncs)); +} +#endif /* SQLITE_ALTER_TABLE */ + +/************** End of alter.c ***********************************************/ +/************** Begin file analyze.c *****************************************/ +/* +** 2005-07-08 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code associated with the ANALYZE command. +** +** The ANALYZE command gather statistics about the content of tables +** and indices. These statistics are made available to the query planner +** to help it make better decisions about how to perform queries. +** +** The following system tables are or have been supported: +** +** CREATE TABLE sqlite_stat1(tbl, idx, stat); +** CREATE TABLE sqlite_stat2(tbl, idx, sampleno, sample); +** CREATE TABLE sqlite_stat3(tbl, idx, nEq, nLt, nDLt, sample); +** CREATE TABLE sqlite_stat4(tbl, idx, nEq, nLt, nDLt, sample); +** +** Additional tables might be added in future releases of SQLite. +** The sqlite_stat2 table is not created or used unless the SQLite version +** is between 3.6.18 and 3.7.8, inclusive, and unless SQLite is compiled +** with SQLITE_ENABLE_STAT2. The sqlite_stat2 table is deprecated. +** The sqlite_stat2 table is superseded by sqlite_stat3, which is only +** created and used by SQLite versions 3.7.9 through 3.29.0 when +** SQLITE_ENABLE_STAT3 defined. The functionality of sqlite_stat3 +** is a superset of sqlite_stat2 and is also now deprecated. The +** sqlite_stat4 is an enhanced version of sqlite_stat3 and is only +** available when compiled with SQLITE_ENABLE_STAT4 and in SQLite +** versions 3.8.1 and later. STAT4 is the only variant that is still +** supported. +** +** For most applications, sqlite_stat1 provides all the statistics required +** for the query planner to make good choices. +** +** Format of sqlite_stat1: +** +** There is normally one row per index, with the index identified by the +** name in the idx column. The tbl column is the name of the table to +** which the index belongs. In each such row, the stat column will be +** a string consisting of a list of integers. The first integer in this +** list is the number of rows in the index. (This is the same as the +** number of rows in the table, except for partial indices.) The second +** integer is the average number of rows in the index that have the same +** value in the first column of the index. The third integer is the average +** number of rows in the index that have the same value for the first two +** columns. The N-th integer (for N>1) is the average number of rows in +** the index which have the same value for the first N-1 columns. For +** a K-column index, there will be K+1 integers in the stat column. If +** the index is unique, then the last integer will be 1. +** +** The list of integers in the stat column can optionally be followed +** by the keyword "unordered". The "unordered" keyword, if it is present, +** must be separated from the last integer by a single space. If the +** "unordered" keyword is present, then the query planner assumes that +** the index is unordered and will not use the index for a range query. +** +** If the sqlite_stat1.idx column is NULL, then the sqlite_stat1.stat +** column contains a single integer which is the (estimated) number of +** rows in the table identified by sqlite_stat1.tbl. +** +** Format of sqlite_stat2: +** +** The sqlite_stat2 is only created and is only used if SQLite is compiled +** with SQLITE_ENABLE_STAT2 and if the SQLite version number is between +** 3.6.18 and 3.7.8. The "stat2" table contains additional information +** about the distribution of keys within an index. The index is identified by +** the "idx" column and the "tbl" column is the name of the table to which +** the index belongs. There are usually 10 rows in the sqlite_stat2 +** table for each index. +** +** The sqlite_stat2 entries for an index that have sampleno between 0 and 9 +** inclusive are samples of the left-most key value in the index taken at +** evenly spaced points along the index. Let the number of samples be S +** (10 in the standard build) and let C be the number of rows in the index. +** Then the sampled rows are given by: +** +** rownumber = (i*C*2 + C)/(S*2) +** +** For i between 0 and S-1. Conceptually, the index space is divided into +** S uniform buckets and the samples are the middle row from each bucket. +** +** The format for sqlite_stat2 is recorded here for legacy reference. This +** version of SQLite does not support sqlite_stat2. It neither reads nor +** writes the sqlite_stat2 table. This version of SQLite only supports +** sqlite_stat3. +** +** Format for sqlite_stat3: +** +** The sqlite_stat3 format is a subset of sqlite_stat4. Hence, the +** sqlite_stat4 format will be described first. Further information +** about sqlite_stat3 follows the sqlite_stat4 description. +** +** Format for sqlite_stat4: +** +** As with sqlite_stat2, the sqlite_stat4 table contains histogram data +** to aid the query planner in choosing good indices based on the values +** that indexed columns are compared against in the WHERE clauses of +** queries. +** +** The sqlite_stat4 table contains multiple entries for each index. +** The idx column names the index and the tbl column is the table of the +** index. If the idx and tbl columns are the same, then the sample is +** of the INTEGER PRIMARY KEY. The sample column is a blob which is the +** binary encoding of a key from the index. The nEq column is a +** list of integers. The first integer is the approximate number +** of entries in the index whose left-most column exactly matches +** the left-most column of the sample. The second integer in nEq +** is the approximate number of entries in the index where the +** first two columns match the first two columns of the sample. +** And so forth. nLt is another list of integers that show the approximate +** number of entries that are strictly less than the sample. The first +** integer in nLt contains the number of entries in the index where the +** left-most column is less than the left-most column of the sample. +** The K-th integer in the nLt entry is the number of index entries +** where the first K columns are less than the first K columns of the +** sample. The nDLt column is like nLt except that it contains the +** number of distinct entries in the index that are less than the +** sample. +** +** There can be an arbitrary number of sqlite_stat4 entries per index. +** The ANALYZE command will typically generate sqlite_stat4 tables +** that contain between 10 and 40 samples which are distributed across +** the key space, though not uniformly, and which include samples with +** large nEq values. +** +** Format for sqlite_stat3 redux: +** +** The sqlite_stat3 table is like sqlite_stat4 except that it only +** looks at the left-most column of the index. The sqlite_stat3.sample +** column contains the actual value of the left-most column instead +** of a blob encoding of the complete index key as is found in +** sqlite_stat4.sample. The nEq, nLt, and nDLt entries of sqlite_stat3 +** all contain just a single integer which is the same as the first +** integer in the equivalent columns in sqlite_stat4. +*/ +#ifndef SQLITE_OMIT_ANALYZE +/* #include "sqliteInt.h" */ + +#if defined(SQLITE_ENABLE_STAT4) +# define IsStat4 1 +#else +# define IsStat4 0 +# undef SQLITE_STAT4_SAMPLES +# define SQLITE_STAT4_SAMPLES 1 +#endif + +/* +** This routine generates code that opens the sqlite_statN tables. +** The sqlite_stat1 table is always relevant. sqlite_stat2 is now +** obsolete. sqlite_stat3 and sqlite_stat4 are only opened when +** appropriate compile-time options are provided. +** +** If the sqlite_statN tables do not previously exist, it is created. +** +** Argument zWhere may be a pointer to a buffer containing a table name, +** or it may be a NULL pointer. If it is not NULL, then all entries in +** the sqlite_statN tables associated with the named table are deleted. +** If zWhere==0, then code is generated to delete all stat table entries. +*/ +static void openStatTable( + Parse *pParse, /* Parsing context */ + int iDb, /* The database we are looking in */ + int iStatCur, /* Open the sqlite_stat1 table on this cursor */ + const char *zWhere, /* Delete entries for this table or index */ + const char *zWhereType /* Either "tbl" or "idx" */ +){ + static const struct { + const char *zName; + const char *zCols; + } aTable[] = { + { "sqlite_stat1", "tbl,idx,stat" }, +#if defined(SQLITE_ENABLE_STAT4) + { "sqlite_stat4", "tbl,idx,neq,nlt,ndlt,sample" }, +#else + { "sqlite_stat4", 0 }, +#endif + { "sqlite_stat3", 0 }, + }; + int i; + sqlite3 *db = pParse->db; + Db *pDb; + Vdbe *v = sqlite3GetVdbe(pParse); + u32 aRoot[ArraySize(aTable)]; + u8 aCreateTbl[ArraySize(aTable)]; +#ifdef SQLITE_ENABLE_STAT4 + const int nToOpen = OptimizationEnabled(db,SQLITE_Stat4) ? 2 : 1; +#else + const int nToOpen = 1; +#endif + + if( v==0 ) return; + assert( sqlite3BtreeHoldsAllMutexes(db) ); + assert( sqlite3VdbeDb(v)==db ); + pDb = &db->aDb[iDb]; + + /* Create new statistic tables if they do not exist, or clear them + ** if they do already exist. + */ + for(i=0; izDbSName))==0 ){ + if( iregRoot. This is important + ** because the OpenWrite opcode below will be needing it. */ + sqlite3NestedParse(pParse, + "CREATE TABLE %Q.%s(%s)", pDb->zDbSName, zTab, aTable[i].zCols + ); + assert( pParse->isCreate || pParse->nErr ); + aRoot[i] = (u32)pParse->u1.cr.regRoot; + aCreateTbl[i] = OPFLAG_P2ISREG; + } + }else{ + /* The table already exists. If zWhere is not NULL, delete all entries + ** associated with the table zWhere. If zWhere is NULL, delete the + ** entire contents of the table. */ + aRoot[i] = pStat->tnum; + sqlite3TableLock(pParse, iDb, aRoot[i], 1, zTab); + if( zWhere ){ + sqlite3NestedParse(pParse, + "DELETE FROM %Q.%s WHERE %s=%Q", + pDb->zDbSName, zTab, zWhereType, zWhere + ); +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + }else if( db->xPreUpdateCallback ){ + sqlite3NestedParse(pParse, "DELETE FROM %Q.%s", pDb->zDbSName, zTab); +#endif + }else{ + /* The sqlite_stat[134] table already exists. Delete all rows. */ + sqlite3VdbeAddOp2(v, OP_Clear, (int)aRoot[i], iDb); + } + } + } + + /* Open the sqlite_stat[134] tables for writing. */ + for(i=0; inRowid ){ + sqlite3DbFree(db, p->u.aRowid); + p->nRowid = 0; + } +} +#endif + +/* Initialize the BLOB value of a ROWID +*/ +#ifdef SQLITE_ENABLE_STAT4 +static void sampleSetRowid(sqlite3 *db, StatSample *p, int n, const u8 *pData){ + assert( db!=0 ); + if( p->nRowid ) sqlite3DbFree(db, p->u.aRowid); + p->u.aRowid = sqlite3DbMallocRawNN(db, n); + if( p->u.aRowid ){ + p->nRowid = n; + memcpy(p->u.aRowid, pData, n); + }else{ + p->nRowid = 0; + } +} +#endif + +/* Initialize the INTEGER value of a ROWID. +*/ +#ifdef SQLITE_ENABLE_STAT4 +static void sampleSetRowidInt64(sqlite3 *db, StatSample *p, i64 iRowid){ + assert( db!=0 ); + if( p->nRowid ) sqlite3DbFree(db, p->u.aRowid); + p->nRowid = 0; + p->u.iRowid = iRowid; +} +#endif + + +/* +** Copy the contents of object (*pFrom) into (*pTo). +*/ +#ifdef SQLITE_ENABLE_STAT4 +static void sampleCopy(StatAccum *p, StatSample *pTo, StatSample *pFrom){ + pTo->isPSample = pFrom->isPSample; + pTo->iCol = pFrom->iCol; + pTo->iHash = pFrom->iHash; + memcpy(pTo->anEq, pFrom->anEq, sizeof(tRowcnt)*p->nCol); + memcpy(pTo->anLt, pFrom->anLt, sizeof(tRowcnt)*p->nCol); + memcpy(pTo->anDLt, pFrom->anDLt, sizeof(tRowcnt)*p->nCol); + if( pFrom->nRowid ){ + sampleSetRowid(p->db, pTo, pFrom->nRowid, pFrom->u.aRowid); + }else{ + sampleSetRowidInt64(p->db, pTo, pFrom->u.iRowid); + } +} +#endif + +/* +** Reclaim all memory of a StatAccum structure. +*/ +static void statAccumDestructor(void *pOld){ + StatAccum *p = (StatAccum*)pOld; +#ifdef SQLITE_ENABLE_STAT4 + if( p->mxSample ){ + int i; + for(i=0; inCol; i++) sampleClear(p->db, p->aBest+i); + for(i=0; imxSample; i++) sampleClear(p->db, p->a+i); + sampleClear(p->db, &p->current); + } +#endif + sqlite3DbFree(p->db, p); +} + +/* +** Implementation of the stat_init(N,K,C,L) SQL function. The four parameters +** are: +** N: The number of columns in the index including the rowid/pk (note 1) +** K: The number of columns in the index excluding the rowid/pk. +** C: Estimated number of rows in the index +** L: A limit on the number of rows to scan, or 0 for no-limit +** +** Note 1: In the special case of the covering index that implements a +** WITHOUT ROWID table, N is the number of PRIMARY KEY columns, not the +** total number of columns in the table. +** +** For indexes on ordinary rowid tables, N==K+1. But for indexes on +** WITHOUT ROWID tables, N=K+P where P is the number of columns in the +** PRIMARY KEY of the table. The covering index that implements the +** original WITHOUT ROWID table as N==K as a special case. +** +** This routine allocates the StatAccum object in heap memory. The return +** value is a pointer to the StatAccum object. The datatype of the +** return value is BLOB, but it is really just a pointer to the StatAccum +** object. +*/ +static void statInit( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + StatAccum *p; + int nCol; /* Number of columns in index being sampled */ + int nKeyCol; /* Number of key columns */ + int nColUp; /* nCol rounded up for alignment */ + i64 n; /* Bytes of space to allocate */ + sqlite3 *db = sqlite3_context_db_handle(context); /* Database connection */ +#ifdef SQLITE_ENABLE_STAT4 + /* Maximum number of samples. 0 if STAT4 data is not collected */ + int mxSample = OptimizationEnabled(db,SQLITE_Stat4) ?SQLITE_STAT4_SAMPLES :0; +#endif + + /* Decode the three function arguments */ + UNUSED_PARAMETER(argc); + nCol = sqlite3_value_int(argv[0]); + assert( nCol>0 ); + nColUp = sizeof(tRowcnt)<8 ? (nCol+1)&~1 : nCol; + nKeyCol = sqlite3_value_int(argv[1]); + assert( nKeyCol<=nCol ); + assert( nKeyCol>0 ); + + /* Allocate the space required for the StatAccum object */ + n = sizeof(*p) + + sizeof(tRowcnt)*nColUp; /* StatAccum.anDLt */ +#ifdef SQLITE_ENABLE_STAT4 + n += sizeof(tRowcnt)*nColUp; /* StatAccum.anEq */ + if( mxSample ){ + n += sizeof(tRowcnt)*nColUp /* StatAccum.anLt */ + + sizeof(StatSample)*(nCol+mxSample) /* StatAccum.aBest[], a[] */ + + sizeof(tRowcnt)*3*nColUp*(nCol+mxSample); + } +#endif + p = sqlite3DbMallocZero(db, n); + if( p==0 ){ + sqlite3_result_error_nomem(context); + return; + } + + p->db = db; + p->nEst = sqlite3_value_int64(argv[2]); + p->nRow = 0; + p->nLimit = sqlite3_value_int(argv[3]); + p->nCol = nCol; + p->nKeyCol = nKeyCol; + p->nSkipAhead = 0; + p->current.anDLt = (tRowcnt*)&p[1]; + +#ifdef SQLITE_ENABLE_STAT4 + p->current.anEq = &p->current.anDLt[nColUp]; + p->mxSample = p->nLimit==0 ? mxSample : 0; + if( mxSample ){ + u8 *pSpace; /* Allocated space not yet assigned */ + int i; /* Used to iterate through p->aSample[] */ + + p->iGet = -1; + p->nPSample = (tRowcnt)(p->nEst/(mxSample/3+1) + 1); + p->current.anLt = &p->current.anEq[nColUp]; + p->iPrn = 0x689e962d*(u32)nCol ^ 0xd0944565*(u32)sqlite3_value_int(argv[2]); + + /* Set up the StatAccum.a[] and aBest[] arrays */ + p->a = (struct StatSample*)&p->current.anLt[nColUp]; + p->aBest = &p->a[mxSample]; + pSpace = (u8*)(&p->a[mxSample+nCol]); + for(i=0; i<(mxSample+nCol); i++){ + p->a[i].anEq = (tRowcnt *)pSpace; pSpace += (sizeof(tRowcnt) * nColUp); + p->a[i].anLt = (tRowcnt *)pSpace; pSpace += (sizeof(tRowcnt) * nColUp); + p->a[i].anDLt = (tRowcnt *)pSpace; pSpace += (sizeof(tRowcnt) * nColUp); + } + assert( (pSpace - (u8*)p)==n ); + + for(i=0; iaBest[i].iCol = i; + } + } +#endif + + /* Return a pointer to the allocated object to the caller. Note that + ** only the pointer (the 2nd parameter) matters. The size of the object + ** (given by the 3rd parameter) is never used and can be any positive + ** value. */ + sqlite3_result_blob(context, p, sizeof(*p), statAccumDestructor); +} +static const FuncDef statInitFuncdef = { + 4, /* nArg */ + SQLITE_UTF8, /* funcFlags */ + 0, /* pUserData */ + 0, /* pNext */ + statInit, /* xSFunc */ + 0, /* xFinalize */ + 0, 0, /* xValue, xInverse */ + "stat_init", /* zName */ + {0} +}; + +#ifdef SQLITE_ENABLE_STAT4 +/* +** pNew and pOld are both candidate non-periodic samples selected for +** the same column (pNew->iCol==pOld->iCol). Ignoring this column and +** considering only any trailing columns and the sample hash value, this +** function returns true if sample pNew is to be preferred over pOld. +** In other words, if we assume that the cardinalities of the selected +** column for pNew and pOld are equal, is pNew to be preferred over pOld. +** +** This function assumes that for each argument sample, the contents of +** the anEq[] array from pSample->anEq[pSample->iCol+1] onwards are valid. +*/ +static int sampleIsBetterPost( + StatAccum *pAccum, + StatSample *pNew, + StatSample *pOld +){ + int nCol = pAccum->nCol; + int i; + assert( pNew->iCol==pOld->iCol ); + for(i=pNew->iCol+1; ianEq[i]>pOld->anEq[i] ) return 1; + if( pNew->anEq[i]anEq[i] ) return 0; + } + if( pNew->iHash>pOld->iHash ) return 1; + return 0; +} +#endif + +#ifdef SQLITE_ENABLE_STAT4 +/* +** Return true if pNew is to be preferred over pOld. +** +** This function assumes that for each argument sample, the contents of +** the anEq[] array from pSample->anEq[pSample->iCol] onwards are valid. +*/ +static int sampleIsBetter( + StatAccum *pAccum, + StatSample *pNew, + StatSample *pOld +){ + tRowcnt nEqNew = pNew->anEq[pNew->iCol]; + tRowcnt nEqOld = pOld->anEq[pOld->iCol]; + + assert( pOld->isPSample==0 && pNew->isPSample==0 ); + assert( IsStat4 || (pNew->iCol==0 && pOld->iCol==0) ); + + if( (nEqNew>nEqOld) ) return 1; + if( nEqNew==nEqOld ){ + if( pNew->iColiCol ) return 1; + return (pNew->iCol==pOld->iCol && sampleIsBetterPost(pAccum, pNew, pOld)); + } + return 0; +} + +/* +** Copy the contents of sample *pNew into the p->a[] array. If necessary, +** remove the least desirable sample from p->a[] to make room. +*/ +static void sampleInsert(StatAccum *p, StatSample *pNew, int nEqZero){ + StatSample *pSample = 0; + int i; + + assert( IsStat4 || nEqZero==0 ); + + /* StatAccum.nMaxEqZero is set to the maximum number of leading 0 + ** values in the anEq[] array of any sample in StatAccum.a[]. In + ** other words, if nMaxEqZero is n, then it is guaranteed that there + ** are no samples with StatSample.anEq[m]==0 for (m>=n). */ + if( nEqZero>p->nMaxEqZero ){ + p->nMaxEqZero = nEqZero; + } + if( pNew->isPSample==0 ){ + StatSample *pUpgrade = 0; + assert( pNew->anEq[pNew->iCol]>0 ); + + /* This sample is being added because the prefix that ends in column + ** iCol occurs many times in the table. However, if we have already + ** added a sample that shares this prefix, there is no need to add + ** this one. Instead, upgrade the priority of the highest priority + ** existing sample that shares this prefix. */ + for(i=p->nSample-1; i>=0; i--){ + StatSample *pOld = &p->a[i]; + if( pOld->anEq[pNew->iCol]==0 ){ + if( pOld->isPSample ) return; + assert( pOld->iCol>pNew->iCol ); + assert( sampleIsBetter(p, pNew, pOld) ); + if( pUpgrade==0 || sampleIsBetter(p, pOld, pUpgrade) ){ + pUpgrade = pOld; + } + } + } + if( pUpgrade ){ + pUpgrade->iCol = pNew->iCol; + pUpgrade->anEq[pUpgrade->iCol] = pNew->anEq[pUpgrade->iCol]; + goto find_new_min; + } + } + + /* If necessary, remove sample iMin to make room for the new sample. */ + if( p->nSample>=p->mxSample ){ + StatSample *pMin = &p->a[p->iMin]; + tRowcnt *anEq = pMin->anEq; + tRowcnt *anLt = pMin->anLt; + tRowcnt *anDLt = pMin->anDLt; + sampleClear(p->db, pMin); + memmove(pMin, &pMin[1], sizeof(p->a[0])*(p->nSample-p->iMin-1)); + pSample = &p->a[p->nSample-1]; + pSample->nRowid = 0; + pSample->anEq = anEq; + pSample->anDLt = anDLt; + pSample->anLt = anLt; + p->nSample = p->mxSample-1; + } + + /* The "rows less-than" for the rowid column must be greater than that + ** for the last sample in the p->a[] array. Otherwise, the samples would + ** be out of order. */ + assert( p->nSample==0 + || pNew->anLt[p->nCol-1] > p->a[p->nSample-1].anLt[p->nCol-1] ); + + /* Insert the new sample */ + pSample = &p->a[p->nSample]; + sampleCopy(p, pSample, pNew); + p->nSample++; + + /* Zero the first nEqZero entries in the anEq[] array. */ + memset(pSample->anEq, 0, sizeof(tRowcnt)*nEqZero); + +find_new_min: + if( p->nSample>=p->mxSample ){ + int iMin = -1; + for(i=0; imxSample; i++){ + if( p->a[i].isPSample ) continue; + if( iMin<0 || sampleIsBetter(p, &p->a[iMin], &p->a[i]) ){ + iMin = i; + } + } + assert( iMin>=0 ); + p->iMin = iMin; + } +} +#endif /* SQLITE_ENABLE_STAT4 */ + +#ifdef SQLITE_ENABLE_STAT4 +/* +** Field iChng of the index being scanned has changed. So at this point +** p->current contains a sample that reflects the previous row of the +** index. The value of anEq[iChng] and subsequent anEq[] elements are +** correct at this point. +*/ +static void samplePushPrevious(StatAccum *p, int iChng){ + int i; + + /* Check if any samples from the aBest[] array should be pushed + ** into IndexSample.a[] at this point. */ + for(i=(p->nCol-2); i>=iChng; i--){ + StatSample *pBest = &p->aBest[i]; + pBest->anEq[i] = p->current.anEq[i]; + if( p->nSamplemxSample || sampleIsBetter(p, pBest, &p->a[p->iMin]) ){ + sampleInsert(p, pBest, i); + } + } + + /* Check that no sample contains an anEq[] entry with an index of + ** p->nMaxEqZero or greater set to zero. */ + for(i=p->nSample-1; i>=0; i--){ + int j; + for(j=p->nMaxEqZero; jnCol; j++) assert( p->a[i].anEq[j]>0 ); + } + + /* Update the anEq[] fields of any samples already collected. */ + if( iChngnMaxEqZero ){ + for(i=p->nSample-1; i>=0; i--){ + int j; + for(j=iChng; jnCol; j++){ + if( p->a[i].anEq[j]==0 ) p->a[i].anEq[j] = p->current.anEq[j]; + } + } + p->nMaxEqZero = iChng; + } +} +#endif /* SQLITE_ENABLE_STAT4 */ + +/* +** Implementation of the stat_push SQL function: stat_push(P,C,R) +** Arguments: +** +** P Pointer to the StatAccum object created by stat_init() +** C Index of left-most column to differ from previous row +** R Rowid for the current row. Might be a key record for +** WITHOUT ROWID tables. +** +** The purpose of this routine is to collect statistical data and/or +** samples from the index being analyzed into the StatAccum object. +** The stat_get() SQL function will be used afterwards to +** retrieve the information gathered. +** +** This SQL function usually returns NULL, but might return an integer +** if it wants the byte-code to do special processing. +** +** The R parameter is only used for STAT4 +*/ +static void statPush( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int i; + + /* The three function arguments */ + StatAccum *p = (StatAccum*)sqlite3_value_blob(argv[0]); + int iChng = sqlite3_value_int(argv[1]); + + UNUSED_PARAMETER( argc ); + UNUSED_PARAMETER( context ); + assert( p->nCol>0 ); + assert( iChngnCol ); + + if( p->nRow==0 ){ + /* This is the first call to this function. Do initialization. */ +#ifdef SQLITE_ENABLE_STAT4 + for(i=0; inCol; i++) p->current.anEq[i] = 1; +#endif + }else{ + /* Second and subsequent calls get processed here */ +#ifdef SQLITE_ENABLE_STAT4 + if( p->mxSample ) samplePushPrevious(p, iChng); +#endif + + /* Update anDLt[], anLt[] and anEq[] to reflect the values that apply + ** to the current row of the index. */ +#ifdef SQLITE_ENABLE_STAT4 + for(i=0; icurrent.anEq[i]++; + } +#endif + for(i=iChng; inCol; i++){ + p->current.anDLt[i]++; +#ifdef SQLITE_ENABLE_STAT4 + if( p->mxSample ) p->current.anLt[i] += p->current.anEq[i]; + p->current.anEq[i] = 1; +#endif + } + } + + p->nRow++; +#ifdef SQLITE_ENABLE_STAT4 + if( p->mxSample ){ + tRowcnt nLt; + if( sqlite3_value_type(argv[2])==SQLITE_INTEGER ){ + sampleSetRowidInt64(p->db, &p->current, sqlite3_value_int64(argv[2])); + }else{ + sampleSetRowid(p->db, &p->current, sqlite3_value_bytes(argv[2]), + sqlite3_value_blob(argv[2])); + } + p->current.iHash = p->iPrn = p->iPrn*1103515245 + 12345; + + nLt = p->current.anLt[p->nCol-1]; + /* Check if this is to be a periodic sample. If so, add it. */ + if( (nLt/p->nPSample)!=(nLt+1)/p->nPSample ){ + p->current.isPSample = 1; + p->current.iCol = 0; + sampleInsert(p, &p->current, p->nCol-1); + p->current.isPSample = 0; + } + + /* Update the aBest[] array. */ + for(i=0; i<(p->nCol-1); i++){ + p->current.iCol = i; + if( i>=iChng || sampleIsBetterPost(p, &p->current, &p->aBest[i]) ){ + sampleCopy(p, &p->aBest[i], &p->current); + } + } + }else +#endif + if( p->nLimit && p->nRow>(tRowcnt)p->nLimit*(p->nSkipAhead+1) ){ + p->nSkipAhead++; + sqlite3_result_int(context, p->current.anDLt[0]>0); + } +} + +static const FuncDef statPushFuncdef = { + 2+IsStat4, /* nArg */ + SQLITE_UTF8, /* funcFlags */ + 0, /* pUserData */ + 0, /* pNext */ + statPush, /* xSFunc */ + 0, /* xFinalize */ + 0, 0, /* xValue, xInverse */ + "stat_push", /* zName */ + {0} +}; + +#define STAT_GET_STAT1 0 /* "stat" column of stat1 table */ +#define STAT_GET_ROWID 1 /* "rowid" column of stat[34] entry */ +#define STAT_GET_NEQ 2 /* "neq" column of stat[34] entry */ +#define STAT_GET_NLT 3 /* "nlt" column of stat[34] entry */ +#define STAT_GET_NDLT 4 /* "ndlt" column of stat[34] entry */ + +/* +** Implementation of the stat_get(P,J) SQL function. This routine is +** used to query statistical information that has been gathered into +** the StatAccum object by prior calls to stat_push(). The P parameter +** has type BLOB but it is really just a pointer to the StatAccum object. +** The content to returned is determined by the parameter J +** which is one of the STAT_GET_xxxx values defined above. +** +** The stat_get(P,J) function is not available to generic SQL. It is +** inserted as part of a manually constructed bytecode program. (See +** the callStatGet() routine below.) It is guaranteed that the P +** parameter will always be a pointer to a StatAccum object, never a +** NULL. +** +** If STAT4 is not enabled, then J is always +** STAT_GET_STAT1 and is hence omitted and this routine becomes +** a one-parameter function, stat_get(P), that always returns the +** stat1 table entry information. +*/ +static void statGet( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + StatAccum *p = (StatAccum*)sqlite3_value_blob(argv[0]); +#ifdef SQLITE_ENABLE_STAT4 + /* STAT4 has a parameter on this routine. */ + int eCall = sqlite3_value_int(argv[1]); + assert( argc==2 ); + assert( eCall==STAT_GET_STAT1 || eCall==STAT_GET_NEQ + || eCall==STAT_GET_ROWID || eCall==STAT_GET_NLT + || eCall==STAT_GET_NDLT + ); + assert( eCall==STAT_GET_STAT1 || p->mxSample ); + if( eCall==STAT_GET_STAT1 ) +#else + assert( argc==1 ); +#endif + { + /* Return the value to store in the "stat" column of the sqlite_stat1 + ** table for this index. + ** + ** The value is a string composed of a list of integers describing + ** the index. The first integer in the list is the total number of + ** entries in the index. There is one additional integer in the list + ** for each indexed column. This additional integer is an estimate of + ** the number of rows matched by a equality query on the index using + ** a key with the corresponding number of fields. In other words, + ** if the index is on columns (a,b) and the sqlite_stat1 value is + ** "100 10 2", then SQLite estimates that: + ** + ** * the index contains 100 rows, + ** * "WHERE a=?" matches 10 rows, and + ** * "WHERE a=? AND b=?" matches 2 rows. + ** + ** If D is the count of distinct values and K is the total number of + ** rows, then each estimate is usually computed as: + ** + ** I = (K+D-1)/D + ** + ** In other words, I is K/D rounded up to the next whole integer. + ** However, if I is between 1.0 and 1.1 (in other words if I is + ** close to 1.0 but just a little larger) then do not round up but + ** instead keep the I value at 1.0. + */ + sqlite3_str sStat; /* Text of the constructed "stat" line */ + int i; /* Loop counter */ + + sqlite3StrAccumInit(&sStat, 0, 0, 0, (p->nKeyCol+1)*100); + sqlite3_str_appendf(&sStat, "%llu", + p->nSkipAhead ? (u64)p->nEst : (u64)p->nRow); + for(i=0; inKeyCol; i++){ + u64 nDistinct = p->current.anDLt[i] + 1; + u64 iVal = (p->nRow + nDistinct - 1) / nDistinct; + if( iVal==2 && p->nRow*10 <= nDistinct*11 ) iVal = 1; + sqlite3_str_appendf(&sStat, " %llu", iVal); +#ifdef SQLITE_ENABLE_STAT4 + assert( p->current.anEq[i] || p->nRow==0 ); +#endif + } + sqlite3ResultStrAccum(context, &sStat); + } +#ifdef SQLITE_ENABLE_STAT4 + else if( eCall==STAT_GET_ROWID ){ + if( p->iGet<0 ){ + samplePushPrevious(p, 0); + p->iGet = 0; + } + if( p->iGetnSample ){ + StatSample *pS = p->a + p->iGet; + if( pS->nRowid==0 ){ + sqlite3_result_int64(context, pS->u.iRowid); + }else{ + sqlite3_result_blob(context, pS->u.aRowid, pS->nRowid, + SQLITE_TRANSIENT); + } + } + }else{ + tRowcnt *aCnt = 0; + sqlite3_str sStat; + int i; + + assert( p->iGetnSample ); + switch( eCall ){ + case STAT_GET_NEQ: aCnt = p->a[p->iGet].anEq; break; + case STAT_GET_NLT: aCnt = p->a[p->iGet].anLt; break; + default: { + aCnt = p->a[p->iGet].anDLt; + p->iGet++; + break; + } + } + sqlite3StrAccumInit(&sStat, 0, 0, 0, p->nCol*100); + for(i=0; inCol; i++){ + sqlite3_str_appendf(&sStat, "%llu ", (u64)aCnt[i]); + } + if( sStat.nChar ) sStat.nChar--; + sqlite3ResultStrAccum(context, &sStat); + } +#endif /* SQLITE_ENABLE_STAT4 */ +#ifndef SQLITE_DEBUG + UNUSED_PARAMETER( argc ); +#endif +} +static const FuncDef statGetFuncdef = { + 1+IsStat4, /* nArg */ + SQLITE_UTF8, /* funcFlags */ + 0, /* pUserData */ + 0, /* pNext */ + statGet, /* xSFunc */ + 0, /* xFinalize */ + 0, 0, /* xValue, xInverse */ + "stat_get", /* zName */ + {0} +}; + +static void callStatGet(Parse *pParse, int regStat, int iParam, int regOut){ +#ifdef SQLITE_ENABLE_STAT4 + sqlite3VdbeAddOp2(pParse->pVdbe, OP_Integer, iParam, regStat+1); +#elif SQLITE_DEBUG + assert( iParam==STAT_GET_STAT1 ); +#else + UNUSED_PARAMETER( iParam ); +#endif + assert( regOut!=regStat && regOut!=regStat+1 ); + sqlite3VdbeAddFunctionCall(pParse, 0, regStat, regOut, 1+IsStat4, + &statGetFuncdef, 0); +} + +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS +/* Add a comment to the most recent VDBE opcode that is the name +** of the k-th column of the pIdx index. +*/ +static void analyzeVdbeCommentIndexWithColumnName( + Vdbe *v, /* Prepared statement under construction */ + Index *pIdx, /* Index whose column is being loaded */ + int k /* Which column index */ +){ + int i; /* Index of column in the table */ + assert( k>=0 && knColumn ); + i = pIdx->aiColumn[k]; + if( NEVER(i==XN_ROWID) ){ + VdbeComment((v,"%s.rowid",pIdx->zName)); + }else if( i==XN_EXPR ){ + assert( pIdx->bHasExpr ); + VdbeComment((v,"%s.expr(%d)",pIdx->zName, k)); + }else{ + VdbeComment((v,"%s.%s", pIdx->zName, pIdx->pTable->aCol[i].zCnName)); + } +} +#else +# define analyzeVdbeCommentIndexWithColumnName(a,b,c) +#endif /* SQLITE_DEBUG */ + +/* +** Generate code to do an analysis of all indices associated with +** a single table. +*/ +static void analyzeOneTable( + Parse *pParse, /* Parser context */ + Table *pTab, /* Table whose indices are to be analyzed */ + Index *pOnlyIdx, /* If not NULL, only analyze this one index */ + int iStatCur, /* Index of VdbeCursor that writes the sqlite_stat1 table */ + int iMem, /* Available memory locations begin here */ + int iTab /* Next available cursor */ +){ + sqlite3 *db = pParse->db; /* Database handle */ + Index *pIdx; /* An index to being analyzed */ + int iIdxCur; /* Cursor open on index being analyzed */ + int iTabCur; /* Table cursor */ + Vdbe *v; /* The virtual machine being built up */ + int i; /* Loop counter */ + int jZeroRows = -1; /* Jump from here if number of rows is zero */ + int iDb; /* Index of database containing pTab */ + u8 needTableCnt = 1; /* True to count the table */ + int regNewRowid = iMem++; /* Rowid for the inserted record */ + int regStat = iMem++; /* Register to hold StatAccum object */ + int regChng = iMem++; /* Index of changed index field */ + int regRowid = iMem++; /* Rowid argument passed to stat_push() */ + int regTemp = iMem++; /* Temporary use register */ + int regTemp2 = iMem++; /* Second temporary use register */ + int regTabname = iMem++; /* Register containing table name */ + int regIdxname = iMem++; /* Register containing index name */ + int regStat1 = iMem++; /* Value for the stat column of sqlite_stat1 */ + int regPrev = iMem; /* MUST BE LAST (see below) */ +#ifdef SQLITE_ENABLE_STAT4 + int doOnce = 1; /* Flag for a one-time computation */ +#endif +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + Table *pStat1 = 0; +#endif + + sqlite3TouchRegister(pParse, iMem); + assert( sqlite3NoTempsInRange(pParse, regNewRowid, iMem) ); + v = sqlite3GetVdbe(pParse); + if( v==0 || NEVER(pTab==0) ){ + return; + } + if( !IsOrdinaryTable(pTab) ){ + /* Do not gather statistics on views or virtual tables */ + return; + } + if( sqlite3_strlike("sqlite\\_%", pTab->zName, '\\')==0 ){ + /* Do not gather statistics on system tables */ + return; + } + assert( sqlite3BtreeHoldsAllMutexes(db) ); + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + assert( iDb>=0 ); + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); +#ifndef SQLITE_OMIT_AUTHORIZATION + if( sqlite3AuthCheck(pParse, SQLITE_ANALYZE, pTab->zName, 0, + db->aDb[iDb].zDbSName ) ){ + return; + } +#endif + +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + if( db->xPreUpdateCallback ){ + pStat1 = (Table*)sqlite3DbMallocZero(db, sizeof(Table) + 13); + if( pStat1==0 ) return; + pStat1->zName = (char*)&pStat1[1]; + memcpy(pStat1->zName, "sqlite_stat1", 13); + pStat1->nCol = 3; + pStat1->iPKey = -1; + sqlite3VdbeAddOp4(pParse->pVdbe, OP_Noop, 0, 0, 0,(char*)pStat1,P4_DYNAMIC); + } +#endif + + /* Establish a read-lock on the table at the shared-cache level. + ** Open a read-only cursor on the table. Also allocate a cursor number + ** to use for scanning indexes (iIdxCur). No index cursor is opened at + ** this time though. */ + sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName); + iTabCur = iTab++; + iIdxCur = iTab++; + pParse->nTab = MAX(pParse->nTab, iTab); + sqlite3OpenTable(pParse, iTabCur, iDb, pTab, OP_OpenRead); + sqlite3VdbeLoadString(v, regTabname, pTab->zName); + + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + int nCol; /* Number of columns in pIdx. "N" */ + int addrGotoEnd; /* Address of "OP_Rewind iIdxCur" */ + int addrNextRow; /* Address of "next_row:" */ + const char *zIdxName; /* Name of the index */ + int nColTest; /* Number of columns to test for changes */ + + if( pOnlyIdx && pOnlyIdx!=pIdx ) continue; + if( pIdx->pPartIdxWhere==0 ) needTableCnt = 0; + if( !HasRowid(pTab) && IsPrimaryKeyIndex(pIdx) ){ + nCol = pIdx->nKeyCol; + zIdxName = pTab->zName; + nColTest = nCol - 1; + }else{ + nCol = pIdx->nColumn; + zIdxName = pIdx->zName; + nColTest = pIdx->uniqNotNull ? pIdx->nKeyCol-1 : nCol-1; + } + + /* Populate the register containing the index name. */ + sqlite3VdbeLoadString(v, regIdxname, zIdxName); + VdbeComment((v, "Analysis for %s.%s", pTab->zName, zIdxName)); + + /* + ** Pseudo-code for loop that calls stat_push(): + ** + ** regChng = 0 + ** Rewind csr + ** if eof(csr){ + ** stat_init() with count = 0; + ** goto end_of_scan; + ** } + ** count() + ** stat_init() + ** goto chng_addr_0; + ** + ** next_row: + ** regChng = 0 + ** if( idx(0) != regPrev(0) ) goto chng_addr_0 + ** regChng = 1 + ** if( idx(1) != regPrev(1) ) goto chng_addr_1 + ** ... + ** regChng = N + ** goto chng_addr_N + ** + ** chng_addr_0: + ** regPrev(0) = idx(0) + ** chng_addr_1: + ** regPrev(1) = idx(1) + ** ... + ** + ** endDistinctTest: + ** regRowid = idx(rowid) + ** stat_push(P, regChng, regRowid) + ** Next csr + ** if !eof(csr) goto next_row; + ** + ** end_of_scan: + */ + + /* Make sure there are enough memory cells allocated to accommodate + ** the regPrev array and a trailing rowid (the rowid slot is required + ** when building a record to insert into the sample column of + ** the sqlite_stat4 table. */ + sqlite3TouchRegister(pParse, regPrev+nColTest); + + /* Open a read-only cursor on the index being analyzed. */ + assert( iDb==sqlite3SchemaToIndex(db, pIdx->pSchema) ); + sqlite3VdbeAddOp3(v, OP_OpenRead, iIdxCur, pIdx->tnum, iDb); + sqlite3VdbeSetP4KeyInfo(pParse, pIdx); + VdbeComment((v, "%s", pIdx->zName)); + + /* Implementation of the following: + ** + ** regChng = 0 + ** Rewind csr + ** if eof(csr){ + ** stat_init() with count = 0; + ** goto end_of_scan; + ** } + ** count() + ** stat_init() + ** goto chng_addr_0; + */ + assert( regTemp2==regStat+4 ); + sqlite3VdbeAddOp2(v, OP_Integer, db->nAnalysisLimit, regTemp2); + + /* Arguments to stat_init(): + ** (1) the number of columns in the index including the rowid + ** (or for a WITHOUT ROWID table, the number of PK columns), + ** (2) the number of columns in the key without the rowid/pk + ** (3) estimated number of rows in the index. */ + sqlite3VdbeAddOp2(v, OP_Integer, nCol, regStat+1); + assert( regRowid==regStat+2 ); + sqlite3VdbeAddOp2(v, OP_Integer, pIdx->nKeyCol, regRowid); + sqlite3VdbeAddOp3(v, OP_Count, iIdxCur, regTemp, + OptimizationDisabled(db, SQLITE_Stat4)); + sqlite3VdbeAddFunctionCall(pParse, 0, regStat+1, regStat, 4, + &statInitFuncdef, 0); + addrGotoEnd = sqlite3VdbeAddOp1(v, OP_Rewind, iIdxCur); + VdbeCoverage(v); + + sqlite3VdbeAddOp2(v, OP_Integer, 0, regChng); + addrNextRow = sqlite3VdbeCurrentAddr(v); + + if( nColTest>0 ){ + int endDistinctTest = sqlite3VdbeMakeLabel(pParse); + int *aGotoChng; /* Array of jump instruction addresses */ + aGotoChng = sqlite3DbMallocRawNN(db, sizeof(int)*nColTest); + if( aGotoChng==0 ) continue; + + /* + ** next_row: + ** regChng = 0 + ** if( idx(0) != regPrev(0) ) goto chng_addr_0 + ** regChng = 1 + ** if( idx(1) != regPrev(1) ) goto chng_addr_1 + ** ... + ** regChng = N + ** goto endDistinctTest + */ + sqlite3VdbeAddOp0(v, OP_Goto); + addrNextRow = sqlite3VdbeCurrentAddr(v); + if( nColTest==1 && pIdx->nKeyCol==1 && IsUniqueIndex(pIdx) ){ + /* For a single-column UNIQUE index, once we have found a non-NULL + ** row, we know that all the rest will be distinct, so skip + ** subsequent distinctness tests. */ + sqlite3VdbeAddOp2(v, OP_NotNull, regPrev, endDistinctTest); + VdbeCoverage(v); + } + for(i=0; iazColl[i]); + sqlite3VdbeAddOp2(v, OP_Integer, i, regChng); + sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, regTemp); + analyzeVdbeCommentIndexWithColumnName(v,pIdx,i); + aGotoChng[i] = + sqlite3VdbeAddOp4(v, OP_Ne, regTemp, 0, regPrev+i, pColl, P4_COLLSEQ); + sqlite3VdbeChangeP5(v, SQLITE_NULLEQ); + VdbeCoverage(v); + } + sqlite3VdbeAddOp2(v, OP_Integer, nColTest, regChng); + sqlite3VdbeGoto(v, endDistinctTest); + + + /* + ** chng_addr_0: + ** regPrev(0) = idx(0) + ** chng_addr_1: + ** regPrev(1) = idx(1) + ** ... + */ + sqlite3VdbeJumpHere(v, addrNextRow-1); + for(i=0; ipTable); + int j, k, regKey; + regKey = sqlite3GetTempRange(pParse, pPk->nKeyCol); + for(j=0; jnKeyCol; j++){ + k = sqlite3TableColumnToIndex(pIdx, pPk->aiColumn[j]); + assert( k>=0 && knColumn ); + sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, k, regKey+j); + analyzeVdbeCommentIndexWithColumnName(v,pIdx,k); + } + sqlite3VdbeAddOp3(v, OP_MakeRecord, regKey, pPk->nKeyCol, regRowid); + sqlite3ReleaseTempRange(pParse, regKey, pPk->nKeyCol); + } + } +#endif + assert( regChng==(regStat+1) ); + { + sqlite3VdbeAddFunctionCall(pParse, 1, regStat, regTemp, 2+IsStat4, + &statPushFuncdef, 0); + if( db->nAnalysisLimit ){ + int j1, j2, j3; + j1 = sqlite3VdbeAddOp1(v, OP_IsNull, regTemp); VdbeCoverage(v); + j2 = sqlite3VdbeAddOp1(v, OP_If, regTemp); VdbeCoverage(v); + j3 = sqlite3VdbeAddOp4Int(v, OP_SeekGT, iIdxCur, 0, regPrev, 1); + VdbeCoverage(v); + sqlite3VdbeJumpHere(v, j1); + sqlite3VdbeAddOp2(v, OP_Next, iIdxCur, addrNextRow); VdbeCoverage(v); + sqlite3VdbeJumpHere(v, j2); + sqlite3VdbeJumpHere(v, j3); + }else{ + sqlite3VdbeAddOp2(v, OP_Next, iIdxCur, addrNextRow); VdbeCoverage(v); + } + } + + /* Add the entry to the stat1 table. */ + if( pIdx->pPartIdxWhere ){ + /* Partial indexes might get a zero-entry in sqlite_stat1. But + ** an empty table is omitted from sqlite_stat1. */ + sqlite3VdbeJumpHere(v, addrGotoEnd); + addrGotoEnd = 0; + } + callStatGet(pParse, regStat, STAT_GET_STAT1, regStat1); + assert( "BBB"[0]==SQLITE_AFF_TEXT ); + sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regTemp, "BBB", 0); + sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid); + sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regTemp, regNewRowid); +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + sqlite3VdbeChangeP4(v, -1, (char*)pStat1, P4_TABLE); +#endif + sqlite3VdbeChangeP5(v, OPFLAG_APPEND); + + /* Add the entries to the stat4 table. */ +#ifdef SQLITE_ENABLE_STAT4 + if( OptimizationEnabled(db, SQLITE_Stat4) && db->nAnalysisLimit==0 ){ + int regEq = regStat1; + int regLt = regStat1+1; + int regDLt = regStat1+2; + int regSample = regStat1+3; + int regCol = regStat1+4; + int regSampleRowid = regCol + nCol; + int addrNext; + int addrIsNull; + u8 seekOp = HasRowid(pTab) ? OP_NotExists : OP_NotFound; + + /* No STAT4 data is generated if the number of rows is zero */ + if( addrGotoEnd==0 ){ + sqlite3VdbeAddOp2(v, OP_Cast, regStat1, SQLITE_AFF_INTEGER); + addrGotoEnd = sqlite3VdbeAddOp1(v, OP_IfNot, regStat1); + VdbeCoverage(v); + } + + if( doOnce ){ + int mxCol = nCol; + Index *pX; + + /* Compute the maximum number of columns in any index */ + for(pX=pTab->pIndex; pX; pX=pX->pNext){ + int nColX; /* Number of columns in pX */ + if( !HasRowid(pTab) && IsPrimaryKeyIndex(pX) ){ + nColX = pX->nKeyCol; + }else{ + nColX = pX->nColumn; + } + if( nColX>mxCol ) mxCol = nColX; + } + + /* Allocate space to compute results for the largest index */ + sqlite3TouchRegister(pParse, regCol+mxCol); + doOnce = 0; +#ifdef SQLITE_DEBUG + /* Verify that the call to sqlite3ClearTempRegCache() below + ** really is needed. + ** https://sqlite.org/forum/forumpost/83cb4a95a0 (2023-03-25) + */ + testcase( !sqlite3NoTempsInRange(pParse, regEq, regCol+mxCol) ); +#endif + sqlite3ClearTempRegCache(pParse); /* tag-20230325-1 */ + assert( sqlite3NoTempsInRange(pParse, regEq, regCol+mxCol) ); + } + assert( sqlite3NoTempsInRange(pParse, regEq, regCol+nCol) ); + + addrNext = sqlite3VdbeCurrentAddr(v); + callStatGet(pParse, regStat, STAT_GET_ROWID, regSampleRowid); + addrIsNull = sqlite3VdbeAddOp1(v, OP_IsNull, regSampleRowid); + VdbeCoverage(v); + callStatGet(pParse, regStat, STAT_GET_NEQ, regEq); + callStatGet(pParse, regStat, STAT_GET_NLT, regLt); + callStatGet(pParse, regStat, STAT_GET_NDLT, regDLt); + sqlite3VdbeAddOp4Int(v, seekOp, iTabCur, addrNext, regSampleRowid, 0); + VdbeCoverage(v); + for(i=0; izName)); + sqlite3VdbeAddOp2(v, OP_Count, iTabCur, regStat1); + jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, regStat1); VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Null, 0, regIdxname); + assert( "BBB"[0]==SQLITE_AFF_TEXT ); + sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regTemp, "BBB", 0); + sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid); + sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regTemp, regNewRowid); + sqlite3VdbeChangeP5(v, OPFLAG_APPEND); +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + sqlite3VdbeChangeP4(v, -1, (char*)pStat1, P4_TABLE); +#endif + sqlite3VdbeJumpHere(v, jZeroRows); + } +} + + +/* +** Generate code that will cause the most recent index analysis to +** be loaded into internal hash tables where is can be used. +*/ +static void loadAnalysis(Parse *pParse, int iDb){ + Vdbe *v = sqlite3GetVdbe(pParse); + if( v ){ + sqlite3VdbeAddOp1(v, OP_LoadAnalysis, iDb); + } +} + +/* +** Generate code that will do an analysis of an entire database +*/ +static void analyzeDatabase(Parse *pParse, int iDb){ + sqlite3 *db = pParse->db; + Schema *pSchema = db->aDb[iDb].pSchema; /* Schema of database iDb */ + HashElem *k; + int iStatCur; + int iMem; + int iTab; + + sqlite3BeginWriteOperation(pParse, 0, iDb); + iStatCur = pParse->nTab; + pParse->nTab += 3; + openStatTable(pParse, iDb, iStatCur, 0, 0); + iMem = pParse->nMem+1; + iTab = pParse->nTab; + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + for(k=sqliteHashFirst(&pSchema->tblHash); k; k=sqliteHashNext(k)){ + Table *pTab = (Table*)sqliteHashData(k); + analyzeOneTable(pParse, pTab, 0, iStatCur, iMem, iTab); +#ifdef SQLITE_ENABLE_STAT4 + iMem = sqlite3FirstAvailableRegister(pParse, iMem); +#else + assert( iMem==sqlite3FirstAvailableRegister(pParse,iMem) ); +#endif + } + loadAnalysis(pParse, iDb); +} + +/* +** Generate code that will do an analysis of a single table in +** a database. If pOnlyIdx is not NULL then it is a single index +** in pTab that should be analyzed. +*/ +static void analyzeTable(Parse *pParse, Table *pTab, Index *pOnlyIdx){ + int iDb; + int iStatCur; + + assert( pTab!=0 ); + assert( sqlite3BtreeHoldsAllMutexes(pParse->db) ); + iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + sqlite3BeginWriteOperation(pParse, 0, iDb); + iStatCur = pParse->nTab; + pParse->nTab += 3; + if( pOnlyIdx ){ + openStatTable(pParse, iDb, iStatCur, pOnlyIdx->zName, "idx"); + }else{ + openStatTable(pParse, iDb, iStatCur, pTab->zName, "tbl"); + } + analyzeOneTable(pParse, pTab, pOnlyIdx, iStatCur,pParse->nMem+1,pParse->nTab); + loadAnalysis(pParse, iDb); +} + +/* +** Generate code for the ANALYZE command. The parser calls this routine +** when it recognizes an ANALYZE command. +** +** ANALYZE -- 1 +** ANALYZE -- 2 +** ANALYZE ?.? -- 3 +** +** Form 1 causes all indices in all attached databases to be analyzed. +** Form 2 analyzes all indices the single database named. +** Form 3 analyzes all indices associated with the named table. +*/ +SQLITE_PRIVATE void sqlite3Analyze(Parse *pParse, Token *pName1, Token *pName2){ + sqlite3 *db = pParse->db; + int iDb; + int i; + char *z, *zDb; + Table *pTab; + Index *pIdx; + Token *pTableName; + Vdbe *v; + + /* Read the database schema. If an error occurs, leave an error message + ** and code in pParse and return NULL. */ + assert( sqlite3BtreeHoldsAllMutexes(pParse->db) ); + if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ + return; + } + + assert( pName2!=0 || pName1==0 ); + if( pName1==0 ){ + /* Form 1: Analyze everything */ + for(i=0; inDb; i++){ + if( i==1 ) continue; /* Do not analyze the TEMP database */ + analyzeDatabase(pParse, i); + } + }else if( pName2->n==0 && (iDb = sqlite3FindDb(db, pName1))>=0 ){ + /* Analyze the schema named as the argument */ + analyzeDatabase(pParse, iDb); + }else{ + /* Form 3: Analyze the table or index named as an argument */ + iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pTableName); + if( iDb>=0 ){ + zDb = pName2->n ? db->aDb[iDb].zDbSName : 0; + z = sqlite3NameFromToken(db, pTableName); + if( z ){ + if( (pIdx = sqlite3FindIndex(db, z, zDb))!=0 ){ + analyzeTable(pParse, pIdx->pTable, pIdx); + }else if( (pTab = sqlite3LocateTable(pParse, 0, z, zDb))!=0 ){ + analyzeTable(pParse, pTab, 0); + } + sqlite3DbFree(db, z); + } + } + } + if( db->nSqlExec==0 && (v = sqlite3GetVdbe(pParse))!=0 ){ + sqlite3VdbeAddOp0(v, OP_Expire); + } +} + +/* +** Used to pass information from the analyzer reader through to the +** callback routine. +*/ +typedef struct analysisInfo analysisInfo; +struct analysisInfo { + sqlite3 *db; + const char *zDatabase; +}; + +/* +** The first argument points to a nul-terminated string containing a +** list of space separated integers. Read the first nOut of these into +** the array aOut[]. +*/ +static void decodeIntArray( + char *zIntArray, /* String containing int array to decode */ + int nOut, /* Number of slots in aOut[] */ + tRowcnt *aOut, /* Store integers here */ + LogEst *aLog, /* Or, if aOut==0, here */ + Index *pIndex /* Handle extra flags for this index, if not NULL */ +){ + char *z = zIntArray; + int c; + int i; + tRowcnt v; + +#ifdef SQLITE_ENABLE_STAT4 + if( z==0 ) z = ""; +#else + assert( z!=0 ); +#endif + for(i=0; *z && i='0' && c<='9' ){ + v = v*10 + c - '0'; + z++; + } +#ifdef SQLITE_ENABLE_STAT4 + if( aOut ) aOut[i] = v; + if( aLog ) aLog[i] = sqlite3LogEst(v); +#else + assert( aOut==0 ); + UNUSED_PARAMETER(aOut); + assert( aLog!=0 ); + aLog[i] = sqlite3LogEst(v); +#endif + if( *z==' ' ) z++; + } +#ifndef SQLITE_ENABLE_STAT4 + assert( pIndex!=0 ); { +#else + if( pIndex ){ +#endif + pIndex->bUnordered = 0; + pIndex->noSkipScan = 0; + while( z[0] ){ + if( sqlite3_strglob("unordered*", z)==0 ){ + pIndex->bUnordered = 1; + }else if( sqlite3_strglob("sz=[0-9]*", z)==0 ){ + int sz = sqlite3Atoi(z+3); + if( sz<2 ) sz = 2; + pIndex->szIdxRow = sqlite3LogEst(sz); + }else if( sqlite3_strglob("noskipscan*", z)==0 ){ + pIndex->noSkipScan = 1; + } +#ifdef SQLITE_ENABLE_COSTMULT + else if( sqlite3_strglob("costmult=[0-9]*",z)==0 ){ + pIndex->pTable->costMult = sqlite3LogEst(sqlite3Atoi(z+9)); + } +#endif + while( z[0]!=0 && z[0]!=' ' ) z++; + while( z[0]==' ' ) z++; + } + } +} + +/* +** This callback is invoked once for each index when reading the +** sqlite_stat1 table. +** +** argv[0] = name of the table +** argv[1] = name of the index (might be NULL) +** argv[2] = results of analysis - on integer for each column +** +** Entries for which argv[1]==NULL simply record the number of rows in +** the table. +*/ +static int analysisLoader(void *pData, int argc, char **argv, char **NotUsed){ + analysisInfo *pInfo = (analysisInfo*)pData; + Index *pIndex; + Table *pTable; + const char *z; + + assert( argc==3 ); + UNUSED_PARAMETER2(NotUsed, argc); + + if( argv==0 || argv[0]==0 || argv[2]==0 ){ + return 0; + } + pTable = sqlite3FindTable(pInfo->db, argv[0], pInfo->zDatabase); + if( pTable==0 ){ + return 0; + } + if( argv[1]==0 ){ + pIndex = 0; + }else if( sqlite3_stricmp(argv[0],argv[1])==0 ){ + pIndex = sqlite3PrimaryKeyIndex(pTable); + }else{ + pIndex = sqlite3FindIndex(pInfo->db, argv[1], pInfo->zDatabase); + } + z = argv[2]; + + if( pIndex ){ + tRowcnt *aiRowEst = 0; + int nCol = pIndex->nKeyCol+1; +#ifdef SQLITE_ENABLE_STAT4 + /* Index.aiRowEst may already be set here if there are duplicate + ** sqlite_stat1 entries for this index. In that case just clobber + ** the old data with the new instead of allocating a new array. */ + if( pIndex->aiRowEst==0 ){ + pIndex->aiRowEst = (tRowcnt*)sqlite3MallocZero(sizeof(tRowcnt) * nCol); + if( pIndex->aiRowEst==0 ) sqlite3OomFault(pInfo->db); + } + aiRowEst = pIndex->aiRowEst; +#endif + pIndex->bUnordered = 0; + decodeIntArray((char*)z, nCol, aiRowEst, pIndex->aiRowLogEst, pIndex); + pIndex->hasStat1 = 1; + if( pIndex->pPartIdxWhere==0 ){ + pTable->nRowLogEst = pIndex->aiRowLogEst[0]; + pTable->tabFlags |= TF_HasStat1; + } + }else{ + Index fakeIdx; + fakeIdx.szIdxRow = pTable->szTabRow; +#ifdef SQLITE_ENABLE_COSTMULT + fakeIdx.pTable = pTable; +#endif + decodeIntArray((char*)z, 1, 0, &pTable->nRowLogEst, &fakeIdx); + pTable->szTabRow = fakeIdx.szIdxRow; + pTable->tabFlags |= TF_HasStat1; + } + + return 0; +} + +/* +** If the Index.aSample variable is not NULL, delete the aSample[] array +** and its contents. +*/ +SQLITE_PRIVATE void sqlite3DeleteIndexSamples(sqlite3 *db, Index *pIdx){ + assert( db!=0 ); + assert( pIdx!=0 ); +#ifdef SQLITE_ENABLE_STAT4 + if( pIdx->aSample ){ + int j; + for(j=0; jnSample; j++){ + IndexSample *p = &pIdx->aSample[j]; + sqlite3DbFree(db, p->p); + } + sqlite3DbFree(db, pIdx->aSample); + } + if( db->pnBytesFreed==0 ){ + pIdx->nSample = 0; + pIdx->aSample = 0; + } +#else + UNUSED_PARAMETER(db); + UNUSED_PARAMETER(pIdx); +#endif /* SQLITE_ENABLE_STAT4 */ +} + +#ifdef SQLITE_ENABLE_STAT4 +/* +** Populate the pIdx->aAvgEq[] array based on the samples currently +** stored in pIdx->aSample[]. +*/ +static void initAvgEq(Index *pIdx){ + if( pIdx ){ + IndexSample *aSample = pIdx->aSample; + IndexSample *pFinal = &aSample[pIdx->nSample-1]; + int iCol; + int nCol = 1; + if( pIdx->nSampleCol>1 ){ + /* If this is stat4 data, then calculate aAvgEq[] values for all + ** sample columns except the last. The last is always set to 1, as + ** once the trailing PK fields are considered all index keys are + ** unique. */ + nCol = pIdx->nSampleCol-1; + pIdx->aAvgEq[nCol] = 1; + } + for(iCol=0; iColnSample; + int i; /* Used to iterate through samples */ + tRowcnt sumEq = 0; /* Sum of the nEq values */ + tRowcnt avgEq = 0; + tRowcnt nRow; /* Number of rows in index */ + i64 nSum100 = 0; /* Number of terms contributing to sumEq */ + i64 nDist100; /* Number of distinct values in index */ + + if( !pIdx->aiRowEst || iCol>=pIdx->nKeyCol || pIdx->aiRowEst[iCol+1]==0 ){ + nRow = pFinal->anLt[iCol]; + nDist100 = (i64)100 * pFinal->anDLt[iCol]; + nSample--; + }else{ + nRow = pIdx->aiRowEst[0]; + nDist100 = ((i64)100 * pIdx->aiRowEst[0]) / pIdx->aiRowEst[iCol+1]; + } + pIdx->nRowEst0 = nRow; + + /* Set nSum to the number of distinct (iCol+1) field prefixes that + ** occur in the stat4 table for this index. Set sumEq to the sum of + ** the nEq values for column iCol for the same set (adding the value + ** only once where there exist duplicate prefixes). */ + for(i=0; inSample-1) + || aSample[i].anDLt[iCol]!=aSample[i+1].anDLt[iCol] + ){ + sumEq += aSample[i].anEq[iCol]; + nSum100 += 100; + } + } + + if( nDist100>nSum100 && sumEqaAvgEq[iCol] = avgEq; + } + } +} + +/* +** Look up an index by name. Or, if the name of a WITHOUT ROWID table +** is supplied instead, find the PRIMARY KEY index for that table. +*/ +static Index *findIndexOrPrimaryKey( + sqlite3 *db, + const char *zName, + const char *zDb +){ + Index *pIdx = sqlite3FindIndex(db, zName, zDb); + if( pIdx==0 ){ + Table *pTab = sqlite3FindTable(db, zName, zDb); + if( pTab && !HasRowid(pTab) ) pIdx = sqlite3PrimaryKeyIndex(pTab); + } + return pIdx; +} + +/* +** Load the content from either the sqlite_stat4 +** into the relevant Index.aSample[] arrays. +** +** Arguments zSql1 and zSql2 must point to SQL statements that return +** data equivalent to the following: +** +** zSql1: SELECT idx,count(*) FROM %Q.sqlite_stat4 GROUP BY idx +** zSql2: SELECT idx,neq,nlt,ndlt,sample FROM %Q.sqlite_stat4 +** +** where %Q is replaced with the database name before the SQL is executed. +*/ +static int loadStatTbl( + sqlite3 *db, /* Database handle */ + const char *zSql1, /* SQL statement 1 (see above) */ + const char *zSql2, /* SQL statement 2 (see above) */ + const char *zDb /* Database name (e.g. "main") */ +){ + int rc; /* Result codes from subroutines */ + sqlite3_stmt *pStmt = 0; /* An SQL statement being run */ + char *zSql; /* Text of the SQL statement */ + Index *pPrevIdx = 0; /* Previous index in the loop */ + IndexSample *pSample; /* A slot in pIdx->aSample[] */ + + assert( db->lookaside.bDisable ); + zSql = sqlite3MPrintf(db, zSql1, zDb); + if( !zSql ){ + return SQLITE_NOMEM_BKPT; + } + rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0); + sqlite3DbFree(db, zSql); + if( rc ) return rc; + + while( sqlite3_step(pStmt)==SQLITE_ROW ){ + int nIdxCol = 1; /* Number of columns in stat4 records */ + + char *zIndex; /* Index name */ + Index *pIdx; /* Pointer to the index object */ + int nSample; /* Number of samples */ + i64 nByte; /* Bytes of space required */ + i64 i; /* Bytes of space required */ + tRowcnt *pSpace; /* Available allocated memory space */ + u8 *pPtr; /* Available memory as a u8 for easier manipulation */ + + zIndex = (char *)sqlite3_column_text(pStmt, 0); + if( zIndex==0 ) continue; + nSample = sqlite3_column_int(pStmt, 1); + pIdx = findIndexOrPrimaryKey(db, zIndex, zDb); + assert( pIdx==0 || pIdx->nSample==0 ); + if( pIdx==0 ) continue; + if( pIdx->aSample!=0 ){ + /* The same index appears in sqlite_stat4 under multiple names */ + continue; + } + assert( !HasRowid(pIdx->pTable) || pIdx->nColumn==pIdx->nKeyCol+1 ); + if( !HasRowid(pIdx->pTable) && IsPrimaryKeyIndex(pIdx) ){ + nIdxCol = pIdx->nKeyCol; + }else{ + nIdxCol = pIdx->nColumn; + } + pIdx->nSampleCol = nIdxCol; + pIdx->mxSample = nSample; + nByte = ROUND8(sizeof(IndexSample) * nSample); + nByte += sizeof(tRowcnt) * nIdxCol * 3 * nSample; + nByte += nIdxCol * sizeof(tRowcnt); /* Space for Index.aAvgEq[] */ + + pIdx->aSample = sqlite3DbMallocZero(db, nByte); + if( pIdx->aSample==0 ){ + sqlite3_finalize(pStmt); + return SQLITE_NOMEM_BKPT; + } + pPtr = (u8*)pIdx->aSample; + pPtr += ROUND8(nSample*sizeof(pIdx->aSample[0])); + pSpace = (tRowcnt*)pPtr; + assert( EIGHT_BYTE_ALIGNMENT( pSpace ) ); + pIdx->aAvgEq = pSpace; pSpace += nIdxCol; + pIdx->pTable->tabFlags |= TF_HasStat4; + for(i=0; iaSample[i].anEq = pSpace; pSpace += nIdxCol; + pIdx->aSample[i].anLt = pSpace; pSpace += nIdxCol; + pIdx->aSample[i].anDLt = pSpace; pSpace += nIdxCol; + } + assert( ((u8*)pSpace)-nByte==(u8*)(pIdx->aSample) ); + } + rc = sqlite3_finalize(pStmt); + if( rc ) return rc; + + zSql = sqlite3MPrintf(db, zSql2, zDb); + if( !zSql ){ + return SQLITE_NOMEM_BKPT; + } + rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0); + sqlite3DbFree(db, zSql); + if( rc ) return rc; + + while( sqlite3_step(pStmt)==SQLITE_ROW ){ + char *zIndex; /* Index name */ + Index *pIdx; /* Pointer to the index object */ + int nCol = 1; /* Number of columns in index */ + + zIndex = (char *)sqlite3_column_text(pStmt, 0); + if( zIndex==0 ) continue; + pIdx = findIndexOrPrimaryKey(db, zIndex, zDb); + if( pIdx==0 ) continue; + if( pIdx->nSample>=pIdx->mxSample ){ + /* Too many slots used because the same index appears in + ** sqlite_stat4 using multiple names */ + continue; + } + /* This next condition is true if data has already been loaded from + ** the sqlite_stat4 table. */ + nCol = pIdx->nSampleCol; + if( pIdx!=pPrevIdx ){ + initAvgEq(pPrevIdx); + pPrevIdx = pIdx; + } + pSample = &pIdx->aSample[pIdx->nSample]; + decodeIntArray((char*)sqlite3_column_text(pStmt,1),nCol,pSample->anEq,0,0); + decodeIntArray((char*)sqlite3_column_text(pStmt,2),nCol,pSample->anLt,0,0); + decodeIntArray((char*)sqlite3_column_text(pStmt,3),nCol,pSample->anDLt,0,0); + + /* Take a copy of the sample. Add 8 extra 0x00 bytes the end of the buffer. + ** This is in case the sample record is corrupted. In that case, the + ** sqlite3VdbeRecordCompare() may read up to two varints past the + ** end of the allocated buffer before it realizes it is dealing with + ** a corrupt record. Or it might try to read a large integer from the + ** buffer. In any case, eight 0x00 bytes prevents this from causing + ** a buffer overread. */ + pSample->n = sqlite3_column_bytes(pStmt, 4); + pSample->p = sqlite3DbMallocZero(db, pSample->n + 8); + if( pSample->p==0 ){ + sqlite3_finalize(pStmt); + return SQLITE_NOMEM_BKPT; + } + if( pSample->n ){ + memcpy(pSample->p, sqlite3_column_blob(pStmt, 4), pSample->n); + } + pIdx->nSample++; + } + rc = sqlite3_finalize(pStmt); + if( rc==SQLITE_OK ) initAvgEq(pPrevIdx); + return rc; +} + +/* +** Load content from the sqlite_stat4 table into +** the Index.aSample[] arrays of all indices. +*/ +static int loadStat4(sqlite3 *db, const char *zDb){ + int rc = SQLITE_OK; /* Result codes from subroutines */ + const Table *pStat4; + + assert( db->lookaside.bDisable ); + if( OptimizationEnabled(db, SQLITE_Stat4) + && (pStat4 = sqlite3FindTable(db, "sqlite_stat4", zDb))!=0 + && IsOrdinaryTable(pStat4) + ){ + rc = loadStatTbl(db, + "SELECT idx,count(*) FROM %Q.sqlite_stat4 GROUP BY idx COLLATE nocase", + "SELECT idx,neq,nlt,ndlt,sample FROM %Q.sqlite_stat4", + zDb + ); + } + return rc; +} +#endif /* SQLITE_ENABLE_STAT4 */ + +/* +** Load the content of the sqlite_stat1 and sqlite_stat4 tables. The +** contents of sqlite_stat1 are used to populate the Index.aiRowEst[] +** arrays. The contents of sqlite_stat4 are used to populate the +** Index.aSample[] arrays. +** +** If the sqlite_stat1 table is not present in the database, SQLITE_ERROR +** is returned. In this case, even if SQLITE_ENABLE_STAT4 was defined +** during compilation and the sqlite_stat4 table is present, no data is +** read from it. +** +** If SQLITE_ENABLE_STAT4 was defined during compilation and the +** sqlite_stat4 table is not present in the database, SQLITE_ERROR is +** returned. However, in this case, data is read from the sqlite_stat1 +** table (if it is present) before returning. +** +** If an OOM error occurs, this function always sets db->mallocFailed. +** This means if the caller does not care about other errors, the return +** code may be ignored. +*/ +SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3 *db, int iDb){ + analysisInfo sInfo; + HashElem *i; + char *zSql; + int rc = SQLITE_OK; + Schema *pSchema = db->aDb[iDb].pSchema; + const Table *pStat1; + + assert( iDb>=0 && iDbnDb ); + assert( db->aDb[iDb].pBt!=0 ); + + /* Clear any prior statistics */ + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + for(i=sqliteHashFirst(&pSchema->tblHash); i; i=sqliteHashNext(i)){ + Table *pTab = sqliteHashData(i); + pTab->tabFlags &= ~TF_HasStat1; + } + for(i=sqliteHashFirst(&pSchema->idxHash); i; i=sqliteHashNext(i)){ + Index *pIdx = sqliteHashData(i); + pIdx->hasStat1 = 0; +#ifdef SQLITE_ENABLE_STAT4 + sqlite3DeleteIndexSamples(db, pIdx); + pIdx->aSample = 0; +#endif + } + + /* Load new statistics out of the sqlite_stat1 table */ + sInfo.db = db; + sInfo.zDatabase = db->aDb[iDb].zDbSName; + if( (pStat1 = sqlite3FindTable(db, "sqlite_stat1", sInfo.zDatabase)) + && IsOrdinaryTable(pStat1) + ){ + zSql = sqlite3MPrintf(db, + "SELECT tbl,idx,stat FROM %Q.sqlite_stat1", sInfo.zDatabase); + if( zSql==0 ){ + rc = SQLITE_NOMEM_BKPT; + }else{ + rc = sqlite3_exec(db, zSql, analysisLoader, &sInfo, 0); + sqlite3DbFree(db, zSql); + } + } + + /* Set appropriate defaults on all indexes not in the sqlite_stat1 table */ + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + for(i=sqliteHashFirst(&pSchema->idxHash); i; i=sqliteHashNext(i)){ + Index *pIdx = sqliteHashData(i); + if( !pIdx->hasStat1 ) sqlite3DefaultRowEst(pIdx); + } + + /* Load the statistics from the sqlite_stat4 table. */ +#ifdef SQLITE_ENABLE_STAT4 + if( rc==SQLITE_OK ){ + DisableLookaside; + rc = loadStat4(db, sInfo.zDatabase); + EnableLookaside; + } + for(i=sqliteHashFirst(&pSchema->idxHash); i; i=sqliteHashNext(i)){ + Index *pIdx = sqliteHashData(i); + sqlite3_free(pIdx->aiRowEst); + pIdx->aiRowEst = 0; + } +#endif + + if( rc==SQLITE_NOMEM ){ + sqlite3OomFault(db); + } + return rc; +} + + +#endif /* SQLITE_OMIT_ANALYZE */ + +/************** End of analyze.c *********************************************/ +/************** Begin file attach.c ******************************************/ +/* +** 2003 April 6 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code used to implement the ATTACH and DETACH commands. +*/ +/* #include "sqliteInt.h" */ + +#ifndef SQLITE_OMIT_ATTACH +/* +** Resolve an expression that was part of an ATTACH or DETACH statement. This +** is slightly different from resolving a normal SQL expression, because simple +** identifiers are treated as strings, not possible column names or aliases. +** +** i.e. if the parser sees: +** +** ATTACH DATABASE abc AS def +** +** it treats the two expressions as literal strings 'abc' and 'def' instead of +** looking for columns of the same name. +** +** This only applies to the root node of pExpr, so the statement: +** +** ATTACH DATABASE abc||def AS 'db2' +** +** will fail because neither abc or def can be resolved. +*/ +static int resolveAttachExpr(NameContext *pName, Expr *pExpr) +{ + int rc = SQLITE_OK; + if( pExpr ){ + if( pExpr->op!=TK_ID ){ + rc = sqlite3ResolveExprNames(pName, pExpr); + }else{ + pExpr->op = TK_STRING; + } + } + return rc; +} + +/* +** Return true if zName points to a name that may be used to refer to +** database iDb attached to handle db. +*/ +SQLITE_PRIVATE int sqlite3DbIsNamed(sqlite3 *db, int iDb, const char *zName){ + return ( + sqlite3StrICmp(db->aDb[iDb].zDbSName, zName)==0 + || (iDb==0 && sqlite3StrICmp("main", zName)==0) + ); +} + +/* +** An SQL user-function registered to do the work of an ATTACH statement. The +** three arguments to the function come directly from an attach statement: +** +** ATTACH DATABASE x AS y KEY z +** +** SELECT sqlite_attach(x, y, z) +** +** If the optional "KEY z" syntax is omitted, an SQL NULL is passed as the +** third argument. +** +** If the db->init.reopenMemdb flags is set, then instead of attaching a +** new database, close the database on db->init.iDb and reopen it as an +** empty MemDB. +*/ +static void attachFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + int i; + int rc = 0; + sqlite3 *db = sqlite3_context_db_handle(context); + const char *zName; + const char *zFile; + char *zPath = 0; + char *zErr = 0; + unsigned int flags; + Db *aNew; /* New array of Db pointers */ + Db *pNew = 0; /* Db object for the newly attached database */ + char *zErrDyn = 0; + sqlite3_vfs *pVfs; + + UNUSED_PARAMETER(NotUsed); + zFile = (const char *)sqlite3_value_text(argv[0]); + zName = (const char *)sqlite3_value_text(argv[1]); + if( zFile==0 ) zFile = ""; + if( zName==0 ) zName = ""; + +#ifndef SQLITE_OMIT_DESERIALIZE +# define REOPEN_AS_MEMDB(db) (db->init.reopenMemdb) +#else +# define REOPEN_AS_MEMDB(db) (0) +#endif + + if( REOPEN_AS_MEMDB(db) ){ + /* This is not a real ATTACH. Instead, this routine is being called + ** from sqlite3_deserialize() to close database db->init.iDb and + ** reopen it as a MemDB */ + Btree *pNewBt = 0; + pVfs = sqlite3_vfs_find("memdb"); + if( pVfs==0 ) return; + rc = sqlite3BtreeOpen(pVfs, "x\0", db, &pNewBt, 0, SQLITE_OPEN_MAIN_DB); + if( rc==SQLITE_OK ){ + Schema *pNewSchema = sqlite3SchemaGet(db, pNewBt); + if( pNewSchema ){ + /* Both the Btree and the new Schema were allocated successfully. + ** Close the old db and update the aDb[] slot with the new memdb + ** values. */ + pNew = &db->aDb[db->init.iDb]; + if( ALWAYS(pNew->pBt) ) sqlite3BtreeClose(pNew->pBt); + pNew->pBt = pNewBt; + pNew->pSchema = pNewSchema; + }else{ + sqlite3BtreeClose(pNewBt); + rc = SQLITE_NOMEM; + } + } + if( rc ) goto attach_error; + }else{ + /* This is a real ATTACH + ** + ** Check for the following errors: + ** + ** * Too many attached databases, + ** * Transaction currently open + ** * Specified database name already being used. + */ + if( db->nDb>=db->aLimit[SQLITE_LIMIT_ATTACHED]+2 ){ + zErrDyn = sqlite3MPrintf(db, "too many attached databases - max %d", + db->aLimit[SQLITE_LIMIT_ATTACHED] + ); + goto attach_error; + } + for(i=0; inDb; i++){ + assert( zName ); + if( sqlite3DbIsNamed(db, i, zName) ){ + zErrDyn = sqlite3MPrintf(db, "database %s is already in use", zName); + goto attach_error; + } + } + + /* Allocate the new entry in the db->aDb[] array and initialize the schema + ** hash tables. + */ + if( db->aDb==db->aDbStatic ){ + aNew = sqlite3DbMallocRawNN(db, sizeof(db->aDb[0])*3 ); + if( aNew==0 ) return; + memcpy(aNew, db->aDb, sizeof(db->aDb[0])*2); + }else{ + aNew = sqlite3DbRealloc(db, db->aDb, sizeof(db->aDb[0])*(1+(i64)db->nDb)); + if( aNew==0 ) return; + } + db->aDb = aNew; + pNew = &db->aDb[db->nDb]; + memset(pNew, 0, sizeof(*pNew)); + + /* Open the database file. If the btree is successfully opened, use + ** it to obtain the database schema. At this point the schema may + ** or may not be initialized. + */ + flags = db->openFlags; + rc = sqlite3ParseUri(db->pVfs->zName, zFile, &flags, &pVfs, &zPath, &zErr); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_NOMEM ) sqlite3OomFault(db); + sqlite3_result_error(context, zErr, -1); + sqlite3_free(zErr); + return; + } + if( (db->flags & SQLITE_AttachWrite)==0 ){ + flags &= ~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE); + flags |= SQLITE_OPEN_READONLY; + }else if( (db->flags & SQLITE_AttachCreate)==0 ){ + flags &= ~SQLITE_OPEN_CREATE; + } + assert( pVfs ); + flags |= SQLITE_OPEN_MAIN_DB; + rc = sqlite3BtreeOpen(pVfs, zPath, db, &pNew->pBt, 0, flags); + db->nDb++; + pNew->zDbSName = sqlite3DbStrDup(db, zName); + } + db->noSharedCache = 0; + if( rc==SQLITE_CONSTRAINT ){ + rc = SQLITE_ERROR; + zErrDyn = sqlite3MPrintf(db, "database is already attached"); + }else if( rc==SQLITE_OK ){ + Pager *pPager; + pNew->pSchema = sqlite3SchemaGet(db, pNew->pBt); + if( !pNew->pSchema ){ + rc = SQLITE_NOMEM_BKPT; + }else if( pNew->pSchema->file_format && pNew->pSchema->enc!=ENC(db) ){ + zErrDyn = sqlite3MPrintf(db, + "attached databases must use the same text encoding as main database"); + rc = SQLITE_ERROR; + } + sqlite3BtreeEnter(pNew->pBt); + pPager = sqlite3BtreePager(pNew->pBt); + sqlite3PagerLockingMode(pPager, db->dfltLockMode); + sqlite3BtreeSecureDelete(pNew->pBt, + sqlite3BtreeSecureDelete(db->aDb[0].pBt,-1) ); +#ifndef SQLITE_OMIT_PAGER_PRAGMAS + sqlite3BtreeSetPagerFlags(pNew->pBt, + PAGER_SYNCHRONOUS_FULL | (db->flags & PAGER_FLAGS_MASK)); +#endif + sqlite3BtreeLeave(pNew->pBt); + } + pNew->safety_level = SQLITE_DEFAULT_SYNCHRONOUS+1; + if( rc==SQLITE_OK && pNew->zDbSName==0 ){ + rc = SQLITE_NOMEM_BKPT; + } + sqlite3_free_filename( zPath ); + + /* If the file was opened successfully, read the schema for the new database. + ** If this fails, or if opening the file failed, then close the file and + ** remove the entry from the db->aDb[] array. i.e. put everything back the + ** way we found it. + */ + if( rc==SQLITE_OK ){ + sqlite3BtreeEnterAll(db); + db->init.iDb = 0; + db->mDbFlags &= ~(DBFLAG_SchemaKnownOk); +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + if( db->setlkFlags & SQLITE_SETLK_BLOCK_ON_CONNECT ){ + int val = 1; + sqlite3_file *fd = sqlite3PagerFile(sqlite3BtreePager(pNew->pBt)); + sqlite3OsFileControlHint(fd, SQLITE_FCNTL_BLOCK_ON_CONNECT, &val); + } +#endif + if( !REOPEN_AS_MEMDB(db) ){ + rc = sqlite3Init(db, &zErrDyn); + } + sqlite3BtreeLeaveAll(db); + assert( zErrDyn==0 || rc!=SQLITE_OK ); + } + if( rc ){ + if( ALWAYS(!REOPEN_AS_MEMDB(db)) ){ + int iDb = db->nDb - 1; + assert( iDb>=2 ); + if( db->aDb[iDb].pBt ){ + sqlite3BtreeClose(db->aDb[iDb].pBt); + db->aDb[iDb].pBt = 0; + db->aDb[iDb].pSchema = 0; + } + sqlite3ResetAllSchemasOfConnection(db); + db->nDb = iDb; + if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){ + sqlite3OomFault(db); + sqlite3DbFree(db, zErrDyn); + zErrDyn = sqlite3MPrintf(db, "out of memory"); + }else if( zErrDyn==0 ){ + zErrDyn = sqlite3MPrintf(db, "unable to open database: %s", zFile); + } + } + goto attach_error; + } + + return; + +attach_error: + /* Return an error if we get here */ + if( zErrDyn ){ + sqlite3_result_error(context, zErrDyn, -1); + sqlite3DbFree(db, zErrDyn); + } + if( rc ) sqlite3_result_error_code(context, rc); +} + +/* +** An SQL user-function registered to do the work of an DETACH statement. The +** three arguments to the function come directly from a detach statement: +** +** DETACH DATABASE x +** +** SELECT sqlite_detach(x) +*/ +static void detachFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + const char *zName = (const char *)sqlite3_value_text(argv[0]); + sqlite3 *db = sqlite3_context_db_handle(context); + int i; + Db *pDb = 0; + HashElem *pEntry; + char zErr[128]; + + UNUSED_PARAMETER(NotUsed); + + if( zName==0 ) zName = ""; + for(i=0; inDb; i++){ + pDb = &db->aDb[i]; + if( pDb->pBt==0 ) continue; + if( sqlite3DbIsNamed(db, i, zName) ) break; + } + + if( i>=db->nDb ){ + sqlite3_snprintf(sizeof(zErr),zErr, "no such database: %s", zName); + goto detach_error; + } + if( i<2 ){ + sqlite3_snprintf(sizeof(zErr),zErr, "cannot detach database %s", zName); + goto detach_error; + } + if( sqlite3BtreeTxnState(pDb->pBt)!=SQLITE_TXN_NONE + || sqlite3BtreeIsInBackup(pDb->pBt) + ){ + sqlite3_snprintf(sizeof(zErr),zErr, "database %s is locked", zName); + goto detach_error; + } + + /* If any TEMP triggers reference the schema being detached, move those + ** triggers to reference the TEMP schema itself. */ + assert( db->aDb[1].pSchema ); + pEntry = sqliteHashFirst(&db->aDb[1].pSchema->trigHash); + while( pEntry ){ + Trigger *pTrig = (Trigger*)sqliteHashData(pEntry); + if( pTrig->pTabSchema==pDb->pSchema ){ + pTrig->pTabSchema = pTrig->pSchema; + } + pEntry = sqliteHashNext(pEntry); + } + + sqlite3BtreeClose(pDb->pBt); + pDb->pBt = 0; + pDb->pSchema = 0; + sqlite3CollapseDatabaseArray(db); + return; + +detach_error: + sqlite3_result_error(context, zErr, -1); +} + +/* +** This procedure generates VDBE code for a single invocation of either the +** sqlite_detach() or sqlite_attach() SQL user functions. +*/ +static void codeAttach( + Parse *pParse, /* The parser context */ + int type, /* Either SQLITE_ATTACH or SQLITE_DETACH */ + FuncDef const *pFunc,/* FuncDef wrapper for detachFunc() or attachFunc() */ + Expr *pAuthArg, /* Expression to pass to authorization callback */ + Expr *pFilename, /* Name of database file */ + Expr *pDbname, /* Name of the database to use internally */ + Expr *pKey /* Database key for encryption extension */ +){ + int rc; + NameContext sName; + Vdbe *v; + sqlite3* db = pParse->db; + int regArgs; + + if( SQLITE_OK!=sqlite3ReadSchema(pParse) ) goto attach_end; + + if( pParse->nErr ) goto attach_end; + memset(&sName, 0, sizeof(NameContext)); + sName.pParse = pParse; + + if( + SQLITE_OK!=resolveAttachExpr(&sName, pFilename) || + SQLITE_OK!=resolveAttachExpr(&sName, pDbname) || + SQLITE_OK!=resolveAttachExpr(&sName, pKey) + ){ + goto attach_end; + } + +#ifndef SQLITE_OMIT_AUTHORIZATION + if( ALWAYS(pAuthArg) ){ + char *zAuthArg; + if( pAuthArg->op==TK_STRING ){ + assert( !ExprHasProperty(pAuthArg, EP_IntValue) ); + zAuthArg = pAuthArg->u.zToken; + }else{ + zAuthArg = 0; + } + rc = sqlite3AuthCheck(pParse, type, zAuthArg, 0, 0); + if(rc!=SQLITE_OK ){ + goto attach_end; + } + } +#endif /* SQLITE_OMIT_AUTHORIZATION */ + + + v = sqlite3GetVdbe(pParse); + regArgs = sqlite3GetTempRange(pParse, 4); + sqlite3ExprCode(pParse, pFilename, regArgs); + sqlite3ExprCode(pParse, pDbname, regArgs+1); + sqlite3ExprCode(pParse, pKey, regArgs+2); + + assert( v || db->mallocFailed ); + if( v ){ + sqlite3VdbeAddFunctionCall(pParse, 0, regArgs+3-pFunc->nArg, regArgs+3, + pFunc->nArg, pFunc, 0); + /* Code an OP_Expire. For an ATTACH statement, set P1 to true (expire this + ** statement only). For DETACH, set it to false (expire all existing + ** statements). + */ + sqlite3VdbeAddOp1(v, OP_Expire, (type==SQLITE_ATTACH)); + } + +attach_end: + sqlite3ExprDelete(db, pFilename); + sqlite3ExprDelete(db, pDbname); + sqlite3ExprDelete(db, pKey); +} + +/* +** Called by the parser to compile a DETACH statement. +** +** DETACH pDbname +*/ +SQLITE_PRIVATE void sqlite3Detach(Parse *pParse, Expr *pDbname){ + static const FuncDef detach_func = { + 1, /* nArg */ + SQLITE_UTF8, /* funcFlags */ + 0, /* pUserData */ + 0, /* pNext */ + detachFunc, /* xSFunc */ + 0, /* xFinalize */ + 0, 0, /* xValue, xInverse */ + "sqlite_detach", /* zName */ + {0} + }; + codeAttach(pParse, SQLITE_DETACH, &detach_func, pDbname, 0, 0, pDbname); +} + +/* +** Called by the parser to compile an ATTACH statement. +** +** ATTACH p AS pDbname KEY pKey +*/ +SQLITE_PRIVATE void sqlite3Attach(Parse *pParse, Expr *p, Expr *pDbname, Expr *pKey){ + static const FuncDef attach_func = { + 3, /* nArg */ + SQLITE_UTF8, /* funcFlags */ + 0, /* pUserData */ + 0, /* pNext */ + attachFunc, /* xSFunc */ + 0, /* xFinalize */ + 0, 0, /* xValue, xInverse */ + "sqlite_attach", /* zName */ + {0} + }; + codeAttach(pParse, SQLITE_ATTACH, &attach_func, p, p, pDbname, pKey); +} +#endif /* SQLITE_OMIT_ATTACH */ + +/* +** Expression callback used by sqlite3FixAAAA() routines. +*/ +static int fixExprCb(Walker *p, Expr *pExpr){ + DbFixer *pFix = p->u.pFix; + if( !pFix->bTemp ) ExprSetProperty(pExpr, EP_FromDDL); + if( pExpr->op==TK_VARIABLE ){ + if( pFix->pParse->db->init.busy ){ + pExpr->op = TK_NULL; + }else{ + sqlite3ErrorMsg(pFix->pParse, "%s cannot use variables", pFix->zType); + return WRC_Abort; + } + } + return WRC_Continue; +} + +/* +** Select callback used by sqlite3FixAAAA() routines. +*/ +static int fixSelectCb(Walker *p, Select *pSelect){ + DbFixer *pFix = p->u.pFix; + int i; + SrcItem *pItem; + sqlite3 *db = pFix->pParse->db; + int iDb = sqlite3FindDbName(db, pFix->zDb); + SrcList *pList = pSelect->pSrc; + + if( NEVER(pList==0) ) return WRC_Continue; + for(i=0, pItem=pList->a; inSrc; i++, pItem++){ + if( pFix->bTemp==0 && pItem->fg.isSubquery==0 ){ + if( pItem->fg.fixedSchema==0 && pItem->u4.zDatabase!=0 ){ + if( iDb!=sqlite3FindDbName(db, pItem->u4.zDatabase) ){ + sqlite3ErrorMsg(pFix->pParse, + "%s %T cannot reference objects in database %s", + pFix->zType, pFix->pName, pItem->u4.zDatabase); + return WRC_Abort; + } + sqlite3DbFree(db, pItem->u4.zDatabase); + pItem->fg.notCte = 1; + pItem->fg.hadSchema = 1; + } + pItem->u4.pSchema = pFix->pSchema; + pItem->fg.fromDDL = 1; + pItem->fg.fixedSchema = 1; + } +#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER) + if( pList->a[i].fg.isUsing==0 + && sqlite3WalkExpr(&pFix->w, pList->a[i].u3.pOn) + ){ + return WRC_Abort; + } +#endif + } + if( pSelect->pWith ){ + for(i=0; ipWith->nCte; i++){ + if( sqlite3WalkSelect(p, pSelect->pWith->a[i].pSelect) ){ + return WRC_Abort; + } + } + } + return WRC_Continue; +} + +/* +** Initialize a DbFixer structure. This routine must be called prior +** to passing the structure to one of the sqliteFixAAAA() routines below. +*/ +SQLITE_PRIVATE void sqlite3FixInit( + DbFixer *pFix, /* The fixer to be initialized */ + Parse *pParse, /* Error messages will be written here */ + int iDb, /* This is the database that must be used */ + const char *zType, /* "view", "trigger", or "index" */ + const Token *pName /* Name of the view, trigger, or index */ +){ + sqlite3 *db = pParse->db; + assert( db->nDb>iDb ); + pFix->pParse = pParse; + pFix->zDb = db->aDb[iDb].zDbSName; + pFix->pSchema = db->aDb[iDb].pSchema; + pFix->zType = zType; + pFix->pName = pName; + pFix->bTemp = (iDb==1); + pFix->w.pParse = pParse; + pFix->w.xExprCallback = fixExprCb; + pFix->w.xSelectCallback = fixSelectCb; + pFix->w.xSelectCallback2 = sqlite3WalkWinDefnDummyCallback; + pFix->w.walkerDepth = 0; + pFix->w.eCode = 0; + pFix->w.u.pFix = pFix; +} + +/* +** The following set of routines walk through the parse tree and assign +** a specific database to all table references where the database name +** was left unspecified in the original SQL statement. The pFix structure +** must have been initialized by a prior call to sqlite3FixInit(). +** +** These routines are used to make sure that an index, trigger, or +** view in one database does not refer to objects in a different database. +** (Exception: indices, triggers, and views in the TEMP database are +** allowed to refer to anything.) If a reference is explicitly made +** to an object in a different database, an error message is added to +** pParse->zErrMsg and these routines return non-zero. If everything +** checks out, these routines return 0. +*/ +SQLITE_PRIVATE int sqlite3FixSrcList( + DbFixer *pFix, /* Context of the fixation */ + SrcList *pList /* The Source list to check and modify */ +){ + int res = 0; + if( pList ){ + Select s; + memset(&s, 0, sizeof(s)); + s.pSrc = pList; + res = sqlite3WalkSelect(&pFix->w, &s); + } + return res; +} +#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER) +SQLITE_PRIVATE int sqlite3FixSelect( + DbFixer *pFix, /* Context of the fixation */ + Select *pSelect /* The SELECT statement to be fixed to one database */ +){ + return sqlite3WalkSelect(&pFix->w, pSelect); +} +SQLITE_PRIVATE int sqlite3FixExpr( + DbFixer *pFix, /* Context of the fixation */ + Expr *pExpr /* The expression to be fixed to one database */ +){ + return sqlite3WalkExpr(&pFix->w, pExpr); +} +#endif + +#ifndef SQLITE_OMIT_TRIGGER +SQLITE_PRIVATE int sqlite3FixTriggerStep( + DbFixer *pFix, /* Context of the fixation */ + TriggerStep *pStep /* The trigger step be fixed to one database */ +){ + while( pStep ){ + if( sqlite3WalkSelect(&pFix->w, pStep->pSelect) + || sqlite3WalkExpr(&pFix->w, pStep->pWhere) + || sqlite3WalkExprList(&pFix->w, pStep->pExprList) + || sqlite3FixSrcList(pFix, pStep->pFrom) + ){ + return 1; + } +#ifndef SQLITE_OMIT_UPSERT + { + Upsert *pUp; + for(pUp=pStep->pUpsert; pUp; pUp=pUp->pNextUpsert){ + if( sqlite3WalkExprList(&pFix->w, pUp->pUpsertTarget) + || sqlite3WalkExpr(&pFix->w, pUp->pUpsertTargetWhere) + || sqlite3WalkExprList(&pFix->w, pUp->pUpsertSet) + || sqlite3WalkExpr(&pFix->w, pUp->pUpsertWhere) + ){ + return 1; + } + } + } +#endif + pStep = pStep->pNext; + } + + return 0; +} +#endif + +/************** End of attach.c **********************************************/ +/************** Begin file auth.c ********************************************/ +/* +** 2003 January 11 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code used to implement the sqlite3_set_authorizer() +** API. This facility is an optional feature of the library. Embedded +** systems that do not need this facility may omit it by recompiling +** the library with -DSQLITE_OMIT_AUTHORIZATION=1 +*/ +/* #include "sqliteInt.h" */ + +/* +** All of the code in this file may be omitted by defining a single +** macro. +*/ +#ifndef SQLITE_OMIT_AUTHORIZATION + +/* +** Set or clear the access authorization function. +** +** The access authorization function is be called during the compilation +** phase to verify that the user has read and/or write access permission on +** various fields of the database. The first argument to the auth function +** is a copy of the 3rd argument to this routine. The second argument +** to the auth function is one of these constants: +** +** SQLITE_CREATE_INDEX +** SQLITE_CREATE_TABLE +** SQLITE_CREATE_TEMP_INDEX +** SQLITE_CREATE_TEMP_TABLE +** SQLITE_CREATE_TEMP_TRIGGER +** SQLITE_CREATE_TEMP_VIEW +** SQLITE_CREATE_TRIGGER +** SQLITE_CREATE_VIEW +** SQLITE_DELETE +** SQLITE_DROP_INDEX +** SQLITE_DROP_TABLE +** SQLITE_DROP_TEMP_INDEX +** SQLITE_DROP_TEMP_TABLE +** SQLITE_DROP_TEMP_TRIGGER +** SQLITE_DROP_TEMP_VIEW +** SQLITE_DROP_TRIGGER +** SQLITE_DROP_VIEW +** SQLITE_INSERT +** SQLITE_PRAGMA +** SQLITE_READ +** SQLITE_SELECT +** SQLITE_TRANSACTION +** SQLITE_UPDATE +** +** The third and fourth arguments to the auth function are the name of +** the table and the column that are being accessed. The auth function +** should return either SQLITE_OK, SQLITE_DENY, or SQLITE_IGNORE. If +** SQLITE_OK is returned, it means that access is allowed. SQLITE_DENY +** means that the SQL statement will never-run - the sqlite3_exec() call +** will return with an error. SQLITE_IGNORE means that the SQL statement +** should run but attempts to read the specified column will return NULL +** and attempts to write the column will be ignored. +** +** Setting the auth function to NULL disables this hook. The default +** setting of the auth function is NULL. +*/ +SQLITE_API int sqlite3_set_authorizer( + sqlite3 *db, + int (*xAuth)(void*,int,const char*,const char*,const char*,const char*), + void *pArg +){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(db->mutex); + db->xAuth = (sqlite3_xauth)xAuth; + db->pAuthArg = pArg; + if( db->xAuth ) sqlite3ExpirePreparedStatements(db, 1); + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; +} + +/* +** Write an error message into pParse->zErrMsg that explains that the +** user-supplied authorization function returned an illegal value. +*/ +static void sqliteAuthBadReturnCode(Parse *pParse){ + sqlite3ErrorMsg(pParse, "authorizer malfunction"); + pParse->rc = SQLITE_ERROR; +} + +/* +** Invoke the authorization callback for permission to read column zCol from +** table zTab in database zDb. This function assumes that an authorization +** callback has been registered (i.e. that sqlite3.xAuth is not NULL). +** +** If SQLITE_IGNORE is returned and pExpr is not NULL, then pExpr is changed +** to an SQL NULL expression. Otherwise, if pExpr is NULL, then SQLITE_IGNORE +** is treated as SQLITE_DENY. In this case an error is left in pParse. +*/ +SQLITE_PRIVATE int sqlite3AuthReadCol( + Parse *pParse, /* The parser context */ + const char *zTab, /* Table name */ + const char *zCol, /* Column name */ + int iDb /* Index of containing database. */ +){ + sqlite3 *db = pParse->db; /* Database handle */ + char *zDb = db->aDb[iDb].zDbSName; /* Schema name of attached database */ + int rc; /* Auth callback return code */ + + if( db->init.busy ) return SQLITE_OK; + rc = db->xAuth(db->pAuthArg, SQLITE_READ, zTab,zCol,zDb,pParse->zAuthContext); + if( rc==SQLITE_DENY ){ + char *z = sqlite3_mprintf("%s.%s", zTab, zCol); + if( db->nDb>2 || iDb!=0 ) z = sqlite3_mprintf("%s.%z", zDb, z); + sqlite3ErrorMsg(pParse, "access to %z is prohibited", z); + pParse->rc = SQLITE_AUTH; + }else if( rc!=SQLITE_IGNORE && rc!=SQLITE_OK ){ + sqliteAuthBadReturnCode(pParse); + } + return rc; +} + +/* +** The pExpr should be a TK_COLUMN expression. The table referred to +** is in pTabList or else it is the NEW or OLD table of a trigger. +** Check to see if it is OK to read this particular column. +** +** If the auth function returns SQLITE_IGNORE, change the TK_COLUMN +** instruction into a TK_NULL. If the auth function returns SQLITE_DENY, +** then generate an error. +*/ +SQLITE_PRIVATE void sqlite3AuthRead( + Parse *pParse, /* The parser context */ + Expr *pExpr, /* The expression to check authorization on */ + Schema *pSchema, /* The schema of the expression */ + SrcList *pTabList /* All table that pExpr might refer to */ +){ + Table *pTab = 0; /* The table being read */ + const char *zCol; /* Name of the column of the table */ + int iSrc; /* Index in pTabList->a[] of table being read */ + int iDb; /* The index of the database the expression refers to */ + int iCol; /* Index of column in table */ + + assert( pExpr->op==TK_COLUMN || pExpr->op==TK_TRIGGER ); + assert( !IN_RENAME_OBJECT ); + assert( pParse->db->xAuth!=0 ); + iDb = sqlite3SchemaToIndex(pParse->db, pSchema); + if( iDb<0 ){ + /* An attempt to read a column out of a subquery or other + ** temporary table. */ + return; + } + + if( pExpr->op==TK_TRIGGER ){ + pTab = pParse->pTriggerTab; + }else{ + assert( pTabList ); + for(iSrc=0; iSrcnSrc; iSrc++){ + if( pExpr->iTable==pTabList->a[iSrc].iCursor ){ + pTab = pTabList->a[iSrc].pSTab; + break; + } + } + } + iCol = pExpr->iColumn; + if( pTab==0 ) return; + + if( iCol>=0 ){ + assert( iColnCol ); + zCol = pTab->aCol[iCol].zCnName; + }else if( pTab->iPKey>=0 ){ + assert( pTab->iPKeynCol ); + zCol = pTab->aCol[pTab->iPKey].zCnName; + }else{ + zCol = "ROWID"; + } + assert( iDb>=0 && iDbdb->nDb ); + if( SQLITE_IGNORE==sqlite3AuthReadCol(pParse, pTab->zName, zCol, iDb) ){ + pExpr->op = TK_NULL; + } +} + +/* +** Do an authorization check using the code and arguments given. Return +** either SQLITE_OK (zero) or SQLITE_IGNORE or SQLITE_DENY. If SQLITE_DENY +** is returned, then the error count and error message in pParse are +** modified appropriately. +*/ +SQLITE_PRIVATE int sqlite3AuthCheck( + Parse *pParse, + int code, + const char *zArg1, + const char *zArg2, + const char *zArg3 +){ + sqlite3 *db = pParse->db; + int rc; + + /* Don't do any authorization checks if the database is initializing + ** or if the parser is being invoked from within sqlite3_declare_vtab. + */ + assert( !IN_RENAME_OBJECT || db->xAuth==0 ); + if( db->xAuth==0 || db->init.busy || IN_SPECIAL_PARSE ){ + return SQLITE_OK; + } + + /* EVIDENCE-OF: R-43249-19882 The third through sixth parameters to the + ** callback are either NULL pointers or zero-terminated strings that + ** contain additional details about the action to be authorized. + ** + ** The following testcase() macros show that any of the 3rd through 6th + ** parameters can be either NULL or a string. */ + testcase( zArg1==0 ); + testcase( zArg2==0 ); + testcase( zArg3==0 ); + testcase( pParse->zAuthContext==0 ); + + rc = db->xAuth(db->pAuthArg,code,zArg1,zArg2,zArg3,pParse->zAuthContext); + if( rc==SQLITE_DENY ){ + sqlite3ErrorMsg(pParse, "not authorized"); + pParse->rc = SQLITE_AUTH; + }else if( rc!=SQLITE_OK && rc!=SQLITE_IGNORE ){ + rc = SQLITE_DENY; + sqliteAuthBadReturnCode(pParse); + } + return rc; +} + +/* +** Push an authorization context. After this routine is called, the +** zArg3 argument to authorization callbacks will be zContext until +** popped. Or if pParse==0, this routine is a no-op. +*/ +SQLITE_PRIVATE void sqlite3AuthContextPush( + Parse *pParse, + AuthContext *pContext, + const char *zContext +){ + assert( pParse ); + pContext->pParse = pParse; + pContext->zAuthContext = pParse->zAuthContext; + pParse->zAuthContext = zContext; +} + +/* +** Pop an authorization context that was previously pushed +** by sqlite3AuthContextPush +*/ +SQLITE_PRIVATE void sqlite3AuthContextPop(AuthContext *pContext){ + if( pContext->pParse ){ + pContext->pParse->zAuthContext = pContext->zAuthContext; + pContext->pParse = 0; + } +} + +#endif /* SQLITE_OMIT_AUTHORIZATION */ + +/************** End of auth.c ************************************************/ +/************** Begin file build.c *******************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains C code routines that are called by the SQLite parser +** when syntax rules are reduced. The routines in this file handle the +** following kinds of SQL syntax: +** +** CREATE TABLE +** DROP TABLE +** CREATE INDEX +** DROP INDEX +** creating ID lists +** BEGIN TRANSACTION +** COMMIT +** ROLLBACK +*/ +/* #include "sqliteInt.h" */ + +#ifndef SQLITE_OMIT_SHARED_CACHE +/* +** The TableLock structure is only used by the sqlite3TableLock() and +** codeTableLocks() functions. +*/ +struct TableLock { + int iDb; /* The database containing the table to be locked */ + Pgno iTab; /* The root page of the table to be locked */ + u8 isWriteLock; /* True for write lock. False for a read lock */ + const char *zLockName; /* Name of the table */ +}; + +/* +** Record the fact that we want to lock a table at run-time. +** +** The table to be locked has root page iTab and is found in database iDb. +** A read or a write lock can be taken depending on isWritelock. +** +** This routine just records the fact that the lock is desired. The +** code to make the lock occur is generated by a later call to +** codeTableLocks() which occurs during sqlite3FinishCoding(). +*/ +static SQLITE_NOINLINE void lockTable( + Parse *pParse, /* Parsing context */ + int iDb, /* Index of the database containing the table to lock */ + Pgno iTab, /* Root page number of the table to be locked */ + u8 isWriteLock, /* True for a write lock */ + const char *zName /* Name of the table to be locked */ +){ + Parse *pToplevel; + int i; + int nBytes; + TableLock *p; + assert( iDb>=0 ); + + pToplevel = sqlite3ParseToplevel(pParse); + for(i=0; inTableLock; i++){ + p = &pToplevel->aTableLock[i]; + if( p->iDb==iDb && p->iTab==iTab ){ + p->isWriteLock = (p->isWriteLock || isWriteLock); + return; + } + } + + assert( pToplevel->nTableLock < 0x7fff0000 ); + nBytes = sizeof(TableLock) * (pToplevel->nTableLock+1); + pToplevel->aTableLock = + sqlite3DbReallocOrFree(pToplevel->db, pToplevel->aTableLock, nBytes); + if( pToplevel->aTableLock ){ + p = &pToplevel->aTableLock[pToplevel->nTableLock++]; + p->iDb = iDb; + p->iTab = iTab; + p->isWriteLock = isWriteLock; + p->zLockName = zName; + }else{ + pToplevel->nTableLock = 0; + sqlite3OomFault(pToplevel->db); + } +} +SQLITE_PRIVATE void sqlite3TableLock( + Parse *pParse, /* Parsing context */ + int iDb, /* Index of the database containing the table to lock */ + Pgno iTab, /* Root page number of the table to be locked */ + u8 isWriteLock, /* True for a write lock */ + const char *zName /* Name of the table to be locked */ +){ + if( iDb==1 ) return; + if( !sqlite3BtreeSharable(pParse->db->aDb[iDb].pBt) ) return; + lockTable(pParse, iDb, iTab, isWriteLock, zName); +} + +/* +** Code an OP_TableLock instruction for each table locked by the +** statement (configured by calls to sqlite3TableLock()). +*/ +static void codeTableLocks(Parse *pParse){ + int i; + Vdbe *pVdbe = pParse->pVdbe; + assert( pVdbe!=0 ); + + for(i=0; inTableLock; i++){ + TableLock *p = &pParse->aTableLock[i]; + int p1 = p->iDb; + sqlite3VdbeAddOp4(pVdbe, OP_TableLock, p1, p->iTab, p->isWriteLock, + p->zLockName, P4_STATIC); + } +} +#else + #define codeTableLocks(x) +#endif + +/* +** Return TRUE if the given yDbMask object is empty - if it contains no +** 1 bits. This routine is used by the DbMaskAllZero() and DbMaskNotZero() +** macros when SQLITE_MAX_ATTACHED is greater than 30. +*/ +#if SQLITE_MAX_ATTACHED>30 +SQLITE_PRIVATE int sqlite3DbMaskAllZero(yDbMask m){ + int i; + for(i=0; ipToplevel==0 ); + db = pParse->db; + assert( db->pParse==pParse ); + if( pParse->nested ) return; + if( pParse->nErr ){ + if( db->mallocFailed ) pParse->rc = SQLITE_NOMEM; + return; + } + assert( db->mallocFailed==0 ); + + /* Begin by generating some termination code at the end of the + ** vdbe program + */ + v = pParse->pVdbe; + if( v==0 ){ + if( db->init.busy ){ + pParse->rc = SQLITE_DONE; + return; + } + v = sqlite3GetVdbe(pParse); + if( v==0 ) pParse->rc = SQLITE_ERROR; + } + assert( !pParse->isMultiWrite + || sqlite3VdbeAssertMayAbort(v, pParse->mayAbort)); + if( v ){ + if( pParse->bReturning ){ + Returning *pReturning; + int addrRewind; + int reg; + + assert( !pParse->isCreate ); + pReturning = pParse->u1.d.pReturning; + if( pReturning->nRetCol ){ + sqlite3VdbeAddOp0(v, OP_FkCheck); + addrRewind = + sqlite3VdbeAddOp1(v, OP_Rewind, pReturning->iRetCur); + VdbeCoverage(v); + reg = pReturning->iRetReg; + for(i=0; inRetCol; i++){ + sqlite3VdbeAddOp3(v, OP_Column, pReturning->iRetCur, i, reg+i); + } + sqlite3VdbeAddOp2(v, OP_ResultRow, reg, i); + sqlite3VdbeAddOp2(v, OP_Next, pReturning->iRetCur, addrRewind+1); + VdbeCoverage(v); + sqlite3VdbeJumpHere(v, addrRewind); + } + } + sqlite3VdbeAddOp0(v, OP_Halt); + + /* The cookie mask contains one bit for each database file open. + ** (Bit 0 is for main, bit 1 is for temp, and so forth.) Bits are + ** set for each database that is used. Generate code to start a + ** transaction on each used database and to verify the schema cookie + ** on each used database. + */ + assert( pParse->nErr>0 || sqlite3VdbeGetOp(v, 0)->opcode==OP_Init ); + sqlite3VdbeJumpHere(v, 0); + assert( db->nDb>0 ); + iDb = 0; + do{ + Schema *pSchema; + if( DbMaskTest(pParse->cookieMask, iDb)==0 ) continue; + sqlite3VdbeUsesBtree(v, iDb); + pSchema = db->aDb[iDb].pSchema; + sqlite3VdbeAddOp4Int(v, + OP_Transaction, /* Opcode */ + iDb, /* P1 */ + DbMaskTest(pParse->writeMask,iDb), /* P2 */ + pSchema->schema_cookie, /* P3 */ + pSchema->iGeneration /* P4 */ + ); + if( db->init.busy==0 ) sqlite3VdbeChangeP5(v, 1); + VdbeComment((v, + "usesStmtJournal=%d", pParse->mayAbort && pParse->isMultiWrite)); + }while( ++iDbnDb ); +#ifndef SQLITE_OMIT_VIRTUALTABLE + for(i=0; inVtabLock; i++){ + char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]); + sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB); + } + pParse->nVtabLock = 0; +#endif + +#ifndef SQLITE_OMIT_SHARED_CACHE + /* Once all the cookies have been verified and transactions opened, + ** obtain the required table-locks. This is a no-op unless the + ** shared-cache feature is enabled. + */ + if( pParse->nTableLock ) codeTableLocks(pParse); +#endif + + /* Initialize any AUTOINCREMENT data structures required. + */ + if( pParse->pAinc ) sqlite3AutoincrementBegin(pParse); + + /* Code constant expressions that were factored out of inner loops. + */ + if( pParse->pConstExpr ){ + ExprList *pEL = pParse->pConstExpr; + pParse->okConstFactor = 0; + for(i=0; inExpr; i++){ + assert( pEL->a[i].u.iConstExprReg>0 ); + sqlite3ExprCode(pParse, pEL->a[i].pExpr, pEL->a[i].u.iConstExprReg); + } + } + + if( pParse->bReturning ){ + Returning *pRet; + assert( !pParse->isCreate ); + pRet = pParse->u1.d.pReturning; + if( pRet->nRetCol ){ + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pRet->iRetCur, pRet->nRetCol); + } + } + + /* Finally, jump back to the beginning of the executable code. */ + sqlite3VdbeGoto(v, 1); + } + + /* Get the VDBE program ready for execution + */ + assert( v!=0 || pParse->nErr ); + assert( db->mallocFailed==0 || pParse->nErr ); + if( pParse->nErr==0 ){ + /* A minimum of one cursor is required if autoincrement is used + * See ticket [a696379c1f08866] */ + assert( pParse->pAinc==0 || pParse->nTab>0 ); + sqlite3VdbeMakeReady(v, pParse); + pParse->rc = SQLITE_DONE; + }else{ + pParse->rc = SQLITE_ERROR; + } +} + +/* +** Run the parser and code generator recursively in order to generate +** code for the SQL statement given onto the end of the pParse context +** currently under construction. Notes: +** +** * The final OP_Halt is not appended and other initialization +** and finalization steps are omitted because those are handling by the +** outermost parser. +** +** * Built-in SQL functions always take precedence over application-defined +** SQL functions. In other words, it is not possible to override a +** built-in function. +*/ +SQLITE_PRIVATE void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){ + va_list ap; + char *zSql; + sqlite3 *db = pParse->db; + u32 savedDbFlags = db->mDbFlags; + char saveBuf[PARSE_TAIL_SZ]; + + if( pParse->nErr ) return; + if( pParse->eParseMode ) return; + assert( pParse->nested<10 ); /* Nesting should only be of limited depth */ + va_start(ap, zFormat); + zSql = sqlite3VMPrintf(db, zFormat, ap); + va_end(ap); + if( zSql==0 ){ + /* This can result either from an OOM or because the formatted string + ** exceeds SQLITE_LIMIT_LENGTH. In the latter case, we need to set + ** an error */ + if( !db->mallocFailed ) pParse->rc = SQLITE_TOOBIG; + pParse->nErr++; + return; + } + pParse->nested++; + memcpy(saveBuf, PARSE_TAIL(pParse), PARSE_TAIL_SZ); + memset(PARSE_TAIL(pParse), 0, PARSE_TAIL_SZ); + db->mDbFlags |= DBFLAG_PreferBuiltin; + sqlite3RunParser(pParse, zSql); + db->mDbFlags = savedDbFlags; + sqlite3DbFree(db, zSql); + memcpy(PARSE_TAIL(pParse), saveBuf, PARSE_TAIL_SZ); + pParse->nested--; +} + +/* +** Locate the in-memory structure that describes a particular database +** table given the name of that table and (optionally) the name of the +** database containing the table. Return NULL if not found. +** +** If zDatabase is 0, all databases are searched for the table and the +** first matching table is returned. (No checking for duplicate table +** names is done.) The search order is TEMP first, then MAIN, then any +** auxiliary databases added using the ATTACH command. +** +** See also sqlite3LocateTable(). +*/ +SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDatabase){ + Table *p = 0; + int i; + + /* All mutexes are required for schema access. Make sure we hold them. */ + assert( zDatabase!=0 || sqlite3BtreeHoldsAllMutexes(db) ); + if( zDatabase ){ + for(i=0; inDb; i++){ + if( sqlite3StrICmp(zDatabase, db->aDb[i].zDbSName)==0 ) break; + } + if( i>=db->nDb ){ + /* No match against the official names. But always match "main" + ** to schema 0 as a legacy fallback. */ + if( sqlite3StrICmp(zDatabase,"main")==0 ){ + i = 0; + }else{ + return 0; + } + } + p = sqlite3HashFind(&db->aDb[i].pSchema->tblHash, zName); + if( p==0 && sqlite3StrNICmp(zName, "sqlite_", 7)==0 ){ + if( i==1 ){ + if( sqlite3StrICmp(zName+7, &PREFERRED_TEMP_SCHEMA_TABLE[7])==0 + || sqlite3StrICmp(zName+7, &PREFERRED_SCHEMA_TABLE[7])==0 + || sqlite3StrICmp(zName+7, &LEGACY_SCHEMA_TABLE[7])==0 + ){ + p = sqlite3HashFind(&db->aDb[1].pSchema->tblHash, + LEGACY_TEMP_SCHEMA_TABLE); + } + }else{ + if( sqlite3StrICmp(zName+7, &PREFERRED_SCHEMA_TABLE[7])==0 ){ + p = sqlite3HashFind(&db->aDb[i].pSchema->tblHash, + LEGACY_SCHEMA_TABLE); + } + } + } + }else{ + /* Match against TEMP first */ + p = sqlite3HashFind(&db->aDb[1].pSchema->tblHash, zName); + if( p ) return p; + /* The main database is second */ + p = sqlite3HashFind(&db->aDb[0].pSchema->tblHash, zName); + if( p ) return p; + /* Attached databases are in order of attachment */ + for(i=2; inDb; i++){ + assert( sqlite3SchemaMutexHeld(db, i, 0) ); + p = sqlite3HashFind(&db->aDb[i].pSchema->tblHash, zName); + if( p ) break; + } + if( p==0 && sqlite3StrNICmp(zName, "sqlite_", 7)==0 ){ + if( sqlite3StrICmp(zName+7, &PREFERRED_SCHEMA_TABLE[7])==0 ){ + p = sqlite3HashFind(&db->aDb[0].pSchema->tblHash, LEGACY_SCHEMA_TABLE); + }else if( sqlite3StrICmp(zName+7, &PREFERRED_TEMP_SCHEMA_TABLE[7])==0 ){ + p = sqlite3HashFind(&db->aDb[1].pSchema->tblHash, + LEGACY_TEMP_SCHEMA_TABLE); + } + } + } + return p; +} + +/* +** Locate the in-memory structure that describes a particular database +** table given the name of that table and (optionally) the name of the +** database containing the table. Return NULL if not found. Also leave an +** error message in pParse->zErrMsg. +** +** The difference between this routine and sqlite3FindTable() is that this +** routine leaves an error message in pParse->zErrMsg where +** sqlite3FindTable() does not. +*/ +SQLITE_PRIVATE Table *sqlite3LocateTable( + Parse *pParse, /* context in which to report errors */ + u32 flags, /* LOCATE_VIEW or LOCATE_NOERR */ + const char *zName, /* Name of the table we are looking for */ + const char *zDbase /* Name of the database. Might be NULL */ +){ + Table *p; + sqlite3 *db = pParse->db; + + /* Read the database schema. If an error occurs, leave an error message + ** and code in pParse and return NULL. */ + if( (db->mDbFlags & DBFLAG_SchemaKnownOk)==0 + && SQLITE_OK!=sqlite3ReadSchema(pParse) + ){ + return 0; + } + + p = sqlite3FindTable(db, zName, zDbase); + if( p==0 ){ +#ifndef SQLITE_OMIT_VIRTUALTABLE + /* If zName is the not the name of a table in the schema created using + ** CREATE, then check to see if it is the name of an virtual table that + ** can be an eponymous virtual table. */ + if( (pParse->prepFlags & SQLITE_PREPARE_NO_VTAB)==0 && db->init.busy==0 ){ + Module *pMod = (Module*)sqlite3HashFind(&db->aModule, zName); + if( pMod==0 && sqlite3_strnicmp(zName, "pragma_", 7)==0 ){ + pMod = sqlite3PragmaVtabRegister(db, zName); + } +#ifndef SQLITE_OMIT_JSON + if( pMod==0 && sqlite3_strnicmp(zName, "json", 4)==0 ){ + pMod = sqlite3JsonVtabRegister(db, zName); + } +#endif +#ifdef SQLITE_ENABLE_CARRAY + if( pMod==0 && sqlite3_stricmp(zName, "carray")==0 ){ + pMod = sqlite3CarrayRegister(db); + } +#endif + if( pMod && sqlite3VtabEponymousTableInit(pParse, pMod) ){ + testcase( pMod->pEpoTab==0 ); + return pMod->pEpoTab; + } + } +#endif + if( flags & LOCATE_NOERR ) return 0; + pParse->checkSchema = 1; + }else if( IsVirtual(p) && (pParse->prepFlags & SQLITE_PREPARE_NO_VTAB)!=0 ){ + p = 0; + } + + if( p==0 ){ + const char *zMsg = flags & LOCATE_VIEW ? "no such view" : "no such table"; + if( zDbase ){ + sqlite3ErrorMsg(pParse, "%s: %s.%s", zMsg, zDbase, zName); + }else{ + sqlite3ErrorMsg(pParse, "%s: %s", zMsg, zName); + } + }else{ + assert( HasRowid(p) || p->iPKey<0 ); + } + + return p; +} + +/* +** Locate the table identified by *p. +** +** This is a wrapper around sqlite3LocateTable(). The difference between +** sqlite3LocateTable() and this function is that this function restricts +** the search to schema (p->pSchema) if it is not NULL. p->pSchema may be +** non-NULL if it is part of a view or trigger program definition. See +** sqlite3FixSrcList() for details. +*/ +SQLITE_PRIVATE Table *sqlite3LocateTableItem( + Parse *pParse, + u32 flags, + SrcItem *p +){ + const char *zDb; + if( p->fg.fixedSchema ){ + int iDb = sqlite3SchemaToIndex(pParse->db, p->u4.pSchema); + zDb = pParse->db->aDb[iDb].zDbSName; + }else{ + assert( !p->fg.isSubquery ); + zDb = p->u4.zDatabase; + } + return sqlite3LocateTable(pParse, flags, p->zName, zDb); +} + +/* +** Return the preferred table name for system tables. Translate legacy +** names into the new preferred names, as appropriate. +*/ +SQLITE_PRIVATE const char *sqlite3PreferredTableName(const char *zName){ + if( sqlite3StrNICmp(zName, "sqlite_", 7)==0 ){ + if( sqlite3StrICmp(zName+7, &LEGACY_SCHEMA_TABLE[7])==0 ){ + return PREFERRED_SCHEMA_TABLE; + } + if( sqlite3StrICmp(zName+7, &LEGACY_TEMP_SCHEMA_TABLE[7])==0 ){ + return PREFERRED_TEMP_SCHEMA_TABLE; + } + } + return zName; +} + +/* +** Locate the in-memory structure that describes +** a particular index given the name of that index +** and the name of the database that contains the index. +** Return NULL if not found. +** +** If zDatabase is 0, all databases are searched for the +** table and the first matching index is returned. (No checking +** for duplicate index names is done.) The search order is +** TEMP first, then MAIN, then any auxiliary databases added +** using the ATTACH command. +*/ +SQLITE_PRIVATE Index *sqlite3FindIndex(sqlite3 *db, const char *zName, const char *zDb){ + Index *p = 0; + int i; + /* All mutexes are required for schema access. Make sure we hold them. */ + assert( zDb!=0 || sqlite3BtreeHoldsAllMutexes(db) ); + for(i=OMIT_TEMPDB; inDb; i++){ + int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */ + Schema *pSchema = db->aDb[j].pSchema; + assert( pSchema ); + if( zDb && sqlite3DbIsNamed(db, j, zDb)==0 ) continue; + assert( sqlite3SchemaMutexHeld(db, j, 0) ); + p = sqlite3HashFind(&pSchema->idxHash, zName); + if( p ) break; + } + return p; +} + +/* +** Reclaim the memory used by an index +*/ +SQLITE_PRIVATE void sqlite3FreeIndex(sqlite3 *db, Index *p){ +#ifndef SQLITE_OMIT_ANALYZE + sqlite3DeleteIndexSamples(db, p); +#endif + sqlite3ExprDelete(db, p->pPartIdxWhere); + sqlite3ExprListDelete(db, p->aColExpr); + sqlite3DbFree(db, p->zColAff); + if( p->isResized ) sqlite3DbFree(db, (void *)p->azColl); +#ifdef SQLITE_ENABLE_STAT4 + sqlite3_free(p->aiRowEst); +#endif + sqlite3DbFree(db, p); +} + +/* +** For the index called zIdxName which is found in the database iDb, +** unlike that index from its Table then remove the index from +** the index hash table and free all memory structures associated +** with the index. +*/ +SQLITE_PRIVATE void sqlite3UnlinkAndDeleteIndex(sqlite3 *db, int iDb, const char *zIdxName){ + Index *pIndex; + Hash *pHash; + + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + pHash = &db->aDb[iDb].pSchema->idxHash; + pIndex = sqlite3HashInsert(pHash, zIdxName, 0); + if( ALWAYS(pIndex) ){ + if( pIndex->pTable->pIndex==pIndex ){ + pIndex->pTable->pIndex = pIndex->pNext; + }else{ + Index *p; + /* Justification of ALWAYS(); The index must be on the list of + ** indices. */ + p = pIndex->pTable->pIndex; + while( ALWAYS(p) && p->pNext!=pIndex ){ p = p->pNext; } + if( ALWAYS(p && p->pNext==pIndex) ){ + p->pNext = pIndex->pNext; + } + } + sqlite3FreeIndex(db, pIndex); + } + db->mDbFlags |= DBFLAG_SchemaChange; +} + +/* +** Look through the list of open database files in db->aDb[] and if +** any have been closed, remove them from the list. Reallocate the +** db->aDb[] structure to a smaller size, if possible. +** +** Entry 0 (the "main" database) and entry 1 (the "temp" database) +** are never candidates for being collapsed. +*/ +SQLITE_PRIVATE void sqlite3CollapseDatabaseArray(sqlite3 *db){ + int i, j; + for(i=j=2; inDb; i++){ + struct Db *pDb = &db->aDb[i]; + if( pDb->pBt==0 ){ + sqlite3DbFree(db, pDb->zDbSName); + pDb->zDbSName = 0; + continue; + } + if( jaDb[j] = db->aDb[i]; + } + j++; + } + db->nDb = j; + if( db->nDb<=2 && db->aDb!=db->aDbStatic ){ + memcpy(db->aDbStatic, db->aDb, 2*sizeof(db->aDb[0])); + sqlite3DbFree(db, db->aDb); + db->aDb = db->aDbStatic; + } +} + +/* +** Reset the schema for the database at index iDb. Also reset the +** TEMP schema. The reset is deferred if db->nSchemaLock is not zero. +** Deferred resets may be run by calling with iDb<0. +*/ +SQLITE_PRIVATE void sqlite3ResetOneSchema(sqlite3 *db, int iDb){ + int i; + assert( iDbnDb ); + + if( iDb>=0 ){ + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + DbSetProperty(db, iDb, DB_ResetWanted); + DbSetProperty(db, 1, DB_ResetWanted); + db->mDbFlags &= ~DBFLAG_SchemaKnownOk; + } + + if( db->nSchemaLock==0 ){ + for(i=0; inDb; i++){ + if( DbHasProperty(db, i, DB_ResetWanted) ){ + sqlite3SchemaClear(db->aDb[i].pSchema); + } + } + } +} + +/* +** Erase all schema information from all attached databases (including +** "main" and "temp") for a single database connection. +*/ +SQLITE_PRIVATE void sqlite3ResetAllSchemasOfConnection(sqlite3 *db){ + int i; + sqlite3BtreeEnterAll(db); + for(i=0; inDb; i++){ + Db *pDb = &db->aDb[i]; + if( pDb->pSchema ){ + if( db->nSchemaLock==0 ){ + sqlite3SchemaClear(pDb->pSchema); + }else{ + DbSetProperty(db, i, DB_ResetWanted); + } + } + } + db->mDbFlags &= ~(DBFLAG_SchemaChange|DBFLAG_SchemaKnownOk); + sqlite3VtabUnlockList(db); + sqlite3BtreeLeaveAll(db); + if( db->nSchemaLock==0 ){ + sqlite3CollapseDatabaseArray(db); + } +} + +/* +** This routine is called when a commit occurs. +*/ +SQLITE_PRIVATE void sqlite3CommitInternalChanges(sqlite3 *db){ + db->mDbFlags &= ~DBFLAG_SchemaChange; +} + +/* +** Set the expression associated with a column. This is usually +** the DEFAULT value, but might also be the expression that computes +** the value for a generated column. +*/ +SQLITE_PRIVATE void sqlite3ColumnSetExpr( + Parse *pParse, /* Parsing context */ + Table *pTab, /* The table containing the column */ + Column *pCol, /* The column to receive the new DEFAULT expression */ + Expr *pExpr /* The new default expression */ +){ + ExprList *pList; + assert( IsOrdinaryTable(pTab) ); + pList = pTab->u.tab.pDfltList; + if( pCol->iDflt==0 + || NEVER(pList==0) + || NEVER(pList->nExpriDflt) + ){ + pCol->iDflt = pList==0 ? 1 : pList->nExpr+1; + pTab->u.tab.pDfltList = sqlite3ExprListAppend(pParse, pList, pExpr); + }else{ + sqlite3ExprDelete(pParse->db, pList->a[pCol->iDflt-1].pExpr); + pList->a[pCol->iDflt-1].pExpr = pExpr; + } +} + +/* +** Return the expression associated with a column. The expression might be +** the DEFAULT clause or the AS clause of a generated column. +** Return NULL if the column has no associated expression. +*/ +SQLITE_PRIVATE Expr *sqlite3ColumnExpr(Table *pTab, Column *pCol){ + if( pCol->iDflt==0 ) return 0; + if( !IsOrdinaryTable(pTab) ) return 0; + if( NEVER(pTab->u.tab.pDfltList==0) ) return 0; + if( NEVER(pTab->u.tab.pDfltList->nExpriDflt) ) return 0; + return pTab->u.tab.pDfltList->a[pCol->iDflt-1].pExpr; +} + +/* +** Set the collating sequence name for a column. +*/ +SQLITE_PRIVATE void sqlite3ColumnSetColl( + sqlite3 *db, + Column *pCol, + const char *zColl +){ + i64 nColl; + i64 n; + char *zNew; + assert( zColl!=0 ); + n = sqlite3Strlen30(pCol->zCnName) + 1; + if( pCol->colFlags & COLFLAG_HASTYPE ){ + n += sqlite3Strlen30(pCol->zCnName+n) + 1; + } + nColl = sqlite3Strlen30(zColl) + 1; + zNew = sqlite3DbRealloc(db, pCol->zCnName, nColl+n); + if( zNew ){ + pCol->zCnName = zNew; + memcpy(pCol->zCnName + n, zColl, nColl); + pCol->colFlags |= COLFLAG_HASCOLL; + } +} + +/* +** Return the collating sequence name for a column +*/ +SQLITE_PRIVATE const char *sqlite3ColumnColl(Column *pCol){ + const char *z; + if( (pCol->colFlags & COLFLAG_HASCOLL)==0 ) return 0; + z = pCol->zCnName; + while( *z ){ z++; } + if( pCol->colFlags & COLFLAG_HASTYPE ){ + do{ z++; }while( *z ); + } + return z+1; +} + +/* +** Delete memory allocated for the column names of a table or view (the +** Table.aCol[] array). +*/ +SQLITE_PRIVATE void sqlite3DeleteColumnNames(sqlite3 *db, Table *pTable){ + int i; + Column *pCol; + assert( pTable!=0 ); + assert( db!=0 ); + if( (pCol = pTable->aCol)!=0 ){ + for(i=0; inCol; i++, pCol++){ + assert( pCol->zCnName==0 || pCol->hName==sqlite3StrIHash(pCol->zCnName) ); + sqlite3DbFree(db, pCol->zCnName); + } + sqlite3DbNNFreeNN(db, pTable->aCol); + if( IsOrdinaryTable(pTable) ){ + sqlite3ExprListDelete(db, pTable->u.tab.pDfltList); + } + if( db->pnBytesFreed==0 ){ + pTable->aCol = 0; + pTable->nCol = 0; + if( IsOrdinaryTable(pTable) ){ + pTable->u.tab.pDfltList = 0; + } + } + } +} + +/* +** Remove the memory data structures associated with the given +** Table. No changes are made to disk by this routine. +** +** This routine just deletes the data structure. It does not unlink +** the table data structure from the hash table. But it does destroy +** memory structures of the indices and foreign keys associated with +** the table. +** +** The db parameter is optional. It is needed if the Table object +** contains lookaside memory. (Table objects in the schema do not use +** lookaside memory, but some ephemeral Table objects do.) Or the +** db parameter can be used with db->pnBytesFreed to measure the memory +** used by the Table object. +*/ +static void SQLITE_NOINLINE deleteTable(sqlite3 *db, Table *pTable){ + Index *pIndex, *pNext; + +#ifdef SQLITE_DEBUG + /* Record the number of outstanding lookaside allocations in schema Tables + ** prior to doing any free() operations. Since schema Tables do not use + ** lookaside, this number should not change. + ** + ** If malloc has already failed, it may be that it failed while allocating + ** a Table object that was going to be marked ephemeral. So do not check + ** that no lookaside memory is used in this case either. */ + int nLookaside = 0; + assert( db!=0 ); + if( !db->mallocFailed && (pTable->tabFlags & TF_Ephemeral)==0 ){ + nLookaside = sqlite3LookasideUsed(db, 0); + } +#endif + + /* Delete all indices associated with this table. */ + for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){ + pNext = pIndex->pNext; + assert( pIndex->pSchema==pTable->pSchema + || (IsVirtual(pTable) && pIndex->idxType!=SQLITE_IDXTYPE_APPDEF) ); + if( db->pnBytesFreed==0 && !IsVirtual(pTable) ){ + char *zName = pIndex->zName; + TESTONLY ( Index *pOld = ) sqlite3HashInsert( + &pIndex->pSchema->idxHash, zName, 0 + ); + assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) ); + assert( pOld==pIndex || pOld==0 ); + } + sqlite3FreeIndex(db, pIndex); + } + + if( IsOrdinaryTable(pTable) ){ + sqlite3FkDelete(db, pTable); + } +#ifndef SQLITE_OMIT_VIRTUALTABLE + else if( IsVirtual(pTable) ){ + sqlite3VtabClear(db, pTable); + } +#endif + else{ + assert( IsView(pTable) ); + sqlite3SelectDelete(db, pTable->u.view.pSelect); + } + + /* Delete the Table structure itself. + */ + sqlite3DeleteColumnNames(db, pTable); + sqlite3DbFree(db, pTable->zName); + sqlite3DbFree(db, pTable->zColAff); + sqlite3ExprListDelete(db, pTable->pCheck); + sqlite3DbFree(db, pTable); + + /* Verify that no lookaside memory was used by schema tables */ + assert( nLookaside==0 || nLookaside==sqlite3LookasideUsed(db,0) ); +} +SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3 *db, Table *pTable){ + /* Do not delete the table until the reference count reaches zero. */ + assert( db!=0 ); + if( !pTable ) return; + if( db->pnBytesFreed==0 && (--pTable->nTabRef)>0 ) return; + deleteTable(db, pTable); +} +SQLITE_PRIVATE void sqlite3DeleteTableGeneric(sqlite3 *db, void *pTable){ + sqlite3DeleteTable(db, (Table*)pTable); +} + + +/* +** Unlink the given table from the hash tables and the delete the +** table structure with all its indices and foreign keys. +*/ +SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTable(sqlite3 *db, int iDb, const char *zTabName){ + Table *p; + Db *pDb; + + assert( db!=0 ); + assert( iDb>=0 && iDbnDb ); + assert( zTabName ); + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + testcase( zTabName[0]==0 ); /* Zero-length table names are allowed */ + pDb = &db->aDb[iDb]; + p = sqlite3HashInsert(&pDb->pSchema->tblHash, zTabName, 0); + sqlite3DeleteTable(db, p); + db->mDbFlags |= DBFLAG_SchemaChange; +} + +/* +** Given a token, return a string that consists of the text of that +** token. Space to hold the returned string +** is obtained from sqliteMalloc() and must be freed by the calling +** function. +** +** Any quotation marks (ex: "name", 'name', [name], or `name`) that +** surround the body of the token are removed. +** +** Tokens are often just pointers into the original SQL text and so +** are not \000 terminated and are not persistent. The returned string +** is \000 terminated and is persistent. +*/ +SQLITE_PRIVATE char *sqlite3NameFromToken(sqlite3 *db, const Token *pName){ + char *zName; + if( pName ){ + zName = sqlite3DbStrNDup(db, (const char*)pName->z, pName->n); + sqlite3Dequote(zName); + }else{ + zName = 0; + } + return zName; +} + +/* +** Open the sqlite_schema table stored in database number iDb for +** writing. The table is opened using cursor 0. +*/ +SQLITE_PRIVATE void sqlite3OpenSchemaTable(Parse *p, int iDb){ + Vdbe *v = sqlite3GetVdbe(p); + sqlite3TableLock(p, iDb, SCHEMA_ROOT, 1, LEGACY_SCHEMA_TABLE); + sqlite3VdbeAddOp4Int(v, OP_OpenWrite, 0, SCHEMA_ROOT, iDb, 5); + if( p->nTab==0 ){ + p->nTab = 1; + } +} + +/* +** Parameter zName points to a nul-terminated buffer containing the name +** of a database ("main", "temp" or the name of an attached db). This +** function returns the index of the named database in db->aDb[], or +** -1 if the named db cannot be found. +*/ +SQLITE_PRIVATE int sqlite3FindDbName(sqlite3 *db, const char *zName){ + int i = -1; /* Database number */ + if( zName ){ + Db *pDb; + for(i=(db->nDb-1), pDb=&db->aDb[i]; i>=0; i--, pDb--){ + if( 0==sqlite3_stricmp(pDb->zDbSName, zName) ) break; + /* "main" is always an acceptable alias for the primary database + ** even if it has been renamed using SQLITE_DBCONFIG_MAINDBNAME. */ + if( i==0 && 0==sqlite3_stricmp("main", zName) ) break; + } + } + return i; +} + +/* +** The token *pName contains the name of a database (either "main" or +** "temp" or the name of an attached db). This routine returns the +** index of the named database in db->aDb[], or -1 if the named db +** does not exist. +*/ +SQLITE_PRIVATE int sqlite3FindDb(sqlite3 *db, Token *pName){ + int i; /* Database number */ + char *zName; /* Name we are searching for */ + zName = sqlite3NameFromToken(db, pName); + i = sqlite3FindDbName(db, zName); + sqlite3DbFree(db, zName); + return i; +} + +/* The table or view or trigger name is passed to this routine via tokens +** pName1 and pName2. If the table name was fully qualified, for example: +** +** CREATE TABLE xxx.yyy (...); +** +** Then pName1 is set to "xxx" and pName2 "yyy". On the other hand if +** the table name is not fully qualified, i.e.: +** +** CREATE TABLE yyy(...); +** +** Then pName1 is set to "yyy" and pName2 is "". +** +** This routine sets the *ppUnqual pointer to point at the token (pName1 or +** pName2) that stores the unqualified table name. The index of the +** database "xxx" is returned. +*/ +SQLITE_PRIVATE int sqlite3TwoPartName( + Parse *pParse, /* Parsing and code generating context */ + Token *pName1, /* The "xxx" in the name "xxx.yyy" or "xxx" */ + Token *pName2, /* The "yyy" in the name "xxx.yyy" */ + Token **pUnqual /* Write the unqualified object name here */ +){ + int iDb; /* Database holding the object */ + sqlite3 *db = pParse->db; + + assert( pName2!=0 ); + if( pName2->n>0 ){ + if( db->init.busy ) { + sqlite3ErrorMsg(pParse, "corrupt database"); + return -1; + } + *pUnqual = pName2; + iDb = sqlite3FindDb(db, pName1); + if( iDb<0 ){ + sqlite3ErrorMsg(pParse, "unknown database %T", pName1); + return -1; + } + }else{ + assert( db->init.iDb==0 || db->init.busy || IN_SPECIAL_PARSE + || (db->mDbFlags & DBFLAG_Vacuum)!=0); + iDb = db->init.iDb; + *pUnqual = pName1; + } + return iDb; +} + +/* +** True if PRAGMA writable_schema is ON +*/ +SQLITE_PRIVATE int sqlite3WritableSchema(sqlite3 *db){ + testcase( (db->flags&(SQLITE_WriteSchema|SQLITE_Defensive))==0 ); + testcase( (db->flags&(SQLITE_WriteSchema|SQLITE_Defensive))== + SQLITE_WriteSchema ); + testcase( (db->flags&(SQLITE_WriteSchema|SQLITE_Defensive))== + SQLITE_Defensive ); + testcase( (db->flags&(SQLITE_WriteSchema|SQLITE_Defensive))== + (SQLITE_WriteSchema|SQLITE_Defensive) ); + return (db->flags&(SQLITE_WriteSchema|SQLITE_Defensive))==SQLITE_WriteSchema; +} + +/* +** This routine is used to check if the UTF-8 string zName is a legal +** unqualified name for a new schema object (table, index, view or +** trigger). All names are legal except those that begin with the string +** "sqlite_" (in upper, lower or mixed case). This portion of the namespace +** is reserved for internal use. +** +** When parsing the sqlite_schema table, this routine also checks to +** make sure the "type", "name", and "tbl_name" columns are consistent +** with the SQL. +*/ +SQLITE_PRIVATE int sqlite3CheckObjectName( + Parse *pParse, /* Parsing context */ + const char *zName, /* Name of the object to check */ + const char *zType, /* Type of this object */ + const char *zTblName /* Parent table name for triggers and indexes */ +){ + sqlite3 *db = pParse->db; + if( sqlite3WritableSchema(db) + || db->init.imposterTable + || !sqlite3Config.bExtraSchemaChecks + ){ + /* Skip these error checks for writable_schema=ON */ + return SQLITE_OK; + } + if( db->init.busy ){ + if( sqlite3_stricmp(zType, db->init.azInit[0]) + || sqlite3_stricmp(zName, db->init.azInit[1]) + || sqlite3_stricmp(zTblName, db->init.azInit[2]) + ){ + sqlite3ErrorMsg(pParse, ""); /* corruptSchema() will supply the error */ + return SQLITE_ERROR; + } + }else{ + if( (pParse->nested==0 && 0==sqlite3StrNICmp(zName, "sqlite_", 7)) + || (sqlite3ReadOnlyShadowTables(db) && sqlite3ShadowTableName(db, zName)) + ){ + sqlite3ErrorMsg(pParse, "object name reserved for internal use: %s", + zName); + return SQLITE_ERROR; + } + + } + return SQLITE_OK; +} + +/* +** Return the PRIMARY KEY index of a table +*/ +SQLITE_PRIVATE Index *sqlite3PrimaryKeyIndex(Table *pTab){ + Index *p; + for(p=pTab->pIndex; p && !IsPrimaryKeyIndex(p); p=p->pNext){} + return p; +} + +/* +** Convert an table column number into a index column number. That is, +** for the column iCol in the table (as defined by the CREATE TABLE statement) +** find the (first) offset of that column in index pIdx. Or return -1 +** if column iCol is not used in index pIdx. +*/ +SQLITE_PRIVATE int sqlite3TableColumnToIndex(Index *pIdx, int iCol){ + int i; + i16 iCol16; + assert( iCol>=(-1) && iCol<=SQLITE_MAX_COLUMN ); + assert( pIdx->nColumn<=SQLITE_MAX_COLUMN*2 ); + iCol16 = iCol; + for(i=0; inColumn; i++){ + if( iCol16==pIdx->aiColumn[i] ){ + return i; + } + } + return -1; +} + +#ifndef SQLITE_OMIT_GENERATED_COLUMNS +/* Convert a storage column number into a table column number. +** +** The storage column number (0,1,2,....) is the index of the value +** as it appears in the record on disk. The true column number +** is the index (0,1,2,...) of the column in the CREATE TABLE statement. +** +** The storage column number is less than the table column number if +** and only there are VIRTUAL columns to the left. +** +** If SQLITE_OMIT_GENERATED_COLUMNS, this routine is a no-op macro. +*/ +SQLITE_PRIVATE i16 sqlite3StorageColumnToTable(Table *pTab, i16 iCol){ + if( pTab->tabFlags & TF_HasVirtual ){ + int i; + for(i=0; i<=iCol; i++){ + if( pTab->aCol[i].colFlags & COLFLAG_VIRTUAL ) iCol++; + } + } + return iCol; +} +#endif + +#ifndef SQLITE_OMIT_GENERATED_COLUMNS +/* Convert a table column number into a storage column number. +** +** The storage column number (0,1,2,....) is the index of the value +** as it appears in the record on disk. Or, if the input column is +** the N-th virtual column (zero-based) then the storage number is +** the number of non-virtual columns in the table plus N. +** +** The true column number is the index (0,1,2,...) of the column in +** the CREATE TABLE statement. +** +** If the input column is a VIRTUAL column, then it should not appear +** in storage. But the value sometimes is cached in registers that +** follow the range of registers used to construct storage. This +** avoids computing the same VIRTUAL column multiple times, and provides +** values for use by OP_Param opcodes in triggers. Hence, if the +** input column is a VIRTUAL table, put it after all the other columns. +** +** In the following, N means "normal column", S means STORED, and +** V means VIRTUAL. Suppose the CREATE TABLE has columns like this: +** +** CREATE TABLE ex(N,S,V,N,S,V,N,S,V); +** -- 0 1 2 3 4 5 6 7 8 +** +** Then the mapping from this function is as follows: +** +** INPUTS: 0 1 2 3 4 5 6 7 8 +** OUTPUTS: 0 1 6 2 3 7 4 5 8 +** +** So, in other words, this routine shifts all the virtual columns to +** the end. +** +** If SQLITE_OMIT_GENERATED_COLUMNS then there are no virtual columns and +** this routine is a no-op macro. If the pTab does not have any virtual +** columns, then this routine is no-op that always return iCol. If iCol +** is negative (indicating the ROWID column) then this routine return iCol. +*/ +SQLITE_PRIVATE i16 sqlite3TableColumnToStorage(Table *pTab, i16 iCol){ + int i; + i16 n; + assert( iColnCol ); + if( (pTab->tabFlags & TF_HasVirtual)==0 || iCol<0 ) return iCol; + for(i=0, n=0; iaCol[i].colFlags & COLFLAG_VIRTUAL)==0 ) n++; + } + if( pTab->aCol[i].colFlags & COLFLAG_VIRTUAL ){ + /* iCol is a virtual column itself */ + return pTab->nNVCol + i - n; + }else{ + /* iCol is a normal or stored column */ + return n; + } +} +#endif + +/* +** Insert a single OP_JournalMode query opcode in order to force the +** prepared statement to return false for sqlite3_stmt_readonly(). This +** is used by CREATE TABLE IF NOT EXISTS and similar if the table already +** exists, so that the prepared statement for CREATE TABLE IF NOT EXISTS +** will return false for sqlite3_stmt_readonly() even if that statement +** is a read-only no-op. +*/ +static void sqlite3ForceNotReadOnly(Parse *pParse){ + int iReg = ++pParse->nMem; + Vdbe *v = sqlite3GetVdbe(pParse); + if( v ){ + sqlite3VdbeAddOp3(v, OP_JournalMode, 0, iReg, PAGER_JOURNALMODE_QUERY); + sqlite3VdbeUsesBtree(v, 0); + } +} + +/* +** Begin constructing a new table representation in memory. This is +** the first of several action routines that get called in response +** to a CREATE TABLE statement. In particular, this routine is called +** after seeing tokens "CREATE" and "TABLE" and the table name. The isTemp +** flag is true if the table should be stored in the auxiliary database +** file instead of in the main database file. This is normally the case +** when the "TEMP" or "TEMPORARY" keyword occurs in between +** CREATE and TABLE. +** +** The new table record is initialized and put in pParse->pNewTable. +** As more of the CREATE TABLE statement is parsed, additional action +** routines will be called to add more information to this record. +** At the end of the CREATE TABLE statement, the sqlite3EndTable() routine +** is called to complete the construction of the new table record. +*/ +SQLITE_PRIVATE void sqlite3StartTable( + Parse *pParse, /* Parser context */ + Token *pName1, /* First part of the name of the table or view */ + Token *pName2, /* Second part of the name of the table or view */ + int isTemp, /* True if this is a TEMP table */ + int isView, /* True if this is a VIEW */ + int isVirtual, /* True if this is a VIRTUAL table */ + int noErr /* Do nothing if table already exists */ +){ + Table *pTable; + char *zName = 0; /* The name of the new table */ + sqlite3 *db = pParse->db; + Vdbe *v; + int iDb; /* Database number to create the table in */ + Token *pName; /* Unqualified name of the table to create */ + + if( db->init.busy && db->init.newTnum==1 ){ + /* Special case: Parsing the sqlite_schema or sqlite_temp_schema schema */ + iDb = db->init.iDb; + zName = sqlite3DbStrDup(db, SCHEMA_TABLE(iDb)); + pName = pName1; + }else{ + /* The common case */ + iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName); + if( iDb<0 ) return; + if( !OMIT_TEMPDB && isTemp && pName2->n>0 && iDb!=1 ){ + /* If creating a temp table, the name may not be qualified. Unless + ** the database name is "temp" anyway. */ + sqlite3ErrorMsg(pParse, "temporary table name must be unqualified"); + return; + } + if( !OMIT_TEMPDB && isTemp ) iDb = 1; + zName = sqlite3NameFromToken(db, pName); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, (void*)zName, pName); + } + } + pParse->sNameToken = *pName; + if( zName==0 ) return; + if( sqlite3CheckObjectName(pParse, zName, isView?"view":"table", zName) ){ + goto begin_table_error; + } + if( db->init.iDb==1 ) isTemp = 1; +#ifndef SQLITE_OMIT_AUTHORIZATION + assert( isTemp==0 || isTemp==1 ); + assert( isView==0 || isView==1 ); + { + static const u8 aCode[] = { + SQLITE_CREATE_TABLE, + SQLITE_CREATE_TEMP_TABLE, + SQLITE_CREATE_VIEW, + SQLITE_CREATE_TEMP_VIEW + }; + char *zDb = db->aDb[iDb].zDbSName; + if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(isTemp), 0, zDb) ){ + goto begin_table_error; + } + if( !isVirtual && sqlite3AuthCheck(pParse, (int)aCode[isTemp+2*isView], + zName, 0, zDb) ){ + goto begin_table_error; + } + } +#endif + + /* Make sure the new table name does not collide with an existing + ** index or table name in the same database. Issue an error message if + ** it does. The exception is if the statement being parsed was passed + ** to an sqlite3_declare_vtab() call. In that case only the column names + ** and types will be used, so there is no need to test for namespace + ** collisions. + */ + if( !IN_SPECIAL_PARSE ){ + char *zDb = db->aDb[iDb].zDbSName; + if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ + goto begin_table_error; + } + pTable = sqlite3FindTable(db, zName, zDb); + if( pTable ){ + if( !noErr ){ + sqlite3ErrorMsg(pParse, "%s %T already exists", + (IsView(pTable)? "view" : "table"), pName); + }else{ + assert( !db->init.busy || CORRUPT_DB ); + sqlite3CodeVerifySchema(pParse, iDb); + sqlite3ForceNotReadOnly(pParse); + } + goto begin_table_error; + } + if( sqlite3FindIndex(db, zName, zDb)!=0 ){ + sqlite3ErrorMsg(pParse, "there is already an index named %s", zName); + goto begin_table_error; + } + } + + pTable = sqlite3DbMallocZero(db, sizeof(Table)); + if( pTable==0 ){ + assert( db->mallocFailed ); + pParse->rc = SQLITE_NOMEM_BKPT; + pParse->nErr++; + goto begin_table_error; + } + pTable->zName = zName; + pTable->iPKey = -1; + pTable->pSchema = db->aDb[iDb].pSchema; + pTable->nTabRef = 1; +#ifdef SQLITE_DEFAULT_ROWEST + pTable->nRowLogEst = sqlite3LogEst(SQLITE_DEFAULT_ROWEST); +#else + pTable->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) ); +#endif + assert( pParse->pNewTable==0 ); + pParse->pNewTable = pTable; + + /* Begin generating the code that will insert the table record into + ** the schema table. Note in particular that we must go ahead + ** and allocate the record number for the table entry now. Before any + ** PRIMARY KEY or UNIQUE keywords are parsed. Those keywords will cause + ** indices to be created and the table record must come before the + ** indices. Hence, the record number for the table must be allocated + ** now. + */ + if( !db->init.busy && (v = sqlite3GetVdbe(pParse))!=0 ){ + int addr1; + int fileFormat; + int reg1, reg2, reg3; + /* nullRow[] is an OP_Record encoding of a row containing 5 NULLs */ + static const char nullRow[] = { 6, 0, 0, 0, 0, 0 }; + sqlite3BeginWriteOperation(pParse, 1, iDb); + +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( isVirtual ){ + sqlite3VdbeAddOp0(v, OP_VBegin); + } +#endif + + /* If the file format and encoding in the database have not been set, + ** set them now. + */ + assert( pParse->isCreate ); + reg1 = pParse->u1.cr.regRowid = ++pParse->nMem; + reg2 = pParse->u1.cr.regRoot = ++pParse->nMem; + reg3 = ++pParse->nMem; + sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, reg3, BTREE_FILE_FORMAT); + sqlite3VdbeUsesBtree(v, iDb); + addr1 = sqlite3VdbeAddOp1(v, OP_If, reg3); VdbeCoverage(v); + fileFormat = (db->flags & SQLITE_LegacyFileFmt)!=0 ? + 1 : SQLITE_MAX_FILE_FORMAT; + sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, fileFormat); + sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_TEXT_ENCODING, ENC(db)); + sqlite3VdbeJumpHere(v, addr1); + + /* This just creates a place-holder record in the sqlite_schema table. + ** The record created does not contain anything yet. It will be replaced + ** by the real entry in code generated at sqlite3EndTable(). + ** + ** The rowid for the new entry is left in register pParse->u1.cr.regRowid. + ** The root page of the new table is left in reg pParse->u1.cr.regRoot. + ** The rowid and root page number values are needed by the code that + ** sqlite3EndTable will generate. + */ +#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) + if( isView || isVirtual ){ + sqlite3VdbeAddOp2(v, OP_Integer, 0, reg2); + }else +#endif + { + assert( !pParse->bReturning ); + pParse->u1.cr.addrCrTab = + sqlite3VdbeAddOp3(v, OP_CreateBtree, iDb, reg2, BTREE_INTKEY); + } + sqlite3OpenSchemaTable(pParse, iDb); + sqlite3VdbeAddOp2(v, OP_NewRowid, 0, reg1); + sqlite3VdbeAddOp4(v, OP_Blob, 6, reg3, 0, nullRow, P4_STATIC); + sqlite3VdbeAddOp3(v, OP_Insert, 0, reg3, reg1); + sqlite3VdbeChangeP5(v, OPFLAG_APPEND); + sqlite3VdbeAddOp0(v, OP_Close); + }else if( db->init.imposterTable ){ + pTable->tabFlags |= TF_Imposter; + if( db->init.imposterTable>=2 ) pTable->tabFlags |= TF_Readonly; + } + + /* Normal (non-error) return. */ + return; + + /* If an error occurs, we jump here */ +begin_table_error: + pParse->checkSchema = 1; + sqlite3DbFree(db, zName); + return; +} + +/* Set properties of a table column based on the (magical) +** name of the column. +*/ +#if SQLITE_ENABLE_HIDDEN_COLUMNS +SQLITE_PRIVATE void sqlite3ColumnPropertiesFromName(Table *pTab, Column *pCol){ + if( sqlite3_strnicmp(pCol->zCnName, "__hidden__", 10)==0 ){ + pCol->colFlags |= COLFLAG_HIDDEN; + if( pTab ) pTab->tabFlags |= TF_HasHidden; + }else if( pTab && pCol!=pTab->aCol && (pCol[-1].colFlags & COLFLAG_HIDDEN) ){ + pTab->tabFlags |= TF_OOOHidden; + } +} +#endif + +/* +** Clean up the data structures associated with the RETURNING clause. +*/ +static void sqlite3DeleteReturning(sqlite3 *db, void *pArg){ + Returning *pRet = (Returning*)pArg; + Hash *pHash; + pHash = &(db->aDb[1].pSchema->trigHash); + sqlite3HashInsert(pHash, pRet->zName, 0); + sqlite3ExprListDelete(db, pRet->pReturnEL); + sqlite3DbFree(db, pRet); +} + +/* +** Add the RETURNING clause to the parse currently underway. +** +** This routine creates a special TEMP trigger that will fire for each row +** of the DML statement. That TEMP trigger contains a single SELECT +** statement with a result set that is the argument of the RETURNING clause. +** The trigger has the Trigger.bReturning flag and an opcode of +** TK_RETURNING instead of TK_SELECT, so that the trigger code generator +** knows to handle it specially. The TEMP trigger is automatically +** removed at the end of the parse. +** +** When this routine is called, we do not yet know if the RETURNING clause +** is attached to a DELETE, INSERT, or UPDATE, so construct it as a +** RETURNING trigger instead. It will then be converted into the appropriate +** type on the first call to sqlite3TriggersExist(). +*/ +SQLITE_PRIVATE void sqlite3AddReturning(Parse *pParse, ExprList *pList){ + Returning *pRet; + Hash *pHash; + sqlite3 *db = pParse->db; + if( pParse->pNewTrigger ){ + sqlite3ErrorMsg(pParse, "cannot use RETURNING in a trigger"); + }else{ + assert( pParse->bReturning==0 || pParse->ifNotExists ); + } + pParse->bReturning = 1; + pRet = sqlite3DbMallocZero(db, sizeof(*pRet)); + if( pRet==0 ){ + sqlite3ExprListDelete(db, pList); + return; + } + assert( !pParse->isCreate ); + pParse->u1.d.pReturning = pRet; + pRet->pParse = pParse; + pRet->pReturnEL = pList; + sqlite3ParserAddCleanup(pParse, sqlite3DeleteReturning, pRet); + testcase( pParse->earlyCleanup ); + if( db->mallocFailed ) return; + sqlite3_snprintf(sizeof(pRet->zName), pRet->zName, + "sqlite_returning_%p", pParse); + pRet->retTrig.zName = pRet->zName; + pRet->retTrig.op = TK_RETURNING; + pRet->retTrig.tr_tm = TRIGGER_AFTER; + pRet->retTrig.bReturning = 1; + pRet->retTrig.pSchema = db->aDb[1].pSchema; + pRet->retTrig.pTabSchema = db->aDb[1].pSchema; + pRet->retTrig.step_list = &pRet->retTStep; + pRet->retTStep.op = TK_RETURNING; + pRet->retTStep.pTrig = &pRet->retTrig; + pRet->retTStep.pExprList = pList; + pHash = &(db->aDb[1].pSchema->trigHash); + assert( sqlite3HashFind(pHash, pRet->zName)==0 + || pParse->nErr || pParse->ifNotExists ); + if( sqlite3HashInsert(pHash, pRet->zName, &pRet->retTrig) + ==&pRet->retTrig ){ + sqlite3OomFault(db); + } +} + +/* +** Add a new column to the table currently being constructed. +** +** The parser calls this routine once for each column declaration +** in a CREATE TABLE statement. sqlite3StartTable() gets called +** first to get things going. Then this routine is called for each +** column. +*/ +SQLITE_PRIVATE void sqlite3AddColumn(Parse *pParse, Token sName, Token sType){ + Table *p; + int i; + char *z; + char *zType; + Column *pCol; + sqlite3 *db = pParse->db; + Column *aNew; + u8 eType = COLTYPE_CUSTOM; + u8 szEst = 1; + char affinity = SQLITE_AFF_BLOB; + + if( (p = pParse->pNewTable)==0 ) return; + if( p->nCol+1>db->aLimit[SQLITE_LIMIT_COLUMN] ){ + sqlite3ErrorMsg(pParse, "too many columns on %s", p->zName); + return; + } + if( !IN_RENAME_OBJECT ) sqlite3DequoteToken(&sName); + + /* Because keywords GENERATE ALWAYS can be converted into identifiers + ** by the parser, we can sometimes end up with a typename that ends + ** with "generated always". Check for this case and omit the surplus + ** text. */ + if( sType.n>=16 + && sqlite3_strnicmp(sType.z+(sType.n-6),"always",6)==0 + ){ + sType.n -= 6; + while( ALWAYS(sType.n>0) && sqlite3Isspace(sType.z[sType.n-1]) ) sType.n--; + if( sType.n>=9 + && sqlite3_strnicmp(sType.z+(sType.n-9),"generated",9)==0 + ){ + sType.n -= 9; + while( sType.n>0 && sqlite3Isspace(sType.z[sType.n-1]) ) sType.n--; + } + } + + /* Check for standard typenames. For standard typenames we will + ** set the Column.eType field rather than storing the typename after + ** the column name, in order to save space. */ + if( sType.n>=3 ){ + sqlite3DequoteToken(&sType); + for(i=0; i0) ); + if( z==0 ) return; + if( IN_RENAME_OBJECT ) sqlite3RenameTokenMap(pParse, (void*)z, &sName); + memcpy(z, sName.z, sName.n); + z[sName.n] = 0; + sqlite3Dequote(z); + if( p->nCol && sqlite3ColumnIndex(p, z)>=0 ){ + sqlite3ErrorMsg(pParse, "duplicate column name: %s", z); + sqlite3DbFree(db, z); + return; + } + aNew = sqlite3DbRealloc(db,p->aCol,((i64)p->nCol+1)*sizeof(p->aCol[0])); + if( aNew==0 ){ + sqlite3DbFree(db, z); + return; + } + p->aCol = aNew; + pCol = &p->aCol[p->nCol]; + memset(pCol, 0, sizeof(p->aCol[0])); + pCol->zCnName = z; + pCol->hName = sqlite3StrIHash(z); + sqlite3ColumnPropertiesFromName(p, pCol); + + if( sType.n==0 ){ + /* If there is no type specified, columns have the default affinity + ** 'BLOB' with a default size of 4 bytes. */ + pCol->affinity = affinity; + pCol->eCType = eType; + pCol->szEst = szEst; +#ifdef SQLITE_ENABLE_SORTER_REFERENCES + if( affinity==SQLITE_AFF_BLOB ){ + if( 4>=sqlite3GlobalConfig.szSorterRef ){ + pCol->colFlags |= COLFLAG_SORTERREF; + } + } +#endif + }else{ + zType = z + sqlite3Strlen30(z) + 1; + memcpy(zType, sType.z, sType.n); + zType[sType.n] = 0; + sqlite3Dequote(zType); + pCol->affinity = sqlite3AffinityType(zType, pCol); + pCol->colFlags |= COLFLAG_HASTYPE; + } + if( p->nCol<=0xff ){ + u8 h = pCol->hName % sizeof(p->aHx); + p->aHx[h] = p->nCol; + } + p->nCol++; + p->nNVCol++; + assert( pParse->isCreate ); + pParse->u1.cr.constraintName.n = 0; +} + +/* +** This routine is called by the parser while in the middle of +** parsing a CREATE TABLE statement. A "NOT NULL" constraint has +** been seen on a column. This routine sets the notNull flag on +** the column currently under construction. +*/ +SQLITE_PRIVATE void sqlite3AddNotNull(Parse *pParse, int onError){ + Table *p; + Column *pCol; + p = pParse->pNewTable; + if( p==0 || NEVER(p->nCol<1) ) return; + pCol = &p->aCol[p->nCol-1]; + pCol->notNull = (u8)onError; + p->tabFlags |= TF_HasNotNull; + + /* Set the uniqNotNull flag on any UNIQUE or PK indexes already created + ** on this column. */ + if( pCol->colFlags & COLFLAG_UNIQUE ){ + Index *pIdx; + for(pIdx=p->pIndex; pIdx; pIdx=pIdx->pNext){ + assert( pIdx->nKeyCol==1 && pIdx->onError!=OE_None ); + if( pIdx->aiColumn[0]==p->nCol-1 ){ + pIdx->uniqNotNull = 1; + } + } + } +} + +/* +** Scan the column type name zType (length nType) and return the +** associated affinity type. +** +** This routine does a case-independent search of zType for the +** substrings in the following table. If one of the substrings is +** found, the corresponding affinity is returned. If zType contains +** more than one of the substrings, entries toward the top of +** the table take priority. For example, if zType is 'BLOBINT', +** SQLITE_AFF_INTEGER is returned. +** +** Substring | Affinity +** -------------------------------- +** 'INT' | SQLITE_AFF_INTEGER +** 'CHAR' | SQLITE_AFF_TEXT +** 'CLOB' | SQLITE_AFF_TEXT +** 'TEXT' | SQLITE_AFF_TEXT +** 'BLOB' | SQLITE_AFF_BLOB +** 'REAL' | SQLITE_AFF_REAL +** 'FLOA' | SQLITE_AFF_REAL +** 'DOUB' | SQLITE_AFF_REAL +** +** If none of the substrings in the above table are found, +** SQLITE_AFF_NUMERIC is returned. +*/ +SQLITE_PRIVATE char sqlite3AffinityType(const char *zIn, Column *pCol){ + u32 h = 0; + char aff = SQLITE_AFF_NUMERIC; + const char *zChar = 0; + + assert( zIn!=0 ); + while( zIn[0] ){ + u8 x = *(u8*)zIn; + h = (h<<8) + sqlite3UpperToLower[x]; + zIn++; + if( h==(('c'<<24)+('h'<<16)+('a'<<8)+'r') ){ /* CHAR */ + aff = SQLITE_AFF_TEXT; + zChar = zIn; + }else if( h==(('c'<<24)+('l'<<16)+('o'<<8)+'b') ){ /* CLOB */ + aff = SQLITE_AFF_TEXT; + }else if( h==(('t'<<24)+('e'<<16)+('x'<<8)+'t') ){ /* TEXT */ + aff = SQLITE_AFF_TEXT; + }else if( h==(('b'<<24)+('l'<<16)+('o'<<8)+'b') /* BLOB */ + && (aff==SQLITE_AFF_NUMERIC || aff==SQLITE_AFF_REAL) ){ + aff = SQLITE_AFF_BLOB; + if( zIn[0]=='(' ) zChar = zIn; +#ifndef SQLITE_OMIT_FLOATING_POINT + }else if( h==(('r'<<24)+('e'<<16)+('a'<<8)+'l') /* REAL */ + && aff==SQLITE_AFF_NUMERIC ){ + aff = SQLITE_AFF_REAL; + }else if( h==(('f'<<24)+('l'<<16)+('o'<<8)+'a') /* FLOA */ + && aff==SQLITE_AFF_NUMERIC ){ + aff = SQLITE_AFF_REAL; + }else if( h==(('d'<<24)+('o'<<16)+('u'<<8)+'b') /* DOUB */ + && aff==SQLITE_AFF_NUMERIC ){ + aff = SQLITE_AFF_REAL; +#endif + }else if( (h&0x00FFFFFF)==(('i'<<16)+('n'<<8)+'t') ){ /* INT */ + aff = SQLITE_AFF_INTEGER; + break; + } + } + + /* If pCol is not NULL, store an estimate of the field size. The + ** estimate is scaled so that the size of an integer is 1. */ + if( pCol ){ + int v = 0; /* default size is approx 4 bytes */ + if( aff r=(k/4+1) */ + sqlite3GetInt32(zChar, &v); + break; + } + zChar++; + } + }else{ + v = 16; /* BLOB, TEXT, CLOB -> r=5 (approx 20 bytes)*/ + } + } +#ifdef SQLITE_ENABLE_SORTER_REFERENCES + if( v>=sqlite3GlobalConfig.szSorterRef ){ + pCol->colFlags |= COLFLAG_SORTERREF; + } +#endif + v = v/4 + 1; + if( v>255 ) v = 255; + pCol->szEst = v; + } + return aff; +} + +/* +** The expression is the default value for the most recently added column +** of the table currently under construction. +** +** Default value expressions must be constant. Raise an exception if this +** is not the case. +** +** This routine is called by the parser while in the middle of +** parsing a CREATE TABLE statement. +*/ +SQLITE_PRIVATE void sqlite3AddDefaultValue( + Parse *pParse, /* Parsing context */ + Expr *pExpr, /* The parsed expression of the default value */ + const char *zStart, /* Start of the default value text */ + const char *zEnd /* First character past end of default value text */ +){ + Table *p; + Column *pCol; + sqlite3 *db = pParse->db; + p = pParse->pNewTable; + if( p!=0 ){ + int isInit = db->init.busy && db->init.iDb!=1; + pCol = &(p->aCol[p->nCol-1]); + if( !sqlite3ExprIsConstantOrFunction(pExpr, isInit) ){ + sqlite3ErrorMsg(pParse, "default value of column [%s] is not constant", + pCol->zCnName); +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + }else if( pCol->colFlags & COLFLAG_GENERATED ){ + testcase( pCol->colFlags & COLFLAG_VIRTUAL ); + testcase( pCol->colFlags & COLFLAG_STORED ); + sqlite3ErrorMsg(pParse, "cannot use DEFAULT on a generated column"); +#endif + }else{ + /* A copy of pExpr is used instead of the original, as pExpr contains + ** tokens that point to volatile memory. + */ + Expr x, *pDfltExpr; + memset(&x, 0, sizeof(x)); + x.op = TK_SPAN; + x.u.zToken = sqlite3DbSpanDup(db, zStart, zEnd); + x.pLeft = pExpr; + x.flags = EP_Skip; + pDfltExpr = sqlite3ExprDup(db, &x, EXPRDUP_REDUCE); + sqlite3DbFree(db, x.u.zToken); + sqlite3ColumnSetExpr(pParse, p, pCol, pDfltExpr); + } + } + if( IN_RENAME_OBJECT ){ + sqlite3RenameExprUnmap(pParse, pExpr); + } + sqlite3ExprDelete(db, pExpr); +} + +/* +** Backwards Compatibility Hack: +** +** Historical versions of SQLite accepted strings as column names in +** indexes and PRIMARY KEY constraints and in UNIQUE constraints. Example: +** +** CREATE TABLE xyz(a,b,c,d,e,PRIMARY KEY('a'),UNIQUE('b','c' COLLATE trim) +** CREATE INDEX abc ON xyz('c','d' DESC,'e' COLLATE nocase DESC); +** +** This is goofy. But to preserve backwards compatibility we continue to +** accept it. This routine does the necessary conversion. It converts +** the expression given in its argument from a TK_STRING into a TK_ID +** if the expression is just a TK_STRING with an optional COLLATE clause. +** If the expression is anything other than TK_STRING, the expression is +** unchanged. +*/ +static void sqlite3StringToId(Expr *p){ + if( p->op==TK_STRING ){ + p->op = TK_ID; + }else if( p->op==TK_COLLATE && p->pLeft->op==TK_STRING ){ + p->pLeft->op = TK_ID; + } +} + +/* +** Tag the given column as being part of the PRIMARY KEY +*/ +static void makeColumnPartOfPrimaryKey(Parse *pParse, Column *pCol){ + pCol->colFlags |= COLFLAG_PRIMKEY; +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + if( pCol->colFlags & COLFLAG_GENERATED ){ + testcase( pCol->colFlags & COLFLAG_VIRTUAL ); + testcase( pCol->colFlags & COLFLAG_STORED ); + sqlite3ErrorMsg(pParse, + "generated columns cannot be part of the PRIMARY KEY"); + } +#endif +} + +/* +** Designate the PRIMARY KEY for the table. pList is a list of names +** of columns that form the primary key. If pList is NULL, then the +** most recently added column of the table is the primary key. +** +** A table can have at most one primary key. If the table already has +** a primary key (and this is the second primary key) then create an +** error. +** +** If the PRIMARY KEY is on a single column whose datatype is INTEGER, +** then we will try to use that column as the rowid. Set the Table.iPKey +** field of the table under construction to be the index of the +** INTEGER PRIMARY KEY column. Table.iPKey is set to -1 if there is +** no INTEGER PRIMARY KEY. +** +** If the key is not an INTEGER PRIMARY KEY, then create a unique +** index for the key. No index is created for INTEGER PRIMARY KEYs. +*/ +SQLITE_PRIVATE void sqlite3AddPrimaryKey( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* List of field names to be indexed */ + int onError, /* What to do with a uniqueness conflict */ + int autoInc, /* True if the AUTOINCREMENT keyword is present */ + int sortOrder /* SQLITE_SO_ASC or SQLITE_SO_DESC */ +){ + Table *pTab = pParse->pNewTable; + Column *pCol = 0; + int iCol = -1, i; + int nTerm; + if( pTab==0 ) goto primary_key_exit; + if( pTab->tabFlags & TF_HasPrimaryKey ){ + sqlite3ErrorMsg(pParse, + "table \"%s\" has more than one primary key", pTab->zName); + goto primary_key_exit; + } + pTab->tabFlags |= TF_HasPrimaryKey; + if( pList==0 ){ + iCol = pTab->nCol - 1; + pCol = &pTab->aCol[iCol]; + makeColumnPartOfPrimaryKey(pParse, pCol); + nTerm = 1; + }else{ + nTerm = pList->nExpr; + for(i=0; ia[i].pExpr); + assert( pCExpr!=0 ); + sqlite3StringToId(pCExpr); + if( pCExpr->op==TK_ID ){ + assert( !ExprHasProperty(pCExpr, EP_IntValue) ); + iCol = sqlite3ColumnIndex(pTab, pCExpr->u.zToken); + if( iCol>=0 ){ + pCol = &pTab->aCol[iCol]; + makeColumnPartOfPrimaryKey(pParse, pCol); + } + } + } + } + if( nTerm==1 + && pCol + && pCol->eCType==COLTYPE_INTEGER + && sortOrder!=SQLITE_SO_DESC + ){ + if( IN_RENAME_OBJECT && pList ){ + Expr *pCExpr = sqlite3ExprSkipCollate(pList->a[0].pExpr); + sqlite3RenameTokenRemap(pParse, &pTab->iPKey, pCExpr); + } + pTab->iPKey = iCol; + pTab->keyConf = (u8)onError; + assert( autoInc==0 || autoInc==1 ); + pTab->tabFlags |= autoInc*TF_Autoincrement; + if( pList ) pParse->iPkSortOrder = pList->a[0].fg.sortFlags; + (void)sqlite3HasExplicitNulls(pParse, pList); + }else if( autoInc ){ +#ifndef SQLITE_OMIT_AUTOINCREMENT + sqlite3ErrorMsg(pParse, "AUTOINCREMENT is only allowed on an " + "INTEGER PRIMARY KEY"); +#endif + }else{ + sqlite3CreateIndex(pParse, 0, 0, 0, pList, onError, 0, + 0, sortOrder, 0, SQLITE_IDXTYPE_PRIMARYKEY); + pList = 0; + } + +primary_key_exit: + sqlite3ExprListDelete(pParse->db, pList); + return; +} + +/* +** Add a new CHECK constraint to the table currently under construction. +*/ +SQLITE_PRIVATE void sqlite3AddCheckConstraint( + Parse *pParse, /* Parsing context */ + Expr *pCheckExpr, /* The check expression */ + const char *zStart, /* Opening "(" */ + const char *zEnd /* Closing ")" */ +){ +#ifndef SQLITE_OMIT_CHECK + Table *pTab = pParse->pNewTable; + sqlite3 *db = pParse->db; + if( pTab && !IN_DECLARE_VTAB + && !sqlite3BtreeIsReadonly(db->aDb[db->init.iDb].pBt) + ){ + pTab->pCheck = sqlite3ExprListAppend(pParse, pTab->pCheck, pCheckExpr); + assert( pParse->isCreate ); + if( pParse->u1.cr.constraintName.n ){ + sqlite3ExprListSetName(pParse, pTab->pCheck, + &pParse->u1.cr.constraintName, 1); + }else{ + Token t; + for(zStart++; sqlite3Isspace(zStart[0]); zStart++){} + while( sqlite3Isspace(zEnd[-1]) ){ zEnd--; } + t.z = zStart; + t.n = (int)(zEnd - t.z); + sqlite3ExprListSetName(pParse, pTab->pCheck, &t, 1); + } + }else +#endif + { + sqlite3ExprDelete(pParse->db, pCheckExpr); + } +} + +/* +** Set the collation function of the most recently parsed table column +** to the CollSeq given. +*/ +SQLITE_PRIVATE void sqlite3AddCollateType(Parse *pParse, Token *pToken){ + Table *p; + int i; + char *zColl; /* Dequoted name of collation sequence */ + sqlite3 *db; + + if( (p = pParse->pNewTable)==0 || IN_RENAME_OBJECT ) return; + i = p->nCol-1; + db = pParse->db; + zColl = sqlite3NameFromToken(db, pToken); + if( !zColl ) return; + + if( sqlite3LocateCollSeq(pParse, zColl) ){ + Index *pIdx; + sqlite3ColumnSetColl(db, &p->aCol[i], zColl); + + /* If the column is declared as " PRIMARY KEY COLLATE ", + ** then an index may have been created on this column before the + ** collation type was added. Correct this if it is the case. + */ + for(pIdx=p->pIndex; pIdx; pIdx=pIdx->pNext){ + assert( pIdx->nKeyCol==1 ); + if( pIdx->aiColumn[0]==i ){ + pIdx->azColl[0] = sqlite3ColumnColl(&p->aCol[i]); + } + } + } + sqlite3DbFree(db, zColl); +} + +/* Change the most recently parsed column to be a GENERATED ALWAYS AS +** column. +*/ +SQLITE_PRIVATE void sqlite3AddGenerated(Parse *pParse, Expr *pExpr, Token *pType){ +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + u8 eType = COLFLAG_VIRTUAL; + Table *pTab = pParse->pNewTable; + Column *pCol; + if( pTab==0 ){ + /* generated column in an CREATE TABLE IF NOT EXISTS that already exists */ + goto generated_done; + } + pCol = &(pTab->aCol[pTab->nCol-1]); + if( IN_DECLARE_VTAB ){ + sqlite3ErrorMsg(pParse, "virtual tables cannot use computed columns"); + goto generated_done; + } + if( pCol->iDflt>0 ) goto generated_error; + if( pType ){ + if( pType->n==7 && sqlite3StrNICmp("virtual",pType->z,7)==0 ){ + /* no-op */ + }else if( pType->n==6 && sqlite3StrNICmp("stored",pType->z,6)==0 ){ + eType = COLFLAG_STORED; + }else{ + goto generated_error; + } + } + if( eType==COLFLAG_VIRTUAL ) pTab->nNVCol--; + pCol->colFlags |= eType; + assert( TF_HasVirtual==COLFLAG_VIRTUAL ); + assert( TF_HasStored==COLFLAG_STORED ); + pTab->tabFlags |= eType; + if( pCol->colFlags & COLFLAG_PRIMKEY ){ + makeColumnPartOfPrimaryKey(pParse, pCol); /* For the error message */ + } + if( ALWAYS(pExpr) && pExpr->op==TK_ID ){ + /* The value of a generated column needs to be a real expression, not + ** just a reference to another column, in order for covering index + ** optimizations to work correctly. So if the value is not an expression, + ** turn it into one by adding a unary "+" operator. */ + pExpr = sqlite3PExpr(pParse, TK_UPLUS, pExpr, 0); + } + if( pExpr && pExpr->op!=TK_RAISE ) pExpr->affExpr = pCol->affinity; + sqlite3ColumnSetExpr(pParse, pTab, pCol, pExpr); + pExpr = 0; + goto generated_done; + +generated_error: + sqlite3ErrorMsg(pParse, "error in generated column \"%s\"", + pCol->zCnName); +generated_done: + sqlite3ExprDelete(pParse->db, pExpr); +#else + /* Throw and error for the GENERATED ALWAYS AS clause if the + ** SQLITE_OMIT_GENERATED_COLUMNS compile-time option is used. */ + sqlite3ErrorMsg(pParse, "generated columns not supported"); + sqlite3ExprDelete(pParse->db, pExpr); +#endif +} + +/* +** Generate code that will increment the schema cookie. +** +** The schema cookie is used to determine when the schema for the +** database changes. After each schema change, the cookie value +** changes. When a process first reads the schema it records the +** cookie. Thereafter, whenever it goes to access the database, +** it checks the cookie to make sure the schema has not changed +** since it was last read. +** +** This plan is not completely bullet-proof. It is possible for +** the schema to change multiple times and for the cookie to be +** set back to prior value. But schema changes are infrequent +** and the probability of hitting the same cookie value is only +** 1 chance in 2^32. So we're safe enough. +** +** IMPLEMENTATION-OF: R-34230-56049 SQLite automatically increments +** the schema-version whenever the schema changes. +*/ +SQLITE_PRIVATE void sqlite3ChangeCookie(Parse *pParse, int iDb){ + sqlite3 *db = pParse->db; + Vdbe *v = pParse->pVdbe; + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_SCHEMA_VERSION, + (int)(1+(unsigned)db->aDb[iDb].pSchema->schema_cookie)); +} + +/* +** Measure the number of characters needed to output the given +** identifier. The number returned includes any quotes used +** but does not include the null terminator. +** +** The estimate is conservative. It might be larger that what is +** really needed. +*/ +static int identLength(const char *z){ + int n; + for(n=0; *z; n++, z++){ + if( *z=='"' ){ n++; } + } + return n + 2; +} + +/* +** The first parameter is a pointer to an output buffer. The second +** parameter is a pointer to an integer that contains the offset at +** which to write into the output buffer. This function copies the +** nul-terminated string pointed to by the third parameter, zSignedIdent, +** to the specified offset in the buffer and updates *pIdx to refer +** to the first byte after the last byte written before returning. +** +** If the string zSignedIdent consists entirely of alphanumeric +** characters, does not begin with a digit and is not an SQL keyword, +** then it is copied to the output buffer exactly as it is. Otherwise, +** it is quoted using double-quotes. +*/ +static void identPut(char *z, int *pIdx, char *zSignedIdent){ + unsigned char *zIdent = (unsigned char*)zSignedIdent; + int i, j, needQuote; + i = *pIdx; + + for(j=0; zIdent[j]; j++){ + if( !sqlite3Isalnum(zIdent[j]) && zIdent[j]!='_' ) break; + } + needQuote = sqlite3Isdigit(zIdent[0]) + || sqlite3KeywordCode(zIdent, j)!=TK_ID + || zIdent[j]!=0 + || j==0; + + if( needQuote ) z[i++] = '"'; + for(j=0; zIdent[j]; j++){ + z[i++] = zIdent[j]; + if( zIdent[j]=='"' ) z[i++] = '"'; + } + if( needQuote ) z[i++] = '"'; + z[i] = 0; + *pIdx = i; +} + +/* +** Generate a CREATE TABLE statement appropriate for the given +** table. Memory to hold the text of the statement is obtained +** from sqliteMalloc() and must be freed by the calling function. +*/ +static char *createTableStmt(sqlite3 *db, Table *p){ + int i, k, len; + i64 n; + char *zStmt; + char *zSep, *zSep2, *zEnd; + Column *pCol; + n = 0; + for(pCol = p->aCol, i=0; inCol; i++, pCol++){ + n += identLength(pCol->zCnName) + 5; + } + n += identLength(p->zName); + if( n<50 ){ + zSep = ""; + zSep2 = ","; + zEnd = ")"; + }else{ + zSep = "\n "; + zSep2 = ",\n "; + zEnd = "\n)"; + } + n += 35 + 6*p->nCol; + zStmt = sqlite3DbMallocRaw(0, n); + if( zStmt==0 ){ + sqlite3OomFault(db); + return 0; + } + assert( n>14 && n<=0x7fffffff ); + memcpy(zStmt, "CREATE TABLE ", 13); + k = 13; + identPut(zStmt, &k, p->zName); + zStmt[k++] = '('; + for(pCol=p->aCol, i=0; inCol; i++, pCol++){ + static const char * const azType[] = { + /* SQLITE_AFF_BLOB */ "", + /* SQLITE_AFF_TEXT */ " TEXT", + /* SQLITE_AFF_NUMERIC */ " NUM", + /* SQLITE_AFF_INTEGER */ " INT", + /* SQLITE_AFF_REAL */ " REAL", + /* SQLITE_AFF_FLEXNUM */ " NUM", + }; + const char *zType; + + len = sqlite3Strlen30(zSep); + assert( k+lenzCnName); + assert( kaffinity-SQLITE_AFF_BLOB >= 0 ); + assert( pCol->affinity-SQLITE_AFF_BLOB < ArraySize(azType) ); + testcase( pCol->affinity==SQLITE_AFF_BLOB ); + testcase( pCol->affinity==SQLITE_AFF_TEXT ); + testcase( pCol->affinity==SQLITE_AFF_NUMERIC ); + testcase( pCol->affinity==SQLITE_AFF_INTEGER ); + testcase( pCol->affinity==SQLITE_AFF_REAL ); + testcase( pCol->affinity==SQLITE_AFF_FLEXNUM ); + + zType = azType[pCol->affinity - SQLITE_AFF_BLOB]; + len = sqlite3Strlen30(zType); + assert( pCol->affinity==SQLITE_AFF_BLOB + || pCol->affinity==SQLITE_AFF_FLEXNUM + || pCol->affinity==sqlite3AffinityType(zType, 0) ); + assert( k+lennColumn>=N ) return SQLITE_OK; + db = pParse->db; + assert( N>0 ); + assert( N <= SQLITE_MAX_COLUMN*2 /* tag-20250221-1 */ ); + testcase( N==2*pParse->db->aLimit[SQLITE_LIMIT_COLUMN] ); + assert( pIdx->isResized==0 ); + nByte = (sizeof(char*) + sizeof(LogEst) + sizeof(i16) + 1)*(u64)N; + zExtra = sqlite3DbMallocZero(db, nByte); + if( zExtra==0 ) return SQLITE_NOMEM_BKPT; + memcpy(zExtra, pIdx->azColl, sizeof(char*)*pIdx->nColumn); + pIdx->azColl = (const char**)zExtra; + zExtra += sizeof(char*)*N; + memcpy(zExtra, pIdx->aiRowLogEst, sizeof(LogEst)*(pIdx->nKeyCol+1)); + pIdx->aiRowLogEst = (LogEst*)zExtra; + zExtra += sizeof(LogEst)*N; + memcpy(zExtra, pIdx->aiColumn, sizeof(i16)*pIdx->nColumn); + pIdx->aiColumn = (i16*)zExtra; + zExtra += sizeof(i16)*N; + memcpy(zExtra, pIdx->aSortOrder, pIdx->nColumn); + pIdx->aSortOrder = (u8*)zExtra; + pIdx->nColumn = (u16)N; /* See tag-20250221-1 above for proof of safety */ + pIdx->isResized = 1; + return SQLITE_OK; +} + +/* +** Estimate the total row width for a table. +*/ +static void estimateTableWidth(Table *pTab){ + unsigned wTable = 0; + const Column *pTabCol; + int i; + for(i=pTab->nCol, pTabCol=pTab->aCol; i>0; i--, pTabCol++){ + wTable += pTabCol->szEst; + } + if( pTab->iPKey<0 ) wTable++; + pTab->szTabRow = sqlite3LogEst(wTable*4); +} + +/* +** Estimate the average size of a row for an index. +*/ +static void estimateIndexWidth(Index *pIdx){ + unsigned wIndex = 0; + int i; + const Column *aCol = pIdx->pTable->aCol; + for(i=0; inColumn; i++){ + i16 x = pIdx->aiColumn[i]; + assert( xpTable->nCol ); + wIndex += x<0 ? 1 : aCol[x].szEst; + } + pIdx->szIdxRow = sqlite3LogEst(wIndex*4); +} + +/* Return true if column number x is any of the first nCol entries of aiCol[]. +** This is used to determine if the column number x appears in any of the +** first nCol entries of an index. +*/ +static int hasColumn(const i16 *aiCol, int nCol, int x){ + while( nCol-- > 0 ){ + if( x==*(aiCol++) ){ + return 1; + } + } + return 0; +} + +/* +** Return true if any of the first nKey entries of index pIdx exactly +** match the iCol-th entry of pPk. pPk is always a WITHOUT ROWID +** PRIMARY KEY index. pIdx is an index on the same table. pIdx may +** or may not be the same index as pPk. +** +** The first nKey entries of pIdx are guaranteed to be ordinary columns, +** not a rowid or expression. +** +** This routine differs from hasColumn() in that both the column and the +** collating sequence must match for this routine, but for hasColumn() only +** the column name must match. +*/ +static int isDupColumn(Index *pIdx, int nKey, Index *pPk, int iCol){ + int i, j; + assert( nKey<=pIdx->nColumn ); + assert( iColnColumn,pPk->nKeyCol) ); + assert( pPk->idxType==SQLITE_IDXTYPE_PRIMARYKEY ); + assert( pPk->pTable->tabFlags & TF_WithoutRowid ); + assert( pPk->pTable==pIdx->pTable ); + testcase( pPk==pIdx ); + j = pPk->aiColumn[iCol]; + assert( j!=XN_ROWID && j!=XN_EXPR ); + for(i=0; iaiColumn[i]>=0 || j>=0 ); + if( pIdx->aiColumn[i]==j + && sqlite3StrICmp(pIdx->azColl[i], pPk->azColl[iCol])==0 + ){ + return 1; + } + } + return 0; +} + +/* Recompute the colNotIdxed field of the Index. +** +** colNotIdxed is a bitmask that has a 0 bit representing each indexed +** columns that are within the first 63 columns of the table and a 1 for +** all other bits (all columns that are not in the index). The +** high-order bit of colNotIdxed is always 1. All unindexed columns +** of the table have a 1. +** +** 2019-10-24: For the purpose of this computation, virtual columns are +** not considered to be covered by the index, even if they are in the +** index, because we do not trust the logic in whereIndexExprTrans() to be +** able to find all instances of a reference to the indexed table column +** and convert them into references to the index. Hence we always want +** the actual table at hand in order to recompute the virtual column, if +** necessary. +** +** The colNotIdxed mask is AND-ed with the SrcList.a[].colUsed mask +** to determine if the index is covering index. +*/ +static void recomputeColumnsNotIndexed(Index *pIdx){ + Bitmask m = 0; + int j; + Table *pTab = pIdx->pTable; + for(j=pIdx->nColumn-1; j>=0; j--){ + int x = pIdx->aiColumn[j]; + if( x>=0 && (pTab->aCol[x].colFlags & COLFLAG_VIRTUAL)==0 ){ + testcase( x==BMS-1 ); + testcase( x==BMS-2 ); + if( xcolNotIdxed = ~m; + assert( (pIdx->colNotIdxed>>63)==1 ); /* See note-20221022-a */ +} + +/* +** This routine runs at the end of parsing a CREATE TABLE statement that +** has a WITHOUT ROWID clause. The job of this routine is to convert both +** internal schema data structures and the generated VDBE code so that they +** are appropriate for a WITHOUT ROWID table instead of a rowid table. +** Changes include: +** +** (1) Set all columns of the PRIMARY KEY schema object to be NOT NULL. +** (2) Convert P3 parameter of the OP_CreateBtree from BTREE_INTKEY +** into BTREE_BLOBKEY. +** (3) Bypass the creation of the sqlite_schema table entry +** for the PRIMARY KEY as the primary key index is now +** identified by the sqlite_schema table entry of the table itself. +** (4) Set the Index.tnum of the PRIMARY KEY Index object in the +** schema to the rootpage from the main table. +** (5) Add all table columns to the PRIMARY KEY Index object +** so that the PRIMARY KEY is a covering index. The surplus +** columns are part of KeyInfo.nAllField and are not used for +** sorting or lookup or uniqueness checks. +** (6) Replace the rowid tail on all automatically generated UNIQUE +** indices with the PRIMARY KEY columns. +** +** For virtual tables, only (1) is performed. +*/ +static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){ + Index *pIdx; + Index *pPk; + int nPk; + int nExtra; + int i, j; + sqlite3 *db = pParse->db; + Vdbe *v = pParse->pVdbe; + + /* Mark every PRIMARY KEY column as NOT NULL (except for imposter tables) + */ + if( !db->init.imposterTable ){ + for(i=0; inCol; i++){ + if( (pTab->aCol[i].colFlags & COLFLAG_PRIMKEY)!=0 + && (pTab->aCol[i].notNull==OE_None) + ){ + pTab->aCol[i].notNull = OE_Abort; + } + } + pTab->tabFlags |= TF_HasNotNull; + } + + /* Convert the P3 operand of the OP_CreateBtree opcode from BTREE_INTKEY + ** into BTREE_BLOBKEY. + */ + assert( !pParse->bReturning ); + if( pParse->u1.cr.addrCrTab ){ + assert( v ); + sqlite3VdbeChangeP3(v, pParse->u1.cr.addrCrTab, BTREE_BLOBKEY); + } + + /* Locate the PRIMARY KEY index. Or, if this table was originally + ** an INTEGER PRIMARY KEY table, create a new PRIMARY KEY index. + */ + if( pTab->iPKey>=0 ){ + ExprList *pList; + Token ipkToken; + sqlite3TokenInit(&ipkToken, pTab->aCol[pTab->iPKey].zCnName); + pList = sqlite3ExprListAppend(pParse, 0, + sqlite3ExprAlloc(db, TK_ID, &ipkToken, 0)); + if( pList==0 ){ + pTab->tabFlags &= ~TF_WithoutRowid; + return; + } + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, pList->a[0].pExpr, &pTab->iPKey); + } + pList->a[0].fg.sortFlags = pParse->iPkSortOrder; + assert( pParse->pNewTable==pTab ); + pTab->iPKey = -1; + sqlite3CreateIndex(pParse, 0, 0, 0, pList, pTab->keyConf, 0, 0, 0, 0, + SQLITE_IDXTYPE_PRIMARYKEY); + if( pParse->nErr ){ + pTab->tabFlags &= ~TF_WithoutRowid; + return; + } + assert( db->mallocFailed==0 ); + pPk = sqlite3PrimaryKeyIndex(pTab); + assert( pPk->nKeyCol==1 ); + }else{ + pPk = sqlite3PrimaryKeyIndex(pTab); + assert( pPk!=0 ); + + /* + ** Remove all redundant columns from the PRIMARY KEY. For example, change + ** "PRIMARY KEY(a,b,a,b,c,b,c,d)" into just "PRIMARY KEY(a,b,c,d)". Later + ** code assumes the PRIMARY KEY contains no repeated columns. + */ + for(i=j=1; inKeyCol; i++){ + if( isDupColumn(pPk, j, pPk, i) ){ + pPk->nColumn--; + }else{ + testcase( hasColumn(pPk->aiColumn, j, pPk->aiColumn[i]) ); + pPk->azColl[j] = pPk->azColl[i]; + pPk->aSortOrder[j] = pPk->aSortOrder[i]; + pPk->aiColumn[j++] = pPk->aiColumn[i]; + } + } + pPk->nKeyCol = j; + } + assert( pPk!=0 ); + pPk->isCovering = 1; + if( !db->init.imposterTable ) pPk->uniqNotNull = 1; + nPk = pPk->nColumn = pPk->nKeyCol; + + /* Bypass the creation of the PRIMARY KEY btree and the sqlite_schema + ** table entry. This is only required if currently generating VDBE + ** code for a CREATE TABLE (not when parsing one as part of reading + ** a database schema). */ + if( v && pPk->tnum>0 ){ + assert( db->init.busy==0 ); + sqlite3VdbeChangeOpcode(v, (int)pPk->tnum, OP_Goto); + } + + /* The root page of the PRIMARY KEY is the table root page */ + pPk->tnum = pTab->tnum; + + /* Update the in-memory representation of all UNIQUE indices by converting + ** the final rowid column into one or more columns of the PRIMARY KEY. + */ + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + int n; + if( IsPrimaryKeyIndex(pIdx) ) continue; + for(i=n=0; inKeyCol, pPk, i) ){ + testcase( hasColumn(pIdx->aiColumn, pIdx->nKeyCol, pPk->aiColumn[i]) ); + n++; + } + } + if( n==0 ){ + /* This index is a superset of the primary key */ + pIdx->nColumn = pIdx->nKeyCol; + continue; + } + if( resizeIndexObject(pParse, pIdx, pIdx->nKeyCol+n) ) return; + for(i=0, j=pIdx->nKeyCol; inKeyCol, pPk, i) ){ + testcase( hasColumn(pIdx->aiColumn, pIdx->nKeyCol, pPk->aiColumn[i]) ); + pIdx->aiColumn[j] = pPk->aiColumn[i]; + pIdx->azColl[j] = pPk->azColl[i]; + if( pPk->aSortOrder[i] ){ + /* See ticket https://sqlite.org/src/info/bba7b69f9849b5bf */ + pIdx->bAscKeyBug = 1; + } + j++; + } + } + assert( pIdx->nColumn>=pIdx->nKeyCol+n ); + assert( pIdx->nColumn>=j ); + } + + /* Add all table columns to the PRIMARY KEY index + */ + nExtra = 0; + for(i=0; inCol; i++){ + if( !hasColumn(pPk->aiColumn, nPk, i) + && (pTab->aCol[i].colFlags & COLFLAG_VIRTUAL)==0 ) nExtra++; + } + if( resizeIndexObject(pParse, pPk, nPk+nExtra) ) return; + for(i=0, j=nPk; inCol; i++){ + if( !hasColumn(pPk->aiColumn, j, i) + && (pTab->aCol[i].colFlags & COLFLAG_VIRTUAL)==0 + ){ + assert( jnColumn ); + pPk->aiColumn[j] = i; + pPk->azColl[j] = sqlite3StrBINARY; + j++; + } + } + assert( pPk->nColumn==j ); + assert( pTab->nNVCol<=j ); + recomputeColumnsNotIndexed(pPk); +} + + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* +** Return true if pTab is a virtual table and zName is a shadow table name +** for that virtual table. +*/ +SQLITE_PRIVATE int sqlite3IsShadowTableOf(sqlite3 *db, Table *pTab, const char *zName){ + int nName; /* Length of zName */ + Module *pMod; /* Module for the virtual table */ + + if( !IsVirtual(pTab) ) return 0; + nName = sqlite3Strlen30(pTab->zName); + if( sqlite3_strnicmp(zName, pTab->zName, nName)!=0 ) return 0; + if( zName[nName]!='_' ) return 0; + pMod = (Module*)sqlite3HashFind(&db->aModule, pTab->u.vtab.azArg[0]); + if( pMod==0 ) return 0; + if( pMod->pModule->iVersion<3 ) return 0; + if( pMod->pModule->xShadowName==0 ) return 0; + return pMod->pModule->xShadowName(zName+nName+1); +} +#endif /* ifndef SQLITE_OMIT_VIRTUALTABLE */ + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* +** Table pTab is a virtual table. If it the virtual table implementation +** exists and has an xShadowName method, then loop over all other ordinary +** tables within the same schema looking for shadow tables of pTab, and mark +** any shadow tables seen using the TF_Shadow flag. +*/ +SQLITE_PRIVATE void sqlite3MarkAllShadowTablesOf(sqlite3 *db, Table *pTab){ + int nName; /* Length of pTab->zName */ + Module *pMod; /* Module for the virtual table */ + HashElem *k; /* For looping through the symbol table */ + + assert( IsVirtual(pTab) ); + pMod = (Module*)sqlite3HashFind(&db->aModule, pTab->u.vtab.azArg[0]); + if( pMod==0 ) return; + if( NEVER(pMod->pModule==0) ) return; + if( pMod->pModule->iVersion<3 ) return; + if( pMod->pModule->xShadowName==0 ) return; + assert( pTab->zName!=0 ); + nName = sqlite3Strlen30(pTab->zName); + for(k=sqliteHashFirst(&pTab->pSchema->tblHash); k; k=sqliteHashNext(k)){ + Table *pOther = sqliteHashData(k); + assert( pOther->zName!=0 ); + if( !IsOrdinaryTable(pOther) ) continue; + if( pOther->tabFlags & TF_Shadow ) continue; + if( sqlite3StrNICmp(pOther->zName, pTab->zName, nName)==0 + && pOther->zName[nName]=='_' + && pMod->pModule->xShadowName(pOther->zName+nName+1) + ){ + pOther->tabFlags |= TF_Shadow; + } + } +} +#endif /* ifndef SQLITE_OMIT_VIRTUALTABLE */ + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* +** Return true if zName is a shadow table name in the current database +** connection. +** +** zName is temporarily modified while this routine is running, but is +** restored to its original value prior to this routine returning. +*/ +SQLITE_PRIVATE int sqlite3ShadowTableName(sqlite3 *db, const char *zName){ + char *zTail; /* Pointer to the last "_" in zName */ + Table *pTab; /* Table that zName is a shadow of */ + zTail = strrchr(zName, '_'); + if( zTail==0 ) return 0; + *zTail = 0; + pTab = sqlite3FindTable(db, zName, 0); + *zTail = '_'; + if( pTab==0 ) return 0; + if( !IsVirtual(pTab) ) return 0; + return sqlite3IsShadowTableOf(db, pTab, zName); +} +#endif /* ifndef SQLITE_OMIT_VIRTUALTABLE */ + + +#ifdef SQLITE_DEBUG +/* +** Mark all nodes of an expression as EP_Immutable, indicating that +** they should not be changed. Expressions attached to a table or +** index definition are tagged this way to help ensure that we do +** not pass them into code generator routines by mistake. +*/ +static int markImmutableExprStep(Walker *pWalker, Expr *pExpr){ + (void)pWalker; + ExprSetVVAProperty(pExpr, EP_Immutable); + return WRC_Continue; +} +static void markExprListImmutable(ExprList *pList){ + if( pList ){ + Walker w; + memset(&w, 0, sizeof(w)); + w.xExprCallback = markImmutableExprStep; + w.xSelectCallback = sqlite3SelectWalkNoop; + w.xSelectCallback2 = 0; + sqlite3WalkExprList(&w, pList); + } +} +#else +#define markExprListImmutable(X) /* no-op */ +#endif /* SQLITE_DEBUG */ + + +/* +** This routine is called to report the final ")" that terminates +** a CREATE TABLE statement. +** +** The table structure that other action routines have been building +** is added to the internal hash tables, assuming no errors have +** occurred. +** +** An entry for the table is made in the schema table on disk, unless +** this is a temporary table or db->init.busy==1. When db->init.busy==1 +** it means we are reading the sqlite_schema table because we just +** connected to the database or because the sqlite_schema table has +** recently changed, so the entry for this table already exists in +** the sqlite_schema table. We do not want to create it again. +** +** If the pSelect argument is not NULL, it means that this routine +** was called to create a table generated from a +** "CREATE TABLE ... AS SELECT ..." statement. The column names of +** the new table will match the result set of the SELECT. +*/ +SQLITE_PRIVATE void sqlite3EndTable( + Parse *pParse, /* Parse context */ + Token *pCons, /* The ',' token after the last column defn. */ + Token *pEnd, /* The ')' before options in the CREATE TABLE */ + u32 tabOpts, /* Extra table options. Usually 0. */ + Select *pSelect /* Select from a "CREATE ... AS SELECT" */ +){ + Table *p; /* The new table */ + sqlite3 *db = pParse->db; /* The database connection */ + int iDb; /* Database in which the table lives */ + Index *pIdx; /* An implied index of the table */ + + if( pEnd==0 && pSelect==0 ){ + return; + } + p = pParse->pNewTable; + if( p==0 ) return; + + if( pSelect==0 && sqlite3ShadowTableName(db, p->zName) ){ + p->tabFlags |= TF_Shadow; + } + + /* If the db->init.busy is 1 it means we are reading the SQL off the + ** "sqlite_schema" or "sqlite_temp_schema" table on the disk. + ** So do not write to the disk again. Extract the root page number + ** for the table from the db->init.newTnum field. (The page number + ** should have been put there by the sqliteOpenCb routine.) + ** + ** If the root page number is 1, that means this is the sqlite_schema + ** table itself. So mark it read-only. + */ + if( db->init.busy ){ + if( pSelect || (!IsOrdinaryTable(p) && db->init.newTnum) ){ + sqlite3ErrorMsg(pParse, ""); + return; + } + p->tnum = db->init.newTnum; + if( p->tnum==1 ) p->tabFlags |= TF_Readonly; + } + + /* Special processing for tables that include the STRICT keyword: + ** + ** * Do not allow custom column datatypes. Every column must have + ** a datatype that is one of INT, INTEGER, REAL, TEXT, or BLOB. + ** + ** * If a PRIMARY KEY is defined, other than the INTEGER PRIMARY KEY, + ** then all columns of the PRIMARY KEY must have a NOT NULL + ** constraint. + */ + if( tabOpts & TF_Strict ){ + int ii; + p->tabFlags |= TF_Strict; + for(ii=0; iinCol; ii++){ + Column *pCol = &p->aCol[ii]; + if( pCol->eCType==COLTYPE_CUSTOM ){ + if( pCol->colFlags & COLFLAG_HASTYPE ){ + sqlite3ErrorMsg(pParse, + "unknown datatype for %s.%s: \"%s\"", + p->zName, pCol->zCnName, sqlite3ColumnType(pCol, "") + ); + }else{ + sqlite3ErrorMsg(pParse, "missing datatype for %s.%s", + p->zName, pCol->zCnName); + } + return; + }else if( pCol->eCType==COLTYPE_ANY ){ + pCol->affinity = SQLITE_AFF_BLOB; + } + if( (pCol->colFlags & COLFLAG_PRIMKEY)!=0 + && p->iPKey!=ii + && pCol->notNull == OE_None + ){ + pCol->notNull = OE_Abort; + p->tabFlags |= TF_HasNotNull; + } + } + } + + assert( (p->tabFlags & TF_HasPrimaryKey)==0 + || p->iPKey>=0 || sqlite3PrimaryKeyIndex(p)!=0 ); + assert( (p->tabFlags & TF_HasPrimaryKey)!=0 + || (p->iPKey<0 && sqlite3PrimaryKeyIndex(p)==0) ); + + /* Special processing for WITHOUT ROWID Tables */ + if( tabOpts & TF_WithoutRowid ){ + if( (p->tabFlags & TF_Autoincrement) ){ + sqlite3ErrorMsg(pParse, + "AUTOINCREMENT not allowed on WITHOUT ROWID tables"); + return; + } + if( (p->tabFlags & TF_HasPrimaryKey)==0 ){ + sqlite3ErrorMsg(pParse, "PRIMARY KEY missing on table %s", p->zName); + return; + } + p->tabFlags |= TF_WithoutRowid | TF_NoVisibleRowid; + convertToWithoutRowidTable(pParse, p); + } + iDb = sqlite3SchemaToIndex(db, p->pSchema); + +#ifndef SQLITE_OMIT_CHECK + /* Resolve names in all CHECK constraint expressions. + */ + if( p->pCheck ){ + sqlite3ResolveSelfReference(pParse, p, NC_IsCheck, 0, p->pCheck); + if( pParse->nErr ){ + /* If errors are seen, delete the CHECK constraints now, else they might + ** actually be used if PRAGMA writable_schema=ON is set. */ + sqlite3ExprListDelete(db, p->pCheck); + p->pCheck = 0; + }else{ + markExprListImmutable(p->pCheck); + } + } +#endif /* !defined(SQLITE_OMIT_CHECK) */ +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + if( p->tabFlags & TF_HasGenerated ){ + int ii, nNG = 0; + testcase( p->tabFlags & TF_HasVirtual ); + testcase( p->tabFlags & TF_HasStored ); + for(ii=0; iinCol; ii++){ + u32 colFlags = p->aCol[ii].colFlags; + if( (colFlags & COLFLAG_GENERATED)!=0 ){ + Expr *pX = sqlite3ColumnExpr(p, &p->aCol[ii]); + testcase( colFlags & COLFLAG_VIRTUAL ); + testcase( colFlags & COLFLAG_STORED ); + if( sqlite3ResolveSelfReference(pParse, p, NC_GenCol, pX, 0) ){ + /* If there are errors in resolving the expression, change the + ** expression to a NULL. This prevents code generators that operate + ** on the expression from inserting extra parts into the expression + ** tree that have been allocated from lookaside memory, which is + ** illegal in a schema and will lead to errors or heap corruption + ** when the database connection closes. */ + sqlite3ColumnSetExpr(pParse, p, &p->aCol[ii], + sqlite3ExprAlloc(db, TK_NULL, 0, 0)); + } + }else{ + nNG++; + } + } + if( nNG==0 ){ + sqlite3ErrorMsg(pParse, "must have at least one non-generated column"); + return; + } + } +#endif + + /* Estimate the average row size for the table and for all implied indices */ + estimateTableWidth(p); + for(pIdx=p->pIndex; pIdx; pIdx=pIdx->pNext){ + estimateIndexWidth(pIdx); + } + + /* If not initializing, then create a record for the new table + ** in the schema table of the database. + ** + ** If this is a TEMPORARY table, write the entry into the auxiliary + ** file instead of into the main database file. + */ + if( !db->init.busy ){ + int n; + Vdbe *v; + char *zType; /* "view" or "table" */ + char *zType2; /* "VIEW" or "TABLE" */ + char *zStmt; /* Text of the CREATE TABLE or CREATE VIEW statement */ + + v = sqlite3GetVdbe(pParse); + if( NEVER(v==0) ) return; + + sqlite3VdbeAddOp1(v, OP_Close, 0); + + /* + ** Initialize zType for the new view or table. + */ + if( IsOrdinaryTable(p) ){ + /* A regular table */ + zType = "table"; + zType2 = "TABLE"; +#ifndef SQLITE_OMIT_VIEW + }else{ + /* A view */ + zType = "view"; + zType2 = "VIEW"; +#endif + } + + /* If this is a CREATE TABLE xx AS SELECT ..., execute the SELECT + ** statement to populate the new table. The root-page number for the + ** new table is in register pParse->u1.cr.regRoot. + ** + ** Once the SELECT has been coded by sqlite3Select(), it is in a + ** suitable state to query for the column names and types to be used + ** by the new table. + ** + ** A shared-cache write-lock is not required to write to the new table, + ** as a schema-lock must have already been obtained to create it. Since + ** a schema-lock excludes all other database users, the write-lock would + ** be redundant. + */ + if( pSelect ){ + SelectDest dest; /* Where the SELECT should store results */ + int regYield; /* Register holding co-routine entry-point */ + int addrTop; /* Top of the co-routine */ + int regRec; /* A record to be insert into the new table */ + int regRowid; /* Rowid of the next row to insert */ + int addrInsLoop; /* Top of the loop for inserting rows */ + Table *pSelTab; /* A table that describes the SELECT results */ + int iCsr; /* Write cursor on the new table */ + + if( IN_SPECIAL_PARSE ){ + pParse->rc = SQLITE_ERROR; + pParse->nErr++; + return; + } + iCsr = pParse->nTab++; + regYield = ++pParse->nMem; + regRec = ++pParse->nMem; + regRowid = ++pParse->nMem; + sqlite3MayAbort(pParse); + assert( pParse->isCreate ); + sqlite3VdbeAddOp3(v, OP_OpenWrite, iCsr, pParse->u1.cr.regRoot, iDb); + sqlite3VdbeChangeP5(v, OPFLAG_P2ISREG); + addrTop = sqlite3VdbeCurrentAddr(v) + 1; + sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, addrTop); + if( pParse->nErr ) return; + pSelTab = sqlite3ResultSetOfSelect(pParse, pSelect, SQLITE_AFF_BLOB); + if( pSelTab==0 ) return; + assert( p->aCol==0 ); + p->nCol = p->nNVCol = pSelTab->nCol; + p->aCol = pSelTab->aCol; + pSelTab->nCol = 0; + pSelTab->aCol = 0; + sqlite3DeleteTable(db, pSelTab); + sqlite3SelectDestInit(&dest, SRT_Coroutine, regYield); + sqlite3Select(pParse, pSelect, &dest); + if( pParse->nErr ) return; + sqlite3VdbeEndCoroutine(v, regYield); + sqlite3VdbeJumpHere(v, addrTop - 1); + addrInsLoop = sqlite3VdbeAddOp1(v, OP_Yield, dest.iSDParm); + VdbeCoverage(v); + sqlite3VdbeAddOp3(v, OP_MakeRecord, dest.iSdst, dest.nSdst, regRec); + sqlite3TableAffinity(v, p, 0); + sqlite3VdbeAddOp2(v, OP_NewRowid, iCsr, regRowid); + sqlite3VdbeAddOp3(v, OP_Insert, iCsr, regRec, regRowid); + sqlite3VdbeGoto(v, addrInsLoop); + sqlite3VdbeJumpHere(v, addrInsLoop); + sqlite3VdbeAddOp1(v, OP_Close, iCsr); + } + + /* Compute the complete text of the CREATE statement */ + if( pSelect ){ + zStmt = createTableStmt(db, p); + }else{ + Token *pEnd2 = tabOpts ? &pParse->sLastToken : pEnd; + n = (int)(pEnd2->z - pParse->sNameToken.z); + if( pEnd2->z[0]!=';' ) n += pEnd2->n; + zStmt = sqlite3MPrintf(db, + "CREATE %s %.*s", zType2, n, pParse->sNameToken.z + ); + } + + /* A slot for the record has already been allocated in the + ** schema table. We just need to update that slot with all + ** the information we've collected. + */ + assert( pParse->isCreate ); + sqlite3NestedParse(pParse, + "UPDATE %Q." LEGACY_SCHEMA_TABLE + " SET type='%s', name=%Q, tbl_name=%Q, rootpage=#%d, sql=%Q" + " WHERE rowid=#%d", + db->aDb[iDb].zDbSName, + zType, + p->zName, + p->zName, + pParse->u1.cr.regRoot, + zStmt, + pParse->u1.cr.regRowid + ); + sqlite3DbFree(db, zStmt); + sqlite3ChangeCookie(pParse, iDb); + +#ifndef SQLITE_OMIT_AUTOINCREMENT + /* Check to see if we need to create an sqlite_sequence table for + ** keeping track of autoincrement keys. + */ + if( (p->tabFlags & TF_Autoincrement)!=0 && !IN_SPECIAL_PARSE ){ + Db *pDb = &db->aDb[iDb]; + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + if( pDb->pSchema->pSeqTab==0 ){ + sqlite3NestedParse(pParse, + "CREATE TABLE %Q.sqlite_sequence(name,seq)", + pDb->zDbSName + ); + } + } +#endif + + /* Reparse everything to update our internal data structures */ + sqlite3VdbeAddParseSchemaOp(v, iDb, + sqlite3MPrintf(db, "tbl_name='%q' AND type!='trigger'", p->zName),0); + + /* Test for cycles in generated columns and illegal expressions + ** in CHECK constraints and in DEFAULT clauses. */ + if( p->tabFlags & TF_HasGenerated ){ + sqlite3VdbeAddOp4(v, OP_SqlExec, 0x0001, 0, 0, + sqlite3MPrintf(db, "SELECT*FROM\"%w\".\"%w\"", + db->aDb[iDb].zDbSName, p->zName), P4_DYNAMIC); + } + } + + /* Add the table to the in-memory representation of the database. + */ + if( db->init.busy ){ + Table *pOld; + Schema *pSchema = p->pSchema; + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + assert( HasRowid(p) || p->iPKey<0 ); + pOld = sqlite3HashInsert(&pSchema->tblHash, p->zName, p); + if( pOld ){ + assert( p==pOld ); /* Malloc must have failed inside HashInsert() */ + sqlite3OomFault(db); + return; + } + pParse->pNewTable = 0; + db->mDbFlags |= DBFLAG_SchemaChange; + + /* If this is the magic sqlite_sequence table used by autoincrement, + ** then record a pointer to this table in the main database structure + ** so that INSERT can find the table easily. */ + assert( !pParse->nested ); +#ifndef SQLITE_OMIT_AUTOINCREMENT + if( strcmp(p->zName, "sqlite_sequence")==0 ){ + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + p->pSchema->pSeqTab = p; + } +#endif + } + +#ifndef SQLITE_OMIT_ALTERTABLE + if( !pSelect && IsOrdinaryTable(p) ){ + assert( pCons && pEnd ); + if( pCons->z==0 ){ + pCons = pEnd; + } + p->u.tab.addColOffset = 13 + (int)(pCons->z - pParse->sNameToken.z); + } +#endif +} + +#ifndef SQLITE_OMIT_VIEW +/* +** The parser calls this routine in order to create a new VIEW +*/ +SQLITE_PRIVATE void sqlite3CreateView( + Parse *pParse, /* The parsing context */ + Token *pBegin, /* The CREATE token that begins the statement */ + Token *pName1, /* The token that holds the name of the view */ + Token *pName2, /* The token that holds the name of the view */ + ExprList *pCNames, /* Optional list of view column names */ + Select *pSelect, /* A SELECT statement that will become the new view */ + int isTemp, /* TRUE for a TEMPORARY view */ + int noErr /* Suppress error messages if VIEW already exists */ +){ + Table *p; + int n; + const char *z; + Token sEnd; + DbFixer sFix; + Token *pName = 0; + int iDb; + sqlite3 *db = pParse->db; + + if( pParse->nVar>0 ){ + sqlite3ErrorMsg(pParse, "parameters are not allowed in views"); + goto create_view_fail; + } + sqlite3StartTable(pParse, pName1, pName2, isTemp, 1, 0, noErr); + p = pParse->pNewTable; + if( p==0 || pParse->nErr ) goto create_view_fail; + + /* Legacy versions of SQLite allowed the use of the magic "rowid" column + ** on a view, even though views do not have rowids. The following flag + ** setting fixes this problem. But the fix can be disabled by compiling + ** with -DSQLITE_ALLOW_ROWID_IN_VIEW in case there are legacy apps that + ** depend upon the old buggy behavior. The ability can also be toggled + ** using sqlite3_config(SQLITE_CONFIG_ROWID_IN_VIEW,...) */ +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + p->tabFlags |= sqlite3Config.mNoVisibleRowid; /* Optional. Allow by default */ +#else + p->tabFlags |= TF_NoVisibleRowid; /* Never allow rowid in view */ +#endif + + sqlite3TwoPartName(pParse, pName1, pName2, &pName); + iDb = sqlite3SchemaToIndex(db, p->pSchema); + sqlite3FixInit(&sFix, pParse, iDb, "view", pName); + if( sqlite3FixSelect(&sFix, pSelect) ) goto create_view_fail; + + /* Make a copy of the entire SELECT statement that defines the view. + ** This will force all the Expr.token.z values to be dynamically + ** allocated rather than point to the input string - which means that + ** they will persist after the current sqlite3_exec() call returns. + */ + pSelect->selFlags |= SF_View; + if( IN_RENAME_OBJECT ){ + p->u.view.pSelect = pSelect; + pSelect = 0; + }else{ + p->u.view.pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); + } + p->pCheck = sqlite3ExprListDup(db, pCNames, EXPRDUP_REDUCE); + p->eTabType = TABTYP_VIEW; + if( db->mallocFailed ) goto create_view_fail; + + /* Locate the end of the CREATE VIEW statement. Make sEnd point to + ** the end. + */ + sEnd = pParse->sLastToken; + assert( sEnd.z[0]!=0 || sEnd.n==0 ); + if( sEnd.z[0]!=';' ){ + sEnd.z += sEnd.n; + } + sEnd.n = 0; + n = (int)(sEnd.z - pBegin->z); + assert( n>0 ); + z = pBegin->z; + while( sqlite3Isspace(z[n-1]) ){ n--; } + sEnd.z = &z[n-1]; + sEnd.n = 1; + + /* Use sqlite3EndTable() to add the view to the schema table */ + sqlite3EndTable(pParse, 0, &sEnd, 0, 0); + +create_view_fail: + sqlite3SelectDelete(db, pSelect); + if( IN_RENAME_OBJECT ){ + sqlite3RenameExprlistUnmap(pParse, pCNames); + } + sqlite3ExprListDelete(db, pCNames); + return; +} +#endif /* SQLITE_OMIT_VIEW */ + +#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) +/* +** The Table structure pTable is really a VIEW. Fill in the names of +** the columns of the view in the pTable structure. Return non-zero if +** there are errors. If an error is seen an error message is left +** in pParse->zErrMsg. +*/ +static SQLITE_NOINLINE int viewGetColumnNames(Parse *pParse, Table *pTable){ + Table *pSelTab; /* A fake table from which we get the result set */ + Select *pSel; /* Copy of the SELECT that implements the view */ + int nErr = 0; /* Number of errors encountered */ + sqlite3 *db = pParse->db; /* Database connection for malloc errors */ +#ifndef SQLITE_OMIT_VIRTUALTABLE + int rc; +#endif +#ifndef SQLITE_OMIT_AUTHORIZATION + sqlite3_xauth xAuth; /* Saved xAuth pointer */ +#endif + + assert( pTable ); + +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pTable) ){ + db->nSchemaLock++; + rc = sqlite3VtabCallConnect(pParse, pTable); + db->nSchemaLock--; + return rc; + } +#endif + +#ifndef SQLITE_OMIT_VIEW + /* A positive nCol means the columns names for this view are + ** already known. This routine is not called unless either the + ** table is virtual or nCol is zero. + */ + assert( pTable->nCol<=0 ); + + /* A negative nCol is a special marker meaning that we are currently + ** trying to compute the column names. If we enter this routine with + ** a negative nCol, it means two or more views form a loop, like this: + ** + ** CREATE VIEW one AS SELECT * FROM two; + ** CREATE VIEW two AS SELECT * FROM one; + ** + ** Actually, the error above is now caught prior to reaching this point. + ** But the following test is still important as it does come up + ** in the following: + ** + ** CREATE TABLE main.ex1(a); + ** CREATE TEMP VIEW ex1 AS SELECT a FROM ex1; + ** SELECT * FROM temp.ex1; + */ + if( pTable->nCol<0 ){ + sqlite3ErrorMsg(pParse, "view %s is circularly defined", pTable->zName); + return 1; + } + assert( pTable->nCol>=0 ); + + /* If we get this far, it means we need to compute the table names. + ** Note that the call to sqlite3ResultSetOfSelect() will expand any + ** "*" elements in the results set of the view and will assign cursors + ** to the elements of the FROM clause. But we do not want these changes + ** to be permanent. So the computation is done on a copy of the SELECT + ** statement that defines the view. + */ + assert( IsView(pTable) ); + pSel = sqlite3SelectDup(db, pTable->u.view.pSelect, 0); + if( pSel ){ + u8 eParseMode = pParse->eParseMode; + int nTab = pParse->nTab; + int nSelect = pParse->nSelect; + pParse->eParseMode = PARSE_MODE_NORMAL; + sqlite3SrcListAssignCursors(pParse, pSel->pSrc); + pTable->nCol = -1; + DisableLookaside; +#ifndef SQLITE_OMIT_AUTHORIZATION + xAuth = db->xAuth; + db->xAuth = 0; + pSelTab = sqlite3ResultSetOfSelect(pParse, pSel, SQLITE_AFF_NONE); + db->xAuth = xAuth; +#else + pSelTab = sqlite3ResultSetOfSelect(pParse, pSel, SQLITE_AFF_NONE); +#endif + pParse->nTab = nTab; + pParse->nSelect = nSelect; + if( pSelTab==0 ){ + pTable->nCol = 0; + nErr++; + }else if( pTable->pCheck ){ + /* CREATE VIEW name(arglist) AS ... + ** The names of the columns in the table are taken from + ** arglist which is stored in pTable->pCheck. The pCheck field + ** normally holds CHECK constraints on an ordinary table, but for + ** a VIEW it holds the list of column names. + */ + sqlite3ColumnsFromExprList(pParse, pTable->pCheck, + &pTable->nCol, &pTable->aCol); + if( pParse->nErr==0 + && pTable->nCol==pSel->pEList->nExpr + ){ + assert( db->mallocFailed==0 ); + sqlite3SubqueryColumnTypes(pParse, pTable, pSel, SQLITE_AFF_NONE); + } + }else{ + /* CREATE VIEW name AS... without an argument list. Construct + ** the column names from the SELECT statement that defines the view. + */ + assert( pTable->aCol==0 ); + pTable->nCol = pSelTab->nCol; + pTable->aCol = pSelTab->aCol; + pTable->tabFlags |= (pSelTab->tabFlags & COLFLAG_NOINSERT); + pSelTab->nCol = 0; + pSelTab->aCol = 0; + assert( sqlite3SchemaMutexHeld(db, 0, pTable->pSchema) ); + } + pTable->nNVCol = pTable->nCol; + sqlite3DeleteTable(db, pSelTab); + sqlite3SelectDelete(db, pSel); + EnableLookaside; + pParse->eParseMode = eParseMode; + } else { + nErr++; + } + pTable->pSchema->schemaFlags |= DB_UnresetViews; + if( db->mallocFailed ){ + sqlite3DeleteColumnNames(db, pTable); + } +#endif /* SQLITE_OMIT_VIEW */ + return nErr + pParse->nErr; +} +SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){ + assert( pTable!=0 ); + if( !IsVirtual(pTable) && pTable->nCol>0 ) return 0; + return viewGetColumnNames(pParse, pTable); +} +#endif /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */ + +#ifndef SQLITE_OMIT_VIEW +/* +** Clear the column names from every VIEW in database idx. +*/ +static void sqliteViewResetAll(sqlite3 *db, int idx){ + HashElem *i; + assert( sqlite3SchemaMutexHeld(db, idx, 0) ); + if( !DbHasProperty(db, idx, DB_UnresetViews) ) return; + for(i=sqliteHashFirst(&db->aDb[idx].pSchema->tblHash); i;i=sqliteHashNext(i)){ + Table *pTab = sqliteHashData(i); + if( IsView(pTab) ){ + sqlite3DeleteColumnNames(db, pTab); + } + } + DbClearProperty(db, idx, DB_UnresetViews); +} +#else +# define sqliteViewResetAll(A,B) +#endif /* SQLITE_OMIT_VIEW */ + +/* +** This function is called by the VDBE to adjust the internal schema +** used by SQLite when the btree layer moves a table root page. The +** root-page of a table or index in database iDb has changed from iFrom +** to iTo. +** +** Ticket #1728: The symbol table might still contain information +** on tables and/or indices that are the process of being deleted. +** If you are unlucky, one of those deleted indices or tables might +** have the same rootpage number as the real table or index that is +** being moved. So we cannot stop searching after the first match +** because the first match might be for one of the deleted indices +** or tables and not the table/index that is actually being moved. +** We must continue looping until all tables and indices with +** rootpage==iFrom have been converted to have a rootpage of iTo +** in order to be certain that we got the right one. +*/ +#ifndef SQLITE_OMIT_AUTOVACUUM +SQLITE_PRIVATE void sqlite3RootPageMoved(sqlite3 *db, int iDb, Pgno iFrom, Pgno iTo){ + HashElem *pElem; + Hash *pHash; + Db *pDb; + + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + pDb = &db->aDb[iDb]; + pHash = &pDb->pSchema->tblHash; + for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){ + Table *pTab = sqliteHashData(pElem); + if( pTab->tnum==iFrom ){ + pTab->tnum = iTo; + } + } + pHash = &pDb->pSchema->idxHash; + for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){ + Index *pIdx = sqliteHashData(pElem); + if( pIdx->tnum==iFrom ){ + pIdx->tnum = iTo; + } + } +} +#endif + +/* +** Write code to erase the table with root-page iTable from database iDb. +** Also write code to modify the sqlite_schema table and internal schema +** if a root-page of another table is moved by the btree-layer whilst +** erasing iTable (this can happen with an auto-vacuum database). +*/ +static void destroyRootPage(Parse *pParse, int iTable, int iDb){ + Vdbe *v = sqlite3GetVdbe(pParse); + int r1 = sqlite3GetTempReg(pParse); + if( iTable<2 ) sqlite3ErrorMsg(pParse, "corrupt schema"); + sqlite3VdbeAddOp3(v, OP_Destroy, iTable, r1, iDb); + sqlite3MayAbort(pParse); +#ifndef SQLITE_OMIT_AUTOVACUUM + /* OP_Destroy stores an in integer r1. If this integer + ** is non-zero, then it is the root page number of a table moved to + ** location iTable. The following code modifies the sqlite_schema table to + ** reflect this. + ** + ** The "#NNN" in the SQL is a special constant that means whatever value + ** is in register NNN. See grammar rules associated with the TK_REGISTER + ** token for additional information. + */ + sqlite3NestedParse(pParse, + "UPDATE %Q." LEGACY_SCHEMA_TABLE + " SET rootpage=%d WHERE #%d AND rootpage=#%d", + pParse->db->aDb[iDb].zDbSName, iTable, r1, r1); +#endif + sqlite3ReleaseTempReg(pParse, r1); +} + +/* +** Write VDBE code to erase table pTab and all associated indices on disk. +** Code to update the sqlite_schema tables and internal schema definitions +** in case a root-page belonging to another table is moved by the btree layer +** is also added (this can happen with an auto-vacuum database). +*/ +static void destroyTable(Parse *pParse, Table *pTab){ + /* If the database may be auto-vacuum capable (if SQLITE_OMIT_AUTOVACUUM + ** is not defined), then it is important to call OP_Destroy on the + ** table and index root-pages in order, starting with the numerically + ** largest root-page number. This guarantees that none of the root-pages + ** to be destroyed is relocated by an earlier OP_Destroy. i.e. if the + ** following were coded: + ** + ** OP_Destroy 4 0 + ** ... + ** OP_Destroy 5 0 + ** + ** and root page 5 happened to be the largest root-page number in the + ** database, then root page 5 would be moved to page 4 by the + ** "OP_Destroy 4 0" opcode. The subsequent "OP_Destroy 5 0" would hit + ** a free-list page. + */ + Pgno iTab = pTab->tnum; + Pgno iDestroyed = 0; + + while( 1 ){ + Index *pIdx; + Pgno iLargest = 0; + + if( iDestroyed==0 || iTabpIndex; pIdx; pIdx=pIdx->pNext){ + Pgno iIdx = pIdx->tnum; + assert( pIdx->pSchema==pTab->pSchema ); + if( (iDestroyed==0 || (iIdxiLargest ){ + iLargest = iIdx; + } + } + if( iLargest==0 ){ + return; + }else{ + int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + assert( iDb>=0 && iDbdb->nDb ); + destroyRootPage(pParse, iLargest, iDb); + iDestroyed = iLargest; + } + } +} + +/* +** Remove entries from the sqlite_statN tables (for N in (1,2,3)) +** after a DROP INDEX or DROP TABLE command. +*/ +static void sqlite3ClearStatTables( + Parse *pParse, /* The parsing context */ + int iDb, /* The database number */ + const char *zType, /* "idx" or "tbl" */ + const char *zName /* Name of index or table */ +){ + int i; + const char *zDbName = pParse->db->aDb[iDb].zDbSName; + for(i=1; i<=4; i++){ + char zTab[24]; + sqlite3_snprintf(sizeof(zTab),zTab,"sqlite_stat%d",i); + if( sqlite3FindTable(pParse->db, zTab, zDbName) ){ + sqlite3NestedParse(pParse, + "DELETE FROM %Q.%s WHERE %s=%Q", + zDbName, zTab, zType, zName + ); + } + } +} + +/* +** Generate code to drop a table. +*/ +SQLITE_PRIVATE void sqlite3CodeDropTable(Parse *pParse, Table *pTab, int iDb, int isView){ + Vdbe *v; + sqlite3 *db = pParse->db; + Trigger *pTrigger; + Db *pDb = &db->aDb[iDb]; + + v = sqlite3GetVdbe(pParse); + assert( v!=0 ); + sqlite3BeginWriteOperation(pParse, 1, iDb); + +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pTab) ){ + sqlite3VdbeAddOp0(v, OP_VBegin); + } +#endif + + /* Drop all triggers associated with the table being dropped. Code + ** is generated to remove entries from sqlite_schema and/or + ** sqlite_temp_schema if required. + */ + pTrigger = sqlite3TriggerList(pParse, pTab); + while( pTrigger ){ + assert( pTrigger->pSchema==pTab->pSchema || + pTrigger->pSchema==db->aDb[1].pSchema ); + sqlite3DropTriggerPtr(pParse, pTrigger); + pTrigger = pTrigger->pNext; + } + +#ifndef SQLITE_OMIT_AUTOINCREMENT + /* Remove any entries of the sqlite_sequence table associated with + ** the table being dropped. This is done before the table is dropped + ** at the btree level, in case the sqlite_sequence table needs to + ** move as a result of the drop (can happen in auto-vacuum mode). + */ + if( pTab->tabFlags & TF_Autoincrement ){ + sqlite3NestedParse(pParse, + "DELETE FROM %Q.sqlite_sequence WHERE name=%Q", + pDb->zDbSName, pTab->zName + ); + } +#endif + + /* Drop all entries in the schema table that refer to the + ** table. The program name loops through the schema table and deletes + ** every row that refers to a table of the same name as the one being + ** dropped. Triggers are handled separately because a trigger can be + ** created in the temp database that refers to a table in another + ** database. + */ + sqlite3NestedParse(pParse, + "DELETE FROM %Q." LEGACY_SCHEMA_TABLE + " WHERE tbl_name=%Q and type!='trigger'", + pDb->zDbSName, pTab->zName); + if( !isView && !IsVirtual(pTab) ){ + destroyTable(pParse, pTab); + } + + /* Remove the table entry from SQLite's internal schema and modify + ** the schema cookie. + */ + if( IsVirtual(pTab) ){ + sqlite3VdbeAddOp4(v, OP_VDestroy, iDb, 0, 0, pTab->zName, 0); + sqlite3MayAbort(pParse); + } + sqlite3VdbeAddOp4(v, OP_DropTable, iDb, 0, 0, pTab->zName, 0); + sqlite3ChangeCookie(pParse, iDb); + sqliteViewResetAll(db, iDb); +} + +/* +** Return TRUE if shadow tables should be read-only in the current +** context. +*/ +SQLITE_PRIVATE int sqlite3ReadOnlyShadowTables(sqlite3 *db){ +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( (db->flags & SQLITE_Defensive)!=0 + && db->pVtabCtx==0 + && db->nVdbeExec==0 + && !sqlite3VtabInSync(db) + ){ + return 1; + } +#endif + return 0; +} + +/* +** Return true if it is not allowed to drop the given table +*/ +static int tableMayNotBeDropped(sqlite3 *db, Table *pTab){ + if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 ){ + if( sqlite3StrNICmp(pTab->zName+7, "stat", 4)==0 ) return 0; + if( sqlite3StrNICmp(pTab->zName+7, "parameters", 10)==0 ) return 0; + return 1; + } + if( (pTab->tabFlags & TF_Shadow)!=0 && sqlite3ReadOnlyShadowTables(db) ){ + return 1; + } + if( pTab->tabFlags & TF_Eponymous ){ + return 1; + } + return 0; +} + +/* +** This routine is called to do the work of a DROP TABLE statement. +** pName is the name of the table to be dropped. +*/ +SQLITE_PRIVATE void sqlite3DropTable(Parse *pParse, SrcList *pName, int isView, int noErr){ + Table *pTab; + Vdbe *v; + sqlite3 *db = pParse->db; + int iDb; + + if( db->mallocFailed ){ + goto exit_drop_table; + } + assert( pParse->nErr==0 ); + assert( pName->nSrc==1 ); + assert( pName->a[0].fg.fixedSchema==0 ); + assert( pName->a[0].fg.isSubquery==0 ); + if( sqlite3ReadSchema(pParse) ) goto exit_drop_table; + if( noErr ) db->suppressErr++; + assert( isView==0 || isView==LOCATE_VIEW ); + pTab = sqlite3LocateTableItem(pParse, isView, &pName->a[0]); + if( noErr ) db->suppressErr--; + + if( pTab==0 ){ + if( noErr ){ + sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].u4.zDatabase); + sqlite3ForceNotReadOnly(pParse); + } + goto exit_drop_table; + } + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + assert( iDb>=0 && iDbnDb ); + + /* If pTab is a virtual table, call ViewGetColumnNames() to ensure + ** it is initialized. + */ + if( IsVirtual(pTab) && sqlite3ViewGetColumnNames(pParse, pTab) ){ + goto exit_drop_table; + } +#ifndef SQLITE_OMIT_AUTHORIZATION + { + int code; + const char *zTab = SCHEMA_TABLE(iDb); + const char *zDb = db->aDb[iDb].zDbSName; + const char *zArg2 = 0; + if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb)){ + goto exit_drop_table; + } + if( isView ){ + if( !OMIT_TEMPDB && iDb==1 ){ + code = SQLITE_DROP_TEMP_VIEW; + }else{ + code = SQLITE_DROP_VIEW; + } +#ifndef SQLITE_OMIT_VIRTUALTABLE + }else if( IsVirtual(pTab) ){ + code = SQLITE_DROP_VTABLE; + zArg2 = sqlite3GetVTable(db, pTab)->pMod->zName; +#endif + }else{ + if( !OMIT_TEMPDB && iDb==1 ){ + code = SQLITE_DROP_TEMP_TABLE; + }else{ + code = SQLITE_DROP_TABLE; + } + } + if( sqlite3AuthCheck(pParse, code, pTab->zName, zArg2, zDb) ){ + goto exit_drop_table; + } + if( sqlite3AuthCheck(pParse, SQLITE_DELETE, pTab->zName, 0, zDb) ){ + goto exit_drop_table; + } + } +#endif + if( tableMayNotBeDropped(db, pTab) ){ + sqlite3ErrorMsg(pParse, "table %s may not be dropped", pTab->zName); + goto exit_drop_table; + } + +#ifndef SQLITE_OMIT_VIEW + /* Ensure DROP TABLE is not used on a view, and DROP VIEW is not used + ** on a table. + */ + if( isView && !IsView(pTab) ){ + sqlite3ErrorMsg(pParse, "use DROP TABLE to delete table %s", pTab->zName); + goto exit_drop_table; + } + if( !isView && IsView(pTab) ){ + sqlite3ErrorMsg(pParse, "use DROP VIEW to delete view %s", pTab->zName); + goto exit_drop_table; + } +#endif + + /* Generate code to remove the table from the schema table + ** on disk. + */ + v = sqlite3GetVdbe(pParse); + if( v ){ + sqlite3BeginWriteOperation(pParse, 1, iDb); + if( !isView ){ + sqlite3ClearStatTables(pParse, iDb, "tbl", pTab->zName); + sqlite3FkDropTable(pParse, pName, pTab); + } + sqlite3CodeDropTable(pParse, pTab, iDb, isView); + } + +exit_drop_table: + sqlite3SrcListDelete(db, pName); +} + +/* +** This routine is called to create a new foreign key on the table +** currently under construction. pFromCol determines which columns +** in the current table point to the foreign key. If pFromCol==0 then +** connect the key to the last column inserted. pTo is the name of +** the table referred to (a.k.a the "parent" table). pToCol is a list +** of tables in the parent pTo table. flags contains all +** information about the conflict resolution algorithms specified +** in the ON DELETE, ON UPDATE and ON INSERT clauses. +** +** An FKey structure is created and added to the table currently +** under construction in the pParse->pNewTable field. +** +** The foreign key is set for IMMEDIATE processing. A subsequent call +** to sqlite3DeferForeignKey() might change this to DEFERRED. +*/ +SQLITE_PRIVATE void sqlite3CreateForeignKey( + Parse *pParse, /* Parsing context */ + ExprList *pFromCol, /* Columns in this table that point to other table */ + Token *pTo, /* Name of the other table */ + ExprList *pToCol, /* Columns in the other table */ + int flags /* Conflict resolution algorithms. */ +){ + sqlite3 *db = pParse->db; +#ifndef SQLITE_OMIT_FOREIGN_KEY + FKey *pFKey = 0; + FKey *pNextTo; + Table *p = pParse->pNewTable; + i64 nByte; + int i; + int nCol; + char *z; + + assert( pTo!=0 ); + if( p==0 || IN_DECLARE_VTAB ) goto fk_end; + if( pFromCol==0 ){ + int iCol = p->nCol-1; + if( NEVER(iCol<0) ) goto fk_end; + if( pToCol && pToCol->nExpr!=1 ){ + sqlite3ErrorMsg(pParse, "foreign key on %s" + " should reference only one column of table %T", + p->aCol[iCol].zCnName, pTo); + goto fk_end; + } + nCol = 1; + }else if( pToCol && pToCol->nExpr!=pFromCol->nExpr ){ + sqlite3ErrorMsg(pParse, + "number of columns in foreign key does not match the number of " + "columns in the referenced table"); + goto fk_end; + }else{ + nCol = pFromCol->nExpr; + } + nByte = SZ_FKEY(nCol) + pTo->n + 1; + if( pToCol ){ + for(i=0; inExpr; i++){ + nByte += sqlite3Strlen30(pToCol->a[i].zEName) + 1; + } + } + pFKey = sqlite3DbMallocZero(db, nByte ); + if( pFKey==0 ){ + goto fk_end; + } + pFKey->pFrom = p; + assert( IsOrdinaryTable(p) ); + pFKey->pNextFrom = p->u.tab.pFKey; + z = (char*)&pFKey->aCol[nCol]; + pFKey->zTo = z; + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, (void*)z, pTo); + } + memcpy(z, pTo->z, pTo->n); + z[pTo->n] = 0; + sqlite3Dequote(z); + z += pTo->n+1; + pFKey->nCol = nCol; + if( pFromCol==0 ){ + pFKey->aCol[0].iFrom = p->nCol-1; + }else{ + for(i=0; inCol; j++){ + if( sqlite3StrICmp(p->aCol[j].zCnName, pFromCol->a[i].zEName)==0 ){ + pFKey->aCol[i].iFrom = j; + break; + } + } + if( j>=p->nCol ){ + sqlite3ErrorMsg(pParse, + "unknown column \"%s\" in foreign key definition", + pFromCol->a[i].zEName); + goto fk_end; + } + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, &pFKey->aCol[i], pFromCol->a[i].zEName); + } + } + } + if( pToCol ){ + for(i=0; ia[i].zEName); + pFKey->aCol[i].zCol = z; + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, z, pToCol->a[i].zEName); + } + memcpy(z, pToCol->a[i].zEName, n); + z[n] = 0; + z += n+1; + } + } + pFKey->isDeferred = 0; + pFKey->aAction[0] = (u8)(flags & 0xff); /* ON DELETE action */ + pFKey->aAction[1] = (u8)((flags >> 8 ) & 0xff); /* ON UPDATE action */ + + assert( sqlite3SchemaMutexHeld(db, 0, p->pSchema) ); + pNextTo = (FKey *)sqlite3HashInsert(&p->pSchema->fkeyHash, + pFKey->zTo, (void *)pFKey + ); + if( pNextTo==pFKey ){ + sqlite3OomFault(db); + goto fk_end; + } + if( pNextTo ){ + assert( pNextTo->pPrevTo==0 ); + pFKey->pNextTo = pNextTo; + pNextTo->pPrevTo = pFKey; + } + + /* Link the foreign key to the table as the last step. + */ + assert( IsOrdinaryTable(p) ); + p->u.tab.pFKey = pFKey; + pFKey = 0; + +fk_end: + sqlite3DbFree(db, pFKey); +#endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */ + sqlite3ExprListDelete(db, pFromCol); + sqlite3ExprListDelete(db, pToCol); +} + +/* +** This routine is called when an INITIALLY IMMEDIATE or INITIALLY DEFERRED +** clause is seen as part of a foreign key definition. The isDeferred +** parameter is 1 for INITIALLY DEFERRED and 0 for INITIALLY IMMEDIATE. +** The behavior of the most recently created foreign key is adjusted +** accordingly. +*/ +SQLITE_PRIVATE void sqlite3DeferForeignKey(Parse *pParse, int isDeferred){ +#ifndef SQLITE_OMIT_FOREIGN_KEY + Table *pTab; + FKey *pFKey; + if( (pTab = pParse->pNewTable)==0 ) return; + if( NEVER(!IsOrdinaryTable(pTab)) ) return; + if( (pFKey = pTab->u.tab.pFKey)==0 ) return; + assert( isDeferred==0 || isDeferred==1 ); /* EV: R-30323-21917 */ + pFKey->isDeferred = (u8)isDeferred; +#endif +} + +/* +** Generate code that will erase and refill index *pIdx. This is +** used to initialize a newly created index or to recompute the +** content of an index in response to a REINDEX command. +** +** if memRootPage is not negative, it means that the index is newly +** created. The register specified by memRootPage contains the +** root page number of the index. If memRootPage is negative, then +** the index already exists and must be cleared before being refilled and +** the root page number of the index is taken from pIndex->tnum. +*/ +static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){ + Table *pTab = pIndex->pTable; /* The table that is indexed */ + int iTab = pParse->nTab++; /* Btree cursor used for pTab */ + int iIdx = pParse->nTab++; /* Btree cursor used for pIndex */ + int iSorter; /* Cursor opened by OpenSorter (if in use) */ + int addr1; /* Address of top of loop */ + int addr2; /* Address to jump to for next iteration */ + Pgno tnum; /* Root page of index */ + int iPartIdxLabel; /* Jump to this label to skip a row */ + Vdbe *v; /* Generate code into this virtual machine */ + KeyInfo *pKey; /* KeyInfo for index */ + int regRecord; /* Register holding assembled index record */ + sqlite3 *db = pParse->db; /* The database connection */ + int iDb = sqlite3SchemaToIndex(db, pIndex->pSchema); + +#ifndef SQLITE_OMIT_AUTHORIZATION + if( sqlite3AuthCheck(pParse, SQLITE_REINDEX, pIndex->zName, 0, + db->aDb[iDb].zDbSName ) ){ + return; + } +#endif + + /* Require a write-lock on the table to perform this operation */ + sqlite3TableLock(pParse, iDb, pTab->tnum, 1, pTab->zName); + + v = sqlite3GetVdbe(pParse); + if( v==0 ) return; + if( memRootPage>=0 ){ + tnum = (Pgno)memRootPage; + }else{ + tnum = pIndex->tnum; + } + pKey = sqlite3KeyInfoOfIndex(pParse, pIndex); + assert( pKey!=0 || pParse->nErr ); + + /* Open the sorter cursor if we are to use one. */ + iSorter = pParse->nTab++; + sqlite3VdbeAddOp4(v, OP_SorterOpen, iSorter, 0, pIndex->nKeyCol, (char*) + sqlite3KeyInfoRef(pKey), P4_KEYINFO); + + /* Open the table. Loop through all rows of the table, inserting index + ** records into the sorter. */ + sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead); + addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iTab, 0); VdbeCoverage(v); + regRecord = sqlite3GetTempReg(pParse); + sqlite3MultiWrite(pParse); + + sqlite3GenerateIndexKey(pParse,pIndex,iTab,regRecord,0,&iPartIdxLabel,0,0); + sqlite3VdbeAddOp2(v, OP_SorterInsert, iSorter, regRecord); + sqlite3ResolvePartIdxLabel(pParse, iPartIdxLabel); + sqlite3VdbeAddOp2(v, OP_Next, iTab, addr1+1); VdbeCoverage(v); + sqlite3VdbeJumpHere(v, addr1); + if( memRootPage<0 ) sqlite3VdbeAddOp2(v, OP_Clear, tnum, iDb); + sqlite3VdbeAddOp4(v, OP_OpenWrite, iIdx, (int)tnum, iDb, + (char *)pKey, P4_KEYINFO); + sqlite3VdbeChangeP5(v, OPFLAG_BULKCSR|((memRootPage>=0)?OPFLAG_P2ISREG:0)); + + addr1 = sqlite3VdbeAddOp2(v, OP_SorterSort, iSorter, 0); VdbeCoverage(v); + if( IsUniqueIndex(pIndex) ){ + int j2 = sqlite3VdbeGoto(v, 1); + addr2 = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeVerifyAbortable(v, OE_Abort); + sqlite3VdbeAddOp4Int(v, OP_SorterCompare, iSorter, j2, regRecord, + pIndex->nKeyCol); VdbeCoverage(v); + sqlite3UniqueConstraint(pParse, OE_Abort, pIndex); + sqlite3VdbeJumpHere(v, j2); + }else{ + /* Most CREATE INDEX and REINDEX statements that are not UNIQUE can not + ** abort. The exception is if one of the indexed expressions contains a + ** user function that throws an exception when it is evaluated. But the + ** overhead of adding a statement journal to a CREATE INDEX statement is + ** very small (since most of the pages written do not contain content that + ** needs to be restored if the statement aborts), so we call + ** sqlite3MayAbort() for all CREATE INDEX statements. */ + sqlite3MayAbort(pParse); + addr2 = sqlite3VdbeCurrentAddr(v); + } + sqlite3VdbeAddOp3(v, OP_SorterData, iSorter, regRecord, iIdx); + if( !pIndex->bAscKeyBug ){ + /* This OP_SeekEnd opcode makes index insert for a REINDEX go much + ** faster by avoiding unnecessary seeks. But the optimization does + ** not work for UNIQUE constraint indexes on WITHOUT ROWID tables + ** with DESC primary keys, since those indexes have there keys in + ** a different order from the main table. + ** See ticket: https://sqlite.org/src/info/bba7b69f9849b5bf + */ + sqlite3VdbeAddOp1(v, OP_SeekEnd, iIdx); + } + sqlite3VdbeAddOp2(v, OP_IdxInsert, iIdx, regRecord); + sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); + sqlite3ReleaseTempReg(pParse, regRecord); + sqlite3VdbeAddOp2(v, OP_SorterNext, iSorter, addr2); VdbeCoverage(v); + sqlite3VdbeJumpHere(v, addr1); + + sqlite3VdbeAddOp1(v, OP_Close, iTab); + sqlite3VdbeAddOp1(v, OP_Close, iIdx); + sqlite3VdbeAddOp1(v, OP_Close, iSorter); +} + +/* +** Allocate heap space to hold an Index object with nCol columns. +** +** Increase the allocation size to provide an extra nExtra bytes +** of 8-byte aligned space after the Index object and return a +** pointer to this extra space in *ppExtra. +*/ +SQLITE_PRIVATE Index *sqlite3AllocateIndexObject( + sqlite3 *db, /* Database connection */ + int nCol, /* Total number of columns in the index */ + int nExtra, /* Number of bytes of extra space to alloc */ + char **ppExtra /* Pointer to the "extra" space */ +){ + Index *p; /* Allocated index object */ + i64 nByte; /* Bytes of space for Index object + arrays */ + + assert( nCol <= 2*db->aLimit[SQLITE_LIMIT_COLUMN] ); + nByte = ROUND8(sizeof(Index)) + /* Index structure */ + ROUND8(sizeof(char*)*nCol) + /* Index.azColl */ + ROUND8(sizeof(LogEst)*(nCol+1) + /* Index.aiRowLogEst */ + sizeof(i16)*nCol + /* Index.aiColumn */ + sizeof(u8)*nCol); /* Index.aSortOrder */ + p = sqlite3DbMallocZero(db, nByte + nExtra); + if( p ){ + char *pExtra = ((char*)p)+ROUND8(sizeof(Index)); + p->azColl = (const char**)pExtra; pExtra += ROUND8(sizeof(char*)*nCol); + p->aiRowLogEst = (LogEst*)pExtra; pExtra += sizeof(LogEst)*(nCol+1); + p->aiColumn = (i16*)pExtra; pExtra += sizeof(i16)*nCol; + p->aSortOrder = (u8*)pExtra; + assert( nCol>0 ); + p->nColumn = (u16)nCol; + p->nKeyCol = (u16)(nCol - 1); + *ppExtra = ((char*)p) + nByte; + } + return p; +} + +/* +** If expression list pList contains an expression that was parsed with +** an explicit "NULLS FIRST" or "NULLS LAST" clause, leave an error in +** pParse and return non-zero. Otherwise, return zero. +*/ +SQLITE_PRIVATE int sqlite3HasExplicitNulls(Parse *pParse, ExprList *pList){ + if( pList ){ + int i; + for(i=0; inExpr; i++){ + if( pList->a[i].fg.bNulls ){ + u8 sf = pList->a[i].fg.sortFlags; + sqlite3ErrorMsg(pParse, "unsupported use of NULLS %s", + (sf==0 || sf==3) ? "FIRST" : "LAST" + ); + return 1; + } + } + } + return 0; +} + +/* +** Create a new index for an SQL table. pName1.pName2 is the name of the index +** and pTblList is the name of the table that is to be indexed. Both will +** be NULL for a primary key or an index that is created to satisfy a +** UNIQUE constraint. If pTable and pIndex are NULL, use pParse->pNewTable +** as the table to be indexed. pParse->pNewTable is a table that is +** currently being constructed by a CREATE TABLE statement. +** +** pList is a list of columns to be indexed. pList will be NULL if this +** is a primary key or unique-constraint on the most recent column added +** to the table currently under construction. +*/ +SQLITE_PRIVATE void sqlite3CreateIndex( + Parse *pParse, /* All information about this parse */ + Token *pName1, /* First part of index name. May be NULL */ + Token *pName2, /* Second part of index name. May be NULL */ + SrcList *pTblName, /* Table to index. Use pParse->pNewTable if 0 */ + ExprList *pList, /* A list of columns to be indexed */ + int onError, /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */ + Token *pStart, /* The CREATE token that begins this statement */ + Expr *pPIWhere, /* WHERE clause for partial indices */ + int sortOrder, /* Sort order of primary key when pList==NULL */ + int ifNotExist, /* Omit error if index already exists */ + u8 idxType /* The index type */ +){ + Table *pTab = 0; /* Table to be indexed */ + Index *pIndex = 0; /* The index to be created */ + char *zName = 0; /* Name of the index */ + int nName; /* Number of characters in zName */ + int i, j; + DbFixer sFix; /* For assigning database names to pTable */ + int sortOrderMask; /* 1 to honor DESC in index. 0 to ignore. */ + sqlite3 *db = pParse->db; + Db *pDb; /* The specific table containing the indexed database */ + int iDb; /* Index of the database that is being written */ + Token *pName = 0; /* Unqualified name of the index to create */ + struct ExprList_item *pListItem; /* For looping over pList */ + int nExtra = 0; /* Space allocated for zExtra[] */ + int nExtraCol; /* Number of extra columns needed */ + char *zExtra = 0; /* Extra space after the Index object */ + Index *pPk = 0; /* PRIMARY KEY index for WITHOUT ROWID tables */ + + assert( db->pParse==pParse ); + if( pParse->nErr ){ + goto exit_create_index; + } + assert( db->mallocFailed==0 ); + if( IN_DECLARE_VTAB && idxType!=SQLITE_IDXTYPE_PRIMARYKEY ){ + goto exit_create_index; + } + if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ + goto exit_create_index; + } + if( sqlite3HasExplicitNulls(pParse, pList) ){ + goto exit_create_index; + } + + /* + ** Find the table that is to be indexed. Return early if not found. + */ + if( pTblName!=0 ){ + + /* Use the two-part index name to determine the database + ** to search for the table. 'Fix' the table name to this db + ** before looking up the table. + */ + assert( pName1 && pName2 ); + iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName); + if( iDb<0 ) goto exit_create_index; + assert( pName && pName->z ); + +#ifndef SQLITE_OMIT_TEMPDB + /* If the index name was unqualified, check if the table + ** is a temp table. If so, set the database to 1. Do not do this + ** if initializing a database schema. + */ + if( !db->init.busy ){ + pTab = sqlite3SrcListLookup(pParse, pTblName); + if( pName2->n==0 && pTab && pTab->pSchema==db->aDb[1].pSchema ){ + iDb = 1; + } + } +#endif + + sqlite3FixInit(&sFix, pParse, iDb, "index", pName); + if( sqlite3FixSrcList(&sFix, pTblName) ){ + /* Because the parser constructs pTblName from a single identifier, + ** sqlite3FixSrcList can never fail. */ + assert(0); + } + pTab = sqlite3LocateTableItem(pParse, 0, &pTblName->a[0]); + assert( db->mallocFailed==0 || pTab==0 ); + if( pTab==0 ) goto exit_create_index; + if( iDb==1 && db->aDb[iDb].pSchema!=pTab->pSchema ){ + sqlite3ErrorMsg(pParse, + "cannot create a TEMP index on non-TEMP table \"%s\"", + pTab->zName); + goto exit_create_index; + } + if( !HasRowid(pTab) ) pPk = sqlite3PrimaryKeyIndex(pTab); + }else{ + assert( pName==0 ); + assert( pStart==0 ); + pTab = pParse->pNewTable; + if( !pTab ) goto exit_create_index; + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + } + pDb = &db->aDb[iDb]; + + assert( pTab!=0 ); + if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 + && db->init.busy==0 + && pTblName!=0 + ){ + sqlite3ErrorMsg(pParse, "table %s may not be indexed", pTab->zName); + goto exit_create_index; + } +#ifndef SQLITE_OMIT_VIEW + if( IsView(pTab) ){ + sqlite3ErrorMsg(pParse, "views may not be indexed"); + goto exit_create_index; + } +#endif +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pTab) ){ + sqlite3ErrorMsg(pParse, "virtual tables may not be indexed"); + goto exit_create_index; + } +#endif + + /* + ** Find the name of the index. Make sure there is not already another + ** index or table with the same name. + ** + ** Exception: If we are reading the names of permanent indices from the + ** sqlite_schema table (because some other process changed the schema) and + ** one of the index names collides with the name of a temporary table or + ** index, then we will continue to process this index. + ** + ** If pName==0 it means that we are + ** dealing with a primary key or UNIQUE constraint. We have to invent our + ** own name. + */ + if( pName ){ + zName = sqlite3NameFromToken(db, pName); + if( zName==0 ) goto exit_create_index; + assert( pName->z!=0 ); + if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName,"index",pTab->zName) ){ + goto exit_create_index; + } + if( !IN_RENAME_OBJECT ){ + if( !db->init.busy ){ + if( sqlite3FindTable(db, zName, pDb->zDbSName)!=0 ){ + sqlite3ErrorMsg(pParse, "there is already a table named %s", zName); + goto exit_create_index; + } + } + if( sqlite3FindIndex(db, zName, pDb->zDbSName)!=0 ){ + if( !ifNotExist ){ + sqlite3ErrorMsg(pParse, "index %s already exists", zName); + }else{ + assert( !db->init.busy ); + sqlite3CodeVerifySchema(pParse, iDb); + sqlite3ForceNotReadOnly(pParse); + } + goto exit_create_index; + } + } + }else{ + int n; + Index *pLoop; + for(pLoop=pTab->pIndex, n=1; pLoop; pLoop=pLoop->pNext, n++){} + zName = sqlite3MPrintf(db, "sqlite_autoindex_%s_%d", pTab->zName, n); + if( zName==0 ){ + goto exit_create_index; + } + + /* Automatic index names generated from within sqlite3_declare_vtab() + ** must have names that are distinct from normal automatic index names. + ** The following statement converts "sqlite3_autoindex..." into + ** "sqlite3_butoindex..." in order to make the names distinct. + ** The "vtab_err.test" test demonstrates the need of this statement. */ + if( IN_SPECIAL_PARSE ) zName[7]++; + } + + /* Check for authorization to create an index. + */ +#ifndef SQLITE_OMIT_AUTHORIZATION + if( !IN_RENAME_OBJECT ){ + const char *zDb = pDb->zDbSName; + if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iDb), 0, zDb) ){ + goto exit_create_index; + } + i = SQLITE_CREATE_INDEX; + if( !OMIT_TEMPDB && iDb==1 ) i = SQLITE_CREATE_TEMP_INDEX; + if( sqlite3AuthCheck(pParse, i, zName, pTab->zName, zDb) ){ + goto exit_create_index; + } + } +#endif + + /* If pList==0, it means this routine was called to make a primary + ** key out of the last column added to the table under construction. + ** So create a fake list to simulate this. + */ + if( pList==0 ){ + Token prevCol; + Column *pCol = &pTab->aCol[pTab->nCol-1]; + pCol->colFlags |= COLFLAG_UNIQUE; + sqlite3TokenInit(&prevCol, pCol->zCnName); + pList = sqlite3ExprListAppend(pParse, 0, + sqlite3ExprAlloc(db, TK_ID, &prevCol, 0)); + if( pList==0 ) goto exit_create_index; + assert( pList->nExpr==1 ); + sqlite3ExprListSetSortOrder(pList, sortOrder, SQLITE_SO_UNDEFINED); + }else{ + sqlite3ExprListCheckLength(pParse, pList, "index"); + if( pParse->nErr ) goto exit_create_index; + } + + /* Figure out how many bytes of space are required to store explicitly + ** specified collation sequence names. + */ + for(i=0; inExpr; i++){ + Expr *pExpr = pList->a[i].pExpr; + assert( pExpr!=0 ); + if( pExpr->op==TK_COLLATE ){ + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + nExtra += (1 + sqlite3Strlen30(pExpr->u.zToken)); + } + } + + /* + ** Allocate the index structure. + */ + nName = sqlite3Strlen30(zName); + nExtraCol = pPk ? pPk->nKeyCol : 1; + assert( pList->nExpr + nExtraCol <= 32767 /* Fits in i16 */ ); + pIndex = sqlite3AllocateIndexObject(db, pList->nExpr + nExtraCol, + nName + nExtra + 1, &zExtra); + if( db->mallocFailed ){ + goto exit_create_index; + } + assert( EIGHT_BYTE_ALIGNMENT(pIndex->aiRowLogEst) ); + assert( EIGHT_BYTE_ALIGNMENT(pIndex->azColl) ); + pIndex->zName = zExtra; + zExtra += nName + 1; + memcpy(pIndex->zName, zName, nName+1); + pIndex->pTable = pTab; + pIndex->onError = (u8)onError; + pIndex->uniqNotNull = onError!=OE_None; + pIndex->idxType = idxType; + pIndex->pSchema = db->aDb[iDb].pSchema; + pIndex->nKeyCol = pList->nExpr; + if( pPIWhere ){ + sqlite3ResolveSelfReference(pParse, pTab, NC_PartIdx, pPIWhere, 0); + pIndex->pPartIdxWhere = pPIWhere; + pPIWhere = 0; + } + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + + /* Check to see if we should honor DESC requests on index columns + */ + if( pDb->pSchema->file_format>=4 ){ + sortOrderMask = -1; /* Honor DESC */ + }else{ + sortOrderMask = 0; /* Ignore DESC */ + } + + /* Analyze the list of expressions that form the terms of the index and + ** report any errors. In the common case where the expression is exactly + ** a table column, store that column in aiColumn[]. For general expressions, + ** populate pIndex->aColExpr and store XN_EXPR (-2) in aiColumn[]. + ** + ** TODO: Issue a warning if two or more columns of the index are identical. + ** TODO: Issue a warning if the table primary key is used as part of the + ** index key. + */ + pListItem = pList->a; + if( IN_RENAME_OBJECT ){ + pIndex->aColExpr = pList; + pList = 0; + } + for(i=0; inKeyCol; i++, pListItem++){ + Expr *pCExpr; /* The i-th index expression */ + int requestedSortOrder; /* ASC or DESC on the i-th expression */ + const char *zColl; /* Collation sequence name */ + + sqlite3StringToId(pListItem->pExpr); + sqlite3ResolveSelfReference(pParse, pTab, NC_IdxExpr, pListItem->pExpr, 0); + if( pParse->nErr ) goto exit_create_index; + pCExpr = sqlite3ExprSkipCollate(pListItem->pExpr); + if( pCExpr->op!=TK_COLUMN ){ + if( pTab==pParse->pNewTable ){ + sqlite3ErrorMsg(pParse, "expressions prohibited in PRIMARY KEY and " + "UNIQUE constraints"); + goto exit_create_index; + } + if( pIndex->aColExpr==0 ){ + pIndex->aColExpr = pList; + pList = 0; + } + j = XN_EXPR; + pIndex->aiColumn[i] = XN_EXPR; + pIndex->uniqNotNull = 0; + pIndex->bHasExpr = 1; + }else{ + j = pCExpr->iColumn; + assert( j<=0x7fff ); + if( j<0 ){ + j = pTab->iPKey; + }else{ + if( pTab->aCol[j].notNull==0 ){ + pIndex->uniqNotNull = 0; + } + if( pTab->aCol[j].colFlags & COLFLAG_VIRTUAL ){ + pIndex->bHasVCol = 1; + pIndex->bHasExpr = 1; + } + } + pIndex->aiColumn[i] = (i16)j; + } + zColl = 0; + if( pListItem->pExpr->op==TK_COLLATE ){ + int nColl; + assert( !ExprHasProperty(pListItem->pExpr, EP_IntValue) ); + zColl = pListItem->pExpr->u.zToken; + nColl = sqlite3Strlen30(zColl) + 1; + assert( nExtra>=nColl ); + memcpy(zExtra, zColl, nColl); + zColl = zExtra; + zExtra += nColl; + nExtra -= nColl; + }else if( j>=0 ){ + zColl = sqlite3ColumnColl(&pTab->aCol[j]); + } + if( !zColl ) zColl = sqlite3StrBINARY; + if( !db->init.busy && !sqlite3LocateCollSeq(pParse, zColl) ){ + goto exit_create_index; + } + pIndex->azColl[i] = zColl; + requestedSortOrder = pListItem->fg.sortFlags & sortOrderMask; + pIndex->aSortOrder[i] = (u8)requestedSortOrder; + } + + /* Append the table key to the end of the index. For WITHOUT ROWID + ** tables (when pPk!=0) this will be the declared PRIMARY KEY. For + ** normal tables (when pPk==0) this will be the rowid. + */ + if( pPk ){ + for(j=0; jnKeyCol; j++){ + int x = pPk->aiColumn[j]; + assert( x>=0 ); + if( isDupColumn(pIndex, pIndex->nKeyCol, pPk, j) ){ + pIndex->nColumn--; + }else{ + testcase( hasColumn(pIndex->aiColumn,pIndex->nKeyCol,x) ); + pIndex->aiColumn[i] = x; + pIndex->azColl[i] = pPk->azColl[j]; + pIndex->aSortOrder[i] = pPk->aSortOrder[j]; + i++; + } + } + assert( i==pIndex->nColumn ); + }else{ + pIndex->aiColumn[i] = XN_ROWID; + pIndex->azColl[i] = sqlite3StrBINARY; + } + sqlite3DefaultRowEst(pIndex); + if( pParse->pNewTable==0 ) estimateIndexWidth(pIndex); + + /* If this index contains every column of its table, then mark + ** it as a covering index */ + assert( HasRowid(pTab) + || pTab->iPKey<0 || sqlite3TableColumnToIndex(pIndex, pTab->iPKey)>=0 ); + recomputeColumnsNotIndexed(pIndex); + if( pTblName!=0 && pIndex->nColumn>=pTab->nCol ){ + pIndex->isCovering = 1; + for(j=0; jnCol; j++){ + if( j==pTab->iPKey ) continue; + if( sqlite3TableColumnToIndex(pIndex,j)>=0 ) continue; + pIndex->isCovering = 0; + break; + } + } + + if( pTab==pParse->pNewTable ){ + /* This routine has been called to create an automatic index as a + ** result of a PRIMARY KEY or UNIQUE clause on a column definition, or + ** a PRIMARY KEY or UNIQUE clause following the column definitions. + ** i.e. one of: + ** + ** CREATE TABLE t(x PRIMARY KEY, y); + ** CREATE TABLE t(x, y, UNIQUE(x, y)); + ** + ** Either way, check to see if the table already has such an index. If + ** so, don't bother creating this one. This only applies to + ** automatically created indices. Users can do as they wish with + ** explicit indices. + ** + ** Two UNIQUE or PRIMARY KEY constraints are considered equivalent + ** (and thus suppressing the second one) even if they have different + ** sort orders. + ** + ** If there are different collating sequences or if the columns of + ** the constraint occur in different orders, then the constraints are + ** considered distinct and both result in separate indices. + */ + Index *pIdx; + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + int k; + assert( IsUniqueIndex(pIdx) ); + assert( pIdx->idxType!=SQLITE_IDXTYPE_APPDEF ); + assert( IsUniqueIndex(pIndex) ); + + if( pIdx->nKeyCol!=pIndex->nKeyCol ) continue; + for(k=0; knKeyCol; k++){ + const char *z1; + const char *z2; + assert( pIdx->aiColumn[k]>=0 ); + if( pIdx->aiColumn[k]!=pIndex->aiColumn[k] ) break; + z1 = pIdx->azColl[k]; + z2 = pIndex->azColl[k]; + if( sqlite3StrICmp(z1, z2) ) break; + } + if( k==pIdx->nKeyCol ){ + if( pIdx->onError!=pIndex->onError ){ + /* This constraint creates the same index as a previous + ** constraint specified somewhere in the CREATE TABLE statement. + ** However the ON CONFLICT clauses are different. If both this + ** constraint and the previous equivalent constraint have explicit + ** ON CONFLICT clauses this is an error. Otherwise, use the + ** explicitly specified behavior for the index. + */ + if( !(pIdx->onError==OE_Default || pIndex->onError==OE_Default) ){ + sqlite3ErrorMsg(pParse, + "conflicting ON CONFLICT clauses specified", 0); + } + if( pIdx->onError==OE_Default ){ + pIdx->onError = pIndex->onError; + } + } + if( idxType==SQLITE_IDXTYPE_PRIMARYKEY ) pIdx->idxType = idxType; + if( IN_RENAME_OBJECT ){ + pIndex->pNext = pParse->pNewIndex; + pParse->pNewIndex = pIndex; + pIndex = 0; + } + goto exit_create_index; + } + } + } + + if( !IN_RENAME_OBJECT ){ + + /* Link the new Index structure to its table and to the other + ** in-memory database structures. + */ + assert( pParse->nErr==0 ); + if( db->init.busy ){ + Index *p; + assert( !IN_SPECIAL_PARSE ); + assert( sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) ); + if( pTblName!=0 ){ + pIndex->tnum = db->init.newTnum; + if( sqlite3IndexHasDuplicateRootPage(pIndex) ){ + sqlite3ErrorMsg(pParse, "invalid rootpage"); + pParse->rc = SQLITE_CORRUPT_BKPT; + goto exit_create_index; + } + } + p = sqlite3HashInsert(&pIndex->pSchema->idxHash, + pIndex->zName, pIndex); + if( p ){ + assert( p==pIndex ); /* Malloc must have failed */ + sqlite3OomFault(db); + goto exit_create_index; + } + db->mDbFlags |= DBFLAG_SchemaChange; + } + + /* If this is the initial CREATE INDEX statement (or CREATE TABLE if the + ** index is an implied index for a UNIQUE or PRIMARY KEY constraint) then + ** emit code to allocate the index rootpage on disk and make an entry for + ** the index in the sqlite_schema table and populate the index with + ** content. But, do not do this if we are simply reading the sqlite_schema + ** table to parse the schema, or if this index is the PRIMARY KEY index + ** of a WITHOUT ROWID table. + ** + ** If pTblName==0 it means this index is generated as an implied PRIMARY KEY + ** or UNIQUE index in a CREATE TABLE statement. Since the table + ** has just been created, it contains no data and the index initialization + ** step can be skipped. + */ + else if( HasRowid(pTab) || pTblName!=0 ){ + Vdbe *v; + char *zStmt; + int iMem = ++pParse->nMem; + + v = sqlite3GetVdbe(pParse); + if( v==0 ) goto exit_create_index; + + sqlite3BeginWriteOperation(pParse, 1, iDb); + + /* Create the rootpage for the index using CreateIndex. But before + ** doing so, code a Noop instruction and store its address in + ** Index.tnum. This is required in case this index is actually a + ** PRIMARY KEY and the table is actually a WITHOUT ROWID table. In + ** that case the convertToWithoutRowidTable() routine will replace + ** the Noop with a Goto to jump over the VDBE code generated below. */ + pIndex->tnum = (Pgno)sqlite3VdbeAddOp0(v, OP_Noop); + sqlite3VdbeAddOp3(v, OP_CreateBtree, iDb, iMem, BTREE_BLOBKEY); + + /* Gather the complete text of the CREATE INDEX statement into + ** the zStmt variable + */ + assert( pName!=0 || pStart==0 ); + if( pStart ){ + int n = (int)(pParse->sLastToken.z - pName->z) + pParse->sLastToken.n; + if( pName->z[n-1]==';' ) n--; + /* A named index with an explicit CREATE INDEX statement */ + zStmt = sqlite3MPrintf(db, "CREATE%s INDEX %.*s", + onError==OE_None ? "" : " UNIQUE", n, pName->z); + }else{ + /* An automatic index created by a PRIMARY KEY or UNIQUE constraint */ + /* zStmt = sqlite3MPrintf(""); */ + zStmt = 0; + } + + /* Add an entry in sqlite_schema for this index + */ + sqlite3NestedParse(pParse, + "INSERT INTO %Q." LEGACY_SCHEMA_TABLE " VALUES('index',%Q,%Q,#%d,%Q);", + db->aDb[iDb].zDbSName, + pIndex->zName, + pTab->zName, + iMem, + zStmt + ); + sqlite3DbFree(db, zStmt); + + /* Fill the index with data and reparse the schema. Code an OP_Expire + ** to invalidate all pre-compiled statements. + */ + if( pTblName ){ + sqlite3RefillIndex(pParse, pIndex, iMem); + sqlite3ChangeCookie(pParse, iDb); + sqlite3VdbeAddParseSchemaOp(v, iDb, + sqlite3MPrintf(db, "name='%q' AND type='index'", pIndex->zName), 0); + sqlite3VdbeAddOp2(v, OP_Expire, 0, 1); + } + + sqlite3VdbeJumpHere(v, (int)pIndex->tnum); + } + } + if( db->init.busy || pTblName==0 ){ + pIndex->pNext = pTab->pIndex; + pTab->pIndex = pIndex; + pIndex = 0; + } + else if( IN_RENAME_OBJECT ){ + assert( pParse->pNewIndex==0 ); + pParse->pNewIndex = pIndex; + pIndex = 0; + } + + /* Clean up before exiting */ +exit_create_index: + if( pIndex ) sqlite3FreeIndex(db, pIndex); + if( pTab ){ + /* Ensure all REPLACE indexes on pTab are at the end of the pIndex list. + ** The list was already ordered when this routine was entered, so at this + ** point at most a single index (the newly added index) will be out of + ** order. So we have to reorder at most one index. */ + Index **ppFrom; + Index *pThis; + for(ppFrom=&pTab->pIndex; (pThis = *ppFrom)!=0; ppFrom=&pThis->pNext){ + Index *pNext; + if( pThis->onError!=OE_Replace ) continue; + while( (pNext = pThis->pNext)!=0 && pNext->onError!=OE_Replace ){ + *ppFrom = pNext; + pThis->pNext = pNext->pNext; + pNext->pNext = pThis; + ppFrom = &pNext->pNext; + } + break; + } +#ifdef SQLITE_DEBUG + /* Verify that all REPLACE indexes really are now at the end + ** of the index list. In other words, no other index type ever + ** comes after a REPLACE index on the list. */ + for(pThis = pTab->pIndex; pThis; pThis=pThis->pNext){ + assert( pThis->onError!=OE_Replace + || pThis->pNext==0 + || pThis->pNext->onError==OE_Replace ); + } +#endif + } + sqlite3ExprDelete(db, pPIWhere); + sqlite3ExprListDelete(db, pList); + sqlite3SrcListDelete(db, pTblName); + sqlite3DbFree(db, zName); +} + +/* +** Fill the Index.aiRowEst[] array with default information - information +** to be used when we have not run the ANALYZE command. +** +** aiRowEst[0] is supposed to contain the number of elements in the index. +** Since we do not know, guess 1 million. aiRowEst[1] is an estimate of the +** number of rows in the table that match any particular value of the +** first column of the index. aiRowEst[2] is an estimate of the number +** of rows that match any particular combination of the first 2 columns +** of the index. And so forth. It must always be the case that +* +** aiRowEst[N]<=aiRowEst[N-1] +** aiRowEst[N]>=1 +** +** Apart from that, we have little to go on besides intuition as to +** how aiRowEst[] should be initialized. The numbers generated here +** are based on typical values found in actual indices. +*/ +SQLITE_PRIVATE void sqlite3DefaultRowEst(Index *pIdx){ + /* 10, 9, 8, 7, 6 */ + static const LogEst aVal[] = { 33, 32, 30, 28, 26 }; + LogEst *a = pIdx->aiRowLogEst; + LogEst x; + int nCopy = MIN(ArraySize(aVal), pIdx->nKeyCol); + int i; + + /* Indexes with default row estimates should not have stat1 data */ + assert( !pIdx->hasStat1 ); + + /* Set the first entry (number of rows in the index) to the estimated + ** number of rows in the table, or half the number of rows in the table + ** for a partial index. + ** + ** 2020-05-27: If some of the stat data is coming from the sqlite_stat1 + ** table but other parts we are having to guess at, then do not let the + ** estimated number of rows in the table be less than 1000 (LogEst 99). + ** Failure to do this can cause the indexes for which we do not have + ** stat1 data to be ignored by the query planner. + */ + x = pIdx->pTable->nRowLogEst; + assert( 99==sqlite3LogEst(1000) ); + if( x<99 ){ + pIdx->pTable->nRowLogEst = x = 99; + } + if( pIdx->pPartIdxWhere!=0 ){ x -= 10; assert( 10==sqlite3LogEst(2) ); } + a[0] = x; + + /* Estimate that a[1] is 10, a[2] is 9, a[3] is 8, a[4] is 7, a[5] is + ** 6 and each subsequent value (if any) is 5. */ + memcpy(&a[1], aVal, nCopy*sizeof(LogEst)); + for(i=nCopy+1; i<=pIdx->nKeyCol; i++){ + a[i] = 23; assert( 23==sqlite3LogEst(5) ); + } + + assert( 0==sqlite3LogEst(1) ); + if( IsUniqueIndex(pIdx) ) a[pIdx->nKeyCol] = 0; +} + +/* +** This routine will drop an existing named index. This routine +** implements the DROP INDEX statement. +*/ +SQLITE_PRIVATE void sqlite3DropIndex(Parse *pParse, SrcList *pName, int ifExists){ + Index *pIndex; + Vdbe *v; + sqlite3 *db = pParse->db; + int iDb; + + if( db->mallocFailed ){ + goto exit_drop_index; + } + assert( pParse->nErr==0 ); /* Never called with prior non-OOM errors */ + assert( pName->nSrc==1 ); + assert( pName->a[0].fg.fixedSchema==0 ); + assert( pName->a[0].fg.isSubquery==0 ); + if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ + goto exit_drop_index; + } + pIndex = sqlite3FindIndex(db, pName->a[0].zName, pName->a[0].u4.zDatabase); + if( pIndex==0 ){ + if( !ifExists ){ + sqlite3ErrorMsg(pParse, "no such index: %S", pName->a); + }else{ + sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].u4.zDatabase); + sqlite3ForceNotReadOnly(pParse); + } + pParse->checkSchema = 1; + goto exit_drop_index; + } + if( pIndex->idxType!=SQLITE_IDXTYPE_APPDEF ){ + sqlite3ErrorMsg(pParse, "index associated with UNIQUE " + "or PRIMARY KEY constraint cannot be dropped", 0); + goto exit_drop_index; + } + iDb = sqlite3SchemaToIndex(db, pIndex->pSchema); +#ifndef SQLITE_OMIT_AUTHORIZATION + { + int code = SQLITE_DROP_INDEX; + Table *pTab = pIndex->pTable; + const char *zDb = db->aDb[iDb].zDbSName; + const char *zTab = SCHEMA_TABLE(iDb); + if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){ + goto exit_drop_index; + } + if( !OMIT_TEMPDB && iDb==1 ) code = SQLITE_DROP_TEMP_INDEX; + if( sqlite3AuthCheck(pParse, code, pIndex->zName, pTab->zName, zDb) ){ + goto exit_drop_index; + } + } +#endif + + /* Generate code to remove the index and from the schema table */ + v = sqlite3GetVdbe(pParse); + if( v ){ + sqlite3BeginWriteOperation(pParse, 1, iDb); + sqlite3NestedParse(pParse, + "DELETE FROM %Q." LEGACY_SCHEMA_TABLE " WHERE name=%Q AND type='index'", + db->aDb[iDb].zDbSName, pIndex->zName + ); + sqlite3ClearStatTables(pParse, iDb, "idx", pIndex->zName); + sqlite3ChangeCookie(pParse, iDb); + destroyRootPage(pParse, pIndex->tnum, iDb); + sqlite3VdbeAddOp4(v, OP_DropIndex, iDb, 0, 0, pIndex->zName, 0); + } + +exit_drop_index: + sqlite3SrcListDelete(db, pName); +} + +/* +** pArray is a pointer to an array of objects. Each object in the +** array is szEntry bytes in size. This routine uses sqlite3DbRealloc() +** to extend the array so that there is space for a new object at the end. +** +** When this function is called, *pnEntry contains the current size of +** the array (in entries - so the allocation is ((*pnEntry) * szEntry) bytes +** in total). +** +** If the realloc() is successful (i.e. if no OOM condition occurs), the +** space allocated for the new object is zeroed, *pnEntry updated to +** reflect the new size of the array and a pointer to the new allocation +** returned. *pIdx is set to the index of the new array entry in this case. +** +** Otherwise, if the realloc() fails, *pIdx is set to -1, *pnEntry remains +** unchanged and a copy of pArray returned. +*/ +SQLITE_PRIVATE void *sqlite3ArrayAllocate( + sqlite3 *db, /* Connection to notify of malloc failures */ + void *pArray, /* Array of objects. Might be reallocated */ + int szEntry, /* Size of each object in the array */ + int *pnEntry, /* Number of objects currently in use */ + int *pIdx /* Write the index of a new slot here */ +){ + char *z; + sqlite3_int64 n = *pIdx = *pnEntry; + if( (n & (n-1))==0 ){ + sqlite3_int64 sz = (n==0) ? 1 : 2*n; + void *pNew = sqlite3DbRealloc(db, pArray, sz*szEntry); + if( pNew==0 ){ + *pIdx = -1; + return pArray; + } + pArray = pNew; + } + z = (char*)pArray; + memset(&z[n * szEntry], 0, szEntry); + ++*pnEntry; + return pArray; +} + +/* +** Append a new element to the given IdList. Create a new IdList if +** need be. +** +** A new IdList is returned, or NULL if malloc() fails. +*/ +SQLITE_PRIVATE IdList *sqlite3IdListAppend(Parse *pParse, IdList *pList, Token *pToken){ + sqlite3 *db = pParse->db; + int i; + if( pList==0 ){ + pList = sqlite3DbMallocZero(db, SZ_IDLIST(1)); + if( pList==0 ) return 0; + }else{ + IdList *pNew; + pNew = sqlite3DbRealloc(db, pList, SZ_IDLIST(pList->nId+1)); + if( pNew==0 ){ + sqlite3IdListDelete(db, pList); + return 0; + } + pList = pNew; + } + i = pList->nId++; + pList->a[i].zName = sqlite3NameFromToken(db, pToken); + if( IN_RENAME_OBJECT && pList->a[i].zName ){ + sqlite3RenameTokenMap(pParse, (void*)pList->a[i].zName, pToken); + } + return pList; +} + +/* +** Delete an IdList. +*/ +SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3 *db, IdList *pList){ + int i; + assert( db!=0 ); + if( pList==0 ) return; + for(i=0; inId; i++){ + sqlite3DbFree(db, pList->a[i].zName); + } + sqlite3DbNNFreeNN(db, pList); +} + +/* +** Return the index in pList of the identifier named zId. Return -1 +** if not found. +*/ +SQLITE_PRIVATE int sqlite3IdListIndex(IdList *pList, const char *zName){ + int i; + assert( pList!=0 ); + for(i=0; inId; i++){ + if( sqlite3StrICmp(pList->a[i].zName, zName)==0 ) return i; + } + return -1; +} + +/* +** Maximum size of a SrcList object. +** The SrcList object is used to represent the FROM clause of a +** SELECT statement, and the query planner cannot deal with more +** than 64 tables in a join. So any value larger than 64 here +** is sufficient for most uses. Smaller values, like say 10, are +** appropriate for small and memory-limited applications. +*/ +#ifndef SQLITE_MAX_SRCLIST +# define SQLITE_MAX_SRCLIST 200 +#endif + +/* +** Expand the space allocated for the given SrcList object by +** creating nExtra new slots beginning at iStart. iStart is zero based. +** New slots are zeroed. +** +** For example, suppose a SrcList initially contains two entries: A,B. +** To append 3 new entries onto the end, do this: +** +** sqlite3SrcListEnlarge(db, pSrclist, 3, 2); +** +** After the call above it would contain: A, B, nil, nil, nil. +** If the iStart argument had been 1 instead of 2, then the result +** would have been: A, nil, nil, nil, B. To prepend the new slots, +** the iStart value would be 0. The result then would +** be: nil, nil, nil, A, B. +** +** If a memory allocation fails or the SrcList becomes too large, leave +** the original SrcList unchanged, return NULL, and leave an error message +** in pParse. +*/ +SQLITE_PRIVATE SrcList *sqlite3SrcListEnlarge( + Parse *pParse, /* Parsing context into which errors are reported */ + SrcList *pSrc, /* The SrcList to be enlarged */ + int nExtra, /* Number of new slots to add to pSrc->a[] */ + int iStart /* Index in pSrc->a[] of first new slot */ +){ + int i; + + /* Sanity checking on calling parameters */ + assert( iStart>=0 ); + assert( nExtra>=1 ); + assert( pSrc!=0 ); + assert( iStart<=pSrc->nSrc ); + + /* Allocate additional space if needed */ + if( (u32)pSrc->nSrc+nExtra>pSrc->nAlloc ){ + SrcList *pNew; + sqlite3_int64 nAlloc = 2*(sqlite3_int64)pSrc->nSrc+nExtra; + sqlite3 *db = pParse->db; + + if( pSrc->nSrc+nExtra>=SQLITE_MAX_SRCLIST ){ + sqlite3ErrorMsg(pParse, "too many FROM clause terms, max: %d", + SQLITE_MAX_SRCLIST); + return 0; + } + if( nAlloc>SQLITE_MAX_SRCLIST ) nAlloc = SQLITE_MAX_SRCLIST; + pNew = sqlite3DbRealloc(db, pSrc, SZ_SRCLIST(nAlloc)); + if( pNew==0 ){ + assert( db->mallocFailed ); + return 0; + } + pSrc = pNew; + pSrc->nAlloc = nAlloc; + } + + /* Move existing slots that come after the newly inserted slots + ** out of the way */ + for(i=pSrc->nSrc-1; i>=iStart; i--){ + pSrc->a[i+nExtra] = pSrc->a[i]; + } + pSrc->nSrc += nExtra; + + /* Zero the newly allocated slots */ + memset(&pSrc->a[iStart], 0, sizeof(pSrc->a[0])*nExtra); + for(i=iStart; ia[i].iCursor = -1; + } + + /* Return a pointer to the enlarged SrcList */ + return pSrc; +} + + +/* +** Append a new table name to the given SrcList. Create a new SrcList if +** need be. A new entry is created in the SrcList even if pTable is NULL. +** +** A SrcList is returned, or NULL if there is an OOM error or if the +** SrcList grows to large. The returned +** SrcList might be the same as the SrcList that was input or it might be +** a new one. If an OOM error does occurs, then the prior value of pList +** that is input to this routine is automatically freed. +** +** If pDatabase is not null, it means that the table has an optional +** database name prefix. Like this: "database.table". The pDatabase +** points to the table name and the pTable points to the database name. +** The SrcList.a[].zName field is filled with the table name which might +** come from pTable (if pDatabase is NULL) or from pDatabase. +** SrcList.a[].zDatabase is filled with the database name from pTable, +** or with NULL if no database is specified. +** +** In other words, if call like this: +** +** sqlite3SrcListAppend(D,A,B,0); +** +** Then B is a table name and the database name is unspecified. If called +** like this: +** +** sqlite3SrcListAppend(D,A,B,C); +** +** Then C is the table name and B is the database name. If C is defined +** then so is B. In other words, we never have a case where: +** +** sqlite3SrcListAppend(D,A,0,C); +** +** Both pTable and pDatabase are assumed to be quoted. They are dequoted +** before being added to the SrcList. +*/ +SQLITE_PRIVATE SrcList *sqlite3SrcListAppend( + Parse *pParse, /* Parsing context, in which errors are reported */ + SrcList *pList, /* Append to this SrcList. NULL creates a new SrcList */ + Token *pTable, /* Table to append */ + Token *pDatabase /* Database of the table */ +){ + SrcItem *pItem; + sqlite3 *db; + assert( pDatabase==0 || pTable!=0 ); /* Cannot have C without B */ + assert( pParse!=0 ); + assert( pParse->db!=0 ); + db = pParse->db; + if( pList==0 ){ + pList = sqlite3DbMallocRawNN(pParse->db, SZ_SRCLIST(1)); + if( pList==0 ) return 0; + pList->nAlloc = 1; + pList->nSrc = 1; + memset(&pList->a[0], 0, sizeof(pList->a[0])); + pList->a[0].iCursor = -1; + }else{ + SrcList *pNew = sqlite3SrcListEnlarge(pParse, pList, 1, pList->nSrc); + if( pNew==0 ){ + sqlite3SrcListDelete(db, pList); + return 0; + }else{ + pList = pNew; + } + } + pItem = &pList->a[pList->nSrc-1]; + if( pDatabase && pDatabase->z==0 ){ + pDatabase = 0; + } + assert( pItem->fg.fixedSchema==0 ); + assert( pItem->fg.isSubquery==0 ); + if( pDatabase ){ + pItem->zName = sqlite3NameFromToken(db, pDatabase); + pItem->u4.zDatabase = sqlite3NameFromToken(db, pTable); + }else{ + pItem->zName = sqlite3NameFromToken(db, pTable); + pItem->u4.zDatabase = 0; + } + return pList; +} + +/* +** Assign VdbeCursor index numbers to all tables in a SrcList +*/ +SQLITE_PRIVATE void sqlite3SrcListAssignCursors(Parse *pParse, SrcList *pList){ + int i; + SrcItem *pItem; + assert( pList || pParse->db->mallocFailed ); + if( ALWAYS(pList) ){ + for(i=0, pItem=pList->a; inSrc; i++, pItem++){ + if( pItem->iCursor>=0 ) continue; + pItem->iCursor = pParse->nTab++; + if( pItem->fg.isSubquery ){ + assert( pItem->u4.pSubq!=0 ); + assert( pItem->u4.pSubq->pSelect!=0 ); + assert( pItem->u4.pSubq->pSelect->pSrc!=0 ); + sqlite3SrcListAssignCursors(pParse, pItem->u4.pSubq->pSelect->pSrc); + } + } + } +} + +/* +** Delete a Subquery object and its substructure. +*/ +SQLITE_PRIVATE void sqlite3SubqueryDelete(sqlite3 *db, Subquery *pSubq){ + assert( pSubq!=0 && pSubq->pSelect!=0 ); + sqlite3SelectDelete(db, pSubq->pSelect); + sqlite3DbFree(db, pSubq); +} + +/* +** Remove a Subquery from a SrcItem. Return the associated Select object. +** The returned Select becomes the responsibility of the caller. +*/ +SQLITE_PRIVATE Select *sqlite3SubqueryDetach(sqlite3 *db, SrcItem *pItem){ + Select *pSel; + assert( pItem!=0 ); + assert( pItem->fg.isSubquery ); + pSel = pItem->u4.pSubq->pSelect; + sqlite3DbFree(db, pItem->u4.pSubq); + pItem->u4.pSubq = 0; + pItem->fg.isSubquery = 0; + return pSel; +} + +/* +** Delete an entire SrcList including all its substructure. +*/ +SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){ + int i; + SrcItem *pItem; + assert( db!=0 ); + if( pList==0 ) return; + for(pItem=pList->a, i=0; inSrc; i++, pItem++){ + + /* Check invariants on SrcItem */ + assert( !pItem->fg.isIndexedBy || !pItem->fg.isTabFunc ); + assert( !pItem->fg.isCte || !pItem->fg.isIndexedBy ); + assert( !pItem->fg.fixedSchema || !pItem->fg.isSubquery ); + assert( !pItem->fg.isSubquery || (pItem->u4.pSubq!=0 && + pItem->u4.pSubq->pSelect!=0) ); + + if( pItem->zName ) sqlite3DbNNFreeNN(db, pItem->zName); + if( pItem->zAlias ) sqlite3DbNNFreeNN(db, pItem->zAlias); + if( pItem->fg.isSubquery ){ + sqlite3SubqueryDelete(db, pItem->u4.pSubq); + }else if( pItem->fg.fixedSchema==0 && pItem->u4.zDatabase!=0 ){ + sqlite3DbNNFreeNN(db, pItem->u4.zDatabase); + } + if( pItem->fg.isIndexedBy ) sqlite3DbFree(db, pItem->u1.zIndexedBy); + if( pItem->fg.isTabFunc ) sqlite3ExprListDelete(db, pItem->u1.pFuncArg); + sqlite3DeleteTable(db, pItem->pSTab); + if( pItem->fg.isUsing ){ + sqlite3IdListDelete(db, pItem->u3.pUsing); + }else if( pItem->u3.pOn ){ + sqlite3ExprDelete(db, pItem->u3.pOn); + } + } + sqlite3DbNNFreeNN(db, pList); +} + +/* +** Attach a Subquery object to pItem->uv.pSubq. Set the +** pSelect value but leave all the other values initialized +** to zero. +** +** A copy of the Select object is made if dupSelect is true, and the +** SrcItem takes responsibility for deleting the copy. If dupSelect is +** false, ownership of the Select passes to the SrcItem. Either way, +** the SrcItem will take responsibility for deleting the Select. +** +** When dupSelect is zero, that means the Select might get deleted right +** away if there is an OOM error. Beware. +** +** Return non-zero on success. Return zero on an OOM error. +*/ +SQLITE_PRIVATE int sqlite3SrcItemAttachSubquery( + Parse *pParse, /* Parsing context */ + SrcItem *pItem, /* Item to which the subquery is to be attached */ + Select *pSelect, /* The subquery SELECT. Must be non-NULL */ + int dupSelect /* If true, attach a copy of pSelect, not pSelect itself.*/ +){ + Subquery *p; + assert( pSelect!=0 ); + assert( pItem->fg.isSubquery==0 ); + if( pItem->fg.fixedSchema ){ + pItem->u4.pSchema = 0; + pItem->fg.fixedSchema = 0; + }else if( pItem->u4.zDatabase!=0 ){ + sqlite3DbFree(pParse->db, pItem->u4.zDatabase); + pItem->u4.zDatabase = 0; + } + if( dupSelect ){ + pSelect = sqlite3SelectDup(pParse->db, pSelect, 0); + if( pSelect==0 ) return 0; + } + p = pItem->u4.pSubq = sqlite3DbMallocRawNN(pParse->db, sizeof(Subquery)); + if( p==0 ){ + sqlite3SelectDelete(pParse->db, pSelect); + return 0; + } + pItem->fg.isSubquery = 1; + p->pSelect = pSelect; + assert( offsetof(Subquery, pSelect)==0 ); + memset(((char*)p)+sizeof(p->pSelect), 0, sizeof(*p)-sizeof(p->pSelect)); + return 1; +} + + +/* +** This routine is called by the parser to add a new term to the +** end of a growing FROM clause. The "p" parameter is the part of +** the FROM clause that has already been constructed. "p" is NULL +** if this is the first term of the FROM clause. pTable and pDatabase +** are the name of the table and database named in the FROM clause term. +** pDatabase is NULL if the database name qualifier is missing - the +** usual case. If the term has an alias, then pAlias points to the +** alias token. If the term is a subquery, then pSubquery is the +** SELECT statement that the subquery encodes. The pTable and +** pDatabase parameters are NULL for subqueries. The pOn and pUsing +** parameters are the content of the ON and USING clauses. +** +** Return a new SrcList which encodes is the FROM with the new +** term added. +*/ +SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm( + Parse *pParse, /* Parsing context */ + SrcList *p, /* The left part of the FROM clause already seen */ + Token *pTable, /* Name of the table to add to the FROM clause */ + Token *pDatabase, /* Name of the database containing pTable */ + Token *pAlias, /* The right-hand side of the AS subexpression */ + Select *pSubquery, /* A subquery used in place of a table name */ + OnOrUsing *pOnUsing /* Either the ON clause or the USING clause */ +){ + SrcItem *pItem; + sqlite3 *db = pParse->db; + if( !p && pOnUsing!=0 && (pOnUsing->pOn || pOnUsing->pUsing) ){ + sqlite3ErrorMsg(pParse, "a JOIN clause is required before %s", + (pOnUsing->pOn ? "ON" : "USING") + ); + goto append_from_error; + } + p = sqlite3SrcListAppend(pParse, p, pTable, pDatabase); + if( p==0 ){ + goto append_from_error; + } + assert( p->nSrc>0 ); + pItem = &p->a[p->nSrc-1]; + assert( (pTable==0)==(pDatabase==0) ); + assert( pItem->zName==0 || pDatabase!=0 ); + if( IN_RENAME_OBJECT && pItem->zName ){ + Token *pToken = (ALWAYS(pDatabase) && pDatabase->z) ? pDatabase : pTable; + sqlite3RenameTokenMap(pParse, pItem->zName, pToken); + } + assert( pAlias!=0 ); + if( pAlias->n ){ + pItem->zAlias = sqlite3NameFromToken(db, pAlias); + } + assert( pSubquery==0 || pDatabase==0 ); + if( pSubquery ){ + if( sqlite3SrcItemAttachSubquery(pParse, pItem, pSubquery, 0) ){ + if( pSubquery->selFlags & SF_NestedFrom ){ + pItem->fg.isNestedFrom = 1; + } + } + } + assert( pOnUsing==0 || pOnUsing->pOn==0 || pOnUsing->pUsing==0 ); + assert( pItem->fg.isUsing==0 ); + if( pOnUsing==0 ){ + pItem->u3.pOn = 0; + }else if( pOnUsing->pUsing ){ + pItem->fg.isUsing = 1; + pItem->u3.pUsing = pOnUsing->pUsing; + }else{ + pItem->u3.pOn = pOnUsing->pOn; + } + return p; + +append_from_error: + assert( p==0 ); + sqlite3ClearOnOrUsing(db, pOnUsing); + sqlite3SelectDelete(db, pSubquery); + return 0; +} + +/* +** Add an INDEXED BY or NOT INDEXED clause to the most recently added +** element of the source-list passed as the second argument. +*/ +SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pIndexedBy){ + assert( pIndexedBy!=0 ); + if( p && pIndexedBy->n>0 ){ + SrcItem *pItem; + assert( p->nSrc>0 ); + pItem = &p->a[p->nSrc-1]; + assert( pItem->fg.notIndexed==0 ); + assert( pItem->fg.isIndexedBy==0 ); + assert( pItem->fg.isTabFunc==0 ); + if( pIndexedBy->n==1 && !pIndexedBy->z ){ + /* A "NOT INDEXED" clause was supplied. See parse.y + ** construct "indexed_opt" for details. */ + pItem->fg.notIndexed = 1; + }else{ + pItem->u1.zIndexedBy = sqlite3NameFromToken(pParse->db, pIndexedBy); + pItem->fg.isIndexedBy = 1; + assert( pItem->fg.isCte==0 ); /* No collision on union u2 */ + } + } +} + +/* +** Append the contents of SrcList p2 to SrcList p1 and return the resulting +** SrcList. Or, if an error occurs, return NULL. In all cases, p1 and p2 +** are deleted by this function. +*/ +SQLITE_PRIVATE SrcList *sqlite3SrcListAppendList(Parse *pParse, SrcList *p1, SrcList *p2){ + assert( p1 ); + assert( p2 || pParse->nErr ); + assert( p2==0 || p2->nSrc>=1 ); + testcase( p1->nSrc==0 ); + if( p2 ){ + int nOld = p1->nSrc; + SrcList *pNew = sqlite3SrcListEnlarge(pParse, p1, p2->nSrc, nOld); + if( pNew==0 ){ + sqlite3SrcListDelete(pParse->db, p2); + }else{ + p1 = pNew; + memcpy(&p1->a[nOld], p2->a, p2->nSrc*sizeof(SrcItem)); + assert( nOld==1 || (p2->a[0].fg.jointype & JT_LTORJ)==0 ); + assert( p1->nSrc>=1 ); + p1->a[0].fg.jointype |= (JT_LTORJ & p2->a[0].fg.jointype); + sqlite3DbFree(pParse->db, p2); + } + } + return p1; +} + +/* +** Add the list of function arguments to the SrcList entry for a +** table-valued-function. +*/ +SQLITE_PRIVATE void sqlite3SrcListFuncArgs(Parse *pParse, SrcList *p, ExprList *pList){ + if( p ){ + SrcItem *pItem = &p->a[p->nSrc-1]; + assert( pItem->fg.notIndexed==0 ); + assert( pItem->fg.isIndexedBy==0 ); + assert( pItem->fg.isTabFunc==0 ); + pItem->u1.pFuncArg = pList; + pItem->fg.isTabFunc = 1; + }else{ + sqlite3ExprListDelete(pParse->db, pList); + } +} + +/* +** When building up a FROM clause in the parser, the join operator +** is initially attached to the left operand. But the code generator +** expects the join operator to be on the right operand. This routine +** Shifts all join operators from left to right for an entire FROM +** clause. +** +** Example: Suppose the join is like this: +** +** A natural cross join B +** +** The operator is "natural cross join". The A and B operands are stored +** in p->a[0] and p->a[1], respectively. The parser initially stores the +** operator with A. This routine shifts that operator over to B. +** +** Additional changes: +** +** * All tables to the left of the right-most RIGHT JOIN are tagged with +** JT_LTORJ (mnemonic: Left Table Of Right Join) so that the +** code generator can easily tell that the table is part of +** the left operand of at least one RIGHT JOIN. +*/ +SQLITE_PRIVATE void sqlite3SrcListShiftJoinType(Parse *pParse, SrcList *p){ + (void)pParse; + if( p && p->nSrc>1 ){ + int i = p->nSrc-1; + u8 allFlags = 0; + do{ + allFlags |= p->a[i].fg.jointype = p->a[i-1].fg.jointype; + }while( (--i)>0 ); + p->a[0].fg.jointype = 0; + + /* All terms to the left of a RIGHT JOIN should be tagged with the + ** JT_LTORJ flags */ + if( allFlags & JT_RIGHT ){ + for(i=p->nSrc-1; ALWAYS(i>0) && (p->a[i].fg.jointype&JT_RIGHT)==0; i--){} + i--; + assert( i>=0 ); + do{ + p->a[i].fg.jointype |= JT_LTORJ; + }while( (--i)>=0 ); + } + } +} + +/* +** Generate VDBE code for a BEGIN statement. +*/ +SQLITE_PRIVATE void sqlite3BeginTransaction(Parse *pParse, int type){ + sqlite3 *db; + Vdbe *v; + int i; + + assert( pParse!=0 ); + db = pParse->db; + assert( db!=0 ); + if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "BEGIN", 0, 0) ){ + return; + } + v = sqlite3GetVdbe(pParse); + if( !v ) return; + if( type!=TK_DEFERRED ){ + for(i=0; inDb; i++){ + int eTxnType; + Btree *pBt = db->aDb[i].pBt; + if( pBt && sqlite3BtreeIsReadonly(pBt) ){ + eTxnType = 0; /* Read txn */ + }else if( type==TK_EXCLUSIVE ){ + eTxnType = 2; /* Exclusive txn */ + }else{ + eTxnType = 1; /* Write txn */ + } + sqlite3VdbeAddOp2(v, OP_Transaction, i, eTxnType); + sqlite3VdbeUsesBtree(v, i); + } + } + sqlite3VdbeAddOp0(v, OP_AutoCommit); +} + +/* +** Generate VDBE code for a COMMIT or ROLLBACK statement. +** Code for ROLLBACK is generated if eType==TK_ROLLBACK. Otherwise +** code is generated for a COMMIT. +*/ +SQLITE_PRIVATE void sqlite3EndTransaction(Parse *pParse, int eType){ + Vdbe *v; + int isRollback; + + assert( pParse!=0 ); + assert( pParse->db!=0 ); + assert( eType==TK_COMMIT || eType==TK_END || eType==TK_ROLLBACK ); + isRollback = eType==TK_ROLLBACK; + if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, + isRollback ? "ROLLBACK" : "COMMIT", 0, 0) ){ + return; + } + v = sqlite3GetVdbe(pParse); + if( v ){ + sqlite3VdbeAddOp2(v, OP_AutoCommit, 1, isRollback); + } +} + +/* +** This function is called by the parser when it parses a command to create, +** release or rollback an SQL savepoint. +*/ +SQLITE_PRIVATE void sqlite3Savepoint(Parse *pParse, int op, Token *pName){ + char *zName = sqlite3NameFromToken(pParse->db, pName); + if( zName ){ + Vdbe *v = sqlite3GetVdbe(pParse); +#ifndef SQLITE_OMIT_AUTHORIZATION + static const char * const az[] = { "BEGIN", "RELEASE", "ROLLBACK" }; + assert( !SAVEPOINT_BEGIN && SAVEPOINT_RELEASE==1 && SAVEPOINT_ROLLBACK==2 ); +#endif + if( !v || sqlite3AuthCheck(pParse, SQLITE_SAVEPOINT, az[op], zName, 0) ){ + sqlite3DbFree(pParse->db, zName); + return; + } + sqlite3VdbeAddOp4(v, OP_Savepoint, op, 0, 0, zName, P4_DYNAMIC); + } +} + +/* +** Make sure the TEMP database is open and available for use. Return +** the number of errors. Leave any error messages in the pParse structure. +*/ +SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *pParse){ + sqlite3 *db = pParse->db; + if( db->aDb[1].pBt==0 && !pParse->explain ){ + int rc; + Btree *pBt; + static const int flags = + SQLITE_OPEN_READWRITE | + SQLITE_OPEN_CREATE | + SQLITE_OPEN_EXCLUSIVE | + SQLITE_OPEN_DELETEONCLOSE | + SQLITE_OPEN_TEMP_DB; + + rc = sqlite3BtreeOpen(db->pVfs, 0, db, &pBt, 0, flags); + if( rc!=SQLITE_OK ){ + sqlite3ErrorMsg(pParse, "unable to open a temporary database " + "file for storing temporary tables"); + pParse->rc = rc; + return 1; + } + db->aDb[1].pBt = pBt; + assert( db->aDb[1].pSchema ); + if( SQLITE_NOMEM==sqlite3BtreeSetPageSize(pBt, db->nextPagesize, 0, 0) ){ + sqlite3OomFault(db); + return 1; + } + } + return 0; +} + +/* +** Record the fact that the schema cookie will need to be verified +** for database iDb. The code to actually verify the schema cookie +** will occur at the end of the top-level VDBE and will be generated +** later, by sqlite3FinishCoding(). +*/ +static void sqlite3CodeVerifySchemaAtToplevel(Parse *pToplevel, int iDb){ + assert( iDb>=0 && iDbdb->nDb ); + assert( pToplevel->db->aDb[iDb].pBt!=0 || iDb==1 ); + assert( iDbdb, iDb, 0) ); + if( DbMaskTest(pToplevel->cookieMask, iDb)==0 ){ + DbMaskSet(pToplevel->cookieMask, iDb); + if( !OMIT_TEMPDB && iDb==1 ){ + sqlite3OpenTempDatabase(pToplevel); + } + } +} +SQLITE_PRIVATE void sqlite3CodeVerifySchema(Parse *pParse, int iDb){ + sqlite3CodeVerifySchemaAtToplevel(sqlite3ParseToplevel(pParse), iDb); +} + + +/* +** If argument zDb is NULL, then call sqlite3CodeVerifySchema() for each +** attached database. Otherwise, invoke it for the database named zDb only. +*/ +SQLITE_PRIVATE void sqlite3CodeVerifyNamedSchema(Parse *pParse, const char *zDb){ + sqlite3 *db = pParse->db; + int i; + for(i=0; inDb; i++){ + Db *pDb = &db->aDb[i]; + if( pDb->pBt && (!zDb || 0==sqlite3StrICmp(zDb, pDb->zDbSName)) ){ + sqlite3CodeVerifySchema(pParse, i); + } + } +} + +/* +** Generate VDBE code that prepares for doing an operation that +** might change the database. +** +** This routine starts a new transaction if we are not already within +** a transaction. If we are already within a transaction, then a checkpoint +** is set if the setStatement parameter is true. A checkpoint should +** be set for operations that might fail (due to a constraint) part of +** the way through and which will need to undo some writes without having to +** rollback the whole transaction. For operations where all constraints +** can be checked before any changes are made to the database, it is never +** necessary to undo a write and the checkpoint should not be set. +*/ +SQLITE_PRIVATE void sqlite3BeginWriteOperation(Parse *pParse, int setStatement, int iDb){ + Parse *pToplevel = sqlite3ParseToplevel(pParse); + sqlite3CodeVerifySchemaAtToplevel(pToplevel, iDb); + DbMaskSet(pToplevel->writeMask, iDb); + pToplevel->isMultiWrite |= setStatement; +} + +/* +** Indicate that the statement currently under construction might write +** more than one entry (example: deleting one row then inserting another, +** inserting multiple rows in a table, or inserting a row and index entries.) +** If an abort occurs after some of these writes have completed, then it will +** be necessary to undo the completed writes. +*/ +SQLITE_PRIVATE void sqlite3MultiWrite(Parse *pParse){ + Parse *pToplevel = sqlite3ParseToplevel(pParse); + pToplevel->isMultiWrite = 1; +} + +/* +** The code generator calls this routine if is discovers that it is +** possible to abort a statement prior to completion. In order to +** perform this abort without corrupting the database, we need to make +** sure that the statement is protected by a statement transaction. +** +** Technically, we only need to set the mayAbort flag if the +** isMultiWrite flag was previously set. There is a time dependency +** such that the abort must occur after the multiwrite. This makes +** some statements involving the REPLACE conflict resolution algorithm +** go a little faster. But taking advantage of this time dependency +** makes it more difficult to prove that the code is correct (in +** particular, it prevents us from writing an effective +** implementation of sqlite3AssertMayAbort()) and so we have chosen +** to take the safe route and skip the optimization. +*/ +SQLITE_PRIVATE void sqlite3MayAbort(Parse *pParse){ + Parse *pToplevel = sqlite3ParseToplevel(pParse); + pToplevel->mayAbort = 1; +} + +/* +** Code an OP_Halt that causes the vdbe to return an SQLITE_CONSTRAINT +** error. The onError parameter determines which (if any) of the statement +** and/or current transaction is rolled back. +*/ +SQLITE_PRIVATE void sqlite3HaltConstraint( + Parse *pParse, /* Parsing context */ + int errCode, /* extended error code */ + int onError, /* Constraint type */ + char *p4, /* Error message */ + i8 p4type, /* P4_STATIC or P4_TRANSIENT */ + u8 p5Errmsg /* P5_ErrMsg type */ +){ + Vdbe *v; + assert( pParse->pVdbe!=0 ); + v = sqlite3GetVdbe(pParse); + assert( (errCode&0xff)==SQLITE_CONSTRAINT || pParse->nested ); + if( onError==OE_Abort ){ + sqlite3MayAbort(pParse); + } + sqlite3VdbeAddOp4(v, OP_Halt, errCode, onError, 0, p4, p4type); + sqlite3VdbeChangeP5(v, p5Errmsg); +} + +/* +** Code an OP_Halt due to UNIQUE or PRIMARY KEY constraint violation. +*/ +SQLITE_PRIVATE void sqlite3UniqueConstraint( + Parse *pParse, /* Parsing context */ + int onError, /* Constraint type */ + Index *pIdx /* The index that triggers the constraint */ +){ + char *zErr; + int j; + StrAccum errMsg; + Table *pTab = pIdx->pTable; + + sqlite3StrAccumInit(&errMsg, pParse->db, 0, 0, + pParse->db->aLimit[SQLITE_LIMIT_LENGTH]); + if( pIdx->aColExpr ){ + sqlite3_str_appendf(&errMsg, "index '%q'", pIdx->zName); + }else{ + for(j=0; jnKeyCol; j++){ + char *zCol; + assert( pIdx->aiColumn[j]>=0 ); + zCol = pTab->aCol[pIdx->aiColumn[j]].zCnName; + if( j ) sqlite3_str_append(&errMsg, ", ", 2); + sqlite3_str_appendall(&errMsg, pTab->zName); + sqlite3_str_append(&errMsg, ".", 1); + sqlite3_str_appendall(&errMsg, zCol); + } + } + zErr = sqlite3StrAccumFinish(&errMsg); + sqlite3HaltConstraint(pParse, + IsPrimaryKeyIndex(pIdx) ? SQLITE_CONSTRAINT_PRIMARYKEY + : SQLITE_CONSTRAINT_UNIQUE, + onError, zErr, P4_DYNAMIC, P5_ConstraintUnique); +} + + +/* +** Code an OP_Halt due to non-unique rowid. +*/ +SQLITE_PRIVATE void sqlite3RowidConstraint( + Parse *pParse, /* Parsing context */ + int onError, /* Conflict resolution algorithm */ + Table *pTab /* The table with the non-unique rowid */ +){ + char *zMsg; + int rc; + if( pTab->iPKey>=0 ){ + zMsg = sqlite3MPrintf(pParse->db, "%s.%s", pTab->zName, + pTab->aCol[pTab->iPKey].zCnName); + rc = SQLITE_CONSTRAINT_PRIMARYKEY; + }else{ + zMsg = sqlite3MPrintf(pParse->db, "%s.rowid", pTab->zName); + rc = SQLITE_CONSTRAINT_ROWID; + } + sqlite3HaltConstraint(pParse, rc, onError, zMsg, P4_DYNAMIC, + P5_ConstraintUnique); +} + +/* +** Check to see if pIndex uses the collating sequence pColl. Return +** true if it does and false if it does not. +*/ +#ifndef SQLITE_OMIT_REINDEX +static int collationMatch(const char *zColl, Index *pIndex){ + int i; + assert( zColl!=0 ); + for(i=0; inColumn; i++){ + const char *z = pIndex->azColl[i]; + assert( z!=0 || pIndex->aiColumn[i]<0 ); + if( pIndex->aiColumn[i]>=0 && 0==sqlite3StrICmp(z, zColl) ){ + return 1; + } + } + return 0; +} +#endif + +/* +** Recompute all indices of pTab that use the collating sequence pColl. +** If pColl==0 then recompute all indices of pTab. +*/ +#ifndef SQLITE_OMIT_REINDEX +static void reindexTable(Parse *pParse, Table *pTab, char const *zColl){ + if( !IsVirtual(pTab) ){ + Index *pIndex; /* An index associated with pTab */ + + for(pIndex=pTab->pIndex; pIndex; pIndex=pIndex->pNext){ + if( zColl==0 || collationMatch(zColl, pIndex) ){ + int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + sqlite3BeginWriteOperation(pParse, 0, iDb); + sqlite3RefillIndex(pParse, pIndex, -1); + } + } + } +} +#endif + +/* +** Recompute all indices of all tables in all databases where the +** indices use the collating sequence pColl. If pColl==0 then recompute +** all indices everywhere. +*/ +#ifndef SQLITE_OMIT_REINDEX +static void reindexDatabases(Parse *pParse, char const *zColl){ + Db *pDb; /* A single database */ + int iDb; /* The database index number */ + sqlite3 *db = pParse->db; /* The database connection */ + HashElem *k; /* For looping over tables in pDb */ + Table *pTab; /* A table in the database */ + + assert( sqlite3BtreeHoldsAllMutexes(db) ); /* Needed for schema access */ + for(iDb=0, pDb=db->aDb; iDbnDb; iDb++, pDb++){ + assert( pDb!=0 ); + for(k=sqliteHashFirst(&pDb->pSchema->tblHash); k; k=sqliteHashNext(k)){ + pTab = (Table*)sqliteHashData(k); + reindexTable(pParse, pTab, zColl); + } + } +} +#endif + +/* +** Generate code for the REINDEX command. +** +** REINDEX -- 1 +** REINDEX -- 2 +** REINDEX ?.? -- 3 +** REINDEX ?.? -- 4 +** +** Form 1 causes all indices in all attached databases to be rebuilt. +** Form 2 rebuilds all indices in all databases that use the named +** collating function. Forms 3 and 4 rebuild the named index or all +** indices associated with the named table. +*/ +#ifndef SQLITE_OMIT_REINDEX +SQLITE_PRIVATE void sqlite3Reindex(Parse *pParse, Token *pName1, Token *pName2){ + CollSeq *pColl; /* Collating sequence to be reindexed, or NULL */ + char *z; /* Name of a table or index */ + const char *zDb; /* Name of the database */ + Table *pTab; /* A table in the database */ + Index *pIndex; /* An index associated with pTab */ + int iDb; /* The database index number */ + sqlite3 *db = pParse->db; /* The database connection */ + Token *pObjName; /* Name of the table or index to be reindexed */ + + /* Read the database schema. If an error occurs, leave an error message + ** and code in pParse and return NULL. */ + if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ + return; + } + + if( pName1==0 ){ + reindexDatabases(pParse, 0); + return; + }else if( NEVER(pName2==0) || pName2->z==0 ){ + char *zColl; + assert( pName1->z ); + zColl = sqlite3NameFromToken(pParse->db, pName1); + if( !zColl ) return; + pColl = sqlite3FindCollSeq(db, ENC(db), zColl, 0); + if( pColl ){ + reindexDatabases(pParse, zColl); + sqlite3DbFree(db, zColl); + return; + } + sqlite3DbFree(db, zColl); + } + iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pObjName); + if( iDb<0 ) return; + z = sqlite3NameFromToken(db, pObjName); + if( z==0 ) return; + zDb = pName2->n ? db->aDb[iDb].zDbSName : 0; + pTab = sqlite3FindTable(db, z, zDb); + if( pTab ){ + reindexTable(pParse, pTab, 0); + sqlite3DbFree(db, z); + return; + } + pIndex = sqlite3FindIndex(db, z, zDb); + sqlite3DbFree(db, z); + if( pIndex ){ + iDb = sqlite3SchemaToIndex(db, pIndex->pTable->pSchema); + sqlite3BeginWriteOperation(pParse, 0, iDb); + sqlite3RefillIndex(pParse, pIndex, -1); + return; + } + sqlite3ErrorMsg(pParse, "unable to identify the object to be reindexed"); +} +#endif + +/* +** Return a KeyInfo structure that is appropriate for the given Index. +** +** The caller should invoke sqlite3KeyInfoUnref() on the returned object +** when it has finished using it. +*/ +SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){ + int i; + int nCol = pIdx->nColumn; + int nKey = pIdx->nKeyCol; + KeyInfo *pKey; + if( pParse->nErr ) return 0; + if( pIdx->uniqNotNull ){ + pKey = sqlite3KeyInfoAlloc(pParse->db, nKey, nCol-nKey); + }else{ + pKey = sqlite3KeyInfoAlloc(pParse->db, nCol, 0); + } + if( pKey ){ + assert( sqlite3KeyInfoIsWriteable(pKey) ); + for(i=0; iazColl[i]; + pKey->aColl[i] = zColl==sqlite3StrBINARY ? 0 : + sqlite3LocateCollSeq(pParse, zColl); + pKey->aSortFlags[i] = pIdx->aSortOrder[i]; + assert( 0==(pKey->aSortFlags[i] & KEYINFO_ORDER_BIGNULL) ); + } + if( pParse->nErr ){ + assert( pParse->rc==SQLITE_ERROR_MISSING_COLLSEQ ); + if( pIdx->bNoQuery==0 + && sqlite3HashFind(&pIdx->pSchema->idxHash, pIdx->zName) + ){ + /* Deactivate the index because it contains an unknown collating + ** sequence. The only way to reactive the index is to reload the + ** schema. Adding the missing collating sequence later does not + ** reactive the index. The application had the chance to register + ** the missing index using the collation-needed callback. For + ** simplicity, SQLite will not give the application a second chance. + ** + ** Except, do not do this if the index is not in the schema hash + ** table. In this case the index is currently being constructed + ** by a CREATE INDEX statement, and retrying will not help. */ + pIdx->bNoQuery = 1; + pParse->rc = SQLITE_ERROR_RETRY; + } + sqlite3KeyInfoUnref(pKey); + pKey = 0; + } + } + return pKey; +} + +#ifndef SQLITE_OMIT_CTE +/* +** Create a new CTE object +*/ +SQLITE_PRIVATE Cte *sqlite3CteNew( + Parse *pParse, /* Parsing context */ + Token *pName, /* Name of the common-table */ + ExprList *pArglist, /* Optional column name list for the table */ + Select *pQuery, /* Query used to initialize the table */ + u8 eM10d /* The MATERIALIZED flag */ +){ + Cte *pNew; + sqlite3 *db = pParse->db; + + pNew = sqlite3DbMallocZero(db, sizeof(*pNew)); + assert( pNew!=0 || db->mallocFailed ); + + if( db->mallocFailed ){ + sqlite3ExprListDelete(db, pArglist); + sqlite3SelectDelete(db, pQuery); + }else{ + pNew->pSelect = pQuery; + pNew->pCols = pArglist; + pNew->zName = sqlite3NameFromToken(pParse->db, pName); + pNew->eM10d = eM10d; + } + return pNew; +} + +/* +** Clear information from a Cte object, but do not deallocate storage +** for the object itself. +*/ +static void cteClear(sqlite3 *db, Cte *pCte){ + assert( pCte!=0 ); + sqlite3ExprListDelete(db, pCte->pCols); + sqlite3SelectDelete(db, pCte->pSelect); + sqlite3DbFree(db, pCte->zName); +} + +/* +** Free the contents of the CTE object passed as the second argument. +*/ +SQLITE_PRIVATE void sqlite3CteDelete(sqlite3 *db, Cte *pCte){ + assert( pCte!=0 ); + cteClear(db, pCte); + sqlite3DbFree(db, pCte); +} + +/* +** This routine is invoked once per CTE by the parser while parsing a +** WITH clause. The CTE described by the third argument is added to +** the WITH clause of the second argument. If the second argument is +** NULL, then a new WITH argument is created. +*/ +SQLITE_PRIVATE With *sqlite3WithAdd( + Parse *pParse, /* Parsing context */ + With *pWith, /* Existing WITH clause, or NULL */ + Cte *pCte /* CTE to add to the WITH clause */ +){ + sqlite3 *db = pParse->db; + With *pNew; + char *zName; + + if( pCte==0 ){ + return pWith; + } + + /* Check that the CTE name is unique within this WITH clause. If + ** not, store an error in the Parse structure. */ + zName = pCte->zName; + if( zName && pWith ){ + int i; + for(i=0; inCte; i++){ + if( sqlite3StrICmp(zName, pWith->a[i].zName)==0 ){ + sqlite3ErrorMsg(pParse, "duplicate WITH table name: %s", zName); + } + } + } + + if( pWith ){ + pNew = sqlite3DbRealloc(db, pWith, SZ_WITH(pWith->nCte+1)); + }else{ + pNew = sqlite3DbMallocZero(db, SZ_WITH(1)); + } + assert( (pNew!=0 && zName!=0) || db->mallocFailed ); + + if( db->mallocFailed ){ + sqlite3CteDelete(db, pCte); + pNew = pWith; + }else{ + pNew->a[pNew->nCte++] = *pCte; + sqlite3DbFree(db, pCte); + } + + return pNew; +} + +/* +** Free the contents of the With object passed as the second argument. +*/ +SQLITE_PRIVATE void sqlite3WithDelete(sqlite3 *db, With *pWith){ + if( pWith ){ + int i; + for(i=0; inCte; i++){ + cteClear(db, &pWith->a[i]); + } + sqlite3DbFree(db, pWith); + } +} +SQLITE_PRIVATE void sqlite3WithDeleteGeneric(sqlite3 *db, void *pWith){ + sqlite3WithDelete(db, (With*)pWith); +} +#endif /* !defined(SQLITE_OMIT_CTE) */ + +/************** End of build.c ***********************************************/ +/************** Begin file callback.c ****************************************/ +/* +** 2005 May 23 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file contains functions used to access the internal hash tables +** of user defined functions and collation sequences. +*/ + +/* #include "sqliteInt.h" */ + +/* +** Invoke the 'collation needed' callback to request a collation sequence +** in the encoding enc of name zName, length nName. +*/ +static void callCollNeeded(sqlite3 *db, int enc, const char *zName){ + assert( !db->xCollNeeded || !db->xCollNeeded16 ); + if( db->xCollNeeded ){ + char *zExternal = sqlite3DbStrDup(db, zName); + if( !zExternal ) return; + db->xCollNeeded(db->pCollNeededArg, db, enc, zExternal); + sqlite3DbFree(db, zExternal); + } +#ifndef SQLITE_OMIT_UTF16 + if( db->xCollNeeded16 ){ + char const *zExternal; + sqlite3_value *pTmp = sqlite3ValueNew(db); + sqlite3ValueSetStr(pTmp, -1, zName, SQLITE_UTF8, SQLITE_STATIC); + zExternal = sqlite3ValueText(pTmp, SQLITE_UTF16NATIVE); + if( zExternal ){ + db->xCollNeeded16(db->pCollNeededArg, db, (int)ENC(db), zExternal); + } + sqlite3ValueFree(pTmp); + } +#endif +} + +/* +** This routine is called if the collation factory fails to deliver a +** collation function in the best encoding but there may be other versions +** of this collation function (for other text encodings) available. Use one +** of these instead if they exist. Avoid a UTF-8 <-> UTF-16 conversion if +** possible. +*/ +static int synthCollSeq(sqlite3 *db, CollSeq *pColl){ + CollSeq *pColl2; + char *z = pColl->zName; + int i; + static const u8 aEnc[] = { SQLITE_UTF16BE, SQLITE_UTF16LE, SQLITE_UTF8 }; + for(i=0; i<3; i++){ + pColl2 = sqlite3FindCollSeq(db, aEnc[i], z, 0); + if( pColl2->xCmp!=0 ){ + memcpy(pColl, pColl2, sizeof(CollSeq)); + pColl->xDel = 0; /* Do not copy the destructor */ + return SQLITE_OK; + } + } + return SQLITE_ERROR; +} + +/* +** This routine is called on a collation sequence before it is used to +** check that it is defined. An undefined collation sequence exists when +** a database is loaded that contains references to collation sequences +** that have not been defined by sqlite3_create_collation() etc. +** +** If required, this routine calls the 'collation needed' callback to +** request a definition of the collating sequence. If this doesn't work, +** an equivalent collating sequence that uses a text encoding different +** from the main database is substituted, if one is available. +*/ +SQLITE_PRIVATE int sqlite3CheckCollSeq(Parse *pParse, CollSeq *pColl){ + if( pColl && pColl->xCmp==0 ){ + const char *zName = pColl->zName; + sqlite3 *db = pParse->db; + CollSeq *p = sqlite3GetCollSeq(pParse, ENC(db), pColl, zName); + if( !p ){ + return SQLITE_ERROR; + } + assert( p==pColl ); + } + return SQLITE_OK; +} + + + +/* +** Locate and return an entry from the db.aCollSeq hash table. If the entry +** specified by zName and nName is not found and parameter 'create' is +** true, then create a new entry. Otherwise return NULL. +** +** Each pointer stored in the sqlite3.aCollSeq hash table contains an +** array of three CollSeq structures. The first is the collation sequence +** preferred for UTF-8, the second UTF-16le, and the third UTF-16be. +** +** Stored immediately after the three collation sequences is a copy of +** the collation sequence name. A pointer to this string is stored in +** each collation sequence structure. +*/ +static CollSeq *findCollSeqEntry( + sqlite3 *db, /* Database connection */ + const char *zName, /* Name of the collating sequence */ + int create /* Create a new entry if true */ +){ + CollSeq *pColl; + pColl = sqlite3HashFind(&db->aCollSeq, zName); + + if( 0==pColl && create ){ + int nName = sqlite3Strlen30(zName) + 1; + pColl = sqlite3DbMallocZero(db, 3*sizeof(*pColl) + nName); + if( pColl ){ + CollSeq *pDel = 0; + pColl[0].zName = (char*)&pColl[3]; + pColl[0].enc = SQLITE_UTF8; + pColl[1].zName = (char*)&pColl[3]; + pColl[1].enc = SQLITE_UTF16LE; + pColl[2].zName = (char*)&pColl[3]; + pColl[2].enc = SQLITE_UTF16BE; + memcpy(pColl[0].zName, zName, nName); + pDel = sqlite3HashInsert(&db->aCollSeq, pColl[0].zName, pColl); + + /* If a malloc() failure occurred in sqlite3HashInsert(), it will + ** return the pColl pointer to be deleted (because it wasn't added + ** to the hash table). + */ + assert( pDel==0 || pDel==pColl ); + if( pDel!=0 ){ + sqlite3OomFault(db); + sqlite3DbFree(db, pDel); + pColl = 0; + } + } + } + return pColl; +} + +/* +** Parameter zName points to a UTF-8 encoded string nName bytes long. +** Return the CollSeq* pointer for the collation sequence named zName +** for the encoding 'enc' from the database 'db'. +** +** If the entry specified is not found and 'create' is true, then create a +** new entry. Otherwise return NULL. +** +** A separate function sqlite3LocateCollSeq() is a wrapper around +** this routine. sqlite3LocateCollSeq() invokes the collation factory +** if necessary and generates an error message if the collating sequence +** cannot be found. +** +** See also: sqlite3LocateCollSeq(), sqlite3GetCollSeq() +*/ +SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq( + sqlite3 *db, /* Database connection to search */ + u8 enc, /* Desired text encoding */ + const char *zName, /* Name of the collating sequence. Might be NULL */ + int create /* True to create CollSeq if doesn't already exist */ +){ + CollSeq *pColl; + assert( SQLITE_UTF8==1 && SQLITE_UTF16LE==2 && SQLITE_UTF16BE==3 ); + assert( enc>=SQLITE_UTF8 && enc<=SQLITE_UTF16BE ); + if( zName ){ + pColl = findCollSeqEntry(db, zName, create); + if( pColl ) pColl += enc-1; + }else{ + pColl = db->pDfltColl; + } + return pColl; +} + +/* +** Change the text encoding for a database connection. This means that +** the pDfltColl must change as well. +*/ +SQLITE_PRIVATE void sqlite3SetTextEncoding(sqlite3 *db, u8 enc){ + assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE ); + db->enc = enc; + /* EVIDENCE-OF: R-08308-17224 The default collating function for all + ** strings is BINARY. + */ + db->pDfltColl = sqlite3FindCollSeq(db, enc, sqlite3StrBINARY, 0); + sqlite3ExpirePreparedStatements(db, 1); +} + +/* +** This function is responsible for invoking the collation factory callback +** or substituting a collation sequence of a different encoding when the +** requested collation sequence is not available in the desired encoding. +** +** If it is not NULL, then pColl must point to the database native encoding +** collation sequence with name zName, length nName. +** +** The return value is either the collation sequence to be used in database +** db for collation type name zName, length nName, or NULL, if no collation +** sequence can be found. If no collation is found, leave an error message. +** +** See also: sqlite3LocateCollSeq(), sqlite3FindCollSeq() +*/ +SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq( + Parse *pParse, /* Parsing context */ + u8 enc, /* The desired encoding for the collating sequence */ + CollSeq *pColl, /* Collating sequence with native encoding, or NULL */ + const char *zName /* Collating sequence name */ +){ + CollSeq *p; + sqlite3 *db = pParse->db; + + p = pColl; + if( !p ){ + p = sqlite3FindCollSeq(db, enc, zName, 0); + } + if( !p || !p->xCmp ){ + /* No collation sequence of this type for this encoding is registered. + ** Call the collation factory to see if it can supply us with one. + */ + callCollNeeded(db, enc, zName); + p = sqlite3FindCollSeq(db, enc, zName, 0); + } + if( p && !p->xCmp && synthCollSeq(db, p) ){ + p = 0; + } + assert( !p || p->xCmp ); + if( p==0 ){ + sqlite3ErrorMsg(pParse, "no such collation sequence: %s", zName); + pParse->rc = SQLITE_ERROR_MISSING_COLLSEQ; + } + return p; +} + +/* +** This function returns the collation sequence for database native text +** encoding identified by the string zName. +** +** If the requested collation sequence is not available, or not available +** in the database native encoding, the collation factory is invoked to +** request it. If the collation factory does not supply such a sequence, +** and the sequence is available in another text encoding, then that is +** returned instead. +** +** If no versions of the requested collations sequence are available, or +** another error occurs, NULL is returned and an error message written into +** pParse. +** +** This routine is a wrapper around sqlite3FindCollSeq(). This routine +** invokes the collation factory if the named collation cannot be found +** and generates an error message. +** +** See also: sqlite3FindCollSeq(), sqlite3GetCollSeq() +*/ +SQLITE_PRIVATE CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char *zName){ + sqlite3 *db = pParse->db; + u8 enc = ENC(db); + u8 initbusy = db->init.busy; + CollSeq *pColl; + + pColl = sqlite3FindCollSeq(db, enc, zName, initbusy); + if( !initbusy && (!pColl || !pColl->xCmp) ){ + pColl = sqlite3GetCollSeq(pParse, enc, pColl, zName); + } + + return pColl; +} + +/* During the search for the best function definition, this procedure +** is called to test how well the function passed as the first argument +** matches the request for a function with nArg arguments in a system +** that uses encoding enc. The value returned indicates how well the +** request is matched. A higher value indicates a better match. +** +** If nArg is -1 that means to only return a match (non-zero) if p->nArg +** is also -1. In other words, we are searching for a function that +** takes a variable number of arguments. +** +** If nArg is -2 that means that we are searching for any function +** regardless of the number of arguments it uses, so return a positive +** match score for any +** +** The returned value is always between 0 and 6, as follows: +** +** 0: Not a match. +** 1: UTF8/16 conversion required and function takes any number of arguments. +** 2: UTF16 byte order change required and function takes any number of args. +** 3: encoding matches and function takes any number of arguments +** 4: UTF8/16 conversion required - argument count matches exactly +** 5: UTF16 byte order conversion required - argument count matches exactly +** 6: Perfect match: encoding and argument count match exactly. +** +** If nArg==(-2) then any function with a non-null xSFunc is +** a perfect match and any function with xSFunc NULL is +** a non-match. +*/ +#define FUNC_PERFECT_MATCH 6 /* The score for a perfect match */ +static int matchQuality( + FuncDef *p, /* The function we are evaluating for match quality */ + int nArg, /* Desired number of arguments. (-1)==any */ + u8 enc /* Desired text encoding */ +){ + int match; + assert( p->nArg>=(-4) && p->nArg!=(-2) ); + assert( nArg>=(-2) ); + + /* Wrong number of arguments means "no match" */ + if( p->nArg!=nArg ){ + if( nArg==(-2) ) return p->xSFunc==0 ? 0 : FUNC_PERFECT_MATCH; + if( p->nArg>=0 ) return 0; + /* Special p->nArg values available to built-in functions only: + ** -3 1 or more arguments required + ** -4 2 or more arguments required + */ + if( p->nArg<(-2) && nArg<(-2-p->nArg) ) return 0; + } + + /* Give a better score to a function with a specific number of arguments + ** than to function that accepts any number of arguments. */ + if( p->nArg==nArg ){ + match = 4; + }else{ + match = 1; + } + + /* Bonus points if the text encoding matches */ + if( enc==(p->funcFlags & SQLITE_FUNC_ENCMASK) ){ + match += 2; /* Exact encoding match */ + }else if( (enc & p->funcFlags & 2)!=0 ){ + match += 1; /* Both are UTF16, but with different byte orders */ + } + + return match; +} + +/* +** Search a FuncDefHash for a function with the given name. Return +** a pointer to the matching FuncDef if found, or 0 if there is no match. +*/ +SQLITE_PRIVATE FuncDef *sqlite3FunctionSearch( + int h, /* Hash of the name */ + const char *zFunc /* Name of function */ +){ + FuncDef *p; + for(p=sqlite3BuiltinFunctions.a[h]; p; p=p->u.pHash){ + assert( p->funcFlags & SQLITE_FUNC_BUILTIN ); + if( sqlite3StrICmp(p->zName, zFunc)==0 ){ + return p; + } + } + return 0; +} + +/* +** Insert a new FuncDef into a FuncDefHash hash table. +*/ +SQLITE_PRIVATE void sqlite3InsertBuiltinFuncs( + FuncDef *aDef, /* List of global functions to be inserted */ + int nDef /* Length of the apDef[] list */ +){ + int i; + for(i=0; ipNext!=&aDef[i] ); + aDef[i].pNext = pOther->pNext; + pOther->pNext = &aDef[i]; + }else{ + aDef[i].pNext = 0; + aDef[i].u.pHash = sqlite3BuiltinFunctions.a[h]; + sqlite3BuiltinFunctions.a[h] = &aDef[i]; + } + } +} + + + +/* +** Locate a user function given a name, a number of arguments and a flag +** indicating whether the function prefers UTF-16 over UTF-8. Return a +** pointer to the FuncDef structure that defines that function, or return +** NULL if the function does not exist. +** +** If the createFlag argument is true, then a new (blank) FuncDef +** structure is created and liked into the "db" structure if a +** no matching function previously existed. +** +** If nArg is -2, then the first valid function found is returned. A +** function is valid if xSFunc is non-zero. The nArg==(-2) +** case is used to see if zName is a valid function name for some number +** of arguments. If nArg is -2, then createFlag must be 0. +** +** If createFlag is false, then a function with the required name and +** number of arguments may be returned even if the eTextRep flag does not +** match that requested. +*/ +SQLITE_PRIVATE FuncDef *sqlite3FindFunction( + sqlite3 *db, /* An open database */ + const char *zName, /* Name of the function. zero-terminated */ + int nArg, /* Number of arguments. -1 means any number */ + u8 enc, /* Preferred text encoding */ + u8 createFlag /* Create new entry if true and does not otherwise exist */ +){ + FuncDef *p; /* Iterator variable */ + FuncDef *pBest = 0; /* Best match found so far */ + int bestScore = 0; /* Score of best match */ + int h; /* Hash value */ + int nName; /* Length of the name */ + + assert( nArg>=(-2) ); + assert( nArg>=(-1) || createFlag==0 ); + nName = sqlite3Strlen30(zName); + + /* First search for a match amongst the application-defined functions. + */ + p = (FuncDef*)sqlite3HashFind(&db->aFunc, zName); + while( p ){ + int score = matchQuality(p, nArg, enc); + if( score>bestScore ){ + pBest = p; + bestScore = score; + } + p = p->pNext; + } + + /* If no match is found, search the built-in functions. + ** + ** If the DBFLAG_PreferBuiltin flag is set, then search the built-in + ** functions even if a prior app-defined function was found. And give + ** priority to built-in functions. + ** + ** Except, if createFlag is true, that means that we are trying to + ** install a new function. Whatever FuncDef structure is returned it will + ** have fields overwritten with new information appropriate for the + ** new function. But the FuncDefs for built-in functions are read-only. + ** So we must not search for built-ins when creating a new function. + */ + if( !createFlag && (pBest==0 || (db->mDbFlags & DBFLAG_PreferBuiltin)!=0) ){ + bestScore = 0; + h = SQLITE_FUNC_HASH(sqlite3UpperToLower[(u8)zName[0]], nName); + p = sqlite3FunctionSearch(h, zName); + while( p ){ + int score = matchQuality(p, nArg, enc); + if( score>bestScore ){ + pBest = p; + bestScore = score; + } + p = p->pNext; + } + } + + /* If the createFlag parameter is true and the search did not reveal an + ** exact match for the name, number of arguments and encoding, then add a + ** new entry to the hash table and return it. + */ + if( createFlag && bestScorezName = (const char*)&pBest[1]; + pBest->nArg = (u16)nArg; + pBest->funcFlags = enc; + memcpy((char*)&pBest[1], zName, nName+1); + for(z=(u8*)pBest->zName; *z; z++) *z = sqlite3UpperToLower[*z]; + pOther = (FuncDef*)sqlite3HashInsert(&db->aFunc, pBest->zName, pBest); + if( pOther==pBest ){ + sqlite3DbFree(db, pBest); + sqlite3OomFault(db); + return 0; + }else{ + pBest->pNext = pOther; + } + } + + if( pBest && (pBest->xSFunc || createFlag) ){ + return pBest; + } + return 0; +} + +/* +** Free all resources held by the schema structure. The void* argument points +** at a Schema struct. This function does not call sqlite3DbFree(db, ) on the +** pointer itself, it just cleans up subsidiary resources (i.e. the contents +** of the schema hash tables). +** +** The Schema.cache_size variable is not cleared. +*/ +SQLITE_PRIVATE void sqlite3SchemaClear(void *p){ + Hash temp1; + Hash temp2; + HashElem *pElem; + Schema *pSchema = (Schema *)p; + sqlite3 xdb; + + memset(&xdb, 0, sizeof(xdb)); + temp1 = pSchema->tblHash; + temp2 = pSchema->trigHash; + sqlite3HashInit(&pSchema->trigHash); + sqlite3HashClear(&pSchema->idxHash); + for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){ + sqlite3DeleteTrigger(&xdb, (Trigger*)sqliteHashData(pElem)); + } + + sqlite3HashClear(&temp2); + sqlite3HashInit(&pSchema->tblHash); + for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){ + Table *pTab = sqliteHashData(pElem); + sqlite3DeleteTable(&xdb, pTab); + } + sqlite3HashClear(&temp1); + sqlite3HashClear(&pSchema->fkeyHash); + pSchema->pSeqTab = 0; + if( pSchema->schemaFlags & DB_SchemaLoaded ){ + pSchema->iGeneration++; + } + pSchema->schemaFlags &= ~(DB_SchemaLoaded|DB_ResetWanted); +} + +/* +** Find and return the schema associated with a BTree. Create +** a new one if necessary. +*/ +SQLITE_PRIVATE Schema *sqlite3SchemaGet(sqlite3 *db, Btree *pBt){ + Schema * p; + if( pBt ){ + p = (Schema *)sqlite3BtreeSchema(pBt, sizeof(Schema), sqlite3SchemaClear); + }else{ + p = (Schema *)sqlite3DbMallocZero(0, sizeof(Schema)); + } + if( !p ){ + sqlite3OomFault(db); + }else if ( 0==p->file_format ){ + sqlite3HashInit(&p->tblHash); + sqlite3HashInit(&p->idxHash); + sqlite3HashInit(&p->trigHash); + sqlite3HashInit(&p->fkeyHash); + p->enc = SQLITE_UTF8; + } + return p; +} + +/************** End of callback.c ********************************************/ +/************** Begin file delete.c ******************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains C code routines that are called by the parser +** in order to generate code for DELETE FROM statements. +*/ +/* #include "sqliteInt.h" */ + +/* +** While a SrcList can in general represent multiple tables and subqueries +** (as in the FROM clause of a SELECT statement) in this case it contains +** the name of a single table, as one might find in an INSERT, DELETE, +** or UPDATE statement. Look up that table in the symbol table and +** return a pointer. Set an error message and return NULL if the table +** name is not found or if any other error occurs. +** +** The following fields are initialized appropriate in pSrc: +** +** pSrc->a[0].spTab Pointer to the Table object +** pSrc->a[0].u2.pIBIndex Pointer to the INDEXED BY index, if there is one +** +*/ +SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse *pParse, SrcList *pSrc){ + SrcItem *pItem = pSrc->a; + Table *pTab; + assert( pItem && pSrc->nSrc>=1 ); + pTab = sqlite3LocateTableItem(pParse, 0, pItem); + if( pItem->pSTab ) sqlite3DeleteTable(pParse->db, pItem->pSTab); + pItem->pSTab = pTab; + pItem->fg.notCte = 1; + if( pTab ){ + pTab->nTabRef++; + if( pItem->fg.isIndexedBy && sqlite3IndexedByLookup(pParse, pItem) ){ + pTab = 0; + } + } + return pTab; +} + +/* Generate byte-code that will report the number of rows modified +** by a DELETE, INSERT, or UPDATE statement. +*/ +SQLITE_PRIVATE void sqlite3CodeChangeCount(Vdbe *v, int regCounter, const char *zColName){ + sqlite3VdbeAddOp0(v, OP_FkCheck); + sqlite3VdbeAddOp2(v, OP_ResultRow, regCounter, 1); + sqlite3VdbeSetNumCols(v, 1); + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zColName, SQLITE_STATIC); +} + +/* Return true if table pTab is read-only. +** +** A table is read-only if any of the following are true: +** +** 1) It is a virtual table and no implementation of the xUpdate method +** has been provided +** +** 2) A trigger is currently being coded and the table is a virtual table +** that is SQLITE_VTAB_DIRECTONLY or if PRAGMA trusted_schema=OFF and +** the table is not SQLITE_VTAB_INNOCUOUS. +** +** 3) It is a system table (i.e. sqlite_schema), this call is not +** part of a nested parse and writable_schema pragma has not +** been specified +** +** 4) The table is a shadow table, the database connection is in +** defensive mode, and the current sqlite3_prepare() +** is for a top-level SQL statement. +*/ +static int vtabIsReadOnly(Parse *pParse, Table *pTab){ + assert( IsVirtual(pTab) ); + if( sqlite3GetVTable(pParse->db, pTab)->pMod->pModule->xUpdate==0 ){ + return 1; + } + + /* Within triggers: + ** * Do not allow DELETE, INSERT, or UPDATE of SQLITE_VTAB_DIRECTONLY + ** virtual tables + ** * Only allow DELETE, INSERT, or UPDATE of non-SQLITE_VTAB_INNOCUOUS + ** virtual tables if PRAGMA trusted_schema=ON. + */ + if( pParse->pToplevel!=0 + && pTab->u.vtab.p->eVtabRisk > + ((pParse->db->flags & SQLITE_TrustedSchema)!=0) + ){ + sqlite3ErrorMsg(pParse, "unsafe use of virtual table \"%s\"", + pTab->zName); + } + return 0; +} +static int tabIsReadOnly(Parse *pParse, Table *pTab){ + sqlite3 *db; + if( IsVirtual(pTab) ){ + return vtabIsReadOnly(pParse, pTab); + } + if( (pTab->tabFlags & (TF_Readonly|TF_Shadow))==0 ) return 0; + db = pParse->db; + if( (pTab->tabFlags & TF_Readonly)!=0 ){ + return sqlite3WritableSchema(db)==0 && pParse->nested==0; + } + assert( pTab->tabFlags & TF_Shadow ); + return sqlite3ReadOnlyShadowTables(db); +} + +/* +** Check to make sure the given table is writable. +** +** If pTab is not writable -> generate an error message and return 1. +** If pTab is writable but other errors have occurred -> return 1. +** If pTab is writable and no prior errors -> return 0; +*/ +SQLITE_PRIVATE int sqlite3IsReadOnly(Parse *pParse, Table *pTab, Trigger *pTrigger){ + if( tabIsReadOnly(pParse, pTab) ){ + sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName); + return 1; + } +#ifndef SQLITE_OMIT_VIEW + if( IsView(pTab) + && (pTrigger==0 || (pTrigger->bReturning && pTrigger->pNext==0)) + ){ + sqlite3ErrorMsg(pParse,"cannot modify %s because it is a view",pTab->zName); + return 1; + } +#endif + return 0; +} + + +#if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) +/* +** Evaluate a view and store its result in an ephemeral table. The +** pWhere argument is an optional WHERE clause that restricts the +** set of rows in the view that are to be added to the ephemeral table. +*/ +SQLITE_PRIVATE void sqlite3MaterializeView( + Parse *pParse, /* Parsing context */ + Table *pView, /* View definition */ + Expr *pWhere, /* Optional WHERE clause to be added */ + ExprList *pOrderBy, /* Optional ORDER BY clause */ + Expr *pLimit, /* Optional LIMIT clause */ + int iCur /* Cursor number for ephemeral table */ +){ + SelectDest dest; + Select *pSel; + SrcList *pFrom; + sqlite3 *db = pParse->db; + int iDb = sqlite3SchemaToIndex(db, pView->pSchema); + pWhere = sqlite3ExprDup(db, pWhere, 0); + pFrom = sqlite3SrcListAppend(pParse, 0, 0, 0); + if( pFrom ){ + assert( pFrom->nSrc==1 ); + pFrom->a[0].zName = sqlite3DbStrDup(db, pView->zName); + assert( pFrom->a[0].fg.fixedSchema==0 && pFrom->a[0].fg.isSubquery==0 ); + pFrom->a[0].u4.zDatabase = sqlite3DbStrDup(db, db->aDb[iDb].zDbSName); + assert( pFrom->a[0].fg.isUsing==0 ); + assert( pFrom->a[0].u3.pOn==0 ); + } + pSel = sqlite3SelectNew(pParse, 0, pFrom, pWhere, 0, 0, pOrderBy, + SF_IncludeHidden, pLimit); + sqlite3SelectDestInit(&dest, SRT_EphemTab, iCur); + sqlite3Select(pParse, pSel, &dest); + sqlite3SelectDelete(db, pSel); +} +#endif /* !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) */ + +#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) +/* +** Generate an expression tree to implement the WHERE, ORDER BY, +** and LIMIT/OFFSET portion of DELETE and UPDATE statements. +** +** DELETE FROM table_wxyz WHERE a<5 ORDER BY a LIMIT 1; +** \__________________________/ +** pLimitWhere (pInClause) +*/ +SQLITE_PRIVATE Expr *sqlite3LimitWhere( + Parse *pParse, /* The parser context */ + SrcList *pSrc, /* the FROM clause -- which tables to scan */ + Expr *pWhere, /* The WHERE clause. May be null */ + ExprList *pOrderBy, /* The ORDER BY clause. May be null */ + Expr *pLimit, /* The LIMIT clause. May be null */ + char *zStmtType /* Either DELETE or UPDATE. For err msgs. */ +){ + sqlite3 *db = pParse->db; + Expr *pLhs = NULL; /* LHS of IN(SELECT...) operator */ + Expr *pInClause = NULL; /* WHERE rowid IN ( select ) */ + ExprList *pEList = NULL; /* Expression list containing only pSelectRowid*/ + SrcList *pSelectSrc = NULL; /* SELECT rowid FROM x ... (dup of pSrc) */ + Select *pSelect = NULL; /* Complete SELECT tree */ + Table *pTab; + + /* Check that there isn't an ORDER BY without a LIMIT clause. + */ + if( pOrderBy && pLimit==0 ) { + sqlite3ErrorMsg(pParse, "ORDER BY without LIMIT on %s", zStmtType); + sqlite3ExprDelete(pParse->db, pWhere); + sqlite3ExprListDelete(pParse->db, pOrderBy); + return 0; + } + + /* We only need to generate a select expression if there + ** is a limit/offset term to enforce. + */ + if( pLimit == 0 ) { + return pWhere; + } + + /* Generate a select expression tree to enforce the limit/offset + ** term for the DELETE or UPDATE statement. For example: + ** DELETE FROM table_a WHERE col1=1 ORDER BY col2 LIMIT 1 OFFSET 1 + ** becomes: + ** DELETE FROM table_a WHERE rowid IN ( + ** SELECT rowid FROM table_a WHERE col1=1 ORDER BY col2 LIMIT 1 OFFSET 1 + ** ); + */ + + pTab = pSrc->a[0].pSTab; + if( HasRowid(pTab) ){ + pLhs = sqlite3PExpr(pParse, TK_ROW, 0, 0); + pEList = sqlite3ExprListAppend( + pParse, 0, sqlite3PExpr(pParse, TK_ROW, 0, 0) + ); + }else{ + Index *pPk = sqlite3PrimaryKeyIndex(pTab); + assert( pPk!=0 ); + assert( pPk->nKeyCol>=1 ); + if( pPk->nKeyCol==1 ){ + const char *zName; + assert( pPk->aiColumn[0]>=0 && pPk->aiColumn[0]nCol ); + zName = pTab->aCol[pPk->aiColumn[0]].zCnName; + pLhs = sqlite3Expr(db, TK_ID, zName); + pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ID, zName)); + }else{ + int i; + for(i=0; inKeyCol; i++){ + Expr *p; + assert( pPk->aiColumn[i]>=0 && pPk->aiColumn[i]nCol ); + p = sqlite3Expr(db, TK_ID, pTab->aCol[pPk->aiColumn[i]].zCnName); + pEList = sqlite3ExprListAppend(pParse, pEList, p); + } + pLhs = sqlite3PExpr(pParse, TK_VECTOR, 0, 0); + if( pLhs ){ + pLhs->x.pList = sqlite3ExprListDup(db, pEList, 0); + } + } + } + + /* duplicate the FROM clause as it is needed by both the DELETE/UPDATE tree + ** and the SELECT subtree. */ + pSrc->a[0].pSTab = 0; + pSelectSrc = sqlite3SrcListDup(db, pSrc, 0); + pSrc->a[0].pSTab = pTab; + if( pSrc->a[0].fg.isIndexedBy ){ + assert( pSrc->a[0].fg.isCte==0 ); + pSrc->a[0].u2.pIBIndex = 0; + pSrc->a[0].fg.isIndexedBy = 0; + sqlite3DbFree(db, pSrc->a[0].u1.zIndexedBy); + }else if( pSrc->a[0].fg.isCte ){ + pSrc->a[0].u2.pCteUse->nUse++; + } + + /* generate the SELECT expression tree. */ + pSelect = sqlite3SelectNew(pParse, pEList, pSelectSrc, pWhere, 0 ,0, + pOrderBy,0,pLimit + ); + + /* now generate the new WHERE rowid IN clause for the DELETE/UPDATE */ + pInClause = sqlite3PExpr(pParse, TK_IN, pLhs, 0); + sqlite3PExprAddSelect(pParse, pInClause, pSelect); + return pInClause; +} +#endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) */ + /* && !defined(SQLITE_OMIT_SUBQUERY) */ + +/* +** Generate code for a DELETE FROM statement. +** +** DELETE FROM table_wxyz WHERE a<5 AND b NOT NULL; +** \________/ \________________/ +** pTabList pWhere +*/ +SQLITE_PRIVATE void sqlite3DeleteFrom( + Parse *pParse, /* The parser context */ + SrcList *pTabList, /* The table from which we should delete things */ + Expr *pWhere, /* The WHERE clause. May be null */ + ExprList *pOrderBy, /* ORDER BY clause. May be null */ + Expr *pLimit /* LIMIT clause. May be null */ +){ + Vdbe *v; /* The virtual database engine */ + Table *pTab; /* The table from which records will be deleted */ + int i; /* Loop counter */ + WhereInfo *pWInfo; /* Information about the WHERE clause */ + Index *pIdx; /* For looping over indices of the table */ + int iTabCur; /* Cursor number for the table */ + int iDataCur = 0; /* VDBE cursor for the canonical data source */ + int iIdxCur = 0; /* Cursor number of the first index */ + int nIdx; /* Number of indices */ + sqlite3 *db; /* Main database structure */ + AuthContext sContext; /* Authorization context */ + NameContext sNC; /* Name context to resolve expressions in */ + int iDb; /* Database number */ + int memCnt = 0; /* Memory cell used for change counting */ + int rcauth; /* Value returned by authorization callback */ + int eOnePass; /* ONEPASS_OFF or _SINGLE or _MULTI */ + int aiCurOnePass[2]; /* The write cursors opened by WHERE_ONEPASS */ + u8 *aToOpen = 0; /* Open cursor iTabCur+j if aToOpen[j] is true */ + Index *pPk; /* The PRIMARY KEY index on the table */ + int iPk = 0; /* First of nPk registers holding PRIMARY KEY value */ + i16 nPk = 1; /* Number of columns in the PRIMARY KEY */ + int iKey; /* Memory cell holding key of row to be deleted */ + i16 nKey; /* Number of memory cells in the row key */ + int iEphCur = 0; /* Ephemeral table holding all primary key values */ + int iRowSet = 0; /* Register for rowset of rows to delete */ + int addrBypass = 0; /* Address of jump over the delete logic */ + int addrLoop = 0; /* Top of the delete loop */ + int addrEphOpen = 0; /* Instruction to open the Ephemeral table */ + int bComplex; /* True if there are triggers or FKs or + ** subqueries in the WHERE clause */ + +#ifndef SQLITE_OMIT_TRIGGER + int isView; /* True if attempting to delete from a view */ + Trigger *pTrigger; /* List of table triggers, if required */ +#endif + + memset(&sContext, 0, sizeof(sContext)); + db = pParse->db; + assert( db->pParse==pParse ); + if( pParse->nErr ){ + goto delete_from_cleanup; + } + assert( db->mallocFailed==0 ); + assert( pTabList->nSrc==1 ); + + /* Locate the table which we want to delete. This table has to be + ** put in an SrcList structure because some of the subroutines we + ** will be calling are designed to work with multiple tables and expect + ** an SrcList* parameter instead of just a Table* parameter. + */ + pTab = sqlite3SrcListLookup(pParse, pTabList); + if( pTab==0 ) goto delete_from_cleanup; + + /* Figure out if we have any triggers and if the table being + ** deleted from is a view + */ +#ifndef SQLITE_OMIT_TRIGGER + pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0); + isView = IsView(pTab); +#else +# define pTrigger 0 +# define isView 0 +#endif + bComplex = pTrigger || sqlite3FkRequired(pParse, pTab, 0, 0); +#ifdef SQLITE_OMIT_VIEW +# undef isView +# define isView 0 +#endif + +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x10000 ){ + sqlite3TreeViewLine(0, "In sqlite3Delete() at %s:%d", __FILE__, __LINE__); + sqlite3TreeViewDelete(pParse->pWith, pTabList, pWhere, + pOrderBy, pLimit, pTrigger); + } +#endif + +#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT + if( !isView ){ + pWhere = sqlite3LimitWhere( + pParse, pTabList, pWhere, pOrderBy, pLimit, "DELETE" + ); + pOrderBy = 0; + pLimit = 0; + } +#endif + + /* If pTab is really a view, make sure it has been initialized. + */ + if( sqlite3ViewGetColumnNames(pParse, pTab) ){ + goto delete_from_cleanup; + } + + if( sqlite3IsReadOnly(pParse, pTab, pTrigger) ){ + goto delete_from_cleanup; + } + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + assert( iDbnDb ); + rcauth = sqlite3AuthCheck(pParse, SQLITE_DELETE, pTab->zName, 0, + db->aDb[iDb].zDbSName); + assert( rcauth==SQLITE_OK || rcauth==SQLITE_DENY || rcauth==SQLITE_IGNORE ); + if( rcauth==SQLITE_DENY ){ + goto delete_from_cleanup; + } + assert(!isView || pTrigger); + + /* Assign cursor numbers to the table and all its indices. + */ + assert( pTabList->nSrc==1 ); + iTabCur = pTabList->a[0].iCursor = pParse->nTab++; + for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){ + pParse->nTab++; + } + + /* Start the view context + */ + if( isView ){ + sqlite3AuthContextPush(pParse, &sContext, pTab->zName); + } + + /* Begin generating code. + */ + v = sqlite3GetVdbe(pParse); + if( v==0 ){ + goto delete_from_cleanup; + } + if( pParse->nested==0 ) sqlite3VdbeCountChanges(v); + sqlite3BeginWriteOperation(pParse, bComplex, iDb); + + /* If we are trying to delete from a view, realize that view into + ** an ephemeral table. + */ +#if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) + if( isView ){ + sqlite3MaterializeView(pParse, pTab, + pWhere, pOrderBy, pLimit, iTabCur + ); + iDataCur = iIdxCur = iTabCur; + pOrderBy = 0; + pLimit = 0; + } +#endif + + /* Resolve the column names in the WHERE clause. + */ + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = pParse; + sNC.pSrcList = pTabList; + if( sqlite3ResolveExprNames(&sNC, pWhere) ){ + goto delete_from_cleanup; + } + + /* Initialize the counter of the number of rows deleted, if + ** we are counting rows. + */ + if( (db->flags & SQLITE_CountRows)!=0 + && !pParse->nested + && !pParse->pTriggerTab + && !pParse->bReturning + ){ + memCnt = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Integer, 0, memCnt); + } + +#ifndef SQLITE_OMIT_TRUNCATE_OPTIMIZATION + /* Special case: A DELETE without a WHERE clause deletes everything. + ** It is easier just to erase the whole table. Prior to version 3.6.5, + ** this optimization caused the row change count (the value returned by + ** API function sqlite3_count_changes) to be set incorrectly. + ** + ** The "rcauth==SQLITE_OK" terms is the + ** IMPLEMENTATION-OF: R-17228-37124 If the action code is SQLITE_DELETE and + ** the callback returns SQLITE_IGNORE then the DELETE operation proceeds but + ** the truncate optimization is disabled and all rows are deleted + ** individually. + */ + if( rcauth==SQLITE_OK + && pWhere==0 + && !bComplex + && !IsVirtual(pTab) +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + && db->xPreUpdateCallback==0 +#endif + ){ + assert( !isView ); + sqlite3TableLock(pParse, iDb, pTab->tnum, 1, pTab->zName); + if( HasRowid(pTab) ){ + sqlite3VdbeAddOp4(v, OP_Clear, pTab->tnum, iDb, memCnt ? memCnt : -1, + pTab->zName, P4_STATIC); + } + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + assert( pIdx->pSchema==pTab->pSchema ); + if( IsPrimaryKeyIndex(pIdx) && !HasRowid(pTab) ){ + sqlite3VdbeAddOp3(v, OP_Clear, pIdx->tnum, iDb, memCnt ? memCnt : -1); + }else{ + sqlite3VdbeAddOp2(v, OP_Clear, pIdx->tnum, iDb); + } + } + }else +#endif /* SQLITE_OMIT_TRUNCATE_OPTIMIZATION */ + { + u16 wcf = WHERE_ONEPASS_DESIRED|WHERE_DUPLICATES_OK; + if( sNC.ncFlags & NC_Subquery ) bComplex = 1; + wcf |= (bComplex ? 0 : WHERE_ONEPASS_MULTIROW); + if( HasRowid(pTab) ){ + /* For a rowid table, initialize the RowSet to an empty set */ + pPk = 0; + assert( nPk==1 ); + iRowSet = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Null, 0, iRowSet); + }else{ + /* For a WITHOUT ROWID table, create an ephemeral table used to + ** hold all primary keys for rows to be deleted. */ + pPk = sqlite3PrimaryKeyIndex(pTab); + assert( pPk!=0 ); + nPk = pPk->nKeyCol; + iPk = pParse->nMem+1; + pParse->nMem += nPk; + iEphCur = pParse->nTab++; + addrEphOpen = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iEphCur, nPk); + sqlite3VdbeSetP4KeyInfo(pParse, pPk); + } + + /* Construct a query to find the rowid or primary key for every row + ** to be deleted, based on the WHERE clause. Set variable eOnePass + ** to indicate the strategy used to implement this delete: + ** + ** ONEPASS_OFF: Two-pass approach - use a FIFO for rowids/PK values. + ** ONEPASS_SINGLE: One-pass approach - at most one row deleted. + ** ONEPASS_MULTI: One-pass approach - any number of rows may be deleted. + */ + pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, 0, 0,0,wcf,iTabCur+1); + if( pWInfo==0 ) goto delete_from_cleanup; + eOnePass = sqlite3WhereOkOnePass(pWInfo, aiCurOnePass); + assert( IsVirtual(pTab)==0 || eOnePass!=ONEPASS_MULTI ); + assert( IsVirtual(pTab) || bComplex || eOnePass!=ONEPASS_OFF + || OptimizationDisabled(db, SQLITE_OnePass) ); + if( eOnePass!=ONEPASS_SINGLE ) sqlite3MultiWrite(pParse); + if( sqlite3WhereUsesDeferredSeek(pWInfo) ){ + sqlite3VdbeAddOp1(v, OP_FinishSeek, iTabCur); + } + + /* Keep track of the number of rows to be deleted */ + if( memCnt ){ + sqlite3VdbeAddOp2(v, OP_AddImm, memCnt, 1); + } + + /* Extract the rowid or primary key for the current row */ + if( pPk ){ + for(i=0; iaiColumn[i]>=0 ); + sqlite3ExprCodeGetColumnOfTable(v, pTab, iTabCur, + pPk->aiColumn[i], iPk+i); + } + iKey = iPk; + }else{ + iKey = ++pParse->nMem; + sqlite3ExprCodeGetColumnOfTable(v, pTab, iTabCur, -1, iKey); + } + + if( eOnePass!=ONEPASS_OFF ){ + /* For ONEPASS, no need to store the rowid/primary-key. There is only + ** one, so just keep it in its register(s) and fall through to the + ** delete code. */ + nKey = nPk; /* OP_Found will use an unpacked key */ + aToOpen = sqlite3DbMallocRawNN(db, nIdx+2); + if( aToOpen==0 ){ + sqlite3WhereEnd(pWInfo); + goto delete_from_cleanup; + } + memset(aToOpen, 1, nIdx+1); + aToOpen[nIdx+1] = 0; + if( aiCurOnePass[0]>=0 ) aToOpen[aiCurOnePass[0]-iTabCur] = 0; + if( aiCurOnePass[1]>=0 ) aToOpen[aiCurOnePass[1]-iTabCur] = 0; + if( addrEphOpen ) sqlite3VdbeChangeToNoop(v, addrEphOpen); + addrBypass = sqlite3VdbeMakeLabel(pParse); + }else{ + if( pPk ){ + /* Add the PK key for this row to the temporary table */ + iKey = ++pParse->nMem; + nKey = 0; /* Zero tells OP_Found to use a composite key */ + sqlite3VdbeAddOp4(v, OP_MakeRecord, iPk, nPk, iKey, + sqlite3IndexAffinityStr(pParse->db, pPk), nPk); + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iEphCur, iKey, iPk, nPk); + }else{ + /* Add the rowid of the row to be deleted to the RowSet */ + nKey = 1; /* OP_DeferredSeek always uses a single rowid */ + sqlite3VdbeAddOp2(v, OP_RowSetAdd, iRowSet, iKey); + } + sqlite3WhereEnd(pWInfo); + } + + /* Unless this is a view, open cursors for the table we are + ** deleting from and all its indices. If this is a view, then the + ** only effect this statement has is to fire the INSTEAD OF + ** triggers. + */ + if( !isView ){ + int iAddrOnce = 0; + if( eOnePass==ONEPASS_MULTI ){ + iAddrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); + } + testcase( IsVirtual(pTab) ); + sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenWrite, OPFLAG_FORDELETE, + iTabCur, aToOpen, &iDataCur, &iIdxCur); + assert( pPk || IsVirtual(pTab) || iDataCur==iTabCur ); + assert( pPk || IsVirtual(pTab) || iIdxCur==iDataCur+1 ); + if( eOnePass==ONEPASS_MULTI ){ + sqlite3VdbeJumpHereOrPopInst(v, iAddrOnce); + } + } + + /* Set up a loop over the rowids/primary-keys that were found in the + ** where-clause loop above. + */ + if( eOnePass!=ONEPASS_OFF ){ + assert( nKey==nPk ); /* OP_Found will use an unpacked key */ + if( !IsVirtual(pTab) && aToOpen[iDataCur-iTabCur] ){ + assert( pPk!=0 || IsView(pTab) ); + sqlite3VdbeAddOp4Int(v, OP_NotFound, iDataCur, addrBypass, iKey, nKey); + VdbeCoverage(v); + } + }else if( pPk ){ + addrLoop = sqlite3VdbeAddOp1(v, OP_Rewind, iEphCur); VdbeCoverage(v); + if( IsVirtual(pTab) ){ + sqlite3VdbeAddOp3(v, OP_Column, iEphCur, 0, iKey); + }else{ + sqlite3VdbeAddOp2(v, OP_RowData, iEphCur, iKey); + } + assert( nKey==0 ); /* OP_Found will use a composite key */ + }else{ + addrLoop = sqlite3VdbeAddOp3(v, OP_RowSetRead, iRowSet, 0, iKey); + VdbeCoverage(v); + assert( nKey==1 ); + } + + /* Delete the row */ +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pTab) ){ + const char *pVTab = (const char *)sqlite3GetVTable(db, pTab); + sqlite3VtabMakeWritable(pParse, pTab); + assert( eOnePass==ONEPASS_OFF || eOnePass==ONEPASS_SINGLE ); + sqlite3MayAbort(pParse); + if( eOnePass==ONEPASS_SINGLE ){ + sqlite3VdbeAddOp1(v, OP_Close, iTabCur); + if( sqlite3IsToplevel(pParse) ){ + pParse->isMultiWrite = 0; + } + } + sqlite3VdbeAddOp4(v, OP_VUpdate, 0, 1, iKey, pVTab, P4_VTAB); + sqlite3VdbeChangeP5(v, OE_Abort); + }else +#endif + { + int count = (pParse->nested==0); /* True to count changes */ + sqlite3GenerateRowDelete(pParse, pTab, pTrigger, iDataCur, iIdxCur, + iKey, nKey, count, OE_Default, eOnePass, aiCurOnePass[1]); + } + + /* End of the loop over all rowids/primary-keys. */ + if( eOnePass!=ONEPASS_OFF ){ + sqlite3VdbeResolveLabel(v, addrBypass); + sqlite3WhereEnd(pWInfo); + }else if( pPk ){ + sqlite3VdbeAddOp2(v, OP_Next, iEphCur, addrLoop+1); VdbeCoverage(v); + sqlite3VdbeJumpHere(v, addrLoop); + }else{ + sqlite3VdbeGoto(v, addrLoop); + sqlite3VdbeJumpHere(v, addrLoop); + } + } /* End non-truncate path */ + + /* Update the sqlite_sequence table by storing the content of the + ** maximum rowid counter values recorded while inserting into + ** autoincrement tables. + */ + if( pParse->nested==0 && pParse->pTriggerTab==0 ){ + sqlite3AutoincrementEnd(pParse); + } + + /* Return the number of rows that were deleted. If this routine is + ** generating code because of a call to sqlite3NestedParse(), do not + ** invoke the callback function. + */ + if( memCnt ){ + sqlite3CodeChangeCount(v, memCnt, "rows deleted"); + } + +delete_from_cleanup: + sqlite3AuthContextPop(&sContext); + sqlite3SrcListDelete(db, pTabList); + sqlite3ExprDelete(db, pWhere); +#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) + sqlite3ExprListDelete(db, pOrderBy); + sqlite3ExprDelete(db, pLimit); +#endif + if( aToOpen ) sqlite3DbNNFreeNN(db, aToOpen); + return; +} +/* Make sure "isView" and other macros defined above are undefined. Otherwise +** they may interfere with compilation of other functions in this file +** (or in another file, if this file becomes part of the amalgamation). */ +#ifdef isView + #undef isView +#endif +#ifdef pTrigger + #undef pTrigger +#endif + +/* +** This routine generates VDBE code that causes a single row of a +** single table to be deleted. Both the original table entry and +** all indices are removed. +** +** Preconditions: +** +** 1. iDataCur is an open cursor on the btree that is the canonical data +** store for the table. (This will be either the table itself, +** in the case of a rowid table, or the PRIMARY KEY index in the case +** of a WITHOUT ROWID table.) +** +** 2. Read/write cursors for all indices of pTab must be open as +** cursor number iIdxCur+i for the i-th index. +** +** 3. The primary key for the row to be deleted must be stored in a +** sequence of nPk memory cells starting at iPk. If nPk==0 that means +** that a search record formed from OP_MakeRecord is contained in the +** single memory location iPk. +** +** eMode: +** Parameter eMode may be passed either ONEPASS_OFF (0), ONEPASS_SINGLE, or +** ONEPASS_MULTI. If eMode is not ONEPASS_OFF, then the cursor +** iDataCur already points to the row to delete. If eMode is ONEPASS_OFF +** then this function must seek iDataCur to the entry identified by iPk +** and nPk before reading from it. +** +** If eMode is ONEPASS_MULTI, then this call is being made as part +** of a ONEPASS delete that affects multiple rows. In this case, if +** iIdxNoSeek is a valid cursor number (>=0) and is not the same as +** iDataCur, then its position should be preserved following the delete +** operation. Or, if iIdxNoSeek is not a valid cursor number, the +** position of iDataCur should be preserved instead. +** +** iIdxNoSeek: +** If iIdxNoSeek is a valid cursor number (>=0) not equal to iDataCur, +** then it identifies an index cursor (from within array of cursors +** starting at iIdxCur) that already points to the index entry to be deleted. +** Except, this optimization is disabled if there are BEFORE triggers since +** the trigger body might have moved the cursor. +*/ +SQLITE_PRIVATE void sqlite3GenerateRowDelete( + Parse *pParse, /* Parsing context */ + Table *pTab, /* Table containing the row to be deleted */ + Trigger *pTrigger, /* List of triggers to (potentially) fire */ + int iDataCur, /* Cursor from which column data is extracted */ + int iIdxCur, /* First index cursor */ + int iPk, /* First memory cell containing the PRIMARY KEY */ + i16 nPk, /* Number of PRIMARY KEY memory cells */ + u8 count, /* If non-zero, increment the row change counter */ + u8 onconf, /* Default ON CONFLICT policy for triggers */ + u8 eMode, /* ONEPASS_OFF, _SINGLE, or _MULTI. See above */ + int iIdxNoSeek /* Cursor number of cursor that does not need seeking */ +){ + Vdbe *v = pParse->pVdbe; /* Vdbe */ + int iOld = 0; /* First register in OLD.* array */ + int iLabel; /* Label resolved to end of generated code */ + u8 opSeek; /* Seek opcode */ + + /* Vdbe is guaranteed to have been allocated by this stage. */ + assert( v ); + VdbeModuleComment((v, "BEGIN: GenRowDel(%d,%d,%d,%d)", + iDataCur, iIdxCur, iPk, (int)nPk)); + + /* Seek cursor iCur to the row to delete. If this row no longer exists + ** (this can happen if a trigger program has already deleted it), do + ** not attempt to delete it or fire any DELETE triggers. */ + iLabel = sqlite3VdbeMakeLabel(pParse); + opSeek = HasRowid(pTab) ? OP_NotExists : OP_NotFound; + if( eMode==ONEPASS_OFF ){ + sqlite3VdbeAddOp4Int(v, opSeek, iDataCur, iLabel, iPk, nPk); + VdbeCoverageIf(v, opSeek==OP_NotExists); + VdbeCoverageIf(v, opSeek==OP_NotFound); + } + + /* If there are any triggers to fire, allocate a range of registers to + ** use for the old.* references in the triggers. */ + if( sqlite3FkRequired(pParse, pTab, 0, 0) || pTrigger ){ + u32 mask; /* Mask of OLD.* columns in use */ + int iCol; /* Iterator used while populating OLD.* */ + int addrStart; /* Start of BEFORE trigger programs */ + + /* TODO: Could use temporary registers here. Also could attempt to + ** avoid copying the contents of the rowid register. */ + mask = sqlite3TriggerColmask( + pParse, pTrigger, 0, 0, TRIGGER_BEFORE|TRIGGER_AFTER, pTab, onconf + ); + mask |= sqlite3FkOldmask(pParse, pTab); + iOld = pParse->nMem+1; + pParse->nMem += (1 + pTab->nCol); + + /* Populate the OLD.* pseudo-table register array. These values will be + ** used by any BEFORE and AFTER triggers that exist. */ + sqlite3VdbeAddOp2(v, OP_Copy, iPk, iOld); + for(iCol=0; iColnCol; iCol++){ + testcase( mask!=0xffffffff && iCol==31 ); + testcase( mask!=0xffffffff && iCol==32 ); + if( mask==0xffffffff || (iCol<=31 && (mask & MASKBIT32(iCol))!=0) ){ + int kk = sqlite3TableColumnToStorage(pTab, iCol); + sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, iCol, iOld+kk+1); + } + } + + /* Invoke BEFORE DELETE trigger programs. */ + addrStart = sqlite3VdbeCurrentAddr(v); + sqlite3CodeRowTrigger(pParse, pTrigger, + TK_DELETE, 0, TRIGGER_BEFORE, pTab, iOld, onconf, iLabel + ); + + /* If any BEFORE triggers were coded, then seek the cursor to the + ** row to be deleted again. It may be that the BEFORE triggers moved + ** the cursor or already deleted the row that the cursor was + ** pointing to. + ** + ** Also disable the iIdxNoSeek optimization since the BEFORE trigger + ** may have moved that cursor. + */ + if( addrStart=0 ); + iIdxNoSeek = -1; + } + + /* Do FK processing. This call checks that any FK constraints that + ** refer to this table (i.e. constraints attached to other tables) + ** are not violated by deleting this row. */ + sqlite3FkCheck(pParse, pTab, iOld, 0, 0, 0); + } + + /* Delete the index and table entries. Skip this step if pTab is really + ** a view (in which case the only effect of the DELETE statement is to + ** fire the INSTEAD OF triggers). + ** + ** If variable 'count' is non-zero, then this OP_Delete instruction should + ** invoke the update-hook. The pre-update-hook, on the other hand should + ** be invoked unless table pTab is a system table. The difference is that + ** the update-hook is not invoked for rows removed by REPLACE, but the + ** pre-update-hook is. + */ + if( !IsView(pTab) ){ + u8 p5 = 0; + sqlite3GenerateRowIndexDelete(pParse, pTab, iDataCur, iIdxCur,0,iIdxNoSeek); + sqlite3VdbeAddOp2(v, OP_Delete, iDataCur, (count?OPFLAG_NCHANGE:0)); + if( pParse->nested==0 || 0==sqlite3_stricmp(pTab->zName, "sqlite_stat1") ){ + sqlite3VdbeAppendP4(v, (char*)pTab, P4_TABLE); + } + if( eMode!=ONEPASS_OFF ){ + sqlite3VdbeChangeP5(v, OPFLAG_AUXDELETE); + } + if( iIdxNoSeek>=0 && iIdxNoSeek!=iDataCur ){ + sqlite3VdbeAddOp1(v, OP_Delete, iIdxNoSeek); + } + if( eMode==ONEPASS_MULTI ) p5 |= OPFLAG_SAVEPOSITION; + sqlite3VdbeChangeP5(v, p5); + } + + /* Do any ON CASCADE, SET NULL or SET DEFAULT operations required to + ** handle rows (possibly in other tables) that refer via a foreign key + ** to the row just deleted. */ + sqlite3FkActions(pParse, pTab, 0, iOld, 0, 0); + + /* Invoke AFTER DELETE trigger programs. */ + if( pTrigger ){ + sqlite3CodeRowTrigger(pParse, pTrigger, + TK_DELETE, 0, TRIGGER_AFTER, pTab, iOld, onconf, iLabel + ); + } + + /* Jump here if the row had already been deleted before any BEFORE + ** trigger programs were invoked. Or if a trigger program throws a + ** RAISE(IGNORE) exception. */ + sqlite3VdbeResolveLabel(v, iLabel); + VdbeModuleComment((v, "END: GenRowDel()")); +} + +/* +** This routine generates VDBE code that causes the deletion of all +** index entries associated with a single row of a single table, pTab +** +** Preconditions: +** +** 1. A read/write cursor "iDataCur" must be open on the canonical storage +** btree for the table pTab. (This will be either the table itself +** for rowid tables or to the primary key index for WITHOUT ROWID +** tables.) +** +** 2. Read/write cursors for all indices of pTab must be open as +** cursor number iIdxCur+i for the i-th index. (The pTab->pIndex +** index is the 0-th index.) +** +** 3. The "iDataCur" cursor must be already be positioned on the row +** that is to be deleted. +*/ +SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete( + Parse *pParse, /* Parsing and code generating context */ + Table *pTab, /* Table containing the row to be deleted */ + int iDataCur, /* Cursor of table holding data. */ + int iIdxCur, /* First index cursor */ + int *aRegIdx, /* Only delete if aRegIdx!=0 && aRegIdx[i]>0 */ + int iIdxNoSeek /* Do not delete from this cursor */ +){ + int i; /* Index loop counter */ + int r1 = -1; /* Register holding an index key */ + int iPartIdxLabel; /* Jump destination for skipping partial index entries */ + Index *pIdx; /* Current index */ + Index *pPrior = 0; /* Prior index */ + Vdbe *v; /* The prepared statement under construction */ + Index *pPk; /* PRIMARY KEY index, or NULL for rowid tables */ + + v = pParse->pVdbe; + pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab); + for(i=0, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){ + assert( iIdxCur+i!=iDataCur || pPk==pIdx ); + if( aRegIdx!=0 && aRegIdx[i]==0 ) continue; + if( pIdx==pPk ) continue; + if( iIdxCur+i==iIdxNoSeek ) continue; + VdbeModuleComment((v, "GenRowIdxDel for %s", pIdx->zName)); + r1 = sqlite3GenerateIndexKey(pParse, pIdx, iDataCur, 0, 1, + &iPartIdxLabel, pPrior, r1); + sqlite3VdbeAddOp3(v, OP_IdxDelete, iIdxCur+i, r1, + pIdx->uniqNotNull ? pIdx->nKeyCol : pIdx->nColumn); + sqlite3VdbeChangeP5(v, 1); /* Cause IdxDelete to error if no entry found */ + sqlite3ResolvePartIdxLabel(pParse, iPartIdxLabel); + pPrior = pIdx; + } +} + +/* +** Generate code that will assemble an index key and stores it in register +** regOut. The key with be for index pIdx which is an index on pTab. +** iCur is the index of a cursor open on the pTab table and pointing to +** the entry that needs indexing. If pTab is a WITHOUT ROWID table, then +** iCur must be the cursor of the PRIMARY KEY index. +** +** Return a register number which is the first in a block of +** registers that holds the elements of the index key. The +** block of registers has already been deallocated by the time +** this routine returns. +** +** If *piPartIdxLabel is not NULL, fill it in with a label and jump +** to that label if pIdx is a partial index that should be skipped. +** The label should be resolved using sqlite3ResolvePartIdxLabel(). +** A partial index should be skipped if its WHERE clause evaluates +** to false or null. If pIdx is not a partial index, *piPartIdxLabel +** will be set to zero which is an empty label that is ignored by +** sqlite3ResolvePartIdxLabel(). +** +** The pPrior and regPrior parameters are used to implement a cache to +** avoid unnecessary register loads. If pPrior is not NULL, then it is +** a pointer to a different index for which an index key has just been +** computed into register regPrior. If the current pIdx index is generating +** its key into the same sequence of registers and if pPrior and pIdx share +** a column in common, then the register corresponding to that column already +** holds the correct value and the loading of that register is skipped. +** This optimization is helpful when doing a DELETE or an INTEGRITY_CHECK +** on a table with multiple indices, and especially with the ROWID or +** PRIMARY KEY columns of the index. +*/ +SQLITE_PRIVATE int sqlite3GenerateIndexKey( + Parse *pParse, /* Parsing context */ + Index *pIdx, /* The index for which to generate a key */ + int iDataCur, /* Cursor number from which to take column data */ + int regOut, /* Put the new key into this register if not 0 */ + int prefixOnly, /* Compute only a unique prefix of the key */ + int *piPartIdxLabel, /* OUT: Jump to this label to skip partial index */ + Index *pPrior, /* Previously generated index key */ + int regPrior /* Register holding previous generated key */ +){ + Vdbe *v = pParse->pVdbe; + int j; + int regBase; + int nCol; + + if( piPartIdxLabel ){ + if( pIdx->pPartIdxWhere ){ + *piPartIdxLabel = sqlite3VdbeMakeLabel(pParse); + pParse->iSelfTab = iDataCur + 1; + sqlite3ExprIfFalseDup(pParse, pIdx->pPartIdxWhere, *piPartIdxLabel, + SQLITE_JUMPIFNULL); + pParse->iSelfTab = 0; + pPrior = 0; /* Ticket a9efb42811fa41ee 2019-11-02; + ** pPartIdxWhere may have corrupted regPrior registers */ + }else{ + *piPartIdxLabel = 0; + } + } + nCol = (prefixOnly && pIdx->uniqNotNull) ? pIdx->nKeyCol : pIdx->nColumn; + regBase = sqlite3GetTempRange(pParse, nCol); + if( pPrior && (regBase!=regPrior || pPrior->pPartIdxWhere) ) pPrior = 0; + for(j=0; jaiColumn[j]==pIdx->aiColumn[j] + && pPrior->aiColumn[j]!=XN_EXPR + ){ + /* This column was already computed by the previous index */ + continue; + } + sqlite3ExprCodeLoadIndexColumn(pParse, pIdx, iDataCur, j, regBase+j); + if( pIdx->aiColumn[j]>=0 ){ + /* If the column affinity is REAL but the number is an integer, then it + ** might be stored in the table as an integer (using a compact + ** representation) then converted to REAL by an OP_RealAffinity opcode. + ** But we are getting ready to store this value back into an index, where + ** it should be converted by to INTEGER again. So omit the + ** OP_RealAffinity opcode if it is present */ + sqlite3VdbeDeletePriorOpcode(v, OP_RealAffinity); + } + } + if( regOut ){ + sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regOut); + } + sqlite3ReleaseTempRange(pParse, regBase, nCol); + return regBase; +} + +/* +** If a prior call to sqlite3GenerateIndexKey() generated a jump-over label +** because it was a partial index, then this routine should be called to +** resolve that label. +*/ +SQLITE_PRIVATE void sqlite3ResolvePartIdxLabel(Parse *pParse, int iLabel){ + if( iLabel ){ + sqlite3VdbeResolveLabel(pParse->pVdbe, iLabel); + } +} + +/************** End of delete.c **********************************************/ +/************** Begin file func.c ********************************************/ +/* +** 2002 February 23 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains the C-language implementations for many of the SQL +** functions of SQLite. (Some function, and in particular the date and +** time functions, are implemented separately.) +*/ +/* #include "sqliteInt.h" */ +/* #include */ +/* #include */ +#ifndef SQLITE_OMIT_FLOATING_POINT +/* #include */ +#endif +/* #include "vdbeInt.h" */ + +/* +** Return the collating function associated with a function. +*/ +static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){ + VdbeOp *pOp; + assert( context->pVdbe!=0 ); + pOp = &context->pVdbe->aOp[context->iOp-1]; + assert( pOp->opcode==OP_CollSeq ); + assert( pOp->p4type==P4_COLLSEQ ); + return pOp->p4.pColl; +} + +/* +** Indicate that the accumulator load should be skipped on this +** iteration of the aggregate loop. +*/ +static void sqlite3SkipAccumulatorLoad(sqlite3_context *context){ + assert( context->isError<=0 ); + context->isError = -1; + context->skipFlag = 1; +} + +/* +** Implementation of the non-aggregate min() and max() functions +*/ +static void minmaxFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int i; + int mask; /* 0 for min() or 0xffffffff for max() */ + int iBest; + CollSeq *pColl; + + assert( argc>1 ); + mask = sqlite3_user_data(context)==0 ? 0 : -1; + pColl = sqlite3GetFuncCollSeq(context); + assert( pColl ); + assert( mask==-1 || mask==0 ); + iBest = 0; + if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; + for(i=1; i=0 ){ + testcase( mask==0 ); + iBest = i; + } + } + sqlite3_result_value(context, argv[iBest]); +} + +/* +** Return the type of the argument. +*/ +static void typeofFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + static const char *azType[] = { "integer", "real", "text", "blob", "null" }; + int i = sqlite3_value_type(argv[0]) - 1; + UNUSED_PARAMETER(NotUsed); + assert( i>=0 && i=0xc0 ){ + while( (*z & 0xc0)==0x80 ){ z++; z0++; } + } + } + sqlite3_result_int(context, (int)(z-z0)); + break; + } + default: { + sqlite3_result_null(context); + break; + } + } +} + +/* +** Implementation of the octet_length() function +*/ +static void bytelengthFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + assert( argc==1 ); + UNUSED_PARAMETER(argc); + switch( sqlite3_value_type(argv[0]) ){ + case SQLITE_BLOB: { + sqlite3_result_int(context, sqlite3_value_bytes(argv[0])); + break; + } + case SQLITE_INTEGER: + case SQLITE_FLOAT: { + i64 m = sqlite3_context_db_handle(context)->enc<=SQLITE_UTF8 ? 1 : 2; + sqlite3_result_int64(context, sqlite3_value_bytes(argv[0])*m); + break; + } + case SQLITE_TEXT: { + if( sqlite3_value_encoding(argv[0])<=SQLITE_UTF8 ){ + sqlite3_result_int(context, sqlite3_value_bytes(argv[0])); + }else{ + sqlite3_result_int(context, sqlite3_value_bytes16(argv[0])); + } + break; + } + default: { + sqlite3_result_null(context); + break; + } + } +} + +/* +** Implementation of the abs() function. +** +** IMP: R-23979-26855 The abs(X) function returns the absolute value of +** the numeric argument X. +*/ +static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ + assert( argc==1 ); + UNUSED_PARAMETER(argc); + switch( sqlite3_value_type(argv[0]) ){ + case SQLITE_INTEGER: { + i64 iVal = sqlite3_value_int64(argv[0]); + if( iVal<0 ){ + if( iVal==SMALLEST_INT64 ){ + /* IMP: R-31676-45509 If X is the integer -9223372036854775808 + ** then abs(X) throws an integer overflow error since there is no + ** equivalent positive 64-bit two complement value. */ + sqlite3_result_error(context, "integer overflow", -1); + return; + } + iVal = -iVal; + } + sqlite3_result_int64(context, iVal); + break; + } + case SQLITE_NULL: { + /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */ + sqlite3_result_null(context); + break; + } + default: { + /* Because sqlite3_value_double() returns 0.0 if the argument is not + ** something that can be converted into a number, we have: + ** IMP: R-01992-00519 Abs(X) returns 0.0 if X is a string or blob + ** that cannot be converted to a numeric value. + */ + double rVal = sqlite3_value_double(argv[0]); + if( rVal<0 ) rVal = -rVal; + sqlite3_result_double(context, rVal); + break; + } + } +} + +/* +** Implementation of the instr() function. +** +** instr(haystack,needle) finds the first occurrence of needle +** in haystack and returns the number of previous characters plus 1, +** or 0 if needle does not occur within haystack. +** +** If both haystack and needle are BLOBs, then the result is one more than +** the number of bytes in haystack prior to the first occurrence of needle, +** or 0 if needle never occurs in haystack. +*/ +static void instrFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + const unsigned char *zHaystack; + const unsigned char *zNeedle; + int nHaystack; + int nNeedle; + int typeHaystack, typeNeedle; + int N = 1; + int isText; + unsigned char firstChar; + sqlite3_value *pC1 = 0; + sqlite3_value *pC2 = 0; + + UNUSED_PARAMETER(argc); + typeHaystack = sqlite3_value_type(argv[0]); + typeNeedle = sqlite3_value_type(argv[1]); + if( typeHaystack==SQLITE_NULL || typeNeedle==SQLITE_NULL ) return; + nHaystack = sqlite3_value_bytes(argv[0]); + nNeedle = sqlite3_value_bytes(argv[1]); + if( nNeedle>0 ){ + if( typeHaystack==SQLITE_BLOB && typeNeedle==SQLITE_BLOB ){ + zHaystack = sqlite3_value_blob(argv[0]); + zNeedle = sqlite3_value_blob(argv[1]); + isText = 0; + }else if( typeHaystack!=SQLITE_BLOB && typeNeedle!=SQLITE_BLOB ){ + zHaystack = sqlite3_value_text(argv[0]); + zNeedle = sqlite3_value_text(argv[1]); + isText = 1; + }else{ + pC1 = sqlite3_value_dup(argv[0]); + zHaystack = sqlite3_value_text(pC1); + if( zHaystack==0 ) goto endInstrOOM; + nHaystack = sqlite3_value_bytes(pC1); + pC2 = sqlite3_value_dup(argv[1]); + zNeedle = sqlite3_value_text(pC2); + if( zNeedle==0 ) goto endInstrOOM; + nNeedle = sqlite3_value_bytes(pC2); + isText = 1; + } + if( zNeedle==0 || (nHaystack && zHaystack==0) ) goto endInstrOOM; + firstChar = zNeedle[0]; + while( nNeedle<=nHaystack + && (zHaystack[0]!=firstChar || memcmp(zHaystack, zNeedle, nNeedle)!=0) + ){ + N++; + do{ + nHaystack--; + zHaystack++; + }while( isText && (zHaystack[0]&0xc0)==0x80 ); + } + if( nNeedle>nHaystack ) N = 0; + } + sqlite3_result_int(context, N); +endInstr: + sqlite3_value_free(pC1); + sqlite3_value_free(pC2); + return; +endInstrOOM: + sqlite3_result_error_nomem(context); + goto endInstr; +} + +/* +** Implementation of the printf() (a.k.a. format()) SQL function. +*/ +static void printfFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + PrintfArguments x; + StrAccum str; + const char *zFormat; + int n; + sqlite3 *db = sqlite3_context_db_handle(context); + + if( argc>=1 && (zFormat = (const char*)sqlite3_value_text(argv[0]))!=0 ){ + x.nArg = argc-1; + x.nUsed = 0; + x.apArg = argv+1; + sqlite3StrAccumInit(&str, db, 0, 0, db->aLimit[SQLITE_LIMIT_LENGTH]); + str.printfFlags = SQLITE_PRINTF_SQLFUNC; + sqlite3_str_appendf(&str, zFormat, &x); + n = str.nChar; + sqlite3_result_text(context, sqlite3StrAccumFinish(&str), n, + SQLITE_DYNAMIC); + } +} + +/* +** Implementation of the substr() function. +** +** substr(x,p1,p2) returns p2 characters of x[] beginning with p1. +** p1 is 1-indexed. So substr(x,1,1) returns the first character +** of x. If x is text, then we actually count UTF-8 characters. +** If x is a blob, then we count bytes. +** +** If p1 is negative, then we begin abs(p1) from the end of x[]. +** +** If p2 is negative, return the p2 characters preceding p1. +*/ +static void substrFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + const unsigned char *z; + const unsigned char *z2; + int len; + int p0type; + i64 p1, p2; + + assert( argc==3 || argc==2 ); + p0type = sqlite3_value_type(argv[0]); + p1 = sqlite3_value_int64(argv[1]); + if( p0type==SQLITE_BLOB ){ + len = sqlite3_value_bytes(argv[0]); + z = sqlite3_value_blob(argv[0]); + if( z==0 ) return; + assert( len==sqlite3_value_bytes(argv[0]) ); + }else{ + z = sqlite3_value_text(argv[0]); + if( z==0 ) return; + len = 0; + if( p1<0 ){ + for(z2=z; *z2; len++){ + SQLITE_SKIP_UTF8(z2); + } + } + } + if( argc==3 ){ + p2 = sqlite3_value_int64(argv[2]); + if( p2==0 && sqlite3_value_type(argv[2])==SQLITE_NULL ) return; + }else{ + p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH]; + } + if( p1==0 ){ +#ifdef SQLITE_SUBSTR_COMPATIBILITY + /* If SUBSTR_COMPATIBILITY is defined then substr(X,0,N) work the same as + ** as substr(X,1,N) - it returns the first N characters of X. This + ** is essentially a back-out of the bug-fix in check-in [5fc125d362df4b8] + ** from 2009-02-02 for compatibility of applications that exploited the + ** old buggy behavior. */ + p1 = 1; /* */ +#endif + if( sqlite3_value_type(argv[1])==SQLITE_NULL ) return; + } + if( p1<0 ){ + p1 += len; + if( p1<0 ){ + if( p2<0 ){ + p2 = 0; + }else{ + p2 += p1; + } + p1 = 0; + } + }else if( p1>0 ){ + p1--; + }else if( p2>0 ){ + p2--; + } + if( p2<0 ){ + if( p2<-p1 ){ + p2 = p1; + }else{ + p2 = -p2; + } + p1 -= p2; + } + assert( p1>=0 && p2>=0 ); + if( p0type!=SQLITE_BLOB ){ + while( *z && p1 ){ + SQLITE_SKIP_UTF8(z); + p1--; + } + for(z2=z; *z2 && p2; p2--){ + SQLITE_SKIP_UTF8(z2); + } + sqlite3_result_text64(context, (char*)z, z2-z, SQLITE_TRANSIENT, + SQLITE_UTF8); + }else{ + if( p1>=len ){ + p1 = p2 = 0; + }else if( p2>len-p1 ){ + p2 = len-p1; + assert( p2>0 ); + } + sqlite3_result_blob64(context, (char*)&z[p1], (u64)p2, SQLITE_TRANSIENT); + } +} + +/* +** Implementation of the round() function +*/ +#ifndef SQLITE_OMIT_FLOATING_POINT +static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ + i64 n = 0; + double r; + char *zBuf; + assert( argc==1 || argc==2 ); + if( argc==2 ){ + if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return; + n = sqlite3_value_int64(argv[1]); + if( n>30 ) n = 30; + if( n<0 ) n = 0; + } + if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; + r = sqlite3_value_double(argv[0]); + /* If Y==0 and X will fit in a 64-bit int, + ** handle the rounding directly, + ** otherwise use printf. + */ + if( r<-4503599627370496.0 || r>+4503599627370496.0 ){ + /* The value has no fractional part so there is nothing to round */ + }else if( n==0 ){ + r = (double)((sqlite_int64)(r+(r<0?-0.5:+0.5))); + }else{ + zBuf = sqlite3_mprintf("%!.*f",(int)n,r); + if( zBuf==0 ){ + sqlite3_result_error_nomem(context); + return; + } + sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8); + sqlite3_free(zBuf); + } + sqlite3_result_double(context, r); +} +#endif + +/* +** Allocate nByte bytes of space using sqlite3Malloc(). If the +** allocation fails, call sqlite3_result_error_nomem() to notify +** the database handle that malloc() has failed and return NULL. +** If nByte is larger than the maximum string or blob length, then +** raise an SQLITE_TOOBIG exception and return NULL. +*/ +static void *contextMalloc(sqlite3_context *context, i64 nByte){ + char *z; + sqlite3 *db = sqlite3_context_db_handle(context); + assert( nByte>0 ); + testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] ); + testcase( nByte==(i64)db->aLimit[SQLITE_LIMIT_LENGTH]+1 ); + if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){ + sqlite3_result_error_toobig(context); + z = 0; + }else{ + z = sqlite3Malloc(nByte); + if( !z ){ + sqlite3_result_error_nomem(context); + } + } + return z; +} + +/* +** Implementation of the upper() and lower() SQL functions. +*/ +static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ + char *z1; + const char *z2; + int i, n; + UNUSED_PARAMETER(argc); + z2 = (char*)sqlite3_value_text(argv[0]); + n = sqlite3_value_bytes(argv[0]); + /* Verify that the call to _bytes() does not invalidate the _text() pointer */ + assert( z2==(char*)sqlite3_value_text(argv[0]) ); + if( z2 ){ + z1 = contextMalloc(context, ((i64)n)+1); + if( z1 ){ + for(i=0; imatchOne; /* "?" or "_" */ + u32 matchAll = pInfo->matchAll; /* "*" or "%" */ + u8 noCase = pInfo->noCase; /* True if uppercase==lowercase */ + const u8 *zEscaped = 0; /* One past the last escaped input char */ + + while( (c = Utf8Read(zPattern))!=0 ){ + if( c==matchAll ){ /* Match "*" */ + /* Skip over multiple "*" characters in the pattern. If there + ** are also "?" characters, skip those as well, but consume a + ** single character of the input string for each "?" skipped */ + while( (c=Utf8Read(zPattern)) == matchAll + || (c == matchOne && matchOne!=0) ){ + if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){ + return SQLITE_NOWILDCARDMATCH; + } + } + if( c==0 ){ + return SQLITE_MATCH; /* "*" at the end of the pattern matches */ + }else if( c==matchOther ){ + if( pInfo->matchSet==0 ){ + c = sqlite3Utf8Read(&zPattern); + if( c==0 ) return SQLITE_NOWILDCARDMATCH; + }else{ + /* "[...]" immediately follows the "*". We have to do a slow + ** recursive search in this case, but it is an unusual case. */ + assert( matchOther<0x80 ); /* '[' is a single-byte character */ + while( *zString ){ + int bMatch = patternCompare(&zPattern[-1],zString,pInfo,matchOther); + if( bMatch!=SQLITE_NOMATCH ) return bMatch; + SQLITE_SKIP_UTF8(zString); + } + return SQLITE_NOWILDCARDMATCH; + } + } + + /* At this point variable c contains the first character of the + ** pattern string past the "*". Search in the input string for the + ** first matching character and recursively continue the match from + ** that point. + ** + ** For a case-insensitive search, set variable cx to be the same as + ** c but in the other case and search the input string for either + ** c or cx. + */ + if( c<0x80 ){ + char zStop[3]; + int bMatch; + if( noCase ){ + zStop[0] = sqlite3Toupper(c); + zStop[1] = sqlite3Tolower(c); + zStop[2] = 0; + }else{ + zStop[0] = c; + zStop[1] = 0; + } + while(1){ + zString += strcspn((const char*)zString, zStop); + if( zString[0]==0 ) break; + zString++; + bMatch = patternCompare(zPattern,zString,pInfo,matchOther); + if( bMatch!=SQLITE_NOMATCH ) return bMatch; + } + }else{ + int bMatch; + while( (c2 = Utf8Read(zString))!=0 ){ + if( c2!=c ) continue; + bMatch = patternCompare(zPattern,zString,pInfo,matchOther); + if( bMatch!=SQLITE_NOMATCH ) return bMatch; + } + } + return SQLITE_NOWILDCARDMATCH; + } + if( c==matchOther ){ + if( pInfo->matchSet==0 ){ + c = sqlite3Utf8Read(&zPattern); + if( c==0 ) return SQLITE_NOMATCH; + zEscaped = zPattern; + }else{ + u32 prior_c = 0; + int seen = 0; + int invert = 0; + c = sqlite3Utf8Read(&zString); + if( c==0 ) return SQLITE_NOMATCH; + c2 = sqlite3Utf8Read(&zPattern); + if( c2=='^' ){ + invert = 1; + c2 = sqlite3Utf8Read(&zPattern); + } + if( c2==']' ){ + if( c==']' ) seen = 1; + c2 = sqlite3Utf8Read(&zPattern); + } + while( c2 && c2!=']' ){ + if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){ + c2 = sqlite3Utf8Read(&zPattern); + if( c>=prior_c && c<=c2 ) seen = 1; + prior_c = 0; + }else{ + if( c==c2 ){ + seen = 1; + } + prior_c = c2; + } + c2 = sqlite3Utf8Read(&zPattern); + } + if( c2==0 || (seen ^ invert)==0 ){ + return SQLITE_NOMATCH; + } + continue; + } + } + c2 = Utf8Read(zString); + if( c==c2 ) continue; + if( noCase && sqlite3Tolower(c)==sqlite3Tolower(c2) && c<0x80 && c2<0x80 ){ + continue; + } + if( c==matchOne && zPattern!=zEscaped && c2!=0 ) continue; + return SQLITE_NOMATCH; + } + return *zString==0 ? SQLITE_MATCH : SQLITE_NOMATCH; +} + +/* +** The sqlite3_strglob() interface. Return 0 on a match (like strcmp()) and +** non-zero if there is no match. +*/ +SQLITE_API int sqlite3_strglob(const char *zGlobPattern, const char *zString){ + if( zString==0 ){ + return zGlobPattern!=0; + }else if( zGlobPattern==0 ){ + return 1; + }else { + return patternCompare((u8*)zGlobPattern, (u8*)zString, &globInfo, '['); + } +} + +/* +** The sqlite3_strlike() interface. Return 0 on a match and non-zero for +** a miss - like strcmp(). +*/ +SQLITE_API int sqlite3_strlike(const char *zPattern, const char *zStr, unsigned int esc){ + if( zStr==0 ){ + return zPattern!=0; + }else if( zPattern==0 ){ + return 1; + }else{ + return patternCompare((u8*)zPattern, (u8*)zStr, &likeInfoNorm, esc); + } +} + +/* +** Count the number of times that the LIKE operator (or GLOB which is +** just a variation of LIKE) gets called. This is used for testing +** only. +*/ +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_like_count = 0; +#endif + + +/* +** Implementation of the like() SQL function. This function implements +** the built-in LIKE operator. The first argument to the function is the +** pattern and the second argument is the string. So, the SQL statements: +** +** A LIKE B +** +** is implemented as like(B,A). +** +** This same function (with a different compareInfo structure) computes +** the GLOB operator. +*/ +static void likeFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + const unsigned char *zA, *zB; + u32 escape; + int nPat; + sqlite3 *db = sqlite3_context_db_handle(context); + struct compareInfo *pInfo = sqlite3_user_data(context); + struct compareInfo backupInfo; + +#ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS + if( sqlite3_value_type(argv[0])==SQLITE_BLOB + || sqlite3_value_type(argv[1])==SQLITE_BLOB + ){ +#ifdef SQLITE_TEST + sqlite3_like_count++; +#endif + sqlite3_result_int(context, 0); + return; + } +#endif + + /* Limit the length of the LIKE or GLOB pattern to avoid problems + ** of deep recursion and N*N behavior in patternCompare(). + */ + nPat = sqlite3_value_bytes(argv[0]); + testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ); + testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 ); + if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){ + sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1); + return; + } + if( argc==3 ){ + /* The escape character string must consist of a single UTF-8 character. + ** Otherwise, return an error. + */ + const unsigned char *zEsc = sqlite3_value_text(argv[2]); + if( zEsc==0 ) return; + if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){ + sqlite3_result_error(context, + "ESCAPE expression must be a single character", -1); + return; + } + escape = sqlite3Utf8Read(&zEsc); + if( escape==pInfo->matchAll || escape==pInfo->matchOne ){ + memcpy(&backupInfo, pInfo, sizeof(backupInfo)); + pInfo = &backupInfo; + if( escape==pInfo->matchAll ) pInfo->matchAll = 0; + if( escape==pInfo->matchOne ) pInfo->matchOne = 0; + } + }else{ + escape = pInfo->matchSet; + } + zB = sqlite3_value_text(argv[0]); + zA = sqlite3_value_text(argv[1]); + if( zA && zB ){ +#ifdef SQLITE_TEST + sqlite3_like_count++; +#endif + sqlite3_result_int(context, + patternCompare(zB, zA, pInfo, escape)==SQLITE_MATCH); + } +} + +/* +** Implementation of the NULLIF(x,y) function. The result is the first +** argument if the arguments are different. The result is NULL if the +** arguments are equal to each other. +*/ +static void nullifFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + CollSeq *pColl = sqlite3GetFuncCollSeq(context); + UNUSED_PARAMETER(NotUsed); + if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){ + sqlite3_result_value(context, argv[0]); + } +} + +/* +** Implementation of the sqlite_version() function. The result is the version +** of the SQLite library that is running. +*/ +static void versionFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **NotUsed2 +){ + UNUSED_PARAMETER2(NotUsed, NotUsed2); + /* IMP: R-48699-48617 This function is an SQL wrapper around the + ** sqlite3_libversion() C-interface. */ + sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC); +} + +/* +** Implementation of the sqlite_source_id() function. The result is a string +** that identifies the particular version of the source code used to build +** SQLite. +*/ +static void sourceidFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **NotUsed2 +){ + UNUSED_PARAMETER2(NotUsed, NotUsed2); + /* IMP: R-24470-31136 This function is an SQL wrapper around the + ** sqlite3_sourceid() C interface. */ + sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC); +} + +/* +** Implementation of the sqlite_log() function. This is a wrapper around +** sqlite3_log(). The return value is NULL. The function exists purely for +** its side-effects. +*/ +static void errlogFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + UNUSED_PARAMETER(argc); + UNUSED_PARAMETER(context); + sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1])); +} + +/* +** Implementation of the sqlite_compileoption_used() function. +** The result is an integer that identifies if the compiler option +** was used to build SQLite. +*/ +#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS +static void compileoptionusedFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + const char *zOptName; + assert( argc==1 ); + UNUSED_PARAMETER(argc); + /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL + ** function is a wrapper around the sqlite3_compileoption_used() C/C++ + ** function. + */ + if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){ + sqlite3_result_int(context, sqlite3_compileoption_used(zOptName)); + } +} +#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ + +/* +** Implementation of the sqlite_compileoption_get() function. +** The result is a string that identifies the compiler options +** used to build SQLite. +*/ +#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS +static void compileoptiongetFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int n; + assert( argc==1 ); + UNUSED_PARAMETER(argc); + /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function + ** is a wrapper around the sqlite3_compileoption_get() C/C++ function. + */ + n = sqlite3_value_int(argv[0]); + sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC); +} +#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ + +/* Array for converting from half-bytes (nybbles) into ASCII hex +** digits. */ +static const char hexdigits[] = { + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' +}; + +/* +** Append to pStr text that is the SQL literal representation of the +** value contained in pValue. +*/ +SQLITE_PRIVATE void sqlite3QuoteValue(StrAccum *pStr, sqlite3_value *pValue, int bEscape){ + /* As currently implemented, the string must be initially empty. + ** we might relax this requirement in the future, but that will + ** require enhancements to the implementation. */ + assert( pStr!=0 && pStr->nChar==0 ); + + switch( sqlite3_value_type(pValue) ){ + case SQLITE_FLOAT: { + double r1, r2; + const char *zVal; + r1 = sqlite3_value_double(pValue); + sqlite3_str_appendf(pStr, "%!0.15g", r1); + zVal = sqlite3_str_value(pStr); + if( zVal ){ + sqlite3AtoF(zVal, &r2, pStr->nChar, SQLITE_UTF8); + if( r1!=r2 ){ + sqlite3_str_reset(pStr); + sqlite3_str_appendf(pStr, "%!0.20e", r1); + } + } + break; + } + case SQLITE_INTEGER: { + sqlite3_str_appendf(pStr, "%lld", sqlite3_value_int64(pValue)); + break; + } + case SQLITE_BLOB: { + char const *zBlob = sqlite3_value_blob(pValue); + i64 nBlob = sqlite3_value_bytes(pValue); + assert( zBlob==sqlite3_value_blob(pValue) ); /* No encoding change */ + sqlite3StrAccumEnlarge(pStr, nBlob*2 + 4); + if( pStr->accError==0 ){ + char *zText = pStr->zText; + int i; + for(i=0; i>4)&0x0F]; + zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F]; + } + zText[(nBlob*2)+2] = '\''; + zText[(nBlob*2)+3] = '\0'; + zText[0] = 'X'; + zText[1] = '\''; + pStr->nChar = nBlob*2 + 3; + } + break; + } + case SQLITE_TEXT: { + const unsigned char *zArg = sqlite3_value_text(pValue); + sqlite3_str_appendf(pStr, bEscape ? "%#Q" : "%Q", zArg); + break; + } + default: { + assert( sqlite3_value_type(pValue)==SQLITE_NULL ); + sqlite3_str_append(pStr, "NULL", 4); + break; + } + } +} + +/* +** Return true if z[] begins with N hexadecimal digits, and write +** a decoding of those digits into *pVal. Or return false if any +** one of the first N characters in z[] is not a hexadecimal digit. +*/ +static int isNHex(const char *z, int N, u32 *pVal){ + int i; + u32 v = 0; + for(i=0; i0 ){ + memmove(&zOut[j], &zIn[i], n); + j += n; + i += n; + } + if( zIn[i+1]=='\\' ){ + i += 2; + zOut[j++] = '\\'; + }else if( sqlite3Isxdigit(zIn[i+1]) ){ + if( !isNHex(&zIn[i+1], 4, &v) ) goto unistr_error; + i += 5; + j += sqlite3AppendOneUtf8Character(&zOut[j], v); + }else if( zIn[i+1]=='+' ){ + if( !isNHex(&zIn[i+2], 6, &v) ) goto unistr_error; + i += 8; + j += sqlite3AppendOneUtf8Character(&zOut[j], v); + }else if( zIn[i+1]=='u' ){ + if( !isNHex(&zIn[i+2], 4, &v) ) goto unistr_error; + i += 6; + j += sqlite3AppendOneUtf8Character(&zOut[j], v); + }else if( zIn[i+1]=='U' ){ + if( !isNHex(&zIn[i+2], 8, &v) ) goto unistr_error; + i += 10; + j += sqlite3AppendOneUtf8Character(&zOut[j], v); + }else{ + goto unistr_error; + } + } + zOut[j] = 0; + sqlite3_result_text64(context, zOut, j, sqlite3_free, SQLITE_UTF8); + return; + +unistr_error: + sqlite3_free(zOut); + sqlite3_result_error(context, "invalid Unicode escape", -1); + return; +} + + +/* +** Implementation of the QUOTE() function. +** +** The quote(X) function returns the text of an SQL literal which is the +** value of its argument suitable for inclusion into an SQL statement. +** Strings are surrounded by single-quotes with escapes on interior quotes +** as needed. BLOBs are encoded as hexadecimal literals. Strings with +** embedded NUL characters cannot be represented as string literals in SQL +** and hence the returned string literal is truncated prior to the first NUL. +** +** If sqlite3_user_data() is non-zero, then the UNISTR_QUOTE() function is +** implemented instead. The difference is that UNISTR_QUOTE() uses the +** UNISTR() function to escape control characters. +*/ +static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ + sqlite3_str str; + sqlite3 *db = sqlite3_context_db_handle(context); + assert( argc==1 ); + UNUSED_PARAMETER(argc); + sqlite3StrAccumInit(&str, db, 0, 0, db->aLimit[SQLITE_LIMIT_LENGTH]); + sqlite3QuoteValue(&str,argv[0],SQLITE_PTR_TO_INT(sqlite3_user_data(context))); + sqlite3_result_text(context, sqlite3StrAccumFinish(&str), str.nChar, + SQLITE_DYNAMIC); + if( str.accError!=SQLITE_OK ){ + sqlite3_result_null(context); + sqlite3_result_error_code(context, str.accError); + } +} + +/* +** The unicode() function. Return the integer unicode code-point value +** for the first character of the input string. +*/ +static void unicodeFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + const unsigned char *z = sqlite3_value_text(argv[0]); + (void)argc; + if( z && z[0] ) sqlite3_result_int(context, sqlite3Utf8Read(&z)); +} + +/* +** The char() function takes zero or more arguments, each of which is +** an integer. It constructs a string where each character of the string +** is the unicode character for the corresponding integer argument. +*/ +static void charFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + unsigned char *z, *zOut; + int i; + zOut = z = sqlite3_malloc64( argc*4+1 ); + if( z==0 ){ + sqlite3_result_error_nomem(context); + return; + } + for(i=0; i0x10ffff ) x = 0xfffd; + c = (unsigned)(x & 0x1fffff); + if( c<0x00080 ){ + *zOut++ = (u8)(c&0xFF); + }else if( c<0x00800 ){ + *zOut++ = 0xC0 + (u8)((c>>6)&0x1F); + *zOut++ = 0x80 + (u8)(c & 0x3F); + }else if( c<0x10000 ){ + *zOut++ = 0xE0 + (u8)((c>>12)&0x0F); + *zOut++ = 0x80 + (u8)((c>>6) & 0x3F); + *zOut++ = 0x80 + (u8)(c & 0x3F); + }else{ + *zOut++ = 0xF0 + (u8)((c>>18) & 0x07); + *zOut++ = 0x80 + (u8)((c>>12) & 0x3F); + *zOut++ = 0x80 + (u8)((c>>6) & 0x3F); + *zOut++ = 0x80 + (u8)(c & 0x3F); + } \ + } + *zOut = 0; + sqlite3_result_text64(context, (char*)z, zOut-z, sqlite3_free, SQLITE_UTF8); +} + +/* +** The hex() function. Interpret the argument as a blob. Return +** a hexadecimal rendering as text. +*/ +static void hexFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int i, n; + const unsigned char *pBlob; + char *zHex, *z; + assert( argc==1 ); + UNUSED_PARAMETER(argc); + pBlob = sqlite3_value_blob(argv[0]); + n = sqlite3_value_bytes(argv[0]); + assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */ + z = zHex = contextMalloc(context, ((i64)n)*2 + 1); + if( zHex ){ + for(i=0; i>4)&0xf]; + *(z++) = hexdigits[c&0xf]; + } + *z = 0; + sqlite3_result_text64(context, zHex, (u64)(z-zHex), + sqlite3_free, SQLITE_UTF8); + } +} + +/* +** Buffer zStr contains nStr bytes of utf-8 encoded text. Return 1 if zStr +** contains character ch, or 0 if it does not. +*/ +static int strContainsChar(const u8 *zStr, int nStr, u32 ch){ + const u8 *zEnd = &zStr[nStr]; + const u8 *z = zStr; + while( zmallocFailed ); + return; + } + if( zPattern[0]==0 ){ + assert( sqlite3_value_type(argv[1])!=SQLITE_NULL ); + sqlite3_result_text(context, (const char*)zStr, nStr, SQLITE_TRANSIENT); + return; + } + nPattern = sqlite3_value_bytes(argv[1]); + assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */ + zRep = sqlite3_value_text(argv[2]); + if( zRep==0 ) return; + nRep = sqlite3_value_bytes(argv[2]); + assert( zRep==sqlite3_value_text(argv[2]) ); + nOut = nStr + 1; + assert( nOutnPattern ){ + nOut += nRep - nPattern; + testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] ); + testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] ); + if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){ + sqlite3_result_error_toobig(context); + sqlite3_free(zOut); + return; + } + cntExpand++; + if( (cntExpand&(cntExpand-1))==0 ){ + /* Grow the size of the output buffer only on substitutions + ** whose index is a power of two: 1, 2, 4, 8, 16, 32, ... */ + u8 *zOld; + zOld = zOut; + zOut = sqlite3Realloc(zOut, (int)nOut + (nOut - nStr - 1)); + if( zOut==0 ){ + sqlite3_result_error_nomem(context); + sqlite3_free(zOld); + return; + } + } + } + memcpy(&zOut[j], zRep, nRep); + j += nRep; + i += nPattern-1; + } + } + assert( j+nStr-i+1<=nOut ); + memcpy(&zOut[j], &zStr[i], nStr-i); + j += nStr - i; + assert( j<=nOut ); + zOut[j] = 0; + sqlite3_result_text(context, (char*)zOut, j, sqlite3_free); +} + +/* +** Implementation of the TRIM(), LTRIM(), and RTRIM() functions. +** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both. +*/ +static void trimFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + const unsigned char *zIn; /* Input string */ + const unsigned char *zCharSet; /* Set of characters to trim */ + unsigned int nIn; /* Number of bytes in input */ + int flags; /* 1: trimleft 2: trimright 3: trim */ + int i; /* Loop counter */ + unsigned int *aLen = 0; /* Length of each character in zCharSet */ + unsigned char **azChar = 0; /* Individual characters in zCharSet */ + int nChar; /* Number of characters in zCharSet */ + + if( sqlite3_value_type(argv[0])==SQLITE_NULL ){ + return; + } + zIn = sqlite3_value_text(argv[0]); + if( zIn==0 ) return; + nIn = (unsigned)sqlite3_value_bytes(argv[0]); + assert( zIn==sqlite3_value_text(argv[0]) ); + if( argc==1 ){ + static const unsigned lenOne[] = { 1 }; + static unsigned char * const azOne[] = { (u8*)" " }; + nChar = 1; + aLen = (unsigned*)lenOne; + azChar = (unsigned char **)azOne; + zCharSet = 0; + }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){ + return; + }else{ + const unsigned char *z; + for(z=zCharSet, nChar=0; *z; nChar++){ + SQLITE_SKIP_UTF8(z); + } + if( nChar>0 ){ + azChar = contextMalloc(context, + ((i64)nChar)*(sizeof(char*)+sizeof(unsigned))); + if( azChar==0 ){ + return; + } + aLen = (unsigned*)&azChar[nChar]; + for(z=zCharSet, nChar=0; *z; nChar++){ + azChar[nChar] = (unsigned char *)z; + SQLITE_SKIP_UTF8(z); + aLen[nChar] = (unsigned)(z - azChar[nChar]); + } + } + } + if( nChar>0 ){ + flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context)); + if( flags & 1 ){ + while( nIn>0 ){ + unsigned int len = 0; + for(i=0; i=nChar ) break; + zIn += len; + nIn -= len; + } + } + if( flags & 2 ){ + while( nIn>0 ){ + unsigned int len = 0; + for(i=0; i=nChar ) break; + nIn -= len; + } + } + if( zCharSet ){ + sqlite3_free(azChar); + } + } + sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT); +} + +/* The core implementation of the CONCAT(...) and CONCAT_WS(SEP,...) +** functions. +** +** Return a string value that is the concatenation of all non-null +** entries in argv[]. Use zSep as the separator. +*/ +static void concatFuncCore( + sqlite3_context *context, + int argc, + sqlite3_value **argv, + int nSep, + const char *zSep +){ + i64 j, n = 0; + int i; + int bNotNull = 0; /* True after at least NOT NULL argument seen */ + char *z; + for(i=0; i0 ){ + memcpy(&z[j], zSep, nSep); + j += nSep; + } + memcpy(&z[j], v, k); + j += k; + bNotNull = 1; + } + } + } + z[j] = 0; + assert( j<=n ); + sqlite3_result_text64(context, z, j, sqlite3_free, SQLITE_UTF8); +} + +/* +** The CONCAT(...) function. Generate a string result that is the +** concatentation of all non-null arguments. +*/ +static void concatFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + concatFuncCore(context, argc, argv, 0, ""); +} + +/* +** The CONCAT_WS(separator, ...) function. +** +** Generate a string that is the concatenation of 2nd through the Nth +** argument. Use the first argument (which must be non-NULL) as the +** separator. +*/ +static void concatwsFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int nSep = sqlite3_value_bytes(argv[0]); + const char *zSep = (const char*)sqlite3_value_text(argv[0]); + if( zSep==0 ) return; + concatFuncCore(context, argc-1, argv+1, nSep, zSep); +} + + +#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION +/* +** The "unknown" function is automatically substituted in place of +** any unrecognized function name when doing an EXPLAIN or EXPLAIN QUERY PLAN +** when the SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION compile-time option is used. +** When the "sqlite3" command-line shell is built using this functionality, +** that allows an EXPLAIN or EXPLAIN QUERY PLAN for complex queries +** involving application-defined functions to be examined in a generic +** sqlite3 shell. +*/ +static void unknownFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + /* no-op */ + (void)context; + (void)argc; + (void)argv; +} +#endif /*SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION*/ + + +/* IMP: R-25361-16150 This function is omitted from SQLite by default. It +** is only available if the SQLITE_SOUNDEX compile-time option is used +** when SQLite is built. +*/ +#ifdef SQLITE_SOUNDEX +/* +** Compute the soundex encoding of a word. +** +** IMP: R-59782-00072 The soundex(X) function returns a string that is the +** soundex encoding of the string X. +*/ +static void soundexFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + char zResult[8]; + const u8 *zIn; + int i, j; + static const unsigned char iCode[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0, + 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0, + 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0, + 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0, + }; + assert( argc==1 ); + zIn = (u8*)sqlite3_value_text(argv[0]); + if( zIn==0 ) zIn = (u8*)""; + for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){} + if( zIn[i] ){ + u8 prevcode = iCode[zIn[i]&0x7f]; + zResult[0] = sqlite3Toupper(zIn[i]); + for(j=1; j<4 && zIn[i]; i++){ + int code = iCode[zIn[i]&0x7f]; + if( code>0 ){ + if( code!=prevcode ){ + prevcode = code; + zResult[j++] = code + '0'; + } + }else{ + prevcode = 0; + } + } + while( j<4 ){ + zResult[j++] = '0'; + } + zResult[j] = 0; + sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT); + }else{ + /* IMP: R-64894-50321 The string "?000" is returned if the argument + ** is NULL or contains no ASCII alphabetic characters. */ + sqlite3_result_text(context, "?000", 4, SQLITE_STATIC); + } +} +#endif /* SQLITE_SOUNDEX */ + +#ifndef SQLITE_OMIT_LOAD_EXTENSION +/* +** A function that loads a shared-library extension then returns NULL. +*/ +static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){ + const char *zFile = (const char *)sqlite3_value_text(argv[0]); + const char *zProc; + sqlite3 *db = sqlite3_context_db_handle(context); + char *zErrMsg = 0; + + /* Disallow the load_extension() SQL function unless the SQLITE_LoadExtFunc + ** flag is set. See the sqlite3_enable_load_extension() API. + */ + if( (db->flags & SQLITE_LoadExtFunc)==0 ){ + sqlite3_result_error(context, "not authorized", -1); + return; + } + + if( argc==2 ){ + zProc = (const char *)sqlite3_value_text(argv[1]); + }else{ + zProc = 0; + } + if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){ + sqlite3_result_error(context, zErrMsg, -1); + sqlite3_free(zErrMsg); + } +} +#endif + + +/* +** An instance of the following structure holds the context of a +** sum() or avg() aggregate computation. +*/ +typedef struct SumCtx SumCtx; +struct SumCtx { + double rSum; /* Running sum as as a double */ + double rErr; /* Error term for Kahan-Babushka-Neumaier summation */ + i64 iSum; /* Running sum as a signed integer */ + i64 cnt; /* Number of elements summed */ + u8 approx; /* True if any non-integer value was input to the sum */ + u8 ovrfl; /* Integer overflow seen */ +}; + +/* +** Do one step of the Kahan-Babushka-Neumaier summation. +** +** https://en.wikipedia.org/wiki/Kahan_summation_algorithm +** +** Variables are marked "volatile" to defeat c89 x86 floating point +** optimizations can mess up this algorithm. +*/ +static void kahanBabuskaNeumaierStep( + volatile SumCtx *pSum, + volatile double r +){ + volatile double s = pSum->rSum; + volatile double t = s + r; + if( fabs(s) > fabs(r) ){ + pSum->rErr += (s - t) + r; + }else{ + pSum->rErr += (r - t) + s; + } + pSum->rSum = t; +} + +/* +** Add a (possibly large) integer to the running sum. +*/ +static void kahanBabuskaNeumaierStepInt64(volatile SumCtx *pSum, i64 iVal){ + if( iVal<=-4503599627370496LL || iVal>=+4503599627370496LL ){ + i64 iBig, iSm; + iSm = iVal % 16384; + iBig = iVal - iSm; + kahanBabuskaNeumaierStep(pSum, iBig); + kahanBabuskaNeumaierStep(pSum, iSm); + }else{ + kahanBabuskaNeumaierStep(pSum, (double)iVal); + } +} + +/* +** Initialize the Kahan-Babaska-Neumaier sum from a 64-bit integer +*/ +static void kahanBabuskaNeumaierInit( + volatile SumCtx *p, + i64 iVal +){ + if( iVal<=-4503599627370496LL || iVal>=+4503599627370496LL ){ + i64 iSm = iVal % 16384; + p->rSum = (double)(iVal - iSm); + p->rErr = (double)iSm; + }else{ + p->rSum = (double)iVal; + p->rErr = 0.0; + } +} + +/* +** Routines used to compute the sum, average, and total. +** +** The SUM() function follows the (broken) SQL standard which means +** that it returns NULL if it sums over no inputs. TOTAL returns +** 0.0 in that case. In addition, TOTAL always returns a float where +** SUM might return an integer if it never encounters a floating point +** value. TOTAL never fails, but SUM might throw an exception if +** it overflows an integer. +*/ +static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){ + SumCtx *p; + int type; + assert( argc==1 ); + UNUSED_PARAMETER(argc); + p = sqlite3_aggregate_context(context, sizeof(*p)); + type = sqlite3_value_numeric_type(argv[0]); + if( p && type!=SQLITE_NULL ){ + p->cnt++; + if( p->approx==0 ){ + if( type!=SQLITE_INTEGER ){ + kahanBabuskaNeumaierInit(p, p->iSum); + p->approx = 1; + kahanBabuskaNeumaierStep(p, sqlite3_value_double(argv[0])); + }else{ + i64 x = p->iSum; + if( sqlite3AddInt64(&x, sqlite3_value_int64(argv[0]))==0 ){ + p->iSum = x; + }else{ + p->ovrfl = 1; + kahanBabuskaNeumaierInit(p, p->iSum); + p->approx = 1; + kahanBabuskaNeumaierStepInt64(p, sqlite3_value_int64(argv[0])); + } + } + }else{ + if( type==SQLITE_INTEGER ){ + kahanBabuskaNeumaierStepInt64(p, sqlite3_value_int64(argv[0])); + }else{ + p->ovrfl = 0; + kahanBabuskaNeumaierStep(p, sqlite3_value_double(argv[0])); + } + } + } +} +#ifndef SQLITE_OMIT_WINDOWFUNC +static void sumInverse(sqlite3_context *context, int argc, sqlite3_value**argv){ + SumCtx *p; + int type; + assert( argc==1 ); + UNUSED_PARAMETER(argc); + p = sqlite3_aggregate_context(context, sizeof(*p)); + type = sqlite3_value_numeric_type(argv[0]); + /* p is always non-NULL because sumStep() will have been called first + ** to initialize it */ + if( ALWAYS(p) && type!=SQLITE_NULL ){ + assert( p->cnt>0 ); + p->cnt--; + if( !p->approx ){ + if( sqlite3SubInt64(&p->iSum, sqlite3_value_int64(argv[0])) ){ + p->ovrfl = 1; + p->approx = 1; + } + }else if( type==SQLITE_INTEGER ){ + i64 iVal = sqlite3_value_int64(argv[0]); + if( iVal!=SMALLEST_INT64 ){ + kahanBabuskaNeumaierStepInt64(p, -iVal); + }else{ + kahanBabuskaNeumaierStepInt64(p, LARGEST_INT64); + kahanBabuskaNeumaierStepInt64(p, 1); + } + }else{ + kahanBabuskaNeumaierStep(p, -sqlite3_value_double(argv[0])); + } + } +} +#else +# define sumInverse 0 +#endif /* SQLITE_OMIT_WINDOWFUNC */ +static void sumFinalize(sqlite3_context *context){ + SumCtx *p; + p = sqlite3_aggregate_context(context, 0); + if( p && p->cnt>0 ){ + if( p->approx ){ + if( p->ovrfl ){ + sqlite3_result_error(context,"integer overflow",-1); + }else if( !sqlite3IsOverflow(p->rErr) ){ + sqlite3_result_double(context, p->rSum+p->rErr); + }else{ + sqlite3_result_double(context, p->rSum); + } + }else{ + sqlite3_result_int64(context, p->iSum); + } + } +} +static void avgFinalize(sqlite3_context *context){ + SumCtx *p; + p = sqlite3_aggregate_context(context, 0); + if( p && p->cnt>0 ){ + double r; + if( p->approx ){ + r = p->rSum; + if( !sqlite3IsOverflow(p->rErr) ) r += p->rErr; + }else{ + r = (double)(p->iSum); + } + sqlite3_result_double(context, r/(double)p->cnt); + } +} +static void totalFinalize(sqlite3_context *context){ + SumCtx *p; + double r = 0.0; + p = sqlite3_aggregate_context(context, 0); + if( p ){ + if( p->approx ){ + r = p->rSum; + if( !sqlite3IsOverflow(p->rErr) ) r += p->rErr; + }else{ + r = (double)(p->iSum); + } + } + sqlite3_result_double(context, r); +} + +/* +** The following structure keeps track of state information for the +** count() aggregate function. +*/ +typedef struct CountCtx CountCtx; +struct CountCtx { + i64 n; +#ifdef SQLITE_DEBUG + int bInverse; /* True if xInverse() ever called */ +#endif +}; + +/* +** Routines to implement the count() aggregate function. +*/ +static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){ + CountCtx *p; + p = sqlite3_aggregate_context(context, sizeof(*p)); + if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){ + p->n++; + } + +#ifndef SQLITE_OMIT_DEPRECATED + /* The sqlite3_aggregate_count() function is deprecated. But just to make + ** sure it still operates correctly, verify that its count agrees with our + ** internal count when using count(*) and when the total count can be + ** expressed as a 32-bit integer. */ + assert( argc==1 || p==0 || p->n>0x7fffffff || p->bInverse + || p->n==sqlite3_aggregate_count(context) ); +#endif +} +static void countFinalize(sqlite3_context *context){ + CountCtx *p; + p = sqlite3_aggregate_context(context, 0); + sqlite3_result_int64(context, p ? p->n : 0); +} +#ifndef SQLITE_OMIT_WINDOWFUNC +static void countInverse(sqlite3_context *ctx, int argc, sqlite3_value **argv){ + CountCtx *p; + p = sqlite3_aggregate_context(ctx, sizeof(*p)); + /* p is always non-NULL since countStep() will have been called first */ + if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && ALWAYS(p) ){ + p->n--; +#ifdef SQLITE_DEBUG + p->bInverse = 1; +#endif + } +} +#else +# define countInverse 0 +#endif /* SQLITE_OMIT_WINDOWFUNC */ + +/* +** Routines to implement min() and max() aggregate functions. +*/ +static void minmaxStep( + sqlite3_context *context, + int NotUsed, + sqlite3_value **argv +){ + Mem *pArg = (Mem *)argv[0]; + Mem *pBest; + UNUSED_PARAMETER(NotUsed); + + pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest)); + if( !pBest ) return; + + if( sqlite3_value_type(pArg)==SQLITE_NULL ){ + if( pBest->flags ) sqlite3SkipAccumulatorLoad(context); + }else if( pBest->flags ){ + int max; + int cmp; + CollSeq *pColl = sqlite3GetFuncCollSeq(context); + /* This step function is used for both the min() and max() aggregates, + ** the only difference between the two being that the sense of the + ** comparison is inverted. For the max() aggregate, the + ** sqlite3_user_data() function returns (void *)-1. For min() it + ** returns (void *)db, where db is the sqlite3* database pointer. + ** Therefore the next statement sets variable 'max' to 1 for the max() + ** aggregate, or 0 for min(). + */ + max = sqlite3_user_data(context)!=0; + cmp = sqlite3MemCompare(pBest, pArg, pColl); + if( (max && cmp<0) || (!max && cmp>0) ){ + sqlite3VdbeMemCopy(pBest, pArg); + }else{ + sqlite3SkipAccumulatorLoad(context); + } + }else{ + pBest->db = sqlite3_context_db_handle(context); + sqlite3VdbeMemCopy(pBest, pArg); + } +} +static void minMaxValueFinalize(sqlite3_context *context, int bValue){ + sqlite3_value *pRes; + pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0); + if( pRes ){ + if( pRes->flags ){ + sqlite3_result_value(context, pRes); + } + if( bValue==0 ) sqlite3VdbeMemRelease(pRes); + } +} +#ifndef SQLITE_OMIT_WINDOWFUNC +static void minMaxValue(sqlite3_context *context){ + minMaxValueFinalize(context, 1); +} +#else +# define minMaxValue 0 +#endif /* SQLITE_OMIT_WINDOWFUNC */ +static void minMaxFinalize(sqlite3_context *context){ + minMaxValueFinalize(context, 0); +} + +/* +** group_concat(EXPR, ?SEPARATOR?) +** string_agg(EXPR, SEPARATOR) +** +** Content is accumulated in GroupConcatCtx.str with the SEPARATOR +** coming before the EXPR value, except for the first entry which +** omits the SEPARATOR. +** +** It is tragic that the SEPARATOR goes before the EXPR string. The +** groupConcatInverse() implementation would have been easier if the +** SEPARATOR were appended after EXPR. And the order is undocumented, +** so we could change it, in theory. But the old behavior has been +** around for so long that we dare not, for fear of breaking something. +*/ +typedef struct { + StrAccum str; /* The accumulated concatenation */ +#ifndef SQLITE_OMIT_WINDOWFUNC + int nAccum; /* Number of strings presently concatenated */ + int nFirstSepLength; /* Used to detect separator length change */ + /* If pnSepLengths!=0, refs an array of inter-string separator lengths, + ** stored as actually incorporated into presently accumulated result. + ** (Hence, its slots in use number nAccum-1 between method calls.) + ** If pnSepLengths==0, nFirstSepLength is the length used throughout. + */ + int *pnSepLengths; +#endif +} GroupConcatCtx; + +static void groupConcatStep( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + const char *zVal; + GroupConcatCtx *pGCC; + const char *zSep; + int nVal, nSep; + assert( argc==1 || argc==2 ); + if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; + pGCC = (GroupConcatCtx*)sqlite3_aggregate_context(context, sizeof(*pGCC)); + if( pGCC ){ + sqlite3 *db = sqlite3_context_db_handle(context); + int firstTerm = pGCC->str.mxAlloc==0; + pGCC->str.mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH]; + if( argc==1 ){ + if( !firstTerm ){ + sqlite3_str_appendchar(&pGCC->str, 1, ','); + } +#ifndef SQLITE_OMIT_WINDOWFUNC + else{ + pGCC->nFirstSepLength = 1; + } +#endif + }else if( !firstTerm ){ + zSep = (char*)sqlite3_value_text(argv[1]); + nSep = sqlite3_value_bytes(argv[1]); + if( zSep ){ + sqlite3_str_append(&pGCC->str, zSep, nSep); + } +#ifndef SQLITE_OMIT_WINDOWFUNC + else{ + nSep = 0; + } + if( nSep != pGCC->nFirstSepLength || pGCC->pnSepLengths != 0 ){ + int *pnsl = pGCC->pnSepLengths; + if( pnsl == 0 ){ + /* First separator length variation seen, start tracking them. */ + pnsl = (int*)sqlite3_malloc64((pGCC->nAccum+1) * sizeof(int)); + if( pnsl!=0 ){ + int i = 0, nA = pGCC->nAccum-1; + while( inFirstSepLength; + } + }else{ + pnsl = (int*)sqlite3_realloc64(pnsl, pGCC->nAccum * sizeof(int)); + } + if( pnsl!=0 ){ + if( ALWAYS(pGCC->nAccum>0) ){ + pnsl[pGCC->nAccum-1] = nSep; + } + pGCC->pnSepLengths = pnsl; + }else{ + sqlite3StrAccumSetError(&pGCC->str, SQLITE_NOMEM); + } + } +#endif + } +#ifndef SQLITE_OMIT_WINDOWFUNC + else{ + pGCC->nFirstSepLength = sqlite3_value_bytes(argv[1]); + } + pGCC->nAccum += 1; +#endif + zVal = (char*)sqlite3_value_text(argv[0]); + nVal = sqlite3_value_bytes(argv[0]); + if( zVal ) sqlite3_str_append(&pGCC->str, zVal, nVal); + } +} + +#ifndef SQLITE_OMIT_WINDOWFUNC +static void groupConcatInverse( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GroupConcatCtx *pGCC; + assert( argc==1 || argc==2 ); + (void)argc; /* Suppress unused parameter warning */ + if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; + pGCC = (GroupConcatCtx*)sqlite3_aggregate_context(context, sizeof(*pGCC)); + /* pGCC is always non-NULL since groupConcatStep() will have always + ** run first to initialize it */ + if( ALWAYS(pGCC) ){ + int nVS; /* Number of characters to remove */ + /* Must call sqlite3_value_text() to convert the argument into text prior + ** to invoking sqlite3_value_bytes(), in case the text encoding is UTF16 */ + (void)sqlite3_value_text(argv[0]); + nVS = sqlite3_value_bytes(argv[0]); + pGCC->nAccum -= 1; + if( pGCC->pnSepLengths!=0 ){ + assert(pGCC->nAccum >= 0); + if( pGCC->nAccum>0 ){ + nVS += *pGCC->pnSepLengths; + memmove(pGCC->pnSepLengths, pGCC->pnSepLengths+1, + (pGCC->nAccum-1)*sizeof(int)); + } + }else{ + /* If removing single accumulated string, harmlessly over-do. */ + nVS += pGCC->nFirstSepLength; + } + if( nVS>=(int)pGCC->str.nChar ){ + pGCC->str.nChar = 0; + }else{ + pGCC->str.nChar -= nVS; + memmove(pGCC->str.zText, &pGCC->str.zText[nVS], pGCC->str.nChar); + } + if( pGCC->str.nChar==0 ){ + pGCC->str.mxAlloc = 0; + sqlite3_free(pGCC->pnSepLengths); + pGCC->pnSepLengths = 0; + } + } +} +#else +# define groupConcatInverse 0 +#endif /* SQLITE_OMIT_WINDOWFUNC */ +static void groupConcatFinalize(sqlite3_context *context){ + GroupConcatCtx *pGCC + = (GroupConcatCtx*)sqlite3_aggregate_context(context, 0); + if( pGCC ){ + sqlite3ResultStrAccum(context, &pGCC->str); +#ifndef SQLITE_OMIT_WINDOWFUNC + sqlite3_free(pGCC->pnSepLengths); +#endif + } +} +#ifndef SQLITE_OMIT_WINDOWFUNC +static void groupConcatValue(sqlite3_context *context){ + GroupConcatCtx *pGCC + = (GroupConcatCtx*)sqlite3_aggregate_context(context, 0); + if( pGCC ){ + StrAccum *pAccum = &pGCC->str; + if( pAccum->accError==SQLITE_TOOBIG ){ + sqlite3_result_error_toobig(context); + }else if( pAccum->accError==SQLITE_NOMEM ){ + sqlite3_result_error_nomem(context); + }else if( pGCC->nAccum>0 && pAccum->nChar==0 ){ + sqlite3_result_text(context, "", 1, SQLITE_STATIC); + }else{ + const char *zText = sqlite3_str_value(pAccum); + sqlite3_result_text(context, zText, pAccum->nChar, SQLITE_TRANSIENT); + } + } +} +#else +# define groupConcatValue 0 +#endif /* SQLITE_OMIT_WINDOWFUNC */ + +/* +** This routine does per-connection function registration. Most +** of the built-in functions above are part of the global function set. +** This routine only deals with those that are not global. +*/ +SQLITE_PRIVATE void sqlite3RegisterPerConnectionBuiltinFunctions(sqlite3 *db){ + int rc = sqlite3_overload_function(db, "MATCH", 2); + assert( rc==SQLITE_NOMEM || rc==SQLITE_OK ); + if( rc==SQLITE_NOMEM ){ + sqlite3OomFault(db); + } +} + +/* +** Re-register the built-in LIKE functions. The caseSensitive +** parameter determines whether or not the LIKE operator is case +** sensitive. +*/ +SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){ + FuncDef *pDef; + struct compareInfo *pInfo; + int flags; + int nArg; + if( caseSensitive ){ + pInfo = (struct compareInfo*)&likeInfoAlt; + flags = SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE; + }else{ + pInfo = (struct compareInfo*)&likeInfoNorm; + flags = SQLITE_FUNC_LIKE; + } + for(nArg=2; nArg<=3; nArg++){ + sqlite3CreateFunc(db, "like", nArg, SQLITE_UTF8, pInfo, likeFunc, + 0, 0, 0, 0, 0); + pDef = sqlite3FindFunction(db, "like", nArg, SQLITE_UTF8, 0); + pDef->funcFlags |= flags; + pDef->funcFlags &= ~SQLITE_FUNC_UNSAFE; + } +} + +/* +** pExpr points to an expression which implements a function. If +** it is appropriate to apply the LIKE optimization to that function +** then set aWc[0] through aWc[2] to the wildcard characters and the +** escape character and then return TRUE. If the function is not a +** LIKE-style function then return FALSE. +** +** The expression "a LIKE b ESCAPE c" is only considered a valid LIKE +** operator if c is a string literal that is exactly one byte in length. +** That one byte is stored in aWc[3]. aWc[3] is set to zero if there is +** no ESCAPE clause. +** +** *pIsNocase is set to true if uppercase and lowercase are equivalent for +** the function (default for LIKE). If the function makes the distinction +** between uppercase and lowercase (as does GLOB) then *pIsNocase is set to +** false. +*/ +SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){ + FuncDef *pDef; + int nExpr; + assert( pExpr!=0 ); + assert( pExpr->op==TK_FUNCTION ); + assert( ExprUseXList(pExpr) ); + if( !pExpr->x.pList ){ + return 0; + } + nExpr = pExpr->x.pList->nExpr; + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + pDef = sqlite3FindFunction(db, pExpr->u.zToken, nExpr, SQLITE_UTF8, 0); +#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION + if( pDef==0 ) return 0; +#endif + if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){ + return 0; + } + + /* The memcpy() statement assumes that the wildcard characters are + ** the first three statements in the compareInfo structure. The + ** asserts() that follow verify that assumption + */ + memcpy(aWc, pDef->pUserData, 3); + assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll ); + assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne ); + assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet ); + + if( nExpr<3 ){ + aWc[3] = 0; + }else{ + Expr *pEscape = pExpr->x.pList->a[2].pExpr; + char *zEscape; + if( pEscape->op!=TK_STRING ) return 0; + assert( !ExprHasProperty(pEscape, EP_IntValue) ); + zEscape = pEscape->u.zToken; + if( zEscape[0]==0 || zEscape[1]!=0 ) return 0; + if( zEscape[0]==aWc[0] ) return 0; + if( zEscape[0]==aWc[1] ) return 0; + aWc[3] = zEscape[0]; + } + + *pIsNocase = (pDef->funcFlags & SQLITE_FUNC_CASE)==0; + return 1; +} + +/* Mathematical Constants */ +#ifndef M_PI +# define M_PI 3.141592653589793238462643383279502884 +#endif +#ifndef M_LN10 +# define M_LN10 2.302585092994045684017991454684364208 +#endif +#ifndef M_LN2 +# define M_LN2 0.693147180559945309417232121458176568 +#endif + + +/* Extra math functions that require linking with -lm +*/ +#ifdef SQLITE_ENABLE_MATH_FUNCTIONS +/* +** Implementation SQL functions: +** +** ceil(X) +** ceiling(X) +** floor(X) +** +** The sqlite3_user_data() pointer is a pointer to the libm implementation +** of the underlying C function. +*/ +static void ceilingFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + assert( argc==1 ); + switch( sqlite3_value_numeric_type(argv[0]) ){ + case SQLITE_INTEGER: { + sqlite3_result_int64(context, sqlite3_value_int64(argv[0])); + break; + } + case SQLITE_FLOAT: { + double (*x)(double) = (double(*)(double))sqlite3_user_data(context); + sqlite3_result_double(context, x(sqlite3_value_double(argv[0]))); + break; + } + default: { + break; + } + } +} + +/* +** On some systems, ceil() and floor() are intrinsic function. You are +** unable to take a pointer to these functions. Hence, we here wrap them +** in our own actual functions. +*/ +static double xCeil(double x){ return ceil(x); } +static double xFloor(double x){ return floor(x); } + +/* +** Some systems do not have log2() and log10() in their standard math +** libraries. +*/ +#if defined(HAVE_LOG10) && HAVE_LOG10==0 +# define log10(X) (0.4342944819032517867*log(X)) +#endif +#if defined(HAVE_LOG2) && HAVE_LOG2==0 +# define log2(X) (1.442695040888963456*log(X)) +#endif + + +/* +** Implementation of SQL functions: +** +** ln(X) - natural logarithm +** log(X) - log X base 10 +** log10(X) - log X base 10 +** log(B,X) - log X base B +*/ +static void logFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + double x, b, ans; + assert( argc==1 || argc==2 ); + switch( sqlite3_value_numeric_type(argv[0]) ){ + case SQLITE_INTEGER: + case SQLITE_FLOAT: + x = sqlite3_value_double(argv[0]); + if( x<=0.0 ) return; + break; + default: + return; + } + if( argc==2 ){ + switch( sqlite3_value_numeric_type(argv[0]) ){ + case SQLITE_INTEGER: + case SQLITE_FLOAT: + b = log(x); + if( b<=0.0 ) return; + x = sqlite3_value_double(argv[1]); + if( x<=0.0 ) return; + break; + default: + return; + } + ans = log(x)/b; + }else{ + switch( SQLITE_PTR_TO_INT(sqlite3_user_data(context)) ){ + case 1: + ans = log10(x); + break; + case 2: + ans = log2(x); + break; + default: + ans = log(x); + break; + } + } + sqlite3_result_double(context, ans); +} + +/* +** Functions to converts degrees to radians and radians to degrees. +*/ +static double degToRad(double x){ return x*(M_PI/180.0); } +static double radToDeg(double x){ return x*(180.0/M_PI); } + +/* +** Implementation of 1-argument SQL math functions: +** +** exp(X) - Compute e to the X-th power +*/ +static void math1Func( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int type0; + double v0, ans; + double (*x)(double); + assert( argc==1 ); + type0 = sqlite3_value_numeric_type(argv[0]); + if( type0!=SQLITE_INTEGER && type0!=SQLITE_FLOAT ) return; + v0 = sqlite3_value_double(argv[0]); + x = (double(*)(double))sqlite3_user_data(context); + ans = x(v0); + sqlite3_result_double(context, ans); +} + +/* +** Implementation of 2-argument SQL math functions: +** +** power(X,Y) - Compute X to the Y-th power +*/ +static void math2Func( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int type0, type1; + double v0, v1, ans; + double (*x)(double,double); + assert( argc==2 ); + type0 = sqlite3_value_numeric_type(argv[0]); + if( type0!=SQLITE_INTEGER && type0!=SQLITE_FLOAT ) return; + type1 = sqlite3_value_numeric_type(argv[1]); + if( type1!=SQLITE_INTEGER && type1!=SQLITE_FLOAT ) return; + v0 = sqlite3_value_double(argv[0]); + v1 = sqlite3_value_double(argv[1]); + x = (double(*)(double,double))sqlite3_user_data(context); + ans = x(v0, v1); + sqlite3_result_double(context, ans); +} + +/* +** Implementation of 0-argument pi() function. +*/ +static void piFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + assert( argc==0 ); + (void)argv; + sqlite3_result_double(context, M_PI); +} + +#endif /* SQLITE_ENABLE_MATH_FUNCTIONS */ + +/* +** Implementation of sign(X) function. +*/ +static void signFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int type0; + double x; + UNUSED_PARAMETER(argc); + assert( argc==1 ); + type0 = sqlite3_value_numeric_type(argv[0]); + if( type0!=SQLITE_INTEGER && type0!=SQLITE_FLOAT ) return; + x = sqlite3_value_double(argv[0]); + sqlite3_result_int(context, x<0.0 ? -1 : x>0.0 ? +1 : 0); +} + +#if defined(SQLITE_ENABLE_PERCENTILE) +/*********************************************************************** +** This section implements the percentile(Y,P) SQL function and similar. +** Requirements: +** +** (1) The percentile(Y,P) function is an aggregate function taking +** exactly two arguments. +** +** (2) If the P argument to percentile(Y,P) is not the same for every +** row in the aggregate then an error is thrown. The word "same" +** in the previous sentence means that the value differ by less +** than 0.001. +** +** (3) If the P argument to percentile(Y,P) evaluates to anything other +** than a number in the range of 0.0 to 100.0 inclusive then an +** error is thrown. +** +** (4) If any Y argument to percentile(Y,P) evaluates to a value that +** is not NULL and is not numeric then an error is thrown. +** +** (5) If any Y argument to percentile(Y,P) evaluates to plus or minus +** infinity then an error is thrown. (SQLite always interprets NaN +** values as NULL.) +** +** (6) Both Y and P in percentile(Y,P) can be arbitrary expressions, +** including CASE WHEN expressions. +** +** (7) The percentile(Y,P) aggregate is able to handle inputs of at least +** one million (1,000,000) rows. +** +** (8) If there are no non-NULL values for Y, then percentile(Y,P) +** returns NULL. +** +** (9) If there is exactly one non-NULL value for Y, the percentile(Y,P) +** returns the one Y value. +** +** (10) If there N non-NULL values of Y where N is two or more and +** the Y values are ordered from least to greatest and a graph is +** drawn from 0 to N-1 such that the height of the graph at J is +** the J-th Y value and such that straight lines are drawn between +** adjacent Y values, then the percentile(Y,P) function returns +** the height of the graph at P*(N-1)/100. +** +** (11) The percentile(Y,P) function always returns either a floating +** point number or NULL. +** +** (12) The percentile(Y,P) is implemented as a single C99 source-code +** file that compiles into a shared-library or DLL that can be loaded +** into SQLite using the sqlite3_load_extension() interface. +** +** (13) A separate median(Y) function is the equivalent percentile(Y,50). +** +** (14) A separate percentile_cont(Y,P) function is equivalent to +** percentile(Y,P/100.0). In other words, the fraction value in +** the second argument is in the range of 0 to 1 instead of 0 to 100. +** +** (15) A separate percentile_disc(Y,P) function is like +** percentile_cont(Y,P) except that instead of returning the weighted +** average of the nearest two input values, it returns the next lower +** value. So the percentile_disc(Y,P) will always return a value +** that was one of the inputs. +** +** (16) All of median(), percentile(Y,P), percentile_cont(Y,P) and +** percentile_disc(Y,P) can be used as window functions. +** +** Differences from standard SQL: +** +** * The percentile_cont(X,P) function is equivalent to the following in +** standard SQL: +** +** (percentile_cont(P) WITHIN GROUP (ORDER BY X)) +** +** The SQLite syntax is much more compact. The standard SQL syntax +** is also supported if SQLite is compiled with the +** -DSQLITE_ENABLE_ORDERED_SET_AGGREGATES option. +** +** * No median(X) function exists in the SQL standard. App developers +** are expected to write "percentile_cont(0.5)WITHIN GROUP(ORDER BY X)". +** +** * No percentile(Y,P) function exists in the SQL standard. Instead of +** percential(Y,P), developers must write this: +** "percentile_cont(P/100.0) WITHIN GROUP (ORDER BY Y)". Note that +** the fraction parameter to percentile() goes from 0 to 100 whereas +** the fraction parameter in SQL standard percentile_cont() goes from +** 0 to 1. +** +** Implementation notes as of 2024-08-31: +** +** * The regular aggregate-function versions of these routines work +** by accumulating all values in an array of doubles, then sorting +** that array using quicksort before computing the answer. Thus +** the runtime is O(NlogN) where N is the number of rows of input. +** +** * For the window-function versions of these routines, the array of +** inputs is sorted as soon as the first value is computed. Thereafter, +** the array is kept in sorted order using an insert-sort. This +** results in O(N*K) performance where K is the size of the window. +** One can imagine alternative implementations that give O(N*logN*logK) +** performance, but they require more complex logic and data structures. +** The developers have elected to keep the asymptotically slower +** algorithm for now, for simplicity, under the theory that window +** functions are seldom used and when they are, the window size K is +** often small. The developers might revisit that decision later, +** should the need arise. +*/ + +/* The following object is the group context for a single percentile() +** aggregate. Remember all input Y values until the very end. +** Those values are accumulated in the Percentile.a[] array. +*/ +typedef struct Percentile Percentile; +struct Percentile { + u64 nAlloc; /* Number of slots allocated for a[] */ + u64 nUsed; /* Number of slots actually used in a[] */ + char bSorted; /* True if a[] is already in sorted order */ + char bKeepSorted; /* True if advantageous to keep a[] sorted */ + char bPctValid; /* True if rPct is valid */ + double rPct; /* Fraction. 0.0 to 1.0 */ + double *a; /* Array of Y values */ +}; + +/* +** Return TRUE if the input floating-point number is an infinity. +*/ +static int percentIsInfinity(double r){ + sqlite3_uint64 u; + assert( sizeof(u)==sizeof(r) ); + memcpy(&u, &r, sizeof(u)); + return ((u>>52)&0x7ff)==0x7ff; +} + +/* +** Return TRUE if two doubles differ by 0.001 or less. +*/ +static int percentSameValue(double a, double b){ + a -= b; + return a>=-0.001 && a<=0.001; +} + +/* +** Search p (which must have p->bSorted) looking for an entry with +** value y. Return the index of that entry. +** +** If bExact is true, return -1 if the entry is not found. +** +** If bExact is false, return the index at which a new entry with +** value y should be insert in order to keep the values in sorted +** order. The smallest return value in this case will be 0, and +** the largest return value will be p->nUsed. +*/ +static i64 percentBinarySearch(Percentile *p, double y, int bExact){ + i64 iFirst = 0; /* First element of search range */ + i64 iLast = (i64)p->nUsed - 1; /* Last element of search range */ + while( iLast>=iFirst ){ + i64 iMid = (iFirst+iLast)/2; + double x = p->a[iMid]; + if( xy ){ + iLast = iMid - 1; + }else{ + return iMid; + } + } + if( bExact ) return -1; + return iFirst; +} + +/* +** Generate an error for a percentile function. +** +** The error format string must have exactly one occurrence of "%%s()" +** (with two '%' characters). That substring will be replaced by the name +** of the function. +*/ +static void percentError(sqlite3_context *pCtx, const char *zFormat, ...){ + char *zMsg1; + char *zMsg2; + va_list ap; + + va_start(ap, zFormat); + zMsg1 = sqlite3_vmprintf(zFormat, ap); + va_end(ap); + zMsg2 = zMsg1 ? sqlite3_mprintf(zMsg1, sqlite3VdbeFuncName(pCtx)) : 0; + sqlite3_result_error(pCtx, zMsg2, -1); + sqlite3_free(zMsg1); + sqlite3_free(zMsg2); +} + +/* +** The "step" function for percentile(Y,P) is called once for each +** input row. +*/ +static void percentStep(sqlite3_context *pCtx, int argc, sqlite3_value **argv){ + Percentile *p; + double rPct; + int eType; + double y; + assert( argc==2 || argc==1 ); + + if( argc==1 ){ + /* Requirement 13: median(Y) is the same as percentile(Y,50). */ + rPct = 0.5; + }else{ + /* P must be a number between 0 and 100 for percentile() or between + ** 0.0 and 1.0 for percentile_cont() and percentile_disc(). + ** + ** The user-data is an integer which is 10 times the upper bound. + */ + double mxFrac = (SQLITE_PTR_TO_INT(sqlite3_user_data(pCtx))&2)? 100.0 : 1.0; + eType = sqlite3_value_numeric_type(argv[1]); + rPct = sqlite3_value_double(argv[1])/mxFrac; + if( (eType!=SQLITE_INTEGER && eType!=SQLITE_FLOAT) + || rPct<0.0 || rPct>1.0 + ){ + percentError(pCtx, "the fraction argument to %%s()" + " is not between 0.0 and %.1f", + (double)mxFrac); + return; + } + } + + /* Allocate the session context. */ + p = (Percentile*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p==0 ) return; + + /* Remember the P value. Throw an error if the P value is different + ** from any prior row, per Requirement (2). */ + if( !p->bPctValid ){ + p->rPct = rPct; + p->bPctValid = 1; + }else if( !percentSameValue(p->rPct,rPct) ){ + percentError(pCtx, "the fraction argument to %%s()" + " is not the same for all input rows"); + return; + } + + /* Ignore rows for which Y is NULL */ + eType = sqlite3_value_type(argv[0]); + if( eType==SQLITE_NULL ) return; + + /* If not NULL, then Y must be numeric. Otherwise throw an error. + ** Requirement 4 */ + if( eType!=SQLITE_INTEGER && eType!=SQLITE_FLOAT ){ + percentError(pCtx, "input to %%s() is not numeric"); + return; + } + + /* Throw an error if the Y value is infinity or NaN */ + y = sqlite3_value_double(argv[0]); + if( percentIsInfinity(y) ){ + percentError(pCtx, "Inf input to %%s()"); + return; + } + + /* Allocate and store the Y */ + if( p->nUsed>=p->nAlloc ){ + u64 n = p->nAlloc*2 + 250; + double *a = sqlite3_realloc64(p->a, sizeof(double)*n); + if( a==0 ){ + sqlite3_free(p->a); + memset(p, 0, sizeof(*p)); + sqlite3_result_error_nomem(pCtx); + return; + } + p->nAlloc = n; + p->a = a; + } + if( p->nUsed==0 ){ + p->a[p->nUsed++] = y; + p->bSorted = 1; + }else if( !p->bSorted || y>=p->a[p->nUsed-1] ){ + p->a[p->nUsed++] = y; + }else if( p->bKeepSorted ){ + i64 i; + i = percentBinarySearch(p, y, 0); + if( i<(int)p->nUsed ){ + memmove(&p->a[i+1], &p->a[i], (p->nUsed-i)*sizeof(p->a[0])); + } + p->a[i] = y; + p->nUsed++; + }else{ + p->a[p->nUsed++] = y; + p->bSorted = 0; + } +} + +/* +** Interchange two doubles. +*/ +#define SWAP_DOUBLE(X,Y) {double ttt=(X);(X)=(Y);(Y)=ttt;} + +/* +** Sort an array of doubles. +** +** Algorithm: quicksort +** +** This is implemented separately rather than using the qsort() routine +** from the standard library because: +** +** (1) To avoid a dependency on qsort() +** (2) To avoid the function call to the comparison routine for each +** comparison. +*/ +static void percentSort(double *a, unsigned int n){ + int iLt; /* Entries before a[iLt] are less than rPivot */ + int iGt; /* Entries at or after a[iGt] are greater than rPivot */ + int i; /* Loop counter */ + double rPivot; /* The pivot value */ + + assert( n>=2 ); + if( a[0]>a[n-1] ){ + SWAP_DOUBLE(a[0],a[n-1]) + } + if( n==2 ) return; + iGt = n-1; + i = n/2; + if( a[0]>a[i] ){ + SWAP_DOUBLE(a[0],a[i]) + }else if( a[i]>a[iGt] ){ + SWAP_DOUBLE(a[i],a[iGt]) + } + if( n==3 ) return; + rPivot = a[i]; + iLt = i = 1; + do{ + if( a[i]iLt ) SWAP_DOUBLE(a[i],a[iLt]) + iLt++; + i++; + }else if( a[i]>rPivot ){ + do{ + iGt--; + }while( iGt>i && a[iGt]>rPivot ); + SWAP_DOUBLE(a[i],a[iGt]) + }else{ + i++; + } + }while( i=2 ) percentSort(a, iLt); + if( n-iGt>=2 ) percentSort(a+iGt, n-iGt); + +/* Uncomment for testing */ +#if 0 + for(i=0; ibSorted==0 ){ + assert( p->nUsed>1 ); + percentSort(p->a, p->nUsed); + p->bSorted = 1; + } + p->bKeepSorted = 1; + + /* Find and remove the row */ + i = percentBinarySearch(p, y, 1); + if( i>=0 ){ + p->nUsed--; + if( i<(int)p->nUsed ){ + memmove(&p->a[i], &p->a[i+1], (p->nUsed - i)*sizeof(p->a[0])); + } + } +} + +/* +** Compute the final output of percentile(). Clean up all allocated +** memory if and only if bIsFinal is true. +*/ +static void percentCompute(sqlite3_context *pCtx, int bIsFinal){ + Percentile *p; + int settings = SQLITE_PTR_TO_INT(sqlite3_user_data(pCtx))&1; /* Discrete? */ + unsigned i1, i2; + double v1, v2; + double ix, vx; + p = (Percentile*)sqlite3_aggregate_context(pCtx, 0); + if( p==0 ) return; + if( p->a==0 ) return; + if( p->nUsed ){ + if( p->bSorted==0 ){ + assert( p->nUsed>1 ); + percentSort(p->a, p->nUsed); + p->bSorted = 1; + } + ix = p->rPct*(p->nUsed-1); + i1 = (unsigned)ix; + if( settings & 1 ){ + vx = p->a[i1]; + }else{ + i2 = ix==(double)i1 || i1==p->nUsed-1 ? i1 : i1+1; + v1 = p->a[i1]; + v2 = p->a[i2]; + vx = v1 + (v2-v1)*(ix-i1); + } + sqlite3_result_double(pCtx, vx); + } + if( bIsFinal ){ + sqlite3_free(p->a); + memset(p, 0, sizeof(*p)); + }else{ + p->bKeepSorted = 1; + } +} +static void percentFinal(sqlite3_context *pCtx){ + percentCompute(pCtx, 1); +} +static void percentValue(sqlite3_context *pCtx){ + percentCompute(pCtx, 0); +} +/****** End of percentile family of functions ******/ +#endif /* SQLITE_ENABLE_PERCENTILE */ + +#if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_FILESTAT) +/* +** Implementation of sqlite_filestat(SCHEMA). +** +** Return JSON text that describes low-level debug/diagnostic information +** about the sqlite3_file object associated with SCHEMA. +*/ +static void filestatFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + sqlite3 *db = sqlite3_context_db_handle(context); + const char *zDbName; + sqlite3_str *pStr; + Btree *pBtree; + + zDbName = (const char*)sqlite3_value_text(argv[0]); + pBtree = sqlite3DbNameToBtree(db, zDbName); + if( pBtree ){ + Pager *pPager; + sqlite3_file *fd; + int rc; + sqlite3BtreeEnter(pBtree); + pPager = sqlite3BtreePager(pBtree); + assert( pPager!=0 ); + fd = sqlite3PagerFile(pPager); + pStr = sqlite3_str_new(db); + if( pStr==0 ){ + sqlite3_result_error_nomem(context); + }else{ + sqlite3_str_append(pStr, "{\"db\":", 6); + rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_FILESTAT, pStr); + if( rc ) sqlite3_str_append(pStr, "null", 4); + fd = sqlite3PagerJrnlFile(pPager); + if( fd && fd->pMethods!=0 ){ + sqlite3_str_appendall(pStr, ",\"journal\":"); + rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_FILESTAT, pStr); + if( rc ) sqlite3_str_append(pStr, "null", 4); + } + sqlite3_str_append(pStr, "}", 1); + sqlite3_result_text(context, sqlite3_str_finish(pStr), -1, + sqlite3_free); + } + sqlite3BtreeLeave(pBtree); + }else{ + sqlite3_result_text(context, "{}", 2, SQLITE_STATIC); + } +} +#endif /* SQLITE_DEBUG || SQLITE_ENABLE_FILESTAT */ + +#ifdef SQLITE_DEBUG +/* +** Implementation of fpdecode(x,y,z) function. +** +** x is a real number that is to be decoded. y is the precision. +** z is the maximum real precision. Return a string that shows the +** results of the sqlite3FpDecode() function. +** +** Used for testing and debugging only, specifically testing and debugging +** of the sqlite3FpDecode() function. This SQL function does not appear +** in production builds. This function is not an API and is subject to +** modification or removal in future versions of SQLite. +*/ +static void fpdecodeFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + FpDecode s; + double x; + int y, z; + char zBuf[100]; + UNUSED_PARAMETER(argc); + assert( argc==3 ); + x = sqlite3_value_double(argv[0]); + y = sqlite3_value_int(argv[1]); + z = sqlite3_value_int(argv[2]); + if( z<=0 ) z = 1; + sqlite3FpDecode(&s, x, y, z); + if( s.isSpecial==2 ){ + sqlite3_snprintf(sizeof(zBuf), zBuf, "NaN"); + }else{ + sqlite3_snprintf(sizeof(zBuf), zBuf, "%c%.*s/%d", s.sign, s.n, s.z, s.iDP); + } + sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT); +} +#endif /* SQLITE_DEBUG */ + +#ifdef SQLITE_DEBUG +/* +** Implementation of parseuri(uri,flags) function. +** +** Required Arguments: +** "uri" The URI to parse. +** "flags" Bitmask of flags, as if to sqlite3_open_v2(). +** +** Additional arguments beyond the first two make calls to +** sqlite3_uri_key() for integers and sqlite3_uri_parameter for +** anything else. +** +** The result is a string showing the results of calling sqlite3ParseUri(). +** +** Used for testing and debugging only, specifically testing and debugging +** of the sqlite3ParseUri() function. This SQL function does not appear +** in production builds. This function is not an API and is subject to +** modification or removal in future versions of SQLite. +*/ +static void parseuriFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + sqlite3_str *pResult; + const char *zVfs; + const char *zUri; + unsigned int flgs; + int rc; + sqlite3_vfs *pVfs = 0; + char *zFile = 0; + char *zErr = 0; + + if( argc<2 ) return; + pVfs = sqlite3_vfs_find(0); + assert( pVfs ); + zVfs = pVfs->zName; + zUri = (const char*)sqlite3_value_text(argv[0]); + if( zUri==0 ) return; + flgs = (unsigned int)sqlite3_value_int(argv[1]); + rc = sqlite3ParseUri(zVfs, zUri, &flgs, &pVfs, &zFile, &zErr); + pResult = sqlite3_str_new(0); + if( pResult ){ + int i; + sqlite3_str_appendf(pResult, "rc=%d", rc); + sqlite3_str_appendf(pResult, ", flags=0x%x", flgs); + sqlite3_str_appendf(pResult, ", vfs=%Q", pVfs ? pVfs->zName: 0); + sqlite3_str_appendf(pResult, ", err=%Q", zErr); + sqlite3_str_appendf(pResult, ", file=%Q", zFile); + if( zFile ){ + const char *z = zFile; + z += sqlite3Strlen30(z)+1; + while( z[0] ){ + sqlite3_str_appendf(pResult, ", %Q", z); + z += sqlite3Strlen30(z)+1; + } + for(i=2; iu.pHash){ + int n = sqlite3Strlen30(p->zName); + int h = p->zName[0] + n; + assert( p->funcFlags & SQLITE_FUNC_BUILTIN ); + printf(" %s(%d)", p->zName, h); + } + printf("\n"); + } + } +#endif +} + +/************** End of func.c ************************************************/ +/************** Begin file fkey.c ********************************************/ +/* +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code used by the compiler to add foreign key +** support to compiled SQL statements. +*/ +/* #include "sqliteInt.h" */ + +#ifndef SQLITE_OMIT_FOREIGN_KEY +#ifndef SQLITE_OMIT_TRIGGER + +/* +** Deferred and Immediate FKs +** -------------------------- +** +** Foreign keys in SQLite come in two flavours: deferred and immediate. +** If an immediate foreign key constraint is violated, +** SQLITE_CONSTRAINT_FOREIGNKEY is returned and the current +** statement transaction rolled back. If a +** deferred foreign key constraint is violated, no action is taken +** immediately. However if the application attempts to commit the +** transaction before fixing the constraint violation, the attempt fails. +** +** Deferred constraints are implemented using a simple counter associated +** with the database handle. The counter is set to zero each time a +** database transaction is opened. Each time a statement is executed +** that causes a foreign key violation, the counter is incremented. Each +** time a statement is executed that removes an existing violation from +** the database, the counter is decremented. When the transaction is +** committed, the commit fails if the current value of the counter is +** greater than zero. This scheme has two big drawbacks: +** +** * When a commit fails due to a deferred foreign key constraint, +** there is no way to tell which foreign constraint is not satisfied, +** or which row it is not satisfied for. +** +** * If the database contains foreign key violations when the +** transaction is opened, this may cause the mechanism to malfunction. +** +** Despite these problems, this approach is adopted as it seems simpler +** than the alternatives. +** +** INSERT operations: +** +** I.1) For each FK for which the table is the child table, search +** the parent table for a match. If none is found increment the +** constraint counter. +** +** I.2) For each FK for which the table is the parent table, +** search the child table for rows that correspond to the new +** row in the parent table. Decrement the counter for each row +** found (as the constraint is now satisfied). +** +** DELETE operations: +** +** D.1) For each FK for which the table is the child table, +** search the parent table for a row that corresponds to the +** deleted row in the child table. If such a row is not found, +** decrement the counter. +** +** D.2) For each FK for which the table is the parent table, search +** the child table for rows that correspond to the deleted row +** in the parent table. For each found increment the counter. +** +** UPDATE operations: +** +** An UPDATE command requires that all 4 steps above are taken, but only +** for FK constraints for which the affected columns are actually +** modified (values must be compared at runtime). +** +** Note that I.1 and D.1 are very similar operations, as are I.2 and D.2. +** This simplifies the implementation a bit. +** +** For the purposes of immediate FK constraints, the OR REPLACE conflict +** resolution is considered to delete rows before the new row is inserted. +** If a delete caused by OR REPLACE violates an FK constraint, an exception +** is thrown, even if the FK constraint would be satisfied after the new +** row is inserted. +** +** Immediate constraints are usually handled similarly. The only difference +** is that the counter used is stored as part of each individual statement +** object (struct Vdbe). If, after the statement has run, its immediate +** constraint counter is greater than zero, +** it returns SQLITE_CONSTRAINT_FOREIGNKEY +** and the statement transaction is rolled back. An exception is an INSERT +** statement that inserts a single row only (no triggers). In this case, +** instead of using a counter, an exception is thrown immediately if the +** INSERT violates a foreign key constraint. This is necessary as such +** an INSERT does not open a statement transaction. +** +** TODO: How should dropping a table be handled? How should renaming a +** table be handled? +** +** +** Query API Notes +** --------------- +** +** Before coding an UPDATE or DELETE row operation, the code-generator +** for those two operations needs to know whether or not the operation +** requires any FK processing and, if so, which columns of the original +** row are required by the FK processing VDBE code (i.e. if FKs were +** implemented using triggers, which of the old.* columns would be +** accessed). No information is required by the code-generator before +** coding an INSERT operation. The functions used by the UPDATE/DELETE +** generation code to query for this information are: +** +** sqlite3FkRequired() - Test to see if FK processing is required. +** sqlite3FkOldmask() - Query for the set of required old.* columns. +** +** +** Externally accessible module functions +** -------------------------------------- +** +** sqlite3FkCheck() - Check for foreign key violations. +** sqlite3FkActions() - Code triggers for ON UPDATE/ON DELETE actions. +** sqlite3FkDelete() - Delete an FKey structure. +*/ + +/* +** VDBE Calling Convention +** ----------------------- +** +** Example: +** +** For the following INSERT statement: +** +** CREATE TABLE t1(a, b INTEGER PRIMARY KEY, c); +** INSERT INTO t1 VALUES(1, 2, 3.1); +** +** Register (x): 2 (type integer) +** Register (x+1): 1 (type integer) +** Register (x+2): NULL (type NULL) +** Register (x+3): 3.1 (type real) +*/ + +/* +** A foreign key constraint requires that the key columns in the parent +** table are collectively subject to a UNIQUE or PRIMARY KEY constraint. +** Given that pParent is the parent table for foreign key constraint pFKey, +** search the schema for a unique index on the parent key columns. +** +** If successful, zero is returned. If the parent key is an INTEGER PRIMARY +** KEY column, then output variable *ppIdx is set to NULL. Otherwise, *ppIdx +** is set to point to the unique index. +** +** If the parent key consists of a single column (the foreign key constraint +** is not a composite foreign key), output variable *paiCol is set to NULL. +** Otherwise, it is set to point to an allocated array of size N, where +** N is the number of columns in the parent key. The first element of the +** array is the index of the child table column that is mapped by the FK +** constraint to the parent table column stored in the left-most column +** of index *ppIdx. The second element of the array is the index of the +** child table column that corresponds to the second left-most column of +** *ppIdx, and so on. +** +** If the required index cannot be found, either because: +** +** 1) The named parent key columns do not exist, or +** +** 2) The named parent key columns do exist, but are not subject to a +** UNIQUE or PRIMARY KEY constraint, or +** +** 3) No parent key columns were provided explicitly as part of the +** foreign key definition, and the parent table does not have a +** PRIMARY KEY, or +** +** 4) No parent key columns were provided explicitly as part of the +** foreign key definition, and the PRIMARY KEY of the parent table +** consists of a different number of columns to the child key in +** the child table. +** +** then non-zero is returned, and a "foreign key mismatch" error loaded +** into pParse. If an OOM error occurs, non-zero is returned and the +** pParse->db->mallocFailed flag is set. +*/ +SQLITE_PRIVATE int sqlite3FkLocateIndex( + Parse *pParse, /* Parse context to store any error in */ + Table *pParent, /* Parent table of FK constraint pFKey */ + FKey *pFKey, /* Foreign key to find index for */ + Index **ppIdx, /* OUT: Unique index on parent table */ + int **paiCol /* OUT: Map of index columns in pFKey */ +){ + Index *pIdx = 0; /* Value to return via *ppIdx */ + int *aiCol = 0; /* Value to return via *paiCol */ + int nCol = pFKey->nCol; /* Number of columns in parent key */ + char *zKey = pFKey->aCol[0].zCol; /* Name of left-most parent key column */ + + /* The caller is responsible for zeroing output parameters. */ + assert( ppIdx && *ppIdx==0 ); + assert( !paiCol || *paiCol==0 ); + assert( pParse ); + + /* If this is a non-composite (single column) foreign key, check if it + ** maps to the INTEGER PRIMARY KEY of table pParent. If so, leave *ppIdx + ** and *paiCol set to zero and return early. + ** + ** Otherwise, for a composite foreign key (more than one column), allocate + ** space for the aiCol array (returned via output parameter *paiCol). + ** Non-composite foreign keys do not require the aiCol array. + */ + if( nCol==1 ){ + /* The FK maps to the IPK if any of the following are true: + ** + ** 1) There is an INTEGER PRIMARY KEY column and the FK is implicitly + ** mapped to the primary key of table pParent, or + ** 2) The FK is explicitly mapped to a column declared as INTEGER + ** PRIMARY KEY. + */ + if( pParent->iPKey>=0 ){ + if( !zKey ) return 0; + if( !sqlite3StrICmp(pParent->aCol[pParent->iPKey].zCnName, zKey) ){ + return 0; + } + } + }else if( paiCol ){ + assert( nCol>1 ); + aiCol = (int *)sqlite3DbMallocRawNN(pParse->db, nCol*sizeof(int)); + if( !aiCol ) return 1; + *paiCol = aiCol; + } + + for(pIdx=pParent->pIndex; pIdx; pIdx=pIdx->pNext){ + if( pIdx->nKeyCol==nCol && IsUniqueIndex(pIdx) && pIdx->pPartIdxWhere==0 ){ + /* pIdx is a UNIQUE index (or a PRIMARY KEY) and has the right number + ** of columns. If each indexed column corresponds to a foreign key + ** column of pFKey, then this index is a winner. */ + + if( zKey==0 ){ + /* If zKey is NULL, then this foreign key is implicitly mapped to + ** the PRIMARY KEY of table pParent. The PRIMARY KEY index may be + ** identified by the test. */ + if( IsPrimaryKeyIndex(pIdx) ){ + if( aiCol ){ + int i; + for(i=0; iaCol[i].iFrom; + } + break; + } + }else{ + /* If zKey is non-NULL, then this foreign key was declared to + ** map to an explicit list of columns in table pParent. Check if this + ** index matches those columns. Also, check that the index uses + ** the default collation sequences for each column. */ + int i, j; + for(i=0; iaiColumn[i]; /* Index of column in parent tbl */ + const char *zDfltColl; /* Def. collation for column */ + char *zIdxCol; /* Name of indexed column */ + + if( iCol<0 ) break; /* No foreign keys against expression indexes */ + + /* If the index uses a collation sequence that is different from + ** the default collation sequence for the column, this index is + ** unusable. Bail out early in this case. */ + zDfltColl = sqlite3ColumnColl(&pParent->aCol[iCol]); + if( !zDfltColl ) zDfltColl = sqlite3StrBINARY; + if( sqlite3StrICmp(pIdx->azColl[i], zDfltColl) ) break; + + zIdxCol = pParent->aCol[iCol].zCnName; + for(j=0; jaCol[j].zCol, zIdxCol)==0 ){ + if( aiCol ) aiCol[i] = pFKey->aCol[j].iFrom; + break; + } + } + if( j==nCol ) break; + } + if( i==nCol ) break; /* pIdx is usable */ + } + } + } + + if( !pIdx ){ + if( !pParse->disableTriggers ){ + sqlite3ErrorMsg(pParse, + "foreign key mismatch - \"%w\" referencing \"%w\"", + pFKey->pFrom->zName, pFKey->zTo); + } + sqlite3DbFree(pParse->db, aiCol); + return 1; + } + + *ppIdx = pIdx; + return 0; +} + +/* +** This function is called when a row is inserted into or deleted from the +** child table of foreign key constraint pFKey. If an SQL UPDATE is executed +** on the child table of pFKey, this function is invoked twice for each row +** affected - once to "delete" the old row, and then again to "insert" the +** new row. +** +** Each time it is called, this function generates VDBE code to locate the +** row in the parent table that corresponds to the row being inserted into +** or deleted from the child table. If the parent row can be found, no +** special action is taken. Otherwise, if the parent row can *not* be +** found in the parent table: +** +** Operation | FK type | Action taken +** -------------------------------------------------------------------------- +** INSERT immediate Increment the "immediate constraint counter". +** +** DELETE immediate Decrement the "immediate constraint counter". +** +** INSERT deferred Increment the "deferred constraint counter". +** +** DELETE deferred Decrement the "deferred constraint counter". +** +** These operations are identified in the comment at the top of this file +** (fkey.c) as "I.1" and "D.1". +*/ +static void fkLookupParent( + Parse *pParse, /* Parse context */ + int iDb, /* Index of database housing pTab */ + Table *pTab, /* Parent table of FK pFKey */ + Index *pIdx, /* Unique index on parent key columns in pTab */ + FKey *pFKey, /* Foreign key constraint */ + int *aiCol, /* Map from parent key columns to child table columns */ + int regData, /* Address of array containing child table row */ + int nIncr, /* Increment constraint counter by this */ + int isIgnore /* If true, pretend pTab contains all NULL values */ +){ + int i; /* Iterator variable */ + Vdbe *v = sqlite3GetVdbe(pParse); /* Vdbe to add code to */ + int iCur = pParse->nTab - 1; /* Cursor number to use */ + int iOk = sqlite3VdbeMakeLabel(pParse); /* jump here if parent key found */ + + sqlite3VdbeVerifyAbortable(v, + (!pFKey->isDeferred + && !(pParse->db->flags & SQLITE_DeferFKs) + && !pParse->pToplevel + && !pParse->isMultiWrite) ? OE_Abort : OE_Ignore); + + /* If nIncr is less than zero, then check at runtime if there are any + ** outstanding constraints to resolve. If there are not, there is no need + ** to check if deleting this row resolves any outstanding violations. + ** + ** Check if any of the key columns in the child table row are NULL. If + ** any are, then the constraint is considered satisfied. No need to + ** search for a matching row in the parent table. */ + if( nIncr<0 ){ + sqlite3VdbeAddOp2(v, OP_FkIfZero, pFKey->isDeferred, iOk); + VdbeCoverage(v); + } + for(i=0; inCol; i++){ + int iReg = sqlite3TableColumnToStorage(pFKey->pFrom,aiCol[i]) + regData + 1; + sqlite3VdbeAddOp2(v, OP_IsNull, iReg, iOk); VdbeCoverage(v); + } + + if( isIgnore==0 ){ + if( pIdx==0 ){ + /* If pIdx is NULL, then the parent key is the INTEGER PRIMARY KEY + ** column of the parent table (table pTab). */ + int iMustBeInt; /* Address of MustBeInt instruction */ + int regTemp = sqlite3GetTempReg(pParse); + + /* Invoke MustBeInt to coerce the child key value to an integer (i.e. + ** apply the affinity of the parent key). If this fails, then there + ** is no matching parent key. Before using MustBeInt, make a copy of + ** the value. Otherwise, the value inserted into the child key column + ** will have INTEGER affinity applied to it, which may not be correct. */ + sqlite3VdbeAddOp2(v, OP_SCopy, + sqlite3TableColumnToStorage(pFKey->pFrom,aiCol[0])+1+regData, regTemp); + iMustBeInt = sqlite3VdbeAddOp2(v, OP_MustBeInt, regTemp, 0); + VdbeCoverage(v); + + /* If the parent table is the same as the child table, and we are about + ** to increment the constraint-counter (i.e. this is an INSERT operation), + ** then check if the row being inserted matches itself. If so, do not + ** increment the constraint-counter. */ + if( pTab==pFKey->pFrom && nIncr==1 ){ + sqlite3VdbeAddOp3(v, OP_Eq, regData, iOk, regTemp); VdbeCoverage(v); + sqlite3VdbeChangeP5(v, SQLITE_NOTNULL); + } + + sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenRead); + sqlite3VdbeAddOp3(v, OP_NotExists, iCur, 0, regTemp); VdbeCoverage(v); + sqlite3VdbeGoto(v, iOk); + sqlite3VdbeJumpHere(v, sqlite3VdbeCurrentAddr(v)-2); + sqlite3VdbeJumpHere(v, iMustBeInt); + sqlite3ReleaseTempReg(pParse, regTemp); + }else{ + int nCol = pFKey->nCol; + int regTemp = sqlite3GetTempRange(pParse, nCol); + + sqlite3VdbeAddOp3(v, OP_OpenRead, iCur, pIdx->tnum, iDb); + sqlite3VdbeSetP4KeyInfo(pParse, pIdx); + for(i=0; ipFrom, aiCol[i])+1+regData, + regTemp+i); + } + + /* If the parent table is the same as the child table, and we are about + ** to increment the constraint-counter (i.e. this is an INSERT operation), + ** then check if the row being inserted matches itself. If so, do not + ** increment the constraint-counter. + ** + ** If any of the parent-key values are NULL, then the row cannot match + ** itself. So set JUMPIFNULL to make sure we do the OP_Found if any + ** of the parent-key values are NULL (at this point it is known that + ** none of the child key values are). + */ + if( pTab==pFKey->pFrom && nIncr==1 ){ + int iJump = sqlite3VdbeCurrentAddr(v) + nCol + 1; + for(i=0; ipFrom,aiCol[i]) + +1+regData; + int iParent = 1+regData; + iParent += sqlite3TableColumnToStorage(pIdx->pTable, + pIdx->aiColumn[i]); + assert( pIdx->aiColumn[i]>=0 ); + assert( aiCol[i]!=pTab->iPKey ); + if( pIdx->aiColumn[i]==pTab->iPKey ){ + /* The parent key is a composite key that includes the IPK column */ + iParent = regData; + } + sqlite3VdbeAddOp3(v, OP_Ne, iChild, iJump, iParent); VdbeCoverage(v); + sqlite3VdbeChangeP5(v, SQLITE_JUMPIFNULL); + } + sqlite3VdbeGoto(v, iOk); + } + + sqlite3VdbeAddOp4(v, OP_Affinity, regTemp, nCol, 0, + sqlite3IndexAffinityStr(pParse->db,pIdx), nCol); + sqlite3VdbeAddOp4Int(v, OP_Found, iCur, iOk, regTemp, nCol); + VdbeCoverage(v); + sqlite3ReleaseTempRange(pParse, regTemp, nCol); + } + } + + if( !pFKey->isDeferred && !(pParse->db->flags & SQLITE_DeferFKs) + && !pParse->pToplevel + && !pParse->isMultiWrite + ){ + /* Special case: If this is an INSERT statement that will insert exactly + ** one row into the table, raise a constraint immediately instead of + ** incrementing a counter. This is necessary as the VM code is being + ** generated for will not open a statement transaction. */ + assert( nIncr==1 ); + sqlite3HaltConstraint(pParse, SQLITE_CONSTRAINT_FOREIGNKEY, + OE_Abort, 0, P4_STATIC, P5_ConstraintFK); + }else{ + if( nIncr>0 && pFKey->isDeferred==0 ){ + sqlite3MayAbort(pParse); + } + sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr); + } + + sqlite3VdbeResolveLabel(v, iOk); + sqlite3VdbeAddOp1(v, OP_Close, iCur); +} + + +/* +** Return an Expr object that refers to a memory register corresponding +** to column iCol of table pTab. +** +** regBase is the first of an array of register that contains the data +** for pTab. regBase itself holds the rowid. regBase+1 holds the first +** column. regBase+2 holds the second column, and so forth. +*/ +static Expr *exprTableRegister( + Parse *pParse, /* Parsing and code generating context */ + Table *pTab, /* The table whose content is at r[regBase]... */ + int regBase, /* Contents of table pTab */ + i16 iCol /* Which column of pTab is desired */ +){ + Expr *pExpr; + Column *pCol; + const char *zColl; + sqlite3 *db = pParse->db; + + pExpr = sqlite3Expr(db, TK_REGISTER, 0); + if( pExpr ){ + if( iCol>=0 && iCol!=pTab->iPKey ){ + pCol = &pTab->aCol[iCol]; + pExpr->iTable = regBase + sqlite3TableColumnToStorage(pTab,iCol) + 1; + pExpr->affExpr = pCol->affinity; + zColl = sqlite3ColumnColl(pCol); + if( zColl==0 ) zColl = db->pDfltColl->zName; + pExpr = sqlite3ExprAddCollateString(pParse, pExpr, zColl); + }else{ + pExpr->iTable = regBase; + pExpr->affExpr = SQLITE_AFF_INTEGER; + } + } + return pExpr; +} + +/* +** Return an Expr object that refers to column iCol of table pTab which +** has cursor iCur. +*/ +static Expr *exprTableColumn( + sqlite3 *db, /* The database connection */ + Table *pTab, /* The table whose column is desired */ + int iCursor, /* The open cursor on the table */ + i16 iCol /* The column that is wanted */ +){ + Expr *pExpr = sqlite3Expr(db, TK_COLUMN, 0); + if( pExpr ){ + assert( ExprUseYTab(pExpr) ); + pExpr->y.pTab = pTab; + pExpr->iTable = iCursor; + pExpr->iColumn = iCol; + } + return pExpr; +} + +/* +** This function is called to generate code executed when a row is deleted +** from the parent table of foreign key constraint pFKey and, if pFKey is +** deferred, when a row is inserted into the same table. When generating +** code for an SQL UPDATE operation, this function may be called twice - +** once to "delete" the old row and once to "insert" the new row. +** +** Parameter nIncr is passed -1 when inserting a row (as this may decrease +** the number of FK violations in the db) or +1 when deleting one (as this +** may increase the number of FK constraint problems). +** +** The code generated by this function scans through the rows in the child +** table that correspond to the parent table row being deleted or inserted. +** For each child row found, one of the following actions is taken: +** +** Operation | FK type | Action taken +** -------------------------------------------------------------------------- +** DELETE immediate Increment the "immediate constraint counter". +** +** INSERT immediate Decrement the "immediate constraint counter". +** +** DELETE deferred Increment the "deferred constraint counter". +** +** INSERT deferred Decrement the "deferred constraint counter". +** +** These operations are identified in the comment at the top of this file +** (fkey.c) as "I.2" and "D.2". +*/ +static void fkScanChildren( + Parse *pParse, /* Parse context */ + SrcList *pSrc, /* The child table to be scanned */ + Table *pTab, /* The parent table */ + Index *pIdx, /* Index on parent covering the foreign key */ + FKey *pFKey, /* The foreign key linking pSrc to pTab */ + int *aiCol, /* Map from pIdx cols to child table cols */ + int regData, /* Parent row data starts here */ + int nIncr /* Amount to increment deferred counter by */ +){ + sqlite3 *db = pParse->db; /* Database handle */ + int i; /* Iterator variable */ + Expr *pWhere = 0; /* WHERE clause to scan with */ + NameContext sNameContext; /* Context used to resolve WHERE clause */ + WhereInfo *pWInfo; /* Context used by sqlite3WhereXXX() */ + int iFkIfZero = 0; /* Address of OP_FkIfZero */ + Vdbe *v = sqlite3GetVdbe(pParse); + + assert( pIdx==0 || pIdx->pTable==pTab ); + assert( pIdx==0 || pIdx->nKeyCol==pFKey->nCol ); + assert( pIdx!=0 || pFKey->nCol==1 ); + assert( pIdx!=0 || HasRowid(pTab) ); + + if( nIncr<0 ){ + iFkIfZero = sqlite3VdbeAddOp2(v, OP_FkIfZero, pFKey->isDeferred, 0); + VdbeCoverage(v); + } + + /* Create an Expr object representing an SQL expression like: + ** + ** = AND = ... + ** + ** The collation sequence used for the comparison should be that of + ** the parent key columns. The affinity of the parent key column should + ** be applied to each child key value before the comparison takes place. + */ + for(i=0; inCol; i++){ + Expr *pLeft; /* Value from parent table row */ + Expr *pRight; /* Column ref to child table */ + Expr *pEq; /* Expression (pLeft = pRight) */ + i16 iCol; /* Index of column in child table */ + const char *zCol; /* Name of column in child table */ + + iCol = pIdx ? pIdx->aiColumn[i] : -1; + pLeft = exprTableRegister(pParse, pTab, regData, iCol); + iCol = aiCol ? aiCol[i] : pFKey->aCol[0].iFrom; + assert( iCol>=0 ); + zCol = pFKey->pFrom->aCol[iCol].zCnName; + pRight = sqlite3Expr(db, TK_ID, zCol); + pEq = sqlite3PExpr(pParse, TK_EQ, pLeft, pRight); + pWhere = sqlite3ExprAnd(pParse, pWhere, pEq); + } + + /* If the child table is the same as the parent table, then add terms + ** to the WHERE clause that prevent this entry from being scanned. + ** The added WHERE clause terms are like this: + ** + ** $current_rowid!=rowid + ** NOT( $current_a==a AND $current_b==b AND ... ) + ** + ** The first form is used for rowid tables. The second form is used + ** for WITHOUT ROWID tables. In the second form, the *parent* key is + ** (a,b,...). Either the parent or primary key could be used to + ** uniquely identify the current row, but the parent key is more convenient + ** as the required values have already been loaded into registers + ** by the caller. + */ + if( pTab==pFKey->pFrom && nIncr>0 ){ + Expr *pNe; /* Expression (pLeft != pRight) */ + Expr *pLeft; /* Value from parent table row */ + Expr *pRight; /* Column ref to child table */ + if( HasRowid(pTab) ){ + pLeft = exprTableRegister(pParse, pTab, regData, -1); + pRight = exprTableColumn(db, pTab, pSrc->a[0].iCursor, -1); + pNe = sqlite3PExpr(pParse, TK_NE, pLeft, pRight); + }else{ + Expr *pEq, *pAll = 0; + assert( pIdx!=0 ); + for(i=0; inKeyCol; i++){ + i16 iCol = pIdx->aiColumn[i]; + assert( iCol>=0 ); + pLeft = exprTableRegister(pParse, pTab, regData, iCol); + pRight = sqlite3Expr(db, TK_ID, pTab->aCol[iCol].zCnName); + pEq = sqlite3PExpr(pParse, TK_IS, pLeft, pRight); + pAll = sqlite3ExprAnd(pParse, pAll, pEq); + } + pNe = sqlite3PExpr(pParse, TK_NOT, pAll, 0); + } + pWhere = sqlite3ExprAnd(pParse, pWhere, pNe); + } + + /* Resolve the references in the WHERE clause. */ + memset(&sNameContext, 0, sizeof(NameContext)); + sNameContext.pSrcList = pSrc; + sNameContext.pParse = pParse; + sqlite3ResolveExprNames(&sNameContext, pWhere); + + /* Create VDBE to loop through the entries in pSrc that match the WHERE + ** clause. For each row found, increment either the deferred or immediate + ** foreign key constraint counter. */ + if( pParse->nErr==0 ){ + pWInfo = sqlite3WhereBegin(pParse, pSrc, pWhere, 0, 0, 0, 0, 0); + sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr); + if( pWInfo ){ + sqlite3WhereEnd(pWInfo); + } + } + + /* Clean up the WHERE clause constructed above. */ + sqlite3ExprDelete(db, pWhere); + if( iFkIfZero ){ + sqlite3VdbeJumpHereOrPopInst(v, iFkIfZero); + } +} + +/* +** This function returns a linked list of FKey objects (connected by +** FKey.pNextTo) holding all children of table pTab. For example, +** given the following schema: +** +** CREATE TABLE t1(a PRIMARY KEY); +** CREATE TABLE t2(b REFERENCES t1(a); +** +** Calling this function with table "t1" as an argument returns a pointer +** to the FKey structure representing the foreign key constraint on table +** "t2". Calling this function with "t2" as the argument would return a +** NULL pointer (as there are no FK constraints for which t2 is the parent +** table). +*/ +SQLITE_PRIVATE FKey *sqlite3FkReferences(Table *pTab){ + return (FKey *)sqlite3HashFind(&pTab->pSchema->fkeyHash, pTab->zName); +} + +/* +** The second argument is a Trigger structure allocated by the +** fkActionTrigger() routine. This function deletes the Trigger structure +** and all of its sub-components. +** +** The Trigger structure or any of its sub-components may be allocated from +** the lookaside buffer belonging to database handle dbMem. +*/ +static void fkTriggerDelete(sqlite3 *dbMem, Trigger *p){ + if( p ){ + TriggerStep *pStep = p->step_list; + sqlite3ExprDelete(dbMem, pStep->pWhere); + sqlite3ExprListDelete(dbMem, pStep->pExprList); + sqlite3SelectDelete(dbMem, pStep->pSelect); + sqlite3ExprDelete(dbMem, p->pWhen); + sqlite3DbFree(dbMem, p); + } +} + +/* +** Clear the apTrigger[] cache of CASCADE triggers for all foreign keys +** in a particular database. This needs to happen when the schema +** changes. +*/ +SQLITE_PRIVATE void sqlite3FkClearTriggerCache(sqlite3 *db, int iDb){ + HashElem *k; + Hash *pHash = &db->aDb[iDb].pSchema->tblHash; + for(k=sqliteHashFirst(pHash); k; k=sqliteHashNext(k)){ + Table *pTab = sqliteHashData(k); + FKey *pFKey; + if( !IsOrdinaryTable(pTab) ) continue; + for(pFKey=pTab->u.tab.pFKey; pFKey; pFKey=pFKey->pNextFrom){ + fkTriggerDelete(db, pFKey->apTrigger[0]); pFKey->apTrigger[0] = 0; + fkTriggerDelete(db, pFKey->apTrigger[1]); pFKey->apTrigger[1] = 0; + } + } +} + +/* +** This function is called to generate code that runs when table pTab is +** being dropped from the database. The SrcList passed as the second argument +** to this function contains a single entry guaranteed to resolve to +** table pTab. +** +** Normally, no code is required. However, if either +** +** (a) The table is the parent table of a FK constraint, or +** (b) The table is the child table of a deferred FK constraint and it is +** determined at runtime that there are outstanding deferred FK +** constraint violations in the database, +** +** then the equivalent of "DELETE FROM " is executed before dropping +** the table from the database. Triggers are disabled while running this +** DELETE, but foreign key actions are not. +*/ +SQLITE_PRIVATE void sqlite3FkDropTable(Parse *pParse, SrcList *pName, Table *pTab){ + sqlite3 *db = pParse->db; + if( (db->flags&SQLITE_ForeignKeys) && IsOrdinaryTable(pTab) ){ + int iSkip = 0; + Vdbe *v = sqlite3GetVdbe(pParse); + + assert( v ); /* VDBE has already been allocated */ + assert( IsOrdinaryTable(pTab) ); + if( sqlite3FkReferences(pTab)==0 ){ + /* Search for a deferred foreign key constraint for which this table + ** is the child table. If one cannot be found, return without + ** generating any VDBE code. If one can be found, then jump over + ** the entire DELETE if there are no outstanding deferred constraints + ** when this statement is run. */ + FKey *p; + for(p=pTab->u.tab.pFKey; p; p=p->pNextFrom){ + if( p->isDeferred || (db->flags & SQLITE_DeferFKs) ) break; + } + if( !p ) return; + iSkip = sqlite3VdbeMakeLabel(pParse); + sqlite3VdbeAddOp2(v, OP_FkIfZero, 1, iSkip); VdbeCoverage(v); + } + + pParse->disableTriggers = 1; + sqlite3DeleteFrom(pParse, sqlite3SrcListDup(db, pName, 0), 0, 0, 0); + pParse->disableTriggers = 0; + + /* If the DELETE has generated immediate foreign key constraint + ** violations, halt the VDBE and return an error at this point, before + ** any modifications to the schema are made. This is because statement + ** transactions are not able to rollback schema changes. + ** + ** If the SQLITE_DeferFKs flag is set, then this is not required, as + ** the statement transaction will not be rolled back even if FK + ** constraints are violated. + */ + if( (db->flags & SQLITE_DeferFKs)==0 ){ + sqlite3VdbeVerifyAbortable(v, OE_Abort); + sqlite3VdbeAddOp2(v, OP_FkIfZero, 0, sqlite3VdbeCurrentAddr(v)+2); + VdbeCoverage(v); + sqlite3HaltConstraint(pParse, SQLITE_CONSTRAINT_FOREIGNKEY, + OE_Abort, 0, P4_STATIC, P5_ConstraintFK); + } + + if( iSkip ){ + sqlite3VdbeResolveLabel(v, iSkip); + } + } +} + + +/* +** The second argument points to an FKey object representing a foreign key +** for which pTab is the child table. An UPDATE statement against pTab +** is currently being processed. For each column of the table that is +** actually updated, the corresponding element in the aChange[] array +** is zero or greater (if a column is unmodified the corresponding element +** is set to -1). If the rowid column is modified by the UPDATE statement +** the bChngRowid argument is non-zero. +** +** This function returns true if any of the columns that are part of the +** child key for FK constraint *p are modified. +*/ +static int fkChildIsModified( + Table *pTab, /* Table being updated */ + FKey *p, /* Foreign key for which pTab is the child */ + int *aChange, /* Array indicating modified columns */ + int bChngRowid /* True if rowid is modified by this update */ +){ + int i; + for(i=0; inCol; i++){ + int iChildKey = p->aCol[i].iFrom; + if( aChange[iChildKey]>=0 ) return 1; + if( iChildKey==pTab->iPKey && bChngRowid ) return 1; + } + return 0; +} + +/* +** The second argument points to an FKey object representing a foreign key +** for which pTab is the parent table. An UPDATE statement against pTab +** is currently being processed. For each column of the table that is +** actually updated, the corresponding element in the aChange[] array +** is zero or greater (if a column is unmodified the corresponding element +** is set to -1). If the rowid column is modified by the UPDATE statement +** the bChngRowid argument is non-zero. +** +** This function returns true if any of the columns that are part of the +** parent key for FK constraint *p are modified. +*/ +static int fkParentIsModified( + Table *pTab, + FKey *p, + int *aChange, + int bChngRowid +){ + int i; + for(i=0; inCol; i++){ + char *zKey = p->aCol[i].zCol; + int iKey; + for(iKey=0; iKeynCol; iKey++){ + if( aChange[iKey]>=0 || (iKey==pTab->iPKey && bChngRowid) ){ + Column *pCol = &pTab->aCol[iKey]; + if( zKey ){ + if( 0==sqlite3StrICmp(pCol->zCnName, zKey) ) return 1; + }else if( pCol->colFlags & COLFLAG_PRIMKEY ){ + return 1; + } + } + } + } + return 0; +} + +/* +** Return true if the parser passed as the first argument is being +** used to code a trigger that is really a "SET NULL" action belonging +** to trigger pFKey. +*/ +static int isSetNullAction(Parse *pParse, FKey *pFKey){ + Parse *pTop = sqlite3ParseToplevel(pParse); + if( pTop->pTriggerPrg ){ + Trigger *p = pTop->pTriggerPrg->pTrigger; + if( (p==pFKey->apTrigger[0] && pFKey->aAction[0]==OE_SetNull) + || (p==pFKey->apTrigger[1] && pFKey->aAction[1]==OE_SetNull) + ){ + assert( (pTop->db->flags & SQLITE_FkNoAction)==0 ); + return 1; + } + } + return 0; +} + +/* +** This function is called when inserting, deleting or updating a row of +** table pTab to generate VDBE code to perform foreign key constraint +** processing for the operation. +** +** For a DELETE operation, parameter regOld is passed the index of the +** first register in an array of (pTab->nCol+1) registers containing the +** rowid of the row being deleted, followed by each of the column values +** of the row being deleted, from left to right. Parameter regNew is passed +** zero in this case. +** +** For an INSERT operation, regOld is passed zero and regNew is passed the +** first register of an array of (pTab->nCol+1) registers containing the new +** row data. +** +** For an UPDATE operation, this function is called twice. Once before +** the original record is deleted from the table using the calling convention +** described for DELETE. Then again after the original record is deleted +** but before the new record is inserted using the INSERT convention. +*/ +SQLITE_PRIVATE void sqlite3FkCheck( + Parse *pParse, /* Parse context */ + Table *pTab, /* Row is being deleted from this table */ + int regOld, /* Previous row data is stored here */ + int regNew, /* New row data is stored here */ + int *aChange, /* Array indicating UPDATEd columns (or 0) */ + int bChngRowid /* True if rowid is UPDATEd */ +){ + sqlite3 *db = pParse->db; /* Database handle */ + FKey *pFKey; /* Used to iterate through FKs */ + int iDb; /* Index of database containing pTab */ + const char *zDb; /* Name of database containing pTab */ + int isIgnoreErrors = pParse->disableTriggers; + + /* Exactly one of regOld and regNew should be non-zero. */ + assert( (regOld==0)!=(regNew==0) ); + + /* If foreign-keys are disabled, this function is a no-op. */ + if( (db->flags&SQLITE_ForeignKeys)==0 ) return; + if( !IsOrdinaryTable(pTab) ) return; + + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + zDb = db->aDb[iDb].zDbSName; + + /* Loop through all the foreign key constraints for which pTab is the + ** child table (the table that the foreign key definition is part of). */ + for(pFKey=pTab->u.tab.pFKey; pFKey; pFKey=pFKey->pNextFrom){ + Table *pTo; /* Parent table of foreign key pFKey */ + Index *pIdx = 0; /* Index on key columns in pTo */ + int *aiFree = 0; + int *aiCol; + int iCol; + int i; + int bIgnore = 0; + + if( aChange + && sqlite3_stricmp(pTab->zName, pFKey->zTo)!=0 + && fkChildIsModified(pTab, pFKey, aChange, bChngRowid)==0 + ){ + continue; + } + + /* Find the parent table of this foreign key. Also find a unique index + ** on the parent key columns in the parent table. If either of these + ** schema items cannot be located, set an error in pParse and return + ** early. */ + if( pParse->disableTriggers ){ + pTo = sqlite3FindTable(db, pFKey->zTo, zDb); + }else{ + pTo = sqlite3LocateTable(pParse, 0, pFKey->zTo, zDb); + } + if( !pTo || sqlite3FkLocateIndex(pParse, pTo, pFKey, &pIdx, &aiFree) ){ + assert( isIgnoreErrors==0 || (regOld!=0 && regNew==0) ); + if( !isIgnoreErrors || db->mallocFailed ) return; + if( pTo==0 ){ + /* If isIgnoreErrors is true, then a table is being dropped. In this + ** case SQLite runs a "DELETE FROM xxx" on the table being dropped + ** before actually dropping it in order to check FK constraints. + ** If the parent table of an FK constraint on the current table is + ** missing, behave as if it is empty. i.e. decrement the relevant + ** FK counter for each row of the current table with non-NULL keys. + */ + Vdbe *v = sqlite3GetVdbe(pParse); + int iJump = sqlite3VdbeCurrentAddr(v) + pFKey->nCol + 1; + for(i=0; inCol; i++){ + int iFromCol, iReg; + iFromCol = pFKey->aCol[i].iFrom; + iReg = sqlite3TableColumnToStorage(pFKey->pFrom,iFromCol) + regOld+1; + sqlite3VdbeAddOp2(v, OP_IsNull, iReg, iJump); VdbeCoverage(v); + } + sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, -1); + } + continue; + } + assert( pFKey->nCol==1 || (aiFree && pIdx) ); + + if( aiFree ){ + aiCol = aiFree; + }else{ + iCol = pFKey->aCol[0].iFrom; + aiCol = &iCol; + } + for(i=0; inCol; i++){ + if( aiCol[i]==pTab->iPKey ){ + aiCol[i] = -1; + } + assert( pIdx==0 || pIdx->aiColumn[i]>=0 ); +#ifndef SQLITE_OMIT_AUTHORIZATION + /* Request permission to read the parent key columns. If the + ** authorization callback returns SQLITE_IGNORE, behave as if any + ** values read from the parent table are NULL. */ + if( db->xAuth ){ + int rcauth; + char *zCol = pTo->aCol[pIdx ? pIdx->aiColumn[i] : pTo->iPKey].zCnName; + rcauth = sqlite3AuthReadCol(pParse, pTo->zName, zCol, iDb); + bIgnore = (rcauth==SQLITE_IGNORE); + } +#endif + } + + /* Take a shared-cache advisory read-lock on the parent table. Allocate + ** a cursor to use to search the unique index on the parent key columns + ** in the parent table. */ + sqlite3TableLock(pParse, iDb, pTo->tnum, 0, pTo->zName); + pParse->nTab++; + + if( regOld!=0 ){ + /* A row is being removed from the child table. Search for the parent. + ** If the parent does not exist, removing the child row resolves an + ** outstanding foreign key constraint violation. */ + fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regOld, -1, bIgnore); + } + if( regNew!=0 && !isSetNullAction(pParse, pFKey) ){ + /* A row is being added to the child table. If a parent row cannot + ** be found, adding the child row has violated the FK constraint. + ** + ** If this operation is being performed as part of a trigger program + ** that is actually a "SET NULL" action belonging to this very + ** foreign key, then omit this scan altogether. As all child key + ** values are guaranteed to be NULL, it is not possible for adding + ** this row to cause an FK violation. */ + fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regNew, +1, bIgnore); + } + + sqlite3DbFree(db, aiFree); + } + + /* Loop through all the foreign key constraints that refer to this table. + ** (the "child" constraints) */ + for(pFKey = sqlite3FkReferences(pTab); pFKey; pFKey=pFKey->pNextTo){ + Index *pIdx = 0; /* Foreign key index for pFKey */ + SrcList *pSrc; + int *aiCol = 0; + + if( aChange && fkParentIsModified(pTab, pFKey, aChange, bChngRowid)==0 ){ + continue; + } + + if( !pFKey->isDeferred && !(db->flags & SQLITE_DeferFKs) + && !pParse->pToplevel && !pParse->isMultiWrite + ){ + assert( regOld==0 && regNew!=0 ); + /* Inserting a single row into a parent table cannot cause (or fix) + ** an immediate foreign key violation. So do nothing in this case. */ + continue; + } + + if( sqlite3FkLocateIndex(pParse, pTab, pFKey, &pIdx, &aiCol) ){ + if( !isIgnoreErrors || db->mallocFailed ) return; + continue; + } + assert( aiCol || pFKey->nCol==1 ); + + /* Create a SrcList structure containing the child table. We need the + ** child table as a SrcList for sqlite3WhereBegin() */ + pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0); + if( pSrc ){ + SrcItem *pItem = pSrc->a; + pItem->pSTab = pFKey->pFrom; + pItem->zName = pFKey->pFrom->zName; + pItem->pSTab->nTabRef++; + pItem->iCursor = pParse->nTab++; + + if( regNew!=0 ){ + fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regNew, -1); + } + if( regOld!=0 ){ + int eAction = pFKey->aAction[aChange!=0]; + if( (db->flags & SQLITE_FkNoAction) ) eAction = OE_None; + + fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regOld, 1); + /* If this is a deferred FK constraint, or a CASCADE or SET NULL + ** action applies, then any foreign key violations caused by + ** removing the parent key will be rectified by the action trigger. + ** So do not set the "may-abort" flag in this case. + ** + ** Note 1: If the FK is declared "ON UPDATE CASCADE", then the + ** may-abort flag will eventually be set on this statement anyway + ** (when this function is called as part of processing the UPDATE + ** within the action trigger). + ** + ** Note 2: At first glance it may seem like SQLite could simply omit + ** all OP_FkCounter related scans when either CASCADE or SET NULL + ** applies. The trouble starts if the CASCADE or SET NULL action + ** trigger causes other triggers or action rules attached to the + ** child table to fire. In these cases the fk constraint counters + ** might be set incorrectly if any OP_FkCounter related scans are + ** omitted. */ + if( !pFKey->isDeferred && eAction!=OE_Cascade && eAction!=OE_SetNull ){ + sqlite3MayAbort(pParse); + } + } + pItem->zName = 0; + sqlite3SrcListDelete(db, pSrc); + } + sqlite3DbFree(db, aiCol); + } +} + +#define COLUMN_MASK(x) (((x)>31) ? 0xffffffff : ((u32)1<<(x))) + +/* +** This function is called before generating code to update or delete a +** row contained in table pTab. +*/ +SQLITE_PRIVATE u32 sqlite3FkOldmask( + Parse *pParse, /* Parse context */ + Table *pTab /* Table being modified */ +){ + u32 mask = 0; + if( pParse->db->flags&SQLITE_ForeignKeys && IsOrdinaryTable(pTab) ){ + FKey *p; + int i; + for(p=pTab->u.tab.pFKey; p; p=p->pNextFrom){ + for(i=0; inCol; i++) mask |= COLUMN_MASK(p->aCol[i].iFrom); + } + for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){ + Index *pIdx = 0; + sqlite3FkLocateIndex(pParse, pTab, p, &pIdx, 0); + if( pIdx ){ + for(i=0; inKeyCol; i++){ + assert( pIdx->aiColumn[i]>=0 ); + mask |= COLUMN_MASK(pIdx->aiColumn[i]); + } + } + } + } + return mask; +} + + +/* +** This function is called before generating code to update or delete a +** row contained in table pTab. If the operation is a DELETE, then +** parameter aChange is passed a NULL value. For an UPDATE, aChange points +** to an array of size N, where N is the number of columns in table pTab. +** If the i'th column is not modified by the UPDATE, then the corresponding +** entry in the aChange[] array is set to -1. If the column is modified, +** the value is 0 or greater. Parameter chngRowid is set to true if the +** UPDATE statement modifies the rowid fields of the table. +** +** If any foreign key processing will be required, this function returns +** non-zero. If there is no foreign key related processing, this function +** returns zero. +** +** For an UPDATE, this function returns 2 if: +** +** * There are any FKs for which pTab is the child and the parent table +** and any FK processing at all is required (even of a different FK), or +** +** * the UPDATE modifies one or more parent keys for which the action is +** not "NO ACTION" (i.e. is CASCADE, SET DEFAULT or SET NULL). +** +** Or, assuming some other foreign key processing is required, 1. +*/ +SQLITE_PRIVATE int sqlite3FkRequired( + Parse *pParse, /* Parse context */ + Table *pTab, /* Table being modified */ + int *aChange, /* Non-NULL for UPDATE operations */ + int chngRowid /* True for UPDATE that affects rowid */ +){ + int eRet = 1; /* Value to return if bHaveFK is true */ + int bHaveFK = 0; /* If FK processing is required */ + if( pParse->db->flags&SQLITE_ForeignKeys && IsOrdinaryTable(pTab) ){ + if( !aChange ){ + /* A DELETE operation. Foreign key processing is required if the + ** table in question is either the child or parent table for any + ** foreign key constraint. */ + bHaveFK = (sqlite3FkReferences(pTab) || pTab->u.tab.pFKey); + }else{ + /* This is an UPDATE. Foreign key processing is only required if the + ** operation modifies one or more child or parent key columns. */ + FKey *p; + + /* Check if any child key columns are being modified. */ + for(p=pTab->u.tab.pFKey; p; p=p->pNextFrom){ + if( fkChildIsModified(pTab, p, aChange, chngRowid) ){ + if( 0==sqlite3_stricmp(pTab->zName, p->zTo) ) eRet = 2; + bHaveFK = 1; + } + } + + /* Check if any parent key columns are being modified. */ + for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){ + if( fkParentIsModified(pTab, p, aChange, chngRowid) ){ + if( (pParse->db->flags & SQLITE_FkNoAction)==0 + && p->aAction[1]!=OE_None + ){ + return 2; + } + bHaveFK = 1; + } + } + } + } + return bHaveFK ? eRet : 0; +} + +/* +** This function is called when an UPDATE or DELETE operation is being +** compiled on table pTab, which is the parent table of foreign-key pFKey. +** If the current operation is an UPDATE, then the pChanges parameter is +** passed a pointer to the list of columns being modified. If it is a +** DELETE, pChanges is passed a NULL pointer. +** +** It returns a pointer to a Trigger structure containing a trigger +** equivalent to the ON UPDATE or ON DELETE action specified by pFKey. +** If the action is "NO ACTION" then a NULL pointer is returned (these actions +** require no special handling by the triggers sub-system, code for them is +** created by fkScanChildren()). +** +** For example, if pFKey is the foreign key and pTab is table "p" in +** the following schema: +** +** CREATE TABLE p(pk PRIMARY KEY); +** CREATE TABLE c(ck REFERENCES p ON DELETE CASCADE); +** +** then the returned trigger structure is equivalent to: +** +** CREATE TRIGGER ... DELETE ON p BEGIN +** DELETE FROM c WHERE ck = old.pk; +** END; +** +** The returned pointer is cached as part of the foreign key object. It +** is eventually freed along with the rest of the foreign key object by +** sqlite3FkDelete(). +*/ +static Trigger *fkActionTrigger( + Parse *pParse, /* Parse context */ + Table *pTab, /* Table being updated or deleted from */ + FKey *pFKey, /* Foreign key to get action for */ + ExprList *pChanges /* Change-list for UPDATE, NULL for DELETE */ +){ + sqlite3 *db = pParse->db; /* Database handle */ + int action; /* One of OE_None, OE_Cascade etc. */ + Trigger *pTrigger; /* Trigger definition to return */ + int iAction = (pChanges!=0); /* 1 for UPDATE, 0 for DELETE */ + + action = pFKey->aAction[iAction]; + if( (db->flags & SQLITE_FkNoAction) ) action = OE_None; + if( action==OE_Restrict && (db->flags & SQLITE_DeferFKs) ){ + return 0; + } + pTrigger = pFKey->apTrigger[iAction]; + + if( action!=OE_None && !pTrigger ){ + char const *zFrom; /* Name of child table */ + int nFrom; /* Length in bytes of zFrom */ + Index *pIdx = 0; /* Parent key index for this FK */ + int *aiCol = 0; /* child table cols -> parent key cols */ + TriggerStep *pStep = 0; /* First (only) step of trigger program */ + Expr *pWhere = 0; /* WHERE clause of trigger step */ + ExprList *pList = 0; /* Changes list if ON UPDATE CASCADE */ + Select *pSelect = 0; /* If RESTRICT, "SELECT RAISE(...)" */ + int i; /* Iterator variable */ + Expr *pWhen = 0; /* WHEN clause for the trigger */ + + if( sqlite3FkLocateIndex(pParse, pTab, pFKey, &pIdx, &aiCol) ) return 0; + assert( aiCol || pFKey->nCol==1 ); + + for(i=0; inCol; i++){ + Token tOld = { "old", 3 }; /* Literal "old" token */ + Token tNew = { "new", 3 }; /* Literal "new" token */ + Token tFromCol; /* Name of column in child table */ + Token tToCol; /* Name of column in parent table */ + int iFromCol; /* Idx of column in child table */ + Expr *pEq; /* tFromCol = OLD.tToCol */ + + iFromCol = aiCol ? aiCol[i] : pFKey->aCol[0].iFrom; + assert( iFromCol>=0 ); + assert( pIdx!=0 || (pTab->iPKey>=0 && pTab->iPKeynCol) ); + assert( pIdx==0 || pIdx->aiColumn[i]>=0 ); + sqlite3TokenInit(&tToCol, + pTab->aCol[pIdx ? pIdx->aiColumn[i] : pTab->iPKey].zCnName); + sqlite3TokenInit(&tFromCol, pFKey->pFrom->aCol[iFromCol].zCnName); + + /* Create the expression "OLD.zToCol = zFromCol". It is important + ** that the "OLD.zToCol" term is on the LHS of the = operator, so + ** that the affinity and collation sequence associated with the + ** parent table are used for the comparison. */ + pEq = sqlite3PExpr(pParse, TK_EQ, + sqlite3PExpr(pParse, TK_DOT, + sqlite3ExprAlloc(db, TK_ID, &tOld, 0), + sqlite3ExprAlloc(db, TK_ID, &tToCol, 0)), + sqlite3ExprAlloc(db, TK_ID, &tFromCol, 0) + ); + pWhere = sqlite3ExprAnd(pParse, pWhere, pEq); + + /* For ON UPDATE, construct the next term of the WHEN clause. + ** The final WHEN clause will be like this: + ** + ** WHEN NOT(old.col1 IS new.col1 AND ... AND old.colN IS new.colN) + */ + if( pChanges ){ + pEq = sqlite3PExpr(pParse, TK_IS, + sqlite3PExpr(pParse, TK_DOT, + sqlite3ExprAlloc(db, TK_ID, &tOld, 0), + sqlite3ExprAlloc(db, TK_ID, &tToCol, 0)), + sqlite3PExpr(pParse, TK_DOT, + sqlite3ExprAlloc(db, TK_ID, &tNew, 0), + sqlite3ExprAlloc(db, TK_ID, &tToCol, 0)) + ); + pWhen = sqlite3ExprAnd(pParse, pWhen, pEq); + } + + if( action!=OE_Restrict && (action!=OE_Cascade || pChanges) ){ + Expr *pNew; + if( action==OE_Cascade ){ + pNew = sqlite3PExpr(pParse, TK_DOT, + sqlite3ExprAlloc(db, TK_ID, &tNew, 0), + sqlite3ExprAlloc(db, TK_ID, &tToCol, 0)); + }else if( action==OE_SetDflt ){ + Column *pCol = pFKey->pFrom->aCol + iFromCol; + Expr *pDflt; + if( pCol->colFlags & COLFLAG_GENERATED ){ + testcase( pCol->colFlags & COLFLAG_VIRTUAL ); + testcase( pCol->colFlags & COLFLAG_STORED ); + pDflt = 0; + }else{ + pDflt = sqlite3ColumnExpr(pFKey->pFrom, pCol); + } + if( pDflt ){ + pNew = sqlite3ExprDup(db, pDflt, 0); + }else{ + pNew = sqlite3ExprAlloc(db, TK_NULL, 0, 0); + } + }else{ + pNew = sqlite3ExprAlloc(db, TK_NULL, 0, 0); + } + pList = sqlite3ExprListAppend(pParse, pList, pNew); + sqlite3ExprListSetName(pParse, pList, &tFromCol, 0); + } + } + sqlite3DbFree(db, aiCol); + + zFrom = pFKey->pFrom->zName; + nFrom = sqlite3Strlen30(zFrom); + + if( action==OE_Restrict ){ + int iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + SrcList *pSrc; + Expr *pRaise; + + pRaise = sqlite3Expr(db, TK_STRING, "FOREIGN KEY constraint failed"), + pRaise = sqlite3PExpr(pParse, TK_RAISE, pRaise, 0); + if( pRaise ){ + pRaise->affExpr = OE_Abort; + } + pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0); + if( pSrc ){ + assert( pSrc->nSrc==1 ); + pSrc->a[0].zName = sqlite3DbStrDup(db, zFrom); + assert( pSrc->a[0].fg.fixedSchema==0 && pSrc->a[0].fg.isSubquery==0 ); + pSrc->a[0].u4.zDatabase = sqlite3DbStrDup(db, db->aDb[iDb].zDbSName); + } + pSelect = sqlite3SelectNew(pParse, + sqlite3ExprListAppend(pParse, 0, pRaise), + pSrc, + pWhere, + 0, 0, 0, 0, 0 + ); + pWhere = 0; + } + + /* Disable lookaside memory allocation */ + DisableLookaside; + + pTrigger = (Trigger *)sqlite3DbMallocZero(db, + sizeof(Trigger) + /* struct Trigger */ + sizeof(TriggerStep) + /* Single step in trigger program */ + nFrom + 1 /* Space for pStep->zTarget */ + ); + if( pTrigger ){ + pStep = pTrigger->step_list = (TriggerStep *)&pTrigger[1]; + pStep->zTarget = (char *)&pStep[1]; + memcpy((char *)pStep->zTarget, zFrom, nFrom); + + pStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); + pStep->pExprList = sqlite3ExprListDup(db, pList, EXPRDUP_REDUCE); + pStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); + if( pWhen ){ + pWhen = sqlite3PExpr(pParse, TK_NOT, pWhen, 0); + pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE); + } + } + + /* Re-enable the lookaside buffer, if it was disabled earlier. */ + EnableLookaside; + + sqlite3ExprDelete(db, pWhere); + sqlite3ExprDelete(db, pWhen); + sqlite3ExprListDelete(db, pList); + sqlite3SelectDelete(db, pSelect); + if( db->mallocFailed==1 ){ + fkTriggerDelete(db, pTrigger); + return 0; + } + assert( pStep!=0 ); + assert( pTrigger!=0 ); + + switch( action ){ + case OE_Restrict: + pStep->op = TK_SELECT; + break; + case OE_Cascade: + if( !pChanges ){ + pStep->op = TK_DELETE; + break; + } + /* no break */ deliberate_fall_through + default: + pStep->op = TK_UPDATE; + } + pStep->pTrig = pTrigger; + pTrigger->pSchema = pTab->pSchema; + pTrigger->pTabSchema = pTab->pSchema; + pFKey->apTrigger[iAction] = pTrigger; + pTrigger->op = (pChanges ? TK_UPDATE : TK_DELETE); + } + + return pTrigger; +} + +/* +** This function is called when deleting or updating a row to implement +** any required CASCADE, SET NULL or SET DEFAULT actions. +*/ +SQLITE_PRIVATE void sqlite3FkActions( + Parse *pParse, /* Parse context */ + Table *pTab, /* Table being updated or deleted from */ + ExprList *pChanges, /* Change-list for UPDATE, NULL for DELETE */ + int regOld, /* Address of array containing old row */ + int *aChange, /* Array indicating UPDATEd columns (or 0) */ + int bChngRowid /* True if rowid is UPDATEd */ +){ + /* If foreign-key support is enabled, iterate through all FKs that + ** refer to table pTab. If there is an action associated with the FK + ** for this operation (either update or delete), invoke the associated + ** trigger sub-program. */ + if( pParse->db->flags&SQLITE_ForeignKeys ){ + FKey *pFKey; /* Iterator variable */ + for(pFKey = sqlite3FkReferences(pTab); pFKey; pFKey=pFKey->pNextTo){ + if( aChange==0 || fkParentIsModified(pTab, pFKey, aChange, bChngRowid) ){ + Trigger *pAct = fkActionTrigger(pParse, pTab, pFKey, pChanges); + if( pAct ){ + sqlite3CodeRowTriggerDirect(pParse, pAct, pTab, regOld, OE_Abort, 0); + } + } + } + } +} + +#endif /* ifndef SQLITE_OMIT_TRIGGER */ + +/* +** Free all memory associated with foreign key definitions attached to +** table pTab. Remove the deleted foreign keys from the Schema.fkeyHash +** hash table. +*/ +SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *db, Table *pTab){ + FKey *pFKey; /* Iterator variable */ + FKey *pNext; /* Copy of pFKey->pNextFrom */ + + assert( IsOrdinaryTable(pTab) ); + assert( db!=0 ); + for(pFKey=pTab->u.tab.pFKey; pFKey; pFKey=pNext){ + assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pTab->pSchema) ); + + /* Remove the FK from the fkeyHash hash table. */ + if( db->pnBytesFreed==0 ){ + if( pFKey->pPrevTo ){ + pFKey->pPrevTo->pNextTo = pFKey->pNextTo; + }else{ + const char *z = (pFKey->pNextTo ? pFKey->pNextTo->zTo : pFKey->zTo); + sqlite3HashInsert(&pTab->pSchema->fkeyHash, z, pFKey->pNextTo); + } + if( pFKey->pNextTo ){ + pFKey->pNextTo->pPrevTo = pFKey->pPrevTo; + } + } + + /* EV: R-30323-21917 Each foreign key constraint in SQLite is + ** classified as either immediate or deferred. + */ + assert( pFKey->isDeferred==0 || pFKey->isDeferred==1 ); + + /* Delete any triggers created to implement actions for this FK. */ +#ifndef SQLITE_OMIT_TRIGGER + fkTriggerDelete(db, pFKey->apTrigger[0]); + fkTriggerDelete(db, pFKey->apTrigger[1]); +#endif + + pNext = pFKey->pNextFrom; + sqlite3DbFree(db, pFKey); + } +} +#endif /* ifndef SQLITE_OMIT_FOREIGN_KEY */ + +/************** End of fkey.c ************************************************/ +/************** Begin file insert.c ******************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains C code routines that are called by the parser +** to handle INSERT statements in SQLite. +*/ +/* #include "sqliteInt.h" */ + +/* +** Generate code that will +** +** (1) acquire a lock for table pTab then +** (2) open pTab as cursor iCur. +** +** If pTab is a WITHOUT ROWID table, then it is the PRIMARY KEY index +** for that table that is actually opened. +*/ +SQLITE_PRIVATE void sqlite3OpenTable( + Parse *pParse, /* Generate code into this VDBE */ + int iCur, /* The cursor number of the table */ + int iDb, /* The database index in sqlite3.aDb[] */ + Table *pTab, /* The table to be opened */ + int opcode /* OP_OpenRead or OP_OpenWrite */ +){ + Vdbe *v; + assert( !IsVirtual(pTab) ); + assert( pParse->pVdbe!=0 ); + v = pParse->pVdbe; + assert( opcode==OP_OpenWrite || opcode==OP_OpenRead ); + if( !pParse->db->noSharedCache ){ + sqlite3TableLock(pParse, iDb, pTab->tnum, + (opcode==OP_OpenWrite)?1:0, pTab->zName); + } + if( HasRowid(pTab) ){ + sqlite3VdbeAddOp4Int(v, opcode, iCur, pTab->tnum, iDb, pTab->nNVCol); + VdbeComment((v, "%s", pTab->zName)); + }else{ + Index *pPk = sqlite3PrimaryKeyIndex(pTab); + assert( pPk!=0 ); + assert( pPk->tnum==pTab->tnum || CORRUPT_DB ); + sqlite3VdbeAddOp3(v, opcode, iCur, pPk->tnum, iDb); + sqlite3VdbeSetP4KeyInfo(pParse, pPk); + VdbeComment((v, "%s", pTab->zName)); + } +} + +/* +** Return a pointer to the column affinity string associated with index +** pIdx. A column affinity string has one character for each column in +** the table, according to the affinity of the column: +** +** Character Column affinity +** ------------------------------ +** 'A' BLOB +** 'B' TEXT +** 'C' NUMERIC +** 'D' INTEGER +** 'F' REAL +** +** An extra 'D' is appended to the end of the string to cover the +** rowid that appears as the last column in every index. +** +** Memory for the buffer containing the column index affinity string +** is managed along with the rest of the Index structure. It will be +** released when sqlite3DeleteIndex() is called. +*/ +static SQLITE_NOINLINE const char *computeIndexAffStr(sqlite3 *db, Index *pIdx){ + /* The first time a column affinity string for a particular index is + ** required, it is allocated and populated here. It is then stored as + ** a member of the Index structure for subsequent use. + ** + ** The column affinity string will eventually be deleted by + ** sqliteDeleteIndex() when the Index structure itself is cleaned + ** up. + */ + int n; + Table *pTab = pIdx->pTable; + pIdx->zColAff = (char *)sqlite3DbMallocRaw(0, pIdx->nColumn+1); + if( !pIdx->zColAff ){ + sqlite3OomFault(db); + return 0; + } + for(n=0; nnColumn; n++){ + i16 x = pIdx->aiColumn[n]; + char aff; + if( x>=0 ){ + aff = pTab->aCol[x].affinity; + }else if( x==XN_ROWID ){ + aff = SQLITE_AFF_INTEGER; + }else{ + assert( x==XN_EXPR ); + assert( pIdx->bHasExpr ); + assert( pIdx->aColExpr!=0 ); + aff = sqlite3ExprAffinity(pIdx->aColExpr->a[n].pExpr); + } + if( affSQLITE_AFF_NUMERIC) aff = SQLITE_AFF_NUMERIC; + pIdx->zColAff[n] = aff; + } + pIdx->zColAff[n] = 0; + return pIdx->zColAff; +} +SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(sqlite3 *db, Index *pIdx){ + if( !pIdx->zColAff ) return computeIndexAffStr(db, pIdx); + return pIdx->zColAff; +} + + +/* +** Compute an affinity string for a table. Space is obtained +** from sqlite3DbMalloc(). The caller is responsible for freeing +** the space when done. +*/ +SQLITE_PRIVATE char *sqlite3TableAffinityStr(sqlite3 *db, const Table *pTab){ + char *zColAff; + zColAff = (char *)sqlite3DbMallocRaw(db, pTab->nCol+1); + if( zColAff ){ + int i, j; + for(i=j=0; inCol; i++){ + if( (pTab->aCol[i].colFlags & COLFLAG_VIRTUAL)==0 ){ + zColAff[j++] = pTab->aCol[i].affinity; + } + } + do{ + zColAff[j--] = 0; + }while( j>=0 && zColAff[j]<=SQLITE_AFF_BLOB ); + } + return zColAff; +} + +/* +** Make changes to the evolving bytecode to do affinity transformations +** of values that are about to be gathered into a row for table pTab. +** +** For ordinary (legacy, non-strict) tables: +** ----------------------------------------- +** +** Compute the affinity string for table pTab, if it has not already been +** computed. As an optimization, omit trailing SQLITE_AFF_BLOB affinities. +** +** If the affinity string is empty (because it was all SQLITE_AFF_BLOB entries +** which were then optimized out) then this routine becomes a no-op. +** +** Otherwise if iReg>0 then code an OP_Affinity opcode that will set the +** affinities for register iReg and following. Or if iReg==0, +** then just set the P4 operand of the previous opcode (which should be +** an OP_MakeRecord) to the affinity string. +** +** A column affinity string has one character per column: +** +** Character Column affinity +** --------- --------------- +** 'A' BLOB +** 'B' TEXT +** 'C' NUMERIC +** 'D' INTEGER +** 'E' REAL +** +** For STRICT tables: +** ------------------ +** +** Generate an appropriate OP_TypeCheck opcode that will verify the +** datatypes against the column definitions in pTab. If iReg==0, that +** means an OP_MakeRecord opcode has already been generated and should be +** the last opcode generated. The new OP_TypeCheck needs to be inserted +** before the OP_MakeRecord. The new OP_TypeCheck should use the same +** register set as the OP_MakeRecord. If iReg>0 then register iReg is +** the first of a series of registers that will form the new record. +** Apply the type checking to that array of registers. +*/ +SQLITE_PRIVATE void sqlite3TableAffinity(Vdbe *v, Table *pTab, int iReg){ + int i; + char *zColAff; + if( pTab->tabFlags & TF_Strict ){ + if( iReg==0 ){ + /* Move the previous opcode (which should be OP_MakeRecord) forward + ** by one slot and insert a new OP_TypeCheck where the current + ** OP_MakeRecord is found */ + VdbeOp *pPrev; + int p3; + sqlite3VdbeAppendP4(v, pTab, P4_TABLE); + pPrev = sqlite3VdbeGetLastOp(v); + assert( pPrev!=0 ); + assert( pPrev->opcode==OP_MakeRecord || sqlite3VdbeDb(v)->mallocFailed ); + pPrev->opcode = OP_TypeCheck; + p3 = pPrev->p3; + pPrev->p3 = 0; + sqlite3VdbeAddOp3(v, OP_MakeRecord, pPrev->p1, pPrev->p2, p3); + }else{ + /* Insert an isolated OP_Typecheck */ + sqlite3VdbeAddOp2(v, OP_TypeCheck, iReg, pTab->nNVCol); + sqlite3VdbeAppendP4(v, pTab, P4_TABLE); + } + return; + } + zColAff = pTab->zColAff; + if( zColAff==0 ){ + zColAff = sqlite3TableAffinityStr(0, pTab); + if( !zColAff ){ + sqlite3OomFault(sqlite3VdbeDb(v)); + return; + } + pTab->zColAff = zColAff; + } + assert( zColAff!=0 ); + i = sqlite3Strlen30NN(zColAff); + if( i ){ + if( iReg ){ + sqlite3VdbeAddOp4(v, OP_Affinity, iReg, i, 0, zColAff, i); + }else{ + assert( sqlite3VdbeGetLastOp(v)->opcode==OP_MakeRecord + || sqlite3VdbeDb(v)->mallocFailed ); + sqlite3VdbeChangeP4(v, -1, zColAff, i); + } + } +} + +/* +** Return non-zero if the table pTab in database iDb or any of its indices +** have been opened at any point in the VDBE program. This is used to see if +** a statement of the form "INSERT INTO SELECT ..." can +** run without using a temporary table for the results of the SELECT. +*/ +static int readsTable(Parse *p, int iDb, Table *pTab){ + Vdbe *v = sqlite3GetVdbe(p); + int i; + int iEnd = sqlite3VdbeCurrentAddr(v); +#ifndef SQLITE_OMIT_VIRTUALTABLE + VTable *pVTab = IsVirtual(pTab) ? sqlite3GetVTable(p->db, pTab) : 0; +#endif + + for(i=1; iopcode==OP_OpenRead && pOp->p3==iDb ){ + Index *pIndex; + Pgno tnum = pOp->p2; + if( tnum==pTab->tnum ){ + return 1; + } + for(pIndex=pTab->pIndex; pIndex; pIndex=pIndex->pNext){ + if( tnum==pIndex->tnum ){ + return 1; + } + } + } +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( pOp->opcode==OP_VOpen && pOp->p4.pVtab==pVTab ){ + assert( pOp->p4.pVtab!=0 ); + assert( pOp->p4type==P4_VTAB ); + return 1; + } +#endif + } + return 0; +} + +/* This walker callback will compute the union of colFlags flags for all +** referenced columns in a CHECK constraint or generated column expression. +*/ +static int exprColumnFlagUnion(Walker *pWalker, Expr *pExpr){ + if( pExpr->op==TK_COLUMN && pExpr->iColumn>=0 ){ + assert( pExpr->iColumn < pWalker->u.pTab->nCol ); + pWalker->eCode |= pWalker->u.pTab->aCol[pExpr->iColumn].colFlags; + } + return WRC_Continue; +} + +#ifndef SQLITE_OMIT_GENERATED_COLUMNS +/* +** All regular columns for table pTab have been puts into registers +** starting with iRegStore. The registers that correspond to STORED +** or VIRTUAL columns have not yet been initialized. This routine goes +** back and computes the values for those columns based on the previously +** computed normal columns. +*/ +SQLITE_PRIVATE void sqlite3ComputeGeneratedColumns( + Parse *pParse, /* Parsing context */ + int iRegStore, /* Register holding the first column */ + Table *pTab /* The table */ +){ + int i; + Walker w; + Column *pRedo; + int eProgress; + VdbeOp *pOp; + + assert( pTab->tabFlags & TF_HasGenerated ); + testcase( pTab->tabFlags & TF_HasVirtual ); + testcase( pTab->tabFlags & TF_HasStored ); + + /* Before computing generated columns, first go through and make sure + ** that appropriate affinity has been applied to the regular columns + */ + sqlite3TableAffinity(pParse->pVdbe, pTab, iRegStore); + if( (pTab->tabFlags & TF_HasStored)!=0 ){ + pOp = sqlite3VdbeGetLastOp(pParse->pVdbe); + if( pOp->opcode==OP_Affinity ){ + /* Change the OP_Affinity argument to '@' (NONE) for all stored + ** columns. '@' is the no-op affinity and those columns have not + ** yet been computed. */ + int ii, jj; + char *zP4 = pOp->p4.z; + assert( zP4!=0 ); + assert( pOp->p4type==P4_DYNAMIC ); + for(ii=jj=0; zP4[jj]; ii++){ + if( pTab->aCol[ii].colFlags & COLFLAG_VIRTUAL ){ + continue; + } + if( pTab->aCol[ii].colFlags & COLFLAG_STORED ){ + zP4[jj] = SQLITE_AFF_NONE; + } + jj++; + } + }else if( pOp->opcode==OP_TypeCheck ){ + /* If an OP_TypeCheck was generated because the table is STRICT, + ** then set the P3 operand to indicate that generated columns should + ** not be checked */ + pOp->p3 = 1; + } + } + + /* Because there can be multiple generated columns that refer to one another, + ** this is a two-pass algorithm. On the first pass, mark all generated + ** columns as "not available". + */ + for(i=0; inCol; i++){ + if( pTab->aCol[i].colFlags & COLFLAG_GENERATED ){ + testcase( pTab->aCol[i].colFlags & COLFLAG_VIRTUAL ); + testcase( pTab->aCol[i].colFlags & COLFLAG_STORED ); + pTab->aCol[i].colFlags |= COLFLAG_NOTAVAIL; + } + } + + w.u.pTab = pTab; + w.xExprCallback = exprColumnFlagUnion; + w.xSelectCallback = 0; + w.xSelectCallback2 = 0; + + /* On the second pass, compute the value of each NOT-AVAILABLE column. + ** Companion code in the TK_COLUMN case of sqlite3ExprCodeTarget() will + ** compute dependencies and mark remove the COLSPAN_NOTAVAIL mark, as + ** they are needed. + */ + pParse->iSelfTab = -iRegStore; + do{ + eProgress = 0; + pRedo = 0; + for(i=0; inCol; i++){ + Column *pCol = pTab->aCol + i; + if( (pCol->colFlags & COLFLAG_NOTAVAIL)!=0 ){ + int x; + pCol->colFlags |= COLFLAG_BUSY; + w.eCode = 0; + sqlite3WalkExpr(&w, sqlite3ColumnExpr(pTab, pCol)); + pCol->colFlags &= ~COLFLAG_BUSY; + if( w.eCode & COLFLAG_NOTAVAIL ){ + pRedo = pCol; + continue; + } + eProgress = 1; + assert( pCol->colFlags & COLFLAG_GENERATED ); + x = sqlite3TableColumnToStorage(pTab, i) + iRegStore; + sqlite3ExprCodeGeneratedColumn(pParse, pTab, pCol, x); + pCol->colFlags &= ~COLFLAG_NOTAVAIL; + } + } + }while( pRedo && eProgress ); + if( pRedo ){ + sqlite3ErrorMsg(pParse, "generated column loop on \"%s\"", pRedo->zCnName); + } + pParse->iSelfTab = 0; +} +#endif /* SQLITE_OMIT_GENERATED_COLUMNS */ + + +#ifndef SQLITE_OMIT_AUTOINCREMENT +/* +** Locate or create an AutoincInfo structure associated with table pTab +** which is in database iDb. Return the register number for the register +** that holds the maximum rowid. Return zero if pTab is not an AUTOINCREMENT +** table. (Also return zero when doing a VACUUM since we do not want to +** update the AUTOINCREMENT counters during a VACUUM.) +** +** There is at most one AutoincInfo structure per table even if the +** same table is autoincremented multiple times due to inserts within +** triggers. A new AutoincInfo structure is created if this is the +** first use of table pTab. On 2nd and subsequent uses, the original +** AutoincInfo structure is used. +** +** Four consecutive registers are allocated: +** +** (1) The name of the pTab table. +** (2) The maximum ROWID of pTab. +** (3) The rowid in sqlite_sequence of pTab +** (4) The original value of the max ROWID in pTab, or NULL if none +** +** The 2nd register is the one that is returned. That is all the +** insert routine needs to know about. +*/ +static int autoIncBegin( + Parse *pParse, /* Parsing context */ + int iDb, /* Index of the database holding pTab */ + Table *pTab /* The table we are writing to */ +){ + int memId = 0; /* Register holding maximum rowid */ + assert( pParse->db->aDb[iDb].pSchema!=0 ); + if( (pTab->tabFlags & TF_Autoincrement)!=0 + && (pParse->db->mDbFlags & DBFLAG_Vacuum)==0 + ){ + Parse *pToplevel = sqlite3ParseToplevel(pParse); + AutoincInfo *pInfo; + Table *pSeqTab = pParse->db->aDb[iDb].pSchema->pSeqTab; + + /* Verify that the sqlite_sequence table exists and is an ordinary + ** rowid table with exactly two columns. + ** Ticket d8dc2b3a58cd5dc2918a1d4acb 2018-05-23 */ + if( pSeqTab==0 + || !HasRowid(pSeqTab) + || NEVER(IsVirtual(pSeqTab)) + || pSeqTab->nCol!=2 + ){ + pParse->nErr++; + pParse->rc = SQLITE_CORRUPT_SEQUENCE; + return 0; + } + + pInfo = pToplevel->pAinc; + while( pInfo && pInfo->pTab!=pTab ){ pInfo = pInfo->pNext; } + if( pInfo==0 ){ + pInfo = sqlite3DbMallocRawNN(pParse->db, sizeof(*pInfo)); + sqlite3ParserAddCleanup(pToplevel, sqlite3DbFree, pInfo); + testcase( pParse->earlyCleanup ); + if( pParse->db->mallocFailed ) return 0; + pInfo->pNext = pToplevel->pAinc; + pToplevel->pAinc = pInfo; + pInfo->pTab = pTab; + pInfo->iDb = iDb; + pToplevel->nMem++; /* Register to hold name of table */ + pInfo->regCtr = ++pToplevel->nMem; /* Max rowid register */ + pToplevel->nMem +=2; /* Rowid in sqlite_sequence + orig max val */ + } + memId = pInfo->regCtr; + } + return memId; +} + +/* +** This routine generates code that will initialize all of the +** register used by the autoincrement tracker. +*/ +SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse){ + AutoincInfo *p; /* Information about an AUTOINCREMENT */ + sqlite3 *db = pParse->db; /* The database connection */ + Db *pDb; /* Database only autoinc table */ + int memId; /* Register holding max rowid */ + Vdbe *v = pParse->pVdbe; /* VDBE under construction */ + + /* This routine is never called during trigger-generation. It is + ** only called from the top-level */ + assert( pParse->pTriggerTab==0 ); + assert( sqlite3IsToplevel(pParse) ); + + assert( v ); /* We failed long ago if this is not so */ + for(p = pParse->pAinc; p; p = p->pNext){ + static const int iLn = VDBE_OFFSET_LINENO(2); + static const VdbeOpList autoInc[] = { + /* 0 */ {OP_Null, 0, 0, 0}, + /* 1 */ {OP_Rewind, 0, 10, 0}, + /* 2 */ {OP_Column, 0, 0, 0}, + /* 3 */ {OP_Ne, 0, 9, 0}, + /* 4 */ {OP_Rowid, 0, 0, 0}, + /* 5 */ {OP_Column, 0, 1, 0}, + /* 6 */ {OP_AddImm, 0, 0, 0}, + /* 7 */ {OP_Copy, 0, 0, 0}, + /* 8 */ {OP_Goto, 0, 11, 0}, + /* 9 */ {OP_Next, 0, 2, 0}, + /* 10 */ {OP_Integer, 0, 0, 0}, + /* 11 */ {OP_Close, 0, 0, 0} + }; + VdbeOp *aOp; + pDb = &db->aDb[p->iDb]; + memId = p->regCtr; + assert( sqlite3SchemaMutexHeld(db, 0, pDb->pSchema) ); + sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenRead); + sqlite3VdbeLoadString(v, memId-1, p->pTab->zName); + aOp = sqlite3VdbeAddOpList(v, ArraySize(autoInc), autoInc, iLn); + if( aOp==0 ) break; + aOp[0].p2 = memId; + aOp[0].p3 = memId+2; + aOp[2].p3 = memId; + aOp[3].p1 = memId-1; + aOp[3].p3 = memId; + aOp[3].p5 = SQLITE_JUMPIFNULL; + aOp[4].p2 = memId+1; + aOp[5].p3 = memId; + aOp[6].p1 = memId; + aOp[7].p2 = memId+2; + aOp[7].p1 = memId; + aOp[10].p2 = memId; + if( pParse->nTab==0 ) pParse->nTab = 1; + } +} + +/* +** Update the maximum rowid for an autoincrement calculation. +** +** This routine should be called when the regRowid register holds a +** new rowid that is about to be inserted. If that new rowid is +** larger than the maximum rowid in the memId memory cell, then the +** memory cell is updated. +*/ +static void autoIncStep(Parse *pParse, int memId, int regRowid){ + if( memId>0 ){ + sqlite3VdbeAddOp2(pParse->pVdbe, OP_MemMax, memId, regRowid); + } +} + +/* +** This routine generates the code needed to write autoincrement +** maximum rowid values back into the sqlite_sequence register. +** Every statement that might do an INSERT into an autoincrement +** table (either directly or through triggers) needs to call this +** routine just before the "exit" code. +*/ +static SQLITE_NOINLINE void autoIncrementEnd(Parse *pParse){ + AutoincInfo *p; + Vdbe *v = pParse->pVdbe; + sqlite3 *db = pParse->db; + + assert( v ); + for(p = pParse->pAinc; p; p = p->pNext){ + static const int iLn = VDBE_OFFSET_LINENO(2); + static const VdbeOpList autoIncEnd[] = { + /* 0 */ {OP_NotNull, 0, 2, 0}, + /* 1 */ {OP_NewRowid, 0, 0, 0}, + /* 2 */ {OP_MakeRecord, 0, 2, 0}, + /* 3 */ {OP_Insert, 0, 0, 0}, + /* 4 */ {OP_Close, 0, 0, 0} + }; + VdbeOp *aOp; + Db *pDb = &db->aDb[p->iDb]; + int iRec; + int memId = p->regCtr; + + iRec = sqlite3GetTempReg(pParse); + assert( sqlite3SchemaMutexHeld(db, 0, pDb->pSchema) ); + sqlite3VdbeAddOp3(v, OP_Le, memId+2, sqlite3VdbeCurrentAddr(v)+7, memId); + VdbeCoverage(v); + sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenWrite); + aOp = sqlite3VdbeAddOpList(v, ArraySize(autoIncEnd), autoIncEnd, iLn); + if( aOp==0 ) break; + aOp[0].p1 = memId+1; + aOp[1].p2 = memId+1; + aOp[2].p1 = memId-1; + aOp[2].p3 = iRec; + aOp[3].p2 = iRec; + aOp[3].p3 = memId+1; + aOp[3].p5 = OPFLAG_APPEND; + sqlite3ReleaseTempReg(pParse, iRec); + } +} +SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse){ + if( pParse->pAinc ) autoIncrementEnd(pParse); +} +#else +/* +** If SQLITE_OMIT_AUTOINCREMENT is defined, then the three routines +** above are all no-ops +*/ +# define autoIncBegin(A,B,C) (0) +# define autoIncStep(A,B,C) +#endif /* SQLITE_OMIT_AUTOINCREMENT */ + +/* +** If argument pVal is a Select object returned by an sqlite3MultiValues() +** that was able to use the co-routine optimization, finish coding the +** co-routine. +*/ +SQLITE_PRIVATE void sqlite3MultiValuesEnd(Parse *pParse, Select *pVal){ + if( ALWAYS(pVal) && pVal->pSrc->nSrc>0 ){ + SrcItem *pItem = &pVal->pSrc->a[0]; + assert( (pItem->fg.isSubquery && pItem->u4.pSubq!=0) || pParse->nErr ); + if( pItem->fg.isSubquery ){ + sqlite3VdbeEndCoroutine(pParse->pVdbe, pItem->u4.pSubq->regReturn); + sqlite3VdbeJumpHere(pParse->pVdbe, pItem->u4.pSubq->addrFillSub - 1); + } + } +} + +/* +** Return true if all expressions in the expression-list passed as the +** only argument are constant. +*/ +static int exprListIsConstant(Parse *pParse, ExprList *pRow){ + int ii; + for(ii=0; iinExpr; ii++){ + if( 0==sqlite3ExprIsConstant(pParse, pRow->a[ii].pExpr) ) return 0; + } + return 1; +} + +/* +** Return true if all expressions in the expression-list passed as the +** only argument are both constant and have no affinity. +*/ +static int exprListIsNoAffinity(Parse *pParse, ExprList *pRow){ + int ii; + if( exprListIsConstant(pParse,pRow)==0 ) return 0; + for(ii=0; iinExpr; ii++){ + Expr *pExpr = pRow->a[ii].pExpr; + assert( pExpr->op!=TK_RAISE ); + assert( pExpr->affExpr==0 ); + if( 0!=sqlite3ExprAffinity(pExpr) ) return 0; + } + return 1; + +} + +/* +** This function is called by the parser for the second and subsequent +** rows of a multi-row VALUES clause. Argument pLeft is the part of +** the VALUES clause already parsed, argument pRow is the vector of values +** for the new row. The Select object returned represents the complete +** VALUES clause, including the new row. +** +** There are two ways in which this may be achieved - by incremental +** coding of a co-routine (the "co-routine" method) or by returning a +** Select object equivalent to the following (the "UNION ALL" method): +** +** "pLeft UNION ALL SELECT pRow" +** +** If the VALUES clause contains a lot of rows, this compound Select +** object may consume a lot of memory. +** +** When the co-routine method is used, each row that will be returned +** by the VALUES clause is coded into part of a co-routine as it is +** passed to this function. The returned Select object is equivalent to: +** +** SELECT * FROM ( +** Select object to read co-routine +** ) +** +** The co-routine method is used in most cases. Exceptions are: +** +** a) If the current statement has a WITH clause. This is to avoid +** statements like: +** +** WITH cte AS ( VALUES('x'), ('y') ... ) +** SELECT * FROM cte AS a, cte AS b; +** +** This will not work, as the co-routine uses a hard-coded register +** for its OP_Yield instructions, and so it is not possible for two +** cursors to iterate through it concurrently. +** +** b) The schema is currently being parsed (i.e. the VALUES clause is part +** of a schema item like a VIEW or TRIGGER). In this case there is no VM +** being generated when parsing is taking place, and so generating +** a co-routine is not possible. +** +** c) There are non-constant expressions in the VALUES clause (e.g. +** the VALUES clause is part of a correlated sub-query). +** +** d) One or more of the values in the first row of the VALUES clause +** has an affinity (i.e. is a CAST expression). This causes problems +** because the complex rules SQLite uses (see function +** sqlite3SubqueryColumnTypes() in select.c) to determine the effective +** affinity of such a column for all rows require access to all values in +** the column simultaneously. +*/ +SQLITE_PRIVATE Select *sqlite3MultiValues(Parse *pParse, Select *pLeft, ExprList *pRow){ + + if( pParse->bHasWith /* condition (a) above */ + || pParse->db->init.busy /* condition (b) above */ + || exprListIsConstant(pParse,pRow)==0 /* condition (c) above */ + || (pLeft->pSrc->nSrc==0 && + exprListIsNoAffinity(pParse,pLeft->pEList)==0) /* condition (d) above */ + || IN_SPECIAL_PARSE + ){ + /* The co-routine method cannot be used. Fall back to UNION ALL. */ + Select *pSelect = 0; + int f = SF_Values | SF_MultiValue; + if( pLeft->pSrc->nSrc ){ + sqlite3MultiValuesEnd(pParse, pLeft); + f = SF_Values; + }else if( pLeft->pPrior ){ + /* In this case set the SF_MultiValue flag only if it was set on pLeft */ + f = (f & pLeft->selFlags); + } + pSelect = sqlite3SelectNew(pParse, pRow, 0, 0, 0, 0, 0, f, 0); + pLeft->selFlags &= ~(u32)SF_MultiValue; + if( pSelect ){ + pSelect->op = TK_ALL; + pSelect->pPrior = pLeft; + pLeft = pSelect; + } + }else{ + SrcItem *p = 0; /* SrcItem that reads from co-routine */ + + if( pLeft->pSrc->nSrc==0 ){ + /* Co-routine has not yet been started and the special Select object + ** that accesses the co-routine has not yet been created. This block + ** does both those things. */ + Vdbe *v = sqlite3GetVdbe(pParse); + Select *pRet = sqlite3SelectNew(pParse, 0, 0, 0, 0, 0, 0, 0, 0); + + /* Ensure the database schema has been read. This is to ensure we have + ** the correct text encoding. */ + if( (pParse->db->mDbFlags & DBFLAG_SchemaKnownOk)==0 ){ + sqlite3ReadSchema(pParse); + } + + if( pRet ){ + SelectDest dest; + Subquery *pSubq; + pRet->pSrc->nSrc = 1; + pRet->pPrior = pLeft->pPrior; + pRet->op = pLeft->op; + if( pRet->pPrior ) pRet->selFlags |= SF_Values; + pLeft->pPrior = 0; + pLeft->op = TK_SELECT; + assert( pLeft->pNext==0 ); + assert( pRet->pNext==0 ); + p = &pRet->pSrc->a[0]; + p->fg.viaCoroutine = 1; + p->iCursor = -1; + assert( !p->fg.isIndexedBy && !p->fg.isTabFunc ); + p->u1.nRow = 2; + if( sqlite3SrcItemAttachSubquery(pParse, p, pLeft, 0) ){ + pSubq = p->u4.pSubq; + pSubq->addrFillSub = sqlite3VdbeCurrentAddr(v) + 1; + pSubq->regReturn = ++pParse->nMem; + sqlite3VdbeAddOp3(v, OP_InitCoroutine, + pSubq->regReturn, 0, pSubq->addrFillSub); + sqlite3SelectDestInit(&dest, SRT_Coroutine, pSubq->regReturn); + + /* Allocate registers for the output of the co-routine. Do so so + ** that there are two unused registers immediately before those + ** used by the co-routine. This allows the code in sqlite3Insert() + ** to use these registers directly, instead of copying the output + ** of the co-routine to a separate array for processing. */ + dest.iSdst = pParse->nMem + 3; + dest.nSdst = pLeft->pEList->nExpr; + pParse->nMem += 2 + dest.nSdst; + + pLeft->selFlags |= SF_MultiValue; + sqlite3Select(pParse, pLeft, &dest); + pSubq->regResult = dest.iSdst; + assert( pParse->nErr || dest.iSdst>0 ); + } + pLeft = pRet; + } + }else{ + p = &pLeft->pSrc->a[0]; + assert( !p->fg.isTabFunc && !p->fg.isIndexedBy ); + p->u1.nRow++; + } + + if( pParse->nErr==0 ){ + Subquery *pSubq; + assert( p!=0 ); + assert( p->fg.isSubquery ); + pSubq = p->u4.pSubq; + assert( pSubq!=0 ); + assert( pSubq->pSelect!=0 ); + assert( pSubq->pSelect->pEList!=0 ); + if( pSubq->pSelect->pEList->nExpr!=pRow->nExpr ){ + sqlite3SelectWrongNumTermsError(pParse, pSubq->pSelect); + }else{ + sqlite3ExprCodeExprList(pParse, pRow, pSubq->regResult, 0, 0); + sqlite3VdbeAddOp1(pParse->pVdbe, OP_Yield, pSubq->regReturn); + } + } + sqlite3ExprListDelete(pParse->db, pRow); + } + + return pLeft; +} + +/* Forward declaration */ +static int xferOptimization( + Parse *pParse, /* Parser context */ + Table *pDest, /* The table we are inserting into */ + Select *pSelect, /* A SELECT statement to use as the data source */ + int onError, /* How to handle constraint errors */ + int iDbDest /* The database of pDest */ +); + +/* +** This routine is called to handle SQL of the following forms: +** +** insert into TABLE (IDLIST) values(EXPRLIST),(EXPRLIST),... +** insert into TABLE (IDLIST) select +** insert into TABLE (IDLIST) default values +** +** The IDLIST following the table name is always optional. If omitted, +** then a list of all (non-hidden) columns for the table is substituted. +** The IDLIST appears in the pColumn parameter. pColumn is NULL if IDLIST +** is omitted. +** +** For the pSelect parameter holds the values to be inserted for the +** first two forms shown above. A VALUES clause is really just short-hand +** for a SELECT statement that omits the FROM clause and everything else +** that follows. If the pSelect parameter is NULL, that means that the +** DEFAULT VALUES form of the INSERT statement is intended. +** +** The code generated follows one of four templates. For a simple +** insert with data coming from a single-row VALUES clause, the code executes +** once straight down through. Pseudo-code follows (we call this +** the "1st template"): +** +** open write cursor to
    and its indices +** put VALUES clause expressions into registers +** write the resulting record into
    +** cleanup +** +** The three remaining templates assume the statement is of the form +** +** INSERT INTO
    SELECT ... +** +** If the SELECT clause is of the restricted form "SELECT * FROM " - +** in other words if the SELECT pulls all columns from a single table +** and there is no WHERE or LIMIT or GROUP BY or ORDER BY clauses, and +** if and are distinct tables but have identical +** schemas, including all the same indices, then a special optimization +** is invoked that copies raw records from over to . +** See the xferOptimization() function for the implementation of this +** template. This is the 2nd template. +** +** open a write cursor to
    +** open read cursor on +** transfer all records in over to
    +** close cursors +** foreach index on
    +** open a write cursor on the
    index +** open a read cursor on the corresponding index +** transfer all records from the read to the write cursors +** close cursors +** end foreach +** +** The 3rd template is for when the second template does not apply +** and the SELECT clause does not read from
    at any time. +** The generated code follows this template: +** +** X <- A +** goto B +** A: setup for the SELECT +** loop over the rows in the SELECT +** load values into registers R..R+n +** yield X +** end loop +** cleanup after the SELECT +** end-coroutine X +** B: open write cursor to
    and its indices +** C: yield X, at EOF goto D +** insert the select result into
    from R..R+n +** goto C +** D: cleanup +** +** The 4th template is used if the insert statement takes its +** values from a SELECT but the data is being inserted into a table +** that is also read as part of the SELECT. In the third form, +** we have to use an intermediate table to store the results of +** the select. The template is like this: +** +** X <- A +** goto B +** A: setup for the SELECT +** loop over the tables in the SELECT +** load value into register R..R+n +** yield X +** end loop +** cleanup after the SELECT +** end co-routine R +** B: open temp table +** L: yield X, at EOF goto M +** insert row from R..R+n into temp table +** goto L +** M: open write cursor to
    and its indices +** rewind temp table +** C: loop over rows of intermediate table +** transfer values form intermediate table into
    +** end loop +** D: cleanup +*/ +SQLITE_PRIVATE void sqlite3Insert( + Parse *pParse, /* Parser context */ + SrcList *pTabList, /* Name of table into which we are inserting */ + Select *pSelect, /* A SELECT statement to use as the data source */ + IdList *pColumn, /* Column names corresponding to IDLIST, or NULL. */ + int onError, /* How to handle constraint errors */ + Upsert *pUpsert /* ON CONFLICT clauses for upsert, or NULL */ +){ + sqlite3 *db; /* The main database structure */ + Table *pTab; /* The table to insert into. aka TABLE */ + int i, j; /* Loop counters */ + Vdbe *v; /* Generate code into this virtual machine */ + Index *pIdx; /* For looping over indices of the table */ + int nColumn; /* Number of columns in the data */ + int nHidden = 0; /* Number of hidden columns if TABLE is virtual */ + int iDataCur = 0; /* VDBE cursor that is the main data repository */ + int iIdxCur = 0; /* First index cursor */ + int ipkColumn = -1; /* Column that is the INTEGER PRIMARY KEY */ + int endOfLoop; /* Label for the end of the insertion loop */ + int srcTab = 0; /* Data comes from this temporary cursor if >=0 */ + int addrInsTop = 0; /* Jump to label "D" */ + int addrCont = 0; /* Top of insert loop. Label "C" in templates 3 and 4 */ + SelectDest dest; /* Destination for SELECT on rhs of INSERT */ + int iDb; /* Index of database holding TABLE */ + u8 useTempTable = 0; /* Store SELECT results in intermediate table */ + u8 appendFlag = 0; /* True if the insert is likely to be an append */ + u8 withoutRowid; /* 0 for normal table. 1 for WITHOUT ROWID table */ + u8 bIdListInOrder; /* True if IDLIST is in table order */ + ExprList *pList = 0; /* List of VALUES() to be inserted */ + int iRegStore; /* Register in which to store next column */ + + /* Register allocations */ + int regFromSelect = 0;/* Base register for data coming from SELECT */ + int regAutoinc = 0; /* Register holding the AUTOINCREMENT counter */ + int regRowCount = 0; /* Memory cell used for the row counter */ + int regIns; /* Block of regs holding rowid+data being inserted */ + int regRowid; /* registers holding insert rowid */ + int regData; /* register holding first column to insert */ + int *aRegIdx = 0; /* One register allocated to each index */ + int *aTabColMap = 0; /* Mapping from pTab columns to pCol entries */ + +#ifndef SQLITE_OMIT_TRIGGER + int isView; /* True if attempting to insert into a view */ + Trigger *pTrigger; /* List of triggers on pTab, if required */ + int tmask; /* Mask of trigger times */ +#endif + + db = pParse->db; + assert( db->pParse==pParse ); + if( pParse->nErr ){ + goto insert_cleanup; + } + assert( db->mallocFailed==0 ); + dest.iSDParm = 0; /* Suppress a harmless compiler warning */ + + /* If the Select object is really just a simple VALUES() list with a + ** single row (the common case) then keep that one row of values + ** and discard the other (unused) parts of the pSelect object + */ + if( pSelect && (pSelect->selFlags & SF_Values)!=0 && pSelect->pPrior==0 ){ + pList = pSelect->pEList; + pSelect->pEList = 0; + sqlite3SelectDelete(db, pSelect); + pSelect = 0; + } + + /* Locate the table into which we will be inserting new information. + */ + assert( pTabList->nSrc==1 ); + pTab = sqlite3SrcListLookup(pParse, pTabList); + if( pTab==0 ){ + goto insert_cleanup; + } + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + assert( iDbnDb ); + if( sqlite3AuthCheck(pParse, SQLITE_INSERT, pTab->zName, 0, + db->aDb[iDb].zDbSName) ){ + goto insert_cleanup; + } + withoutRowid = !HasRowid(pTab); + + /* Figure out if we have any triggers and if the table being + ** inserted into is a view + */ +#ifndef SQLITE_OMIT_TRIGGER + pTrigger = sqlite3TriggersExist(pParse, pTab, TK_INSERT, 0, &tmask); + isView = IsView(pTab); +#else +# define pTrigger 0 +# define tmask 0 +# define isView 0 +#endif +#ifdef SQLITE_OMIT_VIEW +# undef isView +# define isView 0 +#endif + assert( (pTrigger && tmask) || (pTrigger==0 && tmask==0) ); + +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x10000 ){ + sqlite3TreeViewLine(0, "In sqlite3Insert() at %s:%d", __FILE__, __LINE__); + sqlite3TreeViewInsert(pParse->pWith, pTabList, pColumn, pSelect, pList, + onError, pUpsert, pTrigger); + } +#endif + + /* If pTab is really a view, make sure it has been initialized. + ** ViewGetColumnNames() is a no-op if pTab is not a view. + */ + if( sqlite3ViewGetColumnNames(pParse, pTab) ){ + goto insert_cleanup; + } + + /* Cannot insert into a read-only table. + */ + if( sqlite3IsReadOnly(pParse, pTab, pTrigger) ){ + goto insert_cleanup; + } + + /* Allocate a VDBE + */ + v = sqlite3GetVdbe(pParse); + if( v==0 ) goto insert_cleanup; + if( pParse->nested==0 ) sqlite3VdbeCountChanges(v); + sqlite3BeginWriteOperation(pParse, pSelect || pTrigger, iDb); + +#ifndef SQLITE_OMIT_XFER_OPT + /* If the statement is of the form + ** + ** INSERT INTO SELECT * FROM ; + ** + ** Then special optimizations can be applied that make the transfer + ** very fast and which reduce fragmentation of indices. + ** + ** This is the 2nd template. + */ + if( pColumn==0 + && pSelect!=0 + && pTrigger==0 + && xferOptimization(pParse, pTab, pSelect, onError, iDb) + ){ + assert( !pTrigger ); + assert( pList==0 ); + goto insert_end; + } +#endif /* SQLITE_OMIT_XFER_OPT */ + + /* If this is an AUTOINCREMENT table, look up the sequence number in the + ** sqlite_sequence table and store it in memory cell regAutoinc. + */ + regAutoinc = autoIncBegin(pParse, iDb, pTab); + + /* Allocate a block registers to hold the rowid and the values + ** for all columns of the new row. + */ + regRowid = regIns = pParse->nMem+1; + pParse->nMem += pTab->nCol + 1; + if( IsVirtual(pTab) ){ + regRowid++; + pParse->nMem++; + } + regData = regRowid+1; + + /* If the INSERT statement included an IDLIST term, then make sure + ** all elements of the IDLIST really are columns of the table and + ** remember the column indices. + ** + ** If the table has an INTEGER PRIMARY KEY column and that column + ** is named in the IDLIST, then record in the ipkColumn variable + ** the index into IDLIST of the primary key column. ipkColumn is + ** the index of the primary key as it appears in IDLIST, not as + ** is appears in the original table. (The index of the INTEGER + ** PRIMARY KEY in the original table is pTab->iPKey.) After this + ** loop, if ipkColumn==(-1), that means that integer primary key + ** is unspecified, and hence the table is either WITHOUT ROWID or + ** it will automatically generated an integer primary key. + ** + ** bIdListInOrder is true if the columns in IDLIST are in storage + ** order. This enables an optimization that avoids shuffling the + ** columns into storage order. False negatives are harmless, + ** but false positives will cause database corruption. + */ + bIdListInOrder = (pTab->tabFlags & (TF_OOOHidden|TF_HasStored))==0; + if( pColumn ){ + aTabColMap = sqlite3DbMallocZero(db, pTab->nCol*sizeof(int)); + if( aTabColMap==0 ) goto insert_cleanup; + for(i=0; inId; i++){ + j = sqlite3ColumnIndex(pTab, pColumn->a[i].zName); + if( j>=0 ){ + if( aTabColMap[j]==0 ) aTabColMap[j] = i+1; + if( i!=j ) bIdListInOrder = 0; + if( j==pTab->iPKey ){ + ipkColumn = i; assert( !withoutRowid ); + } +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + if( pTab->aCol[j].colFlags & (COLFLAG_STORED|COLFLAG_VIRTUAL) ){ + sqlite3ErrorMsg(pParse, + "cannot INSERT into generated column \"%s\"", + pTab->aCol[j].zCnName); + goto insert_cleanup; + } +#endif + }else{ + if( sqlite3IsRowid(pColumn->a[i].zName) && !withoutRowid ){ + ipkColumn = i; + bIdListInOrder = 0; + }else{ + sqlite3ErrorMsg(pParse, "table %S has no column named %s", + pTabList->a, pColumn->a[i].zName); + pParse->checkSchema = 1; + goto insert_cleanup; + } + } + } + } + + /* Figure out how many columns of data are supplied. If the data + ** is coming from a SELECT statement, then generate a co-routine that + ** produces a single row of the SELECT on each invocation. The + ** co-routine is the common header to the 3rd and 4th templates. + */ + if( pSelect ){ + /* Data is coming from a SELECT or from a multi-row VALUES clause. + ** Generate a co-routine to run the SELECT. */ + int rc; /* Result code */ + + if( pSelect->pSrc->nSrc==1 + && pSelect->pSrc->a[0].fg.viaCoroutine + && pSelect->pPrior==0 + ){ + SrcItem *pItem = &pSelect->pSrc->a[0]; + Subquery *pSubq; + assert( pItem->fg.isSubquery ); + pSubq = pItem->u4.pSubq; + dest.iSDParm = pSubq->regReturn; + regFromSelect = pSubq->regResult; + assert( pSubq->pSelect!=0 ); + assert( pSubq->pSelect->pEList!=0 ); + nColumn = pSubq->pSelect->pEList->nExpr; + ExplainQueryPlan((pParse, 0, "SCAN %S", pItem)); + if( bIdListInOrder && nColumn==pTab->nCol ){ + regData = regFromSelect; + regRowid = regData - 1; + regIns = regRowid - (IsVirtual(pTab) ? 1 : 0); + } + }else{ + int addrTop; /* Top of the co-routine */ + int regYield = ++pParse->nMem; + addrTop = sqlite3VdbeCurrentAddr(v) + 1; + sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, addrTop); + sqlite3SelectDestInit(&dest, SRT_Coroutine, regYield); + dest.iSdst = bIdListInOrder ? regData : 0; + dest.nSdst = pTab->nCol; + rc = sqlite3Select(pParse, pSelect, &dest); + regFromSelect = dest.iSdst; + assert( db->pParse==pParse ); + if( rc || pParse->nErr ) goto insert_cleanup; + assert( db->mallocFailed==0 ); + sqlite3VdbeEndCoroutine(v, regYield); + sqlite3VdbeJumpHere(v, addrTop - 1); /* label B: */ + assert( pSelect->pEList ); + nColumn = pSelect->pEList->nExpr; + } + + /* Set useTempTable to TRUE if the result of the SELECT statement + ** should be written into a temporary table (template 4). Set to + ** FALSE if each output row of the SELECT can be written directly into + ** the destination table (template 3). + ** + ** A temp table must be used if the table being updated is also one + ** of the tables being read by the SELECT statement. Also use a + ** temp table in the case of row triggers. + */ + if( pTrigger || readsTable(pParse, iDb, pTab) ){ + useTempTable = 1; + } + + if( useTempTable ){ + /* Invoke the coroutine to extract information from the SELECT + ** and add it to a transient table srcTab. The code generated + ** here is from the 4th template: + ** + ** B: open temp table + ** L: yield X, goto M at EOF + ** insert row from R..R+n into temp table + ** goto L + ** M: ... + */ + int regRec; /* Register to hold packed record */ + int regTempRowid; /* Register to hold temp table ROWID */ + int addrL; /* Label "L" */ + + srcTab = pParse->nTab++; + regRec = sqlite3GetTempReg(pParse); + regTempRowid = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, srcTab, nColumn); + addrL = sqlite3VdbeAddOp1(v, OP_Yield, dest.iSDParm); VdbeCoverage(v); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regFromSelect, nColumn, regRec); + sqlite3VdbeAddOp2(v, OP_NewRowid, srcTab, regTempRowid); + sqlite3VdbeAddOp3(v, OP_Insert, srcTab, regRec, regTempRowid); + sqlite3VdbeGoto(v, addrL); + sqlite3VdbeJumpHere(v, addrL); + sqlite3ReleaseTempReg(pParse, regRec); + sqlite3ReleaseTempReg(pParse, regTempRowid); + } + }else{ + /* This is the case if the data for the INSERT is coming from a + ** single-row VALUES clause + */ + NameContext sNC; + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = pParse; + srcTab = -1; + assert( useTempTable==0 ); + if( pList ){ + nColumn = pList->nExpr; + if( sqlite3ResolveExprListNames(&sNC, pList) ){ + goto insert_cleanup; + } + }else{ + nColumn = 0; + } + } + + /* If there is no IDLIST term but the table has an integer primary + ** key, the set the ipkColumn variable to the integer primary key + ** column index in the original table definition. + */ + if( pColumn==0 && nColumn>0 ){ + ipkColumn = pTab->iPKey; +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + if( ipkColumn>=0 && (pTab->tabFlags & TF_HasGenerated)!=0 ){ + testcase( pTab->tabFlags & TF_HasVirtual ); + testcase( pTab->tabFlags & TF_HasStored ); + for(i=ipkColumn-1; i>=0; i--){ + if( pTab->aCol[i].colFlags & COLFLAG_GENERATED ){ + testcase( pTab->aCol[i].colFlags & COLFLAG_VIRTUAL ); + testcase( pTab->aCol[i].colFlags & COLFLAG_STORED ); + ipkColumn--; + } + } + } +#endif + + /* Make sure the number of columns in the source data matches the number + ** of columns to be inserted into the table. + */ + assert( TF_HasHidden==COLFLAG_HIDDEN ); + assert( TF_HasGenerated==COLFLAG_GENERATED ); + assert( COLFLAG_NOINSERT==(COLFLAG_GENERATED|COLFLAG_HIDDEN) ); + if( (pTab->tabFlags & (TF_HasGenerated|TF_HasHidden))!=0 ){ + for(i=0; inCol; i++){ + if( pTab->aCol[i].colFlags & COLFLAG_NOINSERT ) nHidden++; + } + } + if( nColumn!=(pTab->nCol-nHidden) ){ + sqlite3ErrorMsg(pParse, + "table %S has %d columns but %d values were supplied", + pTabList->a, pTab->nCol-nHidden, nColumn); + goto insert_cleanup; + } + } + if( pColumn!=0 && nColumn!=pColumn->nId ){ + sqlite3ErrorMsg(pParse, "%d values for %d columns", nColumn, pColumn->nId); + goto insert_cleanup; + } + + /* Initialize the count of rows to be inserted + */ + if( (db->flags & SQLITE_CountRows)!=0 + && !pParse->nested + && !pParse->pTriggerTab + && !pParse->bReturning + ){ + regRowCount = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount); + } + + /* If this is not a view, open the table and and all indices */ + if( !isView ){ + int nIdx; + nIdx = sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenWrite, 0, -1, 0, + &iDataCur, &iIdxCur); + aRegIdx = sqlite3DbMallocRawNN(db, sizeof(int)*(nIdx+2)); + if( aRegIdx==0 ){ + goto insert_cleanup; + } + for(i=0, pIdx=pTab->pIndex; ipNext, i++){ + assert( pIdx ); + aRegIdx[i] = ++pParse->nMem; + pParse->nMem += pIdx->nColumn; + } + aRegIdx[i] = ++pParse->nMem; /* Register to store the table record */ + } +#ifndef SQLITE_OMIT_UPSERT + if( pUpsert ){ + Upsert *pNx; + if( IsVirtual(pTab) ){ + sqlite3ErrorMsg(pParse, "UPSERT not implemented for virtual table \"%s\"", + pTab->zName); + goto insert_cleanup; + } + if( IsView(pTab) ){ + sqlite3ErrorMsg(pParse, "cannot UPSERT a view"); + goto insert_cleanup; + } + if( sqlite3HasExplicitNulls(pParse, pUpsert->pUpsertTarget) ){ + goto insert_cleanup; + } + pTabList->a[0].iCursor = iDataCur; + pNx = pUpsert; + do{ + pNx->pUpsertSrc = pTabList; + pNx->regData = regData; + pNx->iDataCur = iDataCur; + pNx->iIdxCur = iIdxCur; + if( pNx->pUpsertTarget ){ + if( sqlite3UpsertAnalyzeTarget(pParse, pTabList, pNx, pUpsert) ){ + goto insert_cleanup; + } + } + pNx = pNx->pNextUpsert; + }while( pNx!=0 ); + } +#endif + + + /* This is the top of the main insertion loop */ + if( useTempTable ){ + /* This block codes the top of loop only. The complete loop is the + ** following pseudocode (template 4): + ** + ** rewind temp table, if empty goto D + ** C: loop over rows of intermediate table + ** transfer values form intermediate table into
    + ** end loop + ** D: ... + */ + addrInsTop = sqlite3VdbeAddOp1(v, OP_Rewind, srcTab); VdbeCoverage(v); + addrCont = sqlite3VdbeCurrentAddr(v); + }else if( pSelect ){ + /* This block codes the top of loop only. The complete loop is the + ** following pseudocode (template 3): + ** + ** C: yield X, at EOF goto D + ** insert the select result into
    from R..R+n + ** goto C + ** D: ... + */ + sqlite3VdbeReleaseRegisters(pParse, regData, pTab->nCol, 0, 0); + addrInsTop = addrCont = sqlite3VdbeAddOp1(v, OP_Yield, dest.iSDParm); + VdbeCoverage(v); + if( ipkColumn>=0 ){ + /* tag-20191021-001: If the INTEGER PRIMARY KEY is being generated by the + ** SELECT, go ahead and copy the value into the rowid slot now, so that + ** the value does not get overwritten by a NULL at tag-20191021-002. */ + sqlite3VdbeAddOp2(v, OP_Copy, regFromSelect+ipkColumn, regRowid); + } + } + + /* Compute data for ordinary columns of the new entry. Values + ** are written in storage order into registers starting with regData. + ** Only ordinary columns are computed in this loop. The rowid + ** (if there is one) is computed later and generated columns are + ** computed after the rowid since they might depend on the value + ** of the rowid. + */ + nHidden = 0; + iRegStore = regData; assert( regData==regRowid+1 ); + for(i=0; inCol; i++, iRegStore++){ + int k; + u32 colFlags; + assert( i>=nHidden ); + if( i==pTab->iPKey ){ + /* tag-20191021-002: References to the INTEGER PRIMARY KEY are filled + ** using the rowid. So put a NULL in the IPK slot of the record to avoid + ** using excess space. The file format definition requires this extra + ** NULL - we cannot optimize further by skipping the column completely */ + sqlite3VdbeAddOp1(v, OP_SoftNull, iRegStore); + continue; + } + if( ((colFlags = pTab->aCol[i].colFlags) & COLFLAG_NOINSERT)!=0 ){ + nHidden++; + if( (colFlags & COLFLAG_VIRTUAL)!=0 ){ + /* Virtual columns do not participate in OP_MakeRecord. So back up + ** iRegStore by one slot to compensate for the iRegStore++ in the + ** outer for() loop */ + iRegStore--; + continue; + }else if( (colFlags & COLFLAG_STORED)!=0 ){ + /* Stored columns are computed later. But if there are BEFORE + ** triggers, the slots used for stored columns will be OP_Copy-ed + ** to a second block of registers, so the register needs to be + ** initialized to NULL to avoid an uninitialized register read */ + if( tmask & TRIGGER_BEFORE ){ + sqlite3VdbeAddOp1(v, OP_SoftNull, iRegStore); + } + continue; + }else if( pColumn==0 ){ + /* Hidden columns that are not explicitly named in the INSERT + ** get their default value */ + sqlite3ExprCodeFactorable(pParse, + sqlite3ColumnExpr(pTab, &pTab->aCol[i]), + iRegStore); + continue; + } + } + if( pColumn ){ + j = aTabColMap[i]; + assert( j>=0 && j<=pColumn->nId ); + if( j==0 ){ + /* A column not named in the insert column list gets its + ** default value */ + sqlite3ExprCodeFactorable(pParse, + sqlite3ColumnExpr(pTab, &pTab->aCol[i]), + iRegStore); + continue; + } + k = j - 1; + }else if( nColumn==0 ){ + /* This is INSERT INTO ... DEFAULT VALUES. Load the default value. */ + sqlite3ExprCodeFactorable(pParse, + sqlite3ColumnExpr(pTab, &pTab->aCol[i]), + iRegStore); + continue; + }else{ + k = i - nHidden; + } + + if( useTempTable ){ + sqlite3VdbeAddOp3(v, OP_Column, srcTab, k, iRegStore); + }else if( pSelect ){ + if( regFromSelect!=regData ){ + sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+k, iRegStore); + } + }else{ + Expr *pX = pList->a[k].pExpr; + int y = sqlite3ExprCodeTarget(pParse, pX, iRegStore); + if( y!=iRegStore ){ + sqlite3VdbeAddOp2(v, + ExprHasProperty(pX, EP_Subquery) ? OP_Copy : OP_SCopy, y, iRegStore); + } + } + } + + + /* Run the BEFORE and INSTEAD OF triggers, if there are any + */ + endOfLoop = sqlite3VdbeMakeLabel(pParse); + if( tmask & TRIGGER_BEFORE ){ + int regCols = sqlite3GetTempRange(pParse, pTab->nCol+1); + + /* build the NEW.* reference row. Note that if there is an INTEGER + ** PRIMARY KEY into which a NULL is being inserted, that NULL will be + ** translated into a unique ID for the row. But on a BEFORE trigger, + ** we do not know what the unique ID will be (because the insert has + ** not happened yet) so we substitute a rowid of -1 + */ + if( ipkColumn<0 ){ + sqlite3VdbeAddOp2(v, OP_Integer, -1, regCols); + }else{ + int addr1; + assert( !withoutRowid ); + if( useTempTable ){ + sqlite3VdbeAddOp3(v, OP_Column, srcTab, ipkColumn, regCols); + }else{ + assert( pSelect==0 ); /* Otherwise useTempTable is true */ + sqlite3ExprCode(pParse, pList->a[ipkColumn].pExpr, regCols); + } + addr1 = sqlite3VdbeAddOp1(v, OP_NotNull, regCols); VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Integer, -1, regCols); + sqlite3VdbeJumpHere(v, addr1); + sqlite3VdbeAddOp1(v, OP_MustBeInt, regCols); VdbeCoverage(v); + } + + /* Copy the new data already generated. */ + assert( pTab->nNVCol>0 || pParse->nErr>0 ); + sqlite3VdbeAddOp3(v, OP_Copy, regRowid+1, regCols+1, pTab->nNVCol-1); + +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + /* Compute the new value for generated columns after all other + ** columns have already been computed. This must be done after + ** computing the ROWID in case one of the generated columns + ** refers to the ROWID. */ + if( pTab->tabFlags & TF_HasGenerated ){ + testcase( pTab->tabFlags & TF_HasVirtual ); + testcase( pTab->tabFlags & TF_HasStored ); + sqlite3ComputeGeneratedColumns(pParse, regCols+1, pTab); + } +#endif + + /* If this is an INSERT on a view with an INSTEAD OF INSERT trigger, + ** do not attempt any conversions before assembling the record. + ** If this is a real table, attempt conversions as required by the + ** table column affinities. + */ + if( !isView ){ + sqlite3TableAffinity(v, pTab, regCols+1); + } + + /* Fire BEFORE or INSTEAD OF triggers */ + sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_BEFORE, + pTab, regCols-pTab->nCol-1, onError, endOfLoop); + + sqlite3ReleaseTempRange(pParse, regCols, pTab->nCol+1); + } + + if( !isView ){ + if( IsVirtual(pTab) ){ + /* The row that the VUpdate opcode will delete: none */ + sqlite3VdbeAddOp2(v, OP_Null, 0, regIns); + } + if( ipkColumn>=0 ){ + /* Compute the new rowid */ + if( useTempTable ){ + sqlite3VdbeAddOp3(v, OP_Column, srcTab, ipkColumn, regRowid); + }else if( pSelect ){ + /* Rowid already initialized at tag-20191021-001 */ + }else{ + Expr *pIpk = pList->a[ipkColumn].pExpr; + if( pIpk->op==TK_NULL && !IsVirtual(pTab) ){ + sqlite3VdbeAddOp3(v, OP_NewRowid, iDataCur, regRowid, regAutoinc); + appendFlag = 1; + }else{ + sqlite3ExprCode(pParse, pList->a[ipkColumn].pExpr, regRowid); + } + } + /* If the PRIMARY KEY expression is NULL, then use OP_NewRowid + ** to generate a unique primary key value. + */ + if( !appendFlag ){ + int addr1; + if( !IsVirtual(pTab) ){ + addr1 = sqlite3VdbeAddOp1(v, OP_NotNull, regRowid); VdbeCoverage(v); + sqlite3VdbeAddOp3(v, OP_NewRowid, iDataCur, regRowid, regAutoinc); + sqlite3VdbeJumpHere(v, addr1); + }else{ + addr1 = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeAddOp2(v, OP_IsNull, regRowid, addr1+2); VdbeCoverage(v); + } + sqlite3VdbeAddOp1(v, OP_MustBeInt, regRowid); VdbeCoverage(v); + } + }else if( IsVirtual(pTab) || withoutRowid ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, regRowid); + }else{ + sqlite3VdbeAddOp3(v, OP_NewRowid, iDataCur, regRowid, regAutoinc); + appendFlag = 1; + } + autoIncStep(pParse, regAutoinc, regRowid); + +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + /* Compute the new value for generated columns after all other + ** columns have already been computed. This must be done after + ** computing the ROWID in case one of the generated columns + ** is derived from the INTEGER PRIMARY KEY. */ + if( pTab->tabFlags & TF_HasGenerated ){ + sqlite3ComputeGeneratedColumns(pParse, regRowid+1, pTab); + } +#endif + + /* Generate code to check constraints and generate index keys and + ** do the insertion. + */ +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pTab) ){ + const char *pVTab = (const char *)sqlite3GetVTable(db, pTab); + sqlite3VtabMakeWritable(pParse, pTab); + sqlite3VdbeAddOp4(v, OP_VUpdate, 1, pTab->nCol+2, regIns, pVTab, P4_VTAB); + sqlite3VdbeChangeP5(v, onError==OE_Default ? OE_Abort : onError); + sqlite3MayAbort(pParse); + }else +#endif + { + int isReplace = 0;/* Set to true if constraints may cause a replace */ + int bUseSeek; /* True to use OPFLAG_SEEKRESULT */ + sqlite3GenerateConstraintChecks(pParse, pTab, aRegIdx, iDataCur, iIdxCur, + regIns, 0, ipkColumn>=0, onError, endOfLoop, &isReplace, 0, pUpsert + ); + if( db->flags & SQLITE_ForeignKeys ){ + sqlite3FkCheck(pParse, pTab, 0, regIns, 0, 0); + } + + /* Set the OPFLAG_USESEEKRESULT flag if either (a) there are no REPLACE + ** constraints or (b) there are no triggers and this table is not a + ** parent table in a foreign key constraint. It is safe to set the + ** flag in the second case as if any REPLACE constraint is hit, an + ** OP_Delete or OP_IdxDelete instruction will be executed on each + ** cursor that is disturbed. And these instructions both clear the + ** VdbeCursor.seekResult variable, disabling the OPFLAG_USESEEKRESULT + ** functionality. */ + bUseSeek = (isReplace==0 || !sqlite3VdbeHasSubProgram(v)); + sqlite3CompleteInsertion(pParse, pTab, iDataCur, iIdxCur, + regIns, aRegIdx, 0, appendFlag, bUseSeek + ); + } +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + }else if( pParse->bReturning ){ + /* If there is a RETURNING clause, populate the rowid register with + ** constant value -1, in case one or more of the returned expressions + ** refer to the "rowid" of the view. */ + sqlite3VdbeAddOp2(v, OP_Integer, -1, regRowid); +#endif + } + + /* Update the count of rows that are inserted + */ + if( regRowCount ){ + sqlite3VdbeAddOp2(v, OP_AddImm, regRowCount, 1); + } + + if( pTrigger ){ + /* Code AFTER triggers */ + sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_AFTER, + pTab, regData-2-pTab->nCol, onError, endOfLoop); + } + + /* The bottom of the main insertion loop, if the data source + ** is a SELECT statement. + */ + sqlite3VdbeResolveLabel(v, endOfLoop); + if( useTempTable ){ + sqlite3VdbeAddOp2(v, OP_Next, srcTab, addrCont); VdbeCoverage(v); + sqlite3VdbeJumpHere(v, addrInsTop); + sqlite3VdbeAddOp1(v, OP_Close, srcTab); + }else if( pSelect ){ + sqlite3VdbeGoto(v, addrCont); +#ifdef SQLITE_DEBUG + /* If we are jumping back to an OP_Yield that is preceded by an + ** OP_ReleaseReg, set the p5 flag on the OP_Goto so that the + ** OP_ReleaseReg will be included in the loop. */ + if( sqlite3VdbeGetOp(v, addrCont-1)->opcode==OP_ReleaseReg ){ + assert( sqlite3VdbeGetOp(v, addrCont)->opcode==OP_Yield ); + sqlite3VdbeChangeP5(v, 1); + } +#endif + sqlite3VdbeJumpHere(v, addrInsTop); + } + +#ifndef SQLITE_OMIT_XFER_OPT +insert_end: +#endif /* SQLITE_OMIT_XFER_OPT */ + /* Update the sqlite_sequence table by storing the content of the + ** maximum rowid counter values recorded while inserting into + ** autoincrement tables. + */ + if( pParse->nested==0 && pParse->pTriggerTab==0 ){ + sqlite3AutoincrementEnd(pParse); + } + + /* + ** Return the number of rows inserted. If this routine is + ** generating code because of a call to sqlite3NestedParse(), do not + ** invoke the callback function. + */ + if( regRowCount ){ + sqlite3CodeChangeCount(v, regRowCount, "rows inserted"); + } + +insert_cleanup: + sqlite3SrcListDelete(db, pTabList); + sqlite3ExprListDelete(db, pList); + sqlite3UpsertDelete(db, pUpsert); + sqlite3SelectDelete(db, pSelect); + if( pColumn ){ + sqlite3IdListDelete(db, pColumn); + sqlite3DbFree(db, aTabColMap); + } + if( aRegIdx ) sqlite3DbNNFreeNN(db, aRegIdx); +} + +/* Make sure "isView" and other macros defined above are undefined. Otherwise +** they may interfere with compilation of other functions in this file +** (or in another file, if this file becomes part of the amalgamation). */ +#ifdef isView + #undef isView +#endif +#ifdef pTrigger + #undef pTrigger +#endif +#ifdef tmask + #undef tmask +#endif + +/* +** Meanings of bits in of pWalker->eCode for +** sqlite3ExprReferencesUpdatedColumn() +*/ +#define CKCNSTRNT_COLUMN 0x01 /* CHECK constraint uses a changing column */ +#define CKCNSTRNT_ROWID 0x02 /* CHECK constraint references the ROWID */ + +/* This is the Walker callback from sqlite3ExprReferencesUpdatedColumn(). +* Set bit 0x01 of pWalker->eCode if pWalker->eCode to 0 and if this +** expression node references any of the +** columns that are being modified by an UPDATE statement. +*/ +static int checkConstraintExprNode(Walker *pWalker, Expr *pExpr){ + if( pExpr->op==TK_COLUMN ){ + assert( pExpr->iColumn>=0 || pExpr->iColumn==-1 ); + if( pExpr->iColumn>=0 ){ + if( pWalker->u.aiCol[pExpr->iColumn]>=0 ){ + pWalker->eCode |= CKCNSTRNT_COLUMN; + } + }else{ + pWalker->eCode |= CKCNSTRNT_ROWID; + } + } + return WRC_Continue; +} + +/* +** pExpr is a CHECK constraint on a row that is being UPDATE-ed. The +** only columns that are modified by the UPDATE are those for which +** aiChng[i]>=0, and also the ROWID is modified if chngRowid is true. +** +** Return true if CHECK constraint pExpr uses any of the +** changing columns (or the rowid if it is changing). In other words, +** return true if this CHECK constraint must be validated for +** the new row in the UPDATE statement. +** +** 2018-09-15: pExpr might also be an expression for an index-on-expressions. +** The operation of this routine is the same - return true if an only if +** the expression uses one or more of columns identified by the second and +** third arguments. +*/ +SQLITE_PRIVATE int sqlite3ExprReferencesUpdatedColumn( + Expr *pExpr, /* The expression to be checked */ + int *aiChng, /* aiChng[x]>=0 if column x changed by the UPDATE */ + int chngRowid /* True if UPDATE changes the rowid */ +){ + Walker w; + memset(&w, 0, sizeof(w)); + w.eCode = 0; + w.xExprCallback = checkConstraintExprNode; + w.u.aiCol = aiChng; + sqlite3WalkExpr(&w, pExpr); + if( !chngRowid ){ + testcase( (w.eCode & CKCNSTRNT_ROWID)!=0 ); + w.eCode &= ~CKCNSTRNT_ROWID; + } + testcase( w.eCode==0 ); + testcase( w.eCode==CKCNSTRNT_COLUMN ); + testcase( w.eCode==CKCNSTRNT_ROWID ); + testcase( w.eCode==(CKCNSTRNT_ROWID|CKCNSTRNT_COLUMN) ); + return w.eCode!=0; +} + +/* +** The sqlite3GenerateConstraintChecks() routine usually wants to visit +** the indexes of a table in the order provided in the Table->pIndex list. +** However, sometimes (rarely - when there is an upsert) it wants to visit +** the indexes in a different order. The following data structures accomplish +** this. +** +** The IndexIterator object is used to walk through all of the indexes +** of a table in either Index.pNext order, or in some other order established +** by an array of IndexListTerm objects. +*/ +typedef struct IndexListTerm IndexListTerm; +typedef struct IndexIterator IndexIterator; +struct IndexIterator { + int eType; /* 0 for Index.pNext list. 1 for an array of IndexListTerm */ + int i; /* Index of the current item from the list */ + union { + struct { /* Use this object for eType==0: A Index.pNext list */ + Index *pIdx; /* The current Index */ + } lx; + struct { /* Use this object for eType==1; Array of IndexListTerm */ + int nIdx; /* Size of the array */ + IndexListTerm *aIdx; /* Array of IndexListTerms */ + } ax; + } u; +}; + +/* When IndexIterator.eType==1, then each index is an array of instances +** of the following object +*/ +struct IndexListTerm { + Index *p; /* The index */ + int ix; /* Which entry in the original Table.pIndex list is this index*/ +}; + +/* Return the first index on the list */ +static Index *indexIteratorFirst(IndexIterator *pIter, int *pIx){ + assert( pIter->i==0 ); + if( pIter->eType ){ + *pIx = pIter->u.ax.aIdx[0].ix; + return pIter->u.ax.aIdx[0].p; + }else{ + *pIx = 0; + return pIter->u.lx.pIdx; + } +} + +/* Return the next index from the list. Return NULL when out of indexes */ +static Index *indexIteratorNext(IndexIterator *pIter, int *pIx){ + if( pIter->eType ){ + int i = ++pIter->i; + if( i>=pIter->u.ax.nIdx ){ + *pIx = i; + return 0; + } + *pIx = pIter->u.ax.aIdx[i].ix; + return pIter->u.ax.aIdx[i].p; + }else{ + ++(*pIx); + pIter->u.lx.pIdx = pIter->u.lx.pIdx->pNext; + return pIter->u.lx.pIdx; + } +} + +/* +** Generate code to do constraint checks prior to an INSERT or an UPDATE +** on table pTab. +** +** The regNewData parameter is the first register in a range that contains +** the data to be inserted or the data after the update. There will be +** pTab->nCol+1 registers in this range. The first register (the one +** that regNewData points to) will contain the new rowid, or NULL in the +** case of a WITHOUT ROWID table. The second register in the range will +** contain the content of the first table column. The third register will +** contain the content of the second table column. And so forth. +** +** The regOldData parameter is similar to regNewData except that it contains +** the data prior to an UPDATE rather than afterwards. regOldData is zero +** for an INSERT. This routine can distinguish between UPDATE and INSERT by +** checking regOldData for zero. +** +** For an UPDATE, the pkChng boolean is true if the true primary key (the +** rowid for a normal table or the PRIMARY KEY for a WITHOUT ROWID table) +** might be modified by the UPDATE. If pkChng is false, then the key of +** the iDataCur content table is guaranteed to be unchanged by the UPDATE. +** +** For an INSERT, the pkChng boolean indicates whether or not the rowid +** was explicitly specified as part of the INSERT statement. If pkChng +** is zero, it means that the either rowid is computed automatically or +** that the table is a WITHOUT ROWID table and has no rowid. On an INSERT, +** pkChng will only be true if the INSERT statement provides an integer +** value for either the rowid column or its INTEGER PRIMARY KEY alias. +** +** The code generated by this routine will store new index entries into +** registers identified by aRegIdx[]. No index entry is created for +** indices where aRegIdx[i]==0. The order of indices in aRegIdx[] is +** the same as the order of indices on the linked list of indices +** at pTab->pIndex. +** +** (2019-05-07) The generated code also creates a new record for the +** main table, if pTab is a rowid table, and stores that record in the +** register identified by aRegIdx[nIdx] - in other words in the first +** entry of aRegIdx[] past the last index. It is important that the +** record be generated during constraint checks to avoid affinity changes +** to the register content that occur after constraint checks but before +** the new record is inserted. +** +** The caller must have already opened writeable cursors on the main +** table and all applicable indices (that is to say, all indices for which +** aRegIdx[] is not zero). iDataCur is the cursor for the main table when +** inserting or updating a rowid table, or the cursor for the PRIMARY KEY +** index when operating on a WITHOUT ROWID table. iIdxCur is the cursor +** for the first index in the pTab->pIndex list. Cursors for other indices +** are at iIdxCur+N for the N-th element of the pTab->pIndex list. +** +** This routine also generates code to check constraints. NOT NULL, +** CHECK, and UNIQUE constraints are all checked. If a constraint fails, +** then the appropriate action is performed. There are five possible +** actions: ROLLBACK, ABORT, FAIL, REPLACE, and IGNORE. +** +** Constraint type Action What Happens +** --------------- ---------- ---------------------------------------- +** any ROLLBACK The current transaction is rolled back and +** sqlite3_step() returns immediately with a +** return code of SQLITE_CONSTRAINT. +** +** any ABORT Back out changes from the current command +** only (do not do a complete rollback) then +** cause sqlite3_step() to return immediately +** with SQLITE_CONSTRAINT. +** +** any FAIL Sqlite3_step() returns immediately with a +** return code of SQLITE_CONSTRAINT. The +** transaction is not rolled back and any +** changes to prior rows are retained. +** +** any IGNORE The attempt in insert or update the current +** row is skipped, without throwing an error. +** Processing continues with the next row. +** (There is an immediate jump to ignoreDest.) +** +** NOT NULL REPLACE The NULL value is replace by the default +** value for that column. If the default value +** is NULL, the action is the same as ABORT. +** +** UNIQUE REPLACE The other row that conflicts with the row +** being inserted is removed. +** +** CHECK REPLACE Illegal. The results in an exception. +** +** Which action to take is determined by the overrideError parameter. +** Or if overrideError==OE_Default, then the pParse->onError parameter +** is used. Or if pParse->onError==OE_Default then the onError value +** for the constraint is used. +*/ +SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( + Parse *pParse, /* The parser context */ + Table *pTab, /* The table being inserted or updated */ + int *aRegIdx, /* Use register aRegIdx[i] for index i. 0 for unused */ + int iDataCur, /* Canonical data cursor (main table or PK index) */ + int iIdxCur, /* First index cursor */ + int regNewData, /* First register in a range holding values to insert */ + int regOldData, /* Previous content. 0 for INSERTs */ + u8 pkChng, /* Non-zero if the rowid or PRIMARY KEY changed */ + u8 overrideError, /* Override onError to this if not OE_Default */ + int ignoreDest, /* Jump to this label on an OE_Ignore resolution */ + int *pbMayReplace, /* OUT: Set to true if constraint may cause a replace */ + int *aiChng, /* column i is unchanged if aiChng[i]<0 */ + Upsert *pUpsert /* ON CONFLICT clauses, if any. NULL otherwise */ +){ + Vdbe *v; /* VDBE under construction */ + Index *pIdx; /* Pointer to one of the indices */ + Index *pPk = 0; /* The PRIMARY KEY index for WITHOUT ROWID tables */ + sqlite3 *db; /* Database connection */ + int i; /* loop counter */ + int ix; /* Index loop counter */ + int nCol; /* Number of columns */ + int onError; /* Conflict resolution strategy */ + int seenReplace = 0; /* True if REPLACE is used to resolve INT PK conflict */ + int nPkField; /* Number of fields in PRIMARY KEY. 1 for ROWID tables */ + Upsert *pUpsertClause = 0; /* The specific ON CONFLICT clause for pIdx */ + u8 isUpdate; /* True if this is an UPDATE operation */ + u8 bAffinityDone = 0; /* True if the OP_Affinity operation has been run */ + int upsertIpkReturn = 0; /* Address of Goto at end of IPK uniqueness check */ + int upsertIpkDelay = 0; /* Address of Goto to bypass initial IPK check */ + int ipkTop = 0; /* Top of the IPK uniqueness check */ + int ipkBottom = 0; /* OP_Goto at the end of the IPK uniqueness check */ + /* Variables associated with retesting uniqueness constraints after + ** replace triggers fire have run */ + int regTrigCnt; /* Register used to count replace trigger invocations */ + int addrRecheck = 0; /* Jump here to recheck all uniqueness constraints */ + int lblRecheckOk = 0; /* Each recheck jumps to this label if it passes */ + Trigger *pTrigger; /* List of DELETE triggers on the table pTab */ + int nReplaceTrig = 0; /* Number of replace triggers coded */ + IndexIterator sIdxIter; /* Index iterator */ + + isUpdate = regOldData!=0; + db = pParse->db; + v = pParse->pVdbe; + assert( v!=0 ); + assert( !IsView(pTab) ); /* This table is not a VIEW */ + nCol = pTab->nCol; + + /* pPk is the PRIMARY KEY index for WITHOUT ROWID tables and NULL for + ** normal rowid tables. nPkField is the number of key fields in the + ** pPk index or 1 for a rowid table. In other words, nPkField is the + ** number of fields in the true primary key of the table. */ + if( HasRowid(pTab) ){ + pPk = 0; + nPkField = 1; + }else{ + pPk = sqlite3PrimaryKeyIndex(pTab); + nPkField = pPk->nKeyCol; + } + + /* Record that this module has started */ + VdbeModuleComment((v, "BEGIN: GenCnstCks(%d,%d,%d,%d,%d)", + iDataCur, iIdxCur, regNewData, regOldData, pkChng)); + + /* Test all NOT NULL constraints. + */ + if( pTab->tabFlags & TF_HasNotNull ){ + int b2ndPass = 0; /* True if currently running 2nd pass */ + int nSeenReplace = 0; /* Number of ON CONFLICT REPLACE operations */ + int nGenerated = 0; /* Number of generated columns with NOT NULL */ + while(1){ /* Make 2 passes over columns. Exit loop via "break" */ + for(i=0; iaCol[i]; /* The column to check for NOT NULL */ + int isGenerated; /* non-zero if column is generated */ + onError = pCol->notNull; + if( onError==OE_None ) continue; /* No NOT NULL on this column */ + if( i==pTab->iPKey ){ + continue; /* ROWID is never NULL */ + } + isGenerated = pCol->colFlags & COLFLAG_GENERATED; + if( isGenerated && !b2ndPass ){ + nGenerated++; + continue; /* Generated columns processed on 2nd pass */ + } + if( aiChng && aiChng[i]<0 && !isGenerated ){ + /* Do not check NOT NULL on columns that do not change */ + continue; + } + if( overrideError!=OE_Default ){ + onError = overrideError; + }else if( onError==OE_Default ){ + onError = OE_Abort; + } + if( onError==OE_Replace ){ + if( b2ndPass /* REPLACE becomes ABORT on the 2nd pass */ + || pCol->iDflt==0 /* REPLACE is ABORT if no DEFAULT value */ + ){ + testcase( pCol->colFlags & COLFLAG_VIRTUAL ); + testcase( pCol->colFlags & COLFLAG_STORED ); + testcase( pCol->colFlags & COLFLAG_GENERATED ); + onError = OE_Abort; + }else{ + assert( !isGenerated ); + } + }else if( b2ndPass && !isGenerated ){ + continue; + } + assert( onError==OE_Rollback || onError==OE_Abort || onError==OE_Fail + || onError==OE_Ignore || onError==OE_Replace ); + testcase( i!=sqlite3TableColumnToStorage(pTab, i) ); + iReg = sqlite3TableColumnToStorage(pTab, i) + regNewData + 1; + switch( onError ){ + case OE_Replace: { + int addr1 = sqlite3VdbeAddOp1(v, OP_NotNull, iReg); + VdbeCoverage(v); + assert( (pCol->colFlags & COLFLAG_GENERATED)==0 ); + nSeenReplace++; + sqlite3ExprCodeCopy(pParse, + sqlite3ColumnExpr(pTab, pCol), iReg); + sqlite3VdbeJumpHere(v, addr1); + break; + } + case OE_Abort: + sqlite3MayAbort(pParse); + /* no break */ deliberate_fall_through + case OE_Rollback: + case OE_Fail: { + char *zMsg = sqlite3MPrintf(db, "%s.%s", pTab->zName, + pCol->zCnName); + testcase( zMsg==0 && db->mallocFailed==0 ); + sqlite3VdbeAddOp3(v, OP_HaltIfNull, SQLITE_CONSTRAINT_NOTNULL, + onError, iReg); + sqlite3VdbeAppendP4(v, zMsg, P4_DYNAMIC); + sqlite3VdbeChangeP5(v, P5_ConstraintNotNull); + VdbeCoverage(v); + break; + } + default: { + assert( onError==OE_Ignore ); + sqlite3VdbeAddOp2(v, OP_IsNull, iReg, ignoreDest); + VdbeCoverage(v); + break; + } + } /* end switch(onError) */ + } /* end loop i over columns */ + if( nGenerated==0 && nSeenReplace==0 ){ + /* If there are no generated columns with NOT NULL constraints + ** and no NOT NULL ON CONFLICT REPLACE constraints, then a single + ** pass is sufficient */ + break; + } + if( b2ndPass ) break; /* Never need more than 2 passes */ + b2ndPass = 1; +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + if( nSeenReplace>0 && (pTab->tabFlags & TF_HasGenerated)!=0 ){ + /* If any NOT NULL ON CONFLICT REPLACE constraints fired on the + ** first pass, recomputed values for all generated columns, as + ** those values might depend on columns affected by the REPLACE. + */ + sqlite3ComputeGeneratedColumns(pParse, regNewData+1, pTab); + } +#endif + } /* end of 2-pass loop */ + } /* end if( has-not-null-constraints ) */ + + /* Test all CHECK constraints + */ +#ifndef SQLITE_OMIT_CHECK + if( pTab->pCheck && (db->flags & SQLITE_IgnoreChecks)==0 ){ + ExprList *pCheck = pTab->pCheck; + pParse->iSelfTab = -(regNewData+1); + onError = overrideError!=OE_Default ? overrideError : OE_Abort; + for(i=0; inExpr; i++){ + int allOk; + Expr *pCopy; + Expr *pExpr = pCheck->a[i].pExpr; + if( aiChng + && !sqlite3ExprReferencesUpdatedColumn(pExpr, aiChng, pkChng) + ){ + /* The check constraints do not reference any of the columns being + ** updated so there is no point it verifying the check constraint */ + continue; + } + if( bAffinityDone==0 ){ + sqlite3TableAffinity(v, pTab, regNewData+1); + bAffinityDone = 1; + } + allOk = sqlite3VdbeMakeLabel(pParse); + sqlite3VdbeVerifyAbortable(v, onError); + pCopy = sqlite3ExprDup(db, pExpr, 0); + if( !db->mallocFailed ){ + sqlite3ExprIfTrue(pParse, pCopy, allOk, SQLITE_JUMPIFNULL); + } + sqlite3ExprDelete(db, pCopy); + if( onError==OE_Ignore ){ + sqlite3VdbeGoto(v, ignoreDest); + }else{ + char *zName = pCheck->a[i].zEName; + assert( zName!=0 || pParse->db->mallocFailed ); + if( onError==OE_Replace ) onError = OE_Abort; /* IMP: R-26383-51744 */ + sqlite3HaltConstraint(pParse, SQLITE_CONSTRAINT_CHECK, + onError, zName, P4_TRANSIENT, + P5_ConstraintCheck); + } + sqlite3VdbeResolveLabel(v, allOk); + } + pParse->iSelfTab = 0; + } +#endif /* !defined(SQLITE_OMIT_CHECK) */ + + /* UNIQUE and PRIMARY KEY constraints should be handled in the following + ** order: + ** + ** (1) OE_Update + ** (2) OE_Abort, OE_Fail, OE_Rollback, OE_Ignore + ** (3) OE_Replace + ** + ** OE_Fail and OE_Ignore must happen before any changes are made. + ** OE_Update guarantees that only a single row will change, so it + ** must happen before OE_Replace. Technically, OE_Abort and OE_Rollback + ** could happen in any order, but they are grouped up front for + ** convenience. + ** + ** 2018-08-14: Ticket https://sqlite.org/src/info/908f001483982c43 + ** The order of constraints used to have OE_Update as (2) and OE_Abort + ** and so forth as (1). But apparently PostgreSQL checks the OE_Update + ** constraint before any others, so it had to be moved. + ** + ** Constraint checking code is generated in this order: + ** (A) The rowid constraint + ** (B) Unique index constraints that do not have OE_Replace as their + ** default conflict resolution strategy + ** (C) Unique index that do use OE_Replace by default. + ** + ** The ordering of (2) and (3) is accomplished by making sure the linked + ** list of indexes attached to a table puts all OE_Replace indexes last + ** in the list. See sqlite3CreateIndex() for where that happens. + */ + sIdxIter.eType = 0; + sIdxIter.i = 0; + sIdxIter.u.ax.aIdx = 0; /* Silence harmless compiler warning */ + sIdxIter.u.lx.pIdx = pTab->pIndex; + if( pUpsert ){ + if( pUpsert->pUpsertTarget==0 ){ + /* There is just on ON CONFLICT clause and it has no constraint-target */ + assert( pUpsert->pNextUpsert==0 ); + if( pUpsert->isDoUpdate==0 ){ + /* A single ON CONFLICT DO NOTHING clause, without a constraint-target. + ** Make all unique constraint resolution be OE_Ignore */ + overrideError = OE_Ignore; + pUpsert = 0; + }else{ + /* A single ON CONFLICT DO UPDATE. Make all resolutions OE_Update */ + overrideError = OE_Update; + } + }else if( pTab->pIndex!=0 ){ + /* Otherwise, we'll need to run the IndexListTerm array version of the + ** iterator to ensure that all of the ON CONFLICT conditions are + ** checked first and in order. */ + int nIdx, jj; + u64 nByte; + Upsert *pTerm; + u8 *bUsed; + for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){ + assert( aRegIdx[nIdx]>0 ); + } + sIdxIter.eType = 1; + sIdxIter.u.ax.nIdx = nIdx; + nByte = (sizeof(IndexListTerm)+1)*nIdx + nIdx; + sIdxIter.u.ax.aIdx = sqlite3DbMallocZero(db, nByte); + if( sIdxIter.u.ax.aIdx==0 ) return; /* OOM */ + bUsed = (u8*)&sIdxIter.u.ax.aIdx[nIdx]; + pUpsert->pToFree = sIdxIter.u.ax.aIdx; + for(i=0, pTerm=pUpsert; pTerm; pTerm=pTerm->pNextUpsert){ + if( pTerm->pUpsertTarget==0 ) break; + if( pTerm->pUpsertIdx==0 ) continue; /* Skip ON CONFLICT for the IPK */ + jj = 0; + pIdx = pTab->pIndex; + while( ALWAYS(pIdx!=0) && pIdx!=pTerm->pUpsertIdx ){ + pIdx = pIdx->pNext; + jj++; + } + if( bUsed[jj] ) continue; /* Duplicate ON CONFLICT clause ignored */ + bUsed[jj] = 1; + sIdxIter.u.ax.aIdx[i].p = pIdx; + sIdxIter.u.ax.aIdx[i].ix = jj; + i++; + } + for(jj=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, jj++){ + if( bUsed[jj] ) continue; + sIdxIter.u.ax.aIdx[i].p = pIdx; + sIdxIter.u.ax.aIdx[i].ix = jj; + i++; + } + assert( i==nIdx ); + } + } + + /* Determine if it is possible that triggers (either explicitly coded + ** triggers or FK resolution actions) might run as a result of deletes + ** that happen when OE_Replace conflict resolution occurs. (Call these + ** "replace triggers".) If any replace triggers run, we will need to + ** recheck all of the uniqueness constraints after they have all run. + ** But on the recheck, the resolution is OE_Abort instead of OE_Replace. + ** + ** If replace triggers are a possibility, then + ** + ** (1) Allocate register regTrigCnt and initialize it to zero. + ** That register will count the number of replace triggers that + ** fire. Constraint recheck only occurs if the number is positive. + ** (2) Initialize pTrigger to the list of all DELETE triggers on pTab. + ** (3) Initialize addrRecheck and lblRecheckOk + ** + ** The uniqueness rechecking code will create a series of tests to run + ** in a second pass. The addrRecheck and lblRecheckOk variables are + ** used to link together these tests which are separated from each other + ** in the generate bytecode. + */ + if( (db->flags & (SQLITE_RecTriggers|SQLITE_ForeignKeys))==0 ){ + /* There are not DELETE triggers nor FK constraints. No constraint + ** rechecks are needed. */ + pTrigger = 0; + regTrigCnt = 0; + }else{ + if( db->flags&SQLITE_RecTriggers ){ + pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0); + regTrigCnt = pTrigger!=0 || sqlite3FkRequired(pParse, pTab, 0, 0); + }else{ + pTrigger = 0; + regTrigCnt = sqlite3FkRequired(pParse, pTab, 0, 0); + } + if( regTrigCnt ){ + /* Replace triggers might exist. Allocate the counter and + ** initialize it to zero. */ + regTrigCnt = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Integer, 0, regTrigCnt); + VdbeComment((v, "trigger count")); + lblRecheckOk = sqlite3VdbeMakeLabel(pParse); + addrRecheck = lblRecheckOk; + } + } + + /* If rowid is changing, make sure the new rowid does not previously + ** exist in the table. + */ + if( pkChng && pPk==0 ){ + int addrRowidOk = sqlite3VdbeMakeLabel(pParse); + + /* Figure out what action to take in case of a rowid collision */ + onError = pTab->keyConf; + if( overrideError!=OE_Default ){ + onError = overrideError; + }else if( onError==OE_Default ){ + onError = OE_Abort; + } + + /* figure out whether or not upsert applies in this case */ + if( pUpsert ){ + pUpsertClause = sqlite3UpsertOfIndex(pUpsert,0); + if( pUpsertClause!=0 ){ + if( pUpsertClause->isDoUpdate==0 ){ + onError = OE_Ignore; /* DO NOTHING is the same as INSERT OR IGNORE */ + }else{ + onError = OE_Update; /* DO UPDATE */ + } + } + if( pUpsertClause!=pUpsert ){ + /* The first ON CONFLICT clause has a conflict target other than + ** the IPK. We have to jump ahead to that first ON CONFLICT clause + ** and then come back here and deal with the IPK afterwards */ + upsertIpkDelay = sqlite3VdbeAddOp0(v, OP_Goto); + } + } + + /* If the response to a rowid conflict is REPLACE but the response + ** to some other UNIQUE constraint is FAIL or IGNORE, then we need + ** to defer the running of the rowid conflict checking until after + ** the UNIQUE constraints have run. + */ + if( onError==OE_Replace /* IPK rule is REPLACE */ + && onError!=overrideError /* Rules for other constraints are different */ + && pTab->pIndex /* There exist other constraints */ + && !upsertIpkDelay /* IPK check already deferred by UPSERT */ + ){ + ipkTop = sqlite3VdbeAddOp0(v, OP_Goto)+1; + VdbeComment((v, "defer IPK REPLACE until last")); + } + + if( isUpdate ){ + /* pkChng!=0 does not mean that the rowid has changed, only that + ** it might have changed. Skip the conflict logic below if the rowid + ** is unchanged. */ + sqlite3VdbeAddOp3(v, OP_Eq, regNewData, addrRowidOk, regOldData); + sqlite3VdbeChangeP5(v, SQLITE_NOTNULL); + VdbeCoverage(v); + } + + /* Check to see if the new rowid already exists in the table. Skip + ** the following conflict logic if it does not. */ + VdbeNoopComment((v, "uniqueness check for ROWID")); + sqlite3VdbeVerifyAbortable(v, onError); + sqlite3VdbeAddOp3(v, OP_NotExists, iDataCur, addrRowidOk, regNewData); + VdbeCoverage(v); + + switch( onError ){ + default: { + onError = OE_Abort; + /* no break */ deliberate_fall_through + } + case OE_Rollback: + case OE_Abort: + case OE_Fail: { + testcase( onError==OE_Rollback ); + testcase( onError==OE_Abort ); + testcase( onError==OE_Fail ); + sqlite3RowidConstraint(pParse, onError, pTab); + break; + } + case OE_Replace: { + /* If there are DELETE triggers on this table and the + ** recursive-triggers flag is set, call GenerateRowDelete() to + ** remove the conflicting row from the table. This will fire + ** the triggers and remove both the table and index b-tree entries. + ** + ** Otherwise, if there are no triggers or the recursive-triggers + ** flag is not set, but the table has one or more indexes, call + ** GenerateRowIndexDelete(). This removes the index b-tree entries + ** only. The table b-tree entry will be replaced by the new entry + ** when it is inserted. + ** + ** If either GenerateRowDelete() or GenerateRowIndexDelete() is called, + ** also invoke MultiWrite() to indicate that this VDBE may require + ** statement rollback (if the statement is aborted after the delete + ** takes place). Earlier versions called sqlite3MultiWrite() regardless, + ** but being more selective here allows statements like: + ** + ** REPLACE INTO t(rowid) VALUES($newrowid) + ** + ** to run without a statement journal if there are no indexes on the + ** table. + */ + if( regTrigCnt ){ + sqlite3MultiWrite(pParse); + sqlite3GenerateRowDelete(pParse, pTab, pTrigger, iDataCur, iIdxCur, + regNewData, 1, 0, OE_Replace, 1, -1); + sqlite3VdbeAddOp2(v, OP_AddImm, regTrigCnt, 1); /* incr trigger cnt */ + nReplaceTrig++; + }else{ +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + assert( HasRowid(pTab) ); + /* This OP_Delete opcode fires the pre-update-hook only. It does + ** not modify the b-tree. It is more efficient to let the coming + ** OP_Insert replace the existing entry than it is to delete the + ** existing entry and then insert a new one. */ + sqlite3VdbeAddOp2(v, OP_Delete, iDataCur, OPFLAG_ISNOOP); + sqlite3VdbeAppendP4(v, pTab, P4_TABLE); +#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ + if( pTab->pIndex ){ + sqlite3MultiWrite(pParse); + sqlite3GenerateRowIndexDelete(pParse, pTab, iDataCur, iIdxCur,0,-1); + } + } + seenReplace = 1; + break; + } +#ifndef SQLITE_OMIT_UPSERT + case OE_Update: { + sqlite3UpsertDoUpdate(pParse, pUpsert, pTab, 0, iDataCur); + /* no break */ deliberate_fall_through + } +#endif + case OE_Ignore: { + testcase( onError==OE_Ignore ); + sqlite3VdbeGoto(v, ignoreDest); + break; + } + } + sqlite3VdbeResolveLabel(v, addrRowidOk); + if( pUpsert && pUpsertClause!=pUpsert ){ + upsertIpkReturn = sqlite3VdbeAddOp0(v, OP_Goto); + }else if( ipkTop ){ + ipkBottom = sqlite3VdbeAddOp0(v, OP_Goto); + sqlite3VdbeJumpHere(v, ipkTop-1); + } + } + + /* Test all UNIQUE constraints by creating entries for each UNIQUE + ** index and making sure that duplicate entries do not already exist. + ** Compute the revised record entries for indices as we go. + ** + ** This loop also handles the case of the PRIMARY KEY index for a + ** WITHOUT ROWID table. + */ + for(pIdx = indexIteratorFirst(&sIdxIter, &ix); + pIdx; + pIdx = indexIteratorNext(&sIdxIter, &ix) + ){ + int regIdx; /* Range of registers holding content for pIdx */ + int regR; /* Range of registers holding conflicting PK */ + int iThisCur; /* Cursor for this UNIQUE index */ + int addrUniqueOk; /* Jump here if the UNIQUE constraint is satisfied */ + int addrConflictCk; /* First opcode in the conflict check logic */ + + if( aRegIdx[ix]==0 ) continue; /* Skip indices that do not change */ + if( pUpsert ){ + pUpsertClause = sqlite3UpsertOfIndex(pUpsert, pIdx); + if( upsertIpkDelay && pUpsertClause==pUpsert ){ + sqlite3VdbeJumpHere(v, upsertIpkDelay); + } + } + addrUniqueOk = sqlite3VdbeMakeLabel(pParse); + if( bAffinityDone==0 ){ + sqlite3TableAffinity(v, pTab, regNewData+1); + bAffinityDone = 1; + } + VdbeNoopComment((v, "prep index %s", pIdx->zName)); + iThisCur = iIdxCur+ix; + + + /* Skip partial indices for which the WHERE clause is not true */ + if( pIdx->pPartIdxWhere ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, aRegIdx[ix]); + pParse->iSelfTab = -(regNewData+1); + sqlite3ExprIfFalseDup(pParse, pIdx->pPartIdxWhere, addrUniqueOk, + SQLITE_JUMPIFNULL); + pParse->iSelfTab = 0; + } + + /* Create a record for this index entry as it should appear after + ** the insert or update. Store that record in the aRegIdx[ix] register + */ + regIdx = aRegIdx[ix]+1; + for(i=0; inColumn; i++){ + int iField = pIdx->aiColumn[i]; + int x; + if( iField==XN_EXPR ){ + pParse->iSelfTab = -(regNewData+1); + sqlite3ExprCodeCopy(pParse, pIdx->aColExpr->a[i].pExpr, regIdx+i); + pParse->iSelfTab = 0; + VdbeComment((v, "%s column %d", pIdx->zName, i)); + }else if( iField==XN_ROWID || iField==pTab->iPKey ){ + x = regNewData; + sqlite3VdbeAddOp2(v, OP_IntCopy, x, regIdx+i); + VdbeComment((v, "rowid")); + }else{ + testcase( sqlite3TableColumnToStorage(pTab, iField)!=iField ); + x = sqlite3TableColumnToStorage(pTab, iField) + regNewData + 1; + sqlite3VdbeAddOp2(v, OP_SCopy, x, regIdx+i); + VdbeComment((v, "%s", pTab->aCol[iField].zCnName)); + } + } + sqlite3VdbeAddOp3(v, OP_MakeRecord, regIdx, pIdx->nColumn, aRegIdx[ix]); + VdbeComment((v, "for %s", pIdx->zName)); +#ifdef SQLITE_ENABLE_NULL_TRIM + if( pIdx->idxType==SQLITE_IDXTYPE_PRIMARYKEY ){ + sqlite3SetMakeRecordP5(v, pIdx->pTable); + } +#endif + sqlite3VdbeReleaseRegisters(pParse, regIdx, pIdx->nColumn, 0, 0); + + /* In an UPDATE operation, if this index is the PRIMARY KEY index + ** of a WITHOUT ROWID table and there has been no change the + ** primary key, then no collision is possible. The collision detection + ** logic below can all be skipped. */ + if( isUpdate && pPk==pIdx && pkChng==0 ){ + sqlite3VdbeResolveLabel(v, addrUniqueOk); + continue; + } + + /* Find out what action to take in case there is a uniqueness conflict */ + onError = pIdx->onError; + if( onError==OE_None ){ + sqlite3VdbeResolveLabel(v, addrUniqueOk); + continue; /* pIdx is not a UNIQUE index */ + } + if( overrideError!=OE_Default ){ + onError = overrideError; + }else if( onError==OE_Default ){ + onError = OE_Abort; + } + + /* Figure out if the upsert clause applies to this index */ + if( pUpsertClause ){ + if( pUpsertClause->isDoUpdate==0 ){ + onError = OE_Ignore; /* DO NOTHING is the same as INSERT OR IGNORE */ + }else{ + onError = OE_Update; /* DO UPDATE */ + } + } + + /* Collision detection may be omitted if all of the following are true: + ** (1) The conflict resolution algorithm is REPLACE + ** (2) The table is a WITHOUT ROWID table + ** (3) There are no secondary indexes on the table + ** (4) No delete triggers need to be fired if there is a conflict + ** (5) No FK constraint counters need to be updated if a conflict occurs. + ** + ** This is not possible for ENABLE_PREUPDATE_HOOK builds, as the row + ** must be explicitly deleted in order to ensure any pre-update hook + ** is invoked. */ + assert( IsOrdinaryTable(pTab) ); +#ifndef SQLITE_ENABLE_PREUPDATE_HOOK + if( (ix==0 && pIdx->pNext==0) /* Condition 3 */ + && pPk==pIdx /* Condition 2 */ + && onError==OE_Replace /* Condition 1 */ + && ( 0==(db->flags&SQLITE_RecTriggers) || /* Condition 4 */ + 0==sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0)) + && ( 0==(db->flags&SQLITE_ForeignKeys) || /* Condition 5 */ + (0==pTab->u.tab.pFKey && 0==sqlite3FkReferences(pTab))) + ){ + sqlite3VdbeResolveLabel(v, addrUniqueOk); + continue; + } +#endif /* ifndef SQLITE_ENABLE_PREUPDATE_HOOK */ + + /* Check to see if the new index entry will be unique */ + sqlite3VdbeVerifyAbortable(v, onError); + addrConflictCk = + sqlite3VdbeAddOp4Int(v, OP_NoConflict, iThisCur, addrUniqueOk, + regIdx, pIdx->nKeyCol); VdbeCoverage(v); + + /* Generate code to handle collisions */ + regR = pIdx==pPk ? regIdx : sqlite3GetTempRange(pParse, nPkField); + if( isUpdate || onError==OE_Replace ){ + if( HasRowid(pTab) ){ + sqlite3VdbeAddOp2(v, OP_IdxRowid, iThisCur, regR); + /* Conflict only if the rowid of the existing index entry + ** is different from old-rowid */ + if( isUpdate ){ + sqlite3VdbeAddOp3(v, OP_Eq, regR, addrUniqueOk, regOldData); + sqlite3VdbeChangeP5(v, SQLITE_NOTNULL); + VdbeCoverage(v); + } + }else{ + int x; + /* Extract the PRIMARY KEY from the end of the index entry and + ** store it in registers regR..regR+nPk-1 */ + if( pIdx!=pPk ){ + for(i=0; inKeyCol; i++){ + assert( pPk->aiColumn[i]>=0 ); + x = sqlite3TableColumnToIndex(pIdx, pPk->aiColumn[i]); + sqlite3VdbeAddOp3(v, OP_Column, iThisCur, x, regR+i); + VdbeComment((v, "%s.%s", pTab->zName, + pTab->aCol[pPk->aiColumn[i]].zCnName)); + } + } + if( isUpdate ){ + /* If currently processing the PRIMARY KEY of a WITHOUT ROWID + ** table, only conflict if the new PRIMARY KEY values are actually + ** different from the old. See TH3 withoutrowid04.test. + ** + ** For a UNIQUE index, only conflict if the PRIMARY KEY values + ** of the matched index row are different from the original PRIMARY + ** KEY values of this row before the update. */ + int addrJump = sqlite3VdbeCurrentAddr(v)+pPk->nKeyCol; + int op = OP_Ne; + int regCmp = (IsPrimaryKeyIndex(pIdx) ? regIdx : regR); + + for(i=0; inKeyCol; i++){ + char *p4 = (char*)sqlite3LocateCollSeq(pParse, pPk->azColl[i]); + x = pPk->aiColumn[i]; + assert( x>=0 ); + if( i==(pPk->nKeyCol-1) ){ + addrJump = addrUniqueOk; + op = OP_Eq; + } + x = sqlite3TableColumnToStorage(pTab, x); + sqlite3VdbeAddOp4(v, op, + regOldData+1+x, addrJump, regCmp+i, p4, P4_COLLSEQ + ); + sqlite3VdbeChangeP5(v, SQLITE_NOTNULL); + VdbeCoverageIf(v, op==OP_Eq); + VdbeCoverageIf(v, op==OP_Ne); + } + } + } + } + + /* Generate code that executes if the new index entry is not unique */ + assert( onError==OE_Rollback || onError==OE_Abort || onError==OE_Fail + || onError==OE_Ignore || onError==OE_Replace || onError==OE_Update ); + switch( onError ){ + case OE_Rollback: + case OE_Abort: + case OE_Fail: { + testcase( onError==OE_Rollback ); + testcase( onError==OE_Abort ); + testcase( onError==OE_Fail ); + sqlite3UniqueConstraint(pParse, onError, pIdx); + break; + } +#ifndef SQLITE_OMIT_UPSERT + case OE_Update: { + sqlite3UpsertDoUpdate(pParse, pUpsert, pTab, pIdx, iIdxCur+ix); + /* no break */ deliberate_fall_through + } +#endif + case OE_Ignore: { + testcase( onError==OE_Ignore ); + sqlite3VdbeGoto(v, ignoreDest); + break; + } + default: { + int nConflictCk; /* Number of opcodes in conflict check logic */ + + assert( onError==OE_Replace ); + nConflictCk = sqlite3VdbeCurrentAddr(v) - addrConflictCk; + assert( nConflictCk>0 || db->mallocFailed ); + testcase( nConflictCk<=0 ); + testcase( nConflictCk>1 ); + if( regTrigCnt ){ + sqlite3MultiWrite(pParse); + nReplaceTrig++; + } + if( pTrigger && isUpdate ){ + sqlite3VdbeAddOp1(v, OP_CursorLock, iDataCur); + } + sqlite3GenerateRowDelete(pParse, pTab, pTrigger, iDataCur, iIdxCur, + regR, nPkField, 0, OE_Replace, + (pIdx==pPk ? ONEPASS_SINGLE : ONEPASS_OFF), iThisCur); + if( pTrigger && isUpdate ){ + sqlite3VdbeAddOp1(v, OP_CursorUnlock, iDataCur); + } + if( regTrigCnt ){ + int addrBypass; /* Jump destination to bypass recheck logic */ + + sqlite3VdbeAddOp2(v, OP_AddImm, regTrigCnt, 1); /* incr trigger cnt */ + addrBypass = sqlite3VdbeAddOp0(v, OP_Goto); /* Bypass recheck */ + VdbeComment((v, "bypass recheck")); + + /* Here we insert code that will be invoked after all constraint + ** checks have run, if and only if one or more replace triggers + ** fired. */ + sqlite3VdbeResolveLabel(v, lblRecheckOk); + lblRecheckOk = sqlite3VdbeMakeLabel(pParse); + if( pIdx->pPartIdxWhere ){ + /* Bypass the recheck if this partial index is not defined + ** for the current row */ + sqlite3VdbeAddOp2(v, OP_IsNull, regIdx-1, lblRecheckOk); + VdbeCoverage(v); + } + /* Copy the constraint check code from above, except change + ** the constraint-ok jump destination to be the address of + ** the next retest block */ + while( nConflictCk>0 ){ + VdbeOp x; /* Conflict check opcode to copy */ + /* The sqlite3VdbeAddOp4() call might reallocate the opcode array. + ** Hence, make a complete copy of the opcode, rather than using + ** a pointer to the opcode. */ + x = *sqlite3VdbeGetOp(v, addrConflictCk); + if( x.opcode!=OP_IdxRowid ){ + int p2; /* New P2 value for copied conflict check opcode */ + const char *zP4; + if( sqlite3OpcodeProperty[x.opcode]&OPFLG_JUMP ){ + p2 = lblRecheckOk; + }else{ + p2 = x.p2; + } + zP4 = x.p4type==P4_INT32 ? SQLITE_INT_TO_PTR(x.p4.i) : x.p4.z; + sqlite3VdbeAddOp4(v, x.opcode, x.p1, p2, x.p3, zP4, x.p4type); + sqlite3VdbeChangeP5(v, x.p5); + VdbeCoverageIf(v, p2!=x.p2); + } + nConflictCk--; + addrConflictCk++; + } + /* If the retest fails, issue an abort */ + sqlite3UniqueConstraint(pParse, OE_Abort, pIdx); + + sqlite3VdbeJumpHere(v, addrBypass); /* Terminate the recheck bypass */ + } + seenReplace = 1; + break; + } + } + sqlite3VdbeResolveLabel(v, addrUniqueOk); + if( regR!=regIdx ) sqlite3ReleaseTempRange(pParse, regR, nPkField); + if( pUpsertClause + && upsertIpkReturn + && sqlite3UpsertNextIsIPK(pUpsertClause) + ){ + sqlite3VdbeGoto(v, upsertIpkDelay+1); + sqlite3VdbeJumpHere(v, upsertIpkReturn); + upsertIpkReturn = 0; + } + } + + /* If the IPK constraint is a REPLACE, run it last */ + if( ipkTop ){ + sqlite3VdbeGoto(v, ipkTop); + VdbeComment((v, "Do IPK REPLACE")); + assert( ipkBottom>0 ); + sqlite3VdbeJumpHere(v, ipkBottom); + } + + /* Recheck all uniqueness constraints after replace triggers have run */ + testcase( regTrigCnt!=0 && nReplaceTrig==0 ); + assert( regTrigCnt!=0 || nReplaceTrig==0 ); + if( nReplaceTrig ){ + sqlite3VdbeAddOp2(v, OP_IfNot, regTrigCnt, lblRecheckOk);VdbeCoverage(v); + if( !pPk ){ + if( isUpdate ){ + sqlite3VdbeAddOp3(v, OP_Eq, regNewData, addrRecheck, regOldData); + sqlite3VdbeChangeP5(v, SQLITE_NOTNULL); + VdbeCoverage(v); + } + sqlite3VdbeAddOp3(v, OP_NotExists, iDataCur, addrRecheck, regNewData); + VdbeCoverage(v); + sqlite3RowidConstraint(pParse, OE_Abort, pTab); + }else{ + sqlite3VdbeGoto(v, addrRecheck); + } + sqlite3VdbeResolveLabel(v, lblRecheckOk); + } + + /* Generate the table record */ + if( HasRowid(pTab) ){ + int regRec = aRegIdx[ix]; + sqlite3VdbeAddOp3(v, OP_MakeRecord, regNewData+1, pTab->nNVCol, regRec); + sqlite3SetMakeRecordP5(v, pTab); + if( !bAffinityDone ){ + sqlite3TableAffinity(v, pTab, 0); + } + } + + *pbMayReplace = seenReplace; + VdbeModuleComment((v, "END: GenCnstCks(%d)", seenReplace)); +} + +#ifdef SQLITE_ENABLE_NULL_TRIM +/* +** Change the P5 operand on the last opcode (which should be an OP_MakeRecord) +** to be the number of columns in table pTab that must not be NULL-trimmed. +** +** Or if no columns of pTab may be NULL-trimmed, leave P5 at zero. +*/ +SQLITE_PRIVATE void sqlite3SetMakeRecordP5(Vdbe *v, Table *pTab){ + u16 i; + + /* Records with omitted columns are only allowed for schema format + ** version 2 and later (SQLite version 3.1.4, 2005-02-20). */ + if( pTab->pSchema->file_format<2 ) return; + + for(i=pTab->nCol-1; i>0; i--){ + if( pTab->aCol[i].iDflt!=0 ) break; + if( pTab->aCol[i].colFlags & COLFLAG_PRIMKEY ) break; + } + sqlite3VdbeChangeP5(v, i+1); +} +#endif + +/* +** Table pTab is a WITHOUT ROWID table that is being written to. The cursor +** number is iCur, and register regData contains the new record for the +** PK index. This function adds code to invoke the pre-update hook, +** if one is registered. +*/ +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK +static void codeWithoutRowidPreupdate( + Parse *pParse, /* Parse context */ + Table *pTab, /* Table being updated */ + int iCur, /* Cursor number for table */ + int regData /* Data containing new record */ +){ + Vdbe *v = pParse->pVdbe; + int r = sqlite3GetTempReg(pParse); + assert( !HasRowid(pTab) ); + assert( 0==(pParse->db->mDbFlags & DBFLAG_Vacuum) || CORRUPT_DB ); + sqlite3VdbeAddOp2(v, OP_Integer, 0, r); + sqlite3VdbeAddOp4(v, OP_Insert, iCur, regData, r, (char*)pTab, P4_TABLE); + sqlite3VdbeChangeP5(v, OPFLAG_ISNOOP); + sqlite3ReleaseTempReg(pParse, r); +} +#else +# define codeWithoutRowidPreupdate(a,b,c,d) +#endif + +/* +** This routine generates code to finish the INSERT or UPDATE operation +** that was started by a prior call to sqlite3GenerateConstraintChecks. +** A consecutive range of registers starting at regNewData contains the +** rowid and the content to be inserted. +** +** The arguments to this routine should be the same as the first six +** arguments to sqlite3GenerateConstraintChecks. +*/ +SQLITE_PRIVATE void sqlite3CompleteInsertion( + Parse *pParse, /* The parser context */ + Table *pTab, /* the table into which we are inserting */ + int iDataCur, /* Cursor of the canonical data source */ + int iIdxCur, /* First index cursor */ + int regNewData, /* Range of content */ + int *aRegIdx, /* Register used by each index. 0 for unused indices */ + int update_flags, /* True for UPDATE, False for INSERT */ + int appendBias, /* True if this is likely to be an append */ + int useSeekResult /* True to set the USESEEKRESULT flag on OP_[Idx]Insert */ +){ + Vdbe *v; /* Prepared statements under construction */ + Index *pIdx; /* An index being inserted or updated */ + u8 pik_flags; /* flag values passed to the btree insert */ + int i; /* Loop counter */ + + assert( update_flags==0 + || update_flags==OPFLAG_ISUPDATE + || update_flags==(OPFLAG_ISUPDATE|OPFLAG_SAVEPOSITION) + ); + + v = pParse->pVdbe; + assert( v!=0 ); + assert( !IsView(pTab) ); /* This table is not a VIEW */ + for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){ + /* All REPLACE indexes are at the end of the list */ + assert( pIdx->onError!=OE_Replace + || pIdx->pNext==0 + || pIdx->pNext->onError==OE_Replace ); + if( aRegIdx[i]==0 ) continue; + if( pIdx->pPartIdxWhere ){ + sqlite3VdbeAddOp2(v, OP_IsNull, aRegIdx[i], sqlite3VdbeCurrentAddr(v)+2); + VdbeCoverage(v); + } + pik_flags = (useSeekResult ? OPFLAG_USESEEKRESULT : 0); + if( IsPrimaryKeyIndex(pIdx) && !HasRowid(pTab) ){ + pik_flags |= OPFLAG_NCHANGE; + pik_flags |= (update_flags & OPFLAG_SAVEPOSITION); + if( update_flags==0 ){ + codeWithoutRowidPreupdate(pParse, pTab, iIdxCur+i, aRegIdx[i]); + } + } + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iIdxCur+i, aRegIdx[i], + aRegIdx[i]+1, + pIdx->uniqNotNull ? pIdx->nKeyCol: pIdx->nColumn); + sqlite3VdbeChangeP5(v, pik_flags); + } + if( !HasRowid(pTab) ) return; + if( pParse->nested ){ + pik_flags = 0; + }else{ + pik_flags = OPFLAG_NCHANGE; + pik_flags |= (update_flags?update_flags:OPFLAG_LASTROWID); + } + if( appendBias ){ + pik_flags |= OPFLAG_APPEND; + } + if( useSeekResult ){ + pik_flags |= OPFLAG_USESEEKRESULT; + } + sqlite3VdbeAddOp3(v, OP_Insert, iDataCur, aRegIdx[i], regNewData); + if( !pParse->nested ){ + sqlite3VdbeAppendP4(v, pTab, P4_TABLE); + } + sqlite3VdbeChangeP5(v, pik_flags); +} + +/* +** Allocate cursors for the pTab table and all its indices and generate +** code to open and initialized those cursors. +** +** The cursor for the object that contains the complete data (normally +** the table itself, but the PRIMARY KEY index in the case of a WITHOUT +** ROWID table) is returned in *piDataCur. The first index cursor is +** returned in *piIdxCur. The number of indices is returned. +** +** Use iBase as the first cursor (either the *piDataCur for rowid tables +** or the first index for WITHOUT ROWID tables) if it is non-negative. +** If iBase is negative, then allocate the next available cursor. +** +** For a rowid table, *piDataCur will be exactly one less than *piIdxCur. +** For a WITHOUT ROWID table, *piDataCur will be somewhere in the range +** of *piIdxCurs, depending on where the PRIMARY KEY index appears on the +** pTab->pIndex list. +** +** If pTab is a virtual table, then this routine is a no-op and the +** *piDataCur and *piIdxCur values are left uninitialized. +*/ +SQLITE_PRIVATE int sqlite3OpenTableAndIndices( + Parse *pParse, /* Parsing context */ + Table *pTab, /* Table to be opened */ + int op, /* OP_OpenRead or OP_OpenWrite */ + u8 p5, /* P5 value for OP_Open* opcodes (except on WITHOUT ROWID) */ + int iBase, /* Use this for the table cursor, if there is one */ + u8 *aToOpen, /* If not NULL: boolean for each table and index */ + int *piDataCur, /* Write the database source cursor number here */ + int *piIdxCur /* Write the first index cursor number here */ +){ + int i; + int iDb; + int iDataCur; + Index *pIdx; + Vdbe *v; + + assert( op==OP_OpenRead || op==OP_OpenWrite ); + assert( op==OP_OpenWrite || p5==0 ); + assert( piDataCur!=0 ); + assert( piIdxCur!=0 ); + if( IsVirtual(pTab) ){ + /* This routine is a no-op for virtual tables. Leave the output + ** variables *piDataCur and *piIdxCur set to illegal cursor numbers + ** for improved error detection. */ + *piDataCur = *piIdxCur = -999; + return 0; + } + iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + v = pParse->pVdbe; + assert( v!=0 ); + if( iBase<0 ) iBase = pParse->nTab; + iDataCur = iBase++; + *piDataCur = iDataCur; + if( HasRowid(pTab) && (aToOpen==0 || aToOpen[0]) ){ + sqlite3OpenTable(pParse, iDataCur, iDb, pTab, op); + }else if( pParse->db->noSharedCache==0 ){ + sqlite3TableLock(pParse, iDb, pTab->tnum, op==OP_OpenWrite, pTab->zName); + } + *piIdxCur = iBase; + for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){ + int iIdxCur = iBase++; + assert( pIdx->pSchema==pTab->pSchema ); + if( IsPrimaryKeyIndex(pIdx) && !HasRowid(pTab) ){ + *piDataCur = iIdxCur; + p5 = 0; + } + if( aToOpen==0 || aToOpen[i+1] ){ + sqlite3VdbeAddOp3(v, op, iIdxCur, pIdx->tnum, iDb); + sqlite3VdbeSetP4KeyInfo(pParse, pIdx); + sqlite3VdbeChangeP5(v, p5); + VdbeComment((v, "%s", pIdx->zName)); + } + } + if( iBase>pParse->nTab ) pParse->nTab = iBase; + return i; +} + + +#ifdef SQLITE_TEST +/* +** The following global variable is incremented whenever the +** transfer optimization is used. This is used for testing +** purposes only - to make sure the transfer optimization really +** is happening when it is supposed to. +*/ +SQLITE_API int sqlite3_xferopt_count; +#endif /* SQLITE_TEST */ + + +#ifndef SQLITE_OMIT_XFER_OPT +/* +** Check to see if index pSrc is compatible as a source of data +** for index pDest in an insert transfer optimization. The rules +** for a compatible index: +** +** * The index is over the same set of columns +** * The same DESC and ASC markings occurs on all columns +** * The same onError processing (OE_Abort, OE_Ignore, etc) +** * The same collating sequence on each column +** * The index has the exact same WHERE clause +*/ +static int xferCompatibleIndex(Index *pDest, Index *pSrc){ + int i; + assert( pDest && pSrc ); + assert( pDest->pTable!=pSrc->pTable ); + if( pDest->nKeyCol!=pSrc->nKeyCol || pDest->nColumn!=pSrc->nColumn ){ + return 0; /* Different number of columns */ + } + if( pDest->onError!=pSrc->onError ){ + return 0; /* Different conflict resolution strategies */ + } + for(i=0; inKeyCol; i++){ + if( pSrc->aiColumn[i]!=pDest->aiColumn[i] ){ + return 0; /* Different columns indexed */ + } + if( pSrc->aiColumn[i]==XN_EXPR ){ + assert( pSrc->aColExpr!=0 && pDest->aColExpr!=0 ); + if( sqlite3ExprCompare(0, pSrc->aColExpr->a[i].pExpr, + pDest->aColExpr->a[i].pExpr, -1)!=0 ){ + return 0; /* Different expressions in the index */ + } + } + if( pSrc->aSortOrder[i]!=pDest->aSortOrder[i] ){ + return 0; /* Different sort orders */ + } + if( sqlite3_stricmp(pSrc->azColl[i],pDest->azColl[i])!=0 ){ + return 0; /* Different collating sequences */ + } + } + if( sqlite3ExprCompare(0, pSrc->pPartIdxWhere, pDest->pPartIdxWhere, -1) ){ + return 0; /* Different WHERE clauses */ + } + + /* If no test above fails then the indices must be compatible */ + return 1; +} + +/* +** Attempt the transfer optimization on INSERTs of the form +** +** INSERT INTO tab1 SELECT * FROM tab2; +** +** The xfer optimization transfers raw records from tab2 over to tab1. +** Columns are not decoded and reassembled, which greatly improves +** performance. Raw index records are transferred in the same way. +** +** The xfer optimization is only attempted if tab1 and tab2 are compatible. +** There are lots of rules for determining compatibility - see comments +** embedded in the code for details. +** +** This routine returns TRUE if the optimization is guaranteed to be used. +** Sometimes the xfer optimization will only work if the destination table +** is empty - a factor that can only be determined at run-time. In that +** case, this routine generates code for the xfer optimization but also +** does a test to see if the destination table is empty and jumps over the +** xfer optimization code if the test fails. In that case, this routine +** returns FALSE so that the caller will know to go ahead and generate +** an unoptimized transfer. This routine also returns FALSE if there +** is no chance that the xfer optimization can be applied. +** +** This optimization is particularly useful at making VACUUM run faster. +*/ +static int xferOptimization( + Parse *pParse, /* Parser context */ + Table *pDest, /* The table we are inserting into */ + Select *pSelect, /* A SELECT statement to use as the data source */ + int onError, /* How to handle constraint errors */ + int iDbDest /* The database of pDest */ +){ + sqlite3 *db = pParse->db; + ExprList *pEList; /* The result set of the SELECT */ + Table *pSrc; /* The table in the FROM clause of SELECT */ + Index *pSrcIdx, *pDestIdx; /* Source and destination indices */ + SrcItem *pItem; /* An element of pSelect->pSrc */ + int i; /* Loop counter */ + int iDbSrc; /* The database of pSrc */ + int iSrc, iDest; /* Cursors from source and destination */ + int addr1, addr2; /* Loop addresses */ + int emptyDestTest = 0; /* Address of test for empty pDest */ + int emptySrcTest = 0; /* Address of test for empty pSrc */ + Vdbe *v; /* The VDBE we are building */ + int regAutoinc; /* Memory register used by AUTOINC */ + int destHasUniqueIdx = 0; /* True if pDest has a UNIQUE index */ + int regData, regRowid; /* Registers holding data and rowid */ + + assert( pSelect!=0 ); + if( pParse->pWith || pSelect->pWith ){ + /* Do not attempt to process this query if there are an WITH clauses + ** attached to it. Proceeding may generate a false "no such table: xxx" + ** error if pSelect reads from a CTE named "xxx". */ + return 0; + } +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pDest) ){ + return 0; /* tab1 must not be a virtual table */ + } +#endif + if( onError==OE_Default ){ + if( pDest->iPKey>=0 ) onError = pDest->keyConf; + if( onError==OE_Default ) onError = OE_Abort; + } + assert(pSelect->pSrc); /* allocated even if there is no FROM clause */ + if( pSelect->pSrc->nSrc!=1 ){ + return 0; /* FROM clause must have exactly one term */ + } + if( pSelect->pSrc->a[0].fg.isSubquery ){ + return 0; /* FROM clause cannot contain a subquery */ + } + if( pSelect->pWhere ){ + return 0; /* SELECT may not have a WHERE clause */ + } + if( pSelect->pOrderBy ){ + return 0; /* SELECT may not have an ORDER BY clause */ + } + /* Do not need to test for a HAVING clause. If HAVING is present but + ** there is no ORDER BY, we will get an error. */ + if( pSelect->pGroupBy ){ + return 0; /* SELECT may not have a GROUP BY clause */ + } + if( pSelect->pLimit ){ + return 0; /* SELECT may not have a LIMIT clause */ + } + if( pSelect->pPrior ){ + return 0; /* SELECT may not be a compound query */ + } + if( pSelect->selFlags & SF_Distinct ){ + return 0; /* SELECT may not be DISTINCT */ + } + pEList = pSelect->pEList; + assert( pEList!=0 ); + if( pEList->nExpr!=1 ){ + return 0; /* The result set must have exactly one column */ + } + assert( pEList->a[0].pExpr ); + if( pEList->a[0].pExpr->op!=TK_ASTERISK ){ + return 0; /* The result set must be the special operator "*" */ + } + + /* At this point we have established that the statement is of the + ** correct syntactic form to participate in this optimization. Now + ** we have to check the semantics. + */ + pItem = pSelect->pSrc->a; + pSrc = sqlite3LocateTableItem(pParse, 0, pItem); + if( pSrc==0 ){ + return 0; /* FROM clause does not contain a real table */ + } + if( pSrc->tnum==pDest->tnum && pSrc->pSchema==pDest->pSchema ){ + testcase( pSrc!=pDest ); /* Possible due to bad sqlite_schema.rootpage */ + return 0; /* tab1 and tab2 may not be the same table */ + } + if( HasRowid(pDest)!=HasRowid(pSrc) ){ + return 0; /* source and destination must both be WITHOUT ROWID or not */ + } + if( !IsOrdinaryTable(pSrc) ){ + return 0; /* tab2 may not be a view or virtual table */ + } + if( pDest->nCol!=pSrc->nCol ){ + return 0; /* Number of columns must be the same in tab1 and tab2 */ + } + if( pDest->iPKey!=pSrc->iPKey ){ + return 0; /* Both tables must have the same INTEGER PRIMARY KEY */ + } + if( (pDest->tabFlags & TF_Strict)!=0 && (pSrc->tabFlags & TF_Strict)==0 ){ + return 0; /* Cannot feed from a non-strict into a strict table */ + } + for(i=0; inCol; i++){ + Column *pDestCol = &pDest->aCol[i]; + Column *pSrcCol = &pSrc->aCol[i]; +#ifdef SQLITE_ENABLE_HIDDEN_COLUMNS + if( (db->mDbFlags & DBFLAG_Vacuum)==0 + && (pDestCol->colFlags | pSrcCol->colFlags) & COLFLAG_HIDDEN + ){ + return 0; /* Neither table may have __hidden__ columns */ + } +#endif +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + /* Even if tables t1 and t2 have identical schemas, if they contain + ** generated columns, then this statement is semantically incorrect: + ** + ** INSERT INTO t2 SELECT * FROM t1; + ** + ** The reason is that generated column values are returned by the + ** the SELECT statement on the right but the INSERT statement on the + ** left wants them to be omitted. + ** + ** Nevertheless, this is a useful notational shorthand to tell SQLite + ** to do a bulk transfer all of the content from t1 over to t2. + ** + ** We could, in theory, disable this (except for internal use by the + ** VACUUM command where it is actually needed). But why do that? It + ** seems harmless enough, and provides a useful service. + */ + if( (pDestCol->colFlags & COLFLAG_GENERATED) != + (pSrcCol->colFlags & COLFLAG_GENERATED) ){ + return 0; /* Both columns have the same generated-column type */ + } + /* But the transfer is only allowed if both the source and destination + ** tables have the exact same expressions for generated columns. + ** This requirement could be relaxed for VIRTUAL columns, I suppose. + */ + if( (pDestCol->colFlags & COLFLAG_GENERATED)!=0 ){ + if( sqlite3ExprCompare(0, + sqlite3ColumnExpr(pSrc, pSrcCol), + sqlite3ColumnExpr(pDest, pDestCol), -1)!=0 ){ + testcase( pDestCol->colFlags & COLFLAG_VIRTUAL ); + testcase( pDestCol->colFlags & COLFLAG_STORED ); + return 0; /* Different generator expressions */ + } + } +#endif + if( pDestCol->affinity!=pSrcCol->affinity ){ + return 0; /* Affinity must be the same on all columns */ + } + if( sqlite3_stricmp(sqlite3ColumnColl(pDestCol), + sqlite3ColumnColl(pSrcCol))!=0 ){ + return 0; /* Collating sequence must be the same on all columns */ + } + if( pDestCol->notNull && !pSrcCol->notNull ){ + return 0; /* tab2 must be NOT NULL if tab1 is */ + } + /* Default values for second and subsequent columns need to match. */ + if( (pDestCol->colFlags & COLFLAG_GENERATED)==0 && i>0 ){ + Expr *pDestExpr = sqlite3ColumnExpr(pDest, pDestCol); + Expr *pSrcExpr = sqlite3ColumnExpr(pSrc, pSrcCol); + assert( pDestExpr==0 || pDestExpr->op==TK_SPAN ); + assert( pDestExpr==0 || !ExprHasProperty(pDestExpr, EP_IntValue) ); + assert( pSrcExpr==0 || pSrcExpr->op==TK_SPAN ); + assert( pSrcExpr==0 || !ExprHasProperty(pSrcExpr, EP_IntValue) ); + if( (pDestExpr==0)!=(pSrcExpr==0) + || (pDestExpr!=0 && strcmp(pDestExpr->u.zToken, + pSrcExpr->u.zToken)!=0) + ){ + return 0; /* Default values must be the same for all columns */ + } + } + } + for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){ + if( IsUniqueIndex(pDestIdx) ){ + destHasUniqueIdx = 1; + } + for(pSrcIdx=pSrc->pIndex; pSrcIdx; pSrcIdx=pSrcIdx->pNext){ + if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break; + } + if( pSrcIdx==0 ){ + return 0; /* pDestIdx has no corresponding index in pSrc */ + } + if( pSrcIdx->tnum==pDestIdx->tnum && pSrc->pSchema==pDest->pSchema + && sqlite3FaultSim(411)==SQLITE_OK ){ + /* The sqlite3FaultSim() call allows this corruption test to be + ** bypassed during testing, in order to exercise other corruption tests + ** further downstream. */ + return 0; /* Corrupt schema - two indexes on the same btree */ + } + } +#ifndef SQLITE_OMIT_CHECK + if( pDest->pCheck + && (db->mDbFlags & DBFLAG_Vacuum)==0 + && sqlite3ExprListCompare(pSrc->pCheck,pDest->pCheck,-1) + ){ + return 0; /* Tables have different CHECK constraints. Ticket #2252 */ + } +#endif +#ifndef SQLITE_OMIT_FOREIGN_KEY + /* Disallow the transfer optimization if the destination table contains + ** any foreign key constraints. This is more restrictive than necessary. + ** But the main beneficiary of the transfer optimization is the VACUUM + ** command, and the VACUUM command disables foreign key constraints. So + ** the extra complication to make this rule less restrictive is probably + ** not worth the effort. Ticket [6284df89debdfa61db8073e062908af0c9b6118e] + */ + assert( IsOrdinaryTable(pDest) ); + if( (db->flags & SQLITE_ForeignKeys)!=0 && pDest->u.tab.pFKey!=0 ){ + return 0; + } +#endif + if( (db->flags & SQLITE_CountRows)!=0 ){ + return 0; /* xfer opt does not play well with PRAGMA count_changes */ + } + + /* If we get this far, it means that the xfer optimization is at + ** least a possibility, though it might only work if the destination + ** table (tab1) is initially empty. + */ +#ifdef SQLITE_TEST + sqlite3_xferopt_count++; +#endif + iDbSrc = sqlite3SchemaToIndex(db, pSrc->pSchema); + v = sqlite3GetVdbe(pParse); + sqlite3CodeVerifySchema(pParse, iDbSrc); + iSrc = pParse->nTab++; + iDest = pParse->nTab++; + regAutoinc = autoIncBegin(pParse, iDbDest, pDest); + regData = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp2(v, OP_Null, 0, regData); + regRowid = sqlite3GetTempReg(pParse); + sqlite3OpenTable(pParse, iDest, iDbDest, pDest, OP_OpenWrite); + assert( HasRowid(pDest) || destHasUniqueIdx ); + if( (db->mDbFlags & DBFLAG_Vacuum)==0 && ( + (pDest->iPKey<0 && pDest->pIndex!=0) /* (1) */ + || destHasUniqueIdx /* (2) */ + || (onError!=OE_Abort && onError!=OE_Rollback) /* (3) */ + )){ + /* In some circumstances, we are able to run the xfer optimization + ** only if the destination table is initially empty. Unless the + ** DBFLAG_Vacuum flag is set, this block generates code to make + ** that determination. If DBFLAG_Vacuum is set, then the destination + ** table is always empty. + ** + ** Conditions under which the destination must be empty: + ** + ** (1) There is no INTEGER PRIMARY KEY but there are indices. + ** (If the destination is not initially empty, the rowid fields + ** of index entries might need to change.) + ** + ** (2) The destination has a unique index. (The xfer optimization + ** is unable to test uniqueness.) + ** + ** (3) onError is something other than OE_Abort and OE_Rollback. + */ + addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iDest, 0); VdbeCoverage(v); + emptyDestTest = sqlite3VdbeAddOp0(v, OP_Goto); + sqlite3VdbeJumpHere(v, addr1); + } + if( HasRowid(pSrc) ){ + u8 insFlags; + sqlite3OpenTable(pParse, iSrc, iDbSrc, pSrc, OP_OpenRead); + emptySrcTest = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0); VdbeCoverage(v); + if( pDest->iPKey>=0 ){ + addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid); + if( (db->mDbFlags & DBFLAG_Vacuum)==0 ){ + sqlite3VdbeVerifyAbortable(v, onError); + addr2 = sqlite3VdbeAddOp3(v, OP_NotExists, iDest, 0, regRowid); + VdbeCoverage(v); + sqlite3RowidConstraint(pParse, onError, pDest); + sqlite3VdbeJumpHere(v, addr2); + } + autoIncStep(pParse, regAutoinc, regRowid); + }else if( pDest->pIndex==0 && !(db->mDbFlags & DBFLAG_VacuumInto) ){ + addr1 = sqlite3VdbeAddOp2(v, OP_NewRowid, iDest, regRowid); + }else{ + addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid); + assert( (pDest->tabFlags & TF_Autoincrement)==0 ); + } + + if( db->mDbFlags & DBFLAG_Vacuum ){ + sqlite3VdbeAddOp1(v, OP_SeekEnd, iDest); + insFlags = OPFLAG_APPEND|OPFLAG_USESEEKRESULT|OPFLAG_PREFORMAT; + }else{ + insFlags = OPFLAG_NCHANGE|OPFLAG_LASTROWID|OPFLAG_APPEND|OPFLAG_PREFORMAT; + } +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + if( (db->mDbFlags & DBFLAG_Vacuum)==0 ){ + sqlite3VdbeAddOp3(v, OP_RowData, iSrc, regData, 1); + insFlags &= ~OPFLAG_PREFORMAT; + }else +#endif + { + sqlite3VdbeAddOp3(v, OP_RowCell, iDest, iSrc, regRowid); + } + sqlite3VdbeAddOp3(v, OP_Insert, iDest, regData, regRowid); + if( (db->mDbFlags & DBFLAG_Vacuum)==0 ){ + sqlite3VdbeChangeP4(v, -1, (char*)pDest, P4_TABLE); + } + sqlite3VdbeChangeP5(v, insFlags); + + sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1); VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0); + sqlite3VdbeAddOp2(v, OP_Close, iDest, 0); + }else{ + sqlite3TableLock(pParse, iDbDest, pDest->tnum, 1, pDest->zName); + sqlite3TableLock(pParse, iDbSrc, pSrc->tnum, 0, pSrc->zName); + } + for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){ + u8 idxInsFlags = 0; + for(pSrcIdx=pSrc->pIndex; ALWAYS(pSrcIdx); pSrcIdx=pSrcIdx->pNext){ + if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break; + } + assert( pSrcIdx ); + sqlite3VdbeAddOp3(v, OP_OpenRead, iSrc, pSrcIdx->tnum, iDbSrc); + sqlite3VdbeSetP4KeyInfo(pParse, pSrcIdx); + VdbeComment((v, "%s", pSrcIdx->zName)); + sqlite3VdbeAddOp3(v, OP_OpenWrite, iDest, pDestIdx->tnum, iDbDest); + sqlite3VdbeSetP4KeyInfo(pParse, pDestIdx); + sqlite3VdbeChangeP5(v, OPFLAG_BULKCSR); + VdbeComment((v, "%s", pDestIdx->zName)); + addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0); VdbeCoverage(v); + if( db->mDbFlags & DBFLAG_Vacuum ){ + /* This INSERT command is part of a VACUUM operation, which guarantees + ** that the destination table is empty. If all indexed columns use + ** collation sequence BINARY, then it can also be assumed that the + ** index will be populated by inserting keys in strictly sorted + ** order. In this case, instead of seeking within the b-tree as part + ** of every OP_IdxInsert opcode, an OP_SeekEnd is added before the + ** OP_IdxInsert to seek to the point within the b-tree where each key + ** should be inserted. This is faster. + ** + ** If any of the indexed columns use a collation sequence other than + ** BINARY, this optimization is disabled. This is because the user + ** might change the definition of a collation sequence and then run + ** a VACUUM command. In that case keys may not be written in strictly + ** sorted order. */ + for(i=0; inColumn; i++){ + const char *zColl = pSrcIdx->azColl[i]; + if( sqlite3_stricmp(sqlite3StrBINARY, zColl) ) break; + } + if( i==pSrcIdx->nColumn ){ + idxInsFlags = OPFLAG_USESEEKRESULT|OPFLAG_PREFORMAT; + sqlite3VdbeAddOp1(v, OP_SeekEnd, iDest); + sqlite3VdbeAddOp2(v, OP_RowCell, iDest, iSrc); + } + }else if( !HasRowid(pSrc) && pDestIdx->idxType==SQLITE_IDXTYPE_PRIMARYKEY ){ + idxInsFlags |= OPFLAG_NCHANGE; + } + if( idxInsFlags!=(OPFLAG_USESEEKRESULT|OPFLAG_PREFORMAT) ){ + sqlite3VdbeAddOp3(v, OP_RowData, iSrc, regData, 1); + if( (db->mDbFlags & DBFLAG_Vacuum)==0 + && !HasRowid(pDest) + && IsPrimaryKeyIndex(pDestIdx) + ){ + codeWithoutRowidPreupdate(pParse, pDest, iDest, regData); + } + } + sqlite3VdbeAddOp2(v, OP_IdxInsert, iDest, regData); + sqlite3VdbeChangeP5(v, idxInsFlags|OPFLAG_APPEND); + sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1+1); VdbeCoverage(v); + sqlite3VdbeJumpHere(v, addr1); + sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0); + sqlite3VdbeAddOp2(v, OP_Close, iDest, 0); + } + if( emptySrcTest ) sqlite3VdbeJumpHere(v, emptySrcTest); + sqlite3ReleaseTempReg(pParse, regRowid); + sqlite3ReleaseTempReg(pParse, regData); + if( emptyDestTest ){ + sqlite3AutoincrementEnd(pParse); + sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_OK, 0); + sqlite3VdbeJumpHere(v, emptyDestTest); + sqlite3VdbeAddOp2(v, OP_Close, iDest, 0); + return 0; + }else{ + return 1; + } +} +#endif /* SQLITE_OMIT_XFER_OPT */ + +/************** End of insert.c **********************************************/ +/************** Begin file legacy.c ******************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** Main file for the SQLite library. The routines in this file +** implement the programmer interface to the library. Routines in +** other files are for internal use by SQLite and should not be +** accessed by users of the library. +*/ + +/* #include "sqliteInt.h" */ + +/* +** Execute SQL code. Return one of the SQLITE_ success/failure +** codes. Also write an error message into memory obtained from +** malloc() and make *pzErrMsg point to that message. +** +** If the SQL is a query, then for each row in the query result +** the xCallback() function is called. pArg becomes the first +** argument to xCallback(). If xCallback=NULL then no callback +** is invoked, even for queries. +*/ +SQLITE_API int sqlite3_exec( + sqlite3 *db, /* The database on which the SQL executes */ + const char *zSql, /* The SQL to be executed */ + sqlite3_callback xCallback, /* Invoke this callback routine */ + void *pArg, /* First argument to xCallback() */ + char **pzErrMsg /* Write error messages here */ +){ + int rc = SQLITE_OK; /* Return code */ + const char *zLeftover; /* Tail of unprocessed SQL */ + sqlite3_stmt *pStmt = 0; /* The current SQL statement */ + char **azCols = 0; /* Names of result columns */ + int callbackIsInit; /* True if callback data is initialized */ + + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; + if( zSql==0 ) zSql = ""; + + sqlite3_mutex_enter(db->mutex); + sqlite3Error(db, SQLITE_OK); + while( rc==SQLITE_OK && zSql[0] ){ + int nCol = 0; + char **azVals = 0; + + pStmt = 0; + rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, &zLeftover); + assert( rc==SQLITE_OK || pStmt==0 ); + if( rc!=SQLITE_OK ){ + continue; + } + if( !pStmt ){ + /* this happens for a comment or white-space */ + zSql = zLeftover; + continue; + } + callbackIsInit = 0; + + while( 1 ){ + int i; + rc = sqlite3_step(pStmt); + + /* Invoke the callback function if required */ + if( xCallback && (SQLITE_ROW==rc || + (SQLITE_DONE==rc && !callbackIsInit + && db->flags&SQLITE_NullCallback)) ){ + if( !callbackIsInit ){ + nCol = sqlite3_column_count(pStmt); + azCols = sqlite3DbMallocRaw(db, (2*nCol+1)*sizeof(const char*)); + if( azCols==0 ){ + goto exec_out; + } + for(i=0; ierrMask)==rc ); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/************** End of legacy.c **********************************************/ +/************** Begin file loadext.c *****************************************/ +/* +** 2006 June 7 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code used to dynamically load extensions into +** the SQLite library. +*/ + +#ifndef SQLITE_CORE + #define SQLITE_CORE 1 /* Disable the API redefinition in sqlite3ext.h */ +#endif +/************** Include sqlite3ext.h in the middle of loadext.c **************/ +/************** Begin file sqlite3ext.h **************************************/ +/* +** 2006 June 7 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This header file defines the SQLite interface for use by +** shared libraries that want to be imported as extensions into +** an SQLite instance. Shared libraries that intend to be loaded +** as extensions by SQLite should #include this file instead of +** sqlite3.h. +*/ +#ifndef SQLITE3EXT_H +#define SQLITE3EXT_H +/* #include "sqlite3.h" */ + +/* +** The following structure holds pointers to all of the SQLite API +** routines. +** +** WARNING: In order to maintain backwards compatibility, add new +** interfaces to the end of this structure only. If you insert new +** interfaces in the middle of this structure, then older different +** versions of SQLite will not be able to load each other's shared +** libraries! +*/ +struct sqlite3_api_routines { + void * (*aggregate_context)(sqlite3_context*,int nBytes); + int (*aggregate_count)(sqlite3_context*); + int (*bind_blob)(sqlite3_stmt*,int,const void*,int n,void(*)(void*)); + int (*bind_double)(sqlite3_stmt*,int,double); + int (*bind_int)(sqlite3_stmt*,int,int); + int (*bind_int64)(sqlite3_stmt*,int,sqlite_int64); + int (*bind_null)(sqlite3_stmt*,int); + int (*bind_parameter_count)(sqlite3_stmt*); + int (*bind_parameter_index)(sqlite3_stmt*,const char*zName); + const char * (*bind_parameter_name)(sqlite3_stmt*,int); + int (*bind_text)(sqlite3_stmt*,int,const char*,int n,void(*)(void*)); + int (*bind_text16)(sqlite3_stmt*,int,const void*,int,void(*)(void*)); + int (*bind_value)(sqlite3_stmt*,int,const sqlite3_value*); + int (*busy_handler)(sqlite3*,int(*)(void*,int),void*); + int (*busy_timeout)(sqlite3*,int ms); + int (*changes)(sqlite3*); + int (*close)(sqlite3*); + int (*collation_needed)(sqlite3*,void*,void(*)(void*,sqlite3*, + int eTextRep,const char*)); + int (*collation_needed16)(sqlite3*,void*,void(*)(void*,sqlite3*, + int eTextRep,const void*)); + const void * (*column_blob)(sqlite3_stmt*,int iCol); + int (*column_bytes)(sqlite3_stmt*,int iCol); + int (*column_bytes16)(sqlite3_stmt*,int iCol); + int (*column_count)(sqlite3_stmt*pStmt); + const char * (*column_database_name)(sqlite3_stmt*,int); + const void * (*column_database_name16)(sqlite3_stmt*,int); + const char * (*column_decltype)(sqlite3_stmt*,int i); + const void * (*column_decltype16)(sqlite3_stmt*,int); + double (*column_double)(sqlite3_stmt*,int iCol); + int (*column_int)(sqlite3_stmt*,int iCol); + sqlite_int64 (*column_int64)(sqlite3_stmt*,int iCol); + const char * (*column_name)(sqlite3_stmt*,int); + const void * (*column_name16)(sqlite3_stmt*,int); + const char * (*column_origin_name)(sqlite3_stmt*,int); + const void * (*column_origin_name16)(sqlite3_stmt*,int); + const char * (*column_table_name)(sqlite3_stmt*,int); + const void * (*column_table_name16)(sqlite3_stmt*,int); + const unsigned char * (*column_text)(sqlite3_stmt*,int iCol); + const void * (*column_text16)(sqlite3_stmt*,int iCol); + int (*column_type)(sqlite3_stmt*,int iCol); + sqlite3_value* (*column_value)(sqlite3_stmt*,int iCol); + void * (*commit_hook)(sqlite3*,int(*)(void*),void*); + int (*complete)(const char*sql); + int (*complete16)(const void*sql); + int (*create_collation)(sqlite3*,const char*,int,void*, + int(*)(void*,int,const void*,int,const void*)); + int (*create_collation16)(sqlite3*,const void*,int,void*, + int(*)(void*,int,const void*,int,const void*)); + int (*create_function)(sqlite3*,const char*,int,int,void*, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*)); + int (*create_function16)(sqlite3*,const void*,int,int,void*, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*)); + int (*create_module)(sqlite3*,const char*,const sqlite3_module*,void*); + int (*data_count)(sqlite3_stmt*pStmt); + sqlite3 * (*db_handle)(sqlite3_stmt*); + int (*declare_vtab)(sqlite3*,const char*); + int (*enable_shared_cache)(int); + int (*errcode)(sqlite3*db); + const char * (*errmsg)(sqlite3*); + const void * (*errmsg16)(sqlite3*); + int (*exec)(sqlite3*,const char*,sqlite3_callback,void*,char**); + int (*expired)(sqlite3_stmt*); + int (*finalize)(sqlite3_stmt*pStmt); + void (*free)(void*); + void (*free_table)(char**result); + int (*get_autocommit)(sqlite3*); + void * (*get_auxdata)(sqlite3_context*,int); + int (*get_table)(sqlite3*,const char*,char***,int*,int*,char**); + int (*global_recover)(void); + void (*interruptx)(sqlite3*); + sqlite_int64 (*last_insert_rowid)(sqlite3*); + const char * (*libversion)(void); + int (*libversion_number)(void); + void *(*malloc)(int); + char * (*mprintf)(const char*,...); + int (*open)(const char*,sqlite3**); + int (*open16)(const void*,sqlite3**); + int (*prepare)(sqlite3*,const char*,int,sqlite3_stmt**,const char**); + int (*prepare16)(sqlite3*,const void*,int,sqlite3_stmt**,const void**); + void * (*profile)(sqlite3*,void(*)(void*,const char*,sqlite_uint64),void*); + void (*progress_handler)(sqlite3*,int,int(*)(void*),void*); + void *(*realloc)(void*,int); + int (*reset)(sqlite3_stmt*pStmt); + void (*result_blob)(sqlite3_context*,const void*,int,void(*)(void*)); + void (*result_double)(sqlite3_context*,double); + void (*result_error)(sqlite3_context*,const char*,int); + void (*result_error16)(sqlite3_context*,const void*,int); + void (*result_int)(sqlite3_context*,int); + void (*result_int64)(sqlite3_context*,sqlite_int64); + void (*result_null)(sqlite3_context*); + void (*result_text)(sqlite3_context*,const char*,int,void(*)(void*)); + void (*result_text16)(sqlite3_context*,const void*,int,void(*)(void*)); + void (*result_text16be)(sqlite3_context*,const void*,int,void(*)(void*)); + void (*result_text16le)(sqlite3_context*,const void*,int,void(*)(void*)); + void (*result_value)(sqlite3_context*,sqlite3_value*); + void * (*rollback_hook)(sqlite3*,void(*)(void*),void*); + int (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*, + const char*,const char*),void*); + void (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*)); + char * (*xsnprintf)(int,char*,const char*,...); + int (*step)(sqlite3_stmt*); + int (*table_column_metadata)(sqlite3*,const char*,const char*,const char*, + char const**,char const**,int*,int*,int*); + void (*thread_cleanup)(void); + int (*total_changes)(sqlite3*); + void * (*trace)(sqlite3*,void(*xTrace)(void*,const char*),void*); + int (*transfer_bindings)(sqlite3_stmt*,sqlite3_stmt*); + void * (*update_hook)(sqlite3*,void(*)(void*,int ,char const*,char const*, + sqlite_int64),void*); + void * (*user_data)(sqlite3_context*); + const void * (*value_blob)(sqlite3_value*); + int (*value_bytes)(sqlite3_value*); + int (*value_bytes16)(sqlite3_value*); + double (*value_double)(sqlite3_value*); + int (*value_int)(sqlite3_value*); + sqlite_int64 (*value_int64)(sqlite3_value*); + int (*value_numeric_type)(sqlite3_value*); + const unsigned char * (*value_text)(sqlite3_value*); + const void * (*value_text16)(sqlite3_value*); + const void * (*value_text16be)(sqlite3_value*); + const void * (*value_text16le)(sqlite3_value*); + int (*value_type)(sqlite3_value*); + char *(*vmprintf)(const char*,va_list); + /* Added ??? */ + int (*overload_function)(sqlite3*, const char *zFuncName, int nArg); + /* Added by 3.3.13 */ + int (*prepare_v2)(sqlite3*,const char*,int,sqlite3_stmt**,const char**); + int (*prepare16_v2)(sqlite3*,const void*,int,sqlite3_stmt**,const void**); + int (*clear_bindings)(sqlite3_stmt*); + /* Added by 3.4.1 */ + int (*create_module_v2)(sqlite3*,const char*,const sqlite3_module*,void*, + void (*xDestroy)(void *)); + /* Added by 3.5.0 */ + int (*bind_zeroblob)(sqlite3_stmt*,int,int); + int (*blob_bytes)(sqlite3_blob*); + int (*blob_close)(sqlite3_blob*); + int (*blob_open)(sqlite3*,const char*,const char*,const char*,sqlite3_int64, + int,sqlite3_blob**); + int (*blob_read)(sqlite3_blob*,void*,int,int); + int (*blob_write)(sqlite3_blob*,const void*,int,int); + int (*create_collation_v2)(sqlite3*,const char*,int,void*, + int(*)(void*,int,const void*,int,const void*), + void(*)(void*)); + int (*file_control)(sqlite3*,const char*,int,void*); + sqlite3_int64 (*memory_highwater)(int); + sqlite3_int64 (*memory_used)(void); + sqlite3_mutex *(*mutex_alloc)(int); + void (*mutex_enter)(sqlite3_mutex*); + void (*mutex_free)(sqlite3_mutex*); + void (*mutex_leave)(sqlite3_mutex*); + int (*mutex_try)(sqlite3_mutex*); + int (*open_v2)(const char*,sqlite3**,int,const char*); + int (*release_memory)(int); + void (*result_error_nomem)(sqlite3_context*); + void (*result_error_toobig)(sqlite3_context*); + int (*sleep)(int); + void (*soft_heap_limit)(int); + sqlite3_vfs *(*vfs_find)(const char*); + int (*vfs_register)(sqlite3_vfs*,int); + int (*vfs_unregister)(sqlite3_vfs*); + int (*xthreadsafe)(void); + void (*result_zeroblob)(sqlite3_context*,int); + void (*result_error_code)(sqlite3_context*,int); + int (*test_control)(int, ...); + void (*randomness)(int,void*); + sqlite3 *(*context_db_handle)(sqlite3_context*); + int (*extended_result_codes)(sqlite3*,int); + int (*limit)(sqlite3*,int,int); + sqlite3_stmt *(*next_stmt)(sqlite3*,sqlite3_stmt*); + const char *(*sql)(sqlite3_stmt*); + int (*status)(int,int*,int*,int); + int (*backup_finish)(sqlite3_backup*); + sqlite3_backup *(*backup_init)(sqlite3*,const char*,sqlite3*,const char*); + int (*backup_pagecount)(sqlite3_backup*); + int (*backup_remaining)(sqlite3_backup*); + int (*backup_step)(sqlite3_backup*,int); + const char *(*compileoption_get)(int); + int (*compileoption_used)(const char*); + int (*create_function_v2)(sqlite3*,const char*,int,int,void*, + void (*xFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*), + void(*xDestroy)(void*)); + int (*db_config)(sqlite3*,int,...); + sqlite3_mutex *(*db_mutex)(sqlite3*); + int (*db_status)(sqlite3*,int,int*,int*,int); + int (*extended_errcode)(sqlite3*); + void (*log)(int,const char*,...); + sqlite3_int64 (*soft_heap_limit64)(sqlite3_int64); + const char *(*sourceid)(void); + int (*stmt_status)(sqlite3_stmt*,int,int); + int (*strnicmp)(const char*,const char*,int); + int (*unlock_notify)(sqlite3*,void(*)(void**,int),void*); + int (*wal_autocheckpoint)(sqlite3*,int); + int (*wal_checkpoint)(sqlite3*,const char*); + void *(*wal_hook)(sqlite3*,int(*)(void*,sqlite3*,const char*,int),void*); + int (*blob_reopen)(sqlite3_blob*,sqlite3_int64); + int (*vtab_config)(sqlite3*,int op,...); + int (*vtab_on_conflict)(sqlite3*); + /* Version 3.7.16 and later */ + int (*close_v2)(sqlite3*); + const char *(*db_filename)(sqlite3*,const char*); + int (*db_readonly)(sqlite3*,const char*); + int (*db_release_memory)(sqlite3*); + const char *(*errstr)(int); + int (*stmt_busy)(sqlite3_stmt*); + int (*stmt_readonly)(sqlite3_stmt*); + int (*stricmp)(const char*,const char*); + int (*uri_boolean)(const char*,const char*,int); + sqlite3_int64 (*uri_int64)(const char*,const char*,sqlite3_int64); + const char *(*uri_parameter)(const char*,const char*); + char *(*xvsnprintf)(int,char*,const char*,va_list); + int (*wal_checkpoint_v2)(sqlite3*,const char*,int,int*,int*); + /* Version 3.8.7 and later */ + int (*auto_extension)(void(*)(void)); + int (*bind_blob64)(sqlite3_stmt*,int,const void*,sqlite3_uint64, + void(*)(void*)); + int (*bind_text64)(sqlite3_stmt*,int,const char*,sqlite3_uint64, + void(*)(void*),unsigned char); + int (*cancel_auto_extension)(void(*)(void)); + int (*load_extension)(sqlite3*,const char*,const char*,char**); + void *(*malloc64)(sqlite3_uint64); + sqlite3_uint64 (*msize)(void*); + void *(*realloc64)(void*,sqlite3_uint64); + void (*reset_auto_extension)(void); + void (*result_blob64)(sqlite3_context*,const void*,sqlite3_uint64, + void(*)(void*)); + void (*result_text64)(sqlite3_context*,const char*,sqlite3_uint64, + void(*)(void*), unsigned char); + int (*strglob)(const char*,const char*); + /* Version 3.8.11 and later */ + sqlite3_value *(*value_dup)(const sqlite3_value*); + void (*value_free)(sqlite3_value*); + int (*result_zeroblob64)(sqlite3_context*,sqlite3_uint64); + int (*bind_zeroblob64)(sqlite3_stmt*, int, sqlite3_uint64); + /* Version 3.9.0 and later */ + unsigned int (*value_subtype)(sqlite3_value*); + void (*result_subtype)(sqlite3_context*,unsigned int); + /* Version 3.10.0 and later */ + int (*status64)(int,sqlite3_int64*,sqlite3_int64*,int); + int (*strlike)(const char*,const char*,unsigned int); + int (*db_cacheflush)(sqlite3*); + /* Version 3.12.0 and later */ + int (*system_errno)(sqlite3*); + /* Version 3.14.0 and later */ + int (*trace_v2)(sqlite3*,unsigned,int(*)(unsigned,void*,void*,void*),void*); + char *(*expanded_sql)(sqlite3_stmt*); + /* Version 3.18.0 and later */ + void (*set_last_insert_rowid)(sqlite3*,sqlite3_int64); + /* Version 3.20.0 and later */ + int (*prepare_v3)(sqlite3*,const char*,int,unsigned int, + sqlite3_stmt**,const char**); + int (*prepare16_v3)(sqlite3*,const void*,int,unsigned int, + sqlite3_stmt**,const void**); + int (*bind_pointer)(sqlite3_stmt*,int,void*,const char*,void(*)(void*)); + void (*result_pointer)(sqlite3_context*,void*,const char*,void(*)(void*)); + void *(*value_pointer)(sqlite3_value*,const char*); + int (*vtab_nochange)(sqlite3_context*); + int (*value_nochange)(sqlite3_value*); + const char *(*vtab_collation)(sqlite3_index_info*,int); + /* Version 3.24.0 and later */ + int (*keyword_count)(void); + int (*keyword_name)(int,const char**,int*); + int (*keyword_check)(const char*,int); + sqlite3_str *(*str_new)(sqlite3*); + char *(*str_finish)(sqlite3_str*); + void (*str_appendf)(sqlite3_str*, const char *zFormat, ...); + void (*str_vappendf)(sqlite3_str*, const char *zFormat, va_list); + void (*str_append)(sqlite3_str*, const char *zIn, int N); + void (*str_appendall)(sqlite3_str*, const char *zIn); + void (*str_appendchar)(sqlite3_str*, int N, char C); + void (*str_reset)(sqlite3_str*); + int (*str_errcode)(sqlite3_str*); + int (*str_length)(sqlite3_str*); + char *(*str_value)(sqlite3_str*); + /* Version 3.25.0 and later */ + int (*create_window_function)(sqlite3*,const char*,int,int,void*, + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*), + void (*xValue)(sqlite3_context*), + void (*xInv)(sqlite3_context*,int,sqlite3_value**), + void(*xDestroy)(void*)); + /* Version 3.26.0 and later */ + const char *(*normalized_sql)(sqlite3_stmt*); + /* Version 3.28.0 and later */ + int (*stmt_isexplain)(sqlite3_stmt*); + int (*value_frombind)(sqlite3_value*); + /* Version 3.30.0 and later */ + int (*drop_modules)(sqlite3*,const char**); + /* Version 3.31.0 and later */ + sqlite3_int64 (*hard_heap_limit64)(sqlite3_int64); + const char *(*uri_key)(const char*,int); + const char *(*filename_database)(const char*); + const char *(*filename_journal)(const char*); + const char *(*filename_wal)(const char*); + /* Version 3.32.0 and later */ + const char *(*create_filename)(const char*,const char*,const char*, + int,const char**); + void (*free_filename)(const char*); + sqlite3_file *(*database_file_object)(const char*); + /* Version 3.34.0 and later */ + int (*txn_state)(sqlite3*,const char*); + /* Version 3.36.1 and later */ + sqlite3_int64 (*changes64)(sqlite3*); + sqlite3_int64 (*total_changes64)(sqlite3*); + /* Version 3.37.0 and later */ + int (*autovacuum_pages)(sqlite3*, + unsigned int(*)(void*,const char*,unsigned int,unsigned int,unsigned int), + void*, void(*)(void*)); + /* Version 3.38.0 and later */ + int (*error_offset)(sqlite3*); + int (*vtab_rhs_value)(sqlite3_index_info*,int,sqlite3_value**); + int (*vtab_distinct)(sqlite3_index_info*); + int (*vtab_in)(sqlite3_index_info*,int,int); + int (*vtab_in_first)(sqlite3_value*,sqlite3_value**); + int (*vtab_in_next)(sqlite3_value*,sqlite3_value**); + /* Version 3.39.0 and later */ + int (*deserialize)(sqlite3*,const char*,unsigned char*, + sqlite3_int64,sqlite3_int64,unsigned); + unsigned char *(*serialize)(sqlite3*,const char *,sqlite3_int64*, + unsigned int); + const char *(*db_name)(sqlite3*,int); + /* Version 3.40.0 and later */ + int (*value_encoding)(sqlite3_value*); + /* Version 3.41.0 and later */ + int (*is_interrupted)(sqlite3*); + /* Version 3.43.0 and later */ + int (*stmt_explain)(sqlite3_stmt*,int); + /* Version 3.44.0 and later */ + void *(*get_clientdata)(sqlite3*,const char*); + int (*set_clientdata)(sqlite3*, const char*, void*, void(*)(void*)); + /* Version 3.50.0 and later */ + int (*setlk_timeout)(sqlite3*,int,int); + /* Version 3.51.0 and later */ + int (*set_errmsg)(sqlite3*,int,const char*); + int (*db_status64)(sqlite3*,int,sqlite3_int64*,sqlite3_int64*,int); + +}; + +/* +** This is the function signature used for all extension entry points. It +** is also defined in the file "loadext.c". +*/ +typedef int (*sqlite3_loadext_entry)( + sqlite3 *db, /* Handle to the database. */ + char **pzErrMsg, /* Used to set error string on failure. */ + const sqlite3_api_routines *pThunk /* Extension API function pointers. */ +); + +/* +** The following macros redefine the API routines so that they are +** redirected through the global sqlite3_api structure. +** +** This header file is also used by the loadext.c source file +** (part of the main SQLite library - not an extension) so that +** it can get access to the sqlite3_api_routines structure +** definition. But the main library does not want to redefine +** the API. So the redefinition macros are only valid if the +** SQLITE_CORE macros is undefined. +*/ +#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) +#define sqlite3_aggregate_context sqlite3_api->aggregate_context +#ifndef SQLITE_OMIT_DEPRECATED +#define sqlite3_aggregate_count sqlite3_api->aggregate_count +#endif +#define sqlite3_bind_blob sqlite3_api->bind_blob +#define sqlite3_bind_double sqlite3_api->bind_double +#define sqlite3_bind_int sqlite3_api->bind_int +#define sqlite3_bind_int64 sqlite3_api->bind_int64 +#define sqlite3_bind_null sqlite3_api->bind_null +#define sqlite3_bind_parameter_count sqlite3_api->bind_parameter_count +#define sqlite3_bind_parameter_index sqlite3_api->bind_parameter_index +#define sqlite3_bind_parameter_name sqlite3_api->bind_parameter_name +#define sqlite3_bind_text sqlite3_api->bind_text +#define sqlite3_bind_text16 sqlite3_api->bind_text16 +#define sqlite3_bind_value sqlite3_api->bind_value +#define sqlite3_busy_handler sqlite3_api->busy_handler +#define sqlite3_busy_timeout sqlite3_api->busy_timeout +#define sqlite3_changes sqlite3_api->changes +#define sqlite3_close sqlite3_api->close +#define sqlite3_collation_needed sqlite3_api->collation_needed +#define sqlite3_collation_needed16 sqlite3_api->collation_needed16 +#define sqlite3_column_blob sqlite3_api->column_blob +#define sqlite3_column_bytes sqlite3_api->column_bytes +#define sqlite3_column_bytes16 sqlite3_api->column_bytes16 +#define sqlite3_column_count sqlite3_api->column_count +#define sqlite3_column_database_name sqlite3_api->column_database_name +#define sqlite3_column_database_name16 sqlite3_api->column_database_name16 +#define sqlite3_column_decltype sqlite3_api->column_decltype +#define sqlite3_column_decltype16 sqlite3_api->column_decltype16 +#define sqlite3_column_double sqlite3_api->column_double +#define sqlite3_column_int sqlite3_api->column_int +#define sqlite3_column_int64 sqlite3_api->column_int64 +#define sqlite3_column_name sqlite3_api->column_name +#define sqlite3_column_name16 sqlite3_api->column_name16 +#define sqlite3_column_origin_name sqlite3_api->column_origin_name +#define sqlite3_column_origin_name16 sqlite3_api->column_origin_name16 +#define sqlite3_column_table_name sqlite3_api->column_table_name +#define sqlite3_column_table_name16 sqlite3_api->column_table_name16 +#define sqlite3_column_text sqlite3_api->column_text +#define sqlite3_column_text16 sqlite3_api->column_text16 +#define sqlite3_column_type sqlite3_api->column_type +#define sqlite3_column_value sqlite3_api->column_value +#define sqlite3_commit_hook sqlite3_api->commit_hook +#define sqlite3_complete sqlite3_api->complete +#define sqlite3_complete16 sqlite3_api->complete16 +#define sqlite3_create_collation sqlite3_api->create_collation +#define sqlite3_create_collation16 sqlite3_api->create_collation16 +#define sqlite3_create_function sqlite3_api->create_function +#define sqlite3_create_function16 sqlite3_api->create_function16 +#define sqlite3_create_module sqlite3_api->create_module +#define sqlite3_create_module_v2 sqlite3_api->create_module_v2 +#define sqlite3_data_count sqlite3_api->data_count +#define sqlite3_db_handle sqlite3_api->db_handle +#define sqlite3_declare_vtab sqlite3_api->declare_vtab +#define sqlite3_enable_shared_cache sqlite3_api->enable_shared_cache +#define sqlite3_errcode sqlite3_api->errcode +#define sqlite3_errmsg sqlite3_api->errmsg +#define sqlite3_errmsg16 sqlite3_api->errmsg16 +#define sqlite3_exec sqlite3_api->exec +#ifndef SQLITE_OMIT_DEPRECATED +#define sqlite3_expired sqlite3_api->expired +#endif +#define sqlite3_finalize sqlite3_api->finalize +#define sqlite3_free sqlite3_api->free +#define sqlite3_free_table sqlite3_api->free_table +#define sqlite3_get_autocommit sqlite3_api->get_autocommit +#define sqlite3_get_auxdata sqlite3_api->get_auxdata +#define sqlite3_get_table sqlite3_api->get_table +#ifndef SQLITE_OMIT_DEPRECATED +#define sqlite3_global_recover sqlite3_api->global_recover +#endif +#define sqlite3_interrupt sqlite3_api->interruptx +#define sqlite3_last_insert_rowid sqlite3_api->last_insert_rowid +#define sqlite3_libversion sqlite3_api->libversion +#define sqlite3_libversion_number sqlite3_api->libversion_number +#define sqlite3_malloc sqlite3_api->malloc +#define sqlite3_mprintf sqlite3_api->mprintf +#define sqlite3_open sqlite3_api->open +#define sqlite3_open16 sqlite3_api->open16 +#define sqlite3_prepare sqlite3_api->prepare +#define sqlite3_prepare16 sqlite3_api->prepare16 +#define sqlite3_prepare_v2 sqlite3_api->prepare_v2 +#define sqlite3_prepare16_v2 sqlite3_api->prepare16_v2 +#define sqlite3_profile sqlite3_api->profile +#define sqlite3_progress_handler sqlite3_api->progress_handler +#define sqlite3_realloc sqlite3_api->realloc +#define sqlite3_reset sqlite3_api->reset +#define sqlite3_result_blob sqlite3_api->result_blob +#define sqlite3_result_double sqlite3_api->result_double +#define sqlite3_result_error sqlite3_api->result_error +#define sqlite3_result_error16 sqlite3_api->result_error16 +#define sqlite3_result_int sqlite3_api->result_int +#define sqlite3_result_int64 sqlite3_api->result_int64 +#define sqlite3_result_null sqlite3_api->result_null +#define sqlite3_result_text sqlite3_api->result_text +#define sqlite3_result_text16 sqlite3_api->result_text16 +#define sqlite3_result_text16be sqlite3_api->result_text16be +#define sqlite3_result_text16le sqlite3_api->result_text16le +#define sqlite3_result_value sqlite3_api->result_value +#define sqlite3_rollback_hook sqlite3_api->rollback_hook +#define sqlite3_set_authorizer sqlite3_api->set_authorizer +#define sqlite3_set_auxdata sqlite3_api->set_auxdata +#define sqlite3_snprintf sqlite3_api->xsnprintf +#define sqlite3_step sqlite3_api->step +#define sqlite3_table_column_metadata sqlite3_api->table_column_metadata +#define sqlite3_thread_cleanup sqlite3_api->thread_cleanup +#define sqlite3_total_changes sqlite3_api->total_changes +#define sqlite3_trace sqlite3_api->trace +#ifndef SQLITE_OMIT_DEPRECATED +#define sqlite3_transfer_bindings sqlite3_api->transfer_bindings +#endif +#define sqlite3_update_hook sqlite3_api->update_hook +#define sqlite3_user_data sqlite3_api->user_data +#define sqlite3_value_blob sqlite3_api->value_blob +#define sqlite3_value_bytes sqlite3_api->value_bytes +#define sqlite3_value_bytes16 sqlite3_api->value_bytes16 +#define sqlite3_value_double sqlite3_api->value_double +#define sqlite3_value_int sqlite3_api->value_int +#define sqlite3_value_int64 sqlite3_api->value_int64 +#define sqlite3_value_numeric_type sqlite3_api->value_numeric_type +#define sqlite3_value_text sqlite3_api->value_text +#define sqlite3_value_text16 sqlite3_api->value_text16 +#define sqlite3_value_text16be sqlite3_api->value_text16be +#define sqlite3_value_text16le sqlite3_api->value_text16le +#define sqlite3_value_type sqlite3_api->value_type +#define sqlite3_vmprintf sqlite3_api->vmprintf +#define sqlite3_vsnprintf sqlite3_api->xvsnprintf +#define sqlite3_overload_function sqlite3_api->overload_function +#define sqlite3_prepare_v2 sqlite3_api->prepare_v2 +#define sqlite3_prepare16_v2 sqlite3_api->prepare16_v2 +#define sqlite3_clear_bindings sqlite3_api->clear_bindings +#define sqlite3_bind_zeroblob sqlite3_api->bind_zeroblob +#define sqlite3_blob_bytes sqlite3_api->blob_bytes +#define sqlite3_blob_close sqlite3_api->blob_close +#define sqlite3_blob_open sqlite3_api->blob_open +#define sqlite3_blob_read sqlite3_api->blob_read +#define sqlite3_blob_write sqlite3_api->blob_write +#define sqlite3_create_collation_v2 sqlite3_api->create_collation_v2 +#define sqlite3_file_control sqlite3_api->file_control +#define sqlite3_memory_highwater sqlite3_api->memory_highwater +#define sqlite3_memory_used sqlite3_api->memory_used +#define sqlite3_mutex_alloc sqlite3_api->mutex_alloc +#define sqlite3_mutex_enter sqlite3_api->mutex_enter +#define sqlite3_mutex_free sqlite3_api->mutex_free +#define sqlite3_mutex_leave sqlite3_api->mutex_leave +#define sqlite3_mutex_try sqlite3_api->mutex_try +#define sqlite3_open_v2 sqlite3_api->open_v2 +#define sqlite3_release_memory sqlite3_api->release_memory +#define sqlite3_result_error_nomem sqlite3_api->result_error_nomem +#define sqlite3_result_error_toobig sqlite3_api->result_error_toobig +#define sqlite3_sleep sqlite3_api->sleep +#define sqlite3_soft_heap_limit sqlite3_api->soft_heap_limit +#define sqlite3_vfs_find sqlite3_api->vfs_find +#define sqlite3_vfs_register sqlite3_api->vfs_register +#define sqlite3_vfs_unregister sqlite3_api->vfs_unregister +#define sqlite3_threadsafe sqlite3_api->xthreadsafe +#define sqlite3_result_zeroblob sqlite3_api->result_zeroblob +#define sqlite3_result_error_code sqlite3_api->result_error_code +#define sqlite3_test_control sqlite3_api->test_control +#define sqlite3_randomness sqlite3_api->randomness +#define sqlite3_context_db_handle sqlite3_api->context_db_handle +#define sqlite3_extended_result_codes sqlite3_api->extended_result_codes +#define sqlite3_limit sqlite3_api->limit +#define sqlite3_next_stmt sqlite3_api->next_stmt +#define sqlite3_sql sqlite3_api->sql +#define sqlite3_status sqlite3_api->status +#define sqlite3_backup_finish sqlite3_api->backup_finish +#define sqlite3_backup_init sqlite3_api->backup_init +#define sqlite3_backup_pagecount sqlite3_api->backup_pagecount +#define sqlite3_backup_remaining sqlite3_api->backup_remaining +#define sqlite3_backup_step sqlite3_api->backup_step +#define sqlite3_compileoption_get sqlite3_api->compileoption_get +#define sqlite3_compileoption_used sqlite3_api->compileoption_used +#define sqlite3_create_function_v2 sqlite3_api->create_function_v2 +#define sqlite3_db_config sqlite3_api->db_config +#define sqlite3_db_mutex sqlite3_api->db_mutex +#define sqlite3_db_status sqlite3_api->db_status +#define sqlite3_extended_errcode sqlite3_api->extended_errcode +#define sqlite3_log sqlite3_api->log +#define sqlite3_soft_heap_limit64 sqlite3_api->soft_heap_limit64 +#define sqlite3_sourceid sqlite3_api->sourceid +#define sqlite3_stmt_status sqlite3_api->stmt_status +#define sqlite3_strnicmp sqlite3_api->strnicmp +#define sqlite3_unlock_notify sqlite3_api->unlock_notify +#define sqlite3_wal_autocheckpoint sqlite3_api->wal_autocheckpoint +#define sqlite3_wal_checkpoint sqlite3_api->wal_checkpoint +#define sqlite3_wal_hook sqlite3_api->wal_hook +#define sqlite3_blob_reopen sqlite3_api->blob_reopen +#define sqlite3_vtab_config sqlite3_api->vtab_config +#define sqlite3_vtab_on_conflict sqlite3_api->vtab_on_conflict +/* Version 3.7.16 and later */ +#define sqlite3_close_v2 sqlite3_api->close_v2 +#define sqlite3_db_filename sqlite3_api->db_filename +#define sqlite3_db_readonly sqlite3_api->db_readonly +#define sqlite3_db_release_memory sqlite3_api->db_release_memory +#define sqlite3_errstr sqlite3_api->errstr +#define sqlite3_stmt_busy sqlite3_api->stmt_busy +#define sqlite3_stmt_readonly sqlite3_api->stmt_readonly +#define sqlite3_stricmp sqlite3_api->stricmp +#define sqlite3_uri_boolean sqlite3_api->uri_boolean +#define sqlite3_uri_int64 sqlite3_api->uri_int64 +#define sqlite3_uri_parameter sqlite3_api->uri_parameter +#define sqlite3_uri_vsnprintf sqlite3_api->xvsnprintf +#define sqlite3_wal_checkpoint_v2 sqlite3_api->wal_checkpoint_v2 +/* Version 3.8.7 and later */ +#define sqlite3_auto_extension sqlite3_api->auto_extension +#define sqlite3_bind_blob64 sqlite3_api->bind_blob64 +#define sqlite3_bind_text64 sqlite3_api->bind_text64 +#define sqlite3_cancel_auto_extension sqlite3_api->cancel_auto_extension +#define sqlite3_load_extension sqlite3_api->load_extension +#define sqlite3_malloc64 sqlite3_api->malloc64 +#define sqlite3_msize sqlite3_api->msize +#define sqlite3_realloc64 sqlite3_api->realloc64 +#define sqlite3_reset_auto_extension sqlite3_api->reset_auto_extension +#define sqlite3_result_blob64 sqlite3_api->result_blob64 +#define sqlite3_result_text64 sqlite3_api->result_text64 +#define sqlite3_strglob sqlite3_api->strglob +/* Version 3.8.11 and later */ +#define sqlite3_value_dup sqlite3_api->value_dup +#define sqlite3_value_free sqlite3_api->value_free +#define sqlite3_result_zeroblob64 sqlite3_api->result_zeroblob64 +#define sqlite3_bind_zeroblob64 sqlite3_api->bind_zeroblob64 +/* Version 3.9.0 and later */ +#define sqlite3_value_subtype sqlite3_api->value_subtype +#define sqlite3_result_subtype sqlite3_api->result_subtype +/* Version 3.10.0 and later */ +#define sqlite3_status64 sqlite3_api->status64 +#define sqlite3_strlike sqlite3_api->strlike +#define sqlite3_db_cacheflush sqlite3_api->db_cacheflush +/* Version 3.12.0 and later */ +#define sqlite3_system_errno sqlite3_api->system_errno +/* Version 3.14.0 and later */ +#define sqlite3_trace_v2 sqlite3_api->trace_v2 +#define sqlite3_expanded_sql sqlite3_api->expanded_sql +/* Version 3.18.0 and later */ +#define sqlite3_set_last_insert_rowid sqlite3_api->set_last_insert_rowid +/* Version 3.20.0 and later */ +#define sqlite3_prepare_v3 sqlite3_api->prepare_v3 +#define sqlite3_prepare16_v3 sqlite3_api->prepare16_v3 +#define sqlite3_bind_pointer sqlite3_api->bind_pointer +#define sqlite3_result_pointer sqlite3_api->result_pointer +#define sqlite3_value_pointer sqlite3_api->value_pointer +/* Version 3.22.0 and later */ +#define sqlite3_vtab_nochange sqlite3_api->vtab_nochange +#define sqlite3_value_nochange sqlite3_api->value_nochange +#define sqlite3_vtab_collation sqlite3_api->vtab_collation +/* Version 3.24.0 and later */ +#define sqlite3_keyword_count sqlite3_api->keyword_count +#define sqlite3_keyword_name sqlite3_api->keyword_name +#define sqlite3_keyword_check sqlite3_api->keyword_check +#define sqlite3_str_new sqlite3_api->str_new +#define sqlite3_str_finish sqlite3_api->str_finish +#define sqlite3_str_appendf sqlite3_api->str_appendf +#define sqlite3_str_vappendf sqlite3_api->str_vappendf +#define sqlite3_str_append sqlite3_api->str_append +#define sqlite3_str_appendall sqlite3_api->str_appendall +#define sqlite3_str_appendchar sqlite3_api->str_appendchar +#define sqlite3_str_reset sqlite3_api->str_reset +#define sqlite3_str_errcode sqlite3_api->str_errcode +#define sqlite3_str_length sqlite3_api->str_length +#define sqlite3_str_value sqlite3_api->str_value +/* Version 3.25.0 and later */ +#define sqlite3_create_window_function sqlite3_api->create_window_function +/* Version 3.26.0 and later */ +#define sqlite3_normalized_sql sqlite3_api->normalized_sql +/* Version 3.28.0 and later */ +#define sqlite3_stmt_isexplain sqlite3_api->stmt_isexplain +#define sqlite3_value_frombind sqlite3_api->value_frombind +/* Version 3.30.0 and later */ +#define sqlite3_drop_modules sqlite3_api->drop_modules +/* Version 3.31.0 and later */ +#define sqlite3_hard_heap_limit64 sqlite3_api->hard_heap_limit64 +#define sqlite3_uri_key sqlite3_api->uri_key +#define sqlite3_filename_database sqlite3_api->filename_database +#define sqlite3_filename_journal sqlite3_api->filename_journal +#define sqlite3_filename_wal sqlite3_api->filename_wal +/* Version 3.32.0 and later */ +#define sqlite3_create_filename sqlite3_api->create_filename +#define sqlite3_free_filename sqlite3_api->free_filename +#define sqlite3_database_file_object sqlite3_api->database_file_object +/* Version 3.34.0 and later */ +#define sqlite3_txn_state sqlite3_api->txn_state +/* Version 3.36.1 and later */ +#define sqlite3_changes64 sqlite3_api->changes64 +#define sqlite3_total_changes64 sqlite3_api->total_changes64 +/* Version 3.37.0 and later */ +#define sqlite3_autovacuum_pages sqlite3_api->autovacuum_pages +/* Version 3.38.0 and later */ +#define sqlite3_error_offset sqlite3_api->error_offset +#define sqlite3_vtab_rhs_value sqlite3_api->vtab_rhs_value +#define sqlite3_vtab_distinct sqlite3_api->vtab_distinct +#define sqlite3_vtab_in sqlite3_api->vtab_in +#define sqlite3_vtab_in_first sqlite3_api->vtab_in_first +#define sqlite3_vtab_in_next sqlite3_api->vtab_in_next +/* Version 3.39.0 and later */ +#ifndef SQLITE_OMIT_DESERIALIZE +#define sqlite3_deserialize sqlite3_api->deserialize +#define sqlite3_serialize sqlite3_api->serialize +#endif +#define sqlite3_db_name sqlite3_api->db_name +/* Version 3.40.0 and later */ +#define sqlite3_value_encoding sqlite3_api->value_encoding +/* Version 3.41.0 and later */ +#define sqlite3_is_interrupted sqlite3_api->is_interrupted +/* Version 3.43.0 and later */ +#define sqlite3_stmt_explain sqlite3_api->stmt_explain +/* Version 3.44.0 and later */ +#define sqlite3_get_clientdata sqlite3_api->get_clientdata +#define sqlite3_set_clientdata sqlite3_api->set_clientdata +/* Version 3.50.0 and later */ +#define sqlite3_setlk_timeout sqlite3_api->setlk_timeout +/* Version 3.51.0 and later */ +#define sqlite3_set_errmsg sqlite3_api->set_errmsg +#define sqlite3_db_status64 sqlite3_api->db_status64 +#endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */ + +#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) + /* This case when the file really is being compiled as a loadable + ** extension */ +# define SQLITE_EXTENSION_INIT1 const sqlite3_api_routines *sqlite3_api=0; +# define SQLITE_EXTENSION_INIT2(v) sqlite3_api=v; +# define SQLITE_EXTENSION_INIT3 \ + extern const sqlite3_api_routines *sqlite3_api; +#else + /* This case when the file is being statically linked into the + ** application */ +# define SQLITE_EXTENSION_INIT1 /*no-op*/ +# define SQLITE_EXTENSION_INIT2(v) (void)v; /* unused parameter */ +# define SQLITE_EXTENSION_INIT3 /*no-op*/ +#endif + +#endif /* SQLITE3EXT_H */ + +/************** End of sqlite3ext.h ******************************************/ +/************** Continuing where we left off in loadext.c ********************/ +/* #include "sqliteInt.h" */ + +#ifndef SQLITE_OMIT_LOAD_EXTENSION +/* +** Some API routines are omitted when various features are +** excluded from a build of SQLite. Substitute a NULL pointer +** for any missing APIs. +*/ +#ifndef SQLITE_ENABLE_COLUMN_METADATA +# define sqlite3_column_database_name 0 +# define sqlite3_column_database_name16 0 +# define sqlite3_column_table_name 0 +# define sqlite3_column_table_name16 0 +# define sqlite3_column_origin_name 0 +# define sqlite3_column_origin_name16 0 +#endif + +#ifdef SQLITE_OMIT_AUTHORIZATION +# define sqlite3_set_authorizer 0 +#endif + +#ifdef SQLITE_OMIT_UTF16 +# define sqlite3_bind_text16 0 +# define sqlite3_collation_needed16 0 +# define sqlite3_column_decltype16 0 +# define sqlite3_column_name16 0 +# define sqlite3_column_text16 0 +# define sqlite3_complete16 0 +# define sqlite3_create_collation16 0 +# define sqlite3_create_function16 0 +# define sqlite3_errmsg16 0 +# define sqlite3_open16 0 +# define sqlite3_prepare16 0 +# define sqlite3_prepare16_v2 0 +# define sqlite3_prepare16_v3 0 +# define sqlite3_result_error16 0 +# define sqlite3_result_text16 0 +# define sqlite3_result_text16be 0 +# define sqlite3_result_text16le 0 +# define sqlite3_value_text16 0 +# define sqlite3_value_text16be 0 +# define sqlite3_value_text16le 0 +# define sqlite3_column_database_name16 0 +# define sqlite3_column_table_name16 0 +# define sqlite3_column_origin_name16 0 +#endif + +#ifdef SQLITE_OMIT_COMPLETE +# define sqlite3_complete 0 +# define sqlite3_complete16 0 +#endif + +#ifdef SQLITE_OMIT_DECLTYPE +# define sqlite3_column_decltype16 0 +# define sqlite3_column_decltype 0 +#endif + +#ifdef SQLITE_OMIT_PROGRESS_CALLBACK +# define sqlite3_progress_handler 0 +#endif + +#ifdef SQLITE_OMIT_VIRTUALTABLE +# define sqlite3_create_module 0 +# define sqlite3_create_module_v2 0 +# define sqlite3_declare_vtab 0 +# define sqlite3_vtab_config 0 +# define sqlite3_vtab_on_conflict 0 +# define sqlite3_vtab_collation 0 +#endif + +#ifdef SQLITE_OMIT_SHARED_CACHE +# define sqlite3_enable_shared_cache 0 +#endif + +#if defined(SQLITE_OMIT_TRACE) || defined(SQLITE_OMIT_DEPRECATED) +# define sqlite3_profile 0 +# define sqlite3_trace 0 +#endif + +#ifdef SQLITE_OMIT_GET_TABLE +# define sqlite3_free_table 0 +# define sqlite3_get_table 0 +#endif + +#ifdef SQLITE_OMIT_INCRBLOB +#define sqlite3_bind_zeroblob 0 +#define sqlite3_blob_bytes 0 +#define sqlite3_blob_close 0 +#define sqlite3_blob_open 0 +#define sqlite3_blob_read 0 +#define sqlite3_blob_write 0 +#define sqlite3_blob_reopen 0 +#endif + +#if defined(SQLITE_OMIT_TRACE) +# define sqlite3_trace_v2 0 +#endif + +/* +** The following structure contains pointers to all SQLite API routines. +** A pointer to this structure is passed into extensions when they are +** loaded so that the extension can make calls back into the SQLite +** library. +** +** When adding new APIs, add them to the bottom of this structure +** in order to preserve backwards compatibility. +** +** Extensions that use newer APIs should first call the +** sqlite3_libversion_number() to make sure that the API they +** intend to use is supported by the library. Extensions should +** also check to make sure that the pointer to the function is +** not NULL before calling it. +*/ +static const sqlite3_api_routines sqlite3Apis = { + sqlite3_aggregate_context, +#ifndef SQLITE_OMIT_DEPRECATED + sqlite3_aggregate_count, +#else + 0, +#endif + sqlite3_bind_blob, + sqlite3_bind_double, + sqlite3_bind_int, + sqlite3_bind_int64, + sqlite3_bind_null, + sqlite3_bind_parameter_count, + sqlite3_bind_parameter_index, + sqlite3_bind_parameter_name, + sqlite3_bind_text, + sqlite3_bind_text16, + sqlite3_bind_value, + sqlite3_busy_handler, + sqlite3_busy_timeout, + sqlite3_changes, + sqlite3_close, + sqlite3_collation_needed, + sqlite3_collation_needed16, + sqlite3_column_blob, + sqlite3_column_bytes, + sqlite3_column_bytes16, + sqlite3_column_count, + sqlite3_column_database_name, + sqlite3_column_database_name16, + sqlite3_column_decltype, + sqlite3_column_decltype16, + sqlite3_column_double, + sqlite3_column_int, + sqlite3_column_int64, + sqlite3_column_name, + sqlite3_column_name16, + sqlite3_column_origin_name, + sqlite3_column_origin_name16, + sqlite3_column_table_name, + sqlite3_column_table_name16, + sqlite3_column_text, + sqlite3_column_text16, + sqlite3_column_type, + sqlite3_column_value, + sqlite3_commit_hook, + sqlite3_complete, + sqlite3_complete16, + sqlite3_create_collation, + sqlite3_create_collation16, + sqlite3_create_function, + sqlite3_create_function16, + sqlite3_create_module, + sqlite3_data_count, + sqlite3_db_handle, + sqlite3_declare_vtab, + sqlite3_enable_shared_cache, + sqlite3_errcode, + sqlite3_errmsg, + sqlite3_errmsg16, + sqlite3_exec, +#ifndef SQLITE_OMIT_DEPRECATED + sqlite3_expired, +#else + 0, +#endif + sqlite3_finalize, + sqlite3_free, + sqlite3_free_table, + sqlite3_get_autocommit, + sqlite3_get_auxdata, + sqlite3_get_table, + 0, /* Was sqlite3_global_recover(), but that function is deprecated */ + sqlite3_interrupt, + sqlite3_last_insert_rowid, + sqlite3_libversion, + sqlite3_libversion_number, + sqlite3_malloc, + sqlite3_mprintf, + sqlite3_open, + sqlite3_open16, + sqlite3_prepare, + sqlite3_prepare16, + sqlite3_profile, + sqlite3_progress_handler, + sqlite3_realloc, + sqlite3_reset, + sqlite3_result_blob, + sqlite3_result_double, + sqlite3_result_error, + sqlite3_result_error16, + sqlite3_result_int, + sqlite3_result_int64, + sqlite3_result_null, + sqlite3_result_text, + sqlite3_result_text16, + sqlite3_result_text16be, + sqlite3_result_text16le, + sqlite3_result_value, + sqlite3_rollback_hook, + sqlite3_set_authorizer, + sqlite3_set_auxdata, + sqlite3_snprintf, + sqlite3_step, + sqlite3_table_column_metadata, +#ifndef SQLITE_OMIT_DEPRECATED + sqlite3_thread_cleanup, +#else + 0, +#endif + sqlite3_total_changes, + sqlite3_trace, +#ifndef SQLITE_OMIT_DEPRECATED + sqlite3_transfer_bindings, +#else + 0, +#endif + sqlite3_update_hook, + sqlite3_user_data, + sqlite3_value_blob, + sqlite3_value_bytes, + sqlite3_value_bytes16, + sqlite3_value_double, + sqlite3_value_int, + sqlite3_value_int64, + sqlite3_value_numeric_type, + sqlite3_value_text, + sqlite3_value_text16, + sqlite3_value_text16be, + sqlite3_value_text16le, + sqlite3_value_type, + sqlite3_vmprintf, + /* + ** The original API set ends here. All extensions can call any + ** of the APIs above provided that the pointer is not NULL. But + ** before calling APIs that follow, extension should check the + ** sqlite3_libversion_number() to make sure they are dealing with + ** a library that is new enough to support that API. + ************************************************************************* + */ + sqlite3_overload_function, + + /* + ** Added after 3.3.13 + */ + sqlite3_prepare_v2, + sqlite3_prepare16_v2, + sqlite3_clear_bindings, + + /* + ** Added for 3.4.1 + */ + sqlite3_create_module_v2, + + /* + ** Added for 3.5.0 + */ + sqlite3_bind_zeroblob, + sqlite3_blob_bytes, + sqlite3_blob_close, + sqlite3_blob_open, + sqlite3_blob_read, + sqlite3_blob_write, + sqlite3_create_collation_v2, + sqlite3_file_control, + sqlite3_memory_highwater, + sqlite3_memory_used, +#ifdef SQLITE_MUTEX_OMIT + 0, + 0, + 0, + 0, + 0, +#else + sqlite3_mutex_alloc, + sqlite3_mutex_enter, + sqlite3_mutex_free, + sqlite3_mutex_leave, + sqlite3_mutex_try, +#endif + sqlite3_open_v2, + sqlite3_release_memory, + sqlite3_result_error_nomem, + sqlite3_result_error_toobig, + sqlite3_sleep, + sqlite3_soft_heap_limit, + sqlite3_vfs_find, + sqlite3_vfs_register, + sqlite3_vfs_unregister, + + /* + ** Added for 3.5.8 + */ + sqlite3_threadsafe, + sqlite3_result_zeroblob, + sqlite3_result_error_code, + sqlite3_test_control, + sqlite3_randomness, + sqlite3_context_db_handle, + + /* + ** Added for 3.6.0 + */ + sqlite3_extended_result_codes, + sqlite3_limit, + sqlite3_next_stmt, + sqlite3_sql, + sqlite3_status, + + /* + ** Added for 3.7.4 + */ + sqlite3_backup_finish, + sqlite3_backup_init, + sqlite3_backup_pagecount, + sqlite3_backup_remaining, + sqlite3_backup_step, +#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS + sqlite3_compileoption_get, + sqlite3_compileoption_used, +#else + 0, + 0, +#endif + sqlite3_create_function_v2, + sqlite3_db_config, + sqlite3_db_mutex, + sqlite3_db_status, + sqlite3_extended_errcode, + sqlite3_log, + sqlite3_soft_heap_limit64, + sqlite3_sourceid, + sqlite3_stmt_status, + sqlite3_strnicmp, +#ifdef SQLITE_ENABLE_UNLOCK_NOTIFY + sqlite3_unlock_notify, +#else + 0, +#endif +#ifndef SQLITE_OMIT_WAL + sqlite3_wal_autocheckpoint, + sqlite3_wal_checkpoint, + sqlite3_wal_hook, +#else + 0, + 0, + 0, +#endif + sqlite3_blob_reopen, + sqlite3_vtab_config, + sqlite3_vtab_on_conflict, + sqlite3_close_v2, + sqlite3_db_filename, + sqlite3_db_readonly, + sqlite3_db_release_memory, + sqlite3_errstr, + sqlite3_stmt_busy, + sqlite3_stmt_readonly, + sqlite3_stricmp, + sqlite3_uri_boolean, + sqlite3_uri_int64, + sqlite3_uri_parameter, + sqlite3_vsnprintf, + sqlite3_wal_checkpoint_v2, + /* Version 3.8.7 and later */ + sqlite3_auto_extension, + sqlite3_bind_blob64, + sqlite3_bind_text64, + sqlite3_cancel_auto_extension, + sqlite3_load_extension, + sqlite3_malloc64, + sqlite3_msize, + sqlite3_realloc64, + sqlite3_reset_auto_extension, + sqlite3_result_blob64, + sqlite3_result_text64, + sqlite3_strglob, + /* Version 3.8.11 and later */ + (sqlite3_value*(*)(const sqlite3_value*))sqlite3_value_dup, + sqlite3_value_free, + sqlite3_result_zeroblob64, + sqlite3_bind_zeroblob64, + /* Version 3.9.0 and later */ + sqlite3_value_subtype, + sqlite3_result_subtype, + /* Version 3.10.0 and later */ + sqlite3_status64, + sqlite3_strlike, + sqlite3_db_cacheflush, + /* Version 3.12.0 and later */ + sqlite3_system_errno, + /* Version 3.14.0 and later */ + sqlite3_trace_v2, + sqlite3_expanded_sql, + /* Version 3.18.0 and later */ + sqlite3_set_last_insert_rowid, + /* Version 3.20.0 and later */ + sqlite3_prepare_v3, + sqlite3_prepare16_v3, + sqlite3_bind_pointer, + sqlite3_result_pointer, + sqlite3_value_pointer, + /* Version 3.22.0 and later */ + sqlite3_vtab_nochange, + sqlite3_value_nochange, + sqlite3_vtab_collation, + /* Version 3.24.0 and later */ + sqlite3_keyword_count, + sqlite3_keyword_name, + sqlite3_keyword_check, + sqlite3_str_new, + sqlite3_str_finish, + sqlite3_str_appendf, + sqlite3_str_vappendf, + sqlite3_str_append, + sqlite3_str_appendall, + sqlite3_str_appendchar, + sqlite3_str_reset, + sqlite3_str_errcode, + sqlite3_str_length, + sqlite3_str_value, + /* Version 3.25.0 and later */ + sqlite3_create_window_function, + /* Version 3.26.0 and later */ +#ifdef SQLITE_ENABLE_NORMALIZE + sqlite3_normalized_sql, +#else + 0, +#endif + /* Version 3.28.0 and later */ + sqlite3_stmt_isexplain, + sqlite3_value_frombind, + /* Version 3.30.0 and later */ +#ifndef SQLITE_OMIT_VIRTUALTABLE + sqlite3_drop_modules, +#else + 0, +#endif + /* Version 3.31.0 and later */ + sqlite3_hard_heap_limit64, + sqlite3_uri_key, + sqlite3_filename_database, + sqlite3_filename_journal, + sqlite3_filename_wal, + /* Version 3.32.0 and later */ + sqlite3_create_filename, + sqlite3_free_filename, + sqlite3_database_file_object, + /* Version 3.34.0 and later */ + sqlite3_txn_state, + /* Version 3.36.1 and later */ + sqlite3_changes64, + sqlite3_total_changes64, + /* Version 3.37.0 and later */ + sqlite3_autovacuum_pages, + /* Version 3.38.0 and later */ + sqlite3_error_offset, +#ifndef SQLITE_OMIT_VIRTUALTABLE + sqlite3_vtab_rhs_value, + sqlite3_vtab_distinct, + sqlite3_vtab_in, + sqlite3_vtab_in_first, + sqlite3_vtab_in_next, +#else + 0, + 0, + 0, + 0, + 0, +#endif + /* Version 3.39.0 and later */ +#ifndef SQLITE_OMIT_DESERIALIZE + sqlite3_deserialize, + sqlite3_serialize, +#else + 0, + 0, +#endif + sqlite3_db_name, + /* Version 3.40.0 and later */ + sqlite3_value_encoding, + /* Version 3.41.0 and later */ + sqlite3_is_interrupted, + /* Version 3.43.0 and later */ + sqlite3_stmt_explain, + /* Version 3.44.0 and later */ + sqlite3_get_clientdata, + sqlite3_set_clientdata, + /* Version 3.50.0 and later */ + sqlite3_setlk_timeout, + /* Version 3.51.0 and later */ + sqlite3_set_errmsg, + sqlite3_db_status64 +}; + +/* True if x is the directory separator character +*/ +#if SQLITE_OS_WIN +# define DirSep(X) ((X)=='/'||(X)=='\\') +#else +# define DirSep(X) ((X)=='/') +#endif + +/* +** Attempt to load an SQLite extension library contained in the file +** zFile. The entry point is zProc. zProc may be 0 in which case a +** default entry point name (sqlite3_extension_init) is used. Use +** of the default name is recommended. +** +** Return SQLITE_OK on success and SQLITE_ERROR if something goes wrong. +** +** If an error occurs and pzErrMsg is not 0, then fill *pzErrMsg with +** error message text. The calling function should free this memory +** by calling sqlite3DbFree(db, ). +*/ +static int sqlite3LoadExtension( + sqlite3 *db, /* Load the extension into this database connection */ + const char *zFile, /* Name of the shared library containing extension */ + const char *zProc, /* Entry point. Use "sqlite3_extension_init" if 0 */ + char **pzErrMsg /* Put error message here if not 0 */ +){ + sqlite3_vfs *pVfs = db->pVfs; + void *handle; + sqlite3_loadext_entry xInit; + char *zErrmsg = 0; + const char *zEntry; + char *zAltEntry = 0; + void **aHandle; + u64 nMsg = strlen(zFile); + int ii; + int rc; + + /* Shared library endings to try if zFile cannot be loaded as written */ + static const char *azEndings[] = { +#if SQLITE_OS_WIN + "dll" +#elif defined(__APPLE__) + "dylib" +#else + "so" +#endif + }; + + + if( pzErrMsg ) *pzErrMsg = 0; + + /* Ticket #1863. To avoid a creating security problems for older + ** applications that relink against newer versions of SQLite, the + ** ability to run load_extension is turned off by default. One + ** must call either sqlite3_enable_load_extension(db) or + ** sqlite3_db_config(db, SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION, 1, 0) + ** to turn on extension loading. + */ + if( (db->flags & SQLITE_LoadExtension)==0 ){ + if( pzErrMsg ){ + *pzErrMsg = sqlite3_mprintf("not authorized"); + } + return SQLITE_ERROR; + } + + zEntry = zProc ? zProc : "sqlite3_extension_init"; + + /* tag-20210611-1. Some dlopen() implementations will segfault if given + ** an oversize filename. Most filesystems have a pathname limit of 4K, + ** so limit the extension filename length to about twice that. + ** https://sqlite.org/forum/forumpost/08a0d6d9bf + ** + ** Later (2023-03-25): Save an extra 6 bytes for the filename suffix. + ** See https://sqlite.org/forum/forumpost/24083b579d. + */ + if( nMsg>SQLITE_MAX_PATHLEN ) goto extension_not_found; + + /* Do not allow sqlite3_load_extension() to link to a copy of the + ** running application, by passing in an empty filename. */ + if( nMsg==0 ) goto extension_not_found; + + handle = sqlite3OsDlOpen(pVfs, zFile); +#if SQLITE_OS_UNIX || SQLITE_OS_WIN + for(ii=0; ii sqlite3_example_init + ** C:/lib/mathfuncs.dll ==> sqlite3_mathfuncs_init + */ + if( xInit==0 && zProc==0 ){ + int iFile, iEntry, c; + int ncFile = sqlite3Strlen30(zFile); + zAltEntry = sqlite3_malloc64(ncFile+30); + if( zAltEntry==0 ){ + sqlite3OsDlClose(pVfs, handle); + return SQLITE_NOMEM_BKPT; + } + memcpy(zAltEntry, "sqlite3_", 8); + for(iFile=ncFile-1; iFile>=0 && !DirSep(zFile[iFile]); iFile--){} + iFile++; + if( sqlite3_strnicmp(zFile+iFile, "lib", 3)==0 ) iFile += 3; + for(iEntry=8; (c = zFile[iFile])!=0 && c!='.'; iFile++){ + if( sqlite3Isalpha(c) ){ + zAltEntry[iEntry++] = (char)sqlite3UpperToLower[(unsigned)c]; + } + } + memcpy(zAltEntry+iEntry, "_init", 6); + zEntry = zAltEntry; + xInit = (sqlite3_loadext_entry)sqlite3OsDlSym(pVfs, handle, zEntry); + } + if( xInit==0 ){ + if( pzErrMsg ){ + nMsg += strlen(zEntry) + 300; + *pzErrMsg = zErrmsg = sqlite3_malloc64(nMsg); + if( zErrmsg ){ + assert( nMsg<0x7fffffff ); /* zErrmsg would be NULL if not so */ + sqlite3_snprintf((int)nMsg, zErrmsg, + "no entry point [%s] in shared library [%s]", zEntry, zFile); + sqlite3OsDlError(pVfs, nMsg-1, zErrmsg); + } + } + sqlite3OsDlClose(pVfs, handle); + sqlite3_free(zAltEntry); + return SQLITE_ERROR; + } + sqlite3_free(zAltEntry); + rc = xInit(db, &zErrmsg, &sqlite3Apis); + if( rc ){ + if( rc==SQLITE_OK_LOAD_PERMANENTLY ) return SQLITE_OK; + if( pzErrMsg ){ + *pzErrMsg = sqlite3_mprintf("error during initialization: %s", zErrmsg); + } + sqlite3_free(zErrmsg); + sqlite3OsDlClose(pVfs, handle); + return SQLITE_ERROR; + } + + /* Append the new shared library handle to the db->aExtension array. */ + aHandle = sqlite3DbMallocZero(db, sizeof(handle)*(db->nExtension+1)); + if( aHandle==0 ){ + return SQLITE_NOMEM_BKPT; + } + if( db->nExtension>0 ){ + memcpy(aHandle, db->aExtension, sizeof(handle)*db->nExtension); + } + sqlite3DbFree(db, db->aExtension); + db->aExtension = aHandle; + + db->aExtension[db->nExtension++] = handle; + return SQLITE_OK; + +extension_not_found: + if( pzErrMsg ){ + nMsg += 300; + *pzErrMsg = zErrmsg = sqlite3_malloc64(nMsg); + if( zErrmsg ){ + assert( nMsg<0x7fffffff ); /* zErrmsg would be NULL if not so */ + sqlite3_snprintf((int)nMsg, zErrmsg, + "unable to open shared library [%.*s]", SQLITE_MAX_PATHLEN, zFile); + sqlite3OsDlError(pVfs, nMsg-1, zErrmsg); + } + } + return SQLITE_ERROR; +} +SQLITE_API int sqlite3_load_extension( + sqlite3 *db, /* Load the extension into this database connection */ + const char *zFile, /* Name of the shared library containing extension */ + const char *zProc, /* Entry point. Use "sqlite3_extension_init" if 0 */ + char **pzErrMsg /* Put error message here if not 0 */ +){ + int rc; + sqlite3_mutex_enter(db->mutex); + rc = sqlite3LoadExtension(db, zFile, zProc, pzErrMsg); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/* +** Call this routine when the database connection is closing in order +** to clean up loaded extensions +*/ +SQLITE_PRIVATE void sqlite3CloseExtensions(sqlite3 *db){ + int i; + assert( sqlite3_mutex_held(db->mutex) ); + for(i=0; inExtension; i++){ + sqlite3OsDlClose(db->pVfs, db->aExtension[i]); + } + sqlite3DbFree(db, db->aExtension); +} + +/* +** Enable or disable extension loading. Extension loading is disabled by +** default so as not to open security holes in older applications. +*/ +SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(db->mutex); + if( onoff ){ + db->flags |= SQLITE_LoadExtension|SQLITE_LoadExtFunc; + }else{ + db->flags &= ~(u64)(SQLITE_LoadExtension|SQLITE_LoadExtFunc); + } + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; +} + +#endif /* !defined(SQLITE_OMIT_LOAD_EXTENSION) */ + +/* +** The following object holds the list of automatically loaded +** extensions. +** +** This list is shared across threads. The SQLITE_MUTEX_STATIC_MAIN +** mutex must be held while accessing this list. +*/ +typedef struct sqlite3AutoExtList sqlite3AutoExtList; +static SQLITE_WSD struct sqlite3AutoExtList { + u32 nExt; /* Number of entries in aExt[] */ + void (**aExt)(void); /* Pointers to the extension init functions */ +} sqlite3Autoext = { 0, 0 }; + +/* The "wsdAutoext" macro will resolve to the autoextension +** state vector. If writable static data is unsupported on the target, +** we have to locate the state vector at run-time. In the more common +** case where writable static data is supported, wsdStat can refer directly +** to the "sqlite3Autoext" state vector declared above. +*/ +#ifdef SQLITE_OMIT_WSD +# define wsdAutoextInit \ + sqlite3AutoExtList *x = &GLOBAL(sqlite3AutoExtList,sqlite3Autoext) +# define wsdAutoext x[0] +#else +# define wsdAutoextInit +# define wsdAutoext sqlite3Autoext +#endif + + +/* +** Register a statically linked extension that is automatically +** loaded by every new database connection. +*/ +SQLITE_API int sqlite3_auto_extension( + void (*xInit)(void) +){ + int rc = SQLITE_OK; +#ifdef SQLITE_ENABLE_API_ARMOR + if( xInit==0 ) return SQLITE_MISUSE_BKPT; +#endif +#ifndef SQLITE_OMIT_AUTOINIT + rc = sqlite3_initialize(); + if( rc ){ + return rc; + }else +#endif + { + u32 i; +#if SQLITE_THREADSAFE + sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MAIN); +#endif + wsdAutoextInit; + sqlite3_mutex_enter(mutex); + for(i=0; i=0; i--){ + if( wsdAutoext.aExt[i]==xInit ){ + wsdAutoext.nExt--; + wsdAutoext.aExt[i] = wsdAutoext.aExt[wsdAutoext.nExt]; + n++; + break; + } + } + sqlite3_mutex_leave(mutex); + return n; +} + +/* +** Reset the automatic extension loading mechanism. +*/ +SQLITE_API void sqlite3_reset_auto_extension(void){ +#ifndef SQLITE_OMIT_AUTOINIT + if( sqlite3_initialize()==SQLITE_OK ) +#endif + { +#if SQLITE_THREADSAFE + sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MAIN); +#endif + wsdAutoextInit; + sqlite3_mutex_enter(mutex); + sqlite3_free(wsdAutoext.aExt); + wsdAutoext.aExt = 0; + wsdAutoext.nExt = 0; + sqlite3_mutex_leave(mutex); + } +} + +/* +** Load all automatic extensions. +** +** If anything goes wrong, set an error in the database connection. +*/ +SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3 *db){ + u32 i; + int go = 1; + int rc; + sqlite3_loadext_entry xInit; + + wsdAutoextInit; + if( wsdAutoext.nExt==0 ){ + /* Common case: early out without every having to acquire a mutex */ + return; + } + for(i=0; go; i++){ + char *zErrmsg; +#if SQLITE_THREADSAFE + sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MAIN); +#endif +#ifdef SQLITE_OMIT_LOAD_EXTENSION + const sqlite3_api_routines *pThunk = 0; +#else + const sqlite3_api_routines *pThunk = &sqlite3Apis; +#endif + sqlite3_mutex_enter(mutex); + if( i>=wsdAutoext.nExt ){ + xInit = 0; + go = 0; + }else{ + xInit = (sqlite3_loadext_entry)wsdAutoext.aExt[i]; + } + sqlite3_mutex_leave(mutex); + zErrmsg = 0; + if( xInit && (rc = xInit(db, &zErrmsg, pThunk))!=0 ){ + sqlite3ErrorWithMsg(db, rc, + "automatic extension loading failed: %s", zErrmsg); + go = 0; + } + sqlite3_free(zErrmsg); + } +} + +/************** End of loadext.c *********************************************/ +/************** Begin file pragma.c ******************************************/ +/* +** 2003 April 6 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code used to implement the PRAGMA command. +*/ +/* #include "sqliteInt.h" */ + +#if !defined(SQLITE_ENABLE_LOCKING_STYLE) +# if defined(__APPLE__) +# define SQLITE_ENABLE_LOCKING_STYLE 1 +# else +# define SQLITE_ENABLE_LOCKING_STYLE 0 +# endif +#endif + +/*************************************************************************** +** The "pragma.h" include file is an automatically generated file that +** that includes the PragType_XXXX macro definitions and the aPragmaName[] +** object. This ensures that the aPragmaName[] table is arranged in +** lexicographical order to facility a binary search of the pragma name. +** Do not edit pragma.h directly. Edit and rerun the script in at +** ../tool/mkpragmatab.tcl. */ +/************** Include pragma.h in the middle of pragma.c *******************/ +/************** Begin file pragma.h ******************************************/ +/* DO NOT EDIT! +** This file is automatically generated by the script at +** ../tool/mkpragmatab.tcl. To update the set of pragmas, edit +** that script and rerun it. +*/ + +/* The various pragma types */ +#define PragTyp_ACTIVATE_EXTENSIONS 0 +#define PragTyp_ANALYSIS_LIMIT 1 +#define PragTyp_HEADER_VALUE 2 +#define PragTyp_AUTO_VACUUM 3 +#define PragTyp_FLAG 4 +#define PragTyp_BUSY_TIMEOUT 5 +#define PragTyp_CACHE_SIZE 6 +#define PragTyp_CACHE_SPILL 7 +#define PragTyp_CASE_SENSITIVE_LIKE 8 +#define PragTyp_COLLATION_LIST 9 +#define PragTyp_COMPILE_OPTIONS 10 +#define PragTyp_DATA_STORE_DIRECTORY 11 +#define PragTyp_DATABASE_LIST 12 +#define PragTyp_DEFAULT_CACHE_SIZE 13 +#define PragTyp_ENCODING 14 +#define PragTyp_FOREIGN_KEY_CHECK 15 +#define PragTyp_FOREIGN_KEY_LIST 16 +#define PragTyp_FUNCTION_LIST 17 +#define PragTyp_HARD_HEAP_LIMIT 18 +#define PragTyp_INCREMENTAL_VACUUM 19 +#define PragTyp_INDEX_INFO 20 +#define PragTyp_INDEX_LIST 21 +#define PragTyp_INTEGRITY_CHECK 22 +#define PragTyp_JOURNAL_MODE 23 +#define PragTyp_JOURNAL_SIZE_LIMIT 24 +#define PragTyp_LOCK_PROXY_FILE 25 +#define PragTyp_LOCKING_MODE 26 +#define PragTyp_PAGE_COUNT 27 +#define PragTyp_MMAP_SIZE 28 +#define PragTyp_MODULE_LIST 29 +#define PragTyp_OPTIMIZE 30 +#define PragTyp_PAGE_SIZE 31 +#define PragTyp_PRAGMA_LIST 32 +#define PragTyp_SECURE_DELETE 33 +#define PragTyp_SHRINK_MEMORY 34 +#define PragTyp_SOFT_HEAP_LIMIT 35 +#define PragTyp_SYNCHRONOUS 36 +#define PragTyp_TABLE_INFO 37 +#define PragTyp_TABLE_LIST 38 +#define PragTyp_TEMP_STORE 39 +#define PragTyp_TEMP_STORE_DIRECTORY 40 +#define PragTyp_THREADS 41 +#define PragTyp_WAL_AUTOCHECKPOINT 42 +#define PragTyp_WAL_CHECKPOINT 43 +#define PragTyp_LOCK_STATUS 44 +#define PragTyp_STATS 45 + +/* Property flags associated with various pragma. */ +#define PragFlg_NeedSchema 0x01 /* Force schema load before running */ +#define PragFlg_NoColumns 0x02 /* OP_ResultRow called with zero columns */ +#define PragFlg_NoColumns1 0x04 /* zero columns if RHS argument is present */ +#define PragFlg_ReadOnly 0x08 /* Read-only HEADER_VALUE */ +#define PragFlg_Result0 0x10 /* Acts as query when no argument */ +#define PragFlg_Result1 0x20 /* Acts as query when has one argument */ +#define PragFlg_SchemaOpt 0x40 /* Schema restricts name search if present */ +#define PragFlg_SchemaReq 0x80 /* Schema required - "main" is default */ + +/* Names of columns for pragmas that return multi-column result +** or that return single-column results where the name of the +** result column is different from the name of the pragma +*/ +static const char *const pragCName[] = { + /* 0 */ "id", /* Used by: foreign_key_list */ + /* 1 */ "seq", + /* 2 */ "table", + /* 3 */ "from", + /* 4 */ "to", + /* 5 */ "on_update", + /* 6 */ "on_delete", + /* 7 */ "match", + /* 8 */ "cid", /* Used by: table_xinfo */ + /* 9 */ "name", + /* 10 */ "type", + /* 11 */ "notnull", + /* 12 */ "dflt_value", + /* 13 */ "pk", + /* 14 */ "hidden", + /* table_info reuses 8 */ + /* 15 */ "name", /* Used by: function_list */ + /* 16 */ "builtin", + /* 17 */ "type", + /* 18 */ "enc", + /* 19 */ "narg", + /* 20 */ "flags", + /* 21 */ "schema", /* Used by: table_list */ + /* 22 */ "name", + /* 23 */ "type", + /* 24 */ "ncol", + /* 25 */ "wr", + /* 26 */ "strict", + /* 27 */ "seqno", /* Used by: index_xinfo */ + /* 28 */ "cid", + /* 29 */ "name", + /* 30 */ "desc", + /* 31 */ "coll", + /* 32 */ "key", + /* 33 */ "seq", /* Used by: index_list */ + /* 34 */ "name", + /* 35 */ "unique", + /* 36 */ "origin", + /* 37 */ "partial", + /* 38 */ "tbl", /* Used by: stats */ + /* 39 */ "idx", + /* 40 */ "wdth", + /* 41 */ "hght", + /* 42 */ "flgs", + /* 43 */ "table", /* Used by: foreign_key_check */ + /* 44 */ "rowid", + /* 45 */ "parent", + /* 46 */ "fkid", + /* 47 */ "busy", /* Used by: wal_checkpoint */ + /* 48 */ "log", + /* 49 */ "checkpointed", + /* 50 */ "seq", /* Used by: database_list */ + /* 51 */ "name", + /* 52 */ "file", + /* index_info reuses 27 */ + /* 53 */ "database", /* Used by: lock_status */ + /* 54 */ "status", + /* collation_list reuses 33 */ + /* 55 */ "cache_size", /* Used by: default_cache_size */ + /* module_list pragma_list reuses 9 */ + /* 56 */ "timeout", /* Used by: busy_timeout */ +}; + +/* Definitions of all built-in pragmas */ +typedef struct PragmaName { + const char *const zName; /* Name of pragma */ + u8 ePragTyp; /* PragTyp_XXX value */ + u8 mPragFlg; /* Zero or more PragFlg_XXX values */ + u8 iPragCName; /* Start of column names in pragCName[] */ + u8 nPragCName; /* Num of col names. 0 means use pragma name */ + u64 iArg; /* Extra argument */ +} PragmaName; +static const PragmaName aPragmaName[] = { +#if defined(SQLITE_ENABLE_CEROD) + {/* zName: */ "activate_extensions", + /* ePragTyp: */ PragTyp_ACTIVATE_EXTENSIONS, + /* ePragFlg: */ 0, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif + {/* zName: */ "analysis_limit", + /* ePragTyp: */ PragTyp_ANALYSIS_LIMIT, + /* ePragFlg: */ PragFlg_Result0, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS) + {/* zName: */ "application_id", + /* ePragTyp: */ PragTyp_HEADER_VALUE, + /* ePragFlg: */ PragFlg_NoColumns1|PragFlg_Result0, + /* ColNames: */ 0, 0, + /* iArg: */ BTREE_APPLICATION_ID }, +#endif +#if !defined(SQLITE_OMIT_AUTOVACUUM) + {/* zName: */ "auto_vacuum", + /* ePragTyp: */ PragTyp_AUTO_VACUUM, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) +#if !defined(SQLITE_OMIT_AUTOMATIC_INDEX) + {/* zName: */ "automatic_index", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_AutoIndex }, +#endif +#endif + {/* zName: */ "busy_timeout", + /* ePragTyp: */ PragTyp_BUSY_TIMEOUT, + /* ePragFlg: */ PragFlg_Result0, + /* ColNames: */ 56, 1, + /* iArg: */ 0 }, +#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) + {/* zName: */ "cache_size", + /* ePragTyp: */ PragTyp_CACHE_SIZE, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) + {/* zName: */ "cache_spill", + /* ePragTyp: */ PragTyp_CACHE_SPILL, + /* ePragFlg: */ PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA) + {/* zName: */ "case_sensitive_like", + /* ePragTyp: */ PragTyp_CASE_SENSITIVE_LIKE, + /* ePragFlg: */ PragFlg_NoColumns, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif + {/* zName: */ "cell_size_check", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_CellSizeCk }, +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) + {/* zName: */ "checkpoint_fullfsync", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_CkptFullFSync }, +#endif +#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) + {/* zName: */ "collation_list", + /* ePragTyp: */ PragTyp_COLLATION_LIST, + /* ePragFlg: */ PragFlg_Result0, + /* ColNames: */ 33, 2, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_COMPILEOPTION_DIAGS) + {/* zName: */ "compile_options", + /* ePragTyp: */ PragTyp_COMPILE_OPTIONS, + /* ePragFlg: */ PragFlg_Result0, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) + {/* zName: */ "count_changes", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_CountRows }, +#endif +#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_OS_WIN + {/* zName: */ "data_store_directory", + /* ePragTyp: */ PragTyp_DATA_STORE_DIRECTORY, + /* ePragFlg: */ PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS) + {/* zName: */ "data_version", + /* ePragTyp: */ PragTyp_HEADER_VALUE, + /* ePragFlg: */ PragFlg_ReadOnly|PragFlg_Result0, + /* ColNames: */ 0, 0, + /* iArg: */ BTREE_DATA_VERSION }, +#endif +#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) + {/* zName: */ "database_list", + /* ePragTyp: */ PragTyp_DATABASE_LIST, + /* ePragFlg: */ PragFlg_Result0, + /* ColNames: */ 50, 3, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && !defined(SQLITE_OMIT_DEPRECATED) + {/* zName: */ "default_cache_size", + /* ePragTyp: */ PragTyp_DEFAULT_CACHE_SIZE, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1, + /* ColNames: */ 55, 1, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) +#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) + {/* zName: */ "defer_foreign_keys", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_DeferFKs }, +#endif +#endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) + {/* zName: */ "empty_result_callbacks", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_NullCallback }, +#endif +#if !defined(SQLITE_OMIT_UTF16) + {/* zName: */ "encoding", + /* ePragTyp: */ PragTyp_ENCODING, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) + {/* zName: */ "foreign_key_check", + /* ePragTyp: */ PragTyp_FOREIGN_KEY_CHECK, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_Result1|PragFlg_SchemaOpt, + /* ColNames: */ 43, 4, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_FOREIGN_KEY) + {/* zName: */ "foreign_key_list", + /* ePragTyp: */ PragTyp_FOREIGN_KEY_LIST, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result1|PragFlg_SchemaOpt, + /* ColNames: */ 0, 8, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) +#if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) + {/* zName: */ "foreign_keys", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_ForeignKeys }, +#endif +#endif +#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS) + {/* zName: */ "freelist_count", + /* ePragTyp: */ PragTyp_HEADER_VALUE, + /* ePragFlg: */ PragFlg_ReadOnly|PragFlg_Result0, + /* ColNames: */ 0, 0, + /* iArg: */ BTREE_FREE_PAGE_COUNT }, +#endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) + {/* zName: */ "full_column_names", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_FullColNames }, + {/* zName: */ "fullfsync", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_FullFSync }, +#endif +#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) +#if !defined(SQLITE_OMIT_INTROSPECTION_PRAGMAS) + {/* zName: */ "function_list", + /* ePragTyp: */ PragTyp_FUNCTION_LIST, + /* ePragFlg: */ PragFlg_Result0, + /* ColNames: */ 15, 6, + /* iArg: */ 0 }, +#endif +#endif + {/* zName: */ "hard_heap_limit", + /* ePragTyp: */ PragTyp_HARD_HEAP_LIMIT, + /* ePragFlg: */ PragFlg_Result0, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) +#if !defined(SQLITE_OMIT_CHECK) + {/* zName: */ "ignore_check_constraints", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_IgnoreChecks }, +#endif +#endif +#if !defined(SQLITE_OMIT_AUTOVACUUM) + {/* zName: */ "incremental_vacuum", + /* ePragTyp: */ PragTyp_INCREMENTAL_VACUUM, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_NoColumns, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) + {/* zName: */ "index_info", + /* ePragTyp: */ PragTyp_INDEX_INFO, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result1|PragFlg_SchemaOpt, + /* ColNames: */ 27, 3, + /* iArg: */ 0 }, + {/* zName: */ "index_list", + /* ePragTyp: */ PragTyp_INDEX_LIST, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result1|PragFlg_SchemaOpt, + /* ColNames: */ 33, 5, + /* iArg: */ 0 }, + {/* zName: */ "index_xinfo", + /* ePragTyp: */ PragTyp_INDEX_INFO, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result1|PragFlg_SchemaOpt, + /* ColNames: */ 27, 6, + /* iArg: */ 1 }, +#endif +#if !defined(SQLITE_OMIT_INTEGRITY_CHECK) + {/* zName: */ "integrity_check", + /* ePragTyp: */ PragTyp_INTEGRITY_CHECK, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_Result1|PragFlg_SchemaOpt, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) + {/* zName: */ "journal_mode", + /* ePragTyp: */ PragTyp_JOURNAL_MODE, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, + {/* zName: */ "journal_size_limit", + /* ePragTyp: */ PragTyp_JOURNAL_SIZE_LIMIT, + /* ePragFlg: */ PragFlg_Result0|PragFlg_SchemaReq, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) + {/* zName: */ "legacy_alter_table", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_LegacyAlter }, +#endif +#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_ENABLE_LOCKING_STYLE + {/* zName: */ "lock_proxy_file", + /* ePragTyp: */ PragTyp_LOCK_PROXY_FILE, + /* ePragFlg: */ PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif +#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) + {/* zName: */ "lock_status", + /* ePragTyp: */ PragTyp_LOCK_STATUS, + /* ePragFlg: */ PragFlg_Result0, + /* ColNames: */ 53, 2, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) + {/* zName: */ "locking_mode", + /* ePragTyp: */ PragTyp_LOCKING_MODE, + /* ePragFlg: */ PragFlg_Result0|PragFlg_SchemaReq, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, + {/* zName: */ "max_page_count", + /* ePragTyp: */ PragTyp_PAGE_COUNT, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, + {/* zName: */ "mmap_size", + /* ePragTyp: */ PragTyp_MMAP_SIZE, + /* ePragFlg: */ 0, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) +#if !defined(SQLITE_OMIT_VIRTUALTABLE) +#if !defined(SQLITE_OMIT_INTROSPECTION_PRAGMAS) + {/* zName: */ "module_list", + /* ePragTyp: */ PragTyp_MODULE_LIST, + /* ePragFlg: */ PragFlg_Result0, + /* ColNames: */ 9, 1, + /* iArg: */ 0 }, +#endif +#endif +#endif + {/* zName: */ "optimize", + /* ePragTyp: */ PragTyp_OPTIMIZE, + /* ePragFlg: */ PragFlg_Result1|PragFlg_NeedSchema, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) + {/* zName: */ "page_count", + /* ePragTyp: */ PragTyp_PAGE_COUNT, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, + {/* zName: */ "page_size", + /* ePragTyp: */ PragTyp_PAGE_SIZE, + /* ePragFlg: */ PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) +#if defined(SQLITE_DEBUG) + {/* zName: */ "parser_trace", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_ParserTrace }, +#endif +#endif +#if !defined(SQLITE_OMIT_INTROSPECTION_PRAGMAS) + {/* zName: */ "pragma_list", + /* ePragTyp: */ PragTyp_PRAGMA_LIST, + /* ePragFlg: */ PragFlg_Result0, + /* ColNames: */ 9, 1, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) + {/* zName: */ "query_only", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_QueryOnly }, +#endif +#if !defined(SQLITE_OMIT_INTEGRITY_CHECK) + {/* zName: */ "quick_check", + /* ePragTyp: */ PragTyp_INTEGRITY_CHECK, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_Result1|PragFlg_SchemaOpt, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) + {/* zName: */ "read_uncommitted", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_ReadUncommit }, + {/* zName: */ "recursive_triggers", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_RecTriggers }, + {/* zName: */ "reverse_unordered_selects", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_ReverseOrder }, +#endif +#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS) + {/* zName: */ "schema_version", + /* ePragTyp: */ PragTyp_HEADER_VALUE, + /* ePragFlg: */ PragFlg_NoColumns1|PragFlg_Result0, + /* ColNames: */ 0, 0, + /* iArg: */ BTREE_SCHEMA_VERSION }, +#endif +#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) + {/* zName: */ "secure_delete", + /* ePragTyp: */ PragTyp_SECURE_DELETE, + /* ePragFlg: */ PragFlg_Result0, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) + {/* zName: */ "short_column_names", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_ShortColNames }, +#endif + {/* zName: */ "shrink_memory", + /* ePragTyp: */ PragTyp_SHRINK_MEMORY, + /* ePragFlg: */ PragFlg_NoColumns, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, + {/* zName: */ "soft_heap_limit", + /* ePragTyp: */ PragTyp_SOFT_HEAP_LIMIT, + /* ePragFlg: */ PragFlg_Result0, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) +#if defined(SQLITE_DEBUG) + {/* zName: */ "sql_trace", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_SqlTrace }, +#endif +#endif +#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) && defined(SQLITE_DEBUG) + {/* zName: */ "stats", + /* ePragTyp: */ PragTyp_STATS, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq, + /* ColNames: */ 38, 5, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) + {/* zName: */ "synchronous", + /* ePragTyp: */ PragTyp_SYNCHRONOUS, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) + {/* zName: */ "table_info", + /* ePragTyp: */ PragTyp_TABLE_INFO, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result1|PragFlg_SchemaOpt, + /* ColNames: */ 8, 6, + /* iArg: */ 0 }, + {/* zName: */ "table_list", + /* ePragTyp: */ PragTyp_TABLE_LIST, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result1, + /* ColNames: */ 21, 6, + /* iArg: */ 0 }, + {/* zName: */ "table_xinfo", + /* ePragTyp: */ PragTyp_TABLE_INFO, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result1|PragFlg_SchemaOpt, + /* ColNames: */ 8, 7, + /* iArg: */ 1 }, +#endif +#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) + {/* zName: */ "temp_store", + /* ePragTyp: */ PragTyp_TEMP_STORE, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, + {/* zName: */ "temp_store_directory", + /* ePragTyp: */ PragTyp_TEMP_STORE_DIRECTORY, + /* ePragFlg: */ PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#endif + {/* zName: */ "threads", + /* ePragTyp: */ PragTyp_THREADS, + /* ePragFlg: */ PragFlg_Result0, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) + {/* zName: */ "trusted_schema", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_TrustedSchema }, +#endif +#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS) + {/* zName: */ "user_version", + /* ePragTyp: */ PragTyp_HEADER_VALUE, + /* ePragFlg: */ PragFlg_NoColumns1|PragFlg_Result0, + /* ColNames: */ 0, 0, + /* iArg: */ BTREE_USER_VERSION }, +#endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) +#if defined(SQLITE_DEBUG) + {/* zName: */ "vdbe_addoptrace", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_VdbeAddopTrace }, + {/* zName: */ "vdbe_debug", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_SqlTrace|SQLITE_VdbeListing|SQLITE_VdbeTrace }, + {/* zName: */ "vdbe_eqp", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_VdbeEQP }, + {/* zName: */ "vdbe_listing", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_VdbeListing }, + {/* zName: */ "vdbe_trace", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_VdbeTrace }, +#endif +#endif +#if !defined(SQLITE_OMIT_WAL) + {/* zName: */ "wal_autocheckpoint", + /* ePragTyp: */ PragTyp_WAL_AUTOCHECKPOINT, + /* ePragFlg: */ 0, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, + {/* zName: */ "wal_checkpoint", + /* ePragTyp: */ PragTyp_WAL_CHECKPOINT, + /* ePragFlg: */ PragFlg_NeedSchema, + /* ColNames: */ 47, 3, + /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_FLAG_PRAGMAS) + {/* zName: */ "writable_schema", + /* ePragTyp: */ PragTyp_FLAG, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, + /* ColNames: */ 0, 0, + /* iArg: */ SQLITE_WriteSchema|SQLITE_NoSchemaError }, +#endif +}; +/* Number of pragmas: 68 on by default, 78 total. */ + +/************** End of pragma.h **********************************************/ +/************** Continuing where we left off in pragma.c *********************/ + +/* +** When the 0x10 bit of PRAGMA optimize is set, any ANALYZE commands +** will be run with an analysis_limit set to the lessor of the value of +** the following macro or to the actual analysis_limit if it is non-zero, +** in order to prevent PRAGMA optimize from running for too long. +** +** The value of 2000 is chosen empirically so that the worst-case run-time +** for PRAGMA optimize does not exceed 100 milliseconds against a variety +** of test databases on a RaspberryPI-4 compiled using -Os and without +** -DSQLITE_DEBUG. Of course, your mileage may vary. For the purpose of +** this paragraph, "worst-case" means that ANALYZE ends up being +** run on every table in the database. The worst case typically only +** happens if PRAGMA optimize is run on a database file for which ANALYZE +** has not been previously run and the 0x10000 flag is included so that +** all tables are analyzed. The usual case for PRAGMA optimize is that +** no ANALYZE commands will be run at all, or if any ANALYZE happens it +** will be against a single table, so that expected timing for PRAGMA +** optimize on a PI-4 is more like 1 millisecond or less with the 0x10000 +** flag or less than 100 microseconds without the 0x10000 flag. +** +** An analysis limit of 2000 is almost always sufficient for the query +** planner to fully characterize an index. The additional accuracy from +** a larger analysis is not usually helpful. +*/ +#ifndef SQLITE_DEFAULT_OPTIMIZE_LIMIT +# define SQLITE_DEFAULT_OPTIMIZE_LIMIT 2000 +#endif + +/* +** Interpret the given string as a safety level. Return 0 for OFF, +** 1 for ON or NORMAL, 2 for FULL, and 3 for EXTRA. Return 1 for an empty or +** unrecognized string argument. The FULL and EXTRA option is disallowed +** if the omitFull parameter it 1. +** +** Note that the values returned are one less that the values that +** should be passed into sqlite3BtreeSetSafetyLevel(). The is done +** to support legacy SQL code. The safety level used to be boolean +** and older scripts may have used numbers 0 for OFF and 1 for ON. +*/ +static u8 getSafetyLevel(const char *z, int omitFull, u8 dflt){ + /* 123456789 123456789 123 */ + static const char zText[] = "onoffalseyestruextrafull"; + static const u8 iOffset[] = {0, 1, 2, 4, 9, 12, 15, 20}; + static const u8 iLength[] = {2, 2, 3, 5, 3, 4, 5, 4}; + static const u8 iValue[] = {1, 0, 0, 0, 1, 1, 3, 2}; + /* on no off false yes true extra full */ + int i, n; + if( sqlite3Isdigit(*z) ){ + return (u8)sqlite3Atoi(z); + } + n = sqlite3Strlen30(z); + for(i=0; i=0&&i<=2)?i:0); +} +#endif /* ifndef SQLITE_OMIT_AUTOVACUUM */ + +#ifndef SQLITE_OMIT_PAGER_PRAGMAS +/* +** Interpret the given string as a temp db location. Return 1 for file +** backed temporary databases, 2 for the Red-Black tree in memory database +** and 0 to use the compile-time default. +*/ +static int getTempStore(const char *z){ + if( z[0]>='0' && z[0]<='2' ){ + return z[0] - '0'; + }else if( sqlite3StrICmp(z, "file")==0 ){ + return 1; + }else if( sqlite3StrICmp(z, "memory")==0 ){ + return 2; + }else{ + return 0; + } +} +#endif /* SQLITE_PAGER_PRAGMAS */ + +#ifndef SQLITE_OMIT_PAGER_PRAGMAS +/* +** Invalidate temp storage, either when the temp storage is changed +** from default, or when 'file' and the temp_store_directory has changed +*/ +static int invalidateTempStorage(Parse *pParse){ + sqlite3 *db = pParse->db; + if( db->aDb[1].pBt!=0 ){ + if( !db->autoCommit + || sqlite3BtreeTxnState(db->aDb[1].pBt)!=SQLITE_TXN_NONE + ){ + sqlite3ErrorMsg(pParse, "temporary storage cannot be changed " + "from within a transaction"); + return SQLITE_ERROR; + } + sqlite3BtreeClose(db->aDb[1].pBt); + db->aDb[1].pBt = 0; + sqlite3ResetAllSchemasOfConnection(db); + } + return SQLITE_OK; +} +#endif /* SQLITE_PAGER_PRAGMAS */ + +#ifndef SQLITE_OMIT_PAGER_PRAGMAS +/* +** If the TEMP database is open, close it and mark the database schema +** as needing reloading. This must be done when using the SQLITE_TEMP_STORE +** or DEFAULT_TEMP_STORE pragmas. +*/ +static int changeTempStorage(Parse *pParse, const char *zStorageType){ + int ts = getTempStore(zStorageType); + sqlite3 *db = pParse->db; + if( db->temp_store==ts ) return SQLITE_OK; + if( invalidateTempStorage( pParse ) != SQLITE_OK ){ + return SQLITE_ERROR; + } + db->temp_store = (u8)ts; + return SQLITE_OK; +} +#endif /* SQLITE_PAGER_PRAGMAS */ + +/* +** Set result column names for a pragma. +*/ +static void setPragmaResultColumnNames( + Vdbe *v, /* The query under construction */ + const PragmaName *pPragma /* The pragma */ +){ + u8 n = pPragma->nPragCName; + sqlite3VdbeSetNumCols(v, n==0 ? 1 : n); + if( n==0 ){ + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, pPragma->zName, SQLITE_STATIC); + }else{ + int i, j; + for(i=0, j=pPragma->iPragCName; iautoCommit ){ + Db *pDb = db->aDb; + int n = db->nDb; + assert( SQLITE_FullFSync==PAGER_FULLFSYNC ); + assert( SQLITE_CkptFullFSync==PAGER_CKPT_FULLFSYNC ); + assert( SQLITE_CacheSpill==PAGER_CACHESPILL ); + assert( (PAGER_FULLFSYNC | PAGER_CKPT_FULLFSYNC | PAGER_CACHESPILL) + == PAGER_FLAGS_MASK ); + assert( (pDb->safety_level & PAGER_SYNCHRONOUS_MASK)==pDb->safety_level ); + while( (n--) > 0 ){ + if( pDb->pBt ){ + sqlite3BtreeSetPagerFlags(pDb->pBt, + pDb->safety_level | (db->flags & PAGER_FLAGS_MASK) ); + } + pDb++; + } + } +} +#else +# define setAllPagerFlags(X) /* no-op */ +#endif + + +/* +** Return a human-readable name for a constraint resolution action. +*/ +#ifndef SQLITE_OMIT_FOREIGN_KEY +static const char *actionName(u8 action){ + const char *zName; + switch( action ){ + case OE_SetNull: zName = "SET NULL"; break; + case OE_SetDflt: zName = "SET DEFAULT"; break; + case OE_Cascade: zName = "CASCADE"; break; + case OE_Restrict: zName = "RESTRICT"; break; + default: zName = "NO ACTION"; + assert( action==OE_None ); break; + } + return zName; +} +#endif + + +/* +** Parameter eMode must be one of the PAGER_JOURNALMODE_XXX constants +** defined in pager.h. This function returns the associated lowercase +** journal-mode name. +*/ +SQLITE_PRIVATE const char *sqlite3JournalModename(int eMode){ + static char * const azModeName[] = { + "delete", "persist", "off", "truncate", "memory" +#ifndef SQLITE_OMIT_WAL + , "wal" +#endif + }; + assert( PAGER_JOURNALMODE_DELETE==0 ); + assert( PAGER_JOURNALMODE_PERSIST==1 ); + assert( PAGER_JOURNALMODE_OFF==2 ); + assert( PAGER_JOURNALMODE_TRUNCATE==3 ); + assert( PAGER_JOURNALMODE_MEMORY==4 ); + assert( PAGER_JOURNALMODE_WAL==5 ); + assert( eMode>=0 && eMode<=ArraySize(azModeName) ); + + if( eMode==ArraySize(azModeName) ) return 0; + return azModeName[eMode]; +} + +/* +** Locate a pragma in the aPragmaName[] array. +*/ +static const PragmaName *pragmaLocate(const char *zName){ + int upr, lwr, mid = 0, rc; + lwr = 0; + upr = ArraySize(aPragmaName)-1; + while( lwr<=upr ){ + mid = (lwr+upr)/2; + rc = sqlite3_stricmp(zName, aPragmaName[mid].zName); + if( rc==0 ) break; + if( rc<0 ){ + upr = mid - 1; + }else{ + lwr = mid + 1; + } + } + return lwr>upr ? 0 : &aPragmaName[mid]; +} + +/* +** Create zero or more entries in the output for the SQL functions +** defined by FuncDef p. +*/ +static void pragmaFunclistLine( + Vdbe *v, /* The prepared statement being created */ + FuncDef *p, /* A particular function definition */ + int isBuiltin, /* True if this is a built-in function */ + int showInternFuncs /* True if showing internal functions */ +){ + u32 mask = + SQLITE_DETERMINISTIC | + SQLITE_DIRECTONLY | + SQLITE_SUBTYPE | + SQLITE_INNOCUOUS | + SQLITE_FUNC_INTERNAL + ; + if( showInternFuncs ) mask = 0xffffffff; + for(; p; p=p->pNext){ + const char *zType; + static const char *azEnc[] = { 0, "utf8", "utf16le", "utf16be" }; + + assert( SQLITE_FUNC_ENCMASK==0x3 ); + assert( strcmp(azEnc[SQLITE_UTF8],"utf8")==0 ); + assert( strcmp(azEnc[SQLITE_UTF16LE],"utf16le")==0 ); + assert( strcmp(azEnc[SQLITE_UTF16BE],"utf16be")==0 ); + + if( p->xSFunc==0 ) continue; + if( (p->funcFlags & SQLITE_FUNC_INTERNAL)!=0 + && showInternFuncs==0 + ){ + continue; + } + if( p->xValue!=0 ){ + zType = "w"; + }else if( p->xFinalize!=0 ){ + zType = "a"; + }else{ + zType = "s"; + } + sqlite3VdbeMultiLoad(v, 1, "sissii", + p->zName, isBuiltin, + zType, azEnc[p->funcFlags&SQLITE_FUNC_ENCMASK], + p->nArg, + (p->funcFlags & mask) ^ SQLITE_INNOCUOUS + ); + } +} + + +/* +** Helper subroutine for PRAGMA integrity_check: +** +** Generate code to output a single-column result row with a value of the +** string held in register 3. Decrement the result count in register 1 +** and halt if the maximum number of result rows have been issued. +*/ +static int integrityCheckResultRow(Vdbe *v){ + int addr; + sqlite3VdbeAddOp2(v, OP_ResultRow, 3, 1); + addr = sqlite3VdbeAddOp3(v, OP_IfPos, 1, sqlite3VdbeCurrentAddr(v)+2, 1); + VdbeCoverage(v); + sqlite3VdbeAddOp0(v, OP_Halt); + return addr; +} + +/* +** Should table pTab be skipped when doing an integrity_check? +** Return true or false. +** +** If pObjTab is not null, the return true if pTab matches pObjTab. +** +** If pObjTab is null, then return true only if pTab is an imposter table. +*/ +static int tableSkipIntegrityCheck(const Table *pTab, const Table *pObjTab){ + if( pObjTab ){ + return pTab!=pObjTab; + }else{ + return (pTab->tabFlags & TF_Imposter)!=0; + } +} + +/* +** Process a pragma statement. +** +** Pragmas are of this form: +** +** PRAGMA [schema.]id [= value] +** +** The identifier might also be a string. The value is a string, and +** identifier, or a number. If minusFlag is true, then the value is +** a number that was preceded by a minus sign. +** +** If the left side is "database.id" then pId1 is the database name +** and pId2 is the id. If the left side is just "id" then pId1 is the +** id and pId2 is any empty string. +*/ +SQLITE_PRIVATE void sqlite3Pragma( + Parse *pParse, + Token *pId1, /* First part of [schema.]id field */ + Token *pId2, /* Second part of [schema.]id field, or NULL */ + Token *pValue, /* Token for , or NULL */ + int minusFlag /* True if a '-' sign preceded */ +){ + char *zLeft = 0; /* Nul-terminated UTF-8 string */ + char *zRight = 0; /* Nul-terminated UTF-8 string , or NULL */ + const char *zDb = 0; /* The database name */ + Token *pId; /* Pointer to token */ + char *aFcntl[4]; /* Argument to SQLITE_FCNTL_PRAGMA */ + int iDb; /* Database index for */ + int rc; /* return value form SQLITE_FCNTL_PRAGMA */ + sqlite3 *db = pParse->db; /* The database connection */ + Db *pDb; /* The specific database being pragmaed */ + Vdbe *v = sqlite3GetVdbe(pParse); /* Prepared statement */ + const PragmaName *pPragma; /* The pragma */ + + if( v==0 ) return; + sqlite3VdbeRunOnlyOnce(v); + pParse->nMem = 2; + + /* Interpret the [schema.] part of the pragma statement. iDb is the + ** index of the database this pragma is being applied to in db.aDb[]. */ + iDb = sqlite3TwoPartName(pParse, pId1, pId2, &pId); + if( iDb<0 ) return; + pDb = &db->aDb[iDb]; + + /* If the temp database has been explicitly named as part of the + ** pragma, make sure it is open. + */ + if( iDb==1 && sqlite3OpenTempDatabase(pParse) ){ + return; + } + + zLeft = sqlite3NameFromToken(db, pId); + if( !zLeft ) return; + if( minusFlag ){ + zRight = sqlite3MPrintf(db, "-%T", pValue); + }else{ + zRight = sqlite3NameFromToken(db, pValue); + } + + assert( pId2 ); + zDb = pId2->n>0 ? pDb->zDbSName : 0; + if( sqlite3AuthCheck(pParse, SQLITE_PRAGMA, zLeft, zRight, zDb) ){ + goto pragma_out; + } + + /* Send an SQLITE_FCNTL_PRAGMA file-control to the underlying VFS + ** connection. If it returns SQLITE_OK, then assume that the VFS + ** handled the pragma and generate a no-op prepared statement. + ** + ** IMPLEMENTATION-OF: R-12238-55120 Whenever a PRAGMA statement is parsed, + ** an SQLITE_FCNTL_PRAGMA file control is sent to the open sqlite3_file + ** object corresponding to the database file to which the pragma + ** statement refers. + ** + ** IMPLEMENTATION-OF: R-29875-31678 The argument to the SQLITE_FCNTL_PRAGMA + ** file control is an array of pointers to strings (char**) in which the + ** second element of the array is the name of the pragma and the third + ** element is the argument to the pragma or NULL if the pragma has no + ** argument. + */ + aFcntl[0] = 0; + aFcntl[1] = zLeft; + aFcntl[2] = zRight; + aFcntl[3] = 0; + db->busyHandler.nBusy = 0; + rc = sqlite3_file_control(db, zDb, SQLITE_FCNTL_PRAGMA, (void*)aFcntl); + if( rc==SQLITE_OK ){ + sqlite3VdbeSetNumCols(v, 1); + sqlite3VdbeSetColName(v, 0, COLNAME_NAME, aFcntl[0], SQLITE_TRANSIENT); + returnSingleText(v, aFcntl[0]); + sqlite3_free(aFcntl[0]); + goto pragma_out; + } + if( rc!=SQLITE_NOTFOUND ){ + if( aFcntl[0] ){ + sqlite3ErrorMsg(pParse, "%s", aFcntl[0]); + sqlite3_free(aFcntl[0]); + } + pParse->nErr++; + pParse->rc = rc; + goto pragma_out; + } + + /* Locate the pragma in the lookup table */ + pPragma = pragmaLocate(zLeft); + if( pPragma==0 ){ + /* IMP: R-43042-22504 No error messages are generated if an + ** unknown pragma is issued. */ + goto pragma_out; + } + + /* Make sure the database schema is loaded if the pragma requires that */ + if( (pPragma->mPragFlg & PragFlg_NeedSchema)!=0 ){ + if( sqlite3ReadSchema(pParse) ) goto pragma_out; + } + + /* Register the result column names for pragmas that return results */ + if( (pPragma->mPragFlg & PragFlg_NoColumns)==0 + && ((pPragma->mPragFlg & PragFlg_NoColumns1)==0 || zRight==0) + ){ + setPragmaResultColumnNames(v, pPragma); + } + + /* Jump to the appropriate pragma handler */ + switch( pPragma->ePragTyp ){ + +#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && !defined(SQLITE_OMIT_DEPRECATED) + /* + ** PRAGMA [schema.]default_cache_size + ** PRAGMA [schema.]default_cache_size=N + ** + ** The first form reports the current persistent setting for the + ** page cache size. The value returned is the maximum number of + ** pages in the page cache. The second form sets both the current + ** page cache size value and the persistent page cache size value + ** stored in the database file. + ** + ** Older versions of SQLite would set the default cache size to a + ** negative number to indicate synchronous=OFF. These days, synchronous + ** is always on by default regardless of the sign of the default cache + ** size. But continue to take the absolute value of the default cache + ** size of historical compatibility. + */ + case PragTyp_DEFAULT_CACHE_SIZE: { + static const int iLn = VDBE_OFFSET_LINENO(2); + static const VdbeOpList getCacheSize[] = { + { OP_Transaction, 0, 0, 0}, /* 0 */ + { OP_ReadCookie, 0, 1, BTREE_DEFAULT_CACHE_SIZE}, /* 1 */ + { OP_IfPos, 1, 8, 0}, + { OP_Integer, 0, 2, 0}, + { OP_Subtract, 1, 2, 1}, + { OP_IfPos, 1, 8, 0}, + { OP_Integer, 0, 1, 0}, /* 6 */ + { OP_Noop, 0, 0, 0}, + { OP_ResultRow, 1, 1, 0}, + }; + VdbeOp *aOp; + sqlite3VdbeUsesBtree(v, iDb); + if( !zRight ){ + pParse->nMem += 2; + sqlite3VdbeVerifyNoMallocRequired(v, ArraySize(getCacheSize)); + aOp = sqlite3VdbeAddOpList(v, ArraySize(getCacheSize), getCacheSize, iLn); + if( ONLY_IF_REALLOC_STRESS(aOp==0) ) break; + aOp[0].p1 = iDb; + aOp[1].p1 = iDb; + aOp[6].p1 = SQLITE_DEFAULT_CACHE_SIZE; + }else{ + int size = sqlite3AbsInt32(sqlite3Atoi(zRight)); + sqlite3BeginWriteOperation(pParse, 0, iDb); + sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_DEFAULT_CACHE_SIZE, size); + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + pDb->pSchema->cache_size = size; + sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size); + } + break; + } +#endif /* !SQLITE_OMIT_PAGER_PRAGMAS && !SQLITE_OMIT_DEPRECATED */ + +#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) + /* + ** PRAGMA [schema.]page_size + ** PRAGMA [schema.]page_size=N + ** + ** The first form reports the current setting for the + ** database page size in bytes. The second form sets the + ** database page size value. The value can only be set if + ** the database has not yet been created. + */ + case PragTyp_PAGE_SIZE: { + Btree *pBt = pDb->pBt; + assert( pBt!=0 ); + if( !zRight ){ + int size = ALWAYS(pBt) ? sqlite3BtreeGetPageSize(pBt) : 0; + returnSingleInt(v, size); + }else{ + /* Malloc may fail when setting the page-size, as there is an internal + ** buffer that the pager module resizes using sqlite3_realloc(). + */ + db->nextPagesize = sqlite3Atoi(zRight); + if( SQLITE_NOMEM==sqlite3BtreeSetPageSize(pBt, db->nextPagesize,0,0) ){ + sqlite3OomFault(db); + } + } + break; + } + + /* + ** PRAGMA [schema.]secure_delete + ** PRAGMA [schema.]secure_delete=ON/OFF/FAST + ** + ** The first form reports the current setting for the + ** secure_delete flag. The second form changes the secure_delete + ** flag setting and reports the new value. + */ + case PragTyp_SECURE_DELETE: { + Btree *pBt = pDb->pBt; + int b = -1; + assert( pBt!=0 ); + if( zRight ){ + if( sqlite3_stricmp(zRight, "fast")==0 ){ + b = 2; + }else{ + b = sqlite3GetBoolean(zRight, 0); + } + } + if( pId2->n==0 && b>=0 ){ + int ii; + for(ii=0; iinDb; ii++){ + sqlite3BtreeSecureDelete(db->aDb[ii].pBt, b); + } + } + b = sqlite3BtreeSecureDelete(pBt, b); + returnSingleInt(v, b); + break; + } + + /* + ** PRAGMA [schema.]max_page_count + ** PRAGMA [schema.]max_page_count=N + ** + ** The first form reports the current setting for the + ** maximum number of pages in the database file. The + ** second form attempts to change this setting. Both + ** forms return the current setting. + ** + ** The absolute value of N is used. This is undocumented and might + ** change. The only purpose is to provide an easy way to test + ** the sqlite3AbsInt32() function. + ** + ** PRAGMA [schema.]page_count + ** + ** Return the number of pages in the specified database. + */ + case PragTyp_PAGE_COUNT: { + int iReg; + i64 x = 0; + sqlite3CodeVerifySchema(pParse, iDb); + iReg = ++pParse->nMem; + if( sqlite3Tolower(zLeft[0])=='p' ){ + sqlite3VdbeAddOp2(v, OP_Pagecount, iDb, iReg); + }else{ + if( zRight && sqlite3DecOrHexToI64(zRight,&x)==0 ){ + if( x<0 ) x = 0; + else if( x>0xfffffffe ) x = 0xfffffffe; + }else{ + x = 0; + } + sqlite3VdbeAddOp3(v, OP_MaxPgcnt, iDb, iReg, (int)x); + } + sqlite3VdbeAddOp2(v, OP_ResultRow, iReg, 1); + break; + } + + /* + ** PRAGMA [schema.]locking_mode + ** PRAGMA [schema.]locking_mode = (normal|exclusive) + */ + case PragTyp_LOCKING_MODE: { + const char *zRet = "normal"; + int eMode = getLockingMode(zRight); + + if( pId2->n==0 && eMode==PAGER_LOCKINGMODE_QUERY ){ + /* Simple "PRAGMA locking_mode;" statement. This is a query for + ** the current default locking mode (which may be different to + ** the locking-mode of the main database). + */ + eMode = db->dfltLockMode; + }else{ + Pager *pPager; + if( pId2->n==0 ){ + /* This indicates that no database name was specified as part + ** of the PRAGMA command. In this case the locking-mode must be + ** set on all attached databases, as well as the main db file. + ** + ** Also, the sqlite3.dfltLockMode variable is set so that + ** any subsequently attached databases also use the specified + ** locking mode. + */ + int ii; + assert(pDb==&db->aDb[0]); + for(ii=2; iinDb; ii++){ + pPager = sqlite3BtreePager(db->aDb[ii].pBt); + sqlite3PagerLockingMode(pPager, eMode); + } + db->dfltLockMode = (u8)eMode; + } + pPager = sqlite3BtreePager(pDb->pBt); + eMode = sqlite3PagerLockingMode(pPager, eMode); + } + + assert( eMode==PAGER_LOCKINGMODE_NORMAL + || eMode==PAGER_LOCKINGMODE_EXCLUSIVE ); + if( eMode==PAGER_LOCKINGMODE_EXCLUSIVE ){ + zRet = "exclusive"; + } + returnSingleText(v, zRet); + break; + } + + /* + ** PRAGMA [schema.]journal_mode + ** PRAGMA [schema.]journal_mode = + ** (delete|persist|off|truncate|memory|wal|off) + */ + case PragTyp_JOURNAL_MODE: { + int eMode; /* One of the PAGER_JOURNALMODE_XXX symbols */ + int ii; /* Loop counter */ + + if( zRight==0 ){ + /* If there is no "=MODE" part of the pragma, do a query for the + ** current mode */ + eMode = PAGER_JOURNALMODE_QUERY; + }else{ + const char *zMode; + int n = sqlite3Strlen30(zRight); + for(eMode=0; (zMode = sqlite3JournalModename(eMode))!=0; eMode++){ + if( sqlite3StrNICmp(zRight, zMode, n)==0 ) break; + } + if( !zMode ){ + /* If the "=MODE" part does not match any known journal mode, + ** then do a query */ + eMode = PAGER_JOURNALMODE_QUERY; + } + if( eMode==PAGER_JOURNALMODE_OFF && (db->flags & SQLITE_Defensive)!=0 ){ + /* Do not allow journal-mode "OFF" in defensive since the database + ** can become corrupted using ordinary SQL when the journal is off */ + eMode = PAGER_JOURNALMODE_QUERY; + } + } + if( eMode==PAGER_JOURNALMODE_QUERY && pId2->n==0 ){ + /* Convert "PRAGMA journal_mode" into "PRAGMA main.journal_mode" */ + iDb = 0; + pId2->n = 1; + } + for(ii=db->nDb-1; ii>=0; ii--){ + if( db->aDb[ii].pBt && (ii==iDb || pId2->n==0) ){ + sqlite3VdbeUsesBtree(v, ii); + sqlite3VdbeAddOp3(v, OP_JournalMode, ii, 1, eMode); + } + } + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1); + break; + } + + /* + ** PRAGMA [schema.]journal_size_limit + ** PRAGMA [schema.]journal_size_limit=N + ** + ** Get or set the size limit on rollback journal files. + */ + case PragTyp_JOURNAL_SIZE_LIMIT: { + Pager *pPager = sqlite3BtreePager(pDb->pBt); + i64 iLimit = -2; + if( zRight ){ + sqlite3DecOrHexToI64(zRight, &iLimit); + if( iLimit<-1 ) iLimit = -1; + } + iLimit = sqlite3PagerJournalSizeLimit(pPager, iLimit); + returnSingleInt(v, iLimit); + break; + } + +#endif /* SQLITE_OMIT_PAGER_PRAGMAS */ + + /* + ** PRAGMA [schema.]auto_vacuum + ** PRAGMA [schema.]auto_vacuum=N + ** + ** Get or set the value of the database 'auto-vacuum' parameter. + ** The value is one of: 0 NONE 1 FULL 2 INCREMENTAL + */ +#ifndef SQLITE_OMIT_AUTOVACUUM + case PragTyp_AUTO_VACUUM: { + Btree *pBt = pDb->pBt; + assert( pBt!=0 ); + if( !zRight ){ + returnSingleInt(v, sqlite3BtreeGetAutoVacuum(pBt)); + }else{ + int eAuto = getAutoVacuum(zRight); + assert( eAuto>=0 && eAuto<=2 ); + db->nextAutovac = (u8)eAuto; + /* Call SetAutoVacuum() to set initialize the internal auto and + ** incr-vacuum flags. This is required in case this connection + ** creates the database file. It is important that it is created + ** as an auto-vacuum capable db. + */ + rc = sqlite3BtreeSetAutoVacuum(pBt, eAuto); + if( rc==SQLITE_OK && (eAuto==1 || eAuto==2) ){ + /* When setting the auto_vacuum mode to either "full" or + ** "incremental", write the value of meta[6] in the database + ** file. Before writing to meta[6], check that meta[3] indicates + ** that this really is an auto-vacuum capable database. + */ + static const int iLn = VDBE_OFFSET_LINENO(2); + static const VdbeOpList setMeta6[] = { + { OP_Transaction, 0, 1, 0}, /* 0 */ + { OP_ReadCookie, 0, 1, BTREE_LARGEST_ROOT_PAGE}, + { OP_If, 1, 0, 0}, /* 2 */ + { OP_Halt, SQLITE_OK, OE_Abort, 0}, /* 3 */ + { OP_SetCookie, 0, BTREE_INCR_VACUUM, 0}, /* 4 */ + }; + VdbeOp *aOp; + int iAddr = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeVerifyNoMallocRequired(v, ArraySize(setMeta6)); + aOp = sqlite3VdbeAddOpList(v, ArraySize(setMeta6), setMeta6, iLn); + if( ONLY_IF_REALLOC_STRESS(aOp==0) ) break; + aOp[0].p1 = iDb; + aOp[1].p1 = iDb; + aOp[2].p2 = iAddr+4; + aOp[4].p1 = iDb; + aOp[4].p3 = eAuto - 1; + sqlite3VdbeUsesBtree(v, iDb); + } + } + break; + } +#endif + + /* + ** PRAGMA [schema.]incremental_vacuum(N) + ** + ** Do N steps of incremental vacuuming on a database. + */ +#ifndef SQLITE_OMIT_AUTOVACUUM + case PragTyp_INCREMENTAL_VACUUM: { + int iLimit = 0, addr; + if( zRight==0 || !sqlite3GetInt32(zRight, &iLimit) || iLimit<=0 ){ + iLimit = 0x7fffffff; + } + sqlite3BeginWriteOperation(pParse, 0, iDb); + sqlite3VdbeAddOp2(v, OP_Integer, iLimit, 1); + addr = sqlite3VdbeAddOp1(v, OP_IncrVacuum, iDb); VdbeCoverage(v); + sqlite3VdbeAddOp1(v, OP_ResultRow, 1); + sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1); + sqlite3VdbeAddOp2(v, OP_IfPos, 1, addr); VdbeCoverage(v); + sqlite3VdbeJumpHere(v, addr); + break; + } +#endif + +#ifndef SQLITE_OMIT_PAGER_PRAGMAS + /* + ** PRAGMA [schema.]cache_size + ** PRAGMA [schema.]cache_size=N + ** + ** The first form reports the current local setting for the + ** page cache size. The second form sets the local + ** page cache size value. If N is positive then that is the + ** number of pages in the cache. If N is negative, then the + ** number of pages is adjusted so that the cache uses -N kibibytes + ** of memory. + */ + case PragTyp_CACHE_SIZE: { + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + if( !zRight ){ + returnSingleInt(v, pDb->pSchema->cache_size); + }else{ + int size = sqlite3Atoi(zRight); + pDb->pSchema->cache_size = size; + sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size); + } + break; + } + + /* + ** PRAGMA [schema.]cache_spill + ** PRAGMA cache_spill=BOOLEAN + ** PRAGMA [schema.]cache_spill=N + ** + ** The first form reports the current local setting for the + ** page cache spill size. The second form turns cache spill on + ** or off. When turning cache spill on, the size is set to the + ** current cache_size. The third form sets a spill size that + ** may be different form the cache size. + ** If N is positive then that is the + ** number of pages in the cache. If N is negative, then the + ** number of pages is adjusted so that the cache uses -N kibibytes + ** of memory. + ** + ** If the number of cache_spill pages is less then the number of + ** cache_size pages, no spilling occurs until the page count exceeds + ** the number of cache_size pages. + ** + ** The cache_spill=BOOLEAN setting applies to all attached schemas, + ** not just the schema specified. + */ + case PragTyp_CACHE_SPILL: { + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + if( !zRight ){ + returnSingleInt(v, + (db->flags & SQLITE_CacheSpill)==0 ? 0 : + sqlite3BtreeSetSpillSize(pDb->pBt,0)); + }else{ + int size = 1; + if( sqlite3GetInt32(zRight, &size) ){ + sqlite3BtreeSetSpillSize(pDb->pBt, size); + } + if( sqlite3GetBoolean(zRight, size!=0) ){ + db->flags |= SQLITE_CacheSpill; + }else{ + db->flags &= ~(u64)SQLITE_CacheSpill; + } + setAllPagerFlags(db); + } + break; + } + + /* + ** PRAGMA [schema.]mmap_size(N) + ** + ** Used to set mapping size limit. The mapping size limit is + ** used to limit the aggregate size of all memory mapped regions of the + ** database file. If this parameter is set to zero, then memory mapping + ** is not used at all. If N is negative, then the default memory map + ** limit determined by sqlite3_config(SQLITE_CONFIG_MMAP_SIZE) is set. + ** The parameter N is measured in bytes. + ** + ** This value is advisory. The underlying VFS is free to memory map + ** as little or as much as it wants. Except, if N is set to 0 then the + ** upper layers will never invoke the xFetch interfaces to the VFS. + */ + case PragTyp_MMAP_SIZE: { + sqlite3_int64 sz; +#if SQLITE_MAX_MMAP_SIZE>0 + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + if( zRight ){ + int ii; + sqlite3DecOrHexToI64(zRight, &sz); + if( sz<0 ) sz = sqlite3GlobalConfig.szMmap; + if( pId2->n==0 ) db->szMmap = sz; + for(ii=db->nDb-1; ii>=0; ii--){ + if( db->aDb[ii].pBt && (ii==iDb || pId2->n==0) ){ + sqlite3BtreeSetMmapLimit(db->aDb[ii].pBt, sz); + } + } + } + sz = -1; + rc = sqlite3_file_control(db, zDb, SQLITE_FCNTL_MMAP_SIZE, &sz); +#else + sz = 0; + rc = SQLITE_OK; +#endif + if( rc==SQLITE_OK ){ + returnSingleInt(v, sz); + }else if( rc!=SQLITE_NOTFOUND ){ + pParse->nErr++; + pParse->rc = rc; + } + break; + } + + /* + ** PRAGMA temp_store + ** PRAGMA temp_store = "default"|"memory"|"file" + ** + ** Return or set the local value of the temp_store flag. Changing + ** the local value does not make changes to the disk file and the default + ** value will be restored the next time the database is opened. + ** + ** Note that it is possible for the library compile-time options to + ** override this setting + */ + case PragTyp_TEMP_STORE: { + if( !zRight ){ + returnSingleInt(v, db->temp_store); + }else{ + changeTempStorage(pParse, zRight); + } + break; + } + + /* + ** PRAGMA temp_store_directory + ** PRAGMA temp_store_directory = ""|"directory_name" + ** + ** Return or set the local value of the temp_store_directory flag. Changing + ** the value sets a specific directory to be used for temporary files. + ** Setting to a null string reverts to the default temporary directory search. + ** If temporary directory is changed, then invalidateTempStorage. + ** + */ + case PragTyp_TEMP_STORE_DIRECTORY: { + sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); + if( !zRight ){ + returnSingleText(v, sqlite3_temp_directory); + }else{ +#ifndef SQLITE_OMIT_WSD + if( zRight[0] ){ + int res; + rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res); + if( rc!=SQLITE_OK || res==0 ){ + sqlite3ErrorMsg(pParse, "not a writable directory"); + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); + goto pragma_out; + } + } + if( SQLITE_TEMP_STORE==0 + || (SQLITE_TEMP_STORE==1 && db->temp_store<=1) + || (SQLITE_TEMP_STORE==2 && db->temp_store==1) + ){ + invalidateTempStorage(pParse); + } + sqlite3_free(sqlite3_temp_directory); + if( zRight[0] ){ + sqlite3_temp_directory = sqlite3_mprintf("%s", zRight); + }else{ + sqlite3_temp_directory = 0; + } +#endif /* SQLITE_OMIT_WSD */ + } + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); + break; + } + +#if SQLITE_OS_WIN + /* + ** PRAGMA data_store_directory + ** PRAGMA data_store_directory = ""|"directory_name" + ** + ** Return or set the local value of the data_store_directory flag. Changing + ** the value sets a specific directory to be used for database files that + ** were specified with a relative pathname. Setting to a null string reverts + ** to the default database directory, which for database files specified with + ** a relative path will probably be based on the current directory for the + ** process. Database file specified with an absolute path are not impacted + ** by this setting, regardless of its value. + ** + */ + case PragTyp_DATA_STORE_DIRECTORY: { + sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); + if( !zRight ){ + returnSingleText(v, sqlite3_data_directory); + }else{ +#ifndef SQLITE_OMIT_WSD + if( zRight[0] ){ + int res; + rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res); + if( rc!=SQLITE_OK || res==0 ){ + sqlite3ErrorMsg(pParse, "not a writable directory"); + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); + goto pragma_out; + } + } + sqlite3_free(sqlite3_data_directory); + if( zRight[0] ){ + sqlite3_data_directory = sqlite3_mprintf("%s", zRight); + }else{ + sqlite3_data_directory = 0; + } +#endif /* SQLITE_OMIT_WSD */ + } + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); + break; + } +#endif + +#if SQLITE_ENABLE_LOCKING_STYLE + /* + ** PRAGMA [schema.]lock_proxy_file + ** PRAGMA [schema.]lock_proxy_file = ":auto:"|"lock_file_path" + ** + ** Return or set the value of the lock_proxy_file flag. Changing + ** the value sets a specific file to be used for database access locks. + ** + */ + case PragTyp_LOCK_PROXY_FILE: { + if( !zRight ){ + Pager *pPager = sqlite3BtreePager(pDb->pBt); + char *proxy_file_path = NULL; + sqlite3_file *pFile = sqlite3PagerFile(pPager); + sqlite3OsFileControlHint(pFile, SQLITE_GET_LOCKPROXYFILE, + &proxy_file_path); + returnSingleText(v, proxy_file_path); + }else{ + Pager *pPager = sqlite3BtreePager(pDb->pBt); + sqlite3_file *pFile = sqlite3PagerFile(pPager); + int res; + if( zRight[0] ){ + res=sqlite3OsFileControl(pFile, SQLITE_SET_LOCKPROXYFILE, + zRight); + } else { + res=sqlite3OsFileControl(pFile, SQLITE_SET_LOCKPROXYFILE, + NULL); + } + if( res!=SQLITE_OK ){ + sqlite3ErrorMsg(pParse, "failed to set lock proxy file"); + goto pragma_out; + } + } + break; + } +#endif /* SQLITE_ENABLE_LOCKING_STYLE */ + + /* + ** PRAGMA [schema.]synchronous + ** PRAGMA [schema.]synchronous=OFF|ON|NORMAL|FULL|EXTRA + ** + ** Return or set the local value of the synchronous flag. Changing + ** the local value does not make changes to the disk file and the + ** default value will be restored the next time the database is + ** opened. + */ + case PragTyp_SYNCHRONOUS: { + if( !zRight ){ + returnSingleInt(v, pDb->safety_level-1); + }else{ + if( !db->autoCommit ){ + sqlite3ErrorMsg(pParse, + "Safety level may not be changed inside a transaction"); + }else if( iDb!=1 ){ + int iLevel = (getSafetyLevel(zRight,0,1)+1) & PAGER_SYNCHRONOUS_MASK; + if( iLevel==0 ) iLevel = 1; + pDb->safety_level = iLevel; + pDb->bSyncSet = 1; + setAllPagerFlags(db); + } + } + break; + } +#endif /* SQLITE_OMIT_PAGER_PRAGMAS */ + +#ifndef SQLITE_OMIT_FLAG_PRAGMAS + case PragTyp_FLAG: { + if( zRight==0 ){ + setPragmaResultColumnNames(v, pPragma); + returnSingleInt(v, (db->flags & pPragma->iArg)!=0 ); + }else{ + u64 mask = pPragma->iArg; /* Mask of bits to set or clear. */ + if( db->autoCommit==0 ){ + /* Foreign key support may not be enabled or disabled while not + ** in auto-commit mode. */ + mask &= ~(SQLITE_ForeignKeys); + } + + if( sqlite3GetBoolean(zRight, 0) ){ + if( (mask & SQLITE_WriteSchema)==0 + || (db->flags & SQLITE_Defensive)==0 + ){ + db->flags |= mask; + } + }else{ + db->flags &= ~mask; + if( mask==SQLITE_DeferFKs ){ + db->nDeferredImmCons = 0; + db->nDeferredCons = 0; + } + if( (mask & SQLITE_WriteSchema)!=0 + && sqlite3_stricmp(zRight, "reset")==0 + ){ + /* IMP: R-60817-01178 If the argument is "RESET" then schema + ** writing is disabled (as with "PRAGMA writable_schema=OFF") and, + ** in addition, the schema is reloaded. */ + sqlite3ResetAllSchemasOfConnection(db); + } + } + + /* Many of the flag-pragmas modify the code generated by the SQL + ** compiler (eg. count_changes). So add an opcode to expire all + ** compiled SQL statements after modifying a pragma value. + */ + sqlite3VdbeAddOp0(v, OP_Expire); + setAllPagerFlags(db); + } + break; + } +#endif /* SQLITE_OMIT_FLAG_PRAGMAS */ + +#ifndef SQLITE_OMIT_SCHEMA_PRAGMAS + /* + ** PRAGMA table_info(
    ) + ** + ** Return a single row for each column of the named table. The columns of + ** the returned data set are: + ** + ** cid: Column id (numbered from left to right, starting at 0) + ** name: Column name + ** type: Column declaration type. + ** notnull: True if 'NOT NULL' is part of column declaration + ** dflt_value: The default value for the column, if any. + ** pk: Non-zero for PK fields. + */ + case PragTyp_TABLE_INFO: if( zRight ){ + Table *pTab; + sqlite3CodeVerifyNamedSchema(pParse, zDb); + pTab = sqlite3LocateTable(pParse, LOCATE_NOERR, zRight, zDb); + if( pTab ){ + int i, k; + int nHidden = 0; + Column *pCol; + Index *pPk = sqlite3PrimaryKeyIndex(pTab); + pParse->nMem = 7; + sqlite3ViewGetColumnNames(pParse, pTab); + for(i=0, pCol=pTab->aCol; inCol; i++, pCol++){ + int isHidden = 0; + const Expr *pColExpr; + if( pCol->colFlags & COLFLAG_NOINSERT ){ + if( pPragma->iArg==0 ){ + nHidden++; + continue; + } + if( pCol->colFlags & COLFLAG_VIRTUAL ){ + isHidden = 2; /* GENERATED ALWAYS AS ... VIRTUAL */ + }else if( pCol->colFlags & COLFLAG_STORED ){ + isHidden = 3; /* GENERATED ALWAYS AS ... STORED */ + }else{ assert( pCol->colFlags & COLFLAG_HIDDEN ); + isHidden = 1; /* HIDDEN */ + } + } + if( (pCol->colFlags & COLFLAG_PRIMKEY)==0 ){ + k = 0; + }else if( pPk==0 ){ + k = 1; + }else{ + for(k=1; k<=pTab->nCol && pPk->aiColumn[k-1]!=i; k++){} + } + pColExpr = sqlite3ColumnExpr(pTab,pCol); + assert( pColExpr==0 || pColExpr->op==TK_SPAN || isHidden>=2 ); + assert( pColExpr==0 || !ExprHasProperty(pColExpr, EP_IntValue) + || isHidden>=2 ); + sqlite3VdbeMultiLoad(v, 1, pPragma->iArg ? "issisii" : "issisi", + i-nHidden, + pCol->zCnName, + sqlite3ColumnType(pCol,""), + pCol->notNull ? 1 : 0, + (isHidden>=2 || pColExpr==0) ? 0 : pColExpr->u.zToken, + k, + isHidden); + } + } + } + break; + + /* + ** PRAGMA table_list + ** + ** Return a single row for each table, virtual table, or view in the + ** entire schema. + ** + ** schema: Name of attached database hold this table + ** name: Name of the table itself + ** type: "table", "view", "virtual", "shadow" + ** ncol: Number of columns + ** wr: True for a WITHOUT ROWID table + ** strict: True for a STRICT table + */ + case PragTyp_TABLE_LIST: { + int ii; + pParse->nMem = 6; + sqlite3CodeVerifyNamedSchema(pParse, zDb); + for(ii=0; iinDb; ii++){ + HashElem *k; + Hash *pHash; + int initNCol; + if( zDb && sqlite3_stricmp(zDb, db->aDb[ii].zDbSName)!=0 ) continue; + + /* Ensure that the Table.nCol field is initialized for all views + ** and virtual tables. Each time we initialize a Table.nCol value + ** for a table, that can potentially disrupt the hash table, so restart + ** the initialization scan. + */ + pHash = &db->aDb[ii].pSchema->tblHash; + initNCol = sqliteHashCount(pHash); + while( initNCol-- ){ + for(k=sqliteHashFirst(pHash); 1; k=sqliteHashNext(k) ){ + Table *pTab; + if( k==0 ){ initNCol = 0; break; } + pTab = sqliteHashData(k); + if( pTab->nCol==0 ){ + char *zSql = sqlite3MPrintf(db, "SELECT*FROM\"%w\"", pTab->zName); + if( zSql ){ + sqlite3_stmt *pDummy = 0; + (void)sqlite3_prepare_v3(db, zSql, -1, SQLITE_PREPARE_DONT_LOG, + &pDummy, 0); + (void)sqlite3_finalize(pDummy); + sqlite3DbFree(db, zSql); + } + if( db->mallocFailed ){ + sqlite3ErrorMsg(db->pParse, "out of memory"); + db->pParse->rc = SQLITE_NOMEM_BKPT; + } + pHash = &db->aDb[ii].pSchema->tblHash; + break; + } + } + } + + for(k=sqliteHashFirst(pHash); k; k=sqliteHashNext(k) ){ + Table *pTab = sqliteHashData(k); + const char *zType; + if( zRight && sqlite3_stricmp(zRight, pTab->zName)!=0 ) continue; + if( IsView(pTab) ){ + zType = "view"; + }else if( IsVirtual(pTab) ){ + zType = "virtual"; + }else if( pTab->tabFlags & TF_Shadow ){ + zType = "shadow"; + }else{ + zType = "table"; + } + sqlite3VdbeMultiLoad(v, 1, "sssiii", + db->aDb[ii].zDbSName, + sqlite3PreferredTableName(pTab->zName), + zType, + pTab->nCol, + (pTab->tabFlags & TF_WithoutRowid)!=0, + (pTab->tabFlags & TF_Strict)!=0 + ); + } + } + } + break; + +#ifdef SQLITE_DEBUG + case PragTyp_STATS: { + Index *pIdx; + HashElem *i; + pParse->nMem = 5; + sqlite3CodeVerifySchema(pParse, iDb); + for(i=sqliteHashFirst(&pDb->pSchema->tblHash); i; i=sqliteHashNext(i)){ + Table *pTab = sqliteHashData(i); + sqlite3VdbeMultiLoad(v, 1, "ssiii", + sqlite3PreferredTableName(pTab->zName), + 0, + pTab->szTabRow, + pTab->nRowLogEst, + pTab->tabFlags); + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + sqlite3VdbeMultiLoad(v, 2, "siiiX", + pIdx->zName, + pIdx->szIdxRow, + pIdx->aiRowLogEst[0], + pIdx->hasStat1); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 5); + } + } + } + break; +#endif + + case PragTyp_INDEX_INFO: if( zRight ){ + Index *pIdx; + Table *pTab; + pIdx = sqlite3FindIndex(db, zRight, zDb); + if( pIdx==0 ){ + /* If there is no index named zRight, check to see if there is a + ** WITHOUT ROWID table named zRight, and if there is, show the + ** structure of the PRIMARY KEY index for that table. */ + pTab = sqlite3LocateTable(pParse, LOCATE_NOERR, zRight, zDb); + if( pTab && !HasRowid(pTab) ){ + pIdx = sqlite3PrimaryKeyIndex(pTab); + } + } + if( pIdx ){ + int iIdxDb = sqlite3SchemaToIndex(db, pIdx->pSchema); + int i; + int mx; + if( pPragma->iArg ){ + /* PRAGMA index_xinfo (newer version with more rows and columns) */ + mx = pIdx->nColumn; + pParse->nMem = 6; + }else{ + /* PRAGMA index_info (legacy version) */ + mx = pIdx->nKeyCol; + pParse->nMem = 3; + } + pTab = pIdx->pTable; + sqlite3CodeVerifySchema(pParse, iIdxDb); + assert( pParse->nMem<=pPragma->nPragCName ); + for(i=0; iaiColumn[i]; + sqlite3VdbeMultiLoad(v, 1, "iisX", i, cnum, + cnum<0 ? 0 : pTab->aCol[cnum].zCnName); + if( pPragma->iArg ){ + sqlite3VdbeMultiLoad(v, 4, "isiX", + pIdx->aSortOrder[i], + pIdx->azColl[i], + inKeyCol); + } + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, pParse->nMem); + } + } + } + break; + + case PragTyp_INDEX_LIST: if( zRight ){ + Index *pIdx; + Table *pTab; + int i; + pTab = sqlite3FindTable(db, zRight, zDb); + if( pTab ){ + int iTabDb = sqlite3SchemaToIndex(db, pTab->pSchema); + pParse->nMem = 5; + sqlite3CodeVerifySchema(pParse, iTabDb); + for(pIdx=pTab->pIndex, i=0; pIdx; pIdx=pIdx->pNext, i++){ + const char *azOrigin[] = { "c", "u", "pk" }; + sqlite3VdbeMultiLoad(v, 1, "isisi", + i, + pIdx->zName, + IsUniqueIndex(pIdx), + azOrigin[pIdx->idxType], + pIdx->pPartIdxWhere!=0); + } + } + } + break; + + case PragTyp_DATABASE_LIST: { + int i; + pParse->nMem = 3; + for(i=0; inDb; i++){ + if( db->aDb[i].pBt==0 ) continue; + assert( db->aDb[i].zDbSName!=0 ); + sqlite3VdbeMultiLoad(v, 1, "iss", + i, + db->aDb[i].zDbSName, + sqlite3BtreeGetFilename(db->aDb[i].pBt)); + } + } + break; + + case PragTyp_COLLATION_LIST: { + int i = 0; + HashElem *p; + pParse->nMem = 2; + for(p=sqliteHashFirst(&db->aCollSeq); p; p=sqliteHashNext(p)){ + CollSeq *pColl = (CollSeq *)sqliteHashData(p); + sqlite3VdbeMultiLoad(v, 1, "is", i++, pColl->zName); + } + } + break; + +#ifndef SQLITE_OMIT_INTROSPECTION_PRAGMAS + case PragTyp_FUNCTION_LIST: { + int i; + HashElem *j; + FuncDef *p; + int showInternFunc = (db->mDbFlags & DBFLAG_InternalFunc)!=0; + pParse->nMem = 6; + for(i=0; iu.pHash ){ + assert( p->funcFlags & SQLITE_FUNC_BUILTIN ); + pragmaFunclistLine(v, p, 1, showInternFunc); + } + } + for(j=sqliteHashFirst(&db->aFunc); j; j=sqliteHashNext(j)){ + p = (FuncDef*)sqliteHashData(j); + assert( (p->funcFlags & SQLITE_FUNC_BUILTIN)==0 ); + pragmaFunclistLine(v, p, 0, showInternFunc); + } + } + break; + +#ifndef SQLITE_OMIT_VIRTUALTABLE + case PragTyp_MODULE_LIST: { + HashElem *j; + pParse->nMem = 1; + for(j=sqliteHashFirst(&db->aModule); j; j=sqliteHashNext(j)){ + Module *pMod = (Module*)sqliteHashData(j); + sqlite3VdbeMultiLoad(v, 1, "s", pMod->zName); + } + } + break; +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + + case PragTyp_PRAGMA_LIST: { + int i; + for(i=0; iu.tab.pFKey; + if( pFK ){ + int iTabDb = sqlite3SchemaToIndex(db, pTab->pSchema); + int i = 0; + pParse->nMem = 8; + sqlite3CodeVerifySchema(pParse, iTabDb); + while(pFK){ + int j; + for(j=0; jnCol; j++){ + sqlite3VdbeMultiLoad(v, 1, "iissssss", + i, + j, + pFK->zTo, + pTab->aCol[pFK->aCol[j].iFrom].zCnName, + pFK->aCol[j].zCol, + actionName(pFK->aAction[1]), /* ON UPDATE */ + actionName(pFK->aAction[0]), /* ON DELETE */ + "NONE"); + } + ++i; + pFK = pFK->pNextFrom; + } + } + } + } + break; +#endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */ + +#ifndef SQLITE_OMIT_FOREIGN_KEY +#ifndef SQLITE_OMIT_TRIGGER + case PragTyp_FOREIGN_KEY_CHECK: { + FKey *pFK; /* A foreign key constraint */ + Table *pTab; /* Child table contain "REFERENCES" keyword */ + Table *pParent; /* Parent table that child points to */ + Index *pIdx; /* Index in the parent table */ + int i; /* Loop counter: Foreign key number for pTab */ + int j; /* Loop counter: Field of the foreign key */ + HashElem *k; /* Loop counter: Next table in schema */ + int x; /* result variable */ + int regResult; /* 3 registers to hold a result row */ + int regRow; /* Registers to hold a row from pTab */ + int addrTop; /* Top of a loop checking foreign keys */ + int addrOk; /* Jump here if the key is OK */ + int *aiCols; /* child to parent column mapping */ + + regResult = pParse->nMem+1; + pParse->nMem += 4; + regRow = ++pParse->nMem; + k = sqliteHashFirst(&db->aDb[iDb].pSchema->tblHash); + while( k ){ + if( zRight ){ + pTab = sqlite3LocateTable(pParse, 0, zRight, zDb); + k = 0; + }else{ + pTab = (Table*)sqliteHashData(k); + k = sqliteHashNext(k); + } + if( pTab==0 || !IsOrdinaryTable(pTab) || pTab->u.tab.pFKey==0 ) continue; + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + zDb = db->aDb[iDb].zDbSName; + sqlite3CodeVerifySchema(pParse, iDb); + sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName); + sqlite3TouchRegister(pParse, pTab->nCol+regRow); + sqlite3OpenTable(pParse, 0, iDb, pTab, OP_OpenRead); + sqlite3VdbeLoadString(v, regResult, pTab->zName); + assert( IsOrdinaryTable(pTab) ); + for(i=1, pFK=pTab->u.tab.pFKey; pFK; i++, pFK=pFK->pNextFrom){ + pParent = sqlite3FindTable(db, pFK->zTo, zDb); + if( pParent==0 ) continue; + pIdx = 0; + sqlite3TableLock(pParse, iDb, pParent->tnum, 0, pParent->zName); + x = sqlite3FkLocateIndex(pParse, pParent, pFK, &pIdx, 0); + if( x==0 ){ + if( pIdx==0 ){ + sqlite3OpenTable(pParse, i, iDb, pParent, OP_OpenRead); + }else{ + sqlite3VdbeAddOp3(v, OP_OpenRead, i, pIdx->tnum, iDb); + sqlite3VdbeSetP4KeyInfo(pParse, pIdx); + } + }else{ + k = 0; + break; + } + } + assert( pParse->nErr>0 || pFK==0 ); + if( pFK ) break; + if( pParse->nTabnTab = i; + addrTop = sqlite3VdbeAddOp1(v, OP_Rewind, 0); VdbeCoverage(v); + assert( IsOrdinaryTable(pTab) ); + for(i=1, pFK=pTab->u.tab.pFKey; pFK; i++, pFK=pFK->pNextFrom){ + pParent = sqlite3FindTable(db, pFK->zTo, zDb); + pIdx = 0; + aiCols = 0; + if( pParent ){ + x = sqlite3FkLocateIndex(pParse, pParent, pFK, &pIdx, &aiCols); + assert( x==0 || db->mallocFailed ); + } + addrOk = sqlite3VdbeMakeLabel(pParse); + + /* Generate code to read the child key values into registers + ** regRow..regRow+n. If any of the child key values are NULL, this + ** row cannot cause an FK violation. Jump directly to addrOk in + ** this case. */ + sqlite3TouchRegister(pParse, regRow + pFK->nCol); + for(j=0; jnCol; j++){ + int iCol = aiCols ? aiCols[j] : pFK->aCol[j].iFrom; + sqlite3ExprCodeGetColumnOfTable(v, pTab, 0, iCol, regRow+j); + sqlite3VdbeAddOp2(v, OP_IsNull, regRow+j, addrOk); VdbeCoverage(v); + } + + /* Generate code to query the parent index for a matching parent + ** key. If a match is found, jump to addrOk. */ + if( pIdx ){ + sqlite3VdbeAddOp4(v, OP_Affinity, regRow, pFK->nCol, 0, + sqlite3IndexAffinityStr(db,pIdx), pFK->nCol); + sqlite3VdbeAddOp4Int(v, OP_Found, i, addrOk, regRow, pFK->nCol); + VdbeCoverage(v); + }else if( pParent ){ + int jmp = sqlite3VdbeCurrentAddr(v)+2; + sqlite3VdbeAddOp3(v, OP_SeekRowid, i, jmp, regRow); VdbeCoverage(v); + sqlite3VdbeGoto(v, addrOk); + assert( pFK->nCol==1 || db->mallocFailed ); + } + + /* Generate code to report an FK violation to the caller. */ + if( HasRowid(pTab) ){ + sqlite3VdbeAddOp2(v, OP_Rowid, 0, regResult+1); + }else{ + sqlite3VdbeAddOp2(v, OP_Null, 0, regResult+1); + } + sqlite3VdbeMultiLoad(v, regResult+2, "siX", pFK->zTo, i-1); + sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, 4); + sqlite3VdbeResolveLabel(v, addrOk); + sqlite3DbFree(db, aiCols); + } + sqlite3VdbeAddOp2(v, OP_Next, 0, addrTop+1); VdbeCoverage(v); + sqlite3VdbeJumpHere(v, addrTop); + } + } + break; +#endif /* !defined(SQLITE_OMIT_TRIGGER) */ +#endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */ + +#ifndef SQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA + /* Reinstall the LIKE and GLOB functions. The variant of LIKE + ** used will be case sensitive or not depending on the RHS. + */ + case PragTyp_CASE_SENSITIVE_LIKE: { + if( zRight ){ + sqlite3RegisterLikeFunctions(db, sqlite3GetBoolean(zRight, 0)); + } + } + break; +#endif /* SQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA */ + +#ifndef SQLITE_INTEGRITY_CHECK_ERROR_MAX +# define SQLITE_INTEGRITY_CHECK_ERROR_MAX 100 +#endif + +#ifndef SQLITE_OMIT_INTEGRITY_CHECK + /* PRAGMA integrity_check + ** PRAGMA integrity_check(N) + ** PRAGMA quick_check + ** PRAGMA quick_check(N) + ** + ** Verify the integrity of the database. + ** + ** The "quick_check" is reduced version of + ** integrity_check designed to detect most database corruption + ** without the overhead of cross-checking indexes. Quick_check + ** is linear time whereas integrity_check is O(NlogN). + ** + ** The maximum number of errors is 100 by default. A different default + ** can be specified using a numeric parameter N. + ** + ** Or, the parameter N can be the name of a table. In that case, only + ** the one table named is verified. The freelist is only verified if + ** the named table is "sqlite_schema" (or one of its aliases). + ** + ** All schemas are checked by default. To check just a single + ** schema, use the form: + ** + ** PRAGMA schema.integrity_check; + */ + case PragTyp_INTEGRITY_CHECK: { + int i, j, addr, mxErr; + Table *pObjTab = 0; /* Check only this one table, if not NULL */ + + int isQuick = (sqlite3Tolower(zLeft[0])=='q'); + + /* If the PRAGMA command was of the form "PRAGMA .integrity_check", + ** then iDb is set to the index of the database identified by . + ** In this case, the integrity of database iDb only is verified by + ** the VDBE created below. + ** + ** Otherwise, if the command was simply "PRAGMA integrity_check" (or + ** "PRAGMA quick_check"), then iDb is set to 0. In this case, set iDb + ** to -1 here, to indicate that the VDBE should verify the integrity + ** of all attached databases. */ + assert( iDb>=0 ); + assert( iDb==0 || pId2->z ); + if( pId2->z==0 ) iDb = -1; + + /* Initialize the VDBE program */ + pParse->nMem = 6; + + /* Set the maximum error count */ + mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX; + if( zRight ){ + if( sqlite3GetInt32(pValue->z, &mxErr) ){ + if( mxErr<=0 ){ + mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX; + } + }else{ + pObjTab = sqlite3LocateTable(pParse, 0, zRight, + iDb>=0 ? db->aDb[iDb].zDbSName : 0); + } + } + sqlite3VdbeAddOp2(v, OP_Integer, mxErr-1, 1); /* reg[1] holds errors left */ + + /* Do an integrity check on each database file */ + for(i=0; inDb; i++){ + HashElem *x; /* For looping over tables in the schema */ + Hash *pTbls; /* Set of all tables in the schema */ + int *aRoot; /* Array of root page numbers of all btrees */ + int cnt = 0; /* Number of entries in aRoot[] */ + + if( OMIT_TEMPDB && i==1 ) continue; + if( iDb>=0 && i!=iDb ) continue; + + sqlite3CodeVerifySchema(pParse, i); + pParse->okConstFactor = 0; /* tag-20230327-1 */ + + /* Do an integrity check of the B-Tree + ** + ** Begin by finding the root pages numbers + ** for all tables and indices in the database. + */ + assert( sqlite3SchemaMutexHeld(db, i, 0) ); + pTbls = &db->aDb[i].pSchema->tblHash; + for(cnt=0, x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){ + Table *pTab = sqliteHashData(x); /* Current table */ + Index *pIdx; /* An index on pTab */ + int nIdx; /* Number of indexes on pTab */ + if( tableSkipIntegrityCheck(pTab,pObjTab) ) continue; + if( HasRowid(pTab) ) cnt++; + for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){ cnt++; } + } + if( cnt==0 ) continue; + if( pObjTab ) cnt++; + aRoot = sqlite3DbMallocRawNN(db, sizeof(int)*(cnt+1)); + if( aRoot==0 ) break; + cnt = 0; + if( pObjTab ) aRoot[++cnt] = 0; + for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){ + Table *pTab = sqliteHashData(x); + Index *pIdx; + if( tableSkipIntegrityCheck(pTab,pObjTab) ) continue; + if( HasRowid(pTab) ) aRoot[++cnt] = pTab->tnum; + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + aRoot[++cnt] = pIdx->tnum; + } + } + aRoot[0] = cnt; + + /* Make sure sufficient number of registers have been allocated */ + sqlite3TouchRegister(pParse, 8+cnt); + sqlite3VdbeAddOp3(v, OP_Null, 0, 8, 8+cnt); + sqlite3ClearTempRegCache(pParse); + + /* Do the b-tree integrity checks */ + sqlite3VdbeAddOp4(v, OP_IntegrityCk, 1, cnt, 8, (char*)aRoot,P4_INTARRAY); + sqlite3VdbeChangeP5(v, (u16)i); + addr = sqlite3VdbeAddOp1(v, OP_IsNull, 2); VdbeCoverage(v); + sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, + sqlite3MPrintf(db, "*** in database %s ***\n", db->aDb[i].zDbSName), + P4_DYNAMIC); + sqlite3VdbeAddOp3(v, OP_Concat, 2, 3, 3); + integrityCheckResultRow(v); + sqlite3VdbeJumpHere(v, addr); + + /* Check that the indexes all have the right number of rows */ + cnt = pObjTab ? 1 : 0; + sqlite3VdbeLoadString(v, 2, "wrong # of entries in index "); + for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){ + int iTab = 0; + Table *pTab = sqliteHashData(x); + Index *pIdx; + if( tableSkipIntegrityCheck(pTab,pObjTab) ) continue; + if( HasRowid(pTab) ){ + iTab = cnt++; + }else{ + iTab = cnt; + for(pIdx=pTab->pIndex; ALWAYS(pIdx); pIdx=pIdx->pNext){ + if( IsPrimaryKeyIndex(pIdx) ) break; + iTab++; + } + } + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + if( pIdx->pPartIdxWhere==0 ){ + addr = sqlite3VdbeAddOp3(v, OP_Eq, 8+cnt, 0, 8+iTab); + VdbeCoverageNeverNull(v); + sqlite3VdbeLoadString(v, 4, pIdx->zName); + sqlite3VdbeAddOp3(v, OP_Concat, 4, 2, 3); + integrityCheckResultRow(v); + sqlite3VdbeJumpHere(v, addr); + } + cnt++; + } + } + + /* Make sure all the indices are constructed correctly. + */ + for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){ + Table *pTab = sqliteHashData(x); + Index *pIdx, *pPk; + Index *pPrior = 0; /* Previous index */ + int loopTop; + int iDataCur, iIdxCur; + int r1 = -1; + int bStrict; /* True for a STRICT table */ + int r2; /* Previous key for WITHOUT ROWID tables */ + int mxCol; /* Maximum non-virtual column number */ + + if( tableSkipIntegrityCheck(pTab,pObjTab) ) continue; + if( !IsOrdinaryTable(pTab) ) continue; + if( isQuick || HasRowid(pTab) ){ + pPk = 0; + r2 = 0; + }else{ + pPk = sqlite3PrimaryKeyIndex(pTab); + r2 = sqlite3GetTempRange(pParse, pPk->nKeyCol); + sqlite3VdbeAddOp3(v, OP_Null, 1, r2, r2+pPk->nKeyCol-1); + } + sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenRead, 0, + 1, 0, &iDataCur, &iIdxCur); + /* reg[7] counts the number of entries in the table. + ** reg[8+i] counts the number of entries in the i-th index + */ + sqlite3VdbeAddOp2(v, OP_Integer, 0, 7); + for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ + sqlite3VdbeAddOp2(v, OP_Integer, 0, 8+j); /* index entries counter */ + } + assert( pParse->nMem>=8+j ); + assert( sqlite3NoTempsInRange(pParse,1,7+j) ); + sqlite3VdbeAddOp2(v, OP_Rewind, iDataCur, 0); VdbeCoverage(v); + loopTop = sqlite3VdbeAddOp2(v, OP_AddImm, 7, 1); + + /* Fetch the right-most column from the table. This will cause + ** the entire record header to be parsed and sanity checked. It + ** will also prepopulate the cursor column cache that is used + ** by the OP_IsType code, so it is a required step. + */ + assert( !IsVirtual(pTab) ); + if( HasRowid(pTab) ){ + mxCol = -1; + for(j=0; jnCol; j++){ + if( (pTab->aCol[j].colFlags & COLFLAG_VIRTUAL)==0 ) mxCol++; + } + if( mxCol==pTab->iPKey ) mxCol--; + }else{ + /* COLFLAG_VIRTUAL columns are not included in the WITHOUT ROWID + ** PK index column-count, so there is no need to account for them + ** in this case. */ + mxCol = sqlite3PrimaryKeyIndex(pTab)->nColumn-1; + } + if( mxCol>=0 ){ + sqlite3VdbeAddOp3(v, OP_Column, iDataCur, mxCol, 3); + sqlite3VdbeTypeofColumn(v, 3); + } + + if( !isQuick ){ + if( pPk ){ + /* Verify WITHOUT ROWID keys are in ascending order */ + int a1; + char *zErr; + a1 = sqlite3VdbeAddOp4Int(v, OP_IdxGT, iDataCur, 0,r2,pPk->nKeyCol); + VdbeCoverage(v); + sqlite3VdbeAddOp1(v, OP_IsNull, r2); VdbeCoverage(v); + zErr = sqlite3MPrintf(db, + "row not in PRIMARY KEY order for %s", + pTab->zName); + sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC); + integrityCheckResultRow(v); + sqlite3VdbeJumpHere(v, a1); + sqlite3VdbeJumpHere(v, a1+1); + for(j=0; jnKeyCol; j++){ + sqlite3ExprCodeLoadIndexColumn(pParse, pPk, iDataCur, j, r2+j); + } + } + } + /* Verify datatypes for all columns: + ** + ** (1) NOT NULL columns may not contain a NULL + ** (2) Datatype must be exact for non-ANY columns in STRICT tables + ** (3) Datatype for TEXT columns in non-STRICT tables must be + ** NULL, TEXT, or BLOB. + ** (4) Datatype for numeric columns in non-STRICT tables must not + ** be a TEXT value that can be losslessly converted to numeric. + */ + bStrict = (pTab->tabFlags & TF_Strict)!=0; + for(j=0; jnCol; j++){ + char *zErr; + Column *pCol = pTab->aCol + j; /* The column to be checked */ + int labelError; /* Jump here to report an error */ + int labelOk; /* Jump here if all looks ok */ + int p1, p3, p4; /* Operands to the OP_IsType opcode */ + int doTypeCheck; /* Check datatypes (besides NOT NULL) */ + + if( j==pTab->iPKey ) continue; + if( bStrict ){ + doTypeCheck = pCol->eCType>COLTYPE_ANY; + }else{ + doTypeCheck = pCol->affinity>SQLITE_AFF_BLOB; + } + if( pCol->notNull==0 && !doTypeCheck ) continue; + + /* Compute the operands that will be needed for OP_IsType */ + p4 = SQLITE_NULL; + if( pCol->colFlags & COLFLAG_VIRTUAL ){ + sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, j, 3); + p1 = -1; + p3 = 3; + }else{ + if( pCol->iDflt ){ + sqlite3_value *pDfltValue = 0; + sqlite3ValueFromExpr(db, sqlite3ColumnExpr(pTab,pCol), ENC(db), + pCol->affinity, &pDfltValue); + if( pDfltValue ){ + p4 = sqlite3_value_type(pDfltValue); + sqlite3ValueFree(pDfltValue); + } + } + p1 = iDataCur; + if( !HasRowid(pTab) ){ + testcase( j!=sqlite3TableColumnToStorage(pTab, j) ); + p3 = sqlite3TableColumnToIndex(sqlite3PrimaryKeyIndex(pTab), j); + }else{ + p3 = sqlite3TableColumnToStorage(pTab,j); + testcase( p3!=j); + } + } + + labelError = sqlite3VdbeMakeLabel(pParse); + labelOk = sqlite3VdbeMakeLabel(pParse); + if( pCol->notNull ){ + /* (1) NOT NULL columns may not contain a NULL */ + int jmp3; + int jmp2 = sqlite3VdbeAddOp4Int(v, OP_IsType, p1, labelOk, p3, p4); + VdbeCoverage(v); + if( p1<0 ){ + sqlite3VdbeChangeP5(v, 0x0f); /* INT, REAL, TEXT, or BLOB */ + jmp3 = jmp2; + }else{ + sqlite3VdbeChangeP5(v, 0x0d); /* INT, TEXT, or BLOB */ + /* OP_IsType does not detect NaN values in the database file + ** which should be treated as a NULL. So if the header type + ** is REAL, we have to load the actual data using OP_Column + ** to reliably determine if the value is a NULL. */ + sqlite3VdbeAddOp3(v, OP_Column, p1, p3, 3); + sqlite3ColumnDefault(v, pTab, j, 3); + jmp3 = sqlite3VdbeAddOp2(v, OP_NotNull, 3, labelOk); + VdbeCoverage(v); + } + zErr = sqlite3MPrintf(db, "NULL value in %s.%s", pTab->zName, + pCol->zCnName); + sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC); + if( doTypeCheck ){ + sqlite3VdbeGoto(v, labelError); + sqlite3VdbeJumpHere(v, jmp2); + sqlite3VdbeJumpHere(v, jmp3); + }else{ + /* VDBE byte code will fall thru */ + } + } + if( bStrict && doTypeCheck ){ + /* (2) Datatype must be exact for non-ANY columns in STRICT tables*/ + static unsigned char aStdTypeMask[] = { + 0x1f, /* ANY */ + 0x18, /* BLOB */ + 0x11, /* INT */ + 0x11, /* INTEGER */ + 0x13, /* REAL */ + 0x14 /* TEXT */ + }; + sqlite3VdbeAddOp4Int(v, OP_IsType, p1, labelOk, p3, p4); + assert( pCol->eCType>=1 && pCol->eCType<=sizeof(aStdTypeMask) ); + sqlite3VdbeChangeP5(v, aStdTypeMask[pCol->eCType-1]); + VdbeCoverage(v); + zErr = sqlite3MPrintf(db, "non-%s value in %s.%s", + sqlite3StdType[pCol->eCType-1], + pTab->zName, pTab->aCol[j].zCnName); + sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC); + }else if( !bStrict && pCol->affinity==SQLITE_AFF_TEXT ){ + /* (3) Datatype for TEXT columns in non-STRICT tables must be + ** NULL, TEXT, or BLOB. */ + sqlite3VdbeAddOp4Int(v, OP_IsType, p1, labelOk, p3, p4); + sqlite3VdbeChangeP5(v, 0x1c); /* NULL, TEXT, or BLOB */ + VdbeCoverage(v); + zErr = sqlite3MPrintf(db, "NUMERIC value in %s.%s", + pTab->zName, pTab->aCol[j].zCnName); + sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC); + }else if( !bStrict && pCol->affinity>=SQLITE_AFF_NUMERIC ){ + /* (4) Datatype for numeric columns in non-STRICT tables must not + ** be a TEXT value that can be converted to numeric. */ + sqlite3VdbeAddOp4Int(v, OP_IsType, p1, labelOk, p3, p4); + sqlite3VdbeChangeP5(v, 0x1b); /* NULL, INT, FLOAT, or BLOB */ + VdbeCoverage(v); + if( p1>=0 ){ + sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, j, 3); + } + sqlite3VdbeAddOp4(v, OP_Affinity, 3, 1, 0, "C", P4_STATIC); + sqlite3VdbeAddOp4Int(v, OP_IsType, -1, labelOk, 3, p4); + sqlite3VdbeChangeP5(v, 0x1c); /* NULL, TEXT, or BLOB */ + VdbeCoverage(v); + zErr = sqlite3MPrintf(db, "TEXT value in %s.%s", + pTab->zName, pTab->aCol[j].zCnName); + sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC); + } + sqlite3VdbeResolveLabel(v, labelError); + integrityCheckResultRow(v); + sqlite3VdbeResolveLabel(v, labelOk); + } + /* Verify CHECK constraints */ + if( pTab->pCheck && (db->flags & SQLITE_IgnoreChecks)==0 ){ + ExprList *pCheck = sqlite3ExprListDup(db, pTab->pCheck, 0); + if( db->mallocFailed==0 ){ + int addrCkFault = sqlite3VdbeMakeLabel(pParse); + int addrCkOk = sqlite3VdbeMakeLabel(pParse); + char *zErr; + int k; + pParse->iSelfTab = iDataCur + 1; + for(k=pCheck->nExpr-1; k>0; k--){ + sqlite3ExprIfFalse(pParse, pCheck->a[k].pExpr, addrCkFault, 0); + } + sqlite3ExprIfTrue(pParse, pCheck->a[0].pExpr, addrCkOk, + SQLITE_JUMPIFNULL); + sqlite3VdbeResolveLabel(v, addrCkFault); + pParse->iSelfTab = 0; + zErr = sqlite3MPrintf(db, "CHECK constraint failed in %s", + pTab->zName); + sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC); + integrityCheckResultRow(v); + sqlite3VdbeResolveLabel(v, addrCkOk); + } + sqlite3ExprListDelete(db, pCheck); + } + if( !isQuick ){ /* Omit the remaining tests for quick_check */ + /* Validate index entries for the current row */ + for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ + int jmp2, jmp3, jmp4, jmp5, label6; + int kk; + int ckUniq = sqlite3VdbeMakeLabel(pParse); + if( pPk==pIdx ) continue; + r1 = sqlite3GenerateIndexKey(pParse, pIdx, iDataCur, 0, 0, &jmp3, + pPrior, r1); + pPrior = pIdx; + sqlite3VdbeAddOp2(v, OP_AddImm, 8+j, 1);/* increment entry count */ + /* Verify that an index entry exists for the current table row */ + jmp2 = sqlite3VdbeAddOp4Int(v, OP_Found, iIdxCur+j, ckUniq, r1, + pIdx->nColumn); VdbeCoverage(v); + sqlite3VdbeLoadString(v, 3, "row "); + sqlite3VdbeAddOp3(v, OP_Concat, 7, 3, 3); + sqlite3VdbeLoadString(v, 4, " missing from index "); + sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3); + jmp5 = sqlite3VdbeLoadString(v, 4, pIdx->zName); + sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3); + jmp4 = integrityCheckResultRow(v); + sqlite3VdbeJumpHere(v, jmp2); + + /* The OP_IdxRowid opcode is an optimized version of OP_Column + ** that extracts the rowid off the end of the index record. + ** But it only works correctly if index record does not have + ** any extra bytes at the end. Verify that this is the case. */ + if( HasRowid(pTab) ){ + int jmp7; + sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur+j, 3); + jmp7 = sqlite3VdbeAddOp3(v, OP_Eq, 3, 0, r1+pIdx->nColumn-1); + VdbeCoverageNeverNull(v); + sqlite3VdbeLoadString(v, 3, + "rowid not at end-of-record for row "); + sqlite3VdbeAddOp3(v, OP_Concat, 7, 3, 3); + sqlite3VdbeLoadString(v, 4, " of index "); + sqlite3VdbeGoto(v, jmp5-1); + sqlite3VdbeJumpHere(v, jmp7); + } + + /* Any indexed columns with non-BINARY collations must still hold + ** the exact same text value as the table. */ + label6 = 0; + for(kk=0; kknKeyCol; kk++){ + if( pIdx->azColl[kk]==sqlite3StrBINARY ) continue; + if( label6==0 ) label6 = sqlite3VdbeMakeLabel(pParse); + sqlite3VdbeAddOp3(v, OP_Column, iIdxCur+j, kk, 3); + sqlite3VdbeAddOp3(v, OP_Ne, 3, label6, r1+kk); VdbeCoverage(v); + } + if( label6 ){ + int jmp6 = sqlite3VdbeAddOp0(v, OP_Goto); + sqlite3VdbeResolveLabel(v, label6); + sqlite3VdbeLoadString(v, 3, "row "); + sqlite3VdbeAddOp3(v, OP_Concat, 7, 3, 3); + sqlite3VdbeLoadString(v, 4, " values differ from index "); + sqlite3VdbeGoto(v, jmp5-1); + sqlite3VdbeJumpHere(v, jmp6); + } + + /* For UNIQUE indexes, verify that only one entry exists with the + ** current key. The entry is unique if (1) any column is NULL + ** or (2) the next entry has a different key */ + if( IsUniqueIndex(pIdx) ){ + int uniqOk = sqlite3VdbeMakeLabel(pParse); + int jmp6; + for(kk=0; kknKeyCol; kk++){ + int iCol = pIdx->aiColumn[kk]; + assert( iCol!=XN_ROWID && iColnCol ); + if( iCol>=0 && pTab->aCol[iCol].notNull ) continue; + sqlite3VdbeAddOp2(v, OP_IsNull, r1+kk, uniqOk); + VdbeCoverage(v); + } + jmp6 = sqlite3VdbeAddOp1(v, OP_Next, iIdxCur+j); VdbeCoverage(v); + sqlite3VdbeGoto(v, uniqOk); + sqlite3VdbeJumpHere(v, jmp6); + sqlite3VdbeAddOp4Int(v, OP_IdxGT, iIdxCur+j, uniqOk, r1, + pIdx->nKeyCol); VdbeCoverage(v); + sqlite3VdbeLoadString(v, 3, "non-unique entry in index "); + sqlite3VdbeGoto(v, jmp5); + sqlite3VdbeResolveLabel(v, uniqOk); + } + sqlite3VdbeJumpHere(v, jmp4); + sqlite3ResolvePartIdxLabel(pParse, jmp3); + } + } + sqlite3VdbeAddOp2(v, OP_Next, iDataCur, loopTop); VdbeCoverage(v); + sqlite3VdbeJumpHere(v, loopTop-1); + if( pPk ){ + assert( !isQuick ); + sqlite3ReleaseTempRange(pParse, r2, pPk->nKeyCol); + } + } + +#ifndef SQLITE_OMIT_VIRTUALTABLE + /* Second pass to invoke the xIntegrity method on all virtual + ** tables. + */ + for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){ + Table *pTab = sqliteHashData(x); + sqlite3_vtab *pVTab; + int a1; + if( tableSkipIntegrityCheck(pTab,pObjTab) ) continue; + if( IsOrdinaryTable(pTab) ) continue; + if( !IsVirtual(pTab) ) continue; + if( pTab->nCol<=0 ){ + const char *zMod = pTab->u.vtab.azArg[0]; + if( sqlite3HashFind(&db->aModule, zMod)==0 ) continue; + } + sqlite3ViewGetColumnNames(pParse, pTab); + if( pTab->u.vtab.p==0 ) continue; + pVTab = pTab->u.vtab.p->pVtab; + if( NEVER(pVTab==0) ) continue; + if( NEVER(pVTab->pModule==0) ) continue; + if( pVTab->pModule->iVersion<4 ) continue; + if( pVTab->pModule->xIntegrity==0 ) continue; + sqlite3VdbeAddOp3(v, OP_VCheck, i, 3, isQuick); + pTab->nTabRef++; + sqlite3VdbeAppendP4(v, pTab, P4_TABLEREF); + a1 = sqlite3VdbeAddOp1(v, OP_IsNull, 3); VdbeCoverage(v); + integrityCheckResultRow(v); + sqlite3VdbeJumpHere(v, a1); + continue; + } +#endif + } + { + static const int iLn = VDBE_OFFSET_LINENO(2); + static const VdbeOpList endCode[] = { + { OP_AddImm, 1, 0, 0}, /* 0 */ + { OP_IfNotZero, 1, 4, 0}, /* 1 */ + { OP_String8, 0, 3, 0}, /* 2 */ + { OP_ResultRow, 3, 1, 0}, /* 3 */ + { OP_Halt, 0, 0, 0}, /* 4 */ + { OP_String8, 0, 3, 0}, /* 5 */ + { OP_Goto, 0, 3, 0}, /* 6 */ + }; + VdbeOp *aOp; + + aOp = sqlite3VdbeAddOpList(v, ArraySize(endCode), endCode, iLn); + if( aOp ){ + aOp[0].p2 = 1-mxErr; + aOp[2].p4type = P4_STATIC; + aOp[2].p4.z = "ok"; + aOp[5].p4type = P4_STATIC; + aOp[5].p4.z = (char*)sqlite3ErrStr(SQLITE_CORRUPT); + } + sqlite3VdbeChangeP3(v, 0, sqlite3VdbeCurrentAddr(v)-2); + } + } + break; +#endif /* SQLITE_OMIT_INTEGRITY_CHECK */ + +#ifndef SQLITE_OMIT_UTF16 + /* + ** PRAGMA encoding + ** PRAGMA encoding = "utf-8"|"utf-16"|"utf-16le"|"utf-16be" + ** + ** In its first form, this pragma returns the encoding of the main + ** database. If the database is not initialized, it is initialized now. + ** + ** The second form of this pragma is a no-op if the main database file + ** has not already been initialized. In this case it sets the default + ** encoding that will be used for the main database file if a new file + ** is created. If an existing main database file is opened, then the + ** default text encoding for the existing database is used. + ** + ** In all cases new databases created using the ATTACH command are + ** created to use the same default text encoding as the main database. If + ** the main database has not been initialized and/or created when ATTACH + ** is executed, this is done before the ATTACH operation. + ** + ** In the second form this pragma sets the text encoding to be used in + ** new database files created using this database handle. It is only + ** useful if invoked immediately after the main database i + */ + case PragTyp_ENCODING: { + static const struct EncName { + char *zName; + u8 enc; + } encnames[] = { + { "UTF8", SQLITE_UTF8 }, + { "UTF-8", SQLITE_UTF8 }, /* Must be element [1] */ + { "UTF-16le", SQLITE_UTF16LE }, /* Must be element [2] */ + { "UTF-16be", SQLITE_UTF16BE }, /* Must be element [3] */ + { "UTF16le", SQLITE_UTF16LE }, + { "UTF16be", SQLITE_UTF16BE }, + { "UTF-16", 0 }, /* SQLITE_UTF16NATIVE */ + { "UTF16", 0 }, /* SQLITE_UTF16NATIVE */ + { 0, 0 } + }; + const struct EncName *pEnc; + if( !zRight ){ /* "PRAGMA encoding" */ + if( sqlite3ReadSchema(pParse) ) goto pragma_out; + assert( encnames[SQLITE_UTF8].enc==SQLITE_UTF8 ); + assert( encnames[SQLITE_UTF16LE].enc==SQLITE_UTF16LE ); + assert( encnames[SQLITE_UTF16BE].enc==SQLITE_UTF16BE ); + returnSingleText(v, encnames[ENC(pParse->db)].zName); + }else{ /* "PRAGMA encoding = XXX" */ + /* Only change the value of sqlite.enc if the database handle is not + ** initialized. If the main database exists, the new sqlite.enc value + ** will be overwritten when the schema is next loaded. If it does not + ** already exists, it will be created to use the new encoding value. + */ + if( (db->mDbFlags & DBFLAG_EncodingFixed)==0 ){ + for(pEnc=&encnames[0]; pEnc->zName; pEnc++){ + if( 0==sqlite3StrICmp(zRight, pEnc->zName) ){ + u8 enc = pEnc->enc ? pEnc->enc : SQLITE_UTF16NATIVE; + SCHEMA_ENC(db) = enc; + sqlite3SetTextEncoding(db, enc); + break; + } + } + if( !pEnc->zName ){ + sqlite3ErrorMsg(pParse, "unsupported encoding: %s", zRight); + } + } + } + } + break; +#endif /* SQLITE_OMIT_UTF16 */ + +#ifndef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS + /* + ** PRAGMA [schema.]schema_version + ** PRAGMA [schema.]schema_version = + ** + ** PRAGMA [schema.]user_version + ** PRAGMA [schema.]user_version = + ** + ** PRAGMA [schema.]freelist_count + ** + ** PRAGMA [schema.]data_version + ** + ** PRAGMA [schema.]application_id + ** PRAGMA [schema.]application_id = + ** + ** The pragma's schema_version and user_version are used to set or get + ** the value of the schema-version and user-version, respectively. Both + ** the schema-version and the user-version are 32-bit signed integers + ** stored in the database header. + ** + ** The schema-cookie is usually only manipulated internally by SQLite. It + ** is incremented by SQLite whenever the database schema is modified (by + ** creating or dropping a table or index). The schema version is used by + ** SQLite each time a query is executed to ensure that the internal cache + ** of the schema used when compiling the SQL query matches the schema of + ** the database against which the compiled query is actually executed. + ** Subverting this mechanism by using "PRAGMA schema_version" to modify + ** the schema-version is potentially dangerous and may lead to program + ** crashes or database corruption. Use with caution! + ** + ** The user-version is not used internally by SQLite. It may be used by + ** applications for any purpose. + */ + case PragTyp_HEADER_VALUE: { + int iCookie = pPragma->iArg; /* Which cookie to read or write */ + sqlite3VdbeUsesBtree(v, iDb); + if( zRight && (pPragma->mPragFlg & PragFlg_ReadOnly)==0 ){ + /* Write the specified cookie value */ + static const VdbeOpList setCookie[] = { + { OP_Transaction, 0, 1, 0}, /* 0 */ + { OP_SetCookie, 0, 0, 0}, /* 1 */ + }; + VdbeOp *aOp; + sqlite3VdbeVerifyNoMallocRequired(v, ArraySize(setCookie)); + aOp = sqlite3VdbeAddOpList(v, ArraySize(setCookie), setCookie, 0); + if( ONLY_IF_REALLOC_STRESS(aOp==0) ) break; + aOp[0].p1 = iDb; + aOp[1].p1 = iDb; + aOp[1].p2 = iCookie; + aOp[1].p3 = sqlite3Atoi(zRight); + aOp[1].p5 = 1; + if( iCookie==BTREE_SCHEMA_VERSION && (db->flags & SQLITE_Defensive)!=0 ){ + /* Do not allow the use of PRAGMA schema_version=VALUE in defensive + ** mode. Change the OP_SetCookie opcode into a no-op. */ + aOp[1].opcode = OP_Noop; + } + }else{ + /* Read the specified cookie value */ + static const VdbeOpList readCookie[] = { + { OP_Transaction, 0, 0, 0}, /* 0 */ + { OP_ReadCookie, 0, 1, 0}, /* 1 */ + { OP_ResultRow, 1, 1, 0} + }; + VdbeOp *aOp; + sqlite3VdbeVerifyNoMallocRequired(v, ArraySize(readCookie)); + aOp = sqlite3VdbeAddOpList(v, ArraySize(readCookie),readCookie,0); + if( ONLY_IF_REALLOC_STRESS(aOp==0) ) break; + aOp[0].p1 = iDb; + aOp[1].p1 = iDb; + aOp[1].p3 = iCookie; + sqlite3VdbeReusable(v); + } + } + break; +#endif /* SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS */ + +#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS + /* + ** PRAGMA compile_options + ** + ** Return the names of all compile-time options used in this build, + ** one option per row. + */ + case PragTyp_COMPILE_OPTIONS: { + int i = 0; + const char *zOpt; + pParse->nMem = 1; + while( (zOpt = sqlite3_compileoption_get(i++))!=0 ){ + sqlite3VdbeLoadString(v, 1, zOpt); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1); + } + sqlite3VdbeReusable(v); + } + break; +#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ + +#ifndef SQLITE_OMIT_WAL + /* + ** PRAGMA [schema.]wal_checkpoint = passive|full|restart|truncate + ** + ** Checkpoint the database. + */ + case PragTyp_WAL_CHECKPOINT: { + int iBt = (pId2->z?iDb:SQLITE_MAX_DB); + int eMode = SQLITE_CHECKPOINT_PASSIVE; + if( zRight ){ + if( sqlite3StrICmp(zRight, "full")==0 ){ + eMode = SQLITE_CHECKPOINT_FULL; + }else if( sqlite3StrICmp(zRight, "restart")==0 ){ + eMode = SQLITE_CHECKPOINT_RESTART; + }else if( sqlite3StrICmp(zRight, "truncate")==0 ){ + eMode = SQLITE_CHECKPOINT_TRUNCATE; + }else if( sqlite3StrICmp(zRight, "noop")==0 ){ + eMode = SQLITE_CHECKPOINT_NOOP; + } + } + pParse->nMem = 3; + sqlite3VdbeAddOp3(v, OP_Checkpoint, iBt, eMode, 1); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3); + } + break; + + /* + ** PRAGMA wal_autocheckpoint + ** PRAGMA wal_autocheckpoint = N + ** + ** Configure a database connection to automatically checkpoint a database + ** after accumulating N frames in the log. Or query for the current value + ** of N. + */ + case PragTyp_WAL_AUTOCHECKPOINT: { + if( zRight ){ + sqlite3_wal_autocheckpoint(db, sqlite3Atoi(zRight)); + } + returnSingleInt(v, + db->xWalCallback==sqlite3WalDefaultHook ? + SQLITE_PTR_TO_INT(db->pWalArg) : 0); + } + break; +#endif + + /* + ** PRAGMA shrink_memory + ** + ** IMPLEMENTATION-OF: R-23445-46109 This pragma causes the database + ** connection on which it is invoked to free up as much memory as it + ** can, by calling sqlite3_db_release_memory(). + */ + case PragTyp_SHRINK_MEMORY: { + sqlite3_db_release_memory(db); + break; + } + + /* + ** PRAGMA optimize + ** PRAGMA optimize(MASK) + ** PRAGMA schema.optimize + ** PRAGMA schema.optimize(MASK) + ** + ** Attempt to optimize the database. All schemas are optimized in the first + ** two forms, and only the specified schema is optimized in the latter two. + ** + ** The details of optimizations performed by this pragma are expected + ** to change and improve over time. Applications should anticipate that + ** this pragma will perform new optimizations in future releases. + ** + ** The optional argument is a bitmask of optimizations to perform: + ** + ** 0x00001 Debugging mode. Do not actually perform any optimizations + ** but instead return one line of text for each optimization + ** that would have been done. Off by default. + ** + ** 0x00002 Run ANALYZE on tables that might benefit. On by default. + ** See below for additional information. + ** + ** 0x00010 Run all ANALYZE operations using an analysis_limit that + ** is the lessor of the current analysis_limit and the + ** SQLITE_DEFAULT_OPTIMIZE_LIMIT compile-time option. + ** The default value of SQLITE_DEFAULT_OPTIMIZE_LIMIT is + ** currently (2024-02-19) set to 2000, which is such that + ** the worst case run-time for PRAGMA optimize on a 100MB + ** database will usually be less than 100 milliseconds on + ** a RaspberryPI-4 class machine. On by default. + ** + ** 0x10000 Look at tables to see if they need to be reanalyzed + ** due to growth or shrinkage even if they have not been + ** queried during the current connection. Off by default. + ** + ** The default MASK is and always shall be 0x0fffe. In the current + ** implementation, the default mask only covers the 0x00002 optimization, + ** though additional optimizations that are covered by 0x0fffe might be + ** added in the future. Optimizations that are off by default and must + ** be explicitly requested have masks of 0x10000 or greater. + ** + ** DETERMINATION OF WHEN TO RUN ANALYZE + ** + ** In the current implementation, a table is analyzed if only if all of + ** the following are true: + ** + ** (1) MASK bit 0x00002 is set. + ** + ** (2) The table is an ordinary table, not a virtual table or view. + ** + ** (3) The table name does not begin with "sqlite_". + ** + ** (4) One or more of the following is true: + ** (4a) The 0x10000 MASK bit is set. + ** (4b) One or more indexes on the table lacks an entry + ** in the sqlite_stat1 table. + ** (4c) The query planner used sqlite_stat1-style statistics for one + ** or more indexes of the table at some point during the lifetime + ** of the current connection. + ** + ** (5) One or more of the following is true: + ** (5a) One or more indexes on the table lacks an entry + ** in the sqlite_stat1 table. (Same as 4a) + ** (5b) The number of rows in the table has increased or decreased by + ** 10-fold. In other words, the current size of the table is + ** 10 times larger than the size in sqlite_stat1 or else the + ** current size is less than 1/10th the size in sqlite_stat1. + ** + ** The rules for when tables are analyzed are likely to change in + ** future releases. Future versions of SQLite might accept a string + ** literal argument to this pragma that contains a mnemonic description + ** of the options rather than a bitmap. + */ + case PragTyp_OPTIMIZE: { + int iDbLast; /* Loop termination point for the schema loop */ + int iTabCur; /* Cursor for a table whose size needs checking */ + HashElem *k; /* Loop over tables of a schema */ + Schema *pSchema; /* The current schema */ + Table *pTab; /* A table in the schema */ + Index *pIdx; /* An index of the table */ + LogEst szThreshold; /* Size threshold above which reanalysis needed */ + char *zSubSql; /* SQL statement for the OP_SqlExec opcode */ + u32 opMask; /* Mask of operations to perform */ + int nLimit; /* Analysis limit to use */ + int nCheck = 0; /* Number of tables to be optimized */ + int nBtree = 0; /* Number of btrees to scan */ + int nIndex; /* Number of indexes on the current table */ + + if( zRight ){ + opMask = (u32)sqlite3Atoi(zRight); + if( (opMask & 0x02)==0 ) break; + }else{ + opMask = 0xfffe; + } + if( (opMask & 0x10)==0 ){ + nLimit = 0; + }else if( db->nAnalysisLimit>0 + && db->nAnalysisLimitnTab++; + for(iDbLast = zDb?iDb:db->nDb-1; iDb<=iDbLast; iDb++){ + if( iDb==1 ) continue; + sqlite3CodeVerifySchema(pParse, iDb); + pSchema = db->aDb[iDb].pSchema; + for(k=sqliteHashFirst(&pSchema->tblHash); k; k=sqliteHashNext(k)){ + pTab = (Table*)sqliteHashData(k); + + /* This only works for ordinary tables */ + if( !IsOrdinaryTable(pTab) ) continue; + + /* Do not scan system tables */ + if( 0==sqlite3StrNICmp(pTab->zName, "sqlite_", 7) ) continue; + + /* Find the size of the table as last recorded in sqlite_stat1. + ** If any index is unanalyzed, then the threshold is -1 to + ** indicate a new, unanalyzed index + */ + szThreshold = pTab->nRowLogEst; + nIndex = 0; + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + nIndex++; + if( !pIdx->hasStat1 ){ + szThreshold = -1; /* Always analyze if any index lacks statistics */ + } + } + + /* If table pTab has not been used in a way that would benefit from + ** having analysis statistics during the current session, then skip it, + ** unless the 0x10000 MASK bit is set. */ + if( (pTab->tabFlags & TF_MaybeReanalyze)!=0 ){ + /* Check for size change if stat1 has been used for a query */ + }else if( opMask & 0x10000 ){ + /* Check for size change if 0x10000 is set */ + }else if( pTab->pIndex!=0 && szThreshold<0 ){ + /* Do analysis if unanalyzed indexes exists */ + }else{ + /* Otherwise, we can skip this table */ + continue; + } + + nCheck++; + if( nCheck==2 ){ + /* If ANALYZE might be invoked two or more times, hold a write + ** transaction for efficiency */ + sqlite3BeginWriteOperation(pParse, 0, iDb); + } + nBtree += nIndex+1; + + /* Reanalyze if the table is 10 times larger or smaller than + ** the last analysis. Unconditional reanalysis if there are + ** unanalyzed indexes. */ + sqlite3OpenTable(pParse, iTabCur, iDb, pTab, OP_OpenRead); + if( szThreshold>=0 ){ + const LogEst iRange = 33; /* 10x size change */ + sqlite3VdbeAddOp4Int(v, OP_IfSizeBetween, iTabCur, + sqlite3VdbeCurrentAddr(v)+2+(opMask&1), + szThreshold>=iRange ? szThreshold-iRange : -1, + szThreshold+iRange); + VdbeCoverage(v); + }else{ + sqlite3VdbeAddOp2(v, OP_Rewind, iTabCur, + sqlite3VdbeCurrentAddr(v)+2+(opMask&1)); + VdbeCoverage(v); + } + zSubSql = sqlite3MPrintf(db, "ANALYZE \"%w\".\"%w\"", + db->aDb[iDb].zDbSName, pTab->zName); + if( opMask & 0x01 ){ + int r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp4(v, OP_String8, 0, r1, 0, zSubSql, P4_DYNAMIC); + sqlite3VdbeAddOp2(v, OP_ResultRow, r1, 1); + }else{ + sqlite3VdbeAddOp4(v, OP_SqlExec, nLimit ? 0x02 : 00, nLimit, 0, + zSubSql, P4_DYNAMIC); + } + } + } + sqlite3VdbeAddOp0(v, OP_Expire); + + /* In a schema with a large number of tables and indexes, scale back + ** the analysis_limit to avoid excess run-time in the worst case. + */ + if( !db->mallocFailed && nLimit>0 && nBtree>100 ){ + int iAddr, iEnd; + VdbeOp *aOp; + nLimit = 100*nLimit/nBtree; + if( nLimit<100 ) nLimit = 100; + aOp = sqlite3VdbeGetOp(v, 0); + iEnd = sqlite3VdbeCurrentAddr(v); + for(iAddr=0; iAddrePragTyp==PragTyp_BUSY_TIMEOUT ); + if( zRight ){ + sqlite3_busy_timeout(db, sqlite3Atoi(zRight)); + } + returnSingleInt(v, db->busyTimeout); + break; + } + + /* + ** PRAGMA soft_heap_limit + ** PRAGMA soft_heap_limit = N + ** + ** IMPLEMENTATION-OF: R-26343-45930 This pragma invokes the + ** sqlite3_soft_heap_limit64() interface with the argument N, if N is + ** specified and is a non-negative integer. + ** IMPLEMENTATION-OF: R-64451-07163 The soft_heap_limit pragma always + ** returns the same integer that would be returned by the + ** sqlite3_soft_heap_limit64(-1) C-language function. + */ + case PragTyp_SOFT_HEAP_LIMIT: { + sqlite3_int64 N; + if( zRight && sqlite3DecOrHexToI64(zRight, &N)==SQLITE_OK ){ + sqlite3_soft_heap_limit64(N); + } + returnSingleInt(v, sqlite3_soft_heap_limit64(-1)); + break; + } + + /* + ** PRAGMA hard_heap_limit + ** PRAGMA hard_heap_limit = N + ** + ** Invoke sqlite3_hard_heap_limit64() to query or set the hard heap + ** limit. The hard heap limit can be activated or lowered by this + ** pragma, but not raised or deactivated. Only the + ** sqlite3_hard_heap_limit64() C-language API can raise or deactivate + ** the hard heap limit. This allows an application to set a heap limit + ** constraint that cannot be relaxed by an untrusted SQL script. + */ + case PragTyp_HARD_HEAP_LIMIT: { + sqlite3_int64 N; + if( zRight && sqlite3DecOrHexToI64(zRight, &N)==SQLITE_OK ){ + sqlite3_int64 iPrior = sqlite3_hard_heap_limit64(-1); + if( N>0 && (iPrior==0 || iPrior>N) ) sqlite3_hard_heap_limit64(N); + } + returnSingleInt(v, sqlite3_hard_heap_limit64(-1)); + break; + } + + /* + ** PRAGMA threads + ** PRAGMA threads = N + ** + ** Configure the maximum number of worker threads. Return the new + ** maximum, which might be less than requested. + */ + case PragTyp_THREADS: { + sqlite3_int64 N; + if( zRight + && sqlite3DecOrHexToI64(zRight, &N)==SQLITE_OK + && N>=0 + ){ + sqlite3_limit(db, SQLITE_LIMIT_WORKER_THREADS, (int)(N&0x7fffffff)); + } + returnSingleInt(v, sqlite3_limit(db, SQLITE_LIMIT_WORKER_THREADS, -1)); + break; + } + + /* + ** PRAGMA analysis_limit + ** PRAGMA analysis_limit = N + ** + ** Configure the maximum number of rows that ANALYZE will examine + ** in each index that it looks at. Return the new limit. + */ + case PragTyp_ANALYSIS_LIMIT: { + sqlite3_int64 N; + if( zRight + && sqlite3DecOrHexToI64(zRight, &N)==SQLITE_OK /* IMP: R-40975-20399 */ + && N>=0 + ){ + db->nAnalysisLimit = (int)(N&0x7fffffff); + } + returnSingleInt(v, db->nAnalysisLimit); /* IMP: R-57594-65522 */ + break; + } + +#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) + /* + ** Report the current state of file logs for all databases + */ + case PragTyp_LOCK_STATUS: { + static const char *const azLockName[] = { + "unlocked", "shared", "reserved", "pending", "exclusive" + }; + int i; + pParse->nMem = 2; + for(i=0; inDb; i++){ + Btree *pBt; + const char *zState = "unknown"; + int j; + if( db->aDb[i].zDbSName==0 ) continue; + pBt = db->aDb[i].pBt; + if( pBt==0 || sqlite3BtreePager(pBt)==0 ){ + zState = "closed"; + }else if( sqlite3_file_control(db, i ? db->aDb[i].zDbSName : 0, + SQLITE_FCNTL_LOCKSTATE, &j)==SQLITE_OK ){ + zState = azLockName[j]; + } + sqlite3VdbeMultiLoad(v, 1, "ss", db->aDb[i].zDbSName, zState); + } + break; + } +#endif + +#if defined(SQLITE_ENABLE_CEROD) + case PragTyp_ACTIVATE_EXTENSIONS: if( zRight ){ + if( sqlite3StrNICmp(zRight, "cerod-", 6)==0 ){ + sqlite3_activate_cerod(&zRight[6]); + } + } + break; +#endif + + } /* End of the PRAGMA switch */ + + /* The following block is a no-op unless SQLITE_DEBUG is defined. Its only + ** purpose is to execute assert() statements to verify that if the + ** PragFlg_NoColumns1 flag is set and the caller specified an argument + ** to the PRAGMA, the implementation has not added any OP_ResultRow + ** instructions to the VM. */ + if( (pPragma->mPragFlg & PragFlg_NoColumns1) && zRight ){ + sqlite3VdbeVerifyNoResultRow(v); + } + +pragma_out: + sqlite3DbFree(db, zLeft); + sqlite3DbFree(db, zRight); +} +#ifndef SQLITE_OMIT_VIRTUALTABLE +/***************************************************************************** +** Implementation of an eponymous virtual table that runs a pragma. +** +*/ +typedef struct PragmaVtab PragmaVtab; +typedef struct PragmaVtabCursor PragmaVtabCursor; +struct PragmaVtab { + sqlite3_vtab base; /* Base class. Must be first */ + sqlite3 *db; /* The database connection to which it belongs */ + const PragmaName *pName; /* Name of the pragma */ + u8 nHidden; /* Number of hidden columns */ + u8 iHidden; /* Index of the first hidden column */ +}; +struct PragmaVtabCursor { + sqlite3_vtab_cursor base; /* Base class. Must be first */ + sqlite3_stmt *pPragma; /* The pragma statement to run */ + sqlite_int64 iRowid; /* Current rowid */ + char *azArg[2]; /* Value of the argument and schema */ +}; + +/* +** Pragma virtual table module xConnect method. +*/ +static int pragmaVtabConnect( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + const PragmaName *pPragma = (const PragmaName*)pAux; + PragmaVtab *pTab = 0; + int rc; + int i, j; + char cSep = '('; + StrAccum acc; + char zBuf[200]; + + UNUSED_PARAMETER(argc); + UNUSED_PARAMETER(argv); + sqlite3StrAccumInit(&acc, 0, zBuf, sizeof(zBuf), 0); + sqlite3_str_appendall(&acc, "CREATE TABLE x"); + for(i=0, j=pPragma->iPragCName; inPragCName; i++, j++){ + sqlite3_str_appendf(&acc, "%c\"%s\"", cSep, pragCName[j]); + cSep = ','; + } + if( i==0 ){ + sqlite3_str_appendf(&acc, "(\"%s\"", pPragma->zName); + i++; + } + j = 0; + if( pPragma->mPragFlg & PragFlg_Result1 ){ + sqlite3_str_appendall(&acc, ",arg HIDDEN"); + j++; + } + if( pPragma->mPragFlg & (PragFlg_SchemaOpt|PragFlg_SchemaReq) ){ + sqlite3_str_appendall(&acc, ",schema HIDDEN"); + j++; + } + sqlite3_str_append(&acc, ")", 1); + sqlite3StrAccumFinish(&acc); + assert( strlen(zBuf) < sizeof(zBuf)-1 ); + rc = sqlite3_declare_vtab(db, zBuf); + if( rc==SQLITE_OK ){ + pTab = (PragmaVtab*)sqlite3_malloc(sizeof(PragmaVtab)); + if( pTab==0 ){ + rc = SQLITE_NOMEM; + }else{ + memset(pTab, 0, sizeof(PragmaVtab)); + pTab->pName = pPragma; + pTab->db = db; + pTab->iHidden = i; + pTab->nHidden = j; + } + }else{ + *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + } + + *ppVtab = (sqlite3_vtab*)pTab; + return rc; +} + +/* +** Pragma virtual table module xDisconnect method. +*/ +static int pragmaVtabDisconnect(sqlite3_vtab *pVtab){ + PragmaVtab *pTab = (PragmaVtab*)pVtab; + sqlite3_free(pTab); + return SQLITE_OK; +} + +/* Figure out the best index to use to search a pragma virtual table. +** +** There are not really any index choices. But we want to encourage the +** query planner to give == constraints on as many hidden parameters as +** possible, and especially on the first hidden parameter. So return a +** high cost if hidden parameters are unconstrained. +*/ +static int pragmaVtabBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ + PragmaVtab *pTab = (PragmaVtab*)tab; + const struct sqlite3_index_constraint *pConstraint; + int i, j; + int seen[2]; + + pIdxInfo->estimatedCost = (double)1; + if( pTab->nHidden==0 ){ return SQLITE_OK; } + pConstraint = pIdxInfo->aConstraint; + seen[0] = 0; + seen[1] = 0; + for(i=0; inConstraint; i++, pConstraint++){ + if( pConstraint->iColumn < pTab->iHidden ) continue; + if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue; + if( pConstraint->usable==0 ) return SQLITE_CONSTRAINT; + j = pConstraint->iColumn - pTab->iHidden; + assert( j < 2 ); + seen[j] = i+1; + } + if( seen[0]==0 ){ + pIdxInfo->estimatedCost = (double)2147483647; + pIdxInfo->estimatedRows = 2147483647; + return SQLITE_OK; + } + j = seen[0]-1; + pIdxInfo->aConstraintUsage[j].argvIndex = 1; + pIdxInfo->aConstraintUsage[j].omit = 1; + pIdxInfo->estimatedCost = (double)20; + pIdxInfo->estimatedRows = 20; + if( seen[1] ){ + j = seen[1]-1; + pIdxInfo->aConstraintUsage[j].argvIndex = 2; + pIdxInfo->aConstraintUsage[j].omit = 1; + } + return SQLITE_OK; +} + +/* Create a new cursor for the pragma virtual table */ +static int pragmaVtabOpen(sqlite3_vtab *pVtab, sqlite3_vtab_cursor **ppCursor){ + PragmaVtabCursor *pCsr; + pCsr = (PragmaVtabCursor*)sqlite3_malloc(sizeof(*pCsr)); + if( pCsr==0 ) return SQLITE_NOMEM; + memset(pCsr, 0, sizeof(PragmaVtabCursor)); + pCsr->base.pVtab = pVtab; + *ppCursor = &pCsr->base; + return SQLITE_OK; +} + +/* Clear all content from pragma virtual table cursor. */ +static void pragmaVtabCursorClear(PragmaVtabCursor *pCsr){ + int i; + sqlite3_finalize(pCsr->pPragma); + pCsr->pPragma = 0; + pCsr->iRowid = 0; + for(i=0; iazArg); i++){ + sqlite3_free(pCsr->azArg[i]); + pCsr->azArg[i] = 0; + } +} + +/* Close a pragma virtual table cursor */ +static int pragmaVtabClose(sqlite3_vtab_cursor *cur){ + PragmaVtabCursor *pCsr = (PragmaVtabCursor*)cur; + pragmaVtabCursorClear(pCsr); + sqlite3_free(pCsr); + return SQLITE_OK; +} + +/* Advance the pragma virtual table cursor to the next row */ +static int pragmaVtabNext(sqlite3_vtab_cursor *pVtabCursor){ + PragmaVtabCursor *pCsr = (PragmaVtabCursor*)pVtabCursor; + int rc = SQLITE_OK; + + /* Increment the xRowid value */ + pCsr->iRowid++; + assert( pCsr->pPragma ); + if( SQLITE_ROW!=sqlite3_step(pCsr->pPragma) ){ + rc = sqlite3_finalize(pCsr->pPragma); + pCsr->pPragma = 0; + pragmaVtabCursorClear(pCsr); + } + return rc; +} + +/* +** Pragma virtual table module xFilter method. +*/ +static int pragmaVtabFilter( + sqlite3_vtab_cursor *pVtabCursor, + int idxNum, const char *idxStr, + int argc, sqlite3_value **argv +){ + PragmaVtabCursor *pCsr = (PragmaVtabCursor*)pVtabCursor; + PragmaVtab *pTab = (PragmaVtab*)(pVtabCursor->pVtab); + int rc; + int i, j; + StrAccum acc; + char *zSql; + + UNUSED_PARAMETER(idxNum); + UNUSED_PARAMETER(idxStr); + pragmaVtabCursorClear(pCsr); + j = (pTab->pName->mPragFlg & PragFlg_Result1)!=0 ? 0 : 1; + for(i=0; iazArg) ); + assert( pCsr->azArg[j]==0 ); + if( zText ){ + pCsr->azArg[j] = sqlite3_mprintf("%s", zText); + if( pCsr->azArg[j]==0 ){ + return SQLITE_NOMEM; + } + } + } + sqlite3StrAccumInit(&acc, 0, 0, 0, pTab->db->aLimit[SQLITE_LIMIT_SQL_LENGTH]); + sqlite3_str_appendall(&acc, "PRAGMA "); + if( pCsr->azArg[1] ){ + sqlite3_str_appendf(&acc, "%Q.", pCsr->azArg[1]); + } + sqlite3_str_appendall(&acc, pTab->pName->zName); + if( pCsr->azArg[0] ){ + sqlite3_str_appendf(&acc, "=%Q", pCsr->azArg[0]); + } + zSql = sqlite3StrAccumFinish(&acc); + if( zSql==0 ) return SQLITE_NOMEM; + rc = sqlite3_prepare_v2(pTab->db, zSql, -1, &pCsr->pPragma, 0); + sqlite3_free(zSql); + if( rc!=SQLITE_OK ){ + pTab->base.zErrMsg = sqlite3_mprintf("%s", sqlite3_errmsg(pTab->db)); + return rc; + } + return pragmaVtabNext(pVtabCursor); +} + +/* +** Pragma virtual table module xEof method. +*/ +static int pragmaVtabEof(sqlite3_vtab_cursor *pVtabCursor){ + PragmaVtabCursor *pCsr = (PragmaVtabCursor*)pVtabCursor; + return (pCsr->pPragma==0); +} + +/* The xColumn method simply returns the corresponding column from +** the PRAGMA. +*/ +static int pragmaVtabColumn( + sqlite3_vtab_cursor *pVtabCursor, + sqlite3_context *ctx, + int i +){ + PragmaVtabCursor *pCsr = (PragmaVtabCursor*)pVtabCursor; + PragmaVtab *pTab = (PragmaVtab*)(pVtabCursor->pVtab); + if( iiHidden ){ + sqlite3_result_value(ctx, sqlite3_column_value(pCsr->pPragma, i)); + }else{ + sqlite3_result_text(ctx, pCsr->azArg[i-pTab->iHidden],-1,SQLITE_TRANSIENT); + } + return SQLITE_OK; +} + +/* +** Pragma virtual table module xRowid method. +*/ +static int pragmaVtabRowid(sqlite3_vtab_cursor *pVtabCursor, sqlite_int64 *p){ + PragmaVtabCursor *pCsr = (PragmaVtabCursor*)pVtabCursor; + *p = pCsr->iRowid; + return SQLITE_OK; +} + +/* The pragma virtual table object */ +static const sqlite3_module pragmaVtabModule = { + 0, /* iVersion */ + 0, /* xCreate - create a table */ + pragmaVtabConnect, /* xConnect - connect to an existing table */ + pragmaVtabBestIndex, /* xBestIndex - Determine search strategy */ + pragmaVtabDisconnect, /* xDisconnect - Disconnect from a table */ + 0, /* xDestroy - Drop a table */ + pragmaVtabOpen, /* xOpen - open a cursor */ + pragmaVtabClose, /* xClose - close a cursor */ + pragmaVtabFilter, /* xFilter - configure scan constraints */ + pragmaVtabNext, /* xNext - advance a cursor */ + pragmaVtabEof, /* xEof */ + pragmaVtabColumn, /* xColumn - read data */ + pragmaVtabRowid, /* xRowid - read data */ + 0, /* xUpdate - write data */ + 0, /* xBegin - begin transaction */ + 0, /* xSync - sync transaction */ + 0, /* xCommit - commit transaction */ + 0, /* xRollback - rollback transaction */ + 0, /* xFindFunction - function overloading */ + 0, /* xRename - rename the table */ + 0, /* xSavepoint */ + 0, /* xRelease */ + 0, /* xRollbackTo */ + 0, /* xShadowName */ + 0 /* xIntegrity */ +}; + +/* +** Check to see if zTabName is really the name of a pragma. If it is, +** then register an eponymous virtual table for that pragma and return +** a pointer to the Module object for the new virtual table. +*/ +SQLITE_PRIVATE Module *sqlite3PragmaVtabRegister(sqlite3 *db, const char *zName){ + const PragmaName *pName; + assert( sqlite3_strnicmp(zName, "pragma_", 7)==0 ); + pName = pragmaLocate(zName+7); + if( pName==0 ) return 0; + if( (pName->mPragFlg & (PragFlg_Result0|PragFlg_Result1))==0 ) return 0; + assert( sqlite3HashFind(&db->aModule, zName)==0 ); + return sqlite3VtabCreateModule(db, zName, &pragmaVtabModule, (void*)pName, 0); +} + +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +#endif /* SQLITE_OMIT_PRAGMA */ + +/************** End of pragma.c **********************************************/ +/************** Begin file prepare.c *****************************************/ +/* +** 2005 May 25 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains the implementation of the sqlite3_prepare() +** interface, and routines that contribute to loading the database schema +** from disk. +*/ +/* #include "sqliteInt.h" */ + +/* +** Fill the InitData structure with an error message that indicates +** that the database is corrupt. +*/ +static void corruptSchema( + InitData *pData, /* Initialization context */ + char **azObj, /* Type and name of object being parsed */ + const char *zExtra /* Error information */ +){ + sqlite3 *db = pData->db; + if( db->mallocFailed ){ + pData->rc = SQLITE_NOMEM_BKPT; + }else if( pData->pzErrMsg[0]!=0 ){ + /* A error message has already been generated. Do not overwrite it */ + }else if( pData->mInitFlags & (INITFLAG_AlterMask) ){ + static const char *azAlterType[] = { + "rename", + "drop column", + "add column" + }; + *pData->pzErrMsg = sqlite3MPrintf(db, + "error in %s %s after %s: %s", azObj[0], azObj[1], + azAlterType[(pData->mInitFlags&INITFLAG_AlterMask)-1], + zExtra + ); + pData->rc = SQLITE_ERROR; + }else if( db->flags & SQLITE_WriteSchema ){ + pData->rc = SQLITE_CORRUPT_BKPT; + }else{ + char *z; + const char *zObj = azObj[1] ? azObj[1] : "?"; + z = sqlite3MPrintf(db, "malformed database schema (%s)", zObj); + if( zExtra && zExtra[0] ) z = sqlite3MPrintf(db, "%z - %s", z, zExtra); + *pData->pzErrMsg = z; + pData->rc = SQLITE_CORRUPT_BKPT; + } +} + +/* +** Check to see if any sibling index (another index on the same table) +** of pIndex has the same root page number, and if it does, return true. +** This would indicate a corrupt schema. +*/ +SQLITE_PRIVATE int sqlite3IndexHasDuplicateRootPage(Index *pIndex){ + Index *p; + for(p=pIndex->pTable->pIndex; p; p=p->pNext){ + if( p->tnum==pIndex->tnum && p!=pIndex ) return 1; + } + return 0; +} + +/* forward declaration */ +static int sqlite3Prepare( + sqlite3 *db, /* Database handle. */ + const char *zSql, /* UTF-8 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + u32 prepFlags, /* Zero or more SQLITE_PREPARE_* flags */ + Vdbe *pReprepare, /* VM being reprepared */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const char **pzTail /* OUT: End of parsed string */ +); + + +/* +** This is the callback routine for the code that initializes the +** database. See sqlite3Init() below for additional information. +** This routine is also called from the OP_ParseSchema opcode of the VDBE. +** +** Each callback contains the following information: +** +** argv[0] = type of object: "table", "index", "trigger", or "view". +** argv[1] = name of thing being created +** argv[2] = associated table if an index or trigger +** argv[3] = root page number for table or index. 0 for trigger or view. +** argv[4] = SQL text for the CREATE statement. +** +*/ +SQLITE_PRIVATE int sqlite3InitCallback(void *pInit, int argc, char **argv, char **NotUsed){ + InitData *pData = (InitData*)pInit; + sqlite3 *db = pData->db; + int iDb = pData->iDb; + + assert( argc==5 ); + UNUSED_PARAMETER2(NotUsed, argc); + assert( sqlite3_mutex_held(db->mutex) ); + db->mDbFlags |= DBFLAG_EncodingFixed; + if( argv==0 ) return 0; /* Might happen if EMPTY_RESULT_CALLBACKS are on */ + pData->nInitRow++; + if( db->mallocFailed ){ + corruptSchema(pData, argv, 0); + return 1; + } + + assert( iDb>=0 && iDbnDb ); + if( argv[3]==0 ){ + corruptSchema(pData, argv, 0); + }else if( argv[4] + && 'c'==sqlite3UpperToLower[(unsigned char)argv[4][0]] + && 'r'==sqlite3UpperToLower[(unsigned char)argv[4][1]] ){ + /* Call the parser to process a CREATE TABLE, INDEX or VIEW. + ** But because db->init.busy is set to 1, no VDBE code is generated + ** or executed. All the parser does is build the internal data + ** structures that describe the table, index, or view. + ** + ** No other valid SQL statement, other than the variable CREATE statements, + ** can begin with the letters "C" and "R". Thus, it is not possible run + ** any other kind of statement while parsing the schema, even a corrupt + ** schema. + */ + int rc; + u8 saved_iDb = db->init.iDb; + sqlite3_stmt *pStmt; + TESTONLY(int rcp); /* Return code from sqlite3_prepare() */ + + assert( db->init.busy ); + db->init.iDb = iDb; + if( sqlite3GetUInt32(argv[3], &db->init.newTnum)==0 + || (db->init.newTnum>pData->mxPage && pData->mxPage>0) + ){ + if( sqlite3Config.bExtraSchemaChecks ){ + corruptSchema(pData, argv, "invalid rootpage"); + } + } + db->init.orphanTrigger = 0; + db->init.azInit = (const char**)argv; + pStmt = 0; + TESTONLY(rcp = ) sqlite3Prepare(db, argv[4], -1, 0, 0, &pStmt, 0); + rc = db->errCode; + assert( (rc&0xFF)==(rcp&0xFF) ); + db->init.iDb = saved_iDb; + /* assert( saved_iDb==0 || (db->mDbFlags & DBFLAG_Vacuum)!=0 ); */ + if( SQLITE_OK!=rc ){ + if( db->init.orphanTrigger ){ + assert( iDb==1 ); + }else{ + if( rc > pData->rc ) pData->rc = rc; + if( rc==SQLITE_NOMEM ){ + sqlite3OomFault(db); + }else if( rc!=SQLITE_INTERRUPT && (rc&0xFF)!=SQLITE_LOCKED ){ + corruptSchema(pData, argv, sqlite3_errmsg(db)); + } + } + } + db->init.azInit = sqlite3StdType; /* Any array of string ptrs will do */ + sqlite3_finalize(pStmt); + }else if( argv[1]==0 || (argv[4]!=0 && argv[4][0]!=0) ){ + corruptSchema(pData, argv, 0); + }else{ + /* If the SQL column is blank it means this is an index that + ** was created to be the PRIMARY KEY or to fulfill a UNIQUE + ** constraint for a CREATE TABLE. The index should have already + ** been created when we processed the CREATE TABLE. All we have + ** to do here is record the root page number for that index. + */ + Index *pIndex; + pIndex = sqlite3FindIndex(db, argv[1], db->aDb[iDb].zDbSName); + if( pIndex==0 ){ + corruptSchema(pData, argv, "orphan index"); + }else + if( sqlite3GetUInt32(argv[3],&pIndex->tnum)==0 + || pIndex->tnum<2 + || pIndex->tnum>pData->mxPage + || sqlite3IndexHasDuplicateRootPage(pIndex) + ){ + if( sqlite3Config.bExtraSchemaChecks ){ + corruptSchema(pData, argv, "invalid rootpage"); + } + } + } + return 0; +} + +/* +** Attempt to read the database schema and initialize internal +** data structures for a single database file. The index of the +** database file is given by iDb. iDb==0 is used for the main +** database. iDb==1 should never be used. iDb>=2 is used for +** auxiliary databases. Return one of the SQLITE_ error codes to +** indicate success or failure. +*/ +SQLITE_PRIVATE int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg, u32 mFlags){ + int rc; + int i; +#ifndef SQLITE_OMIT_DEPRECATED + int size; +#endif + Db *pDb; + char const *azArg[6]; + int meta[5]; + InitData initData; + const char *zSchemaTabName; + int openedTransaction = 0; + int mask = ((db->mDbFlags & DBFLAG_EncodingFixed) | ~DBFLAG_EncodingFixed); + + assert( (db->mDbFlags & DBFLAG_SchemaKnownOk)==0 ); + assert( iDb>=0 && iDbnDb ); + assert( db->aDb[iDb].pSchema ); + assert( sqlite3_mutex_held(db->mutex) ); + assert( iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[iDb].pBt) ); + + db->init.busy = 1; + + /* Construct the in-memory representation schema tables (sqlite_schema or + ** sqlite_temp_schema) by invoking the parser directly. The appropriate + ** table name will be inserted automatically by the parser so we can just + ** use the abbreviation "x" here. The parser will also automatically tag + ** the schema table as read-only. */ + azArg[0] = "table"; + azArg[1] = zSchemaTabName = SCHEMA_TABLE(iDb); + azArg[2] = azArg[1]; + azArg[3] = "1"; + azArg[4] = "CREATE TABLE x(type text,name text,tbl_name text," + "rootpage int,sql text)"; + azArg[5] = 0; + initData.db = db; + initData.iDb = iDb; + initData.rc = SQLITE_OK; + initData.pzErrMsg = pzErrMsg; + initData.mInitFlags = mFlags; + initData.nInitRow = 0; + initData.mxPage = 0; + sqlite3InitCallback(&initData, 5, (char **)azArg, 0); + db->mDbFlags &= mask; + if( initData.rc ){ + rc = initData.rc; + goto error_out; + } + + /* Create a cursor to hold the database open + */ + pDb = &db->aDb[iDb]; + if( pDb->pBt==0 ){ + assert( iDb==1 ); + DbSetProperty(db, 1, DB_SchemaLoaded); + rc = SQLITE_OK; + goto error_out; + } + + /* If there is not already a read-only (or read-write) transaction opened + ** on the b-tree database, open one now. If a transaction is opened, it + ** will be closed before this function returns. */ + sqlite3BtreeEnter(pDb->pBt); + if( sqlite3BtreeTxnState(pDb->pBt)==SQLITE_TXN_NONE ){ + rc = sqlite3BtreeBeginTrans(pDb->pBt, 0, 0); + if( rc!=SQLITE_OK ){ + sqlite3SetString(pzErrMsg, db, sqlite3ErrStr(rc)); + goto initone_error_out; + } + openedTransaction = 1; + } + + /* Get the database meta information. + ** + ** Meta values are as follows: + ** meta[0] Schema cookie. Changes with each schema change. + ** meta[1] File format of schema layer. + ** meta[2] Size of the page cache. + ** meta[3] Largest rootpage (auto/incr_vacuum mode) + ** meta[4] Db text encoding. 1:UTF-8 2:UTF-16LE 3:UTF-16BE + ** meta[5] User version + ** meta[6] Incremental vacuum mode + ** meta[7] unused + ** meta[8] unused + ** meta[9] unused + ** + ** Note: The #defined SQLITE_UTF* symbols in sqliteInt.h correspond to + ** the possible values of meta[4]. + */ + for(i=0; ipBt, i+1, (u32 *)&meta[i]); + } + if( (db->flags & SQLITE_ResetDatabase)!=0 ){ + memset(meta, 0, sizeof(meta)); + } + pDb->pSchema->schema_cookie = meta[BTREE_SCHEMA_VERSION-1]; + + /* If opening a non-empty database, check the text encoding. For the + ** main database, set sqlite3.enc to the encoding of the main database. + ** For an attached db, it is an error if the encoding is not the same + ** as sqlite3.enc. + */ + if( meta[BTREE_TEXT_ENCODING-1] ){ /* text encoding */ + if( iDb==0 && (db->mDbFlags & DBFLAG_EncodingFixed)==0 ){ + u8 encoding; +#ifndef SQLITE_OMIT_UTF16 + /* If opening the main database, set ENC(db). */ + encoding = (u8)meta[BTREE_TEXT_ENCODING-1] & 3; + if( encoding==0 ) encoding = SQLITE_UTF8; +#else + encoding = SQLITE_UTF8; +#endif + sqlite3SetTextEncoding(db, encoding); + }else{ + /* If opening an attached database, the encoding much match ENC(db) */ + if( (meta[BTREE_TEXT_ENCODING-1] & 3)!=ENC(db) ){ + sqlite3SetString(pzErrMsg, db, "attached databases must use the same" + " text encoding as main database"); + rc = SQLITE_ERROR; + goto initone_error_out; + } + } + } + pDb->pSchema->enc = ENC(db); + + if( pDb->pSchema->cache_size==0 ){ +#ifndef SQLITE_OMIT_DEPRECATED + size = sqlite3AbsInt32(meta[BTREE_DEFAULT_CACHE_SIZE-1]); + if( size==0 ){ size = SQLITE_DEFAULT_CACHE_SIZE; } + pDb->pSchema->cache_size = size; +#else + pDb->pSchema->cache_size = SQLITE_DEFAULT_CACHE_SIZE; +#endif + sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size); + } + + /* + ** file_format==1 Version 3.0.0. + ** file_format==2 Version 3.1.3. // ALTER TABLE ADD COLUMN + ** file_format==3 Version 3.1.4. // ditto but with non-NULL defaults + ** file_format==4 Version 3.3.0. // DESC indices. Boolean constants + */ + pDb->pSchema->file_format = (u8)meta[BTREE_FILE_FORMAT-1]; + if( pDb->pSchema->file_format==0 ){ + pDb->pSchema->file_format = 1; + } + if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){ + sqlite3SetString(pzErrMsg, db, "unsupported file format"); + rc = SQLITE_ERROR; + goto initone_error_out; + } + + /* Ticket #2804: When we open a database in the newer file format, + ** clear the legacy_file_format pragma flag so that a VACUUM will + ** not downgrade the database and thus invalidate any descending + ** indices that the user might have created. + */ + if( iDb==0 && meta[BTREE_FILE_FORMAT-1]>=4 ){ + db->flags &= ~(u64)SQLITE_LegacyFileFmt; + } + + /* Read the schema information out of the schema tables + */ + assert( db->init.busy ); + initData.mxPage = sqlite3BtreeLastPage(pDb->pBt); + { + char *zSql; + zSql = sqlite3MPrintf(db, + "SELECT*FROM\"%w\".%s ORDER BY rowid", + db->aDb[iDb].zDbSName, zSchemaTabName); +#ifndef SQLITE_OMIT_AUTHORIZATION + { + sqlite3_xauth xAuth; + xAuth = db->xAuth; + db->xAuth = 0; +#endif + rc = sqlite3_exec(db, zSql, sqlite3InitCallback, &initData, 0); +#ifndef SQLITE_OMIT_AUTHORIZATION + db->xAuth = xAuth; + } +#endif + if( rc==SQLITE_OK ) rc = initData.rc; + sqlite3DbFree(db, zSql); +#ifndef SQLITE_OMIT_ANALYZE + if( rc==SQLITE_OK ){ + sqlite3AnalysisLoad(db, iDb); + } +#endif + } + assert( pDb == &(db->aDb[iDb]) ); + if( db->mallocFailed ){ + rc = SQLITE_NOMEM_BKPT; + sqlite3ResetAllSchemasOfConnection(db); + pDb = &db->aDb[iDb]; + }else + if( rc==SQLITE_OK || ((db->flags&SQLITE_NoSchemaError) && rc!=SQLITE_NOMEM)){ + /* Hack: If the SQLITE_NoSchemaError flag is set, then consider + ** the schema loaded, even if errors (other than OOM) occurred. In + ** this situation the current sqlite3_prepare() operation will fail, + ** but the following one will attempt to compile the supplied statement + ** against whatever subset of the schema was loaded before the error + ** occurred. + ** + ** The primary purpose of this is to allow access to the sqlite_schema + ** table even when its contents have been corrupted. + */ + DbSetProperty(db, iDb, DB_SchemaLoaded); + rc = SQLITE_OK; + } + + /* Jump here for an error that occurs after successfully allocating + ** curMain and calling sqlite3BtreeEnter(). For an error that occurs + ** before that point, jump to error_out. + */ +initone_error_out: + if( openedTransaction ){ + sqlite3BtreeCommit(pDb->pBt); + } + sqlite3BtreeLeave(pDb->pBt); + +error_out: + if( rc ){ + if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){ + sqlite3OomFault(db); + } + sqlite3ResetOneSchema(db, iDb); + } + db->init.busy = 0; + return rc; +} + +/* +** Initialize all database files - the main database file, the file +** used to store temporary tables, and any additional database files +** created using ATTACH statements. Return a success code. If an +** error occurs, write an error message into *pzErrMsg. +** +** After a database is initialized, the DB_SchemaLoaded bit is set +** bit is set in the flags field of the Db structure. +*/ +SQLITE_PRIVATE int sqlite3Init(sqlite3 *db, char **pzErrMsg){ + int i, rc; + int commit_internal = !(db->mDbFlags&DBFLAG_SchemaChange); + + assert( sqlite3_mutex_held(db->mutex) ); + assert( sqlite3BtreeHoldsMutex(db->aDb[0].pBt) ); + assert( db->init.busy==0 ); + ENC(db) = SCHEMA_ENC(db); + assert( db->nDb>0 ); + /* Do the main schema first */ + if( !DbHasProperty(db, 0, DB_SchemaLoaded) ){ + rc = sqlite3InitOne(db, 0, pzErrMsg, 0); + if( rc ) return rc; + } + /* All other schemas after the main schema. The "temp" schema must be last */ + for(i=db->nDb-1; i>0; i--){ + assert( i==1 || sqlite3BtreeHoldsMutex(db->aDb[i].pBt) ); + if( !DbHasProperty(db, i, DB_SchemaLoaded) ){ + rc = sqlite3InitOne(db, i, pzErrMsg, 0); + if( rc ) return rc; + } + } + if( commit_internal ){ + sqlite3CommitInternalChanges(db); + } + return SQLITE_OK; +} + +/* +** This routine is a no-op if the database schema is already initialized. +** Otherwise, the schema is loaded. An error code is returned. +*/ +SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse){ + int rc = SQLITE_OK; + sqlite3 *db = pParse->db; + assert( sqlite3_mutex_held(db->mutex) ); + if( !db->init.busy ){ + rc = sqlite3Init(db, &pParse->zErrMsg); + if( rc!=SQLITE_OK ){ + pParse->rc = rc; + pParse->nErr++; + }else if( db->noSharedCache ){ + db->mDbFlags |= DBFLAG_SchemaKnownOk; + } + } + return rc; +} + + +/* +** Check schema cookies in all databases. If any cookie is out +** of date set pParse->rc to SQLITE_SCHEMA. If all schema cookies +** make no changes to pParse->rc. +*/ +static void schemaIsValid(Parse *pParse){ + sqlite3 *db = pParse->db; + int iDb; + int rc; + int cookie; + + assert( pParse->checkSchema ); + assert( sqlite3_mutex_held(db->mutex) ); + for(iDb=0; iDbnDb; iDb++){ + int openedTransaction = 0; /* True if a transaction is opened */ + Btree *pBt = db->aDb[iDb].pBt; /* Btree database to read cookie from */ + if( pBt==0 ) continue; + + /* If there is not already a read-only (or read-write) transaction opened + ** on the b-tree database, open one now. If a transaction is opened, it + ** will be closed immediately after reading the meta-value. */ + if( sqlite3BtreeTxnState(pBt)==SQLITE_TXN_NONE ){ + rc = sqlite3BtreeBeginTrans(pBt, 0, 0); + if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){ + sqlite3OomFault(db); + pParse->rc = SQLITE_NOMEM; + } + if( rc!=SQLITE_OK ) return; + openedTransaction = 1; + } + + /* Read the schema cookie from the database. If it does not match the + ** value stored as part of the in-memory schema representation, + ** set Parse.rc to SQLITE_SCHEMA. */ + sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&cookie); + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + if( cookie!=db->aDb[iDb].pSchema->schema_cookie ){ + if( DbHasProperty(db, iDb, DB_SchemaLoaded) ) pParse->rc = SQLITE_SCHEMA; + sqlite3ResetOneSchema(db, iDb); + } + + /* Close the transaction, if one was opened. */ + if( openedTransaction ){ + sqlite3BtreeCommit(pBt); + } + } +} + +/* +** Convert a schema pointer into the iDb index that indicates +** which database file in db->aDb[] the schema refers to. +** +** If the same database is attached more than once, the first +** attached database is returned. +*/ +SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *pSchema){ + int i = -32768; + + /* If pSchema is NULL, then return -32768. This happens when code in + ** expr.c is trying to resolve a reference to a transient table (i.e. one + ** created by a sub-select). In this case the return value of this + ** function should never be used. + ** + ** We return -32768 instead of the more usual -1 simply because using + ** -32768 as the incorrect index into db->aDb[] is much + ** more likely to cause a segfault than -1 (of course there are assert() + ** statements too, but it never hurts to play the odds) and + ** -32768 will still fit into a 16-bit signed integer. + */ + assert( sqlite3_mutex_held(db->mutex) ); + if( pSchema ){ + for(i=0; 1; i++){ + assert( inDb ); + if( db->aDb[i].pSchema==pSchema ){ + break; + } + } + assert( i>=0 && inDb ); + } + return i; +} + +/* +** Free all memory allocations in the pParse object +*/ +SQLITE_PRIVATE void sqlite3ParseObjectReset(Parse *pParse){ + sqlite3 *db = pParse->db; + assert( db!=0 ); + assert( db->pParse==pParse ); + assert( pParse->nested==0 ); +#ifndef SQLITE_OMIT_SHARED_CACHE + if( pParse->aTableLock ) sqlite3DbNNFreeNN(db, pParse->aTableLock); +#endif + while( pParse->pCleanup ){ + ParseCleanup *pCleanup = pParse->pCleanup; + pParse->pCleanup = pCleanup->pNext; + pCleanup->xCleanup(db, pCleanup->pPtr); + sqlite3DbNNFreeNN(db, pCleanup); + } + if( pParse->aLabel ) sqlite3DbNNFreeNN(db, pParse->aLabel); + if( pParse->pConstExpr ){ + sqlite3ExprListDelete(db, pParse->pConstExpr); + } + assert( db->lookaside.bDisable >= pParse->disableLookaside ); + db->lookaside.bDisable -= pParse->disableLookaside; + db->lookaside.sz = db->lookaside.bDisable ? 0 : db->lookaside.szTrue; + assert( pParse->db->pParse==pParse ); + db->pParse = pParse->pOuterParse; +} + +/* +** Add a new cleanup operation to a Parser. The cleanup should happen when +** the parser object is destroyed. But, beware: the cleanup might happen +** immediately. +** +** Use this mechanism for uncommon cleanups. There is a higher setup +** cost for this mechanism (an extra malloc), so it should not be used +** for common cleanups that happen on most calls. But for less +** common cleanups, we save a single NULL-pointer comparison in +** sqlite3ParseObjectReset(), which reduces the total CPU cycle count. +** +** If a memory allocation error occurs, then the cleanup happens immediately. +** When either SQLITE_DEBUG or SQLITE_COVERAGE_TEST are defined, the +** pParse->earlyCleanup flag is set in that case. Calling code show verify +** that test cases exist for which this happens, to guard against possible +** use-after-free errors following an OOM. The preferred way to do this is +** to immediately follow the call to this routine with: +** +** testcase( pParse->earlyCleanup ); +** +** This routine returns a copy of its pPtr input (the third parameter) +** except if an early cleanup occurs, in which case it returns NULL. So +** another way to check for early cleanup is to check the return value. +** Or, stop using the pPtr parameter with this call and use only its +** return value thereafter. Something like this: +** +** pObj = sqlite3ParserAddCleanup(pParse, destructor, pObj); +*/ +SQLITE_PRIVATE void *sqlite3ParserAddCleanup( + Parse *pParse, /* Destroy when this Parser finishes */ + void (*xCleanup)(sqlite3*,void*), /* The cleanup routine */ + void *pPtr /* Pointer to object to be cleaned up */ +){ + ParseCleanup *pCleanup; + if( sqlite3FaultSim(300) ){ + pCleanup = 0; + sqlite3OomFault(pParse->db); + }else{ + pCleanup = sqlite3DbMallocRaw(pParse->db, sizeof(*pCleanup)); + } + if( pCleanup ){ + pCleanup->pNext = pParse->pCleanup; + pParse->pCleanup = pCleanup; + pCleanup->pPtr = pPtr; + pCleanup->xCleanup = xCleanup; + }else{ + xCleanup(pParse->db, pPtr); + pPtr = 0; +#if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST) + pParse->earlyCleanup = 1; +#endif + } + return pPtr; +} + +/* +** Turn bulk memory into a valid Parse object and link that Parse object +** into database connection db. +** +** Call sqlite3ParseObjectReset() to undo this operation. +** +** Caution: Do not confuse this routine with sqlite3ParseObjectInit() which +** is generated by Lemon. +*/ +SQLITE_PRIVATE void sqlite3ParseObjectInit(Parse *pParse, sqlite3 *db){ + memset(PARSE_HDR(pParse), 0, PARSE_HDR_SZ); + memset(PARSE_TAIL(pParse), 0, PARSE_TAIL_SZ); + assert( db->pParse!=pParse ); + pParse->pOuterParse = db->pParse; + db->pParse = pParse; + pParse->db = db; + if( db->mallocFailed ) sqlite3ErrorMsg(pParse, "out of memory"); +} + +/* +** Maximum number of times that we will try again to prepare a statement +** that returns SQLITE_ERROR_RETRY. +*/ +#ifndef SQLITE_MAX_PREPARE_RETRY +# define SQLITE_MAX_PREPARE_RETRY 25 +#endif + +/* +** Compile the UTF-8 encoded SQL statement zSql into a statement handle. +*/ +static int sqlite3Prepare( + sqlite3 *db, /* Database handle. */ + const char *zSql, /* UTF-8 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + u32 prepFlags, /* Zero or more SQLITE_PREPARE_* flags */ + Vdbe *pReprepare, /* VM being reprepared */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const char **pzTail /* OUT: End of parsed string */ +){ + int rc = SQLITE_OK; /* Result code */ + int i; /* Loop counter */ + Parse sParse; /* Parsing context */ + + /* sqlite3ParseObjectInit(&sParse, db); // inlined for performance */ + memset(PARSE_HDR(&sParse), 0, PARSE_HDR_SZ); + memset(PARSE_TAIL(&sParse), 0, PARSE_TAIL_SZ); + sParse.pOuterParse = db->pParse; + db->pParse = &sParse; + sParse.db = db; + if( pReprepare ){ + sParse.pReprepare = pReprepare; + sParse.explain = sqlite3_stmt_isexplain((sqlite3_stmt*)pReprepare); + }else{ + assert( sParse.pReprepare==0 ); + } + assert( ppStmt && *ppStmt==0 ); + if( db->mallocFailed ){ + sqlite3ErrorMsg(&sParse, "out of memory"); + db->errCode = rc = SQLITE_NOMEM; + goto end_prepare; + } + assert( sqlite3_mutex_held(db->mutex) ); + + /* For a long-term use prepared statement avoid the use of + ** lookaside memory. + */ + if( prepFlags & SQLITE_PREPARE_PERSISTENT ){ + sParse.disableLookaside++; + DisableLookaside; + } + sParse.prepFlags = prepFlags & 0xff; + + /* Check to verify that it is possible to get a read lock on all + ** database schemas. The inability to get a read lock indicates that + ** some other database connection is holding a write-lock, which in + ** turn means that the other connection has made uncommitted changes + ** to the schema. + ** + ** Were we to proceed and prepare the statement against the uncommitted + ** schema changes and if those schema changes are subsequently rolled + ** back and different changes are made in their place, then when this + ** prepared statement goes to run the schema cookie would fail to detect + ** the schema change. Disaster would follow. + ** + ** This thread is currently holding mutexes on all Btrees (because + ** of the sqlite3BtreeEnterAll() in sqlite3LockAndPrepare()) so it + ** is not possible for another thread to start a new schema change + ** while this routine is running. Hence, we do not need to hold + ** locks on the schema, we just need to make sure nobody else is + ** holding them. + ** + ** Note that setting READ_UNCOMMITTED overrides most lock detection, + ** but it does *not* override schema lock detection, so this all still + ** works even if READ_UNCOMMITTED is set. + */ + if( !db->noSharedCache ){ + for(i=0; inDb; i++) { + Btree *pBt = db->aDb[i].pBt; + if( pBt ){ + assert( sqlite3BtreeHoldsMutex(pBt) ); + rc = sqlite3BtreeSchemaLocked(pBt); + if( rc ){ + const char *zDb = db->aDb[i].zDbSName; + sqlite3ErrorWithMsg(db, rc, "database schema is locked: %s", zDb); + testcase( db->flags & SQLITE_ReadUncommit ); + goto end_prepare; + } + } + } + } + +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( db->pDisconnect ) sqlite3VtabUnlockList(db); +#endif + + if( nBytes>=0 && (nBytes==0 || zSql[nBytes-1]!=0) ){ + char *zSqlCopy; + int mxLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH]; + testcase( nBytes==mxLen ); + testcase( nBytes==mxLen+1 ); + if( nBytes>mxLen ){ + sqlite3ErrorWithMsg(db, SQLITE_TOOBIG, "statement too long"); + rc = sqlite3ApiExit(db, SQLITE_TOOBIG); + goto end_prepare; + } + zSqlCopy = sqlite3DbStrNDup(db, zSql, nBytes); + if( zSqlCopy ){ + sqlite3RunParser(&sParse, zSqlCopy); + sParse.zTail = &zSql[sParse.zTail-zSqlCopy]; + sqlite3DbFree(db, zSqlCopy); + }else{ + sParse.zTail = &zSql[nBytes]; + } + }else{ + sqlite3RunParser(&sParse, zSql); + } + assert( 0==sParse.nQueryLoop ); + + if( pzTail ){ + *pzTail = sParse.zTail; + } + + if( db->init.busy==0 ){ + sqlite3VdbeSetSql(sParse.pVdbe, zSql, (int)(sParse.zTail-zSql), prepFlags); + } + if( db->mallocFailed ){ + sParse.rc = SQLITE_NOMEM_BKPT; + sParse.checkSchema = 0; + } + if( sParse.rc!=SQLITE_OK && sParse.rc!=SQLITE_DONE ){ + if( sParse.checkSchema && db->init.busy==0 ){ + schemaIsValid(&sParse); + } + if( sParse.pVdbe ){ + sqlite3VdbeFinalize(sParse.pVdbe); + } + assert( 0==(*ppStmt) ); + rc = sParse.rc; + if( sParse.zErrMsg ){ + sqlite3ErrorWithMsg(db, rc, "%s", sParse.zErrMsg); + sqlite3DbFree(db, sParse.zErrMsg); + }else{ + sqlite3Error(db, rc); + } + }else{ + assert( sParse.zErrMsg==0 ); + *ppStmt = (sqlite3_stmt*)sParse.pVdbe; + rc = SQLITE_OK; + sqlite3ErrorClear(db); + } + + + /* Delete any TriggerPrg structures allocated while parsing this statement. */ + while( sParse.pTriggerPrg ){ + TriggerPrg *pT = sParse.pTriggerPrg; + sParse.pTriggerPrg = pT->pNext; + sqlite3DbFree(db, pT); + } + +end_prepare: + + sqlite3ParseObjectReset(&sParse); + return rc; +} +static int sqlite3LockAndPrepare( + sqlite3 *db, /* Database handle. */ + const char *zSql, /* UTF-8 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + u32 prepFlags, /* Zero or more SQLITE_PREPARE_* flags */ + Vdbe *pOld, /* VM being reprepared */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const char **pzTail /* OUT: End of parsed string */ +){ + int rc; + int cnt = 0; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( ppStmt==0 ) return SQLITE_MISUSE_BKPT; +#endif + *ppStmt = 0; + if( !sqlite3SafetyCheckOk(db)||zSql==0 ){ + return SQLITE_MISUSE_BKPT; + } + sqlite3_mutex_enter(db->mutex); + sqlite3BtreeEnterAll(db); + do{ + /* Make multiple attempts to compile the SQL, until it either succeeds + ** or encounters a permanent error. A schema problem after one schema + ** reset is considered a permanent error. */ + rc = sqlite3Prepare(db, zSql, nBytes, prepFlags, pOld, ppStmt, pzTail); + assert( rc==SQLITE_OK || *ppStmt==0 ); + if( rc==SQLITE_OK || db->mallocFailed ) break; + cnt++; + }while( (rc==SQLITE_ERROR_RETRY && ALWAYS(cnt<=SQLITE_MAX_PREPARE_RETRY)) + || (rc==SQLITE_SCHEMA && (sqlite3ResetOneSchema(db,-1), cnt)==1) ); + sqlite3BtreeLeaveAll(db); + assert( rc!=SQLITE_ERROR_RETRY ); + rc = sqlite3ApiExit(db, rc); + assert( (rc&db->errMask)==rc ); + db->busyHandler.nBusy = 0; + sqlite3_mutex_leave(db->mutex); + assert( rc==SQLITE_OK || (*ppStmt)==0 ); + return rc; +} + + +/* +** Rerun the compilation of a statement after a schema change. +** +** If the statement is successfully recompiled, return SQLITE_OK. Otherwise, +** if the statement cannot be recompiled because another connection has +** locked the sqlite3_schema table, return SQLITE_LOCKED. If any other error +** occurs, return SQLITE_SCHEMA. +*/ +SQLITE_PRIVATE int sqlite3Reprepare(Vdbe *p){ + int rc; + sqlite3_stmt *pNew; + const char *zSql; + sqlite3 *db; + u8 prepFlags; + + assert( sqlite3_mutex_held(sqlite3VdbeDb(p)->mutex) ); + zSql = sqlite3_sql((sqlite3_stmt *)p); + assert( zSql!=0 ); /* Reprepare only called for prepare_v2() statements */ + db = sqlite3VdbeDb(p); + assert( sqlite3_mutex_held(db->mutex) ); + prepFlags = sqlite3VdbePrepareFlags(p); + rc = sqlite3LockAndPrepare(db, zSql, -1, prepFlags, p, &pNew, 0); + if( rc ){ + if( rc==SQLITE_NOMEM ){ + sqlite3OomFault(db); + } + assert( pNew==0 ); + return rc; + }else{ + assert( pNew!=0 ); + } + sqlite3VdbeSwap((Vdbe*)pNew, p); + sqlite3TransferBindings(pNew, (sqlite3_stmt*)p); + sqlite3VdbeResetStepResult((Vdbe*)pNew); + sqlite3VdbeFinalize((Vdbe*)pNew); + return SQLITE_OK; +} + + +/* +** Two versions of the official API. Legacy and new use. In the legacy +** version, the original SQL text is not saved in the prepared statement +** and so if a schema change occurs, SQLITE_SCHEMA is returned by +** sqlite3_step(). In the new version, the original SQL text is retained +** and the statement is automatically recompiled if an schema change +** occurs. +*/ +SQLITE_API int sqlite3_prepare( + sqlite3 *db, /* Database handle. */ + const char *zSql, /* UTF-8 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const char **pzTail /* OUT: End of parsed string */ +){ + int rc; + rc = sqlite3LockAndPrepare(db,zSql,nBytes,0,0,ppStmt,pzTail); + assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */ + return rc; +} +SQLITE_API int sqlite3_prepare_v2( + sqlite3 *db, /* Database handle. */ + const char *zSql, /* UTF-8 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const char **pzTail /* OUT: End of parsed string */ +){ + int rc; + /* EVIDENCE-OF: R-37923-12173 The sqlite3_prepare_v2() interface works + ** exactly the same as sqlite3_prepare_v3() with a zero prepFlags + ** parameter. + ** + ** Proof in that the 5th parameter to sqlite3LockAndPrepare is 0 */ + rc = sqlite3LockAndPrepare(db,zSql,nBytes,SQLITE_PREPARE_SAVESQL,0, + ppStmt,pzTail); + assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); + return rc; +} +SQLITE_API int sqlite3_prepare_v3( + sqlite3 *db, /* Database handle. */ + const char *zSql, /* UTF-8 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_* flags */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const char **pzTail /* OUT: End of parsed string */ +){ + int rc; + /* EVIDENCE-OF: R-56861-42673 sqlite3_prepare_v3() differs from + ** sqlite3_prepare_v2() only in having the extra prepFlags parameter, + ** which is a bit array consisting of zero or more of the + ** SQLITE_PREPARE_* flags. + ** + ** Proof by comparison to the implementation of sqlite3_prepare_v2() + ** directly above. */ + rc = sqlite3LockAndPrepare(db,zSql,nBytes, + SQLITE_PREPARE_SAVESQL|(prepFlags&SQLITE_PREPARE_MASK), + 0,ppStmt,pzTail); + assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); + return rc; +} + + +#ifndef SQLITE_OMIT_UTF16 +/* +** Compile the UTF-16 encoded SQL statement zSql into a statement handle. +*/ +static int sqlite3Prepare16( + sqlite3 *db, /* Database handle. */ + const void *zSql, /* UTF-16 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + u32 prepFlags, /* Zero or more SQLITE_PREPARE_* flags */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const void **pzTail /* OUT: End of parsed string */ +){ + /* This function currently works by first transforming the UTF-16 + ** encoded string to UTF-8, then invoking sqlite3_prepare(). The + ** tricky bit is figuring out the pointer to return in *pzTail. + */ + char *zSql8; + const char *zTail8 = 0; + int rc = SQLITE_OK; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( ppStmt==0 ) return SQLITE_MISUSE_BKPT; +#endif + *ppStmt = 0; + if( !sqlite3SafetyCheckOk(db)||zSql==0 ){ + return SQLITE_MISUSE_BKPT; + } + + /* Make sure nBytes is non-negative and correct. It should be the + ** number of bytes until the end of the input buffer or until the first + ** U+0000 character. If the input nBytes is odd, convert it into + ** an even number. If the input nBytes is negative, then the input + ** must be terminated by at least one U+0000 character */ + if( nBytes>=0 ){ + int sz; + const char *z = (const char*)zSql; + for(sz=0; szmutex); + zSql8 = sqlite3Utf16to8(db, zSql, nBytes, SQLITE_UTF16NATIVE); + if( zSql8 ){ + rc = sqlite3LockAndPrepare(db, zSql8, -1, prepFlags, 0, ppStmt, &zTail8); + } + + if( zTail8 && pzTail ){ + /* If sqlite3_prepare returns a tail pointer, we calculate the + ** equivalent pointer into the UTF-16 string by counting the unicode + ** characters between zSql8 and zTail8, and then returning a pointer + ** the same number of characters into the UTF-16 string. + */ + int chars_parsed = sqlite3Utf8CharLen(zSql8, (int)(zTail8-zSql8)); + *pzTail = (u8 *)zSql + sqlite3Utf16ByteLen(zSql, nBytes, chars_parsed); + } + sqlite3DbFree(db, zSql8); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/* +** Two versions of the official API. Legacy and new use. In the legacy +** version, the original SQL text is not saved in the prepared statement +** and so if a schema change occurs, SQLITE_SCHEMA is returned by +** sqlite3_step(). In the new version, the original SQL text is retained +** and the statement is automatically recompiled if an schema change +** occurs. +*/ +SQLITE_API int sqlite3_prepare16( + sqlite3 *db, /* Database handle. */ + const void *zSql, /* UTF-16 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const void **pzTail /* OUT: End of parsed string */ +){ + int rc; + rc = sqlite3Prepare16(db,zSql,nBytes,0,ppStmt,pzTail); + assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */ + return rc; +} +SQLITE_API int sqlite3_prepare16_v2( + sqlite3 *db, /* Database handle. */ + const void *zSql, /* UTF-16 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const void **pzTail /* OUT: End of parsed string */ +){ + int rc; + rc = sqlite3Prepare16(db,zSql,nBytes,SQLITE_PREPARE_SAVESQL,ppStmt,pzTail); + assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */ + return rc; +} +SQLITE_API int sqlite3_prepare16_v3( + sqlite3 *db, /* Database handle. */ + const void *zSql, /* UTF-16 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_* flags */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const void **pzTail /* OUT: End of parsed string */ +){ + int rc; + rc = sqlite3Prepare16(db,zSql,nBytes, + SQLITE_PREPARE_SAVESQL|(prepFlags&SQLITE_PREPARE_MASK), + ppStmt,pzTail); + assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */ + return rc; +} + +#endif /* SQLITE_OMIT_UTF16 */ + +/************** End of prepare.c *********************************************/ +/************** Begin file select.c ******************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains C code routines that are called by the parser +** to handle SELECT statements in SQLite. +*/ +/* #include "sqliteInt.h" */ + +/* +** An instance of the following object is used to record information about +** how to process the DISTINCT keyword, to simplify passing that information +** into the selectInnerLoop() routine. +*/ +typedef struct DistinctCtx DistinctCtx; +struct DistinctCtx { + u8 isTnct; /* 0: Not distinct. 1: DISTICT 2: DISTINCT and ORDER BY */ + u8 eTnctType; /* One of the WHERE_DISTINCT_* operators */ + int tabTnct; /* Ephemeral table used for DISTINCT processing */ + int addrTnct; /* Address of OP_OpenEphemeral opcode for tabTnct */ +}; + +/* +** An instance of the following object is used to record information about +** the ORDER BY (or GROUP BY) clause of query is being coded. +** +** The aDefer[] array is used by the sorter-references optimization. For +** example, assuming there is no index that can be used for the ORDER BY, +** for the query: +** +** SELECT a, bigblob FROM t1 ORDER BY a LIMIT 10; +** +** it may be more efficient to add just the "a" values to the sorter, and +** retrieve the associated "bigblob" values directly from table t1 as the +** 10 smallest "a" values are extracted from the sorter. +** +** When the sorter-reference optimization is used, there is one entry in the +** aDefer[] array for each database table that may be read as values are +** extracted from the sorter. +*/ +typedef struct SortCtx SortCtx; +struct SortCtx { + ExprList *pOrderBy; /* The ORDER BY (or GROUP BY clause) */ + int nOBSat; /* Number of ORDER BY terms satisfied by indices */ + int iECursor; /* Cursor number for the sorter */ + int regReturn; /* Register holding block-output return address */ + int labelBkOut; /* Start label for the block-output subroutine */ + int addrSortIndex; /* Address of the OP_SorterOpen or OP_OpenEphemeral */ + int labelDone; /* Jump here when done, ex: LIMIT reached */ + int labelOBLopt; /* Jump here when sorter is full */ + u8 sortFlags; /* Zero or more SORTFLAG_* bits */ +#ifdef SQLITE_ENABLE_SORTER_REFERENCES + u8 nDefer; /* Number of valid entries in aDefer[] */ + struct DeferredCsr { + Table *pTab; /* Table definition */ + int iCsr; /* Cursor number for table */ + int nKey; /* Number of PK columns for table pTab (>=1) */ + } aDefer[4]; +#endif + struct RowLoadInfo *pDeferredRowLoad; /* Deferred row loading info or NULL */ +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + int addrPush; /* First instruction to push data into sorter */ + int addrPushEnd; /* Last instruction that pushes data into sorter */ +#endif +}; +#define SORTFLAG_UseSorter 0x01 /* Use SorterOpen instead of OpenEphemeral */ + +/* +** Delete all the content of a Select structure. Deallocate the structure +** itself depending on the value of bFree +** +** If bFree==1, call sqlite3DbFree() on the p object. +** If bFree==0, Leave the first Select object unfreed +*/ +static void clearSelect(sqlite3 *db, Select *p, int bFree){ + assert( db!=0 ); + while( p ){ + Select *pPrior = p->pPrior; + sqlite3ExprListDelete(db, p->pEList); + sqlite3SrcListDelete(db, p->pSrc); + sqlite3ExprDelete(db, p->pWhere); + sqlite3ExprListDelete(db, p->pGroupBy); + sqlite3ExprDelete(db, p->pHaving); + sqlite3ExprListDelete(db, p->pOrderBy); + sqlite3ExprDelete(db, p->pLimit); + if( OK_IF_ALWAYS_TRUE(p->pWith) ) sqlite3WithDelete(db, p->pWith); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( OK_IF_ALWAYS_TRUE(p->pWinDefn) ){ + sqlite3WindowListDelete(db, p->pWinDefn); + } + while( p->pWin ){ + assert( p->pWin->ppThis==&p->pWin ); + sqlite3WindowUnlinkFromSelect(p->pWin); + } +#endif + if( bFree ) sqlite3DbNNFreeNN(db, p); + p = pPrior; + bFree = 1; + } +} + +/* +** Initialize a SelectDest structure. +*/ +SQLITE_PRIVATE void sqlite3SelectDestInit(SelectDest *pDest, int eDest, int iParm){ + pDest->eDest = (u8)eDest; + pDest->iSDParm = iParm; + pDest->iSDParm2 = 0; + pDest->zAffSdst = 0; + pDest->iSdst = 0; + pDest->nSdst = 0; +} + + +/* +** Allocate a new Select structure and return a pointer to that +** structure. +*/ +SQLITE_PRIVATE Select *sqlite3SelectNew( + Parse *pParse, /* Parsing context */ + ExprList *pEList, /* which columns to include in the result */ + SrcList *pSrc, /* the FROM clause -- which tables to scan */ + Expr *pWhere, /* the WHERE clause */ + ExprList *pGroupBy, /* the GROUP BY clause */ + Expr *pHaving, /* the HAVING clause */ + ExprList *pOrderBy, /* the ORDER BY clause */ + u32 selFlags, /* Flag parameters, such as SF_Distinct */ + Expr *pLimit /* LIMIT value. NULL means not used */ +){ + Select *pNew, *pAllocated; + Select standin; + pAllocated = pNew = sqlite3DbMallocRawNN(pParse->db, sizeof(*pNew) ); + if( pNew==0 ){ + assert( pParse->db->mallocFailed ); + pNew = &standin; + } + if( pEList==0 ){ + pEList = sqlite3ExprListAppend(pParse, 0, + sqlite3Expr(pParse->db,TK_ASTERISK,0)); + } + pNew->pEList = pEList; + pNew->op = TK_SELECT; + pNew->selFlags = selFlags; + pNew->iLimit = 0; + pNew->iOffset = 0; + pNew->selId = ++pParse->nSelect; + pNew->addrOpenEphm[0] = -1; + pNew->addrOpenEphm[1] = -1; + pNew->nSelectRow = 0; + if( pSrc==0 ) pSrc = sqlite3DbMallocZero(pParse->db, SZ_SRCLIST_1); + pNew->pSrc = pSrc; + pNew->pWhere = pWhere; + pNew->pGroupBy = pGroupBy; + pNew->pHaving = pHaving; + pNew->pOrderBy = pOrderBy; + pNew->pPrior = 0; + pNew->pNext = 0; + pNew->pLimit = pLimit; + pNew->pWith = 0; +#ifndef SQLITE_OMIT_WINDOWFUNC + pNew->pWin = 0; + pNew->pWinDefn = 0; +#endif + if( pParse->db->mallocFailed ) { + clearSelect(pParse->db, pNew, pNew!=&standin); + pAllocated = 0; + }else{ + assert( pNew->pSrc!=0 || pParse->nErr>0 ); + } + return pAllocated; +} + + +/* +** Delete the given Select structure and all of its substructures. +*/ +SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3 *db, Select *p){ + if( OK_IF_ALWAYS_TRUE(p) ) clearSelect(db, p, 1); +} +SQLITE_PRIVATE void sqlite3SelectDeleteGeneric(sqlite3 *db, void *p){ + if( ALWAYS(p) ) clearSelect(db, (Select*)p, 1); +} + +/* +** Return a pointer to the right-most SELECT statement in a compound. +*/ +static Select *findRightmost(Select *p){ + while( p->pNext ) p = p->pNext; + return p; +} + +/* +** Given 1 to 3 identifiers preceding the JOIN keyword, determine the +** type of join. Return an integer constant that expresses that type +** in terms of the following bit values: +** +** JT_INNER +** JT_CROSS +** JT_OUTER +** JT_NATURAL +** JT_LEFT +** JT_RIGHT +** +** A full outer join is the combination of JT_LEFT and JT_RIGHT. +** +** If an illegal or unsupported join type is seen, then still return +** a join type, but put an error in the pParse structure. +** +** These are the valid join types: +** +** +** pA pB pC Return Value +** ------- ----- ----- ------------ +** CROSS - - JT_CROSS +** INNER - - JT_INNER +** LEFT - - JT_LEFT|JT_OUTER +** LEFT OUTER - JT_LEFT|JT_OUTER +** RIGHT - - JT_RIGHT|JT_OUTER +** RIGHT OUTER - JT_RIGHT|JT_OUTER +** FULL - - JT_LEFT|JT_RIGHT|JT_OUTER +** FULL OUTER - JT_LEFT|JT_RIGHT|JT_OUTER +** NATURAL INNER - JT_NATURAL|JT_INNER +** NATURAL LEFT - JT_NATURAL|JT_LEFT|JT_OUTER +** NATURAL LEFT OUTER JT_NATURAL|JT_LEFT|JT_OUTER +** NATURAL RIGHT - JT_NATURAL|JT_RIGHT|JT_OUTER +** NATURAL RIGHT OUTER JT_NATURAL|JT_RIGHT|JT_OUTER +** NATURAL FULL - JT_NATURAL|JT_LEFT|JT_RIGHT +** NATURAL FULL OUTER JT_NATRUAL|JT_LEFT|JT_RIGHT +** +** To preserve historical compatibly, SQLite also accepts a variety +** of other non-standard and in many cases nonsensical join types. +** This routine makes as much sense at it can from the nonsense join +** type and returns a result. Examples of accepted nonsense join types +** include but are not limited to: +** +** INNER CROSS JOIN -> same as JOIN +** NATURAL CROSS JOIN -> same as NATURAL JOIN +** OUTER LEFT JOIN -> same as LEFT JOIN +** LEFT NATURAL JOIN -> same as NATURAL LEFT JOIN +** LEFT RIGHT JOIN -> same as FULL JOIN +** RIGHT OUTER FULL JOIN -> same as FULL JOIN +** CROSS CROSS CROSS JOIN -> same as JOIN +** +** The only restrictions on the join type name are: +** +** * "INNER" cannot appear together with "OUTER", "LEFT", "RIGHT", +** or "FULL". +** +** * "CROSS" cannot appear together with "OUTER", "LEFT", "RIGHT, +** or "FULL". +** +** * If "OUTER" is present then there must also be one of +** "LEFT", "RIGHT", or "FULL" +*/ +SQLITE_PRIVATE int sqlite3JoinType(Parse *pParse, Token *pA, Token *pB, Token *pC){ + int jointype = 0; + Token *apAll[3]; + Token *p; + /* 0123456789 123456789 123456789 123 */ + static const char zKeyText[] = "naturaleftouterightfullinnercross"; + static const struct { + u8 i; /* Beginning of keyword text in zKeyText[] */ + u8 nChar; /* Length of the keyword in characters */ + u8 code; /* Join type mask */ + } aKeyword[] = { + /* (0) natural */ { 0, 7, JT_NATURAL }, + /* (1) left */ { 6, 4, JT_LEFT|JT_OUTER }, + /* (2) outer */ { 10, 5, JT_OUTER }, + /* (3) right */ { 14, 5, JT_RIGHT|JT_OUTER }, + /* (4) full */ { 19, 4, JT_LEFT|JT_RIGHT|JT_OUTER }, + /* (5) inner */ { 23, 5, JT_INNER }, + /* (6) cross */ { 28, 5, JT_INNER|JT_CROSS }, + }; + int i, j; + apAll[0] = pA; + apAll[1] = pB; + apAll[2] = pC; + for(i=0; i<3 && apAll[i]; i++){ + p = apAll[i]; + for(j=0; jn==aKeyword[j].nChar + && sqlite3StrNICmp((char*)p->z, &zKeyText[aKeyword[j].i], p->n)==0 ){ + jointype |= aKeyword[j].code; + break; + } + } + testcase( j==0 || j==1 || j==2 || j==3 || j==4 || j==5 || j==6 ); + if( j>=ArraySize(aKeyword) ){ + jointype |= JT_ERROR; + break; + } + } + if( + (jointype & (JT_INNER|JT_OUTER))==(JT_INNER|JT_OUTER) || + (jointype & JT_ERROR)!=0 || + (jointype & (JT_OUTER|JT_LEFT|JT_RIGHT))==JT_OUTER + ){ + const char *zSp1 = " "; + const char *zSp2 = " "; + if( pB==0 ){ zSp1++; } + if( pC==0 ){ zSp2++; } + sqlite3ErrorMsg(pParse, "unknown join type: " + "%T%s%T%s%T", pA, zSp1, pB, zSp2, pC); + jointype = JT_INNER; + } + return jointype; +} + +/* +** Return the index of a column in a table. Return -1 if the column +** is not contained in the table. +*/ +SQLITE_PRIVATE int sqlite3ColumnIndex(Table *pTab, const char *zCol){ + int i; + u8 h; + const Column *aCol; + int nCol; + + h = sqlite3StrIHash(zCol); + aCol = pTab->aCol; + nCol = pTab->nCol; + + /* See if the aHx gives us a lucky match */ + i = pTab->aHx[h % sizeof(pTab->aHx)]; + assert( i=nCol ) break; + } + return -1; +} + +/* +** Mark a subquery result column as having been used. +*/ +SQLITE_PRIVATE void sqlite3SrcItemColumnUsed(SrcItem *pItem, int iCol){ + assert( pItem!=0 ); + assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem) ); + if( pItem->fg.isNestedFrom ){ + ExprList *pResults; + assert( pItem->fg.isSubquery ); + assert( pItem->u4.pSubq!=0 ); + assert( pItem->u4.pSubq->pSelect!=0 ); + pResults = pItem->u4.pSubq->pSelect->pEList; + assert( pResults!=0 ); + assert( iCol>=0 && iColnExpr ); + pResults->a[iCol].fg.bUsed = 1; + } +} + +/* +** Search the tables iStart..iEnd (inclusive) in pSrc, looking for a +** table that has a column named zCol. The search is left-to-right. +** The first match found is returned. +** +** When found, set *piTab and *piCol to the table index and column index +** of the matching column and return TRUE. +** +** If not found, return FALSE. +*/ +static int tableAndColumnIndex( + SrcList *pSrc, /* Array of tables to search */ + int iStart, /* First member of pSrc->a[] to check */ + int iEnd, /* Last member of pSrc->a[] to check */ + const char *zCol, /* Name of the column we are looking for */ + int *piTab, /* Write index of pSrc->a[] here */ + int *piCol, /* Write index of pSrc->a[*piTab].pSTab->aCol[] here */ + int bIgnoreHidden /* Ignore hidden columns */ +){ + int i; /* For looping over tables in pSrc */ + int iCol; /* Index of column matching zCol */ + + assert( iEndnSrc ); + assert( iStart>=0 ); + assert( (piTab==0)==(piCol==0) ); /* Both or neither are NULL */ + + for(i=iStart; i<=iEnd; i++){ + iCol = sqlite3ColumnIndex(pSrc->a[i].pSTab, zCol); + if( iCol>=0 + && (bIgnoreHidden==0 || IsHiddenColumn(&pSrc->a[i].pSTab->aCol[iCol])==0) + ){ + if( piTab ){ + sqlite3SrcItemColumnUsed(&pSrc->a[i], iCol); + *piTab = i; + *piCol = iCol; + } + return 1; + } + } + return 0; +} + +/* +** Set the EP_OuterON property on all terms of the given expression. +** And set the Expr.w.iJoin to iTable for every term in the +** expression. +** +** The EP_OuterON property is used on terms of an expression to tell +** the OUTER JOIN processing logic that this term is part of the +** join restriction specified in the ON or USING clause and not a part +** of the more general WHERE clause. These terms are moved over to the +** WHERE clause during join processing but we need to remember that they +** originated in the ON or USING clause. +** +** The Expr.w.iJoin tells the WHERE clause processing that the +** expression depends on table w.iJoin even if that table is not +** explicitly mentioned in the expression. That information is needed +** for cases like this: +** +** SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.b AND t1.x=5 +** +** The where clause needs to defer the handling of the t1.x=5 +** term until after the t2 loop of the join. In that way, a +** NULL t2 row will be inserted whenever t1.x!=5. If we do not +** defer the handling of t1.x=5, it will be processed immediately +** after the t1 loop and rows with t1.x!=5 will never appear in +** the output, which is incorrect. +*/ +SQLITE_PRIVATE void sqlite3SetJoinExpr(Expr *p, int iTable, u32 joinFlag){ + assert( joinFlag==EP_OuterON || joinFlag==EP_InnerON ); + while( p ){ + ExprSetProperty(p, joinFlag); + assert( !ExprHasProperty(p, EP_TokenOnly|EP_Reduced) ); + ExprSetVVAProperty(p, EP_NoReduce); + p->w.iJoin = iTable; + if( ExprUseXList(p) ){ + if( p->x.pList ){ + int i; + for(i=0; ix.pList->nExpr; i++){ + sqlite3SetJoinExpr(p->x.pList->a[i].pExpr, iTable, joinFlag); + } + } + } + sqlite3SetJoinExpr(p->pLeft, iTable, joinFlag); + p = p->pRight; + } +} + +/* Undo the work of sqlite3SetJoinExpr(). This is used when a LEFT JOIN +** is simplified into an ordinary JOIN, and when an ON expression is +** "pushed down" into the WHERE clause of a subquery. +** +** Convert every term that is marked with EP_OuterON and w.iJoin==iTable into +** an ordinary term that omits the EP_OuterON mark. Or if iTable<0, then +** just clear every EP_OuterON and EP_InnerON mark from the expression tree. +** +** If nullable is true, that means that Expr p might evaluate to NULL even +** if it is a reference to a NOT NULL column. This can happen, for example, +** if the table that p references is on the left side of a RIGHT JOIN. +** If nullable is true, then take care to not remove the EP_CanBeNull bit. +** See forum thread https://sqlite.org/forum/forumpost/b40696f50145d21c +*/ +static void unsetJoinExpr(Expr *p, int iTable, int nullable){ + while( p ){ + if( iTable<0 || (ExprHasProperty(p, EP_OuterON) && p->w.iJoin==iTable) ){ + ExprClearProperty(p, EP_OuterON|EP_InnerON); + if( iTable>=0 ) ExprSetProperty(p, EP_InnerON); + } + if( p->op==TK_COLUMN && p->iTable==iTable && !nullable ){ + ExprClearProperty(p, EP_CanBeNull); + } + if( p->op==TK_FUNCTION ){ + assert( ExprUseXList(p) ); + assert( p->pLeft==0 ); + if( p->x.pList ){ + int i; + for(i=0; ix.pList->nExpr; i++){ + unsetJoinExpr(p->x.pList->a[i].pExpr, iTable, nullable); + } + } + } + unsetJoinExpr(p->pLeft, iTable, nullable); + p = p->pRight; + } +} + +/* +** This routine processes the join information for a SELECT statement. +** +** * A NATURAL join is converted into a USING join. After that, we +** do not need to be concerned with NATURAL joins and we only have +** think about USING joins. +** +** * ON and USING clauses result in extra terms being added to the +** WHERE clause to enforce the specified constraints. The extra +** WHERE clause terms will be tagged with EP_OuterON or +** EP_InnerON so that we know that they originated in ON/USING. +** +** The terms of a FROM clause are contained in the Select.pSrc structure. +** The left most table is the first entry in Select.pSrc. The right-most +** table is the last entry. The join operator is held in the entry to +** the right. Thus entry 1 contains the join operator for the join between +** entries 0 and 1. Any ON or USING clauses associated with the join are +** also attached to the right entry. +** +** This routine returns the number of errors encountered. +*/ +static int sqlite3ProcessJoin(Parse *pParse, Select *p){ + SrcList *pSrc; /* All tables in the FROM clause */ + int i, j; /* Loop counters */ + SrcItem *pLeft; /* Left table being joined */ + SrcItem *pRight; /* Right table being joined */ + + pSrc = p->pSrc; + pLeft = &pSrc->a[0]; + pRight = &pLeft[1]; + for(i=0; inSrc-1; i++, pRight++, pLeft++){ + Table *pRightTab = pRight->pSTab; + u32 joinType; + + if( NEVER(pLeft->pSTab==0 || pRightTab==0) ) continue; + joinType = (pRight->fg.jointype & JT_OUTER)!=0 ? EP_OuterON : EP_InnerON; + + /* If this is a NATURAL join, synthesize an appropriate USING clause + ** to specify which columns should be joined. + */ + if( pRight->fg.jointype & JT_NATURAL ){ + IdList *pUsing = 0; + if( pRight->fg.isUsing || pRight->u3.pOn ){ + sqlite3ErrorMsg(pParse, "a NATURAL join may not have " + "an ON or USING clause", 0); + return 1; + } + for(j=0; jnCol; j++){ + char *zName; /* Name of column in the right table */ + + if( IsHiddenColumn(&pRightTab->aCol[j]) ) continue; + zName = pRightTab->aCol[j].zCnName; + if( tableAndColumnIndex(pSrc, 0, i, zName, 0, 0, 1) ){ + pUsing = sqlite3IdListAppend(pParse, pUsing, 0); + if( pUsing ){ + assert( pUsing->nId>0 ); + assert( pUsing->a[pUsing->nId-1].zName==0 ); + pUsing->a[pUsing->nId-1].zName = sqlite3DbStrDup(pParse->db, zName); + } + } + } + if( pUsing ){ + pRight->fg.isUsing = 1; + pRight->fg.isSynthUsing = 1; + pRight->u3.pUsing = pUsing; + } + if( pParse->nErr ) return 1; + } + + /* Create extra terms on the WHERE clause for each column named + ** in the USING clause. Example: If the two tables to be joined are + ** A and B and the USING clause names X, Y, and Z, then add this + ** to the WHERE clause: A.X=B.X AND A.Y=B.Y AND A.Z=B.Z + ** Report an error if any column mentioned in the USING clause is + ** not contained in both tables to be joined. + */ + if( pRight->fg.isUsing ){ + IdList *pList = pRight->u3.pUsing; + sqlite3 *db = pParse->db; + assert( pList!=0 ); + for(j=0; jnId; j++){ + char *zName; /* Name of the term in the USING clause */ + int iLeft; /* Table on the left with matching column name */ + int iLeftCol; /* Column number of matching column on the left */ + int iRightCol; /* Column number of matching column on the right */ + Expr *pE1; /* Reference to the column on the LEFT of the join */ + Expr *pE2; /* Reference to the column on the RIGHT of the join */ + Expr *pEq; /* Equality constraint. pE1 == pE2 */ + + zName = pList->a[j].zName; + iRightCol = sqlite3ColumnIndex(pRightTab, zName); + if( iRightCol<0 + || tableAndColumnIndex(pSrc, 0, i, zName, &iLeft, &iLeftCol, + pRight->fg.isSynthUsing)==0 + ){ + sqlite3ErrorMsg(pParse, "cannot join using column %s - column " + "not present in both tables", zName); + return 1; + } + pE1 = sqlite3CreateColumnExpr(db, pSrc, iLeft, iLeftCol); + sqlite3SrcItemColumnUsed(&pSrc->a[iLeft], iLeftCol); + if( (pSrc->a[0].fg.jointype & JT_LTORJ)!=0 && pParse->nErr==0 ){ + /* This branch runs if the query contains one or more RIGHT or FULL + ** JOINs. If only a single table on the left side of this join + ** contains the zName column, then this branch is a no-op. + ** But if there are two or more tables on the left side + ** of the join, construct a coalesce() function that gathers all + ** such tables. Raise an error if more than one of those references + ** to zName is not also within a prior USING clause. + ** + ** We really ought to raise an error if there are two or more + ** non-USING references to zName on the left of an INNER or LEFT + ** JOIN. But older versions of SQLite do not do that, so we avoid + ** adding a new error so as to not break legacy applications. + */ + ExprList *pFuncArgs = 0; /* Arguments to the coalesce() */ + static const Token tkCoalesce = { "coalesce", 8 }; + assert( pE1!=0 ); + ExprSetProperty(pE1, EP_CanBeNull); + while( tableAndColumnIndex(pSrc, iLeft+1, i, zName, &iLeft, &iLeftCol, + pRight->fg.isSynthUsing)!=0 ){ + if( pSrc->a[iLeft].fg.isUsing==0 + || sqlite3IdListIndex(pSrc->a[iLeft].u3.pUsing, zName)<0 + ){ + sqlite3ErrorMsg(pParse, "ambiguous reference to %s in USING()", + zName); + break; + } + pFuncArgs = sqlite3ExprListAppend(pParse, pFuncArgs, pE1); + pE1 = sqlite3CreateColumnExpr(db, pSrc, iLeft, iLeftCol); + sqlite3SrcItemColumnUsed(&pSrc->a[iLeft], iLeftCol); + } + if( pFuncArgs ){ + pFuncArgs = sqlite3ExprListAppend(pParse, pFuncArgs, pE1); + pE1 = sqlite3ExprFunction(pParse, pFuncArgs, &tkCoalesce, 0); + if( pE1 ){ + pE1->affExpr = SQLITE_AFF_DEFER; + } + } + }else if( (pSrc->a[i+1].fg.jointype & JT_LEFT)!=0 && pParse->nErr==0 ){ + assert( pE1!=0 ); + ExprSetProperty(pE1, EP_CanBeNull); + } + pE2 = sqlite3CreateColumnExpr(db, pSrc, i+1, iRightCol); + sqlite3SrcItemColumnUsed(pRight, iRightCol); + pEq = sqlite3PExpr(pParse, TK_EQ, pE1, pE2); + assert( pE2!=0 || pEq==0 ); + if( pEq ){ + ExprSetProperty(pEq, joinType); + assert( !ExprHasProperty(pEq, EP_TokenOnly|EP_Reduced) ); + ExprSetVVAProperty(pEq, EP_NoReduce); + pEq->w.iJoin = pE2->iTable; + } + p->pWhere = sqlite3ExprAnd(pParse, p->pWhere, pEq); + } + } + + /* Add the ON clause to the end of the WHERE clause, connected by + ** an AND operator. + */ + else if( pRight->u3.pOn ){ + sqlite3SetJoinExpr(pRight->u3.pOn, pRight->iCursor, joinType); + p->pWhere = sqlite3ExprAnd(pParse, p->pWhere, pRight->u3.pOn); + pRight->u3.pOn = 0; + pRight->fg.isOn = 1; + p->selFlags |= SF_OnToWhere; + } + } + return 0; +} + +/* +** An instance of this object holds information (beyond pParse and pSelect) +** needed to load the next result row that is to be added to the sorter. +*/ +typedef struct RowLoadInfo RowLoadInfo; +struct RowLoadInfo { + int regResult; /* Store results in array of registers here */ + u8 ecelFlags; /* Flag argument to ExprCodeExprList() */ +#ifdef SQLITE_ENABLE_SORTER_REFERENCES + ExprList *pExtra; /* Extra columns needed by sorter refs */ + int regExtraResult; /* Where to load the extra columns */ +#endif +}; + +/* +** This routine does the work of loading query data into an array of +** registers so that it can be added to the sorter. +*/ +static void innerLoopLoadRow( + Parse *pParse, /* Statement under construction */ + Select *pSelect, /* The query being coded */ + RowLoadInfo *pInfo /* Info needed to complete the row load */ +){ + sqlite3ExprCodeExprList(pParse, pSelect->pEList, pInfo->regResult, + 0, pInfo->ecelFlags); +#ifdef SQLITE_ENABLE_SORTER_REFERENCES + if( pInfo->pExtra ){ + sqlite3ExprCodeExprList(pParse, pInfo->pExtra, pInfo->regExtraResult, 0, 0); + sqlite3ExprListDelete(pParse->db, pInfo->pExtra); + } +#endif +} + +/* +** Code the OP_MakeRecord instruction that generates the entry to be +** added into the sorter. +** +** Return the register in which the result is stored. +*/ +static int makeSorterRecord( + Parse *pParse, + SortCtx *pSort, + Select *pSelect, + int regBase, + int nBase +){ + int nOBSat = pSort->nOBSat; + Vdbe *v = pParse->pVdbe; + int regOut = ++pParse->nMem; + if( pSort->pDeferredRowLoad ){ + innerLoopLoadRow(pParse, pSelect, pSort->pDeferredRowLoad); + } + sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase+nOBSat, nBase-nOBSat, regOut); + return regOut; +} + +/* +** Generate code that will push the record in registers regData +** through regData+nData-1 onto the sorter. +*/ +static void pushOntoSorter( + Parse *pParse, /* Parser context */ + SortCtx *pSort, /* Information about the ORDER BY clause */ + Select *pSelect, /* The whole SELECT statement */ + int regData, /* First register holding data to be sorted */ + int regOrigData, /* First register holding data before packing */ + int nData, /* Number of elements in the regData data array */ + int nPrefixReg /* No. of reg prior to regData available for use */ +){ + Vdbe *v = pParse->pVdbe; /* Stmt under construction */ + int bSeq = ((pSort->sortFlags & SORTFLAG_UseSorter)==0); + int nExpr = pSort->pOrderBy->nExpr; /* No. of ORDER BY terms */ + int nBase = nExpr + bSeq + nData; /* Fields in sorter record */ + int regBase; /* Regs for sorter record */ + int regRecord = 0; /* Assembled sorter record */ + int nOBSat = pSort->nOBSat; /* ORDER BY terms to skip */ + int op; /* Opcode to add sorter record to sorter */ + int iLimit; /* LIMIT counter */ + int iSkip = 0; /* End of the sorter insert loop */ + + assert( bSeq==0 || bSeq==1 ); + + /* Three cases: + ** (1) The data to be sorted has already been packed into a Record + ** by a prior OP_MakeRecord. In this case nData==1 and regData + ** will be completely unrelated to regOrigData. + ** (2) All output columns are included in the sort record. In that + ** case regData==regOrigData. + ** (3) Some output columns are omitted from the sort record due to + ** the SQLITE_ENABLE_SORTER_REFERENCES optimization, or due to the + ** SQLITE_ECEL_OMITREF optimization, or due to the + ** SortCtx.pDeferredRowLoad optimization. In any of these cases + ** regOrigData is 0 to prevent this routine from trying to copy + ** values that might not yet exist. + */ + assert( nData==1 || regData==regOrigData || regOrigData==0 ); + +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + pSort->addrPush = sqlite3VdbeCurrentAddr(v); +#endif + + if( nPrefixReg ){ + assert( nPrefixReg==nExpr+bSeq ); + regBase = regData - nPrefixReg; + }else{ + regBase = pParse->nMem + 1; + pParse->nMem += nBase; + } + assert( pSelect->iOffset==0 || pSelect->iLimit!=0 ); + iLimit = pSelect->iOffset ? pSelect->iOffset+1 : pSelect->iLimit; + pSort->labelDone = sqlite3VdbeMakeLabel(pParse); + sqlite3ExprCodeExprList(pParse, pSort->pOrderBy, regBase, regOrigData, + SQLITE_ECEL_DUP | (regOrigData? SQLITE_ECEL_REF : 0)); + if( bSeq ){ + sqlite3VdbeAddOp2(v, OP_Sequence, pSort->iECursor, regBase+nExpr); + } + if( nPrefixReg==0 && nData>0 ){ + sqlite3ExprCodeMove(pParse, regData, regBase+nExpr+bSeq, nData); + } + if( nOBSat>0 ){ + int regPrevKey; /* The first nOBSat columns of the previous row */ + int addrFirst; /* Address of the OP_IfNot opcode */ + int addrJmp; /* Address of the OP_Jump opcode */ + VdbeOp *pOp; /* Opcode that opens the sorter */ + int nKey; /* Number of sorting key columns, including OP_Sequence */ + KeyInfo *pKI; /* Original KeyInfo on the sorter table */ + + regRecord = makeSorterRecord(pParse, pSort, pSelect, regBase, nBase); + regPrevKey = pParse->nMem+1; + pParse->nMem += pSort->nOBSat; + nKey = nExpr - pSort->nOBSat + bSeq; + if( bSeq ){ + addrFirst = sqlite3VdbeAddOp1(v, OP_IfNot, regBase+nExpr); + }else{ + addrFirst = sqlite3VdbeAddOp1(v, OP_SequenceTest, pSort->iECursor); + } + VdbeCoverage(v); + sqlite3VdbeAddOp3(v, OP_Compare, regPrevKey, regBase, pSort->nOBSat); + pOp = sqlite3VdbeGetOp(v, pSort->addrSortIndex); + if( pParse->db->mallocFailed ) return; + pOp->p2 = nKey + nData; + pKI = pOp->p4.pKeyInfo; + memset(pKI->aSortFlags, 0, pKI->nKeyField); /* Makes OP_Jump testable */ + sqlite3VdbeChangeP4(v, -1, (char*)pKI, P4_KEYINFO); + testcase( pKI->nAllField > pKI->nKeyField+2 ); + pOp->p4.pKeyInfo = sqlite3KeyInfoFromExprList(pParse,pSort->pOrderBy,nOBSat, + pKI->nAllField-pKI->nKeyField-1); + pOp = 0; /* Ensure pOp not used after sqlite3VdbeAddOp3() */ + addrJmp = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeAddOp3(v, OP_Jump, addrJmp+1, 0, addrJmp+1); VdbeCoverage(v); + pSort->labelBkOut = sqlite3VdbeMakeLabel(pParse); + pSort->regReturn = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Gosub, pSort->regReturn, pSort->labelBkOut); + sqlite3VdbeAddOp1(v, OP_ResetSorter, pSort->iECursor); + if( iLimit ){ + sqlite3VdbeAddOp2(v, OP_IfNot, iLimit, pSort->labelDone); + VdbeCoverage(v); + } + sqlite3VdbeJumpHere(v, addrFirst); + sqlite3ExprCodeMove(pParse, regBase, regPrevKey, pSort->nOBSat); + sqlite3VdbeJumpHere(v, addrJmp); + } + if( iLimit ){ + /* At this point the values for the new sorter entry are stored + ** in an array of registers. They need to be composed into a record + ** and inserted into the sorter if either (a) there are currently + ** less than LIMIT+OFFSET items or (b) the new record is smaller than + ** the largest record currently in the sorter. If (b) is true and there + ** are already LIMIT+OFFSET items in the sorter, delete the largest + ** entry before inserting the new one. This way there are never more + ** than LIMIT+OFFSET items in the sorter. + ** + ** If the new record does not need to be inserted into the sorter, + ** jump to the next iteration of the loop. If the pSort->labelOBLopt + ** value is not zero, then it is a label of where to jump. Otherwise, + ** just bypass the row insert logic. See the header comment on the + ** sqlite3WhereOrderByLimitOptLabel() function for additional info. + */ + int iCsr = pSort->iECursor; + sqlite3VdbeAddOp2(v, OP_IfNotZero, iLimit, sqlite3VdbeCurrentAddr(v)+4); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Last, iCsr, 0); + iSkip = sqlite3VdbeAddOp4Int(v, OP_IdxLE, + iCsr, 0, regBase+nOBSat, nExpr-nOBSat); + VdbeCoverage(v); + sqlite3VdbeAddOp1(v, OP_Delete, iCsr); + } + if( regRecord==0 ){ + regRecord = makeSorterRecord(pParse, pSort, pSelect, regBase, nBase); + } + if( pSort->sortFlags & SORTFLAG_UseSorter ){ + op = OP_SorterInsert; + }else{ + op = OP_IdxInsert; + } + sqlite3VdbeAddOp4Int(v, op, pSort->iECursor, regRecord, + regBase+nOBSat, nBase-nOBSat); + if( iSkip ){ + sqlite3VdbeChangeP2(v, iSkip, + pSort->labelOBLopt ? pSort->labelOBLopt : sqlite3VdbeCurrentAddr(v)); + } +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + pSort->addrPushEnd = sqlite3VdbeCurrentAddr(v)-1; +#endif +} + +/* +** Add code to implement the OFFSET +*/ +static void codeOffset( + Vdbe *v, /* Generate code into this VM */ + int iOffset, /* Register holding the offset counter */ + int iContinue /* Jump here to skip the current record */ +){ + if( iOffset>0 ){ + sqlite3VdbeAddOp3(v, OP_IfPos, iOffset, iContinue, 1); VdbeCoverage(v); + VdbeComment((v, "OFFSET")); + } +} + +/* +** Add code that will check to make sure the array of registers starting at +** iMem form a distinct entry. This is used by both "SELECT DISTINCT ..." and +** distinct aggregates ("SELECT count(DISTINCT ) ..."). Three strategies +** are available. Which is used depends on the value of parameter eTnctType, +** as follows: +** +** WHERE_DISTINCT_UNORDERED/WHERE_DISTINCT_NOOP: +** Build an ephemeral table that contains all entries seen before and +** skip entries which have been seen before. +** +** Parameter iTab is the cursor number of an ephemeral table that must +** be opened before the VM code generated by this routine is executed. +** The ephemeral cursor table is queried for a record identical to the +** record formed by the current array of registers. If one is found, +** jump to VM address addrRepeat. Otherwise, insert a new record into +** the ephemeral cursor and proceed. +** +** The returned value in this case is a copy of parameter iTab. +** +** WHERE_DISTINCT_ORDERED: +** In this case rows are being delivered sorted order. The ephemeral +** table is not required. Instead, the current set of values +** is compared against previous row. If they match, the new row +** is not distinct and control jumps to VM address addrRepeat. Otherwise, +** the VM program proceeds with processing the new row. +** +** The returned value in this case is the register number of the first +** in an array of registers used to store the previous result row so that +** it can be compared to the next. The caller must ensure that this +** register is initialized to NULL. (The fixDistinctOpenEph() routine +** will take care of this initialization.) +** +** WHERE_DISTINCT_UNIQUE: +** In this case it has already been determined that the rows are distinct. +** No special action is required. The return value is zero. +** +** Parameter pEList is the list of expressions used to generated the +** contents of each row. It is used by this routine to determine (a) +** how many elements there are in the array of registers and (b) the +** collation sequences that should be used for the comparisons if +** eTnctType is WHERE_DISTINCT_ORDERED. +*/ +static int codeDistinct( + Parse *pParse, /* Parsing and code generating context */ + int eTnctType, /* WHERE_DISTINCT_* value */ + int iTab, /* A sorting index used to test for distinctness */ + int addrRepeat, /* Jump to here if not distinct */ + ExprList *pEList, /* Expression for each element */ + int regElem /* First element */ +){ + int iRet = 0; + int nResultCol = pEList->nExpr; + Vdbe *v = pParse->pVdbe; + + switch( eTnctType ){ + case WHERE_DISTINCT_ORDERED: { + int i; + int iJump; /* Jump destination */ + int regPrev; /* Previous row content */ + + /* Allocate space for the previous row */ + iRet = regPrev = pParse->nMem+1; + pParse->nMem += nResultCol; + + iJump = sqlite3VdbeCurrentAddr(v) + nResultCol; + for(i=0; ia[i].pExpr); + if( idb->mallocFailed ); + sqlite3VdbeAddOp3(v, OP_Copy, regElem, regPrev, nResultCol-1); + break; + } + + case WHERE_DISTINCT_UNIQUE: { + /* nothing to do */ + break; + } + + default: { + int r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp4Int(v, OP_Found, iTab, addrRepeat, regElem, nResultCol); + VdbeCoverage(v); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regElem, nResultCol, r1); + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iTab, r1, regElem, nResultCol); + sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); + sqlite3ReleaseTempReg(pParse, r1); + iRet = iTab; + break; + } + } + + return iRet; +} + +/* +** This routine runs after codeDistinct(). It makes necessary +** adjustments to the OP_OpenEphemeral opcode that the codeDistinct() +** routine made use of. This processing must be done separately since +** sometimes codeDistinct is called before the OP_OpenEphemeral is actually +** laid down. +** +** WHERE_DISTINCT_NOOP: +** WHERE_DISTINCT_UNORDERED: +** +** No adjustments necessary. This function is a no-op. +** +** WHERE_DISTINCT_UNIQUE: +** +** The ephemeral table is not needed. So change the +** OP_OpenEphemeral opcode into an OP_Noop. +** +** WHERE_DISTINCT_ORDERED: +** +** The ephemeral table is not needed. But we do need register +** iVal to be initialized to NULL. So change the OP_OpenEphemeral +** into an OP_Null on the iVal register. +*/ +static void fixDistinctOpenEph( + Parse *pParse, /* Parsing and code generating context */ + int eTnctType, /* WHERE_DISTINCT_* value */ + int iVal, /* Value returned by codeDistinct() */ + int iOpenEphAddr /* Address of OP_OpenEphemeral instruction for iTab */ +){ + if( pParse->nErr==0 + && (eTnctType==WHERE_DISTINCT_UNIQUE || eTnctType==WHERE_DISTINCT_ORDERED) + ){ + Vdbe *v = pParse->pVdbe; + sqlite3VdbeChangeToNoop(v, iOpenEphAddr); + if( sqlite3VdbeGetOp(v, iOpenEphAddr+1)->opcode==OP_Explain ){ + sqlite3VdbeChangeToNoop(v, iOpenEphAddr+1); + } + if( eTnctType==WHERE_DISTINCT_ORDERED ){ + /* Change the OP_OpenEphemeral to an OP_Null that sets the MEM_Cleared + ** bit on the first register of the previous value. This will cause the + ** OP_Ne added in codeDistinct() to always fail on the first iteration of + ** the loop even if the first row is all NULLs. */ + VdbeOp *pOp = sqlite3VdbeGetOp(v, iOpenEphAddr); + pOp->opcode = OP_Null; + pOp->p1 = 1; + pOp->p2 = iVal; + } + } +} + +#ifdef SQLITE_ENABLE_SORTER_REFERENCES +/* +** This function is called as part of inner-loop generation for a SELECT +** statement with an ORDER BY that is not optimized by an index. It +** determines the expressions, if any, that the sorter-reference +** optimization should be used for. The sorter-reference optimization +** is used for SELECT queries like: +** +** SELECT a, bigblob FROM t1 ORDER BY a LIMIT 10 +** +** If the optimization is used for expression "bigblob", then instead of +** storing values read from that column in the sorter records, the PK of +** the row from table t1 is stored instead. Then, as records are extracted from +** the sorter to return to the user, the required value of bigblob is +** retrieved directly from table t1. If the values are very large, this +** can be more efficient than storing them directly in the sorter records. +** +** The ExprList_item.fg.bSorterRef flag is set for each expression in pEList +** for which the sorter-reference optimization should be enabled. +** Additionally, the pSort->aDefer[] array is populated with entries +** for all cursors required to evaluate all selected expressions. Finally. +** output variable (*ppExtra) is set to an expression list containing +** expressions for all extra PK values that should be stored in the +** sorter records. +*/ +static void selectExprDefer( + Parse *pParse, /* Leave any error here */ + SortCtx *pSort, /* Sorter context */ + ExprList *pEList, /* Expressions destined for sorter */ + ExprList **ppExtra /* Expressions to append to sorter record */ +){ + int i; + int nDefer = 0; + ExprList *pExtra = 0; + for(i=0; inExpr; i++){ + struct ExprList_item *pItem = &pEList->a[i]; + if( pItem->u.x.iOrderByCol==0 ){ + Expr *pExpr = pItem->pExpr; + Table *pTab; + if( pExpr->op==TK_COLUMN + && pExpr->iColumn>=0 + && ALWAYS( ExprUseYTab(pExpr) ) + && (pTab = pExpr->y.pTab)!=0 + && IsOrdinaryTable(pTab) + && (pTab->aCol[pExpr->iColumn].colFlags & COLFLAG_SORTERREF)!=0 + ){ + int j; + for(j=0; jaDefer[j].iCsr==pExpr->iTable ) break; + } + if( j==nDefer ){ + if( nDefer==ArraySize(pSort->aDefer) ){ + continue; + }else{ + int nKey = 1; + int k; + Index *pPk = 0; + if( !HasRowid(pTab) ){ + pPk = sqlite3PrimaryKeyIndex(pTab); + nKey = pPk->nKeyCol; + } + for(k=0; kiTable = pExpr->iTable; + assert( ExprUseYTab(pNew) ); + pNew->y.pTab = pExpr->y.pTab; + pNew->iColumn = pPk ? pPk->aiColumn[k] : -1; + pExtra = sqlite3ExprListAppend(pParse, pExtra, pNew); + } + } + pSort->aDefer[nDefer].pTab = pExpr->y.pTab; + pSort->aDefer[nDefer].iCsr = pExpr->iTable; + pSort->aDefer[nDefer].nKey = nKey; + nDefer++; + } + } + pItem->fg.bSorterRef = 1; + } + } + } + pSort->nDefer = (u8)nDefer; + *ppExtra = pExtra; +} +#endif + +/* +** This routine generates the code for the inside of the inner loop +** of a SELECT. +** +** If srcTab is negative, then the p->pEList expressions +** are evaluated in order to get the data for this row. If srcTab is +** zero or more, then data is pulled from srcTab and p->pEList is used only +** to get the number of columns and the collation sequence for each column. +*/ +static void selectInnerLoop( + Parse *pParse, /* The parser context */ + Select *p, /* The complete select statement being coded */ + int srcTab, /* Pull data from this table if non-negative */ + SortCtx *pSort, /* If not NULL, info on how to process ORDER BY */ + DistinctCtx *pDistinct, /* If not NULL, info on how to process DISTINCT */ + SelectDest *pDest, /* How to dispose of the results */ + int iContinue, /* Jump here to continue with next row */ + int iBreak /* Jump here to break out of the inner loop */ +){ + Vdbe *v = pParse->pVdbe; + int i; + int hasDistinct; /* True if the DISTINCT keyword is present */ + int eDest = pDest->eDest; /* How to dispose of results */ + int iParm = pDest->iSDParm; /* First argument to disposal method */ + int nResultCol; /* Number of result columns */ + int nPrefixReg = 0; /* Number of extra registers before regResult */ + RowLoadInfo sRowLoadInfo; /* Info for deferred row loading */ + + /* Usually, regResult is the first cell in an array of memory cells + ** containing the current result row. In this case regOrig is set to the + ** same value. However, if the results are being sent to the sorter, the + ** values for any expressions that are also part of the sort-key are omitted + ** from this array. In this case regOrig is set to zero. */ + int regResult; /* Start of memory holding current results */ + int regOrig; /* Start of memory holding full result (or 0) */ + + assert( v ); + assert( p->pEList!=0 ); + hasDistinct = pDistinct ? pDistinct->eTnctType : WHERE_DISTINCT_NOOP; + if( pSort && pSort->pOrderBy==0 ) pSort = 0; + if( pSort==0 && !hasDistinct ){ + assert( iContinue!=0 ); + codeOffset(v, p->iOffset, iContinue); + } + + /* Pull the requested columns. + */ + nResultCol = p->pEList->nExpr; + + if( pDest->iSdst==0 ){ + if( pSort ){ + nPrefixReg = pSort->pOrderBy->nExpr; + if( !(pSort->sortFlags & SORTFLAG_UseSorter) ) nPrefixReg++; + pParse->nMem += nPrefixReg; + } + pDest->iSdst = pParse->nMem+1; + pParse->nMem += nResultCol; + }else if( pDest->iSdst+nResultCol > pParse->nMem ){ + /* This is an error condition that can result, for example, when a SELECT + ** on the right-hand side of an INSERT contains more result columns than + ** there are columns in the table on the left. The error will be caught + ** and reported later. But we need to make sure enough memory is allocated + ** to avoid other spurious errors in the meantime. */ + pParse->nMem += nResultCol; + } + pDest->nSdst = nResultCol; + regOrig = regResult = pDest->iSdst; + if( srcTab>=0 ){ + for(i=0; ipEList->a[i].zEName)); + } + }else if( eDest!=SRT_Exists ){ +#ifdef SQLITE_ENABLE_SORTER_REFERENCES + ExprList *pExtra = 0; +#endif + /* If the destination is an EXISTS(...) expression, the actual + ** values returned by the SELECT are not required. + */ + u8 ecelFlags; /* "ecel" is an abbreviation of "ExprCodeExprList" */ + ExprList *pEList; + if( eDest==SRT_Mem || eDest==SRT_Output || eDest==SRT_Coroutine ){ + ecelFlags = SQLITE_ECEL_DUP; + }else{ + ecelFlags = 0; + } + if( pSort && hasDistinct==0 && eDest!=SRT_EphemTab && eDest!=SRT_Table ){ + /* For each expression in p->pEList that is a copy of an expression in + ** the ORDER BY clause (pSort->pOrderBy), set the associated + ** iOrderByCol value to one more than the index of the ORDER BY + ** expression within the sort-key that pushOntoSorter() will generate. + ** This allows the p->pEList field to be omitted from the sorted record, + ** saving space and CPU cycles. */ + ecelFlags |= (SQLITE_ECEL_OMITREF|SQLITE_ECEL_REF); + + for(i=pSort->nOBSat; ipOrderBy->nExpr; i++){ + int j; + if( (j = pSort->pOrderBy->a[i].u.x.iOrderByCol)>0 ){ + p->pEList->a[j-1].u.x.iOrderByCol = i+1-pSort->nOBSat; + } + } +#ifdef SQLITE_ENABLE_SORTER_REFERENCES + selectExprDefer(pParse, pSort, p->pEList, &pExtra); + if( pExtra && pParse->db->mallocFailed==0 ){ + /* If there are any extra PK columns to add to the sorter records, + ** allocate extra memory cells and adjust the OpenEphemeral + ** instruction to account for the larger records. This is only + ** required if there are one or more WITHOUT ROWID tables with + ** composite primary keys in the SortCtx.aDefer[] array. */ + VdbeOp *pOp = sqlite3VdbeGetOp(v, pSort->addrSortIndex); + pOp->p2 += (pExtra->nExpr - pSort->nDefer); + pOp->p4.pKeyInfo->nAllField += (pExtra->nExpr - pSort->nDefer); + pParse->nMem += pExtra->nExpr; + } +#endif + + /* Adjust nResultCol to account for columns that are omitted + ** from the sorter by the optimizations in this branch */ + pEList = p->pEList; + for(i=0; inExpr; i++){ + if( pEList->a[i].u.x.iOrderByCol>0 +#ifdef SQLITE_ENABLE_SORTER_REFERENCES + || pEList->a[i].fg.bSorterRef +#endif + ){ + nResultCol--; + regOrig = 0; + } + } + + testcase( regOrig ); + testcase( eDest==SRT_Set ); + testcase( eDest==SRT_Mem ); + testcase( eDest==SRT_Coroutine ); + testcase( eDest==SRT_Output ); + assert( eDest==SRT_Set || eDest==SRT_Mem + || eDest==SRT_Coroutine || eDest==SRT_Output + || eDest==SRT_Upfrom ); + } + sRowLoadInfo.regResult = regResult; + sRowLoadInfo.ecelFlags = ecelFlags; +#ifdef SQLITE_ENABLE_SORTER_REFERENCES + sRowLoadInfo.pExtra = pExtra; + sRowLoadInfo.regExtraResult = regResult + nResultCol; + if( pExtra ) nResultCol += pExtra->nExpr; +#endif + if( p->iLimit + && (ecelFlags & SQLITE_ECEL_OMITREF)!=0 + && nPrefixReg>0 + ){ + assert( pSort!=0 ); + assert( hasDistinct==0 ); + pSort->pDeferredRowLoad = &sRowLoadInfo; + regOrig = 0; + }else{ + innerLoopLoadRow(pParse, p, &sRowLoadInfo); + } + } + + /* If the DISTINCT keyword was present on the SELECT statement + ** and this row has been seen before, then do not make this row + ** part of the result. + */ + if( hasDistinct ){ + int eType = pDistinct->eTnctType; + int iTab = pDistinct->tabTnct; + assert( nResultCol==p->pEList->nExpr ); + iTab = codeDistinct(pParse, eType, iTab, iContinue, p->pEList, regResult); + fixDistinctOpenEph(pParse, eType, iTab, pDistinct->addrTnct); + if( pSort==0 ){ + codeOffset(v, p->iOffset, iContinue); + } + } + + switch( eDest ){ + /* In this mode, write each query result to the key of the temporary + ** table iParm. + */ +#ifndef SQLITE_OMIT_COMPOUND_SELECT + case SRT_Union: { + int r1; + r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1); + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, r1, regResult, nResultCol); + sqlite3ReleaseTempReg(pParse, r1); + break; + } + + /* Construct a record from the query result, but instead of + ** saving that record, use it as a key to delete elements from + ** the temporary table iParm. + */ + case SRT_Except: { + sqlite3VdbeAddOp3(v, OP_IdxDelete, iParm, regResult, nResultCol); + break; + } +#endif /* SQLITE_OMIT_COMPOUND_SELECT */ + + /* Store the result as data using a unique key. + */ + case SRT_Fifo: + case SRT_DistFifo: + case SRT_Table: + case SRT_EphemTab: { + int r1 = sqlite3GetTempRange(pParse, nPrefixReg+1); + testcase( eDest==SRT_Table ); + testcase( eDest==SRT_EphemTab ); + testcase( eDest==SRT_Fifo ); + testcase( eDest==SRT_DistFifo ); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1+nPrefixReg); +#if !defined(SQLITE_ENABLE_NULL_TRIM) && defined(SQLITE_DEBUG) + /* A destination of SRT_Table and a non-zero iSDParm2 parameter means + ** that this is an "UPDATE ... FROM" on a virtual table or view. In this + ** case set the p5 parameter of the OP_MakeRecord to OPFLAG_NOCHNG_MAGIC. + ** This does not affect operation in any way - it just allows MakeRecord + ** to process OPFLAG_NOCHANGE values without an assert() failing. */ + if( eDest==SRT_Table && pDest->iSDParm2 ){ + sqlite3VdbeChangeP5(v, OPFLAG_NOCHNG_MAGIC); + } +#endif +#ifndef SQLITE_OMIT_CTE + if( eDest==SRT_DistFifo ){ + /* If the destination is DistFifo, then cursor (iParm+1) is open + ** on an ephemeral index. If the current row is already present + ** in the index, do not write it to the output. If not, add the + ** current row to the index and proceed with writing it to the + ** output table as well. */ + int addr = sqlite3VdbeCurrentAddr(v) + 4; + sqlite3VdbeAddOp4Int(v, OP_Found, iParm+1, addr, r1, 0); + VdbeCoverage(v); + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm+1, r1,regResult,nResultCol); + assert( pSort==0 ); + } +#endif + if( pSort ){ + assert( regResult==regOrig ); + pushOntoSorter(pParse, pSort, p, r1+nPrefixReg, regOrig, 1, nPrefixReg); + }else{ + int r2 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, r2); + sqlite3VdbeAddOp3(v, OP_Insert, iParm, r1, r2); + sqlite3VdbeChangeP5(v, OPFLAG_APPEND); + sqlite3ReleaseTempReg(pParse, r2); + } + sqlite3ReleaseTempRange(pParse, r1, nPrefixReg+1); + break; + } + + case SRT_Upfrom: { + if( pSort ){ + pushOntoSorter( + pParse, pSort, p, regResult, regOrig, nResultCol, nPrefixReg); + }else{ + int i2 = pDest->iSDParm2; + int r1 = sqlite3GetTempReg(pParse); + + /* If the UPDATE FROM join is an aggregate that matches no rows, it + ** might still be trying to return one row, because that is what + ** aggregates do. Don't record that empty row in the output table. */ + sqlite3VdbeAddOp2(v, OP_IsNull, regResult, iBreak); VdbeCoverage(v); + + sqlite3VdbeAddOp3(v, OP_MakeRecord, + regResult+(i2<0), nResultCol-(i2<0), r1); + if( i2<0 ){ + sqlite3VdbeAddOp3(v, OP_Insert, iParm, r1, regResult); + }else{ + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, r1, regResult, i2); + } + } + break; + } + +#ifndef SQLITE_OMIT_SUBQUERY + /* If we are creating a set for an "expr IN (SELECT ...)" construct, + ** then there should be a single item on the stack. Write this + ** item into the set table with bogus data. + */ + case SRT_Set: { + if( pSort ){ + /* At first glance you would think we could optimize out the + ** ORDER BY in this case since the order of entries in the set + ** does not matter. But there might be a LIMIT clause, in which + ** case the order does matter */ + pushOntoSorter( + pParse, pSort, p, regResult, regOrig, nResultCol, nPrefixReg); + pDest->iSDParm2 = 0; /* Signal that any Bloom filter is unpopulated */ + }else{ + int r1 = sqlite3GetTempReg(pParse); + assert( sqlite3Strlen30(pDest->zAffSdst)==nResultCol ); + sqlite3VdbeAddOp4(v, OP_MakeRecord, regResult, nResultCol, + r1, pDest->zAffSdst, nResultCol); + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, r1, regResult, nResultCol); + if( pDest->iSDParm2 ){ + sqlite3VdbeAddOp4Int(v, OP_FilterAdd, pDest->iSDParm2, 0, + regResult, nResultCol); + ExplainQueryPlan((pParse, 0, "CREATE BLOOM FILTER")); + } + sqlite3ReleaseTempReg(pParse, r1); + } + break; + } + + + /* If any row exist in the result set, record that fact and abort. + */ + case SRT_Exists: { + sqlite3VdbeAddOp2(v, OP_Integer, 1, iParm); + /* The LIMIT clause will terminate the loop for us */ + break; + } + + /* If this is a scalar select that is part of an expression, then + ** store the results in the appropriate memory cell or array of + ** memory cells and break out of the scan loop. + */ + case SRT_Mem: { + if( pSort ){ + assert( nResultCol<=pDest->nSdst ); + pushOntoSorter( + pParse, pSort, p, regResult, regOrig, nResultCol, nPrefixReg); + pDest->iSDParm = regResult; + }else{ + assert( nResultCol==pDest->nSdst ); + if( regResult!=iParm ){ + /* This occurs in cases where the SELECT had both a DISTINCT and + ** an OFFSET clause. */ + sqlite3VdbeAddOp3(v, OP_Copy, regResult, iParm, nResultCol-1); + } + /* The LIMIT clause will jump out of the loop for us */ + } + break; + } +#endif /* #ifndef SQLITE_OMIT_SUBQUERY */ + + case SRT_Coroutine: /* Send data to a co-routine */ + case SRT_Output: { /* Return the results */ + testcase( eDest==SRT_Coroutine ); + testcase( eDest==SRT_Output ); + if( pSort ){ + pushOntoSorter(pParse, pSort, p, regResult, regOrig, nResultCol, + nPrefixReg); + }else if( eDest==SRT_Coroutine ){ + sqlite3VdbeAddOp1(v, OP_Yield, pDest->iSDParm); + }else{ + sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, nResultCol); + } + break; + } + +#ifndef SQLITE_OMIT_CTE + /* Write the results into a priority queue that is order according to + ** pDest->pOrderBy (in pSO). pDest->iSDParm (in iParm) is the cursor for an + ** index with pSO->nExpr+2 columns. Build a key using pSO for the first + ** pSO->nExpr columns, then make sure all keys are unique by adding a + ** final OP_Sequence column. The last column is the record as a blob. + */ + case SRT_DistQueue: + case SRT_Queue: { + int nKey; + int r1, r2, r3; + int addrTest = 0; + ExprList *pSO; + pSO = pDest->pOrderBy; + assert( pSO ); + nKey = pSO->nExpr; + r1 = sqlite3GetTempReg(pParse); + r2 = sqlite3GetTempRange(pParse, nKey+2); + r3 = r2+nKey+1; + if( eDest==SRT_DistQueue ){ + /* If the destination is DistQueue, then cursor (iParm+1) is open + ** on a second ephemeral index that holds all values every previously + ** added to the queue. */ + addrTest = sqlite3VdbeAddOp4Int(v, OP_Found, iParm+1, 0, + regResult, nResultCol); + VdbeCoverage(v); + } + sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r3); + if( eDest==SRT_DistQueue ){ + sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm+1, r3); + sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); + } + for(i=0; ia[i].u.x.iOrderByCol - 1, + r2+i); + } + sqlite3VdbeAddOp2(v, OP_Sequence, iParm, r2+nKey); + sqlite3VdbeAddOp3(v, OP_MakeRecord, r2, nKey+2, r1); + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, r1, r2, nKey+2); + if( addrTest ) sqlite3VdbeJumpHere(v, addrTest); + sqlite3ReleaseTempReg(pParse, r1); + sqlite3ReleaseTempRange(pParse, r2, nKey+2); + break; + } +#endif /* SQLITE_OMIT_CTE */ + + + +#if !defined(SQLITE_OMIT_TRIGGER) + /* Discard the results. This is used for SELECT statements inside + ** the body of a TRIGGER. The purpose of such selects is to call + ** user-defined functions that have side effects. We do not care + ** about the actual results of the select. + */ + default: { + assert( eDest==SRT_Discard ); + break; + } +#endif + } + + /* Jump to the end of the loop if the LIMIT is reached. Except, if + ** there is a sorter, in which case the sorter has already limited + ** the output for us. + */ + if( pSort==0 && p->iLimit ){ + sqlite3VdbeAddOp2(v, OP_DecrJumpZero, p->iLimit, iBreak); VdbeCoverage(v); + } +} + +/* +** Allocate a KeyInfo object sufficient for an index of N key columns and +** X extra columns. +*/ +SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoAlloc(sqlite3 *db, int N, int X){ + int nExtra = (N+X)*(sizeof(CollSeq*)+1); + KeyInfo *p; + assert( X>=0 ); + if( NEVER(N+X>0xffff) ) return (KeyInfo*)sqlite3OomFault(db); + p = sqlite3DbMallocRawNN(db, SZ_KEYINFO(0) + nExtra); + if( p ){ + p->aSortFlags = (u8*)&p->aColl[N+X]; + p->nKeyField = (u16)N; + p->nAllField = (u16)(N+X); + p->enc = ENC(db); + p->db = db; + p->nRef = 1; + memset(p->aColl, 0, nExtra); + }else{ + return (KeyInfo*)sqlite3OomFault(db); + } + return p; +} + +/* +** Deallocate a KeyInfo object +*/ +SQLITE_PRIVATE void sqlite3KeyInfoUnref(KeyInfo *p){ + if( p ){ + assert( p->db!=0 ); + assert( p->nRef>0 ); + p->nRef--; + if( p->nRef==0 ) sqlite3DbNNFreeNN(p->db, p); + } +} + +/* +** Make a new pointer to a KeyInfo object +*/ +SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoRef(KeyInfo *p){ + if( p ){ + assert( p->nRef>0 ); + p->nRef++; + } + return p; +} + +#ifdef SQLITE_DEBUG +/* +** Return TRUE if a KeyInfo object can be change. The KeyInfo object +** can only be changed if this is just a single reference to the object. +** +** This routine is used only inside of assert() statements. +*/ +SQLITE_PRIVATE int sqlite3KeyInfoIsWriteable(KeyInfo *p){ return p->nRef==1; } +#endif /* SQLITE_DEBUG */ + +/* +** Given an expression list, generate a KeyInfo structure that records +** the collating sequence for each expression in that expression list. +** +** If the ExprList is an ORDER BY or GROUP BY clause then the resulting +** KeyInfo structure is appropriate for initializing a virtual index to +** implement that clause. If the ExprList is the result set of a SELECT +** then the KeyInfo structure is appropriate for initializing a virtual +** index to implement a DISTINCT test. +** +** Space to hold the KeyInfo structure is obtained from malloc. The calling +** function is responsible for seeing that this structure is eventually +** freed. +*/ +SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoFromExprList( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* Form the KeyInfo object from this ExprList */ + int iStart, /* Begin with this column of pList */ + int nExtra /* Add this many extra columns to the end */ +){ + int nExpr; + KeyInfo *pInfo; + struct ExprList_item *pItem; + sqlite3 *db = pParse->db; + int i; + + nExpr = pList->nExpr; + pInfo = sqlite3KeyInfoAlloc(db, nExpr-iStart, nExtra+1); + if( pInfo ){ + assert( sqlite3KeyInfoIsWriteable(pInfo) ); + for(i=iStart, pItem=pList->a+iStart; iaColl[i-iStart] = sqlite3ExprNNCollSeq(pParse, pItem->pExpr); + pInfo->aSortFlags[i-iStart] = pItem->fg.sortFlags; + } + } + return pInfo; +} + +/* +** Name of the connection operator, used for error messages. +*/ +SQLITE_PRIVATE const char *sqlite3SelectOpName(int id){ + char *z; + switch( id ){ + case TK_ALL: z = "UNION ALL"; break; + case TK_INTERSECT: z = "INTERSECT"; break; + case TK_EXCEPT: z = "EXCEPT"; break; + default: z = "UNION"; break; + } + return z; +} + +#ifndef SQLITE_OMIT_EXPLAIN +/* +** Unless an "EXPLAIN QUERY PLAN" command is being processed, this function +** is a no-op. Otherwise, it adds a single row of output to the EQP result, +** where the caption is of the form: +** +** "USE TEMP B-TREE FOR xxx" +** +** where xxx is one of "DISTINCT", "ORDER BY" or "GROUP BY". Exactly which +** is determined by the zUsage argument. +*/ +static void explainTempTable(Parse *pParse, const char *zUsage){ + ExplainQueryPlan((pParse, 0, "USE TEMP B-TREE FOR %s", zUsage)); +} + +/* +** Assign expression b to lvalue a. A second, no-op, version of this macro +** is provided when SQLITE_OMIT_EXPLAIN is defined. This allows the code +** in sqlite3Select() to assign values to structure member variables that +** only exist if SQLITE_OMIT_EXPLAIN is not defined without polluting the +** code with #ifndef directives. +*/ +# define explainSetInteger(a, b) a = b + +#else +/* No-op versions of the explainXXX() functions and macros. */ +# define explainTempTable(y,z) +# define explainSetInteger(y,z) +#endif + + +/* +** If the inner loop was generated using a non-null pOrderBy argument, +** then the results were placed in a sorter. After the loop is terminated +** we need to run the sorter and output the results. The following +** routine generates the code needed to do that. +*/ +static void generateSortTail( + Parse *pParse, /* Parsing context */ + Select *p, /* The SELECT statement */ + SortCtx *pSort, /* Information on the ORDER BY clause */ + int nColumn, /* Number of columns of data */ + SelectDest *pDest /* Write the sorted results here */ +){ + Vdbe *v = pParse->pVdbe; /* The prepared statement */ + int addrBreak = pSort->labelDone; /* Jump here to exit loop */ + int addrContinue = sqlite3VdbeMakeLabel(pParse);/* Jump here for next cycle */ + int addr; /* Top of output loop. Jump for Next. */ + int addrOnce = 0; + int iTab; + ExprList *pOrderBy = pSort->pOrderBy; + int eDest = pDest->eDest; + int iParm = pDest->iSDParm; + int regRow; + int regRowid; + int iCol; + int nKey; /* Number of key columns in sorter record */ + int iSortTab; /* Sorter cursor to read from */ + int i; + int bSeq; /* True if sorter record includes seq. no. */ + int nRefKey = 0; + struct ExprList_item *aOutEx = p->pEList->a; +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + int addrExplain; /* Address of OP_Explain instruction */ +#endif + + nKey = pOrderBy->nExpr - pSort->nOBSat; + if( pSort->nOBSat==0 || nKey==1 ){ + ExplainQueryPlan2(addrExplain, (pParse, 0, + "USE TEMP B-TREE FOR %sORDER BY", pSort->nOBSat?"LAST TERM OF ":"" + )); + }else{ + ExplainQueryPlan2(addrExplain, (pParse, 0, + "USE TEMP B-TREE FOR LAST %d TERMS OF ORDER BY", nKey + )); + } + sqlite3VdbeScanStatusRange(v, addrExplain,pSort->addrPush,pSort->addrPushEnd); + sqlite3VdbeScanStatusCounters(v, addrExplain, addrExplain, pSort->addrPush); + + + assert( addrBreak<0 ); + if( pSort->labelBkOut ){ + sqlite3VdbeAddOp2(v, OP_Gosub, pSort->regReturn, pSort->labelBkOut); + sqlite3VdbeGoto(v, addrBreak); + sqlite3VdbeResolveLabel(v, pSort->labelBkOut); + } + +#ifdef SQLITE_ENABLE_SORTER_REFERENCES + /* Open any cursors needed for sorter-reference expressions */ + for(i=0; inDefer; i++){ + Table *pTab = pSort->aDefer[i].pTab; + int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + sqlite3OpenTable(pParse, pSort->aDefer[i].iCsr, iDb, pTab, OP_OpenRead); + nRefKey = MAX(nRefKey, pSort->aDefer[i].nKey); + } +#endif + + iTab = pSort->iECursor; + if( eDest==SRT_Output || eDest==SRT_Coroutine || eDest==SRT_Mem ){ + if( eDest==SRT_Mem && p->iOffset ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, pDest->iSdst); + } + regRowid = 0; + regRow = pDest->iSdst; + }else{ + regRowid = sqlite3GetTempReg(pParse); + if( eDest==SRT_EphemTab || eDest==SRT_Table ){ + regRow = sqlite3GetTempReg(pParse); + nColumn = 0; + }else{ + regRow = sqlite3GetTempRange(pParse, nColumn); + } + } + if( pSort->sortFlags & SORTFLAG_UseSorter ){ + int regSortOut = ++pParse->nMem; + iSortTab = pParse->nTab++; + if( pSort->labelBkOut ){ + addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); + } + sqlite3VdbeAddOp3(v, OP_OpenPseudo, iSortTab, regSortOut, + nKey+1+nColumn+nRefKey); + if( addrOnce ) sqlite3VdbeJumpHere(v, addrOnce); + addr = 1 + sqlite3VdbeAddOp2(v, OP_SorterSort, iTab, addrBreak); + VdbeCoverage(v); + assert( p->iLimit==0 && p->iOffset==0 ); + sqlite3VdbeAddOp3(v, OP_SorterData, iTab, regSortOut, iSortTab); + bSeq = 0; + }else{ + addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak); VdbeCoverage(v); + codeOffset(v, p->iOffset, addrContinue); + iSortTab = iTab; + bSeq = 1; + if( p->iOffset>0 ){ + sqlite3VdbeAddOp2(v, OP_AddImm, p->iLimit, -1); + } + } + for(i=0, iCol=nKey+bSeq-1; inDefer ){ + int iKey = iCol+1; + int regKey = sqlite3GetTempRange(pParse, nRefKey); + + for(i=0; inDefer; i++){ + int iCsr = pSort->aDefer[i].iCsr; + Table *pTab = pSort->aDefer[i].pTab; + int nKey = pSort->aDefer[i].nKey; + + sqlite3VdbeAddOp1(v, OP_NullRow, iCsr); + if( HasRowid(pTab) ){ + sqlite3VdbeAddOp3(v, OP_Column, iSortTab, iKey++, regKey); + sqlite3VdbeAddOp3(v, OP_SeekRowid, iCsr, + sqlite3VdbeCurrentAddr(v)+1, regKey); + }else{ + int k; + int iJmp; + assert( sqlite3PrimaryKeyIndex(pTab)->nKeyCol==nKey ); + for(k=0; k=0; i--){ +#ifdef SQLITE_ENABLE_SORTER_REFERENCES + if( aOutEx[i].fg.bSorterRef ){ + sqlite3ExprCode(pParse, aOutEx[i].pExpr, regRow+i); + }else +#endif + { + int iRead; + if( aOutEx[i].u.x.iOrderByCol ){ + iRead = aOutEx[i].u.x.iOrderByCol-1; + }else{ + iRead = iCol--; + } + sqlite3VdbeAddOp3(v, OP_Column, iSortTab, iRead, regRow+i); + VdbeComment((v, "%s", aOutEx[i].zEName)); + } + } + sqlite3VdbeScanStatusRange(v, addrExplain, addrExplain, -1); + switch( eDest ){ + case SRT_Table: + case SRT_EphemTab: { + sqlite3VdbeAddOp3(v, OP_Column, iSortTab, nKey+bSeq, regRow); + sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, regRowid); + sqlite3VdbeAddOp3(v, OP_Insert, iParm, regRow, regRowid); + sqlite3VdbeChangeP5(v, OPFLAG_APPEND); + break; + } +#ifndef SQLITE_OMIT_SUBQUERY + case SRT_Set: { + assert( nColumn==sqlite3Strlen30(pDest->zAffSdst) ); + sqlite3VdbeAddOp4(v, OP_MakeRecord, regRow, nColumn, regRowid, + pDest->zAffSdst, nColumn); + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, regRowid, regRow, nColumn); + break; + } + case SRT_Mem: { + /* The LIMIT clause will terminate the loop for us */ + break; + } +#endif + case SRT_Upfrom: { + int i2 = pDest->iSDParm2; + int r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_MakeRecord,regRow+(i2<0),nColumn-(i2<0),r1); + if( i2<0 ){ + sqlite3VdbeAddOp3(v, OP_Insert, iParm, r1, regRow); + }else{ + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iParm, r1, regRow, i2); + } + break; + } + default: { + assert( eDest==SRT_Output || eDest==SRT_Coroutine ); + testcase( eDest==SRT_Output ); + testcase( eDest==SRT_Coroutine ); + if( eDest==SRT_Output ){ + sqlite3VdbeAddOp2(v, OP_ResultRow, pDest->iSdst, nColumn); + }else{ + sqlite3VdbeAddOp1(v, OP_Yield, pDest->iSDParm); + } + break; + } + } + if( regRowid ){ + if( eDest==SRT_Set ){ + sqlite3ReleaseTempRange(pParse, regRow, nColumn); + }else{ + sqlite3ReleaseTempReg(pParse, regRow); + } + sqlite3ReleaseTempReg(pParse, regRowid); + } + /* The bottom of the loop + */ + sqlite3VdbeResolveLabel(v, addrContinue); + if( pSort->sortFlags & SORTFLAG_UseSorter ){ + sqlite3VdbeAddOp2(v, OP_SorterNext, iTab, addr); VdbeCoverage(v); + }else{ + sqlite3VdbeAddOp2(v, OP_Next, iTab, addr); VdbeCoverage(v); + } + sqlite3VdbeScanStatusRange(v, addrExplain, sqlite3VdbeCurrentAddr(v)-1, -1); + if( pSort->regReturn ) sqlite3VdbeAddOp1(v, OP_Return, pSort->regReturn); + sqlite3VdbeResolveLabel(v, addrBreak); +} + +/* +** Return a pointer to a string containing the 'declaration type' of the +** expression pExpr. The string may be treated as static by the caller. +** +** The declaration type is the exact datatype definition extracted from the +** original CREATE TABLE statement if the expression is a column. The +** declaration type for a ROWID field is INTEGER. Exactly when an expression +** is considered a column can be complex in the presence of subqueries. The +** result-set expression in all of the following SELECT statements is +** considered a column by this function. +** +** SELECT col FROM tbl; +** SELECT (SELECT col FROM tbl; +** SELECT (SELECT col FROM tbl); +** SELECT abc FROM (SELECT col AS abc FROM tbl); +** +** The declaration type for any expression other than a column is NULL. +** +** This routine has either 3 or 6 parameters depending on whether or not +** the SQLITE_ENABLE_COLUMN_METADATA compile-time option is used. +*/ +#ifdef SQLITE_ENABLE_COLUMN_METADATA +# define columnType(A,B,C,D,E) columnTypeImpl(A,B,C,D,E) +#else /* if !defined(SQLITE_ENABLE_COLUMN_METADATA) */ +# define columnType(A,B,C,D,E) columnTypeImpl(A,B) +#endif +static const char *columnTypeImpl( + NameContext *pNC, +#ifndef SQLITE_ENABLE_COLUMN_METADATA + Expr *pExpr +#else + Expr *pExpr, + const char **pzOrigDb, + const char **pzOrigTab, + const char **pzOrigCol +#endif +){ + char const *zType = 0; + int j; +#ifdef SQLITE_ENABLE_COLUMN_METADATA + char const *zOrigDb = 0; + char const *zOrigTab = 0; + char const *zOrigCol = 0; +#endif + + assert( pExpr!=0 ); + assert( pNC->pSrcList!=0 ); + switch( pExpr->op ){ + case TK_COLUMN: { + /* The expression is a column. Locate the table the column is being + ** extracted from in NameContext.pSrcList. This table may be real + ** database table or a subquery. + */ + Table *pTab = 0; /* Table structure column is extracted from */ + Select *pS = 0; /* Select the column is extracted from */ + int iCol = pExpr->iColumn; /* Index of column in pTab */ + while( pNC && !pTab ){ + SrcList *pTabList = pNC->pSrcList; + for(j=0;jnSrc && pTabList->a[j].iCursor!=pExpr->iTable;j++); + if( jnSrc ){ + pTab = pTabList->a[j].pSTab; + if( pTabList->a[j].fg.isSubquery ){ + pS = pTabList->a[j].u4.pSubq->pSelect; + }else{ + pS = 0; + } + }else{ + pNC = pNC->pNext; + } + } + + if( pTab==0 ){ + /* At one time, code such as "SELECT new.x" within a trigger would + ** cause this condition to run. Since then, we have restructured how + ** trigger code is generated and so this condition is no longer + ** possible. However, it can still be true for statements like + ** the following: + ** + ** CREATE TABLE t1(col INTEGER); + ** SELECT (SELECT t1.col) FROM FROM t1; + ** + ** when columnType() is called on the expression "t1.col" in the + ** sub-select. In this case, set the column type to NULL, even + ** though it should really be "INTEGER". + ** + ** This is not a problem, as the column type of "t1.col" is never + ** used. When columnType() is called on the expression + ** "(SELECT t1.col)", the correct type is returned (see the TK_SELECT + ** branch below. */ + break; + } + + assert( pTab && ExprUseYTab(pExpr) && pExpr->y.pTab==pTab ); + if( pS ){ + /* The "table" is actually a sub-select or a view in the FROM clause + ** of the SELECT statement. Return the declaration type and origin + ** data for the result-set column of the sub-select. + */ + if( iColpEList->nExpr + && (!ViewCanHaveRowid || iCol>=0) + ){ + /* If iCol is less than zero, then the expression requests the + ** rowid of the sub-select or view. This expression is legal (see + ** test case misc2.2.2) - it always evaluates to NULL. + */ + NameContext sNC; + Expr *p = pS->pEList->a[iCol].pExpr; + sNC.pSrcList = pS->pSrc; + sNC.pNext = pNC; + sNC.pParse = pNC->pParse; + zType = columnType(&sNC, p,&zOrigDb,&zOrigTab,&zOrigCol); + } + }else{ + /* A real table or a CTE table */ + assert( !pS ); +#ifdef SQLITE_ENABLE_COLUMN_METADATA + if( iCol<0 ) iCol = pTab->iPKey; + assert( iCol==XN_ROWID || (iCol>=0 && iColnCol) ); + if( iCol<0 ){ + zType = "INTEGER"; + zOrigCol = "rowid"; + }else{ + zOrigCol = pTab->aCol[iCol].zCnName; + zType = sqlite3ColumnType(&pTab->aCol[iCol],0); + } + zOrigTab = pTab->zName; + if( pNC->pParse && pTab->pSchema ){ + int iDb = sqlite3SchemaToIndex(pNC->pParse->db, pTab->pSchema); + zOrigDb = pNC->pParse->db->aDb[iDb].zDbSName; + } +#else + assert( iCol==XN_ROWID || (iCol>=0 && iColnCol) ); + if( iCol<0 ){ + zType = "INTEGER"; + }else{ + zType = sqlite3ColumnType(&pTab->aCol[iCol],0); + } +#endif + } + break; + } +#ifndef SQLITE_OMIT_SUBQUERY + case TK_SELECT: { + /* The expression is a sub-select. Return the declaration type and + ** origin info for the single column in the result set of the SELECT + ** statement. + */ + NameContext sNC; + Select *pS; + Expr *p; + assert( ExprUseXSelect(pExpr) ); + pS = pExpr->x.pSelect; + p = pS->pEList->a[0].pExpr; + sNC.pSrcList = pS->pSrc; + sNC.pNext = pNC; + sNC.pParse = pNC->pParse; + zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol); + break; + } +#endif + } + +#ifdef SQLITE_ENABLE_COLUMN_METADATA + if( pzOrigDb ){ + assert( pzOrigTab && pzOrigCol ); + *pzOrigDb = zOrigDb; + *pzOrigTab = zOrigTab; + *pzOrigCol = zOrigCol; + } +#endif + return zType; +} + +/* +** Generate code that will tell the VDBE the declaration types of columns +** in the result set. +*/ +static void generateColumnTypes( + Parse *pParse, /* Parser context */ + SrcList *pTabList, /* List of tables */ + ExprList *pEList /* Expressions defining the result set */ +){ +#ifndef SQLITE_OMIT_DECLTYPE + Vdbe *v = pParse->pVdbe; + int i; + NameContext sNC; + sNC.pSrcList = pTabList; + sNC.pParse = pParse; + sNC.pNext = 0; + for(i=0; inExpr; i++){ + Expr *p = pEList->a[i].pExpr; + const char *zType; +#ifdef SQLITE_ENABLE_COLUMN_METADATA + const char *zOrigDb = 0; + const char *zOrigTab = 0; + const char *zOrigCol = 0; + zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol); + + /* The vdbe must make its own copy of the column-type and other + ** column specific strings, in case the schema is reset before this + ** virtual machine is deleted. + */ + sqlite3VdbeSetColName(v, i, COLNAME_DATABASE, zOrigDb, SQLITE_TRANSIENT); + sqlite3VdbeSetColName(v, i, COLNAME_TABLE, zOrigTab, SQLITE_TRANSIENT); + sqlite3VdbeSetColName(v, i, COLNAME_COLUMN, zOrigCol, SQLITE_TRANSIENT); +#else + zType = columnType(&sNC, p, 0, 0, 0); +#endif + sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType, SQLITE_TRANSIENT); + } +#else + UNUSED_PARAMETER(pParse); + UNUSED_PARAMETER(pTabList); + UNUSED_PARAMETER(pEList); +#endif /* !defined(SQLITE_OMIT_DECLTYPE) */ +} + + +/* +** Compute the column names for a SELECT statement. +** +** The only guarantee that SQLite makes about column names is that if the +** column has an AS clause assigning it a name, that will be the name used. +** That is the only documented guarantee. However, countless applications +** developed over the years have made baseless assumptions about column names +** and will break if those assumptions changes. Hence, use extreme caution +** when modifying this routine to avoid breaking legacy. +** +** See Also: sqlite3ColumnsFromExprList() +** +** The PRAGMA short_column_names and PRAGMA full_column_names settings are +** deprecated. The default setting is short=ON, full=OFF. 99.9% of all +** applications should operate this way. Nevertheless, we need to support the +** other modes for legacy: +** +** short=OFF, full=OFF: Column name is the text of the expression has it +** originally appears in the SELECT statement. In +** other words, the zSpan of the result expression. +** +** short=ON, full=OFF: (This is the default setting). If the result +** refers directly to a table column, then the +** result column name is just the table column +** name: COLUMN. Otherwise use zSpan. +** +** full=ON, short=ANY: If the result refers directly to a table column, +** then the result column name with the table name +** prefix, ex: TABLE.COLUMN. Otherwise use zSpan. +*/ +SQLITE_PRIVATE void sqlite3GenerateColumnNames( + Parse *pParse, /* Parser context */ + Select *pSelect /* Generate column names for this SELECT statement */ +){ + Vdbe *v = pParse->pVdbe; + int i; + Table *pTab; + SrcList *pTabList; + ExprList *pEList; + sqlite3 *db = pParse->db; + int fullName; /* TABLE.COLUMN if no AS clause and is a direct table ref */ + int srcName; /* COLUMN or TABLE.COLUMN if no AS clause and is direct */ + + if( pParse->colNamesSet ) return; + /* Column names are determined by the left-most term of a compound select */ + while( pSelect->pPrior ) pSelect = pSelect->pPrior; + TREETRACE(0x80,pParse,pSelect,("generating column names\n")); + pTabList = pSelect->pSrc; + pEList = pSelect->pEList; + assert( v!=0 ); + assert( pTabList!=0 ); + pParse->colNamesSet = 1; + fullName = (db->flags & SQLITE_FullColNames)!=0; + srcName = (db->flags & SQLITE_ShortColNames)!=0 || fullName; + sqlite3VdbeSetNumCols(v, pEList->nExpr); + for(i=0; inExpr; i++){ + Expr *p = pEList->a[i].pExpr; + + assert( p!=0 ); + assert( p->op!=TK_AGG_COLUMN ); /* Agg processing has not run yet */ + assert( p->op!=TK_COLUMN + || (ExprUseYTab(p) && p->y.pTab!=0) ); /* Covering idx not yet coded */ + if( pEList->a[i].zEName && pEList->a[i].fg.eEName==ENAME_NAME ){ + /* An AS clause always takes first priority */ + char *zName = pEList->a[i].zEName; + sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_TRANSIENT); + }else if( srcName && p->op==TK_COLUMN ){ + char *zCol; + int iCol = p->iColumn; + pTab = p->y.pTab; + assert( pTab!=0 ); + if( iCol<0 ) iCol = pTab->iPKey; + assert( iCol==-1 || (iCol>=0 && iColnCol) ); + if( iCol<0 ){ + zCol = "rowid"; + }else{ + zCol = pTab->aCol[iCol].zCnName; + } + if( fullName ){ + char *zName = 0; + zName = sqlite3MPrintf(db, "%s.%s", pTab->zName, zCol); + sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_DYNAMIC); + }else{ + sqlite3VdbeSetColName(v, i, COLNAME_NAME, zCol, SQLITE_TRANSIENT); + } + }else{ + const char *z = pEList->a[i].zEName; + z = z==0 ? sqlite3MPrintf(db, "column%d", i+1) : sqlite3DbStrDup(db, z); + sqlite3VdbeSetColName(v, i, COLNAME_NAME, z, SQLITE_DYNAMIC); + } + } + generateColumnTypes(pParse, pTabList, pEList); +} + +/* +** Given an expression list (which is really the list of expressions +** that form the result set of a SELECT statement) compute appropriate +** column names for a table that would hold the expression list. +** +** All column names will be unique. +** +** Only the column names are computed. Column.zType, Column.zColl, +** and other fields of Column are zeroed. +** +** Return SQLITE_OK on success. If a memory allocation error occurs, +** store NULL in *paCol and 0 in *pnCol and return SQLITE_NOMEM. +** +** The only guarantee that SQLite makes about column names is that if the +** column has an AS clause assigning it a name, that will be the name used. +** That is the only documented guarantee. However, countless applications +** developed over the years have made baseless assumptions about column names +** and will break if those assumptions changes. Hence, use extreme caution +** when modifying this routine to avoid breaking legacy. +** +** See Also: sqlite3GenerateColumnNames() +*/ +SQLITE_PRIVATE int sqlite3ColumnsFromExprList( + Parse *pParse, /* Parsing context */ + ExprList *pEList, /* Expr list from which to derive column names */ + i16 *pnCol, /* Write the number of columns here */ + Column **paCol /* Write the new column list here */ +){ + sqlite3 *db = pParse->db; /* Database connection */ + int i, j; /* Loop counters */ + u32 cnt; /* Index added to make the name unique */ + Column *aCol, *pCol; /* For looping over result columns */ + int nCol; /* Number of columns in the result set */ + char *zName; /* Column name */ + int nName; /* Size of name in zName[] */ + Hash ht; /* Hash table of column names */ + Table *pTab; + + sqlite3HashInit(&ht); + if( pEList ){ + nCol = pEList->nExpr; + aCol = sqlite3DbMallocZero(db, sizeof(aCol[0])*nCol); + testcase( aCol==0 ); + if( NEVER(nCol>32767) ) nCol = 32767; + }else{ + nCol = 0; + aCol = 0; + } + assert( nCol==(i16)nCol ); + *pnCol = nCol; + *paCol = aCol; + + for(i=0, pCol=aCol; inErr; i++, pCol++){ + struct ExprList_item *pX = &pEList->a[i]; + struct ExprList_item *pCollide; + /* Get an appropriate name for the column + */ + if( (zName = pX->zEName)!=0 && pX->fg.eEName==ENAME_NAME ){ + /* If the column contains an "AS " phrase, use as the name */ + }else{ + Expr *pColExpr = sqlite3ExprSkipCollateAndLikely(pX->pExpr); + while( ALWAYS(pColExpr!=0) && pColExpr->op==TK_DOT ){ + pColExpr = pColExpr->pRight; + assert( pColExpr!=0 ); + } + if( pColExpr->op==TK_COLUMN + && ALWAYS( ExprUseYTab(pColExpr) ) + && ALWAYS( pColExpr->y.pTab!=0 ) + ){ + /* For columns use the column name name */ + int iCol = pColExpr->iColumn; + pTab = pColExpr->y.pTab; + if( iCol<0 ) iCol = pTab->iPKey; + zName = iCol>=0 ? pTab->aCol[iCol].zCnName : "rowid"; + }else if( pColExpr->op==TK_ID ){ + assert( !ExprHasProperty(pColExpr, EP_IntValue) ); + zName = pColExpr->u.zToken; + }else{ + /* Use the original text of the column expression as its name */ + assert( zName==pX->zEName ); /* pointer comparison intended */ + } + } + if( zName && !sqlite3IsTrueOrFalse(zName) ){ + zName = sqlite3DbStrDup(db, zName); + }else{ + zName = sqlite3MPrintf(db,"column%d",i+1); + } + + /* Make sure the column name is unique. If the name is not unique, + ** append an integer to the name so that it becomes unique. + */ + cnt = 0; + while( zName && (pCollide = sqlite3HashFind(&ht, zName))!=0 ){ + if( pCollide->fg.bUsingTerm ){ + pCol->colFlags |= COLFLAG_NOEXPAND; + } + nName = sqlite3Strlen30(zName); + if( nName>0 ){ + for(j=nName-1; j>0 && sqlite3Isdigit(zName[j]); j--){} + if( zName[j]==':' ) nName = j; + } + zName = sqlite3MPrintf(db, "%.*z:%u", nName, zName, ++cnt); + sqlite3ProgressCheck(pParse); + if( cnt>3 ){ + sqlite3_randomness(sizeof(cnt), &cnt); + } + } + pCol->zCnName = zName; + pCol->hName = sqlite3StrIHash(zName); + if( pX->fg.bNoExpand ){ + pCol->colFlags |= COLFLAG_NOEXPAND; + } + sqlite3ColumnPropertiesFromName(0, pCol); + if( zName && sqlite3HashInsert(&ht, zName, pX)==pX ){ + sqlite3OomFault(db); + } + } + sqlite3HashClear(&ht); + if( pParse->nErr ){ + for(j=0; jrc; + } + return SQLITE_OK; +} + +/* +** pTab is a transient Table object that represents a subquery of some +** kind (maybe a parenthesized subquery in the FROM clause of a larger +** query, or a VIEW, or a CTE). This routine computes type information +** for that Table object based on the Select object that implements the +** subquery. For the purposes of this routine, "type information" means: +** +** * The datatype name, as it might appear in a CREATE TABLE statement +** * Which collating sequence to use for the column +** * The affinity of the column +*/ +SQLITE_PRIVATE void sqlite3SubqueryColumnTypes( + Parse *pParse, /* Parsing contexts */ + Table *pTab, /* Add column type information to this table */ + Select *pSelect, /* SELECT used to determine types and collations */ + char aff /* Default affinity. */ +){ + sqlite3 *db = pParse->db; + Column *pCol; + CollSeq *pColl; + int i,j; + Expr *p; + struct ExprList_item *a; + NameContext sNC; + + assert( pSelect!=0 ); + assert( (pSelect->selFlags & SF_Resolved)!=0 ); + assert( pTab->nCol==pSelect->pEList->nExpr || pParse->nErr>0 ); + assert( aff==SQLITE_AFF_NONE || aff==SQLITE_AFF_BLOB ); + if( db->mallocFailed || IN_RENAME_OBJECT ) return; + while( pSelect->pPrior ) pSelect = pSelect->pPrior; + a = pSelect->pEList->a; + memset(&sNC, 0, sizeof(sNC)); + sNC.pSrcList = pSelect->pSrc; + for(i=0, pCol=pTab->aCol; inCol; i++, pCol++){ + const char *zType; + i64 n; + int m = 0; + Select *pS2 = pSelect; + pTab->tabFlags |= (pCol->colFlags & COLFLAG_NOINSERT); + p = a[i].pExpr; + /* pCol->szEst = ... // Column size est for SELECT tables never used */ + pCol->affinity = sqlite3ExprAffinity(p); + while( pCol->affinity<=SQLITE_AFF_NONE && pS2->pNext!=0 ){ + m |= sqlite3ExprDataType(pS2->pEList->a[i].pExpr); + pS2 = pS2->pNext; + pCol->affinity = sqlite3ExprAffinity(pS2->pEList->a[i].pExpr); + } + if( pCol->affinity<=SQLITE_AFF_NONE ){ + pCol->affinity = aff; + } + if( pCol->affinity>=SQLITE_AFF_TEXT && (pS2->pNext || pS2!=pSelect) ){ + for(pS2=pS2->pNext; pS2; pS2=pS2->pNext){ + m |= sqlite3ExprDataType(pS2->pEList->a[i].pExpr); + } + if( pCol->affinity==SQLITE_AFF_TEXT && (m&0x01)!=0 ){ + pCol->affinity = SQLITE_AFF_BLOB; + }else + if( pCol->affinity>=SQLITE_AFF_NUMERIC && (m&0x02)!=0 ){ + pCol->affinity = SQLITE_AFF_BLOB; + } + if( pCol->affinity>=SQLITE_AFF_NUMERIC && p->op==TK_CAST ){ + pCol->affinity = SQLITE_AFF_FLEXNUM; + } + } + zType = columnType(&sNC, p, 0, 0, 0); + if( zType==0 || pCol->affinity!=sqlite3AffinityType(zType, 0) ){ + if( pCol->affinity==SQLITE_AFF_NUMERIC + || pCol->affinity==SQLITE_AFF_FLEXNUM + ){ + zType = "NUM"; + }else{ + zType = 0; + for(j=1; jaffinity ){ + zType = sqlite3StdType[j]; + break; + } + } + } + } + if( zType ){ + const i64 k = sqlite3Strlen30(zType); + n = sqlite3Strlen30(pCol->zCnName); + pCol->zCnName = sqlite3DbReallocOrFree(db, pCol->zCnName, n+k+2); + pCol->colFlags &= ~(COLFLAG_HASTYPE|COLFLAG_HASCOLL); + if( pCol->zCnName ){ + memcpy(&pCol->zCnName[n+1], zType, k+1); + pCol->colFlags |= COLFLAG_HASTYPE; + } + } + pColl = sqlite3ExprCollSeq(pParse, p); + if( pColl ){ + assert( pTab->pIndex==0 ); + sqlite3ColumnSetColl(db, pCol, pColl->zName); + } + } + pTab->szTabRow = 1; /* Any non-zero value works */ +} + +/* +** Given a SELECT statement, generate a Table structure that describes +** the result set of that SELECT. +*/ +SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect, char aff){ + Table *pTab; + sqlite3 *db = pParse->db; + u64 savedFlags; + + savedFlags = db->flags; + db->flags &= ~(u64)SQLITE_FullColNames; + db->flags |= SQLITE_ShortColNames; + sqlite3SelectPrep(pParse, pSelect, 0); + db->flags = savedFlags; + if( pParse->nErr ) return 0; + while( pSelect->pPrior ) pSelect = pSelect->pPrior; + pTab = sqlite3DbMallocZero(db, sizeof(Table) ); + if( pTab==0 ){ + return 0; + } + pTab->nTabRef = 1; + pTab->zName = 0; + pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) ); + sqlite3ColumnsFromExprList(pParse, pSelect->pEList, &pTab->nCol, &pTab->aCol); + sqlite3SubqueryColumnTypes(pParse, pTab, pSelect, aff); + pTab->iPKey = -1; + if( db->mallocFailed ){ + sqlite3DeleteTable(db, pTab); + return 0; + } + return pTab; +} + +/* +** Get a VDBE for the given parser context. Create a new one if necessary. +** If an error occurs, return NULL and leave a message in pParse. +*/ +SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse *pParse){ + if( pParse->pVdbe ){ + return pParse->pVdbe; + } + if( pParse->pToplevel==0 + && OptimizationEnabled(pParse->db,SQLITE_FactorOutConst) + ){ + pParse->okConstFactor = 1; + } + return sqlite3VdbeCreate(pParse); +} + + +/* +** Compute the iLimit and iOffset fields of the SELECT based on the +** pLimit expressions. pLimit->pLeft and pLimit->pRight hold the expressions +** that appear in the original SQL statement after the LIMIT and OFFSET +** keywords. Or NULL if those keywords are omitted. iLimit and iOffset +** are the integer memory register numbers for counters used to compute +** the limit and offset. If there is no limit and/or offset, then +** iLimit and iOffset are negative. +** +** This routine changes the values of iLimit and iOffset only if +** a limit or offset is defined by pLimit->pLeft and pLimit->pRight. iLimit +** and iOffset should have been preset to appropriate default values (zero) +** prior to calling this routine. +** +** The iOffset register (if it exists) is initialized to the value +** of the OFFSET. The iLimit register is initialized to LIMIT. Register +** iOffset+1 is initialized to LIMIT+OFFSET. +** +** Only if pLimit->pLeft!=0 do the limit registers get +** redefined. The UNION ALL operator uses this property to force +** the reuse of the same limit and offset registers across multiple +** SELECT statements. +*/ +static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){ + Vdbe *v = 0; + int iLimit = 0; + int iOffset; + int n; + Expr *pLimit = p->pLimit; + + if( p->iLimit ) return; + + /* + ** "LIMIT -1" always shows all rows. There is some + ** controversy about what the correct behavior should be. + ** The current implementation interprets "LIMIT 0" to mean + ** no rows. + */ + if( pLimit ){ + assert( pLimit->op==TK_LIMIT ); + assert( pLimit->pLeft!=0 ); + p->iLimit = iLimit = ++pParse->nMem; + v = sqlite3GetVdbe(pParse); + assert( v!=0 ); + if( sqlite3ExprIsInteger(pLimit->pLeft, &n, pParse) ){ + sqlite3VdbeAddOp2(v, OP_Integer, n, iLimit); + VdbeComment((v, "LIMIT counter")); + if( n==0 ){ + sqlite3VdbeGoto(v, iBreak); + }else if( n>=0 && p->nSelectRow>sqlite3LogEst((u64)n) ){ + p->nSelectRow = sqlite3LogEst((u64)n); + p->selFlags |= SF_FixedLimit; + } + }else{ + sqlite3ExprCode(pParse, pLimit->pLeft, iLimit); + sqlite3VdbeAddOp1(v, OP_MustBeInt, iLimit); VdbeCoverage(v); + VdbeComment((v, "LIMIT counter")); + sqlite3VdbeAddOp2(v, OP_IfNot, iLimit, iBreak); VdbeCoverage(v); + } + if( pLimit->pRight ){ + p->iOffset = iOffset = ++pParse->nMem; + pParse->nMem++; /* Allocate an extra register for limit+offset */ + sqlite3ExprCode(pParse, pLimit->pRight, iOffset); + sqlite3VdbeAddOp1(v, OP_MustBeInt, iOffset); VdbeCoverage(v); + VdbeComment((v, "OFFSET counter")); + sqlite3VdbeAddOp3(v, OP_OffsetLimit, iLimit, iOffset+1, iOffset); + VdbeComment((v, "LIMIT+OFFSET")); + } + } +} + +#ifndef SQLITE_OMIT_COMPOUND_SELECT +/* +** Return the appropriate collating sequence for the iCol-th column of +** the result set for the compound-select statement "p". Return NULL if +** the column has no default collating sequence. +** +** The collating sequence for the compound select is taken from the +** left-most term of the select that has a collating sequence. +*/ +static CollSeq *multiSelectCollSeq(Parse *pParse, Select *p, int iCol){ + CollSeq *pRet; + if( p->pPrior ){ + pRet = multiSelectCollSeq(pParse, p->pPrior, iCol); + }else{ + pRet = 0; + } + assert( iCol>=0 ); + /* iCol must be less than p->pEList->nExpr. Otherwise an error would + ** have been thrown during name resolution and we would not have gotten + ** this far */ + if( pRet==0 && ALWAYS(iColpEList->nExpr) ){ + pRet = sqlite3ExprCollSeq(pParse, p->pEList->a[iCol].pExpr); + } + return pRet; +} + +/* +** The select statement passed as the second parameter is a compound SELECT +** with an ORDER BY clause. This function allocates and returns a KeyInfo +** structure suitable for implementing the ORDER BY. +** +** Space to hold the KeyInfo structure is obtained from malloc. The calling +** function is responsible for ensuring that this structure is eventually +** freed. +*/ +static KeyInfo *multiSelectOrderByKeyInfo(Parse *pParse, Select *p, int nExtra){ + ExprList *pOrderBy = p->pOrderBy; + int nOrderBy = ALWAYS(pOrderBy!=0) ? pOrderBy->nExpr : 0; + sqlite3 *db = pParse->db; + KeyInfo *pRet = sqlite3KeyInfoAlloc(db, nOrderBy+nExtra, 1); + if( pRet ){ + int i; + for(i=0; ia[i]; + Expr *pTerm = pItem->pExpr; + CollSeq *pColl; + + if( pTerm->flags & EP_Collate ){ + pColl = sqlite3ExprCollSeq(pParse, pTerm); + }else{ + pColl = multiSelectCollSeq(pParse, p, pItem->u.x.iOrderByCol-1); + if( pColl==0 ) pColl = db->pDfltColl; + pOrderBy->a[i].pExpr = + sqlite3ExprAddCollateString(pParse, pTerm, pColl->zName); + } + assert( sqlite3KeyInfoIsWriteable(pRet) ); + pRet->aColl[i] = pColl; + pRet->aSortFlags[i] = pOrderBy->a[i].fg.sortFlags; + } + } + + return pRet; +} + +#ifndef SQLITE_OMIT_CTE +/* +** This routine generates VDBE code to compute the content of a WITH RECURSIVE +** query of the form: +** +** AS ( UNION [ALL] ) +** \___________/ \_______________/ +** p->pPrior p +** +** +** There is exactly one reference to the recursive-table in the FROM clause +** of recursive-query, marked with the SrcList->a[].fg.isRecursive flag. +** +** The setup-query runs once to generate an initial set of rows that go +** into a Queue table. Rows are extracted from the Queue table one by +** one. Each row extracted from Queue is output to pDest. Then the single +** extracted row (now in the iCurrent table) becomes the content of the +** recursive-table for a recursive-query run. The output of the recursive-query +** is added back into the Queue table. Then another row is extracted from Queue +** and the iteration continues until the Queue table is empty. +** +** If the compound query operator is UNION then no duplicate rows are ever +** inserted into the Queue table. The iDistinct table keeps a copy of all rows +** that have ever been inserted into Queue and causes duplicates to be +** discarded. If the operator is UNION ALL, then duplicates are allowed. +** +** If the query has an ORDER BY, then entries in the Queue table are kept in +** ORDER BY order and the first entry is extracted for each cycle. Without +** an ORDER BY, the Queue table is just a FIFO. +** +** If a LIMIT clause is provided, then the iteration stops after LIMIT rows +** have been output to pDest. A LIMIT of zero means to output no rows and a +** negative LIMIT means to output all rows. If there is also an OFFSET clause +** with a positive value, then the first OFFSET outputs are discarded rather +** than being sent to pDest. The LIMIT count does not begin until after OFFSET +** rows have been skipped. +*/ +static void generateWithRecursiveQuery( + Parse *pParse, /* Parsing context */ + Select *p, /* The recursive SELECT to be coded */ + SelectDest *pDest /* What to do with query results */ +){ + SrcList *pSrc = p->pSrc; /* The FROM clause of the recursive query */ + int nCol = p->pEList->nExpr; /* Number of columns in the recursive table */ + Vdbe *v = pParse->pVdbe; /* The prepared statement under construction */ + Select *pSetup; /* The setup query */ + Select *pFirstRec; /* Left-most recursive term */ + int addrTop; /* Top of the loop */ + int addrCont, addrBreak; /* CONTINUE and BREAK addresses */ + int iCurrent = 0; /* The Current table */ + int regCurrent; /* Register holding Current table */ + int iQueue; /* The Queue table */ + int iDistinct = 0; /* To ensure unique results if UNION */ + int eDest = SRT_Fifo; /* How to write to Queue */ + SelectDest destQueue; /* SelectDest targeting the Queue table */ + int i; /* Loop counter */ + int rc; /* Result code */ + ExprList *pOrderBy; /* The ORDER BY clause */ + Expr *pLimit; /* Saved LIMIT and OFFSET */ + int regLimit, regOffset; /* Registers used by LIMIT and OFFSET */ + +#ifndef SQLITE_OMIT_WINDOWFUNC + if( p->pWin ){ + sqlite3ErrorMsg(pParse, "cannot use window functions in recursive queries"); + return; + } +#endif + + /* Obtain authorization to do a recursive query */ + if( sqlite3AuthCheck(pParse, SQLITE_RECURSIVE, 0, 0, 0) ) return; + + /* Process the LIMIT and OFFSET clauses, if they exist */ + addrBreak = sqlite3VdbeMakeLabel(pParse); + p->nSelectRow = 320; /* 4 billion rows */ + computeLimitRegisters(pParse, p, addrBreak); + pLimit = p->pLimit; + regLimit = p->iLimit; + regOffset = p->iOffset; + p->pLimit = 0; + p->iLimit = p->iOffset = 0; + pOrderBy = p->pOrderBy; + + /* Locate the cursor number of the Current table */ + for(i=0; ALWAYS(inSrc); i++){ + if( pSrc->a[i].fg.isRecursive ){ + iCurrent = pSrc->a[i].iCursor; + break; + } + } + + /* Allocate cursors numbers for Queue and Distinct. The cursor number for + ** the Distinct table must be exactly one greater than Queue in order + ** for the SRT_DistFifo and SRT_DistQueue destinations to work. */ + iQueue = pParse->nTab++; + if( p->op==TK_UNION ){ + eDest = pOrderBy ? SRT_DistQueue : SRT_DistFifo; + iDistinct = pParse->nTab++; + }else{ + eDest = pOrderBy ? SRT_Queue : SRT_Fifo; + } + sqlite3SelectDestInit(&destQueue, eDest, iQueue); + + /* Allocate cursors for Current, Queue, and Distinct. */ + regCurrent = ++pParse->nMem; + sqlite3VdbeAddOp3(v, OP_OpenPseudo, iCurrent, regCurrent, nCol); + if( pOrderBy ){ + KeyInfo *pKeyInfo = multiSelectOrderByKeyInfo(pParse, p, 1); + sqlite3VdbeAddOp4(v, OP_OpenEphemeral, iQueue, pOrderBy->nExpr+2, 0, + (char*)pKeyInfo, P4_KEYINFO); + destQueue.pOrderBy = pOrderBy; + }else{ + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iQueue, nCol); + } + VdbeComment((v, "Queue table")); + if( iDistinct ){ + p->addrOpenEphm[0] = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iDistinct, 0); + p->selFlags |= SF_UsesEphemeral; + } + + /* Detach the ORDER BY clause from the compound SELECT */ + p->pOrderBy = 0; + + /* Figure out how many elements of the compound SELECT are part of the + ** recursive query. Make sure no recursive elements use aggregate + ** functions. Mark the recursive elements as UNION ALL even if they + ** are really UNION because the distinctness will be enforced by the + ** iDistinct table. pFirstRec is left pointing to the left-most + ** recursive term of the CTE. + */ + for(pFirstRec=p; ALWAYS(pFirstRec!=0); pFirstRec=pFirstRec->pPrior){ + if( pFirstRec->selFlags & SF_Aggregate ){ + sqlite3ErrorMsg(pParse, "recursive aggregate queries not supported"); + goto end_of_recursive_query; + } + pFirstRec->op = TK_ALL; + if( (pFirstRec->pPrior->selFlags & SF_Recursive)==0 ) break; + } + + /* Store the results of the setup-query in Queue. */ + pSetup = pFirstRec->pPrior; + pSetup->pNext = 0; + ExplainQueryPlan((pParse, 1, "SETUP")); + rc = sqlite3Select(pParse, pSetup, &destQueue); + pSetup->pNext = p; + if( rc ) goto end_of_recursive_query; + + /* Find the next row in the Queue and output that row */ + addrTop = sqlite3VdbeAddOp2(v, OP_Rewind, iQueue, addrBreak); VdbeCoverage(v); + + /* Transfer the next row in Queue over to Current */ + sqlite3VdbeAddOp1(v, OP_NullRow, iCurrent); /* To reset column cache */ + if( pOrderBy ){ + sqlite3VdbeAddOp3(v, OP_Column, iQueue, pOrderBy->nExpr+1, regCurrent); + }else{ + sqlite3VdbeAddOp2(v, OP_RowData, iQueue, regCurrent); + } + sqlite3VdbeAddOp1(v, OP_Delete, iQueue); + + /* Output the single row in Current */ + addrCont = sqlite3VdbeMakeLabel(pParse); + codeOffset(v, regOffset, addrCont); + selectInnerLoop(pParse, p, iCurrent, + 0, 0, pDest, addrCont, addrBreak); + if( regLimit ){ + sqlite3VdbeAddOp2(v, OP_DecrJumpZero, regLimit, addrBreak); + VdbeCoverage(v); + } + sqlite3VdbeResolveLabel(v, addrCont); + + /* Execute the recursive SELECT taking the single row in Current as + ** the value for the recursive-table. Store the results in the Queue. + */ + pFirstRec->pPrior = 0; + ExplainQueryPlan((pParse, 1, "RECURSIVE STEP")); + sqlite3Select(pParse, p, &destQueue); + assert( pFirstRec->pPrior==0 ); + pFirstRec->pPrior = pSetup; + + /* Keep running the loop until the Queue is empty */ + sqlite3VdbeGoto(v, addrTop); + sqlite3VdbeResolveLabel(v, addrBreak); + +end_of_recursive_query: + sqlite3ExprListDelete(pParse->db, p->pOrderBy); + p->pOrderBy = pOrderBy; + p->pLimit = pLimit; + return; +} +#endif /* SQLITE_OMIT_CTE */ + +/* Forward references */ +static int multiSelectOrderBy( + Parse *pParse, /* Parsing context */ + Select *p, /* The right-most of SELECTs to be coded */ + SelectDest *pDest /* What to do with query results */ +); + +/* +** Handle the special case of a compound-select that originates from a +** VALUES clause. By handling this as a special case, we avoid deep +** recursion, and thus do not need to enforce the SQLITE_LIMIT_COMPOUND_SELECT +** on a VALUES clause. +** +** Because the Select object originates from a VALUES clause: +** (1) There is no LIMIT or OFFSET or else there is a LIMIT of exactly 1 +** (2) All terms are UNION ALL +** (3) There is no ORDER BY clause +** +** The "LIMIT of exactly 1" case of condition (1) comes about when a VALUES +** clause occurs within scalar expression (ex: "SELECT (VALUES(1),(2),(3))"). +** The sqlite3CodeSubselect will have added the LIMIT 1 clause in tht case. +** Since the limit is exactly 1, we only need to evaluate the left-most VALUES. +*/ +static int multiSelectValues( + Parse *pParse, /* Parsing context */ + Select *p, /* The right-most of SELECTs to be coded */ + SelectDest *pDest /* What to do with query results */ +){ + int nRow = 1; + int rc = 0; + int bShowAll = p->pLimit==0; + assert( p->selFlags & SF_MultiValue ); + do{ + assert( p->selFlags & SF_Values ); + assert( p->op==TK_ALL || (p->op==TK_SELECT && p->pPrior==0) ); + assert( p->pNext==0 || p->pEList->nExpr==p->pNext->pEList->nExpr ); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( p->pWin ) return -1; +#endif + if( p->pPrior==0 ) break; + assert( p->pPrior->pNext==p ); + p = p->pPrior; + nRow += bShowAll; + }while(1); + ExplainQueryPlan((pParse, 0, "SCAN %d CONSTANT ROW%s", nRow, + nRow==1 ? "" : "S")); + while( p ){ + selectInnerLoop(pParse, p, -1, 0, 0, pDest, 1, 1); + if( !bShowAll ) break; + p->nSelectRow = nRow; + p = p->pNext; + } + return rc; +} + +/* +** Return true if the SELECT statement which is known to be the recursive +** part of a recursive CTE still has its anchor terms attached. If the +** anchor terms have already been removed, then return false. +*/ +static int hasAnchor(Select *p){ + while( p && (p->selFlags & SF_Recursive)!=0 ){ p = p->pPrior; } + return p!=0; +} + +/* +** This routine is called to process a compound query form from +** two or more separate queries using UNION, UNION ALL, EXCEPT, or +** INTERSECT +** +** "p" points to the right-most of the two queries. the query on the +** left is p->pPrior. The left query could also be a compound query +** in which case this routine will be called recursively. +** +** The results of the total query are to be written into a destination +** of type eDest with parameter iParm. +** +** Example 1: Consider a three-way compound SQL statement. +** +** SELECT a FROM t1 UNION SELECT b FROM t2 UNION SELECT c FROM t3 +** +** This statement is parsed up as follows: +** +** SELECT c FROM t3 +** | +** `-----> SELECT b FROM t2 +** | +** `------> SELECT a FROM t1 +** +** The arrows in the diagram above represent the Select.pPrior pointer. +** So if this routine is called with p equal to the t3 query, then +** pPrior will be the t2 query. p->op will be TK_UNION in this case. +** +** Notice that because of the way SQLite parses compound SELECTs, the +** individual selects always group from left to right. +*/ +static int multiSelect( + Parse *pParse, /* Parsing context */ + Select *p, /* The right-most of SELECTs to be coded */ + SelectDest *pDest /* What to do with query results */ +){ + int rc = SQLITE_OK; /* Success code from a subroutine */ + Select *pPrior; /* Another SELECT immediately to our left */ + Vdbe *v; /* Generate code to this VDBE */ + SelectDest dest; /* Alternative data destination */ + Select *pDelete = 0; /* Chain of simple selects to delete */ + sqlite3 *db; /* Database connection */ + + /* Make sure there is no ORDER BY or LIMIT clause on prior SELECTs. Only + ** the last (right-most) SELECT in the series may have an ORDER BY or LIMIT. + */ + assert( p && p->pPrior ); /* Calling function guarantees this much */ + assert( (p->selFlags & SF_Recursive)==0 || p->op==TK_ALL || p->op==TK_UNION ); + assert( p->selFlags & SF_Compound ); + db = pParse->db; + pPrior = p->pPrior; + dest = *pDest; + assert( pPrior->pOrderBy==0 ); + assert( pPrior->pLimit==0 ); + + v = sqlite3GetVdbe(pParse); + assert( v!=0 ); /* The VDBE already created by calling function */ + + /* Create the destination temporary table if necessary + */ + if( dest.eDest==SRT_EphemTab ){ + assert( p->pEList ); + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, dest.iSDParm, p->pEList->nExpr); + dest.eDest = SRT_Table; + } + + /* Special handling for a compound-select that originates as a VALUES clause. + */ + if( p->selFlags & SF_MultiValue ){ + rc = multiSelectValues(pParse, p, &dest); + if( rc>=0 ) goto multi_select_end; + rc = SQLITE_OK; + } + + /* Make sure all SELECTs in the statement have the same number of elements + ** in their result sets. + */ + assert( p->pEList && pPrior->pEList ); + assert( p->pEList->nExpr==pPrior->pEList->nExpr ); + +#ifndef SQLITE_OMIT_CTE + if( (p->selFlags & SF_Recursive)!=0 && hasAnchor(p) ){ + generateWithRecursiveQuery(pParse, p, &dest); + }else +#endif + + /* Compound SELECTs that have an ORDER BY clause are handled separately. + */ + if( p->pOrderBy ){ + return multiSelectOrderBy(pParse, p, pDest); + }else{ + +#ifndef SQLITE_OMIT_EXPLAIN + if( pPrior->pPrior==0 ){ + ExplainQueryPlan((pParse, 1, "COMPOUND QUERY")); + ExplainQueryPlan((pParse, 1, "LEFT-MOST SUBQUERY")); + } +#endif + + /* Generate code for the left and right SELECT statements. + */ + switch( p->op ){ + case TK_ALL: { + int addr = 0; + int nLimit = 0; /* Initialize to suppress harmless compiler warning */ + assert( !pPrior->pLimit ); + pPrior->iLimit = p->iLimit; + pPrior->iOffset = p->iOffset; + pPrior->pLimit = p->pLimit; + TREETRACE(0x200, pParse, p, ("multiSelect UNION ALL left...\n")); + rc = sqlite3Select(pParse, pPrior, &dest); + pPrior->pLimit = 0; + if( rc ){ + goto multi_select_end; + } + p->pPrior = 0; + p->iLimit = pPrior->iLimit; + p->iOffset = pPrior->iOffset; + if( p->iLimit ){ + addr = sqlite3VdbeAddOp1(v, OP_IfNot, p->iLimit); VdbeCoverage(v); + VdbeComment((v, "Jump ahead if LIMIT reached")); + if( p->iOffset ){ + sqlite3VdbeAddOp3(v, OP_OffsetLimit, + p->iLimit, p->iOffset+1, p->iOffset); + } + } + ExplainQueryPlan((pParse, 1, "UNION ALL")); + TREETRACE(0x200, pParse, p, ("multiSelect UNION ALL right...\n")); + rc = sqlite3Select(pParse, p, &dest); + testcase( rc!=SQLITE_OK ); + pDelete = p->pPrior; + p->pPrior = pPrior; + p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow); + if( p->pLimit + && sqlite3ExprIsInteger(p->pLimit->pLeft, &nLimit, pParse) + && nLimit>0 && p->nSelectRow > sqlite3LogEst((u64)nLimit) + ){ + p->nSelectRow = sqlite3LogEst((u64)nLimit); + } + if( addr ){ + sqlite3VdbeJumpHere(v, addr); + } + break; + } + case TK_EXCEPT: + case TK_UNION: { + int unionTab; /* Cursor number of the temp table holding result */ + u8 op = 0; /* One of the SRT_ operations to apply to self */ + int priorOp; /* The SRT_ operation to apply to prior selects */ + Expr *pLimit; /* Saved values of p->nLimit */ + int addr; + int emptyBypass = 0; /* IfEmpty opcode to bypass RHS */ + SelectDest uniondest; + + + testcase( p->op==TK_EXCEPT ); + testcase( p->op==TK_UNION ); + priorOp = SRT_Union; + if( dest.eDest==priorOp ){ + /* We can reuse a temporary table generated by a SELECT to our + ** right. + */ + assert( p->pLimit==0 ); /* Not allowed on leftward elements */ + unionTab = dest.iSDParm; + }else{ + /* We will need to create our own temporary table to hold the + ** intermediate results. + */ + unionTab = pParse->nTab++; + assert( p->pOrderBy==0 ); + addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, unionTab, 0); + assert( p->addrOpenEphm[0] == -1 ); + p->addrOpenEphm[0] = addr; + findRightmost(p)->selFlags |= SF_UsesEphemeral; + assert( p->pEList ); + } + + + /* Code the SELECT statements to our left + */ + assert( !pPrior->pOrderBy ); + sqlite3SelectDestInit(&uniondest, priorOp, unionTab); + TREETRACE(0x200, pParse, p, ("multiSelect EXCEPT/UNION left...\n")); + rc = sqlite3Select(pParse, pPrior, &uniondest); + if( rc ){ + goto multi_select_end; + } + + /* Code the current SELECT statement + */ + if( p->op==TK_EXCEPT ){ + op = SRT_Except; + emptyBypass = sqlite3VdbeAddOp1(v, OP_IfEmpty, unionTab); + VdbeCoverage(v); + }else{ + assert( p->op==TK_UNION ); + op = SRT_Union; + } + p->pPrior = 0; + pLimit = p->pLimit; + p->pLimit = 0; + uniondest.eDest = op; + ExplainQueryPlan((pParse, 1, "%s USING TEMP B-TREE", + sqlite3SelectOpName(p->op))); + TREETRACE(0x200, pParse, p, ("multiSelect EXCEPT/UNION right...\n")); + rc = sqlite3Select(pParse, p, &uniondest); + testcase( rc!=SQLITE_OK ); + assert( p->pOrderBy==0 ); + pDelete = p->pPrior; + p->pPrior = pPrior; + p->pOrderBy = 0; + if( p->op==TK_UNION ){ + p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow); + } + if( emptyBypass ) sqlite3VdbeJumpHere(v, emptyBypass); + sqlite3ExprDelete(db, p->pLimit); + p->pLimit = pLimit; + p->iLimit = 0; + p->iOffset = 0; + + /* Convert the data in the temporary table into whatever form + ** it is that we currently need. + */ + assert( unionTab==dest.iSDParm || dest.eDest!=priorOp ); + assert( p->pEList || db->mallocFailed ); + if( dest.eDest!=priorOp && db->mallocFailed==0 ){ + int iCont, iBreak, iStart; + iBreak = sqlite3VdbeMakeLabel(pParse); + iCont = sqlite3VdbeMakeLabel(pParse); + computeLimitRegisters(pParse, p, iBreak); + sqlite3VdbeAddOp2(v, OP_Rewind, unionTab, iBreak); VdbeCoverage(v); + iStart = sqlite3VdbeCurrentAddr(v); + selectInnerLoop(pParse, p, unionTab, + 0, 0, &dest, iCont, iBreak); + sqlite3VdbeResolveLabel(v, iCont); + sqlite3VdbeAddOp2(v, OP_Next, unionTab, iStart); VdbeCoverage(v); + sqlite3VdbeResolveLabel(v, iBreak); + sqlite3VdbeAddOp2(v, OP_Close, unionTab, 0); + } + break; + } + default: assert( p->op==TK_INTERSECT ); { + int tab1, tab2; + int iCont, iBreak, iStart; + Expr *pLimit; + int addr, iLimit, iOffset; + SelectDest intersectdest; + int r1; + int emptyBypass; + + /* INTERSECT is different from the others since it requires + ** two temporary tables. Hence it has its own case. Begin + ** by allocating the tables we will need. + */ + tab1 = pParse->nTab++; + tab2 = pParse->nTab++; + assert( p->pOrderBy==0 ); + + addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab1, 0); + assert( p->addrOpenEphm[0] == -1 ); + p->addrOpenEphm[0] = addr; + findRightmost(p)->selFlags |= SF_UsesEphemeral; + assert( p->pEList ); + + /* Code the SELECTs to our left into temporary table "tab1". + */ + sqlite3SelectDestInit(&intersectdest, SRT_Union, tab1); + TREETRACE(0x400, pParse, p, ("multiSelect INTERSECT left...\n")); + rc = sqlite3Select(pParse, pPrior, &intersectdest); + if( rc ){ + goto multi_select_end; + } + + /* Initialize LIMIT counters before checking to see if the LHS + ** is empty, in case the jump is taken */ + iBreak = sqlite3VdbeMakeLabel(pParse); + computeLimitRegisters(pParse, p, iBreak); + emptyBypass = sqlite3VdbeAddOp1(v, OP_IfEmpty, tab1); VdbeCoverage(v); + + /* Code the current SELECT into temporary table "tab2" + */ + addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab2, 0); + assert( p->addrOpenEphm[1] == -1 ); + p->addrOpenEphm[1] = addr; + + /* Disable prior SELECTs and the LIMIT counters during the computation + ** of the RHS select */ + pLimit = p->pLimit; + iLimit = p->iLimit; + iOffset = p->iOffset; + p->pPrior = 0; + p->pLimit = 0; + p->iLimit = 0; + p->iOffset = 0; + + intersectdest.iSDParm = tab2; + ExplainQueryPlan((pParse, 1, "%s USING TEMP B-TREE", + sqlite3SelectOpName(p->op))); + TREETRACE(0x400, pParse, p, ("multiSelect INTERSECT right...\n")); + rc = sqlite3Select(pParse, p, &intersectdest); + testcase( rc!=SQLITE_OK ); + pDelete = p->pPrior; + p->pPrior = pPrior; + if( p->nSelectRow>pPrior->nSelectRow ){ + p->nSelectRow = pPrior->nSelectRow; + } + sqlite3ExprDelete(db, p->pLimit); + + /* Reinstate the LIMIT counters prior to running the final intersect */ + p->pLimit = pLimit; + p->iLimit = iLimit; + p->iOffset = iOffset; + + /* Generate code to take the intersection of the two temporary + ** tables. + */ + if( rc ) break; + assert( p->pEList ); + sqlite3VdbeAddOp1(v, OP_Rewind, tab1); + r1 = sqlite3GetTempReg(pParse); + iStart = sqlite3VdbeAddOp2(v, OP_RowData, tab1, r1); + iCont = sqlite3VdbeMakeLabel(pParse); + sqlite3VdbeAddOp4Int(v, OP_NotFound, tab2, iCont, r1, 0); + VdbeCoverage(v); + sqlite3ReleaseTempReg(pParse, r1); + selectInnerLoop(pParse, p, tab1, + 0, 0, &dest, iCont, iBreak); + sqlite3VdbeResolveLabel(v, iCont); + sqlite3VdbeAddOp2(v, OP_Next, tab1, iStart); VdbeCoverage(v); + sqlite3VdbeResolveLabel(v, iBreak); + sqlite3VdbeAddOp2(v, OP_Close, tab2, 0); + sqlite3VdbeJumpHere(v, emptyBypass); + sqlite3VdbeAddOp2(v, OP_Close, tab1, 0); + break; + } + } + + #ifndef SQLITE_OMIT_EXPLAIN + if( p->pNext==0 ){ + ExplainQueryPlanPop(pParse); + } + #endif + } + if( pParse->nErr ) goto multi_select_end; + + /* Compute collating sequences used by + ** temporary tables needed to implement the compound select. + ** Attach the KeyInfo structure to all temporary tables. + ** + ** This section is run by the right-most SELECT statement only. + ** SELECT statements to the left always skip this part. The right-most + ** SELECT might also skip this part if it has no ORDER BY clause and + ** no temp tables are required. + */ + if( p->selFlags & SF_UsesEphemeral ){ + int i; /* Loop counter */ + KeyInfo *pKeyInfo; /* Collating sequence for the result set */ + Select *pLoop; /* For looping through SELECT statements */ + CollSeq **apColl; /* For looping through pKeyInfo->aColl[] */ + int nCol; /* Number of columns in result set */ + + assert( p->pNext==0 ); + assert( p->pEList!=0 ); + nCol = p->pEList->nExpr; + pKeyInfo = sqlite3KeyInfoAlloc(db, nCol, 1); + if( !pKeyInfo ){ + rc = SQLITE_NOMEM_BKPT; + goto multi_select_end; + } + for(i=0, apColl=pKeyInfo->aColl; ipDfltColl; + } + } + + for(pLoop=p; pLoop; pLoop=pLoop->pPrior){ + for(i=0; i<2; i++){ + int addr = pLoop->addrOpenEphm[i]; + if( addr<0 ){ + /* If [0] is unused then [1] is also unused. So we can + ** always safely abort as soon as the first unused slot is found */ + assert( pLoop->addrOpenEphm[1]<0 ); + break; + } + sqlite3VdbeChangeP2(v, addr, nCol); + sqlite3VdbeChangeP4(v, addr, (char*)sqlite3KeyInfoRef(pKeyInfo), + P4_KEYINFO); + pLoop->addrOpenEphm[i] = -1; + } + } + sqlite3KeyInfoUnref(pKeyInfo); + } + +multi_select_end: + pDest->iSdst = dest.iSdst; + pDest->nSdst = dest.nSdst; + pDest->iSDParm2 = dest.iSDParm2; + if( pDelete ){ + sqlite3ParserAddCleanup(pParse, sqlite3SelectDeleteGeneric, pDelete); + } + return rc; +} +#endif /* SQLITE_OMIT_COMPOUND_SELECT */ + +/* +** Error message for when two or more terms of a compound select have different +** size result sets. +*/ +SQLITE_PRIVATE void sqlite3SelectWrongNumTermsError(Parse *pParse, Select *p){ + if( p->selFlags & SF_Values ){ + sqlite3ErrorMsg(pParse, "all VALUES must have the same number of terms"); + }else{ + sqlite3ErrorMsg(pParse, "SELECTs to the left and right of %s" + " do not have the same number of result columns", + sqlite3SelectOpName(p->op)); + } +} + +/* +** Code an output subroutine for a coroutine implementation of a +** SELECT statement. +** +** The data to be output is contained in pIn->iSdst. There are +** pIn->nSdst columns to be output. pDest is where the output should +** be sent. +** +** regReturn is the number of the register holding the subroutine +** return address. +** +** If regPrev>0 then it is the first register in a vector that +** records the previous output. mem[regPrev] is a flag that is false +** if there has been no previous output. If regPrev>0 then code is +** generated to suppress duplicates. pKeyInfo is used for comparing +** keys. +** +** If the LIMIT found in p->iLimit is reached, jump immediately to +** iBreak. +*/ +static int generateOutputSubroutine( + Parse *pParse, /* Parsing context */ + Select *p, /* The SELECT statement */ + SelectDest *pIn, /* Coroutine supplying data */ + SelectDest *pDest, /* Where to send the data */ + int regReturn, /* The return address register */ + int regPrev, /* Previous result register. No uniqueness if 0 */ + KeyInfo *pKeyInfo, /* For comparing with previous entry */ + int iBreak /* Jump here if we hit the LIMIT */ +){ + Vdbe *v = pParse->pVdbe; + int iContinue; + int addr; + + addr = sqlite3VdbeCurrentAddr(v); + iContinue = sqlite3VdbeMakeLabel(pParse); + + /* Suppress duplicates for UNION, EXCEPT, and INTERSECT + */ + if( regPrev ){ + int addr1, addr2; + addr1 = sqlite3VdbeAddOp1(v, OP_IfNot, regPrev); VdbeCoverage(v); + addr2 = sqlite3VdbeAddOp4(v, OP_Compare, pIn->iSdst, regPrev+1, pIn->nSdst, + (char*)sqlite3KeyInfoRef(pKeyInfo), P4_KEYINFO); + sqlite3VdbeAddOp3(v, OP_Jump, addr2+2, iContinue, addr2+2); VdbeCoverage(v); + sqlite3VdbeJumpHere(v, addr1); + sqlite3VdbeAddOp3(v, OP_Copy, pIn->iSdst, regPrev+1, pIn->nSdst-1); + sqlite3VdbeAddOp2(v, OP_Integer, 1, regPrev); + } + if( pParse->db->mallocFailed ) return 0; + + /* Suppress the first OFFSET entries if there is an OFFSET clause + */ + codeOffset(v, p->iOffset, iContinue); + + assert( pDest->eDest!=SRT_Exists ); + assert( pDest->eDest!=SRT_Table ); + switch( pDest->eDest ){ + /* Store the result as data using a unique key. + */ + case SRT_EphemTab: { + int r1 = sqlite3GetTempReg(pParse); + int r2 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_MakeRecord, pIn->iSdst, pIn->nSdst, r1); + sqlite3VdbeAddOp2(v, OP_NewRowid, pDest->iSDParm, r2); + sqlite3VdbeAddOp3(v, OP_Insert, pDest->iSDParm, r1, r2); + sqlite3VdbeChangeP5(v, OPFLAG_APPEND); + sqlite3ReleaseTempReg(pParse, r2); + sqlite3ReleaseTempReg(pParse, r1); + break; + } + +#ifndef SQLITE_OMIT_SUBQUERY + /* If we are creating a set for an "expr IN (SELECT ...)". + */ + case SRT_Set: { + int r1; + testcase( pIn->nSdst>1 ); + r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp4(v, OP_MakeRecord, pIn->iSdst, pIn->nSdst, + r1, pDest->zAffSdst, pIn->nSdst); + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, pDest->iSDParm, r1, + pIn->iSdst, pIn->nSdst); + if( pDest->iSDParm2>0 ){ + sqlite3VdbeAddOp4Int(v, OP_FilterAdd, pDest->iSDParm2, 0, + pIn->iSdst, pIn->nSdst); + ExplainQueryPlan((pParse, 0, "CREATE BLOOM FILTER")); + } + sqlite3ReleaseTempReg(pParse, r1); + break; + } + + /* If this is a scalar select that is part of an expression, then + ** store the results in the appropriate memory cell and break out + ** of the scan loop. Note that the select might return multiple columns + ** if it is the RHS of a row-value IN operator. + */ + case SRT_Mem: { + testcase( pIn->nSdst>1 ); + sqlite3ExprCodeMove(pParse, pIn->iSdst, pDest->iSDParm, pIn->nSdst); + /* The LIMIT clause will jump out of the loop for us */ + break; + } +#endif /* #ifndef SQLITE_OMIT_SUBQUERY */ + + /* The results are stored in a sequence of registers + ** starting at pDest->iSdst. Then the co-routine yields. + */ + case SRT_Coroutine: { + if( pDest->iSdst==0 ){ + pDest->iSdst = sqlite3GetTempRange(pParse, pIn->nSdst); + pDest->nSdst = pIn->nSdst; + } + sqlite3ExprCodeMove(pParse, pIn->iSdst, pDest->iSdst, pIn->nSdst); + sqlite3VdbeAddOp1(v, OP_Yield, pDest->iSDParm); + break; + } + + /* If none of the above, then the result destination must be + ** SRT_Output. This routine is never called with any other + ** destination other than the ones handled above or SRT_Output. + ** + ** For SRT_Output, results are stored in a sequence of registers. + ** Then the OP_ResultRow opcode is used to cause sqlite3_step() to + ** return the next row of result. + */ + default: { + assert( pDest->eDest==SRT_Output ); + sqlite3VdbeAddOp2(v, OP_ResultRow, pIn->iSdst, pIn->nSdst); + break; + } + } + + /* Jump to the end of the loop if the LIMIT is reached. + */ + if( p->iLimit ){ + sqlite3VdbeAddOp2(v, OP_DecrJumpZero, p->iLimit, iBreak); VdbeCoverage(v); + } + + /* Generate the subroutine return + */ + sqlite3VdbeResolveLabel(v, iContinue); + sqlite3VdbeAddOp1(v, OP_Return, regReturn); + + return addr; +} + +/* +** Alternative compound select code generator for cases when there +** is an ORDER BY clause. +** +** We assume a query of the following form: +** +** ORDER BY +** +** is one of UNION ALL, UNION, EXCEPT, or INTERSECT. The idea +** is to code both and with the ORDER BY clause as +** co-routines. Then run the co-routines in parallel and merge the results +** into the output. In addition to the two coroutines (called selectA and +** selectB) there are 7 subroutines: +** +** outA: Move the output of the selectA coroutine into the output +** of the compound query. +** +** outB: Move the output of the selectB coroutine into the output +** of the compound query. (Only generated for UNION and +** UNION ALL. EXCEPT and INSERTSECT never output a row that +** appears only in B.) +** +** AltB: Called when there is data from both coroutines and AB. +** +** EofA: Called when data is exhausted from selectA. +** +** EofB: Called when data is exhausted from selectB. +** +** The implementation of the latter five subroutines depend on which +** is used: +** +** +** UNION ALL UNION EXCEPT INTERSECT +** ------------- ----------------- -------------- ----------------- +** AltB: outA, nextA outA, nextA outA, nextA nextA +** +** AeqB: outA, nextA nextA nextA outA, nextA +** +** AgtB: outB, nextB outB, nextB nextB nextB +** +** EofA: outB, nextB outB, nextB halt halt +** +** EofB: outA, nextA outA, nextA outA, nextA halt +** +** In the AltB, AeqB, and AgtB subroutines, an EOF on A following nextA +** causes an immediate jump to EofA and an EOF on B following nextB causes +** an immediate jump to EofB. Within EofA and EofB, and EOF on entry or +** following nextX causes a jump to the end of the select processing. +** +** Duplicate removal in the UNION, EXCEPT, and INTERSECT cases is handled +** within the output subroutine. The regPrev register set holds the previously +** output value. A comparison is made against this value and the output +** is skipped if the next results would be the same as the previous. +** +** The implementation plan is to implement the two coroutines and seven +** subroutines first, then put the control logic at the bottom. Like this: +** +** goto Init +** coA: coroutine for left query (A) +** coB: coroutine for right query (B) +** outA: output one row of A +** outB: output one row of B (UNION and UNION ALL only) +** EofA: ... +** EofB: ... +** AltB: ... +** AeqB: ... +** AgtB: ... +** Init: initialize coroutine registers +** yield coA +** if eof(A) goto EofA +** yield coB +** if eof(B) goto EofB +** Cmpr: Compare A, B +** Jump AltB, AeqB, AgtB +** End: ... +** +** We call AltB, AeqB, AgtB, EofA, and EofB "subroutines" but they are not +** actually called using Gosub and they do not Return. EofA and EofB loop +** until all data is exhausted then jump to the "end" label. AltB, AeqB, +** and AgtB jump to either L2 or to one of EofA or EofB. +*/ +#ifndef SQLITE_OMIT_COMPOUND_SELECT +static int multiSelectOrderBy( + Parse *pParse, /* Parsing context */ + Select *p, /* The right-most of SELECTs to be coded */ + SelectDest *pDest /* What to do with query results */ +){ + int i, j; /* Loop counters */ + Select *pPrior; /* Another SELECT immediately to our left */ + Select *pSplit; /* Left-most SELECT in the right-hand group */ + int nSelect; /* Number of SELECT statements in the compound */ + Vdbe *v; /* Generate code to this VDBE */ + SelectDest destA; /* Destination for coroutine A */ + SelectDest destB; /* Destination for coroutine B */ + int regAddrA; /* Address register for select-A coroutine */ + int regAddrB; /* Address register for select-B coroutine */ + int addrSelectA; /* Address of the select-A coroutine */ + int addrSelectB; /* Address of the select-B coroutine */ + int regOutA; /* Address register for the output-A subroutine */ + int regOutB; /* Address register for the output-B subroutine */ + int addrOutA; /* Address of the output-A subroutine */ + int addrOutB = 0; /* Address of the output-B subroutine */ + int addrEofA; /* Address of the select-A-exhausted subroutine */ + int addrEofA_noB; /* Alternate addrEofA if B is uninitialized */ + int addrEofB; /* Address of the select-B-exhausted subroutine */ + int addrAltB; /* Address of the AB subroutine */ + int regLimitA; /* Limit register for select-A */ + int regLimitB; /* Limit register for select-A */ + int regPrev; /* A range of registers to hold previous output */ + int savedLimit; /* Saved value of p->iLimit */ + int savedOffset; /* Saved value of p->iOffset */ + int labelCmpr; /* Label for the start of the merge algorithm */ + int labelEnd; /* Label for the end of the overall SELECT stmt */ + int addr1; /* Jump instructions that get retargeted */ + int op; /* One of TK_ALL, TK_UNION, TK_EXCEPT, TK_INTERSECT */ + KeyInfo *pKeyDup = 0; /* Comparison information for duplicate removal */ + KeyInfo *pKeyMerge; /* Comparison information for merging rows */ + sqlite3 *db; /* Database connection */ + ExprList *pOrderBy; /* The ORDER BY clause */ + int nOrderBy; /* Number of terms in the ORDER BY clause */ + u32 *aPermute; /* Mapping from ORDER BY terms to result set columns */ + + assert( p->pOrderBy!=0 ); + assert( pKeyDup==0 ); /* "Managed" code needs this. Ticket #3382. */ + db = pParse->db; + v = pParse->pVdbe; + assert( v!=0 ); /* Already thrown the error if VDBE alloc failed */ + labelEnd = sqlite3VdbeMakeLabel(pParse); + labelCmpr = sqlite3VdbeMakeLabel(pParse); + + + /* Patch up the ORDER BY clause + */ + op = p->op; + assert( p->pPrior->pOrderBy==0 ); + pOrderBy = p->pOrderBy; + assert( pOrderBy ); + nOrderBy = pOrderBy->nExpr; + + /* For operators other than UNION ALL we have to make sure that + ** the ORDER BY clause covers every term of the result set. Add + ** terms to the ORDER BY clause as necessary. + */ + if( op!=TK_ALL ){ + for(i=1; db->mallocFailed==0 && i<=p->pEList->nExpr; i++){ + struct ExprList_item *pItem; + for(j=0, pItem=pOrderBy->a; ju.x.iOrderByCol>0 ); + if( pItem->u.x.iOrderByCol==i ) break; + } + if( j==nOrderBy ){ + Expr *pNew = sqlite3Expr(db, TK_INTEGER, 0); + if( pNew==0 ) return SQLITE_NOMEM_BKPT; + pNew->flags |= EP_IntValue; + pNew->u.iValue = i; + p->pOrderBy = pOrderBy = sqlite3ExprListAppend(pParse, pOrderBy, pNew); + if( pOrderBy ) pOrderBy->a[nOrderBy++].u.x.iOrderByCol = (u16)i; + } + } + } + + /* Compute the comparison permutation and keyinfo that is used with + ** the permutation used to determine if the next + ** row of results comes from selectA or selectB. Also add explicit + ** collations to the ORDER BY clause terms so that when the subqueries + ** to the right and the left are evaluated, they use the correct + ** collation. + */ + aPermute = sqlite3DbMallocRawNN(db, sizeof(u32)*(nOrderBy + 1)); + if( aPermute ){ + struct ExprList_item *pItem; + aPermute[0] = nOrderBy; + for(i=1, pItem=pOrderBy->a; i<=nOrderBy; i++, pItem++){ + assert( pItem!=0 ); + assert( pItem->u.x.iOrderByCol>0 ); + assert( pItem->u.x.iOrderByCol<=p->pEList->nExpr ); + aPermute[i] = pItem->u.x.iOrderByCol - 1; + } + pKeyMerge = multiSelectOrderByKeyInfo(pParse, p, 1); + }else{ + pKeyMerge = 0; + } + + /* Allocate a range of temporary registers and the KeyInfo needed + ** for the logic that removes duplicate result rows when the + ** operator is UNION, EXCEPT, or INTERSECT (but not UNION ALL). + */ + if( op==TK_ALL ){ + regPrev = 0; + }else{ + int nExpr = p->pEList->nExpr; + assert( nOrderBy>=nExpr || db->mallocFailed ); + regPrev = pParse->nMem+1; + pParse->nMem += nExpr+1; + sqlite3VdbeAddOp2(v, OP_Integer, 0, regPrev); + pKeyDup = sqlite3KeyInfoAlloc(db, nExpr, 1); + if( pKeyDup ){ + assert( sqlite3KeyInfoIsWriteable(pKeyDup) ); + for(i=0; iaColl[i] = multiSelectCollSeq(pParse, p, i); + pKeyDup->aSortFlags[i] = 0; + } + } + } + + /* Separate the left and the right query from one another + */ + nSelect = 1; + if( (op==TK_ALL || op==TK_UNION) + && OptimizationEnabled(db, SQLITE_BalancedMerge) + ){ + for(pSplit=p; pSplit->pPrior!=0 && pSplit->op==op; pSplit=pSplit->pPrior){ + nSelect++; + assert( pSplit->pPrior->pNext==pSplit ); + } + } + if( nSelect<=3 ){ + pSplit = p; + }else{ + pSplit = p; + for(i=2; ipPrior; } + } + pPrior = pSplit->pPrior; + assert( pPrior!=0 ); + pSplit->pPrior = 0; + pPrior->pNext = 0; + assert( p->pOrderBy == pOrderBy ); + assert( pOrderBy!=0 || db->mallocFailed ); + pPrior->pOrderBy = sqlite3ExprListDup(pParse->db, pOrderBy, 0); + sqlite3ResolveOrderGroupBy(pParse, p, p->pOrderBy, "ORDER"); + sqlite3ResolveOrderGroupBy(pParse, pPrior, pPrior->pOrderBy, "ORDER"); + + /* Compute the limit registers */ + computeLimitRegisters(pParse, p, labelEnd); + if( p->iLimit && op==TK_ALL ){ + regLimitA = ++pParse->nMem; + regLimitB = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Copy, p->iOffset ? p->iOffset+1 : p->iLimit, + regLimitA); + sqlite3VdbeAddOp2(v, OP_Copy, regLimitA, regLimitB); + }else{ + regLimitA = regLimitB = 0; + } + sqlite3ExprDelete(db, p->pLimit); + p->pLimit = 0; + + regAddrA = ++pParse->nMem; + regAddrB = ++pParse->nMem; + regOutA = ++pParse->nMem; + regOutB = ++pParse->nMem; + sqlite3SelectDestInit(&destA, SRT_Coroutine, regAddrA); + sqlite3SelectDestInit(&destB, SRT_Coroutine, regAddrB); + + ExplainQueryPlan((pParse, 1, "MERGE (%s)", sqlite3SelectOpName(p->op))); + + /* Generate a coroutine to evaluate the SELECT statement to the + ** left of the compound operator - the "A" select. + */ + addrSelectA = sqlite3VdbeCurrentAddr(v) + 1; + addr1 = sqlite3VdbeAddOp3(v, OP_InitCoroutine, regAddrA, 0, addrSelectA); + VdbeComment((v, "left SELECT")); + pPrior->iLimit = regLimitA; + ExplainQueryPlan((pParse, 1, "LEFT")); + sqlite3Select(pParse, pPrior, &destA); + sqlite3VdbeEndCoroutine(v, regAddrA); + sqlite3VdbeJumpHere(v, addr1); + + /* Generate a coroutine to evaluate the SELECT statement on + ** the right - the "B" select + */ + addrSelectB = sqlite3VdbeCurrentAddr(v) + 1; + addr1 = sqlite3VdbeAddOp3(v, OP_InitCoroutine, regAddrB, 0, addrSelectB); + VdbeComment((v, "right SELECT")); + savedLimit = p->iLimit; + savedOffset = p->iOffset; + p->iLimit = regLimitB; + p->iOffset = 0; + ExplainQueryPlan((pParse, 1, "RIGHT")); + sqlite3Select(pParse, p, &destB); + p->iLimit = savedLimit; + p->iOffset = savedOffset; + sqlite3VdbeEndCoroutine(v, regAddrB); + + /* Generate a subroutine that outputs the current row of the A + ** select as the next output row of the compound select. + */ + VdbeNoopComment((v, "Output routine for A")); + addrOutA = generateOutputSubroutine(pParse, + p, &destA, pDest, regOutA, + regPrev, pKeyDup, labelEnd); + + /* Generate a subroutine that outputs the current row of the B + ** select as the next output row of the compound select. + */ + if( op==TK_ALL || op==TK_UNION ){ + VdbeNoopComment((v, "Output routine for B")); + addrOutB = generateOutputSubroutine(pParse, + p, &destB, pDest, regOutB, + regPrev, pKeyDup, labelEnd); + } + sqlite3KeyInfoUnref(pKeyDup); + + /* Generate a subroutine to run when the results from select A + ** are exhausted and only data in select B remains. + */ + if( op==TK_EXCEPT || op==TK_INTERSECT ){ + addrEofA_noB = addrEofA = labelEnd; + }else{ + VdbeNoopComment((v, "eof-A subroutine")); + addrEofA = sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB); + addrEofA_noB = sqlite3VdbeAddOp2(v, OP_Yield, regAddrB, labelEnd); + VdbeCoverage(v); + sqlite3VdbeGoto(v, addrEofA); + p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow); + } + + /* Generate a subroutine to run when the results from select B + ** are exhausted and only data in select A remains. + */ + if( op==TK_INTERSECT ){ + addrEofB = addrEofA; + if( p->nSelectRow > pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow; + }else{ + VdbeNoopComment((v, "eof-B subroutine")); + addrEofB = sqlite3VdbeAddOp2(v, OP_Gosub, regOutA, addrOutA); + sqlite3VdbeAddOp2(v, OP_Yield, regAddrA, labelEnd); VdbeCoverage(v); + sqlite3VdbeGoto(v, addrEofB); + } + + /* Generate code to handle the case of AB + */ + VdbeNoopComment((v, "A-gt-B subroutine")); + addrAgtB = sqlite3VdbeCurrentAddr(v); + if( op==TK_ALL || op==TK_UNION ){ + sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB); + } + sqlite3VdbeAddOp2(v, OP_Yield, regAddrB, addrEofB); VdbeCoverage(v); + sqlite3VdbeGoto(v, labelCmpr); + + /* This code runs once to initialize everything. + */ + sqlite3VdbeJumpHere(v, addr1); + sqlite3VdbeAddOp2(v, OP_Yield, regAddrA, addrEofA_noB); VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Yield, regAddrB, addrEofB); VdbeCoverage(v); + + /* Implement the main merge loop + */ + sqlite3VdbeResolveLabel(v, labelCmpr); + sqlite3VdbeAddOp4(v, OP_Permutation, 0, 0, 0, (char*)aPermute, P4_INTARRAY); + sqlite3VdbeAddOp4(v, OP_Compare, destA.iSdst, destB.iSdst, nOrderBy, + (char*)pKeyMerge, P4_KEYINFO); + sqlite3VdbeChangeP5(v, OPFLAG_PERMUTE); + sqlite3VdbeAddOp3(v, OP_Jump, addrAltB, addrAeqB, addrAgtB); VdbeCoverage(v); + + /* Jump to the this point in order to terminate the query. + */ + sqlite3VdbeResolveLabel(v, labelEnd); + + /* Make arrangements to free the 2nd and subsequent arms of the compound + ** after the parse has finished */ + if( pSplit->pPrior ){ + sqlite3ParserAddCleanup(pParse, sqlite3SelectDeleteGeneric, pSplit->pPrior); + } + pSplit->pPrior = pPrior; + pPrior->pNext = pSplit; + sqlite3ExprListDelete(db, pPrior->pOrderBy); + pPrior->pOrderBy = 0; + + /*** TBD: Insert subroutine calls to close cursors on incomplete + **** subqueries ****/ + ExplainQueryPlanPop(pParse); + return pParse->nErr!=0; +} +#endif + +#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) + +/* An instance of the SubstContext object describes an substitution edit +** to be performed on a parse tree. +** +** All references to columns in table iTable are to be replaced by corresponding +** expressions in pEList. +** +** ## About "isOuterJoin": +** +** The isOuterJoin column indicates that the replacement will occur into a +** position in the parent that is NULL-able due to an OUTER JOIN. Either the +** target slot in the parent is the right operand of a LEFT JOIN, or one of +** the left operands of a RIGHT JOIN. In either case, we need to potentially +** bypass the substituted expression with OP_IfNullRow. +** +** Suppose the original expression is an integer constant. Even though the table +** has the nullRow flag set, because the expression is an integer constant, +** it will not be NULLed out. So instead, we insert an OP_IfNullRow opcode +** that checks to see if the nullRow flag is set on the table. If the nullRow +** flag is set, then the value in the register is set to NULL and the original +** expression is bypassed. If the nullRow flag is not set, then the original +** expression runs to populate the register. +** +** Example where this is needed: +** +** CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT); +** CREATE TABLE t2(x INT UNIQUE); +** +** SELECT a,b,m,x FROM t1 LEFT JOIN (SELECT 59 AS m,x FROM t2) ON b=x; +** +** When the subquery on the right side of the LEFT JOIN is flattened, we +** have to add OP_IfNullRow in front of the OP_Integer that implements the +** "m" value of the subquery so that a NULL will be loaded instead of 59 +** when processing a non-matched row of the left. +*/ +typedef struct SubstContext { + Parse *pParse; /* The parsing context */ + int iTable; /* Replace references to this table */ + int iNewTable; /* New table number */ + int isOuterJoin; /* Add TK_IF_NULL_ROW opcodes on each replacement */ + int nSelDepth; /* Depth of sub-query recursion. Top==1 */ + ExprList *pEList; /* Replacement expressions */ + ExprList *pCList; /* Collation sequences for replacement expr */ +} SubstContext; + +/* Forward Declarations */ +static void substExprList(SubstContext*, ExprList*); +static void substSelect(SubstContext*, Select*, int); + +/* +** Scan through the expression pExpr. Replace every reference to +** a column in table number iTable with a copy of the iColumn-th +** entry in pEList. (But leave references to the ROWID column +** unchanged.) +** +** This routine is part of the flattening procedure. A subquery +** whose result set is defined by pEList appears as entry in the +** FROM clause of a SELECT such that the VDBE cursor assigned to that +** FORM clause entry is iTable. This routine makes the necessary +** changes to pExpr so that it refers directly to the source table +** of the subquery rather the result set of the subquery. +*/ +static Expr *substExpr( + SubstContext *pSubst, /* Description of the substitution */ + Expr *pExpr /* Expr in which substitution occurs */ +){ + if( pExpr==0 ) return 0; + if( ExprHasProperty(pExpr, EP_OuterON|EP_InnerON) + && pExpr->w.iJoin==pSubst->iTable + ){ + testcase( ExprHasProperty(pExpr, EP_InnerON) ); + pExpr->w.iJoin = pSubst->iNewTable; + } + if( pExpr->op==TK_COLUMN + && pExpr->iTable==pSubst->iTable + && !ExprHasProperty(pExpr, EP_FixedCol) + ){ +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + if( pExpr->iColumn<0 ){ + pExpr->op = TK_NULL; + }else +#endif + { + Expr *pNew; + int iColumn; + Expr *pCopy; + Expr ifNullRow; + iColumn = pExpr->iColumn; + assert( iColumn>=0 ); + assert( pSubst->pEList!=0 && iColumnpEList->nExpr ); + assert( pExpr->pRight==0 ); + pCopy = pSubst->pEList->a[iColumn].pExpr; + if( sqlite3ExprIsVector(pCopy) ){ + sqlite3VectorErrorMsg(pSubst->pParse, pCopy); + }else{ + sqlite3 *db = pSubst->pParse->db; + if( pSubst->isOuterJoin + && (pCopy->op!=TK_COLUMN || pCopy->iTable!=pSubst->iNewTable) + ){ + memset(&ifNullRow, 0, sizeof(ifNullRow)); + ifNullRow.op = TK_IF_NULL_ROW; + ifNullRow.pLeft = pCopy; + ifNullRow.iTable = pSubst->iNewTable; + ifNullRow.iColumn = -99; + ifNullRow.flags = EP_IfNullRow; + pCopy = &ifNullRow; + } + testcase( ExprHasProperty(pCopy, EP_Subquery) ); + pNew = sqlite3ExprDup(db, pCopy, 0); + if( db->mallocFailed ){ + sqlite3ExprDelete(db, pNew); + return pExpr; + } + if( pSubst->isOuterJoin ){ + ExprSetProperty(pNew, EP_CanBeNull); + } + if( pNew->op==TK_TRUEFALSE ){ + pNew->u.iValue = sqlite3ExprTruthValue(pNew); + pNew->op = TK_INTEGER; + ExprSetProperty(pNew, EP_IntValue); + } + + /* Ensure that the expression now has an implicit collation sequence, + ** just as it did when it was a column of a view or sub-query. */ + { + CollSeq *pNat = sqlite3ExprCollSeq(pSubst->pParse, pNew); + CollSeq *pColl = sqlite3ExprCollSeq(pSubst->pParse, + pSubst->pCList->a[iColumn].pExpr + ); + if( pNat!=pColl || (pNew->op!=TK_COLUMN && pNew->op!=TK_COLLATE) ){ + pNew = sqlite3ExprAddCollateString(pSubst->pParse, pNew, + (pColl ? pColl->zName : "BINARY") + ); + } + } + ExprClearProperty(pNew, EP_Collate); + if( ExprHasProperty(pExpr,EP_OuterON|EP_InnerON) ){ + sqlite3SetJoinExpr(pNew, pExpr->w.iJoin, + pExpr->flags & (EP_OuterON|EP_InnerON)); + } + sqlite3ExprDelete(db, pExpr); + pExpr = pNew; + } + } + }else{ + if( pExpr->op==TK_IF_NULL_ROW && pExpr->iTable==pSubst->iTable ){ + pExpr->iTable = pSubst->iNewTable; + } + if( pExpr->op==TK_AGG_FUNCTION && pExpr->op2>=pSubst->nSelDepth ){ + pExpr->op2--; + } + pExpr->pLeft = substExpr(pSubst, pExpr->pLeft); + pExpr->pRight = substExpr(pSubst, pExpr->pRight); + if( ExprUseXSelect(pExpr) ){ + substSelect(pSubst, pExpr->x.pSelect, 1); + }else{ + substExprList(pSubst, pExpr->x.pList); + } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( ExprHasProperty(pExpr, EP_WinFunc) ){ + Window *pWin = pExpr->y.pWin; + pWin->pFilter = substExpr(pSubst, pWin->pFilter); + substExprList(pSubst, pWin->pPartition); + substExprList(pSubst, pWin->pOrderBy); + } +#endif + } + return pExpr; +} +static void substExprList( + SubstContext *pSubst, /* Description of the substitution */ + ExprList *pList /* List to scan and in which to make substitutes */ +){ + int i; + if( pList==0 ) return; + for(i=0; inExpr; i++){ + pList->a[i].pExpr = substExpr(pSubst, pList->a[i].pExpr); + } +} +static void substSelect( + SubstContext *pSubst, /* Description of the substitution */ + Select *p, /* SELECT statement in which to make substitutions */ + int doPrior /* Do substitutes on p->pPrior too */ +){ + SrcList *pSrc; + SrcItem *pItem; + int i; + if( !p ) return; + pSubst->nSelDepth++; + do{ + substExprList(pSubst, p->pEList); + substExprList(pSubst, p->pGroupBy); + substExprList(pSubst, p->pOrderBy); + p->pHaving = substExpr(pSubst, p->pHaving); + p->pWhere = substExpr(pSubst, p->pWhere); + pSrc = p->pSrc; + assert( pSrc!=0 ); + for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){ + if( pItem->fg.isSubquery ){ + substSelect(pSubst, pItem->u4.pSubq->pSelect, 1); + } + if( pItem->fg.isTabFunc ){ + substExprList(pSubst, pItem->u1.pFuncArg); + } + } + }while( doPrior && (p = p->pPrior)!=0 ); + pSubst->nSelDepth--; +} +#endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ + +#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) +/* +** pSelect is a SELECT statement and pSrcItem is one item in the FROM +** clause of that SELECT. +** +** This routine scans the entire SELECT statement and recomputes the +** pSrcItem->colUsed mask. +*/ +static int recomputeColumnsUsedExpr(Walker *pWalker, Expr *pExpr){ + SrcItem *pItem; + if( pExpr->op!=TK_COLUMN ) return WRC_Continue; + pItem = pWalker->u.pSrcItem; + if( pItem->iCursor!=pExpr->iTable ) return WRC_Continue; + if( pExpr->iColumn<0 ) return WRC_Continue; + pItem->colUsed |= sqlite3ExprColUsed(pExpr); + return WRC_Continue; +} +static void recomputeColumnsUsed( + Select *pSelect, /* The complete SELECT statement */ + SrcItem *pSrcItem /* Which FROM clause item to recompute */ +){ + Walker w; + if( NEVER(pSrcItem->pSTab==0) ) return; + memset(&w, 0, sizeof(w)); + w.xExprCallback = recomputeColumnsUsedExpr; + w.xSelectCallback = sqlite3SelectWalkNoop; + w.u.pSrcItem = pSrcItem; + pSrcItem->colUsed = 0; + sqlite3WalkSelect(&w, pSelect); +} +#endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ + +#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) +/* +** Assign new cursor numbers to each of the items in pSrc. For each +** new cursor number assigned, set an entry in the aCsrMap[] array +** to map the old cursor number to the new: +** +** aCsrMap[iOld+1] = iNew; +** +** The array is guaranteed by the caller to be large enough for all +** existing cursor numbers in pSrc. aCsrMap[0] is the array size. +** +** If pSrc contains any sub-selects, call this routine recursively +** on the FROM clause of each such sub-select, with iExcept set to -1. +*/ +static void srclistRenumberCursors( + Parse *pParse, /* Parse context */ + int *aCsrMap, /* Array to store cursor mappings in */ + SrcList *pSrc, /* FROM clause to renumber */ + int iExcept /* FROM clause item to skip */ +){ + int i; + SrcItem *pItem; + for(i=0, pItem=pSrc->a; inSrc; i++, pItem++){ + if( i!=iExcept ){ + Select *p; + assert( pItem->iCursor < aCsrMap[0] ); + if( !pItem->fg.isRecursive || aCsrMap[pItem->iCursor+1]==0 ){ + aCsrMap[pItem->iCursor+1] = pParse->nTab++; + } + pItem->iCursor = aCsrMap[pItem->iCursor+1]; + if( pItem->fg.isSubquery ){ + for(p=pItem->u4.pSubq->pSelect; p; p=p->pPrior){ + srclistRenumberCursors(pParse, aCsrMap, p->pSrc, -1); + } + } + } + } +} + +/* +** *piCursor is a cursor number. Change it if it needs to be mapped. +*/ +static void renumberCursorDoMapping(Walker *pWalker, int *piCursor){ + int *aCsrMap = pWalker->u.aiCol; + int iCsr = *piCursor; + if( iCsr < aCsrMap[0] && aCsrMap[iCsr+1]>0 ){ + *piCursor = aCsrMap[iCsr+1]; + } +} + +/* +** Expression walker callback used by renumberCursors() to update +** Expr objects to match newly assigned cursor numbers. +*/ +static int renumberCursorsCb(Walker *pWalker, Expr *pExpr){ + int op = pExpr->op; + if( op==TK_COLUMN || op==TK_IF_NULL_ROW ){ + renumberCursorDoMapping(pWalker, &pExpr->iTable); + } + if( ExprHasProperty(pExpr, EP_OuterON) ){ + renumberCursorDoMapping(pWalker, &pExpr->w.iJoin); + } + return WRC_Continue; +} + +/* +** Assign a new cursor number to each cursor in the FROM clause (Select.pSrc) +** of the SELECT statement passed as the second argument, and to each +** cursor in the FROM clause of any FROM clause sub-selects, recursively. +** Except, do not assign a new cursor number to the iExcept'th element in +** the FROM clause of (*p). Update all expressions and other references +** to refer to the new cursor numbers. +** +** Argument aCsrMap is an array that may be used for temporary working +** space. Two guarantees are made by the caller: +** +** * the array is larger than the largest cursor number used within the +** select statement passed as an argument, and +** +** * the array entries for all cursor numbers that do *not* appear in +** FROM clauses of the select statement as described above are +** initialized to zero. +*/ +static void renumberCursors( + Parse *pParse, /* Parse context */ + Select *p, /* Select to renumber cursors within */ + int iExcept, /* FROM clause item to skip */ + int *aCsrMap /* Working space */ +){ + Walker w; + srclistRenumberCursors(pParse, aCsrMap, p->pSrc, iExcept); + memset(&w, 0, sizeof(w)); + w.u.aiCol = aCsrMap; + w.xExprCallback = renumberCursorsCb; + w.xSelectCallback = sqlite3SelectWalkNoop; + sqlite3WalkSelect(&w, p); +} +#endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ + +/* +** If pSel is not part of a compound SELECT, return a pointer to its +** expression list. Otherwise, return a pointer to the expression list +** of the leftmost SELECT in the compound. +*/ +static ExprList *findLeftmostExprlist(Select *pSel){ + while( pSel->pPrior ){ + pSel = pSel->pPrior; + } + return pSel->pEList; +} + +/* +** Return true if any of the result-set columns in the compound query +** have incompatible affinities on one or more arms of the compound. +*/ +static int compoundHasDifferentAffinities(Select *p){ + int ii; + ExprList *pList; + assert( p!=0 ); + assert( p->pEList!=0 ); + assert( p->pPrior!=0 ); + pList = p->pEList; + for(ii=0; iinExpr; ii++){ + char aff; + Select *pSub1; + assert( pList->a[ii].pExpr!=0 ); + aff = sqlite3ExprAffinity(pList->a[ii].pExpr); + for(pSub1=p->pPrior; pSub1; pSub1=pSub1->pPrior){ + assert( pSub1->pEList!=0 ); + assert( pSub1->pEList->nExpr>ii ); + assert( pSub1->pEList->a[ii].pExpr!=0 ); + if( sqlite3ExprAffinity(pSub1->pEList->a[ii].pExpr)!=aff ){ + return 1; + } + } + } + return 0; +} + +#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) +/* +** This routine attempts to flatten subqueries as a performance optimization. +** This routine returns 1 if it makes changes and 0 if no flattening occurs. +** +** To understand the concept of flattening, consider the following +** query: +** +** SELECT a FROM (SELECT x+y AS a FROM t1 WHERE z<100) WHERE a>5 +** +** The default way of implementing this query is to execute the +** subquery first and store the results in a temporary table, then +** run the outer query on that temporary table. This requires two +** passes over the data. Furthermore, because the temporary table +** has no indices, the WHERE clause on the outer query cannot be +** optimized. +** +** This routine attempts to rewrite queries such as the above into +** a single flat select, like this: +** +** SELECT x+y AS a FROM t1 WHERE z<100 AND a>5 +** +** The code generated for this simplification gives the same result +** but only has to scan the data once. And because indices might +** exist on the table t1, a complete scan of the data might be +** avoided. +** +** Flattening is subject to the following constraints: +** +** (**) We no longer attempt to flatten aggregate subqueries. Was: +** The subquery and the outer query cannot both be aggregates. +** +** (**) We no longer attempt to flatten aggregate subqueries. Was: +** (2) If the subquery is an aggregate then +** (2a) the outer query must not be a join and +** (2b) the outer query must not use subqueries +** other than the one FROM-clause subquery that is a candidate +** for flattening. (This is due to ticket [2f7170d73bf9abf80] +** from 2015-02-09.) +** +** (3) If the subquery is the right operand of a LEFT JOIN then +** (3a) the subquery may not be a join +** (**) Was (3b): "the FROM clause of the subquery may not contain +** a virtual table" +** (**) Was: "The outer query may not have a GROUP BY." This case +** is now managed correctly +** (3d) the outer query may not be DISTINCT. +** See also (26) for restrictions on RIGHT JOIN. +** +** (4) The subquery can not be DISTINCT. +** +** (**) At one point restrictions (4) and (5) defined a subset of DISTINCT +** sub-queries that were excluded from this optimization. Restriction +** (4) has since been expanded to exclude all DISTINCT subqueries. +** +** (**) We no longer attempt to flatten aggregate subqueries. Was: +** If the subquery is aggregate, the outer query may not be DISTINCT. +** +** (7) The subquery must have a FROM clause. TODO: For subqueries without +** A FROM clause, consider adding a FROM clause with the special +** table sqlite_once that consists of a single row containing a +** single NULL. +** +** (8) If the subquery uses LIMIT then the outer query may not be a join. +** +** (9) If the subquery uses LIMIT then the outer query may not be aggregate. +** +** (**) Restriction (10) was removed from the code on 2005-02-05 but we +** accidentally carried the comment forward until 2014-09-15. Original +** constraint: "If the subquery is aggregate then the outer query +** may not use LIMIT." +** +** (11) The subquery and the outer query may not both have ORDER BY clauses. +** +** (**) Not implemented. Subsumed into restriction (3). Was previously +** a separate restriction deriving from ticket #350. +** +** (13) The subquery and outer query may not both use LIMIT. +** +** (14) The subquery may not use OFFSET. +** +** (15) If the outer query is part of a compound select, then the +** subquery may not use LIMIT. +** (See ticket #2339 and ticket [02a8e81d44]). +** +** (16) If the outer query is aggregate, then the subquery may not +** use ORDER BY. (Ticket #2942) This used to not matter +** until we introduced the group_concat() function. +** +** (17) If the subquery is a compound select, then +** (17a) all compound operators must be a UNION ALL, and +** (17b) no terms within the subquery compound may be aggregate +** or DISTINCT, and +** (17c) every term within the subquery compound must have a FROM clause +** (17d) the outer query may not be +** (17d1) aggregate, or +** (17d2) DISTINCT +** (17e) the subquery may not contain window functions, and +** (17f) the subquery must not be the RHS of a LEFT JOIN. +** (17g) either the subquery is the first element of the outer +** query or there are no RIGHT or FULL JOINs in any arm +** of the subquery. (This is a duplicate of condition (27b).) +** (17h) The corresponding result set expressions in all arms of the +** compound must have the same affinity. +** +** The parent and sub-query may contain WHERE clauses. Subject to +** rules (11), (13) and (14), they may also contain ORDER BY, +** LIMIT and OFFSET clauses. The subquery cannot use any compound +** operator other than UNION ALL because all the other compound +** operators have an implied DISTINCT which is disallowed by +** restriction (4). +** +** Also, each component of the sub-query must return the same number +** of result columns. This is actually a requirement for any compound +** SELECT statement, but all the code here does is make sure that no +** such (illegal) sub-query is flattened. The caller will detect the +** syntax error and return a detailed message. +** +** (18) If the sub-query is a compound select, then all terms of the +** ORDER BY clause of the parent must be copies of a term returned +** by the parent query. +** +** (19) If the subquery uses LIMIT then the outer query may not +** have a WHERE clause. +** +** (20) If the sub-query is a compound select, then it must not use +** an ORDER BY clause. Ticket #3773. We could relax this constraint +** somewhat by saying that the terms of the ORDER BY clause must +** appear as unmodified result columns in the outer query. But we +** have other optimizations in mind to deal with that case. +** +** (21) If the subquery uses LIMIT then the outer query may not be +** DISTINCT. (See ticket [752e1646fc]). +** +** (22) The subquery may not be a recursive CTE. +** +** (23) If the outer query is a recursive CTE, then the sub-query may not be +** a compound query. This restriction is because transforming the +** parent to a compound query confuses the code that handles +** recursive queries in multiSelect(). +** +** (**) We no longer attempt to flatten aggregate subqueries. Was: +** The subquery may not be an aggregate that uses the built-in min() or +** or max() functions. (Without this restriction, a query like: +** "SELECT x FROM (SELECT max(y), x FROM t1)" would not necessarily +** return the value X for which Y was maximal.) +** +** (25) If either the subquery or the parent query contains a window +** function in the select list or ORDER BY clause, flattening +** is not attempted. +** +** (26) The subquery may not be the right operand of a RIGHT JOIN. +** See also (3) for restrictions on LEFT JOIN. +** +** (27) The subquery may not contain a FULL or RIGHT JOIN unless it +** is the first element of the parent query. Two subcases: +** (27a) the subquery is not a compound query. +** (27b) the subquery is a compound query and the RIGHT JOIN occurs +** in any arm of the compound query. (See also (17g).) +** +** (28) The subquery is not a MATERIALIZED CTE. (This is handled +** in the caller before ever reaching this routine.) +** +** +** In this routine, the "p" parameter is a pointer to the outer query. +** The subquery is p->pSrc->a[iFrom]. isAgg is true if the outer query +** uses aggregates. +** +** If flattening is not attempted, this routine is a no-op and returns 0. +** If flattening is attempted this routine returns 1. +** +** All of the expression analysis must occur on both the outer query and +** the subquery before this routine runs. +*/ +static int flattenSubquery( + Parse *pParse, /* Parsing context */ + Select *p, /* The parent or outer SELECT statement */ + int iFrom, /* Index in p->pSrc->a[] of the inner subquery */ + int isAgg /* True if outer SELECT uses aggregate functions */ +){ + const char *zSavedAuthContext = pParse->zAuthContext; + Select *pParent; /* Current UNION ALL term of the other query */ + Select *pSub; /* The inner query or "subquery" */ + Select *pSub1; /* Pointer to the rightmost select in sub-query */ + SrcList *pSrc; /* The FROM clause of the outer query */ + SrcList *pSubSrc; /* The FROM clause of the subquery */ + int iParent; /* VDBE cursor number of the pSub result set temp table */ + int iNewParent = -1;/* Replacement table for iParent */ + int isOuterJoin = 0; /* True if pSub is the right side of a LEFT JOIN */ + int i; /* Loop counter */ + Expr *pWhere; /* The WHERE clause */ + SrcItem *pSubitem; /* The subquery */ + sqlite3 *db = pParse->db; + Walker w; /* Walker to persist agginfo data */ + int *aCsrMap = 0; + + /* Check to see if flattening is permitted. Return 0 if not. + */ + assert( p!=0 ); + assert( p->pPrior==0 ); + if( OptimizationDisabled(db, SQLITE_QueryFlattener) ) return 0; + pSrc = p->pSrc; + assert( pSrc && iFrom>=0 && iFromnSrc ); + pSubitem = &pSrc->a[iFrom]; + iParent = pSubitem->iCursor; + assert( pSubitem->fg.isSubquery ); + pSub = pSubitem->u4.pSubq->pSelect; + assert( pSub!=0 ); + +#ifndef SQLITE_OMIT_WINDOWFUNC + if( p->pWin || pSub->pWin ) return 0; /* Restriction (25) */ +#endif + + pSubSrc = pSub->pSrc; + assert( pSubSrc ); + /* Prior to version 3.1.2, when LIMIT and OFFSET had to be simple constants, + ** not arbitrary expressions, we allowed some combining of LIMIT and OFFSET + ** because they could be computed at compile-time. But when LIMIT and OFFSET + ** became arbitrary expressions, we were forced to add restrictions (13) + ** and (14). */ + if( pSub->pLimit && p->pLimit ) return 0; /* Restriction (13) */ + if( pSub->pLimit && pSub->pLimit->pRight ) return 0; /* Restriction (14) */ + if( (p->selFlags & SF_Compound)!=0 && pSub->pLimit ){ + return 0; /* Restriction (15) */ + } + if( pSubSrc->nSrc==0 ) return 0; /* Restriction (7) */ + if( pSub->selFlags & SF_Distinct ) return 0; /* Restriction (4) */ + if( pSub->pLimit && (pSrc->nSrc>1 || isAgg) ){ + return 0; /* Restrictions (8)(9) */ + } + if( p->pOrderBy && pSub->pOrderBy ){ + return 0; /* Restriction (11) */ + } + if( isAgg && pSub->pOrderBy ) return 0; /* Restriction (16) */ + if( pSub->pLimit && p->pWhere ) return 0; /* Restriction (19) */ + if( pSub->pLimit && (p->selFlags & SF_Distinct)!=0 ){ + return 0; /* Restriction (21) */ + } + if( pSub->selFlags & (SF_Recursive) ){ + return 0; /* Restrictions (22) */ + } + + /* + ** If the subquery is the right operand of a LEFT JOIN, then the + ** subquery may not be a join itself (3a). Example of why this is not + ** allowed: + ** + ** t1 LEFT OUTER JOIN (t2 JOIN t3) + ** + ** If we flatten the above, we would get + ** + ** (t1 LEFT OUTER JOIN t2) JOIN t3 + ** + ** which is not at all the same thing. + ** + ** See also tickets #306, #350, and #3300. + */ + if( (pSubitem->fg.jointype & (JT_OUTER|JT_LTORJ))!=0 ){ + if( pSubSrc->nSrc>1 /* (3a) */ + /**** || IsVirtual(pSubSrc->a[0].pSTab) (3b)-omitted */ + || (p->selFlags & SF_Distinct)!=0 /* (3d) */ + || (pSubitem->fg.jointype & JT_RIGHT)!=0 /* (26) */ + ){ + return 0; + } + isOuterJoin = 1; + } + + assert( pSubSrc->nSrc>0 ); /* True by restriction (7) */ + if( iFrom>0 && (pSubSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){ + return 0; /* Restriction (27a) */ + } + + /* Condition (28) is blocked by the caller */ + assert( !pSubitem->fg.isCte || pSubitem->u2.pCteUse->eM10d!=M10d_Yes ); + + /* Restriction (17): If the sub-query is a compound SELECT, then it must + ** use only the UNION ALL operator. And none of the simple select queries + ** that make up the compound SELECT are allowed to be aggregate or distinct + ** queries. + */ + if( pSub->pPrior ){ + int ii; + if( pSub->pOrderBy ){ + return 0; /* Restriction (20) */ + } + if( isAgg || (p->selFlags & SF_Distinct)!=0 || isOuterJoin>0 ){ + return 0; /* (17d1), (17d2), or (17f) */ + } + for(pSub1=pSub; pSub1; pSub1=pSub1->pPrior){ + testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct ); + testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate ); + assert( pSub->pSrc!=0 ); + assert( (pSub->selFlags & SF_Recursive)==0 ); + assert( pSub->pEList->nExpr==pSub1->pEList->nExpr ); + if( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))!=0 /* (17b) */ + || (pSub1->pPrior && pSub1->op!=TK_ALL) /* (17a) */ + || pSub1->pSrc->nSrc<1 /* (17c) */ +#ifndef SQLITE_OMIT_WINDOWFUNC + || pSub1->pWin /* (17e) */ +#endif + ){ + return 0; + } + if( iFrom>0 && (pSub1->pSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){ + /* Without this restriction, the JT_LTORJ flag would end up being + ** omitted on left-hand tables of the right join that is being + ** flattened. */ + return 0; /* Restrictions (17g), (27b) */ + } + testcase( pSub1->pSrc->nSrc>1 ); + } + + /* Restriction (18). */ + if( p->pOrderBy ){ + for(ii=0; iipOrderBy->nExpr; ii++){ + if( p->pOrderBy->a[ii].u.x.iOrderByCol==0 ) return 0; + } + } + + /* Restriction (23) */ + if( (p->selFlags & SF_Recursive) ) return 0; + + /* Restriction (17h) */ + if( compoundHasDifferentAffinities(pSub) ) return 0; + + if( pSrc->nSrc>1 ){ + if( pParse->nSelect>500 ) return 0; + if( OptimizationDisabled(db, SQLITE_FlttnUnionAll) ) return 0; + aCsrMap = sqlite3DbMallocZero(db, ((i64)pParse->nTab+1)*sizeof(int)); + if( aCsrMap ) aCsrMap[0] = pParse->nTab; + } + } + + /***** If we reach this point, flattening is permitted. *****/ + TREETRACE(0x4,pParse,p,("flatten %u.%p from term %d\n", + pSub->selId, pSub, iFrom)); + + /* Authorize the subquery */ + pParse->zAuthContext = pSubitem->zName; + TESTONLY(i =) sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0); + testcase( i==SQLITE_DENY ); + pParse->zAuthContext = zSavedAuthContext; + + /* Delete the transient structures associated with the subquery */ + + if( ALWAYS(pSubitem->fg.isSubquery) ){ + pSub1 = sqlite3SubqueryDetach(db, pSubitem); + }else{ + pSub1 = 0; + } + assert( pSubitem->fg.isSubquery==0 ); + assert( pSubitem->fg.fixedSchema==0 ); + sqlite3DbFree(db, pSubitem->zName); + sqlite3DbFree(db, pSubitem->zAlias); + pSubitem->zName = 0; + pSubitem->zAlias = 0; + assert( pSubitem->fg.isUsing!=0 || pSubitem->u3.pOn==0 ); + + /* If the sub-query is a compound SELECT statement, then (by restrictions + ** 17 and 18 above) it must be a UNION ALL and the parent query must + ** be of the form: + ** + ** SELECT FROM () + ** + ** followed by any ORDER BY, LIMIT and/or OFFSET clauses. This block + ** creates N-1 copies of the parent query without any ORDER BY, LIMIT or + ** OFFSET clauses and joins them to the left-hand-side of the original + ** using UNION ALL operators. In this case N is the number of simple + ** select statements in the compound sub-query. + ** + ** Example: + ** + ** SELECT a+1 FROM ( + ** SELECT x FROM tab + ** UNION ALL + ** SELECT y FROM tab + ** UNION ALL + ** SELECT abs(z*2) FROM tab2 + ** ) WHERE a!=5 ORDER BY 1 + ** + ** Transformed into: + ** + ** SELECT x+1 FROM tab WHERE x+1!=5 + ** UNION ALL + ** SELECT y+1 FROM tab WHERE y+1!=5 + ** UNION ALL + ** SELECT abs(z*2)+1 FROM tab2 WHERE abs(z*2)+1!=5 + ** ORDER BY 1 + ** + ** We call this the "compound-subquery flattening". + */ + for(pSub=pSub->pPrior; pSub; pSub=pSub->pPrior){ + Select *pNew; + ExprList *pOrderBy = p->pOrderBy; + Expr *pLimit = p->pLimit; + Select *pPrior = p->pPrior; + Table *pItemTab = pSubitem->pSTab; + pSubitem->pSTab = 0; + p->pOrderBy = 0; + p->pPrior = 0; + p->pLimit = 0; + pNew = sqlite3SelectDup(db, p, 0); + p->pLimit = pLimit; + p->pOrderBy = pOrderBy; + p->op = TK_ALL; + pSubitem->pSTab = pItemTab; + if( pNew==0 ){ + p->pPrior = pPrior; + }else{ + pNew->selId = ++pParse->nSelect; + if( aCsrMap && ALWAYS(db->mallocFailed==0) ){ + renumberCursors(pParse, pNew, iFrom, aCsrMap); + } + pNew->pPrior = pPrior; + if( pPrior ) pPrior->pNext = pNew; + pNew->pNext = p; + p->pPrior = pNew; + TREETRACE(0x4,pParse,p,("compound-subquery flattener" + " creates %u as peer\n",pNew->selId)); + } + assert( pSubitem->fg.isSubquery==0 ); + } + sqlite3DbFree(db, aCsrMap); + if( db->mallocFailed ){ + assert( pSubitem->fg.fixedSchema==0 ); + assert( pSubitem->fg.isSubquery==0 ); + assert( pSubitem->u4.zDatabase==0 ); + sqlite3SrcItemAttachSubquery(pParse, pSubitem, pSub1, 0); + return 1; + } + + /* Defer deleting the Table object associated with the + ** subquery until code generation is + ** complete, since there may still exist Expr.pTab entries that + ** refer to the subquery even after flattening. Ticket #3346. + ** + ** pSubitem->pSTab is always non-NULL by test restrictions and tests above. + */ + if( ALWAYS(pSubitem->pSTab!=0) ){ + Table *pTabToDel = pSubitem->pSTab; + if( pTabToDel->nTabRef==1 ){ + Parse *pToplevel = sqlite3ParseToplevel(pParse); + sqlite3ParserAddCleanup(pToplevel, sqlite3DeleteTableGeneric, pTabToDel); + testcase( pToplevel->earlyCleanup ); + }else{ + pTabToDel->nTabRef--; + } + pSubitem->pSTab = 0; + } + + /* The following loop runs once for each term in a compound-subquery + ** flattening (as described above). If we are doing a different kind + ** of flattening - a flattening other than a compound-subquery flattening - + ** then this loop only runs once. + ** + ** This loop moves all of the FROM elements of the subquery into the + ** the FROM clause of the outer query. Before doing this, remember + ** the cursor number for the original outer query FROM element in + ** iParent. The iParent cursor will never be used. Subsequent code + ** will scan expressions looking for iParent references and replace + ** those references with expressions that resolve to the subquery FROM + ** elements we are now copying in. + */ + pSub = pSub1; + for(pParent=p; pParent; pParent=pParent->pPrior, pSub=pSub->pPrior){ + int nSubSrc; + u8 jointype = pSubitem->fg.jointype; + assert( pSub!=0 ); + pSubSrc = pSub->pSrc; /* FROM clause of subquery */ + nSubSrc = pSubSrc->nSrc; /* Number of terms in subquery FROM clause */ + pSrc = pParent->pSrc; /* FROM clause of the outer query */ + + /* The subquery uses a single slot of the FROM clause of the outer + ** query. If the subquery has more than one element in its FROM clause, + ** then expand the outer query to make space for it to hold all elements + ** of the subquery. + ** + ** Example: + ** + ** SELECT * FROM tabA, (SELECT * FROM sub1, sub2), tabB; + ** + ** The outer query has 3 slots in its FROM clause. One slot of the + ** outer query (the middle slot) is used by the subquery. The next + ** block of code will expand the outer query FROM clause to 4 slots. + ** The middle slot is expanded to two slots in order to make space + ** for the two elements in the FROM clause of the subquery. + */ + if( nSubSrc>1 ){ + pSrc = sqlite3SrcListEnlarge(pParse, pSrc, nSubSrc-1,iFrom+1); + if( pSrc==0 ) break; + pParent->pSrc = pSrc; + pSubitem = &pSrc->a[iFrom]; + } + + /* Transfer the FROM clause terms from the subquery into the + ** outer query. + */ + iNewParent = pSubSrc->a[0].iCursor; + for(i=0; ia[i+iFrom]; + assert( pItem->fg.isTabFunc==0 ); + assert( pItem->fg.isSubquery + || pItem->fg.fixedSchema + || pItem->u4.zDatabase==0 ); + if( pItem->fg.isUsing ) sqlite3IdListDelete(db, pItem->u3.pUsing); + *pItem = pSubSrc->a[i]; + pItem->fg.jointype |= (jointype & JT_LTORJ); + memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i])); + } + pSubitem->fg.jointype |= jointype; + + /* Now begin substituting subquery result set expressions for + ** references to the iParent in the outer query. + ** + ** Example: + ** + ** SELECT a+5, b*10 FROM (SELECT x*3 AS a, y+10 AS b FROM t1) WHERE a>b; + ** \ \_____________ subquery __________/ / + ** \_____________________ outer query ______________________________/ + ** + ** We look at every expression in the outer query and every place we see + ** "a" we substitute "x*3" and every place we see "b" we substitute "y+10". + */ + if( pSub->pOrderBy && (pParent->selFlags & SF_NoopOrderBy)==0 ){ + /* At this point, any non-zero iOrderByCol values indicate that the + ** ORDER BY column expression is identical to the iOrderByCol'th + ** expression returned by SELECT statement pSub. Since these values + ** do not necessarily correspond to columns in SELECT statement pParent, + ** zero them before transferring the ORDER BY clause. + ** + ** Not doing this may cause an error if a subsequent call to this + ** function attempts to flatten a compound sub-query into pParent + ** (the only way this can happen is if the compound sub-query is + ** currently part of pSub->pSrc). See ticket [d11a6e908f]. */ + ExprList *pOrderBy = pSub->pOrderBy; + for(i=0; inExpr; i++){ + pOrderBy->a[i].u.x.iOrderByCol = 0; + } + assert( pParent->pOrderBy==0 ); + pParent->pOrderBy = pOrderBy; + pSub->pOrderBy = 0; + } + pWhere = pSub->pWhere; + pSub->pWhere = 0; + if( isOuterJoin>0 ){ + assert( pSubSrc->nSrc==1 ); + sqlite3SetJoinExpr(pWhere, iNewParent, EP_OuterON); + } + if( pWhere ){ + if( pParent->pWhere ){ + pParent->pWhere = sqlite3PExpr(pParse, TK_AND, pWhere, pParent->pWhere); + }else{ + pParent->pWhere = pWhere; + } + } + if( db->mallocFailed==0 ){ + SubstContext x; + x.pParse = pParse; + x.iTable = iParent; + x.iNewTable = iNewParent; + x.isOuterJoin = isOuterJoin; + x.nSelDepth = 0; + x.pEList = pSub->pEList; + x.pCList = findLeftmostExprlist(pSub); + substSelect(&x, pParent, 0); + } + + /* The flattened query is a compound if either the inner or the + ** outer query is a compound. */ + pParent->selFlags |= pSub->selFlags & SF_Compound; + assert( (pSub->selFlags & SF_Distinct)==0 ); /* restriction (17b) */ + + /* + ** SELECT ... FROM (SELECT ... LIMIT a OFFSET b) LIMIT x OFFSET y; + ** + ** One is tempted to try to add a and b to combine the limits. But this + ** does not work if either limit is negative. + */ + if( pSub->pLimit ){ + pParent->pLimit = pSub->pLimit; + pSub->pLimit = 0; + } + + /* Recompute the SrcItem.colUsed masks for the flattened + ** tables. */ + for(i=0; ia[i+iFrom]); + } + } + + /* Finally, delete what is left of the subquery and return success. + */ + sqlite3AggInfoPersistWalkerInit(&w, pParse); + sqlite3WalkSelect(&w,pSub1); + sqlite3SelectDelete(db, pSub1); + +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x4 ){ + TREETRACE(0x4,pParse,p,("After flattening:\n")); + sqlite3TreeViewSelect(0, p, 0); + } +#endif + + return 1; +} +#endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ + +/* +** A structure to keep track of all of the column values that are fixed to +** a known value due to WHERE clause constraints of the form COLUMN=VALUE. +*/ +typedef struct WhereConst WhereConst; +struct WhereConst { + Parse *pParse; /* Parsing context */ + u8 *pOomFault; /* Pointer to pParse->db->mallocFailed */ + int nConst; /* Number for COLUMN=CONSTANT terms */ + int nChng; /* Number of times a constant is propagated */ + int bHasAffBlob; /* At least one column in apExpr[] as affinity BLOB */ + u32 mExcludeOn; /* Which ON expressions to exclude from considertion. + ** Either EP_OuterON or EP_InnerON|EP_OuterON */ + Expr **apExpr; /* [i*2] is COLUMN and [i*2+1] is VALUE */ +}; + +/* +** Add a new entry to the pConst object. Except, do not add duplicate +** pColumn entries. Also, do not add if doing so would not be appropriate. +** +** The caller guarantees the pColumn is a column and pValue is a constant. +** This routine has to do some additional checks before completing the +** insert. +*/ +static void constInsert( + WhereConst *pConst, /* The WhereConst into which we are inserting */ + Expr *pColumn, /* The COLUMN part of the constraint */ + Expr *pValue, /* The VALUE part of the constraint */ + Expr *pExpr /* Overall expression: COLUMN=VALUE or VALUE=COLUMN */ +){ + int i; + assert( pColumn->op==TK_COLUMN ); + assert( sqlite3ExprIsConstant(pConst->pParse, pValue) ); + + if( ExprHasProperty(pColumn, EP_FixedCol) ) return; + if( sqlite3ExprAffinity(pValue)!=0 ) return; + if( !sqlite3IsBinary(sqlite3ExprCompareCollSeq(pConst->pParse,pExpr)) ){ + return; + } + + /* 2018-10-25 ticket [cf5ed20f] + ** Make sure the same pColumn is not inserted more than once */ + for(i=0; inConst; i++){ + const Expr *pE2 = pConst->apExpr[i*2]; + assert( pE2->op==TK_COLUMN ); + if( pE2->iTable==pColumn->iTable + && pE2->iColumn==pColumn->iColumn + ){ + return; /* Already present. Return without doing anything. */ + } + } + assert( SQLITE_AFF_NONEbHasAffBlob = 1; + } + + pConst->nConst++; + pConst->apExpr = sqlite3DbReallocOrFree(pConst->pParse->db, pConst->apExpr, + pConst->nConst*2*sizeof(Expr*)); + if( pConst->apExpr==0 ){ + pConst->nConst = 0; + }else{ + pConst->apExpr[pConst->nConst*2-2] = pColumn; + pConst->apExpr[pConst->nConst*2-1] = pValue; + } +} + +/* +** Find all terms of COLUMN=VALUE or VALUE=COLUMN in pExpr where VALUE +** is a constant expression and where the term must be true because it +** is part of the AND-connected terms of the expression. For each term +** found, add it to the pConst structure. +*/ +static void findConstInWhere(WhereConst *pConst, Expr *pExpr){ + Expr *pRight, *pLeft; + if( NEVER(pExpr==0) ) return; + if( ExprHasProperty(pExpr, pConst->mExcludeOn) ){ + testcase( ExprHasProperty(pExpr, EP_OuterON) ); + testcase( ExprHasProperty(pExpr, EP_InnerON) ); + return; + } + if( pExpr->op==TK_AND ){ + findConstInWhere(pConst, pExpr->pRight); + findConstInWhere(pConst, pExpr->pLeft); + return; + } + if( pExpr->op!=TK_EQ ) return; + pRight = pExpr->pRight; + pLeft = pExpr->pLeft; + assert( pRight!=0 ); + assert( pLeft!=0 ); + if( pRight->op==TK_COLUMN && sqlite3ExprIsConstant(pConst->pParse, pLeft) ){ + constInsert(pConst,pRight,pLeft,pExpr); + } + if( pLeft->op==TK_COLUMN && sqlite3ExprIsConstant(pConst->pParse, pRight) ){ + constInsert(pConst,pLeft,pRight,pExpr); + } +} + +/* +** This is a helper function for Walker callback propagateConstantExprRewrite(). +** +** Argument pExpr is a candidate expression to be replaced by a value. If +** pExpr is equivalent to one of the columns named in pWalker->u.pConst, +** then overwrite it with the corresponding value. Except, do not do so +** if argument bIgnoreAffBlob is non-zero and the affinity of pExpr +** is SQLITE_AFF_BLOB. +*/ +static int propagateConstantExprRewriteOne( + WhereConst *pConst, + Expr *pExpr, + int bIgnoreAffBlob +){ + int i; + if( pConst->pOomFault[0] ) return WRC_Prune; + if( pExpr->op!=TK_COLUMN ) return WRC_Continue; + if( ExprHasProperty(pExpr, EP_FixedCol|pConst->mExcludeOn) ){ + testcase( ExprHasProperty(pExpr, EP_FixedCol) ); + testcase( ExprHasProperty(pExpr, EP_OuterON) ); + testcase( ExprHasProperty(pExpr, EP_InnerON) ); + return WRC_Continue; + } + for(i=0; inConst; i++){ + Expr *pColumn = pConst->apExpr[i*2]; + if( pColumn==pExpr ) continue; + if( pColumn->iTable!=pExpr->iTable ) continue; + if( pColumn->iColumn!=pExpr->iColumn ) continue; + assert( SQLITE_AFF_NONEnChng++; + ExprClearProperty(pExpr, EP_Leaf); + ExprSetProperty(pExpr, EP_FixedCol); + assert( pExpr->pLeft==0 ); + pExpr->pLeft = sqlite3ExprDup(pConst->pParse->db, pConst->apExpr[i*2+1], 0); + if( pConst->pParse->db->mallocFailed ) return WRC_Prune; + break; + } + return WRC_Prune; +} + +/* +** This is a Walker expression callback. pExpr is a node from the WHERE +** clause of a SELECT statement. This function examines pExpr to see if +** any substitutions based on the contents of pWalker->u.pConst should +** be made to pExpr or its immediate children. +** +** A substitution is made if: +** +** + pExpr is a column with an affinity other than BLOB that matches +** one of the columns in pWalker->u.pConst, or +** +** + pExpr is a binary comparison operator (=, <=, >=, <, >) that +** uses an affinity other than TEXT and one of its immediate +** children is a column that matches one of the columns in +** pWalker->u.pConst. +*/ +static int propagateConstantExprRewrite(Walker *pWalker, Expr *pExpr){ + WhereConst *pConst = pWalker->u.pConst; + assert( TK_GT==TK_EQ+1 ); + assert( TK_LE==TK_EQ+2 ); + assert( TK_LT==TK_EQ+3 ); + assert( TK_GE==TK_EQ+4 ); + if( pConst->bHasAffBlob ){ + if( (pExpr->op>=TK_EQ && pExpr->op<=TK_GE) + || pExpr->op==TK_IS + ){ + propagateConstantExprRewriteOne(pConst, pExpr->pLeft, 0); + if( pConst->pOomFault[0] ) return WRC_Prune; + if( sqlite3ExprAffinity(pExpr->pLeft)!=SQLITE_AFF_TEXT ){ + propagateConstantExprRewriteOne(pConst, pExpr->pRight, 0); + } + } + } + return propagateConstantExprRewriteOne(pConst, pExpr, pConst->bHasAffBlob); +} + +/* +** The WHERE-clause constant propagation optimization. +** +** If the WHERE clause contains terms of the form COLUMN=CONSTANT or +** CONSTANT=COLUMN that are top-level AND-connected terms that are not +** part of a ON clause from a LEFT JOIN, then throughout the query +** replace all other occurrences of COLUMN with CONSTANT. +** +** For example, the query: +** +** SELECT * FROM t1, t2, t3 WHERE t1.a=39 AND t2.b=t1.a AND t3.c=t2.b +** +** Is transformed into +** +** SELECT * FROM t1, t2, t3 WHERE t1.a=39 AND t2.b=39 AND t3.c=39 +** +** Return true if any transformations where made and false if not. +** +** Implementation note: Constant propagation is tricky due to affinity +** and collating sequence interactions. Consider this example: +** +** CREATE TABLE t1(a INT,b TEXT); +** INSERT INTO t1 VALUES(123,'0123'); +** SELECT * FROM t1 WHERE a=123 AND b=a; +** SELECT * FROM t1 WHERE a=123 AND b=123; +** +** The two SELECT statements above should return different answers. b=a +** is always true because the comparison uses numeric affinity, but b=123 +** is false because it uses text affinity and '0123' is not the same as '123'. +** To work around this, the expression tree is not actually changed from +** "b=a" to "b=123" but rather the "a" in "b=a" is tagged with EP_FixedCol +** and the "123" value is hung off of the pLeft pointer. Code generator +** routines know to generate the constant "123" instead of looking up the +** column value. Also, to avoid collation problems, this optimization is +** only attempted if the "a=123" term uses the default BINARY collation. +** +** 2021-05-25 forum post 6a06202608: Another troublesome case is... +** +** CREATE TABLE t1(x); +** INSERT INTO t1 VALUES(10.0); +** SELECT 1 FROM t1 WHERE x=10 AND x LIKE 10; +** +** The query should return no rows, because the t1.x value is '10.0' not '10' +** and '10.0' is not LIKE '10'. But if we are not careful, the first WHERE +** term "x=10" will cause the second WHERE term to become "10 LIKE 10", +** resulting in a false positive. To avoid this, constant propagation for +** columns with BLOB affinity is only allowed if the constant is used with +** operators ==, <=, <, >=, >, or IS in a way that will cause the correct +** type conversions to occur. See logic associated with the bHasAffBlob flag +** for details. +*/ +static int propagateConstants( + Parse *pParse, /* The parsing context */ + Select *p /* The query in which to propagate constants */ +){ + WhereConst x; + Walker w; + int nChng = 0; + x.pParse = pParse; + x.pOomFault = &pParse->db->mallocFailed; + do{ + x.nConst = 0; + x.nChng = 0; + x.apExpr = 0; + x.bHasAffBlob = 0; + if( ALWAYS(p->pSrc!=0) + && p->pSrc->nSrc>0 + && (p->pSrc->a[0].fg.jointype & JT_LTORJ)!=0 + ){ + /* Do not propagate constants on any ON clause if there is a + ** RIGHT JOIN anywhere in the query */ + x.mExcludeOn = EP_InnerON | EP_OuterON; + }else{ + /* Do not propagate constants through the ON clause of a LEFT JOIN */ + x.mExcludeOn = EP_OuterON; + } + findConstInWhere(&x, p->pWhere); + if( x.nConst ){ + memset(&w, 0, sizeof(w)); + w.pParse = pParse; + w.xExprCallback = propagateConstantExprRewrite; + w.xSelectCallback = sqlite3SelectWalkNoop; + w.xSelectCallback2 = 0; + w.walkerDepth = 0; + w.u.pConst = &x; + sqlite3WalkExpr(&w, p->pWhere); + sqlite3DbFree(x.pParse->db, x.apExpr); + nChng += x.nChng; + } + }while( x.nChng ); + return nChng; +} + +#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) +# if !defined(SQLITE_OMIT_WINDOWFUNC) +/* +** This function is called to determine whether or not it is safe to +** push WHERE clause expression pExpr down to FROM clause sub-query +** pSubq, which contains at least one window function. Return 1 +** if it is safe and the expression should be pushed down, or 0 +** otherwise. +** +** It is only safe to push the expression down if it consists only +** of constants and copies of expressions that appear in the PARTITION +** BY clause of all window function used by the sub-query. It is safe +** to filter out entire partitions, but not rows within partitions, as +** this may change the results of the window functions. +** +** At the time this function is called it is guaranteed that +** +** * the sub-query uses only one distinct window frame, and +** * that the window frame has a PARTITION BY clause. +*/ +static int pushDownWindowCheck(Parse *pParse, Select *pSubq, Expr *pExpr){ + assert( pSubq->pWin->pPartition ); + assert( (pSubq->selFlags & SF_MultiPart)==0 ); + assert( pSubq->pPrior==0 ); + return sqlite3ExprIsConstantOrGroupBy(pParse, pExpr, pSubq->pWin->pPartition); +} +# endif /* SQLITE_OMIT_WINDOWFUNC */ +#endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ + +#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) +/* +** Make copies of relevant WHERE clause terms of the outer query into +** the WHERE clause of subquery. Example: +** +** SELECT * FROM (SELECT a AS x, c-d AS y FROM t1) WHERE x=5 AND y=10; +** +** Transformed into: +** +** SELECT * FROM (SELECT a AS x, c-d AS y FROM t1 WHERE a=5 AND c-d=10) +** WHERE x=5 AND y=10; +** +** The hope is that the terms added to the inner query will make it more +** efficient. +** +** NAME AMBIGUITY +** +** This optimization is called the "WHERE-clause push-down optimization" +** or sometimes the "predicate push-down optimization". +** +** Do not confuse this optimization with another unrelated optimization +** with a similar name: The "MySQL push-down optimization" causes WHERE +** clause terms that can be evaluated using only the index and without +** reference to the table are run first, so that if they are false, +** unnecessary table seeks are avoided. +** +** RULES +** +** Do not attempt this optimization if: +** +** (1) (** This restriction was removed on 2017-09-29. We used to +** disallow this optimization for aggregate subqueries, but now +** it is allowed by putting the extra terms on the HAVING clause. +** The added HAVING clause is pointless if the subquery lacks +** a GROUP BY clause. But such a HAVING clause is also harmless +** so there does not appear to be any reason to add extra logic +** to suppress it. **) +** +** (2) The inner query is the recursive part of a common table expression. +** +** (3) The inner query has a LIMIT clause (since the changes to the WHERE +** clause would change the meaning of the LIMIT). +** +** (4) The inner query is the right operand of a LEFT JOIN and the +** expression to be pushed down does not come from the ON clause +** on that LEFT JOIN. +** +** (5) The WHERE clause expression originates in the ON or USING clause +** of a LEFT JOIN where iCursor is not the right-hand table of that +** left join. An example: +** +** SELECT * +** FROM (SELECT 1 AS a1 UNION ALL SELECT 2) AS aa +** JOIN (SELECT 1 AS b2 UNION ALL SELECT 2) AS bb ON (a1=b2) +** LEFT JOIN (SELECT 8 AS c3 UNION ALL SELECT 9) AS cc ON (b2=2); +** +** The correct answer is three rows: (1,1,NULL),(2,2,8),(2,2,9). +** But if the (b2=2) term were to be pushed down into the bb subquery, +** then the (1,1,NULL) row would be suppressed. +** +** (6) Window functions make things tricky as changes to the WHERE clause +** of the inner query could change the window over which window +** functions are calculated. Therefore, do not attempt the optimization +** if: +** +** (6a) The inner query uses multiple incompatible window partitions. +** +** (6b) The inner query is a compound and uses window-functions. +** +** (6c) The WHERE clause does not consist entirely of constants and +** copies of expressions found in the PARTITION BY clause of +** all window-functions used by the sub-query. It is safe to +** filter out entire partitions, as this does not change the +** window over which any window-function is calculated. +** +** (7) The inner query is a Common Table Expression (CTE) that should +** be materialized. (This restriction is implemented in the calling +** routine.) +** +** (8) If the subquery is a compound that uses UNION, INTERSECT, +** or EXCEPT, then all of the result set columns for all arms of +** the compound must use the BINARY collating sequence. +** +** (9) All three of the following are true: +** +** (9a) The WHERE clause expression originates in the ON or USING clause +** of a join (either an INNER or an OUTER join), and +** +** (9b) The subquery is to the right of the ON/USING clause +** +** (9c) There is a RIGHT JOIN (or FULL JOIN) in between the ON/USING +** clause and the subquery. +** +** Without this restriction, the WHERE-clause push-down optimization +** might move the ON/USING filter expression from the left side of a +** RIGHT JOIN over to the right side, which leads to incorrect answers. +** See also restriction (6) in sqlite3ExprIsSingleTableConstraint(). +** +** (10) The inner query is not the right-hand table of a RIGHT JOIN. +** +** (11) The subquery is not a VALUES clause +** +** (12) The WHERE clause is not "rowid ISNULL" or the equivalent. This +** case only comes up if SQLite is compiled using +** SQLITE_ALLOW_ROWID_IN_VIEW. +** +** Return 0 if no changes are made and non-zero if one or more WHERE clause +** terms are duplicated into the subquery. +*/ +static int pushDownWhereTerms( + Parse *pParse, /* Parse context (for malloc() and error reporting) */ + Select *pSubq, /* The subquery whose WHERE clause is to be augmented */ + Expr *pWhere, /* The WHERE clause of the outer query */ + SrcList *pSrcList, /* The complete from clause of the outer query */ + int iSrc /* Which FROM clause term to try to push into */ +){ + Expr *pNew; + SrcItem *pSrc; /* The subquery FROM term into which WHERE is pushed */ + int nChng = 0; + pSrc = &pSrcList->a[iSrc]; + if( pWhere==0 ) return 0; + if( pSubq->selFlags & (SF_Recursive|SF_MultiPart) ){ + return 0; /* restrictions (2) and (11) */ + } + if( pSrc->fg.jointype & (JT_LTORJ|JT_RIGHT) ){ + return 0; /* restrictions (10) */ + } + + if( pSubq->pPrior ){ + Select *pSel; + int notUnionAll = 0; + for(pSel=pSubq; pSel; pSel=pSel->pPrior){ + u8 op = pSel->op; + assert( op==TK_ALL || op==TK_SELECT + || op==TK_UNION || op==TK_INTERSECT || op==TK_EXCEPT ); + if( op!=TK_ALL && op!=TK_SELECT ){ + notUnionAll = 1; + } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pSel->pWin ) return 0; /* restriction (6b) */ +#endif + } + if( notUnionAll ){ + /* If any of the compound arms are connected using UNION, INTERSECT, + ** or EXCEPT, then we must ensure that none of the columns use a + ** non-BINARY collating sequence. */ + for(pSel=pSubq; pSel; pSel=pSel->pPrior){ + int ii; + const ExprList *pList = pSel->pEList; + assert( pList!=0 ); + for(ii=0; iinExpr; ii++){ + CollSeq *pColl = sqlite3ExprCollSeq(pParse, pList->a[ii].pExpr); + if( !sqlite3IsBinary(pColl) ){ + return 0; /* Restriction (8) */ + } + } + } + } + }else{ +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pSubq->pWin && pSubq->pWin->pPartition==0 ) return 0; +#endif + } + +#ifdef SQLITE_DEBUG + /* Only the first term of a compound can have a WITH clause. But make + ** sure no other terms are marked SF_Recursive in case something changes + ** in the future. + */ + { + Select *pX; + for(pX=pSubq; pX; pX=pX->pPrior){ + assert( (pX->selFlags & (SF_Recursive))==0 ); + } + } +#endif + + if( pSubq->pLimit!=0 ){ + return 0; /* restriction (3) */ + } + while( pWhere->op==TK_AND ){ + nChng += pushDownWhereTerms(pParse, pSubq, pWhere->pRight, pSrcList, iSrc); + pWhere = pWhere->pLeft; + } + +#if 0 /* These checks now done by sqlite3ExprIsSingleTableConstraint() */ + if( ExprHasProperty(pWhere, EP_OuterON|EP_InnerON) /* (9a) */ + && (pSrcList->a[0].fg.jointype & JT_LTORJ)!=0 /* Fast pre-test of (9c) */ + ){ + int jj; + for(jj=0; jjw.iJoin==pSrcList->a[jj].iCursor ){ + /* If we reach this point, both (9a) and (9b) are satisfied. + ** The following loop checks (9c): + */ + for(jj++; jja[jj].fg.jointype & JT_RIGHT)!=0 ){ + return 0; /* restriction (9) */ + } + } + } + } + } + if( isLeftJoin + && (ExprHasProperty(pWhere,EP_OuterON)==0 + || pWhere->w.iJoin!=iCursor) + ){ + return 0; /* restriction (4) */ + } + if( ExprHasProperty(pWhere,EP_OuterON) + && pWhere->w.iJoin!=iCursor + ){ + return 0; /* restriction (5) */ + } +#endif + +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + if( ViewCanHaveRowid && (pWhere->op==TK_ISNULL || pWhere->op==TK_NOTNULL) ){ + Expr *pLeft = pWhere->pLeft; + if( ALWAYS(pLeft) + && pLeft->op==TK_COLUMN + && pLeft->iColumn < 0 + ){ + return 0; /* Restriction (12) */ + } + } +#endif + + if( sqlite3ExprIsSingleTableConstraint(pWhere, pSrcList, iSrc, 1) ){ + nChng++; + pSubq->selFlags |= SF_PushDown; + while( pSubq ){ + SubstContext x; + pNew = sqlite3ExprDup(pParse->db, pWhere, 0); + unsetJoinExpr(pNew, -1, 1); + x.pParse = pParse; + x.iTable = pSrc->iCursor; + x.iNewTable = pSrc->iCursor; + x.isOuterJoin = 0; + x.nSelDepth = 0; + x.pEList = pSubq->pEList; + x.pCList = findLeftmostExprlist(pSubq); + pNew = substExpr(&x, pNew); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pSubq->pWin && 0==pushDownWindowCheck(pParse, pSubq, pNew) ){ + /* Restriction 6c has prevented push-down in this case */ + sqlite3ExprDelete(pParse->db, pNew); + nChng--; + break; + } +#endif + if( pSubq->selFlags & SF_Aggregate ){ + pSubq->pHaving = sqlite3ExprAnd(pParse, pSubq->pHaving, pNew); + }else{ + pSubq->pWhere = sqlite3ExprAnd(pParse, pSubq->pWhere, pNew); + } + pSubq = pSubq->pPrior; + } + } + return nChng; +} +#endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ + +/* +** Check to see if a subquery contains result-set columns that are +** never used. If it does, change the value of those result-set columns +** to NULL so that they do not cause unnecessary work to compute. +** +** Return the number of column that were changed to NULL. +*/ +static int disableUnusedSubqueryResultColumns(SrcItem *pItem){ + int nCol; + Select *pSub; /* The subquery to be simplified */ + Select *pX; /* For looping over compound elements of pSub */ + Table *pTab; /* The table that describes the subquery */ + int j; /* Column number */ + int nChng = 0; /* Number of columns converted to NULL */ + Bitmask colUsed; /* Columns that may not be NULLed out */ + + assert( pItem!=0 ); + if( pItem->fg.isCorrelated || pItem->fg.isCte ){ + return 0; + } + assert( pItem->pSTab!=0 ); + pTab = pItem->pSTab; + assert( pItem->fg.isSubquery ); + pSub = pItem->u4.pSubq->pSelect; + assert( pSub->pEList->nExpr==pTab->nCol ); + for(pX=pSub; pX; pX=pX->pPrior){ + if( (pX->selFlags & (SF_Distinct|SF_Aggregate))!=0 ){ + testcase( pX->selFlags & SF_Distinct ); + testcase( pX->selFlags & SF_Aggregate ); + return 0; + } + if( pX->pPrior && pX->op!=TK_ALL ){ + /* This optimization does not work for compound subqueries that + ** use UNION, INTERSECT, or EXCEPT. Only UNION ALL is allowed. */ + return 0; + } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pX->pWin ){ + /* This optimization does not work for subqueries that use window + ** functions. */ + return 0; + } +#endif + } + colUsed = pItem->colUsed; + if( pSub->pOrderBy ){ + ExprList *pList = pSub->pOrderBy; + for(j=0; jnExpr; j++){ + u16 iCol = pList->a[j].u.x.iOrderByCol; + if( iCol>0 ){ + iCol--; + colUsed |= ((Bitmask)1)<<(iCol>=BMS ? BMS-1 : iCol); + } + } + } + nCol = pTab->nCol; + for(j=0; jpPrior) { + Expr *pY = pX->pEList->a[j].pExpr; + if( pY->op==TK_NULL ) continue; + pY->op = TK_NULL; + ExprClearProperty(pY, EP_Skip|EP_Unlikely); + pX->selFlags |= SF_PushDown; + nChng++; + } + } + return nChng; +} + + +/* +** The pFunc is the only aggregate function in the query. Check to see +** if the query is a candidate for the min/max optimization. +** +** If the query is a candidate for the min/max optimization, then set +** *ppMinMax to be an ORDER BY clause to be used for the optimization +** and return either WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX depending on +** whether pFunc is a min() or max() function. +** +** If the query is not a candidate for the min/max optimization, return +** WHERE_ORDERBY_NORMAL (which must be zero). +** +** This routine must be called after aggregate functions have been +** located but before their arguments have been subjected to aggregate +** analysis. +*/ +static u8 minMaxQuery(sqlite3 *db, Expr *pFunc, ExprList **ppMinMax){ + int eRet = WHERE_ORDERBY_NORMAL; /* Return value */ + ExprList *pEList; /* Arguments to agg function */ + const char *zFunc; /* Name of aggregate function pFunc */ + ExprList *pOrderBy; + u8 sortFlags = 0; + + assert( *ppMinMax==0 ); + assert( pFunc->op==TK_AGG_FUNCTION ); + assert( !IsWindowFunc(pFunc) ); + assert( ExprUseXList(pFunc) ); + pEList = pFunc->x.pList; + if( pEList==0 + || pEList->nExpr!=1 + || ExprHasProperty(pFunc, EP_WinFunc) + || OptimizationDisabled(db, SQLITE_MinMaxOpt) + ){ + return eRet; + } + assert( !ExprHasProperty(pFunc, EP_IntValue) ); + zFunc = pFunc->u.zToken; + if( sqlite3StrICmp(zFunc, "min")==0 ){ + eRet = WHERE_ORDERBY_MIN; + if( sqlite3ExprCanBeNull(pEList->a[0].pExpr) ){ + sortFlags = KEYINFO_ORDER_BIGNULL; + } + }else if( sqlite3StrICmp(zFunc, "max")==0 ){ + eRet = WHERE_ORDERBY_MAX; + sortFlags = KEYINFO_ORDER_DESC; + }else{ + return eRet; + } + *ppMinMax = pOrderBy = sqlite3ExprListDup(db, pEList, 0); + assert( pOrderBy!=0 || db->mallocFailed ); + if( pOrderBy ) pOrderBy->a[0].fg.sortFlags = sortFlags; + return eRet; +} + +/* +** The select statement passed as the first argument is an aggregate query. +** The second argument is the associated aggregate-info object. This +** function tests if the SELECT is of the form: +** +** SELECT count(*) FROM +** +** where table is a database table, not a sub-select or view. If the query +** does match this pattern, then a pointer to the Table object representing +** is returned. Otherwise, NULL is returned. +** +** This routine checks to see if it is safe to use the count optimization. +** A correct answer is still obtained (though perhaps more slowly) if +** this routine returns NULL when it could have returned a table pointer. +** But returning the pointer when NULL should have been returned can +** result in incorrect answers and/or crashes. So, when in doubt, return NULL. +*/ +static Table *isSimpleCount(Select *p, AggInfo *pAggInfo){ + Table *pTab; + Expr *pExpr; + + assert( !p->pGroupBy ); + + if( p->pWhere + || p->pEList->nExpr!=1 + || p->pSrc->nSrc!=1 + || p->pSrc->a[0].fg.isSubquery + || pAggInfo->nFunc!=1 + || p->pHaving + ){ + return 0; + } + pTab = p->pSrc->a[0].pSTab; + assert( pTab!=0 ); + assert( !IsView(pTab) ); + if( !IsOrdinaryTable(pTab) ) return 0; + pExpr = p->pEList->a[0].pExpr; + assert( pExpr!=0 ); + if( pExpr->op!=TK_AGG_FUNCTION ) return 0; + if( pExpr->pAggInfo!=pAggInfo ) return 0; + if( (pAggInfo->aFunc[0].pFunc->funcFlags&SQLITE_FUNC_COUNT)==0 ) return 0; + assert( pAggInfo->aFunc[0].pFExpr==pExpr ); + testcase( ExprHasProperty(pExpr, EP_Distinct) ); + testcase( ExprHasProperty(pExpr, EP_WinFunc) ); + if( ExprHasProperty(pExpr, EP_Distinct|EP_WinFunc) ) return 0; + + return pTab; +} + +/* +** If the source-list item passed as an argument was augmented with an +** INDEXED BY clause, then try to locate the specified index. If there +** was such a clause and the named index cannot be found, return +** SQLITE_ERROR and leave an error in pParse. Otherwise, populate +** pFrom->pIndex and return SQLITE_OK. +*/ +SQLITE_PRIVATE int sqlite3IndexedByLookup(Parse *pParse, SrcItem *pFrom){ + Table *pTab = pFrom->pSTab; + char *zIndexedBy = pFrom->u1.zIndexedBy; + Index *pIdx; + assert( pTab!=0 ); + assert( pFrom->fg.isIndexedBy!=0 ); + + for(pIdx=pTab->pIndex; + pIdx && sqlite3StrICmp(pIdx->zName, zIndexedBy); + pIdx=pIdx->pNext + ); + if( !pIdx ){ + sqlite3ErrorMsg(pParse, "no such index: %s", zIndexedBy, 0); + pParse->checkSchema = 1; + return SQLITE_ERROR; + } + assert( pFrom->fg.isCte==0 ); + pFrom->u2.pIBIndex = pIdx; + return SQLITE_OK; +} + +/* +** Detect compound SELECT statements that use an ORDER BY clause with +** an alternative collating sequence. +** +** SELECT ... FROM t1 EXCEPT SELECT ... FROM t2 ORDER BY .. COLLATE ... +** +** These are rewritten as a subquery: +** +** SELECT * FROM (SELECT ... FROM t1 EXCEPT SELECT ... FROM t2) +** ORDER BY ... COLLATE ... +** +** This transformation is necessary because the multiSelectOrderBy() routine +** above that generates the code for a compound SELECT with an ORDER BY clause +** uses a merge algorithm that requires the same collating sequence on the +** result columns as on the ORDER BY clause. See ticket +** http://sqlite.org/src/info/6709574d2a +** +** This transformation is only needed for EXCEPT, INTERSECT, and UNION. +** The UNION ALL operator works fine with multiSelectOrderBy() even when +** there are COLLATE terms in the ORDER BY. +*/ +static int convertCompoundSelectToSubquery(Walker *pWalker, Select *p){ + int i; + Select *pNew; + Select *pX; + sqlite3 *db; + struct ExprList_item *a; + SrcList *pNewSrc; + Parse *pParse; + Token dummy; + + if( p->pPrior==0 ) return WRC_Continue; + if( p->pOrderBy==0 ) return WRC_Continue; + for(pX=p; pX && (pX->op==TK_ALL || pX->op==TK_SELECT); pX=pX->pPrior){} + if( pX==0 ) return WRC_Continue; + a = p->pOrderBy->a; +#ifndef SQLITE_OMIT_WINDOWFUNC + /* If iOrderByCol is already non-zero, then it has already been matched + ** to a result column of the SELECT statement. This occurs when the + ** SELECT is rewritten for window-functions processing and then passed + ** to sqlite3SelectPrep() and similar a second time. The rewriting done + ** by this function is not required in this case. */ + if( a[0].u.x.iOrderByCol ) return WRC_Continue; +#endif + for(i=p->pOrderBy->nExpr-1; i>=0; i--){ + if( a[i].pExpr->flags & EP_Collate ) break; + } + if( i<0 ) return WRC_Continue; + + /* If we reach this point, that means the transformation is required. */ + + pParse = pWalker->pParse; + db = pParse->db; + pNew = sqlite3DbMallocZero(db, sizeof(*pNew) ); + if( pNew==0 ) return WRC_Abort; + memset(&dummy, 0, sizeof(dummy)); + pNewSrc = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&dummy,pNew,0); + assert( pNewSrc!=0 || pParse->nErr ); + if( pParse->nErr ){ + sqlite3SrcListDelete(db, pNewSrc); + return WRC_Abort; + } + *pNew = *p; + p->pSrc = pNewSrc; + p->pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ASTERISK, 0)); + p->op = TK_SELECT; + p->pWhere = 0; + pNew->pGroupBy = 0; + pNew->pHaving = 0; + pNew->pOrderBy = 0; + p->pPrior = 0; + p->pNext = 0; + p->pWith = 0; +#ifndef SQLITE_OMIT_WINDOWFUNC + p->pWinDefn = 0; +#endif + p->selFlags &= ~(u32)SF_Compound; + assert( (p->selFlags & SF_Converted)==0 ); + p->selFlags |= SF_Converted; + assert( pNew->pPrior!=0 ); + pNew->pPrior->pNext = pNew; + pNew->pLimit = 0; + return WRC_Continue; +} + +/* +** Check to see if the FROM clause term pFrom has table-valued function +** arguments. If it does, leave an error message in pParse and return +** non-zero, since pFrom is not allowed to be a table-valued function. +*/ +static int cannotBeFunction(Parse *pParse, SrcItem *pFrom){ + if( pFrom->fg.isTabFunc ){ + sqlite3ErrorMsg(pParse, "'%s' is not a function", pFrom->zName); + return 1; + } + return 0; +} + +#ifndef SQLITE_OMIT_CTE +/* +** Argument pWith (which may be NULL) points to a linked list of nested +** WITH contexts, from inner to outermost. If the table identified by +** FROM clause element pItem is really a common-table-expression (CTE) +** then return a pointer to the CTE definition for that table. Otherwise +** return NULL. +** +** If a non-NULL value is returned, set *ppContext to point to the With +** object that the returned CTE belongs to. +*/ +static struct Cte *searchWith( + With *pWith, /* Current innermost WITH clause */ + SrcItem *pItem, /* FROM clause element to resolve */ + With **ppContext /* OUT: WITH clause return value belongs to */ +){ + const char *zName = pItem->zName; + With *p; + assert( pItem->fg.fixedSchema || pItem->u4.zDatabase==0 ); + assert( zName!=0 ); + for(p=pWith; p; p=p->pOuter){ + int i; + for(i=0; inCte; i++){ + if( sqlite3StrICmp(zName, p->a[i].zName)==0 ){ + *ppContext = p; + return &p->a[i]; + } + } + if( p->bView ) break; + } + return 0; +} + +/* The code generator maintains a stack of active WITH clauses +** with the inner-most WITH clause being at the top of the stack. +** +** This routine pushes the WITH clause passed as the second argument +** onto the top of the stack. If argument bFree is true, then this +** WITH clause will never be popped from the stack but should instead +** be freed along with the Parse object. In other cases, when +** bFree==0, the With object will be freed along with the SELECT +** statement with which it is associated. +** +** This routine returns a copy of pWith. Or, if bFree is true and +** the pWith object is destroyed immediately due to an OOM condition, +** then this routine return NULL. +** +** If bFree is true, do not continue to use the pWith pointer after +** calling this routine, Instead, use only the return value. +*/ +SQLITE_PRIVATE With *sqlite3WithPush(Parse *pParse, With *pWith, u8 bFree){ + if( pWith ){ + if( bFree ){ + pWith = (With*)sqlite3ParserAddCleanup(pParse, sqlite3WithDeleteGeneric, + pWith); + if( pWith==0 ) return 0; + } + if( pParse->nErr==0 ){ + assert( pParse->pWith!=pWith ); + pWith->pOuter = pParse->pWith; + pParse->pWith = pWith; + } + } + return pWith; +} + +/* +** This function checks if argument pFrom refers to a CTE declared by +** a WITH clause on the stack currently maintained by the parser (on the +** pParse->pWith linked list). And if currently processing a CTE +** CTE expression, through routine checks to see if the reference is +** a recursive reference to the CTE. +** +** If pFrom matches a CTE according to either of these two above, pFrom->pSTab +** and other fields are populated accordingly. +** +** Return 0 if no match is found. +** Return 1 if a match is found. +** Return 2 if an error condition is detected. +*/ +static int resolveFromTermToCte( + Parse *pParse, /* The parsing context */ + Walker *pWalker, /* Current tree walker */ + SrcItem *pFrom /* The FROM clause term to check */ +){ + Cte *pCte; /* Matched CTE (or NULL if no match) */ + With *pWith; /* The matching WITH */ + + assert( pFrom->pSTab==0 ); + if( pParse->pWith==0 ){ + /* There are no WITH clauses in the stack. No match is possible */ + return 0; + } + if( pParse->nErr ){ + /* Prior errors might have left pParse->pWith in a goofy state, so + ** go no further. */ + return 0; + } + assert( pFrom->fg.hadSchema==0 || pFrom->fg.notCte!=0 ); + if( pFrom->fg.fixedSchema==0 && pFrom->u4.zDatabase!=0 ){ + /* The FROM term contains a schema qualifier (ex: main.t1) and so + ** it cannot possibly be a CTE reference. */ + return 0; + } + if( pFrom->fg.notCte ){ + /* The FROM term is specifically excluded from matching a CTE. + ** (1) It is part of a trigger that used to have zDatabase but had + ** zDatabase removed by sqlite3FixTriggerStep(). + ** (2) This is the first term in the FROM clause of an UPDATE. + */ + return 0; + } + pCte = searchWith(pParse->pWith, pFrom, &pWith); + if( pCte ){ + sqlite3 *db = pParse->db; + Table *pTab; + ExprList *pEList; + Select *pSel; + Select *pLeft; /* Left-most SELECT statement */ + Select *pRecTerm; /* Left-most recursive term */ + int bMayRecursive; /* True if compound joined by UNION [ALL] */ + With *pSavedWith; /* Initial value of pParse->pWith */ + int iRecTab = -1; /* Cursor for recursive table */ + CteUse *pCteUse; + + /* If pCte->zCteErr is non-NULL at this point, then this is an illegal + ** recursive reference to CTE pCte. Leave an error in pParse and return + ** early. If pCte->zCteErr is NULL, then this is not a recursive reference. + ** In this case, proceed. */ + if( pCte->zCteErr ){ + sqlite3ErrorMsg(pParse, pCte->zCteErr, pCte->zName); + return 2; + } + if( cannotBeFunction(pParse, pFrom) ) return 2; + + assert( pFrom->pSTab==0 ); + pTab = sqlite3DbMallocZero(db, sizeof(Table)); + if( pTab==0 ) return 2; + pCteUse = pCte->pUse; + if( pCteUse==0 ){ + pCte->pUse = pCteUse = sqlite3DbMallocZero(db, sizeof(pCteUse[0])); + if( pCteUse==0 + || sqlite3ParserAddCleanup(pParse,sqlite3DbFree,pCteUse)==0 + ){ + sqlite3DbFree(db, pTab); + return 2; + } + pCteUse->eM10d = pCte->eM10d; + } + pFrom->pSTab = pTab; + pTab->nTabRef = 1; + pTab->zName = sqlite3DbStrDup(db, pCte->zName); + pTab->iPKey = -1; + pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) ); + pTab->tabFlags |= TF_Ephemeral | TF_NoVisibleRowid; + sqlite3SrcItemAttachSubquery(pParse, pFrom, pCte->pSelect, 1); + if( db->mallocFailed ) return 2; + assert( pFrom->fg.isSubquery && pFrom->u4.pSubq ); + pSel = pFrom->u4.pSubq->pSelect; + assert( pSel!=0 ); + pSel->selFlags |= SF_CopyCte; + if( pFrom->fg.isIndexedBy ){ + sqlite3ErrorMsg(pParse, "no such index: \"%s\"", pFrom->u1.zIndexedBy); + return 2; + } + assert( !pFrom->fg.isIndexedBy ); + pFrom->fg.isCte = 1; + pFrom->u2.pCteUse = pCteUse; + pCteUse->nUse++; + + /* Check if this is a recursive CTE. */ + pRecTerm = pSel; + bMayRecursive = ( pSel->op==TK_ALL || pSel->op==TK_UNION ); + while( bMayRecursive && pRecTerm->op==pSel->op ){ + int i; + SrcList *pSrc = pRecTerm->pSrc; + assert( pRecTerm->pPrior!=0 ); + for(i=0; inSrc; i++){ + SrcItem *pItem = &pSrc->a[i]; + if( pItem->zName!=0 + && !pItem->fg.hadSchema + && ALWAYS( !pItem->fg.isSubquery ) + && (pItem->fg.fixedSchema || pItem->u4.zDatabase==0) + && 0==sqlite3StrICmp(pItem->zName, pCte->zName) + ){ + pItem->pSTab = pTab; + pTab->nTabRef++; + pItem->fg.isRecursive = 1; + if( pRecTerm->selFlags & SF_Recursive ){ + sqlite3ErrorMsg(pParse, + "multiple references to recursive table: %s", pCte->zName + ); + return 2; + } + pRecTerm->selFlags |= SF_Recursive; + if( iRecTab<0 ) iRecTab = pParse->nTab++; + pItem->iCursor = iRecTab; + } + } + if( (pRecTerm->selFlags & SF_Recursive)==0 ) break; + pRecTerm = pRecTerm->pPrior; + } + + pCte->zCteErr = "circular reference: %s"; + pSavedWith = pParse->pWith; + pParse->pWith = pWith; + if( pSel->selFlags & SF_Recursive ){ + int rc; + assert( pRecTerm!=0 ); + assert( (pRecTerm->selFlags & SF_Recursive)==0 ); + assert( pRecTerm->pNext!=0 ); + assert( (pRecTerm->pNext->selFlags & SF_Recursive)!=0 ); + assert( pRecTerm->pWith==0 ); + pRecTerm->pWith = pSel->pWith; + rc = sqlite3WalkSelect(pWalker, pRecTerm); + pRecTerm->pWith = 0; + if( rc ){ + pParse->pWith = pSavedWith; + return 2; + } + }else{ + if( sqlite3WalkSelect(pWalker, pSel) ){ + pParse->pWith = pSavedWith; + return 2; + } + } + pParse->pWith = pWith; + + for(pLeft=pSel; pLeft->pPrior; pLeft=pLeft->pPrior); + pEList = pLeft->pEList; + if( pCte->pCols ){ + if( pEList && pEList->nExpr!=pCte->pCols->nExpr ){ + sqlite3ErrorMsg(pParse, "table %s has %d values for %d columns", + pCte->zName, pEList->nExpr, pCte->pCols->nExpr + ); + pParse->pWith = pSavedWith; + return 2; + } + pEList = pCte->pCols; + } + + sqlite3ColumnsFromExprList(pParse, pEList, &pTab->nCol, &pTab->aCol); + if( bMayRecursive ){ + if( pSel->selFlags & SF_Recursive ){ + pCte->zCteErr = "multiple recursive references: %s"; + }else{ + pCte->zCteErr = "recursive reference in a subquery: %s"; + } + sqlite3WalkSelect(pWalker, pSel); + } + pCte->zCteErr = 0; + pParse->pWith = pSavedWith; + return 1; /* Success */ + } + return 0; /* No match */ +} +#endif + +#ifndef SQLITE_OMIT_CTE +/* +** If the SELECT passed as the second argument has an associated WITH +** clause, pop it from the stack stored as part of the Parse object. +** +** This function is used as the xSelectCallback2() callback by +** sqlite3SelectExpand() when walking a SELECT tree to resolve table +** names and other FROM clause elements. +*/ +SQLITE_PRIVATE void sqlite3SelectPopWith(Walker *pWalker, Select *p){ + Parse *pParse = pWalker->pParse; + if( OK_IF_ALWAYS_TRUE(pParse->pWith) && p->pPrior==0 ){ + With *pWith = findRightmost(p)->pWith; + if( pWith!=0 ){ + assert( pParse->pWith==pWith || pParse->nErr ); + pParse->pWith = pWith->pOuter; + } + } +} +#endif + +/* +** The SrcItem structure passed as the second argument represents a +** sub-query in the FROM clause of a SELECT statement. This function +** allocates and populates the SrcItem.pTab object. If successful, +** SQLITE_OK is returned. Otherwise, if an OOM error is encountered, +** SQLITE_NOMEM. +*/ +SQLITE_PRIVATE int sqlite3ExpandSubquery(Parse *pParse, SrcItem *pFrom){ + Select *pSel; + Table *pTab; + + assert( pFrom->fg.isSubquery ); + assert( pFrom->u4.pSubq!=0 ); + pSel = pFrom->u4.pSubq->pSelect; + assert( pSel ); + pFrom->pSTab = pTab = sqlite3DbMallocZero(pParse->db, sizeof(Table)); + if( pTab==0 ) return SQLITE_NOMEM; + pTab->nTabRef = 1; + if( pFrom->zAlias ){ + pTab->zName = sqlite3DbStrDup(pParse->db, pFrom->zAlias); + }else{ + pTab->zName = sqlite3MPrintf(pParse->db, "%!S", pFrom); + } + while( pSel->pPrior ){ pSel = pSel->pPrior; } + sqlite3ColumnsFromExprList(pParse, pSel->pEList,&pTab->nCol,&pTab->aCol); + pTab->iPKey = -1; + pTab->eTabType = TABTYP_VIEW; + pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) ); +#ifndef SQLITE_ALLOW_ROWID_IN_VIEW + /* The usual case - do not allow ROWID on a subquery */ + pTab->tabFlags |= TF_Ephemeral | TF_NoVisibleRowid; +#else + /* Legacy compatibility mode */ + pTab->tabFlags |= TF_Ephemeral | sqlite3Config.mNoVisibleRowid; +#endif + return pParse->nErr ? SQLITE_ERROR : SQLITE_OK; +} + + +/* +** Check the N SrcItem objects to the right of pBase. (N might be zero!) +** If any of those SrcItem objects have a USING clause containing zName +** then return true. +** +** If N is zero, or none of the N SrcItem objects to the right of pBase +** contains a USING clause, or if none of the USING clauses contain zName, +** then return false. +*/ +static int inAnyUsingClause( + const char *zName, /* Name we are looking for */ + SrcItem *pBase, /* The base SrcItem. Looking at pBase[1] and following */ + int N /* How many SrcItems to check */ +){ + while( N>0 ){ + N--; + pBase++; + if( pBase->fg.isUsing==0 ) continue; + if( NEVER(pBase->u3.pUsing==0) ) continue; + if( sqlite3IdListIndex(pBase->u3.pUsing, zName)>=0 ) return 1; + } + return 0; +} + + +/* +** This routine is a Walker callback for "expanding" a SELECT statement. +** "Expanding" means to do the following: +** +** (1) Make sure VDBE cursor numbers have been assigned to every +** element of the FROM clause. +** +** (2) Fill in the pTabList->a[].pTab fields in the SrcList that +** defines FROM clause. When views appear in the FROM clause, +** fill pTabList->a[].pSelect with a copy of the SELECT statement +** that implements the view. A copy is made of the view's SELECT +** statement so that we can freely modify or delete that statement +** without worrying about messing up the persistent representation +** of the view. +** +** (3) Add terms to the WHERE clause to accommodate the NATURAL keyword +** on joins and the ON and USING clause of joins. +** +** (4) Scan the list of columns in the result set (pEList) looking +** for instances of the "*" operator or the TABLE.* operator. +** If found, expand each "*" to be every column in every table +** and TABLE.* to be every column in TABLE. +** +*/ +static int selectExpander(Walker *pWalker, Select *p){ + Parse *pParse = pWalker->pParse; + int i, j, k, rc; + SrcList *pTabList; + ExprList *pEList; + SrcItem *pFrom; + sqlite3 *db = pParse->db; + Expr *pE, *pRight, *pExpr; + u16 selFlags = p->selFlags; + u32 elistFlags = 0; + + p->selFlags |= SF_Expanded; + if( db->mallocFailed ){ + return WRC_Abort; + } + assert( p->pSrc!=0 ); + if( (selFlags & SF_Expanded)!=0 ){ + return WRC_Prune; + } + if( pWalker->eCode ){ + /* Renumber selId because it has been copied from a view */ + p->selId = ++pParse->nSelect; + } + pTabList = p->pSrc; + pEList = p->pEList; + if( pParse->pWith && (p->selFlags & SF_View) ){ + if( p->pWith==0 ){ + p->pWith = (With*)sqlite3DbMallocZero(db, SZ_WITH(1) ); + if( p->pWith==0 ){ + return WRC_Abort; + } + } + p->pWith->bView = 1; + } + sqlite3WithPush(pParse, p->pWith, 0); + + /* Make sure cursor numbers have been assigned to all entries in + ** the FROM clause of the SELECT statement. + */ + sqlite3SrcListAssignCursors(pParse, pTabList); + + /* Look up every table named in the FROM clause of the select. If + ** an entry of the FROM clause is a subquery instead of a table or view, + ** then create a transient table structure to describe the subquery. + */ + for(i=0, pFrom=pTabList->a; inSrc; i++, pFrom++){ + Table *pTab; + assert( pFrom->fg.isRecursive==0 || pFrom->pSTab!=0 ); + if( pFrom->pSTab ) continue; + assert( pFrom->fg.isRecursive==0 ); + if( pFrom->zName==0 ){ +#ifndef SQLITE_OMIT_SUBQUERY + Select *pSel; + assert( pFrom->fg.isSubquery && pFrom->u4.pSubq!=0 ); + pSel = pFrom->u4.pSubq->pSelect; + /* A sub-query in the FROM clause of a SELECT */ + assert( pSel!=0 ); + assert( pFrom->pSTab==0 ); + if( sqlite3WalkSelect(pWalker, pSel) ) return WRC_Abort; + if( sqlite3ExpandSubquery(pParse, pFrom) ) return WRC_Abort; +#endif +#ifndef SQLITE_OMIT_CTE + }else if( (rc = resolveFromTermToCte(pParse, pWalker, pFrom))!=0 ){ + if( rc>1 ) return WRC_Abort; + pTab = pFrom->pSTab; + assert( pTab!=0 ); +#endif + }else{ + /* An ordinary table or view name in the FROM clause */ + assert( pFrom->pSTab==0 ); + pFrom->pSTab = pTab = sqlite3LocateTableItem(pParse, 0, pFrom); + if( pTab==0 ) return WRC_Abort; + if( pTab->nTabRef>=0xffff ){ + sqlite3ErrorMsg(pParse, "too many references to \"%s\": max 65535", + pTab->zName); + pFrom->pSTab = 0; + return WRC_Abort; + } + pTab->nTabRef++; + if( !IsVirtual(pTab) && cannotBeFunction(pParse, pFrom) ){ + return WRC_Abort; + } +#if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) + if( !IsOrdinaryTable(pTab) ){ + i16 nCol; + u8 eCodeOrig = pWalker->eCode; + if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort; + assert( pFrom->fg.isSubquery==0 ); + if( IsView(pTab) ){ + if( (db->flags & SQLITE_EnableView)==0 + && pTab->pSchema!=db->aDb[1].pSchema + ){ + sqlite3ErrorMsg(pParse, "access to view \"%s\" prohibited", + pTab->zName); + } + sqlite3SrcItemAttachSubquery(pParse, pFrom, pTab->u.view.pSelect, 1); + } +#ifndef SQLITE_OMIT_VIRTUALTABLE + else if( ALWAYS(IsVirtual(pTab)) + && pFrom->fg.fromDDL + && ALWAYS(pTab->u.vtab.p!=0) + && pTab->u.vtab.p->eVtabRisk > ((db->flags & SQLITE_TrustedSchema)!=0) + ){ + sqlite3ErrorMsg(pParse, "unsafe use of virtual table \"%s\"", + pTab->zName); + } + assert( SQLITE_VTABRISK_Normal==1 && SQLITE_VTABRISK_High==2 ); +#endif + nCol = pTab->nCol; + pTab->nCol = -1; + pWalker->eCode = 1; /* Turn on Select.selId renumbering */ + if( pFrom->fg.isSubquery ){ + sqlite3WalkSelect(pWalker, pFrom->u4.pSubq->pSelect); + } + pWalker->eCode = eCodeOrig; + pTab->nCol = nCol; + } +#endif + } + + /* Locate the index named by the INDEXED BY clause, if any. */ + if( pFrom->fg.isIndexedBy && sqlite3IndexedByLookup(pParse, pFrom) ){ + return WRC_Abort; + } + } + + /* Process NATURAL keywords, and ON and USING clauses of joins. + */ + assert( db->mallocFailed==0 || pParse->nErr!=0 ); + if( pParse->nErr || sqlite3ProcessJoin(pParse, p) ){ + return WRC_Abort; + } + + /* For every "*" that occurs in the column list, insert the names of + ** all columns in all tables. And for every TABLE.* insert the names + ** of all columns in TABLE. The parser inserted a special expression + ** with the TK_ASTERISK operator for each "*" that it found in the column + ** list. The following code just has to locate the TK_ASTERISK + ** expressions and expand each one to the list of all columns in + ** all tables. + ** + ** The first loop just checks to see if there are any "*" operators + ** that need expanding. + */ + for(k=0; knExpr; k++){ + pE = pEList->a[k].pExpr; + if( pE->op==TK_ASTERISK ) break; + assert( pE->op!=TK_DOT || pE->pRight!=0 ); + assert( pE->op!=TK_DOT || (pE->pLeft!=0 && pE->pLeft->op==TK_ID) ); + if( pE->op==TK_DOT && pE->pRight->op==TK_ASTERISK ) break; + elistFlags |= pE->flags; + } + if( knExpr ){ + /* + ** If we get here it means the result set contains one or more "*" + ** operators that need to be expanded. Loop through each expression + ** in the result set and expand them one by one. + */ + struct ExprList_item *a = pEList->a; + ExprList *pNew = 0; + int flags = pParse->db->flags; + int longNames = (flags & SQLITE_FullColNames)!=0 + && (flags & SQLITE_ShortColNames)==0; + + for(k=0; knExpr; k++){ + pE = a[k].pExpr; + elistFlags |= pE->flags; + pRight = pE->pRight; + assert( pE->op!=TK_DOT || pRight!=0 ); + if( pE->op!=TK_ASTERISK + && (pE->op!=TK_DOT || pRight->op!=TK_ASTERISK) + ){ + /* This particular expression does not need to be expanded. + */ + pNew = sqlite3ExprListAppend(pParse, pNew, a[k].pExpr); + if( pNew ){ + pNew->a[pNew->nExpr-1].zEName = a[k].zEName; + pNew->a[pNew->nExpr-1].fg.eEName = a[k].fg.eEName; + a[k].zEName = 0; + } + a[k].pExpr = 0; + }else{ + /* This expression is a "*" or a "TABLE.*" and needs to be + ** expanded. */ + int tableSeen = 0; /* Set to 1 when TABLE matches */ + char *zTName = 0; /* text of name of TABLE */ + int iErrOfst; + if( pE->op==TK_DOT ){ + assert( (selFlags & SF_NestedFrom)==0 ); + assert( pE->pLeft!=0 ); + assert( !ExprHasProperty(pE->pLeft, EP_IntValue) ); + zTName = pE->pLeft->u.zToken; + assert( ExprUseWOfst(pE->pLeft) ); + iErrOfst = pE->pRight->w.iOfst; + }else{ + assert( ExprUseWOfst(pE) ); + iErrOfst = pE->w.iOfst; + } + for(i=0, pFrom=pTabList->a; inSrc; i++, pFrom++){ + int nAdd; /* Number of cols including rowid */ + Table *pTab = pFrom->pSTab; /* Table for this data source */ + ExprList *pNestedFrom; /* Result-set of a nested FROM clause */ + char *zTabName; /* AS name for this data source */ + const char *zSchemaName = 0; /* Schema name for this data source */ + int iDb; /* Schema index for this data src */ + IdList *pUsing; /* USING clause for pFrom[1] */ + + if( (zTabName = pFrom->zAlias)==0 ){ + zTabName = pTab->zName; + } + if( db->mallocFailed ) break; + assert( (int)pFrom->fg.isNestedFrom == IsNestedFrom(pFrom) ); + if( pFrom->fg.isNestedFrom ){ + assert( pFrom->fg.isSubquery && pFrom->u4.pSubq ); + assert( pFrom->u4.pSubq->pSelect!=0 ); + pNestedFrom = pFrom->u4.pSubq->pSelect->pEList; + assert( pNestedFrom!=0 ); + assert( pNestedFrom->nExpr==pTab->nCol ); + assert( VisibleRowid(pTab)==0 || ViewCanHaveRowid ); + }else{ + if( zTName && sqlite3StrICmp(zTName, zTabName)!=0 ){ + continue; + } + pNestedFrom = 0; + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + zSchemaName = iDb>=0 ? db->aDb[iDb].zDbSName : "*"; + } + if( i+1nSrc + && pFrom[1].fg.isUsing + && (selFlags & SF_NestedFrom)!=0 + ){ + int ii; + pUsing = pFrom[1].u3.pUsing; + for(ii=0; iinId; ii++){ + const char *zUName = pUsing->a[ii].zName; + pRight = sqlite3Expr(db, TK_ID, zUName); + sqlite3ExprSetErrorOffset(pRight, iErrOfst); + pNew = sqlite3ExprListAppend(pParse, pNew, pRight); + if( pNew ){ + struct ExprList_item *pX = &pNew->a[pNew->nExpr-1]; + assert( pX->zEName==0 ); + pX->zEName = sqlite3MPrintf(db,"..%s", zUName); + pX->fg.eEName = ENAME_TAB; + pX->fg.bUsingTerm = 1; + } + } + }else{ + pUsing = 0; + } + + nAdd = pTab->nCol; + if( VisibleRowid(pTab) && (selFlags & SF_NestedFrom)!=0 ) nAdd++; + for(j=0; jnCol ){ + zName = sqlite3RowidAlias(pTab); + if( zName==0 ) continue; + }else{ + zName = pTab->aCol[j].zCnName; + + /* If pTab is actually an SF_NestedFrom sub-select, do not + ** expand any ENAME_ROWID columns. */ + if( pNestedFrom && pNestedFrom->a[j].fg.eEName==ENAME_ROWID ){ + continue; + } + + if( zTName + && pNestedFrom + && sqlite3MatchEName(&pNestedFrom->a[j], 0, zTName, 0, 0)==0 + ){ + continue; + } + + /* If a column is marked as 'hidden', omit it from the expanded + ** result-set list unless the SELECT has the SF_IncludeHidden + ** bit set. + */ + if( (p->selFlags & SF_IncludeHidden)==0 + && IsHiddenColumn(&pTab->aCol[j]) + ){ + continue; + } + if( (pTab->aCol[j].colFlags & COLFLAG_NOEXPAND)!=0 + && zTName==0 + && (selFlags & (SF_NestedFrom))==0 + ){ + continue; + } + } + assert( zName ); + tableSeen = 1; + + if( i>0 && zTName==0 && (selFlags & SF_NestedFrom)==0 ){ + if( pFrom->fg.isUsing + && sqlite3IdListIndex(pFrom->u3.pUsing, zName)>=0 + ){ + /* In a join with a USING clause, omit columns in the + ** using clause from the table on the right. */ + continue; + } + } + pRight = sqlite3Expr(db, TK_ID, zName); + if( (pTabList->nSrc>1 + && ( (pFrom->fg.jointype & JT_LTORJ)==0 + || (selFlags & SF_NestedFrom)!=0 + || !inAnyUsingClause(zName,pFrom,pTabList->nSrc-i-1) + ) + ) + || IN_RENAME_OBJECT + ){ + Expr *pLeft; + pLeft = sqlite3Expr(db, TK_ID, zTabName); + pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight); + if( IN_RENAME_OBJECT && pE->pLeft ){ + sqlite3RenameTokenRemap(pParse, pLeft, pE->pLeft); + } + if( zSchemaName ){ + pLeft = sqlite3Expr(db, TK_ID, zSchemaName); + pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pExpr); + } + }else{ + pExpr = pRight; + } + sqlite3ExprSetErrorOffset(pExpr, iErrOfst); + pNew = sqlite3ExprListAppend(pParse, pNew, pExpr); + if( pNew==0 ){ + break; /* OOM */ + } + pX = &pNew->a[pNew->nExpr-1]; + assert( pX->zEName==0 ); + if( (selFlags & SF_NestedFrom)!=0 && !IN_RENAME_OBJECT ){ + if( pNestedFrom && (!ViewCanHaveRowid || jnExpr) ){ + assert( jnExpr ); + pX->zEName = sqlite3DbStrDup(db, pNestedFrom->a[j].zEName); + testcase( pX->zEName==0 ); + }else{ + pX->zEName = sqlite3MPrintf(db, "%s.%s.%s", + zSchemaName, zTabName, zName); + testcase( pX->zEName==0 ); + } + pX->fg.eEName = (j==pTab->nCol ? ENAME_ROWID : ENAME_TAB); + if( (pFrom->fg.isUsing + && sqlite3IdListIndex(pFrom->u3.pUsing, zName)>=0) + || (pUsing && sqlite3IdListIndex(pUsing, zName)>=0) + || (jnCol && (pTab->aCol[j].colFlags & COLFLAG_NOEXPAND)) + ){ + pX->fg.bNoExpand = 1; + } + }else if( longNames ){ + pX->zEName = sqlite3MPrintf(db, "%s.%s", zTabName, zName); + pX->fg.eEName = ENAME_NAME; + }else{ + pX->zEName = sqlite3DbStrDup(db, zName); + pX->fg.eEName = ENAME_NAME; + } + } + } + if( !tableSeen ){ + if( zTName ){ + sqlite3ErrorMsg(pParse, "no such table: %s", zTName); + }else{ + sqlite3ErrorMsg(pParse, "no tables specified"); + } + } + } + } + sqlite3ExprListDelete(db, pEList); + p->pEList = pNew; + } + if( p->pEList ){ + if( p->pEList->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){ + sqlite3ErrorMsg(pParse, "too many columns in result set"); + return WRC_Abort; + } + if( (elistFlags & (EP_HasFunc|EP_Subquery))!=0 ){ + p->selFlags |= SF_ComplexResult; + } + } +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x8 ){ + TREETRACE(0x8,pParse,p,("After result-set wildcard expansion:\n")); + sqlite3TreeViewSelect(0, p, 0); + } +#endif + return WRC_Continue; +} + +#if SQLITE_DEBUG +/* +** Always assert. This xSelectCallback2 implementation proves that the +** xSelectCallback2 is never invoked. +*/ +SQLITE_PRIVATE void sqlite3SelectWalkAssert2(Walker *NotUsed, Select *NotUsed2){ + UNUSED_PARAMETER2(NotUsed, NotUsed2); + assert( 0 ); +} +#endif +/* +** This routine "expands" a SELECT statement and all of its subqueries. +** For additional information on what it means to "expand" a SELECT +** statement, see the comment on the selectExpand worker callback above. +** +** Expanding a SELECT statement is the first step in processing a +** SELECT statement. The SELECT statement must be expanded before +** name resolution is performed. +** +** If anything goes wrong, an error message is written into pParse. +** The calling function can detect the problem by looking at pParse->nErr +** and/or pParse->db->mallocFailed. +*/ +static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){ + Walker w; + w.xExprCallback = sqlite3ExprWalkNoop; + w.pParse = pParse; + if( OK_IF_ALWAYS_TRUE(pParse->hasCompound) ){ + w.xSelectCallback = convertCompoundSelectToSubquery; + w.xSelectCallback2 = 0; + sqlite3WalkSelect(&w, pSelect); + } + w.xSelectCallback = selectExpander; + w.xSelectCallback2 = sqlite3SelectPopWith; + w.eCode = 0; + sqlite3WalkSelect(&w, pSelect); +} + + +#ifndef SQLITE_OMIT_SUBQUERY +/* +** This is a Walker.xSelectCallback callback for the sqlite3SelectTypeInfo() +** interface. +** +** For each FROM-clause subquery, add Column.zType, Column.zColl, and +** Column.affinity information to the Table structure that represents +** the result set of that subquery. +** +** The Table structure that represents the result set was constructed +** by selectExpander() but the type and collation and affinity information +** was omitted at that point because identifiers had not yet been resolved. +** This routine is called after identifier resolution. +*/ +static void selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){ + Parse *pParse; + int i; + SrcList *pTabList; + SrcItem *pFrom; + + if( p->selFlags & SF_HasTypeInfo ) return; + p->selFlags |= SF_HasTypeInfo; + pParse = pWalker->pParse; + assert( (p->selFlags & SF_Resolved) ); + pTabList = p->pSrc; + for(i=0, pFrom=pTabList->a; inSrc; i++, pFrom++){ + Table *pTab = pFrom->pSTab; + assert( pTab!=0 ); + if( (pTab->tabFlags & TF_Ephemeral)!=0 && pFrom->fg.isSubquery ){ + /* A sub-query in the FROM clause of a SELECT */ + Select *pSel = pFrom->u4.pSubq->pSelect; + sqlite3SubqueryColumnTypes(pParse, pTab, pSel, SQLITE_AFF_NONE); + } + } +} +#endif + + +/* +** This routine adds datatype and collating sequence information to +** the Table structures of all FROM-clause subqueries in a +** SELECT statement. +** +** Use this routine after name resolution. +*/ +static void sqlite3SelectAddTypeInfo(Parse *pParse, Select *pSelect){ +#ifndef SQLITE_OMIT_SUBQUERY + Walker w; + w.xSelectCallback = sqlite3SelectWalkNoop; + w.xSelectCallback2 = selectAddSubqueryTypeInfo; + w.xExprCallback = sqlite3ExprWalkNoop; + w.pParse = pParse; + sqlite3WalkSelect(&w, pSelect); +#endif +} + + +/* +** This routine sets up a SELECT statement for processing. The +** following is accomplished: +** +** * VDBE Cursor numbers are assigned to all FROM-clause terms. +** * Ephemeral Table objects are created for all FROM-clause subqueries. +** * ON and USING clauses are shifted into WHERE statements +** * Wildcards "*" and "TABLE.*" in result sets are expanded. +** * Identifiers in expression are matched to tables. +** +** This routine acts recursively on all subqueries within the SELECT. +*/ +SQLITE_PRIVATE void sqlite3SelectPrep( + Parse *pParse, /* The parser context */ + Select *p, /* The SELECT statement being coded. */ + NameContext *pOuterNC /* Name context for container */ +){ + assert( p!=0 || pParse->db->mallocFailed ); + assert( pParse->db->pParse==pParse ); + if( pParse->db->mallocFailed ) return; + if( p->selFlags & SF_HasTypeInfo ) return; + sqlite3SelectExpand(pParse, p); + if( pParse->nErr ) return; + sqlite3ResolveSelectNames(pParse, p, pOuterNC); + if( pParse->nErr ) return; + sqlite3SelectAddTypeInfo(pParse, p); +} + +#if TREETRACE_ENABLED +/* +** Display all information about an AggInfo object +*/ +static void printAggInfo(AggInfo *pAggInfo){ + int ii; + sqlite3DebugPrintf("AggInfo %d/%p:\n", + pAggInfo->selId, pAggInfo); + for(ii=0; iinColumn; ii++){ + struct AggInfo_col *pCol = &pAggInfo->aCol[ii]; + sqlite3DebugPrintf( + "agg-column[%d] pTab=%s iTable=%d iColumn=%d iMem=%d" + " iSorterColumn=%d %s\n", + ii, pCol->pTab ? pCol->pTab->zName : "NULL", + pCol->iTable, pCol->iColumn, pAggInfo->iFirstReg+ii, + pCol->iSorterColumn, + ii>=pAggInfo->nAccumulator ? "" : " Accumulator"); + sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pCExpr, 0); + } + for(ii=0; iinFunc; ii++){ + sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n", + ii, pAggInfo->iFirstReg+pAggInfo->nColumn+ii); + sqlite3TreeViewExpr(0, pAggInfo->aFunc[ii].pFExpr, 0); + } +} +#endif /* TREETRACE_ENABLED */ + +/* +** Analyze the arguments to aggregate functions. Create new pAggInfo->aCol[] +** entries for columns that are arguments to aggregate functions but which +** are not otherwise used. +** +** The aCol[] entries in AggInfo prior to nAccumulator are columns that +** are referenced outside of aggregate functions. These might be columns +** that are part of the GROUP by clause, for example. Other database engines +** would throw an error if there is a column reference that is not in the +** GROUP BY clause and that is not part of an aggregate function argument. +** But SQLite allows this. +** +** The aCol[] entries beginning with the aCol[nAccumulator] and following +** are column references that are used exclusively as arguments to +** aggregate functions. This routine is responsible for computing +** (or recomputing) those aCol[] entries. +*/ +static void analyzeAggFuncArgs( + AggInfo *pAggInfo, + NameContext *pNC +){ + int i; + assert( pAggInfo!=0 ); + assert( pAggInfo->iFirstReg==0 ); + pNC->ncFlags |= NC_InAggFunc; + for(i=0; inFunc; i++){ + Expr *pExpr = pAggInfo->aFunc[i].pFExpr; + assert( pExpr->op==TK_FUNCTION || pExpr->op==TK_AGG_FUNCTION ); + assert( ExprUseXList(pExpr) ); + sqlite3ExprAnalyzeAggList(pNC, pExpr->x.pList); + if( pExpr->pLeft ){ + assert( pExpr->pLeft->op==TK_ORDER ); + assert( ExprUseXList(pExpr->pLeft) ); + sqlite3ExprAnalyzeAggList(pNC, pExpr->pLeft->x.pList); + } +#ifndef SQLITE_OMIT_WINDOWFUNC + assert( !IsWindowFunc(pExpr) ); + if( ExprHasProperty(pExpr, EP_WinFunc) ){ + sqlite3ExprAnalyzeAggregates(pNC, pExpr->y.pWin->pFilter); + } +#endif + } + pNC->ncFlags &= ~NC_InAggFunc; +} + +/* +** An index on expressions is being used in the inner loop of an +** aggregate query with a GROUP BY clause. This routine attempts +** to adjust the AggInfo object to take advantage of index and to +** perhaps use the index as a covering index. +** +*/ +static void optimizeAggregateUseOfIndexedExpr( + Parse *pParse, /* Parsing context */ + Select *pSelect, /* The SELECT statement being processed */ + AggInfo *pAggInfo, /* The aggregate info */ + NameContext *pNC /* Name context used to resolve agg-func args */ +){ + assert( pAggInfo->iFirstReg==0 ); + assert( pSelect!=0 ); + assert( pSelect->pGroupBy!=0 ); + pAggInfo->nColumn = pAggInfo->nAccumulator; + if( ALWAYS(pAggInfo->nSortingColumn>0) ){ + int mx = pSelect->pGroupBy->nExpr - 1; + int j, k; + for(j=0; jnColumn; j++){ + k = pAggInfo->aCol[j].iSorterColumn; + if( k>mx ) mx = k; + } + pAggInfo->nSortingColumn = mx+1; + } + analyzeAggFuncArgs(pAggInfo, pNC); +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x20 ){ + IndexedExpr *pIEpr; + TREETRACE(0x20, pParse, pSelect, + ("AggInfo (possibly) adjusted for Indexed Exprs\n")); + sqlite3TreeViewSelect(0, pSelect, 0); + for(pIEpr=pParse->pIdxEpr; pIEpr; pIEpr=pIEpr->pIENext){ + printf("data-cursor=%d index={%d,%d}\n", + pIEpr->iDataCur, pIEpr->iIdxCur, pIEpr->iIdxCol); + sqlite3TreeViewExpr(0, pIEpr->pExpr, 0); + } + printAggInfo(pAggInfo); + } +#else + UNUSED_PARAMETER(pSelect); + UNUSED_PARAMETER(pParse); +#endif +} + +/* +** Walker callback for aggregateConvertIndexedExprRefToColumn(). +*/ +static int aggregateIdxEprRefToColCallback(Walker *pWalker, Expr *pExpr){ + AggInfo *pAggInfo; + struct AggInfo_col *pCol; + UNUSED_PARAMETER(pWalker); + if( pExpr->pAggInfo==0 ) return WRC_Continue; + if( pExpr->op==TK_AGG_COLUMN ) return WRC_Continue; + if( pExpr->op==TK_AGG_FUNCTION ) return WRC_Continue; + if( pExpr->op==TK_IF_NULL_ROW ) return WRC_Continue; + pAggInfo = pExpr->pAggInfo; + if( NEVER(pExpr->iAgg>=pAggInfo->nColumn) ) return WRC_Continue; + assert( pExpr->iAgg>=0 ); + pCol = &pAggInfo->aCol[pExpr->iAgg]; + pExpr->op = TK_AGG_COLUMN; + pExpr->iTable = pCol->iTable; + pExpr->iColumn = pCol->iColumn; + ExprClearProperty(pExpr, EP_Skip|EP_Collate|EP_Unlikely); + return WRC_Prune; +} + +/* +** Convert every pAggInfo->aFunc[].pExpr such that any node within +** those expressions that has pAppInfo set is changed into a TK_AGG_COLUMN +** opcode. +*/ +static void aggregateConvertIndexedExprRefToColumn(AggInfo *pAggInfo){ + int i; + Walker w; + memset(&w, 0, sizeof(w)); + w.xExprCallback = aggregateIdxEprRefToColCallback; + for(i=0; inFunc; i++){ + sqlite3WalkExpr(&w, pAggInfo->aFunc[i].pFExpr); + } +} + + +/* +** Allocate a block of registers so that there is one register for each +** pAggInfo->aCol[] and pAggInfo->aFunc[] entry in pAggInfo. The first +** register in this block is stored in pAggInfo->iFirstReg. +** +** This routine may only be called once for each AggInfo object. Prior +** to calling this routine: +** +** * The aCol[] and aFunc[] arrays may be modified +** * The AggInfoColumnReg() and AggInfoFuncReg() macros may not be used +** +** After calling this routine: +** +** * The aCol[] and aFunc[] arrays are fixed +** * The AggInfoColumnReg() and AggInfoFuncReg() macros may be used +** +*/ +static void assignAggregateRegisters(Parse *pParse, AggInfo *pAggInfo){ + assert( pAggInfo!=0 ); + assert( pAggInfo->iFirstReg==0 ); + pAggInfo->iFirstReg = pParse->nMem + 1; + pParse->nMem += pAggInfo->nColumn + pAggInfo->nFunc; +} + +/* +** Reset the aggregate accumulator. +** +** The aggregate accumulator is a set of memory cells that hold +** intermediate results while calculating an aggregate. This +** routine generates code that stores NULLs in all of those memory +** cells. +*/ +static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){ + Vdbe *v = pParse->pVdbe; + int i; + struct AggInfo_func *pFunc; + int nReg = pAggInfo->nFunc + pAggInfo->nColumn; + assert( pAggInfo->iFirstReg>0 ); + assert( pParse->db->pParse==pParse ); + assert( pParse->db->mallocFailed==0 || pParse->nErr!=0 ); + if( nReg==0 ) return; + if( pParse->nErr ) return; + sqlite3VdbeAddOp3(v, OP_Null, 0, pAggInfo->iFirstReg, + pAggInfo->iFirstReg+nReg-1); + for(pFunc=pAggInfo->aFunc, i=0; inFunc; i++, pFunc++){ + if( pFunc->iDistinct>=0 ){ + Expr *pE = pFunc->pFExpr; + assert( ExprUseXList(pE) ); + if( pE->x.pList==0 || pE->x.pList->nExpr!=1 ){ + sqlite3ErrorMsg(pParse, "DISTINCT aggregates must have exactly one " + "argument"); + pFunc->iDistinct = -1; + }else{ + KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pE->x.pList,0,0); + pFunc->iDistAddr = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, + pFunc->iDistinct, 0, 0, (char*)pKeyInfo, P4_KEYINFO); + ExplainQueryPlan((pParse, 0, "USE TEMP B-TREE FOR %s(DISTINCT)", + pFunc->pFunc->zName)); + } + } + if( pFunc->iOBTab>=0 ){ + ExprList *pOBList; + KeyInfo *pKeyInfo; + int nExtra = 0; + assert( pFunc->pFExpr->pLeft!=0 ); + assert( pFunc->pFExpr->pLeft->op==TK_ORDER ); + assert( ExprUseXList(pFunc->pFExpr->pLeft) ); + assert( pFunc->pFunc!=0 ); + pOBList = pFunc->pFExpr->pLeft->x.pList; + if( !pFunc->bOBUnique ){ + nExtra++; /* One extra column for the OP_Sequence */ + } + if( pFunc->bOBPayload ){ + /* extra columns for the function arguments */ + assert( ExprUseXList(pFunc->pFExpr) ); + assert( pFunc->pFExpr->x.pList!=0 ); + nExtra += pFunc->pFExpr->x.pList->nExpr; + } + if( pFunc->bUseSubtype ){ + nExtra += pFunc->pFExpr->x.pList->nExpr; + } + pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pOBList, 0, nExtra); + if( !pFunc->bOBUnique && pParse->nErr==0 ){ + pKeyInfo->nKeyField++; + } + sqlite3VdbeAddOp4(v, OP_OpenEphemeral, + pFunc->iOBTab, pOBList->nExpr+nExtra, 0, + (char*)pKeyInfo, P4_KEYINFO); + ExplainQueryPlan((pParse, 0, "USE TEMP B-TREE FOR %s(ORDER BY)", + pFunc->pFunc->zName)); + } + } +} + +/* +** Invoke the OP_AggFinalize opcode for every aggregate function +** in the AggInfo structure. +*/ +static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){ + Vdbe *v = pParse->pVdbe; + int i; + struct AggInfo_func *pF; + for(i=0, pF=pAggInfo->aFunc; inFunc; i++, pF++){ + ExprList *pList; + assert( ExprUseXList(pF->pFExpr) ); + if( pParse->nErr ) return; + pList = pF->pFExpr->x.pList; + if( pF->iOBTab>=0 ){ + /* For an ORDER BY aggregate, calls to OP_AggStep were deferred. Inputs + ** were stored in emphermal table pF->iOBTab. Here, we extract those + ** inputs (in ORDER BY order) and make all calls to OP_AggStep + ** before doing the OP_AggFinal call. */ + int iTop; /* Start of loop for extracting columns */ + int nArg; /* Number of columns to extract */ + int nKey; /* Key columns to be skipped */ + int regAgg; /* Extract into this array */ + int j; /* Loop counter */ + + assert( pF->pFunc!=0 ); + nArg = pList->nExpr; + regAgg = sqlite3GetTempRange(pParse, nArg); + + if( pF->bOBPayload==0 ){ + nKey = 0; + }else{ + assert( pF->pFExpr->pLeft!=0 ); + assert( ExprUseXList(pF->pFExpr->pLeft) ); + assert( pF->pFExpr->pLeft->x.pList!=0 ); + nKey = pF->pFExpr->pLeft->x.pList->nExpr; + if( ALWAYS(!pF->bOBUnique) ) nKey++; + } + iTop = sqlite3VdbeAddOp1(v, OP_Rewind, pF->iOBTab); VdbeCoverage(v); + for(j=nArg-1; j>=0; j--){ + sqlite3VdbeAddOp3(v, OP_Column, pF->iOBTab, nKey+j, regAgg+j); + } + if( pF->bUseSubtype ){ + int regSubtype = sqlite3GetTempReg(pParse); + int iBaseCol = nKey + nArg + (pF->bOBPayload==0 && pF->bOBUnique==0); + for(j=nArg-1; j>=0; j--){ + sqlite3VdbeAddOp3(v, OP_Column, pF->iOBTab, iBaseCol+j, regSubtype); + sqlite3VdbeAddOp2(v, OP_SetSubtype, regSubtype, regAgg+j); + } + sqlite3ReleaseTempReg(pParse, regSubtype); + } + sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, AggInfoFuncReg(pAggInfo,i)); + sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF); + sqlite3VdbeChangeP5(v, (u16)nArg); + sqlite3VdbeAddOp2(v, OP_Next, pF->iOBTab, iTop+1); VdbeCoverage(v); + sqlite3VdbeJumpHere(v, iTop); + sqlite3ReleaseTempRange(pParse, regAgg, nArg); + } + sqlite3VdbeAddOp2(v, OP_AggFinal, AggInfoFuncReg(pAggInfo,i), + pList ? pList->nExpr : 0); + sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF); + } +} + +/* +** Generate code that will update the accumulator memory cells for an +** aggregate based on the current cursor position. +** +** If regAcc is non-zero and there are no min() or max() aggregates +** in pAggInfo, then only populate the pAggInfo->nAccumulator accumulator +** registers if register regAcc contains 0. The caller will take care +** of setting and clearing regAcc. +** +** For an ORDER BY aggregate, the actual accumulator memory cell update +** is deferred until after all input rows have been received, so that they +** can be run in the requested order. In that case, instead of invoking +** OP_AggStep to update the accumulator, just add the arguments that would +** have been passed into OP_AggStep into the sorting ephemeral table +** (along with the appropriate sort key). +*/ +static void updateAccumulator( + Parse *pParse, + int regAcc, + AggInfo *pAggInfo, + int eDistinctType +){ + Vdbe *v = pParse->pVdbe; + int i; + int regHit = 0; + int addrHitTest = 0; + struct AggInfo_func *pF; + struct AggInfo_col *pC; + + assert( pAggInfo->iFirstReg>0 ); + if( pParse->nErr ) return; + pAggInfo->directMode = 1; + for(i=0, pF=pAggInfo->aFunc; inFunc; i++, pF++){ + int nArg; + int addrNext = 0; + int regAgg; + int regAggSz = 0; + int regDistinct = 0; + ExprList *pList; + assert( ExprUseXList(pF->pFExpr) ); + assert( !IsWindowFunc(pF->pFExpr) ); + assert( pF->pFunc!=0 ); + pList = pF->pFExpr->x.pList; + if( ExprHasProperty(pF->pFExpr, EP_WinFunc) ){ + Expr *pFilter = pF->pFExpr->y.pWin->pFilter; + if( pAggInfo->nAccumulator + && (pF->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL) + && regAcc + ){ + /* If regAcc==0, there there exists some min() or max() function + ** without a FILTER clause that will ensure the magnet registers + ** are populated. */ + if( regHit==0 ) regHit = ++pParse->nMem; + /* If this is the first row of the group (regAcc contains 0), clear the + ** "magnet" register regHit so that the accumulator registers + ** are populated if the FILTER clause jumps over the the + ** invocation of min() or max() altogether. Or, if this is not + ** the first row (regAcc contains 1), set the magnet register so that + ** the accumulators are not populated unless the min()/max() is invoked + ** and indicates that they should be. */ + sqlite3VdbeAddOp2(v, OP_Copy, regAcc, regHit); + } + addrNext = sqlite3VdbeMakeLabel(pParse); + sqlite3ExprIfFalse(pParse, pFilter, addrNext, SQLITE_JUMPIFNULL); + } + if( pF->iOBTab>=0 ){ + /* Instead of invoking AggStep, we must push the arguments that would + ** have been passed to AggStep onto the sorting table. */ + int jj; /* Registered used so far in building the record */ + ExprList *pOBList; /* The ORDER BY clause */ + assert( pList!=0 ); + nArg = pList->nExpr; + assert( nArg>0 ); + assert( pF->pFExpr->pLeft!=0 ); + assert( pF->pFExpr->pLeft->op==TK_ORDER ); + assert( ExprUseXList(pF->pFExpr->pLeft) ); + pOBList = pF->pFExpr->pLeft->x.pList; + assert( pOBList!=0 ); + assert( pOBList->nExpr>0 ); + regAggSz = pOBList->nExpr; + if( !pF->bOBUnique ){ + regAggSz++; /* One register for OP_Sequence */ + } + if( pF->bOBPayload ){ + regAggSz += nArg; + } + if( pF->bUseSubtype ){ + regAggSz += nArg; + } + regAggSz++; /* One extra register to hold result of MakeRecord */ + regAgg = sqlite3GetTempRange(pParse, regAggSz); + regDistinct = regAgg; + sqlite3ExprCodeExprList(pParse, pOBList, regAgg, 0, SQLITE_ECEL_DUP); + jj = pOBList->nExpr; + if( !pF->bOBUnique ){ + sqlite3VdbeAddOp2(v, OP_Sequence, pF->iOBTab, regAgg+jj); + jj++; + } + if( pF->bOBPayload ){ + regDistinct = regAgg+jj; + sqlite3ExprCodeExprList(pParse, pList, regDistinct, 0, SQLITE_ECEL_DUP); + jj += nArg; + } + if( pF->bUseSubtype ){ + int kk; + int regBase = pF->bOBPayload ? regDistinct : regAgg; + for(kk=0; kknExpr; + regAgg = sqlite3GetTempRange(pParse, nArg); + regDistinct = regAgg; + sqlite3ExprCodeExprList(pParse, pList, regAgg, 0, SQLITE_ECEL_DUP); + }else{ + nArg = 0; + regAgg = 0; + } + if( pF->iDistinct>=0 && pList ){ + if( addrNext==0 ){ + addrNext = sqlite3VdbeMakeLabel(pParse); + } + pF->iDistinct = codeDistinct(pParse, eDistinctType, + pF->iDistinct, addrNext, pList, regDistinct); + } + if( pF->iOBTab>=0 ){ + /* Insert a new record into the ORDER BY table */ + sqlite3VdbeAddOp3(v, OP_MakeRecord, regAgg, regAggSz-1, + regAgg+regAggSz-1); + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, pF->iOBTab, regAgg+regAggSz-1, + regAgg, regAggSz-1); + sqlite3ReleaseTempRange(pParse, regAgg, regAggSz); + }else{ + /* Invoke the AggStep function */ + if( pF->pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){ + CollSeq *pColl = 0; + struct ExprList_item *pItem; + int j; + assert( pList!=0 ); /* pList!=0 if pF->pFunc has NEEDCOLL */ + for(j=0, pItem=pList->a; !pColl && jpExpr); + } + if( !pColl ){ + pColl = pParse->db->pDfltColl; + } + if( regHit==0 && pAggInfo->nAccumulator ) regHit = ++pParse->nMem; + sqlite3VdbeAddOp4(v, OP_CollSeq, regHit, 0, 0, + (char *)pColl, P4_COLLSEQ); + } + sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, AggInfoFuncReg(pAggInfo,i)); + sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF); + sqlite3VdbeChangeP5(v, (u16)nArg); + sqlite3ReleaseTempRange(pParse, regAgg, nArg); + } + if( addrNext ){ + sqlite3VdbeResolveLabel(v, addrNext); + } + if( pParse->nErr ) return; + } + if( regHit==0 && pAggInfo->nAccumulator ){ + regHit = regAcc; + } + if( regHit ){ + addrHitTest = sqlite3VdbeAddOp1(v, OP_If, regHit); VdbeCoverage(v); + } + for(i=0, pC=pAggInfo->aCol; inAccumulator; i++, pC++){ + sqlite3ExprCode(pParse, pC->pCExpr, AggInfoColumnReg(pAggInfo,i)); + if( pParse->nErr ) return; + } + + pAggInfo->directMode = 0; + if( addrHitTest ){ + sqlite3VdbeJumpHereOrPopInst(v, addrHitTest); + } +} + +/* +** Add a single OP_Explain instruction to the VDBE to explain a simple +** count(*) query ("SELECT count(*) FROM pTab"). +*/ +#ifndef SQLITE_OMIT_EXPLAIN +static void explainSimpleCount( + Parse *pParse, /* Parse context */ + Table *pTab, /* Table being queried */ + Index *pIdx /* Index used to optimize scan, or NULL */ +){ + if( pParse->explain==2 ){ + int bCover = (pIdx!=0 && (HasRowid(pTab) || !IsPrimaryKeyIndex(pIdx))); + sqlite3VdbeExplain(pParse, 0, "SCAN %s%s%s", + pTab->zName, + bCover ? " USING COVERING INDEX " : "", + bCover ? pIdx->zName : "" + ); + } +} +#else +# define explainSimpleCount(a,b,c) +#endif + +/* +** sqlite3WalkExpr() callback used by havingToWhere(). +** +** If the node passed to the callback is a TK_AND node, return +** WRC_Continue to tell sqlite3WalkExpr() to iterate through child nodes. +** +** Otherwise, return WRC_Prune. In this case, also check if the +** sub-expression matches the criteria for being moved to the WHERE +** clause. If so, add it to the WHERE clause and replace the sub-expression +** within the HAVING expression with a constant "1". +*/ +static int havingToWhereExprCb(Walker *pWalker, Expr *pExpr){ + if( pExpr->op!=TK_AND ){ + Select *pS = pWalker->u.pSelect; + /* This routine is called before the HAVING clause of the current + ** SELECT is analyzed for aggregates. So if pExpr->pAggInfo is set + ** here, it indicates that the expression is a correlated reference to a + ** column from an outer aggregate query, or an aggregate function that + ** belongs to an outer query. Do not move the expression to the WHERE + ** clause in this obscure case, as doing so may corrupt the outer Select + ** statements AggInfo structure. */ + if( sqlite3ExprIsConstantOrGroupBy(pWalker->pParse, pExpr, pS->pGroupBy) + && ExprAlwaysFalse(pExpr)==0 + && pExpr->pAggInfo==0 + ){ + sqlite3 *db = pWalker->pParse->db; + Expr *pNew = sqlite3Expr(db, TK_INTEGER, "1"); + if( pNew ){ + Expr *pWhere = pS->pWhere; + SWAP(Expr, *pNew, *pExpr); + pNew = sqlite3ExprAnd(pWalker->pParse, pWhere, pNew); + pS->pWhere = pNew; + pWalker->eCode = 1; + } + } + return WRC_Prune; + } + return WRC_Continue; +} + +/* +** Transfer eligible terms from the HAVING clause of a query, which is +** processed after grouping, to the WHERE clause, which is processed before +** grouping. For example, the query: +** +** SELECT * FROM WHERE a=? GROUP BY b HAVING b=? AND c=? +** +** can be rewritten as: +** +** SELECT * FROM WHERE a=? AND b=? GROUP BY b HAVING c=? +** +** A term of the HAVING expression is eligible for transfer if it consists +** entirely of constants and expressions that are also GROUP BY terms that +** use the "BINARY" collation sequence. +*/ +static void havingToWhere(Parse *pParse, Select *p){ + Walker sWalker; + memset(&sWalker, 0, sizeof(sWalker)); + sWalker.pParse = pParse; + sWalker.xExprCallback = havingToWhereExprCb; + sWalker.u.pSelect = p; + sqlite3WalkExpr(&sWalker, p->pHaving); +#if TREETRACE_ENABLED + if( sWalker.eCode && (sqlite3TreeTrace & 0x100)!=0 ){ + TREETRACE(0x100,pParse,p,("Move HAVING terms into WHERE:\n")); + sqlite3TreeViewSelect(0, p, 0); + } +#endif +} + +/* +** Check to see if the pThis entry of pTabList is a self-join of another view. +** Search FROM-clause entries in the range of iFirst..iEnd, including iFirst +** but stopping before iEnd. +** +** If pThis is a self-join, then return the SrcItem for the first other +** instance of that view found. If pThis is not a self-join then return 0. +*/ +static SrcItem *isSelfJoinView( + SrcList *pTabList, /* Search for self-joins in this FROM clause */ + SrcItem *pThis, /* Search for prior reference to this subquery */ + int iFirst, int iEnd /* Range of FROM-clause entries to search. */ +){ + SrcItem *pItem; + Select *pSel; + assert( pThis->fg.isSubquery ); + pSel = pThis->u4.pSubq->pSelect; + assert( pSel!=0 ); + if( pSel->selFlags & SF_PushDown ) return 0; + while( iFirsta[iFirst++]; + if( !pItem->fg.isSubquery ) continue; + if( pItem->fg.viaCoroutine ) continue; + if( pItem->zName==0 ) continue; + assert( pItem->pSTab!=0 ); + assert( pThis->pSTab!=0 ); + if( pItem->pSTab->pSchema!=pThis->pSTab->pSchema ) continue; + if( sqlite3_stricmp(pItem->zName, pThis->zName)!=0 ) continue; + pS1 = pItem->u4.pSubq->pSelect; + if( pItem->pSTab->pSchema==0 && pSel->selId!=pS1->selId ){ + /* The query flattener left two different CTE tables with identical + ** names in the same FROM clause. */ + continue; + } + if( pS1->selFlags & SF_PushDown ){ + /* The view was modified by some other optimization such as + ** pushDownWhereTerms() */ + continue; + } + return pItem; + } + return 0; +} + +/* +** Deallocate a single AggInfo object +*/ +static void agginfoFree(sqlite3 *db, void *pArg){ + AggInfo *p = (AggInfo*)pArg; + sqlite3DbFree(db, p->aCol); + sqlite3DbFree(db, p->aFunc); + sqlite3DbFreeNN(db, p); +} + +/* +** Attempt to transform a query of the form +** +** SELECT count(*) FROM (SELECT x FROM t1 UNION ALL SELECT y FROM t2) +** +** Into this: +** +** SELECT (SELECT count(*) FROM t1)+(SELECT count(*) FROM t2) +** +** The transformation only works if all of the following are true: +** +** * The subquery is a UNION ALL of two or more terms +** * The subquery does not have a LIMIT clause +** * There is no WHERE or GROUP BY or HAVING clauses on the subqueries +** * The outer query is a simple count(*) with no WHERE clause or other +** extraneous syntax. +** * None of the subqueries are DISTINCT (forumpost/a860f5fb2e 2025-03-10) +** +** Return TRUE if the optimization is undertaken. +*/ +static int countOfViewOptimization(Parse *pParse, Select *p){ + Select *pSub, *pPrior; + Expr *pExpr; + Expr *pCount; + sqlite3 *db; + SrcItem *pFrom; + if( (p->selFlags & SF_Aggregate)==0 ) return 0; /* This is an aggregate */ + if( p->pEList->nExpr!=1 ) return 0; /* Single result column */ + if( p->pWhere ) return 0; + if( p->pHaving ) return 0; + if( p->pGroupBy ) return 0; + if( p->pOrderBy ) return 0; + pExpr = p->pEList->a[0].pExpr; + if( pExpr->op!=TK_AGG_FUNCTION ) return 0; /* Result is an aggregate */ + assert( ExprUseUToken(pExpr) ); + if( sqlite3_stricmp(pExpr->u.zToken,"count") ) return 0; /* Is count() */ + assert( ExprUseXList(pExpr) ); + if( pExpr->x.pList!=0 ) return 0; /* Must be count(*) */ + if( p->pSrc->nSrc!=1 ) return 0; /* One table in FROM */ + if( ExprHasProperty(pExpr, EP_WinFunc) ) return 0;/* Not a window function */ + pFrom = p->pSrc->a; + if( pFrom->fg.isSubquery==0 ) return 0; /* FROM is a subquery */ + pSub = pFrom->u4.pSubq->pSelect; + if( pSub->pPrior==0 ) return 0; /* Must be a compound */ + if( pSub->selFlags & SF_CopyCte ) return 0; /* Not a CTE */ + do{ + if( pSub->op!=TK_ALL && pSub->pPrior ) return 0; /* Must be UNION ALL */ + if( pSub->pWhere ) return 0; /* No WHERE clause */ + if( pSub->pLimit ) return 0; /* No LIMIT clause */ + if( pSub->selFlags & (SF_Aggregate|SF_Distinct) ){ + testcase( pSub->selFlags & SF_Aggregate ); + testcase( pSub->selFlags & SF_Distinct ); + return 0; /* Not an aggregate nor DISTINCT */ + } + assert( pSub->pHaving==0 ); /* Due to the previous */ + pSub = pSub->pPrior; /* Repeat over compound */ + }while( pSub ); + + /* If we reach this point then it is OK to perform the transformation */ + + db = pParse->db; + pCount = pExpr; + pExpr = 0; + pSub = sqlite3SubqueryDetach(db, pFrom); + sqlite3SrcListDelete(db, p->pSrc); + p->pSrc = sqlite3DbMallocZero(pParse->db, SZ_SRCLIST_1); + while( pSub ){ + Expr *pTerm; + pPrior = pSub->pPrior; + pSub->pPrior = 0; + pSub->pNext = 0; + pSub->selFlags |= SF_Aggregate; + pSub->selFlags &= ~(u32)SF_Compound; + pSub->nSelectRow = 0; + sqlite3ParserAddCleanup(pParse, sqlite3ExprListDeleteGeneric, pSub->pEList); + pTerm = pPrior ? sqlite3ExprDup(db, pCount, 0) : pCount; + pSub->pEList = sqlite3ExprListAppend(pParse, 0, pTerm); + pTerm = sqlite3PExpr(pParse, TK_SELECT, 0, 0); + sqlite3PExprAddSelect(pParse, pTerm, pSub); + if( pExpr==0 ){ + pExpr = pTerm; + }else{ + pExpr = sqlite3PExpr(pParse, TK_PLUS, pTerm, pExpr); + } + pSub = pPrior; + } + p->pEList->a[0].pExpr = pExpr; + p->selFlags &= ~(u32)SF_Aggregate; + +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x200 ){ + TREETRACE(0x200,pParse,p,("After count-of-view optimization:\n")); + sqlite3TreeViewSelect(0, p, 0); + } +#endif + return 1; +} + +/* +** If any term of pSrc, or any SF_NestedFrom sub-query, is not the same +** as pSrcItem but has the same alias as p0, then return true. +** Otherwise return false. +*/ +static int sameSrcAlias(SrcItem *p0, SrcList *pSrc){ + int i; + for(i=0; inSrc; i++){ + SrcItem *p1 = &pSrc->a[i]; + if( p1==p0 ) continue; + if( p0->pSTab==p1->pSTab && 0==sqlite3_stricmp(p0->zAlias, p1->zAlias) ){ + return 1; + } + if( p1->fg.isSubquery + && (p1->u4.pSubq->pSelect->selFlags & SF_NestedFrom)!=0 + && sameSrcAlias(p0, p1->u4.pSubq->pSelect->pSrc) + ){ + return 1; + } + } + return 0; +} + +/* +** Return TRUE (non-zero) if the i-th entry in the pTabList SrcList can +** be implemented as a co-routine. The i-th entry is guaranteed to be +** a subquery. +** +** The subquery is implemented as a co-routine if all of the following are +** true: +** +** (1) The subquery will likely be implemented in the outer loop of +** the query. This will be the case if any one of the following +** conditions hold: +** (a) The subquery is the only term in the FROM clause +** (b) The subquery is the left-most term and a CROSS JOIN or similar +** requires it to be the outer loop +** (c) All of the following are true: +** (i) The subquery is the left-most subquery in the FROM clause +** (ii) There is nothing that would prevent the subquery from +** being used as the outer loop if the sqlite3WhereBegin() +** routine nominates it to that position. +** (iii) The query is not a UPDATE ... FROM +** (2) The subquery is not a CTE that should be materialized because +** (a) the AS MATERIALIZED keyword is used, or +** (b) the CTE is used multiple times and does not have the +** NOT MATERIALIZED keyword +** (3) The subquery is not part of a left operand for a RIGHT JOIN +** (4) The SQLITE_Coroutine optimization disable flag is not set +** (5) The subquery is not self-joined +*/ +static int fromClauseTermCanBeCoroutine( + Parse *pParse, /* Parsing context */ + SrcList *pTabList, /* FROM clause */ + int i, /* Which term of the FROM clause holds the subquery */ + int selFlags /* Flags on the SELECT statement */ +){ + SrcItem *pItem = &pTabList->a[i]; + if( pItem->fg.isCte ){ + const CteUse *pCteUse = pItem->u2.pCteUse; + if( pCteUse->eM10d==M10d_Yes ) return 0; /* (2a) */ + if( pCteUse->nUse>=2 && pCteUse->eM10d!=M10d_No ) return 0; /* (2b) */ + } + if( pTabList->a[0].fg.jointype & JT_LTORJ ) return 0; /* (3) */ + if( OptimizationDisabled(pParse->db, SQLITE_Coroutines) ) return 0; /* (4) */ + if( isSelfJoinView(pTabList, pItem, i+1, pTabList->nSrc)!=0 ){ + return 0; /* (5) */ + } + if( i==0 ){ + if( pTabList->nSrc==1 ) return 1; /* (1a) */ + if( pTabList->a[1].fg.jointype & JT_CROSS ) return 1; /* (1b) */ + if( selFlags & SF_UpdateFrom ) return 0; /* (1c-iii) */ + return 1; + } + if( selFlags & SF_UpdateFrom ) return 0; /* (1c-iii) */ + while( 1 /*exit-by-break*/ ){ + if( pItem->fg.jointype & (JT_OUTER|JT_CROSS) ) return 0; /* (1c-ii) */ + if( i==0 ) break; + i--; + pItem--; + if( pItem->fg.isSubquery ) return 0; /* (1c-i) */ + } + return 1; +} + +/* +** Argument pWhere is the WHERE clause belonging to SELECT statement p. This +** function attempts to transform expressions of the form: +** +** EXISTS (SELECT ...) +** +** into joins. For example, given +** +** CREATE TABLE sailors(sid INTEGER PRIMARY KEY, name TEXT); +** CREATE TABLE reserves(sid INT, day DATE, PRIMARY KEY(sid, day)); +** +** SELECT name FROM sailors AS S WHERE EXISTS ( +** SELECT * FROM reserves AS R WHERE S.sid = R.sid AND R.day = '2022-10-25' +** ); +** +** the SELECT statement may be transformed as follows: +** +** SELECT name FROM sailors AS S, reserves AS R +** WHERE S.sid = R.sid AND R.day = '2022-10-25'; +** +** **Approximately**. Really, we have to ensure that the FROM-clause term +** that was formerly inside the EXISTS is only executed once. This is handled +** by setting the SrcItem.fg.fromExists flag, which then causes code in +** the where.c file to exit the corresponding loop after the first successful +** match (if any). +*/ +static SQLITE_NOINLINE void existsToJoin( + Parse *pParse, /* Parsing context */ + Select *p, /* The SELECT statement being optimized */ + Expr *pWhere /* part of the WHERE clause currently being examined */ +){ + if( pParse->nErr==0 + && pWhere!=0 + && !ExprHasProperty(pWhere, EP_OuterON|EP_InnerON) + && ALWAYS(p->pSrc!=0) + && p->pSrc->nSrcop==TK_AND ){ + Expr *pRight = pWhere->pRight; + existsToJoin(pParse, p, pWhere->pLeft); + existsToJoin(pParse, p, pRight); + } + else if( pWhere->op==TK_EXISTS ){ + Select *pSub = pWhere->x.pSelect; + Expr *pSubWhere = pSub->pWhere; + if( pSub->pSrc->nSrc==1 + && (pSub->selFlags & SF_Aggregate)==0 + && !pSub->pSrc->a[0].fg.isSubquery + && pSub->pLimit==0 + && pSub->pPrior==0 + ){ + /* Before combining the sub-select with the parent, renumber the + ** cursor used by the subselect. This is because the EXISTS expression + ** might be a copy of another EXISTS expression from somewhere + ** else in the tree, and in this case it is important that it use + ** a unique cursor number. */ + sqlite3 *db = pParse->db; + int *aCsrMap = sqlite3DbMallocZero(db, (pParse->nTab+2)*sizeof(int)); + if( aCsrMap==0 ) return; + aCsrMap[0] = (pParse->nTab+1); + renumberCursors(pParse, pSub, -1, aCsrMap); + sqlite3DbFree(db, aCsrMap); + + memset(pWhere, 0, sizeof(*pWhere)); + pWhere->op = TK_INTEGER; + pWhere->u.iValue = 1; + ExprSetProperty(pWhere, EP_IntValue); + assert( p->pWhere!=0 ); + pSub->pSrc->a[0].fg.fromExists = 1; + pSub->pSrc->a[0].fg.jointype |= JT_CROSS; + p->pSrc = sqlite3SrcListAppendList(pParse, p->pSrc, pSub->pSrc); + if( pSubWhere ){ + p->pWhere = sqlite3PExpr(pParse, TK_AND, p->pWhere, pSubWhere); + pSub->pWhere = 0; + } + pSub->pSrc = 0; + sqlite3ParserAddCleanup(pParse, sqlite3SelectDeleteGeneric, pSub); +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x100000 ){ + TREETRACE(0x100000,pParse,p, + ("After EXISTS-to-JOIN optimization:\n")); + sqlite3TreeViewSelect(0, p, 0); + } +#endif + existsToJoin(pParse, p, pSubWhere); + } + } + } +} + +/* +** Type used for Walker callbacks by selectCheckOnClauses(). +*/ +typedef struct CheckOnCtx CheckOnCtx; +struct CheckOnCtx { + SrcList *pSrc; /* SrcList for this context */ + int iJoin; /* Cursor numbers must be =< than this */ + CheckOnCtx *pParent; /* Parent context */ +}; + +/* +** True if the SrcList passed as the only argument contains at least +** one RIGHT or FULL JOIN. False otherwise. +*/ +#define hasRightJoin(pSrc) (((pSrc)->a[0].fg.jointype & JT_LTORJ)!=0) + +/* +** The xExpr callback for the search of invalid ON clause terms. +*/ +static int selectCheckOnClausesExpr(Walker *pWalker, Expr *pExpr){ + CheckOnCtx *pCtx = pWalker->u.pCheckOnCtx; + + /* Check if pExpr is root or near-root of an ON clause constraint that needs + ** to be checked to ensure that it does not refer to tables in its FROM + ** clause to the right of itself. i.e. it is either: + ** + ** + an ON clause on an OUTER join, or + ** + an ON clause on an INNER join within a FROM that features at + ** least one RIGHT or FULL join. + */ + if( (ExprHasProperty(pExpr, EP_OuterON)) + || (ExprHasProperty(pExpr, EP_InnerON) && hasRightJoin(pCtx->pSrc)) + ){ + /* If CheckOnCtx.iJoin is already set, then fall through and process + ** this expression node as normal. Or, if CheckOnCtx.iJoin is still 0, + ** set it to the cursor number of the RHS of the join to which this + ** ON expression was attached and then iterate through the entire + ** expression. */ + assert( pCtx->iJoin==0 || pCtx->iJoin==pExpr->w.iJoin ); + if( pCtx->iJoin==0 ){ + pCtx->iJoin = pExpr->w.iJoin; + sqlite3WalkExprNN(pWalker, pExpr); + pCtx->iJoin = 0; + return WRC_Prune; + } + } + + if( pExpr->op==TK_COLUMN ){ + /* A column expression. Find the SrcList (if any) to which it refers. + ** Then, if CheckOnCtx.iJoin indicates that this expression is part of an + ** ON clause from that SrcList (i.e. if iJoin is non-zero), check that it + ** does not refer to a table to the right of CheckOnCtx.iJoin. */ + do { + SrcList *pSrc = pCtx->pSrc; + int iTab = pExpr->iTable; + if( iTab>=pSrc->a[0].iCursor && iTab<=pSrc->a[pSrc->nSrc-1].iCursor ){ + if( pCtx->iJoin && iTab>pCtx->iJoin ){ + sqlite3ErrorMsg(pWalker->pParse, + "ON clause references tables to its right"); + return WRC_Abort; + } + break; + } + pCtx = pCtx->pParent; + }while( pCtx ); + } + return WRC_Continue; +} + +/* +** The xSelect callback for the search of invalid ON clause terms. +*/ +static int selectCheckOnClausesSelect(Walker *pWalker, Select *pSelect){ + CheckOnCtx *pCtx = pWalker->u.pCheckOnCtx; + if( pSelect->pSrc==pCtx->pSrc || pSelect->pSrc->nSrc==0 ){ + return WRC_Continue; + }else{ + CheckOnCtx sCtx; + memset(&sCtx, 0, sizeof(sCtx)); + sCtx.pSrc = pSelect->pSrc; + sCtx.pParent = pCtx; + pWalker->u.pCheckOnCtx = &sCtx; + sqlite3WalkSelect(pWalker, pSelect); + pWalker->u.pCheckOnCtx = pCtx; + pSelect->selFlags &= ~SF_OnToWhere; + return WRC_Prune; + } +} + +/* +** Check all ON clauses in pSelect to verify that they do not reference +** columns to the right. +*/ +SQLITE_PRIVATE void sqlite3SelectCheckOnClauses(Parse *pParse, Select *pSelect){ + Walker w; + CheckOnCtx sCtx; + assert( pSelect->selFlags & SF_OnToWhere ); + assert( pSelect->pSrc!=0 && pSelect->pSrc->nSrc>=2 ); + memset(&w, 0, sizeof(w)); + w.pParse = pParse; + w.xExprCallback = selectCheckOnClausesExpr; + w.xSelectCallback = selectCheckOnClausesSelect; + w.u.pCheckOnCtx = &sCtx; + memset(&sCtx, 0, sizeof(sCtx)); + sCtx.pSrc = pSelect->pSrc; + sqlite3WalkExprNN(&w, pSelect->pWhere); + pSelect->selFlags &= ~SF_OnToWhere; +} + +/* +** Generate byte-code for the SELECT statement given in the p argument. +** +** The results are returned according to the SelectDest structure. +** See comments in sqliteInt.h for further information. +** +** This routine returns the number of errors. If any errors are +** encountered, then an appropriate error message is left in +** pParse->zErrMsg. +** +** This routine does NOT free the Select structure passed in. The +** calling function needs to do that. +** +** This is a long function. The following is an outline of the processing +** steps, with tags referencing various milestones: +** +** * Resolve names and similar preparation tag-select-0100 +** * Scan of the FROM clause tag-select-0200 +** + OUTER JOIN strength reduction tag-select-0220 +** + Sub-query ORDER BY removal tag-select-0230 +** + Query flattening tag-select-0240 +** * Separate subroutine for compound-SELECT tag-select-0300 +** * WHERE-clause constant propagation tag-select-0330 +** * Count()-of-VIEW optimization tag-select-0350 +** * Scan of the FROM clause again tag-select-0400 +** + Authorize unreferenced tables tag-select-0410 +** + Predicate push-down optimization tag-select-0420 +** + Omit unused subquery columns optimization tag-select-0440 +** + Generate code to implement subqueries tag-select-0480 +** - Co-routines tag-select-0482 +** - Reuse previously computed CTE tag-select-0484 +** - REuse previously computed VIEW tag-select-0486 +** - Materialize a VIEW or CTE tag-select-0488 +** * DISTINCT ORDER BY -> GROUP BY optimization tag-select-0500 +** * Set up for ORDER BY tag-select-0600 +** * Create output table tag-select-0630 +** * Prepare registers for LIMIT tag-select-0650 +** * Setup for DISTINCT tag-select-0680 +** * Generate code for non-aggregate and non-GROUP BY tag-select-0700 +** * Generate code for aggregate and/or GROUP BY tag-select-0800 +** + GROUP BY queries tag-select-0810 +** + non-GROUP BY queries tag-select-0820 +** - Special case of count() w/o GROUP BY tag-select-0821 +** - General case of non-GROUP BY aggregates tag-select-0822 +** * Sort results, as needed tag-select-0900 +** * Internal self-checks tag-select-1000 +*/ +SQLITE_PRIVATE int sqlite3Select( + Parse *pParse, /* The parser context */ + Select *p, /* The SELECT statement being coded. */ + SelectDest *pDest /* What to do with the query results */ +){ + int i, j; /* Loop counters */ + WhereInfo *pWInfo; /* Return from sqlite3WhereBegin() */ + Vdbe *v; /* The virtual machine under construction */ + int isAgg; /* True for select lists like "count(*)" */ + ExprList *pEList = 0; /* List of columns to extract. */ + SrcList *pTabList; /* List of tables to select from */ + Expr *pWhere; /* The WHERE clause. May be NULL */ + ExprList *pGroupBy; /* The GROUP BY clause. May be NULL */ + Expr *pHaving; /* The HAVING clause. May be NULL */ + AggInfo *pAggInfo = 0; /* Aggregate information */ + int rc = 1; /* Value to return from this function */ + DistinctCtx sDistinct; /* Info on how to code the DISTINCT keyword */ + SortCtx sSort; /* Info on how to code the ORDER BY clause */ + int iEnd; /* Address of the end of the query */ + sqlite3 *db; /* The database connection */ + ExprList *pMinMaxOrderBy = 0; /* Added ORDER BY for min/max queries */ + u8 minMaxFlag; /* Flag for min/max queries */ + + db = pParse->db; + assert( pParse==db->pParse ); + v = sqlite3GetVdbe(pParse); + if( p==0 || pParse->nErr ){ + return 1; + } + assert( db->mallocFailed==0 ); + if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1; +#if TREETRACE_ENABLED + TREETRACE(0x1,pParse,p, ("begin processing:\n", pParse->addrExplain)); + if( sqlite3TreeTrace & 0x10000 ){ + if( (sqlite3TreeTrace & 0x10001)==0x10000 ){ + sqlite3TreeViewLine(0, "In sqlite3Select() at %s:%d", + __FILE__, __LINE__); + } + sqlite3ShowSelect(p); + } +#endif + + /* tag-select-0100 */ + assert( p->pOrderBy==0 || pDest->eDest!=SRT_DistFifo ); + assert( p->pOrderBy==0 || pDest->eDest!=SRT_Fifo ); + assert( p->pOrderBy==0 || pDest->eDest!=SRT_DistQueue ); + assert( p->pOrderBy==0 || pDest->eDest!=SRT_Queue ); + if( IgnorableDistinct(pDest) ){ + assert(pDest->eDest==SRT_Exists || pDest->eDest==SRT_Union || + pDest->eDest==SRT_Except || pDest->eDest==SRT_Discard || + pDest->eDest==SRT_DistQueue || pDest->eDest==SRT_DistFifo ); + /* All of these destinations are also able to ignore the ORDER BY clause */ + if( p->pOrderBy ){ +#if TREETRACE_ENABLED + TREETRACE(0x800,pParse,p, ("dropping superfluous ORDER BY:\n")); + if( sqlite3TreeTrace & 0x800 ){ + sqlite3TreeViewExprList(0, p->pOrderBy, 0, "ORDERBY"); + } +#endif + sqlite3ParserAddCleanup(pParse, sqlite3ExprListDeleteGeneric, + p->pOrderBy); + testcase( pParse->earlyCleanup ); + p->pOrderBy = 0; + } + p->selFlags &= ~(u32)SF_Distinct; + p->selFlags |= SF_NoopOrderBy; + } + sqlite3SelectPrep(pParse, p, 0); + if( pParse->nErr ){ + goto select_end; + } + assert( db->mallocFailed==0 ); + assert( p->pEList!=0 ); +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x10 ){ + TREETRACE(0x10,pParse,p, ("after name resolution:\n")); + sqlite3TreeViewSelect(0, p, 0); + } +#endif + + /* If the SF_UFSrcCheck flag is set, then this function is being called + ** as part of populating the temp table for an UPDATE...FROM statement. + ** In this case, it is an error if the target object (pSrc->a[0]) name + ** or alias is duplicated within FROM clause (pSrc->a[1..n]). + ** + ** Postgres disallows this case too. The reason is that some other + ** systems handle this case differently, and not all the same way, + ** which is just confusing. To avoid this, we follow PG's lead and + ** disallow it altogether. */ + if( p->selFlags & SF_UFSrcCheck ){ + SrcItem *p0 = &p->pSrc->a[0]; + if( sameSrcAlias(p0, p->pSrc) ){ + sqlite3ErrorMsg(pParse, + "target object/alias may not appear in FROM clause: %s", + p0->zAlias ? p0->zAlias : p0->pSTab->zName + ); + goto select_end; + } + + /* Clear the SF_UFSrcCheck flag. The check has already been performed, + ** and leaving this flag set can cause errors if a compound sub-query + ** in p->pSrc is flattened into this query and this function called + ** again as part of compound SELECT processing. */ + p->selFlags &= ~(u32)SF_UFSrcCheck; + } + + if( pDest->eDest==SRT_Output ){ + sqlite3GenerateColumnNames(pParse, p); + } + +#ifndef SQLITE_OMIT_WINDOWFUNC + if( sqlite3WindowRewrite(pParse, p) ){ + assert( pParse->nErr ); + goto select_end; + } +#if TREETRACE_ENABLED + if( p->pWin && (sqlite3TreeTrace & 0x40)!=0 ){ + TREETRACE(0x40,pParse,p, ("after window rewrite:\n")); + sqlite3TreeViewSelect(0, p, 0); + } +#endif +#endif /* SQLITE_OMIT_WINDOWFUNC */ + pTabList = p->pSrc; + isAgg = (p->selFlags & SF_Aggregate)!=0; + memset(&sSort, 0, sizeof(sSort)); + sSort.pOrderBy = p->pOrderBy; + + /* Try to do various optimizations (flattening subqueries, and strength + ** reduction of join operators) in the FROM clause up into the main query + ** tag-select-0200 + */ +#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) + for(i=0; !p->pPrior && inSrc; i++){ + SrcItem *pItem = &pTabList->a[i]; + Select *pSub = pItem->fg.isSubquery ? pItem->u4.pSubq->pSelect : 0; + Table *pTab = pItem->pSTab; + + /* The expander should have already created transient Table objects + ** even for FROM clause elements such as subqueries that do not correspond + ** to a real table */ + assert( pTab!=0 ); + + /* Try to simplify joins: + ** + ** LEFT JOIN -> JOIN + ** RIGHT JOIN -> JOIN + ** FULL JOIN -> RIGHT JOIN + ** + ** If terms of the i-th table are used in the WHERE clause in such a + ** way that the i-th table cannot be the NULL row of a join, then + ** perform the appropriate simplification. This is called + ** "OUTER JOIN strength reduction" in the SQLite documentation. + ** tag-select-0220 + */ + if( (pItem->fg.jointype & (JT_LEFT|JT_LTORJ))!=0 + && sqlite3ExprImpliesNonNullRow(p->pWhere, pItem->iCursor, + pItem->fg.jointype & JT_LTORJ) + && OptimizationEnabled(db, SQLITE_SimplifyJoin) + ){ + if( pItem->fg.jointype & JT_LEFT ){ + if( pItem->fg.jointype & JT_RIGHT ){ + TREETRACE(0x1000,pParse,p, + ("FULL-JOIN simplifies to RIGHT-JOIN on term %d\n",i)); + pItem->fg.jointype &= ~JT_LEFT; + }else{ + TREETRACE(0x1000,pParse,p, + ("LEFT-JOIN simplifies to JOIN on term %d\n",i)); + pItem->fg.jointype &= ~(JT_LEFT|JT_OUTER); + unsetJoinExpr(p->pWhere, pItem->iCursor, 0); + } + } + if( pItem->fg.jointype & JT_LTORJ ){ + for(j=i+1; jnSrc; j++){ + SrcItem *pI2 = &pTabList->a[j]; + if( pI2->fg.jointype & JT_RIGHT ){ + if( pI2->fg.jointype & JT_LEFT ){ + TREETRACE(0x1000,pParse,p, + ("FULL-JOIN simplifies to LEFT-JOIN on term %d\n",j)); + pI2->fg.jointype &= ~JT_RIGHT; + }else{ + TREETRACE(0x1000,pParse,p, + ("RIGHT-JOIN simplifies to JOIN on term %d\n",j)); + pI2->fg.jointype &= ~(JT_RIGHT|JT_OUTER); + unsetJoinExpr(p->pWhere, pI2->iCursor, 1); + } + } + } + for(j=pTabList->nSrc-1; j>=0; j--){ + pTabList->a[j].fg.jointype &= ~JT_LTORJ; + if( pTabList->a[j].fg.jointype & JT_RIGHT ) break; + } + } + } + + /* No further action if this term of the FROM clause is not a subquery */ + if( pSub==0 ) continue; + + /* Catch mismatch in the declared columns of a view and the number of + ** columns in the SELECT on the RHS */ + if( pTab->nCol!=pSub->pEList->nExpr ){ + sqlite3ErrorMsg(pParse, "expected %d columns for '%s' but got %d", + pTab->nCol, pTab->zName, pSub->pEList->nExpr); + goto select_end; + } + + /* Do not attempt the usual optimizations (flattening and ORDER BY + ** elimination) on a MATERIALIZED common table expression because + ** a MATERIALIZED common table expression is an optimization fence. + */ + if( pItem->fg.isCte && pItem->u2.pCteUse->eM10d==M10d_Yes ){ + continue; + } + + /* Do not try to flatten an aggregate subquery. + ** + ** Flattening an aggregate subquery is only possible if the outer query + ** is not a join. But if the outer query is not a join, then the subquery + ** will be implemented as a co-routine and there is no advantage to + ** flattening in that case. + */ + if( (pSub->selFlags & SF_Aggregate)!=0 ) continue; + assert( pSub->pGroupBy==0 ); + + /* tag-select-0230: + ** If a FROM-clause subquery has an ORDER BY clause that is not + ** really doing anything, then delete it now so that it does not + ** interfere with query flattening. See the discussion at + ** https://sqlite.org/forum/forumpost/2d76f2bcf65d256a + ** + ** Beware of these cases where the ORDER BY clause may not be safely + ** omitted: + ** + ** (1) There is also a LIMIT clause + ** (2) The subquery was added to help with window-function + ** processing + ** (3) The subquery is in the FROM clause of an UPDATE + ** (4) The outer query uses an aggregate function other than + ** the built-in count(), min(), or max(). + ** (5) The ORDER BY isn't going to accomplish anything because + ** one of: + ** (a) The outer query has a different ORDER BY clause + ** (b) The subquery is part of a join + ** See forum post 062d576715d277c8 + ** (6) The subquery is not a recursive CTE. ORDER BY has a different + ** meaning for recursive CTEs and this optimization does not + ** apply. + ** + ** Also retain the ORDER BY if the OmitOrderBy optimization is disabled. + */ + if( pSub->pOrderBy!=0 + && (p->pOrderBy!=0 || pTabList->nSrc>1) /* Condition (5) */ + && pSub->pLimit==0 /* Condition (1) */ + && (pSub->selFlags & (SF_OrderByReqd|SF_Recursive))==0 /* (2) and (6) */ + && (p->selFlags & SF_OrderByReqd)==0 /* Condition (3) and (4) */ + && OptimizationEnabled(db, SQLITE_OmitOrderBy) + ){ + TREETRACE(0x800,pParse,p, + ("omit superfluous ORDER BY on %r FROM-clause subquery\n",i+1)); + sqlite3ParserAddCleanup(pParse, sqlite3ExprListDeleteGeneric, + pSub->pOrderBy); + pSub->pOrderBy = 0; + } + + /* If the outer query contains a "complex" result set (that is, + ** if the result set of the outer query uses functions or subqueries) + ** and if the subquery contains an ORDER BY clause and if + ** it will be implemented as a co-routine, then do not flatten. This + ** restriction allows SQL constructs like this: + ** + ** SELECT expensive_function(x) + ** FROM (SELECT x FROM tab ORDER BY y LIMIT 10); + ** + ** The expensive_function() is only computed on the 10 rows that + ** are output, rather than every row of the table. + ** + ** The requirement that the outer query have a complex result set + ** means that flattening does occur on simpler SQL constraints without + ** the expensive_function() like: + ** + ** SELECT x FROM (SELECT x FROM tab ORDER BY y LIMIT 10); + */ + if( pSub->pOrderBy!=0 + && i==0 + && (p->selFlags & SF_ComplexResult)!=0 + && (pTabList->nSrc==1 + || (pTabList->a[1].fg.jointype&(JT_OUTER|JT_CROSS))!=0) + ){ + continue; + } + + /* tag-select-0240 */ + if( flattenSubquery(pParse, p, i, isAgg) ){ + if( pParse->nErr ) goto select_end; + /* This subquery can be absorbed into its parent. */ + i = -1; + } + pTabList = p->pSrc; + if( db->mallocFailed ) goto select_end; + if( !IgnorableOrderby(pDest) ){ + sSort.pOrderBy = p->pOrderBy; + } + } +#endif + +#ifndef SQLITE_OMIT_COMPOUND_SELECT + /* Handle compound SELECT statements using the separate multiSelect() + ** procedure. tag-select-0300 + */ + if( p->pPrior ){ + rc = multiSelect(pParse, p, pDest); +#if TREETRACE_ENABLED + TREETRACE(0x400,pParse,p,("end compound-select processing\n")); + if( (sqlite3TreeTrace & 0x400)!=0 && ExplainQueryPlanParent(pParse)==0 ){ + sqlite3TreeViewSelect(0, p, 0); + } +#endif + if( p->pNext==0 ) ExplainQueryPlanPop(pParse); + return rc; + } +#endif + + /* If there may be an "EXISTS (SELECT ...)" in the WHERE clause, attempt + ** to change it into a join. */ + if( pParse->bHasExists && OptimizationEnabled(db,SQLITE_ExistsToJoin) ){ + existsToJoin(pParse, p, p->pWhere); + pTabList = p->pSrc; + } + + /* Do the WHERE-clause constant propagation optimization if this is + ** a join. No need to spend time on this operation for non-join queries + ** as the equivalent optimization will be handled by query planner in + ** sqlite3WhereBegin(). tag-select-0330 + */ + if( p->pWhere!=0 + && p->pWhere->op==TK_AND + && OptimizationEnabled(db, SQLITE_PropagateConst) + && propagateConstants(pParse, p) + ){ +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x2000 ){ + TREETRACE(0x2000,pParse,p,("After constant propagation:\n")); + sqlite3TreeViewSelect(0, p, 0); + } +#endif + }else{ + TREETRACE(0x2000,pParse,p,("Constant propagation not helpful\n")); + } + + /* tag-select-0350 */ + if( OptimizationEnabled(db, SQLITE_QueryFlattener|SQLITE_CountOfView) + && countOfViewOptimization(pParse, p) + ){ + if( db->mallocFailed ) goto select_end; + pTabList = p->pSrc; + } + + /* Loop over all terms in the FROM clause and do two things for each term: + ** + ** (1) Authorize unreferenced tables + ** (2) Generate code for all sub-queries + ** + ** tag-select-0400 + */ + for(i=0; inSrc; i++){ + SrcItem *pItem = &pTabList->a[i]; + SrcItem *pPrior; + SelectDest dest; + Subquery *pSubq; + Select *pSub; +#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) + const char *zSavedAuthContext; +#endif + + /* Authorized unreferenced tables. tag-select-0410 + ** + ** Issue SQLITE_READ authorizations with a fake column name for any + ** tables that are referenced but from which no values are extracted. + ** Examples of where these kinds of null SQLITE_READ authorizations + ** would occur: + ** + ** SELECT count(*) FROM t1; -- SQLITE_READ t1."" + ** SELECT t1.* FROM t1, t2; -- SQLITE_READ t2."" + ** + ** The fake column name is an empty string. It is possible for a table to + ** have a column named by the empty string, in which case there is no way to + ** distinguish between an unreferenced table and an actual reference to the + ** "" column. The original design was for the fake column name to be a NULL, + ** which would be unambiguous. But legacy authorization callbacks might + ** assume the column name is non-NULL and segfault. The use of an empty + ** string for the fake column name seems safer. + */ + if( pItem->colUsed==0 && pItem->zName!=0 ){ + const char *zDb; + if( pItem->fg.fixedSchema ){ + int iDb = sqlite3SchemaToIndex(pParse->db, pItem->u4.pSchema); + zDb = db->aDb[iDb].zDbSName; + }else if( pItem->fg.isSubquery ){ + zDb = 0; + }else{ + zDb = pItem->u4.zDatabase; + } + sqlite3AuthCheck(pParse, SQLITE_READ, pItem->zName, "", zDb); + } + +#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) + /* Generate code for all sub-queries in the FROM clause + */ + if( pItem->fg.isSubquery==0 ) continue; + pSubq = pItem->u4.pSubq; + assert( pSubq!=0 ); + pSub = pSubq->pSelect; + + /* The code for a subquery should only be generated once. */ + if( pSubq->addrFillSub!=0 ) continue; + + /* Increment Parse.nHeight by the height of the largest expression + ** tree referred to by this, the parent select. The child select + ** may contain expression trees of at most + ** (SQLITE_MAX_EXPR_DEPTH-Parse.nHeight) height. This is a bit + ** more conservative than necessary, but much easier than enforcing + ** an exact limit. + */ + pParse->nHeight += sqlite3SelectExprHeight(p); + + /* Make copies of constant WHERE-clause terms in the outer query down + ** inside the subquery. This can help the subquery to run more efficiently. + ** This is the "predicate push-down optimization". tag-select-0420 + */ + if( OptimizationEnabled(db, SQLITE_PushDown) + && (pItem->fg.isCte==0 + || (pItem->u2.pCteUse->eM10d!=M10d_Yes && pItem->u2.pCteUse->nUse<2)) + && pushDownWhereTerms(pParse, pSub, p->pWhere, pTabList, i) + ){ +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x4000 ){ + TREETRACE(0x4000,pParse,p, + ("After WHERE-clause push-down into subquery %d:\n", pSub->selId)); + sqlite3TreeViewSelect(0, p, 0); + } +#endif + assert( pSubq->pSelect && (pSub->selFlags & SF_PushDown)!=0 ); + }else{ + TREETRACE(0x4000,pParse,p,("WHERE-clause push-down not possible\n")); + } + + /* Convert unused result columns of the subquery into simple NULL + ** expressions, to avoid unneeded searching and computation. + ** tag-select-0440 + */ + if( OptimizationEnabled(db, SQLITE_NullUnusedCols) + && disableUnusedSubqueryResultColumns(pItem) + ){ +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x4000 ){ + TREETRACE(0x4000,pParse,p, + ("Change unused result columns to NULL for subquery %d:\n", + pSub->selId)); + sqlite3TreeViewSelect(0, p, 0); + } +#endif + } + + zSavedAuthContext = pParse->zAuthContext; + pParse->zAuthContext = pItem->zName; + + /* Generate byte-code to implement the subquery tag-select-0480 + */ + if( fromClauseTermCanBeCoroutine(pParse, pTabList, i, p->selFlags) ){ + /* Implement a co-routine that will return a single row of the result + ** set on each invocation. tag-select-0482 + */ + int addrTop = sqlite3VdbeCurrentAddr(v)+1; + + pSubq->regReturn = ++pParse->nMem; + sqlite3VdbeAddOp3(v, OP_InitCoroutine, pSubq->regReturn, 0, addrTop); + VdbeComment((v, "%!S", pItem)); + pSubq->addrFillSub = addrTop; + sqlite3SelectDestInit(&dest, SRT_Coroutine, pSubq->regReturn); + ExplainQueryPlan((pParse, 1, "CO-ROUTINE %!S", pItem)); + sqlite3Select(pParse, pSub, &dest); + pItem->pSTab->nRowLogEst = pSub->nSelectRow; + pItem->fg.viaCoroutine = 1; + pSubq->regResult = dest.iSdst; + sqlite3VdbeEndCoroutine(v, pSubq->regReturn); + VdbeComment((v, "end %!S", pItem)); + sqlite3VdbeJumpHere(v, addrTop-1); + sqlite3ClearTempRegCache(pParse); + }else if( pItem->fg.isCte && pItem->u2.pCteUse->addrM9e>0 ){ + /* This is a CTE for which materialization code has already been + ** generated. Invoke the subroutine to compute the materialization, + ** then make the pItem->iCursor be a copy of the ephemeral table that + ** holds the result of the materialization. tag-select-0484 */ + CteUse *pCteUse = pItem->u2.pCteUse; + sqlite3VdbeAddOp2(v, OP_Gosub, pCteUse->regRtn, pCteUse->addrM9e); + if( pItem->iCursor!=pCteUse->iCur ){ + sqlite3VdbeAddOp2(v, OP_OpenDup, pItem->iCursor, pCteUse->iCur); + VdbeComment((v, "%!S", pItem)); + } + pSub->nSelectRow = pCteUse->nRowEst; + }else if( (pPrior = isSelfJoinView(pTabList, pItem, 0, i))!=0 ){ + /* This view has already been materialized by a prior entry in + ** this same FROM clause. Reuse it. tag-select-0486 */ + Subquery *pPriorSubq; + assert( pPrior->fg.isSubquery ); + pPriorSubq = pPrior->u4.pSubq; + assert( pPriorSubq!=0 ); + if( pPriorSubq->addrFillSub ){ + sqlite3VdbeAddOp2(v, OP_Gosub, pPriorSubq->regReturn, + pPriorSubq->addrFillSub); + } + sqlite3VdbeAddOp2(v, OP_OpenDup, pItem->iCursor, pPrior->iCursor); + pSub->nSelectRow = pPriorSubq->pSelect->nSelectRow; + }else{ + /* Materialize the view. If the view is not correlated, generate a + ** subroutine to do the materialization so that subsequent uses of + ** the same view can reuse the materialization. tag-select-0488 */ + int topAddr; + int onceAddr = 0; +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + int addrExplain; +#endif + + pSubq->regReturn = ++pParse->nMem; + topAddr = sqlite3VdbeAddOp0(v, OP_Goto); + pSubq->addrFillSub = topAddr+1; + pItem->fg.isMaterialized = 1; + if( pItem->fg.isCorrelated==0 ){ + /* If the subquery is not correlated and if we are not inside of + ** a trigger, then we only need to compute the value of the subquery + ** once. */ + onceAddr = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); + VdbeComment((v, "materialize %!S", pItem)); + }else{ + VdbeNoopComment((v, "materialize %!S", pItem)); + } + sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor); + + ExplainQueryPlan2(addrExplain, (pParse, 1, "MATERIALIZE %!S", pItem)); + sqlite3Select(pParse, pSub, &dest); + pItem->pSTab->nRowLogEst = pSub->nSelectRow; + if( onceAddr ) sqlite3VdbeJumpHere(v, onceAddr); + sqlite3VdbeAddOp2(v, OP_Return, pSubq->regReturn, topAddr+1); + VdbeComment((v, "end %!S", pItem)); + sqlite3VdbeScanStatusRange(v, addrExplain, addrExplain, -1); + sqlite3VdbeJumpHere(v, topAddr); + sqlite3ClearTempRegCache(pParse); + if( pItem->fg.isCte && pItem->fg.isCorrelated==0 ){ + CteUse *pCteUse = pItem->u2.pCteUse; + pCteUse->addrM9e = pSubq->addrFillSub; + pCteUse->regRtn = pSubq->regReturn; + pCteUse->iCur = pItem->iCursor; + pCteUse->nRowEst = pSub->nSelectRow; + } + } + if( db->mallocFailed ) goto select_end; + pParse->nHeight -= sqlite3SelectExprHeight(p); + pParse->zAuthContext = zSavedAuthContext; +#endif + } + + /* Various elements of the SELECT copied into local variables for + ** convenience */ + pEList = p->pEList; + pWhere = p->pWhere; + pGroupBy = p->pGroupBy; + pHaving = p->pHaving; + sDistinct.isTnct = (p->selFlags & SF_Distinct)!=0; + +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x8000 ){ + TREETRACE(0x8000,pParse,p,("After all FROM-clause analysis:\n")); + sqlite3TreeViewSelect(0, p, 0); + } +#endif + + /* tag-select-0500 + ** + ** If the query is DISTINCT with an ORDER BY but is not an aggregate, and + ** if the select-list is the same as the ORDER BY list, then this query + ** can be rewritten as a GROUP BY. In other words, this: + ** + ** SELECT DISTINCT xyz FROM ... ORDER BY xyz + ** + ** is transformed to: + ** + ** SELECT xyz FROM ... GROUP BY xyz ORDER BY xyz + ** + ** The second form is preferred as a single index (or temp-table) may be + ** used for both the ORDER BY and DISTINCT processing. As originally + ** written the query must use a temp-table for at least one of the ORDER + ** BY and DISTINCT, and an index or separate temp-table for the other. + */ + if( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct + && sqlite3ExprListCompare(sSort.pOrderBy, pEList, -1)==0 + && OptimizationEnabled(db, SQLITE_GroupByOrder) +#ifndef SQLITE_OMIT_WINDOWFUNC + && p->pWin==0 +#endif + ){ + p->selFlags &= ~(u32)SF_Distinct; + pGroupBy = p->pGroupBy = sqlite3ExprListDup(db, pEList, 0); + if( pGroupBy ){ + for(i=0; inExpr; i++){ + pGroupBy->a[i].u.x.iOrderByCol = i+1; + } + } + p->selFlags |= SF_Aggregate; + /* Notice that even thought SF_Distinct has been cleared from p->selFlags, + ** the sDistinct.isTnct is still set. Hence, isTnct represents the + ** original setting of the SF_Distinct flag, not the current setting */ + assert( sDistinct.isTnct ); + sDistinct.isTnct = 2; + +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x20000 ){ + TREETRACE(0x20000,pParse,p,("Transform DISTINCT into GROUP BY:\n")); + sqlite3TreeViewSelect(0, p, 0); + } +#endif + } + + /* If there is an ORDER BY clause, then create an ephemeral index to + ** do the sorting. But this sorting ephemeral index might end up + ** being unused if the data can be extracted in pre-sorted order. + ** If that is the case, then the OP_OpenEphemeral instruction will be + ** changed to an OP_Noop once we figure out that the sorting index is + ** not needed. The sSort.addrSortIndex variable is used to facilitate + ** that change. tag-select-0600 + */ + if( sSort.pOrderBy ){ + KeyInfo *pKeyInfo; + pKeyInfo = sqlite3KeyInfoFromExprList( + pParse, sSort.pOrderBy, 0, pEList->nExpr); + sSort.iECursor = pParse->nTab++; + sSort.addrSortIndex = + sqlite3VdbeAddOp4(v, OP_OpenEphemeral, + sSort.iECursor, sSort.pOrderBy->nExpr+1+pEList->nExpr, 0, + (char*)pKeyInfo, P4_KEYINFO + ); + }else{ + sSort.addrSortIndex = -1; + } + + /* If the output is destined for a temporary table, open that table. + ** tag-select-0630 + */ + if( pDest->eDest==SRT_EphemTab ){ + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pDest->iSDParm, pEList->nExpr); + if( p->selFlags & SF_NestedFrom ){ + /* Delete or NULL-out result columns that will never be used */ + int ii; + for(ii=pEList->nExpr-1; ii>0 && pEList->a[ii].fg.bUsed==0; ii--){ + sqlite3ExprDelete(db, pEList->a[ii].pExpr); + sqlite3DbFree(db, pEList->a[ii].zEName); + pEList->nExpr--; + } + for(ii=0; iinExpr; ii++){ + if( pEList->a[ii].fg.bUsed==0 ) pEList->a[ii].pExpr->op = TK_NULL; + } + } + } + + /* Set the limiter. tag-select-0650 + */ + iEnd = sqlite3VdbeMakeLabel(pParse); + if( (p->selFlags & SF_FixedLimit)==0 ){ + p->nSelectRow = 320; /* 4 billion rows */ + } + if( p->pLimit ) computeLimitRegisters(pParse, p, iEnd); + if( p->iLimit==0 && sSort.addrSortIndex>=0 ){ + sqlite3VdbeChangeOpcode(v, sSort.addrSortIndex, OP_SorterOpen); + sSort.sortFlags |= SORTFLAG_UseSorter; + } + + /* Open an ephemeral index to use for the distinct set. tag-select-0680 + */ + if( p->selFlags & SF_Distinct ){ + sDistinct.tabTnct = pParse->nTab++; + sDistinct.addrTnct = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, + sDistinct.tabTnct, 0, 0, + (char*)sqlite3KeyInfoFromExprList(pParse, p->pEList,0,0), + P4_KEYINFO); + sqlite3VdbeChangeP5(v, BTREE_UNORDERED); + sDistinct.eTnctType = WHERE_DISTINCT_UNORDERED; + }else{ + sDistinct.eTnctType = WHERE_DISTINCT_NOOP; + } + + if( !isAgg && pGroupBy==0 ){ + /* No aggregate functions and no GROUP BY clause. tag-select-0700 */ + u16 wctrlFlags = (sDistinct.isTnct ? WHERE_WANT_DISTINCT : 0) + | (p->selFlags & SF_FixedLimit); +#ifndef SQLITE_OMIT_WINDOWFUNC + Window *pWin = p->pWin; /* Main window object (or NULL) */ + if( pWin ){ + sqlite3WindowCodeInit(pParse, p); + } +#endif + assert( WHERE_USE_LIMIT==SF_FixedLimit ); + + + /* Begin the database scan. */ + TREETRACE(0x2,pParse,p,("WhereBegin\n")); + pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, sSort.pOrderBy, + p->pEList, p, wctrlFlags, p->nSelectRow); + if( pWInfo==0 ) goto select_end; + if( sqlite3WhereOutputRowCount(pWInfo) < p->nSelectRow ){ + p->nSelectRow = sqlite3WhereOutputRowCount(pWInfo); + if( pDest->eDest<=SRT_DistQueue && pDest->eDest>=SRT_DistFifo ){ + /* TUNING: For a UNION CTE, because UNION is implies DISTINCT, + ** reduce the estimated output row count by 8 (LogEst 30). + ** Search for tag-20250414a to see other cases */ + p->nSelectRow -= 30; + } + } + if( sDistinct.isTnct && sqlite3WhereIsDistinct(pWInfo) ){ + sDistinct.eTnctType = sqlite3WhereIsDistinct(pWInfo); + } + if( sSort.pOrderBy ){ + sSort.nOBSat = sqlite3WhereIsOrdered(pWInfo); + sSort.labelOBLopt = sqlite3WhereOrderByLimitOptLabel(pWInfo); + if( sSort.nOBSat==sSort.pOrderBy->nExpr ){ + sSort.pOrderBy = 0; + } + } + TREETRACE(0x2,pParse,p,("WhereBegin returns\n")); + + /* If sorting index that was created by a prior OP_OpenEphemeral + ** instruction ended up not being needed, then change the OP_OpenEphemeral + ** into an OP_Noop. + */ + if( sSort.addrSortIndex>=0 && sSort.pOrderBy==0 ){ + sqlite3VdbeChangeToNoop(v, sSort.addrSortIndex); + } + + assert( p->pEList==pEList ); +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pWin ){ + int addrGosub = sqlite3VdbeMakeLabel(pParse); + int iCont = sqlite3VdbeMakeLabel(pParse); + int iBreak = sqlite3VdbeMakeLabel(pParse); + int regGosub = ++pParse->nMem; + + sqlite3WindowCodeStep(pParse, p, pWInfo, regGosub, addrGosub); + + sqlite3VdbeAddOp2(v, OP_Goto, 0, iBreak); + sqlite3VdbeResolveLabel(v, addrGosub); + VdbeNoopComment((v, "inner-loop subroutine")); + sSort.labelOBLopt = 0; + selectInnerLoop(pParse, p, -1, &sSort, &sDistinct, pDest, iCont, iBreak); + sqlite3VdbeResolveLabel(v, iCont); + sqlite3VdbeAddOp1(v, OP_Return, regGosub); + VdbeComment((v, "end inner-loop subroutine")); + sqlite3VdbeResolveLabel(v, iBreak); + }else +#endif /* SQLITE_OMIT_WINDOWFUNC */ + { + /* Use the standard inner loop. */ + selectInnerLoop(pParse, p, -1, &sSort, &sDistinct, pDest, + sqlite3WhereContinueLabel(pWInfo), + sqlite3WhereBreakLabel(pWInfo)); + + /* End the database scan loop. + */ + TREETRACE(0x2,pParse,p,("WhereEnd\n")); + sqlite3WhereEnd(pWInfo); + } + }else{ + /* This case is for when there exist aggregate functions or a GROUP BY + ** clause or both. tag-select-0800 */ + NameContext sNC; /* Name context for processing aggregate information */ + int iAMem; /* First Mem address for storing current GROUP BY */ + int iBMem; /* First Mem address for previous GROUP BY */ + int iUseFlag; /* Mem address holding flag indicating that at least + ** one row of the input to the aggregator has been + ** processed */ + int iAbortFlag; /* Mem address which causes query abort if positive */ + int groupBySort; /* Rows come from source in GROUP BY order */ + int addrEnd; /* End of processing for this SELECT */ + int sortPTab = 0; /* Pseudotable used to decode sorting results */ + int sortOut = 0; /* Output register from the sorter */ + int orderByGrp = 0; /* True if the GROUP BY and ORDER BY are the same */ + + /* Remove any and all aliases between the result set and the + ** GROUP BY clause. + */ + if( pGroupBy ){ + int k; /* Loop counter */ + struct ExprList_item *pItem; /* For looping over expression in a list */ + + for(k=p->pEList->nExpr, pItem=p->pEList->a; k>0; k--, pItem++){ + pItem->u.x.iAlias = 0; + } + for(k=pGroupBy->nExpr, pItem=pGroupBy->a; k>0; k--, pItem++){ + pItem->u.x.iAlias = 0; + } + assert( 66==sqlite3LogEst(100) ); + if( p->nSelectRow>66 ) p->nSelectRow = 66; + + /* If there is both a GROUP BY and an ORDER BY clause and they are + ** identical, then it may be possible to disable the ORDER BY clause + ** on the grounds that the GROUP BY will cause elements to come out + ** in the correct order. It also may not - the GROUP BY might use a + ** database index that causes rows to be grouped together as required + ** but not actually sorted. Either way, record the fact that the + ** ORDER BY and GROUP BY clauses are the same by setting the orderByGrp + ** variable. */ + if( sSort.pOrderBy && pGroupBy->nExpr==sSort.pOrderBy->nExpr ){ + int ii; + /* The GROUP BY processing doesn't care whether rows are delivered in + ** ASC or DESC order - only that each group is returned contiguously. + ** So set the ASC/DESC flags in the GROUP BY to match those in the + ** ORDER BY to maximize the chances of rows being delivered in an + ** order that makes the ORDER BY redundant. */ + for(ii=0; iinExpr; ii++){ + u8 sortFlags; + sortFlags = sSort.pOrderBy->a[ii].fg.sortFlags & KEYINFO_ORDER_DESC; + pGroupBy->a[ii].fg.sortFlags = sortFlags; + } + if( sqlite3ExprListCompare(pGroupBy, sSort.pOrderBy, -1)==0 ){ + orderByGrp = 1; + } + } + }else{ + assert( 0==sqlite3LogEst(1) ); + p->nSelectRow = 0; + } + + /* Create a label to jump to when we want to abort the query */ + addrEnd = sqlite3VdbeMakeLabel(pParse); + + /* Convert TK_COLUMN nodes into TK_AGG_COLUMN and make entries in + ** sAggInfo for all TK_AGG_FUNCTION nodes in expressions of the + ** SELECT statement. + */ + pAggInfo = sqlite3DbMallocZero(db, sizeof(*pAggInfo) ); + if( pAggInfo ){ + sqlite3ParserAddCleanup(pParse, agginfoFree, pAggInfo); + testcase( pParse->earlyCleanup ); + } + if( db->mallocFailed ){ + goto select_end; + } + pAggInfo->selId = p->selId; +#ifdef SQLITE_DEBUG + pAggInfo->pSelect = p; +#endif + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = pParse; + sNC.pSrcList = pTabList; + sNC.uNC.pAggInfo = pAggInfo; + VVA_ONLY( sNC.ncFlags = NC_UAggInfo; ) + pAggInfo->nSortingColumn = pGroupBy ? pGroupBy->nExpr : 0; + pAggInfo->pGroupBy = pGroupBy; + sqlite3ExprAnalyzeAggList(&sNC, pEList); + sqlite3ExprAnalyzeAggList(&sNC, sSort.pOrderBy); + if( pHaving ){ + if( pGroupBy ){ + assert( pWhere==p->pWhere ); + assert( pHaving==p->pHaving ); + assert( pGroupBy==p->pGroupBy ); + havingToWhere(pParse, p); + pWhere = p->pWhere; + } + sqlite3ExprAnalyzeAggregates(&sNC, pHaving); + } + pAggInfo->nAccumulator = pAggInfo->nColumn; + if( p->pGroupBy==0 && p->pHaving==0 && pAggInfo->nFunc==1 ){ + minMaxFlag = minMaxQuery(db, pAggInfo->aFunc[0].pFExpr, &pMinMaxOrderBy); + }else{ + minMaxFlag = WHERE_ORDERBY_NORMAL; + } + analyzeAggFuncArgs(pAggInfo, &sNC); + if( db->mallocFailed ) goto select_end; +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x20 ){ + TREETRACE(0x20,pParse,p,("After aggregate analysis %p:\n", pAggInfo)); + sqlite3TreeViewSelect(0, p, 0); + if( minMaxFlag ){ + sqlite3DebugPrintf("MIN/MAX Optimization (0x%02x) adds:\n", minMaxFlag); + sqlite3TreeViewExprList(0, pMinMaxOrderBy, 0, "ORDERBY"); + } + printAggInfo(pAggInfo); + } +#endif + + + /* Processing for aggregates with GROUP BY is very different and + ** much more complex than aggregates without a GROUP BY. tag-select-0810 + */ + if( pGroupBy ){ + KeyInfo *pKeyInfo; /* Keying information for the group by clause */ + int addr1; /* A-vs-B comparison jump */ + int addrOutputRow; /* Start of subroutine that outputs a result row */ + int regOutputRow; /* Return address register for output subroutine */ + int addrSetAbort; /* Set the abort flag and return */ + int addrTopOfLoop; /* Top of the input loop */ + int addrSortingIdx; /* The OP_OpenEphemeral for the sorting index */ + int addrReset; /* Subroutine for resetting the accumulator */ + int regReset; /* Return address register for reset subroutine */ + ExprList *pDistinct = 0; + u16 distFlag = 0; + int eDist = WHERE_DISTINCT_NOOP; + + if( pAggInfo->nFunc==1 + && pAggInfo->aFunc[0].iDistinct>=0 + && ALWAYS(pAggInfo->aFunc[0].pFExpr!=0) + && ALWAYS(ExprUseXList(pAggInfo->aFunc[0].pFExpr)) + && pAggInfo->aFunc[0].pFExpr->x.pList!=0 + ){ + Expr *pExpr = pAggInfo->aFunc[0].pFExpr->x.pList->a[0].pExpr; + pExpr = sqlite3ExprDup(db, pExpr, 0); + pDistinct = sqlite3ExprListDup(db, pGroupBy, 0); + pDistinct = sqlite3ExprListAppend(pParse, pDistinct, pExpr); + distFlag = pDistinct ? (WHERE_WANT_DISTINCT|WHERE_AGG_DISTINCT) : 0; + } + + /* If there is a GROUP BY clause we might need a sorting index to + ** implement it. Allocate that sorting index now. If it turns out + ** that we do not need it after all, the OP_SorterOpen instruction + ** will be converted into a Noop. + */ + pAggInfo->sortingIdx = pParse->nTab++; + pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pGroupBy, + 0, pAggInfo->nColumn); + addrSortingIdx = sqlite3VdbeAddOp4(v, OP_SorterOpen, + pAggInfo->sortingIdx, pAggInfo->nSortingColumn, + 0, (char*)pKeyInfo, P4_KEYINFO); + + /* Initialize memory locations used by GROUP BY aggregate processing + */ + iUseFlag = ++pParse->nMem; + iAbortFlag = ++pParse->nMem; + regOutputRow = ++pParse->nMem; + addrOutputRow = sqlite3VdbeMakeLabel(pParse); + regReset = ++pParse->nMem; + addrReset = sqlite3VdbeMakeLabel(pParse); + iAMem = pParse->nMem + 1; + pParse->nMem += pGroupBy->nExpr; + iBMem = pParse->nMem + 1; + pParse->nMem += pGroupBy->nExpr; + sqlite3VdbeAddOp2(v, OP_Integer, 0, iAbortFlag); + VdbeComment((v, "clear abort flag")); + sqlite3VdbeAddOp3(v, OP_Null, 0, iAMem, iAMem+pGroupBy->nExpr-1); + sqlite3ExprNullRegisterRange(pParse, iAMem, pGroupBy->nExpr); + + /* Begin a loop that will extract all source rows in GROUP BY order. + ** This might involve two separate loops with an OP_Sort in between, or + ** it might be a single loop that uses an index to extract information + ** in the right order to begin with. + */ + sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset); + TREETRACE(0x2,pParse,p,("WhereBegin\n")); + pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pGroupBy, pDistinct, + p, (sDistinct.isTnct==2 ? WHERE_DISTINCTBY : WHERE_GROUPBY) + | (orderByGrp ? WHERE_SORTBYGROUP : 0) | distFlag, 0 + ); + if( pWInfo==0 ){ + sqlite3ExprListDelete(db, pDistinct); + goto select_end; + } + if( pParse->pIdxEpr ){ + optimizeAggregateUseOfIndexedExpr(pParse, p, pAggInfo, &sNC); + } + assignAggregateRegisters(pParse, pAggInfo); + eDist = sqlite3WhereIsDistinct(pWInfo); + TREETRACE(0x2,pParse,p,("WhereBegin returns\n")); + if( sqlite3WhereIsOrdered(pWInfo)==pGroupBy->nExpr ){ + /* The optimizer is able to deliver rows in group by order so + ** we do not have to sort. The OP_OpenEphemeral table will be + ** cancelled later because we still need to use the pKeyInfo + */ + groupBySort = 0; + }else{ + /* Rows are coming out in undetermined order. We have to push + ** each row into a sorting index, terminate the first loop, + ** then loop over the sorting index in order to get the output + ** in sorted order + */ + int regBase; + int regRecord; + int nCol; + int nGroupBy; + +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + int addrExp; /* Address of OP_Explain instruction */ +#endif + ExplainQueryPlan2(addrExp, (pParse, 0, "USE TEMP B-TREE FOR %s", + (sDistinct.isTnct && (p->selFlags&SF_Distinct)==0) ? + "DISTINCT" : "GROUP BY" + )); + + groupBySort = 1; + nGroupBy = pGroupBy->nExpr; + nCol = nGroupBy; + j = nGroupBy; + for(i=0; inColumn; i++){ + if( pAggInfo->aCol[i].iSorterColumn>=j ){ + nCol++; + j++; + } + } + regBase = sqlite3GetTempRange(pParse, nCol); + sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0, 0); + j = nGroupBy; + pAggInfo->directMode = 1; + for(i=0; inColumn; i++){ + struct AggInfo_col *pCol = &pAggInfo->aCol[i]; + if( pCol->iSorterColumn>=j ){ + sqlite3ExprCode(pParse, pCol->pCExpr, j + regBase); + j++; + } + } + pAggInfo->directMode = 0; + regRecord = sqlite3GetTempReg(pParse); + sqlite3VdbeScanStatusCounters(v, addrExp, 0, sqlite3VdbeCurrentAddr(v)); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord); + sqlite3VdbeAddOp2(v, OP_SorterInsert, pAggInfo->sortingIdx, regRecord); + sqlite3VdbeScanStatusRange(v, addrExp, sqlite3VdbeCurrentAddr(v)-2, -1); + sqlite3ReleaseTempReg(pParse, regRecord); + sqlite3ReleaseTempRange(pParse, regBase, nCol); + TREETRACE(0x2,pParse,p,("WhereEnd\n")); + sqlite3WhereEnd(pWInfo); + pAggInfo->sortingIdxPTab = sortPTab = pParse->nTab++; + sortOut = sqlite3GetTempReg(pParse); + sqlite3VdbeScanStatusCounters(v, addrExp, sqlite3VdbeCurrentAddr(v), 0); + sqlite3VdbeAddOp3(v, OP_OpenPseudo, sortPTab, sortOut, nCol); + sqlite3VdbeAddOp2(v, OP_SorterSort, pAggInfo->sortingIdx, addrEnd); + VdbeComment((v, "GROUP BY sort")); VdbeCoverage(v); + pAggInfo->useSortingIdx = 1; + sqlite3VdbeScanStatusRange(v, addrExp, -1, sortPTab); + sqlite3VdbeScanStatusRange(v, addrExp, -1, pAggInfo->sortingIdx); + } + + /* If there are entries in pAgggInfo->aFunc[] that contain subexpressions + ** that are indexed (and that were previously identified and tagged + ** in optimizeAggregateUseOfIndexedExpr()) then those subexpressions + ** must now be converted into a TK_AGG_COLUMN node so that the value + ** is correctly pulled from the index rather than being recomputed. */ + if( pParse->pIdxEpr ){ + aggregateConvertIndexedExprRefToColumn(pAggInfo); +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x20 ){ + TREETRACE(0x20, pParse, p, + ("AggInfo function expressions converted to reference index\n")); + sqlite3TreeViewSelect(0, p, 0); + printAggInfo(pAggInfo); + } +#endif + } + + /* If the index or temporary table used by the GROUP BY sort + ** will naturally deliver rows in the order required by the ORDER BY + ** clause, cancel the ephemeral table open coded earlier. + ** + ** This is an optimization - the correct answer should result regardless. + ** Use the SQLITE_GroupByOrder flag with SQLITE_TESTCTRL_OPTIMIZER to + ** disable this optimization for testing purposes. */ + if( orderByGrp && OptimizationEnabled(db, SQLITE_GroupByOrder) + && (groupBySort || sqlite3WhereIsSorted(pWInfo)) + ){ + sSort.pOrderBy = 0; + sqlite3VdbeChangeToNoop(v, sSort.addrSortIndex); + } + + /* Evaluate the current GROUP BY terms and store in b0, b1, b2... + ** (b0 is memory location iBMem+0, b1 is iBMem+1, and so forth) + ** Then compare the current GROUP BY terms against the GROUP BY terms + ** from the previous row currently stored in a0, a1, a2... + */ + addrTopOfLoop = sqlite3VdbeCurrentAddr(v); + if( groupBySort ){ + sqlite3VdbeAddOp3(v, OP_SorterData, pAggInfo->sortingIdx, + sortOut, sortPTab); + } + for(j=0; jnExpr; j++){ + int iOrderByCol = pGroupBy->a[j].u.x.iOrderByCol; + + if( groupBySort ){ + sqlite3VdbeAddOp3(v, OP_Column, sortPTab, j, iBMem+j); + }else{ + pAggInfo->directMode = 1; + sqlite3ExprCode(pParse, pGroupBy->a[j].pExpr, iBMem+j); + } + + if( iOrderByCol ){ + Expr *pX = p->pEList->a[iOrderByCol-1].pExpr; + Expr *pBase = sqlite3ExprSkipCollateAndLikely(pX); + while( ALWAYS(pBase!=0) && pBase->op==TK_IF_NULL_ROW ){ + pX = pBase->pLeft; + pBase = sqlite3ExprSkipCollateAndLikely(pX); + } + if( ALWAYS(pBase!=0) + && pBase->op!=TK_AGG_COLUMN + && pBase->op!=TK_REGISTER + ){ + sqlite3ExprToRegister(pX, iAMem+j); + } + } + } + sqlite3VdbeAddOp4(v, OP_Compare, iAMem, iBMem, pGroupBy->nExpr, + (char*)sqlite3KeyInfoRef(pKeyInfo), P4_KEYINFO); + addr1 = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeAddOp3(v, OP_Jump, addr1+1, 0, addr1+1); VdbeCoverage(v); + + /* Generate code that runs whenever the GROUP BY changes. + ** Changes in the GROUP BY are detected by the previous code + ** block. If there were no changes, this block is skipped. + ** + ** This code copies current group by terms in b0,b1,b2,... + ** over to a0,a1,a2. It then calls the output subroutine + ** and resets the aggregate accumulator registers in preparation + ** for the next GROUP BY batch. + */ + sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow); + VdbeComment((v, "output one row of %d", p->selId)); + sqlite3ExprCodeMove(pParse, iBMem, iAMem, pGroupBy->nExpr); + sqlite3VdbeAddOp2(v, OP_IfPos, iAbortFlag, addrEnd); VdbeCoverage(v); + VdbeComment((v, "check abort flag")); + sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset); + VdbeComment((v, "reset accumulator %d", p->selId)); + + /* Update the aggregate accumulators based on the content of + ** the current row + */ + sqlite3VdbeJumpHere(v, addr1); + updateAccumulator(pParse, iUseFlag, pAggInfo, eDist); + sqlite3VdbeAddOp2(v, OP_Integer, 1, iUseFlag); + VdbeComment((v, "indicate data in accumulator %d", p->selId)); + + /* End of the loop + */ + if( groupBySort ){ + sqlite3VdbeAddOp2(v, OP_SorterNext, pAggInfo->sortingIdx,addrTopOfLoop); + VdbeCoverage(v); + }else{ + TREETRACE(0x2,pParse,p,("WhereEnd\n")); + sqlite3WhereEnd(pWInfo); + sqlite3VdbeChangeToNoop(v, addrSortingIdx); + } + sqlite3ExprListDelete(db, pDistinct); + + /* Output the final row of result + */ + sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow); + VdbeComment((v, "output final row of %d", p->selId)); + + /* Jump over the subroutines + */ + sqlite3VdbeGoto(v, addrEnd); + + /* Generate a subroutine that outputs a single row of the result + ** set. This subroutine first looks at the iUseFlag. If iUseFlag + ** is less than or equal to zero, the subroutine is a no-op. If + ** the processing calls for the query to abort, this subroutine + ** increments the iAbortFlag memory location before returning in + ** order to signal the caller to abort. + */ + addrSetAbort = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeAddOp2(v, OP_Integer, 1, iAbortFlag); + VdbeComment((v, "set abort flag")); + sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); + sqlite3VdbeResolveLabel(v, addrOutputRow); + addrOutputRow = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeAddOp2(v, OP_IfPos, iUseFlag, addrOutputRow+2); + VdbeCoverage(v); + VdbeComment((v, "Groupby result generator entry point %d", p->selId)); + sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); + finalizeAggFunctions(pParse, pAggInfo); + sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL); + selectInnerLoop(pParse, p, -1, &sSort, + &sDistinct, pDest, + addrOutputRow+1, addrSetAbort); + sqlite3VdbeAddOp1(v, OP_Return, regOutputRow); + VdbeComment((v, "end groupby result generator %d", p->selId)); + + /* Generate a subroutine that will reset the group-by accumulator + */ + sqlite3VdbeResolveLabel(v, addrReset); + resetAccumulator(pParse, pAggInfo); + sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag); + VdbeComment((v, "indicate accumulator %d empty", p->selId)); + sqlite3VdbeAddOp1(v, OP_Return, regReset); + + if( distFlag!=0 && eDist!=WHERE_DISTINCT_NOOP ){ + struct AggInfo_func *pF = &pAggInfo->aFunc[0]; + fixDistinctOpenEph(pParse, eDist, pF->iDistinct, pF->iDistAddr); + } + } /* endif pGroupBy. Begin aggregate queries without GROUP BY: */ + else { + /* Aggregate functions without GROUP BY. tag-select-0820 */ + Table *pTab; + if( (pTab = isSimpleCount(p, pAggInfo))!=0 ){ + /* tag-select-0821 + ** + ** If isSimpleCount() returns a pointer to a Table structure, then + ** the SQL statement is of the form: + ** + ** SELECT count(*) FROM + ** + ** where the Table structure returned represents table . + ** + ** This statement is so common that it is optimized specially. The + ** OP_Count instruction is executed either on the intkey table that + ** contains the data for table or on one of its indexes. It + ** is better to execute the op on an index, as indexes are almost + ** always spread across less pages than their corresponding tables. + */ + const int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + const int iCsr = pParse->nTab++; /* Cursor to scan b-tree */ + Index *pIdx; /* Iterator variable */ + KeyInfo *pKeyInfo = 0; /* Keyinfo for scanned index */ + Index *pBest = 0; /* Best index found so far */ + Pgno iRoot = pTab->tnum; /* Root page of scanned b-tree */ + + sqlite3CodeVerifySchema(pParse, iDb); + sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName); + + /* Search for the index that has the lowest scan cost. + ** + ** (2011-04-15) Do not do a full scan of an unordered index. + ** + ** (2013-10-03) Do not count the entries in a partial index. + ** + ** In practice the KeyInfo structure will not be used. It is only + ** passed to keep OP_OpenRead happy. + */ + if( !HasRowid(pTab) ) pBest = sqlite3PrimaryKeyIndex(pTab); + if( !p->pSrc->a[0].fg.notIndexed ){ + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + if( pIdx->bUnordered==0 + && pIdx->szIdxRowszTabRow + && pIdx->pPartIdxWhere==0 + && (!pBest || pIdx->szIdxRowszIdxRow) + ){ + pBest = pIdx; + } + } + } + if( pBest ){ + iRoot = pBest->tnum; + pKeyInfo = sqlite3KeyInfoOfIndex(pParse, pBest); + } + + /* Open a read-only cursor, execute the OP_Count, close the cursor. */ + sqlite3VdbeAddOp4Int(v, OP_OpenRead, iCsr, (int)iRoot, iDb, 1); + if( pKeyInfo ){ + sqlite3VdbeChangeP4(v, -1, (char *)pKeyInfo, P4_KEYINFO); + } + assignAggregateRegisters(pParse, pAggInfo); + sqlite3VdbeAddOp2(v, OP_Count, iCsr, AggInfoFuncReg(pAggInfo,0)); + sqlite3VdbeAddOp1(v, OP_Close, iCsr); + explainSimpleCount(pParse, pTab, pBest); + }else{ + /* The general case of an aggregate query without GROUP BY + ** tag-select-0822 */ + int regAcc = 0; /* "populate accumulators" flag */ + ExprList *pDistinct = 0; + u16 distFlag = 0; + int eDist; + + /* If there are accumulator registers but no min() or max() functions + ** without FILTER clauses, allocate register regAcc. Register regAcc + ** will contain 0 the first time the inner loop runs, and 1 thereafter. + ** The code generated by updateAccumulator() uses this to ensure + ** that the accumulator registers are (a) updated only once if + ** there are no min() or max functions or (b) always updated for the + ** first row visited by the aggregate, so that they are updated at + ** least once even if the FILTER clause means the min() or max() + ** function visits zero rows. */ + if( pAggInfo->nAccumulator ){ + for(i=0; inFunc; i++){ + if( ExprHasProperty(pAggInfo->aFunc[i].pFExpr, EP_WinFunc) ){ + continue; + } + if( pAggInfo->aFunc[i].pFunc->funcFlags&SQLITE_FUNC_NEEDCOLL ){ + break; + } + } + if( i==pAggInfo->nFunc ){ + regAcc = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Integer, 0, regAcc); + } + }else if( pAggInfo->nFunc==1 && pAggInfo->aFunc[0].iDistinct>=0 ){ + assert( ExprUseXList(pAggInfo->aFunc[0].pFExpr) ); + pDistinct = pAggInfo->aFunc[0].pFExpr->x.pList; + distFlag = pDistinct ? (WHERE_WANT_DISTINCT|WHERE_AGG_DISTINCT) : 0; + } + assignAggregateRegisters(pParse, pAggInfo); + + /* This case runs if the aggregate has no GROUP BY clause. The + ** processing is much simpler since there is only a single row + ** of output. + */ + assert( p->pGroupBy==0 ); + resetAccumulator(pParse, pAggInfo); + + /* If this query is a candidate for the min/max optimization, then + ** minMaxFlag will have been previously set to either + ** WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX and pMinMaxOrderBy will + ** be an appropriate ORDER BY expression for the optimization. + */ + assert( minMaxFlag==WHERE_ORDERBY_NORMAL || pMinMaxOrderBy!=0 ); + assert( pMinMaxOrderBy==0 || pMinMaxOrderBy->nExpr==1 ); + + TREETRACE(0x2,pParse,p,("WhereBegin\n")); + pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pMinMaxOrderBy, + pDistinct, p, minMaxFlag|distFlag, 0); + if( pWInfo==0 ){ + goto select_end; + } + TREETRACE(0x2,pParse,p,("WhereBegin returns\n")); + eDist = sqlite3WhereIsDistinct(pWInfo); + updateAccumulator(pParse, regAcc, pAggInfo, eDist); + if( eDist!=WHERE_DISTINCT_NOOP ){ + struct AggInfo_func *pF = pAggInfo->aFunc; + if( pF ){ + fixDistinctOpenEph(pParse, eDist, pF->iDistinct, pF->iDistAddr); + } + } + + if( regAcc ) sqlite3VdbeAddOp2(v, OP_Integer, 1, regAcc); + if( minMaxFlag ){ + sqlite3WhereMinMaxOptEarlyOut(v, pWInfo); + } + TREETRACE(0x2,pParse,p,("WhereEnd\n")); + sqlite3WhereEnd(pWInfo); + finalizeAggFunctions(pParse, pAggInfo); + } + + sSort.pOrderBy = 0; + sqlite3ExprIfFalse(pParse, pHaving, addrEnd, SQLITE_JUMPIFNULL); + selectInnerLoop(pParse, p, -1, 0, 0, + pDest, addrEnd, addrEnd); + } + sqlite3VdbeResolveLabel(v, addrEnd); + + } /* endif aggregate query */ + + if( sDistinct.eTnctType==WHERE_DISTINCT_UNORDERED ){ + explainTempTable(pParse, "DISTINCT"); + } + + /* If there is an ORDER BY clause, then we need to sort the results + ** and send them to the callback one by one. tag-select-0900 + */ + if( sSort.pOrderBy ){ + assert( p->pEList==pEList ); + generateSortTail(pParse, p, &sSort, pEList->nExpr, pDest); + } + + /* Jump here to skip this query + */ + sqlite3VdbeResolveLabel(v, iEnd); + + /* The SELECT has been coded. If there is an error in the Parse structure, + ** set the return code to 1. Otherwise 0. */ + rc = (pParse->nErr>0); + + /* Control jumps to here if an error is encountered above, or upon + ** successful coding of the SELECT. + */ +select_end: + assert( db->mallocFailed==0 || db->mallocFailed==1 ); + assert( db->mallocFailed==0 || pParse->nErr!=0 ); + sqlite3ExprListDelete(db, pMinMaxOrderBy); +#ifdef SQLITE_DEBUG + /* Internal self-checks. tag-select-1000 */ + if( pAggInfo && !db->mallocFailed ){ +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x20 ){ + TREETRACE(0x20,pParse,p,("Finished with AggInfo\n")); + printAggInfo(pAggInfo); + } +#endif + for(i=0; inColumn; i++){ + Expr *pExpr = pAggInfo->aCol[i].pCExpr; + if( pExpr==0 ) continue; + assert( pExpr->pAggInfo==pAggInfo ); + assert( pExpr->iAgg==i ); + } + for(i=0; inFunc; i++){ + Expr *pExpr = pAggInfo->aFunc[i].pFExpr; + assert( pExpr!=0 ); + assert( pExpr->pAggInfo==pAggInfo ); + assert( pExpr->iAgg==i ); + } + } +#endif + +#if TREETRACE_ENABLED + TREETRACE(0x1,pParse,p,("end processing\n")); + if( (sqlite3TreeTrace & 0x40000)!=0 && ExplainQueryPlanParent(pParse)==0 ){ + sqlite3TreeViewSelect(0, p, 0); + } +#endif + ExplainQueryPlanPop(pParse); + return rc; +} + +/************** End of select.c **********************************************/ +/************** Begin file table.c *******************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains the sqlite3_get_table() and sqlite3_free_table() +** interface routines. These are just wrappers around the main +** interface routine of sqlite3_exec(). +** +** These routines are in a separate files so that they will not be linked +** if they are not used. +*/ +/* #include "sqliteInt.h" */ + +#ifndef SQLITE_OMIT_GET_TABLE + +/* +** This structure is used to pass data from sqlite3_get_table() through +** to the callback function is uses to build the result. +*/ +typedef struct TabResult { + char **azResult; /* Accumulated output */ + char *zErrMsg; /* Error message text, if an error occurs */ + u32 nAlloc; /* Slots allocated for azResult[] */ + u32 nRow; /* Number of rows in the result */ + u32 nColumn; /* Number of columns in the result */ + u32 nData; /* Slots used in azResult[]. (nRow+1)*nColumn */ + int rc; /* Return code from sqlite3_exec() */ +} TabResult; + +/* +** This routine is called once for each row in the result table. Its job +** is to fill in the TabResult structure appropriately, allocating new +** memory as necessary. +*/ +static int sqlite3_get_table_cb(void *pArg, int nCol, char **argv, char **colv){ + TabResult *p = (TabResult*)pArg; /* Result accumulator */ + int need; /* Slots needed in p->azResult[] */ + int i; /* Loop counter */ + char *z; /* A single column of result */ + + /* Make sure there is enough space in p->azResult to hold everything + ** we need to remember from this invocation of the callback. + */ + if( p->nRow==0 && argv!=0 ){ + need = nCol*2; + }else{ + need = nCol; + } + if( p->nData + need > p->nAlloc ){ + char **azNew; + p->nAlloc = p->nAlloc*2 + need; + azNew = sqlite3Realloc( p->azResult, sizeof(char*)*p->nAlloc ); + if( azNew==0 ) goto malloc_failed; + p->azResult = azNew; + } + + /* If this is the first row, then generate an extra row containing + ** the names of all columns. + */ + if( p->nRow==0 ){ + p->nColumn = nCol; + for(i=0; iazResult[p->nData++] = z; + } + }else if( (int)p->nColumn!=nCol ){ + sqlite3_free(p->zErrMsg); + p->zErrMsg = sqlite3_mprintf( + "sqlite3_get_table() called with two or more incompatible queries" + ); + p->rc = SQLITE_ERROR; + return 1; + } + + /* Copy over the row data + */ + if( argv!=0 ){ + for(i=0; iazResult[p->nData++] = z; + } + p->nRow++; + } + return 0; + +malloc_failed: + p->rc = SQLITE_NOMEM_BKPT; + return 1; +} + +/* +** Query the database. But instead of invoking a callback for each row, +** malloc() for space to hold the result and return the entire results +** at the conclusion of the call. +** +** The result that is written to ***pazResult is held in memory obtained +** from malloc(). But the caller cannot free this memory directly. +** Instead, the entire table should be passed to sqlite3_free_table() when +** the calling procedure is finished using it. +*/ +SQLITE_API int sqlite3_get_table( + sqlite3 *db, /* The database on which the SQL executes */ + const char *zSql, /* The SQL to be executed */ + char ***pazResult, /* Write the result table here */ + int *pnRow, /* Write the number of rows in the result here */ + int *pnColumn, /* Write the number of columns of result here */ + char **pzErrMsg /* Write error messages here */ +){ + int rc; + TabResult res; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || pazResult==0 ) return SQLITE_MISUSE_BKPT; +#endif + *pazResult = 0; + if( pnColumn ) *pnColumn = 0; + if( pnRow ) *pnRow = 0; + if( pzErrMsg ) *pzErrMsg = 0; + res.zErrMsg = 0; + res.nRow = 0; + res.nColumn = 0; + res.nData = 1; + res.nAlloc = 20; + res.rc = SQLITE_OK; + res.azResult = sqlite3_malloc64(sizeof(char*)*res.nAlloc ); + if( res.azResult==0 ){ + db->errCode = SQLITE_NOMEM; + return SQLITE_NOMEM_BKPT; + } + res.azResult[0] = 0; + rc = sqlite3_exec(db, zSql, sqlite3_get_table_cb, &res, pzErrMsg); + assert( sizeof(res.azResult[0])>= sizeof(res.nData) ); + res.azResult[0] = SQLITE_INT_TO_PTR(res.nData); + if( (rc&0xff)==SQLITE_ABORT ){ + sqlite3_free_table(&res.azResult[1]); + if( res.zErrMsg ){ + if( pzErrMsg ){ + sqlite3_free(*pzErrMsg); + *pzErrMsg = sqlite3_mprintf("%s",res.zErrMsg); + } + sqlite3_free(res.zErrMsg); + } + db->errCode = res.rc; /* Assume 32-bit assignment is atomic */ + return res.rc; + } + sqlite3_free(res.zErrMsg); + if( rc!=SQLITE_OK ){ + sqlite3_free_table(&res.azResult[1]); + return rc; + } + if( res.nAlloc>res.nData ){ + char **azNew; + azNew = sqlite3Realloc( res.azResult, sizeof(char*)*res.nData ); + if( azNew==0 ){ + sqlite3_free_table(&res.azResult[1]); + db->errCode = SQLITE_NOMEM; + return SQLITE_NOMEM_BKPT; + } + res.azResult = azNew; + } + *pazResult = &res.azResult[1]; + if( pnColumn ) *pnColumn = res.nColumn; + if( pnRow ) *pnRow = res.nRow; + return rc; +} + +/* +** This routine frees the space the sqlite3_get_table() malloced. +*/ +SQLITE_API void sqlite3_free_table( + char **azResult /* Result returned from sqlite3_get_table() */ +){ + if( azResult ){ + int i, n; + azResult--; + assert( azResult!=0 ); + n = SQLITE_PTR_TO_INT(azResult[0]); + for(i=1; ipNext; + + sqlite3ExprDelete(db, pTmp->pWhere); + sqlite3ExprListDelete(db, pTmp->pExprList); + sqlite3SelectDelete(db, pTmp->pSelect); + sqlite3IdListDelete(db, pTmp->pIdList); + sqlite3UpsertDelete(db, pTmp->pUpsert); + sqlite3SrcListDelete(db, pTmp->pFrom); + sqlite3DbFree(db, pTmp->zSpan); + + sqlite3DbFree(db, pTmp); + } +} + +/* +** Given table pTab, return a list of all the triggers attached to +** the table. The list is connected by Trigger.pNext pointers. +** +** All of the triggers on pTab that are in the same database as pTab +** are already attached to pTab->pTrigger. But there might be additional +** triggers on pTab in the TEMP schema. This routine prepends all +** TEMP triggers on pTab to the beginning of the pTab->pTrigger list +** and returns the combined list. +** +** To state it another way: This routine returns a list of all triggers +** that fire off of pTab. The list will include any TEMP triggers on +** pTab as well as the triggers lised in pTab->pTrigger. +*/ +SQLITE_PRIVATE Trigger *sqlite3TriggerList(Parse *pParse, Table *pTab){ + Schema *pTmpSchema; /* Schema of the pTab table */ + Trigger *pList; /* List of triggers to return */ + HashElem *p; /* Loop variable for TEMP triggers */ + + assert( pParse->disableTriggers==0 ); + pTmpSchema = pParse->db->aDb[1].pSchema; + p = sqliteHashFirst(&pTmpSchema->trigHash); + pList = pTab->pTrigger; + while( p ){ + Trigger *pTrig = (Trigger *)sqliteHashData(p); + if( pTrig->pTabSchema==pTab->pSchema + && pTrig->table + && 0==sqlite3StrICmp(pTrig->table, pTab->zName) + && (pTrig->pTabSchema!=pTmpSchema || pTrig->bReturning) + ){ + pTrig->pNext = pList; + pList = pTrig; + }else if( pTrig->op==TK_RETURNING ){ +#ifndef SQLITE_OMIT_VIRTUALTABLE + assert( pParse->db->pVtabCtx==0 ); +#endif + assert( pParse->bReturning ); + assert( !pParse->isCreate ); + assert( &(pParse->u1.d.pReturning->retTrig) == pTrig ); + pTrig->table = pTab->zName; + pTrig->pTabSchema = pTab->pSchema; + pTrig->pNext = pList; + pList = pTrig; + } + p = sqliteHashNext(p); + } +#if 0 + if( pList ){ + Trigger *pX; + printf("Triggers for %s:", pTab->zName); + for(pX=pList; pX; pX=pX->pNext){ + printf(" %s", pX->zName); + } + printf("\n"); + fflush(stdout); + } +#endif + return pList; +} + +/* +** This is called by the parser when it sees a CREATE TRIGGER statement +** up to the point of the BEGIN before the trigger actions. A Trigger +** structure is generated based on the information available and stored +** in pParse->pNewTrigger. After the trigger actions have been parsed, the +** sqlite3FinishTrigger() function is called to complete the trigger +** construction process. +*/ +SQLITE_PRIVATE void sqlite3BeginTrigger( + Parse *pParse, /* The parse context of the CREATE TRIGGER statement */ + Token *pName1, /* The name of the trigger */ + Token *pName2, /* The name of the trigger */ + int tr_tm, /* One of TK_BEFORE, TK_AFTER, TK_INSTEAD */ + int op, /* One of TK_INSERT, TK_UPDATE, TK_DELETE */ + IdList *pColumns, /* column list if this is an UPDATE OF trigger */ + SrcList *pTableName,/* The name of the table/view the trigger applies to */ + Expr *pWhen, /* WHEN clause */ + int isTemp, /* True if the TEMPORARY keyword is present */ + int noErr /* Suppress errors if the trigger already exists */ +){ + Trigger *pTrigger = 0; /* The new trigger */ + Table *pTab; /* Table that the trigger fires off of */ + char *zName = 0; /* Name of the trigger */ + sqlite3 *db = pParse->db; /* The database connection */ + int iDb; /* The database to store the trigger in */ + Token *pName; /* The unqualified db name */ + DbFixer sFix; /* State vector for the DB fixer */ + + assert( pName1!=0 ); /* pName1->z might be NULL, but not pName1 itself */ + assert( pName2!=0 ); + assert( op==TK_INSERT || op==TK_UPDATE || op==TK_DELETE ); + assert( op>0 && op<0xff ); + if( isTemp ){ + /* If TEMP was specified, then the trigger name may not be qualified. */ + if( pName2->n>0 ){ + sqlite3ErrorMsg(pParse, "temporary trigger may not have qualified name"); + goto trigger_cleanup; + } + iDb = 1; + pName = pName1; + }else{ + /* Figure out the db that the trigger will be created in */ + iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName); + if( iDb<0 ){ + goto trigger_cleanup; + } + } + if( !pTableName || db->mallocFailed ){ + goto trigger_cleanup; + } + + /* A long-standing parser bug is that this syntax was allowed: + ** + ** CREATE TRIGGER attached.demo AFTER INSERT ON attached.tab .... + ** ^^^^^^^^ + ** + ** To maintain backwards compatibility, ignore the database + ** name on pTableName if we are reparsing out of the schema table + */ + if( db->init.busy && iDb!=1 ){ + assert( pTableName->a[0].fg.fixedSchema==0 ); + assert( pTableName->a[0].fg.isSubquery==0 ); + sqlite3DbFree(db, pTableName->a[0].u4.zDatabase); + pTableName->a[0].u4.zDatabase = 0; + } + + /* If the trigger name was unqualified, and the table is a temp table, + ** then set iDb to 1 to create the trigger in the temporary database. + ** If sqlite3SrcListLookup() returns 0, indicating the table does not + ** exist, the error is caught by the block below. + */ + pTab = sqlite3SrcListLookup(pParse, pTableName); + if( db->init.busy==0 && pName2->n==0 && pTab + && pTab->pSchema==db->aDb[1].pSchema ){ + iDb = 1; + } + + /* Ensure the table name matches database name and that the table exists */ + if( db->mallocFailed ) goto trigger_cleanup; + assert( pTableName->nSrc==1 ); + sqlite3FixInit(&sFix, pParse, iDb, "trigger", pName); + if( sqlite3FixSrcList(&sFix, pTableName) ){ + goto trigger_cleanup; + } + pTab = sqlite3SrcListLookup(pParse, pTableName); + if( !pTab ){ + /* The table does not exist. */ + goto trigger_orphan_error; + } + if( IsVirtual(pTab) ){ + sqlite3ErrorMsg(pParse, "cannot create triggers on virtual tables"); + goto trigger_orphan_error; + } + if( (pTab->tabFlags & TF_Shadow)!=0 && sqlite3ReadOnlyShadowTables(db) ){ + sqlite3ErrorMsg(pParse, "cannot create triggers on shadow tables"); + goto trigger_orphan_error; + } + + /* Check that the trigger name is not reserved and that no trigger of the + ** specified name exists */ + zName = sqlite3NameFromToken(db, pName); + if( zName==0 ){ + assert( db->mallocFailed ); + goto trigger_cleanup; + } + if( sqlite3CheckObjectName(pParse, zName, "trigger", pTab->zName) ){ + goto trigger_cleanup; + } + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + if( !IN_RENAME_OBJECT ){ + if( sqlite3HashFind(&(db->aDb[iDb].pSchema->trigHash),zName) ){ + if( !noErr ){ + sqlite3ErrorMsg(pParse, "trigger %T already exists", pName); + }else{ + assert( !db->init.busy ); + sqlite3CodeVerifySchema(pParse, iDb); + VVA_ONLY( pParse->ifNotExists = 1; ) + } + goto trigger_cleanup; + } + } + + /* Do not create a trigger on a system table */ + if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 ){ + sqlite3ErrorMsg(pParse, "cannot create trigger on system table"); + goto trigger_cleanup; + } + + /* INSTEAD of triggers are only for views and views only support INSTEAD + ** of triggers. + */ + if( IsView(pTab) && tr_tm!=TK_INSTEAD ){ + sqlite3ErrorMsg(pParse, "cannot create %s trigger on view: %S", + (tr_tm == TK_BEFORE)?"BEFORE":"AFTER", pTableName->a); + goto trigger_orphan_error; + } + if( !IsView(pTab) && tr_tm==TK_INSTEAD ){ + sqlite3ErrorMsg(pParse, "cannot create INSTEAD OF" + " trigger on table: %S", pTableName->a); + goto trigger_orphan_error; + } + +#ifndef SQLITE_OMIT_AUTHORIZATION + if( !IN_RENAME_OBJECT ){ + int iTabDb = sqlite3SchemaToIndex(db, pTab->pSchema); + int code = SQLITE_CREATE_TRIGGER; + const char *zDb = db->aDb[iTabDb].zDbSName; + const char *zDbTrig = isTemp ? db->aDb[1].zDbSName : zDb; + if( iTabDb==1 || isTemp ) code = SQLITE_CREATE_TEMP_TRIGGER; + if( sqlite3AuthCheck(pParse, code, zName, pTab->zName, zDbTrig) ){ + goto trigger_cleanup; + } + if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iTabDb),0,zDb)){ + goto trigger_cleanup; + } + } +#endif + + /* INSTEAD OF triggers can only appear on views and BEFORE triggers + ** cannot appear on views. So we might as well translate every + ** INSTEAD OF trigger into a BEFORE trigger. It simplifies code + ** elsewhere. + */ + if (tr_tm == TK_INSTEAD){ + tr_tm = TK_BEFORE; + } + + /* Build the Trigger object */ + pTrigger = (Trigger*)sqlite3DbMallocZero(db, sizeof(Trigger)); + if( pTrigger==0 ) goto trigger_cleanup; + pTrigger->zName = zName; + zName = 0; + pTrigger->table = sqlite3DbStrDup(db, pTableName->a[0].zName); + pTrigger->pSchema = db->aDb[iDb].pSchema; + pTrigger->pTabSchema = pTab->pSchema; + pTrigger->op = (u8)op; + pTrigger->tr_tm = tr_tm==TK_BEFORE ? TRIGGER_BEFORE : TRIGGER_AFTER; + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, pTrigger->table, pTableName->a[0].zName); + pTrigger->pWhen = pWhen; + pWhen = 0; + }else{ + pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE); + } + pTrigger->pColumns = pColumns; + pColumns = 0; + assert( pParse->pNewTrigger==0 ); + pParse->pNewTrigger = pTrigger; + +trigger_cleanup: + sqlite3DbFree(db, zName); + sqlite3SrcListDelete(db, pTableName); + sqlite3IdListDelete(db, pColumns); + sqlite3ExprDelete(db, pWhen); + if( !pParse->pNewTrigger ){ + sqlite3DeleteTrigger(db, pTrigger); + }else{ + assert( pParse->pNewTrigger==pTrigger ); + } + return; + +trigger_orphan_error: + if( db->init.iDb==1 ){ + /* Ticket #3810. + ** Normally, whenever a table is dropped, all associated triggers are + ** dropped too. But if a TEMP trigger is created on a non-TEMP table + ** and the table is dropped by a different database connection, the + ** trigger is not visible to the database connection that does the + ** drop so the trigger cannot be dropped. This results in an + ** "orphaned trigger" - a trigger whose associated table is missing. + ** + ** 2020-11-05 see also https://sqlite.org/forum/forumpost/157dc791df + */ + db->init.orphanTrigger = 1; + } + goto trigger_cleanup; +} + +/* +** This routine is called after all of the trigger actions have been parsed +** in order to complete the process of building the trigger. +*/ +SQLITE_PRIVATE void sqlite3FinishTrigger( + Parse *pParse, /* Parser context */ + TriggerStep *pStepList, /* The triggered program */ + Token *pAll /* Token that describes the complete CREATE TRIGGER */ +){ + Trigger *pTrig = pParse->pNewTrigger; /* Trigger being finished */ + char *zName; /* Name of trigger */ + sqlite3 *db = pParse->db; /* The database */ + DbFixer sFix; /* Fixer object */ + int iDb; /* Database containing the trigger */ + Token nameToken; /* Trigger name for error reporting */ + + pParse->pNewTrigger = 0; + if( NEVER(pParse->nErr) || !pTrig ) goto triggerfinish_cleanup; + zName = pTrig->zName; + iDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema); + pTrig->step_list = pStepList; + while( pStepList ){ + pStepList->pTrig = pTrig; + pStepList = pStepList->pNext; + } + sqlite3TokenInit(&nameToken, pTrig->zName); + sqlite3FixInit(&sFix, pParse, iDb, "trigger", &nameToken); + if( sqlite3FixTriggerStep(&sFix, pTrig->step_list) + || sqlite3FixExpr(&sFix, pTrig->pWhen) + ){ + goto triggerfinish_cleanup; + } + +#ifndef SQLITE_OMIT_ALTERTABLE + if( IN_RENAME_OBJECT ){ + assert( !db->init.busy ); + pParse->pNewTrigger = pTrig; + pTrig = 0; + }else +#endif + + /* if we are not initializing, + ** build the sqlite_schema entry + */ + if( !db->init.busy ){ + Vdbe *v; + char *z; + + /* If this is a new CREATE TABLE statement, and if shadow tables + ** are read-only, and the trigger makes a change to a shadow table, + ** then raise an error - do not allow the trigger to be created. */ + if( sqlite3ReadOnlyShadowTables(db) ){ + TriggerStep *pStep; + for(pStep=pTrig->step_list; pStep; pStep=pStep->pNext){ + if( pStep->zTarget!=0 + && sqlite3ShadowTableName(db, pStep->zTarget) + ){ + sqlite3ErrorMsg(pParse, + "trigger \"%s\" may not write to shadow table \"%s\"", + pTrig->zName, pStep->zTarget); + goto triggerfinish_cleanup; + } + } + } + + /* Make an entry in the sqlite_schema table */ + v = sqlite3GetVdbe(pParse); + if( v==0 ) goto triggerfinish_cleanup; + sqlite3BeginWriteOperation(pParse, 0, iDb); + z = sqlite3DbStrNDup(db, (char*)pAll->z, pAll->n); + testcase( z==0 ); + sqlite3NestedParse(pParse, + "INSERT INTO %Q." LEGACY_SCHEMA_TABLE + " VALUES('trigger',%Q,%Q,0,'CREATE TRIGGER %q')", + db->aDb[iDb].zDbSName, zName, + pTrig->table, z); + sqlite3DbFree(db, z); + sqlite3ChangeCookie(pParse, iDb); + sqlite3VdbeAddParseSchemaOp(v, iDb, + sqlite3MPrintf(db, "type='trigger' AND name='%q'", zName), 0); + } + + if( db->init.busy ){ + Trigger *pLink = pTrig; + Hash *pHash = &db->aDb[iDb].pSchema->trigHash; + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + assert( pLink!=0 ); + pTrig = sqlite3HashInsert(pHash, zName, pTrig); + if( pTrig ){ + sqlite3OomFault(db); + }else if( pLink->pSchema==pLink->pTabSchema ){ + Table *pTab; + pTab = sqlite3HashFind(&pLink->pTabSchema->tblHash, pLink->table); + assert( pTab!=0 ); + pLink->pNext = pTab->pTrigger; + pTab->pTrigger = pLink; + } + } + +triggerfinish_cleanup: + sqlite3DeleteTrigger(db, pTrig); + assert( IN_RENAME_OBJECT || !pParse->pNewTrigger ); + sqlite3DeleteTriggerStep(db, pStepList); +} + +/* +** Duplicate a range of text from an SQL statement, then convert all +** whitespace characters into ordinary space characters. +*/ +static char *triggerSpanDup(sqlite3 *db, const char *zStart, const char *zEnd){ + char *z = sqlite3DbSpanDup(db, zStart, zEnd); + int i; + if( z ) for(i=0; z[i]; i++) if( sqlite3Isspace(z[i]) ) z[i] = ' '; + return z; +} + +/* +** Turn a SELECT statement (that the pSelect parameter points to) into +** a trigger step. Return a pointer to a TriggerStep structure. +** +** The parser calls this routine when it finds a SELECT statement in +** body of a TRIGGER. +*/ +SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep( + sqlite3 *db, /* Database connection */ + Select *pSelect, /* The SELECT statement */ + const char *zStart, /* Start of SQL text */ + const char *zEnd /* End of SQL text */ +){ + TriggerStep *pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep)); + if( pTriggerStep==0 ) { + sqlite3SelectDelete(db, pSelect); + return 0; + } + pTriggerStep->op = TK_SELECT; + pTriggerStep->pSelect = pSelect; + pTriggerStep->orconf = OE_Default; + pTriggerStep->zSpan = triggerSpanDup(db, zStart, zEnd); + return pTriggerStep; +} + +/* +** Allocate space to hold a new trigger step. The allocated space +** holds both the TriggerStep object and the TriggerStep.target.z string. +** +** If an OOM error occurs, NULL is returned and db->mallocFailed is set. +*/ +static TriggerStep *triggerStepAllocate( + Parse *pParse, /* Parser context */ + u8 op, /* Trigger opcode */ + Token *pName, /* The target name */ + const char *zStart, /* Start of SQL text */ + const char *zEnd /* End of SQL text */ +){ + sqlite3 *db = pParse->db; + TriggerStep *pTriggerStep; + + if( pParse->nErr ) return 0; + pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep) + pName->n + 1); + if( pTriggerStep ){ + char *z = (char*)&pTriggerStep[1]; + memcpy(z, pName->z, pName->n); + sqlite3Dequote(z); + pTriggerStep->zTarget = z; + pTriggerStep->op = op; + pTriggerStep->zSpan = triggerSpanDup(db, zStart, zEnd); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenMap(pParse, pTriggerStep->zTarget, pName); + } + } + return pTriggerStep; +} + +/* +** Build a trigger step out of an INSERT statement. Return a pointer +** to the new trigger step. +** +** The parser calls this routine when it sees an INSERT inside the +** body of a trigger. +*/ +SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep( + Parse *pParse, /* Parser */ + Token *pTableName, /* Name of the table into which we insert */ + IdList *pColumn, /* List of columns in pTableName to insert into */ + Select *pSelect, /* A SELECT statement that supplies values */ + u8 orconf, /* The conflict algorithm (OE_Abort, OE_Replace, etc.) */ + Upsert *pUpsert, /* ON CONFLICT clauses for upsert */ + const char *zStart, /* Start of SQL text */ + const char *zEnd /* End of SQL text */ +){ + sqlite3 *db = pParse->db; + TriggerStep *pTriggerStep; + + assert(pSelect != 0 || db->mallocFailed); + + pTriggerStep = triggerStepAllocate(pParse, TK_INSERT, pTableName,zStart,zEnd); + if( pTriggerStep ){ + if( IN_RENAME_OBJECT ){ + pTriggerStep->pSelect = pSelect; + pSelect = 0; + }else{ + pTriggerStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); + } + pTriggerStep->pIdList = pColumn; + pTriggerStep->pUpsert = pUpsert; + pTriggerStep->orconf = orconf; + if( pUpsert ){ + sqlite3HasExplicitNulls(pParse, pUpsert->pUpsertTarget); + } + }else{ + testcase( pColumn ); + sqlite3IdListDelete(db, pColumn); + testcase( pUpsert ); + sqlite3UpsertDelete(db, pUpsert); + } + sqlite3SelectDelete(db, pSelect); + + return pTriggerStep; +} + +/* +** Construct a trigger step that implements an UPDATE statement and return +** a pointer to that trigger step. The parser calls this routine when it +** sees an UPDATE statement inside the body of a CREATE TRIGGER. +*/ +SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep( + Parse *pParse, /* Parser */ + Token *pTableName, /* Name of the table to be updated */ + SrcList *pFrom, /* FROM clause for an UPDATE-FROM, or NULL */ + ExprList *pEList, /* The SET clause: list of column and new values */ + Expr *pWhere, /* The WHERE clause */ + u8 orconf, /* The conflict algorithm. (OE_Abort, OE_Ignore, etc) */ + const char *zStart, /* Start of SQL text */ + const char *zEnd /* End of SQL text */ +){ + sqlite3 *db = pParse->db; + TriggerStep *pTriggerStep; + + pTriggerStep = triggerStepAllocate(pParse, TK_UPDATE, pTableName,zStart,zEnd); + if( pTriggerStep ){ + if( IN_RENAME_OBJECT ){ + pTriggerStep->pExprList = pEList; + pTriggerStep->pWhere = pWhere; + pTriggerStep->pFrom = pFrom; + pEList = 0; + pWhere = 0; + pFrom = 0; + }else{ + pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE); + pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); + pTriggerStep->pFrom = sqlite3SrcListDup(db, pFrom, EXPRDUP_REDUCE); + } + pTriggerStep->orconf = orconf; + } + sqlite3ExprListDelete(db, pEList); + sqlite3ExprDelete(db, pWhere); + sqlite3SrcListDelete(db, pFrom); + return pTriggerStep; +} + +/* +** Construct a trigger step that implements a DELETE statement and return +** a pointer to that trigger step. The parser calls this routine when it +** sees a DELETE statement inside the body of a CREATE TRIGGER. +*/ +SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep( + Parse *pParse, /* Parser */ + Token *pTableName, /* The table from which rows are deleted */ + Expr *pWhere, /* The WHERE clause */ + const char *zStart, /* Start of SQL text */ + const char *zEnd /* End of SQL text */ +){ + sqlite3 *db = pParse->db; + TriggerStep *pTriggerStep; + + pTriggerStep = triggerStepAllocate(pParse, TK_DELETE, pTableName,zStart,zEnd); + if( pTriggerStep ){ + if( IN_RENAME_OBJECT ){ + pTriggerStep->pWhere = pWhere; + pWhere = 0; + }else{ + pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); + } + pTriggerStep->orconf = OE_Default; + } + sqlite3ExprDelete(db, pWhere); + return pTriggerStep; +} + +/* +** Recursively delete a Trigger structure +*/ +SQLITE_PRIVATE void sqlite3DeleteTrigger(sqlite3 *db, Trigger *pTrigger){ + if( pTrigger==0 || pTrigger->bReturning ) return; + sqlite3DeleteTriggerStep(db, pTrigger->step_list); + sqlite3DbFree(db, pTrigger->zName); + sqlite3DbFree(db, pTrigger->table); + sqlite3ExprDelete(db, pTrigger->pWhen); + sqlite3IdListDelete(db, pTrigger->pColumns); + sqlite3DbFree(db, pTrigger); +} + +/* +** This function is called to drop a trigger from the database schema. +** +** This may be called directly from the parser and therefore identifies +** the trigger by name. The sqlite3DropTriggerPtr() routine does the +** same job as this routine except it takes a pointer to the trigger +** instead of the trigger name. +**/ +SQLITE_PRIVATE void sqlite3DropTrigger(Parse *pParse, SrcList *pName, int noErr){ + Trigger *pTrigger = 0; + int i; + const char *zDb; + const char *zName; + sqlite3 *db = pParse->db; + + if( db->mallocFailed ) goto drop_trigger_cleanup; + if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){ + goto drop_trigger_cleanup; + } + + assert( pName->nSrc==1 ); + assert( pName->a[0].fg.fixedSchema==0 && pName->a[0].fg.isSubquery==0 ); + zDb = pName->a[0].u4.zDatabase; + zName = pName->a[0].zName; + assert( zDb!=0 || sqlite3BtreeHoldsAllMutexes(db) ); + for(i=OMIT_TEMPDB; inDb; i++){ + int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */ + if( zDb && sqlite3DbIsNamed(db, j, zDb)==0 ) continue; + assert( sqlite3SchemaMutexHeld(db, j, 0) ); + pTrigger = sqlite3HashFind(&(db->aDb[j].pSchema->trigHash), zName); + if( pTrigger ) break; + } + if( !pTrigger ){ + if( !noErr ){ + sqlite3ErrorMsg(pParse, "no such trigger: %S", pName->a); + }else{ + sqlite3CodeVerifyNamedSchema(pParse, zDb); + } + pParse->checkSchema = 1; + goto drop_trigger_cleanup; + } + sqlite3DropTriggerPtr(pParse, pTrigger); + +drop_trigger_cleanup: + sqlite3SrcListDelete(db, pName); +} + +/* +** Return a pointer to the Table structure for the table that a trigger +** is set on. +*/ +static Table *tableOfTrigger(Trigger *pTrigger){ + return sqlite3HashFind(&pTrigger->pTabSchema->tblHash, pTrigger->table); +} + + +/* +** Drop a trigger given a pointer to that trigger. +*/ +SQLITE_PRIVATE void sqlite3DropTriggerPtr(Parse *pParse, Trigger *pTrigger){ + Table *pTable; + Vdbe *v; + sqlite3 *db = pParse->db; + int iDb; + + iDb = sqlite3SchemaToIndex(pParse->db, pTrigger->pSchema); + assert( iDb>=0 && iDbnDb ); + pTable = tableOfTrigger(pTrigger); + assert( (pTable && pTable->pSchema==pTrigger->pSchema) || iDb==1 ); +#ifndef SQLITE_OMIT_AUTHORIZATION + if( pTable ){ + int code = SQLITE_DROP_TRIGGER; + const char *zDb = db->aDb[iDb].zDbSName; + const char *zTab = SCHEMA_TABLE(iDb); + if( iDb==1 ) code = SQLITE_DROP_TEMP_TRIGGER; + if( sqlite3AuthCheck(pParse, code, pTrigger->zName, pTable->zName, zDb) || + sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){ + return; + } + } +#endif + + /* Generate code to destroy the database record of the trigger. + */ + if( (v = sqlite3GetVdbe(pParse))!=0 ){ + sqlite3NestedParse(pParse, + "DELETE FROM %Q." LEGACY_SCHEMA_TABLE " WHERE name=%Q AND type='trigger'", + db->aDb[iDb].zDbSName, pTrigger->zName + ); + sqlite3ChangeCookie(pParse, iDb); + sqlite3VdbeAddOp4(v, OP_DropTrigger, iDb, 0, 0, pTrigger->zName, 0); + } +} + +/* +** Remove a trigger from the hash tables of the sqlite* pointer. +*/ +SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTrigger(sqlite3 *db, int iDb, const char *zName){ + Trigger *pTrigger; + Hash *pHash; + + assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); + pHash = &(db->aDb[iDb].pSchema->trigHash); + pTrigger = sqlite3HashInsert(pHash, zName, 0); + if( ALWAYS(pTrigger) ){ + if( pTrigger->pSchema==pTrigger->pTabSchema ){ + Table *pTab = tableOfTrigger(pTrigger); + if( pTab ){ + Trigger **pp; + for(pp=&pTab->pTrigger; *pp; pp=&((*pp)->pNext)){ + if( *pp==pTrigger ){ + *pp = (*pp)->pNext; + break; + } + } + } + } + sqlite3DeleteTrigger(db, pTrigger); + db->mDbFlags |= DBFLAG_SchemaChange; + } +} + +/* +** pEList is the SET clause of an UPDATE statement. Each entry +** in pEList is of the format =. If any of the entries +** in pEList have an which matches an identifier in pIdList, +** then return TRUE. If pIdList==NULL, then it is considered a +** wildcard that matches anything. Likewise if pEList==NULL then +** it matches anything so always return true. Return false only +** if there is no match. +*/ +static int checkColumnOverlap(IdList *pIdList, ExprList *pEList){ + int e; + if( pIdList==0 || NEVER(pEList==0) ) return 1; + for(e=0; enExpr; e++){ + if( sqlite3IdListIndex(pIdList, pEList->a[e].zEName)>=0 ) return 1; + } + return 0; +} + +/* +** Return true if any TEMP triggers exist +*/ +static int tempTriggersExist(sqlite3 *db){ + if( NEVER(db->aDb[1].pSchema==0) ) return 0; + if( sqliteHashFirst(&db->aDb[1].pSchema->trigHash)==0 ) return 0; + return 1; +} + +/* +** Return a list of all triggers on table pTab if there exists at least +** one trigger that must be fired when an operation of type 'op' is +** performed on the table, and, if that operation is an UPDATE, if at +** least one of the columns in pChanges is being modified. +*/ +static SQLITE_NOINLINE Trigger *triggersReallyExist( + Parse *pParse, /* Parse context */ + Table *pTab, /* The table the contains the triggers */ + int op, /* one of TK_DELETE, TK_INSERT, TK_UPDATE */ + ExprList *pChanges, /* Columns that change in an UPDATE statement */ + int *pMask /* OUT: Mask of TRIGGER_BEFORE|TRIGGER_AFTER */ +){ + int mask = 0; + Trigger *pList = 0; + Trigger *p; + + pList = sqlite3TriggerList(pParse, pTab); + assert( pList==0 || IsVirtual(pTab)==0 + || (pList->bReturning && pList->pNext==0) ); + if( pList!=0 ){ + p = pList; + if( (pParse->db->flags & SQLITE_EnableTrigger)==0 + && pTab->pTrigger!=0 + ){ + /* The SQLITE_DBCONFIG_ENABLE_TRIGGER setting is off. That means that + ** only TEMP triggers are allowed. Truncate the pList so that it + ** includes only TEMP triggers */ + if( pList==pTab->pTrigger ){ + pList = 0; + goto exit_triggers_exist; + } + while( ALWAYS(p->pNext) && p->pNext!=pTab->pTrigger ) p = p->pNext; + p->pNext = 0; + p = pList; + } + do{ + if( p->op==op && checkColumnOverlap(p->pColumns, pChanges) ){ + mask |= p->tr_tm; + }else if( p->op==TK_RETURNING ){ + /* The first time a RETURNING trigger is seen, the "op" value tells + ** us what time of trigger it should be. */ + assert( sqlite3IsToplevel(pParse) ); + p->op = op; + if( IsVirtual(pTab) ){ + if( op!=TK_INSERT ){ + sqlite3ErrorMsg(pParse, + "%s RETURNING is not available on virtual tables", + op==TK_DELETE ? "DELETE" : "UPDATE"); + } + p->tr_tm = TRIGGER_BEFORE; + }else{ + p->tr_tm = TRIGGER_AFTER; + } + mask |= p->tr_tm; + }else if( p->bReturning && p->op==TK_INSERT && op==TK_UPDATE + && sqlite3IsToplevel(pParse) ){ + /* Also fire a RETURNING trigger for an UPSERT */ + mask |= p->tr_tm; + } + p = p->pNext; + }while( p ); + } +exit_triggers_exist: + if( pMask ){ + *pMask = mask; + } + return (mask ? pList : 0); +} +SQLITE_PRIVATE Trigger *sqlite3TriggersExist( + Parse *pParse, /* Parse context */ + Table *pTab, /* The table the contains the triggers */ + int op, /* one of TK_DELETE, TK_INSERT, TK_UPDATE */ + ExprList *pChanges, /* Columns that change in an UPDATE statement */ + int *pMask /* OUT: Mask of TRIGGER_BEFORE|TRIGGER_AFTER */ +){ + assert( pTab!=0 ); + if( (pTab->pTrigger==0 && !tempTriggersExist(pParse->db)) + || pParse->disableTriggers + ){ + if( pMask ) *pMask = 0; + return 0; + } + return triggersReallyExist(pParse,pTab,op,pChanges,pMask); +} + +/* +** Convert the pStep->zTarget string into a SrcList and return a pointer +** to that SrcList. +** +** This routine adds a specific database name, if needed, to the target when +** forming the SrcList. This prevents a trigger in one database from +** referring to a target in another database. An exception is when the +** trigger is in TEMP in which case it can refer to any other database it +** wants. +*/ +SQLITE_PRIVATE SrcList *sqlite3TriggerStepSrc( + Parse *pParse, /* The parsing context */ + TriggerStep *pStep /* The trigger containing the target token */ +){ + sqlite3 *db = pParse->db; + SrcList *pSrc; /* SrcList to be returned */ + char *zName = sqlite3DbStrDup(db, pStep->zTarget); + pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0); + assert( pSrc==0 || pSrc->nSrc==1 ); + assert( zName || pSrc==0 ); + if( pSrc ){ + Schema *pSchema = pStep->pTrig->pSchema; + pSrc->a[0].zName = zName; + if( pSchema!=db->aDb[1].pSchema ){ + assert( pSrc->a[0].fg.fixedSchema || pSrc->a[0].u4.zDatabase==0 ); + pSrc->a[0].u4.pSchema = pSchema; + pSrc->a[0].fg.fixedSchema = 1; + } + if( pStep->pFrom ){ + SrcList *pDup = sqlite3SrcListDup(db, pStep->pFrom, 0); + if( pDup && pDup->nSrc>1 && !IN_RENAME_OBJECT ){ + Select *pSubquery; + Token as; + pSubquery = sqlite3SelectNew(pParse,0,pDup,0,0,0,0,SF_NestedFrom,0); + as.n = 0; + as.z = 0; + pDup = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&as,pSubquery,0); + } + pSrc = sqlite3SrcListAppendList(pParse, pSrc, pDup); + } + }else{ + sqlite3DbFree(db, zName); + } + return pSrc; +} + +/* +** Return true if the pExpr term from the RETURNING clause argument +** list is of the form "*". Raise an error if the terms if of the +** form "table.*". +*/ +static int isAsteriskTerm( + Parse *pParse, /* Parsing context */ + Expr *pTerm /* A term in the RETURNING clause */ +){ + assert( pTerm!=0 ); + if( pTerm->op==TK_ASTERISK ) return 1; + if( pTerm->op!=TK_DOT ) return 0; + assert( pTerm->pRight!=0 ); + assert( pTerm->pLeft!=0 ); + if( pTerm->pRight->op!=TK_ASTERISK ) return 0; + sqlite3ErrorMsg(pParse, "RETURNING may not use \"TABLE.*\" wildcards"); + return 1; +} + +/* The input list pList is the list of result set terms from a RETURNING +** clause. The table that we are returning from is pTab. +** +** This routine makes a copy of the pList, and at the same time expands +** any "*" wildcards to be the complete set of columns from pTab. +*/ +static ExprList *sqlite3ExpandReturning( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* The arguments to RETURNING */ + Table *pTab /* The table being updated */ +){ + ExprList *pNew = 0; + sqlite3 *db = pParse->db; + int i; + + for(i=0; inExpr; i++){ + Expr *pOldExpr = pList->a[i].pExpr; + if( NEVER(pOldExpr==0) ) continue; + if( isAsteriskTerm(pParse, pOldExpr) ){ + int jj; + for(jj=0; jjnCol; jj++){ + Expr *pNewExpr; + if( IsHiddenColumn(pTab->aCol+jj) ) continue; + pNewExpr = sqlite3Expr(db, TK_ID, pTab->aCol[jj].zCnName); + pNew = sqlite3ExprListAppend(pParse, pNew, pNewExpr); + if( !db->mallocFailed ){ + struct ExprList_item *pItem = &pNew->a[pNew->nExpr-1]; + pItem->zEName = sqlite3DbStrDup(db, pTab->aCol[jj].zCnName); + pItem->fg.eEName = ENAME_NAME; + } + } + }else{ + Expr *pNewExpr = sqlite3ExprDup(db, pOldExpr, 0); + pNew = sqlite3ExprListAppend(pParse, pNew, pNewExpr); + if( !db->mallocFailed && ALWAYS(pList->a[i].zEName!=0) ){ + struct ExprList_item *pItem = &pNew->a[pNew->nExpr-1]; + pItem->zEName = sqlite3DbStrDup(db, pList->a[i].zEName); + pItem->fg.eEName = pList->a[i].fg.eEName; + } + } + } + return pNew; +} + +/* If the Expr node is a subquery or an EXISTS operator or an IN operator that +** uses a subquery, and if the subquery is SF_Correlated, then mark the +** expression as EP_VarSelect. +*/ +static int sqlite3ReturningSubqueryVarSelect(Walker *NotUsed, Expr *pExpr){ + UNUSED_PARAMETER(NotUsed); + if( ExprUseXSelect(pExpr) + && (pExpr->x.pSelect->selFlags & SF_Correlated)!=0 + ){ + testcase( ExprHasProperty(pExpr, EP_VarSelect) ); + ExprSetProperty(pExpr, EP_VarSelect); + } + return WRC_Continue; +} + + +/* +** If the SELECT references the table pWalker->u.pTab, then do two things: +** +** (1) Mark the SELECT as as SF_Correlated. +** (2) Set pWalker->eCode to non-zero so that the caller will know +** that (1) has happened. +*/ +static int sqlite3ReturningSubqueryCorrelated(Walker *pWalker, Select *pSelect){ + int i; + SrcList *pSrc; + assert( pSelect!=0 ); + pSrc = pSelect->pSrc; + assert( pSrc!=0 ); + for(i=0; inSrc; i++){ + if( pSrc->a[i].pSTab==pWalker->u.pTab ){ + testcase( pSelect->selFlags & SF_Correlated ); + pSelect->selFlags |= SF_Correlated; + pWalker->eCode = 1; + break; + } + } + return WRC_Continue; +} + +/* +** Scan the expression list that is the argument to RETURNING looking +** for subqueries that depend on the table which is being modified in the +** statement that is hosting the RETURNING clause (pTab). Mark all such +** subqueries as SF_Correlated. If the subqueries are part of an +** expression, mark the expression as EP_VarSelect. +** +** https://sqlite.org/forum/forumpost/2c83569ce8945d39 +*/ +static void sqlite3ProcessReturningSubqueries( + ExprList *pEList, + Table *pTab +){ + Walker w; + memset(&w, 0, sizeof(w)); + w.xExprCallback = sqlite3ExprWalkNoop; + w.xSelectCallback = sqlite3ReturningSubqueryCorrelated; + w.u.pTab = pTab; + sqlite3WalkExprList(&w, pEList); + if( w.eCode ){ + w.xExprCallback = sqlite3ReturningSubqueryVarSelect; + w.xSelectCallback = sqlite3SelectWalkNoop; + sqlite3WalkExprList(&w, pEList); + } +} + +/* +** Generate code for the RETURNING trigger. Unlike other triggers +** that invoke a subprogram in the bytecode, the code for RETURNING +** is generated in-line. +*/ +static void codeReturningTrigger( + Parse *pParse, /* Parse context */ + Trigger *pTrigger, /* The trigger step that defines the RETURNING */ + Table *pTab, /* The table to code triggers from */ + int regIn /* The first in an array of registers */ +){ + Vdbe *v = pParse->pVdbe; + sqlite3 *db = pParse->db; + ExprList *pNew; + Returning *pReturning; + Select sSelect; + SrcList *pFrom; + union { + SrcList sSrc; + u8 fromSpace[SZ_SRCLIST_1]; + } uSrc; + + assert( v!=0 ); + if( !pParse->bReturning ){ + /* This RETURNING trigger must be for a different statement as + ** this statement lacks a RETURNING clause. */ + return; + } + assert( db->pParse==pParse ); + assert( !pParse->isCreate ); + pReturning = pParse->u1.d.pReturning; + if( pTrigger != &(pReturning->retTrig) ){ + /* This RETURNING trigger is for a different statement */ + return; + } + memset(&sSelect, 0, sizeof(sSelect)); + memset(&uSrc, 0, sizeof(uSrc)); + pFrom = &uSrc.sSrc; + sSelect.pEList = sqlite3ExprListDup(db, pReturning->pReturnEL, 0); + sSelect.pSrc = pFrom; + pFrom->nSrc = 1; + pFrom->a[0].pSTab = pTab; + pFrom->a[0].zName = pTab->zName; /* tag-20240424-1 */ + pFrom->a[0].iCursor = -1; + sqlite3SelectPrep(pParse, &sSelect, 0); + if( pParse->nErr==0 ){ + assert( db->mallocFailed==0 ); + sqlite3GenerateColumnNames(pParse, &sSelect); + } + sqlite3ExprListDelete(db, sSelect.pEList); + pNew = sqlite3ExpandReturning(pParse, pReturning->pReturnEL, pTab); + if( pParse->nErr==0 ){ + NameContext sNC; + memset(&sNC, 0, sizeof(sNC)); + if( pReturning->nRetCol==0 ){ + pReturning->nRetCol = pNew->nExpr; + pReturning->iRetCur = pParse->nTab++; + } + sNC.pParse = pParse; + sNC.uNC.iBaseReg = regIn; + sNC.ncFlags = NC_UBaseReg; + pParse->eTriggerOp = pTrigger->op; + pParse->pTriggerTab = pTab; + if( sqlite3ResolveExprListNames(&sNC, pNew)==SQLITE_OK + && ALWAYS(!db->mallocFailed) + ){ + int i; + int nCol = pNew->nExpr; + int reg = pParse->nMem+1; + sqlite3ProcessReturningSubqueries(pNew, pTab); + pParse->nMem += nCol+2; + pReturning->iRetReg = reg; + for(i=0; ia[i].pExpr; + assert( pCol!=0 ); /* Due to !db->mallocFailed ~9 lines above */ + sqlite3ExprCodeFactorable(pParse, pCol, reg+i); + if( sqlite3ExprAffinity(pCol)==SQLITE_AFF_REAL ){ + sqlite3VdbeAddOp1(v, OP_RealAffinity, reg+i); + } + } + sqlite3VdbeAddOp3(v, OP_MakeRecord, reg, i, reg+i); + sqlite3VdbeAddOp2(v, OP_NewRowid, pReturning->iRetCur, reg+i+1); + sqlite3VdbeAddOp3(v, OP_Insert, pReturning->iRetCur, reg+i, reg+i+1); + } + } + sqlite3ExprListDelete(db, pNew); + pParse->eTriggerOp = 0; + pParse->pTriggerTab = 0; +} + + + +/* +** Generate VDBE code for the statements inside the body of a single +** trigger. +*/ +static int codeTriggerProgram( + Parse *pParse, /* The parser context */ + TriggerStep *pStepList, /* List of statements inside the trigger body */ + int orconf /* Conflict algorithm. (OE_Abort, etc) */ +){ + TriggerStep *pStep; + Vdbe *v = pParse->pVdbe; + sqlite3 *db = pParse->db; + + assert( pParse->pTriggerTab && pParse->pToplevel ); + assert( pStepList ); + assert( v!=0 ); + for(pStep=pStepList; pStep; pStep=pStep->pNext){ + /* Figure out the ON CONFLICT policy that will be used for this step + ** of the trigger program. If the statement that caused this trigger + ** to fire had an explicit ON CONFLICT, then use it. Otherwise, use + ** the ON CONFLICT policy that was specified as part of the trigger + ** step statement. Example: + ** + ** CREATE TRIGGER AFTER INSERT ON t1 BEGIN; + ** INSERT OR REPLACE INTO t2 VALUES(new.a, new.b); + ** END; + ** + ** INSERT INTO t1 ... ; -- insert into t2 uses REPLACE policy + ** INSERT OR IGNORE INTO t1 ... ; -- insert into t2 uses IGNORE policy + */ + pParse->eOrconf = (orconf==OE_Default)?pStep->orconf:(u8)orconf; + assert( pParse->okConstFactor==0 ); + +#ifndef SQLITE_OMIT_TRACE + if( pStep->zSpan ){ + sqlite3VdbeAddOp4(v, OP_Trace, 0x7fffffff, 1, 0, + sqlite3MPrintf(db, "-- %s", pStep->zSpan), + P4_DYNAMIC); + } +#endif + + switch( pStep->op ){ + case TK_UPDATE: { + sqlite3Update(pParse, + sqlite3TriggerStepSrc(pParse, pStep), + sqlite3ExprListDup(db, pStep->pExprList, 0), + sqlite3ExprDup(db, pStep->pWhere, 0), + pParse->eOrconf, 0, 0, 0 + ); + sqlite3VdbeAddOp0(v, OP_ResetCount); + break; + } + case TK_INSERT: { + sqlite3Insert(pParse, + sqlite3TriggerStepSrc(pParse, pStep), + sqlite3SelectDup(db, pStep->pSelect, 0), + sqlite3IdListDup(db, pStep->pIdList), + pParse->eOrconf, + sqlite3UpsertDup(db, pStep->pUpsert) + ); + sqlite3VdbeAddOp0(v, OP_ResetCount); + break; + } + case TK_DELETE: { + sqlite3DeleteFrom(pParse, + sqlite3TriggerStepSrc(pParse, pStep), + sqlite3ExprDup(db, pStep->pWhere, 0), 0, 0 + ); + sqlite3VdbeAddOp0(v, OP_ResetCount); + break; + } + default: assert( pStep->op==TK_SELECT ); { + SelectDest sDest; + Select *pSelect = sqlite3SelectDup(db, pStep->pSelect, 0); + sqlite3SelectDestInit(&sDest, SRT_Discard, 0); + sqlite3Select(pParse, pSelect, &sDest); + sqlite3SelectDelete(db, pSelect); + break; + } + } + } + + return 0; +} + +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS +/* +** This function is used to add VdbeComment() annotations to a VDBE +** program. It is not used in production code, only for debugging. +*/ +static const char *onErrorText(int onError){ + switch( onError ){ + case OE_Abort: return "abort"; + case OE_Rollback: return "rollback"; + case OE_Fail: return "fail"; + case OE_Replace: return "replace"; + case OE_Ignore: return "ignore"; + case OE_Default: return "default"; + } + return "n/a"; +} +#endif + +/* +** Parse context structure pFrom has just been used to create a sub-vdbe +** (trigger program). If an error has occurred, transfer error information +** from pFrom to pTo. +*/ +static void transferParseError(Parse *pTo, Parse *pFrom){ + assert( pFrom->zErrMsg==0 || pFrom->nErr ); + assert( pTo->zErrMsg==0 || pTo->nErr ); + if( pTo->nErr==0 ){ + pTo->zErrMsg = pFrom->zErrMsg; + pTo->nErr = pFrom->nErr; + pTo->rc = pFrom->rc; + }else{ + sqlite3DbFree(pFrom->db, pFrom->zErrMsg); + } +} + +/* +** Create and populate a new TriggerPrg object with a sub-program +** implementing trigger pTrigger with ON CONFLICT policy orconf. +*/ +static TriggerPrg *codeRowTrigger( + Parse *pParse, /* Current parse context */ + Trigger *pTrigger, /* Trigger to code */ + Table *pTab, /* The table pTrigger is attached to */ + int orconf /* ON CONFLICT policy to code trigger program with */ +){ + Parse *pTop = sqlite3ParseToplevel(pParse); + sqlite3 *db = pParse->db; /* Database handle */ + TriggerPrg *pPrg; /* Value to return */ + Expr *pWhen = 0; /* Duplicate of trigger WHEN expression */ + Vdbe *v; /* Temporary VM */ + NameContext sNC; /* Name context for sub-vdbe */ + SubProgram *pProgram = 0; /* Sub-vdbe for trigger program */ + int iEndTrigger = 0; /* Label to jump to if WHEN is false */ + Parse sSubParse; /* Parse context for sub-vdbe */ + + assert( pTrigger->zName==0 || pTab==tableOfTrigger(pTrigger) ); + assert( pTop->pVdbe ); + + /* Allocate the TriggerPrg and SubProgram objects. To ensure that they + ** are freed if an error occurs, link them into the Parse.pTriggerPrg + ** list of the top-level Parse object sooner rather than later. */ + pPrg = sqlite3DbMallocZero(db, sizeof(TriggerPrg)); + if( !pPrg ) return 0; + pPrg->pNext = pTop->pTriggerPrg; + pTop->pTriggerPrg = pPrg; + pPrg->pProgram = pProgram = sqlite3DbMallocZero(db, sizeof(SubProgram)); + if( !pProgram ) return 0; + sqlite3VdbeLinkSubProgram(pTop->pVdbe, pProgram); + pPrg->pTrigger = pTrigger; + pPrg->orconf = orconf; + pPrg->aColmask[0] = 0xffffffff; + pPrg->aColmask[1] = 0xffffffff; + + /* Allocate and populate a new Parse context to use for coding the + ** trigger sub-program. */ + sqlite3ParseObjectInit(&sSubParse, db); + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = &sSubParse; + sSubParse.pTriggerTab = pTab; + sSubParse.pToplevel = pTop; + sSubParse.zAuthContext = pTrigger->zName; + sSubParse.eTriggerOp = pTrigger->op; + sSubParse.nQueryLoop = pParse->nQueryLoop; + sSubParse.prepFlags = pParse->prepFlags; + sSubParse.oldmask = 0; + sSubParse.newmask = 0; + + v = sqlite3GetVdbe(&sSubParse); + if( v ){ + VdbeComment((v, "Start: %s.%s (%s %s%s%s ON %s)", + pTrigger->zName, onErrorText(orconf), + (pTrigger->tr_tm==TRIGGER_BEFORE ? "BEFORE" : "AFTER"), + (pTrigger->op==TK_UPDATE ? "UPDATE" : ""), + (pTrigger->op==TK_INSERT ? "INSERT" : ""), + (pTrigger->op==TK_DELETE ? "DELETE" : ""), + pTab->zName + )); +#ifndef SQLITE_OMIT_TRACE + if( pTrigger->zName ){ + sqlite3VdbeChangeP4(v, -1, + sqlite3MPrintf(db, "-- TRIGGER %s", pTrigger->zName), P4_DYNAMIC + ); + } +#endif + + /* If one was specified, code the WHEN clause. If it evaluates to false + ** (or NULL) the sub-vdbe is immediately halted by jumping to the + ** OP_Halt inserted at the end of the program. */ + if( pTrigger->pWhen ){ + pWhen = sqlite3ExprDup(db, pTrigger->pWhen, 0); + if( db->mallocFailed==0 + && SQLITE_OK==sqlite3ResolveExprNames(&sNC, pWhen) + ){ + iEndTrigger = sqlite3VdbeMakeLabel(&sSubParse); + sqlite3ExprIfFalse(&sSubParse, pWhen, iEndTrigger, SQLITE_JUMPIFNULL); + } + sqlite3ExprDelete(db, pWhen); + } + + /* Code the trigger program into the sub-vdbe. */ + codeTriggerProgram(&sSubParse, pTrigger->step_list, orconf); + + /* Insert an OP_Halt at the end of the sub-program. */ + if( iEndTrigger ){ + sqlite3VdbeResolveLabel(v, iEndTrigger); + } + sqlite3VdbeAddOp0(v, OP_Halt); + VdbeComment((v, "End: %s.%s", pTrigger->zName, onErrorText(orconf))); + transferParseError(pParse, &sSubParse); + + if( pParse->nErr==0 ){ + assert( db->mallocFailed==0 ); + pProgram->aOp = sqlite3VdbeTakeOpArray(v, &pProgram->nOp, &pTop->nMaxArg); + } + pProgram->nMem = sSubParse.nMem; + pProgram->nCsr = sSubParse.nTab; + pProgram->token = (void *)pTrigger; + pPrg->aColmask[0] = sSubParse.oldmask; + pPrg->aColmask[1] = sSubParse.newmask; + sqlite3VdbeDelete(v); + }else{ + transferParseError(pParse, &sSubParse); + } + + assert( !sSubParse.pTriggerPrg && !sSubParse.nMaxArg ); + sqlite3ParseObjectReset(&sSubParse); + return pPrg; +} + +/* +** Return a pointer to a TriggerPrg object containing the sub-program for +** trigger pTrigger with default ON CONFLICT algorithm orconf. If no such +** TriggerPrg object exists, a new object is allocated and populated before +** being returned. +*/ +static TriggerPrg *getRowTrigger( + Parse *pParse, /* Current parse context */ + Trigger *pTrigger, /* Trigger to code */ + Table *pTab, /* The table trigger pTrigger is attached to */ + int orconf /* ON CONFLICT algorithm. */ +){ + Parse *pRoot = sqlite3ParseToplevel(pParse); + TriggerPrg *pPrg; + + assert( pTrigger->zName==0 || pTab==tableOfTrigger(pTrigger) ); + + /* It may be that this trigger has already been coded (or is in the + ** process of being coded). If this is the case, then an entry with + ** a matching TriggerPrg.pTrigger field will be present somewhere + ** in the Parse.pTriggerPrg list. Search for such an entry. */ + for(pPrg=pRoot->pTriggerPrg; + pPrg && (pPrg->pTrigger!=pTrigger || pPrg->orconf!=orconf); + pPrg=pPrg->pNext + ); + + /* If an existing TriggerPrg could not be located, create a new one. */ + if( !pPrg ){ + pPrg = codeRowTrigger(pParse, pTrigger, pTab, orconf); + pParse->db->errByteOffset = -1; + } + + return pPrg; +} + +/* +** Generate code for the trigger program associated with trigger p on +** table pTab. The reg, orconf and ignoreJump parameters passed to this +** function are the same as those described in the header function for +** sqlite3CodeRowTrigger() +*/ +SQLITE_PRIVATE void sqlite3CodeRowTriggerDirect( + Parse *pParse, /* Parse context */ + Trigger *p, /* Trigger to code */ + Table *pTab, /* The table to code triggers from */ + int reg, /* Reg array containing OLD.* and NEW.* values */ + int orconf, /* ON CONFLICT policy */ + int ignoreJump /* Instruction to jump to for RAISE(IGNORE) */ +){ + Vdbe *v = sqlite3GetVdbe(pParse); /* Main VM */ + TriggerPrg *pPrg; + pPrg = getRowTrigger(pParse, p, pTab, orconf); + assert( pPrg || pParse->nErr ); + + /* Code the OP_Program opcode in the parent VDBE. P4 of the OP_Program + ** is a pointer to the sub-vdbe containing the trigger program. */ + if( pPrg ){ + int bRecursive = (p->zName && 0==(pParse->db->flags&SQLITE_RecTriggers)); + + sqlite3VdbeAddOp4(v, OP_Program, reg, ignoreJump, ++pParse->nMem, + (const char *)pPrg->pProgram, P4_SUBPROGRAM); + VdbeComment( + (v, "Call: %s.%s", (p->zName?p->zName:"fkey"), onErrorText(orconf))); + + /* Set the P5 operand of the OP_Program instruction to non-zero if + ** recursive invocation of this trigger program is disallowed. Recursive + ** invocation is disallowed if (a) the sub-program is really a trigger, + ** not a foreign key action, and (b) the flag to enable recursive triggers + ** is clear. */ + sqlite3VdbeChangeP5(v, (u16)bRecursive); + } +} + +/* +** This is called to code the required FOR EACH ROW triggers for an operation +** on table pTab. The operation to code triggers for (INSERT, UPDATE or DELETE) +** is given by the op parameter. The tr_tm parameter determines whether the +** BEFORE or AFTER triggers are coded. If the operation is an UPDATE, then +** parameter pChanges is passed the list of columns being modified. +** +** If there are no triggers that fire at the specified time for the specified +** operation on pTab, this function is a no-op. +** +** The reg argument is the address of the first in an array of registers +** that contain the values substituted for the new.* and old.* references +** in the trigger program. If N is the number of columns in table pTab +** (a copy of pTab->nCol), then registers are populated as follows: +** +** Register Contains +** ------------------------------------------------------ +** reg+0 OLD.rowid +** reg+1 OLD.* value of left-most column of pTab +** ... ... +** reg+N OLD.* value of right-most column of pTab +** reg+N+1 NEW.rowid +** reg+N+2 NEW.* value of left-most column of pTab +** ... ... +** reg+N+N+1 NEW.* value of right-most column of pTab +** +** For ON DELETE triggers, the registers containing the NEW.* values will +** never be accessed by the trigger program, so they are not allocated or +** populated by the caller (there is no data to populate them with anyway). +** Similarly, for ON INSERT triggers the values stored in the OLD.* registers +** are never accessed, and so are not allocated by the caller. So, for an +** ON INSERT trigger, the value passed to this function as parameter reg +** is not a readable register, although registers (reg+N) through +** (reg+N+N+1) are. +** +** Parameter orconf is the default conflict resolution algorithm for the +** trigger program to use (REPLACE, IGNORE etc.). Parameter ignoreJump +** is the instruction that control should jump to if a trigger program +** raises an IGNORE exception. +*/ +SQLITE_PRIVATE void sqlite3CodeRowTrigger( + Parse *pParse, /* Parse context */ + Trigger *pTrigger, /* List of triggers on table pTab */ + int op, /* One of TK_UPDATE, TK_INSERT, TK_DELETE */ + ExprList *pChanges, /* Changes list for any UPDATE OF triggers */ + int tr_tm, /* One of TRIGGER_BEFORE, TRIGGER_AFTER */ + Table *pTab, /* The table to code triggers from */ + int reg, /* The first in an array of registers (see above) */ + int orconf, /* ON CONFLICT policy */ + int ignoreJump /* Instruction to jump to for RAISE(IGNORE) */ +){ + Trigger *p; /* Used to iterate through pTrigger list */ + + assert( op==TK_UPDATE || op==TK_INSERT || op==TK_DELETE ); + assert( tr_tm==TRIGGER_BEFORE || tr_tm==TRIGGER_AFTER ); + assert( (op==TK_UPDATE)==(pChanges!=0) ); + + for(p=pTrigger; p; p=p->pNext){ + + /* Sanity checking: The schema for the trigger and for the table are + ** always defined. The trigger must be in the same schema as the table + ** or else it must be a TEMP trigger. */ + assert( p->pSchema!=0 ); + assert( p->pTabSchema!=0 ); + assert( p->pSchema==p->pTabSchema + || p->pSchema==pParse->db->aDb[1].pSchema ); + + /* Determine whether we should code this trigger. One of two choices: + ** 1. The trigger is an exact match to the current DML statement + ** 2. This is a RETURNING trigger for INSERT but we are currently + ** doing the UPDATE part of an UPSERT. + */ + if( (p->op==op || (p->bReturning && p->op==TK_INSERT && op==TK_UPDATE)) + && p->tr_tm==tr_tm + && checkColumnOverlap(p->pColumns, pChanges) + ){ + if( !p->bReturning ){ + sqlite3CodeRowTriggerDirect(pParse, p, pTab, reg, orconf, ignoreJump); + }else if( sqlite3IsToplevel(pParse) ){ + codeReturningTrigger(pParse, p, pTab, reg); + } + } + } +} + +/* +** Triggers may access values stored in the old.* or new.* pseudo-table. +** This function returns a 32-bit bitmask indicating which columns of the +** old.* or new.* tables actually are used by triggers. This information +** may be used by the caller, for example, to avoid having to load the entire +** old.* record into memory when executing an UPDATE or DELETE command. +** +** Bit 0 of the returned mask is set if the left-most column of the +** table may be accessed using an [old|new].reference. Bit 1 is set if +** the second leftmost column value is required, and so on. If there +** are more than 32 columns in the table, and at least one of the columns +** with an index greater than 32 may be accessed, 0xffffffff is returned. +** +** It is not possible to determine if the old.rowid or new.rowid column is +** accessed by triggers. The caller must always assume that it is. +** +** Parameter isNew must be either 1 or 0. If it is 0, then the mask returned +** applies to the old.* table. If 1, the new.* table. +** +** Parameter tr_tm must be a mask with one or both of the TRIGGER_BEFORE +** and TRIGGER_AFTER bits set. Values accessed by BEFORE triggers are only +** included in the returned mask if the TRIGGER_BEFORE bit is set in the +** tr_tm parameter. Similarly, values accessed by AFTER triggers are only +** included in the returned mask if the TRIGGER_AFTER bit is set in tr_tm. +*/ +SQLITE_PRIVATE u32 sqlite3TriggerColmask( + Parse *pParse, /* Parse context */ + Trigger *pTrigger, /* List of triggers on table pTab */ + ExprList *pChanges, /* Changes list for any UPDATE OF triggers */ + int isNew, /* 1 for new.* ref mask, 0 for old.* ref mask */ + int tr_tm, /* Mask of TRIGGER_BEFORE|TRIGGER_AFTER */ + Table *pTab, /* The table to code triggers from */ + int orconf /* Default ON CONFLICT policy for trigger steps */ +){ + const int op = pChanges ? TK_UPDATE : TK_DELETE; + u32 mask = 0; + Trigger *p; + + assert( isNew==1 || isNew==0 ); + if( IsView(pTab) ){ + return 0xffffffff; + } + for(p=pTrigger; p; p=p->pNext){ + if( p->op==op + && (tr_tm&p->tr_tm) + && checkColumnOverlap(p->pColumns,pChanges) + ){ + if( p->bReturning ){ + mask = 0xffffffff; + }else{ + TriggerPrg *pPrg; + pPrg = getRowTrigger(pParse, p, pTab, orconf); + if( pPrg ){ + mask |= pPrg->aColmask[isNew]; + } + } + } + } + + return mask; +} + +#endif /* !defined(SQLITE_OMIT_TRIGGER) */ + +/************** End of trigger.c *********************************************/ +/************** Begin file update.c ******************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains C code routines that are called by the parser +** to handle UPDATE statements. +*/ +/* #include "sqliteInt.h" */ + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* Forward declaration */ +static void updateVirtualTable( + Parse *pParse, /* The parsing context */ + SrcList *pSrc, /* The virtual table to be modified */ + Table *pTab, /* The virtual table */ + ExprList *pChanges, /* The columns to change in the UPDATE statement */ + Expr *pRowidExpr, /* Expression used to recompute the rowid */ + int *aXRef, /* Mapping from columns of pTab to entries in pChanges */ + Expr *pWhere, /* WHERE clause of the UPDATE statement */ + int onError /* ON CONFLICT strategy */ +); +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +/* +** The most recently coded instruction was an OP_Column to retrieve the +** i-th column of table pTab. This routine sets the P4 parameter of the +** OP_Column to the default value, if any. +** +** The default value of a column is specified by a DEFAULT clause in the +** column definition. This was either supplied by the user when the table +** was created, or added later to the table definition by an ALTER TABLE +** command. If the latter, then the row-records in the table btree on disk +** may not contain a value for the column and the default value, taken +** from the P4 parameter of the OP_Column instruction, is returned instead. +** If the former, then all row-records are guaranteed to include a value +** for the column and the P4 value is not required. +** +** Column definitions created by an ALTER TABLE command may only have +** literal default values specified: a number, null or a string. (If a more +** complicated default expression value was provided, it is evaluated +** when the ALTER TABLE is executed and one of the literal values written +** into the sqlite_schema table.) +** +** Therefore, the P4 parameter is only required if the default value for +** the column is a literal number, string or null. The sqlite3ValueFromExpr() +** function is capable of transforming these types of expressions into +** sqlite3_value objects. +** +** If column as REAL affinity and the table is an ordinary b-tree table +** (not a virtual table) then the value might have been stored as an +** integer. In that case, add an OP_RealAffinity opcode to make sure +** it has been converted into REAL. +*/ +SQLITE_PRIVATE void sqlite3ColumnDefault(Vdbe *v, Table *pTab, int i, int iReg){ + Column *pCol; + assert( pTab!=0 ); + assert( pTab->nCol>i ); + pCol = &pTab->aCol[i]; + if( pCol->iDflt ){ + sqlite3_value *pValue = 0; + u8 enc = ENC(sqlite3VdbeDb(v)); + assert( !IsView(pTab) ); + VdbeComment((v, "%s.%s", pTab->zName, pCol->zCnName)); + assert( inCol ); + sqlite3ValueFromExpr(sqlite3VdbeDb(v), + sqlite3ColumnExpr(pTab,pCol), enc, + pCol->affinity, &pValue); + if( pValue ){ + sqlite3VdbeAppendP4(v, pValue, P4_MEM); + } + } +#ifndef SQLITE_OMIT_FLOATING_POINT + if( pCol->affinity==SQLITE_AFF_REAL && !IsVirtual(pTab) ){ + sqlite3VdbeAddOp1(v, OP_RealAffinity, iReg); + } +#endif +} + +/* +** Check to see if column iCol of index pIdx references any of the +** columns defined by aXRef and chngRowid. Return true if it does +** and false if not. This is an optimization. False-positives are a +** performance degradation, but false-negatives can result in a corrupt +** index and incorrect answers. +** +** aXRef[j] will be non-negative if column j of the original table is +** being updated. chngRowid will be true if the rowid of the table is +** being updated. +*/ +static int indexColumnIsBeingUpdated( + Index *pIdx, /* The index to check */ + int iCol, /* Which column of the index to check */ + int *aXRef, /* aXRef[j]>=0 if column j is being updated */ + int chngRowid /* true if the rowid is being updated */ +){ + i16 iIdxCol = pIdx->aiColumn[iCol]; + assert( iIdxCol!=XN_ROWID ); /* Cannot index rowid */ + if( iIdxCol>=0 ){ + return aXRef[iIdxCol]>=0; + } + assert( iIdxCol==XN_EXPR ); + assert( pIdx->aColExpr!=0 ); + assert( pIdx->aColExpr->a[iCol].pExpr!=0 ); + return sqlite3ExprReferencesUpdatedColumn(pIdx->aColExpr->a[iCol].pExpr, + aXRef,chngRowid); +} + +/* +** Check to see if index pIdx is a partial index whose conditional +** expression might change values due to an UPDATE. Return true if +** the index is subject to change and false if the index is guaranteed +** to be unchanged. This is an optimization. False-positives are a +** performance degradation, but false-negatives can result in a corrupt +** index and incorrect answers. +** +** aXRef[j] will be non-negative if column j of the original table is +** being updated. chngRowid will be true if the rowid of the table is +** being updated. +*/ +static int indexWhereClauseMightChange( + Index *pIdx, /* The index to check */ + int *aXRef, /* aXRef[j]>=0 if column j is being updated */ + int chngRowid /* true if the rowid is being updated */ +){ + if( pIdx->pPartIdxWhere==0 ) return 0; + return sqlite3ExprReferencesUpdatedColumn(pIdx->pPartIdxWhere, + aXRef, chngRowid); +} + +/* +** Allocate and return a pointer to an expression of type TK_ROW with +** Expr.iColumn set to value (iCol+1). The resolver will modify the +** expression to be a TK_COLUMN reading column iCol of the first +** table in the source-list (pSrc->a[0]). +*/ +static Expr *exprRowColumn(Parse *pParse, int iCol){ + Expr *pRet = sqlite3PExpr(pParse, TK_ROW, 0, 0); + if( pRet ) pRet->iColumn = iCol+1; + return pRet; +} + +/* +** Assuming both the pLimit and pOrderBy parameters are NULL, this function +** generates VM code to run the query: +** +** SELECT , pChanges FROM pTabList WHERE pWhere +** +** and write the results to the ephemeral table already opened as cursor +** iEph. None of pChanges, pTabList or pWhere are modified or consumed by +** this function, they must be deleted by the caller. +** +** Or, if pLimit and pOrderBy are not NULL, and pTab is not a view: +** +** SELECT , pChanges FROM pTabList +** WHERE pWhere +** GROUP BY +** ORDER BY pOrderBy LIMIT pLimit +** +** If pTab is a view, the GROUP BY clause is omitted. +** +** Exactly how results are written to table iEph, and exactly what +** the in the query above are is determined by the type +** of table pTabList->a[0].pTab. +** +** If the table is a WITHOUT ROWID table, then argument pPk must be its +** PRIMARY KEY. In this case are the primary key columns +** of the table, in order. The results of the query are written to ephemeral +** table iEph as index keys, using OP_IdxInsert. +** +** If the table is actually a view, then are all columns of +** the view. The results are written to the ephemeral table iEph as records +** with automatically assigned integer keys. +** +** If the table is a virtual or ordinary intkey table, then +** is its rowid. For a virtual table, the results are written to iEph as +** records with automatically assigned integer keys For intkey tables, the +** rowid value in is used as the integer key, and the +** remaining fields make up the table record. +*/ +static void updateFromSelect( + Parse *pParse, /* Parse context */ + int iEph, /* Cursor for open eph. table */ + Index *pPk, /* PK if table 0 is WITHOUT ROWID */ + ExprList *pChanges, /* List of expressions to return */ + SrcList *pTabList, /* List of tables to select from */ + Expr *pWhere, /* WHERE clause for query */ + ExprList *pOrderBy, /* ORDER BY clause */ + Expr *pLimit /* LIMIT clause */ +){ + int i; + SelectDest dest; + Select *pSelect = 0; + ExprList *pList = 0; + ExprList *pGrp = 0; + Expr *pLimit2 = 0; + ExprList *pOrderBy2 = 0; + sqlite3 *db = pParse->db; + Table *pTab = pTabList->a[0].pSTab; + SrcList *pSrc; + Expr *pWhere2; + int eDest; + +#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT + if( pOrderBy && pLimit==0 ) { + sqlite3ErrorMsg(pParse, "ORDER BY without LIMIT on UPDATE"); + return; + } + pOrderBy2 = sqlite3ExprListDup(db, pOrderBy, 0); + pLimit2 = sqlite3ExprDup(db, pLimit, 0); +#else + UNUSED_PARAMETER(pOrderBy); + UNUSED_PARAMETER(pLimit); +#endif + + pSrc = sqlite3SrcListDup(db, pTabList, 0); + pWhere2 = sqlite3ExprDup(db, pWhere, 0); + + assert( pTabList->nSrc>1 ); + if( pSrc ){ + assert( pSrc->a[0].fg.notCte ); + pSrc->a[0].iCursor = -1; + pSrc->a[0].pSTab->nTabRef--; + pSrc->a[0].pSTab = 0; + } + if( pPk ){ + for(i=0; inKeyCol; i++){ + Expr *pNew = exprRowColumn(pParse, pPk->aiColumn[i]); +#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT + if( pLimit ){ + pGrp = sqlite3ExprListAppend(pParse, pGrp, sqlite3ExprDup(db, pNew, 0)); + } +#endif + pList = sqlite3ExprListAppend(pParse, pList, pNew); + } + eDest = IsVirtual(pTab) ? SRT_Table : SRT_Upfrom; + }else if( IsView(pTab) ){ + for(i=0; inCol; i++){ + pList = sqlite3ExprListAppend(pParse, pList, exprRowColumn(pParse, i)); + } + eDest = SRT_Table; + }else{ + eDest = IsVirtual(pTab) ? SRT_Table : SRT_Upfrom; + pList = sqlite3ExprListAppend(pParse, 0, sqlite3PExpr(pParse,TK_ROW,0,0)); +#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT + if( pLimit ){ + pGrp = sqlite3ExprListAppend(pParse, 0, sqlite3PExpr(pParse,TK_ROW,0,0)); + } +#endif + } + assert( pChanges!=0 || pParse->db->mallocFailed ); + if( pChanges ){ + for(i=0; inExpr; i++){ + pList = sqlite3ExprListAppend(pParse, pList, + sqlite3ExprDup(db, pChanges->a[i].pExpr, 0) + ); + } + } + pSelect = sqlite3SelectNew(pParse, pList, + pSrc, pWhere2, pGrp, 0, pOrderBy2, + SF_UFSrcCheck|SF_IncludeHidden|SF_UpdateFrom, pLimit2 + ); + if( pSelect ) pSelect->selFlags |= SF_OrderByReqd; + sqlite3SelectDestInit(&dest, eDest, iEph); + dest.iSDParm2 = (pPk ? pPk->nKeyCol : -1); + sqlite3Select(pParse, pSelect, &dest); + sqlite3SelectDelete(db, pSelect); +} + +/* +** Process an UPDATE statement. +** +** UPDATE OR IGNORE tbl SET a=b, c=d FROM tbl2... WHERE e<5 AND f NOT NULL; +** \_______/ \_/ \______/ \_____/ \________________/ +** onError | pChanges | pWhere +** \_______________________/ +** pTabList +*/ +SQLITE_PRIVATE void sqlite3Update( + Parse *pParse, /* The parser context */ + SrcList *pTabList, /* The table in which we should change things */ + ExprList *pChanges, /* Things to be changed */ + Expr *pWhere, /* The WHERE clause. May be null */ + int onError, /* How to handle constraint errors */ + ExprList *pOrderBy, /* ORDER BY clause. May be null */ + Expr *pLimit, /* LIMIT clause. May be null */ + Upsert *pUpsert /* ON CONFLICT clause, or null */ +){ + int i, j, k; /* Loop counters */ + Table *pTab; /* The table to be updated */ + int addrTop = 0; /* VDBE instruction address of the start of the loop */ + WhereInfo *pWInfo = 0; /* Information about the WHERE clause */ + Vdbe *v; /* The virtual database engine */ + Index *pIdx; /* For looping over indices */ + Index *pPk; /* The PRIMARY KEY index for WITHOUT ROWID tables */ + int nIdx; /* Number of indices that need updating */ + int nAllIdx; /* Total number of indexes */ + int iBaseCur; /* Base cursor number */ + int iDataCur; /* Cursor for the canonical data btree */ + int iIdxCur; /* Cursor for the first index */ + sqlite3 *db; /* The database structure */ + int *aRegIdx = 0; /* Registers for to each index and the main table */ + int *aXRef = 0; /* aXRef[i] is the index in pChanges->a[] of the + ** an expression for the i-th column of the table. + ** aXRef[i]==-1 if the i-th column is not changed. */ + u8 *aToOpen; /* 1 for tables and indices to be opened */ + u8 chngPk; /* PRIMARY KEY changed in a WITHOUT ROWID table */ + u8 chngRowid; /* Rowid changed in a normal table */ + u8 chngKey; /* Either chngPk or chngRowid */ + Expr *pRowidExpr = 0; /* Expression defining the new record number */ + int iRowidExpr = -1; /* Index of "rowid=" (or IPK) assignment in pChanges */ + AuthContext sContext; /* The authorization context */ + NameContext sNC; /* The name-context to resolve expressions in */ + int iDb; /* Database containing the table being updated */ + int eOnePass; /* ONEPASS_XXX value from where.c */ + int hasFK; /* True if foreign key processing is required */ + int labelBreak; /* Jump here to break out of UPDATE loop */ + int labelContinue; /* Jump here to continue next step of UPDATE loop */ + int flags; /* Flags for sqlite3WhereBegin() */ + +#ifndef SQLITE_OMIT_TRIGGER + int isView; /* True when updating a view (INSTEAD OF trigger) */ + Trigger *pTrigger; /* List of triggers on pTab, if required */ + int tmask; /* Mask of TRIGGER_BEFORE|TRIGGER_AFTER */ +#endif + int newmask; /* Mask of NEW.* columns accessed by BEFORE triggers */ + int iEph = 0; /* Ephemeral table holding all primary key values */ + int nKey = 0; /* Number of elements in regKey for WITHOUT ROWID */ + int aiCurOnePass[2]; /* The write cursors opened by WHERE_ONEPASS */ + int addrOpen = 0; /* Address of OP_OpenEphemeral */ + int iPk = 0; /* First of nPk cells holding PRIMARY KEY value */ + i16 nPk = 0; /* Number of components of the PRIMARY KEY */ + int bReplace = 0; /* True if REPLACE conflict resolution might happen */ + int bFinishSeek = 1; /* The OP_FinishSeek opcode is needed */ + int nChangeFrom = 0; /* If there is a FROM, pChanges->nExpr, else 0 */ + + /* Register Allocations */ + int regRowCount = 0; /* A count of rows changed */ + int regOldRowid = 0; /* The old rowid */ + int regNewRowid = 0; /* The new rowid */ + int regNew = 0; /* Content of the NEW.* table in triggers */ + int regOld = 0; /* Content of OLD.* table in triggers */ + int regRowSet = 0; /* Rowset of rows to be updated */ + int regKey = 0; /* composite PRIMARY KEY value */ + + memset(&sContext, 0, sizeof(sContext)); + db = pParse->db; + assert( db->pParse==pParse ); + if( pParse->nErr ){ + goto update_cleanup; + } + assert( db->mallocFailed==0 ); + + /* Locate the table which we want to update. + */ + pTab = sqlite3SrcListLookup(pParse, pTabList); + if( pTab==0 ) goto update_cleanup; + iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema); + + /* Figure out if we have any triggers and if the table being + ** updated is a view. + */ +#ifndef SQLITE_OMIT_TRIGGER + pTrigger = sqlite3TriggersExist(pParse, pTab, TK_UPDATE, pChanges, &tmask); + isView = IsView(pTab); + assert( pTrigger || tmask==0 ); +#else +# define pTrigger 0 +# define isView 0 +# define tmask 0 +#endif +#ifdef SQLITE_OMIT_VIEW +# undef isView +# define isView 0 +#endif + +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x10000 ){ + sqlite3TreeViewLine(0, "In sqlite3Update() at %s:%d", __FILE__, __LINE__); + sqlite3TreeViewUpdate(pParse->pWith, pTabList, pChanges, pWhere, + onError, pOrderBy, pLimit, pUpsert, pTrigger); + } +#endif + + /* If there was a FROM clause, set nChangeFrom to the number of expressions + ** in the change-list. Otherwise, set it to 0. There cannot be a FROM + ** clause if this function is being called to generate code for part of + ** an UPSERT statement. */ + nChangeFrom = (pTabList->nSrc>1) ? pChanges->nExpr : 0; + assert( nChangeFrom==0 || pUpsert==0 ); + +#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT + if( !isView && nChangeFrom==0 ){ + pWhere = sqlite3LimitWhere( + pParse, pTabList, pWhere, pOrderBy, pLimit, "UPDATE" + ); + pOrderBy = 0; + pLimit = 0; + } +#endif + + if( sqlite3ViewGetColumnNames(pParse, pTab) ){ + goto update_cleanup; + } + if( sqlite3IsReadOnly(pParse, pTab, pTrigger) ){ + goto update_cleanup; + } + + /* Allocate a cursors for the main database table and for all indices. + ** The index cursors might not be used, but if they are used they + ** need to occur right after the database cursor. So go ahead and + ** allocate enough space, just in case. + */ + iBaseCur = iDataCur = pParse->nTab++; + iIdxCur = iDataCur+1; + pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab); + testcase( pPk!=0 && pPk!=pTab->pIndex ); + for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){ + if( pPk==pIdx ){ + iDataCur = pParse->nTab; + } + pParse->nTab++; + } + if( pUpsert ){ + /* On an UPSERT, reuse the same cursors already opened by INSERT */ + iDataCur = pUpsert->iDataCur; + iIdxCur = pUpsert->iIdxCur; + pParse->nTab = iBaseCur; + } + pTabList->a[0].iCursor = iDataCur; + + /* Allocate space for aXRef[], aRegIdx[], and aToOpen[]. + ** Initialize aXRef[] and aToOpen[] to their default values. + */ + aXRef = sqlite3DbMallocRawNN(db, sizeof(int) * (pTab->nCol+nIdx+1) + nIdx+2 ); + if( aXRef==0 ) goto update_cleanup; + aRegIdx = aXRef+pTab->nCol; + aToOpen = (u8*)(aRegIdx+nIdx+1); + memset(aToOpen, 1, nIdx+1); + aToOpen[nIdx+1] = 0; + for(i=0; inCol; i++) aXRef[i] = -1; + + /* Initialize the name-context */ + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = pParse; + sNC.pSrcList = pTabList; + sNC.uNC.pUpsert = pUpsert; + sNC.ncFlags = NC_UUpsert; + + /* Begin generating code. */ + v = sqlite3GetVdbe(pParse); + if( v==0 ) goto update_cleanup; + + /* Resolve the column names in all the expressions of the + ** of the UPDATE statement. Also find the column index + ** for each column to be updated in the pChanges array. For each + ** column to be updated, make sure we have authorization to change + ** that column. + */ + chngRowid = chngPk = 0; + for(i=0; inExpr; i++){ + /* If this is an UPDATE with a FROM clause, do not resolve expressions + ** here. The call to sqlite3Select() below will do that. */ + if( nChangeFrom==0 && sqlite3ResolveExprNames(&sNC, pChanges->a[i].pExpr) ){ + goto update_cleanup; + } + j = sqlite3ColumnIndex(pTab, pChanges->a[i].zEName); + if( j>=0 ){ + if( j==pTab->iPKey ){ + chngRowid = 1; + pRowidExpr = pChanges->a[i].pExpr; + iRowidExpr = i; + }else if( pPk && (pTab->aCol[j].colFlags & COLFLAG_PRIMKEY)!=0 ){ + chngPk = 1; + } +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + else if( pTab->aCol[j].colFlags & COLFLAG_GENERATED ){ + testcase( pTab->aCol[j].colFlags & COLFLAG_VIRTUAL ); + testcase( pTab->aCol[j].colFlags & COLFLAG_STORED ); + sqlite3ErrorMsg(pParse, + "cannot UPDATE generated column \"%s\"", + pTab->aCol[j].zCnName); + goto update_cleanup; + } +#endif + aXRef[j] = i; + }else{ + if( pPk==0 && sqlite3IsRowid(pChanges->a[i].zEName) ){ + j = -1; + chngRowid = 1; + pRowidExpr = pChanges->a[i].pExpr; + iRowidExpr = i; + }else{ + sqlite3ErrorMsg(pParse, "no such column: %s", pChanges->a[i].zEName); + pParse->checkSchema = 1; + goto update_cleanup; + } + } +#ifndef SQLITE_OMIT_AUTHORIZATION + { + int rc; + rc = sqlite3AuthCheck(pParse, SQLITE_UPDATE, pTab->zName, + j<0 ? "ROWID" : pTab->aCol[j].zCnName, + db->aDb[iDb].zDbSName); + if( rc==SQLITE_DENY ){ + goto update_cleanup; + }else if( rc==SQLITE_IGNORE ){ + aXRef[j] = -1; + } + } +#endif + } + assert( (chngRowid & chngPk)==0 ); + assert( chngRowid==0 || chngRowid==1 ); + assert( chngPk==0 || chngPk==1 ); + chngKey = chngRowid + chngPk; + +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + /* Mark generated columns as changing if their generator expressions + ** reference any changing column. The actual aXRef[] value for + ** generated expressions is not used, other than to check to see that it + ** is non-negative, so the value of aXRef[] for generated columns can be + ** set to any non-negative number. We use 99999 so that the value is + ** obvious when looking at aXRef[] in a symbolic debugger. + */ + if( pTab->tabFlags & TF_HasGenerated ){ + int bProgress; + testcase( pTab->tabFlags & TF_HasVirtual ); + testcase( pTab->tabFlags & TF_HasStored ); + do{ + bProgress = 0; + for(i=0; inCol; i++){ + if( aXRef[i]>=0 ) continue; + if( (pTab->aCol[i].colFlags & COLFLAG_GENERATED)==0 ) continue; + if( sqlite3ExprReferencesUpdatedColumn( + sqlite3ColumnExpr(pTab, &pTab->aCol[i]), + aXRef, chngRowid) + ){ + aXRef[i] = 99999; + bProgress = 1; + } + } + }while( bProgress ); + } +#endif + + /* The SET expressions are not actually used inside the WHERE loop. + ** So reset the colUsed mask. Unless this is a virtual table. In that + ** case, set all bits of the colUsed mask (to ensure that the virtual + ** table implementation makes all columns available). + */ + pTabList->a[0].colUsed = IsVirtual(pTab) ? ALLBITS : 0; + + hasFK = sqlite3FkRequired(pParse, pTab, aXRef, chngKey); + + /* There is one entry in the aRegIdx[] array for each index on the table + ** being updated. Fill in aRegIdx[] with a register number that will hold + ** the key for accessing each index. + */ + if( onError==OE_Replace ) bReplace = 1; + for(nAllIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nAllIdx++){ + int reg; + if( chngKey || hasFK>1 || pIdx==pPk + || indexWhereClauseMightChange(pIdx,aXRef,chngRowid) + ){ + reg = ++pParse->nMem; + pParse->nMem += pIdx->nColumn; + }else{ + reg = 0; + for(i=0; inKeyCol; i++){ + if( indexColumnIsBeingUpdated(pIdx, i, aXRef, chngRowid) ){ + reg = ++pParse->nMem; + pParse->nMem += pIdx->nColumn; + if( onError==OE_Default && pIdx->onError==OE_Replace ){ + bReplace = 1; + } + break; + } + } + } + if( reg==0 ) aToOpen[nAllIdx+1] = 0; + aRegIdx[nAllIdx] = reg; + } + aRegIdx[nAllIdx] = ++pParse->nMem; /* Register storing the table record */ + if( bReplace ){ + /* If REPLACE conflict resolution might be invoked, open cursors on all + ** indexes in case they are needed to delete records. */ + memset(aToOpen, 1, nIdx+1); + } + + if( pParse->nested==0 ) sqlite3VdbeCountChanges(v); + sqlite3BeginWriteOperation(pParse, pTrigger || hasFK, iDb); + + /* Allocate required registers. */ + if( !IsVirtual(pTab) ){ + /* For now, regRowSet and aRegIdx[nAllIdx] share the same register. + ** If regRowSet turns out to be needed, then aRegIdx[nAllIdx] will be + ** reallocated. aRegIdx[nAllIdx] is the register in which the main + ** table record is written. regRowSet holds the RowSet for the + ** two-pass update algorithm. */ + assert( aRegIdx[nAllIdx]==pParse->nMem ); + regRowSet = aRegIdx[nAllIdx]; + regOldRowid = regNewRowid = ++pParse->nMem; + if( chngPk || pTrigger || hasFK ){ + regOld = pParse->nMem + 1; + pParse->nMem += pTab->nCol; + } + if( chngKey || pTrigger || hasFK ){ + regNewRowid = ++pParse->nMem; + } + regNew = pParse->nMem + 1; + pParse->nMem += pTab->nCol; + } + + /* Start the view context. */ + if( isView ){ + sqlite3AuthContextPush(pParse, &sContext, pTab->zName); + } + + /* If we are trying to update a view, realize that view into + ** an ephemeral table. + */ +#if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) + if( nChangeFrom==0 && isView ){ + sqlite3MaterializeView(pParse, pTab, + pWhere, pOrderBy, pLimit, iDataCur + ); + pOrderBy = 0; + pLimit = 0; + } +#endif + + /* Resolve the column names in all the expressions in the + ** WHERE clause. + */ + if( nChangeFrom==0 && sqlite3ResolveExprNames(&sNC, pWhere) ){ + goto update_cleanup; + } + +#ifndef SQLITE_OMIT_VIRTUALTABLE + /* Virtual tables must be handled separately */ + if( IsVirtual(pTab) ){ + updateVirtualTable(pParse, pTabList, pTab, pChanges, pRowidExpr, aXRef, + pWhere, onError); + goto update_cleanup; + } +#endif + + /* Jump to labelBreak to abandon further processing of this UPDATE */ + labelContinue = labelBreak = sqlite3VdbeMakeLabel(pParse); + + /* Not an UPSERT. Normal processing. Begin by + ** initialize the count of updated rows */ + if( (db->flags&SQLITE_CountRows)!=0 + && !pParse->pTriggerTab + && !pParse->nested + && !pParse->bReturning + && pUpsert==0 + ){ + regRowCount = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount); + } + + if( nChangeFrom==0 && HasRowid(pTab) ){ + sqlite3VdbeAddOp3(v, OP_Null, 0, regRowSet, regOldRowid); + iEph = pParse->nTab++; + addrOpen = sqlite3VdbeAddOp3(v, OP_OpenEphemeral, iEph, 0, regRowSet); + }else{ + assert( pPk!=0 || HasRowid(pTab) ); + nPk = pPk ? pPk->nKeyCol : 0; + iPk = pParse->nMem+1; + pParse->nMem += nPk; + pParse->nMem += nChangeFrom; + regKey = ++pParse->nMem; + if( pUpsert==0 ){ + int nEphCol = nPk + nChangeFrom + (isView ? pTab->nCol : 0); + iEph = pParse->nTab++; + if( pPk ) sqlite3VdbeAddOp3(v, OP_Null, 0, iPk, iPk+nPk-1); + addrOpen = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iEph, nEphCol); + if( pPk ){ + KeyInfo *pKeyInfo = sqlite3KeyInfoOfIndex(pParse, pPk); + if( pKeyInfo ){ + pKeyInfo->nAllField = nEphCol; + sqlite3VdbeAppendP4(v, pKeyInfo, P4_KEYINFO); + } + } + if( nChangeFrom ){ + updateFromSelect( + pParse, iEph, pPk, pChanges, pTabList, pWhere, pOrderBy, pLimit + ); +#ifndef SQLITE_OMIT_SUBQUERY + if( isView ) iDataCur = iEph; +#endif + } + } + } + + if( nChangeFrom ){ + sqlite3MultiWrite(pParse); + eOnePass = ONEPASS_OFF; + nKey = nPk; + regKey = iPk; + }else{ + if( pUpsert ){ + /* If this is an UPSERT, then all cursors have already been opened by + ** the outer INSERT and the data cursor should be pointing at the row + ** that is to be updated. So bypass the code that searches for the + ** row(s) to be updated. + */ + pWInfo = 0; + eOnePass = ONEPASS_SINGLE; + sqlite3ExprIfFalse(pParse, pWhere, labelBreak, SQLITE_JUMPIFNULL); + bFinishSeek = 0; + }else{ + /* Begin the database scan. + ** + ** Do not consider a single-pass strategy for a multi-row update if + ** there is anything that might disrupt the cursor being used to do + ** the UPDATE: + ** (1) This is a nested UPDATE + ** (2) There are triggers + ** (3) There are FOREIGN KEY constraints + ** (4) There are REPLACE conflict handlers + ** (5) There are subqueries in the WHERE clause + */ + flags = WHERE_ONEPASS_DESIRED; + if( !pParse->nested + && !pTrigger + && !hasFK + && !chngKey + && !bReplace + && (pWhere==0 || !ExprHasProperty(pWhere, EP_Subquery)) + ){ + flags |= WHERE_ONEPASS_MULTIROW; + } + pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere,0,0,0,flags,iIdxCur); + if( pWInfo==0 ) goto update_cleanup; + + /* A one-pass strategy that might update more than one row may not + ** be used if any column of the index used for the scan is being + ** updated. Otherwise, if there is an index on "b", statements like + ** the following could create an infinite loop: + ** + ** UPDATE t1 SET b=b+1 WHERE b>? + ** + ** Fall back to ONEPASS_OFF if where.c has selected a ONEPASS_MULTI + ** strategy that uses an index for which one or more columns are being + ** updated. */ + eOnePass = sqlite3WhereOkOnePass(pWInfo, aiCurOnePass); + bFinishSeek = sqlite3WhereUsesDeferredSeek(pWInfo); + if( eOnePass!=ONEPASS_SINGLE ){ + sqlite3MultiWrite(pParse); + if( eOnePass==ONEPASS_MULTI ){ + int iCur = aiCurOnePass[1]; + if( iCur>=0 && iCur!=iDataCur && aToOpen[iCur-iBaseCur] ){ + eOnePass = ONEPASS_OFF; + } + assert( iCur!=iDataCur || !HasRowid(pTab) ); + } + } + } + + if( HasRowid(pTab) ){ + /* Read the rowid of the current row of the WHERE scan. In ONEPASS_OFF + ** mode, write the rowid into the FIFO. In either of the one-pass modes, + ** leave it in register regOldRowid. */ + sqlite3VdbeAddOp2(v, OP_Rowid, iDataCur, regOldRowid); + if( eOnePass==ONEPASS_OFF ){ + aRegIdx[nAllIdx] = ++pParse->nMem; + sqlite3VdbeAddOp3(v, OP_Insert, iEph, regRowSet, regOldRowid); + }else{ + if( ALWAYS(addrOpen) ) sqlite3VdbeChangeToNoop(v, addrOpen); + } + }else{ + /* Read the PK of the current row into an array of registers. In + ** ONEPASS_OFF mode, serialize the array into a record and store it in + ** the ephemeral table. Or, in ONEPASS_SINGLE or MULTI mode, change + ** the OP_OpenEphemeral instruction to a Noop (the ephemeral table + ** is not required) and leave the PK fields in the array of registers. */ + for(i=0; iaiColumn[i]>=0 ); + sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, + pPk->aiColumn[i], iPk+i); + } + if( eOnePass ){ + if( addrOpen ) sqlite3VdbeChangeToNoop(v, addrOpen); + nKey = nPk; + regKey = iPk; + }else{ + sqlite3VdbeAddOp4(v, OP_MakeRecord, iPk, nPk, regKey, + sqlite3IndexAffinityStr(db, pPk), nPk); + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iEph, regKey, iPk, nPk); + } + } + } + + if( pUpsert==0 ){ + if( nChangeFrom==0 && eOnePass!=ONEPASS_MULTI ){ + sqlite3WhereEnd(pWInfo); + } + + if( !isView ){ + int addrOnce = 0; + int iNotUsed1 = 0; + int iNotUsed2 = 0; + + /* Open every index that needs updating. */ + if( eOnePass!=ONEPASS_OFF ){ + if( aiCurOnePass[0]>=0 ) aToOpen[aiCurOnePass[0]-iBaseCur] = 0; + if( aiCurOnePass[1]>=0 ) aToOpen[aiCurOnePass[1]-iBaseCur] = 0; + } + + if( eOnePass==ONEPASS_MULTI && (nIdx-(aiCurOnePass[1]>=0))>0 ){ + addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); + } + sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenWrite, 0, iBaseCur, + aToOpen, &iNotUsed1, &iNotUsed2); + if( addrOnce ){ + sqlite3VdbeJumpHereOrPopInst(v, addrOnce); + } + } + + /* Top of the update loop */ + if( eOnePass!=ONEPASS_OFF ){ + if( aiCurOnePass[0]!=iDataCur + && aiCurOnePass[1]!=iDataCur +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + && !isView +#endif + ){ + assert( pPk ); + sqlite3VdbeAddOp4Int(v, OP_NotFound, iDataCur, labelBreak, regKey,nKey); + VdbeCoverage(v); + } + if( eOnePass!=ONEPASS_SINGLE ){ + labelContinue = sqlite3VdbeMakeLabel(pParse); + } + sqlite3VdbeAddOp2(v, OP_IsNull, pPk ? regKey : regOldRowid, labelBreak); + VdbeCoverageIf(v, pPk==0); + VdbeCoverageIf(v, pPk!=0); + }else if( pPk || nChangeFrom ){ + labelContinue = sqlite3VdbeMakeLabel(pParse); + sqlite3VdbeAddOp2(v, OP_Rewind, iEph, labelBreak); VdbeCoverage(v); + addrTop = sqlite3VdbeCurrentAddr(v); + if( nChangeFrom ){ + if( !isView ){ + if( pPk ){ + for(i=0; i=0 ); + if( nChangeFrom==0 ){ + sqlite3ExprCode(pParse, pRowidExpr, regNewRowid); + }else{ + sqlite3VdbeAddOp3(v, OP_Column, iEph, iRowidExpr, regNewRowid); + } + sqlite3VdbeAddOp1(v, OP_MustBeInt, regNewRowid); VdbeCoverage(v); + } + + /* Compute the old pre-UPDATE content of the row being changed, if that + ** information is needed */ + if( chngPk || hasFK || pTrigger ){ + u32 oldmask = (hasFK ? sqlite3FkOldmask(pParse, pTab) : 0); + oldmask |= sqlite3TriggerColmask(pParse, + pTrigger, pChanges, 0, TRIGGER_BEFORE|TRIGGER_AFTER, pTab, onError + ); + for(i=0; inCol; i++){ + u32 colFlags = pTab->aCol[i].colFlags; + k = sqlite3TableColumnToStorage(pTab, i) + regOld; + if( oldmask==0xffffffff + || (i<32 && (oldmask & MASKBIT32(i))!=0) + || (colFlags & COLFLAG_PRIMKEY)!=0 + ){ + testcase( oldmask!=0xffffffff && i==31 ); + sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, i, k); + }else{ + sqlite3VdbeAddOp2(v, OP_Null, 0, k); + } + } + if( chngRowid==0 && pPk==0 ){ +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + if( isView ) sqlite3VdbeAddOp2(v, OP_Null, 0, regOldRowid); +#endif + sqlite3VdbeAddOp2(v, OP_Copy, regOldRowid, regNewRowid); + } + } + + /* Populate the array of registers beginning at regNew with the new + ** row data. This array is used to check constants, create the new + ** table and index records, and as the values for any new.* references + ** made by triggers. + ** + ** If there are one or more BEFORE triggers, then do not populate the + ** registers associated with columns that are (a) not modified by + ** this UPDATE statement and (b) not accessed by new.* references. The + ** values for registers not modified by the UPDATE must be reloaded from + ** the database after the BEFORE triggers are fired anyway (as the trigger + ** may have modified them). So not loading those that are not going to + ** be used eliminates some redundant opcodes. + */ + newmask = sqlite3TriggerColmask( + pParse, pTrigger, pChanges, 1, TRIGGER_BEFORE, pTab, onError + ); + for(i=0, k=regNew; inCol; i++, k++){ + if( i==pTab->iPKey ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, k); + }else if( (pTab->aCol[i].colFlags & COLFLAG_GENERATED)!=0 ){ + if( pTab->aCol[i].colFlags & COLFLAG_VIRTUAL ) k--; + }else{ + j = aXRef[i]; + if( j>=0 ){ + if( nChangeFrom ){ + int nOff = (isView ? pTab->nCol : nPk); + assert( eOnePass==ONEPASS_OFF ); + sqlite3VdbeAddOp3(v, OP_Column, iEph, nOff+j, k); + }else{ + sqlite3ExprCode(pParse, pChanges->a[j].pExpr, k); + } + }else if( 0==(tmask&TRIGGER_BEFORE) || i>31 || (newmask & MASKBIT32(i)) ){ + /* This branch loads the value of a column that will not be changed + ** into a register. This is done if there are no BEFORE triggers, or + ** if there are one or more BEFORE triggers that use this value via + ** a new.* reference in a trigger program. + */ + testcase( i==31 ); + testcase( i==32 ); + sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, i, k); + bFinishSeek = 0; + }else{ + sqlite3VdbeAddOp2(v, OP_Null, 0, k); + } + } + } +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + if( pTab->tabFlags & TF_HasGenerated ){ + testcase( pTab->tabFlags & TF_HasVirtual ); + testcase( pTab->tabFlags & TF_HasStored ); + sqlite3ComputeGeneratedColumns(pParse, regNew, pTab); + } +#endif + + /* Fire any BEFORE UPDATE triggers. This happens before constraints are + ** verified. One could argue that this is wrong. + */ + if( tmask&TRIGGER_BEFORE ){ + sqlite3TableAffinity(v, pTab, regNew); + sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges, + TRIGGER_BEFORE, pTab, regOldRowid, onError, labelContinue); + + if( !isView ){ + /* The row-trigger may have deleted the row being updated. In this + ** case, jump to the next row. No updates or AFTER triggers are + ** required. This behavior - what happens when the row being updated + ** is deleted or renamed by a BEFORE trigger - is left undefined in the + ** documentation. + */ + if( pPk ){ + sqlite3VdbeAddOp4Int(v, OP_NotFound,iDataCur,labelContinue,regKey,nKey); + VdbeCoverage(v); + }else{ + sqlite3VdbeAddOp3(v, OP_NotExists, iDataCur, labelContinue,regOldRowid); + VdbeCoverage(v); + } + + /* After-BEFORE-trigger-reload-loop: + ** If it did not delete it, the BEFORE trigger may still have modified + ** some of the columns of the row being updated. Load the values for + ** all columns not modified by the update statement into their registers + ** in case this has happened. Only unmodified columns are reloaded. + ** The values computed for modified columns use the values before the + ** BEFORE trigger runs. See test case trigger1-18.0 (added 2018-04-26) + ** for an example. + */ + for(i=0, k=regNew; inCol; i++, k++){ + if( pTab->aCol[i].colFlags & COLFLAG_GENERATED ){ + if( pTab->aCol[i].colFlags & COLFLAG_VIRTUAL ) k--; + }else if( aXRef[i]<0 && i!=pTab->iPKey ){ + sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, i, k); + } + } +#ifndef SQLITE_OMIT_GENERATED_COLUMNS + if( pTab->tabFlags & TF_HasGenerated ){ + testcase( pTab->tabFlags & TF_HasVirtual ); + testcase( pTab->tabFlags & TF_HasStored ); + sqlite3ComputeGeneratedColumns(pParse, regNew, pTab); + } +#endif + } + } + + if( !isView ){ + /* Do constraint checks. */ + assert( regOldRowid>0 ); + sqlite3GenerateConstraintChecks(pParse, pTab, aRegIdx, iDataCur, iIdxCur, + regNewRowid, regOldRowid, chngKey, onError, labelContinue, &bReplace, + aXRef, 0); + + /* If REPLACE conflict handling may have been used, or if the PK of the + ** row is changing, then the GenerateConstraintChecks() above may have + ** moved cursor iDataCur. Reseek it. */ + if( bReplace || chngKey ){ + if( pPk ){ + sqlite3VdbeAddOp4Int(v, OP_NotFound,iDataCur,labelContinue,regKey,nKey); + }else{ + sqlite3VdbeAddOp3(v, OP_NotExists, iDataCur, labelContinue,regOldRowid); + } + VdbeCoverage(v); + } + + /* Do FK constraint checks. */ + if( hasFK ){ + sqlite3FkCheck(pParse, pTab, regOldRowid, 0, aXRef, chngKey); + } + + /* Delete the index entries associated with the current record. */ + sqlite3GenerateRowIndexDelete(pParse, pTab, iDataCur, iIdxCur, aRegIdx, -1); + + /* We must run the OP_FinishSeek opcode to resolve a prior + ** OP_DeferredSeek if there is any possibility that there have been + ** no OP_Column opcodes since the OP_DeferredSeek was issued. But + ** we want to avoid the OP_FinishSeek if possible, as running it + ** costs CPU cycles. */ + if( bFinishSeek ){ + sqlite3VdbeAddOp1(v, OP_FinishSeek, iDataCur); + } + + /* If changing the rowid value, or if there are foreign key constraints + ** to process, delete the old record. Otherwise, add a noop OP_Delete + ** to invoke the pre-update hook. + ** + ** That (regNew==regnewRowid+1) is true is also important for the + ** pre-update hook. If the caller invokes preupdate_new(), the returned + ** value is copied from memory cell (regNewRowid+1+iCol), where iCol + ** is the column index supplied by the user. + */ + assert( regNew==regNewRowid+1 ); +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + sqlite3VdbeAddOp3(v, OP_Delete, iDataCur, + OPFLAG_ISUPDATE | ((hasFK>1 || chngKey) ? 0 : OPFLAG_ISNOOP), + regNewRowid + ); + if( eOnePass==ONEPASS_MULTI ){ + assert( hasFK==0 && chngKey==0 ); + sqlite3VdbeChangeP5(v, OPFLAG_SAVEPOSITION); + } + if( !pParse->nested ){ + sqlite3VdbeAppendP4(v, pTab, P4_TABLE); + } +#else + if( hasFK>1 || chngKey ){ + sqlite3VdbeAddOp2(v, OP_Delete, iDataCur, 0); + } +#endif + + if( hasFK ){ + sqlite3FkCheck(pParse, pTab, 0, regNewRowid, aXRef, chngKey); + } + + /* Insert the new index entries and the new record. */ + sqlite3CompleteInsertion( + pParse, pTab, iDataCur, iIdxCur, regNewRowid, aRegIdx, + OPFLAG_ISUPDATE | (eOnePass==ONEPASS_MULTI ? OPFLAG_SAVEPOSITION : 0), + 0, 0 + ); + + /* Do any ON CASCADE, SET NULL or SET DEFAULT operations required to + ** handle rows (possibly in other tables) that refer via a foreign key + ** to the row just updated. */ + if( hasFK ){ + sqlite3FkActions(pParse, pTab, pChanges, regOldRowid, aXRef, chngKey); + } + } + + /* Increment the row counter + */ + if( regRowCount ){ + sqlite3VdbeAddOp2(v, OP_AddImm, regRowCount, 1); + } + + if( pTrigger ){ + sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges, + TRIGGER_AFTER, pTab, regOldRowid, onError, labelContinue); + } + + /* Repeat the above with the next record to be updated, until + ** all record selected by the WHERE clause have been updated. + */ + if( eOnePass==ONEPASS_SINGLE ){ + /* Nothing to do at end-of-loop for a single-pass */ + }else if( eOnePass==ONEPASS_MULTI ){ + sqlite3VdbeResolveLabel(v, labelContinue); + sqlite3WhereEnd(pWInfo); + }else{ + sqlite3VdbeResolveLabel(v, labelContinue); + sqlite3VdbeAddOp2(v, OP_Next, iEph, addrTop); VdbeCoverage(v); + } + sqlite3VdbeResolveLabel(v, labelBreak); + + /* Update the sqlite_sequence table by storing the content of the + ** maximum rowid counter values recorded while inserting into + ** autoincrement tables. + */ + if( pParse->nested==0 && pParse->pTriggerTab==0 && pUpsert==0 ){ + sqlite3AutoincrementEnd(pParse); + } + + /* + ** Return the number of rows that were changed, if we are tracking + ** that information. + */ + if( regRowCount ){ + sqlite3CodeChangeCount(v, regRowCount, "rows updated"); + } + +update_cleanup: + sqlite3AuthContextPop(&sContext); + sqlite3DbFree(db, aXRef); /* Also frees aRegIdx[] and aToOpen[] */ + sqlite3SrcListDelete(db, pTabList); + sqlite3ExprListDelete(db, pChanges); + sqlite3ExprDelete(db, pWhere); +#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) + sqlite3ExprListDelete(db, pOrderBy); + sqlite3ExprDelete(db, pLimit); +#endif + return; +} +/* Make sure "isView" and other macros defined above are undefined. Otherwise +** they may interfere with compilation of other functions in this file +** (or in another file, if this file becomes part of the amalgamation). */ +#ifdef isView + #undef isView +#endif +#ifdef pTrigger + #undef pTrigger +#endif + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* +** Generate code for an UPDATE of a virtual table. +** +** There are two possible strategies - the default and the special +** "onepass" strategy. Onepass is only used if the virtual table +** implementation indicates that pWhere may match at most one row. +** +** The default strategy is to create an ephemeral table that contains +** for each row to be changed: +** +** (A) The original rowid of that row. +** (B) The revised rowid for the row. +** (C) The content of every column in the row. +** +** Then loop through the contents of this ephemeral table executing a +** VUpdate for each row. When finished, drop the ephemeral table. +** +** The "onepass" strategy does not use an ephemeral table. Instead, it +** stores the same values (A, B and C above) in a register array and +** makes a single invocation of VUpdate. +*/ +static void updateVirtualTable( + Parse *pParse, /* The parsing context */ + SrcList *pSrc, /* The virtual table to be modified */ + Table *pTab, /* The virtual table */ + ExprList *pChanges, /* The columns to change in the UPDATE statement */ + Expr *pRowid, /* Expression used to recompute the rowid */ + int *aXRef, /* Mapping from columns of pTab to entries in pChanges */ + Expr *pWhere, /* WHERE clause of the UPDATE statement */ + int onError /* ON CONFLICT strategy */ +){ + Vdbe *v = pParse->pVdbe; /* Virtual machine under construction */ + int ephemTab; /* Table holding the result of the SELECT */ + int i; /* Loop counter */ + sqlite3 *db = pParse->db; /* Database connection */ + const char *pVTab = (const char*)sqlite3GetVTable(db, pTab); + WhereInfo *pWInfo = 0; + int nArg = 2 + pTab->nCol; /* Number of arguments to VUpdate */ + int regArg; /* First register in VUpdate arg array */ + int regRec; /* Register in which to assemble record */ + int regRowid; /* Register for ephemeral table rowid */ + int iCsr = pSrc->a[0].iCursor; /* Cursor used for virtual table scan */ + int aDummy[2]; /* Unused arg for sqlite3WhereOkOnePass() */ + int eOnePass; /* True to use onepass strategy */ + int addr; /* Address of OP_OpenEphemeral */ + + /* Allocate nArg registers in which to gather the arguments for VUpdate. Then + ** create and open the ephemeral table in which the records created from + ** these arguments will be temporarily stored. */ + assert( v ); + ephemTab = pParse->nTab++; + addr= sqlite3VdbeAddOp2(v, OP_OpenEphemeral, ephemTab, nArg); + regArg = pParse->nMem + 1; + pParse->nMem += nArg; + if( pSrc->nSrc>1 ){ + Index *pPk = 0; + Expr *pRow; + ExprList *pList; + if( HasRowid(pTab) ){ + if( pRowid ){ + pRow = sqlite3ExprDup(db, pRowid, 0); + }else{ + pRow = sqlite3PExpr(pParse, TK_ROW, 0, 0); + } + }else{ + i16 iPk; /* PRIMARY KEY column */ + pPk = sqlite3PrimaryKeyIndex(pTab); + assert( pPk!=0 ); + assert( pPk->nKeyCol==1 ); + iPk = pPk->aiColumn[0]; + if( aXRef[iPk]>=0 ){ + pRow = sqlite3ExprDup(db, pChanges->a[aXRef[iPk]].pExpr, 0); + }else{ + pRow = exprRowColumn(pParse, iPk); + } + } + pList = sqlite3ExprListAppend(pParse, 0, pRow); + + for(i=0; inCol; i++){ + if( aXRef[i]>=0 ){ + pList = sqlite3ExprListAppend(pParse, pList, + sqlite3ExprDup(db, pChanges->a[aXRef[i]].pExpr, 0) + ); + }else{ + Expr *pRowExpr = exprRowColumn(pParse, i); + if( pRowExpr ) pRowExpr->op2 = OPFLAG_NOCHNG; + pList = sqlite3ExprListAppend(pParse, pList, pRowExpr); + } + } + + updateFromSelect(pParse, ephemTab, pPk, pList, pSrc, pWhere, 0, 0); + sqlite3ExprListDelete(db, pList); + eOnePass = ONEPASS_OFF; + }else{ + regRec = ++pParse->nMem; + regRowid = ++pParse->nMem; + + /* Start scanning the virtual table */ + pWInfo = sqlite3WhereBegin( + pParse, pSrc, pWhere, 0, 0, 0, WHERE_ONEPASS_DESIRED, 0 + ); + if( pWInfo==0 ) return; + + /* Populate the argument registers. */ + for(i=0; inCol; i++){ + assert( (pTab->aCol[i].colFlags & COLFLAG_GENERATED)==0 ); + if( aXRef[i]>=0 ){ + sqlite3ExprCode(pParse, pChanges->a[aXRef[i]].pExpr, regArg+2+i); + }else{ + sqlite3VdbeAddOp3(v, OP_VColumn, iCsr, i, regArg+2+i); + sqlite3VdbeChangeP5(v, OPFLAG_NOCHNG);/* For sqlite3_vtab_nochange() */ + } + } + if( HasRowid(pTab) ){ + sqlite3VdbeAddOp2(v, OP_Rowid, iCsr, regArg); + if( pRowid ){ + sqlite3ExprCode(pParse, pRowid, regArg+1); + }else{ + sqlite3VdbeAddOp2(v, OP_Rowid, iCsr, regArg+1); + } + }else{ + Index *pPk; /* PRIMARY KEY index */ + i16 iPk; /* PRIMARY KEY column */ + pPk = sqlite3PrimaryKeyIndex(pTab); + assert( pPk!=0 ); + assert( pPk->nKeyCol==1 ); + iPk = pPk->aiColumn[0]; + sqlite3VdbeAddOp3(v, OP_VColumn, iCsr, iPk, regArg); + sqlite3VdbeAddOp2(v, OP_SCopy, regArg+2+iPk, regArg+1); + } + + eOnePass = sqlite3WhereOkOnePass(pWInfo, aDummy); + + /* There is no ONEPASS_MULTI on virtual tables */ + assert( eOnePass==ONEPASS_OFF || eOnePass==ONEPASS_SINGLE ); + + if( eOnePass ){ + /* If using the onepass strategy, no-op out the OP_OpenEphemeral coded + ** above. */ + sqlite3VdbeChangeToNoop(v, addr); + sqlite3VdbeAddOp1(v, OP_Close, iCsr); + }else{ + /* Create a record from the argument register contents and insert it into + ** the ephemeral table. */ + sqlite3MultiWrite(pParse); + sqlite3VdbeAddOp3(v, OP_MakeRecord, regArg, nArg, regRec); +#if defined(SQLITE_DEBUG) && !defined(SQLITE_ENABLE_NULL_TRIM) + /* Signal an assert() within OP_MakeRecord that it is allowed to + ** accept no-change records with serial_type 10 */ + sqlite3VdbeChangeP5(v, OPFLAG_NOCHNG_MAGIC); +#endif + sqlite3VdbeAddOp2(v, OP_NewRowid, ephemTab, regRowid); + sqlite3VdbeAddOp3(v, OP_Insert, ephemTab, regRec, regRowid); + } + } + + + if( eOnePass==ONEPASS_OFF ){ + /* End the virtual table scan */ + if( pSrc->nSrc==1 ){ + sqlite3WhereEnd(pWInfo); + } + + /* Begin scanning through the ephemeral table. */ + addr = sqlite3VdbeAddOp1(v, OP_Rewind, ephemTab); VdbeCoverage(v); + + /* Extract arguments from the current row of the ephemeral table and + ** invoke the VUpdate method. */ + for(i=0; ipNextUpsert; + sqlite3ExprListDelete(db, p->pUpsertTarget); + sqlite3ExprDelete(db, p->pUpsertTargetWhere); + sqlite3ExprListDelete(db, p->pUpsertSet); + sqlite3ExprDelete(db, p->pUpsertWhere); + sqlite3DbFree(db, p->pToFree); + sqlite3DbFree(db, p); + p = pNext; + }while( p ); +} +SQLITE_PRIVATE void sqlite3UpsertDelete(sqlite3 *db, Upsert *p){ + if( p ) upsertDelete(db, p); +} + + +/* +** Duplicate an Upsert object. +*/ +SQLITE_PRIVATE Upsert *sqlite3UpsertDup(sqlite3 *db, Upsert *p){ + if( p==0 ) return 0; + return sqlite3UpsertNew(db, + sqlite3ExprListDup(db, p->pUpsertTarget, 0), + sqlite3ExprDup(db, p->pUpsertTargetWhere, 0), + sqlite3ExprListDup(db, p->pUpsertSet, 0), + sqlite3ExprDup(db, p->pUpsertWhere, 0), + sqlite3UpsertDup(db, p->pNextUpsert) + ); +} + +/* +** Create a new Upsert object. +*/ +SQLITE_PRIVATE Upsert *sqlite3UpsertNew( + sqlite3 *db, /* Determines which memory allocator to use */ + ExprList *pTarget, /* Target argument to ON CONFLICT, or NULL */ + Expr *pTargetWhere, /* Optional WHERE clause on the target */ + ExprList *pSet, /* UPDATE columns, or NULL for a DO NOTHING */ + Expr *pWhere, /* WHERE clause for the ON CONFLICT UPDATE */ + Upsert *pNext /* Next ON CONFLICT clause in the list */ +){ + Upsert *pNew; + pNew = sqlite3DbMallocZero(db, sizeof(Upsert)); + if( pNew==0 ){ + sqlite3ExprListDelete(db, pTarget); + sqlite3ExprDelete(db, pTargetWhere); + sqlite3ExprListDelete(db, pSet); + sqlite3ExprDelete(db, pWhere); + sqlite3UpsertDelete(db, pNext); + return 0; + }else{ + pNew->pUpsertTarget = pTarget; + pNew->pUpsertTargetWhere = pTargetWhere; + pNew->pUpsertSet = pSet; + pNew->pUpsertWhere = pWhere; + pNew->isDoUpdate = pSet!=0; + pNew->pNextUpsert = pNext; + } + return pNew; +} + +/* +** Analyze the ON CONFLICT clause described by pUpsert. Resolve all +** symbols in the conflict-target. +** +** Return SQLITE_OK if everything works, or an error code is something +** is wrong. +*/ +SQLITE_PRIVATE int sqlite3UpsertAnalyzeTarget( + Parse *pParse, /* The parsing context */ + SrcList *pTabList, /* Table into which we are inserting */ + Upsert *pUpsert, /* The ON CONFLICT clauses */ + Upsert *pAll /* Complete list of all ON CONFLICT clauses */ +){ + Table *pTab; /* That table into which we are inserting */ + int rc; /* Result code */ + int iCursor; /* Cursor used by pTab */ + Index *pIdx; /* One of the indexes of pTab */ + ExprList *pTarget; /* The conflict-target clause */ + Expr *pTerm; /* One term of the conflict-target clause */ + NameContext sNC; /* Context for resolving symbolic names */ + Expr sCol[2]; /* Index column converted into an Expr */ + int nClause = 0; /* Counter of ON CONFLICT clauses */ + + assert( pTabList->nSrc==1 ); + assert( pTabList->a[0].pSTab!=0 ); + assert( pUpsert!=0 ); + assert( pUpsert->pUpsertTarget!=0 ); + + /* Resolve all symbolic names in the conflict-target clause, which + ** includes both the list of columns and the optional partial-index + ** WHERE clause. + */ + memset(&sNC, 0, sizeof(sNC)); + sNC.pParse = pParse; + sNC.pSrcList = pTabList; + for(; pUpsert && pUpsert->pUpsertTarget; + pUpsert=pUpsert->pNextUpsert, nClause++){ + rc = sqlite3ResolveExprListNames(&sNC, pUpsert->pUpsertTarget); + if( rc ) return rc; + rc = sqlite3ResolveExprNames(&sNC, pUpsert->pUpsertTargetWhere); + if( rc ) return rc; + + /* Check to see if the conflict target matches the rowid. */ + pTab = pTabList->a[0].pSTab; + pTarget = pUpsert->pUpsertTarget; + iCursor = pTabList->a[0].iCursor; + if( HasRowid(pTab) + && pTarget->nExpr==1 + && (pTerm = pTarget->a[0].pExpr)->op==TK_COLUMN + && pTerm->iColumn==XN_ROWID + ){ + /* The conflict-target is the rowid of the primary table */ + assert( pUpsert->pUpsertIdx==0 ); + continue; + } + + /* Initialize sCol[0..1] to be an expression parse tree for a + ** single column of an index. The sCol[0] node will be the TK_COLLATE + ** operator and sCol[1] will be the TK_COLUMN operator. Code below + ** will populate the specific collation and column number values + ** prior to comparing against the conflict-target expression. + */ + memset(sCol, 0, sizeof(sCol)); + sCol[0].op = TK_COLLATE; + sCol[0].pLeft = &sCol[1]; + sCol[1].op = TK_COLUMN; + sCol[1].iTable = pTabList->a[0].iCursor; + + /* Check for matches against other indexes */ + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + int ii, jj, nn; + if( !IsUniqueIndex(pIdx) ) continue; + if( pTarget->nExpr!=pIdx->nKeyCol ) continue; + if( pIdx->pPartIdxWhere ){ + if( pUpsert->pUpsertTargetWhere==0 ) continue; + if( sqlite3ExprCompare(pParse, pUpsert->pUpsertTargetWhere, + pIdx->pPartIdxWhere, iCursor)!=0 ){ + continue; + } + } + nn = pIdx->nKeyCol; + for(ii=0; iiazColl[ii]; + if( pIdx->aiColumn[ii]==XN_EXPR ){ + assert( pIdx->aColExpr!=0 ); + assert( pIdx->aColExpr->nExpr>ii ); + assert( pIdx->bHasExpr ); + pExpr = pIdx->aColExpr->a[ii].pExpr; + if( pExpr->op!=TK_COLLATE ){ + sCol[0].pLeft = pExpr; + pExpr = &sCol[0]; + } + }else{ + sCol[0].pLeft = &sCol[1]; + sCol[1].iColumn = pIdx->aiColumn[ii]; + pExpr = &sCol[0]; + } + for(jj=0; jja[jj].pExpr,pExpr,iCursor)<2 ){ + break; /* Column ii of the index matches column jj of target */ + } + } + if( jj>=nn ){ + /* The target contains no match for column jj of the index */ + break; + } + } + if( iipUpsertIdx = pIdx; + if( sqlite3UpsertOfIndex(pAll,pIdx)!=pUpsert ){ + /* Really this should be an error. The isDup ON CONFLICT clause will + ** never fire. But this problem was not discovered until three years + ** after multi-CONFLICT upsert was added, and so we silently ignore + ** the problem to prevent breaking applications that might actually + ** have redundant ON CONFLICT clauses. */ + pUpsert->isDup = 1; + } + break; + } + if( pUpsert->pUpsertIdx==0 ){ + char zWhich[16]; + if( nClause==0 && pUpsert->pNextUpsert==0 ){ + zWhich[0] = 0; + }else{ + sqlite3_snprintf(sizeof(zWhich),zWhich,"%r ", nClause+1); + } + sqlite3ErrorMsg(pParse, "%sON CONFLICT clause does not match any " + "PRIMARY KEY or UNIQUE constraint", zWhich); + return SQLITE_ERROR; + } + } + return SQLITE_OK; +} + +/* +** Return true if pUpsert is the last ON CONFLICT clause with a +** conflict target, or if pUpsert is followed by another ON CONFLICT +** clause that targets the INTEGER PRIMARY KEY. +*/ +SQLITE_PRIVATE int sqlite3UpsertNextIsIPK(Upsert *pUpsert){ + Upsert *pNext; + if( NEVER(pUpsert==0) ) return 0; + pNext = pUpsert->pNextUpsert; + while( 1 /*exit-by-return*/ ){ + if( pNext==0 ) return 1; + if( pNext->pUpsertTarget==0 ) return 1; + if( pNext->pUpsertIdx==0 ) return 1; + if( !pNext->isDup ) return 0; + pNext = pNext->pNextUpsert; + } + return 0; +} + +/* +** Given the list of ON CONFLICT clauses described by pUpsert, and +** a particular index pIdx, return a pointer to the particular ON CONFLICT +** clause that applies to the index. Or, if the index is not subject to +** any ON CONFLICT clause, return NULL. +*/ +SQLITE_PRIVATE Upsert *sqlite3UpsertOfIndex(Upsert *pUpsert, Index *pIdx){ + while( + pUpsert + && pUpsert->pUpsertTarget!=0 + && pUpsert->pUpsertIdx!=pIdx + ){ + pUpsert = pUpsert->pNextUpsert; + } + return pUpsert; +} + +/* +** Generate bytecode that does an UPDATE as part of an upsert. +** +** If pIdx is NULL, then the UNIQUE constraint that failed was the IPK. +** In this case parameter iCur is a cursor open on the table b-tree that +** currently points to the conflicting table row. Otherwise, if pIdx +** is not NULL, then pIdx is the constraint that failed and iCur is a +** cursor points to the conflicting row. +*/ +SQLITE_PRIVATE void sqlite3UpsertDoUpdate( + Parse *pParse, /* The parsing and code-generating context */ + Upsert *pUpsert, /* The ON CONFLICT clause for the upsert */ + Table *pTab, /* The table being updated */ + Index *pIdx, /* The UNIQUE constraint that failed */ + int iCur /* Cursor for pIdx (or pTab if pIdx==NULL) */ +){ + Vdbe *v = pParse->pVdbe; + sqlite3 *db = pParse->db; + SrcList *pSrc; /* FROM clause for the UPDATE */ + int iDataCur; + int i; + Upsert *pTop = pUpsert; + + assert( v!=0 ); + assert( pUpsert!=0 ); + iDataCur = pUpsert->iDataCur; + pUpsert = sqlite3UpsertOfIndex(pTop, pIdx); + VdbeNoopComment((v, "Begin DO UPDATE of UPSERT")); + if( pIdx && iCur!=iDataCur ){ + if( HasRowid(pTab) ){ + int regRowid = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp2(v, OP_IdxRowid, iCur, regRowid); + sqlite3VdbeAddOp3(v, OP_SeekRowid, iDataCur, 0, regRowid); + VdbeCoverage(v); + sqlite3ReleaseTempReg(pParse, regRowid); + }else{ + Index *pPk = sqlite3PrimaryKeyIndex(pTab); + int nPk = pPk->nKeyCol; + int iPk = pParse->nMem+1; + pParse->nMem += nPk; + for(i=0; iaiColumn[i]>=0 ); + k = sqlite3TableColumnToIndex(pIdx, pPk->aiColumn[i]); + sqlite3VdbeAddOp3(v, OP_Column, iCur, k, iPk+i); + VdbeComment((v, "%s.%s", pIdx->zName, + pTab->aCol[pPk->aiColumn[i]].zCnName)); + } + sqlite3VdbeVerifyAbortable(v, OE_Abort); + i = sqlite3VdbeAddOp4Int(v, OP_Found, iDataCur, 0, iPk, nPk); + VdbeCoverage(v); + sqlite3VdbeAddOp4(v, OP_Halt, SQLITE_CORRUPT, OE_Abort, 0, + "corrupt database", P4_STATIC); + sqlite3MayAbort(pParse); + sqlite3VdbeJumpHere(v, i); + } + } + /* pUpsert does not own pTop->pUpsertSrc - the outer INSERT statement does. + ** So we have to make a copy before passing it down into sqlite3Update() */ + pSrc = sqlite3SrcListDup(db, pTop->pUpsertSrc, 0); + /* excluded.* columns of type REAL need to be converted to a hard real */ + for(i=0; inCol; i++){ + if( pTab->aCol[i].affinity==SQLITE_AFF_REAL ){ + sqlite3VdbeAddOp1(v, OP_RealAffinity, pTop->regData+i); + } + } + sqlite3Update(pParse, pSrc, sqlite3ExprListDup(db,pUpsert->pUpsertSet,0), + sqlite3ExprDup(db,pUpsert->pUpsertWhere,0), OE_Abort, 0, 0, pUpsert); + VdbeNoopComment((v, "End DO UPDATE of UPSERT")); +} + +#endif /* SQLITE_OMIT_UPSERT */ + +/************** End of upsert.c **********************************************/ +/************** Begin file vacuum.c ******************************************/ +/* +** 2003 April 6 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code used to implement the VACUUM command. +** +** Most of the code in this file may be omitted by defining the +** SQLITE_OMIT_VACUUM macro. +*/ +/* #include "sqliteInt.h" */ +/* #include "vdbeInt.h" */ + +#if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH) + +/* +** Execute zSql on database db. +** +** If zSql returns rows, then each row will have exactly one +** column. (This will only happen if zSql begins with "SELECT".) +** Take each row of result and call execSql() again recursively. +** +** The execSqlF() routine does the same thing, except it accepts +** a format string as its third argument +*/ +static int execSql(sqlite3 *db, char **pzErrMsg, const char *zSql){ + sqlite3_stmt *pStmt; + int rc; + + /* printf("SQL: [%s]\n", zSql); fflush(stdout); */ + rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); + if( rc!=SQLITE_OK ) return rc; + while( SQLITE_ROW==(rc = sqlite3_step(pStmt)) ){ + const char *zSubSql = (const char*)sqlite3_column_text(pStmt,0); + assert( sqlite3_strnicmp(zSql,"SELECT",6)==0 ); + /* The secondary SQL must be one of CREATE TABLE, CREATE INDEX, + ** or INSERT. Historically there have been attacks that first + ** corrupt the sqlite_schema.sql field with other kinds of statements + ** then run VACUUM to get those statements to execute at inappropriate + ** times. */ + if( zSubSql + && (strncmp(zSubSql,"CRE",3)==0 || strncmp(zSubSql,"INS",3)==0) + ){ + rc = execSql(db, pzErrMsg, zSubSql); + if( rc!=SQLITE_OK ) break; + } + } + assert( rc!=SQLITE_ROW ); + if( rc==SQLITE_DONE ) rc = SQLITE_OK; + if( rc ){ + sqlite3SetString(pzErrMsg, db, sqlite3_errmsg(db)); + } + (void)sqlite3_finalize(pStmt); + return rc; +} +static int execSqlF(sqlite3 *db, char **pzErrMsg, const char *zSql, ...){ + char *z; + va_list ap; + int rc; + va_start(ap, zSql); + z = sqlite3VMPrintf(db, zSql, ap); + va_end(ap); + if( z==0 ) return SQLITE_NOMEM; + rc = execSql(db, pzErrMsg, z); + sqlite3DbFree(db, z); + return rc; +} + +/* +** The VACUUM command is used to clean up the database, +** collapse free space, etc. It is modelled after the VACUUM command +** in PostgreSQL. The VACUUM command works as follows: +** +** (1) Create a new transient database file +** (2) Copy all content from the database being vacuumed into +** the new transient database file +** (3) Copy content from the transient database back into the +** original database. +** +** The transient database requires temporary disk space approximately +** equal to the size of the original database. The copy operation of +** step (3) requires additional temporary disk space approximately equal +** to the size of the original database for the rollback journal. +** Hence, temporary disk space that is approximately 2x the size of the +** original database is required. Every page of the database is written +** approximately 3 times: Once for step (2) and twice for step (3). +** Two writes per page are required in step (3) because the original +** database content must be written into the rollback journal prior to +** overwriting the database with the vacuumed content. +** +** Only 1x temporary space and only 1x writes would be required if +** the copy of step (3) were replaced by deleting the original database +** and renaming the transient database as the original. But that will +** not work if other processes are attached to the original database. +** And a power loss in between deleting the original and renaming the +** transient would cause the database file to appear to be deleted +** following reboot. +*/ +SQLITE_PRIVATE void sqlite3Vacuum(Parse *pParse, Token *pNm, Expr *pInto){ + Vdbe *v = sqlite3GetVdbe(pParse); + int iDb = 0; + if( v==0 ) goto build_vacuum_end; + if( pParse->nErr ) goto build_vacuum_end; + if( pNm ){ +#ifndef SQLITE_BUG_COMPATIBLE_20160819 + /* Default behavior: Report an error if the argument to VACUUM is + ** not recognized */ + iDb = sqlite3TwoPartName(pParse, pNm, pNm, &pNm); + if( iDb<0 ) goto build_vacuum_end; +#else + /* When SQLITE_BUG_COMPATIBLE_20160819 is defined, unrecognized arguments + ** to VACUUM are silently ignored. This is a back-out of a bug fix that + ** occurred on 2016-08-19 (https://sqlite.org/src/info/083f9e6270). + ** The buggy behavior is required for binary compatibility with some + ** legacy applications. */ + iDb = sqlite3FindDb(pParse->db, pNm); + if( iDb<0 ) iDb = 0; +#endif + } + if( iDb!=1 ){ + int iIntoReg = 0; + if( pInto && sqlite3ResolveSelfReference(pParse,0,0,pInto,0)==0 ){ + iIntoReg = ++pParse->nMem; + sqlite3ExprCode(pParse, pInto, iIntoReg); + } + sqlite3VdbeAddOp2(v, OP_Vacuum, iDb, iIntoReg); + sqlite3VdbeUsesBtree(v, iDb); + } +build_vacuum_end: + sqlite3ExprDelete(pParse->db, pInto); + return; +} + +/* +** This routine implements the OP_Vacuum opcode of the VDBE. +*/ +SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3RunVacuum( + char **pzErrMsg, /* Write error message here */ + sqlite3 *db, /* Database connection */ + int iDb, /* Which attached DB to vacuum */ + sqlite3_value *pOut /* Write results here, if not NULL. VACUUM INTO */ +){ + int rc = SQLITE_OK; /* Return code from service routines */ + Btree *pMain; /* The database being vacuumed */ + Btree *pTemp; /* The temporary database we vacuum into */ + u32 saved_mDbFlags; /* Saved value of db->mDbFlags */ + u64 saved_flags; /* Saved value of db->flags */ + i64 saved_nChange; /* Saved value of db->nChange */ + i64 saved_nTotalChange; /* Saved value of db->nTotalChange */ + u32 saved_openFlags; /* Saved value of db->openFlags */ + u8 saved_mTrace; /* Saved trace settings */ + Db *pDb = 0; /* Database to detach at end of vacuum */ + int isMemDb; /* True if vacuuming a :memory: database */ + int nRes; /* Bytes of reserved space at the end of each page */ + int nDb; /* Number of attached databases */ + const char *zDbMain; /* Schema name of database to vacuum */ + const char *zOut; /* Name of output file */ + u32 pgflags = PAGER_SYNCHRONOUS_OFF; /* sync flags for output db */ + u64 iRandom; /* Random value used for zDbVacuum[] */ + char zDbVacuum[42]; /* Name of the ATTACH-ed database used for vacuum */ + + + if( !db->autoCommit ){ + sqlite3SetString(pzErrMsg, db, "cannot VACUUM from within a transaction"); + return SQLITE_ERROR; /* IMP: R-12218-18073 */ + } + if( db->nVdbeActive>1 ){ + sqlite3SetString(pzErrMsg, db,"cannot VACUUM - SQL statements in progress"); + return SQLITE_ERROR; /* IMP: R-15610-35227 */ + } + saved_openFlags = db->openFlags; + if( pOut ){ + if( sqlite3_value_type(pOut)!=SQLITE_TEXT ){ + sqlite3SetString(pzErrMsg, db, "non-text filename"); + return SQLITE_ERROR; + } + zOut = (const char*)sqlite3_value_text(pOut); + db->openFlags &= ~SQLITE_OPEN_READONLY; + db->openFlags |= SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE; + }else{ + zOut = ""; + } + + /* Save the current value of the database flags so that it can be + ** restored before returning. Then set the writable-schema flag, and + ** disable CHECK and foreign key constraints. */ + saved_flags = db->flags; + saved_mDbFlags = db->mDbFlags; + saved_nChange = db->nChange; + saved_nTotalChange = db->nTotalChange; + saved_mTrace = db->mTrace; + db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks | SQLITE_Comments + | SQLITE_AttachCreate | SQLITE_AttachWrite; + db->mDbFlags |= DBFLAG_PreferBuiltin | DBFLAG_Vacuum; + db->flags &= ~(u64)(SQLITE_ForeignKeys | SQLITE_ReverseOrder + | SQLITE_Defensive | SQLITE_CountRows); + db->mTrace = 0; + + zDbMain = db->aDb[iDb].zDbSName; + pMain = db->aDb[iDb].pBt; + isMemDb = sqlite3PagerIsMemdb(sqlite3BtreePager(pMain)); + + /* Attach the temporary database as 'vacuum_XXXXXX'. The synchronous pragma + ** can be set to 'off' for this file, as it is not recovered if a crash + ** occurs anyway. The integrity of the database is maintained by a + ** (possibly synchronous) transaction opened on the main database before + ** sqlite3BtreeCopyFile() is called. + ** + ** An optimization would be to use a non-journaled pager. + ** (Later:) I tried setting "PRAGMA vacuum_XXXXXX.journal_mode=OFF" but + ** that actually made the VACUUM run slower. Very little journalling + ** actually occurs when doing a vacuum since the vacuum_db is initially + ** empty. Only the journal header is written. Apparently it takes more + ** time to parse and run the PRAGMA to turn journalling off than it does + ** to write the journal header file. + */ + sqlite3_randomness(sizeof(iRandom),&iRandom); + sqlite3_snprintf(sizeof(zDbVacuum), zDbVacuum, "vacuum_%016llx", iRandom); + nDb = db->nDb; + rc = execSqlF(db, pzErrMsg, "ATTACH %Q AS %s", zOut, zDbVacuum); + db->openFlags = saved_openFlags; + if( rc!=SQLITE_OK ) goto end_of_vacuum; + assert( (db->nDb-1)==nDb ); + pDb = &db->aDb[nDb]; + assert( strcmp(pDb->zDbSName,zDbVacuum)==0 ); + pTemp = pDb->pBt; + if( pOut ){ + sqlite3_file *id = sqlite3PagerFile(sqlite3BtreePager(pTemp)); + i64 sz = 0; + if( id->pMethods!=0 && (sqlite3OsFileSize(id, &sz)!=SQLITE_OK || sz>0) ){ + rc = SQLITE_ERROR; + sqlite3SetString(pzErrMsg, db, "output file already exists"); + goto end_of_vacuum; + } + db->mDbFlags |= DBFLAG_VacuumInto; + + /* For a VACUUM INTO, the pager-flags are set to the same values as + ** they are for the database being vacuumed, except that PAGER_CACHESPILL + ** is always set. */ + pgflags = db->aDb[iDb].safety_level | (db->flags & PAGER_FLAGS_MASK); + } + nRes = sqlite3BtreeGetRequestedReserve(pMain); + + sqlite3BtreeSetCacheSize(pTemp, db->aDb[iDb].pSchema->cache_size); + sqlite3BtreeSetSpillSize(pTemp, sqlite3BtreeSetSpillSize(pMain,0)); + sqlite3BtreeSetPagerFlags(pTemp, pgflags|PAGER_CACHESPILL); + + /* Begin a transaction and take an exclusive lock on the main database + ** file. This is done before the sqlite3BtreeGetPageSize(pMain) call below, + ** to ensure that we do not try to change the page-size on a WAL database. + */ + rc = execSql(db, pzErrMsg, "BEGIN"); + if( rc!=SQLITE_OK ) goto end_of_vacuum; + rc = sqlite3BtreeBeginTrans(pMain, pOut==0 ? 2 : 0, 0); + if( rc!=SQLITE_OK ) goto end_of_vacuum; + + /* Do not attempt to change the page size for a WAL database */ + if( sqlite3PagerGetJournalMode(sqlite3BtreePager(pMain)) + ==PAGER_JOURNALMODE_WAL + && pOut==0 + ){ + db->nextPagesize = 0; + } + + if( sqlite3BtreeSetPageSize(pTemp, sqlite3BtreeGetPageSize(pMain), nRes, 0) + || (!isMemDb && sqlite3BtreeSetPageSize(pTemp, db->nextPagesize, nRes, 0)) + || NEVER(db->mallocFailed) + ){ + rc = SQLITE_NOMEM_BKPT; + goto end_of_vacuum; + } + +#ifndef SQLITE_OMIT_AUTOVACUUM + sqlite3BtreeSetAutoVacuum(pTemp, db->nextAutovac>=0 ? db->nextAutovac : + sqlite3BtreeGetAutoVacuum(pMain)); +#endif + + /* Query the schema of the main database. Create a mirror schema + ** in the temporary database. + */ + db->init.iDb = nDb; /* force new CREATE statements into vacuum_db */ + rc = execSqlF(db, pzErrMsg, + "SELECT sql FROM \"%w\".sqlite_schema" + " WHERE type='table'AND name<>'sqlite_sequence'" + " AND coalesce(rootpage,1)>0", + zDbMain + ); + if( rc!=SQLITE_OK ) goto end_of_vacuum; + rc = execSqlF(db, pzErrMsg, + "SELECT sql FROM \"%w\".sqlite_schema" + " WHERE type='index'", + zDbMain + ); + if( rc!=SQLITE_OK ) goto end_of_vacuum; + db->init.iDb = 0; + + /* Loop through the tables in the main database. For each, do + ** an "INSERT INTO vacuum_db.xxx SELECT * FROM main.xxx;" to copy + ** the contents to the temporary database. + */ + rc = execSqlF(db, pzErrMsg, + "SELECT'INSERT INTO %s.'||quote(name)" + "||' SELECT*FROM\"%w\".'||quote(name)" + "FROM %s.sqlite_schema " + "WHERE type='table'AND coalesce(rootpage,1)>0", + zDbVacuum, zDbMain, zDbVacuum + ); + assert( (db->mDbFlags & DBFLAG_Vacuum)!=0 ); + db->mDbFlags &= ~DBFLAG_Vacuum; + if( rc!=SQLITE_OK ) goto end_of_vacuum; + + /* Copy the triggers, views, and virtual tables from the main database + ** over to the temporary database. None of these objects has any + ** associated storage, so all we have to do is copy their entries + ** from the schema table. + */ + rc = execSqlF(db, pzErrMsg, + "INSERT INTO %s.sqlite_schema" + " SELECT*FROM \"%w\".sqlite_schema" + " WHERE type IN('view','trigger')" + " OR(type='table'AND rootpage=0)", + zDbVacuum, zDbMain + ); + if( rc ) goto end_of_vacuum; + + /* At this point, there is a write transaction open on both the + ** vacuum database and the main database. Assuming no error occurs, + ** both transactions are closed by this block - the main database + ** transaction by sqlite3BtreeCopyFile() and the other by an explicit + ** call to sqlite3BtreeCommit(). + */ + { + u32 meta; + int i; + + /* This array determines which meta meta values are preserved in the + ** vacuum. Even entries are the meta value number and odd entries + ** are an increment to apply to the meta value after the vacuum. + ** The increment is used to increase the schema cookie so that other + ** connections to the same database will know to reread the schema. + */ + static const unsigned char aCopy[] = { + BTREE_SCHEMA_VERSION, 1, /* Add one to the old schema cookie */ + BTREE_DEFAULT_CACHE_SIZE, 0, /* Preserve the default page cache size */ + BTREE_TEXT_ENCODING, 0, /* Preserve the text encoding */ + BTREE_USER_VERSION, 0, /* Preserve the user version */ + BTREE_APPLICATION_ID, 0, /* Preserve the application id */ + }; + + assert( SQLITE_TXN_WRITE==sqlite3BtreeTxnState(pTemp) ); + assert( pOut!=0 || SQLITE_TXN_WRITE==sqlite3BtreeTxnState(pMain) ); + + /* Copy Btree meta values */ + for(i=0; iflags */ + db->init.iDb = 0; + db->mDbFlags = saved_mDbFlags; + db->flags = saved_flags; + db->nChange = saved_nChange; + db->nTotalChange = saved_nTotalChange; + db->mTrace = saved_mTrace; + sqlite3BtreeSetPageSize(pMain, -1, 0, 1); + + /* Currently there is an SQL level transaction open on the vacuum + ** database. No locks are held on any other files (since the main file + ** was committed at the btree level). So it safe to end the transaction + ** by manually setting the autoCommit flag to true and detaching the + ** vacuum database. The vacuum_db journal file is deleted when the pager + ** is closed by the DETACH. + */ + db->autoCommit = 1; + + if( pDb ){ + sqlite3BtreeClose(pDb->pBt); + pDb->pBt = 0; + pDb->pSchema = 0; + } + + /* This both clears the schemas and reduces the size of the db->aDb[] + ** array. */ + sqlite3ResetAllSchemasOfConnection(db); + + return rc; +} + +#endif /* SQLITE_OMIT_VACUUM && SQLITE_OMIT_ATTACH */ + +/************** End of vacuum.c **********************************************/ +/************** Begin file vtab.c ********************************************/ +/* +** 2006 June 10 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code used to help implement virtual tables. +*/ +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* #include "sqliteInt.h" */ + +/* +** Before a virtual table xCreate() or xConnect() method is invoked, the +** sqlite3.pVtabCtx member variable is set to point to an instance of +** this struct allocated on the stack. It is used by the implementation of +** the sqlite3_declare_vtab() and sqlite3_vtab_config() APIs, both of which +** are invoked only from within xCreate and xConnect methods. +*/ +struct VtabCtx { + VTable *pVTable; /* The virtual table being constructed */ + Table *pTab; /* The Table object to which the virtual table belongs */ + VtabCtx *pPrior; /* Parent context (if any) */ + int bDeclared; /* True after sqlite3_declare_vtab() is called */ +}; + +/* +** Construct and install a Module object for a virtual table. When this +** routine is called, it is guaranteed that all appropriate locks are held +** and the module is not already part of the connection. +** +** If there already exists a module with zName, replace it with the new one. +** If pModule==0, then delete the module zName if it exists. +*/ +SQLITE_PRIVATE Module *sqlite3VtabCreateModule( + sqlite3 *db, /* Database in which module is registered */ + const char *zName, /* Name assigned to this module */ + const sqlite3_module *pModule, /* The definition of the module */ + void *pAux, /* Context pointer for xCreate/xConnect */ + void (*xDestroy)(void *) /* Module destructor function */ +){ + Module *pMod; + Module *pDel; + char *zCopy; + if( pModule==0 ){ + zCopy = (char*)zName; + pMod = 0; + }else{ + int nName = sqlite3Strlen30(zName); + pMod = (Module *)sqlite3Malloc(sizeof(Module) + nName + 1); + if( pMod==0 ){ + sqlite3OomFault(db); + return 0; + } + zCopy = (char *)(&pMod[1]); + memcpy(zCopy, zName, nName+1); + pMod->zName = zCopy; + pMod->pModule = pModule; + pMod->pAux = pAux; + pMod->xDestroy = xDestroy; + pMod->pEpoTab = 0; + pMod->nRefModule = 1; + } + pDel = (Module *)sqlite3HashInsert(&db->aModule,zCopy,(void*)pMod); + if( pDel ){ + if( pDel==pMod ){ + sqlite3OomFault(db); + sqlite3DbFree(db, pDel); + pMod = 0; + }else{ + sqlite3VtabEponymousTableClear(db, pDel); + sqlite3VtabModuleUnref(db, pDel); + } + } + return pMod; +} + +/* +** The actual function that does the work of creating a new module. +** This function implements the sqlite3_create_module() and +** sqlite3_create_module_v2() interfaces. +*/ +static int createModule( + sqlite3 *db, /* Database in which module is registered */ + const char *zName, /* Name assigned to this module */ + const sqlite3_module *pModule, /* The definition of the module */ + void *pAux, /* Context pointer for xCreate/xConnect */ + void (*xDestroy)(void *) /* Module destructor function */ +){ + int rc = SQLITE_OK; + + sqlite3_mutex_enter(db->mutex); + (void)sqlite3VtabCreateModule(db, zName, pModule, pAux, xDestroy); + rc = sqlite3ApiExit(db, rc); + if( rc!=SQLITE_OK && xDestroy ) xDestroy(pAux); + sqlite3_mutex_leave(db->mutex); + return rc; +} + + +/* +** External API function used to create a new virtual-table module. +*/ +SQLITE_API int sqlite3_create_module( + sqlite3 *db, /* Database in which module is registered */ + const char *zName, /* Name assigned to this module */ + const sqlite3_module *pModule, /* The definition of the module */ + void *pAux /* Context pointer for xCreate/xConnect */ +){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT; +#endif + return createModule(db, zName, pModule, pAux, 0); +} + +/* +** External API function used to create a new virtual-table module. +*/ +SQLITE_API int sqlite3_create_module_v2( + sqlite3 *db, /* Database in which module is registered */ + const char *zName, /* Name assigned to this module */ + const sqlite3_module *pModule, /* The definition of the module */ + void *pAux, /* Context pointer for xCreate/xConnect */ + void (*xDestroy)(void *) /* Module destructor function */ +){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT; +#endif + return createModule(db, zName, pModule, pAux, xDestroy); +} + +/* +** External API to drop all virtual-table modules, except those named +** on the azNames list. +*/ +SQLITE_API int sqlite3_drop_modules(sqlite3 *db, const char** azNames){ + HashElem *pThis, *pNext; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + for(pThis=sqliteHashFirst(&db->aModule); pThis; pThis=pNext){ + Module *pMod = (Module*)sqliteHashData(pThis); + pNext = sqliteHashNext(pThis); + if( azNames ){ + int ii; + for(ii=0; azNames[ii]!=0 && strcmp(azNames[ii],pMod->zName)!=0; ii++){} + if( azNames[ii]!=0 ) continue; + } + createModule(db, pMod->zName, 0, 0, 0); + } + return SQLITE_OK; +} + +/* +** Decrement the reference count on a Module object. Destroy the +** module when the reference count reaches zero. +*/ +SQLITE_PRIVATE void sqlite3VtabModuleUnref(sqlite3 *db, Module *pMod){ + assert( pMod->nRefModule>0 ); + pMod->nRefModule--; + if( pMod->nRefModule==0 ){ + if( pMod->xDestroy ){ + pMod->xDestroy(pMod->pAux); + } + assert( pMod->pEpoTab==0 ); + sqlite3DbFree(db, pMod); + } +} + +/* +** Lock the virtual table so that it cannot be disconnected. +** Locks nest. Every lock should have a corresponding unlock. +** If an unlock is omitted, resources leaks will occur. +** +** If a disconnect is attempted while a virtual table is locked, +** the disconnect is deferred until all locks have been removed. +*/ +SQLITE_PRIVATE void sqlite3VtabLock(VTable *pVTab){ + pVTab->nRef++; +} + + +/* +** pTab is a pointer to a Table structure representing a virtual-table. +** Return a pointer to the VTable object used by connection db to access +** this virtual-table, if one has been created, or NULL otherwise. +*/ +SQLITE_PRIVATE VTable *sqlite3GetVTable(sqlite3 *db, Table *pTab){ + VTable *pVtab; + assert( IsVirtual(pTab) ); + for(pVtab=pTab->u.vtab.p; pVtab && pVtab->db!=db; pVtab=pVtab->pNext); + return pVtab; +} + +/* +** Decrement the ref-count on a virtual table object. When the ref-count +** reaches zero, call the xDisconnect() method to delete the object. +*/ +SQLITE_PRIVATE void sqlite3VtabUnlock(VTable *pVTab){ + sqlite3 *db = pVTab->db; + + assert( db ); + assert( pVTab->nRef>0 ); + assert( db->eOpenState==SQLITE_STATE_OPEN + || db->eOpenState==SQLITE_STATE_ZOMBIE ); + + pVTab->nRef--; + if( pVTab->nRef==0 ){ + sqlite3_vtab *p = pVTab->pVtab; + if( p ){ + p->pModule->xDisconnect(p); + } + sqlite3VtabModuleUnref(pVTab->db, pVTab->pMod); + sqlite3DbFree(db, pVTab); + } +} + +/* +** Table p is a virtual table. This function moves all elements in the +** p->u.vtab.p list to the sqlite3.pDisconnect lists of their associated +** database connections to be disconnected at the next opportunity. +** Except, if argument db is not NULL, then the entry associated with +** connection db is left in the p->u.vtab.p list. +*/ +static VTable *vtabDisconnectAll(sqlite3 *db, Table *p){ + VTable *pRet = 0; + VTable *pVTable; + + assert( IsVirtual(p) ); + pVTable = p->u.vtab.p; + p->u.vtab.p = 0; + + /* Assert that the mutex (if any) associated with the BtShared database + ** that contains table p is held by the caller. See header comments + ** above function sqlite3VtabUnlockList() for an explanation of why + ** this makes it safe to access the sqlite3.pDisconnect list of any + ** database connection that may have an entry in the p->u.vtab.p list. + */ + assert( db==0 || sqlite3SchemaMutexHeld(db, 0, p->pSchema) ); + + while( pVTable ){ + sqlite3 *db2 = pVTable->db; + VTable *pNext = pVTable->pNext; + assert( db2 ); + if( db2==db ){ + pRet = pVTable; + p->u.vtab.p = pRet; + pRet->pNext = 0; + }else{ + pVTable->pNext = db2->pDisconnect; + db2->pDisconnect = pVTable; + } + pVTable = pNext; + } + + assert( !db || pRet ); + return pRet; +} + +/* +** Table *p is a virtual table. This function removes the VTable object +** for table *p associated with database connection db from the linked +** list in p->pVTab. It also decrements the VTable ref count. This is +** used when closing database connection db to free all of its VTable +** objects without disturbing the rest of the Schema object (which may +** be being used by other shared-cache connections). +*/ +SQLITE_PRIVATE void sqlite3VtabDisconnect(sqlite3 *db, Table *p){ + VTable **ppVTab; + + assert( IsVirtual(p) ); + assert( sqlite3BtreeHoldsAllMutexes(db) ); + assert( sqlite3_mutex_held(db->mutex) ); + + for(ppVTab=&p->u.vtab.p; *ppVTab; ppVTab=&(*ppVTab)->pNext){ + if( (*ppVTab)->db==db ){ + VTable *pVTab = *ppVTab; + *ppVTab = pVTab->pNext; + sqlite3VtabUnlock(pVTab); + break; + } + } +} + + +/* +** Disconnect all the virtual table objects in the sqlite3.pDisconnect list. +** +** This function may only be called when the mutexes associated with all +** shared b-tree databases opened using connection db are held by the +** caller. This is done to protect the sqlite3.pDisconnect list. The +** sqlite3.pDisconnect list is accessed only as follows: +** +** 1) By this function. In this case, all BtShared mutexes and the mutex +** associated with the database handle itself must be held. +** +** 2) By function vtabDisconnectAll(), when it adds a VTable entry to +** the sqlite3.pDisconnect list. In this case either the BtShared mutex +** associated with the database the virtual table is stored in is held +** or, if the virtual table is stored in a non-sharable database, then +** the database handle mutex is held. +** +** As a result, a sqlite3.pDisconnect cannot be accessed simultaneously +** by multiple threads. It is thread-safe. +*/ +SQLITE_PRIVATE void sqlite3VtabUnlockList(sqlite3 *db){ + VTable *p = db->pDisconnect; + + assert( sqlite3BtreeHoldsAllMutexes(db) ); + assert( sqlite3_mutex_held(db->mutex) ); + + if( p ){ + db->pDisconnect = 0; + do { + VTable *pNext = p->pNext; + sqlite3VtabUnlock(p); + p = pNext; + }while( p ); + } +} + +/* +** Clear any and all virtual-table information from the Table record. +** This routine is called, for example, just before deleting the Table +** record. +** +** Since it is a virtual-table, the Table structure contains a pointer +** to the head of a linked list of VTable structures. Each VTable +** structure is associated with a single sqlite3* user of the schema. +** The reference count of the VTable structure associated with database +** connection db is decremented immediately (which may lead to the +** structure being xDisconnected and free). Any other VTable structures +** in the list are moved to the sqlite3.pDisconnect list of the associated +** database connection. +*/ +SQLITE_PRIVATE void sqlite3VtabClear(sqlite3 *db, Table *p){ + assert( IsVirtual(p) ); + assert( db!=0 ); + if( db->pnBytesFreed==0 ) vtabDisconnectAll(0, p); + if( p->u.vtab.azArg ){ + int i; + for(i=0; iu.vtab.nArg; i++){ + if( i!=1 ) sqlite3DbFree(db, p->u.vtab.azArg[i]); + } + sqlite3DbFree(db, p->u.vtab.azArg); + } +} + +/* +** Add a new module argument to pTable->u.vtab.azArg[]. +** The string is not copied - the pointer is stored. The +** string will be freed automatically when the table is +** deleted. +*/ +static void addModuleArgument(Parse *pParse, Table *pTable, char *zArg){ + sqlite3_int64 nBytes; + char **azModuleArg; + sqlite3 *db = pParse->db; + + assert( IsVirtual(pTable) ); + nBytes = sizeof(char *)*(2+pTable->u.vtab.nArg); + if( pTable->u.vtab.nArg+3>=db->aLimit[SQLITE_LIMIT_COLUMN] ){ + sqlite3ErrorMsg(pParse, "too many columns on %s", pTable->zName); + } + azModuleArg = sqlite3DbRealloc(db, pTable->u.vtab.azArg, nBytes); + if( azModuleArg==0 ){ + sqlite3DbFree(db, zArg); + }else{ + int i = pTable->u.vtab.nArg++; + azModuleArg[i] = zArg; + azModuleArg[i+1] = 0; + pTable->u.vtab.azArg = azModuleArg; + } +} + +/* +** The parser calls this routine when it first sees a CREATE VIRTUAL TABLE +** statement. The module name has been parsed, but the optional list +** of parameters that follow the module name are still pending. +*/ +SQLITE_PRIVATE void sqlite3VtabBeginParse( + Parse *pParse, /* Parsing context */ + Token *pName1, /* Name of new table, or database name */ + Token *pName2, /* Name of new table or NULL */ + Token *pModuleName, /* Name of the module for the virtual table */ + int ifNotExists /* No error if the table already exists */ +){ + Table *pTable; /* The new virtual table */ + sqlite3 *db; /* Database connection */ + + sqlite3StartTable(pParse, pName1, pName2, 0, 0, 1, ifNotExists); + pTable = pParse->pNewTable; + if( pTable==0 ) return; + assert( 0==pTable->pIndex ); + pTable->eTabType = TABTYP_VTAB; + + db = pParse->db; + + assert( pTable->u.vtab.nArg==0 ); + addModuleArgument(pParse, pTable, sqlite3NameFromToken(db, pModuleName)); + addModuleArgument(pParse, pTable, 0); + addModuleArgument(pParse, pTable, sqlite3DbStrDup(db, pTable->zName)); + assert( (pParse->sNameToken.z==pName2->z && pName2->z!=0) + || (pParse->sNameToken.z==pName1->z && pName2->z==0) + ); + pParse->sNameToken.n = (int)( + &pModuleName->z[pModuleName->n] - pParse->sNameToken.z + ); + +#ifndef SQLITE_OMIT_AUTHORIZATION + /* Creating a virtual table invokes the authorization callback twice. + ** The first invocation, to obtain permission to INSERT a row into the + ** sqlite_schema table, has already been made by sqlite3StartTable(). + ** The second call, to obtain permission to create the table, is made now. + */ + if( pTable->u.vtab.azArg ){ + int iDb = sqlite3SchemaToIndex(db, pTable->pSchema); + assert( iDb>=0 ); /* The database the table is being created in */ + sqlite3AuthCheck(pParse, SQLITE_CREATE_VTABLE, pTable->zName, + pTable->u.vtab.azArg[0], pParse->db->aDb[iDb].zDbSName); + } +#endif +} + +/* +** This routine takes the module argument that has been accumulating +** in pParse->zArg[] and appends it to the list of arguments on the +** virtual table currently under construction in pParse->pTable. +*/ +static void addArgumentToVtab(Parse *pParse){ + if( pParse->sArg.z && pParse->pNewTable ){ + const char *z = (const char*)pParse->sArg.z; + int n = pParse->sArg.n; + sqlite3 *db = pParse->db; + addModuleArgument(pParse, pParse->pNewTable, sqlite3DbStrNDup(db, z, n)); + } +} + +/* +** The parser calls this routine after the CREATE VIRTUAL TABLE statement +** has been completely parsed. +*/ +SQLITE_PRIVATE void sqlite3VtabFinishParse(Parse *pParse, Token *pEnd){ + Table *pTab = pParse->pNewTable; /* The table being constructed */ + sqlite3 *db = pParse->db; /* The database connection */ + + if( pTab==0 ) return; + assert( IsVirtual(pTab) ); + addArgumentToVtab(pParse); + pParse->sArg.z = 0; + if( pTab->u.vtab.nArg<1 ) return; + + /* If the CREATE VIRTUAL TABLE statement is being entered for the + ** first time (in other words if the virtual table is actually being + ** created now instead of just being read out of sqlite_schema) then + ** do additional initialization work and store the statement text + ** in the sqlite_schema table. + */ + if( !db->init.busy ){ + char *zStmt; + char *zWhere; + int iDb; + int iReg; + Vdbe *v; + + sqlite3MayAbort(pParse); + + /* Compute the complete text of the CREATE VIRTUAL TABLE statement */ + if( pEnd ){ + pParse->sNameToken.n = (int)(pEnd->z - pParse->sNameToken.z) + pEnd->n; + } + zStmt = sqlite3MPrintf(db, "CREATE VIRTUAL TABLE %T", &pParse->sNameToken); + + /* A slot for the record has already been allocated in the + ** schema table. We just need to update that slot with all + ** the information we've collected. + ** + ** The VM register number pParse->u1.cr.regRowid holds the rowid of an + ** entry in the sqlite_schema table that was created for this vtab + ** by sqlite3StartTable(). + */ + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + assert( pParse->isCreate ); + sqlite3NestedParse(pParse, + "UPDATE %Q." LEGACY_SCHEMA_TABLE " " + "SET type='table', name=%Q, tbl_name=%Q, rootpage=0, sql=%Q " + "WHERE rowid=#%d", + db->aDb[iDb].zDbSName, + pTab->zName, + pTab->zName, + zStmt, + pParse->u1.cr.regRowid + ); + v = sqlite3GetVdbe(pParse); + sqlite3ChangeCookie(pParse, iDb); + + sqlite3VdbeAddOp0(v, OP_Expire); + zWhere = sqlite3MPrintf(db, "name=%Q AND sql=%Q", pTab->zName, zStmt); + sqlite3VdbeAddParseSchemaOp(v, iDb, zWhere, 0); + sqlite3DbFree(db, zStmt); + + iReg = ++pParse->nMem; + sqlite3VdbeLoadString(v, iReg, pTab->zName); + sqlite3VdbeAddOp2(v, OP_VCreate, iDb, iReg); + }else{ + /* If we are rereading the sqlite_schema table create the in-memory + ** record of the table. */ + Table *pOld; + Schema *pSchema = pTab->pSchema; + const char *zName = pTab->zName; + assert( zName!=0 ); + sqlite3MarkAllShadowTablesOf(db, pTab); + pOld = sqlite3HashInsert(&pSchema->tblHash, zName, pTab); + if( pOld ){ + sqlite3OomFault(db); + assert( pTab==pOld ); /* Malloc must have failed inside HashInsert() */ + return; + } + pParse->pNewTable = 0; + } +} + +/* +** The parser calls this routine when it sees the first token +** of an argument to the module name in a CREATE VIRTUAL TABLE statement. +*/ +SQLITE_PRIVATE void sqlite3VtabArgInit(Parse *pParse){ + addArgumentToVtab(pParse); + pParse->sArg.z = 0; + pParse->sArg.n = 0; +} + +/* +** The parser calls this routine for each token after the first token +** in an argument to the module name in a CREATE VIRTUAL TABLE statement. +*/ +SQLITE_PRIVATE void sqlite3VtabArgExtend(Parse *pParse, Token *p){ + Token *pArg = &pParse->sArg; + if( pArg->z==0 ){ + pArg->z = p->z; + pArg->n = p->n; + }else{ + assert(pArg->z <= p->z); + pArg->n = (int)(&p->z[p->n] - pArg->z); + } +} + +/* +** Invoke a virtual table constructor (either xCreate or xConnect). The +** pointer to the function to invoke is passed as the fourth parameter +** to this procedure. +*/ +static int vtabCallConstructor( + sqlite3 *db, + Table *pTab, + Module *pMod, + int (*xConstruct)(sqlite3*,void*,int,const char*const*,sqlite3_vtab**,char**), + char **pzErr +){ + VtabCtx sCtx; + VTable *pVTable; + int rc; + const char *const*azArg; + int nArg = pTab->u.vtab.nArg; + char *zErr = 0; + char *zModuleName; + int iDb; + VtabCtx *pCtx; + + assert( IsVirtual(pTab) ); + azArg = (const char *const*)pTab->u.vtab.azArg; + + /* Check that the virtual-table is not already being initialized */ + for(pCtx=db->pVtabCtx; pCtx; pCtx=pCtx->pPrior){ + if( pCtx->pTab==pTab ){ + *pzErr = sqlite3MPrintf(db, + "vtable constructor called recursively: %s", pTab->zName + ); + return SQLITE_LOCKED; + } + } + + zModuleName = sqlite3DbStrDup(db, pTab->zName); + if( !zModuleName ){ + return SQLITE_NOMEM_BKPT; + } + + pVTable = sqlite3MallocZero(sizeof(VTable)); + if( !pVTable ){ + sqlite3OomFault(db); + sqlite3DbFree(db, zModuleName); + return SQLITE_NOMEM_BKPT; + } + pVTable->db = db; + pVTable->pMod = pMod; + pVTable->eVtabRisk = SQLITE_VTABRISK_Normal; + + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + pTab->u.vtab.azArg[1] = db->aDb[iDb].zDbSName; + + /* Invoke the virtual table constructor */ + assert( &db->pVtabCtx ); + assert( xConstruct ); + sCtx.pTab = pTab; + sCtx.pVTable = pVTable; + sCtx.pPrior = db->pVtabCtx; + sCtx.bDeclared = 0; + db->pVtabCtx = &sCtx; + pTab->nTabRef++; + rc = xConstruct(db, pMod->pAux, nArg, azArg, &pVTable->pVtab, &zErr); + assert( pTab!=0 ); + assert( pTab->nTabRef>1 || rc!=SQLITE_OK ); + sqlite3DeleteTable(db, pTab); + db->pVtabCtx = sCtx.pPrior; + if( rc==SQLITE_NOMEM ) sqlite3OomFault(db); + assert( sCtx.pTab==pTab ); + + if( SQLITE_OK!=rc ){ + if( zErr==0 ){ + *pzErr = sqlite3MPrintf(db, "vtable constructor failed: %s", zModuleName); + }else { + *pzErr = sqlite3MPrintf(db, "%s", zErr); + sqlite3_free(zErr); + } + sqlite3DbFree(db, pVTable); + }else if( ALWAYS(pVTable->pVtab) ){ + /* Justification of ALWAYS(): A correct vtab constructor must allocate + ** the sqlite3_vtab object if successful. */ + memset(pVTable->pVtab, 0, sizeof(pVTable->pVtab[0])); + pVTable->pVtab->pModule = pMod->pModule; + pMod->nRefModule++; + pVTable->nRef = 1; + if( sCtx.bDeclared==0 ){ + const char *zFormat = "vtable constructor did not declare schema: %s"; + *pzErr = sqlite3MPrintf(db, zFormat, zModuleName); + sqlite3VtabUnlock(pVTable); + rc = SQLITE_ERROR; + }else{ + int iCol; + u16 oooHidden = 0; + /* If everything went according to plan, link the new VTable structure + ** into the linked list headed by pTab->u.vtab.p. Then loop through the + ** columns of the table to see if any of them contain the token "hidden". + ** If so, set the Column COLFLAG_HIDDEN flag and remove the token from + ** the type string. */ + pVTable->pNext = pTab->u.vtab.p; + pTab->u.vtab.p = pVTable; + + for(iCol=0; iColnCol; iCol++){ + char *zType = sqlite3ColumnType(&pTab->aCol[iCol], ""); + int nType; + int i = 0; + nType = sqlite3Strlen30(zType); + for(i=0; i0 ){ + assert(zType[i-1]==' '); + zType[i-1] = '\0'; + } + pTab->aCol[iCol].colFlags |= COLFLAG_HIDDEN; + pTab->tabFlags |= TF_HasHidden; + oooHidden = TF_OOOHidden; + }else{ + pTab->tabFlags |= oooHidden; + } + } + } + } + + sqlite3DbFree(db, zModuleName); + return rc; +} + +/* +** This function is invoked by the parser to call the xConnect() method +** of the virtual table pTab. If an error occurs, an error code is returned +** and an error left in pParse. +** +** This call is a no-op if table pTab is not a virtual table. +*/ +SQLITE_PRIVATE int sqlite3VtabCallConnect(Parse *pParse, Table *pTab){ + sqlite3 *db = pParse->db; + const char *zMod; + Module *pMod; + int rc; + + assert( pTab ); + assert( IsVirtual(pTab) ); + if( sqlite3GetVTable(db, pTab) ){ + return SQLITE_OK; + } + + /* Locate the required virtual table module */ + zMod = pTab->u.vtab.azArg[0]; + pMod = (Module*)sqlite3HashFind(&db->aModule, zMod); + + if( !pMod ){ + const char *zModule = pTab->u.vtab.azArg[0]; + sqlite3ErrorMsg(pParse, "no such module: %s", zModule); + rc = SQLITE_ERROR; + }else{ + char *zErr = 0; + rc = vtabCallConstructor(db, pTab, pMod, pMod->pModule->xConnect, &zErr); + if( rc!=SQLITE_OK ){ + sqlite3ErrorMsg(pParse, "%s", zErr); + pParse->rc = rc; + } + sqlite3DbFree(db, zErr); + } + + return rc; +} +/* +** Grow the db->aVTrans[] array so that there is room for at least one +** more v-table. Return SQLITE_NOMEM if a malloc fails, or SQLITE_OK otherwise. +*/ +static int growVTrans(sqlite3 *db){ + const int ARRAY_INCR = 5; + + /* Grow the sqlite3.aVTrans array if required */ + if( (db->nVTrans%ARRAY_INCR)==0 ){ + VTable **aVTrans; + sqlite3_int64 nBytes = sizeof(sqlite3_vtab*)* + ((sqlite3_int64)db->nVTrans + ARRAY_INCR); + aVTrans = sqlite3DbRealloc(db, (void *)db->aVTrans, nBytes); + if( !aVTrans ){ + return SQLITE_NOMEM_BKPT; + } + memset(&aVTrans[db->nVTrans], 0, sizeof(sqlite3_vtab *)*ARRAY_INCR); + db->aVTrans = aVTrans; + } + + return SQLITE_OK; +} + +/* +** Add the virtual table pVTab to the array sqlite3.aVTrans[]. Space should +** have already been reserved using growVTrans(). +*/ +static void addToVTrans(sqlite3 *db, VTable *pVTab){ + /* Add pVtab to the end of sqlite3.aVTrans */ + db->aVTrans[db->nVTrans++] = pVTab; + sqlite3VtabLock(pVTab); +} + +/* +** This function is invoked by the vdbe to call the xCreate method +** of the virtual table named zTab in database iDb. +** +** If an error occurs, *pzErr is set to point to an English language +** description of the error and an SQLITE_XXX error code is returned. +** In this case the caller must call sqlite3DbFree(db, ) on *pzErr. +*/ +SQLITE_PRIVATE int sqlite3VtabCallCreate(sqlite3 *db, int iDb, const char *zTab, char **pzErr){ + int rc = SQLITE_OK; + Table *pTab; + Module *pMod; + const char *zMod; + + pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zDbSName); + assert( pTab && IsVirtual(pTab) && !pTab->u.vtab.p ); + + /* Locate the required virtual table module */ + zMod = pTab->u.vtab.azArg[0]; + pMod = (Module*)sqlite3HashFind(&db->aModule, zMod); + + /* If the module has been registered and includes a Create method, + ** invoke it now. If the module has not been registered, return an + ** error. Otherwise, do nothing. + */ + if( pMod==0 || pMod->pModule->xCreate==0 || pMod->pModule->xDestroy==0 ){ + *pzErr = sqlite3MPrintf(db, "no such module: %s", zMod); + rc = SQLITE_ERROR; + }else{ + rc = vtabCallConstructor(db, pTab, pMod, pMod->pModule->xCreate, pzErr); + } + + /* Justification of ALWAYS(): The xConstructor method is required to + ** create a valid sqlite3_vtab if it returns SQLITE_OK. */ + if( rc==SQLITE_OK && ALWAYS(sqlite3GetVTable(db, pTab)) ){ + rc = growVTrans(db); + if( rc==SQLITE_OK ){ + addToVTrans(db, sqlite3GetVTable(db, pTab)); + } + } + + return rc; +} + +/* +** This function is used to set the schema of a virtual table. It is only +** valid to call this function from within the xCreate() or xConnect() of a +** virtual table module. +*/ +SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){ + VtabCtx *pCtx; + int rc = SQLITE_OK; + Table *pTab; + Parse sParse; + int initBusy; + int i; + const unsigned char *z; + static const u8 aKeyword[] = { TK_CREATE, TK_TABLE, 0 }; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || zCreateTable==0 ){ + return SQLITE_MISUSE_BKPT; + } +#endif + + /* Verify that the first two keywords in the CREATE TABLE statement + ** really are "CREATE" and "TABLE". If this is not the case, then + ** sqlite3_declare_vtab() is being misused. + */ + z = (const unsigned char*)zCreateTable; + for(i=0; aKeyword[i]; i++){ + int tokenType = 0; + do{ + z += sqlite3GetToken(z, &tokenType); + }while( tokenType==TK_SPACE || tokenType==TK_COMMENT ); + if( tokenType!=aKeyword[i] ){ + sqlite3ErrorWithMsg(db, SQLITE_ERROR, "syntax error"); + return SQLITE_ERROR; + } + } + + sqlite3_mutex_enter(db->mutex); + pCtx = db->pVtabCtx; + if( !pCtx || pCtx->bDeclared ){ + sqlite3Error(db, SQLITE_MISUSE_BKPT); + sqlite3_mutex_leave(db->mutex); + return SQLITE_MISUSE_BKPT; + } + + pTab = pCtx->pTab; + assert( IsVirtual(pTab) ); + + sqlite3ParseObjectInit(&sParse, db); + sParse.eParseMode = PARSE_MODE_DECLARE_VTAB; + sParse.disableTriggers = 1; + /* We should never be able to reach this point while loading the + ** schema. Nevertheless, defend against that (turn off db->init.busy) + ** in case a bug arises. */ + assert( db->init.busy==0 ); + initBusy = db->init.busy; + db->init.busy = 0; + sParse.nQueryLoop = 1; + if( SQLITE_OK==sqlite3RunParser(&sParse, zCreateTable) ){ + assert( sParse.pNewTable!=0 ); + assert( !db->mallocFailed ); + assert( IsOrdinaryTable(sParse.pNewTable) ); + assert( sParse.zErrMsg==0 ); + if( !pTab->aCol ){ + Table *pNew = sParse.pNewTable; + Index *pIdx; + pTab->aCol = pNew->aCol; + assert( IsOrdinaryTable(pNew) ); + sqlite3ExprListDelete(db, pNew->u.tab.pDfltList); + pTab->nNVCol = pTab->nCol = pNew->nCol; + pTab->tabFlags |= pNew->tabFlags & (TF_WithoutRowid|TF_NoVisibleRowid); + pNew->nCol = 0; + pNew->aCol = 0; + assert( pTab->pIndex==0 ); + assert( HasRowid(pNew) || sqlite3PrimaryKeyIndex(pNew)!=0 ); + if( !HasRowid(pNew) + && pCtx->pVTable->pMod->pModule->xUpdate!=0 + && sqlite3PrimaryKeyIndex(pNew)->nKeyCol!=1 + ){ + /* WITHOUT ROWID virtual tables must either be read-only (xUpdate==0) + ** or else must have a single-column PRIMARY KEY */ + rc = SQLITE_ERROR; + } + pIdx = pNew->pIndex; + if( pIdx ){ + assert( pIdx->pNext==0 ); + pTab->pIndex = pIdx; + pNew->pIndex = 0; + pIdx->pTable = pTab; + } + } + pCtx->bDeclared = 1; + }else{ + sqlite3ErrorWithMsg(db, SQLITE_ERROR, + (sParse.zErrMsg ? "%s" : 0), sParse.zErrMsg); + sqlite3DbFree(db, sParse.zErrMsg); + rc = SQLITE_ERROR; + } + sParse.eParseMode = PARSE_MODE_NORMAL; + + if( sParse.pVdbe ){ + sqlite3VdbeFinalize(sParse.pVdbe); + } + sqlite3DeleteTable(db, sParse.pNewTable); + sqlite3ParseObjectReset(&sParse); + db->init.busy = initBusy; + + assert( (rc&0xff)==rc ); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/* +** This function is invoked by the vdbe to call the xDestroy method +** of the virtual table named zTab in database iDb. This occurs +** when a DROP TABLE is mentioned. +** +** This call is a no-op if zTab is not a virtual table. +*/ +SQLITE_PRIVATE int sqlite3VtabCallDestroy(sqlite3 *db, int iDb, const char *zTab){ + int rc = SQLITE_OK; + Table *pTab; + + pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zDbSName); + if( ALWAYS(pTab!=0) + && ALWAYS(IsVirtual(pTab)) + && ALWAYS(pTab->u.vtab.p!=0) + ){ + VTable *p; + int (*xDestroy)(sqlite3_vtab *); + for(p=pTab->u.vtab.p; p; p=p->pNext){ + assert( p->pVtab ); + if( p->pVtab->nRef>0 ){ + return SQLITE_LOCKED; + } + } + p = vtabDisconnectAll(db, pTab); + xDestroy = p->pMod->pModule->xDestroy; + if( xDestroy==0 ) xDestroy = p->pMod->pModule->xDisconnect; + assert( xDestroy!=0 ); + pTab->nTabRef++; + rc = xDestroy(p->pVtab); + /* Remove the sqlite3_vtab* from the aVTrans[] array, if applicable */ + if( rc==SQLITE_OK ){ + assert( pTab->u.vtab.p==p && p->pNext==0 ); + p->pVtab = 0; + pTab->u.vtab.p = 0; + sqlite3VtabUnlock(p); + } + sqlite3DeleteTable(db, pTab); + } + + return rc; +} + +/* +** This function invokes either the xRollback or xCommit method +** of each of the virtual tables in the sqlite3.aVTrans array. The method +** called is identified by the second argument, "offset", which is +** the offset of the method to call in the sqlite3_module structure. +** +** The array is cleared after invoking the callbacks. +*/ +static void callFinaliser(sqlite3 *db, int offset){ + int i; + if( db->aVTrans ){ + VTable **aVTrans = db->aVTrans; + db->aVTrans = 0; + for(i=0; inVTrans; i++){ + VTable *pVTab = aVTrans[i]; + sqlite3_vtab *p = pVTab->pVtab; + if( p ){ + int (*x)(sqlite3_vtab *); + x = *(int (**)(sqlite3_vtab *))((char *)p->pModule + offset); + if( x ) x(p); + } + pVTab->iSavepoint = 0; + sqlite3VtabUnlock(pVTab); + } + sqlite3DbFree(db, aVTrans); + db->nVTrans = 0; + } +} + +/* +** Invoke the xSync method of all virtual tables in the sqlite3.aVTrans +** array. Return the error code for the first error that occurs, or +** SQLITE_OK if all xSync operations are successful. +** +** If an error message is available, leave it in p->zErrMsg. +*/ +SQLITE_PRIVATE int sqlite3VtabSync(sqlite3 *db, Vdbe *p){ + int i; + int rc = SQLITE_OK; + VTable **aVTrans = db->aVTrans; + + db->aVTrans = 0; + for(i=0; rc==SQLITE_OK && inVTrans; i++){ + int (*x)(sqlite3_vtab *); + sqlite3_vtab *pVtab = aVTrans[i]->pVtab; + if( pVtab && (x = pVtab->pModule->xSync)!=0 ){ + rc = x(pVtab); + sqlite3VtabImportErrmsg(p, pVtab); + } + } + db->aVTrans = aVTrans; + return rc; +} + +/* +** Invoke the xRollback method of all virtual tables in the +** sqlite3.aVTrans array. Then clear the array itself. +*/ +SQLITE_PRIVATE int sqlite3VtabRollback(sqlite3 *db){ + callFinaliser(db, offsetof(sqlite3_module,xRollback)); + return SQLITE_OK; +} + +/* +** Invoke the xCommit method of all virtual tables in the +** sqlite3.aVTrans array. Then clear the array itself. +*/ +SQLITE_PRIVATE int sqlite3VtabCommit(sqlite3 *db){ + callFinaliser(db, offsetof(sqlite3_module,xCommit)); + return SQLITE_OK; +} + +/* +** If the virtual table pVtab supports the transaction interface +** (xBegin/xRollback/xCommit and optionally xSync) and a transaction is +** not currently open, invoke the xBegin method now. +** +** If the xBegin call is successful, place the sqlite3_vtab pointer +** in the sqlite3.aVTrans array. +*/ +SQLITE_PRIVATE int sqlite3VtabBegin(sqlite3 *db, VTable *pVTab){ + int rc = SQLITE_OK; + const sqlite3_module *pModule; + + /* Special case: If db->aVTrans is NULL and db->nVTrans is greater + ** than zero, then this function is being called from within a + ** virtual module xSync() callback. It is illegal to write to + ** virtual module tables in this case, so return SQLITE_LOCKED. + */ + if( sqlite3VtabInSync(db) ){ + return SQLITE_LOCKED; + } + if( !pVTab ){ + return SQLITE_OK; + } + pModule = pVTab->pVtab->pModule; + + if( pModule->xBegin ){ + int i; + + /* If pVtab is already in the aVTrans array, return early */ + for(i=0; inVTrans; i++){ + if( db->aVTrans[i]==pVTab ){ + return SQLITE_OK; + } + } + + /* Invoke the xBegin method. If successful, add the vtab to the + ** sqlite3.aVTrans[] array. */ + rc = growVTrans(db); + if( rc==SQLITE_OK ){ + rc = pModule->xBegin(pVTab->pVtab); + if( rc==SQLITE_OK ){ + int iSvpt = db->nStatement + db->nSavepoint; + addToVTrans(db, pVTab); + if( iSvpt && pModule->xSavepoint ){ + pVTab->iSavepoint = iSvpt; + rc = pModule->xSavepoint(pVTab->pVtab, iSvpt-1); + } + } + } + } + return rc; +} + +/* +** Invoke either the xSavepoint, xRollbackTo or xRelease method of all +** virtual tables that currently have an open transaction. Pass iSavepoint +** as the second argument to the virtual table method invoked. +** +** If op is SAVEPOINT_BEGIN, the xSavepoint method is invoked. If it is +** SAVEPOINT_ROLLBACK, the xRollbackTo method. Otherwise, if op is +** SAVEPOINT_RELEASE, then the xRelease method of each virtual table with +** an open transaction is invoked. +** +** If any virtual table method returns an error code other than SQLITE_OK, +** processing is abandoned and the error returned to the caller of this +** function immediately. If all calls to virtual table methods are successful, +** SQLITE_OK is returned. +*/ +SQLITE_PRIVATE int sqlite3VtabSavepoint(sqlite3 *db, int op, int iSavepoint){ + int rc = SQLITE_OK; + + assert( op==SAVEPOINT_RELEASE||op==SAVEPOINT_ROLLBACK||op==SAVEPOINT_BEGIN ); + assert( iSavepoint>=-1 ); + if( db->aVTrans ){ + int i; + for(i=0; rc==SQLITE_OK && inVTrans; i++){ + VTable *pVTab = db->aVTrans[i]; + const sqlite3_module *pMod = pVTab->pMod->pModule; + if( pVTab->pVtab && pMod->iVersion>=2 ){ + int (*xMethod)(sqlite3_vtab *, int); + sqlite3VtabLock(pVTab); + switch( op ){ + case SAVEPOINT_BEGIN: + xMethod = pMod->xSavepoint; + pVTab->iSavepoint = iSavepoint+1; + break; + case SAVEPOINT_ROLLBACK: + xMethod = pMod->xRollbackTo; + break; + default: + xMethod = pMod->xRelease; + break; + } + if( xMethod && pVTab->iSavepoint>iSavepoint ){ + u64 savedFlags = (db->flags & SQLITE_Defensive); + db->flags &= ~(u64)SQLITE_Defensive; + rc = xMethod(pVTab->pVtab, iSavepoint); + db->flags |= savedFlags; + } + sqlite3VtabUnlock(pVTab); + } + } + } + return rc; +} + +/* +** The first parameter (pDef) is a function implementation. The +** second parameter (pExpr) is the first argument to this function. +** If pExpr is a column in a virtual table, then let the virtual +** table implementation have an opportunity to overload the function. +** +** This routine is used to allow virtual table implementations to +** overload MATCH, LIKE, GLOB, and REGEXP operators. +** +** Return either the pDef argument (indicating no change) or a +** new FuncDef structure that is marked as ephemeral using the +** SQLITE_FUNC_EPHEM flag. +*/ +SQLITE_PRIVATE FuncDef *sqlite3VtabOverloadFunction( + sqlite3 *db, /* Database connection for reporting malloc problems */ + FuncDef *pDef, /* Function to possibly overload */ + int nArg, /* Number of arguments to the function */ + Expr *pExpr /* First argument to the function */ +){ + Table *pTab; + sqlite3_vtab *pVtab; + sqlite3_module *pMod; + void (*xSFunc)(sqlite3_context*,int,sqlite3_value**) = 0; + void *pArg = 0; + FuncDef *pNew; + int rc = 0; + + /* Check to see the left operand is a column in a virtual table */ + if( NEVER(pExpr==0) ) return pDef; + if( pExpr->op!=TK_COLUMN ) return pDef; + assert( ExprUseYTab(pExpr) ); + pTab = pExpr->y.pTab; + if( NEVER(pTab==0) ) return pDef; + if( !IsVirtual(pTab) ) return pDef; + pVtab = sqlite3GetVTable(db, pTab)->pVtab; + assert( pVtab!=0 ); + assert( pVtab->pModule!=0 ); + pMod = (sqlite3_module *)pVtab->pModule; + if( pMod->xFindFunction==0 ) return pDef; + + /* Call the xFindFunction method on the virtual table implementation + ** to see if the implementation wants to overload this function. + ** + ** Though undocumented, we have historically always invoked xFindFunction + ** with an all lower-case function name. Continue in this tradition to + ** avoid any chance of an incompatibility. + */ +#ifdef SQLITE_DEBUG + { + int i; + for(i=0; pDef->zName[i]; i++){ + unsigned char x = (unsigned char)pDef->zName[i]; + assert( x==sqlite3UpperToLower[x] ); + } + } +#endif + rc = pMod->xFindFunction(pVtab, nArg, pDef->zName, &xSFunc, &pArg); + if( rc==0 ){ + return pDef; + } + + /* Create a new ephemeral function definition for the overloaded + ** function */ + pNew = sqlite3DbMallocZero(db, sizeof(*pNew) + + sqlite3Strlen30(pDef->zName) + 1); + if( pNew==0 ){ + return pDef; + } + *pNew = *pDef; + pNew->zName = (const char*)&pNew[1]; + memcpy((char*)&pNew[1], pDef->zName, sqlite3Strlen30(pDef->zName)+1); + pNew->xSFunc = xSFunc; + pNew->pUserData = pArg; + pNew->funcFlags |= SQLITE_FUNC_EPHEM; + return pNew; +} + +/* +** Make sure virtual table pTab is contained in the pParse->apVirtualLock[] +** array so that an OP_VBegin will get generated for it. Add pTab to the +** array if it is missing. If pTab is already in the array, this routine +** is a no-op. +*/ +SQLITE_PRIVATE void sqlite3VtabMakeWritable(Parse *pParse, Table *pTab){ + Parse *pToplevel = sqlite3ParseToplevel(pParse); + int i, n; + Table **apVtabLock; + + assert( IsVirtual(pTab) ); + for(i=0; inVtabLock; i++){ + if( pTab==pToplevel->apVtabLock[i] ) return; + } + n = (pToplevel->nVtabLock+1)*sizeof(pToplevel->apVtabLock[0]); + apVtabLock = sqlite3Realloc(pToplevel->apVtabLock, n); + if( apVtabLock ){ + pToplevel->apVtabLock = apVtabLock; + pToplevel->apVtabLock[pToplevel->nVtabLock++] = pTab; + }else{ + sqlite3OomFault(pToplevel->db); + } +} + +/* +** Check to see if virtual table module pMod can be have an eponymous +** virtual table instance. If it can, create one if one does not already +** exist. Return non-zero if either the eponymous virtual table instance +** exists when this routine returns or if an attempt to create it failed +** and an error message was left in pParse. +** +** An eponymous virtual table instance is one that is named after its +** module, and more importantly, does not require a CREATE VIRTUAL TABLE +** statement in order to come into existence. Eponymous virtual table +** instances always exist. They cannot be DROP-ed. +** +** Any virtual table module for which xConnect and xCreate are the same +** method can have an eponymous virtual table instance. +*/ +SQLITE_PRIVATE int sqlite3VtabEponymousTableInit(Parse *pParse, Module *pMod){ + const sqlite3_module *pModule = pMod->pModule; + Table *pTab; + char *zErr = 0; + int rc; + sqlite3 *db = pParse->db; + if( pMod->pEpoTab ) return 1; + if( pModule->xCreate!=0 && pModule->xCreate!=pModule->xConnect ) return 0; + pTab = sqlite3DbMallocZero(db, sizeof(Table)); + if( pTab==0 ) return 0; + pTab->zName = sqlite3DbStrDup(db, pMod->zName); + if( pTab->zName==0 ){ + sqlite3DbFree(db, pTab); + return 0; + } + pMod->pEpoTab = pTab; + pTab->nTabRef = 1; + pTab->eTabType = TABTYP_VTAB; + pTab->pSchema = db->aDb[0].pSchema; + assert( pTab->u.vtab.nArg==0 ); + pTab->iPKey = -1; + pTab->tabFlags |= TF_Eponymous; + addModuleArgument(pParse, pTab, sqlite3DbStrDup(db, pTab->zName)); + addModuleArgument(pParse, pTab, 0); + addModuleArgument(pParse, pTab, sqlite3DbStrDup(db, pTab->zName)); + db->nSchemaLock++; + rc = vtabCallConstructor(db, pTab, pMod, pModule->xConnect, &zErr); + db->nSchemaLock--; + if( rc ){ + sqlite3ErrorMsg(pParse, "%s", zErr); + pParse->rc = rc; + sqlite3DbFree(db, zErr); + sqlite3VtabEponymousTableClear(db, pMod); + } + return 1; +} + +/* +** Erase the eponymous virtual table instance associated with +** virtual table module pMod, if it exists. +*/ +SQLITE_PRIVATE void sqlite3VtabEponymousTableClear(sqlite3 *db, Module *pMod){ + Table *pTab = pMod->pEpoTab; + if( pTab!=0 ){ + /* Mark the table as Ephemeral prior to deleting it, so that the + ** sqlite3DeleteTable() routine will know that it is not stored in + ** the schema. */ + pTab->tabFlags |= TF_Ephemeral; + sqlite3DeleteTable(db, pTab); + pMod->pEpoTab = 0; + } +} + +/* +** Return the ON CONFLICT resolution mode in effect for the virtual +** table update operation currently in progress. +** +** The results of this routine are undefined unless it is called from +** within an xUpdate method. +*/ +SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *db){ + static const unsigned char aMap[] = { + SQLITE_ROLLBACK, SQLITE_ABORT, SQLITE_FAIL, SQLITE_IGNORE, SQLITE_REPLACE + }; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + assert( OE_Rollback==1 && OE_Abort==2 && OE_Fail==3 ); + assert( OE_Ignore==4 && OE_Replace==5 ); + assert( db->vtabOnConflict>=1 && db->vtabOnConflict<=5 ); + return (int)aMap[db->vtabOnConflict-1]; +} + +/* +** Call from within the xCreate() or xConnect() methods to provide +** the SQLite core with additional information about the behavior +** of the virtual table being implemented. +*/ +SQLITE_API int sqlite3_vtab_config(sqlite3 *db, int op, ...){ + va_list ap; + int rc = SQLITE_OK; + VtabCtx *p; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(db->mutex); + p = db->pVtabCtx; + if( !p ){ + rc = SQLITE_MISUSE_BKPT; + }else{ + assert( p->pTab==0 || IsVirtual(p->pTab) ); + va_start(ap, op); + switch( op ){ + case SQLITE_VTAB_CONSTRAINT_SUPPORT: { + p->pVTable->bConstraint = (u8)va_arg(ap, int); + break; + } + case SQLITE_VTAB_INNOCUOUS: { + p->pVTable->eVtabRisk = SQLITE_VTABRISK_Low; + break; + } + case SQLITE_VTAB_DIRECTONLY: { + p->pVTable->eVtabRisk = SQLITE_VTABRISK_High; + break; + } + case SQLITE_VTAB_USES_ALL_SCHEMAS: { + p->pVTable->bAllSchemas = 1; + break; + } + default: { + rc = SQLITE_MISUSE_BKPT; + break; + } + } + va_end(ap); + } + + if( rc!=SQLITE_OK ) sqlite3Error(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +/************** End of vtab.c ************************************************/ +/************** Begin file wherecode.c ***************************************/ +/* +** 2015-06-06 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This module contains C code that generates VDBE code used to process +** the WHERE clause of SQL statements. +** +** This file was split off from where.c on 2015-06-06 in order to reduce the +** size of where.c and make it easier to edit. This file contains the routines +** that actually generate the bulk of the WHERE loop code. The original where.c +** file retains the code that does query planning and analysis. +*/ +/* #include "sqliteInt.h" */ +/************** Include whereInt.h in the middle of wherecode.c **************/ +/************** Begin file whereInt.h ****************************************/ +/* +** 2013-11-12 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file contains structure and macro definitions for the query +** planner logic in "where.c". These definitions are broken out into +** a separate source file for easier editing. +*/ +#ifndef SQLITE_WHEREINT_H +#define SQLITE_WHEREINT_H + + +/* Forward references +*/ +typedef struct WhereClause WhereClause; +typedef struct WhereMaskSet WhereMaskSet; +typedef struct WhereOrInfo WhereOrInfo; +typedef struct WhereAndInfo WhereAndInfo; +typedef struct WhereLevel WhereLevel; +typedef struct WhereLoop WhereLoop; +typedef struct WherePath WherePath; +typedef struct WhereTerm WhereTerm; +typedef struct WhereLoopBuilder WhereLoopBuilder; +typedef struct WhereScan WhereScan; +typedef struct WhereOrCost WhereOrCost; +typedef struct WhereOrSet WhereOrSet; +typedef struct WhereMemBlock WhereMemBlock; +typedef struct WhereRightJoin WhereRightJoin; + +/* +** This object is a header on a block of allocated memory that will be +** automatically freed when its WInfo object is destructed. +*/ +struct WhereMemBlock { + WhereMemBlock *pNext; /* Next block in the chain */ + u64 sz; /* Bytes of space */ +}; + +/* +** Extra information attached to a WhereLevel that is a RIGHT JOIN. +*/ +struct WhereRightJoin { + int iMatch; /* Cursor used to determine prior matched rows */ + int regBloom; /* Bloom filter for iRJMatch */ + int regReturn; /* Return register for the interior subroutine */ + int addrSubrtn; /* Starting address for the interior subroutine */ + int endSubrtn; /* The last opcode in the interior subroutine */ +}; + +/* +** This object contains information needed to implement a single nested +** loop in WHERE clause. +** +** Contrast this object with WhereLoop. This object describes the +** implementation of the loop. WhereLoop describes the algorithm. +** This object contains a pointer to the WhereLoop algorithm as one of +** its elements. +** +** The WhereInfo object contains a single instance of this object for +** each term in the FROM clause (which is to say, for each of the +** nested loops as implemented). The order of WhereLevel objects determines +** the loop nested order, with WhereInfo.a[0] being the outer loop and +** WhereInfo.a[WhereInfo.nLevel-1] being the inner loop. +*/ +struct WhereLevel { + int iLeftJoin; /* Memory cell used to implement LEFT OUTER JOIN */ + int iTabCur; /* The VDBE cursor used to access the table */ + int iIdxCur; /* The VDBE cursor used to access pIdx */ + int addrBrk; /* Jump here to break out of the loop */ + int addrHalt; /* Abort the query due to empty table or similar */ + int addrNxt; /* Jump here to start the next IN combination */ + int addrSkip; /* Jump here for next iteration of skip-scan */ + int addrCont; /* Jump here to continue with the next loop cycle */ + int addrFirst; /* First instruction of interior of the loop */ + int addrBody; /* Beginning of the body of this loop */ + int regBignull; /* big-null flag reg. True if a NULL-scan is needed */ + int addrBignull; /* Jump here for next part of big-null scan */ +#ifndef SQLITE_LIKE_DOESNT_MATCH_BLOBS + u32 iLikeRepCntr; /* LIKE range processing counter register (times 2) */ + int addrLikeRep; /* LIKE range processing address */ +#endif + int regFilter; /* Bloom filter */ + WhereRightJoin *pRJ; /* Extra information for RIGHT JOIN */ + u8 iFrom; /* Which entry in the FROM clause */ + u8 op, p3, p5; /* Opcode, P3 & P5 of the opcode that ends the loop */ + int p1, p2; /* Operands of the opcode used to end the loop */ + union { /* Information that depends on pWLoop->wsFlags */ + struct { + int nIn; /* Number of entries in aInLoop[] */ + struct InLoop { + int iCur; /* The VDBE cursor used by this IN operator */ + int addrInTop; /* Top of the IN loop */ + int iBase; /* Base register of multi-key index record */ + int nPrefix; /* Number of prior entries in the key */ + u8 eEndLoopOp; /* IN Loop terminator. OP_Next or OP_Prev */ + } *aInLoop; /* Information about each nested IN operator */ + } in; /* Used when pWLoop->wsFlags&WHERE_IN_ABLE */ + Index *pCoveringIdx; /* Possible covering index for WHERE_MULTI_OR */ + } u; + struct WhereLoop *pWLoop; /* The selected WhereLoop object */ + Bitmask notReady; /* FROM entries not usable at this level */ +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + int addrVisit; /* Address at which row is visited */ +#endif +}; + +/* +** Each instance of this object represents an algorithm for evaluating one +** term of a join. Every term of the FROM clause will have at least +** one corresponding WhereLoop object (unless INDEXED BY constraints +** prevent a query solution - which is an error) and many terms of the +** FROM clause will have multiple WhereLoop objects, each describing a +** potential way of implementing that FROM-clause term, together with +** dependencies and cost estimates for using the chosen algorithm. +** +** Query planning consists of building up a collection of these WhereLoop +** objects, then computing a particular sequence of WhereLoop objects, with +** one WhereLoop object per FROM clause term, that satisfy all dependencies +** and that minimize the overall cost. +*/ +struct WhereLoop { + Bitmask prereq; /* Bitmask of other loops that must run first */ + Bitmask maskSelf; /* Bitmask identifying table iTab */ +#ifdef SQLITE_DEBUG + char cId; /* Symbolic ID of this loop for debugging use */ +#endif + u8 iTab; /* Position in FROM clause of table for this loop */ + u8 iSortIdx; /* Sorting index number. 0==None */ + LogEst rSetup; /* One-time setup cost (ex: create transient index) */ + LogEst rRun; /* Cost of running each loop */ + LogEst nOut; /* Estimated number of output rows */ + union { + struct { /* Information for internal btree tables */ + u16 nEq; /* Number of equality constraints */ + u16 nBtm; /* Size of BTM vector */ + u16 nTop; /* Size of TOP vector */ + u16 nDistinctCol; /* Index columns used to sort for DISTINCT */ + Index *pIndex; /* Index used, or NULL */ + ExprList *pOrderBy; /* ORDER BY clause if this is really a subquery */ + } btree; + struct { /* Information for virtual tables */ + int idxNum; /* Index number */ + u32 needFree : 1; /* True if sqlite3_free(idxStr) is needed */ + u32 bOmitOffset : 1; /* True to let virtual table handle offset */ + u32 bIdxNumHex : 1; /* Show idxNum as hex in EXPLAIN QUERY PLAN */ + i8 isOrdered; /* True if satisfies ORDER BY */ + u16 omitMask; /* Terms that may be omitted */ + char *idxStr; /* Index identifier string */ + u32 mHandleIn; /* Terms to handle as IN(...) instead of == */ + } vtab; + } u; + u32 wsFlags; /* WHERE_* flags describing the plan */ + u16 nLTerm; /* Number of entries in aLTerm[] */ + u16 nSkip; /* Number of NULL aLTerm[] entries */ + /**** whereLoopXfer() copies fields above ***********************/ +# define WHERE_LOOP_XFER_SZ offsetof(WhereLoop,nLSlot) + u16 nLSlot; /* Number of slots allocated for aLTerm[] */ +#ifdef WHERETRACE_ENABLED + LogEst rStarDelta; /* Cost delta due to star-schema heuristic. Not + ** initialized unless pWInfo->bStarUsed */ +#endif + WhereTerm **aLTerm; /* WhereTerms used */ + WhereLoop *pNextLoop; /* Next WhereLoop object in the WhereClause */ + WhereTerm *aLTermSpace[3]; /* Initial aLTerm[] space */ +}; + +/* This object holds the prerequisites and the cost of running a +** subquery on one operand of an OR operator in the WHERE clause. +** See WhereOrSet for additional information +*/ +struct WhereOrCost { + Bitmask prereq; /* Prerequisites */ + LogEst rRun; /* Cost of running this subquery */ + LogEst nOut; /* Number of outputs for this subquery */ +}; + +/* The WhereOrSet object holds a set of possible WhereOrCosts that +** correspond to the subquery(s) of OR-clause processing. Only the +** best N_OR_COST elements are retained. +*/ +#define N_OR_COST 3 +struct WhereOrSet { + u16 n; /* Number of valid a[] entries */ + WhereOrCost a[N_OR_COST]; /* Set of best costs */ +}; + +/* +** Each instance of this object holds a sequence of WhereLoop objects +** that implement some or all of a query plan. +** +** Think of each WhereLoop object as a node in a graph with arcs +** showing dependencies and costs for travelling between nodes. (That is +** not a completely accurate description because WhereLoop costs are a +** vector, not a scalar, and because dependencies are many-to-one, not +** one-to-one as are graph nodes. But it is a useful visualization aid.) +** Then a WherePath object is a path through the graph that visits some +** or all of the WhereLoop objects once. +** +** The "solver" works by creating the N best WherePath objects of length +** 1. Then using those as a basis to compute the N best WherePath objects +** of length 2. And so forth until the length of WherePaths equals the +** number of nodes in the FROM clause. The best (lowest cost) WherePath +** at the end is the chosen query plan. +*/ +struct WherePath { + Bitmask maskLoop; /* Bitmask of all WhereLoop objects in this path */ + Bitmask revLoop; /* aLoop[]s that should be reversed for ORDER BY */ + LogEst nRow; /* Estimated number of rows generated by this path */ + LogEst rCost; /* Total cost of this path */ + LogEst rUnsort; /* Total cost of this path ignoring sorting costs */ + i8 isOrdered; /* No. of ORDER BY terms satisfied. -1 for unknown */ + WhereLoop **aLoop; /* Array of WhereLoop objects implementing this path */ +}; + +/* +** The query generator uses an array of instances of this structure to +** help it analyze the subexpressions of the WHERE clause. Each WHERE +** clause subexpression is separated from the others by AND operators, +** usually, or sometimes subexpressions separated by OR. +** +** All WhereTerms are collected into a single WhereClause structure. +** The following identity holds: +** +** WhereTerm.pWC->a[WhereTerm.idx] == WhereTerm +** +** When a term is of the form: +** +** X +** +** where X is a column name and is one of certain operators, +** then WhereTerm.leftCursor and WhereTerm.u.leftColumn record the +** cursor number and column number for X. WhereTerm.eOperator records +** the using a bitmask encoding defined by WO_xxx below. The +** use of a bitmask encoding for the operator allows us to search +** quickly for terms that match any of several different operators. +** +** A WhereTerm might also be two or more subterms connected by OR: +** +** (t1.X ) OR (t1.Y ) OR .... +** +** In this second case, wtFlag has the TERM_ORINFO bit set and eOperator==WO_OR +** and the WhereTerm.u.pOrInfo field points to auxiliary information that +** is collected about the OR clause. +** +** If a term in the WHERE clause does not match either of the two previous +** categories, then eOperator==0. The WhereTerm.pExpr field is still set +** to the original subexpression content and wtFlags is set up appropriately +** but no other fields in the WhereTerm object are meaningful. +** +** When eOperator!=0, prereqRight and prereqAll record sets of cursor numbers, +** but they do so indirectly. A single WhereMaskSet structure translates +** cursor number into bits and the translated bit is stored in the prereq +** fields. The translation is used in order to maximize the number of +** bits that will fit in a Bitmask. The VDBE cursor numbers might be +** spread out over the non-negative integers. For example, the cursor +** numbers might be 3, 8, 9, 10, 20, 23, 41, and 45. The WhereMaskSet +** translates these sparse cursor numbers into consecutive integers +** beginning with 0 in order to make the best possible use of the available +** bits in the Bitmask. So, in the example above, the cursor numbers +** would be mapped into integers 0 through 7. +** +** The number of terms in a join is limited by the number of bits +** in prereqRight and prereqAll. The default is 64 bits, hence SQLite +** is only able to process joins with 64 or fewer tables. +*/ +struct WhereTerm { + Expr *pExpr; /* Pointer to the subexpression that is this term */ + WhereClause *pWC; /* The clause this term is part of */ + LogEst truthProb; /* Probability of truth for this expression */ + u16 wtFlags; /* TERM_xxx bit flags. See below */ + u16 eOperator; /* A WO_xx value describing */ + u8 nChild; /* Number of children that must disable us */ + u8 eMatchOp; /* Op for vtab MATCH/LIKE/GLOB/REGEXP terms */ + int iParent; /* Disable pWC->a[iParent] when this term disabled */ + int leftCursor; /* Cursor number of X in "X " */ +#ifdef SQLITE_DEBUG + int iTerm; /* Which WhereTerm is this, for debug purposes */ +#endif + union { + struct { + int leftColumn; /* Column number of X in "X " */ + int iField; /* Field in (?,?,?) IN (SELECT...) vector */ + } x; /* Opcode other than OP_OR or OP_AND */ + WhereOrInfo *pOrInfo; /* Extra information if (eOperator & WO_OR)!=0 */ + WhereAndInfo *pAndInfo; /* Extra information if (eOperator& WO_AND)!=0 */ + } u; + Bitmask prereqRight; /* Bitmask of tables used by pExpr->pRight */ + Bitmask prereqAll; /* Bitmask of tables referenced by pExpr */ +}; + +/* +** Allowed values of WhereTerm.wtFlags +*/ +#define TERM_DYNAMIC 0x0001 /* Need to call sqlite3ExprDelete(db, pExpr) */ +#define TERM_VIRTUAL 0x0002 /* Added by the optimizer. Do not code */ +#define TERM_CODED 0x0004 /* This term is already coded */ +#define TERM_COPIED 0x0008 /* Has a child */ +#define TERM_ORINFO 0x0010 /* Need to free the WhereTerm.u.pOrInfo object */ +#define TERM_ANDINFO 0x0020 /* Need to free the WhereTerm.u.pAndInfo obj */ +#define TERM_OK 0x0040 /* Used during OR-clause processing */ +#define TERM_VNULL 0x0080 /* Manufactured x>NULL or x<=NULL term */ +#define TERM_LIKEOPT 0x0100 /* Virtual terms from the LIKE optimization */ +#define TERM_LIKECOND 0x0200 /* Conditionally this LIKE operator term */ +#define TERM_LIKE 0x0400 /* The original LIKE operator */ +#define TERM_IS 0x0800 /* Term.pExpr is an IS operator */ +#define TERM_VARSELECT 0x1000 /* Term.pExpr contains a correlated sub-query */ +#define TERM_HEURTRUTH 0x2000 /* Heuristic truthProb used */ +#ifdef SQLITE_ENABLE_STAT4 +# define TERM_HIGHTRUTH 0x4000 /* Term excludes few rows */ +#else +# define TERM_HIGHTRUTH 0 /* Only used with STAT4 */ +#endif +#define TERM_SLICE 0x8000 /* One slice of a row-value/vector comparison */ + +/* +** An instance of the WhereScan object is used as an iterator for locating +** terms in the WHERE clause that are useful to the query planner. +*/ +struct WhereScan { + WhereClause *pOrigWC; /* Original, innermost WhereClause */ + WhereClause *pWC; /* WhereClause currently being scanned */ + const char *zCollName; /* Required collating sequence, if not NULL */ + Expr *pIdxExpr; /* Search for this index expression */ + int k; /* Resume scanning at this->pWC->a[this->k] */ + u32 opMask; /* Acceptable operators */ + char idxaff; /* Must match this affinity, if zCollName!=NULL */ + unsigned char iEquiv; /* Current slot in aiCur[] and aiColumn[] */ + unsigned char nEquiv; /* Number of entries in aiCur[] and aiColumn[] */ + int aiCur[11]; /* Cursors in the equivalence class */ + i16 aiColumn[11]; /* Corresponding column number in the eq-class */ +}; + +/* +** An instance of the following structure holds all information about a +** WHERE clause. Mostly this is a container for one or more WhereTerms. +** +** Explanation of pOuter: For a WHERE clause of the form +** +** a AND ((b AND c) OR (d AND e)) AND f +** +** There are separate WhereClause objects for the whole clause and for +** the subclauses "(b AND c)" and "(d AND e)". The pOuter field of the +** subclauses points to the WhereClause object for the whole clause. +*/ +struct WhereClause { + WhereInfo *pWInfo; /* WHERE clause processing context */ + WhereClause *pOuter; /* Outer conjunction */ + u8 op; /* Split operator. TK_AND or TK_OR */ + u8 hasOr; /* True if any a[].eOperator is WO_OR */ + int nTerm; /* Number of terms */ + int nSlot; /* Number of entries in a[] */ + int nBase; /* Number of terms through the last non-Virtual */ + WhereTerm *a; /* Each a[] describes a term of the WHERE clause */ +#if defined(SQLITE_SMALL_STACK) + WhereTerm aStatic[1]; /* Initial static space for a[] */ +#else + WhereTerm aStatic[8]; /* Initial static space for a[] */ +#endif +}; + +/* +** A WhereTerm with eOperator==WO_OR has its u.pOrInfo pointer set to +** a dynamically allocated instance of the following structure. +*/ +struct WhereOrInfo { + WhereClause wc; /* Decomposition into subterms */ + Bitmask indexable; /* Bitmask of all indexable tables in the clause */ +}; + +/* +** A WhereTerm with eOperator==WO_AND has its u.pAndInfo pointer set to +** a dynamically allocated instance of the following structure. +*/ +struct WhereAndInfo { + WhereClause wc; /* The subexpression broken out */ +}; + +/* +** An instance of the following structure keeps track of a mapping +** between VDBE cursor numbers and bits of the bitmasks in WhereTerm. +** +** The VDBE cursor numbers are small integers contained in +** SrcItem.iCursor and Expr.iTable fields. For any given WHERE +** clause, the cursor numbers might not begin with 0 and they might +** contain gaps in the numbering sequence. But we want to make maximum +** use of the bits in our bitmasks. This structure provides a mapping +** from the sparse cursor numbers into consecutive integers beginning +** with 0. +** +** If WhereMaskSet.ix[A]==B it means that The A-th bit of a Bitmask +** corresponds VDBE cursor number B. The A-th bit of a bitmask is 1<3, 5->1, 8->2, 29->0, +** 57->5, 73->4. Or one of 719 other combinations might be used. It +** does not really matter. What is important is that sparse cursor +** numbers all get mapped into bit numbers that begin with 0 and contain +** no gaps. +*/ +struct WhereMaskSet { + int bVarSelect; /* Used by sqlite3WhereExprUsage() */ + int n; /* Number of assigned cursor values */ + int ix[BMS]; /* Cursor assigned to each bit */ +}; + +/* +** This object is a convenience wrapper holding all information needed +** to construct WhereLoop objects for a particular query. +*/ +struct WhereLoopBuilder { + WhereInfo *pWInfo; /* Information about this WHERE */ + WhereClause *pWC; /* WHERE clause terms */ + WhereLoop *pNew; /* Template WhereLoop */ + WhereOrSet *pOrSet; /* Record best loops here, if not NULL */ +#ifdef SQLITE_ENABLE_STAT4 + UnpackedRecord *pRec; /* Probe for stat4 (if required) */ + int nRecValid; /* Number of valid fields currently in pRec */ +#endif + unsigned char bldFlags1; /* First set of SQLITE_BLDF_* flags */ + unsigned char bldFlags2; /* Second set of SQLITE_BLDF_* flags */ + unsigned int iPlanLimit; /* Search limiter */ +}; + +/* Allowed values for WhereLoopBuider.bldFlags */ +#define SQLITE_BLDF1_INDEXED 0x0001 /* An index is used */ +#define SQLITE_BLDF1_UNIQUE 0x0002 /* All keys of a UNIQUE index used */ + +#define SQLITE_BLDF2_2NDPASS 0x0004 /* Second builder pass needed */ + +/* The WhereLoopBuilder.iPlanLimit is used to limit the number of +** index+constraint combinations the query planner will consider for a +** particular query. If this parameter is unlimited, then certain +** pathological queries can spend excess time in the sqlite3WhereBegin() +** routine. The limit is high enough that is should not impact real-world +** queries. +** +** SQLITE_QUERY_PLANNER_LIMIT is the baseline limit. The limit is +** increased by SQLITE_QUERY_PLANNER_LIMIT_INCR before each term of the FROM +** clause is processed, so that every table in a join is guaranteed to be +** able to propose a some index+constraint combinations even if the initial +** baseline limit was exhausted by prior tables of the join. +*/ +#ifndef SQLITE_QUERY_PLANNER_LIMIT +# define SQLITE_QUERY_PLANNER_LIMIT 20000 +#endif +#ifndef SQLITE_QUERY_PLANNER_LIMIT_INCR +# define SQLITE_QUERY_PLANNER_LIMIT_INCR 1000 +#endif + +/* +** The WHERE clause processing routine has two halves. The +** first part does the start of the WHERE loop and the second +** half does the tail of the WHERE loop. An instance of +** this structure is returned by the first half and passed +** into the second half to give some continuity. +** +** An instance of this object holds the complete state of the query +** planner. +*/ +struct WhereInfo { + Parse *pParse; /* Parsing and code generating context */ + SrcList *pTabList; /* List of tables in the join */ + ExprList *pOrderBy; /* The ORDER BY clause or NULL */ + ExprList *pResultSet; /* Result set of the query */ +#if WHERETRACE_ENABLED + Expr *pWhere; /* The complete WHERE clause */ +#endif + Select *pSelect; /* The entire SELECT statement containing WHERE */ + int aiCurOnePass[2]; /* OP_OpenWrite cursors for the ONEPASS opt */ + int iContinue; /* Jump here to continue with next record */ + int iBreak; /* Jump here to break out of the loop */ + int savedNQueryLoop; /* pParse->nQueryLoop outside the WHERE loop */ + u16 wctrlFlags; /* Flags originally passed to sqlite3WhereBegin() */ + LogEst iLimit; /* LIMIT if wctrlFlags has WHERE_USE_LIMIT */ + u8 nLevel; /* Number of nested loop */ + i8 nOBSat; /* Number of ORDER BY terms satisfied by indices */ + u8 eOnePass; /* ONEPASS_OFF, or _SINGLE, or _MULTI */ + u8 eDistinct; /* One of the WHERE_DISTINCT_* values */ + unsigned bDeferredSeek :1; /* Uses OP_DeferredSeek */ + unsigned untestedTerms :1; /* Not all WHERE terms resolved by outer loop */ + unsigned bOrderedInnerLoop:1;/* True if only the inner-most loop is ordered */ + unsigned sorted :1; /* True if really sorted (not just grouped) */ + unsigned bStarDone :1; /* True if check for star-query is complete */ + unsigned bStarUsed :1; /* True if star-query heuristic is used */ + LogEst nRowOut; /* Estimated number of output rows */ +#ifdef WHERETRACE_ENABLED + LogEst rTotalCost; /* Total cost of the solution */ +#endif + int iTop; /* The very beginning of the WHERE loop */ + int iEndWhere; /* End of the WHERE clause itself */ + WhereLoop *pLoops; /* List of all WhereLoop objects */ + WhereMemBlock *pMemToFree;/* Memory to free when this object destroyed */ + Bitmask revMask; /* Mask of ORDER BY terms that need reversing */ + WhereClause sWC; /* Decomposition of the WHERE clause */ + WhereMaskSet sMaskSet; /* Map cursor numbers to bitmasks */ + WhereLevel a[FLEXARRAY]; /* Information about each nest loop in WHERE */ +}; + +/* +** The size (in bytes) of a WhereInfo object that holds N WhereLevels. +*/ +#define SZ_WHEREINFO(N) ROUND8(offsetof(WhereInfo,a)+(N)*sizeof(WhereLevel)) + +/* +** Private interfaces - callable only by other where.c routines. +** +** where.c: +*/ +SQLITE_PRIVATE Bitmask sqlite3WhereGetMask(WhereMaskSet*,int); +#ifdef WHERETRACE_ENABLED +SQLITE_PRIVATE void sqlite3WhereClausePrint(WhereClause *pWC); +SQLITE_PRIVATE void sqlite3WhereTermPrint(WhereTerm *pTerm, int iTerm); +SQLITE_PRIVATE void sqlite3WhereLoopPrint(const WhereLoop *p, const WhereClause *pWC); +#endif +SQLITE_PRIVATE WhereTerm *sqlite3WhereFindTerm( + WhereClause *pWC, /* The WHERE clause to be searched */ + int iCur, /* Cursor number of LHS */ + int iColumn, /* Column number of LHS */ + Bitmask notReady, /* RHS must not overlap with this mask */ + u32 op, /* Mask of WO_xx values describing operator */ + Index *pIdx /* Must be compatible with this index, if not NULL */ +); +SQLITE_PRIVATE void *sqlite3WhereMalloc(WhereInfo *pWInfo, u64 nByte); +SQLITE_PRIVATE void *sqlite3WhereRealloc(WhereInfo *pWInfo, void *pOld, u64 nByte); + +/* wherecode.c: */ +#ifndef SQLITE_OMIT_EXPLAIN +SQLITE_PRIVATE int sqlite3WhereExplainOneScan( + Parse *pParse, /* Parse context */ + SrcList *pTabList, /* Table list this loop refers to */ + WhereLevel *pLevel, /* Scan to write OP_Explain opcode for */ + u16 wctrlFlags /* Flags passed to sqlite3WhereBegin() */ +); +SQLITE_PRIVATE int sqlite3WhereExplainBloomFilter( + const Parse *pParse, /* Parse context */ + const WhereInfo *pWInfo, /* WHERE clause */ + const WhereLevel *pLevel /* Bloom filter on this level */ +); +SQLITE_PRIVATE void sqlite3WhereAddExplainText( + Parse *pParse, /* Parse context */ + int addr, + SrcList *pTabList, /* Table list this loop refers to */ + WhereLevel *pLevel, /* Scan to write OP_Explain opcode for */ + u16 wctrlFlags /* Flags passed to sqlite3WhereBegin() */ +); +#else +# define sqlite3WhereExplainOneScan(u,v,w,x) 0 +# define sqlite3WhereExplainBloomFilter(u,v,w) 0 +# define sqlite3WhereAddExplainText(u,v,w,x,y) +#endif /* SQLITE_OMIT_EXPLAIN */ +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS +SQLITE_PRIVATE void sqlite3WhereAddScanStatus( + Vdbe *v, /* Vdbe to add scanstatus entry to */ + SrcList *pSrclist, /* FROM clause pLvl reads data from */ + WhereLevel *pLvl, /* Level to add scanstatus() entry for */ + int addrExplain /* Address of OP_Explain (or 0) */ +); +#else +# define sqlite3WhereAddScanStatus(a, b, c, d) ((void)d) +#endif +SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( + Parse *pParse, /* Parsing context */ + Vdbe *v, /* Prepared statement under construction */ + WhereInfo *pWInfo, /* Complete information about the WHERE clause */ + int iLevel, /* Which level of pWInfo->a[] should be coded */ + WhereLevel *pLevel, /* The current level pointer */ + Bitmask notReady /* Which tables are currently available */ +); +SQLITE_PRIVATE SQLITE_NOINLINE void sqlite3WhereRightJoinLoop( + WhereInfo *pWInfo, + int iLevel, + WhereLevel *pLevel +); + +/* whereexpr.c: */ +SQLITE_PRIVATE void sqlite3WhereClauseInit(WhereClause*,WhereInfo*); +SQLITE_PRIVATE void sqlite3WhereClauseClear(WhereClause*); +SQLITE_PRIVATE void sqlite3WhereSplit(WhereClause*,Expr*,u8); +SQLITE_PRIVATE void sqlite3WhereAddLimit(WhereClause*, Select*); +SQLITE_PRIVATE Bitmask sqlite3WhereExprUsage(WhereMaskSet*, Expr*); +SQLITE_PRIVATE Bitmask sqlite3WhereExprUsageNN(WhereMaskSet*, Expr*); +SQLITE_PRIVATE Bitmask sqlite3WhereExprListUsage(WhereMaskSet*, ExprList*); +SQLITE_PRIVATE void sqlite3WhereExprAnalyze(SrcList*, WhereClause*); +SQLITE_PRIVATE void sqlite3WhereTabFuncArgs(Parse*, SrcItem*, WhereClause*); + + + + + +/* +** Bitmasks for the operators on WhereTerm objects. These are all +** operators that are of interest to the query planner. An +** OR-ed combination of these values can be used when searching for +** particular WhereTerms within a WhereClause. +** +** Value constraints: +** WO_EQ == SQLITE_INDEX_CONSTRAINT_EQ +** WO_LT == SQLITE_INDEX_CONSTRAINT_LT +** WO_LE == SQLITE_INDEX_CONSTRAINT_LE +** WO_GT == SQLITE_INDEX_CONSTRAINT_GT +** WO_GE == SQLITE_INDEX_CONSTRAINT_GE +*/ +#define WO_IN 0x0001 +#define WO_EQ 0x0002 +#define WO_LT (WO_EQ<<(TK_LT-TK_EQ)) +#define WO_LE (WO_EQ<<(TK_LE-TK_EQ)) +#define WO_GT (WO_EQ<<(TK_GT-TK_EQ)) +#define WO_GE (WO_EQ<<(TK_GE-TK_EQ)) +#define WO_AUX 0x0040 /* Op useful to virtual tables only */ +#define WO_IS 0x0080 +#define WO_ISNULL 0x0100 +#define WO_OR 0x0200 /* Two or more OR-connected terms */ +#define WO_AND 0x0400 /* Two or more AND-connected terms */ +#define WO_EQUIV 0x0800 /* Of the form A==B, both columns */ +#define WO_NOOP 0x1000 /* This term does not restrict search space */ +#define WO_ROWVAL 0x2000 /* A row-value term */ + +#define WO_ALL 0x3fff /* Mask of all possible WO_* values */ +#define WO_SINGLE 0x01ff /* Mask of all non-compound WO_* values */ + +/* +** These are definitions of bits in the WhereLoop.wsFlags field. +** The particular combination of bits in each WhereLoop help to +** determine the algorithm that WhereLoop represents. +*/ +#define WHERE_COLUMN_EQ 0x00000001 /* x=EXPR */ +#define WHERE_COLUMN_RANGE 0x00000002 /* xEXPR */ +#define WHERE_COLUMN_IN 0x00000004 /* x IN (...) */ +#define WHERE_COLUMN_NULL 0x00000008 /* x IS NULL */ +#define WHERE_CONSTRAINT 0x0000000f /* Any of the WHERE_COLUMN_xxx values */ +#define WHERE_TOP_LIMIT 0x00000010 /* xEXPR or x>=EXPR constraint */ +#define WHERE_BOTH_LIMIT 0x00000030 /* Both x>EXPR and xaiColumn[i]; + if( i==XN_EXPR ) return ""; + if( i==XN_ROWID ) return "rowid"; + return pIdx->pTable->aCol[i].zCnName; +} + +/* +** This routine is a helper for explainIndexRange() below +** +** pStr holds the text of an expression that we are building up one term +** at a time. This routine adds a new term to the end of the expression. +** Terms are separated by AND so add the "AND" text for second and subsequent +** terms only. +*/ +static void explainAppendTerm( + StrAccum *pStr, /* The text expression being built */ + Index *pIdx, /* Index to read column names from */ + int nTerm, /* Number of terms */ + int iTerm, /* Zero-based index of first term. */ + int bAnd, /* Non-zero to append " AND " */ + const char *zOp /* Name of the operator */ +){ + int i; + + assert( nTerm>=1 ); + if( bAnd ) sqlite3_str_append(pStr, " AND ", 5); + + if( nTerm>1 ) sqlite3_str_append(pStr, "(", 1); + for(i=0; i1 ) sqlite3_str_append(pStr, ")", 1); + + sqlite3_str_append(pStr, zOp, 1); + + if( nTerm>1 ) sqlite3_str_append(pStr, "(", 1); + for(i=0; i1 ) sqlite3_str_append(pStr, ")", 1); +} + +/* +** Argument pLevel describes a strategy for scanning table pTab. This +** function appends text to pStr that describes the subset of table +** rows scanned by the strategy in the form of an SQL expression. +** +** For example, if the query: +** +** SELECT * FROM t1 WHERE a=1 AND b>2; +** +** is run and there is an index on (a, b), then this function returns a +** string similar to: +** +** "a=? AND b>?" +*/ +static void explainIndexRange(StrAccum *pStr, WhereLoop *pLoop){ + Index *pIndex = pLoop->u.btree.pIndex; + u16 nEq = pLoop->u.btree.nEq; + u16 nSkip = pLoop->nSkip; + int i, j; + + if( nEq==0 && (pLoop->wsFlags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))==0 ) return; + sqlite3_str_append(pStr, " (", 2); + for(i=0; i=nSkip ? "%s=?" : "ANY(%s)", z); + } + + j = i; + if( pLoop->wsFlags&WHERE_BTM_LIMIT ){ + explainAppendTerm(pStr, pIndex, pLoop->u.btree.nBtm, j, i, ">"); + i = 1; + } + if( pLoop->wsFlags&WHERE_TOP_LIMIT ){ + explainAppendTerm(pStr, pIndex, pLoop->u.btree.nTop, j, i, "<"); + } + sqlite3_str_append(pStr, ")", 1); +} + +/* +** This function sets the P4 value of an existing OP_Explain opcode to +** text describing the loop in pLevel. If the OP_Explain opcode already has +** a P4 value, it is freed before it is overwritten. +*/ +SQLITE_PRIVATE void sqlite3WhereAddExplainText( + Parse *pParse, /* Parse context */ + int addr, /* Address of OP_Explain opcode */ + SrcList *pTabList, /* Table list this loop refers to */ + WhereLevel *pLevel, /* Scan to write OP_Explain opcode for */ + u16 wctrlFlags /* Flags passed to sqlite3WhereBegin() */ +){ +#if !defined(SQLITE_DEBUG) + if( sqlite3ParseToplevel(pParse)->explain==2 || IS_STMT_SCANSTATUS(pParse->db) ) +#endif + { + VdbeOp *pOp = sqlite3VdbeGetOp(pParse->pVdbe, addr); + SrcItem *pItem = &pTabList->a[pLevel->iFrom]; + sqlite3 *db = pParse->db; /* Database handle */ + int isSearch; /* True for a SEARCH. False for SCAN. */ + WhereLoop *pLoop; /* The controlling WhereLoop object */ + u32 flags; /* Flags that describe this loop */ +#if defined(SQLITE_DEBUG) && !defined(SQLITE_OMIT_EXPLAIN) + char *zMsg; /* Text to add to EQP output */ +#endif + StrAccum str; /* EQP output string */ + char zBuf[100]; /* Initial space for EQP output string */ + + if( db->mallocFailed ) return; + + pLoop = pLevel->pWLoop; + flags = pLoop->wsFlags; + + isSearch = (flags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0 + || ((flags&WHERE_VIRTUALTABLE)==0 && (pLoop->u.btree.nEq>0)) + || (wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX)); + + sqlite3StrAccumInit(&str, db, zBuf, sizeof(zBuf), SQLITE_MAX_LENGTH); + str.printfFlags = SQLITE_PRINTF_INTERNAL; + sqlite3_str_appendf(&str, "%s %S%s", + isSearch ? "SEARCH" : "SCAN", + pItem, + pItem->fg.fromExists ? " EXISTS" : ""); + if( (flags & (WHERE_IPK|WHERE_VIRTUALTABLE))==0 ){ + const char *zFmt = 0; + Index *pIdx; + + assert( pLoop->u.btree.pIndex!=0 ); + pIdx = pLoop->u.btree.pIndex; + assert( !(flags&WHERE_AUTO_INDEX) || (flags&WHERE_IDX_ONLY) ); + if( !HasRowid(pItem->pSTab) && IsPrimaryKeyIndex(pIdx) ){ + if( isSearch ){ + zFmt = "PRIMARY KEY"; + } + }else if( flags & WHERE_PARTIALIDX ){ + zFmt = "AUTOMATIC PARTIAL COVERING INDEX"; + }else if( flags & WHERE_AUTO_INDEX ){ + zFmt = "AUTOMATIC COVERING INDEX"; + }else if( flags & (WHERE_IDX_ONLY|WHERE_EXPRIDX) ){ + zFmt = "COVERING INDEX %s"; + }else{ + zFmt = "INDEX %s"; + } + if( zFmt ){ + sqlite3_str_append(&str, " USING ", 7); + sqlite3_str_appendf(&str, zFmt, pIdx->zName); + explainIndexRange(&str, pLoop); + } + }else if( (flags & WHERE_IPK)!=0 && (flags & WHERE_CONSTRAINT)!=0 ){ + char cRangeOp; +#if 0 /* Better output, but breaks many tests */ + const Table *pTab = pItem->pTab; + const char *zRowid = pTab->iPKey>=0 ? pTab->aCol[pTab->iPKey].zCnName: + "rowid"; +#else + const char *zRowid = "rowid"; +#endif + sqlite3_str_appendf(&str, " USING INTEGER PRIMARY KEY (%s", zRowid); + if( flags&(WHERE_COLUMN_EQ|WHERE_COLUMN_IN) ){ + cRangeOp = '='; + }else if( (flags&WHERE_BOTH_LIMIT)==WHERE_BOTH_LIMIT ){ + sqlite3_str_appendf(&str, ">? AND %s", zRowid); + cRangeOp = '<'; + }else if( flags&WHERE_BTM_LIMIT ){ + cRangeOp = '>'; + }else{ + assert( flags&WHERE_TOP_LIMIT); + cRangeOp = '<'; + } + sqlite3_str_appendf(&str, "%c?)", cRangeOp); + } +#ifndef SQLITE_OMIT_VIRTUALTABLE + else if( (flags & WHERE_VIRTUALTABLE)!=0 ){ + sqlite3_str_appendall(&str, " VIRTUAL TABLE INDEX "); + sqlite3_str_appendf(&str, + pLoop->u.vtab.bIdxNumHex ? "0x%x:%s" : "%d:%s", + pLoop->u.vtab.idxNum, pLoop->u.vtab.idxStr); + } +#endif + if( pItem->fg.jointype & JT_LEFT ){ + sqlite3_str_appendf(&str, " LEFT-JOIN"); + } +#ifdef SQLITE_EXPLAIN_ESTIMATED_ROWS + if( pLoop->nOut>=10 ){ + sqlite3_str_appendf(&str, " (~%llu rows)", + sqlite3LogEstToInt(pLoop->nOut)); + }else{ + sqlite3_str_append(&str, " (~1 row)", 9); + } +#endif +#if defined(SQLITE_DEBUG) && !defined(SQLITE_OMIT_EXPLAIN) + zMsg = sqlite3StrAccumFinish(&str); + sqlite3ExplainBreakpoint("",zMsg); +#endif + + assert( pOp->opcode==OP_Explain ); + assert( pOp->p4type==P4_DYNAMIC || pOp->p4.z==0 ); + sqlite3DbFree(db, pOp->p4.z); + pOp->p4type = P4_DYNAMIC; + pOp->p4.z = sqlite3StrAccumFinish(&str); + } +} + + +/* +** This function is a no-op unless currently processing an EXPLAIN QUERY PLAN +** command, or if stmt_scanstatus_v2() stats are enabled, or if SQLITE_DEBUG +** was defined at compile-time. If it is not a no-op, a single OP_Explain +** opcode is added to the output to describe the table scan strategy in pLevel. +** +** If an OP_Explain opcode is added to the VM, its address is returned. +** Otherwise, if no OP_Explain is coded, zero is returned. +*/ +SQLITE_PRIVATE int sqlite3WhereExplainOneScan( + Parse *pParse, /* Parse context */ + SrcList *pTabList, /* Table list this loop refers to */ + WhereLevel *pLevel, /* Scan to write OP_Explain opcode for */ + u16 wctrlFlags /* Flags passed to sqlite3WhereBegin() */ +){ + int ret = 0; +#if !defined(SQLITE_DEBUG) + if( sqlite3ParseToplevel(pParse)->explain==2 || IS_STMT_SCANSTATUS(pParse->db) ) +#endif + { + if( (pLevel->pWLoop->wsFlags & WHERE_MULTI_OR)==0 + && (wctrlFlags & WHERE_OR_SUBCLAUSE)==0 + ){ + Vdbe *v = pParse->pVdbe; + int addr = sqlite3VdbeCurrentAddr(v); + ret = sqlite3VdbeAddOp3( + v, OP_Explain, addr, pParse->addrExplain, pLevel->pWLoop->rRun + ); + sqlite3WhereAddExplainText(pParse, addr, pTabList, pLevel, wctrlFlags); + } + } + return ret; +} + +/* +** Add a single OP_Explain opcode that describes a Bloom filter. +** +** Or if not processing EXPLAIN QUERY PLAN and not in a SQLITE_DEBUG and/or +** SQLITE_ENABLE_STMT_SCANSTATUS build, then OP_Explain opcodes are not +** required and this routine is a no-op. +** +** If an OP_Explain opcode is added to the VM, its address is returned. +** Otherwise, if no OP_Explain is coded, zero is returned. +*/ +SQLITE_PRIVATE int sqlite3WhereExplainBloomFilter( + const Parse *pParse, /* Parse context */ + const WhereInfo *pWInfo, /* WHERE clause */ + const WhereLevel *pLevel /* Bloom filter on this level */ +){ + int ret = 0; + SrcItem *pItem = &pWInfo->pTabList->a[pLevel->iFrom]; + Vdbe *v = pParse->pVdbe; /* VM being constructed */ + sqlite3 *db = pParse->db; /* Database handle */ + char *zMsg; /* Text to add to EQP output */ + int i; /* Loop counter */ + WhereLoop *pLoop; /* The where loop */ + StrAccum str; /* EQP output string */ + char zBuf[100]; /* Initial space for EQP output string */ + + sqlite3StrAccumInit(&str, db, zBuf, sizeof(zBuf), SQLITE_MAX_LENGTH); + str.printfFlags = SQLITE_PRINTF_INTERNAL; + sqlite3_str_appendf(&str, "BLOOM FILTER ON %S (", pItem); + pLoop = pLevel->pWLoop; + if( pLoop->wsFlags & WHERE_IPK ){ + const Table *pTab = pItem->pSTab; + if( pTab->iPKey>=0 ){ + sqlite3_str_appendf(&str, "%s=?", pTab->aCol[pTab->iPKey].zCnName); + }else{ + sqlite3_str_appendf(&str, "rowid=?"); + } + }else{ + for(i=pLoop->nSkip; iu.btree.nEq; i++){ + const char *z = explainIndexColumnName(pLoop->u.btree.pIndex, i); + if( i>pLoop->nSkip ) sqlite3_str_append(&str, " AND ", 5); + sqlite3_str_appendf(&str, "%s=?", z); + } + } + sqlite3_str_append(&str, ")", 1); + zMsg = sqlite3StrAccumFinish(&str); + ret = sqlite3VdbeAddOp4(v, OP_Explain, sqlite3VdbeCurrentAddr(v), + pParse->addrExplain, 0, zMsg,P4_DYNAMIC); + + sqlite3VdbeScanStatus(v, sqlite3VdbeCurrentAddr(v)-1, 0, 0, 0, 0); + return ret; +} +#endif /* SQLITE_OMIT_EXPLAIN */ + +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS +/* +** Configure the VM passed as the first argument with an +** sqlite3_stmt_scanstatus() entry corresponding to the scan used to +** implement level pLvl. Argument pSrclist is a pointer to the FROM +** clause that the scan reads data from. +** +** If argument addrExplain is not 0, it must be the address of an +** OP_Explain instruction that describes the same loop. +*/ +SQLITE_PRIVATE void sqlite3WhereAddScanStatus( + Vdbe *v, /* Vdbe to add scanstatus entry to */ + SrcList *pSrclist, /* FROM clause pLvl reads data from */ + WhereLevel *pLvl, /* Level to add scanstatus() entry for */ + int addrExplain /* Address of OP_Explain (or 0) */ +){ + if( IS_STMT_SCANSTATUS( sqlite3VdbeDb(v) ) ){ + const char *zObj = 0; + WhereLoop *pLoop = pLvl->pWLoop; + int wsFlags = pLoop->wsFlags; + int viaCoroutine = 0; + + if( (wsFlags & WHERE_VIRTUALTABLE)==0 && pLoop->u.btree.pIndex!=0 ){ + zObj = pLoop->u.btree.pIndex->zName; + }else{ + zObj = pSrclist->a[pLvl->iFrom].zName; + viaCoroutine = pSrclist->a[pLvl->iFrom].fg.viaCoroutine; + } + sqlite3VdbeScanStatus( + v, addrExplain, pLvl->addrBody, pLvl->addrVisit, pLoop->nOut, zObj + ); + + if( viaCoroutine==0 ){ + if( (wsFlags & (WHERE_MULTI_OR|WHERE_AUTO_INDEX))==0 ){ + sqlite3VdbeScanStatusRange(v, addrExplain, -1, pLvl->iTabCur); + } + if( wsFlags & WHERE_INDEXED ){ + sqlite3VdbeScanStatusRange(v, addrExplain, -1, pLvl->iIdxCur); + } + }else{ + int addr; + VdbeOp *pOp; + assert( pSrclist->a[pLvl->iFrom].fg.isSubquery ); + addr = pSrclist->a[pLvl->iFrom].u4.pSubq->addrFillSub; + pOp = sqlite3VdbeGetOp(v, addr-1); + assert( sqlite3VdbeDb(v)->mallocFailed || pOp->opcode==OP_InitCoroutine ); + assert( sqlite3VdbeDb(v)->mallocFailed || pOp->p2>addr ); + sqlite3VdbeScanStatusRange(v, addrExplain, addr, pOp->p2-1); + } + } +} +#endif + + +/* +** Disable a term in the WHERE clause. Except, do not disable the term +** if it controls a LEFT OUTER JOIN and it did not originate in the ON +** or USING clause of that join. +** +** Consider the term t2.z='ok' in the following queries: +** +** (1) SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x WHERE t2.z='ok' +** (2) SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x AND t2.z='ok' +** (3) SELECT * FROM t1, t2 WHERE t1.a=t2.x AND t2.z='ok' +** +** The t2.z='ok' is disabled in the in (2) because it originates +** in the ON clause. The term is disabled in (3) because it is not part +** of a LEFT OUTER JOIN. In (1), the term is not disabled. +** +** Disabling a term causes that term to not be tested in the inner loop +** of the join. Disabling is an optimization. When terms are satisfied +** by indices, we disable them to prevent redundant tests in the inner +** loop. We would get the correct results if nothing were ever disabled, +** but joins might run a little slower. The trick is to disable as much +** as we can without disabling too much. If we disabled in (1), we'd get +** the wrong answer. See ticket #813. +** +** If all the children of a term are disabled, then that term is also +** automatically disabled. In this way, terms get disabled if derived +** virtual terms are tested first. For example: +** +** x GLOB 'abc*' AND x>='abc' AND x<'acd' +** \___________/ \______/ \_____/ +** parent child1 child2 +** +** Only the parent term was in the original WHERE clause. The child1 +** and child2 terms were added by the LIKE optimization. If both of +** the virtual child terms are valid, then testing of the parent can be +** skipped. +** +** Usually the parent term is marked as TERM_CODED. But if the parent +** term was originally TERM_LIKE, then the parent gets TERM_LIKECOND instead. +** The TERM_LIKECOND marking indicates that the term should be coded inside +** a conditional such that is only evaluated on the second pass of a +** LIKE-optimization loop, when scanning BLOBs instead of strings. +*/ +static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){ + int nLoop = 0; + assert( pTerm!=0 ); + while( (pTerm->wtFlags & TERM_CODED)==0 + && (pLevel->iLeftJoin==0 || ExprHasProperty(pTerm->pExpr, EP_OuterON)) + && (pLevel->notReady & pTerm->prereqAll)==0 + ){ + if( nLoop && (pTerm->wtFlags & TERM_LIKE)!=0 ){ + pTerm->wtFlags |= TERM_LIKECOND; + }else{ + pTerm->wtFlags |= TERM_CODED; + } +#ifdef WHERETRACE_ENABLED + if( (sqlite3WhereTrace & 0x4001)==0x4001 ){ + sqlite3DebugPrintf("DISABLE-"); + sqlite3WhereTermPrint(pTerm, (int)(pTerm - (pTerm->pWC->a))); + } +#endif + if( pTerm->iParent<0 ) break; + pTerm = &pTerm->pWC->a[pTerm->iParent]; + assert( pTerm!=0 ); + pTerm->nChild--; + if( pTerm->nChild!=0 ) break; + nLoop++; + } +} + +/* +** Code an OP_Affinity opcode to apply the column affinity string zAff +** to the n registers starting at base. +** +** As an optimization, SQLITE_AFF_BLOB and SQLITE_AFF_NONE entries (which +** are no-ops) at the beginning and end of zAff are ignored. If all entries +** in zAff are SQLITE_AFF_BLOB or SQLITE_AFF_NONE, then no code gets generated. +** +** This routine makes its own copy of zAff so that the caller is free +** to modify zAff after this routine returns. +*/ +static void codeApplyAffinity(Parse *pParse, int base, int n, char *zAff){ + Vdbe *v = pParse->pVdbe; + if( zAff==0 ){ + assert( pParse->db->mallocFailed ); + return; + } + assert( v!=0 ); + + /* Adjust base and n to skip over SQLITE_AFF_BLOB and SQLITE_AFF_NONE + ** entries at the beginning and end of the affinity string. + */ + assert( SQLITE_AFF_NONE0 && zAff[0]<=SQLITE_AFF_BLOB ){ + n--; + base++; + zAff++; + } + while( n>1 && zAff[n-1]<=SQLITE_AFF_BLOB ){ + n--; + } + + /* Code the OP_Affinity opcode if there is anything left to do. */ + if( n>0 ){ + sqlite3VdbeAddOp4(v, OP_Affinity, base, n, 0, zAff, n); + } +} + +/* +** Expression pRight, which is the RHS of a comparison operation, is +** either a vector of n elements or, if n==1, a scalar expression. +** Before the comparison operation, affinity zAff is to be applied +** to the pRight values. This function modifies characters within the +** affinity string to SQLITE_AFF_BLOB if either: +** +** * the comparison will be performed with no affinity, or +** * the affinity change in zAff is guaranteed not to change the value. +*/ +static void updateRangeAffinityStr( + Expr *pRight, /* RHS of comparison */ + int n, /* Number of vector elements in comparison */ + char *zAff /* Affinity string to modify */ +){ + int i; + for(i=0; ia[].u.x.iOrderByCol values might be incorrect because +** columns might have been rearranged in the result set. This routine +** fixes them up. +** +** pEList is the new result set. The pEList->a[].u.x.iOrderByCol values +** contain the *old* locations of each expression. This is a temporary +** use of u.x.iOrderByCol, not its intended use. The caller must reset +** u.x.iOrderByCol back to zero for all entries in pEList before the +** caller returns. +** +** This routine changes pOrderBy->a[].u.x.iOrderByCol values from +** pEList->a[N].u.x.iOrderByCol into N+1. (The "+1" is because of the 1-based +** indexing used by iOrderByCol.) Or if no match, iOrderByCol is set to zero. +*/ +static void adjustOrderByCol(ExprList *pOrderBy, ExprList *pEList){ + int i, j; + if( pOrderBy==0 ) return; + for(i=0; inExpr; i++){ + int t = pOrderBy->a[i].u.x.iOrderByCol; + if( t==0 ) continue; + for(j=0; jnExpr; j++){ + if( pEList->a[j].u.x.iOrderByCol==t ){ + pOrderBy->a[i].u.x.iOrderByCol = j+1; + break; + } + } + if( j>=pEList->nExpr ){ + pOrderBy->a[i].u.x.iOrderByCol = 0; + } + } +} + + +/* +** pX is an expression of the form: (vector) IN (SELECT ...) +** In other words, it is a vector IN operator with a SELECT clause on the +** RHS. But not all terms in the vector are indexable and the terms might +** not be in the correct order for indexing. +** +** This routine makes a copy of the input pX expression and then adjusts +** the vector on the LHS with corresponding changes to the SELECT so that +** the vector contains only index terms and those terms are in the correct +** order. The modified IN expression is returned. The caller is responsible +** for deleting the returned expression. +** +** Example: +** +** CREATE TABLE t1(a,b,c,d,e,f); +** CREATE INDEX t1x1 ON t1(e,c); +** SELECT * FROM t1 WHERE (a,b,c,d,e) IN (SELECT v,w,x,y,z FROM t2) +** \_______________________________________/ +** The pX expression +** +** Since only columns e and c can be used with the index, in that order, +** the modified IN expression that is returned will be: +** +** (e,c) IN (SELECT z,x FROM t2) +** +** The reduced pX is different from the original (obviously) and thus is +** only used for indexing, to improve performance. The original unaltered +** IN expression must also be run on each output row for correctness. +*/ +static Expr *removeUnindexableInClauseTerms( + Parse *pParse, /* The parsing context */ + int iEq, /* Look at loop terms starting here */ + WhereLoop *pLoop, /* The current loop */ + Expr *pX /* The IN expression to be reduced */ +){ + sqlite3 *db = pParse->db; + Select *pSelect; /* Pointer to the SELECT on the RHS */ + Expr *pNew; + pNew = sqlite3ExprDup(db, pX, 0); + if( db->mallocFailed==0 ){ + for(pSelect=pNew->x.pSelect; pSelect; pSelect=pSelect->pPrior){ + ExprList *pOrigRhs; /* Original unmodified RHS */ + ExprList *pOrigLhs = 0; /* Original unmodified LHS */ + ExprList *pRhs = 0; /* New RHS after modifications */ + ExprList *pLhs = 0; /* New LHS after mods */ + int i; /* Loop counter */ + + assert( ExprUseXSelect(pNew) ); + pOrigRhs = pSelect->pEList; + assert( pNew->pLeft!=0 ); + assert( ExprUseXList(pNew->pLeft) ); + if( pSelect==pNew->x.pSelect ){ + pOrigLhs = pNew->pLeft->x.pList; + } + for(i=iEq; inLTerm; i++){ + if( pLoop->aLTerm[i]->pExpr==pX ){ + int iField; + assert( (pLoop->aLTerm[i]->eOperator & (WO_OR|WO_AND))==0 ); + iField = pLoop->aLTerm[i]->u.x.iField - 1; + if( NEVER(pOrigRhs->a[iField].pExpr==0) ){ + continue; /* Duplicate PK column */ + } + pRhs = sqlite3ExprListAppend(pParse, pRhs, pOrigRhs->a[iField].pExpr); + pOrigRhs->a[iField].pExpr = 0; + if( pRhs ) pRhs->a[pRhs->nExpr-1].u.x.iOrderByCol = iField+1; + if( pOrigLhs ){ + assert( pOrigLhs->a[iField].pExpr!=0 ); + pLhs = sqlite3ExprListAppend(pParse,pLhs,pOrigLhs->a[iField].pExpr); + pOrigLhs->a[iField].pExpr = 0; + } + } + } + sqlite3ExprListDelete(db, pOrigRhs); + if( pOrigLhs ){ + sqlite3ExprListDelete(db, pOrigLhs); + pNew->pLeft->x.pList = pLhs; + } + pSelect->pEList = pRhs; + pSelect->selId = ++pParse->nSelect; /* Req'd for SubrtnSig validity */ + if( pLhs && pLhs->nExpr==1 ){ + /* Take care here not to generate a TK_VECTOR containing only a + ** single value. Since the parser never creates such a vector, some + ** of the subroutines do not handle this case. */ + Expr *p = pLhs->a[0].pExpr; + pLhs->a[0].pExpr = 0; + sqlite3ExprDelete(db, pNew->pLeft); + pNew->pLeft = p; + } + + /* If either the ORDER BY clause or the GROUP BY clause contains + ** references to result-set columns, those references might now be + ** obsolete. So fix them up. + */ + assert( pRhs!=0 || db->mallocFailed ); + if( pRhs ){ + adjustOrderByCol(pSelect->pOrderBy, pRhs); + adjustOrderByCol(pSelect->pGroupBy, pRhs); + for(i=0; inExpr; i++) pRhs->a[i].u.x.iOrderByCol = 0; + } + +#if 0 + printf("For indexing, change the IN expr:\n"); + sqlite3TreeViewExpr(0, pX, 0); + printf("Into:\n"); + sqlite3TreeViewExpr(0, pNew, 0); +#endif + } + } + return pNew; +} + + +#ifndef SQLITE_OMIT_SUBQUERY +/* +** Generate code for a single X IN (....) term of the WHERE clause. +** +** This is a special-case of codeEqualityTerm() that works for IN operators +** only. It is broken out into a subroutine because this case is +** uncommon and by splitting it off into a subroutine, the common case +** runs faster. +** +** The current value for the constraint is left in register iTarget. +** This routine sets up a loop that will iterate over all values of X. +*/ +static SQLITE_NOINLINE void codeINTerm( + Parse *pParse, /* The parsing context */ + WhereTerm *pTerm, /* The term of the WHERE clause to be coded */ + WhereLevel *pLevel, /* The level of the FROM clause we are working on */ + int iEq, /* Index of the equality term within this level */ + int bRev, /* True for reverse-order IN operations */ + int iTarget /* Attempt to leave results in this register */ +){ + Expr *pX = pTerm->pExpr; + int eType = IN_INDEX_NOOP; + int iTab; + struct InLoop *pIn; + WhereLoop *pLoop = pLevel->pWLoop; + Vdbe *v = pParse->pVdbe; + int i; + int nEq = 0; + int *aiMap = 0; + + if( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 + && pLoop->u.btree.pIndex!=0 + && pLoop->u.btree.pIndex->aSortOrder[iEq] + ){ + testcase( iEq==0 ); + testcase( bRev ); + bRev = !bRev; + } + assert( pX->op==TK_IN ); + + for(i=0; iaLTerm[i] && pLoop->aLTerm[i]->pExpr==pX ){ + disableTerm(pLevel, pTerm); + return; + } + } + for(i=iEq; inLTerm; i++){ + assert( pLoop->aLTerm[i]!=0 ); + if( pLoop->aLTerm[i]->pExpr==pX ) nEq++; + } + + iTab = 0; + if( !ExprUseXSelect(pX) || pX->x.pSelect->pEList->nExpr==1 ){ + eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, 0, &iTab); + }else{ + sqlite3 *db = pParse->db; + Expr *pXMod = removeUnindexableInClauseTerms(pParse, iEq, pLoop, pX); + if( !db->mallocFailed ){ + aiMap = (int*)sqlite3DbMallocZero(db, sizeof(int)*nEq); + eType = sqlite3FindInIndex(pParse, pXMod, IN_INDEX_LOOP, 0, aiMap, &iTab); + } + sqlite3ExprDelete(db, pXMod); + } + + if( eType==IN_INDEX_INDEX_DESC ){ + testcase( bRev ); + bRev = !bRev; + } + sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iTab, 0); + VdbeCoverageIf(v, bRev); + VdbeCoverageIf(v, !bRev); + + assert( (pLoop->wsFlags & WHERE_MULTI_OR)==0 ); + pLoop->wsFlags |= WHERE_IN_ABLE; + if( pLevel->u.in.nIn==0 ){ + pLevel->addrNxt = sqlite3VdbeMakeLabel(pParse); + } + if( iEq>0 && (pLoop->wsFlags & WHERE_IN_SEEKSCAN)==0 ){ + pLoop->wsFlags |= WHERE_IN_EARLYOUT; + } + + i = pLevel->u.in.nIn; + pLevel->u.in.nIn += nEq; + pLevel->u.in.aInLoop = + sqlite3WhereRealloc(pTerm->pWC->pWInfo, + pLevel->u.in.aInLoop, + sizeof(pLevel->u.in.aInLoop[0])*pLevel->u.in.nIn); + pIn = pLevel->u.in.aInLoop; + if( pIn ){ + int iMap = 0; /* Index in aiMap[] */ + pIn += i; + for(i=iEq; inLTerm; i++){ + if( pLoop->aLTerm[i]->pExpr==pX ){ + int iOut = iTarget + i - iEq; + if( eType==IN_INDEX_ROWID ){ + pIn->addrInTop = sqlite3VdbeAddOp2(v, OP_Rowid, iTab, iOut); + }else{ + int iCol = aiMap ? aiMap[iMap++] : 0; + pIn->addrInTop = sqlite3VdbeAddOp3(v,OP_Column,iTab, iCol, iOut); + } + sqlite3VdbeAddOp1(v, OP_IsNull, iOut); VdbeCoverage(v); + if( i==iEq ){ + pIn->iCur = iTab; + pIn->eEndLoopOp = bRev ? OP_Prev : OP_Next; + if( iEq>0 ){ + pIn->iBase = iTarget - i; + pIn->nPrefix = i; + }else{ + pIn->nPrefix = 0; + } + }else{ + pIn->eEndLoopOp = OP_Noop; + } + pIn++; + } + } + testcase( iEq>0 + && (pLoop->wsFlags & WHERE_IN_SEEKSCAN)==0 + && (pLoop->wsFlags & WHERE_VIRTUALTABLE)!=0 ); + if( iEq>0 + && (pLoop->wsFlags & (WHERE_IN_SEEKSCAN|WHERE_VIRTUALTABLE))==0 + ){ + sqlite3VdbeAddOp3(v, OP_SeekHit, pLevel->iIdxCur, 0, iEq); + } + }else{ + pLevel->u.in.nIn = 0; + } + sqlite3DbFree(pParse->db, aiMap); +} +#endif + + +/* +** Generate code for a single equality term of the WHERE clause. An equality +** term can be either X=expr or X IN (...). pTerm is the term to be +** coded. +** +** The current value for the constraint is left in a register, the index +** of which is returned. An attempt is made store the result in iTarget but +** this is only guaranteed for TK_ISNULL and TK_IN constraints. If the +** constraint is a TK_EQ or TK_IS, then the current value might be left in +** some other register and it is the caller's responsibility to compensate. +** +** For a constraint of the form X=expr, the expression is evaluated in +** straight-line code. For constraints of the form X IN (...) +** this routine sets up a loop that will iterate over all values of X. +*/ +static int codeEqualityTerm( + Parse *pParse, /* The parsing context */ + WhereTerm *pTerm, /* The term of the WHERE clause to be coded */ + WhereLevel *pLevel, /* The level of the FROM clause we are working on */ + int iEq, /* Index of the equality term within this level */ + int bRev, /* True for reverse-order IN operations */ + int iTarget /* Attempt to leave results in this register */ +){ + Expr *pX = pTerm->pExpr; + int iReg; /* Register holding results */ + + assert( pLevel->pWLoop->aLTerm[iEq]==pTerm ); + assert( iTarget>0 ); + if( pX->op==TK_EQ || pX->op==TK_IS ){ + iReg = sqlite3ExprCodeTarget(pParse, pX->pRight, iTarget); + }else if( pX->op==TK_ISNULL ){ + iReg = iTarget; + sqlite3VdbeAddOp2(pParse->pVdbe, OP_Null, 0, iReg); +#ifndef SQLITE_OMIT_SUBQUERY + }else{ + assert( pX->op==TK_IN ); + iReg = iTarget; + codeINTerm(pParse, pTerm, pLevel, iEq, bRev, iTarget); +#endif + } + + /* As an optimization, try to disable the WHERE clause term that is + ** driving the index as it will always be true. The correct answer is + ** obtained regardless, but we might get the answer with fewer CPU cycles + ** by omitting the term. + ** + ** But do not disable the term unless we are certain that the term is + ** not a transitive constraint. For an example of where that does not + ** work, see https://sqlite.org/forum/forumpost/eb8613976a (2021-05-04) + */ + if( (pLevel->pWLoop->wsFlags & WHERE_TRANSCONS)==0 + || (pTerm->eOperator & WO_EQUIV)==0 + ){ + disableTerm(pLevel, pTerm); + } + + return iReg; +} + +/* +** Generate code that will evaluate all == and IN constraints for an +** index scan. +** +** For example, consider table t1(a,b,c,d,e,f) with index i1(a,b,c). +** Suppose the WHERE clause is this: a==5 AND b IN (1,2,3) AND c>5 AND c<10 +** The index has as many as three equality constraints, but in this +** example, the third "c" value is an inequality. So only two +** constraints are coded. This routine will generate code to evaluate +** a==5 and b IN (1,2,3). The current values for a and b will be stored +** in consecutive registers and the index of the first register is returned. +** +** In the example above nEq==2. But this subroutine works for any value +** of nEq including 0. If nEq==0, this routine is nearly a no-op. +** The only thing it does is allocate the pLevel->iMem memory cell and +** compute the affinity string. +** +** The nExtraReg parameter is 0 or 1. It is 0 if all WHERE clause constraints +** are == or IN and are covered by the nEq. nExtraReg is 1 if there is +** an inequality constraint (such as the "c>=5 AND c<10" in the example) that +** occurs after the nEq quality constraints. +** +** This routine allocates a range of nEq+nExtraReg memory cells and returns +** the index of the first memory cell in that range. The code that +** calls this routine will use that memory range to store keys for +** start and termination conditions of the loop. +** key value of the loop. If one or more IN operators appear, then +** this routine allocates an additional nEq memory cells for internal +** use. +** +** Before returning, *pzAff is set to point to a buffer containing a +** copy of the column affinity string of the index allocated using +** sqlite3DbMalloc(). Except, entries in the copy of the string associated +** with equality constraints that use BLOB or NONE affinity are set to +** SQLITE_AFF_BLOB. This is to deal with SQL such as the following: +** +** CREATE TABLE t1(a TEXT PRIMARY KEY, b); +** SELECT ... FROM t1 AS t2, t1 WHERE t1.a = t2.b; +** +** In the example above, the index on t1(a) has TEXT affinity. But since +** the right hand side of the equality constraint (t2.b) has BLOB/NONE affinity, +** no conversion should be attempted before using a t2.b value as part of +** a key to search the index. Hence the first byte in the returned affinity +** string in this example would be set to SQLITE_AFF_BLOB. +*/ +static int codeAllEqualityTerms( + Parse *pParse, /* Parsing context */ + WhereLevel *pLevel, /* Which nested loop of the FROM we are coding */ + int bRev, /* Reverse the order of IN operators */ + int nExtraReg, /* Number of extra registers to allocate */ + char **pzAff /* OUT: Set to point to affinity string */ +){ + u16 nEq; /* The number of == or IN constraints to code */ + u16 nSkip; /* Number of left-most columns to skip */ + Vdbe *v = pParse->pVdbe; /* The vm under construction */ + Index *pIdx; /* The index being used for this loop */ + WhereTerm *pTerm; /* A single constraint term */ + WhereLoop *pLoop; /* The WhereLoop object */ + int j; /* Loop counter */ + int regBase; /* Base register */ + int nReg; /* Number of registers to allocate */ + char *zAff; /* Affinity string to return */ + + /* This module is only called on query plans that use an index. */ + pLoop = pLevel->pWLoop; + assert( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 ); + nEq = pLoop->u.btree.nEq; + nSkip = pLoop->nSkip; + pIdx = pLoop->u.btree.pIndex; + assert( pIdx!=0 ); + + /* Figure out how many memory cells we will need then allocate them. + */ + regBase = pParse->nMem + 1; + nReg = nEq + nExtraReg; + pParse->nMem += nReg; + + zAff = sqlite3DbStrDup(pParse->db,sqlite3IndexAffinityStr(pParse->db,pIdx)); + assert( zAff!=0 || pParse->db->mallocFailed ); + + if( nSkip ){ + int iIdxCur = pLevel->iIdxCur; + sqlite3VdbeAddOp3(v, OP_Null, 0, regBase, regBase+nSkip-1); + sqlite3VdbeAddOp1(v, (bRev?OP_Last:OP_Rewind), iIdxCur); + VdbeCoverageIf(v, bRev==0); + VdbeCoverageIf(v, bRev!=0); + VdbeComment((v, "begin skip-scan on %s", pIdx->zName)); + j = sqlite3VdbeAddOp0(v, OP_Goto); + assert( pLevel->addrSkip==0 ); + pLevel->addrSkip = sqlite3VdbeAddOp4Int(v, (bRev?OP_SeekLT:OP_SeekGT), + iIdxCur, 0, regBase, nSkip); + VdbeCoverageIf(v, bRev==0); + VdbeCoverageIf(v, bRev!=0); + sqlite3VdbeJumpHere(v, j); + for(j=0; jaiColumn[j]==XN_EXPR ); + VdbeComment((v, "%s", explainIndexColumnName(pIdx, j))); + } + } + + /* Evaluate the equality constraints + */ + assert( zAff==0 || (int)strlen(zAff)>=nEq ); + for(j=nSkip; jaLTerm[j]; + assert( pTerm!=0 ); + /* The following testcase is true for indices with redundant columns. + ** Ex: CREATE INDEX i1 ON t1(a,b,a); SELECT * FROM t1 WHERE a=0 AND b=0; */ + testcase( (pTerm->wtFlags & TERM_CODED)!=0 ); + testcase( pTerm->wtFlags & TERM_VIRTUAL ); + r1 = codeEqualityTerm(pParse, pTerm, pLevel, j, bRev, regBase+j); + if( r1!=regBase+j ){ + if( nReg==1 ){ + sqlite3ReleaseTempReg(pParse, regBase); + regBase = r1; + }else{ + sqlite3VdbeAddOp2(v, OP_Copy, r1, regBase+j); + } + } + if( pTerm->eOperator & WO_IN ){ + if( pTerm->pExpr->flags & EP_xIsSelect ){ + /* No affinity ever needs to be (or should be) applied to a value + ** from the RHS of an "? IN (SELECT ...)" expression. The + ** sqlite3FindInIndex() routine has already ensured that the + ** affinity of the comparison has been applied to the value. */ + if( zAff ) zAff[j] = SQLITE_AFF_BLOB; + } + }else if( (pTerm->eOperator & WO_ISNULL)==0 ){ + Expr *pRight = pTerm->pExpr->pRight; + if( (pTerm->wtFlags & TERM_IS)==0 && sqlite3ExprCanBeNull(pRight) ){ + sqlite3VdbeAddOp2(v, OP_IsNull, regBase+j, pLevel->addrBrk); + VdbeCoverage(v); + } + if( pParse->nErr==0 ){ + assert( pParse->db->mallocFailed==0 ); + if( sqlite3CompareAffinity(pRight, zAff[j])==SQLITE_AFF_BLOB ){ + zAff[j] = SQLITE_AFF_BLOB; + } + if( sqlite3ExprNeedsNoAffinityChange(pRight, zAff[j]) ){ + zAff[j] = SQLITE_AFF_BLOB; + } + } + } + } + *pzAff = zAff; + return regBase; +} + +#ifndef SQLITE_LIKE_DOESNT_MATCH_BLOBS +/* +** If the most recently coded instruction is a constant range constraint +** (a string literal) that originated from the LIKE optimization, then +** set P3 and P5 on the OP_String opcode so that the string will be cast +** to a BLOB at appropriate times. +** +** The LIKE optimization trys to evaluate "x LIKE 'abc%'" as a range +** expression: "x>='ABC' AND x<'abd'". But this requires that the range +** scan loop run twice, once for strings and a second time for BLOBs. +** The OP_String opcodes on the second pass convert the upper and lower +** bound string constants to blobs. This routine makes the necessary changes +** to the OP_String opcodes for that to happen. +** +** Except, of course, if SQLITE_LIKE_DOESNT_MATCH_BLOBS is defined, then +** only the one pass through the string space is required, so this routine +** becomes a no-op. +*/ +static void whereLikeOptimizationStringFixup( + Vdbe *v, /* prepared statement under construction */ + WhereLevel *pLevel, /* The loop that contains the LIKE operator */ + WhereTerm *pTerm /* The upper or lower bound just coded */ +){ + if( pTerm->wtFlags & TERM_LIKEOPT ){ + VdbeOp *pOp; + assert( pLevel->iLikeRepCntr>0 ); + pOp = sqlite3VdbeGetLastOp(v); + assert( pOp!=0 ); + assert( pOp->opcode==OP_String8 + || pTerm->pWC->pWInfo->pParse->db->mallocFailed ); + pOp->p3 = (int)(pLevel->iLikeRepCntr>>1); /* Register holding counter */ + pOp->p5 = (u8)(pLevel->iLikeRepCntr&1); /* ASC or DESC */ + } +} +#else +# define whereLikeOptimizationStringFixup(A,B,C) +#endif + +#ifdef SQLITE_ENABLE_CURSOR_HINTS +/* +** Information is passed from codeCursorHint() down to individual nodes of +** the expression tree (by sqlite3WalkExpr()) using an instance of this +** structure. +*/ +struct CCurHint { + int iTabCur; /* Cursor for the main table */ + int iIdxCur; /* Cursor for the index, if pIdx!=0. Unused otherwise */ + Index *pIdx; /* The index used to access the table */ +}; + +/* +** This function is called for every node of an expression that is a candidate +** for a cursor hint on an index cursor. For TK_COLUMN nodes that reference +** the table CCurHint.iTabCur, verify that the same column can be +** accessed through the index. If it cannot, then set pWalker->eCode to 1. +*/ +static int codeCursorHintCheckExpr(Walker *pWalker, Expr *pExpr){ + struct CCurHint *pHint = pWalker->u.pCCurHint; + assert( pHint->pIdx!=0 ); + if( pExpr->op==TK_COLUMN + && pExpr->iTable==pHint->iTabCur + && sqlite3TableColumnToIndex(pHint->pIdx, pExpr->iColumn)<0 + ){ + pWalker->eCode = 1; + } + return WRC_Continue; +} + +/* +** Test whether or not expression pExpr, which was part of a WHERE clause, +** should be included in the cursor-hint for a table that is on the rhs +** of a LEFT JOIN. Set Walker.eCode to non-zero before returning if the +** expression is not suitable. +** +** An expression is unsuitable if it might evaluate to non NULL even if +** a TK_COLUMN node that does affect the value of the expression is set +** to NULL. For example: +** +** col IS NULL +** col IS NOT NULL +** coalesce(col, 1) +** CASE WHEN col THEN 0 ELSE 1 END +*/ +static int codeCursorHintIsOrFunction(Walker *pWalker, Expr *pExpr){ + if( pExpr->op==TK_IS + || pExpr->op==TK_ISNULL || pExpr->op==TK_ISNOT + || pExpr->op==TK_NOTNULL || pExpr->op==TK_CASE + ){ + pWalker->eCode = 1; + }else if( pExpr->op==TK_FUNCTION ){ + int d1; + char d2[4]; + if( 0==sqlite3IsLikeFunction(pWalker->pParse->db, pExpr, &d1, d2) ){ + pWalker->eCode = 1; + } + } + + return WRC_Continue; +} + + +/* +** This function is called on every node of an expression tree used as an +** argument to the OP_CursorHint instruction. If the node is a TK_COLUMN +** that accesses any table other than the one identified by +** CCurHint.iTabCur, then do the following: +** +** 1) allocate a register and code an OP_Column instruction to read +** the specified column into the new register, and +** +** 2) transform the expression node to a TK_REGISTER node that reads +** from the newly populated register. +** +** Also, if the node is a TK_COLUMN that does access the table identified +** by pCCurHint.iTabCur, and an index is being used (which we will +** know because CCurHint.pIdx!=0) then transform the TK_COLUMN into +** an access of the index rather than the original table. +*/ +static int codeCursorHintFixExpr(Walker *pWalker, Expr *pExpr){ + int rc = WRC_Continue; + int reg; + struct CCurHint *pHint = pWalker->u.pCCurHint; + if( pExpr->op==TK_COLUMN ){ + if( pExpr->iTable!=pHint->iTabCur ){ + reg = ++pWalker->pParse->nMem; /* Register for column value */ + reg = sqlite3ExprCodeTarget(pWalker->pParse, pExpr, reg); + pExpr->op = TK_REGISTER; + pExpr->iTable = reg; + }else if( pHint->pIdx!=0 ){ + pExpr->iTable = pHint->iIdxCur; + pExpr->iColumn = sqlite3TableColumnToIndex(pHint->pIdx, pExpr->iColumn); + assert( pExpr->iColumn>=0 ); + } + }else if( pExpr->pAggInfo ){ + rc = WRC_Prune; + reg = ++pWalker->pParse->nMem; /* Register for column value */ + reg = sqlite3ExprCodeTarget(pWalker->pParse, pExpr, reg); + pExpr->op = TK_REGISTER; + pExpr->iTable = reg; + }else if( pExpr->op==TK_TRUEFALSE ){ + /* Do not walk disabled expressions. tag-20230504-1 */ + return WRC_Prune; + } + return rc; +} + +/* +** Insert an OP_CursorHint instruction if it is appropriate to do so. +*/ +static void codeCursorHint( + SrcItem *pTabItem, /* FROM clause item */ + WhereInfo *pWInfo, /* The where clause */ + WhereLevel *pLevel, /* Which loop to provide hints for */ + WhereTerm *pEndRange /* Hint this end-of-scan boundary term if not NULL */ +){ + Parse *pParse = pWInfo->pParse; + sqlite3 *db = pParse->db; + Vdbe *v = pParse->pVdbe; + Expr *pExpr = 0; + WhereLoop *pLoop = pLevel->pWLoop; + int iCur; + WhereClause *pWC; + WhereTerm *pTerm; + int i, j; + struct CCurHint sHint; + Walker sWalker; + + if( OptimizationDisabled(db, SQLITE_CursorHints) ) return; + iCur = pLevel->iTabCur; + assert( iCur==pWInfo->pTabList->a[pLevel->iFrom].iCursor ); + sHint.iTabCur = iCur; + sHint.iIdxCur = pLevel->iIdxCur; + sHint.pIdx = pLoop->u.btree.pIndex; + memset(&sWalker, 0, sizeof(sWalker)); + sWalker.pParse = pParse; + sWalker.u.pCCurHint = &sHint; + pWC = &pWInfo->sWC; + for(i=0; inBase; i++){ + pTerm = &pWC->a[i]; + if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue; + if( pTerm->prereqAll & pLevel->notReady ) continue; + + /* Any terms specified as part of the ON(...) clause for any LEFT + ** JOIN for which the current table is not the rhs are omitted + ** from the cursor-hint. + ** + ** If this table is the rhs of a LEFT JOIN, "IS" or "IS NULL" terms + ** that were specified as part of the WHERE clause must be excluded. + ** This is to address the following: + ** + ** SELECT ... t1 LEFT JOIN t2 ON (t1.a=t2.b) WHERE t2.c IS NULL; + ** + ** Say there is a single row in t2 that matches (t1.a=t2.b), but its + ** t2.c values is not NULL. If the (t2.c IS NULL) constraint is + ** pushed down to the cursor, this row is filtered out, causing + ** SQLite to synthesize a row of NULL values. Which does match the + ** WHERE clause, and so the query returns a row. Which is incorrect. + ** + ** For the same reason, WHERE terms such as: + ** + ** WHERE 1 = (t2.c IS NULL) + ** + ** are also excluded. See codeCursorHintIsOrFunction() for details. + */ + if( pTabItem->fg.jointype & JT_LEFT ){ + Expr *pExpr = pTerm->pExpr; + if( !ExprHasProperty(pExpr, EP_OuterON) + || pExpr->w.iJoin!=pTabItem->iCursor + ){ + sWalker.eCode = 0; + sWalker.xExprCallback = codeCursorHintIsOrFunction; + sqlite3WalkExpr(&sWalker, pTerm->pExpr); + if( sWalker.eCode ) continue; + } + }else{ + if( ExprHasProperty(pTerm->pExpr, EP_OuterON) ) continue; + } + + /* All terms in pWLoop->aLTerm[] except pEndRange are used to initialize + ** the cursor. These terms are not needed as hints for a pure range + ** scan (that has no == terms) so omit them. */ + if( pLoop->u.btree.nEq==0 && pTerm!=pEndRange ){ + for(j=0; jnLTerm && pLoop->aLTerm[j]!=pTerm; j++){} + if( jnLTerm ) continue; + } + + /* No subqueries or non-deterministic functions allowed */ + if( sqlite3ExprContainsSubquery(pTerm->pExpr) ) continue; + + /* For an index scan, make sure referenced columns are actually in + ** the index. */ + if( sHint.pIdx!=0 ){ + sWalker.eCode = 0; + sWalker.xExprCallback = codeCursorHintCheckExpr; + sqlite3WalkExpr(&sWalker, pTerm->pExpr); + if( sWalker.eCode ) continue; + } + + /* If we survive all prior tests, that means this term is worth hinting */ + pExpr = sqlite3ExprAnd(pParse, pExpr, sqlite3ExprDup(db, pTerm->pExpr, 0)); + } + if( pExpr!=0 ){ + sWalker.xExprCallback = codeCursorHintFixExpr; + if( pParse->nErr==0 ) sqlite3WalkExpr(&sWalker, pExpr); + sqlite3VdbeAddOp4(v, OP_CursorHint, + (sHint.pIdx ? sHint.iIdxCur : sHint.iTabCur), 0, 0, + (const char*)pExpr, P4_EXPR); + } +} +#else +# define codeCursorHint(A,B,C,D) /* No-op */ +#endif /* SQLITE_ENABLE_CURSOR_HINTS */ + +/* +** Cursor iCur is open on an intkey b-tree (a table). Register iRowid contains +** a rowid value just read from cursor iIdxCur, open on index pIdx. This +** function generates code to do a deferred seek of cursor iCur to the +** rowid stored in register iRowid. +** +** Normally, this is just: +** +** OP_DeferredSeek $iCur $iRowid +** +** Which causes a seek on $iCur to the row with rowid $iRowid. +** +** However, if the scan currently being coded is a branch of an OR-loop and +** the statement currently being coded is a SELECT, then additional information +** is added that might allow OP_Column to omit the seek and instead do its +** lookup on the index, thus avoiding an expensive seek operation. To +** enable this optimization, the P3 of OP_DeferredSeek is set to iIdxCur +** and P4 is set to an array of integers containing one entry for each column +** in the table. For each table column, if the column is the i'th +** column of the index, then the corresponding array entry is set to (i+1). +** If the column does not appear in the index at all, the array entry is set +** to 0. The OP_Column opcode can check this array to see if the column it +** wants is in the index and if it is, it will substitute the index cursor +** and column number and continue with those new values, rather than seeking +** the table cursor. +*/ +static void codeDeferredSeek( + WhereInfo *pWInfo, /* Where clause context */ + Index *pIdx, /* Index scan is using */ + int iCur, /* Cursor for IPK b-tree */ + int iIdxCur /* Index cursor */ +){ + Parse *pParse = pWInfo->pParse; /* Parse context */ + Vdbe *v = pParse->pVdbe; /* Vdbe to generate code within */ + + assert( iIdxCur>0 ); + assert( pIdx->aiColumn[pIdx->nColumn-1]==-1 ); + + pWInfo->bDeferredSeek = 1; + sqlite3VdbeAddOp3(v, OP_DeferredSeek, iIdxCur, 0, iCur); + if( (pWInfo->wctrlFlags & (WHERE_OR_SUBCLAUSE|WHERE_RIGHT_JOIN)) + && DbMaskAllZero(sqlite3ParseToplevel(pParse)->writeMask) + ){ + int i; + Table *pTab = pIdx->pTable; + u32 *ai = (u32*)sqlite3DbMallocZero(pParse->db, sizeof(u32)*(pTab->nCol+1)); + if( ai ){ + ai[0] = pTab->nCol; + for(i=0; inColumn-1; i++){ + int x1, x2; + assert( pIdx->aiColumn[i]nCol ); + x1 = pIdx->aiColumn[i]; + x2 = sqlite3TableColumnToStorage(pTab, x1); + testcase( x1!=x2 ); + if( x1>=0 ) ai[x2+1] = i+1; + } + sqlite3VdbeChangeP4(v, -1, (char*)ai, P4_INTARRAY); + } + } +} + +/* +** If the expression passed as the second argument is a vector, generate +** code to write the first nReg elements of the vector into an array +** of registers starting with iReg. +** +** If the expression is not a vector, then nReg must be passed 1. In +** this case, generate code to evaluate the expression and leave the +** result in register iReg. +*/ +static void codeExprOrVector(Parse *pParse, Expr *p, int iReg, int nReg){ + assert( nReg>0 ); + if( p && sqlite3ExprIsVector(p) ){ +#ifndef SQLITE_OMIT_SUBQUERY + if( ExprUseXSelect(p) ){ + Vdbe *v = pParse->pVdbe; + int iSelect; + assert( p->op==TK_SELECT ); + iSelect = sqlite3CodeSubselect(pParse, p); + sqlite3VdbeAddOp3(v, OP_Copy, iSelect, iReg, nReg-1); + }else +#endif + { + int i; + const ExprList *pList; + assert( ExprUseXList(p) ); + pList = p->x.pList; + assert( nReg<=pList->nExpr ); + for(i=0; ia[i].pExpr, iReg+i); + } + } + }else{ + assert( nReg==1 || pParse->nErr ); + sqlite3ExprCode(pParse, p, iReg); + } +} + +/* +** The pTruth expression is always true because it is the WHERE clause +** a partial index that is driving a query loop. Look through all of the +** WHERE clause terms on the query, and if any of those terms must be +** true because pTruth is true, then mark those WHERE clause terms as +** coded. +*/ +static void whereApplyPartialIndexConstraints( + Expr *pTruth, + int iTabCur, + WhereClause *pWC +){ + int i; + WhereTerm *pTerm; + while( pTruth->op==TK_AND ){ + whereApplyPartialIndexConstraints(pTruth->pLeft, iTabCur, pWC); + pTruth = pTruth->pRight; + } + for(i=0, pTerm=pWC->a; inTerm; i++, pTerm++){ + Expr *pExpr; + if( pTerm->wtFlags & TERM_CODED ) continue; + pExpr = pTerm->pExpr; + if( sqlite3ExprCompare(0, pExpr, pTruth, iTabCur)==0 ){ + pTerm->wtFlags |= TERM_CODED; + } + } +} + +/* +** This routine is called right after An OP_Filter has been generated and +** before the corresponding index search has been performed. This routine +** checks to see if there are additional Bloom filters in inner loops that +** can be checked prior to doing the index lookup. If there are available +** inner-loop Bloom filters, then evaluate those filters now, before the +** index lookup. The idea is that a Bloom filter check is way faster than +** an index lookup, and the Bloom filter might return false, meaning that +** the index lookup can be skipped. +** +** We know that an inner loop uses a Bloom filter because it has the +** WhereLevel.regFilter set. If an inner-loop Bloom filter is checked, +** then clear the WhereLevel.regFilter value to prevent the Bloom filter +** from being checked a second time when the inner loop is evaluated. +*/ +static SQLITE_NOINLINE void filterPullDown( + Parse *pParse, /* Parsing context */ + WhereInfo *pWInfo, /* Complete information about the WHERE clause */ + int iLevel, /* Which level of pWInfo->a[] should be coded */ + int addrNxt, /* Jump here to bypass inner loops */ + Bitmask notReady /* Loops that are not ready */ +){ + int saved_addrBrk; + while( ++iLevel < pWInfo->nLevel ){ + WhereLevel *pLevel = &pWInfo->a[iLevel]; + WhereLoop *pLoop = pLevel->pWLoop; + if( pLevel->regFilter==0 ) continue; + if( pLevel->pWLoop->nSkip ) continue; + /* ,--- Because sqlite3ConstructBloomFilter() has will not have set + ** vvvvv--' pLevel->regFilter if this were true. */ + if( NEVER(pLoop->prereq & notReady) ) continue; + saved_addrBrk = pLevel->addrBrk; + pLevel->addrBrk = addrNxt; + if( pLoop->wsFlags & WHERE_IPK ){ + WhereTerm *pTerm = pLoop->aLTerm[0]; + int regRowid; + assert( pTerm!=0 ); + assert( pTerm->pExpr!=0 ); + testcase( pTerm->wtFlags & TERM_VIRTUAL ); + regRowid = sqlite3GetTempReg(pParse); + regRowid = codeEqualityTerm(pParse, pTerm, pLevel, 0, 0, regRowid); + sqlite3VdbeAddOp2(pParse->pVdbe, OP_MustBeInt, regRowid, addrNxt); + VdbeCoverage(pParse->pVdbe); + sqlite3VdbeAddOp4Int(pParse->pVdbe, OP_Filter, pLevel->regFilter, + addrNxt, regRowid, 1); + VdbeCoverage(pParse->pVdbe); + }else{ + u16 nEq = pLoop->u.btree.nEq; + int r1; + char *zStartAff; + + assert( pLoop->wsFlags & WHERE_INDEXED ); + assert( (pLoop->wsFlags & WHERE_COLUMN_IN)==0 ); + r1 = codeAllEqualityTerms(pParse,pLevel,0,0,&zStartAff); + codeApplyAffinity(pParse, r1, nEq, zStartAff); + sqlite3DbFree(pParse->db, zStartAff); + sqlite3VdbeAddOp4Int(pParse->pVdbe, OP_Filter, pLevel->regFilter, + addrNxt, r1, nEq); + VdbeCoverage(pParse->pVdbe); + } + pLevel->regFilter = 0; + pLevel->addrBrk = saved_addrBrk; + } +} + +/* +** Loop pLoop is a WHERE_INDEXED level that uses at least one IN(...) +** operator. Return true if level pLoop is guaranteed to visit only one +** row for each key generated for the index. +*/ +static int whereLoopIsOneRow(WhereLoop *pLoop){ + if( pLoop->u.btree.pIndex->onError + && pLoop->nSkip==0 + && pLoop->u.btree.nEq==pLoop->u.btree.pIndex->nKeyCol + ){ + int ii; + for(ii=0; iiu.btree.nEq; ii++){ + if( pLoop->aLTerm[ii]->eOperator & (WO_IS|WO_ISNULL) ){ + return 0; + } + } + return 1; + } + return 0; +} + +/* +** Generate code for the start of the iLevel-th loop in the WHERE clause +** implementation described by pWInfo. +*/ +SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( + Parse *pParse, /* Parsing context */ + Vdbe *v, /* Prepared statement under construction */ + WhereInfo *pWInfo, /* Complete information about the WHERE clause */ + int iLevel, /* Which level of pWInfo->a[] should be coded */ + WhereLevel *pLevel, /* The current level pointer */ + Bitmask notReady /* Which tables are currently available */ +){ + int j, k; /* Loop counters */ + int iCur; /* The VDBE cursor for the table */ + int addrNxt; /* Where to jump to continue with the next IN case */ + int bRev; /* True if we need to scan in reverse order */ + WhereLoop *pLoop; /* The WhereLoop object being coded */ + WhereClause *pWC; /* Decomposition of the entire WHERE clause */ + WhereTerm *pTerm; /* A WHERE clause term */ + sqlite3 *db; /* Database connection */ + SrcItem *pTabItem; /* FROM clause term being coded */ + int addrBrk; /* Jump here to break out of the loop */ + int addrCont; /* Jump here to continue with next cycle */ + int iRowidReg = 0; /* Rowid is stored in this register, if not zero */ + int iReleaseReg = 0; /* Temp register to free before returning */ + Index *pIdx = 0; /* Index used by loop (if any) */ + int iLoop; /* Iteration of constraint generator loop */ + + pWC = &pWInfo->sWC; + db = pParse->db; + pLoop = pLevel->pWLoop; + pTabItem = &pWInfo->pTabList->a[pLevel->iFrom]; + iCur = pTabItem->iCursor; + pLevel->notReady = notReady & ~sqlite3WhereGetMask(&pWInfo->sMaskSet, iCur); + bRev = (pWInfo->revMask>>iLevel)&1; + VdbeModuleComment((v, "Begin WHERE-loop%d: %s", + iLevel, pTabItem->pSTab->zName)); +#if WHERETRACE_ENABLED /* 0x4001 */ + if( sqlite3WhereTrace & 0x1 ){ + sqlite3DebugPrintf("Coding level %d of %d: notReady=%llx iFrom=%d\n", + iLevel, pWInfo->nLevel, (u64)notReady, pLevel->iFrom); + if( sqlite3WhereTrace & 0x1000 ){ + sqlite3WhereLoopPrint(pLoop, pWC); + } + } + if( (sqlite3WhereTrace & 0x4001)==0x4001 ){ + if( iLevel==0 ){ + sqlite3DebugPrintf("WHERE clause being coded:\n"); + sqlite3TreeViewExpr(0, pWInfo->pWhere, 0); + } + sqlite3DebugPrintf("All WHERE-clause terms before coding:\n"); + sqlite3WhereClausePrint(pWC); + } +#endif + + /* Create labels for the "break" and "continue" instructions + ** for the current loop. Jump to addrBrk to break out of a loop. + ** Jump to cont to go immediately to the next iteration of the + ** loop. + ** + ** When there is an IN operator, we also have a "addrNxt" label that + ** means to continue with the next IN value combination. When + ** there are no IN operators in the constraints, the "addrNxt" label + ** is the same as "addrBrk". + */ + addrBrk = pLevel->addrNxt = pLevel->addrBrk; + addrCont = pLevel->addrCont = sqlite3VdbeMakeLabel(pParse); + + /* If this is the right table of a LEFT OUTER JOIN, allocate and + ** initialize a memory cell that records if this table matches any + ** row of the left table of the join. + */ + assert( (pWInfo->wctrlFlags & (WHERE_OR_SUBCLAUSE|WHERE_RIGHT_JOIN)) + || pLevel->iFrom>0 || (pTabItem[0].fg.jointype & JT_LEFT)==0 + ); + if( pLevel->iFrom>0 && (pTabItem[0].fg.jointype & JT_LEFT)!=0 ){ + pLevel->iLeftJoin = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Integer, 0, pLevel->iLeftJoin); + VdbeComment((v, "init LEFT JOIN match flag")); + } + + /* Special case of a FROM clause subquery implemented as a co-routine */ + if( pTabItem->fg.viaCoroutine ){ + int regYield; + Subquery *pSubq; + assert( pTabItem->fg.isSubquery && pTabItem->u4.pSubq!=0 ); + pSubq = pTabItem->u4.pSubq; + regYield = pSubq->regReturn; + sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, pSubq->addrFillSub); + pLevel->p2 = sqlite3VdbeAddOp2(v, OP_Yield, regYield, addrBrk); + VdbeCoverage(v); + VdbeComment((v, "next row of %s", pTabItem->pSTab->zName)); + pLevel->op = OP_Goto; + }else + +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( (pLoop->wsFlags & WHERE_VIRTUALTABLE)!=0 ){ + /* Case 1: The table is a virtual-table. Use the VFilter and VNext + ** to access the data. + */ + int iReg; /* P3 Value for OP_VFilter */ + int addrNotFound; + int nConstraint = pLoop->nLTerm; + + iReg = sqlite3GetTempRange(pParse, nConstraint+2); + addrNotFound = pLevel->addrBrk; + for(j=0; jaLTerm[j]; + if( NEVER(pTerm==0) ) continue; + if( pTerm->eOperator & WO_IN ){ + if( SMASKBIT32(j) & pLoop->u.vtab.mHandleIn ){ + int iTab = pParse->nTab++; + int iCache = ++pParse->nMem; + sqlite3CodeRhsOfIN(pParse, pTerm->pExpr, iTab); + sqlite3VdbeAddOp3(v, OP_VInitIn, iTab, iTarget, iCache); + }else{ + codeEqualityTerm(pParse, pTerm, pLevel, j, bRev, iTarget); + addrNotFound = pLevel->addrNxt; + } + }else{ + Expr *pRight = pTerm->pExpr->pRight; + codeExprOrVector(pParse, pRight, iTarget, 1); + if( pTerm->eMatchOp==SQLITE_INDEX_CONSTRAINT_OFFSET + && pLoop->u.vtab.bOmitOffset + ){ + assert( pTerm->eOperator==WO_AUX ); + assert( pWInfo->pSelect!=0 ); + assert( pWInfo->pSelect->iOffset>0 ); + sqlite3VdbeAddOp2(v, OP_Integer, 0, pWInfo->pSelect->iOffset); + VdbeComment((v,"Zero OFFSET counter")); + } + } + } + sqlite3VdbeAddOp2(v, OP_Integer, pLoop->u.vtab.idxNum, iReg); + sqlite3VdbeAddOp2(v, OP_Integer, nConstraint, iReg+1); + /* The instruction immediately prior to OP_VFilter must be an OP_Integer + ** that sets the "argc" value for xVFilter. This is necessary for + ** resolveP2() to work correctly. See tag-20250207a. */ + sqlite3VdbeAddOp4(v, OP_VFilter, iCur, addrNotFound, iReg, + pLoop->u.vtab.idxStr, + pLoop->u.vtab.needFree ? P4_DYNAMIC : P4_STATIC); + VdbeCoverage(v); + pLoop->u.vtab.needFree = 0; + /* An OOM inside of AddOp4(OP_VFilter) instruction above might have freed + ** the u.vtab.idxStr. NULL it out to prevent a use-after-free */ + if( db->mallocFailed ) pLoop->u.vtab.idxStr = 0; + pLevel->p1 = iCur; + pLevel->op = pWInfo->eOnePass ? OP_Noop : OP_VNext; + pLevel->p2 = sqlite3VdbeCurrentAddr(v); + assert( (pLoop->wsFlags & WHERE_MULTI_OR)==0 ); + + for(j=0; jaLTerm[j]; + if( j<16 && (pLoop->u.vtab.omitMask>>j)&1 ){ + disableTerm(pLevel, pTerm); + continue; + } + if( (pTerm->eOperator & WO_IN)!=0 + && (SMASKBIT32(j) & pLoop->u.vtab.mHandleIn)==0 + && !db->mallocFailed + ){ + Expr *pCompare; /* The comparison operator */ + Expr *pRight; /* RHS of the comparison */ + VdbeOp *pOp; /* Opcode to access the value of the IN constraint */ + int iIn; /* IN loop corresponding to the j-th constraint */ + + /* Reload the constraint value into reg[iReg+j+2]. The same value + ** was loaded into the same register prior to the OP_VFilter, but + ** the xFilter implementation might have changed the datatype or + ** encoding of the value in the register, so it *must* be reloaded. + */ + for(iIn=0; ALWAYS(iInu.in.nIn); iIn++){ + pOp = sqlite3VdbeGetOp(v, pLevel->u.in.aInLoop[iIn].addrInTop); + if( (pOp->opcode==OP_Column && pOp->p3==iReg+j+2) + || (pOp->opcode==OP_Rowid && pOp->p2==iReg+j+2) + ){ + testcase( pOp->opcode==OP_Rowid ); + sqlite3VdbeAddOp3(v, pOp->opcode, pOp->p1, pOp->p2, pOp->p3); + break; + } + } + + /* Generate code that will continue to the next row if + ** the IN constraint is not satisfied + */ + pCompare = sqlite3PExpr(pParse, TK_EQ, 0, 0); + if( !db->mallocFailed ){ + int iFld = pTerm->u.x.iField; + Expr *pLeft = pTerm->pExpr->pLeft; + assert( pLeft!=0 ); + if( iFld>0 ){ + assert( pLeft->op==TK_VECTOR ); + assert( ExprUseXList(pLeft) ); + assert( iFld<=pLeft->x.pList->nExpr ); + pCompare->pLeft = pLeft->x.pList->a[iFld-1].pExpr; + }else{ + pCompare->pLeft = pLeft; + } + pCompare->pRight = pRight = sqlite3Expr(db, TK_REGISTER, 0); + if( pRight ){ + pRight->iTable = iReg+j+2; + sqlite3ExprIfFalse( + pParse, pCompare, pLevel->addrCont, SQLITE_JUMPIFNULL + ); + } + pCompare->pLeft = 0; + } + sqlite3ExprDelete(db, pCompare); + } + } + + /* These registers need to be preserved in case there is an IN operator + ** loop. So we could deallocate the registers here (and potentially + ** reuse them later) if (pLoop->wsFlags & WHERE_IN_ABLE)==0. But it seems + ** simpler and safer to simply not reuse the registers. + ** + ** sqlite3ReleaseTempRange(pParse, iReg, nConstraint+2); + */ + }else +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + + if( (pLoop->wsFlags & WHERE_IPK)!=0 + && (pLoop->wsFlags & (WHERE_COLUMN_IN|WHERE_COLUMN_EQ))!=0 + ){ + /* Case 2: We can directly reference a single row using an + ** equality comparison against the ROWID field. Or + ** we reference multiple rows using a "rowid IN (...)" + ** construct. + */ + assert( pLoop->u.btree.nEq==1 ); + pTerm = pLoop->aLTerm[0]; + assert( pTerm!=0 ); + assert( pTerm->pExpr!=0 ); + testcase( pTerm->wtFlags & TERM_VIRTUAL ); + iReleaseReg = ++pParse->nMem; + iRowidReg = codeEqualityTerm(pParse, pTerm, pLevel, 0, bRev, iReleaseReg); + if( iRowidReg!=iReleaseReg ) sqlite3ReleaseTempReg(pParse, iReleaseReg); + addrNxt = pLevel->addrNxt; + if( pLevel->regFilter ){ + sqlite3VdbeAddOp2(v, OP_MustBeInt, iRowidReg, addrNxt); + VdbeCoverage(v); + sqlite3VdbeAddOp4Int(v, OP_Filter, pLevel->regFilter, addrNxt, + iRowidReg, 1); + VdbeCoverage(v); + filterPullDown(pParse, pWInfo, iLevel, addrNxt, notReady); + } + sqlite3VdbeAddOp3(v, OP_SeekRowid, iCur, addrNxt, iRowidReg); + VdbeCoverage(v); + pLevel->op = OP_Noop; + }else if( (pLoop->wsFlags & WHERE_IPK)!=0 + && (pLoop->wsFlags & WHERE_COLUMN_RANGE)!=0 + ){ + /* Case 3: We have an inequality comparison against the ROWID field. + */ + int testOp = OP_Noop; + int start; + int memEndValue = 0; + WhereTerm *pStart, *pEnd; + + j = 0; + pStart = pEnd = 0; + if( pLoop->wsFlags & WHERE_BTM_LIMIT ) pStart = pLoop->aLTerm[j++]; + if( pLoop->wsFlags & WHERE_TOP_LIMIT ) pEnd = pLoop->aLTerm[j++]; + assert( pStart!=0 || pEnd!=0 ); + if( bRev ){ + pTerm = pStart; + pStart = pEnd; + pEnd = pTerm; + } + codeCursorHint(pTabItem, pWInfo, pLevel, pEnd); + if( pStart ){ + Expr *pX; /* The expression that defines the start bound */ + int r1, rTemp; /* Registers for holding the start boundary */ + int op; /* Cursor seek operation */ + + /* The following constant maps TK_xx codes into corresponding + ** seek opcodes. It depends on a particular ordering of TK_xx + */ + const u8 aMoveOp[] = { + /* TK_GT */ OP_SeekGT, + /* TK_LE */ OP_SeekLE, + /* TK_LT */ OP_SeekLT, + /* TK_GE */ OP_SeekGE + }; + assert( TK_LE==TK_GT+1 ); /* Make sure the ordering.. */ + assert( TK_LT==TK_GT+2 ); /* ... of the TK_xx values... */ + assert( TK_GE==TK_GT+3 ); /* ... is correct. */ + + assert( (pStart->wtFlags & TERM_VNULL)==0 ); + testcase( pStart->wtFlags & TERM_VIRTUAL ); + pX = pStart->pExpr; + assert( pX!=0 ); + testcase( pStart->leftCursor!=iCur ); /* transitive constraints */ + if( sqlite3ExprIsVector(pX->pRight) ){ + r1 = rTemp = sqlite3GetTempReg(pParse); + codeExprOrVector(pParse, pX->pRight, r1, 1); + testcase( pX->op==TK_GT ); + testcase( pX->op==TK_GE ); + testcase( pX->op==TK_LT ); + testcase( pX->op==TK_LE ); + op = aMoveOp[((pX->op - TK_GT - 1) & 0x3) | 0x1]; + assert( pX->op!=TK_GT || op==OP_SeekGE ); + assert( pX->op!=TK_GE || op==OP_SeekGE ); + assert( pX->op!=TK_LT || op==OP_SeekLE ); + assert( pX->op!=TK_LE || op==OP_SeekLE ); + }else{ + r1 = sqlite3ExprCodeTemp(pParse, pX->pRight, &rTemp); + disableTerm(pLevel, pStart); + op = aMoveOp[(pX->op - TK_GT)]; + } + sqlite3VdbeAddOp3(v, op, iCur, addrBrk, r1); + VdbeComment((v, "pk")); + VdbeCoverageIf(v, pX->op==TK_GT); + VdbeCoverageIf(v, pX->op==TK_LE); + VdbeCoverageIf(v, pX->op==TK_LT); + VdbeCoverageIf(v, pX->op==TK_GE); + sqlite3ReleaseTempReg(pParse, rTemp); + }else{ + sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iCur, pLevel->addrHalt); + VdbeCoverageIf(v, bRev==0); + VdbeCoverageIf(v, bRev!=0); + } + if( pEnd ){ + Expr *pX; + pX = pEnd->pExpr; + assert( pX!=0 ); + assert( (pEnd->wtFlags & TERM_VNULL)==0 ); + testcase( pEnd->leftCursor!=iCur ); /* Transitive constraints */ + testcase( pEnd->wtFlags & TERM_VIRTUAL ); + memEndValue = ++pParse->nMem; + codeExprOrVector(pParse, pX->pRight, memEndValue, 1); + if( 0==sqlite3ExprIsVector(pX->pRight) + && (pX->op==TK_LT || pX->op==TK_GT) + ){ + testOp = bRev ? OP_Le : OP_Ge; + }else{ + testOp = bRev ? OP_Lt : OP_Gt; + } + if( 0==sqlite3ExprIsVector(pX->pRight) ){ + disableTerm(pLevel, pEnd); + } + } + start = sqlite3VdbeCurrentAddr(v); + pLevel->op = bRev ? OP_Prev : OP_Next; + pLevel->p1 = iCur; + pLevel->p2 = start; + assert( pLevel->p5==0 ); + if( testOp!=OP_Noop ){ + iRowidReg = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Rowid, iCur, iRowidReg); + sqlite3VdbeAddOp3(v, testOp, memEndValue, addrBrk, iRowidReg); + VdbeCoverageIf(v, testOp==OP_Le); + VdbeCoverageIf(v, testOp==OP_Lt); + VdbeCoverageIf(v, testOp==OP_Ge); + VdbeCoverageIf(v, testOp==OP_Gt); + sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC | SQLITE_JUMPIFNULL); + } + }else if( pLoop->wsFlags & WHERE_INDEXED ){ + /* Case 4: Search using an index. + ** + ** The WHERE clause may contain zero or more equality + ** terms ("==" or "IN" or "IS" operators) that refer to the N + ** left-most columns of the index. It may also contain + ** inequality constraints (>, <, >= or <=) on the indexed + ** column that immediately follows the N equalities. Only + ** the right-most column can be an inequality - the rest must + ** use the "==", "IN", or "IS" operators. For example, if the + ** index is on (x,y,z), then the following clauses are all + ** optimized: + ** + ** x=5 + ** x=5 AND y=10 + ** x=5 AND y<10 + ** x=5 AND y>5 AND y<10 + ** x=5 AND y=5 AND z<=10 + ** + ** The z<10 term of the following cannot be used, only + ** the x=5 term: + ** + ** x=5 AND z<10 + ** + ** N may be zero if there are inequality constraints. + ** If there are no inequality constraints, then N is at + ** least one. + ** + ** This case is also used when there are no WHERE clause + ** constraints but an index is selected anyway, in order + ** to force the output order to conform to an ORDER BY. + */ + static const u8 aStartOp[] = { + 0, + 0, + OP_Rewind, /* 2: (!start_constraints && startEq && !bRev) */ + OP_Last, /* 3: (!start_constraints && startEq && bRev) */ + OP_SeekGT, /* 4: (start_constraints && !startEq && !bRev) */ + OP_SeekLT, /* 5: (start_constraints && !startEq && bRev) */ + OP_SeekGE, /* 6: (start_constraints && startEq && !bRev) */ + OP_SeekLE /* 7: (start_constraints && startEq && bRev) */ + }; + static const u8 aEndOp[] = { + OP_IdxGE, /* 0: (end_constraints && !bRev && !endEq) */ + OP_IdxGT, /* 1: (end_constraints && !bRev && endEq) */ + OP_IdxLE, /* 2: (end_constraints && bRev && !endEq) */ + OP_IdxLT, /* 3: (end_constraints && bRev && endEq) */ + }; + u16 nEq = pLoop->u.btree.nEq; /* Number of == or IN terms */ + u16 nBtm = pLoop->u.btree.nBtm; /* Length of BTM vector */ + u16 nTop = pLoop->u.btree.nTop; /* Length of TOP vector */ + int regBase; /* Base register holding constraint values */ + WhereTerm *pRangeStart = 0; /* Inequality constraint at range start */ + WhereTerm *pRangeEnd = 0; /* Inequality constraint at range end */ + int startEq; /* True if range start uses ==, >= or <= */ + int endEq; /* True if range end uses ==, >= or <= */ + int start_constraints; /* Start of range is constrained */ + int nConstraint; /* Number of constraint terms */ + int iIdxCur; /* The VDBE cursor for the index */ + int nExtraReg = 0; /* Number of extra registers needed */ + int op; /* Instruction opcode */ + char *zStartAff; /* Affinity for start of range constraint */ + char *zEndAff = 0; /* Affinity for end of range constraint */ + u8 bSeekPastNull = 0; /* True to seek past initial nulls */ + u8 bStopAtNull = 0; /* Add condition to terminate at NULLs */ + int omitTable; /* True if we use the index only */ + int regBignull = 0; /* big-null flag register */ + int addrSeekScan = 0; /* Opcode of the OP_SeekScan, if any */ + + pIdx = pLoop->u.btree.pIndex; + iIdxCur = pLevel->iIdxCur; + assert( nEq>=pLoop->nSkip ); + + /* Find any inequality constraint terms for the start and end + ** of the range. + */ + j = nEq; + if( pLoop->wsFlags & WHERE_BTM_LIMIT ){ + pRangeStart = pLoop->aLTerm[j++]; + nExtraReg = MAX(nExtraReg, pLoop->u.btree.nBtm); + /* Like optimization range constraints always occur in pairs */ + assert( (pRangeStart->wtFlags & TERM_LIKEOPT)==0 || + (pLoop->wsFlags & WHERE_TOP_LIMIT)!=0 ); + } + if( pLoop->wsFlags & WHERE_TOP_LIMIT ){ + pRangeEnd = pLoop->aLTerm[j++]; + nExtraReg = MAX(nExtraReg, pLoop->u.btree.nTop); +#ifndef SQLITE_LIKE_DOESNT_MATCH_BLOBS + if( (pRangeEnd->wtFlags & TERM_LIKEOPT)!=0 ){ + assert( pRangeStart!=0 ); /* LIKE opt constraints */ + assert( pRangeStart->wtFlags & TERM_LIKEOPT ); /* occur in pairs */ + pLevel->iLikeRepCntr = (u32)++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Integer, 1, (int)pLevel->iLikeRepCntr); + VdbeComment((v, "LIKE loop counter")); + pLevel->addrLikeRep = sqlite3VdbeCurrentAddr(v); + /* iLikeRepCntr actually stores 2x the counter register number. The + ** bottom bit indicates whether the search order is ASC or DESC. */ + testcase( bRev ); + testcase( pIdx->aSortOrder[nEq]==SQLITE_SO_DESC ); + assert( (bRev & ~1)==0 ); + pLevel->iLikeRepCntr <<=1; + pLevel->iLikeRepCntr |= bRev ^ (pIdx->aSortOrder[nEq]==SQLITE_SO_DESC); + } +#endif + if( pRangeStart==0 ){ + j = pIdx->aiColumn[nEq]; + if( (j>=0 && pIdx->pTable->aCol[j].notNull==0) || j==XN_EXPR ){ + bSeekPastNull = 1; + } + } + } + assert( pRangeEnd==0 || (pRangeEnd->wtFlags & TERM_VNULL)==0 ); + + /* If the WHERE_BIGNULL_SORT flag is set, then index column nEq uses + ** a non-default "big-null" sort (either ASC NULLS LAST or DESC NULLS + ** FIRST). In both cases separate ordered scans are made of those + ** index entries for which the column is null and for those for which + ** it is not. For an ASC sort, the non-NULL entries are scanned first. + ** For DESC, NULL entries are scanned first. + */ + if( (pLoop->wsFlags & (WHERE_TOP_LIMIT|WHERE_BTM_LIMIT))==0 + && (pLoop->wsFlags & WHERE_BIGNULL_SORT)!=0 + ){ + assert( bSeekPastNull==0 && nExtraReg==0 && nBtm==0 && nTop==0 ); + assert( pRangeEnd==0 && pRangeStart==0 ); + testcase( pLoop->nSkip>0 ); + nExtraReg = 1; + bSeekPastNull = 1; + pLevel->regBignull = regBignull = ++pParse->nMem; + if( pLevel->iLeftJoin ){ + sqlite3VdbeAddOp2(v, OP_Integer, 0, regBignull); + } + pLevel->addrBignull = sqlite3VdbeMakeLabel(pParse); + } + + /* If we are doing a reverse order scan on an ascending index, or + ** a forward order scan on a descending index, interchange the + ** start and end terms (pRangeStart and pRangeEnd). + */ + if( (nEqnColumn && bRev==(pIdx->aSortOrder[nEq]==SQLITE_SO_ASC)) ){ + SWAP(WhereTerm *, pRangeEnd, pRangeStart); + SWAP(u8, bSeekPastNull, bStopAtNull); + SWAP(u8, nBtm, nTop); + } + + if( iLevel>0 && (pLoop->wsFlags & WHERE_IN_SEEKSCAN)!=0 ){ + /* In case OP_SeekScan is used, ensure that the index cursor does not + ** point to a valid row for the first iteration of this loop. */ + sqlite3VdbeAddOp1(v, OP_NullRow, iIdxCur); + } + + /* Generate code to evaluate all constraint terms using == or IN + ** and store the values of those terms in an array of registers + ** starting at regBase. + */ + codeCursorHint(pTabItem, pWInfo, pLevel, pRangeEnd); + regBase = codeAllEqualityTerms(pParse,pLevel,bRev,nExtraReg,&zStartAff); + assert( zStartAff==0 || sqlite3Strlen30(zStartAff)>=nEq ); + if( zStartAff && nTop ){ + zEndAff = sqlite3DbStrDup(db, &zStartAff[nEq]); + } + addrNxt = (regBignull ? pLevel->addrBignull : pLevel->addrNxt); + + testcase( pRangeStart && (pRangeStart->eOperator & WO_LE)!=0 ); + testcase( pRangeStart && (pRangeStart->eOperator & WO_GE)!=0 ); + testcase( pRangeEnd && (pRangeEnd->eOperator & WO_LE)!=0 ); + testcase( pRangeEnd && (pRangeEnd->eOperator & WO_GE)!=0 ); + startEq = !pRangeStart || pRangeStart->eOperator & (WO_LE|WO_GE); + endEq = !pRangeEnd || pRangeEnd->eOperator & (WO_LE|WO_GE); + start_constraints = pRangeStart || nEq>0; + + /* Seek the index cursor to the start of the range. */ + nConstraint = nEq; + if( pRangeStart ){ + Expr *pRight = pRangeStart->pExpr->pRight; + codeExprOrVector(pParse, pRight, regBase+nEq, nBtm); + whereLikeOptimizationStringFixup(v, pLevel, pRangeStart); + if( (pRangeStart->wtFlags & TERM_VNULL)==0 + && sqlite3ExprCanBeNull(pRight) + ){ + sqlite3VdbeAddOp2(v, OP_IsNull, regBase+nEq, addrNxt); + VdbeCoverage(v); + } + if( zStartAff ){ + updateRangeAffinityStr(pRight, nBtm, &zStartAff[nEq]); + } + nConstraint += nBtm; + testcase( pRangeStart->wtFlags & TERM_VIRTUAL ); + if( sqlite3ExprIsVector(pRight)==0 ){ + disableTerm(pLevel, pRangeStart); + }else{ + startEq = 1; + } + bSeekPastNull = 0; + }else if( bSeekPastNull ){ + startEq = 0; + sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq); + start_constraints = 1; + nConstraint++; + }else if( regBignull ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq); + start_constraints = 1; + nConstraint++; + } + codeApplyAffinity(pParse, regBase, nConstraint - bSeekPastNull, zStartAff); + if( pLoop->nSkip>0 && nConstraint==pLoop->nSkip ){ + /* The skip-scan logic inside the call to codeAllEqualityConstraints() + ** above has already left the cursor sitting on the correct row, + ** so no further seeking is needed */ + }else{ + if( regBignull ){ + sqlite3VdbeAddOp2(v, OP_Integer, 1, regBignull); + VdbeComment((v, "NULL-scan pass ctr")); + } + if( pLevel->regFilter ){ + sqlite3VdbeAddOp4Int(v, OP_Filter, pLevel->regFilter, addrNxt, + regBase, nEq); + VdbeCoverage(v); + filterPullDown(pParse, pWInfo, iLevel, addrNxt, notReady); + } + + op = aStartOp[(start_constraints<<2) + (startEq<<1) + bRev]; + assert( op!=0 ); + if( (pLoop->wsFlags & WHERE_IN_SEEKSCAN)!=0 && op==OP_SeekGE ){ + assert( regBignull==0 ); + /* TUNING: The OP_SeekScan opcode seeks to reduce the number + ** of expensive seek operations by replacing a single seek with + ** 1 or more step operations. The question is, how many steps + ** should we try before giving up and going with a seek. The cost + ** of a seek is proportional to the logarithm of the of the number + ** of entries in the tree, so basing the number of steps to try + ** on the estimated number of rows in the btree seems like a good + ** guess. */ + addrSeekScan = sqlite3VdbeAddOp1(v, OP_SeekScan, + (pIdx->aiRowLogEst[0]+9)/10); + if( pRangeStart || pRangeEnd ){ + sqlite3VdbeChangeP5(v, 1); + sqlite3VdbeChangeP2(v, addrSeekScan, sqlite3VdbeCurrentAddr(v)+1); + addrSeekScan = 0; + } + VdbeCoverage(v); + } + sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, nConstraint); + VdbeCoverage(v); + VdbeCoverageIf(v, op==OP_Rewind); testcase( op==OP_Rewind ); + VdbeCoverageIf(v, op==OP_Last); testcase( op==OP_Last ); + VdbeCoverageIf(v, op==OP_SeekGT); testcase( op==OP_SeekGT ); + VdbeCoverageIf(v, op==OP_SeekGE); testcase( op==OP_SeekGE ); + VdbeCoverageIf(v, op==OP_SeekLE); testcase( op==OP_SeekLE ); + VdbeCoverageIf(v, op==OP_SeekLT); testcase( op==OP_SeekLT ); + + assert( bSeekPastNull==0 || bStopAtNull==0 ); + if( regBignull ){ + assert( bSeekPastNull==1 || bStopAtNull==1 ); + assert( bSeekPastNull==!bStopAtNull ); + assert( bStopAtNull==startEq ); + sqlite3VdbeAddOp2(v, OP_Goto, 0, sqlite3VdbeCurrentAddr(v)+2); + op = aStartOp[(nConstraint>1)*4 + 2 + bRev]; + sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, + nConstraint-startEq); + VdbeCoverage(v); + VdbeCoverageIf(v, op==OP_Rewind); testcase( op==OP_Rewind ); + VdbeCoverageIf(v, op==OP_Last); testcase( op==OP_Last ); + VdbeCoverageIf(v, op==OP_SeekGE); testcase( op==OP_SeekGE ); + VdbeCoverageIf(v, op==OP_SeekLE); testcase( op==OP_SeekLE ); + assert( op==OP_Rewind || op==OP_Last || op==OP_SeekGE || op==OP_SeekLE); + } + } + + /* Load the value for the inequality constraint at the end of the + ** range (if any). + */ + nConstraint = nEq; + assert( pLevel->p2==0 ); + if( pRangeEnd ){ + Expr *pRight = pRangeEnd->pExpr->pRight; + assert( addrSeekScan==0 ); + codeExprOrVector(pParse, pRight, regBase+nEq, nTop); + whereLikeOptimizationStringFixup(v, pLevel, pRangeEnd); + if( (pRangeEnd->wtFlags & TERM_VNULL)==0 + && sqlite3ExprCanBeNull(pRight) + ){ + sqlite3VdbeAddOp2(v, OP_IsNull, regBase+nEq, addrNxt); + VdbeCoverage(v); + } + if( zEndAff ){ + updateRangeAffinityStr(pRight, nTop, zEndAff); + codeApplyAffinity(pParse, regBase+nEq, nTop, zEndAff); + }else{ + assert( pParse->db->mallocFailed ); + } + nConstraint += nTop; + testcase( pRangeEnd->wtFlags & TERM_VIRTUAL ); + + if( sqlite3ExprIsVector(pRight)==0 ){ + disableTerm(pLevel, pRangeEnd); + }else{ + endEq = 1; + } + }else if( bStopAtNull ){ + if( regBignull==0 ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq); + endEq = 0; + } + nConstraint++; + } + if( zStartAff ) sqlite3DbNNFreeNN(db, zStartAff); + if( zEndAff ) sqlite3DbNNFreeNN(db, zEndAff); + + /* Top of the loop body */ + pLevel->p2 = sqlite3VdbeCurrentAddr(v); + + /* Check if the index cursor is past the end of the range. */ + if( nConstraint ){ + if( regBignull ){ + /* Except, skip the end-of-range check while doing the NULL-scan */ + sqlite3VdbeAddOp2(v, OP_IfNot, regBignull, sqlite3VdbeCurrentAddr(v)+3); + VdbeComment((v, "If NULL-scan 2nd pass")); + VdbeCoverage(v); + } + op = aEndOp[bRev*2 + endEq]; + sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, nConstraint); + testcase( op==OP_IdxGT ); VdbeCoverageIf(v, op==OP_IdxGT ); + testcase( op==OP_IdxGE ); VdbeCoverageIf(v, op==OP_IdxGE ); + testcase( op==OP_IdxLT ); VdbeCoverageIf(v, op==OP_IdxLT ); + testcase( op==OP_IdxLE ); VdbeCoverageIf(v, op==OP_IdxLE ); + if( addrSeekScan ) sqlite3VdbeJumpHere(v, addrSeekScan); + } + if( regBignull ){ + /* During a NULL-scan, check to see if we have reached the end of + ** the NULLs */ + assert( bSeekPastNull==!bStopAtNull ); + assert( bSeekPastNull+bStopAtNull==1 ); + assert( nConstraint+bSeekPastNull>0 ); + sqlite3VdbeAddOp2(v, OP_If, regBignull, sqlite3VdbeCurrentAddr(v)+2); + VdbeComment((v, "If NULL-scan 1st pass")); + VdbeCoverage(v); + op = aEndOp[bRev*2 + bSeekPastNull]; + sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, + nConstraint+bSeekPastNull); + testcase( op==OP_IdxGT ); VdbeCoverageIf(v, op==OP_IdxGT ); + testcase( op==OP_IdxGE ); VdbeCoverageIf(v, op==OP_IdxGE ); + testcase( op==OP_IdxLT ); VdbeCoverageIf(v, op==OP_IdxLT ); + testcase( op==OP_IdxLE ); VdbeCoverageIf(v, op==OP_IdxLE ); + } + + if( (pLoop->wsFlags & WHERE_IN_EARLYOUT)!=0 ){ + sqlite3VdbeAddOp3(v, OP_SeekHit, iIdxCur, nEq, nEq); + } + + /* Seek the table cursor, if required */ + omitTable = (pLoop->wsFlags & WHERE_IDX_ONLY)!=0 + && (pWInfo->wctrlFlags & (WHERE_OR_SUBCLAUSE|WHERE_RIGHT_JOIN))==0; + if( omitTable ){ + /* pIdx is a covering index. No need to access the main table. */ + }else if( HasRowid(pIdx->pTable) ){ + codeDeferredSeek(pWInfo, pIdx, iCur, iIdxCur); + }else if( iCur!=iIdxCur ){ + Index *pPk = sqlite3PrimaryKeyIndex(pIdx->pTable); + iRowidReg = sqlite3GetTempRange(pParse, pPk->nKeyCol); + for(j=0; jnKeyCol; j++){ + k = sqlite3TableColumnToIndex(pIdx, pPk->aiColumn[j]); + sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, k, iRowidReg+j); + } + sqlite3VdbeAddOp4Int(v, OP_NotFound, iCur, addrCont, + iRowidReg, pPk->nKeyCol); VdbeCoverage(v); + } + + if( pLevel->iLeftJoin==0 ){ + /* If a partial index is driving the loop, try to eliminate WHERE clause + ** terms from the query that must be true due to the WHERE clause of + ** the partial index. This optimization does not work on an outer join, + ** as shown by: + ** + ** 2019-11-02 ticket 623eff57e76d45f6 (LEFT JOIN) + ** 2025-05-29 forum post 7dee41d32506c4ae (RIGHT JOIN) + */ + if( pIdx->pPartIdxWhere && pLevel->pRJ==0 ){ + whereApplyPartialIndexConstraints(pIdx->pPartIdxWhere, iCur, pWC); + } + }else{ + testcase( pIdx->pPartIdxWhere ); + /* The following assert() is not a requirement, merely an observation: + ** The OR-optimization doesn't work for the right hand table of + ** a LEFT JOIN: */ + assert( (pWInfo->wctrlFlags & (WHERE_OR_SUBCLAUSE|WHERE_RIGHT_JOIN))==0 ); + } + + /* Record the instruction used to terminate the loop. */ + if( (pLoop->wsFlags & WHERE_ONEROW) + || (pLevel->u.in.nIn && regBignull==0 && whereLoopIsOneRow(pLoop)) + ){ + pLevel->op = OP_Noop; + }else if( bRev ){ + pLevel->op = OP_Prev; + }else{ + pLevel->op = OP_Next; + } + pLevel->p1 = iIdxCur; + pLevel->p3 = (pLoop->wsFlags&WHERE_UNQ_WANTED)!=0 ? 1:0; + if( (pLoop->wsFlags & WHERE_CONSTRAINT)==0 ){ + pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP; + }else{ + assert( pLevel->p5==0 ); + } + if( omitTable ) pIdx = 0; + }else + +#ifndef SQLITE_OMIT_OR_OPTIMIZATION + if( pLoop->wsFlags & WHERE_MULTI_OR ){ + /* Case 5: Two or more separately indexed terms connected by OR + ** + ** Example: + ** + ** CREATE TABLE t1(a,b,c,d); + ** CREATE INDEX i1 ON t1(a); + ** CREATE INDEX i2 ON t1(b); + ** CREATE INDEX i3 ON t1(c); + ** + ** SELECT * FROM t1 WHERE a=5 OR b=7 OR (c=11 AND d=13) + ** + ** In the example, there are three indexed terms connected by OR. + ** The top of the loop looks like this: + ** + ** Null 1 # Zero the rowset in reg 1 + ** + ** Then, for each indexed term, the following. The arguments to + ** RowSetTest are such that the rowid of the current row is inserted + ** into the RowSet. If it is already present, control skips the + ** Gosub opcode and jumps straight to the code generated by WhereEnd(). + ** + ** sqlite3WhereBegin() + ** RowSetTest # Insert rowid into rowset + ** Gosub 2 A + ** sqlite3WhereEnd() + ** + ** Following the above, code to terminate the loop. Label A, the target + ** of the Gosub above, jumps to the instruction right after the Goto. + ** + ** Null 1 # Zero the rowset in reg 1 + ** Goto B # The loop is finished. + ** + ** A: # Return data, whatever. + ** + ** Return 2 # Jump back to the Gosub + ** + ** B: + ** + ** Added 2014-05-26: If the table is a WITHOUT ROWID table, then + ** use an ephemeral index instead of a RowSet to record the primary + ** keys of the rows we have already seen. + ** + */ + WhereClause *pOrWc; /* The OR-clause broken out into subterms */ + SrcList *pOrTab; /* Shortened table list or OR-clause generation */ + Index *pCov = 0; /* Potential covering index (or NULL) */ + int iCovCur = pParse->nTab++; /* Cursor used for index scans (if any) */ + + int regReturn = ++pParse->nMem; /* Register used with OP_Gosub */ + int regRowset = 0; /* Register for RowSet object */ + int regRowid = 0; /* Register holding rowid */ + int iLoopBody = sqlite3VdbeMakeLabel(pParse);/* Start of loop body */ + int iRetInit; /* Address of regReturn init */ + int untestedTerms = 0; /* Some terms not completely tested */ + int ii; /* Loop counter */ + Expr *pAndExpr = 0; /* An ".. AND (...)" expression */ + Table *pTab = pTabItem->pSTab; + + pTerm = pLoop->aLTerm[0]; + assert( pTerm!=0 ); + assert( pTerm->eOperator & WO_OR ); + assert( (pTerm->wtFlags & TERM_ORINFO)!=0 ); + pOrWc = &pTerm->u.pOrInfo->wc; + pLevel->op = OP_Return; + pLevel->p1 = regReturn; + + /* Set up a new SrcList in pOrTab containing the table being scanned + ** by this loop in the a[0] slot and all notReady tables in a[1..] slots. + ** This becomes the SrcList in the recursive call to sqlite3WhereBegin(). + */ + if( pWInfo->nLevel>1 ){ + int nNotReady; /* The number of notReady tables */ + SrcItem *origSrc; /* Original list of tables */ + nNotReady = pWInfo->nLevel - iLevel - 1; + pOrTab = sqlite3DbMallocRawNN(db, SZ_SRCLIST(nNotReady+1)); + if( pOrTab==0 ) return notReady; + pOrTab->nAlloc = (u8)(nNotReady + 1); + pOrTab->nSrc = pOrTab->nAlloc; + memcpy(pOrTab->a, pTabItem, sizeof(*pTabItem)); + origSrc = pWInfo->pTabList->a; + for(k=1; k<=nNotReady; k++){ + memcpy(&pOrTab->a[k], &origSrc[pLevel[k].iFrom], sizeof(pOrTab->a[k])); + } + }else{ + pOrTab = pWInfo->pTabList; + } + + /* Initialize the rowset register to contain NULL. An SQL NULL is + ** equivalent to an empty rowset. Or, create an ephemeral index + ** capable of holding primary keys in the case of a WITHOUT ROWID. + ** + ** Also initialize regReturn to contain the address of the instruction + ** immediately following the OP_Return at the bottom of the loop. This + ** is required in a few obscure LEFT JOIN cases where control jumps + ** over the top of the loop into the body of it. In this case the + ** correct response for the end-of-loop code (the OP_Return) is to + ** fall through to the next instruction, just as an OP_Next does if + ** called on an uninitialized cursor. + */ + if( (pWInfo->wctrlFlags & WHERE_DUPLICATES_OK)==0 ){ + if( HasRowid(pTab) ){ + regRowset = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Null, 0, regRowset); + }else{ + Index *pPk = sqlite3PrimaryKeyIndex(pTab); + regRowset = pParse->nTab++; + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, regRowset, pPk->nKeyCol); + sqlite3VdbeSetP4KeyInfo(pParse, pPk); + } + regRowid = ++pParse->nMem; + } + iRetInit = sqlite3VdbeAddOp2(v, OP_Integer, 0, regReturn); + + /* If the original WHERE clause is z of the form: (x1 OR x2 OR ...) AND y + ** Then for every term xN, evaluate as the subexpression: xN AND y + ** That way, terms in y that are factored into the disjunction will + ** be picked up by the recursive calls to sqlite3WhereBegin() below. + ** + ** Actually, each subexpression is converted to "xN AND w" where w is + ** the "interesting" terms of z - terms that did not originate in the + ** ON or USING clause of a LEFT JOIN, and terms that are usable as + ** indices. + ** + ** This optimization also only applies if the (x1 OR x2 OR ...) term + ** is not contained in the ON clause of a LEFT JOIN. + ** See ticket http://sqlite.org/src/info/f2369304e4 + ** + ** 2022-02-04: Do not push down slices of a row-value comparison. + ** In other words, "w" or "y" may not be a slice of a vector. Otherwise, + ** the initialization of the right-hand operand of the vector comparison + ** might not occur, or might occur only in an OR branch that is not + ** taken. dbsqlfuzz 80a9fade844b4fb43564efc972bcb2c68270f5d1. + ** + ** 2022-03-03: Do not push down expressions that involve subqueries. + ** The subquery might get coded as a subroutine. Any table-references + ** in the subquery might be resolved to index-references for the index on + ** the OR branch in which the subroutine is coded. But if the subroutine + ** is invoked from a different OR branch that uses a different index, such + ** index-references will not work. tag-20220303a + ** https://sqlite.org/forum/forumpost/36937b197273d403 + */ + if( pWC->nTerm>1 ){ + int iTerm; + for(iTerm=0; iTermnTerm; iTerm++){ + Expr *pExpr = pWC->a[iTerm].pExpr; + if( &pWC->a[iTerm] == pTerm ) continue; + testcase( pWC->a[iTerm].wtFlags & TERM_VIRTUAL ); + testcase( pWC->a[iTerm].wtFlags & TERM_CODED ); + testcase( pWC->a[iTerm].wtFlags & TERM_SLICE ); + if( (pWC->a[iTerm].wtFlags & (TERM_VIRTUAL|TERM_CODED|TERM_SLICE))!=0 ){ + continue; + } + if( (pWC->a[iTerm].eOperator & WO_ALL)==0 ) continue; + if( ExprHasProperty(pExpr, EP_Subquery) ) continue; /* tag-20220303a */ + pExpr = sqlite3ExprDup(db, pExpr, 0); + pAndExpr = sqlite3ExprAnd(pParse, pAndExpr, pExpr); + } + if( pAndExpr ){ + /* The extra 0x10000 bit on the opcode is masked off and does not + ** become part of the new Expr.op. However, it does make the + ** op==TK_AND comparison inside of sqlite3PExpr() false, and this + ** prevents sqlite3PExpr() from applying the AND short-circuit + ** optimization, which we do not want here. */ + pAndExpr = sqlite3PExpr(pParse, TK_AND|0x10000, 0, pAndExpr); + } + } + + /* Run a separate WHERE clause for each term of the OR clause. After + ** eliminating duplicates from other WHERE clauses, the action for each + ** sub-WHERE clause is to to invoke the main loop body as a subroutine. + */ + ExplainQueryPlan((pParse, 1, "MULTI-INDEX OR")); + for(ii=0; iinTerm; ii++){ + WhereTerm *pOrTerm = &pOrWc->a[ii]; + if( pOrTerm->leftCursor==iCur || (pOrTerm->eOperator & WO_AND)!=0 ){ + WhereInfo *pSubWInfo; /* Info for single OR-term scan */ + Expr *pOrExpr = pOrTerm->pExpr; /* Current OR clause term */ + Expr *pDelete; /* Local copy of OR clause term */ + int jmp1 = 0; /* Address of jump operation */ + testcase( (pTabItem[0].fg.jointype & JT_LEFT)!=0 + && !ExprHasProperty(pOrExpr, EP_OuterON) + ); /* See TH3 vtab25.400 and ticket 614b25314c766238 */ + pDelete = pOrExpr = sqlite3ExprDup(db, pOrExpr, 0); + if( db->mallocFailed ){ + sqlite3ExprDelete(db, pDelete); + continue; + } + if( pAndExpr ){ + pAndExpr->pLeft = pOrExpr; + pOrExpr = pAndExpr; + } + /* Loop through table entries that match term pOrTerm. */ + ExplainQueryPlan((pParse, 1, "INDEX %d", ii+1)); + WHERETRACE(0xffffffff, ("Subplan for OR-clause:\n")); + pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrExpr, 0, 0, 0, + WHERE_OR_SUBCLAUSE, iCovCur); + assert( pSubWInfo || pParse->nErr ); + if( pSubWInfo ){ + WhereLoop *pSubLoop; + int addrExplain = sqlite3WhereExplainOneScan( + pParse, pOrTab, &pSubWInfo->a[0], 0 + ); + sqlite3WhereAddScanStatus(v, pOrTab, &pSubWInfo->a[0], addrExplain); + + /* This is the sub-WHERE clause body. First skip over + ** duplicate rows from prior sub-WHERE clauses, and record the + ** rowid (or PRIMARY KEY) for the current row so that the same + ** row will be skipped in subsequent sub-WHERE clauses. + */ + if( (pWInfo->wctrlFlags & WHERE_DUPLICATES_OK)==0 ){ + int iSet = ((ii==pOrWc->nTerm-1)?-1:ii); + if( HasRowid(pTab) ){ + sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, -1, regRowid); + jmp1 = sqlite3VdbeAddOp4Int(v, OP_RowSetTest, regRowset, 0, + regRowid, iSet); + VdbeCoverage(v); + }else{ + Index *pPk = sqlite3PrimaryKeyIndex(pTab); + int nPk = pPk->nKeyCol; + int iPk; + int r; + + /* Read the PK into an array of temp registers. */ + r = sqlite3GetTempRange(pParse, nPk); + for(iPk=0; iPkaiColumn[iPk]; + sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, iCol,r+iPk); + } + + /* Check if the temp table already contains this key. If so, + ** the row has already been included in the result set and + ** can be ignored (by jumping past the Gosub below). Otherwise, + ** insert the key into the temp table and proceed with processing + ** the row. + ** + ** Use some of the same optimizations as OP_RowSetTest: If iSet + ** is zero, assume that the key cannot already be present in + ** the temp table. And if iSet is -1, assume that there is no + ** need to insert the key into the temp table, as it will never + ** be tested for. */ + if( iSet ){ + jmp1 = sqlite3VdbeAddOp4Int(v, OP_Found, regRowset, 0, r, nPk); + VdbeCoverage(v); + } + if( iSet>=0 ){ + sqlite3VdbeAddOp3(v, OP_MakeRecord, r, nPk, regRowid); + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, regRowset, regRowid, + r, nPk); + if( iSet ) sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); + } + + /* Release the array of temp registers */ + sqlite3ReleaseTempRange(pParse, r, nPk); + } + } + + /* Invoke the main loop body as a subroutine */ + sqlite3VdbeAddOp2(v, OP_Gosub, regReturn, iLoopBody); + + /* Jump here (skipping the main loop body subroutine) if the + ** current sub-WHERE row is a duplicate from prior sub-WHEREs. */ + if( jmp1 ) sqlite3VdbeJumpHere(v, jmp1); + + /* The pSubWInfo->untestedTerms flag means that this OR term + ** contained one or more AND term from a notReady table. The + ** terms from the notReady table could not be tested and will + ** need to be tested later. + */ + if( pSubWInfo->untestedTerms ) untestedTerms = 1; + + /* If all of the OR-connected terms are optimized using the same + ** index, and the index is opened using the same cursor number + ** by each call to sqlite3WhereBegin() made by this loop, it may + ** be possible to use that index as a covering index. + ** + ** If the call to sqlite3WhereBegin() above resulted in a scan that + ** uses an index, and this is either the first OR-connected term + ** processed or the index is the same as that used by all previous + ** terms, set pCov to the candidate covering index. Otherwise, set + ** pCov to NULL to indicate that no candidate covering index will + ** be available. + */ + pSubLoop = pSubWInfo->a[0].pWLoop; + assert( (pSubLoop->wsFlags & WHERE_AUTO_INDEX)==0 ); + if( (pSubLoop->wsFlags & WHERE_INDEXED)!=0 + && (ii==0 || pSubLoop->u.btree.pIndex==pCov) + && (HasRowid(pTab) || !IsPrimaryKeyIndex(pSubLoop->u.btree.pIndex)) + ){ + assert( pSubWInfo->a[0].iIdxCur==iCovCur ); + pCov = pSubLoop->u.btree.pIndex; + }else{ + pCov = 0; + } + if( sqlite3WhereUsesDeferredSeek(pSubWInfo) ){ + pWInfo->bDeferredSeek = 1; + } + + /* Finish the loop through table entries that match term pOrTerm. */ + sqlite3WhereEnd(pSubWInfo); + ExplainQueryPlanPop(pParse); + } + sqlite3ExprDelete(db, pDelete); + } + } + ExplainQueryPlanPop(pParse); + assert( pLevel->pWLoop==pLoop ); + assert( (pLoop->wsFlags & WHERE_MULTI_OR)!=0 ); + assert( (pLoop->wsFlags & WHERE_IN_ABLE)==0 ); + pLevel->u.pCoveringIdx = pCov; + if( pCov ) pLevel->iIdxCur = iCovCur; + if( pAndExpr ){ + pAndExpr->pLeft = 0; + sqlite3ExprDelete(db, pAndExpr); + } + sqlite3VdbeChangeP1(v, iRetInit, sqlite3VdbeCurrentAddr(v)); + sqlite3VdbeGoto(v, pLevel->addrBrk); + sqlite3VdbeResolveLabel(v, iLoopBody); + + /* Set the P2 operand of the OP_Return opcode that will end the current + ** loop to point to this spot, which is the top of the next containing + ** loop. The byte-code formatter will use that P2 value as a hint to + ** indent everything in between the this point and the final OP_Return. + ** See tag-20220407a in vdbe.c and shell.c */ + assert( pLevel->op==OP_Return ); + pLevel->p2 = sqlite3VdbeCurrentAddr(v); + + if( pWInfo->nLevel>1 ){ sqlite3DbFreeNN(db, pOrTab); } + if( !untestedTerms ) disableTerm(pLevel, pTerm); + }else +#endif /* SQLITE_OMIT_OR_OPTIMIZATION */ + + { + /* Case 6: There is no usable index. We must do a complete + ** scan of the entire table. + */ + static const u8 aStep[] = { OP_Next, OP_Prev }; + static const u8 aStart[] = { OP_Rewind, OP_Last }; + assert( bRev==0 || bRev==1 ); + if( pTabItem->fg.isRecursive ){ + /* Tables marked isRecursive have only a single row that is stored in + ** a pseudo-cursor. No need to Rewind or Next such cursors. */ + pLevel->op = OP_Noop; + }else{ + codeCursorHint(pTabItem, pWInfo, pLevel, 0); + pLevel->op = aStep[bRev]; + pLevel->p1 = iCur; + pLevel->p2 = 1 + sqlite3VdbeAddOp2(v, aStart[bRev],iCur,pLevel->addrHalt); + VdbeCoverageIf(v, bRev==0); + VdbeCoverageIf(v, bRev!=0); + pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP; + } + } + +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + pLevel->addrVisit = sqlite3VdbeCurrentAddr(v); +#endif + + /* Insert code to test every subexpression that can be completely + ** computed using the current set of tables. + ** + ** This loop may run between one and three times, depending on the + ** constraints to be generated. The value of stack variable iLoop + ** determines the constraints coded by each iteration, as follows: + ** + ** iLoop==1: Code only expressions that are entirely covered by pIdx. + ** iLoop==2: Code remaining expressions that do not contain correlated + ** sub-queries. + ** iLoop==3: Code all remaining expressions. + ** + ** An effort is made to skip unnecessary iterations of the loop. + ** + ** This optimization of causing simple query restrictions to occur before + ** more complex one is call the "push-down" optimization in MySQL. Here + ** in SQLite, the name is "MySQL push-down", since there is also another + ** totally unrelated optimization called "WHERE-clause push-down". + ** Sometimes the qualifier is omitted, resulting in an ambiguity, so beware. + */ + iLoop = (pIdx ? 1 : 2); + do{ + int iNext = 0; /* Next value for iLoop */ + for(pTerm=pWC->a, j=pWC->nTerm; j>0; j--, pTerm++){ + Expr *pE; + int skipLikeAddr = 0; + testcase( pTerm->wtFlags & TERM_VIRTUAL ); + testcase( pTerm->wtFlags & TERM_CODED ); + if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue; + if( (pTerm->prereqAll & pLevel->notReady)!=0 ){ + testcase( pWInfo->untestedTerms==0 + && (pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE)!=0 ); + pWInfo->untestedTerms = 1; + continue; + } + pE = pTerm->pExpr; + assert( pE!=0 ); + if( pTabItem->fg.jointype & (JT_LEFT|JT_LTORJ|JT_RIGHT) ){ + if( !ExprHasProperty(pE,EP_OuterON|EP_InnerON) ){ + /* Defer processing WHERE clause constraints until after outer + ** join processing. tag-20220513a */ + continue; + }else if( (pTabItem->fg.jointype & JT_LEFT)==JT_LEFT + && !ExprHasProperty(pE,EP_OuterON) ){ + continue; + }else{ + Bitmask m = sqlite3WhereGetMask(&pWInfo->sMaskSet, pE->w.iJoin); + if( m & pLevel->notReady ){ + /* An ON clause that is not ripe */ + continue; + } + } + } + if( iLoop==1 && !sqlite3ExprCoveredByIndex(pE, pLevel->iTabCur, pIdx) ){ + iNext = 2; + continue; + } + if( iLoop<3 && (pTerm->wtFlags & TERM_VARSELECT) ){ + if( iNext==0 ) iNext = 3; + continue; + } + + if( (pTerm->wtFlags & TERM_LIKECOND)!=0 ){ + /* If the TERM_LIKECOND flag is set, that means that the range search + ** is sufficient to guarantee that the LIKE operator is true, so we + ** can skip the call to the like(A,B) function. But this only works + ** for strings. So do not skip the call to the function on the pass + ** that compares BLOBs. */ +#ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS + continue; +#else + u32 x = pLevel->iLikeRepCntr; + if( x>0 ){ + skipLikeAddr = sqlite3VdbeAddOp1(v, (x&1)?OP_IfNot:OP_If,(int)(x>>1)); + VdbeCoverageIf(v, (x&1)==1); + VdbeCoverageIf(v, (x&1)==0); + } +#endif + } +#ifdef WHERETRACE_ENABLED /* 0xffffffff */ + if( sqlite3WhereTrace ){ + VdbeNoopComment((v, "WhereTerm[%d] (%p) priority=%d", + pWC->nTerm-j, pTerm, iLoop)); + } + if( sqlite3WhereTrace & 0x4000 ){ + sqlite3DebugPrintf("Coding auxiliary constraint:\n"); + sqlite3WhereTermPrint(pTerm, pWC->nTerm-j); + } +#endif + sqlite3ExprIfFalse(pParse, pE, addrCont, SQLITE_JUMPIFNULL); + if( skipLikeAddr ) sqlite3VdbeJumpHere(v, skipLikeAddr); + pTerm->wtFlags |= TERM_CODED; + } + iLoop = iNext; + }while( iLoop>0 ); + + /* Insert code to test for implied constraints based on transitivity + ** of the "==" operator. + ** + ** Example: If the WHERE clause contains "t1.a=t2.b" and "t2.b=123" + ** and we are coding the t1 loop and the t2 loop has not yet coded, + ** then we cannot use the "t1.a=t2.b" constraint, but we can code + ** the implied "t1.a=123" constraint. + */ + for(pTerm=pWC->a, j=pWC->nBase; j>0; j--, pTerm++){ + Expr *pE, sEAlt; + WhereTerm *pAlt; + if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue; + if( (pTerm->eOperator & (WO_EQ|WO_IS))==0 ) continue; + if( (pTerm->eOperator & WO_EQUIV)==0 ) continue; + if( pTerm->leftCursor!=iCur ) continue; + if( pTabItem->fg.jointype & (JT_LEFT|JT_LTORJ|JT_RIGHT) ) continue; + pE = pTerm->pExpr; +#ifdef WHERETRACE_ENABLED /* 0x4001 */ + if( (sqlite3WhereTrace & 0x4001)==0x4001 ){ + sqlite3DebugPrintf("Coding transitive constraint:\n"); + sqlite3WhereTermPrint(pTerm, pWC->nTerm-j); + } +#endif + assert( !ExprHasProperty(pE, EP_OuterON) ); + assert( (pTerm->prereqRight & pLevel->notReady)!=0 ); + assert( (pTerm->eOperator & (WO_OR|WO_AND))==0 ); + pAlt = sqlite3WhereFindTerm(pWC, iCur, pTerm->u.x.leftColumn, notReady, + WO_EQ|WO_IN|WO_IS, 0); + if( pAlt==0 ) continue; + if( pAlt->wtFlags & (TERM_CODED) ) continue; + if( (pAlt->eOperator & WO_IN) + && ExprUseXSelect(pAlt->pExpr) + && (pAlt->pExpr->x.pSelect->pEList->nExpr>1) + ){ + continue; + } + testcase( pAlt->eOperator & WO_EQ ); + testcase( pAlt->eOperator & WO_IS ); + testcase( pAlt->eOperator & WO_IN ); + VdbeModuleComment((v, "begin transitive constraint")); + sEAlt = *pAlt->pExpr; + sEAlt.pLeft = pE->pLeft; + sqlite3ExprIfFalse(pParse, &sEAlt, addrCont, SQLITE_JUMPIFNULL); + pAlt->wtFlags |= TERM_CODED; + } + + /* For a RIGHT OUTER JOIN, record the fact that the current row has + ** been matched at least once. + */ + if( pLevel->pRJ ){ + Table *pTab; + int nPk; + int r; + int jmp1 = 0; + WhereRightJoin *pRJ = pLevel->pRJ; + + /* pTab is the right-hand table of the RIGHT JOIN. Generate code that + ** will record that the current row of that table has been matched at + ** least once. This is accomplished by storing the PK for the row in + ** both the iMatch index and the regBloom Bloom filter. + */ + pTab = pWInfo->pTabList->a[pLevel->iFrom].pSTab; + if( HasRowid(pTab) ){ + r = sqlite3GetTempRange(pParse, 2); + sqlite3ExprCodeGetColumnOfTable(v, pTab, pLevel->iTabCur, -1, r+1); + nPk = 1; + }else{ + int iPk; + Index *pPk = sqlite3PrimaryKeyIndex(pTab); + nPk = pPk->nKeyCol; + r = sqlite3GetTempRange(pParse, nPk+1); + for(iPk=0; iPkaiColumn[iPk]; + sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, iCol,r+1+iPk); + } + } + jmp1 = sqlite3VdbeAddOp4Int(v, OP_Found, pRJ->iMatch, 0, r+1, nPk); + VdbeCoverage(v); + VdbeComment((v, "match against %s", pTab->zName)); + sqlite3VdbeAddOp3(v, OP_MakeRecord, r+1, nPk, r); + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, pRJ->iMatch, r, r+1, nPk); + sqlite3VdbeAddOp4Int(v, OP_FilterAdd, pRJ->regBloom, 0, r+1, nPk); + sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); + sqlite3VdbeJumpHere(v, jmp1); + sqlite3ReleaseTempRange(pParse, r, nPk+1); + } + + /* For a LEFT OUTER JOIN, generate code that will record the fact that + ** at least one row of the right table has matched the left table. + */ + if( pLevel->iLeftJoin ){ + pLevel->addrFirst = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeAddOp2(v, OP_Integer, 1, pLevel->iLeftJoin); + VdbeComment((v, "record LEFT JOIN hit")); + if( pLevel->pRJ==0 ){ + goto code_outer_join_constraints; /* WHERE clause constraints */ + } + } + + if( pLevel->pRJ ){ + /* Create a subroutine used to process all interior loops and code + ** of the RIGHT JOIN. During normal operation, the subroutine will + ** be in-line with the rest of the code. But at the end, a separate + ** loop will run that invokes this subroutine for unmatched rows + ** of pTab, with all tables to left begin set to NULL. + */ + WhereRightJoin *pRJ = pLevel->pRJ; + sqlite3VdbeAddOp2(v, OP_BeginSubrtn, 0, pRJ->regReturn); + pRJ->addrSubrtn = sqlite3VdbeCurrentAddr(v); + assert( pParse->withinRJSubrtn < 255 ); + pParse->withinRJSubrtn++; + + /* WHERE clause constraints must be deferred until after outer join + ** row elimination has completed, since WHERE clause constraints apply + ** to the results of the OUTER JOIN. The following loop generates the + ** appropriate WHERE clause constraint checks. tag-20220513a. + */ + code_outer_join_constraints: + for(pTerm=pWC->a, j=0; jnBase; j++, pTerm++){ + testcase( pTerm->wtFlags & TERM_VIRTUAL ); + testcase( pTerm->wtFlags & TERM_CODED ); + if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue; + if( (pTerm->prereqAll & pLevel->notReady)!=0 ){ + assert( pWInfo->untestedTerms ); + continue; + } + if( pTabItem->fg.jointype & JT_LTORJ ) continue; + assert( pTerm->pExpr ); + sqlite3ExprIfFalse(pParse, pTerm->pExpr, addrCont, SQLITE_JUMPIFNULL); + pTerm->wtFlags |= TERM_CODED; + } + } + +#if WHERETRACE_ENABLED /* 0x4001 */ + if( sqlite3WhereTrace & 0x4000 ){ + sqlite3DebugPrintf("All WHERE-clause terms after coding level %d:\n", + iLevel); + sqlite3WhereClausePrint(pWC); + } + if( sqlite3WhereTrace & 0x1 ){ + sqlite3DebugPrintf("End Coding level %d: notReady=%llx\n", + iLevel, (u64)pLevel->notReady); + } +#endif + return pLevel->notReady; +} + +/* +** Generate the code for the loop that finds all non-matched terms +** for a RIGHT JOIN. +*/ +SQLITE_PRIVATE SQLITE_NOINLINE void sqlite3WhereRightJoinLoop( + WhereInfo *pWInfo, + int iLevel, + WhereLevel *pLevel +){ + Parse *pParse = pWInfo->pParse; + Vdbe *v = pParse->pVdbe; + WhereRightJoin *pRJ = pLevel->pRJ; + Expr *pSubWhere = 0; + WhereClause *pWC = &pWInfo->sWC; + WhereInfo *pSubWInfo; + WhereLoop *pLoop = pLevel->pWLoop; + SrcItem *pTabItem = &pWInfo->pTabList->a[pLevel->iFrom]; + SrcList *pFrom; + union { + SrcList sSrc; + u8 fromSpace[SZ_SRCLIST_1]; + } uSrc; + Bitmask mAll = 0; + int k; + + ExplainQueryPlan((pParse, 1, "RIGHT-JOIN %s", pTabItem->pSTab->zName)); + sqlite3VdbeNoJumpsOutsideSubrtn(v, pRJ->addrSubrtn, pRJ->endSubrtn, + pRJ->regReturn); + for(k=0; ka[k].pWLoop->iTab == pWInfo->a[k].iFrom ); + pRight = &pWInfo->pTabList->a[pWInfo->a[k].iFrom]; + mAll |= pWInfo->a[k].pWLoop->maskSelf; + if( pRight->fg.viaCoroutine ){ + Subquery *pSubq; + assert( pRight->fg.isSubquery && pRight->u4.pSubq!=0 ); + pSubq = pRight->u4.pSubq; + assert( pSubq->pSelect!=0 && pSubq->pSelect->pEList!=0 ); + sqlite3VdbeAddOp3( + v, OP_Null, 0, pSubq->regResult, + pSubq->regResult + pSubq->pSelect->pEList->nExpr-1 + ); + } + sqlite3VdbeAddOp1(v, OP_NullRow, pWInfo->a[k].iTabCur); + iIdxCur = pWInfo->a[k].iIdxCur; + if( iIdxCur ){ + sqlite3VdbeAddOp1(v, OP_NullRow, iIdxCur); + } + } + if( (pTabItem->fg.jointype & JT_LTORJ)==0 ){ + mAll |= pLoop->maskSelf; + for(k=0; knTerm; k++){ + WhereTerm *pTerm = &pWC->a[k]; + if( (pTerm->wtFlags & (TERM_VIRTUAL|TERM_SLICE))!=0 + && pTerm->eOperator!=WO_ROWVAL + ){ + break; + } + if( pTerm->prereqAll & ~mAll ) continue; + if( ExprHasProperty(pTerm->pExpr, EP_OuterON|EP_InnerON) ) continue; + pSubWhere = sqlite3ExprAnd(pParse, pSubWhere, + sqlite3ExprDup(pParse->db, pTerm->pExpr, 0)); + } + } + if( pLevel->iIdxCur ){ + /* pSubWhere may contain expressions that read from an index on the + ** table on the RHS of the right join. All such expressions first test + ** if the index is pointing at a NULL row, and if so, read from the + ** table cursor instead. So ensure that the index cursor really is + ** pointing at a NULL row here, so that no values are read from it during + ** the scan of the RHS of the RIGHT join below. */ + sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iIdxCur); + } + pFrom = &uSrc.sSrc; + pFrom->nSrc = 1; + pFrom->nAlloc = 1; + memcpy(&pFrom->a[0], pTabItem, sizeof(SrcItem)); + pFrom->a[0].fg.jointype = 0; + assert( pParse->withinRJSubrtn < 100 ); + pParse->withinRJSubrtn++; + pSubWInfo = sqlite3WhereBegin(pParse, pFrom, pSubWhere, 0, 0, 0, + WHERE_RIGHT_JOIN, 0); + if( pSubWInfo ){ + int iCur = pLevel->iTabCur; + int r = ++pParse->nMem; + int nPk; + int jmp; + int addrCont = sqlite3WhereContinueLabel(pSubWInfo); + Table *pTab = pTabItem->pSTab; + if( HasRowid(pTab) ){ + sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, -1, r); + nPk = 1; + }else{ + int iPk; + Index *pPk = sqlite3PrimaryKeyIndex(pTab); + nPk = pPk->nKeyCol; + pParse->nMem += nPk - 1; + for(iPk=0; iPkaiColumn[iPk]; + sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, iCol,r+iPk); + } + } + jmp = sqlite3VdbeAddOp4Int(v, OP_Filter, pRJ->regBloom, 0, r, nPk); + VdbeCoverage(v); + sqlite3VdbeAddOp4Int(v, OP_Found, pRJ->iMatch, addrCont, r, nPk); + VdbeCoverage(v); + sqlite3VdbeJumpHere(v, jmp); + sqlite3VdbeAddOp2(v, OP_Gosub, pRJ->regReturn, pRJ->addrSubrtn); + sqlite3WhereEnd(pSubWInfo); + } + sqlite3ExprDelete(pParse->db, pSubWhere); + ExplainQueryPlanPop(pParse); + assert( pParse->withinRJSubrtn>0 ); + pParse->withinRJSubrtn--; +} + +/************** End of wherecode.c *******************************************/ +/************** Begin file whereexpr.c ***************************************/ +/* +** 2015-06-08 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This module contains C code that generates VDBE code used to process +** the WHERE clause of SQL statements. +** +** This file was originally part of where.c but was split out to improve +** readability and editability. This file contains utility routines for +** analyzing Expr objects in the WHERE clause. +*/ +/* #include "sqliteInt.h" */ +/* #include "whereInt.h" */ + +/* Forward declarations */ +static void exprAnalyze(SrcList*, WhereClause*, int); + +/* +** Deallocate all memory associated with a WhereOrInfo object. +*/ +static void whereOrInfoDelete(sqlite3 *db, WhereOrInfo *p){ + sqlite3WhereClauseClear(&p->wc); + sqlite3DbFree(db, p); +} + +/* +** Deallocate all memory associated with a WhereAndInfo object. +*/ +static void whereAndInfoDelete(sqlite3 *db, WhereAndInfo *p){ + sqlite3WhereClauseClear(&p->wc); + sqlite3DbFree(db, p); +} + +/* +** Add a single new WhereTerm entry to the WhereClause object pWC. +** The new WhereTerm object is constructed from Expr p and with wtFlags. +** The index in pWC->a[] of the new WhereTerm is returned on success. +** 0 is returned if the new WhereTerm could not be added due to a memory +** allocation error. The memory allocation failure will be recorded in +** the db->mallocFailed flag so that higher-level functions can detect it. +** +** This routine will increase the size of the pWC->a[] array as necessary. +** +** If the wtFlags argument includes TERM_DYNAMIC, then responsibility +** for freeing the expression p is assumed by the WhereClause object pWC. +** This is true even if this routine fails to allocate a new WhereTerm. +** +** WARNING: This routine might reallocate the space used to store +** WhereTerms. All pointers to WhereTerms should be invalidated after +** calling this routine. Such pointers may be reinitialized by referencing +** the pWC->a[] array. +*/ +static int whereClauseInsert(WhereClause *pWC, Expr *p, u16 wtFlags){ + WhereTerm *pTerm; + int idx; + testcase( wtFlags & TERM_VIRTUAL ); + if( pWC->nTerm>=pWC->nSlot ){ + WhereTerm *pOld = pWC->a; + sqlite3 *db = pWC->pWInfo->pParse->db; + pWC->a = sqlite3WhereMalloc(pWC->pWInfo, sizeof(pWC->a[0])*pWC->nSlot*2 ); + if( pWC->a==0 ){ + if( wtFlags & TERM_DYNAMIC ){ + sqlite3ExprDelete(db, p); + } + pWC->a = pOld; + return 0; + } + memcpy(pWC->a, pOld, sizeof(pWC->a[0])*pWC->nTerm); + pWC->nSlot = pWC->nSlot*2; + } + pTerm = &pWC->a[idx = pWC->nTerm++]; + if( (wtFlags & TERM_VIRTUAL)==0 ) pWC->nBase = pWC->nTerm; + if( p && ExprHasProperty(p, EP_Unlikely) ){ + pTerm->truthProb = sqlite3LogEst(p->iTable) - 270; + }else{ + pTerm->truthProb = 1; + } + pTerm->pExpr = sqlite3ExprSkipCollateAndLikely(p); + pTerm->wtFlags = wtFlags; + pTerm->pWC = pWC; + pTerm->iParent = -1; + memset(&pTerm->eOperator, 0, + sizeof(WhereTerm) - offsetof(WhereTerm,eOperator)); + return idx; +} + +/* +** Return TRUE if the given operator is one of the operators that is +** allowed for an indexable WHERE clause term. The allowed operators are +** "=", "<", ">", "<=", ">=", "IN", "IS", and "IS NULL" +*/ +static int allowedOp(int op){ + assert( TK_GT>TK_EQ && TK_GTTK_EQ && TK_LTTK_EQ && TK_LETK_GE ) return 0; + if( op>=TK_EQ ) return 1; + return op==TK_IN || op==TK_ISNULL || op==TK_IS; +} + +/* +** Commute a comparison operator. Expressions of the form "X op Y" +** are converted into "Y op X". +*/ +static u16 exprCommute(Parse *pParse, Expr *pExpr){ + if( pExpr->pLeft->op==TK_VECTOR + || pExpr->pRight->op==TK_VECTOR + || sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft, pExpr->pRight) != + sqlite3BinaryCompareCollSeq(pParse, pExpr->pRight, pExpr->pLeft) + ){ + pExpr->flags ^= EP_Commuted; + } + SWAP(Expr*,pExpr->pRight,pExpr->pLeft); + if( pExpr->op>=TK_GT ){ + assert( TK_LT==TK_GT+2 ); + assert( TK_GE==TK_LE+2 ); + assert( TK_GT>TK_EQ ); + assert( TK_GTop>=TK_GT && pExpr->op<=TK_GE ); + pExpr->op = ((pExpr->op-TK_GT)^2)+TK_GT; + } + return 0; +} + +/* +** Translate from TK_xx operator to WO_xx bitmask. +*/ +static u16 operatorMask(int op){ + u16 c; + assert( allowedOp(op) ); + if( op>=TK_EQ ){ + assert( (WO_EQ<<(op-TK_EQ)) < 0x7fff ); + c = (u16)(WO_EQ<<(op-TK_EQ)); + }else if( op==TK_IN ){ + c = WO_IN; + }else if( op==TK_ISNULL ){ + c = WO_ISNULL; + }else{ + assert( op==TK_IS ); + c = WO_IS; + } + assert( op!=TK_ISNULL || c==WO_ISNULL ); + assert( op!=TK_IN || c==WO_IN ); + assert( op!=TK_EQ || c==WO_EQ ); + assert( op!=TK_LT || c==WO_LT ); + assert( op!=TK_LE || c==WO_LE ); + assert( op!=TK_GT || c==WO_GT ); + assert( op!=TK_GE || c==WO_GE ); + assert( op!=TK_IS || c==WO_IS ); + return c; +} + + +#ifndef SQLITE_OMIT_LIKE_OPTIMIZATION +/* +** Check to see if the given expression is a LIKE or GLOB operator that +** can be optimized using inequality constraints. Return TRUE if it is +** so and false if not. +** +** In order for the operator to be optimizible, the RHS must be a string +** literal that does not begin with a wildcard. The LHS must be a column +** that may only be NULL, a string, or a BLOB, never a number. (This means +** that virtual tables cannot participate in the LIKE optimization.) The +** collating sequence for the column on the LHS must be appropriate for +** the operator. +*/ +static int isLikeOrGlob( + Parse *pParse, /* Parsing and code generating context */ + Expr *pExpr, /* Test this expression */ + Expr **ppPrefix, /* Pointer to TK_STRING expression with pattern prefix */ + int *pisComplete, /* True if the only wildcard is % in the last character */ + int *pnoCase /* True if uppercase is equivalent to lowercase */ +){ + const u8 *z = 0; /* String on RHS of LIKE operator */ + Expr *pRight, *pLeft; /* Right and left size of LIKE operator */ + ExprList *pList; /* List of operands to the LIKE operator */ + u8 c; /* One character in z[] */ + int cnt; /* Number of non-wildcard prefix characters */ + u8 wc[4]; /* Wildcard characters */ + sqlite3 *db = pParse->db; /* Database connection */ + sqlite3_value *pVal = 0; + int op; /* Opcode of pRight */ + int rc; /* Result code to return */ + + if( !sqlite3IsLikeFunction(db, pExpr, pnoCase, (char*)wc) ){ + return 0; + } +#ifdef SQLITE_EBCDIC + if( *pnoCase ) return 0; +#endif + assert( ExprUseXList(pExpr) ); + pList = pExpr->x.pList; + pLeft = pList->a[1].pExpr; + + pRight = sqlite3ExprSkipCollate(pList->a[0].pExpr); + op = pRight->op; + if( op==TK_VARIABLE && (db->flags & SQLITE_EnableQPSG)==0 ){ + Vdbe *pReprepare = pParse->pReprepare; + int iCol = pRight->iColumn; + pVal = sqlite3VdbeGetBoundValue(pReprepare, iCol, SQLITE_AFF_BLOB); + if( pVal && sqlite3_value_type(pVal)==SQLITE_TEXT ){ + z = sqlite3_value_text(pVal); + } + sqlite3VdbeSetVarmask(pParse->pVdbe, iCol); + assert( pRight->op==TK_VARIABLE || pRight->op==TK_REGISTER ); + }else if( op==TK_STRING ){ + assert( !ExprHasProperty(pRight, EP_IntValue) ); + z = (u8*)pRight->u.zToken; + } + if( z ){ + /* Count the number of prefix bytes prior to the first wildcard, + ** U+fffd character, or malformed utf-8. If the underlying database + ** has a UTF16LE encoding, then only consider ASCII characters. Note that + ** the encoding of z[] is UTF8 - we are dealing with only UTF8 here in this + ** code, but the database engine itself might be processing content using a + ** different encoding. */ + cnt = 0; + while( (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2] ){ + cnt++; + if( c==wc[3] && z[cnt]>0 && z[cnt]<0x80 ){ + cnt++; + }else if( c>=0x80 ){ + const u8 *z2 = z+cnt-1; + if( c==0xff || sqlite3Utf8Read(&z2)==0xfffd /* bad utf-8 */ + || ENC(db)==SQLITE_UTF16LE + ){ + cnt--; + break; + }else{ + cnt = (int)(z2-z); + } + } + } + + /* The optimization is possible only if (1) the pattern does not begin + ** with a wildcard and if (2) the non-wildcard prefix does not end with + ** an (illegal 0xff) character, or (3) the pattern does not consist of + ** a single escape character. The second condition is necessary so + ** that we can increment the prefix key to find an upper bound for the + ** range search. The third is because the caller assumes that the pattern + ** consists of at least one character after all escapes have been + ** removed. */ + if( (cnt>1 || (cnt>0 && z[0]!=wc[3])) && ALWAYS(255!=(u8)z[cnt-1]) ){ + Expr *pPrefix; + + /* A "complete" match if the pattern ends with "*" or "%" */ + *pisComplete = c==wc[0] && z[cnt+1]==0 && ENC(db)!=SQLITE_UTF16LE; + + /* Get the pattern prefix. Remove all escapes from the prefix. */ + pPrefix = sqlite3Expr(db, TK_STRING, (char*)z); + if( pPrefix ){ + int iFrom, iTo; + char *zNew; + assert( !ExprHasProperty(pPrefix, EP_IntValue) ); + zNew = pPrefix->u.zToken; + zNew[cnt] = 0; + for(iFrom=iTo=0; iFrom0 ); + + /* If the LHS is not an ordinary column with TEXT affinity, then the + ** pattern prefix boundaries (both the start and end boundaries) must + ** not look like a number. Otherwise the pattern might be treated as + ** a number, which will invalidate the LIKE optimization. + ** + ** Getting this right has been a persistent source of bugs in the + ** LIKE optimization. See, for example: + ** 2018-09-10 https://sqlite.org/src/info/c94369cae9b561b1 + ** 2019-05-02 https://sqlite.org/src/info/b043a54c3de54b28 + ** 2019-06-10 https://sqlite.org/src/info/fd76310a5e843e07 + ** 2019-06-14 https://sqlite.org/src/info/ce8717f0885af975 + ** 2019-09-03 https://sqlite.org/src/info/0f0428096f17252a + */ + if( pLeft->op!=TK_COLUMN + || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT + || (ALWAYS( ExprUseYTab(pLeft) ) + && ALWAYS(pLeft->y.pTab) + && IsVirtual(pLeft->y.pTab)) /* Might be numeric */ + ){ + int isNum; + double rDummy; + isNum = sqlite3AtoF(zNew, &rDummy, iTo, SQLITE_UTF8); + if( isNum<=0 ){ + if( iTo==1 && zNew[0]=='-' ){ + isNum = +1; + }else{ + zNew[iTo-1]++; + isNum = sqlite3AtoF(zNew, &rDummy, iTo, SQLITE_UTF8); + zNew[iTo-1]--; + } + } + if( isNum>0 ){ + sqlite3ExprDelete(db, pPrefix); + sqlite3ValueFree(pVal); + return 0; + } + } + } + *ppPrefix = pPrefix; + + /* If the RHS pattern is a bound parameter, make arrangements to + ** reprepare the statement when that parameter is rebound */ + if( op==TK_VARIABLE ){ + Vdbe *v = pParse->pVdbe; + sqlite3VdbeSetVarmask(v, pRight->iColumn); + assert( !ExprHasProperty(pRight, EP_IntValue) ); + if( *pisComplete && pRight->u.zToken[1] ){ + /* If the rhs of the LIKE expression is a variable, and the current + ** value of the variable means there is no need to invoke the LIKE + ** function, then no OP_Variable will be added to the program. + ** This causes problems for the sqlite3_bind_parameter_name() + ** API. To work around them, add a dummy OP_Variable here. + */ + int r1 = sqlite3GetTempReg(pParse); + sqlite3ExprCodeTarget(pParse, pRight, r1); + sqlite3VdbeChangeP3(v, sqlite3VdbeCurrentAddr(v)-1, 0); + sqlite3ReleaseTempReg(pParse, r1); + } + } + }else{ + z = 0; + } + } + + rc = (z!=0); + sqlite3ValueFree(pVal); + return rc; +} +#endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */ + + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* +** Check to see if the pExpr expression is a form that needs to be passed +** to the xBestIndex method of virtual tables. Forms of interest include: +** +** Expression Virtual Table Operator +** ----------------------- --------------------------------- +** 1. column MATCH expr SQLITE_INDEX_CONSTRAINT_MATCH +** 2. column GLOB expr SQLITE_INDEX_CONSTRAINT_GLOB +** 3. column LIKE expr SQLITE_INDEX_CONSTRAINT_LIKE +** 4. column REGEXP expr SQLITE_INDEX_CONSTRAINT_REGEXP +** 5. column != expr SQLITE_INDEX_CONSTRAINT_NE +** 6. expr != column SQLITE_INDEX_CONSTRAINT_NE +** 7. column IS NOT expr SQLITE_INDEX_CONSTRAINT_ISNOT +** 8. expr IS NOT column SQLITE_INDEX_CONSTRAINT_ISNOT +** 9. column IS NOT NULL SQLITE_INDEX_CONSTRAINT_ISNOTNULL +** +** In every case, "column" must be a column of a virtual table. If there +** is a match, set *ppLeft to the "column" expression, set *ppRight to the +** "expr" expression (even though in forms (6) and (8) the column is on the +** right and the expression is on the left). Also set *peOp2 to the +** appropriate virtual table operator. The return value is 1 or 2 if there +** is a match. The usual return is 1, but if the RHS is also a column +** of virtual table in forms (5) or (7) then return 2. +** +** If the expression matches none of the patterns above, return 0. +*/ +static int isAuxiliaryVtabOperator( + sqlite3 *db, /* Parsing context */ + Expr *pExpr, /* Test this expression */ + unsigned char *peOp2, /* OUT: 0 for MATCH, or else an op2 value */ + Expr **ppLeft, /* Column expression to left of MATCH/op2 */ + Expr **ppRight /* Expression to left of MATCH/op2 */ +){ + if( pExpr->op==TK_FUNCTION ){ + static const struct Op2 { + const char *zOp; + unsigned char eOp2; + } aOp[] = { + { "match", SQLITE_INDEX_CONSTRAINT_MATCH }, + { "glob", SQLITE_INDEX_CONSTRAINT_GLOB }, + { "like", SQLITE_INDEX_CONSTRAINT_LIKE }, + { "regexp", SQLITE_INDEX_CONSTRAINT_REGEXP } + }; + ExprList *pList; + Expr *pCol; /* Column reference */ + int i; + + assert( ExprUseXList(pExpr) ); + pList = pExpr->x.pList; + if( pList==0 || pList->nExpr!=2 ){ + return 0; + } + + /* Built-in operators MATCH, GLOB, LIKE, and REGEXP attach to a + ** virtual table on their second argument, which is the same as + ** the left-hand side operand in their in-fix form. + ** + ** vtab_column MATCH expression + ** MATCH(expression,vtab_column) + */ + pCol = pList->a[1].pExpr; + assert( pCol->op!=TK_COLUMN || (ExprUseYTab(pCol) && pCol->y.pTab!=0) ); + if( ExprIsVtab(pCol) ){ + for(i=0; iu.zToken, aOp[i].zOp)==0 ){ + *peOp2 = aOp[i].eOp2; + *ppRight = pList->a[0].pExpr; + *ppLeft = pCol; + return 1; + } + } + } + + /* We can also match against the first column of overloaded + ** functions where xFindFunction returns a value of at least + ** SQLITE_INDEX_CONSTRAINT_FUNCTION. + ** + ** OVERLOADED(vtab_column,expression) + ** + ** Historically, xFindFunction expected to see lower-case function + ** names. But for this use case, xFindFunction is expected to deal + ** with function names in an arbitrary case. + */ + pCol = pList->a[0].pExpr; + assert( pCol->op!=TK_COLUMN || ExprUseYTab(pCol) ); + assert( pCol->op!=TK_COLUMN || (ExprUseYTab(pCol) && pCol->y.pTab!=0) ); + if( ExprIsVtab(pCol) ){ + sqlite3_vtab *pVtab; + sqlite3_module *pMod; + void (*xNotUsed)(sqlite3_context*,int,sqlite3_value**); + void *pNotUsed; + pVtab = sqlite3GetVTable(db, pCol->y.pTab)->pVtab; + assert( pVtab!=0 ); + assert( pVtab->pModule!=0 ); + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + pMod = (sqlite3_module *)pVtab->pModule; + if( pMod->xFindFunction!=0 ){ + i = pMod->xFindFunction(pVtab,2, pExpr->u.zToken, &xNotUsed, &pNotUsed); + if( i>=SQLITE_INDEX_CONSTRAINT_FUNCTION ){ + *peOp2 = i; + *ppRight = pList->a[1].pExpr; + *ppLeft = pCol; + return 1; + } + } + } + }else if( pExpr->op>=TK_EQ ){ + /* Comparison operators are a common case. Save a few comparisons for + ** that common case by terminating early. */ + assert( TK_NE < TK_EQ ); + assert( TK_ISNOT < TK_EQ ); + assert( TK_NOTNULL < TK_EQ ); + return 0; + }else if( pExpr->op==TK_NE || pExpr->op==TK_ISNOT || pExpr->op==TK_NOTNULL ){ + int res = 0; + Expr *pLeft = pExpr->pLeft; + Expr *pRight = pExpr->pRight; + assert( pLeft->op!=TK_COLUMN || (ExprUseYTab(pLeft) && pLeft->y.pTab!=0) ); + if( ExprIsVtab(pLeft) ){ + res++; + } + assert( pRight==0 || pRight->op!=TK_COLUMN + || (ExprUseYTab(pRight) && pRight->y.pTab!=0) ); + if( pRight && ExprIsVtab(pRight) ){ + res++; + SWAP(Expr*, pLeft, pRight); + } + *ppLeft = pLeft; + *ppRight = pRight; + if( pExpr->op==TK_NE ) *peOp2 = SQLITE_INDEX_CONSTRAINT_NE; + if( pExpr->op==TK_ISNOT ) *peOp2 = SQLITE_INDEX_CONSTRAINT_ISNOT; + if( pExpr->op==TK_NOTNULL ) *peOp2 = SQLITE_INDEX_CONSTRAINT_ISNOTNULL; + return res; + } + return 0; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +/* +** If the pBase expression originated in the ON or USING clause of +** a join, then transfer the appropriate markings over to derived. +*/ +static void transferJoinMarkings(Expr *pDerived, Expr *pBase){ + if( pDerived && ExprHasProperty(pBase, EP_OuterON|EP_InnerON) ){ + pDerived->flags |= pBase->flags & (EP_OuterON|EP_InnerON); + pDerived->w.iJoin = pBase->w.iJoin; + } +} + +/* +** Mark term iChild as being a child of term iParent +*/ +static void markTermAsChild(WhereClause *pWC, int iChild, int iParent){ + pWC->a[iChild].iParent = iParent; + pWC->a[iChild].truthProb = pWC->a[iParent].truthProb; + pWC->a[iParent].nChild++; +} + +/* +** Return the N-th AND-connected subterm of pTerm. Or if pTerm is not +** a conjunction, then return just pTerm when N==0. If N is exceeds +** the number of available subterms, return NULL. +*/ +static WhereTerm *whereNthSubterm(WhereTerm *pTerm, int N){ + if( pTerm->eOperator!=WO_AND ){ + return N==0 ? pTerm : 0; + } + if( Nu.pAndInfo->wc.nTerm ){ + return &pTerm->u.pAndInfo->wc.a[N]; + } + return 0; +} + +/* +** Subterms pOne and pTwo are contained within WHERE clause pWC. The +** two subterms are in disjunction - they are OR-ed together. +** +** If these two terms are both of the form: "A op B" with the same +** A and B values but different operators and if the operators are +** compatible (if one is = and the other is <, for example) then +** add a new virtual AND term to pWC that is the combination of the +** two. +** +** Some examples: +** +** x x<=y +** x=y OR x=y --> x=y +** x<=y OR x x<=y +** +** The following is NOT generated: +** +** xy --> x!=y +*/ +static void whereCombineDisjuncts( + SrcList *pSrc, /* the FROM clause */ + WhereClause *pWC, /* The complete WHERE clause */ + WhereTerm *pOne, /* First disjunct */ + WhereTerm *pTwo /* Second disjunct */ +){ + u16 eOp = pOne->eOperator | pTwo->eOperator; + sqlite3 *db; /* Database connection (for malloc) */ + Expr *pNew; /* New virtual expression */ + int op; /* Operator for the combined expression */ + int idxNew; /* Index in pWC of the next virtual term */ + + if( (pOne->wtFlags | pTwo->wtFlags) & TERM_VNULL ) return; + if( (pOne->eOperator & (WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE))==0 ) return; + if( (pTwo->eOperator & (WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE))==0 ) return; + if( (eOp & (WO_EQ|WO_LT|WO_LE))!=eOp + && (eOp & (WO_EQ|WO_GT|WO_GE))!=eOp ) return; + assert( pOne->pExpr->pLeft!=0 && pOne->pExpr->pRight!=0 ); + assert( pTwo->pExpr->pLeft!=0 && pTwo->pExpr->pRight!=0 ); + if( sqlite3ExprCompare(0,pOne->pExpr->pLeft, pTwo->pExpr->pLeft, -1) ) return; + if( sqlite3ExprCompare(0,pOne->pExpr->pRight, pTwo->pExpr->pRight,-1) )return; + /* If we reach this point, it means the two subterms can be combined */ + if( (eOp & (eOp-1))!=0 ){ + if( eOp & (WO_LT|WO_LE) ){ + eOp = WO_LE; + }else{ + assert( eOp & (WO_GT|WO_GE) ); + eOp = WO_GE; + } + } + db = pWC->pWInfo->pParse->db; + pNew = sqlite3ExprDup(db, pOne->pExpr, 0); + if( pNew==0 ) return; + for(op=TK_EQ; eOp!=(WO_EQ<<(op-TK_EQ)); op++){ assert( opop = op; + idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC); + exprAnalyze(pSrc, pWC, idxNew); +} + +#if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY) +/* +** Analyze a term that consists of two or more OR-connected +** subterms. So in: +** +** ... WHERE (a=5) AND (b=7 OR c=9 OR d=13) AND (d=13) +** ^^^^^^^^^^^^^^^^^^^^ +** +** This routine analyzes terms such as the middle term in the above example. +** A WhereOrTerm object is computed and attached to the term under +** analysis, regardless of the outcome of the analysis. Hence: +** +** WhereTerm.wtFlags |= TERM_ORINFO +** WhereTerm.u.pOrInfo = a dynamically allocated WhereOrTerm object +** +** The term being analyzed must have two or more of OR-connected subterms. +** A single subterm might be a set of AND-connected sub-subterms. +** Examples of terms under analysis: +** +** (A) t1.x=t2.y OR t1.x=t2.z OR t1.y=15 OR t1.z=t3.a+5 +** (B) x=expr1 OR expr2=x OR x=expr3 +** (C) t1.x=t2.y OR (t1.x=t2.z AND t1.y=15) +** (D) x=expr1 OR (y>11 AND y<22 AND z LIKE '*hello*') +** (E) (p.a=1 AND q.b=2 AND r.c=3) OR (p.x=4 AND q.y=5 AND r.z=6) +** (F) x>A OR (x=A AND y>=B) +** +** CASE 1: +** +** If all subterms are of the form T.C=expr for some single column of C and +** a single table T (as shown in example B above) then create a new virtual +** term that is an equivalent IN expression. In other words, if the term +** being analyzed is: +** +** x = expr1 OR expr2 = x OR x = expr3 +** +** then create a new virtual term like this: +** +** x IN (expr1,expr2,expr3) +** +** CASE 2: +** +** If there are exactly two disjuncts and one side has x>A and the other side +** has x=A (for the same x and A) then add a new virtual conjunct term to the +** WHERE clause of the form "x>=A". Example: +** +** x>A OR (x=A AND y>B) adds: x>=A +** +** The added conjunct can sometimes be helpful in query planning. +** +** CASE 3: +** +** If all subterms are indexable by a single table T, then set +** +** WhereTerm.eOperator = WO_OR +** WhereTerm.u.pOrInfo->indexable |= the cursor number for table T +** +** A subterm is "indexable" if it is of the form +** "T.C " where C is any column of table T and +** is one of "=", "<", "<=", ">", ">=", "IS NULL", or "IN". +** A subterm is also indexable if it is an AND of two or more +** subsubterms at least one of which is indexable. Indexable AND +** subterms have their eOperator set to WO_AND and they have +** u.pAndInfo set to a dynamically allocated WhereAndTerm object. +** +** From another point of view, "indexable" means that the subterm could +** potentially be used with an index if an appropriate index exists. +** This analysis does not consider whether or not the index exists; that +** is decided elsewhere. This analysis only looks at whether subterms +** appropriate for indexing exist. +** +** All examples A through E above satisfy case 3. But if a term +** also satisfies case 1 (such as B) we know that the optimizer will +** always prefer case 1, so in that case we pretend that case 3 is not +** satisfied. +** +** It might be the case that multiple tables are indexable. For example, +** (E) above is indexable on tables P, Q, and R. +** +** Terms that satisfy case 3 are candidates for lookup by using +** separate indices to find rowids for each subterm and composing +** the union of all rowids using a RowSet object. This is similar +** to "bitmap indices" in other database engines. +** +** OTHERWISE: +** +** If none of cases 1, 2, or 3 apply, then leave the eOperator set to +** zero. This term is not useful for search. +*/ +static void exprAnalyzeOrTerm( + SrcList *pSrc, /* the FROM clause */ + WhereClause *pWC, /* the complete WHERE clause */ + int idxTerm /* Index of the OR-term to be analyzed */ +){ + WhereInfo *pWInfo = pWC->pWInfo; /* WHERE clause processing context */ + Parse *pParse = pWInfo->pParse; /* Parser context */ + sqlite3 *db = pParse->db; /* Database connection */ + WhereTerm *pTerm = &pWC->a[idxTerm]; /* The term to be analyzed */ + Expr *pExpr = pTerm->pExpr; /* The expression of the term */ + int i; /* Loop counters */ + WhereClause *pOrWc; /* Breakup of pTerm into subterms */ + WhereTerm *pOrTerm; /* A Sub-term within the pOrWc */ + WhereOrInfo *pOrInfo; /* Additional information associated with pTerm */ + Bitmask chngToIN; /* Tables that might satisfy case 1 */ + Bitmask indexable; /* Tables that are indexable, satisfying case 2 */ + + /* + ** Break the OR clause into its separate subterms. The subterms are + ** stored in a WhereClause structure containing within the WhereOrInfo + ** object that is attached to the original OR clause term. + */ + assert( (pTerm->wtFlags & (TERM_DYNAMIC|TERM_ORINFO|TERM_ANDINFO))==0 ); + assert( pExpr->op==TK_OR ); + pTerm->u.pOrInfo = pOrInfo = sqlite3DbMallocZero(db, sizeof(*pOrInfo)); + if( pOrInfo==0 ) return; + pTerm->wtFlags |= TERM_ORINFO; + pOrWc = &pOrInfo->wc; + memset(pOrWc->aStatic, 0, sizeof(pOrWc->aStatic)); + sqlite3WhereClauseInit(pOrWc, pWInfo); + sqlite3WhereSplit(pOrWc, pExpr, TK_OR); + sqlite3WhereExprAnalyze(pSrc, pOrWc); + if( db->mallocFailed ) return; + assert( pOrWc->nTerm>=2 ); + + /* + ** Compute the set of tables that might satisfy cases 1 or 3. + */ + indexable = ~(Bitmask)0; + chngToIN = ~(Bitmask)0; + for(i=pOrWc->nTerm-1, pOrTerm=pOrWc->a; i>=0 && indexable; i--, pOrTerm++){ + if( (pOrTerm->eOperator & WO_SINGLE)==0 ){ + WhereAndInfo *pAndInfo; + assert( (pOrTerm->wtFlags & (TERM_ANDINFO|TERM_ORINFO))==0 ); + chngToIN = 0; + pAndInfo = sqlite3DbMallocRawNN(db, sizeof(*pAndInfo)); + if( pAndInfo ){ + WhereClause *pAndWC; + WhereTerm *pAndTerm; + int j; + Bitmask b = 0; + pOrTerm->u.pAndInfo = pAndInfo; + pOrTerm->wtFlags |= TERM_ANDINFO; + pOrTerm->eOperator = WO_AND; + pOrTerm->leftCursor = -1; + pAndWC = &pAndInfo->wc; + memset(pAndWC->aStatic, 0, sizeof(pAndWC->aStatic)); + sqlite3WhereClauseInit(pAndWC, pWC->pWInfo); + sqlite3WhereSplit(pAndWC, pOrTerm->pExpr, TK_AND); + sqlite3WhereExprAnalyze(pSrc, pAndWC); + pAndWC->pOuter = pWC; + if( !db->mallocFailed ){ + for(j=0, pAndTerm=pAndWC->a; jnTerm; j++, pAndTerm++){ + assert( pAndTerm->pExpr ); + if( allowedOp(pAndTerm->pExpr->op) + || pAndTerm->eOperator==WO_AUX + ){ + b |= sqlite3WhereGetMask(&pWInfo->sMaskSet, pAndTerm->leftCursor); + } + } + } + indexable &= b; + } + }else if( pOrTerm->wtFlags & TERM_COPIED ){ + /* Skip this term for now. We revisit it when we process the + ** corresponding TERM_VIRTUAL term */ + }else{ + Bitmask b; + b = sqlite3WhereGetMask(&pWInfo->sMaskSet, pOrTerm->leftCursor); + if( pOrTerm->wtFlags & TERM_VIRTUAL ){ + WhereTerm *pOther = &pOrWc->a[pOrTerm->iParent]; + b |= sqlite3WhereGetMask(&pWInfo->sMaskSet, pOther->leftCursor); + } + indexable &= b; + if( (pOrTerm->eOperator & WO_EQ)==0 ){ + chngToIN = 0; + }else{ + chngToIN &= b; + } + } + } + + /* + ** Record the set of tables that satisfy case 3. The set might be + ** empty. + */ + pOrInfo->indexable = indexable; + pTerm->eOperator = WO_OR; + pTerm->leftCursor = -1; + if( indexable ){ + pWC->hasOr = 1; + } + + /* For a two-way OR, attempt to implementation case 2. + */ + if( indexable && pOrWc->nTerm==2 ){ + int iOne = 0; + WhereTerm *pOne; + while( (pOne = whereNthSubterm(&pOrWc->a[0],iOne++))!=0 ){ + int iTwo = 0; + WhereTerm *pTwo; + while( (pTwo = whereNthSubterm(&pOrWc->a[1],iTwo++))!=0 ){ + whereCombineDisjuncts(pSrc, pWC, pOne, pTwo); + } + } + } + + /* + ** chngToIN holds a set of tables that *might* satisfy case 1. But + ** we have to do some additional checking to see if case 1 really + ** is satisfied. + ** + ** chngToIN will hold either 0, 1, or 2 bits. The 0-bit case means + ** that there is no possibility of transforming the OR clause into an + ** IN operator because one or more terms in the OR clause contain + ** something other than == on a column in the single table. The 1-bit + ** case means that every term of the OR clause is of the form + ** "table.column=expr" for some single table. The one bit that is set + ** will correspond to the common table. We still need to check to make + ** sure the same column is used on all terms. The 2-bit case is when + ** the all terms are of the form "table1.column=table2.column". It + ** might be possible to form an IN operator with either table1.column + ** or table2.column as the LHS if either is common to every term of + ** the OR clause. + ** + ** Note that terms of the form "table.column1=table.column2" (the + ** same table on both sizes of the ==) cannot be optimized. + */ + if( chngToIN ){ + int okToChngToIN = 0; /* True if the conversion to IN is valid */ + int iColumn = -1; /* Column index on lhs of IN operator */ + int iCursor = -1; /* Table cursor common to all terms */ + int j = 0; /* Loop counter */ + + /* Search for a table and column that appears on one side or the + ** other of the == operator in every subterm. That table and column + ** will be recorded in iCursor and iColumn. There might not be any + ** such table and column. Set okToChngToIN if an appropriate table + ** and column is found but leave okToChngToIN false if not found. + */ + for(j=0; j<2 && !okToChngToIN; j++){ + Expr *pLeft = 0; + pOrTerm = pOrWc->a; + for(i=pOrWc->nTerm-1; i>=0; i--, pOrTerm++){ + assert( pOrTerm->eOperator & WO_EQ ); + pOrTerm->wtFlags &= ~TERM_OK; + if( pOrTerm->leftCursor==iCursor ){ + /* This is the 2-bit case and we are on the second iteration and + ** current term is from the first iteration. So skip this term. */ + assert( j==1 ); + continue; + } + if( (chngToIN & sqlite3WhereGetMask(&pWInfo->sMaskSet, + pOrTerm->leftCursor))==0 ){ + /* This term must be of the form t1.a==t2.b where t2 is in the + ** chngToIN set but t1 is not. This term will be either preceded + ** or followed by an inverted copy (t2.b==t1.a). Skip this term + ** and use its inversion. */ + testcase( pOrTerm->wtFlags & TERM_COPIED ); + testcase( pOrTerm->wtFlags & TERM_VIRTUAL ); + assert( pOrTerm->wtFlags & (TERM_COPIED|TERM_VIRTUAL) ); + continue; + } + assert( (pOrTerm->eOperator & (WO_OR|WO_AND))==0 ); + iColumn = pOrTerm->u.x.leftColumn; + iCursor = pOrTerm->leftCursor; + pLeft = pOrTerm->pExpr->pLeft; + break; + } + if( i<0 ){ + /* No candidate table+column was found. This can only occur + ** on the second iteration */ + assert( j==1 ); + assert( IsPowerOfTwo(chngToIN) ); + assert( chngToIN==sqlite3WhereGetMask(&pWInfo->sMaskSet, iCursor) ); + break; + } + testcase( j==1 ); + + /* We have found a candidate table and column. Check to see if that + ** table and column is common to every term in the OR clause */ + okToChngToIN = 1; + for(; i>=0 && okToChngToIN; i--, pOrTerm++){ + assert( pOrTerm->eOperator & WO_EQ ); + assert( (pOrTerm->eOperator & (WO_OR|WO_AND))==0 ); + if( pOrTerm->leftCursor!=iCursor ){ + pOrTerm->wtFlags &= ~TERM_OK; + }else if( pOrTerm->u.x.leftColumn!=iColumn || (iColumn==XN_EXPR + && sqlite3ExprCompare(pParse, pOrTerm->pExpr->pLeft, pLeft, -1) + )){ + okToChngToIN = 0; + }else{ + int affLeft, affRight; + /* If the right-hand side is also a column, then the affinities + ** of both right and left sides must be such that no type + ** conversions are required on the right. (Ticket #2249) + */ + affRight = sqlite3ExprAffinity(pOrTerm->pExpr->pRight); + affLeft = sqlite3ExprAffinity(pOrTerm->pExpr->pLeft); + if( affRight!=0 && affRight!=affLeft ){ + okToChngToIN = 0; + }else{ + pOrTerm->wtFlags |= TERM_OK; + } + } + } + } + + /* At this point, okToChngToIN is true if original pTerm satisfies + ** case 1. In that case, construct a new virtual term that is + ** pTerm converted into an IN operator. + */ + if( okToChngToIN ){ + Expr *pDup; /* A transient duplicate expression */ + ExprList *pList = 0; /* The RHS of the IN operator */ + Expr *pLeft = 0; /* The LHS of the IN operator */ + Expr *pNew; /* The complete IN operator */ + + for(i=pOrWc->nTerm-1, pOrTerm=pOrWc->a; i>=0; i--, pOrTerm++){ + if( (pOrTerm->wtFlags & TERM_OK)==0 ) continue; + assert( pOrTerm->eOperator & WO_EQ ); + assert( (pOrTerm->eOperator & (WO_OR|WO_AND))==0 ); + assert( pOrTerm->leftCursor==iCursor ); + assert( pOrTerm->u.x.leftColumn==iColumn ); + pDup = sqlite3ExprDup(db, pOrTerm->pExpr->pRight, 0); + pList = sqlite3ExprListAppend(pWInfo->pParse, pList, pDup); + pLeft = pOrTerm->pExpr->pLeft; + } + assert( pLeft!=0 ); + pDup = sqlite3ExprDup(db, pLeft, 0); + pNew = sqlite3PExpr(pParse, TK_IN, pDup, 0); + if( pNew ){ + int idxNew; + transferJoinMarkings(pNew, pExpr); + assert( ExprUseXList(pNew) ); + pNew->x.pList = pList; + idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC); + testcase( idxNew==0 ); + exprAnalyze(pSrc, pWC, idxNew); + /* pTerm = &pWC->a[idxTerm]; // would be needed if pTerm where reused */ + markTermAsChild(pWC, idxNew, idxTerm); + }else{ + sqlite3ExprListDelete(db, pList); + } + } + } +} +#endif /* !SQLITE_OMIT_OR_OPTIMIZATION && !SQLITE_OMIT_SUBQUERY */ + +/* +** We already know that pExpr is a binary operator where both operands are +** column references. This routine checks to see if pExpr is an equivalence +** relation: +** 1. The SQLITE_Transitive optimization must be enabled +** 2. Must be either an == or an IS operator +** 3. Not originating in the ON clause of an OUTER JOIN +** 4. The operator is not IS or else the query does not contain RIGHT JOIN +** 5. The affinities of A and B must be compatible +** 6a. Both operands use the same collating sequence OR +** 6b. The overall collating sequence is BINARY +** If this routine returns TRUE, that means that the RHS can be substituted +** for the LHS anyplace else in the WHERE clause where the LHS column occurs. +** This is an optimization. No harm comes from returning 0. But if 1 is +** returned when it should not be, then incorrect answers might result. +*/ +static int termIsEquivalence(Parse *pParse, Expr *pExpr, SrcList *pSrc){ + char aff1, aff2; + CollSeq *pColl; + if( !OptimizationEnabled(pParse->db, SQLITE_Transitive) ) return 0; /* (1) */ + if( pExpr->op!=TK_EQ && pExpr->op!=TK_IS ) return 0; /* (2) */ + if( ExprHasProperty(pExpr, EP_OuterON) ) return 0; /* (3) */ + assert( pSrc!=0 ); + if( pExpr->op==TK_IS + && pSrc->nSrc>=2 + && (pSrc->a[0].fg.jointype & JT_LTORJ)!=0 + ){ + return 0; /* (4) */ + } + aff1 = sqlite3ExprAffinity(pExpr->pLeft); + aff2 = sqlite3ExprAffinity(pExpr->pRight); + if( aff1!=aff2 + && (!sqlite3IsNumericAffinity(aff1) || !sqlite3IsNumericAffinity(aff2)) + ){ + return 0; /* (5) */ + } + pColl = sqlite3ExprCompareCollSeq(pParse, pExpr); + if( !sqlite3IsBinary(pColl) + && !sqlite3ExprCollSeqMatch(pParse, pExpr->pLeft, pExpr->pRight) + ){ + return 0; /* (6) */ + } + return 1; +} + +/* +** Recursively walk the expressions of a SELECT statement and generate +** a bitmask indicating which tables are used in that expression +** tree. +*/ +static Bitmask exprSelectUsage(WhereMaskSet *pMaskSet, Select *pS){ + Bitmask mask = 0; + while( pS ){ + SrcList *pSrc = pS->pSrc; + mask |= sqlite3WhereExprListUsage(pMaskSet, pS->pEList); + mask |= sqlite3WhereExprListUsage(pMaskSet, pS->pGroupBy); + mask |= sqlite3WhereExprListUsage(pMaskSet, pS->pOrderBy); + mask |= sqlite3WhereExprUsage(pMaskSet, pS->pWhere); + mask |= sqlite3WhereExprUsage(pMaskSet, pS->pHaving); + if( ALWAYS(pSrc!=0) ){ + int i; + for(i=0; inSrc; i++){ + if( pSrc->a[i].fg.isSubquery ){ + mask |= exprSelectUsage(pMaskSet, pSrc->a[i].u4.pSubq->pSelect); + } + if( pSrc->a[i].fg.isUsing==0 ){ + mask |= sqlite3WhereExprUsage(pMaskSet, pSrc->a[i].u3.pOn); + } + if( pSrc->a[i].fg.isTabFunc ){ + mask |= sqlite3WhereExprListUsage(pMaskSet, pSrc->a[i].u1.pFuncArg); + } + } + } + pS = pS->pPrior; + } + return mask; +} + +/* +** Expression pExpr is one operand of a comparison operator that might +** be useful for indexing. This routine checks to see if pExpr appears +** in any index. Return TRUE (1) if pExpr is an indexed term and return +** FALSE (0) if not. If TRUE is returned, also set aiCurCol[0] to the cursor +** number of the table that is indexed and aiCurCol[1] to the column number +** of the column that is indexed, or XN_EXPR (-2) if an expression is being +** indexed. +** +** If pExpr is a TK_COLUMN column reference, then this routine always returns +** true even if that particular column is not indexed, because the column +** might be added to an automatic index later. +*/ +static SQLITE_NOINLINE int exprMightBeIndexed2( + SrcList *pFrom, /* The FROM clause */ + int *aiCurCol, /* Write the referenced table cursor and column here */ + Expr *pExpr, /* An operand of a comparison operator */ + int j /* Start looking with the j-th pFrom entry */ +){ + Index *pIdx; + int i; + int iCur; + do{ + iCur = pFrom->a[j].iCursor; + for(pIdx=pFrom->a[j].pSTab->pIndex; pIdx; pIdx=pIdx->pNext){ + if( pIdx->aColExpr==0 ) continue; + for(i=0; inKeyCol; i++){ + if( pIdx->aiColumn[i]!=XN_EXPR ) continue; + assert( pIdx->bHasExpr ); + if( sqlite3ExprCompareSkip(pExpr,pIdx->aColExpr->a[i].pExpr,iCur)==0 + && !sqlite3ExprIsConstant(0,pIdx->aColExpr->a[i].pExpr) + ){ + aiCurCol[0] = iCur; + aiCurCol[1] = XN_EXPR; + return 1; + } + } + } + }while( ++j < pFrom->nSrc ); + return 0; +} +static int exprMightBeIndexed( + SrcList *pFrom, /* The FROM clause */ + int *aiCurCol, /* Write the referenced table cursor & column here */ + Expr *pExpr, /* An operand of a comparison operator */ + int op /* The specific comparison operator */ +){ + int i; + + /* If this expression is a vector to the left or right of a + ** inequality constraint (>, <, >= or <=), perform the processing + ** on the first element of the vector. */ + assert( TK_GT+1==TK_LE && TK_GT+2==TK_LT && TK_GT+3==TK_GE ); + assert( TK_ISop==TK_VECTOR && (op>=TK_GT && ALWAYS(op<=TK_GE)) ){ + assert( ExprUseXList(pExpr) ); + pExpr = pExpr->x.pList->a[0].pExpr; + } + + if( pExpr->op==TK_COLUMN ){ + aiCurCol[0] = pExpr->iTable; + aiCurCol[1] = pExpr->iColumn; + return 1; + } + + for(i=0; inSrc; i++){ + Index *pIdx; + for(pIdx=pFrom->a[i].pSTab->pIndex; pIdx; pIdx=pIdx->pNext){ + if( pIdx->aColExpr ){ + return exprMightBeIndexed2(pFrom,aiCurCol,pExpr,i); + } + } + } + return 0; +} + + +/* +** The input to this routine is an WhereTerm structure with only the +** "pExpr" field filled in. The job of this routine is to analyze the +** subexpression and populate all the other fields of the WhereTerm +** structure. +** +** If the expression is of the form " X" it gets commuted +** to the standard form of "X ". +** +** If the expression is of the form "X Y" where both X and Y are +** columns, then the original expression is unchanged and a new virtual +** term of the form "Y X" is added to the WHERE clause and +** analyzed separately. The original term is marked with TERM_COPIED +** and the new term is marked with TERM_DYNAMIC (because it's pExpr +** needs to be freed with the WhereClause) and TERM_VIRTUAL (because it +** is a commuted copy of a prior term.) The original term has nChild=1 +** and the copy has idxParent set to the index of the original term. +*/ +static void exprAnalyze( + SrcList *pSrc, /* the FROM clause */ + WhereClause *pWC, /* the WHERE clause */ + int idxTerm /* Index of the term to be analyzed */ +){ + WhereInfo *pWInfo = pWC->pWInfo; /* WHERE clause processing context */ + WhereTerm *pTerm; /* The term to be analyzed */ + WhereMaskSet *pMaskSet; /* Set of table index masks */ + Expr *pExpr; /* The expression to be analyzed */ + Bitmask prereqLeft; /* Prerequisites of the pExpr->pLeft */ + Bitmask prereqAll; /* Prerequisites of pExpr */ + Bitmask extraRight = 0; /* Extra dependencies on LEFT JOIN */ + Expr *pStr1 = 0; /* RHS of LIKE/GLOB operator */ + int isComplete = 0; /* RHS of LIKE/GLOB ends with wildcard */ + int noCase = 0; /* uppercase equivalent to lowercase */ + int op; /* Top-level operator. pExpr->op */ + Parse *pParse = pWInfo->pParse; /* Parsing context */ + sqlite3 *db = pParse->db; /* Database connection */ + unsigned char eOp2 = 0; /* op2 value for LIKE/REGEXP/GLOB */ + int nLeft; /* Number of elements on left side vector */ + + if( db->mallocFailed ){ + return; + } + assert( pWC->nTerm > idxTerm ); + pTerm = &pWC->a[idxTerm]; +#ifdef SQLITE_DEBUG + pTerm->iTerm = idxTerm; +#endif + pMaskSet = &pWInfo->sMaskSet; + pExpr = pTerm->pExpr; + assert( pExpr!=0 ); /* Because malloc() has not failed */ + assert( pExpr->op!=TK_AS && pExpr->op!=TK_COLLATE ); + pMaskSet->bVarSelect = 0; + prereqLeft = sqlite3WhereExprUsage(pMaskSet, pExpr->pLeft); + op = pExpr->op; + if( op==TK_IN ){ + assert( pExpr->pRight==0 ); + if( sqlite3ExprCheckIN(pParse, pExpr) ) return; + if( ExprUseXSelect(pExpr) ){ + pTerm->prereqRight = exprSelectUsage(pMaskSet, pExpr->x.pSelect); + }else{ + pTerm->prereqRight = sqlite3WhereExprListUsage(pMaskSet, pExpr->x.pList); + } + prereqAll = prereqLeft | pTerm->prereqRight; + }else{ + pTerm->prereqRight = sqlite3WhereExprUsage(pMaskSet, pExpr->pRight); + if( pExpr->pLeft==0 + || ExprHasProperty(pExpr, EP_xIsSelect|EP_IfNullRow) + || pExpr->x.pList!=0 + ){ + prereqAll = sqlite3WhereExprUsageNN(pMaskSet, pExpr); + }else{ + prereqAll = prereqLeft | pTerm->prereqRight; + } + } + if( pMaskSet->bVarSelect ) pTerm->wtFlags |= TERM_VARSELECT; + +#ifdef SQLITE_DEBUG + if( prereqAll!=sqlite3WhereExprUsageNN(pMaskSet, pExpr) ){ + printf("\n*** Incorrect prereqAll computed for:\n"); + sqlite3TreeViewExpr(0,pExpr,0); + assert( 0 ); + } +#endif + + if( ExprHasProperty(pExpr, EP_OuterON|EP_InnerON) ){ + Bitmask x = sqlite3WhereGetMask(pMaskSet, pExpr->w.iJoin); + if( ExprHasProperty(pExpr, EP_OuterON) ){ + prereqAll |= x; + extraRight = x-1; /* ON clause terms may not be used with an index + ** on left table of a LEFT JOIN. Ticket #3015 */ + }else if( (prereqAll>>1)>=x ){ + ExprClearProperty(pExpr, EP_InnerON); + } + } + pTerm->prereqAll = prereqAll; + pTerm->leftCursor = -1; + pTerm->iParent = -1; + pTerm->eOperator = 0; + if( allowedOp(op) ){ + int aiCurCol[2]; + Expr *pLeft = sqlite3ExprSkipCollate(pExpr->pLeft); + Expr *pRight = sqlite3ExprSkipCollate(pExpr->pRight); + u16 opMask = (pTerm->prereqRight & prereqLeft)==0 ? WO_ALL : WO_EQUIV; + + if( pTerm->u.x.iField>0 ){ + assert( op==TK_IN ); + assert( pLeft->op==TK_VECTOR ); + assert( ExprUseXList(pLeft) ); + pLeft = pLeft->x.pList->a[pTerm->u.x.iField-1].pExpr; + } + + if( exprMightBeIndexed(pSrc, aiCurCol, pLeft, op) ){ + pTerm->leftCursor = aiCurCol[0]; + assert( (pTerm->eOperator & (WO_OR|WO_AND))==0 ); + pTerm->u.x.leftColumn = aiCurCol[1]; + pTerm->eOperator = operatorMask(op) & opMask; + } + if( op==TK_IS ) pTerm->wtFlags |= TERM_IS; + if( pRight + && exprMightBeIndexed(pSrc, aiCurCol, pRight, op) + && !ExprHasProperty(pRight, EP_FixedCol) + ){ + WhereTerm *pNew; + Expr *pDup; + u16 eExtraOp = 0; /* Extra bits for pNew->eOperator */ + assert( pTerm->u.x.iField==0 ); + if( pTerm->leftCursor>=0 ){ + int idxNew; + pDup = sqlite3ExprDup(db, pExpr, 0); + if( db->mallocFailed ){ + sqlite3ExprDelete(db, pDup); + return; + } + idxNew = whereClauseInsert(pWC, pDup, TERM_VIRTUAL|TERM_DYNAMIC); + if( idxNew==0 ) return; + pNew = &pWC->a[idxNew]; + markTermAsChild(pWC, idxNew, idxTerm); + if( op==TK_IS ) pNew->wtFlags |= TERM_IS; + pTerm = &pWC->a[idxTerm]; + pTerm->wtFlags |= TERM_COPIED; + assert( pWInfo->pTabList!=0 ); + if( termIsEquivalence(pParse, pDup, pWInfo->pTabList) ){ + pTerm->eOperator |= WO_EQUIV; + eExtraOp = WO_EQUIV; + } + }else{ + pDup = pExpr; + pNew = pTerm; + } + pNew->wtFlags |= exprCommute(pParse, pDup); + pNew->leftCursor = aiCurCol[0]; + assert( (pTerm->eOperator & (WO_OR|WO_AND))==0 ); + pNew->u.x.leftColumn = aiCurCol[1]; + testcase( (prereqLeft | extraRight) != prereqLeft ); + pNew->prereqRight = prereqLeft | extraRight; + pNew->prereqAll = prereqAll; + pNew->eOperator = (operatorMask(pDup->op) + eExtraOp) & opMask; + }else + if( op==TK_ISNULL + && !ExprHasProperty(pExpr,EP_OuterON) + && 0==sqlite3ExprCanBeNull(pLeft) + ){ + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + pExpr->op = TK_TRUEFALSE; /* See tag-20230504-1 */ + pExpr->u.zToken = "false"; + ExprSetProperty(pExpr, EP_IsFalse); + pTerm->prereqAll = 0; + pTerm->eOperator = 0; + } + } + +#ifndef SQLITE_OMIT_BETWEEN_OPTIMIZATION + /* If a term is the BETWEEN operator, create two new virtual terms + ** that define the range that the BETWEEN implements. For example: + ** + ** a BETWEEN b AND c + ** + ** is converted into: + ** + ** (a BETWEEN b AND c) AND (a>=b) AND (a<=c) + ** + ** The two new terms are added onto the end of the WhereClause object. + ** The new terms are "dynamic" and are children of the original BETWEEN + ** term. That means that if the BETWEEN term is coded, the children are + ** skipped. Or, if the children are satisfied by an index, the original + ** BETWEEN term is skipped. + */ + else if( pExpr->op==TK_BETWEEN && pWC->op==TK_AND ){ + ExprList *pList; + int i; + static const u8 ops[] = {TK_GE, TK_LE}; + assert( ExprUseXList(pExpr) ); + pList = pExpr->x.pList; + assert( pList!=0 ); + assert( pList->nExpr==2 ); + for(i=0; i<2; i++){ + Expr *pNewExpr; + int idxNew; + pNewExpr = sqlite3PExpr(pParse, ops[i], + sqlite3ExprDup(db, pExpr->pLeft, 0), + sqlite3ExprDup(db, pList->a[i].pExpr, 0)); + transferJoinMarkings(pNewExpr, pExpr); + idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC); + testcase( idxNew==0 ); + exprAnalyze(pSrc, pWC, idxNew); + pTerm = &pWC->a[idxTerm]; + markTermAsChild(pWC, idxNew, idxTerm); + } + } +#endif /* SQLITE_OMIT_BETWEEN_OPTIMIZATION */ + +#if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY) + /* Analyze a term that is composed of two or more subterms connected by + ** an OR operator. + */ + else if( pExpr->op==TK_OR ){ + assert( pWC->op==TK_AND ); + exprAnalyzeOrTerm(pSrc, pWC, idxTerm); + pTerm = &pWC->a[idxTerm]; + } +#endif /* SQLITE_OMIT_OR_OPTIMIZATION */ + /* The form "x IS NOT NULL" can sometimes be evaluated more efficiently + ** as "x>NULL" if x is not an INTEGER PRIMARY KEY. So construct a + ** virtual term of that form. + ** + ** The virtual term must be tagged with TERM_VNULL. + */ + else if( pExpr->op==TK_NOTNULL ){ + if( pExpr->pLeft->op==TK_COLUMN + && pExpr->pLeft->iColumn>=0 + && !ExprHasProperty(pExpr, EP_OuterON) + ){ + Expr *pNewExpr; + Expr *pLeft = pExpr->pLeft; + int idxNew; + WhereTerm *pNewTerm; + + pNewExpr = sqlite3PExpr(pParse, TK_GT, + sqlite3ExprDup(db, pLeft, 0), + sqlite3ExprAlloc(db, TK_NULL, 0, 0)); + + idxNew = whereClauseInsert(pWC, pNewExpr, + TERM_VIRTUAL|TERM_DYNAMIC|TERM_VNULL); + if( idxNew ){ + pNewTerm = &pWC->a[idxNew]; + pNewTerm->prereqRight = 0; + pNewTerm->leftCursor = pLeft->iTable; + pNewTerm->u.x.leftColumn = pLeft->iColumn; + pNewTerm->eOperator = WO_GT; + markTermAsChild(pWC, idxNew, idxTerm); + pTerm = &pWC->a[idxTerm]; + pTerm->wtFlags |= TERM_COPIED; + pNewTerm->prereqAll = pTerm->prereqAll; + } + } + } + + +#ifndef SQLITE_OMIT_LIKE_OPTIMIZATION + /* Add constraints to reduce the search space on a LIKE or GLOB + ** operator. + ** + ** A like pattern of the form "x LIKE 'aBc%'" is changed into constraints + ** + ** x>='ABC' AND x<'abd' AND x LIKE 'aBc%' + ** + ** The last character of the prefix "abc" is incremented to form the + ** termination condition "abd". If case is not significant (the default + ** for LIKE) then the lower-bound is made all uppercase and the upper- + ** bound is made all lowercase so that the bounds also work when comparing + ** BLOBs. + */ + else if( pExpr->op==TK_FUNCTION + && pWC->op==TK_AND + && isLikeOrGlob(pParse, pExpr, &pStr1, &isComplete, &noCase) + ){ + Expr *pLeft; /* LHS of LIKE/GLOB operator */ + Expr *pStr2; /* Copy of pStr1 - RHS of LIKE/GLOB operator */ + Expr *pNewExpr1; + Expr *pNewExpr2; + int idxNew1; + int idxNew2; + const char *zCollSeqName; /* Name of collating sequence */ + const u16 wtFlags = TERM_LIKEOPT | TERM_VIRTUAL | TERM_DYNAMIC; + + assert( ExprUseXList(pExpr) ); + pLeft = pExpr->x.pList->a[1].pExpr; + pStr2 = sqlite3ExprDup(db, pStr1, 0); + assert( pStr1==0 || !ExprHasProperty(pStr1, EP_IntValue) ); + assert( pStr2==0 || !ExprHasProperty(pStr2, EP_IntValue) ); + + + /* Convert the lower bound to upper-case and the upper bound to + ** lower-case (upper-case is less than lower-case in ASCII) so that + ** the range constraints also work for BLOBs + */ + if( noCase && !pParse->db->mallocFailed ){ + int i; + char c; + pTerm->wtFlags |= TERM_LIKE; + for(i=0; (c = pStr1->u.zToken[i])!=0; i++){ + pStr1->u.zToken[i] = sqlite3Toupper(c); + pStr2->u.zToken[i] = sqlite3Tolower(c); + } + } + + if( !db->mallocFailed ){ + u8 *pC; /* Last character before the first wildcard */ + pC = (u8*)&pStr2->u.zToken[sqlite3Strlen30(pStr2->u.zToken)-1]; + if( noCase ){ + /* The point is to increment the last character before the first + ** wildcard. But if we increment '@', that will push it into the + ** alphabetic range where case conversions will mess up the + ** inequality. To avoid this, make sure to also run the full + ** LIKE on all candidate expressions by clearing the isComplete flag + */ + if( *pC=='A'-1 ) isComplete = 0; + *pC = sqlite3UpperToLower[*pC]; + } + + /* Increment the value of the last utf8 character in the prefix. */ + while( *pC==0xBF && pC>(u8*)pStr2->u.zToken ){ + *pC = 0x80; + pC--; + } + assert( *pC!=0xFF ); /* isLikeOrGlob() guarantees this */ + (*pC)++; + } + zCollSeqName = noCase ? "NOCASE" : sqlite3StrBINARY; + pNewExpr1 = sqlite3ExprDup(db, pLeft, 0); + pNewExpr1 = sqlite3PExpr(pParse, TK_GE, + sqlite3ExprAddCollateString(pParse,pNewExpr1,zCollSeqName), + pStr1); + transferJoinMarkings(pNewExpr1, pExpr); + idxNew1 = whereClauseInsert(pWC, pNewExpr1, wtFlags); + testcase( idxNew1==0 ); + pNewExpr2 = sqlite3ExprDup(db, pLeft, 0); + pNewExpr2 = sqlite3PExpr(pParse, TK_LT, + sqlite3ExprAddCollateString(pParse,pNewExpr2,zCollSeqName), + pStr2); + transferJoinMarkings(pNewExpr2, pExpr); + idxNew2 = whereClauseInsert(pWC, pNewExpr2, wtFlags); + testcase( idxNew2==0 ); + exprAnalyze(pSrc, pWC, idxNew1); + exprAnalyze(pSrc, pWC, idxNew2); + pTerm = &pWC->a[idxTerm]; + if( isComplete ){ + markTermAsChild(pWC, idxNew1, idxTerm); + markTermAsChild(pWC, idxNew2, idxTerm); + } + } +#endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */ + + /* If there is a vector == or IS term - e.g. "(a, b) == (?, ?)" - create + ** new terms for each component comparison - "a = ?" and "b = ?". The + ** new terms completely replace the original vector comparison, which is + ** no longer used. + ** + ** This is only required if at least one side of the comparison operation + ** is not a sub-select. + ** + ** tag-20220128a + */ + if( (pExpr->op==TK_EQ || pExpr->op==TK_IS) + && (nLeft = sqlite3ExprVectorSize(pExpr->pLeft))>1 + && sqlite3ExprVectorSize(pExpr->pRight)==nLeft + && ( (pExpr->pLeft->flags & EP_xIsSelect)==0 + || (pExpr->pRight->flags & EP_xIsSelect)==0) + && pWC->op==TK_AND + ){ + int i; + for(i=0; ipLeft, i, nLeft); + Expr *pRight = sqlite3ExprForVectorField(pParse, pExpr->pRight, i, nLeft); + + pNew = sqlite3PExpr(pParse, pExpr->op, pLeft, pRight); + transferJoinMarkings(pNew, pExpr); + idxNew = whereClauseInsert(pWC, pNew, TERM_DYNAMIC|TERM_SLICE); + exprAnalyze(pSrc, pWC, idxNew); + } + pTerm = &pWC->a[idxTerm]; + pTerm->wtFlags |= TERM_CODED|TERM_VIRTUAL; /* Disable the original */ + pTerm->eOperator = WO_ROWVAL; + } + + /* If there is a vector IN term - e.g. "(a, b) IN (SELECT ...)" - create + ** a virtual term for each vector component. The expression object + ** used by each such virtual term is pExpr (the full vector IN(...) + ** expression). The WhereTerm.u.x.iField variable identifies the index within + ** the vector on the LHS that the virtual term represents. + ** + ** This only works if the RHS is a simple SELECT (not a compound) that does + ** not use window functions. + */ + else if( pExpr->op==TK_IN + && pTerm->u.x.iField==0 + && pExpr->pLeft->op==TK_VECTOR + && ALWAYS( ExprUseXSelect(pExpr) ) + && (pExpr->x.pSelect->pPrior==0 || (pExpr->x.pSelect->selFlags & SF_Values)) +#ifndef SQLITE_OMIT_WINDOWFUNC + && pExpr->x.pSelect->pWin==0 +#endif + && pWC->op==TK_AND + ){ + int i; + for(i=0; ipLeft); i++){ + int idxNew; + idxNew = whereClauseInsert(pWC, pExpr, TERM_VIRTUAL|TERM_SLICE); + pWC->a[idxNew].u.x.iField = i+1; + exprAnalyze(pSrc, pWC, idxNew); + markTermAsChild(pWC, idxNew, idxTerm); + } + } + +#ifndef SQLITE_OMIT_VIRTUALTABLE + /* Add a WO_AUX auxiliary term to the constraint set if the + ** current expression is of the form "column OP expr" where OP + ** is an operator that gets passed into virtual tables but which is + ** not normally optimized for ordinary tables. In other words, OP + ** is one of MATCH, LIKE, GLOB, REGEXP, !=, IS, IS NOT, or NOT NULL. + ** This information is used by the xBestIndex methods of + ** virtual tables. The native query optimizer does not attempt + ** to do anything with MATCH functions. + */ + else if( pWC->op==TK_AND ){ + Expr *pRight = 0, *pLeft = 0; + int res = isAuxiliaryVtabOperator(db, pExpr, &eOp2, &pLeft, &pRight); + while( res-- > 0 ){ + int idxNew; + WhereTerm *pNewTerm; + Bitmask prereqColumn, prereqExpr; + + prereqExpr = sqlite3WhereExprUsage(pMaskSet, pRight); + prereqColumn = sqlite3WhereExprUsage(pMaskSet, pLeft); + if( (prereqExpr & prereqColumn)==0 ){ + Expr *pNewExpr; + pNewExpr = sqlite3PExpr(pParse, TK_MATCH, + 0, sqlite3ExprDup(db, pRight, 0)); + if( ExprHasProperty(pExpr, EP_OuterON) && pNewExpr ){ + ExprSetProperty(pNewExpr, EP_OuterON); + pNewExpr->w.iJoin = pExpr->w.iJoin; + } + idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC); + testcase( idxNew==0 ); + pNewTerm = &pWC->a[idxNew]; + pNewTerm->prereqRight = prereqExpr | extraRight; + pNewTerm->leftCursor = pLeft->iTable; + pNewTerm->u.x.leftColumn = pLeft->iColumn; + pNewTerm->eOperator = WO_AUX; + pNewTerm->eMatchOp = eOp2; + markTermAsChild(pWC, idxNew, idxTerm); + pTerm = &pWC->a[idxTerm]; + pTerm->wtFlags |= TERM_COPIED; + pNewTerm->prereqAll = pTerm->prereqAll; + } + SWAP(Expr*, pLeft, pRight); + } + } +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + + /* Prevent ON clause terms of a LEFT JOIN from being used to drive + ** an index for tables to the left of the join. + */ + testcase( pTerm!=&pWC->a[idxTerm] ); + pTerm = &pWC->a[idxTerm]; + pTerm->prereqRight |= extraRight; +} + +/*************************************************************************** +** Routines with file scope above. Interface to the rest of the where.c +** subsystem follows. +***************************************************************************/ + +/* +** This routine identifies subexpressions in the WHERE clause where +** each subexpression is separated by the AND operator or some other +** operator specified in the op parameter. The WhereClause structure +** is filled with pointers to subexpressions. For example: +** +** WHERE a=='hello' AND coalesce(b,11)<10 AND (c+12!=d OR c==22) +** \________/ \_______________/ \________________/ +** slot[0] slot[1] slot[2] +** +** The original WHERE clause in pExpr is unaltered. All this routine +** does is make slot[] entries point to substructure within pExpr. +** +** In the previous sentence and in the diagram, "slot[]" refers to +** the WhereClause.a[] array. The slot[] array grows as needed to contain +** all terms of the WHERE clause. +*/ +SQLITE_PRIVATE void sqlite3WhereSplit(WhereClause *pWC, Expr *pExpr, u8 op){ + Expr *pE2 = sqlite3ExprSkipCollateAndLikely(pExpr); + pWC->op = op; + assert( pE2!=0 || pExpr==0 ); + if( pE2==0 ) return; + if( pE2->op!=op ){ + whereClauseInsert(pWC, pExpr, 0); + }else{ + sqlite3WhereSplit(pWC, pE2->pLeft, op); + sqlite3WhereSplit(pWC, pE2->pRight, op); + } +} + +/* +** Add either a LIMIT (if eMatchOp==SQLITE_INDEX_CONSTRAINT_LIMIT) or +** OFFSET (if eMatchOp==SQLITE_INDEX_CONSTRAINT_OFFSET) term to the +** where-clause passed as the first argument. The value for the term +** is found in register iReg. +** +** In the common case where the value is a simple integer +** (example: "LIMIT 5 OFFSET 10") then the expression codes as a +** TK_INTEGER so that it will be available to sqlite3_vtab_rhs_value(). +** If not, then it codes as a TK_REGISTER expression. +*/ +static void whereAddLimitExpr( + WhereClause *pWC, /* Add the constraint to this WHERE clause */ + int iReg, /* Register that will hold value of the limit/offset */ + Expr *pExpr, /* Expression that defines the limit/offset */ + int iCsr, /* Cursor to which the constraint applies */ + int eMatchOp /* SQLITE_INDEX_CONSTRAINT_LIMIT or _OFFSET */ +){ + Parse *pParse = pWC->pWInfo->pParse; + sqlite3 *db = pParse->db; + Expr *pNew; + int iVal = 0; + + if( sqlite3ExprIsInteger(pExpr, &iVal, pParse) && iVal>=0 ){ + Expr *pVal = sqlite3Expr(db, TK_INTEGER, 0); + if( pVal==0 ) return; + ExprSetProperty(pVal, EP_IntValue); + pVal->u.iValue = iVal; + pNew = sqlite3PExpr(pParse, TK_MATCH, 0, pVal); + }else{ + Expr *pVal = sqlite3Expr(db, TK_REGISTER, 0); + if( pVal==0 ) return; + pVal->iTable = iReg; + pNew = sqlite3PExpr(pParse, TK_MATCH, 0, pVal); + } + if( pNew ){ + WhereTerm *pTerm; + int idx; + idx = whereClauseInsert(pWC, pNew, TERM_DYNAMIC|TERM_VIRTUAL); + pTerm = &pWC->a[idx]; + pTerm->leftCursor = iCsr; + pTerm->eOperator = WO_AUX; + pTerm->eMatchOp = eMatchOp; + } +} + +/* +** Possibly add terms corresponding to the LIMIT and OFFSET clauses of the +** SELECT statement passed as the second argument. These terms are only +** added if: +** +** 1. The SELECT statement has a LIMIT clause, and +** 2. The SELECT statement is not an aggregate or DISTINCT query, and +** 3. The SELECT statement has exactly one object in its FROM clause, and +** that object is a virtual table, and +** 4. There are no terms in the WHERE clause that will not be passed +** to the virtual table xBestIndex method. +** 5. The ORDER BY clause, if any, will be made available to the xBestIndex +** method. +** +** LIMIT and OFFSET terms are ignored by most of the planner code. They +** exist only so that they may be passed to the xBestIndex method of the +** single virtual table in the FROM clause of the SELECT. +*/ +SQLITE_PRIVATE void SQLITE_NOINLINE sqlite3WhereAddLimit(WhereClause *pWC, Select *p){ + assert( p!=0 && p->pLimit!=0 ); /* 1 -- checked by caller */ + if( p->pGroupBy==0 + && (p->selFlags & (SF_Distinct|SF_Aggregate))==0 /* 2 */ + && (p->pSrc->nSrc==1 && IsVirtual(p->pSrc->a[0].pSTab)) /* 3 */ + ){ + ExprList *pOrderBy = p->pOrderBy; + int iCsr = p->pSrc->a[0].iCursor; + int ii; + + /* Check condition (4). Return early if it is not met. */ + for(ii=0; iinTerm; ii++){ + if( pWC->a[ii].wtFlags & TERM_CODED ){ + /* This term is a vector operation that has been decomposed into + ** other, subsequent terms. It can be ignored. See tag-20220128a */ + assert( pWC->a[ii].wtFlags & TERM_VIRTUAL ); + assert( pWC->a[ii].eOperator==WO_ROWVAL ); + continue; + } + if( pWC->a[ii].nChild ){ + /* If this term has child terms, then they are also part of the + ** pWC->a[] array. So this term can be ignored, as a LIMIT clause + ** will only be added if each of the child terms passes the + ** (leftCursor==iCsr) test below. */ + continue; + } + if( pWC->a[ii].leftCursor==iCsr && pWC->a[ii].prereqRight==0 ) continue; + + /* If this term has a parent with exactly one child, and the parent will + ** be passed through to xBestIndex, then this term can be ignored. */ + if( pWC->a[ii].iParent>=0 ){ + WhereTerm *pParent = &pWC->a[ pWC->a[ii].iParent ]; + if( pParent->leftCursor==iCsr + && pParent->prereqRight==0 + && pParent->nChild==1 + ){ + continue; + } + } + + /* This term will not be passed through. Do not add a LIMIT clause. */ + return; + } + + /* Check condition (5). Return early if it is not met. */ + if( pOrderBy ){ + for(ii=0; iinExpr; ii++){ + Expr *pExpr = pOrderBy->a[ii].pExpr; + if( pExpr->op!=TK_COLUMN ) return; + if( pExpr->iTable!=iCsr ) return; + if( pOrderBy->a[ii].fg.sortFlags & KEYINFO_ORDER_BIGNULL ) return; + } + } + + /* All conditions are met. Add the terms to the where-clause object. */ + assert( p->pLimit->op==TK_LIMIT ); + if( p->iOffset!=0 && (p->selFlags & SF_Compound)==0 ){ + whereAddLimitExpr(pWC, p->iOffset, p->pLimit->pRight, + iCsr, SQLITE_INDEX_CONSTRAINT_OFFSET); + } + if( p->iOffset==0 || (p->selFlags & SF_Compound)==0 ){ + whereAddLimitExpr(pWC, p->iLimit, p->pLimit->pLeft, + iCsr, SQLITE_INDEX_CONSTRAINT_LIMIT); + } + } +} + +/* +** Initialize a preallocated WhereClause structure. +*/ +SQLITE_PRIVATE void sqlite3WhereClauseInit( + WhereClause *pWC, /* The WhereClause to be initialized */ + WhereInfo *pWInfo /* The WHERE processing context */ +){ + pWC->pWInfo = pWInfo; + pWC->hasOr = 0; + pWC->pOuter = 0; + pWC->nTerm = 0; + pWC->nBase = 0; + pWC->nSlot = ArraySize(pWC->aStatic); + pWC->a = pWC->aStatic; +} + +/* +** Deallocate a WhereClause structure. The WhereClause structure +** itself is not freed. This routine is the inverse of +** sqlite3WhereClauseInit(). +*/ +SQLITE_PRIVATE void sqlite3WhereClauseClear(WhereClause *pWC){ + sqlite3 *db = pWC->pWInfo->pParse->db; + assert( pWC->nTerm>=pWC->nBase ); + if( pWC->nTerm>0 ){ + WhereTerm *a = pWC->a; + WhereTerm *aLast = &pWC->a[pWC->nTerm-1]; +#ifdef SQLITE_DEBUG + int i; + /* Verify that every term past pWC->nBase is virtual */ + for(i=pWC->nBase; inTerm; i++){ + assert( (pWC->a[i].wtFlags & TERM_VIRTUAL)!=0 ); + } +#endif + while(1){ + assert( a->eMatchOp==0 || a->eOperator==WO_AUX ); + if( a->wtFlags & TERM_DYNAMIC ){ + sqlite3ExprDelete(db, a->pExpr); + } + if( a->wtFlags & (TERM_ORINFO|TERM_ANDINFO) ){ + if( a->wtFlags & TERM_ORINFO ){ + assert( (a->wtFlags & TERM_ANDINFO)==0 ); + whereOrInfoDelete(db, a->u.pOrInfo); + }else{ + assert( (a->wtFlags & TERM_ANDINFO)!=0 ); + whereAndInfoDelete(db, a->u.pAndInfo); + } + } + if( a==aLast ) break; + a++; + } + } +} + + +/* +** These routines walk (recursively) an expression tree and generate +** a bitmask indicating which tables are used in that expression +** tree. +** +** sqlite3WhereExprUsage(MaskSet, Expr) -> +** +** Return a Bitmask of all tables referenced by Expr. Expr can be +** be NULL, in which case 0 is returned. +** +** sqlite3WhereExprUsageNN(MaskSet, Expr) -> +** +** Same as sqlite3WhereExprUsage() except that Expr must not be +** NULL. The "NN" suffix on the name stands for "Not Null". +** +** sqlite3WhereExprListUsage(MaskSet, ExprList) -> +** +** Return a Bitmask of all tables referenced by every expression +** in the expression list ExprList. ExprList can be NULL, in which +** case 0 is returned. +** +** sqlite3WhereExprUsageFull(MaskSet, ExprList) -> +** +** Internal use only. Called only by sqlite3WhereExprUsageNN() for +** complex expressions that require pushing register values onto +** the stack. Many calls to sqlite3WhereExprUsageNN() do not need +** the more complex analysis done by this routine. Hence, the +** computations done by this routine are broken out into a separate +** "no-inline" function to avoid the stack push overhead in the +** common case where it is not needed. +*/ +static SQLITE_NOINLINE Bitmask sqlite3WhereExprUsageFull( + WhereMaskSet *pMaskSet, + Expr *p +){ + Bitmask mask; + mask = (p->op==TK_IF_NULL_ROW) ? sqlite3WhereGetMask(pMaskSet, p->iTable) : 0; + if( p->pLeft ) mask |= sqlite3WhereExprUsageNN(pMaskSet, p->pLeft); + if( p->pRight ){ + mask |= sqlite3WhereExprUsageNN(pMaskSet, p->pRight); + assert( p->x.pList==0 ); + }else if( ExprUseXSelect(p) ){ + if( ExprHasProperty(p, EP_VarSelect) ) pMaskSet->bVarSelect = 1; + mask |= exprSelectUsage(pMaskSet, p->x.pSelect); + }else if( p->x.pList ){ + mask |= sqlite3WhereExprListUsage(pMaskSet, p->x.pList); + } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( (p->op==TK_FUNCTION || p->op==TK_AGG_FUNCTION) && ExprUseYWin(p) ){ + assert( p->y.pWin!=0 ); + mask |= sqlite3WhereExprListUsage(pMaskSet, p->y.pWin->pPartition); + mask |= sqlite3WhereExprListUsage(pMaskSet, p->y.pWin->pOrderBy); + mask |= sqlite3WhereExprUsage(pMaskSet, p->y.pWin->pFilter); + } +#endif + return mask; +} +SQLITE_PRIVATE Bitmask sqlite3WhereExprUsageNN(WhereMaskSet *pMaskSet, Expr *p){ + if( p->op==TK_COLUMN && !ExprHasProperty(p, EP_FixedCol) ){ + return sqlite3WhereGetMask(pMaskSet, p->iTable); + }else if( ExprHasProperty(p, EP_TokenOnly|EP_Leaf) ){ + assert( p->op!=TK_IF_NULL_ROW ); + return 0; + } + return sqlite3WhereExprUsageFull(pMaskSet, p); +} +SQLITE_PRIVATE Bitmask sqlite3WhereExprUsage(WhereMaskSet *pMaskSet, Expr *p){ + return p ? sqlite3WhereExprUsageNN(pMaskSet,p) : 0; +} +SQLITE_PRIVATE Bitmask sqlite3WhereExprListUsage(WhereMaskSet *pMaskSet, ExprList *pList){ + int i; + Bitmask mask = 0; + if( pList ){ + for(i=0; inExpr; i++){ + mask |= sqlite3WhereExprUsage(pMaskSet, pList->a[i].pExpr); + } + } + return mask; +} + + +/* +** Call exprAnalyze on all terms in a WHERE clause. +** +** Note that exprAnalyze() might add new virtual terms onto the +** end of the WHERE clause. We do not want to analyze these new +** virtual terms, so start analyzing at the end and work forward +** so that the added virtual terms are never processed. +*/ +SQLITE_PRIVATE void sqlite3WhereExprAnalyze( + SrcList *pTabList, /* the FROM clause */ + WhereClause *pWC /* the WHERE clause to be analyzed */ +){ + int i; + for(i=pWC->nTerm-1; i>=0; i--){ + exprAnalyze(pTabList, pWC, i); + } +} + +/* +** For table-valued-functions, transform the function arguments into +** new WHERE clause terms. +** +** Each function argument translates into an equality constraint against +** a HIDDEN column in the table. +*/ +SQLITE_PRIVATE void sqlite3WhereTabFuncArgs( + Parse *pParse, /* Parsing context */ + SrcItem *pItem, /* The FROM clause term to process */ + WhereClause *pWC /* Xfer function arguments to here */ +){ + Table *pTab; + int j, k; + ExprList *pArgs; + Expr *pColRef; + Expr *pTerm; + if( pItem->fg.isTabFunc==0 ) return; + pTab = pItem->pSTab; + assert( pTab!=0 ); + pArgs = pItem->u1.pFuncArg; + if( pArgs==0 ) return; + for(j=k=0; jnExpr; j++){ + Expr *pRhs; + u32 joinType; + while( knCol && (pTab->aCol[k].colFlags & COLFLAG_HIDDEN)==0 ){k++;} + if( k>=pTab->nCol ){ + sqlite3ErrorMsg(pParse, "too many arguments on %s() - max %d", + pTab->zName, j); + return; + } + pColRef = sqlite3ExprAlloc(pParse->db, TK_COLUMN, 0, 0); + if( pColRef==0 ) return; + pColRef->iTable = pItem->iCursor; + pColRef->iColumn = k++; + assert( ExprUseYTab(pColRef) ); + pColRef->y.pTab = pTab; + pItem->colUsed |= sqlite3ExprColUsed(pColRef); + pRhs = sqlite3PExpr(pParse, TK_UPLUS, + sqlite3ExprDup(pParse->db, pArgs->a[j].pExpr, 0), 0); + pTerm = sqlite3PExpr(pParse, TK_EQ, pColRef, pRhs); + if( pItem->fg.jointype & (JT_LEFT|JT_RIGHT) ){ + testcase( pItem->fg.jointype & JT_LEFT ); /* testtag-20230227a */ + testcase( pItem->fg.jointype & JT_RIGHT ); /* testtag-20230227b */ + joinType = EP_OuterON; + }else{ + testcase( pItem->fg.jointype & JT_LTORJ ); /* testtag-20230227c */ + joinType = EP_InnerON; + } + sqlite3SetJoinExpr(pTerm, pItem->iCursor, joinType); + whereClauseInsert(pWC, pTerm, TERM_DYNAMIC); + } +} + +/************** End of whereexpr.c *******************************************/ +/************** Begin file where.c *******************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This module contains C code that generates VDBE code used to process +** the WHERE clause of SQL statements. This module is responsible for +** generating the code that loops through a table looking for applicable +** rows. Indices are selected and used to speed the search when doing +** so is applicable. Because this module is responsible for selecting +** indices, you might also think of this module as the "query optimizer". +*/ +/* #include "sqliteInt.h" */ +/* #include "whereInt.h" */ + +/* +** Extra information appended to the end of sqlite3_index_info but not +** visible to the xBestIndex function, at least not directly. The +** sqlite3_vtab_collation() interface knows how to reach it, however. +** +** This object is not an API and can be changed from one release to the +** next. As long as allocateIndexInfo() and sqlite3_vtab_collation() +** agree on the structure, all will be well. +*/ +typedef struct HiddenIndexInfo HiddenIndexInfo; +struct HiddenIndexInfo { + WhereClause *pWC; /* The Where clause being analyzed */ + Parse *pParse; /* The parsing context */ + int eDistinct; /* Value to return from sqlite3_vtab_distinct() */ + u32 mIn; /* Mask of terms that are IN (...) */ + u32 mHandleIn; /* Terms that vtab will handle as IN (...) */ + sqlite3_value *aRhs[FLEXARRAY]; /* RHS values for constraints. MUST BE LAST + ** Extra space is allocated to hold up + ** to nTerm such values */ +}; + +/* Size (in bytes) of a HiddenIndeInfo object sufficient to hold as +** many as N constraints */ +#define SZ_HIDDENINDEXINFO(N) \ + (offsetof(HiddenIndexInfo,aRhs) + (N)*sizeof(sqlite3_value*)) + +/* Forward declaration of methods */ +static int whereLoopResize(sqlite3*, WhereLoop*, int); + +/* +** Return the estimated number of output rows from a WHERE clause +*/ +SQLITE_PRIVATE LogEst sqlite3WhereOutputRowCount(WhereInfo *pWInfo){ + return pWInfo->nRowOut; +} + +/* +** Return one of the WHERE_DISTINCT_xxxxx values to indicate how this +** WHERE clause returns outputs for DISTINCT processing. +*/ +SQLITE_PRIVATE int sqlite3WhereIsDistinct(WhereInfo *pWInfo){ + return pWInfo->eDistinct; +} + +/* +** Return the number of ORDER BY terms that are satisfied by the +** WHERE clause. A return of 0 means that the output must be +** completely sorted. A return equal to the number of ORDER BY +** terms means that no sorting is needed at all. A return that +** is positive but less than the number of ORDER BY terms means that +** block sorting is required. +*/ +SQLITE_PRIVATE int sqlite3WhereIsOrdered(WhereInfo *pWInfo){ + return pWInfo->nOBSat<0 ? 0 : pWInfo->nOBSat; +} + +/* +** In the ORDER BY LIMIT optimization, if the inner-most loop is known +** to emit rows in increasing order, and if the last row emitted by the +** inner-most loop did not fit within the sorter, then we can skip all +** subsequent rows for the current iteration of the inner loop (because they +** will not fit in the sorter either) and continue with the second inner +** loop - the loop immediately outside the inner-most. +** +** When a row does not fit in the sorter (because the sorter already +** holds LIMIT+OFFSET rows that are smaller), then a jump is made to the +** label returned by this function. +** +** If the ORDER BY LIMIT optimization applies, the jump destination should +** be the continuation for the second-inner-most loop. If the ORDER BY +** LIMIT optimization does not apply, then the jump destination should +** be the continuation for the inner-most loop. +** +** It is always safe for this routine to return the continuation of the +** inner-most loop, in the sense that a correct answer will result. +** Returning the continuation the second inner loop is an optimization +** that might make the code run a little faster, but should not change +** the final answer. +*/ +SQLITE_PRIVATE int sqlite3WhereOrderByLimitOptLabel(WhereInfo *pWInfo){ + WhereLevel *pInner; + if( !pWInfo->bOrderedInnerLoop ){ + /* The ORDER BY LIMIT optimization does not apply. Jump to the + ** continuation of the inner-most loop. */ + return pWInfo->iContinue; + } + pInner = &pWInfo->a[pWInfo->nLevel-1]; + assert( pInner->addrNxt!=0 ); + return pInner->pRJ ? pWInfo->iContinue : pInner->addrNxt; +} + +/* +** While generating code for the min/max optimization, after handling +** the aggregate-step call to min() or max(), check to see if any +** additional looping is required. If the output order is such that +** we are certain that the correct answer has already been found, then +** code an OP_Goto to by pass subsequent processing. +** +** Any extra OP_Goto that is coded here is an optimization. The +** correct answer should be obtained regardless. This OP_Goto just +** makes the answer appear faster. +*/ +SQLITE_PRIVATE void sqlite3WhereMinMaxOptEarlyOut(Vdbe *v, WhereInfo *pWInfo){ + WhereLevel *pInner; + int i; + if( !pWInfo->bOrderedInnerLoop ) return; + if( pWInfo->nOBSat==0 ) return; + for(i=pWInfo->nLevel-1; i>=0; i--){ + pInner = &pWInfo->a[i]; + if( (pInner->pWLoop->wsFlags & WHERE_COLUMN_IN)!=0 ){ + sqlite3VdbeGoto(v, pInner->addrNxt); + return; + } + } + sqlite3VdbeGoto(v, pWInfo->iBreak); +} + +/* +** Return the VDBE address or label to jump to in order to continue +** immediately with the next row of a WHERE clause. +*/ +SQLITE_PRIVATE int sqlite3WhereContinueLabel(WhereInfo *pWInfo){ + assert( pWInfo->iContinue!=0 ); + return pWInfo->iContinue; +} + +/* +** Return the VDBE address or label to jump to in order to break +** out of a WHERE loop. +*/ +SQLITE_PRIVATE int sqlite3WhereBreakLabel(WhereInfo *pWInfo){ + return pWInfo->iBreak; +} + +/* +** Return ONEPASS_OFF (0) if an UPDATE or DELETE statement is unable to +** operate directly on the rowids returned by a WHERE clause. Return +** ONEPASS_SINGLE (1) if the statement can operation directly because only +** a single row is to be changed. Return ONEPASS_MULTI (2) if the one-pass +** optimization can be used on multiple +** +** If the ONEPASS optimization is used (if this routine returns true) +** then also write the indices of open cursors used by ONEPASS +** into aiCur[0] and aiCur[1]. iaCur[0] gets the cursor of the data +** table and iaCur[1] gets the cursor used by an auxiliary index. +** Either value may be -1, indicating that cursor is not used. +** Any cursors returned will have been opened for writing. +** +** aiCur[0] and aiCur[1] both get -1 if the where-clause logic is +** unable to use the ONEPASS optimization. +*/ +SQLITE_PRIVATE int sqlite3WhereOkOnePass(WhereInfo *pWInfo, int *aiCur){ + memcpy(aiCur, pWInfo->aiCurOnePass, sizeof(int)*2); +#ifdef WHERETRACE_ENABLED + if( sqlite3WhereTrace && pWInfo->eOnePass!=ONEPASS_OFF ){ + sqlite3DebugPrintf("%s cursors: %d %d\n", + pWInfo->eOnePass==ONEPASS_SINGLE ? "ONEPASS_SINGLE" : "ONEPASS_MULTI", + aiCur[0], aiCur[1]); + } +#endif + return pWInfo->eOnePass; +} + +/* +** Return TRUE if the WHERE loop uses the OP_DeferredSeek opcode to move +** the data cursor to the row selected by the index cursor. +*/ +SQLITE_PRIVATE int sqlite3WhereUsesDeferredSeek(WhereInfo *pWInfo){ + return pWInfo->bDeferredSeek; +} + +/* +** Move the content of pSrc into pDest +*/ +static void whereOrMove(WhereOrSet *pDest, WhereOrSet *pSrc){ + pDest->n = pSrc->n; + memcpy(pDest->a, pSrc->a, pDest->n*sizeof(pDest->a[0])); +} + +/* +** Try to insert a new prerequisite/cost entry into the WhereOrSet pSet. +** +** The new entry might overwrite an existing entry, or it might be +** appended, or it might be discarded. Do whatever is the right thing +** so that pSet keeps the N_OR_COST best entries seen so far. +*/ +static int whereOrInsert( + WhereOrSet *pSet, /* The WhereOrSet to be updated */ + Bitmask prereq, /* Prerequisites of the new entry */ + LogEst rRun, /* Run-cost of the new entry */ + LogEst nOut /* Number of outputs for the new entry */ +){ + u16 i; + WhereOrCost *p; + for(i=pSet->n, p=pSet->a; i>0; i--, p++){ + if( rRun<=p->rRun && (prereq & p->prereq)==prereq ){ + goto whereOrInsert_done; + } + if( p->rRun<=rRun && (p->prereq & prereq)==p->prereq ){ + return 0; + } + } + if( pSet->na[pSet->n++]; + p->nOut = nOut; + }else{ + p = pSet->a; + for(i=1; in; i++){ + if( p->rRun>pSet->a[i].rRun ) p = pSet->a + i; + } + if( p->rRun<=rRun ) return 0; + } +whereOrInsert_done: + p->prereq = prereq; + p->rRun = rRun; + if( p->nOut>nOut ) p->nOut = nOut; + return 1; +} + +/* +** Return the bitmask for the given cursor number. Return 0 if +** iCursor is not in the set. +*/ +SQLITE_PRIVATE Bitmask sqlite3WhereGetMask(WhereMaskSet *pMaskSet, int iCursor){ + int i; + assert( pMaskSet->n<=(int)sizeof(Bitmask)*8 ); + assert( pMaskSet->n>0 || pMaskSet->ix[0]<0 ); + assert( iCursor>=-1 ); + if( pMaskSet->ix[0]==iCursor ){ + return 1; + } + for(i=1; in; i++){ + if( pMaskSet->ix[i]==iCursor ){ + return MASKBIT(i); + } + } + return 0; +} + +/* Allocate memory that is automatically freed when pWInfo is freed. +*/ +SQLITE_PRIVATE void *sqlite3WhereMalloc(WhereInfo *pWInfo, u64 nByte){ + WhereMemBlock *pBlock; + pBlock = sqlite3DbMallocRawNN(pWInfo->pParse->db, nByte+sizeof(*pBlock)); + if( pBlock ){ + pBlock->pNext = pWInfo->pMemToFree; + pBlock->sz = nByte; + pWInfo->pMemToFree = pBlock; + pBlock++; + } + return (void*)pBlock; +} +SQLITE_PRIVATE void *sqlite3WhereRealloc(WhereInfo *pWInfo, void *pOld, u64 nByte){ + void *pNew = sqlite3WhereMalloc(pWInfo, nByte); + if( pNew && pOld ){ + WhereMemBlock *pOldBlk = (WhereMemBlock*)pOld; + pOldBlk--; + assert( pOldBlk->szsz); + } + return pNew; +} + +/* +** Create a new mask for cursor iCursor. +** +** There is one cursor per table in the FROM clause. The number of +** tables in the FROM clause is limited by a test early in the +** sqlite3WhereBegin() routine. So we know that the pMaskSet->ix[] +** array will never overflow. +*/ +static void createMask(WhereMaskSet *pMaskSet, int iCursor){ + assert( pMaskSet->n < ArraySize(pMaskSet->ix) ); + pMaskSet->ix[pMaskSet->n++] = iCursor; +} + +/* +** If the right-hand branch of the expression is a TK_COLUMN, then return +** a pointer to the right-hand branch. Otherwise, return NULL. +*/ +static Expr *whereRightSubexprIsColumn(Expr *p){ + p = sqlite3ExprSkipCollateAndLikely(p->pRight); + if( ALWAYS(p!=0) && p->op==TK_COLUMN && !ExprHasProperty(p, EP_FixedCol) ){ + return p; + } + return 0; +} + +/* +** Term pTerm is guaranteed to be a WO_IN term. It may be a component term +** of a vector IN expression of the form "(x, y, ...) IN (SELECT ...)". +** This function checks to see if the term is compatible with an index +** column with affinity idxaff (one of the SQLITE_AFF_XYZ values). If so, +** it returns a pointer to the name of the collation sequence (e.g. "BINARY" +** or "NOCASE") used by the comparison in pTerm. If it is not compatible +** with affinity idxaff, NULL is returned. +*/ +static SQLITE_NOINLINE const char *indexInAffinityOk( + Parse *pParse, + WhereTerm *pTerm, + u8 idxaff +){ + Expr *pX = pTerm->pExpr; + Expr inexpr; + + assert( pTerm->eOperator & WO_IN ); + + if( sqlite3ExprIsVector(pX->pLeft) ){ + int iField = pTerm->u.x.iField - 1; + inexpr.flags = 0; + inexpr.op = TK_EQ; + inexpr.pLeft = pX->pLeft->x.pList->a[iField].pExpr; + assert( ExprUseXSelect(pX) ); + inexpr.pRight = pX->x.pSelect->pEList->a[iField].pExpr; + pX = &inexpr; + } + + if( sqlite3IndexAffinityOk(pX, idxaff) ){ + CollSeq *pRet = sqlite3ExprCompareCollSeq(pParse, pX); + return pRet ? pRet->zName : sqlite3StrBINARY; + } + return 0; +} + +/* +** Advance to the next WhereTerm that matches according to the criteria +** established when the pScan object was initialized by whereScanInit(). +** Return NULL if there are no more matching WhereTerms. +*/ +static WhereTerm *whereScanNext(WhereScan *pScan){ + int iCur; /* The cursor on the LHS of the term */ + i16 iColumn; /* The column on the LHS of the term. -1 for IPK */ + Expr *pX; /* An expression being tested */ + WhereClause *pWC; /* Shorthand for pScan->pWC */ + WhereTerm *pTerm; /* The term being tested */ + int k = pScan->k; /* Where to start scanning */ + + assert( pScan->iEquiv<=pScan->nEquiv ); + pWC = pScan->pWC; + while(1){ + iColumn = pScan->aiColumn[pScan->iEquiv-1]; + iCur = pScan->aiCur[pScan->iEquiv-1]; + assert( pWC!=0 ); + assert( iCur>=0 ); + do{ + for(pTerm=pWC->a+k; knTerm; k++, pTerm++){ + assert( (pTerm->eOperator & (WO_OR|WO_AND))==0 || pTerm->leftCursor<0 ); + if( pTerm->leftCursor==iCur + && pTerm->u.x.leftColumn==iColumn + && (iColumn!=XN_EXPR + || sqlite3ExprCompareSkip(pTerm->pExpr->pLeft, + pScan->pIdxExpr,iCur)==0) + && (pScan->iEquiv<=1 || !ExprHasProperty(pTerm->pExpr, EP_OuterON)) + ){ + if( (pTerm->eOperator & WO_EQUIV)!=0 + && pScan->nEquivaiCur) + && (pX = whereRightSubexprIsColumn(pTerm->pExpr))!=0 + ){ + int j; + for(j=0; jnEquiv; j++){ + if( pScan->aiCur[j]==pX->iTable + && pScan->aiColumn[j]==pX->iColumn ){ + break; + } + } + if( j==pScan->nEquiv ){ + pScan->aiCur[j] = pX->iTable; + pScan->aiColumn[j] = pX->iColumn; + pScan->nEquiv++; + } + } + if( (pTerm->eOperator & pScan->opMask)!=0 ){ + /* Verify the affinity and collating sequence match */ + if( pScan->zCollName && (pTerm->eOperator & WO_ISNULL)==0 ){ + const char *zCollName; + Parse *pParse = pWC->pWInfo->pParse; + pX = pTerm->pExpr; + + if( (pTerm->eOperator & WO_IN) ){ + zCollName = indexInAffinityOk(pParse, pTerm, pScan->idxaff); + if( !zCollName ) continue; + }else{ + CollSeq *pColl; + if( !sqlite3IndexAffinityOk(pX, pScan->idxaff) ){ + continue; + } + assert(pX->pLeft); + pColl = sqlite3ExprCompareCollSeq(pParse, pX); + zCollName = pColl ? pColl->zName : sqlite3StrBINARY; + } + + if( sqlite3StrICmp(zCollName, pScan->zCollName) ){ + continue; + } + } + if( (pTerm->eOperator & (WO_EQ|WO_IS))!=0 + && (pX = pTerm->pExpr->pRight, ALWAYS(pX!=0)) + && pX->op==TK_COLUMN + && pX->iTable==pScan->aiCur[0] + && pX->iColumn==pScan->aiColumn[0] + ){ + testcase( pTerm->eOperator & WO_IS ); + continue; + } + pScan->pWC = pWC; + pScan->k = k+1; +#ifdef WHERETRACE_ENABLED + if( (sqlite3WhereTrace & 0x20000)!=0 && pScan->nEquiv>1 ){ + int ii; + sqlite3DebugPrintf("EQUIVALENT TO {%d:%d} (due to TERM-%d):", + pScan->aiCur[0], pScan->aiColumn[0], pTerm->iTerm); + for(ii=1; iinEquiv; ii++){ + sqlite3DebugPrintf(" {%d:%d}", + pScan->aiCur[ii], pScan->aiColumn[ii]); + } + sqlite3DebugPrintf("\n"); + } +#endif + return pTerm; + } + } + } + pWC = pWC->pOuter; + k = 0; + }while( pWC!=0 ); + if( pScan->iEquiv>=pScan->nEquiv ) break; + pWC = pScan->pOrigWC; + k = 0; + pScan->iEquiv++; + } + return 0; +} + +/* +** This is whereScanInit() for the case of an index on an expression. +** It is factored out into a separate tail-recursion subroutine so that +** the normal whereScanInit() routine, which is a high-runner, does not +** need to push registers onto the stack as part of its prologue. +*/ +static SQLITE_NOINLINE WhereTerm *whereScanInitIndexExpr(WhereScan *pScan){ + pScan->idxaff = sqlite3ExprAffinity(pScan->pIdxExpr); + return whereScanNext(pScan); +} + +/* +** Initialize a WHERE clause scanner object. Return a pointer to the +** first match. Return NULL if there are no matches. +** +** The scanner will be searching the WHERE clause pWC. It will look +** for terms of the form "X " where X is column iColumn of table +** iCur. Or if pIdx!=0 then X is column iColumn of index pIdx. pIdx +** must be one of the indexes of table iCur. +** +** The must be one of the operators described by opMask. +** +** If the search is for X and the WHERE clause contains terms of the +** form X=Y then this routine might also return terms of the form +** "Y ". The number of levels of transitivity is limited, +** but is enough to handle most commonly occurring SQL statements. +** +** If X is not the INTEGER PRIMARY KEY then X must be compatible with +** index pIdx. +*/ +static WhereTerm *whereScanInit( + WhereScan *pScan, /* The WhereScan object being initialized */ + WhereClause *pWC, /* The WHERE clause to be scanned */ + int iCur, /* Cursor to scan for */ + int iColumn, /* Column to scan for */ + u32 opMask, /* Operator(s) to scan for */ + Index *pIdx /* Must be compatible with this index */ +){ + pScan->pOrigWC = pWC; + pScan->pWC = pWC; + pScan->pIdxExpr = 0; + pScan->idxaff = 0; + pScan->zCollName = 0; + pScan->opMask = opMask; + pScan->k = 0; + pScan->aiCur[0] = iCur; + pScan->nEquiv = 1; + pScan->iEquiv = 1; + if( pIdx ){ + int j = iColumn; + iColumn = pIdx->aiColumn[j]; + if( iColumn==pIdx->pTable->iPKey ){ + iColumn = XN_ROWID; + }else if( iColumn>=0 ){ + pScan->idxaff = pIdx->pTable->aCol[iColumn].affinity; + pScan->zCollName = pIdx->azColl[j]; + }else if( iColumn==XN_EXPR ){ + pScan->pIdxExpr = pIdx->aColExpr->a[j].pExpr; + pScan->zCollName = pIdx->azColl[j]; + pScan->aiColumn[0] = XN_EXPR; + return whereScanInitIndexExpr(pScan); + } + }else if( iColumn==XN_EXPR ){ + return 0; + } + pScan->aiColumn[0] = iColumn; + return whereScanNext(pScan); +} + +/* +** Search for a term in the WHERE clause that is of the form "X " +** where X is a reference to the iColumn of table iCur or of index pIdx +** if pIdx!=0 and is one of the WO_xx operator codes specified by +** the op parameter. Return a pointer to the term. Return 0 if not found. +** +** If pIdx!=0 then it must be one of the indexes of table iCur. +** Search for terms matching the iColumn-th column of pIdx +** rather than the iColumn-th column of table iCur. +** +** The term returned might by Y= if there is another constraint in +** the WHERE clause that specifies that X=Y. Any such constraints will be +** identified by the WO_EQUIV bit in the pTerm->eOperator field. The +** aiCur[]/iaColumn[] arrays hold X and all its equivalents. There are 11 +** slots in aiCur[]/aiColumn[] so that means we can look for X plus up to 10 +** other equivalent values. Hence a search for X will return if X=A1 +** and A1=A2 and A2=A3 and ... and A9=A10 and A10=. +** +** If there are multiple terms in the WHERE clause of the form "X " +** then try for the one with no dependencies on - in other words where +** is a constant expression of some kind. Only return entries of +** the form "X Y" where Y is a column in another table if no terms of +** the form "X " exist. If no terms with a constant RHS +** exist, try to return a term that does not use WO_EQUIV. +*/ +SQLITE_PRIVATE WhereTerm *sqlite3WhereFindTerm( + WhereClause *pWC, /* The WHERE clause to be searched */ + int iCur, /* Cursor number of LHS */ + int iColumn, /* Column number of LHS */ + Bitmask notReady, /* RHS must not overlap with this mask */ + u32 op, /* Mask of WO_xx values describing operator */ + Index *pIdx /* Must be compatible with this index, if not NULL */ +){ + WhereTerm *pResult = 0; + WhereTerm *p; + WhereScan scan; + + p = whereScanInit(&scan, pWC, iCur, iColumn, op, pIdx); + op &= WO_EQ|WO_IS; + while( p ){ + if( (p->prereqRight & notReady)==0 ){ + if( p->prereqRight==0 && (p->eOperator&op)!=0 ){ + testcase( p->eOperator & WO_IS ); + return p; + } + if( pResult==0 ) pResult = p; + } + p = whereScanNext(&scan); + } + return pResult; +} + +/* +** This function searches pList for an entry that matches the iCol-th column +** of index pIdx. +** +** If such an expression is found, its index in pList->a[] is returned. If +** no expression is found, -1 is returned. +*/ +static int findIndexCol( + Parse *pParse, /* Parse context */ + ExprList *pList, /* Expression list to search */ + int iBase, /* Cursor for table associated with pIdx */ + Index *pIdx, /* Index to match column of */ + int iCol /* Column of index to match */ +){ + int i; + const char *zColl = pIdx->azColl[iCol]; + + for(i=0; inExpr; i++){ + Expr *p = sqlite3ExprSkipCollateAndLikely(pList->a[i].pExpr); + if( ALWAYS(p!=0) + && (p->op==TK_COLUMN || p->op==TK_AGG_COLUMN) + && p->iColumn==pIdx->aiColumn[iCol] + && p->iTable==iBase + ){ + CollSeq *pColl = sqlite3ExprNNCollSeq(pParse, pList->a[i].pExpr); + if( 0==sqlite3StrICmp(pColl->zName, zColl) ){ + return i; + } + } + } + + return -1; +} + +/* +** Return TRUE if the iCol-th column of index pIdx is NOT NULL +*/ +static int indexColumnNotNull(Index *pIdx, int iCol){ + int j; + assert( pIdx!=0 ); + assert( iCol>=0 && iColnColumn ); + j = pIdx->aiColumn[iCol]; + if( j>=0 ){ + return pIdx->pTable->aCol[j].notNull; + }else if( j==(-1) ){ + return 1; + }else{ + assert( j==(-2) ); + return 0; /* Assume an indexed expression can always yield a NULL */ + + } +} + +/* +** Return true if the DISTINCT expression-list passed as the third argument +** is redundant. +** +** A DISTINCT list is redundant if any subset of the columns in the +** DISTINCT list are collectively unique and individually non-null. +*/ +static int isDistinctRedundant( + Parse *pParse, /* Parsing context */ + SrcList *pTabList, /* The FROM clause */ + WhereClause *pWC, /* The WHERE clause */ + ExprList *pDistinct /* The result set that needs to be DISTINCT */ +){ + Table *pTab; + Index *pIdx; + int i; + int iBase; + + /* If there is more than one table or sub-select in the FROM clause of + ** this query, then it will not be possible to show that the DISTINCT + ** clause is redundant. */ + if( pTabList->nSrc!=1 ) return 0; + iBase = pTabList->a[0].iCursor; + pTab = pTabList->a[0].pSTab; + + /* If any of the expressions is an IPK column on table iBase, then return + ** true. Note: The (p->iTable==iBase) part of this test may be false if the + ** current SELECT is a correlated sub-query. + */ + for(i=0; inExpr; i++){ + Expr *p = sqlite3ExprSkipCollateAndLikely(pDistinct->a[i].pExpr); + if( NEVER(p==0) ) continue; + if( p->op!=TK_COLUMN && p->op!=TK_AGG_COLUMN ) continue; + if( p->iTable==iBase && p->iColumn<0 ) return 1; + } + + /* Loop through all indices on the table, checking each to see if it makes + ** the DISTINCT qualifier redundant. It does so if: + ** + ** 1. The index is itself UNIQUE, and + ** + ** 2. All of the columns in the index are either part of the pDistinct + ** list, or else the WHERE clause contains a term of the form "col=X", + ** where X is a constant value. The collation sequences of the + ** comparison and select-list expressions must match those of the index. + ** + ** 3. All of those index columns for which the WHERE clause does not + ** contain a "col=X" term are subject to a NOT NULL constraint. + */ + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + if( !IsUniqueIndex(pIdx) ) continue; + if( pIdx->pPartIdxWhere ) continue; + for(i=0; inKeyCol; i++){ + if( 0==sqlite3WhereFindTerm(pWC, iBase, i, ~(Bitmask)0, WO_EQ, pIdx) ){ + if( findIndexCol(pParse, pDistinct, iBase, pIdx, i)<0 ) break; + if( indexColumnNotNull(pIdx, i)==0 ) break; + } + } + if( i==pIdx->nKeyCol ){ + /* This index implies that the DISTINCT qualifier is redundant. */ + return 1; + } + } + + return 0; +} + + +/* +** Estimate the logarithm of the input value to base 2. +*/ +static LogEst estLog(LogEst N){ + return N<=10 ? 0 : sqlite3LogEst(N) - 33; +} + +/* +** Convert OP_Column opcodes to OP_Copy in previously generated code. +** +** This routine runs over generated VDBE code and translates OP_Column +** opcodes into OP_Copy when the table is being accessed via co-routine +** instead of via table lookup. +** +** If the iAutoidxCur is not zero, then any OP_Rowid instructions on +** cursor iTabCur are transformed into OP_Sequence opcode for the +** iAutoidxCur cursor, in order to generate unique rowids for the +** automatic index being generated. +*/ +static void translateColumnToCopy( + Parse *pParse, /* Parsing context */ + int iStart, /* Translate from this opcode to the end */ + int iTabCur, /* OP_Column/OP_Rowid references to this table */ + int iRegister, /* The first column is in this register */ + int iAutoidxCur /* If non-zero, cursor of autoindex being generated */ +){ + Vdbe *v = pParse->pVdbe; + VdbeOp *pOp = sqlite3VdbeGetOp(v, iStart); + int iEnd = sqlite3VdbeCurrentAddr(v); + if( pParse->db->mallocFailed ) return; +#ifdef SQLITE_DEBUG + if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ + printf("CHECKING for column-to-copy on cursor %d for %d..%d\n", + iTabCur, iStart, iEnd); + } +#endif + for(; iStartp1!=iTabCur ) continue; + if( pOp->opcode==OP_Column ){ +#ifdef SQLITE_DEBUG + if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ + printf("TRANSLATE OP_Column to OP_Copy at %d\n", iStart); + } +#endif + pOp->opcode = OP_Copy; + pOp->p1 = pOp->p2 + iRegister; + pOp->p2 = pOp->p3; + pOp->p3 = 0; + pOp->p5 = 2; /* Cause the MEM_Subtype flag to be cleared */ + }else if( pOp->opcode==OP_Rowid ){ +#ifdef SQLITE_DEBUG + if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ + printf("TRANSLATE OP_Rowid to OP_Sequence at %d\n", iStart); + } +#endif + pOp->opcode = OP_Sequence; + pOp->p1 = iAutoidxCur; +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + if( iAutoidxCur==0 ){ + pOp->opcode = OP_Null; + pOp->p3 = 0; + } +#endif + } + } +} + +/* +** Two routines for printing the content of an sqlite3_index_info +** structure. Used for testing and debugging only. If neither +** SQLITE_TEST or SQLITE_DEBUG are defined, then these routines +** are no-ops. +*/ +#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(WHERETRACE_ENABLED) +static void whereTraceIndexInfoInputs( + sqlite3_index_info *p, /* The IndexInfo object */ + Table *pTab /* The TABLE that is the virtual table */ +){ + int i; + if( (sqlite3WhereTrace & 0x10)==0 ) return; + sqlite3DebugPrintf("sqlite3_index_info inputs for %s:\n", pTab->zName); + for(i=0; inConstraint; i++){ + sqlite3DebugPrintf( + " constraint[%d]: col=%d termid=%d op=%d usabled=%d collseq=%s\n", + i, + p->aConstraint[i].iColumn, + p->aConstraint[i].iTermOffset, + p->aConstraint[i].op, + p->aConstraint[i].usable, + sqlite3_vtab_collation(p,i)); + } + for(i=0; inOrderBy; i++){ + sqlite3DebugPrintf(" orderby[%d]: col=%d desc=%d\n", + i, + p->aOrderBy[i].iColumn, + p->aOrderBy[i].desc); + } +} +static void whereTraceIndexInfoOutputs( + sqlite3_index_info *p, /* The IndexInfo object */ + Table *pTab /* The TABLE that is the virtual table */ +){ + int i; + if( (sqlite3WhereTrace & 0x10)==0 ) return; + sqlite3DebugPrintf("sqlite3_index_info outputs for %s:\n", pTab->zName); + for(i=0; inConstraint; i++){ + sqlite3DebugPrintf(" usage[%d]: argvIdx=%d omit=%d\n", + i, + p->aConstraintUsage[i].argvIndex, + p->aConstraintUsage[i].omit); + } + sqlite3DebugPrintf(" idxNum=%d\n", p->idxNum); + sqlite3DebugPrintf(" idxStr=%s\n", p->idxStr); + sqlite3DebugPrintf(" orderByConsumed=%d\n", p->orderByConsumed); + sqlite3DebugPrintf(" estimatedCost=%g\n", p->estimatedCost); + sqlite3DebugPrintf(" estimatedRows=%lld\n", p->estimatedRows); +} +#else +#define whereTraceIndexInfoInputs(A,B) +#define whereTraceIndexInfoOutputs(A,B) +#endif + +/* +** We know that pSrc is an operand of an outer join. Return true if +** pTerm is a constraint that is compatible with that join. +** +** pTerm must be EP_OuterON if pSrc is the right operand of an +** outer join. pTerm can be either EP_OuterON or EP_InnerON if pSrc +** is the left operand of a RIGHT join. +** +** See https://sqlite.org/forum/forumpost/206d99a16dd9212f +** for an example of a WHERE clause constraints that may not be used on +** the right table of a RIGHT JOIN because the constraint implies a +** not-NULL condition on the left table of the RIGHT JOIN. +*/ +static int constraintCompatibleWithOuterJoin( + const WhereTerm *pTerm, /* WHERE clause term to check */ + const SrcItem *pSrc /* Table we are trying to access */ +){ + assert( (pSrc->fg.jointype&(JT_LEFT|JT_LTORJ|JT_RIGHT))!=0 ); /* By caller */ + testcase( (pSrc->fg.jointype & (JT_LEFT|JT_LTORJ|JT_RIGHT))==JT_LEFT ); + testcase( (pSrc->fg.jointype & (JT_LEFT|JT_LTORJ|JT_RIGHT))==JT_LTORJ ); + testcase( ExprHasProperty(pTerm->pExpr, EP_OuterON) ) + testcase( ExprHasProperty(pTerm->pExpr, EP_InnerON) ); + if( !ExprHasProperty(pTerm->pExpr, EP_OuterON|EP_InnerON) + || pTerm->pExpr->w.iJoin != pSrc->iCursor + ){ + return 0; + } + if( (pSrc->fg.jointype & (JT_LEFT|JT_RIGHT))!=0 + && NEVER(ExprHasProperty(pTerm->pExpr, EP_InnerON)) + ){ + return 0; + } + return 1; +} + +#ifndef SQLITE_OMIT_AUTOMATIC_INDEX +/* +** Return true if column iCol of table pTab seem like it might be a +** good column to use as part of a query-time index. +** +** Current algorithm (subject to improvement!): +** +** 1. If iCol is already the left-most column of some other index, +** then return false. +** +** 2. If iCol is part of an existing index that has an aiRowLogEst of +** more than 20, then return false. +** +** 3. If no disqualifying conditions above are found, return true. +** +** 2025-01-03: I experimented with a new rule that returns false if the +** the datatype of the column is "BOOLEAN". This did not improve +** performance on any queries at hand, but it did burn CPU cycles, so the +** idea was not committed. +*/ +static SQLITE_NOINLINE int columnIsGoodIndexCandidate( + const Table *pTab, + int iCol +){ + const Index *pIdx; + for(pIdx = pTab->pIndex; pIdx!=0; pIdx=pIdx->pNext){ + int j; + for(j=0; jnKeyCol; j++){ + if( pIdx->aiColumn[j]==iCol ){ + if( j==0 ) return 0; + if( pIdx->hasStat1 && pIdx->aiRowLogEst[j+1]>20 ) return 0; + break; + } + } + } + return 1; +} +#endif /* SQLITE_OMIT_AUTOMATIC_INDEX */ + + + +#ifndef SQLITE_OMIT_AUTOMATIC_INDEX +/* +** Return TRUE if the WHERE clause term pTerm is of a form where it +** could be used with an index to access pSrc, assuming an appropriate +** index existed. +*/ +static int termCanDriveIndex( + const WhereTerm *pTerm, /* WHERE clause term to check */ + const SrcItem *pSrc, /* Table we are trying to access */ + const Bitmask notReady /* Tables in outer loops of the join */ +){ + char aff; + int leftCol; + + if( pTerm->leftCursor!=pSrc->iCursor ) return 0; + if( (pTerm->eOperator & (WO_EQ|WO_IS))==0 ) return 0; + assert( (pSrc->fg.jointype & JT_RIGHT)==0 ); + if( (pSrc->fg.jointype & (JT_LEFT|JT_LTORJ|JT_RIGHT))!=0 + && !constraintCompatibleWithOuterJoin(pTerm,pSrc) + ){ + return 0; /* See https://sqlite.org/forum/forumpost/51e6959f61 */ + } + if( (pTerm->prereqRight & notReady)!=0 ) return 0; + assert( (pTerm->eOperator & (WO_OR|WO_AND))==0 ); + leftCol = pTerm->u.x.leftColumn; + if( leftCol<0 ) return 0; + aff = pSrc->pSTab->aCol[leftCol].affinity; + if( !sqlite3IndexAffinityOk(pTerm->pExpr, aff) ) return 0; + testcase( pTerm->pExpr->op==TK_IS ); + return columnIsGoodIndexCandidate(pSrc->pSTab, leftCol); +} +#endif + + +#ifndef SQLITE_OMIT_AUTOMATIC_INDEX + +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS +/* +** Argument pIdx represents an automatic index that the current statement +** will create and populate. Add an OP_Explain with text of the form: +** +** CREATE AUTOMATIC INDEX ON
    () [WHERE ] +** +** This is only required if sqlite3_stmt_scanstatus() is enabled, to +** associate an SQLITE_SCANSTAT_NCYCLE and SQLITE_SCANSTAT_NLOOP +** values with. In order to avoid breaking legacy code and test cases, +** the OP_Explain is not added if this is an EXPLAIN QUERY PLAN command. +*/ +static void explainAutomaticIndex( + Parse *pParse, + Index *pIdx, /* Automatic index to explain */ + int bPartial, /* True if pIdx is a partial index */ + int *pAddrExplain /* OUT: Address of OP_Explain */ +){ + if( IS_STMT_SCANSTATUS(pParse->db) && pParse->explain!=2 ){ + Table *pTab = pIdx->pTable; + const char *zSep = ""; + char *zText = 0; + int ii = 0; + sqlite3_str *pStr = sqlite3_str_new(pParse->db); + sqlite3_str_appendf(pStr,"CREATE AUTOMATIC INDEX ON %s(", pTab->zName); + assert( pIdx->nColumn>1 ); + assert( pIdx->aiColumn[pIdx->nColumn-1]==XN_ROWID || !HasRowid(pTab) ); + for(ii=0; ii<(pIdx->nColumn-1); ii++){ + const char *zName = 0; + int iCol = pIdx->aiColumn[ii]; + + zName = pTab->aCol[iCol].zCnName; + sqlite3_str_appendf(pStr, "%s%s", zSep, zName); + zSep = ", "; + } + zText = sqlite3_str_finish(pStr); + if( zText==0 ){ + sqlite3OomFault(pParse->db); + }else{ + *pAddrExplain = sqlite3VdbeExplain( + pParse, 0, "%s)%s", zText, (bPartial ? " WHERE " : "") + ); + sqlite3_free(zText); + } + } +} +#else +# define explainAutomaticIndex(a,b,c,d) +#endif + +/* +** Generate code to construct the Index object for an automatic index +** and to set up the WhereLevel object pLevel so that the code generator +** makes use of the automatic index. +*/ +static SQLITE_NOINLINE void constructAutomaticIndex( + Parse *pParse, /* The parsing context */ + WhereClause *pWC, /* The WHERE clause */ + const Bitmask notReady, /* Mask of cursors that are not available */ + WhereLevel *pLevel /* Write new index here */ +){ + int nKeyCol; /* Number of columns in the constructed index */ + WhereTerm *pTerm; /* A single term of the WHERE clause */ + WhereTerm *pWCEnd; /* End of pWC->a[] */ + Index *pIdx; /* Object describing the transient index */ + Vdbe *v; /* Prepared statement under construction */ + int addrInit; /* Address of the initialization bypass jump */ + Table *pTable; /* The table being indexed */ + int addrTop; /* Top of the index fill loop */ + int regRecord; /* Register holding an index record */ + int n; /* Column counter */ + int i; /* Loop counter */ + int mxBitCol; /* Maximum column in pSrc->colUsed */ + CollSeq *pColl; /* Collating sequence to on a column */ + WhereLoop *pLoop; /* The Loop object */ + char *zNotUsed; /* Extra space on the end of pIdx */ + Bitmask idxCols; /* Bitmap of columns used for indexing */ + Bitmask extraCols; /* Bitmap of additional columns */ + u8 sentWarning = 0; /* True if a warning has been issued */ + u8 useBloomFilter = 0; /* True to also add a Bloom filter */ + Expr *pPartial = 0; /* Partial Index Expression */ + int iContinue = 0; /* Jump here to skip excluded rows */ + SrcList *pTabList; /* The complete FROM clause */ + SrcItem *pSrc; /* The FROM clause term to get the next index */ + int addrCounter = 0; /* Address where integer counter is initialized */ + int regBase; /* Array of registers where record is assembled */ +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + int addrExp = 0; /* Address of OP_Explain */ +#endif + + /* Generate code to skip over the creation and initialization of the + ** transient index on 2nd and subsequent iterations of the loop. */ + v = pParse->pVdbe; + assert( v!=0 ); + addrInit = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); + + /* Count the number of columns that will be added to the index + ** and used to match WHERE clause constraints */ + nKeyCol = 0; + pTabList = pWC->pWInfo->pTabList; + pSrc = &pTabList->a[pLevel->iFrom]; + pTable = pSrc->pSTab; + pWCEnd = &pWC->a[pWC->nTerm]; + pLoop = pLevel->pWLoop; + idxCols = 0; + for(pTerm=pWC->a; pTermpExpr; + /* Make the automatic index a partial index if there are terms in the + ** WHERE clause (or the ON clause of a LEFT join) that constrain which + ** rows of the target table (pSrc) that can be used. */ + if( (pTerm->wtFlags & TERM_VIRTUAL)==0 + && sqlite3ExprIsSingleTableConstraint(pExpr, pTabList, pLevel->iFrom, 0) + ){ + pPartial = sqlite3ExprAnd(pParse, pPartial, + sqlite3ExprDup(pParse->db, pExpr, 0)); + } + if( termCanDriveIndex(pTerm, pSrc, notReady) ){ + int iCol; + Bitmask cMask; + assert( (pTerm->eOperator & (WO_OR|WO_AND))==0 ); + iCol = pTerm->u.x.leftColumn; + cMask = iCol>=BMS ? MASKBIT(BMS-1) : MASKBIT(iCol); + testcase( iCol==BMS ); + testcase( iCol==BMS-1 ); + if( !sentWarning ){ + sqlite3_log(SQLITE_WARNING_AUTOINDEX, + "automatic index on %s(%s)", pTable->zName, + pTable->aCol[iCol].zCnName); + sentWarning = 1; + } + if( (idxCols & cMask)==0 ){ + if( whereLoopResize(pParse->db, pLoop, nKeyCol+1) ){ + goto end_auto_index_create; + } + pLoop->aLTerm[nKeyCol++] = pTerm; + idxCols |= cMask; + } + } + } + assert( nKeyCol>0 || pParse->db->mallocFailed ); + pLoop->u.btree.nEq = pLoop->nLTerm = nKeyCol; + pLoop->wsFlags = WHERE_COLUMN_EQ | WHERE_IDX_ONLY | WHERE_INDEXED + | WHERE_AUTO_INDEX; + + /* Count the number of additional columns needed to create a + ** covering index. A "covering index" is an index that contains all + ** columns that are needed by the query. With a covering index, the + ** original table never needs to be accessed. Automatic indices must + ** be a covering index because the index will not be updated if the + ** original table changes and the index and table cannot both be used + ** if they go out of sync. + */ + if( IsView(pTable) ){ + extraCols = ALLBITS & ~idxCols; + }else{ + extraCols = pSrc->colUsed & (~idxCols | MASKBIT(BMS-1)); + } + if( !HasRowid(pTable) ){ + /* For WITHOUT ROWID tables, ensure that all PRIMARY KEY columns are + ** either in the idxCols mask or in the extraCols mask */ + for(i=0; inCol; i++){ + if( (pTable->aCol[i].colFlags & COLFLAG_PRIMKEY)==0 ) continue; + if( i>=BMS-1 ){ + extraCols |= MASKBIT(BMS-1); + break; + } + if( idxCols & MASKBIT(i) ) continue; + extraCols |= MASKBIT(i); + } + } + mxBitCol = MIN(BMS-1,pTable->nCol); + testcase( pTable->nCol==BMS-1 ); + testcase( pTable->nCol==BMS-2 ); + for(i=0; icolUsed & MASKBIT(BMS-1) ){ + nKeyCol += pTable->nCol - BMS + 1; + } + + /* Construct the Index object to describe this index */ + assert( nKeyCol <= pTable->nCol + MAX(0, pTable->nCol - BMS + 1) ); + /* ^-- This guarantees that the number of index columns will fit in the u16 */ + pIdx = sqlite3AllocateIndexObject(pParse->db, nKeyCol+HasRowid(pTable), + 0, &zNotUsed); + if( pIdx==0 ) goto end_auto_index_create; + pLoop->u.btree.pIndex = pIdx; + pIdx->zName = "auto-index"; + pIdx->pTable = pTable; + n = 0; + idxCols = 0; + for(pTerm=pWC->a; pTermeOperator & (WO_OR|WO_AND))==0 ); + iCol = pTerm->u.x.leftColumn; + cMask = iCol>=BMS ? MASKBIT(BMS-1) : MASKBIT(iCol); + testcase( iCol==BMS-1 ); + testcase( iCol==BMS ); + if( (idxCols & cMask)==0 ){ + Expr *pX = pTerm->pExpr; + idxCols |= cMask; + pIdx->aiColumn[n] = pTerm->u.x.leftColumn; + pColl = sqlite3ExprCompareCollSeq(pParse, pX); + assert( pColl!=0 || pParse->nErr>0 ); /* TH3 collate01.800 */ + pIdx->azColl[n] = pColl ? pColl->zName : sqlite3StrBINARY; + n++; + if( ALWAYS(pX->pLeft!=0) + && sqlite3ExprAffinity(pX->pLeft)!=SQLITE_AFF_TEXT + ){ + /* TUNING: only use a Bloom filter on an automatic index + ** if one or more key columns has the ability to hold numeric + ** values, since strings all have the same hash in the Bloom + ** filter implementation and hence a Bloom filter on a text column + ** is not usually helpful. */ + useBloomFilter = 1; + } + } + } + } + assert( (u32)n==pLoop->u.btree.nEq ); + + /* Add additional columns needed to make the automatic index into + ** a covering index */ + for(i=0; iaiColumn[n] = i; + pIdx->azColl[n] = sqlite3StrBINARY; + n++; + } + } + if( pSrc->colUsed & MASKBIT(BMS-1) ){ + for(i=BMS-1; inCol; i++){ + pIdx->aiColumn[n] = i; + pIdx->azColl[n] = sqlite3StrBINARY; + n++; + } + } + assert( n==nKeyCol ); + if( HasRowid(pTable) ){ + pIdx->aiColumn[n] = XN_ROWID; + pIdx->azColl[n] = sqlite3StrBINARY; + } + + /* Create the automatic index */ + explainAutomaticIndex(pParse, pIdx, pPartial!=0, &addrExp); + assert( pLevel->iIdxCur>=0 ); + pLevel->iIdxCur = pParse->nTab++; + sqlite3VdbeAddOp2(v, OP_OpenAutoindex, pLevel->iIdxCur, nKeyCol+1); + sqlite3VdbeSetP4KeyInfo(pParse, pIdx); + VdbeComment((v, "for %s", pTable->zName)); + if( OptimizationEnabled(pParse->db, SQLITE_BloomFilter) && useBloomFilter ){ + sqlite3WhereExplainBloomFilter(pParse, pWC->pWInfo, pLevel); + pLevel->regFilter = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Blob, 10000, pLevel->regFilter); + } + + /* Fill the automatic index with content */ + assert( pSrc == &pWC->pWInfo->pTabList->a[pLevel->iFrom] ); + if( pSrc->fg.viaCoroutine ){ + int regYield; + Subquery *pSubq; + assert( pSrc->fg.isSubquery ); + pSubq = pSrc->u4.pSubq; + assert( pSubq!=0 ); + regYield = pSubq->regReturn; + addrCounter = sqlite3VdbeAddOp2(v, OP_Integer, 0, 0); + sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, pSubq->addrFillSub); + addrTop = sqlite3VdbeAddOp1(v, OP_Yield, regYield); + VdbeCoverage(v); + VdbeComment((v, "next row of %s", pSrc->pSTab->zName)); + }else{ + assert( pLevel->addrHalt ); + addrTop = sqlite3VdbeAddOp2(v, OP_Rewind,pLevel->iTabCur,pLevel->addrHalt); + VdbeCoverage(v); + } + if( pPartial ){ + iContinue = sqlite3VdbeMakeLabel(pParse); + sqlite3ExprIfFalse(pParse, pPartial, iContinue, SQLITE_JUMPIFNULL); + pLoop->wsFlags |= WHERE_PARTIALIDX; + } + regRecord = sqlite3GetTempReg(pParse); + regBase = sqlite3GenerateIndexKey( + pParse, pIdx, pLevel->iTabCur, regRecord, 0, 0, 0, 0 + ); + if( pLevel->regFilter ){ + sqlite3VdbeAddOp4Int(v, OP_FilterAdd, pLevel->regFilter, 0, + regBase, pLoop->u.btree.nEq); + } + sqlite3VdbeScanStatusCounters(v, addrExp, addrExp, sqlite3VdbeCurrentAddr(v)); + sqlite3VdbeAddOp2(v, OP_IdxInsert, pLevel->iIdxCur, regRecord); + sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); + if( pPartial ) sqlite3VdbeResolveLabel(v, iContinue); + if( pSrc->fg.viaCoroutine ){ + assert( pSrc->fg.isSubquery && pSrc->u4.pSubq!=0 ); + sqlite3VdbeChangeP2(v, addrCounter, regBase+n); + testcase( pParse->db->mallocFailed ); + assert( pLevel->iIdxCur>0 ); + translateColumnToCopy(pParse, addrTop, pLevel->iTabCur, + pSrc->u4.pSubq->regResult, pLevel->iIdxCur); + sqlite3VdbeGoto(v, addrTop); + pSrc->fg.viaCoroutine = 0; + sqlite3VdbeJumpHere(v, addrTop); + }else{ + sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1); VdbeCoverage(v); + sqlite3VdbeChangeP5(v, SQLITE_STMTSTATUS_AUTOINDEX); + if( (pSrc->fg.jointype & JT_LEFT)!=0 ){ + sqlite3VdbeJumpHere(v, addrTop); + } + } + sqlite3ReleaseTempReg(pParse, regRecord); + + /* Jump here when skipping the initialization */ + sqlite3VdbeJumpHere(v, addrInit); + sqlite3VdbeScanStatusRange(v, addrExp, addrExp, -1); + +end_auto_index_create: + sqlite3ExprDelete(pParse->db, pPartial); +} +#endif /* SQLITE_OMIT_AUTOMATIC_INDEX */ + +/* +** Generate bytecode that will initialize a Bloom filter that is appropriate +** for pLevel. +** +** If there are inner loops within pLevel that have the WHERE_BLOOMFILTER +** flag set, initialize a Bloomfilter for them as well. Except don't do +** this recursive initialization if the SQLITE_BloomPulldown optimization has +** been turned off. +** +** When the Bloom filter is initialized, the WHERE_BLOOMFILTER flag is cleared +** from the loop, but the regFilter value is set to a register that implements +** the Bloom filter. When regFilter is positive, the +** sqlite3WhereCodeOneLoopStart() will generate code to test the Bloom filter +** and skip the subsequence B-Tree seek if the Bloom filter indicates that +** no matching rows exist. +** +** This routine may only be called if it has previously been determined that +** the loop would benefit from a Bloom filter, and the WHERE_BLOOMFILTER bit +** is set. +*/ +static SQLITE_NOINLINE void sqlite3ConstructBloomFilter( + WhereInfo *pWInfo, /* The WHERE clause */ + int iLevel, /* Index in pWInfo->a[] that is pLevel */ + WhereLevel *pLevel, /* Make a Bloom filter for this FROM term */ + Bitmask notReady /* Loops that are not ready */ +){ + int addrOnce; /* Address of opening OP_Once */ + int addrTop; /* Address of OP_Rewind */ + int addrCont; /* Jump here to skip a row */ + const WhereTerm *pTerm; /* For looping over WHERE clause terms */ + const WhereTerm *pWCEnd; /* Last WHERE clause term */ + Parse *pParse = pWInfo->pParse; /* Parsing context */ + Vdbe *v = pParse->pVdbe; /* VDBE under construction */ + WhereLoop *pLoop = pLevel->pWLoop; /* The loop being coded */ + int iCur; /* Cursor for table getting the filter */ + IndexedExpr *saved_pIdxEpr; /* saved copy of Parse.pIdxEpr */ + IndexedExpr *saved_pIdxPartExpr; /* saved copy of Parse.pIdxPartExpr */ + + saved_pIdxEpr = pParse->pIdxEpr; + saved_pIdxPartExpr = pParse->pIdxPartExpr; + pParse->pIdxEpr = 0; + pParse->pIdxPartExpr = 0; + + assert( pLoop!=0 ); + assert( v!=0 ); + assert( pLoop->wsFlags & WHERE_BLOOMFILTER ); + assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0 ); + + addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); + do{ + const SrcList *pTabList; + const SrcItem *pItem; + const Table *pTab; + u64 sz; + int iSrc; + sqlite3WhereExplainBloomFilter(pParse, pWInfo, pLevel); + addrCont = sqlite3VdbeMakeLabel(pParse); + iCur = pLevel->iTabCur; + pLevel->regFilter = ++pParse->nMem; + + /* The Bloom filter is a Blob held in a register. Initialize it + ** to zero-filled blob of at least 80K bits, but maybe more if the + ** estimated size of the table is larger. We could actually + ** measure the size of the table at run-time using OP_Count with + ** P3==1 and use that value to initialize the blob. But that makes + ** testing complicated. By basing the blob size on the value in the + ** sqlite_stat1 table, testing is much easier. + */ + pTabList = pWInfo->pTabList; + iSrc = pLevel->iFrom; + pItem = &pTabList->a[iSrc]; + assert( pItem!=0 ); + pTab = pItem->pSTab; + assert( pTab!=0 ); + sz = sqlite3LogEstToInt(pTab->nRowLogEst); + if( sz<10000 ){ + sz = 10000; + }else if( sz>10000000 ){ + sz = 10000000; + } + sqlite3VdbeAddOp2(v, OP_Blob, (int)sz, pLevel->regFilter); + + addrTop = sqlite3VdbeAddOp1(v, OP_Rewind, iCur); VdbeCoverage(v); + pWCEnd = &pWInfo->sWC.a[pWInfo->sWC.nTerm]; + for(pTerm=pWInfo->sWC.a; pTermpExpr; + if( (pTerm->wtFlags & TERM_VIRTUAL)==0 + && sqlite3ExprIsSingleTableConstraint(pExpr, pTabList, iSrc, 0) + ){ + sqlite3ExprIfFalse(pParse, pTerm->pExpr, addrCont, SQLITE_JUMPIFNULL); + } + } + if( pLoop->wsFlags & WHERE_IPK ){ + int r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp2(v, OP_Rowid, iCur, r1); + sqlite3VdbeAddOp4Int(v, OP_FilterAdd, pLevel->regFilter, 0, r1, 1); + sqlite3ReleaseTempReg(pParse, r1); + }else{ + Index *pIdx = pLoop->u.btree.pIndex; + int n = pLoop->u.btree.nEq; + int r1 = sqlite3GetTempRange(pParse, n); + int jj; + for(jj=0; jjpTable==pItem->pSTab ); + sqlite3ExprCodeLoadIndexColumn(pParse, pIdx, iCur, jj, r1+jj); + } + sqlite3VdbeAddOp4Int(v, OP_FilterAdd, pLevel->regFilter, 0, r1, n); + sqlite3ReleaseTempRange(pParse, r1, n); + } + sqlite3VdbeResolveLabel(v, addrCont); + sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1); + VdbeCoverage(v); + sqlite3VdbeJumpHere(v, addrTop); + pLoop->wsFlags &= ~WHERE_BLOOMFILTER; + if( OptimizationDisabled(pParse->db, SQLITE_BloomPulldown) ) break; + while( ++iLevel < pWInfo->nLevel ){ + const SrcItem *pTabItem; + pLevel = &pWInfo->a[iLevel]; + pTabItem = &pWInfo->pTabList->a[pLevel->iFrom]; + if( pTabItem->fg.jointype & (JT_LEFT|JT_LTORJ) ) continue; + pLoop = pLevel->pWLoop; + if( NEVER(pLoop==0) ) continue; + if( pLoop->prereq & notReady ) continue; + if( (pLoop->wsFlags & (WHERE_BLOOMFILTER|WHERE_COLUMN_IN)) + ==WHERE_BLOOMFILTER + ){ + /* This is a candidate for bloom-filter pull-down (early evaluation). + ** The test that WHERE_COLUMN_IN is omitted is important, as we are + ** not able to do early evaluation of bloom filters that make use of + ** the IN operator */ + break; + } + } + }while( iLevel < pWInfo->nLevel ); + sqlite3VdbeJumpHere(v, addrOnce); + pParse->pIdxEpr = saved_pIdxEpr; + pParse->pIdxPartExpr = saved_pIdxPartExpr; +} + + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* +** Return term iTerm of the WhereClause passed as the first argument. Terms +** are numbered from 0 upwards, starting with the terms in pWC->a[], then +** those in pWC->pOuter->a[] (if any), and so on. +*/ +static WhereTerm *termFromWhereClause(WhereClause *pWC, int iTerm){ + WhereClause *p; + for(p=pWC; p; p=p->pOuter){ + if( iTermnTerm ) return &p->a[iTerm]; + iTerm -= p->nTerm; + } + return 0; +} + +/* +** Allocate and populate an sqlite3_index_info structure. It is the +** responsibility of the caller to eventually release the structure +** by passing the pointer returned by this function to freeIndexInfo(). +*/ +static sqlite3_index_info *allocateIndexInfo( + WhereInfo *pWInfo, /* The WHERE clause */ + WhereClause *pWC, /* The WHERE clause being analyzed */ + Bitmask mUnusable, /* Ignore terms with these prereqs */ + SrcItem *pSrc, /* The FROM clause term that is the vtab */ + u16 *pmNoOmit /* Mask of terms not to omit */ +){ + int i, j; + int nTerm; + Parse *pParse = pWInfo->pParse; + struct sqlite3_index_constraint *pIdxCons; + struct sqlite3_index_orderby *pIdxOrderBy; + struct sqlite3_index_constraint_usage *pUsage; + struct HiddenIndexInfo *pHidden; + WhereTerm *pTerm; + int nOrderBy; + sqlite3_index_info *pIdxInfo; + u16 mNoOmit = 0; + const Table *pTab; + int eDistinct = 0; + ExprList *pOrderBy = pWInfo->pOrderBy; + WhereClause *p; + + assert( pSrc!=0 ); + pTab = pSrc->pSTab; + assert( pTab!=0 ); + assert( IsVirtual(pTab) ); + + /* Find all WHERE clause constraints referring to this virtual table. + ** Mark each term with the TERM_OK flag. Set nTerm to the number of + ** terms found. + */ + for(p=pWC, nTerm=0; p; p=p->pOuter){ + for(i=0, pTerm=p->a; inTerm; i++, pTerm++){ + pTerm->wtFlags &= ~TERM_OK; + if( pTerm->leftCursor != pSrc->iCursor ) continue; + if( pTerm->prereqRight & mUnusable ) continue; + assert( IsPowerOfTwo(pTerm->eOperator & ~WO_EQUIV) ); + testcase( pTerm->eOperator & WO_IN ); + testcase( pTerm->eOperator & WO_ISNULL ); + testcase( pTerm->eOperator & WO_IS ); + testcase( pTerm->eOperator & WO_ALL ); + if( (pTerm->eOperator & ~(WO_EQUIV))==0 ) continue; + if( pTerm->wtFlags & TERM_VNULL ) continue; + + assert( (pTerm->eOperator & (WO_OR|WO_AND))==0 ); + assert( pTerm->u.x.leftColumn>=XN_ROWID ); + assert( pTerm->u.x.leftColumnnCol ); + if( (pSrc->fg.jointype & (JT_LEFT|JT_LTORJ|JT_RIGHT))!=0 + && !constraintCompatibleWithOuterJoin(pTerm,pSrc) + ){ + continue; + } + nTerm++; + pTerm->wtFlags |= TERM_OK; + } + } + + /* If the ORDER BY clause contains only columns in the current + ** virtual table then allocate space for the aOrderBy part of + ** the sqlite3_index_info structure. + */ + nOrderBy = 0; + if( pOrderBy ){ + int n = pOrderBy->nExpr; + for(i=0; ia[i].pExpr; + Expr *pE2; + + /* Skip over constant terms in the ORDER BY clause */ + if( sqlite3ExprIsConstant(0, pExpr) ){ + continue; + } + + /* Virtual tables are unable to deal with NULLS FIRST */ + if( pOrderBy->a[i].fg.sortFlags & KEYINFO_ORDER_BIGNULL ) break; + + /* First case - a direct column references without a COLLATE operator */ + if( pExpr->op==TK_COLUMN && pExpr->iTable==pSrc->iCursor ){ + assert( pExpr->iColumn>=XN_ROWID && pExpr->iColumnnCol ); + continue; + } + + /* 2nd case - a column reference with a COLLATE operator. Only match + ** of the COLLATE operator matches the collation of the column. */ + if( pExpr->op==TK_COLLATE + && (pE2 = pExpr->pLeft)->op==TK_COLUMN + && pE2->iTable==pSrc->iCursor + ){ + const char *zColl; /* The collating sequence name */ + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + assert( pExpr->u.zToken!=0 ); + assert( pE2->iColumn>=XN_ROWID && pE2->iColumnnCol ); + pExpr->iColumn = pE2->iColumn; + if( pE2->iColumn<0 ) continue; /* Collseq does not matter for rowid */ + zColl = sqlite3ColumnColl(&pTab->aCol[pE2->iColumn]); + if( zColl==0 ) zColl = sqlite3StrBINARY; + if( sqlite3_stricmp(pExpr->u.zToken, zColl)==0 ) continue; + } + + /* No matches cause a break out of the loop */ + break; + } + if( i==n ){ + nOrderBy = n; + if( (pWInfo->wctrlFlags & WHERE_DISTINCTBY) && !pSrc->fg.rowidUsed ){ + eDistinct = 2 + ((pWInfo->wctrlFlags & WHERE_SORTBYGROUP)!=0); + }else if( pWInfo->wctrlFlags & WHERE_GROUPBY ){ + eDistinct = 1; + } + } + } + + /* Allocate the sqlite3_index_info structure + */ + pIdxInfo = sqlite3DbMallocZero(pParse->db, sizeof(*pIdxInfo) + + (sizeof(*pIdxCons) + sizeof(*pUsage))*nTerm + + sizeof(*pIdxOrderBy)*nOrderBy + + SZ_HIDDENINDEXINFO(nTerm) ); + if( pIdxInfo==0 ){ + sqlite3ErrorMsg(pParse, "out of memory"); + return 0; + } + pHidden = (struct HiddenIndexInfo*)&pIdxInfo[1]; + pIdxCons = (struct sqlite3_index_constraint*)&pHidden->aRhs[nTerm]; + pIdxOrderBy = (struct sqlite3_index_orderby*)&pIdxCons[nTerm]; + pUsage = (struct sqlite3_index_constraint_usage*)&pIdxOrderBy[nOrderBy]; + pIdxInfo->aConstraint = pIdxCons; + pIdxInfo->aOrderBy = pIdxOrderBy; + pIdxInfo->aConstraintUsage = pUsage; + pIdxInfo->colUsed = (sqlite3_int64)pSrc->colUsed; + if( HasRowid(pTab)==0 ){ + /* Ensure that all bits associated with PK columns are set. This is to + ** ensure they are available for cases like RIGHT joins or OR loops. */ + Index *pPk = sqlite3PrimaryKeyIndex((Table*)pTab); + assert( pPk!=0 ); + for(i=0; inKeyCol; i++){ + int iCol = pPk->aiColumn[i]; + assert( iCol>=0 ); + if( iCol>=BMS-1 ) iCol = BMS-1; + pIdxInfo->colUsed |= MASKBIT(iCol); + } + } + pHidden->pWC = pWC; + pHidden->pParse = pParse; + pHidden->eDistinct = eDistinct; + pHidden->mIn = 0; + for(p=pWC, i=j=0; p; p=p->pOuter){ + int nLast = i+p->nTerm;; + for(pTerm=p->a; iwtFlags & TERM_OK)==0 ) continue; + pIdxCons[j].iColumn = pTerm->u.x.leftColumn; + pIdxCons[j].iTermOffset = i; + op = pTerm->eOperator & WO_ALL; + if( op==WO_IN ){ + if( (pTerm->wtFlags & TERM_SLICE)==0 ){ + pHidden->mIn |= SMASKBIT32(j); + } + op = WO_EQ; + } + if( op==WO_AUX ){ + pIdxCons[j].op = pTerm->eMatchOp; + }else if( op & (WO_ISNULL|WO_IS) ){ + if( op==WO_ISNULL ){ + pIdxCons[j].op = SQLITE_INDEX_CONSTRAINT_ISNULL; + }else{ + pIdxCons[j].op = SQLITE_INDEX_CONSTRAINT_IS; + } + }else{ + pIdxCons[j].op = (u8)op; + /* The direct assignment in the previous line is possible only because + ** the WO_ and SQLITE_INDEX_CONSTRAINT_ codes are identical. The + ** following asserts verify this fact. */ + assert( WO_EQ==SQLITE_INDEX_CONSTRAINT_EQ ); + assert( WO_LT==SQLITE_INDEX_CONSTRAINT_LT ); + assert( WO_LE==SQLITE_INDEX_CONSTRAINT_LE ); + assert( WO_GT==SQLITE_INDEX_CONSTRAINT_GT ); + assert( WO_GE==SQLITE_INDEX_CONSTRAINT_GE ); + assert( pTerm->eOperator&(WO_IN|WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE|WO_AUX) ); + + if( op & (WO_LT|WO_LE|WO_GT|WO_GE) + && sqlite3ExprIsVector(pTerm->pExpr->pRight) + ){ + testcase( j!=i ); + if( j<16 ) mNoOmit |= (1 << j); + if( op==WO_LT ) pIdxCons[j].op = WO_LE; + if( op==WO_GT ) pIdxCons[j].op = WO_GE; + } + } + + j++; + } + } + assert( j==nTerm ); + pIdxInfo->nConstraint = j; + for(i=j=0; ia[i].pExpr; + if( sqlite3ExprIsConstant(0, pExpr) ) continue; + assert( pExpr->op==TK_COLUMN + || (pExpr->op==TK_COLLATE && pExpr->pLeft->op==TK_COLUMN + && pExpr->iColumn==pExpr->pLeft->iColumn) ); + pIdxOrderBy[j].iColumn = pExpr->iColumn; + pIdxOrderBy[j].desc = pOrderBy->a[i].fg.sortFlags & KEYINFO_ORDER_DESC; + j++; + } + pIdxInfo->nOrderBy = j; + + *pmNoOmit = mNoOmit; + return pIdxInfo; +} + +/* +** Free and zero the sqlite3_index_info.idxStr value if needed. +*/ +static void freeIdxStr(sqlite3_index_info *pIdxInfo){ + if( pIdxInfo->needToFreeIdxStr ){ + sqlite3_free(pIdxInfo->idxStr); + pIdxInfo->idxStr = 0; + pIdxInfo->needToFreeIdxStr = 0; + } +} + +/* +** Free an sqlite3_index_info structure allocated by allocateIndexInfo() +** and possibly modified by xBestIndex methods. +*/ +static void freeIndexInfo(sqlite3 *db, sqlite3_index_info *pIdxInfo){ + HiddenIndexInfo *pHidden; + int i; + assert( pIdxInfo!=0 ); + pHidden = (HiddenIndexInfo*)&pIdxInfo[1]; + assert( pHidden->pParse!=0 ); + assert( pHidden->pParse->db==db ); + for(i=0; inConstraint; i++){ + sqlite3ValueFree(pHidden->aRhs[i]); /* IMP: R-14553-25174 */ + pHidden->aRhs[i] = 0; + } + freeIdxStr(pIdxInfo); + sqlite3DbFree(db, pIdxInfo); +} + +/* +** The table object reference passed as the second argument to this function +** must represent a virtual table. This function invokes the xBestIndex() +** method of the virtual table with the sqlite3_index_info object that +** comes in as the 3rd argument to this function. +** +** If an error occurs, pParse is populated with an error message and an +** appropriate error code is returned. A return of SQLITE_CONSTRAINT from +** xBestIndex is not considered an error. SQLITE_CONSTRAINT indicates that +** the current configuration of "unusable" flags in sqlite3_index_info can +** not result in a valid plan. +** +** Whether or not an error is returned, it is the responsibility of the +** caller to eventually free p->idxStr if p->needToFreeIdxStr indicates +** that this is required. +*/ +static int vtabBestIndex(Parse *pParse, Table *pTab, sqlite3_index_info *p){ + int rc; + sqlite3_vtab *pVtab; + + assert( IsVirtual(pTab) ); + pVtab = sqlite3GetVTable(pParse->db, pTab)->pVtab; + whereTraceIndexInfoInputs(p, pTab); + pParse->db->nSchemaLock++; + rc = pVtab->pModule->xBestIndex(pVtab, p); + pParse->db->nSchemaLock--; + whereTraceIndexInfoOutputs(p, pTab); + + if( rc!=SQLITE_OK && rc!=SQLITE_CONSTRAINT ){ + if( rc==SQLITE_NOMEM ){ + sqlite3OomFault(pParse->db); + }else if( !pVtab->zErrMsg ){ + sqlite3ErrorMsg(pParse, "%s", sqlite3ErrStr(rc)); + }else{ + sqlite3ErrorMsg(pParse, "%s", pVtab->zErrMsg); + } + } + if( pTab->u.vtab.p->bAllSchemas ){ + sqlite3VtabUsesAllSchemas(pParse); + } + sqlite3_free(pVtab->zErrMsg); + pVtab->zErrMsg = 0; + return rc; +} +#endif /* !defined(SQLITE_OMIT_VIRTUALTABLE) */ + +#ifdef SQLITE_ENABLE_STAT4 +/* +** Estimate the location of a particular key among all keys in an +** index. Store the results in aStat as follows: +** +** aStat[0] Est. number of rows less than pRec +** aStat[1] Est. number of rows equal to pRec +** +** Return the index of the sample that is the smallest sample that +** is greater than or equal to pRec. Note that this index is not an index +** into the aSample[] array - it is an index into a virtual set of samples +** based on the contents of aSample[] and the number of fields in record +** pRec. +*/ +static int whereKeyStats( + Parse *pParse, /* Database connection */ + Index *pIdx, /* Index to consider domain of */ + UnpackedRecord *pRec, /* Vector of values to consider */ + int roundUp, /* Round up if true. Round down if false */ + tRowcnt *aStat /* OUT: stats written here */ +){ + IndexSample *aSample = pIdx->aSample; + int iCol; /* Index of required stats in anEq[] etc. */ + int i; /* Index of first sample >= pRec */ + int iSample; /* Smallest sample larger than or equal to pRec */ + int iMin = 0; /* Smallest sample not yet tested */ + int iTest; /* Next sample to test */ + int res; /* Result of comparison operation */ + int nField; /* Number of fields in pRec */ + tRowcnt iLower = 0; /* anLt[] + anEq[] of largest sample pRec is > */ + +#ifndef SQLITE_DEBUG + UNUSED_PARAMETER( pParse ); +#endif + assert( pRec!=0 ); + assert( pIdx->nSample>0 ); + assert( pRec->nField>0 ); + + + /* Do a binary search to find the first sample greater than or equal + ** to pRec. If pRec contains a single field, the set of samples to search + ** is simply the aSample[] array. If the samples in aSample[] contain more + ** than one fields, all fields following the first are ignored. + ** + ** If pRec contains N fields, where N is more than one, then as well as the + ** samples in aSample[] (truncated to N fields), the search also has to + ** consider prefixes of those samples. For example, if the set of samples + ** in aSample is: + ** + ** aSample[0] = (a, 5) + ** aSample[1] = (a, 10) + ** aSample[2] = (b, 5) + ** aSample[3] = (c, 100) + ** aSample[4] = (c, 105) + ** + ** Then the search space should ideally be the samples above and the + ** unique prefixes [a], [b] and [c]. But since that is hard to organize, + ** the code actually searches this set: + ** + ** 0: (a) + ** 1: (a, 5) + ** 2: (a, 10) + ** 3: (a, 10) + ** 4: (b) + ** 5: (b, 5) + ** 6: (c) + ** 7: (c, 100) + ** 8: (c, 105) + ** 9: (c, 105) + ** + ** For each sample in the aSample[] array, N samples are present in the + ** effective sample array. In the above, samples 0 and 1 are based on + ** sample aSample[0]. Samples 2 and 3 on aSample[1] etc. + ** + ** Often, sample i of each block of N effective samples has (i+1) fields. + ** Except, each sample may be extended to ensure that it is greater than or + ** equal to the previous sample in the array. For example, in the above, + ** sample 2 is the first sample of a block of N samples, so at first it + ** appears that it should be 1 field in size. However, that would make it + ** smaller than sample 1, so the binary search would not work. As a result, + ** it is extended to two fields. The duplicates that this creates do not + ** cause any problems. + */ + if( !HasRowid(pIdx->pTable) && IsPrimaryKeyIndex(pIdx) ){ + nField = pIdx->nKeyCol; + }else{ + nField = pIdx->nColumn; + } + nField = MIN(pRec->nField, nField); + iCol = 0; + iSample = pIdx->nSample * nField; + do{ + int iSamp; /* Index in aSample[] of test sample */ + int n; /* Number of fields in test sample */ + + iTest = (iMin+iSample)/2; + iSamp = iTest / nField; + if( iSamp>0 ){ + /* The proposed effective sample is a prefix of sample aSample[iSamp]. + ** Specifically, the shortest prefix of at least (1 + iTest%nField) + ** fields that is greater than the previous effective sample. */ + for(n=(iTest % nField) + 1; nnField = n; + res = sqlite3VdbeRecordCompare(aSample[iSamp].n, aSample[iSamp].p, pRec); + if( res<0 ){ + iLower = aSample[iSamp].anLt[n-1] + aSample[iSamp].anEq[n-1]; + iMin = iTest+1; + }else if( res==0 && ndb->mallocFailed==0 ){ + if( res==0 ){ + /* If (res==0) is true, then pRec must be equal to sample i. */ + assert( inSample ); + assert( iCol==nField-1 ); + pRec->nField = nField; + assert( 0==sqlite3VdbeRecordCompare(aSample[i].n, aSample[i].p, pRec) + || pParse->db->mallocFailed + ); + }else{ + /* Unless i==pIdx->nSample, indicating that pRec is larger than + ** all samples in the aSample[] array, pRec must be smaller than the + ** (iCol+1) field prefix of sample i. */ + assert( i<=pIdx->nSample && i>=0 ); + pRec->nField = iCol+1; + assert( i==pIdx->nSample + || sqlite3VdbeRecordCompare(aSample[i].n, aSample[i].p, pRec)>0 + || pParse->db->mallocFailed ); + + /* if i==0 and iCol==0, then record pRec is smaller than all samples + ** in the aSample[] array. Otherwise, if (iCol>0) then pRec must + ** be greater than or equal to the (iCol) field prefix of sample i. + ** If (i>0), then pRec must also be greater than sample (i-1). */ + if( iCol>0 ){ + pRec->nField = iCol; + assert( sqlite3VdbeRecordCompare(aSample[i].n, aSample[i].p, pRec)<=0 + || pParse->db->mallocFailed || CORRUPT_DB ); + } + if( i>0 ){ + pRec->nField = nField; + assert( sqlite3VdbeRecordCompare(aSample[i-1].n, aSample[i-1].p, pRec)<0 + || pParse->db->mallocFailed || CORRUPT_DB ); + } + } + } +#endif /* ifdef SQLITE_DEBUG */ + + if( res==0 ){ + /* Record pRec is equal to sample i */ + assert( iCol==nField-1 ); + aStat[0] = aSample[i].anLt[iCol]; + aStat[1] = aSample[i].anEq[iCol]; + }else{ + /* At this point, the (iCol+1) field prefix of aSample[i] is the first + ** sample that is greater than pRec. Or, if i==pIdx->nSample then pRec + ** is larger than all samples in the array. */ + tRowcnt iUpper, iGap; + if( i>=pIdx->nSample ){ + iUpper = pIdx->nRowEst0; + }else{ + iUpper = aSample[i].anLt[iCol]; + } + + if( iLower>=iUpper ){ + iGap = 0; + }else{ + iGap = iUpper - iLower; + } + if( roundUp ){ + iGap = (iGap*2)/3; + }else{ + iGap = iGap/3; + } + aStat[0] = iLower + iGap; + aStat[1] = pIdx->aAvgEq[nField-1]; + } + + /* Restore the pRec->nField value before returning. */ + pRec->nField = nField; + return i; +} +#endif /* SQLITE_ENABLE_STAT4 */ + +/* +** If it is not NULL, pTerm is a term that provides an upper or lower +** bound on a range scan. Without considering pTerm, it is estimated +** that the scan will visit nNew rows. This function returns the number +** estimated to be visited after taking pTerm into account. +** +** If the user explicitly specified a likelihood() value for this term, +** then the return value is the likelihood multiplied by the number of +** input rows. Otherwise, this function assumes that an "IS NOT NULL" term +** has a likelihood of 0.50, and any other term a likelihood of 0.25. +*/ +static LogEst whereRangeAdjust(WhereTerm *pTerm, LogEst nNew){ + LogEst nRet = nNew; + if( pTerm ){ + if( pTerm->truthProb<=0 ){ + nRet += pTerm->truthProb; + }else if( (pTerm->wtFlags & TERM_VNULL)==0 ){ + nRet -= 20; assert( 20==sqlite3LogEst(4) ); + } + } + return nRet; +} + + +#ifdef SQLITE_ENABLE_STAT4 +/* +** Return the affinity for a single column of an index. +*/ +SQLITE_PRIVATE char sqlite3IndexColumnAffinity(sqlite3 *db, Index *pIdx, int iCol){ + assert( iCol>=0 && iColnColumn ); + if( !pIdx->zColAff ){ + if( sqlite3IndexAffinityStr(db, pIdx)==0 ) return SQLITE_AFF_BLOB; + } + assert( pIdx->zColAff[iCol]!=0 ); + return pIdx->zColAff[iCol]; +} +#endif + + +#ifdef SQLITE_ENABLE_STAT4 +/* +** This function is called to estimate the number of rows visited by a +** range-scan on a skip-scan index. For example: +** +** CREATE INDEX i1 ON t1(a, b, c); +** SELECT * FROM t1 WHERE a=? AND c BETWEEN ? AND ?; +** +** Value pLoop->nOut is currently set to the estimated number of rows +** visited for scanning (a=? AND b=?). This function reduces that estimate +** by some factor to account for the (c BETWEEN ? AND ?) expression based +** on the stat4 data for the index. this scan will be performed multiple +** times (once for each (a,b) combination that matches a=?) is dealt with +** by the caller. +** +** It does this by scanning through all stat4 samples, comparing values +** extracted from pLower and pUpper with the corresponding column in each +** sample. If L and U are the number of samples found to be less than or +** equal to the values extracted from pLower and pUpper respectively, and +** N is the total number of samples, the pLoop->nOut value is adjusted +** as follows: +** +** nOut = nOut * ( min(U - L, 1) / N ) +** +** If pLower is NULL, or a value cannot be extracted from the term, L is +** set to zero. If pUpper is NULL, or a value cannot be extracted from it, +** U is set to N. +** +** Normally, this function sets *pbDone to 1 before returning. However, +** if no value can be extracted from either pLower or pUpper (and so the +** estimate of the number of rows delivered remains unchanged), *pbDone +** is left as is. +** +** If an error occurs, an SQLite error code is returned. Otherwise, +** SQLITE_OK. +*/ +static int whereRangeSkipScanEst( + Parse *pParse, /* Parsing & code generating context */ + WhereTerm *pLower, /* Lower bound on the range. ex: "x>123" Might be NULL */ + WhereTerm *pUpper, /* Upper bound on the range. ex: "x<455" Might be NULL */ + WhereLoop *pLoop, /* Update the .nOut value of this loop */ + int *pbDone /* Set to true if at least one expr. value extracted */ +){ + Index *p = pLoop->u.btree.pIndex; + int nEq = pLoop->u.btree.nEq; + sqlite3 *db = pParse->db; + int nLower = -1; + int nUpper = p->nSample+1; + int rc = SQLITE_OK; + u8 aff = sqlite3IndexColumnAffinity(db, p, nEq); + CollSeq *pColl; + + sqlite3_value *p1 = 0; /* Value extracted from pLower */ + sqlite3_value *p2 = 0; /* Value extracted from pUpper */ + sqlite3_value *pVal = 0; /* Value extracted from record */ + + pColl = sqlite3LocateCollSeq(pParse, p->azColl[nEq]); + if( pLower ){ + rc = sqlite3Stat4ValueFromExpr(pParse, pLower->pExpr->pRight, aff, &p1); + nLower = 0; + } + if( pUpper && rc==SQLITE_OK ){ + rc = sqlite3Stat4ValueFromExpr(pParse, pUpper->pExpr->pRight, aff, &p2); + nUpper = p2 ? 0 : p->nSample; + } + + if( p1 || p2 ){ + int i; + int nDiff; + for(i=0; rc==SQLITE_OK && inSample; i++){ + rc = sqlite3Stat4Column(db, p->aSample[i].p, p->aSample[i].n, nEq, &pVal); + if( rc==SQLITE_OK && p1 ){ + int res = sqlite3MemCompare(p1, pVal, pColl); + if( res>=0 ) nLower++; + } + if( rc==SQLITE_OK && p2 ){ + int res = sqlite3MemCompare(p2, pVal, pColl); + if( res>=0 ) nUpper++; + } + } + nDiff = (nUpper - nLower); + if( nDiff<=0 ) nDiff = 1; + + /* If there is both an upper and lower bound specified, and the + ** comparisons indicate that they are close together, use the fallback + ** method (assume that the scan visits 1/64 of the rows) for estimating + ** the number of rows visited. Otherwise, estimate the number of rows + ** using the method described in the header comment for this function. */ + if( nDiff!=1 || pUpper==0 || pLower==0 ){ + int nAdjust = (sqlite3LogEst(p->nSample) - sqlite3LogEst(nDiff)); + pLoop->nOut -= nAdjust; + *pbDone = 1; + WHERETRACE(0x20, ("range skip-scan regions: %u..%u adjust=%d est=%d\n", + nLower, nUpper, nAdjust*-1, pLoop->nOut)); + } + + }else{ + assert( *pbDone==0 ); + } + + sqlite3ValueFree(p1); + sqlite3ValueFree(p2); + sqlite3ValueFree(pVal); + + return rc; +} +#endif /* SQLITE_ENABLE_STAT4 */ + +/* +** This function is used to estimate the number of rows that will be visited +** by scanning an index for a range of values. The range may have an upper +** bound, a lower bound, or both. The WHERE clause terms that set the upper +** and lower bounds are represented by pLower and pUpper respectively. For +** example, assuming that index p is on t1(a): +** +** ... FROM t1 WHERE a > ? AND a < ? ... +** |_____| |_____| +** | | +** pLower pUpper +** +** If either of the upper or lower bound is not present, then NULL is passed in +** place of the corresponding WhereTerm. +** +** The value in (pBuilder->pNew->u.btree.nEq) is the number of the index +** column subject to the range constraint. Or, equivalently, the number of +** equality constraints optimized by the proposed index scan. For example, +** assuming index p is on t1(a, b), and the SQL query is: +** +** ... FROM t1 WHERE a = ? AND b > ? AND b < ? ... +** +** then nEq is set to 1 (as the range restricted column, b, is the second +** left-most column of the index). Or, if the query is: +** +** ... FROM t1 WHERE a > ? AND a < ? ... +** +** then nEq is set to 0. +** +** When this function is called, *pnOut is set to the sqlite3LogEst() of the +** number of rows that the index scan is expected to visit without +** considering the range constraints. If nEq is 0, then *pnOut is the number of +** rows in the index. Assuming no error occurs, *pnOut is adjusted (reduced) +** to account for the range constraints pLower and pUpper. +** +** In the absence of sqlite_stat4 ANALYZE data, or if such data cannot be +** used, a single range inequality reduces the search space by a factor of 4. +** and a pair of constraints (x>? AND x123" Might be NULL */ + WhereTerm *pUpper, /* Upper bound on the range. ex: "x<455" Might be NULL */ + WhereLoop *pLoop /* Modify the .nOut and maybe .rRun fields */ +){ + int rc = SQLITE_OK; + int nOut = pLoop->nOut; + LogEst nNew; + +#ifdef SQLITE_ENABLE_STAT4 + Index *p = pLoop->u.btree.pIndex; + int nEq = pLoop->u.btree.nEq; + + if( p->nSample>0 && ALWAYS(nEqnSampleCol) + && OptimizationEnabled(pParse->db, SQLITE_Stat4) + ){ + if( nEq==pBuilder->nRecValid ){ + UnpackedRecord *pRec = pBuilder->pRec; + tRowcnt a[2]; + int nBtm = pLoop->u.btree.nBtm; + int nTop = pLoop->u.btree.nTop; + + /* Variable iLower will be set to the estimate of the number of rows in + ** the index that are less than the lower bound of the range query. The + ** lower bound being the concatenation of $P and $L, where $P is the + ** key-prefix formed by the nEq values matched against the nEq left-most + ** columns of the index, and $L is the value in pLower. + ** + ** Or, if pLower is NULL or $L cannot be extracted from it (because it + ** is not a simple variable or literal value), the lower bound of the + ** range is $P. Due to a quirk in the way whereKeyStats() works, even + ** if $L is available, whereKeyStats() is called for both ($P) and + ** ($P:$L) and the larger of the two returned values is used. + ** + ** Similarly, iUpper is to be set to the estimate of the number of rows + ** less than the upper bound of the range query. Where the upper bound + ** is either ($P) or ($P:$U). Again, even if $U is available, both values + ** of iUpper are requested of whereKeyStats() and the smaller used. + ** + ** The number of rows between the two bounds is then just iUpper-iLower. + */ + tRowcnt iLower; /* Rows less than the lower bound */ + tRowcnt iUpper; /* Rows less than the upper bound */ + int iLwrIdx = -2; /* aSample[] for the lower bound */ + int iUprIdx = -1; /* aSample[] for the upper bound */ + + if( pRec ){ + testcase( pRec->nField!=pBuilder->nRecValid ); + pRec->nField = pBuilder->nRecValid; + } + /* Determine iLower and iUpper using ($P) only. */ + if( nEq==0 ){ + iLower = 0; + iUpper = p->nRowEst0; + }else{ + /* Note: this call could be optimized away - since the same values must + ** have been requested when testing key $P in whereEqualScanEst(). */ + whereKeyStats(pParse, p, pRec, 0, a); + iLower = a[0]; + iUpper = a[0] + a[1]; + } + + assert( pLower==0 || (pLower->eOperator & (WO_GT|WO_GE))!=0 ); + assert( pUpper==0 || (pUpper->eOperator & (WO_LT|WO_LE))!=0 ); + assert( p->aSortOrder!=0 ); + if( p->aSortOrder[nEq] ){ + /* The roles of pLower and pUpper are swapped for a DESC index */ + SWAP(WhereTerm*, pLower, pUpper); + SWAP(int, nBtm, nTop); + } + + /* If possible, improve on the iLower estimate using ($P:$L). */ + if( pLower ){ + int n; /* Values extracted from pExpr */ + Expr *pExpr = pLower->pExpr->pRight; + rc = sqlite3Stat4ProbeSetValue(pParse, p, &pRec, pExpr, nBtm, nEq, &n); + if( rc==SQLITE_OK && n ){ + tRowcnt iNew; + u16 mask = WO_GT|WO_LE; + if( sqlite3ExprVectorSize(pExpr)>n ) mask = (WO_LE|WO_LT); + iLwrIdx = whereKeyStats(pParse, p, pRec, 0, a); + iNew = a[0] + ((pLower->eOperator & mask) ? a[1] : 0); + if( iNew>iLower ) iLower = iNew; + nOut--; + pLower = 0; + } + } + + /* If possible, improve on the iUpper estimate using ($P:$U). */ + if( pUpper ){ + int n; /* Values extracted from pExpr */ + Expr *pExpr = pUpper->pExpr->pRight; + rc = sqlite3Stat4ProbeSetValue(pParse, p, &pRec, pExpr, nTop, nEq, &n); + if( rc==SQLITE_OK && n ){ + tRowcnt iNew; + u16 mask = WO_GT|WO_LE; + if( sqlite3ExprVectorSize(pExpr)>n ) mask = (WO_LE|WO_LT); + iUprIdx = whereKeyStats(pParse, p, pRec, 1, a); + iNew = a[0] + ((pUpper->eOperator & mask) ? a[1] : 0); + if( iNewpRec = pRec; + if( rc==SQLITE_OK ){ + if( iUpper>iLower ){ + nNew = sqlite3LogEst(iUpper - iLower); + /* TUNING: If both iUpper and iLower are derived from the same + ** sample, then assume they are 4x more selective. This brings + ** the estimated selectivity more in line with what it would be + ** if estimated without the use of STAT4 tables. */ + if( iLwrIdx==iUprIdx ){ nNew -= 20; } + assert( 20==sqlite3LogEst(4) ); + }else{ + nNew = 10; assert( 10==sqlite3LogEst(2) ); + } + if( nNewwtFlags & TERM_VNULL)==0 || pParse->nErr>0 ); + nNew = whereRangeAdjust(pLower, nOut); + nNew = whereRangeAdjust(pUpper, nNew); + + /* TUNING: If there is both an upper and lower limit and neither limit + ** has an application-defined likelihood(), assume the range is + ** reduced by an additional 75%. This means that, by default, an open-ended + ** range query (e.g. col > ?) is assumed to match 1/4 of the rows in the + ** index. While a closed range (e.g. col BETWEEN ? AND ?) is estimated to + ** match 1/64 of the index. */ + if( pLower && pLower->truthProb>0 && pUpper && pUpper->truthProb>0 ){ + nNew -= 20; + } + + nOut -= (pLower!=0) + (pUpper!=0); + if( nNew<10 ) nNew = 10; + if( nNewnOut>nOut ){ + WHERETRACE(0x20,("Range scan lowers nOut from %d to %d\n", + pLoop->nOut, nOut)); + } +#endif + pLoop->nOut = (LogEst)nOut; + return rc; +} + +#ifdef SQLITE_ENABLE_STAT4 +/* +** Estimate the number of rows that will be returned based on +** an equality constraint x=VALUE and where that VALUE occurs in +** the histogram data. This only works when x is the left-most +** column of an index and sqlite_stat4 histogram data is available +** for that index. When pExpr==NULL that means the constraint is +** "x IS NULL" instead of "x=VALUE". +** +** Write the estimated row count into *pnRow and return SQLITE_OK. +** If unable to make an estimate, leave *pnRow unchanged and return +** non-zero. +** +** This routine can fail if it is unable to load a collating sequence +** required for string comparison, or if unable to allocate memory +** for a UTF conversion required for comparison. The error is stored +** in the pParse structure. +*/ +static int whereEqualScanEst( + Parse *pParse, /* Parsing & code generating context */ + WhereLoopBuilder *pBuilder, + Expr *pExpr, /* Expression for VALUE in the x=VALUE constraint */ + tRowcnt *pnRow /* Write the revised row estimate here */ +){ + Index *p = pBuilder->pNew->u.btree.pIndex; + int nEq = pBuilder->pNew->u.btree.nEq; + UnpackedRecord *pRec = pBuilder->pRec; + int rc; /* Subfunction return code */ + tRowcnt a[2]; /* Statistics */ + int bOk; + + assert( nEq>=1 ); + assert( nEq<=p->nColumn ); + assert( p->aSample!=0 ); + assert( p->nSample>0 ); + assert( pBuilder->nRecValidnRecValid<(nEq-1) ){ + return SQLITE_NOTFOUND; + } + + /* This is an optimization only. The call to sqlite3Stat4ProbeSetValue() + ** below would return the same value. */ + if( nEq>=p->nColumn ){ + *pnRow = 1; + return SQLITE_OK; + } + + rc = sqlite3Stat4ProbeSetValue(pParse, p, &pRec, pExpr, 1, nEq-1, &bOk); + pBuilder->pRec = pRec; + if( rc!=SQLITE_OK ) return rc; + if( bOk==0 ) return SQLITE_NOTFOUND; + pBuilder->nRecValid = nEq; + + whereKeyStats(pParse, p, pRec, 0, a); + WHERETRACE(0x20,("equality scan regions %s(%d): %d\n", + p->zName, nEq-1, (int)a[1])); + *pnRow = a[1]; + + return rc; +} +#endif /* SQLITE_ENABLE_STAT4 */ + +#ifdef SQLITE_ENABLE_STAT4 +/* +** Estimate the number of rows that will be returned based on +** an IN constraint where the right-hand side of the IN operator +** is a list of values. Example: +** +** WHERE x IN (1,2,3,4) +** +** Write the estimated row count into *pnRow and return SQLITE_OK. +** If unable to make an estimate, leave *pnRow unchanged and return +** non-zero. +** +** This routine can fail if it is unable to load a collating sequence +** required for string comparison, or if unable to allocate memory +** for a UTF conversion required for comparison. The error is stored +** in the pParse structure. +*/ +static int whereInScanEst( + Parse *pParse, /* Parsing & code generating context */ + WhereLoopBuilder *pBuilder, + ExprList *pList, /* The value list on the RHS of "x IN (v1,v2,v3,...)" */ + tRowcnt *pnRow /* Write the revised row estimate here */ +){ + Index *p = pBuilder->pNew->u.btree.pIndex; + i64 nRow0 = sqlite3LogEstToInt(p->aiRowLogEst[0]); + int nRecValid = pBuilder->nRecValid; + int rc = SQLITE_OK; /* Subfunction return code */ + tRowcnt nEst; /* Number of rows for a single term */ + tRowcnt nRowEst = 0; /* New estimate of the number of rows */ + int i; /* Loop counter */ + + assert( p->aSample!=0 ); + for(i=0; rc==SQLITE_OK && inExpr; i++){ + nEst = nRow0; + rc = whereEqualScanEst(pParse, pBuilder, pList->a[i].pExpr, &nEst); + nRowEst += nEst; + pBuilder->nRecValid = nRecValid; + } + + if( rc==SQLITE_OK ){ + if( nRowEst > (tRowcnt)nRow0 ) nRowEst = nRow0; + *pnRow = nRowEst; + WHERETRACE(0x20,("IN row estimate: est=%d\n", nRowEst)); + } + assert( pBuilder->nRecValid==nRecValid ); + return rc; +} +#endif /* SQLITE_ENABLE_STAT4 */ + + +#if defined(WHERETRACE_ENABLED) || defined(SQLITE_DEBUG) +/* +** Print the content of a WhereTerm object +*/ +SQLITE_PRIVATE void sqlite3WhereTermPrint(WhereTerm *pTerm, int iTerm){ + if( pTerm==0 ){ + sqlite3DebugPrintf("TERM-%-3d NULL\n", iTerm); + }else{ + char zType[8]; + char zLeft[50]; + memcpy(zType, "....", 5); + if( pTerm->wtFlags & TERM_VIRTUAL ) zType[0] = 'V'; + if( pTerm->eOperator & WO_EQUIV ) zType[1] = 'E'; + if( ExprHasProperty(pTerm->pExpr, EP_OuterON) ) zType[2] = 'L'; + if( pTerm->wtFlags & TERM_CODED ) zType[3] = 'C'; + if( pTerm->eOperator & WO_SINGLE ){ + assert( (pTerm->eOperator & (WO_OR|WO_AND))==0 ); + sqlite3_snprintf(sizeof(zLeft),zLeft,"left={%d:%d}", + pTerm->leftCursor, pTerm->u.x.leftColumn); + }else if( (pTerm->eOperator & WO_OR)!=0 && pTerm->u.pOrInfo!=0 ){ + sqlite3_snprintf(sizeof(zLeft),zLeft,"indexable=0x%llx", + pTerm->u.pOrInfo->indexable); + }else{ + sqlite3_snprintf(sizeof(zLeft),zLeft,"left=%d", pTerm->leftCursor); + } + iTerm = pTerm->iTerm = MAX(iTerm,pTerm->iTerm); + sqlite3DebugPrintf( + "TERM-%-3d %p %s %-12s op=%03x wtFlags=%04x", + iTerm, pTerm, zType, zLeft, pTerm->eOperator, pTerm->wtFlags); + /* The 0x10000 .wheretrace flag causes extra information to be + ** shown about each Term */ + if( sqlite3WhereTrace & 0x10000 ){ + sqlite3DebugPrintf(" prob=%-3d prereq=%llx,%llx", + pTerm->truthProb, (u64)pTerm->prereqAll, (u64)pTerm->prereqRight); + } + if( (pTerm->eOperator & (WO_OR|WO_AND))==0 && pTerm->u.x.iField ){ + sqlite3DebugPrintf(" iField=%d", pTerm->u.x.iField); + } + if( pTerm->iParent>=0 ){ + sqlite3DebugPrintf(" iParent=%d", pTerm->iParent); + } + sqlite3DebugPrintf("\n"); + sqlite3TreeViewExpr(0, pTerm->pExpr, 0); + } +} +SQLITE_PRIVATE void sqlite3ShowWhereTerm(WhereTerm *pTerm){ + sqlite3WhereTermPrint(pTerm, 0); +} +#endif + +#ifdef WHERETRACE_ENABLED +/* +** Show the complete content of a WhereClause +*/ +SQLITE_PRIVATE void sqlite3WhereClausePrint(WhereClause *pWC){ + int i; + for(i=0; inTerm; i++){ + sqlite3WhereTermPrint(&pWC->a[i], i); + } +} +#endif + +#ifdef WHERETRACE_ENABLED +/* +** Print a WhereLoop object for debugging purposes +** +** Format example: +** +** .--- Position in WHERE clause rSetup, rRun, nOut ---. +** | | +** | .--- selfMask nTerm ------. | +** | | | | +** | | .-- prereq Idx wsFlags----. | | +** | | | Name | | | +** | | | __|__ nEq ---. ___|__ | __|__ +** | / \ / \ / \ | / \ / \ / \ +** 1.002.001 t2.t2xy 2 f 010241 N 2 cost 0,56,31 +*/ +SQLITE_PRIVATE void sqlite3WhereLoopPrint(const WhereLoop *p, const WhereClause *pWC){ + WhereInfo *pWInfo; + if( pWC ){ + pWInfo = pWC->pWInfo; + int nb = 1+(pWInfo->pTabList->nSrc+3)/4; + SrcItem *pItem = pWInfo->pTabList->a + p->iTab; + Table *pTab = pItem->pSTab; + Bitmask mAll = (((Bitmask)1)<<(nb*4)) - 1; + sqlite3DebugPrintf("%c%2d.%0*llx.%0*llx", p->cId, + p->iTab, nb, p->maskSelf, nb, p->prereq & mAll); + sqlite3DebugPrintf(" %12s", + pItem->zAlias ? pItem->zAlias : pTab->zName); + }else{ + pWInfo = 0; + sqlite3DebugPrintf("%c%2d.%03llx.%03llx %c%d", + p->cId, p->iTab, p->maskSelf, p->prereq & 0xfff, p->cId, p->iTab); + } + if( (p->wsFlags & WHERE_VIRTUALTABLE)==0 ){ + const char *zName; + if( p->u.btree.pIndex && (zName = p->u.btree.pIndex->zName)!=0 ){ + if( strncmp(zName, "sqlite_autoindex_", 17)==0 ){ + int i = sqlite3Strlen30(zName) - 1; + while( zName[i]!='_' ) i--; + zName += i; + } + sqlite3DebugPrintf(".%-16s %2d", zName, p->u.btree.nEq); + }else{ + sqlite3DebugPrintf("%20s",""); + } + }else{ + char *z; + if( p->u.vtab.idxStr ){ + z = sqlite3_mprintf("(%d,\"%s\",%#x)", + p->u.vtab.idxNum, p->u.vtab.idxStr, p->u.vtab.omitMask); + }else{ + z = sqlite3_mprintf("(%d,%x)", p->u.vtab.idxNum, p->u.vtab.omitMask); + } + sqlite3DebugPrintf(" %-19s", z); + sqlite3_free(z); + } + if( p->wsFlags & WHERE_SKIPSCAN ){ + sqlite3DebugPrintf(" f %06x %d-%d", p->wsFlags, p->nLTerm,p->nSkip); + }else{ + sqlite3DebugPrintf(" f %06x N %d", p->wsFlags, p->nLTerm); + } + if( pWInfo && pWInfo->bStarUsed && p->rStarDelta!=0 ){ + sqlite3DebugPrintf(" cost %d,%d,%d delta=%d\n", + p->rSetup, p->rRun, p->nOut, p->rStarDelta); + }else{ + sqlite3DebugPrintf(" cost %d,%d,%d\n", p->rSetup, p->rRun, p->nOut); + } + if( p->nLTerm && (sqlite3WhereTrace & 0x4000)!=0 ){ + int i; + for(i=0; inLTerm; i++){ + sqlite3WhereTermPrint(p->aLTerm[i], i); + } + } +} +SQLITE_PRIVATE void sqlite3ShowWhereLoop(const WhereLoop *p){ + if( p ) sqlite3WhereLoopPrint(p, 0); +} +SQLITE_PRIVATE void sqlite3ShowWhereLoopList(const WhereLoop *p){ + while( p ){ + sqlite3ShowWhereLoop(p); + p = p->pNextLoop; + } +} +#endif + +/* +** Convert bulk memory into a valid WhereLoop that can be passed +** to whereLoopClear harmlessly. +*/ +static void whereLoopInit(WhereLoop *p){ + p->aLTerm = p->aLTermSpace; + p->nLTerm = 0; + p->nLSlot = ArraySize(p->aLTermSpace); + p->wsFlags = 0; +} + +/* +** Clear the WhereLoop.u union. Leave WhereLoop.pLTerm intact. +*/ +static void whereLoopClearUnion(sqlite3 *db, WhereLoop *p){ + if( p->wsFlags & (WHERE_VIRTUALTABLE|WHERE_AUTO_INDEX) ){ + if( (p->wsFlags & WHERE_VIRTUALTABLE)!=0 && p->u.vtab.needFree ){ + sqlite3_free(p->u.vtab.idxStr); + p->u.vtab.needFree = 0; + p->u.vtab.idxStr = 0; + }else if( (p->wsFlags & WHERE_AUTO_INDEX)!=0 && p->u.btree.pIndex!=0 ){ + sqlite3DbFree(db, p->u.btree.pIndex->zColAff); + sqlite3DbFreeNN(db, p->u.btree.pIndex); + p->u.btree.pIndex = 0; + } + } +} + +/* +** Deallocate internal memory used by a WhereLoop object. Leave the +** object in an initialized state, as if it had been newly allocated. +*/ +static void whereLoopClear(sqlite3 *db, WhereLoop *p){ + if( p->aLTerm!=p->aLTermSpace ){ + sqlite3DbFreeNN(db, p->aLTerm); + p->aLTerm = p->aLTermSpace; + p->nLSlot = ArraySize(p->aLTermSpace); + } + whereLoopClearUnion(db, p); + p->nLTerm = 0; + p->wsFlags = 0; +} + +/* +** Increase the memory allocation for pLoop->aLTerm[] to be at least n. +*/ +static int whereLoopResize(sqlite3 *db, WhereLoop *p, int n){ + WhereTerm **paNew; + if( p->nLSlot>=n ) return SQLITE_OK; + n = (n+7)&~7; + paNew = sqlite3DbMallocRawNN(db, sizeof(p->aLTerm[0])*n); + if( paNew==0 ) return SQLITE_NOMEM_BKPT; + memcpy(paNew, p->aLTerm, sizeof(p->aLTerm[0])*p->nLSlot); + if( p->aLTerm!=p->aLTermSpace ) sqlite3DbFreeNN(db, p->aLTerm); + p->aLTerm = paNew; + p->nLSlot = n; + return SQLITE_OK; +} + +/* +** Transfer content from the second pLoop into the first. +*/ +static int whereLoopXfer(sqlite3 *db, WhereLoop *pTo, WhereLoop *pFrom){ + whereLoopClearUnion(db, pTo); + if( pFrom->nLTerm > pTo->nLSlot + && whereLoopResize(db, pTo, pFrom->nLTerm) + ){ + memset(pTo, 0, WHERE_LOOP_XFER_SZ); + return SQLITE_NOMEM_BKPT; + } + memcpy(pTo, pFrom, WHERE_LOOP_XFER_SZ); + memcpy(pTo->aLTerm, pFrom->aLTerm, pTo->nLTerm*sizeof(pTo->aLTerm[0])); + if( pFrom->wsFlags & WHERE_VIRTUALTABLE ){ + pFrom->u.vtab.needFree = 0; + }else if( (pFrom->wsFlags & WHERE_AUTO_INDEX)!=0 ){ + pFrom->u.btree.pIndex = 0; + } + return SQLITE_OK; +} + +/* +** Delete a WhereLoop object +*/ +static void whereLoopDelete(sqlite3 *db, WhereLoop *p){ + assert( db!=0 ); + whereLoopClear(db, p); + sqlite3DbNNFreeNN(db, p); +} + +/* +** Free a WhereInfo structure +*/ +static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){ + assert( pWInfo!=0 ); + assert( db!=0 ); + sqlite3WhereClauseClear(&pWInfo->sWC); + while( pWInfo->pLoops ){ + WhereLoop *p = pWInfo->pLoops; + pWInfo->pLoops = p->pNextLoop; + whereLoopDelete(db, p); + } + while( pWInfo->pMemToFree ){ + WhereMemBlock *pNext = pWInfo->pMemToFree->pNext; + sqlite3DbNNFreeNN(db, pWInfo->pMemToFree); + pWInfo->pMemToFree = pNext; + } + sqlite3DbNNFreeNN(db, pWInfo); +} + +/* +** Return TRUE if X is a proper subset of Y but is of equal or less cost. +** In other words, return true if all constraints of X are also part of Y +** and Y has additional constraints that might speed the search that X lacks +** but the cost of running X is not more than the cost of running Y. +** +** In other words, return true if the cost relationship between X and Y +** is inverted and needs to be adjusted. +** +** Case 1: +** +** (1a) X and Y use the same index. +** (1b) X has fewer == terms than Y +** (1c) Neither X nor Y use skip-scan +** (1d) X does not have a a greater cost than Y +** +** Case 2: +** +** (2a) X has the same or lower cost, or returns the same or fewer rows, +** than Y. +** (2b) X uses fewer WHERE clause terms than Y +** (2c) Every WHERE clause term used by X is also used by Y +** (2d) X skips at least as many columns as Y +** (2e) If X is a covering index, than Y is too +*/ +static int whereLoopCheaperProperSubset( + const WhereLoop *pX, /* First WhereLoop to compare */ + const WhereLoop *pY /* Compare against this WhereLoop */ +){ + int i, j; + if( pX->rRun>pY->rRun && pX->nOut>pY->nOut ) return 0; /* (1d) and (2a) */ + assert( (pX->wsFlags & WHERE_VIRTUALTABLE)==0 ); + assert( (pY->wsFlags & WHERE_VIRTUALTABLE)==0 ); + if( pX->u.btree.nEq < pY->u.btree.nEq /* (1b) */ + && pX->u.btree.pIndex==pY->u.btree.pIndex /* (1a) */ + && pX->nSkip==0 && pY->nSkip==0 /* (1c) */ + ){ + return 1; /* Case 1 is true */ + } + if( pX->nLTerm-pX->nSkip >= pY->nLTerm-pY->nSkip ){ + return 0; /* (2b) */ + } + if( pY->nSkip > pX->nSkip ) return 0; /* (2d) */ + for(i=pX->nLTerm-1; i>=0; i--){ + if( pX->aLTerm[i]==0 ) continue; + for(j=pY->nLTerm-1; j>=0; j--){ + if( pY->aLTerm[j]==pX->aLTerm[i] ) break; + } + if( j<0 ) return 0; /* (2c) */ + } + if( (pX->wsFlags&WHERE_IDX_ONLY)!=0 + && (pY->wsFlags&WHERE_IDX_ONLY)==0 ){ + return 0; /* (2e) */ + } + return 1; /* Case 2 is true */ +} + +/* +** Try to adjust the cost and number of output rows of WhereLoop pTemplate +** upwards or downwards so that: +** +** (1) pTemplate costs less than any other WhereLoops that are a proper +** subset of pTemplate +** +** (2) pTemplate costs more than any other WhereLoops for which pTemplate +** is a proper subset. +** +** To say "WhereLoop X is a proper subset of Y" means that X uses fewer +** WHERE clause terms than Y and that every WHERE clause term used by X is +** also used by Y. +*/ +static void whereLoopAdjustCost(const WhereLoop *p, WhereLoop *pTemplate){ + if( (pTemplate->wsFlags & WHERE_INDEXED)==0 ) return; + for(; p; p=p->pNextLoop){ + if( p->iTab!=pTemplate->iTab ) continue; + if( (p->wsFlags & WHERE_INDEXED)==0 ) continue; + if( whereLoopCheaperProperSubset(p, pTemplate) ){ + /* Adjust pTemplate cost downward so that it is cheaper than its + ** subset p. */ + WHERETRACE(0x80,("subset cost adjustment %d,%d to %d,%d\n", + pTemplate->rRun, pTemplate->nOut, + MIN(p->rRun, pTemplate->rRun), + MIN(p->nOut - 1, pTemplate->nOut))); + pTemplate->rRun = MIN(p->rRun, pTemplate->rRun); + pTemplate->nOut = MIN(p->nOut - 1, pTemplate->nOut); + }else if( whereLoopCheaperProperSubset(pTemplate, p) ){ + /* Adjust pTemplate cost upward so that it is costlier than p since + ** pTemplate is a proper subset of p */ + WHERETRACE(0x80,("subset cost adjustment %d,%d to %d,%d\n", + pTemplate->rRun, pTemplate->nOut, + MAX(p->rRun, pTemplate->rRun), + MAX(p->nOut + 1, pTemplate->nOut))); + pTemplate->rRun = MAX(p->rRun, pTemplate->rRun); + pTemplate->nOut = MAX(p->nOut + 1, pTemplate->nOut); + } + } +} + +/* +** Search the list of WhereLoops in *ppPrev looking for one that can be +** replaced by pTemplate. +** +** Return NULL if pTemplate does not belong on the WhereLoop list. +** In other words if pTemplate ought to be dropped from further consideration. +** +** If pX is a WhereLoop that pTemplate can replace, then return the +** link that points to pX. +** +** If pTemplate cannot replace any existing element of the list but needs +** to be added to the list as a new entry, then return a pointer to the +** tail of the list. +*/ +static WhereLoop **whereLoopFindLesser( + WhereLoop **ppPrev, + const WhereLoop *pTemplate +){ + WhereLoop *p; + for(p=(*ppPrev); p; ppPrev=&p->pNextLoop, p=*ppPrev){ + if( p->iTab!=pTemplate->iTab || p->iSortIdx!=pTemplate->iSortIdx ){ + /* If either the iTab or iSortIdx values for two WhereLoop are different + ** then those WhereLoops need to be considered separately. Neither is + ** a candidate to replace the other. */ + continue; + } + /* In the current implementation, the rSetup value is either zero + ** or the cost of building an automatic index (NlogN) and the NlogN + ** is the same for compatible WhereLoops. */ + assert( p->rSetup==0 || pTemplate->rSetup==0 + || p->rSetup==pTemplate->rSetup ); + + /* whereLoopAddBtree() always generates and inserts the automatic index + ** case first. Hence compatible candidate WhereLoops never have a larger + ** rSetup. Call this SETUP-INVARIANT */ + assert( p->rSetup>=pTemplate->rSetup ); + + /* Any loop using an application-defined index (or PRIMARY KEY or + ** UNIQUE constraint) with one or more == constraints is better + ** than an automatic index. Unless it is a skip-scan. */ + if( (p->wsFlags & WHERE_AUTO_INDEX)!=0 + && (pTemplate->nSkip)==0 + && (pTemplate->wsFlags & WHERE_INDEXED)!=0 + && (pTemplate->wsFlags & WHERE_COLUMN_EQ)!=0 + && (p->prereq & pTemplate->prereq)==pTemplate->prereq + ){ + break; + } + + /* If existing WhereLoop p is better than pTemplate, pTemplate can be + ** discarded. WhereLoop p is better if: + ** (1) p has no more dependencies than pTemplate, and + ** (2) p has an equal or lower cost than pTemplate + */ + if( (p->prereq & pTemplate->prereq)==p->prereq /* (1) */ + && p->rSetup<=pTemplate->rSetup /* (2a) */ + && p->rRun<=pTemplate->rRun /* (2b) */ + && p->nOut<=pTemplate->nOut /* (2c) */ + ){ + return 0; /* Discard pTemplate */ + } + + /* If pTemplate is always better than p, then cause p to be overwritten + ** with pTemplate. pTemplate is better than p if: + ** (1) pTemplate has no more dependencies than p, and + ** (2) pTemplate has an equal or lower cost than p. + */ + if( (p->prereq & pTemplate->prereq)==pTemplate->prereq /* (1) */ + && p->rRun>=pTemplate->rRun /* (2a) */ + && p->nOut>=pTemplate->nOut /* (2b) */ + ){ + assert( p->rSetup>=pTemplate->rSetup ); /* SETUP-INVARIANT above */ + break; /* Cause p to be overwritten by pTemplate */ + } + } + return ppPrev; +} + +/* +** Insert or replace a WhereLoop entry using the template supplied. +** +** An existing WhereLoop entry might be overwritten if the new template +** is better and has fewer dependencies. Or the template will be ignored +** and no insert will occur if an existing WhereLoop is faster and has +** fewer dependencies than the template. Otherwise a new WhereLoop is +** added based on the template. +** +** If pBuilder->pOrSet is not NULL then we care about only the +** prerequisites and rRun and nOut costs of the N best loops. That +** information is gathered in the pBuilder->pOrSet object. This special +** processing mode is used only for OR clause processing. +** +** When accumulating multiple loops (when pBuilder->pOrSet is NULL) we +** still might overwrite similar loops with the new template if the +** new template is better. Loops may be overwritten if the following +** conditions are met: +** +** (1) They have the same iTab. +** (2) They have the same iSortIdx. +** (3) The template has same or fewer dependencies than the current loop +** (4) The template has the same or lower cost than the current loop +*/ +static int whereLoopInsert(WhereLoopBuilder *pBuilder, WhereLoop *pTemplate){ + WhereLoop **ppPrev, *p; + WhereInfo *pWInfo = pBuilder->pWInfo; + sqlite3 *db = pWInfo->pParse->db; + int rc; + + /* Stop the search once we hit the query planner search limit */ + if( pBuilder->iPlanLimit==0 ){ + WHERETRACE(0xffffffff,("=== query planner search limit reached ===\n")); + if( pBuilder->pOrSet ) pBuilder->pOrSet->n = 0; + return SQLITE_DONE; + } + pBuilder->iPlanLimit--; + + whereLoopAdjustCost(pWInfo->pLoops, pTemplate); + + /* If pBuilder->pOrSet is defined, then only keep track of the costs + ** and prereqs. + */ + if( pBuilder->pOrSet!=0 ){ + if( pTemplate->nLTerm ){ +#if WHERETRACE_ENABLED + u16 n = pBuilder->pOrSet->n; + int x = +#endif + whereOrInsert(pBuilder->pOrSet, pTemplate->prereq, pTemplate->rRun, + pTemplate->nOut); +#if WHERETRACE_ENABLED /* 0x8 */ + if( sqlite3WhereTrace & 0x8 ){ + sqlite3DebugPrintf(x?" or-%d: ":" or-X: ", n); + sqlite3WhereLoopPrint(pTemplate, pBuilder->pWC); + } +#endif + } + return SQLITE_OK; + } + + /* Look for an existing WhereLoop to replace with pTemplate + */ + ppPrev = whereLoopFindLesser(&pWInfo->pLoops, pTemplate); + + if( ppPrev==0 ){ + /* There already exists a WhereLoop on the list that is better + ** than pTemplate, so just ignore pTemplate */ +#if WHERETRACE_ENABLED /* 0x8 */ + if( sqlite3WhereTrace & 0x8 ){ + sqlite3DebugPrintf(" skip: "); + sqlite3WhereLoopPrint(pTemplate, pBuilder->pWC); + } +#endif + return SQLITE_OK; + }else{ + p = *ppPrev; + } + + /* If we reach this point it means that either p[] should be overwritten + ** with pTemplate[] if p[] exists, or if p==NULL then allocate a new + ** WhereLoop and insert it. + */ +#if WHERETRACE_ENABLED /* 0x8 */ + if( sqlite3WhereTrace & 0x8 ){ + if( p!=0 ){ + sqlite3DebugPrintf("replace: "); + sqlite3WhereLoopPrint(p, pBuilder->pWC); + sqlite3DebugPrintf(" with: "); + }else{ + sqlite3DebugPrintf(" add: "); + } + sqlite3WhereLoopPrint(pTemplate, pBuilder->pWC); + } +#endif + if( p==0 ){ + /* Allocate a new WhereLoop to add to the end of the list */ + *ppPrev = p = sqlite3DbMallocRawNN(db, sizeof(WhereLoop)); + if( p==0 ) return SQLITE_NOMEM_BKPT; + whereLoopInit(p); + p->pNextLoop = 0; + }else{ + /* We will be overwriting WhereLoop p[]. But before we do, first + ** go through the rest of the list and delete any other entries besides + ** p[] that are also supplanted by pTemplate */ + WhereLoop **ppTail = &p->pNextLoop; + WhereLoop *pToDel; + while( *ppTail ){ + ppTail = whereLoopFindLesser(ppTail, pTemplate); + if( ppTail==0 ) break; + pToDel = *ppTail; + if( pToDel==0 ) break; + *ppTail = pToDel->pNextLoop; +#if WHERETRACE_ENABLED /* 0x8 */ + if( sqlite3WhereTrace & 0x8 ){ + sqlite3DebugPrintf(" delete: "); + sqlite3WhereLoopPrint(pToDel, pBuilder->pWC); + } +#endif + whereLoopDelete(db, pToDel); + } + } + rc = whereLoopXfer(db, p, pTemplate); + if( (p->wsFlags & WHERE_VIRTUALTABLE)==0 ){ + Index *pIndex = p->u.btree.pIndex; + if( pIndex && pIndex->idxType==SQLITE_IDXTYPE_IPK ){ + p->u.btree.pIndex = 0; + } + } + return rc; +} + +/* +** Adjust the WhereLoop.nOut value downward to account for terms of the +** WHERE clause that reference the loop but which are not used by an +** index. +* +** For every WHERE clause term that is not used by the index +** and which has a truth probability assigned by one of the likelihood(), +** likely(), or unlikely() SQL functions, reduce the estimated number +** of output rows by the probability specified. +** +** TUNING: For every WHERE clause term that is not used by the index +** and which does not have an assigned truth probability, heuristics +** described below are used to try to estimate the truth probability. +** TODO --> Perhaps this is something that could be improved by better +** table statistics. +** +** Heuristic 1: Estimate the truth probability as 93.75%. The 93.75% +** value corresponds to -1 in LogEst notation, so this means decrement +** the WhereLoop.nOut field for every such WHERE clause term. +** +** Heuristic 2: If there exists one or more WHERE clause terms of the +** form "x==EXPR" and EXPR is not a constant 0 or 1, then make sure the +** final output row estimate is no greater than 1/4 of the total number +** of rows in the table. In other words, assume that x==EXPR will filter +** out at least 3 out of 4 rows. If EXPR is -1 or 0 or 1, then maybe the +** "x" column is boolean or else -1 or 0 or 1 is a common default value +** on the "x" column and so in that case only cap the output row estimate +** at 1/2 instead of 1/4. +*/ +static void whereLoopOutputAdjust( + WhereClause *pWC, /* The WHERE clause */ + WhereLoop *pLoop, /* The loop to adjust downward */ + LogEst nRow /* Number of rows in the entire table */ +){ + WhereTerm *pTerm, *pX; + Bitmask notAllowed = ~(pLoop->prereq|pLoop->maskSelf); + int i, j; + LogEst iReduce = 0; /* pLoop->nOut should not exceed nRow-iReduce */ + + assert( (pLoop->wsFlags & WHERE_AUTO_INDEX)==0 ); + for(i=pWC->nBase, pTerm=pWC->a; i>0; i--, pTerm++){ + assert( pTerm!=0 ); + if( (pTerm->prereqAll & notAllowed)!=0 ) continue; + if( (pTerm->prereqAll & pLoop->maskSelf)==0 ) continue; + if( (pTerm->wtFlags & TERM_VIRTUAL)!=0 ) continue; + for(j=pLoop->nLTerm-1; j>=0; j--){ + pX = pLoop->aLTerm[j]; + if( pX==0 ) continue; + if( pX==pTerm ) break; + if( pX->iParent>=0 && (&pWC->a[pX->iParent])==pTerm ) break; + } + if( j<0 ){ + sqlite3ProgressCheck(pWC->pWInfo->pParse); + if( pLoop->maskSelf==pTerm->prereqAll ){ + /* If there are extra terms in the WHERE clause not used by an index + ** that depend only on the table being scanned, and that will tend to + ** cause many rows to be omitted, then mark that table as + ** "self-culling". + ** + ** 2022-03-24: Self-culling only applies if either the extra terms + ** are straight comparison operators that are non-true with NULL + ** operand, or if the loop is not an OUTER JOIN. + */ + if( (pTerm->eOperator & 0x3f)!=0 + || (pWC->pWInfo->pTabList->a[pLoop->iTab].fg.jointype + & (JT_LEFT|JT_LTORJ))==0 + ){ + pLoop->wsFlags |= WHERE_SELFCULL; + } + } + if( pTerm->truthProb<=0 ){ + /* If a truth probability is specified using the likelihood() hints, + ** then use the probability provided by the application. */ + pLoop->nOut += pTerm->truthProb; + }else{ + /* In the absence of explicit truth probabilities, use heuristics to + ** guess a reasonable truth probability. */ + pLoop->nOut--; + if( (pTerm->eOperator&(WO_EQ|WO_IS))!=0 + && (pTerm->wtFlags & TERM_HIGHTRUTH)==0 /* tag-20200224-1 */ + ){ + Expr *pRight = pTerm->pExpr->pRight; + int k = 0; + testcase( pTerm->pExpr->op==TK_IS ); + if( sqlite3ExprIsInteger(pRight, &k, 0) && k>=(-1) && k<=1 ){ + k = 10; + }else{ + k = 20; + } + if( iReducewtFlags |= TERM_HEURTRUTH; + iReduce = k; + } + } + } + } + } + if( pLoop->nOut > nRow-iReduce ){ + pLoop->nOut = nRow - iReduce; + } +} + +/* +** Term pTerm is a vector range comparison operation. The first comparison +** in the vector can be optimized using column nEq of the index. This +** function returns the total number of vector elements that can be used +** as part of the range comparison. +** +** For example, if the query is: +** +** WHERE a = ? AND (b, c, d) > (?, ?, ?) +** +** and the index: +** +** CREATE INDEX ... ON (a, b, c, d, e) +** +** then this function would be invoked with nEq=1. The value returned in +** this case is 3. +*/ +static int whereRangeVectorLen( + Parse *pParse, /* Parsing context */ + int iCur, /* Cursor open on pIdx */ + Index *pIdx, /* The index to be used for a inequality constraint */ + int nEq, /* Number of prior equality constraints on same index */ + WhereTerm *pTerm /* The vector inequality constraint */ +){ + int nCmp = sqlite3ExprVectorSize(pTerm->pExpr->pLeft); + int i; + + nCmp = MIN(nCmp, (pIdx->nColumn - nEq)); + for(i=1; ipExpr->pLeft) ); + pLhs = pTerm->pExpr->pLeft->x.pList->a[i].pExpr; + pRhs = pTerm->pExpr->pRight; + if( ExprUseXSelect(pRhs) ){ + pRhs = pRhs->x.pSelect->pEList->a[i].pExpr; + }else{ + pRhs = pRhs->x.pList->a[i].pExpr; + } + + /* Check that the LHS of the comparison is a column reference to + ** the right column of the right source table. And that the sort + ** order of the index column is the same as the sort order of the + ** leftmost index column. */ + if( pLhs->op!=TK_COLUMN + || pLhs->iTable!=iCur + || pLhs->iColumn!=pIdx->aiColumn[i+nEq] + || pIdx->aSortOrder[i+nEq]!=pIdx->aSortOrder[nEq] + ){ + break; + } + + testcase( pLhs->iColumn==XN_ROWID ); + aff = sqlite3CompareAffinity(pRhs, sqlite3ExprAffinity(pLhs)); + idxaff = sqlite3TableColumnAffinity(pIdx->pTable, pLhs->iColumn); + if( aff!=idxaff ) break; + + pColl = sqlite3BinaryCompareCollSeq(pParse, pLhs, pRhs); + if( pColl==0 ) break; + if( sqlite3StrICmp(pColl->zName, pIdx->azColl[i+nEq]) ) break; + } + return i; +} + +/* +** Adjust the cost C by the costMult factor T. This only occurs if +** compiled with -DSQLITE_ENABLE_COSTMULT +*/ +#ifdef SQLITE_ENABLE_COSTMULT +# define ApplyCostMultiplier(C,T) C += T +#else +# define ApplyCostMultiplier(C,T) +#endif + +/* +** We have so far matched pBuilder->pNew->u.btree.nEq terms of the +** index pIndex. Try to match one more. +** +** When this function is called, pBuilder->pNew->nOut contains the +** number of rows expected to be visited by filtering using the nEq +** terms only. If it is modified, this value is restored before this +** function returns. +** +** If pProbe->idxType==SQLITE_IDXTYPE_IPK, that means pIndex is +** a fake index used for the INTEGER PRIMARY KEY. +*/ +static int whereLoopAddBtreeIndex( + WhereLoopBuilder *pBuilder, /* The WhereLoop factory */ + SrcItem *pSrc, /* FROM clause term being analyzed */ + Index *pProbe, /* An index on pSrc */ + LogEst nInMul /* log(Number of iterations due to IN) */ +){ + WhereInfo *pWInfo = pBuilder->pWInfo; /* WHERE analyze context */ + Parse *pParse = pWInfo->pParse; /* Parsing context */ + sqlite3 *db = pParse->db; /* Database connection malloc context */ + WhereLoop *pNew; /* Template WhereLoop under construction */ + WhereTerm *pTerm; /* A WhereTerm under consideration */ + int opMask; /* Valid operators for constraints */ + WhereScan scan; /* Iterator for WHERE terms */ + Bitmask saved_prereq; /* Original value of pNew->prereq */ + u16 saved_nLTerm; /* Original value of pNew->nLTerm */ + u16 saved_nEq; /* Original value of pNew->u.btree.nEq */ + u16 saved_nBtm; /* Original value of pNew->u.btree.nBtm */ + u16 saved_nTop; /* Original value of pNew->u.btree.nTop */ + u16 saved_nSkip; /* Original value of pNew->nSkip */ + u32 saved_wsFlags; /* Original value of pNew->wsFlags */ + LogEst saved_nOut; /* Original value of pNew->nOut */ + int rc = SQLITE_OK; /* Return code */ + LogEst rSize; /* Number of rows in the table */ + LogEst rLogSize; /* Logarithm of table size */ + WhereTerm *pTop = 0, *pBtm = 0; /* Top and bottom range constraints */ + + pNew = pBuilder->pNew; + assert( db->mallocFailed==0 || pParse->nErr>0 ); + if( pParse->nErr ){ + return pParse->rc; + } + WHERETRACE(0x800, ("BEGIN %s.addBtreeIdx(%s), nEq=%d, nSkip=%d, rRun=%d\n", + pProbe->pTable->zName,pProbe->zName, + pNew->u.btree.nEq, pNew->nSkip, pNew->rRun)); + + assert( (pNew->wsFlags & WHERE_VIRTUALTABLE)==0 ); + assert( (pNew->wsFlags & WHERE_TOP_LIMIT)==0 ); + if( pNew->wsFlags & WHERE_BTM_LIMIT ){ + opMask = WO_LT|WO_LE; + }else{ + assert( pNew->u.btree.nBtm==0 ); + opMask = WO_EQ|WO_IN|WO_GT|WO_GE|WO_LT|WO_LE|WO_ISNULL|WO_IS; + } + if( pProbe->bUnordered ){ + opMask &= ~(WO_GT|WO_GE|WO_LT|WO_LE); + } + + assert( pNew->u.btree.nEqnColumn ); + assert( pNew->u.btree.nEqnKeyCol + || pProbe->idxType!=SQLITE_IDXTYPE_PRIMARYKEY ); + + saved_nEq = pNew->u.btree.nEq; + saved_nBtm = pNew->u.btree.nBtm; + saved_nTop = pNew->u.btree.nTop; + saved_nSkip = pNew->nSkip; + saved_nLTerm = pNew->nLTerm; + saved_wsFlags = pNew->wsFlags; + saved_prereq = pNew->prereq; + saved_nOut = pNew->nOut; + pTerm = whereScanInit(&scan, pBuilder->pWC, pSrc->iCursor, saved_nEq, + opMask, pProbe); + pNew->rSetup = 0; + rSize = pProbe->aiRowLogEst[0]; + rLogSize = estLog(rSize); + for(; rc==SQLITE_OK && pTerm!=0; pTerm = whereScanNext(&scan)){ + u16 eOp = pTerm->eOperator; /* Shorthand for pTerm->eOperator */ + LogEst rCostIdx; + LogEst nOutUnadjusted; /* nOut before IN() and WHERE adjustments */ + int nIn = 0; +#ifdef SQLITE_ENABLE_STAT4 + int nRecValid = pBuilder->nRecValid; +#endif + if( (eOp==WO_ISNULL || (pTerm->wtFlags&TERM_VNULL)!=0) + && indexColumnNotNull(pProbe, saved_nEq) + ){ + continue; /* ignore IS [NOT] NULL constraints on NOT NULL columns */ + } + if( pTerm->prereqRight & pNew->maskSelf ) continue; + + /* Do not allow the upper bound of a LIKE optimization range constraint + ** to mix with a lower range bound from some other source */ + if( pTerm->wtFlags & TERM_LIKEOPT && pTerm->eOperator==WO_LT ) continue; + + if( (pSrc->fg.jointype & (JT_LEFT|JT_LTORJ|JT_RIGHT))!=0 + && !constraintCompatibleWithOuterJoin(pTerm,pSrc) + ){ + continue; + } + if( IsUniqueIndex(pProbe) && saved_nEq==pProbe->nKeyCol-1 ){ + pBuilder->bldFlags1 |= SQLITE_BLDF1_UNIQUE; + }else{ + pBuilder->bldFlags1 |= SQLITE_BLDF1_INDEXED; + } + pNew->wsFlags = saved_wsFlags; + pNew->u.btree.nEq = saved_nEq; + pNew->u.btree.nBtm = saved_nBtm; + pNew->u.btree.nTop = saved_nTop; + pNew->nLTerm = saved_nLTerm; + if( pNew->nLTerm>=pNew->nLSlot + && whereLoopResize(db, pNew, pNew->nLTerm+1) + ){ + break; /* OOM while trying to enlarge the pNew->aLTerm array */ + } + pNew->aLTerm[pNew->nLTerm++] = pTerm; + pNew->prereq = (saved_prereq | pTerm->prereqRight) & ~pNew->maskSelf; + + assert( nInMul==0 + || (pNew->wsFlags & WHERE_COLUMN_NULL)!=0 + || (pNew->wsFlags & WHERE_COLUMN_IN)!=0 + || (pNew->wsFlags & WHERE_SKIPSCAN)!=0 + ); + + if( eOp & WO_IN ){ + Expr *pExpr = pTerm->pExpr; + if( ExprUseXSelect(pExpr) ){ + /* "x IN (SELECT ...)": TUNING: the SELECT returns 25 rows */ + int i; + int bRedundant = 0; + nIn = 46; assert( 46==sqlite3LogEst(25) ); + + /* The expression may actually be of the form (x, y) IN (SELECT...). + ** In this case there is a separate term for each of (x) and (y). + ** However, the nIn multiplier should only be applied once, not once + ** for each such term. The following loop checks that pTerm is the + ** first such term in use, and sets nIn back to 0 if it is not. */ + for(i=0; inLTerm-1; i++){ + if( pNew->aLTerm[i] && pNew->aLTerm[i]->pExpr==pExpr ){ + nIn = 0; + if( pNew->aLTerm[i]->u.x.iField == pTerm->u.x.iField ){ + /* Detect when two or more columns of an index match the same + ** column of a vector IN operater, and avoid adding the column + ** to the WhereLoop more than once. See tag-20250707-01 + ** in test/rowvalue.test */ + bRedundant = 1; + } + } + } + if( bRedundant ){ + pNew->nLTerm--; + continue; + } + }else if( ALWAYS(pExpr->x.pList && pExpr->x.pList->nExpr) ){ + /* "x IN (value, value, ...)" */ + nIn = sqlite3LogEst(pExpr->x.pList->nExpr); + } + if( pProbe->hasStat1 && rLogSize>=10 ){ + LogEst M, logK, x; + /* Let: + ** N = the total number of rows in the table + ** K = the number of entries on the RHS of the IN operator + ** M = the number of rows in the table that match terms to the + ** to the left in the same index. If the IN operator is on + ** the left-most index column, M==N. + ** + ** Given the definitions above, it is better to omit the IN operator + ** from the index lookup and instead do a scan of the M elements, + ** testing each scanned row against the IN operator separately, if: + ** + ** M*log(K) < K*log(N) + ** + ** Our estimates for M, K, and N might be inaccurate, so we build in + ** a safety margin of 2 (LogEst: 10) that favors using the IN operator + ** with the index, as using an index has better worst-case behavior. + ** If we do not have real sqlite_stat1 data, always prefer to use + ** the index. Do not bother with this optimization on very small + ** tables (less than 2 rows) as it is pointless in that case. + */ + M = pProbe->aiRowLogEst[saved_nEq]; + logK = estLog(nIn); + /* TUNING v----- 10 to bias toward indexed IN */ + x = M + logK + 10 - (nIn + rLogSize); + if( x>=0 ){ + WHERETRACE(0x40, + ("IN operator (N=%d M=%d logK=%d nIn=%d rLogSize=%d x=%d) " + "prefers indexed lookup\n", + saved_nEq, M, logK, nIn, rLogSize, x)); + }else if( nInMul<2 && OptimizationEnabled(db, SQLITE_SeekScan) ){ + WHERETRACE(0x40, + ("IN operator (N=%d M=%d logK=%d nIn=%d rLogSize=%d x=%d" + " nInMul=%d) prefers skip-scan\n", + saved_nEq, M, logK, nIn, rLogSize, x, nInMul)); + pNew->wsFlags |= WHERE_IN_SEEKSCAN; + }else{ + WHERETRACE(0x40, + ("IN operator (N=%d M=%d logK=%d nIn=%d rLogSize=%d x=%d" + " nInMul=%d) prefers normal scan\n", + saved_nEq, M, logK, nIn, rLogSize, x, nInMul)); + continue; + } + } + pNew->wsFlags |= WHERE_COLUMN_IN; + }else if( eOp & (WO_EQ|WO_IS) ){ + int iCol = pProbe->aiColumn[saved_nEq]; + pNew->wsFlags |= WHERE_COLUMN_EQ; + assert( saved_nEq==pNew->u.btree.nEq ); + if( iCol==XN_ROWID + || (iCol>=0 && nInMul==0 && saved_nEq==pProbe->nKeyCol-1) + ){ + if( iCol==XN_ROWID || pProbe->uniqNotNull + || (pProbe->nKeyCol==1 && pProbe->onError && (eOp & WO_EQ)) + ){ + pNew->wsFlags |= WHERE_ONEROW; + }else{ + pNew->wsFlags |= WHERE_UNQ_WANTED; + } + } + if( scan.iEquiv>1 ) pNew->wsFlags |= WHERE_TRANSCONS; + }else if( eOp & WO_ISNULL ){ + pNew->wsFlags |= WHERE_COLUMN_NULL; + }else{ + int nVecLen = whereRangeVectorLen( + pParse, pSrc->iCursor, pProbe, saved_nEq, pTerm + ); + if( eOp & (WO_GT|WO_GE) ){ + testcase( eOp & WO_GT ); + testcase( eOp & WO_GE ); + pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_BTM_LIMIT; + pNew->u.btree.nBtm = nVecLen; + pBtm = pTerm; + pTop = 0; + if( pTerm->wtFlags & TERM_LIKEOPT ){ + /* Range constraints that come from the LIKE optimization are + ** always used in pairs. */ + pTop = &pTerm[1]; + assert( (pTop-(pTerm->pWC->a))pWC->nTerm ); + assert( pTop->wtFlags & TERM_LIKEOPT ); + assert( pTop->eOperator==WO_LT ); + if( whereLoopResize(db, pNew, pNew->nLTerm+1) ) break; /* OOM */ + pNew->aLTerm[pNew->nLTerm++] = pTop; + pNew->wsFlags |= WHERE_TOP_LIMIT; + pNew->u.btree.nTop = 1; + } + }else{ + assert( eOp & (WO_LT|WO_LE) ); + testcase( eOp & WO_LT ); + testcase( eOp & WO_LE ); + pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_TOP_LIMIT; + pNew->u.btree.nTop = nVecLen; + pTop = pTerm; + pBtm = (pNew->wsFlags & WHERE_BTM_LIMIT)!=0 ? + pNew->aLTerm[pNew->nLTerm-2] : 0; + } + } + + /* At this point pNew->nOut is set to the number of rows expected to + ** be visited by the index scan before considering term pTerm, or the + ** values of nIn and nInMul. In other words, assuming that all + ** "x IN(...)" terms are replaced with "x = ?". This block updates + ** the value of pNew->nOut to account for pTerm (but not nIn/nInMul). */ + assert( pNew->nOut==saved_nOut ); + if( pNew->wsFlags & WHERE_COLUMN_RANGE ){ + /* Adjust nOut using stat4 data. Or, if there is no stat4 + ** data, using some other estimate. */ + whereRangeScanEst(pParse, pBuilder, pBtm, pTop, pNew); + }else{ + int nEq = ++pNew->u.btree.nEq; + assert( eOp & (WO_ISNULL|WO_EQ|WO_IN|WO_IS) ); + + assert( pNew->nOut==saved_nOut ); + if( pTerm->truthProb<=0 && pProbe->aiColumn[saved_nEq]>=0 ){ + assert( (eOp & WO_IN) || nIn==0 ); + testcase( eOp & WO_IN ); + pNew->nOut += pTerm->truthProb; + pNew->nOut -= nIn; + }else{ +#ifdef SQLITE_ENABLE_STAT4 + tRowcnt nOut = 0; + if( nInMul==0 + && pProbe->nSample + && ALWAYS(pNew->u.btree.nEq<=pProbe->nSampleCol) + && ((eOp & WO_IN)==0 || ExprUseXList(pTerm->pExpr)) + && OptimizationEnabled(db, SQLITE_Stat4) + ){ + Expr *pExpr = pTerm->pExpr; + if( (eOp & (WO_EQ|WO_ISNULL|WO_IS))!=0 ){ + testcase( eOp & WO_EQ ); + testcase( eOp & WO_IS ); + testcase( eOp & WO_ISNULL ); + rc = whereEqualScanEst(pParse, pBuilder, pExpr->pRight, &nOut); + }else{ + rc = whereInScanEst(pParse, pBuilder, pExpr->x.pList, &nOut); + } + if( rc==SQLITE_NOTFOUND ) rc = SQLITE_OK; + if( rc!=SQLITE_OK ) break; /* Jump out of the pTerm loop */ + if( nOut ){ + pNew->nOut = sqlite3LogEst(nOut); + if( nEq==1 + /* TUNING: Mark terms as "low selectivity" if they seem likely + ** to be true for half or more of the rows in the table. + ** See tag-202002240-1 */ + && pNew->nOut+10 > pProbe->aiRowLogEst[0] + ){ +#if WHERETRACE_ENABLED /* 0x01 */ + if( sqlite3WhereTrace & 0x20 ){ + sqlite3DebugPrintf( + "STAT4 determines term has low selectivity:\n"); + sqlite3WhereTermPrint(pTerm, 999); + } +#endif + pTerm->wtFlags |= TERM_HIGHTRUTH; + if( pTerm->wtFlags & TERM_HEURTRUTH ){ + /* If the term has previously been used with an assumption of + ** higher selectivity, then set the flag to rerun the + ** loop computations. */ + pBuilder->bldFlags2 |= SQLITE_BLDF2_2NDPASS; + } + } + if( pNew->nOut>saved_nOut ) pNew->nOut = saved_nOut; + pNew->nOut -= nIn; + } + } + if( nOut==0 ) +#endif + { + pNew->nOut += (pProbe->aiRowLogEst[nEq] - pProbe->aiRowLogEst[nEq-1]); + if( eOp & WO_ISNULL ){ + /* TUNING: If there is no likelihood() value, assume that a + ** "col IS NULL" expression matches twice as many rows + ** as (col=?). */ + pNew->nOut += 10; + } + } + } + } + + /* Set rCostIdx to the estimated cost of visiting selected rows in the + ** index. The estimate is the sum of two values: + ** 1. The cost of doing one search-by-key to find the first matching + ** entry + ** 2. Stepping forward in the index pNew->nOut times to find all + ** additional matching entries. + */ + assert( pSrc->pSTab->szTabRow>0 ); + if( pProbe->idxType==SQLITE_IDXTYPE_IPK ){ + /* The pProbe->szIdxRow is low for an IPK table since the interior + ** pages are small. Thus szIdxRow gives a good estimate of seek cost. + ** But the leaf pages are full-size, so pProbe->szIdxRow would badly + ** under-estimate the scanning cost. */ + rCostIdx = pNew->nOut + 16; + }else{ + rCostIdx = pNew->nOut + 1 + (15*pProbe->szIdxRow)/pSrc->pSTab->szTabRow; + } + rCostIdx = sqlite3LogEstAdd(rLogSize, rCostIdx); + + /* Estimate the cost of running the loop. If all data is coming + ** from the index, then this is just the cost of doing the index + ** lookup and scan. But if some data is coming out of the main table, + ** we also have to add in the cost of doing pNew->nOut searches to + ** locate the row in the main table that corresponds to the index entry. + */ + pNew->rRun = rCostIdx; + if( (pNew->wsFlags & (WHERE_IDX_ONLY|WHERE_IPK|WHERE_EXPRIDX))==0 ){ + pNew->rRun = sqlite3LogEstAdd(pNew->rRun, pNew->nOut + 16); + } + ApplyCostMultiplier(pNew->rRun, pProbe->pTable->costMult); + + nOutUnadjusted = pNew->nOut; + pNew->rRun += nInMul + nIn; + pNew->nOut += nInMul + nIn; + whereLoopOutputAdjust(pBuilder->pWC, pNew, rSize); + rc = whereLoopInsert(pBuilder, pNew); + + if( pNew->wsFlags & WHERE_COLUMN_RANGE ){ + pNew->nOut = saved_nOut; + }else{ + pNew->nOut = nOutUnadjusted; + } + + if( (pNew->wsFlags & WHERE_TOP_LIMIT)==0 + && pNew->u.btree.nEqnColumn + && (pNew->u.btree.nEqnKeyCol || + pProbe->idxType!=SQLITE_IDXTYPE_PRIMARYKEY) + ){ + if( pNew->u.btree.nEq>3 ){ + sqlite3ProgressCheck(pParse); + } + whereLoopAddBtreeIndex(pBuilder, pSrc, pProbe, nInMul+nIn); + } + pNew->nOut = saved_nOut; +#ifdef SQLITE_ENABLE_STAT4 + pBuilder->nRecValid = nRecValid; +#endif + } + pNew->prereq = saved_prereq; + pNew->u.btree.nEq = saved_nEq; + pNew->u.btree.nBtm = saved_nBtm; + pNew->u.btree.nTop = saved_nTop; + pNew->nSkip = saved_nSkip; + pNew->wsFlags = saved_wsFlags; + pNew->nOut = saved_nOut; + pNew->nLTerm = saved_nLTerm; + + /* Consider using a skip-scan if there are no WHERE clause constraints + ** available for the left-most terms of the index, and if the average + ** number of repeats in the left-most terms is at least 18. + ** + ** The magic number 18 is selected on the basis that scanning 17 rows + ** is almost always quicker than an index seek (even though if the index + ** contains fewer than 2^17 rows we assume otherwise in other parts of + ** the code). And, even if it is not, it should not be too much slower. + ** On the other hand, the extra seeks could end up being significantly + ** more expensive. */ + assert( 42==sqlite3LogEst(18) ); + if( saved_nEq==saved_nSkip + && saved_nEq+1nKeyCol + && saved_nEq==pNew->nLTerm + && pProbe->noSkipScan==0 + && pProbe->hasStat1!=0 + && OptimizationEnabled(db, SQLITE_SkipScan) + && pProbe->aiRowLogEst[saved_nEq+1]>=42 /* TUNING: Minimum for skip-scan */ + && pSrc->fg.fromExists==0 + && (rc = whereLoopResize(db, pNew, pNew->nLTerm+1))==SQLITE_OK + ){ + LogEst nIter; + pNew->u.btree.nEq++; + pNew->nSkip++; + pNew->aLTerm[pNew->nLTerm++] = 0; + pNew->wsFlags |= WHERE_SKIPSCAN; + nIter = pProbe->aiRowLogEst[saved_nEq] - pProbe->aiRowLogEst[saved_nEq+1]; + pNew->nOut -= nIter; + /* TUNING: Because uncertainties in the estimates for skip-scan queries, + ** add a 1.375 fudge factor to make skip-scan slightly less likely. */ + nIter += 5; + whereLoopAddBtreeIndex(pBuilder, pSrc, pProbe, nIter + nInMul); + pNew->nOut = saved_nOut; + pNew->u.btree.nEq = saved_nEq; + pNew->nSkip = saved_nSkip; + pNew->wsFlags = saved_wsFlags; + } + + WHERETRACE(0x800, ("END %s.addBtreeIdx(%s), nEq=%d, rc=%d\n", + pProbe->pTable->zName, pProbe->zName, saved_nEq, rc)); + return rc; +} + +/* +** Return True if it is possible that pIndex might be useful in +** implementing the ORDER BY clause in pBuilder. +** +** Return False if pBuilder does not contain an ORDER BY clause or +** if there is no way for pIndex to be useful in implementing that +** ORDER BY clause. +*/ +static int indexMightHelpWithOrderBy( + WhereLoopBuilder *pBuilder, + Index *pIndex, + int iCursor +){ + ExprList *pOB; + ExprList *aColExpr; + int ii, jj; + + if( pIndex->bUnordered ) return 0; + if( (pOB = pBuilder->pWInfo->pOrderBy)==0 ) return 0; + for(ii=0; iinExpr; ii++){ + Expr *pExpr = sqlite3ExprSkipCollateAndLikely(pOB->a[ii].pExpr); + if( NEVER(pExpr==0) ) continue; + if( (pExpr->op==TK_COLUMN || pExpr->op==TK_AGG_COLUMN) + && pExpr->iTable==iCursor + ){ + if( pExpr->iColumn<0 ) return 1; + for(jj=0; jjnKeyCol; jj++){ + if( pExpr->iColumn==pIndex->aiColumn[jj] ) return 1; + } + }else if( (aColExpr = pIndex->aColExpr)!=0 ){ + for(jj=0; jjnKeyCol; jj++){ + if( pIndex->aiColumn[jj]!=XN_EXPR ) continue; + if( sqlite3ExprCompareSkip(pExpr,aColExpr->a[jj].pExpr,iCursor)==0 ){ + return 1; + } + } + } + } + return 0; +} + +/* Check to see if a partial index with pPartIndexWhere can be used +** in the current query. Return true if it can be and false if not. +*/ +static int whereUsablePartialIndex( + int iTab, /* The table for which we want an index */ + u8 jointype, /* The JT_* flags on the join */ + WhereClause *pWC, /* The WHERE clause of the query */ + Expr *pWhere /* The WHERE clause from the partial index */ +){ + int i; + WhereTerm *pTerm; + Parse *pParse; + + if( jointype & JT_LTORJ ) return 0; + pParse = pWC->pWInfo->pParse; + while( pWhere->op==TK_AND ){ + if( !whereUsablePartialIndex(iTab,jointype,pWC,pWhere->pLeft) ) return 0; + pWhere = pWhere->pRight; + } + for(i=0, pTerm=pWC->a; inTerm; i++, pTerm++){ + Expr *pExpr; + pExpr = pTerm->pExpr; + if( (!ExprHasProperty(pExpr, EP_OuterON) || pExpr->w.iJoin==iTab) + && ((jointype & JT_OUTER)==0 || ExprHasProperty(pExpr, EP_OuterON)) + && sqlite3ExprImpliesExpr(pParse, pExpr, pWhere, iTab) + && !sqlite3ExprImpliesExpr(pParse, pExpr, pWhere, -1) + && (pTerm->wtFlags & TERM_VNULL)==0 + ){ + return 1; + } + } + return 0; +} + +/* +** pIdx is an index containing expressions. Check it see if any of the +** expressions in the index match the pExpr expression. +*/ +static int exprIsCoveredByIndex( + const Expr *pExpr, + const Index *pIdx, + int iTabCur +){ + int i; + for(i=0; inColumn; i++){ + if( pIdx->aiColumn[i]==XN_EXPR + && sqlite3ExprCompare(0, pExpr, pIdx->aColExpr->a[i].pExpr, iTabCur)==0 + ){ + return 1; + } + } + return 0; +} + +/* +** Structure passed to the whereIsCoveringIndex Walker callback. +*/ +typedef struct CoveringIndexCheck CoveringIndexCheck; +struct CoveringIndexCheck { + Index *pIdx; /* The index */ + int iTabCur; /* Cursor number for the corresponding table */ + u8 bExpr; /* Uses an indexed expression */ + u8 bUnidx; /* Uses an unindexed column not within an indexed expr */ +}; + +/* +** Information passed in is pWalk->u.pCovIdxCk. Call it pCk. +** +** If the Expr node references the table with cursor pCk->iTabCur, then +** make sure that column is covered by the index pCk->pIdx. We know that +** all columns less than 63 (really BMS-1) are covered, so we don't need +** to check them. But we do need to check any column at 63 or greater. +** +** If the index does not cover the column, then set pWalk->eCode to +** non-zero and return WRC_Abort to stop the search. +** +** If this node does not disprove that the index can be a covering index, +** then just return WRC_Continue, to continue the search. +** +** If pCk->pIdx contains indexed expressions and one of those expressions +** matches pExpr, then prune the search. +*/ +static int whereIsCoveringIndexWalkCallback(Walker *pWalk, Expr *pExpr){ + int i; /* Loop counter */ + const Index *pIdx; /* The index of interest */ + const i16 *aiColumn; /* Columns contained in the index */ + u16 nColumn; /* Number of columns in the index */ + CoveringIndexCheck *pCk; /* Info about this search */ + + pCk = pWalk->u.pCovIdxCk; + pIdx = pCk->pIdx; + if( (pExpr->op==TK_COLUMN || pExpr->op==TK_AGG_COLUMN) ){ + /* if( pExpr->iColumn<(BMS-1) && pIdx->bHasExpr==0 ) return WRC_Continue;*/ + if( pExpr->iTable!=pCk->iTabCur ) return WRC_Continue; + pIdx = pWalk->u.pCovIdxCk->pIdx; + aiColumn = pIdx->aiColumn; + nColumn = pIdx->nColumn; + for(i=0; iiColumn ) return WRC_Continue; + } + pCk->bUnidx = 1; + return WRC_Abort; + }else if( pIdx->bHasExpr + && exprIsCoveredByIndex(pExpr, pIdx, pWalk->u.pCovIdxCk->iTabCur) ){ + pCk->bExpr = 1; + return WRC_Prune; + } + return WRC_Continue; +} + + +/* +** pIdx is an index that covers all of the low-number columns used by +** pWInfo->pSelect (columns from 0 through 62) or an index that has +** expressions terms. Hence, we cannot determine whether or not it is +** a covering index by using the colUsed bitmasks. We have to do a search +** to see if the index is covering. This routine does that search. +** +** The return value is one of these: +** +** 0 The index is definitely not a covering index +** +** WHERE_IDX_ONLY The index is definitely a covering index +** +** WHERE_EXPRIDX The index is likely a covering index, but it is +** difficult to determine precisely because of the +** expressions that are indexed. Score it as a +** covering index, but still keep the main table open +** just in case we need it. +** +** This routine is an optimization. It is always safe to return zero. +** But returning one of the other two values when zero should have been +** returned can lead to incorrect bytecode and assertion faults. +*/ +static SQLITE_NOINLINE u32 whereIsCoveringIndex( + WhereInfo *pWInfo, /* The WHERE clause context */ + Index *pIdx, /* Index that is being tested */ + int iTabCur /* Cursor for the table being indexed */ +){ + int i, rc; + struct CoveringIndexCheck ck; + Walker w; + if( pWInfo->pSelect==0 ){ + /* We don't have access to the full query, so we cannot check to see + ** if pIdx is covering. Assume it is not. */ + return 0; + } + if( pIdx->bHasExpr==0 ){ + for(i=0; inColumn; i++){ + if( pIdx->aiColumn[i]>=BMS-1 ) break; + } + if( i>=pIdx->nColumn ){ + /* pIdx does not index any columns greater than 62, but we know from + ** colMask that columns greater than 62 are used, so this is not a + ** covering index */ + return 0; + } + } + ck.pIdx = pIdx; + ck.iTabCur = iTabCur; + ck.bExpr = 0; + ck.bUnidx = 0; + memset(&w, 0, sizeof(w)); + w.xExprCallback = whereIsCoveringIndexWalkCallback; + w.xSelectCallback = sqlite3SelectWalkNoop; + w.u.pCovIdxCk = &ck; + sqlite3WalkSelect(&w, pWInfo->pSelect); + if( ck.bUnidx ){ + rc = 0; + }else if( ck.bExpr ){ + rc = WHERE_EXPRIDX; + }else{ + rc = WHERE_IDX_ONLY; + } + return rc; +} + +/* +** This is an sqlite3ParserAddCleanup() callback that is invoked to +** free the Parse->pIdxEpr list when the Parse object is destroyed. +*/ +static void whereIndexedExprCleanup(sqlite3 *db, void *pObject){ + IndexedExpr **pp = (IndexedExpr**)pObject; + while( *pp!=0 ){ + IndexedExpr *p = *pp; + *pp = p->pIENext; + sqlite3ExprDelete(db, p->pExpr); + sqlite3DbFreeNN(db, p); + } +} + +/* +** This function is called for a partial index - one with a WHERE clause - in +** two scenarios. In both cases, it determines whether or not the WHERE +** clause on the index implies that a column of the table may be safely +** replaced by a constant expression. For example, in the following +** SELECT: +** +** CREATE INDEX i1 ON t1(b, c) WHERE a=; +** SELECT a, b, c FROM t1 WHERE a= AND b=?; +** +** The "a" in the select-list may be replaced by , iff: +** +** (a) is a constant expression, and +** (b) The (a=) comparison uses the BINARY collation sequence, and +** (c) Column "a" has an affinity other than NONE or BLOB. +** +** If argument pItem is NULL, then pMask must not be NULL. In this case this +** function is being called as part of determining whether or not pIdx +** is a covering index. This function clears any bits in (*pMask) +** corresponding to columns that may be replaced by constants as described +** above. +** +** Otherwise, if pItem is not NULL, then this function is being called +** as part of coding a loop that uses index pIdx. In this case, add entries +** to the Parse.pIdxPartExpr list for each column that can be replaced +** by a constant. +*/ +static void wherePartIdxExpr( + Parse *pParse, /* Parse context */ + Index *pIdx, /* Partial index being processed */ + Expr *pPart, /* WHERE clause being processed */ + Bitmask *pMask, /* Mask to clear bits in */ + int iIdxCur, /* Cursor number for index */ + SrcItem *pItem /* The FROM clause entry for the table */ +){ + assert( pItem==0 || (pItem->fg.jointype & JT_RIGHT)==0 ); + assert( (pItem==0 || pMask==0) && (pMask!=0 || pItem!=0) ); + + if( pPart->op==TK_AND ){ + wherePartIdxExpr(pParse, pIdx, pPart->pRight, pMask, iIdxCur, pItem); + pPart = pPart->pLeft; + } + + if( (pPart->op==TK_EQ || pPart->op==TK_IS) ){ + Expr *pLeft = pPart->pLeft; + Expr *pRight = pPart->pRight; + u8 aff; + + if( pLeft->op!=TK_COLUMN ) return; + if( !sqlite3ExprIsConstant(0, pRight) ) return; + if( !sqlite3IsBinary(sqlite3ExprCompareCollSeq(pParse, pPart)) ) return; + if( pLeft->iColumn<0 ) return; + aff = pIdx->pTable->aCol[pLeft->iColumn].affinity; + if( aff>=SQLITE_AFF_TEXT ){ + if( pItem ){ + sqlite3 *db = pParse->db; + IndexedExpr *p = (IndexedExpr*)sqlite3DbMallocRaw(db, sizeof(*p)); + if( p ){ + int bNullRow = (pItem->fg.jointype&(JT_LEFT|JT_LTORJ))!=0; + p->pExpr = sqlite3ExprDup(db, pRight, 0); + p->iDataCur = pItem->iCursor; + p->iIdxCur = iIdxCur; + p->iIdxCol = pLeft->iColumn; + p->bMaybeNullRow = bNullRow; + p->pIENext = pParse->pIdxPartExpr; + p->aff = aff; + pParse->pIdxPartExpr = p; + if( p->pIENext==0 ){ + void *pArg = (void*)&pParse->pIdxPartExpr; + sqlite3ParserAddCleanup(pParse, whereIndexedExprCleanup, pArg); + } + } + }else if( pLeft->iColumn<(BMS-1) ){ + *pMask &= ~((Bitmask)1 << pLeft->iColumn); + } + } + } +} + + +/* +** Add all WhereLoop objects for a single table of the join where the table +** is identified by pBuilder->pNew->iTab. That table is guaranteed to be +** a b-tree table, not a virtual table. +** +** The costs (WhereLoop.rRun) of the b-tree loops added by this function +** are calculated as follows: +** +** For a full scan, assuming the table (or index) contains nRow rows: +** +** cost = nRow * 3.0 // full-table scan +** cost = nRow * K // scan of covering index +** cost = nRow * (K+3.0) // scan of non-covering index +** +** where K is a value between 1.1 and 3.0 set based on the relative +** estimated average size of the index and table records. +** +** For an index scan, where nVisit is the number of index rows visited +** by the scan, and nSeek is the number of seek operations required on +** the index b-tree: +** +** cost = nSeek * (log(nRow) + K * nVisit) // covering index +** cost = nSeek * (log(nRow) + (K+3.0) * nVisit) // non-covering index +** +** Normally, nSeek is 1. nSeek values greater than 1 come about if the +** WHERE clause includes "x IN (....)" terms used in place of "x=?". Or when +** implicit "x IN (SELECT x FROM tbl)" terms are added for skip-scans. +** +** The estimated values (nRow, nVisit, nSeek) often contain a large amount +** of uncertainty. For this reason, scoring is designed to pick plans that +** "do the least harm" if the estimates are inaccurate. For example, a +** log(nRow) factor is omitted from a non-covering index scan in order to +** bias the scoring in favor of using an index, since the worst-case +** performance of using an index is far better than the worst-case performance +** of a full table scan. +*/ +static int whereLoopAddBtree( + WhereLoopBuilder *pBuilder, /* WHERE clause information */ + Bitmask mPrereq /* Extra prerequisites for using this table */ +){ + WhereInfo *pWInfo; /* WHERE analysis context */ + Index *pProbe; /* An index we are evaluating */ + Index sPk; /* A fake index object for the primary key */ + LogEst aiRowEstPk[2]; /* The aiRowLogEst[] value for the sPk index */ + i16 aiColumnPk = -1; /* The aColumn[] value for the sPk index */ + SrcList *pTabList; /* The FROM clause */ + SrcItem *pSrc; /* The FROM clause btree term to add */ + WhereLoop *pNew; /* Template WhereLoop object */ + int rc = SQLITE_OK; /* Return code */ + int iSortIdx = 1; /* Index number */ + int b; /* A boolean value */ + LogEst rSize; /* number of rows in the table */ + WhereClause *pWC; /* The parsed WHERE clause */ + Table *pTab; /* Table being queried */ + + pNew = pBuilder->pNew; + pWInfo = pBuilder->pWInfo; + pTabList = pWInfo->pTabList; + pSrc = pTabList->a + pNew->iTab; + pTab = pSrc->pSTab; + pWC = pBuilder->pWC; + assert( !IsVirtual(pSrc->pSTab) ); + + if( pSrc->fg.isIndexedBy ){ + assert( pSrc->fg.isCte==0 ); + /* An INDEXED BY clause specifies a particular index to use */ + pProbe = pSrc->u2.pIBIndex; + }else if( !HasRowid(pTab) ){ + pProbe = pTab->pIndex; + }else{ + /* There is no INDEXED BY clause. Create a fake Index object in local + ** variable sPk to represent the rowid primary key index. Make this + ** fake index the first in a chain of Index objects with all of the real + ** indices to follow */ + Index *pFirst; /* First of real indices on the table */ + memset(&sPk, 0, sizeof(Index)); + sPk.nKeyCol = 1; + sPk.nColumn = 1; + sPk.aiColumn = &aiColumnPk; + sPk.aiRowLogEst = aiRowEstPk; + sPk.onError = OE_Replace; + sPk.pTable = pTab; + sPk.szIdxRow = 3; /* TUNING: Interior rows of IPK table are very small */ + sPk.idxType = SQLITE_IDXTYPE_IPK; + aiRowEstPk[0] = pTab->nRowLogEst; + aiRowEstPk[1] = 0; + pFirst = pSrc->pSTab->pIndex; + if( pSrc->fg.notIndexed==0 ){ + /* The real indices of the table are only considered if the + ** NOT INDEXED qualifier is omitted from the FROM clause */ + sPk.pNext = pFirst; + } + pProbe = &sPk; + } + rSize = pTab->nRowLogEst; + +#ifndef SQLITE_OMIT_AUTOMATIC_INDEX + /* Automatic indexes */ + if( !pBuilder->pOrSet /* Not part of an OR optimization */ + && (pWInfo->wctrlFlags & (WHERE_RIGHT_JOIN|WHERE_OR_SUBCLAUSE))==0 + && (pWInfo->pParse->db->flags & SQLITE_AutoIndex)!=0 + && !pSrc->fg.isIndexedBy /* Has no INDEXED BY clause */ + && !pSrc->fg.notIndexed /* Has no NOT INDEXED clause */ + && !pSrc->fg.isCorrelated /* Not a correlated subquery */ + && !pSrc->fg.isRecursive /* Not a recursive common table expression. */ + && (pSrc->fg.jointype & JT_RIGHT)==0 /* Not the right tab of a RIGHT JOIN */ + ){ + /* Generate auto-index WhereLoops */ + LogEst rLogSize; /* Logarithm of the number of rows in the table */ + WhereTerm *pTerm; + WhereTerm *pWCEnd = pWC->a + pWC->nTerm; + rLogSize = estLog(rSize); + for(pTerm=pWC->a; rc==SQLITE_OK && pTermprereqRight & pNew->maskSelf ) continue; + if( termCanDriveIndex(pTerm, pSrc, 0) ){ + pNew->u.btree.nEq = 1; + pNew->nSkip = 0; + pNew->u.btree.pIndex = 0; + pNew->nLTerm = 1; + pNew->aLTerm[0] = pTerm; + /* TUNING: One-time cost for computing the automatic index is + ** estimated to be X*N*log2(N) where N is the number of rows in + ** the table being indexed and where X is 7 (LogEst=28) for normal + ** tables or 0.5 (LogEst=-10) for views and subqueries. The value + ** of X is smaller for views and subqueries so that the query planner + ** will be more aggressive about generating automatic indexes for + ** those objects, since there is no opportunity to add schema + ** indexes on subqueries and views. */ + pNew->rSetup = rLogSize + rSize; + if( !IsView(pTab) && (pTab->tabFlags & TF_Ephemeral)==0 ){ + pNew->rSetup += 28; + }else{ + pNew->rSetup -= 25; /* Greatly reduced setup cost for auto indexes + ** on ephemeral materializations of views */ + } + ApplyCostMultiplier(pNew->rSetup, pTab->costMult); + if( pNew->rSetup<0 ) pNew->rSetup = 0; + /* TUNING: Each index lookup yields 20 rows in the table. This + ** is more than the usual guess of 10 rows, since we have no way + ** of knowing how selective the index will ultimately be. It would + ** not be unreasonable to make this value much larger. */ + pNew->nOut = 43; assert( 43==sqlite3LogEst(20) ); + pNew->rRun = sqlite3LogEstAdd(rLogSize,pNew->nOut); + pNew->wsFlags = WHERE_AUTO_INDEX; + pNew->prereq = mPrereq | pTerm->prereqRight; + rc = whereLoopInsert(pBuilder, pNew); + } + } + } +#endif /* SQLITE_OMIT_AUTOMATIC_INDEX */ + + /* Loop over all indices. If there was an INDEXED BY clause, then only + ** consider index pProbe. */ + for(; rc==SQLITE_OK && pProbe; + pProbe=(pSrc->fg.isIndexedBy ? 0 : pProbe->pNext), iSortIdx++ + ){ + if( pProbe->pPartIdxWhere!=0 + && !whereUsablePartialIndex(pSrc->iCursor, pSrc->fg.jointype, pWC, + pProbe->pPartIdxWhere) + ){ + testcase( pNew->iTab!=pSrc->iCursor ); /* See ticket [98d973b8f5] */ + continue; /* Partial index inappropriate for this query */ + } + if( pProbe->bNoQuery ) continue; + rSize = pProbe->aiRowLogEst[0]; + pNew->u.btree.nEq = 0; + pNew->u.btree.nBtm = 0; + pNew->u.btree.nTop = 0; + pNew->u.btree.nDistinctCol = 0; + pNew->nSkip = 0; + pNew->nLTerm = 0; + pNew->iSortIdx = 0; + pNew->rSetup = 0; + pNew->prereq = mPrereq; + pNew->nOut = rSize; + pNew->u.btree.pIndex = pProbe; + pNew->u.btree.pOrderBy = 0; + b = indexMightHelpWithOrderBy(pBuilder, pProbe, pSrc->iCursor); + + /* The ONEPASS_DESIRED flags never occurs together with ORDER BY */ + assert( (pWInfo->wctrlFlags & WHERE_ONEPASS_DESIRED)==0 || b==0 ); + if( pProbe->idxType==SQLITE_IDXTYPE_IPK ){ + /* Integer primary key index */ + pNew->wsFlags = WHERE_IPK; + + /* Full table scan */ + pNew->iSortIdx = b ? iSortIdx : 0; + /* TUNING: Cost of full table scan is 3.0*N. The 3.0 factor is an + ** extra cost designed to discourage the use of full table scans, + ** since index lookups have better worst-case performance if our + ** stat guesses are wrong. Reduce the 3.0 penalty slightly + ** (to 2.75) if we have valid STAT4 information for the table. + ** At 2.75, a full table scan is preferred over using an index on + ** a column with just two distinct values where each value has about + ** an equal number of appearances. Without STAT4 data, we still want + ** to use an index in that case, since the constraint might be for + ** the scarcer of the two values, and in that case an index lookup is + ** better. + */ +#ifdef SQLITE_ENABLE_STAT4 + pNew->rRun = rSize + 16 - 2*((pTab->tabFlags & TF_HasStat4)!=0); +#else + pNew->rRun = rSize + 16; +#endif + ApplyCostMultiplier(pNew->rRun, pTab->costMult); + whereLoopOutputAdjust(pWC, pNew, rSize); + if( pSrc->fg.isSubquery ){ + if( pSrc->fg.viaCoroutine ) pNew->wsFlags |= WHERE_COROUTINE; + pNew->u.btree.pOrderBy = pSrc->u4.pSubq->pSelect->pOrderBy; + } + rc = whereLoopInsert(pBuilder, pNew); + pNew->nOut = rSize; + if( rc ) break; + }else{ + Bitmask m; + if( pProbe->isCovering ){ + m = 0; + pNew->wsFlags = WHERE_IDX_ONLY | WHERE_INDEXED; + }else{ + m = pSrc->colUsed & pProbe->colNotIdxed; + if( pProbe->pPartIdxWhere ){ + wherePartIdxExpr( + pWInfo->pParse, pProbe, pProbe->pPartIdxWhere, &m, 0, 0 + ); + } + pNew->wsFlags = WHERE_INDEXED; + if( m==TOPBIT || (pProbe->bHasExpr && !pProbe->bHasVCol && m!=0) ){ + u32 isCov = whereIsCoveringIndex(pWInfo, pProbe, pSrc->iCursor); + if( isCov==0 ){ + WHERETRACE(0x200, + ("-> %s is not a covering index" + " according to whereIsCoveringIndex()\n", pProbe->zName)); + assert( m!=0 ); + }else{ + m = 0; + pNew->wsFlags |= isCov; + if( isCov & WHERE_IDX_ONLY ){ + WHERETRACE(0x200, + ("-> %s is a covering expression index" + " according to whereIsCoveringIndex()\n", pProbe->zName)); + }else{ + assert( isCov==WHERE_EXPRIDX ); + WHERETRACE(0x200, + ("-> %s might be a covering expression index" + " according to whereIsCoveringIndex()\n", pProbe->zName)); + } + } + }else if( m==0 + && (HasRowid(pTab) || pWInfo->pSelect!=0 || sqlite3FaultSim(700)) + ){ + WHERETRACE(0x200, + ("-> %s is a covering index according to bitmasks\n", + pProbe->zName, m==0 ? "is" : "is not")); + pNew->wsFlags = WHERE_IDX_ONLY | WHERE_INDEXED; + } + } + + /* Full scan via index */ + if( b + || !HasRowid(pTab) + || pProbe->pPartIdxWhere!=0 + || pSrc->fg.isIndexedBy + || ( m==0 + && pProbe->bUnordered==0 + && (pProbe->szIdxRowszTabRow) + && (pWInfo->wctrlFlags & WHERE_ONEPASS_DESIRED)==0 + && sqlite3GlobalConfig.bUseCis + && OptimizationEnabled(pWInfo->pParse->db, SQLITE_CoverIdxScan) + ) + ){ + pNew->iSortIdx = b ? iSortIdx : 0; + + /* The cost of visiting the index rows is N*K, where K is + ** between 1.1 and 3.0, depending on the relative sizes of the + ** index and table rows. */ + pNew->rRun = rSize + 1 + (15*pProbe->szIdxRow)/pTab->szTabRow; + if( m!=0 ){ + /* If this is a non-covering index scan, add in the cost of + ** doing table lookups. The cost will be 3x the number of + ** lookups. Take into account WHERE clause terms that can be + ** satisfied using just the index, and that do not require a + ** table lookup. */ + LogEst nLookup = rSize + 16; /* Base cost: N*3 */ + int ii; + int iCur = pSrc->iCursor; + WhereClause *pWC2 = &pWInfo->sWC; + for(ii=0; iinTerm; ii++){ + WhereTerm *pTerm = &pWC2->a[ii]; + if( !sqlite3ExprCoveredByIndex(pTerm->pExpr, iCur, pProbe) ){ + break; + } + /* pTerm can be evaluated using just the index. So reduce + ** the expected number of table lookups accordingly */ + if( pTerm->truthProb<=0 ){ + nLookup += pTerm->truthProb; + }else{ + nLookup--; + if( pTerm->eOperator & (WO_EQ|WO_IS) ) nLookup -= 19; + } + } + + pNew->rRun = sqlite3LogEstAdd(pNew->rRun, nLookup); + } + ApplyCostMultiplier(pNew->rRun, pTab->costMult); + whereLoopOutputAdjust(pWC, pNew, rSize); + if( (pSrc->fg.jointype & JT_RIGHT)!=0 && pProbe->aColExpr ){ + /* Do not do an SCAN of a index-on-expression in a RIGHT JOIN + ** because the cursor used to access the index might not be + ** positioned to the correct row during the right-join no-match + ** loop. */ + }else{ + rc = whereLoopInsert(pBuilder, pNew); + } + pNew->nOut = rSize; + if( rc ) break; + } + } + + pBuilder->bldFlags1 = 0; + rc = whereLoopAddBtreeIndex(pBuilder, pSrc, pProbe, 0); + if( pBuilder->bldFlags1==SQLITE_BLDF1_INDEXED ){ + /* If a non-unique index is used, or if a prefix of the key for + ** unique index is used (making the index functionally non-unique) + ** then the sqlite_stat1 data becomes important for scoring the + ** plan */ + pTab->tabFlags |= TF_MaybeReanalyze; + } +#ifdef SQLITE_ENABLE_STAT4 + sqlite3Stat4ProbeFree(pBuilder->pRec); + pBuilder->nRecValid = 0; + pBuilder->pRec = 0; +#endif + } + return rc; +} + +#ifndef SQLITE_OMIT_VIRTUALTABLE + +/* +** Return true if pTerm is a virtual table LIMIT or OFFSET term. +*/ +static int isLimitTerm(WhereTerm *pTerm){ + assert( pTerm->eOperator==WO_AUX || pTerm->eMatchOp==0 ); + return pTerm->eMatchOp>=SQLITE_INDEX_CONSTRAINT_LIMIT + && pTerm->eMatchOp<=SQLITE_INDEX_CONSTRAINT_OFFSET; +} + +/* +** Return true if the first nCons constraints in the pUsage array are +** marked as in-use (have argvIndex>0). False otherwise. +*/ +static int allConstraintsUsed( + struct sqlite3_index_constraint_usage *aUsage, + int nCons +){ + int ii; + for(ii=0; iipNew->iTab. This +** function marks a subset of those constraints usable, invokes the +** xBestIndex method and adds the returned plan to pBuilder. +** +** A constraint is marked usable if: +** +** * Argument mUsable indicates that its prerequisites are available, and +** +** * It is not one of the operators specified in the mExclude mask passed +** as the fourth argument (which in practice is either WO_IN or 0). +** +** Argument mPrereq is a mask of tables that must be scanned before the +** virtual table in question. These are added to the plans prerequisites +** before it is added to pBuilder. +** +** Output parameter *pbIn is set to true if the plan added to pBuilder +** uses one or more WO_IN terms, or false otherwise. +*/ +static int whereLoopAddVirtualOne( + WhereLoopBuilder *pBuilder, + Bitmask mPrereq, /* Mask of tables that must be used. */ + Bitmask mUsable, /* Mask of usable tables */ + u16 mExclude, /* Exclude terms using these operators */ + sqlite3_index_info *pIdxInfo, /* Populated object for xBestIndex */ + u16 mNoOmit, /* Do not omit these constraints */ + int *pbIn, /* OUT: True if plan uses an IN(...) op */ + int *pbRetryLimit /* OUT: Retry without LIMIT/OFFSET */ +){ + WhereClause *pWC = pBuilder->pWC; + HiddenIndexInfo *pHidden = (HiddenIndexInfo*)&pIdxInfo[1]; + struct sqlite3_index_constraint *pIdxCons; + struct sqlite3_index_constraint_usage *pUsage = pIdxInfo->aConstraintUsage; + int i; + int mxTerm; + int rc = SQLITE_OK; + WhereLoop *pNew = pBuilder->pNew; + Parse *pParse = pBuilder->pWInfo->pParse; + SrcItem *pSrc = &pBuilder->pWInfo->pTabList->a[pNew->iTab]; + int nConstraint = pIdxInfo->nConstraint; + + assert( (mUsable & mPrereq)==mPrereq ); + *pbIn = 0; + pNew->prereq = mPrereq; + + /* Set the usable flag on the subset of constraints identified by + ** arguments mUsable and mExclude. */ + pIdxCons = *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint; + for(i=0; iiTermOffset); + pIdxCons->usable = 0; + if( (pTerm->prereqRight & mUsable)==pTerm->prereqRight + && (pTerm->eOperator & mExclude)==0 + && (pbRetryLimit || !isLimitTerm(pTerm)) + ){ + pIdxCons->usable = 1; + } + } + + /* Initialize the output fields of the sqlite3_index_info structure */ + memset(pUsage, 0, sizeof(pUsage[0])*nConstraint); + assert( pIdxInfo->needToFreeIdxStr==0 ); + pIdxInfo->idxStr = 0; + pIdxInfo->idxNum = 0; + pIdxInfo->orderByConsumed = 0; + pIdxInfo->estimatedCost = SQLITE_BIG_DBL / (double)2; + pIdxInfo->estimatedRows = 25; + pIdxInfo->idxFlags = 0; + pHidden->mHandleIn = 0; + + /* Invoke the virtual table xBestIndex() method */ + rc = vtabBestIndex(pParse, pSrc->pSTab, pIdxInfo); + if( rc ){ + if( rc==SQLITE_CONSTRAINT ){ + /* If the xBestIndex method returns SQLITE_CONSTRAINT, that means + ** that the particular combination of parameters provided is unusable. + ** Make no entries in the loop table. + */ + WHERETRACE(0xffffffff, (" ^^^^--- non-viable plan rejected!\n")); + freeIdxStr(pIdxInfo); + return SQLITE_OK; + } + return rc; + } + + mxTerm = -1; + assert( pNew->nLSlot>=nConstraint ); + memset(pNew->aLTerm, 0, sizeof(pNew->aLTerm[0])*nConstraint ); + memset(&pNew->u.vtab, 0, sizeof(pNew->u.vtab)); + pIdxCons = *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint; + for(i=0; i=0 ){ + WhereTerm *pTerm; + int j = pIdxCons->iTermOffset; + if( iTerm>=nConstraint + || j<0 + || (pTerm = termFromWhereClause(pWC, j))==0 + || pNew->aLTerm[iTerm]!=0 + || pIdxCons->usable==0 + ){ + sqlite3ErrorMsg(pParse,"%s.xBestIndex malfunction",pSrc->pSTab->zName); + freeIdxStr(pIdxInfo); + return SQLITE_ERROR; + } + testcase( iTerm==nConstraint-1 ); + testcase( j==0 ); + testcase( j==pWC->nTerm-1 ); + pNew->prereq |= pTerm->prereqRight; + assert( iTermnLSlot ); + pNew->aLTerm[iTerm] = pTerm; + if( iTerm>mxTerm ) mxTerm = iTerm; + testcase( iTerm==15 ); + testcase( iTerm==16 ); + if( pUsage[i].omit ){ + if( i<16 && ((1<u.vtab.omitMask |= 1<eMatchOp==SQLITE_INDEX_CONSTRAINT_OFFSET ){ + pNew->u.vtab.bOmitOffset = 1; + } + } + if( SMASKBIT32(i) & pHidden->mHandleIn ){ + pNew->u.vtab.mHandleIn |= MASKBIT32(iTerm); + }else if( (pTerm->eOperator & WO_IN)!=0 ){ + /* A virtual table that is constrained by an IN clause may not + ** consume the ORDER BY clause because (1) the order of IN terms + ** is not necessarily related to the order of output terms and + ** (2) Multiple outputs from a single IN value will not merge + ** together. */ + pIdxInfo->orderByConsumed = 0; + pIdxInfo->idxFlags &= ~SQLITE_INDEX_SCAN_UNIQUE; + *pbIn = 1; assert( (mExclude & WO_IN)==0 ); + } + + /* Unless pbRetryLimit is non-NULL, there should be no LIMIT/OFFSET + ** terms. And if there are any, they should follow all other terms. */ + assert( pbRetryLimit || !isLimitTerm(pTerm) ); + assert( !isLimitTerm(pTerm) || i>=nConstraint-2 ); + assert( !isLimitTerm(pTerm) || i==nConstraint-1 || isLimitTerm(pTerm+1) ); + + if( isLimitTerm(pTerm) && (*pbIn || !allConstraintsUsed(pUsage, i)) ){ + /* If there is an IN(...) term handled as an == (separate call to + ** xFilter for each value on the RHS of the IN) and a LIMIT or + ** OFFSET term handled as well, the plan is unusable. Similarly, + ** if there is a LIMIT/OFFSET and there are other unused terms, + ** the plan cannot be used. In these cases set variable *pbRetryLimit + ** to true to tell the caller to retry with LIMIT and OFFSET + ** disabled. */ + freeIdxStr(pIdxInfo); + *pbRetryLimit = 1; + return SQLITE_OK; + } + } + } + + pNew->nLTerm = mxTerm+1; + for(i=0; i<=mxTerm; i++){ + if( pNew->aLTerm[i]==0 ){ + /* The non-zero argvIdx values must be contiguous. Raise an + ** error if they are not */ + sqlite3ErrorMsg(pParse,"%s.xBestIndex malfunction",pSrc->pSTab->zName); + freeIdxStr(pIdxInfo); + return SQLITE_ERROR; + } + } + assert( pNew->nLTerm<=pNew->nLSlot ); + pNew->u.vtab.idxNum = pIdxInfo->idxNum; + pNew->u.vtab.needFree = pIdxInfo->needToFreeIdxStr; + pIdxInfo->needToFreeIdxStr = 0; + pNew->u.vtab.idxStr = pIdxInfo->idxStr; + pNew->u.vtab.isOrdered = (i8)(pIdxInfo->orderByConsumed ? + pIdxInfo->nOrderBy : 0); + pNew->u.vtab.bIdxNumHex = (pIdxInfo->idxFlags&SQLITE_INDEX_SCAN_HEX)!=0; + pNew->rSetup = 0; + pNew->rRun = sqlite3LogEstFromDouble(pIdxInfo->estimatedCost); + pNew->nOut = sqlite3LogEst(pIdxInfo->estimatedRows); + + /* Set the WHERE_ONEROW flag if the xBestIndex() method indicated + ** that the scan will visit at most one row. Clear it otherwise. */ + if( pIdxInfo->idxFlags & SQLITE_INDEX_SCAN_UNIQUE ){ + pNew->wsFlags |= WHERE_ONEROW; + }else{ + pNew->wsFlags &= ~WHERE_ONEROW; + } + rc = whereLoopInsert(pBuilder, pNew); + if( pNew->u.vtab.needFree ){ + sqlite3_free(pNew->u.vtab.idxStr); + pNew->u.vtab.needFree = 0; + } + WHERETRACE(0xffffffff, (" bIn=%d prereqIn=%04llx prereqOut=%04llx\n", + *pbIn, (sqlite3_uint64)mPrereq, + (sqlite3_uint64)(pNew->prereq & ~mPrereq))); + + return rc; +} + +/* +** Return the collating sequence for a constraint passed into xBestIndex. +** +** pIdxInfo must be an sqlite3_index_info structure passed into xBestIndex. +** This routine depends on there being a HiddenIndexInfo structure immediately +** following the sqlite3_index_info structure. +** +** Return a pointer to the collation name: +** +** 1. If there is an explicit COLLATE operator on the constraint, return it. +** +** 2. Else, if the column has an alternative collation, return that. +** +** 3. Otherwise, return "BINARY". +*/ +SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info *pIdxInfo, int iCons){ + HiddenIndexInfo *pHidden = (HiddenIndexInfo*)&pIdxInfo[1]; + const char *zRet = 0; + if( iCons>=0 && iConsnConstraint ){ + CollSeq *pC = 0; + int iTerm = pIdxInfo->aConstraint[iCons].iTermOffset; + Expr *pX = termFromWhereClause(pHidden->pWC, iTerm)->pExpr; + if( pX->pLeft ){ + pC = sqlite3ExprCompareCollSeq(pHidden->pParse, pX); + } + zRet = (pC ? pC->zName : sqlite3StrBINARY); + } + return zRet; +} + +/* +** Return true if constraint iCons is really an IN(...) constraint, or +** false otherwise. If iCons is an IN(...) constraint, set (if bHandle!=0) +** or clear (if bHandle==0) the flag to handle it using an iterator. +*/ +SQLITE_API int sqlite3_vtab_in(sqlite3_index_info *pIdxInfo, int iCons, int bHandle){ + HiddenIndexInfo *pHidden = (HiddenIndexInfo*)&pIdxInfo[1]; + u32 m = SMASKBIT32(iCons); + if( m & pHidden->mIn ){ + if( bHandle==0 ){ + pHidden->mHandleIn &= ~m; + }else if( bHandle>0 ){ + pHidden->mHandleIn |= m; + } + return 1; + } + return 0; +} + +/* +** This interface is callable from within the xBestIndex callback only. +** +** If possible, set (*ppVal) to point to an object containing the value +** on the right-hand-side of constraint iCons. +*/ +SQLITE_API int sqlite3_vtab_rhs_value( + sqlite3_index_info *pIdxInfo, /* Copy of first argument to xBestIndex */ + int iCons, /* Constraint for which RHS is wanted */ + sqlite3_value **ppVal /* Write value extracted here */ +){ + HiddenIndexInfo *pH = (HiddenIndexInfo*)&pIdxInfo[1]; + sqlite3_value *pVal = 0; + int rc = SQLITE_OK; + if( iCons<0 || iCons>=pIdxInfo->nConstraint ){ + rc = SQLITE_MISUSE_BKPT; /* EV: R-30545-25046 */ + }else{ + if( pH->aRhs[iCons]==0 ){ + WhereTerm *pTerm = termFromWhereClause( + pH->pWC, pIdxInfo->aConstraint[iCons].iTermOffset + ); + rc = sqlite3ValueFromExpr( + pH->pParse->db, pTerm->pExpr->pRight, ENC(pH->pParse->db), + SQLITE_AFF_BLOB, &pH->aRhs[iCons] + ); + testcase( rc!=SQLITE_OK ); + } + pVal = pH->aRhs[iCons]; + } + *ppVal = pVal; + + if( rc==SQLITE_OK && pVal==0 ){ /* IMP: R-19933-32160 */ + rc = SQLITE_NOTFOUND; /* IMP: R-36424-56542 */ + } + + return rc; +} + +/* +** Return true if ORDER BY clause may be handled as DISTINCT. +*/ +SQLITE_API int sqlite3_vtab_distinct(sqlite3_index_info *pIdxInfo){ + HiddenIndexInfo *pHidden = (HiddenIndexInfo*)&pIdxInfo[1]; + assert( pHidden->eDistinct>=0 && pHidden->eDistinct<=3 ); + return pHidden->eDistinct; +} + +/* +** Cause the prepared statement that is associated with a call to +** xBestIndex to potentially use all schemas. If the statement being +** prepared is read-only, then just start read transactions on all +** schemas. But if this is a write operation, start writes on all +** schemas. +** +** This is used by the (built-in) sqlite_dbpage virtual table. +*/ +SQLITE_PRIVATE void sqlite3VtabUsesAllSchemas(Parse *pParse){ + int nDb = pParse->db->nDb; + int i; + for(i=0; iwriteMask) ){ + for(i=0; ipNew->iTab. That table is guaranteed to be a virtual table. +** +** If there are no LEFT or CROSS JOIN joins in the query, both mPrereq and +** mUnusable are set to 0. Otherwise, mPrereq is a mask of all FROM clause +** entries that occur before the virtual table in the FROM clause and are +** separated from it by at least one LEFT or CROSS JOIN. Similarly, the +** mUnusable mask contains all FROM clause entries that occur after the +** virtual table and are separated from it by at least one LEFT or +** CROSS JOIN. +** +** For example, if the query were: +** +** ... FROM t1, t2 LEFT JOIN t3, t4, vt CROSS JOIN t5, t6; +** +** then mPrereq corresponds to (t1, t2) and mUnusable to (t5, t6). +** +** All the tables in mPrereq must be scanned before the current virtual +** table. So any terms for which all prerequisites are satisfied by +** mPrereq may be specified as "usable" in all calls to xBestIndex. +** Conversely, all tables in mUnusable must be scanned after the current +** virtual table, so any terms for which the prerequisites overlap with +** mUnusable should always be configured as "not-usable" for xBestIndex. +*/ +static int whereLoopAddVirtual( + WhereLoopBuilder *pBuilder, /* WHERE clause information */ + Bitmask mPrereq, /* Tables that must be scanned before this one */ + Bitmask mUnusable /* Tables that must be scanned after this one */ +){ + int rc = SQLITE_OK; /* Return code */ + WhereInfo *pWInfo; /* WHERE analysis context */ + Parse *pParse; /* The parsing context */ + WhereClause *pWC; /* The WHERE clause */ + SrcItem *pSrc; /* The FROM clause term to search */ + sqlite3_index_info *p; /* Object to pass to xBestIndex() */ + int nConstraint; /* Number of constraints in p */ + int bIn; /* True if plan uses IN(...) operator */ + WhereLoop *pNew; + Bitmask mBest; /* Tables used by best possible plan */ + u16 mNoOmit; + int bRetry = 0; /* True to retry with LIMIT/OFFSET disabled */ + + assert( (mPrereq & mUnusable)==0 ); + pWInfo = pBuilder->pWInfo; + pParse = pWInfo->pParse; + pWC = pBuilder->pWC; + pNew = pBuilder->pNew; + pSrc = &pWInfo->pTabList->a[pNew->iTab]; + assert( IsVirtual(pSrc->pSTab) ); + p = allocateIndexInfo(pWInfo, pWC, mUnusable, pSrc, &mNoOmit); + if( p==0 ) return SQLITE_NOMEM_BKPT; + pNew->rSetup = 0; + pNew->wsFlags = WHERE_VIRTUALTABLE; + pNew->nLTerm = 0; + pNew->u.vtab.needFree = 0; + nConstraint = p->nConstraint; + if( whereLoopResize(pParse->db, pNew, nConstraint) ){ + freeIndexInfo(pParse->db, p); + return SQLITE_NOMEM_BKPT; + } + + /* First call xBestIndex() with all constraints usable. */ + WHERETRACE(0x800, ("BEGIN %s.addVirtual()\n", pSrc->pSTab->zName)); + WHERETRACE(0x800, (" VirtualOne: all usable\n")); + rc = whereLoopAddVirtualOne( + pBuilder, mPrereq, ALLBITS, 0, p, mNoOmit, &bIn, &bRetry + ); + if( bRetry ){ + assert( rc==SQLITE_OK ); + rc = whereLoopAddVirtualOne( + pBuilder, mPrereq, ALLBITS, 0, p, mNoOmit, &bIn, 0 + ); + } + + /* If the call to xBestIndex() with all terms enabled produced a plan + ** that does not require any source tables (IOW: a plan with mBest==0) + ** and does not use an IN(...) operator, then there is no point in making + ** any further calls to xBestIndex() since they will all return the same + ** result (if the xBestIndex() implementation is sane). */ + if( rc==SQLITE_OK && ((mBest = (pNew->prereq & ~mPrereq))!=0 || bIn) ){ + int seenZero = 0; /* True if a plan with no prereqs seen */ + int seenZeroNoIN = 0; /* Plan with no prereqs and no IN(...) seen */ + Bitmask mPrev = 0; + Bitmask mBestNoIn = 0; + + /* If the plan produced by the earlier call uses an IN(...) term, call + ** xBestIndex again, this time with IN(...) terms disabled. */ + if( bIn ){ + WHERETRACE(0x800, (" VirtualOne: all usable w/o IN\n")); + rc = whereLoopAddVirtualOne( + pBuilder, mPrereq, ALLBITS, WO_IN, p, mNoOmit, &bIn, 0); + assert( bIn==0 ); + mBestNoIn = pNew->prereq & ~mPrereq; + if( mBestNoIn==0 ){ + seenZero = 1; + seenZeroNoIN = 1; + } + } + + /* Call xBestIndex once for each distinct value of (prereqRight & ~mPrereq) + ** in the set of terms that apply to the current virtual table. */ + while( rc==SQLITE_OK ){ + int i; + Bitmask mNext = ALLBITS; + assert( mNext>0 ); + for(i=0; iaConstraint[i].iTermOffset; + Bitmask mThis = termFromWhereClause(pWC, iTerm)->prereqRight & ~mPrereq; + if( mThis>mPrev && mThisprereq==mPrereq ){ + seenZero = 1; + if( bIn==0 ) seenZeroNoIN = 1; + } + } + + /* If the calls to xBestIndex() in the above loop did not find a plan + ** that requires no source tables at all (i.e. one guaranteed to be + ** usable), make a call here with all source tables disabled */ + if( rc==SQLITE_OK && seenZero==0 ){ + WHERETRACE(0x800, (" VirtualOne: all disabled\n")); + rc = whereLoopAddVirtualOne( + pBuilder, mPrereq, mPrereq, 0, p, mNoOmit, &bIn, 0); + if( bIn==0 ) seenZeroNoIN = 1; + } + + /* If the calls to xBestIndex() have so far failed to find a plan + ** that requires no source tables at all and does not use an IN(...) + ** operator, make a final call to obtain one here. */ + if( rc==SQLITE_OK && seenZeroNoIN==0 ){ + WHERETRACE(0x800, (" VirtualOne: all disabled and w/o IN\n")); + rc = whereLoopAddVirtualOne( + pBuilder, mPrereq, mPrereq, WO_IN, p, mNoOmit, &bIn, 0); + } + } + + freeIndexInfo(pParse->db, p); + WHERETRACE(0x800, ("END %s.addVirtual(), rc=%d\n", pSrc->pSTab->zName, rc)); + return rc; +} +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +/* +** Add WhereLoop entries to handle OR terms. This works for either +** btrees or virtual tables. +*/ +static int whereLoopAddOr( + WhereLoopBuilder *pBuilder, + Bitmask mPrereq, + Bitmask mUnusable +){ + WhereInfo *pWInfo = pBuilder->pWInfo; + WhereClause *pWC; + WhereLoop *pNew; + WhereTerm *pTerm, *pWCEnd; + int rc = SQLITE_OK; + int iCur; + WhereClause tempWC; + WhereLoopBuilder sSubBuild; + WhereOrSet sSum, sCur; + SrcItem *pItem; + + pWC = pBuilder->pWC; + pWCEnd = pWC->a + pWC->nTerm; + pNew = pBuilder->pNew; + memset(&sSum, 0, sizeof(sSum)); + pItem = pWInfo->pTabList->a + pNew->iTab; + iCur = pItem->iCursor; + + /* The multi-index OR optimization does not work for RIGHT and FULL JOIN */ + if( pItem->fg.jointype & JT_RIGHT ) return SQLITE_OK; + + for(pTerm=pWC->a; pTermeOperator & WO_OR)!=0 + && (pTerm->u.pOrInfo->indexable & pNew->maskSelf)!=0 + ){ + WhereClause * const pOrWC = &pTerm->u.pOrInfo->wc; + WhereTerm * const pOrWCEnd = &pOrWC->a[pOrWC->nTerm]; + WhereTerm *pOrTerm; + int once = 1; + int i, j; + + sSubBuild = *pBuilder; + sSubBuild.pOrSet = &sCur; + + WHERETRACE(0x400, ("Begin processing OR-clause %p\n", pTerm)); + for(pOrTerm=pOrWC->a; pOrTermeOperator & WO_AND)!=0 ){ + sSubBuild.pWC = &pOrTerm->u.pAndInfo->wc; + }else if( pOrTerm->leftCursor==iCur ){ + tempWC.pWInfo = pWC->pWInfo; + tempWC.pOuter = pWC; + tempWC.op = TK_AND; + tempWC.nTerm = 1; + tempWC.nBase = 1; + tempWC.a = pOrTerm; + sSubBuild.pWC = &tempWC; + }else{ + continue; + } + sCur.n = 0; +#ifdef WHERETRACE_ENABLED + WHERETRACE(0x400, ("OR-term %d of %p has %d subterms:\n", + (int)(pOrTerm-pOrWC->a), pTerm, sSubBuild.pWC->nTerm)); + if( sqlite3WhereTrace & 0x20000 ){ + sqlite3WhereClausePrint(sSubBuild.pWC); + } +#endif +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pItem->pSTab) ){ + rc = whereLoopAddVirtual(&sSubBuild, mPrereq, mUnusable); + }else +#endif + { + rc = whereLoopAddBtree(&sSubBuild, mPrereq); + } + if( rc==SQLITE_OK ){ + rc = whereLoopAddOr(&sSubBuild, mPrereq, mUnusable); + } + testcase( rc==SQLITE_NOMEM && sCur.n>0 ); + testcase( rc==SQLITE_DONE ); + if( sCur.n==0 ){ + sSum.n = 0; + break; + }else if( once ){ + whereOrMove(&sSum, &sCur); + once = 0; + }else{ + WhereOrSet sPrev; + whereOrMove(&sPrev, &sSum); + sSum.n = 0; + for(i=0; inLTerm = 1; + pNew->aLTerm[0] = pTerm; + pNew->wsFlags = WHERE_MULTI_OR; + pNew->rSetup = 0; + pNew->iSortIdx = 0; + memset(&pNew->u, 0, sizeof(pNew->u)); + for(i=0; rc==SQLITE_OK && irRun = sSum.a[i].rRun + 1; + pNew->nOut = sSum.a[i].nOut; + pNew->prereq = sSum.a[i].prereq; + rc = whereLoopInsert(pBuilder, pNew); + } + WHERETRACE(0x400, ("End processing OR-clause %p\n", pTerm)); + } + } + return rc; +} + +/* +** Add all WhereLoop objects for all tables +*/ +static int whereLoopAddAll(WhereLoopBuilder *pBuilder){ + WhereInfo *pWInfo = pBuilder->pWInfo; + Bitmask mPrereq = 0; + Bitmask mPrior = 0; + int iTab; + SrcList *pTabList = pWInfo->pTabList; + SrcItem *pItem; + SrcItem *pEnd = &pTabList->a[pWInfo->nLevel]; + sqlite3 *db = pWInfo->pParse->db; + int rc = SQLITE_OK; + int bFirstPastRJ = 0; + int hasRightJoin = 0; + WhereLoop *pNew; + + + /* Loop over the tables in the join, from left to right */ + pNew = pBuilder->pNew; + + /* Verify that pNew has already been initialized */ + assert( pNew->nLTerm==0 ); + assert( pNew->wsFlags==0 ); + assert( pNew->nLSlot>=ArraySize(pNew->aLTermSpace) ); + assert( pNew->aLTerm!=0 ); + + pBuilder->iPlanLimit = SQLITE_QUERY_PLANNER_LIMIT; + for(iTab=0, pItem=pTabList->a; pItemiTab = iTab; + pBuilder->iPlanLimit += SQLITE_QUERY_PLANNER_LIMIT_INCR; + pNew->maskSelf = sqlite3WhereGetMask(&pWInfo->sMaskSet, pItem->iCursor); + if( bFirstPastRJ + || (pItem->fg.jointype & (JT_OUTER|JT_CROSS|JT_LTORJ))!=0 + ){ + /* Add prerequisites to prevent reordering of FROM clause terms + ** across CROSS joins and outer joins. The bFirstPastRJ boolean + ** prevents the right operand of a RIGHT JOIN from being swapped with + ** other elements even further to the right. + ** + ** The JT_LTORJ case and the hasRightJoin flag work together to + ** prevent FROM-clause terms from moving from the right side of + ** a LEFT JOIN over to the left side of that join if the LEFT JOIN + ** is itself on the left side of a RIGHT JOIN. + */ + if( pItem->fg.jointype & JT_LTORJ ) hasRightJoin = 1; + mPrereq |= mPrior; + bFirstPastRJ = (pItem->fg.jointype & JT_RIGHT)!=0; + }else if( !hasRightJoin ){ + mPrereq = 0; + } +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( IsVirtual(pItem->pSTab) ){ + SrcItem *p; + for(p=&pItem[1]; pfg.jointype & (JT_OUTER|JT_CROSS)) ){ + mUnusable |= sqlite3WhereGetMask(&pWInfo->sMaskSet, p->iCursor); + } + } + rc = whereLoopAddVirtual(pBuilder, mPrereq, mUnusable); + }else +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + { + rc = whereLoopAddBtree(pBuilder, mPrereq); + } + if( rc==SQLITE_OK && pBuilder->pWC->hasOr ){ + rc = whereLoopAddOr(pBuilder, mPrereq, mUnusable); + } + mPrior |= pNew->maskSelf; + if( rc || db->mallocFailed ){ + if( rc==SQLITE_DONE ){ + /* We hit the query planner search limit set by iPlanLimit */ + sqlite3_log(SQLITE_WARNING, "abbreviated query algorithm search"); + rc = SQLITE_OK; + }else{ + break; + } + } + } + + whereLoopClear(db, pNew); + return rc; +} + +/* Implementation of the order-by-subquery optimization: +** +** WhereLoop pLoop, which the iLoop-th term of the nested loop, is really +** a subquery or CTE that has an ORDER BY clause. See if any of the terms +** in the subquery ORDER BY clause will satisfy pOrderBy from the outer +** query. Mark off all satisfied terms (by setting bits in *pOBSat) and +** return TRUE if they do. If not, return false. +** +** Example: +** +** CREATE TABLE t1(a,b,c, PRIMARY KEY(a,b)); +** CREATE TABLE t2(x,y); +** WITH t3(p,q) AS MATERIALIZED (SELECT x+y, x-y FROM t2 ORDER BY x+y) +** SELECT * FROM t3 JOIN t1 ON a=q ORDER BY p, b; +** +** The CTE named "t3" comes out in the natural order of "p", so the first +** first them of "ORDER BY p,b" is satisfied by a sequential scan of "t3" +** and sorting only needs to occur on the second term "b". +** +** Limitations: +** +** (1) The optimization is not applied if the outer ORDER BY contains +** a COLLATE clause. The optimization might be applied if the +** outer ORDER BY uses NULLS FIRST, NULLS LAST, ASC, and/or DESC as +** long as the subquery ORDER BY does the same. But if the +** outer ORDER BY uses COLLATE, even a redundant COLLATE, the +** optimization is bypassed. +** +** (2) The subquery ORDER BY terms must exactly match subquery result +** columns, including any COLLATE annotations. This routine relies +** on iOrderByCol to do matching between order by terms and result +** columns, and iOrderByCol will not be set if the result column +** and ORDER BY collations differ. +** +** (3) The subquery and outer ORDER BY can be in opposite directions as +** long as the subquery is materialized. If the subquery is +** implemented as a co-routine, the sort orders must be in the same +** direction because there is no way to run a co-routine backwards. +*/ +static SQLITE_NOINLINE int wherePathMatchSubqueryOB( + WhereInfo *pWInfo, /* The WHERE clause */ + WhereLoop *pLoop, /* The nested loop term that is a subquery */ + int iLoop, /* Which level of the nested loop. 0==outermost */ + int iCur, /* Cursor used by the this loop */ + ExprList *pOrderBy, /* The ORDER BY clause on the whole query */ + Bitmask *pRevMask, /* When loops need to go in reverse order */ + Bitmask *pOBSat /* Which terms of pOrderBy are satisfied so far */ +){ + int iOB; /* Index into pOrderBy->a[] */ + int jSub; /* Index into pSubOB->a[] */ + u8 rev = 0; /* True if iOB and jSub sort in opposite directions */ + u8 revIdx = 0; /* Sort direction for jSub */ + Expr *pOBExpr; /* Current term of outer ORDER BY */ + ExprList *pSubOB; /* Complete ORDER BY on the subquery */ + + pSubOB = pLoop->u.btree.pOrderBy; + assert( pSubOB!=0 ); + for(iOB=0; (MASKBIT(iOB) & *pOBSat)!=0; iOB++){} + for(jSub=0; jSubnExpr && iOBnExpr; jSub++, iOB++){ + if( pSubOB->a[jSub].u.x.iOrderByCol==0 ) break; + pOBExpr = pOrderBy->a[iOB].pExpr; + if( pOBExpr->op!=TK_COLUMN && pOBExpr->op!=TK_AGG_COLUMN ) break; + if( pOBExpr->iTable!=iCur ) break; + if( pOBExpr->iColumn!=pSubOB->a[jSub].u.x.iOrderByCol-1 ) break; + if( (pWInfo->wctrlFlags & WHERE_GROUPBY)==0 ){ + u8 sfOB = pOrderBy->a[iOB].fg.sortFlags; /* sortFlags for iOB */ + u8 sfSub = pSubOB->a[jSub].fg.sortFlags; /* sortFlags for jSub */ + if( (sfSub & KEYINFO_ORDER_BIGNULL) != (sfOB & KEYINFO_ORDER_BIGNULL) ){ + break; + } + revIdx = sfSub & KEYINFO_ORDER_DESC; + if( jSub>0 ){ + if( (rev^revIdx)!=(sfOB & KEYINFO_ORDER_DESC) ){ + break; + } + }else{ + rev = revIdx ^ (sfOB & KEYINFO_ORDER_DESC); + if( rev ){ + if( (pLoop->wsFlags & WHERE_COROUTINE)!=0 ){ + /* Cannot run a co-routine in reverse order */ + break; + } + *pRevMask |= MASKBIT(iLoop); + } + } + } + *pOBSat |= MASKBIT(iOB); + } + return jSub>0; +} + +/* +** Examine a WherePath (with the addition of the extra WhereLoop of the 6th +** parameters) to see if it outputs rows in the requested ORDER BY +** (or GROUP BY) without requiring a separate sort operation. Return N: +** +** N>0: N terms of the ORDER BY clause are satisfied +** N==0: No terms of the ORDER BY clause are satisfied +** N<0: Unknown yet how many terms of ORDER BY might be satisfied. +** +** Note that processing for WHERE_GROUPBY and WHERE_DISTINCTBY is not as +** strict. With GROUP BY and DISTINCT the only requirement is that +** equivalent rows appear immediately adjacent to one another. GROUP BY +** and DISTINCT do not require rows to appear in any particular order as long +** as equivalent rows are grouped together. Thus for GROUP BY and DISTINCT +** the pOrderBy terms can be matched in any order. With ORDER BY, the +** pOrderBy terms must be matched in strict left-to-right order. +*/ +static i8 wherePathSatisfiesOrderBy( + WhereInfo *pWInfo, /* The WHERE clause */ + ExprList *pOrderBy, /* ORDER BY or GROUP BY or DISTINCT clause to check */ + WherePath *pPath, /* The WherePath to check */ + u16 wctrlFlags, /* WHERE_GROUPBY or _DISTINCTBY or _ORDERBY_LIMIT */ + u16 nLoop, /* Number of entries in pPath->aLoop[] */ + WhereLoop *pLast, /* Add this WhereLoop to the end of pPath->aLoop[] */ + Bitmask *pRevMask /* OUT: Mask of WhereLoops to run in reverse order */ +){ + u8 revSet; /* True if rev is known */ + u8 rev; /* Composite sort order */ + u8 revIdx; /* Index sort order */ + u8 isOrderDistinct; /* All prior WhereLoops are order-distinct */ + u8 distinctColumns; /* True if the loop has UNIQUE NOT NULL columns */ + u8 isMatch; /* iColumn matches a term of the ORDER BY clause */ + u16 eqOpMask; /* Allowed equality operators */ + u16 nKeyCol; /* Number of key columns in pIndex */ + u16 nColumn; /* Total number of ordered columns in the index */ + u16 nOrderBy; /* Number terms in the ORDER BY clause */ + int iLoop; /* Index of WhereLoop in pPath being processed */ + int i, j; /* Loop counters */ + int iCur; /* Cursor number for current WhereLoop */ + int iColumn; /* A column number within table iCur */ + WhereLoop *pLoop = 0; /* Current WhereLoop being processed. */ + WhereTerm *pTerm; /* A single term of the WHERE clause */ + Expr *pOBExpr; /* An expression from the ORDER BY clause */ + CollSeq *pColl; /* COLLATE function from an ORDER BY clause term */ + Index *pIndex; /* The index associated with pLoop */ + sqlite3 *db = pWInfo->pParse->db; /* Database connection */ + Bitmask obSat = 0; /* Mask of ORDER BY terms satisfied so far */ + Bitmask obDone; /* Mask of all ORDER BY terms */ + Bitmask orderDistinctMask; /* Mask of all well-ordered loops */ + Bitmask ready; /* Mask of inner loops */ + + /* + ** We say the WhereLoop is "one-row" if it generates no more than one + ** row of output. A WhereLoop is one-row if all of the following are true: + ** (a) All index columns match with WHERE_COLUMN_EQ. + ** (b) The index is unique + ** Any WhereLoop with an WHERE_COLUMN_EQ constraint on the rowid is one-row. + ** Every one-row WhereLoop will have the WHERE_ONEROW bit set in wsFlags. + ** + ** We say the WhereLoop is "order-distinct" if the set of columns from + ** that WhereLoop that are in the ORDER BY clause are different for every + ** row of the WhereLoop. Every one-row WhereLoop is automatically + ** order-distinct. A WhereLoop that has no columns in the ORDER BY clause + ** is not order-distinct. To be order-distinct is not quite the same as being + ** UNIQUE since a UNIQUE column or index can have multiple rows that + ** are NULL and NULL values are equivalent for the purpose of order-distinct. + ** To be order-distinct, the columns must be UNIQUE and NOT NULL. + ** + ** The rowid for a table is always UNIQUE and NOT NULL so whenever the + ** rowid appears in the ORDER BY clause, the corresponding WhereLoop is + ** automatically order-distinct. + */ + + assert( pOrderBy!=0 ); + if( nLoop && OptimizationDisabled(db, SQLITE_OrderByIdxJoin) ) return 0; + + nOrderBy = pOrderBy->nExpr; + testcase( nOrderBy==BMS-1 ); + if( nOrderBy>BMS-1 ) return 0; /* Cannot optimize overly large ORDER BYs */ + isOrderDistinct = 1; + obDone = MASKBIT(nOrderBy)-1; + orderDistinctMask = 0; + ready = 0; + eqOpMask = WO_EQ | WO_IS | WO_ISNULL; + if( wctrlFlags & (WHERE_ORDERBY_LIMIT|WHERE_ORDERBY_MAX|WHERE_ORDERBY_MIN) ){ + eqOpMask |= WO_IN; + } + for(iLoop=0; isOrderDistinct && obSat0 ) ready |= pLoop->maskSelf; + if( iLoopaLoop[iLoop]; + if( wctrlFlags & WHERE_ORDERBY_LIMIT ) continue; + }else{ + pLoop = pLast; + } + if( pLoop->wsFlags & WHERE_VIRTUALTABLE ){ + if( pLoop->u.vtab.isOrdered + && ((wctrlFlags&(WHERE_DISTINCTBY|WHERE_SORTBYGROUP))!=WHERE_DISTINCTBY) + ){ + obSat = obDone; + }else{ + /* No further ORDER BY terms may be matched. So this call should + ** return >=0, not -1. Clear isOrderDistinct to ensure it does so. */ + isOrderDistinct = 0; + } + break; + } + iCur = pWInfo->pTabList->a[pLoop->iTab].iCursor; + + /* Mark off any ORDER BY term X that is a column in the table of + ** the current loop for which there is term in the WHERE + ** clause of the form X IS NULL or X=? that reference only outer + ** loops. + */ + for(i=0; ia[i].pExpr); + if( NEVER(pOBExpr==0) ) continue; + if( pOBExpr->op!=TK_COLUMN && pOBExpr->op!=TK_AGG_COLUMN ) continue; + if( pOBExpr->iTable!=iCur ) continue; + pTerm = sqlite3WhereFindTerm(&pWInfo->sWC, iCur, pOBExpr->iColumn, + ~ready, eqOpMask, 0); + if( pTerm==0 ) continue; + if( pTerm->eOperator==WO_IN ){ + /* IN terms are only valid for sorting in the ORDER BY LIMIT + ** optimization, and then only if they are actually used + ** by the query plan */ + assert( wctrlFlags & + (WHERE_ORDERBY_LIMIT|WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX) ); + for(j=0; jnLTerm && pTerm!=pLoop->aLTerm[j]; j++){} + if( j>=pLoop->nLTerm ) continue; + } + if( (pTerm->eOperator&(WO_EQ|WO_IS))!=0 && pOBExpr->iColumn>=0 ){ + Parse *pParse = pWInfo->pParse; + CollSeq *pColl1 = sqlite3ExprNNCollSeq(pParse, pOrderBy->a[i].pExpr); + CollSeq *pColl2 = sqlite3ExprCompareCollSeq(pParse, pTerm->pExpr); + assert( pColl1 ); + if( pColl2==0 || sqlite3StrICmp(pColl1->zName, pColl2->zName) ){ + continue; + } + testcase( pTerm->pExpr->op==TK_IS ); + } + obSat |= MASKBIT(i); + } + + if( (pLoop->wsFlags & WHERE_ONEROW)==0 ){ + if( pLoop->wsFlags & WHERE_IPK ){ + if( pLoop->u.btree.pOrderBy + && OptimizationEnabled(db, SQLITE_OrderBySubq) + && wherePathMatchSubqueryOB(pWInfo,pLoop,iLoop,iCur, + pOrderBy,pRevMask, &obSat) + ){ + nColumn = 0; + isOrderDistinct = 0; + }else{ + nColumn = 1; + } + pIndex = 0; + nKeyCol = 0; + }else if( (pIndex = pLoop->u.btree.pIndex)==0 || pIndex->bUnordered ){ + return 0; + }else{ + nKeyCol = pIndex->nKeyCol; + nColumn = pIndex->nColumn; + assert( nColumn==nKeyCol+1 || !HasRowid(pIndex->pTable) ); + assert( pIndex->aiColumn[nColumn-1]==XN_ROWID + || !HasRowid(pIndex->pTable)); + /* All relevant terms of the index must also be non-NULL in order + ** for isOrderDistinct to be true. So the isOrderDistinct value + ** computed here might be a false positive. Corrections will be + ** made at tag-20210426-1 below */ + isOrderDistinct = IsUniqueIndex(pIndex) + && (pLoop->wsFlags & WHERE_SKIPSCAN)==0; + } + + /* Loop through all columns of the index and deal with the ones + ** that are not constrained by == or IN. + */ + rev = revSet = 0; + distinctColumns = 0; + for(j=0; j=pLoop->u.btree.nEq + || (pLoop->aLTerm[j]==0)==(jnSkip) + ); + if( ju.btree.nEq && j>=pLoop->nSkip ){ + u16 eOp = pLoop->aLTerm[j]->eOperator; + + /* Skip over == and IS and ISNULL terms. (Also skip IN terms when + ** doing WHERE_ORDERBY_LIMIT processing). Except, IS and ISNULL + ** terms imply that the index is not UNIQUE NOT NULL in which case + ** the loop need to be marked as not order-distinct because it can + ** have repeated NULL rows. + ** + ** If the current term is a column of an ((?,?) IN (SELECT...)) + ** expression for which the SELECT returns more than one column, + ** check that it is the only column used by this loop. Otherwise, + ** if it is one of two or more, none of the columns can be + ** considered to match an ORDER BY term. + */ + if( (eOp & eqOpMask)!=0 ){ + if( eOp & (WO_ISNULL|WO_IS) ){ + testcase( eOp & WO_ISNULL ); + testcase( eOp & WO_IS ); + testcase( isOrderDistinct ); + isOrderDistinct = 0; + } + continue; + }else if( ALWAYS(eOp & WO_IN) ){ + /* ALWAYS() justification: eOp is an equality operator due to the + ** ju.btree.nEq constraint above. Any equality other + ** than WO_IN is captured by the previous "if". So this one + ** always has to be WO_IN. */ + Expr *pX = pLoop->aLTerm[j]->pExpr; + for(i=j+1; iu.btree.nEq; i++){ + if( pLoop->aLTerm[i]->pExpr==pX ){ + assert( (pLoop->aLTerm[i]->eOperator & WO_IN) ); + bOnce = 0; + break; + } + } + } + } + + /* Get the column number in the table (iColumn) and sort order + ** (revIdx) for the j-th column of the index. + */ + if( pIndex ){ + iColumn = pIndex->aiColumn[j]; + revIdx = pIndex->aSortOrder[j] & KEYINFO_ORDER_DESC; + if( iColumn==pIndex->pTable->iPKey ) iColumn = XN_ROWID; + }else{ + iColumn = XN_ROWID; + revIdx = 0; + } + + /* An unconstrained column that might be NULL means that this + ** WhereLoop is not well-ordered. tag-20210426-1 + */ + if( isOrderDistinct ){ + if( iColumn>=0 + && j>=pLoop->u.btree.nEq + && pIndex->pTable->aCol[iColumn].notNull==0 + ){ + isOrderDistinct = 0; + } + if( iColumn==XN_EXPR ){ + isOrderDistinct = 0; + } + } + + /* Find the ORDER BY term that corresponds to the j-th column + ** of the index and mark that ORDER BY term having been satisfied. + */ + isMatch = 0; + for(i=0; bOnce && ia[i].pExpr); + testcase( wctrlFlags & WHERE_GROUPBY ); + testcase( wctrlFlags & WHERE_DISTINCTBY ); + if( NEVER(pOBExpr==0) ) continue; + if( (wctrlFlags & (WHERE_GROUPBY|WHERE_DISTINCTBY))==0 ) bOnce = 0; + if( iColumn>=XN_ROWID ){ + if( pOBExpr->op!=TK_COLUMN && pOBExpr->op!=TK_AGG_COLUMN ) continue; + if( pOBExpr->iTable!=iCur ) continue; + if( pOBExpr->iColumn!=iColumn ) continue; + }else{ + Expr *pIxExpr = pIndex->aColExpr->a[j].pExpr; + if( sqlite3ExprCompareSkip(pOBExpr, pIxExpr, iCur) ){ + continue; + } + } + if( iColumn!=XN_ROWID ){ + pColl = sqlite3ExprNNCollSeq(pWInfo->pParse, pOrderBy->a[i].pExpr); + if( sqlite3StrICmp(pColl->zName, pIndex->azColl[j])!=0 ) continue; + } + if( wctrlFlags & WHERE_DISTINCTBY ){ + pLoop->u.btree.nDistinctCol = j+1; + } + isMatch = 1; + break; + } + if( isMatch && (wctrlFlags & WHERE_GROUPBY)==0 ){ + /* Make sure the sort order is compatible in an ORDER BY clause. + ** Sort order is irrelevant for a GROUP BY clause. */ + if( revSet ){ + if( (rev ^ revIdx) + != (pOrderBy->a[i].fg.sortFlags&KEYINFO_ORDER_DESC) + ){ + isMatch = 0; + } + }else{ + rev = revIdx ^ (pOrderBy->a[i].fg.sortFlags & KEYINFO_ORDER_DESC); + if( rev ) *pRevMask |= MASKBIT(iLoop); + revSet = 1; + } + } + if( isMatch && (pOrderBy->a[i].fg.sortFlags & KEYINFO_ORDER_BIGNULL) ){ + if( j==pLoop->u.btree.nEq ){ + pLoop->wsFlags |= WHERE_BIGNULL_SORT; + }else{ + isMatch = 0; + } + } + if( isMatch ){ + if( iColumn==XN_ROWID ){ + testcase( distinctColumns==0 ); + distinctColumns = 1; + } + obSat |= MASKBIT(i); + }else{ + /* No match found */ + if( j==0 || jmaskSelf; + for(i=0; ia[i].pExpr; + mTerm = sqlite3WhereExprUsage(&pWInfo->sMaskSet,p); + if( mTerm==0 && !sqlite3ExprIsConstant(0,p) ) continue; + if( (mTerm&~orderDistinctMask)==0 ){ + obSat |= MASKBIT(i); + } + } + } + } /* End the loop over all WhereLoops from outer-most down to inner-most */ + if( obSat==obDone ) return (i8)nOrderBy; + if( !isOrderDistinct ){ + for(i=nOrderBy-1; i>0; i--){ + Bitmask m = ALWAYS(iwctrlFlags & (WHERE_GROUPBY|WHERE_DISTINCTBY) ); + assert( pWInfo->wctrlFlags & WHERE_SORTBYGROUP ); + return pWInfo->sorted; +} + +#ifdef WHERETRACE_ENABLED +/* For debugging use only: */ +static const char *wherePathName(WherePath *pPath, int nLoop, WhereLoop *pLast){ + static char zName[65]; + int i; + for(i=0; iaLoop[i]->cId; } + if( pLast ) zName[i++] = pLast->cId; + zName[i] = 0; + return zName; +} +#endif + +/* +** Return the cost of sorting nRow rows, assuming that the keys have +** nOrderby columns and that the first nSorted columns are already in +** order. +*/ +static LogEst whereSortingCost( + WhereInfo *pWInfo, /* Query planning context */ + LogEst nRow, /* Estimated number of rows to sort */ + int nOrderBy, /* Number of ORDER BY clause terms */ + int nSorted /* Number of initial ORDER BY terms naturally in order */ +){ + /* Estimated cost of a full external sort, where N is + ** the number of rows to sort is: + ** + ** cost = (K * N * log(N)). + ** + ** Or, if the order-by clause has X terms but only the last Y + ** terms are out of order, then block-sorting will reduce the + ** sorting cost to: + ** + ** cost = (K * N * log(N)) * (Y/X) + ** + ** The constant K is at least 2.0 but will be larger if there are a + ** large number of columns to be sorted, as the sorting time is + ** proportional to the amount of content to be sorted. The algorithm + ** does not currently distinguish between fat columns (BLOBs and TEXTs) + ** and skinny columns (INTs). It just uses the number of columns as + ** an approximation for the row width. + ** + ** And extra factor of 2.0 or 3.0 is added to the sorting cost if the sort + ** is built using OP_IdxInsert and OP_Sort rather than with OP_SorterInsert. + */ + LogEst rSortCost, nCol; + assert( pWInfo->pSelect!=0 ); + assert( pWInfo->pSelect->pEList!=0 ); + /* TUNING: sorting cost proportional to the number of output columns: */ + nCol = sqlite3LogEst((pWInfo->pSelect->pEList->nExpr+59)/30); + rSortCost = nRow + nCol; + if( nSorted>0 ){ + /* Scale the result by (Y/X) */ + rSortCost += sqlite3LogEst((nOrderBy-nSorted)*100/nOrderBy) - 66; + } + + /* Multiple by log(M) where M is the number of output rows. + ** Use the LIMIT for M if it is smaller. Or if this sort is for + ** a DISTINCT operator, M will be the number of distinct output + ** rows, so fudge it downwards a bit. + */ + if( (pWInfo->wctrlFlags & WHERE_USE_LIMIT)!=0 ){ + rSortCost += 10; /* TUNING: Extra 2.0x if using LIMIT */ + if( nSorted!=0 ){ + rSortCost += 6; /* TUNING: Extra 1.5x if also using partial sort */ + } + if( pWInfo->iLimitiLimit; + } + }else if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT) ){ + /* TUNING: In the sort for a DISTINCT operator, assume that the DISTINCT + ** reduces the number of output rows by a factor of 2 */ + if( nRow>10 ){ nRow -= 10; assert( 10==sqlite3LogEst(2) ); } + } + rSortCost += estLog(nRow); + return rSortCost; +} + +/* +** Compute the maximum number of paths in the solver algorithm, for +** queries that have three or more terms in the FROM clause. Queries with +** two or fewer FROM clause terms are handled by the caller. +** +** Query planning is NP-hard. We must limit the number of paths at +** each step of the solver search algorithm to avoid exponential behavior. +** +** The value returned is a tuning parameter. Currently the value is: +** +** 18 for star queries +** 12 otherwise +** +** For the purposes of this heuristic, a star-query is defined as a query +** with a large central table that is joined using an INNER JOIN, +** not CROSS or OUTER JOINs, against four or more smaller tables. +** The central table is called the "fact" table. The smaller tables +** that get joined are "dimension tables". Also, any table that is +** self-joined cannot be a dimension table; we assume that dimension +** tables may only be joined against fact tables. +** +** SIDE EFFECT: (and really the whole point of this subroutine) +** +** If pWInfo describes a star-query, then the cost for SCANs of dimension +** WhereLoops is increased to be slightly larger than the cost of a SCAN +** in the fact table. Only SCAN costs are increased. SEARCH costs are +** unchanged. This heuristic helps keep fact tables in outer loops. Without +** this heuristic, paths with fact tables in outer loops tend to get pruned +** by the mxChoice limit on the number of paths, resulting in poor query +** plans. See the starschema1.test test module for examples of queries +** that need this heuristic to find good query plans. +** +** This heuristic can be completely disabled, so that no query is +** considered a star-query, using SQLITE_TESTCTRL_OPTIMIZATION to +** disable the SQLITE_StarQuery optimization. In the CLI, the command +** to do that is: ".testctrl opt -starquery". +** +** HISTORICAL NOTES: +** +** This optimization was first added on 2024-05-09 by check-in 38db9b5c83d. +** The original optimization reduced the cost and output size estimate for +** fact tables to help them move to outer loops. But months later (as people +** started upgrading) performance regression reports started caming in, +** including: +** +** forum post b18ef983e68d06d1 (2024-12-21) +** forum post 0025389d0860af82 (2025-01-14) +** forum post d87570a145599033 (2025-01-17) +** +** To address these, the criteria for a star-query was tightened to exclude +** cases where the fact and dimensions are separated by an outer join, and +** the affect of star-schema detection was changed to increase the rRun cost +** on just full table scans of dimension tables, rather than reducing costs +** in the all access methods of the fact table. +*/ +static int computeMxChoice(WhereInfo *pWInfo){ + int nLoop = pWInfo->nLevel; /* Number of terms in the join */ + WhereLoop *pWLoop; /* For looping over WhereLoops */ + +#ifdef SQLITE_DEBUG + /* The star-query detection code below makes use of the following + ** properties of the WhereLoop list, so verify them before + ** continuing: + ** (1) .maskSelf is the bitmask corresponding to .iTab + ** (2) The WhereLoop list is in ascending .iTab order + */ + for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){ + assert( pWLoop->maskSelf==MASKBIT(pWLoop->iTab) ); + assert( pWLoop->pNextLoop==0 || pWLoop->iTab<=pWLoop->pNextLoop->iTab ); + } +#endif /* SQLITE_DEBUG */ + + if( nLoop>=5 + && !pWInfo->bStarDone + && OptimizationEnabled(pWInfo->pParse->db, SQLITE_StarQuery) + ){ + SrcItem *aFromTabs; /* All terms of the FROM clause */ + int iFromIdx; /* Term of FROM clause is the candidate fact-table */ + Bitmask m; /* Bitmask for candidate fact-table */ + Bitmask mSelfJoin = 0; /* Tables that cannot be dimension tables */ + WhereLoop *pStart; /* Where to start searching for dimension-tables */ + + pWInfo->bStarDone = 1; /* Only do this computation once */ + + /* Look for fact tables with four or more dimensions where the + ** dimension tables are not separately from the fact tables by an outer + ** or cross join. Adjust cost weights if found. + */ + assert( !pWInfo->bStarUsed ); + aFromTabs = pWInfo->pTabList->a; + pStart = pWInfo->pLoops; + for(iFromIdx=0, m=1; iFromIdxfg.jointype & (JT_OUTER|JT_CROSS))!=0 ){ + /* If the candidate fact-table is the right table of an outer join + ** restrict the search for dimension-tables to be tables to the right + ** of the fact-table. */ + if( iFromIdx+4 > nLoop ) break; /* Impossible to reach nDep>=4 */ + while( pStart && pStart->iTab<=iFromIdx ){ + pStart = pStart->pNextLoop; + } + } + for(pWLoop=pStart; pWLoop; pWLoop=pWLoop->pNextLoop){ + if( (aFromTabs[pWLoop->iTab].fg.jointype & (JT_OUTER|JT_CROSS))!=0 ){ + /* Fact-tables and dimension-tables cannot be separated by an + ** outer join (at least for the definition of fact- and dimension- + ** used by this heuristic). */ + break; + } + if( (pWLoop->prereq & m)!=0 /* pWInfo depends on iFromIdx */ + && (pWLoop->maskSelf & mSeen)==0 /* pWInfo not already a dependency */ + && (pWLoop->maskSelf & mSelfJoin)==0 /* Not a self-join */ + ){ + if( aFromTabs[pWLoop->iTab].pSTab==pFactTab->pSTab ){ + mSelfJoin |= m; + }else{ + nDep++; + mSeen |= pWLoop->maskSelf; + } + } + } + if( nDep<=3 ) continue; + + /* If we reach this point, it means that pFactTab is a fact table + ** with four or more dimensions connected by inner joins. Proceed + ** to make cost adjustments. */ + +#ifdef WHERETRACE_ENABLED + /* Make sure rStarDelta values are initialized */ + if( !pWInfo->bStarUsed ){ + for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){ + pWLoop->rStarDelta = 0; + } + } +#endif + pWInfo->bStarUsed = 1; + + /* Compute the maximum cost of any WhereLoop for the + ** fact table plus one epsilon */ + mxRun = LOGEST_MIN; + for(pWLoop=pStart; pWLoop; pWLoop=pWLoop->pNextLoop){ + if( pWLoop->iTabiTab>iFromIdx ) break; + if( pWLoop->rRun>mxRun ) mxRun = pWLoop->rRun; + } + if( ALWAYS(mxRunpNextLoop){ + if( (pWLoop->maskSelf & mSeen)==0 ) continue; + if( pWLoop->nLTerm ) continue; + if( pWLoop->rRuniTab; + sqlite3DebugPrintf( + "Increase SCAN cost of dimension %s(%d) of fact %s(%d) to %d\n", + pDim->zAlias ? pDim->zAlias: pDim->pSTab->zName, pWLoop->iTab, + pFactTab->zAlias ? pFactTab->zAlias : pFactTab->pSTab->zName, + iFromIdx, mxRun + ); + } + pWLoop->rStarDelta = mxRun - pWLoop->rRun; +#endif /* WHERETRACE_ENABLED */ + pWLoop->rRun = mxRun; + } + } + } +#ifdef WHERETRACE_ENABLED /* 0x80000 */ + if( (sqlite3WhereTrace & 0x80000)!=0 && pWInfo->bStarUsed ){ + sqlite3DebugPrintf("WhereLoops changed by star-query heuristic:\n"); + for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){ + if( pWLoop->rStarDelta ){ + sqlite3WhereLoopPrint(pWLoop, &pWInfo->sWC); + } + } + } +#endif + } + return pWInfo->bStarUsed ? 18 : 12; +} + +/* +** Two WhereLoop objects, pCandidate and pBaseline, are known to have the +** same cost. Look deep into each to see if pCandidate is even slightly +** better than pBaseline. Return false if it is, if pCandidate is is preferred. +** Return true if pBaseline is preferred or if we cannot tell the difference. +** +** Result Meaning +** -------- ---------------------------------------------------------- +** true We cannot tell the difference in pCandidate and pBaseline +** false pCandidate seems like a better choice than pBaseline +*/ +static SQLITE_NOINLINE int whereLoopIsNoBetter( + const WhereLoop *pCandidate, + const WhereLoop *pBaseline +){ + if( (pCandidate->wsFlags & WHERE_INDEXED)==0 ) return 1; + if( (pBaseline->wsFlags & WHERE_INDEXED)==0 ) return 1; + if( pCandidate->u.btree.pIndex->szIdxRow < + pBaseline->u.btree.pIndex->szIdxRow ) return 0; + return 1; +} + +/* +** Given the list of WhereLoop objects at pWInfo->pLoops, this routine +** attempts to find the lowest cost path that visits each WhereLoop +** once. This path is then loaded into the pWInfo->a[].pWLoop fields. +** +** Assume that the total number of output rows that will need to be sorted +** will be nRowEst (in the 10*log2 representation). Or, ignore sorting +** costs if nRowEst==0. +** +** Return SQLITE_OK on success or SQLITE_NOMEM of a memory allocation +** error occurs. +*/ +static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ + int mxChoice; /* Maximum number of simultaneous paths tracked */ + int nLoop; /* Number of terms in the join */ + Parse *pParse; /* Parsing context */ + int iLoop; /* Loop counter over the terms of the join */ + int ii, jj; /* Loop counters */ + int mxI = 0; /* Index of next entry to replace */ + int nOrderBy; /* Number of ORDER BY clause terms */ + LogEst mxCost = 0; /* Maximum cost of a set of paths */ + LogEst mxUnsort = 0; /* Maximum unsorted cost of a set of path */ + int nTo, nFrom; /* Number of valid entries in aTo[] and aFrom[] */ + WherePath *aFrom; /* All nFrom paths at the previous level */ + WherePath *aTo; /* The nTo best paths at the current level */ + WherePath *pFrom; /* An element of aFrom[] that we are working on */ + WherePath *pTo; /* An element of aTo[] that we are working on */ + WhereLoop *pWLoop; /* One of the WhereLoop objects */ + WhereLoop **pX; /* Used to divy up the pSpace memory */ + LogEst *aSortCost = 0; /* Sorting and partial sorting costs */ + char *pSpace; /* Temporary memory used by this routine */ + int nSpace; /* Bytes of space allocated at pSpace */ + + pParse = pWInfo->pParse; + nLoop = pWInfo->nLevel; + WHERETRACE(0x002, ("---- begin solver. (nRowEst=%d, nQueryLoop=%d)\n", + nRowEst, pParse->nQueryLoop)); + /* TUNING: mxChoice is the maximum number of possible paths to preserve + ** at each step. Based on the number of loops in the FROM clause: + ** + ** nLoop mxChoice + ** ----- -------- + ** 1 1 // the most common case + ** 2 5 + ** 3+ 12 or 18 // see computeMxChoice() + */ + if( nLoop<=1 ){ + mxChoice = 1; + }else if( nLoop==2 ){ + mxChoice = 5; + }else if( pParse->nErr ){ + mxChoice = 1; + }else{ + mxChoice = computeMxChoice(pWInfo); + } + assert( nLoop<=pWInfo->pTabList->nSrc ); + + /* If nRowEst is zero and there is an ORDER BY clause, ignore it. In this + ** case the purpose of this call is to estimate the number of rows returned + ** by the overall query. Once this estimate has been obtained, the caller + ** will invoke this function a second time, passing the estimate as the + ** nRowEst parameter. */ + if( pWInfo->pOrderBy==0 || nRowEst==0 ){ + nOrderBy = 0; + }else{ + nOrderBy = pWInfo->pOrderBy->nExpr; + } + + /* Allocate and initialize space for aTo, aFrom and aSortCost[] */ + nSpace = (sizeof(WherePath)+sizeof(WhereLoop*)*nLoop)*mxChoice*2; + nSpace += sizeof(LogEst) * nOrderBy; + pSpace = sqlite3StackAllocRawNN(pParse->db, nSpace); + if( pSpace==0 ) return SQLITE_NOMEM_BKPT; + aTo = (WherePath*)pSpace; + aFrom = aTo+mxChoice; + memset(aFrom, 0, sizeof(aFrom[0])); + pX = (WhereLoop**)(aFrom+mxChoice); + for(ii=mxChoice*2, pFrom=aTo; ii>0; ii--, pFrom++, pX += nLoop){ + pFrom->aLoop = pX; + } + if( nOrderBy ){ + /* If there is an ORDER BY clause and it is not being ignored, set up + ** space for the aSortCost[] array. Each element of the aSortCost array + ** is either zero - meaning it has not yet been initialized - or the + ** cost of sorting nRowEst rows of data where the first X terms of + ** the ORDER BY clause are already in order, where X is the array + ** index. */ + aSortCost = (LogEst*)pX; + memset(aSortCost, 0, sizeof(LogEst) * nOrderBy); + } + assert( aSortCost==0 || &pSpace[nSpace]==(char*)&aSortCost[nOrderBy] ); + assert( aSortCost!=0 || &pSpace[nSpace]==(char*)pX ); + + /* Seed the search with a single WherePath containing zero WhereLoops. + ** + ** TUNING: Do not let the number of iterations go above 28. If the cost + ** of computing an automatic index is not paid back within the first 28 + ** rows, then do not use the automatic index. */ + aFrom[0].nRow = MIN(pParse->nQueryLoop, 48); assert( 48==sqlite3LogEst(28) ); + nFrom = 1; + assert( aFrom[0].isOrdered==0 ); + if( nOrderBy ){ + /* If nLoop is zero, then there are no FROM terms in the query. Since + ** in this case the query may return a maximum of one row, the results + ** are already in the requested order. Set isOrdered to nOrderBy to + ** indicate this. Or, if nLoop is greater than zero, set isOrdered to + ** -1, indicating that the result set may or may not be ordered, + ** depending on the loops added to the current plan. */ + aFrom[0].isOrdered = nLoop>0 ? -1 : nOrderBy; + } + + /* Compute successively longer WherePaths using the previous generation + ** of WherePaths as the basis for the next. Keep track of the mxChoice + ** best paths at each generation */ + for(iLoop=0; iLooppLoops; pWLoop; pWLoop=pWLoop->pNextLoop){ + LogEst nOut; /* Rows visited by (pFrom+pWLoop) */ + LogEst rCost; /* Cost of path (pFrom+pWLoop) */ + LogEst rUnsort; /* Unsorted cost of (pFrom+pWLoop) */ + i8 isOrdered; /* isOrdered for (pFrom+pWLoop) */ + Bitmask maskNew; /* Mask of src visited by (..) */ + Bitmask revMask; /* Mask of rev-order loops for (..) */ + + if( (pWLoop->prereq & ~pFrom->maskLoop)!=0 ) continue; + if( (pWLoop->maskSelf & pFrom->maskLoop)!=0 ) continue; + if( (pWLoop->wsFlags & WHERE_AUTO_INDEX)!=0 && pFrom->nRow<3 ){ + /* Do not use an automatic index if the this loop is expected + ** to run less than 1.25 times. It is tempting to also exclude + ** automatic index usage on an outer loop, but sometimes an automatic + ** index is useful in the outer loop of a correlated subquery. */ + assert( 10==sqlite3LogEst(2) ); + continue; + } + + /* At this point, pWLoop is a candidate to be the next loop. + ** Compute its cost */ + rUnsort = pWLoop->rRun + pFrom->nRow; + if( pWLoop->rSetup ){ + rUnsort = sqlite3LogEstAdd(pWLoop->rSetup, rUnsort); + } + rUnsort = sqlite3LogEstAdd(rUnsort, pFrom->rUnsort); + nOut = pFrom->nRow + pWLoop->nOut; + maskNew = pFrom->maskLoop | pWLoop->maskSelf; + isOrdered = pFrom->isOrdered; + if( isOrdered<0 ){ + revMask = 0; + isOrdered = wherePathSatisfiesOrderBy(pWInfo, + pWInfo->pOrderBy, pFrom, pWInfo->wctrlFlags, + iLoop, pWLoop, &revMask); + }else{ + revMask = pFrom->revLoop; + } + if( isOrdered>=0 && isOrdered=0, or + ** (C) ordering does not matter because this is the last round + ** of the solver. + ** + ** The term "((pTo->isOrdered^isOrdered)&0x80)==0" is equivalent + ** to (pTo->isOrdered==(-1))==(isOrdered==(-1))" for the range + ** of legal values for isOrdered, -1..64. + */ + testcase( nTo==0 ); + for(jj=0, pTo=aTo; jjmaskLoop==maskNew + && ( ((pTo->isOrdered^isOrdered)&0x80)==0 || iLoop==nLoop-1 ) + ){ + testcase( jj==nTo-1 ); + break; + } + } + if( jj>=nTo ){ + /* None of the existing best-so-far paths match the candidate. */ + if( nTo>=mxChoice + && (rCost>mxCost || (rCost==mxCost && rUnsort>=mxUnsort)) + ){ + /* The current candidate is no better than any of the mxChoice + ** paths currently in the best-so-far buffer. So discard + ** this candidate as not viable. */ +#ifdef WHERETRACE_ENABLED /* 0x4 */ + if( sqlite3WhereTrace&0x4 ){ + sqlite3DebugPrintf("Skip %s cost=%-3d,%3d,%3d order=%c\n", + wherePathName(pFrom, iLoop, pWLoop), rCost, nOut, rUnsort, + isOrdered>=0 ? isOrdered+'0' : '?'); + } +#endif + continue; + } + /* If we reach this points it means that the new candidate path + ** needs to be added to the set of best-so-far paths. */ + if( nTo=0 ? isOrdered+'0' : '?'); + } +#endif + }else{ + /* Control reaches here if best-so-far path pTo=aTo[jj] covers the + ** same set of loops and has the same isOrdered setting as the + ** candidate path. Check to see if the candidate should replace + ** pTo or if the candidate should be skipped. + ** + ** The conditional is an expanded vector comparison equivalent to: + ** (pTo->rCost,pTo->nRow,pTo->rUnsort) <= (rCost,nOut,rUnsort) + */ + if( (pTo->rCostrCost==rCost && pTo->nRowrCost==rCost && pTo->nRow==nOut && pTo->rUnsortrCost==rCost && pTo->nRow==nOut && pTo->rUnsort==rUnsort + && whereLoopIsNoBetter(pWLoop, pTo->aLoop[iLoop]) ) + ){ +#ifdef WHERETRACE_ENABLED /* 0x4 */ + if( sqlite3WhereTrace&0x4 ){ + sqlite3DebugPrintf( + "Skip %s cost=%-3d,%3d,%3d order=%c", + wherePathName(pFrom, iLoop, pWLoop), rCost, nOut, rUnsort, + isOrdered>=0 ? isOrdered+'0' : '?'); + sqlite3DebugPrintf(" vs %s cost=%-3d,%3d,%3d order=%c\n", + wherePathName(pTo, iLoop+1, 0), pTo->rCost, pTo->nRow, + pTo->rUnsort, pTo->isOrdered>=0 ? pTo->isOrdered+'0' : '?'); + } +#endif + /* Discard the candidate path from further consideration */ + testcase( pTo->rCost==rCost ); + continue; + } + testcase( pTo->rCost==rCost+1 ); + /* Control reaches here if the candidate path is better than the + ** pTo path. Replace pTo with the candidate. */ +#ifdef WHERETRACE_ENABLED /* 0x4 */ + if( sqlite3WhereTrace&0x4 ){ + sqlite3DebugPrintf( + "Update %s cost=%-3d,%3d,%3d order=%c", + wherePathName(pFrom, iLoop, pWLoop), rCost, nOut, rUnsort, + isOrdered>=0 ? isOrdered+'0' : '?'); + sqlite3DebugPrintf(" was %s cost=%-3d,%3d,%3d order=%c\n", + wherePathName(pTo, iLoop+1, 0), pTo->rCost, pTo->nRow, + pTo->rUnsort, pTo->isOrdered>=0 ? pTo->isOrdered+'0' : '?'); + } +#endif + } + /* pWLoop is a winner. Add it to the set of best so far */ + pTo->maskLoop = pFrom->maskLoop | pWLoop->maskSelf; + pTo->revLoop = revMask; + pTo->nRow = nOut; + pTo->rCost = rCost; + pTo->rUnsort = rUnsort; + pTo->isOrdered = isOrdered; + memcpy(pTo->aLoop, pFrom->aLoop, sizeof(WhereLoop*)*iLoop); + pTo->aLoop[iLoop] = pWLoop; + if( nTo>=mxChoice ){ + mxI = 0; + mxCost = aTo[0].rCost; + mxUnsort = aTo[0].nRow; + for(jj=1, pTo=&aTo[1]; jjrCost>mxCost + || (pTo->rCost==mxCost && pTo->rUnsort>mxUnsort) + ){ + mxCost = pTo->rCost; + mxUnsort = pTo->rUnsort; + mxI = jj; + } + } + } + } + } + +#ifdef WHERETRACE_ENABLED /* >=2 */ + if( sqlite3WhereTrace & 0x02 ){ + LogEst rMin, rFloor = 0; + int nDone = 0; + int nProgress; + sqlite3DebugPrintf("---- after round %d ----\n", iLoop); + do{ + nProgress = 0; + rMin = 0x7fff; + for(ii=0, pTo=aTo; iirCost>rFloor && pTo->rCostrCost; + } + for(ii=0, pTo=aTo; iirCost==rMin ){ + sqlite3DebugPrintf(" %s cost=%-3d nrow=%-3d order=%c", + wherePathName(pTo, iLoop+1, 0), pTo->rCost, pTo->nRow, + pTo->isOrdered>=0 ? (pTo->isOrdered+'0') : '?'); + if( pTo->isOrdered>0 ){ + sqlite3DebugPrintf(" rev=0x%llx\n", pTo->revLoop); + }else{ + sqlite3DebugPrintf("\n"); + } + nDone++; + nProgress++; + } + } + rFloor = rMin; + }while( nDone0 ); + } +#endif + + /* Swap the roles of aFrom and aTo for the next generation */ + pFrom = aTo; + aTo = aFrom; + aFrom = pFrom; + nFrom = nTo; + } + + if( nFrom==0 ){ + sqlite3ErrorMsg(pParse, "no query solution"); + sqlite3StackFreeNN(pParse->db, pSpace); + return SQLITE_ERROR; + } + + /* Only one path is available, which is the best path */ + assert( nFrom==1 ); + pFrom = aFrom; + + assert( pWInfo->nLevel==nLoop ); + /* Load the lowest cost path into pWInfo */ + for(iLoop=0; iLoopa + iLoop; + pLevel->pWLoop = pWLoop = pFrom->aLoop[iLoop]; + pLevel->iFrom = pWLoop->iTab; + pLevel->iTabCur = pWInfo->pTabList->a[pLevel->iFrom].iCursor; + } + if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT)!=0 + && (pWInfo->wctrlFlags & WHERE_DISTINCTBY)==0 + && pWInfo->eDistinct==WHERE_DISTINCT_NOOP + && nRowEst + ){ + Bitmask notUsed; + int rc = wherePathSatisfiesOrderBy(pWInfo, pWInfo->pResultSet, pFrom, + WHERE_DISTINCTBY, nLoop-1, pFrom->aLoop[nLoop-1], ¬Used); + if( rc==pWInfo->pResultSet->nExpr ){ + pWInfo->eDistinct = WHERE_DISTINCT_ORDERED; + } + } + pWInfo->bOrderedInnerLoop = 0; + if( pWInfo->pOrderBy ){ + pWInfo->nOBSat = pFrom->isOrdered; + if( pWInfo->wctrlFlags & WHERE_DISTINCTBY ){ + if( pFrom->isOrdered==pWInfo->pOrderBy->nExpr ){ + pWInfo->eDistinct = WHERE_DISTINCT_ORDERED; + } + /* vvv--- See check-in [12ad822d9b827777] on 2023-03-16 ---vvv */ + assert( pWInfo->pSelect->pOrderBy==0 + || pWInfo->nOBSat <= pWInfo->pSelect->pOrderBy->nExpr ); + }else{ + pWInfo->revMask = pFrom->revLoop; + if( pWInfo->nOBSat<=0 ){ + pWInfo->nOBSat = 0; + if( nLoop>0 ){ + u32 wsFlags = pFrom->aLoop[nLoop-1]->wsFlags; + if( (wsFlags & WHERE_ONEROW)==0 + && (wsFlags&(WHERE_IPK|WHERE_COLUMN_IN))!=(WHERE_IPK|WHERE_COLUMN_IN) + ){ + Bitmask m = 0; + int rc = wherePathSatisfiesOrderBy(pWInfo, pWInfo->pOrderBy, pFrom, + WHERE_ORDERBY_LIMIT, nLoop-1, pFrom->aLoop[nLoop-1], &m); + testcase( wsFlags & WHERE_IPK ); + testcase( wsFlags & WHERE_COLUMN_IN ); + if( rc==pWInfo->pOrderBy->nExpr ){ + pWInfo->bOrderedInnerLoop = 1; + pWInfo->revMask = m; + } + } + } + }else if( nLoop + && pWInfo->nOBSat==1 + && (pWInfo->wctrlFlags & (WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX))!=0 + ){ + pWInfo->bOrderedInnerLoop = 1; + } + } + if( (pWInfo->wctrlFlags & WHERE_SORTBYGROUP) + && pWInfo->nOBSat==pWInfo->pOrderBy->nExpr && nLoop>0 + ){ + Bitmask revMask = 0; + int nOrder = wherePathSatisfiesOrderBy(pWInfo, pWInfo->pOrderBy, + pFrom, 0, nLoop-1, pFrom->aLoop[nLoop-1], &revMask + ); + assert( pWInfo->sorted==0 ); + if( nOrder==pWInfo->pOrderBy->nExpr ){ + pWInfo->sorted = 1; + pWInfo->revMask = revMask; + } + } + } + + pWInfo->nRowOut = pFrom->nRow; +#ifdef WHERETRACE_ENABLED + pWInfo->rTotalCost = pFrom->rCost; +#endif + + /* Free temporary memory and return success */ + sqlite3StackFreeNN(pParse->db, pSpace); + return SQLITE_OK; +} + +/* +** This routine implements a heuristic designed to improve query planning. +** This routine is called in between the first and second call to +** wherePathSolver(). Hence the name "Interstage" "Heuristic". +** +** The first call to wherePathSolver() (hereafter just "solver()") computes +** the best path without regard to the order of the outputs. The second call +** to the solver() builds upon the first call to try to find an alternative +** path that satisfies the ORDER BY clause. +** +** This routine looks at the results of the first solver() run, and for +** every FROM clause term in the resulting query plan that uses an equality +** constraint against an index, disable other WhereLoops for that same +** FROM clause term that would try to do a full-table scan. This prevents +** an index search from being converted into a full-table scan in order to +** satisfy an ORDER BY clause, since even though we might get slightly better +** performance using the full-scan without sorting if the output size +** estimates are very precise, we might also get severe performance +** degradation using the full-scan if the output size estimate is too large. +** It is better to err on the side of caution. +** +** Except, if the first solver() call generated a full-table scan in an outer +** loop then stop this analysis at the first full-scan, since the second +** solver() run might try to swap that full-scan for another in order to +** get the output into the correct order. In other words, we allow a +** rewrite like this: +** +** First Solver() Second Solver() +** |-- SCAN t1 |-- SCAN t2 +** |-- SEARCH t2 `-- SEARCH t1 +** `-- SORT USING B-TREE +** +** The purpose of this routine is to disallow rewrites such as: +** +** First Solver() Second Solver() +** |-- SEARCH t1 |-- SCAN t2 <--- bad! +** |-- SEARCH t2 `-- SEARCH t1 +** `-- SORT USING B-TREE +** +** See test cases in test/whereN.test for the real-world query that +** originally provoked this heuristic. +*/ +static SQLITE_NOINLINE void whereInterstageHeuristic(WhereInfo *pWInfo){ + int i; +#ifdef WHERETRACE_ENABLED + int once = 0; +#endif + for(i=0; inLevel; i++){ + WhereLoop *p = pWInfo->a[i].pWLoop; + if( p==0 ) break; + if( (p->wsFlags & WHERE_VIRTUALTABLE)!=0 ){ + /* Treat a vtab scan as similar to a full-table scan */ + break; + } + if( (p->wsFlags & (WHERE_COLUMN_EQ|WHERE_COLUMN_NULL|WHERE_COLUMN_IN))!=0 ){ + u8 iTab = p->iTab; + WhereLoop *pLoop; + for(pLoop=pWInfo->pLoops; pLoop; pLoop=pLoop->pNextLoop){ + if( pLoop->iTab!=iTab ) continue; + if( (pLoop->wsFlags & (WHERE_CONSTRAINT|WHERE_AUTO_INDEX))!=0 ){ + /* Auto-index and index-constrained loops allowed to remain */ + continue; + } +#ifdef WHERETRACE_ENABLED + if( sqlite3WhereTrace & 0x80 ){ + if( once==0 ){ + sqlite3DebugPrintf("Loops disabled by interstage heuristic:\n"); + once = 1; + } + sqlite3WhereLoopPrint(pLoop, &pWInfo->sWC); + } +#endif /* WHERETRACE_ENABLED */ + pLoop->prereq = ALLBITS; /* Prevent 2nd solver() from using this one */ + } + }else{ + break; + } + } +} + +/* +** Most queries use only a single table (they are not joins) and have +** simple == constraints against indexed fields. This routine attempts +** to plan those simple cases using much less ceremony than the +** general-purpose query planner, and thereby yield faster sqlite3_prepare() +** times for the common case. +** +** Return non-zero on success, if this query can be handled by this +** no-frills query planner. Return zero if this query needs the +** general-purpose query planner. +*/ +static int whereShortCut(WhereLoopBuilder *pBuilder){ + WhereInfo *pWInfo; + SrcItem *pItem; + WhereClause *pWC; + WhereTerm *pTerm; + WhereLoop *pLoop; + int iCur; + int j; + Table *pTab; + Index *pIdx; + WhereScan scan; + + pWInfo = pBuilder->pWInfo; + if( pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE ) return 0; + assert( pWInfo->pTabList->nSrc>=1 ); + pItem = pWInfo->pTabList->a; + pTab = pItem->pSTab; + if( IsVirtual(pTab) ) return 0; + if( pItem->fg.isIndexedBy || pItem->fg.notIndexed ){ + testcase( pItem->fg.isIndexedBy ); + testcase( pItem->fg.notIndexed ); + return 0; + } + iCur = pItem->iCursor; + pWC = &pWInfo->sWC; + pLoop = pBuilder->pNew; + pLoop->wsFlags = 0; + pLoop->nSkip = 0; + pTerm = whereScanInit(&scan, pWC, iCur, -1, WO_EQ|WO_IS, 0); + while( pTerm && pTerm->prereqRight ) pTerm = whereScanNext(&scan); + if( pTerm ){ + testcase( pTerm->eOperator & WO_IS ); + pLoop->wsFlags = WHERE_COLUMN_EQ|WHERE_IPK|WHERE_ONEROW; + pLoop->aLTerm[0] = pTerm; + pLoop->nLTerm = 1; + pLoop->u.btree.nEq = 1; + /* TUNING: Cost of a rowid lookup is 10 */ + pLoop->rRun = 33; /* 33==sqlite3LogEst(10) */ + }else{ + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + int opMask; + assert( pLoop->aLTermSpace==pLoop->aLTerm ); + if( !IsUniqueIndex(pIdx) + || pIdx->pPartIdxWhere!=0 + || pIdx->nKeyCol>ArraySize(pLoop->aLTermSpace) + ) continue; + opMask = pIdx->uniqNotNull ? (WO_EQ|WO_IS) : WO_EQ; + for(j=0; jnKeyCol; j++){ + pTerm = whereScanInit(&scan, pWC, iCur, j, opMask, pIdx); + while( pTerm && pTerm->prereqRight ) pTerm = whereScanNext(&scan); + if( pTerm==0 ) break; + testcase( pTerm->eOperator & WO_IS ); + pLoop->aLTerm[j] = pTerm; + } + if( j!=pIdx->nKeyCol ) continue; + pLoop->wsFlags = WHERE_COLUMN_EQ|WHERE_ONEROW|WHERE_INDEXED; + if( pIdx->isCovering || (pItem->colUsed & pIdx->colNotIdxed)==0 ){ + pLoop->wsFlags |= WHERE_IDX_ONLY; + } + pLoop->nLTerm = j; + pLoop->u.btree.nEq = j; + pLoop->u.btree.pIndex = pIdx; + /* TUNING: Cost of a unique index lookup is 15 */ + pLoop->rRun = 39; /* 39==sqlite3LogEst(15) */ + break; + } + } + if( pLoop->wsFlags ){ + pLoop->nOut = (LogEst)1; + pWInfo->a[0].pWLoop = pLoop; + assert( pWInfo->sMaskSet.n==1 && iCur==pWInfo->sMaskSet.ix[0] ); + pLoop->maskSelf = 1; /* sqlite3WhereGetMask(&pWInfo->sMaskSet, iCur); */ + pWInfo->a[0].iTabCur = iCur; + pWInfo->nRowOut = 1; + if( pWInfo->pOrderBy ) pWInfo->nOBSat = pWInfo->pOrderBy->nExpr; + if( pWInfo->wctrlFlags & WHERE_WANT_DISTINCT ){ + pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE; + } + if( scan.iEquiv>1 ) pLoop->wsFlags |= WHERE_TRANSCONS; +#ifdef SQLITE_DEBUG + pLoop->cId = '0'; +#endif +#ifdef WHERETRACE_ENABLED + if( sqlite3WhereTrace & 0x02 ){ + sqlite3DebugPrintf("whereShortCut() used to compute solution\n"); + } +#endif + return 1; + } + return 0; +} + +/* +** Helper function for exprIsDeterministic(). +*/ +static int exprNodeIsDeterministic(Walker *pWalker, Expr *pExpr){ + if( pExpr->op==TK_FUNCTION && ExprHasProperty(pExpr, EP_ConstFunc)==0 ){ + pWalker->eCode = 0; + return WRC_Abort; + } + return WRC_Continue; +} + +/* +** Return true if the expression contains no non-deterministic SQL +** functions. Do not consider non-deterministic SQL functions that are +** part of sub-select statements. +*/ +static int exprIsDeterministic(Expr *p){ + Walker w; + memset(&w, 0, sizeof(w)); + w.eCode = 1; + w.xExprCallback = exprNodeIsDeterministic; + w.xSelectCallback = sqlite3SelectWalkFail; + sqlite3WalkExpr(&w, p); + return w.eCode; +} + + +#ifdef WHERETRACE_ENABLED +/* +** Display all WhereLoops in pWInfo +*/ +static void showAllWhereLoops(WhereInfo *pWInfo, WhereClause *pWC){ + if( sqlite3WhereTrace ){ /* Display all of the WhereLoop objects */ + WhereLoop *p; + int i; + static const char zLabel[] = "0123456789abcdefghijklmnopqrstuvwyxz" + "ABCDEFGHIJKLMNOPQRSTUVWYXZ"; + for(p=pWInfo->pLoops, i=0; p; p=p->pNextLoop, i++){ + p->cId = zLabel[i%(sizeof(zLabel)-1)]; + sqlite3WhereLoopPrint(p, pWC); + } + } +} +# define WHERETRACE_ALL_LOOPS(W,C) showAllWhereLoops(W,C) +#else +# define WHERETRACE_ALL_LOOPS(W,C) +#endif + +/* Attempt to omit tables from a join that do not affect the result. +** For a table to not affect the result, the following must be true: +** +** 1) The query must not be an aggregate. +** 2) The table must be the RHS of a LEFT JOIN. +** 3) Either the query must be DISTINCT, or else the ON or USING clause +** must contain a constraint that limits the scan of the table to +** at most a single row. +** 4) The table must not be referenced by any part of the query apart +** from its own USING or ON clause. +** 5) The table must not have an inner-join ON or USING clause if there is +** a RIGHT JOIN anywhere in the query. Otherwise the ON/USING clause +** might move from the right side to the left side of the RIGHT JOIN. +** Note: Due to (2), this condition can only arise if the table is +** the right-most table of a subquery that was flattened into the +** main query and that subquery was the right-hand operand of an +** inner join that held an ON or USING clause. +** 6) The ORDER BY clause has 63 or fewer terms +** 7) The omit-noop-join optimization is enabled. +** +** Items (1), (6), and (7) are checked by the caller. +** +** For example, given: +** +** CREATE TABLE t1(ipk INTEGER PRIMARY KEY, v1); +** CREATE TABLE t2(ipk INTEGER PRIMARY KEY, v2); +** CREATE TABLE t3(ipk INTEGER PRIMARY KEY, v3); +** +** then table t2 can be omitted from the following: +** +** SELECT v1, v3 FROM t1 +** LEFT JOIN t2 ON (t1.ipk=t2.ipk) +** LEFT JOIN t3 ON (t1.ipk=t3.ipk) +** +** or from: +** +** SELECT DISTINCT v1, v3 FROM t1 +** LEFT JOIN t2 +** LEFT JOIN t3 ON (t1.ipk=t3.ipk) +*/ +static SQLITE_NOINLINE Bitmask whereOmitNoopJoin( + WhereInfo *pWInfo, + Bitmask notReady +){ + int i; + Bitmask tabUsed; + int hasRightJoin; + + /* Preconditions checked by the caller */ + assert( pWInfo->nLevel>=2 ); + assert( OptimizationEnabled(pWInfo->pParse->db, SQLITE_OmitNoopJoin) ); + + /* These two preconditions checked by the caller combine to guarantee + ** condition (1) of the header comment */ + assert( pWInfo->pResultSet!=0 ); + assert( 0==(pWInfo->wctrlFlags & WHERE_AGG_DISTINCT) ); + + tabUsed = sqlite3WhereExprListUsage(&pWInfo->sMaskSet, pWInfo->pResultSet); + if( pWInfo->pOrderBy ){ + tabUsed |= sqlite3WhereExprListUsage(&pWInfo->sMaskSet, pWInfo->pOrderBy); + } + hasRightJoin = (pWInfo->pTabList->a[0].fg.jointype & JT_LTORJ)!=0; + for(i=pWInfo->nLevel-1; i>=1; i--){ + WhereTerm *pTerm, *pEnd; + SrcItem *pItem; + WhereLoop *pLoop; + Bitmask m1; + pLoop = pWInfo->a[i].pWLoop; + pItem = &pWInfo->pTabList->a[pLoop->iTab]; + if( (pItem->fg.jointype & (JT_LEFT|JT_RIGHT))!=JT_LEFT ) continue; + if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT)==0 + && (pLoop->wsFlags & WHERE_ONEROW)==0 + ){ + continue; + } + if( (tabUsed & pLoop->maskSelf)!=0 ) continue; + pEnd = pWInfo->sWC.a + pWInfo->sWC.nTerm; + for(pTerm=pWInfo->sWC.a; pTermprereqAll & pLoop->maskSelf)!=0 ){ + if( !ExprHasProperty(pTerm->pExpr, EP_OuterON) + || pTerm->pExpr->w.iJoin!=pItem->iCursor + ){ + break; + } + } + if( hasRightJoin + && ExprHasProperty(pTerm->pExpr, EP_InnerON) + && NEVER(pTerm->pExpr->w.iJoin==pItem->iCursor) + ){ + break; /* restriction (5) */ + } + } + if( pTerm omit unused FROM-clause term %c\n",pLoop->cId)); + m1 = MASKBIT(i)-1; + testcase( ((pWInfo->revMask>>1) & ~m1)!=0 ); + pWInfo->revMask = (m1 & pWInfo->revMask) | ((pWInfo->revMask>>1) & ~m1); + notReady &= ~pLoop->maskSelf; + for(pTerm=pWInfo->sWC.a; pTermprereqAll & pLoop->maskSelf)!=0 ){ + pTerm->wtFlags |= TERM_CODED; + } + } + if( i!=pWInfo->nLevel-1 ){ + int nByte = (pWInfo->nLevel-1-i) * sizeof(WhereLevel); + memmove(&pWInfo->a[i], &pWInfo->a[i+1], nByte); + } + pWInfo->nLevel--; + assert( pWInfo->nLevel>0 ); + } + return notReady; +} + +/* +** Check to see if there are any SEARCH loops that might benefit from +** using a Bloom filter. Consider a Bloom filter if: +** +** (1) The SEARCH happens more than N times where N is the number +** of rows in the table that is being considered for the Bloom +** filter. +** (2) Some searches are expected to find zero rows. (This is determined +** by the WHERE_SELFCULL flag on the term.) +** (3) Bloom-filter processing is not disabled. (Checked by the +** caller.) +** (4) The size of the table being searched is known by ANALYZE. +** +** This block of code merely checks to see if a Bloom filter would be +** appropriate, and if so sets the WHERE_BLOOMFILTER flag on the +** WhereLoop. The implementation of the Bloom filter comes further +** down where the code for each WhereLoop is generated. +*/ +static SQLITE_NOINLINE void whereCheckIfBloomFilterIsUseful( + const WhereInfo *pWInfo +){ + int i; + LogEst nSearch = 0; + + assert( pWInfo->nLevel>=2 ); + assert( OptimizationEnabled(pWInfo->pParse->db, SQLITE_BloomFilter) ); + for(i=0; inLevel; i++){ + WhereLoop *pLoop = pWInfo->a[i].pWLoop; + const unsigned int reqFlags = (WHERE_SELFCULL|WHERE_COLUMN_EQ); + SrcItem *pItem = &pWInfo->pTabList->a[pLoop->iTab]; + Table *pTab = pItem->pSTab; + if( (pTab->tabFlags & TF_HasStat1)==0 ) break; + pTab->tabFlags |= TF_MaybeReanalyze; + if( i>=1 + && (pLoop->wsFlags & reqFlags)==reqFlags + /* vvvvvv--- Always the case if WHERE_COLUMN_EQ is defined */ + && ALWAYS((pLoop->wsFlags & (WHERE_IPK|WHERE_INDEXED))!=0) + ){ + if( nSearch > pTab->nRowLogEst ){ + testcase( pItem->fg.jointype & JT_LEFT ); + pLoop->wsFlags |= WHERE_BLOOMFILTER; + pLoop->wsFlags &= ~WHERE_IDX_ONLY; + WHERETRACE(0xffffffff, ( + "-> use Bloom-filter on loop %c because there are ~%.1e " + "lookups into %s which has only ~%.1e rows\n", + pLoop->cId, (double)sqlite3LogEstToInt(nSearch), pTab->zName, + (double)sqlite3LogEstToInt(pTab->nRowLogEst))); + } + } + nSearch += pLoop->nOut; + } +} + +/* +** The index pIdx is used by a query and contains one or more expressions. +** In other words pIdx is an index on an expression. iIdxCur is the cursor +** number for the index and iDataCur is the cursor number for the corresponding +** table. +** +** This routine adds IndexedExpr entries to the Parse->pIdxEpr field for +** each of the expressions in the index so that the expression code generator +** will know to replace occurrences of the indexed expression with +** references to the corresponding column of the index. +*/ +static SQLITE_NOINLINE void whereAddIndexedExpr( + Parse *pParse, /* Add IndexedExpr entries to pParse->pIdxEpr */ + Index *pIdx, /* The index-on-expression that contains the expressions */ + int iIdxCur, /* Cursor number for pIdx */ + SrcItem *pTabItem /* The FROM clause entry for the table */ +){ + int i; + IndexedExpr *p; + Table *pTab; + assert( pIdx->bHasExpr ); + pTab = pIdx->pTable; + for(i=0; inColumn; i++){ + Expr *pExpr; + int j = pIdx->aiColumn[i]; + if( j==XN_EXPR ){ + pExpr = pIdx->aColExpr->a[i].pExpr; + }else if( j>=0 && (pTab->aCol[j].colFlags & COLFLAG_VIRTUAL)!=0 ){ + pExpr = sqlite3ColumnExpr(pTab, &pTab->aCol[j]); + }else{ + continue; + } + if( sqlite3ExprIsConstant(0,pExpr) ) continue; + p = sqlite3DbMallocRaw(pParse->db, sizeof(IndexedExpr)); + if( p==0 ) break; + p->pIENext = pParse->pIdxEpr; +#ifdef WHERETRACE_ENABLED + if( sqlite3WhereTrace & 0x200 ){ + sqlite3DebugPrintf("New pParse->pIdxEpr term {%d,%d}\n", iIdxCur, i); + if( sqlite3WhereTrace & 0x5000 ) sqlite3ShowExpr(pExpr); + } +#endif + p->pExpr = sqlite3ExprDup(pParse->db, pExpr, 0); + p->iDataCur = pTabItem->iCursor; + p->iIdxCur = iIdxCur; + p->iIdxCol = i; + p->bMaybeNullRow = (pTabItem->fg.jointype & (JT_LEFT|JT_LTORJ|JT_RIGHT))!=0; + if( sqlite3IndexAffinityStr(pParse->db, pIdx) ){ + p->aff = pIdx->zColAff[i]; + } +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS + p->zIdxName = pIdx->zName; +#endif + pParse->pIdxEpr = p; + if( p->pIENext==0 ){ + void *pArg = (void*)&pParse->pIdxEpr; + sqlite3ParserAddCleanup(pParse, whereIndexedExprCleanup, pArg); + } + } +} + +/* +** Set the reverse-scan order mask to one for all tables in the query +** with the exception of MATERIALIZED common table expressions that have +** their own internal ORDER BY clauses. +** +** This implements the PRAGMA reverse_unordered_selects=ON setting. +** (Also SQLITE_DBCONFIG_REVERSE_SCANORDER). +*/ +static SQLITE_NOINLINE void whereReverseScanOrder(WhereInfo *pWInfo){ + int ii; + for(ii=0; iipTabList->nSrc; ii++){ + SrcItem *pItem = &pWInfo->pTabList->a[ii]; + if( !pItem->fg.isCte + || pItem->u2.pCteUse->eM10d!=M10d_Yes + || NEVER(pItem->fg.isSubquery==0) + || pItem->u4.pSubq->pSelect->pOrderBy==0 + ){ + pWInfo->revMask |= MASKBIT(ii); + } + } +} + +/* +** Generate the beginning of the loop used for WHERE clause processing. +** The return value is a pointer to an opaque structure that contains +** information needed to terminate the loop. Later, the calling routine +** should invoke sqlite3WhereEnd() with the return value of this function +** in order to complete the WHERE clause processing. +** +** If an error occurs, this routine returns NULL. +** +** The basic idea is to do a nested loop, one loop for each table in +** the FROM clause of a select. (INSERT and UPDATE statements are the +** same as a SELECT with only a single table in the FROM clause.) For +** example, if the SQL is this: +** +** SELECT * FROM t1, t2, t3 WHERE ...; +** +** Then the code generated is conceptually like the following: +** +** foreach row1 in t1 do \ Code generated +** foreach row2 in t2 do |-- by sqlite3WhereBegin() +** foreach row3 in t3 do / +** ... +** end \ Code generated +** end |-- by sqlite3WhereEnd() +** end / +** +** Note that the loops might not be nested in the order in which they +** appear in the FROM clause if a different order is better able to make +** use of indices. Note also that when the IN operator appears in +** the WHERE clause, it might result in additional nested loops for +** scanning through all values on the right-hand side of the IN. +** +** There are Btree cursors associated with each table. t1 uses cursor +** number pTabList->a[0].iCursor. t2 uses the cursor pTabList->a[1].iCursor. +** And so forth. This routine generates code to open those VDBE cursors +** and sqlite3WhereEnd() generates the code to close them. +** +** The code that sqlite3WhereBegin() generates leaves the cursors named +** in pTabList pointing at their appropriate entries. The [...] code +** can use OP_Column and OP_Rowid opcodes on these cursors to extract +** data from the various tables of the loop. +** +** If the WHERE clause is empty, the foreach loops must each scan their +** entire tables. Thus a three-way join is an O(N^3) operation. But if +** the tables have indices and there are terms in the WHERE clause that +** refer to those indices, a complete table scan can be avoided and the +** code will run much faster. Most of the work of this routine is checking +** to see if there are indices that can be used to speed up the loop. +** +** Terms of the WHERE clause are also used to limit which rows actually +** make it to the "..." in the middle of the loop. After each "foreach", +** terms of the WHERE clause that use only terms in that loop and outer +** loops are evaluated and if false a jump is made around all subsequent +** inner loops (or around the "..." if the test occurs within the inner- +** most loop) +** +** OUTER JOINS +** +** An outer join of tables t1 and t2 is conceptually coded as follows: +** +** foreach row1 in t1 do +** flag = 0 +** foreach row2 in t2 do +** start: +** ... +** flag = 1 +** end +** if flag==0 then +** move the row2 cursor to a null row +** goto start +** fi +** end +** +** ORDER BY CLAUSE PROCESSING +** +** pOrderBy is a pointer to the ORDER BY clause (or the GROUP BY clause +** if the WHERE_GROUPBY flag is set in wctrlFlags) of a SELECT statement +** if there is one. If there is no ORDER BY clause or if this routine +** is called from an UPDATE or DELETE statement, then pOrderBy is NULL. +** +** The iIdxCur parameter is the cursor number of an index. If +** WHERE_OR_SUBCLAUSE is set, iIdxCur is the cursor number of an index +** to use for OR clause processing. The WHERE clause should use this +** specific cursor. If WHERE_ONEPASS_DESIRED is set, then iIdxCur is +** the first cursor in an array of cursors for all indices. iIdxCur should +** be used to compute the appropriate cursor depending on which index is +** used. +*/ +SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( + Parse *pParse, /* The parser context */ + SrcList *pTabList, /* FROM clause: A list of all tables to be scanned */ + Expr *pWhere, /* The WHERE clause */ + ExprList *pOrderBy, /* An ORDER BY (or GROUP BY) clause, or NULL */ + ExprList *pResultSet, /* Query result set. Req'd for DISTINCT */ + Select *pSelect, /* The entire SELECT statement */ + u16 wctrlFlags, /* The WHERE_* flags defined in sqliteInt.h */ + int iAuxArg /* If WHERE_OR_SUBCLAUSE is set, index cursor number + ** If WHERE_USE_LIMIT, then the limit amount */ +){ + int nByteWInfo; /* Num. bytes allocated for WhereInfo struct */ + int nTabList; /* Number of elements in pTabList */ + WhereInfo *pWInfo; /* Will become the return value of this function */ + Vdbe *v = pParse->pVdbe; /* The virtual database engine */ + Bitmask notReady; /* Cursors that are not yet positioned */ + WhereLoopBuilder sWLB; /* The WhereLoop builder */ + WhereMaskSet *pMaskSet; /* The expression mask set */ + WhereLevel *pLevel; /* A single level in pWInfo->a[] */ + WhereLoop *pLoop; /* Pointer to a single WhereLoop object */ + int ii; /* Loop counter */ + sqlite3 *db; /* Database connection */ + int rc; /* Return code */ + u8 bFordelete = 0; /* OPFLAG_FORDELETE or zero, as appropriate */ + + assert( (wctrlFlags & WHERE_ONEPASS_MULTIROW)==0 || ( + (wctrlFlags & WHERE_ONEPASS_DESIRED)!=0 + && (wctrlFlags & WHERE_OR_SUBCLAUSE)==0 + )); + + /* Only one of WHERE_OR_SUBCLAUSE or WHERE_USE_LIMIT */ + assert( (wctrlFlags & WHERE_OR_SUBCLAUSE)==0 + || (wctrlFlags & WHERE_USE_LIMIT)==0 ); + + /* Variable initialization */ + db = pParse->db; + memset(&sWLB, 0, sizeof(sWLB)); + + /* An ORDER/GROUP BY clause of more than 63 terms cannot be optimized */ + testcase( pOrderBy && pOrderBy->nExpr==BMS-1 ); + if( pOrderBy && pOrderBy->nExpr>=BMS ){ + pOrderBy = 0; + wctrlFlags &= ~WHERE_WANT_DISTINCT; + wctrlFlags |= WHERE_KEEP_ALL_JOINS; /* Disable omit-noop-join opt */ + } + + /* The number of tables in the FROM clause is limited by the number of + ** bits in a Bitmask + */ + testcase( pTabList->nSrc==BMS ); + if( pTabList->nSrc>BMS ){ + sqlite3ErrorMsg(pParse, "at most %d tables in a join", BMS); + return 0; + } + + /* This function normally generates a nested loop for all tables in + ** pTabList. But if the WHERE_OR_SUBCLAUSE flag is set, then we should + ** only generate code for the first table in pTabList and assume that + ** any cursors associated with subsequent tables are uninitialized. + */ + nTabList = (wctrlFlags & WHERE_OR_SUBCLAUSE) ? 1 : pTabList->nSrc; + + /* Allocate and initialize the WhereInfo structure that will become the + ** return value. A single allocation is used to store the WhereInfo + ** struct, the contents of WhereInfo.a[], the WhereClause structure + ** and the WhereMaskSet structure. Since WhereClause contains an 8-byte + ** field (type Bitmask) it must be aligned on an 8-byte boundary on + ** some architectures. Hence the ROUND8() below. + */ + nByteWInfo = SZ_WHEREINFO(nTabList); + pWInfo = sqlite3DbMallocRawNN(db, nByteWInfo + sizeof(WhereLoop)); + if( db->mallocFailed ){ + sqlite3DbFree(db, pWInfo); + pWInfo = 0; + goto whereBeginError; + } + pWInfo->pParse = pParse; + pWInfo->pTabList = pTabList; + pWInfo->pOrderBy = pOrderBy; +#if WHERETRACE_ENABLED + pWInfo->pWhere = pWhere; +#endif + pWInfo->pResultSet = pResultSet; + pWInfo->aiCurOnePass[0] = pWInfo->aiCurOnePass[1] = -1; + pWInfo->nLevel = nTabList; + pWInfo->iBreak = pWInfo->iContinue = sqlite3VdbeMakeLabel(pParse); + pWInfo->wctrlFlags = wctrlFlags; + pWInfo->iLimit = iAuxArg; + pWInfo->savedNQueryLoop = pParse->nQueryLoop; + pWInfo->pSelect = pSelect; + memset(&pWInfo->nOBSat, 0, + offsetof(WhereInfo,sWC) - offsetof(WhereInfo,nOBSat)); + memset(&pWInfo->a[0], 0, sizeof(WhereLoop)+nTabList*sizeof(WhereLevel)); + assert( pWInfo->eOnePass==ONEPASS_OFF ); /* ONEPASS defaults to OFF */ + pMaskSet = &pWInfo->sMaskSet; + pMaskSet->n = 0; + pMaskSet->ix[0] = -99; /* Initialize ix[0] to a value that can never be + ** a valid cursor number, to avoid an initial + ** test for pMaskSet->n==0 in sqlite3WhereGetMask() */ + sWLB.pWInfo = pWInfo; + sWLB.pWC = &pWInfo->sWC; + sWLB.pNew = (WhereLoop*)(((char*)pWInfo)+nByteWInfo); + assert( EIGHT_BYTE_ALIGNMENT(sWLB.pNew) ); + whereLoopInit(sWLB.pNew); +#ifdef SQLITE_DEBUG + sWLB.pNew->cId = '*'; +#endif + + /* Split the WHERE clause into separate subexpressions where each + ** subexpression is separated by an AND operator. + */ + sqlite3WhereClauseInit(&pWInfo->sWC, pWInfo); + sqlite3WhereSplit(&pWInfo->sWC, pWhere, TK_AND); + + /* Special case: No FROM clause + */ + if( nTabList==0 ){ + if( pOrderBy ) pWInfo->nOBSat = pOrderBy->nExpr; + if( (wctrlFlags & WHERE_WANT_DISTINCT)!=0 + && OptimizationEnabled(db, SQLITE_DistinctOpt) + ){ + pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE; + } + if( ALWAYS(pWInfo->pSelect) + && (pWInfo->pSelect->selFlags & SF_MultiValue)==0 + ){ + ExplainQueryPlan((pParse, 0, "SCAN CONSTANT ROW")); + } + }else{ + /* Assign a bit from the bitmask to every term in the FROM clause. + ** + ** The N-th term of the FROM clause is assigned a bitmask of 1<nSrc tables in + ** pTabList, not just the first nTabList tables. nTabList is normally + ** equal to pTabList->nSrc but might be shortened to 1 if the + ** WHERE_OR_SUBCLAUSE flag is set. + */ + ii = 0; + do{ + createMask(pMaskSet, pTabList->a[ii].iCursor); + sqlite3WhereTabFuncArgs(pParse, &pTabList->a[ii], &pWInfo->sWC); + }while( (++ii)nSrc ); + #ifdef SQLITE_DEBUG + { + Bitmask mx = 0; + for(ii=0; iinSrc; ii++){ + Bitmask m = sqlite3WhereGetMask(pMaskSet, pTabList->a[ii].iCursor); + assert( m>=mx ); + mx = m; + } + } + #endif + } + + /* Analyze all of the subexpressions. */ + sqlite3WhereExprAnalyze(pTabList, &pWInfo->sWC); + if( pSelect && pSelect->pLimit ){ + sqlite3WhereAddLimit(&pWInfo->sWC, pSelect); + } + if( pParse->nErr ) goto whereBeginError; + + /* The False-WHERE-Term-Bypass optimization: + ** + ** If there are WHERE terms that are false, then no rows will be output, + ** so skip over all of the code generated here. + ** + ** Conditions: + ** + ** (1) The WHERE term must not refer to any tables in the join. + ** (2) The term must not come from an ON clause on the + ** right-hand side of a LEFT or FULL JOIN. + ** (3) The term must not come from an ON clause, or there must be + ** no RIGHT or FULL OUTER joins in pTabList. + ** (4) If the expression contains non-deterministic functions + ** that are not within a sub-select. This is not required + ** for correctness but rather to preserves SQLite's legacy + ** behaviour in the following two cases: + ** + ** WHERE random()>0; -- eval random() once per row + ** WHERE (SELECT random())>0; -- eval random() just once overall + ** + ** Note that the Where term need not be a constant in order for this + ** optimization to apply, though it does need to be constant relative to + ** the current subquery (condition 1). The term might include variables + ** from outer queries so that the value of the term changes from one + ** invocation of the current subquery to the next. + */ + for(ii=0; iinBase; ii++){ + WhereTerm *pT = &sWLB.pWC->a[ii]; /* A term of the WHERE clause */ + Expr *pX; /* The expression of pT */ + if( pT->wtFlags & TERM_VIRTUAL ) continue; + pX = pT->pExpr; + assert( pX!=0 ); + assert( pT->prereqAll!=0 || !ExprHasProperty(pX, EP_OuterON) ); + if( pT->prereqAll==0 /* Conditions (1) and (2) */ + && (nTabList==0 || exprIsDeterministic(pX)) /* Condition (4) */ + && !(ExprHasProperty(pX, EP_InnerON) /* Condition (3) */ + && (pTabList->a[0].fg.jointype & JT_LTORJ)!=0 ) + ){ + sqlite3ExprIfFalse(pParse, pX, pWInfo->iBreak, SQLITE_JUMPIFNULL); + pT->wtFlags |= TERM_CODED; + } + } + + if( wctrlFlags & WHERE_WANT_DISTINCT ){ + if( OptimizationDisabled(db, SQLITE_DistinctOpt) ){ + /* Disable the DISTINCT optimization if SQLITE_DistinctOpt is set via + ** sqlite3_test_ctrl(SQLITE_TESTCTRL_OPTIMIZATIONS,...) */ + wctrlFlags &= ~WHERE_WANT_DISTINCT; + pWInfo->wctrlFlags &= ~WHERE_WANT_DISTINCT; + }else if( isDistinctRedundant(pParse, pTabList, &pWInfo->sWC, pResultSet) ){ + /* The DISTINCT marking is pointless. Ignore it. */ + pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE; + }else if( pOrderBy==0 ){ + /* Try to ORDER BY the result set to make distinct processing easier */ + pWInfo->wctrlFlags |= WHERE_DISTINCTBY; + pWInfo->pOrderBy = pResultSet; + } + } + + /* Construct the WhereLoop objects */ +#if defined(WHERETRACE_ENABLED) + if( sqlite3WhereTrace & 0xffffffff ){ + sqlite3DebugPrintf("*** Optimizer Start *** (wctrlFlags: 0x%x",wctrlFlags); + if( wctrlFlags & WHERE_USE_LIMIT ){ + sqlite3DebugPrintf(", limit: %d", iAuxArg); + } + sqlite3DebugPrintf(")\n"); + if( sqlite3WhereTrace & 0x8000 ){ + Select sSelect; + memset(&sSelect, 0, sizeof(sSelect)); + sSelect.selFlags = SF_WhereBegin; + sSelect.pSrc = pTabList; + sSelect.pWhere = pWhere; + sSelect.pOrderBy = pOrderBy; + sSelect.pEList = pResultSet; + sqlite3TreeViewSelect(0, &sSelect, 0); + } + if( sqlite3WhereTrace & 0x4000 ){ /* Display all WHERE clause terms */ + sqlite3DebugPrintf("---- WHERE clause at start of analysis:\n"); + sqlite3WhereClausePrint(sWLB.pWC); + } + } +#endif + + if( nTabList!=1 || whereShortCut(&sWLB)==0 ){ + rc = whereLoopAddAll(&sWLB); + if( rc ) goto whereBeginError; + +#ifdef SQLITE_ENABLE_STAT4 + /* If one or more WhereTerm.truthProb values were used in estimating + ** loop parameters, but then those truthProb values were subsequently + ** changed based on STAT4 information while computing subsequent loops, + ** then we need to rerun the whole loop building process so that all + ** loops will be built using the revised truthProb values. */ + if( sWLB.bldFlags2 & SQLITE_BLDF2_2NDPASS ){ + WHERETRACE_ALL_LOOPS(pWInfo, sWLB.pWC); + WHERETRACE(0xffffffff, + ("**** Redo all loop computations due to" + " TERM_HIGHTRUTH changes ****\n")); + while( pWInfo->pLoops ){ + WhereLoop *p = pWInfo->pLoops; + pWInfo->pLoops = p->pNextLoop; + whereLoopDelete(db, p); + } + rc = whereLoopAddAll(&sWLB); + if( rc ) goto whereBeginError; + } +#endif + WHERETRACE_ALL_LOOPS(pWInfo, sWLB.pWC); + + wherePathSolver(pWInfo, 0); + if( db->mallocFailed ) goto whereBeginError; + if( pWInfo->pOrderBy ){ + whereInterstageHeuristic(pWInfo); + wherePathSolver(pWInfo, pWInfo->nRowOut<0 ? 1 : pWInfo->nRowOut+1); + if( db->mallocFailed ) goto whereBeginError; + } + + /* TUNING: Assume that a DISTINCT clause on a subquery reduces + ** the output size by a factor of 8 (LogEst -30). Search for + ** tag-20250414a to see other cases. + */ + if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT)!=0 ){ + WHERETRACE(0x0080,("nRowOut reduced from %d to %d due to DISTINCT\n", + pWInfo->nRowOut, pWInfo->nRowOut-30)); + pWInfo->nRowOut -= 30; + } + + } + assert( pWInfo->pTabList!=0 ); + if( pWInfo->pOrderBy==0 && (db->flags & SQLITE_ReverseOrder)!=0 ){ + whereReverseScanOrder(pWInfo); + } + if( pParse->nErr ){ + goto whereBeginError; + } + assert( db->mallocFailed==0 ); +#ifdef WHERETRACE_ENABLED + if( sqlite3WhereTrace ){ + sqlite3DebugPrintf("---- Solution cost=%d, nRow=%d", + pWInfo->rTotalCost, pWInfo->nRowOut); + if( pWInfo->nOBSat>0 ){ + sqlite3DebugPrintf(" ORDERBY=%d,0x%llx", pWInfo->nOBSat, pWInfo->revMask); + } + switch( pWInfo->eDistinct ){ + case WHERE_DISTINCT_UNIQUE: { + sqlite3DebugPrintf(" DISTINCT=unique"); + break; + } + case WHERE_DISTINCT_ORDERED: { + sqlite3DebugPrintf(" DISTINCT=ordered"); + break; + } + case WHERE_DISTINCT_UNORDERED: { + sqlite3DebugPrintf(" DISTINCT=unordered"); + break; + } + } + sqlite3DebugPrintf("\n"); + for(ii=0; iinLevel; ii++){ + sqlite3WhereLoopPrint(pWInfo->a[ii].pWLoop, sWLB.pWC); + } + } +#endif + + /* Attempt to omit tables from a join that do not affect the result. + ** See the comment on whereOmitNoopJoin() for further information. + ** + ** This query optimization is factored out into a separate "no-inline" + ** procedure to keep the sqlite3WhereBegin() procedure from becoming + ** too large. If sqlite3WhereBegin() becomes too large, that prevents + ** some C-compiler optimizers from in-lining the + ** sqlite3WhereCodeOneLoopStart() procedure, and it is important to + ** in-line sqlite3WhereCodeOneLoopStart() for performance reasons. + */ + notReady = ~(Bitmask)0; + if( pWInfo->nLevel>=2 /* Must be a join, or this opt8n is pointless */ + && pResultSet!=0 /* Condition (1) */ + && 0==(wctrlFlags & (WHERE_AGG_DISTINCT|WHERE_KEEP_ALL_JOINS)) /* (1),(6) */ + && OptimizationEnabled(db, SQLITE_OmitNoopJoin) /* (7) */ + ){ + notReady = whereOmitNoopJoin(pWInfo, notReady); + nTabList = pWInfo->nLevel; + assert( nTabList>0 ); + } + + /* Check to see if there are any SEARCH loops that might benefit from + ** using a Bloom filter. + */ + if( pWInfo->nLevel>=2 + && OptimizationEnabled(db, SQLITE_BloomFilter) + ){ + whereCheckIfBloomFilterIsUseful(pWInfo); + } + +#if defined(WHERETRACE_ENABLED) + if( sqlite3WhereTrace & 0x4000 ){ /* Display all terms of the WHERE clause */ + sqlite3DebugPrintf("---- WHERE clause at end of analysis:\n"); + sqlite3WhereClausePrint(sWLB.pWC); + } + WHERETRACE(0xffffffff,("*** Optimizer Finished ***\n")); +#endif + pWInfo->pParse->nQueryLoop += pWInfo->nRowOut; + + /* If the caller is an UPDATE or DELETE statement that is requesting + ** to use a one-pass algorithm, determine if this is appropriate. + ** + ** A one-pass approach can be used if the caller has requested one + ** and either (a) the scan visits at most one row or (b) each + ** of the following are true: + ** + ** * the caller has indicated that a one-pass approach can be used + ** with multiple rows (by setting WHERE_ONEPASS_MULTIROW), and + ** * the table is not a virtual table, and + ** * either the scan does not use the OR optimization or the caller + ** is a DELETE operation (WHERE_DUPLICATES_OK is only specified + ** for DELETE). + ** + ** The last qualification is because an UPDATE statement uses + ** WhereInfo.aiCurOnePass[1] to determine whether or not it really can + ** use a one-pass approach, and this is not set accurately for scans + ** that use the OR optimization. + */ + assert( (wctrlFlags & WHERE_ONEPASS_DESIRED)==0 || pWInfo->nLevel==1 ); + if( (wctrlFlags & WHERE_ONEPASS_DESIRED)!=0 ){ + int wsFlags = pWInfo->a[0].pWLoop->wsFlags; + int bOnerow = (wsFlags & WHERE_ONEROW)!=0; + assert( !(wsFlags&WHERE_VIRTUALTABLE) || IsVirtual(pTabList->a[0].pSTab) ); + if( bOnerow || ( + 0!=(wctrlFlags & WHERE_ONEPASS_MULTIROW) + && !IsVirtual(pTabList->a[0].pSTab) + && (0==(wsFlags & WHERE_MULTI_OR) || (wctrlFlags & WHERE_DUPLICATES_OK)) + && OptimizationEnabled(db, SQLITE_OnePass) + )){ + pWInfo->eOnePass = bOnerow ? ONEPASS_SINGLE : ONEPASS_MULTI; + if( HasRowid(pTabList->a[0].pSTab) && (wsFlags & WHERE_IDX_ONLY) ){ + if( wctrlFlags & WHERE_ONEPASS_MULTIROW ){ + bFordelete = OPFLAG_FORDELETE; + } + pWInfo->a[0].pWLoop->wsFlags = (wsFlags & ~WHERE_IDX_ONLY); + } + } + } + + /* Open all tables in the pTabList and any indices selected for + ** searching those tables. + */ + for(ii=0, pLevel=pWInfo->a; iia[pLevel->iFrom]; + pTab = pTabItem->pSTab; + iDb = sqlite3SchemaToIndex(db, pTab->pSchema); + pLoop = pLevel->pWLoop; + pLevel->addrBrk = sqlite3VdbeMakeLabel(pParse); + if( ii==0 || (pTabItem[0].fg.jointype & JT_LEFT)!=0 ){ + pLevel->addrHalt = pLevel->addrBrk; + }else if( pWInfo->a[ii-1].pRJ ){ + pLevel->addrHalt = pWInfo->a[ii-1].addrBrk; + }else{ + pLevel->addrHalt = pWInfo->a[ii-1].addrHalt; + } + if( (pTab->tabFlags & TF_Ephemeral)!=0 || IsView(pTab) ){ + /* Do nothing */ + }else +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( (pLoop->wsFlags & WHERE_VIRTUALTABLE)!=0 ){ + const char *pVTab = (const char *)sqlite3GetVTable(db, pTab); + int iCur = pTabItem->iCursor; + sqlite3VdbeAddOp4(v, OP_VOpen, iCur, 0, 0, pVTab, P4_VTAB); + }else if( IsVirtual(pTab) ){ + /* noop */ + }else +#endif + if( ((pLoop->wsFlags & WHERE_IDX_ONLY)==0 + && (wctrlFlags & WHERE_OR_SUBCLAUSE)==0) + || (pTabItem->fg.jointype & (JT_LTORJ|JT_RIGHT))!=0 + ){ + int op = OP_OpenRead; + if( pWInfo->eOnePass!=ONEPASS_OFF ){ + op = OP_OpenWrite; + pWInfo->aiCurOnePass[0] = pTabItem->iCursor; + }; + sqlite3OpenTable(pParse, pTabItem->iCursor, iDb, pTab, op); + assert( pTabItem->iCursor==pLevel->iTabCur ); + testcase( pWInfo->eOnePass==ONEPASS_OFF && pTab->nCol==BMS-1 ); + testcase( pWInfo->eOnePass==ONEPASS_OFF && pTab->nCol==BMS ); + if( pWInfo->eOnePass==ONEPASS_OFF + && pTab->nColtabFlags & (TF_HasGenerated|TF_WithoutRowid))==0 + && (pLoop->wsFlags & (WHERE_AUTO_INDEX|WHERE_BLOOMFILTER))==0 + ){ + /* If we know that only a prefix of the record will be used, + ** it is advantageous to reduce the "column count" field in + ** the P4 operand of the OP_OpenRead/Write opcode. */ + Bitmask b = pTabItem->colUsed; + int n = 0; + for(; b; b=b>>1, n++){} + sqlite3VdbeChangeP4(v, -1, SQLITE_INT_TO_PTR(n), P4_INT32); + assert( n<=pTab->nCol ); + } +#ifdef SQLITE_ENABLE_CURSOR_HINTS + if( pLoop->u.btree.pIndex!=0 && (pTab->tabFlags & TF_WithoutRowid)==0 ){ + sqlite3VdbeChangeP5(v, OPFLAG_SEEKEQ|bFordelete); + }else +#endif + { + sqlite3VdbeChangeP5(v, bFordelete); + } +#ifdef SQLITE_ENABLE_COLUMN_USED_MASK + sqlite3VdbeAddOp4Dup8(v, OP_ColumnsUsed, pTabItem->iCursor, 0, 0, + (const u8*)&pTabItem->colUsed, P4_INT64); +#endif + if( ii>=2 + && (pTabItem[0].fg.jointype & (JT_LTORJ|JT_LEFT))==0 + && pLevel->addrHalt==pWInfo->a[0].addrHalt + ){ + sqlite3VdbeAddOp2(v, OP_IfEmpty, pTabItem->iCursor, pWInfo->iBreak); + VdbeCoverage(v); + } + }else{ + sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName); + } + if( pLoop->wsFlags & WHERE_INDEXED ){ + Index *pIx = pLoop->u.btree.pIndex; + int iIndexCur; + int op = OP_OpenRead; + /* iAuxArg is always set to a positive value if ONEPASS is possible */ + assert( iAuxArg!=0 || (pWInfo->wctrlFlags & WHERE_ONEPASS_DESIRED)==0 ); + if( !HasRowid(pTab) && IsPrimaryKeyIndex(pIx) + && (wctrlFlags & WHERE_OR_SUBCLAUSE)!=0 + ){ + /* This is one term of an OR-optimization using the PRIMARY KEY of a + ** WITHOUT ROWID table. No need for a separate index */ + iIndexCur = pLevel->iTabCur; + op = 0; + }else if( pWInfo->eOnePass!=ONEPASS_OFF ){ + Index *pJ = pTabItem->pSTab->pIndex; + iIndexCur = iAuxArg; + assert( wctrlFlags & WHERE_ONEPASS_DESIRED ); + while( ALWAYS(pJ) && pJ!=pIx ){ + iIndexCur++; + pJ = pJ->pNext; + } + op = OP_OpenWrite; + pWInfo->aiCurOnePass[1] = iIndexCur; + }else if( iAuxArg && (wctrlFlags & WHERE_OR_SUBCLAUSE)!=0 ){ + iIndexCur = iAuxArg; + op = OP_ReopenIdx; + }else{ + iIndexCur = pParse->nTab++; + if( pIx->bHasExpr && OptimizationEnabled(db, SQLITE_IndexedExpr) ){ + whereAddIndexedExpr(pParse, pIx, iIndexCur, pTabItem); + } + if( pIx->pPartIdxWhere && (pTabItem->fg.jointype & JT_RIGHT)==0 ){ + wherePartIdxExpr( + pParse, pIx, pIx->pPartIdxWhere, 0, iIndexCur, pTabItem + ); + } + } + pLevel->iIdxCur = iIndexCur; + assert( pIx!=0 ); + assert( pIx->pSchema==pTab->pSchema ); + assert( iIndexCur>=0 ); + if( op ){ + sqlite3VdbeAddOp3(v, op, iIndexCur, pIx->tnum, iDb); + sqlite3VdbeSetP4KeyInfo(pParse, pIx); + if( (pLoop->wsFlags & WHERE_CONSTRAINT)!=0 + && (pLoop->wsFlags & (WHERE_COLUMN_RANGE|WHERE_SKIPSCAN))==0 + && (pLoop->wsFlags & WHERE_BIGNULL_SORT)==0 + && (pLoop->wsFlags & WHERE_IN_SEEKSCAN)==0 + && (pWInfo->wctrlFlags&WHERE_ORDERBY_MIN)==0 + && pWInfo->eDistinct!=WHERE_DISTINCT_ORDERED + ){ + sqlite3VdbeChangeP5(v, OPFLAG_SEEKEQ); + } + VdbeComment((v, "%s", pIx->zName)); +#ifdef SQLITE_ENABLE_COLUMN_USED_MASK + { + u64 colUsed = 0; + int ii, jj; + for(ii=0; iinColumn; ii++){ + jj = pIx->aiColumn[ii]; + if( jj<0 ) continue; + if( jj>63 ) jj = 63; + if( (pTabItem->colUsed & MASKBIT(jj))==0 ) continue; + colUsed |= ((u64)1)<<(ii<63 ? ii : 63); + } + sqlite3VdbeAddOp4Dup8(v, OP_ColumnsUsed, iIndexCur, 0, 0, + (u8*)&colUsed, P4_INT64); + } +#endif /* SQLITE_ENABLE_COLUMN_USED_MASK */ + } + } + if( iDb>=0 ) sqlite3CodeVerifySchema(pParse, iDb); + if( (pTabItem->fg.jointype & JT_RIGHT)!=0 + && (pLevel->pRJ = sqlite3WhereMalloc(pWInfo, sizeof(WhereRightJoin)))!=0 + ){ + WhereRightJoin *pRJ = pLevel->pRJ; + pRJ->iMatch = pParse->nTab++; + pRJ->regBloom = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Blob, 65536, pRJ->regBloom); + pRJ->regReturn = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Null, 0, pRJ->regReturn); + assert( pTab==pTabItem->pSTab ); + if( HasRowid(pTab) ){ + KeyInfo *pInfo; + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pRJ->iMatch, 1); + pInfo = sqlite3KeyInfoAlloc(pParse->db, 1, 0); + if( pInfo ){ + pInfo->aColl[0] = 0; + pInfo->aSortFlags[0] = 0; + sqlite3VdbeAppendP4(v, pInfo, P4_KEYINFO); + } + }else{ + Index *pPk = sqlite3PrimaryKeyIndex(pTab); + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pRJ->iMatch, pPk->nKeyCol); + sqlite3VdbeSetP4KeyInfo(pParse, pPk); + } + pLoop->wsFlags &= ~WHERE_IDX_ONLY; + /* The nature of RIGHT JOIN processing is such that it messes up + ** the output order. So omit any ORDER BY/GROUP BY elimination + ** optimizations. We need to do an actual sort for RIGHT JOIN. */ + pWInfo->nOBSat = 0; + pWInfo->eDistinct = WHERE_DISTINCT_UNORDERED; + } + } + pWInfo->iTop = sqlite3VdbeCurrentAddr(v); + if( db->mallocFailed ) goto whereBeginError; + + /* Generate the code to do the search. Each iteration of the for + ** loop below generates code for a single nested loop of the VM + ** program. + */ + for(ii=0; iinErr ) goto whereBeginError; + pLevel = &pWInfo->a[ii]; + wsFlags = pLevel->pWLoop->wsFlags; + pSrc = &pTabList->a[pLevel->iFrom]; + if( pSrc->fg.isMaterialized ){ + Subquery *pSubq; + int iOnce = 0; + assert( pSrc->fg.isSubquery ); + pSubq = pSrc->u4.pSubq; + if( pSrc->fg.isCorrelated==0 ){ + iOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); + }else{ + iOnce = 0; + } + sqlite3VdbeAddOp2(v, OP_Gosub, pSubq->regReturn, pSubq->addrFillSub); + VdbeComment((v, "materialize %!S", pSrc)); + if( iOnce ) sqlite3VdbeJumpHere(v, iOnce); + } + assert( pTabList == pWInfo->pTabList ); + if( (wsFlags & (WHERE_AUTO_INDEX|WHERE_BLOOMFILTER))!=0 ){ + if( (wsFlags & WHERE_AUTO_INDEX)!=0 ){ +#ifndef SQLITE_OMIT_AUTOMATIC_INDEX + constructAutomaticIndex(pParse, &pWInfo->sWC, notReady, pLevel); +#endif + }else{ + sqlite3ConstructBloomFilter(pWInfo, ii, pLevel, notReady); + } + if( db->mallocFailed ) goto whereBeginError; + } + addrExplain = sqlite3WhereExplainOneScan( + pParse, pTabList, pLevel, wctrlFlags + ); + pLevel->addrBody = sqlite3VdbeCurrentAddr(v); + notReady = sqlite3WhereCodeOneLoopStart(pParse,v,pWInfo,ii,pLevel,notReady); + pWInfo->iContinue = pLevel->addrCont; + if( (wsFlags&WHERE_MULTI_OR)==0 && (wctrlFlags&WHERE_OR_SUBCLAUSE)==0 ){ + sqlite3WhereAddScanStatus(v, pTabList, pLevel, addrExplain); + } + } + + /* Done. */ + VdbeModuleComment((v, "Begin WHERE-core")); + pWInfo->iEndWhere = sqlite3VdbeCurrentAddr(v); + return pWInfo; + + /* Jump here if malloc fails */ +whereBeginError: + if( pWInfo ){ + pParse->nQueryLoop = pWInfo->savedNQueryLoop; + whereInfoFree(db, pWInfo); + } +#ifdef WHERETRACE_ENABLED + /* Prevent harmless compiler warnings about debugging routines + ** being declared but never used */ + sqlite3ShowWhereLoopList(0); +#endif /* WHERETRACE_ENABLED */ + return 0; +} + +/* +** Part of sqlite3WhereEnd() will rewrite opcodes to reference the +** index rather than the main table. In SQLITE_DEBUG mode, we want +** to trace those changes if PRAGMA vdbe_addoptrace=on. This routine +** does that. +*/ +#ifndef SQLITE_DEBUG +# define OpcodeRewriteTrace(D,K,P) /* no-op */ +#else +# define OpcodeRewriteTrace(D,K,P) sqlite3WhereOpcodeRewriteTrace(D,K,P) + static void sqlite3WhereOpcodeRewriteTrace( + sqlite3 *db, + int pc, + VdbeOp *pOp + ){ + if( (db->flags & SQLITE_VdbeAddopTrace)==0 ) return; + sqlite3VdbePrintOp(0, pc, pOp); + sqlite3ShowWhereTerm(0); /* So compiler won't complain about unused func */ + } +#endif + +/* +** Generate the end of the WHERE loop. See comments on +** sqlite3WhereBegin() for additional information. +*/ +SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ + Parse *pParse = pWInfo->pParse; + Vdbe *v = pParse->pVdbe; + int i; + WhereLevel *pLevel; + WhereLoop *pLoop; + SrcList *pTabList = pWInfo->pTabList; + sqlite3 *db = pParse->db; + int iEnd = sqlite3VdbeCurrentAddr(v); + int nRJ = 0; +#ifndef SQLITE_DISABLE_SKIPAHEAD_DISTINCT + int addrSeek = 0; +#endif + + /* Generate loop termination code. + */ + VdbeModuleComment((v, "End WHERE-core")); + for(i=pWInfo->nLevel-1; i>=0; i--){ + int addr; + pLevel = &pWInfo->a[i]; + if( pLevel->pRJ ){ + /* Terminate the subroutine that forms the interior of the loop of + ** the RIGHT JOIN table */ + WhereRightJoin *pRJ = pLevel->pRJ; + sqlite3VdbeResolveLabel(v, pLevel->addrCont); + /* Replace addrCont with a new label that will never be used, just so + ** the subsequent call to resolve pLevel->addrCont will have something + ** to resolve. */ + pLevel->addrCont = sqlite3VdbeMakeLabel(pParse); + pRJ->endSubrtn = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeAddOp3(v, OP_Return, pRJ->regReturn, pRJ->addrSubrtn, 1); + VdbeCoverage(v); + nRJ++; + } + pLoop = pLevel->pWLoop; + if( pLevel->op!=OP_Noop ){ +#ifndef SQLITE_DISABLE_SKIPAHEAD_DISTINCT + Index *pIdx; + int n; + if( pWInfo->eDistinct==WHERE_DISTINCT_ORDERED + && i==pWInfo->nLevel-1 /* Ticket [ef9318757b152e3] 2017-10-21 */ + && (pLoop->wsFlags & WHERE_INDEXED)!=0 + && (pIdx = pLoop->u.btree.pIndex)->hasStat1 + && (n = pLoop->u.btree.nDistinctCol)>0 + && pIdx->aiRowLogEst[n]>=36 + ){ + int r1 = pParse->nMem+1; + int j, op; + for(j=0; jiIdxCur, j, r1+j); + } + pParse->nMem += n+1; + op = pLevel->op==OP_Prev ? OP_SeekLT : OP_SeekGT; + addrSeek = sqlite3VdbeAddOp4Int(v, op, pLevel->iIdxCur, 0, r1, n); + VdbeCoverageIf(v, op==OP_SeekLT); + VdbeCoverageIf(v, op==OP_SeekGT); + sqlite3VdbeAddOp2(v, OP_Goto, 1, pLevel->p2); + } +#endif /* SQLITE_DISABLE_SKIPAHEAD_DISTINCT */ + } + if( pTabList->a[pLevel->iFrom].fg.fromExists && i==pWInfo->nLevel-1 ){ + /* If the EXISTS-to-JOIN optimization was applied, then the EXISTS + ** loop(s) will be the inner-most loops of the join. There might be + ** multiple EXISTS loops, but they will all be nested, and the join + ** order will not have been changed by the query planner. If the + ** inner-most EXISTS loop sees a single successful row, it should + ** break out of *all* EXISTS loops. But only the inner-most of the + ** nested EXISTS loops should do this breakout. */ + int nOuter = 0; /* Nr of outer EXISTS that this one is nested within */ + while( nOutera[pLevel[-nOuter-1].iFrom].fg.fromExists ) break; + nOuter++; + } + testcase( nOuter>0 ); + sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel[-nOuter].addrBrk); + VdbeComment((v, "EXISTS break")); + } + sqlite3VdbeResolveLabel(v, pLevel->addrCont); + if( pLevel->op!=OP_Noop ){ + sqlite3VdbeAddOp3(v, pLevel->op, pLevel->p1, pLevel->p2, pLevel->p3); + sqlite3VdbeChangeP5(v, pLevel->p5); + VdbeCoverage(v); + VdbeCoverageIf(v, pLevel->op==OP_Next); + VdbeCoverageIf(v, pLevel->op==OP_Prev); + VdbeCoverageIf(v, pLevel->op==OP_VNext); + if( pLevel->regBignull ){ + sqlite3VdbeResolveLabel(v, pLevel->addrBignull); + sqlite3VdbeAddOp2(v, OP_DecrJumpZero, pLevel->regBignull, pLevel->p2-1); + VdbeCoverage(v); + } +#ifndef SQLITE_DISABLE_SKIPAHEAD_DISTINCT + if( addrSeek ){ + sqlite3VdbeJumpHere(v, addrSeek); + addrSeek = 0; + } +#endif + } + if( (pLoop->wsFlags & WHERE_IN_ABLE)!=0 && pLevel->u.in.nIn>0 ){ + struct InLoop *pIn; + int j; + sqlite3VdbeResolveLabel(v, pLevel->addrNxt); + for(j=pLevel->u.in.nIn, pIn=&pLevel->u.in.aInLoop[j-1]; j>0; j--, pIn--){ + assert( sqlite3VdbeGetOp(v, pIn->addrInTop+1)->opcode==OP_IsNull + || pParse->db->mallocFailed ); + sqlite3VdbeJumpHere(v, pIn->addrInTop+1); + if( pIn->eEndLoopOp!=OP_Noop ){ + if( pIn->nPrefix ){ + int bEarlyOut = + (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 + && (pLoop->wsFlags & WHERE_IN_EARLYOUT)!=0; + if( pLevel->iLeftJoin ){ + /* For LEFT JOIN queries, cursor pIn->iCur may not have been + ** opened yet. This occurs for WHERE clauses such as + ** "a = ? AND b IN (...)", where the index is on (a, b). If + ** the RHS of the (a=?) is NULL, then the "b IN (...)" may + ** never have been coded, but the body of the loop run to + ** return the null-row. So, if the cursor is not open yet, + ** jump over the OP_Next or OP_Prev instruction about to + ** be coded. */ + sqlite3VdbeAddOp2(v, OP_IfNotOpen, pIn->iCur, + sqlite3VdbeCurrentAddr(v) + 2 + bEarlyOut); + VdbeCoverage(v); + } + if( bEarlyOut ){ + sqlite3VdbeAddOp4Int(v, OP_IfNoHope, pLevel->iIdxCur, + sqlite3VdbeCurrentAddr(v)+2, + pIn->iBase, pIn->nPrefix); + VdbeCoverage(v); + /* Retarget the OP_IsNull against the left operand of IN so + ** it jumps past the OP_IfNoHope. This is because the + ** OP_IsNull also bypasses the OP_Affinity opcode that is + ** required by OP_IfNoHope. */ + sqlite3VdbeJumpHere(v, pIn->addrInTop+1); + } + } + sqlite3VdbeAddOp2(v, pIn->eEndLoopOp, pIn->iCur, pIn->addrInTop); + VdbeCoverage(v); + VdbeCoverageIf(v, pIn->eEndLoopOp==OP_Prev); + VdbeCoverageIf(v, pIn->eEndLoopOp==OP_Next); + } + sqlite3VdbeJumpHere(v, pIn->addrInTop-1); + } + } + sqlite3VdbeResolveLabel(v, pLevel->addrBrk); + if( pLevel->pRJ ){ + sqlite3VdbeAddOp3(v, OP_Return, pLevel->pRJ->regReturn, 0, 1); + VdbeCoverage(v); + } + if( pLevel->addrSkip ){ + sqlite3VdbeGoto(v, pLevel->addrSkip); + VdbeComment((v, "next skip-scan on %s", pLoop->u.btree.pIndex->zName)); + sqlite3VdbeJumpHere(v, pLevel->addrSkip); + sqlite3VdbeJumpHere(v, pLevel->addrSkip-2); + } +#ifndef SQLITE_LIKE_DOESNT_MATCH_BLOBS + if( pLevel->addrLikeRep ){ + sqlite3VdbeAddOp2(v, OP_DecrJumpZero, (int)(pLevel->iLikeRepCntr>>1), + pLevel->addrLikeRep); + VdbeCoverage(v); + } +#endif + if( pLevel->iLeftJoin ){ + int ws = pLoop->wsFlags; + addr = sqlite3VdbeAddOp1(v, OP_IfPos, pLevel->iLeftJoin); VdbeCoverage(v); + assert( (ws & WHERE_IDX_ONLY)==0 || (ws & WHERE_INDEXED)!=0 ); + if( (ws & WHERE_IDX_ONLY)==0 ){ + SrcItem *pSrc = &pTabList->a[pLevel->iFrom]; + assert( pLevel->iTabCur==pSrc->iCursor ); + if( pSrc->fg.viaCoroutine ){ + int m, n; + assert( pSrc->fg.isSubquery ); + n = pSrc->u4.pSubq->regResult; + assert( pSrc->pSTab!=0 ); + m = pSrc->pSTab->nCol; + sqlite3VdbeAddOp3(v, OP_Null, 0, n, n+m-1); + } + sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iTabCur); + } + if( (ws & WHERE_INDEXED) + || ((ws & WHERE_MULTI_OR) && pLevel->u.pCoveringIdx) + ){ + if( ws & WHERE_MULTI_OR ){ + Index *pIx = pLevel->u.pCoveringIdx; + int iDb = sqlite3SchemaToIndex(db, pIx->pSchema); + sqlite3VdbeAddOp3(v, OP_ReopenIdx, pLevel->iIdxCur, pIx->tnum, iDb); + sqlite3VdbeSetP4KeyInfo(pParse, pIx); + } + sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iIdxCur); + } + if( pLevel->op==OP_Return ){ + sqlite3VdbeAddOp2(v, OP_Gosub, pLevel->p1, pLevel->addrFirst); + }else{ + sqlite3VdbeGoto(v, pLevel->addrFirst); + } + sqlite3VdbeJumpHere(v, addr); + } + VdbeModuleComment((v, "End WHERE-loop%d: %s", i, + pWInfo->pTabList->a[pLevel->iFrom].pSTab->zName)); + } + + assert( pWInfo->nLevel<=pTabList->nSrc ); + for(i=0, pLevel=pWInfo->a; inLevel; i++, pLevel++){ + int k, last; + VdbeOp *pOp, *pLastOp; + Index *pIdx = 0; + SrcItem *pTabItem = &pTabList->a[pLevel->iFrom]; + Table *pTab = pTabItem->pSTab; + assert( pTab!=0 ); + pLoop = pLevel->pWLoop; + + /* Do RIGHT JOIN processing. Generate code that will output the + ** unmatched rows of the right operand of the RIGHT JOIN with + ** all of the columns of the left operand set to NULL. + */ + if( pLevel->pRJ ){ + sqlite3WhereRightJoinLoop(pWInfo, i, pLevel); + continue; + } + + /* For a co-routine, change all OP_Column references to the table of + ** the co-routine into OP_Copy of result contained in a register. + ** OP_Rowid becomes OP_Null. + */ + if( pTabItem->fg.viaCoroutine ){ + testcase( pParse->db->mallocFailed ); + assert( pTabItem->fg.isSubquery ); + assert( pTabItem->u4.pSubq->regResult>=0 ); + translateColumnToCopy(pParse, pLevel->addrBody, pLevel->iTabCur, + pTabItem->u4.pSubq->regResult, 0); + continue; + } + + /* If this scan uses an index, make VDBE code substitutions to read data + ** from the index instead of from the table where possible. In some cases + ** this optimization prevents the table from ever being read, which can + ** yield a significant performance boost. + ** + ** Calls to the code generator in between sqlite3WhereBegin and + ** sqlite3WhereEnd will have created code that references the table + ** directly. This loop scans all that code looking for opcodes + ** that reference the table and converts them into opcodes that + ** reference the index. + */ + if( pLoop->wsFlags & (WHERE_INDEXED|WHERE_IDX_ONLY) ){ + pIdx = pLoop->u.btree.pIndex; + }else if( pLoop->wsFlags & WHERE_MULTI_OR ){ + pIdx = pLevel->u.pCoveringIdx; + } + if( pIdx + && !db->mallocFailed + ){ + if( pWInfo->eOnePass==ONEPASS_OFF || !HasRowid(pIdx->pTable) ){ + last = iEnd; + }else{ + last = pWInfo->iEndWhere; + } + if( pIdx->bHasExpr ){ + IndexedExpr *p = pParse->pIdxEpr; + while( p ){ + if( p->iIdxCur==pLevel->iIdxCur ){ +#ifdef WHERETRACE_ENABLED + if( sqlite3WhereTrace & 0x200 ){ + sqlite3DebugPrintf("Disable pParse->pIdxEpr term {%d,%d}\n", + p->iIdxCur, p->iIdxCol); + if( sqlite3WhereTrace & 0x5000 ) sqlite3ShowExpr(p->pExpr); + } +#endif + p->iDataCur = -1; + p->iIdxCur = -1; + } + p = p->pIENext; + } + } + k = pLevel->addrBody + 1; +#ifdef SQLITE_DEBUG + if( db->flags & SQLITE_VdbeAddopTrace ){ + printf("TRANSLATE cursor %d->%d in opcode range %d..%d\n", + pLevel->iTabCur, pLevel->iIdxCur, k, last-1); + } + /* Proof that the "+1" on the k value above is safe */ + pOp = sqlite3VdbeGetOp(v, k - 1); + assert( pOp->opcode!=OP_Column || pOp->p1!=pLevel->iTabCur ); + assert( pOp->opcode!=OP_Rowid || pOp->p1!=pLevel->iTabCur ); + assert( pOp->opcode!=OP_IfNullRow || pOp->p1!=pLevel->iTabCur ); +#endif + pOp = sqlite3VdbeGetOp(v, k); + pLastOp = pOp + (last - k); + assert( pOp<=pLastOp ); + do{ + if( pOp->p1!=pLevel->iTabCur ){ + /* no-op */ + }else if( pOp->opcode==OP_Column +#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC + || pOp->opcode==OP_Offset +#endif + ){ + int x = pOp->p2; + assert( pIdx->pTable==pTab ); +#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC + if( pOp->opcode==OP_Offset ){ + /* Do not need to translate the column number */ + }else +#endif + if( !HasRowid(pTab) ){ + Index *pPk = sqlite3PrimaryKeyIndex(pTab); + x = pPk->aiColumn[x]; + assert( x>=0 ); + }else{ + testcase( x!=sqlite3StorageColumnToTable(pTab,x) ); + x = sqlite3StorageColumnToTable(pTab,x); + } + x = sqlite3TableColumnToIndex(pIdx, x); + if( x>=0 ){ + pOp->p2 = x; + pOp->p1 = pLevel->iIdxCur; + OpcodeRewriteTrace(db, k, pOp); + }else if( pLoop->wsFlags & (WHERE_IDX_ONLY|WHERE_EXPRIDX) ){ + if( pLoop->wsFlags & WHERE_IDX_ONLY ){ + /* An error. pLoop is supposed to be a covering index loop, + ** and yet the VM code refers to a column of the table that + ** is not part of the index. */ + sqlite3ErrorMsg(pParse, "internal query planner error"); + pParse->rc = SQLITE_INTERNAL; + }else{ + /* The WHERE_EXPRIDX flag is set by the planner when it is likely + ** that pLoop is a covering index loop, but it is not possible + ** to be 100% sure. In this case, any OP_Explain opcode + ** corresponding to this loop describes the index as a "COVERING + ** INDEX". But, pOp proves that pLoop is not actually a covering + ** index loop. So clear the WHERE_EXPRIDX flag and rewrite the + ** text that accompanies the OP_Explain opcode, if any. */ + pLoop->wsFlags &= ~WHERE_EXPRIDX; + sqlite3WhereAddExplainText(pParse, + pLevel->addrBody-1, + pTabList, + pLevel, + pWInfo->wctrlFlags + ); + } + } + }else if( pOp->opcode==OP_Rowid ){ + pOp->p1 = pLevel->iIdxCur; + pOp->opcode = OP_IdxRowid; + OpcodeRewriteTrace(db, k, pOp); + }else if( pOp->opcode==OP_IfNullRow ){ + pOp->p1 = pLevel->iIdxCur; + OpcodeRewriteTrace(db, k, pOp); + } +#ifdef SQLITE_DEBUG + k++; +#endif + }while( (++pOp)flags & SQLITE_VdbeAddopTrace ) printf("TRANSLATE complete\n"); +#endif + } + } + + /* The "break" point is here, just past the end of the outer loop. + ** Set it. + */ + sqlite3VdbeResolveLabel(v, pWInfo->iBreak); + + /* Final cleanup + */ + pParse->nQueryLoop = pWInfo->savedNQueryLoop; + whereInfoFree(db, pWInfo); + pParse->withinRJSubrtn -= nRJ; + return; +} + +/************** End of where.c ***********************************************/ +/************** Begin file window.c ******************************************/ +/* +** 2018 May 08 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +*/ +/* #include "sqliteInt.h" */ + +#ifndef SQLITE_OMIT_WINDOWFUNC + +/* +** SELECT REWRITING +** +** Any SELECT statement that contains one or more window functions in +** either the select list or ORDER BY clause (the only two places window +** functions may be used) is transformed by function sqlite3WindowRewrite() +** in order to support window function processing. For example, with the +** schema: +** +** CREATE TABLE t1(a, b, c, d, e, f, g); +** +** the statement: +** +** SELECT a+1, max(b) OVER (PARTITION BY c ORDER BY d) FROM t1 ORDER BY e; +** +** is transformed to: +** +** SELECT a+1, max(b) OVER (PARTITION BY c ORDER BY d) FROM ( +** SELECT a, e, c, d, b FROM t1 ORDER BY c, d +** ) ORDER BY e; +** +** The flattening optimization is disabled when processing this transformed +** SELECT statement. This allows the implementation of the window function +** (in this case max()) to process rows sorted in order of (c, d), which +** makes things easier for obvious reasons. More generally: +** +** * FROM, WHERE, GROUP BY and HAVING clauses are all moved to +** the sub-query. +** +** * ORDER BY, LIMIT and OFFSET remain part of the parent query. +** +** * Terminals from each of the expression trees that make up the +** select-list and ORDER BY expressions in the parent query are +** selected by the sub-query. For the purposes of the transformation, +** terminals are column references and aggregate functions. +** +** If there is more than one window function in the SELECT that uses +** the same window declaration (the OVER bit), then a single scan may +** be used to process more than one window function. For example: +** +** SELECT max(b) OVER (PARTITION BY c ORDER BY d), +** min(e) OVER (PARTITION BY c ORDER BY d) +** FROM t1; +** +** is transformed in the same way as the example above. However: +** +** SELECT max(b) OVER (PARTITION BY c ORDER BY d), +** min(e) OVER (PARTITION BY a ORDER BY b) +** FROM t1; +** +** Must be transformed to: +** +** SELECT max(b) OVER (PARTITION BY c ORDER BY d) FROM ( +** SELECT e, min(e) OVER (PARTITION BY a ORDER BY b), c, d, b FROM +** SELECT a, e, c, d, b FROM t1 ORDER BY a, b +** ) ORDER BY c, d +** ) ORDER BY e; +** +** so that both min() and max() may process rows in the order defined by +** their respective window declarations. +** +** INTERFACE WITH SELECT.C +** +** When processing the rewritten SELECT statement, code in select.c calls +** sqlite3WhereBegin() to begin iterating through the results of the +** sub-query, which is always implemented as a co-routine. It then calls +** sqlite3WindowCodeStep() to process rows and finish the scan by calling +** sqlite3WhereEnd(). +** +** sqlite3WindowCodeStep() generates VM code so that, for each row returned +** by the sub-query a sub-routine (OP_Gosub) coded by select.c is invoked. +** When the sub-routine is invoked: +** +** * The results of all window-functions for the row are stored +** in the associated Window.regResult registers. +** +** * The required terminal values are stored in the current row of +** temp table Window.iEphCsr. +** +** In some cases, depending on the window frame and the specific window +** functions invoked, sqlite3WindowCodeStep() caches each entire partition +** in a temp table before returning any rows. In other cases it does not. +** This detail is encapsulated within this file, the code generated by +** select.c is the same in either case. +** +** BUILT-IN WINDOW FUNCTIONS +** +** This implementation features the following built-in window functions: +** +** row_number() +** rank() +** dense_rank() +** percent_rank() +** cume_dist() +** ntile(N) +** lead(expr [, offset [, default]]) +** lag(expr [, offset [, default]]) +** first_value(expr) +** last_value(expr) +** nth_value(expr, N) +** +** These are the same built-in window functions supported by Postgres. +** Although the behaviour of aggregate window functions (functions that +** can be used as either aggregates or window functions) allows them to +** be implemented using an API, built-in window functions are much more +** esoteric. Additionally, some window functions (e.g. nth_value()) +** may only be implemented by caching the entire partition in memory. +** As such, some built-in window functions use the same API as aggregate +** window functions and some are implemented directly using VDBE +** instructions. Additionally, for those functions that use the API, the +** window frame is sometimes modified before the SELECT statement is +** rewritten. For example, regardless of the specified window frame, the +** row_number() function always uses: +** +** ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +** +** See sqlite3WindowUpdate() for details. +** +** As well as some of the built-in window functions, aggregate window +** functions min() and max() are implemented using VDBE instructions if +** the start of the window frame is declared as anything other than +** UNBOUNDED PRECEDING. +*/ + +/* +** Implementation of built-in window function row_number(). Assumes that the +** window frame has been coerced to: +** +** ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +*/ +static void row_numberStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + i64 *p = (i64*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ) (*p)++; + UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(apArg); +} +static void row_numberValueFunc(sqlite3_context *pCtx){ + i64 *p = (i64*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + sqlite3_result_int64(pCtx, (p ? *p : 0)); +} + +/* +** Context object type used by rank(), dense_rank(), percent_rank() and +** cume_dist(). +*/ +struct CallCount { + i64 nValue; + i64 nStep; + i64 nTotal; +}; + +/* +** Implementation of built-in window function dense_rank(). Assumes that +** the window frame has been set to: +** +** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +*/ +static void dense_rankStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ) p->nStep = 1; + UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(apArg); +} +static void dense_rankValueFunc(sqlite3_context *pCtx){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + if( p->nStep ){ + p->nValue++; + p->nStep = 0; + } + sqlite3_result_int64(pCtx, p->nValue); + } +} + +/* +** Implementation of built-in window function nth_value(). This +** implementation is used in "slow mode" only - when the EXCLUDE clause +** is not set to the default value "NO OTHERS". +*/ +struct NthValueCtx { + i64 nStep; + sqlite3_value *pValue; +}; +static void nth_valueStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct NthValueCtx *p; + p = (struct NthValueCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + i64 iVal; + switch( sqlite3_value_numeric_type(apArg[1]) ){ + case SQLITE_INTEGER: + iVal = sqlite3_value_int64(apArg[1]); + break; + case SQLITE_FLOAT: { + double fVal = sqlite3_value_double(apArg[1]); + if( ((i64)fVal)!=fVal ) goto error_out; + iVal = (i64)fVal; + break; + } + default: + goto error_out; + } + if( iVal<=0 ) goto error_out; + + p->nStep++; + if( iVal==p->nStep ){ + p->pValue = sqlite3_value_dup(apArg[0]); + if( !p->pValue ){ + sqlite3_result_error_nomem(pCtx); + } + } + } + UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(apArg); + return; + + error_out: + sqlite3_result_error( + pCtx, "second argument to nth_value must be a positive integer", -1 + ); +} +static void nth_valueFinalizeFunc(sqlite3_context *pCtx){ + struct NthValueCtx *p; + p = (struct NthValueCtx*)sqlite3_aggregate_context(pCtx, 0); + if( p && p->pValue ){ + sqlite3_result_value(pCtx, p->pValue); + sqlite3_value_free(p->pValue); + p->pValue = 0; + } +} +#define nth_valueInvFunc noopStepFunc +#define nth_valueValueFunc noopValueFunc + +static void first_valueStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct NthValueCtx *p; + p = (struct NthValueCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p && p->pValue==0 ){ + p->pValue = sqlite3_value_dup(apArg[0]); + if( !p->pValue ){ + sqlite3_result_error_nomem(pCtx); + } + } + UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(apArg); +} +static void first_valueFinalizeFunc(sqlite3_context *pCtx){ + struct NthValueCtx *p; + p = (struct NthValueCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p && p->pValue ){ + sqlite3_result_value(pCtx, p->pValue); + sqlite3_value_free(p->pValue); + p->pValue = 0; + } +} +#define first_valueInvFunc noopStepFunc +#define first_valueValueFunc noopValueFunc + +/* +** Implementation of built-in window function rank(). Assumes that +** the window frame has been set to: +** +** RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW +*/ +static void rankStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + p->nStep++; + if( p->nValue==0 ){ + p->nValue = p->nStep; + } + } + UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(apArg); +} +static void rankValueFunc(sqlite3_context *pCtx){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + sqlite3_result_int64(pCtx, p->nValue); + p->nValue = 0; + } +} + +/* +** Implementation of built-in window function percent_rank(). Assumes that +** the window frame has been set to: +** +** GROUPS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING +*/ +static void percent_rankStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct CallCount *p; + UNUSED_PARAMETER(nArg); assert( nArg==0 ); + UNUSED_PARAMETER(apArg); + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + p->nTotal++; + } +} +static void percent_rankInvFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct CallCount *p; + UNUSED_PARAMETER(nArg); assert( nArg==0 ); + UNUSED_PARAMETER(apArg); + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + p->nStep++; +} +static void percent_rankValueFunc(sqlite3_context *pCtx){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + p->nValue = p->nStep; + if( p->nTotal>1 ){ + double r = (double)p->nValue / (double)(p->nTotal-1); + sqlite3_result_double(pCtx, r); + }else{ + sqlite3_result_double(pCtx, 0.0); + } + } +} +#define percent_rankFinalizeFunc percent_rankValueFunc + +/* +** Implementation of built-in window function cume_dist(). Assumes that +** the window frame has been set to: +** +** GROUPS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING +*/ +static void cume_distStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct CallCount *p; + UNUSED_PARAMETER(nArg); assert( nArg==0 ); + UNUSED_PARAMETER(apArg); + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + p->nTotal++; + } +} +static void cume_distInvFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct CallCount *p; + UNUSED_PARAMETER(nArg); assert( nArg==0 ); + UNUSED_PARAMETER(apArg); + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + p->nStep++; +} +static void cume_distValueFunc(sqlite3_context *pCtx){ + struct CallCount *p; + p = (struct CallCount*)sqlite3_aggregate_context(pCtx, 0); + if( p ){ + double r = (double)(p->nStep) / (double)(p->nTotal); + sqlite3_result_double(pCtx, r); + } +} +#define cume_distFinalizeFunc cume_distValueFunc + +/* +** Context object for ntile() window function. +*/ +struct NtileCtx { + i64 nTotal; /* Total rows in partition */ + i64 nParam; /* Parameter passed to ntile(N) */ + i64 iRow; /* Current row */ +}; + +/* +** Implementation of ntile(). This assumes that the window frame has +** been coerced to: +** +** ROWS CURRENT ROW AND UNBOUNDED FOLLOWING +*/ +static void ntileStepFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct NtileCtx *p; + assert( nArg==1 ); UNUSED_PARAMETER(nArg); + p = (struct NtileCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p ){ + if( p->nTotal==0 ){ + p->nParam = sqlite3_value_int64(apArg[0]); + if( p->nParam<=0 ){ + sqlite3_result_error( + pCtx, "argument of ntile must be a positive integer", -1 + ); + } + } + p->nTotal++; + } +} +static void ntileInvFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct NtileCtx *p; + assert( nArg==1 ); UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(apArg); + p = (struct NtileCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + p->iRow++; +} +static void ntileValueFunc(sqlite3_context *pCtx){ + struct NtileCtx *p; + p = (struct NtileCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p && p->nParam>0 ){ + int nSize = (p->nTotal / p->nParam); + if( nSize==0 ){ + sqlite3_result_int64(pCtx, p->iRow+1); + }else{ + i64 nLarge = p->nTotal - p->nParam*nSize; + i64 iSmall = nLarge*(nSize+1); + i64 iRow = p->iRow; + + assert( (nLarge*(nSize+1) + (p->nParam-nLarge)*nSize)==p->nTotal ); + + if( iRowpVal); + p->pVal = sqlite3_value_dup(apArg[0]); + if( p->pVal==0 ){ + sqlite3_result_error_nomem(pCtx); + }else{ + p->nVal++; + } + } +} +static void last_valueInvFunc( + sqlite3_context *pCtx, + int nArg, + sqlite3_value **apArg +){ + struct LastValueCtx *p; + UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(apArg); + p = (struct LastValueCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( ALWAYS(p) ){ + p->nVal--; + if( p->nVal==0 ){ + sqlite3_value_free(p->pVal); + p->pVal = 0; + } + } +} +static void last_valueValueFunc(sqlite3_context *pCtx){ + struct LastValueCtx *p; + p = (struct LastValueCtx*)sqlite3_aggregate_context(pCtx, 0); + if( p && p->pVal ){ + sqlite3_result_value(pCtx, p->pVal); + } +} +static void last_valueFinalizeFunc(sqlite3_context *pCtx){ + struct LastValueCtx *p; + p = (struct LastValueCtx*)sqlite3_aggregate_context(pCtx, sizeof(*p)); + if( p && p->pVal ){ + sqlite3_result_value(pCtx, p->pVal); + sqlite3_value_free(p->pVal); + p->pVal = 0; + } +} + +/* +** Static names for the built-in window function names. These static +** names are used, rather than string literals, so that FuncDef objects +** can be associated with a particular window function by direct +** comparison of the zName pointer. Example: +** +** if( pFuncDef->zName==row_valueName ){ ... } +*/ +static const char row_numberName[] = "row_number"; +static const char dense_rankName[] = "dense_rank"; +static const char rankName[] = "rank"; +static const char percent_rankName[] = "percent_rank"; +static const char cume_distName[] = "cume_dist"; +static const char ntileName[] = "ntile"; +static const char last_valueName[] = "last_value"; +static const char nth_valueName[] = "nth_value"; +static const char first_valueName[] = "first_value"; +static const char leadName[] = "lead"; +static const char lagName[] = "lag"; + +/* +** No-op implementations of xStep() and xFinalize(). Used as place-holders +** for built-in window functions that never call those interfaces. +** +** The noopValueFunc() is called but is expected to do nothing. The +** noopStepFunc() is never called, and so it is marked with NO_TEST to +** let the test coverage routine know not to expect this function to be +** invoked. +*/ +static void noopStepFunc( /*NO_TEST*/ + sqlite3_context *p, /*NO_TEST*/ + int n, /*NO_TEST*/ + sqlite3_value **a /*NO_TEST*/ +){ /*NO_TEST*/ + UNUSED_PARAMETER(p); /*NO_TEST*/ + UNUSED_PARAMETER(n); /*NO_TEST*/ + UNUSED_PARAMETER(a); /*NO_TEST*/ + assert(0); /*NO_TEST*/ +} /*NO_TEST*/ +static void noopValueFunc(sqlite3_context *p){ UNUSED_PARAMETER(p); /*no-op*/ } + +/* Window functions that use all window interfaces: xStep, xFinal, +** xValue, and xInverse */ +#define WINDOWFUNCALL(name,nArg,extra) { \ + nArg, (SQLITE_FUNC_BUILTIN|SQLITE_UTF8|SQLITE_FUNC_WINDOW|extra), 0, 0, \ + name ## StepFunc, name ## FinalizeFunc, name ## ValueFunc, \ + name ## InvFunc, name ## Name, {0} \ +} + +/* Window functions that are implemented using bytecode and thus have +** no-op routines for their methods */ +#define WINDOWFUNCNOOP(name,nArg,extra) { \ + nArg, (SQLITE_FUNC_BUILTIN|SQLITE_UTF8|SQLITE_FUNC_WINDOW|extra), 0, 0, \ + noopStepFunc, noopValueFunc, noopValueFunc, \ + noopStepFunc, name ## Name, {0} \ +} + +/* Window functions that use all window interfaces: xStep, the +** same routine for xFinalize and xValue and which never call +** xInverse. */ +#define WINDOWFUNCX(name,nArg,extra) { \ + nArg, (SQLITE_FUNC_BUILTIN|SQLITE_UTF8|SQLITE_FUNC_WINDOW|extra), 0, 0, \ + name ## StepFunc, name ## ValueFunc, name ## ValueFunc, \ + noopStepFunc, name ## Name, {0} \ +} + + +/* +** Register those built-in window functions that are not also aggregates. +*/ +SQLITE_PRIVATE void sqlite3WindowFunctions(void){ + static FuncDef aWindowFuncs[] = { + WINDOWFUNCX(row_number, 0, 0), + WINDOWFUNCX(dense_rank, 0, 0), + WINDOWFUNCX(rank, 0, 0), + WINDOWFUNCALL(percent_rank, 0, 0), + WINDOWFUNCALL(cume_dist, 0, 0), + WINDOWFUNCALL(ntile, 1, 0), + WINDOWFUNCALL(last_value, 1, 0), + WINDOWFUNCALL(nth_value, 2, 0), + WINDOWFUNCALL(first_value, 1, 0), + WINDOWFUNCNOOP(lead, 1, 0), + WINDOWFUNCNOOP(lead, 2, 0), + WINDOWFUNCNOOP(lead, 3, 0), + WINDOWFUNCNOOP(lag, 1, 0), + WINDOWFUNCNOOP(lag, 2, 0), + WINDOWFUNCNOOP(lag, 3, 0), + }; + sqlite3InsertBuiltinFuncs(aWindowFuncs, ArraySize(aWindowFuncs)); +} + +static Window *windowFind(Parse *pParse, Window *pList, const char *zName){ + Window *p; + for(p=pList; p; p=p->pNextWin){ + if( sqlite3StrICmp(p->zName, zName)==0 ) break; + } + if( p==0 ){ + sqlite3ErrorMsg(pParse, "no such window: %s", zName); + } + return p; +} + +/* +** This function is called immediately after resolving the function name +** for a window function within a SELECT statement. Argument pList is a +** linked list of WINDOW definitions for the current SELECT statement. +** Argument pFunc is the function definition just resolved and pWin +** is the Window object representing the associated OVER clause. This +** function updates the contents of pWin as follows: +** +** * If the OVER clause referred to a named window (as in "max(x) OVER win"), +** search list pList for a matching WINDOW definition, and update pWin +** accordingly. If no such WINDOW clause can be found, leave an error +** in pParse. +** +** * If the function is a built-in window function that requires the +** window to be coerced (see "BUILT-IN WINDOW FUNCTIONS" at the top +** of this file), pWin is updated here. +*/ +SQLITE_PRIVATE void sqlite3WindowUpdate( + Parse *pParse, + Window *pList, /* List of named windows for this SELECT */ + Window *pWin, /* Window frame to update */ + FuncDef *pFunc /* Window function definition */ +){ + if( pWin->zName && pWin->eFrmType==0 ){ + Window *p = windowFind(pParse, pList, pWin->zName); + if( p==0 ) return; + pWin->pPartition = sqlite3ExprListDup(pParse->db, p->pPartition, 0); + pWin->pOrderBy = sqlite3ExprListDup(pParse->db, p->pOrderBy, 0); + pWin->pStart = sqlite3ExprDup(pParse->db, p->pStart, 0); + pWin->pEnd = sqlite3ExprDup(pParse->db, p->pEnd, 0); + pWin->eStart = p->eStart; + pWin->eEnd = p->eEnd; + pWin->eFrmType = p->eFrmType; + pWin->eExclude = p->eExclude; + }else{ + sqlite3WindowChain(pParse, pWin, pList); + } + if( (pWin->eFrmType==TK_RANGE) + && (pWin->pStart || pWin->pEnd) + && (pWin->pOrderBy==0 || pWin->pOrderBy->nExpr!=1) + ){ + sqlite3ErrorMsg(pParse, + "RANGE with offset PRECEDING/FOLLOWING requires one ORDER BY expression" + ); + }else + if( pFunc->funcFlags & SQLITE_FUNC_WINDOW ){ + sqlite3 *db = pParse->db; + if( pWin->pFilter ){ + sqlite3ErrorMsg(pParse, + "FILTER clause may only be used with aggregate window functions" + ); + }else{ + struct WindowUpdate { + const char *zFunc; + int eFrmType; + int eStart; + int eEnd; + } aUp[] = { + { row_numberName, TK_ROWS, TK_UNBOUNDED, TK_CURRENT }, + { dense_rankName, TK_RANGE, TK_UNBOUNDED, TK_CURRENT }, + { rankName, TK_RANGE, TK_UNBOUNDED, TK_CURRENT }, + { percent_rankName, TK_GROUPS, TK_CURRENT, TK_UNBOUNDED }, + { cume_distName, TK_GROUPS, TK_FOLLOWING, TK_UNBOUNDED }, + { ntileName, TK_ROWS, TK_CURRENT, TK_UNBOUNDED }, + { leadName, TK_ROWS, TK_UNBOUNDED, TK_UNBOUNDED }, + { lagName, TK_ROWS, TK_UNBOUNDED, TK_CURRENT }, + }; + int i; + for(i=0; izName==aUp[i].zFunc ){ + sqlite3ExprDelete(db, pWin->pStart); + sqlite3ExprDelete(db, pWin->pEnd); + pWin->pEnd = pWin->pStart = 0; + pWin->eFrmType = aUp[i].eFrmType; + pWin->eStart = aUp[i].eStart; + pWin->eEnd = aUp[i].eEnd; + pWin->eExclude = 0; + if( pWin->eStart==TK_FOLLOWING ){ + pWin->pStart = sqlite3Expr(db, TK_INTEGER, "1"); + } + break; + } + } + } + } + pWin->pWFunc = pFunc; +} + +/* +** Context object passed through sqlite3WalkExprList() to +** selectWindowRewriteExprCb() by selectWindowRewriteEList(). +*/ +typedef struct WindowRewrite WindowRewrite; +struct WindowRewrite { + Window *pWin; + SrcList *pSrc; + ExprList *pSub; + Table *pTab; + Select *pSubSelect; /* Current sub-select, if any */ +}; + +/* +** Callback function used by selectWindowRewriteEList(). If necessary, +** this function appends to the output expression-list and updates +** expression (*ppExpr) in place. +*/ +static int selectWindowRewriteExprCb(Walker *pWalker, Expr *pExpr){ + struct WindowRewrite *p = pWalker->u.pRewrite; + Parse *pParse = pWalker->pParse; + assert( p!=0 ); + assert( p->pWin!=0 ); + + /* If this function is being called from within a scalar sub-select + ** that used by the SELECT statement being processed, only process + ** TK_COLUMN expressions that refer to it (the outer SELECT). Do + ** not process aggregates or window functions at all, as they belong + ** to the scalar sub-select. */ + if( p->pSubSelect ){ + if( pExpr->op!=TK_COLUMN ){ + return WRC_Continue; + }else{ + int nSrc = p->pSrc->nSrc; + int i; + for(i=0; iiTable==p->pSrc->a[i].iCursor ) break; + } + if( i==nSrc ) return WRC_Continue; + } + } + + switch( pExpr->op ){ + + case TK_FUNCTION: + if( !ExprHasProperty(pExpr, EP_WinFunc) ){ + break; + }else{ + Window *pWin; + for(pWin=p->pWin; pWin; pWin=pWin->pNextWin){ + if( pExpr->y.pWin==pWin ){ + assert( pWin->pOwner==pExpr ); + return WRC_Prune; + } + } + } + /* no break */ deliberate_fall_through + + case TK_IF_NULL_ROW: + case TK_AGG_FUNCTION: + case TK_COLUMN: { + int iCol = -1; + if( pParse->db->mallocFailed ) return WRC_Abort; + if( p->pSub ){ + int i; + for(i=0; ipSub->nExpr; i++){ + if( 0==sqlite3ExprCompare(0, p->pSub->a[i].pExpr, pExpr, -1) ){ + iCol = i; + break; + } + } + } + if( iCol<0 ){ + Expr *pDup = sqlite3ExprDup(pParse->db, pExpr, 0); + if( pDup && pDup->op==TK_AGG_FUNCTION ) pDup->op = TK_FUNCTION; + p->pSub = sqlite3ExprListAppend(pParse, p->pSub, pDup); + } + if( p->pSub ){ + int f = pExpr->flags & EP_Collate; + assert( ExprHasProperty(pExpr, EP_Static)==0 ); + ExprSetProperty(pExpr, EP_Static); + sqlite3ExprDelete(pParse->db, pExpr); + ExprClearProperty(pExpr, EP_Static); + memset(pExpr, 0, sizeof(Expr)); + + pExpr->op = TK_COLUMN; + pExpr->iColumn = (iCol<0 ? p->pSub->nExpr-1: iCol); + pExpr->iTable = p->pWin->iEphCsr; + pExpr->y.pTab = p->pTab; + pExpr->flags = f; + } + if( pParse->db->mallocFailed ) return WRC_Abort; + break; + } + + default: /* no-op */ + break; + } + + return WRC_Continue; +} +static int selectWindowRewriteSelectCb(Walker *pWalker, Select *pSelect){ + struct WindowRewrite *p = pWalker->u.pRewrite; + Select *pSave = p->pSubSelect; + if( pSave==pSelect ){ + return WRC_Continue; + }else{ + p->pSubSelect = pSelect; + sqlite3WalkSelect(pWalker, pSelect); + p->pSubSelect = pSave; + } + return WRC_Prune; +} + + +/* +** Iterate through each expression in expression-list pEList. For each: +** +** * TK_COLUMN, +** * aggregate function, or +** * window function with a Window object that is not a member of the +** Window list passed as the second argument (pWin). +** +** Append the node to output expression-list (*ppSub). And replace it +** with a TK_COLUMN that reads the (N-1)th element of table +** pWin->iEphCsr, where N is the number of elements in (*ppSub) after +** appending the new one. +*/ +static void selectWindowRewriteEList( + Parse *pParse, + Window *pWin, + SrcList *pSrc, + ExprList *pEList, /* Rewrite expressions in this list */ + Table *pTab, + ExprList **ppSub /* IN/OUT: Sub-select expression-list */ +){ + Walker sWalker; + WindowRewrite sRewrite; + + assert( pWin!=0 ); + memset(&sWalker, 0, sizeof(Walker)); + memset(&sRewrite, 0, sizeof(WindowRewrite)); + + sRewrite.pSub = *ppSub; + sRewrite.pWin = pWin; + sRewrite.pSrc = pSrc; + sRewrite.pTab = pTab; + + sWalker.pParse = pParse; + sWalker.xExprCallback = selectWindowRewriteExprCb; + sWalker.xSelectCallback = selectWindowRewriteSelectCb; + sWalker.u.pRewrite = &sRewrite; + + (void)sqlite3WalkExprList(&sWalker, pEList); + + *ppSub = sRewrite.pSub; +} + +/* +** Append a copy of each expression in expression-list pAppend to +** expression list pList. Return a pointer to the result list. +*/ +static ExprList *exprListAppendList( + Parse *pParse, /* Parsing context */ + ExprList *pList, /* List to which to append. Might be NULL */ + ExprList *pAppend, /* List of values to append. Might be NULL */ + int bIntToNull +){ + if( pAppend ){ + int i; + int nInit = pList ? pList->nExpr : 0; + for(i=0; inExpr; i++){ + sqlite3 *db = pParse->db; + Expr *pDup = sqlite3ExprDup(db, pAppend->a[i].pExpr, 0); + if( db->mallocFailed ){ + sqlite3ExprDelete(db, pDup); + break; + } + if( bIntToNull ){ + int iDummy; + Expr *pSub; + pSub = sqlite3ExprSkipCollateAndLikely(pDup); + if( sqlite3ExprIsInteger(pSub, &iDummy, 0) ){ + pSub->op = TK_NULL; + pSub->flags &= ~(EP_IntValue|EP_IsTrue|EP_IsFalse); + pSub->u.zToken = 0; + } + } + pList = sqlite3ExprListAppend(pParse, pList, pDup); + if( pList ) pList->a[nInit+i].fg.sortFlags = pAppend->a[i].fg.sortFlags; + } + } + return pList; +} + +/* +** When rewriting a query, if the new subquery in the FROM clause +** contains TK_AGG_FUNCTION nodes that refer to an outer query, +** then we have to increase the Expr->op2 values of those nodes +** due to the extra subquery layer that was added. +** +** See also the incrAggDepth() routine in resolve.c +*/ +static int sqlite3WindowExtraAggFuncDepth(Walker *pWalker, Expr *pExpr){ + if( pExpr->op==TK_AGG_FUNCTION + && pExpr->op2>=pWalker->walkerDepth + ){ + pExpr->op2++; + } + return WRC_Continue; +} + +static int disallowAggregatesInOrderByCb(Walker *pWalker, Expr *pExpr){ + if( pExpr->op==TK_AGG_FUNCTION && pExpr->pAggInfo==0 ){ + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + sqlite3ErrorMsg(pWalker->pParse, + "misuse of aggregate: %s()", pExpr->u.zToken); + } + return WRC_Continue; +} + +/* +** If the SELECT statement passed as the second argument does not invoke +** any SQL window functions, this function is a no-op. Otherwise, it +** rewrites the SELECT statement so that window function xStep functions +** are invoked in the correct order as described under "SELECT REWRITING" +** at the top of this file. +*/ +SQLITE_PRIVATE int sqlite3WindowRewrite(Parse *pParse, Select *p){ + int rc = SQLITE_OK; + if( p->pWin + && p->pPrior==0 + && ALWAYS((p->selFlags & SF_WinRewrite)==0) + && ALWAYS(!IN_RENAME_OBJECT) + ){ + Vdbe *v = sqlite3GetVdbe(pParse); + sqlite3 *db = pParse->db; + Select *pSub = 0; /* The subquery */ + SrcList *pSrc = p->pSrc; + Expr *pWhere = p->pWhere; + ExprList *pGroupBy = p->pGroupBy; + Expr *pHaving = p->pHaving; + ExprList *pSort = 0; + + ExprList *pSublist = 0; /* Expression list for sub-query */ + Window *pMWin = p->pWin; /* Main window object */ + Window *pWin; /* Window object iterator */ + Table *pTab; + Walker w; + + u32 selFlags = p->selFlags; + + pTab = sqlite3DbMallocZero(db, sizeof(Table)); + if( pTab==0 ){ + return sqlite3ErrorToParser(db, SQLITE_NOMEM); + } + sqlite3AggInfoPersistWalkerInit(&w, pParse); + sqlite3WalkSelect(&w, p); + if( (p->selFlags & SF_Aggregate)==0 ){ + w.xExprCallback = disallowAggregatesInOrderByCb; + w.xSelectCallback = 0; + sqlite3WalkExprList(&w, p->pOrderBy); + } + + p->pSrc = 0; + p->pWhere = 0; + p->pGroupBy = 0; + p->pHaving = 0; + p->selFlags &= ~(u32)SF_Aggregate; + p->selFlags |= SF_WinRewrite; + + /* Create the ORDER BY clause for the sub-select. This is the concatenation + ** of the window PARTITION and ORDER BY clauses. Then, if this makes it + ** redundant, remove the ORDER BY from the parent SELECT. */ + pSort = exprListAppendList(pParse, 0, pMWin->pPartition, 1); + pSort = exprListAppendList(pParse, pSort, pMWin->pOrderBy, 1); + if( pSort && p->pOrderBy && p->pOrderBy->nExpr<=pSort->nExpr ){ + int nSave = pSort->nExpr; + pSort->nExpr = p->pOrderBy->nExpr; + if( sqlite3ExprListCompare(pSort, p->pOrderBy, -1)==0 ){ + sqlite3ExprListDelete(db, p->pOrderBy); + p->pOrderBy = 0; + } + pSort->nExpr = nSave; + } + + /* Assign a cursor number for the ephemeral table used to buffer rows. + ** The OpenEphemeral instruction is coded later, after it is known how + ** many columns the table will have. */ + pMWin->iEphCsr = pParse->nTab++; + pParse->nTab += 3; + + selectWindowRewriteEList(pParse, pMWin, pSrc, p->pEList, pTab, &pSublist); + selectWindowRewriteEList(pParse, pMWin, pSrc, p->pOrderBy, pTab, &pSublist); + pMWin->nBufferCol = (pSublist ? pSublist->nExpr : 0); + + /* Append the PARTITION BY and ORDER BY expressions to the to the + ** sub-select expression list. They are required to figure out where + ** boundaries for partitions and sets of peer rows lie. */ + pSublist = exprListAppendList(pParse, pSublist, pMWin->pPartition, 0); + pSublist = exprListAppendList(pParse, pSublist, pMWin->pOrderBy, 0); + + /* Append the arguments passed to each window function to the + ** sub-select expression list. Also allocate two registers for each + ** window function - one for the accumulator, another for interim + ** results. */ + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + ExprList *pArgs; + assert( ExprUseXList(pWin->pOwner) ); + assert( pWin->pWFunc!=0 ); + pArgs = pWin->pOwner->x.pList; + if( pWin->pWFunc->funcFlags & SQLITE_SUBTYPE ){ + selectWindowRewriteEList(pParse, pMWin, pSrc, pArgs, pTab, &pSublist); + pWin->iArgCol = (pSublist ? pSublist->nExpr : 0); + pWin->bExprArgs = 1; + }else{ + pWin->iArgCol = (pSublist ? pSublist->nExpr : 0); + pSublist = exprListAppendList(pParse, pSublist, pArgs, 0); + } + if( pWin->pFilter ){ + Expr *pFilter = sqlite3ExprDup(db, pWin->pFilter, 0); + pSublist = sqlite3ExprListAppend(pParse, pSublist, pFilter); + } + pWin->regAccum = ++pParse->nMem; + pWin->regResult = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum); + } + + /* If there is no ORDER BY or PARTITION BY clause, and the window + ** function accepts zero arguments, and there are no other columns + ** selected (e.g. "SELECT row_number() OVER () FROM t1"), it is possible + ** that pSublist is still NULL here. Add a constant expression here to + ** keep everything legal in this case. + */ + if( pSublist==0 ){ + pSublist = sqlite3ExprListAppend(pParse, 0, + sqlite3Expr(db, TK_INTEGER, "0") + ); + } + + pSub = sqlite3SelectNew( + pParse, pSublist, pSrc, pWhere, pGroupBy, pHaving, pSort, 0, 0 + ); + TREETRACE(0x40,pParse,pSub, + ("New window-function subquery in FROM clause of (%u/%p)\n", + p->selId, p)); + p->pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0); + assert( pSub!=0 || p->pSrc==0 ); /* Due to db->mallocFailed test inside + ** of sqlite3DbMallocRawNN() called from + ** sqlite3SrcListAppend() */ + if( p->pSrc==0 ){ + sqlite3SelectDelete(db, pSub); + }else if( sqlite3SrcItemAttachSubquery(pParse, &p->pSrc->a[0], pSub, 0) ){ + Table *pTab2; + p->pSrc->a[0].fg.isCorrelated = 1; + sqlite3SrcListAssignCursors(pParse, p->pSrc); + pSub->selFlags |= SF_Expanded|SF_OrderByReqd; + pTab2 = sqlite3ResultSetOfSelect(pParse, pSub, SQLITE_AFF_NONE); + pSub->selFlags |= (selFlags & SF_Aggregate); + if( pTab2==0 ){ + /* Might actually be some other kind of error, but in that case + ** pParse->nErr will be set, so if SQLITE_NOMEM is set, we will get + ** the correct error message regardless. */ + rc = SQLITE_NOMEM; + }else{ + memcpy(pTab, pTab2, sizeof(Table)); + pTab->tabFlags |= TF_Ephemeral; + p->pSrc->a[0].pSTab = pTab; + pTab = pTab2; + memset(&w, 0, sizeof(w)); + w.xExprCallback = sqlite3WindowExtraAggFuncDepth; + w.xSelectCallback = sqlite3WalkerDepthIncrease; + w.xSelectCallback2 = sqlite3WalkerDepthDecrease; + sqlite3WalkSelect(&w, pSub); + } + } + if( db->mallocFailed ) rc = SQLITE_NOMEM; + + /* Defer deleting the temporary table pTab because if an error occurred, + ** there could still be references to that table embedded in the + ** result-set or ORDER BY clause of the SELECT statement p. */ + sqlite3ParserAddCleanup(pParse, sqlite3DbFree, pTab); + } + + assert( rc==SQLITE_OK || pParse->nErr!=0 ); + return rc; +} + +/* +** Unlink the Window object from the Select to which it is attached, +** if it is attached. +*/ +SQLITE_PRIVATE void sqlite3WindowUnlinkFromSelect(Window *p){ + if( p->ppThis ){ + *p->ppThis = p->pNextWin; + if( p->pNextWin ) p->pNextWin->ppThis = p->ppThis; + p->ppThis = 0; + } +} + +/* +** Free the Window object passed as the second argument. +*/ +SQLITE_PRIVATE void sqlite3WindowDelete(sqlite3 *db, Window *p){ + if( p ){ + sqlite3WindowUnlinkFromSelect(p); + sqlite3ExprDelete(db, p->pFilter); + sqlite3ExprListDelete(db, p->pPartition); + sqlite3ExprListDelete(db, p->pOrderBy); + sqlite3ExprDelete(db, p->pEnd); + sqlite3ExprDelete(db, p->pStart); + sqlite3DbFree(db, p->zName); + sqlite3DbFree(db, p->zBase); + sqlite3DbFree(db, p); + } +} + +/* +** Free the linked list of Window objects starting at the second argument. +*/ +SQLITE_PRIVATE void sqlite3WindowListDelete(sqlite3 *db, Window *p){ + while( p ){ + Window *pNext = p->pNextWin; + sqlite3WindowDelete(db, p); + p = pNext; + } +} + +/* +** The argument expression is an PRECEDING or FOLLOWING offset. The +** value should be a non-negative integer. If the value is not a +** constant, change it to NULL. The fact that it is then a non-negative +** integer will be caught later. But it is important not to leave +** variable values in the expression tree. +*/ +static Expr *sqlite3WindowOffsetExpr(Parse *pParse, Expr *pExpr){ + if( 0==sqlite3ExprIsConstant(0,pExpr) ){ + if( IN_RENAME_OBJECT ) sqlite3RenameExprUnmap(pParse, pExpr); + sqlite3ExprDelete(pParse->db, pExpr); + pExpr = sqlite3ExprAlloc(pParse->db, TK_NULL, 0, 0); + } + return pExpr; +} + +/* +** Allocate and return a new Window object describing a Window Definition. +*/ +SQLITE_PRIVATE Window *sqlite3WindowAlloc( + Parse *pParse, /* Parsing context */ + int eType, /* Frame type. TK_RANGE, TK_ROWS, TK_GROUPS, or 0 */ + int eStart, /* Start type: CURRENT, PRECEDING, FOLLOWING, UNBOUNDED */ + Expr *pStart, /* Start window size if TK_PRECEDING or FOLLOWING */ + int eEnd, /* End type: CURRENT, FOLLOWING, TK_UNBOUNDED, PRECEDING */ + Expr *pEnd, /* End window size if TK_FOLLOWING or PRECEDING */ + u8 eExclude /* EXCLUDE clause */ +){ + Window *pWin = 0; + int bImplicitFrame = 0; + + /* Parser assures the following: */ + assert( eType==0 || eType==TK_RANGE || eType==TK_ROWS || eType==TK_GROUPS ); + assert( eStart==TK_CURRENT || eStart==TK_PRECEDING + || eStart==TK_UNBOUNDED || eStart==TK_FOLLOWING ); + assert( eEnd==TK_CURRENT || eEnd==TK_FOLLOWING + || eEnd==TK_UNBOUNDED || eEnd==TK_PRECEDING ); + assert( (eStart==TK_PRECEDING || eStart==TK_FOLLOWING)==(pStart!=0) ); + assert( (eEnd==TK_FOLLOWING || eEnd==TK_PRECEDING)==(pEnd!=0) ); + + if( eType==0 ){ + bImplicitFrame = 1; + eType = TK_RANGE; + } + + /* Additionally, the + ** starting boundary type may not occur earlier in the following list than + ** the ending boundary type: + ** + ** UNBOUNDED PRECEDING + ** PRECEDING + ** CURRENT ROW + ** FOLLOWING + ** UNBOUNDED FOLLOWING + ** + ** The parser ensures that "UNBOUNDED PRECEDING" cannot be used as an ending + ** boundary, and than "UNBOUNDED FOLLOWING" cannot be used as a starting + ** frame boundary. + */ + if( (eStart==TK_CURRENT && eEnd==TK_PRECEDING) + || (eStart==TK_FOLLOWING && (eEnd==TK_PRECEDING || eEnd==TK_CURRENT)) + ){ + sqlite3ErrorMsg(pParse, "unsupported frame specification"); + goto windowAllocErr; + } + + pWin = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); + if( pWin==0 ) goto windowAllocErr; + pWin->eFrmType = eType; + pWin->eStart = eStart; + pWin->eEnd = eEnd; + if( eExclude==0 && OptimizationDisabled(pParse->db, SQLITE_WindowFunc) ){ + eExclude = TK_NO; + } + pWin->eExclude = eExclude; + pWin->bImplicitFrame = bImplicitFrame; + pWin->pEnd = sqlite3WindowOffsetExpr(pParse, pEnd); + pWin->pStart = sqlite3WindowOffsetExpr(pParse, pStart); + return pWin; + +windowAllocErr: + sqlite3ExprDelete(pParse->db, pEnd); + sqlite3ExprDelete(pParse->db, pStart); + return 0; +} + +/* +** Attach PARTITION and ORDER BY clauses pPartition and pOrderBy to window +** pWin. Also, if parameter pBase is not NULL, set pWin->zBase to the +** equivalent nul-terminated string. +*/ +SQLITE_PRIVATE Window *sqlite3WindowAssemble( + Parse *pParse, + Window *pWin, + ExprList *pPartition, + ExprList *pOrderBy, + Token *pBase +){ + if( pWin ){ + pWin->pPartition = pPartition; + pWin->pOrderBy = pOrderBy; + if( pBase ){ + pWin->zBase = sqlite3DbStrNDup(pParse->db, pBase->z, pBase->n); + } + }else{ + sqlite3ExprListDelete(pParse->db, pPartition); + sqlite3ExprListDelete(pParse->db, pOrderBy); + } + return pWin; +} + +/* +** Window *pWin has just been created from a WINDOW clause. Token pBase +** is the base window. Earlier windows from the same WINDOW clause are +** stored in the linked list starting at pWin->pNextWin. This function +** either updates *pWin according to the base specification, or else +** leaves an error in pParse. +*/ +SQLITE_PRIVATE void sqlite3WindowChain(Parse *pParse, Window *pWin, Window *pList){ + if( pWin->zBase ){ + sqlite3 *db = pParse->db; + Window *pExist = windowFind(pParse, pList, pWin->zBase); + if( pExist ){ + const char *zErr = 0; + /* Check for errors */ + if( pWin->pPartition ){ + zErr = "PARTITION clause"; + }else if( pExist->pOrderBy && pWin->pOrderBy ){ + zErr = "ORDER BY clause"; + }else if( pExist->bImplicitFrame==0 ){ + zErr = "frame specification"; + } + if( zErr ){ + sqlite3ErrorMsg(pParse, + "cannot override %s of window: %s", zErr, pWin->zBase + ); + }else{ + pWin->pPartition = sqlite3ExprListDup(db, pExist->pPartition, 0); + if( pExist->pOrderBy ){ + assert( pWin->pOrderBy==0 ); + pWin->pOrderBy = sqlite3ExprListDup(db, pExist->pOrderBy, 0); + } + sqlite3DbFree(db, pWin->zBase); + pWin->zBase = 0; + } + } + } +} + +/* +** Attach window object pWin to expression p. +*/ +SQLITE_PRIVATE void sqlite3WindowAttach(Parse *pParse, Expr *p, Window *pWin){ + if( p ){ + assert( p->op==TK_FUNCTION ); + assert( pWin ); + assert( ExprIsFullSize(p) ); + p->y.pWin = pWin; + ExprSetProperty(p, EP_WinFunc|EP_FullSize); + pWin->pOwner = p; + if( (p->flags & EP_Distinct) && pWin->eFrmType!=TK_FILTER ){ + sqlite3ErrorMsg(pParse, + "DISTINCT is not supported for window functions" + ); + } + }else{ + sqlite3WindowDelete(pParse->db, pWin); + } +} + +/* +** Possibly link window pWin into the list at pSel->pWin (window functions +** to be processed as part of SELECT statement pSel). The window is linked +** in if either (a) there are no other windows already linked to this +** SELECT, or (b) the windows already linked use a compatible window frame. +*/ +SQLITE_PRIVATE void sqlite3WindowLink(Select *pSel, Window *pWin){ + if( pSel ){ + if( 0==pSel->pWin || 0==sqlite3WindowCompare(0, pSel->pWin, pWin, 0) ){ + pWin->pNextWin = pSel->pWin; + if( pSel->pWin ){ + pSel->pWin->ppThis = &pWin->pNextWin; + } + pSel->pWin = pWin; + pWin->ppThis = &pSel->pWin; + }else{ + if( sqlite3ExprListCompare(pWin->pPartition, pSel->pWin->pPartition,-1) ){ + pSel->selFlags |= SF_MultiPart; + } + } + } +} + +/* +** Return 0 if the two window objects are identical, 1 if they are +** different, or 2 if it cannot be determined if the objects are identical +** or not. Identical window objects can be processed in a single scan. +*/ +SQLITE_PRIVATE int sqlite3WindowCompare( + const Parse *pParse, + const Window *p1, + const Window *p2, + int bFilter +){ + int res; + if( NEVER(p1==0) || NEVER(p2==0) ) return 1; + if( p1->eFrmType!=p2->eFrmType ) return 1; + if( p1->eStart!=p2->eStart ) return 1; + if( p1->eEnd!=p2->eEnd ) return 1; + if( p1->eExclude!=p2->eExclude ) return 1; + if( sqlite3ExprCompare(pParse, p1->pStart, p2->pStart, -1) ) return 1; + if( sqlite3ExprCompare(pParse, p1->pEnd, p2->pEnd, -1) ) return 1; + if( (res = sqlite3ExprListCompare(p1->pPartition, p2->pPartition, -1)) ){ + return res; + } + if( (res = sqlite3ExprListCompare(p1->pOrderBy, p2->pOrderBy, -1)) ){ + return res; + } + if( bFilter ){ + if( (res = sqlite3ExprCompare(pParse, p1->pFilter, p2->pFilter, -1)) ){ + return res; + } + } + return 0; +} + + +/* +** This is called by code in select.c before it calls sqlite3WhereBegin() +** to begin iterating through the sub-query results. It is used to allocate +** and initialize registers and cursors used by sqlite3WindowCodeStep(). +*/ +SQLITE_PRIVATE void sqlite3WindowCodeInit(Parse *pParse, Select *pSelect){ + Window *pWin; + int nEphExpr; + Window *pMWin; + Vdbe *v; + + assert( pSelect->pSrc->a[0].fg.isSubquery ); + nEphExpr = pSelect->pSrc->a[0].u4.pSubq->pSelect->pEList->nExpr; + pMWin = pSelect->pWin; + v = sqlite3GetVdbe(pParse); + + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pMWin->iEphCsr, nEphExpr); + sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+1, pMWin->iEphCsr); + sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+2, pMWin->iEphCsr); + sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->iEphCsr+3, pMWin->iEphCsr); + + /* Allocate registers to use for PARTITION BY values, if any. Initialize + ** said registers to NULL. */ + if( pMWin->pPartition ){ + int nExpr = pMWin->pPartition->nExpr; + pMWin->regPart = pParse->nMem+1; + pParse->nMem += nExpr; + sqlite3VdbeAddOp3(v, OP_Null, 0, pMWin->regPart, pMWin->regPart+nExpr-1); + } + + pMWin->regOne = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Integer, 1, pMWin->regOne); + + if( pMWin->eExclude ){ + pMWin->regStartRowid = ++pParse->nMem; + pMWin->regEndRowid = ++pParse->nMem; + pMWin->csrApp = pParse->nTab++; + sqlite3VdbeAddOp2(v, OP_Integer, 1, pMWin->regStartRowid); + sqlite3VdbeAddOp2(v, OP_Integer, 0, pMWin->regEndRowid); + sqlite3VdbeAddOp2(v, OP_OpenDup, pMWin->csrApp, pMWin->iEphCsr); + return; + } + + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + FuncDef *p = pWin->pWFunc; + if( (p->funcFlags & SQLITE_FUNC_MINMAX) && pWin->eStart!=TK_UNBOUNDED ){ + /* The inline versions of min() and max() require a single ephemeral + ** table and 3 registers. The registers are used as follows: + ** + ** regApp+0: slot to copy min()/max() argument to for MakeRecord + ** regApp+1: integer value used to ensure keys are unique + ** regApp+2: output of MakeRecord + */ + ExprList *pList; + KeyInfo *pKeyInfo; + assert( ExprUseXList(pWin->pOwner) ); + pList = pWin->pOwner->x.pList; + pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pList, 0, 0); + pWin->csrApp = pParse->nTab++; + pWin->regApp = pParse->nMem+1; + pParse->nMem += 3; + if( pKeyInfo && pWin->pWFunc->zName[1]=='i' ){ + assert( pKeyInfo->aSortFlags[0]==0 ); + pKeyInfo->aSortFlags[0] = KEYINFO_ORDER_DESC; + } + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pWin->csrApp, 2); + sqlite3VdbeAppendP4(v, pKeyInfo, P4_KEYINFO); + sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1); + } + else if( p->zName==nth_valueName || p->zName==first_valueName ){ + /* Allocate two registers at pWin->regApp. These will be used to + ** store the start and end index of the current frame. */ + pWin->regApp = pParse->nMem+1; + pWin->csrApp = pParse->nTab++; + pParse->nMem += 2; + sqlite3VdbeAddOp2(v, OP_OpenDup, pWin->csrApp, pMWin->iEphCsr); + } + else if( p->zName==leadName || p->zName==lagName ){ + pWin->csrApp = pParse->nTab++; + sqlite3VdbeAddOp2(v, OP_OpenDup, pWin->csrApp, pMWin->iEphCsr); + } + } +} + +#define WINDOW_STARTING_INT 0 +#define WINDOW_ENDING_INT 1 +#define WINDOW_NTH_VALUE_INT 2 +#define WINDOW_STARTING_NUM 3 +#define WINDOW_ENDING_NUM 4 + +/* +** A "PRECEDING " (eCond==0) or "FOLLOWING " (eCond==1) or the +** value of the second argument to nth_value() (eCond==2) has just been +** evaluated and the result left in register reg. This function generates VM +** code to check that the value is a non-negative integer and throws an +** exception if it is not. +*/ +static void windowCheckValue(Parse *pParse, int reg, int eCond){ + static const char *azErr[] = { + "frame starting offset must be a non-negative integer", + "frame ending offset must be a non-negative integer", + "second argument to nth_value must be a positive integer", + "frame starting offset must be a non-negative number", + "frame ending offset must be a non-negative number", + }; + static int aOp[] = { OP_Ge, OP_Ge, OP_Gt, OP_Ge, OP_Ge }; + Vdbe *v = sqlite3GetVdbe(pParse); + int regZero = sqlite3GetTempReg(pParse); + assert( eCond>=0 && eCond=WINDOW_STARTING_NUM ){ + int regString = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp4(v, OP_String8, 0, regString, 0, "", P4_STATIC); + sqlite3VdbeAddOp3(v, OP_Ge, regString, sqlite3VdbeCurrentAddr(v)+2, reg); + sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC|SQLITE_JUMPIFNULL); + VdbeCoverage(v); + assert( eCond==3 || eCond==4 ); + VdbeCoverageIf(v, eCond==3); + VdbeCoverageIf(v, eCond==4); + }else{ + sqlite3VdbeAddOp2(v, OP_MustBeInt, reg, sqlite3VdbeCurrentAddr(v)+2); + VdbeCoverage(v); + assert( eCond==0 || eCond==1 || eCond==2 ); + VdbeCoverageIf(v, eCond==0); + VdbeCoverageIf(v, eCond==1); + VdbeCoverageIf(v, eCond==2); + } + sqlite3VdbeAddOp3(v, aOp[eCond], regZero, sqlite3VdbeCurrentAddr(v)+2, reg); + sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC); + VdbeCoverageNeverNullIf(v, eCond==0); /* NULL case captured by */ + VdbeCoverageNeverNullIf(v, eCond==1); /* the OP_MustBeInt */ + VdbeCoverageNeverNullIf(v, eCond==2); + VdbeCoverageNeverNullIf(v, eCond==3); /* NULL case caught by */ + VdbeCoverageNeverNullIf(v, eCond==4); /* the OP_Ge */ + sqlite3MayAbort(pParse); + sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_ERROR, OE_Abort); + sqlite3VdbeAppendP4(v, (void*)azErr[eCond], P4_STATIC); + sqlite3ReleaseTempReg(pParse, regZero); +} + +/* +** Return the number of arguments passed to the window-function associated +** with the object passed as the only argument to this function. +*/ +static int windowArgCount(Window *pWin){ + const ExprList *pList; + assert( ExprUseXList(pWin->pOwner) ); + pList = pWin->pOwner->x.pList; + return (pList ? pList->nExpr : 0); +} + +typedef struct WindowCodeArg WindowCodeArg; +typedef struct WindowCsrAndReg WindowCsrAndReg; + +/* +** See comments above struct WindowCodeArg. +*/ +struct WindowCsrAndReg { + int csr; /* Cursor number */ + int reg; /* First in array of peer values */ +}; + +/* +** A single instance of this structure is allocated on the stack by +** sqlite3WindowCodeStep() and a pointer to it passed to the various helper +** routines. This is to reduce the number of arguments required by each +** helper function. +** +** regArg: +** Each window function requires an accumulator register (just as an +** ordinary aggregate function does). This variable is set to the first +** in an array of accumulator registers - one for each window function +** in the WindowCodeArg.pMWin list. +** +** eDelete: +** The window functions implementation sometimes caches the input rows +** that it processes in a temporary table. If it is not zero, this +** variable indicates when rows may be removed from the temp table (in +** order to reduce memory requirements - it would always be safe just +** to leave them there). Possible values for eDelete are: +** +** WINDOW_RETURN_ROW: +** An input row can be discarded after it is returned to the caller. +** +** WINDOW_AGGINVERSE: +** An input row can be discarded after the window functions xInverse() +** callbacks have been invoked in it. +** +** WINDOW_AGGSTEP: +** An input row can be discarded after the window functions xStep() +** callbacks have been invoked in it. +** +** start,current,end +** Consider a window-frame similar to the following: +** +** (ORDER BY a, b GROUPS BETWEEN 2 PRECEDING AND 2 FOLLOWING) +** +** The windows functions implementation caches the input rows in a temp +** table, sorted by "a, b" (it actually populates the cache lazily, and +** aggressively removes rows once they are no longer required, but that's +** a mere detail). It keeps three cursors open on the temp table. One +** (current) that points to the next row to return to the query engine +** once its window function values have been calculated. Another (end) +** points to the next row to call the xStep() method of each window function +** on (so that it is 2 groups ahead of current). And a third (start) that +** points to the next row to call the xInverse() method of each window +** function on. +** +** Each cursor (start, current and end) consists of a VDBE cursor +** (WindowCsrAndReg.csr) and an array of registers (starting at +** WindowCodeArg.reg) that always contains a copy of the peer values +** read from the corresponding cursor. +** +** Depending on the window-frame in question, all three cursors may not +** be required. In this case both WindowCodeArg.csr and reg are set to +** 0. +*/ +struct WindowCodeArg { + Parse *pParse; /* Parse context */ + Window *pMWin; /* First in list of functions being processed */ + Vdbe *pVdbe; /* VDBE object */ + int addrGosub; /* OP_Gosub to this address to return one row */ + int regGosub; /* Register used with OP_Gosub(addrGosub) */ + int regArg; /* First in array of accumulator registers */ + int eDelete; /* See above */ + int regRowid; + + WindowCsrAndReg start; + WindowCsrAndReg current; + WindowCsrAndReg end; +}; + +/* +** Generate VM code to read the window frames peer values from cursor csr into +** an array of registers starting at reg. +*/ +static void windowReadPeerValues( + WindowCodeArg *p, + int csr, + int reg +){ + Window *pMWin = p->pMWin; + ExprList *pOrderBy = pMWin->pOrderBy; + if( pOrderBy ){ + Vdbe *v = sqlite3GetVdbe(p->pParse); + ExprList *pPart = pMWin->pPartition; + int iColOff = pMWin->nBufferCol + (pPart ? pPart->nExpr : 0); + int i; + for(i=0; inExpr; i++){ + sqlite3VdbeAddOp3(v, OP_Column, csr, iColOff+i, reg+i); + } + } +} + +/* +** Generate VM code to invoke either xStep() (if bInverse is 0) or +** xInverse (if bInverse is non-zero) for each window function in the +** linked list starting at pMWin. Or, for built-in window functions +** that do not use the standard function API, generate the required +** inline VM code. +** +** If argument csr is greater than or equal to 0, then argument reg is +** the first register in an array of registers guaranteed to be large +** enough to hold the array of arguments for each function. In this case +** the arguments are extracted from the current row of csr into the +** array of registers before invoking OP_AggStep or OP_AggInverse +** +** Or, if csr is less than zero, then the array of registers at reg is +** already populated with all columns from the current row of the sub-query. +** +** If argument regPartSize is non-zero, then it is a register containing the +** number of rows in the current partition. +*/ +static void windowAggStep( + WindowCodeArg *p, + Window *pMWin, /* Linked list of window functions */ + int csr, /* Read arguments from this cursor */ + int bInverse, /* True to invoke xInverse instead of xStep */ + int reg /* Array of registers */ +){ + Parse *pParse = p->pParse; + Vdbe *v = sqlite3GetVdbe(pParse); + Window *pWin; + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + FuncDef *pFunc = pWin->pWFunc; + int regArg; + int nArg = pWin->bExprArgs ? 0 : windowArgCount(pWin); + int i; + int addrIf = 0; + + assert( bInverse==0 || pWin->eStart!=TK_UNBOUNDED ); + + /* All OVER clauses in the same window function aggregate step must + ** be the same. */ + assert( pWin==pMWin || sqlite3WindowCompare(pParse,pWin,pMWin,0)!=1 ); + + for(i=0; izName!=nth_valueName ){ + sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol+i, reg+i); + }else{ + sqlite3VdbeAddOp3(v, OP_Column, pMWin->iEphCsr, pWin->iArgCol+i, reg+i); + } + } + regArg = reg; + + if( pWin->pFilter ){ + int regTmp; + assert( ExprUseXList(pWin->pOwner) ); + assert( pWin->bExprArgs || !nArg ||nArg==pWin->pOwner->x.pList->nExpr ); + assert( pWin->bExprArgs || nArg ||pWin->pOwner->x.pList==0 ); + regTmp = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol+nArg,regTmp); + addrIf = sqlite3VdbeAddOp3(v, OP_IfNot, regTmp, 0, 1); + VdbeCoverage(v); + sqlite3ReleaseTempReg(pParse, regTmp); + } + + if( pMWin->regStartRowid==0 + && (pFunc->funcFlags & SQLITE_FUNC_MINMAX) + && (pWin->eStart!=TK_UNBOUNDED) + ){ + int addrIsNull = sqlite3VdbeAddOp1(v, OP_IsNull, regArg); + VdbeCoverage(v); + if( bInverse==0 ){ + sqlite3VdbeAddOp2(v, OP_AddImm, pWin->regApp+1, 1); + sqlite3VdbeAddOp2(v, OP_SCopy, regArg, pWin->regApp); + sqlite3VdbeAddOp3(v, OP_MakeRecord, pWin->regApp, 2, pWin->regApp+2); + sqlite3VdbeAddOp2(v, OP_IdxInsert, pWin->csrApp, pWin->regApp+2); + }else{ + sqlite3VdbeAddOp4Int(v, OP_SeekGE, pWin->csrApp, 0, regArg, 1); + VdbeCoverageNeverTaken(v); + sqlite3VdbeAddOp1(v, OP_Delete, pWin->csrApp); + sqlite3VdbeJumpHere(v, sqlite3VdbeCurrentAddr(v)-2); + } + sqlite3VdbeJumpHere(v, addrIsNull); + }else if( pWin->regApp ){ + assert( pWin->pFilter==0 ); + assert( pFunc->zName==nth_valueName + || pFunc->zName==first_valueName + ); + assert( bInverse==0 || bInverse==1 ); + sqlite3VdbeAddOp2(v, OP_AddImm, pWin->regApp+1-bInverse, 1); + }else if( pFunc->xSFunc!=noopStepFunc ){ + if( pWin->bExprArgs ){ + int iOp = sqlite3VdbeCurrentAddr(v); + int iEnd; + + assert( ExprUseXList(pWin->pOwner) ); + nArg = pWin->pOwner->x.pList->nExpr; + regArg = sqlite3GetTempRange(pParse, nArg); + sqlite3ExprCodeExprList(pParse, pWin->pOwner->x.pList, regArg, 0, 0); + + for(iEnd=sqlite3VdbeCurrentAddr(v); iOpopcode==OP_Column && pOp->p1==pMWin->iEphCsr ){ + pOp->p1 = csr; + } + } + } + if( pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){ + CollSeq *pColl; + assert( nArg>0 ); + assert( ExprUseXList(pWin->pOwner) ); + pColl = sqlite3ExprNNCollSeq(pParse, pWin->pOwner->x.pList->a[0].pExpr); + sqlite3VdbeAddOp4(v, OP_CollSeq, 0,0,0, (const char*)pColl, P4_COLLSEQ); + } + sqlite3VdbeAddOp3(v, bInverse? OP_AggInverse : OP_AggStep, + bInverse, regArg, pWin->regAccum); + sqlite3VdbeAppendP4(v, pFunc, P4_FUNCDEF); + sqlite3VdbeChangeP5(v, (u16)nArg); + if( pWin->bExprArgs ){ + sqlite3ReleaseTempRange(pParse, regArg, nArg); + } + } + + if( addrIf ) sqlite3VdbeJumpHere(v, addrIf); + } +} + +/* +** Values that may be passed as the second argument to windowCodeOp(). +*/ +#define WINDOW_RETURN_ROW 1 +#define WINDOW_AGGINVERSE 2 +#define WINDOW_AGGSTEP 3 + +/* +** Generate VM code to invoke either xValue() (bFin==0) or xFinalize() +** (bFin==1) for each window function in the linked list starting at +** pMWin. Or, for built-in window-functions that do not use the standard +** API, generate the equivalent VM code. +*/ +static void windowAggFinal(WindowCodeArg *p, int bFin){ + Parse *pParse = p->pParse; + Window *pMWin = p->pMWin; + Vdbe *v = sqlite3GetVdbe(pParse); + Window *pWin; + + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + if( pMWin->regStartRowid==0 + && (pWin->pWFunc->funcFlags & SQLITE_FUNC_MINMAX) + && (pWin->eStart!=TK_UNBOUNDED) + ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult); + sqlite3VdbeAddOp1(v, OP_Last, pWin->csrApp); + VdbeCoverage(v); + sqlite3VdbeAddOp3(v, OP_Column, pWin->csrApp, 0, pWin->regResult); + sqlite3VdbeJumpHere(v, sqlite3VdbeCurrentAddr(v)-2); + }else if( pWin->regApp ){ + assert( pMWin->regStartRowid==0 ); + }else{ + int nArg = windowArgCount(pWin); + if( bFin ){ + sqlite3VdbeAddOp2(v, OP_AggFinal, pWin->regAccum, nArg); + sqlite3VdbeAppendP4(v, pWin->pWFunc, P4_FUNCDEF); + sqlite3VdbeAddOp2(v, OP_Copy, pWin->regAccum, pWin->regResult); + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum); + }else{ + sqlite3VdbeAddOp3(v, OP_AggValue,pWin->regAccum,nArg,pWin->regResult); + sqlite3VdbeAppendP4(v, pWin->pWFunc, P4_FUNCDEF); + } + } + } +} + +/* +** Generate code to calculate the current values of all window functions in the +** p->pMWin list by doing a full scan of the current window frame. Store the +** results in the Window.regResult registers, ready to return the upper +** layer. +*/ +static void windowFullScan(WindowCodeArg *p){ + Window *pWin; + Parse *pParse = p->pParse; + Window *pMWin = p->pMWin; + Vdbe *v = p->pVdbe; + + int regCRowid = 0; /* Current rowid value */ + int regCPeer = 0; /* Current peer values */ + int regRowid = 0; /* AggStep rowid value */ + int regPeer = 0; /* AggStep peer values */ + + int nPeer; + int lblNext; + int lblBrk; + int addrNext; + int csr; + + VdbeModuleComment((v, "windowFullScan begin")); + + assert( pMWin!=0 ); + csr = pMWin->csrApp; + nPeer = (pMWin->pOrderBy ? pMWin->pOrderBy->nExpr : 0); + + lblNext = sqlite3VdbeMakeLabel(pParse); + lblBrk = sqlite3VdbeMakeLabel(pParse); + + regCRowid = sqlite3GetTempReg(pParse); + regRowid = sqlite3GetTempReg(pParse); + if( nPeer ){ + regCPeer = sqlite3GetTempRange(pParse, nPeer); + regPeer = sqlite3GetTempRange(pParse, nPeer); + } + + sqlite3VdbeAddOp2(v, OP_Rowid, pMWin->iEphCsr, regCRowid); + windowReadPeerValues(p, pMWin->iEphCsr, regCPeer); + + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum); + } + + sqlite3VdbeAddOp3(v, OP_SeekGE, csr, lblBrk, pMWin->regStartRowid); + VdbeCoverage(v); + addrNext = sqlite3VdbeCurrentAddr(v); + sqlite3VdbeAddOp2(v, OP_Rowid, csr, regRowid); + sqlite3VdbeAddOp3(v, OP_Gt, pMWin->regEndRowid, lblBrk, regRowid); + VdbeCoverageNeverNull(v); + + if( pMWin->eExclude==TK_CURRENT ){ + sqlite3VdbeAddOp3(v, OP_Eq, regCRowid, lblNext, regRowid); + VdbeCoverageNeverNull(v); + }else if( pMWin->eExclude!=TK_NO ){ + int addr; + int addrEq = 0; + KeyInfo *pKeyInfo = 0; + + if( pMWin->pOrderBy ){ + pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pMWin->pOrderBy, 0, 0); + } + if( pMWin->eExclude==TK_TIES ){ + addrEq = sqlite3VdbeAddOp3(v, OP_Eq, regCRowid, 0, regRowid); + VdbeCoverageNeverNull(v); + } + if( pKeyInfo ){ + windowReadPeerValues(p, csr, regPeer); + sqlite3VdbeAddOp3(v, OP_Compare, regPeer, regCPeer, nPeer); + sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO); + addr = sqlite3VdbeCurrentAddr(v)+1; + sqlite3VdbeAddOp3(v, OP_Jump, addr, lblNext, addr); + VdbeCoverageEqNe(v); + }else{ + sqlite3VdbeAddOp2(v, OP_Goto, 0, lblNext); + } + if( addrEq ) sqlite3VdbeJumpHere(v, addrEq); + } + + windowAggStep(p, pMWin, csr, 0, p->regArg); + + sqlite3VdbeResolveLabel(v, lblNext); + sqlite3VdbeAddOp2(v, OP_Next, csr, addrNext); + VdbeCoverage(v); + sqlite3VdbeJumpHere(v, addrNext-1); + sqlite3VdbeJumpHere(v, addrNext+1); + sqlite3ReleaseTempReg(pParse, regRowid); + sqlite3ReleaseTempReg(pParse, regCRowid); + if( nPeer ){ + sqlite3ReleaseTempRange(pParse, regPeer, nPeer); + sqlite3ReleaseTempRange(pParse, regCPeer, nPeer); + } + + windowAggFinal(p, 1); + VdbeModuleComment((v, "windowFullScan end")); +} + +/* +** Invoke the sub-routine at regGosub (generated by code in select.c) to +** return the current row of Window.iEphCsr. If all window functions are +** aggregate window functions that use the standard API, a single +** OP_Gosub instruction is all that this routine generates. Extra VM code +** for per-row processing is only generated for the following built-in window +** functions: +** +** nth_value() +** first_value() +** lag() +** lead() +*/ +static void windowReturnOneRow(WindowCodeArg *p){ + Window *pMWin = p->pMWin; + Vdbe *v = p->pVdbe; + + if( pMWin->regStartRowid ){ + windowFullScan(p); + }else{ + Parse *pParse = p->pParse; + Window *pWin; + + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + FuncDef *pFunc = pWin->pWFunc; + assert( ExprUseXList(pWin->pOwner) ); + if( pFunc->zName==nth_valueName + || pFunc->zName==first_valueName + ){ + int csr = pWin->csrApp; + int lbl = sqlite3VdbeMakeLabel(pParse); + int tmpReg = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult); + + if( pFunc->zName==nth_valueName ){ + sqlite3VdbeAddOp3(v, OP_Column,pMWin->iEphCsr,pWin->iArgCol+1,tmpReg); + windowCheckValue(pParse, tmpReg, 2); + }else{ + sqlite3VdbeAddOp2(v, OP_Integer, 1, tmpReg); + } + sqlite3VdbeAddOp3(v, OP_Add, tmpReg, pWin->regApp, tmpReg); + sqlite3VdbeAddOp3(v, OP_Gt, pWin->regApp+1, lbl, tmpReg); + VdbeCoverageNeverNull(v); + sqlite3VdbeAddOp3(v, OP_SeekRowid, csr, 0, tmpReg); + VdbeCoverageNeverTaken(v); + sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol, pWin->regResult); + sqlite3VdbeResolveLabel(v, lbl); + sqlite3ReleaseTempReg(pParse, tmpReg); + } + else if( pFunc->zName==leadName || pFunc->zName==lagName ){ + int nArg = pWin->pOwner->x.pList->nExpr; + int csr = pWin->csrApp; + int lbl = sqlite3VdbeMakeLabel(pParse); + int tmpReg = sqlite3GetTempReg(pParse); + int iEph = pMWin->iEphCsr; + + if( nArg<3 ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regResult); + }else{ + sqlite3VdbeAddOp3(v, OP_Column, iEph,pWin->iArgCol+2,pWin->regResult); + } + sqlite3VdbeAddOp2(v, OP_Rowid, iEph, tmpReg); + if( nArg<2 ){ + int val = (pFunc->zName==leadName ? 1 : -1); + sqlite3VdbeAddOp2(v, OP_AddImm, tmpReg, val); + }else{ + int op = (pFunc->zName==leadName ? OP_Add : OP_Subtract); + int tmpReg2 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp3(v, OP_Column, iEph, pWin->iArgCol+1, tmpReg2); + sqlite3VdbeAddOp3(v, op, tmpReg2, tmpReg, tmpReg); + sqlite3ReleaseTempReg(pParse, tmpReg2); + } + + sqlite3VdbeAddOp3(v, OP_SeekRowid, csr, lbl, tmpReg); + VdbeCoverage(v); + sqlite3VdbeAddOp3(v, OP_Column, csr, pWin->iArgCol, pWin->regResult); + sqlite3VdbeResolveLabel(v, lbl); + sqlite3ReleaseTempReg(pParse, tmpReg); + } + } + } + sqlite3VdbeAddOp2(v, OP_Gosub, p->regGosub, p->addrGosub); +} + +/* +** Generate code to set the accumulator register for each window function +** in the linked list passed as the second argument to NULL. And perform +** any equivalent initialization required by any built-in window functions +** in the list. +*/ +static int windowInitAccum(Parse *pParse, Window *pMWin){ + Vdbe *v = sqlite3GetVdbe(pParse); + int regArg; + int nArg = 0; + Window *pWin; + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + FuncDef *pFunc = pWin->pWFunc; + assert( pWin->regAccum ); + sqlite3VdbeAddOp2(v, OP_Null, 0, pWin->regAccum); + nArg = MAX(nArg, windowArgCount(pWin)); + if( pMWin->regStartRowid==0 ){ + if( pFunc->zName==nth_valueName || pFunc->zName==first_valueName ){ + sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp); + sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1); + } + + if( (pFunc->funcFlags & SQLITE_FUNC_MINMAX) && pWin->csrApp ){ + assert( pWin->eStart!=TK_UNBOUNDED ); + sqlite3VdbeAddOp1(v, OP_ResetSorter, pWin->csrApp); + sqlite3VdbeAddOp2(v, OP_Integer, 0, pWin->regApp+1); + } + } + } + regArg = pParse->nMem+1; + pParse->nMem += nArg; + return regArg; +} + +/* +** Return true if the current frame should be cached in the ephemeral table, +** even if there are no xInverse() calls required. +*/ +static int windowCacheFrame(Window *pMWin){ + Window *pWin; + if( pMWin->regStartRowid ) return 1; + for(pWin=pMWin; pWin; pWin=pWin->pNextWin){ + FuncDef *pFunc = pWin->pWFunc; + if( (pFunc->zName==nth_valueName) + || (pFunc->zName==first_valueName) + || (pFunc->zName==leadName) + || (pFunc->zName==lagName) + ){ + return 1; + } + } + return 0; +} + +/* +** regOld and regNew are each the first register in an array of size +** pOrderBy->nExpr. This function generates code to compare the two +** arrays of registers using the collation sequences and other comparison +** parameters specified by pOrderBy. +** +** If the two arrays are not equal, the contents of regNew is copied to +** regOld and control falls through. Otherwise, if the contents of the arrays +** are equal, an OP_Goto is executed. The address of the OP_Goto is returned. +*/ +static void windowIfNewPeer( + Parse *pParse, + ExprList *pOrderBy, + int regNew, /* First in array of new values */ + int regOld, /* First in array of old values */ + int addr /* Jump here */ +){ + Vdbe *v = sqlite3GetVdbe(pParse); + if( pOrderBy ){ + int nVal = pOrderBy->nExpr; + KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pOrderBy, 0, 0); + sqlite3VdbeAddOp3(v, OP_Compare, regOld, regNew, nVal); + sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO); + sqlite3VdbeAddOp3(v, OP_Jump, + sqlite3VdbeCurrentAddr(v)+1, addr, sqlite3VdbeCurrentAddr(v)+1 + ); + VdbeCoverageEqNe(v); + sqlite3VdbeAddOp3(v, OP_Copy, regNew, regOld, nVal-1); + }else{ + sqlite3VdbeAddOp2(v, OP_Goto, 0, addr); + } +} + +/* +** This function is called as part of generating VM programs for RANGE +** offset PRECEDING/FOLLOWING frame boundaries. Assuming "ASC" order for +** the ORDER BY term in the window, and that argument op is OP_Ge, it generates +** code equivalent to: +** +** if( csr1.peerVal + regVal >= csr2.peerVal ) goto lbl; +** +** The value of parameter op may also be OP_Gt or OP_Le. In these cases the +** operator in the above pseudo-code is replaced with ">" or "<=", respectively. +** +** If the sort-order for the ORDER BY term in the window is DESC, then the +** comparison is reversed. Instead of adding regVal to csr1.peerVal, it is +** subtracted. And the comparison operator is inverted to - ">=" becomes "<=", +** ">" becomes "<", and so on. So, with DESC sort order, if the argument op +** is OP_Ge, the generated code is equivalent to: +** +** if( csr1.peerVal - regVal <= csr2.peerVal ) goto lbl; +** +** A special type of arithmetic is used such that if csr1.peerVal is not +** a numeric type (real or integer), then the result of the addition +** or subtraction is a a copy of csr1.peerVal. +*/ +static void windowCodeRangeTest( + WindowCodeArg *p, + int op, /* OP_Ge, OP_Gt, or OP_Le */ + int csr1, /* Cursor number for cursor 1 */ + int regVal, /* Register containing non-negative number */ + int csr2, /* Cursor number for cursor 2 */ + int lbl /* Jump destination if condition is true */ +){ + Parse *pParse = p->pParse; + Vdbe *v = sqlite3GetVdbe(pParse); + ExprList *pOrderBy = p->pMWin->pOrderBy; /* ORDER BY clause for window */ + int reg1 = sqlite3GetTempReg(pParse); /* Reg. for csr1.peerVal+regVal */ + int reg2 = sqlite3GetTempReg(pParse); /* Reg. for csr2.peerVal */ + int regString = ++pParse->nMem; /* Reg. for constant value '' */ + int arith = OP_Add; /* OP_Add or OP_Subtract */ + int addrGe; /* Jump destination */ + int addrDone = sqlite3VdbeMakeLabel(pParse); /* Address past OP_Ge */ + CollSeq *pColl; + + /* Read the peer-value from each cursor into a register */ + windowReadPeerValues(p, csr1, reg1); + windowReadPeerValues(p, csr2, reg2); + + assert( op==OP_Ge || op==OP_Gt || op==OP_Le ); + assert( pOrderBy && pOrderBy->nExpr==1 ); + if( pOrderBy->a[0].fg.sortFlags & KEYINFO_ORDER_DESC ){ + switch( op ){ + case OP_Ge: op = OP_Le; break; + case OP_Gt: op = OP_Lt; break; + default: assert( op==OP_Le ); op = OP_Ge; break; + } + arith = OP_Subtract; + } + + VdbeModuleComment((v, "CodeRangeTest: if( R%d %s R%d %s R%d ) goto lbl", + reg1, (arith==OP_Add ? "+" : "-"), regVal, + ((op==OP_Ge) ? ">=" : (op==OP_Le) ? "<=" : (op==OP_Gt) ? ">" : "<"), reg2 + )); + + /* If the BIGNULL flag is set for the ORDER BY, then it is required to + ** consider NULL values to be larger than all other values, instead of + ** the usual smaller. The VDBE opcodes OP_Ge and so on do not handle this + ** (and adding that capability causes a performance regression), so + ** instead if the BIGNULL flag is set then cases where either reg1 or + ** reg2 are NULL are handled separately in the following block. The code + ** generated is equivalent to: + ** + ** if( reg1 IS NULL ){ + ** if( op==OP_Ge ) goto lbl; + ** if( op==OP_Gt && reg2 IS NOT NULL ) goto lbl; + ** if( op==OP_Le && reg2 IS NULL ) goto lbl; + ** }else if( reg2 IS NULL ){ + ** if( op==OP_Le ) goto lbl; + ** } + ** + ** Additionally, if either reg1 or reg2 are NULL but the jump to lbl is + ** not taken, control jumps over the comparison operator coded below this + ** block. */ + if( pOrderBy->a[0].fg.sortFlags & KEYINFO_ORDER_BIGNULL ){ + /* This block runs if reg1 contains a NULL. */ + int addr = sqlite3VdbeAddOp1(v, OP_NotNull, reg1); VdbeCoverage(v); + switch( op ){ + case OP_Ge: + sqlite3VdbeAddOp2(v, OP_Goto, 0, lbl); + break; + case OP_Gt: + sqlite3VdbeAddOp2(v, OP_NotNull, reg2, lbl); + VdbeCoverage(v); + break; + case OP_Le: + sqlite3VdbeAddOp2(v, OP_IsNull, reg2, lbl); + VdbeCoverage(v); + break; + default: assert( op==OP_Lt ); /* no-op */ break; + } + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrDone); + + /* This block runs if reg1 is not NULL, but reg2 is. */ + sqlite3VdbeJumpHere(v, addr); + sqlite3VdbeAddOp2(v, OP_IsNull, reg2, + (op==OP_Gt || op==OP_Ge) ? addrDone : lbl); + VdbeCoverage(v); + } + + /* Register reg1 currently contains csr1.peerVal (the peer-value from csr1). + ** This block adds (or subtracts for DESC) the numeric value in regVal + ** from it. Or, if reg1 is not numeric (it is a NULL, a text value or a blob), + ** then leave reg1 as it is. In pseudo-code, this is implemented as: + ** + ** if( reg1>='' ) goto addrGe; + ** reg1 = reg1 +/- regVal + ** addrGe: + ** + ** Since all strings and blobs are greater-than-or-equal-to an empty string, + ** the add/subtract is skipped for these, as required. If reg1 is a NULL, + ** then the arithmetic is performed, but since adding or subtracting from + ** NULL is always NULL anyway, this case is handled as required too. */ + sqlite3VdbeAddOp4(v, OP_String8, 0, regString, 0, "", P4_STATIC); + addrGe = sqlite3VdbeAddOp3(v, OP_Ge, regString, 0, reg1); + VdbeCoverage(v); + if( (op==OP_Ge && arith==OP_Add) || (op==OP_Le && arith==OP_Subtract) ){ + sqlite3VdbeAddOp3(v, op, reg2, lbl, reg1); VdbeCoverage(v); + } + sqlite3VdbeAddOp3(v, arith, regVal, reg1, reg1); + sqlite3VdbeJumpHere(v, addrGe); + + /* Compare registers reg2 and reg1, taking the jump if required. Note that + ** control skips over this test if the BIGNULL flag is set and either + ** reg1 or reg2 contain a NULL value. */ + sqlite3VdbeAddOp3(v, op, reg2, lbl, reg1); VdbeCoverage(v); + pColl = sqlite3ExprNNCollSeq(pParse, pOrderBy->a[0].pExpr); + sqlite3VdbeAppendP4(v, (void*)pColl, P4_COLLSEQ); + sqlite3VdbeChangeP5(v, SQLITE_NULLEQ); + sqlite3VdbeResolveLabel(v, addrDone); + + assert( op==OP_Ge || op==OP_Gt || op==OP_Lt || op==OP_Le ); + testcase(op==OP_Ge); VdbeCoverageIf(v, op==OP_Ge); + testcase(op==OP_Lt); VdbeCoverageIf(v, op==OP_Lt); + testcase(op==OP_Le); VdbeCoverageIf(v, op==OP_Le); + testcase(op==OP_Gt); VdbeCoverageIf(v, op==OP_Gt); + sqlite3ReleaseTempReg(pParse, reg1); + sqlite3ReleaseTempReg(pParse, reg2); + + VdbeModuleComment((v, "CodeRangeTest: end")); +} + +/* +** Helper function for sqlite3WindowCodeStep(). Each call to this function +** generates VM code for a single RETURN_ROW, AGGSTEP or AGGINVERSE +** operation. Refer to the header comment for sqlite3WindowCodeStep() for +** details. +*/ +static int windowCodeOp( + WindowCodeArg *p, /* Context object */ + int op, /* WINDOW_RETURN_ROW, AGGSTEP or AGGINVERSE */ + int regCountdown, /* Register for OP_IfPos countdown */ + int jumpOnEof /* Jump here if stepped cursor reaches EOF */ +){ + int csr, reg; + Parse *pParse = p->pParse; + Window *pMWin = p->pMWin; + int ret = 0; + Vdbe *v = p->pVdbe; + int addrContinue = 0; + int bPeer = (pMWin->eFrmType!=TK_ROWS); + + int lblDone = sqlite3VdbeMakeLabel(pParse); + int addrNextRange = 0; + + /* Special case - WINDOW_AGGINVERSE is always a no-op if the frame + ** starts with UNBOUNDED PRECEDING. */ + if( op==WINDOW_AGGINVERSE && pMWin->eStart==TK_UNBOUNDED ){ + assert( regCountdown==0 && jumpOnEof==0 ); + return 0; + } + + if( regCountdown>0 ){ + if( pMWin->eFrmType==TK_RANGE ){ + addrNextRange = sqlite3VdbeCurrentAddr(v); + assert( op==WINDOW_AGGINVERSE || op==WINDOW_AGGSTEP ); + if( op==WINDOW_AGGINVERSE ){ + if( pMWin->eStart==TK_FOLLOWING ){ + windowCodeRangeTest( + p, OP_Le, p->current.csr, regCountdown, p->start.csr, lblDone + ); + }else{ + windowCodeRangeTest( + p, OP_Ge, p->start.csr, regCountdown, p->current.csr, lblDone + ); + } + }else{ + windowCodeRangeTest( + p, OP_Gt, p->end.csr, regCountdown, p->current.csr, lblDone + ); + } + }else{ + sqlite3VdbeAddOp3(v, OP_IfPos, regCountdown, lblDone, 1); + VdbeCoverage(v); + } + } + + if( op==WINDOW_RETURN_ROW && pMWin->regStartRowid==0 ){ + windowAggFinal(p, 0); + } + addrContinue = sqlite3VdbeCurrentAddr(v); + + /* If this is a (RANGE BETWEEN a FOLLOWING AND b FOLLOWING) or + ** (RANGE BETWEEN b PRECEDING AND a PRECEDING) frame, ensure the + ** start cursor does not advance past the end cursor within the + ** temporary table. It otherwise might, if (a>b). Also ensure that, + ** if the input cursor is still finding new rows, that the end + ** cursor does not go past it to EOF. */ + if( pMWin->eStart==pMWin->eEnd && regCountdown + && pMWin->eFrmType==TK_RANGE + ){ + int regRowid1 = sqlite3GetTempReg(pParse); + int regRowid2 = sqlite3GetTempReg(pParse); + if( op==WINDOW_AGGINVERSE ){ + sqlite3VdbeAddOp2(v, OP_Rowid, p->start.csr, regRowid1); + sqlite3VdbeAddOp2(v, OP_Rowid, p->end.csr, regRowid2); + sqlite3VdbeAddOp3(v, OP_Ge, regRowid2, lblDone, regRowid1); + VdbeCoverage(v); + }else if( p->regRowid ){ + sqlite3VdbeAddOp2(v, OP_Rowid, p->end.csr, regRowid1); + sqlite3VdbeAddOp3(v, OP_Ge, p->regRowid, lblDone, regRowid1); + VdbeCoverageNeverNull(v); + } + sqlite3ReleaseTempReg(pParse, regRowid1); + sqlite3ReleaseTempReg(pParse, regRowid2); + assert( pMWin->eStart==TK_PRECEDING || pMWin->eStart==TK_FOLLOWING ); + } + + switch( op ){ + case WINDOW_RETURN_ROW: + csr = p->current.csr; + reg = p->current.reg; + windowReturnOneRow(p); + break; + + case WINDOW_AGGINVERSE: + csr = p->start.csr; + reg = p->start.reg; + if( pMWin->regStartRowid ){ + assert( pMWin->regEndRowid ); + sqlite3VdbeAddOp2(v, OP_AddImm, pMWin->regStartRowid, 1); + }else{ + windowAggStep(p, pMWin, csr, 1, p->regArg); + } + break; + + default: + assert( op==WINDOW_AGGSTEP ); + csr = p->end.csr; + reg = p->end.reg; + if( pMWin->regStartRowid ){ + assert( pMWin->regEndRowid ); + sqlite3VdbeAddOp2(v, OP_AddImm, pMWin->regEndRowid, 1); + }else{ + windowAggStep(p, pMWin, csr, 0, p->regArg); + } + break; + } + + if( op==p->eDelete ){ + sqlite3VdbeAddOp1(v, OP_Delete, csr); + sqlite3VdbeChangeP5(v, OPFLAG_SAVEPOSITION); + } + + if( jumpOnEof ){ + sqlite3VdbeAddOp2(v, OP_Next, csr, sqlite3VdbeCurrentAddr(v)+2); + VdbeCoverage(v); + ret = sqlite3VdbeAddOp0(v, OP_Goto); + }else{ + sqlite3VdbeAddOp2(v, OP_Next, csr, sqlite3VdbeCurrentAddr(v)+1+bPeer); + VdbeCoverage(v); + if( bPeer ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, lblDone); + } + } + + if( bPeer ){ + int nReg = (pMWin->pOrderBy ? pMWin->pOrderBy->nExpr : 0); + int regTmp = (nReg ? sqlite3GetTempRange(pParse, nReg) : 0); + windowReadPeerValues(p, csr, regTmp); + windowIfNewPeer(pParse, pMWin->pOrderBy, regTmp, reg, addrContinue); + sqlite3ReleaseTempRange(pParse, regTmp, nReg); + } + + if( addrNextRange ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrNextRange); + } + sqlite3VdbeResolveLabel(v, lblDone); + return ret; +} + + +/* +** Allocate and return a duplicate of the Window object indicated by the +** third argument. Set the Window.pOwner field of the new object to +** pOwner. +*/ +SQLITE_PRIVATE Window *sqlite3WindowDup(sqlite3 *db, Expr *pOwner, Window *p){ + Window *pNew = 0; + if( ALWAYS(p) ){ + pNew = sqlite3DbMallocZero(db, sizeof(Window)); + if( pNew ){ + pNew->zName = sqlite3DbStrDup(db, p->zName); + pNew->zBase = sqlite3DbStrDup(db, p->zBase); + pNew->pFilter = sqlite3ExprDup(db, p->pFilter, 0); + pNew->pWFunc = p->pWFunc; + pNew->pPartition = sqlite3ExprListDup(db, p->pPartition, 0); + pNew->pOrderBy = sqlite3ExprListDup(db, p->pOrderBy, 0); + pNew->eFrmType = p->eFrmType; + pNew->eEnd = p->eEnd; + pNew->eStart = p->eStart; + pNew->eExclude = p->eExclude; + pNew->regResult = p->regResult; + pNew->regAccum = p->regAccum; + pNew->iArgCol = p->iArgCol; + pNew->iEphCsr = p->iEphCsr; + pNew->bExprArgs = p->bExprArgs; + pNew->pStart = sqlite3ExprDup(db, p->pStart, 0); + pNew->pEnd = sqlite3ExprDup(db, p->pEnd, 0); + pNew->pOwner = pOwner; + pNew->bImplicitFrame = p->bImplicitFrame; + } + } + return pNew; +} + +/* +** Return a copy of the linked list of Window objects passed as the +** second argument. +*/ +SQLITE_PRIVATE Window *sqlite3WindowListDup(sqlite3 *db, Window *p){ + Window *pWin; + Window *pRet = 0; + Window **pp = &pRet; + + for(pWin=p; pWin; pWin=pWin->pNextWin){ + *pp = sqlite3WindowDup(db, 0, pWin); + if( *pp==0 ) break; + pp = &((*pp)->pNextWin); + } + + return pRet; +} + +/* +** Return true if it can be determined at compile time that expression +** pExpr evaluates to a value that, when cast to an integer, is greater +** than zero. False otherwise. +** +** If an OOM error occurs, this function sets the Parse.db.mallocFailed +** flag and returns zero. +*/ +static int windowExprGtZero(Parse *pParse, Expr *pExpr){ + int ret = 0; + sqlite3 *db = pParse->db; + sqlite3_value *pVal = 0; + sqlite3ValueFromExpr(db, pExpr, db->enc, SQLITE_AFF_NUMERIC, &pVal); + if( pVal && sqlite3_value_int(pVal)>0 ){ + ret = 1; + } + sqlite3ValueFree(pVal); + return ret; +} + +/* +** sqlite3WhereBegin() has already been called for the SELECT statement +** passed as the second argument when this function is invoked. It generates +** code to populate the Window.regResult register for each window function +** and invoke the sub-routine at instruction addrGosub once for each row. +** sqlite3WhereEnd() is always called before returning. +** +** This function handles several different types of window frames, which +** require slightly different processing. The following pseudo code is +** used to implement window frames of the form: +** +** ROWS BETWEEN PRECEDING AND FOLLOWING +** +** Other window frame types use variants of the following: +** +** ... loop started by sqlite3WhereBegin() ... +** if( new partition ){ +** Gosub flush +** } +** Insert new row into eph table. +** +** if( first row of partition ){ +** // Rewind three cursors, all open on the eph table. +** Rewind(csrEnd); +** Rewind(csrStart); +** Rewind(csrCurrent); +** +** regEnd = // FOLLOWING expression +** regStart = // PRECEDING expression +** }else{ +** // First time this branch is taken, the eph table contains two +** // rows. The first row in the partition, which all three cursors +** // currently point to, and the following row. +** AGGSTEP +** if( (regEnd--)<=0 ){ +** RETURN_ROW +** if( (regStart--)<=0 ){ +** AGGINVERSE +** } +** } +** } +** } +** flush: +** AGGSTEP +** while( 1 ){ +** RETURN ROW +** if( csrCurrent is EOF ) break; +** if( (regStart--)<=0 ){ +** AggInverse(csrStart) +** Next(csrStart) +** } +** } +** +** The pseudo-code above uses the following shorthand: +** +** AGGSTEP: invoke the aggregate xStep() function for each window function +** with arguments read from the current row of cursor csrEnd, then +** step cursor csrEnd forward one row (i.e. sqlite3BtreeNext()). +** +** RETURN_ROW: return a row to the caller based on the contents of the +** current row of csrCurrent and the current state of all +** aggregates. Then step cursor csrCurrent forward one row. +** +** AGGINVERSE: invoke the aggregate xInverse() function for each window +** functions with arguments read from the current row of cursor +** csrStart. Then step csrStart forward one row. +** +** There are two other ROWS window frames that are handled significantly +** differently from the above - "BETWEEN PRECEDING AND PRECEDING" +** and "BETWEEN FOLLOWING AND FOLLOWING". These are special +** cases because they change the order in which the three cursors (csrStart, +** csrCurrent and csrEnd) iterate through the ephemeral table. Cases that +** use UNBOUNDED or CURRENT ROW are much simpler variations on one of these +** three. +** +** ROWS BETWEEN PRECEDING AND PRECEDING +** +** ... loop started by sqlite3WhereBegin() ... +** if( new partition ){ +** Gosub flush +** } +** Insert new row into eph table. +** if( first row of partition ){ +** Rewind(csrEnd) ; Rewind(csrStart) ; Rewind(csrCurrent) +** regEnd = +** regStart = +** }else{ +** if( (regEnd--)<=0 ){ +** AGGSTEP +** } +** RETURN_ROW +** if( (regStart--)<=0 ){ +** AGGINVERSE +** } +** } +** } +** flush: +** if( (regEnd--)<=0 ){ +** AGGSTEP +** } +** RETURN_ROW +** +** +** ROWS BETWEEN FOLLOWING AND FOLLOWING +** +** ... loop started by sqlite3WhereBegin() ... +** if( new partition ){ +** Gosub flush +** } +** Insert new row into eph table. +** if( first row of partition ){ +** Rewind(csrEnd) ; Rewind(csrStart) ; Rewind(csrCurrent) +** regEnd = +** regStart = regEnd - +** }else{ +** AGGSTEP +** if( (regEnd--)<=0 ){ +** RETURN_ROW +** } +** if( (regStart--)<=0 ){ +** AGGINVERSE +** } +** } +** } +** flush: +** AGGSTEP +** while( 1 ){ +** if( (regEnd--)<=0 ){ +** RETURN_ROW +** if( eof ) break; +** } +** if( (regStart--)<=0 ){ +** AGGINVERSE +** if( eof ) break +** } +** } +** while( !eof csrCurrent ){ +** RETURN_ROW +** } +** +** For the most part, the patterns above are adapted to support UNBOUNDED by +** assuming that it is equivalent to "infinity PRECEDING/FOLLOWING" and +** CURRENT ROW by assuming that it is equivalent to "0 PRECEDING/FOLLOWING". +** This is optimized of course - branches that will never be taken and +** conditions that are always true are omitted from the VM code. The only +** exceptional case is: +** +** ROWS BETWEEN FOLLOWING AND UNBOUNDED FOLLOWING +** +** ... loop started by sqlite3WhereBegin() ... +** if( new partition ){ +** Gosub flush +** } +** Insert new row into eph table. +** if( first row of partition ){ +** Rewind(csrEnd) ; Rewind(csrStart) ; Rewind(csrCurrent) +** regStart = +** }else{ +** AGGSTEP +** } +** } +** flush: +** AGGSTEP +** while( 1 ){ +** if( (regStart--)<=0 ){ +** AGGINVERSE +** if( eof ) break +** } +** RETURN_ROW +** } +** while( !eof csrCurrent ){ +** RETURN_ROW +** } +** +** Also requiring special handling are the cases: +** +** ROWS BETWEEN PRECEDING AND PRECEDING +** ROWS BETWEEN FOLLOWING AND FOLLOWING +** +** when (expr1 < expr2). This is detected at runtime, not by this function. +** To handle this case, the pseudo-code programs depicted above are modified +** slightly to be: +** +** ... loop started by sqlite3WhereBegin() ... +** if( new partition ){ +** Gosub flush +** } +** Insert new row into eph table. +** if( first row of partition ){ +** Rewind(csrEnd) ; Rewind(csrStart) ; Rewind(csrCurrent) +** regEnd = +** regStart = +** if( regEnd < regStart ){ +** RETURN_ROW +** delete eph table contents +** continue +** } +** ... +** +** The new "continue" statement in the above jumps to the next iteration +** of the outer loop - the one started by sqlite3WhereBegin(). +** +** The various GROUPS cases are implemented using the same patterns as +** ROWS. The VM code is modified slightly so that: +** +** 1. The else branch in the main loop is only taken if the row just +** added to the ephemeral table is the start of a new group. In +** other words, it becomes: +** +** ... loop started by sqlite3WhereBegin() ... +** if( new partition ){ +** Gosub flush +** } +** Insert new row into eph table. +** if( first row of partition ){ +** Rewind(csrEnd) ; Rewind(csrStart) ; Rewind(csrCurrent) +** regEnd = +** regStart = +** }else if( new group ){ +** ... +** } +** } +** +** 2. Instead of processing a single row, each RETURN_ROW, AGGSTEP or +** AGGINVERSE step processes the current row of the relevant cursor and +** all subsequent rows belonging to the same group. +** +** RANGE window frames are a little different again. As for GROUPS, the +** main loop runs once per group only. And RETURN_ROW, AGGSTEP and AGGINVERSE +** deal in groups instead of rows. As for ROWS and GROUPS, there are three +** basic cases: +** +** RANGE BETWEEN PRECEDING AND FOLLOWING +** +** ... loop started by sqlite3WhereBegin() ... +** if( new partition ){ +** Gosub flush +** } +** Insert new row into eph table. +** if( first row of partition ){ +** Rewind(csrEnd) ; Rewind(csrStart) ; Rewind(csrCurrent) +** regEnd = +** regStart = +** }else{ +** AGGSTEP +** while( (csrCurrent.key + regEnd) < csrEnd.key ){ +** RETURN_ROW +** while( csrStart.key + regStart) < csrCurrent.key ){ +** AGGINVERSE +** } +** } +** } +** } +** flush: +** AGGSTEP +** while( 1 ){ +** RETURN ROW +** if( csrCurrent is EOF ) break; +** while( csrStart.key + regStart) < csrCurrent.key ){ +** AGGINVERSE +** } +** } +** } +** +** In the above notation, "csr.key" means the current value of the ORDER BY +** expression (there is only ever 1 for a RANGE that uses an FOLLOWING +** or PRECEDING AND PRECEDING +** +** ... loop started by sqlite3WhereBegin() ... +** if( new partition ){ +** Gosub flush +** } +** Insert new row into eph table. +** if( first row of partition ){ +** Rewind(csrEnd) ; Rewind(csrStart) ; Rewind(csrCurrent) +** regEnd = +** regStart = +** }else{ +** while( (csrEnd.key + regEnd) <= csrCurrent.key ){ +** AGGSTEP +** } +** while( (csrStart.key + regStart) < csrCurrent.key ){ +** AGGINVERSE +** } +** RETURN_ROW +** } +** } +** flush: +** while( (csrEnd.key + regEnd) <= csrCurrent.key ){ +** AGGSTEP +** } +** while( (csrStart.key + regStart) < csrCurrent.key ){ +** AGGINVERSE +** } +** RETURN_ROW +** +** RANGE BETWEEN FOLLOWING AND FOLLOWING +** +** ... loop started by sqlite3WhereBegin() ... +** if( new partition ){ +** Gosub flush +** } +** Insert new row into eph table. +** if( first row of partition ){ +** Rewind(csrEnd) ; Rewind(csrStart) ; Rewind(csrCurrent) +** regEnd = +** regStart = +** }else{ +** AGGSTEP +** while( (csrCurrent.key + regEnd) < csrEnd.key ){ +** while( (csrCurrent.key + regStart) > csrStart.key ){ +** AGGINVERSE +** } +** RETURN_ROW +** } +** } +** } +** flush: +** AGGSTEP +** while( 1 ){ +** while( (csrCurrent.key + regStart) > csrStart.key ){ +** AGGINVERSE +** if( eof ) break "while( 1 )" loop. +** } +** RETURN_ROW +** } +** while( !eof csrCurrent ){ +** RETURN_ROW +** } +** +** The text above leaves out many details. Refer to the code and comments +** below for a more complete picture. +*/ +SQLITE_PRIVATE void sqlite3WindowCodeStep( + Parse *pParse, /* Parse context */ + Select *p, /* Rewritten SELECT statement */ + WhereInfo *pWInfo, /* Context returned by sqlite3WhereBegin() */ + int regGosub, /* Register for OP_Gosub */ + int addrGosub /* OP_Gosub here to return each row */ +){ + Window *pMWin = p->pWin; + ExprList *pOrderBy = pMWin->pOrderBy; + Vdbe *v = sqlite3GetVdbe(pParse); + int csrWrite; /* Cursor used to write to eph. table */ + int csrInput = p->pSrc->a[0].iCursor; /* Cursor of sub-select */ + int nInput = p->pSrc->a[0].pSTab->nCol; /* Number of cols returned by sub */ + int iInput; /* To iterate through sub cols */ + int addrNe; /* Address of OP_Ne */ + int addrGosubFlush = 0; /* Address of OP_Gosub to flush: */ + int addrInteger = 0; /* Address of OP_Integer */ + int addrEmpty; /* Address of OP_Rewind in flush: */ + int regNew; /* Array of registers holding new input row */ + int regRecord; /* regNew array in record form */ + int regNewPeer = 0; /* Peer values for new row (part of regNew) */ + int regPeer = 0; /* Peer values for current row */ + int regFlushPart = 0; /* Register for "Gosub flush_partition" */ + WindowCodeArg s; /* Context object for sub-routines */ + int lblWhereEnd; /* Label just before sqlite3WhereEnd() code */ + int regStart = 0; /* Value of PRECEDING */ + int regEnd = 0; /* Value of FOLLOWING */ + + assert( pMWin->eStart==TK_PRECEDING || pMWin->eStart==TK_CURRENT + || pMWin->eStart==TK_FOLLOWING || pMWin->eStart==TK_UNBOUNDED + ); + assert( pMWin->eEnd==TK_FOLLOWING || pMWin->eEnd==TK_CURRENT + || pMWin->eEnd==TK_UNBOUNDED || pMWin->eEnd==TK_PRECEDING + ); + assert( pMWin->eExclude==0 || pMWin->eExclude==TK_CURRENT + || pMWin->eExclude==TK_GROUP || pMWin->eExclude==TK_TIES + || pMWin->eExclude==TK_NO + ); + + lblWhereEnd = sqlite3VdbeMakeLabel(pParse); + + /* Fill in the context object */ + memset(&s, 0, sizeof(WindowCodeArg)); + s.pParse = pParse; + s.pMWin = pMWin; + s.pVdbe = v; + s.regGosub = regGosub; + s.addrGosub = addrGosub; + s.current.csr = pMWin->iEphCsr; + csrWrite = s.current.csr+1; + s.start.csr = s.current.csr+2; + s.end.csr = s.current.csr+3; + + /* Figure out when rows may be deleted from the ephemeral table. There + ** are four options - they may never be deleted (eDelete==0), they may + ** be deleted as soon as they are no longer part of the window frame + ** (eDelete==WINDOW_AGGINVERSE), they may be deleted as after the row + ** has been returned to the caller (WINDOW_RETURN_ROW), or they may + ** be deleted after they enter the frame (WINDOW_AGGSTEP). */ + switch( pMWin->eStart ){ + case TK_FOLLOWING: + if( pMWin->eFrmType!=TK_RANGE + && windowExprGtZero(pParse, pMWin->pStart) + ){ + s.eDelete = WINDOW_RETURN_ROW; + } + break; + case TK_UNBOUNDED: + if( windowCacheFrame(pMWin)==0 ){ + if( pMWin->eEnd==TK_PRECEDING ){ + if( pMWin->eFrmType!=TK_RANGE + && windowExprGtZero(pParse, pMWin->pEnd) + ){ + s.eDelete = WINDOW_AGGSTEP; + } + }else{ + s.eDelete = WINDOW_RETURN_ROW; + } + } + break; + default: + s.eDelete = WINDOW_AGGINVERSE; + break; + } + + /* Allocate registers for the array of values from the sub-query, the + ** same values in record form, and the rowid used to insert said record + ** into the ephemeral table. */ + regNew = pParse->nMem+1; + pParse->nMem += nInput; + regRecord = ++pParse->nMem; + s.regRowid = ++pParse->nMem; + + /* If the window frame contains an " PRECEDING" or " FOLLOWING" + ** clause, allocate registers to store the results of evaluating each + ** . */ + if( pMWin->eStart==TK_PRECEDING || pMWin->eStart==TK_FOLLOWING ){ + regStart = ++pParse->nMem; + } + if( pMWin->eEnd==TK_PRECEDING || pMWin->eEnd==TK_FOLLOWING ){ + regEnd = ++pParse->nMem; + } + + /* If this is not a "ROWS BETWEEN ..." frame, then allocate arrays of + ** registers to store copies of the ORDER BY expressions (peer values) + ** for the main loop, and for each cursor (start, current and end). */ + if( pMWin->eFrmType!=TK_ROWS ){ + int nPeer = (pOrderBy ? pOrderBy->nExpr : 0); + regNewPeer = regNew + pMWin->nBufferCol; + if( pMWin->pPartition ) regNewPeer += pMWin->pPartition->nExpr; + regPeer = pParse->nMem+1; pParse->nMem += nPeer; + s.start.reg = pParse->nMem+1; pParse->nMem += nPeer; + s.current.reg = pParse->nMem+1; pParse->nMem += nPeer; + s.end.reg = pParse->nMem+1; pParse->nMem += nPeer; + } + + /* Load the column values for the row returned by the sub-select + ** into an array of registers starting at regNew. Assemble them into + ** a record in register regRecord. */ + for(iInput=0; iInputpPartition ){ + int addr; + ExprList *pPart = pMWin->pPartition; + int nPart = pPart->nExpr; + int regNewPart = regNew + pMWin->nBufferCol; + KeyInfo *pKeyInfo = sqlite3KeyInfoFromExprList(pParse, pPart, 0, 0); + + regFlushPart = ++pParse->nMem; + addr = sqlite3VdbeAddOp3(v, OP_Compare, regNewPart, pMWin->regPart, nPart); + sqlite3VdbeAppendP4(v, (void*)pKeyInfo, P4_KEYINFO); + sqlite3VdbeAddOp3(v, OP_Jump, addr+2, addr+4, addr+2); + VdbeCoverageEqNe(v); + addrGosubFlush = sqlite3VdbeAddOp1(v, OP_Gosub, regFlushPart); + VdbeComment((v, "call flush_partition")); + sqlite3VdbeAddOp3(v, OP_Copy, regNewPart, pMWin->regPart, nPart-1); + } + + /* Insert the new row into the ephemeral table */ + sqlite3VdbeAddOp2(v, OP_NewRowid, csrWrite, s.regRowid); + sqlite3VdbeAddOp3(v, OP_Insert, csrWrite, regRecord, s.regRowid); + addrNe = sqlite3VdbeAddOp3(v, OP_Ne, pMWin->regOne, 0, s.regRowid); + VdbeCoverageNeverNull(v); + + /* This block is run for the first row of each partition */ + s.regArg = windowInitAccum(pParse, pMWin); + + if( regStart ){ + sqlite3ExprCode(pParse, pMWin->pStart, regStart); + windowCheckValue(pParse, regStart, 0 + (pMWin->eFrmType==TK_RANGE?3:0)); + } + if( regEnd ){ + sqlite3ExprCode(pParse, pMWin->pEnd, regEnd); + windowCheckValue(pParse, regEnd, 1 + (pMWin->eFrmType==TK_RANGE?3:0)); + } + + if( pMWin->eFrmType!=TK_RANGE && pMWin->eStart==pMWin->eEnd && regStart ){ + int op = ((pMWin->eStart==TK_FOLLOWING) ? OP_Ge : OP_Le); + int addrGe = sqlite3VdbeAddOp3(v, op, regStart, 0, regEnd); + VdbeCoverageNeverNullIf(v, op==OP_Ge); /* NeverNull because bound */ + VdbeCoverageNeverNullIf(v, op==OP_Le); /* values previously checked */ + windowAggFinal(&s, 0); + sqlite3VdbeAddOp1(v, OP_Rewind, s.current.csr); + windowReturnOneRow(&s); + sqlite3VdbeAddOp1(v, OP_ResetSorter, s.current.csr); + sqlite3VdbeAddOp2(v, OP_Goto, 0, lblWhereEnd); + sqlite3VdbeJumpHere(v, addrGe); + } + if( pMWin->eStart==TK_FOLLOWING && pMWin->eFrmType!=TK_RANGE && regEnd ){ + assert( pMWin->eEnd==TK_FOLLOWING ); + sqlite3VdbeAddOp3(v, OP_Subtract, regStart, regEnd, regStart); + } + + if( pMWin->eStart!=TK_UNBOUNDED ){ + sqlite3VdbeAddOp1(v, OP_Rewind, s.start.csr); + } + sqlite3VdbeAddOp1(v, OP_Rewind, s.current.csr); + sqlite3VdbeAddOp1(v, OP_Rewind, s.end.csr); + if( regPeer && pOrderBy ){ + sqlite3VdbeAddOp3(v, OP_Copy, regNewPeer, regPeer, pOrderBy->nExpr-1); + sqlite3VdbeAddOp3(v, OP_Copy, regPeer, s.start.reg, pOrderBy->nExpr-1); + sqlite3VdbeAddOp3(v, OP_Copy, regPeer, s.current.reg, pOrderBy->nExpr-1); + sqlite3VdbeAddOp3(v, OP_Copy, regPeer, s.end.reg, pOrderBy->nExpr-1); + } + + sqlite3VdbeAddOp2(v, OP_Goto, 0, lblWhereEnd); + + sqlite3VdbeJumpHere(v, addrNe); + + /* Beginning of the block executed for the second and subsequent rows. */ + if( regPeer ){ + windowIfNewPeer(pParse, pOrderBy, regNewPeer, regPeer, lblWhereEnd); + } + if( pMWin->eStart==TK_FOLLOWING ){ + windowCodeOp(&s, WINDOW_AGGSTEP, 0, 0); + if( pMWin->eEnd!=TK_UNBOUNDED ){ + if( pMWin->eFrmType==TK_RANGE ){ + int lbl = sqlite3VdbeMakeLabel(pParse); + int addrNext = sqlite3VdbeCurrentAddr(v); + windowCodeRangeTest(&s, OP_Ge, s.current.csr, regEnd, s.end.csr, lbl); + windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0); + windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 0); + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrNext); + sqlite3VdbeResolveLabel(v, lbl); + }else{ + windowCodeOp(&s, WINDOW_RETURN_ROW, regEnd, 0); + windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0); + } + } + }else + if( pMWin->eEnd==TK_PRECEDING ){ + int bRPS = (pMWin->eStart==TK_PRECEDING && pMWin->eFrmType==TK_RANGE); + windowCodeOp(&s, WINDOW_AGGSTEP, regEnd, 0); + if( bRPS ) windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0); + windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 0); + if( !bRPS ) windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0); + }else{ + int addr = 0; + windowCodeOp(&s, WINDOW_AGGSTEP, 0, 0); + if( pMWin->eEnd!=TK_UNBOUNDED ){ + if( pMWin->eFrmType==TK_RANGE ){ + int lbl = 0; + addr = sqlite3VdbeCurrentAddr(v); + if( regEnd ){ + lbl = sqlite3VdbeMakeLabel(pParse); + windowCodeRangeTest(&s, OP_Ge, s.current.csr, regEnd, s.end.csr, lbl); + } + windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 0); + windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0); + if( regEnd ){ + sqlite3VdbeAddOp2(v, OP_Goto, 0, addr); + sqlite3VdbeResolveLabel(v, lbl); + } + }else{ + if( regEnd ){ + addr = sqlite3VdbeAddOp3(v, OP_IfPos, regEnd, 0, 1); + VdbeCoverage(v); + } + windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 0); + windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0); + if( regEnd ) sqlite3VdbeJumpHere(v, addr); + } + } + } + + /* End of the main input loop */ + sqlite3VdbeResolveLabel(v, lblWhereEnd); + sqlite3WhereEnd(pWInfo); + + /* Fall through */ + if( pMWin->pPartition ){ + addrInteger = sqlite3VdbeAddOp2(v, OP_Integer, 0, regFlushPart); + sqlite3VdbeJumpHere(v, addrGosubFlush); + } + + s.regRowid = 0; + addrEmpty = sqlite3VdbeAddOp1(v, OP_Rewind, csrWrite); + VdbeCoverage(v); + if( pMWin->eEnd==TK_PRECEDING ){ + int bRPS = (pMWin->eStart==TK_PRECEDING && pMWin->eFrmType==TK_RANGE); + windowCodeOp(&s, WINDOW_AGGSTEP, regEnd, 0); + if( bRPS ) windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0); + windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 0); + }else if( pMWin->eStart==TK_FOLLOWING ){ + int addrStart; + int addrBreak1; + int addrBreak2; + int addrBreak3; + windowCodeOp(&s, WINDOW_AGGSTEP, 0, 0); + if( pMWin->eFrmType==TK_RANGE ){ + addrStart = sqlite3VdbeCurrentAddr(v); + addrBreak2 = windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 1); + addrBreak1 = windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 1); + }else + if( pMWin->eEnd==TK_UNBOUNDED ){ + addrStart = sqlite3VdbeCurrentAddr(v); + addrBreak1 = windowCodeOp(&s, WINDOW_RETURN_ROW, regStart, 1); + addrBreak2 = windowCodeOp(&s, WINDOW_AGGINVERSE, 0, 1); + }else{ + assert( pMWin->eEnd==TK_FOLLOWING ); + /* assert( regStart>=0 ); + ** regEnd = regEnd - regStart; + ** regStart = 0; */ + sqlite3VdbeAddOp3(v, OP_Subtract, regStart, regEnd, regEnd); + sqlite3VdbeAddOp2(v, OP_Integer, 0, regStart); + + addrStart = sqlite3VdbeCurrentAddr(v); + addrBreak1 = windowCodeOp(&s, WINDOW_RETURN_ROW, regEnd, 1); + addrBreak2 = windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 1); + } + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrStart); + sqlite3VdbeJumpHere(v, addrBreak2); + addrStart = sqlite3VdbeCurrentAddr(v); + addrBreak3 = windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 1); + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrStart); + sqlite3VdbeJumpHere(v, addrBreak1); + sqlite3VdbeJumpHere(v, addrBreak3); + }else{ + int addrBreak; + int addrStart; + windowCodeOp(&s, WINDOW_AGGSTEP, 0, 0); + addrStart = sqlite3VdbeCurrentAddr(v); + addrBreak = windowCodeOp(&s, WINDOW_RETURN_ROW, 0, 1); + windowCodeOp(&s, WINDOW_AGGINVERSE, regStart, 0); + sqlite3VdbeAddOp2(v, OP_Goto, 0, addrStart); + sqlite3VdbeJumpHere(v, addrBreak); + } + sqlite3VdbeJumpHere(v, addrEmpty); + + sqlite3VdbeAddOp1(v, OP_ResetSorter, s.current.csr); + if( pMWin->pPartition ){ + if( pMWin->regStartRowid ){ + sqlite3VdbeAddOp2(v, OP_Integer, 1, pMWin->regStartRowid); + sqlite3VdbeAddOp2(v, OP_Integer, 0, pMWin->regEndRowid); + } + sqlite3VdbeChangeP1(v, addrInteger, sqlite3VdbeCurrentAddr(v)); + sqlite3VdbeAddOp1(v, OP_Return, regFlushPart); + } +} + +#endif /* SQLITE_OMIT_WINDOWFUNC */ + +/************** End of window.c **********************************************/ +/************** Begin file parse.c *******************************************/ +/* This file is automatically generated by Lemon from input grammar +** source file "parse.y". +*/ +/* +** 2001-09-15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains SQLite's SQL parser. +** +** The canonical source code to this file ("parse.y") is a Lemon grammar +** file that specifies the input grammar and actions to take while parsing. +** That input file is processed by Lemon to generate a C-language +** implementation of a parser for the given grammar. You might be reading +** this comment as part of the translated C-code. Edits should be made +** to the original parse.y sources. +*/ + +/* #include "sqliteInt.h" */ + +/* +** Verify that the pParse->isCreate field is set +*/ +#define ASSERT_IS_CREATE assert(pParse->isCreate) + +/* +** Disable all error recovery processing in the parser push-down +** automaton. +*/ +#define YYNOERRORRECOVERY 1 + +/* +** Make yytestcase() the same as testcase() +*/ +#define yytestcase(X) testcase(X) + +/* +** Indicate that sqlite3ParserFree() will never be called with a null +** pointer. +*/ +#define YYPARSEFREENEVERNULL 1 + +/* +** In the amalgamation, the parse.c file generated by lemon and the +** tokenize.c file are concatenated. In that case, sqlite3RunParser() +** has access to the the size of the yyParser object and so the parser +** engine can be allocated from stack. In that case, only the +** sqlite3ParserInit() and sqlite3ParserFinalize() routines are invoked +** and the sqlite3ParserAlloc() and sqlite3ParserFree() routines can be +** omitted. +*/ +#ifdef SQLITE_AMALGAMATION +# define sqlite3Parser_ENGINEALWAYSONSTACK 1 +#endif + +/* +** Alternative datatype for the argument to the malloc() routine passed +** into sqlite3ParserAlloc(). The default is size_t. +*/ +#define YYMALLOCARGTYPE u64 + +/* +** An instance of the following structure describes the event of a +** TRIGGER. "a" is the event type, one of TK_UPDATE, TK_INSERT, +** TK_DELETE, or TK_INSTEAD. If the event is of the form +** +** UPDATE ON (a,b,c) +** +** Then the "b" IdList records the list "a,b,c". +*/ +struct TrigEvent { int a; IdList * b; }; + +struct FrameBound { int eType; Expr *pExpr; }; + +/* +** Generate a syntax error +*/ +static void parserSyntaxError(Parse *pParse, Token *p){ + sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", p); +} + +/* +** Disable lookaside memory allocation for objects that might be +** shared across database connections. +*/ +static void disableLookaside(Parse *pParse){ + sqlite3 *db = pParse->db; + pParse->disableLookaside++; +#ifdef SQLITE_DEBUG + pParse->isCreate = 1; +#endif + memset(&pParse->u1.cr, 0, sizeof(pParse->u1.cr)); + DisableLookaside; +} + +#if !defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) \ + && defined(SQLITE_UDL_CAPABLE_PARSER) +/* +** Issue an error message if an ORDER BY or LIMIT clause occurs on an +** UPDATE or DELETE statement. +*/ +static void updateDeleteLimitError( + Parse *pParse, + ExprList *pOrderBy, + Expr *pLimit +){ + if( pOrderBy ){ + sqlite3ErrorMsg(pParse, "syntax error near \"ORDER BY\""); + }else{ + sqlite3ErrorMsg(pParse, "syntax error near \"LIMIT\""); + } + sqlite3ExprListDelete(pParse->db, pOrderBy); + sqlite3ExprDelete(pParse->db, pLimit); +} +#endif /* SQLITE_ENABLE_UPDATE_DELETE_LIMIT */ + + + /* + ** For a compound SELECT statement, make sure p->pPrior->pNext==p for + ** all elements in the list. And make sure list length does not exceed + ** SQLITE_LIMIT_COMPOUND_SELECT. + */ + static void parserDoubleLinkSelect(Parse *pParse, Select *p){ + assert( p!=0 ); + if( p->pPrior ){ + Select *pNext = 0, *pLoop = p; + int mxSelect, cnt = 1; + while(1){ + pLoop->pNext = pNext; + pLoop->selFlags |= SF_Compound; + pNext = pLoop; + pLoop = pLoop->pPrior; + if( pLoop==0 ) break; + cnt++; + if( pLoop->pOrderBy || pLoop->pLimit ){ + sqlite3ErrorMsg(pParse,"%s clause should come after %s not before", + pLoop->pOrderBy!=0 ? "ORDER BY" : "LIMIT", + sqlite3SelectOpName(pNext->op)); + break; + } + } + if( (p->selFlags & (SF_MultiValue|SF_Values))==0 + && (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0 + && cnt>mxSelect + ){ + sqlite3ErrorMsg(pParse, "too many terms in compound SELECT"); + } + } + } + + /* Attach a With object describing the WITH clause to a Select + ** object describing the query for which the WITH clause is a prefix. + */ + static Select *attachWithToSelect(Parse *pParse, Select *pSelect, With *pWith){ + if( pSelect ){ + pSelect->pWith = pWith; + parserDoubleLinkSelect(pParse, pSelect); + }else{ + sqlite3WithDelete(pParse->db, pWith); + } + return pSelect; + } + + /* Memory allocator for parser stack resizing. This is a thin wrapper around + ** sqlite3_realloc() that includes a call to sqlite3FaultSim() to facilitate + ** testing. + */ + static void *parserStackRealloc(void *pOld, sqlite3_uint64 newSize){ + return sqlite3FaultSim(700) ? 0 : sqlite3_realloc(pOld, newSize); + } + + + /* Construct a new Expr object from a single token */ + static Expr *tokenExpr(Parse *pParse, int op, Token t){ + Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1); + if( p ){ + /* memset(p, 0, sizeof(Expr)); */ + p->op = (u8)op; + p->affExpr = 0; + p->flags = EP_Leaf; + ExprClearVVAProperties(p); + /* p->iAgg = -1; // Not required */ + p->pLeft = p->pRight = 0; + p->pAggInfo = 0; + memset(&p->x, 0, sizeof(p->x)); + memset(&p->y, 0, sizeof(p->y)); + p->op2 = 0; + p->iTable = 0; + p->iColumn = 0; + p->u.zToken = (char*)&p[1]; + memcpy(p->u.zToken, t.z, t.n); + p->u.zToken[t.n] = 0; + p->w.iOfst = (int)(t.z - pParse->zTail); + if( sqlite3Isquote(p->u.zToken[0]) ){ + sqlite3DequoteExpr(p); + } +#if SQLITE_MAX_EXPR_DEPTH>0 + p->nHeight = 1; +#endif + if( IN_RENAME_OBJECT ){ + return (Expr*)sqlite3RenameTokenMap(pParse, (void*)p, &t); + } + } + return p; + } + + + /* A routine to convert a binary TK_IS or TK_ISNOT expression into a + ** unary TK_ISNULL or TK_NOTNULL expression. */ + static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){ + sqlite3 *db = pParse->db; + if( pA && pY && pY->op==TK_NULL && !IN_RENAME_OBJECT ){ + pA->op = (u8)op; + sqlite3ExprDelete(db, pA->pRight); + pA->pRight = 0; + } + } + + /* Add a single new term to an ExprList that is used to store a + ** list of identifiers. Report an error if the ID list contains + ** a COLLATE clause or an ASC or DESC keyword, except ignore the + ** error while parsing a legacy schema. + */ + static ExprList *parserAddExprIdListTerm( + Parse *pParse, + ExprList *pPrior, + Token *pIdToken, + int hasCollate, + int sortOrder + ){ + ExprList *p = sqlite3ExprListAppend(pParse, pPrior, 0); + if( (hasCollate || sortOrder!=SQLITE_SO_UNDEFINED) + && pParse->db->init.busy==0 + ){ + sqlite3ErrorMsg(pParse, "syntax error after column name \"%.*s\"", + pIdToken->n, pIdToken->z); + } + sqlite3ExprListSetName(pParse, p, pIdToken, 1); + return p; + } + +#if TK_SPAN>255 +# error too many tokens in the grammar +#endif +/**************** End of %include directives **********************************/ +/* These constants specify the various numeric values for terminal symbols. +***************** Begin token definitions *************************************/ +#ifndef TK_SEMI +#define TK_SEMI 1 +#define TK_EXPLAIN 2 +#define TK_QUERY 3 +#define TK_PLAN 4 +#define TK_BEGIN 5 +#define TK_TRANSACTION 6 +#define TK_DEFERRED 7 +#define TK_IMMEDIATE 8 +#define TK_EXCLUSIVE 9 +#define TK_COMMIT 10 +#define TK_END 11 +#define TK_ROLLBACK 12 +#define TK_SAVEPOINT 13 +#define TK_RELEASE 14 +#define TK_TO 15 +#define TK_TABLE 16 +#define TK_CREATE 17 +#define TK_IF 18 +#define TK_NOT 19 +#define TK_EXISTS 20 +#define TK_TEMP 21 +#define TK_LP 22 +#define TK_RP 23 +#define TK_AS 24 +#define TK_COMMA 25 +#define TK_WITHOUT 26 +#define TK_ABORT 27 +#define TK_ACTION 28 +#define TK_AFTER 29 +#define TK_ANALYZE 30 +#define TK_ASC 31 +#define TK_ATTACH 32 +#define TK_BEFORE 33 +#define TK_BY 34 +#define TK_CASCADE 35 +#define TK_CAST 36 +#define TK_CONFLICT 37 +#define TK_DATABASE 38 +#define TK_DESC 39 +#define TK_DETACH 40 +#define TK_EACH 41 +#define TK_FAIL 42 +#define TK_OR 43 +#define TK_AND 44 +#define TK_IS 45 +#define TK_ISNOT 46 +#define TK_MATCH 47 +#define TK_LIKE_KW 48 +#define TK_BETWEEN 49 +#define TK_IN 50 +#define TK_ISNULL 51 +#define TK_NOTNULL 52 +#define TK_NE 53 +#define TK_EQ 54 +#define TK_GT 55 +#define TK_LE 56 +#define TK_LT 57 +#define TK_GE 58 +#define TK_ESCAPE 59 +#define TK_ID 60 +#define TK_COLUMNKW 61 +#define TK_DO 62 +#define TK_FOR 63 +#define TK_IGNORE 64 +#define TK_INITIALLY 65 +#define TK_INSTEAD 66 +#define TK_NO 67 +#define TK_KEY 68 +#define TK_OF 69 +#define TK_OFFSET 70 +#define TK_PRAGMA 71 +#define TK_RAISE 72 +#define TK_RECURSIVE 73 +#define TK_REPLACE 74 +#define TK_RESTRICT 75 +#define TK_ROW 76 +#define TK_ROWS 77 +#define TK_TRIGGER 78 +#define TK_VACUUM 79 +#define TK_VIEW 80 +#define TK_VIRTUAL 81 +#define TK_WITH 82 +#define TK_NULLS 83 +#define TK_FIRST 84 +#define TK_LAST 85 +#define TK_CURRENT 86 +#define TK_FOLLOWING 87 +#define TK_PARTITION 88 +#define TK_PRECEDING 89 +#define TK_RANGE 90 +#define TK_UNBOUNDED 91 +#define TK_EXCLUDE 92 +#define TK_GROUPS 93 +#define TK_OTHERS 94 +#define TK_TIES 95 +#define TK_GENERATED 96 +#define TK_ALWAYS 97 +#define TK_MATERIALIZED 98 +#define TK_REINDEX 99 +#define TK_RENAME 100 +#define TK_CTIME_KW 101 +#define TK_ANY 102 +#define TK_BITAND 103 +#define TK_BITOR 104 +#define TK_LSHIFT 105 +#define TK_RSHIFT 106 +#define TK_PLUS 107 +#define TK_MINUS 108 +#define TK_STAR 109 +#define TK_SLASH 110 +#define TK_REM 111 +#define TK_CONCAT 112 +#define TK_PTR 113 +#define TK_COLLATE 114 +#define TK_BITNOT 115 +#define TK_ON 116 +#define TK_INDEXED 117 +#define TK_STRING 118 +#define TK_JOIN_KW 119 +#define TK_CONSTRAINT 120 +#define TK_DEFAULT 121 +#define TK_NULL 122 +#define TK_PRIMARY 123 +#define TK_UNIQUE 124 +#define TK_CHECK 125 +#define TK_REFERENCES 126 +#define TK_AUTOINCR 127 +#define TK_INSERT 128 +#define TK_DELETE 129 +#define TK_UPDATE 130 +#define TK_SET 131 +#define TK_DEFERRABLE 132 +#define TK_FOREIGN 133 +#define TK_DROP 134 +#define TK_UNION 135 +#define TK_ALL 136 +#define TK_EXCEPT 137 +#define TK_INTERSECT 138 +#define TK_SELECT 139 +#define TK_VALUES 140 +#define TK_DISTINCT 141 +#define TK_DOT 142 +#define TK_FROM 143 +#define TK_JOIN 144 +#define TK_USING 145 +#define TK_ORDER 146 +#define TK_GROUP 147 +#define TK_HAVING 148 +#define TK_LIMIT 149 +#define TK_WHERE 150 +#define TK_RETURNING 151 +#define TK_INTO 152 +#define TK_NOTHING 153 +#define TK_FLOAT 154 +#define TK_BLOB 155 +#define TK_INTEGER 156 +#define TK_VARIABLE 157 +#define TK_CASE 158 +#define TK_WHEN 159 +#define TK_THEN 160 +#define TK_ELSE 161 +#define TK_INDEX 162 +#define TK_ALTER 163 +#define TK_ADD 164 +#define TK_WINDOW 165 +#define TK_OVER 166 +#define TK_FILTER 167 +#define TK_COLUMN 168 +#define TK_AGG_FUNCTION 169 +#define TK_AGG_COLUMN 170 +#define TK_TRUEFALSE 171 +#define TK_FUNCTION 172 +#define TK_UPLUS 173 +#define TK_UMINUS 174 +#define TK_TRUTH 175 +#define TK_REGISTER 176 +#define TK_VECTOR 177 +#define TK_SELECT_COLUMN 178 +#define TK_IF_NULL_ROW 179 +#define TK_ASTERISK 180 +#define TK_SPAN 181 +#define TK_ERROR 182 +#define TK_QNUMBER 183 +#define TK_SPACE 184 +#define TK_COMMENT 185 +#define TK_ILLEGAL 186 +#endif +/**************** End token definitions ***************************************/ + +/* The next sections is a series of control #defines. +** various aspects of the generated parser. +** YYCODETYPE is the data type used to store the integer codes +** that represent terminal and non-terminal symbols. +** "unsigned char" is used if there are fewer than +** 256 symbols. Larger types otherwise. +** YYNOCODE is a number of type YYCODETYPE that is not used for +** any terminal or nonterminal symbol. +** YYFALLBACK If defined, this indicates that one or more tokens +** (also known as: "terminal symbols") have fall-back +** values which should be used if the original symbol +** would not parse. This permits keywords to sometimes +** be used as identifiers, for example. +** YYACTIONTYPE is the data type used for "action codes" - numbers +** that indicate what to do in response to the next +** token. +** sqlite3ParserTOKENTYPE is the data type used for minor type for terminal +** symbols. Background: A "minor type" is a semantic +** value associated with a terminal or non-terminal +** symbols. For example, for an "ID" terminal symbol, +** the minor type might be the name of the identifier. +** Each non-terminal can have a different minor type. +** Terminal symbols all have the same minor type, though. +** This macros defines the minor type for terminal +** symbols. +** YYMINORTYPE is the data type used for all minor types. +** This is typically a union of many types, one of +** which is sqlite3ParserTOKENTYPE. The entry in the union +** for terminal symbols is called "yy0". +** YYSTACKDEPTH is the maximum depth of the parser's stack. If +** zero the stack is dynamically sized using realloc() +** sqlite3ParserARG_SDECL A static variable declaration for the %extra_argument +** sqlite3ParserARG_PDECL A parameter declaration for the %extra_argument +** sqlite3ParserARG_PARAM Code to pass %extra_argument as a subroutine parameter +** sqlite3ParserARG_STORE Code to store %extra_argument into yypParser +** sqlite3ParserARG_FETCH Code to extract %extra_argument from yypParser +** sqlite3ParserCTX_* As sqlite3ParserARG_ except for %extra_context +** YYREALLOC Name of the realloc() function to use +** YYFREE Name of the free() function to use +** YYDYNSTACK True if stack space should be extended on heap +** YYERRORSYMBOL is the code number of the error symbol. If not +** defined, then do no error processing. +** YYNSTATE the combined number of states. +** YYNRULE the number of rules in the grammar +** YYNTOKEN Number of terminal symbols +** YY_MAX_SHIFT Maximum value for shift actions +** YY_MIN_SHIFTREDUCE Minimum value for shift-reduce actions +** YY_MAX_SHIFTREDUCE Maximum value for shift-reduce actions +** YY_ERROR_ACTION The yy_action[] code for syntax error +** YY_ACCEPT_ACTION The yy_action[] code for accept +** YY_NO_ACTION The yy_action[] code for no-op +** YY_MIN_REDUCE Minimum value for reduce actions +** YY_MAX_REDUCE Maximum value for reduce actions +** YY_MIN_DSTRCTR Minimum symbol value that has a destructor +** YY_MAX_DSTRCTR Maximum symbol value that has a destructor +*/ +#ifndef INTERFACE +# define INTERFACE 1 +#endif +/************* Begin control #defines *****************************************/ +#define YYCODETYPE unsigned short int +#define YYNOCODE 323 +#define YYACTIONTYPE unsigned short int +#define YYWILDCARD 102 +#define sqlite3ParserTOKENTYPE Token +typedef union { + int yyinit; + sqlite3ParserTOKENTYPE yy0; + u32 yy9; + struct TrigEvent yy28; + With* yy125; + IdList* yy204; + struct FrameBound yy205; + TriggerStep* yy319; + const char* yy342; + Cte* yy361; + ExprList* yy402; + Upsert* yy403; + OnOrUsing yy421; + u8 yy444; + struct {int value; int mask;} yy481; + Window* yy483; + int yy502; + SrcList* yy563; + Expr* yy590; + Select* yy637; +} YYMINORTYPE; +#ifndef YYSTACKDEPTH +#define YYSTACKDEPTH 100 +#endif +#define sqlite3ParserARG_SDECL +#define sqlite3ParserARG_PDECL +#define sqlite3ParserARG_PARAM +#define sqlite3ParserARG_FETCH +#define sqlite3ParserARG_STORE +#define YYREALLOC parserStackRealloc +#define YYFREE sqlite3_free +#define YYDYNSTACK 1 +#define sqlite3ParserCTX_SDECL Parse *pParse; +#define sqlite3ParserCTX_PDECL ,Parse *pParse +#define sqlite3ParserCTX_PARAM ,pParse +#define sqlite3ParserCTX_FETCH Parse *pParse=yypParser->pParse; +#define sqlite3ParserCTX_STORE yypParser->pParse=pParse; +#define YYFALLBACK 1 +#define YYNSTATE 583 +#define YYNRULE 409 +#define YYNRULE_WITH_ACTION 344 +#define YYNTOKEN 187 +#define YY_MAX_SHIFT 582 +#define YY_MIN_SHIFTREDUCE 845 +#define YY_MAX_SHIFTREDUCE 1253 +#define YY_ERROR_ACTION 1254 +#define YY_ACCEPT_ACTION 1255 +#define YY_NO_ACTION 1256 +#define YY_MIN_REDUCE 1257 +#define YY_MAX_REDUCE 1665 +#define YY_MIN_DSTRCTR 206 +#define YY_MAX_DSTRCTR 320 +/************* End control #defines *******************************************/ +#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0]))) + +/* Define the yytestcase() macro to be a no-op if is not already defined +** otherwise. +** +** Applications can choose to define yytestcase() in the %include section +** to a macro that can assist in verifying code coverage. For production +** code the yytestcase() macro should be turned off. But it is useful +** for testing. +*/ +#ifndef yytestcase +# define yytestcase(X) +#endif + +/* Macro to determine if stack space has the ability to grow using +** heap memory. +*/ +#if YYSTACKDEPTH<=0 || YYDYNSTACK +# define YYGROWABLESTACK 1 +#else +# define YYGROWABLESTACK 0 +#endif + +/* Guarantee a minimum number of initial stack slots. +*/ +#if YYSTACKDEPTH<=0 +# undef YYSTACKDEPTH +# define YYSTACKDEPTH 2 /* Need a minimum stack size */ +#endif + + +/* Next are the tables used to determine what action to take based on the +** current state and lookahead token. These tables are used to implement +** functions that take a state number and lookahead value and return an +** action integer. +** +** Suppose the action integer is N. Then the action is determined as +** follows +** +** 0 <= N <= YY_MAX_SHIFT Shift N. That is, push the lookahead +** token onto the stack and goto state N. +** +** N between YY_MIN_SHIFTREDUCE Shift to an arbitrary state then +** and YY_MAX_SHIFTREDUCE reduce by rule N-YY_MIN_SHIFTREDUCE. +** +** N == YY_ERROR_ACTION A syntax error has occurred. +** +** N == YY_ACCEPT_ACTION The parser accepts its input. +** +** N == YY_NO_ACTION No such action. Denotes unused +** slots in the yy_action[] table. +** +** N between YY_MIN_REDUCE Reduce by rule N-YY_MIN_REDUCE +** and YY_MAX_REDUCE +** +** The action table is constructed as a single large table named yy_action[]. +** Given state S and lookahead X, the action is computed as either: +** +** (A) N = yy_action[ yy_shift_ofst[S] + X ] +** (B) N = yy_default[S] +** +** The (A) formula is preferred. The B formula is used instead if +** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X. +** +** The formulas above are for computing the action when the lookahead is +** a terminal symbol. If the lookahead is a non-terminal (as occurs after +** a reduce action) then the yy_reduce_ofst[] array is used in place of +** the yy_shift_ofst[] array. +** +** The following are the tables generated in this section: +** +** yy_action[] A single table containing all actions. +** yy_lookahead[] A table containing the lookahead for each entry in +** yy_action. Used to detect hash collisions. +** yy_shift_ofst[] For each state, the offset into yy_action for +** shifting terminals. +** yy_reduce_ofst[] For each state, the offset into yy_action for +** shifting non-terminals after a reduce. +** yy_default[] Default action for each state. +** +*********** Begin parsing tables **********************************************/ +#define YY_ACTTAB_COUNT (2207) +static const YYACTIONTYPE yy_action[] = { + /* 0 */ 130, 127, 234, 282, 282, 1328, 576, 1307, 460, 289, + /* 10 */ 289, 576, 1622, 381, 576, 1328, 573, 576, 562, 413, + /* 20 */ 1300, 1542, 573, 481, 562, 524, 460, 459, 558, 82, + /* 30 */ 82, 983, 294, 375, 51, 51, 498, 61, 61, 984, + /* 40 */ 82, 82, 1577, 137, 138, 91, 7, 1228, 1228, 1063, + /* 50 */ 1066, 1053, 1053, 135, 135, 136, 136, 136, 136, 413, + /* 60 */ 288, 288, 182, 288, 288, 481, 536, 288, 288, 130, + /* 70 */ 127, 234, 432, 573, 525, 562, 573, 557, 562, 1290, + /* 80 */ 573, 421, 562, 137, 138, 91, 559, 1228, 1228, 1063, + /* 90 */ 1066, 1053, 1053, 135, 135, 136, 136, 136, 136, 296, + /* 100 */ 460, 398, 1249, 134, 134, 134, 134, 133, 133, 132, + /* 110 */ 132, 132, 131, 128, 451, 451, 1050, 1050, 1064, 1067, + /* 120 */ 1255, 1, 1, 582, 2, 1259, 581, 1174, 1259, 1174, + /* 130 */ 321, 413, 155, 321, 1584, 155, 379, 112, 481, 1341, + /* 140 */ 456, 299, 1341, 134, 134, 134, 134, 133, 133, 132, + /* 150 */ 132, 132, 131, 128, 451, 137, 138, 91, 498, 1228, + /* 160 */ 1228, 1063, 1066, 1053, 1053, 135, 135, 136, 136, 136, + /* 170 */ 136, 1204, 862, 1281, 288, 288, 283, 288, 288, 523, + /* 180 */ 523, 1250, 139, 578, 7, 578, 1345, 573, 1169, 562, + /* 190 */ 573, 1054, 562, 136, 136, 136, 136, 129, 573, 547, + /* 200 */ 562, 1169, 245, 1541, 1169, 245, 133, 133, 132, 132, + /* 210 */ 132, 131, 128, 451, 302, 134, 134, 134, 134, 133, + /* 220 */ 133, 132, 132, 132, 131, 128, 451, 1575, 1204, 1205, + /* 230 */ 1204, 7, 470, 550, 455, 413, 550, 455, 130, 127, + /* 240 */ 234, 134, 134, 134, 134, 133, 133, 132, 132, 132, + /* 250 */ 131, 128, 451, 136, 136, 136, 136, 538, 483, 137, + /* 260 */ 138, 91, 1019, 1228, 1228, 1063, 1066, 1053, 1053, 135, + /* 270 */ 135, 136, 136, 136, 136, 1085, 576, 1204, 132, 132, + /* 280 */ 132, 131, 128, 451, 93, 214, 134, 134, 134, 134, + /* 290 */ 133, 133, 132, 132, 132, 131, 128, 451, 401, 19, + /* 300 */ 19, 134, 134, 134, 134, 133, 133, 132, 132, 132, + /* 310 */ 131, 128, 451, 1498, 426, 267, 344, 467, 332, 134, + /* 320 */ 134, 134, 134, 133, 133, 132, 132, 132, 131, 128, + /* 330 */ 451, 1281, 576, 6, 1204, 1205, 1204, 257, 576, 413, + /* 340 */ 511, 508, 507, 1279, 94, 1019, 464, 1204, 551, 551, + /* 350 */ 506, 1224, 1571, 44, 38, 51, 51, 411, 576, 413, + /* 360 */ 45, 51, 51, 137, 138, 91, 530, 1228, 1228, 1063, + /* 370 */ 1066, 1053, 1053, 135, 135, 136, 136, 136, 136, 398, + /* 380 */ 1148, 82, 82, 137, 138, 91, 39, 1228, 1228, 1063, + /* 390 */ 1066, 1053, 1053, 135, 135, 136, 136, 136, 136, 344, + /* 400 */ 44, 288, 288, 375, 1204, 1205, 1204, 209, 1204, 1224, + /* 410 */ 320, 567, 471, 576, 573, 576, 562, 576, 316, 264, + /* 420 */ 231, 46, 160, 134, 134, 134, 134, 133, 133, 132, + /* 430 */ 132, 132, 131, 128, 451, 303, 82, 82, 82, 82, + /* 440 */ 82, 82, 442, 134, 134, 134, 134, 133, 133, 132, + /* 450 */ 132, 132, 131, 128, 451, 1582, 544, 320, 567, 1250, + /* 460 */ 874, 1582, 380, 382, 413, 1204, 1205, 1204, 360, 182, + /* 470 */ 288, 288, 1576, 557, 1339, 557, 7, 557, 1277, 472, + /* 480 */ 346, 526, 531, 573, 556, 562, 439, 1511, 137, 138, + /* 490 */ 91, 219, 1228, 1228, 1063, 1066, 1053, 1053, 135, 135, + /* 500 */ 136, 136, 136, 136, 465, 1511, 1513, 532, 413, 288, + /* 510 */ 288, 423, 512, 288, 288, 411, 288, 288, 874, 130, + /* 520 */ 127, 234, 573, 1107, 562, 1204, 573, 1107, 562, 573, + /* 530 */ 560, 562, 137, 138, 91, 1293, 1228, 1228, 1063, 1066, + /* 540 */ 1053, 1053, 135, 135, 136, 136, 136, 136, 134, 134, + /* 550 */ 134, 134, 133, 133, 132, 132, 132, 131, 128, 451, + /* 560 */ 493, 503, 1292, 1204, 257, 288, 288, 511, 508, 507, + /* 570 */ 1204, 1628, 1169, 123, 568, 275, 4, 506, 573, 1511, + /* 580 */ 562, 331, 1204, 1205, 1204, 1169, 548, 548, 1169, 261, + /* 590 */ 571, 7, 134, 134, 134, 134, 133, 133, 132, 132, + /* 600 */ 132, 131, 128, 451, 108, 533, 130, 127, 234, 1204, + /* 610 */ 448, 447, 413, 1451, 452, 983, 886, 96, 1598, 1233, + /* 620 */ 1204, 1205, 1204, 984, 1235, 1450, 565, 1204, 1205, 1204, + /* 630 */ 229, 522, 1234, 534, 1333, 1333, 137, 138, 91, 1449, + /* 640 */ 1228, 1228, 1063, 1066, 1053, 1053, 135, 135, 136, 136, + /* 650 */ 136, 136, 373, 1595, 971, 1040, 413, 1236, 418, 1236, + /* 660 */ 879, 121, 121, 948, 373, 1595, 1204, 1205, 1204, 122, + /* 670 */ 1204, 452, 577, 452, 363, 417, 1028, 882, 373, 1595, + /* 680 */ 137, 138, 91, 462, 1228, 1228, 1063, 1066, 1053, 1053, + /* 690 */ 135, 135, 136, 136, 136, 136, 134, 134, 134, 134, + /* 700 */ 133, 133, 132, 132, 132, 131, 128, 451, 1028, 1028, + /* 710 */ 1030, 1031, 35, 570, 570, 570, 197, 423, 1040, 198, + /* 720 */ 1204, 123, 568, 1204, 4, 320, 567, 1204, 1205, 1204, + /* 730 */ 40, 388, 576, 384, 882, 1029, 423, 1188, 571, 1028, + /* 740 */ 134, 134, 134, 134, 133, 133, 132, 132, 132, 131, + /* 750 */ 128, 451, 529, 1568, 1204, 19, 19, 1204, 575, 492, + /* 760 */ 413, 157, 452, 489, 1187, 1331, 1331, 5, 1204, 949, + /* 770 */ 431, 1028, 1028, 1030, 565, 22, 22, 1204, 1205, 1204, + /* 780 */ 1204, 1205, 1204, 477, 137, 138, 91, 212, 1228, 1228, + /* 790 */ 1063, 1066, 1053, 1053, 135, 135, 136, 136, 136, 136, + /* 800 */ 1188, 48, 111, 1040, 413, 1204, 213, 970, 1041, 121, + /* 810 */ 121, 1204, 1205, 1204, 1204, 1205, 1204, 122, 221, 452, + /* 820 */ 577, 452, 44, 487, 1028, 1204, 1205, 1204, 137, 138, + /* 830 */ 91, 378, 1228, 1228, 1063, 1066, 1053, 1053, 135, 135, + /* 840 */ 136, 136, 136, 136, 134, 134, 134, 134, 133, 133, + /* 850 */ 132, 132, 132, 131, 128, 451, 1028, 1028, 1030, 1031, + /* 860 */ 35, 461, 1204, 1205, 1204, 1569, 1040, 377, 214, 1149, + /* 870 */ 1657, 535, 1657, 437, 902, 320, 567, 1568, 364, 320, + /* 880 */ 567, 412, 329, 1029, 519, 1188, 3, 1028, 134, 134, + /* 890 */ 134, 134, 133, 133, 132, 132, 132, 131, 128, 451, + /* 900 */ 1659, 399, 1169, 307, 893, 307, 515, 576, 413, 214, + /* 910 */ 498, 944, 1024, 540, 903, 1169, 943, 392, 1169, 1028, + /* 920 */ 1028, 1030, 406, 298, 1204, 50, 1149, 1658, 413, 1658, + /* 930 */ 145, 145, 137, 138, 91, 293, 1228, 1228, 1063, 1066, + /* 940 */ 1053, 1053, 135, 135, 136, 136, 136, 136, 1188, 1147, + /* 950 */ 514, 1568, 137, 138, 91, 1505, 1228, 1228, 1063, 1066, + /* 960 */ 1053, 1053, 135, 135, 136, 136, 136, 136, 434, 323, + /* 970 */ 435, 539, 111, 1506, 274, 291, 372, 517, 367, 516, + /* 980 */ 262, 1204, 1205, 1204, 1574, 481, 363, 576, 7, 1569, + /* 990 */ 1568, 377, 134, 134, 134, 134, 133, 133, 132, 132, + /* 1000 */ 132, 131, 128, 451, 1568, 576, 1147, 576, 232, 576, + /* 1010 */ 19, 19, 134, 134, 134, 134, 133, 133, 132, 132, + /* 1020 */ 132, 131, 128, 451, 1169, 433, 576, 1207, 19, 19, + /* 1030 */ 19, 19, 19, 19, 1627, 576, 911, 1169, 47, 120, + /* 1040 */ 1169, 117, 413, 306, 498, 438, 1125, 206, 336, 19, + /* 1050 */ 19, 1435, 49, 449, 449, 449, 1368, 315, 81, 81, + /* 1060 */ 576, 304, 413, 1570, 207, 377, 137, 138, 91, 115, + /* 1070 */ 1228, 1228, 1063, 1066, 1053, 1053, 135, 135, 136, 136, + /* 1080 */ 136, 136, 576, 82, 82, 1207, 137, 138, 91, 1340, + /* 1090 */ 1228, 1228, 1063, 1066, 1053, 1053, 135, 135, 136, 136, + /* 1100 */ 136, 136, 1569, 386, 377, 82, 82, 463, 1126, 1552, + /* 1110 */ 333, 463, 335, 131, 128, 451, 1569, 161, 377, 16, + /* 1120 */ 317, 387, 428, 1127, 448, 447, 134, 134, 134, 134, + /* 1130 */ 133, 133, 132, 132, 132, 131, 128, 451, 1128, 576, + /* 1140 */ 1105, 10, 445, 267, 576, 1554, 134, 134, 134, 134, + /* 1150 */ 133, 133, 132, 132, 132, 131, 128, 451, 532, 576, + /* 1160 */ 922, 576, 19, 19, 576, 1573, 576, 147, 147, 7, + /* 1170 */ 923, 1236, 498, 1236, 576, 487, 413, 552, 285, 1224, + /* 1180 */ 969, 215, 82, 82, 66, 66, 1435, 67, 67, 21, + /* 1190 */ 21, 1110, 1110, 495, 334, 297, 413, 53, 53, 297, + /* 1200 */ 137, 138, 91, 119, 1228, 1228, 1063, 1066, 1053, 1053, + /* 1210 */ 135, 135, 136, 136, 136, 136, 413, 1336, 1311, 446, + /* 1220 */ 137, 138, 91, 227, 1228, 1228, 1063, 1066, 1053, 1053, + /* 1230 */ 135, 135, 136, 136, 136, 136, 574, 1224, 936, 936, + /* 1240 */ 137, 126, 91, 141, 1228, 1228, 1063, 1066, 1053, 1053, + /* 1250 */ 135, 135, 136, 136, 136, 136, 533, 429, 472, 346, + /* 1260 */ 134, 134, 134, 134, 133, 133, 132, 132, 132, 131, + /* 1270 */ 128, 451, 576, 457, 233, 343, 1435, 403, 498, 1550, + /* 1280 */ 134, 134, 134, 134, 133, 133, 132, 132, 132, 131, + /* 1290 */ 128, 451, 576, 324, 576, 82, 82, 487, 576, 969, + /* 1300 */ 134, 134, 134, 134, 133, 133, 132, 132, 132, 131, + /* 1310 */ 128, 451, 288, 288, 546, 68, 68, 54, 54, 553, + /* 1320 */ 413, 69, 69, 351, 6, 573, 944, 562, 410, 409, + /* 1330 */ 1435, 943, 450, 545, 260, 259, 258, 576, 158, 576, + /* 1340 */ 413, 222, 1180, 479, 969, 138, 91, 430, 1228, 1228, + /* 1350 */ 1063, 1066, 1053, 1053, 135, 135, 136, 136, 136, 136, + /* 1360 */ 70, 70, 71, 71, 576, 1126, 91, 576, 1228, 1228, + /* 1370 */ 1063, 1066, 1053, 1053, 135, 135, 136, 136, 136, 136, + /* 1380 */ 1127, 166, 850, 851, 852, 1282, 419, 72, 72, 108, + /* 1390 */ 73, 73, 1310, 358, 1180, 1128, 576, 305, 576, 123, + /* 1400 */ 568, 494, 4, 488, 134, 134, 134, 134, 133, 133, + /* 1410 */ 132, 132, 132, 131, 128, 451, 571, 564, 534, 55, + /* 1420 */ 55, 56, 56, 576, 134, 134, 134, 134, 133, 133, + /* 1430 */ 132, 132, 132, 131, 128, 451, 576, 1104, 233, 1104, + /* 1440 */ 452, 1602, 582, 2, 1259, 576, 57, 57, 576, 321, + /* 1450 */ 576, 155, 565, 1435, 485, 353, 576, 356, 1341, 59, + /* 1460 */ 59, 576, 44, 969, 569, 419, 576, 238, 60, 60, + /* 1470 */ 261, 74, 74, 75, 75, 287, 231, 576, 1366, 76, + /* 1480 */ 76, 1040, 420, 184, 20, 20, 576, 121, 121, 77, + /* 1490 */ 77, 97, 218, 288, 288, 122, 125, 452, 577, 452, + /* 1500 */ 143, 143, 1028, 576, 520, 576, 573, 576, 562, 144, + /* 1510 */ 144, 474, 227, 1244, 478, 123, 568, 576, 4, 320, + /* 1520 */ 567, 245, 411, 576, 443, 411, 78, 78, 62, 62, + /* 1530 */ 79, 79, 571, 319, 1028, 1028, 1030, 1031, 35, 418, + /* 1540 */ 63, 63, 576, 290, 411, 9, 80, 80, 1144, 576, + /* 1550 */ 400, 576, 486, 455, 576, 1223, 452, 576, 325, 342, + /* 1560 */ 576, 111, 576, 1188, 242, 64, 64, 473, 565, 576, + /* 1570 */ 23, 576, 170, 170, 171, 171, 576, 87, 87, 328, + /* 1580 */ 65, 65, 542, 83, 83, 146, 146, 541, 123, 568, + /* 1590 */ 341, 4, 84, 84, 168, 168, 576, 1040, 576, 148, + /* 1600 */ 148, 576, 1380, 121, 121, 571, 1021, 576, 266, 576, + /* 1610 */ 424, 122, 576, 452, 577, 452, 576, 553, 1028, 142, + /* 1620 */ 142, 169, 169, 576, 162, 162, 528, 889, 371, 452, + /* 1630 */ 152, 152, 151, 151, 1379, 149, 149, 109, 370, 150, + /* 1640 */ 150, 565, 576, 480, 576, 266, 86, 86, 576, 1092, + /* 1650 */ 1028, 1028, 1030, 1031, 35, 542, 482, 576, 266, 466, + /* 1660 */ 543, 123, 568, 1616, 4, 88, 88, 85, 85, 475, + /* 1670 */ 1040, 52, 52, 222, 901, 900, 121, 121, 571, 1188, + /* 1680 */ 58, 58, 244, 1032, 122, 889, 452, 577, 452, 908, + /* 1690 */ 909, 1028, 300, 347, 504, 111, 263, 361, 165, 111, + /* 1700 */ 111, 1088, 452, 263, 974, 1153, 266, 1092, 986, 987, + /* 1710 */ 942, 939, 125, 125, 565, 1103, 872, 1103, 159, 941, + /* 1720 */ 1309, 125, 1557, 1028, 1028, 1030, 1031, 35, 542, 337, + /* 1730 */ 1530, 205, 1529, 541, 499, 1589, 490, 348, 1376, 352, + /* 1740 */ 355, 1032, 357, 1040, 359, 1324, 1308, 366, 563, 121, + /* 1750 */ 121, 376, 1188, 1389, 1434, 1362, 280, 122, 1374, 452, + /* 1760 */ 577, 452, 167, 1439, 1028, 1289, 1280, 1268, 1267, 1269, + /* 1770 */ 1609, 1359, 312, 313, 314, 397, 12, 237, 224, 1421, + /* 1780 */ 295, 1416, 1409, 1426, 339, 484, 340, 509, 1371, 1612, + /* 1790 */ 1372, 1425, 1244, 404, 301, 228, 1028, 1028, 1030, 1031, + /* 1800 */ 35, 1601, 1192, 454, 345, 1307, 292, 369, 1502, 1501, + /* 1810 */ 270, 396, 396, 395, 277, 393, 1370, 1369, 859, 1549, + /* 1820 */ 186, 123, 568, 235, 4, 1188, 391, 210, 211, 223, + /* 1830 */ 1547, 239, 1241, 327, 422, 96, 220, 195, 571, 180, + /* 1840 */ 188, 326, 468, 469, 190, 191, 502, 192, 193, 566, + /* 1850 */ 247, 109, 1430, 491, 199, 251, 102, 281, 402, 476, + /* 1860 */ 405, 1496, 452, 497, 253, 1422, 13, 1428, 14, 1427, + /* 1870 */ 203, 1507, 241, 500, 565, 354, 407, 92, 95, 1270, + /* 1880 */ 175, 254, 518, 43, 1327, 255, 1326, 1325, 436, 1518, + /* 1890 */ 350, 1318, 104, 229, 893, 1626, 440, 441, 1625, 408, + /* 1900 */ 240, 1296, 268, 1040, 310, 269, 1297, 527, 444, 121, + /* 1910 */ 121, 368, 1295, 1594, 1624, 311, 1394, 122, 1317, 452, + /* 1920 */ 577, 452, 374, 1580, 1028, 1393, 140, 553, 11, 90, + /* 1930 */ 568, 385, 4, 116, 318, 414, 1579, 110, 1483, 537, + /* 1940 */ 320, 567, 1350, 555, 42, 579, 571, 1349, 1198, 383, + /* 1950 */ 276, 390, 216, 389, 278, 279, 1028, 1028, 1030, 1031, + /* 1960 */ 35, 172, 580, 1265, 458, 1260, 415, 416, 185, 156, + /* 1970 */ 452, 1534, 1535, 173, 1533, 1532, 89, 308, 225, 226, + /* 1980 */ 846, 174, 565, 453, 217, 1188, 322, 236, 1102, 154, + /* 1990 */ 1100, 330, 187, 176, 1223, 243, 189, 925, 338, 246, + /* 2000 */ 1116, 194, 177, 425, 178, 427, 98, 196, 99, 100, + /* 2010 */ 101, 1040, 179, 1119, 1115, 248, 249, 121, 121, 163, + /* 2020 */ 24, 250, 349, 1238, 496, 122, 1108, 452, 577, 452, + /* 2030 */ 1192, 454, 1028, 266, 292, 200, 252, 201, 861, 396, + /* 2040 */ 396, 395, 277, 393, 15, 501, 859, 370, 292, 256, + /* 2050 */ 202, 554, 505, 396, 396, 395, 277, 393, 103, 239, + /* 2060 */ 859, 327, 25, 26, 1028, 1028, 1030, 1031, 35, 326, + /* 2070 */ 362, 510, 891, 239, 365, 327, 513, 904, 105, 309, + /* 2080 */ 164, 181, 27, 326, 106, 521, 107, 1185, 1069, 1155, + /* 2090 */ 17, 1154, 230, 1188, 284, 286, 265, 204, 125, 1171, + /* 2100 */ 241, 28, 978, 972, 29, 41, 1175, 1179, 175, 1173, + /* 2110 */ 30, 43, 31, 8, 241, 1178, 32, 1160, 208, 549, + /* 2120 */ 33, 111, 175, 1083, 1070, 43, 1068, 1072, 240, 113, + /* 2130 */ 114, 34, 561, 118, 1124, 271, 1073, 36, 18, 572, + /* 2140 */ 1033, 873, 240, 124, 37, 935, 272, 273, 1617, 183, + /* 2150 */ 153, 394, 1194, 1193, 1256, 1256, 1256, 1256, 1256, 1256, + /* 2160 */ 1256, 1256, 1256, 414, 1256, 1256, 1256, 1256, 320, 567, + /* 2170 */ 1256, 1256, 1256, 1256, 1256, 1256, 1256, 414, 1256, 1256, + /* 2180 */ 1256, 1256, 320, 567, 1256, 1256, 1256, 1256, 1256, 1256, + /* 2190 */ 1256, 1256, 458, 1256, 1256, 1256, 1256, 1256, 1256, 1256, + /* 2200 */ 1256, 1256, 1256, 1256, 1256, 1256, 458, +}; +static const YYCODETYPE yy_lookahead[] = { + /* 0 */ 277, 278, 279, 241, 242, 225, 195, 227, 195, 241, + /* 10 */ 242, 195, 217, 221, 195, 235, 254, 195, 256, 19, + /* 20 */ 225, 298, 254, 195, 256, 206, 213, 214, 206, 218, + /* 30 */ 219, 31, 206, 195, 218, 219, 195, 218, 219, 39, + /* 40 */ 218, 219, 313, 43, 44, 45, 317, 47, 48, 49, + /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 19, + /* 60 */ 241, 242, 195, 241, 242, 195, 255, 241, 242, 277, + /* 70 */ 278, 279, 234, 254, 255, 256, 254, 255, 256, 218, + /* 80 */ 254, 240, 256, 43, 44, 45, 264, 47, 48, 49, + /* 90 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 271, + /* 100 */ 287, 22, 23, 103, 104, 105, 106, 107, 108, 109, + /* 110 */ 110, 111, 112, 113, 114, 114, 47, 48, 49, 50, + /* 120 */ 187, 188, 189, 190, 191, 192, 190, 87, 192, 89, + /* 130 */ 197, 19, 199, 197, 318, 199, 320, 25, 195, 206, + /* 140 */ 299, 271, 206, 103, 104, 105, 106, 107, 108, 109, + /* 150 */ 110, 111, 112, 113, 114, 43, 44, 45, 195, 47, + /* 160 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + /* 170 */ 58, 60, 21, 195, 241, 242, 215, 241, 242, 312, + /* 180 */ 313, 102, 70, 205, 317, 207, 242, 254, 77, 256, + /* 190 */ 254, 122, 256, 55, 56, 57, 58, 59, 254, 88, + /* 200 */ 256, 90, 269, 240, 93, 269, 107, 108, 109, 110, + /* 210 */ 111, 112, 113, 114, 271, 103, 104, 105, 106, 107, + /* 220 */ 108, 109, 110, 111, 112, 113, 114, 313, 117, 118, + /* 230 */ 119, 317, 81, 195, 301, 19, 195, 301, 277, 278, + /* 240 */ 279, 103, 104, 105, 106, 107, 108, 109, 110, 111, + /* 250 */ 112, 113, 114, 55, 56, 57, 58, 146, 195, 43, + /* 260 */ 44, 45, 74, 47, 48, 49, 50, 51, 52, 53, + /* 270 */ 54, 55, 56, 57, 58, 124, 195, 60, 109, 110, + /* 280 */ 111, 112, 113, 114, 68, 195, 103, 104, 105, 106, + /* 290 */ 107, 108, 109, 110, 111, 112, 113, 114, 208, 218, + /* 300 */ 219, 103, 104, 105, 106, 107, 108, 109, 110, 111, + /* 310 */ 112, 113, 114, 162, 233, 24, 128, 129, 130, 103, + /* 320 */ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + /* 330 */ 114, 195, 195, 215, 117, 118, 119, 120, 195, 19, + /* 340 */ 123, 124, 125, 207, 24, 74, 246, 60, 310, 311, + /* 350 */ 133, 60, 311, 82, 22, 218, 219, 257, 195, 19, + /* 360 */ 73, 218, 219, 43, 44, 45, 206, 47, 48, 49, + /* 370 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 22, + /* 380 */ 23, 218, 219, 43, 44, 45, 54, 47, 48, 49, + /* 390 */ 50, 51, 52, 53, 54, 55, 56, 57, 58, 128, + /* 400 */ 82, 241, 242, 195, 117, 118, 119, 289, 60, 118, + /* 410 */ 139, 140, 294, 195, 254, 195, 256, 195, 255, 259, + /* 420 */ 260, 73, 22, 103, 104, 105, 106, 107, 108, 109, + /* 430 */ 110, 111, 112, 113, 114, 206, 218, 219, 218, 219, + /* 440 */ 218, 219, 234, 103, 104, 105, 106, 107, 108, 109, + /* 450 */ 110, 111, 112, 113, 114, 318, 319, 139, 140, 102, + /* 460 */ 60, 318, 319, 221, 19, 117, 118, 119, 23, 195, + /* 470 */ 241, 242, 313, 255, 206, 255, 317, 255, 206, 129, + /* 480 */ 130, 206, 264, 254, 264, 256, 264, 195, 43, 44, + /* 490 */ 45, 151, 47, 48, 49, 50, 51, 52, 53, 54, + /* 500 */ 55, 56, 57, 58, 246, 213, 214, 19, 19, 241, + /* 510 */ 242, 195, 23, 241, 242, 257, 241, 242, 118, 277, + /* 520 */ 278, 279, 254, 29, 256, 60, 254, 33, 256, 254, + /* 530 */ 206, 256, 43, 44, 45, 218, 47, 48, 49, 50, + /* 540 */ 51, 52, 53, 54, 55, 56, 57, 58, 103, 104, + /* 550 */ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + /* 560 */ 66, 19, 218, 60, 120, 241, 242, 123, 124, 125, + /* 570 */ 60, 232, 77, 19, 20, 26, 22, 133, 254, 287, + /* 580 */ 256, 265, 117, 118, 119, 90, 312, 313, 93, 47, + /* 590 */ 36, 317, 103, 104, 105, 106, 107, 108, 109, 110, + /* 600 */ 111, 112, 113, 114, 116, 117, 277, 278, 279, 60, + /* 610 */ 107, 108, 19, 276, 60, 31, 23, 152, 195, 116, + /* 620 */ 117, 118, 119, 39, 121, 276, 72, 117, 118, 119, + /* 630 */ 166, 167, 129, 145, 237, 238, 43, 44, 45, 276, + /* 640 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + /* 650 */ 57, 58, 315, 316, 144, 101, 19, 154, 116, 156, + /* 660 */ 23, 107, 108, 109, 315, 316, 117, 118, 119, 115, + /* 670 */ 60, 117, 118, 119, 132, 200, 122, 60, 315, 316, + /* 680 */ 43, 44, 45, 272, 47, 48, 49, 50, 51, 52, + /* 690 */ 53, 54, 55, 56, 57, 58, 103, 104, 105, 106, + /* 700 */ 107, 108, 109, 110, 111, 112, 113, 114, 154, 155, + /* 710 */ 156, 157, 158, 212, 213, 214, 22, 195, 101, 22, + /* 720 */ 60, 19, 20, 60, 22, 139, 140, 117, 118, 119, + /* 730 */ 22, 251, 195, 253, 117, 118, 195, 183, 36, 122, + /* 740 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + /* 750 */ 113, 114, 195, 195, 60, 218, 219, 60, 195, 284, + /* 760 */ 19, 25, 60, 288, 23, 237, 238, 22, 60, 109, + /* 770 */ 233, 154, 155, 156, 72, 218, 219, 117, 118, 119, + /* 780 */ 117, 118, 119, 116, 43, 44, 45, 265, 47, 48, + /* 790 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + /* 800 */ 183, 243, 25, 101, 19, 60, 265, 144, 23, 107, + /* 810 */ 108, 117, 118, 119, 117, 118, 119, 115, 151, 117, + /* 820 */ 118, 119, 82, 195, 122, 117, 118, 119, 43, 44, + /* 830 */ 45, 195, 47, 48, 49, 50, 51, 52, 53, 54, + /* 840 */ 55, 56, 57, 58, 103, 104, 105, 106, 107, 108, + /* 850 */ 109, 110, 111, 112, 113, 114, 154, 155, 156, 157, + /* 860 */ 158, 121, 117, 118, 119, 307, 101, 309, 195, 22, + /* 870 */ 23, 195, 25, 19, 35, 139, 140, 195, 24, 139, + /* 880 */ 140, 208, 195, 118, 109, 183, 22, 122, 103, 104, + /* 890 */ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + /* 900 */ 304, 305, 77, 230, 127, 232, 67, 195, 19, 195, + /* 910 */ 195, 136, 23, 88, 75, 90, 141, 203, 93, 154, + /* 920 */ 155, 156, 208, 295, 60, 243, 22, 23, 19, 25, + /* 930 */ 218, 219, 43, 44, 45, 100, 47, 48, 49, 50, + /* 940 */ 51, 52, 53, 54, 55, 56, 57, 58, 183, 102, + /* 950 */ 96, 195, 43, 44, 45, 240, 47, 48, 49, 50, + /* 960 */ 51, 52, 53, 54, 55, 56, 57, 58, 114, 134, + /* 970 */ 131, 146, 25, 286, 120, 121, 122, 123, 124, 125, + /* 980 */ 126, 117, 118, 119, 313, 195, 132, 195, 317, 307, + /* 990 */ 195, 309, 103, 104, 105, 106, 107, 108, 109, 110, + /* 1000 */ 111, 112, 113, 114, 195, 195, 102, 195, 195, 195, + /* 1010 */ 218, 219, 103, 104, 105, 106, 107, 108, 109, 110, + /* 1020 */ 111, 112, 113, 114, 77, 233, 195, 60, 218, 219, + /* 1030 */ 218, 219, 218, 219, 23, 195, 25, 90, 243, 159, + /* 1040 */ 93, 161, 19, 233, 195, 233, 23, 233, 16, 218, + /* 1050 */ 219, 195, 243, 212, 213, 214, 262, 263, 218, 219, + /* 1060 */ 195, 271, 19, 307, 233, 309, 43, 44, 45, 160, + /* 1070 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + /* 1080 */ 57, 58, 195, 218, 219, 118, 43, 44, 45, 240, + /* 1090 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + /* 1100 */ 57, 58, 307, 195, 309, 218, 219, 263, 12, 195, + /* 1110 */ 78, 267, 80, 112, 113, 114, 307, 22, 309, 24, + /* 1120 */ 255, 281, 266, 27, 107, 108, 103, 104, 105, 106, + /* 1130 */ 107, 108, 109, 110, 111, 112, 113, 114, 42, 195, + /* 1140 */ 11, 22, 255, 24, 195, 195, 103, 104, 105, 106, + /* 1150 */ 107, 108, 109, 110, 111, 112, 113, 114, 19, 195, + /* 1160 */ 64, 195, 218, 219, 195, 313, 195, 218, 219, 317, + /* 1170 */ 74, 154, 195, 156, 195, 195, 19, 233, 23, 60, + /* 1180 */ 25, 24, 218, 219, 218, 219, 195, 218, 219, 218, + /* 1190 */ 219, 128, 129, 130, 162, 263, 19, 218, 219, 267, + /* 1200 */ 43, 44, 45, 160, 47, 48, 49, 50, 51, 52, + /* 1210 */ 53, 54, 55, 56, 57, 58, 19, 240, 228, 255, + /* 1220 */ 43, 44, 45, 25, 47, 48, 49, 50, 51, 52, + /* 1230 */ 53, 54, 55, 56, 57, 58, 135, 118, 137, 138, + /* 1240 */ 43, 44, 45, 22, 47, 48, 49, 50, 51, 52, + /* 1250 */ 53, 54, 55, 56, 57, 58, 117, 266, 129, 130, + /* 1260 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + /* 1270 */ 113, 114, 195, 195, 119, 295, 195, 206, 195, 195, + /* 1280 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + /* 1290 */ 113, 114, 195, 195, 195, 218, 219, 195, 195, 144, + /* 1300 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + /* 1310 */ 113, 114, 241, 242, 67, 218, 219, 218, 219, 146, + /* 1320 */ 19, 218, 219, 240, 215, 254, 136, 256, 107, 108, + /* 1330 */ 195, 141, 255, 86, 128, 129, 130, 195, 165, 195, + /* 1340 */ 19, 143, 95, 272, 25, 44, 45, 266, 47, 48, + /* 1350 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + /* 1360 */ 218, 219, 218, 219, 195, 12, 45, 195, 47, 48, + /* 1370 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + /* 1380 */ 27, 23, 7, 8, 9, 210, 211, 218, 219, 116, + /* 1390 */ 218, 219, 228, 16, 147, 42, 195, 295, 195, 19, + /* 1400 */ 20, 266, 22, 294, 103, 104, 105, 106, 107, 108, + /* 1410 */ 109, 110, 111, 112, 113, 114, 36, 64, 145, 218, + /* 1420 */ 219, 218, 219, 195, 103, 104, 105, 106, 107, 108, + /* 1430 */ 109, 110, 111, 112, 113, 114, 195, 154, 119, 156, + /* 1440 */ 60, 189, 190, 191, 192, 195, 218, 219, 195, 197, + /* 1450 */ 195, 199, 72, 195, 19, 78, 195, 80, 206, 218, + /* 1460 */ 219, 195, 82, 144, 210, 211, 195, 15, 218, 219, + /* 1470 */ 47, 218, 219, 218, 219, 259, 260, 195, 261, 218, + /* 1480 */ 219, 101, 302, 303, 218, 219, 195, 107, 108, 218, + /* 1490 */ 219, 150, 151, 241, 242, 115, 25, 117, 118, 119, + /* 1500 */ 218, 219, 122, 195, 146, 195, 254, 195, 256, 218, + /* 1510 */ 219, 246, 25, 61, 246, 19, 20, 195, 22, 139, + /* 1520 */ 140, 269, 257, 195, 266, 257, 218, 219, 218, 219, + /* 1530 */ 218, 219, 36, 246, 154, 155, 156, 157, 158, 116, + /* 1540 */ 218, 219, 195, 22, 257, 49, 218, 219, 23, 195, + /* 1550 */ 25, 195, 117, 301, 195, 25, 60, 195, 195, 23, + /* 1560 */ 195, 25, 195, 183, 24, 218, 219, 130, 72, 195, + /* 1570 */ 22, 195, 218, 219, 218, 219, 195, 218, 219, 195, + /* 1580 */ 218, 219, 86, 218, 219, 218, 219, 91, 19, 20, + /* 1590 */ 153, 22, 218, 219, 218, 219, 195, 101, 195, 218, + /* 1600 */ 219, 195, 195, 107, 108, 36, 23, 195, 25, 195, + /* 1610 */ 62, 115, 195, 117, 118, 119, 195, 146, 122, 218, + /* 1620 */ 219, 218, 219, 195, 218, 219, 19, 60, 122, 60, + /* 1630 */ 218, 219, 218, 219, 195, 218, 219, 150, 132, 218, + /* 1640 */ 219, 72, 195, 23, 195, 25, 218, 219, 195, 60, + /* 1650 */ 154, 155, 156, 157, 158, 86, 23, 195, 25, 195, + /* 1660 */ 91, 19, 20, 142, 22, 218, 219, 218, 219, 130, + /* 1670 */ 101, 218, 219, 143, 121, 122, 107, 108, 36, 183, + /* 1680 */ 218, 219, 142, 60, 115, 118, 117, 118, 119, 7, + /* 1690 */ 8, 122, 153, 23, 23, 25, 25, 23, 23, 25, + /* 1700 */ 25, 23, 60, 25, 23, 98, 25, 118, 84, 85, + /* 1710 */ 23, 23, 25, 25, 72, 154, 23, 156, 25, 23, + /* 1720 */ 228, 25, 195, 154, 155, 156, 157, 158, 86, 195, + /* 1730 */ 195, 258, 195, 91, 291, 322, 195, 195, 195, 195, + /* 1740 */ 195, 118, 195, 101, 195, 195, 195, 195, 238, 107, + /* 1750 */ 108, 195, 183, 195, 195, 195, 290, 115, 195, 117, + /* 1760 */ 118, 119, 244, 195, 122, 195, 195, 195, 195, 195, + /* 1770 */ 195, 258, 258, 258, 258, 193, 245, 300, 216, 274, + /* 1780 */ 247, 270, 270, 274, 296, 296, 248, 222, 262, 198, + /* 1790 */ 262, 274, 61, 274, 248, 231, 154, 155, 156, 157, + /* 1800 */ 158, 0, 1, 2, 247, 227, 5, 221, 221, 221, + /* 1810 */ 142, 10, 11, 12, 13, 14, 262, 262, 17, 202, + /* 1820 */ 300, 19, 20, 300, 22, 183, 247, 251, 251, 245, + /* 1830 */ 202, 30, 38, 32, 202, 152, 151, 22, 36, 43, + /* 1840 */ 236, 40, 18, 202, 239, 239, 18, 239, 239, 283, + /* 1850 */ 201, 150, 236, 202, 236, 201, 159, 202, 248, 248, + /* 1860 */ 248, 248, 60, 63, 201, 275, 273, 275, 273, 275, + /* 1870 */ 22, 286, 71, 223, 72, 202, 223, 297, 297, 202, + /* 1880 */ 79, 201, 116, 82, 220, 201, 220, 220, 65, 293, + /* 1890 */ 292, 229, 22, 166, 127, 226, 24, 114, 226, 223, + /* 1900 */ 99, 222, 202, 101, 285, 92, 220, 308, 83, 107, + /* 1910 */ 108, 220, 220, 316, 220, 285, 268, 115, 229, 117, + /* 1920 */ 118, 119, 223, 321, 122, 268, 149, 146, 22, 19, + /* 1930 */ 20, 202, 22, 159, 282, 134, 321, 148, 280, 147, + /* 1940 */ 139, 140, 252, 141, 25, 204, 36, 252, 13, 251, + /* 1950 */ 196, 248, 250, 249, 196, 6, 154, 155, 156, 157, + /* 1960 */ 158, 209, 194, 194, 163, 194, 306, 306, 303, 224, + /* 1970 */ 60, 215, 215, 209, 215, 215, 215, 224, 216, 216, + /* 1980 */ 4, 209, 72, 3, 22, 183, 164, 15, 23, 16, + /* 1990 */ 23, 140, 152, 131, 25, 24, 143, 20, 16, 145, + /* 2000 */ 1, 143, 131, 62, 131, 37, 54, 152, 54, 54, + /* 2010 */ 54, 101, 131, 117, 1, 34, 142, 107, 108, 5, + /* 2020 */ 22, 116, 162, 76, 41, 115, 69, 117, 118, 119, + /* 2030 */ 1, 2, 122, 25, 5, 69, 142, 116, 20, 10, + /* 2040 */ 11, 12, 13, 14, 24, 19, 17, 132, 5, 126, + /* 2050 */ 22, 141, 68, 10, 11, 12, 13, 14, 22, 30, + /* 2060 */ 17, 32, 22, 22, 154, 155, 156, 157, 158, 40, + /* 2070 */ 23, 68, 60, 30, 24, 32, 97, 28, 22, 68, + /* 2080 */ 23, 37, 34, 40, 150, 22, 25, 23, 23, 23, + /* 2090 */ 22, 98, 142, 183, 23, 23, 34, 22, 25, 89, + /* 2100 */ 71, 34, 117, 144, 34, 22, 76, 76, 79, 87, + /* 2110 */ 34, 82, 34, 44, 71, 94, 34, 23, 25, 24, + /* 2120 */ 34, 25, 79, 23, 23, 82, 23, 23, 99, 143, + /* 2130 */ 143, 22, 25, 25, 23, 22, 11, 22, 22, 25, + /* 2140 */ 23, 23, 99, 22, 22, 136, 142, 142, 142, 25, + /* 2150 */ 23, 15, 1, 1, 323, 323, 323, 323, 323, 323, + /* 2160 */ 323, 323, 323, 134, 323, 323, 323, 323, 139, 140, + /* 2170 */ 323, 323, 323, 323, 323, 323, 323, 134, 323, 323, + /* 2180 */ 323, 323, 139, 140, 323, 323, 323, 323, 323, 323, + /* 2190 */ 323, 323, 163, 323, 323, 323, 323, 323, 323, 323, + /* 2200 */ 323, 323, 323, 323, 323, 323, 163, 323, 323, 323, + /* 2210 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + /* 2220 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + /* 2230 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + /* 2240 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + /* 2250 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + /* 2260 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + /* 2270 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + /* 2280 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + /* 2290 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + /* 2300 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + /* 2310 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + /* 2320 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + /* 2330 */ 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, + /* 2340 */ 323, 187, 187, 187, 187, 187, 187, 187, 187, 187, + /* 2350 */ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, + /* 2360 */ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, + /* 2370 */ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, + /* 2380 */ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, + /* 2390 */ 187, 187, 187, 187, +}; +#define YY_SHIFT_COUNT (582) +#define YY_SHIFT_MIN (0) +#define YY_SHIFT_MAX (2152) +static const unsigned short int yy_shift_ofst[] = { + /* 0 */ 2029, 1801, 2043, 1380, 1380, 318, 271, 1496, 1569, 1642, + /* 10 */ 702, 702, 702, 740, 318, 318, 318, 318, 318, 0, + /* 20 */ 0, 216, 1177, 702, 702, 702, 702, 702, 702, 702, + /* 30 */ 702, 702, 702, 702, 702, 702, 702, 702, 503, 503, + /* 40 */ 111, 111, 217, 287, 348, 610, 610, 736, 736, 736, + /* 50 */ 736, 40, 112, 320, 340, 445, 489, 593, 637, 741, + /* 60 */ 785, 889, 909, 1023, 1043, 1157, 1177, 1177, 1177, 1177, + /* 70 */ 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, + /* 80 */ 1177, 1177, 1177, 1177, 1197, 1177, 1301, 1321, 1321, 554, + /* 90 */ 1802, 1910, 702, 702, 702, 702, 702, 702, 702, 702, + /* 100 */ 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, + /* 110 */ 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, + /* 120 */ 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, + /* 130 */ 702, 702, 702, 702, 702, 702, 702, 702, 702, 702, + /* 140 */ 702, 702, 138, 198, 198, 198, 198, 198, 198, 198, + /* 150 */ 183, 99, 169, 549, 610, 151, 542, 610, 610, 1017, + /* 160 */ 1017, 610, 1001, 350, 464, 464, 464, 586, 1, 1, + /* 170 */ 2207, 2207, 854, 854, 854, 465, 694, 694, 694, 694, + /* 180 */ 1096, 1096, 825, 549, 847, 904, 610, 610, 610, 610, + /* 190 */ 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, + /* 200 */ 610, 610, 610, 610, 610, 488, 947, 947, 610, 1129, + /* 210 */ 495, 495, 1139, 1139, 967, 967, 1173, 2207, 2207, 2207, + /* 220 */ 2207, 2207, 2207, 2207, 617, 765, 765, 697, 444, 708, + /* 230 */ 660, 745, 510, 663, 864, 610, 610, 610, 610, 610, + /* 240 */ 610, 610, 610, 610, 610, 188, 610, 610, 610, 610, + /* 250 */ 610, 610, 610, 610, 610, 610, 610, 610, 839, 839, + /* 260 */ 839, 610, 610, 610, 1155, 610, 610, 610, 1119, 1247, + /* 270 */ 610, 1353, 610, 610, 610, 610, 610, 610, 610, 610, + /* 280 */ 1063, 494, 1101, 291, 291, 291, 291, 1319, 1101, 1101, + /* 290 */ 775, 1221, 1375, 1452, 667, 1341, 1198, 1341, 1435, 1487, + /* 300 */ 667, 667, 1487, 667, 1198, 1435, 777, 1011, 1423, 584, + /* 310 */ 584, 584, 1273, 1273, 1273, 1273, 1471, 1471, 880, 1530, + /* 320 */ 1190, 1095, 1731, 1731, 1668, 1668, 1794, 1794, 1668, 1683, + /* 330 */ 1685, 1815, 1796, 1824, 1824, 1824, 1824, 1668, 1828, 1701, + /* 340 */ 1685, 1685, 1701, 1815, 1796, 1701, 1796, 1701, 1668, 1828, + /* 350 */ 1697, 1800, 1668, 1828, 1848, 1668, 1828, 1668, 1828, 1848, + /* 360 */ 1766, 1766, 1766, 1823, 1870, 1870, 1848, 1766, 1767, 1766, + /* 370 */ 1823, 1766, 1766, 1727, 1872, 1783, 1783, 1848, 1668, 1813, + /* 380 */ 1813, 1825, 1825, 1777, 1781, 1906, 1668, 1774, 1777, 1789, + /* 390 */ 1792, 1701, 1919, 1935, 1935, 1949, 1949, 1949, 2207, 2207, + /* 400 */ 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, + /* 410 */ 2207, 2207, 2207, 69, 1032, 79, 357, 1377, 1206, 400, + /* 420 */ 1525, 835, 332, 1540, 1437, 1539, 1536, 1548, 1583, 1620, + /* 430 */ 1633, 1670, 1671, 1674, 1567, 1553, 1682, 1506, 1675, 1358, + /* 440 */ 1607, 1589, 1678, 1681, 1624, 1687, 1688, 1283, 1561, 1693, + /* 450 */ 1696, 1623, 1521, 1976, 1980, 1962, 1822, 1972, 1973, 1965, + /* 460 */ 1967, 1851, 1840, 1862, 1969, 1969, 1971, 1853, 1977, 1854, + /* 470 */ 1982, 1999, 1858, 1871, 1969, 1873, 1941, 1968, 1969, 1855, + /* 480 */ 1952, 1954, 1955, 1956, 1881, 1896, 1981, 1874, 2013, 2014, + /* 490 */ 1998, 1905, 1860, 1957, 2008, 1966, 1947, 1983, 1894, 1921, + /* 500 */ 2020, 2018, 2026, 1915, 1923, 2028, 1984, 2036, 2040, 2047, + /* 510 */ 2041, 2003, 2012, 2050, 1979, 2049, 2056, 2011, 2044, 2057, + /* 520 */ 2048, 1934, 2063, 2064, 2065, 2061, 2066, 2068, 1993, 1950, + /* 530 */ 2071, 2072, 1985, 2062, 2075, 1959, 2073, 2067, 2070, 2076, + /* 540 */ 2078, 2010, 2030, 2022, 2069, 2031, 2021, 2082, 2094, 2083, + /* 550 */ 2095, 2093, 2096, 2086, 1986, 1987, 2100, 2073, 2101, 2103, + /* 560 */ 2104, 2109, 2107, 2108, 2111, 2113, 2125, 2115, 2116, 2117, + /* 570 */ 2118, 2121, 2122, 2114, 2009, 2004, 2005, 2006, 2124, 2127, + /* 580 */ 2136, 2151, 2152, +}; +#define YY_REDUCE_COUNT (412) +#define YY_REDUCE_MIN (-277) +#define YY_REDUCE_MAX (1772) +static const short yy_reduce_ofst[] = { + /* 0 */ -67, 1252, -64, -178, -181, 160, 1071, 143, -184, 137, + /* 10 */ 218, 220, 222, -174, 229, 268, 272, 275, 324, -208, + /* 20 */ 242, -277, -39, 81, 537, 792, 810, 812, -189, 814, + /* 30 */ 831, 163, 865, 944, 887, 840, 964, 1077, -187, 292, + /* 40 */ -133, 274, 673, 558, 682, 795, 809, -238, -232, -238, + /* 50 */ -232, 329, 329, 329, 329, 329, 329, 329, 329, 329, + /* 60 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + /* 70 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + /* 80 */ 329, 329, 329, 329, 329, 329, 329, 329, 329, 557, + /* 90 */ 712, 949, 966, 969, 971, 979, 1097, 1099, 1103, 1142, + /* 100 */ 1144, 1169, 1172, 1201, 1203, 1228, 1241, 1250, 1253, 1255, + /* 110 */ 1261, 1266, 1271, 1282, 1291, 1308, 1310, 1312, 1322, 1328, + /* 120 */ 1347, 1354, 1356, 1359, 1362, 1365, 1367, 1374, 1376, 1381, + /* 130 */ 1401, 1403, 1406, 1412, 1414, 1417, 1421, 1428, 1447, 1449, + /* 140 */ 1453, 1462, 329, 329, 329, 329, 329, 329, 329, 329, + /* 150 */ 329, 329, 329, -22, -159, 475, -220, 756, 38, 501, + /* 160 */ 841, 714, 329, 118, 337, 349, 363, -56, 329, 329, + /* 170 */ 329, 329, -205, -205, -205, 687, -172, -130, -57, 790, + /* 180 */ 397, 528, -271, 136, 596, 596, 90, 316, 522, 541, + /* 190 */ -37, 715, 849, 977, 628, 856, 980, 991, 1081, 1102, + /* 200 */ 1135, 1083, -162, 208, 1258, 794, -86, 159, 41, 1109, + /* 210 */ 671, 852, 844, 932, 1175, 1254, 480, 1180, 100, 258, + /* 220 */ 1265, 1268, 1216, 1287, -139, 317, 344, 63, 339, 423, + /* 230 */ 563, 636, 676, 813, 908, 914, 950, 1078, 1084, 1098, + /* 240 */ 1363, 1384, 1407, 1439, 1464, 411, 1527, 1534, 1535, 1537, + /* 250 */ 1541, 1542, 1543, 1544, 1545, 1547, 1549, 1550, 990, 1164, + /* 260 */ 1492, 1551, 1552, 1556, 1217, 1558, 1559, 1560, 1473, 1413, + /* 270 */ 1563, 1510, 1568, 563, 1570, 1571, 1572, 1573, 1574, 1575, + /* 280 */ 1443, 1466, 1518, 1513, 1514, 1515, 1516, 1217, 1518, 1518, + /* 290 */ 1531, 1562, 1582, 1477, 1505, 1511, 1533, 1512, 1488, 1538, + /* 300 */ 1509, 1517, 1546, 1519, 1557, 1489, 1565, 1564, 1578, 1586, + /* 310 */ 1587, 1588, 1526, 1528, 1554, 1555, 1576, 1577, 1566, 1579, + /* 320 */ 1584, 1591, 1520, 1523, 1617, 1628, 1580, 1581, 1632, 1585, + /* 330 */ 1590, 1593, 1604, 1605, 1606, 1608, 1609, 1641, 1649, 1610, + /* 340 */ 1592, 1594, 1611, 1595, 1616, 1612, 1618, 1613, 1651, 1654, + /* 350 */ 1596, 1598, 1655, 1663, 1650, 1673, 1680, 1677, 1684, 1653, + /* 360 */ 1664, 1666, 1667, 1662, 1669, 1672, 1676, 1686, 1679, 1691, + /* 370 */ 1689, 1692, 1694, 1597, 1599, 1619, 1630, 1699, 1700, 1602, + /* 380 */ 1615, 1648, 1657, 1690, 1698, 1658, 1729, 1652, 1695, 1702, + /* 390 */ 1704, 1703, 1741, 1754, 1758, 1768, 1769, 1771, 1660, 1661, + /* 400 */ 1665, 1752, 1756, 1757, 1759, 1760, 1764, 1745, 1753, 1762, + /* 410 */ 1763, 1761, 1772, +}; +static const YYACTIONTYPE yy_default[] = { + /* 0 */ 1663, 1663, 1663, 1491, 1254, 1367, 1254, 1254, 1254, 1254, + /* 10 */ 1491, 1491, 1491, 1254, 1254, 1254, 1254, 1254, 1254, 1397, + /* 20 */ 1397, 1544, 1287, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 30 */ 1254, 1254, 1254, 1254, 1254, 1490, 1254, 1254, 1254, 1254, + /* 40 */ 1578, 1578, 1254, 1254, 1254, 1254, 1254, 1563, 1562, 1254, + /* 50 */ 1254, 1254, 1406, 1254, 1413, 1254, 1254, 1254, 1254, 1254, + /* 60 */ 1492, 1493, 1254, 1254, 1254, 1254, 1543, 1545, 1508, 1420, + /* 70 */ 1419, 1418, 1417, 1526, 1385, 1411, 1404, 1408, 1487, 1488, + /* 80 */ 1486, 1641, 1493, 1492, 1254, 1407, 1455, 1471, 1454, 1254, + /* 90 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 100 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 110 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 120 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 130 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 140 */ 1254, 1254, 1463, 1470, 1469, 1468, 1477, 1467, 1464, 1457, + /* 150 */ 1456, 1458, 1459, 1278, 1254, 1275, 1329, 1254, 1254, 1254, + /* 160 */ 1254, 1254, 1460, 1287, 1448, 1447, 1446, 1254, 1474, 1461, + /* 170 */ 1473, 1472, 1551, 1615, 1614, 1509, 1254, 1254, 1254, 1254, + /* 180 */ 1254, 1254, 1578, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 190 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 200 */ 1254, 1254, 1254, 1254, 1254, 1387, 1578, 1578, 1254, 1287, + /* 210 */ 1578, 1578, 1388, 1388, 1283, 1283, 1391, 1558, 1358, 1358, + /* 220 */ 1358, 1358, 1367, 1358, 1254, 1254, 1254, 1254, 1254, 1254, + /* 230 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1548, + /* 240 */ 1546, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 250 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 260 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1363, 1254, + /* 270 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1608, + /* 280 */ 1254, 1521, 1343, 1363, 1363, 1363, 1363, 1365, 1344, 1342, + /* 290 */ 1357, 1288, 1261, 1655, 1423, 1412, 1364, 1412, 1652, 1410, + /* 300 */ 1423, 1423, 1410, 1423, 1364, 1652, 1304, 1630, 1299, 1397, + /* 310 */ 1397, 1397, 1387, 1387, 1387, 1387, 1391, 1391, 1489, 1364, + /* 320 */ 1357, 1254, 1655, 1655, 1373, 1373, 1654, 1654, 1373, 1509, + /* 330 */ 1638, 1432, 1332, 1338, 1338, 1338, 1338, 1373, 1272, 1410, + /* 340 */ 1638, 1638, 1410, 1432, 1332, 1410, 1332, 1410, 1373, 1272, + /* 350 */ 1525, 1649, 1373, 1272, 1499, 1373, 1272, 1373, 1272, 1499, + /* 360 */ 1330, 1330, 1330, 1319, 1254, 1254, 1499, 1330, 1304, 1330, + /* 370 */ 1319, 1330, 1330, 1596, 1254, 1503, 1503, 1499, 1373, 1588, + /* 380 */ 1588, 1400, 1400, 1405, 1391, 1494, 1373, 1254, 1405, 1403, + /* 390 */ 1401, 1410, 1322, 1611, 1611, 1607, 1607, 1607, 1660, 1660, + /* 400 */ 1558, 1623, 1287, 1287, 1287, 1287, 1623, 1306, 1306, 1288, + /* 410 */ 1288, 1287, 1623, 1254, 1254, 1254, 1254, 1254, 1254, 1618, + /* 420 */ 1254, 1553, 1510, 1377, 1254, 1254, 1254, 1254, 1254, 1254, + /* 430 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 440 */ 1564, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 450 */ 1254, 1254, 1437, 1254, 1257, 1555, 1254, 1254, 1254, 1254, + /* 460 */ 1254, 1254, 1254, 1254, 1414, 1415, 1378, 1254, 1254, 1254, + /* 470 */ 1254, 1254, 1254, 1254, 1429, 1254, 1254, 1254, 1424, 1254, + /* 480 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1651, 1254, 1254, + /* 490 */ 1254, 1254, 1254, 1254, 1524, 1523, 1254, 1254, 1375, 1254, + /* 500 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 510 */ 1254, 1254, 1302, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 520 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 530 */ 1254, 1254, 1254, 1254, 1254, 1254, 1402, 1254, 1254, 1254, + /* 540 */ 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 550 */ 1254, 1593, 1392, 1254, 1254, 1254, 1254, 1642, 1254, 1254, + /* 560 */ 1254, 1254, 1352, 1254, 1254, 1254, 1254, 1254, 1254, 1254, + /* 570 */ 1254, 1254, 1254, 1634, 1346, 1438, 1254, 1441, 1276, 1254, + /* 580 */ 1266, 1254, 1254, +}; +/********** End of lemon-generated parsing tables *****************************/ + +/* The next table maps tokens (terminal symbols) into fallback tokens. +** If a construct like the following: +** +** %fallback ID X Y Z. +** +** appears in the grammar, then ID becomes a fallback token for X, Y, +** and Z. Whenever one of the tokens X, Y, or Z is input to the parser +** but it does not parse, the type of the token is changed to ID and +** the parse is retried before an error is thrown. +** +** This feature can be used, for example, to cause some keywords in a language +** to revert to identifiers if they keyword does not apply in the context where +** it appears. +*/ +#ifdef YYFALLBACK +static const YYCODETYPE yyFallback[] = { + 0, /* $ => nothing */ + 0, /* SEMI => nothing */ + 60, /* EXPLAIN => ID */ + 60, /* QUERY => ID */ + 60, /* PLAN => ID */ + 60, /* BEGIN => ID */ + 0, /* TRANSACTION => nothing */ + 60, /* DEFERRED => ID */ + 60, /* IMMEDIATE => ID */ + 60, /* EXCLUSIVE => ID */ + 0, /* COMMIT => nothing */ + 60, /* END => ID */ + 60, /* ROLLBACK => ID */ + 60, /* SAVEPOINT => ID */ + 60, /* RELEASE => ID */ + 0, /* TO => nothing */ + 0, /* TABLE => nothing */ + 0, /* CREATE => nothing */ + 60, /* IF => ID */ + 0, /* NOT => nothing */ + 0, /* EXISTS => nothing */ + 60, /* TEMP => ID */ + 0, /* LP => nothing */ + 0, /* RP => nothing */ + 0, /* AS => nothing */ + 0, /* COMMA => nothing */ + 60, /* WITHOUT => ID */ + 60, /* ABORT => ID */ + 60, /* ACTION => ID */ + 60, /* AFTER => ID */ + 60, /* ANALYZE => ID */ + 60, /* ASC => ID */ + 60, /* ATTACH => ID */ + 60, /* BEFORE => ID */ + 60, /* BY => ID */ + 60, /* CASCADE => ID */ + 60, /* CAST => ID */ + 60, /* CONFLICT => ID */ + 60, /* DATABASE => ID */ + 60, /* DESC => ID */ + 60, /* DETACH => ID */ + 60, /* EACH => ID */ + 60, /* FAIL => ID */ + 0, /* OR => nothing */ + 0, /* AND => nothing */ + 0, /* IS => nothing */ + 0, /* ISNOT => nothing */ + 60, /* MATCH => ID */ + 60, /* LIKE_KW => ID */ + 0, /* BETWEEN => nothing */ + 0, /* IN => nothing */ + 0, /* ISNULL => nothing */ + 0, /* NOTNULL => nothing */ + 0, /* NE => nothing */ + 0, /* EQ => nothing */ + 0, /* GT => nothing */ + 0, /* LE => nothing */ + 0, /* LT => nothing */ + 0, /* GE => nothing */ + 0, /* ESCAPE => nothing */ + 0, /* ID => nothing */ + 60, /* COLUMNKW => ID */ + 60, /* DO => ID */ + 60, /* FOR => ID */ + 60, /* IGNORE => ID */ + 60, /* INITIALLY => ID */ + 60, /* INSTEAD => ID */ + 60, /* NO => ID */ + 60, /* KEY => ID */ + 60, /* OF => ID */ + 60, /* OFFSET => ID */ + 60, /* PRAGMA => ID */ + 60, /* RAISE => ID */ + 60, /* RECURSIVE => ID */ + 60, /* REPLACE => ID */ + 60, /* RESTRICT => ID */ + 60, /* ROW => ID */ + 60, /* ROWS => ID */ + 60, /* TRIGGER => ID */ + 60, /* VACUUM => ID */ + 60, /* VIEW => ID */ + 60, /* VIRTUAL => ID */ + 60, /* WITH => ID */ + 60, /* NULLS => ID */ + 60, /* FIRST => ID */ + 60, /* LAST => ID */ + 60, /* CURRENT => ID */ + 60, /* FOLLOWING => ID */ + 60, /* PARTITION => ID */ + 60, /* PRECEDING => ID */ + 60, /* RANGE => ID */ + 60, /* UNBOUNDED => ID */ + 60, /* EXCLUDE => ID */ + 60, /* GROUPS => ID */ + 60, /* OTHERS => ID */ + 60, /* TIES => ID */ + 60, /* GENERATED => ID */ + 60, /* ALWAYS => ID */ + 60, /* MATERIALIZED => ID */ + 60, /* REINDEX => ID */ + 60, /* RENAME => ID */ + 60, /* CTIME_KW => ID */ + 0, /* ANY => nothing */ + 0, /* BITAND => nothing */ + 0, /* BITOR => nothing */ + 0, /* LSHIFT => nothing */ + 0, /* RSHIFT => nothing */ + 0, /* PLUS => nothing */ + 0, /* MINUS => nothing */ + 0, /* STAR => nothing */ + 0, /* SLASH => nothing */ + 0, /* REM => nothing */ + 0, /* CONCAT => nothing */ + 0, /* PTR => nothing */ + 0, /* COLLATE => nothing */ + 0, /* BITNOT => nothing */ + 0, /* ON => nothing */ + 0, /* INDEXED => nothing */ + 0, /* STRING => nothing */ + 0, /* JOIN_KW => nothing */ + 0, /* CONSTRAINT => nothing */ + 0, /* DEFAULT => nothing */ + 0, /* NULL => nothing */ + 0, /* PRIMARY => nothing */ + 0, /* UNIQUE => nothing */ + 0, /* CHECK => nothing */ + 0, /* REFERENCES => nothing */ + 0, /* AUTOINCR => nothing */ + 0, /* INSERT => nothing */ + 0, /* DELETE => nothing */ + 0, /* UPDATE => nothing */ + 0, /* SET => nothing */ + 0, /* DEFERRABLE => nothing */ + 0, /* FOREIGN => nothing */ + 0, /* DROP => nothing */ + 0, /* UNION => nothing */ + 0, /* ALL => nothing */ + 0, /* EXCEPT => nothing */ + 0, /* INTERSECT => nothing */ + 0, /* SELECT => nothing */ + 0, /* VALUES => nothing */ + 0, /* DISTINCT => nothing */ + 0, /* DOT => nothing */ + 0, /* FROM => nothing */ + 0, /* JOIN => nothing */ + 0, /* USING => nothing */ + 0, /* ORDER => nothing */ + 0, /* GROUP => nothing */ + 0, /* HAVING => nothing */ + 0, /* LIMIT => nothing */ + 0, /* WHERE => nothing */ + 0, /* RETURNING => nothing */ + 0, /* INTO => nothing */ + 0, /* NOTHING => nothing */ + 0, /* FLOAT => nothing */ + 0, /* BLOB => nothing */ + 0, /* INTEGER => nothing */ + 0, /* VARIABLE => nothing */ + 0, /* CASE => nothing */ + 0, /* WHEN => nothing */ + 0, /* THEN => nothing */ + 0, /* ELSE => nothing */ + 0, /* INDEX => nothing */ + 0, /* ALTER => nothing */ + 0, /* ADD => nothing */ + 0, /* WINDOW => nothing */ + 0, /* OVER => nothing */ + 0, /* FILTER => nothing */ + 0, /* COLUMN => nothing */ + 0, /* AGG_FUNCTION => nothing */ + 0, /* AGG_COLUMN => nothing */ + 0, /* TRUEFALSE => nothing */ + 0, /* FUNCTION => nothing */ + 0, /* UPLUS => nothing */ + 0, /* UMINUS => nothing */ + 0, /* TRUTH => nothing */ + 0, /* REGISTER => nothing */ + 0, /* VECTOR => nothing */ + 0, /* SELECT_COLUMN => nothing */ + 0, /* IF_NULL_ROW => nothing */ + 0, /* ASTERISK => nothing */ + 0, /* SPAN => nothing */ + 0, /* ERROR => nothing */ + 0, /* QNUMBER => nothing */ + 0, /* SPACE => nothing */ + 0, /* COMMENT => nothing */ + 0, /* ILLEGAL => nothing */ +}; +#endif /* YYFALLBACK */ + +/* The following structure represents a single element of the +** parser's stack. Information stored includes: +** +** + The state number for the parser at this level of the stack. +** +** + The value of the token stored at this level of the stack. +** (In other words, the "major" token.) +** +** + The semantic value stored at this level of the stack. This is +** the information used by the action routines in the grammar. +** It is sometimes called the "minor" token. +** +** After the "shift" half of a SHIFTREDUCE action, the stateno field +** actually contains the reduce action for the second half of the +** SHIFTREDUCE. +*/ +struct yyStackEntry { + YYACTIONTYPE stateno; /* The state-number, or reduce action in SHIFTREDUCE */ + YYCODETYPE major; /* The major token value. This is the code + ** number for the token at this stack level */ + YYMINORTYPE minor; /* The user-supplied minor token value. This + ** is the value of the token */ +}; +typedef struct yyStackEntry yyStackEntry; + +/* The state of the parser is completely contained in an instance of +** the following structure */ +struct yyParser { + yyStackEntry *yytos; /* Pointer to top element of the stack */ +#ifdef YYTRACKMAXSTACKDEPTH + int yyhwm; /* High-water mark of the stack */ +#endif +#ifndef YYNOERRORRECOVERY + int yyerrcnt; /* Shifts left before out of the error */ +#endif + sqlite3ParserARG_SDECL /* A place to hold %extra_argument */ + sqlite3ParserCTX_SDECL /* A place to hold %extra_context */ + yyStackEntry *yystackEnd; /* Last entry in the stack */ + yyStackEntry *yystack; /* The parser stack */ + yyStackEntry yystk0[YYSTACKDEPTH]; /* Initial stack space */ +}; +typedef struct yyParser yyParser; + +/* #include */ +#ifndef NDEBUG +/* #include */ +static FILE *yyTraceFILE = 0; +static char *yyTracePrompt = 0; +#endif /* NDEBUG */ + +#ifndef NDEBUG +/* +** Turn parser tracing on by giving a stream to which to write the trace +** and a prompt to preface each trace message. Tracing is turned off +** by making either argument NULL +** +** Inputs: +**
      +**
    • A FILE* to which trace output should be written. +** If NULL, then tracing is turned off. +**
    • A prefix string written at the beginning of every +** line of trace output. If NULL, then tracing is +** turned off. +**
    +** +** Outputs: +** None. +*/ +SQLITE_PRIVATE void sqlite3ParserTrace(FILE *TraceFILE, char *zTracePrompt){ + yyTraceFILE = TraceFILE; + yyTracePrompt = zTracePrompt; + if( yyTraceFILE==0 ) yyTracePrompt = 0; + else if( yyTracePrompt==0 ) yyTraceFILE = 0; +} +#endif /* NDEBUG */ + +#if defined(YYCOVERAGE) || !defined(NDEBUG) +/* For tracing shifts, the names of all terminals and nonterminals +** are required. The following table supplies these names */ +static const char *const yyTokenName[] = { + /* 0 */ "$", + /* 1 */ "SEMI", + /* 2 */ "EXPLAIN", + /* 3 */ "QUERY", + /* 4 */ "PLAN", + /* 5 */ "BEGIN", + /* 6 */ "TRANSACTION", + /* 7 */ "DEFERRED", + /* 8 */ "IMMEDIATE", + /* 9 */ "EXCLUSIVE", + /* 10 */ "COMMIT", + /* 11 */ "END", + /* 12 */ "ROLLBACK", + /* 13 */ "SAVEPOINT", + /* 14 */ "RELEASE", + /* 15 */ "TO", + /* 16 */ "TABLE", + /* 17 */ "CREATE", + /* 18 */ "IF", + /* 19 */ "NOT", + /* 20 */ "EXISTS", + /* 21 */ "TEMP", + /* 22 */ "LP", + /* 23 */ "RP", + /* 24 */ "AS", + /* 25 */ "COMMA", + /* 26 */ "WITHOUT", + /* 27 */ "ABORT", + /* 28 */ "ACTION", + /* 29 */ "AFTER", + /* 30 */ "ANALYZE", + /* 31 */ "ASC", + /* 32 */ "ATTACH", + /* 33 */ "BEFORE", + /* 34 */ "BY", + /* 35 */ "CASCADE", + /* 36 */ "CAST", + /* 37 */ "CONFLICT", + /* 38 */ "DATABASE", + /* 39 */ "DESC", + /* 40 */ "DETACH", + /* 41 */ "EACH", + /* 42 */ "FAIL", + /* 43 */ "OR", + /* 44 */ "AND", + /* 45 */ "IS", + /* 46 */ "ISNOT", + /* 47 */ "MATCH", + /* 48 */ "LIKE_KW", + /* 49 */ "BETWEEN", + /* 50 */ "IN", + /* 51 */ "ISNULL", + /* 52 */ "NOTNULL", + /* 53 */ "NE", + /* 54 */ "EQ", + /* 55 */ "GT", + /* 56 */ "LE", + /* 57 */ "LT", + /* 58 */ "GE", + /* 59 */ "ESCAPE", + /* 60 */ "ID", + /* 61 */ "COLUMNKW", + /* 62 */ "DO", + /* 63 */ "FOR", + /* 64 */ "IGNORE", + /* 65 */ "INITIALLY", + /* 66 */ "INSTEAD", + /* 67 */ "NO", + /* 68 */ "KEY", + /* 69 */ "OF", + /* 70 */ "OFFSET", + /* 71 */ "PRAGMA", + /* 72 */ "RAISE", + /* 73 */ "RECURSIVE", + /* 74 */ "REPLACE", + /* 75 */ "RESTRICT", + /* 76 */ "ROW", + /* 77 */ "ROWS", + /* 78 */ "TRIGGER", + /* 79 */ "VACUUM", + /* 80 */ "VIEW", + /* 81 */ "VIRTUAL", + /* 82 */ "WITH", + /* 83 */ "NULLS", + /* 84 */ "FIRST", + /* 85 */ "LAST", + /* 86 */ "CURRENT", + /* 87 */ "FOLLOWING", + /* 88 */ "PARTITION", + /* 89 */ "PRECEDING", + /* 90 */ "RANGE", + /* 91 */ "UNBOUNDED", + /* 92 */ "EXCLUDE", + /* 93 */ "GROUPS", + /* 94 */ "OTHERS", + /* 95 */ "TIES", + /* 96 */ "GENERATED", + /* 97 */ "ALWAYS", + /* 98 */ "MATERIALIZED", + /* 99 */ "REINDEX", + /* 100 */ "RENAME", + /* 101 */ "CTIME_KW", + /* 102 */ "ANY", + /* 103 */ "BITAND", + /* 104 */ "BITOR", + /* 105 */ "LSHIFT", + /* 106 */ "RSHIFT", + /* 107 */ "PLUS", + /* 108 */ "MINUS", + /* 109 */ "STAR", + /* 110 */ "SLASH", + /* 111 */ "REM", + /* 112 */ "CONCAT", + /* 113 */ "PTR", + /* 114 */ "COLLATE", + /* 115 */ "BITNOT", + /* 116 */ "ON", + /* 117 */ "INDEXED", + /* 118 */ "STRING", + /* 119 */ "JOIN_KW", + /* 120 */ "CONSTRAINT", + /* 121 */ "DEFAULT", + /* 122 */ "NULL", + /* 123 */ "PRIMARY", + /* 124 */ "UNIQUE", + /* 125 */ "CHECK", + /* 126 */ "REFERENCES", + /* 127 */ "AUTOINCR", + /* 128 */ "INSERT", + /* 129 */ "DELETE", + /* 130 */ "UPDATE", + /* 131 */ "SET", + /* 132 */ "DEFERRABLE", + /* 133 */ "FOREIGN", + /* 134 */ "DROP", + /* 135 */ "UNION", + /* 136 */ "ALL", + /* 137 */ "EXCEPT", + /* 138 */ "INTERSECT", + /* 139 */ "SELECT", + /* 140 */ "VALUES", + /* 141 */ "DISTINCT", + /* 142 */ "DOT", + /* 143 */ "FROM", + /* 144 */ "JOIN", + /* 145 */ "USING", + /* 146 */ "ORDER", + /* 147 */ "GROUP", + /* 148 */ "HAVING", + /* 149 */ "LIMIT", + /* 150 */ "WHERE", + /* 151 */ "RETURNING", + /* 152 */ "INTO", + /* 153 */ "NOTHING", + /* 154 */ "FLOAT", + /* 155 */ "BLOB", + /* 156 */ "INTEGER", + /* 157 */ "VARIABLE", + /* 158 */ "CASE", + /* 159 */ "WHEN", + /* 160 */ "THEN", + /* 161 */ "ELSE", + /* 162 */ "INDEX", + /* 163 */ "ALTER", + /* 164 */ "ADD", + /* 165 */ "WINDOW", + /* 166 */ "OVER", + /* 167 */ "FILTER", + /* 168 */ "COLUMN", + /* 169 */ "AGG_FUNCTION", + /* 170 */ "AGG_COLUMN", + /* 171 */ "TRUEFALSE", + /* 172 */ "FUNCTION", + /* 173 */ "UPLUS", + /* 174 */ "UMINUS", + /* 175 */ "TRUTH", + /* 176 */ "REGISTER", + /* 177 */ "VECTOR", + /* 178 */ "SELECT_COLUMN", + /* 179 */ "IF_NULL_ROW", + /* 180 */ "ASTERISK", + /* 181 */ "SPAN", + /* 182 */ "ERROR", + /* 183 */ "QNUMBER", + /* 184 */ "SPACE", + /* 185 */ "COMMENT", + /* 186 */ "ILLEGAL", + /* 187 */ "input", + /* 188 */ "cmdlist", + /* 189 */ "ecmd", + /* 190 */ "cmdx", + /* 191 */ "explain", + /* 192 */ "cmd", + /* 193 */ "transtype", + /* 194 */ "trans_opt", + /* 195 */ "nm", + /* 196 */ "savepoint_opt", + /* 197 */ "create_table", + /* 198 */ "create_table_args", + /* 199 */ "createkw", + /* 200 */ "temp", + /* 201 */ "ifnotexists", + /* 202 */ "dbnm", + /* 203 */ "columnlist", + /* 204 */ "conslist_opt", + /* 205 */ "table_option_set", + /* 206 */ "select", + /* 207 */ "table_option", + /* 208 */ "columnname", + /* 209 */ "carglist", + /* 210 */ "typetoken", + /* 211 */ "typename", + /* 212 */ "signed", + /* 213 */ "plus_num", + /* 214 */ "minus_num", + /* 215 */ "scanpt", + /* 216 */ "scantok", + /* 217 */ "ccons", + /* 218 */ "term", + /* 219 */ "expr", + /* 220 */ "onconf", + /* 221 */ "sortorder", + /* 222 */ "autoinc", + /* 223 */ "eidlist_opt", + /* 224 */ "refargs", + /* 225 */ "defer_subclause", + /* 226 */ "generated", + /* 227 */ "refarg", + /* 228 */ "refact", + /* 229 */ "init_deferred_pred_opt", + /* 230 */ "conslist", + /* 231 */ "tconscomma", + /* 232 */ "tcons", + /* 233 */ "sortlist", + /* 234 */ "eidlist", + /* 235 */ "defer_subclause_opt", + /* 236 */ "orconf", + /* 237 */ "resolvetype", + /* 238 */ "raisetype", + /* 239 */ "ifexists", + /* 240 */ "fullname", + /* 241 */ "selectnowith", + /* 242 */ "oneselect", + /* 243 */ "wqlist", + /* 244 */ "multiselect_op", + /* 245 */ "distinct", + /* 246 */ "selcollist", + /* 247 */ "from", + /* 248 */ "where_opt", + /* 249 */ "groupby_opt", + /* 250 */ "having_opt", + /* 251 */ "orderby_opt", + /* 252 */ "limit_opt", + /* 253 */ "window_clause", + /* 254 */ "values", + /* 255 */ "nexprlist", + /* 256 */ "mvalues", + /* 257 */ "sclp", + /* 258 */ "as", + /* 259 */ "seltablist", + /* 260 */ "stl_prefix", + /* 261 */ "joinop", + /* 262 */ "on_using", + /* 263 */ "indexed_by", + /* 264 */ "exprlist", + /* 265 */ "xfullname", + /* 266 */ "idlist", + /* 267 */ "indexed_opt", + /* 268 */ "nulls", + /* 269 */ "with", + /* 270 */ "where_opt_ret", + /* 271 */ "setlist", + /* 272 */ "insert_cmd", + /* 273 */ "idlist_opt", + /* 274 */ "upsert", + /* 275 */ "returning", + /* 276 */ "filter_over", + /* 277 */ "likeop", + /* 278 */ "between_op", + /* 279 */ "in_op", + /* 280 */ "paren_exprlist", + /* 281 */ "case_operand", + /* 282 */ "case_exprlist", + /* 283 */ "case_else", + /* 284 */ "uniqueflag", + /* 285 */ "collate", + /* 286 */ "vinto", + /* 287 */ "nmnum", + /* 288 */ "trigger_decl", + /* 289 */ "trigger_cmd_list", + /* 290 */ "trigger_time", + /* 291 */ "trigger_event", + /* 292 */ "foreach_clause", + /* 293 */ "when_clause", + /* 294 */ "trigger_cmd", + /* 295 */ "trnm", + /* 296 */ "tridxby", + /* 297 */ "database_kw_opt", + /* 298 */ "key_opt", + /* 299 */ "add_column_fullname", + /* 300 */ "kwcolumn_opt", + /* 301 */ "create_vtab", + /* 302 */ "vtabarglist", + /* 303 */ "vtabarg", + /* 304 */ "vtabargtoken", + /* 305 */ "lp", + /* 306 */ "anylist", + /* 307 */ "wqitem", + /* 308 */ "wqas", + /* 309 */ "withnm", + /* 310 */ "windowdefn_list", + /* 311 */ "windowdefn", + /* 312 */ "window", + /* 313 */ "frame_opt", + /* 314 */ "part_opt", + /* 315 */ "filter_clause", + /* 316 */ "over_clause", + /* 317 */ "range_or_rows", + /* 318 */ "frame_bound", + /* 319 */ "frame_bound_s", + /* 320 */ "frame_bound_e", + /* 321 */ "frame_exclude_opt", + /* 322 */ "frame_exclude", +}; +#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ + +#ifndef NDEBUG +/* For tracing reduce actions, the names of all rules are required. +*/ +static const char *const yyRuleName[] = { + /* 0 */ "explain ::= EXPLAIN", + /* 1 */ "explain ::= EXPLAIN QUERY PLAN", + /* 2 */ "cmdx ::= cmd", + /* 3 */ "cmd ::= BEGIN transtype trans_opt", + /* 4 */ "transtype ::=", + /* 5 */ "transtype ::= DEFERRED", + /* 6 */ "transtype ::= IMMEDIATE", + /* 7 */ "transtype ::= EXCLUSIVE", + /* 8 */ "cmd ::= COMMIT|END trans_opt", + /* 9 */ "cmd ::= ROLLBACK trans_opt", + /* 10 */ "cmd ::= SAVEPOINT nm", + /* 11 */ "cmd ::= RELEASE savepoint_opt nm", + /* 12 */ "cmd ::= ROLLBACK trans_opt TO savepoint_opt nm", + /* 13 */ "create_table ::= createkw temp TABLE ifnotexists nm dbnm", + /* 14 */ "createkw ::= CREATE", + /* 15 */ "ifnotexists ::=", + /* 16 */ "ifnotexists ::= IF NOT EXISTS", + /* 17 */ "temp ::= TEMP", + /* 18 */ "temp ::=", + /* 19 */ "create_table_args ::= LP columnlist conslist_opt RP table_option_set", + /* 20 */ "create_table_args ::= AS select", + /* 21 */ "table_option_set ::=", + /* 22 */ "table_option_set ::= table_option_set COMMA table_option", + /* 23 */ "table_option ::= WITHOUT nm", + /* 24 */ "table_option ::= nm", + /* 25 */ "columnname ::= nm typetoken", + /* 26 */ "typetoken ::=", + /* 27 */ "typetoken ::= typename LP signed RP", + /* 28 */ "typetoken ::= typename LP signed COMMA signed RP", + /* 29 */ "typename ::= typename ID|STRING", + /* 30 */ "scanpt ::=", + /* 31 */ "scantok ::=", + /* 32 */ "ccons ::= CONSTRAINT nm", + /* 33 */ "ccons ::= DEFAULT scantok term", + /* 34 */ "ccons ::= DEFAULT LP expr RP", + /* 35 */ "ccons ::= DEFAULT PLUS scantok term", + /* 36 */ "ccons ::= DEFAULT MINUS scantok term", + /* 37 */ "ccons ::= DEFAULT scantok ID|INDEXED", + /* 38 */ "ccons ::= NOT NULL onconf", + /* 39 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc", + /* 40 */ "ccons ::= UNIQUE onconf", + /* 41 */ "ccons ::= CHECK LP expr RP", + /* 42 */ "ccons ::= REFERENCES nm eidlist_opt refargs", + /* 43 */ "ccons ::= defer_subclause", + /* 44 */ "ccons ::= COLLATE ID|STRING", + /* 45 */ "generated ::= LP expr RP", + /* 46 */ "generated ::= LP expr RP ID", + /* 47 */ "autoinc ::=", + /* 48 */ "autoinc ::= AUTOINCR", + /* 49 */ "refargs ::=", + /* 50 */ "refargs ::= refargs refarg", + /* 51 */ "refarg ::= MATCH nm", + /* 52 */ "refarg ::= ON INSERT refact", + /* 53 */ "refarg ::= ON DELETE refact", + /* 54 */ "refarg ::= ON UPDATE refact", + /* 55 */ "refact ::= SET NULL", + /* 56 */ "refact ::= SET DEFAULT", + /* 57 */ "refact ::= CASCADE", + /* 58 */ "refact ::= RESTRICT", + /* 59 */ "refact ::= NO ACTION", + /* 60 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt", + /* 61 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt", + /* 62 */ "init_deferred_pred_opt ::=", + /* 63 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED", + /* 64 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE", + /* 65 */ "conslist_opt ::=", + /* 66 */ "tconscomma ::= COMMA", + /* 67 */ "tcons ::= CONSTRAINT nm", + /* 68 */ "tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf", + /* 69 */ "tcons ::= UNIQUE LP sortlist RP onconf", + /* 70 */ "tcons ::= CHECK LP expr RP onconf", + /* 71 */ "tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt", + /* 72 */ "defer_subclause_opt ::=", + /* 73 */ "onconf ::=", + /* 74 */ "onconf ::= ON CONFLICT resolvetype", + /* 75 */ "orconf ::=", + /* 76 */ "orconf ::= OR resolvetype", + /* 77 */ "resolvetype ::= IGNORE", + /* 78 */ "resolvetype ::= REPLACE", + /* 79 */ "cmd ::= DROP TABLE ifexists fullname", + /* 80 */ "ifexists ::= IF EXISTS", + /* 81 */ "ifexists ::=", + /* 82 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select", + /* 83 */ "cmd ::= DROP VIEW ifexists fullname", + /* 84 */ "cmd ::= select", + /* 85 */ "select ::= WITH wqlist selectnowith", + /* 86 */ "select ::= WITH RECURSIVE wqlist selectnowith", + /* 87 */ "select ::= selectnowith", + /* 88 */ "selectnowith ::= selectnowith multiselect_op oneselect", + /* 89 */ "multiselect_op ::= UNION", + /* 90 */ "multiselect_op ::= UNION ALL", + /* 91 */ "multiselect_op ::= EXCEPT|INTERSECT", + /* 92 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt", + /* 93 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt", + /* 94 */ "values ::= VALUES LP nexprlist RP", + /* 95 */ "oneselect ::= mvalues", + /* 96 */ "mvalues ::= values COMMA LP nexprlist RP", + /* 97 */ "mvalues ::= mvalues COMMA LP nexprlist RP", + /* 98 */ "distinct ::= DISTINCT", + /* 99 */ "distinct ::= ALL", + /* 100 */ "distinct ::=", + /* 101 */ "sclp ::=", + /* 102 */ "selcollist ::= sclp scanpt expr scanpt as", + /* 103 */ "selcollist ::= sclp scanpt STAR", + /* 104 */ "selcollist ::= sclp scanpt nm DOT STAR", + /* 105 */ "as ::= AS nm", + /* 106 */ "as ::=", + /* 107 */ "from ::=", + /* 108 */ "from ::= FROM seltablist", + /* 109 */ "stl_prefix ::= seltablist joinop", + /* 110 */ "stl_prefix ::=", + /* 111 */ "seltablist ::= stl_prefix nm dbnm as on_using", + /* 112 */ "seltablist ::= stl_prefix nm dbnm as indexed_by on_using", + /* 113 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using", + /* 114 */ "seltablist ::= stl_prefix LP select RP as on_using", + /* 115 */ "seltablist ::= stl_prefix LP seltablist RP as on_using", + /* 116 */ "dbnm ::=", + /* 117 */ "dbnm ::= DOT nm", + /* 118 */ "fullname ::= nm", + /* 119 */ "fullname ::= nm DOT nm", + /* 120 */ "xfullname ::= nm", + /* 121 */ "xfullname ::= nm DOT nm", + /* 122 */ "xfullname ::= nm DOT nm AS nm", + /* 123 */ "xfullname ::= nm AS nm", + /* 124 */ "joinop ::= COMMA|JOIN", + /* 125 */ "joinop ::= JOIN_KW JOIN", + /* 126 */ "joinop ::= JOIN_KW nm JOIN", + /* 127 */ "joinop ::= JOIN_KW nm nm JOIN", + /* 128 */ "on_using ::= ON expr", + /* 129 */ "on_using ::= USING LP idlist RP", + /* 130 */ "on_using ::=", + /* 131 */ "indexed_opt ::=", + /* 132 */ "indexed_by ::= INDEXED BY nm", + /* 133 */ "indexed_by ::= NOT INDEXED", + /* 134 */ "orderby_opt ::=", + /* 135 */ "orderby_opt ::= ORDER BY sortlist", + /* 136 */ "sortlist ::= sortlist COMMA expr sortorder nulls", + /* 137 */ "sortlist ::= expr sortorder nulls", + /* 138 */ "sortorder ::= ASC", + /* 139 */ "sortorder ::= DESC", + /* 140 */ "sortorder ::=", + /* 141 */ "nulls ::= NULLS FIRST", + /* 142 */ "nulls ::= NULLS LAST", + /* 143 */ "nulls ::=", + /* 144 */ "groupby_opt ::=", + /* 145 */ "groupby_opt ::= GROUP BY nexprlist", + /* 146 */ "having_opt ::=", + /* 147 */ "having_opt ::= HAVING expr", + /* 148 */ "limit_opt ::=", + /* 149 */ "limit_opt ::= LIMIT expr", + /* 150 */ "limit_opt ::= LIMIT expr OFFSET expr", + /* 151 */ "limit_opt ::= LIMIT expr COMMA expr", + /* 152 */ "cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret", + /* 153 */ "where_opt ::=", + /* 154 */ "where_opt ::= WHERE expr", + /* 155 */ "where_opt_ret ::=", + /* 156 */ "where_opt_ret ::= WHERE expr", + /* 157 */ "where_opt_ret ::= RETURNING selcollist", + /* 158 */ "where_opt_ret ::= WHERE expr RETURNING selcollist", + /* 159 */ "cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret", + /* 160 */ "setlist ::= setlist COMMA nm EQ expr", + /* 161 */ "setlist ::= setlist COMMA LP idlist RP EQ expr", + /* 162 */ "setlist ::= nm EQ expr", + /* 163 */ "setlist ::= LP idlist RP EQ expr", + /* 164 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert", + /* 165 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning", + /* 166 */ "upsert ::=", + /* 167 */ "upsert ::= RETURNING selcollist", + /* 168 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert", + /* 169 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert", + /* 170 */ "upsert ::= ON CONFLICT DO NOTHING returning", + /* 171 */ "upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning", + /* 172 */ "returning ::= RETURNING selcollist", + /* 173 */ "insert_cmd ::= INSERT orconf", + /* 174 */ "insert_cmd ::= REPLACE", + /* 175 */ "idlist_opt ::=", + /* 176 */ "idlist_opt ::= LP idlist RP", + /* 177 */ "idlist ::= idlist COMMA nm", + /* 178 */ "idlist ::= nm", + /* 179 */ "expr ::= LP expr RP", + /* 180 */ "expr ::= ID|INDEXED|JOIN_KW", + /* 181 */ "expr ::= nm DOT nm", + /* 182 */ "expr ::= nm DOT nm DOT nm", + /* 183 */ "term ::= NULL|FLOAT|BLOB", + /* 184 */ "term ::= STRING", + /* 185 */ "term ::= INTEGER", + /* 186 */ "expr ::= VARIABLE", + /* 187 */ "expr ::= expr COLLATE ID|STRING", + /* 188 */ "expr ::= CAST LP expr AS typetoken RP", + /* 189 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP", + /* 190 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP", + /* 191 */ "expr ::= ID|INDEXED|JOIN_KW LP STAR RP", + /* 192 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over", + /* 193 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over", + /* 194 */ "expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over", + /* 195 */ "term ::= CTIME_KW", + /* 196 */ "expr ::= LP nexprlist COMMA expr RP", + /* 197 */ "expr ::= expr AND expr", + /* 198 */ "expr ::= expr OR expr", + /* 199 */ "expr ::= expr LT|GT|GE|LE expr", + /* 200 */ "expr ::= expr EQ|NE expr", + /* 201 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr", + /* 202 */ "expr ::= expr PLUS|MINUS expr", + /* 203 */ "expr ::= expr STAR|SLASH|REM expr", + /* 204 */ "expr ::= expr CONCAT expr", + /* 205 */ "likeop ::= NOT LIKE_KW|MATCH", + /* 206 */ "expr ::= expr likeop expr", + /* 207 */ "expr ::= expr likeop expr ESCAPE expr", + /* 208 */ "expr ::= expr ISNULL|NOTNULL", + /* 209 */ "expr ::= expr NOT NULL", + /* 210 */ "expr ::= expr IS expr", + /* 211 */ "expr ::= expr IS NOT expr", + /* 212 */ "expr ::= expr IS NOT DISTINCT FROM expr", + /* 213 */ "expr ::= expr IS DISTINCT FROM expr", + /* 214 */ "expr ::= NOT expr", + /* 215 */ "expr ::= BITNOT expr", + /* 216 */ "expr ::= PLUS|MINUS expr", + /* 217 */ "expr ::= expr PTR expr", + /* 218 */ "between_op ::= BETWEEN", + /* 219 */ "between_op ::= NOT BETWEEN", + /* 220 */ "expr ::= expr between_op expr AND expr", + /* 221 */ "in_op ::= IN", + /* 222 */ "in_op ::= NOT IN", + /* 223 */ "expr ::= expr in_op LP exprlist RP", + /* 224 */ "expr ::= LP select RP", + /* 225 */ "expr ::= expr in_op LP select RP", + /* 226 */ "expr ::= expr in_op nm dbnm paren_exprlist", + /* 227 */ "expr ::= EXISTS LP select RP", + /* 228 */ "expr ::= CASE case_operand case_exprlist case_else END", + /* 229 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr", + /* 230 */ "case_exprlist ::= WHEN expr THEN expr", + /* 231 */ "case_else ::= ELSE expr", + /* 232 */ "case_else ::=", + /* 233 */ "case_operand ::=", + /* 234 */ "exprlist ::=", + /* 235 */ "nexprlist ::= nexprlist COMMA expr", + /* 236 */ "nexprlist ::= expr", + /* 237 */ "paren_exprlist ::=", + /* 238 */ "paren_exprlist ::= LP exprlist RP", + /* 239 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt", + /* 240 */ "uniqueflag ::= UNIQUE", + /* 241 */ "uniqueflag ::=", + /* 242 */ "eidlist_opt ::=", + /* 243 */ "eidlist_opt ::= LP eidlist RP", + /* 244 */ "eidlist ::= eidlist COMMA nm collate sortorder", + /* 245 */ "eidlist ::= nm collate sortorder", + /* 246 */ "collate ::=", + /* 247 */ "collate ::= COLLATE ID|STRING", + /* 248 */ "cmd ::= DROP INDEX ifexists fullname", + /* 249 */ "cmd ::= VACUUM vinto", + /* 250 */ "cmd ::= VACUUM nm vinto", + /* 251 */ "vinto ::= INTO expr", + /* 252 */ "vinto ::=", + /* 253 */ "cmd ::= PRAGMA nm dbnm", + /* 254 */ "cmd ::= PRAGMA nm dbnm EQ nmnum", + /* 255 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP", + /* 256 */ "cmd ::= PRAGMA nm dbnm EQ minus_num", + /* 257 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP", + /* 258 */ "plus_num ::= PLUS INTEGER|FLOAT", + /* 259 */ "minus_num ::= MINUS INTEGER|FLOAT", + /* 260 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END", + /* 261 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause", + /* 262 */ "trigger_time ::= BEFORE|AFTER", + /* 263 */ "trigger_time ::= INSTEAD OF", + /* 264 */ "trigger_time ::=", + /* 265 */ "trigger_event ::= DELETE|INSERT", + /* 266 */ "trigger_event ::= UPDATE", + /* 267 */ "trigger_event ::= UPDATE OF idlist", + /* 268 */ "when_clause ::=", + /* 269 */ "when_clause ::= WHEN expr", + /* 270 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI", + /* 271 */ "trigger_cmd_list ::= trigger_cmd SEMI", + /* 272 */ "trnm ::= nm DOT nm", + /* 273 */ "tridxby ::= INDEXED BY nm", + /* 274 */ "tridxby ::= NOT INDEXED", + /* 275 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt", + /* 276 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt", + /* 277 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt", + /* 278 */ "trigger_cmd ::= scanpt select scanpt", + /* 279 */ "expr ::= RAISE LP IGNORE RP", + /* 280 */ "expr ::= RAISE LP raisetype COMMA expr RP", + /* 281 */ "raisetype ::= ROLLBACK", + /* 282 */ "raisetype ::= ABORT", + /* 283 */ "raisetype ::= FAIL", + /* 284 */ "cmd ::= DROP TRIGGER ifexists fullname", + /* 285 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt", + /* 286 */ "cmd ::= DETACH database_kw_opt expr", + /* 287 */ "key_opt ::=", + /* 288 */ "key_opt ::= KEY expr", + /* 289 */ "cmd ::= REINDEX", + /* 290 */ "cmd ::= REINDEX nm dbnm", + /* 291 */ "cmd ::= ANALYZE", + /* 292 */ "cmd ::= ANALYZE nm dbnm", + /* 293 */ "cmd ::= ALTER TABLE fullname RENAME TO nm", + /* 294 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist", + /* 295 */ "cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm", + /* 296 */ "add_column_fullname ::= fullname", + /* 297 */ "cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm", + /* 298 */ "cmd ::= create_vtab", + /* 299 */ "cmd ::= create_vtab LP vtabarglist RP", + /* 300 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm", + /* 301 */ "vtabarg ::=", + /* 302 */ "vtabargtoken ::= ANY", + /* 303 */ "vtabargtoken ::= lp anylist RP", + /* 304 */ "lp ::= LP", + /* 305 */ "with ::= WITH wqlist", + /* 306 */ "with ::= WITH RECURSIVE wqlist", + /* 307 */ "wqas ::= AS", + /* 308 */ "wqas ::= AS MATERIALIZED", + /* 309 */ "wqas ::= AS NOT MATERIALIZED", + /* 310 */ "wqitem ::= withnm eidlist_opt wqas LP select RP", + /* 311 */ "withnm ::= nm", + /* 312 */ "wqlist ::= wqitem", + /* 313 */ "wqlist ::= wqlist COMMA wqitem", + /* 314 */ "windowdefn_list ::= windowdefn_list COMMA windowdefn", + /* 315 */ "windowdefn ::= nm AS LP window RP", + /* 316 */ "window ::= PARTITION BY nexprlist orderby_opt frame_opt", + /* 317 */ "window ::= nm PARTITION BY nexprlist orderby_opt frame_opt", + /* 318 */ "window ::= ORDER BY sortlist frame_opt", + /* 319 */ "window ::= nm ORDER BY sortlist frame_opt", + /* 320 */ "window ::= nm frame_opt", + /* 321 */ "frame_opt ::=", + /* 322 */ "frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt", + /* 323 */ "frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt", + /* 324 */ "range_or_rows ::= RANGE|ROWS|GROUPS", + /* 325 */ "frame_bound_s ::= frame_bound", + /* 326 */ "frame_bound_s ::= UNBOUNDED PRECEDING", + /* 327 */ "frame_bound_e ::= frame_bound", + /* 328 */ "frame_bound_e ::= UNBOUNDED FOLLOWING", + /* 329 */ "frame_bound ::= expr PRECEDING|FOLLOWING", + /* 330 */ "frame_bound ::= CURRENT ROW", + /* 331 */ "frame_exclude_opt ::=", + /* 332 */ "frame_exclude_opt ::= EXCLUDE frame_exclude", + /* 333 */ "frame_exclude ::= NO OTHERS", + /* 334 */ "frame_exclude ::= CURRENT ROW", + /* 335 */ "frame_exclude ::= GROUP|TIES", + /* 336 */ "window_clause ::= WINDOW windowdefn_list", + /* 337 */ "filter_over ::= filter_clause over_clause", + /* 338 */ "filter_over ::= over_clause", + /* 339 */ "filter_over ::= filter_clause", + /* 340 */ "over_clause ::= OVER LP window RP", + /* 341 */ "over_clause ::= OVER nm", + /* 342 */ "filter_clause ::= FILTER LP WHERE expr RP", + /* 343 */ "term ::= QNUMBER", + /* 344 */ "input ::= cmdlist", + /* 345 */ "cmdlist ::= cmdlist ecmd", + /* 346 */ "cmdlist ::= ecmd", + /* 347 */ "ecmd ::= SEMI", + /* 348 */ "ecmd ::= cmdx SEMI", + /* 349 */ "ecmd ::= explain cmdx SEMI", + /* 350 */ "trans_opt ::=", + /* 351 */ "trans_opt ::= TRANSACTION", + /* 352 */ "trans_opt ::= TRANSACTION nm", + /* 353 */ "savepoint_opt ::= SAVEPOINT", + /* 354 */ "savepoint_opt ::=", + /* 355 */ "cmd ::= create_table create_table_args", + /* 356 */ "table_option_set ::= table_option", + /* 357 */ "columnlist ::= columnlist COMMA columnname carglist", + /* 358 */ "columnlist ::= columnname carglist", + /* 359 */ "nm ::= ID|INDEXED|JOIN_KW", + /* 360 */ "nm ::= STRING", + /* 361 */ "typetoken ::= typename", + /* 362 */ "typename ::= ID|STRING", + /* 363 */ "signed ::= plus_num", + /* 364 */ "signed ::= minus_num", + /* 365 */ "carglist ::= carglist ccons", + /* 366 */ "carglist ::=", + /* 367 */ "ccons ::= NULL onconf", + /* 368 */ "ccons ::= GENERATED ALWAYS AS generated", + /* 369 */ "ccons ::= AS generated", + /* 370 */ "conslist_opt ::= COMMA conslist", + /* 371 */ "conslist ::= conslist tconscomma tcons", + /* 372 */ "conslist ::= tcons", + /* 373 */ "tconscomma ::=", + /* 374 */ "defer_subclause_opt ::= defer_subclause", + /* 375 */ "resolvetype ::= raisetype", + /* 376 */ "selectnowith ::= oneselect", + /* 377 */ "oneselect ::= values", + /* 378 */ "sclp ::= selcollist COMMA", + /* 379 */ "as ::= ID|STRING", + /* 380 */ "indexed_opt ::= indexed_by", + /* 381 */ "returning ::=", + /* 382 */ "expr ::= term", + /* 383 */ "likeop ::= LIKE_KW|MATCH", + /* 384 */ "case_operand ::= expr", + /* 385 */ "exprlist ::= nexprlist", + /* 386 */ "nmnum ::= plus_num", + /* 387 */ "nmnum ::= nm", + /* 388 */ "nmnum ::= ON", + /* 389 */ "nmnum ::= DELETE", + /* 390 */ "nmnum ::= DEFAULT", + /* 391 */ "plus_num ::= INTEGER|FLOAT", + /* 392 */ "foreach_clause ::=", + /* 393 */ "foreach_clause ::= FOR EACH ROW", + /* 394 */ "trnm ::= nm", + /* 395 */ "tridxby ::=", + /* 396 */ "database_kw_opt ::= DATABASE", + /* 397 */ "database_kw_opt ::=", + /* 398 */ "kwcolumn_opt ::=", + /* 399 */ "kwcolumn_opt ::= COLUMNKW", + /* 400 */ "vtabarglist ::= vtabarg", + /* 401 */ "vtabarglist ::= vtabarglist COMMA vtabarg", + /* 402 */ "vtabarg ::= vtabarg vtabargtoken", + /* 403 */ "anylist ::=", + /* 404 */ "anylist ::= anylist LP anylist RP", + /* 405 */ "anylist ::= anylist ANY", + /* 406 */ "with ::=", + /* 407 */ "windowdefn_list ::= windowdefn", + /* 408 */ "window ::= frame_opt", +}; +#endif /* NDEBUG */ + + +#if YYGROWABLESTACK +/* +** Try to increase the size of the parser stack. Return the number +** of errors. Return 0 on success. +*/ +static int yyGrowStack(yyParser *p){ + int oldSize = 1 + (int)(p->yystackEnd - p->yystack); + int newSize; + int idx; + yyStackEntry *pNew; + + newSize = oldSize*2 + 100; + idx = (int)(p->yytos - p->yystack); + if( p->yystack==p->yystk0 ){ + pNew = YYREALLOC(0, newSize*sizeof(pNew[0])); + if( pNew==0 ) return 1; + memcpy(pNew, p->yystack, oldSize*sizeof(pNew[0])); + }else{ + pNew = YYREALLOC(p->yystack, newSize*sizeof(pNew[0])); + if( pNew==0 ) return 1; + } + p->yystack = pNew; + p->yytos = &p->yystack[idx]; +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sStack grows from %d to %d entries.\n", + yyTracePrompt, oldSize, newSize); + } +#endif + p->yystackEnd = &p->yystack[newSize-1]; + return 0; +} +#endif /* YYGROWABLESTACK */ + +#if !YYGROWABLESTACK +/* For builds that do no have a growable stack, yyGrowStack always +** returns an error. +*/ +# define yyGrowStack(X) 1 +#endif + +/* Datatype of the argument to the memory allocated passed as the +** second argument to sqlite3ParserAlloc() below. This can be changed by +** putting an appropriate #define in the %include section of the input +** grammar. +*/ +#ifndef YYMALLOCARGTYPE +# define YYMALLOCARGTYPE size_t +#endif + +/* Initialize a new parser that has already been allocated. +*/ +SQLITE_PRIVATE void sqlite3ParserInit(void *yypRawParser sqlite3ParserCTX_PDECL){ + yyParser *yypParser = (yyParser*)yypRawParser; + sqlite3ParserCTX_STORE +#ifdef YYTRACKMAXSTACKDEPTH + yypParser->yyhwm = 0; +#endif + yypParser->yystack = yypParser->yystk0; + yypParser->yystackEnd = &yypParser->yystack[YYSTACKDEPTH-1]; +#ifndef YYNOERRORRECOVERY + yypParser->yyerrcnt = -1; +#endif + yypParser->yytos = yypParser->yystack; + yypParser->yystack[0].stateno = 0; + yypParser->yystack[0].major = 0; +} + +#ifndef sqlite3Parser_ENGINEALWAYSONSTACK +/* +** This function allocates a new parser. +** The only argument is a pointer to a function which works like +** malloc. +** +** Inputs: +** A pointer to the function used to allocate memory. +** +** Outputs: +** A pointer to a parser. This pointer is used in subsequent calls +** to sqlite3Parser and sqlite3ParserFree. +*/ +SQLITE_PRIVATE void *sqlite3ParserAlloc(void *(*mallocProc)(YYMALLOCARGTYPE) sqlite3ParserCTX_PDECL){ + yyParser *yypParser; + yypParser = (yyParser*)(*mallocProc)( (YYMALLOCARGTYPE)sizeof(yyParser) ); + if( yypParser ){ + sqlite3ParserCTX_STORE + sqlite3ParserInit(yypParser sqlite3ParserCTX_PARAM); + } + return (void*)yypParser; +} +#endif /* sqlite3Parser_ENGINEALWAYSONSTACK */ + + +/* The following function deletes the "minor type" or semantic value +** associated with a symbol. The symbol can be either a terminal +** or nonterminal. "yymajor" is the symbol code, and "yypminor" is +** a pointer to the value to be deleted. The code used to do the +** deletions is derived from the %destructor and/or %token_destructor +** directives of the input grammar. +*/ +static void yy_destructor( + yyParser *yypParser, /* The parser */ + YYCODETYPE yymajor, /* Type code for object to destroy */ + YYMINORTYPE *yypminor /* The object to be destroyed */ +){ + sqlite3ParserARG_FETCH + sqlite3ParserCTX_FETCH + switch( yymajor ){ + /* Here is inserted the actions which take place when a + ** terminal or non-terminal is destroyed. This can happen + ** when the symbol is popped from the stack during a + ** reduce or during error processing or when a parser is + ** being destroyed before it is finished parsing. + ** + ** Note: during a reduce, the only symbols destroyed are those + ** which appear on the RHS of the rule, but which are *not* used + ** inside the C code. + */ +/********* Begin destructor definitions ***************************************/ + case 206: /* select */ + case 241: /* selectnowith */ + case 242: /* oneselect */ + case 254: /* values */ + case 256: /* mvalues */ +{ +sqlite3SelectDelete(pParse->db, (yypminor->yy637)); +} + break; + case 218: /* term */ + case 219: /* expr */ + case 248: /* where_opt */ + case 250: /* having_opt */ + case 270: /* where_opt_ret */ + case 281: /* case_operand */ + case 283: /* case_else */ + case 286: /* vinto */ + case 293: /* when_clause */ + case 298: /* key_opt */ + case 315: /* filter_clause */ +{ +sqlite3ExprDelete(pParse->db, (yypminor->yy590)); +} + break; + case 223: /* eidlist_opt */ + case 233: /* sortlist */ + case 234: /* eidlist */ + case 246: /* selcollist */ + case 249: /* groupby_opt */ + case 251: /* orderby_opt */ + case 255: /* nexprlist */ + case 257: /* sclp */ + case 264: /* exprlist */ + case 271: /* setlist */ + case 280: /* paren_exprlist */ + case 282: /* case_exprlist */ + case 314: /* part_opt */ +{ +sqlite3ExprListDelete(pParse->db, (yypminor->yy402)); +} + break; + case 240: /* fullname */ + case 247: /* from */ + case 259: /* seltablist */ + case 260: /* stl_prefix */ + case 265: /* xfullname */ +{ +sqlite3SrcListDelete(pParse->db, (yypminor->yy563)); +} + break; + case 243: /* wqlist */ +{ +sqlite3WithDelete(pParse->db, (yypminor->yy125)); +} + break; + case 253: /* window_clause */ + case 310: /* windowdefn_list */ +{ +sqlite3WindowListDelete(pParse->db, (yypminor->yy483)); +} + break; + case 266: /* idlist */ + case 273: /* idlist_opt */ +{ +sqlite3IdListDelete(pParse->db, (yypminor->yy204)); +} + break; + case 276: /* filter_over */ + case 311: /* windowdefn */ + case 312: /* window */ + case 313: /* frame_opt */ + case 316: /* over_clause */ +{ +sqlite3WindowDelete(pParse->db, (yypminor->yy483)); +} + break; + case 289: /* trigger_cmd_list */ + case 294: /* trigger_cmd */ +{ +sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy319)); +} + break; + case 291: /* trigger_event */ +{ +sqlite3IdListDelete(pParse->db, (yypminor->yy28).b); +} + break; + case 318: /* frame_bound */ + case 319: /* frame_bound_s */ + case 320: /* frame_bound_e */ +{ +sqlite3ExprDelete(pParse->db, (yypminor->yy205).pExpr); +} + break; +/********* End destructor definitions *****************************************/ + default: break; /* If no destructor action specified: do nothing */ + } +} + +/* +** Pop the parser's stack once. +** +** If there is a destructor routine associated with the token which +** is popped from the stack, then call it. +*/ +static void yy_pop_parser_stack(yyParser *pParser){ + yyStackEntry *yytos; + assert( pParser->yytos!=0 ); + assert( pParser->yytos > pParser->yystack ); + yytos = pParser->yytos--; +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sPopping %s\n", + yyTracePrompt, + yyTokenName[yytos->major]); + } +#endif + yy_destructor(pParser, yytos->major, &yytos->minor); +} + +/* +** Clear all secondary memory allocations from the parser +*/ +SQLITE_PRIVATE void sqlite3ParserFinalize(void *p){ + yyParser *pParser = (yyParser*)p; + + /* In-lined version of calling yy_pop_parser_stack() for each + ** element left in the stack */ + yyStackEntry *yytos = pParser->yytos; + while( yytos>pParser->yystack ){ +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sPopping %s\n", + yyTracePrompt, + yyTokenName[yytos->major]); + } +#endif + if( yytos->major>=YY_MIN_DSTRCTR ){ + yy_destructor(pParser, yytos->major, &yytos->minor); + } + yytos--; + } + +#if YYGROWABLESTACK + if( pParser->yystack!=pParser->yystk0 ) YYFREE(pParser->yystack); +#endif +} + +#ifndef sqlite3Parser_ENGINEALWAYSONSTACK +/* +** Deallocate and destroy a parser. Destructors are called for +** all stack elements before shutting the parser down. +** +** If the YYPARSEFREENEVERNULL macro exists (for example because it +** is defined in a %include section of the input grammar) then it is +** assumed that the input pointer is never NULL. +*/ +SQLITE_PRIVATE void sqlite3ParserFree( + void *p, /* The parser to be deleted */ + void (*freeProc)(void*) /* Function used to reclaim memory */ +){ +#ifndef YYPARSEFREENEVERNULL + if( p==0 ) return; +#endif + sqlite3ParserFinalize(p); + (*freeProc)(p); +} +#endif /* sqlite3Parser_ENGINEALWAYSONSTACK */ + +/* +** Return the peak depth of the stack for a parser. +*/ +#ifdef YYTRACKMAXSTACKDEPTH +SQLITE_PRIVATE int sqlite3ParserStackPeak(void *p){ + yyParser *pParser = (yyParser*)p; + return pParser->yyhwm; +} +#endif + +/* This array of booleans keeps track of the parser statement +** coverage. The element yycoverage[X][Y] is set when the parser +** is in state X and has a lookahead token Y. In a well-tested +** systems, every element of this matrix should end up being set. +*/ +#if defined(YYCOVERAGE) +static unsigned char yycoverage[YYNSTATE][YYNTOKEN]; +#endif + +/* +** Write into out a description of every state/lookahead combination that +** +** (1) has not been used by the parser, and +** (2) is not a syntax error. +** +** Return the number of missed state/lookahead combinations. +*/ +#if defined(YYCOVERAGE) +SQLITE_PRIVATE int sqlite3ParserCoverage(FILE *out){ + int stateno, iLookAhead, i; + int nMissed = 0; + for(stateno=0; statenoYY_MAX_SHIFT ) return stateno; + assert( stateno <= YY_SHIFT_COUNT ); +#if defined(YYCOVERAGE) + yycoverage[stateno][iLookAhead] = 1; +#endif + do{ + i = yy_shift_ofst[stateno]; + assert( i>=0 ); + assert( i<=YY_ACTTAB_COUNT ); + assert( i+YYNTOKEN<=(int)YY_NLOOKAHEAD ); + assert( iLookAhead!=YYNOCODE ); + assert( iLookAhead < YYNTOKEN ); + i += iLookAhead; + assert( i<(int)YY_NLOOKAHEAD ); + if( yy_lookahead[i]!=iLookAhead ){ +#ifdef YYFALLBACK + YYCODETYPE iFallback; /* Fallback token */ + assert( iLookAhead %s\n", + yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]); + } +#endif + assert( yyFallback[iFallback]==0 ); /* Fallback loop must terminate */ + iLookAhead = iFallback; + continue; + } +#endif +#ifdef YYWILDCARD + { + int j = i - iLookAhead + YYWILDCARD; + assert( j<(int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])) ); + if( yy_lookahead[j]==YYWILDCARD && iLookAhead>0 ){ +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n", + yyTracePrompt, yyTokenName[iLookAhead], + yyTokenName[YYWILDCARD]); + } +#endif /* NDEBUG */ + return yy_action[j]; + } + } +#endif /* YYWILDCARD */ + return yy_default[stateno]; + }else{ + assert( i>=0 && i<(int)(sizeof(yy_action)/sizeof(yy_action[0])) ); + return yy_action[i]; + } + }while(1); +} + +/* +** Find the appropriate action for a parser given the non-terminal +** look-ahead token iLookAhead. +*/ +static YYACTIONTYPE yy_find_reduce_action( + YYACTIONTYPE stateno, /* Current state number */ + YYCODETYPE iLookAhead /* The look-ahead token */ +){ + int i; +#ifdef YYERRORSYMBOL + if( stateno>YY_REDUCE_COUNT ){ + return yy_default[stateno]; + } +#else + assert( stateno<=YY_REDUCE_COUNT ); +#endif + i = yy_reduce_ofst[stateno]; + assert( iLookAhead!=YYNOCODE ); + i += iLookAhead; +#ifdef YYERRORSYMBOL + if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){ + return yy_default[stateno]; + } +#else + assert( i>=0 && iyytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); + /* Here code is inserted which will execute if the parser + ** stack every overflows */ +/******** Begin %stack_overflow code ******************************************/ + + sqlite3OomFault(pParse->db); +/******** End %stack_overflow code ********************************************/ + sqlite3ParserARG_STORE /* Suppress warning about unused %extra_argument var */ + sqlite3ParserCTX_STORE +} + +/* +** Print tracing information for a SHIFT action +*/ +#ifndef NDEBUG +static void yyTraceShift(yyParser *yypParser, int yyNewState, const char *zTag){ + if( yyTraceFILE ){ + if( yyNewStateyytos->major], + yyNewState); + }else{ + fprintf(yyTraceFILE,"%s%s '%s', pending reduce %d\n", + yyTracePrompt, zTag, yyTokenName[yypParser->yytos->major], + yyNewState - YY_MIN_REDUCE); + } + } +} +#else +# define yyTraceShift(X,Y,Z) +#endif + +/* +** Perform a shift action. +*/ +static void yy_shift( + yyParser *yypParser, /* The parser to be shifted */ + YYACTIONTYPE yyNewState, /* The new state to shift in */ + YYCODETYPE yyMajor, /* The major token to shift in */ + sqlite3ParserTOKENTYPE yyMinor /* The minor token to shift in */ +){ + yyStackEntry *yytos; + yypParser->yytos++; +#ifdef YYTRACKMAXSTACKDEPTH + if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){ + yypParser->yyhwm++; + assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack) ); + } +#endif + yytos = yypParser->yytos; + if( yytos>yypParser->yystackEnd ){ + if( yyGrowStack(yypParser) ){ + yypParser->yytos--; + yyStackOverflow(yypParser); + return; + } + yytos = yypParser->yytos; + assert( yytos <= yypParser->yystackEnd ); + } + if( yyNewState > YY_MAX_SHIFT ){ + yyNewState += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE; + } + yytos->stateno = yyNewState; + yytos->major = yyMajor; + yytos->minor.yy0 = yyMinor; + yyTraceShift(yypParser, yyNewState, "Shift"); +} + +/* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side +** of that rule */ +static const YYCODETYPE yyRuleInfoLhs[] = { + 191, /* (0) explain ::= EXPLAIN */ + 191, /* (1) explain ::= EXPLAIN QUERY PLAN */ + 190, /* (2) cmdx ::= cmd */ + 192, /* (3) cmd ::= BEGIN transtype trans_opt */ + 193, /* (4) transtype ::= */ + 193, /* (5) transtype ::= DEFERRED */ + 193, /* (6) transtype ::= IMMEDIATE */ + 193, /* (7) transtype ::= EXCLUSIVE */ + 192, /* (8) cmd ::= COMMIT|END trans_opt */ + 192, /* (9) cmd ::= ROLLBACK trans_opt */ + 192, /* (10) cmd ::= SAVEPOINT nm */ + 192, /* (11) cmd ::= RELEASE savepoint_opt nm */ + 192, /* (12) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ + 197, /* (13) create_table ::= createkw temp TABLE ifnotexists nm dbnm */ + 199, /* (14) createkw ::= CREATE */ + 201, /* (15) ifnotexists ::= */ + 201, /* (16) ifnotexists ::= IF NOT EXISTS */ + 200, /* (17) temp ::= TEMP */ + 200, /* (18) temp ::= */ + 198, /* (19) create_table_args ::= LP columnlist conslist_opt RP table_option_set */ + 198, /* (20) create_table_args ::= AS select */ + 205, /* (21) table_option_set ::= */ + 205, /* (22) table_option_set ::= table_option_set COMMA table_option */ + 207, /* (23) table_option ::= WITHOUT nm */ + 207, /* (24) table_option ::= nm */ + 208, /* (25) columnname ::= nm typetoken */ + 210, /* (26) typetoken ::= */ + 210, /* (27) typetoken ::= typename LP signed RP */ + 210, /* (28) typetoken ::= typename LP signed COMMA signed RP */ + 211, /* (29) typename ::= typename ID|STRING */ + 215, /* (30) scanpt ::= */ + 216, /* (31) scantok ::= */ + 217, /* (32) ccons ::= CONSTRAINT nm */ + 217, /* (33) ccons ::= DEFAULT scantok term */ + 217, /* (34) ccons ::= DEFAULT LP expr RP */ + 217, /* (35) ccons ::= DEFAULT PLUS scantok term */ + 217, /* (36) ccons ::= DEFAULT MINUS scantok term */ + 217, /* (37) ccons ::= DEFAULT scantok ID|INDEXED */ + 217, /* (38) ccons ::= NOT NULL onconf */ + 217, /* (39) ccons ::= PRIMARY KEY sortorder onconf autoinc */ + 217, /* (40) ccons ::= UNIQUE onconf */ + 217, /* (41) ccons ::= CHECK LP expr RP */ + 217, /* (42) ccons ::= REFERENCES nm eidlist_opt refargs */ + 217, /* (43) ccons ::= defer_subclause */ + 217, /* (44) ccons ::= COLLATE ID|STRING */ + 226, /* (45) generated ::= LP expr RP */ + 226, /* (46) generated ::= LP expr RP ID */ + 222, /* (47) autoinc ::= */ + 222, /* (48) autoinc ::= AUTOINCR */ + 224, /* (49) refargs ::= */ + 224, /* (50) refargs ::= refargs refarg */ + 227, /* (51) refarg ::= MATCH nm */ + 227, /* (52) refarg ::= ON INSERT refact */ + 227, /* (53) refarg ::= ON DELETE refact */ + 227, /* (54) refarg ::= ON UPDATE refact */ + 228, /* (55) refact ::= SET NULL */ + 228, /* (56) refact ::= SET DEFAULT */ + 228, /* (57) refact ::= CASCADE */ + 228, /* (58) refact ::= RESTRICT */ + 228, /* (59) refact ::= NO ACTION */ + 225, /* (60) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ + 225, /* (61) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ + 229, /* (62) init_deferred_pred_opt ::= */ + 229, /* (63) init_deferred_pred_opt ::= INITIALLY DEFERRED */ + 229, /* (64) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ + 204, /* (65) conslist_opt ::= */ + 231, /* (66) tconscomma ::= COMMA */ + 232, /* (67) tcons ::= CONSTRAINT nm */ + 232, /* (68) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ + 232, /* (69) tcons ::= UNIQUE LP sortlist RP onconf */ + 232, /* (70) tcons ::= CHECK LP expr RP onconf */ + 232, /* (71) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ + 235, /* (72) defer_subclause_opt ::= */ + 220, /* (73) onconf ::= */ + 220, /* (74) onconf ::= ON CONFLICT resolvetype */ + 236, /* (75) orconf ::= */ + 236, /* (76) orconf ::= OR resolvetype */ + 237, /* (77) resolvetype ::= IGNORE */ + 237, /* (78) resolvetype ::= REPLACE */ + 192, /* (79) cmd ::= DROP TABLE ifexists fullname */ + 239, /* (80) ifexists ::= IF EXISTS */ + 239, /* (81) ifexists ::= */ + 192, /* (82) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ + 192, /* (83) cmd ::= DROP VIEW ifexists fullname */ + 192, /* (84) cmd ::= select */ + 206, /* (85) select ::= WITH wqlist selectnowith */ + 206, /* (86) select ::= WITH RECURSIVE wqlist selectnowith */ + 206, /* (87) select ::= selectnowith */ + 241, /* (88) selectnowith ::= selectnowith multiselect_op oneselect */ + 244, /* (89) multiselect_op ::= UNION */ + 244, /* (90) multiselect_op ::= UNION ALL */ + 244, /* (91) multiselect_op ::= EXCEPT|INTERSECT */ + 242, /* (92) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ + 242, /* (93) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */ + 254, /* (94) values ::= VALUES LP nexprlist RP */ + 242, /* (95) oneselect ::= mvalues */ + 256, /* (96) mvalues ::= values COMMA LP nexprlist RP */ + 256, /* (97) mvalues ::= mvalues COMMA LP nexprlist RP */ + 245, /* (98) distinct ::= DISTINCT */ + 245, /* (99) distinct ::= ALL */ + 245, /* (100) distinct ::= */ + 257, /* (101) sclp ::= */ + 246, /* (102) selcollist ::= sclp scanpt expr scanpt as */ + 246, /* (103) selcollist ::= sclp scanpt STAR */ + 246, /* (104) selcollist ::= sclp scanpt nm DOT STAR */ + 258, /* (105) as ::= AS nm */ + 258, /* (106) as ::= */ + 247, /* (107) from ::= */ + 247, /* (108) from ::= FROM seltablist */ + 260, /* (109) stl_prefix ::= seltablist joinop */ + 260, /* (110) stl_prefix ::= */ + 259, /* (111) seltablist ::= stl_prefix nm dbnm as on_using */ + 259, /* (112) seltablist ::= stl_prefix nm dbnm as indexed_by on_using */ + 259, /* (113) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */ + 259, /* (114) seltablist ::= stl_prefix LP select RP as on_using */ + 259, /* (115) seltablist ::= stl_prefix LP seltablist RP as on_using */ + 202, /* (116) dbnm ::= */ + 202, /* (117) dbnm ::= DOT nm */ + 240, /* (118) fullname ::= nm */ + 240, /* (119) fullname ::= nm DOT nm */ + 265, /* (120) xfullname ::= nm */ + 265, /* (121) xfullname ::= nm DOT nm */ + 265, /* (122) xfullname ::= nm DOT nm AS nm */ + 265, /* (123) xfullname ::= nm AS nm */ + 261, /* (124) joinop ::= COMMA|JOIN */ + 261, /* (125) joinop ::= JOIN_KW JOIN */ + 261, /* (126) joinop ::= JOIN_KW nm JOIN */ + 261, /* (127) joinop ::= JOIN_KW nm nm JOIN */ + 262, /* (128) on_using ::= ON expr */ + 262, /* (129) on_using ::= USING LP idlist RP */ + 262, /* (130) on_using ::= */ + 267, /* (131) indexed_opt ::= */ + 263, /* (132) indexed_by ::= INDEXED BY nm */ + 263, /* (133) indexed_by ::= NOT INDEXED */ + 251, /* (134) orderby_opt ::= */ + 251, /* (135) orderby_opt ::= ORDER BY sortlist */ + 233, /* (136) sortlist ::= sortlist COMMA expr sortorder nulls */ + 233, /* (137) sortlist ::= expr sortorder nulls */ + 221, /* (138) sortorder ::= ASC */ + 221, /* (139) sortorder ::= DESC */ + 221, /* (140) sortorder ::= */ + 268, /* (141) nulls ::= NULLS FIRST */ + 268, /* (142) nulls ::= NULLS LAST */ + 268, /* (143) nulls ::= */ + 249, /* (144) groupby_opt ::= */ + 249, /* (145) groupby_opt ::= GROUP BY nexprlist */ + 250, /* (146) having_opt ::= */ + 250, /* (147) having_opt ::= HAVING expr */ + 252, /* (148) limit_opt ::= */ + 252, /* (149) limit_opt ::= LIMIT expr */ + 252, /* (150) limit_opt ::= LIMIT expr OFFSET expr */ + 252, /* (151) limit_opt ::= LIMIT expr COMMA expr */ + 192, /* (152) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */ + 248, /* (153) where_opt ::= */ + 248, /* (154) where_opt ::= WHERE expr */ + 270, /* (155) where_opt_ret ::= */ + 270, /* (156) where_opt_ret ::= WHERE expr */ + 270, /* (157) where_opt_ret ::= RETURNING selcollist */ + 270, /* (158) where_opt_ret ::= WHERE expr RETURNING selcollist */ + 192, /* (159) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */ + 271, /* (160) setlist ::= setlist COMMA nm EQ expr */ + 271, /* (161) setlist ::= setlist COMMA LP idlist RP EQ expr */ + 271, /* (162) setlist ::= nm EQ expr */ + 271, /* (163) setlist ::= LP idlist RP EQ expr */ + 192, /* (164) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ + 192, /* (165) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */ + 274, /* (166) upsert ::= */ + 274, /* (167) upsert ::= RETURNING selcollist */ + 274, /* (168) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */ + 274, /* (169) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */ + 274, /* (170) upsert ::= ON CONFLICT DO NOTHING returning */ + 274, /* (171) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */ + 275, /* (172) returning ::= RETURNING selcollist */ + 272, /* (173) insert_cmd ::= INSERT orconf */ + 272, /* (174) insert_cmd ::= REPLACE */ + 273, /* (175) idlist_opt ::= */ + 273, /* (176) idlist_opt ::= LP idlist RP */ + 266, /* (177) idlist ::= idlist COMMA nm */ + 266, /* (178) idlist ::= nm */ + 219, /* (179) expr ::= LP expr RP */ + 219, /* (180) expr ::= ID|INDEXED|JOIN_KW */ + 219, /* (181) expr ::= nm DOT nm */ + 219, /* (182) expr ::= nm DOT nm DOT nm */ + 218, /* (183) term ::= NULL|FLOAT|BLOB */ + 218, /* (184) term ::= STRING */ + 218, /* (185) term ::= INTEGER */ + 219, /* (186) expr ::= VARIABLE */ + 219, /* (187) expr ::= expr COLLATE ID|STRING */ + 219, /* (188) expr ::= CAST LP expr AS typetoken RP */ + 219, /* (189) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */ + 219, /* (190) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */ + 219, /* (191) expr ::= ID|INDEXED|JOIN_KW LP STAR RP */ + 219, /* (192) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */ + 219, /* (193) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */ + 219, /* (194) expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */ + 218, /* (195) term ::= CTIME_KW */ + 219, /* (196) expr ::= LP nexprlist COMMA expr RP */ + 219, /* (197) expr ::= expr AND expr */ + 219, /* (198) expr ::= expr OR expr */ + 219, /* (199) expr ::= expr LT|GT|GE|LE expr */ + 219, /* (200) expr ::= expr EQ|NE expr */ + 219, /* (201) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ + 219, /* (202) expr ::= expr PLUS|MINUS expr */ + 219, /* (203) expr ::= expr STAR|SLASH|REM expr */ + 219, /* (204) expr ::= expr CONCAT expr */ + 277, /* (205) likeop ::= NOT LIKE_KW|MATCH */ + 219, /* (206) expr ::= expr likeop expr */ + 219, /* (207) expr ::= expr likeop expr ESCAPE expr */ + 219, /* (208) expr ::= expr ISNULL|NOTNULL */ + 219, /* (209) expr ::= expr NOT NULL */ + 219, /* (210) expr ::= expr IS expr */ + 219, /* (211) expr ::= expr IS NOT expr */ + 219, /* (212) expr ::= expr IS NOT DISTINCT FROM expr */ + 219, /* (213) expr ::= expr IS DISTINCT FROM expr */ + 219, /* (214) expr ::= NOT expr */ + 219, /* (215) expr ::= BITNOT expr */ + 219, /* (216) expr ::= PLUS|MINUS expr */ + 219, /* (217) expr ::= expr PTR expr */ + 278, /* (218) between_op ::= BETWEEN */ + 278, /* (219) between_op ::= NOT BETWEEN */ + 219, /* (220) expr ::= expr between_op expr AND expr */ + 279, /* (221) in_op ::= IN */ + 279, /* (222) in_op ::= NOT IN */ + 219, /* (223) expr ::= expr in_op LP exprlist RP */ + 219, /* (224) expr ::= LP select RP */ + 219, /* (225) expr ::= expr in_op LP select RP */ + 219, /* (226) expr ::= expr in_op nm dbnm paren_exprlist */ + 219, /* (227) expr ::= EXISTS LP select RP */ + 219, /* (228) expr ::= CASE case_operand case_exprlist case_else END */ + 282, /* (229) case_exprlist ::= case_exprlist WHEN expr THEN expr */ + 282, /* (230) case_exprlist ::= WHEN expr THEN expr */ + 283, /* (231) case_else ::= ELSE expr */ + 283, /* (232) case_else ::= */ + 281, /* (233) case_operand ::= */ + 264, /* (234) exprlist ::= */ + 255, /* (235) nexprlist ::= nexprlist COMMA expr */ + 255, /* (236) nexprlist ::= expr */ + 280, /* (237) paren_exprlist ::= */ + 280, /* (238) paren_exprlist ::= LP exprlist RP */ + 192, /* (239) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ + 284, /* (240) uniqueflag ::= UNIQUE */ + 284, /* (241) uniqueflag ::= */ + 223, /* (242) eidlist_opt ::= */ + 223, /* (243) eidlist_opt ::= LP eidlist RP */ + 234, /* (244) eidlist ::= eidlist COMMA nm collate sortorder */ + 234, /* (245) eidlist ::= nm collate sortorder */ + 285, /* (246) collate ::= */ + 285, /* (247) collate ::= COLLATE ID|STRING */ + 192, /* (248) cmd ::= DROP INDEX ifexists fullname */ + 192, /* (249) cmd ::= VACUUM vinto */ + 192, /* (250) cmd ::= VACUUM nm vinto */ + 286, /* (251) vinto ::= INTO expr */ + 286, /* (252) vinto ::= */ + 192, /* (253) cmd ::= PRAGMA nm dbnm */ + 192, /* (254) cmd ::= PRAGMA nm dbnm EQ nmnum */ + 192, /* (255) cmd ::= PRAGMA nm dbnm LP nmnum RP */ + 192, /* (256) cmd ::= PRAGMA nm dbnm EQ minus_num */ + 192, /* (257) cmd ::= PRAGMA nm dbnm LP minus_num RP */ + 213, /* (258) plus_num ::= PLUS INTEGER|FLOAT */ + 214, /* (259) minus_num ::= MINUS INTEGER|FLOAT */ + 192, /* (260) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ + 288, /* (261) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ + 290, /* (262) trigger_time ::= BEFORE|AFTER */ + 290, /* (263) trigger_time ::= INSTEAD OF */ + 290, /* (264) trigger_time ::= */ + 291, /* (265) trigger_event ::= DELETE|INSERT */ + 291, /* (266) trigger_event ::= UPDATE */ + 291, /* (267) trigger_event ::= UPDATE OF idlist */ + 293, /* (268) when_clause ::= */ + 293, /* (269) when_clause ::= WHEN expr */ + 289, /* (270) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ + 289, /* (271) trigger_cmd_list ::= trigger_cmd SEMI */ + 295, /* (272) trnm ::= nm DOT nm */ + 296, /* (273) tridxby ::= INDEXED BY nm */ + 296, /* (274) tridxby ::= NOT INDEXED */ + 294, /* (275) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ + 294, /* (276) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ + 294, /* (277) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ + 294, /* (278) trigger_cmd ::= scanpt select scanpt */ + 219, /* (279) expr ::= RAISE LP IGNORE RP */ + 219, /* (280) expr ::= RAISE LP raisetype COMMA expr RP */ + 238, /* (281) raisetype ::= ROLLBACK */ + 238, /* (282) raisetype ::= ABORT */ + 238, /* (283) raisetype ::= FAIL */ + 192, /* (284) cmd ::= DROP TRIGGER ifexists fullname */ + 192, /* (285) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ + 192, /* (286) cmd ::= DETACH database_kw_opt expr */ + 298, /* (287) key_opt ::= */ + 298, /* (288) key_opt ::= KEY expr */ + 192, /* (289) cmd ::= REINDEX */ + 192, /* (290) cmd ::= REINDEX nm dbnm */ + 192, /* (291) cmd ::= ANALYZE */ + 192, /* (292) cmd ::= ANALYZE nm dbnm */ + 192, /* (293) cmd ::= ALTER TABLE fullname RENAME TO nm */ + 192, /* (294) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ + 192, /* (295) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ + 299, /* (296) add_column_fullname ::= fullname */ + 192, /* (297) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ + 192, /* (298) cmd ::= create_vtab */ + 192, /* (299) cmd ::= create_vtab LP vtabarglist RP */ + 301, /* (300) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ + 303, /* (301) vtabarg ::= */ + 304, /* (302) vtabargtoken ::= ANY */ + 304, /* (303) vtabargtoken ::= lp anylist RP */ + 305, /* (304) lp ::= LP */ + 269, /* (305) with ::= WITH wqlist */ + 269, /* (306) with ::= WITH RECURSIVE wqlist */ + 308, /* (307) wqas ::= AS */ + 308, /* (308) wqas ::= AS MATERIALIZED */ + 308, /* (309) wqas ::= AS NOT MATERIALIZED */ + 307, /* (310) wqitem ::= withnm eidlist_opt wqas LP select RP */ + 309, /* (311) withnm ::= nm */ + 243, /* (312) wqlist ::= wqitem */ + 243, /* (313) wqlist ::= wqlist COMMA wqitem */ + 310, /* (314) windowdefn_list ::= windowdefn_list COMMA windowdefn */ + 311, /* (315) windowdefn ::= nm AS LP window RP */ + 312, /* (316) window ::= PARTITION BY nexprlist orderby_opt frame_opt */ + 312, /* (317) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ + 312, /* (318) window ::= ORDER BY sortlist frame_opt */ + 312, /* (319) window ::= nm ORDER BY sortlist frame_opt */ + 312, /* (320) window ::= nm frame_opt */ + 313, /* (321) frame_opt ::= */ + 313, /* (322) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ + 313, /* (323) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ + 317, /* (324) range_or_rows ::= RANGE|ROWS|GROUPS */ + 319, /* (325) frame_bound_s ::= frame_bound */ + 319, /* (326) frame_bound_s ::= UNBOUNDED PRECEDING */ + 320, /* (327) frame_bound_e ::= frame_bound */ + 320, /* (328) frame_bound_e ::= UNBOUNDED FOLLOWING */ + 318, /* (329) frame_bound ::= expr PRECEDING|FOLLOWING */ + 318, /* (330) frame_bound ::= CURRENT ROW */ + 321, /* (331) frame_exclude_opt ::= */ + 321, /* (332) frame_exclude_opt ::= EXCLUDE frame_exclude */ + 322, /* (333) frame_exclude ::= NO OTHERS */ + 322, /* (334) frame_exclude ::= CURRENT ROW */ + 322, /* (335) frame_exclude ::= GROUP|TIES */ + 253, /* (336) window_clause ::= WINDOW windowdefn_list */ + 276, /* (337) filter_over ::= filter_clause over_clause */ + 276, /* (338) filter_over ::= over_clause */ + 276, /* (339) filter_over ::= filter_clause */ + 316, /* (340) over_clause ::= OVER LP window RP */ + 316, /* (341) over_clause ::= OVER nm */ + 315, /* (342) filter_clause ::= FILTER LP WHERE expr RP */ + 218, /* (343) term ::= QNUMBER */ + 187, /* (344) input ::= cmdlist */ + 188, /* (345) cmdlist ::= cmdlist ecmd */ + 188, /* (346) cmdlist ::= ecmd */ + 189, /* (347) ecmd ::= SEMI */ + 189, /* (348) ecmd ::= cmdx SEMI */ + 189, /* (349) ecmd ::= explain cmdx SEMI */ + 194, /* (350) trans_opt ::= */ + 194, /* (351) trans_opt ::= TRANSACTION */ + 194, /* (352) trans_opt ::= TRANSACTION nm */ + 196, /* (353) savepoint_opt ::= SAVEPOINT */ + 196, /* (354) savepoint_opt ::= */ + 192, /* (355) cmd ::= create_table create_table_args */ + 205, /* (356) table_option_set ::= table_option */ + 203, /* (357) columnlist ::= columnlist COMMA columnname carglist */ + 203, /* (358) columnlist ::= columnname carglist */ + 195, /* (359) nm ::= ID|INDEXED|JOIN_KW */ + 195, /* (360) nm ::= STRING */ + 210, /* (361) typetoken ::= typename */ + 211, /* (362) typename ::= ID|STRING */ + 212, /* (363) signed ::= plus_num */ + 212, /* (364) signed ::= minus_num */ + 209, /* (365) carglist ::= carglist ccons */ + 209, /* (366) carglist ::= */ + 217, /* (367) ccons ::= NULL onconf */ + 217, /* (368) ccons ::= GENERATED ALWAYS AS generated */ + 217, /* (369) ccons ::= AS generated */ + 204, /* (370) conslist_opt ::= COMMA conslist */ + 230, /* (371) conslist ::= conslist tconscomma tcons */ + 230, /* (372) conslist ::= tcons */ + 231, /* (373) tconscomma ::= */ + 235, /* (374) defer_subclause_opt ::= defer_subclause */ + 237, /* (375) resolvetype ::= raisetype */ + 241, /* (376) selectnowith ::= oneselect */ + 242, /* (377) oneselect ::= values */ + 257, /* (378) sclp ::= selcollist COMMA */ + 258, /* (379) as ::= ID|STRING */ + 267, /* (380) indexed_opt ::= indexed_by */ + 275, /* (381) returning ::= */ + 219, /* (382) expr ::= term */ + 277, /* (383) likeop ::= LIKE_KW|MATCH */ + 281, /* (384) case_operand ::= expr */ + 264, /* (385) exprlist ::= nexprlist */ + 287, /* (386) nmnum ::= plus_num */ + 287, /* (387) nmnum ::= nm */ + 287, /* (388) nmnum ::= ON */ + 287, /* (389) nmnum ::= DELETE */ + 287, /* (390) nmnum ::= DEFAULT */ + 213, /* (391) plus_num ::= INTEGER|FLOAT */ + 292, /* (392) foreach_clause ::= */ + 292, /* (393) foreach_clause ::= FOR EACH ROW */ + 295, /* (394) trnm ::= nm */ + 296, /* (395) tridxby ::= */ + 297, /* (396) database_kw_opt ::= DATABASE */ + 297, /* (397) database_kw_opt ::= */ + 300, /* (398) kwcolumn_opt ::= */ + 300, /* (399) kwcolumn_opt ::= COLUMNKW */ + 302, /* (400) vtabarglist ::= vtabarg */ + 302, /* (401) vtabarglist ::= vtabarglist COMMA vtabarg */ + 303, /* (402) vtabarg ::= vtabarg vtabargtoken */ + 306, /* (403) anylist ::= */ + 306, /* (404) anylist ::= anylist LP anylist RP */ + 306, /* (405) anylist ::= anylist ANY */ + 269, /* (406) with ::= */ + 310, /* (407) windowdefn_list ::= windowdefn */ + 312, /* (408) window ::= frame_opt */ +}; + +/* For rule J, yyRuleInfoNRhs[J] contains the negative of the number +** of symbols on the right-hand side of that rule. */ +static const signed char yyRuleInfoNRhs[] = { + -1, /* (0) explain ::= EXPLAIN */ + -3, /* (1) explain ::= EXPLAIN QUERY PLAN */ + -1, /* (2) cmdx ::= cmd */ + -3, /* (3) cmd ::= BEGIN transtype trans_opt */ + 0, /* (4) transtype ::= */ + -1, /* (5) transtype ::= DEFERRED */ + -1, /* (6) transtype ::= IMMEDIATE */ + -1, /* (7) transtype ::= EXCLUSIVE */ + -2, /* (8) cmd ::= COMMIT|END trans_opt */ + -2, /* (9) cmd ::= ROLLBACK trans_opt */ + -2, /* (10) cmd ::= SAVEPOINT nm */ + -3, /* (11) cmd ::= RELEASE savepoint_opt nm */ + -5, /* (12) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ + -6, /* (13) create_table ::= createkw temp TABLE ifnotexists nm dbnm */ + -1, /* (14) createkw ::= CREATE */ + 0, /* (15) ifnotexists ::= */ + -3, /* (16) ifnotexists ::= IF NOT EXISTS */ + -1, /* (17) temp ::= TEMP */ + 0, /* (18) temp ::= */ + -5, /* (19) create_table_args ::= LP columnlist conslist_opt RP table_option_set */ + -2, /* (20) create_table_args ::= AS select */ + 0, /* (21) table_option_set ::= */ + -3, /* (22) table_option_set ::= table_option_set COMMA table_option */ + -2, /* (23) table_option ::= WITHOUT nm */ + -1, /* (24) table_option ::= nm */ + -2, /* (25) columnname ::= nm typetoken */ + 0, /* (26) typetoken ::= */ + -4, /* (27) typetoken ::= typename LP signed RP */ + -6, /* (28) typetoken ::= typename LP signed COMMA signed RP */ + -2, /* (29) typename ::= typename ID|STRING */ + 0, /* (30) scanpt ::= */ + 0, /* (31) scantok ::= */ + -2, /* (32) ccons ::= CONSTRAINT nm */ + -3, /* (33) ccons ::= DEFAULT scantok term */ + -4, /* (34) ccons ::= DEFAULT LP expr RP */ + -4, /* (35) ccons ::= DEFAULT PLUS scantok term */ + -4, /* (36) ccons ::= DEFAULT MINUS scantok term */ + -3, /* (37) ccons ::= DEFAULT scantok ID|INDEXED */ + -3, /* (38) ccons ::= NOT NULL onconf */ + -5, /* (39) ccons ::= PRIMARY KEY sortorder onconf autoinc */ + -2, /* (40) ccons ::= UNIQUE onconf */ + -4, /* (41) ccons ::= CHECK LP expr RP */ + -4, /* (42) ccons ::= REFERENCES nm eidlist_opt refargs */ + -1, /* (43) ccons ::= defer_subclause */ + -2, /* (44) ccons ::= COLLATE ID|STRING */ + -3, /* (45) generated ::= LP expr RP */ + -4, /* (46) generated ::= LP expr RP ID */ + 0, /* (47) autoinc ::= */ + -1, /* (48) autoinc ::= AUTOINCR */ + 0, /* (49) refargs ::= */ + -2, /* (50) refargs ::= refargs refarg */ + -2, /* (51) refarg ::= MATCH nm */ + -3, /* (52) refarg ::= ON INSERT refact */ + -3, /* (53) refarg ::= ON DELETE refact */ + -3, /* (54) refarg ::= ON UPDATE refact */ + -2, /* (55) refact ::= SET NULL */ + -2, /* (56) refact ::= SET DEFAULT */ + -1, /* (57) refact ::= CASCADE */ + -1, /* (58) refact ::= RESTRICT */ + -2, /* (59) refact ::= NO ACTION */ + -3, /* (60) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ + -2, /* (61) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ + 0, /* (62) init_deferred_pred_opt ::= */ + -2, /* (63) init_deferred_pred_opt ::= INITIALLY DEFERRED */ + -2, /* (64) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ + 0, /* (65) conslist_opt ::= */ + -1, /* (66) tconscomma ::= COMMA */ + -2, /* (67) tcons ::= CONSTRAINT nm */ + -7, /* (68) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ + -5, /* (69) tcons ::= UNIQUE LP sortlist RP onconf */ + -5, /* (70) tcons ::= CHECK LP expr RP onconf */ + -10, /* (71) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ + 0, /* (72) defer_subclause_opt ::= */ + 0, /* (73) onconf ::= */ + -3, /* (74) onconf ::= ON CONFLICT resolvetype */ + 0, /* (75) orconf ::= */ + -2, /* (76) orconf ::= OR resolvetype */ + -1, /* (77) resolvetype ::= IGNORE */ + -1, /* (78) resolvetype ::= REPLACE */ + -4, /* (79) cmd ::= DROP TABLE ifexists fullname */ + -2, /* (80) ifexists ::= IF EXISTS */ + 0, /* (81) ifexists ::= */ + -9, /* (82) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ + -4, /* (83) cmd ::= DROP VIEW ifexists fullname */ + -1, /* (84) cmd ::= select */ + -3, /* (85) select ::= WITH wqlist selectnowith */ + -4, /* (86) select ::= WITH RECURSIVE wqlist selectnowith */ + -1, /* (87) select ::= selectnowith */ + -3, /* (88) selectnowith ::= selectnowith multiselect_op oneselect */ + -1, /* (89) multiselect_op ::= UNION */ + -2, /* (90) multiselect_op ::= UNION ALL */ + -1, /* (91) multiselect_op ::= EXCEPT|INTERSECT */ + -9, /* (92) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ + -10, /* (93) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */ + -4, /* (94) values ::= VALUES LP nexprlist RP */ + -1, /* (95) oneselect ::= mvalues */ + -5, /* (96) mvalues ::= values COMMA LP nexprlist RP */ + -5, /* (97) mvalues ::= mvalues COMMA LP nexprlist RP */ + -1, /* (98) distinct ::= DISTINCT */ + -1, /* (99) distinct ::= ALL */ + 0, /* (100) distinct ::= */ + 0, /* (101) sclp ::= */ + -5, /* (102) selcollist ::= sclp scanpt expr scanpt as */ + -3, /* (103) selcollist ::= sclp scanpt STAR */ + -5, /* (104) selcollist ::= sclp scanpt nm DOT STAR */ + -2, /* (105) as ::= AS nm */ + 0, /* (106) as ::= */ + 0, /* (107) from ::= */ + -2, /* (108) from ::= FROM seltablist */ + -2, /* (109) stl_prefix ::= seltablist joinop */ + 0, /* (110) stl_prefix ::= */ + -5, /* (111) seltablist ::= stl_prefix nm dbnm as on_using */ + -6, /* (112) seltablist ::= stl_prefix nm dbnm as indexed_by on_using */ + -8, /* (113) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */ + -6, /* (114) seltablist ::= stl_prefix LP select RP as on_using */ + -6, /* (115) seltablist ::= stl_prefix LP seltablist RP as on_using */ + 0, /* (116) dbnm ::= */ + -2, /* (117) dbnm ::= DOT nm */ + -1, /* (118) fullname ::= nm */ + -3, /* (119) fullname ::= nm DOT nm */ + -1, /* (120) xfullname ::= nm */ + -3, /* (121) xfullname ::= nm DOT nm */ + -5, /* (122) xfullname ::= nm DOT nm AS nm */ + -3, /* (123) xfullname ::= nm AS nm */ + -1, /* (124) joinop ::= COMMA|JOIN */ + -2, /* (125) joinop ::= JOIN_KW JOIN */ + -3, /* (126) joinop ::= JOIN_KW nm JOIN */ + -4, /* (127) joinop ::= JOIN_KW nm nm JOIN */ + -2, /* (128) on_using ::= ON expr */ + -4, /* (129) on_using ::= USING LP idlist RP */ + 0, /* (130) on_using ::= */ + 0, /* (131) indexed_opt ::= */ + -3, /* (132) indexed_by ::= INDEXED BY nm */ + -2, /* (133) indexed_by ::= NOT INDEXED */ + 0, /* (134) orderby_opt ::= */ + -3, /* (135) orderby_opt ::= ORDER BY sortlist */ + -5, /* (136) sortlist ::= sortlist COMMA expr sortorder nulls */ + -3, /* (137) sortlist ::= expr sortorder nulls */ + -1, /* (138) sortorder ::= ASC */ + -1, /* (139) sortorder ::= DESC */ + 0, /* (140) sortorder ::= */ + -2, /* (141) nulls ::= NULLS FIRST */ + -2, /* (142) nulls ::= NULLS LAST */ + 0, /* (143) nulls ::= */ + 0, /* (144) groupby_opt ::= */ + -3, /* (145) groupby_opt ::= GROUP BY nexprlist */ + 0, /* (146) having_opt ::= */ + -2, /* (147) having_opt ::= HAVING expr */ + 0, /* (148) limit_opt ::= */ + -2, /* (149) limit_opt ::= LIMIT expr */ + -4, /* (150) limit_opt ::= LIMIT expr OFFSET expr */ + -4, /* (151) limit_opt ::= LIMIT expr COMMA expr */ + -6, /* (152) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */ + 0, /* (153) where_opt ::= */ + -2, /* (154) where_opt ::= WHERE expr */ + 0, /* (155) where_opt_ret ::= */ + -2, /* (156) where_opt_ret ::= WHERE expr */ + -2, /* (157) where_opt_ret ::= RETURNING selcollist */ + -4, /* (158) where_opt_ret ::= WHERE expr RETURNING selcollist */ + -9, /* (159) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */ + -5, /* (160) setlist ::= setlist COMMA nm EQ expr */ + -7, /* (161) setlist ::= setlist COMMA LP idlist RP EQ expr */ + -3, /* (162) setlist ::= nm EQ expr */ + -5, /* (163) setlist ::= LP idlist RP EQ expr */ + -7, /* (164) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ + -8, /* (165) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */ + 0, /* (166) upsert ::= */ + -2, /* (167) upsert ::= RETURNING selcollist */ + -12, /* (168) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */ + -9, /* (169) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */ + -5, /* (170) upsert ::= ON CONFLICT DO NOTHING returning */ + -8, /* (171) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */ + -2, /* (172) returning ::= RETURNING selcollist */ + -2, /* (173) insert_cmd ::= INSERT orconf */ + -1, /* (174) insert_cmd ::= REPLACE */ + 0, /* (175) idlist_opt ::= */ + -3, /* (176) idlist_opt ::= LP idlist RP */ + -3, /* (177) idlist ::= idlist COMMA nm */ + -1, /* (178) idlist ::= nm */ + -3, /* (179) expr ::= LP expr RP */ + -1, /* (180) expr ::= ID|INDEXED|JOIN_KW */ + -3, /* (181) expr ::= nm DOT nm */ + -5, /* (182) expr ::= nm DOT nm DOT nm */ + -1, /* (183) term ::= NULL|FLOAT|BLOB */ + -1, /* (184) term ::= STRING */ + -1, /* (185) term ::= INTEGER */ + -1, /* (186) expr ::= VARIABLE */ + -3, /* (187) expr ::= expr COLLATE ID|STRING */ + -6, /* (188) expr ::= CAST LP expr AS typetoken RP */ + -5, /* (189) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */ + -8, /* (190) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */ + -4, /* (191) expr ::= ID|INDEXED|JOIN_KW LP STAR RP */ + -6, /* (192) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */ + -9, /* (193) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */ + -5, /* (194) expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */ + -1, /* (195) term ::= CTIME_KW */ + -5, /* (196) expr ::= LP nexprlist COMMA expr RP */ + -3, /* (197) expr ::= expr AND expr */ + -3, /* (198) expr ::= expr OR expr */ + -3, /* (199) expr ::= expr LT|GT|GE|LE expr */ + -3, /* (200) expr ::= expr EQ|NE expr */ + -3, /* (201) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ + -3, /* (202) expr ::= expr PLUS|MINUS expr */ + -3, /* (203) expr ::= expr STAR|SLASH|REM expr */ + -3, /* (204) expr ::= expr CONCAT expr */ + -2, /* (205) likeop ::= NOT LIKE_KW|MATCH */ + -3, /* (206) expr ::= expr likeop expr */ + -5, /* (207) expr ::= expr likeop expr ESCAPE expr */ + -2, /* (208) expr ::= expr ISNULL|NOTNULL */ + -3, /* (209) expr ::= expr NOT NULL */ + -3, /* (210) expr ::= expr IS expr */ + -4, /* (211) expr ::= expr IS NOT expr */ + -6, /* (212) expr ::= expr IS NOT DISTINCT FROM expr */ + -5, /* (213) expr ::= expr IS DISTINCT FROM expr */ + -2, /* (214) expr ::= NOT expr */ + -2, /* (215) expr ::= BITNOT expr */ + -2, /* (216) expr ::= PLUS|MINUS expr */ + -3, /* (217) expr ::= expr PTR expr */ + -1, /* (218) between_op ::= BETWEEN */ + -2, /* (219) between_op ::= NOT BETWEEN */ + -5, /* (220) expr ::= expr between_op expr AND expr */ + -1, /* (221) in_op ::= IN */ + -2, /* (222) in_op ::= NOT IN */ + -5, /* (223) expr ::= expr in_op LP exprlist RP */ + -3, /* (224) expr ::= LP select RP */ + -5, /* (225) expr ::= expr in_op LP select RP */ + -5, /* (226) expr ::= expr in_op nm dbnm paren_exprlist */ + -4, /* (227) expr ::= EXISTS LP select RP */ + -5, /* (228) expr ::= CASE case_operand case_exprlist case_else END */ + -5, /* (229) case_exprlist ::= case_exprlist WHEN expr THEN expr */ + -4, /* (230) case_exprlist ::= WHEN expr THEN expr */ + -2, /* (231) case_else ::= ELSE expr */ + 0, /* (232) case_else ::= */ + 0, /* (233) case_operand ::= */ + 0, /* (234) exprlist ::= */ + -3, /* (235) nexprlist ::= nexprlist COMMA expr */ + -1, /* (236) nexprlist ::= expr */ + 0, /* (237) paren_exprlist ::= */ + -3, /* (238) paren_exprlist ::= LP exprlist RP */ + -12, /* (239) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ + -1, /* (240) uniqueflag ::= UNIQUE */ + 0, /* (241) uniqueflag ::= */ + 0, /* (242) eidlist_opt ::= */ + -3, /* (243) eidlist_opt ::= LP eidlist RP */ + -5, /* (244) eidlist ::= eidlist COMMA nm collate sortorder */ + -3, /* (245) eidlist ::= nm collate sortorder */ + 0, /* (246) collate ::= */ + -2, /* (247) collate ::= COLLATE ID|STRING */ + -4, /* (248) cmd ::= DROP INDEX ifexists fullname */ + -2, /* (249) cmd ::= VACUUM vinto */ + -3, /* (250) cmd ::= VACUUM nm vinto */ + -2, /* (251) vinto ::= INTO expr */ + 0, /* (252) vinto ::= */ + -3, /* (253) cmd ::= PRAGMA nm dbnm */ + -5, /* (254) cmd ::= PRAGMA nm dbnm EQ nmnum */ + -6, /* (255) cmd ::= PRAGMA nm dbnm LP nmnum RP */ + -5, /* (256) cmd ::= PRAGMA nm dbnm EQ minus_num */ + -6, /* (257) cmd ::= PRAGMA nm dbnm LP minus_num RP */ + -2, /* (258) plus_num ::= PLUS INTEGER|FLOAT */ + -2, /* (259) minus_num ::= MINUS INTEGER|FLOAT */ + -5, /* (260) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ + -11, /* (261) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ + -1, /* (262) trigger_time ::= BEFORE|AFTER */ + -2, /* (263) trigger_time ::= INSTEAD OF */ + 0, /* (264) trigger_time ::= */ + -1, /* (265) trigger_event ::= DELETE|INSERT */ + -1, /* (266) trigger_event ::= UPDATE */ + -3, /* (267) trigger_event ::= UPDATE OF idlist */ + 0, /* (268) when_clause ::= */ + -2, /* (269) when_clause ::= WHEN expr */ + -3, /* (270) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ + -2, /* (271) trigger_cmd_list ::= trigger_cmd SEMI */ + -3, /* (272) trnm ::= nm DOT nm */ + -3, /* (273) tridxby ::= INDEXED BY nm */ + -2, /* (274) tridxby ::= NOT INDEXED */ + -9, /* (275) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ + -8, /* (276) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ + -6, /* (277) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ + -3, /* (278) trigger_cmd ::= scanpt select scanpt */ + -4, /* (279) expr ::= RAISE LP IGNORE RP */ + -6, /* (280) expr ::= RAISE LP raisetype COMMA expr RP */ + -1, /* (281) raisetype ::= ROLLBACK */ + -1, /* (282) raisetype ::= ABORT */ + -1, /* (283) raisetype ::= FAIL */ + -4, /* (284) cmd ::= DROP TRIGGER ifexists fullname */ + -6, /* (285) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ + -3, /* (286) cmd ::= DETACH database_kw_opt expr */ + 0, /* (287) key_opt ::= */ + -2, /* (288) key_opt ::= KEY expr */ + -1, /* (289) cmd ::= REINDEX */ + -3, /* (290) cmd ::= REINDEX nm dbnm */ + -1, /* (291) cmd ::= ANALYZE */ + -3, /* (292) cmd ::= ANALYZE nm dbnm */ + -6, /* (293) cmd ::= ALTER TABLE fullname RENAME TO nm */ + -7, /* (294) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ + -6, /* (295) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ + -1, /* (296) add_column_fullname ::= fullname */ + -8, /* (297) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ + -1, /* (298) cmd ::= create_vtab */ + -4, /* (299) cmd ::= create_vtab LP vtabarglist RP */ + -8, /* (300) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ + 0, /* (301) vtabarg ::= */ + -1, /* (302) vtabargtoken ::= ANY */ + -3, /* (303) vtabargtoken ::= lp anylist RP */ + -1, /* (304) lp ::= LP */ + -2, /* (305) with ::= WITH wqlist */ + -3, /* (306) with ::= WITH RECURSIVE wqlist */ + -1, /* (307) wqas ::= AS */ + -2, /* (308) wqas ::= AS MATERIALIZED */ + -3, /* (309) wqas ::= AS NOT MATERIALIZED */ + -6, /* (310) wqitem ::= withnm eidlist_opt wqas LP select RP */ + -1, /* (311) withnm ::= nm */ + -1, /* (312) wqlist ::= wqitem */ + -3, /* (313) wqlist ::= wqlist COMMA wqitem */ + -3, /* (314) windowdefn_list ::= windowdefn_list COMMA windowdefn */ + -5, /* (315) windowdefn ::= nm AS LP window RP */ + -5, /* (316) window ::= PARTITION BY nexprlist orderby_opt frame_opt */ + -6, /* (317) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ + -4, /* (318) window ::= ORDER BY sortlist frame_opt */ + -5, /* (319) window ::= nm ORDER BY sortlist frame_opt */ + -2, /* (320) window ::= nm frame_opt */ + 0, /* (321) frame_opt ::= */ + -3, /* (322) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ + -6, /* (323) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ + -1, /* (324) range_or_rows ::= RANGE|ROWS|GROUPS */ + -1, /* (325) frame_bound_s ::= frame_bound */ + -2, /* (326) frame_bound_s ::= UNBOUNDED PRECEDING */ + -1, /* (327) frame_bound_e ::= frame_bound */ + -2, /* (328) frame_bound_e ::= UNBOUNDED FOLLOWING */ + -2, /* (329) frame_bound ::= expr PRECEDING|FOLLOWING */ + -2, /* (330) frame_bound ::= CURRENT ROW */ + 0, /* (331) frame_exclude_opt ::= */ + -2, /* (332) frame_exclude_opt ::= EXCLUDE frame_exclude */ + -2, /* (333) frame_exclude ::= NO OTHERS */ + -2, /* (334) frame_exclude ::= CURRENT ROW */ + -1, /* (335) frame_exclude ::= GROUP|TIES */ + -2, /* (336) window_clause ::= WINDOW windowdefn_list */ + -2, /* (337) filter_over ::= filter_clause over_clause */ + -1, /* (338) filter_over ::= over_clause */ + -1, /* (339) filter_over ::= filter_clause */ + -4, /* (340) over_clause ::= OVER LP window RP */ + -2, /* (341) over_clause ::= OVER nm */ + -5, /* (342) filter_clause ::= FILTER LP WHERE expr RP */ + -1, /* (343) term ::= QNUMBER */ + -1, /* (344) input ::= cmdlist */ + -2, /* (345) cmdlist ::= cmdlist ecmd */ + -1, /* (346) cmdlist ::= ecmd */ + -1, /* (347) ecmd ::= SEMI */ + -2, /* (348) ecmd ::= cmdx SEMI */ + -3, /* (349) ecmd ::= explain cmdx SEMI */ + 0, /* (350) trans_opt ::= */ + -1, /* (351) trans_opt ::= TRANSACTION */ + -2, /* (352) trans_opt ::= TRANSACTION nm */ + -1, /* (353) savepoint_opt ::= SAVEPOINT */ + 0, /* (354) savepoint_opt ::= */ + -2, /* (355) cmd ::= create_table create_table_args */ + -1, /* (356) table_option_set ::= table_option */ + -4, /* (357) columnlist ::= columnlist COMMA columnname carglist */ + -2, /* (358) columnlist ::= columnname carglist */ + -1, /* (359) nm ::= ID|INDEXED|JOIN_KW */ + -1, /* (360) nm ::= STRING */ + -1, /* (361) typetoken ::= typename */ + -1, /* (362) typename ::= ID|STRING */ + -1, /* (363) signed ::= plus_num */ + -1, /* (364) signed ::= minus_num */ + -2, /* (365) carglist ::= carglist ccons */ + 0, /* (366) carglist ::= */ + -2, /* (367) ccons ::= NULL onconf */ + -4, /* (368) ccons ::= GENERATED ALWAYS AS generated */ + -2, /* (369) ccons ::= AS generated */ + -2, /* (370) conslist_opt ::= COMMA conslist */ + -3, /* (371) conslist ::= conslist tconscomma tcons */ + -1, /* (372) conslist ::= tcons */ + 0, /* (373) tconscomma ::= */ + -1, /* (374) defer_subclause_opt ::= defer_subclause */ + -1, /* (375) resolvetype ::= raisetype */ + -1, /* (376) selectnowith ::= oneselect */ + -1, /* (377) oneselect ::= values */ + -2, /* (378) sclp ::= selcollist COMMA */ + -1, /* (379) as ::= ID|STRING */ + -1, /* (380) indexed_opt ::= indexed_by */ + 0, /* (381) returning ::= */ + -1, /* (382) expr ::= term */ + -1, /* (383) likeop ::= LIKE_KW|MATCH */ + -1, /* (384) case_operand ::= expr */ + -1, /* (385) exprlist ::= nexprlist */ + -1, /* (386) nmnum ::= plus_num */ + -1, /* (387) nmnum ::= nm */ + -1, /* (388) nmnum ::= ON */ + -1, /* (389) nmnum ::= DELETE */ + -1, /* (390) nmnum ::= DEFAULT */ + -1, /* (391) plus_num ::= INTEGER|FLOAT */ + 0, /* (392) foreach_clause ::= */ + -3, /* (393) foreach_clause ::= FOR EACH ROW */ + -1, /* (394) trnm ::= nm */ + 0, /* (395) tridxby ::= */ + -1, /* (396) database_kw_opt ::= DATABASE */ + 0, /* (397) database_kw_opt ::= */ + 0, /* (398) kwcolumn_opt ::= */ + -1, /* (399) kwcolumn_opt ::= COLUMNKW */ + -1, /* (400) vtabarglist ::= vtabarg */ + -3, /* (401) vtabarglist ::= vtabarglist COMMA vtabarg */ + -2, /* (402) vtabarg ::= vtabarg vtabargtoken */ + 0, /* (403) anylist ::= */ + -4, /* (404) anylist ::= anylist LP anylist RP */ + -2, /* (405) anylist ::= anylist ANY */ + 0, /* (406) with ::= */ + -1, /* (407) windowdefn_list ::= windowdefn */ + -1, /* (408) window ::= frame_opt */ +}; + +static void yy_accept(yyParser*); /* Forward Declaration */ + +/* +** Perform a reduce action and the shift that must immediately +** follow the reduce. +** +** The yyLookahead and yyLookaheadToken parameters provide reduce actions +** access to the lookahead token (if any). The yyLookahead will be YYNOCODE +** if the lookahead token has already been consumed. As this procedure is +** only called from one place, optimizing compilers will in-line it, which +** means that the extra parameters have no performance impact. +*/ +static YYACTIONTYPE yy_reduce( + yyParser *yypParser, /* The parser */ + unsigned int yyruleno, /* Number of the rule by which to reduce */ + int yyLookahead, /* Lookahead token, or YYNOCODE if none */ + sqlite3ParserTOKENTYPE yyLookaheadToken /* Value of the lookahead token */ + sqlite3ParserCTX_PDECL /* %extra_context */ +){ + int yygoto; /* The next state */ + YYACTIONTYPE yyact; /* The next action */ + yyStackEntry *yymsp; /* The top of the parser's stack */ + int yysize; /* Amount to pop the stack */ + sqlite3ParserARG_FETCH + (void)yyLookahead; + (void)yyLookaheadToken; + yymsp = yypParser->yytos; + + switch( yyruleno ){ + /* Beginning here are the reduction cases. A typical example + ** follows: + ** case 0: + ** #line + ** { ... } // User supplied code + ** #line + ** break; + */ +/********** Begin reduce actions **********************************************/ + YYMINORTYPE yylhsminor; + case 0: /* explain ::= EXPLAIN */ +{ if( pParse->pReprepare==0 ) pParse->explain = 1; } + break; + case 1: /* explain ::= EXPLAIN QUERY PLAN */ +{ if( pParse->pReprepare==0 ) pParse->explain = 2; } + break; + case 2: /* cmdx ::= cmd */ +{ sqlite3FinishCoding(pParse); } + break; + case 3: /* cmd ::= BEGIN transtype trans_opt */ +{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy502);} + break; + case 4: /* transtype ::= */ +{yymsp[1].minor.yy502 = TK_DEFERRED;} + break; + case 5: /* transtype ::= DEFERRED */ + case 6: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==6); + case 7: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==7); + case 324: /* range_or_rows ::= RANGE|ROWS|GROUPS */ yytestcase(yyruleno==324); +{yymsp[0].minor.yy502 = yymsp[0].major; /*A-overwrites-X*/} + break; + case 8: /* cmd ::= COMMIT|END trans_opt */ + case 9: /* cmd ::= ROLLBACK trans_opt */ yytestcase(yyruleno==9); +{sqlite3EndTransaction(pParse,yymsp[-1].major);} + break; + case 10: /* cmd ::= SAVEPOINT nm */ +{ + sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &yymsp[0].minor.yy0); +} + break; + case 11: /* cmd ::= RELEASE savepoint_opt nm */ +{ + sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &yymsp[0].minor.yy0); +} + break; + case 12: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ +{ + sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &yymsp[0].minor.yy0); +} + break; + case 13: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */ +{ + sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy502,0,0,yymsp[-2].minor.yy502); +} + break; + case 14: /* createkw ::= CREATE */ +{ + disableLookaside(pParse); +} + break; + case 15: /* ifnotexists ::= */ + case 18: /* temp ::= */ yytestcase(yyruleno==18); + case 47: /* autoinc ::= */ yytestcase(yyruleno==47); + case 62: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==62); + case 72: /* defer_subclause_opt ::= */ yytestcase(yyruleno==72); + case 81: /* ifexists ::= */ yytestcase(yyruleno==81); + case 100: /* distinct ::= */ yytestcase(yyruleno==100); + case 246: /* collate ::= */ yytestcase(yyruleno==246); +{yymsp[1].minor.yy502 = 0;} + break; + case 16: /* ifnotexists ::= IF NOT EXISTS */ +{yymsp[-2].minor.yy502 = 1;} + break; + case 17: /* temp ::= TEMP */ +{yymsp[0].minor.yy502 = pParse->db->init.busy==0;} + break; + case 19: /* create_table_args ::= LP columnlist conslist_opt RP table_option_set */ +{ + sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy9,0); +} + break; + case 20: /* create_table_args ::= AS select */ +{ + sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy637); + sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy637); +} + break; + case 21: /* table_option_set ::= */ +{yymsp[1].minor.yy9 = 0;} + break; + case 22: /* table_option_set ::= table_option_set COMMA table_option */ +{yylhsminor.yy9 = yymsp[-2].minor.yy9|yymsp[0].minor.yy9;} + yymsp[-2].minor.yy9 = yylhsminor.yy9; + break; + case 23: /* table_option ::= WITHOUT nm */ +{ + if( yymsp[0].minor.yy0.n==5 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"rowid",5)==0 ){ + yymsp[-1].minor.yy9 = TF_WithoutRowid | TF_NoVisibleRowid; + }else{ + yymsp[-1].minor.yy9 = 0; + sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z); + } +} + break; + case 24: /* table_option ::= nm */ +{ + if( yymsp[0].minor.yy0.n==6 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"strict",6)==0 ){ + yylhsminor.yy9 = TF_Strict; + }else{ + yylhsminor.yy9 = 0; + sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z); + } +} + yymsp[0].minor.yy9 = yylhsminor.yy9; + break; + case 25: /* columnname ::= nm typetoken */ +{sqlite3AddColumn(pParse,yymsp[-1].minor.yy0,yymsp[0].minor.yy0);} + break; + case 26: /* typetoken ::= */ + case 65: /* conslist_opt ::= */ yytestcase(yyruleno==65); + case 106: /* as ::= */ yytestcase(yyruleno==106); +{yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = 0;} + break; + case 27: /* typetoken ::= typename LP signed RP */ +{ + yymsp[-3].minor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-3].minor.yy0.z); +} + break; + case 28: /* typetoken ::= typename LP signed COMMA signed RP */ +{ + yymsp[-5].minor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-5].minor.yy0.z); +} + break; + case 29: /* typename ::= typename ID|STRING */ +{yymsp[-1].minor.yy0.n=yymsp[0].minor.yy0.n+(int)(yymsp[0].minor.yy0.z-yymsp[-1].minor.yy0.z);} + break; + case 30: /* scanpt ::= */ +{ + assert( yyLookahead!=YYNOCODE ); + yymsp[1].minor.yy342 = yyLookaheadToken.z; +} + break; + case 31: /* scantok ::= */ +{ + assert( yyLookahead!=YYNOCODE ); + yymsp[1].minor.yy0 = yyLookaheadToken; +} + break; + case 32: /* ccons ::= CONSTRAINT nm */ + case 67: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==67); +{ASSERT_IS_CREATE; pParse->u1.cr.constraintName = yymsp[0].minor.yy0;} + break; + case 33: /* ccons ::= DEFAULT scantok term */ +{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy590,yymsp[-1].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);} + break; + case 34: /* ccons ::= DEFAULT LP expr RP */ +{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy590,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);} + break; + case 35: /* ccons ::= DEFAULT PLUS scantok term */ +{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy590,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);} + break; + case 36: /* ccons ::= DEFAULT MINUS scantok term */ +{ + Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy590, 0); + sqlite3AddDefaultValue(pParse,p,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]); +} + break; + case 37: /* ccons ::= DEFAULT scantok ID|INDEXED */ +{ + Expr *p = tokenExpr(pParse, TK_STRING, yymsp[0].minor.yy0); + if( p ){ + sqlite3ExprIdToTrueFalse(p); + testcase( p->op==TK_TRUEFALSE && sqlite3ExprTruthValue(p) ); + } + sqlite3AddDefaultValue(pParse,p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.z+yymsp[0].minor.yy0.n); +} + break; + case 38: /* ccons ::= NOT NULL onconf */ +{sqlite3AddNotNull(pParse, yymsp[0].minor.yy502);} + break; + case 39: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */ +{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy502,yymsp[0].minor.yy502,yymsp[-2].minor.yy502);} + break; + case 40: /* ccons ::= UNIQUE onconf */ +{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy502,0,0,0,0, + SQLITE_IDXTYPE_UNIQUE);} + break; + case 41: /* ccons ::= CHECK LP expr RP */ +{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy590,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy0.z);} + break; + case 42: /* ccons ::= REFERENCES nm eidlist_opt refargs */ +{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy402,yymsp[0].minor.yy502);} + break; + case 43: /* ccons ::= defer_subclause */ +{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy502);} + break; + case 44: /* ccons ::= COLLATE ID|STRING */ +{sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);} + break; + case 45: /* generated ::= LP expr RP */ +{sqlite3AddGenerated(pParse,yymsp[-1].minor.yy590,0);} + break; + case 46: /* generated ::= LP expr RP ID */ +{sqlite3AddGenerated(pParse,yymsp[-2].minor.yy590,&yymsp[0].minor.yy0);} + break; + case 48: /* autoinc ::= AUTOINCR */ +{yymsp[0].minor.yy502 = 1;} + break; + case 49: /* refargs ::= */ +{ yymsp[1].minor.yy502 = OE_None*0x0101; /* EV: R-19803-45884 */} + break; + case 50: /* refargs ::= refargs refarg */ +{ yymsp[-1].minor.yy502 = (yymsp[-1].minor.yy502 & ~yymsp[0].minor.yy481.mask) | yymsp[0].minor.yy481.value; } + break; + case 51: /* refarg ::= MATCH nm */ +{ yymsp[-1].minor.yy481.value = 0; yymsp[-1].minor.yy481.mask = 0x000000; } + break; + case 52: /* refarg ::= ON INSERT refact */ +{ yymsp[-2].minor.yy481.value = 0; yymsp[-2].minor.yy481.mask = 0x000000; } + break; + case 53: /* refarg ::= ON DELETE refact */ +{ yymsp[-2].minor.yy481.value = yymsp[0].minor.yy502; yymsp[-2].minor.yy481.mask = 0x0000ff; } + break; + case 54: /* refarg ::= ON UPDATE refact */ +{ yymsp[-2].minor.yy481.value = yymsp[0].minor.yy502<<8; yymsp[-2].minor.yy481.mask = 0x00ff00; } + break; + case 55: /* refact ::= SET NULL */ +{ yymsp[-1].minor.yy502 = OE_SetNull; /* EV: R-33326-45252 */} + break; + case 56: /* refact ::= SET DEFAULT */ +{ yymsp[-1].minor.yy502 = OE_SetDflt; /* EV: R-33326-45252 */} + break; + case 57: /* refact ::= CASCADE */ +{ yymsp[0].minor.yy502 = OE_Cascade; /* EV: R-33326-45252 */} + break; + case 58: /* refact ::= RESTRICT */ +{ yymsp[0].minor.yy502 = OE_Restrict; /* EV: R-33326-45252 */} + break; + case 59: /* refact ::= NO ACTION */ +{ yymsp[-1].minor.yy502 = OE_None; /* EV: R-33326-45252 */} + break; + case 60: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ +{yymsp[-2].minor.yy502 = 0;} + break; + case 61: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ + case 76: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==76); + case 173: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==173); +{yymsp[-1].minor.yy502 = yymsp[0].minor.yy502;} + break; + case 63: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ + case 80: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==80); + case 219: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==219); + case 222: /* in_op ::= NOT IN */ yytestcase(yyruleno==222); + case 247: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==247); +{yymsp[-1].minor.yy502 = 1;} + break; + case 64: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ +{yymsp[-1].minor.yy502 = 0;} + break; + case 66: /* tconscomma ::= COMMA */ +{ASSERT_IS_CREATE; pParse->u1.cr.constraintName.n = 0;} + break; + case 68: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ +{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy402,yymsp[0].minor.yy502,yymsp[-2].minor.yy502,0);} + break; + case 69: /* tcons ::= UNIQUE LP sortlist RP onconf */ +{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy402,yymsp[0].minor.yy502,0,0,0,0, + SQLITE_IDXTYPE_UNIQUE);} + break; + case 70: /* tcons ::= CHECK LP expr RP onconf */ +{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy590,yymsp[-3].minor.yy0.z,yymsp[-1].minor.yy0.z);} + break; + case 71: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ +{ + sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy402, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy402, yymsp[-1].minor.yy502); + sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy502); +} + break; + case 73: /* onconf ::= */ + case 75: /* orconf ::= */ yytestcase(yyruleno==75); +{yymsp[1].minor.yy502 = OE_Default;} + break; + case 74: /* onconf ::= ON CONFLICT resolvetype */ +{yymsp[-2].minor.yy502 = yymsp[0].minor.yy502;} + break; + case 77: /* resolvetype ::= IGNORE */ +{yymsp[0].minor.yy502 = OE_Ignore;} + break; + case 78: /* resolvetype ::= REPLACE */ + case 174: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==174); +{yymsp[0].minor.yy502 = OE_Replace;} + break; + case 79: /* cmd ::= DROP TABLE ifexists fullname */ +{ + sqlite3DropTable(pParse, yymsp[0].minor.yy563, 0, yymsp[-1].minor.yy502); +} + break; + case 82: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ +{ + sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy402, yymsp[0].minor.yy637, yymsp[-7].minor.yy502, yymsp[-5].minor.yy502); +} + break; + case 83: /* cmd ::= DROP VIEW ifexists fullname */ +{ + sqlite3DropTable(pParse, yymsp[0].minor.yy563, 1, yymsp[-1].minor.yy502); +} + break; + case 84: /* cmd ::= select */ +{ + SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0, 0}; + if( (pParse->db->mDbFlags & DBFLAG_EncodingFixed)!=0 + || sqlite3ReadSchema(pParse)==SQLITE_OK + ){ + sqlite3Select(pParse, yymsp[0].minor.yy637, &dest); + } + sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy637); +} + break; + case 85: /* select ::= WITH wqlist selectnowith */ +{yymsp[-2].minor.yy637 = attachWithToSelect(pParse,yymsp[0].minor.yy637,yymsp[-1].minor.yy125);} + break; + case 86: /* select ::= WITH RECURSIVE wqlist selectnowith */ +{yymsp[-3].minor.yy637 = attachWithToSelect(pParse,yymsp[0].minor.yy637,yymsp[-1].minor.yy125);} + break; + case 87: /* select ::= selectnowith */ +{ + Select *p = yymsp[0].minor.yy637; + if( p ){ + parserDoubleLinkSelect(pParse, p); + } +} + break; + case 88: /* selectnowith ::= selectnowith multiselect_op oneselect */ +{ + Select *pRhs = yymsp[0].minor.yy637; + Select *pLhs = yymsp[-2].minor.yy637; + if( pRhs && pRhs->pPrior ){ + SrcList *pFrom; + Token x; + x.n = 0; + parserDoubleLinkSelect(pParse, pRhs); + pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0); + pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0); + } + if( pRhs ){ + pRhs->op = (u8)yymsp[-1].minor.yy502; + pRhs->pPrior = pLhs; + if( ALWAYS(pLhs) ) pLhs->selFlags &= ~(u32)SF_MultiValue; + pRhs->selFlags &= ~(u32)SF_MultiValue; + if( yymsp[-1].minor.yy502!=TK_ALL ) pParse->hasCompound = 1; + }else{ + sqlite3SelectDelete(pParse->db, pLhs); + } + yymsp[-2].minor.yy637 = pRhs; +} + break; + case 89: /* multiselect_op ::= UNION */ + case 91: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==91); +{yymsp[0].minor.yy502 = yymsp[0].major; /*A-overwrites-OP*/} + break; + case 90: /* multiselect_op ::= UNION ALL */ +{yymsp[-1].minor.yy502 = TK_ALL;} + break; + case 92: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ +{ + yymsp[-8].minor.yy637 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy402,yymsp[-5].minor.yy563,yymsp[-4].minor.yy590,yymsp[-3].minor.yy402,yymsp[-2].minor.yy590,yymsp[-1].minor.yy402,yymsp[-7].minor.yy502,yymsp[0].minor.yy590); +} + break; + case 93: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */ +{ + yymsp[-9].minor.yy637 = sqlite3SelectNew(pParse,yymsp[-7].minor.yy402,yymsp[-6].minor.yy563,yymsp[-5].minor.yy590,yymsp[-4].minor.yy402,yymsp[-3].minor.yy590,yymsp[-1].minor.yy402,yymsp[-8].minor.yy502,yymsp[0].minor.yy590); + if( yymsp[-9].minor.yy637 ){ + yymsp[-9].minor.yy637->pWinDefn = yymsp[-2].minor.yy483; + }else{ + sqlite3WindowListDelete(pParse->db, yymsp[-2].minor.yy483); + } +} + break; + case 94: /* values ::= VALUES LP nexprlist RP */ +{ + yymsp[-3].minor.yy637 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy402,0,0,0,0,0,SF_Values,0); +} + break; + case 95: /* oneselect ::= mvalues */ +{ + sqlite3MultiValuesEnd(pParse, yymsp[0].minor.yy637); +} + break; + case 96: /* mvalues ::= values COMMA LP nexprlist RP */ + case 97: /* mvalues ::= mvalues COMMA LP nexprlist RP */ yytestcase(yyruleno==97); +{ + yymsp[-4].minor.yy637 = sqlite3MultiValues(pParse, yymsp[-4].minor.yy637, yymsp[-1].minor.yy402); +} + break; + case 98: /* distinct ::= DISTINCT */ +{yymsp[0].minor.yy502 = SF_Distinct;} + break; + case 99: /* distinct ::= ALL */ +{yymsp[0].minor.yy502 = SF_All;} + break; + case 101: /* sclp ::= */ + case 134: /* orderby_opt ::= */ yytestcase(yyruleno==134); + case 144: /* groupby_opt ::= */ yytestcase(yyruleno==144); + case 234: /* exprlist ::= */ yytestcase(yyruleno==234); + case 237: /* paren_exprlist ::= */ yytestcase(yyruleno==237); + case 242: /* eidlist_opt ::= */ yytestcase(yyruleno==242); +{yymsp[1].minor.yy402 = 0;} + break; + case 102: /* selcollist ::= sclp scanpt expr scanpt as */ +{ + yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy402, yymsp[-2].minor.yy590); + if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy402, &yymsp[0].minor.yy0, 1); + sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy402,yymsp[-3].minor.yy342,yymsp[-1].minor.yy342); +} + break; + case 103: /* selcollist ::= sclp scanpt STAR */ +{ + Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0); + sqlite3ExprSetErrorOffset(p, (int)(yymsp[0].minor.yy0.z - pParse->zTail)); + yymsp[-2].minor.yy402 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy402, p); +} + break; + case 104: /* selcollist ::= sclp scanpt nm DOT STAR */ +{ + Expr *pRight, *pLeft, *pDot; + pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0); + sqlite3ExprSetErrorOffset(pRight, (int)(yymsp[0].minor.yy0.z - pParse->zTail)); + pLeft = tokenExpr(pParse, TK_ID, yymsp[-2].minor.yy0); + pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight); + yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy402, pDot); +} + break; + case 105: /* as ::= AS nm */ + case 117: /* dbnm ::= DOT nm */ yytestcase(yyruleno==117); + case 258: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==258); + case 259: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==259); +{yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;} + break; + case 107: /* from ::= */ + case 110: /* stl_prefix ::= */ yytestcase(yyruleno==110); +{yymsp[1].minor.yy563 = 0;} + break; + case 108: /* from ::= FROM seltablist */ +{ + yymsp[-1].minor.yy563 = yymsp[0].minor.yy563; + sqlite3SrcListShiftJoinType(pParse,yymsp[-1].minor.yy563); +} + break; + case 109: /* stl_prefix ::= seltablist joinop */ +{ + if( ALWAYS(yymsp[-1].minor.yy563 && yymsp[-1].minor.yy563->nSrc>0) ) yymsp[-1].minor.yy563->a[yymsp[-1].minor.yy563->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy502; +} + break; + case 111: /* seltablist ::= stl_prefix nm dbnm as on_using */ +{ + yymsp[-4].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-4].minor.yy563,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy421); +} + break; + case 112: /* seltablist ::= stl_prefix nm dbnm as indexed_by on_using */ +{ + yymsp[-5].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy563,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,0,&yymsp[0].minor.yy421); + sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy563, &yymsp[-1].minor.yy0); +} + break; + case 113: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */ +{ + yymsp[-7].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-7].minor.yy563,&yymsp[-6].minor.yy0,&yymsp[-5].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy421); + sqlite3SrcListFuncArgs(pParse, yymsp[-7].minor.yy563, yymsp[-3].minor.yy402); +} + break; + case 114: /* seltablist ::= stl_prefix LP select RP as on_using */ +{ + yymsp[-5].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy563,0,0,&yymsp[-1].minor.yy0,yymsp[-3].minor.yy637,&yymsp[0].minor.yy421); + } + break; + case 115: /* seltablist ::= stl_prefix LP seltablist RP as on_using */ +{ + if( yymsp[-5].minor.yy563==0 && yymsp[-1].minor.yy0.n==0 && yymsp[0].minor.yy421.pOn==0 && yymsp[0].minor.yy421.pUsing==0 ){ + yymsp[-5].minor.yy563 = yymsp[-3].minor.yy563; + }else if( ALWAYS(yymsp[-3].minor.yy563!=0) && yymsp[-3].minor.yy563->nSrc==1 ){ + yymsp[-5].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy563,0,0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy421); + if( yymsp[-5].minor.yy563 ){ + SrcItem *pNew = &yymsp[-5].minor.yy563->a[yymsp[-5].minor.yy563->nSrc-1]; + SrcItem *pOld = yymsp[-3].minor.yy563->a; + assert( pOld->fg.fixedSchema==0 ); + pNew->zName = pOld->zName; + assert( pOld->fg.fixedSchema==0 ); + if( pOld->fg.isSubquery ){ + pNew->fg.isSubquery = 1; + pNew->u4.pSubq = pOld->u4.pSubq; + pOld->u4.pSubq = 0; + pOld->fg.isSubquery = 0; + assert( pNew->u4.pSubq!=0 && pNew->u4.pSubq->pSelect!=0 ); + if( (pNew->u4.pSubq->pSelect->selFlags & SF_NestedFrom)!=0 ){ + pNew->fg.isNestedFrom = 1; + } + }else{ + pNew->u4.zDatabase = pOld->u4.zDatabase; + pOld->u4.zDatabase = 0; + } + if( pOld->fg.isTabFunc ){ + pNew->u1.pFuncArg = pOld->u1.pFuncArg; + pOld->u1.pFuncArg = 0; + pOld->fg.isTabFunc = 0; + pNew->fg.isTabFunc = 1; + } + pOld->zName = 0; + } + sqlite3SrcListDelete(pParse->db, yymsp[-3].minor.yy563); + }else{ + Select *pSubquery; + sqlite3SrcListShiftJoinType(pParse,yymsp[-3].minor.yy563); + pSubquery = sqlite3SelectNew(pParse,0,yymsp[-3].minor.yy563,0,0,0,0,SF_NestedFrom,0); + yymsp[-5].minor.yy563 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy563,0,0,&yymsp[-1].minor.yy0,pSubquery,&yymsp[0].minor.yy421); + } + } + break; + case 116: /* dbnm ::= */ + case 131: /* indexed_opt ::= */ yytestcase(yyruleno==131); +{yymsp[1].minor.yy0.z=0; yymsp[1].minor.yy0.n=0;} + break; + case 118: /* fullname ::= nm */ +{ + yylhsminor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); + if( IN_RENAME_OBJECT && yylhsminor.yy563 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy563->a[0].zName, &yymsp[0].minor.yy0); +} + yymsp[0].minor.yy563 = yylhsminor.yy563; + break; + case 119: /* fullname ::= nm DOT nm */ +{ + yylhsminor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); + if( IN_RENAME_OBJECT && yylhsminor.yy563 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy563->a[0].zName, &yymsp[0].minor.yy0); +} + yymsp[-2].minor.yy563 = yylhsminor.yy563; + break; + case 120: /* xfullname ::= nm */ +{yymsp[0].minor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); /*A-overwrites-X*/} + break; + case 121: /* xfullname ::= nm DOT nm */ +{yymsp[-2].minor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/} + break; + case 122: /* xfullname ::= nm DOT nm AS nm */ +{ + yymsp[-4].minor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,&yymsp[-2].minor.yy0); /*A-overwrites-X*/ + if( yymsp[-4].minor.yy563 ) yymsp[-4].minor.yy563->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0); +} + break; + case 123: /* xfullname ::= nm AS nm */ +{ + yymsp[-2].minor.yy563 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,0); /*A-overwrites-X*/ + if( yymsp[-2].minor.yy563 ) yymsp[-2].minor.yy563->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0); +} + break; + case 124: /* joinop ::= COMMA|JOIN */ +{ yymsp[0].minor.yy502 = JT_INNER; } + break; + case 125: /* joinop ::= JOIN_KW JOIN */ +{yymsp[-1].minor.yy502 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/} + break; + case 126: /* joinop ::= JOIN_KW nm JOIN */ +{yymsp[-2].minor.yy502 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/} + break; + case 127: /* joinop ::= JOIN_KW nm nm JOIN */ +{yymsp[-3].minor.yy502 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/} + break; + case 128: /* on_using ::= ON expr */ +{yymsp[-1].minor.yy421.pOn = yymsp[0].minor.yy590; yymsp[-1].minor.yy421.pUsing = 0;} + break; + case 129: /* on_using ::= USING LP idlist RP */ +{yymsp[-3].minor.yy421.pOn = 0; yymsp[-3].minor.yy421.pUsing = yymsp[-1].minor.yy204;} + break; + case 130: /* on_using ::= */ +{yymsp[1].minor.yy421.pOn = 0; yymsp[1].minor.yy421.pUsing = 0;} + break; + case 132: /* indexed_by ::= INDEXED BY nm */ +{yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;} + break; + case 133: /* indexed_by ::= NOT INDEXED */ +{yymsp[-1].minor.yy0.z=0; yymsp[-1].minor.yy0.n=1;} + break; + case 135: /* orderby_opt ::= ORDER BY sortlist */ + case 145: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==145); +{yymsp[-2].minor.yy402 = yymsp[0].minor.yy402;} + break; + case 136: /* sortlist ::= sortlist COMMA expr sortorder nulls */ +{ + yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy402,yymsp[-2].minor.yy590); + sqlite3ExprListSetSortOrder(yymsp[-4].minor.yy402,yymsp[-1].minor.yy502,yymsp[0].minor.yy502); +} + break; + case 137: /* sortlist ::= expr sortorder nulls */ +{ + yymsp[-2].minor.yy402 = sqlite3ExprListAppend(pParse,0,yymsp[-2].minor.yy590); /*A-overwrites-Y*/ + sqlite3ExprListSetSortOrder(yymsp[-2].minor.yy402,yymsp[-1].minor.yy502,yymsp[0].minor.yy502); +} + break; + case 138: /* sortorder ::= ASC */ +{yymsp[0].minor.yy502 = SQLITE_SO_ASC;} + break; + case 139: /* sortorder ::= DESC */ +{yymsp[0].minor.yy502 = SQLITE_SO_DESC;} + break; + case 140: /* sortorder ::= */ + case 143: /* nulls ::= */ yytestcase(yyruleno==143); +{yymsp[1].minor.yy502 = SQLITE_SO_UNDEFINED;} + break; + case 141: /* nulls ::= NULLS FIRST */ +{yymsp[-1].minor.yy502 = SQLITE_SO_ASC;} + break; + case 142: /* nulls ::= NULLS LAST */ +{yymsp[-1].minor.yy502 = SQLITE_SO_DESC;} + break; + case 146: /* having_opt ::= */ + case 148: /* limit_opt ::= */ yytestcase(yyruleno==148); + case 153: /* where_opt ::= */ yytestcase(yyruleno==153); + case 155: /* where_opt_ret ::= */ yytestcase(yyruleno==155); + case 232: /* case_else ::= */ yytestcase(yyruleno==232); + case 233: /* case_operand ::= */ yytestcase(yyruleno==233); + case 252: /* vinto ::= */ yytestcase(yyruleno==252); +{yymsp[1].minor.yy590 = 0;} + break; + case 147: /* having_opt ::= HAVING expr */ + case 154: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==154); + case 156: /* where_opt_ret ::= WHERE expr */ yytestcase(yyruleno==156); + case 231: /* case_else ::= ELSE expr */ yytestcase(yyruleno==231); + case 251: /* vinto ::= INTO expr */ yytestcase(yyruleno==251); +{yymsp[-1].minor.yy590 = yymsp[0].minor.yy590;} + break; + case 149: /* limit_opt ::= LIMIT expr */ +{yymsp[-1].minor.yy590 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy590,0);} + break; + case 150: /* limit_opt ::= LIMIT expr OFFSET expr */ +{yymsp[-3].minor.yy590 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy590,yymsp[0].minor.yy590);} + break; + case 151: /* limit_opt ::= LIMIT expr COMMA expr */ +{yymsp[-3].minor.yy590 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy590,yymsp[-2].minor.yy590);} + break; + case 152: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */ +{ + sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy563, &yymsp[-1].minor.yy0); + sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy563,yymsp[0].minor.yy590,0,0); +} + break; + case 157: /* where_opt_ret ::= RETURNING selcollist */ +{sqlite3AddReturning(pParse,yymsp[0].minor.yy402); yymsp[-1].minor.yy590 = 0;} + break; + case 158: /* where_opt_ret ::= WHERE expr RETURNING selcollist */ +{sqlite3AddReturning(pParse,yymsp[0].minor.yy402); yymsp[-3].minor.yy590 = yymsp[-2].minor.yy590;} + break; + case 159: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */ +{ + sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy563, &yymsp[-4].minor.yy0); + sqlite3ExprListCheckLength(pParse,yymsp[-2].minor.yy402,"set list"); + if( yymsp[-1].minor.yy563 ){ + SrcList *pFromClause = yymsp[-1].minor.yy563; + if( pFromClause->nSrc>1 ){ + Select *pSubquery; + Token as; + pSubquery = sqlite3SelectNew(pParse,0,pFromClause,0,0,0,0,SF_NestedFrom,0); + as.n = 0; + as.z = 0; + pFromClause = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&as,pSubquery,0); + } + yymsp[-5].minor.yy563 = sqlite3SrcListAppendList(pParse, yymsp[-5].minor.yy563, pFromClause); + } + sqlite3Update(pParse,yymsp[-5].minor.yy563,yymsp[-2].minor.yy402,yymsp[0].minor.yy590,yymsp[-6].minor.yy502,0,0,0); +} + break; + case 160: /* setlist ::= setlist COMMA nm EQ expr */ +{ + yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy402, yymsp[0].minor.yy590); + sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy402, &yymsp[-2].minor.yy0, 1); +} + break; + case 161: /* setlist ::= setlist COMMA LP idlist RP EQ expr */ +{ + yymsp[-6].minor.yy402 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy402, yymsp[-3].minor.yy204, yymsp[0].minor.yy590); +} + break; + case 162: /* setlist ::= nm EQ expr */ +{ + yylhsminor.yy402 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy590); + sqlite3ExprListSetName(pParse, yylhsminor.yy402, &yymsp[-2].minor.yy0, 1); +} + yymsp[-2].minor.yy402 = yylhsminor.yy402; + break; + case 163: /* setlist ::= LP idlist RP EQ expr */ +{ + yymsp[-4].minor.yy402 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy204, yymsp[0].minor.yy590); +} + break; + case 164: /* cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ +{ + sqlite3Insert(pParse, yymsp[-3].minor.yy563, yymsp[-1].minor.yy637, yymsp[-2].minor.yy204, yymsp[-5].minor.yy502, yymsp[0].minor.yy403); +} + break; + case 165: /* cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */ +{ + sqlite3Insert(pParse, yymsp[-4].minor.yy563, 0, yymsp[-3].minor.yy204, yymsp[-6].minor.yy502, 0); +} + break; + case 166: /* upsert ::= */ +{ yymsp[1].minor.yy403 = 0; } + break; + case 167: /* upsert ::= RETURNING selcollist */ +{ yymsp[-1].minor.yy403 = 0; sqlite3AddReturning(pParse,yymsp[0].minor.yy402); } + break; + case 168: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */ +{ yymsp[-11].minor.yy403 = sqlite3UpsertNew(pParse->db,yymsp[-8].minor.yy402,yymsp[-6].minor.yy590,yymsp[-2].minor.yy402,yymsp[-1].minor.yy590,yymsp[0].minor.yy403);} + break; + case 169: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */ +{ yymsp[-8].minor.yy403 = sqlite3UpsertNew(pParse->db,yymsp[-5].minor.yy402,yymsp[-3].minor.yy590,0,0,yymsp[0].minor.yy403); } + break; + case 170: /* upsert ::= ON CONFLICT DO NOTHING returning */ +{ yymsp[-4].minor.yy403 = sqlite3UpsertNew(pParse->db,0,0,0,0,0); } + break; + case 171: /* upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */ +{ yymsp[-7].minor.yy403 = sqlite3UpsertNew(pParse->db,0,0,yymsp[-2].minor.yy402,yymsp[-1].minor.yy590,0);} + break; + case 172: /* returning ::= RETURNING selcollist */ +{sqlite3AddReturning(pParse,yymsp[0].minor.yy402);} + break; + case 175: /* idlist_opt ::= */ +{yymsp[1].minor.yy204 = 0;} + break; + case 176: /* idlist_opt ::= LP idlist RP */ +{yymsp[-2].minor.yy204 = yymsp[-1].minor.yy204;} + break; + case 177: /* idlist ::= idlist COMMA nm */ +{yymsp[-2].minor.yy204 = sqlite3IdListAppend(pParse,yymsp[-2].minor.yy204,&yymsp[0].minor.yy0);} + break; + case 178: /* idlist ::= nm */ +{yymsp[0].minor.yy204 = sqlite3IdListAppend(pParse,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/} + break; + case 179: /* expr ::= LP expr RP */ +{yymsp[-2].minor.yy590 = yymsp[-1].minor.yy590;} + break; + case 180: /* expr ::= ID|INDEXED|JOIN_KW */ +{yymsp[0].minor.yy590=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/} + break; + case 181: /* expr ::= nm DOT nm */ +{ + Expr *temp1 = tokenExpr(pParse,TK_ID,yymsp[-2].minor.yy0); + Expr *temp2 = tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); + yylhsminor.yy590 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2); +} + yymsp[-2].minor.yy590 = yylhsminor.yy590; + break; + case 182: /* expr ::= nm DOT nm DOT nm */ +{ + Expr *temp1 = tokenExpr(pParse,TK_ID,yymsp[-4].minor.yy0); + Expr *temp2 = tokenExpr(pParse,TK_ID,yymsp[-2].minor.yy0); + Expr *temp3 = tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); + Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3); + if( IN_RENAME_OBJECT ){ + sqlite3RenameTokenRemap(pParse, 0, temp1); + } + yylhsminor.yy590 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4); +} + yymsp[-4].minor.yy590 = yylhsminor.yy590; + break; + case 183: /* term ::= NULL|FLOAT|BLOB */ + case 184: /* term ::= STRING */ yytestcase(yyruleno==184); +{yymsp[0].minor.yy590=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/} + break; + case 185: /* term ::= INTEGER */ +{ + yylhsminor.yy590 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1); + if( yylhsminor.yy590 ) yylhsminor.yy590->w.iOfst = (int)(yymsp[0].minor.yy0.z - pParse->zTail); +} + yymsp[0].minor.yy590 = yylhsminor.yy590; + break; + case 186: /* expr ::= VARIABLE */ +{ + if( !(yymsp[0].minor.yy0.z[0]=='#' && sqlite3Isdigit(yymsp[0].minor.yy0.z[1])) ){ + u32 n = yymsp[0].minor.yy0.n; + yymsp[0].minor.yy590 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0); + sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy590, n); + }else{ + /* When doing a nested parse, one can include terms in an expression + ** that look like this: #1 #2 ... These terms refer to registers + ** in the virtual machine. #N is the N-th register. */ + Token t = yymsp[0].minor.yy0; /*A-overwrites-X*/ + assert( t.n>=2 ); + if( pParse->nested==0 ){ + parserSyntaxError(pParse, &t); + yymsp[0].minor.yy590 = 0; + }else{ + yymsp[0].minor.yy590 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0); + if( yymsp[0].minor.yy590 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy590->iTable); + } + } +} + break; + case 187: /* expr ::= expr COLLATE ID|STRING */ +{ + yymsp[-2].minor.yy590 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy590, &yymsp[0].minor.yy0, 1); +} + break; + case 188: /* expr ::= CAST LP expr AS typetoken RP */ +{ + yymsp[-5].minor.yy590 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1); + sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy590, yymsp[-3].minor.yy590, 0); +} + break; + case 189: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */ +{ + yylhsminor.yy590 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy402, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy502); +} + yymsp[-4].minor.yy590 = yylhsminor.yy590; + break; + case 190: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP */ +{ + yylhsminor.yy590 = sqlite3ExprFunction(pParse, yymsp[-4].minor.yy402, &yymsp[-7].minor.yy0, yymsp[-5].minor.yy502); + sqlite3ExprAddFunctionOrderBy(pParse, yylhsminor.yy590, yymsp[-1].minor.yy402); +} + yymsp[-7].minor.yy590 = yylhsminor.yy590; + break; + case 191: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP */ +{ + yylhsminor.yy590 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0, 0); +} + yymsp[-3].minor.yy590 = yylhsminor.yy590; + break; + case 192: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */ +{ + yylhsminor.yy590 = sqlite3ExprFunction(pParse, yymsp[-2].minor.yy402, &yymsp[-5].minor.yy0, yymsp[-3].minor.yy502); + sqlite3WindowAttach(pParse, yylhsminor.yy590, yymsp[0].minor.yy483); +} + yymsp[-5].minor.yy590 = yylhsminor.yy590; + break; + case 193: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over */ +{ + yylhsminor.yy590 = sqlite3ExprFunction(pParse, yymsp[-5].minor.yy402, &yymsp[-8].minor.yy0, yymsp[-6].minor.yy502); + sqlite3WindowAttach(pParse, yylhsminor.yy590, yymsp[0].minor.yy483); + sqlite3ExprAddFunctionOrderBy(pParse, yylhsminor.yy590, yymsp[-2].minor.yy402); +} + yymsp[-8].minor.yy590 = yylhsminor.yy590; + break; + case 194: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */ +{ + yylhsminor.yy590 = sqlite3ExprFunction(pParse, 0, &yymsp[-4].minor.yy0, 0); + sqlite3WindowAttach(pParse, yylhsminor.yy590, yymsp[0].minor.yy483); +} + yymsp[-4].minor.yy590 = yylhsminor.yy590; + break; + case 195: /* term ::= CTIME_KW */ +{ + yylhsminor.yy590 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0, 0); +} + yymsp[0].minor.yy590 = yylhsminor.yy590; + break; + case 196: /* expr ::= LP nexprlist COMMA expr RP */ +{ + ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy402, yymsp[-1].minor.yy590); + yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0); + if( yymsp[-4].minor.yy590 ){ + yymsp[-4].minor.yy590->x.pList = pList; + if( ALWAYS(pList->nExpr) ){ + yymsp[-4].minor.yy590->flags |= pList->a[0].pExpr->flags & EP_Propagate; + } + }else{ + sqlite3ExprListDelete(pParse->db, pList); + } +} + break; + case 197: /* expr ::= expr AND expr */ +{yymsp[-2].minor.yy590=sqlite3ExprAnd(pParse,yymsp[-2].minor.yy590,yymsp[0].minor.yy590);} + break; + case 198: /* expr ::= expr OR expr */ + case 199: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==199); + case 200: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==200); + case 201: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==201); + case 202: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==202); + case 203: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==203); + case 204: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==204); +{yymsp[-2].minor.yy590=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy590,yymsp[0].minor.yy590);} + break; + case 205: /* likeop ::= NOT LIKE_KW|MATCH */ +{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.n|=0x80000000; /*yymsp[-1].minor.yy0-overwrite-yymsp[0].minor.yy0*/} + break; + case 206: /* expr ::= expr likeop expr */ +{ + ExprList *pList; + int bNot = yymsp[-1].minor.yy0.n & 0x80000000; + yymsp[-1].minor.yy0.n &= 0x7fffffff; + pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy590); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy590); + yymsp[-2].minor.yy590 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0); + if( bNot ) yymsp[-2].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy590, 0); + if( yymsp[-2].minor.yy590 ) yymsp[-2].minor.yy590->flags |= EP_InfixFunc; +} + break; + case 207: /* expr ::= expr likeop expr ESCAPE expr */ +{ + ExprList *pList; + int bNot = yymsp[-3].minor.yy0.n & 0x80000000; + yymsp[-3].minor.yy0.n &= 0x7fffffff; + pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy590); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy590); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy590); + yymsp[-4].minor.yy590 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0, 0); + if( bNot ) yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy590, 0); + if( yymsp[-4].minor.yy590 ) yymsp[-4].minor.yy590->flags |= EP_InfixFunc; +} + break; + case 208: /* expr ::= expr ISNULL|NOTNULL */ +{yymsp[-1].minor.yy590 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy590,0);} + break; + case 209: /* expr ::= expr NOT NULL */ +{yymsp[-2].minor.yy590 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy590,0);} + break; + case 210: /* expr ::= expr IS expr */ +{ + yymsp[-2].minor.yy590 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy590,yymsp[0].minor.yy590); + binaryToUnaryIfNull(pParse, yymsp[0].minor.yy590, yymsp[-2].minor.yy590, TK_ISNULL); +} + break; + case 211: /* expr ::= expr IS NOT expr */ +{ + yymsp[-3].minor.yy590 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy590,yymsp[0].minor.yy590); + binaryToUnaryIfNull(pParse, yymsp[0].minor.yy590, yymsp[-3].minor.yy590, TK_NOTNULL); +} + break; + case 212: /* expr ::= expr IS NOT DISTINCT FROM expr */ +{ + yymsp[-5].minor.yy590 = sqlite3PExpr(pParse,TK_IS,yymsp[-5].minor.yy590,yymsp[0].minor.yy590); + binaryToUnaryIfNull(pParse, yymsp[0].minor.yy590, yymsp[-5].minor.yy590, TK_ISNULL); +} + break; + case 213: /* expr ::= expr IS DISTINCT FROM expr */ +{ + yymsp[-4].minor.yy590 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-4].minor.yy590,yymsp[0].minor.yy590); + binaryToUnaryIfNull(pParse, yymsp[0].minor.yy590, yymsp[-4].minor.yy590, TK_NOTNULL); +} + break; + case 214: /* expr ::= NOT expr */ + case 215: /* expr ::= BITNOT expr */ yytestcase(yyruleno==215); +{yymsp[-1].minor.yy590 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy590, 0);/*A-overwrites-B*/} + break; + case 216: /* expr ::= PLUS|MINUS expr */ +{ + Expr *p = yymsp[0].minor.yy590; + u8 op = yymsp[-1].major + (TK_UPLUS-TK_PLUS); + assert( TK_UPLUS>TK_PLUS ); + assert( TK_UMINUS == TK_MINUS + (TK_UPLUS - TK_PLUS) ); + if( p && p->op==TK_UPLUS ){ + p->op = op; + yymsp[-1].minor.yy590 = p; + }else{ + yymsp[-1].minor.yy590 = sqlite3PExpr(pParse, op, p, 0); + /*A-overwrites-B*/ + } +} + break; + case 217: /* expr ::= expr PTR expr */ +{ + ExprList *pList = sqlite3ExprListAppend(pParse, 0, yymsp[-2].minor.yy590); + pList = sqlite3ExprListAppend(pParse, pList, yymsp[0].minor.yy590); + yylhsminor.yy590 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0); +} + yymsp[-2].minor.yy590 = yylhsminor.yy590; + break; + case 218: /* between_op ::= BETWEEN */ + case 221: /* in_op ::= IN */ yytestcase(yyruleno==221); +{yymsp[0].minor.yy502 = 0;} + break; + case 220: /* expr ::= expr between_op expr AND expr */ +{ + ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy590); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy590); + yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy590, 0); + if( yymsp[-4].minor.yy590 ){ + yymsp[-4].minor.yy590->x.pList = pList; + }else{ + sqlite3ExprListDelete(pParse->db, pList); + } + if( yymsp[-3].minor.yy502 ) yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy590, 0); +} + break; + case 223: /* expr ::= expr in_op LP exprlist RP */ +{ + if( yymsp[-1].minor.yy402==0 ){ + /* Expressions of the form + ** + ** expr1 IN () + ** expr1 NOT IN () + ** + ** simplify to constants 0 (false) and 1 (true), respectively. + ** + ** Except, do not apply this optimization if expr1 contains a function + ** because that function might be an aggregate (we don't know yet whether + ** it is or not) and if it is an aggregate, that could change the meaning + ** of the whole query. + */ + Expr *pB = sqlite3Expr(pParse->db, TK_STRING, yymsp[-3].minor.yy502 ? "true" : "false"); + if( pB ) sqlite3ExprIdToTrueFalse(pB); + if( !ExprHasProperty(yymsp[-4].minor.yy590, EP_HasFunc) ){ + sqlite3ExprUnmapAndDelete(pParse, yymsp[-4].minor.yy590); + yymsp[-4].minor.yy590 = pB; + }else{ + yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, yymsp[-3].minor.yy502 ? TK_OR : TK_AND, pB, yymsp[-4].minor.yy590); + } + }else{ + Expr *pRHS = yymsp[-1].minor.yy402->a[0].pExpr; + if( yymsp[-1].minor.yy402->nExpr==1 && sqlite3ExprIsConstant(pParse,pRHS) && yymsp[-4].minor.yy590->op!=TK_VECTOR ){ + yymsp[-1].minor.yy402->a[0].pExpr = 0; + sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy402); + pRHS = sqlite3PExpr(pParse, TK_UPLUS, pRHS, 0); + yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_EQ, yymsp[-4].minor.yy590, pRHS); + }else if( yymsp[-1].minor.yy402->nExpr==1 && pRHS->op==TK_SELECT ){ + yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy590, 0); + sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy590, pRHS->x.pSelect); + pRHS->x.pSelect = 0; + sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy402); + }else{ + yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy590, 0); + if( yymsp[-4].minor.yy590==0 ){ + sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy402); + }else if( yymsp[-4].minor.yy590->pLeft->op==TK_VECTOR ){ + int nExpr = yymsp[-4].minor.yy590->pLeft->x.pList->nExpr; + Select *pSelectRHS = sqlite3ExprListToValues(pParse, nExpr, yymsp[-1].minor.yy402); + if( pSelectRHS ){ + parserDoubleLinkSelect(pParse, pSelectRHS); + sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy590, pSelectRHS); + } + }else{ + yymsp[-4].minor.yy590->x.pList = yymsp[-1].minor.yy402; + sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy590); + } + } + if( yymsp[-3].minor.yy502 ) yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy590, 0); + } + } + break; + case 224: /* expr ::= LP select RP */ +{ + yymsp[-2].minor.yy590 = sqlite3PExpr(pParse, TK_SELECT, 0, 0); + sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy590, yymsp[-1].minor.yy637); + } + break; + case 225: /* expr ::= expr in_op LP select RP */ +{ + yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy590, 0); + sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy590, yymsp[-1].minor.yy637); + if( yymsp[-3].minor.yy502 ) yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy590, 0); + } + break; + case 226: /* expr ::= expr in_op nm dbnm paren_exprlist */ +{ + SrcList *pSrc = sqlite3SrcListAppend(pParse, 0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0); + Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0); + if( yymsp[0].minor.yy402 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy402); + yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy590, 0); + sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy590, pSelect); + if( yymsp[-3].minor.yy502 ) yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy590, 0); + } + break; + case 227: /* expr ::= EXISTS LP select RP */ +{ + Expr *p; + p = yymsp[-3].minor.yy590 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0); + sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy637); + } + break; + case 228: /* expr ::= CASE case_operand case_exprlist case_else END */ +{ + yymsp[-4].minor.yy590 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy590, 0); + if( yymsp[-4].minor.yy590 ){ + yymsp[-4].minor.yy590->x.pList = yymsp[-1].minor.yy590 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy402,yymsp[-1].minor.yy590) : yymsp[-2].minor.yy402; + sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy590); + }else{ + sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy402); + sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy590); + } +} + break; + case 229: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */ +{ + yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy402, yymsp[-2].minor.yy590); + yymsp[-4].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy402, yymsp[0].minor.yy590); +} + break; + case 230: /* case_exprlist ::= WHEN expr THEN expr */ +{ + yymsp[-3].minor.yy402 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy590); + yymsp[-3].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy402, yymsp[0].minor.yy590); +} + break; + case 235: /* nexprlist ::= nexprlist COMMA expr */ +{yymsp[-2].minor.yy402 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy402,yymsp[0].minor.yy590);} + break; + case 236: /* nexprlist ::= expr */ +{yymsp[0].minor.yy402 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy590); /*A-overwrites-Y*/} + break; + case 238: /* paren_exprlist ::= LP exprlist RP */ + case 243: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==243); +{yymsp[-2].minor.yy402 = yymsp[-1].minor.yy402;} + break; + case 239: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ +{ + sqlite3CreateIndex(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, + sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy402, yymsp[-10].minor.yy502, + &yymsp[-11].minor.yy0, yymsp[0].minor.yy590, SQLITE_SO_ASC, yymsp[-8].minor.yy502, SQLITE_IDXTYPE_APPDEF); + if( IN_RENAME_OBJECT && pParse->pNewIndex ){ + sqlite3RenameTokenMap(pParse, pParse->pNewIndex->zName, &yymsp[-4].minor.yy0); + } +} + break; + case 240: /* uniqueflag ::= UNIQUE */ + case 282: /* raisetype ::= ABORT */ yytestcase(yyruleno==282); +{yymsp[0].minor.yy502 = OE_Abort;} + break; + case 241: /* uniqueflag ::= */ +{yymsp[1].minor.yy502 = OE_None;} + break; + case 244: /* eidlist ::= eidlist COMMA nm collate sortorder */ +{ + yymsp[-4].minor.yy402 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy402, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy502, yymsp[0].minor.yy502); +} + break; + case 245: /* eidlist ::= nm collate sortorder */ +{ + yymsp[-2].minor.yy402 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy502, yymsp[0].minor.yy502); /*A-overwrites-Y*/ +} + break; + case 248: /* cmd ::= DROP INDEX ifexists fullname */ +{sqlite3DropIndex(pParse, yymsp[0].minor.yy563, yymsp[-1].minor.yy502);} + break; + case 249: /* cmd ::= VACUUM vinto */ +{sqlite3Vacuum(pParse,0,yymsp[0].minor.yy590);} + break; + case 250: /* cmd ::= VACUUM nm vinto */ +{sqlite3Vacuum(pParse,&yymsp[-1].minor.yy0,yymsp[0].minor.yy590);} + break; + case 253: /* cmd ::= PRAGMA nm dbnm */ +{sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);} + break; + case 254: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ +{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);} + break; + case 255: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */ +{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);} + break; + case 256: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ +{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);} + break; + case 257: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ +{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);} + break; + case 260: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ +{ + Token all; + all.z = yymsp[-3].minor.yy0.z; + all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n; + sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy319, &all); +} + break; + case 261: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ +{ + sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy502, yymsp[-4].minor.yy28.a, yymsp[-4].minor.yy28.b, yymsp[-2].minor.yy563, yymsp[0].minor.yy590, yymsp[-10].minor.yy502, yymsp[-8].minor.yy502); + yymsp[-10].minor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0); /*A-overwrites-T*/ +#ifdef SQLITE_DEBUG + assert( pParse->isCreate ); /* Set by createkw reduce action */ + pParse->isCreate = 0; /* But, should not be set for CREATE TRIGGER */ +#endif +} + break; + case 262: /* trigger_time ::= BEFORE|AFTER */ +{ yymsp[0].minor.yy502 = yymsp[0].major; /*A-overwrites-X*/ } + break; + case 263: /* trigger_time ::= INSTEAD OF */ +{ yymsp[-1].minor.yy502 = TK_INSTEAD;} + break; + case 264: /* trigger_time ::= */ +{ yymsp[1].minor.yy502 = TK_BEFORE; } + break; + case 265: /* trigger_event ::= DELETE|INSERT */ + case 266: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==266); +{yymsp[0].minor.yy28.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy28.b = 0;} + break; + case 267: /* trigger_event ::= UPDATE OF idlist */ +{yymsp[-2].minor.yy28.a = TK_UPDATE; yymsp[-2].minor.yy28.b = yymsp[0].minor.yy204;} + break; + case 268: /* when_clause ::= */ + case 287: /* key_opt ::= */ yytestcase(yyruleno==287); +{ yymsp[1].minor.yy590 = 0; } + break; + case 269: /* when_clause ::= WHEN expr */ + case 288: /* key_opt ::= KEY expr */ yytestcase(yyruleno==288); +{ yymsp[-1].minor.yy590 = yymsp[0].minor.yy590; } + break; + case 270: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ +{ + assert( yymsp[-2].minor.yy319!=0 ); + yymsp[-2].minor.yy319->pLast->pNext = yymsp[-1].minor.yy319; + yymsp[-2].minor.yy319->pLast = yymsp[-1].minor.yy319; +} + break; + case 271: /* trigger_cmd_list ::= trigger_cmd SEMI */ +{ + assert( yymsp[-1].minor.yy319!=0 ); + yymsp[-1].minor.yy319->pLast = yymsp[-1].minor.yy319; +} + break; + case 272: /* trnm ::= nm DOT nm */ +{ + yymsp[-2].minor.yy0 = yymsp[0].minor.yy0; + sqlite3ErrorMsg(pParse, + "qualified table names are not allowed on INSERT, UPDATE, and DELETE " + "statements within triggers"); +} + break; + case 273: /* tridxby ::= INDEXED BY nm */ +{ + sqlite3ErrorMsg(pParse, + "the INDEXED BY clause is not allowed on UPDATE or DELETE statements " + "within triggers"); +} + break; + case 274: /* tridxby ::= NOT INDEXED */ +{ + sqlite3ErrorMsg(pParse, + "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements " + "within triggers"); +} + break; + case 275: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ +{yylhsminor.yy319 = sqlite3TriggerUpdateStep(pParse, &yymsp[-6].minor.yy0, yymsp[-2].minor.yy563, yymsp[-3].minor.yy402, yymsp[-1].minor.yy590, yymsp[-7].minor.yy502, yymsp[-8].minor.yy0.z, yymsp[0].minor.yy342);} + yymsp[-8].minor.yy319 = yylhsminor.yy319; + break; + case 276: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ +{ + yylhsminor.yy319 = sqlite3TriggerInsertStep(pParse,&yymsp[-4].minor.yy0,yymsp[-3].minor.yy204,yymsp[-2].minor.yy637,yymsp[-6].minor.yy502,yymsp[-1].minor.yy403,yymsp[-7].minor.yy342,yymsp[0].minor.yy342);/*yylhsminor.yy319-overwrites-yymsp[-6].minor.yy502*/ +} + yymsp[-7].minor.yy319 = yylhsminor.yy319; + break; + case 277: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ +{yylhsminor.yy319 = sqlite3TriggerDeleteStep(pParse, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy590, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy342);} + yymsp[-5].minor.yy319 = yylhsminor.yy319; + break; + case 278: /* trigger_cmd ::= scanpt select scanpt */ +{yylhsminor.yy319 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy637, yymsp[-2].minor.yy342, yymsp[0].minor.yy342); /*yylhsminor.yy319-overwrites-yymsp[-1].minor.yy637*/} + yymsp[-2].minor.yy319 = yylhsminor.yy319; + break; + case 279: /* expr ::= RAISE LP IGNORE RP */ +{ + yymsp[-3].minor.yy590 = sqlite3PExpr(pParse, TK_RAISE, 0, 0); + if( yymsp[-3].minor.yy590 ){ + yymsp[-3].minor.yy590->affExpr = OE_Ignore; + } +} + break; + case 280: /* expr ::= RAISE LP raisetype COMMA expr RP */ +{ + yymsp[-5].minor.yy590 = sqlite3PExpr(pParse, TK_RAISE, yymsp[-1].minor.yy590, 0); + if( yymsp[-5].minor.yy590 ) { + yymsp[-5].minor.yy590->affExpr = (char)yymsp[-3].minor.yy502; + } +} + break; + case 281: /* raisetype ::= ROLLBACK */ +{yymsp[0].minor.yy502 = OE_Rollback;} + break; + case 283: /* raisetype ::= FAIL */ +{yymsp[0].minor.yy502 = OE_Fail;} + break; + case 284: /* cmd ::= DROP TRIGGER ifexists fullname */ +{ + sqlite3DropTrigger(pParse,yymsp[0].minor.yy563,yymsp[-1].minor.yy502); +} + break; + case 285: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ +{ + sqlite3Attach(pParse, yymsp[-3].minor.yy590, yymsp[-1].minor.yy590, yymsp[0].minor.yy590); +} + break; + case 286: /* cmd ::= DETACH database_kw_opt expr */ +{ + sqlite3Detach(pParse, yymsp[0].minor.yy590); +} + break; + case 289: /* cmd ::= REINDEX */ +{sqlite3Reindex(pParse, 0, 0);} + break; + case 290: /* cmd ::= REINDEX nm dbnm */ +{sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} + break; + case 291: /* cmd ::= ANALYZE */ +{sqlite3Analyze(pParse, 0, 0);} + break; + case 292: /* cmd ::= ANALYZE nm dbnm */ +{sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} + break; + case 293: /* cmd ::= ALTER TABLE fullname RENAME TO nm */ +{ + sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy563,&yymsp[0].minor.yy0); +} + break; + case 294: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ +{ + yymsp[-1].minor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-1].minor.yy0.z) + pParse->sLastToken.n; + sqlite3AlterFinishAddColumn(pParse, &yymsp[-1].minor.yy0); +} + break; + case 295: /* cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ +{ + sqlite3AlterDropColumn(pParse, yymsp[-3].minor.yy563, &yymsp[0].minor.yy0); +} + break; + case 296: /* add_column_fullname ::= fullname */ +{ + disableLookaside(pParse); + sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy563); +} + break; + case 297: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ +{ + sqlite3AlterRenameColumn(pParse, yymsp[-5].minor.yy563, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); +} + break; + case 298: /* cmd ::= create_vtab */ +{sqlite3VtabFinishParse(pParse,0);} + break; + case 299: /* cmd ::= create_vtab LP vtabarglist RP */ +{sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);} + break; + case 300: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ +{ + sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy502); +} + break; + case 301: /* vtabarg ::= */ +{sqlite3VtabArgInit(pParse);} + break; + case 302: /* vtabargtoken ::= ANY */ + case 303: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==303); + case 304: /* lp ::= LP */ yytestcase(yyruleno==304); +{sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);} + break; + case 305: /* with ::= WITH wqlist */ + case 306: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==306); +{ sqlite3WithPush(pParse, yymsp[0].minor.yy125, 1); } + break; + case 307: /* wqas ::= AS */ +{yymsp[0].minor.yy444 = M10d_Any;} + break; + case 308: /* wqas ::= AS MATERIALIZED */ +{yymsp[-1].minor.yy444 = M10d_Yes;} + break; + case 309: /* wqas ::= AS NOT MATERIALIZED */ +{yymsp[-2].minor.yy444 = M10d_No;} + break; + case 310: /* wqitem ::= withnm eidlist_opt wqas LP select RP */ +{ + yymsp[-5].minor.yy361 = sqlite3CteNew(pParse, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy402, yymsp[-1].minor.yy637, yymsp[-3].minor.yy444); /*A-overwrites-X*/ +} + break; + case 311: /* withnm ::= nm */ +{pParse->bHasWith = 1;} + break; + case 312: /* wqlist ::= wqitem */ +{ + yymsp[0].minor.yy125 = sqlite3WithAdd(pParse, 0, yymsp[0].minor.yy361); /*A-overwrites-X*/ +} + break; + case 313: /* wqlist ::= wqlist COMMA wqitem */ +{ + yymsp[-2].minor.yy125 = sqlite3WithAdd(pParse, yymsp[-2].minor.yy125, yymsp[0].minor.yy361); +} + break; + case 314: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */ +{ + assert( yymsp[0].minor.yy483!=0 ); + sqlite3WindowChain(pParse, yymsp[0].minor.yy483, yymsp[-2].minor.yy483); + yymsp[0].minor.yy483->pNextWin = yymsp[-2].minor.yy483; + yylhsminor.yy483 = yymsp[0].minor.yy483; +} + yymsp[-2].minor.yy483 = yylhsminor.yy483; + break; + case 315: /* windowdefn ::= nm AS LP window RP */ +{ + if( ALWAYS(yymsp[-1].minor.yy483) ){ + yymsp[-1].minor.yy483->zName = sqlite3DbStrNDup(pParse->db, yymsp[-4].minor.yy0.z, yymsp[-4].minor.yy0.n); + } + yylhsminor.yy483 = yymsp[-1].minor.yy483; +} + yymsp[-4].minor.yy483 = yylhsminor.yy483; + break; + case 316: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */ +{ + yymsp[-4].minor.yy483 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy483, yymsp[-2].minor.yy402, yymsp[-1].minor.yy402, 0); +} + break; + case 317: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ +{ + yylhsminor.yy483 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy483, yymsp[-2].minor.yy402, yymsp[-1].minor.yy402, &yymsp[-5].minor.yy0); +} + yymsp[-5].minor.yy483 = yylhsminor.yy483; + break; + case 318: /* window ::= ORDER BY sortlist frame_opt */ +{ + yymsp[-3].minor.yy483 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy483, 0, yymsp[-1].minor.yy402, 0); +} + break; + case 319: /* window ::= nm ORDER BY sortlist frame_opt */ +{ + yylhsminor.yy483 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy483, 0, yymsp[-1].minor.yy402, &yymsp[-4].minor.yy0); +} + yymsp[-4].minor.yy483 = yylhsminor.yy483; + break; + case 320: /* window ::= nm frame_opt */ +{ + yylhsminor.yy483 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy483, 0, 0, &yymsp[-1].minor.yy0); +} + yymsp[-1].minor.yy483 = yylhsminor.yy483; + break; + case 321: /* frame_opt ::= */ +{ + yymsp[1].minor.yy483 = sqlite3WindowAlloc(pParse, 0, TK_UNBOUNDED, 0, TK_CURRENT, 0, 0); +} + break; + case 322: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ +{ + yylhsminor.yy483 = sqlite3WindowAlloc(pParse, yymsp[-2].minor.yy502, yymsp[-1].minor.yy205.eType, yymsp[-1].minor.yy205.pExpr, TK_CURRENT, 0, yymsp[0].minor.yy444); +} + yymsp[-2].minor.yy483 = yylhsminor.yy483; + break; + case 323: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ +{ + yylhsminor.yy483 = sqlite3WindowAlloc(pParse, yymsp[-5].minor.yy502, yymsp[-3].minor.yy205.eType, yymsp[-3].minor.yy205.pExpr, yymsp[-1].minor.yy205.eType, yymsp[-1].minor.yy205.pExpr, yymsp[0].minor.yy444); +} + yymsp[-5].minor.yy483 = yylhsminor.yy483; + break; + case 325: /* frame_bound_s ::= frame_bound */ + case 327: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==327); +{yylhsminor.yy205 = yymsp[0].minor.yy205;} + yymsp[0].minor.yy205 = yylhsminor.yy205; + break; + case 326: /* frame_bound_s ::= UNBOUNDED PRECEDING */ + case 328: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==328); + case 330: /* frame_bound ::= CURRENT ROW */ yytestcase(yyruleno==330); +{yylhsminor.yy205.eType = yymsp[-1].major; yylhsminor.yy205.pExpr = 0;} + yymsp[-1].minor.yy205 = yylhsminor.yy205; + break; + case 329: /* frame_bound ::= expr PRECEDING|FOLLOWING */ +{yylhsminor.yy205.eType = yymsp[0].major; yylhsminor.yy205.pExpr = yymsp[-1].minor.yy590;} + yymsp[-1].minor.yy205 = yylhsminor.yy205; + break; + case 331: /* frame_exclude_opt ::= */ +{yymsp[1].minor.yy444 = 0;} + break; + case 332: /* frame_exclude_opt ::= EXCLUDE frame_exclude */ +{yymsp[-1].minor.yy444 = yymsp[0].minor.yy444;} + break; + case 333: /* frame_exclude ::= NO OTHERS */ + case 334: /* frame_exclude ::= CURRENT ROW */ yytestcase(yyruleno==334); +{yymsp[-1].minor.yy444 = yymsp[-1].major; /*A-overwrites-X*/} + break; + case 335: /* frame_exclude ::= GROUP|TIES */ +{yymsp[0].minor.yy444 = yymsp[0].major; /*A-overwrites-X*/} + break; + case 336: /* window_clause ::= WINDOW windowdefn_list */ +{ yymsp[-1].minor.yy483 = yymsp[0].minor.yy483; } + break; + case 337: /* filter_over ::= filter_clause over_clause */ +{ + if( yymsp[0].minor.yy483 ){ + yymsp[0].minor.yy483->pFilter = yymsp[-1].minor.yy590; + }else{ + sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy590); + } + yylhsminor.yy483 = yymsp[0].minor.yy483; +} + yymsp[-1].minor.yy483 = yylhsminor.yy483; + break; + case 338: /* filter_over ::= over_clause */ +{ + yylhsminor.yy483 = yymsp[0].minor.yy483; +} + yymsp[0].minor.yy483 = yylhsminor.yy483; + break; + case 339: /* filter_over ::= filter_clause */ +{ + yylhsminor.yy483 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); + if( yylhsminor.yy483 ){ + yylhsminor.yy483->eFrmType = TK_FILTER; + yylhsminor.yy483->pFilter = yymsp[0].minor.yy590; + }else{ + sqlite3ExprDelete(pParse->db, yymsp[0].minor.yy590); + } +} + yymsp[0].minor.yy483 = yylhsminor.yy483; + break; + case 340: /* over_clause ::= OVER LP window RP */ +{ + yymsp[-3].minor.yy483 = yymsp[-1].minor.yy483; + assert( yymsp[-3].minor.yy483!=0 ); +} + break; + case 341: /* over_clause ::= OVER nm */ +{ + yymsp[-1].minor.yy483 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); + if( yymsp[-1].minor.yy483 ){ + yymsp[-1].minor.yy483->zName = sqlite3DbStrNDup(pParse->db, yymsp[0].minor.yy0.z, yymsp[0].minor.yy0.n); + } +} + break; + case 342: /* filter_clause ::= FILTER LP WHERE expr RP */ +{ yymsp[-4].minor.yy590 = yymsp[-1].minor.yy590; } + break; + case 343: /* term ::= QNUMBER */ +{ + yylhsminor.yy590=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); + sqlite3DequoteNumber(pParse, yylhsminor.yy590); +} + yymsp[0].minor.yy590 = yylhsminor.yy590; + break; + default: + /* (344) input ::= cmdlist */ yytestcase(yyruleno==344); + /* (345) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==345); + /* (346) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=346); + /* (347) ecmd ::= SEMI */ yytestcase(yyruleno==347); + /* (348) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==348); + /* (349) ecmd ::= explain cmdx SEMI (NEVER REDUCES) */ assert(yyruleno!=349); + /* (350) trans_opt ::= */ yytestcase(yyruleno==350); + /* (351) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==351); + /* (352) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==352); + /* (353) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==353); + /* (354) savepoint_opt ::= */ yytestcase(yyruleno==354); + /* (355) cmd ::= create_table create_table_args */ yytestcase(yyruleno==355); + /* (356) table_option_set ::= table_option (OPTIMIZED OUT) */ assert(yyruleno!=356); + /* (357) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==357); + /* (358) columnlist ::= columnname carglist */ yytestcase(yyruleno==358); + /* (359) nm ::= ID|INDEXED|JOIN_KW */ yytestcase(yyruleno==359); + /* (360) nm ::= STRING */ yytestcase(yyruleno==360); + /* (361) typetoken ::= typename */ yytestcase(yyruleno==361); + /* (362) typename ::= ID|STRING */ yytestcase(yyruleno==362); + /* (363) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=363); + /* (364) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=364); + /* (365) carglist ::= carglist ccons */ yytestcase(yyruleno==365); + /* (366) carglist ::= */ yytestcase(yyruleno==366); + /* (367) ccons ::= NULL onconf */ yytestcase(yyruleno==367); + /* (368) ccons ::= GENERATED ALWAYS AS generated */ yytestcase(yyruleno==368); + /* (369) ccons ::= AS generated */ yytestcase(yyruleno==369); + /* (370) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==370); + /* (371) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==371); + /* (372) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=372); + /* (373) tconscomma ::= */ yytestcase(yyruleno==373); + /* (374) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=374); + /* (375) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=375); + /* (376) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=376); + /* (377) oneselect ::= values */ yytestcase(yyruleno==377); + /* (378) sclp ::= selcollist COMMA */ yytestcase(yyruleno==378); + /* (379) as ::= ID|STRING */ yytestcase(yyruleno==379); + /* (380) indexed_opt ::= indexed_by (OPTIMIZED OUT) */ assert(yyruleno!=380); + /* (381) returning ::= */ yytestcase(yyruleno==381); + /* (382) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=382); + /* (383) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==383); + /* (384) case_operand ::= expr */ yytestcase(yyruleno==384); + /* (385) exprlist ::= nexprlist */ yytestcase(yyruleno==385); + /* (386) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=386); + /* (387) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=387); + /* (388) nmnum ::= ON */ yytestcase(yyruleno==388); + /* (389) nmnum ::= DELETE */ yytestcase(yyruleno==389); + /* (390) nmnum ::= DEFAULT */ yytestcase(yyruleno==390); + /* (391) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==391); + /* (392) foreach_clause ::= */ yytestcase(yyruleno==392); + /* (393) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==393); + /* (394) trnm ::= nm */ yytestcase(yyruleno==394); + /* (395) tridxby ::= */ yytestcase(yyruleno==395); + /* (396) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==396); + /* (397) database_kw_opt ::= */ yytestcase(yyruleno==397); + /* (398) kwcolumn_opt ::= */ yytestcase(yyruleno==398); + /* (399) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==399); + /* (400) vtabarglist ::= vtabarg */ yytestcase(yyruleno==400); + /* (401) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==401); + /* (402) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==402); + /* (403) anylist ::= */ yytestcase(yyruleno==403); + /* (404) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==404); + /* (405) anylist ::= anylist ANY */ yytestcase(yyruleno==405); + /* (406) with ::= */ yytestcase(yyruleno==406); + /* (407) windowdefn_list ::= windowdefn (OPTIMIZED OUT) */ assert(yyruleno!=407); + /* (408) window ::= frame_opt (OPTIMIZED OUT) */ assert(yyruleno!=408); + break; +/********** End reduce actions ************************************************/ + }; + assert( yyrulenoYY_MAX_SHIFT && yyact<=YY_MAX_SHIFTREDUCE) ); + + /* It is not possible for a REDUCE to be followed by an error */ + assert( yyact!=YY_ERROR_ACTION ); + + yymsp += yysize+1; + yypParser->yytos = yymsp; + yymsp->stateno = (YYACTIONTYPE)yyact; + yymsp->major = (YYCODETYPE)yygoto; + yyTraceShift(yypParser, yyact, "... then shift"); + return yyact; +} + +/* +** The following code executes when the parse fails +*/ +#ifndef YYNOERRORRECOVERY +static void yy_parse_failed( + yyParser *yypParser /* The parser */ +){ + sqlite3ParserARG_FETCH + sqlite3ParserCTX_FETCH +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt); + } +#endif + while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); + /* Here code is inserted which will be executed whenever the + ** parser fails */ +/************ Begin %parse_failure code ***************************************/ +/************ End %parse_failure code *****************************************/ + sqlite3ParserARG_STORE /* Suppress warning about unused %extra_argument variable */ + sqlite3ParserCTX_STORE +} +#endif /* YYNOERRORRECOVERY */ + +/* +** The following code executes when a syntax error first occurs. +*/ +static void yy_syntax_error( + yyParser *yypParser, /* The parser */ + int yymajor, /* The major type of the error token */ + sqlite3ParserTOKENTYPE yyminor /* The minor type of the error token */ +){ + sqlite3ParserARG_FETCH + sqlite3ParserCTX_FETCH +#define TOKEN yyminor +/************ Begin %syntax_error code ****************************************/ + + UNUSED_PARAMETER(yymajor); /* Silence some compiler warnings */ + if( TOKEN.z[0] ){ + parserSyntaxError(pParse, &TOKEN); + }else{ + sqlite3ErrorMsg(pParse, "incomplete input"); + } +/************ End %syntax_error code ******************************************/ + sqlite3ParserARG_STORE /* Suppress warning about unused %extra_argument variable */ + sqlite3ParserCTX_STORE +} + +/* +** The following is executed when the parser accepts +*/ +static void yy_accept( + yyParser *yypParser /* The parser */ +){ + sqlite3ParserARG_FETCH + sqlite3ParserCTX_FETCH +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt); + } +#endif +#ifndef YYNOERRORRECOVERY + yypParser->yyerrcnt = -1; +#endif + assert( yypParser->yytos==yypParser->yystack ); + /* Here code is inserted which will be executed whenever the + ** parser accepts */ +/*********** Begin %parse_accept code *****************************************/ +/*********** End %parse_accept code *******************************************/ + sqlite3ParserARG_STORE /* Suppress warning about unused %extra_argument variable */ + sqlite3ParserCTX_STORE +} + +/* The main parser program. +** The first argument is a pointer to a structure obtained from +** "sqlite3ParserAlloc" which describes the current state of the parser. +** The second argument is the major token number. The third is +** the minor token. The fourth optional argument is whatever the +** user wants (and specified in the grammar) and is available for +** use by the action routines. +** +** Inputs: +**
      +**
    • A pointer to the parser (an opaque structure.) +**
    • The major token number. +**
    • The minor token number. +**
    • An option argument of a grammar-specified type. +**
    +** +** Outputs: +** None. +*/ +SQLITE_PRIVATE void sqlite3Parser( + void *yyp, /* The parser */ + int yymajor, /* The major token code number */ + sqlite3ParserTOKENTYPE yyminor /* The value for the token */ + sqlite3ParserARG_PDECL /* Optional %extra_argument parameter */ +){ + YYMINORTYPE yyminorunion; + YYACTIONTYPE yyact; /* The parser action. */ +#if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) + int yyendofinput; /* True if we are at the end of input */ +#endif +#ifdef YYERRORSYMBOL + int yyerrorhit = 0; /* True if yymajor has invoked an error */ +#endif + yyParser *yypParser = (yyParser*)yyp; /* The parser */ + sqlite3ParserCTX_FETCH + sqlite3ParserARG_STORE + + assert( yypParser->yytos!=0 ); +#if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) + yyendofinput = (yymajor==0); +#endif + + yyact = yypParser->yytos->stateno; +#ifndef NDEBUG + if( yyTraceFILE ){ + if( yyact < YY_MIN_REDUCE ){ + fprintf(yyTraceFILE,"%sInput '%s' in state %d\n", + yyTracePrompt,yyTokenName[yymajor],yyact); + }else{ + fprintf(yyTraceFILE,"%sInput '%s' with pending reduce %d\n", + yyTracePrompt,yyTokenName[yymajor],yyact-YY_MIN_REDUCE); + } + } +#endif + + while(1){ /* Exit by "break" */ + assert( yypParser->yytos>=yypParser->yystack ); + assert( yyact==yypParser->yytos->stateno ); + yyact = yy_find_shift_action((YYCODETYPE)yymajor,yyact); + if( yyact >= YY_MIN_REDUCE ){ + unsigned int yyruleno = yyact - YY_MIN_REDUCE; /* Reduce by this rule */ +#ifndef NDEBUG + assert( yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ); + if( yyTraceFILE ){ + int yysize = yyRuleInfoNRhs[yyruleno]; + if( yysize ){ + fprintf(yyTraceFILE, "%sReduce %d [%s]%s, pop back to state %d.\n", + yyTracePrompt, + yyruleno, yyRuleName[yyruleno], + yyrulenoyytos[yysize].stateno); + }else{ + fprintf(yyTraceFILE, "%sReduce %d [%s]%s.\n", + yyTracePrompt, yyruleno, yyRuleName[yyruleno], + yyrulenoyytos - yypParser->yystack)>yypParser->yyhwm ){ + yypParser->yyhwm++; + assert( yypParser->yyhwm == + (int)(yypParser->yytos - yypParser->yystack)); + } +#endif + if( yypParser->yytos>=yypParser->yystackEnd ){ + if( yyGrowStack(yypParser) ){ + yyStackOverflow(yypParser); + break; + } + } + } + yyact = yy_reduce(yypParser,yyruleno,yymajor,yyminor sqlite3ParserCTX_PARAM); + }else if( yyact <= YY_MAX_SHIFTREDUCE ){ + yy_shift(yypParser,yyact,(YYCODETYPE)yymajor,yyminor); +#ifndef YYNOERRORRECOVERY + yypParser->yyerrcnt--; +#endif + break; + }else if( yyact==YY_ACCEPT_ACTION ){ + yypParser->yytos--; + yy_accept(yypParser); + return; + }else{ + assert( yyact == YY_ERROR_ACTION ); + yyminorunion.yy0 = yyminor; +#ifdef YYERRORSYMBOL + int yymx; +#endif +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt); + } +#endif +#ifdef YYERRORSYMBOL + /* A syntax error has occurred. + ** The response to an error depends upon whether or not the + ** grammar defines an error token "ERROR". + ** + ** This is what we do if the grammar does define ERROR: + ** + ** * Call the %syntax_error function. + ** + ** * Begin popping the stack until we enter a state where + ** it is legal to shift the error symbol, then shift + ** the error symbol. + ** + ** * Set the error count to three. + ** + ** * Begin accepting and shifting new tokens. No new error + ** processing will occur until three tokens have been + ** shifted successfully. + ** + */ + if( yypParser->yyerrcnt<0 ){ + yy_syntax_error(yypParser,yymajor,yyminor); + } + yymx = yypParser->yytos->major; + if( yymx==YYERRORSYMBOL || yyerrorhit ){ +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sDiscard input token %s\n", + yyTracePrompt,yyTokenName[yymajor]); + } +#endif + yy_destructor(yypParser, (YYCODETYPE)yymajor, &yyminorunion); + yymajor = YYNOCODE; + }else{ + while( yypParser->yytos > yypParser->yystack ){ + yyact = yy_find_reduce_action(yypParser->yytos->stateno, + YYERRORSYMBOL); + if( yyact<=YY_MAX_SHIFTREDUCE ) break; + yy_pop_parser_stack(yypParser); + } + if( yypParser->yytos <= yypParser->yystack || yymajor==0 ){ + yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); + yy_parse_failed(yypParser); +#ifndef YYNOERRORRECOVERY + yypParser->yyerrcnt = -1; +#endif + yymajor = YYNOCODE; + }else if( yymx!=YYERRORSYMBOL ){ + yy_shift(yypParser,yyact,YYERRORSYMBOL,yyminor); + } + } + yypParser->yyerrcnt = 3; + yyerrorhit = 1; + if( yymajor==YYNOCODE ) break; + yyact = yypParser->yytos->stateno; +#elif defined(YYNOERRORRECOVERY) + /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to + ** do any kind of error recovery. Instead, simply invoke the syntax + ** error routine and continue going as if nothing had happened. + ** + ** Applications can set this macro (for example inside %include) if + ** they intend to abandon the parse upon the first syntax error seen. + */ + yy_syntax_error(yypParser,yymajor, yyminor); + yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); + break; +#else /* YYERRORSYMBOL is not defined */ + /* This is what we do if the grammar does not define ERROR: + ** + ** * Report an error message, and throw away the input token. + ** + ** * If the input token is $, then fail the parse. + ** + ** As before, subsequent error messages are suppressed until + ** three input tokens have been successfully shifted. + */ + if( yypParser->yyerrcnt<=0 ){ + yy_syntax_error(yypParser,yymajor, yyminor); + } + yypParser->yyerrcnt = 3; + yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); + if( yyendofinput ){ + yy_parse_failed(yypParser); +#ifndef YYNOERRORRECOVERY + yypParser->yyerrcnt = -1; +#endif + } + break; +#endif + } + } +#ifndef NDEBUG + if( yyTraceFILE ){ + yyStackEntry *i; + char cDiv = '['; + fprintf(yyTraceFILE,"%sReturn. Stack=",yyTracePrompt); + for(i=&yypParser->yystack[1]; i<=yypParser->yytos; i++){ + fprintf(yyTraceFILE,"%c%s", cDiv, yyTokenName[i->major]); + cDiv = ' '; + } + fprintf(yyTraceFILE,"]\n"); + } +#endif + return; +} + +/* +** Return the fallback token corresponding to canonical token iToken, or +** 0 if iToken has no fallback. +*/ +SQLITE_PRIVATE int sqlite3ParserFallback(int iToken){ +#ifdef YYFALLBACK + assert( iToken<(int)(sizeof(yyFallback)/sizeof(yyFallback[0])) ); + return yyFallback[iToken]; +#else + (void)iToken; + return 0; +#endif +} + +/************** End of parse.c ***********************************************/ +/************** Begin file tokenize.c ****************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** An tokenizer for SQL +** +** This file contains C code that splits an SQL input string up into +** individual tokens and sends those tokens one-by-one over to the +** parser for analysis. +*/ +/* #include "sqliteInt.h" */ +/* #include */ + +/* Character classes for tokenizing +** +** In the sqlite3GetToken() function, a switch() on aiClass[c] is implemented +** using a lookup table, whereas a switch() directly on c uses a binary search. +** The lookup table is much faster. To maximize speed, and to ensure that +** a lookup table is used, all of the classes need to be small integers and +** all of them need to be used within the switch. +*/ +#define CC_X 0 /* The letter 'x', or start of BLOB literal */ +#define CC_KYWD0 1 /* First letter of a keyword */ +#define CC_KYWD 2 /* Alphabetics or '_'. Usable in a keyword */ +#define CC_DIGIT 3 /* Digits */ +#define CC_DOLLAR 4 /* '$' */ +#define CC_VARALPHA 5 /* '@', '#', ':'. Alphabetic SQL variables */ +#define CC_VARNUM 6 /* '?'. Numeric SQL variables */ +#define CC_SPACE 7 /* Space characters */ +#define CC_QUOTE 8 /* '"', '\'', or '`'. String literals, quoted ids */ +#define CC_QUOTE2 9 /* '['. [...] style quoted ids */ +#define CC_PIPE 10 /* '|'. Bitwise OR or concatenate */ +#define CC_MINUS 11 /* '-'. Minus or SQL-style comment */ +#define CC_LT 12 /* '<'. Part of < or <= or <> */ +#define CC_GT 13 /* '>'. Part of > or >= */ +#define CC_EQ 14 /* '='. Part of = or == */ +#define CC_BANG 15 /* '!'. Part of != */ +#define CC_SLASH 16 /* '/'. / or c-style comment */ +#define CC_LP 17 /* '(' */ +#define CC_RP 18 /* ')' */ +#define CC_SEMI 19 /* ';' */ +#define CC_PLUS 20 /* '+' */ +#define CC_STAR 21 /* '*' */ +#define CC_PERCENT 22 /* '%' */ +#define CC_COMMA 23 /* ',' */ +#define CC_AND 24 /* '&' */ +#define CC_TILDA 25 /* '~' */ +#define CC_DOT 26 /* '.' */ +#define CC_ID 27 /* unicode characters usable in IDs */ +#define CC_ILLEGAL 28 /* Illegal character */ +#define CC_NUL 29 /* 0x00 */ +#define CC_BOM 30 /* First byte of UTF8 BOM: 0xEF 0xBB 0xBF */ + +static const unsigned char aiClass[] = { +#ifdef SQLITE_ASCII +/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf */ +/* 0x */ 29, 28, 28, 28, 28, 28, 28, 28, 28, 7, 7, 28, 7, 7, 28, 28, +/* 1x */ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +/* 2x */ 7, 15, 8, 5, 4, 22, 24, 8, 17, 18, 21, 20, 23, 11, 26, 16, +/* 3x */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 19, 12, 14, 13, 6, +/* 4x */ 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 5x */ 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 2, 9, 28, 28, 28, 2, +/* 6x */ 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +/* 7x */ 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 2, 28, 10, 28, 25, 28, +/* 8x */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +/* 9x */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +/* Ax */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +/* Bx */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +/* Cx */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +/* Dx */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +/* Ex */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 30, +/* Fx */ 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27 +#endif +#ifdef SQLITE_EBCDIC +/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf */ +/* 0x */ 29, 28, 28, 28, 28, 7, 28, 28, 28, 28, 28, 28, 7, 7, 28, 28, +/* 1x */ 28, 28, 28, 28, 28, 7, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +/* 2x */ 28, 28, 28, 28, 28, 7, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +/* 3x */ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +/* 4x */ 7, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 26, 12, 17, 20, 10, +/* 5x */ 24, 28, 28, 28, 28, 28, 28, 28, 28, 28, 15, 4, 21, 18, 19, 28, +/* 6x */ 11, 16, 28, 28, 28, 28, 28, 28, 28, 28, 28, 23, 22, 2, 13, 6, +/* 7x */ 28, 28, 28, 28, 28, 28, 28, 28, 28, 8, 5, 5, 5, 8, 14, 8, +/* 8x */ 28, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28, 28, 28, 28, 28, +/* 9x */ 28, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28, 28, 28, 28, 28, +/* Ax */ 28, 25, 1, 1, 1, 1, 1, 0, 2, 2, 28, 28, 28, 28, 28, 28, +/* Bx */ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 9, 28, 28, 28, 28, 28, +/* Cx */ 28, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28, 28, 28, 28, 28, +/* Dx */ 28, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 28, 28, 28, 28, 28, +/* Ex */ 28, 28, 1, 1, 1, 1, 1, 0, 2, 2, 28, 28, 28, 28, 28, 28, +/* Fx */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 28, 28, 28, 28, 28, 28, +#endif +}; + +/* +** The charMap() macro maps alphabetic characters (only) into their +** lower-case ASCII equivalent. On ASCII machines, this is just +** an upper-to-lower case map. On EBCDIC machines we also need +** to adjust the encoding. The mapping is only valid for alphabetics +** which are the only characters for which this feature is used. +** +** Used by keywordhash.h +*/ +#ifdef SQLITE_ASCII +# define charMap(X) sqlite3UpperToLower[(unsigned char)X] +#endif +#ifdef SQLITE_EBCDIC +# define charMap(X) ebcdicToAscii[(unsigned char)X] +const unsigned char ebcdicToAscii[] = { +/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 3x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 4x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 5x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, /* 6x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 7x */ + 0, 97, 98, 99,100,101,102,103,104,105, 0, 0, 0, 0, 0, 0, /* 8x */ + 0,106,107,108,109,110,111,112,113,114, 0, 0, 0, 0, 0, 0, /* 9x */ + 0, 0,115,116,117,118,119,120,121,122, 0, 0, 0, 0, 0, 0, /* Ax */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Bx */ + 0, 97, 98, 99,100,101,102,103,104,105, 0, 0, 0, 0, 0, 0, /* Cx */ + 0,106,107,108,109,110,111,112,113,114, 0, 0, 0, 0, 0, 0, /* Dx */ + 0, 0,115,116,117,118,119,120,121,122, 0, 0, 0, 0, 0, 0, /* Ex */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Fx */ +}; +#endif + +/* +** The sqlite3KeywordCode function looks up an identifier to determine if +** it is a keyword. If it is a keyword, the token code of that keyword is +** returned. If the input is not a keyword, TK_ID is returned. +** +** The implementation of this routine was generated by a program, +** mkkeywordhash.c, located in the tool subdirectory of the distribution. +** The output of the mkkeywordhash.c program is written into a file +** named keywordhash.h and then included into this source file by +** the #include below. +*/ +/************** Include keywordhash.h in the middle of tokenize.c ************/ +/************** Begin file keywordhash.h *************************************/ +/***** This file contains automatically generated code ****** +** +** The code in this file has been automatically generated by +** +** sqlite/tool/mkkeywordhash.c +** +** The code in this file implements a function that determines whether +** or not a given identifier is really an SQL keyword. The same thing +** might be implemented more directly using a hand-written hash table. +** But by using this automatically generated code, the size of the code +** is substantially reduced. This is important for embedded applications +** on platforms with limited memory. +*/ +/* Hash score: 231 */ +/* zKWText[] encodes 1007 bytes of keyword text in 667 bytes */ +/* REINDEXEDESCAPEACHECKEYBEFOREIGNOREGEXPLAINSTEADDATABASELECT */ +/* ABLEFTHENDEFERRABLELSEXCLUDELETEMPORARYISNULLSAVEPOINTERSECT */ +/* IESNOTNULLIKEXCEPTRANSACTIONATURALTERAISEXCLUSIVEXISTS */ +/* CONSTRAINTOFFSETRIGGERANGENERATEDETACHAVINGLOBEGINNEREFERENCES */ +/* UNIQUERYWITHOUTERELEASEATTACHBETWEENOTHINGROUPSCASCADEFAULT */ +/* CASECOLLATECREATECURRENT_DATEIMMEDIATEJOINSERTMATCHPLANALYZE */ +/* PRAGMATERIALIZEDEFERREDISTINCTUPDATEVALUESVIRTUALWAYSWHENWHERE */ +/* CURSIVEABORTAFTERENAMEANDROPARTITIONAUTOINCREMENTCASTCOLUMN */ +/* COMMITCONFLICTCROSSCURRENT_TIMESTAMPRECEDINGFAILASTFILTER */ +/* EPLACEFIRSTFOLLOWINGFROMFULLIMITIFORDERESTRICTOTHERSOVER */ +/* ETURNINGRIGHTROLLBACKROWSUNBOUNDEDUNIONUSINGVACUUMVIEWINDOWBY */ +/* INITIALLYPRIMARY */ +static const char zKWText[666] = { + 'R','E','I','N','D','E','X','E','D','E','S','C','A','P','E','A','C','H', + 'E','C','K','E','Y','B','E','F','O','R','E','I','G','N','O','R','E','G', + 'E','X','P','L','A','I','N','S','T','E','A','D','D','A','T','A','B','A', + 'S','E','L','E','C','T','A','B','L','E','F','T','H','E','N','D','E','F', + 'E','R','R','A','B','L','E','L','S','E','X','C','L','U','D','E','L','E', + 'T','E','M','P','O','R','A','R','Y','I','S','N','U','L','L','S','A','V', + 'E','P','O','I','N','T','E','R','S','E','C','T','I','E','S','N','O','T', + 'N','U','L','L','I','K','E','X','C','E','P','T','R','A','N','S','A','C', + 'T','I','O','N','A','T','U','R','A','L','T','E','R','A','I','S','E','X', + 'C','L','U','S','I','V','E','X','I','S','T','S','C','O','N','S','T','R', + 'A','I','N','T','O','F','F','S','E','T','R','I','G','G','E','R','A','N', + 'G','E','N','E','R','A','T','E','D','E','T','A','C','H','A','V','I','N', + 'G','L','O','B','E','G','I','N','N','E','R','E','F','E','R','E','N','C', + 'E','S','U','N','I','Q','U','E','R','Y','W','I','T','H','O','U','T','E', + 'R','E','L','E','A','S','E','A','T','T','A','C','H','B','E','T','W','E', + 'E','N','O','T','H','I','N','G','R','O','U','P','S','C','A','S','C','A', + 'D','E','F','A','U','L','T','C','A','S','E','C','O','L','L','A','T','E', + 'C','R','E','A','T','E','C','U','R','R','E','N','T','_','D','A','T','E', + 'I','M','M','E','D','I','A','T','E','J','O','I','N','S','E','R','T','M', + 'A','T','C','H','P','L','A','N','A','L','Y','Z','E','P','R','A','G','M', + 'A','T','E','R','I','A','L','I','Z','E','D','E','F','E','R','R','E','D', + 'I','S','T','I','N','C','T','U','P','D','A','T','E','V','A','L','U','E', + 'S','V','I','R','T','U','A','L','W','A','Y','S','W','H','E','N','W','H', + 'E','R','E','C','U','R','S','I','V','E','A','B','O','R','T','A','F','T', + 'E','R','E','N','A','M','E','A','N','D','R','O','P','A','R','T','I','T', + 'I','O','N','A','U','T','O','I','N','C','R','E','M','E','N','T','C','A', + 'S','T','C','O','L','U','M','N','C','O','M','M','I','T','C','O','N','F', + 'L','I','C','T','C','R','O','S','S','C','U','R','R','E','N','T','_','T', + 'I','M','E','S','T','A','M','P','R','E','C','E','D','I','N','G','F','A', + 'I','L','A','S','T','F','I','L','T','E','R','E','P','L','A','C','E','F', + 'I','R','S','T','F','O','L','L','O','W','I','N','G','F','R','O','M','F', + 'U','L','L','I','M','I','T','I','F','O','R','D','E','R','E','S','T','R', + 'I','C','T','O','T','H','E','R','S','O','V','E','R','E','T','U','R','N', + 'I','N','G','R','I','G','H','T','R','O','L','L','B','A','C','K','R','O', + 'W','S','U','N','B','O','U','N','D','E','D','U','N','I','O','N','U','S', + 'I','N','G','V','A','C','U','U','M','V','I','E','W','I','N','D','O','W', + 'B','Y','I','N','I','T','I','A','L','L','Y','P','R','I','M','A','R','Y', +}; +/* aKWHash[i] is the hash value for the i-th keyword */ +static const unsigned char aKWHash[127] = { + 84, 92, 134, 82, 105, 29, 0, 0, 94, 0, 85, 72, 0, + 53, 35, 86, 15, 0, 42, 97, 54, 89, 135, 19, 0, 0, + 140, 0, 40, 129, 0, 22, 107, 0, 9, 0, 0, 123, 80, + 0, 78, 6, 0, 65, 103, 147, 0, 136, 115, 0, 0, 48, + 0, 90, 24, 0, 17, 0, 27, 70, 23, 26, 5, 60, 142, + 110, 122, 0, 73, 91, 71, 145, 61, 120, 74, 0, 49, 0, + 11, 41, 0, 113, 0, 0, 0, 109, 10, 111, 116, 125, 14, + 50, 124, 0, 100, 0, 18, 121, 144, 56, 130, 139, 88, 83, + 37, 30, 126, 0, 0, 108, 51, 131, 128, 0, 34, 0, 0, + 132, 0, 98, 38, 39, 0, 20, 45, 117, 93, +}; +/* aKWNext[] forms the hash collision chain. If aKWHash[i]==0 +** then the i-th keyword has no more hash collisions. Otherwise, +** the next keyword with the same hash is aKWHash[i]-1. */ +static const unsigned char aKWNext[148] = {0, + 0, 0, 0, 0, 4, 0, 43, 0, 0, 106, 114, 0, 0, + 0, 2, 0, 0, 143, 0, 0, 0, 13, 0, 0, 0, 0, + 141, 0, 0, 119, 52, 0, 0, 137, 12, 0, 0, 62, 0, + 138, 0, 133, 0, 0, 36, 0, 0, 28, 77, 0, 0, 0, + 0, 59, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 69, 0, 0, 0, 0, 0, 146, 3, 0, 58, 0, 1, + 75, 0, 0, 0, 31, 0, 0, 0, 0, 0, 127, 0, 104, + 0, 64, 66, 63, 0, 0, 0, 0, 0, 46, 0, 16, 8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 101, 0, + 112, 21, 7, 67, 0, 79, 96, 118, 0, 0, 68, 0, 0, + 99, 44, 0, 55, 0, 76, 0, 95, 32, 33, 57, 25, 0, + 102, 0, 0, 87, +}; +/* aKWLen[i] is the length (in bytes) of the i-th keyword */ +static const unsigned char aKWLen[148] = {0, + 7, 7, 5, 4, 6, 4, 5, 3, 6, 7, 3, 6, 6, + 7, 7, 3, 8, 2, 6, 5, 4, 4, 3, 10, 4, 7, + 6, 9, 4, 2, 6, 5, 9, 9, 4, 7, 3, 2, 4, + 4, 6, 11, 6, 2, 7, 5, 5, 9, 6, 10, 4, 6, + 2, 3, 7, 5, 9, 6, 6, 4, 5, 5, 10, 6, 5, + 7, 4, 5, 7, 6, 7, 7, 6, 5, 7, 3, 7, 4, + 7, 6, 12, 9, 4, 6, 5, 4, 7, 6, 12, 8, 8, + 2, 6, 6, 7, 6, 4, 5, 9, 5, 5, 6, 3, 4, + 9, 13, 2, 2, 4, 6, 6, 8, 5, 17, 12, 7, 9, + 4, 4, 6, 7, 5, 9, 4, 4, 5, 2, 5, 8, 6, + 4, 9, 5, 8, 4, 3, 9, 5, 5, 6, 4, 6, 2, + 2, 9, 3, 7, +}; +/* aKWOffset[i] is the index into zKWText[] of the start of +** the text for the i-th keyword. */ +static const unsigned short int aKWOffset[148] = {0, + 0, 2, 2, 8, 9, 14, 16, 20, 23, 25, 25, 29, 33, + 36, 41, 46, 48, 53, 54, 59, 62, 65, 67, 69, 78, 81, + 86, 90, 90, 94, 99, 101, 105, 111, 119, 123, 123, 123, 126, + 129, 132, 137, 142, 146, 147, 152, 156, 160, 168, 174, 181, 184, + 184, 187, 189, 195, 198, 206, 211, 216, 219, 222, 226, 236, 239, + 244, 244, 248, 252, 259, 265, 271, 277, 277, 283, 284, 288, 295, + 299, 306, 312, 324, 333, 335, 341, 346, 348, 355, 359, 370, 377, + 378, 385, 391, 397, 402, 408, 412, 415, 424, 429, 433, 439, 441, + 444, 453, 455, 457, 466, 470, 476, 482, 490, 495, 495, 495, 511, + 520, 523, 527, 532, 539, 544, 553, 557, 560, 565, 567, 571, 579, + 585, 588, 597, 602, 610, 610, 614, 623, 628, 633, 639, 642, 645, + 648, 650, 655, 659, +}; +/* aKWCode[i] is the parser symbol code for the i-th keyword */ +static const unsigned char aKWCode[148] = {0, + TK_REINDEX, TK_INDEXED, TK_INDEX, TK_DESC, TK_ESCAPE, + TK_EACH, TK_CHECK, TK_KEY, TK_BEFORE, TK_FOREIGN, + TK_FOR, TK_IGNORE, TK_LIKE_KW, TK_EXPLAIN, TK_INSTEAD, + TK_ADD, TK_DATABASE, TK_AS, TK_SELECT, TK_TABLE, + TK_JOIN_KW, TK_THEN, TK_END, TK_DEFERRABLE, TK_ELSE, + TK_EXCLUDE, TK_DELETE, TK_TEMP, TK_TEMP, TK_OR, + TK_ISNULL, TK_NULLS, TK_SAVEPOINT, TK_INTERSECT, TK_TIES, + TK_NOTNULL, TK_NOT, TK_NO, TK_NULL, TK_LIKE_KW, + TK_EXCEPT, TK_TRANSACTION,TK_ACTION, TK_ON, TK_JOIN_KW, + TK_ALTER, TK_RAISE, TK_EXCLUSIVE, TK_EXISTS, TK_CONSTRAINT, + TK_INTO, TK_OFFSET, TK_OF, TK_SET, TK_TRIGGER, + TK_RANGE, TK_GENERATED, TK_DETACH, TK_HAVING, TK_LIKE_KW, + TK_BEGIN, TK_JOIN_KW, TK_REFERENCES, TK_UNIQUE, TK_QUERY, + TK_WITHOUT, TK_WITH, TK_JOIN_KW, TK_RELEASE, TK_ATTACH, + TK_BETWEEN, TK_NOTHING, TK_GROUPS, TK_GROUP, TK_CASCADE, + TK_ASC, TK_DEFAULT, TK_CASE, TK_COLLATE, TK_CREATE, + TK_CTIME_KW, TK_IMMEDIATE, TK_JOIN, TK_INSERT, TK_MATCH, + TK_PLAN, TK_ANALYZE, TK_PRAGMA, TK_MATERIALIZED, TK_DEFERRED, + TK_DISTINCT, TK_IS, TK_UPDATE, TK_VALUES, TK_VIRTUAL, + TK_ALWAYS, TK_WHEN, TK_WHERE, TK_RECURSIVE, TK_ABORT, + TK_AFTER, TK_RENAME, TK_AND, TK_DROP, TK_PARTITION, + TK_AUTOINCR, TK_TO, TK_IN, TK_CAST, TK_COLUMNKW, + TK_COMMIT, TK_CONFLICT, TK_JOIN_KW, TK_CTIME_KW, TK_CTIME_KW, + TK_CURRENT, TK_PRECEDING, TK_FAIL, TK_LAST, TK_FILTER, + TK_REPLACE, TK_FIRST, TK_FOLLOWING, TK_FROM, TK_JOIN_KW, + TK_LIMIT, TK_IF, TK_ORDER, TK_RESTRICT, TK_OTHERS, + TK_OVER, TK_RETURNING, TK_JOIN_KW, TK_ROLLBACK, TK_ROWS, + TK_ROW, TK_UNBOUNDED, TK_UNION, TK_USING, TK_VACUUM, + TK_VIEW, TK_WINDOW, TK_DO, TK_BY, TK_INITIALLY, + TK_ALL, TK_PRIMARY, +}; +/* Hash table decoded: +** 0: INSERT +** 1: IS +** 2: ROLLBACK TRIGGER +** 3: IMMEDIATE +** 4: PARTITION +** 5: TEMP +** 6: +** 7: +** 8: VALUES WITHOUT +** 9: +** 10: MATCH +** 11: NOTHING +** 12: +** 13: OF +** 14: TIES IGNORE +** 15: PLAN +** 16: INSTEAD INDEXED +** 17: +** 18: TRANSACTION RIGHT +** 19: WHEN +** 20: SET HAVING +** 21: MATERIALIZED IF +** 22: ROWS +** 23: SELECT +** 24: +** 25: +** 26: VACUUM SAVEPOINT +** 27: +** 28: LIKE UNION VIRTUAL REFERENCES +** 29: RESTRICT +** 30: +** 31: THEN REGEXP +** 32: TO +** 33: +** 34: BEFORE +** 35: +** 36: +** 37: FOLLOWING COLLATE CASCADE +** 38: CREATE +** 39: +** 40: CASE REINDEX +** 41: EACH +** 42: +** 43: QUERY +** 44: AND ADD +** 45: PRIMARY ANALYZE +** 46: +** 47: ROW ASC DETACH +** 48: CURRENT_TIME CURRENT_DATE +** 49: +** 50: +** 51: EXCLUSIVE TEMPORARY +** 52: +** 53: DEFERRED +** 54: DEFERRABLE +** 55: +** 56: DATABASE +** 57: +** 58: DELETE VIEW GENERATED +** 59: ATTACH +** 60: END +** 61: EXCLUDE +** 62: ESCAPE DESC +** 63: GLOB +** 64: WINDOW ELSE +** 65: COLUMN +** 66: FIRST +** 67: +** 68: GROUPS ALL +** 69: DISTINCT DROP KEY +** 70: BETWEEN +** 71: INITIALLY +** 72: BEGIN +** 73: FILTER CHECK ACTION +** 74: GROUP INDEX +** 75: +** 76: EXISTS DEFAULT +** 77: +** 78: FOR CURRENT_TIMESTAMP +** 79: EXCEPT +** 80: +** 81: CROSS +** 82: +** 83: +** 84: +** 85: CAST +** 86: FOREIGN AUTOINCREMENT +** 87: COMMIT +** 88: CURRENT AFTER ALTER +** 89: FULL FAIL CONFLICT +** 90: EXPLAIN +** 91: CONSTRAINT +** 92: FROM ALWAYS +** 93: +** 94: ABORT +** 95: +** 96: AS DO +** 97: REPLACE WITH RELEASE +** 98: BY RENAME +** 99: RANGE RAISE +** 100: OTHERS +** 101: USING NULLS +** 102: PRAGMA +** 103: JOIN ISNULL OFFSET +** 104: NOT +** 105: OR LAST LEFT +** 106: LIMIT +** 107: +** 108: +** 109: IN +** 110: INTO +** 111: OVER RECURSIVE +** 112: ORDER OUTER +** 113: +** 114: INTERSECT UNBOUNDED +** 115: +** 116: +** 117: RETURNING ON +** 118: +** 119: WHERE +** 120: NO INNER +** 121: NULL +** 122: +** 123: TABLE +** 124: NATURAL NOTNULL +** 125: PRECEDING +** 126: UPDATE UNIQUE +*/ +/* Check to see if z[0..n-1] is a keyword. If it is, write the +** parser symbol code for that keyword into *pType. Always +** return the integer n (the length of the token). */ +static int keywordCode(const char *z, int n, int *pType){ + int i, j; + const char *zKW; + assert( n>=2 ); + i = ((charMap(z[0])*4) ^ (charMap(z[n-1])*3) ^ n*1) % 127; + for(i=(int)aKWHash[i]; i>0; i=aKWNext[i]){ + if( aKWLen[i]!=n ) continue; + zKW = &zKWText[aKWOffset[i]]; +#ifdef SQLITE_ASCII + if( (z[0]&~0x20)!=zKW[0] ) continue; + if( (z[1]&~0x20)!=zKW[1] ) continue; + j = 2; + while( j=2 ) keywordCode((char*)z, n, &id); + return id; +} +#define SQLITE_N_KEYWORD 147 +SQLITE_API int sqlite3_keyword_name(int i,const char **pzName,int *pnName){ + if( i<0 || i>=SQLITE_N_KEYWORD ) return SQLITE_ERROR; + i++; + *pzName = zKWText + aKWOffset[i]; + *pnName = aKWLen[i]; + return SQLITE_OK; +} +SQLITE_API int sqlite3_keyword_count(void){ return SQLITE_N_KEYWORD; } +SQLITE_API int sqlite3_keyword_check(const char *zName, int nName){ + return TK_ID!=sqlite3KeywordCode((const u8*)zName, nName); +} + +/************** End of keywordhash.h *****************************************/ +/************** Continuing where we left off in tokenize.c *******************/ + + +/* +** If X is a character that can be used in an identifier then +** IdChar(X) will be true. Otherwise it is false. +** +** For ASCII, any character with the high-order bit set is +** allowed in an identifier. For 7-bit characters, +** sqlite3IsIdChar[X] must be 1. +** +** For EBCDIC, the rules are more complex but have the same +** end result. +** +** Ticket #1066. the SQL standard does not allow '$' in the +** middle of identifiers. But many SQL implementations do. +** SQLite will allow '$' in identifiers for compatibility. +** But the feature is undocumented. +*/ +#ifdef SQLITE_ASCII +#define IdChar(C) ((sqlite3CtypeMap[(unsigned char)C]&0x46)!=0) +#endif +#ifdef SQLITE_EBCDIC +SQLITE_PRIVATE const char sqlite3IsEbcdicIdChar[] = { +/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */ + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 4x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, /* 5x */ + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, /* 6x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, /* 7x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, /* 8x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, /* 9x */ + 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, /* Ax */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Bx */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, /* Cx */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, /* Dx */ + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, /* Ex */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, /* Fx */ +}; +#define IdChar(C) (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40])) +#endif + +/* Make the IdChar function accessible from ctime.c and alter.c */ +SQLITE_PRIVATE int sqlite3IsIdChar(u8 c){ return IdChar(c); } + +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** Return the id of the next token in string (*pz). Before returning, set +** (*pz) to point to the byte following the parsed token. +*/ +static int getToken(const unsigned char **pz){ + const unsigned char *z = *pz; + int t; /* Token type to return */ + do { + z += sqlite3GetToken(z, &t); + }while( t==TK_SPACE || t==TK_COMMENT ); + if( t==TK_ID + || t==TK_STRING + || t==TK_JOIN_KW + || t==TK_WINDOW + || t==TK_OVER + || sqlite3ParserFallback(t)==TK_ID + ){ + t = TK_ID; + } + *pz = z; + return t; +} + +/* +** The following three functions are called immediately after the tokenizer +** reads the keywords WINDOW, OVER and FILTER, respectively, to determine +** whether the token should be treated as a keyword or an SQL identifier. +** This cannot be handled by the usual lemon %fallback method, due to +** the ambiguity in some constructions. e.g. +** +** SELECT sum(x) OVER ... +** +** In the above, "OVER" might be a keyword, or it might be an alias for the +** sum(x) expression. If a "%fallback ID OVER" directive were added to +** grammar, then SQLite would always treat "OVER" as an alias, making it +** impossible to call a window-function without a FILTER clause. +** +** WINDOW is treated as a keyword if: +** +** * the following token is an identifier, or a keyword that can fallback +** to being an identifier, and +** * the token after than one is TK_AS. +** +** OVER is a keyword if: +** +** * the previous token was TK_RP, and +** * the next token is either TK_LP or an identifier. +** +** FILTER is a keyword if: +** +** * the previous token was TK_RP, and +** * the next token is TK_LP. +*/ +static int analyzeWindowKeyword(const unsigned char *z){ + int t; + t = getToken(&z); + if( t!=TK_ID ) return TK_ID; + t = getToken(&z); + if( t!=TK_AS ) return TK_ID; + return TK_WINDOW; +} +static int analyzeOverKeyword(const unsigned char *z, int lastToken){ + if( lastToken==TK_RP ){ + int t = getToken(&z); + if( t==TK_LP || t==TK_ID ) return TK_OVER; + } + return TK_ID; +} +static int analyzeFilterKeyword(const unsigned char *z, int lastToken){ + if( lastToken==TK_RP && getToken(&z)==TK_LP ){ + return TK_FILTER; + } + return TK_ID; +} +#endif /* SQLITE_OMIT_WINDOWFUNC */ + +/* +** Return the length (in bytes) of the token that begins at z[0]. +** Store the token type in *tokenType before returning. +*/ +SQLITE_PRIVATE i64 sqlite3GetToken(const unsigned char *z, int *tokenType){ + i64 i; + int c; + switch( aiClass[*z] ){ /* Switch on the character-class of the first byte + ** of the token. See the comment on the CC_ defines + ** above. */ + case CC_SPACE: { + testcase( z[0]==' ' ); + testcase( z[0]=='\t' ); + testcase( z[0]=='\n' ); + testcase( z[0]=='\f' ); + testcase( z[0]=='\r' ); + for(i=1; sqlite3Isspace(z[i]); i++){} + *tokenType = TK_SPACE; + return i; + } + case CC_MINUS: { + if( z[1]=='-' ){ + for(i=2; (c=z[i])!=0 && c!='\n'; i++){} + *tokenType = TK_COMMENT; + return i; + }else if( z[1]=='>' ){ + *tokenType = TK_PTR; + return 2 + (z[2]=='>'); + } + *tokenType = TK_MINUS; + return 1; + } + case CC_LP: { + *tokenType = TK_LP; + return 1; + } + case CC_RP: { + *tokenType = TK_RP; + return 1; + } + case CC_SEMI: { + *tokenType = TK_SEMI; + return 1; + } + case CC_PLUS: { + *tokenType = TK_PLUS; + return 1; + } + case CC_STAR: { + *tokenType = TK_STAR; + return 1; + } + case CC_SLASH: { + if( z[1]!='*' || z[2]==0 ){ + *tokenType = TK_SLASH; + return 1; + } + for(i=3, c=z[2]; (c!='*' || z[i]!='/') && (c=z[i])!=0; i++){} + if( c ) i++; + *tokenType = TK_COMMENT; + return i; + } + case CC_PERCENT: { + *tokenType = TK_REM; + return 1; + } + case CC_EQ: { + *tokenType = TK_EQ; + return 1 + (z[1]=='='); + } + case CC_LT: { + if( (c=z[1])=='=' ){ + *tokenType = TK_LE; + return 2; + }else if( c=='>' ){ + *tokenType = TK_NE; + return 2; + }else if( c=='<' ){ + *tokenType = TK_LSHIFT; + return 2; + }else{ + *tokenType = TK_LT; + return 1; + } + } + case CC_GT: { + if( (c=z[1])=='=' ){ + *tokenType = TK_GE; + return 2; + }else if( c=='>' ){ + *tokenType = TK_RSHIFT; + return 2; + }else{ + *tokenType = TK_GT; + return 1; + } + } + case CC_BANG: { + if( z[1]!='=' ){ + *tokenType = TK_ILLEGAL; + return 1; + }else{ + *tokenType = TK_NE; + return 2; + } + } + case CC_PIPE: { + if( z[1]!='|' ){ + *tokenType = TK_BITOR; + return 1; + }else{ + *tokenType = TK_CONCAT; + return 2; + } + } + case CC_COMMA: { + *tokenType = TK_COMMA; + return 1; + } + case CC_AND: { + *tokenType = TK_BITAND; + return 1; + } + case CC_TILDA: { + *tokenType = TK_BITNOT; + return 1; + } + case CC_QUOTE: { + int delim = z[0]; + testcase( delim=='`' ); + testcase( delim=='\'' ); + testcase( delim=='"' ); + for(i=1; (c=z[i])!=0; i++){ + if( c==delim ){ + if( z[i+1]==delim ){ + i++; + }else{ + break; + } + } + } + if( c=='\'' ){ + *tokenType = TK_STRING; + return i+1; + }else if( c!=0 ){ + *tokenType = TK_ID; + return i+1; + }else{ + *tokenType = TK_ILLEGAL; + return i; + } + } + case CC_DOT: { +#ifndef SQLITE_OMIT_FLOATING_POINT + if( !sqlite3Isdigit(z[1]) ) +#endif + { + *tokenType = TK_DOT; + return 1; + } + /* If the next character is a digit, this is a floating point + ** number that begins with ".". Fall thru into the next case */ + /* no break */ deliberate_fall_through + } + case CC_DIGIT: { + testcase( z[0]=='0' ); testcase( z[0]=='1' ); testcase( z[0]=='2' ); + testcase( z[0]=='3' ); testcase( z[0]=='4' ); testcase( z[0]=='5' ); + testcase( z[0]=='6' ); testcase( z[0]=='7' ); testcase( z[0]=='8' ); + testcase( z[0]=='9' ); testcase( z[0]=='.' ); + *tokenType = TK_INTEGER; +#ifndef SQLITE_OMIT_HEX_INTEGER + if( z[0]=='0' && (z[1]=='x' || z[1]=='X') && sqlite3Isxdigit(z[2]) ){ + for(i=3; 1; i++){ + if( sqlite3Isxdigit(z[i])==0 ){ + if( z[i]==SQLITE_DIGIT_SEPARATOR ){ + *tokenType = TK_QNUMBER; + }else{ + break; + } + } + } + }else +#endif + { + for(i=0; 1; i++){ + if( sqlite3Isdigit(z[i])==0 ){ + if( z[i]==SQLITE_DIGIT_SEPARATOR ){ + *tokenType = TK_QNUMBER; + }else{ + break; + } + } + } +#ifndef SQLITE_OMIT_FLOATING_POINT + if( z[i]=='.' ){ + if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT; + for(i++; 1; i++){ + if( sqlite3Isdigit(z[i])==0 ){ + if( z[i]==SQLITE_DIGIT_SEPARATOR ){ + *tokenType = TK_QNUMBER; + }else{ + break; + } + } + } + } + if( (z[i]=='e' || z[i]=='E') && + ( sqlite3Isdigit(z[i+1]) + || ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2])) + ) + ){ + if( *tokenType==TK_INTEGER ) *tokenType = TK_FLOAT; + for(i+=2; 1; i++){ + if( sqlite3Isdigit(z[i])==0 ){ + if( z[i]==SQLITE_DIGIT_SEPARATOR ){ + *tokenType = TK_QNUMBER; + }else{ + break; + } + } + } + } +#endif + } + while( IdChar(z[i]) ){ + *tokenType = TK_ILLEGAL; + i++; + } + return i; + } + case CC_QUOTE2: { + for(i=1, c=z[0]; c!=']' && (c=z[i])!=0; i++){} + *tokenType = c==']' ? TK_ID : TK_ILLEGAL; + return i; + } + case CC_VARNUM: { + *tokenType = TK_VARIABLE; + for(i=1; sqlite3Isdigit(z[i]); i++){} + return i; + } + case CC_DOLLAR: + case CC_VARALPHA: { + int n = 0; + testcase( z[0]=='$' ); testcase( z[0]=='@' ); + testcase( z[0]==':' ); testcase( z[0]=='#' ); + *tokenType = TK_VARIABLE; + for(i=1; (c=z[i])!=0; i++){ + if( IdChar(c) ){ + n++; +#ifndef SQLITE_OMIT_TCL_VARIABLE + }else if( c=='(' && n>0 ){ + do{ + i++; + }while( (c=z[i])!=0 && !sqlite3Isspace(c) && c!=')' ); + if( c==')' ){ + i++; + }else{ + *tokenType = TK_ILLEGAL; + } + break; + }else if( c==':' && z[i+1]==':' ){ + i++; +#endif + }else{ + break; + } + } + if( n==0 ) *tokenType = TK_ILLEGAL; + return i; + } + case CC_KYWD0: { + if( aiClass[z[1]]>CC_KYWD ){ i = 1; break; } + for(i=2; aiClass[z[i]]<=CC_KYWD; i++){} + if( IdChar(z[i]) ){ + /* This token started out using characters that can appear in keywords, + ** but z[i] is a character not allowed within keywords, so this must + ** be an identifier instead */ + i++; + break; + } + *tokenType = TK_ID; + return keywordCode((char*)z, i, tokenType); + } + case CC_X: { +#ifndef SQLITE_OMIT_BLOB_LITERAL + testcase( z[0]=='x' ); testcase( z[0]=='X' ); + if( z[1]=='\'' ){ + *tokenType = TK_BLOB; + for(i=2; sqlite3Isxdigit(z[i]); i++){} + if( z[i]!='\'' || i%2 ){ + *tokenType = TK_ILLEGAL; + while( z[i] && z[i]!='\'' ){ i++; } + } + if( z[i] ) i++; + return i; + } +#endif + /* If it is not a BLOB literal, then it must be an ID, since no + ** SQL keywords start with the letter 'x'. Fall through */ + /* no break */ deliberate_fall_through + } + case CC_KYWD: + case CC_ID: { + i = 1; + break; + } + case CC_BOM: { + if( z[1]==0xbb && z[2]==0xbf ){ + *tokenType = TK_SPACE; + return 3; + } + i = 1; + break; + } + case CC_NUL: { + *tokenType = TK_ILLEGAL; + return 0; + } + default: { + *tokenType = TK_ILLEGAL; + return 1; + } + } + while( IdChar(z[i]) ){ i++; } + *tokenType = TK_ID; + return i; +} + +/* +** Run the parser on the given SQL string. +*/ +SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql){ + int nErr = 0; /* Number of errors encountered */ + void *pEngine; /* The LEMON-generated LALR(1) parser */ + i64 n = 0; /* Length of the next token token */ + int tokenType; /* type of the next token */ + int lastTokenParsed = -1; /* type of the previous token */ + sqlite3 *db = pParse->db; /* The database connection */ + int mxSqlLen; /* Max length of an SQL string */ + Parse *pParentParse = 0; /* Outer parse context, if any */ +#ifdef sqlite3Parser_ENGINEALWAYSONSTACK + yyParser sEngine; /* Space to hold the Lemon-generated Parser object */ +#endif + VVA_ONLY( u8 startedWithOom = db->mallocFailed ); + + assert( zSql!=0 ); + mxSqlLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH]; + if( db->nVdbeActive==0 ){ + AtomicStore(&db->u1.isInterrupted, 0); + } + pParse->rc = SQLITE_OK; + pParse->zTail = zSql; +#ifdef SQLITE_DEBUG + if( db->flags & SQLITE_ParserTrace ){ + printf("parser: [[[%s]]]\n", zSql); + sqlite3ParserTrace(stdout, "parser: "); + }else{ + sqlite3ParserTrace(0, 0); + } +#endif +#ifdef sqlite3Parser_ENGINEALWAYSONSTACK + pEngine = &sEngine; + sqlite3ParserInit(pEngine, pParse); +#else + pEngine = sqlite3ParserAlloc(sqlite3Malloc, pParse); + if( pEngine==0 ){ + sqlite3OomFault(db); + return SQLITE_NOMEM_BKPT; + } +#endif + assert( pParse->pNewTable==0 ); + assert( pParse->pNewTrigger==0 ); + assert( pParse->nVar==0 ); + assert( pParse->pVList==0 ); + pParentParse = db->pParse; + db->pParse = pParse; + while( 1 ){ + n = sqlite3GetToken((u8*)zSql, &tokenType); + mxSqlLen -= n; + if( mxSqlLen<0 ){ + pParse->rc = SQLITE_TOOBIG; + pParse->nErr++; + break; + } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( tokenType>=TK_WINDOW ){ + assert( tokenType==TK_SPACE || tokenType==TK_OVER || tokenType==TK_FILTER + || tokenType==TK_ILLEGAL || tokenType==TK_WINDOW + || tokenType==TK_QNUMBER || tokenType==TK_COMMENT + ); +#else + if( tokenType>=TK_SPACE ){ + assert( tokenType==TK_SPACE || tokenType==TK_ILLEGAL + || tokenType==TK_QNUMBER || tokenType==TK_COMMENT + ); +#endif /* SQLITE_OMIT_WINDOWFUNC */ + if( AtomicLoad(&db->u1.isInterrupted) ){ + pParse->rc = SQLITE_INTERRUPT; + pParse->nErr++; + break; + } + if( tokenType==TK_SPACE ){ + zSql += n; + continue; + } + if( zSql[0]==0 ){ + /* Upon reaching the end of input, call the parser two more times + ** with tokens TK_SEMI and 0, in that order. */ + if( lastTokenParsed==TK_SEMI ){ + tokenType = 0; + }else if( lastTokenParsed==0 ){ + break; + }else{ + tokenType = TK_SEMI; + } + n = 0; +#ifndef SQLITE_OMIT_WINDOWFUNC + }else if( tokenType==TK_WINDOW ){ + assert( n==6 ); + tokenType = analyzeWindowKeyword((const u8*)&zSql[6]); + }else if( tokenType==TK_OVER ){ + assert( n==4 ); + tokenType = analyzeOverKeyword((const u8*)&zSql[4], lastTokenParsed); + }else if( tokenType==TK_FILTER ){ + assert( n==6 ); + tokenType = analyzeFilterKeyword((const u8*)&zSql[6], lastTokenParsed); +#endif /* SQLITE_OMIT_WINDOWFUNC */ + }else if( tokenType==TK_COMMENT + && (db->init.busy || (db->flags & SQLITE_Comments)!=0) + ){ + /* Ignore SQL comments if either (1) we are reparsing the schema or + ** (2) SQLITE_DBCONFIG_ENABLE_COMMENTS is turned on (the default). */ + zSql += n; + continue; + }else if( tokenType!=TK_QNUMBER ){ + Token x; + x.z = zSql; + x.n = (u32)n; + sqlite3ErrorMsg(pParse, "unrecognized token: \"%T\"", &x); + break; + } + } + pParse->sLastToken.z = zSql; + pParse->sLastToken.n = (u32)n; + sqlite3Parser(pEngine, tokenType, pParse->sLastToken); + lastTokenParsed = tokenType; + zSql += n; + assert( db->mallocFailed==0 || pParse->rc!=SQLITE_OK || startedWithOom ); + if( pParse->rc!=SQLITE_OK ) break; + } + assert( nErr==0 ); +#ifdef YYTRACKMAXSTACKDEPTH + sqlite3_mutex_enter(sqlite3MallocMutex()); + sqlite3StatusHighwater(SQLITE_STATUS_PARSER_STACK, + sqlite3ParserStackPeak(pEngine) + ); + sqlite3_mutex_leave(sqlite3MallocMutex()); +#endif /* YYDEBUG */ +#ifdef sqlite3Parser_ENGINEALWAYSONSTACK + sqlite3ParserFinalize(pEngine); +#else + sqlite3ParserFree(pEngine, sqlite3_free); +#endif + if( db->mallocFailed ){ + pParse->rc = SQLITE_NOMEM_BKPT; + } + if( pParse->zErrMsg || (pParse->rc!=SQLITE_OK && pParse->rc!=SQLITE_DONE) ){ + if( pParse->zErrMsg==0 ){ + pParse->zErrMsg = sqlite3MPrintf(db, "%s", sqlite3ErrStr(pParse->rc)); + } + if( (pParse->prepFlags & SQLITE_PREPARE_DONT_LOG)==0 ){ + sqlite3_log(pParse->rc, "%s in \"%s\"", pParse->zErrMsg, pParse->zTail); + } + nErr++; + } + pParse->zTail = zSql; +#ifndef SQLITE_OMIT_VIRTUALTABLE + sqlite3_free(pParse->apVtabLock); +#endif + + if( pParse->pNewTable && !IN_SPECIAL_PARSE ){ + /* If the pParse->declareVtab flag is set, do not delete any table + ** structure built up in pParse->pNewTable. The calling code (see vtab.c) + ** will take responsibility for freeing the Table structure. + */ + sqlite3DeleteTable(db, pParse->pNewTable); + } + if( pParse->pNewTrigger && !IN_RENAME_OBJECT ){ + sqlite3DeleteTrigger(db, pParse->pNewTrigger); + } + if( pParse->pVList ) sqlite3DbNNFreeNN(db, pParse->pVList); + db->pParse = pParentParse; + assert( nErr==0 || pParse->rc!=SQLITE_OK ); + return nErr; +} + + +#ifdef SQLITE_ENABLE_NORMALIZE +/* +** Insert a single space character into pStr if the current string +** ends with an identifier +*/ +static void addSpaceSeparator(sqlite3_str *pStr){ + if( pStr->nChar && sqlite3IsIdChar(pStr->zText[pStr->nChar-1]) ){ + sqlite3_str_append(pStr, " ", 1); + } +} + +/* +** Compute a normalization of the SQL given by zSql[0..nSql-1]. Return +** the normalization in space obtained from sqlite3DbMalloc(). Or return +** NULL if anything goes wrong or if zSql is NULL. +*/ +SQLITE_PRIVATE char *sqlite3Normalize( + Vdbe *pVdbe, /* VM being reprepared */ + const char *zSql /* The original SQL string */ +){ + sqlite3 *db; /* The database connection */ + int i; /* Next unread byte of zSql[] */ + i64 n; /* length of current token */ + int tokenType; /* type of current token */ + int prevType = 0; /* Previous non-whitespace token */ + int nParen; /* Number of nested levels of parentheses */ + int iStartIN; /* Start of RHS of IN operator in z[] */ + int nParenAtIN; /* Value of nParent at start of RHS of IN operator */ + u32 j; /* Bytes of normalized SQL generated so far */ + sqlite3_str *pStr; /* The normalized SQL string under construction */ + + db = sqlite3VdbeDb(pVdbe); + tokenType = -1; + nParen = iStartIN = nParenAtIN = 0; + pStr = sqlite3_str_new(db); + assert( pStr!=0 ); /* sqlite3_str_new() never returns NULL */ + for(i=0; zSql[i] && pStr->accError==0; i+=n){ + if( tokenType!=TK_SPACE ){ + prevType = tokenType; + } + n = sqlite3GetToken((unsigned char*)zSql+i, &tokenType); + if( NEVER(n<=0) ) break; + switch( tokenType ){ + case TK_COMMENT: + case TK_SPACE: { + break; + } + case TK_NULL: { + if( prevType==TK_IS || prevType==TK_NOT ){ + sqlite3_str_append(pStr, " NULL", 5); + break; + } + /* Fall through */ + } + case TK_STRING: + case TK_INTEGER: + case TK_FLOAT: + case TK_VARIABLE: + case TK_BLOB: { + sqlite3_str_append(pStr, "?", 1); + break; + } + case TK_LP: { + nParen++; + if( prevType==TK_IN ){ + iStartIN = pStr->nChar; + nParenAtIN = nParen; + } + sqlite3_str_append(pStr, "(", 1); + break; + } + case TK_RP: { + if( iStartIN>0 && nParen==nParenAtIN ){ + assert( pStr->nChar>=(u32)iStartIN ); + pStr->nChar = iStartIN+1; + sqlite3_str_append(pStr, "?,?,?", 5); + iStartIN = 0; + } + nParen--; + sqlite3_str_append(pStr, ")", 1); + break; + } + case TK_ID: { + iStartIN = 0; + j = pStr->nChar; + if( sqlite3Isquote(zSql[i]) ){ + char *zId = sqlite3DbStrNDup(db, zSql+i, n); + int nId; + int eType = 0; + if( zId==0 ) break; + sqlite3Dequote(zId); + if( zSql[i]=='"' && sqlite3VdbeUsesDoubleQuotedString(pVdbe, zId) ){ + sqlite3_str_append(pStr, "?", 1); + sqlite3DbFree(db, zId); + break; + } + nId = sqlite3Strlen30(zId); + if( sqlite3GetToken((u8*)zId, &eType)==nId && eType==TK_ID ){ + addSpaceSeparator(pStr); + sqlite3_str_append(pStr, zId, nId); + }else{ + sqlite3_str_appendf(pStr, "\"%w\"", zId); + } + sqlite3DbFree(db, zId); + }else{ + addSpaceSeparator(pStr); + sqlite3_str_append(pStr, zSql+i, n); + } + while( jnChar ){ + pStr->zText[j] = sqlite3Tolower(pStr->zText[j]); + j++; + } + break; + } + case TK_SELECT: { + iStartIN = 0; + /* fall through */ + } + default: { + if( sqlite3IsIdChar(zSql[i]) ) addSpaceSeparator(pStr); + j = pStr->nChar; + sqlite3_str_append(pStr, zSql+i, n); + while( jnChar ){ + pStr->zText[j] = sqlite3Toupper(pStr->zText[j]); + j++; + } + break; + } + } + } + if( tokenType!=TK_SEMI ) sqlite3_str_append(pStr, ";", 1); + return sqlite3_str_finish(pStr); +} +#endif /* SQLITE_ENABLE_NORMALIZE */ + +/************** End of tokenize.c ********************************************/ +/************** Begin file complete.c ****************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** An tokenizer for SQL +** +** This file contains C code that implements the sqlite3_complete() API. +** This code used to be part of the tokenizer.c source file. But by +** separating it out, the code will be automatically omitted from +** static links that do not use it. +*/ +/* #include "sqliteInt.h" */ +#ifndef SQLITE_OMIT_COMPLETE + +/* +** This is defined in tokenize.c. We just have to import the definition. +*/ +#ifndef SQLITE_AMALGAMATION +#ifdef SQLITE_ASCII +#define IdChar(C) ((sqlite3CtypeMap[(unsigned char)C]&0x46)!=0) +#endif +#ifdef SQLITE_EBCDIC +SQLITE_PRIVATE const char sqlite3IsEbcdicIdChar[]; +#define IdChar(C) (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40])) +#endif +#endif /* SQLITE_AMALGAMATION */ + + +/* +** Token types used by the sqlite3_complete() routine. See the header +** comments on that procedure for additional information. +*/ +#define tkSEMI 0 +#define tkWS 1 +#define tkOTHER 2 +#ifndef SQLITE_OMIT_TRIGGER +#define tkEXPLAIN 3 +#define tkCREATE 4 +#define tkTEMP 5 +#define tkTRIGGER 6 +#define tkEND 7 +#endif + +/* +** Return TRUE if the given SQL string ends in a semicolon. +** +** Special handling is require for CREATE TRIGGER statements. +** Whenever the CREATE TRIGGER keywords are seen, the statement +** must end with ";END;". +** +** This implementation uses a state machine with 8 states: +** +** (0) INVALID We have not yet seen a non-whitespace character. +** +** (1) START At the beginning or end of an SQL statement. This routine +** returns 1 if it ends in the START state and 0 if it ends +** in any other state. +** +** (2) NORMAL We are in the middle of statement which ends with a single +** semicolon. +** +** (3) EXPLAIN The keyword EXPLAIN has been seen at the beginning of +** a statement. +** +** (4) CREATE The keyword CREATE has been seen at the beginning of a +** statement, possibly preceded by EXPLAIN and/or followed by +** TEMP or TEMPORARY +** +** (5) TRIGGER We are in the middle of a trigger definition that must be +** ended by a semicolon, the keyword END, and another semicolon. +** +** (6) SEMI We've seen the first semicolon in the ";END;" that occurs at +** the end of a trigger definition. +** +** (7) END We've seen the ";END" of the ";END;" that occurs at the end +** of a trigger definition. +** +** Transitions between states above are determined by tokens extracted +** from the input. The following tokens are significant: +** +** (0) tkSEMI A semicolon. +** (1) tkWS Whitespace. +** (2) tkOTHER Any other SQL token. +** (3) tkEXPLAIN The "explain" keyword. +** (4) tkCREATE The "create" keyword. +** (5) tkTEMP The "temp" or "temporary" keyword. +** (6) tkTRIGGER The "trigger" keyword. +** (7) tkEND The "end" keyword. +** +** Whitespace never causes a state transition and is always ignored. +** This means that a SQL string of all whitespace is invalid. +** +** If we compile with SQLITE_OMIT_TRIGGER, all of the computation needed +** to recognize the end of a trigger can be omitted. All we have to do +** is look for a semicolon that is not part of an string or comment. +*/ +SQLITE_API int sqlite3_complete(const char *zSql){ + u8 state = 0; /* Current state, using numbers defined in header comment */ + u8 token; /* Value of the next token */ + +#ifndef SQLITE_OMIT_TRIGGER + /* A complex statement machine used to detect the end of a CREATE TRIGGER + ** statement. This is the normal case. + */ + static const u8 trans[8][8] = { + /* Token: */ + /* State: ** SEMI WS OTHER EXPLAIN CREATE TEMP TRIGGER END */ + /* 0 INVALID: */ { 1, 0, 2, 3, 4, 2, 2, 2, }, + /* 1 START: */ { 1, 1, 2, 3, 4, 2, 2, 2, }, + /* 2 NORMAL: */ { 1, 2, 2, 2, 2, 2, 2, 2, }, + /* 3 EXPLAIN: */ { 1, 3, 3, 2, 4, 2, 2, 2, }, + /* 4 CREATE: */ { 1, 4, 2, 2, 2, 4, 5, 2, }, + /* 5 TRIGGER: */ { 6, 5, 5, 5, 5, 5, 5, 5, }, + /* 6 SEMI: */ { 6, 6, 5, 5, 5, 5, 5, 7, }, + /* 7 END: */ { 1, 7, 5, 5, 5, 5, 5, 5, }, + }; +#else + /* If triggers are not supported by this compile then the statement machine + ** used to detect the end of a statement is much simpler + */ + static const u8 trans[3][3] = { + /* Token: */ + /* State: ** SEMI WS OTHER */ + /* 0 INVALID: */ { 1, 0, 2, }, + /* 1 START: */ { 1, 1, 2, }, + /* 2 NORMAL: */ { 1, 2, 2, }, + }; +#endif /* SQLITE_OMIT_TRIGGER */ + +#ifdef SQLITE_ENABLE_API_ARMOR + if( zSql==0 ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + + while( *zSql ){ + switch( *zSql ){ + case ';': { /* A semicolon */ + token = tkSEMI; + break; + } + case ' ': + case '\r': + case '\t': + case '\n': + case '\f': { /* White space is ignored */ + token = tkWS; + break; + } + case '/': { /* C-style comments */ + if( zSql[1]!='*' ){ + token = tkOTHER; + break; + } + zSql += 2; + while( zSql[0] && (zSql[0]!='*' || zSql[1]!='/') ){ zSql++; } + if( zSql[0]==0 ) return 0; + zSql++; + token = tkWS; + break; + } + case '-': { /* SQL-style comments from "--" to end of line */ + if( zSql[1]!='-' ){ + token = tkOTHER; + break; + } + while( *zSql && *zSql!='\n' ){ zSql++; } + if( *zSql==0 ) return state==1; + token = tkWS; + break; + } + case '[': { /* Microsoft-style identifiers in [...] */ + zSql++; + while( *zSql && *zSql!=']' ){ zSql++; } + if( *zSql==0 ) return 0; + token = tkOTHER; + break; + } + case '`': /* Grave-accent quoted symbols used by MySQL */ + case '"': /* single- and double-quoted strings */ + case '\'': { + int c = *zSql; + zSql++; + while( *zSql && *zSql!=c ){ zSql++; } + if( *zSql==0 ) return 0; + token = tkOTHER; + break; + } + default: { +#ifdef SQLITE_EBCDIC + unsigned char c; +#endif + if( IdChar((u8)*zSql) ){ + /* Keywords and unquoted identifiers */ + int nId; + for(nId=1; IdChar(zSql[nId]); nId++){} +#ifdef SQLITE_OMIT_TRIGGER + token = tkOTHER; +#else + switch( *zSql ){ + case 'c': case 'C': { + if( nId==6 && sqlite3StrNICmp(zSql, "create", 6)==0 ){ + token = tkCREATE; + }else{ + token = tkOTHER; + } + break; + } + case 't': case 'T': { + if( nId==7 && sqlite3StrNICmp(zSql, "trigger", 7)==0 ){ + token = tkTRIGGER; + }else if( nId==4 && sqlite3StrNICmp(zSql, "temp", 4)==0 ){ + token = tkTEMP; + }else if( nId==9 && sqlite3StrNICmp(zSql, "temporary", 9)==0 ){ + token = tkTEMP; + }else{ + token = tkOTHER; + } + break; + } + case 'e': case 'E': { + if( nId==3 && sqlite3StrNICmp(zSql, "end", 3)==0 ){ + token = tkEND; + }else +#ifndef SQLITE_OMIT_EXPLAIN + if( nId==7 && sqlite3StrNICmp(zSql, "explain", 7)==0 ){ + token = tkEXPLAIN; + }else +#endif + { + token = tkOTHER; + } + break; + } + default: { + token = tkOTHER; + break; + } + } +#endif /* SQLITE_OMIT_TRIGGER */ + zSql += nId-1; + }else{ + /* Operators and special symbols */ + token = tkOTHER; + } + break; + } + } + state = trans[state][token]; + zSql++; + } + return state==1; +} + +#ifndef SQLITE_OMIT_UTF16 +/* +** This routine is the same as the sqlite3_complete() routine described +** above, except that the parameter is required to be UTF-16 encoded, not +** UTF-8. +*/ +SQLITE_API int sqlite3_complete16(const void *zSql){ + sqlite3_value *pVal; + char const *zSql8; + int rc; + +#ifndef SQLITE_OMIT_AUTOINIT + rc = sqlite3_initialize(); + if( rc ) return rc; +#endif + pVal = sqlite3ValueNew(0); + sqlite3ValueSetStr(pVal, -1, zSql, SQLITE_UTF16NATIVE, SQLITE_STATIC); + zSql8 = sqlite3ValueText(pVal, SQLITE_UTF8); + if( zSql8 ){ + rc = sqlite3_complete(zSql8); + }else{ + rc = SQLITE_NOMEM_BKPT; + } + sqlite3ValueFree(pVal); + return rc & 0xff; +} +#endif /* SQLITE_OMIT_UTF16 */ +#endif /* SQLITE_OMIT_COMPLETE */ + +/************** End of complete.c ********************************************/ +/************** Begin file main.c ********************************************/ +/* +** 2001 September 15 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** Main file for the SQLite library. The routines in this file +** implement the programmer interface to the library. Routines in +** other files are for internal use by SQLite and should not be +** accessed by users of the library. +*/ +/* #include "sqliteInt.h" */ + +#ifdef SQLITE_ENABLE_FTS3 +/************** Include fts3.h in the middle of main.c ***********************/ +/************** Begin file fts3.h ********************************************/ +/* +** 2006 Oct 10 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This header file is used by programs that want to link against the +** FTS3 library. All it does is declare the sqlite3Fts3Init() interface. +*/ +/* #include "sqlite3.h" */ + +#if 0 +extern "C" { +#endif /* __cplusplus */ + +SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db); + +#if 0 +} /* extern "C" */ +#endif /* __cplusplus */ + +/************** End of fts3.h ************************************************/ +/************** Continuing where we left off in main.c ***********************/ +#endif +#ifdef SQLITE_ENABLE_RTREE +/************** Include rtree.h in the middle of main.c **********************/ +/************** Begin file rtree.h *******************************************/ +/* +** 2008 May 26 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This header file is used by programs that want to link against the +** RTREE library. All it does is declare the sqlite3RtreeInit() interface. +*/ +/* #include "sqlite3.h" */ + +#ifdef SQLITE_OMIT_VIRTUALTABLE +# undef SQLITE_ENABLE_RTREE +#endif + +#if 0 +extern "C" { +#endif /* __cplusplus */ + +SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db); + +#if 0 +} /* extern "C" */ +#endif /* __cplusplus */ + +/************** End of rtree.h ***********************************************/ +/************** Continuing where we left off in main.c ***********************/ +#endif +#if defined(SQLITE_ENABLE_ICU) || defined(SQLITE_ENABLE_ICU_COLLATIONS) +/************** Include sqliteicu.h in the middle of main.c ******************/ +/************** Begin file sqliteicu.h ***************************************/ +/* +** 2008 May 26 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This header file is used by programs that want to link against the +** ICU extension. All it does is declare the sqlite3IcuInit() interface. +*/ +/* #include "sqlite3.h" */ + +#if 0 +extern "C" { +#endif /* __cplusplus */ + +SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db); + +#if 0 +} /* extern "C" */ +#endif /* __cplusplus */ + +/************** End of sqliteicu.h *******************************************/ +/************** Continuing where we left off in main.c ***********************/ +#endif + +/* +** This is an extension initializer that is a no-op and always +** succeeds, except that it fails if the fault-simulation is set +** to 500. +*/ +static int sqlite3TestExtInit(sqlite3 *db){ + (void)db; + return sqlite3FaultSim(500); +} + + +/* +** Forward declarations of external module initializer functions +** for modules that need them. +*/ +#ifdef SQLITE_ENABLE_FTS5 +SQLITE_PRIVATE int sqlite3Fts5Init(sqlite3*); +#endif +#ifdef SQLITE_ENABLE_STMTVTAB +SQLITE_PRIVATE int sqlite3StmtVtabInit(sqlite3*); +#endif +#ifdef SQLITE_EXTRA_AUTOEXT +int SQLITE_EXTRA_AUTOEXT(sqlite3*); +#endif +/* +** An array of pointers to extension initializer functions for +** built-in extensions. +*/ +static int (*const sqlite3BuiltinExtensions[])(sqlite3*) = { +#ifdef SQLITE_ENABLE_FTS3 + sqlite3Fts3Init, +#endif +#ifdef SQLITE_ENABLE_FTS5 + sqlite3Fts5Init, +#endif +#if defined(SQLITE_ENABLE_ICU) || defined(SQLITE_ENABLE_ICU_COLLATIONS) + sqlite3IcuInit, +#endif +#ifdef SQLITE_ENABLE_RTREE + sqlite3RtreeInit, +#endif +#ifdef SQLITE_ENABLE_DBPAGE_VTAB + sqlite3DbpageRegister, +#endif +#ifdef SQLITE_ENABLE_DBSTAT_VTAB + sqlite3DbstatRegister, +#endif + sqlite3TestExtInit, +#ifdef SQLITE_ENABLE_STMTVTAB + sqlite3StmtVtabInit, +#endif +#ifdef SQLITE_ENABLE_BYTECODE_VTAB + sqlite3VdbeBytecodeVtabInit, +#endif +#ifdef SQLITE_EXTRA_AUTOEXT + SQLITE_EXTRA_AUTOEXT, +#endif +}; + +#ifndef SQLITE_AMALGAMATION +/* IMPLEMENTATION-OF: R-46656-45156 The sqlite3_version[] string constant +** contains the text of SQLITE_VERSION macro. +*/ +SQLITE_API const char sqlite3_version[] = SQLITE_VERSION; +#endif + +/* IMPLEMENTATION-OF: R-53536-42575 The sqlite3_libversion() function returns +** a pointer to the to the sqlite3_version[] string constant. +*/ +SQLITE_API const char *sqlite3_libversion(void){ return sqlite3_version; } + +/* IMPLEMENTATION-OF: R-25063-23286 The sqlite3_sourceid() function returns a +** pointer to a string constant whose value is the same as the +** SQLITE_SOURCE_ID C preprocessor macro. Except if SQLite is built using +** an edited copy of the amalgamation, then the last four characters of +** the hash might be different from SQLITE_SOURCE_ID. +*/ +/* SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } */ + +/* IMPLEMENTATION-OF: R-35210-63508 The sqlite3_libversion_number() function +** returns an integer equal to SQLITE_VERSION_NUMBER. +*/ +SQLITE_API int sqlite3_libversion_number(void){ return SQLITE_VERSION_NUMBER; } + +/* IMPLEMENTATION-OF: R-20790-14025 The sqlite3_threadsafe() function returns +** zero if and only if SQLite was compiled with mutexing code omitted due to +** the SQLITE_THREADSAFE compile-time option being set to 0. +*/ +SQLITE_API int sqlite3_threadsafe(void){ return SQLITE_THREADSAFE; } + +/* +** When compiling the test fixture or with debugging enabled (on Win32), +** this variable being set to non-zero will cause OSTRACE macros to emit +** extra diagnostic information. +*/ +#ifdef SQLITE_HAVE_OS_TRACE +# ifndef SQLITE_DEBUG_OS_TRACE +# define SQLITE_DEBUG_OS_TRACE 0 +# endif + int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE; +#endif + +#if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE) +/* +** If the following function pointer is not NULL and if +** SQLITE_ENABLE_IOTRACE is enabled, then messages describing +** I/O active are written using this function. These messages +** are intended for debugging activity only. +*/ +SQLITE_API void (SQLITE_CDECL *sqlite3IoTrace)(const char*, ...) = 0; +#endif + +/* +** If the following global variable points to a string which is the +** name of a directory, then that directory will be used to store +** temporary files. +** +** See also the "PRAGMA temp_store_directory" SQL command. +*/ +SQLITE_API char *sqlite3_temp_directory = 0; + +/* +** If the following global variable points to a string which is the +** name of a directory, then that directory will be used to store +** all database files specified with a relative pathname. +** +** See also the "PRAGMA data_store_directory" SQL command. +*/ +SQLITE_API char *sqlite3_data_directory = 0; + +/* +** Initialize SQLite. +** +** This routine must be called to initialize the memory allocation, +** VFS, and mutex subsystems prior to doing any serious work with +** SQLite. But as long as you do not compile with SQLITE_OMIT_AUTOINIT +** this routine will be called automatically by key routines such as +** sqlite3_open(). +** +** This routine is a no-op except on its very first call for the process, +** or for the first call after a call to sqlite3_shutdown. +** +** The first thread to call this routine runs the initialization to +** completion. If subsequent threads call this routine before the first +** thread has finished the initialization process, then the subsequent +** threads must block until the first thread finishes with the initialization. +** +** The first thread might call this routine recursively. Recursive +** calls to this routine should not block, of course. Otherwise the +** initialization process would never complete. +** +** Let X be the first thread to enter this routine. Let Y be some other +** thread. Then while the initial invocation of this routine by X is +** incomplete, it is required that: +** +** * Calls to this routine from Y must block until the outer-most +** call by X completes. +** +** * Recursive calls to this routine from thread X return immediately +** without blocking. +*/ +SQLITE_API int sqlite3_initialize(void){ + MUTEX_LOGIC( sqlite3_mutex *pMainMtx; ) /* The main static mutex */ + int rc; /* Result code */ +#ifdef SQLITE_EXTRA_INIT + int bRunExtraInit = 0; /* Extra initialization needed */ +#endif + +#ifdef SQLITE_OMIT_WSD + rc = sqlite3_wsd_init(4096, 24); + if( rc!=SQLITE_OK ){ + return rc; + } +#endif + + /* If the following assert() fails on some obscure processor/compiler + ** combination, the work-around is to set the correct pointer + ** size at compile-time using -DSQLITE_PTRSIZE=n compile-time option */ + assert( SQLITE_PTRSIZE==sizeof(char*) ); + + /* If SQLite is already completely initialized, then this call + ** to sqlite3_initialize() should be a no-op. But the initialization + ** must be complete. So isInit must not be set until the very end + ** of this routine. + */ + if( sqlite3GlobalConfig.isInit ){ + sqlite3MemoryBarrier(); + return SQLITE_OK; + } + + /* Make sure the mutex subsystem is initialized. If unable to + ** initialize the mutex subsystem, return early with the error. + ** If the system is so sick that we are unable to allocate a mutex, + ** there is not much SQLite is going to be able to do. + ** + ** The mutex subsystem must take care of serializing its own + ** initialization. + */ + rc = sqlite3MutexInit(); + if( rc ) return rc; + + /* Initialize the malloc() system and the recursive pInitMutex mutex. + ** This operation is protected by the STATIC_MAIN mutex. Note that + ** MutexAlloc() is called for a static mutex prior to initializing the + ** malloc subsystem - this implies that the allocation of a static + ** mutex must not require support from the malloc subsystem. + */ + MUTEX_LOGIC( pMainMtx = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MAIN); ) + sqlite3_mutex_enter(pMainMtx); + sqlite3GlobalConfig.isMutexInit = 1; + if( !sqlite3GlobalConfig.isMallocInit ){ + rc = sqlite3MallocInit(); + } + if( rc==SQLITE_OK ){ + sqlite3GlobalConfig.isMallocInit = 1; + if( !sqlite3GlobalConfig.pInitMutex ){ + sqlite3GlobalConfig.pInitMutex = + sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE); + if( sqlite3GlobalConfig.bCoreMutex && !sqlite3GlobalConfig.pInitMutex ){ + rc = SQLITE_NOMEM_BKPT; + } + } + } + if( rc==SQLITE_OK ){ + sqlite3GlobalConfig.nRefInitMutex++; + } + sqlite3_mutex_leave(pMainMtx); + + /* If rc is not SQLITE_OK at this point, then either the malloc + ** subsystem could not be initialized or the system failed to allocate + ** the pInitMutex mutex. Return an error in either case. */ + if( rc!=SQLITE_OK ){ + return rc; + } + + /* Do the rest of the initialization under the recursive mutex so + ** that we will be able to handle recursive calls into + ** sqlite3_initialize(). The recursive calls normally come through + ** sqlite3_os_init() when it invokes sqlite3_vfs_register(), but other + ** recursive calls might also be possible. + ** + ** IMPLEMENTATION-OF: R-00140-37445 SQLite automatically serializes calls + ** to the xInit method, so the xInit method need not be threadsafe. + ** + ** The following mutex is what serializes access to the appdef pcache xInit + ** methods. The sqlite3_pcache_methods.xInit() all is embedded in the + ** call to sqlite3PcacheInitialize(). + */ + sqlite3_mutex_enter(sqlite3GlobalConfig.pInitMutex); + if( sqlite3GlobalConfig.isInit==0 && sqlite3GlobalConfig.inProgress==0 ){ + sqlite3GlobalConfig.inProgress = 1; +#ifdef SQLITE_ENABLE_SQLLOG + { + extern void sqlite3_init_sqllog(void); + sqlite3_init_sqllog(); + } +#endif + memset(&sqlite3BuiltinFunctions, 0, sizeof(sqlite3BuiltinFunctions)); + sqlite3RegisterBuiltinFunctions(); + if( sqlite3GlobalConfig.isPCacheInit==0 ){ + rc = sqlite3PcacheInitialize(); + } + if( rc==SQLITE_OK ){ + sqlite3GlobalConfig.isPCacheInit = 1; + rc = sqlite3OsInit(); + } +#ifndef SQLITE_OMIT_DESERIALIZE + if( rc==SQLITE_OK ){ + rc = sqlite3MemdbInit(); + } +#endif + if( rc==SQLITE_OK ){ + sqlite3PCacheBufferSetup( sqlite3GlobalConfig.pPage, + sqlite3GlobalConfig.szPage, sqlite3GlobalConfig.nPage); +#ifdef SQLITE_EXTRA_INIT_MUTEXED + { + int SQLITE_EXTRA_INIT_MUTEXED(const char*); + rc = SQLITE_EXTRA_INIT_MUTEXED(0); + } +#endif + } + if( rc==SQLITE_OK ){ + sqlite3MemoryBarrier(); + sqlite3GlobalConfig.isInit = 1; +#ifdef SQLITE_EXTRA_INIT + bRunExtraInit = 1; +#endif + } + sqlite3GlobalConfig.inProgress = 0; + } + sqlite3_mutex_leave(sqlite3GlobalConfig.pInitMutex); + + /* Go back under the static mutex and clean up the recursive + ** mutex to prevent a resource leak. + */ + sqlite3_mutex_enter(pMainMtx); + sqlite3GlobalConfig.nRefInitMutex--; + if( sqlite3GlobalConfig.nRefInitMutex<=0 ){ + assert( sqlite3GlobalConfig.nRefInitMutex==0 ); + sqlite3_mutex_free(sqlite3GlobalConfig.pInitMutex); + sqlite3GlobalConfig.pInitMutex = 0; + } + sqlite3_mutex_leave(pMainMtx); + + /* The following is just a sanity check to make sure SQLite has + ** been compiled correctly. It is important to run this code, but + ** we don't want to run it too often and soak up CPU cycles for no + ** reason. So we run it once during initialization. + */ +#ifndef NDEBUG +#ifndef SQLITE_OMIT_FLOATING_POINT + /* This section of code's only "output" is via assert() statements. */ + if( rc==SQLITE_OK ){ + u64 x = (((u64)1)<<63)-1; + double y; + assert(sizeof(x)==8); + assert(sizeof(x)==sizeof(y)); + memcpy(&y, &x, 8); + assert( sqlite3IsNaN(y) ); + } +#endif +#endif + + /* Do extra initialization steps requested by the SQLITE_EXTRA_INIT + ** compile-time option. + */ +#ifdef SQLITE_EXTRA_INIT + if( bRunExtraInit ){ + int SQLITE_EXTRA_INIT(const char*); + rc = SQLITE_EXTRA_INIT(0); + } +#endif + return rc; +} + +/* +** Undo the effects of sqlite3_initialize(). Must not be called while +** there are outstanding database connections or memory allocations or +** while any part of SQLite is otherwise in use in any thread. This +** routine is not threadsafe. But it is safe to invoke this routine +** on when SQLite is already shut down. If SQLite is already shut down +** when this routine is invoked, then this routine is a harmless no-op. +*/ +SQLITE_API int sqlite3_shutdown(void){ +#ifdef SQLITE_OMIT_WSD + int rc = sqlite3_wsd_init(4096, 24); + if( rc!=SQLITE_OK ){ + return rc; + } +#endif + + if( sqlite3GlobalConfig.isInit ){ +#ifdef SQLITE_EXTRA_SHUTDOWN + void SQLITE_EXTRA_SHUTDOWN(void); + SQLITE_EXTRA_SHUTDOWN(); +#endif + sqlite3_os_end(); + sqlite3_reset_auto_extension(); + sqlite3GlobalConfig.isInit = 0; + } + if( sqlite3GlobalConfig.isPCacheInit ){ + sqlite3PcacheShutdown(); + sqlite3GlobalConfig.isPCacheInit = 0; + } + if( sqlite3GlobalConfig.isMallocInit ){ + sqlite3MallocEnd(); + sqlite3GlobalConfig.isMallocInit = 0; + +#ifndef SQLITE_OMIT_SHUTDOWN_DIRECTORIES + /* The heap subsystem has now been shutdown and these values are supposed + ** to be NULL or point to memory that was obtained from sqlite3_malloc(), + ** which would rely on that heap subsystem; therefore, make sure these + ** values cannot refer to heap memory that was just invalidated when the + ** heap subsystem was shutdown. This is only done if the current call to + ** this function resulted in the heap subsystem actually being shutdown. + */ + sqlite3_data_directory = 0; + sqlite3_temp_directory = 0; +#endif + } + if( sqlite3GlobalConfig.isMutexInit ){ + sqlite3MutexEnd(); + sqlite3GlobalConfig.isMutexInit = 0; + } + + return SQLITE_OK; +} + +/* +** This API allows applications to modify the global configuration of +** the SQLite library at run-time. +** +** This routine should only be called when there are no outstanding +** database connections or memory allocations. This routine is not +** threadsafe. Failure to heed these warnings can lead to unpredictable +** behavior. +*/ +SQLITE_API int sqlite3_config(int op, ...){ + va_list ap; + int rc = SQLITE_OK; + + /* sqlite3_config() normally returns SQLITE_MISUSE if it is invoked while + ** the SQLite library is in use. Except, a few selected opcodes + ** are allowed. + */ + if( sqlite3GlobalConfig.isInit ){ + static const u64 mAnytimeConfigOption = 0 + | MASKBIT64( SQLITE_CONFIG_LOG ) + | MASKBIT64( SQLITE_CONFIG_PCACHE_HDRSZ ) + ; + if( op<0 || op>63 || (MASKBIT64(op) & mAnytimeConfigOption)==0 ){ + return SQLITE_MISUSE_BKPT; + } + testcase( op==SQLITE_CONFIG_LOG ); + testcase( op==SQLITE_CONFIG_PCACHE_HDRSZ ); + } + + va_start(ap, op); + switch( op ){ + + /* Mutex configuration options are only available in a threadsafe + ** compile. + */ +#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-54466-46756 */ + case SQLITE_CONFIG_SINGLETHREAD: { + /* EVIDENCE-OF: R-02748-19096 This option sets the threading mode to + ** Single-thread. */ + sqlite3GlobalConfig.bCoreMutex = 0; /* Disable mutex on core */ + sqlite3GlobalConfig.bFullMutex = 0; /* Disable mutex on connections */ + break; + } +#endif +#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-20520-54086 */ + case SQLITE_CONFIG_MULTITHREAD: { + /* EVIDENCE-OF: R-14374-42468 This option sets the threading mode to + ** Multi-thread. */ + sqlite3GlobalConfig.bCoreMutex = 1; /* Enable mutex on core */ + sqlite3GlobalConfig.bFullMutex = 0; /* Disable mutex on connections */ + break; + } +#endif +#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-59593-21810 */ + case SQLITE_CONFIG_SERIALIZED: { + /* EVIDENCE-OF: R-41220-51800 This option sets the threading mode to + ** Serialized. */ + sqlite3GlobalConfig.bCoreMutex = 1; /* Enable mutex on core */ + sqlite3GlobalConfig.bFullMutex = 1; /* Enable mutex on connections */ + break; + } +#endif +#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-63666-48755 */ + case SQLITE_CONFIG_MUTEX: { + /* Specify an alternative mutex implementation */ + sqlite3GlobalConfig.mutex = *va_arg(ap, sqlite3_mutex_methods*); + break; + } +#endif +#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0 /* IMP: R-14450-37597 */ + case SQLITE_CONFIG_GETMUTEX: { + /* Retrieve the current mutex implementation */ + *va_arg(ap, sqlite3_mutex_methods*) = sqlite3GlobalConfig.mutex; + break; + } +#endif + + case SQLITE_CONFIG_MALLOC: { + /* EVIDENCE-OF: R-55594-21030 The SQLITE_CONFIG_MALLOC option takes a + ** single argument which is a pointer to an instance of the + ** sqlite3_mem_methods structure. The argument specifies alternative + ** low-level memory allocation routines to be used in place of the memory + ** allocation routines built into SQLite. */ + sqlite3GlobalConfig.m = *va_arg(ap, sqlite3_mem_methods*); + break; + } + case SQLITE_CONFIG_GETMALLOC: { + /* EVIDENCE-OF: R-51213-46414 The SQLITE_CONFIG_GETMALLOC option takes a + ** single argument which is a pointer to an instance of the + ** sqlite3_mem_methods structure. The sqlite3_mem_methods structure is + ** filled with the currently defined memory allocation routines. */ + if( sqlite3GlobalConfig.m.xMalloc==0 ) sqlite3MemSetDefault(); + *va_arg(ap, sqlite3_mem_methods*) = sqlite3GlobalConfig.m; + break; + } + case SQLITE_CONFIG_MEMSTATUS: { + assert( !sqlite3GlobalConfig.isInit ); /* Cannot change at runtime */ + /* EVIDENCE-OF: R-61275-35157 The SQLITE_CONFIG_MEMSTATUS option takes + ** single argument of type int, interpreted as a boolean, which enables + ** or disables the collection of memory allocation statistics. */ + sqlite3GlobalConfig.bMemstat = va_arg(ap, int); + break; + } + case SQLITE_CONFIG_SMALL_MALLOC: { + sqlite3GlobalConfig.bSmallMalloc = va_arg(ap, int); + break; + } + case SQLITE_CONFIG_PAGECACHE: { + /* EVIDENCE-OF: R-18761-36601 There are three arguments to + ** SQLITE_CONFIG_PAGECACHE: A pointer to 8-byte aligned memory (pMem), + ** the size of each page cache line (sz), and the number of cache lines + ** (N). */ + sqlite3GlobalConfig.pPage = va_arg(ap, void*); + sqlite3GlobalConfig.szPage = va_arg(ap, int); + sqlite3GlobalConfig.nPage = va_arg(ap, int); + break; + } + case SQLITE_CONFIG_PCACHE_HDRSZ: { + /* EVIDENCE-OF: R-39100-27317 The SQLITE_CONFIG_PCACHE_HDRSZ option takes + ** a single parameter which is a pointer to an integer and writes into + ** that integer the number of extra bytes per page required for each page + ** in SQLITE_CONFIG_PAGECACHE. */ + *va_arg(ap, int*) = + sqlite3HeaderSizeBtree() + + sqlite3HeaderSizePcache() + + sqlite3HeaderSizePcache1(); + break; + } + + case SQLITE_CONFIG_PCACHE: { + /* no-op */ + break; + } + case SQLITE_CONFIG_GETPCACHE: { + /* now an error */ + rc = SQLITE_ERROR; + break; + } + + case SQLITE_CONFIG_PCACHE2: { + /* EVIDENCE-OF: R-63325-48378 The SQLITE_CONFIG_PCACHE2 option takes a + ** single argument which is a pointer to an sqlite3_pcache_methods2 + ** object. This object specifies the interface to a custom page cache + ** implementation. */ + sqlite3GlobalConfig.pcache2 = *va_arg(ap, sqlite3_pcache_methods2*); + break; + } + case SQLITE_CONFIG_GETPCACHE2: { + /* EVIDENCE-OF: R-22035-46182 The SQLITE_CONFIG_GETPCACHE2 option takes a + ** single argument which is a pointer to an sqlite3_pcache_methods2 + ** object. SQLite copies of the current page cache implementation into + ** that object. */ + if( sqlite3GlobalConfig.pcache2.xInit==0 ){ + sqlite3PCacheSetDefault(); + } + *va_arg(ap, sqlite3_pcache_methods2*) = sqlite3GlobalConfig.pcache2; + break; + } + +/* EVIDENCE-OF: R-06626-12911 The SQLITE_CONFIG_HEAP option is only +** available if SQLite is compiled with either SQLITE_ENABLE_MEMSYS3 or +** SQLITE_ENABLE_MEMSYS5 and returns SQLITE_ERROR if invoked otherwise. */ +#if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5) + case SQLITE_CONFIG_HEAP: { + /* EVIDENCE-OF: R-19854-42126 There are three arguments to + ** SQLITE_CONFIG_HEAP: An 8-byte aligned pointer to the memory, the + ** number of bytes in the memory buffer, and the minimum allocation size. + */ + sqlite3GlobalConfig.pHeap = va_arg(ap, void*); + sqlite3GlobalConfig.nHeap = va_arg(ap, int); + sqlite3GlobalConfig.mnReq = va_arg(ap, int); + + if( sqlite3GlobalConfig.mnReq<1 ){ + sqlite3GlobalConfig.mnReq = 1; + }else if( sqlite3GlobalConfig.mnReq>(1<<12) ){ + /* cap min request size at 2^12 */ + sqlite3GlobalConfig.mnReq = (1<<12); + } + + if( sqlite3GlobalConfig.pHeap==0 ){ + /* EVIDENCE-OF: R-49920-60189 If the first pointer (the memory pointer) + ** is NULL, then SQLite reverts to using its default memory allocator + ** (the system malloc() implementation), undoing any prior invocation of + ** SQLITE_CONFIG_MALLOC. + ** + ** Setting sqlite3GlobalConfig.m to all zeros will cause malloc to + ** revert to its default implementation when sqlite3_initialize() is run + */ + memset(&sqlite3GlobalConfig.m, 0, sizeof(sqlite3GlobalConfig.m)); + }else{ + /* EVIDENCE-OF: R-61006-08918 If the memory pointer is not NULL then the + ** alternative memory allocator is engaged to handle all of SQLites + ** memory allocation needs. */ +#ifdef SQLITE_ENABLE_MEMSYS3 + sqlite3GlobalConfig.m = *sqlite3MemGetMemsys3(); +#endif +#ifdef SQLITE_ENABLE_MEMSYS5 + sqlite3GlobalConfig.m = *sqlite3MemGetMemsys5(); +#endif + } + break; + } +#endif + + case SQLITE_CONFIG_LOOKASIDE: { + sqlite3GlobalConfig.szLookaside = va_arg(ap, int); + sqlite3GlobalConfig.nLookaside = va_arg(ap, int); + break; + } + + /* Record a pointer to the logger function and its first argument. + ** The default is NULL. Logging is disabled if the function pointer is + ** NULL. + */ + case SQLITE_CONFIG_LOG: { + /* MSVC is picky about pulling func ptrs from va lists. + ** http://support.microsoft.com/kb/47961 + ** sqlite3GlobalConfig.xLog = va_arg(ap, void(*)(void*,int,const char*)); + */ + typedef void(*LOGFUNC_t)(void*,int,const char*); + LOGFUNC_t xLog = va_arg(ap, LOGFUNC_t); + void *pLogArg = va_arg(ap, void*); + AtomicStore(&sqlite3GlobalConfig.xLog, xLog); + AtomicStore(&sqlite3GlobalConfig.pLogArg, pLogArg); + break; + } + + /* EVIDENCE-OF: R-55548-33817 The compile-time setting for URI filenames + ** can be changed at start-time using the + ** sqlite3_config(SQLITE_CONFIG_URI,1) or + ** sqlite3_config(SQLITE_CONFIG_URI,0) configuration calls. + */ + case SQLITE_CONFIG_URI: { + /* EVIDENCE-OF: R-25451-61125 The SQLITE_CONFIG_URI option takes a single + ** argument of type int. If non-zero, then URI handling is globally + ** enabled. If the parameter is zero, then URI handling is globally + ** disabled. */ + int bOpenUri = va_arg(ap, int); + AtomicStore(&sqlite3GlobalConfig.bOpenUri, bOpenUri); + break; + } + + case SQLITE_CONFIG_COVERING_INDEX_SCAN: { + /* EVIDENCE-OF: R-36592-02772 The SQLITE_CONFIG_COVERING_INDEX_SCAN + ** option takes a single integer argument which is interpreted as a + ** boolean in order to enable or disable the use of covering indices for + ** full table scans in the query optimizer. */ + sqlite3GlobalConfig.bUseCis = va_arg(ap, int); + break; + } + +#ifdef SQLITE_ENABLE_SQLLOG + case SQLITE_CONFIG_SQLLOG: { + typedef void(*SQLLOGFUNC_t)(void*, sqlite3*, const char*, int); + sqlite3GlobalConfig.xSqllog = va_arg(ap, SQLLOGFUNC_t); + sqlite3GlobalConfig.pSqllogArg = va_arg(ap, void *); + break; + } +#endif + + case SQLITE_CONFIG_MMAP_SIZE: { + /* EVIDENCE-OF: R-58063-38258 SQLITE_CONFIG_MMAP_SIZE takes two 64-bit + ** integer (sqlite3_int64) values that are the default mmap size limit + ** (the default setting for PRAGMA mmap_size) and the maximum allowed + ** mmap size limit. */ + sqlite3_int64 szMmap = va_arg(ap, sqlite3_int64); + sqlite3_int64 mxMmap = va_arg(ap, sqlite3_int64); + /* EVIDENCE-OF: R-53367-43190 If either argument to this option is + ** negative, then that argument is changed to its compile-time default. + ** + ** EVIDENCE-OF: R-34993-45031 The maximum allowed mmap size will be + ** silently truncated if necessary so that it does not exceed the + ** compile-time maximum mmap size set by the SQLITE_MAX_MMAP_SIZE + ** compile-time option. + */ + if( mxMmap<0 || mxMmap>SQLITE_MAX_MMAP_SIZE ){ + mxMmap = SQLITE_MAX_MMAP_SIZE; + } + if( szMmap<0 ) szMmap = SQLITE_DEFAULT_MMAP_SIZE; + if( szMmap>mxMmap) szMmap = mxMmap; + sqlite3GlobalConfig.mxMmap = mxMmap; + sqlite3GlobalConfig.szMmap = szMmap; + break; + } + +#if SQLITE_OS_WIN && defined(SQLITE_WIN32_MALLOC) /* IMP: R-04780-55815 */ + case SQLITE_CONFIG_WIN32_HEAPSIZE: { + /* EVIDENCE-OF: R-34926-03360 SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit + ** unsigned integer value that specifies the maximum size of the created + ** heap. */ + sqlite3GlobalConfig.nHeap = va_arg(ap, int); + break; + } +#endif + + case SQLITE_CONFIG_PMASZ: { + sqlite3GlobalConfig.szPma = va_arg(ap, unsigned int); + break; + } + + case SQLITE_CONFIG_STMTJRNL_SPILL: { + sqlite3GlobalConfig.nStmtSpill = va_arg(ap, int); + break; + } + +#ifdef SQLITE_ENABLE_SORTER_REFERENCES + case SQLITE_CONFIG_SORTERREF_SIZE: { + int iVal = va_arg(ap, int); + if( iVal<0 ){ + iVal = SQLITE_DEFAULT_SORTERREF_SIZE; + } + sqlite3GlobalConfig.szSorterRef = (u32)iVal; + break; + } +#endif /* SQLITE_ENABLE_SORTER_REFERENCES */ + +#ifndef SQLITE_OMIT_DESERIALIZE + case SQLITE_CONFIG_MEMDB_MAXSIZE: { + sqlite3GlobalConfig.mxMemdbSize = va_arg(ap, sqlite3_int64); + break; + } +#endif /* SQLITE_OMIT_DESERIALIZE */ + + case SQLITE_CONFIG_ROWID_IN_VIEW: { + int *pVal = va_arg(ap,int*); +#ifdef SQLITE_ALLOW_ROWID_IN_VIEW + if( 0==*pVal ) sqlite3GlobalConfig.mNoVisibleRowid = TF_NoVisibleRowid; + if( 1==*pVal ) sqlite3GlobalConfig.mNoVisibleRowid = 0; + *pVal = (sqlite3GlobalConfig.mNoVisibleRowid==0); +#else + *pVal = 0; +#endif + break; + } + + default: { + rc = SQLITE_ERROR; + break; + } + } + va_end(ap); + return rc; +} + +/* +** Set up the lookaside buffers for a database connection. +** Return SQLITE_OK on success. +** If lookaside is already active, return SQLITE_BUSY. +** +** The sz parameter is the number of bytes in each lookaside slot. +** The cnt parameter is the number of slots. If pBuf is NULL the +** space for the lookaside memory is obtained from sqlite3_malloc() +** or similar. If pBuf is not NULL then it is sz*cnt bytes of memory +** to use for the lookaside memory. +*/ +static int setupLookaside( + sqlite3 *db, /* Database connection being configured */ + void *pBuf, /* Memory to use for lookaside. May be NULL */ + int sz, /* Desired size of each lookaside memory slot */ + int cnt /* Number of slots to allocate */ +){ +#ifndef SQLITE_OMIT_LOOKASIDE + void *pStart; /* Start of the lookaside buffer */ + sqlite3_int64 szAlloc; /* Total space set aside for lookaside memory */ + int nBig; /* Number of full-size slots */ + int nSm; /* Number smaller LOOKASIDE_SMALL-byte slots */ + + if( sqlite3LookasideUsed(db,0)>0 ){ + return SQLITE_BUSY; + } + /* Free any existing lookaside buffer for this handle before + ** allocating a new one so we don't have to have space for + ** both at the same time. + */ + if( db->lookaside.bMalloced ){ + sqlite3_free(db->lookaside.pStart); + } + /* The size of a lookaside slot after ROUNDDOWN8 needs to be larger + ** than a pointer and small enough to fit in a u16. + */ + sz = ROUNDDOWN8(sz); + if( sz<=(int)sizeof(LookasideSlot*) ) sz = 0; + if( sz>65528 ) sz = 65528; + /* Count must be at least 1 to be useful, but not so large as to use + ** more than 0x7fff0000 total bytes for lookaside. */ + if( cnt<1 ) cnt = 0; + if( sz>0 && cnt>(0x7fff0000/sz) ) cnt = 0x7fff0000/sz; + szAlloc = (i64)sz*(i64)cnt; + if( szAlloc==0 ){ + sz = 0; + pStart = 0; + }else if( pBuf==0 ){ + sqlite3BeginBenignMalloc(); + pStart = sqlite3Malloc( szAlloc ); + sqlite3EndBenignMalloc(); + if( pStart ) szAlloc = sqlite3MallocSize(pStart); + }else{ + pStart = pBuf; + } +#ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE + if( sz>=LOOKASIDE_SMALL*3 ){ + nBig = szAlloc/(3*LOOKASIDE_SMALL+sz); + nSm = (szAlloc - (i64)sz*(i64)nBig)/LOOKASIDE_SMALL; + }else if( sz>=LOOKASIDE_SMALL*2 ){ + nBig = szAlloc/(LOOKASIDE_SMALL+sz); + nSm = (szAlloc - (i64)sz*(i64)nBig)/LOOKASIDE_SMALL; + }else +#endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */ + if( sz>0 ){ + nBig = szAlloc/sz; + nSm = 0; + }else{ + nBig = nSm = 0; + } + db->lookaside.pStart = pStart; + db->lookaside.pInit = 0; + db->lookaside.pFree = 0; + db->lookaside.sz = (u16)sz; + db->lookaside.szTrue = (u16)sz; + if( pStart ){ + int i; + LookasideSlot *p; + assert( sz > (int)sizeof(LookasideSlot*) ); + p = (LookasideSlot*)pStart; + for(i=0; ipNext = db->lookaside.pInit; + db->lookaside.pInit = p; + p = (LookasideSlot*)&((u8*)p)[sz]; + } +#ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE + db->lookaside.pSmallInit = 0; + db->lookaside.pSmallFree = 0; + db->lookaside.pMiddle = p; + for(i=0; ipNext = db->lookaside.pSmallInit; + db->lookaside.pSmallInit = p; + p = (LookasideSlot*)&((u8*)p)[LOOKASIDE_SMALL]; + } +#endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */ + assert( ((uptr)p)<=szAlloc + (uptr)pStart ); + db->lookaside.pEnd = p; + db->lookaside.bDisable = 0; + db->lookaside.bMalloced = pBuf==0 ?1:0; + db->lookaside.nSlot = nBig+nSm; + }else{ + db->lookaside.pStart = 0; +#ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE + db->lookaside.pSmallInit = 0; + db->lookaside.pSmallFree = 0; + db->lookaside.pMiddle = 0; +#endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */ + db->lookaside.pEnd = 0; + db->lookaside.bDisable = 1; + db->lookaside.sz = 0; + db->lookaside.bMalloced = 0; + db->lookaside.nSlot = 0; + } + db->lookaside.pTrueEnd = db->lookaside.pEnd; + assert( sqlite3LookasideUsed(db,0)==0 ); +#endif /* SQLITE_OMIT_LOOKASIDE */ + return SQLITE_OK; +} + +/* +** Return the mutex associated with a database connection. +*/ +SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3 *db){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + return db->mutex; +} + +/* +** Free up as much memory as we can from the given database +** connection. +*/ +SQLITE_API int sqlite3_db_release_memory(sqlite3 *db){ + int i; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(db->mutex); + sqlite3BtreeEnterAll(db); + for(i=0; inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( pBt ){ + Pager *pPager = sqlite3BtreePager(pBt); + sqlite3PagerShrink(pPager); + } + } + sqlite3BtreeLeaveAll(db); + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; +} + +/* +** Flush any dirty pages in the pager-cache for any attached database +** to disk. +*/ +SQLITE_API int sqlite3_db_cacheflush(sqlite3 *db){ + int i; + int rc = SQLITE_OK; + int bSeenBusy = 0; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(db->mutex); + sqlite3BtreeEnterAll(db); + for(i=0; rc==SQLITE_OK && inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( pBt && sqlite3BtreeTxnState(pBt)==SQLITE_TXN_WRITE ){ + Pager *pPager = sqlite3BtreePager(pBt); + rc = sqlite3PagerFlush(pPager); + if( rc==SQLITE_BUSY ){ + bSeenBusy = 1; + rc = SQLITE_OK; + } + } + } + sqlite3BtreeLeaveAll(db); + sqlite3_mutex_leave(db->mutex); + return ((rc==SQLITE_OK && bSeenBusy) ? SQLITE_BUSY : rc); +} + +/* +** Configuration settings for an individual database connection +*/ +SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){ + va_list ap; + int rc; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(db->mutex); + va_start(ap, op); + switch( op ){ + case SQLITE_DBCONFIG_MAINDBNAME: { + /* IMP: R-06824-28531 */ + /* IMP: R-36257-52125 */ + db->aDb[0].zDbSName = va_arg(ap,char*); + rc = SQLITE_OK; + break; + } + case SQLITE_DBCONFIG_LOOKASIDE: { + void *pBuf = va_arg(ap, void*); /* IMP: R-26835-10964 */ + int sz = va_arg(ap, int); /* IMP: R-47871-25994 */ + int cnt = va_arg(ap, int); /* IMP: R-04460-53386 */ + rc = setupLookaside(db, pBuf, sz, cnt); + break; + } + default: { + static const struct { + int op; /* The opcode */ + u64 mask; /* Mask of the bit in sqlite3.flags to set/clear */ + } aFlagOp[] = { + { SQLITE_DBCONFIG_ENABLE_FKEY, SQLITE_ForeignKeys }, + { SQLITE_DBCONFIG_ENABLE_TRIGGER, SQLITE_EnableTrigger }, + { SQLITE_DBCONFIG_ENABLE_VIEW, SQLITE_EnableView }, + { SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER, SQLITE_Fts3Tokenizer }, + { SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION, SQLITE_LoadExtension }, + { SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE, SQLITE_NoCkptOnClose }, + { SQLITE_DBCONFIG_ENABLE_QPSG, SQLITE_EnableQPSG }, + { SQLITE_DBCONFIG_TRIGGER_EQP, SQLITE_TriggerEQP }, + { SQLITE_DBCONFIG_RESET_DATABASE, SQLITE_ResetDatabase }, + { SQLITE_DBCONFIG_DEFENSIVE, SQLITE_Defensive }, + { SQLITE_DBCONFIG_WRITABLE_SCHEMA, SQLITE_WriteSchema| + SQLITE_NoSchemaError }, + { SQLITE_DBCONFIG_LEGACY_ALTER_TABLE, SQLITE_LegacyAlter }, + { SQLITE_DBCONFIG_DQS_DDL, SQLITE_DqsDDL }, + { SQLITE_DBCONFIG_DQS_DML, SQLITE_DqsDML }, + { SQLITE_DBCONFIG_LEGACY_FILE_FORMAT, SQLITE_LegacyFileFmt }, + { SQLITE_DBCONFIG_TRUSTED_SCHEMA, SQLITE_TrustedSchema }, + { SQLITE_DBCONFIG_STMT_SCANSTATUS, SQLITE_StmtScanStatus }, + { SQLITE_DBCONFIG_REVERSE_SCANORDER, SQLITE_ReverseOrder }, + { SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE, SQLITE_AttachCreate }, + { SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE, SQLITE_AttachWrite }, + { SQLITE_DBCONFIG_ENABLE_COMMENTS, SQLITE_Comments }, + }; + unsigned int i; + rc = SQLITE_ERROR; /* IMP: R-42790-23372 */ + for(i=0; iflags; + if( onoff>0 ){ + db->flags |= aFlagOp[i].mask; + }else if( onoff==0 ){ + db->flags &= ~(u64)aFlagOp[i].mask; + } + if( oldFlags!=db->flags ){ + sqlite3ExpirePreparedStatements(db, 0); + } + if( pRes ){ + *pRes = (db->flags & aFlagOp[i].mask)!=0; + } + rc = SQLITE_OK; + break; + } + } + break; + } + } + va_end(ap); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/* +** This is the default collating function named "BINARY" which is always +** available. +*/ +static int binCollFunc( + void *NotUsed, + int nKey1, const void *pKey1, + int nKey2, const void *pKey2 +){ + int rc, n; + UNUSED_PARAMETER(NotUsed); + n = nKey1xCmp!=binCollFunc || strcmp(p->zName,"BINARY")==0 ); + return p==0 || p->xCmp==binCollFunc; +} + +/* +** Another built-in collating sequence: NOCASE. +** +** This collating sequence is intended to be used for "case independent +** comparison". SQLite's knowledge of upper and lower case equivalents +** extends only to the 26 characters used in the English language. +** +** At the moment there is only a UTF-8 implementation. +*/ +static int nocaseCollatingFunc( + void *NotUsed, + int nKey1, const void *pKey1, + int nKey2, const void *pKey2 +){ + int r = sqlite3StrNICmp( + (const char *)pKey1, (const char *)pKey2, (nKey1lastRowid; +} + +/* +** Set the value returned by the sqlite3_last_insert_rowid() API function. +*/ +SQLITE_API void sqlite3_set_last_insert_rowid(sqlite3 *db, sqlite3_int64 iRowid){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return; + } +#endif + sqlite3_mutex_enter(db->mutex); + db->lastRowid = iRowid; + sqlite3_mutex_leave(db->mutex); +} + +/* +** Return the number of changes in the most recent call to sqlite3_exec(). +*/ +SQLITE_API sqlite3_int64 sqlite3_changes64(sqlite3 *db){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + return db->nChange; +} +SQLITE_API int sqlite3_changes(sqlite3 *db){ + return (int)sqlite3_changes64(db); +} + +/* +** Return the number of changes since the database handle was opened. +*/ +SQLITE_API sqlite3_int64 sqlite3_total_changes64(sqlite3 *db){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + return db->nTotalChange; +} +SQLITE_API int sqlite3_total_changes(sqlite3 *db){ + return (int)sqlite3_total_changes64(db); +} + +/* +** Close all open savepoints. This function only manipulates fields of the +** database handle object, it does not close any savepoints that may be open +** at the b-tree/pager level. +*/ +SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *db){ + while( db->pSavepoint ){ + Savepoint *pTmp = db->pSavepoint; + db->pSavepoint = pTmp->pNext; + sqlite3DbFree(db, pTmp); + } + db->nSavepoint = 0; + db->nStatement = 0; + db->isTransactionSavepoint = 0; +} + +/* +** Invoke the destructor function associated with FuncDef p, if any. Except, +** if this is not the last copy of the function, do not invoke it. Multiple +** copies of a single function are created when create_function() is called +** with SQLITE_ANY as the encoding. +*/ +static void functionDestroy(sqlite3 *db, FuncDef *p){ + FuncDestructor *pDestructor; + assert( (p->funcFlags & SQLITE_FUNC_BUILTIN)==0 ); + pDestructor = p->u.pDestructor; + if( pDestructor ){ + pDestructor->nRef--; + if( pDestructor->nRef==0 ){ + pDestructor->xDestroy(pDestructor->pUserData); + sqlite3DbFree(db, pDestructor); + } + } +} + +/* +** Disconnect all sqlite3_vtab objects that belong to database connection +** db. This is called when db is being closed. +*/ +static void disconnectAllVtab(sqlite3 *db){ +#ifndef SQLITE_OMIT_VIRTUALTABLE + int i; + HashElem *p; + sqlite3BtreeEnterAll(db); + for(i=0; inDb; i++){ + Schema *pSchema = db->aDb[i].pSchema; + if( pSchema ){ + for(p=sqliteHashFirst(&pSchema->tblHash); p; p=sqliteHashNext(p)){ + Table *pTab = (Table *)sqliteHashData(p); + if( IsVirtual(pTab) ) sqlite3VtabDisconnect(db, pTab); + } + } + } + for(p=sqliteHashFirst(&db->aModule); p; p=sqliteHashNext(p)){ + Module *pMod = (Module *)sqliteHashData(p); + if( pMod->pEpoTab ){ + sqlite3VtabDisconnect(db, pMod->pEpoTab); + } + } + sqlite3VtabUnlockList(db); + sqlite3BtreeLeaveAll(db); +#else + UNUSED_PARAMETER(db); +#endif +} + +/* +** Return TRUE if database connection db has unfinalized prepared +** statements or unfinished sqlite3_backup objects. +*/ +static int connectionIsBusy(sqlite3 *db){ + int j; + assert( sqlite3_mutex_held(db->mutex) ); + if( db->pVdbe ) return 1; + for(j=0; jnDb; j++){ + Btree *pBt = db->aDb[j].pBt; + if( pBt && sqlite3BtreeIsInBackup(pBt) ) return 1; + } + return 0; +} + +/* +** Close an existing SQLite database +*/ +static int sqlite3Close(sqlite3 *db, int forceZombie){ + if( !db ){ + /* EVIDENCE-OF: R-63257-11740 Calling sqlite3_close() or + ** sqlite3_close_v2() with a NULL pointer argument is a harmless no-op. */ + return SQLITE_OK; + } + if( !sqlite3SafetyCheckSickOrOk(db) ){ + return SQLITE_MISUSE_BKPT; + } + sqlite3_mutex_enter(db->mutex); + if( db->mTrace & SQLITE_TRACE_CLOSE ){ + db->trace.xV2(SQLITE_TRACE_CLOSE, db->pTraceArg, db, 0); + } + + /* Force xDisconnect calls on all virtual tables */ + disconnectAllVtab(db); + + /* If a transaction is open, the disconnectAllVtab() call above + ** will not have called the xDisconnect() method on any virtual + ** tables in the db->aVTrans[] array. The following sqlite3VtabRollback() + ** call will do so. We need to do this before the check for active + ** SQL statements below, as the v-table implementation may be storing + ** some prepared statements internally. + */ + sqlite3VtabRollback(db); + + /* Legacy behavior (sqlite3_close() behavior) is to return + ** SQLITE_BUSY if the connection can not be closed immediately. + */ + if( !forceZombie && connectionIsBusy(db) ){ + sqlite3ErrorWithMsg(db, SQLITE_BUSY, "unable to close due to unfinalized " + "statements or unfinished backups"); + sqlite3_mutex_leave(db->mutex); + return SQLITE_BUSY; + } + +#ifdef SQLITE_ENABLE_SQLLOG + if( sqlite3GlobalConfig.xSqllog ){ + /* Closing the handle. Fourth parameter is passed the value 2. */ + sqlite3GlobalConfig.xSqllog(sqlite3GlobalConfig.pSqllogArg, db, 0, 2); + } +#endif + + while( db->pDbData ){ + DbClientData *p = db->pDbData; + db->pDbData = p->pNext; + assert( p->pData!=0 ); + if( p->xDestructor ) p->xDestructor(p->pData); + sqlite3_free(p); + } + + /* Convert the connection into a zombie and then close it. + */ + db->eOpenState = SQLITE_STATE_ZOMBIE; + sqlite3LeaveMutexAndCloseZombie(db); + return SQLITE_OK; +} + +/* +** Return the transaction state for a single databse, or the maximum +** transaction state over all attached databases if zSchema is null. +*/ +SQLITE_API int sqlite3_txn_state(sqlite3 *db, const char *zSchema){ + int iDb, nDb; + int iTxn = -1; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return -1; + } +#endif + sqlite3_mutex_enter(db->mutex); + if( zSchema ){ + nDb = iDb = sqlite3FindDbName(db, zSchema); + if( iDb<0 ) nDb--; + }else{ + iDb = 0; + nDb = db->nDb-1; + } + for(; iDb<=nDb; iDb++){ + Btree *pBt = db->aDb[iDb].pBt; + int x = pBt!=0 ? sqlite3BtreeTxnState(pBt) : SQLITE_TXN_NONE; + if( x>iTxn ) iTxn = x; + } + sqlite3_mutex_leave(db->mutex); + return iTxn; +} + +/* +** Two variations on the public interface for closing a database +** connection. The sqlite3_close() version returns SQLITE_BUSY and +** leaves the connection open if there are unfinalized prepared +** statements or unfinished sqlite3_backups. The sqlite3_close_v2() +** version forces the connection to become a zombie if there are +** unclosed resources, and arranges for deallocation when the last +** prepare statement or sqlite3_backup closes. +*/ +SQLITE_API int sqlite3_close(sqlite3 *db){ return sqlite3Close(db,0); } +SQLITE_API int sqlite3_close_v2(sqlite3 *db){ return sqlite3Close(db,1); } + + +/* +** Close the mutex on database connection db. +** +** Furthermore, if database connection db is a zombie (meaning that there +** has been a prior call to sqlite3_close(db) or sqlite3_close_v2(db)) and +** every sqlite3_stmt has now been finalized and every sqlite3_backup has +** finished, then free all resources. +*/ +SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){ + HashElem *i; /* Hash table iterator */ + int j; + + /* If there are outstanding sqlite3_stmt or sqlite3_backup objects + ** or if the connection has not yet been closed by sqlite3_close_v2(), + ** then just leave the mutex and return. + */ + if( db->eOpenState!=SQLITE_STATE_ZOMBIE || connectionIsBusy(db) ){ + sqlite3_mutex_leave(db->mutex); + return; + } + + /* If we reach this point, it means that the database connection has + ** closed all sqlite3_stmt and sqlite3_backup objects and has been + ** passed to sqlite3_close (meaning that it is a zombie). Therefore, + ** go ahead and free all resources. + */ + + /* If a transaction is open, roll it back. This also ensures that if + ** any database schemas have been modified by an uncommitted transaction + ** they are reset. And that the required b-tree mutex is held to make + ** the pager rollback and schema reset an atomic operation. */ + sqlite3RollbackAll(db, SQLITE_OK); + + /* Free any outstanding Savepoint structures. */ + sqlite3CloseSavepoints(db); + + /* Close all database connections */ + for(j=0; jnDb; j++){ + struct Db *pDb = &db->aDb[j]; + if( pDb->pBt ){ + sqlite3BtreeClose(pDb->pBt); + pDb->pBt = 0; + if( j!=1 ){ + pDb->pSchema = 0; + } + } + } + /* Clear the TEMP schema separately and last */ + if( db->aDb[1].pSchema ){ + sqlite3SchemaClear(db->aDb[1].pSchema); + assert( db->aDb[1].pSchema->trigHash.count==0 ); + } + sqlite3VtabUnlockList(db); + + /* Free up the array of auxiliary databases */ + sqlite3CollapseDatabaseArray(db); + assert( db->nDb<=2 ); + assert( db->aDb==db->aDbStatic ); + + /* Tell the code in notify.c that the connection no longer holds any + ** locks and does not require any further unlock-notify callbacks. + */ + sqlite3ConnectionClosed(db); + + for(i=sqliteHashFirst(&db->aFunc); i; i=sqliteHashNext(i)){ + FuncDef *pNext, *p; + p = sqliteHashData(i); + do{ + functionDestroy(db, p); + pNext = p->pNext; + sqlite3DbFree(db, p); + p = pNext; + }while( p ); + } + sqlite3HashClear(&db->aFunc); + for(i=sqliteHashFirst(&db->aCollSeq); i; i=sqliteHashNext(i)){ + CollSeq *pColl = (CollSeq *)sqliteHashData(i); + /* Invoke any destructors registered for collation sequence user data. */ + for(j=0; j<3; j++){ + if( pColl[j].xDel ){ + pColl[j].xDel(pColl[j].pUser); + } + } + sqlite3DbFree(db, pColl); + } + sqlite3HashClear(&db->aCollSeq); +#ifndef SQLITE_OMIT_VIRTUALTABLE + for(i=sqliteHashFirst(&db->aModule); i; i=sqliteHashNext(i)){ + Module *pMod = (Module *)sqliteHashData(i); + sqlite3VtabEponymousTableClear(db, pMod); + sqlite3VtabModuleUnref(db, pMod); + } + sqlite3HashClear(&db->aModule); +#endif + + sqlite3Error(db, SQLITE_OK); /* Deallocates any cached error strings. */ + sqlite3ValueFree(db->pErr); + sqlite3CloseExtensions(db); + + db->eOpenState = SQLITE_STATE_ERROR; + + /* The temp-database schema is allocated differently from the other schema + ** objects (using sqliteMalloc() directly, instead of sqlite3BtreeSchema()). + ** So it needs to be freed here. Todo: Why not roll the temp schema into + ** the same sqliteMalloc() as the one that allocates the database + ** structure? + */ + sqlite3DbFree(db, db->aDb[1].pSchema); + if( db->xAutovacDestr ){ + db->xAutovacDestr(db->pAutovacPagesArg); + } + sqlite3_mutex_leave(db->mutex); + db->eOpenState = SQLITE_STATE_CLOSED; + sqlite3_mutex_free(db->mutex); + assert( sqlite3LookasideUsed(db,0)==0 ); + if( db->lookaside.bMalloced ){ + sqlite3_free(db->lookaside.pStart); + } + sqlite3_free(db); +} + +/* +** Rollback all database files. If tripCode is not SQLITE_OK, then +** any write cursors are invalidated ("tripped" - as in "tripping a circuit +** breaker") and made to return tripCode if there are any further +** attempts to use that cursor. Read cursors remain open and valid +** but are "saved" in case the table pages are moved around. +*/ +SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3 *db, int tripCode){ + int i; + int inTrans = 0; + int schemaChange; + assert( sqlite3_mutex_held(db->mutex) ); + sqlite3BeginBenignMalloc(); + + /* Obtain all b-tree mutexes before making any calls to BtreeRollback(). + ** This is important in case the transaction being rolled back has + ** modified the database schema. If the b-tree mutexes are not taken + ** here, then another shared-cache connection might sneak in between + ** the database rollback and schema reset, which can cause false + ** corruption reports in some cases. */ + sqlite3BtreeEnterAll(db); + schemaChange = (db->mDbFlags & DBFLAG_SchemaChange)!=0 && db->init.busy==0; + + for(i=0; inDb; i++){ + Btree *p = db->aDb[i].pBt; + if( p ){ + if( sqlite3BtreeTxnState(p)==SQLITE_TXN_WRITE ){ + inTrans = 1; + } + sqlite3BtreeRollback(p, tripCode, !schemaChange); + } + } + sqlite3VtabRollback(db); + sqlite3EndBenignMalloc(); + + if( schemaChange ){ + sqlite3ExpirePreparedStatements(db, 0); + sqlite3ResetAllSchemasOfConnection(db); + } + sqlite3BtreeLeaveAll(db); + + /* Any deferred constraint violations have now been resolved. */ + db->nDeferredCons = 0; + db->nDeferredImmCons = 0; + db->flags &= ~(u64)(SQLITE_DeferFKs|SQLITE_CorruptRdOnly); + + /* If one has been configured, invoke the rollback-hook callback */ + if( db->xRollbackCallback && (inTrans || !db->autoCommit) ){ + db->xRollbackCallback(db->pRollbackArg); + } +} + +/* +** Return a static string containing the name corresponding to the error code +** specified in the argument. +*/ +#if defined(SQLITE_NEED_ERR_NAME) +SQLITE_PRIVATE const char *sqlite3ErrName(int rc){ + const char *zName = 0; + int i, origRc = rc; + for(i=0; i<2 && zName==0; i++, rc &= 0xff){ + switch( rc ){ + case SQLITE_OK: zName = "SQLITE_OK"; break; + case SQLITE_ERROR: zName = "SQLITE_ERROR"; break; + case SQLITE_ERROR_SNAPSHOT: zName = "SQLITE_ERROR_SNAPSHOT"; break; + case SQLITE_ERROR_RETRY: zName = "SQLITE_ERROR_RETRY"; break; + case SQLITE_ERROR_MISSING_COLLSEQ: + zName = "SQLITE_ERROR_MISSING_COLLSEQ"; break; + case SQLITE_INTERNAL: zName = "SQLITE_INTERNAL"; break; + case SQLITE_PERM: zName = "SQLITE_PERM"; break; + case SQLITE_ABORT: zName = "SQLITE_ABORT"; break; + case SQLITE_ABORT_ROLLBACK: zName = "SQLITE_ABORT_ROLLBACK"; break; + case SQLITE_BUSY: zName = "SQLITE_BUSY"; break; + case SQLITE_BUSY_RECOVERY: zName = "SQLITE_BUSY_RECOVERY"; break; + case SQLITE_BUSY_SNAPSHOT: zName = "SQLITE_BUSY_SNAPSHOT"; break; + case SQLITE_LOCKED: zName = "SQLITE_LOCKED"; break; + case SQLITE_LOCKED_SHAREDCACHE: zName = "SQLITE_LOCKED_SHAREDCACHE";break; + case SQLITE_NOMEM: zName = "SQLITE_NOMEM"; break; + case SQLITE_READONLY: zName = "SQLITE_READONLY"; break; + case SQLITE_READONLY_RECOVERY: zName = "SQLITE_READONLY_RECOVERY"; break; + case SQLITE_READONLY_CANTINIT: zName = "SQLITE_READONLY_CANTINIT"; break; + case SQLITE_READONLY_ROLLBACK: zName = "SQLITE_READONLY_ROLLBACK"; break; + case SQLITE_READONLY_DBMOVED: zName = "SQLITE_READONLY_DBMOVED"; break; + case SQLITE_READONLY_DIRECTORY: zName = "SQLITE_READONLY_DIRECTORY";break; + case SQLITE_INTERRUPT: zName = "SQLITE_INTERRUPT"; break; + case SQLITE_IOERR: zName = "SQLITE_IOERR"; break; + case SQLITE_IOERR_READ: zName = "SQLITE_IOERR_READ"; break; + case SQLITE_IOERR_SHORT_READ: zName = "SQLITE_IOERR_SHORT_READ"; break; + case SQLITE_IOERR_WRITE: zName = "SQLITE_IOERR_WRITE"; break; + case SQLITE_IOERR_FSYNC: zName = "SQLITE_IOERR_FSYNC"; break; + case SQLITE_IOERR_DIR_FSYNC: zName = "SQLITE_IOERR_DIR_FSYNC"; break; + case SQLITE_IOERR_TRUNCATE: zName = "SQLITE_IOERR_TRUNCATE"; break; + case SQLITE_IOERR_FSTAT: zName = "SQLITE_IOERR_FSTAT"; break; + case SQLITE_IOERR_UNLOCK: zName = "SQLITE_IOERR_UNLOCK"; break; + case SQLITE_IOERR_RDLOCK: zName = "SQLITE_IOERR_RDLOCK"; break; + case SQLITE_IOERR_DELETE: zName = "SQLITE_IOERR_DELETE"; break; + case SQLITE_IOERR_NOMEM: zName = "SQLITE_IOERR_NOMEM"; break; + case SQLITE_IOERR_ACCESS: zName = "SQLITE_IOERR_ACCESS"; break; + case SQLITE_IOERR_CHECKRESERVEDLOCK: + zName = "SQLITE_IOERR_CHECKRESERVEDLOCK"; break; + case SQLITE_IOERR_LOCK: zName = "SQLITE_IOERR_LOCK"; break; + case SQLITE_IOERR_CLOSE: zName = "SQLITE_IOERR_CLOSE"; break; + case SQLITE_IOERR_DIR_CLOSE: zName = "SQLITE_IOERR_DIR_CLOSE"; break; + case SQLITE_IOERR_SHMOPEN: zName = "SQLITE_IOERR_SHMOPEN"; break; + case SQLITE_IOERR_SHMSIZE: zName = "SQLITE_IOERR_SHMSIZE"; break; + case SQLITE_IOERR_SHMLOCK: zName = "SQLITE_IOERR_SHMLOCK"; break; + case SQLITE_IOERR_SHMMAP: zName = "SQLITE_IOERR_SHMMAP"; break; + case SQLITE_IOERR_SEEK: zName = "SQLITE_IOERR_SEEK"; break; + case SQLITE_IOERR_DELETE_NOENT: zName = "SQLITE_IOERR_DELETE_NOENT";break; + case SQLITE_IOERR_MMAP: zName = "SQLITE_IOERR_MMAP"; break; + case SQLITE_IOERR_GETTEMPPATH: zName = "SQLITE_IOERR_GETTEMPPATH"; break; + case SQLITE_IOERR_CONVPATH: zName = "SQLITE_IOERR_CONVPATH"; break; + case SQLITE_CORRUPT: zName = "SQLITE_CORRUPT"; break; + case SQLITE_CORRUPT_VTAB: zName = "SQLITE_CORRUPT_VTAB"; break; + case SQLITE_NOTFOUND: zName = "SQLITE_NOTFOUND"; break; + case SQLITE_FULL: zName = "SQLITE_FULL"; break; + case SQLITE_CANTOPEN: zName = "SQLITE_CANTOPEN"; break; + case SQLITE_CANTOPEN_NOTEMPDIR: zName = "SQLITE_CANTOPEN_NOTEMPDIR";break; + case SQLITE_CANTOPEN_ISDIR: zName = "SQLITE_CANTOPEN_ISDIR"; break; + case SQLITE_CANTOPEN_FULLPATH: zName = "SQLITE_CANTOPEN_FULLPATH"; break; + case SQLITE_CANTOPEN_CONVPATH: zName = "SQLITE_CANTOPEN_CONVPATH"; break; + case SQLITE_CANTOPEN_SYMLINK: zName = "SQLITE_CANTOPEN_SYMLINK"; break; + case SQLITE_PROTOCOL: zName = "SQLITE_PROTOCOL"; break; + case SQLITE_EMPTY: zName = "SQLITE_EMPTY"; break; + case SQLITE_SCHEMA: zName = "SQLITE_SCHEMA"; break; + case SQLITE_TOOBIG: zName = "SQLITE_TOOBIG"; break; + case SQLITE_CONSTRAINT: zName = "SQLITE_CONSTRAINT"; break; + case SQLITE_CONSTRAINT_UNIQUE: zName = "SQLITE_CONSTRAINT_UNIQUE"; break; + case SQLITE_CONSTRAINT_TRIGGER: zName = "SQLITE_CONSTRAINT_TRIGGER";break; + case SQLITE_CONSTRAINT_FOREIGNKEY: + zName = "SQLITE_CONSTRAINT_FOREIGNKEY"; break; + case SQLITE_CONSTRAINT_CHECK: zName = "SQLITE_CONSTRAINT_CHECK"; break; + case SQLITE_CONSTRAINT_PRIMARYKEY: + zName = "SQLITE_CONSTRAINT_PRIMARYKEY"; break; + case SQLITE_CONSTRAINT_NOTNULL: zName = "SQLITE_CONSTRAINT_NOTNULL";break; + case SQLITE_CONSTRAINT_COMMITHOOK: + zName = "SQLITE_CONSTRAINT_COMMITHOOK"; break; + case SQLITE_CONSTRAINT_VTAB: zName = "SQLITE_CONSTRAINT_VTAB"; break; + case SQLITE_CONSTRAINT_FUNCTION: + zName = "SQLITE_CONSTRAINT_FUNCTION"; break; + case SQLITE_CONSTRAINT_ROWID: zName = "SQLITE_CONSTRAINT_ROWID"; break; + case SQLITE_MISMATCH: zName = "SQLITE_MISMATCH"; break; + case SQLITE_MISUSE: zName = "SQLITE_MISUSE"; break; + case SQLITE_NOLFS: zName = "SQLITE_NOLFS"; break; + case SQLITE_AUTH: zName = "SQLITE_AUTH"; break; + case SQLITE_FORMAT: zName = "SQLITE_FORMAT"; break; + case SQLITE_RANGE: zName = "SQLITE_RANGE"; break; + case SQLITE_NOTADB: zName = "SQLITE_NOTADB"; break; + case SQLITE_ROW: zName = "SQLITE_ROW"; break; + case SQLITE_NOTICE: zName = "SQLITE_NOTICE"; break; + case SQLITE_NOTICE_RECOVER_WAL: zName = "SQLITE_NOTICE_RECOVER_WAL";break; + case SQLITE_NOTICE_RECOVER_ROLLBACK: + zName = "SQLITE_NOTICE_RECOVER_ROLLBACK"; break; + case SQLITE_NOTICE_RBU: zName = "SQLITE_NOTICE_RBU"; break; + case SQLITE_WARNING: zName = "SQLITE_WARNING"; break; + case SQLITE_WARNING_AUTOINDEX: zName = "SQLITE_WARNING_AUTOINDEX"; break; + case SQLITE_DONE: zName = "SQLITE_DONE"; break; + } + } + if( zName==0 ){ + static char zBuf[50]; + sqlite3_snprintf(sizeof(zBuf), zBuf, "SQLITE_UNKNOWN(%d)", origRc); + zName = zBuf; + } + return zName; +} +#endif + +/* +** Return a static string that describes the kind of error specified in the +** argument. +*/ +SQLITE_PRIVATE const char *sqlite3ErrStr(int rc){ + static const char* const aMsg[] = { + /* SQLITE_OK */ "not an error", + /* SQLITE_ERROR */ "SQL logic error", + /* SQLITE_INTERNAL */ 0, + /* SQLITE_PERM */ "access permission denied", + /* SQLITE_ABORT */ "query aborted", + /* SQLITE_BUSY */ "database is locked", + /* SQLITE_LOCKED */ "database table is locked", + /* SQLITE_NOMEM */ "out of memory", + /* SQLITE_READONLY */ "attempt to write a readonly database", + /* SQLITE_INTERRUPT */ "interrupted", + /* SQLITE_IOERR */ "disk I/O error", + /* SQLITE_CORRUPT */ "database disk image is malformed", + /* SQLITE_NOTFOUND */ "unknown operation", + /* SQLITE_FULL */ "database or disk is full", + /* SQLITE_CANTOPEN */ "unable to open database file", + /* SQLITE_PROTOCOL */ "locking protocol", + /* SQLITE_EMPTY */ 0, + /* SQLITE_SCHEMA */ "database schema has changed", + /* SQLITE_TOOBIG */ "string or blob too big", + /* SQLITE_CONSTRAINT */ "constraint failed", + /* SQLITE_MISMATCH */ "datatype mismatch", + /* SQLITE_MISUSE */ "bad parameter or other API misuse", +#ifdef SQLITE_DISABLE_LFS + /* SQLITE_NOLFS */ "large file support is disabled", +#else + /* SQLITE_NOLFS */ 0, +#endif + /* SQLITE_AUTH */ "authorization denied", + /* SQLITE_FORMAT */ 0, + /* SQLITE_RANGE */ "column index out of range", + /* SQLITE_NOTADB */ "file is not a database", + /* SQLITE_NOTICE */ "notification message", + /* SQLITE_WARNING */ "warning message", + }; + const char *zErr = "unknown error"; + switch( rc ){ + case SQLITE_ABORT_ROLLBACK: { + zErr = "abort due to ROLLBACK"; + break; + } + case SQLITE_ROW: { + zErr = "another row available"; + break; + } + case SQLITE_DONE: { + zErr = "no more rows available"; + break; + } + default: { + rc &= 0xff; + if( ALWAYS(rc>=0) && rcbusyTimeout; + int delay, prior; + + assert( count>=0 ); + if( count < NDELAY ){ + delay = delays[count]; + prior = totals[count]; + }else{ + delay = delays[NDELAY-1]; + prior = totals[NDELAY-1] + delay*(count-(NDELAY-1)); + } + if( prior + delay > tmout ){ + delay = tmout - prior; + if( delay<=0 ) return 0; + } + sqlite3OsSleep(db->pVfs, delay*1000); + return 1; +#else + /* This case for unix systems that lack usleep() support. Sleeping + ** must be done in increments of whole seconds */ + sqlite3 *db = (sqlite3 *)ptr; + int tmout = ((sqlite3 *)ptr)->busyTimeout; + if( (count+1)*1000 > tmout ){ + return 0; + } + sqlite3OsSleep(db->pVfs, 1000000); + return 1; +#endif +} + +/* +** Invoke the given busy handler. +** +** This routine is called when an operation failed to acquire a +** lock on VFS file pFile. +** +** If this routine returns non-zero, the lock is retried. If it +** returns 0, the operation aborts with an SQLITE_BUSY error. +*/ +SQLITE_PRIVATE int sqlite3InvokeBusyHandler(BusyHandler *p){ + int rc; + if( p->xBusyHandler==0 || p->nBusy<0 ) return 0; + rc = p->xBusyHandler(p->pBusyArg, p->nBusy); + if( rc==0 ){ + p->nBusy = -1; + }else{ + p->nBusy++; + } + return rc; +} + +/* +** This routine sets the busy callback for an Sqlite database to the +** given callback function with the given argument. +*/ +SQLITE_API int sqlite3_busy_handler( + sqlite3 *db, + int (*xBusy)(void*,int), + void *pArg +){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(db->mutex); + db->busyHandler.xBusyHandler = xBusy; + db->busyHandler.pBusyArg = pArg; + db->busyHandler.nBusy = 0; + db->busyTimeout = 0; +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + db->setlkTimeout = 0; +#endif + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; +} + +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK +/* +** This routine sets the progress callback for an Sqlite database to the +** given callback function with the given argument. The progress callback will +** be invoked every nOps opcodes. +*/ +SQLITE_API void sqlite3_progress_handler( + sqlite3 *db, + int nOps, + int (*xProgress)(void*), + void *pArg +){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return; + } +#endif + sqlite3_mutex_enter(db->mutex); + if( nOps>0 ){ + db->xProgress = xProgress; + db->nProgressOps = (unsigned)nOps; + db->pProgressArg = pArg; + }else{ + db->xProgress = 0; + db->nProgressOps = 0; + db->pProgressArg = 0; + } + sqlite3_mutex_leave(db->mutex); +} +#endif + + +/* +** This routine installs a default busy handler that waits for the +** specified number of milliseconds before returning 0. +*/ +SQLITE_API int sqlite3_busy_timeout(sqlite3 *db, int ms){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + if( ms>0 ){ + sqlite3_busy_handler(db, (int(*)(void*,int))sqliteDefaultBusyCallback, + (void*)db); + db->busyTimeout = ms; +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + db->setlkTimeout = ms; +#endif + }else{ + sqlite3_busy_handler(db, 0, 0); + } + return SQLITE_OK; +} + +/* +** Set the setlk timeout value. +*/ +SQLITE_API int sqlite3_setlk_timeout(sqlite3 *db, int ms, int flags){ +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + int iDb; + int bBOC = ((flags & SQLITE_SETLK_BLOCK_ON_CONNECT) ? 1 : 0); +#endif +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + if( ms<-1 ) return SQLITE_RANGE; +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + sqlite3_mutex_enter(db->mutex); + db->setlkTimeout = ms; + db->setlkFlags = flags; + sqlite3BtreeEnterAll(db); + for(iDb=0; iDbnDb; iDb++){ + Btree *pBt = db->aDb[iDb].pBt; + if( pBt ){ + sqlite3_file *fd = sqlite3PagerFile(sqlite3BtreePager(pBt)); + sqlite3OsFileControlHint(fd, SQLITE_FCNTL_BLOCK_ON_CONNECT, (void*)&bBOC); + } + } + sqlite3BtreeLeaveAll(db); + sqlite3_mutex_leave(db->mutex); +#endif +#if !defined(SQLITE_ENABLE_API_ARMOR) && !defined(SQLITE_ENABLE_SETLK_TIMEOUT) + UNUSED_PARAMETER(db); + UNUSED_PARAMETER(flags); +#endif + return SQLITE_OK; +} + +/* +** Cause any pending operation to stop at its earliest opportunity. +*/ +SQLITE_API void sqlite3_interrupt(sqlite3 *db){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) + && (db==0 || db->eOpenState!=SQLITE_STATE_ZOMBIE) + ){ + (void)SQLITE_MISUSE_BKPT; + return; + } +#endif + AtomicStore(&db->u1.isInterrupted, 1); +} + +/* +** Return true or false depending on whether or not an interrupt is +** pending on connection db. +*/ +SQLITE_API int sqlite3_is_interrupted(sqlite3 *db){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) + && (db==0 || db->eOpenState!=SQLITE_STATE_ZOMBIE) + ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + return AtomicLoad(&db->u1.isInterrupted)!=0; +} + +/* +** This function is exactly the same as sqlite3_create_function(), except +** that it is designed to be called by internal code. The difference is +** that if a malloc() fails in sqlite3_create_function(), an error code +** is returned and the mallocFailed flag cleared. +*/ +SQLITE_PRIVATE int sqlite3CreateFunc( + sqlite3 *db, + const char *zFunctionName, + int nArg, + int enc, + void *pUserData, + void (*xSFunc)(sqlite3_context*,int,sqlite3_value **), + void (*xStep)(sqlite3_context*,int,sqlite3_value **), + void (*xFinal)(sqlite3_context*), + void (*xValue)(sqlite3_context*), + void (*xInverse)(sqlite3_context*,int,sqlite3_value **), + FuncDestructor *pDestructor +){ + FuncDef *p; + int extraFlags; + + assert( sqlite3_mutex_held(db->mutex) ); + assert( xValue==0 || xSFunc==0 ); + if( zFunctionName==0 /* Must have a valid name */ + || (xSFunc!=0 && xFinal!=0) /* Not both xSFunc and xFinal */ + || ((xFinal==0)!=(xStep==0)) /* Both or neither of xFinal and xStep */ + || ((xValue==0)!=(xInverse==0)) /* Both or neither of xValue, xInverse */ + || (nArg<-1 || nArg>SQLITE_MAX_FUNCTION_ARG) + || (255funcFlags & SQLITE_FUNC_ENCMASK)==(u32)enc && p->nArg==nArg ){ + if( db->nVdbeActive ){ + sqlite3ErrorWithMsg(db, SQLITE_BUSY, + "unable to delete/modify user-function due to active statements"); + assert( !db->mallocFailed ); + return SQLITE_BUSY; + }else{ + sqlite3ExpirePreparedStatements(db, 0); + } + }else if( xSFunc==0 && xFinal==0 ){ + /* Trying to delete a function that does not exist. This is a no-op. + ** https://sqlite.org/forum/forumpost/726219164b */ + return SQLITE_OK; + } + + p = sqlite3FindFunction(db, zFunctionName, nArg, (u8)enc, 1); + assert(p || db->mallocFailed); + if( !p ){ + return SQLITE_NOMEM_BKPT; + } + + /* If an older version of the function with a configured destructor is + ** being replaced invoke the destructor function here. */ + functionDestroy(db, p); + + if( pDestructor ){ + pDestructor->nRef++; + } + p->u.pDestructor = pDestructor; + p->funcFlags = (p->funcFlags & SQLITE_FUNC_ENCMASK) | extraFlags; + testcase( p->funcFlags & SQLITE_DETERMINISTIC ); + testcase( p->funcFlags & SQLITE_DIRECTONLY ); + p->xSFunc = xSFunc ? xSFunc : xStep; + p->xFinalize = xFinal; + p->xValue = xValue; + p->xInverse = xInverse; + p->pUserData = pUserData; + p->nArg = (u16)nArg; + return SQLITE_OK; +} + +/* +** Worker function used by utf-8 APIs that create new functions: +** +** sqlite3_create_function() +** sqlite3_create_function_v2() +** sqlite3_create_window_function() +*/ +static int createFunctionApi( + sqlite3 *db, + const char *zFunc, + int nArg, + int enc, + void *p, + void (*xSFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*), + void (*xValue)(sqlite3_context*), + void (*xInverse)(sqlite3_context*,int,sqlite3_value**), + void(*xDestroy)(void*) +){ + int rc = SQLITE_ERROR; + FuncDestructor *pArg = 0; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + return SQLITE_MISUSE_BKPT; + } +#endif + sqlite3_mutex_enter(db->mutex); + if( xDestroy ){ + pArg = (FuncDestructor *)sqlite3Malloc(sizeof(FuncDestructor)); + if( !pArg ){ + sqlite3OomFault(db); + xDestroy(p); + goto out; + } + pArg->nRef = 0; + pArg->xDestroy = xDestroy; + pArg->pUserData = p; + } + rc = sqlite3CreateFunc(db, zFunc, nArg, enc, p, + xSFunc, xStep, xFinal, xValue, xInverse, pArg + ); + if( pArg && pArg->nRef==0 ){ + assert( rc!=SQLITE_OK || (xStep==0 && xFinal==0) ); + xDestroy(p); + sqlite3_free(pArg); + } + + out: + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/* +** Create new user functions. +*/ +SQLITE_API int sqlite3_create_function( + sqlite3 *db, + const char *zFunc, + int nArg, + int enc, + void *p, + void (*xSFunc)(sqlite3_context*,int,sqlite3_value **), + void (*xStep)(sqlite3_context*,int,sqlite3_value **), + void (*xFinal)(sqlite3_context*) +){ + return createFunctionApi(db, zFunc, nArg, enc, p, xSFunc, xStep, + xFinal, 0, 0, 0); +} +SQLITE_API int sqlite3_create_function_v2( + sqlite3 *db, + const char *zFunc, + int nArg, + int enc, + void *p, + void (*xSFunc)(sqlite3_context*,int,sqlite3_value **), + void (*xStep)(sqlite3_context*,int,sqlite3_value **), + void (*xFinal)(sqlite3_context*), + void (*xDestroy)(void *) +){ + return createFunctionApi(db, zFunc, nArg, enc, p, xSFunc, xStep, + xFinal, 0, 0, xDestroy); +} +SQLITE_API int sqlite3_create_window_function( + sqlite3 *db, + const char *zFunc, + int nArg, + int enc, + void *p, + void (*xStep)(sqlite3_context*,int,sqlite3_value **), + void (*xFinal)(sqlite3_context*), + void (*xValue)(sqlite3_context*), + void (*xInverse)(sqlite3_context*,int,sqlite3_value **), + void (*xDestroy)(void *) +){ + return createFunctionApi(db, zFunc, nArg, enc, p, 0, xStep, + xFinal, xValue, xInverse, xDestroy); +} + +#ifndef SQLITE_OMIT_UTF16 +SQLITE_API int sqlite3_create_function16( + sqlite3 *db, + const void *zFunctionName, + int nArg, + int eTextRep, + void *p, + void (*xSFunc)(sqlite3_context*,int,sqlite3_value**), + void (*xStep)(sqlite3_context*,int,sqlite3_value**), + void (*xFinal)(sqlite3_context*) +){ + int rc; + char *zFunc8; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || zFunctionName==0 ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(db->mutex); + assert( !db->mallocFailed ); + zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1, SQLITE_UTF16NATIVE); + rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xSFunc,xStep,xFinal,0,0,0); + sqlite3DbFree(db, zFunc8); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} +#endif + + +/* +** The following is the implementation of an SQL function that always +** fails with an error message stating that the function is used in the +** wrong context. The sqlite3_overload_function() API might construct +** SQL function that use this routine so that the functions will exist +** for name resolution but are actually overloaded by the xFindFunction +** method of virtual tables. +*/ +static void sqlite3InvalidFunction( + sqlite3_context *context, /* The function calling context */ + int NotUsed, /* Number of arguments to the function */ + sqlite3_value **NotUsed2 /* Value of each argument */ +){ + const char *zName = (const char*)sqlite3_user_data(context); + char *zErr; + UNUSED_PARAMETER2(NotUsed, NotUsed2); + zErr = sqlite3_mprintf( + "unable to use function %s in the requested context", zName); + sqlite3_result_error(context, zErr, -1); + sqlite3_free(zErr); +} + +/* +** Declare that a function has been overloaded by a virtual table. +** +** If the function already exists as a regular global function, then +** this routine is a no-op. If the function does not exist, then create +** a new one that always throws a run-time error. +** +** When virtual tables intend to provide an overloaded function, they +** should call this routine to make sure the global function exists. +** A global function must exist in order for name resolution to work +** properly. +*/ +SQLITE_API int sqlite3_overload_function( + sqlite3 *db, + const char *zName, + int nArg +){ + int rc; + char *zCopy; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || zName==0 || nArg<-2 ){ + return SQLITE_MISUSE_BKPT; + } +#endif + sqlite3_mutex_enter(db->mutex); + rc = sqlite3FindFunction(db, zName, nArg, SQLITE_UTF8, 0)!=0; + sqlite3_mutex_leave(db->mutex); + if( rc ) return SQLITE_OK; + zCopy = sqlite3_mprintf("%s", zName); + if( zCopy==0 ) return SQLITE_NOMEM; + return sqlite3_create_function_v2(db, zName, nArg, SQLITE_UTF8, + zCopy, sqlite3InvalidFunction, 0, 0, sqlite3_free); +} + +#ifndef SQLITE_OMIT_TRACE +/* +** Register a trace function. The pArg from the previously registered trace +** is returned. +** +** A NULL trace function means that no tracing is executes. A non-NULL +** trace is a pointer to a function that is invoked at the start of each +** SQL statement. +*/ +#ifndef SQLITE_OMIT_DEPRECATED +SQLITE_API void *sqlite3_trace(sqlite3 *db, void(*xTrace)(void*,const char*), void *pArg){ + void *pOld; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + sqlite3_mutex_enter(db->mutex); + pOld = db->pTraceArg; + db->mTrace = xTrace ? SQLITE_TRACE_LEGACY : 0; + db->trace.xLegacy = xTrace; + db->pTraceArg = pArg; + sqlite3_mutex_leave(db->mutex); + return pOld; +} +#endif /* SQLITE_OMIT_DEPRECATED */ + +/* Register a trace callback using the version-2 interface. +*/ +SQLITE_API int sqlite3_trace_v2( + sqlite3 *db, /* Trace this connection */ + unsigned mTrace, /* Mask of events to be traced */ + int(*xTrace)(unsigned,void*,void*,void*), /* Callback to invoke */ + void *pArg /* Context */ +){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + return SQLITE_MISUSE_BKPT; + } +#endif + sqlite3_mutex_enter(db->mutex); + if( mTrace==0 ) xTrace = 0; + if( xTrace==0 ) mTrace = 0; + db->mTrace = mTrace; + db->trace.xV2 = xTrace; + db->pTraceArg = pArg; + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; +} + +#ifndef SQLITE_OMIT_DEPRECATED +/* +** Register a profile function. The pArg from the previously registered +** profile function is returned. +** +** A NULL profile function means that no profiling is executes. A non-NULL +** profile is a pointer to a function that is invoked at the conclusion of +** each SQL statement that is run. +*/ +SQLITE_API void *sqlite3_profile( + sqlite3 *db, + void (*xProfile)(void*,const char*,sqlite_uint64), + void *pArg +){ + void *pOld; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + sqlite3_mutex_enter(db->mutex); + pOld = db->pProfileArg; + db->xProfile = xProfile; + db->pProfileArg = pArg; + db->mTrace &= SQLITE_TRACE_NONLEGACY_MASK; + if( db->xProfile ) db->mTrace |= SQLITE_TRACE_XPROFILE; + sqlite3_mutex_leave(db->mutex); + return pOld; +} +#endif /* SQLITE_OMIT_DEPRECATED */ +#endif /* SQLITE_OMIT_TRACE */ + +/* +** Register a function to be invoked when a transaction commits. +** If the invoked function returns non-zero, then the commit becomes a +** rollback. +*/ +SQLITE_API void *sqlite3_commit_hook( + sqlite3 *db, /* Attach the hook to this database */ + int (*xCallback)(void*), /* Function to invoke on each commit */ + void *pArg /* Argument to the function */ +){ + void *pOld; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + sqlite3_mutex_enter(db->mutex); + pOld = db->pCommitArg; + db->xCommitCallback = xCallback; + db->pCommitArg = pArg; + sqlite3_mutex_leave(db->mutex); + return pOld; +} + +/* +** Register a callback to be invoked each time a row is updated, +** inserted or deleted using this database connection. +*/ +SQLITE_API void *sqlite3_update_hook( + sqlite3 *db, /* Attach the hook to this database */ + void (*xCallback)(void*,int,char const *,char const *,sqlite_int64), + void *pArg /* Argument to the function */ +){ + void *pRet; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + sqlite3_mutex_enter(db->mutex); + pRet = db->pUpdateArg; + db->xUpdateCallback = xCallback; + db->pUpdateArg = pArg; + sqlite3_mutex_leave(db->mutex); + return pRet; +} + +/* +** Register a callback to be invoked each time a transaction is rolled +** back by this database connection. +*/ +SQLITE_API void *sqlite3_rollback_hook( + sqlite3 *db, /* Attach the hook to this database */ + void (*xCallback)(void*), /* Callback function */ + void *pArg /* Argument to the function */ +){ + void *pRet; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + sqlite3_mutex_enter(db->mutex); + pRet = db->pRollbackArg; + db->xRollbackCallback = xCallback; + db->pRollbackArg = pArg; + sqlite3_mutex_leave(db->mutex); + return pRet; +} + +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK +/* +** Register a callback to be invoked each time a row is updated, +** inserted or deleted using this database connection. +*/ +SQLITE_API void *sqlite3_preupdate_hook( + sqlite3 *db, /* Attach the hook to this database */ + void(*xCallback)( /* Callback function */ + void*,sqlite3*,int,char const*,char const*,sqlite3_int64,sqlite3_int64), + void *pArg /* First callback argument */ +){ + void *pRet; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( db==0 ){ + return 0; + } +#endif + sqlite3_mutex_enter(db->mutex); + pRet = db->pPreUpdateArg; + db->xPreUpdateCallback = xCallback; + db->pPreUpdateArg = pArg; + sqlite3_mutex_leave(db->mutex); + return pRet; +} +#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ + +/* +** Register a function to be invoked prior to each autovacuum that +** determines the number of pages to vacuum. +*/ +SQLITE_API int sqlite3_autovacuum_pages( + sqlite3 *db, /* Attach the hook to this database */ + unsigned int (*xCallback)(void*,const char*,u32,u32,u32), + void *pArg, /* Argument to the function */ + void (*xDestructor)(void*) /* Destructor for pArg */ +){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + if( xDestructor ) xDestructor(pArg); + return SQLITE_MISUSE_BKPT; + } +#endif + sqlite3_mutex_enter(db->mutex); + if( db->xAutovacDestr ){ + db->xAutovacDestr(db->pAutovacPagesArg); + } + db->xAutovacPages = xCallback; + db->pAutovacPagesArg = pArg; + db->xAutovacDestr = xDestructor; + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; +} + + +#ifndef SQLITE_OMIT_WAL +/* +** The sqlite3_wal_hook() callback registered by sqlite3_wal_autocheckpoint(). +** Invoke sqlite3_wal_checkpoint if the number of frames in the log file +** is greater than sqlite3.pWalArg cast to an integer (the value configured by +** wal_autocheckpoint()). +*/ +SQLITE_PRIVATE int sqlite3WalDefaultHook( + void *pClientData, /* Argument */ + sqlite3 *db, /* Connection */ + const char *zDb, /* Database */ + int nFrame /* Size of WAL */ +){ + if( nFrame>=SQLITE_PTR_TO_INT(pClientData) ){ + sqlite3BeginBenignMalloc(); + sqlite3_wal_checkpoint(db, zDb); + sqlite3EndBenignMalloc(); + } + return SQLITE_OK; +} +#endif /* SQLITE_OMIT_WAL */ + +/* +** Configure an sqlite3_wal_hook() callback to automatically checkpoint +** a database after committing a transaction if there are nFrame or +** more frames in the log file. Passing zero or a negative value as the +** nFrame parameter disables automatic checkpoints entirely. +** +** The callback registered by this function replaces any existing callback +** registered using sqlite3_wal_hook(). Likewise, registering a callback +** using sqlite3_wal_hook() disables the automatic checkpoint mechanism +** configured by this function. +*/ +SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int nFrame){ +#ifdef SQLITE_OMIT_WAL + UNUSED_PARAMETER(db); + UNUSED_PARAMETER(nFrame); +#else +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + if( nFrame>0 ){ + sqlite3_wal_hook(db, sqlite3WalDefaultHook, SQLITE_INT_TO_PTR(nFrame)); + }else{ + sqlite3_wal_hook(db, 0, 0); + } +#endif + return SQLITE_OK; +} + +/* +** Register a callback to be invoked each time a transaction is written +** into the write-ahead-log by this database connection. +*/ +SQLITE_API void *sqlite3_wal_hook( + sqlite3 *db, /* Attach the hook to this db handle */ + int(*xCallback)(void *, sqlite3*, const char*, int), + void *pArg /* First argument passed to xCallback() */ +){ +#ifndef SQLITE_OMIT_WAL + void *pRet; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + sqlite3_mutex_enter(db->mutex); + pRet = db->pWalArg; + db->xWalCallback = xCallback; + db->pWalArg = pArg; + sqlite3_mutex_leave(db->mutex); + return pRet; +#else + return 0; +#endif +} + +/* +** Checkpoint database zDb. +*/ +SQLITE_API int sqlite3_wal_checkpoint_v2( + sqlite3 *db, /* Database handle */ + const char *zDb, /* Name of attached database (or NULL) */ + int eMode, /* SQLITE_CHECKPOINT_* value */ + int *pnLog, /* OUT: Size of WAL log in frames */ + int *pnCkpt /* OUT: Total number of frames checkpointed */ +){ +#ifdef SQLITE_OMIT_WAL + return SQLITE_OK; +#else + int rc; /* Return code */ + int iDb; /* Schema to checkpoint */ + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + + /* Initialize the output variables to -1 in case an error occurs. */ + if( pnLog ) *pnLog = -1; + if( pnCkpt ) *pnCkpt = -1; + + assert( SQLITE_CHECKPOINT_PASSIVE==0 ); + assert( SQLITE_CHECKPOINT_FULL==1 ); + assert( SQLITE_CHECKPOINT_RESTART==2 ); + assert( SQLITE_CHECKPOINT_TRUNCATE==3 ); + if( eModeSQLITE_CHECKPOINT_TRUNCATE ){ + /* EVIDENCE-OF: R-03996-12088 The M parameter must be a valid checkpoint + ** mode: */ + return SQLITE_MISUSE_BKPT; + } + + sqlite3_mutex_enter(db->mutex); + if( zDb && zDb[0] ){ + iDb = sqlite3FindDbName(db, zDb); + }else{ + iDb = SQLITE_MAX_DB; /* This means process all schemas */ + } + if( iDb<0 ){ + rc = SQLITE_ERROR; + sqlite3ErrorWithMsg(db, SQLITE_ERROR, "unknown database: %s", zDb); + }else{ + db->busyHandler.nBusy = 0; + rc = sqlite3Checkpoint(db, iDb, eMode, pnLog, pnCkpt); + sqlite3Error(db, rc); + } + rc = sqlite3ApiExit(db, rc); + + /* If there are no active statements, clear the interrupt flag at this + ** point. */ + if( db->nVdbeActive==0 ){ + AtomicStore(&db->u1.isInterrupted, 0); + } + + sqlite3_mutex_leave(db->mutex); + return rc; +#endif +} + + +/* +** Checkpoint database zDb. If zDb is NULL, or if the buffer zDb points +** to contains a zero-length string, all attached databases are +** checkpointed. +*/ +SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb){ + /* EVIDENCE-OF: R-41613-20553 The sqlite3_wal_checkpoint(D,X) is equivalent to + ** sqlite3_wal_checkpoint_v2(D,X,SQLITE_CHECKPOINT_PASSIVE,0,0). */ + return sqlite3_wal_checkpoint_v2(db,zDb,SQLITE_CHECKPOINT_PASSIVE,0,0); +} + +#ifndef SQLITE_OMIT_WAL +/* +** Run a checkpoint on database iDb. This is a no-op if database iDb is +** not currently open in WAL mode. +** +** If a transaction is open on the database being checkpointed, this +** function returns SQLITE_LOCKED and a checkpoint is not attempted. If +** an error occurs while running the checkpoint, an SQLite error code is +** returned (i.e. SQLITE_IOERR). Otherwise, SQLITE_OK. +** +** The mutex on database handle db should be held by the caller. The mutex +** associated with the specific b-tree being checkpointed is taken by +** this function while the checkpoint is running. +** +** If iDb is passed SQLITE_MAX_DB then all attached databases are +** checkpointed. If an error is encountered it is returned immediately - +** no attempt is made to checkpoint any remaining databases. +** +** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL, RESTART +** or TRUNCATE. +*/ +SQLITE_PRIVATE int sqlite3Checkpoint(sqlite3 *db, int iDb, int eMode, int *pnLog, int *pnCkpt){ + int rc = SQLITE_OK; /* Return code */ + int i; /* Used to iterate through attached dbs */ + int bBusy = 0; /* True if SQLITE_BUSY has been encountered */ + + assert( sqlite3_mutex_held(db->mutex) ); + assert( !pnLog || *pnLog==-1 ); + assert( !pnCkpt || *pnCkpt==-1 ); + testcase( iDb==SQLITE_MAX_ATTACHED ); /* See forum post a006d86f72 */ + testcase( iDb==SQLITE_MAX_DB ); + + for(i=0; inDb && rc==SQLITE_OK; i++){ + if( i==iDb || iDb==SQLITE_MAX_DB ){ + rc = sqlite3BtreeCheckpoint(db->aDb[i].pBt, eMode, pnLog, pnCkpt); + pnLog = 0; + pnCkpt = 0; + if( rc==SQLITE_BUSY ){ + bBusy = 1; + rc = SQLITE_OK; + } + } + } + + return (rc==SQLITE_OK && bBusy) ? SQLITE_BUSY : rc; +} +#endif /* SQLITE_OMIT_WAL */ + +/* +** This function returns true if main-memory should be used instead of +** a temporary file for transient pager files and statement journals. +** The value returned depends on the value of db->temp_store (runtime +** parameter) and the compile time value of SQLITE_TEMP_STORE. The +** following table describes the relationship between these two values +** and this functions return value. +** +** SQLITE_TEMP_STORE db->temp_store Location of temporary database +** ----------------- -------------- ------------------------------ +** 0 any file (return 0) +** 1 1 file (return 0) +** 1 2 memory (return 1) +** 1 0 file (return 0) +** 2 1 file (return 0) +** 2 2 memory (return 1) +** 2 0 memory (return 1) +** 3 any memory (return 1) +*/ +SQLITE_PRIVATE int sqlite3TempInMemory(const sqlite3 *db){ +#if SQLITE_TEMP_STORE==1 + return ( db->temp_store==2 ); +#endif +#if SQLITE_TEMP_STORE==2 + return ( db->temp_store!=1 ); +#endif +#if SQLITE_TEMP_STORE==3 + UNUSED_PARAMETER(db); + return 1; +#endif +#if SQLITE_TEMP_STORE<1 || SQLITE_TEMP_STORE>3 + UNUSED_PARAMETER(db); + return 0; +#endif +} + +/* +** Return UTF-8 encoded English language explanation of the most recent +** error. +*/ +SQLITE_API const char *sqlite3_errmsg(sqlite3 *db){ + const char *z; + if( !db ){ + return sqlite3ErrStr(SQLITE_NOMEM_BKPT); + } + if( !sqlite3SafetyCheckSickOrOk(db) ){ + return sqlite3ErrStr(SQLITE_MISUSE_BKPT); + } + sqlite3_mutex_enter(db->mutex); + if( db->mallocFailed ){ + z = sqlite3ErrStr(SQLITE_NOMEM_BKPT); + }else{ + testcase( db->pErr==0 ); + z = db->errCode ? (char*)sqlite3_value_text(db->pErr) : 0; + assert( !db->mallocFailed ); + if( z==0 ){ + z = sqlite3ErrStr(db->errCode); + } + } + sqlite3_mutex_leave(db->mutex); + return z; +} + +/* +** Set the error code and error message associated with the database handle. +** +** This routine is intended to be called by outside extensions (ex: the +** Session extension). Internal logic should invoke sqlite3Error() or +** sqlite3ErrorWithMsg() directly. +*/ +SQLITE_API int sqlite3_set_errmsg(sqlite3 *db, int errcode, const char *zMsg){ + int rc = SQLITE_OK; + if( !sqlite3SafetyCheckOk(db) ){ + return SQLITE_MISUSE_BKPT; + } + sqlite3_mutex_enter(db->mutex); + if( zMsg ){ + sqlite3ErrorWithMsg(db, errcode, "%s", zMsg); + }else{ + sqlite3Error(db, errcode); + } + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/* +** Return the byte offset of the most recent error +*/ +SQLITE_API int sqlite3_error_offset(sqlite3 *db){ + int iOffset = -1; + if( db && sqlite3SafetyCheckSickOrOk(db) && db->errCode ){ + sqlite3_mutex_enter(db->mutex); + iOffset = db->errByteOffset; + sqlite3_mutex_leave(db->mutex); + } + return iOffset; +} + +#ifndef SQLITE_OMIT_UTF16 +/* +** Return UTF-16 encoded English language explanation of the most recent +** error. +*/ +SQLITE_API const void *sqlite3_errmsg16(sqlite3 *db){ + static const u16 outOfMem[] = { + 'o', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0 + }; + static const u16 misuse[] = { + 'b', 'a', 'd', ' ', 'p', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', ' ', + 'o', 'r', ' ', 'o', 't', 'h', 'e', 'r', ' ', 'A', 'P', 'I', ' ', + 'm', 'i', 's', 'u', 's', 'e', 0 + }; + + const void *z; + if( !db ){ + return (void *)outOfMem; + } + if( !sqlite3SafetyCheckSickOrOk(db) ){ + return (void *)misuse; + } + sqlite3_mutex_enter(db->mutex); + if( db->mallocFailed ){ + z = (void *)outOfMem; + }else{ + z = sqlite3_value_text16(db->pErr); + if( z==0 ){ + sqlite3ErrorWithMsg(db, db->errCode, sqlite3ErrStr(db->errCode)); + z = sqlite3_value_text16(db->pErr); + } + /* A malloc() may have failed within the call to sqlite3_value_text16() + ** above. If this is the case, then the db->mallocFailed flag needs to + ** be cleared before returning. Do this directly, instead of via + ** sqlite3ApiExit(), to avoid setting the database handle error message. + */ + sqlite3OomClear(db); + } + sqlite3_mutex_leave(db->mutex); + return z; +} +#endif /* SQLITE_OMIT_UTF16 */ + +/* +** Return the most recent error code generated by an SQLite routine. If NULL is +** passed to this function, we assume a malloc() failed during sqlite3_open(). +*/ +SQLITE_API int sqlite3_errcode(sqlite3 *db){ + if( db && !sqlite3SafetyCheckSickOrOk(db) ){ + return SQLITE_MISUSE_BKPT; + } + if( !db || db->mallocFailed ){ + return SQLITE_NOMEM_BKPT; + } + return db->errCode & db->errMask; +} +SQLITE_API int sqlite3_extended_errcode(sqlite3 *db){ + if( db && !sqlite3SafetyCheckSickOrOk(db) ){ + return SQLITE_MISUSE_BKPT; + } + if( !db || db->mallocFailed ){ + return SQLITE_NOMEM_BKPT; + } + return db->errCode; +} +SQLITE_API int sqlite3_system_errno(sqlite3 *db){ + return db ? db->iSysErrno : 0; +} + +/* +** Return a string that describes the kind of error specified in the +** argument. For now, this simply calls the internal sqlite3ErrStr() +** function. +*/ +SQLITE_API const char *sqlite3_errstr(int rc){ + return sqlite3ErrStr(rc); +} + +/* +** Create a new collating function for database "db". The name is zName +** and the encoding is enc. +*/ +static int createCollation( + sqlite3* db, + const char *zName, + u8 enc, + void* pCtx, + int(*xCompare)(void*,int,const void*,int,const void*), + void(*xDel)(void*) +){ + CollSeq *pColl; + int enc2; + + assert( sqlite3_mutex_held(db->mutex) ); + + /* If SQLITE_UTF16 is specified as the encoding type, transform this + ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the + ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally. + */ + enc2 = enc; + testcase( enc2==SQLITE_UTF16 ); + testcase( enc2==SQLITE_UTF16_ALIGNED ); + if( enc2==SQLITE_UTF16 || enc2==SQLITE_UTF16_ALIGNED ){ + enc2 = SQLITE_UTF16NATIVE; + } + if( enc2SQLITE_UTF16BE ){ + return SQLITE_MISUSE_BKPT; + } + + /* Check if this call is removing or replacing an existing collation + ** sequence. If so, and there are active VMs, return busy. If there + ** are no active VMs, invalidate any pre-compiled statements. + */ + pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 0); + if( pColl && pColl->xCmp ){ + if( db->nVdbeActive ){ + sqlite3ErrorWithMsg(db, SQLITE_BUSY, + "unable to delete/modify collation sequence due to active statements"); + return SQLITE_BUSY; + } + sqlite3ExpirePreparedStatements(db, 0); + + /* If collation sequence pColl was created directly by a call to + ** sqlite3_create_collation, and not generated by synthCollSeq(), + ** then any copies made by synthCollSeq() need to be invalidated. + ** Also, collation destructor - CollSeq.xDel() - function may need + ** to be called. + */ + if( (pColl->enc & ~SQLITE_UTF16_ALIGNED)==enc2 ){ + CollSeq *aColl = sqlite3HashFind(&db->aCollSeq, zName); + int j; + for(j=0; j<3; j++){ + CollSeq *p = &aColl[j]; + if( p->enc==pColl->enc ){ + if( p->xDel ){ + p->xDel(p->pUser); + } + p->xCmp = 0; + } + } + } + } + + pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 1); + if( pColl==0 ) return SQLITE_NOMEM_BKPT; + pColl->xCmp = xCompare; + pColl->pUser = pCtx; + pColl->xDel = xDel; + pColl->enc = (u8)(enc2 | (enc & SQLITE_UTF16_ALIGNED)); + sqlite3Error(db, SQLITE_OK); + return SQLITE_OK; +} + + +/* +** This array defines hard upper bounds on limit values. The +** initializer must be kept in sync with the SQLITE_LIMIT_* +** #defines in sqlite3.h. +*/ +static const int aHardLimit[] = { + SQLITE_MAX_LENGTH, + SQLITE_MAX_SQL_LENGTH, + SQLITE_MAX_COLUMN, + SQLITE_MAX_EXPR_DEPTH, + SQLITE_MAX_COMPOUND_SELECT, + SQLITE_MAX_VDBE_OP, + SQLITE_MAX_FUNCTION_ARG, + SQLITE_MAX_ATTACHED, + SQLITE_MAX_LIKE_PATTERN_LENGTH, + SQLITE_MAX_VARIABLE_NUMBER, /* IMP: R-38091-32352 */ + SQLITE_MAX_TRIGGER_DEPTH, + SQLITE_MAX_WORKER_THREADS, +}; + +/* +** Make sure the hard limits are set to reasonable values +*/ +#if SQLITE_MAX_LENGTH<100 +# error SQLITE_MAX_LENGTH must be at least 100 +#endif +#if SQLITE_MAX_SQL_LENGTH<100 +# error SQLITE_MAX_SQL_LENGTH must be at least 100 +#endif +#if SQLITE_MAX_SQL_LENGTH>SQLITE_MAX_LENGTH +# error SQLITE_MAX_SQL_LENGTH must not be greater than SQLITE_MAX_LENGTH +#endif +#if SQLITE_MAX_COMPOUND_SELECT<2 +# error SQLITE_MAX_COMPOUND_SELECT must be at least 2 +#endif +#if SQLITE_MAX_VDBE_OP<40 +# error SQLITE_MAX_VDBE_OP must be at least 40 +#endif +#if SQLITE_MAX_FUNCTION_ARG<0 || SQLITE_MAX_FUNCTION_ARG>32767 +# error SQLITE_MAX_FUNCTION_ARG must be between 0 and 32767 +#endif +#if SQLITE_MAX_ATTACHED<0 || SQLITE_MAX_ATTACHED>125 +# error SQLITE_MAX_ATTACHED must be between 0 and 125 +#endif +#if SQLITE_MAX_LIKE_PATTERN_LENGTH<1 +# error SQLITE_MAX_LIKE_PATTERN_LENGTH must be at least 1 +#endif +#if SQLITE_MAX_COLUMN>32767 +# error SQLITE_MAX_COLUMN must not exceed 32767 +#endif +#if SQLITE_MAX_TRIGGER_DEPTH<1 +# error SQLITE_MAX_TRIGGER_DEPTH must be at least 1 +#endif +#if SQLITE_MAX_WORKER_THREADS<0 || SQLITE_MAX_WORKER_THREADS>50 +# error SQLITE_MAX_WORKER_THREADS must be between 0 and 50 +#endif + + +/* +** Change the value of a limit. Report the old value. +** If an invalid limit index is supplied, report -1. +** Make no changes but still report the old value if the +** new limit is negative. +** +** A new lower limit does not shrink existing constructs. +** It merely prevents new constructs that exceed the limit +** from forming. +*/ +SQLITE_API int sqlite3_limit(sqlite3 *db, int limitId, int newLimit){ + int oldLimit; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return -1; + } +#endif + + /* EVIDENCE-OF: R-30189-54097 For each limit category SQLITE_LIMIT_NAME + ** there is a hard upper bound set at compile-time by a C preprocessor + ** macro called SQLITE_MAX_NAME. (The "_LIMIT_" in the name is changed to + ** "_MAX_".) + */ + assert( aHardLimit[SQLITE_LIMIT_LENGTH]==SQLITE_MAX_LENGTH ); + assert( aHardLimit[SQLITE_LIMIT_SQL_LENGTH]==SQLITE_MAX_SQL_LENGTH ); + assert( aHardLimit[SQLITE_LIMIT_COLUMN]==SQLITE_MAX_COLUMN ); + assert( aHardLimit[SQLITE_LIMIT_EXPR_DEPTH]==SQLITE_MAX_EXPR_DEPTH ); + assert( aHardLimit[SQLITE_LIMIT_COMPOUND_SELECT]==SQLITE_MAX_COMPOUND_SELECT); + assert( aHardLimit[SQLITE_LIMIT_VDBE_OP]==SQLITE_MAX_VDBE_OP ); + assert( aHardLimit[SQLITE_LIMIT_FUNCTION_ARG]==SQLITE_MAX_FUNCTION_ARG ); + assert( aHardLimit[SQLITE_LIMIT_ATTACHED]==SQLITE_MAX_ATTACHED ); + assert( aHardLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]== + SQLITE_MAX_LIKE_PATTERN_LENGTH ); + assert( aHardLimit[SQLITE_LIMIT_VARIABLE_NUMBER]==SQLITE_MAX_VARIABLE_NUMBER); + assert( aHardLimit[SQLITE_LIMIT_TRIGGER_DEPTH]==SQLITE_MAX_TRIGGER_DEPTH ); + assert( aHardLimit[SQLITE_LIMIT_WORKER_THREADS]==SQLITE_MAX_WORKER_THREADS ); + assert( SQLITE_LIMIT_WORKER_THREADS==(SQLITE_N_LIMIT-1) ); + + + if( limitId<0 || limitId>=SQLITE_N_LIMIT ){ + return -1; + } + oldLimit = db->aLimit[limitId]; + if( newLimit>=0 ){ /* IMP: R-52476-28732 */ + if( newLimit>aHardLimit[limitId] ){ + newLimit = aHardLimit[limitId]; /* IMP: R-51463-25634 */ + }else if( newLimitaLimit[limitId] = newLimit; + } + return oldLimit; /* IMP: R-53341-35419 */ +} + +/* +** This function is used to parse both URIs and non-URI filenames passed by the +** user to API functions sqlite3_open() or sqlite3_open_v2(), and for database +** URIs specified as part of ATTACH statements. +** +** The first argument to this function is the name of the VFS to use (or +** a NULL to signify the default VFS) if the URI does not contain a "vfs=xxx" +** query parameter. The second argument contains the URI (or non-URI filename) +** itself. When this function is called the *pFlags variable should contain +** the default flags to open the database handle with. The value stored in +** *pFlags may be updated before returning if the URI filename contains +** "cache=xxx" or "mode=xxx" query parameters. +** +** If successful, SQLITE_OK is returned. In this case *ppVfs is set to point to +** the VFS that should be used to open the database file. *pzFile is set to +** point to a buffer containing the name of the file to open. The value +** stored in *pzFile is a database name acceptable to sqlite3_uri_parameter() +** and is in the same format as names created using sqlite3_create_filename(). +** The caller must invoke sqlite3_free_filename() (not sqlite3_free()!) on +** the value returned in *pzFile to avoid a memory leak. +** +** If an error occurs, then an SQLite error code is returned and *pzErrMsg +** may be set to point to a buffer containing an English language error +** message. It is the responsibility of the caller to eventually release +** this buffer by calling sqlite3_free(). +*/ +SQLITE_PRIVATE int sqlite3ParseUri( + const char *zDefaultVfs, /* VFS to use if no "vfs=xxx" query option */ + const char *zUri, /* Nul-terminated URI to parse */ + unsigned int *pFlags, /* IN/OUT: SQLITE_OPEN_XXX flags */ + sqlite3_vfs **ppVfs, /* OUT: VFS to use */ + char **pzFile, /* OUT: Filename component of URI */ + char **pzErrMsg /* OUT: Error message (if rc!=SQLITE_OK) */ +){ + int rc = SQLITE_OK; + unsigned int flags = *pFlags; + const char *zVfs = zDefaultVfs; + char *zFile; + char c; + int nUri = sqlite3Strlen30(zUri); + + assert( *pzErrMsg==0 ); + + if( ((flags & SQLITE_OPEN_URI) /* IMP: R-48725-32206 */ + || AtomicLoad(&sqlite3GlobalConfig.bOpenUri)) /* IMP: R-51689-46548 */ + && nUri>=5 && memcmp(zUri, "file:", 5)==0 /* IMP: R-57884-37496 */ + ){ + char *zOpt; + int eState; /* Parser state when parsing URI */ + int iIn; /* Input character index */ + int iOut = 0; /* Output character index */ + u64 nByte = nUri+8; /* Bytes of space to allocate */ + + /* Make sure the SQLITE_OPEN_URI flag is set to indicate to the VFS xOpen + ** method that there may be extra parameters following the file-name. */ + flags |= SQLITE_OPEN_URI; + + for(iIn=0; iIn=0 && octet<256 ); + if( octet==0 ){ +#ifndef SQLITE_ENABLE_URI_00_ERROR + /* This branch is taken when "%00" appears within the URI. In this + ** case we ignore all text in the remainder of the path, name or + ** value currently being parsed. So ignore the current character + ** and skip to the next "?", "=" or "&", as appropriate. */ + while( (c = zUri[iIn])!=0 && c!='#' + && (eState!=0 || c!='?') + && (eState!=1 || (c!='=' && c!='&')) + && (eState!=2 || c!='&') + ){ + iIn++; + } + continue; +#else + /* If ENABLE_URI_00_ERROR is defined, "%00" in a URI is an error. */ + *pzErrMsg = sqlite3_mprintf("unexpected %%00 in uri"); + rc = SQLITE_ERROR; + goto parse_uri_out; +#endif + } + c = octet; + }else if( eState==1 && (c=='&' || c=='=') ){ + if( zFile[iOut-1]==0 ){ + /* An empty option name. Ignore this option altogether. */ + while( zUri[iIn] && zUri[iIn]!='#' && zUri[iIn-1]!='&' ) iIn++; + continue; + } + if( c=='&' ){ + zFile[iOut++] = '\0'; + }else{ + eState = 2; + } + c = 0; + }else if( (eState==0 && c=='?') || (eState==2 && c=='&') ){ + c = 0; + eState = 1; + } + zFile[iOut++] = c; + } + if( eState==1 ) zFile[iOut++] = '\0'; + memset(zFile+iOut, 0, 4); /* end-of-options + empty journal filenames */ + + /* Check if there were any options specified that should be interpreted + ** here. Options that are interpreted here include "vfs" and those that + ** correspond to flags that may be passed to the sqlite3_open_v2() + ** method. */ + zOpt = &zFile[sqlite3Strlen30(zFile)+1]; + while( zOpt[0] ){ + int nOpt = sqlite3Strlen30(zOpt); + char *zVal = &zOpt[nOpt+1]; + int nVal = sqlite3Strlen30(zVal); + + if( nOpt==3 && memcmp("vfs", zOpt, 3)==0 ){ + zVfs = zVal; + }else{ + struct OpenMode { + const char *z; + int mode; + } *aMode = 0; + char *zModeType = 0; + int mask = 0; + int limit = 0; + + if( nOpt==5 && memcmp("cache", zOpt, 5)==0 ){ + static struct OpenMode aCacheMode[] = { + { "shared", SQLITE_OPEN_SHAREDCACHE }, + { "private", SQLITE_OPEN_PRIVATECACHE }, + { 0, 0 } + }; + + mask = SQLITE_OPEN_SHAREDCACHE|SQLITE_OPEN_PRIVATECACHE; + aMode = aCacheMode; + limit = mask; + zModeType = "cache"; + } + if( nOpt==4 && memcmp("mode", zOpt, 4)==0 ){ + static struct OpenMode aOpenMode[] = { + { "ro", SQLITE_OPEN_READONLY }, + { "rw", SQLITE_OPEN_READWRITE }, + { "rwc", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE }, + { "memory", SQLITE_OPEN_MEMORY }, + { 0, 0 } + }; + + mask = SQLITE_OPEN_READONLY | SQLITE_OPEN_READWRITE + | SQLITE_OPEN_CREATE | SQLITE_OPEN_MEMORY; + aMode = aOpenMode; + limit = mask & flags; + zModeType = "access"; + } + + if( aMode ){ + int i; + int mode = 0; + for(i=0; aMode[i].z; i++){ + const char *z = aMode[i].z; + if( nVal==sqlite3Strlen30(z) && 0==memcmp(zVal, z, nVal) ){ + mode = aMode[i].mode; + break; + } + } + if( mode==0 ){ + *pzErrMsg = sqlite3_mprintf("no such %s mode: %s", zModeType, zVal); + rc = SQLITE_ERROR; + goto parse_uri_out; + } + if( (mode & ~SQLITE_OPEN_MEMORY)>limit ){ + *pzErrMsg = sqlite3_mprintf("%s mode not allowed: %s", + zModeType, zVal); + rc = SQLITE_PERM; + goto parse_uri_out; + } + flags = (flags & ~mask) | mode; + } + } + + zOpt = &zVal[nVal+1]; + } + + }else{ + zFile = sqlite3_malloc64(nUri+8); + if( !zFile ) return SQLITE_NOMEM_BKPT; + memset(zFile, 0, 4); + zFile += 4; + if( nUri ){ + memcpy(zFile, zUri, nUri); + } + memset(zFile+nUri, 0, 4); + flags &= ~SQLITE_OPEN_URI; + } + + *ppVfs = sqlite3_vfs_find(zVfs); + if( *ppVfs==0 ){ + *pzErrMsg = sqlite3_mprintf("no such vfs: %s", zVfs); + rc = SQLITE_ERROR; + } + parse_uri_out: + if( rc!=SQLITE_OK ){ + sqlite3_free_filename(zFile); + zFile = 0; + } + *pFlags = flags; + *pzFile = zFile; + return rc; +} + +/* +** This routine does the core work of extracting URI parameters from a +** database filename for the sqlite3_uri_parameter() interface. +*/ +static const char *uriParameter(const char *zFilename, const char *zParam){ + zFilename += sqlite3Strlen30(zFilename) + 1; + while( ALWAYS(zFilename!=0) && zFilename[0] ){ + int x = strcmp(zFilename, zParam); + zFilename += sqlite3Strlen30(zFilename) + 1; + if( x==0 ) return zFilename; + zFilename += sqlite3Strlen30(zFilename) + 1; + } + return 0; +} + + + +/* +** This routine does the work of opening a database on behalf of +** sqlite3_open() and sqlite3_open16(). The database filename "zFilename" +** is UTF-8 encoded. +*/ +static int openDatabase( + const char *zFilename, /* Database filename UTF-8 encoded */ + sqlite3 **ppDb, /* OUT: Returned database handle */ + unsigned int flags, /* Operational flags */ + const char *zVfs /* Name of the VFS to use */ +){ + sqlite3 *db; /* Store allocated handle here */ + int rc; /* Return code */ + int isThreadsafe; /* True for threadsafe connections */ + char *zOpen = 0; /* Filename argument to pass to BtreeOpen() */ + char *zErrMsg = 0; /* Error message from sqlite3ParseUri() */ + int i; /* Loop counter */ + +#ifdef SQLITE_ENABLE_API_ARMOR + if( ppDb==0 ) return SQLITE_MISUSE_BKPT; +#endif + *ppDb = 0; +#ifndef SQLITE_OMIT_AUTOINIT + rc = sqlite3_initialize(); + if( rc ) return rc; +#endif + + if( sqlite3GlobalConfig.bCoreMutex==0 ){ + isThreadsafe = 0; + }else if( flags & SQLITE_OPEN_NOMUTEX ){ + isThreadsafe = 0; + }else if( flags & SQLITE_OPEN_FULLMUTEX ){ + isThreadsafe = 1; + }else{ + isThreadsafe = sqlite3GlobalConfig.bFullMutex; + } + + if( flags & SQLITE_OPEN_PRIVATECACHE ){ + flags &= ~SQLITE_OPEN_SHAREDCACHE; + }else if( sqlite3GlobalConfig.sharedCacheEnabled ){ + flags |= SQLITE_OPEN_SHAREDCACHE; + } + + /* Remove harmful bits from the flags parameter + ** + ** The SQLITE_OPEN_NOMUTEX and SQLITE_OPEN_FULLMUTEX flags were + ** dealt with in the previous code block. Besides these, the only + ** valid input flags for sqlite3_open_v2() are SQLITE_OPEN_READONLY, + ** SQLITE_OPEN_READWRITE, SQLITE_OPEN_CREATE, SQLITE_OPEN_SHAREDCACHE, + ** SQLITE_OPEN_PRIVATECACHE, SQLITE_OPEN_EXRESCODE, and some reserved + ** bits. Silently mask off all other flags. + */ + flags &= ~( SQLITE_OPEN_DELETEONCLOSE | + SQLITE_OPEN_EXCLUSIVE | + SQLITE_OPEN_MAIN_DB | + SQLITE_OPEN_TEMP_DB | + SQLITE_OPEN_TRANSIENT_DB | + SQLITE_OPEN_MAIN_JOURNAL | + SQLITE_OPEN_TEMP_JOURNAL | + SQLITE_OPEN_SUBJOURNAL | + SQLITE_OPEN_SUPER_JOURNAL | + SQLITE_OPEN_NOMUTEX | + SQLITE_OPEN_FULLMUTEX | + SQLITE_OPEN_WAL + ); + + /* Allocate the sqlite data structure */ + db = sqlite3MallocZero( sizeof(sqlite3) ); + if( db==0 ) goto opendb_out; + if( isThreadsafe +#ifdef SQLITE_ENABLE_MULTITHREADED_CHECKS + || sqlite3GlobalConfig.bCoreMutex +#endif + ){ + db->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE); + if( db->mutex==0 ){ + sqlite3_free(db); + db = 0; + goto opendb_out; + } + if( isThreadsafe==0 ){ + sqlite3MutexWarnOnContention(db->mutex); + } + } + sqlite3_mutex_enter(db->mutex); + db->errMask = (flags & SQLITE_OPEN_EXRESCODE)!=0 ? 0xffffffff : 0xff; + db->nDb = 2; + db->eOpenState = SQLITE_STATE_BUSY; + db->aDb = db->aDbStatic; + db->lookaside.bDisable = 1; + db->lookaside.sz = 0; + + assert( sizeof(db->aLimit)==sizeof(aHardLimit) ); + memcpy(db->aLimit, aHardLimit, sizeof(db->aLimit)); + db->aLimit[SQLITE_LIMIT_WORKER_THREADS] = SQLITE_DEFAULT_WORKER_THREADS; + db->autoCommit = 1; + db->nextAutovac = -1; + db->szMmap = sqlite3GlobalConfig.szMmap; + db->nextPagesize = 0; + db->init.azInit = sqlite3StdType; /* Any array of string ptrs will do */ +#ifdef SQLITE_ENABLE_SORTER_MMAP + /* Beginning with version 3.37.0, using the VFS xFetch() API to memory-map + ** the temporary files used to do external sorts (see code in vdbesort.c) + ** is disabled. It can still be used either by defining + ** SQLITE_ENABLE_SORTER_MMAP at compile time or by using the + ** SQLITE_TESTCTRL_SORTER_MMAP test-control at runtime. */ + db->nMaxSorterMmap = 0x7FFFFFFF; +#endif + db->flags |= SQLITE_ShortColNames + | SQLITE_EnableTrigger + | SQLITE_EnableView + | SQLITE_CacheSpill + | SQLITE_AttachCreate + | SQLITE_AttachWrite + | SQLITE_Comments +#if !defined(SQLITE_TRUSTED_SCHEMA) || SQLITE_TRUSTED_SCHEMA+0!=0 + | SQLITE_TrustedSchema +#endif +/* The SQLITE_DQS compile-time option determines the default settings +** for SQLITE_DBCONFIG_DQS_DDL and SQLITE_DBCONFIG_DQS_DML. +** +** SQLITE_DQS SQLITE_DBCONFIG_DQS_DDL SQLITE_DBCONFIG_DQS_DML +** ---------- ----------------------- ----------------------- +** undefined on on +** 3 on on +** 2 on off +** 1 off on +** 0 off off +** +** Legacy behavior is 3 (double-quoted string literals are allowed anywhere) +** and so that is the default. But developers are encouraged to use +** -DSQLITE_DQS=0 (best) or -DSQLITE_DQS=1 (second choice) if possible. +*/ +#if !defined(SQLITE_DQS) +# define SQLITE_DQS 3 +#endif +#if (SQLITE_DQS&1)==1 + | SQLITE_DqsDML +#endif +#if (SQLITE_DQS&2)==2 + | SQLITE_DqsDDL +#endif + +#if !defined(SQLITE_DEFAULT_AUTOMATIC_INDEX) || SQLITE_DEFAULT_AUTOMATIC_INDEX + | SQLITE_AutoIndex +#endif +#if SQLITE_DEFAULT_CKPTFULLFSYNC + | SQLITE_CkptFullFSync +#endif +#if SQLITE_DEFAULT_FILE_FORMAT<4 + | SQLITE_LegacyFileFmt +#endif +#ifdef SQLITE_ENABLE_LOAD_EXTENSION + | SQLITE_LoadExtension +#endif +#if SQLITE_DEFAULT_RECURSIVE_TRIGGERS + | SQLITE_RecTriggers +#endif +#if defined(SQLITE_DEFAULT_FOREIGN_KEYS) && SQLITE_DEFAULT_FOREIGN_KEYS + | SQLITE_ForeignKeys +#endif +#if defined(SQLITE_REVERSE_UNORDERED_SELECTS) + | SQLITE_ReverseOrder +#endif +#if defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK) + | SQLITE_CellSizeCk +#endif +#if defined(SQLITE_ENABLE_FTS3_TOKENIZER) + | SQLITE_Fts3Tokenizer +#endif +#if defined(SQLITE_ENABLE_QPSG) + | SQLITE_EnableQPSG +#endif +#if defined(SQLITE_DEFAULT_DEFENSIVE) + | SQLITE_Defensive +#endif +#if defined(SQLITE_DEFAULT_LEGACY_ALTER_TABLE) + | SQLITE_LegacyAlter +#endif +#if defined(SQLITE_ENABLE_STMT_SCANSTATUS) + | SQLITE_StmtScanStatus +#endif + ; + sqlite3HashInit(&db->aCollSeq); +#ifndef SQLITE_OMIT_VIRTUALTABLE + sqlite3HashInit(&db->aModule); +#endif + + /* Add the default collation sequence BINARY. BINARY works for both UTF-8 + ** and UTF-16, so add a version for each to avoid any unnecessary + ** conversions. The only error that can occur here is a malloc() failure. + ** + ** EVIDENCE-OF: R-52786-44878 SQLite defines three built-in collating + ** functions: + */ + createCollation(db, sqlite3StrBINARY, SQLITE_UTF8, 0, binCollFunc, 0); + createCollation(db, sqlite3StrBINARY, SQLITE_UTF16BE, 0, binCollFunc, 0); + createCollation(db, sqlite3StrBINARY, SQLITE_UTF16LE, 0, binCollFunc, 0); + createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0); + createCollation(db, "RTRIM", SQLITE_UTF8, 0, rtrimCollFunc, 0); + if( db->mallocFailed ){ + goto opendb_out; + } + +#if SQLITE_OS_UNIX && defined(SQLITE_OS_KV_OPTIONAL) + /* Process magic filenames ":localStorage:" and ":sessionStorage:" */ + if( zFilename && zFilename[0]==':' ){ + if( strcmp(zFilename, ":localStorage:")==0 ){ + zFilename = "file:local?vfs=kvvfs"; + flags |= SQLITE_OPEN_URI; + }else if( strcmp(zFilename, ":sessionStorage:")==0 ){ + zFilename = "file:session?vfs=kvvfs"; + flags |= SQLITE_OPEN_URI; + } + } +#endif /* SQLITE_OS_UNIX && defined(SQLITE_OS_KV_OPTIONAL) */ + + /* Parse the filename/URI argument + ** + ** Only allow sensible combinations of bits in the flags argument. + ** Throw an error if any non-sense combination is used. If we + ** do not block illegal combinations here, it could trigger + ** assert() statements in deeper layers. Sensible combinations + ** are: + ** + ** 1: SQLITE_OPEN_READONLY + ** 2: SQLITE_OPEN_READWRITE + ** 6: SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE + */ + db->openFlags = flags; + assert( SQLITE_OPEN_READONLY == 0x01 ); + assert( SQLITE_OPEN_READWRITE == 0x02 ); + assert( SQLITE_OPEN_CREATE == 0x04 ); + testcase( (1<<(flags&7))==0x02 ); /* READONLY */ + testcase( (1<<(flags&7))==0x04 ); /* READWRITE */ + testcase( (1<<(flags&7))==0x40 ); /* READWRITE | CREATE */ + if( ((1<<(flags&7)) & 0x46)==0 ){ + rc = SQLITE_MISUSE_BKPT; /* IMP: R-18321-05872 */ + }else{ + if( zFilename==0 ) zFilename = ":memory:"; + rc = sqlite3ParseUri(zVfs, zFilename, &flags, &db->pVfs, &zOpen, &zErrMsg); + } + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_NOMEM ) sqlite3OomFault(db); + sqlite3ErrorWithMsg(db, rc, zErrMsg ? "%s" : 0, zErrMsg); + sqlite3_free(zErrMsg); + goto opendb_out; + } + assert( db->pVfs!=0 ); +#if SQLITE_OS_KV || defined(SQLITE_OS_KV_OPTIONAL) + if( sqlite3_stricmp(db->pVfs->zName, "kvvfs")==0 ){ + db->temp_store = 2; + } +#endif + + /* Open the backend database driver */ + rc = sqlite3BtreeOpen(db->pVfs, zOpen, db, &db->aDb[0].pBt, 0, + flags | SQLITE_OPEN_MAIN_DB); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_IOERR_NOMEM ){ + rc = SQLITE_NOMEM_BKPT; + } + sqlite3Error(db, rc); + goto opendb_out; + } + sqlite3BtreeEnter(db->aDb[0].pBt); + db->aDb[0].pSchema = sqlite3SchemaGet(db, db->aDb[0].pBt); + if( !db->mallocFailed ){ + sqlite3SetTextEncoding(db, SCHEMA_ENC(db)); + } + sqlite3BtreeLeave(db->aDb[0].pBt); + db->aDb[1].pSchema = sqlite3SchemaGet(db, 0); + + /* The default safety_level for the main database is FULL; for the temp + ** database it is OFF. This matches the pager layer defaults. + */ + db->aDb[0].zDbSName = "main"; + db->aDb[0].safety_level = SQLITE_DEFAULT_SYNCHRONOUS+1; + db->aDb[1].zDbSName = "temp"; + db->aDb[1].safety_level = PAGER_SYNCHRONOUS_OFF; + + db->eOpenState = SQLITE_STATE_OPEN; + if( db->mallocFailed ){ + goto opendb_out; + } + + /* Register all built-in functions, but do not attempt to read the + ** database schema yet. This is delayed until the first time the database + ** is accessed. + */ + sqlite3Error(db, SQLITE_OK); + sqlite3RegisterPerConnectionBuiltinFunctions(db); + rc = sqlite3_errcode(db); + + + /* Load compiled-in extensions */ + for(i=0; rc==SQLITE_OK && imDbFlags |= DBFLAG_InternalFunc; +#endif + + /* -DSQLITE_DEFAULT_LOCKING_MODE=1 makes EXCLUSIVE the default locking + ** mode. -DSQLITE_DEFAULT_LOCKING_MODE=0 make NORMAL the default locking + ** mode. Doing nothing at all also makes NORMAL the default. + */ +#ifdef SQLITE_DEFAULT_LOCKING_MODE + db->dfltLockMode = SQLITE_DEFAULT_LOCKING_MODE; + sqlite3PagerLockingMode(sqlite3BtreePager(db->aDb[0].pBt), + SQLITE_DEFAULT_LOCKING_MODE); +#endif + + if( rc ) sqlite3Error(db, rc); + + /* Enable the lookaside-malloc subsystem */ + setupLookaside(db, 0, sqlite3GlobalConfig.szLookaside, + sqlite3GlobalConfig.nLookaside); + + sqlite3_wal_autocheckpoint(db, SQLITE_DEFAULT_WAL_AUTOCHECKPOINT); + +opendb_out: + if( db ){ + assert( db->mutex!=0 || isThreadsafe==0 + || sqlite3GlobalConfig.bFullMutex==0 ); + sqlite3_mutex_leave(db->mutex); + } + rc = sqlite3_errcode(db); + assert( db!=0 || (rc&0xff)==SQLITE_NOMEM ); + if( (rc&0xff)==SQLITE_NOMEM ){ + sqlite3_close(db); + db = 0; + }else if( rc!=SQLITE_OK ){ + db->eOpenState = SQLITE_STATE_SICK; + } + *ppDb = db; +#ifdef SQLITE_ENABLE_SQLLOG + if( sqlite3GlobalConfig.xSqllog ){ + /* Opening a db handle. Fourth parameter is passed 0. */ + void *pArg = sqlite3GlobalConfig.pSqllogArg; + sqlite3GlobalConfig.xSqllog(pArg, db, zFilename, 0); + } +#endif + sqlite3_free_filename(zOpen); + return rc; +} + + +/* +** Open a new database handle. +*/ +SQLITE_API int sqlite3_open( + const char *zFilename, + sqlite3 **ppDb +){ + return openDatabase(zFilename, ppDb, + SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0); +} +SQLITE_API int sqlite3_open_v2( + const char *filename, /* Database filename (UTF-8) */ + sqlite3 **ppDb, /* OUT: SQLite db handle */ + int flags, /* Flags */ + const char *zVfs /* Name of VFS module to use */ +){ + return openDatabase(filename, ppDb, (unsigned int)flags, zVfs); +} + +#ifndef SQLITE_OMIT_UTF16 +/* +** Open a new database handle. +*/ +SQLITE_API int sqlite3_open16( + const void *zFilename, + sqlite3 **ppDb +){ + char const *zFilename8; /* zFilename encoded in UTF-8 instead of UTF-16 */ + sqlite3_value *pVal; + int rc; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( ppDb==0 ) return SQLITE_MISUSE_BKPT; +#endif + *ppDb = 0; +#ifndef SQLITE_OMIT_AUTOINIT + rc = sqlite3_initialize(); + if( rc ) return rc; +#endif + if( zFilename==0 ) zFilename = "\000\000"; + pVal = sqlite3ValueNew(0); + sqlite3ValueSetStr(pVal, -1, zFilename, SQLITE_UTF16NATIVE, SQLITE_STATIC); + zFilename8 = sqlite3ValueText(pVal, SQLITE_UTF8); + if( zFilename8 ){ + rc = openDatabase(zFilename8, ppDb, + SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0); + assert( *ppDb || rc==SQLITE_NOMEM ); + if( rc==SQLITE_OK && !DbHasProperty(*ppDb, 0, DB_SchemaLoaded) ){ + SCHEMA_ENC(*ppDb) = ENC(*ppDb) = SQLITE_UTF16NATIVE; + } + }else{ + rc = SQLITE_NOMEM_BKPT; + } + sqlite3ValueFree(pVal); + + return rc & 0xff; +} +#endif /* SQLITE_OMIT_UTF16 */ + +/* +** Register a new collation sequence with the database handle db. +*/ +SQLITE_API int sqlite3_create_collation( + sqlite3* db, + const char *zName, + int enc, + void* pCtx, + int(*xCompare)(void*,int,const void*,int,const void*) +){ + return sqlite3_create_collation_v2(db, zName, enc, pCtx, xCompare, 0); +} + +/* +** Register a new collation sequence with the database handle db. +*/ +SQLITE_API int sqlite3_create_collation_v2( + sqlite3* db, + const char *zName, + int enc, + void* pCtx, + int(*xCompare)(void*,int,const void*,int,const void*), + void(*xDel)(void*) +){ + int rc; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(db->mutex); + assert( !db->mallocFailed ); + rc = createCollation(db, zName, (u8)enc, pCtx, xCompare, xDel); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +#ifndef SQLITE_OMIT_UTF16 +/* +** Register a new collation sequence with the database handle db. +*/ +SQLITE_API int sqlite3_create_collation16( + sqlite3* db, + const void *zName, + int enc, + void* pCtx, + int(*xCompare)(void*,int,const void*,int,const void*) +){ + int rc = SQLITE_OK; + char *zName8; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || zName==0 ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(db->mutex); + assert( !db->mallocFailed ); + zName8 = sqlite3Utf16to8(db, zName, -1, SQLITE_UTF16NATIVE); + if( zName8 ){ + rc = createCollation(db, zName8, (u8)enc, pCtx, xCompare, 0); + sqlite3DbFree(db, zName8); + } + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} +#endif /* SQLITE_OMIT_UTF16 */ + +/* +** Register a collation sequence factory callback with the database handle +** db. Replace any previously installed collation sequence factory. +*/ +SQLITE_API int sqlite3_collation_needed( + sqlite3 *db, + void *pCollNeededArg, + void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*) +){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(db->mutex); + db->xCollNeeded = xCollNeeded; + db->xCollNeeded16 = 0; + db->pCollNeededArg = pCollNeededArg; + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; +} + +#ifndef SQLITE_OMIT_UTF16 +/* +** Register a collation sequence factory callback with the database handle +** db. Replace any previously installed collation sequence factory. +*/ +SQLITE_API int sqlite3_collation_needed16( + sqlite3 *db, + void *pCollNeededArg, + void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*) +){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(db->mutex); + db->xCollNeeded = 0; + db->xCollNeeded16 = xCollNeeded16; + db->pCollNeededArg = pCollNeededArg; + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; +} +#endif /* SQLITE_OMIT_UTF16 */ + +/* +** Find existing client data. +*/ +SQLITE_API void *sqlite3_get_clientdata(sqlite3 *db, const char *zName){ + DbClientData *p; + sqlite3_mutex_enter(db->mutex); + for(p=db->pDbData; p; p=p->pNext){ + if( strcmp(p->zName, zName)==0 ){ + void *pResult = p->pData; + sqlite3_mutex_leave(db->mutex); + return pResult; + } + } + sqlite3_mutex_leave(db->mutex); + return 0; +} + +/* +** Add new client data to a database connection. +*/ +SQLITE_API int sqlite3_set_clientdata( + sqlite3 *db, /* Attach client data to this connection */ + const char *zName, /* Name of the client data */ + void *pData, /* The client data itself */ + void (*xDestructor)(void*) /* Destructor */ +){ + DbClientData *p, **pp; + sqlite3_mutex_enter(db->mutex); + pp = &db->pDbData; + for(p=db->pDbData; p && strcmp(p->zName,zName); p=p->pNext){ + pp = &p->pNext; + } + if( p ){ + assert( p->pData!=0 ); + if( p->xDestructor ) p->xDestructor(p->pData); + if( pData==0 ){ + *pp = p->pNext; + sqlite3_free(p); + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; + } + }else if( pData==0 ){ + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; + }else{ + size_t n = strlen(zName); + p = sqlite3_malloc64( SZ_DBCLIENTDATA(n+1) ); + if( p==0 ){ + if( xDestructor ) xDestructor(pData); + sqlite3_mutex_leave(db->mutex); + return SQLITE_NOMEM; + } + memcpy(p->zName, zName, n+1); + p->pNext = db->pDbData; + db->pDbData = p; + } + p->pData = pData; + p->xDestructor = xDestructor; + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; +} + + +#ifndef SQLITE_OMIT_DEPRECATED +/* +** This function is now an anachronism. It used to be used to recover from a +** malloc() failure, but SQLite now does this automatically. +*/ +SQLITE_API int sqlite3_global_recover(void){ + return SQLITE_OK; +} +#endif + +/* +** Test to see whether or not the database connection is in autocommit +** mode. Return TRUE if it is and FALSE if not. Autocommit mode is on +** by default. Autocommit is disabled by a BEGIN statement and reenabled +** by the next COMMIT or ROLLBACK. +*/ +SQLITE_API int sqlite3_get_autocommit(sqlite3 *db){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + return db->autoCommit; +} + +/* +** The following routines are substitutes for constants SQLITE_CORRUPT, +** SQLITE_MISUSE, SQLITE_CANTOPEN, SQLITE_NOMEM and possibly other error +** constants. They serve two purposes: +** +** 1. Serve as a convenient place to set a breakpoint in a debugger +** to detect when version error conditions occurs. +** +** 2. Invoke sqlite3_log() to provide the source code location where +** a low-level error is first detected. +*/ +SQLITE_PRIVATE int sqlite3ReportError(int iErr, int lineno, const char *zType){ + sqlite3_log(iErr, "%s at line %d of [%.10s]", + zType, lineno, 20+sqlite3_sourceid()); + return iErr; +} +SQLITE_PRIVATE int sqlite3CorruptError(int lineno){ + testcase( sqlite3GlobalConfig.xLog!=0 ); + return sqlite3ReportError(SQLITE_CORRUPT, lineno, "database corruption"); +} +SQLITE_PRIVATE int sqlite3MisuseError(int lineno){ + testcase( sqlite3GlobalConfig.xLog!=0 ); + return sqlite3ReportError(SQLITE_MISUSE, lineno, "misuse"); +} +SQLITE_PRIVATE int sqlite3CantopenError(int lineno){ + testcase( sqlite3GlobalConfig.xLog!=0 ); + return sqlite3ReportError(SQLITE_CANTOPEN, lineno, "cannot open file"); +} +#if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_CORRUPT_PGNO) +SQLITE_PRIVATE int sqlite3CorruptPgnoError(int lineno, Pgno pgno){ + char zMsg[100]; + sqlite3_snprintf(sizeof(zMsg), zMsg, "database corruption page %d", pgno); + testcase( sqlite3GlobalConfig.xLog!=0 ); + return sqlite3ReportError(SQLITE_CORRUPT, lineno, zMsg); +} +#endif +#ifdef SQLITE_DEBUG +SQLITE_PRIVATE int sqlite3NomemError(int lineno){ + testcase( sqlite3GlobalConfig.xLog!=0 ); + return sqlite3ReportError(SQLITE_NOMEM, lineno, "OOM"); +} +SQLITE_PRIVATE int sqlite3IoerrnomemError(int lineno){ + testcase( sqlite3GlobalConfig.xLog!=0 ); + return sqlite3ReportError(SQLITE_IOERR_NOMEM, lineno, "I/O OOM error"); +} +#endif + +#ifndef SQLITE_OMIT_DEPRECATED +/* +** This is a convenience routine that makes sure that all thread-specific +** data for this thread has been deallocated. +** +** SQLite no longer uses thread-specific data so this routine is now a +** no-op. It is retained for historical compatibility. +*/ +SQLITE_API void sqlite3_thread_cleanup(void){ +} +#endif + +/* +** Return meta information about a specific column of a database table. +** See comment in sqlite3.h (sqlite.h.in) for details. +*/ +SQLITE_API int sqlite3_table_column_metadata( + sqlite3 *db, /* Connection handle */ + const char *zDbName, /* Database name or NULL */ + const char *zTableName, /* Table name */ + const char *zColumnName, /* Column name */ + char const **pzDataType, /* OUTPUT: Declared data type */ + char const **pzCollSeq, /* OUTPUT: Collation sequence name */ + int *pNotNull, /* OUTPUT: True if NOT NULL constraint exists */ + int *pPrimaryKey, /* OUTPUT: True if column part of PK */ + int *pAutoinc /* OUTPUT: True if column is auto-increment */ +){ + int rc; + char *zErrMsg = 0; + Table *pTab = 0; + Column *pCol = 0; + int iCol = 0; + char const *zDataType = 0; + char const *zCollSeq = 0; + int notnull = 0; + int primarykey = 0; + int autoinc = 0; + + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) || zTableName==0 ){ + return SQLITE_MISUSE_BKPT; + } +#endif + + /* Ensure the database schema has been loaded */ + sqlite3_mutex_enter(db->mutex); + sqlite3BtreeEnterAll(db); + rc = sqlite3Init(db, &zErrMsg); + if( SQLITE_OK!=rc ){ + goto error_out; + } + + /* Locate the table in question */ + pTab = sqlite3FindTable(db, zTableName, zDbName); + if( !pTab || IsView(pTab) ){ + pTab = 0; + goto error_out; + } + + /* Find the column for which info is requested */ + if( zColumnName==0 ){ + /* Query for existence of table only */ + }else{ + iCol = sqlite3ColumnIndex(pTab, zColumnName); + if( iCol>=0 ){ + pCol = &pTab->aCol[iCol]; + }else{ + if( HasRowid(pTab) && sqlite3IsRowid(zColumnName) ){ + iCol = pTab->iPKey; + pCol = iCol>=0 ? &pTab->aCol[iCol] : 0; + }else{ + pTab = 0; + goto error_out; + } + } + } + + /* The following block stores the meta information that will be returned + ** to the caller in local variables zDataType, zCollSeq, notnull, primarykey + ** and autoinc. At this point there are two possibilities: + ** + ** 1. The specified column name was rowid", "oid" or "_rowid_" + ** and there is no explicitly declared IPK column. + ** + ** 2. The table is not a view and the column name identified an + ** explicitly declared column. Copy meta information from *pCol. + */ + if( pCol ){ + zDataType = sqlite3ColumnType(pCol,0); + zCollSeq = sqlite3ColumnColl(pCol); + notnull = pCol->notNull!=0; + primarykey = (pCol->colFlags & COLFLAG_PRIMKEY)!=0; + autoinc = pTab->iPKey==iCol && (pTab->tabFlags & TF_Autoincrement)!=0; + }else{ + zDataType = "INTEGER"; + primarykey = 1; + } + if( !zCollSeq ){ + zCollSeq = sqlite3StrBINARY; + } + +error_out: + sqlite3BtreeLeaveAll(db); + + /* Whether the function call succeeded or failed, set the output parameters + ** to whatever their local counterparts contain. If an error did occur, + ** this has the effect of zeroing all output parameters. + */ + if( pzDataType ) *pzDataType = zDataType; + if( pzCollSeq ) *pzCollSeq = zCollSeq; + if( pNotNull ) *pNotNull = notnull; + if( pPrimaryKey ) *pPrimaryKey = primarykey; + if( pAutoinc ) *pAutoinc = autoinc; + + if( SQLITE_OK==rc && !pTab ){ + sqlite3DbFree(db, zErrMsg); + zErrMsg = sqlite3MPrintf(db, "no such table column: %s.%s", zTableName, + zColumnName); + rc = SQLITE_ERROR; + } + sqlite3ErrorWithMsg(db, rc, (zErrMsg?"%s":0), zErrMsg); + sqlite3DbFree(db, zErrMsg); + rc = sqlite3ApiExit(db, rc); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/* +** Sleep for a little while. Return the amount of time slept. +*/ +SQLITE_API int sqlite3_sleep(int ms){ + sqlite3_vfs *pVfs; + int rc; + pVfs = sqlite3_vfs_find(0); + if( pVfs==0 ) return 0; + + /* This function works in milliseconds, but the underlying OsSleep() + ** API uses microseconds. Hence the 1000's. + */ + rc = (sqlite3OsSleep(pVfs, ms<0 ? 0 : 1000*ms)/1000); + return rc; +} + +/* +** Enable or disable the extended result codes. +*/ +SQLITE_API int sqlite3_extended_result_codes(sqlite3 *db, int onoff){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(db->mutex); + db->errMask = onoff ? 0xffffffff : 0xff; + sqlite3_mutex_leave(db->mutex); + return SQLITE_OK; +} + +/* +** Invoke the xFileControl method on a particular database. +*/ +SQLITE_API int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, void *pArg){ + int rc = SQLITE_ERROR; + Btree *pBtree; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(db->mutex); + pBtree = sqlite3DbNameToBtree(db, zDbName); + if( pBtree ){ + Pager *pPager; + sqlite3_file *fd; + sqlite3BtreeEnter(pBtree); + pPager = sqlite3BtreePager(pBtree); + assert( pPager!=0 ); + fd = sqlite3PagerFile(pPager); + assert( fd!=0 ); + if( op==SQLITE_FCNTL_FILE_POINTER ){ + *(sqlite3_file**)pArg = fd; + rc = SQLITE_OK; + }else if( op==SQLITE_FCNTL_VFS_POINTER ){ + *(sqlite3_vfs**)pArg = sqlite3PagerVfs(pPager); + rc = SQLITE_OK; + }else if( op==SQLITE_FCNTL_JOURNAL_POINTER ){ + *(sqlite3_file**)pArg = sqlite3PagerJrnlFile(pPager); + rc = SQLITE_OK; + }else if( op==SQLITE_FCNTL_DATA_VERSION ){ + *(unsigned int*)pArg = sqlite3PagerDataVersion(pPager); + rc = SQLITE_OK; + }else if( op==SQLITE_FCNTL_RESERVE_BYTES ){ + int iNew = *(int*)pArg; + *(int*)pArg = sqlite3BtreeGetRequestedReserve(pBtree); + if( iNew>=0 && iNew<=255 ){ + sqlite3BtreeSetPageSize(pBtree, 0, iNew, 0); + } + rc = SQLITE_OK; + }else if( op==SQLITE_FCNTL_RESET_CACHE ){ + sqlite3BtreeClearCache(pBtree); + rc = SQLITE_OK; + }else{ + int nSave = db->busyHandler.nBusy; + rc = sqlite3OsFileControl(fd, op, pArg); + db->busyHandler.nBusy = nSave; + } + sqlite3BtreeLeave(pBtree); + } + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/* +** Interface to the testing logic. +*/ +SQLITE_API int sqlite3_test_control(int op, ...){ + int rc = 0; +#ifdef SQLITE_UNTESTABLE + UNUSED_PARAMETER(op); +#else + va_list ap; + va_start(ap, op); + switch( op ){ + + /* + ** Save the current state of the PRNG. + */ + case SQLITE_TESTCTRL_PRNG_SAVE: { + sqlite3PrngSaveState(); + break; + } + + /* + ** Restore the state of the PRNG to the last state saved using + ** PRNG_SAVE. If PRNG_SAVE has never before been called, then + ** this verb acts like PRNG_RESET. + */ + case SQLITE_TESTCTRL_PRNG_RESTORE: { + sqlite3PrngRestoreState(); + break; + } + + /* sqlite3_test_control(SQLITE_TESTCTRL_PRNG_SEED, int x, sqlite3 *db); + ** + ** Control the seed for the pseudo-random number generator (PRNG) that + ** is built into SQLite. Cases: + ** + ** x!=0 && db!=0 Seed the PRNG to the current value of the + ** schema cookie in the main database for db, or + ** x if the schema cookie is zero. This case + ** is convenient to use with database fuzzers + ** as it allows the fuzzer some control over the + ** the PRNG seed. + ** + ** x!=0 && db==0 Seed the PRNG to the value of x. + ** + ** x==0 && db==0 Revert to default behavior of using the + ** xRandomness method on the primary VFS. + ** + ** This test-control also resets the PRNG so that the new seed will + ** be used for the next call to sqlite3_randomness(). + */ +#ifndef SQLITE_OMIT_WSD + case SQLITE_TESTCTRL_PRNG_SEED: { + int x = va_arg(ap, int); + int y; + sqlite3 *db = va_arg(ap, sqlite3*); + assert( db==0 || db->aDb[0].pSchema!=0 ); + if( db && (y = db->aDb[0].pSchema->schema_cookie)!=0 ){ x = y; } + sqlite3Config.iPrngSeed = x; + sqlite3_randomness(0,0); + break; + } +#endif + + /* sqlite3_test_control(SQLITE_TESTCTRL_FK_NO_ACTION, sqlite3 *db, int b); + ** + ** If b is true, then activate the SQLITE_FkNoAction setting. If b is + ** false then clear that setting. If the SQLITE_FkNoAction setting is + ** enabled, all foreign key ON DELETE and ON UPDATE actions behave as if + ** they were NO ACTION, regardless of how they are defined. + ** + ** NB: One must usually run "PRAGMA writable_schema=RESET" after + ** using this test-control, before it will take full effect. failing + ** to reset the schema can result in some unexpected behavior. + */ + case SQLITE_TESTCTRL_FK_NO_ACTION: { + sqlite3 *db = va_arg(ap, sqlite3*); + int b = va_arg(ap, int); + if( b ){ + db->flags |= SQLITE_FkNoAction; + }else{ + db->flags &= ~SQLITE_FkNoAction; + } + break; + } + + /* + ** sqlite3_test_control(BITVEC_TEST, size, program) + ** + ** Run a test against a Bitvec object of size. The program argument + ** is an array of integers that defines the test. Return -1 on a + ** memory allocation error, 0 on success, or non-zero for an error. + ** See the sqlite3BitvecBuiltinTest() for additional information. + */ + case SQLITE_TESTCTRL_BITVEC_TEST: { + int sz = va_arg(ap, int); + int *aProg = va_arg(ap, int*); + rc = sqlite3BitvecBuiltinTest(sz, aProg); + break; + } + + /* + ** sqlite3_test_control(FAULT_INSTALL, xCallback) + ** + ** Arrange to invoke xCallback() whenever sqlite3FaultSim() is called, + ** if xCallback is not NULL. + ** + ** As a test of the fault simulator mechanism itself, sqlite3FaultSim(0) + ** is called immediately after installing the new callback and the return + ** value from sqlite3FaultSim(0) becomes the return from + ** sqlite3_test_control(). + */ + case SQLITE_TESTCTRL_FAULT_INSTALL: { + /* A bug in MSVC prevents it from understanding pointers to functions + ** types in the second argument to va_arg(). Work around the problem + ** using a typedef. + ** http://support.microsoft.com/kb/47961 <-- dead hyperlink + ** Search at http://web.archive.org/ to find the 2015-03-16 archive + ** of the link above to see the original text. + ** sqlite3GlobalConfig.xTestCallback = va_arg(ap, int(*)(int)); + */ + typedef int(*sqlite3FaultFuncType)(int); + sqlite3GlobalConfig.xTestCallback = va_arg(ap, sqlite3FaultFuncType); + rc = sqlite3FaultSim(0); + break; + } + + /* + ** sqlite3_test_control(BENIGN_MALLOC_HOOKS, xBegin, xEnd) + ** + ** Register hooks to call to indicate which malloc() failures + ** are benign. + */ + case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: { + typedef void (*void_function)(void); + void_function xBenignBegin; + void_function xBenignEnd; + xBenignBegin = va_arg(ap, void_function); + xBenignEnd = va_arg(ap, void_function); + sqlite3BenignMallocHooks(xBenignBegin, xBenignEnd); + break; + } + + /* + ** sqlite3_test_control(SQLITE_TESTCTRL_PENDING_BYTE, unsigned int X) + ** + ** Set the PENDING byte to the value in the argument, if X>0. + ** Make no changes if X==0. Return the value of the pending byte + ** as it existing before this routine was called. + ** + ** IMPORTANT: Changing the PENDING byte from 0x40000000 results in + ** an incompatible database file format. Changing the PENDING byte + ** while any database connection is open results in undefined and + ** deleterious behavior. + */ + case SQLITE_TESTCTRL_PENDING_BYTE: { + rc = PENDING_BYTE; +#ifndef SQLITE_OMIT_WSD + { + unsigned int newVal = va_arg(ap, unsigned int); + if( newVal ) sqlite3PendingByte = newVal; + } +#endif + break; + } + + /* + ** sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, int X) + ** + ** This action provides a run-time test to see whether or not + ** assert() was enabled at compile-time. If X is true and assert() + ** is enabled, then the return value is true. If X is true and + ** assert() is disabled, then the return value is zero. If X is + ** false and assert() is enabled, then the assertion fires and the + ** process aborts. If X is false and assert() is disabled, then the + ** return value is zero. + */ + case SQLITE_TESTCTRL_ASSERT: { + volatile int x = 0; + assert( /*side-effects-ok*/ (x = va_arg(ap,int))!=0 ); + rc = x; +#if defined(SQLITE_DEBUG) + /* Invoke these debugging routines so that the compiler does not + ** issue "defined but not used" warnings. */ + if( x==9999 ){ + sqlite3ShowExpr(0); + sqlite3ShowExprList(0); + sqlite3ShowIdList(0); + sqlite3ShowSrcList(0); + sqlite3ShowWith(0); + sqlite3ShowUpsert(0); +#ifndef SQLITE_OMIT_TRIGGER + sqlite3ShowTriggerStep(0); + sqlite3ShowTriggerStepList(0); + sqlite3ShowTrigger(0); + sqlite3ShowTriggerList(0); +#endif +#ifndef SQLITE_OMIT_WINDOWFUNC + sqlite3ShowWindow(0); + sqlite3ShowWinFunc(0); +#endif + sqlite3ShowSelect(0); + } +#endif + break; + } + + + /* + ** sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, int X) + ** + ** This action provides a run-time test to see how the ALWAYS and + ** NEVER macros were defined at compile-time. + ** + ** The return value is ALWAYS(X) if X is true, or 0 if X is false. + ** + ** The recommended test is X==2. If the return value is 2, that means + ** ALWAYS() and NEVER() are both no-op pass-through macros, which is the + ** default setting. If the return value is 1, then ALWAYS() is either + ** hard-coded to true or else it asserts if its argument is false. + ** The first behavior (hard-coded to true) is the case if + ** SQLITE_TESTCTRL_ASSERT shows that assert() is disabled and the second + ** behavior (assert if the argument to ALWAYS() is false) is the case if + ** SQLITE_TESTCTRL_ASSERT shows that assert() is enabled. + ** + ** The run-time test procedure might look something like this: + ** + ** if( sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, 2)==2 ){ + ** // ALWAYS() and NEVER() are no-op pass-through macros + ** }else if( sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, 1) ){ + ** // ALWAYS(x) asserts that x is true. NEVER(x) asserts x is false. + ** }else{ + ** // ALWAYS(x) is a constant 1. NEVER(x) is a constant 0. + ** } + */ + case SQLITE_TESTCTRL_ALWAYS: { + int x = va_arg(ap,int); + rc = x ? ALWAYS(x) : 0; + break; + } + + /* + ** sqlite3_test_control(SQLITE_TESTCTRL_BYTEORDER); + ** + ** The integer returned reveals the byte-order of the computer on which + ** SQLite is running: + ** + ** 1 big-endian, determined at run-time + ** 10 little-endian, determined at run-time + ** 432101 big-endian, determined at compile-time + ** 123410 little-endian, determined at compile-time + */ + case SQLITE_TESTCTRL_BYTEORDER: { + rc = SQLITE_BYTEORDER*100 + SQLITE_LITTLEENDIAN*10 + SQLITE_BIGENDIAN; + break; + } + + /* sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS, sqlite3 *db, int N) + ** + ** Enable or disable various optimizations for testing purposes. The + ** argument N is a bitmask of optimizations to be disabled. For normal + ** operation N should be 0. The idea is that a test program (like the + ** SQL Logic Test or SLT test module) can run the same SQL multiple times + ** with various optimizations disabled to verify that the same answer + ** is obtained in every case. + */ + case SQLITE_TESTCTRL_OPTIMIZATIONS: { + sqlite3 *db = va_arg(ap, sqlite3*); + db->dbOptFlags = va_arg(ap, u32); + break; + } + + /* sqlite3_test_control(SQLITE_TESTCTRL_GETOPT, sqlite3 *db, int *N) + ** + ** Write the current optimization settings into *N. A zero bit means that + ** the optimization is on, and a 1 bit means that the optimization is off. + */ + case SQLITE_TESTCTRL_GETOPT: { + sqlite3 *db = va_arg(ap, sqlite3*); + int *pN = va_arg(ap, int*); + *pN = db->dbOptFlags; + break; + } + + /* sqlite3_test_control(SQLITE_TESTCTRL_LOCALTIME_FAULT, onoff, xAlt); + ** + ** If parameter onoff is 1, subsequent calls to localtime() fail. + ** If 2, then invoke xAlt() instead of localtime(). If 0, normal + ** processing. + ** + ** xAlt arguments are void pointers, but they really want to be: + ** + ** int xAlt(const time_t*, struct tm*); + ** + ** xAlt should write results in to struct tm object of its 2nd argument + ** and return zero on success, or return non-zero on failure. + */ + case SQLITE_TESTCTRL_LOCALTIME_FAULT: { + sqlite3GlobalConfig.bLocaltimeFault = va_arg(ap, int); + if( sqlite3GlobalConfig.bLocaltimeFault==2 ){ + typedef int(*sqlite3LocaltimeType)(const void*,void*); + sqlite3GlobalConfig.xAltLocaltime = va_arg(ap, sqlite3LocaltimeType); + }else{ + sqlite3GlobalConfig.xAltLocaltime = 0; + } + break; + } + + /* sqlite3_test_control(SQLITE_TESTCTRL_INTERNAL_FUNCTIONS, sqlite3*); + ** + ** Toggle the ability to use internal functions on or off for + ** the database connection given in the argument. + */ + case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS: { + sqlite3 *db = va_arg(ap, sqlite3*); + db->mDbFlags ^= DBFLAG_InternalFunc; + break; + } + + /* sqlite3_test_control(SQLITE_TESTCTRL_NEVER_CORRUPT, int); + ** + ** Set or clear a flag that indicates that the database file is always well- + ** formed and never corrupt. This flag is clear by default, indicating that + ** database files might have arbitrary corruption. Setting the flag during + ** testing causes certain assert() statements in the code to be activated + ** that demonstrate invariants on well-formed database files. + */ + case SQLITE_TESTCTRL_NEVER_CORRUPT: { + sqlite3GlobalConfig.neverCorrupt = va_arg(ap, int); + break; + } + + /* sqlite3_test_control(SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS, int); + ** + ** Set or clear a flag that causes SQLite to verify that type, name, + ** and tbl_name fields of the sqlite_schema table. This is normally + ** on, but it is sometimes useful to turn it off for testing. + ** + ** 2020-07-22: Disabling EXTRA_SCHEMA_CHECKS also disables the + ** verification of rootpage numbers when parsing the schema. This + ** is useful to make it easier to reach strange internal error states + ** during testing. The EXTRA_SCHEMA_CHECKS setting is always enabled + ** in production. + */ + case SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS: { + sqlite3GlobalConfig.bExtraSchemaChecks = va_arg(ap, int); + break; + } + + /* Set the threshold at which OP_Once counters reset back to zero. + ** By default this is 0x7ffffffe (over 2 billion), but that value is + ** too big to test in a reasonable amount of time, so this control is + ** provided to set a small and easily reachable reset value. + */ + case SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD: { + sqlite3GlobalConfig.iOnceResetThreshold = va_arg(ap, int); + break; + } + + /* sqlite3_test_control(SQLITE_TESTCTRL_VDBE_COVERAGE, xCallback, ptr); + ** + ** Set the VDBE coverage callback function to xCallback with context + ** pointer ptr. + */ + case SQLITE_TESTCTRL_VDBE_COVERAGE: { +#ifdef SQLITE_VDBE_COVERAGE + typedef void (*branch_callback)(void*,unsigned int, + unsigned char,unsigned char); + sqlite3GlobalConfig.xVdbeBranch = va_arg(ap,branch_callback); + sqlite3GlobalConfig.pVdbeBranchArg = va_arg(ap,void*); +#endif + break; + } + + /* sqlite3_test_control(SQLITE_TESTCTRL_SORTER_MMAP, db, nMax); */ + case SQLITE_TESTCTRL_SORTER_MMAP: { + sqlite3 *db = va_arg(ap, sqlite3*); + db->nMaxSorterMmap = va_arg(ap, int); + break; + } + + /* sqlite3_test_control(SQLITE_TESTCTRL_ISINIT); + ** + ** Return SQLITE_OK if SQLite has been initialized and SQLITE_ERROR if + ** not. + */ + case SQLITE_TESTCTRL_ISINIT: { + if( sqlite3GlobalConfig.isInit==0 ) rc = SQLITE_ERROR; + break; + } + + /* sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, db, dbName, mode, tnum); + ** + ** This test control is used to create imposter tables. "db" is a pointer + ** to the database connection. dbName is the database name (ex: "main" or + ** "temp") which will receive the imposter. "mode" turns imposter mode on + ** or off. mode==0 means imposter mode is off. mode==1 means imposter mode + ** is on. mode==2 means imposter mode is on but results in an imposter + ** table that is read-only unless writable_schema is on. "tnum" is the + ** root page of the b-tree to which the imposter table should connect. + ** + ** Enable imposter mode only when the schema has already been parsed. Then + ** run a single CREATE TABLE statement to construct the imposter table in + ** the parsed schema. Then turn imposter mode back off again. + ** + ** If onOff==0 and tnum>0 then reset the schema for all databases, causing + ** the schema to be reparsed the next time it is needed. This has the + ** effect of erasing all imposter tables. + */ + case SQLITE_TESTCTRL_IMPOSTER: { + sqlite3 *db = va_arg(ap, sqlite3*); + int iDb; + sqlite3_mutex_enter(db->mutex); + iDb = sqlite3FindDbName(db, va_arg(ap,const char*)); + if( iDb>=0 ){ + db->init.iDb = iDb; + db->init.busy = db->init.imposterTable = va_arg(ap,int); + db->init.newTnum = va_arg(ap,int); + if( db->init.busy==0 && db->init.newTnum>0 ){ + sqlite3ResetAllSchemasOfConnection(db); + } + } + sqlite3_mutex_leave(db->mutex); + break; + } + +#if defined(YYCOVERAGE) + /* sqlite3_test_control(SQLITE_TESTCTRL_PARSER_COVERAGE, FILE *out) + ** + ** This test control (only available when SQLite is compiled with + ** -DYYCOVERAGE) writes a report onto "out" that shows all + ** state/lookahead combinations in the parser state machine + ** which are never exercised. If any state is missed, make the + ** return code SQLITE_ERROR. + */ + case SQLITE_TESTCTRL_PARSER_COVERAGE: { + FILE *out = va_arg(ap, FILE*); + if( sqlite3ParserCoverage(out) ) rc = SQLITE_ERROR; + break; + } +#endif /* defined(YYCOVERAGE) */ + + /* sqlite3_test_control(SQLITE_TESTCTRL_RESULT_INTREAL, sqlite3_context*); + ** + ** This test-control causes the most recent sqlite3_result_int64() value + ** to be interpreted as a MEM_IntReal instead of as an MEM_Int. Normally, + ** MEM_IntReal values only arise during an INSERT operation of integer + ** values into a REAL column, so they can be challenging to test. This + ** test-control enables us to write an intreal() SQL function that can + ** inject an intreal() value at arbitrary places in an SQL statement, + ** for testing purposes. + */ + case SQLITE_TESTCTRL_RESULT_INTREAL: { + sqlite3_context *pCtx = va_arg(ap, sqlite3_context*); + sqlite3ResultIntReal(pCtx); + break; + } + + /* sqlite3_test_control(SQLITE_TESTCTRL_SEEK_COUNT, + ** sqlite3 *db, // Database connection + ** u64 *pnSeek // Write seek count here + ** ); + ** + ** This test-control queries the seek-counter on the "main" database + ** file. The seek-counter is written into *pnSeek and is then reset. + ** The seek-count is only available if compiled with SQLITE_DEBUG. + */ + case SQLITE_TESTCTRL_SEEK_COUNT: { + sqlite3 *db = va_arg(ap, sqlite3*); + u64 *pn = va_arg(ap, sqlite3_uint64*); + *pn = sqlite3BtreeSeekCount(db->aDb->pBt); + (void)db; /* Silence harmless unused variable warning */ + break; + } + + /* sqlite3_test_control(SQLITE_TESTCTRL_TRACEFLAGS, op, ptr) + ** + ** "ptr" is a pointer to a u32. + ** + ** op==0 Store the current sqlite3TreeTrace in *ptr + ** op==1 Set sqlite3TreeTrace to the value *ptr + ** op==2 Store the current sqlite3WhereTrace in *ptr + ** op==3 Set sqlite3WhereTrace to the value *ptr + */ + case SQLITE_TESTCTRL_TRACEFLAGS: { + int opTrace = va_arg(ap, int); + u32 *ptr = va_arg(ap, u32*); + switch( opTrace ){ + case 0: *ptr = sqlite3TreeTrace; break; + case 1: sqlite3TreeTrace = *ptr; break; + case 2: *ptr = sqlite3WhereTrace; break; + case 3: sqlite3WhereTrace = *ptr; break; + } + break; + } + + /* sqlite3_test_control(SQLITE_TESTCTRL_LOGEST, + ** double fIn, // Input value + ** int *pLogEst, // sqlite3LogEstFromDouble(fIn) + ** u64 *pInt, // sqlite3LogEstToInt(*pLogEst) + ** int *pLogEst2 // sqlite3LogEst(*pInt) + ** ); + ** + ** Test access for the LogEst conversion routines. + */ + case SQLITE_TESTCTRL_LOGEST: { + double rIn = va_arg(ap, double); + LogEst rLogEst = sqlite3LogEstFromDouble(rIn); + int *pI1 = va_arg(ap,int*); + u64 *pU64 = va_arg(ap,u64*); + int *pI2 = va_arg(ap,int*); + *pI1 = rLogEst; + *pU64 = sqlite3LogEstToInt(rLogEst); + *pI2 = sqlite3LogEst(*pU64); + break; + } + +#if defined(SQLITE_DEBUG) && !defined(SQLITE_OMIT_WSD) + /* sqlite3_test_control(SQLITE_TESTCTRL_TUNE, id, *piValue) + ** + ** If "id" is an integer between 1 and SQLITE_NTUNE then set the value + ** of the id-th tuning parameter to *piValue. If "id" is between -1 + ** and -SQLITE_NTUNE, then write the current value of the (-id)-th + ** tuning parameter into *piValue. + ** + ** Tuning parameters are for use during transient development builds, + ** to help find the best values for constants in the query planner. + ** Access tuning parameters using the Tuning(ID) macro. Set the + ** parameters in the CLI using ".testctrl tune ID VALUE". + ** + ** Transient use only. Tuning parameters should not be used in + ** checked-in code. + */ + case SQLITE_TESTCTRL_TUNE: { + int id = va_arg(ap, int); + int *piValue = va_arg(ap, int*); + if( id>0 && id<=SQLITE_NTUNE ){ + Tuning(id) = *piValue; + }else if( id<0 && id>=-SQLITE_NTUNE ){ + *piValue = Tuning(-id); + }else{ + rc = SQLITE_NOTFOUND; + } + break; + } +#endif + + /* sqlite3_test_control(SQLITE_TESTCTRL_JSON_SELFCHECK, &onOff); + ** + ** Activate or deactivate validation of JSONB that is generated from + ** text. Off by default, as the validation is slow. Validation is + ** only available if compiled using SQLITE_DEBUG. + ** + ** If onOff is initially 1, then turn it on. If onOff is initially + ** off, turn it off. If onOff is initially -1, then change onOff + ** to be the current setting. + */ + case SQLITE_TESTCTRL_JSON_SELFCHECK: { +#if defined(SQLITE_DEBUG) && !defined(SQLITE_OMIT_WSD) + int *pOnOff = va_arg(ap, int*); + if( *pOnOff<0 ){ + *pOnOff = sqlite3Config.bJsonSelfcheck; + }else{ + sqlite3Config.bJsonSelfcheck = (u8)((*pOnOff)&0xff); + } +#endif + break; + } + } + va_end(ap); +#endif /* SQLITE_UNTESTABLE */ + return rc; +} + +/* +** The Pager stores the Database filename, Journal filename, and WAL filename +** consecutively in memory, in that order. The database filename is prefixed +** by four zero bytes. Locate the start of the database filename by searching +** backwards for the first byte following four consecutive zero bytes. +** +** This only works if the filename passed in was obtained from the Pager. +*/ +static const char *databaseName(const char *zName){ + while( zName[-1]!=0 || zName[-2]!=0 || zName[-3]!=0 || zName[-4]!=0 ){ + zName--; + } + return zName; +} + +/* +** Append text z[] to the end of p[]. Return a pointer to the first +** character after then zero terminator on the new text in p[]. +*/ +static char *appendText(char *p, const char *z){ + size_t n = strlen(z); + memcpy(p, z, n+1); + return p+n+1; +} + +/* +** Allocate memory to hold names for a database, journal file, WAL file, +** and query parameters. The pointer returned is valid for use by +** sqlite3_filename_database() and sqlite3_uri_parameter() and related +** functions. +** +** Memory layout must be compatible with that generated by the pager +** and expected by sqlite3_uri_parameter() and databaseName(). +*/ +SQLITE_API const char *sqlite3_create_filename( + const char *zDatabase, + const char *zJournal, + const char *zWal, + int nParam, + const char **azParam +){ + sqlite3_int64 nByte; + int i; + char *pResult, *p; + nByte = strlen(zDatabase) + strlen(zJournal) + strlen(zWal) + 10; + for(i=0; i0 ){ + zFilename += sqlite3Strlen30(zFilename) + 1; + zFilename += sqlite3Strlen30(zFilename) + 1; + } + return zFilename[0] ? zFilename : 0; +} + +/* +** Return a boolean value for a query parameter. +*/ +SQLITE_API int sqlite3_uri_boolean(const char *zFilename, const char *zParam, int bDflt){ + const char *z = sqlite3_uri_parameter(zFilename, zParam); + bDflt = bDflt!=0; + return z ? sqlite3GetBoolean(z, bDflt) : bDflt; +} + +/* +** Return a 64-bit integer value for a query parameter. +*/ +SQLITE_API sqlite3_int64 sqlite3_uri_int64( + const char *zFilename, /* Filename as passed to xOpen */ + const char *zParam, /* URI parameter sought */ + sqlite3_int64 bDflt /* return if parameter is missing */ +){ + const char *z = sqlite3_uri_parameter(zFilename, zParam); + sqlite3_int64 v; + if( z && sqlite3DecOrHexToI64(z, &v)==0 ){ + bDflt = v; + } + return bDflt; +} + +/* +** Translate a filename that was handed to a VFS routine into the corresponding +** database, journal, or WAL file. +** +** It is an error to pass this routine a filename string that was not +** passed into the VFS from the SQLite core. Doing so is similar to +** passing free() a pointer that was not obtained from malloc() - it is +** an error that we cannot easily detect but that will likely cause memory +** corruption. +*/ +SQLITE_API const char *sqlite3_filename_database(const char *zFilename){ + if( zFilename==0 ) return 0; + return databaseName(zFilename); +} +SQLITE_API const char *sqlite3_filename_journal(const char *zFilename){ + if( zFilename==0 ) return 0; + zFilename = databaseName(zFilename); + zFilename += sqlite3Strlen30(zFilename) + 1; + while( ALWAYS(zFilename) && zFilename[0] ){ + zFilename += sqlite3Strlen30(zFilename) + 1; + zFilename += sqlite3Strlen30(zFilename) + 1; + } + return zFilename + 1; +} +SQLITE_API const char *sqlite3_filename_wal(const char *zFilename){ +#ifdef SQLITE_OMIT_WAL + return 0; +#else + zFilename = sqlite3_filename_journal(zFilename); + if( zFilename ) zFilename += sqlite3Strlen30(zFilename) + 1; + return zFilename; +#endif +} + +/* +** Return the Btree pointer identified by zDbName. Return NULL if not found. +*/ +SQLITE_PRIVATE Btree *sqlite3DbNameToBtree(sqlite3 *db, const char *zDbName){ + int iDb = zDbName ? sqlite3FindDbName(db, zDbName) : 0; + return iDb<0 ? 0 : db->aDb[iDb].pBt; +} + +/* +** Return the name of the N-th database schema. Return NULL if N is out +** of range. +*/ +SQLITE_API const char *sqlite3_db_name(sqlite3 *db, int N){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + if( N<0 || N>=db->nDb ){ + return 0; + }else{ + return db->aDb[N].zDbSName; + } +} + +/* +** Return the filename of the database associated with a database +** connection. +*/ +SQLITE_API const char *sqlite3_db_filename(sqlite3 *db, const char *zDbName){ + Btree *pBt; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + pBt = sqlite3DbNameToBtree(db, zDbName); + return pBt ? sqlite3BtreeGetFilename(pBt) : 0; +} + +/* +** Return 1 if database is read-only or 0 if read/write. Return -1 if +** no such database exists. +*/ +SQLITE_API int sqlite3_db_readonly(sqlite3 *db, const char *zDbName){ + Btree *pBt; +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return -1; + } +#endif + pBt = sqlite3DbNameToBtree(db, zDbName); + return pBt ? sqlite3BtreeIsReadonly(pBt) : -1; +} + +#ifdef SQLITE_ENABLE_SNAPSHOT +/* +** Obtain a snapshot handle for the snapshot of database zDb currently +** being read by handle db. +*/ +SQLITE_API int sqlite3_snapshot_get( + sqlite3 *db, + const char *zDb, + sqlite3_snapshot **ppSnapshot +){ + int rc = SQLITE_ERROR; +#ifndef SQLITE_OMIT_WAL + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + return SQLITE_MISUSE_BKPT; + } +#endif + sqlite3_mutex_enter(db->mutex); + + if( db->autoCommit==0 ){ + int iDb = sqlite3FindDbName(db, zDb); + if( iDb==0 || iDb>1 ){ + Btree *pBt = db->aDb[iDb].pBt; + if( SQLITE_TXN_WRITE!=sqlite3BtreeTxnState(pBt) ){ + Pager *pPager = sqlite3BtreePager(pBt); + i64 dummy = 0; + sqlite3PagerSnapshotOpen(pPager, (sqlite3_snapshot*)&dummy); + rc = sqlite3BtreeBeginTrans(pBt, 0, 0); + sqlite3PagerSnapshotOpen(pPager, 0); + if( rc==SQLITE_OK ){ + rc = sqlite3PagerSnapshotGet(sqlite3BtreePager(pBt), ppSnapshot); + } + } + } + } + + sqlite3_mutex_leave(db->mutex); +#endif /* SQLITE_OMIT_WAL */ + return rc; +} + +/* +** Open a read-transaction on the snapshot identified by pSnapshot. +*/ +SQLITE_API int sqlite3_snapshot_open( + sqlite3 *db, + const char *zDb, + sqlite3_snapshot *pSnapshot +){ + int rc = SQLITE_ERROR; +#ifndef SQLITE_OMIT_WAL + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + return SQLITE_MISUSE_BKPT; + } +#endif + sqlite3_mutex_enter(db->mutex); + if( db->autoCommit==0 ){ + int iDb; + iDb = sqlite3FindDbName(db, zDb); + if( iDb==0 || iDb>1 ){ + Btree *pBt = db->aDb[iDb].pBt; + if( sqlite3BtreeTxnState(pBt)!=SQLITE_TXN_WRITE ){ + Pager *pPager = sqlite3BtreePager(pBt); + int bUnlock = 0; + if( sqlite3BtreeTxnState(pBt)!=SQLITE_TXN_NONE ){ + if( db->nVdbeActive==0 ){ + rc = sqlite3PagerSnapshotCheck(pPager, pSnapshot); + if( rc==SQLITE_OK ){ + bUnlock = 1; + rc = sqlite3BtreeCommit(pBt); + } + } + }else{ + rc = SQLITE_OK; + } + if( rc==SQLITE_OK ){ + rc = sqlite3PagerSnapshotOpen(pPager, pSnapshot); + } + if( rc==SQLITE_OK ){ + rc = sqlite3BtreeBeginTrans(pBt, 0, 0); + sqlite3PagerSnapshotOpen(pPager, 0); + } + if( bUnlock ){ + sqlite3PagerSnapshotUnlock(pPager); + } + } + } + } + + sqlite3_mutex_leave(db->mutex); +#endif /* SQLITE_OMIT_WAL */ + return rc; +} + +/* +** Recover as many snapshots as possible from the wal file associated with +** schema zDb of database db. +*/ +SQLITE_API int sqlite3_snapshot_recover(sqlite3 *db, const char *zDb){ + int rc = SQLITE_ERROR; +#ifndef SQLITE_OMIT_WAL + int iDb; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + return SQLITE_MISUSE_BKPT; + } +#endif + + sqlite3_mutex_enter(db->mutex); + iDb = sqlite3FindDbName(db, zDb); + if( iDb==0 || iDb>1 ){ + Btree *pBt = db->aDb[iDb].pBt; + if( SQLITE_TXN_NONE==sqlite3BtreeTxnState(pBt) ){ + rc = sqlite3BtreeBeginTrans(pBt, 0, 0); + if( rc==SQLITE_OK ){ + rc = sqlite3PagerSnapshotRecover(sqlite3BtreePager(pBt)); + sqlite3BtreeCommit(pBt); + } + } + } + sqlite3_mutex_leave(db->mutex); +#endif /* SQLITE_OMIT_WAL */ + return rc; +} + +/* +** Free a snapshot handle obtained from sqlite3_snapshot_get(). +*/ +SQLITE_API void sqlite3_snapshot_free(sqlite3_snapshot *pSnapshot){ + sqlite3_free(pSnapshot); +} +#endif /* SQLITE_ENABLE_SNAPSHOT */ + +#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS +/* +** Given the name of a compile-time option, return true if that option +** was used and false if not. +** +** The name can optionally begin with "SQLITE_" but the "SQLITE_" prefix +** is not required for a match. +*/ +SQLITE_API int sqlite3_compileoption_used(const char *zOptName){ + int i, n; + int nOpt; + const char **azCompileOpt; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( zOptName==0 ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + + azCompileOpt = sqlite3CompileOptions(&nOpt); + + if( sqlite3StrNICmp(zOptName, "SQLITE_", 7)==0 ) zOptName += 7; + n = sqlite3Strlen30(zOptName); + + /* Since nOpt is normally in single digits, a linear search is + ** adequate. No need for a binary search. */ + for(i=0; i=0 && NpNextBlocked){ + int seen = 0; + sqlite3 *p2; + + /* Verify property (1) */ + assert( p->pUnlockConnection || p->pBlockingConnection ); + + /* Verify property (2) */ + for(p2=sqlite3BlockedList; p2!=p; p2=p2->pNextBlocked){ + if( p2->xUnlockNotify==p->xUnlockNotify ) seen = 1; + assert( p2->xUnlockNotify==p->xUnlockNotify || !seen ); + assert( db==0 || p->pUnlockConnection!=db ); + assert( db==0 || p->pBlockingConnection!=db ); + } + } +} +#else +# define checkListProperties(x) +#endif + +/* +** Remove connection db from the blocked connections list. If connection +** db is not currently a part of the list, this function is a no-op. +*/ +static void removeFromBlockedList(sqlite3 *db){ + sqlite3 **pp; + assertMutexHeld(); + for(pp=&sqlite3BlockedList; *pp; pp = &(*pp)->pNextBlocked){ + if( *pp==db ){ + *pp = (*pp)->pNextBlocked; + break; + } + } +} + +/* +** Add connection db to the blocked connections list. It is assumed +** that it is not already a part of the list. +*/ +static void addToBlockedList(sqlite3 *db){ + sqlite3 **pp; + assertMutexHeld(); + for( + pp=&sqlite3BlockedList; + *pp && (*pp)->xUnlockNotify!=db->xUnlockNotify; + pp=&(*pp)->pNextBlocked + ); + db->pNextBlocked = *pp; + *pp = db; +} + +/* +** Obtain the STATIC_MAIN mutex. +*/ +static void enterMutex(void){ + sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MAIN)); + checkListProperties(0); +} + +/* +** Release the STATIC_MAIN mutex. +*/ +static void leaveMutex(void){ + assertMutexHeld(); + checkListProperties(0); + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MAIN)); +} + +/* +** Register an unlock-notify callback. +** +** This is called after connection "db" has attempted some operation +** but has received an SQLITE_LOCKED error because another connection +** (call it pOther) in the same process was busy using the same shared +** cache. pOther is found by looking at db->pBlockingConnection. +** +** If there is no blocking connection, the callback is invoked immediately, +** before this routine returns. +** +** If pOther is already blocked on db, then report SQLITE_LOCKED, to indicate +** a deadlock. +** +** Otherwise, make arrangements to invoke xNotify when pOther drops +** its locks. +** +** Each call to this routine overrides any prior callbacks registered +** on the same "db". If xNotify==0 then any prior callbacks are immediately +** cancelled. +*/ +SQLITE_API int sqlite3_unlock_notify( + sqlite3 *db, + void (*xNotify)(void **, int), + void *pArg +){ + int rc = SQLITE_OK; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; +#endif + sqlite3_mutex_enter(db->mutex); + enterMutex(); + + if( xNotify==0 ){ + removeFromBlockedList(db); + db->pBlockingConnection = 0; + db->pUnlockConnection = 0; + db->xUnlockNotify = 0; + db->pUnlockArg = 0; + }else if( 0==db->pBlockingConnection ){ + /* The blocking transaction has been concluded. Or there never was a + ** blocking transaction. In either case, invoke the notify callback + ** immediately. + */ + xNotify(&pArg, 1); + }else{ + sqlite3 *p; + + for(p=db->pBlockingConnection; p && p!=db; p=p->pUnlockConnection){} + if( p ){ + rc = SQLITE_LOCKED; /* Deadlock detected. */ + }else{ + db->pUnlockConnection = db->pBlockingConnection; + db->xUnlockNotify = xNotify; + db->pUnlockArg = pArg; + removeFromBlockedList(db); + addToBlockedList(db); + } + } + + leaveMutex(); + assert( !db->mallocFailed ); + sqlite3ErrorWithMsg(db, rc, (rc?"database is deadlocked":0)); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/* +** This function is called while stepping or preparing a statement +** associated with connection db. The operation will return SQLITE_LOCKED +** to the user because it requires a lock that will not be available +** until connection pBlocker concludes its current transaction. +*/ +SQLITE_PRIVATE void sqlite3ConnectionBlocked(sqlite3 *db, sqlite3 *pBlocker){ + enterMutex(); + if( db->pBlockingConnection==0 && db->pUnlockConnection==0 ){ + addToBlockedList(db); + } + db->pBlockingConnection = pBlocker; + leaveMutex(); +} + +/* +** This function is called when +** the transaction opened by database db has just finished. Locks held +** by database connection db have been released. +** +** This function loops through each entry in the blocked connections +** list and does the following: +** +** 1) If the sqlite3.pBlockingConnection member of a list entry is +** set to db, then set pBlockingConnection=0. +** +** 2) If the sqlite3.pUnlockConnection member of a list entry is +** set to db, then invoke the configured unlock-notify callback and +** set pUnlockConnection=0. +** +** 3) If the two steps above mean that pBlockingConnection==0 and +** pUnlockConnection==0, remove the entry from the blocked connections +** list. +*/ +SQLITE_PRIVATE void sqlite3ConnectionUnlocked(sqlite3 *db){ + void (*xUnlockNotify)(void **, int) = 0; /* Unlock-notify cb to invoke */ + int nArg = 0; /* Number of entries in aArg[] */ + sqlite3 **pp; /* Iterator variable */ + void **aArg; /* Arguments to the unlock callback */ + void **aDyn = 0; /* Dynamically allocated space for aArg[] */ + void *aStatic[16]; /* Starter space for aArg[]. No malloc required */ + + aArg = aStatic; + enterMutex(); /* Enter STATIC_MAIN mutex */ + + /* This loop runs once for each entry in the blocked-connections list. */ + for(pp=&sqlite3BlockedList; *pp; /* no-op */ ){ + sqlite3 *p = *pp; + + /* Step 1. */ + if( p->pBlockingConnection==db ){ + p->pBlockingConnection = 0; + } + + /* Step 2. */ + if( p->pUnlockConnection==db ){ + assert( p->xUnlockNotify ); + if( p->xUnlockNotify!=xUnlockNotify && nArg!=0 ){ + xUnlockNotify(aArg, nArg); + nArg = 0; + } + + sqlite3BeginBenignMalloc(); + assert( aArg==aDyn || (aDyn==0 && aArg==aStatic) ); + assert( nArg<=(int)ArraySize(aStatic) || aArg==aDyn ); + if( (!aDyn && nArg==(int)ArraySize(aStatic)) + || (aDyn && nArg==(int)(sqlite3MallocSize(aDyn)/sizeof(void*))) + ){ + /* The aArg[] array needs to grow. */ + void **pNew = (void **)sqlite3Malloc(nArg*sizeof(void *)*2); + if( pNew ){ + memcpy(pNew, aArg, nArg*sizeof(void *)); + sqlite3_free(aDyn); + aDyn = aArg = pNew; + }else{ + /* This occurs when the array of context pointers that need to + ** be passed to the unlock-notify callback is larger than the + ** aStatic[] array allocated on the stack and the attempt to + ** allocate a larger array from the heap has failed. + ** + ** This is a difficult situation to handle. Returning an error + ** code to the caller is insufficient, as even if an error code + ** is returned the transaction on connection db will still be + ** closed and the unlock-notify callbacks on blocked connections + ** will go unissued. This might cause the application to wait + ** indefinitely for an unlock-notify callback that will never + ** arrive. + ** + ** Instead, invoke the unlock-notify callback with the context + ** array already accumulated. We can then clear the array and + ** begin accumulating any further context pointers without + ** requiring any dynamic allocation. This is sub-optimal because + ** it means that instead of one callback with a large array of + ** context pointers the application will receive two or more + ** callbacks with smaller arrays of context pointers, which will + ** reduce the applications ability to prioritize multiple + ** connections. But it is the best that can be done under the + ** circumstances. + */ + xUnlockNotify(aArg, nArg); + nArg = 0; + } + } + sqlite3EndBenignMalloc(); + + aArg[nArg++] = p->pUnlockArg; + xUnlockNotify = p->xUnlockNotify; + p->pUnlockConnection = 0; + p->xUnlockNotify = 0; + p->pUnlockArg = 0; + } + + /* Step 3. */ + if( p->pBlockingConnection==0 && p->pUnlockConnection==0 ){ + /* Remove connection p from the blocked connections list. */ + *pp = p->pNextBlocked; + p->pNextBlocked = 0; + }else{ + pp = &p->pNextBlocked; + } + } + + if( nArg!=0 ){ + xUnlockNotify(aArg, nArg); + } + sqlite3_free(aDyn); + leaveMutex(); /* Leave STATIC_MAIN mutex */ +} + +/* +** This is called when the database connection passed as an argument is +** being closed. The connection is removed from the blocked list. +*/ +SQLITE_PRIVATE void sqlite3ConnectionClosed(sqlite3 *db){ + sqlite3ConnectionUnlocked(db); + enterMutex(); + removeFromBlockedList(db); + checkListProperties(db); + leaveMutex(); +} +#endif + +/************** End of notify.c **********************************************/ +/************** Begin file fts3.c ********************************************/ +/* +** 2006 Oct 10 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This is an SQLite module implementing full-text search. +*/ + +/* +** The code in this file is only compiled if: +** +** * The FTS3 module is being built as an extension +** (in which case SQLITE_CORE is not defined), or +** +** * The FTS3 module is being built into the core of +** SQLite (in which case SQLITE_ENABLE_FTS3 is defined). +*/ + +/* The full-text index is stored in a series of b+tree (-like) +** structures called segments which map terms to doclists. The +** structures are like b+trees in layout, but are constructed from the +** bottom up in optimal fashion and are not updatable. Since trees +** are built from the bottom up, things will be described from the +** bottom up. +** +** +**** Varints **** +** The basic unit of encoding is a variable-length integer called a +** varint. We encode variable-length integers in little-endian order +** using seven bits * per byte as follows: +** +** KEY: +** A = 0xxxxxxx 7 bits of data and one flag bit +** B = 1xxxxxxx 7 bits of data and one flag bit +** +** 7 bits - A +** 14 bits - BA +** 21 bits - BBA +** and so on. +** +** This is similar in concept to how sqlite encodes "varints" but +** the encoding is not the same. SQLite varints are big-endian +** are are limited to 9 bytes in length whereas FTS3 varints are +** little-endian and can be up to 10 bytes in length (in theory). +** +** Example encodings: +** +** 1: 0x01 +** 127: 0x7f +** 128: 0x81 0x00 +** +** +**** Document lists **** +** A doclist (document list) holds a docid-sorted list of hits for a +** given term. Doclists hold docids and associated token positions. +** A docid is the unique integer identifier for a single document. +** A position is the index of a word within the document. The first +** word of the document has a position of 0. +** +** FTS3 used to optionally store character offsets using a compile-time +** option. But that functionality is no longer supported. +** +** A doclist is stored like this: +** +** array { +** varint docid; (delta from previous doclist) +** array { (position list for column 0) +** varint position; (2 more than the delta from previous position) +** } +** array { +** varint POS_COLUMN; (marks start of position list for new column) +** varint column; (index of new column) +** array { +** varint position; (2 more than the delta from previous position) +** } +** } +** varint POS_END; (marks end of positions for this document. +** } +** +** Here, array { X } means zero or more occurrences of X, adjacent in +** memory. A "position" is an index of a token in the token stream +** generated by the tokenizer. Note that POS_END and POS_COLUMN occur +** in the same logical place as the position element, and act as sentinels +** ending a position list array. POS_END is 0. POS_COLUMN is 1. +** The positions numbers are not stored literally but rather as two more +** than the difference from the prior position, or the just the position plus +** 2 for the first position. Example: +** +** label: A B C D E F G H I J K +** value: 123 5 9 1 1 14 35 0 234 72 0 +** +** The 123 value is the first docid. For column zero in this document +** there are two matches at positions 3 and 10 (5-2 and 9-2+3). The 1 +** at D signals the start of a new column; the 1 at E indicates that the +** new column is column number 1. There are two positions at 12 and 45 +** (14-2 and 35-2+12). The 0 at H indicate the end-of-document. The +** 234 at I is the delta to next docid (357). It has one position 70 +** (72-2) and then terminates with the 0 at K. +** +** A "position-list" is the list of positions for multiple columns for +** a single docid. A "column-list" is the set of positions for a single +** column. Hence, a position-list consists of one or more column-lists, +** a document record consists of a docid followed by a position-list and +** a doclist consists of one or more document records. +** +** A bare doclist omits the position information, becoming an +** array of varint-encoded docids. +** +**** Segment leaf nodes **** +** Segment leaf nodes store terms and doclists, ordered by term. Leaf +** nodes are written using LeafWriter, and read using LeafReader (to +** iterate through a single leaf node's data) and LeavesReader (to +** iterate through a segment's entire leaf layer). Leaf nodes have +** the format: +** +** varint iHeight; (height from leaf level, always 0) +** varint nTerm; (length of first term) +** char pTerm[nTerm]; (content of first term) +** varint nDoclist; (length of term's associated doclist) +** char pDoclist[nDoclist]; (content of doclist) +** array { +** (further terms are delta-encoded) +** varint nPrefix; (length of prefix shared with previous term) +** varint nSuffix; (length of unshared suffix) +** char pTermSuffix[nSuffix];(unshared suffix of next term) +** varint nDoclist; (length of term's associated doclist) +** char pDoclist[nDoclist]; (content of doclist) +** } +** +** Here, array { X } means zero or more occurrences of X, adjacent in +** memory. +** +** Leaf nodes are broken into blocks which are stored contiguously in +** the %_segments table in sorted order. This means that when the end +** of a node is reached, the next term is in the node with the next +** greater node id. +** +** New data is spilled to a new leaf node when the current node +** exceeds LEAF_MAX bytes (default 2048). New data which itself is +** larger than STANDALONE_MIN (default 1024) is placed in a standalone +** node (a leaf node with a single term and doclist). The goal of +** these settings is to pack together groups of small doclists while +** making it efficient to directly access large doclists. The +** assumption is that large doclists represent terms which are more +** likely to be query targets. +** +** TODO(shess) It may be useful for blocking decisions to be more +** dynamic. For instance, it may make more sense to have a 2.5k leaf +** node rather than splitting into 2k and .5k nodes. My intuition is +** that this might extend through 2x or 4x the pagesize. +** +** +**** Segment interior nodes **** +** Segment interior nodes store blockids for subtree nodes and terms +** to describe what data is stored by the each subtree. Interior +** nodes are written using InteriorWriter, and read using +** InteriorReader. InteriorWriters are created as needed when +** SegmentWriter creates new leaf nodes, or when an interior node +** itself grows too big and must be split. The format of interior +** nodes: +** +** varint iHeight; (height from leaf level, always >0) +** varint iBlockid; (block id of node's leftmost subtree) +** optional { +** varint nTerm; (length of first term) +** char pTerm[nTerm]; (content of first term) +** array { +** (further terms are delta-encoded) +** varint nPrefix; (length of shared prefix with previous term) +** varint nSuffix; (length of unshared suffix) +** char pTermSuffix[nSuffix]; (unshared suffix of next term) +** } +** } +** +** Here, optional { X } means an optional element, while array { X } +** means zero or more occurrences of X, adjacent in memory. +** +** An interior node encodes n terms separating n+1 subtrees. The +** subtree blocks are contiguous, so only the first subtree's blockid +** is encoded. The subtree at iBlockid will contain all terms less +** than the first term encoded (or all terms if no term is encoded). +** Otherwise, for terms greater than or equal to pTerm[i] but less +** than pTerm[i+1], the subtree for that term will be rooted at +** iBlockid+i. Interior nodes only store enough term data to +** distinguish adjacent children (if the rightmost term of the left +** child is "something", and the leftmost term of the right child is +** "wicked", only "w" is stored). +** +** New data is spilled to a new interior node at the same height when +** the current node exceeds INTERIOR_MAX bytes (default 2048). +** INTERIOR_MIN_TERMS (default 7) keeps large terms from monopolizing +** interior nodes and making the tree too skinny. The interior nodes +** at a given height are naturally tracked by interior nodes at +** height+1, and so on. +** +** +**** Segment directory **** +** The segment directory in table %_segdir stores meta-information for +** merging and deleting segments, and also the root node of the +** segment's tree. +** +** The root node is the top node of the segment's tree after encoding +** the entire segment, restricted to ROOT_MAX bytes (default 1024). +** This could be either a leaf node or an interior node. If the top +** node requires more than ROOT_MAX bytes, it is flushed to %_segments +** and a new root interior node is generated (which should always fit +** within ROOT_MAX because it only needs space for 2 varints, the +** height and the blockid of the previous root). +** +** The meta-information in the segment directory is: +** level - segment level (see below) +** idx - index within level +** - (level,idx uniquely identify a segment) +** start_block - first leaf node +** leaves_end_block - last leaf node +** end_block - last block (including interior nodes) +** root - contents of root node +** +** If the root node is a leaf node, then start_block, +** leaves_end_block, and end_block are all 0. +** +** +**** Segment merging **** +** To amortize update costs, segments are grouped into levels and +** merged in batches. Each increase in level represents exponentially +** more documents. +** +** New documents (actually, document updates) are tokenized and +** written individually (using LeafWriter) to a level 0 segment, with +** incrementing idx. When idx reaches MERGE_COUNT (default 16), all +** level 0 segments are merged into a single level 1 segment. Level 1 +** is populated like level 0, and eventually MERGE_COUNT level 1 +** segments are merged to a single level 2 segment (representing +** MERGE_COUNT^2 updates), and so on. +** +** A segment merge traverses all segments at a given level in +** parallel, performing a straightforward sorted merge. Since segment +** leaf nodes are written in to the %_segments table in order, this +** merge traverses the underlying sqlite disk structures efficiently. +** After the merge, all segment blocks from the merged level are +** deleted. +** +** MERGE_COUNT controls how often we merge segments. 16 seems to be +** somewhat of a sweet spot for insertion performance. 32 and 64 show +** very similar performance numbers to 16 on insertion, though they're +** a tiny bit slower (perhaps due to more overhead in merge-time +** sorting). 8 is about 20% slower than 16, 4 about 50% slower than +** 16, 2 about 66% slower than 16. +** +** At query time, high MERGE_COUNT increases the number of segments +** which need to be scanned and merged. For instance, with 100k docs +** inserted: +** +** MERGE_COUNT segments +** 16 25 +** 8 12 +** 4 10 +** 2 6 +** +** This appears to have only a moderate impact on queries for very +** frequent terms (which are somewhat dominated by segment merge +** costs), and infrequent and non-existent terms still seem to be fast +** even with many segments. +** +** TODO(shess) That said, it would be nice to have a better query-side +** argument for MERGE_COUNT of 16. Also, it is possible/likely that +** optimizations to things like doclist merging will swing the sweet +** spot around. +** +** +** +**** Handling of deletions and updates **** +** Since we're using a segmented structure, with no docid-oriented +** index into the term index, we clearly cannot simply update the term +** index when a document is deleted or updated. For deletions, we +** write an empty doclist (varint(docid) varint(POS_END)), for updates +** we simply write the new doclist. Segment merges overwrite older +** data for a particular docid with newer data, so deletes or updates +** will eventually overtake the earlier data and knock it out. The +** query logic likewise merges doclists so that newer data knocks out +** older data. +*/ + +/************** Include fts3Int.h in the middle of fts3.c ********************/ +/************** Begin file fts3Int.h *****************************************/ +/* +** 2009 Nov 12 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +*/ +#ifndef _FTSINT_H +#define _FTSINT_H + +/* +** Activate assert() only if SQLITE_TEST is enabled. +*/ +#if !defined(NDEBUG) && !defined(SQLITE_DEBUG) +# define NDEBUG 1 +#endif + +/* #include */ +/* #include */ +/* #include */ +/* #include */ +/* #include */ +/* #include */ + +/* FTS3/FTS4 require virtual tables */ +#ifdef SQLITE_OMIT_VIRTUALTABLE +# undef SQLITE_ENABLE_FTS3 +# undef SQLITE_ENABLE_FTS4 +#endif + +/* +** FTS4 is really an extension for FTS3. It is enabled using the +** SQLITE_ENABLE_FTS3 macro. But to avoid confusion we also all +** the SQLITE_ENABLE_FTS4 macro to serve as an alisse for SQLITE_ENABLE_FTS3. +*/ +#if defined(SQLITE_ENABLE_FTS4) && !defined(SQLITE_ENABLE_FTS3) +# define SQLITE_ENABLE_FTS3 +#endif + +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +/* If not building as part of the core, include sqlite3ext.h. */ +#ifndef SQLITE_CORE +/* # include "sqlite3ext.h" */ +SQLITE_EXTENSION_INIT3 +#endif + +/* #include "sqlite3.h" */ +/************** Include fts3_tokenizer.h in the middle of fts3Int.h **********/ +/************** Begin file fts3_tokenizer.h **********************************/ +/* +** 2006 July 10 +** +** The author disclaims copyright to this source code. +** +************************************************************************* +** Defines the interface to tokenizers used by fulltext-search. There +** are three basic components: +** +** sqlite3_tokenizer_module is a singleton defining the tokenizer +** interface functions. This is essentially the class structure for +** tokenizers. +** +** sqlite3_tokenizer is used to define a particular tokenizer, perhaps +** including customization information defined at creation time. +** +** sqlite3_tokenizer_cursor is generated by a tokenizer to generate +** tokens from a particular input. +*/ +#ifndef _FTS3_TOKENIZER_H_ +#define _FTS3_TOKENIZER_H_ + +/* TODO(shess) Only used for SQLITE_OK and SQLITE_DONE at this time. +** If tokenizers are to be allowed to call sqlite3_*() functions, then +** we will need a way to register the API consistently. +*/ +/* #include "sqlite3.h" */ + +/* +** Structures used by the tokenizer interface. When a new tokenizer +** implementation is registered, the caller provides a pointer to +** an sqlite3_tokenizer_module containing pointers to the callback +** functions that make up an implementation. +** +** When an fts3 table is created, it passes any arguments passed to +** the tokenizer clause of the CREATE VIRTUAL TABLE statement to the +** sqlite3_tokenizer_module.xCreate() function of the requested tokenizer +** implementation. The xCreate() function in turn returns an +** sqlite3_tokenizer structure representing the specific tokenizer to +** be used for the fts3 table (customized by the tokenizer clause arguments). +** +** To tokenize an input buffer, the sqlite3_tokenizer_module.xOpen() +** method is called. It returns an sqlite3_tokenizer_cursor object +** that may be used to tokenize a specific input buffer based on +** the tokenization rules supplied by a specific sqlite3_tokenizer +** object. +*/ +typedef struct sqlite3_tokenizer_module sqlite3_tokenizer_module; +typedef struct sqlite3_tokenizer sqlite3_tokenizer; +typedef struct sqlite3_tokenizer_cursor sqlite3_tokenizer_cursor; + +struct sqlite3_tokenizer_module { + + /* + ** Structure version. Should always be set to 0 or 1. + */ + int iVersion; + + /* + ** Create a new tokenizer. The values in the argv[] array are the + ** arguments passed to the "tokenizer" clause of the CREATE VIRTUAL + ** TABLE statement that created the fts3 table. For example, if + ** the following SQL is executed: + ** + ** CREATE .. USING fts3( ... , tokenizer arg1 arg2) + ** + ** then argc is set to 2, and the argv[] array contains pointers + ** to the strings "arg1" and "arg2". + ** + ** This method should return either SQLITE_OK (0), or an SQLite error + ** code. If SQLITE_OK is returned, then *ppTokenizer should be set + ** to point at the newly created tokenizer structure. The generic + ** sqlite3_tokenizer.pModule variable should not be initialized by + ** this callback. The caller will do so. + */ + int (*xCreate)( + int argc, /* Size of argv array */ + const char *const*argv, /* Tokenizer argument strings */ + sqlite3_tokenizer **ppTokenizer /* OUT: Created tokenizer */ + ); + + /* + ** Destroy an existing tokenizer. The fts3 module calls this method + ** exactly once for each successful call to xCreate(). + */ + int (*xDestroy)(sqlite3_tokenizer *pTokenizer); + + /* + ** Create a tokenizer cursor to tokenize an input buffer. The caller + ** is responsible for ensuring that the input buffer remains valid + ** until the cursor is closed (using the xClose() method). + */ + int (*xOpen)( + sqlite3_tokenizer *pTokenizer, /* Tokenizer object */ + const char *pInput, int nBytes, /* Input buffer */ + sqlite3_tokenizer_cursor **ppCursor /* OUT: Created tokenizer cursor */ + ); + + /* + ** Destroy an existing tokenizer cursor. The fts3 module calls this + ** method exactly once for each successful call to xOpen(). + */ + int (*xClose)(sqlite3_tokenizer_cursor *pCursor); + + /* + ** Retrieve the next token from the tokenizer cursor pCursor. This + ** method should either return SQLITE_OK and set the values of the + ** "OUT" variables identified below, or SQLITE_DONE to indicate that + ** the end of the buffer has been reached, or an SQLite error code. + ** + ** *ppToken should be set to point at a buffer containing the + ** normalized version of the token (i.e. after any case-folding and/or + ** stemming has been performed). *pnBytes should be set to the length + ** of this buffer in bytes. The input text that generated the token is + ** identified by the byte offsets returned in *piStartOffset and + ** *piEndOffset. *piStartOffset should be set to the index of the first + ** byte of the token in the input buffer. *piEndOffset should be set + ** to the index of the first byte just past the end of the token in + ** the input buffer. + ** + ** The buffer *ppToken is set to point at is managed by the tokenizer + ** implementation. It is only required to be valid until the next call + ** to xNext() or xClose(). + */ + /* TODO(shess) current implementation requires pInput to be + ** nul-terminated. This should either be fixed, or pInput/nBytes + ** should be converted to zInput. + */ + int (*xNext)( + sqlite3_tokenizer_cursor *pCursor, /* Tokenizer cursor */ + const char **ppToken, int *pnBytes, /* OUT: Normalized text for token */ + int *piStartOffset, /* OUT: Byte offset of token in input buffer */ + int *piEndOffset, /* OUT: Byte offset of end of token in input buffer */ + int *piPosition /* OUT: Number of tokens returned before this one */ + ); + + /*********************************************************************** + ** Methods below this point are only available if iVersion>=1. + */ + + /* + ** Configure the language id of a tokenizer cursor. + */ + int (*xLanguageid)(sqlite3_tokenizer_cursor *pCsr, int iLangid); +}; + +struct sqlite3_tokenizer { + const sqlite3_tokenizer_module *pModule; /* The module for this tokenizer */ + /* Tokenizer implementations will typically add additional fields */ +}; + +struct sqlite3_tokenizer_cursor { + sqlite3_tokenizer *pTokenizer; /* Tokenizer for this cursor. */ + /* Tokenizer implementations will typically add additional fields */ +}; + +int fts3_global_term_cnt(int iTerm, int iCol); +int fts3_term_cnt(int iTerm, int iCol); + + +#endif /* _FTS3_TOKENIZER_H_ */ + +/************** End of fts3_tokenizer.h **************************************/ +/************** Continuing where we left off in fts3Int.h ********************/ +/************** Include fts3_hash.h in the middle of fts3Int.h ***************/ +/************** Begin file fts3_hash.h ***************************************/ +/* +** 2001 September 22 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This is the header file for the generic hash-table implementation +** used in SQLite. We've modified it slightly to serve as a standalone +** hash table implementation for the full-text indexing module. +** +*/ +#ifndef _FTS3_HASH_H_ +#define _FTS3_HASH_H_ + +/* Forward declarations of structures. */ +typedef struct Fts3Hash Fts3Hash; +typedef struct Fts3HashElem Fts3HashElem; + +/* A complete hash table is an instance of the following structure. +** The internals of this structure are intended to be opaque -- client +** code should not attempt to access or modify the fields of this structure +** directly. Change this structure only by using the routines below. +** However, many of the "procedures" and "functions" for modifying and +** accessing this structure are really macros, so we can't really make +** this structure opaque. +*/ +struct Fts3Hash { + char keyClass; /* HASH_INT, _POINTER, _STRING, _BINARY */ + char copyKey; /* True if copy of key made on insert */ + int count; /* Number of entries in this table */ + Fts3HashElem *first; /* The first element of the array */ + int htsize; /* Number of buckets in the hash table */ + struct _fts3ht { /* the hash table */ + int count; /* Number of entries with this hash */ + Fts3HashElem *chain; /* Pointer to first entry with this hash */ + } *ht; +}; + +/* Each element in the hash table is an instance of the following +** structure. All elements are stored on a single doubly-linked list. +** +** Again, this structure is intended to be opaque, but it can't really +** be opaque because it is used by macros. +*/ +struct Fts3HashElem { + Fts3HashElem *next, *prev; /* Next and previous elements in the table */ + void *data; /* Data associated with this element */ + void *pKey; int nKey; /* Key associated with this element */ +}; + +/* +** There are 2 different modes of operation for a hash table: +** +** FTS3_HASH_STRING pKey points to a string that is nKey bytes long +** (including the null-terminator, if any). Case +** is respected in comparisons. +** +** FTS3_HASH_BINARY pKey points to binary data nKey bytes long. +** memcmp() is used to compare keys. +** +** A copy of the key is made if the copyKey parameter to fts3HashInit is 1. +*/ +#define FTS3_HASH_STRING 1 +#define FTS3_HASH_BINARY 2 + +/* +** Access routines. To delete, insert a NULL pointer. +*/ +SQLITE_PRIVATE void sqlite3Fts3HashInit(Fts3Hash *pNew, char keyClass, char copyKey); +SQLITE_PRIVATE void *sqlite3Fts3HashInsert(Fts3Hash*, const void *pKey, int nKey, void *pData); +SQLITE_PRIVATE void *sqlite3Fts3HashFind(const Fts3Hash*, const void *pKey, int nKey); +SQLITE_PRIVATE void sqlite3Fts3HashClear(Fts3Hash*); +SQLITE_PRIVATE Fts3HashElem *sqlite3Fts3HashFindElem(const Fts3Hash *, const void *, int); + +/* +** Shorthand for the functions above +*/ +#define fts3HashInit sqlite3Fts3HashInit +#define fts3HashInsert sqlite3Fts3HashInsert +#define fts3HashFind sqlite3Fts3HashFind +#define fts3HashClear sqlite3Fts3HashClear +#define fts3HashFindElem sqlite3Fts3HashFindElem + +/* +** Macros for looping over all elements of a hash table. The idiom is +** like this: +** +** Fts3Hash h; +** Fts3HashElem *p; +** ... +** for(p=fts3HashFirst(&h); p; p=fts3HashNext(p)){ +** SomeStructure *pData = fts3HashData(p); +** // do something with pData +** } +*/ +#define fts3HashFirst(H) ((H)->first) +#define fts3HashNext(E) ((E)->next) +#define fts3HashData(E) ((E)->data) +#define fts3HashKey(E) ((E)->pKey) +#define fts3HashKeysize(E) ((E)->nKey) + +/* +** Number of entries in a hash table +*/ +#define fts3HashCount(H) ((H)->count) + +#endif /* _FTS3_HASH_H_ */ + +/************** End of fts3_hash.h *******************************************/ +/************** Continuing where we left off in fts3Int.h ********************/ + +/* +** This constant determines the maximum depth of an FTS expression tree +** that the library will create and use. FTS uses recursion to perform +** various operations on the query tree, so the disadvantage of a large +** limit is that it may allow very large queries to use large amounts +** of stack space (perhaps causing a stack overflow). +*/ +#ifndef SQLITE_FTS3_MAX_EXPR_DEPTH +# define SQLITE_FTS3_MAX_EXPR_DEPTH 12 +#endif + + +/* +** This constant controls how often segments are merged. Once there are +** FTS3_MERGE_COUNT segments of level N, they are merged into a single +** segment of level N+1. +*/ +#define FTS3_MERGE_COUNT 16 + +/* +** This is the maximum amount of data (in bytes) to store in the +** Fts3Table.pendingTerms hash table. Normally, the hash table is +** populated as documents are inserted/updated/deleted in a transaction +** and used to create a new segment when the transaction is committed. +** However if this limit is reached midway through a transaction, a new +** segment is created and the hash table cleared immediately. +*/ +#define FTS3_MAX_PENDING_DATA (1*1024*1024) + +/* +** Macro to return the number of elements in an array. SQLite has a +** similar macro called ArraySize(). Use a different name to avoid +** a collision when building an amalgamation with built-in FTS3. +*/ +#define SizeofArray(X) ((int)(sizeof(X)/sizeof(X[0]))) + + +#ifndef MIN +# define MIN(x,y) ((x)<(y)?(x):(y)) +#endif +#ifndef MAX +# define MAX(x,y) ((x)>(y)?(x):(y)) +#endif + +/* +** Maximum length of a varint encoded integer. The varint format is different +** from that used by SQLite, so the maximum length is 10, not 9. +*/ +#define FTS3_VARINT_MAX 10 + +#define FTS3_BUFFER_PADDING 8 + +/* +** FTS4 virtual tables may maintain multiple indexes - one index of all terms +** in the document set and zero or more prefix indexes. All indexes are stored +** as one or more b+-trees in the %_segments and %_segdir tables. +** +** It is possible to determine which index a b+-tree belongs to based on the +** value stored in the "%_segdir.level" column. Given this value L, the index +** that the b+-tree belongs to is (L<<10). In other words, all b+-trees with +** level values between 0 and 1023 (inclusive) belong to index 0, all levels +** between 1024 and 2047 to index 1, and so on. +** +** It is considered impossible for an index to use more than 1024 levels. In +** theory though this may happen, but only after at least +** (FTS3_MERGE_COUNT^1024) separate flushes of the pending-terms tables. +*/ +#define FTS3_SEGDIR_MAXLEVEL 1024 +#define FTS3_SEGDIR_MAXLEVEL_STR "1024" + +/* +** The testcase() macro is only used by the amalgamation. If undefined, +** make it a no-op. +*/ +#ifndef testcase +# define testcase(X) +#endif + +/* +** Terminator values for position-lists and column-lists. +*/ +#define POS_COLUMN (1) /* Column-list terminator */ +#define POS_END (0) /* Position-list terminator */ + +/* +** The assert_fts3_nc() macro is similar to the assert() macro, except that it +** is used for assert() conditions that are true only if it can be +** guranteed that the database is not corrupt. +*/ +#ifdef SQLITE_DEBUG +SQLITE_API extern int sqlite3_fts3_may_be_corrupt; +# define assert_fts3_nc(x) assert(sqlite3_fts3_may_be_corrupt || (x)) +#else +# define assert_fts3_nc(x) assert(x) +#endif + +/* +** This section provides definitions to allow the +** FTS3 extension to be compiled outside of the +** amalgamation. +*/ +#ifndef SQLITE_AMALGAMATION +/* +** Macros indicating that conditional expressions are always true or +** false. +*/ +#if defined(SQLITE_COVERAGE_TEST) || defined(SQLITE_MUTATION_TEST) +# define SQLITE_OMIT_AUXILIARY_SAFETY_CHECKS 1 +#endif +#if defined(SQLITE_OMIT_AUXILIARY_SAFETY_CHECKS) +# define ALWAYS(X) (1) +# define NEVER(X) (0) +#elif !defined(NDEBUG) +# define ALWAYS(X) ((X)?1:(assert(0),0)) +# define NEVER(X) ((X)?(assert(0),1):0) +#else +# define ALWAYS(X) (X) +# define NEVER(X) (X) +#endif + +/* +** Internal types used by SQLite. +*/ +typedef unsigned char u8; /* 1-byte (or larger) unsigned integer */ +typedef short int i16; /* 2-byte (or larger) signed integer */ +typedef unsigned int u32; /* 4-byte unsigned integer */ +typedef sqlite3_uint64 u64; /* 8-byte unsigned integer */ +typedef sqlite3_int64 i64; /* 8-byte signed integer */ + +/* +** Macro used to suppress compiler warnings for unused parameters. +*/ +#define UNUSED_PARAMETER(x) (void)(x) + +/* +** The TESTONLY macro is used to enclose variable declarations or +** other bits of code that are needed to support the arguments +** within testcase() and assert() macros. +*/ +#if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST) +# define TESTONLY(X) X +#else +# define TESTONLY(X) +#endif + +#define LARGEST_INT64 (0xffffffff|(((i64)0x7fffffff)<<32)) +#define SMALLEST_INT64 (((i64)-1) - LARGEST_INT64) + +#define deliberate_fall_through + +/* +** Macros needed to provide flexible arrays in a portable way +*/ +#ifndef offsetof +# define offsetof(ST,M) ((size_t)((char*)&((ST*)0)->M - (char*)0)) +#endif +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +# define FLEXARRAY +#else +# define FLEXARRAY 1 +#endif + + +#endif /* SQLITE_AMALGAMATION */ + +#ifdef SQLITE_DEBUG +SQLITE_PRIVATE int sqlite3Fts3Corrupt(void); +# define FTS_CORRUPT_VTAB sqlite3Fts3Corrupt() +#else +# define FTS_CORRUPT_VTAB SQLITE_CORRUPT_VTAB +#endif + +typedef struct Fts3Table Fts3Table; +typedef struct Fts3Cursor Fts3Cursor; +typedef struct Fts3Expr Fts3Expr; +typedef struct Fts3Phrase Fts3Phrase; +typedef struct Fts3PhraseToken Fts3PhraseToken; + +typedef struct Fts3Doclist Fts3Doclist; +typedef struct Fts3SegFilter Fts3SegFilter; +typedef struct Fts3DeferredToken Fts3DeferredToken; +typedef struct Fts3SegReader Fts3SegReader; +typedef struct Fts3MultiSegReader Fts3MultiSegReader; + +typedef struct MatchinfoBuffer MatchinfoBuffer; + +/* +** A connection to a fulltext index is an instance of the following +** structure. The xCreate and xConnect methods create an instance +** of this structure and xDestroy and xDisconnect free that instance. +** All other methods receive a pointer to the structure as one of their +** arguments. +*/ +struct Fts3Table { + sqlite3_vtab base; /* Base class used by SQLite core */ + sqlite3 *db; /* The database connection */ + const char *zDb; /* logical database name */ + const char *zName; /* virtual table name */ + int nColumn; /* number of named columns in virtual table */ + char **azColumn; /* column names. malloced */ + u8 *abNotindexed; /* True for 'notindexed' columns */ + sqlite3_tokenizer *pTokenizer; /* tokenizer for inserts and queries */ + char *zContentTbl; /* content=xxx option, or NULL */ + char *zLanguageid; /* languageid=xxx option, or NULL */ + int nAutoincrmerge; /* Value configured by 'automerge' */ + u32 nLeafAdd; /* Number of leaf blocks added this trans */ + int bLock; /* Used to prevent recursive content= tbls */ + + /* Precompiled statements used by the implementation. Each of these + ** statements is run and reset within a single virtual table API call. + */ + sqlite3_stmt *aStmt[40]; + sqlite3_stmt *pSeekStmt; /* Cache for fts3CursorSeekStmt() */ + + char *zReadExprlist; + char *zWriteExprlist; + + int nNodeSize; /* Soft limit for node size */ + u8 bFts4; /* True for FTS4, false for FTS3 */ + u8 bHasStat; /* True if %_stat table exists (2==unknown) */ + u8 bHasDocsize; /* True if %_docsize table exists */ + u8 bDescIdx; /* True if doclists are in reverse order */ + u8 bIgnoreSavepoint; /* True to ignore xSavepoint invocations */ + int nPgsz; /* Page size for host database */ + char *zSegmentsTbl; /* Name of %_segments table */ + sqlite3_blob *pSegments; /* Blob handle open on %_segments table */ + int iSavepoint; + + /* + ** The following array of hash tables is used to buffer pending index + ** updates during transactions. All pending updates buffered at any one + ** time must share a common language-id (see the FTS4 langid= feature). + ** The current language id is stored in variable iPrevLangid. + ** + ** A single FTS4 table may have multiple full-text indexes. For each index + ** there is an entry in the aIndex[] array. Index 0 is an index of all the + ** terms that appear in the document set. Each subsequent index in aIndex[] + ** is an index of prefixes of a specific length. + ** + ** Variable nPendingData contains an estimate the memory consumed by the + ** pending data structures, including hash table overhead, but not including + ** malloc overhead. When nPendingData exceeds nMaxPendingData, all hash + ** tables are flushed to disk. Variable iPrevDocid is the docid of the most + ** recently inserted record. + */ + int nIndex; /* Size of aIndex[] */ + struct Fts3Index { + int nPrefix; /* Prefix length (0 for main terms index) */ + Fts3Hash hPending; /* Pending terms table for this index */ + } *aIndex; + int nMaxPendingData; /* Max pending data before flush to disk */ + int nPendingData; /* Current bytes of pending data */ + sqlite_int64 iPrevDocid; /* Docid of most recently inserted document */ + int iPrevLangid; /* Langid of recently inserted document */ + int bPrevDelete; /* True if last operation was a delete */ + +#if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST) + /* State variables used for validating that the transaction control + ** methods of the virtual table are called at appropriate times. These + ** values do not contribute to FTS functionality; they are used for + ** verifying the operation of the SQLite core. + */ + int inTransaction; /* True after xBegin but before xCommit/xRollback */ + int mxSavepoint; /* Largest valid xSavepoint integer */ +#endif + +#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) + /* True to disable the incremental doclist optimization. This is controlled + ** by special insert command 'test-no-incr-doclist'. */ + int bNoIncrDoclist; + + /* Number of segments in a level */ + int nMergeCount; +#endif +}; + +/* Macro to find the number of segments to merge */ +#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) +# define MergeCount(P) ((P)->nMergeCount) +#else +# define MergeCount(P) FTS3_MERGE_COUNT +#endif + +/* +** When the core wants to read from the virtual table, it creates a +** virtual table cursor (an instance of the following structure) using +** the xOpen method. Cursors are destroyed using the xClose method. +*/ +struct Fts3Cursor { + sqlite3_vtab_cursor base; /* Base class used by SQLite core */ + i16 eSearch; /* Search strategy (see below) */ + u8 isEof; /* True if at End Of Results */ + u8 isRequireSeek; /* True if must seek pStmt to %_content row */ + u8 bSeekStmt; /* True if pStmt is a seek */ + sqlite3_stmt *pStmt; /* Prepared statement in use by the cursor */ + Fts3Expr *pExpr; /* Parsed MATCH query string */ + int iLangid; /* Language being queried for */ + int nPhrase; /* Number of matchable phrases in query */ + Fts3DeferredToken *pDeferred; /* Deferred search tokens, if any */ + sqlite3_int64 iPrevId; /* Previous id read from aDoclist */ + char *pNextId; /* Pointer into the body of aDoclist */ + char *aDoclist; /* List of docids for full-text queries */ + int nDoclist; /* Size of buffer at aDoclist */ + u8 bDesc; /* True to sort in descending order */ + int eEvalmode; /* An FTS3_EVAL_XX constant */ + int nRowAvg; /* Average size of database rows, in pages */ + sqlite3_int64 nDoc; /* Documents in table */ + i64 iMinDocid; /* Minimum docid to return */ + i64 iMaxDocid; /* Maximum docid to return */ + int isMatchinfoNeeded; /* True when aMatchinfo[] needs filling in */ + MatchinfoBuffer *pMIBuffer; /* Buffer for matchinfo data */ +}; + +#define FTS3_EVAL_FILTER 0 +#define FTS3_EVAL_NEXT 1 +#define FTS3_EVAL_MATCHINFO 2 + +/* +** The Fts3Cursor.eSearch member is always set to one of the following. +** Actually, Fts3Cursor.eSearch can be greater than or equal to +** FTS3_FULLTEXT_SEARCH. If so, then Fts3Cursor.eSearch - 2 is the index +** of the column to be searched. For example, in +** +** CREATE VIRTUAL TABLE ex1 USING fts3(a,b,c,d); +** SELECT docid FROM ex1 WHERE b MATCH 'one two three'; +** +** Because the LHS of the MATCH operator is 2nd column "b", +** Fts3Cursor.eSearch will be set to FTS3_FULLTEXT_SEARCH+1. (+0 for a, +** +1 for b, +2 for c, +3 for d.) If the LHS of MATCH were "ex1" +** indicating that all columns should be searched, +** then eSearch would be set to FTS3_FULLTEXT_SEARCH+4. +*/ +#define FTS3_FULLSCAN_SEARCH 0 /* Linear scan of %_content table */ +#define FTS3_DOCID_SEARCH 1 /* Lookup by rowid on %_content table */ +#define FTS3_FULLTEXT_SEARCH 2 /* Full-text index search */ + +/* +** The lower 16-bits of the sqlite3_index_info.idxNum value set by +** the xBestIndex() method contains the Fts3Cursor.eSearch value described +** above. The upper 16-bits contain a combination of the following +** bits, used to describe extra constraints on full-text searches. +*/ +#define FTS3_HAVE_LANGID 0x00010000 /* languageid=? */ +#define FTS3_HAVE_DOCID_GE 0x00020000 /* docid>=? */ +#define FTS3_HAVE_DOCID_LE 0x00040000 /* docid<=? */ + +struct Fts3Doclist { + char *aAll; /* Array containing doclist (or NULL) */ + int nAll; /* Size of a[] in bytes */ + char *pNextDocid; /* Pointer to next docid */ + + sqlite3_int64 iDocid; /* Current docid (if pList!=0) */ + int bFreeList; /* True if pList should be sqlite3_free()d */ + char *pList; /* Pointer to position list following iDocid */ + int nList; /* Length of position list */ +}; + +/* +** A "phrase" is a sequence of one or more tokens that must match in +** sequence. A single token is the base case and the most common case. +** For a sequence of tokens contained in double-quotes (i.e. "one two three") +** nToken will be the number of tokens in the string. +*/ +struct Fts3PhraseToken { + char *z; /* Text of the token */ + int n; /* Number of bytes in buffer z */ + int isPrefix; /* True if token ends with a "*" character */ + int bFirst; /* True if token must appear at position 0 */ + + /* Variables above this point are populated when the expression is + ** parsed (by code in fts3_expr.c). Below this point the variables are + ** used when evaluating the expression. */ + Fts3DeferredToken *pDeferred; /* Deferred token object for this token */ + Fts3MultiSegReader *pSegcsr; /* Segment-reader for this token */ +}; + +struct Fts3Phrase { + /* Cache of doclist for this phrase. */ + Fts3Doclist doclist; + int bIncr; /* True if doclist is loaded incrementally */ + int iDoclistToken; + + /* Used by sqlite3Fts3EvalPhrasePoslist() if this is a descendent of an + ** OR condition. */ + char *pOrPoslist; + i64 iOrDocid; + + /* Variables below this point are populated by fts3_expr.c when parsing + ** a MATCH expression. Everything above is part of the evaluation phase. + */ + int nToken; /* Number of tokens in the phrase */ + int iColumn; /* Index of column this phrase must match */ + Fts3PhraseToken aToken[FLEXARRAY]; /* One for each token in the phrase */ +}; + +/* Size (in bytes) of an Fts3Phrase object large enough to hold N tokens */ +#define SZ_FTS3PHRASE(N) \ + (offsetof(Fts3Phrase,aToken)+(N)*sizeof(Fts3PhraseToken)) + +/* +** A tree of these objects forms the RHS of a MATCH operator. +** +** If Fts3Expr.eType is FTSQUERY_PHRASE and isLoaded is true, then aDoclist +** points to a malloced buffer, size nDoclist bytes, containing the results +** of this phrase query in FTS3 doclist format. As usual, the initial +** "Length" field found in doclists stored on disk is omitted from this +** buffer. +** +** Variable aMI is used only for FTSQUERY_NEAR nodes to store the global +** matchinfo data. If it is not NULL, it points to an array of size nCol*3, +** where nCol is the number of columns in the queried FTS table. The array +** is populated as follows: +** +** aMI[iCol*3 + 0] = Undefined +** aMI[iCol*3 + 1] = Number of occurrences +** aMI[iCol*3 + 2] = Number of rows containing at least one instance +** +** The aMI array is allocated using sqlite3_malloc(). It should be freed +** when the expression node is. +*/ +struct Fts3Expr { + int eType; /* One of the FTSQUERY_XXX values defined below */ + int nNear; /* Valid if eType==FTSQUERY_NEAR */ + Fts3Expr *pParent; /* pParent->pLeft==this or pParent->pRight==this */ + Fts3Expr *pLeft; /* Left operand */ + Fts3Expr *pRight; /* Right operand */ + Fts3Phrase *pPhrase; /* Valid if eType==FTSQUERY_PHRASE */ + + /* The following are used by the fts3_eval.c module. */ + sqlite3_int64 iDocid; /* Current docid */ + u8 bEof; /* True this expression is at EOF already */ + u8 bStart; /* True if iDocid is valid */ + u8 bDeferred; /* True if this expression is entirely deferred */ + + /* The following are used by the fts3_snippet.c module. */ + int iPhrase; /* Index of this phrase in matchinfo() results */ + u32 *aMI; /* See above */ +}; + +/* +** Candidate values for Fts3Query.eType. Note that the order of the first +** four values is in order of precedence when parsing expressions. For +** example, the following: +** +** "a OR b AND c NOT d NEAR e" +** +** is equivalent to: +** +** "a OR (b AND (c NOT (d NEAR e)))" +*/ +#define FTSQUERY_NEAR 1 +#define FTSQUERY_NOT 2 +#define FTSQUERY_AND 3 +#define FTSQUERY_OR 4 +#define FTSQUERY_PHRASE 5 + + +/* fts3_write.c */ +SQLITE_PRIVATE int sqlite3Fts3UpdateMethod(sqlite3_vtab*,int,sqlite3_value**,sqlite3_int64*); +SQLITE_PRIVATE int sqlite3Fts3PendingTermsFlush(Fts3Table *); +SQLITE_PRIVATE void sqlite3Fts3PendingTermsClear(Fts3Table *); +SQLITE_PRIVATE int sqlite3Fts3Optimize(Fts3Table *); +SQLITE_PRIVATE int sqlite3Fts3SegReaderNew(int, int, sqlite3_int64, + sqlite3_int64, sqlite3_int64, const char *, int, Fts3SegReader**); +SQLITE_PRIVATE int sqlite3Fts3SegReaderPending( + Fts3Table*,int,const char*,int,int,Fts3SegReader**); +SQLITE_PRIVATE void sqlite3Fts3SegReaderFree(Fts3SegReader *); +SQLITE_PRIVATE int sqlite3Fts3AllSegdirs(Fts3Table*, int, int, int, sqlite3_stmt **); +SQLITE_PRIVATE int sqlite3Fts3ReadBlock(Fts3Table*, sqlite3_int64, char **, int*, int*); + +SQLITE_PRIVATE int sqlite3Fts3SelectDoctotal(Fts3Table *, sqlite3_stmt **); +SQLITE_PRIVATE int sqlite3Fts3SelectDocsize(Fts3Table *, sqlite3_int64, sqlite3_stmt **); + +#ifndef SQLITE_DISABLE_FTS4_DEFERRED +SQLITE_PRIVATE void sqlite3Fts3FreeDeferredTokens(Fts3Cursor *); +SQLITE_PRIVATE int sqlite3Fts3DeferToken(Fts3Cursor *, Fts3PhraseToken *, int); +SQLITE_PRIVATE int sqlite3Fts3CacheDeferredDoclists(Fts3Cursor *); +SQLITE_PRIVATE void sqlite3Fts3FreeDeferredDoclists(Fts3Cursor *); +SQLITE_PRIVATE int sqlite3Fts3DeferredTokenList(Fts3DeferredToken *, char **, int *); +#else +# define sqlite3Fts3FreeDeferredTokens(x) +# define sqlite3Fts3DeferToken(x,y,z) SQLITE_OK +# define sqlite3Fts3CacheDeferredDoclists(x) SQLITE_OK +# define sqlite3Fts3FreeDeferredDoclists(x) +# define sqlite3Fts3DeferredTokenList(x,y,z) SQLITE_OK +#endif + +SQLITE_PRIVATE void sqlite3Fts3SegmentsClose(Fts3Table *); +SQLITE_PRIVATE int sqlite3Fts3MaxLevel(Fts3Table *, int *); + +/* Special values interpreted by sqlite3SegReaderCursor() */ +#define FTS3_SEGCURSOR_PENDING -1 +#define FTS3_SEGCURSOR_ALL -2 + +SQLITE_PRIVATE int sqlite3Fts3SegReaderStart(Fts3Table*, Fts3MultiSegReader*, Fts3SegFilter*); +SQLITE_PRIVATE int sqlite3Fts3SegReaderStep(Fts3Table *, Fts3MultiSegReader *); +SQLITE_PRIVATE void sqlite3Fts3SegReaderFinish(Fts3MultiSegReader *); + +SQLITE_PRIVATE int sqlite3Fts3SegReaderCursor(Fts3Table *, + int, int, int, const char *, int, int, int, Fts3MultiSegReader *); + +/* Flags allowed as part of the 4th argument to SegmentReaderIterate() */ +#define FTS3_SEGMENT_REQUIRE_POS 0x00000001 +#define FTS3_SEGMENT_IGNORE_EMPTY 0x00000002 +#define FTS3_SEGMENT_COLUMN_FILTER 0x00000004 +#define FTS3_SEGMENT_PREFIX 0x00000008 +#define FTS3_SEGMENT_SCAN 0x00000010 +#define FTS3_SEGMENT_FIRST 0x00000020 + +/* Type passed as 4th argument to SegmentReaderIterate() */ +struct Fts3SegFilter { + const char *zTerm; + int nTerm; + int iCol; + int flags; +}; + +struct Fts3MultiSegReader { + /* Used internally by sqlite3Fts3SegReaderXXX() calls */ + Fts3SegReader **apSegment; /* Array of Fts3SegReader objects */ + int nSegment; /* Size of apSegment array */ + int nAdvance; /* How many seg-readers to advance */ + Fts3SegFilter *pFilter; /* Pointer to filter object */ + char *aBuffer; /* Buffer to merge doclists in */ + i64 nBuffer; /* Allocated size of aBuffer[] in bytes */ + + int iColFilter; /* If >=0, filter for this column */ + int bRestart; + + /* Used by fts3.c only. */ + int nCost; /* Cost of running iterator */ + int bLookup; /* True if a lookup of a single entry. */ + + /* Output values. Valid only after Fts3SegReaderStep() returns SQLITE_ROW. */ + char *zTerm; /* Pointer to term buffer */ + int nTerm; /* Size of zTerm in bytes */ + char *aDoclist; /* Pointer to doclist buffer */ + int nDoclist; /* Size of aDoclist[] in bytes */ +}; + +SQLITE_PRIVATE int sqlite3Fts3Incrmerge(Fts3Table*,int,int); + +#define fts3GetVarint32(p, piVal) ( \ + (*(u8*)(p)&0x80) ? sqlite3Fts3GetVarint32(p, piVal) : (*piVal=*(u8*)(p), 1) \ +) + +/* fts3.c */ +SQLITE_PRIVATE void sqlite3Fts3ErrMsg(char**,const char*,...); +SQLITE_PRIVATE int sqlite3Fts3PutVarint(char *, sqlite3_int64); +SQLITE_PRIVATE int sqlite3Fts3GetVarint(const char *, sqlite_int64 *); +SQLITE_PRIVATE int sqlite3Fts3GetVarintU(const char *, sqlite_uint64 *); +SQLITE_PRIVATE int sqlite3Fts3GetVarintBounded(const char*,const char*,sqlite3_int64*); +SQLITE_PRIVATE int sqlite3Fts3GetVarint32(const char *, int *); +SQLITE_PRIVATE int sqlite3Fts3VarintLen(sqlite3_uint64); +SQLITE_PRIVATE void sqlite3Fts3Dequote(char *); +SQLITE_PRIVATE void sqlite3Fts3DoclistPrev(int,char*,int,char**,sqlite3_int64*,int*,u8*); +SQLITE_PRIVATE int sqlite3Fts3EvalPhraseStats(Fts3Cursor *, Fts3Expr *, u32 *); +SQLITE_PRIVATE int sqlite3Fts3FirstFilter(sqlite3_int64, char *, int, char *); +SQLITE_PRIVATE void sqlite3Fts3CreateStatTable(int*, Fts3Table*); +SQLITE_PRIVATE int sqlite3Fts3EvalTestDeferred(Fts3Cursor *pCsr, int *pRc); +SQLITE_PRIVATE int sqlite3Fts3ReadInt(const char *z, int *pnOut); + +/* fts3_tokenizer.c */ +SQLITE_PRIVATE const char *sqlite3Fts3NextToken(const char *, int *); +SQLITE_PRIVATE int sqlite3Fts3InitHashTable(sqlite3 *, Fts3Hash *, const char *); +SQLITE_PRIVATE int sqlite3Fts3InitTokenizer(Fts3Hash *pHash, const char *, + sqlite3_tokenizer **, char ** +); +SQLITE_PRIVATE int sqlite3Fts3IsIdChar(char); + +/* fts3_snippet.c */ +SQLITE_PRIVATE void sqlite3Fts3Offsets(sqlite3_context*, Fts3Cursor*); +SQLITE_PRIVATE void sqlite3Fts3Snippet(sqlite3_context *, Fts3Cursor *, const char *, + const char *, const char *, int, int +); +SQLITE_PRIVATE void sqlite3Fts3Matchinfo(sqlite3_context *, Fts3Cursor *, const char *); +SQLITE_PRIVATE void sqlite3Fts3MIBufferFree(MatchinfoBuffer *p); + +/* fts3_expr.c */ +SQLITE_PRIVATE int sqlite3Fts3ExprParse(sqlite3_tokenizer *, int, + char **, int, int, int, const char *, int, Fts3Expr **, char ** +); +SQLITE_PRIVATE void sqlite3Fts3ExprFree(Fts3Expr *); +#ifdef SQLITE_TEST +SQLITE_PRIVATE int sqlite3Fts3ExprInitTestInterface(sqlite3 *db, Fts3Hash*); +SQLITE_PRIVATE int sqlite3Fts3InitTerm(sqlite3 *db); +#endif +SQLITE_PRIVATE void *sqlite3Fts3MallocZero(i64 nByte); + +SQLITE_PRIVATE int sqlite3Fts3OpenTokenizer(sqlite3_tokenizer *, int, const char *, int, + sqlite3_tokenizer_cursor ** +); + +/* fts3_aux.c */ +SQLITE_PRIVATE int sqlite3Fts3InitAux(sqlite3 *db); + +SQLITE_PRIVATE void sqlite3Fts3EvalPhraseCleanup(Fts3Phrase *); + +SQLITE_PRIVATE int sqlite3Fts3MsrIncrStart( + Fts3Table*, Fts3MultiSegReader*, int, const char*, int); +SQLITE_PRIVATE int sqlite3Fts3MsrIncrNext( + Fts3Table *, Fts3MultiSegReader *, sqlite3_int64 *, char **, int *); +SQLITE_PRIVATE int sqlite3Fts3EvalPhrasePoslist(Fts3Cursor *, Fts3Expr *, int iCol, char **); +SQLITE_PRIVATE int sqlite3Fts3MsrOvfl(Fts3Cursor *, Fts3MultiSegReader *, int *); +SQLITE_PRIVATE int sqlite3Fts3MsrIncrRestart(Fts3MultiSegReader *pCsr); +SQLITE_PRIVATE int sqlite3Fts3MsrCancel(Fts3Cursor*, Fts3Expr*); + +/* fts3_tokenize_vtab.c */ +SQLITE_PRIVATE int sqlite3Fts3InitTok(sqlite3*, Fts3Hash *, void(*xDestroy)(void*)); + +/* fts3_unicode2.c (functions generated by parsing unicode text files) */ +#ifndef SQLITE_DISABLE_FTS3_UNICODE +SQLITE_PRIVATE int sqlite3FtsUnicodeFold(int, int); +SQLITE_PRIVATE int sqlite3FtsUnicodeIsalnum(int); +SQLITE_PRIVATE int sqlite3FtsUnicodeIsdiacritic(int); +#endif + +SQLITE_PRIVATE int sqlite3Fts3ExprIterate(Fts3Expr*, int (*x)(Fts3Expr*,int,void*), void*); + +SQLITE_PRIVATE int sqlite3Fts3IntegrityCheck(Fts3Table *p, int *pbOk); + +#endif /* !SQLITE_CORE || SQLITE_ENABLE_FTS3 */ +#endif /* _FTSINT_H */ + +/************** End of fts3Int.h *********************************************/ +/************** Continuing where we left off in fts3.c ***********************/ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +#if defined(SQLITE_ENABLE_FTS3) && !defined(SQLITE_CORE) +# define SQLITE_CORE 1 +#endif + + +/* #include "fts3.h" */ +#ifndef SQLITE_CORE +/* # include "sqlite3ext.h" */ + SQLITE_EXTENSION_INIT1 +#endif + +typedef struct Fts3HashWrapper Fts3HashWrapper; +struct Fts3HashWrapper { + Fts3Hash hash; /* Hash table */ + int nRef; /* Number of pointers to this object */ +}; + +static int fts3EvalNext(Fts3Cursor *pCsr); +static int fts3EvalStart(Fts3Cursor *pCsr); +static int fts3TermSegReaderCursor( + Fts3Cursor *, const char *, int, int, Fts3MultiSegReader **); + +/* +** This variable is set to false when running tests for which the on disk +** structures should not be corrupt. Otherwise, true. If it is false, extra +** assert() conditions in the fts3 code are activated - conditions that are +** only true if it is guaranteed that the fts3 database is not corrupt. +*/ +#ifdef SQLITE_DEBUG +SQLITE_API int sqlite3_fts3_may_be_corrupt = 1; +#endif + +/* +** Write a 64-bit variable-length integer to memory starting at p[0]. +** The length of data written will be between 1 and FTS3_VARINT_MAX bytes. +** The number of bytes written is returned. +*/ +SQLITE_PRIVATE int sqlite3Fts3PutVarint(char *p, sqlite_int64 v){ + unsigned char *q = (unsigned char *) p; + sqlite_uint64 vu = v; + do{ + *q++ = (unsigned char) ((vu & 0x7f) | 0x80); + vu >>= 7; + }while( vu!=0 ); + q[-1] &= 0x7f; /* turn off high bit in final byte */ + assert( q - (unsigned char *)p <= FTS3_VARINT_MAX ); + return (int) (q - (unsigned char *)p); +} + +#define GETVARINT_STEP(v, ptr, shift, mask1, mask2, var, ret) \ + v = (v & mask1) | ( (*(const unsigned char*)(ptr++)) << shift ); \ + if( (v & mask2)==0 ){ var = v; return ret; } +#define GETVARINT_INIT(v, ptr, shift, mask1, mask2, var, ret) \ + v = (*ptr++); \ + if( (v & mask2)==0 ){ var = v; return ret; } + +SQLITE_PRIVATE int sqlite3Fts3GetVarintU(const char *pBuf, sqlite_uint64 *v){ + const unsigned char *p = (const unsigned char*)pBuf; + const unsigned char *pStart = p; + u32 a; + u64 b; + int shift; + + GETVARINT_INIT(a, p, 0, 0x00, 0x80, *v, 1); + GETVARINT_STEP(a, p, 7, 0x7F, 0x4000, *v, 2); + GETVARINT_STEP(a, p, 14, 0x3FFF, 0x200000, *v, 3); + GETVARINT_STEP(a, p, 21, 0x1FFFFF, 0x10000000, *v, 4); + b = (a & 0x0FFFFFFF ); + + for(shift=28; shift<=63; shift+=7){ + u64 c = *p++; + b += (c&0x7F) << shift; + if( (c & 0x80)==0 ) break; + } + *v = b; + return (int)(p - pStart); +} + +/* +** Read a 64-bit variable-length integer from memory starting at p[0]. +** Return the number of bytes read, or 0 on error. +** The value is stored in *v. +*/ +SQLITE_PRIVATE int sqlite3Fts3GetVarint(const char *pBuf, sqlite_int64 *v){ + return sqlite3Fts3GetVarintU(pBuf, (sqlite3_uint64*)v); +} + +/* +** Read a 64-bit variable-length integer from memory starting at p[0] and +** not extending past pEnd[-1]. +** Return the number of bytes read, or 0 on error. +** The value is stored in *v. +*/ +SQLITE_PRIVATE int sqlite3Fts3GetVarintBounded( + const char *pBuf, + const char *pEnd, + sqlite_int64 *v +){ + const unsigned char *p = (const unsigned char*)pBuf; + const unsigned char *pStart = p; + const unsigned char *pX = (const unsigned char*)pEnd; + u64 b = 0; + int shift; + for(shift=0; shift<=63; shift+=7){ + u64 c = p=0 ); + return 5; +} + +/* +** Return the number of bytes required to encode v as a varint +*/ +SQLITE_PRIVATE int sqlite3Fts3VarintLen(sqlite3_uint64 v){ + int i = 0; + do{ + i++; + v >>= 7; + }while( v!=0 ); + return i; +} + +/* +** Convert an SQL-style quoted string into a normal string by removing +** the quote characters. The conversion is done in-place. If the +** input does not begin with a quote character, then this routine +** is a no-op. +** +** Examples: +** +** "abc" becomes abc +** 'xyz' becomes xyz +** [pqr] becomes pqr +** `mno` becomes mno +** +*/ +SQLITE_PRIVATE void sqlite3Fts3Dequote(char *z){ + char quote; /* Quote character (if any ) */ + + quote = z[0]; + if( quote=='[' || quote=='\'' || quote=='"' || quote=='`' ){ + int iIn = 1; /* Index of next byte to read from input */ + int iOut = 0; /* Index of next byte to write to output */ + + /* If the first byte was a '[', then the close-quote character is a ']' */ + if( quote=='[' ) quote = ']'; + + while( z[iIn] ){ + if( z[iIn]==quote ){ + if( z[iIn+1]!=quote ) break; + z[iOut++] = quote; + iIn += 2; + }else{ + z[iOut++] = z[iIn++]; + } + } + z[iOut] = '\0'; + } +} + +/* +** Read a single varint from the doclist at *pp and advance *pp to point +** to the first byte past the end of the varint. Add the value of the varint +** to *pVal. +*/ +static void fts3GetDeltaVarint(char **pp, sqlite3_int64 *pVal){ + sqlite3_int64 iVal; + *pp += sqlite3Fts3GetVarint(*pp, &iVal); + *pVal += iVal; +} + +/* +** When this function is called, *pp points to the first byte following a +** varint that is part of a doclist (or position-list, or any other list +** of varints). This function moves *pp to point to the start of that varint, +** and sets *pVal by the varint value. +** +** Argument pStart points to the first byte of the doclist that the +** varint is part of. +*/ +static void fts3GetReverseVarint( + char **pp, + char *pStart, + sqlite3_int64 *pVal +){ + sqlite3_int64 iVal; + char *p; + + /* Pointer p now points at the first byte past the varint we are + ** interested in. So, unless the doclist is corrupt, the 0x80 bit is + ** clear on character p[-1]. */ + for(p = (*pp)-2; p>=pStart && *p&0x80; p--); + p++; + *pp = p; + + sqlite3Fts3GetVarint(p, &iVal); + *pVal = iVal; +} + +/* +** The xDisconnect() virtual table method. +*/ +static int fts3DisconnectMethod(sqlite3_vtab *pVtab){ + Fts3Table *p = (Fts3Table *)pVtab; + int i; + + assert( p->nPendingData==0 ); + assert( p->pSegments==0 ); + + /* Free any prepared statements held */ + sqlite3_finalize(p->pSeekStmt); + for(i=0; iaStmt); i++){ + sqlite3_finalize(p->aStmt[i]); + } + sqlite3_free(p->zSegmentsTbl); + sqlite3_free(p->zReadExprlist); + sqlite3_free(p->zWriteExprlist); + sqlite3_free(p->zContentTbl); + sqlite3_free(p->zLanguageid); + + /* Invoke the tokenizer destructor to free the tokenizer. */ + p->pTokenizer->pModule->xDestroy(p->pTokenizer); + + sqlite3_free(p); + return SQLITE_OK; +} + +/* +** Write an error message into *pzErr +*/ +SQLITE_PRIVATE void sqlite3Fts3ErrMsg(char **pzErr, const char *zFormat, ...){ + va_list ap; + sqlite3_free(*pzErr); + va_start(ap, zFormat); + *pzErr = sqlite3_vmprintf(zFormat, ap); + va_end(ap); +} + +/* +** Construct one or more SQL statements from the format string given +** and then evaluate those statements. The success code is written +** into *pRc. +** +** If *pRc is initially non-zero then this routine is a no-op. +*/ +static void fts3DbExec( + int *pRc, /* Success code */ + sqlite3 *db, /* Database in which to run SQL */ + const char *zFormat, /* Format string for SQL */ + ... /* Arguments to the format string */ +){ + va_list ap; + char *zSql; + if( *pRc ) return; + va_start(ap, zFormat); + zSql = sqlite3_vmprintf(zFormat, ap); + va_end(ap); + if( zSql==0 ){ + *pRc = SQLITE_NOMEM; + }else{ + *pRc = sqlite3_exec(db, zSql, 0, 0, 0); + sqlite3_free(zSql); + } +} + +/* +** The xDestroy() virtual table method. +*/ +static int fts3DestroyMethod(sqlite3_vtab *pVtab){ + Fts3Table *p = (Fts3Table *)pVtab; + int rc = SQLITE_OK; /* Return code */ + const char *zDb = p->zDb; /* Name of database (e.g. "main", "temp") */ + sqlite3 *db = p->db; /* Database handle */ + + /* Drop the shadow tables */ + fts3DbExec(&rc, db, + "DROP TABLE IF EXISTS %Q.'%q_segments';" + "DROP TABLE IF EXISTS %Q.'%q_segdir';" + "DROP TABLE IF EXISTS %Q.'%q_docsize';" + "DROP TABLE IF EXISTS %Q.'%q_stat';" + "%s DROP TABLE IF EXISTS %Q.'%q_content';", + zDb, p->zName, + zDb, p->zName, + zDb, p->zName, + zDb, p->zName, + (p->zContentTbl ? "--" : ""), zDb,p->zName + ); + + /* If everything has worked, invoke fts3DisconnectMethod() to free the + ** memory associated with the Fts3Table structure and return SQLITE_OK. + ** Otherwise, return an SQLite error code. + */ + return (rc==SQLITE_OK ? fts3DisconnectMethod(pVtab) : rc); +} + + +/* +** Invoke sqlite3_declare_vtab() to declare the schema for the FTS3 table +** passed as the first argument. This is done as part of the xConnect() +** and xCreate() methods. +** +** If *pRc is non-zero when this function is called, it is a no-op. +** Otherwise, if an error occurs, an SQLite error code is stored in *pRc +** before returning. +*/ +static void fts3DeclareVtab(int *pRc, Fts3Table *p){ + if( *pRc==SQLITE_OK ){ + int i; /* Iterator variable */ + int rc; /* Return code */ + char *zSql; /* SQL statement passed to declare_vtab() */ + char *zCols; /* List of user defined columns */ + const char *zLanguageid; + + zLanguageid = (p->zLanguageid ? p->zLanguageid : "__langid"); + sqlite3_vtab_config(p->db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1); + sqlite3_vtab_config(p->db, SQLITE_VTAB_INNOCUOUS); + + /* Create a list of user columns for the virtual table */ + zCols = sqlite3_mprintf("%Q, ", p->azColumn[0]); + for(i=1; zCols && inColumn; i++){ + zCols = sqlite3_mprintf("%z%Q, ", zCols, p->azColumn[i]); + } + + /* Create the whole "CREATE TABLE" statement to pass to SQLite */ + zSql = sqlite3_mprintf( + "CREATE TABLE x(%s %Q HIDDEN, docid HIDDEN, %Q HIDDEN)", + zCols, p->zName, zLanguageid + ); + if( !zCols || !zSql ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_declare_vtab(p->db, zSql); + } + + sqlite3_free(zSql); + sqlite3_free(zCols); + *pRc = rc; + } +} + +/* +** Create the %_stat table if it does not already exist. +*/ +SQLITE_PRIVATE void sqlite3Fts3CreateStatTable(int *pRc, Fts3Table *p){ + fts3DbExec(pRc, p->db, + "CREATE TABLE IF NOT EXISTS %Q.'%q_stat'" + "(id INTEGER PRIMARY KEY, value BLOB);", + p->zDb, p->zName + ); + if( (*pRc)==SQLITE_OK ) p->bHasStat = 1; +} + +/* +** Create the backing store tables (%_content, %_segments and %_segdir) +** required by the FTS3 table passed as the only argument. This is done +** as part of the vtab xCreate() method. +** +** If the p->bHasDocsize boolean is true (indicating that this is an +** FTS4 table, not an FTS3 table) then also create the %_docsize and +** %_stat tables required by FTS4. +*/ +static int fts3CreateTables(Fts3Table *p){ + int rc = SQLITE_OK; /* Return code */ + int i; /* Iterator variable */ + sqlite3 *db = p->db; /* The database connection */ + + if( p->zContentTbl==0 ){ + const char *zLanguageid = p->zLanguageid; + char *zContentCols; /* Columns of %_content table */ + + /* Create a list of user columns for the content table */ + zContentCols = sqlite3_mprintf("docid INTEGER PRIMARY KEY"); + for(i=0; zContentCols && inColumn; i++){ + char *z = p->azColumn[i]; + zContentCols = sqlite3_mprintf("%z, 'c%d%q'", zContentCols, i, z); + } + if( zLanguageid && zContentCols ){ + zContentCols = sqlite3_mprintf("%z, langid", zContentCols, zLanguageid); + } + if( zContentCols==0 ) rc = SQLITE_NOMEM; + + /* Create the content table */ + fts3DbExec(&rc, db, + "CREATE TABLE %Q.'%q_content'(%s)", + p->zDb, p->zName, zContentCols + ); + sqlite3_free(zContentCols); + } + + /* Create other tables */ + fts3DbExec(&rc, db, + "CREATE TABLE %Q.'%q_segments'(blockid INTEGER PRIMARY KEY, block BLOB);", + p->zDb, p->zName + ); + fts3DbExec(&rc, db, + "CREATE TABLE %Q.'%q_segdir'(" + "level INTEGER," + "idx INTEGER," + "start_block INTEGER," + "leaves_end_block INTEGER," + "end_block INTEGER," + "root BLOB," + "PRIMARY KEY(level, idx)" + ");", + p->zDb, p->zName + ); + if( p->bHasDocsize ){ + fts3DbExec(&rc, db, + "CREATE TABLE %Q.'%q_docsize'(docid INTEGER PRIMARY KEY, size BLOB);", + p->zDb, p->zName + ); + } + assert( p->bHasStat==p->bFts4 ); + if( p->bHasStat ){ + sqlite3Fts3CreateStatTable(&rc, p); + } + return rc; +} + +/* +** Store the current database page-size in bytes in p->nPgsz. +** +** If *pRc is non-zero when this function is called, it is a no-op. +** Otherwise, if an error occurs, an SQLite error code is stored in *pRc +** before returning. +*/ +static void fts3DatabasePageSize(int *pRc, Fts3Table *p){ + if( *pRc==SQLITE_OK ){ + int rc; /* Return code */ + char *zSql; /* SQL text "PRAGMA %Q.page_size" */ + sqlite3_stmt *pStmt; /* Compiled "PRAGMA %Q.page_size" statement */ + + zSql = sqlite3_mprintf("PRAGMA %Q.page_size", p->zDb); + if( !zSql ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0); + if( rc==SQLITE_OK ){ + sqlite3_step(pStmt); + p->nPgsz = sqlite3_column_int(pStmt, 0); + rc = sqlite3_finalize(pStmt); + }else if( rc==SQLITE_AUTH ){ + p->nPgsz = 1024; + rc = SQLITE_OK; + } + } + assert( p->nPgsz>0 || rc!=SQLITE_OK ); + sqlite3_free(zSql); + *pRc = rc; + } +} + +/* +** "Special" FTS4 arguments are column specifications of the following form: +** +** = +** +** There may not be whitespace surrounding the "=" character. The +** term may be quoted, but the may not. +*/ +static int fts3IsSpecialColumn( + const char *z, + int *pnKey, + char **pzValue +){ + char *zValue; + const char *zCsr = z; + + while( *zCsr!='=' ){ + if( *zCsr=='\0' ) return 0; + zCsr++; + } + + *pnKey = (int)(zCsr-z); + zValue = sqlite3_mprintf("%s", &zCsr[1]); + if( zValue ){ + sqlite3Fts3Dequote(zValue); + } + *pzValue = zValue; + return 1; +} + +/* +** Append the output of a printf() style formatting to an existing string. +*/ +static void fts3Appendf( + int *pRc, /* IN/OUT: Error code */ + char **pz, /* IN/OUT: Pointer to string buffer */ + const char *zFormat, /* Printf format string to append */ + ... /* Arguments for printf format string */ +){ + if( *pRc==SQLITE_OK ){ + va_list ap; + char *z; + va_start(ap, zFormat); + z = sqlite3_vmprintf(zFormat, ap); + va_end(ap); + if( z && *pz ){ + char *z2 = sqlite3_mprintf("%s%s", *pz, z); + sqlite3_free(z); + z = z2; + } + if( z==0 ) *pRc = SQLITE_NOMEM; + sqlite3_free(*pz); + *pz = z; + } +} + +/* +** Return a copy of input string zInput enclosed in double-quotes (") and +** with all double quote characters escaped. For example: +** +** fts3QuoteId("un \"zip\"") -> "un \"\"zip\"\"" +** +** The pointer returned points to memory obtained from sqlite3_malloc(). It +** is the callers responsibility to call sqlite3_free() to release this +** memory. +*/ +static char *fts3QuoteId(char const *zInput){ + sqlite3_int64 nRet; + char *zRet; + nRet = 2 + (int)strlen(zInput)*2 + 1; + zRet = sqlite3_malloc64(nRet); + if( zRet ){ + int i; + char *z = zRet; + *(z++) = '"'; + for(i=0; zInput[i]; i++){ + if( zInput[i]=='"' ) *(z++) = '"'; + *(z++) = zInput[i]; + } + *(z++) = '"'; + *(z++) = '\0'; + } + return zRet; +} + +/* +** Return a list of comma separated SQL expressions and a FROM clause that +** could be used in a SELECT statement such as the following: +** +** SELECT FROM %_content AS x ... +** +** to return the docid, followed by each column of text data in order +** from left to write. If parameter zFunc is not NULL, then instead of +** being returned directly each column of text data is passed to an SQL +** function named zFunc first. For example, if zFunc is "unzip" and the +** table has the three user-defined columns "a", "b", and "c", the following +** string is returned: +** +** "docid, unzip(x.'a'), unzip(x.'b'), unzip(x.'c') FROM %_content AS x" +** +** The pointer returned points to a buffer allocated by sqlite3_malloc(). It +** is the responsibility of the caller to eventually free it. +** +** If *pRc is not SQLITE_OK when this function is called, it is a no-op (and +** a NULL pointer is returned). Otherwise, if an OOM error is encountered +** by this function, NULL is returned and *pRc is set to SQLITE_NOMEM. If +** no error occurs, *pRc is left unmodified. +*/ +static char *fts3ReadExprList(Fts3Table *p, const char *zFunc, int *pRc){ + char *zRet = 0; + char *zFree = 0; + char *zFunction; + int i; + + if( p->zContentTbl==0 ){ + if( !zFunc ){ + zFunction = ""; + }else{ + zFree = zFunction = fts3QuoteId(zFunc); + } + fts3Appendf(pRc, &zRet, "docid"); + for(i=0; inColumn; i++){ + fts3Appendf(pRc, &zRet, ",%s(x.'c%d%q')", zFunction, i, p->azColumn[i]); + } + if( p->zLanguageid ){ + fts3Appendf(pRc, &zRet, ", x.%Q", "langid"); + } + sqlite3_free(zFree); + }else{ + fts3Appendf(pRc, &zRet, "rowid"); + for(i=0; inColumn; i++){ + fts3Appendf(pRc, &zRet, ", x.'%q'", p->azColumn[i]); + } + if( p->zLanguageid ){ + fts3Appendf(pRc, &zRet, ", x.%Q", p->zLanguageid); + } + } + fts3Appendf(pRc, &zRet, " FROM '%q'.'%q%s' AS x", + p->zDb, + (p->zContentTbl ? p->zContentTbl : p->zName), + (p->zContentTbl ? "" : "_content") + ); + return zRet; +} + +/* +** Return a list of N comma separated question marks, where N is the number +** of columns in the %_content table (one for the docid plus one for each +** user-defined text column). +** +** If argument zFunc is not NULL, then all but the first question mark +** is preceded by zFunc and an open bracket, and followed by a closed +** bracket. For example, if zFunc is "zip" and the FTS3 table has three +** user-defined text columns, the following string is returned: +** +** "?, zip(?), zip(?), zip(?)" +** +** The pointer returned points to a buffer allocated by sqlite3_malloc(). It +** is the responsibility of the caller to eventually free it. +** +** If *pRc is not SQLITE_OK when this function is called, it is a no-op (and +** a NULL pointer is returned). Otherwise, if an OOM error is encountered +** by this function, NULL is returned and *pRc is set to SQLITE_NOMEM. If +** no error occurs, *pRc is left unmodified. +*/ +static char *fts3WriteExprList(Fts3Table *p, const char *zFunc, int *pRc){ + char *zRet = 0; + char *zFree = 0; + char *zFunction; + int i; + + if( !zFunc ){ + zFunction = ""; + }else{ + zFree = zFunction = fts3QuoteId(zFunc); + } + fts3Appendf(pRc, &zRet, "?"); + for(i=0; inColumn; i++){ + fts3Appendf(pRc, &zRet, ",%s(?)", zFunction); + } + if( p->zLanguageid ){ + fts3Appendf(pRc, &zRet, ", ?"); + } + sqlite3_free(zFree); + return zRet; +} + +/* +** Buffer z contains a positive integer value encoded as utf-8 text. +** Decode this value and store it in *pnOut, returning the number of bytes +** consumed. If an overflow error occurs return a negative value. +*/ +SQLITE_PRIVATE int sqlite3Fts3ReadInt(const char *z, int *pnOut){ + u64 iVal = 0; + int i; + for(i=0; z[i]>='0' && z[i]<='9'; i++){ + iVal = iVal*10 + (z[i] - '0'); + if( iVal>0x7FFFFFFF ) return -1; + } + *pnOut = (int)iVal; + return i; +} + +/* +** This function interprets the string at (*pp) as a non-negative integer +** value. It reads the integer and sets *pnOut to the value read, then +** sets *pp to point to the byte immediately following the last byte of +** the integer value. +** +** Only decimal digits ('0'..'9') may be part of an integer value. +** +** If *pp does not being with a decimal digit SQLITE_ERROR is returned and +** the output value undefined. Otherwise SQLITE_OK is returned. +** +** This function is used when parsing the "prefix=" FTS4 parameter. +*/ +static int fts3GobbleInt(const char **pp, int *pnOut){ + const int MAX_NPREFIX = 10000000; + int nInt = 0; /* Output value */ + int nByte; + nByte = sqlite3Fts3ReadInt(*pp, &nInt); + if( nInt>MAX_NPREFIX ){ + nInt = 0; + } + if( nByte==0 ){ + return SQLITE_ERROR; + } + *pnOut = nInt; + *pp += nByte; + return SQLITE_OK; +} + +/* +** This function is called to allocate an array of Fts3Index structures +** representing the indexes maintained by the current FTS table. FTS tables +** always maintain the main "terms" index, but may also maintain one or +** more "prefix" indexes, depending on the value of the "prefix=" parameter +** (if any) specified as part of the CREATE VIRTUAL TABLE statement. +** +** Argument zParam is passed the value of the "prefix=" option if one was +** specified, or NULL otherwise. +** +** If no error occurs, SQLITE_OK is returned and *apIndex set to point to +** the allocated array. *pnIndex is set to the number of elements in the +** array. If an error does occur, an SQLite error code is returned. +** +** Regardless of whether or not an error is returned, it is the responsibility +** of the caller to call sqlite3_free() on the output array to free it. +*/ +static int fts3PrefixParameter( + const char *zParam, /* ABC in prefix=ABC parameter to parse */ + int *pnIndex, /* OUT: size of *apIndex[] array */ + struct Fts3Index **apIndex /* OUT: Array of indexes for this table */ +){ + struct Fts3Index *aIndex; /* Allocated array */ + int nIndex = 1; /* Number of entries in array */ + + if( zParam && zParam[0] ){ + const char *p; + nIndex++; + for(p=zParam; *p; p++){ + if( *p==',' ) nIndex++; + } + } + + aIndex = sqlite3_malloc64(sizeof(struct Fts3Index) * nIndex); + *apIndex = aIndex; + if( !aIndex ){ + return SQLITE_NOMEM; + } + + memset(aIndex, 0, sizeof(struct Fts3Index) * nIndex); + if( zParam ){ + const char *p = zParam; + int i; + for(i=1; i=0 ); + if( nPrefix==0 ){ + nIndex--; + i--; + }else{ + aIndex[i].nPrefix = nPrefix; + } + p++; + } + } + + *pnIndex = nIndex; + return SQLITE_OK; +} + +/* +** This function is called when initializing an FTS4 table that uses the +** content=xxx option. It determines the number of and names of the columns +** of the new FTS4 table. +** +** The third argument passed to this function is the value passed to the +** config=xxx option (i.e. "xxx"). This function queries the database for +** a table of that name. If found, the output variables are populated +** as follows: +** +** *pnCol: Set to the number of columns table xxx has, +** +** *pnStr: Set to the total amount of space required to store a copy +** of each columns name, including the nul-terminator. +** +** *pazCol: Set to point to an array of *pnCol strings. Each string is +** the name of the corresponding column in table xxx. The array +** and its contents are allocated using a single allocation. It +** is the responsibility of the caller to free this allocation +** by eventually passing the *pazCol value to sqlite3_free(). +** +** If the table cannot be found, an error code is returned and the output +** variables are undefined. Or, if an OOM is encountered, SQLITE_NOMEM is +** returned (and the output variables are undefined). +*/ +static int fts3ContentColumns( + sqlite3 *db, /* Database handle */ + const char *zDb, /* Name of db (i.e. "main", "temp" etc.) */ + const char *zTbl, /* Name of content table */ + const char ***pazCol, /* OUT: Malloc'd array of column names */ + int *pnCol, /* OUT: Size of array *pazCol */ + int *pnStr, /* OUT: Bytes of string content */ + char **pzErr /* OUT: error message */ +){ + int rc = SQLITE_OK; /* Return code */ + char *zSql; /* "SELECT *" statement on zTbl */ + sqlite3_stmt *pStmt = 0; /* Compiled version of zSql */ + + zSql = sqlite3_mprintf("SELECT * FROM %Q.%Q", zDb, zTbl); + if( !zSql ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0); + if( rc!=SQLITE_OK ){ + sqlite3Fts3ErrMsg(pzErr, "%s", sqlite3_errmsg(db)); + } + } + sqlite3_free(zSql); + + if( rc==SQLITE_OK ){ + const char **azCol; /* Output array */ + sqlite3_int64 nStr = 0; /* Size of all column names (incl. 0x00) */ + int nCol; /* Number of table columns */ + int i; /* Used to iterate through columns */ + + /* Loop through the returned columns. Set nStr to the number of bytes of + ** space required to store a copy of each column name, including the + ** nul-terminator byte. */ + nCol = sqlite3_column_count(pStmt); + for(i=0; i module name ("fts3" or "fts4") +** argv[1] -> database name +** argv[2] -> table name +** argv[...] -> "column name" and other module argument fields. +*/ +static int fts3InitVtab( + int isCreate, /* True for xCreate, false for xConnect */ + sqlite3 *db, /* The SQLite database connection */ + void *pAux, /* Hash table containing tokenizers */ + int argc, /* Number of elements in argv array */ + const char * const *argv, /* xCreate/xConnect argument array */ + sqlite3_vtab **ppVTab, /* Write the resulting vtab structure here */ + char **pzErr /* Write any error message here */ +){ + Fts3Hash *pHash = &((Fts3HashWrapper*)pAux)->hash; + Fts3Table *p = 0; /* Pointer to allocated vtab */ + int rc = SQLITE_OK; /* Return code */ + int i; /* Iterator variable */ + sqlite3_int64 nByte; /* Size of allocation used for *p */ + int iCol; /* Column index */ + int nString = 0; /* Bytes required to hold all column names */ + int nCol = 0; /* Number of columns in the FTS table */ + char *zCsr; /* Space for holding column names */ + int nDb; /* Bytes required to hold database name */ + int nName; /* Bytes required to hold table name */ + int isFts4 = (argv[0][3]=='4'); /* True for FTS4, false for FTS3 */ + const char **aCol; /* Array of column names */ + sqlite3_tokenizer *pTokenizer = 0; /* Tokenizer for this table */ + + int nIndex = 0; /* Size of aIndex[] array */ + struct Fts3Index *aIndex = 0; /* Array of indexes for this table */ + + /* The results of parsing supported FTS4 key=value options: */ + int bNoDocsize = 0; /* True to omit %_docsize table */ + int bDescIdx = 0; /* True to store descending indexes */ + char *zPrefix = 0; /* Prefix parameter value (or NULL) */ + char *zCompress = 0; /* compress=? parameter (or NULL) */ + char *zUncompress = 0; /* uncompress=? parameter (or NULL) */ + char *zContent = 0; /* content=? parameter (or NULL) */ + char *zLanguageid = 0; /* languageid=? parameter (or NULL) */ + char **azNotindexed = 0; /* The set of notindexed= columns */ + int nNotindexed = 0; /* Size of azNotindexed[] array */ + + assert( strlen(argv[0])==4 ); + assert( (sqlite3_strnicmp(argv[0], "fts4", 4)==0 && isFts4) + || (sqlite3_strnicmp(argv[0], "fts3", 4)==0 && !isFts4) + ); + + nDb = (int)strlen(argv[1]) + 1; + nName = (int)strlen(argv[2]) + 1; + + nByte = sizeof(const char *) * (argc-2); + aCol = (const char **)sqlite3_malloc64(nByte); + if( aCol ){ + memset((void*)aCol, 0, nByte); + azNotindexed = (char **)sqlite3_malloc64(nByte); + } + if( azNotindexed ){ + memset(azNotindexed, 0, nByte); + } + if( !aCol || !azNotindexed ){ + rc = SQLITE_NOMEM; + goto fts3_init_out; + } + + /* Loop through all of the arguments passed by the user to the FTS3/4 + ** module (i.e. all the column names and special arguments). This loop + ** does the following: + ** + ** + Figures out the number of columns the FTSX table will have, and + ** the number of bytes of space that must be allocated to store copies + ** of the column names. + ** + ** + If there is a tokenizer specification included in the arguments, + ** initializes the tokenizer pTokenizer. + */ + for(i=3; rc==SQLITE_OK && i8 + && 0==sqlite3_strnicmp(z, "tokenize", 8) + && 0==sqlite3Fts3IsIdChar(z[8]) + ){ + rc = sqlite3Fts3InitTokenizer(pHash, &z[9], &pTokenizer, pzErr); + } + + /* Check if it is an FTS4 special argument. */ + else if( isFts4 && fts3IsSpecialColumn(z, &nKey, &zVal) ){ + struct Fts4Option { + const char *zOpt; + int nOpt; + } aFts4Opt[] = { + { "matchinfo", 9 }, /* 0 -> MATCHINFO */ + { "prefix", 6 }, /* 1 -> PREFIX */ + { "compress", 8 }, /* 2 -> COMPRESS */ + { "uncompress", 10 }, /* 3 -> UNCOMPRESS */ + { "order", 5 }, /* 4 -> ORDER */ + { "content", 7 }, /* 5 -> CONTENT */ + { "languageid", 10 }, /* 6 -> LANGUAGEID */ + { "notindexed", 10 } /* 7 -> NOTINDEXED */ + }; + + int iOpt; + if( !zVal ){ + rc = SQLITE_NOMEM; + }else{ + for(iOpt=0; iOptnOpt && !sqlite3_strnicmp(z, pOp->zOpt, pOp->nOpt) ){ + break; + } + } + switch( iOpt ){ + case 0: /* MATCHINFO */ + if( strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "fts3", 4) ){ + sqlite3Fts3ErrMsg(pzErr, "unrecognized matchinfo: %s", zVal); + rc = SQLITE_ERROR; + } + bNoDocsize = 1; + break; + + case 1: /* PREFIX */ + sqlite3_free(zPrefix); + zPrefix = zVal; + zVal = 0; + break; + + case 2: /* COMPRESS */ + sqlite3_free(zCompress); + zCompress = zVal; + zVal = 0; + break; + + case 3: /* UNCOMPRESS */ + sqlite3_free(zUncompress); + zUncompress = zVal; + zVal = 0; + break; + + case 4: /* ORDER */ + if( (strlen(zVal)!=3 || sqlite3_strnicmp(zVal, "asc", 3)) + && (strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "desc", 4)) + ){ + sqlite3Fts3ErrMsg(pzErr, "unrecognized order: %s", zVal); + rc = SQLITE_ERROR; + } + bDescIdx = (zVal[0]=='d' || zVal[0]=='D'); + break; + + case 5: /* CONTENT */ + sqlite3_free(zContent); + zContent = zVal; + zVal = 0; + break; + + case 6: /* LANGUAGEID */ + assert( iOpt==6 ); + sqlite3_free(zLanguageid); + zLanguageid = zVal; + zVal = 0; + break; + + case 7: /* NOTINDEXED */ + azNotindexed[nNotindexed++] = zVal; + zVal = 0; + break; + + default: + assert( iOpt==SizeofArray(aFts4Opt) ); + sqlite3Fts3ErrMsg(pzErr, "unrecognized parameter: %s", z); + rc = SQLITE_ERROR; + break; + } + sqlite3_free(zVal); + } + } + + /* Otherwise, the argument is a column name. */ + else { + nString += (int)(strlen(z) + 1); + aCol[nCol++] = z; + } + } + + /* If a content=xxx option was specified, the following: + ** + ** 1. Ignore any compress= and uncompress= options. + ** + ** 2. If no column names were specified as part of the CREATE VIRTUAL + ** TABLE statement, use all columns from the content table. + */ + if( rc==SQLITE_OK && zContent ){ + sqlite3_free(zCompress); + sqlite3_free(zUncompress); + zCompress = 0; + zUncompress = 0; + if( nCol==0 ){ + sqlite3_free((void*)aCol); + aCol = 0; + rc = fts3ContentColumns(db, argv[1], zContent,&aCol,&nCol,&nString,pzErr); + + /* If a languageid= option was specified, remove the language id + ** column from the aCol[] array. */ + if( rc==SQLITE_OK && zLanguageid ){ + int j; + for(j=0; jdb = db; + p->nColumn = nCol; + p->nPendingData = 0; + p->azColumn = (char **)&p[1]; + p->pTokenizer = pTokenizer; + p->nMaxPendingData = FTS3_MAX_PENDING_DATA; + p->bHasDocsize = (isFts4 && bNoDocsize==0); + p->bHasStat = (u8)isFts4; + p->bFts4 = (u8)isFts4; + p->bDescIdx = (u8)bDescIdx; + p->nAutoincrmerge = 0xff; /* 0xff means setting unknown */ + p->zContentTbl = zContent; + p->zLanguageid = zLanguageid; + zContent = 0; + zLanguageid = 0; + TESTONLY( p->inTransaction = -1 ); + TESTONLY( p->mxSavepoint = -1 ); + + p->aIndex = (struct Fts3Index *)&p->azColumn[nCol]; + memcpy(p->aIndex, aIndex, sizeof(struct Fts3Index) * nIndex); + p->nIndex = nIndex; + for(i=0; iaIndex[i].hPending, FTS3_HASH_STRING, 1); + } + p->abNotindexed = (u8 *)&p->aIndex[nIndex]; + + /* Fill in the zName and zDb fields of the vtab structure. */ + zCsr = (char *)&p->abNotindexed[nCol]; + p->zName = zCsr; + memcpy(zCsr, argv[2], nName); + zCsr += nName; + p->zDb = zCsr; + memcpy(zCsr, argv[1], nDb); + zCsr += nDb; + + /* Fill in the azColumn array */ + for(iCol=0; iCol0 ){ + memcpy(zCsr, z, n); + } + zCsr[n] = '\0'; + sqlite3Fts3Dequote(zCsr); + p->azColumn[iCol] = zCsr; + zCsr += n+1; + assert( zCsr <= &((char *)p)[nByte] ); + } + + /* Fill in the abNotindexed array */ + for(iCol=0; iColazColumn[iCol]); + for(i=0; iazColumn[iCol], zNot, n) + ){ + p->abNotindexed[iCol] = 1; + sqlite3_free(zNot); + azNotindexed[i] = 0; + } + } + } + for(i=0; izReadExprlist = fts3ReadExprList(p, zUncompress, &rc); + p->zWriteExprlist = fts3WriteExprList(p, zCompress, &rc); + if( rc!=SQLITE_OK ) goto fts3_init_out; + + /* If this is an xCreate call, create the underlying tables in the + ** database. TODO: For xConnect(), it could verify that said tables exist. + */ + if( isCreate ){ + rc = fts3CreateTables(p); + } + + /* Check to see if a legacy fts3 table has been "upgraded" by the + ** addition of a %_stat table so that it can use incremental merge. + */ + if( !isFts4 && !isCreate ){ + p->bHasStat = 2; + } + + /* Figure out the page-size for the database. This is required in order to + ** estimate the cost of loading large doclists from the database. */ + fts3DatabasePageSize(&rc, p); + p->nNodeSize = p->nPgsz-35; + +#if defined(SQLITE_DEBUG)||defined(SQLITE_TEST) + p->nMergeCount = FTS3_MERGE_COUNT; +#endif + + /* Declare the table schema to SQLite. */ + fts3DeclareVtab(&rc, p); + +fts3_init_out: + sqlite3_free(zPrefix); + sqlite3_free(aIndex); + sqlite3_free(zCompress); + sqlite3_free(zUncompress); + sqlite3_free(zContent); + sqlite3_free(zLanguageid); + for(i=0; ipModule->xDestroy(pTokenizer); + } + }else{ + assert( p->pSegments==0 ); + *ppVTab = &p->base; + } + return rc; +} + +/* +** The xConnect() and xCreate() methods for the virtual table. All the +** work is done in function fts3InitVtab(). +*/ +static int fts3ConnectMethod( + sqlite3 *db, /* Database connection */ + void *pAux, /* Pointer to tokenizer hash table */ + int argc, /* Number of elements in argv array */ + const char * const *argv, /* xCreate/xConnect argument array */ + sqlite3_vtab **ppVtab, /* OUT: New sqlite3_vtab object */ + char **pzErr /* OUT: sqlite3_malloc'd error message */ +){ + return fts3InitVtab(0, db, pAux, argc, argv, ppVtab, pzErr); +} +static int fts3CreateMethod( + sqlite3 *db, /* Database connection */ + void *pAux, /* Pointer to tokenizer hash table */ + int argc, /* Number of elements in argv array */ + const char * const *argv, /* xCreate/xConnect argument array */ + sqlite3_vtab **ppVtab, /* OUT: New sqlite3_vtab object */ + char **pzErr /* OUT: sqlite3_malloc'd error message */ +){ + return fts3InitVtab(1, db, pAux, argc, argv, ppVtab, pzErr); +} + +/* +** Set the pIdxInfo->estimatedRows variable to nRow. Unless this +** extension is currently being used by a version of SQLite too old to +** support estimatedRows. In that case this function is a no-op. +*/ +static void fts3SetEstimatedRows(sqlite3_index_info *pIdxInfo, i64 nRow){ +#if SQLITE_VERSION_NUMBER>=3008002 + if( sqlite3_libversion_number()>=3008002 ){ + pIdxInfo->estimatedRows = nRow; + } +#endif +} + +/* +** Set the SQLITE_INDEX_SCAN_UNIQUE flag in pIdxInfo->flags. Unless this +** extension is currently being used by a version of SQLite too old to +** support index-info flags. In that case this function is a no-op. +*/ +static void fts3SetUniqueFlag(sqlite3_index_info *pIdxInfo){ +#if SQLITE_VERSION_NUMBER>=3008012 + if( sqlite3_libversion_number()>=3008012 ){ + pIdxInfo->idxFlags |= SQLITE_INDEX_SCAN_UNIQUE; + } +#endif +} + +/* +** Implementation of the xBestIndex method for FTS3 tables. There +** are three possible strategies, in order of preference: +** +** 1. Direct lookup by rowid or docid. +** 2. Full-text search using a MATCH operator on a non-docid column. +** 3. Linear scan of %_content table. +*/ +static int fts3BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){ + Fts3Table *p = (Fts3Table *)pVTab; + int i; /* Iterator variable */ + int iCons = -1; /* Index of constraint to use */ + + int iLangidCons = -1; /* Index of langid=x constraint, if present */ + int iDocidGe = -1; /* Index of docid>=x constraint, if present */ + int iDocidLe = -1; /* Index of docid<=x constraint, if present */ + int iIdx; + + if( p->bLock ){ + return SQLITE_ERROR; + } + + /* By default use a full table scan. This is an expensive option, + ** so search through the constraints to see if a more efficient + ** strategy is possible. + */ + pInfo->idxNum = FTS3_FULLSCAN_SEARCH; + pInfo->estimatedCost = 5000000; + for(i=0; inConstraint; i++){ + int bDocid; /* True if this constraint is on docid */ + struct sqlite3_index_constraint *pCons = &pInfo->aConstraint[i]; + if( pCons->usable==0 ){ + if( pCons->op==SQLITE_INDEX_CONSTRAINT_MATCH ){ + /* There exists an unusable MATCH constraint. This means that if + ** the planner does elect to use the results of this call as part + ** of the overall query plan the user will see an "unable to use + ** function MATCH in the requested context" error. To discourage + ** this, return a very high cost here. */ + pInfo->idxNum = FTS3_FULLSCAN_SEARCH; + pInfo->estimatedCost = 1e50; + fts3SetEstimatedRows(pInfo, ((sqlite3_int64)1) << 50); + return SQLITE_OK; + } + continue; + } + + bDocid = (pCons->iColumn<0 || pCons->iColumn==p->nColumn+1); + + /* A direct lookup on the rowid or docid column. Assign a cost of 1.0. */ + if( iCons<0 && pCons->op==SQLITE_INDEX_CONSTRAINT_EQ && bDocid ){ + pInfo->idxNum = FTS3_DOCID_SEARCH; + pInfo->estimatedCost = 1.0; + iCons = i; + } + + /* A MATCH constraint. Use a full-text search. + ** + ** If there is more than one MATCH constraint available, use the first + ** one encountered. If there is both a MATCH constraint and a direct + ** rowid/docid lookup, prefer the MATCH strategy. This is done even + ** though the rowid/docid lookup is faster than a MATCH query, selecting + ** it would lead to an "unable to use function MATCH in the requested + ** context" error. + */ + if( pCons->op==SQLITE_INDEX_CONSTRAINT_MATCH + && pCons->iColumn>=0 && pCons->iColumn<=p->nColumn + ){ + pInfo->idxNum = FTS3_FULLTEXT_SEARCH + pCons->iColumn; + pInfo->estimatedCost = 2.0; + iCons = i; + } + + /* Equality constraint on the langid column */ + if( pCons->op==SQLITE_INDEX_CONSTRAINT_EQ + && pCons->iColumn==p->nColumn + 2 + ){ + iLangidCons = i; + } + + if( bDocid ){ + switch( pCons->op ){ + case SQLITE_INDEX_CONSTRAINT_GE: + case SQLITE_INDEX_CONSTRAINT_GT: + iDocidGe = i; + break; + + case SQLITE_INDEX_CONSTRAINT_LE: + case SQLITE_INDEX_CONSTRAINT_LT: + iDocidLe = i; + break; + } + } + } + + /* If using a docid=? or rowid=? strategy, set the UNIQUE flag. */ + if( pInfo->idxNum==FTS3_DOCID_SEARCH ) fts3SetUniqueFlag(pInfo); + + iIdx = 1; + if( iCons>=0 ){ + pInfo->aConstraintUsage[iCons].argvIndex = iIdx++; + pInfo->aConstraintUsage[iCons].omit = 1; + } + if( iLangidCons>=0 ){ + pInfo->idxNum |= FTS3_HAVE_LANGID; + pInfo->aConstraintUsage[iLangidCons].argvIndex = iIdx++; + } + if( iDocidGe>=0 ){ + pInfo->idxNum |= FTS3_HAVE_DOCID_GE; + pInfo->aConstraintUsage[iDocidGe].argvIndex = iIdx++; + } + if( iDocidLe>=0 ){ + pInfo->idxNum |= FTS3_HAVE_DOCID_LE; + pInfo->aConstraintUsage[iDocidLe].argvIndex = iIdx++; + } + + /* Regardless of the strategy selected, FTS can deliver rows in rowid (or + ** docid) order. Both ascending and descending are possible. + */ + if( pInfo->nOrderBy==1 ){ + struct sqlite3_index_orderby *pOrder = &pInfo->aOrderBy[0]; + if( pOrder->iColumn<0 || pOrder->iColumn==p->nColumn+1 ){ + if( pOrder->desc ){ + pInfo->idxStr = "DESC"; + }else{ + pInfo->idxStr = "ASC"; + } + pInfo->orderByConsumed = 1; + } + } + + assert( p->pSegments==0 ); + return SQLITE_OK; +} + +/* +** Implementation of xOpen method. +*/ +static int fts3OpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){ + sqlite3_vtab_cursor *pCsr; /* Allocated cursor */ + + UNUSED_PARAMETER(pVTab); + + /* Allocate a buffer large enough for an Fts3Cursor structure. If the + ** allocation succeeds, zero it and return SQLITE_OK. Otherwise, + ** if the allocation fails, return SQLITE_NOMEM. + */ + *ppCsr = pCsr = (sqlite3_vtab_cursor *)sqlite3_malloc(sizeof(Fts3Cursor)); + if( !pCsr ){ + return SQLITE_NOMEM; + } + memset(pCsr, 0, sizeof(Fts3Cursor)); + return SQLITE_OK; +} + +/* +** Finalize the statement handle at pCsr->pStmt. +** +** Or, if that statement handle is one created by fts3CursorSeekStmt(), +** and the Fts3Table.pSeekStmt slot is currently NULL, save the statement +** pointer there instead of finalizing it. +*/ +static void fts3CursorFinalizeStmt(Fts3Cursor *pCsr){ + if( pCsr->bSeekStmt ){ + Fts3Table *p = (Fts3Table *)pCsr->base.pVtab; + if( p->pSeekStmt==0 ){ + p->pSeekStmt = pCsr->pStmt; + sqlite3_reset(pCsr->pStmt); + pCsr->pStmt = 0; + } + pCsr->bSeekStmt = 0; + } + sqlite3_finalize(pCsr->pStmt); +} + +/* +** Free all resources currently held by the cursor passed as the only +** argument. +*/ +static void fts3ClearCursor(Fts3Cursor *pCsr){ + fts3CursorFinalizeStmt(pCsr); + sqlite3Fts3FreeDeferredTokens(pCsr); + sqlite3_free(pCsr->aDoclist); + sqlite3Fts3MIBufferFree(pCsr->pMIBuffer); + sqlite3Fts3ExprFree(pCsr->pExpr); + memset(&(&pCsr->base)[1], 0, sizeof(Fts3Cursor)-sizeof(sqlite3_vtab_cursor)); +} + +/* +** Close the cursor. For additional information see the documentation +** on the xClose method of the virtual table interface. +*/ +static int fts3CloseMethod(sqlite3_vtab_cursor *pCursor){ + Fts3Cursor *pCsr = (Fts3Cursor *)pCursor; + assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 ); + fts3ClearCursor(pCsr); + assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 ); + sqlite3_free(pCsr); + return SQLITE_OK; +} + +/* +** If pCsr->pStmt has not been prepared (i.e. if pCsr->pStmt==0), then +** compose and prepare an SQL statement of the form: +** +** "SELECT FROM %_content WHERE rowid = ?" +** +** (or the equivalent for a content=xxx table) and set pCsr->pStmt to +** it. If an error occurs, return an SQLite error code. +*/ +static int fts3CursorSeekStmt(Fts3Cursor *pCsr){ + int rc = SQLITE_OK; + if( pCsr->pStmt==0 ){ + Fts3Table *p = (Fts3Table *)pCsr->base.pVtab; + char *zSql; + if( p->pSeekStmt ){ + pCsr->pStmt = p->pSeekStmt; + p->pSeekStmt = 0; + }else{ + zSql = sqlite3_mprintf("SELECT %s WHERE rowid = ?", p->zReadExprlist); + if( !zSql ) return SQLITE_NOMEM; + p->bLock++; + rc = sqlite3_prepare_v3( + p->db, zSql,-1,SQLITE_PREPARE_PERSISTENT,&pCsr->pStmt,0 + ); + p->bLock--; + sqlite3_free(zSql); + } + if( rc==SQLITE_OK ) pCsr->bSeekStmt = 1; + } + return rc; +} + +/* +** Position the pCsr->pStmt statement so that it is on the row +** of the %_content table that contains the last match. Return +** SQLITE_OK on success. +*/ +static int fts3CursorSeek(sqlite3_context *pContext, Fts3Cursor *pCsr){ + int rc = SQLITE_OK; + if( pCsr->isRequireSeek ){ + rc = fts3CursorSeekStmt(pCsr); + if( rc==SQLITE_OK ){ + Fts3Table *pTab = (Fts3Table*)pCsr->base.pVtab; + pTab->bLock++; + sqlite3_bind_int64(pCsr->pStmt, 1, pCsr->iPrevId); + pCsr->isRequireSeek = 0; + if( SQLITE_ROW==sqlite3_step(pCsr->pStmt) ){ + pTab->bLock--; + return SQLITE_OK; + }else{ + pTab->bLock--; + rc = sqlite3_reset(pCsr->pStmt); + if( rc==SQLITE_OK && ((Fts3Table *)pCsr->base.pVtab)->zContentTbl==0 ){ + /* If no row was found and no error has occurred, then the %_content + ** table is missing a row that is present in the full-text index. + ** The data structures are corrupt. */ + rc = FTS_CORRUPT_VTAB; + pCsr->isEof = 1; + } + } + } + } + + if( rc!=SQLITE_OK && pContext ){ + sqlite3_result_error_code(pContext, rc); + } + return rc; +} + +/* +** This function is used to process a single interior node when searching +** a b-tree for a term or term prefix. The node data is passed to this +** function via the zNode/nNode parameters. The term to search for is +** passed in zTerm/nTerm. +** +** If piFirst is not NULL, then this function sets *piFirst to the blockid +** of the child node that heads the sub-tree that may contain the term. +** +** If piLast is not NULL, then *piLast is set to the right-most child node +** that heads a sub-tree that may contain a term for which zTerm/nTerm is +** a prefix. +** +** If an OOM error occurs, SQLITE_NOMEM is returned. Otherwise, SQLITE_OK. +*/ +static int fts3ScanInteriorNode( + const char *zTerm, /* Term to select leaves for */ + int nTerm, /* Size of term zTerm in bytes */ + const char *zNode, /* Buffer containing segment interior node */ + int nNode, /* Size of buffer at zNode */ + sqlite3_int64 *piFirst, /* OUT: Selected child node */ + sqlite3_int64 *piLast /* OUT: Selected child node */ +){ + int rc = SQLITE_OK; /* Return code */ + const char *zCsr = zNode; /* Cursor to iterate through node */ + const char *zEnd = &zCsr[nNode];/* End of interior node buffer */ + char *zBuffer = 0; /* Buffer to load terms into */ + i64 nAlloc = 0; /* Size of allocated buffer */ + int isFirstTerm = 1; /* True when processing first term on page */ + u64 iChild; /* Block id of child node to descend to */ + int nBuffer = 0; /* Total term size */ + + /* Skip over the 'height' varint that occurs at the start of every + ** interior node. Then load the blockid of the left-child of the b-tree + ** node into variable iChild. + ** + ** Even if the data structure on disk is corrupted, this (reading two + ** varints from the buffer) does not risk an overread. If zNode is a + ** root node, then the buffer comes from a SELECT statement. SQLite does + ** not make this guarantee explicitly, but in practice there are always + ** either more than 20 bytes of allocated space following the nNode bytes of + ** contents, or two zero bytes. Or, if the node is read from the %_segments + ** table, then there are always 20 bytes of zeroed padding following the + ** nNode bytes of content (see sqlite3Fts3ReadBlock() for details). + */ + zCsr += sqlite3Fts3GetVarintU(zCsr, &iChild); + zCsr += sqlite3Fts3GetVarintU(zCsr, &iChild); + if( zCsr>zEnd ){ + return FTS_CORRUPT_VTAB; + } + + while( zCsrnBuffer ){ + rc = FTS_CORRUPT_VTAB; + goto finish_scan; + } + } + isFirstTerm = 0; + zCsr += fts3GetVarint32(zCsr, &nSuffix); + + assert( nPrefix>=0 && nSuffix>=0 ); + if( nPrefix>zCsr-zNode || nSuffix>zEnd-zCsr || nSuffix==0 ){ + rc = FTS_CORRUPT_VTAB; + goto finish_scan; + } + if( (i64)nPrefix+nSuffix>nAlloc ){ + char *zNew; + nAlloc = ((i64)nPrefix+nSuffix) * 2; + zNew = (char *)sqlite3_realloc64(zBuffer, nAlloc); + if( !zNew ){ + rc = SQLITE_NOMEM; + goto finish_scan; + } + zBuffer = zNew; + } + assert( zBuffer ); + memcpy(&zBuffer[nPrefix], zCsr, nSuffix); + nBuffer = nPrefix + nSuffix; + zCsr += nSuffix; + + /* Compare the term we are searching for with the term just loaded from + ** the interior node. If the specified term is greater than or equal + ** to the term from the interior node, then all terms on the sub-tree + ** headed by node iChild are smaller than zTerm. No need to search + ** iChild. + ** + ** If the interior node term is larger than the specified term, then + ** the tree headed by iChild may contain the specified term. + */ + cmp = memcmp(zTerm, zBuffer, (nBuffer>nTerm ? nTerm : nBuffer)); + if( piFirst && (cmp<0 || (cmp==0 && nBuffer>nTerm)) ){ + *piFirst = (i64)iChild; + piFirst = 0; + } + + if( piLast && cmp<0 ){ + *piLast = (i64)iChild; + piLast = 0; + } + + iChild++; + }; + + if( piFirst ) *piFirst = (i64)iChild; + if( piLast ) *piLast = (i64)iChild; + + finish_scan: + sqlite3_free(zBuffer); + return rc; +} + + +/* +** The buffer pointed to by argument zNode (size nNode bytes) contains an +** interior node of a b-tree segment. The zTerm buffer (size nTerm bytes) +** contains a term. This function searches the sub-tree headed by the zNode +** node for the range of leaf nodes that may contain the specified term +** or terms for which the specified term is a prefix. +** +** If piLeaf is not NULL, then *piLeaf is set to the blockid of the +** left-most leaf node in the tree that may contain the specified term. +** If piLeaf2 is not NULL, then *piLeaf2 is set to the blockid of the +** right-most leaf node that may contain a term for which the specified +** term is a prefix. +** +** It is possible that the range of returned leaf nodes does not contain +** the specified term or any terms for which it is a prefix. However, if the +** segment does contain any such terms, they are stored within the identified +** range. Because this function only inspects interior segment nodes (and +** never loads leaf nodes into memory), it is not possible to be sure. +** +** If an error occurs, an error code other than SQLITE_OK is returned. +*/ +static int fts3SelectLeaf( + Fts3Table *p, /* Virtual table handle */ + const char *zTerm, /* Term to select leaves for */ + int nTerm, /* Size of term zTerm in bytes */ + const char *zNode, /* Buffer containing segment interior node */ + int nNode, /* Size of buffer at zNode */ + sqlite3_int64 *piLeaf, /* Selected leaf node */ + sqlite3_int64 *piLeaf2 /* Selected leaf node */ +){ + int rc = SQLITE_OK; /* Return code */ + int iHeight; /* Height of this node in tree */ + + assert( piLeaf || piLeaf2 ); + + fts3GetVarint32(zNode, &iHeight); + rc = fts3ScanInteriorNode(zTerm, nTerm, zNode, nNode, piLeaf, piLeaf2); + assert_fts3_nc( !piLeaf2 || !piLeaf || rc!=SQLITE_OK || (*piLeaf<=*piLeaf2) ); + + if( rc==SQLITE_OK && iHeight>1 ){ + char *zBlob = 0; /* Blob read from %_segments table */ + int nBlob = 0; /* Size of zBlob in bytes */ + + if( piLeaf && piLeaf2 && (*piLeaf!=*piLeaf2) ){ + rc = sqlite3Fts3ReadBlock(p, *piLeaf, &zBlob, &nBlob, 0); + if( rc==SQLITE_OK ){ + rc = fts3SelectLeaf(p, zTerm, nTerm, zBlob, nBlob, piLeaf, 0); + } + sqlite3_free(zBlob); + piLeaf = 0; + zBlob = 0; + } + + if( rc==SQLITE_OK ){ + rc = sqlite3Fts3ReadBlock(p, piLeaf?*piLeaf:*piLeaf2, &zBlob, &nBlob, 0); + } + if( rc==SQLITE_OK ){ + int iNewHeight = 0; + fts3GetVarint32(zBlob, &iNewHeight); + if( iNewHeight>=iHeight ){ + rc = FTS_CORRUPT_VTAB; + }else{ + rc = fts3SelectLeaf(p, zTerm, nTerm, zBlob, nBlob, piLeaf, piLeaf2); + } + } + sqlite3_free(zBlob); + } + + return rc; +} + +/* +** This function is used to create delta-encoded serialized lists of FTS3 +** varints. Each call to this function appends a single varint to a list. +*/ +static void fts3PutDeltaVarint( + char **pp, /* IN/OUT: Output pointer */ + sqlite3_int64 *piPrev, /* IN/OUT: Previous value written to list */ + sqlite3_int64 iVal /* Write this value to the list */ +){ + assert_fts3_nc( iVal-*piPrev > 0 || (*piPrev==0 && iVal==0) ); + *pp += sqlite3Fts3PutVarint(*pp, iVal-*piPrev); + *piPrev = iVal; +} + +/* +** When this function is called, *ppPoslist is assumed to point to the +** start of a position-list. After it returns, *ppPoslist points to the +** first byte after the position-list. +** +** A position list is list of positions (delta encoded) and columns for +** a single document record of a doclist. So, in other words, this +** routine advances *ppPoslist so that it points to the next docid in +** the doclist, or to the first byte past the end of the doclist. +** +** If pp is not NULL, then the contents of the position list are copied +** to *pp. *pp is set to point to the first byte past the last byte copied +** before this function returns. +*/ +static void fts3PoslistCopy(char **pp, char **ppPoslist){ + char *pEnd = *ppPoslist; + char c = 0; + + /* The end of a position list is marked by a zero encoded as an FTS3 + ** varint. A single POS_END (0) byte. Except, if the 0 byte is preceded by + ** a byte with the 0x80 bit set, then it is not a varint 0, but the tail + ** of some other, multi-byte, value. + ** + ** The following while-loop moves pEnd to point to the first byte that is not + ** immediately preceded by a byte with the 0x80 bit set. Then increments + ** pEnd once more so that it points to the byte immediately following the + ** last byte in the position-list. + */ + while( *pEnd | c ){ + c = *pEnd++ & 0x80; + testcase( c!=0 && (*pEnd)==0 ); + } + pEnd++; /* Advance past the POS_END terminator byte */ + + if( pp ){ + int n = (int)(pEnd - *ppPoslist); + char *p = *pp; + memcpy(p, *ppPoslist, n); + p += n; + *pp = p; + } + *ppPoslist = pEnd; +} + +/* +** When this function is called, *ppPoslist is assumed to point to the +** start of a column-list. After it returns, *ppPoslist points to the +** to the terminator (POS_COLUMN or POS_END) byte of the column-list. +** +** A column-list is list of delta-encoded positions for a single column +** within a single document within a doclist. +** +** The column-list is terminated either by a POS_COLUMN varint (1) or +** a POS_END varint (0). This routine leaves *ppPoslist pointing to +** the POS_COLUMN or POS_END that terminates the column-list. +** +** If pp is not NULL, then the contents of the column-list are copied +** to *pp. *pp is set to point to the first byte past the last byte copied +** before this function returns. The POS_COLUMN or POS_END terminator +** is not copied into *pp. +*/ +static void fts3ColumnlistCopy(char **pp, char **ppPoslist){ + char *pEnd = *ppPoslist; + char c = 0; + + /* A column-list is terminated by either a 0x01 or 0x00 byte that is + ** not part of a multi-byte varint. + */ + while( 0xFE & (*pEnd | c) ){ + c = *pEnd++ & 0x80; + testcase( c!=0 && ((*pEnd)&0xfe)==0 ); + } + if( pp ){ + int n = (int)(pEnd - *ppPoslist); + char *p = *pp; + memcpy(p, *ppPoslist, n); + p += n; + *pp = p; + } + *ppPoslist = pEnd; +} + +/* +** Value used to signify the end of an position-list. This must be +** as large or larger than any value that might appear on the +** position-list, even a position list that has been corrupted. +*/ +#define POSITION_LIST_END LARGEST_INT64 + +/* +** This function is used to help parse position-lists. When this function is +** called, *pp may point to the start of the next varint in the position-list +** being parsed, or it may point to 1 byte past the end of the position-list +** (in which case **pp will be a terminator bytes POS_END (0) or +** (1)). +** +** If *pp points past the end of the current position-list, set *pi to +** POSITION_LIST_END and return. Otherwise, read the next varint from *pp, +** increment the current value of *pi by the value read, and set *pp to +** point to the next value before returning. +** +** Before calling this routine *pi must be initialized to the value of +** the previous position, or zero if we are reading the first position +** in the position-list. Because positions are delta-encoded, the value +** of the previous position is needed in order to compute the value of +** the next position. +*/ +static void fts3ReadNextPos( + char **pp, /* IN/OUT: Pointer into position-list buffer */ + sqlite3_int64 *pi /* IN/OUT: Value read from position-list */ +){ + if( (**pp)&0xFE ){ + int iVal; + *pp += fts3GetVarint32((*pp), &iVal); + *pi += iVal; + *pi -= 2; + }else{ + *pi = POSITION_LIST_END; + } +} + +/* +** If parameter iCol is not 0, write an POS_COLUMN (1) byte followed by +** the value of iCol encoded as a varint to *pp. This will start a new +** column list. +** +** Set *pp to point to the byte just after the last byte written before +** returning (do not modify it if iCol==0). Return the total number of bytes +** written (0 if iCol==0). +*/ +static int fts3PutColNumber(char **pp, int iCol){ + int n = 0; /* Number of bytes written */ + if( iCol ){ + char *p = *pp; /* Output pointer */ + n = 1 + sqlite3Fts3PutVarint(&p[1], iCol); + *p = 0x01; + *pp = &p[n]; + } + return n; +} + +/* +** Compute the union of two position lists. The output written +** into *pp contains all positions of both *pp1 and *pp2 in sorted +** order and with any duplicates removed. All pointers are +** updated appropriately. The caller is responsible for insuring +** that there is enough space in *pp to hold the complete output. +*/ +static int fts3PoslistMerge( + char **pp, /* Output buffer */ + char **pp1, /* Left input list */ + char **pp2 /* Right input list */ +){ + char *p = *pp; + char *p1 = *pp1; + char *p2 = *pp2; + + while( *p1 || *p2 ){ + int iCol1; /* The current column index in pp1 */ + int iCol2; /* The current column index in pp2 */ + + if( *p1==POS_COLUMN ){ + fts3GetVarint32(&p1[1], &iCol1); + if( iCol1==0 ) return FTS_CORRUPT_VTAB; + } + else if( *p1==POS_END ) iCol1 = 0x7fffffff; + else iCol1 = 0; + + if( *p2==POS_COLUMN ){ + fts3GetVarint32(&p2[1], &iCol2); + if( iCol2==0 ) return FTS_CORRUPT_VTAB; + } + else if( *p2==POS_END ) iCol2 = 0x7fffffff; + else iCol2 = 0; + + if( iCol1==iCol2 ){ + sqlite3_int64 i1 = 0; /* Last position from pp1 */ + sqlite3_int64 i2 = 0; /* Last position from pp2 */ + sqlite3_int64 iPrev = 0; + int n = fts3PutColNumber(&p, iCol1); + p1 += n; + p2 += n; + + /* At this point, both p1 and p2 point to the start of column-lists + ** for the same column (the column with index iCol1 and iCol2). + ** A column-list is a list of non-negative delta-encoded varints, each + ** incremented by 2 before being stored. Each list is terminated by a + ** POS_END (0) or POS_COLUMN (1). The following block merges the two lists + ** and writes the results to buffer p. p is left pointing to the byte + ** after the list written. No terminator (POS_END or POS_COLUMN) is + ** written to the output. + */ + fts3GetDeltaVarint(&p1, &i1); + fts3GetDeltaVarint(&p2, &i2); + if( i1<2 || i2<2 ){ + break; + } + do { + fts3PutDeltaVarint(&p, &iPrev, (i1pos(*pp1) && pos(*pp2)-pos(*pp1)<=nToken). i.e. +** when the *pp1 token appears before the *pp2 token, but not more than nToken +** slots before it. +** +** e.g. nToken==1 searches for adjacent positions. +*/ +static int fts3PoslistPhraseMerge( + char **pp, /* IN/OUT: Preallocated output buffer */ + int nToken, /* Maximum difference in token positions */ + int isSaveLeft, /* Save the left position */ + int isExact, /* If *pp1 is exactly nTokens before *pp2 */ + char **pp1, /* IN/OUT: Left input list */ + char **pp2 /* IN/OUT: Right input list */ +){ + char *p = *pp; + char *p1 = *pp1; + char *p2 = *pp2; + int iCol1 = 0; + int iCol2 = 0; + + /* Never set both isSaveLeft and isExact for the same invocation. */ + assert( isSaveLeft==0 || isExact==0 ); + + assert_fts3_nc( p!=0 && *p1!=0 && *p2!=0 ); + if( *p1==POS_COLUMN ){ + p1++; + p1 += fts3GetVarint32(p1, &iCol1); + /* iCol1==0 indicates corruption. Column 0 does not have a POS_COLUMN + ** entry, so this is actually end-of-doclist. */ + if( iCol1==0 ) return 0; + } + if( *p2==POS_COLUMN ){ + p2++; + p2 += fts3GetVarint32(p2, &iCol2); + /* As above, iCol2==0 indicates corruption. */ + if( iCol2==0 ) return 0; + } + + while( 1 ){ + if( iCol1==iCol2 ){ + char *pSave = p; + sqlite3_int64 iPrev = 0; + sqlite3_int64 iPos1 = 0; + sqlite3_int64 iPos2 = 0; + + if( iCol1 ){ + *p++ = POS_COLUMN; + p += sqlite3Fts3PutVarint(p, iCol1); + } + + fts3GetDeltaVarint(&p1, &iPos1); iPos1 -= 2; + fts3GetDeltaVarint(&p2, &iPos2); iPos2 -= 2; + if( iPos1<0 || iPos2<0 ) break; + + while( 1 ){ + if( iPos2==iPos1+nToken + || (isExact==0 && iPos2>iPos1 && iPos2<=iPos1+nToken) + ){ + sqlite3_int64 iSave; + iSave = isSaveLeft ? iPos1 : iPos2; + fts3PutDeltaVarint(&p, &iPrev, iSave+2); iPrev -= 2; + pSave = 0; + assert( p ); + } + if( (!isSaveLeft && iPos2<=(iPos1+nToken)) || iPos2<=iPos1 ){ + if( (*p2&0xFE)==0 ) break; + fts3GetDeltaVarint(&p2, &iPos2); iPos2 -= 2; + }else{ + if( (*p1&0xFE)==0 ) break; + fts3GetDeltaVarint(&p1, &iPos1); iPos1 -= 2; + } + } + + if( pSave ){ + assert( pp && p ); + p = pSave; + } + + fts3ColumnlistCopy(0, &p1); + fts3ColumnlistCopy(0, &p2); + assert( (*p1&0xFE)==0 && (*p2&0xFE)==0 ); + if( 0==*p1 || 0==*p2 ) break; + + p1++; + p1 += fts3GetVarint32(p1, &iCol1); + p2++; + p2 += fts3GetVarint32(p2, &iCol2); + } + + /* Advance pointer p1 or p2 (whichever corresponds to the smaller of + ** iCol1 and iCol2) so that it points to either the 0x00 that marks the + ** end of the position list, or the 0x01 that precedes the next + ** column-number in the position list. + */ + else if( iCol1=pEnd ){ + *pp = 0; + }else{ + u64 iVal; + *pp += sqlite3Fts3GetVarintU(*pp, &iVal); + if( bDescIdx ){ + *pVal = (i64)((u64)*pVal - iVal); + }else{ + *pVal = (i64)((u64)*pVal + iVal); + } + } +} + +/* +** This function is used to write a single varint to a buffer. The varint +** is written to *pp. Before returning, *pp is set to point 1 byte past the +** end of the value written. +** +** If *pbFirst is zero when this function is called, the value written to +** the buffer is that of parameter iVal. +** +** If *pbFirst is non-zero when this function is called, then the value +** written is either (iVal-*piPrev) (if bDescIdx is zero) or (*piPrev-iVal) +** (if bDescIdx is non-zero). +** +** Before returning, this function always sets *pbFirst to 1 and *piPrev +** to the value of parameter iVal. +*/ +static void fts3PutDeltaVarint3( + char **pp, /* IN/OUT: Output pointer */ + int bDescIdx, /* True for descending docids */ + sqlite3_int64 *piPrev, /* IN/OUT: Previous value written to list */ + int *pbFirst, /* IN/OUT: True after first int written */ + sqlite3_int64 iVal /* Write this value to the list */ +){ + sqlite3_uint64 iWrite; + if( bDescIdx==0 || *pbFirst==0 ){ + assert_fts3_nc( *pbFirst==0 || iVal>=*piPrev ); + iWrite = (u64)iVal - (u64)*piPrev; + }else{ + assert_fts3_nc( *piPrev>=iVal ); + iWrite = (u64)*piPrev - (u64)iVal; + } + assert( *pbFirst || *piPrev==0 ); + assert_fts3_nc( *pbFirst==0 || iWrite>0 ); + *pp += sqlite3Fts3PutVarint(*pp, iWrite); + *piPrev = iVal; + *pbFirst = 1; +} + + +/* +** This macro is used by various functions that merge doclists. The two +** arguments are 64-bit docid values. If the value of the stack variable +** bDescDoclist is 0 when this macro is invoked, then it returns (i1-i2). +** Otherwise, (i2-i1). +** +** Using this makes it easier to write code that can merge doclists that are +** sorted in either ascending or descending order. +*/ +/* #define DOCID_CMP(i1, i2) ((bDescDoclist?-1:1) * (i64)((u64)i1-i2)) */ +#define DOCID_CMP(i1, i2) ((bDescDoclist?-1:1) * (i1>i2?1:((i1==i2)?0:-1))) + +/* +** This function does an "OR" merge of two doclists (output contains all +** positions contained in either argument doclist). If the docids in the +** input doclists are sorted in ascending order, parameter bDescDoclist +** should be false. If they are sorted in ascending order, it should be +** passed a non-zero value. +** +** If no error occurs, *paOut is set to point at an sqlite3_malloc'd buffer +** containing the output doclist and SQLITE_OK is returned. In this case +** *pnOut is set to the number of bytes in the output doclist. +** +** If an error occurs, an SQLite error code is returned. The output values +** are undefined in this case. +*/ +static int fts3DoclistOrMerge( + int bDescDoclist, /* True if arguments are desc */ + char *a1, int n1, /* First doclist */ + char *a2, int n2, /* Second doclist */ + char **paOut, int *pnOut /* OUT: Malloc'd doclist */ +){ + int rc = SQLITE_OK; + sqlite3_int64 i1 = 0; + sqlite3_int64 i2 = 0; + sqlite3_int64 iPrev = 0; + char *pEnd1 = &a1[n1]; + char *pEnd2 = &a2[n2]; + char *p1 = a1; + char *p2 = a2; + char *p; + char *aOut; + int bFirstOut = 0; + + *paOut = 0; + *pnOut = 0; + + /* Allocate space for the output. Both the input and output doclists + ** are delta encoded. If they are in ascending order (bDescDoclist==0), + ** then the first docid in each list is simply encoded as a varint. For + ** each subsequent docid, the varint stored is the difference between the + ** current and previous docid (a positive number - since the list is in + ** ascending order). + ** + ** The first docid written to the output is therefore encoded using the + ** same number of bytes as it is in whichever of the input lists it is + ** read from. And each subsequent docid read from the same input list + ** consumes either the same or less bytes as it did in the input (since + ** the difference between it and the previous value in the output must + ** be a positive value less than or equal to the delta value read from + ** the input list). The same argument applies to all but the first docid + ** read from the 'other' list. And to the contents of all position lists + ** that will be copied and merged from the input to the output. + ** + ** However, if the first docid copied to the output is a negative number, + ** then the encoding of the first docid from the 'other' input list may + ** be larger in the output than it was in the input (since the delta value + ** may be a larger positive integer than the actual docid). + ** + ** The space required to store the output is therefore the sum of the + ** sizes of the two inputs, plus enough space for exactly one of the input + ** docids to grow. + ** + ** A symmetric argument may be made if the doclists are in descending + ** order. + */ + aOut = sqlite3_malloc64((i64)n1+n2+FTS3_VARINT_MAX-1+FTS3_BUFFER_PADDING); + if( !aOut ) return SQLITE_NOMEM; + + p = aOut; + fts3GetDeltaVarint3(&p1, pEnd1, 0, &i1); + fts3GetDeltaVarint3(&p2, pEnd2, 0, &i2); + while( p1 || p2 ){ + sqlite3_int64 iDiff = DOCID_CMP(i1, i2); + + if( p2 && p1 && iDiff==0 ){ + fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i1); + rc = fts3PoslistMerge(&p, &p1, &p2); + if( rc ) break; + fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1); + fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2); + }else if( !p2 || (p1 && iDiff<0) ){ + fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i1); + fts3PoslistCopy(&p, &p1); + fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1); + }else{ + fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i2); + fts3PoslistCopy(&p, &p2); + fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2); + } + + assert( (p-aOut)<=((p1?(p1-a1):n1)+(p2?(p2-a2):n2)+FTS3_VARINT_MAX-1) ); + } + + if( rc!=SQLITE_OK ){ + sqlite3_free(aOut); + p = aOut = 0; + }else{ + assert( (p-aOut)<=n1+n2+FTS3_VARINT_MAX-1 ); + memset(&aOut[(p-aOut)], 0, FTS3_BUFFER_PADDING); + } + *paOut = aOut; + *pnOut = (int)(p-aOut); + return rc; +} + +/* +** This function does a "phrase" merge of two doclists. In a phrase merge, +** the output contains a copy of each position from the right-hand input +** doclist for which there is a position in the left-hand input doclist +** exactly nDist tokens before it. +** +** If the docids in the input doclists are sorted in ascending order, +** parameter bDescDoclist should be false. If they are sorted in ascending +** order, it should be passed a non-zero value. +** +** The right-hand input doclist is overwritten by this function. +*/ +static int fts3DoclistPhraseMerge( + int bDescDoclist, /* True if arguments are desc */ + int nDist, /* Distance from left to right (1=adjacent) */ + char *aLeft, int nLeft, /* Left doclist */ + char **paRight, int *pnRight /* IN/OUT: Right/output doclist */ +){ + sqlite3_int64 i1 = 0; + sqlite3_int64 i2 = 0; + sqlite3_int64 iPrev = 0; + char *aRight = *paRight; + char *pEnd1 = &aLeft[nLeft]; + char *pEnd2 = &aRight[*pnRight]; + char *p1 = aLeft; + char *p2 = aRight; + char *p; + int bFirstOut = 0; + char *aOut; + + assert( nDist>0 ); + if( bDescDoclist ){ + aOut = sqlite3_malloc64((sqlite3_int64)*pnRight + FTS3_VARINT_MAX); + if( aOut==0 ) return SQLITE_NOMEM; + }else{ + aOut = aRight; + } + p = aOut; + + fts3GetDeltaVarint3(&p1, pEnd1, 0, &i1); + fts3GetDeltaVarint3(&p2, pEnd2, 0, &i2); + + while( p1 && p2 ){ + sqlite3_int64 iDiff = DOCID_CMP(i1, i2); + if( iDiff==0 ){ + char *pSave = p; + sqlite3_int64 iPrevSave = iPrev; + int bFirstOutSave = bFirstOut; + + fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i1); + if( 0==fts3PoslistPhraseMerge(&p, nDist, 0, 1, &p1, &p2) ){ + p = pSave; + iPrev = iPrevSave; + bFirstOut = bFirstOutSave; + } + fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1); + fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2); + }else if( iDiff<0 ){ + fts3PoslistCopy(0, &p1); + fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1); + }else{ + fts3PoslistCopy(0, &p2); + fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2); + } + } + + *pnRight = (int)(p - aOut); + if( bDescDoclist ){ + sqlite3_free(aRight); + *paRight = aOut; + } + + return SQLITE_OK; +} + +/* +** Argument pList points to a position list nList bytes in size. This +** function checks to see if the position list contains any entries for +** a token in position 0 (of any column). If so, it writes argument iDelta +** to the output buffer pOut, followed by a position list consisting only +** of the entries from pList at position 0, and terminated by an 0x00 byte. +** The value returned is the number of bytes written to pOut (if any). +*/ +SQLITE_PRIVATE int sqlite3Fts3FirstFilter( + sqlite3_int64 iDelta, /* Varint that may be written to pOut */ + char *pList, /* Position list (no 0x00 term) */ + int nList, /* Size of pList in bytes */ + char *pOut /* Write output here */ +){ + int nOut = 0; + int bWritten = 0; /* True once iDelta has been written */ + char *p = pList; + char *pEnd = &pList[nList]; + + if( *p!=0x01 ){ + if( *p==0x02 ){ + nOut += sqlite3Fts3PutVarint(&pOut[nOut], iDelta); + pOut[nOut++] = 0x02; + bWritten = 1; + } + fts3ColumnlistCopy(0, &p); + } + + while( paaOutput); i++){ + if( pTS->aaOutput[i] ){ + if( !aOut ){ + aOut = pTS->aaOutput[i]; + nOut = pTS->anOutput[i]; + pTS->aaOutput[i] = 0; + }else{ + int nNew; + char *aNew; + + int rc = fts3DoclistOrMerge(p->bDescIdx, + pTS->aaOutput[i], pTS->anOutput[i], aOut, nOut, &aNew, &nNew + ); + if( rc!=SQLITE_OK ){ + sqlite3_free(aOut); + return rc; + } + + sqlite3_free(pTS->aaOutput[i]); + sqlite3_free(aOut); + pTS->aaOutput[i] = 0; + aOut = aNew; + nOut = nNew; + } + } + } + + pTS->aaOutput[0] = aOut; + pTS->anOutput[0] = nOut; + return SQLITE_OK; +} + +/* +** Merge the doclist aDoclist/nDoclist into the TermSelect object passed +** as the first argument. The merge is an "OR" merge (see function +** fts3DoclistOrMerge() for details). +** +** This function is called with the doclist for each term that matches +** a queried prefix. It merges all these doclists into one, the doclist +** for the specified prefix. Since there can be a very large number of +** doclists to merge, the merging is done pair-wise using the TermSelect +** object. +** +** This function returns SQLITE_OK if the merge is successful, or an +** SQLite error code (SQLITE_NOMEM) if an error occurs. +*/ +static int fts3TermSelectMerge( + Fts3Table *p, /* FTS table handle */ + TermSelect *pTS, /* TermSelect object to merge into */ + char *aDoclist, /* Pointer to doclist */ + int nDoclist /* Size of aDoclist in bytes */ +){ + if( pTS->aaOutput[0]==0 ){ + /* If this is the first term selected, copy the doclist to the output + ** buffer using memcpy(). + ** + ** Add FTS3_VARINT_MAX bytes of unused space to the end of the + ** allocation. This is so as to ensure that the buffer is big enough + ** to hold the current doclist AND'd with any other doclist. If the + ** doclists are stored in order=ASC order, this padding would not be + ** required (since the size of [doclistA AND doclistB] is always less + ** than or equal to the size of [doclistA] in that case). But this is + ** not true for order=DESC. For example, a doclist containing (1, -1) + ** may be smaller than (-1), as in the first example the -1 may be stored + ** as a single-byte delta, whereas in the second it must be stored as a + ** FTS3_VARINT_MAX byte varint. + ** + ** Similar padding is added in the fts3DoclistOrMerge() function. + */ + pTS->aaOutput[0] = sqlite3_malloc64((i64)nDoclist + FTS3_VARINT_MAX + 1); + pTS->anOutput[0] = nDoclist; + if( pTS->aaOutput[0] ){ + memcpy(pTS->aaOutput[0], aDoclist, nDoclist); + memset(&pTS->aaOutput[0][nDoclist], 0, FTS3_VARINT_MAX); + }else{ + return SQLITE_NOMEM; + } + }else{ + char *aMerge = aDoclist; + int nMerge = nDoclist; + int iOut; + + for(iOut=0; iOutaaOutput); iOut++){ + if( pTS->aaOutput[iOut]==0 ){ + assert( iOut>0 ); + pTS->aaOutput[iOut] = aMerge; + pTS->anOutput[iOut] = nMerge; + break; + }else{ + char *aNew; + int nNew; + + int rc = fts3DoclistOrMerge(p->bDescIdx, aMerge, nMerge, + pTS->aaOutput[iOut], pTS->anOutput[iOut], &aNew, &nNew + ); + if( rc!=SQLITE_OK ){ + if( aMerge!=aDoclist ) sqlite3_free(aMerge); + return rc; + } + + if( aMerge!=aDoclist ) sqlite3_free(aMerge); + sqlite3_free(pTS->aaOutput[iOut]); + pTS->aaOutput[iOut] = 0; + + aMerge = aNew; + nMerge = nNew; + if( (iOut+1)==SizeofArray(pTS->aaOutput) ){ + pTS->aaOutput[iOut] = aMerge; + pTS->anOutput[iOut] = nMerge; + } + } + } + } + return SQLITE_OK; +} + +/* +** Append SegReader object pNew to the end of the pCsr->apSegment[] array. +*/ +static int fts3SegReaderCursorAppend( + Fts3MultiSegReader *pCsr, + Fts3SegReader *pNew +){ + if( (pCsr->nSegment%16)==0 ){ + Fts3SegReader **apNew; + sqlite3_int64 nByte = (pCsr->nSegment + 16)*sizeof(Fts3SegReader*); + apNew = (Fts3SegReader **)sqlite3_realloc64(pCsr->apSegment, nByte); + if( !apNew ){ + sqlite3Fts3SegReaderFree(pNew); + return SQLITE_NOMEM; + } + pCsr->apSegment = apNew; + } + pCsr->apSegment[pCsr->nSegment++] = pNew; + return SQLITE_OK; +} + +/* +** Add seg-reader objects to the Fts3MultiSegReader object passed as the +** 8th argument. +** +** This function returns SQLITE_OK if successful, or an SQLite error code +** otherwise. +*/ +static int fts3SegReaderCursor( + Fts3Table *p, /* FTS3 table handle */ + int iLangid, /* Language id */ + int iIndex, /* Index to search (from 0 to p->nIndex-1) */ + int iLevel, /* Level of segments to scan */ + const char *zTerm, /* Term to query for */ + int nTerm, /* Size of zTerm in bytes */ + int isPrefix, /* True for a prefix search */ + int isScan, /* True to scan from zTerm to EOF */ + Fts3MultiSegReader *pCsr /* Cursor object to populate */ +){ + int rc = SQLITE_OK; /* Error code */ + sqlite3_stmt *pStmt = 0; /* Statement to iterate through segments */ + int rc2; /* Result of sqlite3_reset() */ + + /* If iLevel is less than 0 and this is not a scan, include a seg-reader + ** for the pending-terms. If this is a scan, then this call must be being + ** made by an fts4aux module, not an FTS table. In this case calling + ** Fts3SegReaderPending might segfault, as the data structures used by + ** fts4aux are not completely populated. So it's easiest to filter these + ** calls out here. */ + if( iLevel<0 && p->aIndex && p->iPrevLangid==iLangid ){ + Fts3SegReader *pSeg = 0; + rc = sqlite3Fts3SegReaderPending(p, iIndex, zTerm, nTerm, isPrefix||isScan, &pSeg); + if( rc==SQLITE_OK && pSeg ){ + rc = fts3SegReaderCursorAppend(pCsr, pSeg); + } + } + + if( iLevel!=FTS3_SEGCURSOR_PENDING ){ + if( rc==SQLITE_OK ){ + rc = sqlite3Fts3AllSegdirs(p, iLangid, iIndex, iLevel, &pStmt); + } + + while( rc==SQLITE_OK && SQLITE_ROW==(rc = sqlite3_step(pStmt)) ){ + Fts3SegReader *pSeg = 0; + + /* Read the values returned by the SELECT into local variables. */ + sqlite3_int64 iStartBlock = sqlite3_column_int64(pStmt, 1); + sqlite3_int64 iLeavesEndBlock = sqlite3_column_int64(pStmt, 2); + sqlite3_int64 iEndBlock = sqlite3_column_int64(pStmt, 3); + int nRoot = sqlite3_column_bytes(pStmt, 4); + char const *zRoot = sqlite3_column_blob(pStmt, 4); + + /* If zTerm is not NULL, and this segment is not stored entirely on its + ** root node, the range of leaves scanned can be reduced. Do this. */ + if( iStartBlock && zTerm && zRoot ){ + sqlite3_int64 *pi = (isPrefix ? &iLeavesEndBlock : 0); + rc = fts3SelectLeaf(p, zTerm, nTerm, zRoot, nRoot, &iStartBlock, pi); + if( rc!=SQLITE_OK ) goto finished; + if( isPrefix==0 && isScan==0 ) iLeavesEndBlock = iStartBlock; + } + + rc = sqlite3Fts3SegReaderNew(pCsr->nSegment+1, + (isPrefix==0 && isScan==0), + iStartBlock, iLeavesEndBlock, + iEndBlock, zRoot, nRoot, &pSeg + ); + if( rc!=SQLITE_OK ) goto finished; + rc = fts3SegReaderCursorAppend(pCsr, pSeg); + } + } + + finished: + rc2 = sqlite3_reset(pStmt); + if( rc==SQLITE_DONE ) rc = rc2; + + return rc; +} + +/* +** Set up a cursor object for iterating through a full-text index or a +** single level therein. +*/ +SQLITE_PRIVATE int sqlite3Fts3SegReaderCursor( + Fts3Table *p, /* FTS3 table handle */ + int iLangid, /* Language-id to search */ + int iIndex, /* Index to search (from 0 to p->nIndex-1) */ + int iLevel, /* Level of segments to scan */ + const char *zTerm, /* Term to query for */ + int nTerm, /* Size of zTerm in bytes */ + int isPrefix, /* True for a prefix search */ + int isScan, /* True to scan from zTerm to EOF */ + Fts3MultiSegReader *pCsr /* Cursor object to populate */ +){ + assert( iIndex>=0 && iIndexnIndex ); + assert( iLevel==FTS3_SEGCURSOR_ALL + || iLevel==FTS3_SEGCURSOR_PENDING + || iLevel>=0 + ); + assert( iLevelbase.pVtab; + + if( isPrefix ){ + for(i=1; bFound==0 && inIndex; i++){ + if( p->aIndex[i].nPrefix==nTerm ){ + bFound = 1; + rc = sqlite3Fts3SegReaderCursor(p, pCsr->iLangid, + i, FTS3_SEGCURSOR_ALL, zTerm, nTerm, 0, 0, pSegcsr + ); + pSegcsr->bLookup = 1; + } + } + + for(i=1; bFound==0 && inIndex; i++){ + if( p->aIndex[i].nPrefix==nTerm+1 ){ + bFound = 1; + rc = sqlite3Fts3SegReaderCursor(p, pCsr->iLangid, + i, FTS3_SEGCURSOR_ALL, zTerm, nTerm, 1, 0, pSegcsr + ); + if( rc==SQLITE_OK ){ + rc = fts3SegReaderCursorAddZero( + p, pCsr->iLangid, zTerm, nTerm, pSegcsr + ); + } + } + } + } + + if( bFound==0 ){ + rc = sqlite3Fts3SegReaderCursor(p, pCsr->iLangid, + 0, FTS3_SEGCURSOR_ALL, zTerm, nTerm, isPrefix, 0, pSegcsr + ); + pSegcsr->bLookup = !isPrefix; + } + } + + *ppSegcsr = pSegcsr; + return rc; +} + +/* +** Free an Fts3MultiSegReader allocated by fts3TermSegReaderCursor(). +*/ +static void fts3SegReaderCursorFree(Fts3MultiSegReader *pSegcsr){ + sqlite3Fts3SegReaderFinish(pSegcsr); + sqlite3_free(pSegcsr); +} + +/* +** This function retrieves the doclist for the specified term (or term +** prefix) from the database. +*/ +static int fts3TermSelect( + Fts3Table *p, /* Virtual table handle */ + Fts3PhraseToken *pTok, /* Token to query for */ + int iColumn, /* Column to query (or -ve for all columns) */ + int *pnOut, /* OUT: Size of buffer at *ppOut */ + char **ppOut /* OUT: Malloced result buffer */ +){ + int rc; /* Return code */ + Fts3MultiSegReader *pSegcsr; /* Seg-reader cursor for this term */ + TermSelect tsc; /* Object for pair-wise doclist merging */ + Fts3SegFilter filter; /* Segment term filter configuration */ + + pSegcsr = pTok->pSegcsr; + memset(&tsc, 0, sizeof(TermSelect)); + + filter.flags = FTS3_SEGMENT_IGNORE_EMPTY | FTS3_SEGMENT_REQUIRE_POS + | (pTok->isPrefix ? FTS3_SEGMENT_PREFIX : 0) + | (pTok->bFirst ? FTS3_SEGMENT_FIRST : 0) + | (iColumnnColumn ? FTS3_SEGMENT_COLUMN_FILTER : 0); + filter.iCol = iColumn; + filter.zTerm = pTok->z; + filter.nTerm = pTok->n; + + rc = sqlite3Fts3SegReaderStart(p, pSegcsr, &filter); + while( SQLITE_OK==rc + && SQLITE_ROW==(rc = sqlite3Fts3SegReaderStep(p, pSegcsr)) + ){ + rc = fts3TermSelectMerge(p, &tsc, pSegcsr->aDoclist, pSegcsr->nDoclist); + } + + if( rc==SQLITE_OK ){ + rc = fts3TermSelectFinishMerge(p, &tsc); + } + if( rc==SQLITE_OK ){ + *ppOut = tsc.aaOutput[0]; + *pnOut = tsc.anOutput[0]; + }else{ + int i; + for(i=0; ipSegcsr = 0; + return rc; +} + +/* +** This function counts the total number of docids in the doclist stored +** in buffer aList[], size nList bytes. +** +** If the isPoslist argument is true, then it is assumed that the doclist +** contains a position-list following each docid. Otherwise, it is assumed +** that the doclist is simply a list of docids stored as delta encoded +** varints. +*/ +static int fts3DoclistCountDocids(char *aList, int nList){ + int nDoc = 0; /* Return value */ + if( aList ){ + char *aEnd = &aList[nList]; /* Pointer to one byte after EOF */ + char *p = aList; /* Cursor */ + while( peSearch==FTS3_DOCID_SEARCH || pCsr->eSearch==FTS3_FULLSCAN_SEARCH ){ + Fts3Table *pTab = (Fts3Table*)pCursor->pVtab; + pTab->bLock++; + if( SQLITE_ROW!=sqlite3_step(pCsr->pStmt) ){ + pCsr->isEof = 1; + rc = sqlite3_reset(pCsr->pStmt); + }else{ + pCsr->iPrevId = sqlite3_column_int64(pCsr->pStmt, 0); + rc = SQLITE_OK; + } + pTab->bLock--; + }else{ + rc = fts3EvalNext((Fts3Cursor *)pCursor); + } + assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 ); + return rc; +} + +/* +** If the numeric type of argument pVal is "integer", then return it +** converted to a 64-bit signed integer. Otherwise, return a copy of +** the second parameter, iDefault. +*/ +static sqlite3_int64 fts3DocidRange(sqlite3_value *pVal, i64 iDefault){ + if( pVal ){ + int eType = sqlite3_value_numeric_type(pVal); + if( eType==SQLITE_INTEGER ){ + return sqlite3_value_int64(pVal); + } + } + return iDefault; +} + +/* +** This is the xFilter interface for the virtual table. See +** the virtual table xFilter method documentation for additional +** information. +** +** If idxNum==FTS3_FULLSCAN_SEARCH then do a full table scan against +** the %_content table. +** +** If idxNum==FTS3_DOCID_SEARCH then do a docid lookup for a single entry +** in the %_content table. +** +** If idxNum>=FTS3_FULLTEXT_SEARCH then use the full text index. The +** column on the left-hand side of the MATCH operator is column +** number idxNum-FTS3_FULLTEXT_SEARCH, 0 indexed. argv[0] is the right-hand +** side of the MATCH operator. +*/ +static int fts3FilterMethod( + sqlite3_vtab_cursor *pCursor, /* The cursor used for this query */ + int idxNum, /* Strategy index */ + const char *idxStr, /* Unused */ + int nVal, /* Number of elements in apVal */ + sqlite3_value **apVal /* Arguments for the indexing scheme */ +){ + int rc = SQLITE_OK; + char *zSql; /* SQL statement used to access %_content */ + int eSearch; + Fts3Table *p = (Fts3Table *)pCursor->pVtab; + Fts3Cursor *pCsr = (Fts3Cursor *)pCursor; + + sqlite3_value *pCons = 0; /* The MATCH or rowid constraint, if any */ + sqlite3_value *pLangid = 0; /* The "langid = ?" constraint, if any */ + sqlite3_value *pDocidGe = 0; /* The "docid >= ?" constraint, if any */ + sqlite3_value *pDocidLe = 0; /* The "docid <= ?" constraint, if any */ + int iIdx; + + UNUSED_PARAMETER(idxStr); + UNUSED_PARAMETER(nVal); + + if( p->bLock ){ + return SQLITE_ERROR; + } + + eSearch = (idxNum & 0x0000FFFF); + assert( eSearch>=0 && eSearch<=(FTS3_FULLTEXT_SEARCH+p->nColumn) ); + assert( p->pSegments==0 ); + + /* Collect arguments into local variables */ + iIdx = 0; + if( eSearch!=FTS3_FULLSCAN_SEARCH ) pCons = apVal[iIdx++]; + if( idxNum & FTS3_HAVE_LANGID ) pLangid = apVal[iIdx++]; + if( idxNum & FTS3_HAVE_DOCID_GE ) pDocidGe = apVal[iIdx++]; + if( idxNum & FTS3_HAVE_DOCID_LE ) pDocidLe = apVal[iIdx++]; + assert( iIdx==nVal ); + + /* In case the cursor has been used before, clear it now. */ + fts3ClearCursor(pCsr); + + /* Set the lower and upper bounds on docids to return */ + pCsr->iMinDocid = fts3DocidRange(pDocidGe, SMALLEST_INT64); + pCsr->iMaxDocid = fts3DocidRange(pDocidLe, LARGEST_INT64); + + if( idxStr ){ + pCsr->bDesc = (idxStr[0]=='D'); + }else{ + pCsr->bDesc = p->bDescIdx; + } + pCsr->eSearch = (i16)eSearch; + + if( eSearch!=FTS3_DOCID_SEARCH && eSearch!=FTS3_FULLSCAN_SEARCH ){ + int iCol = eSearch-FTS3_FULLTEXT_SEARCH; + const char *zQuery = (const char *)sqlite3_value_text(pCons); + + if( zQuery==0 && sqlite3_value_type(pCons)!=SQLITE_NULL ){ + return SQLITE_NOMEM; + } + + pCsr->iLangid = 0; + if( pLangid ) pCsr->iLangid = sqlite3_value_int(pLangid); + + assert( p->base.zErrMsg==0 ); + rc = sqlite3Fts3ExprParse(p->pTokenizer, pCsr->iLangid, + p->azColumn, p->bFts4, p->nColumn, iCol, zQuery, -1, &pCsr->pExpr, + &p->base.zErrMsg + ); + if( rc!=SQLITE_OK ){ + return rc; + } + + rc = fts3EvalStart(pCsr); + sqlite3Fts3SegmentsClose(p); + if( rc!=SQLITE_OK ) return rc; + pCsr->pNextId = pCsr->aDoclist; + pCsr->iPrevId = 0; + } + + /* Compile a SELECT statement for this cursor. For a full-table-scan, the + ** statement loops through all rows of the %_content table. For a + ** full-text query or docid lookup, the statement retrieves a single + ** row by docid. + */ + if( eSearch==FTS3_FULLSCAN_SEARCH ){ + if( pDocidGe || pDocidLe ){ + zSql = sqlite3_mprintf( + "SELECT %s WHERE rowid BETWEEN %lld AND %lld ORDER BY rowid %s", + p->zReadExprlist, pCsr->iMinDocid, pCsr->iMaxDocid, + (pCsr->bDesc ? "DESC" : "ASC") + ); + }else{ + zSql = sqlite3_mprintf("SELECT %s ORDER BY rowid %s", + p->zReadExprlist, (pCsr->bDesc ? "DESC" : "ASC") + ); + } + if( zSql ){ + p->bLock++; + rc = sqlite3_prepare_v3( + p->db,zSql,-1,SQLITE_PREPARE_PERSISTENT,&pCsr->pStmt,0 + ); + p->bLock--; + sqlite3_free(zSql); + }else{ + rc = SQLITE_NOMEM; + } + }else if( eSearch==FTS3_DOCID_SEARCH ){ + rc = fts3CursorSeekStmt(pCsr); + if( rc==SQLITE_OK ){ + rc = sqlite3_bind_value(pCsr->pStmt, 1, pCons); + } + } + if( rc!=SQLITE_OK ) return rc; + + return fts3NextMethod(pCursor); +} + +/* +** This is the xEof method of the virtual table. SQLite calls this +** routine to find out if it has reached the end of a result set. +*/ +static int fts3EofMethod(sqlite3_vtab_cursor *pCursor){ + Fts3Cursor *pCsr = (Fts3Cursor*)pCursor; + if( pCsr->isEof ){ + fts3ClearCursor(pCsr); + pCsr->isEof = 1; + } + return pCsr->isEof; +} + +/* +** This is the xRowid method. The SQLite core calls this routine to +** retrieve the rowid for the current row of the result set. fts3 +** exposes %_content.docid as the rowid for the virtual table. The +** rowid should be written to *pRowid. +*/ +static int fts3RowidMethod(sqlite3_vtab_cursor *pCursor, sqlite_int64 *pRowid){ + Fts3Cursor *pCsr = (Fts3Cursor *) pCursor; + *pRowid = pCsr->iPrevId; + return SQLITE_OK; +} + +/* +** This is the xColumn method, called by SQLite to request a value from +** the row that the supplied cursor currently points to. +** +** If: +** +** (iCol < p->nColumn) -> The value of the iCol'th user column. +** (iCol == p->nColumn) -> Magic column with the same name as the table. +** (iCol == p->nColumn+1) -> Docid column +** (iCol == p->nColumn+2) -> Langid column +*/ +static int fts3ColumnMethod( + sqlite3_vtab_cursor *pCursor, /* Cursor to retrieve value from */ + sqlite3_context *pCtx, /* Context for sqlite3_result_xxx() calls */ + int iCol /* Index of column to read value from */ +){ + int rc = SQLITE_OK; /* Return Code */ + Fts3Cursor *pCsr = (Fts3Cursor *) pCursor; + Fts3Table *p = (Fts3Table *)pCursor->pVtab; + + /* The column value supplied by SQLite must be in range. */ + assert( iCol>=0 && iCol<=p->nColumn+2 ); + + switch( iCol-p->nColumn ){ + case 0: + /* The special 'table-name' column */ + sqlite3_result_pointer(pCtx, pCsr, "fts3cursor", 0); + break; + + case 1: + /* The docid column */ + sqlite3_result_int64(pCtx, pCsr->iPrevId); + break; + + case 2: + if( pCsr->pExpr ){ + sqlite3_result_int64(pCtx, pCsr->iLangid); + break; + }else if( p->zLanguageid==0 ){ + sqlite3_result_int(pCtx, 0); + break; + }else{ + iCol = p->nColumn; + /* no break */ deliberate_fall_through + } + + default: + /* A user column. Or, if this is a full-table scan, possibly the + ** language-id column. Seek the cursor. */ + rc = fts3CursorSeek(0, pCsr); + if( rc==SQLITE_OK && sqlite3_data_count(pCsr->pStmt)-1>iCol ){ + sqlite3_result_value(pCtx, sqlite3_column_value(pCsr->pStmt, iCol+1)); + } + break; + } + + assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 ); + return rc; +} + +/* +** This function is the implementation of the xUpdate callback used by +** FTS3 virtual tables. It is invoked by SQLite each time a row is to be +** inserted, updated or deleted. +*/ +static int fts3UpdateMethod( + sqlite3_vtab *pVtab, /* Virtual table handle */ + int nArg, /* Size of argument array */ + sqlite3_value **apVal, /* Array of arguments */ + sqlite_int64 *pRowid /* OUT: The affected (or effected) rowid */ +){ + return sqlite3Fts3UpdateMethod(pVtab, nArg, apVal, pRowid); +} + +/* +** Implementation of xSync() method. Flush the contents of the pending-terms +** hash-table to the database. +*/ +static int fts3SyncMethod(sqlite3_vtab *pVtab){ + + /* Following an incremental-merge operation, assuming that the input + ** segments are not completely consumed (the usual case), they are updated + ** in place to remove the entries that have already been merged. This + ** involves updating the leaf block that contains the smallest unmerged + ** entry and each block (if any) between the leaf and the root node. So + ** if the height of the input segment b-trees is N, and input segments + ** are merged eight at a time, updating the input segments at the end + ** of an incremental-merge requires writing (8*(1+N)) blocks. N is usually + ** small - often between 0 and 2. So the overhead of the incremental + ** merge is somewhere between 8 and 24 blocks. To avoid this overhead + ** dwarfing the actual productive work accomplished, the incremental merge + ** is only attempted if it will write at least 64 leaf blocks. Hence + ** nMinMerge. + ** + ** Of course, updating the input segments also involves deleting a bunch + ** of blocks from the segments table. But this is not considered overhead + ** as it would also be required by a crisis-merge that used the same input + ** segments. + */ + const u32 nMinMerge = 64; /* Minimum amount of incr-merge work to do */ + + Fts3Table *p = (Fts3Table*)pVtab; + int rc; + i64 iLastRowid = sqlite3_last_insert_rowid(p->db); + + rc = sqlite3Fts3PendingTermsFlush(p); + if( rc==SQLITE_OK + && p->nLeafAdd>(nMinMerge/16) + && p->nAutoincrmerge && p->nAutoincrmerge!=0xff + ){ + int mxLevel = 0; /* Maximum relative level value in db */ + int A; /* Incr-merge parameter A */ + + rc = sqlite3Fts3MaxLevel(p, &mxLevel); + assert( rc==SQLITE_OK || mxLevel==0 ); + A = p->nLeafAdd * mxLevel; + A += (A/2); + if( A>(int)nMinMerge ) rc = sqlite3Fts3Incrmerge(p, A, p->nAutoincrmerge); + } + sqlite3Fts3SegmentsClose(p); + sqlite3_set_last_insert_rowid(p->db, iLastRowid); + return rc; +} + +/* +** If it is currently unknown whether or not the FTS table has an %_stat +** table (if p->bHasStat==2), attempt to determine this (set p->bHasStat +** to 0 or 1). Return SQLITE_OK if successful, or an SQLite error code +** if an error occurs. +*/ +static int fts3SetHasStat(Fts3Table *p){ + int rc = SQLITE_OK; + if( p->bHasStat==2 ){ + char *zTbl = sqlite3_mprintf("%s_stat", p->zName); + if( zTbl ){ + int res = sqlite3_table_column_metadata(p->db, p->zDb, zTbl, 0,0,0,0,0,0); + sqlite3_free(zTbl); + p->bHasStat = (res==SQLITE_OK); + }else{ + rc = SQLITE_NOMEM; + } + } + return rc; +} + +/* +** Implementation of xBegin() method. +*/ +static int fts3BeginMethod(sqlite3_vtab *pVtab){ + Fts3Table *p = (Fts3Table*)pVtab; + int rc; + UNUSED_PARAMETER(pVtab); + assert( p->pSegments==0 ); + assert( p->nPendingData==0 ); + assert( p->inTransaction!=1 ); + p->nLeafAdd = 0; + rc = fts3SetHasStat(p); +#ifdef SQLITE_DEBUG + if( rc==SQLITE_OK ){ + p->inTransaction = 1; + p->mxSavepoint = -1; + } +#endif + return rc; +} + +/* +** Implementation of xCommit() method. This is a no-op. The contents of +** the pending-terms hash-table have already been flushed into the database +** by fts3SyncMethod(). +*/ +static int fts3CommitMethod(sqlite3_vtab *pVtab){ + TESTONLY( Fts3Table *p = (Fts3Table*)pVtab ); + UNUSED_PARAMETER(pVtab); + assert( p->nPendingData==0 ); + assert( p->inTransaction!=0 ); + assert( p->pSegments==0 ); + TESTONLY( p->inTransaction = 0 ); + TESTONLY( p->mxSavepoint = -1; ); + return SQLITE_OK; +} + +/* +** Implementation of xRollback(). Discard the contents of the pending-terms +** hash-table. Any changes made to the database are reverted by SQLite. +*/ +static int fts3RollbackMethod(sqlite3_vtab *pVtab){ + Fts3Table *p = (Fts3Table*)pVtab; + sqlite3Fts3PendingTermsClear(p); + assert( p->inTransaction!=0 ); + TESTONLY( p->inTransaction = 0 ); + TESTONLY( p->mxSavepoint = -1; ); + return SQLITE_OK; +} + +/* +** When called, *ppPoslist must point to the byte immediately following the +** end of a position-list. i.e. ( (*ppPoslist)[-1]==POS_END ). This function +** moves *ppPoslist so that it instead points to the first byte of the +** same position list. +*/ +static void fts3ReversePoslist(char *pStart, char **ppPoslist){ + char *p = &(*ppPoslist)[-2]; + char c = 0; + + /* Skip backwards passed any trailing 0x00 bytes added by NearTrim() */ + while( p>pStart && (c=*p--)==0 ); + + /* Search backwards for a varint with value zero (the end of the previous + ** poslist). This is an 0x00 byte preceded by some byte that does not + ** have the 0x80 bit set. */ + while( p>pStart && (*p & 0x80) | c ){ + c = *p--; + } + assert( p==pStart || c==0 ); + + /* At this point p points to that preceding byte without the 0x80 bit + ** set. So to find the start of the poslist, skip forward 2 bytes then + ** over a varint. + ** + ** Normally. The other case is that p==pStart and the poslist to return + ** is the first in the doclist. In this case do not skip forward 2 bytes. + ** The second part of the if condition (c==0 && *ppPoslist>&p[2]) + ** is required for cases where the first byte of a doclist and the + ** doclist is empty. For example, if the first docid is 10, a doclist + ** that begins with: + ** + ** 0x0A 0x00 + */ + if( p>pStart || (c==0 && *ppPoslist>&p[2]) ){ p = &p[2]; } + while( *p++&0x80 ); + *ppPoslist = p; +} + +/* +** Helper function used by the implementation of the overloaded snippet(), +** offsets() and optimize() SQL functions. +** +** If the value passed as the third argument is a blob of size +** sizeof(Fts3Cursor*), then the blob contents are copied to the +** output variable *ppCsr and SQLITE_OK is returned. Otherwise, an error +** message is written to context pContext and SQLITE_ERROR returned. The +** string passed via zFunc is used as part of the error message. +*/ +static int fts3FunctionArg( + sqlite3_context *pContext, /* SQL function call context */ + const char *zFunc, /* Function name */ + sqlite3_value *pVal, /* argv[0] passed to function */ + Fts3Cursor **ppCsr /* OUT: Store cursor handle here */ +){ + int rc; + *ppCsr = (Fts3Cursor*)sqlite3_value_pointer(pVal, "fts3cursor"); + if( (*ppCsr)!=0 ){ + rc = SQLITE_OK; + }else{ + char *zErr = sqlite3_mprintf("illegal first argument to %s", zFunc); + sqlite3_result_error(pContext, zErr, -1); + sqlite3_free(zErr); + rc = SQLITE_ERROR; + } + return rc; +} + +/* +** Implementation of the snippet() function for FTS3 +*/ +static void fts3SnippetFunc( + sqlite3_context *pContext, /* SQLite function call context */ + int nVal, /* Size of apVal[] array */ + sqlite3_value **apVal /* Array of arguments */ +){ + Fts3Cursor *pCsr; /* Cursor handle passed through apVal[0] */ + const char *zStart = ""; + const char *zEnd = ""; + const char *zEllipsis = "..."; + int iCol = -1; + int nToken = 15; /* Default number of tokens in snippet */ + + /* There must be at least one argument passed to this function (otherwise + ** the non-overloaded version would have been called instead of this one). + */ + assert( nVal>=1 ); + + if( nVal>6 ){ + sqlite3_result_error(pContext, + "wrong number of arguments to function snippet()", -1); + return; + } + if( fts3FunctionArg(pContext, "snippet", apVal[0], &pCsr) ) return; + + switch( nVal ){ + case 6: nToken = sqlite3_value_int(apVal[5]); + /* no break */ deliberate_fall_through + case 5: iCol = sqlite3_value_int(apVal[4]); + /* no break */ deliberate_fall_through + case 4: zEllipsis = (const char*)sqlite3_value_text(apVal[3]); + /* no break */ deliberate_fall_through + case 3: zEnd = (const char*)sqlite3_value_text(apVal[2]); + /* no break */ deliberate_fall_through + case 2: zStart = (const char*)sqlite3_value_text(apVal[1]); + } + if( !zEllipsis || !zEnd || !zStart ){ + sqlite3_result_error_nomem(pContext); + }else if( nToken==0 ){ + sqlite3_result_text(pContext, "", -1, SQLITE_STATIC); + }else if( SQLITE_OK==fts3CursorSeek(pContext, pCsr) ){ + sqlite3Fts3Snippet(pContext, pCsr, zStart, zEnd, zEllipsis, iCol, nToken); + } +} + +/* +** Implementation of the offsets() function for FTS3 +*/ +static void fts3OffsetsFunc( + sqlite3_context *pContext, /* SQLite function call context */ + int nVal, /* Size of argument array */ + sqlite3_value **apVal /* Array of arguments */ +){ + Fts3Cursor *pCsr; /* Cursor handle passed through apVal[0] */ + + UNUSED_PARAMETER(nVal); + + assert( nVal==1 ); + if( fts3FunctionArg(pContext, "offsets", apVal[0], &pCsr) ) return; + assert( pCsr ); + if( SQLITE_OK==fts3CursorSeek(pContext, pCsr) ){ + sqlite3Fts3Offsets(pContext, pCsr); + } +} + +/* +** Implementation of the special optimize() function for FTS3. This +** function merges all segments in the database to a single segment. +** Example usage is: +** +** SELECT optimize(t) FROM t LIMIT 1; +** +** where 't' is the name of an FTS3 table. +*/ +static void fts3OptimizeFunc( + sqlite3_context *pContext, /* SQLite function call context */ + int nVal, /* Size of argument array */ + sqlite3_value **apVal /* Array of arguments */ +){ + int rc; /* Return code */ + Fts3Table *p; /* Virtual table handle */ + Fts3Cursor *pCursor; /* Cursor handle passed through apVal[0] */ + + UNUSED_PARAMETER(nVal); + + assert( nVal==1 ); + if( fts3FunctionArg(pContext, "optimize", apVal[0], &pCursor) ) return; + p = (Fts3Table *)pCursor->base.pVtab; + assert( p ); + + rc = sqlite3Fts3Optimize(p); + + switch( rc ){ + case SQLITE_OK: + sqlite3_result_text(pContext, "Index optimized", -1, SQLITE_STATIC); + break; + case SQLITE_DONE: + sqlite3_result_text(pContext, "Index already optimal", -1, SQLITE_STATIC); + break; + default: + sqlite3_result_error_code(pContext, rc); + break; + } +} + +/* +** Implementation of the matchinfo() function for FTS3 +*/ +static void fts3MatchinfoFunc( + sqlite3_context *pContext, /* SQLite function call context */ + int nVal, /* Size of argument array */ + sqlite3_value **apVal /* Array of arguments */ +){ + Fts3Cursor *pCsr; /* Cursor handle passed through apVal[0] */ + assert( nVal==1 || nVal==2 ); + if( SQLITE_OK==fts3FunctionArg(pContext, "matchinfo", apVal[0], &pCsr) ){ + const char *zArg = 0; + if( nVal>1 ){ + zArg = (const char *)sqlite3_value_text(apVal[1]); + } + sqlite3Fts3Matchinfo(pContext, pCsr, zArg); + } +} + +/* +** This routine implements the xFindFunction method for the FTS3 +** virtual table. +*/ +static int fts3FindFunctionMethod( + sqlite3_vtab *pVtab, /* Virtual table handle */ + int nArg, /* Number of SQL function arguments */ + const char *zName, /* Name of SQL function */ + void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), /* OUT: Result */ + void **ppArg /* Unused */ +){ + struct Overloaded { + const char *zName; + void (*xFunc)(sqlite3_context*,int,sqlite3_value**); + } aOverload[] = { + { "snippet", fts3SnippetFunc }, + { "offsets", fts3OffsetsFunc }, + { "optimize", fts3OptimizeFunc }, + { "matchinfo", fts3MatchinfoFunc }, + }; + int i; /* Iterator variable */ + + UNUSED_PARAMETER(pVtab); + UNUSED_PARAMETER(nArg); + UNUSED_PARAMETER(ppArg); + + for(i=0; idb; /* Database connection */ + int rc; /* Return Code */ + + /* At this point it must be known if the %_stat table exists or not. + ** So bHasStat may not be 2. */ + rc = fts3SetHasStat(p); + + /* As it happens, the pending terms table is always empty here. This is + ** because an "ALTER TABLE RENAME TABLE" statement inside a transaction + ** always opens a savepoint transaction. And the xSavepoint() method + ** flushes the pending terms table. But leave the (no-op) call to + ** PendingTermsFlush() in in case that changes. + */ + assert( p->nPendingData==0 ); + if( rc==SQLITE_OK ){ + rc = sqlite3Fts3PendingTermsFlush(p); + } + + p->bIgnoreSavepoint = 1; + + if( p->zContentTbl==0 ){ + fts3DbExec(&rc, db, + "ALTER TABLE %Q.'%q_content' RENAME TO '%q_content';", + p->zDb, p->zName, zName + ); + } + + if( p->bHasDocsize ){ + fts3DbExec(&rc, db, + "ALTER TABLE %Q.'%q_docsize' RENAME TO '%q_docsize';", + p->zDb, p->zName, zName + ); + } + if( p->bHasStat ){ + fts3DbExec(&rc, db, + "ALTER TABLE %Q.'%q_stat' RENAME TO '%q_stat';", + p->zDb, p->zName, zName + ); + } + fts3DbExec(&rc, db, + "ALTER TABLE %Q.'%q_segments' RENAME TO '%q_segments';", + p->zDb, p->zName, zName + ); + fts3DbExec(&rc, db, + "ALTER TABLE %Q.'%q_segdir' RENAME TO '%q_segdir';", + p->zDb, p->zName, zName + ); + + p->bIgnoreSavepoint = 0; + return rc; +} + +/* +** The xSavepoint() method. +** +** Flush the contents of the pending-terms table to disk. +*/ +static int fts3SavepointMethod(sqlite3_vtab *pVtab, int iSavepoint){ + int rc = SQLITE_OK; + Fts3Table *pTab = (Fts3Table*)pVtab; + assert( pTab->inTransaction ); + assert( pTab->mxSavepoint<=iSavepoint ); + TESTONLY( pTab->mxSavepoint = iSavepoint ); + + if( pTab->bIgnoreSavepoint==0 ){ + if( fts3HashCount(&pTab->aIndex[0].hPending)>0 ){ + char *zSql = sqlite3_mprintf("INSERT INTO %Q.%Q(%Q) VALUES('flush')", + pTab->zDb, pTab->zName, pTab->zName + ); + if( zSql ){ + pTab->bIgnoreSavepoint = 1; + rc = sqlite3_exec(pTab->db, zSql, 0, 0, 0); + pTab->bIgnoreSavepoint = 0; + sqlite3_free(zSql); + }else{ + rc = SQLITE_NOMEM; + } + } + if( rc==SQLITE_OK ){ + pTab->iSavepoint = iSavepoint+1; + } + } + return rc; +} + +/* +** The xRelease() method. +** +** This is a no-op. +*/ +static int fts3ReleaseMethod(sqlite3_vtab *pVtab, int iSavepoint){ + Fts3Table *pTab = (Fts3Table*)pVtab; + assert( pTab->inTransaction ); + assert( pTab->mxSavepoint >= iSavepoint ); + TESTONLY( pTab->mxSavepoint = iSavepoint-1 ); + pTab->iSavepoint = iSavepoint; + return SQLITE_OK; +} + +/* +** The xRollbackTo() method. +** +** Discard the contents of the pending terms table. +*/ +static int fts3RollbackToMethod(sqlite3_vtab *pVtab, int iSavepoint){ + Fts3Table *pTab = (Fts3Table*)pVtab; + UNUSED_PARAMETER(iSavepoint); + assert( pTab->inTransaction ); + TESTONLY( pTab->mxSavepoint = iSavepoint ); + if( (iSavepoint+1)<=pTab->iSavepoint ){ + sqlite3Fts3PendingTermsClear(pTab); + } + return SQLITE_OK; +} + +/* +** Return true if zName is the extension on one of the shadow tables used +** by this module. +*/ +static int fts3ShadowName(const char *zName){ + static const char *azName[] = { + "content", "docsize", "segdir", "segments", "stat", + }; + unsigned int i; + for(i=0; ibFts4 ? 4 : 3, zSchema, zTabname, sqlite3_errstr(rc)); + if( *pzErr ) rc = SQLITE_OK; + }else if( rc==SQLITE_OK && bOk==0 ){ + *pzErr = sqlite3_mprintf("malformed inverted index for FTS%d table %s.%s", + p->bFts4 ? 4 : 3, zSchema, zTabname); + if( *pzErr==0 ) rc = SQLITE_NOMEM; + } + sqlite3Fts3SegmentsClose(p); + return rc; +} + + + +static const sqlite3_module fts3Module = { + /* iVersion */ 4, + /* xCreate */ fts3CreateMethod, + /* xConnect */ fts3ConnectMethod, + /* xBestIndex */ fts3BestIndexMethod, + /* xDisconnect */ fts3DisconnectMethod, + /* xDestroy */ fts3DestroyMethod, + /* xOpen */ fts3OpenMethod, + /* xClose */ fts3CloseMethod, + /* xFilter */ fts3FilterMethod, + /* xNext */ fts3NextMethod, + /* xEof */ fts3EofMethod, + /* xColumn */ fts3ColumnMethod, + /* xRowid */ fts3RowidMethod, + /* xUpdate */ fts3UpdateMethod, + /* xBegin */ fts3BeginMethod, + /* xSync */ fts3SyncMethod, + /* xCommit */ fts3CommitMethod, + /* xRollback */ fts3RollbackMethod, + /* xFindFunction */ fts3FindFunctionMethod, + /* xRename */ fts3RenameMethod, + /* xSavepoint */ fts3SavepointMethod, + /* xRelease */ fts3ReleaseMethod, + /* xRollbackTo */ fts3RollbackToMethod, + /* xShadowName */ fts3ShadowName, + /* xIntegrity */ fts3IntegrityMethod, +}; + +/* +** This function is registered as the module destructor (called when an +** FTS3 enabled database connection is closed). It frees the memory +** allocated for the tokenizer hash table. +*/ +static void hashDestroy(void *p){ + Fts3HashWrapper *pHash = (Fts3HashWrapper *)p; + pHash->nRef--; + if( pHash->nRef<=0 ){ + sqlite3Fts3HashClear(&pHash->hash); + sqlite3_free(pHash); + } +} + +/* +** The fts3 built-in tokenizers - "simple", "porter" and "icu"- are +** implemented in files fts3_tokenizer1.c, fts3_porter.c and fts3_icu.c +** respectively. The following three forward declarations are for functions +** declared in these files used to retrieve the respective implementations. +** +** Calling sqlite3Fts3SimpleTokenizerModule() sets the value pointed +** to by the argument to point to the "simple" tokenizer implementation. +** And so on. +*/ +SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(sqlite3_tokenizer_module const**ppModule); +SQLITE_PRIVATE void sqlite3Fts3PorterTokenizerModule(sqlite3_tokenizer_module const**ppModule); +#ifndef SQLITE_DISABLE_FTS3_UNICODE +SQLITE_PRIVATE void sqlite3Fts3UnicodeTokenizer(sqlite3_tokenizer_module const**ppModule); +#endif +#ifdef SQLITE_ENABLE_ICU +SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule(sqlite3_tokenizer_module const**ppModule); +#endif + +/* +** Initialize the fts3 extension. If this extension is built as part +** of the sqlite library, then this function is called directly by +** SQLite. If fts3 is built as a dynamically loadable extension, this +** function is called by the sqlite3_extension_init() entry point. +*/ +SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db){ + int rc = SQLITE_OK; + Fts3HashWrapper *pHash = 0; + const sqlite3_tokenizer_module *pSimple = 0; + const sqlite3_tokenizer_module *pPorter = 0; +#ifndef SQLITE_DISABLE_FTS3_UNICODE + const sqlite3_tokenizer_module *pUnicode = 0; +#endif + +#ifdef SQLITE_ENABLE_ICU + const sqlite3_tokenizer_module *pIcu = 0; + sqlite3Fts3IcuTokenizerModule(&pIcu); +#endif + +#ifndef SQLITE_DISABLE_FTS3_UNICODE + sqlite3Fts3UnicodeTokenizer(&pUnicode); +#endif + +#ifdef SQLITE_TEST + rc = sqlite3Fts3InitTerm(db); + if( rc!=SQLITE_OK ) return rc; +#endif + + rc = sqlite3Fts3InitAux(db); + if( rc!=SQLITE_OK ) return rc; + + sqlite3Fts3SimpleTokenizerModule(&pSimple); + sqlite3Fts3PorterTokenizerModule(&pPorter); + + /* Allocate and initialize the hash-table used to store tokenizers. */ + pHash = sqlite3_malloc(sizeof(Fts3HashWrapper)); + if( !pHash ){ + rc = SQLITE_NOMEM; + }else{ + sqlite3Fts3HashInit(&pHash->hash, FTS3_HASH_STRING, 1); + pHash->nRef = 0; + } + + /* Load the built-in tokenizers into the hash table */ + if( rc==SQLITE_OK ){ + if( sqlite3Fts3HashInsert(&pHash->hash, "simple", 7, (void *)pSimple) + || sqlite3Fts3HashInsert(&pHash->hash, "porter", 7, (void *)pPorter) + +#ifndef SQLITE_DISABLE_FTS3_UNICODE + || sqlite3Fts3HashInsert(&pHash->hash, "unicode61", 10, (void *)pUnicode) +#endif +#ifdef SQLITE_ENABLE_ICU + || (pIcu && sqlite3Fts3HashInsert(&pHash->hash, "icu", 4, (void *)pIcu)) +#endif + ){ + rc = SQLITE_NOMEM; + } + } + +#ifdef SQLITE_TEST + if( rc==SQLITE_OK ){ + rc = sqlite3Fts3ExprInitTestInterface(db, &pHash->hash); + } +#endif + + /* Create the virtual table wrapper around the hash-table and overload + ** the four scalar functions. If this is successful, register the + ** module with sqlite. + */ + if( SQLITE_OK==rc + && SQLITE_OK==(rc=sqlite3Fts3InitHashTable(db,&pHash->hash,"fts3_tokenizer")) + && SQLITE_OK==(rc = sqlite3_overload_function(db, "snippet", -1)) + && SQLITE_OK==(rc = sqlite3_overload_function(db, "offsets", 1)) + && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 1)) + && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 2)) + && SQLITE_OK==(rc = sqlite3_overload_function(db, "optimize", 1)) + ){ + pHash->nRef++; + rc = sqlite3_create_module_v2( + db, "fts3", &fts3Module, (void *)pHash, hashDestroy + ); + if( rc==SQLITE_OK ){ + pHash->nRef++; + rc = sqlite3_create_module_v2( + db, "fts4", &fts3Module, (void *)pHash, hashDestroy + ); + } + if( rc==SQLITE_OK ){ + pHash->nRef++; + rc = sqlite3Fts3InitTok(db, (void *)pHash, hashDestroy); + } + return rc; + } + + + /* An error has occurred. Delete the hash table and return the error code. */ + assert( rc!=SQLITE_OK ); + if( pHash ){ + sqlite3Fts3HashClear(&pHash->hash); + sqlite3_free(pHash); + } + return rc; +} + +/* +** Allocate an Fts3MultiSegReader for each token in the expression headed +** by pExpr. +** +** An Fts3SegReader object is a cursor that can seek or scan a range of +** entries within a single segment b-tree. An Fts3MultiSegReader uses multiple +** Fts3SegReader objects internally to provide an interface to seek or scan +** within the union of all segments of a b-tree. Hence the name. +** +** If the allocated Fts3MultiSegReader just seeks to a single entry in a +** segment b-tree (if the term is not a prefix or it is a prefix for which +** there exists prefix b-tree of the right length) then it may be traversed +** and merged incrementally. Otherwise, it has to be merged into an in-memory +** doclist and then traversed. +*/ +static void fts3EvalAllocateReaders( + Fts3Cursor *pCsr, /* FTS cursor handle */ + Fts3Expr *pExpr, /* Allocate readers for this expression */ + int *pnToken, /* OUT: Total number of tokens in phrase. */ + int *pnOr, /* OUT: Total number of OR nodes in expr. */ + int *pRc /* IN/OUT: Error code */ +){ + if( pExpr && SQLITE_OK==*pRc ){ + if( pExpr->eType==FTSQUERY_PHRASE ){ + int i; + int nToken = pExpr->pPhrase->nToken; + *pnToken += nToken; + for(i=0; ipPhrase->aToken[i]; + int rc = fts3TermSegReaderCursor(pCsr, + pToken->z, pToken->n, pToken->isPrefix, &pToken->pSegcsr + ); + if( rc!=SQLITE_OK ){ + *pRc = rc; + return; + } + } + assert( pExpr->pPhrase->iDoclistToken==0 ); + pExpr->pPhrase->iDoclistToken = -1; + }else{ + *pnOr += (pExpr->eType==FTSQUERY_OR); + fts3EvalAllocateReaders(pCsr, pExpr->pLeft, pnToken, pnOr, pRc); + fts3EvalAllocateReaders(pCsr, pExpr->pRight, pnToken, pnOr, pRc); + } + } +} + +/* +** Arguments pList/nList contain the doclist for token iToken of phrase p. +** It is merged into the main doclist stored in p->doclist.aAll/nAll. +** +** This function assumes that pList points to a buffer allocated using +** sqlite3_malloc(). This function takes responsibility for eventually +** freeing the buffer. +** +** SQLITE_OK is returned if successful, or SQLITE_NOMEM if an error occurs. +*/ +static int fts3EvalPhraseMergeToken( + Fts3Table *pTab, /* FTS Table pointer */ + Fts3Phrase *p, /* Phrase to merge pList/nList into */ + int iToken, /* Token pList/nList corresponds to */ + char *pList, /* Pointer to doclist */ + int nList /* Number of bytes in pList */ +){ + int rc = SQLITE_OK; + assert( iToken!=p->iDoclistToken ); + + if( pList==0 ){ + sqlite3_free(p->doclist.aAll); + p->doclist.aAll = 0; + p->doclist.nAll = 0; + } + + else if( p->iDoclistToken<0 ){ + p->doclist.aAll = pList; + p->doclist.nAll = nList; + } + + else if( p->doclist.aAll==0 ){ + sqlite3_free(pList); + } + + else { + char *pLeft; + char *pRight; + int nLeft; + int nRight; + int nDiff; + + if( p->iDoclistTokendoclist.aAll; + nLeft = p->doclist.nAll; + pRight = pList; + nRight = nList; + nDiff = iToken - p->iDoclistToken; + }else{ + pRight = p->doclist.aAll; + nRight = p->doclist.nAll; + pLeft = pList; + nLeft = nList; + nDiff = p->iDoclistToken - iToken; + } + + rc = fts3DoclistPhraseMerge( + pTab->bDescIdx, nDiff, pLeft, nLeft, &pRight, &nRight + ); + sqlite3_free(pLeft); + p->doclist.aAll = pRight; + p->doclist.nAll = nRight; + } + + if( iToken>p->iDoclistToken ) p->iDoclistToken = iToken; + return rc; +} + +/* +** Load the doclist for phrase p into p->doclist.aAll/nAll. The loaded doclist +** does not take deferred tokens into account. +** +** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code. +*/ +static int fts3EvalPhraseLoad( + Fts3Cursor *pCsr, /* FTS Cursor handle */ + Fts3Phrase *p /* Phrase object */ +){ + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + int iToken; + int rc = SQLITE_OK; + + for(iToken=0; rc==SQLITE_OK && iTokennToken; iToken++){ + Fts3PhraseToken *pToken = &p->aToken[iToken]; + assert( pToken->pDeferred==0 || pToken->pSegcsr==0 ); + + if( pToken->pSegcsr ){ + int nThis = 0; + char *pThis = 0; + rc = fts3TermSelect(pTab, pToken, p->iColumn, &nThis, &pThis); + if( rc==SQLITE_OK ){ + rc = fts3EvalPhraseMergeToken(pTab, p, iToken, pThis, nThis); + } + } + assert( pToken->pSegcsr==0 ); + } + + return rc; +} + +#ifndef SQLITE_DISABLE_FTS4_DEFERRED +/* +** This function is called on each phrase after the position lists for +** any deferred tokens have been loaded into memory. It updates the phrases +** current position list to include only those positions that are really +** instances of the phrase (after considering deferred tokens). If this +** means that the phrase does not appear in the current row, doclist.pList +** and doclist.nList are both zeroed. +** +** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code. +*/ +static int fts3EvalDeferredPhrase(Fts3Cursor *pCsr, Fts3Phrase *pPhrase){ + int iToken; /* Used to iterate through phrase tokens */ + char *aPoslist = 0; /* Position list for deferred tokens */ + int nPoslist = 0; /* Number of bytes in aPoslist */ + int iPrev = -1; /* Token number of previous deferred token */ + char *aFree = (pPhrase->doclist.bFreeList ? pPhrase->doclist.pList : 0); + + for(iToken=0; iTokennToken; iToken++){ + Fts3PhraseToken *pToken = &pPhrase->aToken[iToken]; + Fts3DeferredToken *pDeferred = pToken->pDeferred; + + if( pDeferred ){ + char *pList; + int nList; + int rc = sqlite3Fts3DeferredTokenList(pDeferred, &pList, &nList); + if( rc!=SQLITE_OK ) return rc; + + if( pList==0 ){ + sqlite3_free(aPoslist); + sqlite3_free(aFree); + pPhrase->doclist.pList = 0; + pPhrase->doclist.nList = 0; + return SQLITE_OK; + + }else if( aPoslist==0 ){ + aPoslist = pList; + nPoslist = nList; + + }else{ + char *aOut = pList; + char *p1 = aPoslist; + char *p2 = aOut; + + assert( iPrev>=0 ); + fts3PoslistPhraseMerge(&aOut, iToken-iPrev, 0, 1, &p1, &p2); + sqlite3_free(aPoslist); + aPoslist = pList; + nPoslist = (int)(aOut - aPoslist); + if( nPoslist==0 ){ + sqlite3_free(aPoslist); + sqlite3_free(aFree); + pPhrase->doclist.pList = 0; + pPhrase->doclist.nList = 0; + return SQLITE_OK; + } + } + iPrev = iToken; + } + } + + if( iPrev>=0 ){ + int nMaxUndeferred = pPhrase->iDoclistToken; + if( nMaxUndeferred<0 ){ + pPhrase->doclist.pList = aPoslist; + pPhrase->doclist.nList = nPoslist; + pPhrase->doclist.iDocid = pCsr->iPrevId; + pPhrase->doclist.bFreeList = 1; + }else{ + int nDistance; + char *p1; + char *p2; + char *aOut; + + if( nMaxUndeferred>iPrev ){ + p1 = aPoslist; + p2 = pPhrase->doclist.pList; + nDistance = nMaxUndeferred - iPrev; + }else{ + p1 = pPhrase->doclist.pList; + p2 = aPoslist; + nDistance = iPrev - nMaxUndeferred; + } + + aOut = (char *)sqlite3Fts3MallocZero(((i64)nPoslist)+FTS3_BUFFER_PADDING); + if( !aOut ){ + sqlite3_free(aPoslist); + return SQLITE_NOMEM; + } + + pPhrase->doclist.pList = aOut; + assert( p1 && p2 ); + if( fts3PoslistPhraseMerge(&aOut, nDistance, 0, 1, &p1, &p2) ){ + pPhrase->doclist.bFreeList = 1; + pPhrase->doclist.nList = (int)(aOut - pPhrase->doclist.pList); + }else{ + sqlite3_free(aOut); + pPhrase->doclist.pList = 0; + pPhrase->doclist.nList = 0; + } + sqlite3_free(aPoslist); + } + } + + if( pPhrase->doclist.pList!=aFree ) sqlite3_free(aFree); + return SQLITE_OK; +} +#endif /* SQLITE_DISABLE_FTS4_DEFERRED */ + +/* +** Maximum number of tokens a phrase may have to be considered for the +** incremental doclists strategy. +*/ +#define MAX_INCR_PHRASE_TOKENS 4 + +/* +** This function is called for each Fts3Phrase in a full-text query +** expression to initialize the mechanism for returning rows. Once this +** function has been called successfully on an Fts3Phrase, it may be +** used with fts3EvalPhraseNext() to iterate through the matching docids. +** +** If parameter bOptOk is true, then the phrase may (or may not) use the +** incremental loading strategy. Otherwise, the entire doclist is loaded into +** memory within this call. +** +** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code. +*/ +static int fts3EvalPhraseStart(Fts3Cursor *pCsr, int bOptOk, Fts3Phrase *p){ + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + int rc = SQLITE_OK; /* Error code */ + int i; + + /* Determine if doclists may be loaded from disk incrementally. This is + ** possible if the bOptOk argument is true, the FTS doclists will be + ** scanned in forward order, and the phrase consists of + ** MAX_INCR_PHRASE_TOKENS or fewer tokens, none of which are are "^first" + ** tokens or prefix tokens that cannot use a prefix-index. */ + int bHaveIncr = 0; + int bIncrOk = (bOptOk + && pCsr->bDesc==pTab->bDescIdx + && p->nToken<=MAX_INCR_PHRASE_TOKENS && p->nToken>0 +#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) + && pTab->bNoIncrDoclist==0 +#endif + ); + for(i=0; bIncrOk==1 && inToken; i++){ + Fts3PhraseToken *pToken = &p->aToken[i]; + if( pToken->bFirst || (pToken->pSegcsr!=0 && !pToken->pSegcsr->bLookup) ){ + bIncrOk = 0; + } + if( pToken->pSegcsr ) bHaveIncr = 1; + } + + if( bIncrOk && bHaveIncr ){ + /* Use the incremental approach. */ + int iCol = (p->iColumn >= pTab->nColumn ? -1 : p->iColumn); + for(i=0; rc==SQLITE_OK && inToken; i++){ + Fts3PhraseToken *pToken = &p->aToken[i]; + Fts3MultiSegReader *pSegcsr = pToken->pSegcsr; + if( pSegcsr ){ + rc = sqlite3Fts3MsrIncrStart(pTab, pSegcsr, iCol, pToken->z, pToken->n); + } + } + p->bIncr = 1; + }else{ + /* Load the full doclist for the phrase into memory. */ + rc = fts3EvalPhraseLoad(pCsr, p); + p->bIncr = 0; + } + + assert( rc!=SQLITE_OK || p->nToken<1 || p->aToken[0].pSegcsr==0 || p->bIncr ); + return rc; +} + +/* +** This function is used to iterate backwards (from the end to start) +** through doclists. It is used by this module to iterate through phrase +** doclists in reverse and by the fts3_write.c module to iterate through +** pending-terms lists when writing to databases with "order=desc". +** +** The doclist may be sorted in ascending (parameter bDescIdx==0) or +** descending (parameter bDescIdx==1) order of docid. Regardless, this +** function iterates from the end of the doclist to the beginning. +*/ +SQLITE_PRIVATE void sqlite3Fts3DoclistPrev( + int bDescIdx, /* True if the doclist is desc */ + char *aDoclist, /* Pointer to entire doclist */ + int nDoclist, /* Length of aDoclist in bytes */ + char **ppIter, /* IN/OUT: Iterator pointer */ + sqlite3_int64 *piDocid, /* IN/OUT: Docid pointer */ + int *pnList, /* OUT: List length pointer */ + u8 *pbEof /* OUT: End-of-file flag */ +){ + char *p = *ppIter; + + assert( nDoclist>0 ); + assert( *pbEof==0 ); + assert_fts3_nc( p || *piDocid==0 ); + assert( !p || (p>aDoclist && p<&aDoclist[nDoclist]) ); + + if( p==0 ){ + sqlite3_int64 iDocid = 0; + char *pNext = 0; + char *pDocid = aDoclist; + char *pEnd = &aDoclist[nDoclist]; + int iMul = 1; + + while( pDocid0 ); + assert( *pbEof==0 ); + assert_fts3_nc( p || *piDocid==0 ); + assert( !p || (p>=aDoclist && p<=&aDoclist[nDoclist]) ); + + if( p==0 ){ + p = aDoclist; + p += sqlite3Fts3GetVarint(p, piDocid); + }else{ + fts3PoslistCopy(0, &p); + while( p<&aDoclist[nDoclist] && *p==0 ) p++; + if( p>=&aDoclist[nDoclist] ){ + *pbEof = 1; + }else{ + sqlite3_int64 iVar; + p += sqlite3Fts3GetVarint(p, &iVar); + *piDocid += ((bDescIdx ? -1 : 1) * iVar); + } + } + + *ppIter = p; +} + +/* +** Advance the iterator pDL to the next entry in pDL->aAll/nAll. Set *pbEof +** to true if EOF is reached. +*/ +static void fts3EvalDlPhraseNext( + Fts3Table *pTab, + Fts3Doclist *pDL, + u8 *pbEof +){ + char *pIter; /* Used to iterate through aAll */ + char *pEnd; /* 1 byte past end of aAll */ + + if( pDL->pNextDocid ){ + pIter = pDL->pNextDocid; + assert( pDL->aAll!=0 || pIter==0 ); + }else{ + pIter = pDL->aAll; + } + + if( pIter==0 || pIter>=(pEnd = pDL->aAll + pDL->nAll) ){ + /* We have already reached the end of this doclist. EOF. */ + *pbEof = 1; + }else{ + sqlite3_int64 iDelta; + pIter += sqlite3Fts3GetVarint(pIter, &iDelta); + if( pTab->bDescIdx==0 || pDL->pNextDocid==0 ){ + pDL->iDocid += iDelta; + }else{ + pDL->iDocid -= iDelta; + } + pDL->pList = pIter; + fts3PoslistCopy(0, &pIter); + pDL->nList = (int)(pIter - pDL->pList); + + /* pIter now points just past the 0x00 that terminates the position- + ** list for document pDL->iDocid. However, if this position-list was + ** edited in place by fts3EvalNearTrim(), then pIter may not actually + ** point to the start of the next docid value. The following line deals + ** with this case by advancing pIter past the zero-padding added by + ** fts3EvalNearTrim(). */ + while( pIterpNextDocid = pIter; + assert( pIter>=&pDL->aAll[pDL->nAll] || *pIter ); + *pbEof = 0; + } +} + +/* +** Helper type used by fts3EvalIncrPhraseNext() and incrPhraseTokenNext(). +*/ +typedef struct TokenDoclist TokenDoclist; +struct TokenDoclist { + int bIgnore; + sqlite3_int64 iDocid; + char *pList; + int nList; +}; + +/* +** Token pToken is an incrementally loaded token that is part of a +** multi-token phrase. Advance it to the next matching document in the +** database and populate output variable *p with the details of the new +** entry. Or, if the iterator has reached EOF, set *pbEof to true. +** +** If an error occurs, return an SQLite error code. Otherwise, return +** SQLITE_OK. +*/ +static int incrPhraseTokenNext( + Fts3Table *pTab, /* Virtual table handle */ + Fts3Phrase *pPhrase, /* Phrase to advance token of */ + int iToken, /* Specific token to advance */ + TokenDoclist *p, /* OUT: Docid and doclist for new entry */ + u8 *pbEof /* OUT: True if iterator is at EOF */ +){ + int rc = SQLITE_OK; + + if( pPhrase->iDoclistToken==iToken ){ + assert( p->bIgnore==0 ); + assert( pPhrase->aToken[iToken].pSegcsr==0 ); + fts3EvalDlPhraseNext(pTab, &pPhrase->doclist, pbEof); + p->pList = pPhrase->doclist.pList; + p->nList = pPhrase->doclist.nList; + p->iDocid = pPhrase->doclist.iDocid; + }else{ + Fts3PhraseToken *pToken = &pPhrase->aToken[iToken]; + assert( pToken->pDeferred==0 ); + assert( pToken->pSegcsr || pPhrase->iDoclistToken>=0 ); + if( pToken->pSegcsr ){ + assert( p->bIgnore==0 ); + rc = sqlite3Fts3MsrIncrNext( + pTab, pToken->pSegcsr, &p->iDocid, &p->pList, &p->nList + ); + if( p->pList==0 ) *pbEof = 1; + }else{ + p->bIgnore = 1; + } + } + + return rc; +} + + +/* +** The phrase iterator passed as the second argument: +** +** * features at least one token that uses an incremental doclist, and +** +** * does not contain any deferred tokens. +** +** Advance it to the next matching document in the database and populate +** the Fts3Doclist.pList and nList fields. +** +** If there is no "next" entry and no error occurs, then *pbEof is set to +** 1 before returning. Otherwise, if no error occurs and the iterator is +** successfully advanced, *pbEof is set to 0. +** +** If an error occurs, return an SQLite error code. Otherwise, return +** SQLITE_OK. +*/ +static int fts3EvalIncrPhraseNext( + Fts3Cursor *pCsr, /* FTS Cursor handle */ + Fts3Phrase *p, /* Phrase object to advance to next docid */ + u8 *pbEof /* OUT: Set to 1 if EOF */ +){ + int rc = SQLITE_OK; + Fts3Doclist *pDL = &p->doclist; + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + u8 bEof = 0; + + /* This is only called if it is guaranteed that the phrase has at least + ** one incremental token. In which case the bIncr flag is set. */ + assert( p->bIncr==1 ); + + if( p->nToken==1 ){ + rc = sqlite3Fts3MsrIncrNext(pTab, p->aToken[0].pSegcsr, + &pDL->iDocid, &pDL->pList, &pDL->nList + ); + if( pDL->pList==0 ) bEof = 1; + }else{ + int bDescDoclist = pCsr->bDesc; + struct TokenDoclist a[MAX_INCR_PHRASE_TOKENS]; + + memset(a, 0, sizeof(a)); + assert( p->nToken<=MAX_INCR_PHRASE_TOKENS ); + assert( p->iDoclistTokennToken && bEof==0; i++){ + rc = incrPhraseTokenNext(pTab, p, i, &a[i], &bEof); + if( a[i].bIgnore==0 && (bMaxSet==0 || DOCID_CMP(iMax, a[i].iDocid)<0) ){ + iMax = a[i].iDocid; + bMaxSet = 1; + } + } + assert( rc!=SQLITE_OK || (p->nToken>=1 && a[p->nToken-1].bIgnore==0) ); + assert( rc!=SQLITE_OK || bMaxSet ); + + /* Keep advancing iterators until they all point to the same document */ + for(i=0; inToken; i++){ + while( rc==SQLITE_OK && bEof==0 + && a[i].bIgnore==0 && DOCID_CMP(a[i].iDocid, iMax)<0 + ){ + rc = incrPhraseTokenNext(pTab, p, i, &a[i], &bEof); + if( DOCID_CMP(a[i].iDocid, iMax)>0 ){ + iMax = a[i].iDocid; + i = 0; + } + } + } + + /* Check if the current entries really are a phrase match */ + if( bEof==0 ){ + int nList = 0; + int nByte = a[p->nToken-1].nList; + char *aDoclist = sqlite3_malloc64((i64)nByte+FTS3_BUFFER_PADDING); + if( !aDoclist ) return SQLITE_NOMEM; + memcpy(aDoclist, a[p->nToken-1].pList, nByte+1); + memset(&aDoclist[nByte], 0, FTS3_BUFFER_PADDING); + + for(i=0; i<(p->nToken-1); i++){ + if( a[i].bIgnore==0 ){ + char *pL = a[i].pList; + char *pR = aDoclist; + char *pOut = aDoclist; + int nDist = p->nToken-1-i; + int res = fts3PoslistPhraseMerge(&pOut, nDist, 0, 1, &pL, &pR); + if( res==0 ) break; + nList = (int)(pOut - aDoclist); + } + } + if( i==(p->nToken-1) ){ + pDL->iDocid = iMax; + pDL->pList = aDoclist; + pDL->nList = nList; + pDL->bFreeList = 1; + break; + } + sqlite3_free(aDoclist); + } + } + } + + *pbEof = bEof; + return rc; +} + +/* +** Attempt to move the phrase iterator to point to the next matching docid. +** If an error occurs, return an SQLite error code. Otherwise, return +** SQLITE_OK. +** +** If there is no "next" entry and no error occurs, then *pbEof is set to +** 1 before returning. Otherwise, if no error occurs and the iterator is +** successfully advanced, *pbEof is set to 0. +*/ +static int fts3EvalPhraseNext( + Fts3Cursor *pCsr, /* FTS Cursor handle */ + Fts3Phrase *p, /* Phrase object to advance to next docid */ + u8 *pbEof /* OUT: Set to 1 if EOF */ +){ + int rc = SQLITE_OK; + Fts3Doclist *pDL = &p->doclist; + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + + if( p->bIncr ){ + rc = fts3EvalIncrPhraseNext(pCsr, p, pbEof); + }else if( pCsr->bDesc!=pTab->bDescIdx && pDL->nAll ){ + sqlite3Fts3DoclistPrev(pTab->bDescIdx, pDL->aAll, pDL->nAll, + &pDL->pNextDocid, &pDL->iDocid, &pDL->nList, pbEof + ); + pDL->pList = pDL->pNextDocid; + }else{ + fts3EvalDlPhraseNext(pTab, pDL, pbEof); + } + + return rc; +} + +/* +** +** If *pRc is not SQLITE_OK when this function is called, it is a no-op. +** Otherwise, fts3EvalPhraseStart() is called on all phrases within the +** expression. Also the Fts3Expr.bDeferred variable is set to true for any +** expressions for which all descendent tokens are deferred. +** +** If parameter bOptOk is zero, then it is guaranteed that the +** Fts3Phrase.doclist.aAll/nAll variables contain the entire doclist for +** each phrase in the expression (subject to deferred token processing). +** Or, if bOptOk is non-zero, then one or more tokens within the expression +** may be loaded incrementally, meaning doclist.aAll/nAll is not available. +** +** If an error occurs within this function, *pRc is set to an SQLite error +** code before returning. +*/ +static void fts3EvalStartReaders( + Fts3Cursor *pCsr, /* FTS Cursor handle */ + Fts3Expr *pExpr, /* Expression to initialize phrases in */ + int *pRc /* IN/OUT: Error code */ +){ + if( pExpr && SQLITE_OK==*pRc ){ + if( pExpr->eType==FTSQUERY_PHRASE ){ + int nToken = pExpr->pPhrase->nToken; + if( nToken ){ + int i; + for(i=0; ipPhrase->aToken[i].pDeferred==0 ) break; + } + pExpr->bDeferred = (i==nToken); + } + *pRc = fts3EvalPhraseStart(pCsr, 1, pExpr->pPhrase); + }else{ + fts3EvalStartReaders(pCsr, pExpr->pLeft, pRc); + fts3EvalStartReaders(pCsr, pExpr->pRight, pRc); + pExpr->bDeferred = (pExpr->pLeft->bDeferred && pExpr->pRight->bDeferred); + } + } +} + +/* +** An array of the following structures is assembled as part of the process +** of selecting tokens to defer before the query starts executing (as part +** of the xFilter() method). There is one element in the array for each +** token in the FTS expression. +** +** Tokens are divided into AND/NEAR clusters. All tokens in a cluster belong +** to phrases that are connected only by AND and NEAR operators (not OR or +** NOT). When determining tokens to defer, each AND/NEAR cluster is considered +** separately. The root of a tokens AND/NEAR cluster is stored in +** Fts3TokenAndCost.pRoot. +*/ +typedef struct Fts3TokenAndCost Fts3TokenAndCost; +struct Fts3TokenAndCost { + Fts3Phrase *pPhrase; /* The phrase the token belongs to */ + int iToken; /* Position of token in phrase */ + Fts3PhraseToken *pToken; /* The token itself */ + Fts3Expr *pRoot; /* Root of NEAR/AND cluster */ + int nOvfl; /* Number of overflow pages to load doclist */ + int iCol; /* The column the token must match */ +}; + +/* +** This function is used to populate an allocated Fts3TokenAndCost array. +** +** If *pRc is not SQLITE_OK when this function is called, it is a no-op. +** Otherwise, if an error occurs during execution, *pRc is set to an +** SQLite error code. +*/ +static void fts3EvalTokenCosts( + Fts3Cursor *pCsr, /* FTS Cursor handle */ + Fts3Expr *pRoot, /* Root of current AND/NEAR cluster */ + Fts3Expr *pExpr, /* Expression to consider */ + Fts3TokenAndCost **ppTC, /* Write new entries to *(*ppTC)++ */ + Fts3Expr ***ppOr, /* Write new OR root to *(*ppOr)++ */ + int *pRc /* IN/OUT: Error code */ +){ + if( *pRc==SQLITE_OK ){ + if( pExpr->eType==FTSQUERY_PHRASE ){ + Fts3Phrase *pPhrase = pExpr->pPhrase; + int i; + for(i=0; *pRc==SQLITE_OK && inToken; i++){ + Fts3TokenAndCost *pTC = (*ppTC)++; + pTC->pPhrase = pPhrase; + pTC->iToken = i; + pTC->pRoot = pRoot; + pTC->pToken = &pPhrase->aToken[i]; + pTC->iCol = pPhrase->iColumn; + *pRc = sqlite3Fts3MsrOvfl(pCsr, pTC->pToken->pSegcsr, &pTC->nOvfl); + } + }else if( pExpr->eType!=FTSQUERY_NOT ){ + assert( pExpr->eType==FTSQUERY_OR + || pExpr->eType==FTSQUERY_AND + || pExpr->eType==FTSQUERY_NEAR + ); + assert( pExpr->pLeft && pExpr->pRight ); + if( pExpr->eType==FTSQUERY_OR ){ + pRoot = pExpr->pLeft; + **ppOr = pRoot; + (*ppOr)++; + } + fts3EvalTokenCosts(pCsr, pRoot, pExpr->pLeft, ppTC, ppOr, pRc); + if( pExpr->eType==FTSQUERY_OR ){ + pRoot = pExpr->pRight; + **ppOr = pRoot; + (*ppOr)++; + } + fts3EvalTokenCosts(pCsr, pRoot, pExpr->pRight, ppTC, ppOr, pRc); + } + } +} + +/* +** Determine the average document (row) size in pages. If successful, +** write this value to *pnPage and return SQLITE_OK. Otherwise, return +** an SQLite error code. +** +** The average document size in pages is calculated by first calculating +** determining the average size in bytes, B. If B is less than the amount +** of data that will fit on a single leaf page of an intkey table in +** this database, then the average docsize is 1. Otherwise, it is 1 plus +** the number of overflow pages consumed by a record B bytes in size. +*/ +static int fts3EvalAverageDocsize(Fts3Cursor *pCsr, int *pnPage){ + int rc = SQLITE_OK; + if( pCsr->nRowAvg==0 ){ + /* The average document size, which is required to calculate the cost + ** of each doclist, has not yet been determined. Read the required + ** data from the %_stat table to calculate it. + ** + ** Entry 0 of the %_stat table is a blob containing (nCol+1) FTS3 + ** varints, where nCol is the number of columns in the FTS3 table. + ** The first varint is the number of documents currently stored in + ** the table. The following nCol varints contain the total amount of + ** data stored in all rows of each column of the table, from left + ** to right. + */ + Fts3Table *p = (Fts3Table*)pCsr->base.pVtab; + sqlite3_stmt *pStmt; + sqlite3_int64 nDoc = 0; + sqlite3_int64 nByte = 0; + const char *pEnd; + const char *a; + + rc = sqlite3Fts3SelectDoctotal(p, &pStmt); + if( rc!=SQLITE_OK ) return rc; + a = sqlite3_column_blob(pStmt, 0); + testcase( a==0 ); /* If %_stat.value set to X'' */ + if( a ){ + pEnd = &a[sqlite3_column_bytes(pStmt, 0)]; + a += sqlite3Fts3GetVarintBounded(a, pEnd, &nDoc); + while( anDoc = nDoc; + pCsr->nRowAvg = (int)(((nByte / nDoc) + p->nPgsz) / p->nPgsz); + assert( pCsr->nRowAvg>0 ); + rc = sqlite3_reset(pStmt); + } + + *pnPage = pCsr->nRowAvg; + return rc; +} + +/* +** This function is called to select the tokens (if any) that will be +** deferred. The array aTC[] has already been populated when this is +** called. +** +** This function is called once for each AND/NEAR cluster in the +** expression. Each invocation determines which tokens to defer within +** the cluster with root node pRoot. See comments above the definition +** of struct Fts3TokenAndCost for more details. +** +** If no error occurs, SQLITE_OK is returned and sqlite3Fts3DeferToken() +** called on each token to defer. Otherwise, an SQLite error code is +** returned. +*/ +static int fts3EvalSelectDeferred( + Fts3Cursor *pCsr, /* FTS Cursor handle */ + Fts3Expr *pRoot, /* Consider tokens with this root node */ + Fts3TokenAndCost *aTC, /* Array of expression tokens and costs */ + int nTC /* Number of entries in aTC[] */ +){ + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + int nDocSize = 0; /* Number of pages per doc loaded */ + int rc = SQLITE_OK; /* Return code */ + int ii; /* Iterator variable for various purposes */ + int nOvfl = 0; /* Total overflow pages used by doclists */ + int nToken = 0; /* Total number of tokens in cluster */ + + int nMinEst = 0; /* The minimum count for any phrase so far. */ + int nLoad4 = 1; /* (Phrases that will be loaded)^4. */ + + /* Tokens are never deferred for FTS tables created using the content=xxx + ** option. The reason being that it is not guaranteed that the content + ** table actually contains the same data as the index. To prevent this from + ** causing any problems, the deferred token optimization is completely + ** disabled for content=xxx tables. */ + if( pTab->zContentTbl ){ + return SQLITE_OK; + } + + /* Count the tokens in this AND/NEAR cluster. If none of the doclists + ** associated with the tokens spill onto overflow pages, or if there is + ** only 1 token, exit early. No tokens to defer in this case. */ + for(ii=0; ii0 ); + + + /* Iterate through all tokens in this AND/NEAR cluster, in ascending order + ** of the number of overflow pages that will be loaded by the pager layer + ** to retrieve the entire doclist for the token from the full-text index. + ** Load the doclists for tokens that are either: + ** + ** a. The cheapest token in the entire query (i.e. the one visited by the + ** first iteration of this loop), or + ** + ** b. Part of a multi-token phrase. + ** + ** After each token doclist is loaded, merge it with the others from the + ** same phrase and count the number of documents that the merged doclist + ** contains. Set variable "nMinEst" to the smallest number of documents in + ** any phrase doclist for which 1 or more token doclists have been loaded. + ** Let nOther be the number of other phrases for which it is certain that + ** one or more tokens will not be deferred. + ** + ** Then, for each token, defer it if loading the doclist would result in + ** loading N or more overflow pages into memory, where N is computed as: + ** + ** (nMinEst + 4^nOther - 1) / (4^nOther) + */ + for(ii=0; iinOvfl) + ){ + pTC = &aTC[iTC]; + } + } + assert( pTC ); + + if( ii && pTC->nOvfl>=((nMinEst+(nLoad4/4)-1)/(nLoad4/4))*nDocSize ){ + /* The number of overflow pages to load for this (and therefore all + ** subsequent) tokens is greater than the estimated number of pages + ** that will be loaded if all subsequent tokens are deferred. + */ + Fts3PhraseToken *pToken = pTC->pToken; + rc = sqlite3Fts3DeferToken(pCsr, pToken, pTC->iCol); + fts3SegReaderCursorFree(pToken->pSegcsr); + pToken->pSegcsr = 0; + }else{ + /* Set nLoad4 to the value of (4^nOther) for the next iteration of the + ** for-loop. Except, limit the value to 2^24 to prevent it from + ** overflowing the 32-bit integer it is stored in. */ + if( ii<12 ) nLoad4 = nLoad4*4; + + if( ii==0 || (pTC->pPhrase->nToken>1 && ii!=nToken-1) ){ + /* Either this is the cheapest token in the entire query, or it is + ** part of a multi-token phrase. Either way, the entire doclist will + ** (eventually) be loaded into memory. It may as well be now. */ + Fts3PhraseToken *pToken = pTC->pToken; + int nList = 0; + char *pList = 0; + rc = fts3TermSelect(pTab, pToken, pTC->iCol, &nList, &pList); + assert( rc==SQLITE_OK || pList==0 ); + if( rc==SQLITE_OK ){ + rc = fts3EvalPhraseMergeToken( + pTab, pTC->pPhrase, pTC->iToken,pList,nList + ); + } + if( rc==SQLITE_OK ){ + int nCount; + nCount = fts3DoclistCountDocids( + pTC->pPhrase->doclist.aAll, pTC->pPhrase->doclist.nAll + ); + if( ii==0 || nCountpToken = 0; + } + + return rc; +} + +/* +** This function is called from within the xFilter method. It initializes +** the full-text query currently stored in pCsr->pExpr. To iterate through +** the results of a query, the caller does: +** +** fts3EvalStart(pCsr); +** while( 1 ){ +** fts3EvalNext(pCsr); +** if( pCsr->bEof ) break; +** ... return row pCsr->iPrevId to the caller ... +** } +*/ +static int fts3EvalStart(Fts3Cursor *pCsr){ + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + int rc = SQLITE_OK; + int nToken = 0; + int nOr = 0; + + /* Allocate a MultiSegReader for each token in the expression. */ + fts3EvalAllocateReaders(pCsr, pCsr->pExpr, &nToken, &nOr, &rc); + + /* Determine which, if any, tokens in the expression should be deferred. */ +#ifndef SQLITE_DISABLE_FTS4_DEFERRED + if( rc==SQLITE_OK && nToken>1 && pTab->bFts4 ){ + Fts3TokenAndCost *aTC; + aTC = (Fts3TokenAndCost *)sqlite3_malloc64( + sizeof(Fts3TokenAndCost) * nToken + + sizeof(Fts3Expr *) * nOr * 2 + ); + + if( !aTC ){ + rc = SQLITE_NOMEM; + }else{ + Fts3Expr **apOr = (Fts3Expr **)&aTC[nToken]; + int ii; + Fts3TokenAndCost *pTC = aTC; + Fts3Expr **ppOr = apOr; + + fts3EvalTokenCosts(pCsr, 0, pCsr->pExpr, &pTC, &ppOr, &rc); + nToken = (int)(pTC-aTC); + nOr = (int)(ppOr-apOr); + + if( rc==SQLITE_OK ){ + rc = fts3EvalSelectDeferred(pCsr, 0, aTC, nToken); + for(ii=0; rc==SQLITE_OK && iipExpr, &rc); + return rc; +} + +/* +** Invalidate the current position list for phrase pPhrase. +*/ +static void fts3EvalInvalidatePoslist(Fts3Phrase *pPhrase){ + if( pPhrase->doclist.bFreeList ){ + sqlite3_free(pPhrase->doclist.pList); + } + pPhrase->doclist.pList = 0; + pPhrase->doclist.nList = 0; + pPhrase->doclist.bFreeList = 0; +} + +/* +** This function is called to edit the position list associated with +** the phrase object passed as the fifth argument according to a NEAR +** condition. For example: +** +** abc NEAR/5 "def ghi" +** +** Parameter nNear is passed the NEAR distance of the expression (5 in +** the example above). When this function is called, *paPoslist points to +** the position list, and *pnToken is the number of phrase tokens in the +** phrase on the other side of the NEAR operator to pPhrase. For example, +** if pPhrase refers to the "def ghi" phrase, then *paPoslist points to +** the position list associated with phrase "abc". +** +** All positions in the pPhrase position list that are not sufficiently +** close to a position in the *paPoslist position list are removed. If this +** leaves 0 positions, zero is returned. Otherwise, non-zero. +** +** Before returning, *paPoslist is set to point to the position lsit +** associated with pPhrase. And *pnToken is set to the number of tokens in +** pPhrase. +*/ +static int fts3EvalNearTrim( + int nNear, /* NEAR distance. As in "NEAR/nNear". */ + char *aTmp, /* Temporary space to use */ + char **paPoslist, /* IN/OUT: Position list */ + int *pnToken, /* IN/OUT: Tokens in phrase of *paPoslist */ + Fts3Phrase *pPhrase /* The phrase object to trim the doclist of */ +){ + int nParam1 = nNear + pPhrase->nToken; + int nParam2 = nNear + *pnToken; + int nNew; + char *p2; + char *pOut; + int res; + + assert( pPhrase->doclist.pList ); + + p2 = pOut = pPhrase->doclist.pList; + res = fts3PoslistNearMerge( + &pOut, aTmp, nParam1, nParam2, paPoslist, &p2 + ); + if( res ){ + nNew = (int)(pOut - pPhrase->doclist.pList) - 1; + assert_fts3_nc( nNew<=pPhrase->doclist.nList && nNew>0 ); + if( nNew>=0 && nNew<=pPhrase->doclist.nList ){ + assert( pPhrase->doclist.pList[nNew]=='\0' ); + memset(&pPhrase->doclist.pList[nNew], 0, pPhrase->doclist.nList - nNew); + pPhrase->doclist.nList = nNew; + } + *paPoslist = pPhrase->doclist.pList; + *pnToken = pPhrase->nToken; + } + + return res; +} + +/* +** This function is a no-op if *pRc is other than SQLITE_OK when it is called. +** Otherwise, it advances the expression passed as the second argument to +** point to the next matching row in the database. Expressions iterate through +** matching rows in docid order. Ascending order if Fts3Cursor.bDesc is zero, +** or descending if it is non-zero. +** +** If an error occurs, *pRc is set to an SQLite error code. Otherwise, if +** successful, the following variables in pExpr are set: +** +** Fts3Expr.bEof (non-zero if EOF - there is no next row) +** Fts3Expr.iDocid (valid if bEof==0. The docid of the next row) +** +** If the expression is of type FTSQUERY_PHRASE, and the expression is not +** at EOF, then the following variables are populated with the position list +** for the phrase for the visited row: +** +** FTs3Expr.pPhrase->doclist.nList (length of pList in bytes) +** FTs3Expr.pPhrase->doclist.pList (pointer to position list) +** +** It says above that this function advances the expression to the next +** matching row. This is usually true, but there are the following exceptions: +** +** 1. Deferred tokens are not taken into account. If a phrase consists +** entirely of deferred tokens, it is assumed to match every row in +** the db. In this case the position-list is not populated at all. +** +** Or, if a phrase contains one or more deferred tokens and one or +** more non-deferred tokens, then the expression is advanced to the +** next possible match, considering only non-deferred tokens. In other +** words, if the phrase is "A B C", and "B" is deferred, the expression +** is advanced to the next row that contains an instance of "A * C", +** where "*" may match any single token. The position list in this case +** is populated as for "A * C" before returning. +** +** 2. NEAR is treated as AND. If the expression is "x NEAR y", it is +** advanced to point to the next row that matches "x AND y". +** +** See sqlite3Fts3EvalTestDeferred() for details on testing if a row is +** really a match, taking into account deferred tokens and NEAR operators. +*/ +static void fts3EvalNextRow( + Fts3Cursor *pCsr, /* FTS Cursor handle */ + Fts3Expr *pExpr, /* Expr. to advance to next matching row */ + int *pRc /* IN/OUT: Error code */ +){ + if( *pRc==SQLITE_OK && pExpr->bEof==0 ){ + int bDescDoclist = pCsr->bDesc; /* Used by DOCID_CMP() macro */ + pExpr->bStart = 1; + + switch( pExpr->eType ){ + case FTSQUERY_NEAR: + case FTSQUERY_AND: { + Fts3Expr *pLeft = pExpr->pLeft; + Fts3Expr *pRight = pExpr->pRight; + assert( !pLeft->bDeferred || !pRight->bDeferred ); + + if( pLeft->bDeferred ){ + /* LHS is entirely deferred. So we assume it matches every row. + ** Advance the RHS iterator to find the next row visited. */ + fts3EvalNextRow(pCsr, pRight, pRc); + pExpr->iDocid = pRight->iDocid; + pExpr->bEof = pRight->bEof; + }else if( pRight->bDeferred ){ + /* RHS is entirely deferred. So we assume it matches every row. + ** Advance the LHS iterator to find the next row visited. */ + fts3EvalNextRow(pCsr, pLeft, pRc); + pExpr->iDocid = pLeft->iDocid; + pExpr->bEof = pLeft->bEof; + }else{ + /* Neither the RHS or LHS are deferred. */ + fts3EvalNextRow(pCsr, pLeft, pRc); + fts3EvalNextRow(pCsr, pRight, pRc); + while( !pLeft->bEof && !pRight->bEof && *pRc==SQLITE_OK ){ + sqlite3_int64 iDiff = DOCID_CMP(pLeft->iDocid, pRight->iDocid); + if( iDiff==0 ) break; + if( iDiff<0 ){ + fts3EvalNextRow(pCsr, pLeft, pRc); + }else{ + fts3EvalNextRow(pCsr, pRight, pRc); + } + } + pExpr->iDocid = pLeft->iDocid; + pExpr->bEof = (pLeft->bEof || pRight->bEof); + if( pExpr->eType==FTSQUERY_NEAR && pExpr->bEof ){ + assert( pRight->eType==FTSQUERY_PHRASE ); + if( pRight->pPhrase->doclist.aAll ){ + Fts3Doclist *pDl = &pRight->pPhrase->doclist; + while( *pRc==SQLITE_OK && pRight->bEof==0 ){ + memset(pDl->pList, 0, pDl->nList); + fts3EvalNextRow(pCsr, pRight, pRc); + } + } + if( pLeft->pPhrase && pLeft->pPhrase->doclist.aAll ){ + Fts3Doclist *pDl = &pLeft->pPhrase->doclist; + while( *pRc==SQLITE_OK && pLeft->bEof==0 ){ + memset(pDl->pList, 0, pDl->nList); + fts3EvalNextRow(pCsr, pLeft, pRc); + } + } + pRight->bEof = pLeft->bEof = 1; + } + } + break; + } + + case FTSQUERY_OR: { + Fts3Expr *pLeft = pExpr->pLeft; + Fts3Expr *pRight = pExpr->pRight; + sqlite3_int64 iCmp = DOCID_CMP(pLeft->iDocid, pRight->iDocid); + + assert_fts3_nc( pLeft->bStart || pLeft->iDocid==pRight->iDocid ); + assert_fts3_nc( pRight->bStart || pLeft->iDocid==pRight->iDocid ); + + if( pRight->bEof || (pLeft->bEof==0 && iCmp<0) ){ + fts3EvalNextRow(pCsr, pLeft, pRc); + }else if( pLeft->bEof || iCmp>0 ){ + fts3EvalNextRow(pCsr, pRight, pRc); + }else{ + fts3EvalNextRow(pCsr, pLeft, pRc); + fts3EvalNextRow(pCsr, pRight, pRc); + } + + pExpr->bEof = (pLeft->bEof && pRight->bEof); + iCmp = DOCID_CMP(pLeft->iDocid, pRight->iDocid); + if( pRight->bEof || (pLeft->bEof==0 && iCmp<0) ){ + pExpr->iDocid = pLeft->iDocid; + }else{ + pExpr->iDocid = pRight->iDocid; + } + + break; + } + + case FTSQUERY_NOT: { + Fts3Expr *pLeft = pExpr->pLeft; + Fts3Expr *pRight = pExpr->pRight; + + if( pRight->bStart==0 ){ + fts3EvalNextRow(pCsr, pRight, pRc); + assert( *pRc!=SQLITE_OK || pRight->bStart ); + } + + fts3EvalNextRow(pCsr, pLeft, pRc); + if( pLeft->bEof==0 ){ + while( !*pRc + && !pRight->bEof + && DOCID_CMP(pLeft->iDocid, pRight->iDocid)>0 + ){ + fts3EvalNextRow(pCsr, pRight, pRc); + } + } + pExpr->iDocid = pLeft->iDocid; + pExpr->bEof = pLeft->bEof; + break; + } + + default: { + Fts3Phrase *pPhrase = pExpr->pPhrase; + fts3EvalInvalidatePoslist(pPhrase); + *pRc = fts3EvalPhraseNext(pCsr, pPhrase, &pExpr->bEof); + pExpr->iDocid = pPhrase->doclist.iDocid; + break; + } + } + } +} + +/* +** If *pRc is not SQLITE_OK, or if pExpr is not the root node of a NEAR +** cluster, then this function returns 1 immediately. +** +** Otherwise, it checks if the current row really does match the NEAR +** expression, using the data currently stored in the position lists +** (Fts3Expr->pPhrase.doclist.pList/nList) for each phrase in the expression. +** +** If the current row is a match, the position list associated with each +** phrase in the NEAR expression is edited in place to contain only those +** phrase instances sufficiently close to their peers to satisfy all NEAR +** constraints. In this case it returns 1. If the NEAR expression does not +** match the current row, 0 is returned. The position lists may or may not +** be edited if 0 is returned. +*/ +static int fts3EvalNearTest(Fts3Expr *pExpr, int *pRc){ + int res = 1; + + /* The following block runs if pExpr is the root of a NEAR query. + ** For example, the query: + ** + ** "w" NEAR "x" NEAR "y" NEAR "z" + ** + ** which is represented in tree form as: + ** + ** | + ** +--NEAR--+ <-- root of NEAR query + ** | | + ** +--NEAR--+ "z" + ** | | + ** +--NEAR--+ "y" + ** | | + ** "w" "x" + ** + ** The right-hand child of a NEAR node is always a phrase. The + ** left-hand child may be either a phrase or a NEAR node. There are + ** no exceptions to this - it's the way the parser in fts3_expr.c works. + */ + if( *pRc==SQLITE_OK + && pExpr->eType==FTSQUERY_NEAR + && (pExpr->pParent==0 || pExpr->pParent->eType!=FTSQUERY_NEAR) + ){ + Fts3Expr *p; + sqlite3_int64 nTmp = 0; /* Bytes of temp space */ + char *aTmp; /* Temp space for PoslistNearMerge() */ + + /* Allocate temporary working space. */ + for(p=pExpr; p->pLeft; p=p->pLeft){ + assert( p->pRight->pPhrase->doclist.nList>0 ); + nTmp += p->pRight->pPhrase->doclist.nList; + } + nTmp += p->pPhrase->doclist.nList; + aTmp = sqlite3_malloc64(nTmp*2 + FTS3_VARINT_MAX); + if( !aTmp ){ + *pRc = SQLITE_NOMEM; + res = 0; + }else{ + char *aPoslist = p->pPhrase->doclist.pList; + int nToken = p->pPhrase->nToken; + + for(p=p->pParent;res && p && p->eType==FTSQUERY_NEAR; p=p->pParent){ + Fts3Phrase *pPhrase = p->pRight->pPhrase; + int nNear = p->nNear; + res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase); + } + + aPoslist = pExpr->pRight->pPhrase->doclist.pList; + nToken = pExpr->pRight->pPhrase->nToken; + for(p=pExpr->pLeft; p && res; p=p->pLeft){ + int nNear; + Fts3Phrase *pPhrase; + assert( p->pParent && p->pParent->pLeft==p ); + nNear = p->pParent->nNear; + pPhrase = ( + p->eType==FTSQUERY_NEAR ? p->pRight->pPhrase : p->pPhrase + ); + res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase); + } + } + + sqlite3_free(aTmp); + } + + return res; +} + +/* +** This function is a helper function for sqlite3Fts3EvalTestDeferred(). +** Assuming no error occurs or has occurred, It returns non-zero if the +** expression passed as the second argument matches the row that pCsr +** currently points to, or zero if it does not. +** +** If *pRc is not SQLITE_OK when this function is called, it is a no-op. +** If an error occurs during execution of this function, *pRc is set to +** the appropriate SQLite error code. In this case the returned value is +** undefined. +*/ +static int fts3EvalTestExpr( + Fts3Cursor *pCsr, /* FTS cursor handle */ + Fts3Expr *pExpr, /* Expr to test. May or may not be root. */ + int *pRc /* IN/OUT: Error code */ +){ + int bHit = 1; /* Return value */ + if( *pRc==SQLITE_OK ){ + switch( pExpr->eType ){ + case FTSQUERY_NEAR: + case FTSQUERY_AND: + bHit = ( + fts3EvalTestExpr(pCsr, pExpr->pLeft, pRc) + && fts3EvalTestExpr(pCsr, pExpr->pRight, pRc) + && fts3EvalNearTest(pExpr, pRc) + ); + + /* If the NEAR expression does not match any rows, zero the doclist for + ** all phrases involved in the NEAR. This is because the snippet(), + ** offsets() and matchinfo() functions are not supposed to recognize + ** any instances of phrases that are part of unmatched NEAR queries. + ** For example if this expression: + ** + ** ... MATCH 'a OR (b NEAR c)' + ** + ** is matched against a row containing: + ** + ** 'a b d e' + ** + ** then any snippet() should ony highlight the "a" term, not the "b" + ** (as "b" is part of a non-matching NEAR clause). + */ + if( bHit==0 + && pExpr->eType==FTSQUERY_NEAR + && (pExpr->pParent==0 || pExpr->pParent->eType!=FTSQUERY_NEAR) + ){ + Fts3Expr *p; + for(p=pExpr; p->pPhrase==0; p=p->pLeft){ + if( p->pRight->iDocid==pCsr->iPrevId ){ + fts3EvalInvalidatePoslist(p->pRight->pPhrase); + } + } + if( p->iDocid==pCsr->iPrevId ){ + fts3EvalInvalidatePoslist(p->pPhrase); + } + } + + break; + + case FTSQUERY_OR: { + int bHit1 = fts3EvalTestExpr(pCsr, pExpr->pLeft, pRc); + int bHit2 = fts3EvalTestExpr(pCsr, pExpr->pRight, pRc); + bHit = bHit1 || bHit2; + break; + } + + case FTSQUERY_NOT: + bHit = ( + fts3EvalTestExpr(pCsr, pExpr->pLeft, pRc) + && !fts3EvalTestExpr(pCsr, pExpr->pRight, pRc) + ); + break; + + default: { +#ifndef SQLITE_DISABLE_FTS4_DEFERRED + if( pCsr->pDeferred && (pExpr->bDeferred || ( + pExpr->iDocid==pCsr->iPrevId && pExpr->pPhrase->doclist.pList + ))){ + Fts3Phrase *pPhrase = pExpr->pPhrase; + if( pExpr->bDeferred ){ + fts3EvalInvalidatePoslist(pPhrase); + } + *pRc = fts3EvalDeferredPhrase(pCsr, pPhrase); + bHit = (pPhrase->doclist.pList!=0); + pExpr->iDocid = pCsr->iPrevId; + }else +#endif + { + bHit = ( + pExpr->bEof==0 && pExpr->iDocid==pCsr->iPrevId + && pExpr->pPhrase->doclist.nList>0 + ); + } + break; + } + } + } + return bHit; +} + +/* +** This function is called as the second part of each xNext operation when +** iterating through the results of a full-text query. At this point the +** cursor points to a row that matches the query expression, with the +** following caveats: +** +** * Up until this point, "NEAR" operators in the expression have been +** treated as "AND". +** +** * Deferred tokens have not yet been considered. +** +** If *pRc is not SQLITE_OK when this function is called, it immediately +** returns 0. Otherwise, it tests whether or not after considering NEAR +** operators and deferred tokens the current row is still a match for the +** expression. It returns 1 if both of the following are true: +** +** 1. *pRc is SQLITE_OK when this function returns, and +** +** 2. After scanning the current FTS table row for the deferred tokens, +** it is determined that the row does *not* match the query. +** +** Or, if no error occurs and it seems the current row does match the FTS +** query, return 0. +*/ +SQLITE_PRIVATE int sqlite3Fts3EvalTestDeferred(Fts3Cursor *pCsr, int *pRc){ + int rc = *pRc; + int bMiss = 0; + if( rc==SQLITE_OK ){ + + /* If there are one or more deferred tokens, load the current row into + ** memory and scan it to determine the position list for each deferred + ** token. Then, see if this row is really a match, considering deferred + ** tokens and NEAR operators (neither of which were taken into account + ** earlier, by fts3EvalNextRow()). + */ + if( pCsr->pDeferred ){ + rc = fts3CursorSeek(0, pCsr); + if( rc==SQLITE_OK ){ + rc = sqlite3Fts3CacheDeferredDoclists(pCsr); + } + } + bMiss = (0==fts3EvalTestExpr(pCsr, pCsr->pExpr, &rc)); + + /* Free the position-lists accumulated for each deferred token above. */ + sqlite3Fts3FreeDeferredDoclists(pCsr); + *pRc = rc; + } + return (rc==SQLITE_OK && bMiss); +} + +/* +** Advance to the next document that matches the FTS expression in +** Fts3Cursor.pExpr. +*/ +static int fts3EvalNext(Fts3Cursor *pCsr){ + int rc = SQLITE_OK; /* Return Code */ + Fts3Expr *pExpr = pCsr->pExpr; + assert( pCsr->isEof==0 ); + if( pExpr==0 ){ + pCsr->isEof = 1; + }else{ + do { + if( pCsr->isRequireSeek==0 ){ + sqlite3_reset(pCsr->pStmt); + } + assert( sqlite3_data_count(pCsr->pStmt)==0 ); + fts3EvalNextRow(pCsr, pExpr, &rc); + pCsr->isEof = pExpr->bEof; + pCsr->isRequireSeek = 1; + pCsr->isMatchinfoNeeded = 1; + pCsr->iPrevId = pExpr->iDocid; + }while( pCsr->isEof==0 && sqlite3Fts3EvalTestDeferred(pCsr, &rc) ); + } + + /* Check if the cursor is past the end of the docid range specified + ** by Fts3Cursor.iMinDocid/iMaxDocid. If so, set the EOF flag. */ + if( rc==SQLITE_OK && ( + (pCsr->bDesc==0 && pCsr->iPrevId>pCsr->iMaxDocid) + || (pCsr->bDesc!=0 && pCsr->iPrevIdiMinDocid) + )){ + pCsr->isEof = 1; + } + + return rc; +} + +/* +** Restart iteration for expression pExpr so that the next call to +** fts3EvalNext() visits the first row. Do not allow incremental +** loading or merging of phrase doclists for this iteration. +** +** If *pRc is other than SQLITE_OK when this function is called, it is +** a no-op. If an error occurs within this function, *pRc is set to an +** SQLite error code before returning. +*/ +static void fts3EvalRestart( + Fts3Cursor *pCsr, + Fts3Expr *pExpr, + int *pRc +){ + if( pExpr && *pRc==SQLITE_OK ){ + Fts3Phrase *pPhrase = pExpr->pPhrase; + + if( pPhrase ){ + fts3EvalInvalidatePoslist(pPhrase); + if( pPhrase->bIncr ){ + int i; + for(i=0; inToken; i++){ + Fts3PhraseToken *pToken = &pPhrase->aToken[i]; + assert( pToken->pDeferred==0 ); + if( pToken->pSegcsr ){ + sqlite3Fts3MsrIncrRestart(pToken->pSegcsr); + } + } + *pRc = fts3EvalPhraseStart(pCsr, 0, pPhrase); + } + pPhrase->doclist.pNextDocid = 0; + pPhrase->doclist.iDocid = 0; + pPhrase->pOrPoslist = 0; + } + + pExpr->iDocid = 0; + pExpr->bEof = 0; + pExpr->bStart = 0; + + fts3EvalRestart(pCsr, pExpr->pLeft, pRc); + fts3EvalRestart(pCsr, pExpr->pRight, pRc); + } +} + +/* +** Expression node pExpr is an MSR phrase. This function restarts pExpr +** so that it is a regular phrase query, not an MSR. SQLITE_OK is returned +** if successful, or an SQLite error code otherwise. +*/ +SQLITE_PRIVATE int sqlite3Fts3MsrCancel(Fts3Cursor *pCsr, Fts3Expr *pExpr){ + int rc = SQLITE_OK; + if( pExpr->bEof==0 ){ + i64 iDocid = pExpr->iDocid; + fts3EvalRestart(pCsr, pExpr, &rc); + while( rc==SQLITE_OK && pExpr->iDocid!=iDocid ){ + fts3EvalNextRow(pCsr, pExpr, &rc); + if( pExpr->bEof ) rc = FTS_CORRUPT_VTAB; + } + } + return rc; +} + +/* +** After allocating the Fts3Expr.aMI[] array for each phrase in the +** expression rooted at pExpr, the cursor iterates through all rows matched +** by pExpr, calling this function for each row. This function increments +** the values in Fts3Expr.aMI[] according to the position-list currently +** found in Fts3Expr.pPhrase->doclist.pList for each of the phrase +** expression nodes. +*/ +static void fts3EvalUpdateCounts(Fts3Expr *pExpr, int nCol){ + if( pExpr ){ + Fts3Phrase *pPhrase = pExpr->pPhrase; + if( pPhrase && pPhrase->doclist.pList ){ + int iCol = 0; + char *p = pPhrase->doclist.pList; + + do{ + u8 c = 0; + int iCnt = 0; + while( 0xFE & (*p | c) ){ + if( (c&0x80)==0 ) iCnt++; + c = *p++ & 0x80; + } + + /* aMI[iCol*3 + 1] = Number of occurrences + ** aMI[iCol*3 + 2] = Number of rows containing at least one instance + */ + pExpr->aMI[iCol*3 + 1] += iCnt; + pExpr->aMI[iCol*3 + 2] += (iCnt>0); + if( *p==0x00 ) break; + p++; + p += fts3GetVarint32(p, &iCol); + }while( iColpLeft, nCol); + fts3EvalUpdateCounts(pExpr->pRight, nCol); + } +} + +/* +** This is an sqlite3Fts3ExprIterate() callback. If the Fts3Expr.aMI[] array +** has not yet been allocated, allocate and zero it. Otherwise, just zero +** it. +*/ +static int fts3AllocateMSI(Fts3Expr *pExpr, int iPhrase, void *pCtx){ + Fts3Table *pTab = (Fts3Table*)pCtx; + UNUSED_PARAMETER(iPhrase); + if( pExpr->aMI==0 ){ + pExpr->aMI = (u32 *)sqlite3_malloc64(pTab->nColumn * 3 * sizeof(u32)); + if( pExpr->aMI==0 ) return SQLITE_NOMEM; + } + memset(pExpr->aMI, 0, pTab->nColumn * 3 * sizeof(u32)); + return SQLITE_OK; +} + +/* +** Expression pExpr must be of type FTSQUERY_PHRASE. +** +** If it is not already allocated and populated, this function allocates and +** populates the Fts3Expr.aMI[] array for expression pExpr. If pExpr is part +** of a NEAR expression, then it also allocates and populates the same array +** for all other phrases that are part of the NEAR expression. +** +** SQLITE_OK is returned if the aMI[] array is successfully allocated and +** populated. Otherwise, if an error occurs, an SQLite error code is returned. +*/ +static int fts3EvalGatherStats( + Fts3Cursor *pCsr, /* Cursor object */ + Fts3Expr *pExpr /* FTSQUERY_PHRASE expression */ +){ + int rc = SQLITE_OK; /* Return code */ + + assert( pExpr->eType==FTSQUERY_PHRASE ); + if( pExpr->aMI==0 ){ + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + Fts3Expr *pRoot; /* Root of NEAR expression */ + + sqlite3_int64 iPrevId = pCsr->iPrevId; + sqlite3_int64 iDocid; + u8 bEof; + + /* Find the root of the NEAR expression */ + pRoot = pExpr; + while( pRoot->pParent + && (pRoot->pParent->eType==FTSQUERY_NEAR || pRoot->bDeferred) + ){ + pRoot = pRoot->pParent; + } + iDocid = pRoot->iDocid; + bEof = pRoot->bEof; + assert( pRoot->bStart ); + + /* Allocate space for the aMSI[] array of each FTSQUERY_PHRASE node */ + rc = sqlite3Fts3ExprIterate(pRoot, fts3AllocateMSI, (void*)pTab); + if( rc!=SQLITE_OK ) return rc; + fts3EvalRestart(pCsr, pRoot, &rc); + + while( pCsr->isEof==0 && rc==SQLITE_OK ){ + + do { + /* Ensure the %_content statement is reset. */ + if( pCsr->isRequireSeek==0 ) sqlite3_reset(pCsr->pStmt); + assert( sqlite3_data_count(pCsr->pStmt)==0 ); + + /* Advance to the next document */ + fts3EvalNextRow(pCsr, pRoot, &rc); + pCsr->isEof = pRoot->bEof; + pCsr->isRequireSeek = 1; + pCsr->isMatchinfoNeeded = 1; + pCsr->iPrevId = pRoot->iDocid; + }while( pCsr->isEof==0 + && pRoot->eType==FTSQUERY_NEAR + && sqlite3Fts3EvalTestDeferred(pCsr, &rc) + ); + + if( rc==SQLITE_OK && pCsr->isEof==0 ){ + fts3EvalUpdateCounts(pRoot, pTab->nColumn); + } + } + + pCsr->isEof = 0; + pCsr->iPrevId = iPrevId; + + if( bEof ){ + pRoot->bEof = bEof; + }else{ + /* Caution: pRoot may iterate through docids in ascending or descending + ** order. For this reason, even though it seems more defensive, the + ** do loop can not be written: + ** + ** do {...} while( pRoot->iDocidbEof==0 ); + if( pRoot->bEof ) rc = FTS_CORRUPT_VTAB; + }while( pRoot->iDocid!=iDocid && rc==SQLITE_OK ); + } + } + return rc; +} + +/* +** This function is used by the matchinfo() module to query a phrase +** expression node for the following information: +** +** 1. The total number of occurrences of the phrase in each column of +** the FTS table (considering all rows), and +** +** 2. For each column, the number of rows in the table for which the +** column contains at least one instance of the phrase. +** +** If no error occurs, SQLITE_OK is returned and the values for each column +** written into the array aiOut as follows: +** +** aiOut[iCol*3 + 1] = Number of occurrences +** aiOut[iCol*3 + 2] = Number of rows containing at least one instance +** +** Caveats: +** +** * If a phrase consists entirely of deferred tokens, then all output +** values are set to the number of documents in the table. In other +** words we assume that very common tokens occur exactly once in each +** column of each row of the table. +** +** * If a phrase contains some deferred tokens (and some non-deferred +** tokens), count the potential occurrence identified by considering +** the non-deferred tokens instead of actual phrase occurrences. +** +** * If the phrase is part of a NEAR expression, then only phrase instances +** that meet the NEAR constraint are included in the counts. +*/ +SQLITE_PRIVATE int sqlite3Fts3EvalPhraseStats( + Fts3Cursor *pCsr, /* FTS cursor handle */ + Fts3Expr *pExpr, /* Phrase expression */ + u32 *aiOut /* Array to write results into (see above) */ +){ + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + int rc = SQLITE_OK; + int iCol; + + if( pExpr->bDeferred && pExpr->pParent->eType!=FTSQUERY_NEAR ){ + assert( pCsr->nDoc>0 ); + for(iCol=0; iColnColumn; iCol++){ + aiOut[iCol*3 + 1] = (u32)pCsr->nDoc; + aiOut[iCol*3 + 2] = (u32)pCsr->nDoc; + } + }else{ + rc = fts3EvalGatherStats(pCsr, pExpr); + if( rc==SQLITE_OK ){ + assert( pExpr->aMI ); + for(iCol=0; iColnColumn; iCol++){ + aiOut[iCol*3 + 1] = pExpr->aMI[iCol*3 + 1]; + aiOut[iCol*3 + 2] = pExpr->aMI[iCol*3 + 2]; + } + } + } + + return rc; +} + +/* +** The expression pExpr passed as the second argument to this function +** must be of type FTSQUERY_PHRASE. +** +** The returned value is either NULL or a pointer to a buffer containing +** a position-list indicating the occurrences of the phrase in column iCol +** of the current row. +** +** More specifically, the returned buffer contains 1 varint for each +** occurrence of the phrase in the column, stored using the normal (delta+2) +** compression and is terminated by either an 0x01 or 0x00 byte. For example, +** if the requested column contains "a b X c d X X" and the position-list +** for 'X' is requested, the buffer returned may contain: +** +** 0x04 0x05 0x03 0x01 or 0x04 0x05 0x03 0x00 +** +** This function works regardless of whether or not the phrase is deferred, +** incremental, or neither. +*/ +SQLITE_PRIVATE int sqlite3Fts3EvalPhrasePoslist( + Fts3Cursor *pCsr, /* FTS3 cursor object */ + Fts3Expr *pExpr, /* Phrase to return doclist for */ + int iCol, /* Column to return position list for */ + char **ppOut /* OUT: Pointer to position list */ +){ + Fts3Phrase *pPhrase = pExpr->pPhrase; + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + char *pIter; + int iThis; + sqlite3_int64 iDocid; + + /* If this phrase is applies specifically to some column other than + ** column iCol, return a NULL pointer. */ + *ppOut = 0; + assert( iCol>=0 && iColnColumn ); + if( (pPhrase->iColumnnColumn && pPhrase->iColumn!=iCol) ){ + return SQLITE_OK; + } + + iDocid = pExpr->iDocid; + pIter = pPhrase->doclist.pList; + if( iDocid!=pCsr->iPrevId || pExpr->bEof ){ + int rc = SQLITE_OK; + int bDescDoclist = pTab->bDescIdx; /* For DOCID_CMP macro */ + int bOr = 0; + u8 bTreeEof = 0; + Fts3Expr *p; /* Used to iterate from pExpr to root */ + Fts3Expr *pNear; /* Most senior NEAR ancestor (or pExpr) */ + Fts3Expr *pRun; /* Closest non-deferred ancestor of pNear */ + int bMatch; + + /* Check if this phrase descends from an OR expression node. If not, + ** return NULL. Otherwise, the entry that corresponds to docid + ** pCsr->iPrevId may lie earlier in the doclist buffer. Or, if the + ** tree that the node is part of has been marked as EOF, but the node + ** itself is not EOF, then it may point to an earlier entry. */ + pNear = pExpr; + for(p=pExpr->pParent; p; p=p->pParent){ + if( p->eType==FTSQUERY_OR ) bOr = 1; + if( p->eType==FTSQUERY_NEAR ) pNear = p; + if( p->bEof ) bTreeEof = 1; + } + if( bOr==0 ) return SQLITE_OK; + pRun = pNear; + while( pRun->bDeferred ){ + assert( pRun->pParent ); + pRun = pRun->pParent; + } + + /* This is the descendent of an OR node. In this case we cannot use + ** an incremental phrase. Load the entire doclist for the phrase + ** into memory in this case. */ + if( pPhrase->bIncr ){ + int bEofSave = pRun->bEof; + fts3EvalRestart(pCsr, pRun, &rc); + while( rc==SQLITE_OK && !pRun->bEof ){ + fts3EvalNextRow(pCsr, pRun, &rc); + if( bEofSave==0 && pRun->iDocid==iDocid ) break; + } + assert( rc!=SQLITE_OK || pPhrase->bIncr==0 ); + if( rc==SQLITE_OK && pRun->bEof!=bEofSave ){ + rc = FTS_CORRUPT_VTAB; + } + } + if( bTreeEof ){ + while( rc==SQLITE_OK && !pRun->bEof ){ + fts3EvalNextRow(pCsr, pRun, &rc); + } + } + if( rc!=SQLITE_OK ) return rc; + + bMatch = 1; + for(p=pNear; p; p=p->pLeft){ + u8 bEof = 0; + Fts3Expr *pTest = p; + Fts3Phrase *pPh; + assert( pTest->eType==FTSQUERY_NEAR || pTest->eType==FTSQUERY_PHRASE ); + if( pTest->eType==FTSQUERY_NEAR ) pTest = pTest->pRight; + assert( pTest->eType==FTSQUERY_PHRASE ); + pPh = pTest->pPhrase; + + pIter = pPh->pOrPoslist; + iDocid = pPh->iOrDocid; + if( pCsr->bDesc==bDescDoclist ){ + bEof = !pPh->doclist.nAll || + (pIter >= (pPh->doclist.aAll + pPh->doclist.nAll)); + while( (pIter==0 || DOCID_CMP(iDocid, pCsr->iPrevId)<0 ) && bEof==0 ){ + sqlite3Fts3DoclistNext( + bDescDoclist, pPh->doclist.aAll, pPh->doclist.nAll, + &pIter, &iDocid, &bEof + ); + } + }else{ + bEof = !pPh->doclist.nAll || (pIter && pIter<=pPh->doclist.aAll); + while( (pIter==0 || DOCID_CMP(iDocid, pCsr->iPrevId)>0 ) && bEof==0 ){ + int dummy; + sqlite3Fts3DoclistPrev( + bDescDoclist, pPh->doclist.aAll, pPh->doclist.nAll, + &pIter, &iDocid, &dummy, &bEof + ); + } + } + pPh->pOrPoslist = pIter; + pPh->iOrDocid = iDocid; + if( bEof || iDocid!=pCsr->iPrevId ) bMatch = 0; + } + + if( bMatch ){ + pIter = pPhrase->pOrPoslist; + }else{ + pIter = 0; + } + } + if( pIter==0 ) return SQLITE_OK; + + if( *pIter==0x01 ){ + pIter++; + pIter += fts3GetVarint32(pIter, &iThis); + }else{ + iThis = 0; + } + while( iThisdoclist, and +** * any Fts3MultiSegReader objects held by phrase tokens. +*/ +SQLITE_PRIVATE void sqlite3Fts3EvalPhraseCleanup(Fts3Phrase *pPhrase){ + if( pPhrase ){ + int i; + sqlite3_free(pPhrase->doclist.aAll); + fts3EvalInvalidatePoslist(pPhrase); + memset(&pPhrase->doclist, 0, sizeof(Fts3Doclist)); + for(i=0; inToken; i++){ + fts3SegReaderCursorFree(pPhrase->aToken[i].pSegcsr); + pPhrase->aToken[i].pSegcsr = 0; + } + } +} + + +/* +** Return SQLITE_CORRUPT_VTAB. +*/ +#ifdef SQLITE_DEBUG +SQLITE_PRIVATE int sqlite3Fts3Corrupt(){ + return SQLITE_CORRUPT_VTAB; +} +#endif + +#if !defined(SQLITE_CORE) +/* +** Initialize API pointer table, if required. +*/ +#ifdef _WIN32 +__declspec(dllexport) +#endif +SQLITE_API int sqlite3_fts3_init( + sqlite3 *db, + char **pzErrMsg, + const sqlite3_api_routines *pApi +){ + SQLITE_EXTENSION_INIT2(pApi) + return sqlite3Fts3Init(db); +} +#endif + +#endif + +/************** End of fts3.c ************************************************/ +/************** Begin file fts3_aux.c ****************************************/ +/* +** 2011 Jan 27 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +*/ +/* #include "fts3Int.h" */ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +/* #include */ +/* #include */ + +typedef struct Fts3auxTable Fts3auxTable; +typedef struct Fts3auxCursor Fts3auxCursor; + +struct Fts3auxTable { + sqlite3_vtab base; /* Base class used by SQLite core */ + Fts3Table *pFts3Tab; +}; + +struct Fts3auxCursor { + sqlite3_vtab_cursor base; /* Base class used by SQLite core */ + Fts3MultiSegReader csr; /* Must be right after "base" */ + Fts3SegFilter filter; + char *zStop; + int nStop; /* Byte-length of string zStop */ + int iLangid; /* Language id to query */ + int isEof; /* True if cursor is at EOF */ + sqlite3_int64 iRowid; /* Current rowid */ + + int iCol; /* Current value of 'col' column */ + int nStat; /* Size of aStat[] array */ + struct Fts3auxColstats { + sqlite3_int64 nDoc; /* 'documents' values for current csr row */ + sqlite3_int64 nOcc; /* 'occurrences' values for current csr row */ + } *aStat; +}; + +/* +** Schema of the terms table. +*/ +#define FTS3_AUX_SCHEMA \ + "CREATE TABLE x(term, col, documents, occurrences, languageid HIDDEN)" + +/* +** This function does all the work for both the xConnect and xCreate methods. +** These tables have no persistent representation of their own, so xConnect +** and xCreate are identical operations. +*/ +static int fts3auxConnectMethod( + sqlite3 *db, /* Database connection */ + void *pUnused, /* Unused */ + int argc, /* Number of elements in argv array */ + const char * const *argv, /* xCreate/xConnect argument array */ + sqlite3_vtab **ppVtab, /* OUT: New sqlite3_vtab object */ + char **pzErr /* OUT: sqlite3_malloc'd error message */ +){ + char const *zDb; /* Name of database (e.g. "main") */ + char const *zFts3; /* Name of fts3 table */ + int nDb; /* Result of strlen(zDb) */ + int nFts3; /* Result of strlen(zFts3) */ + sqlite3_int64 nByte; /* Bytes of space to allocate here */ + int rc; /* value returned by declare_vtab() */ + Fts3auxTable *p; /* Virtual table object to return */ + + UNUSED_PARAMETER(pUnused); + + /* The user should invoke this in one of two forms: + ** + ** CREATE VIRTUAL TABLE xxx USING fts4aux(fts4-table); + ** CREATE VIRTUAL TABLE xxx USING fts4aux(fts4-table-db, fts4-table); + */ + if( argc!=4 && argc!=5 ) goto bad_args; + + zDb = argv[1]; + nDb = (int)strlen(zDb); + if( argc==5 ){ + if( nDb==4 && 0==sqlite3_strnicmp("temp", zDb, 4) ){ + zDb = argv[3]; + nDb = (int)strlen(zDb); + zFts3 = argv[4]; + }else{ + goto bad_args; + } + }else{ + zFts3 = argv[3]; + } + nFts3 = (int)strlen(zFts3); + + rc = sqlite3_declare_vtab(db, FTS3_AUX_SCHEMA); + if( rc!=SQLITE_OK ) return rc; + + nByte = sizeof(Fts3auxTable) + sizeof(Fts3Table) + nDb + nFts3 + 2; + p = (Fts3auxTable *)sqlite3_malloc64(nByte); + if( !p ) return SQLITE_NOMEM; + memset(p, 0, nByte); + + p->pFts3Tab = (Fts3Table *)&p[1]; + p->pFts3Tab->zDb = (char *)&p->pFts3Tab[1]; + p->pFts3Tab->zName = &p->pFts3Tab->zDb[nDb+1]; + p->pFts3Tab->db = db; + p->pFts3Tab->nIndex = 1; + + memcpy((char *)p->pFts3Tab->zDb, zDb, nDb); + memcpy((char *)p->pFts3Tab->zName, zFts3, nFts3); + sqlite3Fts3Dequote((char *)p->pFts3Tab->zName); + + *ppVtab = (sqlite3_vtab *)p; + return SQLITE_OK; + + bad_args: + sqlite3Fts3ErrMsg(pzErr, "invalid arguments to fts4aux constructor"); + return SQLITE_ERROR; +} + +/* +** This function does the work for both the xDisconnect and xDestroy methods. +** These tables have no persistent representation of their own, so xDisconnect +** and xDestroy are identical operations. +*/ +static int fts3auxDisconnectMethod(sqlite3_vtab *pVtab){ + Fts3auxTable *p = (Fts3auxTable *)pVtab; + Fts3Table *pFts3 = p->pFts3Tab; + int i; + + /* Free any prepared statements held */ + for(i=0; iaStmt); i++){ + sqlite3_finalize(pFts3->aStmt[i]); + } + sqlite3_free(pFts3->zSegmentsTbl); + sqlite3_free(p); + return SQLITE_OK; +} + +#define FTS4AUX_EQ_CONSTRAINT 1 +#define FTS4AUX_GE_CONSTRAINT 2 +#define FTS4AUX_LE_CONSTRAINT 4 + +/* +** xBestIndex - Analyze a WHERE and ORDER BY clause. +*/ +static int fts3auxBestIndexMethod( + sqlite3_vtab *pVTab, + sqlite3_index_info *pInfo +){ + int i; + int iEq = -1; + int iGe = -1; + int iLe = -1; + int iLangid = -1; + int iNext = 1; /* Next free argvIndex value */ + + UNUSED_PARAMETER(pVTab); + + /* This vtab delivers always results in "ORDER BY term ASC" order. */ + if( pInfo->nOrderBy==1 + && pInfo->aOrderBy[0].iColumn==0 + && pInfo->aOrderBy[0].desc==0 + ){ + pInfo->orderByConsumed = 1; + } + + /* Search for equality and range constraints on the "term" column. + ** And equality constraints on the hidden "languageid" column. */ + for(i=0; inConstraint; i++){ + if( pInfo->aConstraint[i].usable ){ + int op = pInfo->aConstraint[i].op; + int iCol = pInfo->aConstraint[i].iColumn; + + if( iCol==0 ){ + if( op==SQLITE_INDEX_CONSTRAINT_EQ ) iEq = i; + if( op==SQLITE_INDEX_CONSTRAINT_LT ) iLe = i; + if( op==SQLITE_INDEX_CONSTRAINT_LE ) iLe = i; + if( op==SQLITE_INDEX_CONSTRAINT_GT ) iGe = i; + if( op==SQLITE_INDEX_CONSTRAINT_GE ) iGe = i; + } + if( iCol==4 ){ + if( op==SQLITE_INDEX_CONSTRAINT_EQ ) iLangid = i; + } + } + } + + if( iEq>=0 ){ + pInfo->idxNum = FTS4AUX_EQ_CONSTRAINT; + pInfo->aConstraintUsage[iEq].argvIndex = iNext++; + pInfo->estimatedCost = 5; + }else{ + pInfo->idxNum = 0; + pInfo->estimatedCost = 20000; + if( iGe>=0 ){ + pInfo->idxNum += FTS4AUX_GE_CONSTRAINT; + pInfo->aConstraintUsage[iGe].argvIndex = iNext++; + pInfo->estimatedCost /= 2; + } + if( iLe>=0 ){ + pInfo->idxNum += FTS4AUX_LE_CONSTRAINT; + pInfo->aConstraintUsage[iLe].argvIndex = iNext++; + pInfo->estimatedCost /= 2; + } + } + if( iLangid>=0 ){ + pInfo->aConstraintUsage[iLangid].argvIndex = iNext++; + pInfo->estimatedCost--; + } + + return SQLITE_OK; +} + +/* +** xOpen - Open a cursor. +*/ +static int fts3auxOpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){ + Fts3auxCursor *pCsr; /* Pointer to cursor object to return */ + + UNUSED_PARAMETER(pVTab); + + pCsr = (Fts3auxCursor *)sqlite3_malloc(sizeof(Fts3auxCursor)); + if( !pCsr ) return SQLITE_NOMEM; + memset(pCsr, 0, sizeof(Fts3auxCursor)); + + *ppCsr = (sqlite3_vtab_cursor *)pCsr; + return SQLITE_OK; +} + +/* +** xClose - Close a cursor. +*/ +static int fts3auxCloseMethod(sqlite3_vtab_cursor *pCursor){ + Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab; + Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor; + + sqlite3Fts3SegmentsClose(pFts3); + sqlite3Fts3SegReaderFinish(&pCsr->csr); + sqlite3_free((void *)pCsr->filter.zTerm); + sqlite3_free(pCsr->zStop); + sqlite3_free(pCsr->aStat); + sqlite3_free(pCsr); + return SQLITE_OK; +} + +static int fts3auxGrowStatArray(Fts3auxCursor *pCsr, int nSize){ + if( nSize>pCsr->nStat ){ + struct Fts3auxColstats *aNew; + aNew = (struct Fts3auxColstats *)sqlite3_realloc64(pCsr->aStat, + sizeof(struct Fts3auxColstats) * nSize + ); + if( aNew==0 ) return SQLITE_NOMEM; + memset(&aNew[pCsr->nStat], 0, + sizeof(struct Fts3auxColstats) * (nSize - pCsr->nStat) + ); + pCsr->aStat = aNew; + pCsr->nStat = nSize; + } + return SQLITE_OK; +} + +/* +** xNext - Advance the cursor to the next row, if any. +*/ +static int fts3auxNextMethod(sqlite3_vtab_cursor *pCursor){ + Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor; + Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab; + int rc; + + /* Increment our pretend rowid value. */ + pCsr->iRowid++; + + for(pCsr->iCol++; pCsr->iColnStat; pCsr->iCol++){ + if( pCsr->aStat[pCsr->iCol].nDoc>0 ) return SQLITE_OK; + } + + rc = sqlite3Fts3SegReaderStep(pFts3, &pCsr->csr); + if( rc==SQLITE_ROW ){ + int i = 0; + int nDoclist = pCsr->csr.nDoclist; + char *aDoclist = pCsr->csr.aDoclist; + int iCol; + + int eState = 0; + + if( pCsr->zStop ){ + int n = (pCsr->nStopcsr.nTerm) ? pCsr->nStop : pCsr->csr.nTerm; + int mc = memcmp(pCsr->zStop, pCsr->csr.zTerm, n); + if( mc<0 || (mc==0 && pCsr->csr.nTerm>pCsr->nStop) ){ + pCsr->isEof = 1; + return SQLITE_OK; + } + } + + if( fts3auxGrowStatArray(pCsr, 2) ) return SQLITE_NOMEM; + memset(pCsr->aStat, 0, sizeof(struct Fts3auxColstats) * pCsr->nStat); + iCol = 0; + rc = SQLITE_OK; + + while( iaStat[0].nDoc++; + eState = 1; + iCol = 0; + break; + + /* State 1. In this state we are expecting either a 1, indicating + ** that the following integer will be a column number, or the + ** start of a position list for column 0. + ** + ** The only difference between state 1 and state 2 is that if the + ** integer encountered in state 1 is not 0 or 1, then we need to + ** increment the column 0 "nDoc" count for this term. + */ + case 1: + assert( iCol==0 ); + if( v>1 ){ + pCsr->aStat[1].nDoc++; + } + eState = 2; + /* fall through */ + + case 2: + if( v==0 ){ /* 0x00. Next integer will be a docid. */ + eState = 0; + }else if( v==1 ){ /* 0x01. Next integer will be a column number. */ + eState = 3; + }else{ /* 2 or greater. A position. */ + pCsr->aStat[iCol+1].nOcc++; + pCsr->aStat[0].nOcc++; + } + break; + + /* State 3. The integer just read is a column number. */ + default: assert( eState==3 ); + iCol = (int)v; + if( iCol<1 ){ + rc = SQLITE_CORRUPT_VTAB; + break; + } + if( fts3auxGrowStatArray(pCsr, iCol+2) ) return SQLITE_NOMEM; + pCsr->aStat[iCol+1].nDoc++; + eState = 2; + break; + } + } + + pCsr->iCol = 0; + }else{ + pCsr->isEof = 1; + } + return rc; +} + +/* +** xFilter - Initialize a cursor to point at the start of its data. +*/ +static int fts3auxFilterMethod( + sqlite3_vtab_cursor *pCursor, /* The cursor used for this query */ + int idxNum, /* Strategy index */ + const char *idxStr, /* Unused */ + int nVal, /* Number of elements in apVal */ + sqlite3_value **apVal /* Arguments for the indexing scheme */ +){ + Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor; + Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab; + int rc; + int isScan = 0; + int iLangVal = 0; /* Language id to query */ + + int iEq = -1; /* Index of term=? value in apVal */ + int iGe = -1; /* Index of term>=? value in apVal */ + int iLe = -1; /* Index of term<=? value in apVal */ + int iLangid = -1; /* Index of languageid=? value in apVal */ + int iNext = 0; + + UNUSED_PARAMETER(nVal); + UNUSED_PARAMETER(idxStr); + + assert( idxStr==0 ); + assert( idxNum==FTS4AUX_EQ_CONSTRAINT || idxNum==0 + || idxNum==FTS4AUX_LE_CONSTRAINT || idxNum==FTS4AUX_GE_CONSTRAINT + || idxNum==(FTS4AUX_LE_CONSTRAINT|FTS4AUX_GE_CONSTRAINT) + ); + + if( idxNum==FTS4AUX_EQ_CONSTRAINT ){ + iEq = iNext++; + }else{ + isScan = 1; + if( idxNum & FTS4AUX_GE_CONSTRAINT ){ + iGe = iNext++; + } + if( idxNum & FTS4AUX_LE_CONSTRAINT ){ + iLe = iNext++; + } + } + if( iNextfilter.zTerm); + sqlite3Fts3SegReaderFinish(&pCsr->csr); + sqlite3_free((void *)pCsr->filter.zTerm); + sqlite3_free(pCsr->aStat); + sqlite3_free(pCsr->zStop); + memset(&pCsr->csr, 0, ((u8*)&pCsr[1]) - (u8*)&pCsr->csr); + + pCsr->filter.flags = FTS3_SEGMENT_REQUIRE_POS|FTS3_SEGMENT_IGNORE_EMPTY; + if( isScan ) pCsr->filter.flags |= FTS3_SEGMENT_SCAN; + + if( iEq>=0 || iGe>=0 ){ + const unsigned char *zStr = sqlite3_value_text(apVal[0]); + assert( (iEq==0 && iGe==-1) || (iEq==-1 && iGe==0) ); + if( zStr ){ + pCsr->filter.zTerm = sqlite3_mprintf("%s", zStr); + if( pCsr->filter.zTerm==0 ) return SQLITE_NOMEM; + pCsr->filter.nTerm = (int)strlen(pCsr->filter.zTerm); + } + } + + if( iLe>=0 ){ + pCsr->zStop = sqlite3_mprintf("%s", sqlite3_value_text(apVal[iLe])); + if( pCsr->zStop==0 ) return SQLITE_NOMEM; + pCsr->nStop = (int)strlen(pCsr->zStop); + } + + if( iLangid>=0 ){ + iLangVal = sqlite3_value_int(apVal[iLangid]); + + /* If the user specified a negative value for the languageid, use zero + ** instead. This works, as the "languageid=?" constraint will also + ** be tested by the VDBE layer. The test will always be false (since + ** this module will not return a row with a negative languageid), and + ** so the overall query will return zero rows. */ + if( iLangVal<0 ) iLangVal = 0; + } + pCsr->iLangid = iLangVal; + + rc = sqlite3Fts3SegReaderCursor(pFts3, iLangVal, 0, FTS3_SEGCURSOR_ALL, + pCsr->filter.zTerm, pCsr->filter.nTerm, 0, isScan, &pCsr->csr + ); + if( rc==SQLITE_OK ){ + rc = sqlite3Fts3SegReaderStart(pFts3, &pCsr->csr, &pCsr->filter); + } + + if( rc==SQLITE_OK ) rc = fts3auxNextMethod(pCursor); + return rc; +} + +/* +** xEof - Return true if the cursor is at EOF, or false otherwise. +*/ +static int fts3auxEofMethod(sqlite3_vtab_cursor *pCursor){ + Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor; + return pCsr->isEof; +} + +/* +** xColumn - Return a column value. +*/ +static int fts3auxColumnMethod( + sqlite3_vtab_cursor *pCursor, /* Cursor to retrieve value from */ + sqlite3_context *pCtx, /* Context for sqlite3_result_xxx() calls */ + int iCol /* Index of column to read value from */ +){ + Fts3auxCursor *p = (Fts3auxCursor *)pCursor; + + assert( p->isEof==0 ); + switch( iCol ){ + case 0: /* term */ + sqlite3_result_text(pCtx, p->csr.zTerm, p->csr.nTerm, SQLITE_TRANSIENT); + break; + + case 1: /* col */ + if( p->iCol ){ + sqlite3_result_int(pCtx, p->iCol-1); + }else{ + sqlite3_result_text(pCtx, "*", -1, SQLITE_STATIC); + } + break; + + case 2: /* documents */ + sqlite3_result_int64(pCtx, p->aStat[p->iCol].nDoc); + break; + + case 3: /* occurrences */ + sqlite3_result_int64(pCtx, p->aStat[p->iCol].nOcc); + break; + + default: /* languageid */ + assert( iCol==4 ); + sqlite3_result_int(pCtx, p->iLangid); + break; + } + + return SQLITE_OK; +} + +/* +** xRowid - Return the current rowid for the cursor. +*/ +static int fts3auxRowidMethod( + sqlite3_vtab_cursor *pCursor, /* Cursor to retrieve value from */ + sqlite_int64 *pRowid /* OUT: Rowid value */ +){ + Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor; + *pRowid = pCsr->iRowid; + return SQLITE_OK; +} + +/* +** Register the fts3aux module with database connection db. Return SQLITE_OK +** if successful or an error code if sqlite3_create_module() fails. +*/ +SQLITE_PRIVATE int sqlite3Fts3InitAux(sqlite3 *db){ + static const sqlite3_module fts3aux_module = { + 0, /* iVersion */ + fts3auxConnectMethod, /* xCreate */ + fts3auxConnectMethod, /* xConnect */ + fts3auxBestIndexMethod, /* xBestIndex */ + fts3auxDisconnectMethod, /* xDisconnect */ + fts3auxDisconnectMethod, /* xDestroy */ + fts3auxOpenMethod, /* xOpen */ + fts3auxCloseMethod, /* xClose */ + fts3auxFilterMethod, /* xFilter */ + fts3auxNextMethod, /* xNext */ + fts3auxEofMethod, /* xEof */ + fts3auxColumnMethod, /* xColumn */ + fts3auxRowidMethod, /* xRowid */ + 0, /* xUpdate */ + 0, /* xBegin */ + 0, /* xSync */ + 0, /* xCommit */ + 0, /* xRollback */ + 0, /* xFindFunction */ + 0, /* xRename */ + 0, /* xSavepoint */ + 0, /* xRelease */ + 0, /* xRollbackTo */ + 0, /* xShadowName */ + 0 /* xIntegrity */ + }; + int rc; /* Return code */ + + rc = sqlite3_create_module(db, "fts4aux", &fts3aux_module, 0); + return rc; +} + +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ + +/************** End of fts3_aux.c ********************************************/ +/************** Begin file fts3_expr.c ***************************************/ +/* +** 2008 Nov 28 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This module contains code that implements a parser for fts3 query strings +** (the right-hand argument to the MATCH operator). Because the supported +** syntax is relatively simple, the whole tokenizer/parser system is +** hand-coded. +*/ +/* #include "fts3Int.h" */ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +/* +** By default, this module parses the legacy syntax that has been +** traditionally used by fts3. Or, if SQLITE_ENABLE_FTS3_PARENTHESIS +** is defined, then it uses the new syntax. The differences between +** the new and the old syntaxes are: +** +** a) The new syntax supports parenthesis. The old does not. +** +** b) The new syntax supports the AND and NOT operators. The old does not. +** +** c) The old syntax supports the "-" token qualifier. This is not +** supported by the new syntax (it is replaced by the NOT operator). +** +** d) When using the old syntax, the OR operator has a greater precedence +** than an implicit AND. When using the new, both implicity and explicit +** AND operators have a higher precedence than OR. +** +** If compiled with SQLITE_TEST defined, then this module exports the +** symbol "int sqlite3_fts3_enable_parentheses". Setting this variable +** to zero causes the module to use the old syntax. If it is set to +** non-zero the new syntax is activated. This is so both syntaxes can +** be tested using a single build of testfixture. +** +** The following describes the syntax supported by the fts3 MATCH +** operator in a similar format to that used by the lemon parser +** generator. This module does not use actually lemon, it uses a +** custom parser. +** +** query ::= andexpr (OR andexpr)*. +** +** andexpr ::= notexpr (AND? notexpr)*. +** +** notexpr ::= nearexpr (NOT nearexpr|-TOKEN)*. +** notexpr ::= LP query RP. +** +** nearexpr ::= phrase (NEAR distance_opt nearexpr)*. +** +** distance_opt ::= . +** distance_opt ::= / INTEGER. +** +** phrase ::= TOKEN. +** phrase ::= COLUMN:TOKEN. +** phrase ::= "TOKEN TOKEN TOKEN...". +*/ + +#ifdef SQLITE_TEST +SQLITE_API int sqlite3_fts3_enable_parentheses = 0; +#else +# ifdef SQLITE_ENABLE_FTS3_PARENTHESIS +# define sqlite3_fts3_enable_parentheses 1 +# else +# define sqlite3_fts3_enable_parentheses 0 +# endif +#endif + +/* +** Default span for NEAR operators. +*/ +#define SQLITE_FTS3_DEFAULT_NEAR_PARAM 10 + +/* #include */ +/* #include */ + +/* +** isNot: +** This variable is used by function getNextNode(). When getNextNode() is +** called, it sets ParseContext.isNot to true if the 'next node' is a +** FTSQUERY_PHRASE with a unary "-" attached to it. i.e. "mysql" in the +** FTS3 query "sqlite -mysql". Otherwise, ParseContext.isNot is set to +** zero. +*/ +typedef struct ParseContext ParseContext; +struct ParseContext { + sqlite3_tokenizer *pTokenizer; /* Tokenizer module */ + int iLangid; /* Language id used with tokenizer */ + const char **azCol; /* Array of column names for fts3 table */ + int bFts4; /* True to allow FTS4-only syntax */ + int nCol; /* Number of entries in azCol[] */ + int iDefaultCol; /* Default column to query */ + int isNot; /* True if getNextNode() sees a unary - */ + sqlite3_context *pCtx; /* Write error message here */ + int nNest; /* Number of nested brackets */ +}; + +/* +** This function is equivalent to the standard isspace() function. +** +** The standard isspace() can be awkward to use safely, because although it +** is defined to accept an argument of type int, its behavior when passed +** an integer that falls outside of the range of the unsigned char type +** is undefined (and sometimes, "undefined" means segfault). This wrapper +** is defined to accept an argument of type char, and always returns 0 for +** any values that fall outside of the range of the unsigned char type (i.e. +** negative values). +*/ +static int fts3isspace(char c){ + return c==' ' || c=='\t' || c=='\n' || c=='\r' || c=='\v' || c=='\f'; +} + +/* +** Allocate nByte bytes of memory using sqlite3_malloc(). If successful, +** zero the memory before returning a pointer to it. If unsuccessful, +** return NULL. +*/ +SQLITE_PRIVATE void *sqlite3Fts3MallocZero(sqlite3_int64 nByte){ + void *pRet = sqlite3_malloc64(nByte); + if( pRet ) memset(pRet, 0, nByte); + return pRet; +} + +SQLITE_PRIVATE int sqlite3Fts3OpenTokenizer( + sqlite3_tokenizer *pTokenizer, + int iLangid, + const char *z, + int n, + sqlite3_tokenizer_cursor **ppCsr +){ + sqlite3_tokenizer_module const *pModule = pTokenizer->pModule; + sqlite3_tokenizer_cursor *pCsr = 0; + int rc; + + rc = pModule->xOpen(pTokenizer, z, n, &pCsr); + assert( rc==SQLITE_OK || pCsr==0 ); + if( rc==SQLITE_OK ){ + pCsr->pTokenizer = pTokenizer; + if( pModule->iVersion>=1 ){ + rc = pModule->xLanguageid(pCsr, iLangid); + if( rc!=SQLITE_OK ){ + pModule->xClose(pCsr); + pCsr = 0; + } + } + } + *ppCsr = pCsr; + return rc; +} + +/* +** Function getNextNode(), which is called by fts3ExprParse(), may itself +** call fts3ExprParse(). So this forward declaration is required. +*/ +static int fts3ExprParse(ParseContext *, const char *, int, Fts3Expr **, int *); + +/* +** Search buffer z[], size n, for a '"' character. Or, if enable_parenthesis +** is defined, search for '(' and ')' as well. Return the index of the first +** such character in the buffer. If there is no such character, return -1. +*/ +static int findBarredChar(const char *z, int n){ + int ii; + for(ii=0; iipTokenizer; + sqlite3_tokenizer_module const *pModule = pTokenizer->pModule; + int rc; + sqlite3_tokenizer_cursor *pCursor; + Fts3Expr *pRet = 0; + + *pnConsumed = n; + rc = sqlite3Fts3OpenTokenizer(pTokenizer, pParse->iLangid, z, n, &pCursor); + if( rc==SQLITE_OK ){ + const char *zToken; + int nToken = 0, iStart = 0, iEnd = 0, iPosition = 0; + sqlite3_int64 nByte; /* total space to allocate */ + + rc = pModule->xNext(pCursor, &zToken, &nToken, &iStart, &iEnd, &iPosition); + if( rc==SQLITE_OK ){ + /* Check that this tokenization did not gobble up any " characters. Or, + ** if enable_parenthesis is true, that it did not gobble up any + ** open or close parenthesis characters either. If it did, call + ** getNextToken() again, but pass only that part of the input buffer + ** up to the first such character. */ + int iBarred = findBarredChar(z, iEnd); + if( iBarred>=0 ){ + pModule->xClose(pCursor); + return getNextToken(pParse, iCol, z, iBarred, ppExpr, pnConsumed); + } + + nByte = sizeof(Fts3Expr) + SZ_FTS3PHRASE(1) + nToken; + pRet = (Fts3Expr *)sqlite3Fts3MallocZero(nByte); + if( !pRet ){ + rc = SQLITE_NOMEM; + }else{ + pRet->eType = FTSQUERY_PHRASE; + pRet->pPhrase = (Fts3Phrase *)&pRet[1]; + pRet->pPhrase->nToken = 1; + pRet->pPhrase->iColumn = iCol; + pRet->pPhrase->aToken[0].n = nToken; + pRet->pPhrase->aToken[0].z = (char*)&pRet->pPhrase->aToken[1]; + memcpy(pRet->pPhrase->aToken[0].z, zToken, nToken); + + if( iEndpPhrase->aToken[0].isPrefix = 1; + iEnd++; + } + + while( 1 ){ + if( !sqlite3_fts3_enable_parentheses + && iStart>0 && z[iStart-1]=='-' + ){ + pParse->isNot = 1; + iStart--; + }else if( pParse->bFts4 && iStart>0 && z[iStart-1]=='^' ){ + pRet->pPhrase->aToken[0].bFirst = 1; + iStart--; + }else{ + break; + } + } + + } + *pnConsumed = iEnd; + }else if( n && rc==SQLITE_DONE ){ + int iBarred = findBarredChar(z, n); + if( iBarred>=0 ){ + *pnConsumed = iBarred; + } + rc = SQLITE_OK; + } + + pModule->xClose(pCursor); + } + + *ppExpr = pRet; + return rc; +} + + +/* +** Enlarge a memory allocation. If an out-of-memory allocation occurs, +** then free the old allocation. +*/ +static void *fts3ReallocOrFree(void *pOrig, sqlite3_int64 nNew){ + void *pRet = sqlite3_realloc64(pOrig, nNew); + if( !pRet ){ + sqlite3_free(pOrig); + } + return pRet; +} + +/* +** Buffer zInput, length nInput, contains the contents of a quoted string +** that appeared as part of an fts3 query expression. Neither quote character +** is included in the buffer. This function attempts to tokenize the entire +** input buffer and create an Fts3Expr structure of type FTSQUERY_PHRASE +** containing the results. +** +** If successful, SQLITE_OK is returned and *ppExpr set to point at the +** allocated Fts3Expr structure. Otherwise, either SQLITE_NOMEM (out of memory +** error) or SQLITE_ERROR (tokenization error) is returned and *ppExpr set +** to 0. +*/ +static int getNextString( + ParseContext *pParse, /* fts3 query parse context */ + const char *zInput, int nInput, /* Input string */ + Fts3Expr **ppExpr /* OUT: expression */ +){ + sqlite3_tokenizer *pTokenizer = pParse->pTokenizer; + sqlite3_tokenizer_module const *pModule = pTokenizer->pModule; + int rc; + Fts3Expr *p = 0; + sqlite3_tokenizer_cursor *pCursor = 0; + char *zTemp = 0; + i64 nTemp = 0; + + const int nSpace = sizeof(Fts3Expr) + SZ_FTS3PHRASE(1); + int nToken = 0; + + /* The final Fts3Expr data structure, including the Fts3Phrase, + ** Fts3PhraseToken structures token buffers are all stored as a single + ** allocation so that the expression can be freed with a single call to + ** sqlite3_free(). Setting this up requires a two pass approach. + ** + ** The first pass, in the block below, uses a tokenizer cursor to iterate + ** through the tokens in the expression. This pass uses fts3ReallocOrFree() + ** to assemble data in two dynamic buffers: + ** + ** Buffer p: Points to the Fts3Expr structure, followed by the Fts3Phrase + ** structure, followed by the array of Fts3PhraseToken + ** structures. This pass only populates the Fts3PhraseToken array. + ** + ** Buffer zTemp: Contains copies of all tokens. + ** + ** The second pass, in the block that begins "if( rc==SQLITE_DONE )" below, + ** appends buffer zTemp to buffer p, and fills in the Fts3Expr and Fts3Phrase + ** structures. + */ + rc = sqlite3Fts3OpenTokenizer( + pTokenizer, pParse->iLangid, zInput, nInput, &pCursor); + if( rc==SQLITE_OK ){ + int ii; + for(ii=0; rc==SQLITE_OK; ii++){ + const char *zByte; + int nByte = 0, iBegin = 0, iEnd = 0, iPos = 0; + rc = pModule->xNext(pCursor, &zByte, &nByte, &iBegin, &iEnd, &iPos); + if( rc==SQLITE_OK ){ + Fts3PhraseToken *pToken; + + p = fts3ReallocOrFree(p, nSpace + ii*sizeof(Fts3PhraseToken)); + zTemp = fts3ReallocOrFree(zTemp, nTemp + nByte); + if( !zTemp || !p ){ + rc = SQLITE_NOMEM; + goto getnextstring_out; + } + + assert( nToken==ii ); + pToken = &((Fts3Phrase *)(&p[1]))->aToken[ii]; + memset(pToken, 0, sizeof(Fts3PhraseToken)); + + memcpy(&zTemp[nTemp], zByte, nByte); + nTemp += nByte; + + pToken->n = nByte; + pToken->isPrefix = (iEndbFirst = (iBegin>0 && zInput[iBegin-1]=='^'); + nToken = ii+1; + } + } + } + + if( rc==SQLITE_DONE ){ + int jj; + char *zBuf = 0; + + p = fts3ReallocOrFree(p, nSpace + nToken*sizeof(Fts3PhraseToken) + nTemp); + if( !p ){ + rc = SQLITE_NOMEM; + goto getnextstring_out; + } + memset(p, 0, (char *)&(((Fts3Phrase *)&p[1])->aToken[0])-(char *)p); + p->eType = FTSQUERY_PHRASE; + p->pPhrase = (Fts3Phrase *)&p[1]; + p->pPhrase->iColumn = pParse->iDefaultCol; + p->pPhrase->nToken = nToken; + + zBuf = (char *)&p->pPhrase->aToken[nToken]; + assert( nTemp==0 || zTemp ); + if( zTemp ){ + memcpy(zBuf, zTemp, nTemp); + } + + for(jj=0; jjpPhrase->nToken; jj++){ + p->pPhrase->aToken[jj].z = zBuf; + zBuf += p->pPhrase->aToken[jj].n; + } + rc = SQLITE_OK; + } + + getnextstring_out: + if( pCursor ){ + pModule->xClose(pCursor); + } + sqlite3_free(zTemp); + if( rc!=SQLITE_OK ){ + sqlite3_free(p); + p = 0; + } + *ppExpr = p; + return rc; +} + +/* +** The output variable *ppExpr is populated with an allocated Fts3Expr +** structure, or set to 0 if the end of the input buffer is reached. +** +** Returns an SQLite error code. SQLITE_OK if everything works, SQLITE_NOMEM +** if a malloc failure occurs, or SQLITE_ERROR if a parse error is encountered. +** If SQLITE_ERROR is returned, pContext is populated with an error message. +*/ +static int getNextNode( + ParseContext *pParse, /* fts3 query parse context */ + const char *z, int n, /* Input string */ + Fts3Expr **ppExpr, /* OUT: expression */ + int *pnConsumed /* OUT: Number of bytes consumed */ +){ + static const struct Fts3Keyword { + char *z; /* Keyword text */ + unsigned char n; /* Length of the keyword */ + unsigned char parenOnly; /* Only valid in paren mode */ + unsigned char eType; /* Keyword code */ + } aKeyword[] = { + { "OR" , 2, 0, FTSQUERY_OR }, + { "AND", 3, 1, FTSQUERY_AND }, + { "NOT", 3, 1, FTSQUERY_NOT }, + { "NEAR", 4, 0, FTSQUERY_NEAR } + }; + int ii; + int iCol; + int iColLen; + int rc; + Fts3Expr *pRet = 0; + + const char *zInput = z; + int nInput = n; + + pParse->isNot = 0; + + /* Skip over any whitespace before checking for a keyword, an open or + ** close bracket, or a quoted string. + */ + while( nInput>0 && fts3isspace(*zInput) ){ + nInput--; + zInput++; + } + if( nInput==0 ){ + return SQLITE_DONE; + } + + /* See if we are dealing with a keyword. */ + for(ii=0; ii<(int)(sizeof(aKeyword)/sizeof(struct Fts3Keyword)); ii++){ + const struct Fts3Keyword *pKey = &aKeyword[ii]; + + if( (pKey->parenOnly & ~sqlite3_fts3_enable_parentheses)!=0 ){ + continue; + } + + if( nInput>=pKey->n && 0==memcmp(zInput, pKey->z, pKey->n) ){ + int nNear = SQLITE_FTS3_DEFAULT_NEAR_PARAM; + int nKey = pKey->n; + char cNext; + + /* If this is a "NEAR" keyword, check for an explicit nearness. */ + if( pKey->eType==FTSQUERY_NEAR ){ + assert( nKey==4 ); + if( zInput[4]=='/' && zInput[5]>='0' && zInput[5]<='9' ){ + nKey += 1+sqlite3Fts3ReadInt(&zInput[nKey+1], &nNear); + } + } + + /* At this point this is probably a keyword. But for that to be true, + ** the next byte must contain either whitespace, an open or close + ** parenthesis, a quote character, or EOF. + */ + cNext = zInput[nKey]; + if( fts3isspace(cNext) + || cNext=='"' || cNext=='(' || cNext==')' || cNext==0 + ){ + pRet = (Fts3Expr *)sqlite3Fts3MallocZero(sizeof(Fts3Expr)); + if( !pRet ){ + return SQLITE_NOMEM; + } + pRet->eType = pKey->eType; + pRet->nNear = nNear; + *ppExpr = pRet; + *pnConsumed = (int)((zInput - z) + nKey); + return SQLITE_OK; + } + + /* Turns out that wasn't a keyword after all. This happens if the + ** user has supplied a token such as "ORacle". Continue. + */ + } + } + + /* See if we are dealing with a quoted phrase. If this is the case, then + ** search for the closing quote and pass the whole string to getNextString() + ** for processing. This is easy to do, as fts3 has no syntax for escaping + ** a quote character embedded in a string. + */ + if( *zInput=='"' ){ + for(ii=1; iinNest++; +#if !defined(SQLITE_MAX_EXPR_DEPTH) + if( pParse->nNest>1000 ) return SQLITE_ERROR; +#elif SQLITE_MAX_EXPR_DEPTH>0 + if( pParse->nNest>SQLITE_MAX_EXPR_DEPTH ) return SQLITE_ERROR; +#endif + rc = fts3ExprParse(pParse, zInput+1, nInput-1, ppExpr, &nConsumed); + *pnConsumed = (int)(zInput - z) + 1 + nConsumed; + return rc; + }else if( *zInput==')' ){ + pParse->nNest--; + *pnConsumed = (int)((zInput - z) + 1); + *ppExpr = 0; + return SQLITE_DONE; + } + } + + /* If control flows to this point, this must be a regular token, or + ** the end of the input. Read a regular token using the sqlite3_tokenizer + ** interface. Before doing so, figure out if there is an explicit + ** column specifier for the token. + ** + ** TODO: Strangely, it is not possible to associate a column specifier + ** with a quoted phrase, only with a single token. Not sure if this was + ** an implementation artifact or an intentional decision when fts3 was + ** first implemented. Whichever it was, this module duplicates the + ** limitation. + */ + iCol = pParse->iDefaultCol; + iColLen = 0; + for(ii=0; iinCol; ii++){ + const char *zStr = pParse->azCol[ii]; + int nStr = (int)strlen(zStr); + if( nInput>nStr && zInput[nStr]==':' + && sqlite3_strnicmp(zStr, zInput, nStr)==0 + ){ + iCol = ii; + iColLen = (int)((zInput - z) + nStr + 1); + break; + } + } + rc = getNextToken(pParse, iCol, &z[iColLen], n-iColLen, ppExpr, pnConsumed); + *pnConsumed += iColLen; + return rc; +} + +/* +** The argument is an Fts3Expr structure for a binary operator (any type +** except an FTSQUERY_PHRASE). Return an integer value representing the +** precedence of the operator. Lower values have a higher precedence (i.e. +** group more tightly). For example, in the C language, the == operator +** groups more tightly than ||, and would therefore have a higher precedence. +** +** When using the new fts3 query syntax (when SQLITE_ENABLE_FTS3_PARENTHESIS +** is defined), the order of the operators in precedence from highest to +** lowest is: +** +** NEAR +** NOT +** AND (including implicit ANDs) +** OR +** +** Note that when using the old query syntax, the OR operator has a higher +** precedence than the AND operator. +*/ +static int opPrecedence(Fts3Expr *p){ + assert( p->eType!=FTSQUERY_PHRASE ); + if( sqlite3_fts3_enable_parentheses ){ + return p->eType; + }else if( p->eType==FTSQUERY_NEAR ){ + return 1; + }else if( p->eType==FTSQUERY_OR ){ + return 2; + } + assert( p->eType==FTSQUERY_AND ); + return 3; +} + +/* +** Argument ppHead contains a pointer to the current head of a query +** expression tree being parsed. pPrev is the expression node most recently +** inserted into the tree. This function adds pNew, which is always a binary +** operator node, into the expression tree based on the relative precedence +** of pNew and the existing nodes of the tree. This may result in the head +** of the tree changing, in which case *ppHead is set to the new root node. +*/ +static void insertBinaryOperator( + Fts3Expr **ppHead, /* Pointer to the root node of a tree */ + Fts3Expr *pPrev, /* Node most recently inserted into the tree */ + Fts3Expr *pNew /* New binary node to insert into expression tree */ +){ + Fts3Expr *pSplit = pPrev; + while( pSplit->pParent && opPrecedence(pSplit->pParent)<=opPrecedence(pNew) ){ + pSplit = pSplit->pParent; + } + + if( pSplit->pParent ){ + assert( pSplit->pParent->pRight==pSplit ); + pSplit->pParent->pRight = pNew; + pNew->pParent = pSplit->pParent; + }else{ + *ppHead = pNew; + } + pNew->pLeft = pSplit; + pSplit->pParent = pNew; +} + +/* +** Parse the fts3 query expression found in buffer z, length n. This function +** returns either when the end of the buffer is reached or an unmatched +** closing bracket - ')' - is encountered. +** +** If successful, SQLITE_OK is returned, *ppExpr is set to point to the +** parsed form of the expression and *pnConsumed is set to the number of +** bytes read from buffer z. Otherwise, *ppExpr is set to 0 and SQLITE_NOMEM +** (out of memory error) or SQLITE_ERROR (parse error) is returned. +*/ +static int fts3ExprParse( + ParseContext *pParse, /* fts3 query parse context */ + const char *z, int n, /* Text of MATCH query */ + Fts3Expr **ppExpr, /* OUT: Parsed query structure */ + int *pnConsumed /* OUT: Number of bytes consumed */ +){ + Fts3Expr *pRet = 0; + Fts3Expr *pPrev = 0; + Fts3Expr *pNotBranch = 0; /* Only used in legacy parse mode */ + int nIn = n; + const char *zIn = z; + int rc = SQLITE_OK; + int isRequirePhrase = 1; + + while( rc==SQLITE_OK ){ + Fts3Expr *p = 0; + int nByte = 0; + + rc = getNextNode(pParse, zIn, nIn, &p, &nByte); + assert( nByte>0 || (rc!=SQLITE_OK && p==0) ); + if( rc==SQLITE_OK ){ + if( p ){ + int isPhrase; + + if( !sqlite3_fts3_enable_parentheses + && p->eType==FTSQUERY_PHRASE && pParse->isNot + ){ + /* Create an implicit NOT operator. */ + Fts3Expr *pNot = sqlite3Fts3MallocZero(sizeof(Fts3Expr)); + if( !pNot ){ + sqlite3Fts3ExprFree(p); + rc = SQLITE_NOMEM; + goto exprparse_out; + } + pNot->eType = FTSQUERY_NOT; + pNot->pRight = p; + p->pParent = pNot; + if( pNotBranch ){ + pNot->pLeft = pNotBranch; + pNotBranch->pParent = pNot; + } + pNotBranch = pNot; + p = pPrev; + }else{ + int eType = p->eType; + isPhrase = (eType==FTSQUERY_PHRASE || p->pLeft); + + /* The isRequirePhrase variable is set to true if a phrase or + ** an expression contained in parenthesis is required. If a + ** binary operator (AND, OR, NOT or NEAR) is encountered when + ** isRequirePhrase is set, this is a syntax error. + */ + if( !isPhrase && isRequirePhrase ){ + sqlite3Fts3ExprFree(p); + rc = SQLITE_ERROR; + goto exprparse_out; + } + + if( isPhrase && !isRequirePhrase ){ + /* Insert an implicit AND operator. */ + Fts3Expr *pAnd; + assert( pRet && pPrev ); + pAnd = sqlite3Fts3MallocZero(sizeof(Fts3Expr)); + if( !pAnd ){ + sqlite3Fts3ExprFree(p); + rc = SQLITE_NOMEM; + goto exprparse_out; + } + pAnd->eType = FTSQUERY_AND; + insertBinaryOperator(&pRet, pPrev, pAnd); + pPrev = pAnd; + } + + /* This test catches attempts to make either operand of a NEAR + ** operator something other than a phrase. For example, either of + ** the following: + ** + ** (bracketed expression) NEAR phrase + ** phrase NEAR (bracketed expression) + ** + ** Return an error in either case. + */ + if( pPrev && ( + (eType==FTSQUERY_NEAR && !isPhrase && pPrev->eType!=FTSQUERY_PHRASE) + || (eType!=FTSQUERY_PHRASE && isPhrase && pPrev->eType==FTSQUERY_NEAR) + )){ + sqlite3Fts3ExprFree(p); + rc = SQLITE_ERROR; + goto exprparse_out; + } + + if( isPhrase ){ + if( pRet ){ + assert( pPrev && pPrev->pLeft && pPrev->pRight==0 ); + pPrev->pRight = p; + p->pParent = pPrev; + }else{ + pRet = p; + } + }else{ + insertBinaryOperator(&pRet, pPrev, p); + } + isRequirePhrase = !isPhrase; + } + pPrev = p; + } + assert( nByte>0 ); + } + assert( rc!=SQLITE_OK || (nByte>0 && nByte<=nIn) ); + nIn -= nByte; + zIn += nByte; + } + + if( rc==SQLITE_DONE && pRet && isRequirePhrase ){ + rc = SQLITE_ERROR; + } + + if( rc==SQLITE_DONE ){ + rc = SQLITE_OK; + if( !sqlite3_fts3_enable_parentheses && pNotBranch ){ + if( !pRet ){ + rc = SQLITE_ERROR; + }else{ + Fts3Expr *pIter = pNotBranch; + while( pIter->pLeft ){ + pIter = pIter->pLeft; + } + pIter->pLeft = pRet; + pRet->pParent = pIter; + pRet = pNotBranch; + } + } + } + *pnConsumed = n - nIn; + +exprparse_out: + if( rc!=SQLITE_OK ){ + sqlite3Fts3ExprFree(pRet); + sqlite3Fts3ExprFree(pNotBranch); + pRet = 0; + } + *ppExpr = pRet; + return rc; +} + +/* +** Return SQLITE_ERROR if the maximum depth of the expression tree passed +** as the only argument is more than nMaxDepth. +*/ +static int fts3ExprCheckDepth(Fts3Expr *p, int nMaxDepth){ + int rc = SQLITE_OK; + if( p ){ + if( nMaxDepth<0 ){ + rc = SQLITE_TOOBIG; + }else{ + rc = fts3ExprCheckDepth(p->pLeft, nMaxDepth-1); + if( rc==SQLITE_OK ){ + rc = fts3ExprCheckDepth(p->pRight, nMaxDepth-1); + } + } + } + return rc; +} + +/* +** This function attempts to transform the expression tree at (*pp) to +** an equivalent but more balanced form. The tree is modified in place. +** If successful, SQLITE_OK is returned and (*pp) set to point to the +** new root expression node. +** +** nMaxDepth is the maximum allowable depth of the balanced sub-tree. +** +** Otherwise, if an error occurs, an SQLite error code is returned and +** expression (*pp) freed. +*/ +static int fts3ExprBalance(Fts3Expr **pp, int nMaxDepth){ + int rc = SQLITE_OK; /* Return code */ + Fts3Expr *pRoot = *pp; /* Initial root node */ + Fts3Expr *pFree = 0; /* List of free nodes. Linked by pParent. */ + int eType = pRoot->eType; /* Type of node in this tree */ + + if( nMaxDepth==0 ){ + rc = SQLITE_ERROR; + } + + if( rc==SQLITE_OK ){ + if( (eType==FTSQUERY_AND || eType==FTSQUERY_OR) ){ + Fts3Expr **apLeaf; + apLeaf = (Fts3Expr **)sqlite3_malloc64(sizeof(Fts3Expr *) * nMaxDepth); + if( 0==apLeaf ){ + rc = SQLITE_NOMEM; + }else{ + memset(apLeaf, 0, sizeof(Fts3Expr *) * nMaxDepth); + } + + if( rc==SQLITE_OK ){ + int i; + Fts3Expr *p; + + /* Set $p to point to the left-most leaf in the tree of eType nodes. */ + for(p=pRoot; p->eType==eType; p=p->pLeft){ + assert( p->pParent==0 || p->pParent->pLeft==p ); + assert( p->pLeft && p->pRight ); + } + + /* This loop runs once for each leaf in the tree of eType nodes. */ + while( 1 ){ + int iLvl; + Fts3Expr *pParent = p->pParent; /* Current parent of p */ + + assert( pParent==0 || pParent->pLeft==p ); + p->pParent = 0; + if( pParent ){ + pParent->pLeft = 0; + }else{ + pRoot = 0; + } + rc = fts3ExprBalance(&p, nMaxDepth-1); + if( rc!=SQLITE_OK ) break; + + for(iLvl=0; p && iLvlpLeft = apLeaf[iLvl]; + pFree->pRight = p; + pFree->pLeft->pParent = pFree; + pFree->pRight->pParent = pFree; + + p = pFree; + pFree = pFree->pParent; + p->pParent = 0; + apLeaf[iLvl] = 0; + } + } + if( p ){ + sqlite3Fts3ExprFree(p); + rc = SQLITE_TOOBIG; + break; + } + + /* If that was the last leaf node, break out of the loop */ + if( pParent==0 ) break; + + /* Set $p to point to the next leaf in the tree of eType nodes */ + for(p=pParent->pRight; p->eType==eType; p=p->pLeft); + + /* Remove pParent from the original tree. */ + assert( pParent->pParent==0 || pParent->pParent->pLeft==pParent ); + pParent->pRight->pParent = pParent->pParent; + if( pParent->pParent ){ + pParent->pParent->pLeft = pParent->pRight; + }else{ + assert( pParent==pRoot ); + pRoot = pParent->pRight; + } + + /* Link pParent into the free node list. It will be used as an + ** internal node of the new tree. */ + pParent->pParent = pFree; + pFree = pParent; + } + + if( rc==SQLITE_OK ){ + p = 0; + for(i=0; ipParent = 0; + }else{ + assert( pFree!=0 ); + pFree->pRight = p; + pFree->pLeft = apLeaf[i]; + pFree->pLeft->pParent = pFree; + pFree->pRight->pParent = pFree; + + p = pFree; + pFree = pFree->pParent; + p->pParent = 0; + } + } + } + pRoot = p; + }else{ + /* An error occurred. Delete the contents of the apLeaf[] array + ** and pFree list. Everything else is cleaned up by the call to + ** sqlite3Fts3ExprFree(pRoot) below. */ + Fts3Expr *pDel; + for(i=0; ipParent; + sqlite3_free(pDel); + } + } + + assert( pFree==0 ); + sqlite3_free( apLeaf ); + } + }else if( eType==FTSQUERY_NOT ){ + Fts3Expr *pLeft = pRoot->pLeft; + Fts3Expr *pRight = pRoot->pRight; + + pRoot->pLeft = 0; + pRoot->pRight = 0; + pLeft->pParent = 0; + pRight->pParent = 0; + + rc = fts3ExprBalance(&pLeft, nMaxDepth-1); + if( rc==SQLITE_OK ){ + rc = fts3ExprBalance(&pRight, nMaxDepth-1); + } + + if( rc!=SQLITE_OK ){ + sqlite3Fts3ExprFree(pRight); + sqlite3Fts3ExprFree(pLeft); + }else{ + assert( pLeft && pRight ); + pRoot->pLeft = pLeft; + pLeft->pParent = pRoot; + pRoot->pRight = pRight; + pRight->pParent = pRoot; + } + } + } + + if( rc!=SQLITE_OK ){ + sqlite3Fts3ExprFree(pRoot); + pRoot = 0; + } + *pp = pRoot; + return rc; +} + +/* +** This function is similar to sqlite3Fts3ExprParse(), with the following +** differences: +** +** 1. It does not do expression rebalancing. +** 2. It does not check that the expression does not exceed the +** maximum allowable depth. +** 3. Even if it fails, *ppExpr may still be set to point to an +** expression tree. It should be deleted using sqlite3Fts3ExprFree() +** in this case. +*/ +static int fts3ExprParseUnbalanced( + sqlite3_tokenizer *pTokenizer, /* Tokenizer module */ + int iLangid, /* Language id for tokenizer */ + char **azCol, /* Array of column names for fts3 table */ + int bFts4, /* True to allow FTS4-only syntax */ + int nCol, /* Number of entries in azCol[] */ + int iDefaultCol, /* Default column to query */ + const char *z, int n, /* Text of MATCH query */ + Fts3Expr **ppExpr /* OUT: Parsed query structure */ +){ + int nParsed; + int rc; + ParseContext sParse; + + memset(&sParse, 0, sizeof(ParseContext)); + sParse.pTokenizer = pTokenizer; + sParse.iLangid = iLangid; + sParse.azCol = (const char **)azCol; + sParse.nCol = nCol; + sParse.iDefaultCol = iDefaultCol; + sParse.bFts4 = bFts4; + if( z==0 ){ + *ppExpr = 0; + return SQLITE_OK; + } + if( n<0 ){ + n = (int)strlen(z); + } + rc = fts3ExprParse(&sParse, z, n, ppExpr, &nParsed); + assert( rc==SQLITE_OK || *ppExpr==0 ); + + /* Check for mismatched parenthesis */ + if( rc==SQLITE_OK && sParse.nNest ){ + rc = SQLITE_ERROR; + } + + return rc; +} + +/* +** Parameters z and n contain a pointer to and length of a buffer containing +** an fts3 query expression, respectively. This function attempts to parse the +** query expression and create a tree of Fts3Expr structures representing the +** parsed expression. If successful, *ppExpr is set to point to the head +** of the parsed expression tree and SQLITE_OK is returned. If an error +** occurs, either SQLITE_NOMEM (out-of-memory error) or SQLITE_ERROR (parse +** error) is returned and *ppExpr is set to 0. +** +** If parameter n is a negative number, then z is assumed to point to a +** nul-terminated string and the length is determined using strlen(). +** +** The first parameter, pTokenizer, is passed the fts3 tokenizer module to +** use to normalize query tokens while parsing the expression. The azCol[] +** array, which is assumed to contain nCol entries, should contain the names +** of each column in the target fts3 table, in order from left to right. +** Column names must be nul-terminated strings. +** +** The iDefaultCol parameter should be passed the index of the table column +** that appears on the left-hand-side of the MATCH operator (the default +** column to match against for tokens for which a column name is not explicitly +** specified as part of the query string), or -1 if tokens may by default +** match any table column. +*/ +SQLITE_PRIVATE int sqlite3Fts3ExprParse( + sqlite3_tokenizer *pTokenizer, /* Tokenizer module */ + int iLangid, /* Language id for tokenizer */ + char **azCol, /* Array of column names for fts3 table */ + int bFts4, /* True to allow FTS4-only syntax */ + int nCol, /* Number of entries in azCol[] */ + int iDefaultCol, /* Default column to query */ + const char *z, int n, /* Text of MATCH query */ + Fts3Expr **ppExpr, /* OUT: Parsed query structure */ + char **pzErr /* OUT: Error message (sqlite3_malloc) */ +){ + int rc = fts3ExprParseUnbalanced( + pTokenizer, iLangid, azCol, bFts4, nCol, iDefaultCol, z, n, ppExpr + ); + + /* Rebalance the expression. And check that its depth does not exceed + ** SQLITE_FTS3_MAX_EXPR_DEPTH. */ + if( rc==SQLITE_OK && *ppExpr ){ + rc = fts3ExprBalance(ppExpr, SQLITE_FTS3_MAX_EXPR_DEPTH); + if( rc==SQLITE_OK ){ + rc = fts3ExprCheckDepth(*ppExpr, SQLITE_FTS3_MAX_EXPR_DEPTH); + } + } + + if( rc!=SQLITE_OK ){ + sqlite3Fts3ExprFree(*ppExpr); + *ppExpr = 0; + if( rc==SQLITE_TOOBIG ){ + sqlite3Fts3ErrMsg(pzErr, + "FTS expression tree is too large (maximum depth %d)", + SQLITE_FTS3_MAX_EXPR_DEPTH + ); + rc = SQLITE_ERROR; + }else if( rc==SQLITE_ERROR ){ + sqlite3Fts3ErrMsg(pzErr, "malformed MATCH expression: [%s]", z); + } + } + + return rc; +} + +/* +** Free a single node of an expression tree. +*/ +static void fts3FreeExprNode(Fts3Expr *p){ + assert( p->eType==FTSQUERY_PHRASE || p->pPhrase==0 ); + sqlite3Fts3EvalPhraseCleanup(p->pPhrase); + sqlite3_free(p->aMI); + sqlite3_free(p); +} + +/* +** Free a parsed fts3 query expression allocated by sqlite3Fts3ExprParse(). +** +** This function would be simpler if it recursively called itself. But +** that would mean passing a sufficiently large expression to ExprParse() +** could cause a stack overflow. +*/ +SQLITE_PRIVATE void sqlite3Fts3ExprFree(Fts3Expr *pDel){ + Fts3Expr *p; + assert( pDel==0 || pDel->pParent==0 ); + for(p=pDel; p && (p->pLeft||p->pRight); p=(p->pLeft ? p->pLeft : p->pRight)){ + assert( p->pParent==0 || p==p->pParent->pRight || p==p->pParent->pLeft ); + } + while( p ){ + Fts3Expr *pParent = p->pParent; + fts3FreeExprNode(p); + if( pParent && p==pParent->pLeft && pParent->pRight ){ + p = pParent->pRight; + while( p && (p->pLeft || p->pRight) ){ + assert( p==p->pParent->pRight || p==p->pParent->pLeft ); + p = (p->pLeft ? p->pLeft : p->pRight); + } + }else{ + p = pParent; + } + } +} + +/**************************************************************************** +***************************************************************************** +** Everything after this point is just test code. +*/ + +#ifdef SQLITE_TEST + +/* #include */ + +/* +** Return a pointer to a buffer containing a text representation of the +** expression passed as the first argument. The buffer is obtained from +** sqlite3_malloc(). It is the responsibility of the caller to use +** sqlite3_free() to release the memory. If an OOM condition is encountered, +** NULL is returned. +** +** If the second argument is not NULL, then its contents are prepended to +** the returned expression text and then freed using sqlite3_free(). +*/ +static char *exprToString(Fts3Expr *pExpr, char *zBuf){ + if( pExpr==0 ){ + return sqlite3_mprintf(""); + } + switch( pExpr->eType ){ + case FTSQUERY_PHRASE: { + Fts3Phrase *pPhrase = pExpr->pPhrase; + int i; + zBuf = sqlite3_mprintf( + "%zPHRASE %d 0", zBuf, pPhrase->iColumn); + for(i=0; zBuf && inToken; i++){ + zBuf = sqlite3_mprintf("%z %.*s%s", zBuf, + pPhrase->aToken[i].n, pPhrase->aToken[i].z, + (pPhrase->aToken[i].isPrefix?"+":"") + ); + } + return zBuf; + } + + case FTSQUERY_NEAR: + zBuf = sqlite3_mprintf("%zNEAR/%d ", zBuf, pExpr->nNear); + break; + case FTSQUERY_NOT: + zBuf = sqlite3_mprintf("%zNOT ", zBuf); + break; + case FTSQUERY_AND: + zBuf = sqlite3_mprintf("%zAND ", zBuf); + break; + case FTSQUERY_OR: + zBuf = sqlite3_mprintf("%zOR ", zBuf); + break; + } + + if( zBuf ) zBuf = sqlite3_mprintf("%z{", zBuf); + if( zBuf ) zBuf = exprToString(pExpr->pLeft, zBuf); + if( zBuf ) zBuf = sqlite3_mprintf("%z} {", zBuf); + + if( zBuf ) zBuf = exprToString(pExpr->pRight, zBuf); + if( zBuf ) zBuf = sqlite3_mprintf("%z}", zBuf); + + return zBuf; +} + +/* +** This is the implementation of a scalar SQL function used to test the +** expression parser. It should be called as follows: +** +** fts3_exprtest(, , , ...); +** +** The first argument, , is the name of the fts3 tokenizer used +** to parse the query expression (see README.tokenizers). The second argument +** is the query expression to parse. Each subsequent argument is the name +** of a column of the fts3 table that the query expression may refer to. +** For example: +** +** SELECT fts3_exprtest('simple', 'Bill col2:Bloggs', 'col1', 'col2'); +*/ +static void fts3ExprTestCommon( + int bRebalance, + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + sqlite3_tokenizer *pTokenizer = 0; + int rc; + char **azCol = 0; + const char *zExpr; + int nExpr; + int nCol; + int ii; + Fts3Expr *pExpr; + char *zBuf = 0; + Fts3Hash *pHash = (Fts3Hash*)sqlite3_user_data(context); + const char *zTokenizer = 0; + char *zErr = 0; + + if( argc<3 ){ + sqlite3_result_error(context, + "Usage: fts3_exprtest(tokenizer, expr, col1, ...", -1 + ); + return; + } + + zTokenizer = (const char*)sqlite3_value_text(argv[0]); + rc = sqlite3Fts3InitTokenizer(pHash, zTokenizer, &pTokenizer, &zErr); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_NOMEM ){ + sqlite3_result_error_nomem(context); + }else{ + sqlite3_result_error(context, zErr, -1); + } + sqlite3_free(zErr); + return; + } + + zExpr = (const char *)sqlite3_value_text(argv[1]); + nExpr = sqlite3_value_bytes(argv[1]); + nCol = argc-2; + azCol = (char **)sqlite3_malloc64(nCol*sizeof(char *)); + if( !azCol ){ + sqlite3_result_error_nomem(context); + goto exprtest_out; + } + for(ii=0; iipModule->xDestroy(pTokenizer); + } + sqlite3_free(azCol); +} + +static void fts3ExprTest( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + fts3ExprTestCommon(0, context, argc, argv); +} +static void fts3ExprTestRebalance( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + fts3ExprTestCommon(1, context, argc, argv); +} + +/* +** Register the query expression parser test function fts3_exprtest() +** with database connection db. +*/ +SQLITE_PRIVATE int sqlite3Fts3ExprInitTestInterface(sqlite3 *db, Fts3Hash *pHash){ + int rc = sqlite3_create_function( + db, "fts3_exprtest", -1, SQLITE_UTF8, (void*)pHash, fts3ExprTest, 0, 0 + ); + if( rc==SQLITE_OK ){ + rc = sqlite3_create_function(db, "fts3_exprtest_rebalance", + -1, SQLITE_UTF8, (void*)pHash, fts3ExprTestRebalance, 0, 0 + ); + } + return rc; +} + +#endif +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ + +/************** End of fts3_expr.c *******************************************/ +/************** Begin file fts3_hash.c ***************************************/ +/* +** 2001 September 22 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This is the implementation of generic hash-tables used in SQLite. +** We've modified it slightly to serve as a standalone hash table +** implementation for the full-text indexing module. +*/ + +/* +** The code in this file is only compiled if: +** +** * The FTS3 module is being built as an extension +** (in which case SQLITE_CORE is not defined), or +** +** * The FTS3 module is being built into the core of +** SQLite (in which case SQLITE_ENABLE_FTS3 is defined). +*/ +/* #include "fts3Int.h" */ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +/* #include */ +/* #include */ +/* #include */ + +/* #include "fts3_hash.h" */ + +/* +** Malloc and Free functions +*/ +static void *fts3HashMalloc(sqlite3_int64 n){ + void *p = sqlite3_malloc64(n); + if( p ){ + memset(p, 0, n); + } + return p; +} +static void fts3HashFree(void *p){ + sqlite3_free(p); +} + +/* Turn bulk memory into a hash table object by initializing the +** fields of the Hash structure. +** +** "pNew" is a pointer to the hash table that is to be initialized. +** keyClass is one of the constants +** FTS3_HASH_BINARY or FTS3_HASH_STRING. The value of keyClass +** determines what kind of key the hash table will use. "copyKey" is +** true if the hash table should make its own private copy of keys and +** false if it should just use the supplied pointer. +*/ +SQLITE_PRIVATE void sqlite3Fts3HashInit(Fts3Hash *pNew, char keyClass, char copyKey){ + assert( pNew!=0 ); + assert( keyClass>=FTS3_HASH_STRING && keyClass<=FTS3_HASH_BINARY ); + pNew->keyClass = keyClass; + pNew->copyKey = copyKey; + pNew->first = 0; + pNew->count = 0; + pNew->htsize = 0; + pNew->ht = 0; +} + +/* Remove all entries from a hash table. Reclaim all memory. +** Call this routine to delete a hash table or to reset a hash table +** to the empty state. +*/ +SQLITE_PRIVATE void sqlite3Fts3HashClear(Fts3Hash *pH){ + Fts3HashElem *elem; /* For looping over all elements of the table */ + + assert( pH!=0 ); + elem = pH->first; + pH->first = 0; + fts3HashFree(pH->ht); + pH->ht = 0; + pH->htsize = 0; + while( elem ){ + Fts3HashElem *next_elem = elem->next; + if( pH->copyKey && elem->pKey ){ + fts3HashFree(elem->pKey); + } + fts3HashFree(elem); + elem = next_elem; + } + pH->count = 0; +} + +/* +** Hash and comparison functions when the mode is FTS3_HASH_STRING +*/ +static int fts3StrHash(const void *pKey, int nKey){ + const char *z = (const char *)pKey; + unsigned h = 0; + if( nKey<=0 ) nKey = (int) strlen(z); + while( nKey > 0 ){ + h = (h<<3) ^ h ^ *z++; + nKey--; + } + return (int)(h & 0x7fffffff); +} +static int fts3StrCompare(const void *pKey1, int n1, const void *pKey2, int n2){ + if( n1!=n2 ) return 1; + return strncmp((const char*)pKey1,(const char*)pKey2,n1); +} + +/* +** Hash and comparison functions when the mode is FTS3_HASH_BINARY +*/ +static int fts3BinHash(const void *pKey, int nKey){ + int h = 0; + const char *z = (const char *)pKey; + while( nKey-- > 0 ){ + h = (h<<3) ^ h ^ *(z++); + } + return h & 0x7fffffff; +} +static int fts3BinCompare(const void *pKey1, int n1, const void *pKey2, int n2){ + if( n1!=n2 ) return 1; + return memcmp(pKey1,pKey2,n1); +} + +/* +** Return a pointer to the appropriate hash function given the key class. +** +** The C syntax in this function definition may be unfamilar to some +** programmers, so we provide the following additional explanation: +** +** The name of the function is "ftsHashFunction". The function takes a +** single parameter "keyClass". The return value of ftsHashFunction() +** is a pointer to another function. Specifically, the return value +** of ftsHashFunction() is a pointer to a function that takes two parameters +** with types "const void*" and "int" and returns an "int". +*/ +static int (*ftsHashFunction(int keyClass))(const void*,int){ + if( keyClass==FTS3_HASH_STRING ){ + return &fts3StrHash; + }else{ + assert( keyClass==FTS3_HASH_BINARY ); + return &fts3BinHash; + } +} + +/* +** Return a pointer to the appropriate hash function given the key class. +** +** For help in interpreted the obscure C code in the function definition, +** see the header comment on the previous function. +*/ +static int (*ftsCompareFunction(int keyClass))(const void*,int,const void*,int){ + if( keyClass==FTS3_HASH_STRING ){ + return &fts3StrCompare; + }else{ + assert( keyClass==FTS3_HASH_BINARY ); + return &fts3BinCompare; + } +} + +/* Link an element into the hash table +*/ +static void fts3HashInsertElement( + Fts3Hash *pH, /* The complete hash table */ + struct _fts3ht *pEntry, /* The entry into which pNew is inserted */ + Fts3HashElem *pNew /* The element to be inserted */ +){ + Fts3HashElem *pHead; /* First element already in pEntry */ + pHead = pEntry->chain; + if( pHead ){ + pNew->next = pHead; + pNew->prev = pHead->prev; + if( pHead->prev ){ pHead->prev->next = pNew; } + else { pH->first = pNew; } + pHead->prev = pNew; + }else{ + pNew->next = pH->first; + if( pH->first ){ pH->first->prev = pNew; } + pNew->prev = 0; + pH->first = pNew; + } + pEntry->count++; + pEntry->chain = pNew; +} + + +/* Resize the hash table so that it contains "new_size" buckets. +** "new_size" must be a power of 2. The hash table might fail +** to resize if sqliteMalloc() fails. +** +** Return non-zero if a memory allocation error occurs. +*/ +static int fts3Rehash(Fts3Hash *pH, int new_size){ + struct _fts3ht *new_ht; /* The new hash table */ + Fts3HashElem *elem, *next_elem; /* For looping over existing elements */ + int (*xHash)(const void*,int); /* The hash function */ + + assert( (new_size & (new_size-1))==0 ); + new_ht = (struct _fts3ht *)fts3HashMalloc( new_size*sizeof(struct _fts3ht) ); + if( new_ht==0 ) return 1; + fts3HashFree(pH->ht); + pH->ht = new_ht; + pH->htsize = new_size; + xHash = ftsHashFunction(pH->keyClass); + for(elem=pH->first, pH->first=0; elem; elem = next_elem){ + int h = (*xHash)(elem->pKey, elem->nKey) & (new_size-1); + next_elem = elem->next; + fts3HashInsertElement(pH, &new_ht[h], elem); + } + return 0; +} + +/* This function (for internal use only) locates an element in an +** hash table that matches the given key. The hash for this key has +** already been computed and is passed as the 4th parameter. +*/ +static Fts3HashElem *fts3FindElementByHash( + const Fts3Hash *pH, /* The pH to be searched */ + const void *pKey, /* The key we are searching for */ + int nKey, + int h /* The hash for this key. */ +){ + Fts3HashElem *elem; /* Used to loop thru the element list */ + int count; /* Number of elements left to test */ + int (*xCompare)(const void*,int,const void*,int); /* comparison function */ + + if( pH->ht ){ + struct _fts3ht *pEntry = &pH->ht[h]; + elem = pEntry->chain; + count = pEntry->count; + xCompare = ftsCompareFunction(pH->keyClass); + while( count-- && elem ){ + if( (*xCompare)(elem->pKey,elem->nKey,pKey,nKey)==0 ){ + return elem; + } + elem = elem->next; + } + } + return 0; +} + +/* Remove a single entry from the hash table given a pointer to that +** element and a hash on the element's key. +*/ +static void fts3RemoveElementByHash( + Fts3Hash *pH, /* The pH containing "elem" */ + Fts3HashElem* elem, /* The element to be removed from the pH */ + int h /* Hash value for the element */ +){ + struct _fts3ht *pEntry; + if( elem->prev ){ + elem->prev->next = elem->next; + }else{ + pH->first = elem->next; + } + if( elem->next ){ + elem->next->prev = elem->prev; + } + pEntry = &pH->ht[h]; + if( pEntry->chain==elem ){ + pEntry->chain = elem->next; + } + pEntry->count--; + if( pEntry->count<=0 ){ + pEntry->chain = 0; + } + if( pH->copyKey && elem->pKey ){ + fts3HashFree(elem->pKey); + } + fts3HashFree( elem ); + pH->count--; + if( pH->count<=0 ){ + assert( pH->first==0 ); + assert( pH->count==0 ); + fts3HashClear(pH); + } +} + +SQLITE_PRIVATE Fts3HashElem *sqlite3Fts3HashFindElem( + const Fts3Hash *pH, + const void *pKey, + int nKey +){ + int h; /* A hash on key */ + int (*xHash)(const void*,int); /* The hash function */ + + if( pH==0 || pH->ht==0 ) return 0; + xHash = ftsHashFunction(pH->keyClass); + assert( xHash!=0 ); + h = (*xHash)(pKey,nKey); + assert( (pH->htsize & (pH->htsize-1))==0 ); + return fts3FindElementByHash(pH,pKey,nKey, h & (pH->htsize-1)); +} + +/* +** Attempt to locate an element of the hash table pH with a key +** that matches pKey,nKey. Return the data for this element if it is +** found, or NULL if there is no match. +*/ +SQLITE_PRIVATE void *sqlite3Fts3HashFind(const Fts3Hash *pH, const void *pKey, int nKey){ + Fts3HashElem *pElem; /* The element that matches key (if any) */ + + pElem = sqlite3Fts3HashFindElem(pH, pKey, nKey); + return pElem ? pElem->data : 0; +} + +/* Insert an element into the hash table pH. The key is pKey,nKey +** and the data is "data". +** +** If no element exists with a matching key, then a new +** element is created. A copy of the key is made if the copyKey +** flag is set. NULL is returned. +** +** If another element already exists with the same key, then the +** new data replaces the old data and the old data is returned. +** The key is not copied in this instance. If a malloc fails, then +** the new data is returned and the hash table is unchanged. +** +** If the "data" parameter to this function is NULL, then the +** element corresponding to "key" is removed from the hash table. +*/ +SQLITE_PRIVATE void *sqlite3Fts3HashInsert( + Fts3Hash *pH, /* The hash table to insert into */ + const void *pKey, /* The key */ + int nKey, /* Number of bytes in the key */ + void *data /* The data */ +){ + int hraw; /* Raw hash value of the key */ + int h; /* the hash of the key modulo hash table size */ + Fts3HashElem *elem; /* Used to loop thru the element list */ + Fts3HashElem *new_elem; /* New element added to the pH */ + int (*xHash)(const void*,int); /* The hash function */ + + assert( pH!=0 ); + xHash = ftsHashFunction(pH->keyClass); + assert( xHash!=0 ); + hraw = (*xHash)(pKey, nKey); + assert( (pH->htsize & (pH->htsize-1))==0 ); + h = hraw & (pH->htsize-1); + elem = fts3FindElementByHash(pH,pKey,nKey,h); + if( elem ){ + void *old_data = elem->data; + if( data==0 ){ + fts3RemoveElementByHash(pH,elem,h); + }else{ + elem->data = data; + } + return old_data; + } + if( data==0 ) return 0; + if( (pH->htsize==0 && fts3Rehash(pH,8)) + || (pH->count>=pH->htsize && fts3Rehash(pH, pH->htsize*2)) + ){ + pH->count = 0; + return data; + } + assert( pH->htsize>0 ); + new_elem = (Fts3HashElem*)fts3HashMalloc( sizeof(Fts3HashElem) ); + if( new_elem==0 ) return data; + if( pH->copyKey && pKey!=0 ){ + new_elem->pKey = fts3HashMalloc( nKey ); + if( new_elem->pKey==0 ){ + fts3HashFree(new_elem); + return data; + } + memcpy((void*)new_elem->pKey, pKey, nKey); + }else{ + new_elem->pKey = (void*)pKey; + } + new_elem->nKey = nKey; + pH->count++; + assert( pH->htsize>0 ); + assert( (pH->htsize & (pH->htsize-1))==0 ); + h = hraw & (pH->htsize-1); + fts3HashInsertElement(pH, &pH->ht[h], new_elem); + new_elem->data = data; + return 0; +} + +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ + +/************** End of fts3_hash.c *******************************************/ +/************** Begin file fts3_porter.c *************************************/ +/* +** 2006 September 30 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** Implementation of the full-text-search tokenizer that implements +** a Porter stemmer. +*/ + +/* +** The code in this file is only compiled if: +** +** * The FTS3 module is being built as an extension +** (in which case SQLITE_CORE is not defined), or +** +** * The FTS3 module is being built into the core of +** SQLite (in which case SQLITE_ENABLE_FTS3 is defined). +*/ +/* #include "fts3Int.h" */ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +/* #include */ +/* #include */ +/* #include */ +/* #include */ + +/* #include "fts3_tokenizer.h" */ + +/* +** Class derived from sqlite3_tokenizer +*/ +typedef struct porter_tokenizer { + sqlite3_tokenizer base; /* Base class */ +} porter_tokenizer; + +/* +** Class derived from sqlite3_tokenizer_cursor +*/ +typedef struct porter_tokenizer_cursor { + sqlite3_tokenizer_cursor base; + const char *zInput; /* input we are tokenizing */ + int nInput; /* size of the input */ + int iOffset; /* current position in zInput */ + int iToken; /* index of next token to be returned */ + char *zToken; /* storage for current token */ + int nAllocated; /* space allocated to zToken buffer */ +} porter_tokenizer_cursor; + + +/* +** Create a new tokenizer instance. +*/ +static int porterCreate( + int argc, const char * const *argv, + sqlite3_tokenizer **ppTokenizer +){ + porter_tokenizer *t; + + UNUSED_PARAMETER(argc); + UNUSED_PARAMETER(argv); + + t = (porter_tokenizer *) sqlite3_malloc(sizeof(*t)); + if( t==NULL ) return SQLITE_NOMEM; + memset(t, 0, sizeof(*t)); + *ppTokenizer = &t->base; + return SQLITE_OK; +} + +/* +** Destroy a tokenizer +*/ +static int porterDestroy(sqlite3_tokenizer *pTokenizer){ + sqlite3_free(pTokenizer); + return SQLITE_OK; +} + +/* +** Prepare to begin tokenizing a particular string. The input +** string to be tokenized is zInput[0..nInput-1]. A cursor +** used to incrementally tokenize this string is returned in +** *ppCursor. +*/ +static int porterOpen( + sqlite3_tokenizer *pTokenizer, /* The tokenizer */ + const char *zInput, int nInput, /* String to be tokenized */ + sqlite3_tokenizer_cursor **ppCursor /* OUT: Tokenization cursor */ +){ + porter_tokenizer_cursor *c; + + UNUSED_PARAMETER(pTokenizer); + + c = (porter_tokenizer_cursor *) sqlite3_malloc(sizeof(*c)); + if( c==NULL ) return SQLITE_NOMEM; + + c->zInput = zInput; + if( zInput==0 ){ + c->nInput = 0; + }else if( nInput<0 ){ + c->nInput = (int)strlen(zInput); + }else{ + c->nInput = nInput; + } + c->iOffset = 0; /* start tokenizing at the beginning */ + c->iToken = 0; + c->zToken = NULL; /* no space allocated, yet. */ + c->nAllocated = 0; + + *ppCursor = &c->base; + return SQLITE_OK; +} + +/* +** Close a tokenization cursor previously opened by a call to +** porterOpen() above. +*/ +static int porterClose(sqlite3_tokenizer_cursor *pCursor){ + porter_tokenizer_cursor *c = (porter_tokenizer_cursor *) pCursor; + sqlite3_free(c->zToken); + sqlite3_free(c); + return SQLITE_OK; +} +/* +** Vowel or consonant +*/ +static const char cType[] = { + 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 2, 1 +}; + +/* +** isConsonant() and isVowel() determine if their first character in +** the string they point to is a consonant or a vowel, according +** to Porter ruls. +** +** A consonate is any letter other than 'a', 'e', 'i', 'o', or 'u'. +** 'Y' is a consonant unless it follows another consonant, +** in which case it is a vowel. +** +** In these routine, the letters are in reverse order. So the 'y' rule +** is that 'y' is a consonant unless it is followed by another +** consonent. +*/ +static int isVowel(const char*); +static int isConsonant(const char *z){ + int j; + char x = *z; + if( x==0 ) return 0; + assert( x>='a' && x<='z' ); + j = cType[x-'a']; + if( j<2 ) return j; + return z[1]==0 || isVowel(z + 1); +} +static int isVowel(const char *z){ + int j; + char x = *z; + if( x==0 ) return 0; + assert( x>='a' && x<='z' ); + j = cType[x-'a']; + if( j<2 ) return 1-j; + return isConsonant(z + 1); +} + +/* +** Let any sequence of one or more vowels be represented by V and let +** C be sequence of one or more consonants. Then every word can be +** represented as: +** +** [C] (VC){m} [V] +** +** In prose: A word is an optional consonant followed by zero or +** vowel-consonant pairs followed by an optional vowel. "m" is the +** number of vowel consonant pairs. This routine computes the value +** of m for the first i bytes of a word. +** +** Return true if the m-value for z is 1 or more. In other words, +** return true if z contains at least one vowel that is followed +** by a consonant. +** +** In this routine z[] is in reverse order. So we are really looking +** for an instance of a consonant followed by a vowel. +*/ +static int m_gt_0(const char *z){ + while( isVowel(z) ){ z++; } + if( *z==0 ) return 0; + while( isConsonant(z) ){ z++; } + return *z!=0; +} + +/* Like mgt0 above except we are looking for a value of m which is +** exactly 1 +*/ +static int m_eq_1(const char *z){ + while( isVowel(z) ){ z++; } + if( *z==0 ) return 0; + while( isConsonant(z) ){ z++; } + if( *z==0 ) return 0; + while( isVowel(z) ){ z++; } + if( *z==0 ) return 1; + while( isConsonant(z) ){ z++; } + return *z==0; +} + +/* Like mgt0 above except we are looking for a value of m>1 instead +** or m>0 +*/ +static int m_gt_1(const char *z){ + while( isVowel(z) ){ z++; } + if( *z==0 ) return 0; + while( isConsonant(z) ){ z++; } + if( *z==0 ) return 0; + while( isVowel(z) ){ z++; } + if( *z==0 ) return 0; + while( isConsonant(z) ){ z++; } + return *z!=0; +} + +/* +** Return TRUE if there is a vowel anywhere within z[0..n-1] +*/ +static int hasVowel(const char *z){ + while( isConsonant(z) ){ z++; } + return *z!=0; +} + +/* +** Return TRUE if the word ends in a double consonant. +** +** The text is reversed here. So we are really looking at +** the first two characters of z[]. +*/ +static int doubleConsonant(const char *z){ + return isConsonant(z) && z[0]==z[1]; +} + +/* +** Return TRUE if the word ends with three letters which +** are consonant-vowel-consonent and where the final consonant +** is not 'w', 'x', or 'y'. +** +** The word is reversed here. So we are really checking the +** first three letters and the first one cannot be in [wxy]. +*/ +static int star_oh(const char *z){ + return + isConsonant(z) && + z[0]!='w' && z[0]!='x' && z[0]!='y' && + isVowel(z+1) && + isConsonant(z+2); +} + +/* +** If the word ends with zFrom and xCond() is true for the stem +** of the word that precedes the zFrom ending, then change the +** ending to zTo. +** +** The input word *pz and zFrom are both in reverse order. zTo +** is in normal order. +** +** Return TRUE if zFrom matches. Return FALSE if zFrom does not +** match. Not that TRUE is returned even if xCond() fails and +** no substitution occurs. +*/ +static int stem( + char **pz, /* The word being stemmed (Reversed) */ + const char *zFrom, /* If the ending matches this... (Reversed) */ + const char *zTo, /* ... change the ending to this (not reversed) */ + int (*xCond)(const char*) /* Condition that must be true */ +){ + char *z = *pz; + while( *zFrom && *zFrom==*z ){ z++; zFrom++; } + if( *zFrom!=0 ) return 0; + if( xCond && !xCond(z) ) return 1; + while( *zTo ){ + *(--z) = *(zTo++); + } + *pz = z; + return 1; +} + +/* +** This is the fallback stemmer used when the porter stemmer is +** inappropriate. The input word is copied into the output with +** US-ASCII case folding. If the input word is too long (more +** than 20 bytes if it contains no digits or more than 6 bytes if +** it contains digits) then word is truncated to 20 or 6 bytes +** by taking 10 or 3 bytes from the beginning and end. +*/ +static void copy_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){ + int i, mx, j; + int hasDigit = 0; + for(i=0; i='A' && c<='Z' ){ + zOut[i] = c - 'A' + 'a'; + }else{ + if( c>='0' && c<='9' ) hasDigit = 1; + zOut[i] = c; + } + } + mx = hasDigit ? 3 : 10; + if( nIn>mx*2 ){ + for(j=mx, i=nIn-mx; i=(int)sizeof(zReverse)-7 ){ + /* The word is too big or too small for the porter stemmer. + ** Fallback to the copy stemmer */ + copy_stemmer(zIn, nIn, zOut, pnOut); + return; + } + for(i=0, j=sizeof(zReverse)-6; i='A' && c<='Z' ){ + zReverse[j] = c + 'a' - 'A'; + }else if( c>='a' && c<='z' ){ + zReverse[j] = c; + }else{ + /* The use of a character not in [a-zA-Z] means that we fallback + ** to the copy stemmer */ + copy_stemmer(zIn, nIn, zOut, pnOut); + return; + } + } + memset(&zReverse[sizeof(zReverse)-5], 0, 5); + z = &zReverse[j+1]; + + + /* Step 1a */ + if( z[0]=='s' ){ + if( + !stem(&z, "sess", "ss", 0) && + !stem(&z, "sei", "i", 0) && + !stem(&z, "ss", "ss", 0) + ){ + z++; + } + } + + /* Step 1b */ + z2 = z; + if( stem(&z, "dee", "ee", m_gt_0) ){ + /* Do nothing. The work was all in the test */ + }else if( + (stem(&z, "gni", "", hasVowel) || stem(&z, "de", "", hasVowel)) + && z!=z2 + ){ + if( stem(&z, "ta", "ate", 0) || + stem(&z, "lb", "ble", 0) || + stem(&z, "zi", "ize", 0) ){ + /* Do nothing. The work was all in the test */ + }else if( doubleConsonant(z) && (*z!='l' && *z!='s' && *z!='z') ){ + z++; + }else if( m_eq_1(z) && star_oh(z) ){ + *(--z) = 'e'; + } + } + + /* Step 1c */ + if( z[0]=='y' && hasVowel(z+1) ){ + z[0] = 'i'; + } + + /* Step 2 */ + switch( z[1] ){ + case 'a': + if( !stem(&z, "lanoita", "ate", m_gt_0) ){ + stem(&z, "lanoit", "tion", m_gt_0); + } + break; + case 'c': + if( !stem(&z, "icne", "ence", m_gt_0) ){ + stem(&z, "icna", "ance", m_gt_0); + } + break; + case 'e': + stem(&z, "rezi", "ize", m_gt_0); + break; + case 'g': + stem(&z, "igol", "log", m_gt_0); + break; + case 'l': + if( !stem(&z, "ilb", "ble", m_gt_0) + && !stem(&z, "illa", "al", m_gt_0) + && !stem(&z, "iltne", "ent", m_gt_0) + && !stem(&z, "ile", "e", m_gt_0) + ){ + stem(&z, "ilsuo", "ous", m_gt_0); + } + break; + case 'o': + if( !stem(&z, "noitazi", "ize", m_gt_0) + && !stem(&z, "noita", "ate", m_gt_0) + ){ + stem(&z, "rota", "ate", m_gt_0); + } + break; + case 's': + if( !stem(&z, "msila", "al", m_gt_0) + && !stem(&z, "ssenevi", "ive", m_gt_0) + && !stem(&z, "ssenluf", "ful", m_gt_0) + ){ + stem(&z, "ssensuo", "ous", m_gt_0); + } + break; + case 't': + if( !stem(&z, "itila", "al", m_gt_0) + && !stem(&z, "itivi", "ive", m_gt_0) + ){ + stem(&z, "itilib", "ble", m_gt_0); + } + break; + } + + /* Step 3 */ + switch( z[0] ){ + case 'e': + if( !stem(&z, "etaci", "ic", m_gt_0) + && !stem(&z, "evita", "", m_gt_0) + ){ + stem(&z, "ezila", "al", m_gt_0); + } + break; + case 'i': + stem(&z, "itici", "ic", m_gt_0); + break; + case 'l': + if( !stem(&z, "laci", "ic", m_gt_0) ){ + stem(&z, "luf", "", m_gt_0); + } + break; + case 's': + stem(&z, "ssen", "", m_gt_0); + break; + } + + /* Step 4 */ + switch( z[1] ){ + case 'a': + if( z[0]=='l' && m_gt_1(z+2) ){ + z += 2; + } + break; + case 'c': + if( z[0]=='e' && z[2]=='n' && (z[3]=='a' || z[3]=='e') && m_gt_1(z+4) ){ + z += 4; + } + break; + case 'e': + if( z[0]=='r' && m_gt_1(z+2) ){ + z += 2; + } + break; + case 'i': + if( z[0]=='c' && m_gt_1(z+2) ){ + z += 2; + } + break; + case 'l': + if( z[0]=='e' && z[2]=='b' && (z[3]=='a' || z[3]=='i') && m_gt_1(z+4) ){ + z += 4; + } + break; + case 'n': + if( z[0]=='t' ){ + if( z[2]=='a' ){ + if( m_gt_1(z+3) ){ + z += 3; + } + }else if( z[2]=='e' ){ + if( !stem(&z, "tneme", "", m_gt_1) + && !stem(&z, "tnem", "", m_gt_1) + ){ + stem(&z, "tne", "", m_gt_1); + } + } + } + break; + case 'o': + if( z[0]=='u' ){ + if( m_gt_1(z+2) ){ + z += 2; + } + }else if( z[3]=='s' || z[3]=='t' ){ + stem(&z, "noi", "", m_gt_1); + } + break; + case 's': + if( z[0]=='m' && z[2]=='i' && m_gt_1(z+3) ){ + z += 3; + } + break; + case 't': + if( !stem(&z, "eta", "", m_gt_1) ){ + stem(&z, "iti", "", m_gt_1); + } + break; + case 'u': + if( z[0]=='s' && z[2]=='o' && m_gt_1(z+3) ){ + z += 3; + } + break; + case 'v': + case 'z': + if( z[0]=='e' && z[2]=='i' && m_gt_1(z+3) ){ + z += 3; + } + break; + } + + /* Step 5a */ + if( z[0]=='e' ){ + if( m_gt_1(z+1) ){ + z++; + }else if( m_eq_1(z+1) && !star_oh(z+1) ){ + z++; + } + } + + /* Step 5b */ + if( m_gt_1(z) && z[0]=='l' && z[1]=='l' ){ + z++; + } + + /* z[] is now the stemmed word in reverse order. Flip it back + ** around into forward order and return. + */ + *pnOut = i = (int)strlen(z); + zOut[i] = 0; + while( *z ){ + zOut[--i] = *(z++); + } +} + +/* +** Characters that can be part of a token. We assume any character +** whose value is greater than 0x80 (any UTF character) can be +** part of a token. In other words, delimiters all must have +** values of 0x7f or lower. +*/ +static const char porterIdChar[] = { +/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 3x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 4x */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* 5x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 6x */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 7x */ +}; +#define isDelim(C) (((ch=C)&0x80)==0 && (ch<0x30 || !porterIdChar[ch-0x30])) + +/* +** Extract the next token from a tokenization cursor. The cursor must +** have been opened by a prior call to porterOpen(). +*/ +static int porterNext( + sqlite3_tokenizer_cursor *pCursor, /* Cursor returned by porterOpen */ + const char **pzToken, /* OUT: *pzToken is the token text */ + int *pnBytes, /* OUT: Number of bytes in token */ + int *piStartOffset, /* OUT: Starting offset of token */ + int *piEndOffset, /* OUT: Ending offset of token */ + int *piPosition /* OUT: Position integer of token */ +){ + porter_tokenizer_cursor *c = (porter_tokenizer_cursor *) pCursor; + const char *z = c->zInput; + + while( c->iOffsetnInput ){ + int iStartOffset, ch; + + /* Scan past delimiter characters */ + while( c->iOffsetnInput && isDelim(z[c->iOffset]) ){ + c->iOffset++; + } + + /* Count non-delimiter characters. */ + iStartOffset = c->iOffset; + while( c->iOffsetnInput && !isDelim(z[c->iOffset]) ){ + c->iOffset++; + } + + if( c->iOffset>iStartOffset ){ + int n = c->iOffset-iStartOffset; + if( n>c->nAllocated ){ + char *pNew; + c->nAllocated = n+20; + pNew = sqlite3_realloc64(c->zToken, c->nAllocated); + if( !pNew ) return SQLITE_NOMEM; + c->zToken = pNew; + } + porter_stemmer(&z[iStartOffset], n, c->zToken, pnBytes); + *pzToken = c->zToken; + *piStartOffset = iStartOffset; + *piEndOffset = c->iOffset; + *piPosition = c->iToken++; + return SQLITE_OK; + } + } + return SQLITE_DONE; +} + +/* +** The set of routines that implement the porter-stemmer tokenizer +*/ +static const sqlite3_tokenizer_module porterTokenizerModule = { + 0, + porterCreate, + porterDestroy, + porterOpen, + porterClose, + porterNext, + 0 +}; + +/* +** Allocate a new porter tokenizer. Return a pointer to the new +** tokenizer in *ppModule +*/ +SQLITE_PRIVATE void sqlite3Fts3PorterTokenizerModule( + sqlite3_tokenizer_module const**ppModule +){ + *ppModule = &porterTokenizerModule; +} + +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ + +/************** End of fts3_porter.c *****************************************/ +/************** Begin file fts3_tokenizer.c **********************************/ +/* +** 2007 June 22 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This is part of an SQLite module implementing full-text search. +** This particular file implements the generic tokenizer interface. +*/ + +/* +** The code in this file is only compiled if: +** +** * The FTS3 module is being built as an extension +** (in which case SQLITE_CORE is not defined), or +** +** * The FTS3 module is being built into the core of +** SQLite (in which case SQLITE_ENABLE_FTS3 is defined). +*/ +/* #include "fts3Int.h" */ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +/* #include */ +/* #include */ + +/* +** Return true if the two-argument version of fts3_tokenizer() +** has been activated via a prior call to sqlite3_db_config(db, +** SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER, 1, 0); +*/ +static int fts3TokenizerEnabled(sqlite3_context *context){ + sqlite3 *db = sqlite3_context_db_handle(context); + int isEnabled = 0; + sqlite3_db_config(db,SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER,-1,&isEnabled); + return isEnabled; +} + +/* +** Implementation of the SQL scalar function for accessing the underlying +** hash table. This function may be called as follows: +** +** SELECT (); +** SELECT (, ); +** +** where is the name passed as the second argument +** to the sqlite3Fts3InitHashTable() function (e.g. 'fts3_tokenizer'). +** +** If the argument is specified, it must be a blob value +** containing a pointer to be stored as the hash data corresponding +** to the string . If is not specified, then +** the string must already exist in the has table. Otherwise, +** an error is returned. +** +** Whether or not the argument is specified, the value returned +** is a blob containing the pointer stored as the hash data corresponding +** to string (after the hash-table is updated, if applicable). +*/ +static void fts3TokenizerFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + Fts3Hash *pHash; + void *pPtr = 0; + const unsigned char *zName; + int nName; + + assert( argc==1 || argc==2 ); + + pHash = (Fts3Hash *)sqlite3_user_data(context); + + zName = sqlite3_value_text(argv[0]); + nName = sqlite3_value_bytes(argv[0])+1; + + if( argc==2 ){ + if( fts3TokenizerEnabled(context) || sqlite3_value_frombind(argv[1]) ){ + void *pOld; + int n = sqlite3_value_bytes(argv[1]); + if( zName==0 || n!=sizeof(pPtr) ){ + sqlite3_result_error(context, "argument type mismatch", -1); + return; + } + pPtr = *(void **)sqlite3_value_blob(argv[1]); + pOld = sqlite3Fts3HashInsert(pHash, (void *)zName, nName, pPtr); + if( pOld==pPtr ){ + sqlite3_result_error(context, "out of memory", -1); + } + }else{ + sqlite3_result_error(context, "fts3tokenize disabled", -1); + return; + } + }else{ + if( zName ){ + pPtr = sqlite3Fts3HashFind(pHash, zName, nName); + } + if( !pPtr ){ + char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName); + sqlite3_result_error(context, zErr, -1); + sqlite3_free(zErr); + return; + } + } + if( fts3TokenizerEnabled(context) || sqlite3_value_frombind(argv[0]) ){ + sqlite3_result_blob(context, (void *)&pPtr, sizeof(pPtr), SQLITE_TRANSIENT); + } +} + +SQLITE_PRIVATE int sqlite3Fts3IsIdChar(char c){ + static const char isFtsIdChar[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1x */ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 3x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 4x */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* 5x */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 6x */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 7x */ + }; + return (c&0x80 || isFtsIdChar[(int)(c)]); +} + +SQLITE_PRIVATE const char *sqlite3Fts3NextToken(const char *zStr, int *pn){ + const char *z1; + const char *z2 = 0; + + /* Find the start of the next token. */ + z1 = zStr; + while( z2==0 ){ + char c = *z1; + switch( c ){ + case '\0': return 0; /* No more tokens here */ + case '\'': + case '"': + case '`': { + z2 = z1; + while( *++z2 && (*z2!=c || *++z2==c) ); + break; + } + case '[': + z2 = &z1[1]; + while( *z2 && z2[0]!=']' ) z2++; + if( *z2 ) z2++; + break; + + default: + if( sqlite3Fts3IsIdChar(*z1) ){ + z2 = &z1[1]; + while( sqlite3Fts3IsIdChar(*z2) ) z2++; + }else{ + z1++; + } + } + } + + *pn = (int)(z2-z1); + return z1; +} + +SQLITE_PRIVATE int sqlite3Fts3InitTokenizer( + Fts3Hash *pHash, /* Tokenizer hash table */ + const char *zArg, /* Tokenizer name */ + sqlite3_tokenizer **ppTok, /* OUT: Tokenizer (if applicable) */ + char **pzErr /* OUT: Set to malloced error message */ +){ + int rc; + char *z = (char *)zArg; + int n = 0; + char *zCopy; + char *zEnd; /* Pointer to nul-term of zCopy */ + sqlite3_tokenizer_module *m; + + zCopy = sqlite3_mprintf("%s", zArg); + if( !zCopy ) return SQLITE_NOMEM; + zEnd = &zCopy[strlen(zCopy)]; + + z = (char *)sqlite3Fts3NextToken(zCopy, &n); + if( z==0 ){ + assert( n==0 ); + z = zCopy; + } + z[n] = '\0'; + sqlite3Fts3Dequote(z); + + m = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash,z,(int)strlen(z)+1); + if( !m ){ + sqlite3Fts3ErrMsg(pzErr, "unknown tokenizer: %s", z); + rc = SQLITE_ERROR; + }else{ + char const **aArg = 0; + int iArg = 0; + z = &z[n+1]; + while( zxCreate(iArg, aArg, ppTok); + assert( rc!=SQLITE_OK || *ppTok ); + if( rc!=SQLITE_OK ){ + sqlite3Fts3ErrMsg(pzErr, "unknown tokenizer"); + }else{ + (*ppTok)->pModule = m; + } + sqlite3_free((void *)aArg); + } + + sqlite3_free(zCopy); + return rc; +} + + +#ifdef SQLITE_TEST + +#include "tclsqlite.h" +/* #include */ + +/* +** Implementation of a special SQL scalar function for testing tokenizers +** designed to be used in concert with the Tcl testing framework. This +** function must be called with two or more arguments: +** +** SELECT (, ..., ); +** +** where is the name passed as the second argument +** to the sqlite3Fts3InitHashTable() function (e.g. 'fts3_tokenizer') +** concatenated with the string '_test' (e.g. 'fts3_tokenizer_test'). +** +** The return value is a string that may be interpreted as a Tcl +** list. For each token in the , three elements are +** added to the returned list. The first is the token position, the +** second is the token text (folded, stemmed, etc.) and the third is the +** substring of associated with the token. For example, +** using the built-in "simple" tokenizer: +** +** SELECT fts_tokenizer_test('simple', 'I don't see how'); +** +** will return the string: +** +** "{0 i I 1 dont don't 2 see see 3 how how}" +** +*/ +static void testFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + Fts3Hash *pHash; + sqlite3_tokenizer_module *p; + sqlite3_tokenizer *pTokenizer = 0; + sqlite3_tokenizer_cursor *pCsr = 0; + + const char *zErr = 0; + + const char *zName; + int nName; + const char *zInput; + int nInput; + + const char *azArg[64]; + + const char *zToken; + int nToken = 0; + int iStart = 0; + int iEnd = 0; + int iPos = 0; + int i; + + Tcl_Obj *pRet; + + if( argc<2 ){ + sqlite3_result_error(context, "insufficient arguments", -1); + return; + } + + nName = sqlite3_value_bytes(argv[0]); + zName = (const char *)sqlite3_value_text(argv[0]); + nInput = sqlite3_value_bytes(argv[argc-1]); + zInput = (const char *)sqlite3_value_text(argv[argc-1]); + + pHash = (Fts3Hash *)sqlite3_user_data(context); + p = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash, zName, nName+1); + + if( !p ){ + char *zErr2 = sqlite3_mprintf("unknown tokenizer: %s", zName); + sqlite3_result_error(context, zErr2, -1); + sqlite3_free(zErr2); + return; + } + + pRet = Tcl_NewObj(); + Tcl_IncrRefCount(pRet); + + for(i=1; ixCreate(argc-2, azArg, &pTokenizer) ){ + zErr = "error in xCreate()"; + goto finish; + } + pTokenizer->pModule = p; + if( sqlite3Fts3OpenTokenizer(pTokenizer, 0, zInput, nInput, &pCsr) ){ + zErr = "error in xOpen()"; + goto finish; + } + + while( SQLITE_OK==p->xNext(pCsr, &zToken, &nToken, &iStart, &iEnd, &iPos) ){ + Tcl_ListObjAppendElement(0, pRet, Tcl_NewIntObj(iPos)); + Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zToken, nToken)); + zToken = &zInput[iStart]; + nToken = iEnd-iStart; + Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zToken, nToken)); + } + + if( SQLITE_OK!=p->xClose(pCsr) ){ + zErr = "error in xClose()"; + goto finish; + } + if( SQLITE_OK!=p->xDestroy(pTokenizer) ){ + zErr = "error in xDestroy()"; + goto finish; + } + +finish: + if( zErr ){ + sqlite3_result_error(context, zErr, -1); + }else{ + sqlite3_result_text(context, Tcl_GetString(pRet), -1, SQLITE_TRANSIENT); + } + Tcl_DecrRefCount(pRet); +} + +static +int registerTokenizer( + sqlite3 *db, + char *zName, + const sqlite3_tokenizer_module *p +){ + int rc; + sqlite3_stmt *pStmt; + const char zSql[] = "SELECT fts3_tokenizer(?, ?)"; + + rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); + if( rc!=SQLITE_OK ){ + return rc; + } + + sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC); + sqlite3_bind_blob(pStmt, 2, &p, sizeof(p), SQLITE_STATIC); + sqlite3_step(pStmt); + + return sqlite3_finalize(pStmt); +} + + +static +int queryTokenizer( + sqlite3 *db, + char *zName, + const sqlite3_tokenizer_module **pp +){ + int rc; + sqlite3_stmt *pStmt; + const char zSql[] = "SELECT fts3_tokenizer(?)"; + + *pp = 0; + rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); + if( rc!=SQLITE_OK ){ + return rc; + } + + sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC); + if( SQLITE_ROW==sqlite3_step(pStmt) ){ + if( sqlite3_column_type(pStmt, 0)==SQLITE_BLOB + && sqlite3_column_bytes(pStmt, 0)==sizeof(*pp) + ){ + memcpy((void *)pp, sqlite3_column_blob(pStmt, 0), sizeof(*pp)); + } + } + + return sqlite3_finalize(pStmt); +} + +SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(sqlite3_tokenizer_module const**ppModule); + +/* +** Implementation of the scalar function fts3_tokenizer_internal_test(). +** This function is used for testing only, it is not included in the +** build unless SQLITE_TEST is defined. +** +** The purpose of this is to test that the fts3_tokenizer() function +** can be used as designed by the C-code in the queryTokenizer and +** registerTokenizer() functions above. These two functions are repeated +** in the README.tokenizer file as an example, so it is important to +** test them. +** +** To run the tests, evaluate the fts3_tokenizer_internal_test() scalar +** function with no arguments. An assert() will fail if a problem is +** detected. i.e.: +** +** SELECT fts3_tokenizer_internal_test(); +** +*/ +static void intTestFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int rc; + const sqlite3_tokenizer_module *p1; + const sqlite3_tokenizer_module *p2; + sqlite3 *db = (sqlite3 *)sqlite3_user_data(context); + + UNUSED_PARAMETER(argc); + UNUSED_PARAMETER(argv); + + /* Test the query function */ + sqlite3Fts3SimpleTokenizerModule(&p1); + rc = queryTokenizer(db, "simple", &p2); + assert( rc==SQLITE_OK ); + assert( p1==p2 ); + rc = queryTokenizer(db, "nosuchtokenizer", &p2); + assert( rc==SQLITE_ERROR ); + assert( p2==0 ); + assert( 0==strcmp(sqlite3_errmsg(db), "unknown tokenizer: nosuchtokenizer") ); + + /* Test the storage function */ + if( fts3TokenizerEnabled(context) ){ + rc = registerTokenizer(db, "nosuchtokenizer", p1); + assert( rc==SQLITE_OK ); + rc = queryTokenizer(db, "nosuchtokenizer", &p2); + assert( rc==SQLITE_OK ); + assert( p2==p1 ); + } + + sqlite3_result_text(context, "ok", -1, SQLITE_STATIC); +} + +#endif + +/* +** Set up SQL objects in database db used to access the contents of +** the hash table pointed to by argument pHash. The hash table must +** been initialized to use string keys, and to take a private copy +** of the key when a value is inserted. i.e. by a call similar to: +** +** sqlite3Fts3HashInit(pHash, FTS3_HASH_STRING, 1); +** +** This function adds a scalar function (see header comment above +** fts3TokenizerFunc() in this file for details) and, if ENABLE_TABLE is +** defined at compilation time, a temporary virtual table (see header +** comment above struct HashTableVtab) to the database schema. Both +** provide read/write access to the contents of *pHash. +** +** The third argument to this function, zName, is used as the name +** of both the scalar and, if created, the virtual table. +*/ +SQLITE_PRIVATE int sqlite3Fts3InitHashTable( + sqlite3 *db, + Fts3Hash *pHash, + const char *zName +){ + int rc = SQLITE_OK; + void *p = (void *)pHash; + const int any = SQLITE_UTF8|SQLITE_DIRECTONLY; + +#ifdef SQLITE_TEST + char *zTest = 0; + char *zTest2 = 0; + void *pdb = (void *)db; + zTest = sqlite3_mprintf("%s_test", zName); + zTest2 = sqlite3_mprintf("%s_internal_test", zName); + if( !zTest || !zTest2 ){ + rc = SQLITE_NOMEM; + } +#endif + + if( SQLITE_OK==rc ){ + rc = sqlite3_create_function(db, zName, 1, any, p, fts3TokenizerFunc, 0, 0); + } + if( SQLITE_OK==rc ){ + rc = sqlite3_create_function(db, zName, 2, any, p, fts3TokenizerFunc, 0, 0); + } +#ifdef SQLITE_TEST + if( SQLITE_OK==rc ){ + rc = sqlite3_create_function(db, zTest, -1, any, p, testFunc, 0, 0); + } + if( SQLITE_OK==rc ){ + rc = sqlite3_create_function(db, zTest2, 0, any, pdb, intTestFunc, 0, 0); + } +#endif + +#ifdef SQLITE_TEST + sqlite3_free(zTest); + sqlite3_free(zTest2); +#endif + + return rc; +} + +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ + +/************** End of fts3_tokenizer.c **************************************/ +/************** Begin file fts3_tokenizer1.c *********************************/ +/* +** 2006 Oct 10 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** Implementation of the "simple" full-text-search tokenizer. +*/ + +/* +** The code in this file is only compiled if: +** +** * The FTS3 module is being built as an extension +** (in which case SQLITE_CORE is not defined), or +** +** * The FTS3 module is being built into the core of +** SQLite (in which case SQLITE_ENABLE_FTS3 is defined). +*/ +/* #include "fts3Int.h" */ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +/* #include */ +/* #include */ +/* #include */ +/* #include */ + +/* #include "fts3_tokenizer.h" */ + +typedef struct simple_tokenizer { + sqlite3_tokenizer base; + char delim[128]; /* flag ASCII delimiters */ +} simple_tokenizer; + +typedef struct simple_tokenizer_cursor { + sqlite3_tokenizer_cursor base; + const char *pInput; /* input we are tokenizing */ + int nBytes; /* size of the input */ + int iOffset; /* current position in pInput */ + int iToken; /* index of next token to be returned */ + char *pToken; /* storage for current token */ + int nTokenAllocated; /* space allocated to zToken buffer */ +} simple_tokenizer_cursor; + + +static int simpleDelim(simple_tokenizer *t, unsigned char c){ + return c<0x80 && t->delim[c]; +} +static int fts3_isalnum(int x){ + return (x>='0' && x<='9') || (x>='A' && x<='Z') || (x>='a' && x<='z'); +} + +/* +** Create a new tokenizer instance. +*/ +static int simpleCreate( + int argc, const char * const *argv, + sqlite3_tokenizer **ppTokenizer +){ + simple_tokenizer *t; + + t = (simple_tokenizer *) sqlite3_malloc(sizeof(*t)); + if( t==NULL ) return SQLITE_NOMEM; + memset(t, 0, sizeof(*t)); + + /* TODO(shess) Delimiters need to remain the same from run to run, + ** else we need to reindex. One solution would be a meta-table to + ** track such information in the database, then we'd only want this + ** information on the initial create. + */ + if( argc>1 ){ + int i, n = (int)strlen(argv[1]); + for(i=0; i=0x80 ){ + sqlite3_free(t); + return SQLITE_ERROR; + } + t->delim[ch] = 1; + } + } else { + /* Mark non-alphanumeric ASCII characters as delimiters */ + int i; + for(i=1; i<0x80; i++){ + t->delim[i] = !fts3_isalnum(i) ? -1 : 0; + } + } + + *ppTokenizer = &t->base; + return SQLITE_OK; +} + +/* +** Destroy a tokenizer +*/ +static int simpleDestroy(sqlite3_tokenizer *pTokenizer){ + sqlite3_free(pTokenizer); + return SQLITE_OK; +} + +/* +** Prepare to begin tokenizing a particular string. The input +** string to be tokenized is pInput[0..nBytes-1]. A cursor +** used to incrementally tokenize this string is returned in +** *ppCursor. +*/ +static int simpleOpen( + sqlite3_tokenizer *pTokenizer, /* The tokenizer */ + const char *pInput, int nBytes, /* String to be tokenized */ + sqlite3_tokenizer_cursor **ppCursor /* OUT: Tokenization cursor */ +){ + simple_tokenizer_cursor *c; + + UNUSED_PARAMETER(pTokenizer); + + c = (simple_tokenizer_cursor *) sqlite3_malloc(sizeof(*c)); + if( c==NULL ) return SQLITE_NOMEM; + + c->pInput = pInput; + if( pInput==0 ){ + c->nBytes = 0; + }else if( nBytes<0 ){ + c->nBytes = (int)strlen(pInput); + }else{ + c->nBytes = nBytes; + } + c->iOffset = 0; /* start tokenizing at the beginning */ + c->iToken = 0; + c->pToken = NULL; /* no space allocated, yet. */ + c->nTokenAllocated = 0; + + *ppCursor = &c->base; + return SQLITE_OK; +} + +/* +** Close a tokenization cursor previously opened by a call to +** simpleOpen() above. +*/ +static int simpleClose(sqlite3_tokenizer_cursor *pCursor){ + simple_tokenizer_cursor *c = (simple_tokenizer_cursor *) pCursor; + sqlite3_free(c->pToken); + sqlite3_free(c); + return SQLITE_OK; +} + +/* +** Extract the next token from a tokenization cursor. The cursor must +** have been opened by a prior call to simpleOpen(). +*/ +static int simpleNext( + sqlite3_tokenizer_cursor *pCursor, /* Cursor returned by simpleOpen */ + const char **ppToken, /* OUT: *ppToken is the token text */ + int *pnBytes, /* OUT: Number of bytes in token */ + int *piStartOffset, /* OUT: Starting offset of token */ + int *piEndOffset, /* OUT: Ending offset of token */ + int *piPosition /* OUT: Position integer of token */ +){ + simple_tokenizer_cursor *c = (simple_tokenizer_cursor *) pCursor; + simple_tokenizer *t = (simple_tokenizer *) pCursor->pTokenizer; + unsigned char *p = (unsigned char *)c->pInput; + + while( c->iOffsetnBytes ){ + int iStartOffset; + + /* Scan past delimiter characters */ + while( c->iOffsetnBytes && simpleDelim(t, p[c->iOffset]) ){ + c->iOffset++; + } + + /* Count non-delimiter characters. */ + iStartOffset = c->iOffset; + while( c->iOffsetnBytes && !simpleDelim(t, p[c->iOffset]) ){ + c->iOffset++; + } + + if( c->iOffset>iStartOffset ){ + int i, n = c->iOffset-iStartOffset; + if( n>c->nTokenAllocated ){ + char *pNew; + c->nTokenAllocated = n+20; + pNew = sqlite3_realloc64(c->pToken, c->nTokenAllocated); + if( !pNew ) return SQLITE_NOMEM; + c->pToken = pNew; + } + for(i=0; ipToken[i] = (char)((ch>='A' && ch<='Z') ? ch-'A'+'a' : ch); + } + *ppToken = c->pToken; + *pnBytes = n; + *piStartOffset = iStartOffset; + *piEndOffset = c->iOffset; + *piPosition = c->iToken++; + + return SQLITE_OK; + } + } + return SQLITE_DONE; +} + +/* +** The set of routines that implement the simple tokenizer +*/ +static const sqlite3_tokenizer_module simpleTokenizerModule = { + 0, + simpleCreate, + simpleDestroy, + simpleOpen, + simpleClose, + simpleNext, + 0, +}; + +/* +** Allocate a new simple tokenizer. Return a pointer to the new +** tokenizer in *ppModule +*/ +SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule( + sqlite3_tokenizer_module const**ppModule +){ + *ppModule = &simpleTokenizerModule; +} + +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ + +/************** End of fts3_tokenizer1.c *************************************/ +/************** Begin file fts3_tokenize_vtab.c ******************************/ +/* +** 2013 Apr 22 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This file contains code for the "fts3tokenize" virtual table module. +** An fts3tokenize virtual table is created as follows: +** +** CREATE VIRTUAL TABLE USING fts3tokenize( +** , , ... +** ); +** +** The table created has the following schema: +** +** CREATE TABLE (input, token, start, end, position) +** +** When queried, the query must include a WHERE clause of type: +** +** input = +** +** The virtual table module tokenizes this , using the FTS3 +** tokenizer specified by the arguments to the CREATE VIRTUAL TABLE +** statement and returns one row for each token in the result. With +** fields set as follows: +** +** input: Always set to a copy of +** token: A token from the input. +** start: Byte offset of the token within the input . +** end: Byte offset of the byte immediately following the end of the +** token within the input string. +** pos: Token offset of token within input. +** +*/ +/* #include "fts3Int.h" */ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +/* #include */ +/* #include */ + +typedef struct Fts3tokTable Fts3tokTable; +typedef struct Fts3tokCursor Fts3tokCursor; + +/* +** Virtual table structure. +*/ +struct Fts3tokTable { + sqlite3_vtab base; /* Base class used by SQLite core */ + const sqlite3_tokenizer_module *pMod; + sqlite3_tokenizer *pTok; +}; + +/* +** Virtual table cursor structure. +*/ +struct Fts3tokCursor { + sqlite3_vtab_cursor base; /* Base class used by SQLite core */ + char *zInput; /* Input string */ + sqlite3_tokenizer_cursor *pCsr; /* Cursor to iterate through zInput */ + int iRowid; /* Current 'rowid' value */ + const char *zToken; /* Current 'token' value */ + int nToken; /* Size of zToken in bytes */ + int iStart; /* Current 'start' value */ + int iEnd; /* Current 'end' value */ + int iPos; /* Current 'pos' value */ +}; + +/* +** Query FTS for the tokenizer implementation named zName. +*/ +static int fts3tokQueryTokenizer( + Fts3Hash *pHash, + const char *zName, + const sqlite3_tokenizer_module **pp, + char **pzErr +){ + sqlite3_tokenizer_module *p; + int nName = (int)strlen(zName); + + p = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash, zName, nName+1); + if( !p ){ + sqlite3Fts3ErrMsg(pzErr, "unknown tokenizer: %s", zName); + return SQLITE_ERROR; + } + + *pp = p; + return SQLITE_OK; +} + +/* +** The second argument, argv[], is an array of pointers to nul-terminated +** strings. This function makes a copy of the array and strings into a +** single block of memory. It then dequotes any of the strings that appear +** to be quoted. +** +** If successful, output parameter *pazDequote is set to point at the +** array of dequoted strings and SQLITE_OK is returned. The caller is +** responsible for eventually calling sqlite3_free() to free the array +** in this case. Or, if an error occurs, an SQLite error code is returned. +** The final value of *pazDequote is undefined in this case. +*/ +static int fts3tokDequoteArray( + int argc, /* Number of elements in argv[] */ + const char * const *argv, /* Input array */ + char ***pazDequote /* Output array */ +){ + int rc = SQLITE_OK; /* Return code */ + if( argc==0 ){ + *pazDequote = 0; + }else{ + int i; + int nByte = 0; + char **azDequote; + + for(i=0; i1 ) azArg = (const char * const *)&azDequote[1]; + rc = pMod->xCreate((nDequote>1 ? nDequote-1 : 0), azArg, &pTok); + } + + if( rc==SQLITE_OK ){ + pTab = (Fts3tokTable *)sqlite3_malloc(sizeof(Fts3tokTable)); + if( pTab==0 ){ + rc = SQLITE_NOMEM; + } + } + + if( rc==SQLITE_OK ){ + memset(pTab, 0, sizeof(Fts3tokTable)); + pTab->pMod = pMod; + pTab->pTok = pTok; + *ppVtab = &pTab->base; + }else{ + if( pTok ){ + pMod->xDestroy(pTok); + } + } + + sqlite3_free(azDequote); + return rc; +} + +/* +** This function does the work for both the xDisconnect and xDestroy methods. +** These tables have no persistent representation of their own, so xDisconnect +** and xDestroy are identical operations. +*/ +static int fts3tokDisconnectMethod(sqlite3_vtab *pVtab){ + Fts3tokTable *pTab = (Fts3tokTable *)pVtab; + + pTab->pMod->xDestroy(pTab->pTok); + sqlite3_free(pTab); + return SQLITE_OK; +} + +/* +** xBestIndex - Analyze a WHERE and ORDER BY clause. +*/ +static int fts3tokBestIndexMethod( + sqlite3_vtab *pVTab, + sqlite3_index_info *pInfo +){ + int i; + UNUSED_PARAMETER(pVTab); + + for(i=0; inConstraint; i++){ + if( pInfo->aConstraint[i].usable + && pInfo->aConstraint[i].iColumn==0 + && pInfo->aConstraint[i].op==SQLITE_INDEX_CONSTRAINT_EQ + ){ + pInfo->idxNum = 1; + pInfo->aConstraintUsage[i].argvIndex = 1; + pInfo->aConstraintUsage[i].omit = 1; + pInfo->estimatedCost = 1; + return SQLITE_OK; + } + } + + pInfo->idxNum = 0; + assert( pInfo->estimatedCost>1000000.0 ); + + return SQLITE_OK; +} + +/* +** xOpen - Open a cursor. +*/ +static int fts3tokOpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){ + Fts3tokCursor *pCsr; + UNUSED_PARAMETER(pVTab); + + pCsr = (Fts3tokCursor *)sqlite3_malloc(sizeof(Fts3tokCursor)); + if( pCsr==0 ){ + return SQLITE_NOMEM; + } + memset(pCsr, 0, sizeof(Fts3tokCursor)); + + *ppCsr = (sqlite3_vtab_cursor *)pCsr; + return SQLITE_OK; +} + +/* +** Reset the tokenizer cursor passed as the only argument. As if it had +** just been returned by fts3tokOpenMethod(). +*/ +static void fts3tokResetCursor(Fts3tokCursor *pCsr){ + if( pCsr->pCsr ){ + Fts3tokTable *pTab = (Fts3tokTable *)(pCsr->base.pVtab); + pTab->pMod->xClose(pCsr->pCsr); + pCsr->pCsr = 0; + } + sqlite3_free(pCsr->zInput); + pCsr->zInput = 0; + pCsr->zToken = 0; + pCsr->nToken = 0; + pCsr->iStart = 0; + pCsr->iEnd = 0; + pCsr->iPos = 0; + pCsr->iRowid = 0; +} + +/* +** xClose - Close a cursor. +*/ +static int fts3tokCloseMethod(sqlite3_vtab_cursor *pCursor){ + Fts3tokCursor *pCsr = (Fts3tokCursor *)pCursor; + + fts3tokResetCursor(pCsr); + sqlite3_free(pCsr); + return SQLITE_OK; +} + +/* +** xNext - Advance the cursor to the next row, if any. +*/ +static int fts3tokNextMethod(sqlite3_vtab_cursor *pCursor){ + Fts3tokCursor *pCsr = (Fts3tokCursor *)pCursor; + Fts3tokTable *pTab = (Fts3tokTable *)(pCursor->pVtab); + int rc; /* Return code */ + + pCsr->iRowid++; + rc = pTab->pMod->xNext(pCsr->pCsr, + &pCsr->zToken, &pCsr->nToken, + &pCsr->iStart, &pCsr->iEnd, &pCsr->iPos + ); + + if( rc!=SQLITE_OK ){ + fts3tokResetCursor(pCsr); + if( rc==SQLITE_DONE ) rc = SQLITE_OK; + } + + return rc; +} + +/* +** xFilter - Initialize a cursor to point at the start of its data. +*/ +static int fts3tokFilterMethod( + sqlite3_vtab_cursor *pCursor, /* The cursor used for this query */ + int idxNum, /* Strategy index */ + const char *idxStr, /* Unused */ + int nVal, /* Number of elements in apVal */ + sqlite3_value **apVal /* Arguments for the indexing scheme */ +){ + int rc = SQLITE_ERROR; + Fts3tokCursor *pCsr = (Fts3tokCursor *)pCursor; + Fts3tokTable *pTab = (Fts3tokTable *)(pCursor->pVtab); + UNUSED_PARAMETER(idxStr); + UNUSED_PARAMETER(nVal); + + fts3tokResetCursor(pCsr); + if( idxNum==1 ){ + const char *zByte = (const char *)sqlite3_value_text(apVal[0]); + sqlite3_int64 nByte = sqlite3_value_bytes(apVal[0]); + pCsr->zInput = sqlite3_malloc64(nByte+1); + if( pCsr->zInput==0 ){ + rc = SQLITE_NOMEM; + }else{ + if( nByte>0 ) memcpy(pCsr->zInput, zByte, nByte); + pCsr->zInput[nByte] = 0; + rc = pTab->pMod->xOpen(pTab->pTok, pCsr->zInput, nByte, &pCsr->pCsr); + if( rc==SQLITE_OK ){ + pCsr->pCsr->pTokenizer = pTab->pTok; + } + } + } + + if( rc!=SQLITE_OK ) return rc; + return fts3tokNextMethod(pCursor); +} + +/* +** xEof - Return true if the cursor is at EOF, or false otherwise. +*/ +static int fts3tokEofMethod(sqlite3_vtab_cursor *pCursor){ + Fts3tokCursor *pCsr = (Fts3tokCursor *)pCursor; + return (pCsr->zToken==0); +} + +/* +** xColumn - Return a column value. +*/ +static int fts3tokColumnMethod( + sqlite3_vtab_cursor *pCursor, /* Cursor to retrieve value from */ + sqlite3_context *pCtx, /* Context for sqlite3_result_xxx() calls */ + int iCol /* Index of column to read value from */ +){ + Fts3tokCursor *pCsr = (Fts3tokCursor *)pCursor; + + /* CREATE TABLE x(input, token, start, end, position) */ + switch( iCol ){ + case 0: + sqlite3_result_text(pCtx, pCsr->zInput, -1, SQLITE_TRANSIENT); + break; + case 1: + sqlite3_result_text(pCtx, pCsr->zToken, pCsr->nToken, SQLITE_TRANSIENT); + break; + case 2: + sqlite3_result_int(pCtx, pCsr->iStart); + break; + case 3: + sqlite3_result_int(pCtx, pCsr->iEnd); + break; + default: + assert( iCol==4 ); + sqlite3_result_int(pCtx, pCsr->iPos); + break; + } + return SQLITE_OK; +} + +/* +** xRowid - Return the current rowid for the cursor. +*/ +static int fts3tokRowidMethod( + sqlite3_vtab_cursor *pCursor, /* Cursor to retrieve value from */ + sqlite_int64 *pRowid /* OUT: Rowid value */ +){ + Fts3tokCursor *pCsr = (Fts3tokCursor *)pCursor; + *pRowid = (sqlite3_int64)pCsr->iRowid; + return SQLITE_OK; +} + +/* +** Register the fts3tok module with database connection db. Return SQLITE_OK +** if successful or an error code if sqlite3_create_module() fails. +*/ +SQLITE_PRIVATE int sqlite3Fts3InitTok(sqlite3 *db, Fts3Hash *pHash, void(*xDestroy)(void*)){ + static const sqlite3_module fts3tok_module = { + 0, /* iVersion */ + fts3tokConnectMethod, /* xCreate */ + fts3tokConnectMethod, /* xConnect */ + fts3tokBestIndexMethod, /* xBestIndex */ + fts3tokDisconnectMethod, /* xDisconnect */ + fts3tokDisconnectMethod, /* xDestroy */ + fts3tokOpenMethod, /* xOpen */ + fts3tokCloseMethod, /* xClose */ + fts3tokFilterMethod, /* xFilter */ + fts3tokNextMethod, /* xNext */ + fts3tokEofMethod, /* xEof */ + fts3tokColumnMethod, /* xColumn */ + fts3tokRowidMethod, /* xRowid */ + 0, /* xUpdate */ + 0, /* xBegin */ + 0, /* xSync */ + 0, /* xCommit */ + 0, /* xRollback */ + 0, /* xFindFunction */ + 0, /* xRename */ + 0, /* xSavepoint */ + 0, /* xRelease */ + 0, /* xRollbackTo */ + 0, /* xShadowName */ + 0 /* xIntegrity */ + }; + int rc; /* Return code */ + + rc = sqlite3_create_module_v2( + db, "fts3tokenize", &fts3tok_module, (void*)pHash, xDestroy + ); + return rc; +} + +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ + +/************** End of fts3_tokenize_vtab.c **********************************/ +/************** Begin file fts3_write.c **************************************/ +/* +** 2009 Oct 23 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This file is part of the SQLite FTS3 extension module. Specifically, +** this file contains code to insert, update and delete rows from FTS3 +** tables. It also contains code to merge FTS3 b-tree segments. Some +** of the sub-routines used to merge segments are also used by the query +** code in fts3.c. +*/ + +/* #include "fts3Int.h" */ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +/* #include */ +/* #include */ +/* #include */ +/* #include */ + +#define FTS_MAX_APPENDABLE_HEIGHT 16 + +/* +** When full-text index nodes are loaded from disk, the buffer that they +** are loaded into has the following number of bytes of padding at the end +** of it. i.e. if a full-text index node is 900 bytes in size, then a buffer +** of 920 bytes is allocated for it. +** +** This means that if we have a pointer into a buffer containing node data, +** it is always safe to read up to two varints from it without risking an +** overread, even if the node data is corrupted. +*/ +#define FTS3_NODE_PADDING (FTS3_VARINT_MAX*2) + +/* +** Under certain circumstances, b-tree nodes (doclists) can be loaded into +** memory incrementally instead of all at once. This can be a big performance +** win (reduced IO and CPU) if SQLite stops calling the virtual table xNext() +** method before retrieving all query results (as may happen, for example, +** if a query has a LIMIT clause). +** +** Incremental loading is used for b-tree nodes FTS3_NODE_CHUNK_THRESHOLD +** bytes and larger. Nodes are loaded in chunks of FTS3_NODE_CHUNKSIZE bytes. +** The code is written so that the hard lower-limit for each of these values +** is 1. Clearly such small values would be inefficient, but can be useful +** for testing purposes. +** +** If this module is built with SQLITE_TEST defined, these constants may +** be overridden at runtime for testing purposes. File fts3_test.c contains +** a Tcl interface to read and write the values. +*/ +#ifdef SQLITE_TEST +int test_fts3_node_chunksize = (4*1024); +int test_fts3_node_chunk_threshold = (4*1024)*4; +# define FTS3_NODE_CHUNKSIZE test_fts3_node_chunksize +# define FTS3_NODE_CHUNK_THRESHOLD test_fts3_node_chunk_threshold +#else +# define FTS3_NODE_CHUNKSIZE (4*1024) +# define FTS3_NODE_CHUNK_THRESHOLD (FTS3_NODE_CHUNKSIZE*4) +#endif + +/* +** The values that may be meaningfully bound to the :1 parameter in +** statements SQL_REPLACE_STAT and SQL_SELECT_STAT. +*/ +#define FTS_STAT_DOCTOTAL 0 +#define FTS_STAT_INCRMERGEHINT 1 +#define FTS_STAT_AUTOINCRMERGE 2 + +/* +** If FTS_LOG_MERGES is defined, call sqlite3_log() to report each automatic +** and incremental merge operation that takes place. This is used for +** debugging FTS only, it should not usually be turned on in production +** systems. +*/ +#ifdef FTS3_LOG_MERGES +static void fts3LogMerge(int nMerge, sqlite3_int64 iAbsLevel){ + sqlite3_log(SQLITE_OK, "%d-way merge from level %d", nMerge, (int)iAbsLevel); +} +#else +#define fts3LogMerge(x, y) +#endif + + +typedef struct PendingList PendingList; +typedef struct SegmentNode SegmentNode; +typedef struct SegmentWriter SegmentWriter; + +/* +** An instance of the following data structure is used to build doclists +** incrementally. See function fts3PendingListAppend() for details. +*/ +struct PendingList { + int nData; + char *aData; + int nSpace; + sqlite3_int64 iLastDocid; + sqlite3_int64 iLastCol; + sqlite3_int64 iLastPos; +}; + + +/* +** Each cursor has a (possibly empty) linked list of the following objects. +*/ +struct Fts3DeferredToken { + Fts3PhraseToken *pToken; /* Pointer to corresponding expr token */ + int iCol; /* Column token must occur in */ + Fts3DeferredToken *pNext; /* Next in list of deferred tokens */ + PendingList *pList; /* Doclist is assembled here */ +}; + +/* +** An instance of this structure is used to iterate through the terms on +** a contiguous set of segment b-tree leaf nodes. Although the details of +** this structure are only manipulated by code in this file, opaque handles +** of type Fts3SegReader* are also used by code in fts3.c to iterate through +** terms when querying the full-text index. See functions: +** +** sqlite3Fts3SegReaderNew() +** sqlite3Fts3SegReaderFree() +** sqlite3Fts3SegReaderIterate() +** +** Methods used to manipulate Fts3SegReader structures: +** +** fts3SegReaderNext() +** fts3SegReaderFirstDocid() +** fts3SegReaderNextDocid() +*/ +struct Fts3SegReader { + int iIdx; /* Index within level, or 0x7FFFFFFF for PT */ + u8 bLookup; /* True for a lookup only */ + u8 rootOnly; /* True for a root-only reader */ + + sqlite3_int64 iStartBlock; /* Rowid of first leaf block to traverse */ + sqlite3_int64 iLeafEndBlock; /* Rowid of final leaf block to traverse */ + sqlite3_int64 iEndBlock; /* Rowid of final block in segment (or 0) */ + sqlite3_int64 iCurrentBlock; /* Current leaf block (or 0) */ + + char *aNode; /* Pointer to node data (or NULL) */ + int nNode; /* Size of buffer at aNode (or 0) */ + int nPopulate; /* If >0, bytes of buffer aNode[] loaded */ + sqlite3_blob *pBlob; /* If not NULL, blob handle to read node */ + + Fts3HashElem **ppNextElem; + + /* Variables set by fts3SegReaderNext(). These may be read directly + ** by the caller. They are valid from the time SegmentReaderNew() returns + ** until SegmentReaderNext() returns something other than SQLITE_OK + ** (i.e. SQLITE_DONE). + */ + int nTerm; /* Number of bytes in current term */ + char *zTerm; /* Pointer to current term */ + int nTermAlloc; /* Allocated size of zTerm buffer */ + char *aDoclist; /* Pointer to doclist of current entry */ + int nDoclist; /* Size of doclist in current entry */ + + /* The following variables are used by fts3SegReaderNextDocid() to iterate + ** through the current doclist (aDoclist/nDoclist). + */ + char *pOffsetList; + int nOffsetList; /* For descending pending seg-readers only */ + sqlite3_int64 iDocid; +}; + +#define fts3SegReaderIsPending(p) ((p)->ppNextElem!=0) +#define fts3SegReaderIsRootOnly(p) ((p)->rootOnly!=0) + +/* +** An instance of this structure is used to create a segment b-tree in the +** database. The internal details of this type are only accessed by the +** following functions: +** +** fts3SegWriterAdd() +** fts3SegWriterFlush() +** fts3SegWriterFree() +*/ +struct SegmentWriter { + SegmentNode *pTree; /* Pointer to interior tree structure */ + sqlite3_int64 iFirst; /* First slot in %_segments written */ + sqlite3_int64 iFree; /* Next free slot in %_segments */ + char *zTerm; /* Pointer to previous term buffer */ + int nTerm; /* Number of bytes in zTerm */ + int nMalloc; /* Size of malloc'd buffer at zMalloc */ + char *zMalloc; /* Malloc'd space (possibly) used for zTerm */ + int nSize; /* Size of allocation at aData */ + int nData; /* Bytes of data in aData */ + char *aData; /* Pointer to block from malloc() */ + i64 nLeafData; /* Number of bytes of leaf data written */ +}; + +/* +** Type SegmentNode is used by the following three functions to create +** the interior part of the segment b+-tree structures (everything except +** the leaf nodes). These functions and type are only ever used by code +** within the fts3SegWriterXXX() family of functions described above. +** +** fts3NodeAddTerm() +** fts3NodeWrite() +** fts3NodeFree() +** +** When a b+tree is written to the database (either as a result of a merge +** or the pending-terms table being flushed), leaves are written into the +** database file as soon as they are completely populated. The interior of +** the tree is assembled in memory and written out only once all leaves have +** been populated and stored. This is Ok, as the b+-tree fanout is usually +** very large, meaning that the interior of the tree consumes relatively +** little memory. +*/ +struct SegmentNode { + SegmentNode *pParent; /* Parent node (or NULL for root node) */ + SegmentNode *pRight; /* Pointer to right-sibling */ + SegmentNode *pLeftmost; /* Pointer to left-most node of this depth */ + int nEntry; /* Number of terms written to node so far */ + char *zTerm; /* Pointer to previous term buffer */ + int nTerm; /* Number of bytes in zTerm */ + int nMalloc; /* Size of malloc'd buffer at zMalloc */ + char *zMalloc; /* Malloc'd space (possibly) used for zTerm */ + int nData; /* Bytes of valid data so far */ + char *aData; /* Node data */ +}; + +/* +** Valid values for the second argument to fts3SqlStmt(). +*/ +#define SQL_DELETE_CONTENT 0 +#define SQL_IS_EMPTY 1 +#define SQL_DELETE_ALL_CONTENT 2 +#define SQL_DELETE_ALL_SEGMENTS 3 +#define SQL_DELETE_ALL_SEGDIR 4 +#define SQL_DELETE_ALL_DOCSIZE 5 +#define SQL_DELETE_ALL_STAT 6 +#define SQL_SELECT_CONTENT_BY_ROWID 7 +#define SQL_NEXT_SEGMENT_INDEX 8 +#define SQL_INSERT_SEGMENTS 9 +#define SQL_NEXT_SEGMENTS_ID 10 +#define SQL_INSERT_SEGDIR 11 +#define SQL_SELECT_LEVEL 12 +#define SQL_SELECT_LEVEL_RANGE 13 +#define SQL_SELECT_LEVEL_COUNT 14 +#define SQL_SELECT_SEGDIR_MAX_LEVEL 15 +#define SQL_DELETE_SEGDIR_LEVEL 16 +#define SQL_DELETE_SEGMENTS_RANGE 17 +#define SQL_CONTENT_INSERT 18 +#define SQL_DELETE_DOCSIZE 19 +#define SQL_REPLACE_DOCSIZE 20 +#define SQL_SELECT_DOCSIZE 21 +#define SQL_SELECT_STAT 22 +#define SQL_REPLACE_STAT 23 + +#define SQL_SELECT_ALL_PREFIX_LEVEL 24 +#define SQL_DELETE_ALL_TERMS_SEGDIR 25 +#define SQL_DELETE_SEGDIR_RANGE 26 +#define SQL_SELECT_ALL_LANGID 27 +#define SQL_FIND_MERGE_LEVEL 28 +#define SQL_MAX_LEAF_NODE_ESTIMATE 29 +#define SQL_DELETE_SEGDIR_ENTRY 30 +#define SQL_SHIFT_SEGDIR_ENTRY 31 +#define SQL_SELECT_SEGDIR 32 +#define SQL_CHOMP_SEGDIR 33 +#define SQL_SEGMENT_IS_APPENDABLE 34 +#define SQL_SELECT_INDEXES 35 +#define SQL_SELECT_MXLEVEL 36 + +#define SQL_SELECT_LEVEL_RANGE2 37 +#define SQL_UPDATE_LEVEL_IDX 38 +#define SQL_UPDATE_LEVEL 39 + +/* +** This function is used to obtain an SQLite prepared statement handle +** for the statement identified by the second argument. If successful, +** *pp is set to the requested statement handle and SQLITE_OK returned. +** Otherwise, an SQLite error code is returned and *pp is set to 0. +** +** If argument apVal is not NULL, then it must point to an array with +** at least as many entries as the requested statement has bound +** parameters. The values are bound to the statements parameters before +** returning. +*/ +static int fts3SqlStmt( + Fts3Table *p, /* Virtual table handle */ + int eStmt, /* One of the SQL_XXX constants above */ + sqlite3_stmt **pp, /* OUT: Statement handle */ + sqlite3_value **apVal /* Values to bind to statement */ +){ + const char *azSql[] = { +/* 0 */ "DELETE FROM %Q.'%q_content' WHERE rowid = ?", +/* 1 */ "SELECT NOT EXISTS(SELECT docid FROM %Q.'%q_content' WHERE rowid!=?)", +/* 2 */ "DELETE FROM %Q.'%q_content'", +/* 3 */ "DELETE FROM %Q.'%q_segments'", +/* 4 */ "DELETE FROM %Q.'%q_segdir'", +/* 5 */ "DELETE FROM %Q.'%q_docsize'", +/* 6 */ "DELETE FROM %Q.'%q_stat'", +/* 7 */ "SELECT %s WHERE rowid=?", +/* 8 */ "SELECT (SELECT max(idx) FROM %Q.'%q_segdir' WHERE level = ?) + 1", +/* 9 */ "REPLACE INTO %Q.'%q_segments'(blockid, block) VALUES(?, ?)", +/* 10 */ "SELECT coalesce((SELECT max(blockid) FROM %Q.'%q_segments') + 1, 1)", +/* 11 */ "REPLACE INTO %Q.'%q_segdir' VALUES(?,?,?,?,?,?)", + + /* Return segments in order from oldest to newest.*/ +/* 12 */ "SELECT idx, start_block, leaves_end_block, end_block, root " + "FROM %Q.'%q_segdir' WHERE level = ? ORDER BY idx ASC", +/* 13 */ "SELECT idx, start_block, leaves_end_block, end_block, root " + "FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?" + "ORDER BY level DESC, idx ASC", + +/* 14 */ "SELECT count(*) FROM %Q.'%q_segdir' WHERE level = ?", +/* 15 */ "SELECT max(level) FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?", + +/* 16 */ "DELETE FROM %Q.'%q_segdir' WHERE level = ?", +/* 17 */ "DELETE FROM %Q.'%q_segments' WHERE blockid BETWEEN ? AND ?", +/* 18 */ "INSERT INTO %Q.'%q_content' VALUES(%s)", +/* 19 */ "DELETE FROM %Q.'%q_docsize' WHERE docid = ?", +/* 20 */ "REPLACE INTO %Q.'%q_docsize' VALUES(?,?)", +/* 21 */ "SELECT size FROM %Q.'%q_docsize' WHERE docid=?", +/* 22 */ "SELECT value FROM %Q.'%q_stat' WHERE id=?", +/* 23 */ "REPLACE INTO %Q.'%q_stat' VALUES(?,?)", +/* 24 */ "", +/* 25 */ "", + +/* 26 */ "DELETE FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?", +/* 27 */ "SELECT ? UNION SELECT level / (1024 * ?) FROM %Q.'%q_segdir'", + +/* This statement is used to determine which level to read the input from +** when performing an incremental merge. It returns the absolute level number +** of the oldest level in the db that contains at least ? segments. Or, +** if no level in the FTS index contains more than ? segments, the statement +** returns zero rows. */ +/* 28 */ "SELECT level, count(*) AS cnt FROM %Q.'%q_segdir' " + " GROUP BY level HAVING cnt>=?" + " ORDER BY (level %% 1024) ASC, 2 DESC LIMIT 1", + +/* Estimate the upper limit on the number of leaf nodes in a new segment +** created by merging the oldest :2 segments from absolute level :1. See +** function sqlite3Fts3Incrmerge() for details. */ +/* 29 */ "SELECT 2 * total(1 + leaves_end_block - start_block) " + " FROM (SELECT * FROM %Q.'%q_segdir' " + " WHERE level = ? ORDER BY idx ASC LIMIT ?" + " )", + +/* SQL_DELETE_SEGDIR_ENTRY +** Delete the %_segdir entry on absolute level :1 with index :2. */ +/* 30 */ "DELETE FROM %Q.'%q_segdir' WHERE level = ? AND idx = ?", + +/* SQL_SHIFT_SEGDIR_ENTRY +** Modify the idx value for the segment with idx=:3 on absolute level :2 +** to :1. */ +/* 31 */ "UPDATE %Q.'%q_segdir' SET idx = ? WHERE level=? AND idx=?", + +/* SQL_SELECT_SEGDIR +** Read a single entry from the %_segdir table. The entry from absolute +** level :1 with index value :2. */ +/* 32 */ "SELECT idx, start_block, leaves_end_block, end_block, root " + "FROM %Q.'%q_segdir' WHERE level = ? AND idx = ?", + +/* SQL_CHOMP_SEGDIR +** Update the start_block (:1) and root (:2) fields of the %_segdir +** entry located on absolute level :3 with index :4. */ +/* 33 */ "UPDATE %Q.'%q_segdir' SET start_block = ?, root = ?" + "WHERE level = ? AND idx = ?", + +/* SQL_SEGMENT_IS_APPENDABLE +** Return a single row if the segment with end_block=? is appendable. Or +** no rows otherwise. */ +/* 34 */ "SELECT 1 FROM %Q.'%q_segments' WHERE blockid=? AND block IS NULL", + +/* SQL_SELECT_INDEXES +** Return the list of valid segment indexes for absolute level ? */ +/* 35 */ "SELECT idx FROM %Q.'%q_segdir' WHERE level=? ORDER BY 1 ASC", + +/* SQL_SELECT_MXLEVEL +** Return the largest relative level in the FTS index or indexes. */ +/* 36 */ "SELECT max( level %% 1024 ) FROM %Q.'%q_segdir'", + + /* Return segments in order from oldest to newest.*/ +/* 37 */ "SELECT level, idx, end_block " + "FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ? " + "ORDER BY level DESC, idx ASC", + + /* Update statements used while promoting segments */ +/* 38 */ "UPDATE OR FAIL %Q.'%q_segdir' SET level=-1,idx=? " + "WHERE level=? AND idx=?", +/* 39 */ "UPDATE OR FAIL %Q.'%q_segdir' SET level=? WHERE level=-1" + + }; + int rc = SQLITE_OK; + sqlite3_stmt *pStmt; + + assert( SizeofArray(azSql)==SizeofArray(p->aStmt) ); + assert( eStmt=0 ); + + pStmt = p->aStmt[eStmt]; + if( !pStmt ){ + int f = SQLITE_PREPARE_PERSISTENT|SQLITE_PREPARE_NO_VTAB; + char *zSql; + if( eStmt==SQL_CONTENT_INSERT ){ + zSql = sqlite3_mprintf(azSql[eStmt], p->zDb, p->zName, p->zWriteExprlist); + }else if( eStmt==SQL_SELECT_CONTENT_BY_ROWID ){ + f &= ~SQLITE_PREPARE_NO_VTAB; + zSql = sqlite3_mprintf(azSql[eStmt], p->zReadExprlist); + }else{ + zSql = sqlite3_mprintf(azSql[eStmt], p->zDb, p->zName); + } + if( !zSql ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_prepare_v3(p->db, zSql, -1, f, &pStmt, NULL); + sqlite3_free(zSql); + assert( rc==SQLITE_OK || pStmt==0 ); + p->aStmt[eStmt] = pStmt; + } + } + if( apVal ){ + int i; + int nParam = sqlite3_bind_parameter_count(pStmt); + for(i=0; rc==SQLITE_OK && inPendingData==0 ){ + sqlite3_stmt *pStmt; + rc = fts3SqlStmt(p, SQL_DELETE_SEGDIR_LEVEL, &pStmt, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_null(pStmt, 1); + sqlite3_step(pStmt); + rc = sqlite3_reset(pStmt); + } + } + + return rc; +} + +/* +** FTS maintains a separate indexes for each language-id (a 32-bit integer). +** Within each language id, a separate index is maintained to store the +** document terms, and each configured prefix size (configured the FTS +** "prefix=" option). And each index consists of multiple levels ("relative +** levels"). +** +** All three of these values (the language id, the specific index and the +** level within the index) are encoded in 64-bit integer values stored +** in the %_segdir table on disk. This function is used to convert three +** separate component values into the single 64-bit integer value that +** can be used to query the %_segdir table. +** +** Specifically, each language-id/index combination is allocated 1024 +** 64-bit integer level values ("absolute levels"). The main terms index +** for language-id 0 is allocate values 0-1023. The first prefix index +** (if any) for language-id 0 is allocated values 1024-2047. And so on. +** Language 1 indexes are allocated immediately following language 0. +** +** So, for a system with nPrefix prefix indexes configured, the block of +** absolute levels that corresponds to language-id iLangid and index +** iIndex starts at absolute level ((iLangid * (nPrefix+1) + iIndex) * 1024). +*/ +static sqlite3_int64 getAbsoluteLevel( + Fts3Table *p, /* FTS3 table handle */ + int iLangid, /* Language id */ + int iIndex, /* Index in p->aIndex[] */ + int iLevel /* Level of segments */ +){ + sqlite3_int64 iBase; /* First absolute level for iLangid/iIndex */ + assert_fts3_nc( iLangid>=0 ); + assert( p->nIndex>0 ); + assert( iIndex>=0 && iIndexnIndex ); + + iBase = ((sqlite3_int64)iLangid * p->nIndex + iIndex) * FTS3_SEGDIR_MAXLEVEL; + return iBase + iLevel; +} + +/* +** Set *ppStmt to a statement handle that may be used to iterate through +** all rows in the %_segdir table, from oldest to newest. If successful, +** return SQLITE_OK. If an error occurs while preparing the statement, +** return an SQLite error code. +** +** There is only ever one instance of this SQL statement compiled for +** each FTS3 table. +** +** The statement returns the following columns from the %_segdir table: +** +** 0: idx +** 1: start_block +** 2: leaves_end_block +** 3: end_block +** 4: root +*/ +SQLITE_PRIVATE int sqlite3Fts3AllSegdirs( + Fts3Table *p, /* FTS3 table */ + int iLangid, /* Language being queried */ + int iIndex, /* Index for p->aIndex[] */ + int iLevel, /* Level to select (relative level) */ + sqlite3_stmt **ppStmt /* OUT: Compiled statement */ +){ + int rc; + sqlite3_stmt *pStmt = 0; + + assert( iLevel==FTS3_SEGCURSOR_ALL || iLevel>=0 ); + assert( iLevel=0 && iIndexnIndex ); + + if( iLevel<0 ){ + /* "SELECT * FROM %_segdir WHERE level BETWEEN ? AND ? ORDER BY ..." */ + rc = fts3SqlStmt(p, SQL_SELECT_LEVEL_RANGE, &pStmt, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pStmt, 1, getAbsoluteLevel(p, iLangid, iIndex, 0)); + sqlite3_bind_int64(pStmt, 2, + getAbsoluteLevel(p, iLangid, iIndex, FTS3_SEGDIR_MAXLEVEL-1) + ); + } + }else{ + /* "SELECT * FROM %_segdir WHERE level = ? ORDER BY ..." */ + rc = fts3SqlStmt(p, SQL_SELECT_LEVEL, &pStmt, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pStmt, 1, getAbsoluteLevel(p, iLangid, iIndex,iLevel)); + } + } + *ppStmt = pStmt; + return rc; +} + + +/* +** Append a single varint to a PendingList buffer. SQLITE_OK is returned +** if successful, or an SQLite error code otherwise. +** +** This function also serves to allocate the PendingList structure itself. +** For example, to create a new PendingList structure containing two +** varints: +** +** PendingList *p = 0; +** fts3PendingListAppendVarint(&p, 1); +** fts3PendingListAppendVarint(&p, 2); +*/ +static int fts3PendingListAppendVarint( + PendingList **pp, /* IN/OUT: Pointer to PendingList struct */ + sqlite3_int64 i /* Value to append to data */ +){ + PendingList *p = *pp; + + /* Allocate or grow the PendingList as required. */ + if( !p ){ + p = sqlite3_malloc64(sizeof(*p) + 100); + if( !p ){ + return SQLITE_NOMEM; + } + p->nSpace = 100; + p->aData = (char *)&p[1]; + p->nData = 0; + } + else if( p->nData+FTS3_VARINT_MAX+1>p->nSpace ){ + i64 nNew = p->nSpace * 2; + p = sqlite3_realloc64(p, sizeof(*p) + nNew); + if( !p ){ + sqlite3_free(*pp); + *pp = 0; + return SQLITE_NOMEM; + } + p->nSpace = (int)nNew; + p->aData = (char *)&p[1]; + } + + /* Append the new serialized varint to the end of the list. */ + p->nData += sqlite3Fts3PutVarint(&p->aData[p->nData], i); + p->aData[p->nData] = '\0'; + *pp = p; + return SQLITE_OK; +} + +/* +** Add a docid/column/position entry to a PendingList structure. Non-zero +** is returned if the structure is sqlite3_realloced as part of adding +** the entry. Otherwise, zero. +** +** If an OOM error occurs, *pRc is set to SQLITE_NOMEM before returning. +** Zero is always returned in this case. Otherwise, if no OOM error occurs, +** it is set to SQLITE_OK. +*/ +static int fts3PendingListAppend( + PendingList **pp, /* IN/OUT: PendingList structure */ + sqlite3_int64 iDocid, /* Docid for entry to add */ + sqlite3_int64 iCol, /* Column for entry to add */ + sqlite3_int64 iPos, /* Position of term for entry to add */ + int *pRc /* OUT: Return code */ +){ + PendingList *p = *pp; + int rc = SQLITE_OK; + + assert( !p || p->iLastDocid<=iDocid ); + + if( !p || p->iLastDocid!=iDocid ){ + u64 iDelta = (u64)iDocid - (u64)(p ? p->iLastDocid : 0); + if( p ){ + assert( p->nDatanSpace ); + assert( p->aData[p->nData]==0 ); + p->nData++; + } + if( SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, iDelta)) ){ + goto pendinglistappend_out; + } + p->iLastCol = -1; + p->iLastPos = 0; + p->iLastDocid = iDocid; + } + if( iCol>0 && p->iLastCol!=iCol ){ + if( SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, 1)) + || SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, iCol)) + ){ + goto pendinglistappend_out; + } + p->iLastCol = iCol; + p->iLastPos = 0; + } + if( iCol>=0 ){ + assert( iPos>p->iLastPos || (iPos==0 && p->iLastPos==0) ); + rc = fts3PendingListAppendVarint(&p, 2+iPos-p->iLastPos); + if( rc==SQLITE_OK ){ + p->iLastPos = iPos; + } + } + + pendinglistappend_out: + *pRc = rc; + if( p!=*pp ){ + *pp = p; + return 1; + } + return 0; +} + +/* +** Free a PendingList object allocated by fts3PendingListAppend(). +*/ +static void fts3PendingListDelete(PendingList *pList){ + sqlite3_free(pList); +} + +/* +** Add an entry to one of the pending-terms hash tables. +*/ +static int fts3PendingTermsAddOne( + Fts3Table *p, + int iCol, + int iPos, + Fts3Hash *pHash, /* Pending terms hash table to add entry to */ + const char *zToken, + int nToken +){ + PendingList *pList; + int rc = SQLITE_OK; + + pList = (PendingList *)fts3HashFind(pHash, zToken, nToken); + if( pList ){ + p->nPendingData -= (pList->nData + nToken + sizeof(Fts3HashElem)); + } + if( fts3PendingListAppend(&pList, p->iPrevDocid, iCol, iPos, &rc) ){ + if( pList==fts3HashInsert(pHash, zToken, nToken, pList) ){ + /* Malloc failed while inserting the new entry. This can only + ** happen if there was no previous entry for this token. + */ + assert( 0==fts3HashFind(pHash, zToken, nToken) ); + sqlite3_free(pList); + rc = SQLITE_NOMEM; + } + } + if( rc==SQLITE_OK ){ + p->nPendingData += (pList->nData + nToken + sizeof(Fts3HashElem)); + } + return rc; +} + +/* +** Tokenize the nul-terminated string zText and add all tokens to the +** pending-terms hash-table. The docid used is that currently stored in +** p->iPrevDocid, and the column is specified by argument iCol. +** +** If successful, SQLITE_OK is returned. Otherwise, an SQLite error code. +*/ +static int fts3PendingTermsAdd( + Fts3Table *p, /* Table into which text will be inserted */ + int iLangid, /* Language id to use */ + const char *zText, /* Text of document to be inserted */ + int iCol, /* Column into which text is being inserted */ + u32 *pnWord /* IN/OUT: Incr. by number tokens inserted */ +){ + int rc; + int iStart = 0; + int iEnd = 0; + int iPos = 0; + int nWord = 0; + + char const *zToken; + int nToken = 0; + + sqlite3_tokenizer *pTokenizer = p->pTokenizer; + sqlite3_tokenizer_module const *pModule = pTokenizer->pModule; + sqlite3_tokenizer_cursor *pCsr; + int (*xNext)(sqlite3_tokenizer_cursor *pCursor, + const char**,int*,int*,int*,int*); + + assert( pTokenizer && pModule ); + + /* If the user has inserted a NULL value, this function may be called with + ** zText==0. In this case, add zero token entries to the hash table and + ** return early. */ + if( zText==0 ){ + *pnWord = 0; + return SQLITE_OK; + } + + rc = sqlite3Fts3OpenTokenizer(pTokenizer, iLangid, zText, -1, &pCsr); + if( rc!=SQLITE_OK ){ + return rc; + } + + xNext = pModule->xNext; + while( SQLITE_OK==rc + && SQLITE_OK==(rc = xNext(pCsr, &zToken, &nToken, &iStart, &iEnd, &iPos)) + ){ + int i; + if( iPos>=nWord ) nWord = iPos+1; + + /* Positions cannot be negative; we use -1 as a terminator internally. + ** Tokens must have a non-zero length. + */ + if( iPos<0 || !zToken || nToken<=0 ){ + rc = SQLITE_ERROR; + break; + } + + /* Add the term to the terms index */ + rc = fts3PendingTermsAddOne( + p, iCol, iPos, &p->aIndex[0].hPending, zToken, nToken + ); + + /* Add the term to each of the prefix indexes that it is not too + ** short for. */ + for(i=1; rc==SQLITE_OK && inIndex; i++){ + struct Fts3Index *pIndex = &p->aIndex[i]; + if( nTokennPrefix ) continue; + rc = fts3PendingTermsAddOne( + p, iCol, iPos, &pIndex->hPending, zToken, pIndex->nPrefix + ); + } + } + + pModule->xClose(pCsr); + *pnWord += nWord; + return (rc==SQLITE_DONE ? SQLITE_OK : rc); +} + +/* +** Calling this function indicates that subsequent calls to +** fts3PendingTermsAdd() are to add term/position-list pairs for the +** contents of the document with docid iDocid. +*/ +static int fts3PendingTermsDocid( + Fts3Table *p, /* Full-text table handle */ + int bDelete, /* True if this op is a delete */ + int iLangid, /* Language id of row being written */ + sqlite_int64 iDocid /* Docid of row being written */ +){ + assert( iLangid>=0 ); + assert( bDelete==1 || bDelete==0 ); + + /* TODO(shess) Explore whether partially flushing the buffer on + ** forced-flush would provide better performance. I suspect that if + ** we ordered the doclists by size and flushed the largest until the + ** buffer was half empty, that would let the less frequent terms + ** generate longer doclists. + */ + if( iDocidiPrevDocid + || (iDocid==p->iPrevDocid && p->bPrevDelete==0) + || p->iPrevLangid!=iLangid + || p->nPendingData>p->nMaxPendingData + ){ + int rc = sqlite3Fts3PendingTermsFlush(p); + if( rc!=SQLITE_OK ) return rc; + } + p->iPrevDocid = iDocid; + p->iPrevLangid = iLangid; + p->bPrevDelete = bDelete; + return SQLITE_OK; +} + +/* +** Discard the contents of the pending-terms hash tables. +*/ +SQLITE_PRIVATE void sqlite3Fts3PendingTermsClear(Fts3Table *p){ + int i; + for(i=0; inIndex; i++){ + Fts3HashElem *pElem; + Fts3Hash *pHash = &p->aIndex[i].hPending; + for(pElem=fts3HashFirst(pHash); pElem; pElem=fts3HashNext(pElem)){ + PendingList *pList = (PendingList *)fts3HashData(pElem); + fts3PendingListDelete(pList); + } + fts3HashClear(pHash); + } + p->nPendingData = 0; +} + +/* +** This function is called by the xUpdate() method as part of an INSERT +** operation. It adds entries for each term in the new record to the +** pendingTerms hash table. +** +** Argument apVal is the same as the similarly named argument passed to +** fts3InsertData(). Parameter iDocid is the docid of the new row. +*/ +static int fts3InsertTerms( + Fts3Table *p, + int iLangid, + sqlite3_value **apVal, + u32 *aSz +){ + int i; /* Iterator variable */ + for(i=2; inColumn+2; i++){ + int iCol = i-2; + if( p->abNotindexed[iCol]==0 ){ + const char *zText = (const char *)sqlite3_value_text(apVal[i]); + int rc = fts3PendingTermsAdd(p, iLangid, zText, iCol, &aSz[iCol]); + if( rc!=SQLITE_OK ){ + return rc; + } + aSz[p->nColumn] += sqlite3_value_bytes(apVal[i]); + } + } + return SQLITE_OK; +} + +/* +** This function is called by the xUpdate() method for an INSERT operation. +** The apVal parameter is passed a copy of the apVal argument passed by +** SQLite to the xUpdate() method. i.e: +** +** apVal[0] Not used for INSERT. +** apVal[1] rowid +** apVal[2] Left-most user-defined column +** ... +** apVal[p->nColumn+1] Right-most user-defined column +** apVal[p->nColumn+2] Hidden column with same name as table +** apVal[p->nColumn+3] Hidden "docid" column (alias for rowid) +** apVal[p->nColumn+4] Hidden languageid column +*/ +static int fts3InsertData( + Fts3Table *p, /* Full-text table */ + sqlite3_value **apVal, /* Array of values to insert */ + sqlite3_int64 *piDocid /* OUT: Docid for row just inserted */ +){ + int rc; /* Return code */ + sqlite3_stmt *pContentInsert; /* INSERT INTO %_content VALUES(...) */ + + if( p->zContentTbl ){ + sqlite3_value *pRowid = apVal[p->nColumn+3]; + if( sqlite3_value_type(pRowid)==SQLITE_NULL ){ + pRowid = apVal[1]; + } + if( sqlite3_value_type(pRowid)!=SQLITE_INTEGER ){ + return SQLITE_CONSTRAINT; + } + *piDocid = sqlite3_value_int64(pRowid); + return SQLITE_OK; + } + + /* Locate the statement handle used to insert data into the %_content + ** table. The SQL for this statement is: + ** + ** INSERT INTO %_content VALUES(?, ?, ?, ...) + ** + ** The statement features N '?' variables, where N is the number of user + ** defined columns in the FTS3 table, plus one for the docid field. + */ + rc = fts3SqlStmt(p, SQL_CONTENT_INSERT, &pContentInsert, &apVal[1]); + if( rc==SQLITE_OK && p->zLanguageid ){ + rc = sqlite3_bind_int( + pContentInsert, p->nColumn+2, + sqlite3_value_int(apVal[p->nColumn+4]) + ); + } + if( rc!=SQLITE_OK ) return rc; + + /* There is a quirk here. The users INSERT statement may have specified + ** a value for the "rowid" field, for the "docid" field, or for both. + ** Which is a problem, since "rowid" and "docid" are aliases for the + ** same value. For example: + ** + ** INSERT INTO fts3tbl(rowid, docid) VALUES(1, 2); + ** + ** In FTS3, this is an error. It is an error to specify non-NULL values + ** for both docid and some other rowid alias. + */ + if( SQLITE_NULL!=sqlite3_value_type(apVal[3+p->nColumn]) ){ + if( SQLITE_NULL==sqlite3_value_type(apVal[0]) + && SQLITE_NULL!=sqlite3_value_type(apVal[1]) + ){ + /* A rowid/docid conflict. */ + return SQLITE_ERROR; + } + rc = sqlite3_bind_value(pContentInsert, 1, apVal[3+p->nColumn]); + if( rc!=SQLITE_OK ) return rc; + } + + /* Execute the statement to insert the record. Set *piDocid to the + ** new docid value. + */ + sqlite3_step(pContentInsert); + rc = sqlite3_reset(pContentInsert); + + *piDocid = sqlite3_last_insert_rowid(p->db); + return rc; +} + + + +/* +** Remove all data from the FTS3 table. Clear the hash table containing +** pending terms. +*/ +static int fts3DeleteAll(Fts3Table *p, int bContent){ + int rc = SQLITE_OK; /* Return code */ + + /* Discard the contents of the pending-terms hash table. */ + sqlite3Fts3PendingTermsClear(p); + + /* Delete everything from the shadow tables. Except, leave %_content as + ** is if bContent is false. */ + assert( p->zContentTbl==0 || bContent==0 ); + if( bContent ) fts3SqlExec(&rc, p, SQL_DELETE_ALL_CONTENT, 0); + fts3SqlExec(&rc, p, SQL_DELETE_ALL_SEGMENTS, 0); + fts3SqlExec(&rc, p, SQL_DELETE_ALL_SEGDIR, 0); + if( p->bHasDocsize ){ + fts3SqlExec(&rc, p, SQL_DELETE_ALL_DOCSIZE, 0); + } + if( p->bHasStat ){ + fts3SqlExec(&rc, p, SQL_DELETE_ALL_STAT, 0); + } + return rc; +} + +/* +** +*/ +static int langidFromSelect(Fts3Table *p, sqlite3_stmt *pSelect){ + int iLangid = 0; + if( p->zLanguageid ) iLangid = sqlite3_column_int(pSelect, p->nColumn+1); + return iLangid; +} + +/* +** The first element in the apVal[] array is assumed to contain the docid +** (an integer) of a row about to be deleted. Remove all terms from the +** full-text index. +*/ +static void fts3DeleteTerms( + int *pRC, /* Result code */ + Fts3Table *p, /* The FTS table to delete from */ + sqlite3_value *pRowid, /* The docid to be deleted */ + u32 *aSz, /* Sizes of deleted document written here */ + int *pbFound /* OUT: Set to true if row really does exist */ +){ + int rc; + sqlite3_stmt *pSelect; + + assert( *pbFound==0 ); + if( *pRC ) return; + rc = fts3SqlStmt(p, SQL_SELECT_CONTENT_BY_ROWID, &pSelect, &pRowid); + if( rc==SQLITE_OK ){ + if( SQLITE_ROW==sqlite3_step(pSelect) ){ + int i; + int iLangid = langidFromSelect(p, pSelect); + i64 iDocid = sqlite3_column_int64(pSelect, 0); + rc = fts3PendingTermsDocid(p, 1, iLangid, iDocid); + for(i=1; rc==SQLITE_OK && i<=p->nColumn; i++){ + int iCol = i-1; + if( p->abNotindexed[iCol]==0 ){ + const char *zText = (const char *)sqlite3_column_text(pSelect, i); + rc = fts3PendingTermsAdd(p, iLangid, zText, -1, &aSz[iCol]); + aSz[p->nColumn] += sqlite3_column_bytes(pSelect, i); + } + } + if( rc!=SQLITE_OK ){ + sqlite3_reset(pSelect); + *pRC = rc; + return; + } + *pbFound = 1; + } + rc = sqlite3_reset(pSelect); + }else{ + sqlite3_reset(pSelect); + } + *pRC = rc; +} + +/* +** Forward declaration to account for the circular dependency between +** functions fts3SegmentMerge() and fts3AllocateSegdirIdx(). +*/ +static int fts3SegmentMerge(Fts3Table *, int, int, int); + +/* +** This function allocates a new level iLevel index in the segdir table. +** Usually, indexes are allocated within a level sequentially starting +** with 0, so the allocated index is one greater than the value returned +** by: +** +** SELECT max(idx) FROM %_segdir WHERE level = :iLevel +** +** However, if there are already FTS3_MERGE_COUNT indexes at the requested +** level, they are merged into a single level (iLevel+1) segment and the +** allocated index is 0. +** +** If successful, *piIdx is set to the allocated index slot and SQLITE_OK +** returned. Otherwise, an SQLite error code is returned. +*/ +static int fts3AllocateSegdirIdx( + Fts3Table *p, + int iLangid, /* Language id */ + int iIndex, /* Index for p->aIndex */ + int iLevel, + int *piIdx +){ + int rc; /* Return Code */ + sqlite3_stmt *pNextIdx; /* Query for next idx at level iLevel */ + int iNext = 0; /* Result of query pNextIdx */ + + assert( iLangid>=0 ); + assert( p->nIndex>=1 ); + + /* Set variable iNext to the next available segdir index at level iLevel. */ + rc = fts3SqlStmt(p, SQL_NEXT_SEGMENT_INDEX, &pNextIdx, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64( + pNextIdx, 1, getAbsoluteLevel(p, iLangid, iIndex, iLevel) + ); + if( SQLITE_ROW==sqlite3_step(pNextIdx) ){ + iNext = sqlite3_column_int(pNextIdx, 0); + } + rc = sqlite3_reset(pNextIdx); + } + + if( rc==SQLITE_OK ){ + /* If iNext is FTS3_MERGE_COUNT, indicating that level iLevel is already + ** full, merge all segments in level iLevel into a single iLevel+1 + ** segment and allocate (newly freed) index 0 at level iLevel. Otherwise, + ** if iNext is less than FTS3_MERGE_COUNT, allocate index iNext. + */ + if( iNext>=MergeCount(p) ){ + fts3LogMerge(16, getAbsoluteLevel(p, iLangid, iIndex, iLevel)); + rc = fts3SegmentMerge(p, iLangid, iIndex, iLevel); + *piIdx = 0; + }else{ + *piIdx = iNext; + } + } + + return rc; +} + +/* +** The %_segments table is declared as follows: +** +** CREATE TABLE %_segments(blockid INTEGER PRIMARY KEY, block BLOB) +** +** This function reads data from a single row of the %_segments table. The +** specific row is identified by the iBlockid parameter. If paBlob is not +** NULL, then a buffer is allocated using sqlite3_malloc() and populated +** with the contents of the blob stored in the "block" column of the +** identified table row is. Whether or not paBlob is NULL, *pnBlob is set +** to the size of the blob in bytes before returning. +** +** If an error occurs, or the table does not contain the specified row, +** an SQLite error code is returned. Otherwise, SQLITE_OK is returned. If +** paBlob is non-NULL, then it is the responsibility of the caller to +** eventually free the returned buffer. +** +** This function may leave an open sqlite3_blob* handle in the +** Fts3Table.pSegments variable. This handle is reused by subsequent calls +** to this function. The handle may be closed by calling the +** sqlite3Fts3SegmentsClose() function. Reusing a blob handle is a handy +** performance improvement, but the blob handle should always be closed +** before control is returned to the user (to prevent a lock being held +** on the database file for longer than necessary). Thus, any virtual table +** method (xFilter etc.) that may directly or indirectly call this function +** must call sqlite3Fts3SegmentsClose() before returning. +*/ +SQLITE_PRIVATE int sqlite3Fts3ReadBlock( + Fts3Table *p, /* FTS3 table handle */ + sqlite3_int64 iBlockid, /* Access the row with blockid=$iBlockid */ + char **paBlob, /* OUT: Blob data in malloc'd buffer */ + int *pnBlob, /* OUT: Size of blob data */ + int *pnLoad /* OUT: Bytes actually loaded */ +){ + int rc; /* Return code */ + + /* pnBlob must be non-NULL. paBlob may be NULL or non-NULL. */ + assert( pnBlob ); + + if( p->pSegments ){ + rc = sqlite3_blob_reopen(p->pSegments, iBlockid); + }else{ + if( 0==p->zSegmentsTbl ){ + p->zSegmentsTbl = sqlite3_mprintf("%s_segments", p->zName); + if( 0==p->zSegmentsTbl ) return SQLITE_NOMEM; + } + rc = sqlite3_blob_open( + p->db, p->zDb, p->zSegmentsTbl, "block", iBlockid, 0, &p->pSegments + ); + } + + if( rc==SQLITE_OK ){ + int nByte = sqlite3_blob_bytes(p->pSegments); + *pnBlob = nByte; + if( paBlob ){ + char *aByte = sqlite3_malloc64((i64)nByte + FTS3_NODE_PADDING); + if( !aByte ){ + rc = SQLITE_NOMEM; + }else{ + if( pnLoad && nByte>(FTS3_NODE_CHUNK_THRESHOLD) ){ + nByte = FTS3_NODE_CHUNKSIZE; + *pnLoad = nByte; + } + rc = sqlite3_blob_read(p->pSegments, aByte, nByte, 0); + memset(&aByte[nByte], 0, FTS3_NODE_PADDING); + if( rc!=SQLITE_OK ){ + sqlite3_free(aByte); + aByte = 0; + } + } + *paBlob = aByte; + } + }else if( rc==SQLITE_ERROR ){ + rc = FTS_CORRUPT_VTAB; + } + + return rc; +} + +/* +** Close the blob handle at p->pSegments, if it is open. See comments above +** the sqlite3Fts3ReadBlock() function for details. +*/ +SQLITE_PRIVATE void sqlite3Fts3SegmentsClose(Fts3Table *p){ + sqlite3_blob_close(p->pSegments); + p->pSegments = 0; +} + +static int fts3SegReaderIncrRead(Fts3SegReader *pReader){ + int nRead; /* Number of bytes to read */ + int rc; /* Return code */ + + nRead = MIN(pReader->nNode - pReader->nPopulate, FTS3_NODE_CHUNKSIZE); + rc = sqlite3_blob_read( + pReader->pBlob, + &pReader->aNode[pReader->nPopulate], + nRead, + pReader->nPopulate + ); + + if( rc==SQLITE_OK ){ + pReader->nPopulate += nRead; + memset(&pReader->aNode[pReader->nPopulate], 0, FTS3_NODE_PADDING); + if( pReader->nPopulate==pReader->nNode ){ + sqlite3_blob_close(pReader->pBlob); + pReader->pBlob = 0; + pReader->nPopulate = 0; + } + } + return rc; +} + +static int fts3SegReaderRequire(Fts3SegReader *pReader, char *pFrom, int nByte){ + int rc = SQLITE_OK; + assert( !pReader->pBlob + || (pFrom>=pReader->aNode && pFrom<&pReader->aNode[pReader->nNode]) + ); + while( pReader->pBlob && rc==SQLITE_OK + && (pFrom - pReader->aNode + nByte)>pReader->nPopulate + ){ + rc = fts3SegReaderIncrRead(pReader); + } + return rc; +} + +/* +** Set an Fts3SegReader cursor to point at EOF. +*/ +static void fts3SegReaderSetEof(Fts3SegReader *pSeg){ + if( !fts3SegReaderIsRootOnly(pSeg) ){ + sqlite3_free(pSeg->aNode); + sqlite3_blob_close(pSeg->pBlob); + pSeg->pBlob = 0; + } + pSeg->aNode = 0; +} + +/* +** Move the iterator passed as the first argument to the next term in the +** segment. If successful, SQLITE_OK is returned. If there is no next term, +** SQLITE_DONE. Otherwise, an SQLite error code. +*/ +static int fts3SegReaderNext( + Fts3Table *p, + Fts3SegReader *pReader, + int bIncr +){ + int rc; /* Return code of various sub-routines */ + char *pNext; /* Cursor variable */ + int nPrefix; /* Number of bytes in term prefix */ + int nSuffix; /* Number of bytes in term suffix */ + + if( !pReader->aDoclist ){ + pNext = pReader->aNode; + }else{ + pNext = &pReader->aDoclist[pReader->nDoclist]; + } + + if( !pNext || pNext>=&pReader->aNode[pReader->nNode] ){ + + if( fts3SegReaderIsPending(pReader) ){ + Fts3HashElem *pElem = *(pReader->ppNextElem); + sqlite3_free(pReader->aNode); + pReader->aNode = 0; + if( pElem ){ + char *aCopy; + PendingList *pList = (PendingList *)fts3HashData(pElem); + int nCopy = pList->nData+1; + + int nTerm = fts3HashKeysize(pElem); + if( (nTerm+1)>pReader->nTermAlloc ){ + sqlite3_free(pReader->zTerm); + pReader->zTerm = (char*)sqlite3_malloc64(((i64)nTerm+1)*2); + if( !pReader->zTerm ) return SQLITE_NOMEM; + pReader->nTermAlloc = (nTerm+1)*2; + } + memcpy(pReader->zTerm, fts3HashKey(pElem), nTerm); + pReader->zTerm[nTerm] = '\0'; + pReader->nTerm = nTerm; + + aCopy = (char*)sqlite3_malloc64(nCopy); + if( !aCopy ) return SQLITE_NOMEM; + memcpy(aCopy, pList->aData, nCopy); + pReader->nNode = pReader->nDoclist = nCopy; + pReader->aNode = pReader->aDoclist = aCopy; + pReader->ppNextElem++; + assert( pReader->aNode ); + } + return SQLITE_OK; + } + + fts3SegReaderSetEof(pReader); + + /* If iCurrentBlock>=iLeafEndBlock, this is an EOF condition. All leaf + ** blocks have already been traversed. */ +#ifdef CORRUPT_DB + assert( pReader->iCurrentBlock<=pReader->iLeafEndBlock || CORRUPT_DB ); +#endif + if( pReader->iCurrentBlock>=pReader->iLeafEndBlock ){ + return SQLITE_OK; + } + + rc = sqlite3Fts3ReadBlock( + p, ++pReader->iCurrentBlock, &pReader->aNode, &pReader->nNode, + (bIncr ? &pReader->nPopulate : 0) + ); + if( rc!=SQLITE_OK ) return rc; + assert( pReader->pBlob==0 ); + if( bIncr && pReader->nPopulatenNode ){ + pReader->pBlob = p->pSegments; + p->pSegments = 0; + } + pNext = pReader->aNode; + } + + assert( !fts3SegReaderIsPending(pReader) ); + + rc = fts3SegReaderRequire(pReader, pNext, FTS3_VARINT_MAX*2); + if( rc!=SQLITE_OK ) return rc; + + /* Because of the FTS3_NODE_PADDING bytes of padding, the following is + ** safe (no risk of overread) even if the node data is corrupted. */ + pNext += fts3GetVarint32(pNext, &nPrefix); + pNext += fts3GetVarint32(pNext, &nSuffix); + if( nSuffix<=0 + || (&pReader->aNode[pReader->nNode] - pNext)pReader->nTerm + ){ + return FTS_CORRUPT_VTAB; + } + + /* Both nPrefix and nSuffix were read by fts3GetVarint32() and so are + ** between 0 and 0x7FFFFFFF. But the sum of the two may cause integer + ** overflow - hence the (i64) casts. */ + if( (i64)nPrefix+nSuffix>(i64)pReader->nTermAlloc ){ + i64 nNew = ((i64)nPrefix+nSuffix)*2; + char *zNew = sqlite3_realloc64(pReader->zTerm, nNew); + if( !zNew ){ + return SQLITE_NOMEM; + } + pReader->zTerm = zNew; + pReader->nTermAlloc = nNew; + } + + rc = fts3SegReaderRequire(pReader, pNext, nSuffix+FTS3_VARINT_MAX); + if( rc!=SQLITE_OK ) return rc; + + memcpy(&pReader->zTerm[nPrefix], pNext, nSuffix); + pReader->nTerm = nPrefix+nSuffix; + pNext += nSuffix; + pNext += fts3GetVarint32(pNext, &pReader->nDoclist); + pReader->aDoclist = pNext; + pReader->pOffsetList = 0; + + /* Check that the doclist does not appear to extend past the end of the + ** b-tree node. And that the final byte of the doclist is 0x00. If either + ** of these statements is untrue, then the data structure is corrupt. + */ + if( pReader->nDoclist > pReader->nNode-(pReader->aDoclist-pReader->aNode) + || (pReader->nPopulate==0 && pReader->aDoclist[pReader->nDoclist-1]) + || pReader->nDoclist==0 + ){ + return FTS_CORRUPT_VTAB; + } + return SQLITE_OK; +} + +/* +** Set the SegReader to point to the first docid in the doclist associated +** with the current term. +*/ +static int fts3SegReaderFirstDocid(Fts3Table *pTab, Fts3SegReader *pReader){ + int rc = SQLITE_OK; + assert( pReader->aDoclist ); + assert( !pReader->pOffsetList ); + if( pTab->bDescIdx && fts3SegReaderIsPending(pReader) ){ + u8 bEof = 0; + pReader->iDocid = 0; + pReader->nOffsetList = 0; + sqlite3Fts3DoclistPrev(0, + pReader->aDoclist, pReader->nDoclist, &pReader->pOffsetList, + &pReader->iDocid, &pReader->nOffsetList, &bEof + ); + }else{ + rc = fts3SegReaderRequire(pReader, pReader->aDoclist, FTS3_VARINT_MAX); + if( rc==SQLITE_OK ){ + int n = sqlite3Fts3GetVarint(pReader->aDoclist, &pReader->iDocid); + pReader->pOffsetList = &pReader->aDoclist[n]; + } + } + return rc; +} + +/* +** Advance the SegReader to point to the next docid in the doclist +** associated with the current term. +** +** If arguments ppOffsetList and pnOffsetList are not NULL, then +** *ppOffsetList is set to point to the first column-offset list +** in the doclist entry (i.e. immediately past the docid varint). +** *pnOffsetList is set to the length of the set of column-offset +** lists, not including the nul-terminator byte. For example: +*/ +static int fts3SegReaderNextDocid( + Fts3Table *pTab, + Fts3SegReader *pReader, /* Reader to advance to next docid */ + char **ppOffsetList, /* OUT: Pointer to current position-list */ + int *pnOffsetList /* OUT: Length of *ppOffsetList in bytes */ +){ + int rc = SQLITE_OK; + char *p = pReader->pOffsetList; + char c = 0; + + assert( p ); + + if( pTab->bDescIdx && fts3SegReaderIsPending(pReader) ){ + /* A pending-terms seg-reader for an FTS4 table that uses order=desc. + ** Pending-terms doclists are always built up in ascending order, so + ** we have to iterate through them backwards here. */ + u8 bEof = 0; + if( ppOffsetList ){ + *ppOffsetList = pReader->pOffsetList; + *pnOffsetList = pReader->nOffsetList - 1; + } + sqlite3Fts3DoclistPrev(0, + pReader->aDoclist, pReader->nDoclist, &p, &pReader->iDocid, + &pReader->nOffsetList, &bEof + ); + if( bEof ){ + pReader->pOffsetList = 0; + }else{ + pReader->pOffsetList = p; + } + }else{ + char *pEnd = &pReader->aDoclist[pReader->nDoclist]; + + /* Pointer p currently points at the first byte of an offset list. The + ** following block advances it to point one byte past the end of + ** the same offset list. */ + while( 1 ){ + + /* The following line of code (and the "p++" below the while() loop) is + ** normally all that is required to move pointer p to the desired + ** position. The exception is if this node is being loaded from disk + ** incrementally and pointer "p" now points to the first byte past + ** the populated part of pReader->aNode[]. + */ + while( *p | c ) c = *p++ & 0x80; + assert( *p==0 ); + + if( pReader->pBlob==0 || p<&pReader->aNode[pReader->nPopulate] ) break; + rc = fts3SegReaderIncrRead(pReader); + if( rc!=SQLITE_OK ) return rc; + } + p++; + + /* If required, populate the output variables with a pointer to and the + ** size of the previous offset-list. + */ + if( ppOffsetList ){ + *ppOffsetList = pReader->pOffsetList; + *pnOffsetList = (int)(p - pReader->pOffsetList - 1); + } + + /* List may have been edited in place by fts3EvalNearTrim() */ + while( p=pEnd ){ + pReader->pOffsetList = 0; + }else{ + rc = fts3SegReaderRequire(pReader, p, FTS3_VARINT_MAX); + if( rc==SQLITE_OK ){ + u64 iDelta; + pReader->pOffsetList = p + sqlite3Fts3GetVarintU(p, &iDelta); + if( pTab->bDescIdx ){ + pReader->iDocid = (i64)((u64)pReader->iDocid - iDelta); + }else{ + pReader->iDocid = (i64)((u64)pReader->iDocid + iDelta); + } + } + } + } + + return rc; +} + + +SQLITE_PRIVATE int sqlite3Fts3MsrOvfl( + Fts3Cursor *pCsr, + Fts3MultiSegReader *pMsr, + int *pnOvfl +){ + Fts3Table *p = (Fts3Table*)pCsr->base.pVtab; + int nOvfl = 0; + int ii; + int rc = SQLITE_OK; + int pgsz = p->nPgsz; + + assert( p->bFts4 ); + assert( pgsz>0 ); + + for(ii=0; rc==SQLITE_OK && iinSegment; ii++){ + Fts3SegReader *pReader = pMsr->apSegment[ii]; + if( !fts3SegReaderIsPending(pReader) + && !fts3SegReaderIsRootOnly(pReader) + ){ + sqlite3_int64 jj; + for(jj=pReader->iStartBlock; jj<=pReader->iLeafEndBlock; jj++){ + int nBlob; + rc = sqlite3Fts3ReadBlock(p, jj, 0, &nBlob, 0); + if( rc!=SQLITE_OK ) break; + if( (nBlob+35)>pgsz ){ + nOvfl += (nBlob + 34)/pgsz; + } + } + } + } + *pnOvfl = nOvfl; + return rc; +} + +/* +** Free all allocations associated with the iterator passed as the +** second argument. +*/ +SQLITE_PRIVATE void sqlite3Fts3SegReaderFree(Fts3SegReader *pReader){ + if( pReader ){ + sqlite3_free(pReader->zTerm); + if( !fts3SegReaderIsRootOnly(pReader) ){ + sqlite3_free(pReader->aNode); + } + sqlite3_blob_close(pReader->pBlob); + } + sqlite3_free(pReader); +} + +/* +** Allocate a new SegReader object. +*/ +SQLITE_PRIVATE int sqlite3Fts3SegReaderNew( + int iAge, /* Segment "age". */ + int bLookup, /* True for a lookup only */ + sqlite3_int64 iStartLeaf, /* First leaf to traverse */ + sqlite3_int64 iEndLeaf, /* Final leaf to traverse */ + sqlite3_int64 iEndBlock, /* Final block of segment */ + const char *zRoot, /* Buffer containing root node */ + int nRoot, /* Size of buffer containing root node */ + Fts3SegReader **ppReader /* OUT: Allocated Fts3SegReader */ +){ + Fts3SegReader *pReader; /* Newly allocated SegReader object */ + int nExtra = 0; /* Bytes to allocate segment root node */ + + assert( zRoot!=0 || nRoot==0 ); +#ifdef CORRUPT_DB + assert( zRoot!=0 || CORRUPT_DB ); +#endif + + if( iStartLeaf==0 ){ + if( iEndLeaf!=0 ) return FTS_CORRUPT_VTAB; + nExtra = nRoot + FTS3_NODE_PADDING; + } + + pReader = (Fts3SegReader *)sqlite3_malloc64(sizeof(Fts3SegReader) + nExtra); + if( !pReader ){ + return SQLITE_NOMEM; + } + memset(pReader, 0, sizeof(Fts3SegReader)); + pReader->iIdx = iAge; + pReader->bLookup = bLookup!=0; + pReader->iStartBlock = iStartLeaf; + pReader->iLeafEndBlock = iEndLeaf; + pReader->iEndBlock = iEndBlock; + + if( nExtra ){ + /* The entire segment is stored in the root node. */ + pReader->aNode = (char *)&pReader[1]; + pReader->rootOnly = 1; + pReader->nNode = nRoot; + if( nRoot ) memcpy(pReader->aNode, zRoot, nRoot); + memset(&pReader->aNode[nRoot], 0, FTS3_NODE_PADDING); + }else{ + pReader->iCurrentBlock = iStartLeaf-1; + } + *ppReader = pReader; + return SQLITE_OK; +} + +/* +** This is a comparison function used as a qsort() callback when sorting +** an array of pending terms by term. This occurs as part of flushing +** the contents of the pending-terms hash table to the database. +*/ +static int SQLITE_CDECL fts3CompareElemByTerm( + const void *lhs, + const void *rhs +){ + char *z1 = fts3HashKey(*(Fts3HashElem **)lhs); + char *z2 = fts3HashKey(*(Fts3HashElem **)rhs); + int n1 = fts3HashKeysize(*(Fts3HashElem **)lhs); + int n2 = fts3HashKeysize(*(Fts3HashElem **)rhs); + + int n = (n1aIndex */ + const char *zTerm, /* Term to search for */ + int nTerm, /* Size of buffer zTerm */ + int bPrefix, /* True for a prefix iterator */ + Fts3SegReader **ppReader /* OUT: SegReader for pending-terms */ +){ + Fts3SegReader *pReader = 0; /* Fts3SegReader object to return */ + Fts3HashElem *pE; /* Iterator variable */ + Fts3HashElem **aElem = 0; /* Array of term hash entries to scan */ + int nElem = 0; /* Size of array at aElem */ + int rc = SQLITE_OK; /* Return Code */ + Fts3Hash *pHash; + + pHash = &p->aIndex[iIndex].hPending; + if( bPrefix ){ + int nAlloc = 0; /* Size of allocated array at aElem */ + + for(pE=fts3HashFirst(pHash); pE; pE=fts3HashNext(pE)){ + char *zKey = (char *)fts3HashKey(pE); + int nKey = fts3HashKeysize(pE); + if( nTerm==0 || (nKey>=nTerm && 0==memcmp(zKey, zTerm, nTerm)) ){ + if( nElem==nAlloc ){ + Fts3HashElem **aElem2; + nAlloc += 16; + aElem2 = (Fts3HashElem **)sqlite3_realloc64( + aElem, nAlloc*sizeof(Fts3HashElem *) + ); + if( !aElem2 ){ + rc = SQLITE_NOMEM; + nElem = 0; + break; + } + aElem = aElem2; + } + + aElem[nElem++] = pE; + } + } + + /* If more than one term matches the prefix, sort the Fts3HashElem + ** objects in term order using qsort(). This uses the same comparison + ** callback as is used when flushing terms to disk. + */ + if( nElem>1 ){ + qsort(aElem, nElem, sizeof(Fts3HashElem *), fts3CompareElemByTerm); + } + + }else{ + /* The query is a simple term lookup that matches at most one term in + ** the index. All that is required is a straight hash-lookup. + ** + ** Because the stack address of pE may be accessed via the aElem pointer + ** below, the "Fts3HashElem *pE" must be declared so that it is valid + ** within this entire function, not just this "else{...}" block. + */ + pE = fts3HashFindElem(pHash, zTerm, nTerm); + if( pE ){ + aElem = &pE; + nElem = 1; + } + } + + if( nElem>0 ){ + sqlite3_int64 nByte; + nByte = sizeof(Fts3SegReader) + (nElem+1)*sizeof(Fts3HashElem *); + pReader = (Fts3SegReader *)sqlite3_malloc64(nByte); + if( !pReader ){ + rc = SQLITE_NOMEM; + }else{ + memset(pReader, 0, nByte); + pReader->iIdx = 0x7FFFFFFF; + pReader->ppNextElem = (Fts3HashElem **)&pReader[1]; + memcpy(pReader->ppNextElem, aElem, nElem*sizeof(Fts3HashElem *)); + } + } + + if( bPrefix ){ + sqlite3_free(aElem); + } + *ppReader = pReader; + return rc; +} + +/* +** Compare the entries pointed to by two Fts3SegReader structures. +** Comparison is as follows: +** +** 1) EOF is greater than not EOF. +** +** 2) The current terms (if any) are compared using memcmp(). If one +** term is a prefix of another, the longer term is considered the +** larger. +** +** 3) By segment age. An older segment is considered larger. +*/ +static int fts3SegReaderCmp(Fts3SegReader *pLhs, Fts3SegReader *pRhs){ + int rc; + if( pLhs->aNode && pRhs->aNode ){ + int rc2 = pLhs->nTerm - pRhs->nTerm; + if( rc2<0 ){ + rc = memcmp(pLhs->zTerm, pRhs->zTerm, pLhs->nTerm); + }else{ + rc = memcmp(pLhs->zTerm, pRhs->zTerm, pRhs->nTerm); + } + if( rc==0 ){ + rc = rc2; + } + }else{ + rc = (pLhs->aNode==0) - (pRhs->aNode==0); + } + if( rc==0 ){ + rc = pRhs->iIdx - pLhs->iIdx; + } + assert_fts3_nc( rc!=0 ); + return rc; +} + +/* +** A different comparison function for SegReader structures. In this +** version, it is assumed that each SegReader points to an entry in +** a doclist for identical terms. Comparison is made as follows: +** +** 1) EOF (end of doclist in this case) is greater than not EOF. +** +** 2) By current docid. +** +** 3) By segment age. An older segment is considered larger. +*/ +static int fts3SegReaderDoclistCmp(Fts3SegReader *pLhs, Fts3SegReader *pRhs){ + int rc = (pLhs->pOffsetList==0)-(pRhs->pOffsetList==0); + if( rc==0 ){ + if( pLhs->iDocid==pRhs->iDocid ){ + rc = pRhs->iIdx - pLhs->iIdx; + }else{ + rc = (pLhs->iDocid > pRhs->iDocid) ? 1 : -1; + } + } + assert( pLhs->aNode && pRhs->aNode ); + return rc; +} +static int fts3SegReaderDoclistCmpRev(Fts3SegReader *pLhs, Fts3SegReader *pRhs){ + int rc = (pLhs->pOffsetList==0)-(pRhs->pOffsetList==0); + if( rc==0 ){ + if( pLhs->iDocid==pRhs->iDocid ){ + rc = pRhs->iIdx - pLhs->iIdx; + }else{ + rc = (pLhs->iDocid < pRhs->iDocid) ? 1 : -1; + } + } + assert( pLhs->aNode && pRhs->aNode ); + return rc; +} + +/* +** Compare the term that the Fts3SegReader object passed as the first argument +** points to with the term specified by arguments zTerm and nTerm. +** +** If the pSeg iterator is already at EOF, return 0. Otherwise, return +** -ve if the pSeg term is less than zTerm/nTerm, 0 if the two terms are +** equal, or +ve if the pSeg term is greater than zTerm/nTerm. +*/ +static int fts3SegReaderTermCmp( + Fts3SegReader *pSeg, /* Segment reader object */ + const char *zTerm, /* Term to compare to */ + int nTerm /* Size of term zTerm in bytes */ +){ + int res = 0; + if( pSeg->aNode ){ + if( pSeg->nTerm>nTerm ){ + res = memcmp(pSeg->zTerm, zTerm, nTerm); + }else{ + res = memcmp(pSeg->zTerm, zTerm, pSeg->nTerm); + } + if( res==0 ){ + res = pSeg->nTerm-nTerm; + } + } + return res; +} + +/* +** Argument apSegment is an array of nSegment elements. It is known that +** the final (nSegment-nSuspect) members are already in sorted order +** (according to the comparison function provided). This function shuffles +** the array around until all entries are in sorted order. +*/ +static void fts3SegReaderSort( + Fts3SegReader **apSegment, /* Array to sort entries of */ + int nSegment, /* Size of apSegment array */ + int nSuspect, /* Unsorted entry count */ + int (*xCmp)(Fts3SegReader *, Fts3SegReader *) /* Comparison function */ +){ + int i; /* Iterator variable */ + + assert( nSuspect<=nSegment ); + + if( nSuspect==nSegment ) nSuspect--; + for(i=nSuspect-1; i>=0; i--){ + int j; + for(j=i; j<(nSegment-1); j++){ + Fts3SegReader *pTmp; + if( xCmp(apSegment[j], apSegment[j+1])<0 ) break; + pTmp = apSegment[j+1]; + apSegment[j+1] = apSegment[j]; + apSegment[j] = pTmp; + } + } + +#ifndef NDEBUG + /* Check that the list really is sorted now. */ + for(i=0; i<(nSuspect-1); i++){ + assert( xCmp(apSegment[i], apSegment[i+1])<0 ); + } +#endif +} + +/* +** Insert a record into the %_segments table. +*/ +static int fts3WriteSegment( + Fts3Table *p, /* Virtual table handle */ + sqlite3_int64 iBlock, /* Block id for new block */ + char *z, /* Pointer to buffer containing block data */ + int n /* Size of buffer z in bytes */ +){ + sqlite3_stmt *pStmt; + int rc = fts3SqlStmt(p, SQL_INSERT_SEGMENTS, &pStmt, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pStmt, 1, iBlock); + sqlite3_bind_blob(pStmt, 2, z, n, SQLITE_STATIC); + sqlite3_step(pStmt); + rc = sqlite3_reset(pStmt); + sqlite3_bind_null(pStmt, 2); + } + return rc; +} + +/* +** Find the largest relative level number in the table. If successful, set +** *pnMax to this value and return SQLITE_OK. Otherwise, if an error occurs, +** set *pnMax to zero and return an SQLite error code. +*/ +SQLITE_PRIVATE int sqlite3Fts3MaxLevel(Fts3Table *p, int *pnMax){ + int rc; + int mxLevel = 0; + sqlite3_stmt *pStmt = 0; + + rc = fts3SqlStmt(p, SQL_SELECT_MXLEVEL, &pStmt, 0); + if( rc==SQLITE_OK ){ + if( SQLITE_ROW==sqlite3_step(pStmt) ){ + mxLevel = sqlite3_column_int(pStmt, 0); + } + rc = sqlite3_reset(pStmt); + } + *pnMax = mxLevel; + return rc; +} + +/* +** Insert a record into the %_segdir table. +*/ +static int fts3WriteSegdir( + Fts3Table *p, /* Virtual table handle */ + sqlite3_int64 iLevel, /* Value for "level" field (absolute level) */ + int iIdx, /* Value for "idx" field */ + sqlite3_int64 iStartBlock, /* Value for "start_block" field */ + sqlite3_int64 iLeafEndBlock, /* Value for "leaves_end_block" field */ + sqlite3_int64 iEndBlock, /* Value for "end_block" field */ + sqlite3_int64 nLeafData, /* Bytes of leaf data in segment */ + char *zRoot, /* Blob value for "root" field */ + int nRoot /* Number of bytes in buffer zRoot */ +){ + sqlite3_stmt *pStmt; + int rc = fts3SqlStmt(p, SQL_INSERT_SEGDIR, &pStmt, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pStmt, 1, iLevel); + sqlite3_bind_int(pStmt, 2, iIdx); + sqlite3_bind_int64(pStmt, 3, iStartBlock); + sqlite3_bind_int64(pStmt, 4, iLeafEndBlock); + if( nLeafData==0 ){ + sqlite3_bind_int64(pStmt, 5, iEndBlock); + }else{ + char *zEnd = sqlite3_mprintf("%lld %lld", iEndBlock, nLeafData); + if( !zEnd ) return SQLITE_NOMEM; + sqlite3_bind_text(pStmt, 5, zEnd, -1, sqlite3_free); + } + sqlite3_bind_blob(pStmt, 6, zRoot, nRoot, SQLITE_STATIC); + sqlite3_step(pStmt); + rc = sqlite3_reset(pStmt); + sqlite3_bind_null(pStmt, 6); + } + return rc; +} + +/* +** Return the size of the common prefix (if any) shared by zPrev and +** zNext, in bytes. For example, +** +** fts3PrefixCompress("abc", 3, "abcdef", 6) // returns 3 +** fts3PrefixCompress("abX", 3, "abcdef", 6) // returns 2 +** fts3PrefixCompress("abX", 3, "Xbcdef", 6) // returns 0 +*/ +static int fts3PrefixCompress( + const char *zPrev, /* Buffer containing previous term */ + int nPrev, /* Size of buffer zPrev in bytes */ + const char *zNext, /* Buffer containing next term */ + int nNext /* Size of buffer zNext in bytes */ +){ + int n; + for(n=0; nnData; /* Current size of node in bytes */ + int nReq = nData; /* Required space after adding zTerm */ + int nPrefix; /* Number of bytes of prefix compression */ + int nSuffix; /* Suffix length */ + + nPrefix = fts3PrefixCompress(pTree->zTerm, pTree->nTerm, zTerm, nTerm); + nSuffix = nTerm-nPrefix; + + /* If nSuffix is zero or less, then zTerm/nTerm must be a prefix of + ** pWriter->zTerm/pWriter->nTerm. i.e. must be equal to or less than when + ** compared with BINARY collation. This indicates corruption. */ + if( nSuffix<=0 ) return FTS_CORRUPT_VTAB; + + nReq += sqlite3Fts3VarintLen(nPrefix)+sqlite3Fts3VarintLen(nSuffix)+nSuffix; + if( nReq<=p->nNodeSize || !pTree->zTerm ){ + + if( nReq>p->nNodeSize ){ + /* An unusual case: this is the first term to be added to the node + ** and the static node buffer (p->nNodeSize bytes) is not large + ** enough. Use a separately malloced buffer instead This wastes + ** p->nNodeSize bytes, but since this scenario only comes about when + ** the database contain two terms that share a prefix of almost 2KB, + ** this is not expected to be a serious problem. + */ + assert( pTree->aData==(char *)&pTree[1] ); + pTree->aData = (char *)sqlite3_malloc64(nReq); + if( !pTree->aData ){ + return SQLITE_NOMEM; + } + } + + if( pTree->zTerm ){ + /* There is no prefix-length field for first term in a node */ + nData += sqlite3Fts3PutVarint(&pTree->aData[nData], nPrefix); + } + + nData += sqlite3Fts3PutVarint(&pTree->aData[nData], nSuffix); + memcpy(&pTree->aData[nData], &zTerm[nPrefix], nSuffix); + pTree->nData = nData + nSuffix; + pTree->nEntry++; + + if( isCopyTerm ){ + if( pTree->nMalloczMalloc, (i64)nTerm*2); + if( !zNew ){ + return SQLITE_NOMEM; + } + pTree->nMalloc = nTerm*2; + pTree->zMalloc = zNew; + } + pTree->zTerm = pTree->zMalloc; + memcpy(pTree->zTerm, zTerm, nTerm); + pTree->nTerm = nTerm; + }else{ + pTree->zTerm = (char *)zTerm; + pTree->nTerm = nTerm; + } + return SQLITE_OK; + } + } + + /* If control flows to here, it was not possible to append zTerm to the + ** current node. Create a new node (a right-sibling of the current node). + ** If this is the first node in the tree, the term is added to it. + ** + ** Otherwise, the term is not added to the new node, it is left empty for + ** now. Instead, the term is inserted into the parent of pTree. If pTree + ** has no parent, one is created here. + */ + pNew = (SegmentNode *)sqlite3_malloc64(sizeof(SegmentNode) + p->nNodeSize); + if( !pNew ){ + return SQLITE_NOMEM; + } + memset(pNew, 0, sizeof(SegmentNode)); + pNew->nData = 1 + FTS3_VARINT_MAX; + pNew->aData = (char *)&pNew[1]; + + if( pTree ){ + SegmentNode *pParent = pTree->pParent; + rc = fts3NodeAddTerm(p, &pParent, isCopyTerm, zTerm, nTerm); + if( pTree->pParent==0 ){ + pTree->pParent = pParent; + } + pTree->pRight = pNew; + pNew->pLeftmost = pTree->pLeftmost; + pNew->pParent = pParent; + pNew->zMalloc = pTree->zMalloc; + pNew->nMalloc = pTree->nMalloc; + pTree->zMalloc = 0; + }else{ + pNew->pLeftmost = pNew; + rc = fts3NodeAddTerm(p, &pNew, isCopyTerm, zTerm, nTerm); + } + + *ppTree = pNew; + return rc; +} + +/* +** Helper function for fts3NodeWrite(). +*/ +static int fts3TreeFinishNode( + SegmentNode *pTree, + int iHeight, + sqlite3_int64 iLeftChild +){ + int nStart; + assert( iHeight>=1 && iHeight<128 ); + nStart = FTS3_VARINT_MAX - sqlite3Fts3VarintLen(iLeftChild); + pTree->aData[nStart] = (char)iHeight; + sqlite3Fts3PutVarint(&pTree->aData[nStart+1], iLeftChild); + return nStart; +} + +/* +** Write the buffer for the segment node pTree and all of its peers to the +** database. Then call this function recursively to write the parent of +** pTree and its peers to the database. +** +** Except, if pTree is a root node, do not write it to the database. Instead, +** set output variables *paRoot and *pnRoot to contain the root node. +** +** If successful, SQLITE_OK is returned and output variable *piLast is +** set to the largest blockid written to the database (or zero if no +** blocks were written to the db). Otherwise, an SQLite error code is +** returned. +*/ +static int fts3NodeWrite( + Fts3Table *p, /* Virtual table handle */ + SegmentNode *pTree, /* SegmentNode handle */ + int iHeight, /* Height of this node in tree */ + sqlite3_int64 iLeaf, /* Block id of first leaf node */ + sqlite3_int64 iFree, /* Block id of next free slot in %_segments */ + sqlite3_int64 *piLast, /* OUT: Block id of last entry written */ + char **paRoot, /* OUT: Data for root node */ + int *pnRoot /* OUT: Size of root node in bytes */ +){ + int rc = SQLITE_OK; + + if( !pTree->pParent ){ + /* Root node of the tree. */ + int nStart = fts3TreeFinishNode(pTree, iHeight, iLeaf); + *piLast = iFree-1; + *pnRoot = pTree->nData - nStart; + *paRoot = &pTree->aData[nStart]; + }else{ + SegmentNode *pIter; + sqlite3_int64 iNextFree = iFree; + sqlite3_int64 iNextLeaf = iLeaf; + for(pIter=pTree->pLeftmost; pIter && rc==SQLITE_OK; pIter=pIter->pRight){ + int nStart = fts3TreeFinishNode(pIter, iHeight, iNextLeaf); + int nWrite = pIter->nData - nStart; + + rc = fts3WriteSegment(p, iNextFree, &pIter->aData[nStart], nWrite); + iNextFree++; + iNextLeaf += (pIter->nEntry+1); + } + if( rc==SQLITE_OK ){ + assert( iNextLeaf==iFree ); + rc = fts3NodeWrite( + p, pTree->pParent, iHeight+1, iFree, iNextFree, piLast, paRoot, pnRoot + ); + } + } + + return rc; +} + +/* +** Free all memory allocations associated with the tree pTree. +*/ +static void fts3NodeFree(SegmentNode *pTree){ + if( pTree ){ + SegmentNode *p = pTree->pLeftmost; + fts3NodeFree(p->pParent); + while( p ){ + SegmentNode *pRight = p->pRight; + if( p->aData!=(char *)&p[1] ){ + sqlite3_free(p->aData); + } + assert( pRight==0 || p->zMalloc==0 ); + sqlite3_free(p->zMalloc); + sqlite3_free(p); + p = pRight; + } + } +} + +/* +** Add a term to the segment being constructed by the SegmentWriter object +** *ppWriter. When adding the first term to a segment, *ppWriter should +** be passed NULL. This function will allocate a new SegmentWriter object +** and return it via the input/output variable *ppWriter in this case. +** +** If successful, SQLITE_OK is returned. Otherwise, an SQLite error code. +*/ +static int fts3SegWriterAdd( + Fts3Table *p, /* Virtual table handle */ + SegmentWriter **ppWriter, /* IN/OUT: SegmentWriter handle */ + int isCopyTerm, /* True if buffer zTerm must be copied */ + const char *zTerm, /* Pointer to buffer containing term */ + int nTerm, /* Size of term in bytes */ + const char *aDoclist, /* Pointer to buffer containing doclist */ + int nDoclist /* Size of doclist in bytes */ +){ + int nPrefix; /* Size of term prefix in bytes */ + int nSuffix; /* Size of term suffix in bytes */ + i64 nReq; /* Number of bytes required on leaf page */ + int nData; + SegmentWriter *pWriter = *ppWriter; + + if( !pWriter ){ + int rc; + sqlite3_stmt *pStmt; + + /* Allocate the SegmentWriter structure */ + pWriter = (SegmentWriter *)sqlite3_malloc64(sizeof(SegmentWriter)); + if( !pWriter ) return SQLITE_NOMEM; + memset(pWriter, 0, sizeof(SegmentWriter)); + *ppWriter = pWriter; + + /* Allocate a buffer in which to accumulate data */ + pWriter->aData = (char *)sqlite3_malloc64(p->nNodeSize); + if( !pWriter->aData ) return SQLITE_NOMEM; + pWriter->nSize = p->nNodeSize; + + /* Find the next free blockid in the %_segments table */ + rc = fts3SqlStmt(p, SQL_NEXT_SEGMENTS_ID, &pStmt, 0); + if( rc!=SQLITE_OK ) return rc; + if( SQLITE_ROW==sqlite3_step(pStmt) ){ + pWriter->iFree = sqlite3_column_int64(pStmt, 0); + pWriter->iFirst = pWriter->iFree; + } + rc = sqlite3_reset(pStmt); + if( rc!=SQLITE_OK ) return rc; + } + nData = pWriter->nData; + + nPrefix = fts3PrefixCompress(pWriter->zTerm, pWriter->nTerm, zTerm, nTerm); + nSuffix = nTerm-nPrefix; + + /* If nSuffix is zero or less, then zTerm/nTerm must be a prefix of + ** pWriter->zTerm/pWriter->nTerm. i.e. must be equal to or less than when + ** compared with BINARY collation. This indicates corruption. */ + if( nSuffix<=0 ) return FTS_CORRUPT_VTAB; + + /* Figure out how many bytes are required by this new entry */ + nReq = sqlite3Fts3VarintLen(nPrefix) + /* varint containing prefix size */ + sqlite3Fts3VarintLen(nSuffix) + /* varint containing suffix size */ + nSuffix + /* Term suffix */ + sqlite3Fts3VarintLen(nDoclist) + /* Size of doclist */ + nDoclist; /* Doclist data */ + + if( nData>0 && nData+nReq>p->nNodeSize ){ + int rc; + + /* The current leaf node is full. Write it out to the database. */ + if( pWriter->iFree==LARGEST_INT64 ) return FTS_CORRUPT_VTAB; + rc = fts3WriteSegment(p, pWriter->iFree++, pWriter->aData, nData); + if( rc!=SQLITE_OK ) return rc; + p->nLeafAdd++; + + /* Add the current term to the interior node tree. The term added to + ** the interior tree must: + ** + ** a) be greater than the largest term on the leaf node just written + ** to the database (still available in pWriter->zTerm), and + ** + ** b) be less than or equal to the term about to be added to the new + ** leaf node (zTerm/nTerm). + ** + ** In other words, it must be the prefix of zTerm 1 byte longer than + ** the common prefix (if any) of zTerm and pWriter->zTerm. + */ + assert( nPrefixpTree, isCopyTerm, zTerm, nPrefix+1); + if( rc!=SQLITE_OK ) return rc; + + nData = 0; + pWriter->nTerm = 0; + + nPrefix = 0; + nSuffix = nTerm; + nReq = 1 + /* varint containing prefix size */ + sqlite3Fts3VarintLen(nTerm) + /* varint containing suffix size */ + nTerm + /* Term suffix */ + sqlite3Fts3VarintLen(nDoclist) + /* Size of doclist */ + nDoclist; /* Doclist data */ + } + + /* Increase the total number of bytes written to account for the new entry. */ + pWriter->nLeafData += nReq; + + /* If the buffer currently allocated is too small for this entry, realloc + ** the buffer to make it large enough. + */ + if( nReq>pWriter->nSize ){ + char *aNew = sqlite3_realloc64(pWriter->aData, nReq); + if( !aNew ) return SQLITE_NOMEM; + pWriter->aData = aNew; + pWriter->nSize = nReq; + } + assert( nData+nReq<=pWriter->nSize ); + + /* Append the prefix-compressed term and doclist to the buffer. */ + nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nPrefix); + nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nSuffix); + assert( nSuffix>0 ); + memcpy(&pWriter->aData[nData], &zTerm[nPrefix], nSuffix); + nData += nSuffix; + nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nDoclist); + assert( nDoclist>0 ); + memcpy(&pWriter->aData[nData], aDoclist, nDoclist); + pWriter->nData = nData + nDoclist; + + /* Save the current term so that it can be used to prefix-compress the next. + ** If the isCopyTerm parameter is true, then the buffer pointed to by + ** zTerm is transient, so take a copy of the term data. Otherwise, just + ** store a copy of the pointer. + */ + if( isCopyTerm ){ + if( nTerm>pWriter->nMalloc ){ + char *zNew = sqlite3_realloc64(pWriter->zMalloc, (i64)nTerm*2); + if( !zNew ){ + return SQLITE_NOMEM; + } + pWriter->nMalloc = nTerm*2; + pWriter->zMalloc = zNew; + pWriter->zTerm = zNew; + } + assert( pWriter->zTerm==pWriter->zMalloc ); + assert( nTerm>0 ); + memcpy(pWriter->zTerm, zTerm, nTerm); + }else{ + pWriter->zTerm = (char *)zTerm; + } + pWriter->nTerm = nTerm; + + return SQLITE_OK; +} + +/* +** Flush all data associated with the SegmentWriter object pWriter to the +** database. This function must be called after all terms have been added +** to the segment using fts3SegWriterAdd(). If successful, SQLITE_OK is +** returned. Otherwise, an SQLite error code. +*/ +static int fts3SegWriterFlush( + Fts3Table *p, /* Virtual table handle */ + SegmentWriter *pWriter, /* SegmentWriter to flush to the db */ + sqlite3_int64 iLevel, /* Value for 'level' column of %_segdir */ + int iIdx /* Value for 'idx' column of %_segdir */ +){ + int rc; /* Return code */ + if( pWriter->pTree ){ + sqlite3_int64 iLast = 0; /* Largest block id written to database */ + sqlite3_int64 iLastLeaf; /* Largest leaf block id written to db */ + char *zRoot = NULL; /* Pointer to buffer containing root node */ + int nRoot = 0; /* Size of buffer zRoot */ + + iLastLeaf = pWriter->iFree; + rc = fts3WriteSegment(p, pWriter->iFree++, pWriter->aData, pWriter->nData); + if( rc==SQLITE_OK ){ + rc = fts3NodeWrite(p, pWriter->pTree, 1, + pWriter->iFirst, pWriter->iFree, &iLast, &zRoot, &nRoot); + } + if( rc==SQLITE_OK ){ + rc = fts3WriteSegdir(p, iLevel, iIdx, + pWriter->iFirst, iLastLeaf, iLast, pWriter->nLeafData, zRoot, nRoot); + } + }else{ + /* The entire tree fits on the root node. Write it to the segdir table. */ + rc = fts3WriteSegdir(p, iLevel, iIdx, + 0, 0, 0, pWriter->nLeafData, pWriter->aData, pWriter->nData); + } + p->nLeafAdd++; + return rc; +} + +/* +** Release all memory held by the SegmentWriter object passed as the +** first argument. +*/ +static void fts3SegWriterFree(SegmentWriter *pWriter){ + if( pWriter ){ + sqlite3_free(pWriter->aData); + sqlite3_free(pWriter->zMalloc); + fts3NodeFree(pWriter->pTree); + sqlite3_free(pWriter); + } +} + +/* +** The first value in the apVal[] array is assumed to contain an integer. +** This function tests if there exist any documents with docid values that +** are different from that integer. i.e. if deleting the document with docid +** pRowid would mean the FTS3 table were empty. +** +** If successful, *pisEmpty is set to true if the table is empty except for +** document pRowid, or false otherwise, and SQLITE_OK is returned. If an +** error occurs, an SQLite error code is returned. +*/ +static int fts3IsEmpty(Fts3Table *p, sqlite3_value *pRowid, int *pisEmpty){ + sqlite3_stmt *pStmt; + int rc; + if( p->zContentTbl ){ + /* If using the content=xxx option, assume the table is never empty */ + *pisEmpty = 0; + rc = SQLITE_OK; + }else{ + rc = fts3SqlStmt(p, SQL_IS_EMPTY, &pStmt, &pRowid); + if( rc==SQLITE_OK ){ + if( SQLITE_ROW==sqlite3_step(pStmt) ){ + *pisEmpty = sqlite3_column_int(pStmt, 0); + } + rc = sqlite3_reset(pStmt); + } + } + return rc; +} + +/* +** Set *pnMax to the largest segment level in the database for the index +** iIndex. +** +** Segment levels are stored in the 'level' column of the %_segdir table. +** +** Return SQLITE_OK if successful, or an SQLite error code if not. +*/ +static int fts3SegmentMaxLevel( + Fts3Table *p, + int iLangid, + int iIndex, + sqlite3_int64 *pnMax +){ + sqlite3_stmt *pStmt; + int rc; + assert( iIndex>=0 && iIndexnIndex ); + + /* Set pStmt to the compiled version of: + ** + ** SELECT max(level) FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ? + ** + ** (1024 is actually the value of macro FTS3_SEGDIR_PREFIXLEVEL_STR). + */ + rc = fts3SqlStmt(p, SQL_SELECT_SEGDIR_MAX_LEVEL, &pStmt, 0); + if( rc!=SQLITE_OK ) return rc; + sqlite3_bind_int64(pStmt, 1, getAbsoluteLevel(p, iLangid, iIndex, 0)); + sqlite3_bind_int64(pStmt, 2, + getAbsoluteLevel(p, iLangid, iIndex, FTS3_SEGDIR_MAXLEVEL-1) + ); + if( SQLITE_ROW==sqlite3_step(pStmt) ){ + *pnMax = sqlite3_column_int64(pStmt, 0); + } + return sqlite3_reset(pStmt); +} + +/* +** iAbsLevel is an absolute level that may be assumed to exist within +** the database. This function checks if it is the largest level number +** within its index. Assuming no error occurs, *pbMax is set to 1 if +** iAbsLevel is indeed the largest level, or 0 otherwise, and SQLITE_OK +** is returned. If an error occurs, an error code is returned and the +** final value of *pbMax is undefined. +*/ +static int fts3SegmentIsMaxLevel(Fts3Table *p, i64 iAbsLevel, int *pbMax){ + + /* Set pStmt to the compiled version of: + ** + ** SELECT max(level) FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ? + ** + ** (1024 is actually the value of macro FTS3_SEGDIR_PREFIXLEVEL_STR). + */ + sqlite3_stmt *pStmt; + int rc = fts3SqlStmt(p, SQL_SELECT_SEGDIR_MAX_LEVEL, &pStmt, 0); + if( rc!=SQLITE_OK ) return rc; + sqlite3_bind_int64(pStmt, 1, iAbsLevel+1); + sqlite3_bind_int64(pStmt, 2, + (((u64)iAbsLevel/FTS3_SEGDIR_MAXLEVEL)+1) * FTS3_SEGDIR_MAXLEVEL + ); + + *pbMax = 0; + if( SQLITE_ROW==sqlite3_step(pStmt) ){ + *pbMax = sqlite3_column_type(pStmt, 0)==SQLITE_NULL; + } + return sqlite3_reset(pStmt); +} + +/* +** Delete all entries in the %_segments table associated with the segment +** opened with seg-reader pSeg. This function does not affect the contents +** of the %_segdir table. +*/ +static int fts3DeleteSegment( + Fts3Table *p, /* FTS table handle */ + Fts3SegReader *pSeg /* Segment to delete */ +){ + int rc = SQLITE_OK; /* Return code */ + if( pSeg->iStartBlock ){ + sqlite3_stmt *pDelete; /* SQL statement to delete rows */ + rc = fts3SqlStmt(p, SQL_DELETE_SEGMENTS_RANGE, &pDelete, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pDelete, 1, pSeg->iStartBlock); + sqlite3_bind_int64(pDelete, 2, pSeg->iEndBlock); + sqlite3_step(pDelete); + rc = sqlite3_reset(pDelete); + } + } + return rc; +} + +/* +** This function is used after merging multiple segments into a single large +** segment to delete the old, now redundant, segment b-trees. Specifically, +** it: +** +** 1) Deletes all %_segments entries for the segments associated with +** each of the SegReader objects in the array passed as the third +** argument, and +** +** 2) deletes all %_segdir entries with level iLevel, or all %_segdir +** entries regardless of level if (iLevel<0). +** +** SQLITE_OK is returned if successful, otherwise an SQLite error code. +*/ +static int fts3DeleteSegdir( + Fts3Table *p, /* Virtual table handle */ + int iLangid, /* Language id */ + int iIndex, /* Index for p->aIndex */ + int iLevel, /* Level of %_segdir entries to delete */ + Fts3SegReader **apSegment, /* Array of SegReader objects */ + int nReader /* Size of array apSegment */ +){ + int rc = SQLITE_OK; /* Return Code */ + int i; /* Iterator variable */ + sqlite3_stmt *pDelete = 0; /* SQL statement to delete rows */ + + for(i=0; rc==SQLITE_OK && i=0 || iLevel==FTS3_SEGCURSOR_ALL ); + if( iLevel==FTS3_SEGCURSOR_ALL ){ + rc = fts3SqlStmt(p, SQL_DELETE_SEGDIR_RANGE, &pDelete, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pDelete, 1, getAbsoluteLevel(p, iLangid, iIndex, 0)); + sqlite3_bind_int64(pDelete, 2, + getAbsoluteLevel(p, iLangid, iIndex, FTS3_SEGDIR_MAXLEVEL-1) + ); + } + }else{ + rc = fts3SqlStmt(p, SQL_DELETE_SEGDIR_LEVEL, &pDelete, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64( + pDelete, 1, getAbsoluteLevel(p, iLangid, iIndex, iLevel) + ); + } + } + + if( rc==SQLITE_OK ){ + sqlite3_step(pDelete); + rc = sqlite3_reset(pDelete); + } + + return rc; +} + +/* +** When this function is called, buffer *ppList (size *pnList bytes) contains +** a position list that may (or may not) feature multiple columns. This +** function adjusts the pointer *ppList and the length *pnList so that they +** identify the subset of the position list that corresponds to column iCol. +** +** If there are no entries in the input position list for column iCol, then +** *pnList is set to zero before returning. +** +** If parameter bZero is non-zero, then any part of the input list following +** the end of the output list is zeroed before returning. +*/ +static void fts3ColumnFilter( + int iCol, /* Column to filter on */ + int bZero, /* Zero out anything following *ppList */ + char **ppList, /* IN/OUT: Pointer to position list */ + int *pnList /* IN/OUT: Size of buffer *ppList in bytes */ +){ + char *pList = *ppList; + int nList = *pnList; + char *pEnd = &pList[nList]; + int iCurrent = 0; + char *p = pList; + + assert( iCol>=0 ); + while( 1 ){ + char c = 0; + while( p0){ + memset(&pList[nList], 0, pEnd - &pList[nList]); + } + *ppList = pList; + *pnList = nList; +} + +/* +** Cache data in the Fts3MultiSegReader.aBuffer[] buffer (overwriting any +** existing data). Grow the buffer if required. +** +** If successful, return SQLITE_OK. Otherwise, if an OOM error is encountered +** trying to resize the buffer, return SQLITE_NOMEM. +*/ +static int fts3MsrBufferData( + Fts3MultiSegReader *pMsr, /* Multi-segment-reader handle */ + char *pList, + i64 nList +){ + if( (nList+FTS3_NODE_PADDING)>pMsr->nBuffer ){ + char *pNew; + int nNew = nList*2 + FTS3_NODE_PADDING; + pNew = (char *)sqlite3_realloc64(pMsr->aBuffer, nNew); + if( !pNew ) return SQLITE_NOMEM; + pMsr->aBuffer = pNew; + pMsr->nBuffer = nNew; + } + + assert( nList>0 ); + memcpy(pMsr->aBuffer, pList, nList); + memset(&pMsr->aBuffer[nList], 0, FTS3_NODE_PADDING); + return SQLITE_OK; +} + +SQLITE_PRIVATE int sqlite3Fts3MsrIncrNext( + Fts3Table *p, /* Virtual table handle */ + Fts3MultiSegReader *pMsr, /* Multi-segment-reader handle */ + sqlite3_int64 *piDocid, /* OUT: Docid value */ + char **paPoslist, /* OUT: Pointer to position list */ + int *pnPoslist /* OUT: Size of position list in bytes */ +){ + int nMerge = pMsr->nAdvance; + Fts3SegReader **apSegment = pMsr->apSegment; + int (*xCmp)(Fts3SegReader *, Fts3SegReader *) = ( + p->bDescIdx ? fts3SegReaderDoclistCmpRev : fts3SegReaderDoclistCmp + ); + + if( nMerge==0 ){ + *paPoslist = 0; + return SQLITE_OK; + } + + while( 1 ){ + Fts3SegReader *pSeg; + pSeg = pMsr->apSegment[0]; + + if( pSeg->pOffsetList==0 ){ + *paPoslist = 0; + break; + }else{ + int rc; + char *pList; + int nList; + int j; + sqlite3_int64 iDocid = apSegment[0]->iDocid; + + rc = fts3SegReaderNextDocid(p, apSegment[0], &pList, &nList); + j = 1; + while( rc==SQLITE_OK + && jpOffsetList + && apSegment[j]->iDocid==iDocid + ){ + rc = fts3SegReaderNextDocid(p, apSegment[j], 0, 0); + j++; + } + if( rc!=SQLITE_OK ) return rc; + fts3SegReaderSort(pMsr->apSegment, nMerge, j, xCmp); + + if( nList>0 && fts3SegReaderIsPending(apSegment[0]) ){ + rc = fts3MsrBufferData(pMsr, pList, (i64)nList+1); + if( rc!=SQLITE_OK ) return rc; + assert( (pMsr->aBuffer[nList] & 0xFE)==0x00 ); + pList = pMsr->aBuffer; + } + + if( pMsr->iColFilter>=0 ){ + fts3ColumnFilter(pMsr->iColFilter, 1, &pList, &nList); + } + + if( nList>0 ){ + *paPoslist = pList; + *piDocid = iDocid; + *pnPoslist = nList; + break; + } + } + } + + return SQLITE_OK; +} + +static int fts3SegReaderStart( + Fts3Table *p, /* Virtual table handle */ + Fts3MultiSegReader *pCsr, /* Cursor object */ + const char *zTerm, /* Term searched for (or NULL) */ + int nTerm /* Length of zTerm in bytes */ +){ + int i; + int nSeg = pCsr->nSegment; + + /* If the Fts3SegFilter defines a specific term (or term prefix) to search + ** for, then advance each segment iterator until it points to a term of + ** equal or greater value than the specified term. This prevents many + ** unnecessary merge/sort operations for the case where single segment + ** b-tree leaf nodes contain more than one term. + */ + for(i=0; pCsr->bRestart==0 && inSegment; i++){ + int res = 0; + Fts3SegReader *pSeg = pCsr->apSegment[i]; + do { + int rc = fts3SegReaderNext(p, pSeg, 0); + if( rc!=SQLITE_OK ) return rc; + }while( zTerm && (res = fts3SegReaderTermCmp(pSeg, zTerm, nTerm))<0 ); + + if( pSeg->bLookup && res!=0 ){ + fts3SegReaderSetEof(pSeg); + } + } + fts3SegReaderSort(pCsr->apSegment, nSeg, nSeg, fts3SegReaderCmp); + + return SQLITE_OK; +} + +SQLITE_PRIVATE int sqlite3Fts3SegReaderStart( + Fts3Table *p, /* Virtual table handle */ + Fts3MultiSegReader *pCsr, /* Cursor object */ + Fts3SegFilter *pFilter /* Restrictions on range of iteration */ +){ + pCsr->pFilter = pFilter; + return fts3SegReaderStart(p, pCsr, pFilter->zTerm, pFilter->nTerm); +} + +SQLITE_PRIVATE int sqlite3Fts3MsrIncrStart( + Fts3Table *p, /* Virtual table handle */ + Fts3MultiSegReader *pCsr, /* Cursor object */ + int iCol, /* Column to match on. */ + const char *zTerm, /* Term to iterate through a doclist for */ + int nTerm /* Number of bytes in zTerm */ +){ + int i; + int rc; + int nSegment = pCsr->nSegment; + int (*xCmp)(Fts3SegReader *, Fts3SegReader *) = ( + p->bDescIdx ? fts3SegReaderDoclistCmpRev : fts3SegReaderDoclistCmp + ); + + assert( pCsr->pFilter==0 ); + assert( zTerm && nTerm>0 ); + + /* Advance each segment iterator until it points to the term zTerm/nTerm. */ + rc = fts3SegReaderStart(p, pCsr, zTerm, nTerm); + if( rc!=SQLITE_OK ) return rc; + + /* Determine how many of the segments actually point to zTerm/nTerm. */ + for(i=0; iapSegment[i]; + if( !pSeg->aNode || fts3SegReaderTermCmp(pSeg, zTerm, nTerm) ){ + break; + } + } + pCsr->nAdvance = i; + + /* Advance each of the segments to point to the first docid. */ + for(i=0; inAdvance; i++){ + rc = fts3SegReaderFirstDocid(p, pCsr->apSegment[i]); + if( rc!=SQLITE_OK ) return rc; + } + fts3SegReaderSort(pCsr->apSegment, i, i, xCmp); + + assert( iCol<0 || iColnColumn ); + pCsr->iColFilter = iCol; + + return SQLITE_OK; +} + +/* +** This function is called on a MultiSegReader that has been started using +** sqlite3Fts3MsrIncrStart(). One or more calls to MsrIncrNext() may also +** have been made. Calling this function puts the MultiSegReader in such +** a state that if the next two calls are: +** +** sqlite3Fts3SegReaderStart() +** sqlite3Fts3SegReaderStep() +** +** then the entire doclist for the term is available in +** MultiSegReader.aDoclist/nDoclist. +*/ +SQLITE_PRIVATE int sqlite3Fts3MsrIncrRestart(Fts3MultiSegReader *pCsr){ + int i; /* Used to iterate through segment-readers */ + + assert( pCsr->zTerm==0 ); + assert( pCsr->nTerm==0 ); + assert( pCsr->aDoclist==0 ); + assert( pCsr->nDoclist==0 ); + + pCsr->nAdvance = 0; + pCsr->bRestart = 1; + for(i=0; inSegment; i++){ + pCsr->apSegment[i]->pOffsetList = 0; + pCsr->apSegment[i]->nOffsetList = 0; + pCsr->apSegment[i]->iDocid = 0; + } + + return SQLITE_OK; +} + +static int fts3GrowSegReaderBuffer(Fts3MultiSegReader *pCsr, i64 nReq){ + if( nReq>pCsr->nBuffer ){ + char *aNew; + pCsr->nBuffer = nReq*2; + aNew = sqlite3_realloc64(pCsr->aBuffer, pCsr->nBuffer); + if( !aNew ){ + return SQLITE_NOMEM; + } + pCsr->aBuffer = aNew; + } + return SQLITE_OK; +} + + +SQLITE_PRIVATE int sqlite3Fts3SegReaderStep( + Fts3Table *p, /* Virtual table handle */ + Fts3MultiSegReader *pCsr /* Cursor object */ +){ + int rc = SQLITE_OK; + + int isIgnoreEmpty = (pCsr->pFilter->flags & FTS3_SEGMENT_IGNORE_EMPTY); + int isRequirePos = (pCsr->pFilter->flags & FTS3_SEGMENT_REQUIRE_POS); + int isColFilter = (pCsr->pFilter->flags & FTS3_SEGMENT_COLUMN_FILTER); + int isPrefix = (pCsr->pFilter->flags & FTS3_SEGMENT_PREFIX); + int isScan = (pCsr->pFilter->flags & FTS3_SEGMENT_SCAN); + int isFirst = (pCsr->pFilter->flags & FTS3_SEGMENT_FIRST); + + Fts3SegReader **apSegment = pCsr->apSegment; + int nSegment = pCsr->nSegment; + Fts3SegFilter *pFilter = pCsr->pFilter; + int (*xCmp)(Fts3SegReader *, Fts3SegReader *) = ( + p->bDescIdx ? fts3SegReaderDoclistCmpRev : fts3SegReaderDoclistCmp + ); + + if( pCsr->nSegment==0 ) return SQLITE_OK; + + do { + int nMerge; + int i; + + /* Advance the first pCsr->nAdvance entries in the apSegment[] array + ** forward. Then sort the list in order of current term again. + */ + for(i=0; inAdvance; i++){ + Fts3SegReader *pSeg = apSegment[i]; + if( pSeg->bLookup ){ + fts3SegReaderSetEof(pSeg); + }else{ + rc = fts3SegReaderNext(p, pSeg, 0); + } + if( rc!=SQLITE_OK ) return rc; + } + fts3SegReaderSort(apSegment, nSegment, pCsr->nAdvance, fts3SegReaderCmp); + pCsr->nAdvance = 0; + + /* If all the seg-readers are at EOF, we're finished. return SQLITE_OK. */ + assert( rc==SQLITE_OK ); + if( apSegment[0]->aNode==0 ) break; + + pCsr->nTerm = apSegment[0]->nTerm; + pCsr->zTerm = apSegment[0]->zTerm; + + /* If this is a prefix-search, and if the term that apSegment[0] points + ** to does not share a suffix with pFilter->zTerm/nTerm, then all + ** required callbacks have been made. In this case exit early. + ** + ** Similarly, if this is a search for an exact match, and the first term + ** of segment apSegment[0] is not a match, exit early. + */ + if( pFilter->zTerm && !isScan ){ + if( pCsr->nTermnTerm + || (!isPrefix && pCsr->nTerm>pFilter->nTerm) + || memcmp(pCsr->zTerm, pFilter->zTerm, pFilter->nTerm) + ){ + break; + } + } + + nMerge = 1; + while( nMergeaNode + && apSegment[nMerge]->nTerm==pCsr->nTerm + && 0==memcmp(pCsr->zTerm, apSegment[nMerge]->zTerm, pCsr->nTerm) + ){ + nMerge++; + } + + assert( isIgnoreEmpty || (isRequirePos && !isColFilter) ); + if( nMerge==1 + && !isIgnoreEmpty + && !isFirst + && (p->bDescIdx==0 || fts3SegReaderIsPending(apSegment[0])==0) + ){ + pCsr->nDoclist = apSegment[0]->nDoclist; + if( fts3SegReaderIsPending(apSegment[0]) ){ + rc = fts3MsrBufferData(pCsr, apSegment[0]->aDoclist, + (i64)pCsr->nDoclist); + pCsr->aDoclist = pCsr->aBuffer; + }else{ + pCsr->aDoclist = apSegment[0]->aDoclist; + } + if( rc==SQLITE_OK ) rc = SQLITE_ROW; + }else{ + int nDoclist = 0; /* Size of doclist */ + sqlite3_int64 iPrev = 0; /* Previous docid stored in doclist */ + + /* The current term of the first nMerge entries in the array + ** of Fts3SegReader objects is the same. The doclists must be merged + ** and a single term returned with the merged doclist. + */ + for(i=0; ipOffsetList ){ + int j; /* Number of segments that share a docid */ + char *pList = 0; + int nList = 0; + int nByte; + sqlite3_int64 iDocid = apSegment[0]->iDocid; + fts3SegReaderNextDocid(p, apSegment[0], &pList, &nList); + j = 1; + while( jpOffsetList + && apSegment[j]->iDocid==iDocid + ){ + fts3SegReaderNextDocid(p, apSegment[j], 0, 0); + j++; + } + + if( isColFilter ){ + fts3ColumnFilter(pFilter->iCol, 0, &pList, &nList); + } + + if( !isIgnoreEmpty || nList>0 ){ + + /* Calculate the 'docid' delta value to write into the merged + ** doclist. */ + sqlite3_int64 iDelta; + if( p->bDescIdx && nDoclist>0 ){ + if( iPrev<=iDocid ) return FTS_CORRUPT_VTAB; + iDelta = (i64)((u64)iPrev - (u64)iDocid); + }else{ + if( nDoclist>0 && iPrev>=iDocid ) return FTS_CORRUPT_VTAB; + iDelta = (i64)((u64)iDocid - (u64)iPrev); + } + + nByte = sqlite3Fts3VarintLen(iDelta) + (isRequirePos?nList+1:0); + + rc = fts3GrowSegReaderBuffer(pCsr, + (i64)nByte+nDoclist+FTS3_NODE_PADDING); + if( rc ) return rc; + + if( isFirst ){ + char *a = &pCsr->aBuffer[nDoclist]; + int nWrite; + + nWrite = sqlite3Fts3FirstFilter(iDelta, pList, nList, a); + if( nWrite ){ + iPrev = iDocid; + nDoclist += nWrite; + } + }else{ + nDoclist += sqlite3Fts3PutVarint(&pCsr->aBuffer[nDoclist], iDelta); + iPrev = iDocid; + if( isRequirePos ){ + memcpy(&pCsr->aBuffer[nDoclist], pList, nList); + nDoclist += nList; + pCsr->aBuffer[nDoclist++] = '\0'; + } + } + } + + fts3SegReaderSort(apSegment, nMerge, j, xCmp); + } + if( nDoclist>0 ){ + rc = fts3GrowSegReaderBuffer(pCsr, (i64)nDoclist+FTS3_NODE_PADDING); + if( rc ) return rc; + memset(&pCsr->aBuffer[nDoclist], 0, FTS3_NODE_PADDING); + pCsr->aDoclist = pCsr->aBuffer; + pCsr->nDoclist = nDoclist; + rc = SQLITE_ROW; + } + } + pCsr->nAdvance = nMerge; + }while( rc==SQLITE_OK ); + + return rc; +} + + +SQLITE_PRIVATE void sqlite3Fts3SegReaderFinish( + Fts3MultiSegReader *pCsr /* Cursor object */ +){ + if( pCsr ){ + int i; + for(i=0; inSegment; i++){ + sqlite3Fts3SegReaderFree(pCsr->apSegment[i]); + } + sqlite3_free(pCsr->apSegment); + sqlite3_free(pCsr->aBuffer); + + pCsr->nSegment = 0; + pCsr->apSegment = 0; + pCsr->aBuffer = 0; + } +} + +/* +** Decode the "end_block" field, selected by column iCol of the SELECT +** statement passed as the first argument. +** +** The "end_block" field may contain either an integer, or a text field +** containing the text representation of two non-negative integers separated +** by one or more space (0x20) characters. In the first case, set *piEndBlock +** to the integer value and *pnByte to zero before returning. In the second, +** set *piEndBlock to the first value and *pnByte to the second. +*/ +static void fts3ReadEndBlockField( + sqlite3_stmt *pStmt, + int iCol, + i64 *piEndBlock, + i64 *pnByte +){ + const unsigned char *zText = sqlite3_column_text(pStmt, iCol); + if( zText ){ + int i; + int iMul = 1; + u64 iVal = 0; + for(i=0; zText[i]>='0' && zText[i]<='9'; i++){ + iVal = iVal*10 + (zText[i] - '0'); + } + *piEndBlock = (i64)iVal; + while( zText[i]==' ' ) i++; + iVal = 0; + if( zText[i]=='-' ){ + i++; + iMul = -1; + } + for(/* no-op */; zText[i]>='0' && zText[i]<='9'; i++){ + iVal = iVal*10 + (zText[i] - '0'); + } + *pnByte = ((i64)iVal * (i64)iMul); + } +} + + +/* +** A segment of size nByte bytes has just been written to absolute level +** iAbsLevel. Promote any segments that should be promoted as a result. +*/ +static int fts3PromoteSegments( + Fts3Table *p, /* FTS table handle */ + sqlite3_int64 iAbsLevel, /* Absolute level just updated */ + sqlite3_int64 nByte /* Size of new segment at iAbsLevel */ +){ + int rc = SQLITE_OK; + sqlite3_stmt *pRange; + + rc = fts3SqlStmt(p, SQL_SELECT_LEVEL_RANGE2, &pRange, 0); + + if( rc==SQLITE_OK ){ + int bOk = 0; + i64 iLast = (iAbsLevel/FTS3_SEGDIR_MAXLEVEL + 1) * FTS3_SEGDIR_MAXLEVEL - 1; + i64 nLimit = (nByte*3)/2; + + /* Loop through all entries in the %_segdir table corresponding to + ** segments in this index on levels greater than iAbsLevel. If there is + ** at least one such segment, and it is possible to determine that all + ** such segments are smaller than nLimit bytes in size, they will be + ** promoted to level iAbsLevel. */ + sqlite3_bind_int64(pRange, 1, iAbsLevel+1); + sqlite3_bind_int64(pRange, 2, iLast); + while( SQLITE_ROW==sqlite3_step(pRange) ){ + i64 nSize = 0, dummy; + fts3ReadEndBlockField(pRange, 2, &dummy, &nSize); + if( nSize<=0 || nSize>nLimit ){ + /* If nSize==0, then the %_segdir.end_block field does not not + ** contain a size value. This happens if it was written by an + ** old version of FTS. In this case it is not possible to determine + ** the size of the segment, and so segment promotion does not + ** take place. */ + bOk = 0; + break; + } + bOk = 1; + } + rc = sqlite3_reset(pRange); + + if( bOk ){ + int iIdx = 0; + sqlite3_stmt *pUpdate1 = 0; + sqlite3_stmt *pUpdate2 = 0; + + if( rc==SQLITE_OK ){ + rc = fts3SqlStmt(p, SQL_UPDATE_LEVEL_IDX, &pUpdate1, 0); + } + if( rc==SQLITE_OK ){ + rc = fts3SqlStmt(p, SQL_UPDATE_LEVEL, &pUpdate2, 0); + } + + if( rc==SQLITE_OK ){ + + /* Loop through all %_segdir entries for segments in this index with + ** levels equal to or greater than iAbsLevel. As each entry is visited, + ** updated it to set (level = -1) and (idx = N), where N is 0 for the + ** oldest segment in the range, 1 for the next oldest, and so on. + ** + ** In other words, move all segments being promoted to level -1, + ** setting the "idx" fields as appropriate to keep them in the same + ** order. The contents of level -1 (which is never used, except + ** transiently here), will be moved back to level iAbsLevel below. */ + sqlite3_bind_int64(pRange, 1, iAbsLevel); + while( SQLITE_ROW==sqlite3_step(pRange) ){ + sqlite3_bind_int(pUpdate1, 1, iIdx++); + sqlite3_bind_int(pUpdate1, 2, sqlite3_column_int(pRange, 0)); + sqlite3_bind_int(pUpdate1, 3, sqlite3_column_int(pRange, 1)); + sqlite3_step(pUpdate1); + rc = sqlite3_reset(pUpdate1); + if( rc!=SQLITE_OK ){ + sqlite3_reset(pRange); + break; + } + } + } + if( rc==SQLITE_OK ){ + rc = sqlite3_reset(pRange); + } + + /* Move level -1 to level iAbsLevel */ + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pUpdate2, 1, iAbsLevel); + sqlite3_step(pUpdate2); + rc = sqlite3_reset(pUpdate2); + } + } + } + + + return rc; +} + +/* +** Merge all level iLevel segments in the database into a single +** iLevel+1 segment. Or, if iLevel<0, merge all segments into a +** single segment with a level equal to the numerically largest level +** currently present in the database. +** +** If this function is called with iLevel<0, but there is only one +** segment in the database, SQLITE_DONE is returned immediately. +** Otherwise, if successful, SQLITE_OK is returned. If an error occurs, +** an SQLite error code is returned. +*/ +static int fts3SegmentMerge( + Fts3Table *p, + int iLangid, /* Language id to merge */ + int iIndex, /* Index in p->aIndex[] to merge */ + int iLevel /* Level to merge */ +){ + int rc; /* Return code */ + int iIdx = 0; /* Index of new segment */ + sqlite3_int64 iNewLevel = 0; /* Level/index to create new segment at */ + SegmentWriter *pWriter = 0; /* Used to write the new, merged, segment */ + Fts3SegFilter filter; /* Segment term filter condition */ + Fts3MultiSegReader csr; /* Cursor to iterate through level(s) */ + int bIgnoreEmpty = 0; /* True to ignore empty segments */ + i64 iMaxLevel = 0; /* Max level number for this index/langid */ + + assert( iLevel==FTS3_SEGCURSOR_ALL + || iLevel==FTS3_SEGCURSOR_PENDING + || iLevel>=0 + ); + assert( iLevel=0 && iIndexnIndex ); + + rc = sqlite3Fts3SegReaderCursor(p, iLangid, iIndex, iLevel, 0, 0, 1, 0, &csr); + if( rc!=SQLITE_OK || csr.nSegment==0 ) goto finished; + + if( iLevel!=FTS3_SEGCURSOR_PENDING ){ + rc = fts3SegmentMaxLevel(p, iLangid, iIndex, &iMaxLevel); + if( rc!=SQLITE_OK ) goto finished; + } + + if( iLevel==FTS3_SEGCURSOR_ALL ){ + /* This call is to merge all segments in the database to a single + ** segment. The level of the new segment is equal to the numerically + ** greatest segment level currently present in the database for this + ** index. The idx of the new segment is always 0. */ + if( csr.nSegment==1 && 0==fts3SegReaderIsPending(csr.apSegment[0]) ){ + rc = SQLITE_DONE; + goto finished; + } + iNewLevel = iMaxLevel; + bIgnoreEmpty = 1; + + }else{ + /* This call is to merge all segments at level iLevel. find the next + ** available segment index at level iLevel+1. The call to + ** fts3AllocateSegdirIdx() will merge the segments at level iLevel+1 to + ** a single iLevel+2 segment if necessary. */ + assert( FTS3_SEGCURSOR_PENDING==-1 ); + iNewLevel = getAbsoluteLevel(p, iLangid, iIndex, iLevel+1); + rc = fts3AllocateSegdirIdx(p, iLangid, iIndex, iLevel+1, &iIdx); + bIgnoreEmpty = (iLevel!=FTS3_SEGCURSOR_PENDING) && (iNewLevel>iMaxLevel); + } + if( rc!=SQLITE_OK ) goto finished; + + assert( csr.nSegment>0 ); + assert_fts3_nc( iNewLevel>=getAbsoluteLevel(p, iLangid, iIndex, 0) ); + assert_fts3_nc( + iNewLevelnLeafData); + } + } + } + + finished: + fts3SegWriterFree(pWriter); + sqlite3Fts3SegReaderFinish(&csr); + return rc; +} + + +/* +** Flush the contents of pendingTerms to level 0 segments. +*/ +SQLITE_PRIVATE int sqlite3Fts3PendingTermsFlush(Fts3Table *p){ + int rc = SQLITE_OK; + int i; + + for(i=0; rc==SQLITE_OK && inIndex; i++){ + rc = fts3SegmentMerge(p, p->iPrevLangid, i, FTS3_SEGCURSOR_PENDING); + if( rc==SQLITE_DONE ) rc = SQLITE_OK; + } + + /* Determine the auto-incr-merge setting if unknown. If enabled, + ** estimate the number of leaf blocks of content to be written + */ + if( rc==SQLITE_OK && p->bHasStat + && p->nAutoincrmerge==0xff && p->nLeafAdd>0 + ){ + sqlite3_stmt *pStmt = 0; + rc = fts3SqlStmt(p, SQL_SELECT_STAT, &pStmt, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int(pStmt, 1, FTS_STAT_AUTOINCRMERGE); + rc = sqlite3_step(pStmt); + if( rc==SQLITE_ROW ){ + p->nAutoincrmerge = sqlite3_column_int(pStmt, 0); + if( p->nAutoincrmerge==1 ) p->nAutoincrmerge = 8; + }else if( rc==SQLITE_DONE ){ + p->nAutoincrmerge = 0; + } + rc = sqlite3_reset(pStmt); + } + } + + if( rc==SQLITE_OK ){ + sqlite3Fts3PendingTermsClear(p); + } + return rc; +} + +/* +** Encode N integers as varints into a blob. +*/ +static void fts3EncodeIntArray( + int N, /* The number of integers to encode */ + u32 *a, /* The integer values */ + char *zBuf, /* Write the BLOB here */ + int *pNBuf /* Write number of bytes if zBuf[] used here */ +){ + int i, j; + for(i=j=0; iiPrevDocid. The sizes are encoded as +** a blob of varints. +*/ +static void fts3InsertDocsize( + int *pRC, /* Result code */ + Fts3Table *p, /* Table into which to insert */ + u32 *aSz /* Sizes of each column, in tokens */ +){ + char *pBlob; /* The BLOB encoding of the document size */ + int nBlob; /* Number of bytes in the BLOB */ + sqlite3_stmt *pStmt; /* Statement used to insert the encoding */ + int rc; /* Result code from subfunctions */ + + if( *pRC ) return; + pBlob = sqlite3_malloc64( 10*(sqlite3_int64)p->nColumn ); + if( pBlob==0 ){ + *pRC = SQLITE_NOMEM; + return; + } + fts3EncodeIntArray(p->nColumn, aSz, pBlob, &nBlob); + rc = fts3SqlStmt(p, SQL_REPLACE_DOCSIZE, &pStmt, 0); + if( rc ){ + sqlite3_free(pBlob); + *pRC = rc; + return; + } + sqlite3_bind_int64(pStmt, 1, p->iPrevDocid); + sqlite3_bind_blob(pStmt, 2, pBlob, nBlob, sqlite3_free); + sqlite3_step(pStmt); + *pRC = sqlite3_reset(pStmt); +} + +/* +** Record 0 of the %_stat table contains a blob consisting of N varints, +** where N is the number of user defined columns in the fts3 table plus +** two. If nCol is the number of user defined columns, then values of the +** varints are set as follows: +** +** Varint 0: Total number of rows in the table. +** +** Varint 1..nCol: For each column, the total number of tokens stored in +** the column for all rows of the table. +** +** Varint 1+nCol: The total size, in bytes, of all text values in all +** columns of all rows of the table. +** +*/ +static void fts3UpdateDocTotals( + int *pRC, /* The result code */ + Fts3Table *p, /* Table being updated */ + u32 *aSzIns, /* Size increases */ + u32 *aSzDel, /* Size decreases */ + int nChng /* Change in the number of documents */ +){ + char *pBlob; /* Storage for BLOB written into %_stat */ + int nBlob; /* Size of BLOB written into %_stat */ + u32 *a; /* Array of integers that becomes the BLOB */ + sqlite3_stmt *pStmt; /* Statement for reading and writing */ + int i; /* Loop counter */ + int rc; /* Result code from subfunctions */ + + const int nStat = p->nColumn+2; + + if( *pRC ) return; + a = sqlite3_malloc64( (sizeof(u32)+10)*(sqlite3_int64)nStat ); + if( a==0 ){ + *pRC = SQLITE_NOMEM; + return; + } + pBlob = (char*)&a[nStat]; + rc = fts3SqlStmt(p, SQL_SELECT_STAT, &pStmt, 0); + if( rc ){ + sqlite3_free(a); + *pRC = rc; + return; + } + sqlite3_bind_int(pStmt, 1, FTS_STAT_DOCTOTAL); + if( sqlite3_step(pStmt)==SQLITE_ROW ){ + fts3DecodeIntArray(nStat, a, + sqlite3_column_blob(pStmt, 0), + sqlite3_column_bytes(pStmt, 0)); + }else{ + memset(a, 0, sizeof(u32)*(nStat) ); + } + rc = sqlite3_reset(pStmt); + if( rc!=SQLITE_OK ){ + sqlite3_free(a); + *pRC = rc; + return; + } + if( nChng<0 && a[0]<(u32)(-nChng) ){ + a[0] = 0; + }else{ + a[0] += nChng; + } + for(i=0; inColumn+1; i++){ + u32 x = a[i+1]; + if( x+aSzIns[i] < aSzDel[i] ){ + x = 0; + }else{ + x = x + aSzIns[i] - aSzDel[i]; + } + a[i+1] = x; + } + fts3EncodeIntArray(nStat, a, pBlob, &nBlob); + rc = fts3SqlStmt(p, SQL_REPLACE_STAT, &pStmt, 0); + if( rc ){ + sqlite3_free(a); + *pRC = rc; + return; + } + sqlite3_bind_int(pStmt, 1, FTS_STAT_DOCTOTAL); + sqlite3_bind_blob(pStmt, 2, pBlob, nBlob, SQLITE_STATIC); + sqlite3_step(pStmt); + *pRC = sqlite3_reset(pStmt); + sqlite3_bind_null(pStmt, 2); + sqlite3_free(a); +} + +/* +** Merge the entire database so that there is one segment for each +** iIndex/iLangid combination. +*/ +static int fts3DoOptimize(Fts3Table *p, int bReturnDone){ + int bSeenDone = 0; + int rc; + sqlite3_stmt *pAllLangid = 0; + + rc = sqlite3Fts3PendingTermsFlush(p); + if( rc==SQLITE_OK ){ + rc = fts3SqlStmt(p, SQL_SELECT_ALL_LANGID, &pAllLangid, 0); + } + if( rc==SQLITE_OK ){ + int rc2; + sqlite3_bind_int(pAllLangid, 1, p->iPrevLangid); + sqlite3_bind_int(pAllLangid, 2, p->nIndex); + while( sqlite3_step(pAllLangid)==SQLITE_ROW ){ + int i; + int iLangid = sqlite3_column_int(pAllLangid, 0); + for(i=0; rc==SQLITE_OK && inIndex; i++){ + rc = fts3SegmentMerge(p, iLangid, i, FTS3_SEGCURSOR_ALL); + if( rc==SQLITE_DONE ){ + bSeenDone = 1; + rc = SQLITE_OK; + } + } + } + rc2 = sqlite3_reset(pAllLangid); + if( rc==SQLITE_OK ) rc = rc2; + } + + sqlite3Fts3SegmentsClose(p); + + return (rc==SQLITE_OK && bReturnDone && bSeenDone) ? SQLITE_DONE : rc; +} + +/* +** This function is called when the user executes the following statement: +** +** INSERT INTO () VALUES('rebuild'); +** +** The entire FTS index is discarded and rebuilt. If the table is one +** created using the content=xxx option, then the new index is based on +** the current contents of the xxx table. Otherwise, it is rebuilt based +** on the contents of the %_content table. +*/ +static int fts3DoRebuild(Fts3Table *p){ + int rc; /* Return Code */ + + rc = fts3DeleteAll(p, 0); + if( rc==SQLITE_OK ){ + u32 *aSz = 0; + u32 *aSzIns = 0; + u32 *aSzDel = 0; + sqlite3_stmt *pStmt = 0; + int nEntry = 0; + + /* Compose and prepare an SQL statement to loop through the content table */ + char *zSql = sqlite3_mprintf("SELECT %s" , p->zReadExprlist); + if( !zSql ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); + sqlite3_free(zSql); + } + + if( rc==SQLITE_OK ){ + sqlite3_int64 nByte = sizeof(u32) * ((sqlite3_int64)p->nColumn+1)*3; + aSz = (u32 *)sqlite3_malloc64(nByte); + if( aSz==0 ){ + rc = SQLITE_NOMEM; + }else{ + memset(aSz, 0, nByte); + aSzIns = &aSz[p->nColumn+1]; + aSzDel = &aSzIns[p->nColumn+1]; + } + } + + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){ + int iCol; + int iLangid = langidFromSelect(p, pStmt); + rc = fts3PendingTermsDocid(p, 0, iLangid, sqlite3_column_int64(pStmt, 0)); + memset(aSz, 0, sizeof(aSz[0]) * (p->nColumn+1)); + for(iCol=0; rc==SQLITE_OK && iColnColumn; iCol++){ + if( p->abNotindexed[iCol]==0 ){ + const char *z = (const char *) sqlite3_column_text(pStmt, iCol+1); + rc = fts3PendingTermsAdd(p, iLangid, z, iCol, &aSz[iCol]); + aSz[p->nColumn] += sqlite3_column_bytes(pStmt, iCol+1); + } + } + if( p->bHasDocsize ){ + fts3InsertDocsize(&rc, p, aSz); + } + if( rc!=SQLITE_OK ){ + sqlite3_finalize(pStmt); + pStmt = 0; + }else{ + nEntry++; + for(iCol=0; iCol<=p->nColumn; iCol++){ + aSzIns[iCol] += aSz[iCol]; + } + } + } + if( p->bFts4 ){ + fts3UpdateDocTotals(&rc, p, aSzIns, aSzDel, nEntry); + } + sqlite3_free(aSz); + + if( pStmt ){ + int rc2 = sqlite3_finalize(pStmt); + if( rc==SQLITE_OK ){ + rc = rc2; + } + } + } + + return rc; +} + + +/* +** This function opens a cursor used to read the input data for an +** incremental merge operation. Specifically, it opens a cursor to scan +** the oldest nSeg segments (idx=0 through idx=(nSeg-1)) in absolute +** level iAbsLevel. +*/ +static int fts3IncrmergeCsr( + Fts3Table *p, /* FTS3 table handle */ + sqlite3_int64 iAbsLevel, /* Absolute level to open */ + int nSeg, /* Number of segments to merge */ + Fts3MultiSegReader *pCsr /* Cursor object to populate */ +){ + int rc; /* Return Code */ + sqlite3_stmt *pStmt = 0; /* Statement used to read %_segdir entry */ + sqlite3_int64 nByte; /* Bytes allocated at pCsr->apSegment[] */ + + /* Allocate space for the Fts3MultiSegReader.aCsr[] array */ + memset(pCsr, 0, sizeof(*pCsr)); + nByte = sizeof(Fts3SegReader *) * nSeg; + pCsr->apSegment = (Fts3SegReader **)sqlite3_malloc64(nByte); + + if( pCsr->apSegment==0 ){ + rc = SQLITE_NOMEM; + }else{ + memset(pCsr->apSegment, 0, nByte); + rc = fts3SqlStmt(p, SQL_SELECT_LEVEL, &pStmt, 0); + } + if( rc==SQLITE_OK ){ + int i; + int rc2; + sqlite3_bind_int64(pStmt, 1, iAbsLevel); + assert( pCsr->nSegment==0 ); + for(i=0; rc==SQLITE_OK && sqlite3_step(pStmt)==SQLITE_ROW && iapSegment[i] + ); + pCsr->nSegment++; + } + rc2 = sqlite3_reset(pStmt); + if( rc==SQLITE_OK ) rc = rc2; + } + + return rc; +} + +typedef struct IncrmergeWriter IncrmergeWriter; +typedef struct NodeWriter NodeWriter; +typedef struct Blob Blob; +typedef struct NodeReader NodeReader; + +/* +** An instance of the following structure is used as a dynamic buffer +** to build up nodes or other blobs of data in. +** +** The function blobGrowBuffer() is used to extend the allocation. +*/ +struct Blob { + char *a; /* Pointer to allocation */ + int n; /* Number of valid bytes of data in a[] */ + int nAlloc; /* Allocated size of a[] (nAlloc>=n) */ +}; + +/* +** This structure is used to build up buffers containing segment b-tree +** nodes (blocks). +*/ +struct NodeWriter { + sqlite3_int64 iBlock; /* Current block id */ + Blob key; /* Last key written to the current block */ + Blob block; /* Current block image */ +}; + +/* +** An object of this type contains the state required to create or append +** to an appendable b-tree segment. +*/ +struct IncrmergeWriter { + i64 nLeafEst; /* Space allocated for leaf blocks */ + i64 nWork; /* Number of leaf pages flushed */ + sqlite3_int64 iAbsLevel; /* Absolute level of input segments */ + int iIdx; /* Index of *output* segment in iAbsLevel+1 */ + sqlite3_int64 iStart; /* Block number of first allocated block */ + sqlite3_int64 iEnd; /* Block number of last allocated block */ + sqlite3_int64 nLeafData; /* Bytes of leaf page data so far */ + u8 bNoLeafData; /* If true, store 0 for segment size */ + NodeWriter aNodeWriter[FTS_MAX_APPENDABLE_HEIGHT]; +}; + +/* +** An object of the following type is used to read data from a single +** FTS segment node. See the following functions: +** +** nodeReaderInit() +** nodeReaderNext() +** nodeReaderRelease() +*/ +struct NodeReader { + const char *aNode; + int nNode; + int iOff; /* Current offset within aNode[] */ + + /* Output variables. Containing the current node entry. */ + sqlite3_int64 iChild; /* Pointer to child node */ + Blob term; /* Current term */ + const char *aDoclist; /* Pointer to doclist */ + int nDoclist; /* Size of doclist in bytes */ +}; + +/* +** If *pRc is not SQLITE_OK when this function is called, it is a no-op. +** Otherwise, if the allocation at pBlob->a is not already at least nMin +** bytes in size, extend (realloc) it to be so. +** +** If an OOM error occurs, set *pRc to SQLITE_NOMEM and leave pBlob->a +** unmodified. Otherwise, if the allocation succeeds, update pBlob->nAlloc +** to reflect the new size of the pBlob->a[] buffer. +*/ +static void blobGrowBuffer(Blob *pBlob, int nMin, int *pRc){ + if( *pRc==SQLITE_OK && nMin>pBlob->nAlloc ){ + int nAlloc = nMin; + char *a = (char *)sqlite3_realloc64(pBlob->a, nAlloc); + if( a ){ + pBlob->nAlloc = nAlloc; + pBlob->a = a; + }else{ + *pRc = SQLITE_NOMEM; + } + } +} + +/* +** Attempt to advance the node-reader object passed as the first argument to +** the next entry on the node. +** +** Return an error code if an error occurs (SQLITE_NOMEM is possible). +** Otherwise return SQLITE_OK. If there is no next entry on the node +** (e.g. because the current entry is the last) set NodeReader->aNode to +** NULL to indicate EOF. Otherwise, populate the NodeReader structure output +** variables for the new entry. +*/ +static int nodeReaderNext(NodeReader *p){ + int bFirst = (p->term.n==0); /* True for first term on the node */ + int nPrefix = 0; /* Bytes to copy from previous term */ + int nSuffix = 0; /* Bytes to append to the prefix */ + int rc = SQLITE_OK; /* Return code */ + + assert( p->aNode ); + if( p->iChild && bFirst==0 ) p->iChild++; + if( p->iOff>=p->nNode ){ + /* EOF */ + p->aNode = 0; + }else{ + if( bFirst==0 ){ + p->iOff += fts3GetVarint32(&p->aNode[p->iOff], &nPrefix); + } + p->iOff += fts3GetVarint32(&p->aNode[p->iOff], &nSuffix); + + if( nPrefix>p->term.n || nSuffix>p->nNode-p->iOff || nSuffix==0 ){ + return FTS_CORRUPT_VTAB; + } + blobGrowBuffer(&p->term, nPrefix+nSuffix, &rc); + if( rc==SQLITE_OK && ALWAYS(p->term.a!=0) ){ + memcpy(&p->term.a[nPrefix], &p->aNode[p->iOff], nSuffix); + p->term.n = nPrefix+nSuffix; + p->iOff += nSuffix; + if( p->iChild==0 ){ + p->iOff += fts3GetVarint32(&p->aNode[p->iOff], &p->nDoclist); + if( (p->nNode-p->iOff)nDoclist ){ + return FTS_CORRUPT_VTAB; + } + p->aDoclist = &p->aNode[p->iOff]; + p->iOff += p->nDoclist; + } + } + } + + assert_fts3_nc( p->iOff<=p->nNode ); + return rc; +} + +/* +** Release all dynamic resources held by node-reader object *p. +*/ +static void nodeReaderRelease(NodeReader *p){ + sqlite3_free(p->term.a); +} + +/* +** Initialize a node-reader object to read the node in buffer aNode/nNode. +** +** If successful, SQLITE_OK is returned and the NodeReader object set to +** point to the first entry on the node (if any). Otherwise, an SQLite +** error code is returned. +*/ +static int nodeReaderInit(NodeReader *p, const char *aNode, int nNode){ + memset(p, 0, sizeof(NodeReader)); + p->aNode = aNode; + p->nNode = nNode; + + /* Figure out if this is a leaf or an internal node. */ + if( aNode && aNode[0] ){ + /* An internal node. */ + p->iOff = 1 + sqlite3Fts3GetVarint(&p->aNode[1], &p->iChild); + }else{ + p->iOff = 1; + } + + return aNode ? nodeReaderNext(p) : SQLITE_OK; +} + +/* +** This function is called while writing an FTS segment each time a leaf o +** node is finished and written to disk. The key (zTerm/nTerm) is guaranteed +** to be greater than the largest key on the node just written, but smaller +** than or equal to the first key that will be written to the next leaf +** node. +** +** The block id of the leaf node just written to disk may be found in +** (pWriter->aNodeWriter[0].iBlock) when this function is called. +*/ +static int fts3IncrmergePush( + Fts3Table *p, /* Fts3 table handle */ + IncrmergeWriter *pWriter, /* Writer object */ + const char *zTerm, /* Term to write to internal node */ + int nTerm /* Bytes at zTerm */ +){ + sqlite3_int64 iPtr = pWriter->aNodeWriter[0].iBlock; + int iLayer; + + assert( nTerm>0 ); + for(iLayer=1; ALWAYS(iLayeraNodeWriter[iLayer]; + int rc = SQLITE_OK; + int nPrefix; + int nSuffix; + int nSpace; + + /* Figure out how much space the key will consume if it is written to + ** the current node of layer iLayer. Due to the prefix compression, + ** the space required changes depending on which node the key is to + ** be added to. */ + nPrefix = fts3PrefixCompress(pNode->key.a, pNode->key.n, zTerm, nTerm); + nSuffix = nTerm - nPrefix; + if(nSuffix<=0 ) return FTS_CORRUPT_VTAB; + nSpace = sqlite3Fts3VarintLen(nPrefix); + nSpace += sqlite3Fts3VarintLen(nSuffix) + nSuffix; + + if( pNode->key.n==0 || (pNode->block.n + nSpace)<=p->nNodeSize ){ + /* If the current node of layer iLayer contains zero keys, or if adding + ** the key to it will not cause it to grow to larger than nNodeSize + ** bytes in size, write the key here. */ + + Blob *pBlk = &pNode->block; + if( pBlk->n==0 ){ + blobGrowBuffer(pBlk, p->nNodeSize, &rc); + if( rc==SQLITE_OK ){ + pBlk->a[0] = (char)iLayer; + pBlk->n = 1 + sqlite3Fts3PutVarint(&pBlk->a[1], iPtr); + } + } + blobGrowBuffer(pBlk, pBlk->n + nSpace, &rc); + blobGrowBuffer(&pNode->key, nTerm, &rc); + + if( rc==SQLITE_OK ){ + if( pNode->key.n ){ + pBlk->n += sqlite3Fts3PutVarint(&pBlk->a[pBlk->n], nPrefix); + } + pBlk->n += sqlite3Fts3PutVarint(&pBlk->a[pBlk->n], nSuffix); + assert( nPrefix+nSuffix<=nTerm ); + assert( nPrefix>=0 ); + memcpy(&pBlk->a[pBlk->n], &zTerm[nPrefix], nSuffix); + pBlk->n += nSuffix; + + memcpy(pNode->key.a, zTerm, nTerm); + pNode->key.n = nTerm; + } + }else{ + /* Otherwise, flush the current node of layer iLayer to disk. + ** Then allocate a new, empty sibling node. The key will be written + ** into the parent of this node. */ + rc = fts3WriteSegment(p, pNode->iBlock, pNode->block.a, pNode->block.n); + + assert( pNode->block.nAlloc>=p->nNodeSize ); + pNode->block.a[0] = (char)iLayer; + pNode->block.n = 1 + sqlite3Fts3PutVarint(&pNode->block.a[1], iPtr+1); + + iNextPtr = pNode->iBlock; + pNode->iBlock++; + pNode->key.n = 0; + } + + if( rc!=SQLITE_OK || iNextPtr==0 ) return rc; + iPtr = iNextPtr; + } + + assert( 0 ); + return 0; +} + +/* +** Append a term and (optionally) doclist to the FTS segment node currently +** stored in blob *pNode. The node need not contain any terms, but the +** header must be written before this function is called. +** +** A node header is a single 0x00 byte for a leaf node, or a height varint +** followed by the left-hand-child varint for an internal node. +** +** The term to be appended is passed via arguments zTerm/nTerm. For a +** leaf node, the doclist is passed as aDoclist/nDoclist. For an internal +** node, both aDoclist and nDoclist must be passed 0. +** +** If the size of the value in blob pPrev is zero, then this is the first +** term written to the node. Otherwise, pPrev contains a copy of the +** previous term. Before this function returns, it is updated to contain a +** copy of zTerm/nTerm. +** +** It is assumed that the buffer associated with pNode is already large +** enough to accommodate the new entry. The buffer associated with pPrev +** is extended by this function if required. +** +** If an error (i.e. OOM condition) occurs, an SQLite error code is +** returned. Otherwise, SQLITE_OK. +*/ +static int fts3AppendToNode( + Blob *pNode, /* Current node image to append to */ + Blob *pPrev, /* Buffer containing previous term written */ + const char *zTerm, /* New term to write */ + int nTerm, /* Size of zTerm in bytes */ + const char *aDoclist, /* Doclist (or NULL) to write */ + int nDoclist /* Size of aDoclist in bytes */ +){ + int rc = SQLITE_OK; /* Return code */ + int bFirst = (pPrev->n==0); /* True if this is the first term written */ + int nPrefix; /* Size of term prefix in bytes */ + int nSuffix; /* Size of term suffix in bytes */ + + /* Node must have already been started. There must be a doclist for a + ** leaf node, and there must not be a doclist for an internal node. */ + assert( pNode->n>0 ); + assert_fts3_nc( (pNode->a[0]=='\0')==(aDoclist!=0) ); + + blobGrowBuffer(pPrev, nTerm, &rc); + if( rc!=SQLITE_OK ) return rc; + assert( pPrev!=0 ); + assert( pPrev->a!=0 ); + + nPrefix = fts3PrefixCompress(pPrev->a, pPrev->n, zTerm, nTerm); + nSuffix = nTerm - nPrefix; + if( nSuffix<=0 ) return FTS_CORRUPT_VTAB; + memcpy(pPrev->a, zTerm, nTerm); + pPrev->n = nTerm; + + if( bFirst==0 ){ + pNode->n += sqlite3Fts3PutVarint(&pNode->a[pNode->n], nPrefix); + } + pNode->n += sqlite3Fts3PutVarint(&pNode->a[pNode->n], nSuffix); + memcpy(&pNode->a[pNode->n], &zTerm[nPrefix], nSuffix); + pNode->n += nSuffix; + + if( aDoclist ){ + pNode->n += sqlite3Fts3PutVarint(&pNode->a[pNode->n], nDoclist); + memcpy(&pNode->a[pNode->n], aDoclist, nDoclist); + pNode->n += nDoclist; + } + + assert( pNode->n<=pNode->nAlloc ); + + return SQLITE_OK; +} + +/* +** Append the current term and doclist pointed to by cursor pCsr to the +** appendable b-tree segment opened for writing by pWriter. +** +** Return SQLITE_OK if successful, or an SQLite error code otherwise. +*/ +static int fts3IncrmergeAppend( + Fts3Table *p, /* Fts3 table handle */ + IncrmergeWriter *pWriter, /* Writer object */ + Fts3MultiSegReader *pCsr /* Cursor containing term and doclist */ +){ + const char *zTerm = pCsr->zTerm; + int nTerm = pCsr->nTerm; + const char *aDoclist = pCsr->aDoclist; + int nDoclist = pCsr->nDoclist; + int rc = SQLITE_OK; /* Return code */ + int nSpace; /* Total space in bytes required on leaf */ + int nPrefix; /* Size of prefix shared with previous term */ + int nSuffix; /* Size of suffix (nTerm - nPrefix) */ + NodeWriter *pLeaf; /* Object used to write leaf nodes */ + + pLeaf = &pWriter->aNodeWriter[0]; + nPrefix = fts3PrefixCompress(pLeaf->key.a, pLeaf->key.n, zTerm, nTerm); + nSuffix = nTerm - nPrefix; + if(nSuffix<=0 ) return FTS_CORRUPT_VTAB; + + nSpace = sqlite3Fts3VarintLen(nPrefix); + nSpace += sqlite3Fts3VarintLen(nSuffix) + nSuffix; + nSpace += sqlite3Fts3VarintLen(nDoclist) + nDoclist; + + /* If the current block is not empty, and if adding this term/doclist + ** to the current block would make it larger than Fts3Table.nNodeSize bytes, + ** and if there is still room for another leaf page, write this block out to + ** the database. */ + if( pLeaf->block.n>0 + && (pLeaf->block.n + nSpace)>p->nNodeSize + && pLeaf->iBlock < (pWriter->iStart + pWriter->nLeafEst) + ){ + rc = fts3WriteSegment(p, pLeaf->iBlock, pLeaf->block.a, pLeaf->block.n); + pWriter->nWork++; + + /* Add the current term to the parent node. The term added to the + ** parent must: + ** + ** a) be greater than the largest term on the leaf node just written + ** to the database (still available in pLeaf->key), and + ** + ** b) be less than or equal to the term about to be added to the new + ** leaf node (zTerm/nTerm). + ** + ** In other words, it must be the prefix of zTerm 1 byte longer than + ** the common prefix (if any) of zTerm and pWriter->zTerm. + */ + if( rc==SQLITE_OK ){ + rc = fts3IncrmergePush(p, pWriter, zTerm, nPrefix+1); + } + + /* Advance to the next output block */ + pLeaf->iBlock++; + pLeaf->key.n = 0; + pLeaf->block.n = 0; + + nSuffix = nTerm; + nSpace = 1; + nSpace += sqlite3Fts3VarintLen(nSuffix) + nSuffix; + nSpace += sqlite3Fts3VarintLen(nDoclist) + nDoclist; + } + + pWriter->nLeafData += nSpace; + blobGrowBuffer(&pLeaf->block, pLeaf->block.n + nSpace, &rc); + if( rc==SQLITE_OK ){ + if( pLeaf->block.n==0 ){ + pLeaf->block.n = 1; + pLeaf->block.a[0] = '\0'; + } + rc = fts3AppendToNode( + &pLeaf->block, &pLeaf->key, zTerm, nTerm, aDoclist, nDoclist + ); + } + + return rc; +} + +/* +** This function is called to release all dynamic resources held by the +** merge-writer object pWriter, and if no error has occurred, to flush +** all outstanding node buffers held by pWriter to disk. +** +** If *pRc is not SQLITE_OK when this function is called, then no attempt +** is made to write any data to disk. Instead, this function serves only +** to release outstanding resources. +** +** Otherwise, if *pRc is initially SQLITE_OK and an error occurs while +** flushing buffers to disk, *pRc is set to an SQLite error code before +** returning. +*/ +static void fts3IncrmergeRelease( + Fts3Table *p, /* FTS3 table handle */ + IncrmergeWriter *pWriter, /* Merge-writer object */ + int *pRc /* IN/OUT: Error code */ +){ + int i; /* Used to iterate through non-root layers */ + int iRoot; /* Index of root in pWriter->aNodeWriter */ + NodeWriter *pRoot; /* NodeWriter for root node */ + int rc = *pRc; /* Error code */ + + /* Set iRoot to the index in pWriter->aNodeWriter[] of the output segment + ** root node. If the segment fits entirely on a single leaf node, iRoot + ** will be set to 0. If the root node is the parent of the leaves, iRoot + ** will be 1. And so on. */ + for(iRoot=FTS_MAX_APPENDABLE_HEIGHT-1; iRoot>=0; iRoot--){ + NodeWriter *pNode = &pWriter->aNodeWriter[iRoot]; + if( pNode->block.n>0 ) break; + assert( *pRc || pNode->block.nAlloc==0 ); + assert( *pRc || pNode->key.nAlloc==0 ); + sqlite3_free(pNode->block.a); + sqlite3_free(pNode->key.a); + } + + /* Empty output segment. This is a no-op. */ + if( iRoot<0 ) return; + + /* The entire output segment fits on a single node. Normally, this means + ** the node would be stored as a blob in the "root" column of the %_segdir + ** table. However, this is not permitted in this case. The problem is that + ** space has already been reserved in the %_segments table, and so the + ** start_block and end_block fields of the %_segdir table must be populated. + ** And, by design or by accident, released versions of FTS cannot handle + ** segments that fit entirely on the root node with start_block!=0. + ** + ** Instead, create a synthetic root node that contains nothing but a + ** pointer to the single content node. So that the segment consists of a + ** single leaf and a single interior (root) node. + ** + ** Todo: Better might be to defer allocating space in the %_segments + ** table until we are sure it is needed. + */ + if( iRoot==0 ){ + Blob *pBlock = &pWriter->aNodeWriter[1].block; + blobGrowBuffer(pBlock, 1 + FTS3_VARINT_MAX, &rc); + if( rc==SQLITE_OK ){ + pBlock->a[0] = 0x01; + pBlock->n = 1 + sqlite3Fts3PutVarint( + &pBlock->a[1], pWriter->aNodeWriter[0].iBlock + ); + } + iRoot = 1; + } + pRoot = &pWriter->aNodeWriter[iRoot]; + + /* Flush all currently outstanding nodes to disk. */ + for(i=0; iaNodeWriter[i]; + if( pNode->block.n>0 && rc==SQLITE_OK ){ + rc = fts3WriteSegment(p, pNode->iBlock, pNode->block.a, pNode->block.n); + } + sqlite3_free(pNode->block.a); + sqlite3_free(pNode->key.a); + } + + /* Write the %_segdir record. */ + if( rc==SQLITE_OK ){ + rc = fts3WriteSegdir(p, + pWriter->iAbsLevel+1, /* level */ + pWriter->iIdx, /* idx */ + pWriter->iStart, /* start_block */ + pWriter->aNodeWriter[0].iBlock, /* leaves_end_block */ + pWriter->iEnd, /* end_block */ + (pWriter->bNoLeafData==0 ? pWriter->nLeafData : 0), /* end_block */ + pRoot->block.a, pRoot->block.n /* root */ + ); + } + sqlite3_free(pRoot->block.a); + sqlite3_free(pRoot->key.a); + + *pRc = rc; +} + +/* +** Compare the term in buffer zLhs (size in bytes nLhs) with that in +** zRhs (size in bytes nRhs) using memcmp. If one term is a prefix of +** the other, it is considered to be smaller than the other. +** +** Return -ve if zLhs is smaller than zRhs, 0 if it is equal, or +ve +** if it is greater. +*/ +static int fts3TermCmp( + const char *zLhs, int nLhs, /* LHS of comparison */ + const char *zRhs, int nRhs /* RHS of comparison */ +){ + int nCmp = MIN(nLhs, nRhs); + int res; + + if( nCmp && ALWAYS(zLhs) && ALWAYS(zRhs) ){ + res = memcmp(zLhs, zRhs, nCmp); + }else{ + res = 0; + } + if( res==0 ) res = nLhs - nRhs; + + return res; +} + + +/* +** Query to see if the entry in the %_segments table with blockid iEnd is +** NULL. If no error occurs and the entry is NULL, set *pbRes 1 before +** returning. Otherwise, set *pbRes to 0. +** +** Or, if an error occurs while querying the database, return an SQLite +** error code. The final value of *pbRes is undefined in this case. +** +** This is used to test if a segment is an "appendable" segment. If it +** is, then a NULL entry has been inserted into the %_segments table +** with blockid %_segdir.end_block. +*/ +static int fts3IsAppendable(Fts3Table *p, sqlite3_int64 iEnd, int *pbRes){ + int bRes = 0; /* Result to set *pbRes to */ + sqlite3_stmt *pCheck = 0; /* Statement to query database with */ + int rc; /* Return code */ + + rc = fts3SqlStmt(p, SQL_SEGMENT_IS_APPENDABLE, &pCheck, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pCheck, 1, iEnd); + if( SQLITE_ROW==sqlite3_step(pCheck) ) bRes = 1; + rc = sqlite3_reset(pCheck); + } + + *pbRes = bRes; + return rc; +} + +/* +** This function is called when initializing an incremental-merge operation. +** It checks if the existing segment with index value iIdx at absolute level +** (iAbsLevel+1) can be appended to by the incremental merge. If it can, the +** merge-writer object *pWriter is initialized to write to it. +** +** An existing segment can be appended to by an incremental merge if: +** +** * It was initially created as an appendable segment (with all required +** space pre-allocated), and +** +** * The first key read from the input (arguments zKey and nKey) is +** greater than the largest key currently stored in the potential +** output segment. +*/ +static int fts3IncrmergeLoad( + Fts3Table *p, /* Fts3 table handle */ + sqlite3_int64 iAbsLevel, /* Absolute level of input segments */ + int iIdx, /* Index of candidate output segment */ + const char *zKey, /* First key to write */ + int nKey, /* Number of bytes in nKey */ + IncrmergeWriter *pWriter /* Populate this object */ +){ + int rc; /* Return code */ + sqlite3_stmt *pSelect = 0; /* SELECT to read %_segdir entry */ + + rc = fts3SqlStmt(p, SQL_SELECT_SEGDIR, &pSelect, 0); + if( rc==SQLITE_OK ){ + sqlite3_int64 iStart = 0; /* Value of %_segdir.start_block */ + sqlite3_int64 iLeafEnd = 0; /* Value of %_segdir.leaves_end_block */ + sqlite3_int64 iEnd = 0; /* Value of %_segdir.end_block */ + const char *aRoot = 0; /* Pointer to %_segdir.root buffer */ + int nRoot = 0; /* Size of aRoot[] in bytes */ + int rc2; /* Return code from sqlite3_reset() */ + int bAppendable = 0; /* Set to true if segment is appendable */ + + /* Read the %_segdir entry for index iIdx absolute level (iAbsLevel+1) */ + sqlite3_bind_int64(pSelect, 1, iAbsLevel+1); + sqlite3_bind_int(pSelect, 2, iIdx); + if( sqlite3_step(pSelect)==SQLITE_ROW ){ + iStart = sqlite3_column_int64(pSelect, 1); + iLeafEnd = sqlite3_column_int64(pSelect, 2); + fts3ReadEndBlockField(pSelect, 3, &iEnd, &pWriter->nLeafData); + if( pWriter->nLeafData<0 ){ + pWriter->nLeafData = pWriter->nLeafData * -1; + } + pWriter->bNoLeafData = (pWriter->nLeafData==0); + nRoot = sqlite3_column_bytes(pSelect, 4); + aRoot = sqlite3_column_blob(pSelect, 4); + if( aRoot==0 ){ + sqlite3_reset(pSelect); + return nRoot ? SQLITE_NOMEM : FTS_CORRUPT_VTAB; + } + }else{ + return sqlite3_reset(pSelect); + } + + /* Check for the zero-length marker in the %_segments table */ + rc = fts3IsAppendable(p, iEnd, &bAppendable); + + /* Check that zKey/nKey is larger than the largest key the candidate */ + if( rc==SQLITE_OK && bAppendable ){ + char *aLeaf = 0; + int nLeaf = 0; + + rc = sqlite3Fts3ReadBlock(p, iLeafEnd, &aLeaf, &nLeaf, 0); + if( rc==SQLITE_OK ){ + NodeReader reader; + for(rc = nodeReaderInit(&reader, aLeaf, nLeaf); + rc==SQLITE_OK && reader.aNode; + rc = nodeReaderNext(&reader) + ){ + assert( reader.aNode ); + } + if( fts3TermCmp(zKey, nKey, reader.term.a, reader.term.n)<=0 ){ + bAppendable = 0; + } + nodeReaderRelease(&reader); + } + sqlite3_free(aLeaf); + } + + if( rc==SQLITE_OK && bAppendable ){ + /* It is possible to append to this segment. Set up the IncrmergeWriter + ** object to do so. */ + int i; + int nHeight = (int)aRoot[0]; + NodeWriter *pNode; + if( nHeight<1 || nHeight>=FTS_MAX_APPENDABLE_HEIGHT ){ + sqlite3_reset(pSelect); + return FTS_CORRUPT_VTAB; + } + + pWriter->nLeafEst = (int)((iEnd - iStart) + 1)/FTS_MAX_APPENDABLE_HEIGHT; + pWriter->iStart = iStart; + pWriter->iEnd = iEnd; + pWriter->iAbsLevel = iAbsLevel; + pWriter->iIdx = iIdx; + + for(i=nHeight+1; iaNodeWriter[i].iBlock = pWriter->iStart + i*pWriter->nLeafEst; + } + + pNode = &pWriter->aNodeWriter[nHeight]; + pNode->iBlock = pWriter->iStart + pWriter->nLeafEst*nHeight; + blobGrowBuffer(&pNode->block, + MAX(nRoot, p->nNodeSize)+FTS3_NODE_PADDING, &rc + ); + if( rc==SQLITE_OK ){ + memcpy(pNode->block.a, aRoot, nRoot); + pNode->block.n = nRoot; + memset(&pNode->block.a[nRoot], 0, FTS3_NODE_PADDING); + } + + for(i=nHeight; i>=0 && rc==SQLITE_OK; i--){ + NodeReader reader; + memset(&reader, 0, sizeof(reader)); + pNode = &pWriter->aNodeWriter[i]; + + if( pNode->block.a){ + rc = nodeReaderInit(&reader, pNode->block.a, pNode->block.n); + while( reader.aNode && rc==SQLITE_OK ) rc = nodeReaderNext(&reader); + blobGrowBuffer(&pNode->key, reader.term.n, &rc); + if( rc==SQLITE_OK ){ + assert_fts3_nc( reader.term.n>0 || reader.aNode==0 ); + if( reader.term.n>0 ){ + memcpy(pNode->key.a, reader.term.a, reader.term.n); + } + pNode->key.n = reader.term.n; + if( i>0 ){ + char *aBlock = 0; + int nBlock = 0; + pNode = &pWriter->aNodeWriter[i-1]; + pNode->iBlock = reader.iChild; + rc = sqlite3Fts3ReadBlock(p, reader.iChild, &aBlock, &nBlock,0); + blobGrowBuffer(&pNode->block, + MAX(nBlock, p->nNodeSize)+FTS3_NODE_PADDING, &rc + ); + if( rc==SQLITE_OK ){ + memcpy(pNode->block.a, aBlock, nBlock); + pNode->block.n = nBlock; + memset(&pNode->block.a[nBlock], 0, FTS3_NODE_PADDING); + } + sqlite3_free(aBlock); + } + } + } + nodeReaderRelease(&reader); + } + } + + rc2 = sqlite3_reset(pSelect); + if( rc==SQLITE_OK ) rc = rc2; + } + + return rc; +} + +/* +** Determine the largest segment index value that exists within absolute +** level iAbsLevel+1. If no error occurs, set *piIdx to this value plus +** one before returning SQLITE_OK. Or, if there are no segments at all +** within level iAbsLevel, set *piIdx to zero. +** +** If an error occurs, return an SQLite error code. The final value of +** *piIdx is undefined in this case. +*/ +static int fts3IncrmergeOutputIdx( + Fts3Table *p, /* FTS Table handle */ + sqlite3_int64 iAbsLevel, /* Absolute index of input segments */ + int *piIdx /* OUT: Next free index at iAbsLevel+1 */ +){ + int rc; + sqlite3_stmt *pOutputIdx = 0; /* SQL used to find output index */ + + rc = fts3SqlStmt(p, SQL_NEXT_SEGMENT_INDEX, &pOutputIdx, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pOutputIdx, 1, iAbsLevel+1); + sqlite3_step(pOutputIdx); + *piIdx = sqlite3_column_int(pOutputIdx, 0); + rc = sqlite3_reset(pOutputIdx); + } + + return rc; +} + +/* +** Allocate an appendable output segment on absolute level iAbsLevel+1 +** with idx value iIdx. +** +** In the %_segdir table, a segment is defined by the values in three +** columns: +** +** start_block +** leaves_end_block +** end_block +** +** When an appendable segment is allocated, it is estimated that the +** maximum number of leaf blocks that may be required is the sum of the +** number of leaf blocks consumed by the input segments, plus the number +** of input segments, multiplied by two. This value is stored in stack +** variable nLeafEst. +** +** A total of 16*nLeafEst blocks are allocated when an appendable segment +** is created ((1 + end_block - start_block)==16*nLeafEst). The contiguous +** array of leaf nodes starts at the first block allocated. The array +** of interior nodes that are parents of the leaf nodes start at block +** (start_block + (1 + end_block - start_block) / 16). And so on. +** +** In the actual code below, the value "16" is replaced with the +** pre-processor macro FTS_MAX_APPENDABLE_HEIGHT. +*/ +static int fts3IncrmergeWriter( + Fts3Table *p, /* Fts3 table handle */ + sqlite3_int64 iAbsLevel, /* Absolute level of input segments */ + int iIdx, /* Index of new output segment */ + Fts3MultiSegReader *pCsr, /* Cursor that data will be read from */ + IncrmergeWriter *pWriter /* Populate this object */ +){ + int rc; /* Return Code */ + int i; /* Iterator variable */ + i64 nLeafEst = 0; /* Blocks allocated for leaf nodes */ + sqlite3_stmt *pLeafEst = 0; /* SQL used to determine nLeafEst */ + sqlite3_stmt *pFirstBlock = 0; /* SQL used to determine first block */ + + /* Calculate nLeafEst. */ + rc = fts3SqlStmt(p, SQL_MAX_LEAF_NODE_ESTIMATE, &pLeafEst, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pLeafEst, 1, iAbsLevel); + sqlite3_bind_int64(pLeafEst, 2, pCsr->nSegment); + if( SQLITE_ROW==sqlite3_step(pLeafEst) ){ + nLeafEst = sqlite3_column_int64(pLeafEst, 0); + } + rc = sqlite3_reset(pLeafEst); + } + if( rc!=SQLITE_OK ) return rc; + + /* Calculate the first block to use in the output segment */ + rc = fts3SqlStmt(p, SQL_NEXT_SEGMENTS_ID, &pFirstBlock, 0); + if( rc==SQLITE_OK ){ + if( SQLITE_ROW==sqlite3_step(pFirstBlock) ){ + pWriter->iStart = sqlite3_column_int64(pFirstBlock, 0); + pWriter->iEnd = pWriter->iStart - 1; + pWriter->iEnd += nLeafEst * FTS_MAX_APPENDABLE_HEIGHT; + } + rc = sqlite3_reset(pFirstBlock); + } + if( rc!=SQLITE_OK ) return rc; + + /* Insert the marker in the %_segments table to make sure nobody tries + ** to steal the space just allocated. This is also used to identify + ** appendable segments. */ + rc = fts3WriteSegment(p, pWriter->iEnd, 0, 0); + if( rc!=SQLITE_OK ) return rc; + + pWriter->iAbsLevel = iAbsLevel; + pWriter->nLeafEst = nLeafEst; + pWriter->iIdx = iIdx; + + /* Set up the array of NodeWriter objects */ + for(i=0; iaNodeWriter[i].iBlock = pWriter->iStart + i*pWriter->nLeafEst; + } + return SQLITE_OK; +} + +/* +** Remove an entry from the %_segdir table. This involves running the +** following two statements: +** +** DELETE FROM %_segdir WHERE level = :iAbsLevel AND idx = :iIdx +** UPDATE %_segdir SET idx = idx - 1 WHERE level = :iAbsLevel AND idx > :iIdx +** +** The DELETE statement removes the specific %_segdir level. The UPDATE +** statement ensures that the remaining segments have contiguously allocated +** idx values. +*/ +static int fts3RemoveSegdirEntry( + Fts3Table *p, /* FTS3 table handle */ + sqlite3_int64 iAbsLevel, /* Absolute level to delete from */ + int iIdx /* Index of %_segdir entry to delete */ +){ + int rc; /* Return code */ + sqlite3_stmt *pDelete = 0; /* DELETE statement */ + + rc = fts3SqlStmt(p, SQL_DELETE_SEGDIR_ENTRY, &pDelete, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pDelete, 1, iAbsLevel); + sqlite3_bind_int(pDelete, 2, iIdx); + sqlite3_step(pDelete); + rc = sqlite3_reset(pDelete); + } + + return rc; +} + +/* +** One or more segments have just been removed from absolute level iAbsLevel. +** Update the 'idx' values of the remaining segments in the level so that +** the idx values are a contiguous sequence starting from 0. +*/ +static int fts3RepackSegdirLevel( + Fts3Table *p, /* FTS3 table handle */ + sqlite3_int64 iAbsLevel /* Absolute level to repack */ +){ + int rc; /* Return code */ + int *aIdx = 0; /* Array of remaining idx values */ + int nIdx = 0; /* Valid entries in aIdx[] */ + int nAlloc = 0; /* Allocated size of aIdx[] */ + int i; /* Iterator variable */ + sqlite3_stmt *pSelect = 0; /* Select statement to read idx values */ + sqlite3_stmt *pUpdate = 0; /* Update statement to modify idx values */ + + rc = fts3SqlStmt(p, SQL_SELECT_INDEXES, &pSelect, 0); + if( rc==SQLITE_OK ){ + int rc2; + sqlite3_bind_int64(pSelect, 1, iAbsLevel); + while( SQLITE_ROW==sqlite3_step(pSelect) ){ + if( nIdx>=nAlloc ){ + int *aNew; + nAlloc += 16; + aNew = sqlite3_realloc64(aIdx, nAlloc*sizeof(int)); + if( !aNew ){ + rc = SQLITE_NOMEM; + break; + } + aIdx = aNew; + } + aIdx[nIdx++] = sqlite3_column_int(pSelect, 0); + } + rc2 = sqlite3_reset(pSelect); + if( rc==SQLITE_OK ) rc = rc2; + } + + if( rc==SQLITE_OK ){ + rc = fts3SqlStmt(p, SQL_SHIFT_SEGDIR_ENTRY, &pUpdate, 0); + } + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pUpdate, 2, iAbsLevel); + } + + assert( p->bIgnoreSavepoint==0 ); + p->bIgnoreSavepoint = 1; + for(i=0; rc==SQLITE_OK && ibIgnoreSavepoint = 0; + + sqlite3_free(aIdx); + return rc; +} + +static void fts3StartNode(Blob *pNode, int iHeight, sqlite3_int64 iChild){ + pNode->a[0] = (char)iHeight; + if( iChild ){ + assert( pNode->nAlloc>=1+sqlite3Fts3VarintLen(iChild) ); + pNode->n = 1 + sqlite3Fts3PutVarint(&pNode->a[1], iChild); + }else{ + assert( pNode->nAlloc>=1 ); + pNode->n = 1; + } +} + +/* +** The first two arguments are a pointer to and the size of a segment b-tree +** node. The node may be a leaf or an internal node. +** +** This function creates a new node image in blob object *pNew by copying +** all terms that are greater than or equal to zTerm/nTerm (for leaf nodes) +** or greater than zTerm/nTerm (for internal nodes) from aNode/nNode. +*/ +static int fts3TruncateNode( + const char *aNode, /* Current node image */ + int nNode, /* Size of aNode in bytes */ + Blob *pNew, /* OUT: Write new node image here */ + const char *zTerm, /* Omit all terms smaller than this */ + int nTerm, /* Size of zTerm in bytes */ + sqlite3_int64 *piBlock /* OUT: Block number in next layer down */ +){ + NodeReader reader; /* Reader object */ + Blob prev = {0, 0, 0}; /* Previous term written to new node */ + int rc = SQLITE_OK; /* Return code */ + int bLeaf; /* True for a leaf node */ + + if( nNode<1 ) return FTS_CORRUPT_VTAB; + bLeaf = aNode[0]=='\0'; + + /* Allocate required output space */ + blobGrowBuffer(pNew, nNode, &rc); + if( rc!=SQLITE_OK ) return rc; + pNew->n = 0; + + /* Populate new node buffer */ + for(rc = nodeReaderInit(&reader, aNode, nNode); + rc==SQLITE_OK && reader.aNode; + rc = nodeReaderNext(&reader) + ){ + if( pNew->n==0 ){ + int res = fts3TermCmp(reader.term.a, reader.term.n, zTerm, nTerm); + if( res<0 || (bLeaf==0 && res==0) ) continue; + fts3StartNode(pNew, (int)aNode[0], reader.iChild); + *piBlock = reader.iChild; + } + rc = fts3AppendToNode( + pNew, &prev, reader.term.a, reader.term.n, + reader.aDoclist, reader.nDoclist + ); + if( rc!=SQLITE_OK ) break; + } + if( pNew->n==0 ){ + fts3StartNode(pNew, (int)aNode[0], reader.iChild); + *piBlock = reader.iChild; + } + assert( pNew->n<=pNew->nAlloc ); + + nodeReaderRelease(&reader); + sqlite3_free(prev.a); + return rc; +} + +/* +** Remove all terms smaller than zTerm/nTerm from segment iIdx in absolute +** level iAbsLevel. This may involve deleting entries from the %_segments +** table, and modifying existing entries in both the %_segments and %_segdir +** tables. +** +** SQLITE_OK is returned if the segment is updated successfully. Or an +** SQLite error code otherwise. +*/ +static int fts3TruncateSegment( + Fts3Table *p, /* FTS3 table handle */ + sqlite3_int64 iAbsLevel, /* Absolute level of segment to modify */ + int iIdx, /* Index within level of segment to modify */ + const char *zTerm, /* Remove terms smaller than this */ + int nTerm /* Number of bytes in buffer zTerm */ +){ + int rc = SQLITE_OK; /* Return code */ + Blob root = {0,0,0}; /* New root page image */ + Blob block = {0,0,0}; /* Buffer used for any other block */ + sqlite3_int64 iBlock = 0; /* Block id */ + sqlite3_int64 iNewStart = 0; /* New value for iStartBlock */ + sqlite3_int64 iOldStart = 0; /* Old value for iStartBlock */ + sqlite3_stmt *pFetch = 0; /* Statement used to fetch segdir */ + + rc = fts3SqlStmt(p, SQL_SELECT_SEGDIR, &pFetch, 0); + if( rc==SQLITE_OK ){ + int rc2; /* sqlite3_reset() return code */ + sqlite3_bind_int64(pFetch, 1, iAbsLevel); + sqlite3_bind_int(pFetch, 2, iIdx); + if( SQLITE_ROW==sqlite3_step(pFetch) ){ + const char *aRoot = sqlite3_column_blob(pFetch, 4); + int nRoot = sqlite3_column_bytes(pFetch, 4); + iOldStart = sqlite3_column_int64(pFetch, 1); + rc = fts3TruncateNode(aRoot, nRoot, &root, zTerm, nTerm, &iBlock); + } + rc2 = sqlite3_reset(pFetch); + if( rc==SQLITE_OK ) rc = rc2; + } + + while( rc==SQLITE_OK && iBlock ){ + char *aBlock = 0; + int nBlock = 0; + iNewStart = iBlock; + + rc = sqlite3Fts3ReadBlock(p, iBlock, &aBlock, &nBlock, 0); + if( rc==SQLITE_OK ){ + rc = fts3TruncateNode(aBlock, nBlock, &block, zTerm, nTerm, &iBlock); + } + if( rc==SQLITE_OK ){ + rc = fts3WriteSegment(p, iNewStart, block.a, block.n); + } + sqlite3_free(aBlock); + } + + /* Variable iNewStart now contains the first valid leaf node. */ + if( rc==SQLITE_OK && iNewStart ){ + sqlite3_stmt *pDel = 0; + rc = fts3SqlStmt(p, SQL_DELETE_SEGMENTS_RANGE, &pDel, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pDel, 1, iOldStart); + sqlite3_bind_int64(pDel, 2, iNewStart-1); + sqlite3_step(pDel); + rc = sqlite3_reset(pDel); + } + } + + if( rc==SQLITE_OK ){ + sqlite3_stmt *pChomp = 0; + rc = fts3SqlStmt(p, SQL_CHOMP_SEGDIR, &pChomp, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pChomp, 1, iNewStart); + sqlite3_bind_blob(pChomp, 2, root.a, root.n, SQLITE_STATIC); + sqlite3_bind_int64(pChomp, 3, iAbsLevel); + sqlite3_bind_int(pChomp, 4, iIdx); + sqlite3_step(pChomp); + rc = sqlite3_reset(pChomp); + sqlite3_bind_null(pChomp, 2); + } + } + + sqlite3_free(root.a); + sqlite3_free(block.a); + return rc; +} + +/* +** This function is called after an incrmental-merge operation has run to +** merge (or partially merge) two or more segments from absolute level +** iAbsLevel. +** +** Each input segment is either removed from the db completely (if all of +** its data was copied to the output segment by the incrmerge operation) +** or modified in place so that it no longer contains those entries that +** have been duplicated in the output segment. +*/ +static int fts3IncrmergeChomp( + Fts3Table *p, /* FTS table handle */ + sqlite3_int64 iAbsLevel, /* Absolute level containing segments */ + Fts3MultiSegReader *pCsr, /* Chomp all segments opened by this cursor */ + int *pnRem /* Number of segments not deleted */ +){ + int i; + int nRem = 0; + int rc = SQLITE_OK; + + for(i=pCsr->nSegment-1; i>=0 && rc==SQLITE_OK; i--){ + Fts3SegReader *pSeg = 0; + int j; + + /* Find the Fts3SegReader object with Fts3SegReader.iIdx==i. It is hiding + ** somewhere in the pCsr->apSegment[] array. */ + for(j=0; ALWAYS(jnSegment); j++){ + pSeg = pCsr->apSegment[j]; + if( pSeg->iIdx==i ) break; + } + assert( jnSegment && pSeg->iIdx==i ); + + if( pSeg->aNode==0 ){ + /* Seg-reader is at EOF. Remove the entire input segment. */ + rc = fts3DeleteSegment(p, pSeg); + if( rc==SQLITE_OK ){ + rc = fts3RemoveSegdirEntry(p, iAbsLevel, pSeg->iIdx); + } + *pnRem = 0; + }else{ + /* The incremental merge did not copy all the data from this + ** segment to the upper level. The segment is modified in place + ** so that it contains no keys smaller than zTerm/nTerm. */ + const char *zTerm = pSeg->zTerm; + int nTerm = pSeg->nTerm; + rc = fts3TruncateSegment(p, iAbsLevel, pSeg->iIdx, zTerm, nTerm); + nRem++; + } + } + + if( rc==SQLITE_OK && nRem!=pCsr->nSegment ){ + rc = fts3RepackSegdirLevel(p, iAbsLevel); + } + + *pnRem = nRem; + return rc; +} + +/* +** Store an incr-merge hint in the database. +*/ +static int fts3IncrmergeHintStore(Fts3Table *p, Blob *pHint){ + sqlite3_stmt *pReplace = 0; + int rc; /* Return code */ + + rc = fts3SqlStmt(p, SQL_REPLACE_STAT, &pReplace, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int(pReplace, 1, FTS_STAT_INCRMERGEHINT); + sqlite3_bind_blob(pReplace, 2, pHint->a, pHint->n, SQLITE_STATIC); + sqlite3_step(pReplace); + rc = sqlite3_reset(pReplace); + sqlite3_bind_null(pReplace, 2); + } + + return rc; +} + +/* +** Load an incr-merge hint from the database. The incr-merge hint, if one +** exists, is stored in the rowid==1 row of the %_stat table. +** +** If successful, populate blob *pHint with the value read from the %_stat +** table and return SQLITE_OK. Otherwise, if an error occurs, return an +** SQLite error code. +*/ +static int fts3IncrmergeHintLoad(Fts3Table *p, Blob *pHint){ + sqlite3_stmt *pSelect = 0; + int rc; + + pHint->n = 0; + rc = fts3SqlStmt(p, SQL_SELECT_STAT, &pSelect, 0); + if( rc==SQLITE_OK ){ + int rc2; + sqlite3_bind_int(pSelect, 1, FTS_STAT_INCRMERGEHINT); + if( SQLITE_ROW==sqlite3_step(pSelect) ){ + const char *aHint = sqlite3_column_blob(pSelect, 0); + int nHint = sqlite3_column_bytes(pSelect, 0); + if( aHint ){ + blobGrowBuffer(pHint, nHint, &rc); + if( rc==SQLITE_OK ){ + if( ALWAYS(pHint->a!=0) ) memcpy(pHint->a, aHint, nHint); + pHint->n = nHint; + } + } + } + rc2 = sqlite3_reset(pSelect); + if( rc==SQLITE_OK ) rc = rc2; + } + + return rc; +} + +/* +** If *pRc is not SQLITE_OK when this function is called, it is a no-op. +** Otherwise, append an entry to the hint stored in blob *pHint. Each entry +** consists of two varints, the absolute level number of the input segments +** and the number of input segments. +** +** If successful, leave *pRc set to SQLITE_OK and return. If an error occurs, +** set *pRc to an SQLite error code before returning. +*/ +static void fts3IncrmergeHintPush( + Blob *pHint, /* Hint blob to append to */ + i64 iAbsLevel, /* First varint to store in hint */ + int nInput, /* Second varint to store in hint */ + int *pRc /* IN/OUT: Error code */ +){ + blobGrowBuffer(pHint, pHint->n + 2*FTS3_VARINT_MAX, pRc); + if( *pRc==SQLITE_OK ){ + pHint->n += sqlite3Fts3PutVarint(&pHint->a[pHint->n], iAbsLevel); + pHint->n += sqlite3Fts3PutVarint(&pHint->a[pHint->n], (i64)nInput); + } +} + +/* +** Read the last entry (most recently pushed) from the hint blob *pHint +** and then remove the entry. Write the two values read to *piAbsLevel and +** *pnInput before returning. +** +** If no error occurs, return SQLITE_OK. If the hint blob in *pHint does +** not contain at least two valid varints, return SQLITE_CORRUPT_VTAB. +*/ +static int fts3IncrmergeHintPop(Blob *pHint, i64 *piAbsLevel, int *pnInput){ + const int nHint = pHint->n; + int i; + + i = pHint->n-1; + if( (pHint->a[i] & 0x80) ) return FTS_CORRUPT_VTAB; + while( i>0 && (pHint->a[i-1] & 0x80) ) i--; + if( i==0 ) return FTS_CORRUPT_VTAB; + i--; + while( i>0 && (pHint->a[i-1] & 0x80) ) i--; + + pHint->n = i; + i += sqlite3Fts3GetVarint(&pHint->a[i], piAbsLevel); + i += fts3GetVarint32(&pHint->a[i], pnInput); + assert( i<=nHint ); + if( i!=nHint ) return FTS_CORRUPT_VTAB; + + return SQLITE_OK; +} + + +/* +** Attempt an incremental merge that writes nMerge leaf blocks. +** +** Incremental merges happen nMin segments at a time. The segments +** to be merged are the nMin oldest segments (the ones with the smallest +** values for the _segdir.idx field) in the highest level that contains +** at least nMin segments. Multiple merges might occur in an attempt to +** write the quota of nMerge leaf blocks. +*/ +SQLITE_PRIVATE int sqlite3Fts3Incrmerge(Fts3Table *p, int nMerge, int nMin){ + int rc; /* Return code */ + int nRem = nMerge; /* Number of leaf pages yet to be written */ + Fts3MultiSegReader *pCsr; /* Cursor used to read input data */ + Fts3SegFilter *pFilter; /* Filter used with cursor pCsr */ + IncrmergeWriter *pWriter; /* Writer object */ + int nSeg = 0; /* Number of input segments */ + sqlite3_int64 iAbsLevel = 0; /* Absolute level number to work on */ + Blob hint = {0, 0, 0}; /* Hint read from %_stat table */ + int bDirtyHint = 0; /* True if blob 'hint' has been modified */ + + /* Allocate space for the cursor, filter and writer objects */ + const int nAlloc = sizeof(*pCsr) + sizeof(*pFilter) + sizeof(*pWriter); + pWriter = (IncrmergeWriter *)sqlite3_malloc64(nAlloc); + if( !pWriter ) return SQLITE_NOMEM; + pFilter = (Fts3SegFilter *)&pWriter[1]; + pCsr = (Fts3MultiSegReader *)&pFilter[1]; + + rc = fts3IncrmergeHintLoad(p, &hint); + while( rc==SQLITE_OK && nRem>0 ){ + const i64 nMod = FTS3_SEGDIR_MAXLEVEL * p->nIndex; + sqlite3_stmt *pFindLevel = 0; /* SQL used to determine iAbsLevel */ + int bUseHint = 0; /* True if attempting to append */ + int iIdx = 0; /* Largest idx in level (iAbsLevel+1) */ + + /* Search the %_segdir table for the absolute level with the smallest + ** relative level number that contains at least nMin segments, if any. + ** If one is found, set iAbsLevel to the absolute level number and + ** nSeg to nMin. If no level with at least nMin segments can be found, + ** set nSeg to -1. + */ + rc = fts3SqlStmt(p, SQL_FIND_MERGE_LEVEL, &pFindLevel, 0); + sqlite3_bind_int(pFindLevel, 1, MAX(2, nMin)); + if( sqlite3_step(pFindLevel)==SQLITE_ROW ){ + iAbsLevel = sqlite3_column_int64(pFindLevel, 0); + nSeg = sqlite3_column_int(pFindLevel, 1); + assert( nSeg>=2 ); + }else{ + nSeg = -1; + } + rc = sqlite3_reset(pFindLevel); + + /* If the hint read from the %_stat table is not empty, check if the + ** last entry in it specifies a relative level smaller than or equal + ** to the level identified by the block above (if any). If so, this + ** iteration of the loop will work on merging at the hinted level. + */ + if( rc==SQLITE_OK && hint.n ){ + int nHint = hint.n; + sqlite3_int64 iHintAbsLevel = 0; /* Hint level */ + int nHintSeg = 0; /* Hint number of segments */ + + rc = fts3IncrmergeHintPop(&hint, &iHintAbsLevel, &nHintSeg); + if( nSeg<0 || (iAbsLevel % nMod) >= (iHintAbsLevel % nMod) ){ + /* Based on the scan in the block above, it is known that there + ** are no levels with a relative level smaller than that of + ** iAbsLevel with more than nSeg segments, or if nSeg is -1, + ** no levels with more than nMin segments. Use this to limit the + ** value of nHintSeg to avoid a large memory allocation in case the + ** merge-hint is corrupt*/ + iAbsLevel = iHintAbsLevel; + nSeg = MIN(MAX(nMin,nSeg), nHintSeg); + bUseHint = 1; + bDirtyHint = 1; + }else{ + /* This undoes the effect of the HintPop() above - so that no entry + ** is removed from the hint blob. */ + hint.n = nHint; + } + } + + /* If nSeg is less that zero, then there is no level with at least + ** nMin segments and no hint in the %_stat table. No work to do. + ** Exit early in this case. */ + if( nSeg<=0 ) break; + + assert( nMod<=0x7FFFFFFF ); + if( iAbsLevel<0 || iAbsLevel>(nMod<<32) ){ + rc = FTS_CORRUPT_VTAB; + break; + } + + /* Open a cursor to iterate through the contents of the oldest nSeg + ** indexes of absolute level iAbsLevel. If this cursor is opened using + ** the 'hint' parameters, it is possible that there are less than nSeg + ** segments available in level iAbsLevel. In this case, no work is + ** done on iAbsLevel - fall through to the next iteration of the loop + ** to start work on some other level. */ + memset(pWriter, 0, nAlloc); + pFilter->flags = FTS3_SEGMENT_REQUIRE_POS; + + if( rc==SQLITE_OK ){ + rc = fts3IncrmergeOutputIdx(p, iAbsLevel, &iIdx); + assert( bUseHint==1 || bUseHint==0 ); + if( iIdx==0 || (bUseHint && iIdx==1) ){ + int bIgnore = 0; + rc = fts3SegmentIsMaxLevel(p, iAbsLevel+1, &bIgnore); + if( bIgnore ){ + pFilter->flags |= FTS3_SEGMENT_IGNORE_EMPTY; + } + } + } + + if( rc==SQLITE_OK ){ + rc = fts3IncrmergeCsr(p, iAbsLevel, nSeg, pCsr); + } + if( SQLITE_OK==rc && pCsr->nSegment==nSeg + && SQLITE_OK==(rc = sqlite3Fts3SegReaderStart(p, pCsr, pFilter)) + ){ + int bEmpty = 0; + rc = sqlite3Fts3SegReaderStep(p, pCsr); + if( rc==SQLITE_OK ){ + bEmpty = 1; + }else if( rc!=SQLITE_ROW ){ + sqlite3Fts3SegReaderFinish(pCsr); + break; + } + if( bUseHint && iIdx>0 ){ + const char *zKey = pCsr->zTerm; + int nKey = pCsr->nTerm; + rc = fts3IncrmergeLoad(p, iAbsLevel, iIdx-1, zKey, nKey, pWriter); + }else{ + rc = fts3IncrmergeWriter(p, iAbsLevel, iIdx, pCsr, pWriter); + } + + if( rc==SQLITE_OK && pWriter->nLeafEst ){ + fts3LogMerge(nSeg, iAbsLevel); + if( bEmpty==0 ){ + do { + rc = fts3IncrmergeAppend(p, pWriter, pCsr); + if( rc==SQLITE_OK ) rc = sqlite3Fts3SegReaderStep(p, pCsr); + if( pWriter->nWork>=nRem && rc==SQLITE_ROW ) rc = SQLITE_OK; + }while( rc==SQLITE_ROW ); + } + + /* Update or delete the input segments */ + if( rc==SQLITE_OK ){ + nRem -= (1 + pWriter->nWork); + rc = fts3IncrmergeChomp(p, iAbsLevel, pCsr, &nSeg); + if( nSeg!=0 ){ + bDirtyHint = 1; + fts3IncrmergeHintPush(&hint, iAbsLevel, nSeg, &rc); + } + } + } + + if( nSeg!=0 ){ + pWriter->nLeafData = pWriter->nLeafData * -1; + } + fts3IncrmergeRelease(p, pWriter, &rc); + if( nSeg==0 && pWriter->bNoLeafData==0 ){ + fts3PromoteSegments(p, iAbsLevel+1, pWriter->nLeafData); + } + } + + sqlite3Fts3SegReaderFinish(pCsr); + } + + /* Write the hint values into the %_stat table for the next incr-merger */ + if( bDirtyHint && rc==SQLITE_OK ){ + rc = fts3IncrmergeHintStore(p, &hint); + } + + sqlite3_free(pWriter); + sqlite3_free(hint.a); + return rc; +} + +/* +** Convert the text beginning at *pz into an integer and return +** its value. Advance *pz to point to the first character past +** the integer. +** +** This function used for parameters to merge= and incrmerge= +** commands. +*/ +static int fts3Getint(const char **pz){ + const char *z = *pz; + int i = 0; + while( (*z)>='0' && (*z)<='9' && i<214748363 ) i = 10*i + *(z++) - '0'; + *pz = z; + return i; +} + +/* +** Process statements of the form: +** +** INSERT INTO table(table) VALUES('merge=A,B'); +** +** A and B are integers that decode to be the number of leaf pages +** written for the merge, and the minimum number of segments on a level +** before it will be selected for a merge, respectively. +*/ +static int fts3DoIncrmerge( + Fts3Table *p, /* FTS3 table handle */ + const char *zParam /* Nul-terminated string containing "A,B" */ +){ + int rc; + int nMin = (MergeCount(p) / 2); + int nMerge = 0; + const char *z = zParam; + + /* Read the first integer value */ + nMerge = fts3Getint(&z); + + /* If the first integer value is followed by a ',', read the second + ** integer value. */ + if( z[0]==',' && z[1]!='\0' ){ + z++; + nMin = fts3Getint(&z); + } + + if( z[0]!='\0' || nMin<2 ){ + rc = SQLITE_ERROR; + }else{ + rc = SQLITE_OK; + if( !p->bHasStat ){ + assert( p->bFts4==0 ); + sqlite3Fts3CreateStatTable(&rc, p); + } + if( rc==SQLITE_OK ){ + rc = sqlite3Fts3Incrmerge(p, nMerge, nMin); + } + sqlite3Fts3SegmentsClose(p); + } + return rc; +} + +/* +** Process statements of the form: +** +** INSERT INTO table(table) VALUES('automerge=X'); +** +** where X is an integer. X==0 means to turn automerge off. X!=0 means +** turn it on. The setting is persistent. +*/ +static int fts3DoAutoincrmerge( + Fts3Table *p, /* FTS3 table handle */ + const char *zParam /* Nul-terminated string containing boolean */ +){ + int rc = SQLITE_OK; + sqlite3_stmt *pStmt = 0; + p->nAutoincrmerge = fts3Getint(&zParam); + if( p->nAutoincrmerge==1 || p->nAutoincrmerge>MergeCount(p) ){ + p->nAutoincrmerge = 8; + } + if( !p->bHasStat ){ + assert( p->bFts4==0 ); + sqlite3Fts3CreateStatTable(&rc, p); + if( rc ) return rc; + } + rc = fts3SqlStmt(p, SQL_REPLACE_STAT, &pStmt, 0); + if( rc ) return rc; + sqlite3_bind_int(pStmt, 1, FTS_STAT_AUTOINCRMERGE); + sqlite3_bind_int(pStmt, 2, p->nAutoincrmerge); + sqlite3_step(pStmt); + rc = sqlite3_reset(pStmt); + return rc; +} + +/* +** Return a 64-bit checksum for the FTS index entry specified by the +** arguments to this function. +*/ +static u64 fts3ChecksumEntry( + const char *zTerm, /* Pointer to buffer containing term */ + int nTerm, /* Size of zTerm in bytes */ + int iLangid, /* Language id for current row */ + int iIndex, /* Index (0..Fts3Table.nIndex-1) */ + i64 iDocid, /* Docid for current row. */ + int iCol, /* Column number */ + int iPos /* Position */ +){ + int i; + u64 ret = (u64)iDocid; + + ret += (ret<<3) + iLangid; + ret += (ret<<3) + iIndex; + ret += (ret<<3) + iCol; + ret += (ret<<3) + iPos; + for(i=0; inIndex-1) */ + int *pRc /* OUT: Return code */ +){ + Fts3SegFilter filter; + Fts3MultiSegReader csr; + int rc; + u64 cksum = 0; + + if( *pRc ) return 0; + + memset(&filter, 0, sizeof(filter)); + memset(&csr, 0, sizeof(csr)); + filter.flags = FTS3_SEGMENT_REQUIRE_POS|FTS3_SEGMENT_IGNORE_EMPTY; + filter.flags |= FTS3_SEGMENT_SCAN; + + rc = sqlite3Fts3SegReaderCursor( + p, iLangid, iIndex, FTS3_SEGCURSOR_ALL, 0, 0, 0, 1,&csr + ); + if( rc==SQLITE_OK ){ + rc = sqlite3Fts3SegReaderStart(p, &csr, &filter); + } + + if( rc==SQLITE_OK ){ + while( SQLITE_ROW==(rc = sqlite3Fts3SegReaderStep(p, &csr)) ){ + char *pCsr = csr.aDoclist; + char *pEnd = &pCsr[csr.nDoclist]; + + i64 iDocid = 0; + i64 iCol = 0; + u64 iPos = 0; + + pCsr += sqlite3Fts3GetVarint(pCsr, &iDocid); + while( pCsrbDescIdx ){ + iDocid = (i64)((u64)iDocid - iVal); + }else{ + iDocid = (i64)((u64)iDocid + iVal); + } + } + }else{ + iPos += (iVal - 2); + cksum = cksum ^ fts3ChecksumEntry( + csr.zTerm, csr.nTerm, iLangid, iIndex, iDocid, + (int)iCol, (int)iPos + ); + } + } + } + } + } + sqlite3Fts3SegReaderFinish(&csr); + + *pRc = rc; + return cksum; +} + +/* +** Check if the contents of the FTS index match the current contents of the +** content table. If no error occurs and the contents do match, set *pbOk +** to true and return SQLITE_OK. Or if the contents do not match, set *pbOk +** to false before returning. +** +** If an error occurs (e.g. an OOM or IO error), return an SQLite error +** code. The final value of *pbOk is undefined in this case. +*/ +SQLITE_PRIVATE int sqlite3Fts3IntegrityCheck(Fts3Table *p, int *pbOk){ + int rc = SQLITE_OK; /* Return code */ + u64 cksum1 = 0; /* Checksum based on FTS index contents */ + u64 cksum2 = 0; /* Checksum based on %_content contents */ + sqlite3_stmt *pAllLangid = 0; /* Statement to return all language-ids */ + + /* This block calculates the checksum according to the FTS index. */ + rc = fts3SqlStmt(p, SQL_SELECT_ALL_LANGID, &pAllLangid, 0); + if( rc==SQLITE_OK ){ + int rc2; + sqlite3_bind_int(pAllLangid, 1, p->iPrevLangid); + sqlite3_bind_int(pAllLangid, 2, p->nIndex); + while( rc==SQLITE_OK && sqlite3_step(pAllLangid)==SQLITE_ROW ){ + int iLangid = sqlite3_column_int(pAllLangid, 0); + int i; + for(i=0; inIndex; i++){ + cksum1 = cksum1 ^ fts3ChecksumIndex(p, iLangid, i, &rc); + } + } + rc2 = sqlite3_reset(pAllLangid); + if( rc==SQLITE_OK ) rc = rc2; + } + + /* This block calculates the checksum according to the %_content table */ + if( rc==SQLITE_OK ){ + sqlite3_tokenizer_module const *pModule = p->pTokenizer->pModule; + sqlite3_stmt *pStmt = 0; + char *zSql; + + zSql = sqlite3_mprintf("SELECT %s" , p->zReadExprlist); + if( !zSql ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); + sqlite3_free(zSql); + } + + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){ + i64 iDocid = sqlite3_column_int64(pStmt, 0); + int iLang = langidFromSelect(p, pStmt); + int iCol; + + for(iCol=0; rc==SQLITE_OK && iColnColumn; iCol++){ + if( p->abNotindexed[iCol]==0 ){ + const char *zText = (const char *)sqlite3_column_text(pStmt, iCol+1); + sqlite3_tokenizer_cursor *pT = 0; + + rc = sqlite3Fts3OpenTokenizer(p->pTokenizer, iLang, zText, -1, &pT); + while( rc==SQLITE_OK ){ + char const *zToken; /* Buffer containing token */ + int nToken = 0; /* Number of bytes in token */ + int iDum1 = 0, iDum2 = 0; /* Dummy variables */ + int iPos = 0; /* Position of token in zText */ + + rc = pModule->xNext(pT, &zToken, &nToken, &iDum1, &iDum2, &iPos); + if( rc==SQLITE_OK ){ + int i; + cksum2 = cksum2 ^ fts3ChecksumEntry( + zToken, nToken, iLang, 0, iDocid, iCol, iPos + ); + for(i=1; inIndex; i++){ + if( p->aIndex[i].nPrefix<=nToken ){ + cksum2 = cksum2 ^ fts3ChecksumEntry( + zToken, p->aIndex[i].nPrefix, iLang, i, iDocid, iCol, iPos + ); + } + } + } + } + if( pT ) pModule->xClose(pT); + if( rc==SQLITE_DONE ) rc = SQLITE_OK; + } + } + } + + sqlite3_finalize(pStmt); + } + + if( rc==SQLITE_CORRUPT_VTAB ){ + rc = SQLITE_OK; + *pbOk = 0; + }else{ + *pbOk = (rc==SQLITE_OK && cksum1==cksum2); + } + return rc; +} + +/* +** Run the integrity-check. If no error occurs and the current contents of +** the FTS index are correct, return SQLITE_OK. Or, if the contents of the +** FTS index are incorrect, return SQLITE_CORRUPT_VTAB. +** +** Or, if an error (e.g. an OOM or IO error) occurs, return an SQLite +** error code. +** +** The integrity-check works as follows. For each token and indexed token +** prefix in the document set, a 64-bit checksum is calculated (by code +** in fts3ChecksumEntry()) based on the following: +** +** + The index number (0 for the main index, 1 for the first prefix +** index etc.), +** + The token (or token prefix) text itself, +** + The language-id of the row it appears in, +** + The docid of the row it appears in, +** + The column it appears in, and +** + The tokens position within that column. +** +** The checksums for all entries in the index are XORed together to create +** a single checksum for the entire index. +** +** The integrity-check code calculates the same checksum in two ways: +** +** 1. By scanning the contents of the FTS index, and +** 2. By scanning and tokenizing the content table. +** +** If the two checksums are identical, the integrity-check is deemed to have +** passed. +*/ +static int fts3DoIntegrityCheck( + Fts3Table *p /* FTS3 table handle */ +){ + int rc; + int bOk = 0; + rc = sqlite3Fts3IntegrityCheck(p, &bOk); + if( rc==SQLITE_OK && bOk==0 ) rc = FTS_CORRUPT_VTAB; + return rc; +} + +/* +** Handle a 'special' INSERT of the form: +** +** "INSERT INTO tbl(tbl) VALUES()" +** +** Argument pVal contains the result of . Currently the only +** meaningful value to insert is the text 'optimize'. +*/ +static int fts3SpecialInsert(Fts3Table *p, sqlite3_value *pVal){ + int rc = SQLITE_ERROR; /* Return Code */ + const char *zVal = (const char *)sqlite3_value_text(pVal); + int nVal = sqlite3_value_bytes(pVal); + + if( !zVal ){ + return SQLITE_NOMEM; + }else if( nVal==8 && 0==sqlite3_strnicmp(zVal, "optimize", 8) ){ + rc = fts3DoOptimize(p, 0); + }else if( nVal==7 && 0==sqlite3_strnicmp(zVal, "rebuild", 7) ){ + rc = fts3DoRebuild(p); + }else if( nVal==15 && 0==sqlite3_strnicmp(zVal, "integrity-check", 15) ){ + rc = fts3DoIntegrityCheck(p); + }else if( nVal>6 && 0==sqlite3_strnicmp(zVal, "merge=", 6) ){ + rc = fts3DoIncrmerge(p, &zVal[6]); + }else if( nVal>10 && 0==sqlite3_strnicmp(zVal, "automerge=", 10) ){ + rc = fts3DoAutoincrmerge(p, &zVal[10]); + }else if( nVal==5 && 0==sqlite3_strnicmp(zVal, "flush", 5) ){ + rc = sqlite3Fts3PendingTermsFlush(p); + } +#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST) + else{ + int v; + if( nVal>9 && 0==sqlite3_strnicmp(zVal, "nodesize=", 9) ){ + v = atoi(&zVal[9]); + if( v>=24 && v<=p->nPgsz-35 ) p->nNodeSize = v; + rc = SQLITE_OK; + }else if( nVal>11 && 0==sqlite3_strnicmp(zVal, "maxpending=", 9) ){ + v = atoi(&zVal[11]); + if( v>=64 && v<=FTS3_MAX_PENDING_DATA ) p->nMaxPendingData = v; + rc = SQLITE_OK; + }else if( nVal>21 && 0==sqlite3_strnicmp(zVal,"test-no-incr-doclist=",21) ){ + p->bNoIncrDoclist = atoi(&zVal[21]); + rc = SQLITE_OK; + }else if( nVal>11 && 0==sqlite3_strnicmp(zVal,"mergecount=",11) ){ + v = atoi(&zVal[11]); + if( v>=4 && v<=FTS3_MERGE_COUNT && (v&1)==0 ) p->nMergeCount = v; + rc = SQLITE_OK; + } + } +#endif + return rc; +} + +#ifndef SQLITE_DISABLE_FTS4_DEFERRED +/* +** Delete all cached deferred doclists. Deferred doclists are cached +** (allocated) by the sqlite3Fts3CacheDeferredDoclists() function. +*/ +SQLITE_PRIVATE void sqlite3Fts3FreeDeferredDoclists(Fts3Cursor *pCsr){ + Fts3DeferredToken *pDef; + for(pDef=pCsr->pDeferred; pDef; pDef=pDef->pNext){ + fts3PendingListDelete(pDef->pList); + pDef->pList = 0; + } +} + +/* +** Free all entries in the pCsr->pDeffered list. Entries are added to +** this list using sqlite3Fts3DeferToken(). +*/ +SQLITE_PRIVATE void sqlite3Fts3FreeDeferredTokens(Fts3Cursor *pCsr){ + Fts3DeferredToken *pDef; + Fts3DeferredToken *pNext; + for(pDef=pCsr->pDeferred; pDef; pDef=pNext){ + pNext = pDef->pNext; + fts3PendingListDelete(pDef->pList); + sqlite3_free(pDef); + } + pCsr->pDeferred = 0; +} + +/* +** Generate deferred-doclists for all tokens in the pCsr->pDeferred list +** based on the row that pCsr currently points to. +** +** A deferred-doclist is like any other doclist with position information +** included, except that it only contains entries for a single row of the +** table, not for all rows. +*/ +SQLITE_PRIVATE int sqlite3Fts3CacheDeferredDoclists(Fts3Cursor *pCsr){ + int rc = SQLITE_OK; /* Return code */ + if( pCsr->pDeferred ){ + int i; /* Used to iterate through table columns */ + sqlite3_int64 iDocid; /* Docid of the row pCsr points to */ + Fts3DeferredToken *pDef; /* Used to iterate through deferred tokens */ + + Fts3Table *p = (Fts3Table *)pCsr->base.pVtab; + sqlite3_tokenizer *pT = p->pTokenizer; + sqlite3_tokenizer_module const *pModule = pT->pModule; + + assert( pCsr->isRequireSeek==0 ); + iDocid = sqlite3_column_int64(pCsr->pStmt, 0); + + for(i=0; inColumn && rc==SQLITE_OK; i++){ + if( p->abNotindexed[i]==0 ){ + const char *zText = (const char *)sqlite3_column_text(pCsr->pStmt, i+1); + sqlite3_tokenizer_cursor *pTC = 0; + + rc = sqlite3Fts3OpenTokenizer(pT, pCsr->iLangid, zText, -1, &pTC); + while( rc==SQLITE_OK ){ + char const *zToken; /* Buffer containing token */ + int nToken = 0; /* Number of bytes in token */ + int iDum1 = 0, iDum2 = 0; /* Dummy variables */ + int iPos = 0; /* Position of token in zText */ + + rc = pModule->xNext(pTC, &zToken, &nToken, &iDum1, &iDum2, &iPos); + for(pDef=pCsr->pDeferred; pDef && rc==SQLITE_OK; pDef=pDef->pNext){ + Fts3PhraseToken *pPT = pDef->pToken; + if( (pDef->iCol>=p->nColumn || pDef->iCol==i) + && (pPT->bFirst==0 || iPos==0) + && (pPT->n==nToken || (pPT->isPrefix && pPT->nz, pPT->n)) + ){ + fts3PendingListAppend(&pDef->pList, iDocid, i, iPos, &rc); + } + } + } + if( pTC ) pModule->xClose(pTC); + if( rc==SQLITE_DONE ) rc = SQLITE_OK; + } + } + + for(pDef=pCsr->pDeferred; pDef && rc==SQLITE_OK; pDef=pDef->pNext){ + if( pDef->pList ){ + rc = fts3PendingListAppendVarint(&pDef->pList, 0); + } + } + } + + return rc; +} + +SQLITE_PRIVATE int sqlite3Fts3DeferredTokenList( + Fts3DeferredToken *p, + char **ppData, + int *pnData +){ + char *pRet; + int nSkip; + sqlite3_int64 dummy; + + *ppData = 0; + *pnData = 0; + + if( p->pList==0 ){ + return SQLITE_OK; + } + + pRet = (char *)sqlite3_malloc64(p->pList->nData); + if( !pRet ) return SQLITE_NOMEM; + + nSkip = sqlite3Fts3GetVarint(p->pList->aData, &dummy); + *pnData = p->pList->nData - nSkip; + *ppData = pRet; + + memcpy(pRet, &p->pList->aData[nSkip], *pnData); + return SQLITE_OK; +} + +/* +** Add an entry for token pToken to the pCsr->pDeferred list. +*/ +SQLITE_PRIVATE int sqlite3Fts3DeferToken( + Fts3Cursor *pCsr, /* Fts3 table cursor */ + Fts3PhraseToken *pToken, /* Token to defer */ + int iCol /* Column that token must appear in (or -1) */ +){ + Fts3DeferredToken *pDeferred; + pDeferred = sqlite3_malloc64(sizeof(*pDeferred)); + if( !pDeferred ){ + return SQLITE_NOMEM; + } + memset(pDeferred, 0, sizeof(*pDeferred)); + pDeferred->pToken = pToken; + pDeferred->pNext = pCsr->pDeferred; + pDeferred->iCol = iCol; + pCsr->pDeferred = pDeferred; + + assert( pToken->pDeferred==0 ); + pToken->pDeferred = pDeferred; + + return SQLITE_OK; +} +#endif + +/* +** SQLite value pRowid contains the rowid of a row that may or may not be +** present in the FTS3 table. If it is, delete it and adjust the contents +** of subsidiary data structures accordingly. +*/ +static int fts3DeleteByRowid( + Fts3Table *p, + sqlite3_value *pRowid, + int *pnChng, /* IN/OUT: Decrement if row is deleted */ + u32 *aSzDel +){ + int rc = SQLITE_OK; /* Return code */ + int bFound = 0; /* True if *pRowid really is in the table */ + + fts3DeleteTerms(&rc, p, pRowid, aSzDel, &bFound); + if( bFound && rc==SQLITE_OK ){ + int isEmpty = 0; /* Deleting *pRowid leaves the table empty */ + rc = fts3IsEmpty(p, pRowid, &isEmpty); + if( rc==SQLITE_OK ){ + if( isEmpty ){ + /* Deleting this row means the whole table is empty. In this case + ** delete the contents of all three tables and throw away any + ** data in the pendingTerms hash table. */ + rc = fts3DeleteAll(p, 1); + *pnChng = 0; + memset(aSzDel, 0, sizeof(u32) * (p->nColumn+1) * 2); + }else{ + *pnChng = *pnChng - 1; + if( p->zContentTbl==0 ){ + fts3SqlExec(&rc, p, SQL_DELETE_CONTENT, &pRowid); + } + if( p->bHasDocsize ){ + fts3SqlExec(&rc, p, SQL_DELETE_DOCSIZE, &pRowid); + } + } + } + } + + return rc; +} + +/* +** This function does the work for the xUpdate method of FTS3 virtual +** tables. The schema of the virtual table being: +** +** CREATE TABLE
    ( +** , +**
    HIDDEN, +** docid HIDDEN, +** HIDDEN +** ); +** +** +*/ +SQLITE_PRIVATE int sqlite3Fts3UpdateMethod( + sqlite3_vtab *pVtab, /* FTS3 vtab object */ + int nArg, /* Size of argument array */ + sqlite3_value **apVal, /* Array of arguments */ + sqlite_int64 *pRowid /* OUT: The affected (or effected) rowid */ +){ + Fts3Table *p = (Fts3Table *)pVtab; + int rc = SQLITE_OK; /* Return Code */ + u32 *aSzIns = 0; /* Sizes of inserted documents */ + u32 *aSzDel = 0; /* Sizes of deleted documents */ + int nChng = 0; /* Net change in number of documents */ + int bInsertDone = 0; + + /* At this point it must be known if the %_stat table exists or not. + ** So bHasStat may not be 2. */ + assert( p->bHasStat==0 || p->bHasStat==1 ); + + assert( p->pSegments==0 ); + assert( + nArg==1 /* DELETE operations */ + || nArg==(2 + p->nColumn + 3) /* INSERT or UPDATE operations */ + ); + + /* Check for a "special" INSERT operation. One of the form: + ** + ** INSERT INTO xyz(xyz) VALUES('command'); + */ + if( nArg>1 + && sqlite3_value_type(apVal[0])==SQLITE_NULL + && sqlite3_value_type(apVal[p->nColumn+2])!=SQLITE_NULL + ){ + rc = fts3SpecialInsert(p, apVal[p->nColumn+2]); + goto update_out; + } + + if( nArg>1 && sqlite3_value_int(apVal[2 + p->nColumn + 2])<0 ){ + rc = SQLITE_CONSTRAINT; + goto update_out; + } + + /* Allocate space to hold the change in document sizes */ + aSzDel = sqlite3_malloc64(sizeof(aSzDel[0])*((sqlite3_int64)p->nColumn+1)*2); + if( aSzDel==0 ){ + rc = SQLITE_NOMEM; + goto update_out; + } + aSzIns = &aSzDel[p->nColumn+1]; + memset(aSzDel, 0, sizeof(aSzDel[0])*(p->nColumn+1)*2); + + rc = fts3Writelock(p); + if( rc!=SQLITE_OK ) goto update_out; + + /* If this is an INSERT operation, or an UPDATE that modifies the rowid + ** value, then this operation requires constraint handling. + ** + ** If the on-conflict mode is REPLACE, this means that the existing row + ** should be deleted from the database before inserting the new row. Or, + ** if the on-conflict mode is other than REPLACE, then this method must + ** detect the conflict and return SQLITE_CONSTRAINT before beginning to + ** modify the database file. + */ + if( nArg>1 && p->zContentTbl==0 ){ + /* Find the value object that holds the new rowid value. */ + sqlite3_value *pNewRowid = apVal[3+p->nColumn]; + if( sqlite3_value_type(pNewRowid)==SQLITE_NULL ){ + pNewRowid = apVal[1]; + } + + if( sqlite3_value_type(pNewRowid)!=SQLITE_NULL && ( + sqlite3_value_type(apVal[0])==SQLITE_NULL + || sqlite3_value_int64(apVal[0])!=sqlite3_value_int64(pNewRowid) + )){ + /* The new rowid is not NULL (in this case the rowid will be + ** automatically assigned and there is no chance of a conflict), and + ** the statement is either an INSERT or an UPDATE that modifies the + ** rowid column. So if the conflict mode is REPLACE, then delete any + ** existing row with rowid=pNewRowid. + ** + ** Or, if the conflict mode is not REPLACE, insert the new record into + ** the %_content table. If we hit the duplicate rowid constraint (or any + ** other error) while doing so, return immediately. + ** + ** This branch may also run if pNewRowid contains a value that cannot + ** be losslessly converted to an integer. In this case, the eventual + ** call to fts3InsertData() (either just below or further on in this + ** function) will return SQLITE_MISMATCH. If fts3DeleteByRowid is + ** invoked, it will delete zero rows (since no row will have + ** docid=$pNewRowid if $pNewRowid is not an integer value). + */ + if( sqlite3_vtab_on_conflict(p->db)==SQLITE_REPLACE ){ + rc = fts3DeleteByRowid(p, pNewRowid, &nChng, aSzDel); + }else{ + rc = fts3InsertData(p, apVal, pRowid); + bInsertDone = 1; + } + } + } + if( rc!=SQLITE_OK ){ + goto update_out; + } + + /* If this is a DELETE or UPDATE operation, remove the old record. */ + if( sqlite3_value_type(apVal[0])!=SQLITE_NULL ){ + assert( sqlite3_value_type(apVal[0])==SQLITE_INTEGER ); + rc = fts3DeleteByRowid(p, apVal[0], &nChng, aSzDel); + } + + /* If this is an INSERT or UPDATE operation, insert the new record. */ + if( nArg>1 && rc==SQLITE_OK ){ + int iLangid = sqlite3_value_int(apVal[2 + p->nColumn + 2]); + if( bInsertDone==0 ){ + rc = fts3InsertData(p, apVal, pRowid); + if( rc==SQLITE_CONSTRAINT && p->zContentTbl==0 ){ + rc = FTS_CORRUPT_VTAB; + } + } + if( rc==SQLITE_OK ){ + rc = fts3PendingTermsDocid(p, 0, iLangid, *pRowid); + } + if( rc==SQLITE_OK ){ + assert( p->iPrevDocid==*pRowid ); + rc = fts3InsertTerms(p, iLangid, apVal, aSzIns); + } + if( p->bHasDocsize ){ + fts3InsertDocsize(&rc, p, aSzIns); + } + nChng++; + } + + if( p->bFts4 ){ + fts3UpdateDocTotals(&rc, p, aSzIns, aSzDel, nChng); + } + + update_out: + sqlite3_free(aSzDel); + sqlite3Fts3SegmentsClose(p); + return rc; +} + +/* +** Flush any data in the pending-terms hash table to disk. If successful, +** merge all segments in the database (including the new segment, if +** there was any data to flush) into a single segment. +*/ +SQLITE_PRIVATE int sqlite3Fts3Optimize(Fts3Table *p){ + int rc; + rc = sqlite3_exec(p->db, "SAVEPOINT fts3", 0, 0, 0); + if( rc==SQLITE_OK ){ + rc = fts3DoOptimize(p, 1); + if( rc==SQLITE_OK || rc==SQLITE_DONE ){ + int rc2 = sqlite3_exec(p->db, "RELEASE fts3", 0, 0, 0); + if( rc2!=SQLITE_OK ) rc = rc2; + }else{ + sqlite3_exec(p->db, "ROLLBACK TO fts3", 0, 0, 0); + sqlite3_exec(p->db, "RELEASE fts3", 0, 0, 0); + } + } + sqlite3Fts3SegmentsClose(p); + return rc; +} + +#endif + +/************** End of fts3_write.c ******************************************/ +/************** Begin file fts3_snippet.c ************************************/ +/* +** 2009 Oct 23 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +*/ + +/* #include "fts3Int.h" */ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +/* #include */ +/* #include */ + +/* +** Characters that may appear in the second argument to matchinfo(). +*/ +#define FTS3_MATCHINFO_NPHRASE 'p' /* 1 value */ +#define FTS3_MATCHINFO_NCOL 'c' /* 1 value */ +#define FTS3_MATCHINFO_NDOC 'n' /* 1 value */ +#define FTS3_MATCHINFO_AVGLENGTH 'a' /* nCol values */ +#define FTS3_MATCHINFO_LENGTH 'l' /* nCol values */ +#define FTS3_MATCHINFO_LCS 's' /* nCol values */ +#define FTS3_MATCHINFO_HITS 'x' /* 3*nCol*nPhrase values */ +#define FTS3_MATCHINFO_LHITS 'y' /* nCol*nPhrase values */ +#define FTS3_MATCHINFO_LHITS_BM 'b' /* nCol*nPhrase values */ + +/* +** The default value for the second argument to matchinfo(). +*/ +#define FTS3_MATCHINFO_DEFAULT "pcx" + + +/* +** Used as an sqlite3Fts3ExprIterate() context when loading phrase doclists to +** Fts3Expr.aDoclist[]/nDoclist. +*/ +typedef struct LoadDoclistCtx LoadDoclistCtx; +struct LoadDoclistCtx { + Fts3Cursor *pCsr; /* FTS3 Cursor */ + int nPhrase; /* Number of phrases seen so far */ + int nToken; /* Number of tokens seen so far */ +}; + +/* +** The following types are used as part of the implementation of the +** fts3BestSnippet() routine. +*/ +typedef struct SnippetIter SnippetIter; +typedef struct SnippetPhrase SnippetPhrase; +typedef struct SnippetFragment SnippetFragment; + +struct SnippetIter { + Fts3Cursor *pCsr; /* Cursor snippet is being generated from */ + int iCol; /* Extract snippet from this column */ + int nSnippet; /* Requested snippet length (in tokens) */ + int nPhrase; /* Number of phrases in query */ + SnippetPhrase *aPhrase; /* Array of size nPhrase */ + int iCurrent; /* First token of current snippet */ +}; + +struct SnippetPhrase { + int nToken; /* Number of tokens in phrase */ + char *pList; /* Pointer to start of phrase position list */ + i64 iHead; /* Next value in position list */ + char *pHead; /* Position list data following iHead */ + i64 iTail; /* Next value in trailing position list */ + char *pTail; /* Position list data following iTail */ +}; + +struct SnippetFragment { + int iCol; /* Column snippet is extracted from */ + int iPos; /* Index of first token in snippet */ + u64 covered; /* Mask of query phrases covered */ + u64 hlmask; /* Mask of snippet terms to highlight */ +}; + +/* +** This type is used as an sqlite3Fts3ExprIterate() context object while +** accumulating the data returned by the matchinfo() function. +*/ +typedef struct MatchInfo MatchInfo; +struct MatchInfo { + Fts3Cursor *pCursor; /* FTS3 Cursor */ + int nCol; /* Number of columns in table */ + int nPhrase; /* Number of matchable phrases in query */ + sqlite3_int64 nDoc; /* Number of docs in database */ + char flag; + u32 *aMatchinfo; /* Pre-allocated buffer */ +}; + +/* +** An instance of this structure is used to manage a pair of buffers, each +** (nElem * sizeof(u32)) bytes in size. See the MatchinfoBuffer code below +** for details. +*/ +struct MatchinfoBuffer { + u8 aRef[3]; + int nElem; + int bGlobal; /* Set if global data is loaded */ + char *zMatchinfo; + u32 aMI[FLEXARRAY]; +}; + +/* Size (in bytes) of a MatchinfoBuffer sufficient for N elements */ +#define SZ_MATCHINFOBUFFER(N) \ + (offsetof(MatchinfoBuffer,aMI)+(((N)+1)/2)*sizeof(u64)) + + +/* +** The snippet() and offsets() functions both return text values. An instance +** of the following structure is used to accumulate those values while the +** functions are running. See fts3StringAppend() for details. +*/ +typedef struct StrBuffer StrBuffer; +struct StrBuffer { + char *z; /* Pointer to buffer containing string */ + int n; /* Length of z in bytes (excl. nul-term) */ + int nAlloc; /* Allocated size of buffer z in bytes */ +}; + + +/************************************************************************* +** Start of MatchinfoBuffer code. +*/ + +/* +** Allocate a two-slot MatchinfoBuffer object. +*/ +static MatchinfoBuffer *fts3MIBufferNew(size_t nElem, const char *zMatchinfo){ + MatchinfoBuffer *pRet; + sqlite3_int64 nByte = sizeof(u32) * (2*(sqlite3_int64)nElem + 1) + + SZ_MATCHINFOBUFFER(1); + sqlite3_int64 nStr = strlen(zMatchinfo); + + pRet = sqlite3Fts3MallocZero(nByte + nStr+1); + if( pRet ){ + pRet->aMI[0] = (u8*)(&pRet->aMI[1]) - (u8*)pRet; + pRet->aMI[1+nElem] = pRet->aMI[0] + + sizeof(u32)*((int)nElem+1); + pRet->nElem = (int)nElem; + pRet->zMatchinfo = ((char*)pRet) + nByte; + memcpy(pRet->zMatchinfo, zMatchinfo, nStr+1); + pRet->aRef[0] = 1; + } + + return pRet; +} + +static void fts3MIBufferFree(void *p){ + MatchinfoBuffer *pBuf = (MatchinfoBuffer*)((u8*)p - ((u32*)p)[-1]); + + assert( (u32*)p==&pBuf->aMI[1] + || (u32*)p==&pBuf->aMI[pBuf->nElem+2] + ); + if( (u32*)p==&pBuf->aMI[1] ){ + pBuf->aRef[1] = 0; + }else{ + pBuf->aRef[2] = 0; + } + + if( pBuf->aRef[0]==0 && pBuf->aRef[1]==0 && pBuf->aRef[2]==0 ){ + sqlite3_free(pBuf); + } +} + +static void (*fts3MIBufferAlloc(MatchinfoBuffer *p, u32 **paOut))(void*){ + void (*xRet)(void*) = 0; + u32 *aOut = 0; + + if( p->aRef[1]==0 ){ + p->aRef[1] = 1; + aOut = &p->aMI[1]; + xRet = fts3MIBufferFree; + } + else if( p->aRef[2]==0 ){ + p->aRef[2] = 1; + aOut = &p->aMI[p->nElem+2]; + xRet = fts3MIBufferFree; + }else{ + aOut = (u32*)sqlite3_malloc64(p->nElem * sizeof(u32)); + if( aOut ){ + xRet = sqlite3_free; + if( p->bGlobal ) memcpy(aOut, &p->aMI[1], p->nElem*sizeof(u32)); + } + } + + *paOut = aOut; + return xRet; +} + +static void fts3MIBufferSetGlobal(MatchinfoBuffer *p){ + p->bGlobal = 1; + memcpy(&p->aMI[2+p->nElem], &p->aMI[1], p->nElem*sizeof(u32)); +} + +/* +** Free a MatchinfoBuffer object allocated using fts3MIBufferNew() +*/ +SQLITE_PRIVATE void sqlite3Fts3MIBufferFree(MatchinfoBuffer *p){ + if( p ){ + assert( p->aRef[0]==1 ); + p->aRef[0] = 0; + if( p->aRef[0]==0 && p->aRef[1]==0 && p->aRef[2]==0 ){ + sqlite3_free(p); + } + } +} + +/* +** End of MatchinfoBuffer code. +*************************************************************************/ + + +/* +** This function is used to help iterate through a position-list. A position +** list is a list of unique integers, sorted from smallest to largest. Each +** element of the list is represented by an FTS3 varint that takes the value +** of the difference between the current element and the previous one plus +** two. For example, to store the position-list: +** +** 4 9 113 +** +** the three varints: +** +** 6 7 106 +** +** are encoded. +** +** When this function is called, *pp points to the start of an element of +** the list. *piPos contains the value of the previous entry in the list. +** After it returns, *piPos contains the value of the next element of the +** list and *pp is advanced to the following varint. +*/ +static void fts3GetDeltaPosition(char **pp, i64 *piPos){ + int iVal; + *pp += fts3GetVarint32(*pp, &iVal); + *piPos += (iVal-2); +} + +/* +** Helper function for sqlite3Fts3ExprIterate() (see below). +*/ +static int fts3ExprIterate2( + Fts3Expr *pExpr, /* Expression to iterate phrases of */ + int *piPhrase, /* Pointer to phrase counter */ + int (*x)(Fts3Expr*,int,void*), /* Callback function to invoke for phrases */ + void *pCtx /* Second argument to pass to callback */ +){ + int rc; /* Return code */ + int eType = pExpr->eType; /* Type of expression node pExpr */ + + if( eType!=FTSQUERY_PHRASE ){ + assert( pExpr->pLeft && pExpr->pRight ); + rc = fts3ExprIterate2(pExpr->pLeft, piPhrase, x, pCtx); + if( rc==SQLITE_OK && eType!=FTSQUERY_NOT ){ + rc = fts3ExprIterate2(pExpr->pRight, piPhrase, x, pCtx); + } + }else{ + rc = x(pExpr, *piPhrase, pCtx); + (*piPhrase)++; + } + return rc; +} + +/* +** Iterate through all phrase nodes in an FTS3 query, except those that +** are part of a sub-tree that is the right-hand-side of a NOT operator. +** For each phrase node found, the supplied callback function is invoked. +** +** If the callback function returns anything other than SQLITE_OK, +** the iteration is abandoned and the error code returned immediately. +** Otherwise, SQLITE_OK is returned after a callback has been made for +** all eligible phrase nodes. +*/ +SQLITE_PRIVATE int sqlite3Fts3ExprIterate( + Fts3Expr *pExpr, /* Expression to iterate phrases of */ + int (*x)(Fts3Expr*,int,void*), /* Callback function to invoke for phrases */ + void *pCtx /* Second argument to pass to callback */ +){ + int iPhrase = 0; /* Variable used as the phrase counter */ + return fts3ExprIterate2(pExpr, &iPhrase, x, pCtx); +} + +/* +** This is an sqlite3Fts3ExprIterate() callback used while loading the +** doclists for each phrase into Fts3Expr.aDoclist[]/nDoclist. See also +** fts3ExprLoadDoclists(). +*/ +static int fts3ExprLoadDoclistsCb(Fts3Expr *pExpr, int iPhrase, void *ctx){ + int rc = SQLITE_OK; + Fts3Phrase *pPhrase = pExpr->pPhrase; + LoadDoclistCtx *p = (LoadDoclistCtx *)ctx; + + UNUSED_PARAMETER(iPhrase); + + p->nPhrase++; + p->nToken += pPhrase->nToken; + + return rc; +} + +/* +** Load the doclists for each phrase in the query associated with FTS3 cursor +** pCsr. +** +** If pnPhrase is not NULL, then *pnPhrase is set to the number of matchable +** phrases in the expression (all phrases except those directly or +** indirectly descended from the right-hand-side of a NOT operator). If +** pnToken is not NULL, then it is set to the number of tokens in all +** matchable phrases of the expression. +*/ +static int fts3ExprLoadDoclists( + Fts3Cursor *pCsr, /* Fts3 cursor for current query */ + int *pnPhrase, /* OUT: Number of phrases in query */ + int *pnToken /* OUT: Number of tokens in query */ +){ + int rc; /* Return Code */ + LoadDoclistCtx sCtx = {0,0,0}; /* Context for sqlite3Fts3ExprIterate() */ + sCtx.pCsr = pCsr; + rc = sqlite3Fts3ExprIterate(pCsr->pExpr,fts3ExprLoadDoclistsCb,(void*)&sCtx); + if( pnPhrase ) *pnPhrase = sCtx.nPhrase; + if( pnToken ) *pnToken = sCtx.nToken; + return rc; +} + +static int fts3ExprPhraseCountCb(Fts3Expr *pExpr, int iPhrase, void *ctx){ + (*(int *)ctx)++; + pExpr->iPhrase = iPhrase; + return SQLITE_OK; +} +static int fts3ExprPhraseCount(Fts3Expr *pExpr){ + int nPhrase = 0; + (void)sqlite3Fts3ExprIterate(pExpr, fts3ExprPhraseCountCb, (void *)&nPhrase); + return nPhrase; +} + +/* +** Advance the position list iterator specified by the first two +** arguments so that it points to the first element with a value greater +** than or equal to parameter iNext. +*/ +static void fts3SnippetAdvance(char **ppIter, i64 *piIter, int iNext){ + char *pIter = *ppIter; + if( pIter ){ + i64 iIter = *piIter; + + while( iIteriCurrent<0 ){ + /* The SnippetIter object has just been initialized. The first snippet + ** candidate always starts at offset 0 (even if this candidate has a + ** score of 0.0). + */ + pIter->iCurrent = 0; + + /* Advance the 'head' iterator of each phrase to the first offset that + ** is greater than or equal to (iNext+nSnippet). + */ + for(i=0; inPhrase; i++){ + SnippetPhrase *pPhrase = &pIter->aPhrase[i]; + fts3SnippetAdvance(&pPhrase->pHead, &pPhrase->iHead, pIter->nSnippet); + } + }else{ + int iStart; + int iEnd = 0x7FFFFFFF; + + for(i=0; inPhrase; i++){ + SnippetPhrase *pPhrase = &pIter->aPhrase[i]; + if( pPhrase->pHead && pPhrase->iHeadiHead; + } + } + if( iEnd==0x7FFFFFFF ){ + return 1; + } + + assert( pIter->nSnippet>=0 ); + pIter->iCurrent = iStart = iEnd - pIter->nSnippet + 1; + for(i=0; inPhrase; i++){ + SnippetPhrase *pPhrase = &pIter->aPhrase[i]; + fts3SnippetAdvance(&pPhrase->pHead, &pPhrase->iHead, iEnd+1); + fts3SnippetAdvance(&pPhrase->pTail, &pPhrase->iTail, iStart); + } + } + + return 0; +} + +/* +** Retrieve information about the current candidate snippet of snippet +** iterator pIter. +*/ +static void fts3SnippetDetails( + SnippetIter *pIter, /* Snippet iterator */ + u64 mCovered, /* Bitmask of phrases already covered */ + int *piToken, /* OUT: First token of proposed snippet */ + int *piScore, /* OUT: "Score" for this snippet */ + u64 *pmCover, /* OUT: Bitmask of phrases covered */ + u64 *pmHighlight /* OUT: Bitmask of terms to highlight */ +){ + int iStart = pIter->iCurrent; /* First token of snippet */ + int iScore = 0; /* Score of this snippet */ + int i; /* Loop counter */ + u64 mCover = 0; /* Mask of phrases covered by this snippet */ + u64 mHighlight = 0; /* Mask of tokens to highlight in snippet */ + + for(i=0; inPhrase; i++){ + SnippetPhrase *pPhrase = &pIter->aPhrase[i]; + if( pPhrase->pTail ){ + char *pCsr = pPhrase->pTail; + i64 iCsr = pPhrase->iTail; + + while( iCsr<(iStart+pIter->nSnippet) && iCsr>=iStart ){ + int j; + u64 mPhrase = (u64)1 << (i%64); + u64 mPos = (u64)1 << (iCsr - iStart); + assert( iCsr>=iStart && (iCsr - iStart)<=64 ); + assert( i>=0 ); + if( (mCover|mCovered)&mPhrase ){ + iScore++; + }else{ + iScore += 1000; + } + mCover |= mPhrase; + + for(j=0; jnToken && jnSnippet; j++){ + mHighlight |= (mPos>>j); + } + + if( 0==(*pCsr & 0x0FE) ) break; + fts3GetDeltaPosition(&pCsr, &iCsr); + } + } + } + + /* Set the output variables before returning. */ + *piToken = iStart; + *piScore = iScore; + *pmCover = mCover; + *pmHighlight = mHighlight; +} + +/* +** This function is an sqlite3Fts3ExprIterate() callback used by +** fts3BestSnippet(). Each invocation populates an element of the +** SnippetIter.aPhrase[] array. +*/ +static int fts3SnippetFindPositions(Fts3Expr *pExpr, int iPhrase, void *ctx){ + SnippetIter *p = (SnippetIter *)ctx; + SnippetPhrase *pPhrase = &p->aPhrase[iPhrase]; + char *pCsr; + int rc; + + pPhrase->nToken = pExpr->pPhrase->nToken; + rc = sqlite3Fts3EvalPhrasePoslist(p->pCsr, pExpr, p->iCol, &pCsr); + assert( rc==SQLITE_OK || pCsr==0 ); + if( pCsr ){ + i64 iFirst = 0; + pPhrase->pList = pCsr; + fts3GetDeltaPosition(&pCsr, &iFirst); + if( iFirst<0 ){ + rc = FTS_CORRUPT_VTAB; + }else{ + pPhrase->pHead = pCsr; + pPhrase->pTail = pCsr; + pPhrase->iHead = iFirst; + pPhrase->iTail = iFirst; + } + }else{ + assert( rc!=SQLITE_OK || ( + pPhrase->pList==0 && pPhrase->pHead==0 && pPhrase->pTail==0 + )); + } + + return rc; +} + +/* +** Select the fragment of text consisting of nFragment contiguous tokens +** from column iCol that represent the "best" snippet. The best snippet +** is the snippet with the highest score, where scores are calculated +** by adding: +** +** (a) +1 point for each occurrence of a matchable phrase in the snippet. +** +** (b) +1000 points for the first occurrence of each matchable phrase in +** the snippet for which the corresponding mCovered bit is not set. +** +** The selected snippet parameters are stored in structure *pFragment before +** returning. The score of the selected snippet is stored in *piScore +** before returning. +*/ +static int fts3BestSnippet( + int nSnippet, /* Desired snippet length */ + Fts3Cursor *pCsr, /* Cursor to create snippet for */ + int iCol, /* Index of column to create snippet from */ + u64 mCovered, /* Mask of phrases already covered */ + u64 *pmSeen, /* IN/OUT: Mask of phrases seen */ + SnippetFragment *pFragment, /* OUT: Best snippet found */ + int *piScore /* OUT: Score of snippet pFragment */ +){ + int rc; /* Return Code */ + int nList; /* Number of phrases in expression */ + SnippetIter sIter; /* Iterates through snippet candidates */ + sqlite3_int64 nByte; /* Number of bytes of space to allocate */ + int iBestScore = -1; /* Best snippet score found so far */ + int i; /* Loop counter */ + + memset(&sIter, 0, sizeof(sIter)); + + /* Iterate through the phrases in the expression to count them. The same + ** callback makes sure the doclists are loaded for each phrase. + */ + rc = fts3ExprLoadDoclists(pCsr, &nList, 0); + if( rc!=SQLITE_OK ){ + return rc; + } + + /* Now that it is known how many phrases there are, allocate and zero + ** the required space using malloc(). + */ + nByte = sizeof(SnippetPhrase) * nList; + sIter.aPhrase = (SnippetPhrase *)sqlite3Fts3MallocZero(nByte); + if( !sIter.aPhrase ){ + return SQLITE_NOMEM; + } + + /* Initialize the contents of the SnippetIter object. Then iterate through + ** the set of phrases in the expression to populate the aPhrase[] array. + */ + sIter.pCsr = pCsr; + sIter.iCol = iCol; + sIter.nSnippet = nSnippet; + sIter.nPhrase = nList; + sIter.iCurrent = -1; + rc = sqlite3Fts3ExprIterate( + pCsr->pExpr, fts3SnippetFindPositions, (void*)&sIter + ); + if( rc==SQLITE_OK ){ + + /* Set the *pmSeen output variable. */ + for(i=0; iiCol = iCol; + while( !fts3SnippetNextCandidate(&sIter) ){ + int iPos; + int iScore; + u64 mCover; + u64 mHighlite; + fts3SnippetDetails(&sIter, mCovered, &iPos, &iScore, &mCover,&mHighlite); + assert( iScore>=0 ); + if( iScore>iBestScore ){ + pFragment->iPos = iPos; + pFragment->hlmask = mHighlite; + pFragment->covered = mCover; + iBestScore = iScore; + } + } + + *piScore = iBestScore; + } + sqlite3_free(sIter.aPhrase); + return rc; +} + + +/* +** Append a string to the string-buffer passed as the first argument. +** +** If nAppend is negative, then the length of the string zAppend is +** determined using strlen(). +*/ +static int fts3StringAppend( + StrBuffer *pStr, /* Buffer to append to */ + const char *zAppend, /* Pointer to data to append to buffer */ + int nAppend /* Size of zAppend in bytes (or -1) */ +){ + if( nAppend<0 ){ + nAppend = (int)strlen(zAppend); + } + + /* If there is insufficient space allocated at StrBuffer.z, use realloc() + ** to grow the buffer until so that it is big enough to accommodate the + ** appended data. + */ + if( pStr->n+nAppend+1>=pStr->nAlloc ){ + sqlite3_int64 nAlloc = pStr->nAlloc+(sqlite3_int64)nAppend+100; + char *zNew = sqlite3_realloc64(pStr->z, nAlloc); + if( !zNew ){ + return SQLITE_NOMEM; + } + pStr->z = zNew; + pStr->nAlloc = nAlloc; + } + assert( pStr->z!=0 && (pStr->nAlloc >= pStr->n+nAppend+1) ); + + /* Append the data to the string buffer. */ + memcpy(&pStr->z[pStr->n], zAppend, nAppend); + pStr->n += nAppend; + pStr->z[pStr->n] = '\0'; + + return SQLITE_OK; +} + +/* +** The fts3BestSnippet() function often selects snippets that end with a +** query term. That is, the final term of the snippet is always a term +** that requires highlighting. For example, if 'X' is a highlighted term +** and '.' is a non-highlighted term, BestSnippet() may select: +** +** ........X.....X +** +** This function "shifts" the beginning of the snippet forward in the +** document so that there are approximately the same number of +** non-highlighted terms to the right of the final highlighted term as there +** are to the left of the first highlighted term. For example, to this: +** +** ....X.....X.... +** +** This is done as part of extracting the snippet text, not when selecting +** the snippet. Snippet selection is done based on doclists only, so there +** is no way for fts3BestSnippet() to know whether or not the document +** actually contains terms that follow the final highlighted term. +*/ +static int fts3SnippetShift( + Fts3Table *pTab, /* FTS3 table snippet comes from */ + int iLangid, /* Language id to use in tokenizing */ + int nSnippet, /* Number of tokens desired for snippet */ + const char *zDoc, /* Document text to extract snippet from */ + int nDoc, /* Size of buffer zDoc in bytes */ + int *piPos, /* IN/OUT: First token of snippet */ + u64 *pHlmask /* IN/OUT: Mask of tokens to highlight */ +){ + u64 hlmask = *pHlmask; /* Local copy of initial highlight-mask */ + + if( hlmask ){ + int nLeft; /* Tokens to the left of first highlight */ + int nRight; /* Tokens to the right of last highlight */ + int nDesired; /* Ideal number of tokens to shift forward */ + + for(nLeft=0; !(hlmask & ((u64)1 << nLeft)); nLeft++); + for(nRight=0; !(hlmask & ((u64)1 << (nSnippet-1-nRight))); nRight++); + assert( (nSnippet-1-nRight)<=63 && (nSnippet-1-nRight)>=0 ); + nDesired = (nLeft-nRight)/2; + + /* Ideally, the start of the snippet should be pushed forward in the + ** document nDesired tokens. This block checks if there are actually + ** nDesired tokens to the right of the snippet. If so, *piPos and + ** *pHlMask are updated to shift the snippet nDesired tokens to the + ** right. Otherwise, the snippet is shifted by the number of tokens + ** available. + */ + if( nDesired>0 ){ + int nShift; /* Number of tokens to shift snippet by */ + int iCurrent = 0; /* Token counter */ + int rc; /* Return Code */ + sqlite3_tokenizer_module *pMod; + sqlite3_tokenizer_cursor *pC; + pMod = (sqlite3_tokenizer_module *)pTab->pTokenizer->pModule; + + /* Open a cursor on zDoc/nDoc. Check if there are (nSnippet+nDesired) + ** or more tokens in zDoc/nDoc. + */ + rc = sqlite3Fts3OpenTokenizer(pTab->pTokenizer, iLangid, zDoc, nDoc, &pC); + if( rc!=SQLITE_OK ){ + return rc; + } + while( rc==SQLITE_OK && iCurrent<(nSnippet+nDesired) ){ + const char *ZDUMMY; int DUMMY1 = 0, DUMMY2 = 0, DUMMY3 = 0; + rc = pMod->xNext(pC, &ZDUMMY, &DUMMY1, &DUMMY2, &DUMMY3, &iCurrent); + } + pMod->xClose(pC); + if( rc!=SQLITE_OK && rc!=SQLITE_DONE ){ return rc; } + + nShift = (rc==SQLITE_DONE)+iCurrent-nSnippet; + assert( nShift<=nDesired ); + if( nShift>0 ){ + *piPos += nShift; + *pHlmask = hlmask >> nShift; + } + } + } + return SQLITE_OK; +} + +/* +** Extract the snippet text for fragment pFragment from cursor pCsr and +** append it to string buffer pOut. +*/ +static int fts3SnippetText( + Fts3Cursor *pCsr, /* FTS3 Cursor */ + SnippetFragment *pFragment, /* Snippet to extract */ + int iFragment, /* Fragment number */ + int isLast, /* True for final fragment in snippet */ + int nSnippet, /* Number of tokens in extracted snippet */ + const char *zOpen, /* String inserted before highlighted term */ + const char *zClose, /* String inserted after highlighted term */ + const char *zEllipsis, /* String inserted between snippets */ + StrBuffer *pOut /* Write output here */ +){ + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + int rc; /* Return code */ + const char *zDoc; /* Document text to extract snippet from */ + int nDoc; /* Size of zDoc in bytes */ + int iCurrent = 0; /* Current token number of document */ + int iEnd = 0; /* Byte offset of end of current token */ + int isShiftDone = 0; /* True after snippet is shifted */ + int iPos = pFragment->iPos; /* First token of snippet */ + u64 hlmask = pFragment->hlmask; /* Highlight-mask for snippet */ + int iCol = pFragment->iCol+1; /* Query column to extract text from */ + sqlite3_tokenizer_module *pMod; /* Tokenizer module methods object */ + sqlite3_tokenizer_cursor *pC; /* Tokenizer cursor open on zDoc/nDoc */ + + zDoc = (const char *)sqlite3_column_text(pCsr->pStmt, iCol); + if( zDoc==0 ){ + if( sqlite3_column_type(pCsr->pStmt, iCol)!=SQLITE_NULL ){ + return SQLITE_NOMEM; + } + return SQLITE_OK; + } + nDoc = sqlite3_column_bytes(pCsr->pStmt, iCol); + + /* Open a token cursor on the document. */ + pMod = (sqlite3_tokenizer_module *)pTab->pTokenizer->pModule; + rc = sqlite3Fts3OpenTokenizer(pTab->pTokenizer, pCsr->iLangid, zDoc,nDoc,&pC); + if( rc!=SQLITE_OK ){ + return rc; + } + + while( rc==SQLITE_OK ){ + const char *ZDUMMY; /* Dummy argument used with tokenizer */ + int DUMMY1 = -1; /* Dummy argument used with tokenizer */ + int iBegin = 0; /* Offset in zDoc of start of token */ + int iFin = 0; /* Offset in zDoc of end of token */ + int isHighlight = 0; /* True for highlighted terms */ + + /* Variable DUMMY1 is initialized to a negative value above. Elsewhere + ** in the FTS code the variable that the third argument to xNext points to + ** is initialized to zero before the first (*but not necessarily + ** subsequent*) call to xNext(). This is done for a particular application + ** that needs to know whether or not the tokenizer is being used for + ** snippet generation or for some other purpose. + ** + ** Extreme care is required when writing code to depend on this + ** initialization. It is not a documented part of the tokenizer interface. + ** If a tokenizer is used directly by any code outside of FTS, this + ** convention might not be respected. */ + rc = pMod->xNext(pC, &ZDUMMY, &DUMMY1, &iBegin, &iFin, &iCurrent); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_DONE ){ + /* Special case - the last token of the snippet is also the last token + ** of the column. Append any punctuation that occurred between the end + ** of the previous token and the end of the document to the output. + ** Then break out of the loop. */ + rc = fts3StringAppend(pOut, &zDoc[iEnd], -1); + } + break; + } + if( iCurrentiLangid, nSnippet, &zDoc[iBegin], n, &iPos, &hlmask + ); + isShiftDone = 1; + + /* Now that the shift has been done, check if the initial "..." are + ** required. They are required if (a) this is not the first fragment, + ** or (b) this fragment does not begin at position 0 of its column. + */ + if( rc==SQLITE_OK ){ + if( iPos>0 || iFragment>0 ){ + rc = fts3StringAppend(pOut, zEllipsis, -1); + }else if( iBegin ){ + rc = fts3StringAppend(pOut, zDoc, iBegin); + } + } + if( rc!=SQLITE_OK || iCurrent=(iPos+nSnippet) ){ + if( isLast ){ + rc = fts3StringAppend(pOut, zEllipsis, -1); + } + break; + } + + /* Set isHighlight to true if this term should be highlighted. */ + isHighlight = (hlmask & ((u64)1 << (iCurrent-iPos)))!=0; + + if( iCurrent>iPos ) rc = fts3StringAppend(pOut, &zDoc[iEnd], iBegin-iEnd); + if( rc==SQLITE_OK && isHighlight ) rc = fts3StringAppend(pOut, zOpen, -1); + if( rc==SQLITE_OK ) rc = fts3StringAppend(pOut, &zDoc[iBegin], iFin-iBegin); + if( rc==SQLITE_OK && isHighlight ) rc = fts3StringAppend(pOut, zClose, -1); + + iEnd = iFin; + } + + pMod->xClose(pC); + return rc; +} + + +/* +** This function is used to count the entries in a column-list (a +** delta-encoded list of term offsets within a single column of a single +** row). When this function is called, *ppCollist should point to the +** beginning of the first varint in the column-list (the varint that +** contains the position of the first matching term in the column data). +** Before returning, *ppCollist is set to point to the first byte after +** the last varint in the column-list (either the 0x00 signifying the end +** of the position-list, or the 0x01 that precedes the column number of +** the next column in the position-list). +** +** The number of elements in the column-list is returned. +*/ +static int fts3ColumnlistCount(char **ppCollist){ + char *pEnd = *ppCollist; + char c = 0; + int nEntry = 0; + + /* A column-list is terminated by either a 0x01 or 0x00. */ + while( 0xFE & (*pEnd | c) ){ + c = *pEnd++ & 0x80; + if( !c ) nEntry++; + } + + *ppCollist = pEnd; + return nEntry; +} + +/* +** This function gathers 'y' or 'b' data for a single phrase. +*/ +static int fts3ExprLHits( + Fts3Expr *pExpr, /* Phrase expression node */ + MatchInfo *p /* Matchinfo context */ +){ + Fts3Table *pTab = (Fts3Table *)p->pCursor->base.pVtab; + int iStart; + Fts3Phrase *pPhrase = pExpr->pPhrase; + char *pIter = pPhrase->doclist.pList; + int iCol = 0; + + assert( p->flag==FTS3_MATCHINFO_LHITS_BM || p->flag==FTS3_MATCHINFO_LHITS ); + if( p->flag==FTS3_MATCHINFO_LHITS ){ + iStart = pExpr->iPhrase * p->nCol; + }else{ + iStart = pExpr->iPhrase * ((p->nCol + 31) / 32); + } + + if( pIter ) while( 1 ){ + int nHit = fts3ColumnlistCount(&pIter); + if( (pPhrase->iColumn>=pTab->nColumn || pPhrase->iColumn==iCol) ){ + if( p->flag==FTS3_MATCHINFO_LHITS ){ + p->aMatchinfo[iStart + iCol] = (u32)nHit; + }else if( nHit ){ + p->aMatchinfo[iStart + (iCol+1)/32] |= (1 << (iCol&0x1F)); + } + } + assert( *pIter==0x00 || *pIter==0x01 ); + if( *pIter!=0x01 ) break; + pIter++; + pIter += fts3GetVarint32(pIter, &iCol); + if( iCol>=p->nCol ) return FTS_CORRUPT_VTAB; + } + return SQLITE_OK; +} + +/* +** Gather the results for matchinfo directives 'y' and 'b'. +*/ +static int fts3ExprLHitGather( + Fts3Expr *pExpr, + MatchInfo *p +){ + int rc = SQLITE_OK; + assert( (pExpr->pLeft==0)==(pExpr->pRight==0) ); + if( pExpr->bEof==0 && pExpr->iDocid==p->pCursor->iPrevId ){ + if( pExpr->pLeft ){ + rc = fts3ExprLHitGather(pExpr->pLeft, p); + if( rc==SQLITE_OK ) rc = fts3ExprLHitGather(pExpr->pRight, p); + }else{ + rc = fts3ExprLHits(pExpr, p); + } + } + return rc; +} + +/* +** sqlite3Fts3ExprIterate() callback used to collect the "global" matchinfo +** stats for a single query. +** +** sqlite3Fts3ExprIterate() callback to load the 'global' elements of a +** FTS3_MATCHINFO_HITS matchinfo array. The global stats are those elements +** of the matchinfo array that are constant for all rows returned by the +** current query. +** +** Argument pCtx is actually a pointer to a struct of type MatchInfo. This +** function populates Matchinfo.aMatchinfo[] as follows: +** +** for(iCol=0; iColpCursor, pExpr, &p->aMatchinfo[3*iPhrase*p->nCol] + ); +} + +/* +** sqlite3Fts3ExprIterate() callback used to collect the "local" part of the +** FTS3_MATCHINFO_HITS array. The local stats are those elements of the +** array that are different for each row returned by the query. +*/ +static int fts3ExprLocalHitsCb( + Fts3Expr *pExpr, /* Phrase expression node */ + int iPhrase, /* Phrase number */ + void *pCtx /* Pointer to MatchInfo structure */ +){ + int rc = SQLITE_OK; + MatchInfo *p = (MatchInfo *)pCtx; + int iStart = iPhrase * p->nCol * 3; + int i; + + for(i=0; inCol && rc==SQLITE_OK; i++){ + char *pCsr; + rc = sqlite3Fts3EvalPhrasePoslist(p->pCursor, pExpr, i, &pCsr); + if( pCsr ){ + p->aMatchinfo[iStart+i*3] = fts3ColumnlistCount(&pCsr); + }else{ + p->aMatchinfo[iStart+i*3] = 0; + } + } + + return rc; +} + +static int fts3MatchinfoCheck( + Fts3Table *pTab, + char cArg, + char **pzErr +){ + if( (cArg==FTS3_MATCHINFO_NPHRASE) + || (cArg==FTS3_MATCHINFO_NCOL) + || (cArg==FTS3_MATCHINFO_NDOC && pTab->bFts4) + || (cArg==FTS3_MATCHINFO_AVGLENGTH && pTab->bFts4) + || (cArg==FTS3_MATCHINFO_LENGTH && pTab->bHasDocsize) + || (cArg==FTS3_MATCHINFO_LCS) + || (cArg==FTS3_MATCHINFO_HITS) + || (cArg==FTS3_MATCHINFO_LHITS) + || (cArg==FTS3_MATCHINFO_LHITS_BM) + ){ + return SQLITE_OK; + } + sqlite3Fts3ErrMsg(pzErr, "unrecognized matchinfo request: %c", cArg); + return SQLITE_ERROR; +} + +static size_t fts3MatchinfoSize(MatchInfo *pInfo, char cArg){ + size_t nVal; /* Number of integers output by cArg */ + + switch( cArg ){ + case FTS3_MATCHINFO_NDOC: + case FTS3_MATCHINFO_NPHRASE: + case FTS3_MATCHINFO_NCOL: + nVal = 1; + break; + + case FTS3_MATCHINFO_AVGLENGTH: + case FTS3_MATCHINFO_LENGTH: + case FTS3_MATCHINFO_LCS: + nVal = pInfo->nCol; + break; + + case FTS3_MATCHINFO_LHITS: + nVal = (size_t)pInfo->nCol * pInfo->nPhrase; + break; + + case FTS3_MATCHINFO_LHITS_BM: + nVal = (size_t)pInfo->nPhrase * ((pInfo->nCol + 31) / 32); + break; + + default: + assert( cArg==FTS3_MATCHINFO_HITS ); + nVal = (size_t)pInfo->nCol * pInfo->nPhrase * 3; + break; + } + + return nVal; +} + +static int fts3MatchinfoSelectDoctotal( + Fts3Table *pTab, + sqlite3_stmt **ppStmt, + sqlite3_int64 *pnDoc, + const char **paLen, + const char **ppEnd +){ + sqlite3_stmt *pStmt; + const char *a; + const char *pEnd; + sqlite3_int64 nDoc; + int n; + + + if( !*ppStmt ){ + int rc = sqlite3Fts3SelectDoctotal(pTab, ppStmt); + if( rc!=SQLITE_OK ) return rc; + } + pStmt = *ppStmt; + assert( sqlite3_data_count(pStmt)==1 ); + + n = sqlite3_column_bytes(pStmt, 0); + a = sqlite3_column_blob(pStmt, 0); + if( a==0 ){ + return FTS_CORRUPT_VTAB; + } + pEnd = a + n; + a += sqlite3Fts3GetVarintBounded(a, pEnd, &nDoc); + if( nDoc<=0 || a>pEnd ){ + return FTS_CORRUPT_VTAB; + } + *pnDoc = nDoc; + + if( paLen ) *paLen = a; + if( ppEnd ) *ppEnd = pEnd; + return SQLITE_OK; +} + +/* +** An instance of the following structure is used to store state while +** iterating through a multi-column position-list corresponding to the +** hits for a single phrase on a single row in order to calculate the +** values for a matchinfo() FTS3_MATCHINFO_LCS request. +*/ +typedef struct LcsIterator LcsIterator; +struct LcsIterator { + Fts3Expr *pExpr; /* Pointer to phrase expression */ + int iPosOffset; /* Tokens count up to end of this phrase */ + char *pRead; /* Cursor used to iterate through aDoclist */ + int iPos; /* Current position */ +}; + +/* +** If LcsIterator.iCol is set to the following value, the iterator has +** finished iterating through all offsets for all columns. +*/ +#define LCS_ITERATOR_FINISHED 0x7FFFFFFF; + +static int fts3MatchinfoLcsCb( + Fts3Expr *pExpr, /* Phrase expression node */ + int iPhrase, /* Phrase number (numbered from zero) */ + void *pCtx /* Pointer to MatchInfo structure */ +){ + LcsIterator *aIter = (LcsIterator *)pCtx; + aIter[iPhrase].pExpr = pExpr; + return SQLITE_OK; +} + +/* +** Advance the iterator passed as an argument to the next position. Return +** 1 if the iterator is at EOF or if it now points to the start of the +** position list for the next column. +*/ +static int fts3LcsIteratorAdvance(LcsIterator *pIter){ + char *pRead; + sqlite3_int64 iRead; + int rc = 0; + + if( NEVER(pIter==0) ) return 1; + pRead = pIter->pRead; + pRead += sqlite3Fts3GetVarint(pRead, &iRead); + if( iRead==0 || iRead==1 ){ + pRead = 0; + rc = 1; + }else{ + pIter->iPos += (int)(iRead-2); + } + + pIter->pRead = pRead; + return rc; +} + +/* +** This function implements the FTS3_MATCHINFO_LCS matchinfo() flag. +** +** If the call is successful, the longest-common-substring lengths for each +** column are written into the first nCol elements of the pInfo->aMatchinfo[] +** array before returning. SQLITE_OK is returned in this case. +** +** Otherwise, if an error occurs, an SQLite error code is returned and the +** data written to the first nCol elements of pInfo->aMatchinfo[] is +** undefined. +*/ +static int fts3MatchinfoLcs(Fts3Cursor *pCsr, MatchInfo *pInfo){ + LcsIterator *aIter; + int i; + int iCol; + int nToken = 0; + int rc = SQLITE_OK; + + /* Allocate and populate the array of LcsIterator objects. The array + ** contains one element for each matchable phrase in the query. + **/ + aIter = sqlite3Fts3MallocZero(sizeof(LcsIterator) * pCsr->nPhrase); + if( !aIter ) return SQLITE_NOMEM; + (void)sqlite3Fts3ExprIterate(pCsr->pExpr, fts3MatchinfoLcsCb, (void*)aIter); + + for(i=0; inPhrase; i++){ + LcsIterator *pIter = &aIter[i]; + nToken -= pIter->pExpr->pPhrase->nToken; + pIter->iPosOffset = nToken; + } + + for(iCol=0; iColnCol; iCol++){ + int nLcs = 0; /* LCS value for this column */ + int nLive = 0; /* Number of iterators in aIter not at EOF */ + + for(i=0; inPhrase; i++){ + LcsIterator *pIt = &aIter[i]; + rc = sqlite3Fts3EvalPhrasePoslist(pCsr, pIt->pExpr, iCol, &pIt->pRead); + if( rc!=SQLITE_OK ) goto matchinfo_lcs_out; + if( pIt->pRead ){ + pIt->iPos = pIt->iPosOffset; + fts3LcsIteratorAdvance(pIt); + if( pIt->pRead==0 ){ + rc = FTS_CORRUPT_VTAB; + goto matchinfo_lcs_out; + } + nLive++; + } + } + + while( nLive>0 ){ + LcsIterator *pAdv = 0; /* The iterator to advance by one position */ + int nThisLcs = 0; /* LCS for the current iterator positions */ + + for(i=0; inPhrase; i++){ + LcsIterator *pIter = &aIter[i]; + if( pIter->pRead==0 ){ + /* This iterator is already at EOF for this column. */ + nThisLcs = 0; + }else{ + if( pAdv==0 || pIter->iPosiPos ){ + pAdv = pIter; + } + if( nThisLcs==0 || pIter->iPos==pIter[-1].iPos ){ + nThisLcs++; + }else{ + nThisLcs = 1; + } + if( nThisLcs>nLcs ) nLcs = nThisLcs; + } + } + if( fts3LcsIteratorAdvance(pAdv) ) nLive--; + } + + pInfo->aMatchinfo[iCol] = nLcs; + } + + matchinfo_lcs_out: + sqlite3_free(aIter); + return rc; +} + +/* +** Populate the buffer pInfo->aMatchinfo[] with an array of integers to +** be returned by the matchinfo() function. Argument zArg contains the +** format string passed as the second argument to matchinfo (or the +** default value "pcx" if no second argument was specified). The format +** string has already been validated and the pInfo->aMatchinfo[] array +** is guaranteed to be large enough for the output. +** +** If bGlobal is true, then populate all fields of the matchinfo() output. +** If it is false, then assume that those fields that do not change between +** rows (i.e. FTS3_MATCHINFO_NPHRASE, NCOL, NDOC, AVGLENGTH and part of HITS) +** have already been populated. +** +** Return SQLITE_OK if successful, or an SQLite error code if an error +** occurs. If a value other than SQLITE_OK is returned, the state the +** pInfo->aMatchinfo[] buffer is left in is undefined. +*/ +static int fts3MatchinfoValues( + Fts3Cursor *pCsr, /* FTS3 cursor object */ + int bGlobal, /* True to grab the global stats */ + MatchInfo *pInfo, /* Matchinfo context object */ + const char *zArg /* Matchinfo format string */ +){ + int rc = SQLITE_OK; + int i; + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + sqlite3_stmt *pSelect = 0; + + for(i=0; rc==SQLITE_OK && zArg[i]; i++){ + pInfo->flag = zArg[i]; + switch( zArg[i] ){ + case FTS3_MATCHINFO_NPHRASE: + if( bGlobal ) pInfo->aMatchinfo[0] = pInfo->nPhrase; + break; + + case FTS3_MATCHINFO_NCOL: + if( bGlobal ) pInfo->aMatchinfo[0] = pInfo->nCol; + break; + + case FTS3_MATCHINFO_NDOC: + if( bGlobal ){ + sqlite3_int64 nDoc = 0; + rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &nDoc, 0, 0); + pInfo->aMatchinfo[0] = (u32)nDoc; + } + break; + + case FTS3_MATCHINFO_AVGLENGTH: + if( bGlobal ){ + sqlite3_int64 nDoc; /* Number of rows in table */ + const char *a; /* Aggregate column length array */ + const char *pEnd; /* First byte past end of length array */ + + rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &nDoc, &a, &pEnd); + if( rc==SQLITE_OK ){ + int iCol; + for(iCol=0; iColnCol; iCol++){ + u32 iVal; + sqlite3_int64 nToken; + a += sqlite3Fts3GetVarint(a, &nToken); + if( a>pEnd ){ + rc = SQLITE_CORRUPT_VTAB; + break; + } + iVal = (u32)(((u32)(nToken&0xffffffff)+nDoc/2)/nDoc); + pInfo->aMatchinfo[iCol] = iVal; + } + } + } + break; + + case FTS3_MATCHINFO_LENGTH: { + sqlite3_stmt *pSelectDocsize = 0; + rc = sqlite3Fts3SelectDocsize(pTab, pCsr->iPrevId, &pSelectDocsize); + if( rc==SQLITE_OK ){ + int iCol; + const char *a = sqlite3_column_blob(pSelectDocsize, 0); + const char *pEnd = a + sqlite3_column_bytes(pSelectDocsize, 0); + for(iCol=0; iColnCol; iCol++){ + sqlite3_int64 nToken; + a += sqlite3Fts3GetVarintBounded(a, pEnd, &nToken); + if( a>pEnd ){ + rc = SQLITE_CORRUPT_VTAB; + break; + } + pInfo->aMatchinfo[iCol] = (u32)nToken; + } + } + sqlite3_reset(pSelectDocsize); + break; + } + + case FTS3_MATCHINFO_LCS: + rc = fts3ExprLoadDoclists(pCsr, 0, 0); + if( rc==SQLITE_OK ){ + rc = fts3MatchinfoLcs(pCsr, pInfo); + } + break; + + case FTS3_MATCHINFO_LHITS_BM: + case FTS3_MATCHINFO_LHITS: { + size_t nZero = fts3MatchinfoSize(pInfo, zArg[i]) * sizeof(u32); + memset(pInfo->aMatchinfo, 0, nZero); + rc = fts3ExprLHitGather(pCsr->pExpr, pInfo); + break; + } + + default: { + Fts3Expr *pExpr; + assert( zArg[i]==FTS3_MATCHINFO_HITS ); + pExpr = pCsr->pExpr; + rc = fts3ExprLoadDoclists(pCsr, 0, 0); + if( rc!=SQLITE_OK ) break; + if( bGlobal ){ + if( pCsr->pDeferred ){ + rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &pInfo->nDoc,0,0); + if( rc!=SQLITE_OK ) break; + } + rc = sqlite3Fts3ExprIterate(pExpr, fts3ExprGlobalHitsCb,(void*)pInfo); + sqlite3Fts3EvalTestDeferred(pCsr, &rc); + if( rc!=SQLITE_OK ) break; + } + (void)sqlite3Fts3ExprIterate(pExpr, fts3ExprLocalHitsCb,(void*)pInfo); + break; + } + } + + pInfo->aMatchinfo += fts3MatchinfoSize(pInfo, zArg[i]); + } + + sqlite3_reset(pSelect); + return rc; +} + + +/* +** Populate pCsr->aMatchinfo[] with data for the current row. The +** 'matchinfo' data is an array of 32-bit unsigned integers (C type u32). +*/ +static void fts3GetMatchinfo( + sqlite3_context *pCtx, /* Return results here */ + Fts3Cursor *pCsr, /* FTS3 Cursor object */ + const char *zArg /* Second argument to matchinfo() function */ +){ + MatchInfo sInfo; + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + int rc = SQLITE_OK; + int bGlobal = 0; /* Collect 'global' stats as well as local */ + + u32 *aOut = 0; + void (*xDestroyOut)(void*) = 0; + + memset(&sInfo, 0, sizeof(MatchInfo)); + sInfo.pCursor = pCsr; + sInfo.nCol = pTab->nColumn; + + /* If there is cached matchinfo() data, but the format string for the + ** cache does not match the format string for this request, discard + ** the cached data. */ + if( pCsr->pMIBuffer && strcmp(pCsr->pMIBuffer->zMatchinfo, zArg) ){ + sqlite3Fts3MIBufferFree(pCsr->pMIBuffer); + pCsr->pMIBuffer = 0; + } + + /* If Fts3Cursor.pMIBuffer is NULL, then this is the first time the + ** matchinfo function has been called for this query. In this case + ** allocate the array used to accumulate the matchinfo data and + ** initialize those elements that are constant for every row. + */ + if( pCsr->pMIBuffer==0 ){ + size_t nMatchinfo = 0; /* Number of u32 elements in match-info */ + int i; /* Used to iterate through zArg */ + + /* Determine the number of phrases in the query */ + pCsr->nPhrase = fts3ExprPhraseCount(pCsr->pExpr); + sInfo.nPhrase = pCsr->nPhrase; + + /* Determine the number of integers in the buffer returned by this call. */ + for(i=0; zArg[i]; i++){ + char *zErr = 0; + if( fts3MatchinfoCheck(pTab, zArg[i], &zErr) ){ + sqlite3_result_error(pCtx, zErr, -1); + sqlite3_free(zErr); + return; + } + nMatchinfo += fts3MatchinfoSize(&sInfo, zArg[i]); + } + + /* Allocate space for Fts3Cursor.aMatchinfo[] and Fts3Cursor.zMatchinfo. */ + pCsr->pMIBuffer = fts3MIBufferNew(nMatchinfo, zArg); + if( !pCsr->pMIBuffer ) rc = SQLITE_NOMEM; + + pCsr->isMatchinfoNeeded = 1; + bGlobal = 1; + } + + if( rc==SQLITE_OK ){ + xDestroyOut = fts3MIBufferAlloc(pCsr->pMIBuffer, &aOut); + if( xDestroyOut==0 ){ + rc = SQLITE_NOMEM; + } + } + + if( rc==SQLITE_OK ){ + sInfo.aMatchinfo = aOut; + sInfo.nPhrase = pCsr->nPhrase; + rc = fts3MatchinfoValues(pCsr, bGlobal, &sInfo, zArg); + if( bGlobal ){ + fts3MIBufferSetGlobal(pCsr->pMIBuffer); + } + } + + if( rc!=SQLITE_OK ){ + sqlite3_result_error_code(pCtx, rc); + if( xDestroyOut ) xDestroyOut(aOut); + }else{ + int n = pCsr->pMIBuffer->nElem * sizeof(u32); + sqlite3_result_blob(pCtx, aOut, n, xDestroyOut); + } +} + +/* +** Implementation of snippet() function. +*/ +SQLITE_PRIVATE void sqlite3Fts3Snippet( + sqlite3_context *pCtx, /* SQLite function call context */ + Fts3Cursor *pCsr, /* Cursor object */ + const char *zStart, /* Snippet start text - "" */ + const char *zEnd, /* Snippet end text - "" */ + const char *zEllipsis, /* Snippet ellipsis text - "..." */ + int iCol, /* Extract snippet from this column */ + int nToken /* Approximate number of tokens in snippet */ +){ + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + int rc = SQLITE_OK; + int i; + StrBuffer res = {0, 0, 0}; + + /* The returned text includes up to four fragments of text extracted from + ** the data in the current row. The first iteration of the for(...) loop + ** below attempts to locate a single fragment of text nToken tokens in + ** size that contains at least one instance of all phrases in the query + ** expression that appear in the current row. If such a fragment of text + ** cannot be found, the second iteration of the loop attempts to locate + ** a pair of fragments, and so on. + */ + int nSnippet = 0; /* Number of fragments in this snippet */ + SnippetFragment aSnippet[4]; /* Maximum of 4 fragments per snippet */ + int nFToken = -1; /* Number of tokens in each fragment */ + + if( !pCsr->pExpr ){ + sqlite3_result_text(pCtx, "", 0, SQLITE_STATIC); + return; + } + + /* Limit the snippet length to 64 tokens. */ + if( nToken<-64 ) nToken = -64; + if( nToken>+64 ) nToken = +64; + + for(nSnippet=1; 1; nSnippet++){ + + int iSnip; /* Loop counter 0..nSnippet-1 */ + u64 mCovered = 0; /* Bitmask of phrases covered by snippet */ + u64 mSeen = 0; /* Bitmask of phrases seen by BestSnippet() */ + + if( nToken>=0 ){ + nFToken = (nToken+nSnippet-1) / nSnippet; + }else{ + nFToken = -1 * nToken; + } + + for(iSnip=0; iSnipnColumn; iRead++){ + SnippetFragment sF = {0, 0, 0, 0}; + int iS = 0; + if( iCol>=0 && iRead!=iCol ) continue; + + /* Find the best snippet of nFToken tokens in column iRead. */ + rc = fts3BestSnippet(nFToken, pCsr, iRead, mCovered, &mSeen, &sF, &iS); + if( rc!=SQLITE_OK ){ + goto snippet_out; + } + if( iS>iBestScore ){ + *pFragment = sF; + iBestScore = iS; + } + } + + mCovered |= pFragment->covered; + } + + /* If all query phrases seen by fts3BestSnippet() are present in at least + ** one of the nSnippet snippet fragments, break out of the loop. + */ + assert( (mCovered&mSeen)==mCovered ); + if( mSeen==mCovered || nSnippet==SizeofArray(aSnippet) ) break; + } + + assert( nFToken>0 ); + + for(i=0; ipCsr, pExpr, p->iCol, &pList); + nTerm = pExpr->pPhrase->nToken; + if( pList ){ + fts3GetDeltaPosition(&pList, &iPos); + assert_fts3_nc( iPos>=0 ); + } + + for(iTerm=0; iTermaTerm[p->iTerm++]; + pT->iOff = nTerm-iTerm-1; + pT->pList = pList; + pT->iPos = iPos; + } + + return rc; +} + +/* +** If expression pExpr is a phrase expression that uses an MSR query, +** restart it as a regular, non-incremental query. Return SQLITE_OK +** if successful, or an SQLite error code otherwise. +*/ +static int fts3ExprRestartIfCb(Fts3Expr *pExpr, int iPhrase, void *ctx){ + TermOffsetCtx *p = (TermOffsetCtx*)ctx; + int rc = SQLITE_OK; + UNUSED_PARAMETER(iPhrase); + if( pExpr->pPhrase && pExpr->pPhrase->bIncr ){ + rc = sqlite3Fts3MsrCancel(p->pCsr, pExpr); + pExpr->pPhrase->bIncr = 0; + } + return rc; +} + +/* +** Implementation of offsets() function. +*/ +SQLITE_PRIVATE void sqlite3Fts3Offsets( + sqlite3_context *pCtx, /* SQLite function call context */ + Fts3Cursor *pCsr /* Cursor object */ +){ + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + sqlite3_tokenizer_module const *pMod = pTab->pTokenizer->pModule; + int rc; /* Return Code */ + int nToken; /* Number of tokens in query */ + int iCol; /* Column currently being processed */ + StrBuffer res = {0, 0, 0}; /* Result string */ + TermOffsetCtx sCtx; /* Context for fts3ExprTermOffsetInit() */ + + if( !pCsr->pExpr ){ + sqlite3_result_text(pCtx, "", 0, SQLITE_STATIC); + return; + } + + memset(&sCtx, 0, sizeof(sCtx)); + assert( pCsr->isRequireSeek==0 ); + + /* Count the number of terms in the query */ + rc = fts3ExprLoadDoclists(pCsr, 0, &nToken); + if( rc!=SQLITE_OK ) goto offsets_out; + + /* Allocate the array of TermOffset iterators. */ + sCtx.aTerm = (TermOffset *)sqlite3Fts3MallocZero(sizeof(TermOffset)*nToken); + if( 0==sCtx.aTerm ){ + rc = SQLITE_NOMEM; + goto offsets_out; + } + sCtx.iDocid = pCsr->iPrevId; + sCtx.pCsr = pCsr; + + /* If a query restart will be required, do it here, rather than later of + ** after pointers to poslist buffers that may be invalidated by a restart + ** have been saved. */ + rc = sqlite3Fts3ExprIterate(pCsr->pExpr, fts3ExprRestartIfCb, (void*)&sCtx); + if( rc!=SQLITE_OK ) goto offsets_out; + + /* Loop through the table columns, appending offset information to + ** string-buffer res for each column. + */ + for(iCol=0; iColnColumn; iCol++){ + sqlite3_tokenizer_cursor *pC; /* Tokenizer cursor */ + const char *ZDUMMY; /* Dummy argument used with xNext() */ + int NDUMMY = 0; /* Dummy argument used with xNext() */ + int iStart = 0; + int iEnd = 0; + int iCurrent = 0; + const char *zDoc; + int nDoc; + + /* Initialize the contents of sCtx.aTerm[] for column iCol. This + ** operation may fail if the database contains corrupt records. + */ + sCtx.iCol = iCol; + sCtx.iTerm = 0; + rc = sqlite3Fts3ExprIterate( + pCsr->pExpr, fts3ExprTermOffsetInit, (void*)&sCtx + ); + if( rc!=SQLITE_OK ) goto offsets_out; + + /* Retreive the text stored in column iCol. If an SQL NULL is stored + ** in column iCol, jump immediately to the next iteration of the loop. + ** If an OOM occurs while retrieving the data (this can happen if SQLite + ** needs to transform the data from utf-16 to utf-8), return SQLITE_NOMEM + ** to the caller. + */ + zDoc = (const char *)sqlite3_column_text(pCsr->pStmt, iCol+1); + nDoc = sqlite3_column_bytes(pCsr->pStmt, iCol+1); + if( zDoc==0 ){ + if( sqlite3_column_type(pCsr->pStmt, iCol+1)==SQLITE_NULL ){ + continue; + } + rc = SQLITE_NOMEM; + goto offsets_out; + } + + /* Initialize a tokenizer iterator to iterate through column iCol. */ + rc = sqlite3Fts3OpenTokenizer(pTab->pTokenizer, pCsr->iLangid, + zDoc, nDoc, &pC + ); + if( rc!=SQLITE_OK ) goto offsets_out; + + rc = pMod->xNext(pC, &ZDUMMY, &NDUMMY, &iStart, &iEnd, &iCurrent); + while( rc==SQLITE_OK ){ + int i; /* Used to loop through terms */ + int iMinPos = 0x7FFFFFFF; /* Position of next token */ + TermOffset *pTerm = 0; /* TermOffset associated with next token */ + + for(i=0; ipList && (pT->iPos-pT->iOff)iPos-pT->iOff; + pTerm = pT; + } + } + + if( !pTerm ){ + /* All offsets for this column have been gathered. */ + rc = SQLITE_DONE; + }else{ + assert_fts3_nc( iCurrent<=iMinPos ); + if( 0==(0xFE&*pTerm->pList) ){ + pTerm->pList = 0; + }else{ + fts3GetDeltaPosition(&pTerm->pList, &pTerm->iPos); + } + while( rc==SQLITE_OK && iCurrentxNext(pC, &ZDUMMY, &NDUMMY, &iStart, &iEnd, &iCurrent); + } + if( rc==SQLITE_OK ){ + char aBuffer[64]; + sqlite3_snprintf(sizeof(aBuffer), aBuffer, + "%d %d %d %d ", iCol, pTerm-sCtx.aTerm, iStart, iEnd-iStart + ); + rc = fts3StringAppend(&res, aBuffer, -1); + }else if( rc==SQLITE_DONE && pTab->zContentTbl==0 ){ + rc = FTS_CORRUPT_VTAB; + } + } + } + if( rc==SQLITE_DONE ){ + rc = SQLITE_OK; + } + + pMod->xClose(pC); + if( rc!=SQLITE_OK ) goto offsets_out; + } + + offsets_out: + sqlite3_free(sCtx.aTerm); + assert( rc!=SQLITE_DONE ); + sqlite3Fts3SegmentsClose(pTab); + if( rc!=SQLITE_OK ){ + sqlite3_result_error_code(pCtx, rc); + sqlite3_free(res.z); + }else{ + sqlite3_result_text(pCtx, res.z, res.n-1, sqlite3_free); + } + return; +} + +/* +** Implementation of matchinfo() function. +*/ +SQLITE_PRIVATE void sqlite3Fts3Matchinfo( + sqlite3_context *pContext, /* Function call context */ + Fts3Cursor *pCsr, /* FTS3 table cursor */ + const char *zArg /* Second arg to matchinfo() function */ +){ + Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; + const char *zFormat; + + if( zArg ){ + zFormat = zArg; + }else{ + zFormat = FTS3_MATCHINFO_DEFAULT; + } + + if( !pCsr->pExpr ){ + sqlite3_result_blob(pContext, "", 0, SQLITE_STATIC); + return; + }else{ + /* Retrieve matchinfo() data. */ + fts3GetMatchinfo(pContext, pCsr, zFormat); + sqlite3Fts3SegmentsClose(pTab); + } +} + +#endif + +/************** End of fts3_snippet.c ****************************************/ +/************** Begin file fts3_unicode.c ************************************/ +/* +** 2012 May 24 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** Implementation of the "unicode" full-text-search tokenizer. +*/ + +#ifndef SQLITE_DISABLE_FTS3_UNICODE + +/* #include "fts3Int.h" */ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +/* #include */ +/* #include */ +/* #include */ +/* #include */ + +/* #include "fts3_tokenizer.h" */ + +/* +** The following two macros - READ_UTF8 and WRITE_UTF8 - have been copied +** from the sqlite3 source file utf.c. If this file is compiled as part +** of the amalgamation, they are not required. +*/ +#ifndef SQLITE_AMALGAMATION + +static const unsigned char sqlite3Utf8Trans1[] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x00, 0x00, +}; + +#define READ_UTF8(zIn, zTerm, c) \ + c = *(zIn++); \ + if( c>=0xc0 ){ \ + c = sqlite3Utf8Trans1[c-0xc0]; \ + while( zIn!=zTerm && (*zIn & 0xc0)==0x80 ){ \ + c = (c<<6) + (0x3f & *(zIn++)); \ + } \ + if( c<0x80 \ + || (c&0xFFFFF800)==0xD800 \ + || (c&0xFFFFFFFE)==0xFFFE ){ c = 0xFFFD; } \ + } + +#define WRITE_UTF8(zOut, c) { \ + if( c<0x00080 ){ \ + *zOut++ = (u8)(c&0xFF); \ + } \ + else if( c<0x00800 ){ \ + *zOut++ = 0xC0 + (u8)((c>>6)&0x1F); \ + *zOut++ = 0x80 + (u8)(c & 0x3F); \ + } \ + else if( c<0x10000 ){ \ + *zOut++ = 0xE0 + (u8)((c>>12)&0x0F); \ + *zOut++ = 0x80 + (u8)((c>>6) & 0x3F); \ + *zOut++ = 0x80 + (u8)(c & 0x3F); \ + }else{ \ + *zOut++ = 0xF0 + (u8)((c>>18) & 0x07); \ + *zOut++ = 0x80 + (u8)((c>>12) & 0x3F); \ + *zOut++ = 0x80 + (u8)((c>>6) & 0x3F); \ + *zOut++ = 0x80 + (u8)(c & 0x3F); \ + } \ +} + +#endif /* ifndef SQLITE_AMALGAMATION */ + +typedef struct unicode_tokenizer unicode_tokenizer; +typedef struct unicode_cursor unicode_cursor; + +struct unicode_tokenizer { + sqlite3_tokenizer base; + int eRemoveDiacritic; + int nException; + int *aiException; +}; + +struct unicode_cursor { + sqlite3_tokenizer_cursor base; + const unsigned char *aInput; /* Input text being tokenized */ + int nInput; /* Size of aInput[] in bytes */ + int iOff; /* Current offset within aInput[] */ + int iToken; /* Index of next token to be returned */ + char *zToken; /* storage for current token */ + int nAlloc; /* space allocated at zToken */ +}; + + +/* +** Destroy a tokenizer allocated by unicodeCreate(). +*/ +static int unicodeDestroy(sqlite3_tokenizer *pTokenizer){ + if( pTokenizer ){ + unicode_tokenizer *p = (unicode_tokenizer *)pTokenizer; + sqlite3_free(p->aiException); + sqlite3_free(p); + } + return SQLITE_OK; +} + +/* +** As part of a tokenchars= or separators= option, the CREATE VIRTUAL TABLE +** statement has specified that the tokenizer for this table shall consider +** all characters in string zIn/nIn to be separators (if bAlnum==0) or +** token characters (if bAlnum==1). +** +** For each codepoint in the zIn/nIn string, this function checks if the +** sqlite3FtsUnicodeIsalnum() function already returns the desired result. +** If so, no action is taken. Otherwise, the codepoint is added to the +** unicode_tokenizer.aiException[] array. For the purposes of tokenization, +** the return value of sqlite3FtsUnicodeIsalnum() is inverted for all +** codepoints in the aiException[] array. +** +** If a standalone diacritic mark (one that sqlite3FtsUnicodeIsdiacritic() +** identifies as a diacritic) occurs in the zIn/nIn string it is ignored. +** It is not possible to change the behavior of the tokenizer with respect +** to these codepoints. +*/ +static int unicodeAddExceptions( + unicode_tokenizer *p, /* Tokenizer to add exceptions to */ + int bAlnum, /* Replace Isalnum() return value with this */ + const char *zIn, /* Array of characters to make exceptions */ + int nIn /* Length of z in bytes */ +){ + const unsigned char *z = (const unsigned char *)zIn; + const unsigned char *zTerm = &z[nIn]; + unsigned int iCode; + int nEntry = 0; + + assert( bAlnum==0 || bAlnum==1 ); + + while( zaiException,(p->nException+nEntry)*sizeof(int)); + if( aNew==0 ) return SQLITE_NOMEM; + nNew = p->nException; + + z = (const unsigned char *)zIn; + while( zi; j--) aNew[j] = aNew[j-1]; + aNew[i] = (int)iCode; + nNew++; + } + } + p->aiException = aNew; + p->nException = nNew; + } + + return SQLITE_OK; +} + +/* +** Return true if the p->aiException[] array contains the value iCode. +*/ +static int unicodeIsException(unicode_tokenizer *p, int iCode){ + if( p->nException>0 ){ + int *a = p->aiException; + int iLo = 0; + int iHi = p->nException-1; + + while( iHi>=iLo ){ + int iTest = (iHi + iLo) / 2; + if( iCode==a[iTest] ){ + return 1; + }else if( iCode>a[iTest] ){ + iLo = iTest+1; + }else{ + iHi = iTest-1; + } + } + } + + return 0; +} + +/* +** Return true if, for the purposes of tokenization, codepoint iCode is +** considered a token character (not a separator). +*/ +static int unicodeIsAlnum(unicode_tokenizer *p, int iCode){ + assert( (sqlite3FtsUnicodeIsalnum(iCode) & 0xFFFFFFFE)==0 ); + return sqlite3FtsUnicodeIsalnum(iCode) ^ unicodeIsException(p, iCode); +} + +/* +** Create a new tokenizer instance. +*/ +static int unicodeCreate( + int nArg, /* Size of array argv[] */ + const char * const *azArg, /* Tokenizer creation arguments */ + sqlite3_tokenizer **pp /* OUT: New tokenizer handle */ +){ + unicode_tokenizer *pNew; /* New tokenizer object */ + int i; + int rc = SQLITE_OK; + + pNew = (unicode_tokenizer *) sqlite3_malloc(sizeof(unicode_tokenizer)); + if( pNew==NULL ) return SQLITE_NOMEM; + memset(pNew, 0, sizeof(unicode_tokenizer)); + pNew->eRemoveDiacritic = 1; + + for(i=0; rc==SQLITE_OK && ieRemoveDiacritic = 1; + } + else if( n==19 && memcmp("remove_diacritics=0", z, 19)==0 ){ + pNew->eRemoveDiacritic = 0; + } + else if( n==19 && memcmp("remove_diacritics=2", z, 19)==0 ){ + pNew->eRemoveDiacritic = 2; + } + else if( n>=11 && memcmp("tokenchars=", z, 11)==0 ){ + rc = unicodeAddExceptions(pNew, 1, &z[11], n-11); + } + else if( n>=11 && memcmp("separators=", z, 11)==0 ){ + rc = unicodeAddExceptions(pNew, 0, &z[11], n-11); + } + else{ + /* Unrecognized argument */ + rc = SQLITE_ERROR; + } + } + + if( rc!=SQLITE_OK ){ + unicodeDestroy((sqlite3_tokenizer *)pNew); + pNew = 0; + } + *pp = (sqlite3_tokenizer *)pNew; + return rc; +} + +/* +** Prepare to begin tokenizing a particular string. The input +** string to be tokenized is pInput[0..nBytes-1]. A cursor +** used to incrementally tokenize this string is returned in +** *ppCursor. +*/ +static int unicodeOpen( + sqlite3_tokenizer *p, /* The tokenizer */ + const char *aInput, /* Input string */ + int nInput, /* Size of string aInput in bytes */ + sqlite3_tokenizer_cursor **pp /* OUT: New cursor object */ +){ + unicode_cursor *pCsr; + + pCsr = (unicode_cursor *)sqlite3_malloc(sizeof(unicode_cursor)); + if( pCsr==0 ){ + return SQLITE_NOMEM; + } + memset(pCsr, 0, sizeof(unicode_cursor)); + + pCsr->aInput = (const unsigned char *)aInput; + if( aInput==0 ){ + pCsr->nInput = 0; + pCsr->aInput = (const unsigned char*)""; + }else if( nInput<0 ){ + pCsr->nInput = (int)strlen(aInput); + }else{ + pCsr->nInput = nInput; + } + + *pp = &pCsr->base; + UNUSED_PARAMETER(p); + return SQLITE_OK; +} + +/* +** Close a tokenization cursor previously opened by a call to +** simpleOpen() above. +*/ +static int unicodeClose(sqlite3_tokenizer_cursor *pCursor){ + unicode_cursor *pCsr = (unicode_cursor *) pCursor; + sqlite3_free(pCsr->zToken); + sqlite3_free(pCsr); + return SQLITE_OK; +} + +/* +** Extract the next token from a tokenization cursor. The cursor must +** have been opened by a prior call to simpleOpen(). +*/ +static int unicodeNext( + sqlite3_tokenizer_cursor *pC, /* Cursor returned by simpleOpen */ + const char **paToken, /* OUT: Token text */ + int *pnToken, /* OUT: Number of bytes at *paToken */ + int *piStart, /* OUT: Starting offset of token */ + int *piEnd, /* OUT: Ending offset of token */ + int *piPos /* OUT: Position integer of token */ +){ + unicode_cursor *pCsr = (unicode_cursor *)pC; + unicode_tokenizer *p = ((unicode_tokenizer *)pCsr->base.pTokenizer); + unsigned int iCode = 0; + char *zOut; + const unsigned char *z = &pCsr->aInput[pCsr->iOff]; + const unsigned char *zStart = z; + const unsigned char *zEnd; + const unsigned char *zTerm = &pCsr->aInput[pCsr->nInput]; + + /* Scan past any delimiter characters before the start of the next token. + ** Return SQLITE_DONE early if this takes us all the way to the end of + ** the input. */ + while( z=zTerm ) return SQLITE_DONE; + + zOut = pCsr->zToken; + do { + int iOut; + + /* Grow the output buffer if required. */ + if( (zOut-pCsr->zToken)>=(pCsr->nAlloc-4) ){ + char *zNew = sqlite3_realloc64(pCsr->zToken, pCsr->nAlloc+64); + if( !zNew ) return SQLITE_NOMEM; + zOut = &zNew[zOut - pCsr->zToken]; + pCsr->zToken = zNew; + pCsr->nAlloc += 64; + } + + /* Write the folded case of the last character read to the output */ + zEnd = z; + iOut = sqlite3FtsUnicodeFold((int)iCode, p->eRemoveDiacritic); + if( iOut ){ + WRITE_UTF8(zOut, iOut); + } + + /* If the cursor is not at EOF, read the next character */ + if( z>=zTerm ) break; + READ_UTF8(z, zTerm, iCode); + }while( unicodeIsAlnum(p, (int)iCode) + || sqlite3FtsUnicodeIsdiacritic((int)iCode) + ); + + /* Set the output variables and return. */ + pCsr->iOff = (int)(z - pCsr->aInput); + *paToken = pCsr->zToken; + *pnToken = (int)(zOut - pCsr->zToken); + *piStart = (int)(zStart - pCsr->aInput); + *piEnd = (int)(zEnd - pCsr->aInput); + *piPos = pCsr->iToken++; + return SQLITE_OK; +} + +/* +** Set *ppModule to a pointer to the sqlite3_tokenizer_module +** structure for the unicode tokenizer. +*/ +SQLITE_PRIVATE void sqlite3Fts3UnicodeTokenizer(sqlite3_tokenizer_module const **ppModule){ + static const sqlite3_tokenizer_module module = { + 0, + unicodeCreate, + unicodeDestroy, + unicodeOpen, + unicodeClose, + unicodeNext, + 0, + }; + *ppModule = &module; +} + +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ +#endif /* ifndef SQLITE_DISABLE_FTS3_UNICODE */ + +/************** End of fts3_unicode.c ****************************************/ +/************** Begin file fts3_unicode2.c ***********************************/ +/* +** 2012-05-25 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +*/ + +/* +** DO NOT EDIT THIS MACHINE GENERATED FILE. +*/ + +#ifndef SQLITE_DISABLE_FTS3_UNICODE +#if defined(SQLITE_ENABLE_FTS3) || defined(SQLITE_ENABLE_FTS4) + +/* #include */ + +/* +** Return true if the argument corresponds to a unicode codepoint +** classified as either a letter or a number. Otherwise false. +** +** The results are undefined if the value passed to this function +** is less than zero. +*/ +SQLITE_PRIVATE int sqlite3FtsUnicodeIsalnum(int c){ + /* Each unsigned integer in the following array corresponds to a contiguous + ** range of unicode codepoints that are not either letters or numbers (i.e. + ** codepoints for which this function should return 0). + ** + ** The most significant 22 bits in each 32-bit value contain the first + ** codepoint in the range. The least significant 10 bits are used to store + ** the size of the range (always at least 1). In other words, the value + ** ((C<<22) + N) represents a range of N codepoints starting with codepoint + ** C. It is not possible to represent a range larger than 1023 codepoints + ** using this format. + */ + static const unsigned int aEntry[] = { + 0x00000030, 0x0000E807, 0x00016C06, 0x0001EC2F, 0x0002AC07, + 0x0002D001, 0x0002D803, 0x0002EC01, 0x0002FC01, 0x00035C01, + 0x0003DC01, 0x000B0804, 0x000B480E, 0x000B9407, 0x000BB401, + 0x000BBC81, 0x000DD401, 0x000DF801, 0x000E1002, 0x000E1C01, + 0x000FD801, 0x00120808, 0x00156806, 0x00162402, 0x00163C01, + 0x00164437, 0x0017CC02, 0x00180005, 0x00181816, 0x00187802, + 0x00192C15, 0x0019A804, 0x0019C001, 0x001B5001, 0x001B580F, + 0x001B9C07, 0x001BF402, 0x001C000E, 0x001C3C01, 0x001C4401, + 0x001CC01B, 0x001E980B, 0x001FAC09, 0x001FD804, 0x00205804, + 0x00206C09, 0x00209403, 0x0020A405, 0x0020C00F, 0x00216403, + 0x00217801, 0x0023901B, 0x00240004, 0x0024E803, 0x0024F812, + 0x00254407, 0x00258804, 0x0025C001, 0x00260403, 0x0026F001, + 0x0026F807, 0x00271C02, 0x00272C03, 0x00275C01, 0x00278802, + 0x0027C802, 0x0027E802, 0x00280403, 0x0028F001, 0x0028F805, + 0x00291C02, 0x00292C03, 0x00294401, 0x0029C002, 0x0029D401, + 0x002A0403, 0x002AF001, 0x002AF808, 0x002B1C03, 0x002B2C03, + 0x002B8802, 0x002BC002, 0x002C0403, 0x002CF001, 0x002CF807, + 0x002D1C02, 0x002D2C03, 0x002D5802, 0x002D8802, 0x002DC001, + 0x002E0801, 0x002EF805, 0x002F1803, 0x002F2804, 0x002F5C01, + 0x002FCC08, 0x00300403, 0x0030F807, 0x00311803, 0x00312804, + 0x00315402, 0x00318802, 0x0031FC01, 0x00320802, 0x0032F001, + 0x0032F807, 0x00331803, 0x00332804, 0x00335402, 0x00338802, + 0x00340802, 0x0034F807, 0x00351803, 0x00352804, 0x00355C01, + 0x00358802, 0x0035E401, 0x00360802, 0x00372801, 0x00373C06, + 0x00375801, 0x00376008, 0x0037C803, 0x0038C401, 0x0038D007, + 0x0038FC01, 0x00391C09, 0x00396802, 0x003AC401, 0x003AD006, + 0x003AEC02, 0x003B2006, 0x003C041F, 0x003CD00C, 0x003DC417, + 0x003E340B, 0x003E6424, 0x003EF80F, 0x003F380D, 0x0040AC14, + 0x00412806, 0x00415804, 0x00417803, 0x00418803, 0x00419C07, + 0x0041C404, 0x0042080C, 0x00423C01, 0x00426806, 0x0043EC01, + 0x004D740C, 0x004E400A, 0x00500001, 0x0059B402, 0x005A0001, + 0x005A6C02, 0x005BAC03, 0x005C4803, 0x005CC805, 0x005D4802, + 0x005DC802, 0x005ED023, 0x005F6004, 0x005F7401, 0x0060000F, + 0x0062A401, 0x0064800C, 0x0064C00C, 0x00650001, 0x00651002, + 0x0066C011, 0x00672002, 0x00677822, 0x00685C05, 0x00687802, + 0x0069540A, 0x0069801D, 0x0069FC01, 0x006A8007, 0x006AA006, + 0x006C0005, 0x006CD011, 0x006D6823, 0x006E0003, 0x006E840D, + 0x006F980E, 0x006FF004, 0x00709014, 0x0070EC05, 0x0071F802, + 0x00730008, 0x00734019, 0x0073B401, 0x0073C803, 0x00770027, + 0x0077F004, 0x007EF401, 0x007EFC03, 0x007F3403, 0x007F7403, + 0x007FB403, 0x007FF402, 0x00800065, 0x0081A806, 0x0081E805, + 0x00822805, 0x0082801A, 0x00834021, 0x00840002, 0x00840C04, + 0x00842002, 0x00845001, 0x00845803, 0x00847806, 0x00849401, + 0x00849C01, 0x0084A401, 0x0084B801, 0x0084E802, 0x00850005, + 0x00852804, 0x00853C01, 0x00864264, 0x00900027, 0x0091000B, + 0x0092704E, 0x00940200, 0x009C0475, 0x009E53B9, 0x00AD400A, + 0x00B39406, 0x00B3BC03, 0x00B3E404, 0x00B3F802, 0x00B5C001, + 0x00B5FC01, 0x00B7804F, 0x00B8C00C, 0x00BA001A, 0x00BA6C59, + 0x00BC00D6, 0x00BFC00C, 0x00C00005, 0x00C02019, 0x00C0A807, + 0x00C0D802, 0x00C0F403, 0x00C26404, 0x00C28001, 0x00C3EC01, + 0x00C64002, 0x00C6580A, 0x00C70024, 0x00C8001F, 0x00C8A81E, + 0x00C94001, 0x00C98020, 0x00CA2827, 0x00CB003F, 0x00CC0100, + 0x01370040, 0x02924037, 0x0293F802, 0x02983403, 0x0299BC10, + 0x029A7C01, 0x029BC008, 0x029C0017, 0x029C8002, 0x029E2402, + 0x02A00801, 0x02A01801, 0x02A02C01, 0x02A08C09, 0x02A0D804, + 0x02A1D004, 0x02A20002, 0x02A2D011, 0x02A33802, 0x02A38012, + 0x02A3E003, 0x02A4980A, 0x02A51C0D, 0x02A57C01, 0x02A60004, + 0x02A6CC1B, 0x02A77802, 0x02A8A40E, 0x02A90C01, 0x02A93002, + 0x02A97004, 0x02A9DC03, 0x02A9EC01, 0x02AAC001, 0x02AAC803, + 0x02AADC02, 0x02AAF802, 0x02AB0401, 0x02AB7802, 0x02ABAC07, + 0x02ABD402, 0x02AF8C0B, 0x03600001, 0x036DFC02, 0x036FFC02, + 0x037FFC01, 0x03EC7801, 0x03ECA401, 0x03EEC810, 0x03F4F802, + 0x03F7F002, 0x03F8001A, 0x03F88007, 0x03F8C023, 0x03F95013, + 0x03F9A004, 0x03FBFC01, 0x03FC040F, 0x03FC6807, 0x03FCEC06, + 0x03FD6C0B, 0x03FF8007, 0x03FFA007, 0x03FFE405, 0x04040003, + 0x0404DC09, 0x0405E411, 0x0406400C, 0x0407402E, 0x040E7C01, + 0x040F4001, 0x04215C01, 0x04247C01, 0x0424FC01, 0x04280403, + 0x04281402, 0x04283004, 0x0428E003, 0x0428FC01, 0x04294009, + 0x0429FC01, 0x042CE407, 0x04400003, 0x0440E016, 0x04420003, + 0x0442C012, 0x04440003, 0x04449C0E, 0x04450004, 0x04460003, + 0x0446CC0E, 0x04471404, 0x045AAC0D, 0x0491C004, 0x05BD442E, + 0x05BE3C04, 0x074000F6, 0x07440027, 0x0744A4B5, 0x07480046, + 0x074C0057, 0x075B0401, 0x075B6C01, 0x075BEC01, 0x075C5401, + 0x075CD401, 0x075D3C01, 0x075DBC01, 0x075E2401, 0x075EA401, + 0x075F0C01, 0x07BBC002, 0x07C0002C, 0x07C0C064, 0x07C2800F, + 0x07C2C40E, 0x07C3040F, 0x07C3440F, 0x07C4401F, 0x07C4C03C, + 0x07C5C02B, 0x07C7981D, 0x07C8402B, 0x07C90009, 0x07C94002, + 0x07CC0021, 0x07CCC006, 0x07CCDC46, 0x07CE0014, 0x07CE8025, + 0x07CF1805, 0x07CF8011, 0x07D0003F, 0x07D10001, 0x07D108B6, + 0x07D3E404, 0x07D4003E, 0x07D50004, 0x07D54018, 0x07D7EC46, + 0x07D9140B, 0x07DA0046, 0x07DC0074, 0x38000401, 0x38008060, + 0x380400F0, + }; + static const unsigned int aAscii[4] = { + 0xFFFFFFFF, 0xFC00FFFF, 0xF8000001, 0xF8000001, + }; + + if( (unsigned int)c<128 ){ + return ( (aAscii[c >> 5] & ((unsigned int)1 << (c & 0x001F)))==0 ); + }else if( (unsigned int)c<(1<<22) ){ + unsigned int key = (((unsigned int)c)<<10) | 0x000003FF; + int iRes = 0; + int iHi = sizeof(aEntry)/sizeof(aEntry[0]) - 1; + int iLo = 0; + while( iHi>=iLo ){ + int iTest = (iHi + iLo) / 2; + if( key >= aEntry[iTest] ){ + iRes = iTest; + iLo = iTest+1; + }else{ + iHi = iTest-1; + } + } + assert( aEntry[0]=aEntry[iRes] ); + return (((unsigned int)c) >= ((aEntry[iRes]>>10) + (aEntry[iRes]&0x3FF))); + } + return 1; +} + + +/* +** If the argument is a codepoint corresponding to a lowercase letter +** in the ASCII range with a diacritic added, return the codepoint +** of the ASCII letter only. For example, if passed 235 - "LATIN +** SMALL LETTER E WITH DIAERESIS" - return 65 ("LATIN SMALL LETTER +** E"). The resuls of passing a codepoint that corresponds to an +** uppercase letter are undefined. +*/ +static int remove_diacritic(int c, int bComplex){ + unsigned short aDia[] = { + 0, 1797, 1848, 1859, 1891, 1928, 1940, 1995, + 2024, 2040, 2060, 2110, 2168, 2206, 2264, 2286, + 2344, 2383, 2472, 2488, 2516, 2596, 2668, 2732, + 2782, 2842, 2894, 2954, 2984, 3000, 3028, 3336, + 3456, 3696, 3712, 3728, 3744, 3766, 3832, 3896, + 3912, 3928, 3944, 3968, 4008, 4040, 4056, 4106, + 4138, 4170, 4202, 4234, 4266, 4296, 4312, 4344, + 4408, 4424, 4442, 4472, 4488, 4504, 6148, 6198, + 6264, 6280, 6360, 6429, 6505, 6529, 61448, 61468, + 61512, 61534, 61592, 61610, 61642, 61672, 61688, 61704, + 61726, 61784, 61800, 61816, 61836, 61880, 61896, 61914, + 61948, 61998, 62062, 62122, 62154, 62184, 62200, 62218, + 62252, 62302, 62364, 62410, 62442, 62478, 62536, 62554, + 62584, 62604, 62640, 62648, 62656, 62664, 62730, 62766, + 62830, 62890, 62924, 62974, 63032, 63050, 63082, 63118, + 63182, 63242, 63274, 63310, 63368, 63390, + }; +#define HIBIT ((unsigned char)0x80) + unsigned char aChar[] = { + '\0', 'a', 'c', 'e', 'i', 'n', + 'o', 'u', 'y', 'y', 'a', 'c', + 'd', 'e', 'e', 'g', 'h', 'i', + 'j', 'k', 'l', 'n', 'o', 'r', + 's', 't', 'u', 'u', 'w', 'y', + 'z', 'o', 'u', 'a', 'i', 'o', + 'u', 'u'|HIBIT, 'a'|HIBIT, 'g', 'k', 'o', + 'o'|HIBIT, 'j', 'g', 'n', 'a'|HIBIT, 'a', + 'e', 'i', 'o', 'r', 'u', 's', + 't', 'h', 'a', 'e', 'o'|HIBIT, 'o', + 'o'|HIBIT, 'y', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', 'a', 'b', + 'c'|HIBIT, 'd', 'd', 'e'|HIBIT, 'e', 'e'|HIBIT, + 'f', 'g', 'h', 'h', 'i', 'i'|HIBIT, + 'k', 'l', 'l'|HIBIT, 'l', 'm', 'n', + 'o'|HIBIT, 'p', 'r', 'r'|HIBIT, 'r', 's', + 's'|HIBIT, 't', 'u', 'u'|HIBIT, 'v', 'w', + 'w', 'x', 'y', 'z', 'h', 't', + 'w', 'y', 'a', 'a'|HIBIT, 'a'|HIBIT, 'a'|HIBIT, + 'e', 'e'|HIBIT, 'e'|HIBIT, 'i', 'o', 'o'|HIBIT, + 'o'|HIBIT, 'o'|HIBIT, 'u', 'u'|HIBIT, 'u'|HIBIT, 'y', + }; + + unsigned int key = (((unsigned int)c)<<3) | 0x00000007; + int iRes = 0; + int iHi = sizeof(aDia)/sizeof(aDia[0]) - 1; + int iLo = 0; + while( iHi>=iLo ){ + int iTest = (iHi + iLo) / 2; + if( key >= aDia[iTest] ){ + iRes = iTest; + iLo = iTest+1; + }else{ + iHi = iTest-1; + } + } + assert( key>=aDia[iRes] ); + if( bComplex==0 && (aChar[iRes] & 0x80) ) return c; + return (c > (aDia[iRes]>>3) + (aDia[iRes]&0x07)) ? c : ((int)aChar[iRes] & 0x7F); +} + + +/* +** Return true if the argument interpreted as a unicode codepoint +** is a diacritical modifier character. +*/ +SQLITE_PRIVATE int sqlite3FtsUnicodeIsdiacritic(int c){ + unsigned int mask0 = 0x08029FDF; + unsigned int mask1 = 0x000361F8; + if( c<768 || c>817 ) return 0; + return (c < 768+32) ? + (mask0 & ((unsigned int)1 << (c-768))) : + (mask1 & ((unsigned int)1 << (c-768-32))); +} + + +/* +** Interpret the argument as a unicode codepoint. If the codepoint +** is an upper case character that has a lower case equivalent, +** return the codepoint corresponding to the lower case version. +** Otherwise, return a copy of the argument. +** +** The results are undefined if the value passed to this function +** is less than zero. +*/ +SQLITE_PRIVATE int sqlite3FtsUnicodeFold(int c, int eRemoveDiacritic){ + /* Each entry in the following array defines a rule for folding a range + ** of codepoints to lower case. The rule applies to a range of nRange + ** codepoints starting at codepoint iCode. + ** + ** If the least significant bit in flags is clear, then the rule applies + ** to all nRange codepoints (i.e. all nRange codepoints are upper case and + ** need to be folded). Or, if it is set, then the rule only applies to + ** every second codepoint in the range, starting with codepoint C. + ** + ** The 7 most significant bits in flags are an index into the aiOff[] + ** array. If a specific codepoint C does require folding, then its lower + ** case equivalent is ((C + aiOff[flags>>1]) & 0xFFFF). + ** + ** The contents of this array are generated by parsing the CaseFolding.txt + ** file distributed as part of the "Unicode Character Database". See + ** http://www.unicode.org for details. + */ + static const struct TableEntry { + unsigned short iCode; + unsigned char flags; + unsigned char nRange; + } aEntry[] = { + {65, 14, 26}, {181, 64, 1}, {192, 14, 23}, + {216, 14, 7}, {256, 1, 48}, {306, 1, 6}, + {313, 1, 16}, {330, 1, 46}, {376, 116, 1}, + {377, 1, 6}, {383, 104, 1}, {385, 50, 1}, + {386, 1, 4}, {390, 44, 1}, {391, 0, 1}, + {393, 42, 2}, {395, 0, 1}, {398, 32, 1}, + {399, 38, 1}, {400, 40, 1}, {401, 0, 1}, + {403, 42, 1}, {404, 46, 1}, {406, 52, 1}, + {407, 48, 1}, {408, 0, 1}, {412, 52, 1}, + {413, 54, 1}, {415, 56, 1}, {416, 1, 6}, + {422, 60, 1}, {423, 0, 1}, {425, 60, 1}, + {428, 0, 1}, {430, 60, 1}, {431, 0, 1}, + {433, 58, 2}, {435, 1, 4}, {439, 62, 1}, + {440, 0, 1}, {444, 0, 1}, {452, 2, 1}, + {453, 0, 1}, {455, 2, 1}, {456, 0, 1}, + {458, 2, 1}, {459, 1, 18}, {478, 1, 18}, + {497, 2, 1}, {498, 1, 4}, {502, 122, 1}, + {503, 134, 1}, {504, 1, 40}, {544, 110, 1}, + {546, 1, 18}, {570, 70, 1}, {571, 0, 1}, + {573, 108, 1}, {574, 68, 1}, {577, 0, 1}, + {579, 106, 1}, {580, 28, 1}, {581, 30, 1}, + {582, 1, 10}, {837, 36, 1}, {880, 1, 4}, + {886, 0, 1}, {902, 18, 1}, {904, 16, 3}, + {908, 26, 1}, {910, 24, 2}, {913, 14, 17}, + {931, 14, 9}, {962, 0, 1}, {975, 4, 1}, + {976, 140, 1}, {977, 142, 1}, {981, 146, 1}, + {982, 144, 1}, {984, 1, 24}, {1008, 136, 1}, + {1009, 138, 1}, {1012, 130, 1}, {1013, 128, 1}, + {1015, 0, 1}, {1017, 152, 1}, {1018, 0, 1}, + {1021, 110, 3}, {1024, 34, 16}, {1040, 14, 32}, + {1120, 1, 34}, {1162, 1, 54}, {1216, 6, 1}, + {1217, 1, 14}, {1232, 1, 88}, {1329, 22, 38}, + {4256, 66, 38}, {4295, 66, 1}, {4301, 66, 1}, + {7680, 1, 150}, {7835, 132, 1}, {7838, 96, 1}, + {7840, 1, 96}, {7944, 150, 8}, {7960, 150, 6}, + {7976, 150, 8}, {7992, 150, 8}, {8008, 150, 6}, + {8025, 151, 8}, {8040, 150, 8}, {8072, 150, 8}, + {8088, 150, 8}, {8104, 150, 8}, {8120, 150, 2}, + {8122, 126, 2}, {8124, 148, 1}, {8126, 100, 1}, + {8136, 124, 4}, {8140, 148, 1}, {8152, 150, 2}, + {8154, 120, 2}, {8168, 150, 2}, {8170, 118, 2}, + {8172, 152, 1}, {8184, 112, 2}, {8186, 114, 2}, + {8188, 148, 1}, {8486, 98, 1}, {8490, 92, 1}, + {8491, 94, 1}, {8498, 12, 1}, {8544, 8, 16}, + {8579, 0, 1}, {9398, 10, 26}, {11264, 22, 47}, + {11360, 0, 1}, {11362, 88, 1}, {11363, 102, 1}, + {11364, 90, 1}, {11367, 1, 6}, {11373, 84, 1}, + {11374, 86, 1}, {11375, 80, 1}, {11376, 82, 1}, + {11378, 0, 1}, {11381, 0, 1}, {11390, 78, 2}, + {11392, 1, 100}, {11499, 1, 4}, {11506, 0, 1}, + {42560, 1, 46}, {42624, 1, 24}, {42786, 1, 14}, + {42802, 1, 62}, {42873, 1, 4}, {42877, 76, 1}, + {42878, 1, 10}, {42891, 0, 1}, {42893, 74, 1}, + {42896, 1, 4}, {42912, 1, 10}, {42922, 72, 1}, + {65313, 14, 26}, + }; + static const unsigned short aiOff[] = { + 1, 2, 8, 15, 16, 26, 28, 32, + 37, 38, 40, 48, 63, 64, 69, 71, + 79, 80, 116, 202, 203, 205, 206, 207, + 209, 210, 211, 213, 214, 217, 218, 219, + 775, 7264, 10792, 10795, 23228, 23256, 30204, 54721, + 54753, 54754, 54756, 54787, 54793, 54809, 57153, 57274, + 57921, 58019, 58363, 61722, 65268, 65341, 65373, 65406, + 65408, 65410, 65415, 65424, 65436, 65439, 65450, 65462, + 65472, 65476, 65478, 65480, 65482, 65488, 65506, 65511, + 65514, 65521, 65527, 65528, 65529, + }; + + int ret = c; + + assert( sizeof(unsigned short)==2 && sizeof(unsigned char)==1 ); + + if( c<128 ){ + if( c>='A' && c<='Z' ) ret = c + ('a' - 'A'); + }else if( c<65536 ){ + const struct TableEntry *p; + int iHi = sizeof(aEntry)/sizeof(aEntry[0]) - 1; + int iLo = 0; + int iRes = -1; + + assert( c>aEntry[0].iCode ); + while( iHi>=iLo ){ + int iTest = (iHi + iLo) / 2; + int cmp = (c - aEntry[iTest].iCode); + if( cmp>=0 ){ + iRes = iTest; + iLo = iTest+1; + }else{ + iHi = iTest-1; + } + } + + assert( iRes>=0 && c>=aEntry[iRes].iCode ); + p = &aEntry[iRes]; + if( c<(p->iCode + p->nRange) && 0==(0x01 & p->flags & (p->iCode ^ c)) ){ + ret = (c + (aiOff[p->flags>>1])) & 0x0000FFFF; + assert( ret>0 ); + } + + if( eRemoveDiacritic ){ + ret = remove_diacritic(ret, eRemoveDiacritic==2); + } + } + + else if( c>=66560 && c<66600 ){ + ret = c + 40; + } + + return ret; +} +#endif /* defined(SQLITE_ENABLE_FTS3) || defined(SQLITE_ENABLE_FTS4) */ +#endif /* !defined(SQLITE_DISABLE_FTS3_UNICODE) */ + +/************** End of fts3_unicode2.c ***************************************/ +/************** Begin file json.c ********************************************/ +/* +** 2015-08-12 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** SQLite JSON functions. +** +** This file began as an extension in ext/misc/json1.c in 2015. That +** extension proved so useful that it has now been moved into the core. +** +** The original design stored all JSON as pure text, canonical RFC-8259. +** Support for JSON-5 extensions was added with version 3.42.0 (2023-05-16). +** All generated JSON text still conforms strictly to RFC-8259, but text +** with JSON-5 extensions is accepted as input. +** +** Beginning with version 3.45.0 (circa 2024-01-01), these routines also +** accept BLOB values that have JSON encoded using a binary representation +** called "JSONB". The name JSONB comes from PostgreSQL, however the on-disk +** format for SQLite-JSONB is completely different and incompatible with +** PostgreSQL-JSONB. +** +** Decoding and interpreting JSONB is still O(N) where N is the size of +** the input, the same as text JSON. However, the constant of proportionality +** for JSONB is much smaller due to faster parsing. The size of each +** element in JSONB is encoded in its header, so there is no need to search +** for delimiters using persnickety syntax rules. JSONB seems to be about +** 3x faster than text JSON as a result. JSONB is also tends to be slightly +** smaller than text JSON, by 5% or 10%, but there are corner cases where +** JSONB can be slightly larger. So you are not far mistaken to say that +** a JSONB blob is the same size as the equivalent RFC-8259 text. +** +** +** THE JSONB ENCODING: +** +** Every JSON element is encoded in JSONB as a header and a payload. +** The header is between 1 and 9 bytes in size. The payload is zero +** or more bytes. +** +** The lower 4 bits of the first byte of the header determines the +** element type: +** +** 0: NULL +** 1: TRUE +** 2: FALSE +** 3: INT -- RFC-8259 integer literal +** 4: INT5 -- JSON5 integer literal +** 5: FLOAT -- RFC-8259 floating point literal +** 6: FLOAT5 -- JSON5 floating point literal +** 7: TEXT -- Text literal acceptable to both SQL and JSON +** 8: TEXTJ -- Text containing RFC-8259 escapes +** 9: TEXT5 -- Text containing JSON5 and/or RFC-8259 escapes +** 10: TEXTRAW -- Text containing unescaped syntax characters +** 11: ARRAY +** 12: OBJECT +** +** The other three possible values (13-15) are reserved for future +** enhancements. +** +** The upper 4 bits of the first byte determine the size of the header +** and sometimes also the size of the payload. If X is the first byte +** of the element and if X>>4 is between 0 and 11, then the payload +** will be that many bytes in size and the header is exactly one byte +** in size. Other four values for X>>4 (12-15) indicate that the header +** is more than one byte in size and that the payload size is determined +** by the remainder of the header, interpreted as a unsigned big-endian +** integer. +** +** Value of X>>4 Size integer Total header size +** ------------- -------------------- ----------------- +** 12 1 byte (0-255) 2 +** 13 2 byte (0-65535) 3 +** 14 4 byte (0-4294967295) 5 +** 15 8 byte (0-1.8e19) 9 +** +** The payload size need not be expressed in its minimal form. For example, +** if the payload size is 10, the size can be expressed in any of 5 different +** ways: (1) (X>>4)==10, (2) (X>>4)==12 following by one 0x0a byte, +** (3) (X>>4)==13 followed by 0x00 and 0x0a, (4) (X>>4)==14 followed by +** 0x00 0x00 0x00 0x0a, or (5) (X>>4)==15 followed by 7 bytes of 0x00 and +** a single byte of 0x0a. The shorter forms are preferred, of course, but +** sometimes when generating JSONB, the payload size is not known in advance +** and it is convenient to reserve sufficient header space to cover the +** largest possible payload size and then come back later and patch up +** the size when it becomes known, resulting in a non-minimal encoding. +** +** The value (X>>4)==15 is not actually used in the current implementation +** (as SQLite is currently unable to handle BLOBs larger than about 2GB) +** but is included in the design to allow for future enhancements. +** +** The payload follows the header. NULL, TRUE, and FALSE have no payload and +** their payload size must always be zero. The payload for INT, INT5, +** FLOAT, FLOAT5, TEXT, TEXTJ, TEXT5, and TEXTROW is text. Note that the +** "..." or '...' delimiters are omitted from the various text encodings. +** The payload for ARRAY and OBJECT is a list of additional elements that +** are the content for the array or object. The payload for an OBJECT +** must be an even number of elements. The first element of each pair is +** the label and must be of type TEXT, TEXTJ, TEXT5, or TEXTRAW. +** +** A valid JSONB blob consists of a single element, as described above. +** Usually this will be an ARRAY or OBJECT element which has many more +** elements as its content. But the overall blob is just a single element. +** +** Input validation for JSONB blobs simply checks that the element type +** code is between 0 and 12 and that the total size of the element +** (header plus payload) is the same as the size of the BLOB. If those +** checks are true, the BLOB is assumed to be JSONB and processing continues. +** Errors are only raised if some other miscoding is discovered during +** processing. +** +** Additional information can be found in the doc/jsonb.md file of the +** canonical SQLite source tree. +*/ +#ifndef SQLITE_OMIT_JSON +/* #include "sqliteInt.h" */ + +/* JSONB element types +*/ +#define JSONB_NULL 0 /* "null" */ +#define JSONB_TRUE 1 /* "true" */ +#define JSONB_FALSE 2 /* "false" */ +#define JSONB_INT 3 /* integer acceptable to JSON and SQL */ +#define JSONB_INT5 4 /* integer in 0x000 notation */ +#define JSONB_FLOAT 5 /* float acceptable to JSON and SQL */ +#define JSONB_FLOAT5 6 /* float with JSON5 extensions */ +#define JSONB_TEXT 7 /* Text compatible with both JSON and SQL */ +#define JSONB_TEXTJ 8 /* Text with JSON escapes */ +#define JSONB_TEXT5 9 /* Text with JSON-5 escape */ +#define JSONB_TEXTRAW 10 /* SQL text that needs escaping for JSON */ +#define JSONB_ARRAY 11 /* An array */ +#define JSONB_OBJECT 12 /* An object */ + +/* Human-readable names for the JSONB values. The index for each +** string must correspond to the JSONB_* integer above. +*/ +static const char * const jsonbType[] = { + "null", "true", "false", "integer", "integer", + "real", "real", "text", "text", "text", + "text", "array", "object", "", "", "", "" +}; + +/* +** Growing our own isspace() routine this way is twice as fast as +** the library isspace() function, resulting in a 7% overall performance +** increase for the text-JSON parser. (Ubuntu14.10 gcc 4.8.4 x64 with -Os). +*/ +static const char jsonIsSpace[] = { +#ifdef SQLITE_ASCII +/*0 1 2 3 4 5 6 7 8 9 a b c d e f */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, /* 0 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1 */ + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 3 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 4 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 5 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 6 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 7 */ + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 8 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 9 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* a */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* b */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* c */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* d */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* e */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* f */ +#endif +#ifdef SQLITE_EBCDIC +/*0 1 2 3 4 5 6 7 8 9 a b c d e f */ + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, /* 0 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1 */ + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 3 */ + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 4 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 5 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 6 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 7 */ + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 8 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 9 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* a */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* b */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* c */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* d */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* e */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* f */ +#endif + +}; +#define jsonIsspace(x) (jsonIsSpace[(unsigned char)x]) + +/* +** The set of all space characters recognized by jsonIsspace(). +** Useful as the second argument to strspn(). +*/ +#ifdef SQLITE_ASCII +static const char jsonSpaces[] = "\011\012\015\040"; +#endif +#ifdef SQLITE_EBCDIC +static const char jsonSpaces[] = "\005\045\015\100"; +#endif + + +/* +** Characters that are special to JSON. Control characters, +** '"' and '\\' and '\''. Actually, '\'' is not special to +** canonical JSON, but it is special in JSON-5, so we include +** it in the set of special characters. +*/ +static const char jsonIsOk[256] = { +#ifdef SQLITE_ASCII +/*0 1 2 3 4 5 6 7 8 9 a b c d e f */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1 */ + 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, /* 2 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 3 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 4 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, /* 5 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 6 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 7 */ + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 8 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 9 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* a */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* b */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* c */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* d */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* e */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 /* f */ +#endif +#ifdef SQLITE_EBCDIC +/*0 1 2 3 4 5 6 7 8 9 a b c d e f */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2 */ + 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, /* 3 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 4 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 5 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 6 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, /* 7 */ + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 8 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 9 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* a */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* b */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* c */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* d */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* e */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 /* f */ +#endif +}; + +/* Objects */ +typedef struct JsonCache JsonCache; +typedef struct JsonString JsonString; +typedef struct JsonParse JsonParse; + +/* +** Magic number used for the JSON parse cache in sqlite3_get_auxdata() +*/ +#define JSON_CACHE_ID (-429938) /* Cache entry */ +#define JSON_CACHE_SIZE 4 /* Max number of cache entries */ + +/* +** jsonUnescapeOneChar() returns this invalid code point if it encounters +** a syntax error. +*/ +#define JSON_INVALID_CHAR 0x99999 + +/* A cache mapping JSON text into JSONB blobs. +** +** Each cache entry is a JsonParse object with the following restrictions: +** +** * The bReadOnly flag must be set +** +** * The aBlob[] array must be owned by the JsonParse object. In other +** words, nBlobAlloc must be non-zero. +** +** * eEdit and delta must be zero. +** +** * zJson must be an RCStr. In other words bJsonIsRCStr must be true. +*/ +struct JsonCache { + sqlite3 *db; /* Database connection */ + int nUsed; /* Number of active entries in the cache */ + JsonParse *a[JSON_CACHE_SIZE]; /* One line for each cache entry */ +}; + +/* An instance of this object represents a JSON string +** under construction. Really, this is a generic string accumulator +** that can be and is used to create strings other than JSON. +** +** If the generated string is longer than will fit into the zSpace[] buffer, +** then it will be an RCStr string. This aids with caching of large +** JSON strings. +*/ +struct JsonString { + sqlite3_context *pCtx; /* Function context - put error messages here */ + char *zBuf; /* Append JSON content here */ + u64 nAlloc; /* Bytes of storage available in zBuf[] */ + u64 nUsed; /* Bytes of zBuf[] currently used */ + u8 bStatic; /* True if zBuf is static space */ + u8 eErr; /* True if an error has been encountered */ + char zSpace[100]; /* Initial static space */ +}; + +/* Allowed values for JsonString.eErr */ +#define JSTRING_OOM 0x01 /* Out of memory */ +#define JSTRING_MALFORMED 0x02 /* Malformed JSONB */ +#define JSTRING_ERR 0x04 /* Error already sent to sqlite3_result */ + +/* The "subtype" set for text JSON values passed through using +** sqlite3_result_subtype() and sqlite3_value_subtype(). +*/ +#define JSON_SUBTYPE 74 /* Ascii for "J" */ + +/* +** Bit values for the flags passed into various SQL function implementations +** via the sqlite3_user_data() value. +*/ +#define JSON_JSON 0x01 /* Result is always JSON */ +#define JSON_SQL 0x02 /* Result is always SQL */ +#define JSON_ABPATH 0x03 /* Allow abbreviated JSON path specs */ +#define JSON_ISSET 0x04 /* json_set(), not json_insert() */ +#define JSON_BLOB 0x08 /* Use the BLOB output format */ + + +/* A parsed JSON value. Lifecycle: +** +** 1. JSON comes in and is parsed into a JSONB value in aBlob. The +** original text is stored in zJson. This step is skipped if the +** input is JSONB instead of text JSON. +** +** 2. The aBlob[] array is searched using the JSON path notation, if needed. +** +** 3. Zero or more changes are made to aBlob[] (via json_remove() or +** json_replace() or json_patch() or similar). +** +** 4. New JSON text is generated from the aBlob[] for output. This step +** is skipped if the function is one of the jsonb_* functions that +** returns JSONB instead of text JSON. +*/ +struct JsonParse { + u8 *aBlob; /* JSONB representation of JSON value */ + u32 nBlob; /* Bytes of aBlob[] actually used */ + u32 nBlobAlloc; /* Bytes allocated to aBlob[]. 0 if aBlob is external */ + char *zJson; /* Json text used for parsing */ + sqlite3 *db; /* The database connection to which this object belongs */ + int nJson; /* Length of the zJson string in bytes */ + u32 nJPRef; /* Number of references to this object */ + u32 iErr; /* Error location in zJson[] */ + u16 iDepth; /* Nesting depth */ + u8 nErr; /* Number of errors seen */ + u8 oom; /* Set to true if out of memory */ + u8 bJsonIsRCStr; /* True if zJson is an RCStr */ + u8 hasNonstd; /* True if input uses non-standard features like JSON5 */ + u8 bReadOnly; /* Do not modify. */ + /* Search and edit information. See jsonLookupStep() */ + u8 eEdit; /* Edit operation to apply */ + int delta; /* Size change due to the edit */ + u32 nIns; /* Number of bytes to insert */ + u32 iLabel; /* Location of label if search landed on an object value */ + u8 *aIns; /* Content to be inserted */ +}; + +/* Allowed values for JsonParse.eEdit */ +#define JEDIT_DEL 1 /* Delete if exists */ +#define JEDIT_REPL 2 /* Overwrite if exists */ +#define JEDIT_INS 3 /* Insert if not exists */ +#define JEDIT_SET 4 /* Insert or overwrite */ + +/* +** Maximum nesting depth of JSON for this implementation. +** +** This limit is needed to avoid a stack overflow in the recursive +** descent parser. A depth of 1000 is far deeper than any sane JSON +** should go. Historical note: This limit was 2000 prior to version 3.42.0 +*/ +#ifndef SQLITE_JSON_MAX_DEPTH +# define JSON_MAX_DEPTH 1000 +#else +# define JSON_MAX_DEPTH SQLITE_JSON_MAX_DEPTH +#endif + +/* +** Allowed values for the flgs argument to jsonParseFuncArg(); +*/ +#define JSON_EDITABLE 0x01 /* Generate a writable JsonParse object */ +#define JSON_KEEPERROR 0x02 /* Return non-NULL even if there is an error */ + +/************************************************************************** +** Forward references +**************************************************************************/ +static void jsonReturnStringAsBlob(JsonString*); +static int jsonArgIsJsonb(sqlite3_value *pJson, JsonParse *p); +static u32 jsonTranslateBlobToText(const JsonParse*,u32,JsonString*); +static void jsonReturnParse(sqlite3_context*,JsonParse*); +static JsonParse *jsonParseFuncArg(sqlite3_context*,sqlite3_value*,u32); +static void jsonParseFree(JsonParse*); +static u32 jsonbPayloadSize(const JsonParse*, u32, u32*); +static u32 jsonUnescapeOneChar(const char*, u32, u32*); + +/************************************************************************** +** Utility routines for dealing with JsonCache objects +**************************************************************************/ + +/* +** Free a JsonCache object. +*/ +static void jsonCacheDelete(JsonCache *p){ + int i; + for(i=0; inUsed; i++){ + jsonParseFree(p->a[i]); + } + sqlite3DbFree(p->db, p); +} +static void jsonCacheDeleteGeneric(void *p){ + jsonCacheDelete((JsonCache*)p); +} + +/* +** Insert a new entry into the cache. If the cache is full, expel +** the least recently used entry. Return SQLITE_OK on success or a +** result code otherwise. +** +** Cache entries are stored in age order, oldest first. +*/ +static int jsonCacheInsert( + sqlite3_context *ctx, /* The SQL statement context holding the cache */ + JsonParse *pParse /* The parse object to be added to the cache */ +){ + JsonCache *p; + + assert( pParse->zJson!=0 ); + assert( pParse->bJsonIsRCStr ); + assert( pParse->delta==0 ); + p = sqlite3_get_auxdata(ctx, JSON_CACHE_ID); + if( p==0 ){ + sqlite3 *db = sqlite3_context_db_handle(ctx); + p = sqlite3DbMallocZero(db, sizeof(*p)); + if( p==0 ) return SQLITE_NOMEM; + p->db = db; + sqlite3_set_auxdata(ctx, JSON_CACHE_ID, p, jsonCacheDeleteGeneric); + p = sqlite3_get_auxdata(ctx, JSON_CACHE_ID); + if( p==0 ) return SQLITE_NOMEM; + } + if( p->nUsed >= JSON_CACHE_SIZE ){ + jsonParseFree(p->a[0]); + memmove(p->a, &p->a[1], (JSON_CACHE_SIZE-1)*sizeof(p->a[0])); + p->nUsed = JSON_CACHE_SIZE-1; + } + assert( pParse->nBlobAlloc>0 ); + pParse->eEdit = 0; + pParse->nJPRef++; + pParse->bReadOnly = 1; + p->a[p->nUsed] = pParse; + p->nUsed++; + return SQLITE_OK; +} + +/* +** Search for a cached translation the json text supplied by pArg. Return +** the JsonParse object if found. Return NULL if not found. +** +** When a match if found, the matching entry is moved to become the +** most-recently used entry if it isn't so already. +** +** The JsonParse object returned still belongs to the Cache and might +** be deleted at any moment. If the caller wants the JsonParse to +** linger, it needs to increment the nPJRef reference counter. +*/ +static JsonParse *jsonCacheSearch( + sqlite3_context *ctx, /* The SQL statement context holding the cache */ + sqlite3_value *pArg /* Function argument containing SQL text */ +){ + JsonCache *p; + int i; + const char *zJson; + int nJson; + + if( sqlite3_value_type(pArg)!=SQLITE_TEXT ){ + return 0; + } + zJson = (const char*)sqlite3_value_text(pArg); + if( zJson==0 ) return 0; + nJson = sqlite3_value_bytes(pArg); + + p = sqlite3_get_auxdata(ctx, JSON_CACHE_ID); + if( p==0 ){ + return 0; + } + for(i=0; inUsed; i++){ + if( p->a[i]->zJson==zJson ) break; + } + if( i>=p->nUsed ){ + for(i=0; inUsed; i++){ + if( p->a[i]->nJson!=nJson ) continue; + if( memcmp(p->a[i]->zJson, zJson, nJson)==0 ) break; + } + } + if( inUsed ){ + if( inUsed-1 ){ + /* Make the matching entry the most recently used entry */ + JsonParse *tmp = p->a[i]; + memmove(&p->a[i], &p->a[i+1], (p->nUsed-i-1)*sizeof(tmp)); + p->a[p->nUsed-1] = tmp; + i = p->nUsed - 1; + } + assert( p->a[i]->delta==0 ); + return p->a[i]; + }else{ + return 0; + } +} + +/************************************************************************** +** Utility routines for dealing with JsonString objects +**************************************************************************/ + +/* Turn uninitialized bulk memory into a valid JsonString object +** holding a zero-length string. +*/ +static void jsonStringZero(JsonString *p){ + p->zBuf = p->zSpace; + p->nAlloc = sizeof(p->zSpace); + p->nUsed = 0; + p->bStatic = 1; +} + +/* Initialize the JsonString object +*/ +static void jsonStringInit(JsonString *p, sqlite3_context *pCtx){ + p->pCtx = pCtx; + p->eErr = 0; + jsonStringZero(p); +} + +/* Free all allocated memory and reset the JsonString object back to its +** initial state. +*/ +static void jsonStringReset(JsonString *p){ + if( !p->bStatic ) sqlite3RCStrUnref(p->zBuf); + jsonStringZero(p); +} + +/* Report an out-of-memory (OOM) condition +*/ +static void jsonStringOom(JsonString *p){ + p->eErr |= JSTRING_OOM; + if( p->pCtx ) sqlite3_result_error_nomem(p->pCtx); + jsonStringReset(p); +} + +/* Enlarge pJson->zBuf so that it can hold at least N more bytes. +** Return zero on success. Return non-zero on an OOM error +*/ +static int jsonStringGrow(JsonString *p, u32 N){ + u64 nTotal = NnAlloc ? p->nAlloc*2 : p->nAlloc+N+10; + char *zNew; + if( p->bStatic ){ + if( p->eErr ) return 1; + zNew = sqlite3RCStrNew(nTotal); + if( zNew==0 ){ + jsonStringOom(p); + return SQLITE_NOMEM; + } + memcpy(zNew, p->zBuf, (size_t)p->nUsed); + p->zBuf = zNew; + p->bStatic = 0; + }else{ + p->zBuf = sqlite3RCStrResize(p->zBuf, nTotal); + if( p->zBuf==0 ){ + p->eErr |= JSTRING_OOM; + jsonStringZero(p); + return SQLITE_NOMEM; + } + } + p->nAlloc = nTotal; + return SQLITE_OK; +} + +/* Append N bytes from zIn onto the end of the JsonString string. +*/ +static SQLITE_NOINLINE void jsonStringExpandAndAppend( + JsonString *p, + const char *zIn, + u32 N +){ + assert( N>0 ); + if( jsonStringGrow(p,N) ) return; + memcpy(p->zBuf+p->nUsed, zIn, N); + p->nUsed += N; +} +static void jsonAppendRaw(JsonString *p, const char *zIn, u32 N){ + if( N==0 ) return; + if( N+p->nUsed >= p->nAlloc ){ + jsonStringExpandAndAppend(p,zIn,N); + }else{ + memcpy(p->zBuf+p->nUsed, zIn, N); + p->nUsed += N; + } +} +static void jsonAppendRawNZ(JsonString *p, const char *zIn, u32 N){ + assert( N>0 ); + if( N+p->nUsed >= p->nAlloc ){ + jsonStringExpandAndAppend(p,zIn,N); + }else{ + memcpy(p->zBuf+p->nUsed, zIn, N); + p->nUsed += N; + } +} + +/* Append formatted text (not to exceed N bytes) to the JsonString. +*/ +static void jsonPrintf(int N, JsonString *p, const char *zFormat, ...){ + va_list ap; + if( (p->nUsed + N >= p->nAlloc) && jsonStringGrow(p, N) ) return; + va_start(ap, zFormat); + sqlite3_vsnprintf(N, p->zBuf+p->nUsed, zFormat, ap); + va_end(ap); + p->nUsed += (int)strlen(p->zBuf+p->nUsed); +} + +/* Append a single character +*/ +static SQLITE_NOINLINE void jsonAppendCharExpand(JsonString *p, char c){ + if( jsonStringGrow(p,1) ) return; + p->zBuf[p->nUsed++] = c; +} +static void jsonAppendChar(JsonString *p, char c){ + if( p->nUsed>=p->nAlloc ){ + jsonAppendCharExpand(p,c); + }else{ + p->zBuf[p->nUsed++] = c; + } +} + +/* Remove a single character from the end of the string +*/ +static void jsonStringTrimOneChar(JsonString *p){ + if( p->eErr==0 ){ + assert( p->nUsed>0 ); + p->nUsed--; + } +} + + +/* Make sure there is a zero terminator on p->zBuf[] +** +** Return true on success. Return false if an OOM prevents this +** from happening. +*/ +static int jsonStringTerminate(JsonString *p){ + jsonAppendChar(p, 0); + jsonStringTrimOneChar(p); + return p->eErr==0; +} + +/* Append a comma separator to the output buffer, if the previous +** character is not '[' or '{'. +*/ +static void jsonAppendSeparator(JsonString *p){ + char c; + if( p->nUsed==0 ) return; + c = p->zBuf[p->nUsed-1]; + if( c=='[' || c=='{' ) return; + jsonAppendChar(p, ','); +} + +/* c is a control character. Append the canonical JSON representation +** of that control character to p. +** +** This routine assumes that the output buffer has already been enlarged +** sufficiently to hold the worst-case encoding plus a nul terminator. +*/ +static void jsonAppendControlChar(JsonString *p, u8 c){ + static const char aSpecial[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 'b', 't', 'n', 0, 'f', 'r', 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }; + assert( sizeof(aSpecial)==32 ); + assert( aSpecial['\b']=='b' ); + assert( aSpecial['\f']=='f' ); + assert( aSpecial['\n']=='n' ); + assert( aSpecial['\r']=='r' ); + assert( aSpecial['\t']=='t' ); + assert( c>=0 && cnUsed+7 <= p->nAlloc ); + if( aSpecial[c] ){ + p->zBuf[p->nUsed] = '\\'; + p->zBuf[p->nUsed+1] = aSpecial[c]; + p->nUsed += 2; + }else{ + p->zBuf[p->nUsed] = '\\'; + p->zBuf[p->nUsed+1] = 'u'; + p->zBuf[p->nUsed+2] = '0'; + p->zBuf[p->nUsed+3] = '0'; + p->zBuf[p->nUsed+4] = "0123456789abcdef"[c>>4]; + p->zBuf[p->nUsed+5] = "0123456789abcdef"[c&0xf]; + p->nUsed += 6; + } +} + +/* Append the N-byte string in zIn to the end of the JsonString string +** under construction. Enclose the string in double-quotes ("...") and +** escape any double-quotes or backslash characters contained within the +** string. +** +** This routine is a high-runner. There is a measurable performance +** increase associated with unwinding the jsonIsOk[] loop. +*/ +static void jsonAppendString(JsonString *p, const char *zIn, u32 N){ + u32 k; + u8 c; + const u8 *z = (const u8*)zIn; + if( z==0 ) return; + if( (N+p->nUsed+2 >= p->nAlloc) && jsonStringGrow(p,N+2)!=0 ) return; + p->zBuf[p->nUsed++] = '"'; + while( 1 /*exit-by-break*/ ){ + k = 0; + /* The following while() is the 4-way unwound equivalent of + ** + ** while( k=N ){ + while( k=N ){ + if( k>0 ){ + memcpy(&p->zBuf[p->nUsed], z, k); + p->nUsed += k; + } + break; + } + if( k>0 ){ + memcpy(&p->zBuf[p->nUsed], z, k); + p->nUsed += k; + z += k; + N -= k; + } + c = z[0]; + if( c=='"' || c=='\\' ){ + if( (p->nUsed+N+3 > p->nAlloc) && jsonStringGrow(p,N+3)!=0 ) return; + p->zBuf[p->nUsed++] = '\\'; + p->zBuf[p->nUsed++] = c; + }else if( c=='\'' ){ + p->zBuf[p->nUsed++] = c; + }else{ + if( (p->nUsed+N+7 > p->nAlloc) && jsonStringGrow(p,N+7)!=0 ) return; + jsonAppendControlChar(p, c); + } + z++; + N--; + } + p->zBuf[p->nUsed++] = '"'; + assert( p->nUsednAlloc ); +} + +/* +** Append an sqlite3_value (such as a function parameter) to the JSON +** string under construction in p. +*/ +static void jsonAppendSqlValue( + JsonString *p, /* Append to this JSON string */ + sqlite3_value *pValue /* Value to append */ +){ + switch( sqlite3_value_type(pValue) ){ + case SQLITE_NULL: { + jsonAppendRawNZ(p, "null", 4); + break; + } + case SQLITE_FLOAT: { + jsonPrintf(100, p, "%!0.15g", sqlite3_value_double(pValue)); + break; + } + case SQLITE_INTEGER: { + const char *z = (const char*)sqlite3_value_text(pValue); + u32 n = (u32)sqlite3_value_bytes(pValue); + jsonAppendRaw(p, z, n); + break; + } + case SQLITE_TEXT: { + const char *z = (const char*)sqlite3_value_text(pValue); + u32 n = (u32)sqlite3_value_bytes(pValue); + if( sqlite3_value_subtype(pValue)==JSON_SUBTYPE ){ + jsonAppendRaw(p, z, n); + }else{ + jsonAppendString(p, z, n); + } + break; + } + default: { + JsonParse px; + memset(&px, 0, sizeof(px)); + if( jsonArgIsJsonb(pValue, &px) ){ + jsonTranslateBlobToText(&px, 0, p); + }else if( p->eErr==0 ){ + sqlite3_result_error(p->pCtx, "JSON cannot hold BLOB values", -1); + p->eErr = JSTRING_ERR; + jsonStringReset(p); + } + break; + } + } +} + +/* Make the text in p (which is probably a generated JSON text string) +** the result of the SQL function. +** +** The JsonString is reset. +** +** If pParse and ctx are both non-NULL, then the SQL string in p is +** loaded into the zJson field of the pParse object as a RCStr and the +** pParse is added to the cache. +*/ +static void jsonReturnString( + JsonString *p, /* String to return */ + JsonParse *pParse, /* JSONB source or NULL */ + sqlite3_context *ctx /* Where to cache */ +){ + assert( (pParse!=0)==(ctx!=0) ); + assert( ctx==0 || ctx==p->pCtx ); + if( p->eErr==0 ){ + int flags = SQLITE_PTR_TO_INT(sqlite3_user_data(p->pCtx)); + if( flags & JSON_BLOB ){ + jsonReturnStringAsBlob(p); + }else if( p->bStatic ){ + sqlite3_result_text64(p->pCtx, p->zBuf, p->nUsed, + SQLITE_TRANSIENT, SQLITE_UTF8); + }else if( jsonStringTerminate(p) ){ + if( pParse && pParse->bJsonIsRCStr==0 && pParse->nBlobAlloc>0 ){ + int rc; + pParse->zJson = sqlite3RCStrRef(p->zBuf); + pParse->nJson = p->nUsed; + pParse->bJsonIsRCStr = 1; + rc = jsonCacheInsert(ctx, pParse); + if( rc==SQLITE_NOMEM ){ + sqlite3_result_error_nomem(ctx); + jsonStringReset(p); + return; + } + } + sqlite3_result_text64(p->pCtx, sqlite3RCStrRef(p->zBuf), p->nUsed, + sqlite3RCStrUnref, + SQLITE_UTF8); + }else{ + sqlite3_result_error_nomem(p->pCtx); + } + }else if( p->eErr & JSTRING_OOM ){ + sqlite3_result_error_nomem(p->pCtx); + }else if( p->eErr & JSTRING_MALFORMED ){ + sqlite3_result_error(p->pCtx, "malformed JSON", -1); + } + jsonStringReset(p); +} + +/************************************************************************** +** Utility routines for dealing with JsonParse objects +**************************************************************************/ + +/* +** Reclaim all memory allocated by a JsonParse object. But do not +** delete the JsonParse object itself. +*/ +static void jsonParseReset(JsonParse *pParse){ + assert( pParse->nJPRef<=1 ); + if( pParse->bJsonIsRCStr ){ + sqlite3RCStrUnref(pParse->zJson); + pParse->zJson = 0; + pParse->nJson = 0; + pParse->bJsonIsRCStr = 0; + } + if( pParse->nBlobAlloc ){ + sqlite3DbFree(pParse->db, pParse->aBlob); + pParse->aBlob = 0; + pParse->nBlob = 0; + pParse->nBlobAlloc = 0; + } +} + +/* +** Decrement the reference count on the JsonParse object. When the +** count reaches zero, free the object. +*/ +static void jsonParseFree(JsonParse *pParse){ + if( pParse ){ + if( pParse->nJPRef>1 ){ + pParse->nJPRef--; + }else{ + jsonParseReset(pParse); + sqlite3DbFree(pParse->db, pParse); + } + } +} + +/************************************************************************** +** Utility routines for the JSON text parser +**************************************************************************/ + +/* +** Translate a single byte of Hex into an integer. +** This routine only gives a correct answer if h really is a valid hexadecimal +** character: 0..9a..fA..F. But unlike sqlite3HexToInt(), it does not +** assert() if the digit is not hex. +*/ +static u8 jsonHexToInt(int h){ +#ifdef SQLITE_ASCII + h += 9*(1&(h>>6)); +#endif +#ifdef SQLITE_EBCDIC + h += 9*(1&~(h>>4)); +#endif + return (u8)(h & 0xf); +} + +/* +** Convert a 4-byte hex string into an integer +*/ +static u32 jsonHexToInt4(const char *z){ + u32 v; + v = (jsonHexToInt(z[0])<<12) + + (jsonHexToInt(z[1])<<8) + + (jsonHexToInt(z[2])<<4) + + jsonHexToInt(z[3]); + return v; +} + +/* +** Return true if z[] begins with 2 (or more) hexadecimal digits +*/ +static int jsonIs2Hex(const char *z){ + return sqlite3Isxdigit(z[0]) && sqlite3Isxdigit(z[1]); +} + +/* +** Return true if z[] begins with 4 (or more) hexadecimal digits +*/ +static int jsonIs4Hex(const char *z){ + return jsonIs2Hex(z) && jsonIs2Hex(&z[2]); +} + +/* +** Return the number of bytes of JSON5 whitespace at the beginning of +** the input string z[]. +** +** JSON5 whitespace consists of any of the following characters: +** +** Unicode UTF-8 Name +** U+0009 09 horizontal tab +** U+000a 0a line feed +** U+000b 0b vertical tab +** U+000c 0c form feed +** U+000d 0d carriage return +** U+0020 20 space +** U+00a0 c2 a0 non-breaking space +** U+1680 e1 9a 80 ogham space mark +** U+2000 e2 80 80 en quad +** U+2001 e2 80 81 em quad +** U+2002 e2 80 82 en space +** U+2003 e2 80 83 em space +** U+2004 e2 80 84 three-per-em space +** U+2005 e2 80 85 four-per-em space +** U+2006 e2 80 86 six-per-em space +** U+2007 e2 80 87 figure space +** U+2008 e2 80 88 punctuation space +** U+2009 e2 80 89 thin space +** U+200a e2 80 8a hair space +** U+2028 e2 80 a8 line separator +** U+2029 e2 80 a9 paragraph separator +** U+202f e2 80 af narrow no-break space (NNBSP) +** U+205f e2 81 9f medium mathematical space (MMSP) +** U+3000 e3 80 80 ideographical space +** U+FEFF ef bb bf byte order mark +** +** In addition, comments between '/', '*' and '*', '/' and +** from '/', '/' to end-of-line are also considered to be whitespace. +*/ +static int json5Whitespace(const char *zIn){ + int n = 0; + const u8 *z = (u8*)zIn; + while( 1 /*exit by "goto whitespace_done"*/ ){ + switch( z[n] ){ + case 0x09: + case 0x0a: + case 0x0b: + case 0x0c: + case 0x0d: + case 0x20: { + n++; + break; + } + case '/': { + if( z[n+1]=='*' && z[n+2]!=0 ){ + int j; + for(j=n+3; z[j]!='/' || z[j-1]!='*'; j++){ + if( z[j]==0 ) goto whitespace_done; + } + n = j+1; + break; + }else if( z[n+1]=='/' ){ + int j; + char c; + for(j=n+2; (c = z[j])!=0; j++){ + if( c=='\n' || c=='\r' ) break; + if( 0xe2==(u8)c && 0x80==(u8)z[j+1] + && (0xa8==(u8)z[j+2] || 0xa9==(u8)z[j+2]) + ){ + j += 2; + break; + } + } + n = j; + if( z[n] ) n++; + break; + } + goto whitespace_done; + } + case 0xc2: { + if( z[n+1]==0xa0 ){ + n += 2; + break; + } + goto whitespace_done; + } + case 0xe1: { + if( z[n+1]==0x9a && z[n+2]==0x80 ){ + n += 3; + break; + } + goto whitespace_done; + } + case 0xe2: { + if( z[n+1]==0x80 ){ + u8 c = z[n+2]; + if( c<0x80 ) goto whitespace_done; + if( c<=0x8a || c==0xa8 || c==0xa9 || c==0xaf ){ + n += 3; + break; + } + }else if( z[n+1]==0x81 && z[n+2]==0x9f ){ + n += 3; + break; + } + goto whitespace_done; + } + case 0xe3: { + if( z[n+1]==0x80 && z[n+2]==0x80 ){ + n += 3; + break; + } + goto whitespace_done; + } + case 0xef: { + if( z[n+1]==0xbb && z[n+2]==0xbf ){ + n += 3; + break; + } + goto whitespace_done; + } + default: { + goto whitespace_done; + } + } + } + whitespace_done: + return n; +} + +/* +** Extra floating-point literals to allow in JSON. +*/ +static const struct NanInfName { + char c1; + char c2; + char n; + char eType; + char nRepl; + char *zMatch; + char *zRepl; +} aNanInfName[] = { + { 'i', 'I', 3, JSONB_FLOAT, 7, "inf", "9.0e999" }, + { 'i', 'I', 8, JSONB_FLOAT, 7, "infinity", "9.0e999" }, + { 'n', 'N', 3, JSONB_NULL, 4, "NaN", "null" }, + { 'q', 'Q', 4, JSONB_NULL, 4, "QNaN", "null" }, + { 's', 'S', 4, JSONB_NULL, 4, "SNaN", "null" }, +}; + + +/* +** Report the wrong number of arguments for json_insert(), json_replace() +** or json_set(). +*/ +static void jsonWrongNumArgs( + sqlite3_context *pCtx, + const char *zFuncName +){ + char *zMsg = sqlite3_mprintf("json_%s() needs an odd number of arguments", + zFuncName); + sqlite3_result_error(pCtx, zMsg, -1); + sqlite3_free(zMsg); +} + +/**************************************************************************** +** Utility routines for dealing with the binary BLOB representation of JSON +****************************************************************************/ + +/* +** Expand pParse->aBlob so that it holds at least N bytes. +** +** Return the number of errors. +*/ +static int jsonBlobExpand(JsonParse *pParse, u32 N){ + u8 *aNew; + u64 t; + assert( N>pParse->nBlobAlloc ); + if( pParse->nBlobAlloc==0 ){ + t = 100; + }else{ + t = pParse->nBlobAlloc*2; + } + if( tdb, pParse->aBlob, t); + if( aNew==0 ){ pParse->oom = 1; return 1; } + assert( t<0x7fffffff ); + pParse->aBlob = aNew; + pParse->nBlobAlloc = (u32)t; + return 0; +} + +/* +** If pParse->aBlob is not previously editable (because it is taken +** from sqlite3_value_blob(), as indicated by the fact that +** pParse->nBlobAlloc==0 and pParse->nBlob>0) then make it editable +** by making a copy into space obtained from malloc. +** +** Return true on success. Return false on OOM. +*/ +static int jsonBlobMakeEditable(JsonParse *pParse, u32 nExtra){ + u8 *aOld; + u32 nSize; + assert( !pParse->bReadOnly ); + if( pParse->oom ) return 0; + if( pParse->nBlobAlloc>0 ) return 1; + aOld = pParse->aBlob; + nSize = pParse->nBlob + nExtra; + pParse->aBlob = 0; + if( jsonBlobExpand(pParse, nSize) ){ + return 0; + } + assert( pParse->nBlobAlloc >= pParse->nBlob + nExtra ); + memcpy(pParse->aBlob, aOld, pParse->nBlob); + return 1; +} + +/* Expand pParse->aBlob and append one bytes. +*/ +static SQLITE_NOINLINE void jsonBlobExpandAndAppendOneByte( + JsonParse *pParse, + u8 c +){ + jsonBlobExpand(pParse, pParse->nBlob+1); + if( pParse->oom==0 ){ + assert( pParse->nBlob+1<=pParse->nBlobAlloc ); + pParse->aBlob[pParse->nBlob++] = c; + } +} + +/* Append a single character. +*/ +static void jsonBlobAppendOneByte(JsonParse *pParse, u8 c){ + if( pParse->nBlob >= pParse->nBlobAlloc ){ + jsonBlobExpandAndAppendOneByte(pParse, c); + }else{ + pParse->aBlob[pParse->nBlob++] = c; + } +} + +/* Slow version of jsonBlobAppendNode() that first resizes the +** pParse->aBlob structure. +*/ +static void jsonBlobAppendNode(JsonParse*,u8,u32,const void*); +static SQLITE_NOINLINE void jsonBlobExpandAndAppendNode( + JsonParse *pParse, + u8 eType, + u32 szPayload, + const void *aPayload +){ + if( jsonBlobExpand(pParse, pParse->nBlob+szPayload+9) ) return; + jsonBlobAppendNode(pParse, eType, szPayload, aPayload); +} + + +/* Append a node type byte together with the payload size and +** possibly also the payload. +** +** If aPayload is not NULL, then it is a pointer to the payload which +** is also appended. If aPayload is NULL, the pParse->aBlob[] array +** is resized (if necessary) so that it is big enough to hold the +** payload, but the payload is not appended and pParse->nBlob is left +** pointing to where the first byte of payload will eventually be. +*/ +static void jsonBlobAppendNode( + JsonParse *pParse, /* The JsonParse object under construction */ + u8 eType, /* Node type. One of JSONB_* */ + u32 szPayload, /* Number of bytes of payload */ + const void *aPayload /* The payload. Might be NULL */ +){ + u8 *a; + if( pParse->nBlob+szPayload+9 > pParse->nBlobAlloc ){ + jsonBlobExpandAndAppendNode(pParse,eType,szPayload,aPayload); + return; + } + assert( pParse->aBlob!=0 ); + a = &pParse->aBlob[pParse->nBlob]; + if( szPayload<=11 ){ + a[0] = eType | (szPayload<<4); + pParse->nBlob += 1; + }else if( szPayload<=0xff ){ + a[0] = eType | 0xc0; + a[1] = szPayload & 0xff; + pParse->nBlob += 2; + }else if( szPayload<=0xffff ){ + a[0] = eType | 0xd0; + a[1] = (szPayload >> 8) & 0xff; + a[2] = szPayload & 0xff; + pParse->nBlob += 3; + }else{ + a[0] = eType | 0xe0; + a[1] = (szPayload >> 24) & 0xff; + a[2] = (szPayload >> 16) & 0xff; + a[3] = (szPayload >> 8) & 0xff; + a[4] = szPayload & 0xff; + pParse->nBlob += 5; + } + if( aPayload ){ + pParse->nBlob += szPayload; + memcpy(&pParse->aBlob[pParse->nBlob-szPayload], aPayload, szPayload); + } +} + +/* Change the payload size for the node at index i to be szPayload. +*/ +static int jsonBlobChangePayloadSize( + JsonParse *pParse, + u32 i, + u32 szPayload +){ + u8 *a; + u8 szType; + u8 nExtra; + u8 nNeeded; + int delta; + if( pParse->oom ) return 0; + a = &pParse->aBlob[i]; + szType = a[0]>>4; + if( szType<=11 ){ + nExtra = 0; + }else if( szType==12 ){ + nExtra = 1; + }else if( szType==13 ){ + nExtra = 2; + }else if( szType==14 ){ + nExtra = 4; + }else{ + nExtra = 8; + } + if( szPayload<=11 ){ + nNeeded = 0; + }else if( szPayload<=0xff ){ + nNeeded = 1; + }else if( szPayload<=0xffff ){ + nNeeded = 2; + }else{ + nNeeded = 4; + } + delta = nNeeded - nExtra; + if( delta ){ + u32 newSize = pParse->nBlob + delta; + if( delta>0 ){ + if( newSize>pParse->nBlobAlloc && jsonBlobExpand(pParse, newSize) ){ + return 0; /* OOM error. Error state recorded in pParse->oom. */ + } + a = &pParse->aBlob[i]; + memmove(&a[1+delta], &a[1], pParse->nBlob - (i+1)); + }else{ + memmove(&a[1], &a[1-delta], pParse->nBlob - (i+1-delta)); + } + pParse->nBlob = newSize; + } + if( nNeeded==0 ){ + a[0] = (a[0] & 0x0f) | (szPayload<<4); + }else if( nNeeded==1 ){ + a[0] = (a[0] & 0x0f) | 0xc0; + a[1] = szPayload & 0xff; + }else if( nNeeded==2 ){ + a[0] = (a[0] & 0x0f) | 0xd0; + a[1] = (szPayload >> 8) & 0xff; + a[2] = szPayload & 0xff; + }else{ + a[0] = (a[0] & 0x0f) | 0xe0; + a[1] = (szPayload >> 24) & 0xff; + a[2] = (szPayload >> 16) & 0xff; + a[3] = (szPayload >> 8) & 0xff; + a[4] = szPayload & 0xff; + } + return delta; +} + +/* +** If z[0] is 'u' and is followed by exactly 4 hexadecimal character, +** then set *pOp to JSONB_TEXTJ and return true. If not, do not make +** any changes to *pOp and return false. +*/ +static int jsonIs4HexB(const char *z, int *pOp){ + if( z[0]!='u' ) return 0; + if( !jsonIs4Hex(&z[1]) ) return 0; + *pOp = JSONB_TEXTJ; + return 1; +} + +/* +** Check a single element of the JSONB in pParse for validity. +** +** The element to be checked starts at offset i and must end at on the +** last byte before iEnd. +** +** Return 0 if everything is correct. Return the 1-based byte offset of the +** error if a problem is detected. (In other words, if the error is at offset +** 0, return 1). +*/ +static u32 jsonbValidityCheck( + const JsonParse *pParse, /* Input JSONB. Only aBlob and nBlob are used */ + u32 i, /* Start of element as pParse->aBlob[i] */ + u32 iEnd, /* One more than the last byte of the element */ + u32 iDepth /* Current nesting depth */ +){ + u32 n, sz, j, k; + const u8 *z; + u8 x; + if( iDepth>JSON_MAX_DEPTH ) return i+1; + sz = 0; + n = jsonbPayloadSize(pParse, i, &sz); + if( NEVER(n==0) ) return i+1; /* Checked by caller */ + if( NEVER(i+n+sz!=iEnd) ) return i+1; /* Checked by caller */ + z = pParse->aBlob; + x = z[i] & 0x0f; + switch( x ){ + case JSONB_NULL: + case JSONB_TRUE: + case JSONB_FALSE: { + return n+sz==1 ? 0 : i+1; + } + case JSONB_INT: { + if( sz<1 ) return i+1; + j = i+n; + if( z[j]=='-' ){ + j++; + if( sz<2 ) return i+1; + } + k = i+n+sz; + while( jk ) return j+1; + if( z[j+1]!='.' && z[j+1]!='e' && z[j+1]!='E' ) return j+1; + j++; + } + for(; j0 ) return j+1; + if( x==JSONB_FLOAT && (j==k-1 || !sqlite3Isdigit(z[j+1])) ){ + return j+1; + } + seen = 1; + continue; + } + if( z[j]=='e' || z[j]=='E' ){ + if( seen==2 ) return j+1; + if( j==k-1 ) return j+1; + if( z[j+1]=='+' || z[j+1]=='-' ){ + j++; + if( j==k-1 ) return j+1; + } + seen = 2; + continue; + } + return j+1; + } + if( seen==0 ) return i+1; + return 0; + } + case JSONB_TEXT: { + j = i+n; + k = j+sz; + while( j=k ){ + return j+1; + }else if( strchr("\"\\/bfnrt",z[j+1])!=0 ){ + j++; + }else if( z[j+1]=='u' ){ + if( j+5>=k ) return j+1; + if( !jsonIs4Hex((const char*)&z[j+2]) ) return j+1; + j++; + }else if( x!=JSONB_TEXT5 ){ + return j+1; + }else{ + u32 c = 0; + u32 szC = jsonUnescapeOneChar((const char*)&z[j], k-j, &c); + if( c==JSON_INVALID_CHAR ) return j+1; + j += szC - 1; + } + } + j++; + } + return 0; + } + case JSONB_TEXTRAW: { + return 0; + } + case JSONB_ARRAY: { + u32 sub; + j = i+n; + k = j+sz; + while( jk ) return j+1; + sub = jsonbValidityCheck(pParse, j, j+n+sz, iDepth+1); + if( sub ) return sub; + j += n + sz; + } + assert( j==k ); + return 0; + } + case JSONB_OBJECT: { + u32 cnt = 0; + u32 sub; + j = i+n; + k = j+sz; + while( jk ) return j+1; + if( (cnt & 1)==0 ){ + x = z[j] & 0x0f; + if( xJSONB_TEXTRAW ) return j+1; + } + sub = jsonbValidityCheck(pParse, j, j+n+sz, iDepth+1); + if( sub ) return sub; + cnt++; + j += n + sz; + } + assert( j==k ); + if( (cnt & 1)!=0 ) return j+1; + return 0; + } + default: { + return i+1; + } + } +} + +/* +** Translate a single element of JSON text at pParse->zJson[i] into +** its equivalent binary JSONB representation. Append the translation into +** pParse->aBlob[] beginning at pParse->nBlob. The size of +** pParse->aBlob[] is increased as necessary. +** +** Return the index of the first character past the end of the element parsed, +** or one of the following special result codes: +** +** 0 End of input +** -1 Syntax error or OOM +** -2 '}' seen \ +** -3 ']' seen \___ For these returns, pParse->iErr is set to +** -4 ',' seen / the index in zJson[] of the seen character +** -5 ':' seen / +*/ +static int jsonTranslateTextToBlob(JsonParse *pParse, u32 i){ + char c; + u32 j; + u32 iThis, iStart; + int x; + u8 t; + const char *z = pParse->zJson; +json_parse_restart: + switch( (u8)z[i] ){ + case '{': { + /* Parse object */ + iThis = pParse->nBlob; + jsonBlobAppendNode(pParse, JSONB_OBJECT, pParse->nJson-i, 0); + if( ++pParse->iDepth > JSON_MAX_DEPTH ){ + pParse->iErr = i; + return -1; + } + iStart = pParse->nBlob; + for(j=i+1;;j++){ + u32 iBlob = pParse->nBlob; + x = jsonTranslateTextToBlob(pParse, j); + if( x<=0 ){ + int op; + if( x==(-2) ){ + j = pParse->iErr; + if( pParse->nBlob!=(u32)iStart ) pParse->hasNonstd = 1; + break; + } + j += json5Whitespace(&z[j]); + op = JSONB_TEXT; + if( sqlite3JsonId1(z[j]) + || (z[j]=='\\' && jsonIs4HexB(&z[j+1], &op)) + ){ + int k = j+1; + while( (sqlite3JsonId2(z[k]) && json5Whitespace(&z[k])==0) + || (z[k]=='\\' && jsonIs4HexB(&z[k+1], &op)) + ){ + k++; + } + assert( iBlob==pParse->nBlob ); + jsonBlobAppendNode(pParse, op, k-j, &z[j]); + pParse->hasNonstd = 1; + x = k; + }else{ + if( x!=-1 ) pParse->iErr = j; + return -1; + } + } + if( pParse->oom ) return -1; + t = pParse->aBlob[iBlob] & 0x0f; + if( tJSONB_TEXTRAW ){ + pParse->iErr = j; + return -1; + } + j = x; + if( z[j]==':' ){ + j++; + }else{ + if( jsonIsspace(z[j]) ){ + /* strspn() is not helpful here */ + do{ j++; }while( jsonIsspace(z[j]) ); + if( z[j]==':' ){ + j++; + goto parse_object_value; + } + } + x = jsonTranslateTextToBlob(pParse, j); + if( x!=(-5) ){ + if( x!=(-1) ) pParse->iErr = j; + return -1; + } + j = pParse->iErr+1; + } + parse_object_value: + x = jsonTranslateTextToBlob(pParse, j); + if( x<=0 ){ + if( x!=(-1) ) pParse->iErr = j; + return -1; + } + j = x; + if( z[j]==',' ){ + continue; + }else if( z[j]=='}' ){ + break; + }else{ + if( jsonIsspace(z[j]) ){ + j += 1 + (u32)strspn(&z[j+1], jsonSpaces); + if( z[j]==',' ){ + continue; + }else if( z[j]=='}' ){ + break; + } + } + x = jsonTranslateTextToBlob(pParse, j); + if( x==(-4) ){ + j = pParse->iErr; + continue; + } + if( x==(-2) ){ + j = pParse->iErr; + break; + } + } + pParse->iErr = j; + return -1; + } + jsonBlobChangePayloadSize(pParse, iThis, pParse->nBlob - iStart); + pParse->iDepth--; + return j+1; + } + case '[': { + /* Parse array */ + iThis = pParse->nBlob; + assert( i<=(u32)pParse->nJson ); + jsonBlobAppendNode(pParse, JSONB_ARRAY, pParse->nJson - i, 0); + iStart = pParse->nBlob; + if( pParse->oom ) return -1; + if( ++pParse->iDepth > JSON_MAX_DEPTH ){ + pParse->iErr = i; + return -1; + } + for(j=i+1;;j++){ + x = jsonTranslateTextToBlob(pParse, j); + if( x<=0 ){ + if( x==(-3) ){ + j = pParse->iErr; + if( pParse->nBlob!=iStart ) pParse->hasNonstd = 1; + break; + } + if( x!=(-1) ) pParse->iErr = j; + return -1; + } + j = x; + if( z[j]==',' ){ + continue; + }else if( z[j]==']' ){ + break; + }else{ + if( jsonIsspace(z[j]) ){ + j += 1 + (u32)strspn(&z[j+1], jsonSpaces); + if( z[j]==',' ){ + continue; + }else if( z[j]==']' ){ + break; + } + } + x = jsonTranslateTextToBlob(pParse, j); + if( x==(-4) ){ + j = pParse->iErr; + continue; + } + if( x==(-3) ){ + j = pParse->iErr; + break; + } + } + pParse->iErr = j; + return -1; + } + jsonBlobChangePayloadSize(pParse, iThis, pParse->nBlob - iStart); + pParse->iDepth--; + return j+1; + } + case '\'': { + u8 opcode; + char cDelim; + pParse->hasNonstd = 1; + opcode = JSONB_TEXT; + goto parse_string; + case '"': + /* Parse string */ + opcode = JSONB_TEXT; + parse_string: + cDelim = z[i]; + j = i+1; + while( 1 /*exit-by-break*/ ){ + if( jsonIsOk[(u8)z[j]] ){ + if( !jsonIsOk[(u8)z[j+1]] ){ + j += 1; + }else if( !jsonIsOk[(u8)z[j+2]] ){ + j += 2; + }else{ + j += 3; + continue; + } + } + c = z[j]; + if( c==cDelim ){ + break; + }else if( c=='\\' ){ + c = z[++j]; + if( c=='"' || c=='\\' || c=='/' || c=='b' || c=='f' + || c=='n' || c=='r' || c=='t' + || (c=='u' && jsonIs4Hex(&z[j+1])) ){ + if( opcode==JSONB_TEXT ) opcode = JSONB_TEXTJ; + }else if( c=='\'' || c=='v' || c=='\n' +#ifdef SQLITE_BUG_COMPATIBLE_20250510 + || (c=='0') /* Legacy bug compatible */ +#else + || (c=='0' && !sqlite3Isdigit(z[j+1])) /* Correct implementation */ +#endif + || (0xe2==(u8)c && 0x80==(u8)z[j+1] + && (0xa8==(u8)z[j+2] || 0xa9==(u8)z[j+2])) + || (c=='x' && jsonIs2Hex(&z[j+1])) ){ + opcode = JSONB_TEXT5; + pParse->hasNonstd = 1; + }else if( c=='\r' ){ + if( z[j+1]=='\n' ) j++; + opcode = JSONB_TEXT5; + pParse->hasNonstd = 1; + }else{ + pParse->iErr = j; + return -1; + } + }else if( c<=0x1f ){ + if( c==0 ){ + pParse->iErr = j; + return -1; + } + /* Control characters are not allowed in canonical JSON string + ** literals, but are allowed in JSON5 string literals. */ + opcode = JSONB_TEXT5; + pParse->hasNonstd = 1; + }else if( c=='"' ){ + opcode = JSONB_TEXT5; + } + j++; + } + jsonBlobAppendNode(pParse, opcode, j-1-i, &z[i+1]); + return j+1; + } + case 't': { + if( strncmp(z+i,"true",4)==0 && !sqlite3Isalnum(z[i+4]) ){ + jsonBlobAppendOneByte(pParse, JSONB_TRUE); + return i+4; + } + pParse->iErr = i; + return -1; + } + case 'f': { + if( strncmp(z+i,"false",5)==0 && !sqlite3Isalnum(z[i+5]) ){ + jsonBlobAppendOneByte(pParse, JSONB_FALSE); + return i+5; + } + pParse->iErr = i; + return -1; + } + case '+': { + u8 seenE; + pParse->hasNonstd = 1; + t = 0x00; /* Bit 0x01: JSON5. Bit 0x02: FLOAT */ + goto parse_number; + case '.': + if( sqlite3Isdigit(z[i+1]) ){ + pParse->hasNonstd = 1; + t = 0x03; /* Bit 0x01: JSON5. Bit 0x02: FLOAT */ + seenE = 0; + goto parse_number_2; + } + pParse->iErr = i; + return -1; + case '-': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + /* Parse number */ + t = 0x00; /* Bit 0x01: JSON5. Bit 0x02: FLOAT */ + parse_number: + seenE = 0; + assert( '-' < '0' ); + assert( '+' < '0' ); + assert( '.' < '0' ); + c = z[i]; + + if( c<='0' ){ + if( c=='0' ){ + if( (z[i+1]=='x' || z[i+1]=='X') && sqlite3Isxdigit(z[i+2]) ){ + assert( t==0x00 ); + pParse->hasNonstd = 1; + t = 0x01; + for(j=i+3; sqlite3Isxdigit(z[j]); j++){} + goto parse_number_finish; + }else if( sqlite3Isdigit(z[i+1]) ){ + pParse->iErr = i+1; + return -1; + } + }else{ + if( !sqlite3Isdigit(z[i+1]) ){ + /* JSON5 allows for "+Infinity" and "-Infinity" using exactly + ** that case. SQLite also allows these in any case and it allows + ** "+inf" and "-inf". */ + if( (z[i+1]=='I' || z[i+1]=='i') + && sqlite3StrNICmp(&z[i+1], "inf",3)==0 + ){ + pParse->hasNonstd = 1; + if( z[i]=='-' ){ + jsonBlobAppendNode(pParse, JSONB_FLOAT, 6, "-9e999"); + }else{ + jsonBlobAppendNode(pParse, JSONB_FLOAT, 5, "9e999"); + } + return i + (sqlite3StrNICmp(&z[i+4],"inity",5)==0 ? 9 : 4); + } + if( z[i+1]=='.' ){ + pParse->hasNonstd = 1; + t |= 0x01; + goto parse_number_2; + } + pParse->iErr = i; + return -1; + } + if( z[i+1]=='0' ){ + if( sqlite3Isdigit(z[i+2]) ){ + pParse->iErr = i+1; + return -1; + }else if( (z[i+2]=='x' || z[i+2]=='X') && sqlite3Isxdigit(z[i+3]) ){ + pParse->hasNonstd = 1; + t |= 0x01; + for(j=i+4; sqlite3Isxdigit(z[j]); j++){} + goto parse_number_finish; + } + } + } + } + + parse_number_2: + for(j=i+1;; j++){ + c = z[j]; + if( sqlite3Isdigit(c) ) continue; + if( c=='.' ){ + if( (t & 0x02)!=0 ){ + pParse->iErr = j; + return -1; + } + t |= 0x02; + continue; + } + if( c=='e' || c=='E' ){ + if( z[j-1]<'0' ){ + if( ALWAYS(z[j-1]=='.') && ALWAYS(j-2>=i) && sqlite3Isdigit(z[j-2]) ){ + pParse->hasNonstd = 1; + t |= 0x01; + }else{ + pParse->iErr = j; + return -1; + } + } + if( seenE ){ + pParse->iErr = j; + return -1; + } + t |= 0x02; + seenE = 1; + c = z[j+1]; + if( c=='+' || c=='-' ){ + j++; + c = z[j+1]; + } + if( c<'0' || c>'9' ){ + pParse->iErr = j; + return -1; + } + continue; + } + break; + } + if( z[j-1]<'0' ){ + if( ALWAYS(z[j-1]=='.') && ALWAYS(j-2>=i) && sqlite3Isdigit(z[j-2]) ){ + pParse->hasNonstd = 1; + t |= 0x01; + }else{ + pParse->iErr = j; + return -1; + } + } + parse_number_finish: + assert( JSONB_INT+0x01==JSONB_INT5 ); + assert( JSONB_FLOAT+0x01==JSONB_FLOAT5 ); + assert( JSONB_INT+0x02==JSONB_FLOAT ); + if( z[i]=='+' ) i++; + jsonBlobAppendNode(pParse, JSONB_INT+t, j-i, &z[i]); + return j; + } + case '}': { + pParse->iErr = i; + return -2; /* End of {...} */ + } + case ']': { + pParse->iErr = i; + return -3; /* End of [...] */ + } + case ',': { + pParse->iErr = i; + return -4; /* List separator */ + } + case ':': { + pParse->iErr = i; + return -5; /* Object label/value separator */ + } + case 0: { + return 0; /* End of file */ + } + case 0x09: + case 0x0a: + case 0x0d: + case 0x20: { + i += 1 + (u32)strspn(&z[i+1], jsonSpaces); + goto json_parse_restart; + } + case 0x0b: + case 0x0c: + case '/': + case 0xc2: + case 0xe1: + case 0xe2: + case 0xe3: + case 0xef: { + j = json5Whitespace(&z[i]); + if( j>0 ){ + i += j; + pParse->hasNonstd = 1; + goto json_parse_restart; + } + pParse->iErr = i; + return -1; + } + case 'n': { + if( strncmp(z+i,"null",4)==0 && !sqlite3Isalnum(z[i+4]) ){ + jsonBlobAppendOneByte(pParse, JSONB_NULL); + return i+4; + } + /* fall-through into the default case that checks for NaN */ + /* no break */ deliberate_fall_through + } + default: { + u32 k; + int nn; + c = z[i]; + for(k=0; khasNonstd = 1; + return i + nn; + } + pParse->iErr = i; + return -1; /* Syntax error */ + } + } /* End switch(z[i]) */ +} + + +/* +** Parse a complete JSON string. Return 0 on success or non-zero if there +** are any errors. If an error occurs, free all memory held by pParse, +** but not pParse itself. +** +** pParse must be initialized to an empty parse object prior to calling +** this routine. +*/ +static int jsonConvertTextToBlob( + JsonParse *pParse, /* Initialize and fill this JsonParse object */ + sqlite3_context *pCtx /* Report errors here */ +){ + int i; + const char *zJson = pParse->zJson; + i = jsonTranslateTextToBlob(pParse, 0); + if( pParse->oom ) i = -1; + if( i>0 ){ +#ifdef SQLITE_DEBUG + assert( pParse->iDepth==0 ); + if( sqlite3Config.bJsonSelfcheck ){ + assert( jsonbValidityCheck(pParse, 0, pParse->nBlob, 0)==0 ); + } +#endif + while( jsonIsspace(zJson[i]) ) i++; + if( zJson[i] ){ + i += json5Whitespace(&zJson[i]); + if( zJson[i] ){ + if( pCtx ) sqlite3_result_error(pCtx, "malformed JSON", -1); + jsonParseReset(pParse); + return 1; + } + pParse->hasNonstd = 1; + } + } + if( i<=0 ){ + if( pCtx!=0 ){ + if( pParse->oom ){ + sqlite3_result_error_nomem(pCtx); + }else{ + sqlite3_result_error(pCtx, "malformed JSON", -1); + } + } + jsonParseReset(pParse); + return 1; + } + return 0; +} + +/* +** The input string pStr is a well-formed JSON text string. Convert +** this into the JSONB format and make it the return value of the +** SQL function. +*/ +static void jsonReturnStringAsBlob(JsonString *pStr){ + JsonParse px; + memset(&px, 0, sizeof(px)); + jsonStringTerminate(pStr); + if( pStr->eErr ){ + sqlite3_result_error_nomem(pStr->pCtx); + return; + } + px.zJson = pStr->zBuf; + px.nJson = pStr->nUsed; + px.db = sqlite3_context_db_handle(pStr->pCtx); + (void)jsonTranslateTextToBlob(&px, 0); + if( px.oom ){ + sqlite3DbFree(px.db, px.aBlob); + sqlite3_result_error_nomem(pStr->pCtx); + }else{ + assert( px.nBlobAlloc>0 ); + assert( !px.bReadOnly ); + sqlite3_result_blob(pStr->pCtx, px.aBlob, px.nBlob, SQLITE_DYNAMIC); + } +} + +/* The byte at index i is a node type-code. This routine +** determines the payload size for that node and writes that +** payload size in to *pSz. It returns the offset from i to the +** beginning of the payload. Return 0 on error. +*/ +static u32 jsonbPayloadSize(const JsonParse *pParse, u32 i, u32 *pSz){ + u8 x; + u32 sz; + u32 n; + assert( i<=pParse->nBlob ); + x = pParse->aBlob[i]>>4; + if( x<=11 ){ + sz = x; + n = 1; + }else if( x==12 ){ + if( i+1>=pParse->nBlob ){ + *pSz = 0; + return 0; + } + sz = pParse->aBlob[i+1]; + n = 2; + }else if( x==13 ){ + if( i+2>=pParse->nBlob ){ + *pSz = 0; + return 0; + } + sz = (pParse->aBlob[i+1]<<8) + pParse->aBlob[i+2]; + n = 3; + }else if( x==14 ){ + if( i+4>=pParse->nBlob ){ + *pSz = 0; + return 0; + } + sz = ((u32)pParse->aBlob[i+1]<<24) + (pParse->aBlob[i+2]<<16) + + (pParse->aBlob[i+3]<<8) + pParse->aBlob[i+4]; + n = 5; + }else{ + if( i+8>=pParse->nBlob + || pParse->aBlob[i+1]!=0 + || pParse->aBlob[i+2]!=0 + || pParse->aBlob[i+3]!=0 + || pParse->aBlob[i+4]!=0 + ){ + *pSz = 0; + return 0; + } + sz = ((u32)pParse->aBlob[i+5]<<24) + (pParse->aBlob[i+6]<<16) + + (pParse->aBlob[i+7]<<8) + pParse->aBlob[i+8]; + n = 9; + } + if( (i64)i+sz+n > pParse->nBlob + && (i64)i+sz+n > pParse->nBlob-pParse->delta + ){ + *pSz = 0; + return 0; + } + *pSz = sz; + return n; +} + + +/* +** Translate the binary JSONB representation of JSON beginning at +** pParse->aBlob[i] into a JSON text string. Append the JSON +** text onto the end of pOut. Return the index in pParse->aBlob[] +** of the first byte past the end of the element that is translated. +** +** If an error is detected in the BLOB input, the pOut->eErr flag +** might get set to JSTRING_MALFORMED. But not all BLOB input errors +** are detected. So a malformed JSONB input might either result +** in an error, or in incorrect JSON. +** +** The pOut->eErr JSTRING_OOM flag is set on a OOM. +*/ +static u32 jsonTranslateBlobToText( + const JsonParse *pParse, /* the complete parse of the JSON */ + u32 i, /* Start rendering at this index */ + JsonString *pOut /* Write JSON here */ +){ + u32 sz, n, j, iEnd; + + n = jsonbPayloadSize(pParse, i, &sz); + if( n==0 ){ + pOut->eErr |= JSTRING_MALFORMED; + return pParse->nBlob+1; + } + switch( pParse->aBlob[i] & 0x0f ){ + case JSONB_NULL: { + jsonAppendRawNZ(pOut, "null", 4); + return i+1; + } + case JSONB_TRUE: { + jsonAppendRawNZ(pOut, "true", 4); + return i+1; + } + case JSONB_FALSE: { + jsonAppendRawNZ(pOut, "false", 5); + return i+1; + } + case JSONB_INT: + case JSONB_FLOAT: { + if( sz==0 ) goto malformed_jsonb; + jsonAppendRaw(pOut, (const char*)&pParse->aBlob[i+n], sz); + break; + } + case JSONB_INT5: { /* Integer literal in hexadecimal notation */ + u32 k = 2; + sqlite3_uint64 u = 0; + const char *zIn = (const char*)&pParse->aBlob[i+n]; + int bOverflow = 0; + if( sz==0 ) goto malformed_jsonb; + if( zIn[0]=='-' ){ + jsonAppendChar(pOut, '-'); + k++; + }else if( zIn[0]=='+' ){ + k++; + } + for(; keErr |= JSTRING_MALFORMED; + break; + }else if( (u>>60)!=0 ){ + bOverflow = 1; + }else{ + u = u*16 + sqlite3HexToInt(zIn[k]); + } + } + jsonPrintf(100,pOut,bOverflow?"9.0e999":"%llu", u); + break; + } + case JSONB_FLOAT5: { /* Float literal missing digits beside "." */ + u32 k = 0; + const char *zIn = (const char*)&pParse->aBlob[i+n]; + if( sz==0 ) goto malformed_jsonb; + if( zIn[0]=='-' ){ + jsonAppendChar(pOut, '-'); + k++; + } + if( zIn[k]=='.' ){ + jsonAppendChar(pOut, '0'); + } + for(; knUsed+sz+2<=pOut->nAlloc || jsonStringGrow(pOut, sz+2)==0 ){ + pOut->zBuf[pOut->nUsed] = '"'; + memcpy(pOut->zBuf+pOut->nUsed+1,(const char*)&pParse->aBlob[i+n],sz); + pOut->zBuf[pOut->nUsed+sz+1] = '"'; + pOut->nUsed += sz+2; + } + break; + } + case JSONB_TEXT5: { + const char *zIn; + u32 k; + u32 sz2 = sz; + zIn = (const char*)&pParse->aBlob[i+n]; + jsonAppendChar(pOut, '"'); + while( sz2>0 ){ + for(k=0; k0 ){ + jsonAppendRawNZ(pOut, zIn, k); + if( k>=sz2 ){ + break; + } + zIn += k; + sz2 -= k; + } + if( zIn[0]=='"' ){ + jsonAppendRawNZ(pOut, "\\\"", 2); + zIn++; + sz2--; + continue; + } + if( zIn[0]<=0x1f ){ + if( pOut->nUsed+7>pOut->nAlloc && jsonStringGrow(pOut,7) ) break; + jsonAppendControlChar(pOut, zIn[0]); + zIn++; + sz2--; + continue; + } + assert( zIn[0]=='\\' ); + assert( sz2>=1 ); + if( sz2<2 ){ + pOut->eErr |= JSTRING_MALFORMED; + break; + } + switch( (u8)zIn[1] ){ + case '\'': + jsonAppendChar(pOut, '\''); + break; + case 'v': + jsonAppendRawNZ(pOut, "\\u000b", 6); + break; + case 'x': + if( sz2<4 ){ + pOut->eErr |= JSTRING_MALFORMED; + sz2 = 2; + break; + } + jsonAppendRawNZ(pOut, "\\u00", 4); + jsonAppendRawNZ(pOut, &zIn[2], 2); + zIn += 2; + sz2 -= 2; + break; + case '0': + jsonAppendRawNZ(pOut, "\\u0000", 6); + break; + case '\r': + if( sz2>2 && zIn[2]=='\n' ){ + zIn++; + sz2--; + } + break; + case '\n': + break; + case 0xe2: + /* '\' followed by either U+2028 or U+2029 is ignored as + ** whitespace. Not that in UTF8, U+2028 is 0xe2 0x80 0x29. + ** U+2029 is the same except for the last byte */ + if( sz2<4 + || 0x80!=(u8)zIn[2] + || (0xa8!=(u8)zIn[3] && 0xa9!=(u8)zIn[3]) + ){ + pOut->eErr |= JSTRING_MALFORMED; + sz2 = 2; + break; + } + zIn += 2; + sz2 -= 2; + break; + default: + jsonAppendRawNZ(pOut, zIn, 2); + break; + } + assert( sz2>=2 ); + zIn += 2; + sz2 -= 2; + } + jsonAppendChar(pOut, '"'); + break; + } + case JSONB_TEXTRAW: { + jsonAppendString(pOut, (const char*)&pParse->aBlob[i+n], sz); + break; + } + case JSONB_ARRAY: { + jsonAppendChar(pOut, '['); + j = i+n; + iEnd = j+sz; + while( jeErr==0 ){ + j = jsonTranslateBlobToText(pParse, j, pOut); + jsonAppendChar(pOut, ','); + } + if( j>iEnd ) pOut->eErr |= JSTRING_MALFORMED; + if( sz>0 ) jsonStringTrimOneChar(pOut); + jsonAppendChar(pOut, ']'); + break; + } + case JSONB_OBJECT: { + int x = 0; + jsonAppendChar(pOut, '{'); + j = i+n; + iEnd = j+sz; + while( jeErr==0 ){ + j = jsonTranslateBlobToText(pParse, j, pOut); + jsonAppendChar(pOut, (x++ & 1) ? ',' : ':'); + } + if( (x & 1)!=0 || j>iEnd ) pOut->eErr |= JSTRING_MALFORMED; + if( sz>0 ) jsonStringTrimOneChar(pOut); + jsonAppendChar(pOut, '}'); + break; + } + + default: { + malformed_jsonb: + pOut->eErr |= JSTRING_MALFORMED; + break; + } + } + return i+n+sz; +} + +/* Context for recursion of json_pretty() +*/ +typedef struct JsonPretty JsonPretty; +struct JsonPretty { + JsonParse *pParse; /* The BLOB being rendered */ + JsonString *pOut; /* Generate pretty output into this string */ + const char *zIndent; /* Use this text for indentation */ + u32 szIndent; /* Bytes in zIndent[] */ + u32 nIndent; /* Current level of indentation */ +}; + +/* Append indentation to the pretty JSON under construction */ +static void jsonPrettyIndent(JsonPretty *pPretty){ + u32 jj; + for(jj=0; jjnIndent; jj++){ + jsonAppendRaw(pPretty->pOut, pPretty->zIndent, pPretty->szIndent); + } +} + +/* +** Translate the binary JSONB representation of JSON beginning at +** pParse->aBlob[i] into a JSON text string. Append the JSON +** text onto the end of pOut. Return the index in pParse->aBlob[] +** of the first byte past the end of the element that is translated. +** +** This is a variant of jsonTranslateBlobToText() that "pretty-prints" +** the output. Extra whitespace is inserted to make the JSON easier +** for humans to read. +** +** If an error is detected in the BLOB input, the pOut->eErr flag +** might get set to JSTRING_MALFORMED. But not all BLOB input errors +** are detected. So a malformed JSONB input might either result +** in an error, or in incorrect JSON. +** +** The pOut->eErr JSTRING_OOM flag is set on a OOM. +*/ +static u32 jsonTranslateBlobToPrettyText( + JsonPretty *pPretty, /* Pretty-printing context */ + u32 i /* Start rendering at this index */ +){ + u32 sz, n, j, iEnd; + const JsonParse *pParse = pPretty->pParse; + JsonString *pOut = pPretty->pOut; + n = jsonbPayloadSize(pParse, i, &sz); + if( n==0 ){ + pOut->eErr |= JSTRING_MALFORMED; + return pParse->nBlob+1; + } + switch( pParse->aBlob[i] & 0x0f ){ + case JSONB_ARRAY: { + j = i+n; + iEnd = j+sz; + jsonAppendChar(pOut, '['); + if( jnIndent++; + while( pOut->eErr==0 ){ + jsonPrettyIndent(pPretty); + j = jsonTranslateBlobToPrettyText(pPretty, j); + if( j>=iEnd ) break; + jsonAppendRawNZ(pOut, ",\n", 2); + } + jsonAppendChar(pOut, '\n'); + pPretty->nIndent--; + jsonPrettyIndent(pPretty); + } + jsonAppendChar(pOut, ']'); + i = iEnd; + break; + } + case JSONB_OBJECT: { + j = i+n; + iEnd = j+sz; + jsonAppendChar(pOut, '{'); + if( jnIndent++; + while( pOut->eErr==0 ){ + jsonPrettyIndent(pPretty); + j = jsonTranslateBlobToText(pParse, j, pOut); + if( j>iEnd ){ + pOut->eErr |= JSTRING_MALFORMED; + break; + } + jsonAppendRawNZ(pOut, ": ", 2); + j = jsonTranslateBlobToPrettyText(pPretty, j); + if( j>=iEnd ) break; + jsonAppendRawNZ(pOut, ",\n", 2); + } + jsonAppendChar(pOut, '\n'); + pPretty->nIndent--; + jsonPrettyIndent(pPretty); + } + jsonAppendChar(pOut, '}'); + i = iEnd; + break; + } + default: { + i = jsonTranslateBlobToText(pParse, i, pOut); + break; + } + } + return i; +} + +/* +** Given that a JSONB_ARRAY object starts at offset i, return +** the number of entries in that array. +*/ +static u32 jsonbArrayCount(JsonParse *pParse, u32 iRoot){ + u32 n, sz, i, iEnd; + u32 k = 0; + n = jsonbPayloadSize(pParse, iRoot, &sz); + iEnd = iRoot+n+sz; + for(i=iRoot+n; n>0 && idelta. +*/ +static void jsonAfterEditSizeAdjust(JsonParse *pParse, u32 iRoot){ + u32 sz = 0; + u32 nBlob; + assert( pParse->delta!=0 ); + assert( pParse->nBlobAlloc >= pParse->nBlob ); + nBlob = pParse->nBlob; + pParse->nBlob = pParse->nBlobAlloc; + (void)jsonbPayloadSize(pParse, iRoot, &sz); + pParse->nBlob = nBlob; + sz += pParse->delta; + pParse->delta += jsonBlobChangePayloadSize(pParse, iRoot, sz); +} + +/* +** If the JSONB at aIns[0..nIns-1] can be expanded (by denormalizing the +** size field) by d bytes, then write the expansion into aOut[] and +** return true. In this way, an overwrite happens without changing the +** size of the JSONB, which reduces memcpy() operations and also make it +** faster and easier to update the B-Tree entry that contains the JSONB +** in the database. +** +** If the expansion of aIns[] by d bytes cannot be (easily) accomplished +** then return false. +** +** The d parameter is guaranteed to be between 1 and 8. +** +** This routine is an optimization. A correct answer is obtained if it +** always leaves the output unchanged and returns false. +*/ +static int jsonBlobOverwrite( + u8 *aOut, /* Overwrite here */ + const u8 *aIns, /* New content */ + u32 nIns, /* Bytes of new content */ + u32 d /* Need to expand new content by this much */ +){ + u32 szPayload; /* Bytes of payload */ + u32 i; /* New header size, after expansion & a loop counter */ + u8 szHdr; /* Size of header before expansion */ + + /* Lookup table for finding the upper 4 bits of the first byte of the + ** expanded aIns[], based on the size of the expanded aIns[] header: + ** + ** 2 3 4 5 6 7 8 9 */ + static const u8 aType[] = { 0xc0, 0xd0, 0, 0xe0, 0, 0, 0, 0xf0 }; + + if( (aIns[0]&0x0f)<=2 ) return 0; /* Cannot enlarge NULL, true, false */ + switch( aIns[0]>>4 ){ + default: { /* aIns[] header size 1 */ + if( ((1<=2 && i<=9 && aType[i-2]!=0 ); + aOut[0] = (aIns[0] & 0x0f) | aType[i-2]; + memcpy(&aOut[i], &aIns[szHdr], nIns-szHdr); + szPayload = nIns - szHdr; + while( 1/*edit-by-break*/ ){ + i--; + aOut[i] = szPayload & 0xff; + if( i==1 ) break; + szPayload >>= 8; + } + assert( (szPayload>>8)==0 ); + return 1; +} + +/* +** Modify the JSONB blob at pParse->aBlob by removing nDel bytes of +** content beginning at iDel, and replacing them with nIns bytes of +** content given by aIns. +** +** nDel may be zero, in which case no bytes are removed. But iDel is +** still important as new bytes will be insert beginning at iDel. +** +** aIns may be zero, in which case space is created to hold nIns bytes +** beginning at iDel, but that space is uninitialized. +** +** Set pParse->oom if an OOM occurs. +*/ +static void jsonBlobEdit( + JsonParse *pParse, /* The JSONB to be modified is in pParse->aBlob */ + u32 iDel, /* First byte to be removed */ + u32 nDel, /* Number of bytes to remove */ + const u8 *aIns, /* Content to insert */ + u32 nIns /* Bytes of content to insert */ +){ + i64 d = (i64)nIns - (i64)nDel; + if( d<0 && d>=(-8) && aIns!=0 + && jsonBlobOverwrite(&pParse->aBlob[iDel], aIns, nIns, (int)-d) + ){ + return; + } + if( d!=0 ){ + if( pParse->nBlob + d > pParse->nBlobAlloc ){ + jsonBlobExpand(pParse, pParse->nBlob+d); + if( pParse->oom ) return; + } + memmove(&pParse->aBlob[iDel+nIns], + &pParse->aBlob[iDel+nDel], + pParse->nBlob - (iDel+nDel)); + pParse->nBlob += d; + pParse->delta += d; + } + if( nIns && aIns ){ + memcpy(&pParse->aBlob[iDel], aIns, nIns); + } +} + +/* +** Return the number of escaped newlines to be ignored. +** An escaped newline is a one of the following byte sequences: +** +** 0x5c 0x0a +** 0x5c 0x0d +** 0x5c 0x0d 0x0a +** 0x5c 0xe2 0x80 0xa8 +** 0x5c 0xe2 0x80 0xa9 +*/ +static u32 jsonBytesToBypass(const char *z, u32 n){ + u32 i = 0; + while( i+10 ); + assert( z[0]=='\\' ); + if( n<2 ){ + *piOut = JSON_INVALID_CHAR; + return n; + } + switch( (u8)z[1] ){ + case 'u': { + u32 v, vlo; + if( n<6 ){ + *piOut = JSON_INVALID_CHAR; + return n; + } + v = jsonHexToInt4(&z[2]); + if( (v & 0xfc00)==0xd800 + && n>=12 + && z[6]=='\\' + && z[7]=='u' + && ((vlo = jsonHexToInt4(&z[8]))&0xfc00)==0xdc00 + ){ + *piOut = ((v&0x3ff)<<10) + (vlo&0x3ff) + 0x10000; + return 12; + }else{ + *piOut = v; + return 6; + } + } + case 'b': { *piOut = '\b'; return 2; } + case 'f': { *piOut = '\f'; return 2; } + case 'n': { *piOut = '\n'; return 2; } + case 'r': { *piOut = '\r'; return 2; } + case 't': { *piOut = '\t'; return 2; } + case 'v': { *piOut = '\v'; return 2; } + case '0': { + /* JSON5 requires that the \0 escape not be followed by a digit. + ** But SQLite did not enforce this restriction in versions 3.42.0 + ** through 3.49.2. That was a bug. But some applications might have + ** come to depend on that bug. Use the SQLITE_BUG_COMPATIBLE_20250510 + ** option to restore the old buggy behavior. */ +#ifdef SQLITE_BUG_COMPATIBLE_20250510 + /* Legacy bug-compatible behavior */ + *piOut = 0; +#else + /* Correct behavior */ + *piOut = (n>2 && sqlite3Isdigit(z[2])) ? JSON_INVALID_CHAR : 0; +#endif + return 2; + } + case '\'': + case '"': + case '/': + case '\\':{ *piOut = z[1]; return 2; } + case 'x': { + if( n<4 ){ + *piOut = JSON_INVALID_CHAR; + return n; + } + *piOut = (jsonHexToInt(z[2])<<4) | jsonHexToInt(z[3]); + return 4; + } + case 0xe2: + case '\r': + case '\n': { + u32 nSkip = jsonBytesToBypass(z, n); + if( nSkip==0 ){ + *piOut = JSON_INVALID_CHAR; + return n; + }else if( nSkip==n ){ + *piOut = 0; + return n; + }else if( z[nSkip]=='\\' ){ + return nSkip + jsonUnescapeOneChar(&z[nSkip], n-nSkip, piOut); + }else{ + int sz = sqlite3Utf8ReadLimited((u8*)&z[nSkip], n-nSkip, piOut); + return nSkip + sz; + } + } + default: { + *piOut = JSON_INVALID_CHAR; + return 2; + } + } +} + + +/* +** Compare two object labels. Return 1 if they are equal and +** 0 if they differ. +** +** In this version, we know that one or the other or both of the +** two comparands contains an escape sequence. +*/ +static SQLITE_NOINLINE int jsonLabelCompareEscaped( + const char *zLeft, /* The left label */ + u32 nLeft, /* Size of the left label in bytes */ + int rawLeft, /* True if zLeft contains no escapes */ + const char *zRight, /* The right label */ + u32 nRight, /* Size of the right label in bytes */ + int rawRight /* True if zRight is escape-free */ +){ + u32 cLeft, cRight; + assert( rawLeft==0 || rawRight==0 ); + while( 1 /*exit-by-return*/ ){ + if( nLeft==0 ){ + cLeft = 0; + }else if( rawLeft || zLeft[0]!='\\' ){ + cLeft = ((u8*)zLeft)[0]; + if( cLeft>=0xc0 ){ + int sz = sqlite3Utf8ReadLimited((u8*)zLeft, nLeft, &cLeft); + zLeft += sz; + nLeft -= sz; + }else{ + zLeft++; + nLeft--; + } + }else{ + u32 n = jsonUnescapeOneChar(zLeft, nLeft, &cLeft); + zLeft += n; + assert( n<=nLeft ); + nLeft -= n; + } + if( nRight==0 ){ + cRight = 0; + }else if( rawRight || zRight[0]!='\\' ){ + cRight = ((u8*)zRight)[0]; + if( cRight>=0xc0 ){ + int sz = sqlite3Utf8ReadLimited((u8*)zRight, nRight, &cRight); + zRight += sz; + nRight -= sz; + }else{ + zRight++; + nRight--; + } + }else{ + u32 n = jsonUnescapeOneChar(zRight, nRight, &cRight); + zRight += n; + assert( n<=nRight ); + nRight -= n; + } + if( cLeft!=cRight ) return 0; + if( cLeft==0 ) return 1; + } +} + +/* +** Compare two object labels. Return 1 if they are equal and +** 0 if they differ. Return -1 if an OOM occurs. +*/ +static int jsonLabelCompare( + const char *zLeft, /* The left label */ + u32 nLeft, /* Size of the left label in bytes */ + int rawLeft, /* True if zLeft contains no escapes */ + const char *zRight, /* The right label */ + u32 nRight, /* Size of the right label in bytes */ + int rawRight /* True if zRight is escape-free */ +){ + if( rawLeft && rawRight ){ + /* Simpliest case: Neither label contains escapes. A simple + ** memcmp() is sufficient. */ + if( nLeft!=nRight ) return 0; + return memcmp(zLeft, zRight, nLeft)==0; + }else{ + return jsonLabelCompareEscaped(zLeft, nLeft, rawLeft, + zRight, nRight, rawRight); + } +} + +/* +** Error returns from jsonLookupStep() +*/ +#define JSON_LOOKUP_ERROR 0xffffffff +#define JSON_LOOKUP_NOTFOUND 0xfffffffe +#define JSON_LOOKUP_PATHERROR 0xfffffffd +#define JSON_LOOKUP_ISERROR(x) ((x)>=JSON_LOOKUP_PATHERROR) + +/* Forward declaration */ +static u32 jsonLookupStep(JsonParse*,u32,const char*,u32); + + +/* This helper routine for jsonLookupStep() populates pIns with +** binary data that is to be inserted into pParse. +** +** In the common case, pIns just points to pParse->aIns and pParse->nIns. +** But if the zPath of the original edit operation includes path elements +** that go deeper, additional substructure must be created. +** +** For example: +** +** json_insert('{}', '$.a.b.c', 123); +** +** The search stops at '$.a' But additional substructure must be +** created for the ".b.c" part of the patch so that the final result +** is: {"a":{"b":{"c"::123}}}. This routine populates pIns with +** the binary equivalent of {"b":{"c":123}} so that it can be inserted. +** +** The caller is responsible for resetting pIns when it has finished +** using the substructure. +*/ +static u32 jsonCreateEditSubstructure( + JsonParse *pParse, /* The original JSONB that is being edited */ + JsonParse *pIns, /* Populate this with the blob data to insert */ + const char *zTail /* Tail of the path that determins substructure */ +){ + static const u8 emptyObject[] = { JSONB_ARRAY, JSONB_OBJECT }; + int rc; + memset(pIns, 0, sizeof(*pIns)); + pIns->db = pParse->db; + if( zTail[0]==0 ){ + /* No substructure. Just insert what is given in pParse. */ + pIns->aBlob = pParse->aIns; + pIns->nBlob = pParse->nIns; + rc = 0; + }else{ + /* Construct the binary substructure */ + pIns->nBlob = 1; + pIns->aBlob = (u8*)&emptyObject[zTail[0]=='.']; + pIns->eEdit = pParse->eEdit; + pIns->nIns = pParse->nIns; + pIns->aIns = pParse->aIns; + rc = jsonLookupStep(pIns, 0, zTail, 0); + pParse->oom |= pIns->oom; + } + return rc; /* Error code only */ +} + +/* +** Search along zPath to find the Json element specified. Return an +** index into pParse->aBlob[] for the start of that element's value. +** +** If the value found by this routine is the value half of label/value pair +** within an object, then set pPath->iLabel to the start of the corresponding +** label, before returning. +** +** Return one of the JSON_LOOKUP error codes if problems are seen. +** +** This routine will also modify the blob. If pParse->eEdit is one of +** JEDIT_DEL, JEDIT_REPL, JEDIT_INS, or JEDIT_SET, then changes might be +** made to the selected value. If an edit is performed, then the return +** value does not necessarily point to the select element. If an edit +** is performed, the return value is only useful for detecting error +** conditions. +*/ +static u32 jsonLookupStep( + JsonParse *pParse, /* The JSON to search */ + u32 iRoot, /* Begin the search at this element of aBlob[] */ + const char *zPath, /* The path to search */ + u32 iLabel /* Label if iRoot is a value of in an object */ +){ + u32 i, j, k, nKey, sz, n, iEnd, rc; + const char *zKey; + u8 x; + + if( zPath[0]==0 ){ + if( pParse->eEdit && jsonBlobMakeEditable(pParse, pParse->nIns) ){ + n = jsonbPayloadSize(pParse, iRoot, &sz); + sz += n; + if( pParse->eEdit==JEDIT_DEL ){ + if( iLabel>0 ){ + sz += iRoot - iLabel; + iRoot = iLabel; + } + jsonBlobEdit(pParse, iRoot, sz, 0, 0); + }else if( pParse->eEdit==JEDIT_INS ){ + /* Already exists, so json_insert() is a no-op */ + }else{ + /* json_set() or json_replace() */ + jsonBlobEdit(pParse, iRoot, sz, pParse->aIns, pParse->nIns); + } + } + pParse->iLabel = iLabel; + return iRoot; + } + if( zPath[0]=='.' ){ + int rawKey = 1; + x = pParse->aBlob[iRoot]; + zPath++; + if( zPath[0]=='"' ){ + zKey = zPath + 1; + for(i=1; zPath[i] && zPath[i]!='"'; i++){ + if( zPath[i]=='\\' && zPath[i+1]!=0 ) i++; + } + nKey = i-1; + if( zPath[i] ){ + i++; + }else{ + return JSON_LOOKUP_PATHERROR; + } + testcase( nKey==0 ); + rawKey = memchr(zKey, '\\', nKey)==0; + }else{ + zKey = zPath; + for(i=0; zPath[i] && zPath[i]!='.' && zPath[i]!='['; i++){} + nKey = i; + if( nKey==0 ){ + return JSON_LOOKUP_PATHERROR; + } + } + if( (x & 0x0f)!=JSONB_OBJECT ) return JSON_LOOKUP_NOTFOUND; + n = jsonbPayloadSize(pParse, iRoot, &sz); + j = iRoot + n; /* j is the index of a label */ + iEnd = j+sz; + while( jaBlob[j] & 0x0f; + if( xJSONB_TEXTRAW ) return JSON_LOOKUP_ERROR; + n = jsonbPayloadSize(pParse, j, &sz); + if( n==0 ) return JSON_LOOKUP_ERROR; + k = j+n; /* k is the index of the label text */ + if( k+sz>=iEnd ) return JSON_LOOKUP_ERROR; + zLabel = (const char*)&pParse->aBlob[k]; + rawLabel = x==JSONB_TEXT || x==JSONB_TEXTRAW; + if( jsonLabelCompare(zKey, nKey, rawKey, zLabel, sz, rawLabel) ){ + u32 v = k+sz; /* v is the index of the value */ + if( ((pParse->aBlob[v])&0x0f)>JSONB_OBJECT ) return JSON_LOOKUP_ERROR; + n = jsonbPayloadSize(pParse, v, &sz); + if( n==0 || v+n+sz>iEnd ) return JSON_LOOKUP_ERROR; + assert( j>0 ); + rc = jsonLookupStep(pParse, v, &zPath[i], j); + if( pParse->delta ) jsonAfterEditSizeAdjust(pParse, iRoot); + return rc; + } + j = k+sz; + if( ((pParse->aBlob[j])&0x0f)>JSONB_OBJECT ) return JSON_LOOKUP_ERROR; + n = jsonbPayloadSize(pParse, j, &sz); + if( n==0 ) return JSON_LOOKUP_ERROR; + j += n+sz; + } + if( j>iEnd ) return JSON_LOOKUP_ERROR; + if( pParse->eEdit>=JEDIT_INS ){ + u32 nIns; /* Total bytes to insert (label+value) */ + JsonParse v; /* BLOB encoding of the value to be inserted */ + JsonParse ix; /* Header of the label to be inserted */ + testcase( pParse->eEdit==JEDIT_INS ); + testcase( pParse->eEdit==JEDIT_SET ); + memset(&ix, 0, sizeof(ix)); + ix.db = pParse->db; + jsonBlobAppendNode(&ix, rawKey?JSONB_TEXTRAW:JSONB_TEXT5, nKey, 0); + pParse->oom |= ix.oom; + rc = jsonCreateEditSubstructure(pParse, &v, &zPath[i]); + if( !JSON_LOOKUP_ISERROR(rc) + && jsonBlobMakeEditable(pParse, ix.nBlob+nKey+v.nBlob) + ){ + assert( !pParse->oom ); + nIns = ix.nBlob + nKey + v.nBlob; + jsonBlobEdit(pParse, j, 0, 0, nIns); + if( !pParse->oom ){ + assert( pParse->aBlob!=0 ); /* Because pParse->oom!=0 */ + assert( ix.aBlob!=0 ); /* Because pPasre->oom!=0 */ + memcpy(&pParse->aBlob[j], ix.aBlob, ix.nBlob); + k = j + ix.nBlob; + memcpy(&pParse->aBlob[k], zKey, nKey); + k += nKey; + memcpy(&pParse->aBlob[k], v.aBlob, v.nBlob); + if( ALWAYS(pParse->delta) ) jsonAfterEditSizeAdjust(pParse, iRoot); + } + } + jsonParseReset(&v); + jsonParseReset(&ix); + return rc; + } + }else if( zPath[0]=='[' ){ + x = pParse->aBlob[iRoot] & 0x0f; + if( x!=JSONB_ARRAY ) return JSON_LOOKUP_NOTFOUND; + n = jsonbPayloadSize(pParse, iRoot, &sz); + k = 0; + i = 1; + while( sqlite3Isdigit(zPath[i]) ){ + k = k*10 + zPath[i] - '0'; + i++; + } + if( i<2 || zPath[i]!=']' ){ + if( zPath[1]=='#' ){ + k = jsonbArrayCount(pParse, iRoot); + i = 2; + if( zPath[2]=='-' && sqlite3Isdigit(zPath[3]) ){ + unsigned int nn = 0; + i = 3; + do{ + nn = nn*10 + zPath[i] - '0'; + i++; + }while( sqlite3Isdigit(zPath[i]) ); + if( nn>k ) return JSON_LOOKUP_NOTFOUND; + k -= nn; + } + if( zPath[i]!=']' ){ + return JSON_LOOKUP_PATHERROR; + } + }else{ + return JSON_LOOKUP_PATHERROR; + } + } + j = iRoot+n; + iEnd = j+sz; + while( jdelta ) jsonAfterEditSizeAdjust(pParse, iRoot); + return rc; + } + k--; + n = jsonbPayloadSize(pParse, j, &sz); + if( n==0 ) return JSON_LOOKUP_ERROR; + j += n+sz; + } + if( j>iEnd ) return JSON_LOOKUP_ERROR; + if( k>0 ) return JSON_LOOKUP_NOTFOUND; + if( pParse->eEdit>=JEDIT_INS ){ + JsonParse v; + testcase( pParse->eEdit==JEDIT_INS ); + testcase( pParse->eEdit==JEDIT_SET ); + rc = jsonCreateEditSubstructure(pParse, &v, &zPath[i+1]); + if( !JSON_LOOKUP_ISERROR(rc) + && jsonBlobMakeEditable(pParse, v.nBlob) + ){ + assert( !pParse->oom ); + jsonBlobEdit(pParse, j, 0, v.aBlob, v.nBlob); + } + jsonParseReset(&v); + if( pParse->delta ) jsonAfterEditSizeAdjust(pParse, iRoot); + return rc; + } + }else{ + return JSON_LOOKUP_PATHERROR; + } + return JSON_LOOKUP_NOTFOUND; +} + +/* +** Convert a JSON BLOB into text and make that text the return value +** of an SQL function. +*/ +static void jsonReturnTextJsonFromBlob( + sqlite3_context *ctx, + const u8 *aBlob, + u32 nBlob +){ + JsonParse x; + JsonString s; + + if( NEVER(aBlob==0) ) return; + memset(&x, 0, sizeof(x)); + x.aBlob = (u8*)aBlob; + x.nBlob = nBlob; + jsonStringInit(&s, ctx); + jsonTranslateBlobToText(&x, 0, &s); + jsonReturnString(&s, 0, 0); +} + + +/* +** Return the value of the BLOB node at index i. +** +** If the value is a primitive, return it as an SQL value. +** If the value is an array or object, return it as either +** JSON text or the BLOB encoding, depending on the eMode flag +** as follows: +** +** eMode==0 JSONB if the JSON_B flag is set in userdata or +** text if the JSON_B flag is omitted from userdata. +** +** eMode==1 Text +** +** eMode==2 JSONB +*/ +static void jsonReturnFromBlob( + JsonParse *pParse, /* Complete JSON parse tree */ + u32 i, /* Index of the node */ + sqlite3_context *pCtx, /* Return value for this function */ + int eMode /* Format of return: text of JSONB */ +){ + u32 n, sz; + int rc; + sqlite3 *db = sqlite3_context_db_handle(pCtx); + + assert( eMode>=0 && eMode<=2 ); + n = jsonbPayloadSize(pParse, i, &sz); + if( n==0 ){ + sqlite3_result_error(pCtx, "malformed JSON", -1); + return; + } + switch( pParse->aBlob[i] & 0x0f ){ + case JSONB_NULL: { + if( sz ) goto returnfromblob_malformed; + sqlite3_result_null(pCtx); + break; + } + case JSONB_TRUE: { + if( sz ) goto returnfromblob_malformed; + sqlite3_result_int(pCtx, 1); + break; + } + case JSONB_FALSE: { + if( sz ) goto returnfromblob_malformed; + sqlite3_result_int(pCtx, 0); + break; + } + case JSONB_INT5: + case JSONB_INT: { + sqlite3_int64 iRes = 0; + char *z; + int bNeg = 0; + char x; + if( sz==0 ) goto returnfromblob_malformed; + x = (char)pParse->aBlob[i+n]; + if( x=='-' ){ + if( sz<2 ) goto returnfromblob_malformed; + n++; + sz--; + bNeg = 1; + } + z = sqlite3DbStrNDup(db, (const char*)&pParse->aBlob[i+n], (int)sz); + if( z==0 ) goto returnfromblob_oom; + rc = sqlite3DecOrHexToI64(z, &iRes); + sqlite3DbFree(db, z); + if( rc==0 ){ + if( iRes<0 ){ + /* A hexadecimal literal with 16 significant digits and with the + ** high-order bit set is a negative integer in SQLite (and hence + ** iRes comes back as negative) but should be interpreted as a + ** positive value if it occurs within JSON. The value is too + ** large to appear as an SQLite integer so it must be converted + ** into floating point. */ + double r; + r = (double)*(sqlite3_uint64*)&iRes; + sqlite3_result_double(pCtx, bNeg ? -r : r); + }else{ + sqlite3_result_int64(pCtx, bNeg ? -iRes : iRes); + } + }else if( rc==3 && bNeg ){ + sqlite3_result_int64(pCtx, SMALLEST_INT64); + }else if( rc==1 ){ + goto returnfromblob_malformed; + }else{ + if( bNeg ){ n--; sz++; } + goto to_double; + } + break; + } + case JSONB_FLOAT5: + case JSONB_FLOAT: { + double r; + char *z; + if( sz==0 ) goto returnfromblob_malformed; + to_double: + z = sqlite3DbStrNDup(db, (const char*)&pParse->aBlob[i+n], (int)sz); + if( z==0 ) goto returnfromblob_oom; + rc = sqlite3AtoF(z, &r, sqlite3Strlen30(z), SQLITE_UTF8); + sqlite3DbFree(db, z); + if( rc<=0 ) goto returnfromblob_malformed; + sqlite3_result_double(pCtx, r); + break; + } + case JSONB_TEXTRAW: + case JSONB_TEXT: { + sqlite3_result_text(pCtx, (char*)&pParse->aBlob[i+n], sz, + SQLITE_TRANSIENT); + break; + } + case JSONB_TEXT5: + case JSONB_TEXTJ: { + /* Translate JSON formatted string into raw text */ + u32 iIn, iOut; + const char *z; + char *zOut; + u32 nOut = sz; + z = (const char*)&pParse->aBlob[i+n]; + zOut = sqlite3DbMallocRaw(db, ((u64)nOut)+1); + if( zOut==0 ) goto returnfromblob_oom; + for(iIn=iOut=0; iIn=2 ); + zOut[iOut++] = (char)(0xc0 | (v>>6)); + zOut[iOut++] = 0x80 | (v&0x3f); + }else if( v<0x10000 ){ + assert( szEscape>=3 ); + zOut[iOut++] = 0xe0 | (v>>12); + zOut[iOut++] = 0x80 | ((v>>6)&0x3f); + zOut[iOut++] = 0x80 | (v&0x3f); + }else if( v==JSON_INVALID_CHAR ){ + /* Silently ignore illegal unicode */ + }else{ + assert( szEscape>=4 ); + zOut[iOut++] = 0xf0 | (v>>18); + zOut[iOut++] = 0x80 | ((v>>12)&0x3f); + zOut[iOut++] = 0x80 | ((v>>6)&0x3f); + zOut[iOut++] = 0x80 | (v&0x3f); + } + iIn += szEscape - 1; + }else{ + zOut[iOut++] = c; + } + } /* end for() */ + assert( iOut<=nOut ); + zOut[iOut] = 0; + sqlite3_result_text(pCtx, zOut, iOut, SQLITE_DYNAMIC); + break; + } + case JSONB_ARRAY: + case JSONB_OBJECT: { + if( eMode==0 ){ + if( (SQLITE_PTR_TO_INT(sqlite3_user_data(pCtx)) & JSON_BLOB)!=0 ){ + eMode = 2; + }else{ + eMode = 1; + } + } + if( eMode==2 ){ + sqlite3_result_blob(pCtx, &pParse->aBlob[i], sz+n, SQLITE_TRANSIENT); + }else{ + jsonReturnTextJsonFromBlob(pCtx, &pParse->aBlob[i], sz+n); + } + break; + } + default: { + goto returnfromblob_malformed; + } + } + return; + +returnfromblob_oom: + sqlite3_result_error_nomem(pCtx); + return; + +returnfromblob_malformed: + sqlite3_result_error(pCtx, "malformed JSON", -1); + return; +} + +/* +** pArg is a function argument that might be an SQL value or a JSON +** value. Figure out what it is and encode it as a JSONB blob. +** Return the results in pParse. +** +** pParse is uninitialized upon entry. This routine will handle the +** initialization of pParse. The result will be contained in +** pParse->aBlob and pParse->nBlob. pParse->aBlob might be dynamically +** allocated (if pParse->nBlobAlloc is greater than zero) in which case +** the caller is responsible for freeing the space allocated to pParse->aBlob +** when it has finished with it. Or pParse->aBlob might be a static string +** or a value obtained from sqlite3_value_blob(pArg). +** +** If the argument is a BLOB that is clearly not a JSONB, then this +** function might set an error message in ctx and return non-zero. +** It might also set an error message and return non-zero on an OOM error. +*/ +static int jsonFunctionArgToBlob( + sqlite3_context *ctx, + sqlite3_value *pArg, + JsonParse *pParse +){ + int eType = sqlite3_value_type(pArg); + static u8 aNull[] = { 0x00 }; + memset(pParse, 0, sizeof(pParse[0])); + pParse->db = sqlite3_context_db_handle(ctx); + switch( eType ){ + default: { + pParse->aBlob = aNull; + pParse->nBlob = 1; + return 0; + } + case SQLITE_BLOB: { + if( !jsonArgIsJsonb(pArg, pParse) ){ + sqlite3_result_error(ctx, "JSON cannot hold BLOB values", -1); + return 1; + } + break; + } + case SQLITE_TEXT: { + const char *zJson = (const char*)sqlite3_value_text(pArg); + int nJson = sqlite3_value_bytes(pArg); + if( zJson==0 ) return 1; + if( sqlite3_value_subtype(pArg)==JSON_SUBTYPE ){ + pParse->zJson = (char*)zJson; + pParse->nJson = nJson; + if( jsonConvertTextToBlob(pParse, ctx) ){ + sqlite3_result_error(ctx, "malformed JSON", -1); + sqlite3DbFree(pParse->db, pParse->aBlob); + memset(pParse, 0, sizeof(pParse[0])); + return 1; + } + }else{ + jsonBlobAppendNode(pParse, JSONB_TEXTRAW, nJson, zJson); + } + break; + } + case SQLITE_FLOAT: { + double r = sqlite3_value_double(pArg); + if( NEVER(sqlite3IsNaN(r)) ){ + jsonBlobAppendNode(pParse, JSONB_NULL, 0, 0); + }else{ + int n = sqlite3_value_bytes(pArg); + const char *z = (const char*)sqlite3_value_text(pArg); + if( z==0 ) return 1; + if( z[0]=='I' ){ + jsonBlobAppendNode(pParse, JSONB_FLOAT, 5, "9e999"); + }else if( z[0]=='-' && z[1]=='I' ){ + jsonBlobAppendNode(pParse, JSONB_FLOAT, 6, "-9e999"); + }else{ + jsonBlobAppendNode(pParse, JSONB_FLOAT, n, z); + } + } + break; + } + case SQLITE_INTEGER: { + int n = sqlite3_value_bytes(pArg); + const char *z = (const char*)sqlite3_value_text(pArg); + if( z==0 ) return 1; + jsonBlobAppendNode(pParse, JSONB_INT, n, z); + break; + } + } + if( pParse->oom ){ + sqlite3_result_error_nomem(ctx); + return 1; + }else{ + return 0; + } +} + +/* +** Generate a bad path error. +** +** If ctx is not NULL then push the error message into ctx and return NULL. +** If ctx is NULL, then return the text of the error message. +*/ +static char *jsonBadPathError( + sqlite3_context *ctx, /* The function call containing the error */ + const char *zPath /* The path with the problem */ +){ + char *zMsg = sqlite3_mprintf("bad JSON path: %Q", zPath); + if( ctx==0 ) return zMsg; + if( zMsg ){ + sqlite3_result_error(ctx, zMsg, -1); + sqlite3_free(zMsg); + }else{ + sqlite3_result_error_nomem(ctx); + } + return 0; +} + +/* argv[0] is a BLOB that seems likely to be a JSONB. Subsequent +** arguments come in pairs where each pair contains a JSON path and +** content to insert or set at that patch. Do the updates +** and return the result. +** +** The specific operation is determined by eEdit, which can be one +** of JEDIT_INS, JEDIT_REPL, or JEDIT_SET. +*/ +static void jsonInsertIntoBlob( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv, + int eEdit /* JEDIT_INS, JEDIT_REPL, or JEDIT_SET */ +){ + int i; + u32 rc = 0; + const char *zPath = 0; + int flgs; + JsonParse *p; + JsonParse ax; + + assert( (argc&1)==1 ); + flgs = argc==1 ? 0 : JSON_EDITABLE; + p = jsonParseFuncArg(ctx, argv[0], flgs); + if( p==0 ) return; + for(i=1; inBlob, ax.aBlob, ax.nBlob); + } + rc = 0; + }else{ + p->eEdit = eEdit; + p->nIns = ax.nBlob; + p->aIns = ax.aBlob; + p->delta = 0; + rc = jsonLookupStep(p, 0, zPath+1, 0); + } + jsonParseReset(&ax); + if( rc==JSON_LOOKUP_NOTFOUND ) continue; + if( JSON_LOOKUP_ISERROR(rc) ) goto jsonInsertIntoBlob_patherror; + } + jsonReturnParse(ctx, p); + jsonParseFree(p); + return; + +jsonInsertIntoBlob_patherror: + jsonParseFree(p); + if( rc==JSON_LOOKUP_ERROR ){ + sqlite3_result_error(ctx, "malformed JSON", -1); + }else{ + jsonBadPathError(ctx, zPath); + } + return; +} + +/* +** If pArg is a blob that seems like a JSONB blob, then initialize +** p to point to that JSONB and return TRUE. If pArg does not seem like +** a JSONB blob, then return FALSE. +** +** For small BLOBs (having no more than 7 bytes of payload) a full +** validity check is done. So for small BLOBs this routine only returns +** true if the value is guaranteed to be a valid JSONB. For larger BLOBs +** (8 byte or more of payload) only the size of the outermost element is +** checked to verify that the BLOB is superficially valid JSONB. +** +** A full JSONB validation is done on smaller BLOBs because those BLOBs might +** also be text JSON that has been incorrectly cast into a BLOB. +** (See tag-20240123-a and https://sqlite.org/forum/forumpost/012136abd5) +** If the BLOB is 9 bytes are larger, then it is not possible for the +** superficial size check done here to pass if the input is really text +** JSON so we do not need to look deeper in that case. +** +** Why we only need to do full JSONB validation for smaller BLOBs: +** +** The first byte of valid JSON text must be one of: '{', '[', '"', ' ', '\n', +** '\r', '\t', '-', or a digit '0' through '9'. Of these, only a subset +** can also be the first byte of JSONB: '{', '[', and digits '3' +** through '9'. In every one of those cases, the payload size is 7 bytes +** or less. So if we do full JSONB validation for every BLOB where the +** payload is less than 7 bytes, we will never get a false positive for +** JSONB on an input that is really text JSON. +*/ +static int jsonArgIsJsonb(sqlite3_value *pArg, JsonParse *p){ + u32 n, sz = 0; + u8 c; + if( sqlite3_value_type(pArg)!=SQLITE_BLOB ) return 0; + p->aBlob = (u8*)sqlite3_value_blob(pArg); + p->nBlob = (u32)sqlite3_value_bytes(pArg); + if( p->nBlob>0 + && ALWAYS(p->aBlob!=0) + && ((c = p->aBlob[0]) & 0x0f)<=JSONB_OBJECT + && (n = jsonbPayloadSize(p, 0, &sz))>0 + && sz+n==p->nBlob + && ((c & 0x0f)>JSONB_FALSE || sz==0) + && (sz>7 + || (c!=0x7b && c!=0x5b && !sqlite3Isdigit(c)) + || jsonbValidityCheck(p, 0, p->nBlob, 1)==0) + ){ + return 1; + } + p->aBlob = 0; + p->nBlob = 0; + return 0; +} + +/* +** Generate a JsonParse object, containing valid JSONB in aBlob and nBlob, +** from the SQL function argument pArg. Return a pointer to the new +** JsonParse object. +** +** Ownership of the new JsonParse object is passed to the caller. The +** caller should invoke jsonParseFree() on the return value when it +** has finished using it. +** +** If any errors are detected, an appropriate error messages is set +** using sqlite3_result_error() or the equivalent and this routine +** returns NULL. This routine also returns NULL if the pArg argument +** is an SQL NULL value, but no error message is set in that case. This +** is so that SQL functions that are given NULL arguments will return +** a NULL value. +*/ +static JsonParse *jsonParseFuncArg( + sqlite3_context *ctx, + sqlite3_value *pArg, + u32 flgs +){ + int eType; /* Datatype of pArg */ + JsonParse *p = 0; /* Value to be returned */ + JsonParse *pFromCache = 0; /* Value taken from cache */ + sqlite3 *db; /* The database connection */ + + assert( ctx!=0 ); + eType = sqlite3_value_type(pArg); + if( eType==SQLITE_NULL ){ + return 0; + } + pFromCache = jsonCacheSearch(ctx, pArg); + if( pFromCache ){ + pFromCache->nJPRef++; + if( (flgs & JSON_EDITABLE)==0 ){ + return pFromCache; + } + } + db = sqlite3_context_db_handle(ctx); +rebuild_from_cache: + p = sqlite3DbMallocZero(db, sizeof(*p)); + if( p==0 ) goto json_pfa_oom; + memset(p, 0, sizeof(*p)); + p->db = db; + p->nJPRef = 1; + if( pFromCache!=0 ){ + u32 nBlob = pFromCache->nBlob; + p->aBlob = sqlite3DbMallocRaw(db, nBlob); + if( p->aBlob==0 ) goto json_pfa_oom; + memcpy(p->aBlob, pFromCache->aBlob, nBlob); + p->nBlobAlloc = p->nBlob = nBlob; + p->hasNonstd = pFromCache->hasNonstd; + jsonParseFree(pFromCache); + return p; + } + if( eType==SQLITE_BLOB ){ + if( jsonArgIsJsonb(pArg,p) ){ + if( (flgs & JSON_EDITABLE)!=0 && jsonBlobMakeEditable(p, 0)==0 ){ + goto json_pfa_oom; + } + return p; + } + /* If the blob is not valid JSONB, fall through into trying to cast + ** the blob into text which is then interpreted as JSON. (tag-20240123-a) + ** + ** This goes against all historical documentation about how the SQLite + ** JSON functions were suppose to work. From the beginning, blob was + ** reserved for expansion and a blob value should have raised an error. + ** But it did not, due to a bug. And many applications came to depend + ** upon this buggy behavior, especially when using the CLI and reading + ** JSON text using readfile(), which returns a blob. For this reason + ** we will continue to support the bug moving forward. + ** See for example https://sqlite.org/forum/forumpost/012136abd5292b8d + */ + } + p->zJson = (char*)sqlite3_value_text(pArg); + p->nJson = sqlite3_value_bytes(pArg); + if( db->mallocFailed ) goto json_pfa_oom; + if( p->nJson==0 ) goto json_pfa_malformed; + assert( p->zJson!=0 ); + if( jsonConvertTextToBlob(p, (flgs & JSON_KEEPERROR) ? 0 : ctx) ){ + if( flgs & JSON_KEEPERROR ){ + p->nErr = 1; + return p; + }else{ + jsonParseFree(p); + return 0; + } + }else{ + int isRCStr = sqlite3ValueIsOfClass(pArg, sqlite3RCStrUnref); + int rc; + if( !isRCStr ){ + char *zNew = sqlite3RCStrNew( p->nJson ); + if( zNew==0 ) goto json_pfa_oom; + memcpy(zNew, p->zJson, p->nJson); + p->zJson = zNew; + p->zJson[p->nJson] = 0; + }else{ + sqlite3RCStrRef(p->zJson); + } + p->bJsonIsRCStr = 1; + rc = jsonCacheInsert(ctx, p); + if( rc==SQLITE_NOMEM ) goto json_pfa_oom; + if( flgs & JSON_EDITABLE ){ + pFromCache = p; + p = 0; + goto rebuild_from_cache; + } + } + return p; + +json_pfa_malformed: + if( flgs & JSON_KEEPERROR ){ + p->nErr = 1; + return p; + }else{ + jsonParseFree(p); + sqlite3_result_error(ctx, "malformed JSON", -1); + return 0; + } + +json_pfa_oom: + jsonParseFree(pFromCache); + jsonParseFree(p); + sqlite3_result_error_nomem(ctx); + return 0; +} + +/* +** Make the return value of a JSON function either the raw JSONB blob +** or make it JSON text, depending on whether the JSON_BLOB flag is +** set on the function. +*/ +static void jsonReturnParse( + sqlite3_context *ctx, + JsonParse *p +){ + int flgs; + if( p->oom ){ + sqlite3_result_error_nomem(ctx); + return; + } + flgs = SQLITE_PTR_TO_INT(sqlite3_user_data(ctx)); + if( flgs & JSON_BLOB ){ + if( p->nBlobAlloc>0 && !p->bReadOnly ){ + sqlite3_result_blob(ctx, p->aBlob, p->nBlob, SQLITE_DYNAMIC); + p->nBlobAlloc = 0; + }else{ + sqlite3_result_blob(ctx, p->aBlob, p->nBlob, SQLITE_TRANSIENT); + } + }else{ + JsonString s; + jsonStringInit(&s, ctx); + p->delta = 0; + jsonTranslateBlobToText(p, 0, &s); + jsonReturnString(&s, p, ctx); + sqlite3_result_subtype(ctx, JSON_SUBTYPE); + } +} + +/**************************************************************************** +** SQL functions used for testing and debugging +****************************************************************************/ + +#if SQLITE_DEBUG +/* +** Decode JSONB bytes in aBlob[] starting at iStart through but not +** including iEnd. Indent the +** content by nIndent spaces. +*/ +static void jsonDebugPrintBlob( + JsonParse *pParse, /* JSON content */ + u32 iStart, /* Start rendering here */ + u32 iEnd, /* Do not render this byte or any byte after this one */ + int nIndent, /* Indent by this many spaces */ + sqlite3_str *pOut /* Generate output into this sqlite3_str object */ +){ + while( iStartaBlob[iStart] & 0x0f; + u32 savedNBlob = pParse->nBlob; + sqlite3_str_appendf(pOut, "%5d:%*s", iStart, nIndent, ""); + if( pParse->nBlobAlloc>pParse->nBlob ){ + pParse->nBlob = pParse->nBlobAlloc; + } + nn = n = jsonbPayloadSize(pParse, iStart, &sz); + if( nn==0 ) nn = 1; + if( sz>0 && xaBlob[iStart+i]); + } + if( n==0 ){ + sqlite3_str_appendf(pOut, " ERROR invalid node size\n"); + iStart = n==0 ? iStart+1 : iEnd; + continue; + } + pParse->nBlob = savedNBlob; + if( iStart+n+sz>iEnd ){ + iEnd = iStart+n+sz; + if( iEnd>pParse->nBlob ){ + if( pParse->nBlobAlloc>0 && iEnd>pParse->nBlobAlloc ){ + iEnd = pParse->nBlobAlloc; + }else{ + iEnd = pParse->nBlob; + } + } + } + sqlite3_str_appendall(pOut," <-- "); + switch( x ){ + case JSONB_NULL: sqlite3_str_appendall(pOut,"null"); break; + case JSONB_TRUE: sqlite3_str_appendall(pOut,"true"); break; + case JSONB_FALSE: sqlite3_str_appendall(pOut,"false"); break; + case JSONB_INT: sqlite3_str_appendall(pOut,"int"); break; + case JSONB_INT5: sqlite3_str_appendall(pOut,"int5"); break; + case JSONB_FLOAT: sqlite3_str_appendall(pOut,"float"); break; + case JSONB_FLOAT5: sqlite3_str_appendall(pOut,"float5"); break; + case JSONB_TEXT: sqlite3_str_appendall(pOut,"text"); break; + case JSONB_TEXTJ: sqlite3_str_appendall(pOut,"textj"); break; + case JSONB_TEXT5: sqlite3_str_appendall(pOut,"text5"); break; + case JSONB_TEXTRAW: sqlite3_str_appendall(pOut,"textraw"); break; + case JSONB_ARRAY: { + sqlite3_str_appendf(pOut,"array, %u bytes\n", sz); + jsonDebugPrintBlob(pParse, iStart+n, iStart+n+sz, nIndent+2, pOut); + showContent = 0; + break; + } + case JSONB_OBJECT: { + sqlite3_str_appendf(pOut, "object, %u bytes\n", sz); + jsonDebugPrintBlob(pParse, iStart+n, iStart+n+sz, nIndent+2, pOut); + showContent = 0; + break; + } + default: { + sqlite3_str_appendall(pOut, "ERROR: unknown node type\n"); + showContent = 0; + break; + } + } + if( showContent ){ + if( sz==0 && x<=JSONB_FALSE ){ + sqlite3_str_append(pOut, "\n", 1); + }else{ + u32 j; + sqlite3_str_appendall(pOut, ": \""); + for(j=iStart+n; jaBlob[j]; + if( c<0x20 || c>=0x7f ) c = '.'; + sqlite3_str_append(pOut, (char*)&c, 1); + } + sqlite3_str_append(pOut, "\"\n", 2); + } + } + iStart += n + sz; + } +} +static void jsonShowParse(JsonParse *pParse){ + sqlite3_str out; + char zBuf[1000]; + if( pParse==0 ){ + printf("NULL pointer\n"); + return; + }else{ + printf("nBlobAlloc = %u\n", pParse->nBlobAlloc); + printf("nBlob = %u\n", pParse->nBlob); + printf("delta = %d\n", pParse->delta); + if( pParse->nBlob==0 ) return; + printf("content (bytes 0..%u):\n", pParse->nBlob-1); + } + sqlite3StrAccumInit(&out, 0, zBuf, sizeof(zBuf), 1000000); + jsonDebugPrintBlob(pParse, 0, pParse->nBlob, 0, &out); + printf("%s", sqlite3_str_value(&out)); + sqlite3_str_reset(&out); +} +#endif /* SQLITE_DEBUG */ + +#ifdef SQLITE_DEBUG +/* +** SQL function: json_parse(JSON) +** +** Parse JSON using jsonParseFuncArg(). Return text that is a +** human-readable dump of the binary JSONB for the input parameter. +*/ +static void jsonParseFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonParse *p; /* The parse */ + sqlite3_str out; + + assert( argc>=1 ); + sqlite3StrAccumInit(&out, 0, 0, 0, 1000000); + p = jsonParseFuncArg(ctx, argv[0], 0); + if( p==0 ) return; + if( argc==1 ){ + jsonDebugPrintBlob(p, 0, p->nBlob, 0, &out); + sqlite3_result_text64(ctx,out.zText,out.nChar,SQLITE_TRANSIENT,SQLITE_UTF8); + }else{ + jsonShowParse(p); + } + jsonParseFree(p); + sqlite3_str_reset(&out); +} +#endif /* SQLITE_DEBUG */ + +/**************************************************************************** +** Scalar SQL function implementations +****************************************************************************/ + +/* +** Implementation of the json_quote(VALUE) function. Return a JSON value +** corresponding to the SQL value input. Mostly this means putting +** double-quotes around strings and returning the unquoted string "null" +** when given a NULL input. +*/ +static void jsonQuoteFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonString jx; + UNUSED_PARAMETER(argc); + + jsonStringInit(&jx, ctx); + jsonAppendSqlValue(&jx, argv[0]); + jsonReturnString(&jx, 0, 0); + sqlite3_result_subtype(ctx, JSON_SUBTYPE); +} + +/* +** Implementation of the json_array(VALUE,...) function. Return a JSON +** array that contains all values given in arguments. Or if any argument +** is a BLOB, throw an error. +*/ +static void jsonArrayFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + int i; + JsonString jx; + + jsonStringInit(&jx, ctx); + jsonAppendChar(&jx, '['); + for(i=0; iaBlob[i] & 0x0f)==JSONB_ARRAY ){ + cnt = jsonbArrayCount(p, i); + } + if( !eErr ) sqlite3_result_int64(ctx, cnt); + jsonParseFree(p); +} + +/* True if the string is all alphanumerics and underscores */ +static int jsonAllAlphanum(const char *z, int n){ + int i; + for(i=0; i"(JSON,PATH) +** "->>"(JSON,PATH) +** +** Return the element described by PATH. Return NULL if that PATH element +** is not found. +** +** If JSON_JSON is set or if more that one PATH argument is supplied then +** always return a JSON representation of the result. If JSON_SQL is set, +** then always return an SQL representation of the result. If neither flag +** is present and argc==2, then return JSON for objects and arrays and SQL +** for all other values. +** +** When multiple PATH arguments are supplied, the result is a JSON array +** containing the result of each PATH. +** +** Abbreviated JSON path expressions are allows if JSON_ABPATH, for +** compatibility with PG. +*/ +static void jsonExtractFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonParse *p = 0; /* The parse */ + int flags; /* Flags associated with the function */ + int i; /* Loop counter */ + JsonString jx; /* String for array result */ + + if( argc<2 ) return; + p = jsonParseFuncArg(ctx, argv[0], 0); + if( p==0 ) return; + flags = SQLITE_PTR_TO_INT(sqlite3_user_data(ctx)); + jsonStringInit(&jx, ctx); + if( argc>2 ){ + jsonAppendChar(&jx, '['); + } + for(i=1; i and ->> operators accept abbreviated PATH arguments. This + ** is mostly for compatibility with PostgreSQL, but also for + ** convenience. + ** + ** NUMBER ==> $[NUMBER] // PG compatible + ** LABEL ==> $.LABEL // PG compatible + ** [NUMBER] ==> $[NUMBER] // Not PG. Purely for convenience + ** + ** Updated 2024-05-27: If the NUMBER is negative, then PG counts from + ** the right of the array. Hence for negative NUMBER: + ** + ** NUMBER ==> $[#NUMBER] // PG compatible + */ + jsonStringInit(&jx, ctx); + if( sqlite3_value_type(argv[i])==SQLITE_INTEGER ){ + jsonAppendRawNZ(&jx, "[", 1); + if( zPath[0]=='-' ) jsonAppendRawNZ(&jx,"#",1); + jsonAppendRaw(&jx, zPath, nPath); + jsonAppendRawNZ(&jx, "]", 2); + }else if( jsonAllAlphanum(zPath, nPath) ){ + jsonAppendRawNZ(&jx, ".", 1); + jsonAppendRaw(&jx, zPath, nPath); + }else if( zPath[0]=='[' && nPath>=3 && zPath[nPath-1]==']' ){ + jsonAppendRaw(&jx, zPath, nPath); + }else{ + jsonAppendRawNZ(&jx, ".\"", 2); + jsonAppendRaw(&jx, zPath, nPath); + jsonAppendRawNZ(&jx, "\"", 1); + } + jsonStringTerminate(&jx); + j = jsonLookupStep(p, 0, jx.zBuf, 0); + jsonStringReset(&jx); + }else{ + jsonBadPathError(ctx, zPath); + goto json_extract_error; + } + if( jnBlob ){ + if( argc==2 ){ + if( flags & JSON_JSON ){ + jsonStringInit(&jx, ctx); + jsonTranslateBlobToText(p, j, &jx); + jsonReturnString(&jx, 0, 0); + jsonStringReset(&jx); + assert( (flags & JSON_BLOB)==0 ); + sqlite3_result_subtype(ctx, JSON_SUBTYPE); + }else{ + jsonReturnFromBlob(p, j, ctx, 0); + if( (flags & (JSON_SQL|JSON_BLOB))==0 + && (p->aBlob[j]&0x0f)>=JSONB_ARRAY + ){ + sqlite3_result_subtype(ctx, JSON_SUBTYPE); + } + } + }else{ + jsonAppendSeparator(&jx); + jsonTranslateBlobToText(p, j, &jx); + } + }else if( j==JSON_LOOKUP_NOTFOUND ){ + if( argc==2 ){ + goto json_extract_error; /* Return NULL if not found */ + }else{ + jsonAppendSeparator(&jx); + jsonAppendRawNZ(&jx, "null", 4); + } + }else if( j==JSON_LOOKUP_ERROR ){ + sqlite3_result_error(ctx, "malformed JSON", -1); + goto json_extract_error; + }else{ + jsonBadPathError(ctx, zPath); + goto json_extract_error; + } + } + if( argc>2 ){ + jsonAppendChar(&jx, ']'); + jsonReturnString(&jx, 0, 0); + if( (flags & JSON_BLOB)==0 ){ + sqlite3_result_subtype(ctx, JSON_SUBTYPE); + } + } +json_extract_error: + jsonStringReset(&jx); + jsonParseFree(p); + return; +} + +/* +** Return codes for jsonMergePatch() +*/ +#define JSON_MERGE_OK 0 /* Success */ +#define JSON_MERGE_BADTARGET 1 /* Malformed TARGET blob */ +#define JSON_MERGE_BADPATCH 2 /* Malformed PATCH blob */ +#define JSON_MERGE_OOM 3 /* Out-of-memory condition */ + +/* +** RFC-7396 MergePatch for two JSONB blobs. +** +** pTarget is the target. pPatch is the patch. The target is updated +** in place. The patch is read-only. +** +** The original RFC-7396 algorithm is this: +** +** define MergePatch(Target, Patch): +** if Patch is an Object: +** if Target is not an Object: +** Target = {} # Ignore the contents and set it to an empty Object +** for each Name/Value pair in Patch: +** if Value is null: +** if Name exists in Target: +** remove the Name/Value pair from Target +** else: +** Target[Name] = MergePatch(Target[Name], Value) +** return Target +** else: +** return Patch +** +** Here is an equivalent algorithm restructured to show the actual +** implementation: +** +** 01 define MergePatch(Target, Patch): +** 02 if Patch is not an Object: +** 03 return Patch +** 04 else: // if Patch is an Object +** 05 if Target is not an Object: +** 06 Target = {} +** 07 for each Name/Value pair in Patch: +** 08 if Name exists in Target: +** 09 if Value is null: +** 10 remove the Name/Value pair from Target +** 11 else +** 12 Target[name] = MergePatch(Target[Name], Value) +** 13 else if Value is not NULL: +** 14 if Value is not an Object: +** 15 Target[name] = Value +** 16 else: +** 17 Target[name] = MergePatch('{}',value) +** 18 return Target +** | +** ^---- Line numbers referenced in comments in the implementation +*/ +static int jsonMergePatch( + JsonParse *pTarget, /* The JSON parser that contains the TARGET */ + u32 iTarget, /* Index of TARGET in pTarget->aBlob[] */ + const JsonParse *pPatch, /* The PATCH */ + u32 iPatch /* Index of PATCH in pPatch->aBlob[] */ +){ + u8 x; /* Type of a single node */ + u32 n, sz=0; /* Return values from jsonbPayloadSize() */ + u32 iTCursor; /* Cursor position while scanning the target object */ + u32 iTStart; /* First label in the target object */ + u32 iTEndBE; /* Original first byte past end of target, before edit */ + u32 iTEnd; /* Current first byte past end of target */ + u8 eTLabel; /* Node type of the target label */ + u32 iTLabel = 0; /* Index of the label */ + u32 nTLabel = 0; /* Header size in bytes for the target label */ + u32 szTLabel = 0; /* Size of the target label payload */ + u32 iTValue = 0; /* Index of the target value */ + u32 nTValue = 0; /* Header size of the target value */ + u32 szTValue = 0; /* Payload size for the target value */ + + u32 iPCursor; /* Cursor position while scanning the patch */ + u32 iPEnd; /* First byte past the end of the patch */ + u8 ePLabel; /* Node type of the patch label */ + u32 iPLabel; /* Start of patch label */ + u32 nPLabel; /* Size of header on the patch label */ + u32 szPLabel; /* Payload size of the patch label */ + u32 iPValue; /* Start of patch value */ + u32 nPValue; /* Header size for the patch value */ + u32 szPValue; /* Payload size of the patch value */ + + assert( iTarget>=0 && iTargetnBlob ); + assert( iPatch>=0 && iPatchnBlob ); + x = pPatch->aBlob[iPatch] & 0x0f; + if( x!=JSONB_OBJECT ){ /* Algorithm line 02 */ + u32 szPatch; /* Total size of the patch, header+payload */ + u32 szTarget; /* Total size of the target, header+payload */ + n = jsonbPayloadSize(pPatch, iPatch, &sz); + szPatch = n+sz; + sz = 0; + n = jsonbPayloadSize(pTarget, iTarget, &sz); + szTarget = n+sz; + jsonBlobEdit(pTarget, iTarget, szTarget, pPatch->aBlob+iPatch, szPatch); + return pTarget->oom ? JSON_MERGE_OOM : JSON_MERGE_OK; /* Line 03 */ + } + x = pTarget->aBlob[iTarget] & 0x0f; + if( x!=JSONB_OBJECT ){ /* Algorithm line 05 */ + n = jsonbPayloadSize(pTarget, iTarget, &sz); + jsonBlobEdit(pTarget, iTarget+n, sz, 0, 0); + x = pTarget->aBlob[iTarget]; + pTarget->aBlob[iTarget] = (x & 0xf0) | JSONB_OBJECT; + } + n = jsonbPayloadSize(pPatch, iPatch, &sz); + if( NEVER(n==0) ) return JSON_MERGE_BADPATCH; + iPCursor = iPatch+n; + iPEnd = iPCursor+sz; + n = jsonbPayloadSize(pTarget, iTarget, &sz); + if( NEVER(n==0) ) return JSON_MERGE_BADTARGET; + iTStart = iTarget+n; + iTEndBE = iTStart+sz; + + while( iPCursoraBlob[iPCursor] & 0x0f; + if( ePLabelJSONB_TEXTRAW ){ + return JSON_MERGE_BADPATCH; + } + nPLabel = jsonbPayloadSize(pPatch, iPCursor, &szPLabel); + if( nPLabel==0 ) return JSON_MERGE_BADPATCH; + iPValue = iPCursor + nPLabel + szPLabel; + if( iPValue>=iPEnd ) return JSON_MERGE_BADPATCH; + nPValue = jsonbPayloadSize(pPatch, iPValue, &szPValue); + if( nPValue==0 ) return JSON_MERGE_BADPATCH; + iPCursor = iPValue + nPValue + szPValue; + if( iPCursor>iPEnd ) return JSON_MERGE_BADPATCH; + + iTCursor = iTStart; + iTEnd = iTEndBE + pTarget->delta; + while( iTCursoraBlob[iTCursor] & 0x0f; + if( eTLabelJSONB_TEXTRAW ){ + return JSON_MERGE_BADTARGET; + } + nTLabel = jsonbPayloadSize(pTarget, iTCursor, &szTLabel); + if( nTLabel==0 ) return JSON_MERGE_BADTARGET; + iTValue = iTLabel + nTLabel + szTLabel; + if( iTValue>=iTEnd ) return JSON_MERGE_BADTARGET; + nTValue = jsonbPayloadSize(pTarget, iTValue, &szTValue); + if( nTValue==0 ) return JSON_MERGE_BADTARGET; + if( iTValue + nTValue + szTValue > iTEnd ) return JSON_MERGE_BADTARGET; + isEqual = jsonLabelCompare( + (const char*)&pPatch->aBlob[iPLabel+nPLabel], + szPLabel, + (ePLabel==JSONB_TEXT || ePLabel==JSONB_TEXTRAW), + (const char*)&pTarget->aBlob[iTLabel+nTLabel], + szTLabel, + (eTLabel==JSONB_TEXT || eTLabel==JSONB_TEXTRAW)); + if( isEqual ) break; + iTCursor = iTValue + nTValue + szTValue; + } + x = pPatch->aBlob[iPValue] & 0x0f; + if( iTCursoroom) ) return JSON_MERGE_OOM; + }else{ + /* Algorithm line 12 */ + int rc, savedDelta = pTarget->delta; + pTarget->delta = 0; + rc = jsonMergePatch(pTarget, iTValue, pPatch, iPValue); + if( rc ) return rc; + pTarget->delta += savedDelta; + } + }else if( x>0 ){ /* Algorithm line 13 */ + /* No match and patch value is not NULL */ + u32 szNew = szPLabel+nPLabel; + if( (pPatch->aBlob[iPValue] & 0x0f)!=JSONB_OBJECT ){ /* Line 14 */ + jsonBlobEdit(pTarget, iTEnd, 0, 0, szPValue+nPValue+szNew); + if( pTarget->oom ) return JSON_MERGE_OOM; + memcpy(&pTarget->aBlob[iTEnd], &pPatch->aBlob[iPLabel], szNew); + memcpy(&pTarget->aBlob[iTEnd+szNew], + &pPatch->aBlob[iPValue], szPValue+nPValue); + }else{ + int rc, savedDelta; + jsonBlobEdit(pTarget, iTEnd, 0, 0, szNew+1); + if( pTarget->oom ) return JSON_MERGE_OOM; + memcpy(&pTarget->aBlob[iTEnd], &pPatch->aBlob[iPLabel], szNew); + pTarget->aBlob[iTEnd+szNew] = 0x00; + savedDelta = pTarget->delta; + pTarget->delta = 0; + rc = jsonMergePatch(pTarget, iTEnd+szNew,pPatch,iPValue); + if( rc ) return rc; + pTarget->delta += savedDelta; + } + } + } + if( pTarget->delta ) jsonAfterEditSizeAdjust(pTarget, iTarget); + return pTarget->oom ? JSON_MERGE_OOM : JSON_MERGE_OK; +} + + +/* +** Implementation of the json_mergepatch(JSON1,JSON2) function. Return a JSON +** object that is the result of running the RFC 7396 MergePatch() algorithm +** on the two arguments. +*/ +static void jsonPatchFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonParse *pTarget; /* The TARGET */ + JsonParse *pPatch; /* The PATCH */ + int rc; /* Result code */ + + UNUSED_PARAMETER(argc); + assert( argc==2 ); + pTarget = jsonParseFuncArg(ctx, argv[0], JSON_EDITABLE); + if( pTarget==0 ) return; + pPatch = jsonParseFuncArg(ctx, argv[1], 0); + if( pPatch ){ + rc = jsonMergePatch(pTarget, 0, pPatch, 0); + if( rc==JSON_MERGE_OK ){ + jsonReturnParse(ctx, pTarget); + }else if( rc==JSON_MERGE_OOM ){ + sqlite3_result_error_nomem(ctx); + }else{ + sqlite3_result_error(ctx, "malformed JSON", -1); + } + jsonParseFree(pPatch); + } + jsonParseFree(pTarget); +} + + +/* +** Implementation of the json_object(NAME,VALUE,...) function. Return a JSON +** object that contains all name/value given in arguments. Or if any name +** is not a string or if any value is a BLOB, throw an error. +*/ +static void jsonObjectFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + int i; + JsonString jx; + const char *z; + u32 n; + + if( argc&1 ){ + sqlite3_result_error(ctx, "json_object() requires an even number " + "of arguments", -1); + return; + } + jsonStringInit(&jx, ctx); + jsonAppendChar(&jx, '{'); + for(i=0; i1 ? JSON_EDITABLE : 0); + if( p==0 ) return; + for(i=1; ieEdit = JEDIT_DEL; + p->delta = 0; + rc = jsonLookupStep(p, 0, zPath+1, 0); + if( JSON_LOOKUP_ISERROR(rc) ){ + if( rc==JSON_LOOKUP_NOTFOUND ){ + continue; /* No-op */ + }else if( rc==JSON_LOOKUP_PATHERROR ){ + jsonBadPathError(ctx, zPath); + }else{ + sqlite3_result_error(ctx, "malformed JSON", -1); + } + goto json_remove_done; + } + } + jsonReturnParse(ctx, p); + jsonParseFree(p); + return; + +json_remove_patherror: + jsonBadPathError(ctx, zPath); + +json_remove_done: + jsonParseFree(p); + return; +} + +/* +** json_replace(JSON, PATH, VALUE, ...) +** +** Replace the value at PATH with VALUE. If PATH does not already exist, +** this routine is a no-op. If JSON or PATH is malformed, throw an error. +*/ +static void jsonReplaceFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + if( argc<1 ) return; + if( (argc&1)==0 ) { + jsonWrongNumArgs(ctx, "replace"); + return; + } + jsonInsertIntoBlob(ctx, argc, argv, JEDIT_REPL); +} + + +/* +** json_set(JSON, PATH, VALUE, ...) +** +** Set the value at PATH to VALUE. Create the PATH if it does not already +** exist. Overwrite existing values that do exist. +** If JSON or PATH is malformed, throw an error. +** +** json_insert(JSON, PATH, VALUE, ...) +** +** Create PATH and initialize it to VALUE. If PATH already exists, this +** routine is a no-op. If JSON or PATH is malformed, throw an error. +*/ +static void jsonSetFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + + int flags = SQLITE_PTR_TO_INT(sqlite3_user_data(ctx)); + int bIsSet = (flags&JSON_ISSET)!=0; + + if( argc<1 ) return; + if( (argc&1)==0 ) { + jsonWrongNumArgs(ctx, bIsSet ? "set" : "insert"); + return; + } + jsonInsertIntoBlob(ctx, argc, argv, bIsSet ? JEDIT_SET : JEDIT_INS); +} + +/* +** json_type(JSON) +** json_type(JSON, PATH) +** +** Return the top-level "type" of a JSON string. json_type() raises an +** error if either the JSON or PATH inputs are not well-formed. +*/ +static void jsonTypeFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonParse *p; /* The parse */ + const char *zPath = 0; + u32 i; + + p = jsonParseFuncArg(ctx, argv[0], 0); + if( p==0 ) return; + if( argc==2 ){ + zPath = (const char*)sqlite3_value_text(argv[1]); + if( zPath==0 ) goto json_type_done; + if( zPath[0]!='$' ){ + jsonBadPathError(ctx, zPath); + goto json_type_done; + } + i = jsonLookupStep(p, 0, zPath+1, 0); + if( JSON_LOOKUP_ISERROR(i) ){ + if( i==JSON_LOOKUP_NOTFOUND ){ + /* no-op */ + }else if( i==JSON_LOOKUP_PATHERROR ){ + jsonBadPathError(ctx, zPath); + }else{ + sqlite3_result_error(ctx, "malformed JSON", -1); + } + goto json_type_done; + } + }else{ + i = 0; + } + sqlite3_result_text(ctx, jsonbType[p->aBlob[i]&0x0f], -1, SQLITE_STATIC); +json_type_done: + jsonParseFree(p); +} + +/* +** json_pretty(JSON) +** json_pretty(JSON, INDENT) +** +** Return text that is a pretty-printed rendering of the input JSON. +** If the argument is not valid JSON, return NULL. +** +** The INDENT argument is text that is used for indentation. If omitted, +** it defaults to four spaces (the same as PostgreSQL). +*/ +static void jsonPrettyFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonString s; /* The output string */ + JsonPretty x; /* Pretty printing context */ + + memset(&x, 0, sizeof(x)); + x.pParse = jsonParseFuncArg(ctx, argv[0], 0); + if( x.pParse==0 ) return; + x.pOut = &s; + jsonStringInit(&s, ctx); + if( argc==1 || (x.zIndent = (const char*)sqlite3_value_text(argv[1]))==0 ){ + x.zIndent = " "; + x.szIndent = 4; + }else{ + x.szIndent = (u32)strlen(x.zIndent); + } + jsonTranslateBlobToPrettyText(&x, 0); + jsonReturnString(&s, 0, 0); + jsonParseFree(x.pParse); +} + +/* +** json_valid(JSON) +** json_valid(JSON, FLAGS) +** +** Check the JSON argument to see if it is well-formed. The FLAGS argument +** encodes the various constraints on what is meant by "well-formed": +** +** 0x01 Canonical RFC-8259 JSON text +** 0x02 JSON text with optional JSON-5 extensions +** 0x04 Superficially appears to be JSONB +** 0x08 Strictly well-formed JSONB +** +** If the FLAGS argument is omitted, it defaults to 1. Useful values for +** FLAGS include: +** +** 1 Strict canonical JSON text +** 2 JSON text perhaps with JSON-5 extensions +** 4 Superficially appears to be JSONB +** 5 Canonical JSON text or superficial JSONB +** 6 JSON-5 text or superficial JSONB +** 8 Strict JSONB +** 9 Canonical JSON text or strict JSONB +** 10 JSON-5 text or strict JSONB +** +** Other flag combinations are redundant. For example, every canonical +** JSON text is also well-formed JSON-5 text, so FLAG values 2 and 3 +** are the same. Similarly, any input that passes a strict JSONB validation +** will also pass the superficial validation so 12 through 15 are the same +** as 8 through 11 respectively. +** +** This routine runs in linear time to validate text and when doing strict +** JSONB validation. Superficial JSONB validation is constant time, +** assuming the BLOB is already in memory. The performance advantage +** of superficial JSONB validation is why that option is provided. +** Application developers can choose to do fast superficial validation or +** slower strict validation, according to their specific needs. +** +** Only the lower four bits of the FLAGS argument are currently used. +** Higher bits are reserved for future expansion. To facilitate +** compatibility, the current implementation raises an error if any bit +** in FLAGS is set other than the lower four bits. +** +** The original circa 2015 implementation of the JSON routines in +** SQLite only supported canonical RFC-8259 JSON text and the json_valid() +** function only accepted one argument. That is why the default value +** for the FLAGS argument is 1, since FLAGS=1 causes this routine to only +** recognize canonical RFC-8259 JSON text as valid. The extra FLAGS +** argument was added when the JSON routines were extended to support +** JSON5-like extensions and binary JSONB stored in BLOBs. +** +** Return Values: +** +** * Raise an error if FLAGS is outside the range of 1 to 15. +** * Return NULL if the input is NULL +** * Return 1 if the input is well-formed. +** * Return 0 if the input is not well-formed. +*/ +static void jsonValidFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonParse *p; /* The parse */ + u8 flags = 1; + u8 res = 0; + if( argc==2 ){ + i64 f = sqlite3_value_int64(argv[1]); + if( f<1 || f>15 ){ + sqlite3_result_error(ctx, "FLAGS parameter to json_valid() must be" + " between 1 and 15", -1); + return; + } + flags = f & 0x0f; + } + switch( sqlite3_value_type(argv[0]) ){ + case SQLITE_NULL: { +#ifdef SQLITE_LEGACY_JSON_VALID + /* Incorrect legacy behavior was to return FALSE for a NULL input */ + sqlite3_result_int(ctx, 0); +#endif + return; + } + case SQLITE_BLOB: { + JsonParse py; + memset(&py, 0, sizeof(py)); + if( jsonArgIsJsonb(argv[0], &py) ){ + if( flags & 0x04 ){ + /* Superficial checking only - accomplished by the + ** jsonArgIsJsonb() call above. */ + res = 1; + }else if( flags & 0x08 ){ + /* Strict checking. Check by translating BLOB->TEXT->BLOB. If + ** no errors occur, call that a "strict check". */ + res = 0==jsonbValidityCheck(&py, 0, py.nBlob, 1); + } + break; + } + /* Fall through into interpreting the input as text. See note + ** above at tag-20240123-a. */ + /* no break */ deliberate_fall_through + } + default: { + JsonParse px; + if( (flags & 0x3)==0 ) break; + memset(&px, 0, sizeof(px)); + + p = jsonParseFuncArg(ctx, argv[0], JSON_KEEPERROR); + if( p ){ + if( p->oom ){ + sqlite3_result_error_nomem(ctx); + }else if( p->nErr ){ + /* no-op */ + }else if( (flags & 0x02)!=0 || p->hasNonstd==0 ){ + res = 1; + } + jsonParseFree(p); + }else{ + sqlite3_result_error_nomem(ctx); + } + break; + } + } + sqlite3_result_int(ctx, res); +} + +/* +** json_error_position(JSON) +** +** If the argument is NULL, return NULL +** +** If the argument is BLOB, do a full validity check and return non-zero +** if the check fails. The return value is the approximate 1-based offset +** to the byte of the element that contains the first error. +** +** Otherwise interpret the argument is TEXT (even if it is numeric) and +** return the 1-based character position for where the parser first recognized +** that the input was not valid JSON, or return 0 if the input text looks +** ok. JSON-5 extensions are accepted. +*/ +static void jsonErrorFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + i64 iErrPos = 0; /* Error position to be returned */ + JsonParse s; + + assert( argc==1 ); + UNUSED_PARAMETER(argc); + memset(&s, 0, sizeof(s)); + s.db = sqlite3_context_db_handle(ctx); + if( jsonArgIsJsonb(argv[0], &s) ){ + iErrPos = (i64)jsonbValidityCheck(&s, 0, s.nBlob, 1); + }else{ + s.zJson = (char*)sqlite3_value_text(argv[0]); + if( s.zJson==0 ) return; /* NULL input or OOM */ + s.nJson = sqlite3_value_bytes(argv[0]); + if( jsonConvertTextToBlob(&s,0) ){ + if( s.oom ){ + iErrPos = -1; + }else{ + /* Convert byte-offset s.iErr into a character offset */ + u32 k; + assert( s.zJson!=0 ); /* Because s.oom is false */ + for(k=0; kzBuf==0 ){ + jsonStringInit(pStr, ctx); + jsonAppendChar(pStr, '['); + }else if( pStr->nUsed>1 ){ + jsonAppendChar(pStr, ','); + } + pStr->pCtx = ctx; + jsonAppendSqlValue(pStr, argv[0]); + } +} +static void jsonArrayCompute(sqlite3_context *ctx, int isFinal){ + JsonString *pStr; + pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0); + if( pStr ){ + int flags; + pStr->pCtx = ctx; + jsonAppendChar(pStr, ']'); + flags = SQLITE_PTR_TO_INT(sqlite3_user_data(ctx)); + if( pStr->eErr ){ + jsonReturnString(pStr, 0, 0); + return; + }else if( flags & JSON_BLOB ){ + jsonReturnStringAsBlob(pStr); + if( isFinal ){ + if( !pStr->bStatic ) sqlite3RCStrUnref(pStr->zBuf); + }else{ + jsonStringTrimOneChar(pStr); + } + return; + }else if( isFinal ){ + sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, + pStr->bStatic ? SQLITE_TRANSIENT : + sqlite3RCStrUnref); + pStr->bStatic = 1; + }else{ + sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, SQLITE_TRANSIENT); + jsonStringTrimOneChar(pStr); + } + }else{ + sqlite3_result_text(ctx, "[]", 2, SQLITE_STATIC); + } + sqlite3_result_subtype(ctx, JSON_SUBTYPE); +} +static void jsonArrayValue(sqlite3_context *ctx){ + jsonArrayCompute(ctx, 0); +} +static void jsonArrayFinal(sqlite3_context *ctx){ + jsonArrayCompute(ctx, 1); +} + +#ifndef SQLITE_OMIT_WINDOWFUNC +/* +** This method works for both json_group_array() and json_group_object(). +** It works by removing the first element of the group by searching forward +** to the first comma (",") that is not within a string and deleting all +** text through that comma. +*/ +static void jsonGroupInverse( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + unsigned int i; + int inStr = 0; + int nNest = 0; + char *z; + char c; + JsonString *pStr; + UNUSED_PARAMETER(argc); + UNUSED_PARAMETER(argv); + pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0); +#ifdef NEVER + /* pStr is always non-NULL since jsonArrayStep() or jsonObjectStep() will + ** always have been called to initialize it */ + if( NEVER(!pStr) ) return; +#endif + z = pStr->zBuf; + for(i=1; inUsed && ((c = z[i])!=',' || inStr || nNest); i++){ + if( c=='"' ){ + inStr = !inStr; + }else if( c=='\\' ){ + i++; + }else if( !inStr ){ + if( c=='{' || c=='[' ) nNest++; + if( c=='}' || c==']' ) nNest--; + } + } + if( inUsed ){ + pStr->nUsed -= i; + memmove(&z[1], &z[i+1], (size_t)pStr->nUsed-1); + z[pStr->nUsed] = 0; + }else{ + pStr->nUsed = 1; + } +} +#else +# define jsonGroupInverse 0 +#endif + + +/* +** json_group_obj(NAME,VALUE) +** +** Return a JSON object composed of all names and values in the aggregate. +*/ +static void jsonObjectStep( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonString *pStr; + const char *z; + u32 n; + UNUSED_PARAMETER(argc); + pStr = (JsonString*)sqlite3_aggregate_context(ctx, sizeof(*pStr)); + if( pStr ){ + z = (const char*)sqlite3_value_text(argv[0]); + n = sqlite3Strlen30(z); + if( pStr->zBuf==0 ){ + jsonStringInit(pStr, ctx); + jsonAppendChar(pStr, '{'); + }else if( pStr->nUsed>1 && z!=0 ){ + jsonAppendChar(pStr, ','); + } + pStr->pCtx = ctx; + if( z!=0 ){ + jsonAppendString(pStr, z, n); + jsonAppendChar(pStr, ':'); + jsonAppendSqlValue(pStr, argv[1]); + } + } +} +static void jsonObjectCompute(sqlite3_context *ctx, int isFinal){ + JsonString *pStr; + pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0); + if( pStr ){ + int flags; + jsonAppendChar(pStr, '}'); + pStr->pCtx = ctx; + flags = SQLITE_PTR_TO_INT(sqlite3_user_data(ctx)); + if( pStr->eErr ){ + jsonReturnString(pStr, 0, 0); + return; + }else if( flags & JSON_BLOB ){ + jsonReturnStringAsBlob(pStr); + if( isFinal ){ + if( !pStr->bStatic ) sqlite3RCStrUnref(pStr->zBuf); + }else{ + jsonStringTrimOneChar(pStr); + } + return; + }else if( isFinal ){ + sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, + pStr->bStatic ? SQLITE_TRANSIENT : + sqlite3RCStrUnref); + pStr->bStatic = 1; + }else{ + sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, SQLITE_TRANSIENT); + jsonStringTrimOneChar(pStr); + } + }else{ + sqlite3_result_text(ctx, "{}", 2, SQLITE_STATIC); + } + sqlite3_result_subtype(ctx, JSON_SUBTYPE); +} +static void jsonObjectValue(sqlite3_context *ctx){ + jsonObjectCompute(ctx, 0); +} +static void jsonObjectFinal(sqlite3_context *ctx){ + jsonObjectCompute(ctx, 1); +} + + + +#ifndef SQLITE_OMIT_VIRTUALTABLE +/**************************************************************************** +** The json_each virtual table +****************************************************************************/ +typedef struct JsonParent JsonParent; +struct JsonParent { + u32 iHead; /* Start of object or array */ + u32 iValue; /* Start of the value */ + u32 iEnd; /* First byte past the end */ + u32 nPath; /* Length of path */ + i64 iKey; /* Key for JSONB_ARRAY */ +}; + +typedef struct JsonEachCursor JsonEachCursor; +struct JsonEachCursor { + sqlite3_vtab_cursor base; /* Base class - must be first */ + u32 iRowid; /* The rowid */ + u32 i; /* Index in sParse.aBlob[] of current row */ + u32 iEnd; /* EOF when i equals or exceeds this value */ + u32 nRoot; /* Size of the root path in bytes */ + u8 eType; /* Type of the container for element i */ + u8 bRecursive; /* True for json_tree(). False for json_each() */ + u8 eMode; /* 1 for json_each(). 2 for jsonb_each() */ + u32 nParent; /* Current nesting depth */ + u32 nParentAlloc; /* Space allocated for aParent[] */ + JsonParent *aParent; /* Parent elements of i */ + sqlite3 *db; /* Database connection */ + JsonString path; /* Current path */ + JsonParse sParse; /* Parse of the input JSON */ +}; +typedef struct JsonEachConnection JsonEachConnection; +struct JsonEachConnection { + sqlite3_vtab base; /* Base class - must be first */ + sqlite3 *db; /* Database connection */ + u8 eMode; /* 1 for json_each(). 2 for jsonb_each() */ + u8 bRecursive; /* True for json_tree(). False for json_each() */ +}; + + +/* Constructor for the json_each virtual table */ +static int jsonEachConnect( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + JsonEachConnection *pNew; + int rc; + +/* Column numbers */ +#define JEACH_KEY 0 +#define JEACH_VALUE 1 +#define JEACH_TYPE 2 +#define JEACH_ATOM 3 +#define JEACH_ID 4 +#define JEACH_PARENT 5 +#define JEACH_FULLKEY 6 +#define JEACH_PATH 7 +/* The xBestIndex method assumes that the JSON and ROOT columns are +** the last two columns in the table. Should this ever changes, be +** sure to update the xBestIndex method. */ +#define JEACH_JSON 8 +#define JEACH_ROOT 9 + + UNUSED_PARAMETER(pzErr); + UNUSED_PARAMETER(argv); + UNUSED_PARAMETER(argc); + UNUSED_PARAMETER(pAux); + rc = sqlite3_declare_vtab(db, + "CREATE TABLE x(key,value,type,atom,id,parent,fullkey,path," + "json HIDDEN,root HIDDEN)"); + if( rc==SQLITE_OK ){ + pNew = (JsonEachConnection*)sqlite3DbMallocZero(db, sizeof(*pNew)); + *ppVtab = (sqlite3_vtab*)pNew; + if( pNew==0 ) return SQLITE_NOMEM; + sqlite3_vtab_config(db, SQLITE_VTAB_INNOCUOUS); + pNew->db = db; + pNew->eMode = argv[0][4]=='b' ? 2 : 1; + pNew->bRecursive = argv[0][4+pNew->eMode]=='t'; + } + return rc; +} + +/* destructor for json_each virtual table */ +static int jsonEachDisconnect(sqlite3_vtab *pVtab){ + JsonEachConnection *p = (JsonEachConnection*)pVtab; + sqlite3DbFree(p->db, pVtab); + return SQLITE_OK; +} + +/* constructor for a JsonEachCursor object for json_each()/json_tree(). */ +static int jsonEachOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ + JsonEachConnection *pVtab = (JsonEachConnection*)p; + JsonEachCursor *pCur; + + UNUSED_PARAMETER(p); + pCur = sqlite3DbMallocZero(pVtab->db, sizeof(*pCur)); + if( pCur==0 ) return SQLITE_NOMEM; + pCur->db = pVtab->db; + pCur->eMode = pVtab->eMode; + pCur->bRecursive = pVtab->bRecursive; + jsonStringZero(&pCur->path); + *ppCursor = &pCur->base; + return SQLITE_OK; +} + +/* Reset a JsonEachCursor back to its original state. Free any memory +** held. */ +static void jsonEachCursorReset(JsonEachCursor *p){ + jsonParseReset(&p->sParse); + jsonStringReset(&p->path); + sqlite3DbFree(p->db, p->aParent); + p->iRowid = 0; + p->i = 0; + p->aParent = 0; + p->nParent = 0; + p->nParentAlloc = 0; + p->iEnd = 0; + p->eType = 0; +} + +/* Destructor for a jsonEachCursor object */ +static int jsonEachClose(sqlite3_vtab_cursor *cur){ + JsonEachCursor *p = (JsonEachCursor*)cur; + jsonEachCursorReset(p); + + sqlite3DbFree(p->db, cur); + return SQLITE_OK; +} + +/* Return TRUE if the jsonEachCursor object has been advanced off the end +** of the JSON object */ +static int jsonEachEof(sqlite3_vtab_cursor *cur){ + JsonEachCursor *p = (JsonEachCursor*)cur; + return p->i >= p->iEnd; +} + +/* +** If the cursor is currently pointing at the label of a object entry, +** then return the index of the value. For all other cases, return the +** current pointer position, which is the value. +*/ +static int jsonSkipLabel(JsonEachCursor *p){ + if( p->eType==JSONB_OBJECT ){ + u32 sz = 0; + u32 n = jsonbPayloadSize(&p->sParse, p->i, &sz); + return p->i + n + sz; + }else{ + return p->i; + } +} + +/* +** Append the path name for the current element. +*/ +static void jsonAppendPathName(JsonEachCursor *p){ + assert( p->nParent>0 ); + assert( p->eType==JSONB_ARRAY || p->eType==JSONB_OBJECT ); + if( p->eType==JSONB_ARRAY ){ + jsonPrintf(30, &p->path, "[%lld]", p->aParent[p->nParent-1].iKey); + }else{ + u32 n, sz = 0, k, i; + const char *z; + int needQuote = 0; + n = jsonbPayloadSize(&p->sParse, p->i, &sz); + k = p->i + n; + z = (const char*)&p->sParse.aBlob[k]; + if( sz==0 || !sqlite3Isalpha(z[0]) ){ + needQuote = 1; + }else{ + for(i=0; ipath,".\"%.*s\"", sz, z); + }else{ + jsonPrintf(sz+2,&p->path,".%.*s", sz, z); + } + } +} + +/* Advance the cursor to the next element for json_tree() */ +static int jsonEachNext(sqlite3_vtab_cursor *cur){ + JsonEachCursor *p = (JsonEachCursor*)cur; + int rc = SQLITE_OK; + if( p->bRecursive ){ + u8 x; + u8 levelChange = 0; + u32 n, sz = 0; + u32 i = jsonSkipLabel(p); + x = p->sParse.aBlob[i] & 0x0f; + n = jsonbPayloadSize(&p->sParse, i, &sz); + if( x==JSONB_OBJECT || x==JSONB_ARRAY ){ + JsonParent *pParent; + if( p->nParent>=p->nParentAlloc ){ + JsonParent *pNew; + u64 nNew; + nNew = p->nParentAlloc*2 + 3; + pNew = sqlite3DbRealloc(p->db, p->aParent, sizeof(JsonParent)*nNew); + if( pNew==0 ) return SQLITE_NOMEM; + p->nParentAlloc = (u32)nNew; + p->aParent = pNew; + } + levelChange = 1; + pParent = &p->aParent[p->nParent]; + pParent->iHead = p->i; + pParent->iValue = i; + pParent->iEnd = i + n + sz; + pParent->iKey = -1; + pParent->nPath = (u32)p->path.nUsed; + if( p->eType && p->nParent ){ + jsonAppendPathName(p); + if( p->path.eErr ) rc = SQLITE_NOMEM; + } + p->nParent++; + p->i = i + n; + }else{ + p->i = i + n + sz; + } + while( p->nParent>0 && p->i >= p->aParent[p->nParent-1].iEnd ){ + p->nParent--; + p->path.nUsed = p->aParent[p->nParent].nPath; + levelChange = 1; + } + if( levelChange ){ + if( p->nParent>0 ){ + JsonParent *pParent = &p->aParent[p->nParent-1]; + u32 iVal = pParent->iValue; + p->eType = p->sParse.aBlob[iVal] & 0x0f; + }else{ + p->eType = 0; + } + } + }else{ + u32 n, sz = 0; + u32 i = jsonSkipLabel(p); + n = jsonbPayloadSize(&p->sParse, i, &sz); + p->i = i + n + sz; + } + if( p->eType==JSONB_ARRAY && p->nParent ){ + p->aParent[p->nParent-1].iKey++; + } + p->iRowid++; + return rc; +} + +/* Length of the path for rowid==0 in bRecursive mode. +*/ +static int jsonEachPathLength(JsonEachCursor *p){ + u32 n = p->path.nUsed; + char *z = p->path.zBuf; + if( p->iRowid==0 && p->bRecursive && n>=2 ){ + while( n>1 ){ + n--; + if( z[n]=='[' || z[n]=='.' ){ + u32 x, sz = 0; + char cSaved = z[n]; + z[n] = 0; + assert( p->sParse.eEdit==0 ); + x = jsonLookupStep(&p->sParse, 0, z+1, 0); + z[n] = cSaved; + if( JSON_LOOKUP_ISERROR(x) ) continue; + if( x + jsonbPayloadSize(&p->sParse, x, &sz) == p->i ) break; + } + } + } + return n; +} + +/* Return the value of a column */ +static int jsonEachColumn( + sqlite3_vtab_cursor *cur, /* The cursor */ + sqlite3_context *ctx, /* First argument to sqlite3_result_...() */ + int iColumn /* Which column to return */ +){ + JsonEachCursor *p = (JsonEachCursor*)cur; + switch( iColumn ){ + case JEACH_KEY: { + if( p->nParent==0 ){ + u32 n, j; + if( p->nRoot==1 ) break; + j = jsonEachPathLength(p); + n = p->nRoot - j; + if( n==0 ){ + break; + }else if( p->path.zBuf[j]=='[' ){ + i64 x; + sqlite3Atoi64(&p->path.zBuf[j+1], &x, n-1, SQLITE_UTF8); + sqlite3_result_int64(ctx, x); + }else if( p->path.zBuf[j+1]=='"' ){ + sqlite3_result_text(ctx, &p->path.zBuf[j+2], n-3, SQLITE_TRANSIENT); + }else{ + sqlite3_result_text(ctx, &p->path.zBuf[j+1], n-1, SQLITE_TRANSIENT); + } + break; + } + if( p->eType==JSONB_OBJECT ){ + jsonReturnFromBlob(&p->sParse, p->i, ctx, 1); + }else{ + assert( p->eType==JSONB_ARRAY ); + sqlite3_result_int64(ctx, p->aParent[p->nParent-1].iKey); + } + break; + } + case JEACH_VALUE: { + u32 i = jsonSkipLabel(p); + jsonReturnFromBlob(&p->sParse, i, ctx, p->eMode); + if( (p->sParse.aBlob[i] & 0x0f)>=JSONB_ARRAY ){ + sqlite3_result_subtype(ctx, JSON_SUBTYPE); + } + break; + } + case JEACH_TYPE: { + u32 i = jsonSkipLabel(p); + u8 eType = p->sParse.aBlob[i] & 0x0f; + sqlite3_result_text(ctx, jsonbType[eType], -1, SQLITE_STATIC); + break; + } + case JEACH_ATOM: { + u32 i = jsonSkipLabel(p); + if( (p->sParse.aBlob[i] & 0x0f)sParse, i, ctx, 1); + } + break; + } + case JEACH_ID: { + sqlite3_result_int64(ctx, (sqlite3_int64)p->i); + break; + } + case JEACH_PARENT: { + if( p->nParent>0 && p->bRecursive ){ + sqlite3_result_int64(ctx, p->aParent[p->nParent-1].iHead); + } + break; + } + case JEACH_FULLKEY: { + u64 nBase = p->path.nUsed; + if( p->nParent ) jsonAppendPathName(p); + sqlite3_result_text64(ctx, p->path.zBuf, p->path.nUsed, + SQLITE_TRANSIENT, SQLITE_UTF8); + p->path.nUsed = nBase; + break; + } + case JEACH_PATH: { + u32 n = jsonEachPathLength(p); + sqlite3_result_text64(ctx, p->path.zBuf, n, + SQLITE_TRANSIENT, SQLITE_UTF8); + break; + } + default: { + sqlite3_result_text(ctx, p->path.zBuf, p->nRoot, SQLITE_STATIC); + break; + } + case JEACH_JSON: { + if( p->sParse.zJson==0 ){ + sqlite3_result_blob(ctx, p->sParse.aBlob, p->sParse.nBlob, + SQLITE_TRANSIENT); + }else{ + sqlite3_result_text(ctx, p->sParse.zJson, -1, SQLITE_TRANSIENT); + } + break; + } + } + return SQLITE_OK; +} + +/* Return the current rowid value */ +static int jsonEachRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){ + JsonEachCursor *p = (JsonEachCursor*)cur; + *pRowid = p->iRowid; + return SQLITE_OK; +} + +/* The query strategy is to look for an equality constraint on the json +** column. Without such a constraint, the table cannot operate. idxNum is +** 1 if the constraint is found, 3 if the constraint and zRoot are found, +** and 0 otherwise. +*/ +static int jsonEachBestIndex( + sqlite3_vtab *tab, + sqlite3_index_info *pIdxInfo +){ + int i; /* Loop counter or computed array index */ + int aIdx[2]; /* Index of constraints for JSON and ROOT */ + int unusableMask = 0; /* Mask of unusable JSON and ROOT constraints */ + int idxMask = 0; /* Mask of usable == constraints JSON and ROOT */ + const struct sqlite3_index_constraint *pConstraint; + + /* This implementation assumes that JSON and ROOT are the last two + ** columns in the table */ + assert( JEACH_ROOT == JEACH_JSON+1 ); + UNUSED_PARAMETER(tab); + aIdx[0] = aIdx[1] = -1; + pConstraint = pIdxInfo->aConstraint; + for(i=0; inConstraint; i++, pConstraint++){ + int iCol; + int iMask; + if( pConstraint->iColumn < JEACH_JSON ) continue; + iCol = pConstraint->iColumn - JEACH_JSON; + assert( iCol==0 || iCol==1 ); + testcase( iCol==0 ); + iMask = 1 << iCol; + if( pConstraint->usable==0 ){ + unusableMask |= iMask; + }else if( pConstraint->op==SQLITE_INDEX_CONSTRAINT_EQ ){ + aIdx[iCol] = i; + idxMask |= iMask; + } + } + if( pIdxInfo->nOrderBy>0 + && pIdxInfo->aOrderBy[0].iColumn<0 + && pIdxInfo->aOrderBy[0].desc==0 + ){ + pIdxInfo->orderByConsumed = 1; + } + + if( (unusableMask & ~idxMask)!=0 ){ + /* If there are any unusable constraints on JSON or ROOT, then reject + ** this entire plan */ + return SQLITE_CONSTRAINT; + } + if( aIdx[0]<0 ){ + /* No JSON input. Leave estimatedCost at the huge value that it was + ** initialized to to discourage the query planner from selecting this + ** plan. */ + pIdxInfo->idxNum = 0; + }else{ + pIdxInfo->estimatedCost = 1.0; + i = aIdx[0]; + pIdxInfo->aConstraintUsage[i].argvIndex = 1; + pIdxInfo->aConstraintUsage[i].omit = 1; + if( aIdx[1]<0 ){ + pIdxInfo->idxNum = 1; /* Only JSON supplied. Plan 1 */ + }else{ + i = aIdx[1]; + pIdxInfo->aConstraintUsage[i].argvIndex = 2; + pIdxInfo->aConstraintUsage[i].omit = 1; + pIdxInfo->idxNum = 3; /* Both JSON and ROOT are supplied. Plan 3 */ + } + } + return SQLITE_OK; +} + +/* Start a search on a new JSON string */ +static int jsonEachFilter( + sqlite3_vtab_cursor *cur, + int idxNum, const char *idxStr, + int argc, sqlite3_value **argv +){ + JsonEachCursor *p = (JsonEachCursor*)cur; + const char *zRoot = 0; + u32 i, n, sz; + + UNUSED_PARAMETER(idxStr); + UNUSED_PARAMETER(argc); + jsonEachCursorReset(p); + if( idxNum==0 ) return SQLITE_OK; + memset(&p->sParse, 0, sizeof(p->sParse)); + p->sParse.nJPRef = 1; + p->sParse.db = p->db; + if( jsonArgIsJsonb(argv[0], &p->sParse) ){ + /* We have JSONB */ + }else{ + p->sParse.zJson = (char*)sqlite3_value_text(argv[0]); + p->sParse.nJson = sqlite3_value_bytes(argv[0]); + if( p->sParse.zJson==0 ){ + p->i = p->iEnd = 0; + return SQLITE_OK; + } + if( jsonConvertTextToBlob(&p->sParse, 0) ){ + if( p->sParse.oom ){ + return SQLITE_NOMEM; + } + goto json_each_malformed_input; + } + } + if( idxNum==3 ){ + zRoot = (const char*)sqlite3_value_text(argv[1]); + if( zRoot==0 ) return SQLITE_OK; + if( zRoot[0]!='$' ){ + sqlite3_free(cur->pVtab->zErrMsg); + cur->pVtab->zErrMsg = jsonBadPathError(0, zRoot); + jsonEachCursorReset(p); + return cur->pVtab->zErrMsg ? SQLITE_ERROR : SQLITE_NOMEM; + } + p->nRoot = sqlite3Strlen30(zRoot); + if( zRoot[1]==0 ){ + i = p->i = 0; + p->eType = 0; + }else{ + i = jsonLookupStep(&p->sParse, 0, zRoot+1, 0); + if( JSON_LOOKUP_ISERROR(i) ){ + if( i==JSON_LOOKUP_NOTFOUND ){ + p->i = 0; + p->eType = 0; + p->iEnd = 0; + return SQLITE_OK; + } + sqlite3_free(cur->pVtab->zErrMsg); + cur->pVtab->zErrMsg = jsonBadPathError(0, zRoot); + jsonEachCursorReset(p); + return cur->pVtab->zErrMsg ? SQLITE_ERROR : SQLITE_NOMEM; + } + if( p->sParse.iLabel ){ + p->i = p->sParse.iLabel; + p->eType = JSONB_OBJECT; + }else{ + p->i = i; + p->eType = JSONB_ARRAY; + } + } + jsonAppendRaw(&p->path, zRoot, p->nRoot); + }else{ + i = p->i = 0; + p->eType = 0; + p->nRoot = 1; + jsonAppendRaw(&p->path, "$", 1); + } + p->nParent = 0; + n = jsonbPayloadSize(&p->sParse, i, &sz); + p->iEnd = i+n+sz; + if( (p->sParse.aBlob[i] & 0x0f)>=JSONB_ARRAY && !p->bRecursive ){ + p->i = i + n; + p->eType = p->sParse.aBlob[i] & 0x0f; + p->aParent = sqlite3DbMallocZero(p->db, sizeof(JsonParent)); + if( p->aParent==0 ) return SQLITE_NOMEM; + p->nParent = 1; + p->nParentAlloc = 1; + p->aParent[0].iKey = 0; + p->aParent[0].iEnd = p->iEnd; + p->aParent[0].iHead = p->i; + p->aParent[0].iValue = i; + } + return SQLITE_OK; + +json_each_malformed_input: + sqlite3_free(cur->pVtab->zErrMsg); + cur->pVtab->zErrMsg = sqlite3_mprintf("malformed JSON"); + jsonEachCursorReset(p); + return cur->pVtab->zErrMsg ? SQLITE_ERROR : SQLITE_NOMEM; +} + +/* The methods of the json_each virtual table */ +static sqlite3_module jsonEachModule = { + 0, /* iVersion */ + 0, /* xCreate */ + jsonEachConnect, /* xConnect */ + jsonEachBestIndex, /* xBestIndex */ + jsonEachDisconnect, /* xDisconnect */ + 0, /* xDestroy */ + jsonEachOpen, /* xOpen - open a cursor */ + jsonEachClose, /* xClose - close a cursor */ + jsonEachFilter, /* xFilter - configure scan constraints */ + jsonEachNext, /* xNext - advance a cursor */ + jsonEachEof, /* xEof - check for end of scan */ + jsonEachColumn, /* xColumn - read data */ + jsonEachRowid, /* xRowid - read data */ + 0, /* xUpdate */ + 0, /* xBegin */ + 0, /* xSync */ + 0, /* xCommit */ + 0, /* xRollback */ + 0, /* xFindMethod */ + 0, /* xRename */ + 0, /* xSavepoint */ + 0, /* xRelease */ + 0, /* xRollbackTo */ + 0, /* xShadowName */ + 0 /* xIntegrity */ +}; +#endif /* SQLITE_OMIT_VIRTUALTABLE */ +#endif /* !defined(SQLITE_OMIT_JSON) */ + +/* +** Register JSON functions. +*/ +SQLITE_PRIVATE void sqlite3RegisterJsonFunctions(void){ +#ifndef SQLITE_OMIT_JSON + static FuncDef aJsonFunc[] = { + /* sqlite3_result_subtype() ----, ,--- sqlite3_value_subtype() */ + /* | | */ + /* Uses cache ------, | | ,---- Returns JSONB */ + /* | | | | */ + /* Number of arguments ---, | | | | ,--- Flags */ + /* | | | | | | */ + JFUNCTION(json, 1,1,1, 0,0,0, jsonRemoveFunc), + JFUNCTION(jsonb, 1,1,0, 0,1,0, jsonRemoveFunc), + JFUNCTION(json_array, -1,0,1, 1,0,0, jsonArrayFunc), + JFUNCTION(jsonb_array, -1,0,1, 1,1,0, jsonArrayFunc), + JFUNCTION(json_array_length, 1,1,0, 0,0,0, jsonArrayLengthFunc), + JFUNCTION(json_array_length, 2,1,0, 0,0,0, jsonArrayLengthFunc), + JFUNCTION(json_error_position,1,1,0, 0,0,0, jsonErrorFunc), + JFUNCTION(json_extract, -1,1,1, 0,0,0, jsonExtractFunc), + JFUNCTION(jsonb_extract, -1,1,0, 0,1,0, jsonExtractFunc), + JFUNCTION(->, 2,1,1, 0,0,JSON_JSON, jsonExtractFunc), + JFUNCTION(->>, 2,1,0, 0,0,JSON_SQL, jsonExtractFunc), + JFUNCTION(json_insert, -1,1,1, 1,0,0, jsonSetFunc), + JFUNCTION(jsonb_insert, -1,1,0, 1,1,0, jsonSetFunc), + JFUNCTION(json_object, -1,0,1, 1,0,0, jsonObjectFunc), + JFUNCTION(jsonb_object, -1,0,1, 1,1,0, jsonObjectFunc), + JFUNCTION(json_patch, 2,1,1, 0,0,0, jsonPatchFunc), + JFUNCTION(jsonb_patch, 2,1,0, 0,1,0, jsonPatchFunc), + JFUNCTION(json_pretty, 1,1,0, 0,0,0, jsonPrettyFunc), + JFUNCTION(json_pretty, 2,1,0, 0,0,0, jsonPrettyFunc), + JFUNCTION(json_quote, 1,0,1, 1,0,0, jsonQuoteFunc), + JFUNCTION(json_remove, -1,1,1, 0,0,0, jsonRemoveFunc), + JFUNCTION(jsonb_remove, -1,1,0, 0,1,0, jsonRemoveFunc), + JFUNCTION(json_replace, -1,1,1, 1,0,0, jsonReplaceFunc), + JFUNCTION(jsonb_replace, -1,1,0, 1,1,0, jsonReplaceFunc), + JFUNCTION(json_set, -1,1,1, 1,0,JSON_ISSET, jsonSetFunc), + JFUNCTION(jsonb_set, -1,1,0, 1,1,JSON_ISSET, jsonSetFunc), + JFUNCTION(json_type, 1,1,0, 0,0,0, jsonTypeFunc), + JFUNCTION(json_type, 2,1,0, 0,0,0, jsonTypeFunc), + JFUNCTION(json_valid, 1,1,0, 0,0,0, jsonValidFunc), + JFUNCTION(json_valid, 2,1,0, 0,0,0, jsonValidFunc), +#if SQLITE_DEBUG + JFUNCTION(json_parse, 1,1,0, 0,0,0, jsonParseFunc), +#endif + WAGGREGATE(json_group_array, 1, 0, 0, + jsonArrayStep, jsonArrayFinal, jsonArrayValue, jsonGroupInverse, + SQLITE_SUBTYPE|SQLITE_RESULT_SUBTYPE|SQLITE_UTF8| + SQLITE_DETERMINISTIC), + WAGGREGATE(jsonb_group_array, 1, JSON_BLOB, 0, + jsonArrayStep, jsonArrayFinal, jsonArrayValue, jsonGroupInverse, + SQLITE_SUBTYPE|SQLITE_RESULT_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC), + WAGGREGATE(json_group_object, 2, 0, 0, + jsonObjectStep, jsonObjectFinal, jsonObjectValue, jsonGroupInverse, + SQLITE_SUBTYPE|SQLITE_RESULT_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC), + WAGGREGATE(jsonb_group_object,2, JSON_BLOB, 0, + jsonObjectStep, jsonObjectFinal, jsonObjectValue, jsonGroupInverse, + SQLITE_SUBTYPE|SQLITE_RESULT_SUBTYPE|SQLITE_UTF8| + SQLITE_DETERMINISTIC) + }; + sqlite3InsertBuiltinFuncs(aJsonFunc, ArraySize(aJsonFunc)); +#endif +} + +#if !defined(SQLITE_OMIT_VIRTUALTABLE) && !defined(SQLITE_OMIT_JSON) +/* +** Register the JSON table-valued function named zName and return a +** pointer to its Module object. Return NULL if something goes wrong. +*/ +SQLITE_PRIVATE Module *sqlite3JsonVtabRegister(sqlite3 *db, const char *zName){ + unsigned int i; + static const char *azModule[] = { + "json_each", "json_tree", "jsonb_each", "jsonb_tree" + }; + assert( sqlite3HashFind(&db->aModule, zName)==0 ); + for(i=0; i */ + +/* +** If building separately, we will need some setup that is normally +** found in sqliteInt.h +*/ +#if !defined(SQLITE_AMALGAMATION) +#include "sqlite3rtree.h" +typedef sqlite3_int64 i64; +typedef sqlite3_uint64 u64; +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned int u32; +#if !defined(NDEBUG) && !defined(SQLITE_DEBUG) +# define NDEBUG 1 +#endif +#if defined(NDEBUG) && defined(SQLITE_DEBUG) +# undef NDEBUG +#endif +#if defined(SQLITE_COVERAGE_TEST) || defined(SQLITE_MUTATION_TEST) +# define SQLITE_OMIT_AUXILIARY_SAFETY_CHECKS 1 +#endif +#if defined(SQLITE_OMIT_AUXILIARY_SAFETY_CHECKS) +# define ALWAYS(X) (1) +# define NEVER(X) (0) +#elif !defined(NDEBUG) +# define ALWAYS(X) ((X)?1:(assert(0),0)) +# define NEVER(X) ((X)?(assert(0),1):0) +#else +# define ALWAYS(X) (X) +# define NEVER(X) (X) +#endif +#ifndef offsetof +# define offsetof(ST,M) ((size_t)((char*)&((ST*)0)->M - (char*)0)) +#endif +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +# define FLEXARRAY +#else +# define FLEXARRAY 1 +#endif +#endif /* !defined(SQLITE_AMALGAMATION) */ + +/* Macro to check for 4-byte alignment. Only used inside of assert() */ +#ifdef SQLITE_DEBUG +# define FOUR_BYTE_ALIGNED(X) ((((char*)(X) - (char*)0) & 3)==0) +#endif + +/* #include */ +/* #include */ +/* #include */ +/* #include */ + +/* The following macro is used to suppress compiler warnings. +*/ +#ifndef UNUSED_PARAMETER +# define UNUSED_PARAMETER(x) (void)(x) +#endif + +typedef struct Rtree Rtree; +typedef struct RtreeCursor RtreeCursor; +typedef struct RtreeNode RtreeNode; +typedef struct RtreeCell RtreeCell; +typedef struct RtreeConstraint RtreeConstraint; +typedef struct RtreeMatchArg RtreeMatchArg; +typedef struct RtreeGeomCallback RtreeGeomCallback; +typedef union RtreeCoord RtreeCoord; +typedef struct RtreeSearchPoint RtreeSearchPoint; + +/* The rtree may have between 1 and RTREE_MAX_DIMENSIONS dimensions. */ +#define RTREE_MAX_DIMENSIONS 5 + +/* Maximum number of auxiliary columns */ +#define RTREE_MAX_AUX_COLUMN 100 + +/* Size of hash table Rtree.aHash. This hash table is not expected to +** ever contain very many entries, so a fixed number of buckets is +** used. +*/ +#define HASHSIZE 97 + +/* The xBestIndex method of this virtual table requires an estimate of +** the number of rows in the virtual table to calculate the costs of +** various strategies. If possible, this estimate is loaded from the +** sqlite_stat1 table (with RTREE_MIN_ROWEST as a hard-coded minimum). +** Otherwise, if no sqlite_stat1 entry is available, use +** RTREE_DEFAULT_ROWEST. +*/ +#define RTREE_DEFAULT_ROWEST 1048576 +#define RTREE_MIN_ROWEST 100 + +/* +** An rtree virtual-table object. +*/ +struct Rtree { + sqlite3_vtab base; /* Base class. Must be first */ + sqlite3 *db; /* Host database connection */ + int iNodeSize; /* Size in bytes of each node in the node table */ + u8 nDim; /* Number of dimensions */ + u8 nDim2; /* Twice the number of dimensions */ + u8 eCoordType; /* RTREE_COORD_REAL32 or RTREE_COORD_INT32 */ + u8 nBytesPerCell; /* Bytes consumed per cell */ + u8 inWrTrans; /* True if inside write transaction */ + u8 nAux; /* # of auxiliary columns in %_rowid */ +#ifdef SQLITE_ENABLE_GEOPOLY + u8 nAuxNotNull; /* Number of initial not-null aux columns */ +#endif +#ifdef SQLITE_DEBUG + u8 bCorrupt; /* Shadow table corruption detected */ +#endif + int iDepth; /* Current depth of the r-tree structure */ + char *zDb; /* Name of database containing r-tree table */ + char *zName; /* Name of r-tree table */ + char *zNodeName; /* Name of the %_node table */ + u32 nBusy; /* Current number of users of this structure */ + i64 nRowEst; /* Estimated number of rows in this table */ + u32 nCursor; /* Number of open cursors */ + u32 nNodeRef; /* Number RtreeNodes with positive nRef */ + char *zReadAuxSql; /* SQL for statement to read aux data */ + + /* List of nodes removed during a CondenseTree operation. List is + ** linked together via the pointer normally used for hash chains - + ** RtreeNode.pNext. RtreeNode.iNode stores the depth of the sub-tree + ** headed by the node (leaf nodes have RtreeNode.iNode==0). + */ + RtreeNode *pDeleted; + + /* Blob I/O on xxx_node */ + sqlite3_blob *pNodeBlob; + + /* Statements to read/write/delete a record from xxx_node */ + sqlite3_stmt *pWriteNode; + sqlite3_stmt *pDeleteNode; + + /* Statements to read/write/delete a record from xxx_rowid */ + sqlite3_stmt *pReadRowid; + sqlite3_stmt *pWriteRowid; + sqlite3_stmt *pDeleteRowid; + + /* Statements to read/write/delete a record from xxx_parent */ + sqlite3_stmt *pReadParent; + sqlite3_stmt *pWriteParent; + sqlite3_stmt *pDeleteParent; + + /* Statement for writing to the "aux:" fields, if there are any */ + sqlite3_stmt *pWriteAux; + + RtreeNode *aHash[HASHSIZE]; /* Hash table of in-memory nodes. */ +}; + +/* Possible values for Rtree.eCoordType: */ +#define RTREE_COORD_REAL32 0 +#define RTREE_COORD_INT32 1 + +/* +** If SQLITE_RTREE_INT_ONLY is defined, then this virtual table will +** only deal with integer coordinates. No floating point operations +** will be done. +*/ +#ifdef SQLITE_RTREE_INT_ONLY + typedef sqlite3_int64 RtreeDValue; /* High accuracy coordinate */ + typedef int RtreeValue; /* Low accuracy coordinate */ +# define RTREE_ZERO 0 +#else + typedef double RtreeDValue; /* High accuracy coordinate */ + typedef float RtreeValue; /* Low accuracy coordinate */ +# define RTREE_ZERO 0.0 +#endif + +/* +** Set the Rtree.bCorrupt flag +*/ +#ifdef SQLITE_DEBUG +# define RTREE_IS_CORRUPT(X) ((X)->bCorrupt = 1) +#else +# define RTREE_IS_CORRUPT(X) +#endif + +/* +** When doing a search of an r-tree, instances of the following structure +** record intermediate results from the tree walk. +** +** The id is always a node-id. For iLevel>=1 the id is the node-id of +** the node that the RtreeSearchPoint represents. When iLevel==0, however, +** the id is of the parent node and the cell that RtreeSearchPoint +** represents is the iCell-th entry in the parent node. +*/ +struct RtreeSearchPoint { + RtreeDValue rScore; /* The score for this node. Smallest goes first. */ + sqlite3_int64 id; /* Node ID */ + u8 iLevel; /* 0=entries. 1=leaf node. 2+ for higher */ + u8 eWithin; /* PARTLY_WITHIN or FULLY_WITHIN */ + u8 iCell; /* Cell index within the node */ +}; + +/* +** The minimum number of cells allowed for a node is a third of the +** maximum. In Gutman's notation: +** +** m = M/3 +** +** If an R*-tree "Reinsert" operation is required, the same number of +** cells are removed from the overfull node and reinserted into the tree. +*/ +#define RTREE_MINCELLS(p) ((((p)->iNodeSize-4)/(p)->nBytesPerCell)/3) +#define RTREE_REINSERT(p) RTREE_MINCELLS(p) +#define RTREE_MAXCELLS 51 + +/* +** The smallest possible node-size is (512-64)==448 bytes. And the largest +** supported cell size is 48 bytes (8 byte rowid + ten 4 byte coordinates). +** Therefore all non-root nodes must contain at least 3 entries. Since +** 3^40 is greater than 2^64, an r-tree structure always has a depth of +** 40 or less. +*/ +#define RTREE_MAX_DEPTH 40 + + +/* +** Number of entries in the cursor RtreeNode cache. The first entry is +** used to cache the RtreeNode for RtreeCursor.sPoint. The remaining +** entries cache the RtreeNode for the first elements of the priority queue. +*/ +#define RTREE_CACHE_SZ 5 + +/* +** An rtree cursor object. +*/ +struct RtreeCursor { + sqlite3_vtab_cursor base; /* Base class. Must be first */ + u8 atEOF; /* True if at end of search */ + u8 bPoint; /* True if sPoint is valid */ + u8 bAuxValid; /* True if pReadAux is valid */ + int iStrategy; /* Copy of idxNum search parameter */ + int nConstraint; /* Number of entries in aConstraint */ + RtreeConstraint *aConstraint; /* Search constraints. */ + int nPointAlloc; /* Number of slots allocated for aPoint[] */ + int nPoint; /* Number of slots used in aPoint[] */ + int mxLevel; /* iLevel value for root of the tree */ + RtreeSearchPoint *aPoint; /* Priority queue for search points */ + sqlite3_stmt *pReadAux; /* Statement to read aux-data */ + RtreeSearchPoint sPoint; /* Cached next search point */ + RtreeNode *aNode[RTREE_CACHE_SZ]; /* Rtree node cache */ + u32 anQueue[RTREE_MAX_DEPTH+1]; /* Number of queued entries by iLevel */ +}; + +/* Return the Rtree of a RtreeCursor */ +#define RTREE_OF_CURSOR(X) ((Rtree*)((X)->base.pVtab)) + +/* +** A coordinate can be either a floating point number or a integer. All +** coordinates within a single R-Tree are always of the same time. +*/ +union RtreeCoord { + RtreeValue f; /* Floating point value */ + int i; /* Integer value */ + u32 u; /* Unsigned for byte-order conversions */ +}; + +/* +** The argument is an RtreeCoord. Return the value stored within the RtreeCoord +** formatted as a RtreeDValue (double or int64). This macro assumes that local +** variable pRtree points to the Rtree structure associated with the +** RtreeCoord. +*/ +#ifdef SQLITE_RTREE_INT_ONLY +# define DCOORD(coord) ((RtreeDValue)coord.i) +#else +# define DCOORD(coord) ( \ + (pRtree->eCoordType==RTREE_COORD_REAL32) ? \ + ((double)coord.f) : \ + ((double)coord.i) \ + ) +#endif + +/* +** A search constraint. +*/ +struct RtreeConstraint { + int iCoord; /* Index of constrained coordinate */ + int op; /* Constraining operation */ + union { + RtreeDValue rValue; /* Constraint value. */ + int (*xGeom)(sqlite3_rtree_geometry*,int,RtreeDValue*,int*); + int (*xQueryFunc)(sqlite3_rtree_query_info*); + } u; + sqlite3_rtree_query_info *pInfo; /* xGeom and xQueryFunc argument */ +}; + +/* Possible values for RtreeConstraint.op */ +#define RTREE_EQ 0x41 /* A */ +#define RTREE_LE 0x42 /* B */ +#define RTREE_LT 0x43 /* C */ +#define RTREE_GE 0x44 /* D */ +#define RTREE_GT 0x45 /* E */ +#define RTREE_MATCH 0x46 /* F: Old-style sqlite3_rtree_geometry_callback() */ +#define RTREE_QUERY 0x47 /* G: New-style sqlite3_rtree_query_callback() */ + +/* Special operators available only on cursors. Needs to be consecutive +** with the normal values above, but must be less than RTREE_MATCH. These +** are used in the cursor for contraints such as x=NULL (RTREE_FALSE) or +** x<'xyz' (RTREE_TRUE) */ +#define RTREE_TRUE 0x3f /* ? */ +#define RTREE_FALSE 0x40 /* @ */ + +/* +** An rtree structure node. +*/ +struct RtreeNode { + RtreeNode *pParent; /* Parent node */ + i64 iNode; /* The node number */ + int nRef; /* Number of references to this node */ + int isDirty; /* True if the node needs to be written to disk */ + u8 *zData; /* Content of the node, as should be on disk */ + RtreeNode *pNext; /* Next node in this hash collision chain */ +}; + +/* Return the number of cells in a node */ +#define NCELL(pNode) readInt16(&(pNode)->zData[2]) + +/* +** A single cell from a node, deserialized +*/ +struct RtreeCell { + i64 iRowid; /* Node or entry ID */ + RtreeCoord aCoord[RTREE_MAX_DIMENSIONS*2]; /* Bounding box coordinates */ +}; + + +/* +** This object becomes the sqlite3_user_data() for the SQL functions +** that are created by sqlite3_rtree_geometry_callback() and +** sqlite3_rtree_query_callback() and which appear on the right of MATCH +** operators in order to constrain a search. +** +** xGeom and xQueryFunc are the callback functions. Exactly one of +** xGeom and xQueryFunc fields is non-NULL, depending on whether the +** SQL function was created using sqlite3_rtree_geometry_callback() or +** sqlite3_rtree_query_callback(). +** +** This object is deleted automatically by the destructor mechanism in +** sqlite3_create_function_v2(). +*/ +struct RtreeGeomCallback { + int (*xGeom)(sqlite3_rtree_geometry*, int, RtreeDValue*, int*); + int (*xQueryFunc)(sqlite3_rtree_query_info*); + void (*xDestructor)(void*); + void *pContext; +}; + +/* +** An instance of this structure (in the form of a BLOB) is returned by +** the SQL functions that sqlite3_rtree_geometry_callback() and +** sqlite3_rtree_query_callback() create, and is read as the right-hand +** operand to the MATCH operator of an R-Tree. +*/ +struct RtreeMatchArg { + u32 iSize; /* Size of this object */ + RtreeGeomCallback cb; /* Info about the callback functions */ + int nParam; /* Number of parameters to the SQL function */ + sqlite3_value **apSqlParam; /* Original SQL parameter values */ + RtreeDValue aParam[FLEXARRAY]; /* Values for parameters to the SQL function */ +}; + +/* Size of an RtreeMatchArg object with N parameters */ +#define SZ_RTREEMATCHARG(N) \ + (offsetof(RtreeMatchArg,aParam)+(N)*sizeof(RtreeDValue)) + +#ifndef MAX +# define MAX(x,y) ((x) < (y) ? (y) : (x)) +#endif +#ifndef MIN +# define MIN(x,y) ((x) > (y) ? (y) : (x)) +#endif + +/* What version of GCC is being used. 0 means GCC is not being used . +** Note that the GCC_VERSION macro will also be set correctly when using +** clang, since clang works hard to be gcc compatible. So the gcc +** optimizations will also work when compiling with clang. +*/ +#ifndef GCC_VERSION +#if defined(__GNUC__) && !defined(SQLITE_DISABLE_INTRINSIC) +# define GCC_VERSION (__GNUC__*1000000+__GNUC_MINOR__*1000+__GNUC_PATCHLEVEL__) +#else +# define GCC_VERSION 0 +#endif +#endif + +/* The testcase() macro should already be defined in the amalgamation. If +** it is not, make it a no-op. +*/ +#ifndef SQLITE_AMALGAMATION +# if defined(SQLITE_COVERAGE_TEST) || defined(SQLITE_DEBUG) + unsigned int sqlite3RtreeTestcase = 0; +# define testcase(X) if( X ){ sqlite3RtreeTestcase += __LINE__; } +# else +# define testcase(X) +# endif +#endif + +/* +** Make sure that the compiler intrinsics we desire are enabled when +** compiling with an appropriate version of MSVC unless prevented by +** the SQLITE_DISABLE_INTRINSIC define. +*/ +#if !defined(SQLITE_DISABLE_INTRINSIC) +# if defined(_MSC_VER) && _MSC_VER>=1400 +# if !defined(_WIN32_WCE) +/* # include */ +# pragma intrinsic(_byteswap_ulong) +# pragma intrinsic(_byteswap_uint64) +# else +/* # include */ +# endif +# endif +#endif + +/* +** Macros to determine whether the machine is big or little endian, +** and whether or not that determination is run-time or compile-time. +** +** For best performance, an attempt is made to guess at the byte-order +** using C-preprocessor macros. If that is unsuccessful, or if +** -DSQLITE_RUNTIME_BYTEORDER=1 is set, then byte-order is determined +** at run-time. +*/ +#ifndef SQLITE_BYTEORDER /* Replicate changes at tag-20230904a */ +# if defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ +# define SQLITE_BYTEORDER 4321 +# elif defined(__BYTE_ORDER__) && __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__ +# define SQLITE_BYTEORDER 1234 +# elif defined(__BIG_ENDIAN__) && __BIG_ENDIAN__==1 +# define SQLITE_BYTEORDER 4321 +# elif defined(i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \ + defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \ + defined(__ARMEL__) || defined(__AARCH64EL__) || defined(_M_ARM64) +# define SQLITE_BYTEORDER 1234 +# elif defined(sparc) || defined(__ARMEB__) || defined(__AARCH64EB__) +# define SQLITE_BYTEORDER 4321 +# else +# define SQLITE_BYTEORDER 0 +# endif +#endif + + +/* What version of MSVC is being used. 0 means MSVC is not being used */ +#ifndef MSVC_VERSION +#if defined(_MSC_VER) && !defined(SQLITE_DISABLE_INTRINSIC) +# define MSVC_VERSION _MSC_VER +#else +# define MSVC_VERSION 0 +#endif +#endif + +/* +** Functions to deserialize a 16 bit integer, 32 bit real number and +** 64 bit integer. The deserialized value is returned. +*/ +static int readInt16(u8 *p){ + return (p[0]<<8) + p[1]; +} +static void readCoord(u8 *p, RtreeCoord *pCoord){ + assert( FOUR_BYTE_ALIGNED(p) ); +#if SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 + pCoord->u = _byteswap_ulong(*(u32*)p); +#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 + pCoord->u = __builtin_bswap32(*(u32*)p); +#elif SQLITE_BYTEORDER==4321 + pCoord->u = *(u32*)p; +#else + pCoord->u = ( + (((u32)p[0]) << 24) + + (((u32)p[1]) << 16) + + (((u32)p[2]) << 8) + + (((u32)p[3]) << 0) + ); +#endif +} +static i64 readInt64(u8 *p){ +#if SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 + u64 x; + memcpy(&x, p, 8); + return (i64)_byteswap_uint64(x); +#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 + u64 x; + memcpy(&x, p, 8); + return (i64)__builtin_bswap64(x); +#elif SQLITE_BYTEORDER==4321 + i64 x; + memcpy(&x, p, 8); + return x; +#else + return (i64)( + (((u64)p[0]) << 56) + + (((u64)p[1]) << 48) + + (((u64)p[2]) << 40) + + (((u64)p[3]) << 32) + + (((u64)p[4]) << 24) + + (((u64)p[5]) << 16) + + (((u64)p[6]) << 8) + + (((u64)p[7]) << 0) + ); +#endif +} + +/* +** Functions to serialize a 16 bit integer, 32 bit real number and +** 64 bit integer. The value returned is the number of bytes written +** to the argument buffer (always 2, 4 and 8 respectively). +*/ +static void writeInt16(u8 *p, int i){ + p[0] = (i>> 8)&0xFF; + p[1] = (i>> 0)&0xFF; +} +static int writeCoord(u8 *p, RtreeCoord *pCoord){ + u32 i; + assert( FOUR_BYTE_ALIGNED(p) ); + assert( sizeof(RtreeCoord)==4 ); + assert( sizeof(u32)==4 ); +#if SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 + i = __builtin_bswap32(pCoord->u); + memcpy(p, &i, 4); +#elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 + i = _byteswap_ulong(pCoord->u); + memcpy(p, &i, 4); +#elif SQLITE_BYTEORDER==4321 + i = pCoord->u; + memcpy(p, &i, 4); +#else + i = pCoord->u; + p[0] = (i>>24)&0xFF; + p[1] = (i>>16)&0xFF; + p[2] = (i>> 8)&0xFF; + p[3] = (i>> 0)&0xFF; +#endif + return 4; +} +static int writeInt64(u8 *p, i64 i){ +#if SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 + i = (i64)__builtin_bswap64((u64)i); + memcpy(p, &i, 8); +#elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 + i = (i64)_byteswap_uint64((u64)i); + memcpy(p, &i, 8); +#elif SQLITE_BYTEORDER==4321 + memcpy(p, &i, 8); +#else + p[0] = (i>>56)&0xFF; + p[1] = (i>>48)&0xFF; + p[2] = (i>>40)&0xFF; + p[3] = (i>>32)&0xFF; + p[4] = (i>>24)&0xFF; + p[5] = (i>>16)&0xFF; + p[6] = (i>> 8)&0xFF; + p[7] = (i>> 0)&0xFF; +#endif + return 8; +} + +/* +** Increment the reference count of node p. +*/ +static void nodeReference(RtreeNode *p){ + if( p ){ + assert( p->nRef>0 ); + p->nRef++; + } +} + +/* +** Clear the content of node p (set all bytes to 0x00). +*/ +static void nodeZero(Rtree *pRtree, RtreeNode *p){ + memset(&p->zData[2], 0, pRtree->iNodeSize-2); + p->isDirty = 1; +} + +/* +** Given a node number iNode, return the corresponding key to use +** in the Rtree.aHash table. +*/ +static unsigned int nodeHash(i64 iNode){ + return ((unsigned)iNode) % HASHSIZE; +} + +/* +** Search the node hash table for node iNode. If found, return a pointer +** to it. Otherwise, return 0. +*/ +static RtreeNode *nodeHashLookup(Rtree *pRtree, i64 iNode){ + RtreeNode *p; + for(p=pRtree->aHash[nodeHash(iNode)]; p && p->iNode!=iNode; p=p->pNext); + return p; +} + +/* +** Add node pNode to the node hash table. +*/ +static void nodeHashInsert(Rtree *pRtree, RtreeNode *pNode){ + int iHash; + assert( pNode->pNext==0 ); + iHash = nodeHash(pNode->iNode); + pNode->pNext = pRtree->aHash[iHash]; + pRtree->aHash[iHash] = pNode; +} + +/* +** Remove node pNode from the node hash table. +*/ +static void nodeHashDelete(Rtree *pRtree, RtreeNode *pNode){ + RtreeNode **pp; + if( pNode->iNode!=0 ){ + pp = &pRtree->aHash[nodeHash(pNode->iNode)]; + for( ; (*pp)!=pNode; pp = &(*pp)->pNext){ assert(*pp); } + *pp = pNode->pNext; + pNode->pNext = 0; + } +} + +/* +** Allocate and return new r-tree node. Initially, (RtreeNode.iNode==0), +** indicating that node has not yet been assigned a node number. It is +** assigned a node number when nodeWrite() is called to write the +** node contents out to the database. +*/ +static RtreeNode *nodeNew(Rtree *pRtree, RtreeNode *pParent){ + RtreeNode *pNode; + pNode = (RtreeNode *)sqlite3_malloc64(sizeof(RtreeNode) + pRtree->iNodeSize); + if( pNode ){ + memset(pNode, 0, sizeof(RtreeNode) + pRtree->iNodeSize); + pNode->zData = (u8 *)&pNode[1]; + pNode->nRef = 1; + pRtree->nNodeRef++; + pNode->pParent = pParent; + pNode->isDirty = 1; + nodeReference(pParent); + } + return pNode; +} + +/* +** Clear the Rtree.pNodeBlob object +*/ +static void nodeBlobReset(Rtree *pRtree){ + sqlite3_blob *pBlob = pRtree->pNodeBlob; + pRtree->pNodeBlob = 0; + sqlite3_blob_close(pBlob); +} + +/* +** Obtain a reference to an r-tree node. +*/ +static int nodeAcquire( + Rtree *pRtree, /* R-tree structure */ + i64 iNode, /* Node number to load */ + RtreeNode *pParent, /* Either the parent node or NULL */ + RtreeNode **ppNode /* OUT: Acquired node */ +){ + int rc = SQLITE_OK; + RtreeNode *pNode = 0; + + /* Check if the requested node is already in the hash table. If so, + ** increase its reference count and return it. + */ + if( (pNode = nodeHashLookup(pRtree, iNode))!=0 ){ + if( pParent && ALWAYS(pParent!=pNode->pParent) ){ + RTREE_IS_CORRUPT(pRtree); + return SQLITE_CORRUPT_VTAB; + } + pNode->nRef++; + *ppNode = pNode; + return SQLITE_OK; + } + + if( pRtree->pNodeBlob ){ + sqlite3_blob *pBlob = pRtree->pNodeBlob; + pRtree->pNodeBlob = 0; + rc = sqlite3_blob_reopen(pBlob, iNode); + pRtree->pNodeBlob = pBlob; + if( rc ){ + nodeBlobReset(pRtree); + if( rc==SQLITE_NOMEM ) return SQLITE_NOMEM; + } + } + if( pRtree->pNodeBlob==0 ){ + rc = sqlite3_blob_open(pRtree->db, pRtree->zDb, pRtree->zNodeName, + "data", iNode, 0, + &pRtree->pNodeBlob); + } + if( rc ){ + *ppNode = 0; + /* If unable to open an sqlite3_blob on the desired row, that can only + ** be because the shadow tables hold erroneous data. */ + if( rc==SQLITE_ERROR ){ + rc = SQLITE_CORRUPT_VTAB; + RTREE_IS_CORRUPT(pRtree); + } + }else if( pRtree->iNodeSize==sqlite3_blob_bytes(pRtree->pNodeBlob) ){ + pNode = (RtreeNode *)sqlite3_malloc64(sizeof(RtreeNode)+pRtree->iNodeSize); + if( !pNode ){ + rc = SQLITE_NOMEM; + }else{ + pNode->pParent = pParent; + pNode->zData = (u8 *)&pNode[1]; + pNode->nRef = 1; + pRtree->nNodeRef++; + pNode->iNode = iNode; + pNode->isDirty = 0; + pNode->pNext = 0; + rc = sqlite3_blob_read(pRtree->pNodeBlob, pNode->zData, + pRtree->iNodeSize, 0); + } + } + + /* If the root node was just loaded, set pRtree->iDepth to the height + ** of the r-tree structure. A height of zero means all data is stored on + ** the root node. A height of one means the children of the root node + ** are the leaves, and so on. If the depth as specified on the root node + ** is greater than RTREE_MAX_DEPTH, the r-tree structure must be corrupt. + */ + if( rc==SQLITE_OK && pNode && iNode==1 ){ + pRtree->iDepth = readInt16(pNode->zData); + if( pRtree->iDepth>RTREE_MAX_DEPTH ){ + rc = SQLITE_CORRUPT_VTAB; + RTREE_IS_CORRUPT(pRtree); + } + } + + /* If no error has occurred so far, check if the "number of entries" + ** field on the node is too large. If so, set the return code to + ** SQLITE_CORRUPT_VTAB. + */ + if( pNode && rc==SQLITE_OK ){ + if( NCELL(pNode)>((pRtree->iNodeSize-4)/pRtree->nBytesPerCell) ){ + rc = SQLITE_CORRUPT_VTAB; + RTREE_IS_CORRUPT(pRtree); + } + } + + if( rc==SQLITE_OK ){ + if( pNode!=0 ){ + nodeReference(pParent); + nodeHashInsert(pRtree, pNode); + }else{ + rc = SQLITE_CORRUPT_VTAB; + RTREE_IS_CORRUPT(pRtree); + } + *ppNode = pNode; + }else{ + nodeBlobReset(pRtree); + if( pNode ){ + pRtree->nNodeRef--; + sqlite3_free(pNode); + } + *ppNode = 0; + } + + return rc; +} + +/* +** Overwrite cell iCell of node pNode with the contents of pCell. +*/ +static void nodeOverwriteCell( + Rtree *pRtree, /* The overall R-Tree */ + RtreeNode *pNode, /* The node into which the cell is to be written */ + RtreeCell *pCell, /* The cell to write */ + int iCell /* Index into pNode into which pCell is written */ +){ + int ii; + u8 *p = &pNode->zData[4 + pRtree->nBytesPerCell*iCell]; + p += writeInt64(p, pCell->iRowid); + for(ii=0; iinDim2; ii++){ + p += writeCoord(p, &pCell->aCoord[ii]); + } + pNode->isDirty = 1; +} + +/* +** Remove the cell with index iCell from node pNode. +*/ +static void nodeDeleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell){ + u8 *pDst = &pNode->zData[4 + pRtree->nBytesPerCell*iCell]; + u8 *pSrc = &pDst[pRtree->nBytesPerCell]; + int nByte = (NCELL(pNode) - iCell - 1) * pRtree->nBytesPerCell; + memmove(pDst, pSrc, nByte); + writeInt16(&pNode->zData[2], NCELL(pNode)-1); + pNode->isDirty = 1; +} + +/* +** Insert the contents of cell pCell into node pNode. If the insert +** is successful, return SQLITE_OK. +** +** If there is not enough free space in pNode, return SQLITE_FULL. +*/ +static int nodeInsertCell( + Rtree *pRtree, /* The overall R-Tree */ + RtreeNode *pNode, /* Write new cell into this node */ + RtreeCell *pCell /* The cell to be inserted */ +){ + int nCell; /* Current number of cells in pNode */ + int nMaxCell; /* Maximum number of cells for pNode */ + + nMaxCell = (pRtree->iNodeSize-4)/pRtree->nBytesPerCell; + nCell = NCELL(pNode); + + assert( nCell<=nMaxCell ); + if( nCellzData[2], nCell+1); + pNode->isDirty = 1; + } + + return (nCell==nMaxCell); +} + +/* +** If the node is dirty, write it out to the database. +*/ +static int nodeWrite(Rtree *pRtree, RtreeNode *pNode){ + int rc = SQLITE_OK; + if( pNode->isDirty ){ + sqlite3_stmt *p = pRtree->pWriteNode; + if( pNode->iNode ){ + sqlite3_bind_int64(p, 1, pNode->iNode); + }else{ + sqlite3_bind_null(p, 1); + } + sqlite3_bind_blob(p, 2, pNode->zData, pRtree->iNodeSize, SQLITE_STATIC); + sqlite3_step(p); + pNode->isDirty = 0; + rc = sqlite3_reset(p); + sqlite3_bind_null(p, 2); + if( pNode->iNode==0 && rc==SQLITE_OK ){ + pNode->iNode = sqlite3_last_insert_rowid(pRtree->db); + nodeHashInsert(pRtree, pNode); + } + } + return rc; +} + +/* +** Release a reference to a node. If the node is dirty and the reference +** count drops to zero, the node data is written to the database. +*/ +static int nodeRelease(Rtree *pRtree, RtreeNode *pNode){ + int rc = SQLITE_OK; + if( pNode ){ + assert( pNode->nRef>0 ); + assert( pRtree->nNodeRef>0 ); + pNode->nRef--; + if( pNode->nRef==0 ){ + pRtree->nNodeRef--; + if( pNode->iNode==1 ){ + pRtree->iDepth = -1; + } + if( pNode->pParent ){ + rc = nodeRelease(pRtree, pNode->pParent); + } + if( rc==SQLITE_OK ){ + rc = nodeWrite(pRtree, pNode); + } + nodeHashDelete(pRtree, pNode); + sqlite3_free(pNode); + } + } + return rc; +} + +/* +** Return the 64-bit integer value associated with cell iCell of +** node pNode. If pNode is a leaf node, this is a rowid. If it is +** an internal node, then the 64-bit integer is a child page number. +*/ +static i64 nodeGetRowid( + Rtree *pRtree, /* The overall R-Tree */ + RtreeNode *pNode, /* The node from which to extract the ID */ + int iCell /* The cell index from which to extract the ID */ +){ + assert( iCellzData[4 + pRtree->nBytesPerCell*iCell]); +} + +/* +** Return coordinate iCoord from cell iCell in node pNode. +*/ +static void nodeGetCoord( + Rtree *pRtree, /* The overall R-Tree */ + RtreeNode *pNode, /* The node from which to extract a coordinate */ + int iCell, /* The index of the cell within the node */ + int iCoord, /* Which coordinate to extract */ + RtreeCoord *pCoord /* OUT: Space to write result to */ +){ + assert( iCellzData[12 + pRtree->nBytesPerCell*iCell + 4*iCoord], pCoord); +} + +/* +** Deserialize cell iCell of node pNode. Populate the structure pointed +** to by pCell with the results. +*/ +static void nodeGetCell( + Rtree *pRtree, /* The overall R-Tree */ + RtreeNode *pNode, /* The node containing the cell to be read */ + int iCell, /* Index of the cell within the node */ + RtreeCell *pCell /* OUT: Write the cell contents here */ +){ + u8 *pData; + RtreeCoord *pCoord; + int ii = 0; + pCell->iRowid = nodeGetRowid(pRtree, pNode, iCell); + pData = pNode->zData + (12 + pRtree->nBytesPerCell*iCell); + pCoord = pCell->aCoord; + do{ + readCoord(pData, &pCoord[ii]); + readCoord(pData+4, &pCoord[ii+1]); + pData += 8; + ii += 2; + }while( iinDim2 ); +} + + +/* Forward declaration for the function that does the work of +** the virtual table module xCreate() and xConnect() methods. +*/ +static int rtreeInit( + sqlite3 *, void *, int, const char *const*, sqlite3_vtab **, char **, int +); + +/* +** Rtree virtual table module xCreate method. +*/ +static int rtreeCreate( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + return rtreeInit(db, pAux, argc, argv, ppVtab, pzErr, 1); +} + +/* +** Rtree virtual table module xConnect method. +*/ +static int rtreeConnect( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + return rtreeInit(db, pAux, argc, argv, ppVtab, pzErr, 0); +} + +/* +** Increment the r-tree reference count. +*/ +static void rtreeReference(Rtree *pRtree){ + pRtree->nBusy++; +} + +/* +** Decrement the r-tree reference count. When the reference count reaches +** zero the structure is deleted. +*/ +static void rtreeRelease(Rtree *pRtree){ + pRtree->nBusy--; + if( pRtree->nBusy==0 ){ + pRtree->inWrTrans = 0; + assert( pRtree->nCursor==0 ); + nodeBlobReset(pRtree); + assert( pRtree->nNodeRef==0 || pRtree->bCorrupt ); + sqlite3_finalize(pRtree->pWriteNode); + sqlite3_finalize(pRtree->pDeleteNode); + sqlite3_finalize(pRtree->pReadRowid); + sqlite3_finalize(pRtree->pWriteRowid); + sqlite3_finalize(pRtree->pDeleteRowid); + sqlite3_finalize(pRtree->pReadParent); + sqlite3_finalize(pRtree->pWriteParent); + sqlite3_finalize(pRtree->pDeleteParent); + sqlite3_finalize(pRtree->pWriteAux); + sqlite3_free(pRtree->zReadAuxSql); + sqlite3_free(pRtree); + } +} + +/* +** Rtree virtual table module xDisconnect method. +*/ +static int rtreeDisconnect(sqlite3_vtab *pVtab){ + rtreeRelease((Rtree *)pVtab); + return SQLITE_OK; +} + +/* +** Rtree virtual table module xDestroy method. +*/ +static int rtreeDestroy(sqlite3_vtab *pVtab){ + Rtree *pRtree = (Rtree *)pVtab; + int rc; + char *zCreate = sqlite3_mprintf( + "DROP TABLE '%q'.'%q_node';" + "DROP TABLE '%q'.'%q_rowid';" + "DROP TABLE '%q'.'%q_parent';", + pRtree->zDb, pRtree->zName, + pRtree->zDb, pRtree->zName, + pRtree->zDb, pRtree->zName + ); + if( !zCreate ){ + rc = SQLITE_NOMEM; + }else{ + nodeBlobReset(pRtree); + rc = sqlite3_exec(pRtree->db, zCreate, 0, 0, 0); + sqlite3_free(zCreate); + } + if( rc==SQLITE_OK ){ + rtreeRelease(pRtree); + } + + return rc; +} + +/* +** Rtree virtual table module xOpen method. +*/ +static int rtreeOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){ + int rc = SQLITE_NOMEM; + Rtree *pRtree = (Rtree *)pVTab; + RtreeCursor *pCsr; + + pCsr = (RtreeCursor *)sqlite3_malloc64(sizeof(RtreeCursor)); + if( pCsr ){ + memset(pCsr, 0, sizeof(RtreeCursor)); + pCsr->base.pVtab = pVTab; + rc = SQLITE_OK; + pRtree->nCursor++; + } + *ppCursor = (sqlite3_vtab_cursor *)pCsr; + + return rc; +} + + +/* +** Reset a cursor back to its initial state. +*/ +static void resetCursor(RtreeCursor *pCsr){ + Rtree *pRtree = (Rtree *)(pCsr->base.pVtab); + int ii; + sqlite3_stmt *pStmt; + if( pCsr->aConstraint ){ + int i; /* Used to iterate through constraint array */ + for(i=0; inConstraint; i++){ + sqlite3_rtree_query_info *pInfo = pCsr->aConstraint[i].pInfo; + if( pInfo ){ + if( pInfo->xDelUser ) pInfo->xDelUser(pInfo->pUser); + sqlite3_free(pInfo); + } + } + sqlite3_free(pCsr->aConstraint); + pCsr->aConstraint = 0; + } + for(ii=0; iiaNode[ii]); + sqlite3_free(pCsr->aPoint); + pStmt = pCsr->pReadAux; + memset(pCsr, 0, sizeof(RtreeCursor)); + pCsr->base.pVtab = (sqlite3_vtab*)pRtree; + pCsr->pReadAux = pStmt; + + /* The following will only fail if the previous sqlite3_step() call failed, + ** in which case the error has already been caught. This statement never + ** encounters an error within an sqlite3_column_xxx() function, as it + ** calls sqlite3_column_value(), which does not use malloc(). So it is safe + ** to ignore the error code here. */ + sqlite3_reset(pStmt); +} + +/* +** Rtree virtual table module xClose method. +*/ +static int rtreeClose(sqlite3_vtab_cursor *cur){ + Rtree *pRtree = (Rtree *)(cur->pVtab); + RtreeCursor *pCsr = (RtreeCursor *)cur; + assert( pRtree->nCursor>0 ); + resetCursor(pCsr); + sqlite3_finalize(pCsr->pReadAux); + sqlite3_free(pCsr); + pRtree->nCursor--; + if( pRtree->nCursor==0 && pRtree->inWrTrans==0 ){ + nodeBlobReset(pRtree); + } + return SQLITE_OK; +} + +/* +** Rtree virtual table module xEof method. +** +** Return non-zero if the cursor does not currently point to a valid +** record (i.e if the scan has finished), or zero otherwise. +*/ +static int rtreeEof(sqlite3_vtab_cursor *cur){ + RtreeCursor *pCsr = (RtreeCursor *)cur; + return pCsr->atEOF; +} + +/* +** Convert raw bits from the on-disk RTree record into a coordinate value. +** The on-disk format is big-endian and needs to be converted for little- +** endian platforms. The on-disk record stores integer coordinates if +** eInt is true and it stores 32-bit floating point records if eInt is +** false. a[] is the four bytes of the on-disk record to be decoded. +** Store the results in "r". +** +** There are five versions of this macro. The last one is generic. The +** other four are various architectures-specific optimizations. +*/ +#if SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 +#define RTREE_DECODE_COORD(eInt, a, r) { \ + RtreeCoord c; /* Coordinate decoded */ \ + c.u = _byteswap_ulong(*(u32*)a); \ + r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ +} +#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 +#define RTREE_DECODE_COORD(eInt, a, r) { \ + RtreeCoord c; /* Coordinate decoded */ \ + c.u = __builtin_bswap32(*(u32*)a); \ + r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ +} +#elif SQLITE_BYTEORDER==1234 +#define RTREE_DECODE_COORD(eInt, a, r) { \ + RtreeCoord c; /* Coordinate decoded */ \ + memcpy(&c.u,a,4); \ + c.u = ((c.u>>24)&0xff)|((c.u>>8)&0xff00)| \ + ((c.u&0xff)<<24)|((c.u&0xff00)<<8); \ + r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ +} +#elif SQLITE_BYTEORDER==4321 +#define RTREE_DECODE_COORD(eInt, a, r) { \ + RtreeCoord c; /* Coordinate decoded */ \ + memcpy(&c.u,a,4); \ + r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ +} +#else +#define RTREE_DECODE_COORD(eInt, a, r) { \ + RtreeCoord c; /* Coordinate decoded */ \ + c.u = ((u32)a[0]<<24) + ((u32)a[1]<<16) \ + +((u32)a[2]<<8) + a[3]; \ + r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ +} +#endif + +/* +** Check the RTree node or entry given by pCellData and p against the MATCH +** constraint pConstraint. +*/ +static int rtreeCallbackConstraint( + RtreeConstraint *pConstraint, /* The constraint to test */ + int eInt, /* True if RTree holding integer coordinates */ + u8 *pCellData, /* Raw cell content */ + RtreeSearchPoint *pSearch, /* Container of this cell */ + sqlite3_rtree_dbl *prScore, /* OUT: score for the cell */ + int *peWithin /* OUT: visibility of the cell */ +){ + sqlite3_rtree_query_info *pInfo = pConstraint->pInfo; /* Callback info */ + int nCoord = pInfo->nCoord; /* No. of coordinates */ + int rc; /* Callback return code */ + RtreeCoord c; /* Translator union */ + sqlite3_rtree_dbl aCoord[RTREE_MAX_DIMENSIONS*2]; /* Decoded coordinates */ + + assert( pConstraint->op==RTREE_MATCH || pConstraint->op==RTREE_QUERY ); + assert( nCoord==2 || nCoord==4 || nCoord==6 || nCoord==8 || nCoord==10 ); + + if( pConstraint->op==RTREE_QUERY && pSearch->iLevel==1 ){ + pInfo->iRowid = readInt64(pCellData); + } + pCellData += 8; +#ifndef SQLITE_RTREE_INT_ONLY + if( eInt==0 ){ + switch( nCoord ){ + case 10: readCoord(pCellData+36, &c); aCoord[9] = c.f; + readCoord(pCellData+32, &c); aCoord[8] = c.f; + case 8: readCoord(pCellData+28, &c); aCoord[7] = c.f; + readCoord(pCellData+24, &c); aCoord[6] = c.f; + case 6: readCoord(pCellData+20, &c); aCoord[5] = c.f; + readCoord(pCellData+16, &c); aCoord[4] = c.f; + case 4: readCoord(pCellData+12, &c); aCoord[3] = c.f; + readCoord(pCellData+8, &c); aCoord[2] = c.f; + default: readCoord(pCellData+4, &c); aCoord[1] = c.f; + readCoord(pCellData, &c); aCoord[0] = c.f; + } + }else +#endif + { + switch( nCoord ){ + case 10: readCoord(pCellData+36, &c); aCoord[9] = c.i; + readCoord(pCellData+32, &c); aCoord[8] = c.i; + case 8: readCoord(pCellData+28, &c); aCoord[7] = c.i; + readCoord(pCellData+24, &c); aCoord[6] = c.i; + case 6: readCoord(pCellData+20, &c); aCoord[5] = c.i; + readCoord(pCellData+16, &c); aCoord[4] = c.i; + case 4: readCoord(pCellData+12, &c); aCoord[3] = c.i; + readCoord(pCellData+8, &c); aCoord[2] = c.i; + default: readCoord(pCellData+4, &c); aCoord[1] = c.i; + readCoord(pCellData, &c); aCoord[0] = c.i; + } + } + if( pConstraint->op==RTREE_MATCH ){ + int eWithin = 0; + rc = pConstraint->u.xGeom((sqlite3_rtree_geometry*)pInfo, + nCoord, aCoord, &eWithin); + if( eWithin==0 ) *peWithin = NOT_WITHIN; + *prScore = RTREE_ZERO; + }else{ + pInfo->aCoord = aCoord; + pInfo->iLevel = pSearch->iLevel - 1; + pInfo->rScore = pInfo->rParentScore = pSearch->rScore; + pInfo->eWithin = pInfo->eParentWithin = pSearch->eWithin; + rc = pConstraint->u.xQueryFunc(pInfo); + if( pInfo->eWithin<*peWithin ) *peWithin = pInfo->eWithin; + if( pInfo->rScore<*prScore || *prScorerScore; + } + } + return rc; +} + +/* +** Check the internal RTree node given by pCellData against constraint p. +** If this constraint cannot be satisfied by any child within the node, +** set *peWithin to NOT_WITHIN. +*/ +static void rtreeNonleafConstraint( + RtreeConstraint *p, /* The constraint to test */ + int eInt, /* True if RTree holds integer coordinates */ + u8 *pCellData, /* Raw cell content as appears on disk */ + int *peWithin /* Adjust downward, as appropriate */ +){ + sqlite3_rtree_dbl val; /* Coordinate value convert to a double */ + + /* p->iCoord might point to either a lower or upper bound coordinate + ** in a coordinate pair. But make pCellData point to the lower bound. + */ + pCellData += 8 + 4*(p->iCoord&0xfe); + + assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE + || p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_TRUE + || p->op==RTREE_FALSE ); + assert( FOUR_BYTE_ALIGNED(pCellData) ); + switch( p->op ){ + case RTREE_TRUE: return; /* Always satisfied */ + case RTREE_FALSE: break; /* Never satisfied */ + case RTREE_EQ: + RTREE_DECODE_COORD(eInt, pCellData, val); + /* val now holds the lower bound of the coordinate pair */ + if( p->u.rValue>=val ){ + pCellData += 4; + RTREE_DECODE_COORD(eInt, pCellData, val); + /* val now holds the upper bound of the coordinate pair */ + if( p->u.rValue<=val ) return; + } + break; + case RTREE_LE: + case RTREE_LT: + RTREE_DECODE_COORD(eInt, pCellData, val); + /* val now holds the lower bound of the coordinate pair */ + if( p->u.rValue>=val ) return; + break; + + default: + pCellData += 4; + RTREE_DECODE_COORD(eInt, pCellData, val); + /* val now holds the upper bound of the coordinate pair */ + if( p->u.rValue<=val ) return; + break; + } + *peWithin = NOT_WITHIN; +} + +/* +** Check the leaf RTree cell given by pCellData against constraint p. +** If this constraint is not satisfied, set *peWithin to NOT_WITHIN. +** If the constraint is satisfied, leave *peWithin unchanged. +** +** The constraint is of the form: xN op $val +** +** The op is given by p->op. The xN is p->iCoord-th coordinate in +** pCellData. $val is given by p->u.rValue. +*/ +static void rtreeLeafConstraint( + RtreeConstraint *p, /* The constraint to test */ + int eInt, /* True if RTree holds integer coordinates */ + u8 *pCellData, /* Raw cell content as appears on disk */ + int *peWithin /* Adjust downward, as appropriate */ +){ + RtreeDValue xN; /* Coordinate value converted to a double */ + + assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE + || p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_TRUE + || p->op==RTREE_FALSE ); + pCellData += 8 + p->iCoord*4; + assert( FOUR_BYTE_ALIGNED(pCellData) ); + RTREE_DECODE_COORD(eInt, pCellData, xN); + switch( p->op ){ + case RTREE_TRUE: return; /* Always satisfied */ + case RTREE_FALSE: break; /* Never satisfied */ + case RTREE_LE: if( xN <= p->u.rValue ) return; break; + case RTREE_LT: if( xN < p->u.rValue ) return; break; + case RTREE_GE: if( xN >= p->u.rValue ) return; break; + case RTREE_GT: if( xN > p->u.rValue ) return; break; + default: if( xN == p->u.rValue ) return; break; + } + *peWithin = NOT_WITHIN; +} + +/* +** One of the cells in node pNode is guaranteed to have a 64-bit +** integer value equal to iRowid. Return the index of this cell. +*/ +static int nodeRowidIndex( + Rtree *pRtree, + RtreeNode *pNode, + i64 iRowid, + int *piIndex +){ + int ii; + int nCell = NCELL(pNode); + assert( nCell<200 ); + for(ii=0; iipParent; + if( ALWAYS(pParent) ){ + return nodeRowidIndex(pRtree, pParent, pNode->iNode, piIndex); + }else{ + *piIndex = -1; + return SQLITE_OK; + } +} + +/* +** Compare two search points. Return negative, zero, or positive if the first +** is less than, equal to, or greater than the second. +** +** The rScore is the primary key. Smaller rScore values come first. +** If the rScore is a tie, then use iLevel as the tie breaker with smaller +** iLevel values coming first. In this way, if rScore is the same for all +** SearchPoints, then iLevel becomes the deciding factor and the result +** is a depth-first search, which is the desired default behavior. +*/ +static int rtreeSearchPointCompare( + const RtreeSearchPoint *pA, + const RtreeSearchPoint *pB +){ + if( pA->rScorerScore ) return -1; + if( pA->rScore>pB->rScore ) return +1; + if( pA->iLeveliLevel ) return -1; + if( pA->iLevel>pB->iLevel ) return +1; + return 0; +} + +/* +** Interchange two search points in a cursor. +*/ +static void rtreeSearchPointSwap(RtreeCursor *p, int i, int j){ + RtreeSearchPoint t = p->aPoint[i]; + assert( iaPoint[i] = p->aPoint[j]; + p->aPoint[j] = t; + i++; j++; + if( i=RTREE_CACHE_SZ ){ + nodeRelease(RTREE_OF_CURSOR(p), p->aNode[i]); + p->aNode[i] = 0; + }else{ + RtreeNode *pTemp = p->aNode[i]; + p->aNode[i] = p->aNode[j]; + p->aNode[j] = pTemp; + } + } +} + +/* +** Return the search point with the lowest current score. +*/ +static RtreeSearchPoint *rtreeSearchPointFirst(RtreeCursor *pCur){ + return pCur->bPoint ? &pCur->sPoint : pCur->nPoint ? pCur->aPoint : 0; +} + +/* +** Get the RtreeNode for the search point with the lowest score. +*/ +static RtreeNode *rtreeNodeOfFirstSearchPoint(RtreeCursor *pCur, int *pRC){ + sqlite3_int64 id; + int ii = 1 - pCur->bPoint; + assert( ii==0 || ii==1 ); + assert( pCur->bPoint || pCur->nPoint ); + if( pCur->aNode[ii]==0 ){ + assert( pRC!=0 ); + id = ii ? pCur->aPoint[0].id : pCur->sPoint.id; + *pRC = nodeAcquire(RTREE_OF_CURSOR(pCur), id, 0, &pCur->aNode[ii]); + } + return pCur->aNode[ii]; +} + +/* +** Push a new element onto the priority queue +*/ +static RtreeSearchPoint *rtreeEnqueue( + RtreeCursor *pCur, /* The cursor */ + RtreeDValue rScore, /* Score for the new search point */ + u8 iLevel /* Level for the new search point */ +){ + int i, j; + RtreeSearchPoint *pNew; + if( pCur->nPoint>=pCur->nPointAlloc ){ + int nNew = pCur->nPointAlloc*2 + 8; + pNew = sqlite3_realloc64(pCur->aPoint, nNew*sizeof(pCur->aPoint[0])); + if( pNew==0 ) return 0; + pCur->aPoint = pNew; + pCur->nPointAlloc = nNew; + } + i = pCur->nPoint++; + pNew = pCur->aPoint + i; + pNew->rScore = rScore; + pNew->iLevel = iLevel; + assert( iLevel<=RTREE_MAX_DEPTH ); + while( i>0 ){ + RtreeSearchPoint *pParent; + j = (i-1)/2; + pParent = pCur->aPoint + j; + if( rtreeSearchPointCompare(pNew, pParent)>=0 ) break; + rtreeSearchPointSwap(pCur, j, i); + i = j; + pNew = pParent; + } + return pNew; +} + +/* +** Allocate a new RtreeSearchPoint and return a pointer to it. Return +** NULL if malloc fails. +*/ +static RtreeSearchPoint *rtreeSearchPointNew( + RtreeCursor *pCur, /* The cursor */ + RtreeDValue rScore, /* Score for the new search point */ + u8 iLevel /* Level for the new search point */ +){ + RtreeSearchPoint *pNew, *pFirst; + pFirst = rtreeSearchPointFirst(pCur); + pCur->anQueue[iLevel]++; + if( pFirst==0 + || pFirst->rScore>rScore + || (pFirst->rScore==rScore && pFirst->iLevel>iLevel) + ){ + if( pCur->bPoint ){ + int ii; + pNew = rtreeEnqueue(pCur, rScore, iLevel); + if( pNew==0 ) return 0; + ii = (int)(pNew - pCur->aPoint) + 1; + assert( ii==1 ); + if( ALWAYS(iiaNode[ii]==0 ); + pCur->aNode[ii] = pCur->aNode[0]; + }else{ + nodeRelease(RTREE_OF_CURSOR(pCur), pCur->aNode[0]); + } + pCur->aNode[0] = 0; + *pNew = pCur->sPoint; + } + pCur->sPoint.rScore = rScore; + pCur->sPoint.iLevel = iLevel; + pCur->bPoint = 1; + return &pCur->sPoint; + }else{ + return rtreeEnqueue(pCur, rScore, iLevel); + } +} + +#if 0 +/* Tracing routines for the RtreeSearchPoint queue */ +static void tracePoint(RtreeSearchPoint *p, int idx, RtreeCursor *pCur){ + if( idx<0 ){ printf(" s"); }else{ printf("%2d", idx); } + printf(" %d.%05lld.%02d %g %d", + p->iLevel, p->id, p->iCell, p->rScore, p->eWithin + ); + idx++; + if( idxaNode[idx]); + }else{ + printf("\n"); + } +} +static void traceQueue(RtreeCursor *pCur, const char *zPrefix){ + int ii; + printf("=== %9s ", zPrefix); + if( pCur->bPoint ){ + tracePoint(&pCur->sPoint, -1, pCur); + } + for(ii=0; iinPoint; ii++){ + if( ii>0 || pCur->bPoint ) printf(" "); + tracePoint(&pCur->aPoint[ii], ii, pCur); + } +} +# define RTREE_QUEUE_TRACE(A,B) traceQueue(A,B) +#else +# define RTREE_QUEUE_TRACE(A,B) /* no-op */ +#endif + +/* Remove the search point with the lowest current score. +*/ +static void rtreeSearchPointPop(RtreeCursor *p){ + int i, j, k, n; + i = 1 - p->bPoint; + assert( i==0 || i==1 ); + if( p->aNode[i] ){ + nodeRelease(RTREE_OF_CURSOR(p), p->aNode[i]); + p->aNode[i] = 0; + } + if( p->bPoint ){ + p->anQueue[p->sPoint.iLevel]--; + p->bPoint = 0; + }else if( ALWAYS(p->nPoint) ){ + p->anQueue[p->aPoint[0].iLevel]--; + n = --p->nPoint; + p->aPoint[0] = p->aPoint[n]; + if( naNode[1] = p->aNode[n+1]; + p->aNode[n+1] = 0; + } + i = 0; + while( (j = i*2+1)aPoint[k], &p->aPoint[j])<0 ){ + if( rtreeSearchPointCompare(&p->aPoint[k], &p->aPoint[i])<0 ){ + rtreeSearchPointSwap(p, i, k); + i = k; + }else{ + break; + } + }else{ + if( rtreeSearchPointCompare(&p->aPoint[j], &p->aPoint[i])<0 ){ + rtreeSearchPointSwap(p, i, j); + i = j; + }else{ + break; + } + } + } + } +} + + +/* +** Continue the search on cursor pCur until the front of the queue +** contains an entry suitable for returning as a result-set row, +** or until the RtreeSearchPoint queue is empty, indicating that the +** query has completed. +*/ +static int rtreeStepToLeaf(RtreeCursor *pCur){ + RtreeSearchPoint *p; + Rtree *pRtree = RTREE_OF_CURSOR(pCur); + RtreeNode *pNode; + int eWithin; + int rc = SQLITE_OK; + int nCell; + int nConstraint = pCur->nConstraint; + int ii; + int eInt; + RtreeSearchPoint x; + + eInt = pRtree->eCoordType==RTREE_COORD_INT32; + while( (p = rtreeSearchPointFirst(pCur))!=0 && p->iLevel>0 ){ + u8 *pCellData; + pNode = rtreeNodeOfFirstSearchPoint(pCur, &rc); + if( rc ) return rc; + nCell = NCELL(pNode); + assert( nCell<200 ); + pCellData = pNode->zData + (4+pRtree->nBytesPerCell*p->iCell); + while( p->iCellaConstraint + ii; + if( pConstraint->op>=RTREE_MATCH ){ + rc = rtreeCallbackConstraint(pConstraint, eInt, pCellData, p, + &rScore, &eWithin); + if( rc ) return rc; + }else if( p->iLevel==1 ){ + rtreeLeafConstraint(pConstraint, eInt, pCellData, &eWithin); + }else{ + rtreeNonleafConstraint(pConstraint, eInt, pCellData, &eWithin); + } + if( eWithin==NOT_WITHIN ){ + p->iCell++; + pCellData += pRtree->nBytesPerCell; + break; + } + } + if( eWithin==NOT_WITHIN ) continue; + p->iCell++; + x.iLevel = p->iLevel - 1; + if( x.iLevel ){ + x.id = readInt64(pCellData); + for(ii=0; iinPoint; ii++){ + if( pCur->aPoint[ii].id==x.id ){ + RTREE_IS_CORRUPT(pRtree); + return SQLITE_CORRUPT_VTAB; + } + } + x.iCell = 0; + }else{ + x.id = p->id; + x.iCell = p->iCell - 1; + } + if( p->iCell>=nCell ){ + RTREE_QUEUE_TRACE(pCur, "POP-S:"); + rtreeSearchPointPop(pCur); + } + if( rScoreeWithin = (u8)eWithin; + p->id = x.id; + p->iCell = x.iCell; + RTREE_QUEUE_TRACE(pCur, "PUSH-S:"); + break; + } + if( p->iCell>=nCell ){ + RTREE_QUEUE_TRACE(pCur, "POP-Se:"); + rtreeSearchPointPop(pCur); + } + } + pCur->atEOF = p==0; + return SQLITE_OK; +} + +/* +** Rtree virtual table module xNext method. +*/ +static int rtreeNext(sqlite3_vtab_cursor *pVtabCursor){ + RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor; + int rc = SQLITE_OK; + + /* Move to the next entry that matches the configured constraints. */ + RTREE_QUEUE_TRACE(pCsr, "POP-Nx:"); + if( pCsr->bAuxValid ){ + pCsr->bAuxValid = 0; + sqlite3_reset(pCsr->pReadAux); + } + rtreeSearchPointPop(pCsr); + rc = rtreeStepToLeaf(pCsr); + return rc; +} + +/* +** Rtree virtual table module xRowid method. +*/ +static int rtreeRowid(sqlite3_vtab_cursor *pVtabCursor, sqlite_int64 *pRowid){ + RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor; + RtreeSearchPoint *p = rtreeSearchPointFirst(pCsr); + int rc = SQLITE_OK; + RtreeNode *pNode = rtreeNodeOfFirstSearchPoint(pCsr, &rc); + if( rc==SQLITE_OK && ALWAYS(p) ){ + if( p->iCell>=NCELL(pNode) ){ + rc = SQLITE_ABORT; + }else{ + *pRowid = nodeGetRowid(RTREE_OF_CURSOR(pCsr), pNode, p->iCell); + } + } + return rc; +} + +/* +** Rtree virtual table module xColumn method. +*/ +static int rtreeColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i){ + Rtree *pRtree = (Rtree *)cur->pVtab; + RtreeCursor *pCsr = (RtreeCursor *)cur; + RtreeSearchPoint *p = rtreeSearchPointFirst(pCsr); + RtreeCoord c; + int rc = SQLITE_OK; + RtreeNode *pNode = rtreeNodeOfFirstSearchPoint(pCsr, &rc); + + if( rc ) return rc; + if( NEVER(p==0) ) return SQLITE_OK; + if( p->iCell>=NCELL(pNode) ) return SQLITE_ABORT; + if( i==0 ){ + sqlite3_result_int64(ctx, nodeGetRowid(pRtree, pNode, p->iCell)); + }else if( i<=pRtree->nDim2 ){ + nodeGetCoord(pRtree, pNode, p->iCell, i-1, &c); +#ifndef SQLITE_RTREE_INT_ONLY + if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ + sqlite3_result_double(ctx, c.f); + }else +#endif + { + assert( pRtree->eCoordType==RTREE_COORD_INT32 ); + sqlite3_result_int(ctx, c.i); + } + }else{ + if( !pCsr->bAuxValid ){ + if( pCsr->pReadAux==0 ){ + rc = sqlite3_prepare_v3(pRtree->db, pRtree->zReadAuxSql, -1, 0, + &pCsr->pReadAux, 0); + if( rc ) return rc; + } + sqlite3_bind_int64(pCsr->pReadAux, 1, + nodeGetRowid(pRtree, pNode, p->iCell)); + rc = sqlite3_step(pCsr->pReadAux); + if( rc==SQLITE_ROW ){ + pCsr->bAuxValid = 1; + }else{ + sqlite3_reset(pCsr->pReadAux); + if( rc==SQLITE_DONE ) rc = SQLITE_OK; + return rc; + } + } + sqlite3_result_value(ctx, + sqlite3_column_value(pCsr->pReadAux, i - pRtree->nDim2 + 1)); + } + return SQLITE_OK; +} + +/* +** Use nodeAcquire() to obtain the leaf node containing the record with +** rowid iRowid. If successful, set *ppLeaf to point to the node and +** return SQLITE_OK. If there is no such record in the table, set +** *ppLeaf to 0 and return SQLITE_OK. If an error occurs, set *ppLeaf +** to zero and return an SQLite error code. +*/ +static int findLeafNode( + Rtree *pRtree, /* RTree to search */ + i64 iRowid, /* The rowid searching for */ + RtreeNode **ppLeaf, /* Write the node here */ + sqlite3_int64 *piNode /* Write the node-id here */ +){ + int rc; + *ppLeaf = 0; + sqlite3_bind_int64(pRtree->pReadRowid, 1, iRowid); + if( sqlite3_step(pRtree->pReadRowid)==SQLITE_ROW ){ + i64 iNode = sqlite3_column_int64(pRtree->pReadRowid, 0); + if( piNode ) *piNode = iNode; + rc = nodeAcquire(pRtree, iNode, 0, ppLeaf); + sqlite3_reset(pRtree->pReadRowid); + }else{ + rc = sqlite3_reset(pRtree->pReadRowid); + } + return rc; +} + +/* +** This function is called to configure the RtreeConstraint object passed +** as the second argument for a MATCH constraint. The value passed as the +** first argument to this function is the right-hand operand to the MATCH +** operator. +*/ +static int deserializeGeometry(sqlite3_value *pValue, RtreeConstraint *pCons){ + RtreeMatchArg *pBlob, *pSrc; /* BLOB returned by geometry function */ + sqlite3_rtree_query_info *pInfo; /* Callback information */ + + pSrc = sqlite3_value_pointer(pValue, "RtreeMatchArg"); + if( pSrc==0 ) return SQLITE_ERROR; + pInfo = (sqlite3_rtree_query_info*) + sqlite3_malloc64( sizeof(*pInfo)+pSrc->iSize ); + if( !pInfo ) return SQLITE_NOMEM; + memset(pInfo, 0, sizeof(*pInfo)); + pBlob = (RtreeMatchArg*)&pInfo[1]; + memcpy(pBlob, pSrc, pSrc->iSize); + pInfo->pContext = pBlob->cb.pContext; + pInfo->nParam = pBlob->nParam; + pInfo->aParam = pBlob->aParam; + pInfo->apSqlParam = pBlob->apSqlParam; + + if( pBlob->cb.xGeom ){ + pCons->u.xGeom = pBlob->cb.xGeom; + }else{ + pCons->op = RTREE_QUERY; + pCons->u.xQueryFunc = pBlob->cb.xQueryFunc; + } + pCons->pInfo = pInfo; + return SQLITE_OK; +} + +SQLITE_PRIVATE int sqlite3IntFloatCompare(i64,double); + +/* +** Rtree virtual table module xFilter method. +*/ +static int rtreeFilter( + sqlite3_vtab_cursor *pVtabCursor, + int idxNum, const char *idxStr, + int argc, sqlite3_value **argv +){ + Rtree *pRtree = (Rtree *)pVtabCursor->pVtab; + RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor; + RtreeNode *pRoot = 0; + int ii; + int rc = SQLITE_OK; + int iCell = 0; + + rtreeReference(pRtree); + + /* Reset the cursor to the same state as rtreeOpen() leaves it in. */ + resetCursor(pCsr); + + pCsr->iStrategy = idxNum; + if( idxNum==1 ){ + /* Special case - lookup by rowid. */ + RtreeNode *pLeaf; /* Leaf on which the required cell resides */ + RtreeSearchPoint *p; /* Search point for the leaf */ + i64 iRowid = sqlite3_value_int64(argv[0]); + i64 iNode = 0; + int eType = sqlite3_value_numeric_type(argv[0]); + if( eType==SQLITE_INTEGER + || (eType==SQLITE_FLOAT + && 0==sqlite3IntFloatCompare(iRowid,sqlite3_value_double(argv[0]))) + ){ + rc = findLeafNode(pRtree, iRowid, &pLeaf, &iNode); + }else{ + rc = SQLITE_OK; + pLeaf = 0; + } + if( rc==SQLITE_OK && pLeaf!=0 ){ + p = rtreeSearchPointNew(pCsr, RTREE_ZERO, 0); + assert( p!=0 ); /* Always returns pCsr->sPoint */ + pCsr->aNode[0] = pLeaf; + p->id = iNode; + p->eWithin = PARTLY_WITHIN; + rc = nodeRowidIndex(pRtree, pLeaf, iRowid, &iCell); + p->iCell = (u8)iCell; + RTREE_QUEUE_TRACE(pCsr, "PUSH-F1:"); + }else{ + pCsr->atEOF = 1; + } + }else{ + /* Normal case - r-tree scan. Set up the RtreeCursor.aConstraint array + ** with the configured constraints. + */ + rc = nodeAcquire(pRtree, 1, 0, &pRoot); + if( rc==SQLITE_OK && argc>0 ){ + pCsr->aConstraint = sqlite3_malloc64(sizeof(RtreeConstraint)*argc); + pCsr->nConstraint = argc; + if( !pCsr->aConstraint ){ + rc = SQLITE_NOMEM; + }else{ + memset(pCsr->aConstraint, 0, sizeof(RtreeConstraint)*argc); + memset(pCsr->anQueue, 0, sizeof(u32)*(pRtree->iDepth + 1)); + assert( (idxStr==0 && argc==0) + || (idxStr && (int)strlen(idxStr)==argc*2) ); + for(ii=0; iiaConstraint[ii]; + int eType = sqlite3_value_numeric_type(argv[ii]); + p->op = idxStr[ii*2]; + p->iCoord = idxStr[ii*2+1]-'0'; + if( p->op>=RTREE_MATCH ){ + /* A MATCH operator. The right-hand-side must be a blob that + ** can be cast into an RtreeMatchArg object. One created using + ** an sqlite3_rtree_geometry_callback() SQL user function. + */ + rc = deserializeGeometry(argv[ii], p); + if( rc!=SQLITE_OK ){ + break; + } + p->pInfo->nCoord = pRtree->nDim2; + p->pInfo->anQueue = pCsr->anQueue; + p->pInfo->mxLevel = pRtree->iDepth + 1; + }else if( eType==SQLITE_INTEGER ){ + sqlite3_int64 iVal = sqlite3_value_int64(argv[ii]); +#ifdef SQLITE_RTREE_INT_ONLY + p->u.rValue = iVal; +#else + p->u.rValue = (double)iVal; + if( iVal>=((sqlite3_int64)1)<<48 + || iVal<=-(((sqlite3_int64)1)<<48) + ){ + if( p->op==RTREE_LT ) p->op = RTREE_LE; + if( p->op==RTREE_GT ) p->op = RTREE_GE; + } +#endif + }else if( eType==SQLITE_FLOAT ){ +#ifdef SQLITE_RTREE_INT_ONLY + p->u.rValue = sqlite3_value_int64(argv[ii]); +#else + p->u.rValue = sqlite3_value_double(argv[ii]); +#endif + }else{ + p->u.rValue = RTREE_ZERO; + if( eType==SQLITE_NULL ){ + p->op = RTREE_FALSE; + }else if( p->op==RTREE_LT || p->op==RTREE_LE ){ + p->op = RTREE_TRUE; + }else{ + p->op = RTREE_FALSE; + } + } + } + } + } + if( rc==SQLITE_OK ){ + RtreeSearchPoint *pNew; + assert( pCsr->bPoint==0 ); /* Due to the resetCursor() call above */ + pNew = rtreeSearchPointNew(pCsr, RTREE_ZERO, (u8)(pRtree->iDepth+1)); + if( NEVER(pNew==0) ){ /* Because pCsr->bPoint was FALSE */ + return SQLITE_NOMEM; + } + pNew->id = 1; + pNew->iCell = 0; + pNew->eWithin = PARTLY_WITHIN; + assert( pCsr->bPoint==1 ); + pCsr->aNode[0] = pRoot; + pRoot = 0; + RTREE_QUEUE_TRACE(pCsr, "PUSH-Fm:"); + rc = rtreeStepToLeaf(pCsr); + } + } + + nodeRelease(pRtree, pRoot); + rtreeRelease(pRtree); + return rc; +} + +/* +** Rtree virtual table module xBestIndex method. There are three +** table scan strategies to choose from (in order from most to +** least desirable): +** +** idxNum idxStr Strategy +** ------------------------------------------------ +** 1 Unused Direct lookup by rowid. +** 2 See below R-tree query or full-table scan. +** ------------------------------------------------ +** +** If strategy 1 is used, then idxStr is not meaningful. If strategy +** 2 is used, idxStr is formatted to contain 2 bytes for each +** constraint used. The first two bytes of idxStr correspond to +** the constraint in sqlite3_index_info.aConstraintUsage[] with +** (argvIndex==1) etc. +** +** The first of each pair of bytes in idxStr identifies the constraint +** operator as follows: +** +** Operator Byte Value +** ---------------------- +** = 0x41 ('A') +** <= 0x42 ('B') +** < 0x43 ('C') +** >= 0x44 ('D') +** > 0x45 ('E') +** MATCH 0x46 ('F') +** ---------------------- +** +** The second of each pair of bytes identifies the coordinate column +** to which the constraint applies. The leftmost coordinate column +** is 'a', the second from the left 'b' etc. +*/ +static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ + Rtree *pRtree = (Rtree*)tab; + int rc = SQLITE_OK; + int ii; + int bMatch = 0; /* True if there exists a MATCH constraint */ + i64 nRow; /* Estimated rows returned by this scan */ + + int iIdx = 0; + char zIdxStr[RTREE_MAX_DIMENSIONS*8+1]; + memset(zIdxStr, 0, sizeof(zIdxStr)); + + /* Check if there exists a MATCH constraint - even an unusable one. If there + ** is, do not consider the lookup-by-rowid plan as using such a plan would + ** require the VDBE to evaluate the MATCH constraint, which is not currently + ** possible. */ + for(ii=0; iinConstraint; ii++){ + if( pIdxInfo->aConstraint[ii].op==SQLITE_INDEX_CONSTRAINT_MATCH ){ + bMatch = 1; + } + } + + assert( pIdxInfo->idxStr==0 ); + for(ii=0; iinConstraint && iIdx<(int)(sizeof(zIdxStr)-1); ii++){ + struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[ii]; + + if( bMatch==0 && p->usable + && p->iColumn<=0 && p->op==SQLITE_INDEX_CONSTRAINT_EQ + ){ + /* We have an equality constraint on the rowid. Use strategy 1. */ + int jj; + for(jj=0; jjaConstraintUsage[jj].argvIndex = 0; + pIdxInfo->aConstraintUsage[jj].omit = 0; + } + pIdxInfo->idxNum = 1; + pIdxInfo->aConstraintUsage[ii].argvIndex = 1; + pIdxInfo->aConstraintUsage[jj].omit = 1; + + /* This strategy involves a two rowid lookups on an B-Tree structures + ** and then a linear search of an R-Tree node. This should be + ** considered almost as quick as a direct rowid lookup (for which + ** sqlite uses an internal cost of 0.0). It is expected to return + ** a single row. + */ + pIdxInfo->estimatedCost = 30.0; + pIdxInfo->estimatedRows = 1; + pIdxInfo->idxFlags = SQLITE_INDEX_SCAN_UNIQUE; + return SQLITE_OK; + } + + if( p->usable + && ((p->iColumn>0 && p->iColumn<=pRtree->nDim2) + || p->op==SQLITE_INDEX_CONSTRAINT_MATCH) + ){ + u8 op; + u8 doOmit = 1; + switch( p->op ){ + case SQLITE_INDEX_CONSTRAINT_EQ: op = RTREE_EQ; doOmit = 0; break; + case SQLITE_INDEX_CONSTRAINT_GT: op = RTREE_GT; doOmit = 0; break; + case SQLITE_INDEX_CONSTRAINT_LE: op = RTREE_LE; break; + case SQLITE_INDEX_CONSTRAINT_LT: op = RTREE_LT; doOmit = 0; break; + case SQLITE_INDEX_CONSTRAINT_GE: op = RTREE_GE; break; + case SQLITE_INDEX_CONSTRAINT_MATCH: op = RTREE_MATCH; break; + default: op = 0; break; + } + if( op ){ + zIdxStr[iIdx++] = op; + zIdxStr[iIdx++] = (char)(p->iColumn - 1 + '0'); + pIdxInfo->aConstraintUsage[ii].argvIndex = (iIdx/2); + pIdxInfo->aConstraintUsage[ii].omit = doOmit; + } + } + } + + pIdxInfo->idxNum = 2; + pIdxInfo->needToFreeIdxStr = 1; + if( iIdx>0 ){ + pIdxInfo->idxStr = sqlite3_malloc( iIdx+1 ); + if( pIdxInfo->idxStr==0 ){ + return SQLITE_NOMEM; + } + memcpy(pIdxInfo->idxStr, zIdxStr, iIdx+1); + } + + nRow = pRtree->nRowEst >> (iIdx/2); + pIdxInfo->estimatedCost = (double)6.0 * (double)nRow; + pIdxInfo->estimatedRows = nRow; + + return rc; +} + +/* +** Return the N-dimensional volume of the cell stored in *p. +*/ +static RtreeDValue cellArea(Rtree *pRtree, RtreeCell *p){ + RtreeDValue area = (RtreeDValue)1; + assert( pRtree->nDim>=1 && pRtree->nDim<=5 ); +#ifndef SQLITE_RTREE_INT_ONLY + if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ + switch( pRtree->nDim ){ + case 5: area = p->aCoord[9].f - p->aCoord[8].f; + case 4: area *= p->aCoord[7].f - p->aCoord[6].f; + case 3: area *= p->aCoord[5].f - p->aCoord[4].f; + case 2: area *= p->aCoord[3].f - p->aCoord[2].f; + default: area *= p->aCoord[1].f - p->aCoord[0].f; + } + }else +#endif + { + switch( pRtree->nDim ){ + case 5: area = (i64)p->aCoord[9].i - (i64)p->aCoord[8].i; + case 4: area *= (i64)p->aCoord[7].i - (i64)p->aCoord[6].i; + case 3: area *= (i64)p->aCoord[5].i - (i64)p->aCoord[4].i; + case 2: area *= (i64)p->aCoord[3].i - (i64)p->aCoord[2].i; + default: area *= (i64)p->aCoord[1].i - (i64)p->aCoord[0].i; + } + } + return area; +} + +/* +** Return the margin length of cell p. The margin length is the sum +** of the objects size in each dimension. +*/ +static RtreeDValue cellMargin(Rtree *pRtree, RtreeCell *p){ + RtreeDValue margin = 0; + int ii = pRtree->nDim2 - 2; + do{ + margin += (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii])); + ii -= 2; + }while( ii>=0 ); + return margin; +} + +/* +** Store the union of cells p1 and p2 in p1. +*/ +static void cellUnion(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){ + int ii = 0; + if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ + do{ + p1->aCoord[ii].f = MIN(p1->aCoord[ii].f, p2->aCoord[ii].f); + p1->aCoord[ii+1].f = MAX(p1->aCoord[ii+1].f, p2->aCoord[ii+1].f); + ii += 2; + }while( iinDim2 ); + }else{ + do{ + p1->aCoord[ii].i = MIN(p1->aCoord[ii].i, p2->aCoord[ii].i); + p1->aCoord[ii+1].i = MAX(p1->aCoord[ii+1].i, p2->aCoord[ii+1].i); + ii += 2; + }while( iinDim2 ); + } +} + +/* +** Return true if the area covered by p2 is a subset of the area covered +** by p1. False otherwise. +*/ +static int cellContains(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){ + int ii; + if( pRtree->eCoordType==RTREE_COORD_INT32 ){ + for(ii=0; iinDim2; ii+=2){ + RtreeCoord *a1 = &p1->aCoord[ii]; + RtreeCoord *a2 = &p2->aCoord[ii]; + if( a2[0].ia1[1].i ) return 0; + } + }else{ + for(ii=0; iinDim2; ii+=2){ + RtreeCoord *a1 = &p1->aCoord[ii]; + RtreeCoord *a2 = &p2->aCoord[ii]; + if( a2[0].fa1[1].f ) return 0; + } + } + return 1; +} + +static RtreeDValue cellOverlap( + Rtree *pRtree, + RtreeCell *p, + RtreeCell *aCell, + int nCell +){ + int ii; + RtreeDValue overlap = RTREE_ZERO; + for(ii=0; iinDim2; jj+=2){ + RtreeDValue x1, x2; + x1 = MAX(DCOORD(p->aCoord[jj]), DCOORD(aCell[ii].aCoord[jj])); + x2 = MIN(DCOORD(p->aCoord[jj+1]), DCOORD(aCell[ii].aCoord[jj+1])); + if( x2iDepth-iHeight); ii++){ + int iCell; + sqlite3_int64 iBest = 0; + int bFound = 0; + RtreeDValue fMinGrowth = RTREE_ZERO; + RtreeDValue fMinArea = RTREE_ZERO; + int nCell = NCELL(pNode); + RtreeNode *pChild = 0; + + /* First check to see if there is are any cells in pNode that completely + ** contains pCell. If two or more cells in pNode completely contain pCell + ** then pick the smallest. + */ + for(iCell=0; iCellpParent ){ + RtreeNode *pParent = p->pParent; + RtreeCell cell; + int iCell; + + cnt++; + if( NEVER(cnt>100) ){ + RTREE_IS_CORRUPT(pRtree); + return SQLITE_CORRUPT_VTAB; + } + rc = nodeParentIndex(pRtree, p, &iCell); + if( NEVER(rc!=SQLITE_OK) ){ + RTREE_IS_CORRUPT(pRtree); + return SQLITE_CORRUPT_VTAB; + } + + nodeGetCell(pRtree, pParent, iCell, &cell); + if( !cellContains(pRtree, &cell, pCell) ){ + cellUnion(pRtree, &cell, pCell); + nodeOverwriteCell(pRtree, pParent, &cell, iCell); + } + + p = pParent; + } + return SQLITE_OK; +} + +/* +** Write mapping (iRowid->iNode) to the _rowid table. +*/ +static int rowidWrite(Rtree *pRtree, sqlite3_int64 iRowid, sqlite3_int64 iNode){ + sqlite3_bind_int64(pRtree->pWriteRowid, 1, iRowid); + sqlite3_bind_int64(pRtree->pWriteRowid, 2, iNode); + sqlite3_step(pRtree->pWriteRowid); + return sqlite3_reset(pRtree->pWriteRowid); +} + +/* +** Write mapping (iNode->iPar) to the _parent table. +*/ +static int parentWrite(Rtree *pRtree, sqlite3_int64 iNode, sqlite3_int64 iPar){ + sqlite3_bind_int64(pRtree->pWriteParent, 1, iNode); + sqlite3_bind_int64(pRtree->pWriteParent, 2, iPar); + sqlite3_step(pRtree->pWriteParent); + return sqlite3_reset(pRtree->pWriteParent); +} + +static int rtreeInsertCell(Rtree *, RtreeNode *, RtreeCell *, int); + + + +/* +** Arguments aIdx, aCell and aSpare all point to arrays of size +** nIdx. The aIdx array contains the set of integers from 0 to +** (nIdx-1) in no particular order. This function sorts the values +** in aIdx according to dimension iDim of the cells in aCell. The +** minimum value of dimension iDim is considered first, the +** maximum used to break ties. +** +** The aSpare array is used as temporary working space by the +** sorting algorithm. +*/ +static void SortByDimension( + Rtree *pRtree, + int *aIdx, + int nIdx, + int iDim, + RtreeCell *aCell, + int *aSpare +){ + if( nIdx>1 ){ + + int iLeft = 0; + int iRight = 0; + + int nLeft = nIdx/2; + int nRight = nIdx-nLeft; + int *aLeft = aIdx; + int *aRight = &aIdx[nLeft]; + + SortByDimension(pRtree, aLeft, nLeft, iDim, aCell, aSpare); + SortByDimension(pRtree, aRight, nRight, iDim, aCell, aSpare); + + memcpy(aSpare, aLeft, sizeof(int)*nLeft); + aLeft = aSpare; + while( iLeftnDim+1)*(sizeof(int*)+nCell*sizeof(int)); + + aaSorted = (int **)sqlite3_malloc64(nByte); + if( !aaSorted ){ + return SQLITE_NOMEM; + } + + aSpare = &((int *)&aaSorted[pRtree->nDim])[pRtree->nDim*nCell]; + memset(aaSorted, 0, nByte); + for(ii=0; iinDim; ii++){ + int jj; + aaSorted[ii] = &((int *)&aaSorted[pRtree->nDim])[ii*nCell]; + for(jj=0; jjnDim; ii++){ + RtreeDValue margin = RTREE_ZERO; + RtreeDValue fBestOverlap = RTREE_ZERO; + RtreeDValue fBestArea = RTREE_ZERO; + int iBestLeft = 0; + int nLeft; + + for( + nLeft=RTREE_MINCELLS(pRtree); + nLeft<=(nCell-RTREE_MINCELLS(pRtree)); + nLeft++ + ){ + RtreeCell left; + RtreeCell right; + int kk; + RtreeDValue overlap; + RtreeDValue area; + + memcpy(&left, &aCell[aaSorted[ii][0]], sizeof(RtreeCell)); + memcpy(&right, &aCell[aaSorted[ii][nCell-1]], sizeof(RtreeCell)); + for(kk=1; kk<(nCell-1); kk++){ + if( kk0 ){ + RtreeNode *pChild = nodeHashLookup(pRtree, iRowid); + RtreeNode *p; + for(p=pNode; p; p=p->pParent){ + if( p==pChild ) return SQLITE_CORRUPT_VTAB; + } + if( pChild ){ + nodeRelease(pRtree, pChild->pParent); + nodeReference(pNode); + pChild->pParent = pNode; + } + } + if( NEVER(pNode==0) ) return SQLITE_ERROR; + return xSetMapping(pRtree, iRowid, pNode->iNode); +} + +static int SplitNode( + Rtree *pRtree, + RtreeNode *pNode, + RtreeCell *pCell, + int iHeight +){ + int i; + int newCellIsRight = 0; + + int rc = SQLITE_OK; + int nCell = NCELL(pNode); + RtreeCell *aCell; + int *aiUsed; + + RtreeNode *pLeft = 0; + RtreeNode *pRight = 0; + + RtreeCell leftbbox; + RtreeCell rightbbox; + + /* Allocate an array and populate it with a copy of pCell and + ** all cells from node pLeft. Then zero the original node. + */ + aCell = sqlite3_malloc64((sizeof(RtreeCell)+sizeof(int))*(nCell+1)); + if( !aCell ){ + rc = SQLITE_NOMEM; + goto splitnode_out; + } + aiUsed = (int *)&aCell[nCell+1]; + memset(aiUsed, 0, sizeof(int)*(nCell+1)); + for(i=0; iiNode==1 ){ + pRight = nodeNew(pRtree, pNode); + pLeft = nodeNew(pRtree, pNode); + pRtree->iDepth++; + pNode->isDirty = 1; + writeInt16(pNode->zData, pRtree->iDepth); + }else{ + pLeft = pNode; + pRight = nodeNew(pRtree, pLeft->pParent); + pLeft->nRef++; + } + + if( !pLeft || !pRight ){ + rc = SQLITE_NOMEM; + goto splitnode_out; + } + + memset(pLeft->zData, 0, pRtree->iNodeSize); + memset(pRight->zData, 0, pRtree->iNodeSize); + + rc = splitNodeStartree(pRtree, aCell, nCell, pLeft, pRight, + &leftbbox, &rightbbox); + if( rc!=SQLITE_OK ){ + goto splitnode_out; + } + + /* Ensure both child nodes have node numbers assigned to them by calling + ** nodeWrite(). Node pRight always needs a node number, as it was created + ** by nodeNew() above. But node pLeft sometimes already has a node number. + ** In this case avoid the all to nodeWrite(). + */ + if( SQLITE_OK!=(rc = nodeWrite(pRtree, pRight)) + || (0==pLeft->iNode && SQLITE_OK!=(rc = nodeWrite(pRtree, pLeft))) + ){ + goto splitnode_out; + } + + rightbbox.iRowid = pRight->iNode; + leftbbox.iRowid = pLeft->iNode; + + if( pNode->iNode==1 ){ + rc = rtreeInsertCell(pRtree, pLeft->pParent, &leftbbox, iHeight+1); + if( rc!=SQLITE_OK ){ + goto splitnode_out; + } + }else{ + RtreeNode *pParent = pLeft->pParent; + int iCell; + rc = nodeParentIndex(pRtree, pLeft, &iCell); + if( ALWAYS(rc==SQLITE_OK) ){ + nodeOverwriteCell(pRtree, pParent, &leftbbox, iCell); + rc = AdjustTree(pRtree, pParent, &leftbbox); + assert( rc==SQLITE_OK ); + } + if( NEVER(rc!=SQLITE_OK) ){ + goto splitnode_out; + } + } + if( (rc = rtreeInsertCell(pRtree, pRight->pParent, &rightbbox, iHeight+1)) ){ + goto splitnode_out; + } + + for(i=0; iiRowid ){ + newCellIsRight = 1; + } + if( rc!=SQLITE_OK ){ + goto splitnode_out; + } + } + if( pNode->iNode==1 ){ + for(i=0; iiRowid, pLeft, iHeight); + } + + if( rc==SQLITE_OK ){ + rc = nodeRelease(pRtree, pRight); + pRight = 0; + } + if( rc==SQLITE_OK ){ + rc = nodeRelease(pRtree, pLeft); + pLeft = 0; + } + +splitnode_out: + nodeRelease(pRtree, pRight); + nodeRelease(pRtree, pLeft); + sqlite3_free(aCell); + return rc; +} + +/* +** If node pLeaf is not the root of the r-tree and its pParent pointer is +** still NULL, load all ancestor nodes of pLeaf into memory and populate +** the pLeaf->pParent chain all the way up to the root node. +** +** This operation is required when a row is deleted (or updated - an update +** is implemented as a delete followed by an insert). SQLite provides the +** rowid of the row to delete, which can be used to find the leaf on which +** the entry resides (argument pLeaf). Once the leaf is located, this +** function is called to determine its ancestry. +*/ +static int fixLeafParent(Rtree *pRtree, RtreeNode *pLeaf){ + int rc = SQLITE_OK; + RtreeNode *pChild = pLeaf; + while( rc==SQLITE_OK && pChild->iNode!=1 && pChild->pParent==0 ){ + int rc2 = SQLITE_OK; /* sqlite3_reset() return code */ + sqlite3_bind_int64(pRtree->pReadParent, 1, pChild->iNode); + rc = sqlite3_step(pRtree->pReadParent); + if( rc==SQLITE_ROW ){ + RtreeNode *pTest; /* Used to test for reference loops */ + i64 iNode; /* Node number of parent node */ + + /* Before setting pChild->pParent, test that we are not creating a + ** loop of references (as we would if, say, pChild==pParent). We don't + ** want to do this as it leads to a memory leak when trying to delete + ** the referenced counted node structures. + */ + iNode = sqlite3_column_int64(pRtree->pReadParent, 0); + for(pTest=pLeaf; pTest && pTest->iNode!=iNode; pTest=pTest->pParent); + if( pTest==0 ){ + rc2 = nodeAcquire(pRtree, iNode, 0, &pChild->pParent); + } + } + rc = sqlite3_reset(pRtree->pReadParent); + if( rc==SQLITE_OK ) rc = rc2; + if( rc==SQLITE_OK && !pChild->pParent ){ + RTREE_IS_CORRUPT(pRtree); + rc = SQLITE_CORRUPT_VTAB; + } + pChild = pChild->pParent; + } + return rc; +} + +static int deleteCell(Rtree *, RtreeNode *, int, int); + +static int removeNode(Rtree *pRtree, RtreeNode *pNode, int iHeight){ + int rc; + int rc2; + RtreeNode *pParent = 0; + int iCell; + + assert( pNode->nRef==1 ); + + /* Remove the entry in the parent cell. */ + rc = nodeParentIndex(pRtree, pNode, &iCell); + if( rc==SQLITE_OK ){ + pParent = pNode->pParent; + pNode->pParent = 0; + rc = deleteCell(pRtree, pParent, iCell, iHeight+1); + testcase( rc!=SQLITE_OK ); + } + rc2 = nodeRelease(pRtree, pParent); + if( rc==SQLITE_OK ){ + rc = rc2; + } + if( rc!=SQLITE_OK ){ + return rc; + } + + /* Remove the xxx_node entry. */ + sqlite3_bind_int64(pRtree->pDeleteNode, 1, pNode->iNode); + sqlite3_step(pRtree->pDeleteNode); + if( SQLITE_OK!=(rc = sqlite3_reset(pRtree->pDeleteNode)) ){ + return rc; + } + + /* Remove the xxx_parent entry. */ + sqlite3_bind_int64(pRtree->pDeleteParent, 1, pNode->iNode); + sqlite3_step(pRtree->pDeleteParent); + if( SQLITE_OK!=(rc = sqlite3_reset(pRtree->pDeleteParent)) ){ + return rc; + } + + /* Remove the node from the in-memory hash table and link it into + ** the Rtree.pDeleted list. Its contents will be re-inserted later on. + */ + nodeHashDelete(pRtree, pNode); + pNode->iNode = iHeight; + pNode->pNext = pRtree->pDeleted; + pNode->nRef++; + pRtree->pDeleted = pNode; + + return SQLITE_OK; +} + +static int fixBoundingBox(Rtree *pRtree, RtreeNode *pNode){ + RtreeNode *pParent = pNode->pParent; + int rc = SQLITE_OK; + if( pParent ){ + int ii; + int nCell = NCELL(pNode); + RtreeCell box; /* Bounding box for pNode */ + nodeGetCell(pRtree, pNode, 0, &box); + for(ii=1; iiiNode; + rc = nodeParentIndex(pRtree, pNode, &ii); + if( rc==SQLITE_OK ){ + nodeOverwriteCell(pRtree, pParent, &box, ii); + rc = fixBoundingBox(pRtree, pParent); + } + } + return rc; +} + +/* +** Delete the cell at index iCell of node pNode. After removing the +** cell, adjust the r-tree data structure if required. +*/ +static int deleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell, int iHeight){ + RtreeNode *pParent; + int rc; + + if( SQLITE_OK!=(rc = fixLeafParent(pRtree, pNode)) ){ + return rc; + } + + /* Remove the cell from the node. This call just moves bytes around + ** the in-memory node image, so it cannot fail. + */ + nodeDeleteCell(pRtree, pNode, iCell); + + /* If the node is not the tree root and now has less than the minimum + ** number of cells, remove it from the tree. Otherwise, update the + ** cell in the parent node so that it tightly contains the updated + ** node. + */ + pParent = pNode->pParent; + assert( pParent || pNode->iNode==1 ); + if( pParent ){ + if( NCELL(pNode)0 ){ + RtreeNode *pChild = nodeHashLookup(pRtree, pCell->iRowid); + if( pChild ){ + nodeRelease(pRtree, pChild->pParent); + nodeReference(pNode); + pChild->pParent = pNode; + } + } + if( nodeInsertCell(pRtree, pNode, pCell) ){ + rc = SplitNode(pRtree, pNode, pCell, iHeight); + }else{ + rc = AdjustTree(pRtree, pNode, pCell); + if( ALWAYS(rc==SQLITE_OK) ){ + if( iHeight==0 ){ + rc = rowidWrite(pRtree, pCell->iRowid, pNode->iNode); + }else{ + rc = parentWrite(pRtree, pCell->iRowid, pNode->iNode); + } + } + } + return rc; +} + +static int reinsertNodeContent(Rtree *pRtree, RtreeNode *pNode){ + int ii; + int rc = SQLITE_OK; + int nCell = NCELL(pNode); + + for(ii=0; rc==SQLITE_OK && iiiNode currently contains + ** the height of the sub-tree headed by the cell. + */ + rc = ChooseLeaf(pRtree, &cell, (int)pNode->iNode, &pInsert); + if( rc==SQLITE_OK ){ + int rc2; + rc = rtreeInsertCell(pRtree, pInsert, &cell, (int)pNode->iNode); + rc2 = nodeRelease(pRtree, pInsert); + if( rc==SQLITE_OK ){ + rc = rc2; + } + } + } + return rc; +} + +/* +** Select a currently unused rowid for a new r-tree record. +*/ +static int rtreeNewRowid(Rtree *pRtree, i64 *piRowid){ + int rc; + sqlite3_bind_null(pRtree->pWriteRowid, 1); + sqlite3_bind_null(pRtree->pWriteRowid, 2); + sqlite3_step(pRtree->pWriteRowid); + rc = sqlite3_reset(pRtree->pWriteRowid); + *piRowid = sqlite3_last_insert_rowid(pRtree->db); + return rc; +} + +/* +** Remove the entry with rowid=iDelete from the r-tree structure. +*/ +static int rtreeDeleteRowid(Rtree *pRtree, sqlite3_int64 iDelete){ + int rc; /* Return code */ + RtreeNode *pLeaf = 0; /* Leaf node containing record iDelete */ + int iCell; /* Index of iDelete cell in pLeaf */ + RtreeNode *pRoot = 0; /* Root node of rtree structure */ + + + /* Obtain a reference to the root node to initialize Rtree.iDepth */ + rc = nodeAcquire(pRtree, 1, 0, &pRoot); + + /* Obtain a reference to the leaf node that contains the entry + ** about to be deleted. + */ + if( rc==SQLITE_OK ){ + rc = findLeafNode(pRtree, iDelete, &pLeaf, 0); + } + +#ifdef CORRUPT_DB + assert( pLeaf!=0 || rc!=SQLITE_OK || CORRUPT_DB ); +#endif + + /* Delete the cell in question from the leaf node. */ + if( rc==SQLITE_OK && pLeaf ){ + int rc2; + rc = nodeRowidIndex(pRtree, pLeaf, iDelete, &iCell); + if( rc==SQLITE_OK ){ + rc = deleteCell(pRtree, pLeaf, iCell, 0); + } + rc2 = nodeRelease(pRtree, pLeaf); + if( rc==SQLITE_OK ){ + rc = rc2; + } + } + + /* Delete the corresponding entry in the _rowid table. */ + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pRtree->pDeleteRowid, 1, iDelete); + sqlite3_step(pRtree->pDeleteRowid); + rc = sqlite3_reset(pRtree->pDeleteRowid); + } + + /* Check if the root node now has exactly one child. If so, remove + ** it, schedule the contents of the child for reinsertion and + ** reduce the tree height by one. + ** + ** This is equivalent to copying the contents of the child into + ** the root node (the operation that Gutman's paper says to perform + ** in this scenario). + */ + if( rc==SQLITE_OK && pRtree->iDepth>0 && NCELL(pRoot)==1 ){ + int rc2; + RtreeNode *pChild = 0; + i64 iChild = nodeGetRowid(pRtree, pRoot, 0); + rc = nodeAcquire(pRtree, iChild, pRoot, &pChild); /* tag-20210916a */ + if( rc==SQLITE_OK ){ + rc = removeNode(pRtree, pChild, pRtree->iDepth-1); + } + rc2 = nodeRelease(pRtree, pChild); + if( rc==SQLITE_OK ) rc = rc2; + if( rc==SQLITE_OK ){ + pRtree->iDepth--; + writeInt16(pRoot->zData, pRtree->iDepth); + pRoot->isDirty = 1; + } + } + + /* Re-insert the contents of any underfull nodes removed from the tree. */ + for(pLeaf=pRtree->pDeleted; pLeaf; pLeaf=pRtree->pDeleted){ + if( rc==SQLITE_OK ){ + rc = reinsertNodeContent(pRtree, pLeaf); + } + pRtree->pDeleted = pLeaf->pNext; + pRtree->nNodeRef--; + sqlite3_free(pLeaf); + } + + /* Release the reference to the root node. */ + if( rc==SQLITE_OK ){ + rc = nodeRelease(pRtree, pRoot); + }else{ + nodeRelease(pRtree, pRoot); + } + + return rc; +} + +/* +** Rounding constants for float->double conversion. +*/ +#define RNDTOWARDS (1.0 - 1.0/8388608.0) /* Round towards zero */ +#define RNDAWAY (1.0 + 1.0/8388608.0) /* Round away from zero */ + +#if !defined(SQLITE_RTREE_INT_ONLY) +/* +** Convert an sqlite3_value into an RtreeValue (presumably a float) +** while taking care to round toward negative or positive, respectively. +*/ +static RtreeValue rtreeValueDown(sqlite3_value *v){ + double d = sqlite3_value_double(v); + float f = (float)d; + if( f>d ){ + f = (float)(d*(d<0 ? RNDAWAY : RNDTOWARDS)); + } + return f; +} +static RtreeValue rtreeValueUp(sqlite3_value *v){ + double d = sqlite3_value_double(v); + float f = (float)d; + if( fbase.zErrMsg) to an appropriate value and returns +** SQLITE_CONSTRAINT. +** +** Parameter iCol is the index of the leftmost column involved in the +** constraint failure. If it is 0, then the constraint that failed is +** the unique constraint on the id column. Otherwise, it is the rtree +** (c1<=c2) constraint on columns iCol and iCol+1 that has failed. +** +** If an OOM occurs, SQLITE_NOMEM is returned instead of SQLITE_CONSTRAINT. +*/ +static int rtreeConstraintError(Rtree *pRtree, int iCol){ + sqlite3_stmt *pStmt = 0; + char *zSql; + int rc; + + assert( iCol==0 || iCol%2 ); + zSql = sqlite3_mprintf("SELECT * FROM %Q.%Q", pRtree->zDb, pRtree->zName); + if( zSql ){ + rc = sqlite3_prepare_v2(pRtree->db, zSql, -1, &pStmt, 0); + }else{ + rc = SQLITE_NOMEM; + } + sqlite3_free(zSql); + + if( rc==SQLITE_OK ){ + if( iCol==0 ){ + const char *zCol = sqlite3_column_name(pStmt, 0); + pRtree->base.zErrMsg = sqlite3_mprintf( + "UNIQUE constraint failed: %s.%s", pRtree->zName, zCol + ); + }else{ + const char *zCol1 = sqlite3_column_name(pStmt, iCol); + const char *zCol2 = sqlite3_column_name(pStmt, iCol+1); + pRtree->base.zErrMsg = sqlite3_mprintf( + "rtree constraint failed: %s.(%s<=%s)", pRtree->zName, zCol1, zCol2 + ); + } + } + + sqlite3_finalize(pStmt); + return (rc==SQLITE_OK ? SQLITE_CONSTRAINT : rc); +} + + + +/* +** The xUpdate method for rtree module virtual tables. +*/ +static int rtreeUpdate( + sqlite3_vtab *pVtab, + int nData, + sqlite3_value **aData, + sqlite_int64 *pRowid +){ + Rtree *pRtree = (Rtree *)pVtab; + int rc = SQLITE_OK; + RtreeCell cell; /* New cell to insert if nData>1 */ + int bHaveRowid = 0; /* Set to 1 after new rowid is determined */ + + if( pRtree->nNodeRef ){ + /* Unable to write to the btree while another cursor is reading from it, + ** since the write might do a rebalance which would disrupt the read + ** cursor. */ + return SQLITE_LOCKED_VTAB; + } + rtreeReference(pRtree); + assert(nData>=1); + + memset(&cell, 0, sizeof(cell)); + + /* Constraint handling. A write operation on an r-tree table may return + ** SQLITE_CONSTRAINT for two reasons: + ** + ** 1. A duplicate rowid value, or + ** 2. The supplied data violates the "x2>=x1" constraint. + ** + ** In the first case, if the conflict-handling mode is REPLACE, then + ** the conflicting row can be removed before proceeding. In the second + ** case, SQLITE_CONSTRAINT must be returned regardless of the + ** conflict-handling mode specified by the user. + */ + if( nData>1 ){ + int ii; + int nn = nData - 4; + + if( nn > pRtree->nDim2 ) nn = pRtree->nDim2; + /* Populate the cell.aCoord[] array. The first coordinate is aData[3]. + ** + ** NB: nData can only be less than nDim*2+3 if the rtree is mis-declared + ** with "column" that are interpreted as table constraints. + ** Example: CREATE VIRTUAL TABLE bad USING rtree(x,y,CHECK(y>5)); + ** This problem was discovered after years of use, so we silently ignore + ** these kinds of misdeclared tables to avoid breaking any legacy. + */ + +#ifndef SQLITE_RTREE_INT_ONLY + if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ + for(ii=0; iicell.aCoord[ii+1].f ){ + rc = rtreeConstraintError(pRtree, ii+1); + goto constraint; + } + } + }else +#endif + { + for(ii=0; iicell.aCoord[ii+1].i ){ + rc = rtreeConstraintError(pRtree, ii+1); + goto constraint; + } + } + } + + /* If a rowid value was supplied, check if it is already present in + ** the table. If so, the constraint has failed. */ + if( sqlite3_value_type(aData[2])!=SQLITE_NULL ){ + cell.iRowid = sqlite3_value_int64(aData[2]); + if( sqlite3_value_type(aData[0])==SQLITE_NULL + || sqlite3_value_int64(aData[0])!=cell.iRowid + ){ + int steprc; + sqlite3_bind_int64(pRtree->pReadRowid, 1, cell.iRowid); + steprc = sqlite3_step(pRtree->pReadRowid); + rc = sqlite3_reset(pRtree->pReadRowid); + if( SQLITE_ROW==steprc ){ + if( sqlite3_vtab_on_conflict(pRtree->db)==SQLITE_REPLACE ){ + rc = rtreeDeleteRowid(pRtree, cell.iRowid); + }else{ + rc = rtreeConstraintError(pRtree, 0); + goto constraint; + } + } + } + bHaveRowid = 1; + } + } + + /* If aData[0] is not an SQL NULL value, it is the rowid of a + ** record to delete from the r-tree table. The following block does + ** just that. + */ + if( sqlite3_value_type(aData[0])!=SQLITE_NULL ){ + rc = rtreeDeleteRowid(pRtree, sqlite3_value_int64(aData[0])); + } + + /* If the aData[] array contains more than one element, elements + ** (aData[2]..aData[argc-1]) contain a new record to insert into + ** the r-tree structure. + */ + if( rc==SQLITE_OK && nData>1 ){ + /* Insert the new record into the r-tree */ + RtreeNode *pLeaf = 0; + + /* Figure out the rowid of the new row. */ + if( bHaveRowid==0 ){ + rc = rtreeNewRowid(pRtree, &cell.iRowid); + } + *pRowid = cell.iRowid; + + if( rc==SQLITE_OK ){ + rc = ChooseLeaf(pRtree, &cell, 0, &pLeaf); + } + if( rc==SQLITE_OK ){ + int rc2; + rc = rtreeInsertCell(pRtree, pLeaf, &cell, 0); + rc2 = nodeRelease(pRtree, pLeaf); + if( rc==SQLITE_OK ){ + rc = rc2; + } + } + if( rc==SQLITE_OK && pRtree->nAux ){ + sqlite3_stmt *pUp = pRtree->pWriteAux; + int jj; + sqlite3_bind_int64(pUp, 1, *pRowid); + for(jj=0; jjnAux; jj++){ + sqlite3_bind_value(pUp, jj+2, aData[pRtree->nDim2+3+jj]); + } + sqlite3_step(pUp); + rc = sqlite3_reset(pUp); + } + } + +constraint: + rtreeRelease(pRtree); + return rc; +} + +/* +** Called when a transaction starts. +*/ +static int rtreeBeginTransaction(sqlite3_vtab *pVtab){ + Rtree *pRtree = (Rtree *)pVtab; + assert( pRtree->inWrTrans==0 ); + pRtree->inWrTrans = 1; + return SQLITE_OK; +} + +/* +** Called when a transaction completes (either by COMMIT or ROLLBACK). +** The sqlite3_blob object should be released at this point. +*/ +static int rtreeEndTransaction(sqlite3_vtab *pVtab){ + Rtree *pRtree = (Rtree *)pVtab; + pRtree->inWrTrans = 0; + nodeBlobReset(pRtree); + return SQLITE_OK; +} +static int rtreeRollback(sqlite3_vtab *pVtab){ + return rtreeEndTransaction(pVtab); +} + +/* +** The xRename method for rtree module virtual tables. +*/ +static int rtreeRename(sqlite3_vtab *pVtab, const char *zNewName){ + Rtree *pRtree = (Rtree *)pVtab; + int rc = SQLITE_NOMEM; + char *zSql = sqlite3_mprintf( + "ALTER TABLE %Q.'%q_node' RENAME TO \"%w_node\";" + "ALTER TABLE %Q.'%q_parent' RENAME TO \"%w_parent\";" + "ALTER TABLE %Q.'%q_rowid' RENAME TO \"%w_rowid\";" + , pRtree->zDb, pRtree->zName, zNewName + , pRtree->zDb, pRtree->zName, zNewName + , pRtree->zDb, pRtree->zName, zNewName + ); + if( zSql ){ + nodeBlobReset(pRtree); + rc = sqlite3_exec(pRtree->db, zSql, 0, 0, 0); + sqlite3_free(zSql); + } + return rc; +} + +/* +** The xSavepoint method. +** +** This module does not need to do anything to support savepoints. However, +** it uses this hook to close any open blob handle. This is done because a +** DROP TABLE command - which fortunately always opens a savepoint - cannot +** succeed if there are any open blob handles. i.e. if the blob handle were +** not closed here, the following would fail: +** +** BEGIN; +** INSERT INTO rtree... +** DROP TABLE ; -- Would fail with SQLITE_LOCKED +** COMMIT; +*/ +static int rtreeSavepoint(sqlite3_vtab *pVtab, int iSavepoint){ + Rtree *pRtree = (Rtree *)pVtab; + u8 iwt = pRtree->inWrTrans; + UNUSED_PARAMETER(iSavepoint); + pRtree->inWrTrans = 0; + nodeBlobReset(pRtree); + pRtree->inWrTrans = iwt; + return SQLITE_OK; +} + +/* +** This function populates the pRtree->nRowEst variable with an estimate +** of the number of rows in the virtual table. If possible, this is based +** on sqlite_stat1 data. Otherwise, use RTREE_DEFAULT_ROWEST. +*/ +static int rtreeQueryStat1(sqlite3 *db, Rtree *pRtree){ + const char *zFmt = "SELECT stat FROM %Q.sqlite_stat1 WHERE tbl = '%q_rowid'"; + char *zSql; + sqlite3_stmt *p; + int rc; + i64 nRow = RTREE_MIN_ROWEST; + + rc = sqlite3_table_column_metadata( + db, pRtree->zDb, "sqlite_stat1",0,0,0,0,0,0 + ); + if( rc!=SQLITE_OK ){ + pRtree->nRowEst = RTREE_DEFAULT_ROWEST; + return rc==SQLITE_ERROR ? SQLITE_OK : rc; + } + zSql = sqlite3_mprintf(zFmt, pRtree->zDb, pRtree->zName); + if( zSql==0 ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_prepare_v2(db, zSql, -1, &p, 0); + if( rc==SQLITE_OK ){ + if( sqlite3_step(p)==SQLITE_ROW ) nRow = sqlite3_column_int64(p, 0); + rc = sqlite3_finalize(p); + } + sqlite3_free(zSql); + } + pRtree->nRowEst = MAX(nRow, RTREE_MIN_ROWEST); + return rc; +} + + +/* +** Return true if zName is the extension on one of the shadow tables used +** by this module. +*/ +static int rtreeShadowName(const char *zName){ + static const char *azName[] = { + "node", "parent", "rowid" + }; + unsigned int i; + for(i=0; idb = db; + + if( isCreate ){ + char *zCreate; + sqlite3_str *p = sqlite3_str_new(db); + int ii; + sqlite3_str_appendf(p, + "CREATE TABLE \"%w\".\"%w_rowid\"(rowid INTEGER PRIMARY KEY,nodeno", + zDb, zPrefix); + for(ii=0; iinAux; ii++){ + sqlite3_str_appendf(p,",a%d",ii); + } + sqlite3_str_appendf(p, + ");CREATE TABLE \"%w\".\"%w_node\"(nodeno INTEGER PRIMARY KEY,data);", + zDb, zPrefix); + sqlite3_str_appendf(p, + "CREATE TABLE \"%w\".\"%w_parent\"(nodeno INTEGER PRIMARY KEY,parentnode);", + zDb, zPrefix); + sqlite3_str_appendf(p, + "INSERT INTO \"%w\".\"%w_node\"VALUES(1,zeroblob(%d))", + zDb, zPrefix, pRtree->iNodeSize); + zCreate = sqlite3_str_finish(p); + if( !zCreate ){ + return SQLITE_NOMEM; + } + rc = sqlite3_exec(db, zCreate, 0, 0, 0); + sqlite3_free(zCreate); + if( rc!=SQLITE_OK ){ + return rc; + } + } + + appStmt[0] = &pRtree->pWriteNode; + appStmt[1] = &pRtree->pDeleteNode; + appStmt[2] = &pRtree->pReadRowid; + appStmt[3] = &pRtree->pWriteRowid; + appStmt[4] = &pRtree->pDeleteRowid; + appStmt[5] = &pRtree->pReadParent; + appStmt[6] = &pRtree->pWriteParent; + appStmt[7] = &pRtree->pDeleteParent; + + rc = rtreeQueryStat1(db, pRtree); + for(i=0; inAux==0 ){ + zFormat = azSql[i]; + }else { + /* An UPSERT is very slightly slower than REPLACE, but it is needed + ** if there are auxiliary columns */ + zFormat = "INSERT INTO\"%w\".\"%w_rowid\"(rowid,nodeno)VALUES(?1,?2)" + "ON CONFLICT(rowid)DO UPDATE SET nodeno=excluded.nodeno"; + } + zSql = sqlite3_mprintf(zFormat, zDb, zPrefix); + if( zSql ){ + rc = sqlite3_prepare_v3(db, zSql, -1, f, appStmt[i], 0); + }else{ + rc = SQLITE_NOMEM; + } + sqlite3_free(zSql); + } + if( pRtree->nAux && rc!=SQLITE_NOMEM ){ + pRtree->zReadAuxSql = sqlite3_mprintf( + "SELECT * FROM \"%w\".\"%w_rowid\" WHERE rowid=?1", + zDb, zPrefix); + if( pRtree->zReadAuxSql==0 ){ + rc = SQLITE_NOMEM; + }else{ + sqlite3_str *p = sqlite3_str_new(db); + int ii; + char *zSql; + sqlite3_str_appendf(p, "UPDATE \"%w\".\"%w_rowid\"SET ", zDb, zPrefix); + for(ii=0; iinAux; ii++){ + if( ii ) sqlite3_str_append(p, ",", 1); +#ifdef SQLITE_ENABLE_GEOPOLY + if( iinAuxNotNull ){ + sqlite3_str_appendf(p,"a%d=coalesce(?%d,a%d)",ii,ii+2,ii); + }else +#endif + { + sqlite3_str_appendf(p,"a%d=?%d",ii,ii+2); + } + } + sqlite3_str_appendf(p, " WHERE rowid=?1"); + zSql = sqlite3_str_finish(p); + if( zSql==0 ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_prepare_v3(db, zSql, -1, f, &pRtree->pWriteAux, 0); + sqlite3_free(zSql); + } + } + } + + return rc; +} + +/* +** The second argument to this function contains the text of an SQL statement +** that returns a single integer value. The statement is compiled and executed +** using database connection db. If successful, the integer value returned +** is written to *piVal and SQLITE_OK returned. Otherwise, an SQLite error +** code is returned and the value of *piVal after returning is not defined. +*/ +static int getIntFromStmt(sqlite3 *db, const char *zSql, int *piVal){ + int rc = SQLITE_NOMEM; + if( zSql ){ + sqlite3_stmt *pStmt = 0; + rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); + if( rc==SQLITE_OK ){ + if( SQLITE_ROW==sqlite3_step(pStmt) ){ + *piVal = sqlite3_column_int(pStmt, 0); + } + rc = sqlite3_finalize(pStmt); + } + } + return rc; +} + +/* +** This function is called from within the xConnect() or xCreate() method to +** determine the node-size used by the rtree table being created or connected +** to. If successful, pRtree->iNodeSize is populated and SQLITE_OK returned. +** Otherwise, an SQLite error code is returned. +** +** If this function is being called as part of an xConnect(), then the rtree +** table already exists. In this case the node-size is determined by inspecting +** the root node of the tree. +** +** Otherwise, for an xCreate(), use 64 bytes less than the database page-size. +** This ensures that each node is stored on a single database page. If the +** database page-size is so large that more than RTREE_MAXCELLS entries +** would fit in a single node, use a smaller node-size. +*/ +static int getNodeSize( + sqlite3 *db, /* Database handle */ + Rtree *pRtree, /* Rtree handle */ + int isCreate, /* True for xCreate, false for xConnect */ + char **pzErr /* OUT: Error message, if any */ +){ + int rc; + char *zSql; + if( isCreate ){ + int iPageSize = 0; + zSql = sqlite3_mprintf("PRAGMA %Q.page_size", pRtree->zDb); + rc = getIntFromStmt(db, zSql, &iPageSize); + if( rc==SQLITE_OK ){ + pRtree->iNodeSize = iPageSize-64; + if( (4+pRtree->nBytesPerCell*RTREE_MAXCELLS)iNodeSize ){ + pRtree->iNodeSize = 4+pRtree->nBytesPerCell*RTREE_MAXCELLS; + } + }else{ + *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + } + }else{ + zSql = sqlite3_mprintf( + "SELECT length(data) FROM '%q'.'%q_node' WHERE nodeno = 1", + pRtree->zDb, pRtree->zName + ); + rc = getIntFromStmt(db, zSql, &pRtree->iNodeSize); + if( rc!=SQLITE_OK ){ + *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + }else if( pRtree->iNodeSize<(512-64) ){ + rc = SQLITE_CORRUPT_VTAB; + RTREE_IS_CORRUPT(pRtree); + *pzErr = sqlite3_mprintf("undersize RTree blobs in \"%q_node\"", + pRtree->zName); + } + } + + sqlite3_free(zSql); + return rc; +} + +/* +** Return the length of a token +*/ +static int rtreeTokenLength(const char *z){ + int dummy = 0; + return sqlite3GetToken((const unsigned char*)z,&dummy); +} + +/* +** This function is the implementation of both the xConnect and xCreate +** methods of the r-tree virtual table. +** +** argv[0] -> module name +** argv[1] -> database name +** argv[2] -> table name +** argv[...] -> column names... +*/ +static int rtreeInit( + sqlite3 *db, /* Database connection */ + void *pAux, /* One of the RTREE_COORD_* constants */ + int argc, const char *const*argv, /* Parameters to CREATE TABLE statement */ + sqlite3_vtab **ppVtab, /* OUT: New virtual table */ + char **pzErr, /* OUT: Error message, if any */ + int isCreate /* True for xCreate, false for xConnect */ +){ + int rc = SQLITE_OK; + Rtree *pRtree; + int nDb; /* Length of string argv[1] */ + int nName; /* Length of string argv[2] */ + int eCoordType = (pAux ? RTREE_COORD_INT32 : RTREE_COORD_REAL32); + sqlite3_str *pSql; + char *zSql; + int ii = 4; + int iErr; + + const char *aErrMsg[] = { + 0, /* 0 */ + "Wrong number of columns for an rtree table", /* 1 */ + "Too few columns for an rtree table", /* 2 */ + "Too many columns for an rtree table", /* 3 */ + "Auxiliary rtree columns must be last" /* 4 */ + }; + + assert( RTREE_MAX_AUX_COLUMN<256 ); /* Aux columns counted by a u8 */ + if( argc<6 || argc>RTREE_MAX_AUX_COLUMN+3 ){ + *pzErr = sqlite3_mprintf("%s", aErrMsg[2 + (argc>=6)]); + return SQLITE_ERROR; + } + + sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1); + sqlite3_vtab_config(db, SQLITE_VTAB_INNOCUOUS); + + + /* Allocate the sqlite3_vtab structure */ + nDb = (int)strlen(argv[1]); + nName = (int)strlen(argv[2]); + pRtree = (Rtree *)sqlite3_malloc64(sizeof(Rtree)+nDb+nName*2+8); + if( !pRtree ){ + return SQLITE_NOMEM; + } + memset(pRtree, 0, sizeof(Rtree)+nDb+nName*2+8); + pRtree->nBusy = 1; + pRtree->base.pModule = &rtreeModule; + pRtree->zDb = (char *)&pRtree[1]; + pRtree->zName = &pRtree->zDb[nDb+1]; + pRtree->zNodeName = &pRtree->zName[nName+1]; + pRtree->eCoordType = (u8)eCoordType; + memcpy(pRtree->zDb, argv[1], nDb); + memcpy(pRtree->zName, argv[2], nName); + memcpy(pRtree->zNodeName, argv[2], nName); + memcpy(&pRtree->zNodeName[nName], "_node", 6); + + + /* Create/Connect to the underlying relational database schema. If + ** that is successful, call sqlite3_declare_vtab() to configure + ** the r-tree table schema. + */ + pSql = sqlite3_str_new(db); + sqlite3_str_appendf(pSql, "CREATE TABLE x(%.*s INT", + rtreeTokenLength(argv[3]), argv[3]); + for(ii=4; iinAux++; + sqlite3_str_appendf(pSql, ",%.*s", rtreeTokenLength(zArg+1), zArg+1); + }else if( pRtree->nAux>0 ){ + break; + }else{ + static const char *azFormat[] = {",%.*s REAL", ",%.*s INT"}; + pRtree->nDim2++; + sqlite3_str_appendf(pSql, azFormat[eCoordType], + rtreeTokenLength(zArg), zArg); + } + } + sqlite3_str_appendf(pSql, ");"); + zSql = sqlite3_str_finish(pSql); + if( !zSql ){ + rc = SQLITE_NOMEM; + }else if( iinDim = pRtree->nDim2/2; + if( pRtree->nDim<1 ){ + iErr = 2; + }else if( pRtree->nDim2>RTREE_MAX_DIMENSIONS*2 ){ + iErr = 3; + }else if( pRtree->nDim2 % 2 ){ + iErr = 1; + }else{ + iErr = 0; + } + if( iErr ){ + *pzErr = sqlite3_mprintf("%s", aErrMsg[iErr]); + goto rtreeInit_fail; + } + pRtree->nBytesPerCell = 8 + pRtree->nDim2*4; + + /* Figure out the node size to use. */ + rc = getNodeSize(db, pRtree, isCreate, pzErr); + if( rc ) goto rtreeInit_fail; + rc = rtreeSqlInit(pRtree, db, argv[1], argv[2], isCreate); + if( rc ){ + *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + goto rtreeInit_fail; + } + + *ppVtab = (sqlite3_vtab *)pRtree; + return SQLITE_OK; + +rtreeInit_fail: + if( rc==SQLITE_OK ) rc = SQLITE_ERROR; + assert( *ppVtab==0 ); + assert( pRtree->nBusy==1 ); + rtreeRelease(pRtree); + return rc; +} + + +/* +** Implementation of a scalar function that decodes r-tree nodes to +** human readable strings. This can be used for debugging and analysis. +** +** The scalar function takes two arguments: (1) the number of dimensions +** to the rtree (between 1 and 5, inclusive) and (2) a blob of data containing +** an r-tree node. For a two-dimensional r-tree structure called "rt", to +** deserialize all nodes, a statement like: +** +** SELECT rtreenode(2, data) FROM rt_node; +** +** The human readable string takes the form of a Tcl list with one +** entry for each cell in the r-tree node. Each entry is itself a +** list, containing the 8-byte rowid/pageno followed by the +** *2 coordinates. +*/ +static void rtreenode(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){ + RtreeNode node; + Rtree tree; + int ii; + int nData; + int errCode; + sqlite3_str *pOut; + + UNUSED_PARAMETER(nArg); + memset(&node, 0, sizeof(RtreeNode)); + memset(&tree, 0, sizeof(Rtree)); + tree.nDim = (u8)sqlite3_value_int(apArg[0]); + if( tree.nDim<1 || tree.nDim>5 ) return; + tree.nDim2 = tree.nDim*2; + tree.nBytesPerCell = 8 + 8 * tree.nDim; + node.zData = (u8 *)sqlite3_value_blob(apArg[1]); + if( node.zData==0 ) return; + nData = sqlite3_value_bytes(apArg[1]); + if( nData<4 ) return; + if( nData<4+NCELL(&node)*tree.nBytesPerCell ) return; + + pOut = sqlite3_str_new(0); + for(ii=0; ii0 ) sqlite3_str_append(pOut, " ", 1); + sqlite3_str_appendf(pOut, "{%lld", cell.iRowid); + for(jj=0; jjrc==SQLITE_OK ) pCheck->rc = rc; +} + +/* +** The second and subsequent arguments to this function are a format string +** and printf style arguments. This function formats the string and attempts +** to compile it as an SQL statement. +** +** If successful, a pointer to the new SQL statement is returned. Otherwise, +** NULL is returned and an error code left in RtreeCheck.rc. +*/ +static sqlite3_stmt *rtreeCheckPrepare( + RtreeCheck *pCheck, /* RtreeCheck object */ + const char *zFmt, ... /* Format string and trailing args */ +){ + va_list ap; + char *z; + sqlite3_stmt *pRet = 0; + + va_start(ap, zFmt); + z = sqlite3_vmprintf(zFmt, ap); + + if( pCheck->rc==SQLITE_OK ){ + if( z==0 ){ + pCheck->rc = SQLITE_NOMEM; + }else{ + pCheck->rc = sqlite3_prepare_v2(pCheck->db, z, -1, &pRet, 0); + } + } + + sqlite3_free(z); + va_end(ap); + return pRet; +} + +/* +** The second and subsequent arguments to this function are a printf() +** style format string and arguments. This function formats the string and +** appends it to the report being accumulated in pCheck. +*/ +static void rtreeCheckAppendMsg(RtreeCheck *pCheck, const char *zFmt, ...){ + va_list ap; + va_start(ap, zFmt); + if( pCheck->rc==SQLITE_OK && pCheck->nErrrc = SQLITE_NOMEM; + }else{ + pCheck->zReport = sqlite3_mprintf("%z%s%z", + pCheck->zReport, (pCheck->zReport ? "\n" : ""), z + ); + if( pCheck->zReport==0 ){ + pCheck->rc = SQLITE_NOMEM; + } + } + pCheck->nErr++; + } + va_end(ap); +} + +/* +** This function is a no-op if there is already an error code stored +** in the RtreeCheck object indicated by the first argument. NULL is +** returned in this case. +** +** Otherwise, the contents of rtree table node iNode are loaded from +** the database and copied into a buffer obtained from sqlite3_malloc(). +** If no error occurs, a pointer to the buffer is returned and (*pnNode) +** is set to the size of the buffer in bytes. +** +** Or, if an error does occur, NULL is returned and an error code left +** in the RtreeCheck object. The final value of *pnNode is undefined in +** this case. +*/ +static u8 *rtreeCheckGetNode(RtreeCheck *pCheck, i64 iNode, int *pnNode){ + u8 *pRet = 0; /* Return value */ + + if( pCheck->rc==SQLITE_OK && pCheck->pGetNode==0 ){ + pCheck->pGetNode = rtreeCheckPrepare(pCheck, + "SELECT data FROM %Q.'%q_node' WHERE nodeno=?", + pCheck->zDb, pCheck->zTab + ); + } + + if( pCheck->rc==SQLITE_OK ){ + sqlite3_bind_int64(pCheck->pGetNode, 1, iNode); + if( sqlite3_step(pCheck->pGetNode)==SQLITE_ROW ){ + int nNode = sqlite3_column_bytes(pCheck->pGetNode, 0); + const u8 *pNode = (const u8*)sqlite3_column_blob(pCheck->pGetNode, 0); + pRet = sqlite3_malloc64(nNode); + if( pRet==0 ){ + pCheck->rc = SQLITE_NOMEM; + }else{ + memcpy(pRet, pNode, nNode); + *pnNode = nNode; + } + } + rtreeCheckReset(pCheck, pCheck->pGetNode); + if( pCheck->rc==SQLITE_OK && pRet==0 ){ + rtreeCheckAppendMsg(pCheck, "Node %lld missing from database", iNode); + } + } + + return pRet; +} + +/* +** This function is used to check that the %_parent (if bLeaf==0) or %_rowid +** (if bLeaf==1) table contains a specified entry. The schemas of the +** two tables are: +** +** CREATE TABLE %_parent(nodeno INTEGER PRIMARY KEY, parentnode INTEGER) +** CREATE TABLE %_rowid(rowid INTEGER PRIMARY KEY, nodeno INTEGER, ...) +** +** In both cases, this function checks that there exists an entry with +** IPK value iKey and the second column set to iVal. +** +*/ +static void rtreeCheckMapping( + RtreeCheck *pCheck, /* RtreeCheck object */ + int bLeaf, /* True for a leaf cell, false for interior */ + i64 iKey, /* Key for mapping */ + i64 iVal /* Expected value for mapping */ +){ + int rc; + sqlite3_stmt *pStmt; + const char *azSql[2] = { + "SELECT parentnode FROM %Q.'%q_parent' WHERE nodeno=?1", + "SELECT nodeno FROM %Q.'%q_rowid' WHERE rowid=?1" + }; + + assert( bLeaf==0 || bLeaf==1 ); + if( pCheck->aCheckMapping[bLeaf]==0 ){ + pCheck->aCheckMapping[bLeaf] = rtreeCheckPrepare(pCheck, + azSql[bLeaf], pCheck->zDb, pCheck->zTab + ); + } + if( pCheck->rc!=SQLITE_OK ) return; + + pStmt = pCheck->aCheckMapping[bLeaf]; + sqlite3_bind_int64(pStmt, 1, iKey); + rc = sqlite3_step(pStmt); + if( rc==SQLITE_DONE ){ + rtreeCheckAppendMsg(pCheck, "Mapping (%lld -> %lld) missing from %s table", + iKey, iVal, (bLeaf ? "%_rowid" : "%_parent") + ); + }else if( rc==SQLITE_ROW ){ + i64 ii = sqlite3_column_int64(pStmt, 0); + if( ii!=iVal ){ + rtreeCheckAppendMsg(pCheck, + "Found (%lld -> %lld) in %s table, expected (%lld -> %lld)", + iKey, ii, (bLeaf ? "%_rowid" : "%_parent"), iKey, iVal + ); + } + } + rtreeCheckReset(pCheck, pStmt); +} + +/* +** Argument pCell points to an array of coordinates stored on an rtree page. +** This function checks that the coordinates are internally consistent (no +** x1>x2 conditions) and adds an error message to the RtreeCheck object +** if they are not. +** +** Additionally, if pParent is not NULL, then it is assumed to point to +** the array of coordinates on the parent page that bound the page +** containing pCell. In this case it is also verified that the two +** sets of coordinates are mutually consistent and an error message added +** to the RtreeCheck object if they are not. +*/ +static void rtreeCheckCellCoord( + RtreeCheck *pCheck, + i64 iNode, /* Node id to use in error messages */ + int iCell, /* Cell number to use in error messages */ + u8 *pCell, /* Pointer to cell coordinates */ + u8 *pParent /* Pointer to parent coordinates */ +){ + RtreeCoord c1, c2; + RtreeCoord p1, p2; + int i; + + for(i=0; inDim; i++){ + readCoord(&pCell[4*2*i], &c1); + readCoord(&pCell[4*(2*i + 1)], &c2); + + /* printf("%e, %e\n", c1.u.f, c2.u.f); */ + if( pCheck->bInt ? c1.i>c2.i : c1.f>c2.f ){ + rtreeCheckAppendMsg(pCheck, + "Dimension %d of cell %d on node %lld is corrupt", i, iCell, iNode + ); + } + + if( pParent ){ + readCoord(&pParent[4*2*i], &p1); + readCoord(&pParent[4*(2*i + 1)], &p2); + + if( (pCheck->bInt ? c1.ibInt ? c2.i>p2.i : c2.f>p2.f) + ){ + rtreeCheckAppendMsg(pCheck, + "Dimension %d of cell %d on node %lld is corrupt relative to parent" + , i, iCell, iNode + ); + } + } + } +} + +/* +** Run rtreecheck() checks on node iNode, which is at depth iDepth within +** the r-tree structure. Argument aParent points to the array of coordinates +** that bound node iNode on the parent node. +** +** If any problems are discovered, an error message is appended to the +** report accumulated in the RtreeCheck object. +*/ +static void rtreeCheckNode( + RtreeCheck *pCheck, + int iDepth, /* Depth of iNode (0==leaf) */ + u8 *aParent, /* Buffer containing parent coords */ + i64 iNode /* Node to check */ +){ + u8 *aNode = 0; + int nNode = 0; + + assert( iNode==1 || aParent!=0 ); + assert( pCheck->nDim>0 ); + + aNode = rtreeCheckGetNode(pCheck, iNode, &nNode); + if( aNode ){ + if( nNode<4 ){ + rtreeCheckAppendMsg(pCheck, + "Node %lld is too small (%d bytes)", iNode, nNode + ); + }else{ + int nCell; /* Number of cells on page */ + int i; /* Used to iterate through cells */ + if( aParent==0 ){ + iDepth = readInt16(aNode); + if( iDepth>RTREE_MAX_DEPTH ){ + rtreeCheckAppendMsg(pCheck, "Rtree depth out of range (%d)", iDepth); + sqlite3_free(aNode); + return; + } + } + nCell = readInt16(&aNode[2]); + if( (4 + nCell*(8 + pCheck->nDim*2*4))>nNode ){ + rtreeCheckAppendMsg(pCheck, + "Node %lld is too small for cell count of %d (%d bytes)", + iNode, nCell, nNode + ); + }else{ + for(i=0; inDim*2*4)]; + i64 iVal = readInt64(pCell); + rtreeCheckCellCoord(pCheck, iNode, i, &pCell[8], aParent); + + if( iDepth>0 ){ + rtreeCheckMapping(pCheck, 0, iVal, iNode); + rtreeCheckNode(pCheck, iDepth-1, &pCell[8], iVal); + pCheck->nNonLeaf++; + }else{ + rtreeCheckMapping(pCheck, 1, iVal, iNode); + pCheck->nLeaf++; + } + } + } + } + sqlite3_free(aNode); + } +} + +/* +** The second argument to this function must be either "_rowid" or +** "_parent". This function checks that the number of entries in the +** %_rowid or %_parent table is exactly nExpect. If not, it adds +** an error message to the report in the RtreeCheck object indicated +** by the first argument. +*/ +static void rtreeCheckCount(RtreeCheck *pCheck, const char *zTbl, i64 nExpect){ + if( pCheck->rc==SQLITE_OK ){ + sqlite3_stmt *pCount; + pCount = rtreeCheckPrepare(pCheck, "SELECT count(*) FROM %Q.'%q%s'", + pCheck->zDb, pCheck->zTab, zTbl + ); + if( pCount ){ + if( sqlite3_step(pCount)==SQLITE_ROW ){ + i64 nActual = sqlite3_column_int64(pCount, 0); + if( nActual!=nExpect ){ + rtreeCheckAppendMsg(pCheck, "Wrong number of entries in %%%s table" + " - expected %lld, actual %lld" , zTbl, nExpect, nActual + ); + } + } + pCheck->rc = sqlite3_finalize(pCount); + } + } +} + +/* +** This function does the bulk of the work for the rtree integrity-check. +** It is called by rtreecheck(), which is the SQL function implementation. +*/ +static int rtreeCheckTable( + sqlite3 *db, /* Database handle to access db through */ + const char *zDb, /* Name of db ("main", "temp" etc.) */ + const char *zTab, /* Name of rtree table to check */ + char **pzReport /* OUT: sqlite3_malloc'd report text */ +){ + RtreeCheck check; /* Common context for various routines */ + sqlite3_stmt *pStmt = 0; /* Used to find column count of rtree table */ + int nAux = 0; /* Number of extra columns. */ + + /* Initialize the context object */ + memset(&check, 0, sizeof(check)); + check.db = db; + check.zDb = zDb; + check.zTab = zTab; + + /* Find the number of auxiliary columns */ + pStmt = rtreeCheckPrepare(&check, "SELECT * FROM %Q.'%q_rowid'", zDb, zTab); + if( pStmt ){ + nAux = sqlite3_column_count(pStmt) - 2; + sqlite3_finalize(pStmt); + }else + if( check.rc!=SQLITE_NOMEM ){ + check.rc = SQLITE_OK; + } + + /* Find number of dimensions in the rtree table. */ + pStmt = rtreeCheckPrepare(&check, "SELECT * FROM %Q.%Q", zDb, zTab); + if( pStmt ){ + int rc; + check.nDim = (sqlite3_column_count(pStmt) - 1 - nAux) / 2; + if( check.nDim<1 ){ + rtreeCheckAppendMsg(&check, "Schema corrupt or not an rtree"); + }else if( SQLITE_ROW==sqlite3_step(pStmt) ){ + check.bInt = (sqlite3_column_type(pStmt, 1)==SQLITE_INTEGER); + } + rc = sqlite3_finalize(pStmt); + if( rc!=SQLITE_CORRUPT ) check.rc = rc; + } + + /* Do the actual integrity-check */ + if( check.nDim>=1 ){ + if( check.rc==SQLITE_OK ){ + rtreeCheckNode(&check, 0, 0, 1); + } + rtreeCheckCount(&check, "_rowid", check.nLeaf); + rtreeCheckCount(&check, "_parent", check.nNonLeaf); + } + + /* Finalize SQL statements used by the integrity-check */ + sqlite3_finalize(check.pGetNode); + sqlite3_finalize(check.aCheckMapping[0]); + sqlite3_finalize(check.aCheckMapping[1]); + + *pzReport = check.zReport; + return check.rc; +} + +/* +** Implementation of the xIntegrity method for Rtree. +*/ +static int rtreeIntegrity( + sqlite3_vtab *pVtab, /* The virtual table to check */ + const char *zSchema, /* Schema in which the virtual table lives */ + const char *zName, /* Name of the virtual table */ + int isQuick, /* True for a quick_check */ + char **pzErr /* Write results here */ +){ + Rtree *pRtree = (Rtree*)pVtab; + int rc; + assert( pzErr!=0 && *pzErr==0 ); + UNUSED_PARAMETER(zSchema); + UNUSED_PARAMETER(zName); + UNUSED_PARAMETER(isQuick); + rc = rtreeCheckTable(pRtree->db, pRtree->zDb, pRtree->zName, pzErr); + if( rc==SQLITE_OK && *pzErr ){ + *pzErr = sqlite3_mprintf("In RTree %s.%s:\n%z", + pRtree->zDb, pRtree->zName, *pzErr); + if( (*pzErr)==0 ) rc = SQLITE_NOMEM; + } + return rc; +} + +/* +** Usage: +** +** rtreecheck(); +** rtreecheck(, ); +** +** Invoking this SQL function runs an integrity-check on the named rtree +** table. The integrity-check verifies the following: +** +** 1. For each cell in the r-tree structure (%_node table), that: +** +** a) for each dimension, (coord1 <= coord2). +** +** b) unless the cell is on the root node, that the cell is bounded +** by the parent cell on the parent node. +** +** c) for leaf nodes, that there is an entry in the %_rowid +** table corresponding to the cell's rowid value that +** points to the correct node. +** +** d) for cells on non-leaf nodes, that there is an entry in the +** %_parent table mapping from the cell's child node to the +** node that it resides on. +** +** 2. That there are the same number of entries in the %_rowid table +** as there are leaf cells in the r-tree structure, and that there +** is a leaf cell that corresponds to each entry in the %_rowid table. +** +** 3. That there are the same number of entries in the %_parent table +** as there are non-leaf cells in the r-tree structure, and that +** there is a non-leaf cell that corresponds to each entry in the +** %_parent table. +*/ +static void rtreecheck( + sqlite3_context *ctx, + int nArg, + sqlite3_value **apArg +){ + if( nArg!=1 && nArg!=2 ){ + sqlite3_result_error(ctx, + "wrong number of arguments to function rtreecheck()", -1 + ); + }else{ + int rc; + char *zReport = 0; + const char *zDb = (const char*)sqlite3_value_text(apArg[0]); + const char *zTab; + if( nArg==1 ){ + zTab = zDb; + zDb = "main"; + }else{ + zTab = (const char*)sqlite3_value_text(apArg[1]); + } + rc = rtreeCheckTable(sqlite3_context_db_handle(ctx), zDb, zTab, &zReport); + if( rc==SQLITE_OK ){ + sqlite3_result_text(ctx, zReport ? zReport : "ok", -1, SQLITE_TRANSIENT); + }else{ + sqlite3_result_error_code(ctx, rc); + } + sqlite3_free(zReport); + } +} + +/* Conditionally include the geopoly code */ +#ifdef SQLITE_ENABLE_GEOPOLY +/************** Include geopoly.c in the middle of rtree.c *******************/ +/************** Begin file geopoly.c *****************************************/ +/* +** 2018-05-25 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This file implements an alternative R-Tree virtual table that +** uses polygons to express the boundaries of 2-dimensional objects. +** +** This file is #include-ed onto the end of "rtree.c" so that it has +** access to all of the R-Tree internals. +*/ +/* #include */ + +/* Enable -DGEOPOLY_ENABLE_DEBUG for debugging facilities */ +#ifdef GEOPOLY_ENABLE_DEBUG + static int geo_debug = 0; +# define GEODEBUG(X) if(geo_debug)printf X +#else +# define GEODEBUG(X) +#endif + +/* Character class routines */ +#ifdef sqlite3Isdigit + /* Use the SQLite core versions if this routine is part of the + ** SQLite amalgamation */ +# define safe_isdigit(x) sqlite3Isdigit(x) +# define safe_isalnum(x) sqlite3Isalnum(x) +# define safe_isxdigit(x) sqlite3Isxdigit(x) +#else + /* Use the standard library for separate compilation */ +#include /* amalgamator: keep */ +# define safe_isdigit(x) isdigit((unsigned char)(x)) +# define safe_isalnum(x) isalnum((unsigned char)(x)) +# define safe_isxdigit(x) isxdigit((unsigned char)(x)) +#endif + +#ifndef JSON_NULL /* The following stuff repeats things found in json1 */ +/* +** Growing our own isspace() routine this way is twice as fast as +** the library isspace() function. +*/ +static const char geopolyIsSpace[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; +#define fast_isspace(x) (geopolyIsSpace[(unsigned char)x]) +#endif /* JSON NULL - back to original code */ + +/* Compiler and version */ +#ifndef GCC_VERSION +#if defined(__GNUC__) && !defined(SQLITE_DISABLE_INTRINSIC) +# define GCC_VERSION (__GNUC__*1000000+__GNUC_MINOR__*1000+__GNUC_PATCHLEVEL__) +#else +# define GCC_VERSION 0 +#endif +#endif +#ifndef MSVC_VERSION +#if defined(_MSC_VER) && !defined(SQLITE_DISABLE_INTRINSIC) +# define MSVC_VERSION _MSC_VER +#else +# define MSVC_VERSION 0 +#endif +#endif + +/* Datatype for coordinates +*/ +typedef float GeoCoord; + +/* +** Internal representation of a polygon. +** +** The polygon consists of a sequence of vertexes. There is a line +** segment between each pair of vertexes, and one final segment from +** the last vertex back to the first. (This differs from the GeoJSON +** standard in which the final vertex is a repeat of the first.) +** +** The polygon follows the right-hand rule. The area to the right of +** each segment is "outside" and the area to the left is "inside". +** +** The on-disk representation consists of a 4-byte header followed by +** the values. The 4-byte header is: +** +** encoding (1 byte) 0=big-endian, 1=little-endian +** nvertex (3 bytes) Number of vertexes as a big-endian integer +** +** Enough space is allocated for 4 coordinates, to work around over-zealous +** warnings coming from some compiler (notably, clang). In reality, the size +** of each GeoPoly memory allocate is adjusted as necessary so that the +** GeoPoly.a[] array at the end is the appropriate size. +*/ +typedef struct GeoPoly GeoPoly; +struct GeoPoly { + int nVertex; /* Number of vertexes */ + unsigned char hdr[4]; /* Header for on-disk representation */ + GeoCoord a[8]; /* 2*nVertex values. X (longitude) first, then Y */ +}; + +/* The size of a memory allocation needed for a GeoPoly object sufficient +** to hold N coordinate pairs. +*/ +#define GEOPOLY_SZ(N) (sizeof(GeoPoly) + sizeof(GeoCoord)*2*((N)-4)) + +/* Macros to access coordinates of a GeoPoly. +** We have to use these macros, rather than just say p->a[i] in order +** to silence (incorrect) UBSAN warnings if the array index is too large. +*/ +#define GeoX(P,I) (((GeoCoord*)(P)->a)[(I)*2]) +#define GeoY(P,I) (((GeoCoord*)(P)->a)[(I)*2+1]) + + +/* +** State of a parse of a GeoJSON input. +*/ +typedef struct GeoParse GeoParse; +struct GeoParse { + const unsigned char *z; /* Unparsed input */ + int nVertex; /* Number of vertexes in a[] */ + int nAlloc; /* Space allocated to a[] */ + int nErr; /* Number of errors encountered */ + GeoCoord *a; /* Array of vertexes. From sqlite3_malloc64() */ +}; + +/* Do a 4-byte byte swap */ +static void geopolySwab32(unsigned char *a){ + unsigned char t = a[0]; + a[0] = a[3]; + a[3] = t; + t = a[1]; + a[1] = a[2]; + a[2] = t; +} + +/* Skip whitespace. Return the next non-whitespace character. */ +static char geopolySkipSpace(GeoParse *p){ + while( fast_isspace(p->z[0]) ) p->z++; + return p->z[0]; +} + +/* Parse out a number. Write the value into *pVal if pVal!=0. +** return non-zero on success and zero if the next token is not a number. +*/ +static int geopolyParseNumber(GeoParse *p, GeoCoord *pVal){ + char c = geopolySkipSpace(p); + const unsigned char *z = p->z; + int j = 0; + int seenDP = 0; + int seenE = 0; + if( c=='-' ){ + j = 1; + c = z[j]; + } + if( c=='0' && z[j+1]>='0' && z[j+1]<='9' ) return 0; + for(;; j++){ + c = z[j]; + if( safe_isdigit(c) ) continue; + if( c=='.' ){ + if( z[j-1]=='-' ) return 0; + if( seenDP ) return 0; + seenDP = 1; + continue; + } + if( c=='e' || c=='E' ){ + if( z[j-1]<'0' ) return 0; + if( seenE ) return -1; + seenDP = seenE = 1; + c = z[j+1]; + if( c=='+' || c=='-' ){ + j++; + c = z[j+1]; + } + if( c<'0' || c>'9' ) return 0; + continue; + } + break; + } + if( z[j-1]<'0' ) return 0; + if( pVal ){ +#ifdef SQLITE_AMALGAMATION + /* The sqlite3AtoF() routine is much much faster than atof(), if it + ** is available */ + double r; + (void)sqlite3AtoF((const char*)p->z, &r, j, SQLITE_UTF8); + *pVal = r; +#else + *pVal = (GeoCoord)atof((const char*)p->z); +#endif + } + p->z += j; + return 1; +} + +/* +** If the input is a well-formed JSON array of coordinates with at least +** four coordinates and where each coordinate is itself a two-value array, +** then convert the JSON into a GeoPoly object and return a pointer to +** that object. +** +** If any error occurs, return NULL. +*/ +static GeoPoly *geopolyParseJson(const unsigned char *z, int *pRc){ + GeoParse s; + int rc = SQLITE_OK; + memset(&s, 0, sizeof(s)); + s.z = z; + if( geopolySkipSpace(&s)=='[' ){ + s.z++; + while( geopolySkipSpace(&s)=='[' ){ + int ii = 0; + char c; + s.z++; + if( s.nVertex>=s.nAlloc ){ + GeoCoord *aNew; + s.nAlloc = s.nAlloc*2 + 16; + aNew = sqlite3_realloc64(s.a, s.nAlloc*sizeof(GeoCoord)*2 ); + if( aNew==0 ){ + rc = SQLITE_NOMEM; + s.nErr++; + break; + } + s.a = aNew; + } + while( geopolyParseNumber(&s, ii<=1 ? &s.a[s.nVertex*2+ii] : 0) ){ + ii++; + if( ii==2 ) s.nVertex++; + c = geopolySkipSpace(&s); + s.z++; + if( c==',' ) continue; + if( c==']' && ii>=2 ) break; + s.nErr++; + rc = SQLITE_ERROR; + goto parse_json_err; + } + if( geopolySkipSpace(&s)==',' ){ + s.z++; + continue; + } + break; + } + if( geopolySkipSpace(&s)==']' + && s.nVertex>=4 + && s.a[0]==s.a[s.nVertex*2-2] + && s.a[1]==s.a[s.nVertex*2-1] + && (s.z++, geopolySkipSpace(&s)==0) + ){ + GeoPoly *pOut; + int x = 1; + s.nVertex--; /* Remove the redundant vertex at the end */ + pOut = sqlite3_malloc64( GEOPOLY_SZ((sqlite3_int64)s.nVertex) ); + x = 1; + if( pOut==0 ) goto parse_json_err; + pOut->nVertex = s.nVertex; + memcpy(pOut->a, s.a, s.nVertex*2*sizeof(GeoCoord)); + pOut->hdr[0] = *(unsigned char*)&x; + pOut->hdr[1] = (s.nVertex>>16)&0xff; + pOut->hdr[2] = (s.nVertex>>8)&0xff; + pOut->hdr[3] = s.nVertex&0xff; + sqlite3_free(s.a); + if( pRc ) *pRc = SQLITE_OK; + return pOut; + }else{ + s.nErr++; + rc = SQLITE_ERROR; + } + } +parse_json_err: + if( pRc ) *pRc = rc; + sqlite3_free(s.a); + return 0; +} + +/* +** Given a function parameter, try to interpret it as a polygon, either +** in the binary format or JSON text. Compute a GeoPoly object and +** return a pointer to that object. Or if the input is not a well-formed +** polygon, put an error message in sqlite3_context and return NULL. +*/ +static GeoPoly *geopolyFuncParam( + sqlite3_context *pCtx, /* Context for error messages */ + sqlite3_value *pVal, /* The value to decode */ + int *pRc /* Write error here */ +){ + GeoPoly *p = 0; + int nByte; + testcase( pCtx==0 ); + if( sqlite3_value_type(pVal)==SQLITE_BLOB + && (nByte = sqlite3_value_bytes(pVal))>=(int)(4+6*sizeof(GeoCoord)) + ){ + const unsigned char *a = sqlite3_value_blob(pVal); + int nVertex; + if( a==0 ){ + if( pCtx ) sqlite3_result_error_nomem(pCtx); + return 0; + } + nVertex = (a[1]<<16) + (a[2]<<8) + a[3]; + if( (a[0]==0 || a[0]==1) + && (nVertex*2*sizeof(GeoCoord) + 4)==(unsigned int)nByte + ){ + p = sqlite3_malloc64( sizeof(*p) + (nVertex-1)*2*sizeof(GeoCoord) ); + if( p==0 ){ + if( pRc ) *pRc = SQLITE_NOMEM; + if( pCtx ) sqlite3_result_error_nomem(pCtx); + }else{ + int x = 1; + p->nVertex = nVertex; + memcpy(p->hdr, a, nByte); + if( a[0] != *(unsigned char*)&x ){ + int ii; + for(ii=0; iihdr[0] ^= 1; + } + } + } + if( pRc ) *pRc = SQLITE_OK; + return p; + }else if( sqlite3_value_type(pVal)==SQLITE_TEXT ){ + const unsigned char *zJson = sqlite3_value_text(pVal); + if( zJson==0 ){ + if( pRc ) *pRc = SQLITE_NOMEM; + return 0; + } + return geopolyParseJson(zJson, pRc); + }else{ + if( pRc ) *pRc = SQLITE_ERROR; + return 0; + } +} + +/* +** Implementation of the geopoly_blob(X) function. +** +** If the input is a well-formed Geopoly BLOB or JSON string +** then return the BLOB representation of the polygon. Otherwise +** return NULL. +*/ +static void geopolyBlobFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + (void)argc; + if( p ){ + sqlite3_result_blob(context, p->hdr, + 4+8*p->nVertex, SQLITE_TRANSIENT); + sqlite3_free(p); + } +} + +/* +** SQL function: geopoly_json(X) +** +** Interpret X as a polygon and render it as a JSON array +** of coordinates. Or, if X is not a valid polygon, return NULL. +*/ +static void geopolyJsonFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + (void)argc; + if( p ){ + sqlite3 *db = sqlite3_context_db_handle(context); + sqlite3_str *x = sqlite3_str_new(db); + int i; + sqlite3_str_append(x, "[", 1); + for(i=0; inVertex; i++){ + sqlite3_str_appendf(x, "[%!g,%!g],", GeoX(p,i), GeoY(p,i)); + } + sqlite3_str_appendf(x, "[%!g,%!g]]", GeoX(p,0), GeoY(p,0)); + sqlite3_result_text(context, sqlite3_str_finish(x), -1, sqlite3_free); + sqlite3_free(p); + } +} + +/* +** SQL function: geopoly_svg(X, ....) +** +** Interpret X as a polygon and render it as a SVG . +** Additional arguments are added as attributes to the . +*/ +static void geopolySvgFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p; + if( argc<1 ) return; + p = geopolyFuncParam(context, argv[0], 0); + if( p ){ + sqlite3 *db = sqlite3_context_db_handle(context); + sqlite3_str *x = sqlite3_str_new(db); + int i; + char cSep = '\''; + sqlite3_str_appendf(x, ""); + sqlite3_result_text(context, sqlite3_str_finish(x), -1, sqlite3_free); + sqlite3_free(p); + } +} + +/* +** SQL Function: geopoly_xform(poly, A, B, C, D, E, F) +** +** Transform and/or translate a polygon as follows: +** +** x1 = A*x0 + B*y0 + E +** y1 = C*x0 + D*y0 + F +** +** For a translation: +** +** geopoly_xform(poly, 1, 0, 0, 1, x-offset, y-offset) +** +** Rotate by R around the point (0,0): +** +** geopoly_xform(poly, cos(R), sin(R), -sin(R), cos(R), 0, 0) +*/ +static void geopolyXformFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + double A = sqlite3_value_double(argv[1]); + double B = sqlite3_value_double(argv[2]); + double C = sqlite3_value_double(argv[3]); + double D = sqlite3_value_double(argv[4]); + double E = sqlite3_value_double(argv[5]); + double F = sqlite3_value_double(argv[6]); + GeoCoord x1, y1, x0, y0; + int ii; + (void)argc; + if( p ){ + for(ii=0; iinVertex; ii++){ + x0 = GeoX(p,ii); + y0 = GeoY(p,ii); + x1 = (GeoCoord)(A*x0 + B*y0 + E); + y1 = (GeoCoord)(C*x0 + D*y0 + F); + GeoX(p,ii) = x1; + GeoY(p,ii) = y1; + } + sqlite3_result_blob(context, p->hdr, + 4+8*p->nVertex, SQLITE_TRANSIENT); + sqlite3_free(p); + } +} + +/* +** Compute the area enclosed by the polygon. +** +** This routine can also be used to detect polygons that rotate in +** the wrong direction. Polygons are suppose to be counter-clockwise (CCW). +** This routine returns a negative value for clockwise (CW) polygons. +*/ +static double geopolyArea(GeoPoly *p){ + double rArea = 0.0; + int ii; + for(ii=0; iinVertex-1; ii++){ + rArea += (GeoX(p,ii) - GeoX(p,ii+1)) /* (x0 - x1) */ + * (GeoY(p,ii) + GeoY(p,ii+1)) /* (y0 + y1) */ + * 0.5; + } + rArea += (GeoX(p,ii) - GeoX(p,0)) /* (xN - x0) */ + * (GeoY(p,ii) + GeoY(p,0)) /* (yN + y0) */ + * 0.5; + return rArea; +} + +/* +** Implementation of the geopoly_area(X) function. +** +** If the input is a well-formed Geopoly BLOB then return the area +** enclosed by the polygon. If the polygon circulates clockwise instead +** of counterclockwise (as it should) then return the negative of the +** enclosed area. Otherwise return NULL. +*/ +static void geopolyAreaFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + (void)argc; + if( p ){ + sqlite3_result_double(context, geopolyArea(p)); + sqlite3_free(p); + } +} + +/* +** Implementation of the geopoly_ccw(X) function. +** +** If the rotation of polygon X is clockwise (incorrect) instead of +** counter-clockwise (the correct winding order according to RFC7946) +** then reverse the order of the vertexes in polygon X. +** +** In other words, this routine returns a CCW polygon regardless of the +** winding order of its input. +** +** Use this routine to sanitize historical inputs that that sometimes +** contain polygons that wind in the wrong direction. +*/ +static void geopolyCcwFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + (void)argc; + if( p ){ + if( geopolyArea(p)<0.0 ){ + int ii, jj; + for(ii=1, jj=p->nVertex-1; iihdr, + 4+8*p->nVertex, SQLITE_TRANSIENT); + sqlite3_free(p); + } +} + +#define GEOPOLY_PI 3.1415926535897932385 + +/* Fast approximation for sine(X) for X between -0.5*pi and 2*pi +*/ +static double geopolySine(double r){ + assert( r>=-0.5*GEOPOLY_PI && r<=2.0*GEOPOLY_PI ); + if( r>=1.5*GEOPOLY_PI ){ + r -= 2.0*GEOPOLY_PI; + } + if( r>=0.5*GEOPOLY_PI ){ + return -geopolySine(r-GEOPOLY_PI); + }else{ + double r2 = r*r; + double r3 = r2*r; + double r5 = r3*r2; + return 0.9996949*r - 0.1656700*r3 + 0.0075134*r5; + } +} + +/* +** Function: geopoly_regular(X,Y,R,N) +** +** Construct a simple, convex, regular polygon centered at X, Y +** with circumradius R and with N sides. +*/ +static void geopolyRegularFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + double x = sqlite3_value_double(argv[0]); + double y = sqlite3_value_double(argv[1]); + double r = sqlite3_value_double(argv[2]); + int n = sqlite3_value_int(argv[3]); + int i; + GeoPoly *p; + (void)argc; + + if( n<3 || r<=0.0 ) return; + if( n>1000 ) n = 1000; + p = sqlite3_malloc64( sizeof(*p) + (n-1)*2*sizeof(GeoCoord) ); + if( p==0 ){ + sqlite3_result_error_nomem(context); + return; + } + i = 1; + p->hdr[0] = *(unsigned char*)&i; + p->hdr[1] = 0; + p->hdr[2] = (n>>8)&0xff; + p->hdr[3] = n&0xff; + for(i=0; ihdr, 4+8*n, SQLITE_TRANSIENT); + sqlite3_free(p); +} + +/* +** If pPoly is a polygon, compute its bounding box. Then: +** +** (1) if aCoord!=0 store the bounding box in aCoord, returning NULL +** (2) otherwise, compute a GeoPoly for the bounding box and return the +** new GeoPoly +** +** If pPoly is NULL but aCoord is not NULL, then compute a new GeoPoly from +** the bounding box in aCoord and return a pointer to that GeoPoly. +*/ +static GeoPoly *geopolyBBox( + sqlite3_context *context, /* For recording the error */ + sqlite3_value *pPoly, /* The polygon */ + RtreeCoord *aCoord, /* Results here */ + int *pRc /* Error code here */ +){ + GeoPoly *pOut = 0; + GeoPoly *p; + float mnX, mxX, mnY, mxY; + if( pPoly==0 && aCoord!=0 ){ + p = 0; + mnX = aCoord[0].f; + mxX = aCoord[1].f; + mnY = aCoord[2].f; + mxY = aCoord[3].f; + goto geopolyBboxFill; + }else{ + p = geopolyFuncParam(context, pPoly, pRc); + } + if( p ){ + int ii; + mnX = mxX = GeoX(p,0); + mnY = mxY = GeoY(p,0); + for(ii=1; iinVertex; ii++){ + double r = GeoX(p,ii); + if( rmxX ) mxX = (float)r; + r = GeoY(p,ii); + if( rmxY ) mxY = (float)r; + } + if( pRc ) *pRc = SQLITE_OK; + if( aCoord==0 ){ + geopolyBboxFill: + pOut = sqlite3_realloc64(p, GEOPOLY_SZ(4)); + if( pOut==0 ){ + sqlite3_free(p); + if( context ) sqlite3_result_error_nomem(context); + if( pRc ) *pRc = SQLITE_NOMEM; + return 0; + } + pOut->nVertex = 4; + ii = 1; + pOut->hdr[0] = *(unsigned char*)ⅈ + pOut->hdr[1] = 0; + pOut->hdr[2] = 0; + pOut->hdr[3] = 4; + GeoX(pOut,0) = mnX; + GeoY(pOut,0) = mnY; + GeoX(pOut,1) = mxX; + GeoY(pOut,1) = mnY; + GeoX(pOut,2) = mxX; + GeoY(pOut,2) = mxY; + GeoX(pOut,3) = mnX; + GeoY(pOut,3) = mxY; + }else{ + sqlite3_free(p); + aCoord[0].f = mnX; + aCoord[1].f = mxX; + aCoord[2].f = mnY; + aCoord[3].f = mxY; + } + }else if( aCoord ){ + memset(aCoord, 0, sizeof(RtreeCoord)*4); + } + return pOut; +} + +/* +** Implementation of the geopoly_bbox(X) SQL function. +*/ +static void geopolyBBoxFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p = geopolyBBox(context, argv[0], 0, 0); + (void)argc; + if( p ){ + sqlite3_result_blob(context, p->hdr, + 4+8*p->nVertex, SQLITE_TRANSIENT); + sqlite3_free(p); + } +} + +/* +** State vector for the geopoly_group_bbox() aggregate function. +*/ +typedef struct GeoBBox GeoBBox; +struct GeoBBox { + int isInit; + RtreeCoord a[4]; +}; + + +/* +** Implementation of the geopoly_group_bbox(X) aggregate SQL function. +*/ +static void geopolyBBoxStep( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + RtreeCoord a[4]; + int rc = SQLITE_OK; + (void)argc; + (void)geopolyBBox(context, argv[0], a, &rc); + if( rc==SQLITE_OK ){ + GeoBBox *pBBox; + pBBox = (GeoBBox*)sqlite3_aggregate_context(context, sizeof(*pBBox)); + if( pBBox==0 ) return; + if( pBBox->isInit==0 ){ + pBBox->isInit = 1; + memcpy(pBBox->a, a, sizeof(RtreeCoord)*4); + }else{ + if( a[0].f < pBBox->a[0].f ) pBBox->a[0] = a[0]; + if( a[1].f > pBBox->a[1].f ) pBBox->a[1] = a[1]; + if( a[2].f < pBBox->a[2].f ) pBBox->a[2] = a[2]; + if( a[3].f > pBBox->a[3].f ) pBBox->a[3] = a[3]; + } + } +} +static void geopolyBBoxFinal( + sqlite3_context *context +){ + GeoPoly *p; + GeoBBox *pBBox; + pBBox = (GeoBBox*)sqlite3_aggregate_context(context, 0); + if( pBBox==0 ) return; + p = geopolyBBox(context, 0, pBBox->a, 0); + if( p ){ + sqlite3_result_blob(context, p->hdr, + 4+8*p->nVertex, SQLITE_TRANSIENT); + sqlite3_free(p); + } +} + + +/* +** Determine if point (x0,y0) is beneath line segment (x1,y1)->(x2,y2). +** Returns: +** +** +2 x0,y0 is on the line segment +** +** +1 x0,y0 is beneath line segment +** +** 0 x0,y0 is not on or beneath the line segment or the line segment +** is vertical and x0,y0 is not on the line segment +** +** The left-most coordinate min(x1,x2) is not considered to be part of +** the line segment for the purposes of this analysis. +*/ +static int pointBeneathLine( + double x0, double y0, + double x1, double y1, + double x2, double y2 +){ + double y; + if( x0==x1 && y0==y1 ) return 2; + if( x1x2 ) return 0; + }else if( x1>x2 ){ + if( x0<=x2 || x0>x1 ) return 0; + }else{ + /* Vertical line segment */ + if( x0!=x1 ) return 0; + if( y0y1 && y0>y2 ) return 0; + return 2; + } + y = y1 + (y2-y1)*(x0-x1)/(x2-x1); + if( y0==y ) return 2; + if( y0nVertex-1; ii++){ + v = pointBeneathLine(x0,y0,GeoX(p1,ii), GeoY(p1,ii), + GeoX(p1,ii+1),GeoY(p1,ii+1)); + if( v==2 ) break; + cnt += v; + } + if( v!=2 ){ + v = pointBeneathLine(x0,y0,GeoX(p1,ii), GeoY(p1,ii), + GeoX(p1,0), GeoY(p1,0)); + } + if( v==2 ){ + sqlite3_result_int(context, 1); + }else if( ((v+cnt)&1)==0 ){ + sqlite3_result_int(context, 0); + }else{ + sqlite3_result_int(context, 2); + } + sqlite3_free(p1); +} + +/* Forward declaration */ +static int geopolyOverlap(GeoPoly *p1, GeoPoly *p2); + +/* +** SQL function: geopoly_within(P1,P2) +** +** Return +2 if P1 and P2 are the same polygon +** Return +1 if P2 is contained within P1 +** Return 0 if any part of P2 is on the outside of P1 +** +*/ +static void geopolyWithinFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p1 = geopolyFuncParam(context, argv[0], 0); + GeoPoly *p2 = geopolyFuncParam(context, argv[1], 0); + (void)argc; + if( p1 && p2 ){ + int x = geopolyOverlap(p1, p2); + if( x<0 ){ + sqlite3_result_error_nomem(context); + }else{ + sqlite3_result_int(context, x==2 ? 1 : x==4 ? 2 : 0); + } + } + sqlite3_free(p1); + sqlite3_free(p2); +} + +/* Objects used by the overlap algorithm. */ +typedef struct GeoEvent GeoEvent; +typedef struct GeoSegment GeoSegment; +typedef struct GeoOverlap GeoOverlap; +struct GeoEvent { + double x; /* X coordinate at which event occurs */ + int eType; /* 0 for ADD, 1 for REMOVE */ + GeoSegment *pSeg; /* The segment to be added or removed */ + GeoEvent *pNext; /* Next event in the sorted list */ +}; +struct GeoSegment { + double C, B; /* y = C*x + B */ + double y; /* Current y value */ + float y0; /* Initial y value */ + unsigned char side; /* 1 for p1, 2 for p2 */ + unsigned int idx; /* Which segment within the side */ + GeoSegment *pNext; /* Next segment in a list sorted by y */ +}; +struct GeoOverlap { + GeoEvent *aEvent; /* Array of all events */ + GeoSegment *aSegment; /* Array of all segments */ + int nEvent; /* Number of events */ + int nSegment; /* Number of segments */ +}; + +/* +** Add a single segment and its associated events. +*/ +static void geopolyAddOneSegment( + GeoOverlap *p, + GeoCoord x0, + GeoCoord y0, + GeoCoord x1, + GeoCoord y1, + unsigned char side, + unsigned int idx +){ + GeoSegment *pSeg; + GeoEvent *pEvent; + if( x0==x1 ) return; /* Ignore vertical segments */ + if( x0>x1 ){ + GeoCoord t = x0; + x0 = x1; + x1 = t; + t = y0; + y0 = y1; + y1 = t; + } + pSeg = p->aSegment + p->nSegment; + p->nSegment++; + pSeg->C = (y1-y0)/(x1-x0); + pSeg->B = y1 - x1*pSeg->C; + pSeg->y0 = y0; + pSeg->side = side; + pSeg->idx = idx; + pEvent = p->aEvent + p->nEvent; + p->nEvent++; + pEvent->x = x0; + pEvent->eType = 0; + pEvent->pSeg = pSeg; + pEvent = p->aEvent + p->nEvent; + p->nEvent++; + pEvent->x = x1; + pEvent->eType = 1; + pEvent->pSeg = pSeg; +} + + + +/* +** Insert all segments and events for polygon pPoly. +*/ +static void geopolyAddSegments( + GeoOverlap *p, /* Add segments to this Overlap object */ + GeoPoly *pPoly, /* Take all segments from this polygon */ + unsigned char side /* The side of pPoly */ +){ + unsigned int i; + GeoCoord *x; + for(i=0; i<(unsigned)pPoly->nVertex-1; i++){ + x = &GeoX(pPoly,i); + geopolyAddOneSegment(p, x[0], x[1], x[2], x[3], side, i); + } + x = &GeoX(pPoly,i); + geopolyAddOneSegment(p, x[0], x[1], pPoly->a[0], pPoly->a[1], side, i); +} + +/* +** Merge two lists of sorted events by X coordinate +*/ +static GeoEvent *geopolyEventMerge(GeoEvent *pLeft, GeoEvent *pRight){ + GeoEvent head, *pLast; + head.pNext = 0; + pLast = &head; + while( pRight && pLeft ){ + if( pRight->x <= pLeft->x ){ + pLast->pNext = pRight; + pLast = pRight; + pRight = pRight->pNext; + }else{ + pLast->pNext = pLeft; + pLast = pLeft; + pLeft = pLeft->pNext; + } + } + pLast->pNext = pRight ? pRight : pLeft; + return head.pNext; +} + +/* +** Sort an array of nEvent event objects into a list. +*/ +static GeoEvent *geopolySortEventsByX(GeoEvent *aEvent, int nEvent){ + int mx = 0; + int i, j; + GeoEvent *p; + GeoEvent *a[50]; + for(i=0; ipNext = 0; + for(j=0; j=mx ) mx = j+1; + } + p = 0; + for(i=0; iy - pLeft->y; + if( r==0.0 ) r = pRight->C - pLeft->C; + if( r<0.0 ){ + pLast->pNext = pRight; + pLast = pRight; + pRight = pRight->pNext; + }else{ + pLast->pNext = pLeft; + pLast = pLeft; + pLeft = pLeft->pNext; + } + } + pLast->pNext = pRight ? pRight : pLeft; + return head.pNext; +} + +/* +** Sort a list of GeoSegments in order of increasing Y and in the event of +** a tie, increasing C (slope). +*/ +static GeoSegment *geopolySortSegmentsByYAndC(GeoSegment *pList){ + int mx = 0; + int i; + GeoSegment *p; + GeoSegment *a[50]; + while( pList ){ + p = pList; + pList = pList->pNext; + p->pNext = 0; + for(i=0; i=mx ) mx = i+1; + } + p = 0; + for(i=0; inVertex + p2->nVertex + 2; + GeoOverlap *p; + sqlite3_int64 nByte; + GeoEvent *pThisEvent; + double rX; + int rc = 0; + int needSort = 0; + GeoSegment *pActive = 0; + GeoSegment *pSeg; + unsigned char aOverlap[4]; + + nByte = sizeof(GeoEvent)*nVertex*2 + + sizeof(GeoSegment)*nVertex + + sizeof(GeoOverlap); + p = sqlite3_malloc64( nByte ); + if( p==0 ) return -1; + p->aEvent = (GeoEvent*)&p[1]; + p->aSegment = (GeoSegment*)&p->aEvent[nVertex*2]; + p->nEvent = p->nSegment = 0; + geopolyAddSegments(p, p1, 1); + geopolyAddSegments(p, p2, 2); + pThisEvent = geopolySortEventsByX(p->aEvent, p->nEvent); + rX = pThisEvent && pThisEvent->x==0.0 ? -1.0 : 0.0; + memset(aOverlap, 0, sizeof(aOverlap)); + while( pThisEvent ){ + if( pThisEvent->x!=rX ){ + GeoSegment *pPrev = 0; + int iMask = 0; + GEODEBUG(("Distinct X: %g\n", pThisEvent->x)); + rX = pThisEvent->x; + if( needSort ){ + GEODEBUG(("SORT\n")); + pActive = geopolySortSegmentsByYAndC(pActive); + needSort = 0; + } + for(pSeg=pActive; pSeg; pSeg=pSeg->pNext){ + if( pPrev ){ + if( pPrev->y!=pSeg->y ){ + GEODEBUG(("MASK: %d\n", iMask)); + aOverlap[iMask] = 1; + } + } + iMask ^= pSeg->side; + pPrev = pSeg; + } + pPrev = 0; + for(pSeg=pActive; pSeg; pSeg=pSeg->pNext){ + double y = pSeg->C*rX + pSeg->B; + GEODEBUG(("Segment %d.%d %g->%g\n", pSeg->side, pSeg->idx, pSeg->y, y)); + pSeg->y = y; + if( pPrev ){ + if( pPrev->y>pSeg->y && pPrev->side!=pSeg->side ){ + rc = 1; + GEODEBUG(("Crossing: %d.%d and %d.%d\n", + pPrev->side, pPrev->idx, + pSeg->side, pSeg->idx)); + goto geopolyOverlapDone; + }else if( pPrev->y!=pSeg->y ){ + GEODEBUG(("MASK: %d\n", iMask)); + aOverlap[iMask] = 1; + } + } + iMask ^= pSeg->side; + pPrev = pSeg; + } + } + GEODEBUG(("%s %d.%d C=%g B=%g\n", + pThisEvent->eType ? "RM " : "ADD", + pThisEvent->pSeg->side, pThisEvent->pSeg->idx, + pThisEvent->pSeg->C, + pThisEvent->pSeg->B)); + if( pThisEvent->eType==0 ){ + /* Add a segment */ + pSeg = pThisEvent->pSeg; + pSeg->y = pSeg->y0; + pSeg->pNext = pActive; + pActive = pSeg; + needSort = 1; + }else{ + /* Remove a segment */ + if( pActive==pThisEvent->pSeg ){ + pActive = ALWAYS(pActive) ? pActive->pNext : 0; + }else{ + for(pSeg=pActive; pSeg; pSeg=pSeg->pNext){ + if( pSeg->pNext==pThisEvent->pSeg ){ + pSeg->pNext = ALWAYS(pSeg->pNext) ? pSeg->pNext->pNext : 0; + break; + } + } + } + } + pThisEvent = pThisEvent->pNext; + } + if( aOverlap[3]==0 ){ + rc = 0; + }else if( aOverlap[1]!=0 && aOverlap[2]==0 ){ + rc = 3; + }else if( aOverlap[1]==0 && aOverlap[2]!=0 ){ + rc = 2; + }else if( aOverlap[1]==0 && aOverlap[2]==0 ){ + rc = 4; + }else{ + rc = 1; + } + +geopolyOverlapDone: + sqlite3_free(p); + return rc; +} + +/* +** SQL function: geopoly_overlap(P1,P2) +** +** Determine whether or not P1 and P2 overlap. Return value: +** +** 0 The two polygons are disjoint +** 1 They overlap +** 2 P1 is completely contained within P2 +** 3 P2 is completely contained within P1 +** 4 P1 and P2 are the same polygon +** NULL Either P1 or P2 or both are not valid polygons +*/ +static void geopolyOverlapFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + GeoPoly *p1 = geopolyFuncParam(context, argv[0], 0); + GeoPoly *p2 = geopolyFuncParam(context, argv[1], 0); + (void)argc; + if( p1 && p2 ){ + int x = geopolyOverlap(p1, p2); + if( x<0 ){ + sqlite3_result_error_nomem(context); + }else{ + sqlite3_result_int(context, x); + } + } + sqlite3_free(p1); + sqlite3_free(p2); +} + +/* +** Enable or disable debugging output +*/ +static void geopolyDebugFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + (void)context; + (void)argc; +#ifdef GEOPOLY_ENABLE_DEBUG + geo_debug = sqlite3_value_int(argv[0]); +#else + (void)argv; +#endif +} + +/* +** This function is the implementation of both the xConnect and xCreate +** methods of the geopoly virtual table. +** +** argv[0] -> module name +** argv[1] -> database name +** argv[2] -> table name +** argv[...] -> column names... +*/ +static int geopolyInit( + sqlite3 *db, /* Database connection */ + void *pAux, /* One of the RTREE_COORD_* constants */ + int argc, const char *const*argv, /* Parameters to CREATE TABLE statement */ + sqlite3_vtab **ppVtab, /* OUT: New virtual table */ + char **pzErr, /* OUT: Error message, if any */ + int isCreate /* True for xCreate, false for xConnect */ +){ + int rc = SQLITE_OK; + Rtree *pRtree; + sqlite3_int64 nDb; /* Length of string argv[1] */ + sqlite3_int64 nName; /* Length of string argv[2] */ + sqlite3_str *pSql; + char *zSql; + int ii; + (void)pAux; + + sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1); + sqlite3_vtab_config(db, SQLITE_VTAB_INNOCUOUS); + + /* Allocate the sqlite3_vtab structure */ + nDb = strlen(argv[1]); + nName = strlen(argv[2]); + pRtree = (Rtree *)sqlite3_malloc64(sizeof(Rtree)+nDb+nName*2+8); + if( !pRtree ){ + return SQLITE_NOMEM; + } + memset(pRtree, 0, sizeof(Rtree)+nDb+nName*2+8); + pRtree->nBusy = 1; + pRtree->base.pModule = &rtreeModule; + pRtree->zDb = (char *)&pRtree[1]; + pRtree->zName = &pRtree->zDb[nDb+1]; + pRtree->zNodeName = &pRtree->zName[nName+1]; + pRtree->eCoordType = RTREE_COORD_REAL32; + pRtree->nDim = 2; + pRtree->nDim2 = 4; + memcpy(pRtree->zDb, argv[1], nDb); + memcpy(pRtree->zName, argv[2], nName); + memcpy(pRtree->zNodeName, argv[2], nName); + memcpy(&pRtree->zNodeName[nName], "_node", 6); + + + /* Create/Connect to the underlying relational database schema. If + ** that is successful, call sqlite3_declare_vtab() to configure + ** the r-tree table schema. + */ + pSql = sqlite3_str_new(db); + sqlite3_str_appendf(pSql, "CREATE TABLE x(_shape"); + pRtree->nAux = 1; /* Add one for _shape */ + pRtree->nAuxNotNull = 1; /* The _shape column is always not-null */ + for(ii=3; iinAux++; + sqlite3_str_appendf(pSql, ",%s", argv[ii]); + } + sqlite3_str_appendf(pSql, ");"); + zSql = sqlite3_str_finish(pSql); + if( !zSql ){ + rc = SQLITE_NOMEM; + }else if( SQLITE_OK!=(rc = sqlite3_declare_vtab(db, zSql)) ){ + *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + } + sqlite3_free(zSql); + if( rc ) goto geopolyInit_fail; + pRtree->nBytesPerCell = 8 + pRtree->nDim2*4; + + /* Figure out the node size to use. */ + rc = getNodeSize(db, pRtree, isCreate, pzErr); + if( rc ) goto geopolyInit_fail; + rc = rtreeSqlInit(pRtree, db, argv[1], argv[2], isCreate); + if( rc ){ + *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + goto geopolyInit_fail; + } + + *ppVtab = (sqlite3_vtab *)pRtree; + return SQLITE_OK; + +geopolyInit_fail: + if( rc==SQLITE_OK ) rc = SQLITE_ERROR; + assert( *ppVtab==0 ); + assert( pRtree->nBusy==1 ); + rtreeRelease(pRtree); + return rc; +} + + +/* +** GEOPOLY virtual table module xCreate method. +*/ +static int geopolyCreate( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + return geopolyInit(db, pAux, argc, argv, ppVtab, pzErr, 1); +} + +/* +** GEOPOLY virtual table module xConnect method. +*/ +static int geopolyConnect( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + return geopolyInit(db, pAux, argc, argv, ppVtab, pzErr, 0); +} + + +/* +** GEOPOLY virtual table module xFilter method. +** +** Query plans: +** +** 1 rowid lookup +** 2 search for objects overlapping the same bounding box +** that contains polygon argv[0] +** 3 search for objects overlapping the same bounding box +** that contains polygon argv[0] +** 4 full table scan +*/ +static int geopolyFilter( + sqlite3_vtab_cursor *pVtabCursor, /* The cursor to initialize */ + int idxNum, /* Query plan */ + const char *idxStr, /* Not Used */ + int argc, sqlite3_value **argv /* Parameters to the query plan */ +){ + Rtree *pRtree = (Rtree *)pVtabCursor->pVtab; + RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor; + RtreeNode *pRoot = 0; + int rc = SQLITE_OK; + int iCell = 0; + (void)idxStr; + + rtreeReference(pRtree); + + /* Reset the cursor to the same state as rtreeOpen() leaves it in. */ + resetCursor(pCsr); + + pCsr->iStrategy = idxNum; + if( idxNum==1 ){ + /* Special case - lookup by rowid. */ + RtreeNode *pLeaf; /* Leaf on which the required cell resides */ + RtreeSearchPoint *p; /* Search point for the leaf */ + i64 iRowid = sqlite3_value_int64(argv[0]); + i64 iNode = 0; + rc = findLeafNode(pRtree, iRowid, &pLeaf, &iNode); + if( rc==SQLITE_OK && pLeaf!=0 ){ + p = rtreeSearchPointNew(pCsr, RTREE_ZERO, 0); + assert( p!=0 ); /* Always returns pCsr->sPoint */ + pCsr->aNode[0] = pLeaf; + p->id = iNode; + p->eWithin = PARTLY_WITHIN; + rc = nodeRowidIndex(pRtree, pLeaf, iRowid, &iCell); + p->iCell = (u8)iCell; + RTREE_QUEUE_TRACE(pCsr, "PUSH-F1:"); + }else{ + pCsr->atEOF = 1; + } + }else{ + /* Normal case - r-tree scan. Set up the RtreeCursor.aConstraint array + ** with the configured constraints. + */ + rc = nodeAcquire(pRtree, 1, 0, &pRoot); + if( rc==SQLITE_OK && idxNum<=3 ){ + RtreeCoord bbox[4]; + RtreeConstraint *p; + assert( argc==1 ); + assert( argv[0]!=0 ); + geopolyBBox(0, argv[0], bbox, &rc); + if( rc ){ + goto geopoly_filter_end; + } + pCsr->aConstraint = p = sqlite3_malloc(sizeof(RtreeConstraint)*4); + pCsr->nConstraint = 4; + if( p==0 ){ + rc = SQLITE_NOMEM; + }else{ + memset(pCsr->aConstraint, 0, sizeof(RtreeConstraint)*4); + memset(pCsr->anQueue, 0, sizeof(u32)*(pRtree->iDepth + 1)); + if( idxNum==2 ){ + /* Overlap query */ + p->op = 'B'; + p->iCoord = 0; + p->u.rValue = bbox[1].f; + p++; + p->op = 'D'; + p->iCoord = 1; + p->u.rValue = bbox[0].f; + p++; + p->op = 'B'; + p->iCoord = 2; + p->u.rValue = bbox[3].f; + p++; + p->op = 'D'; + p->iCoord = 3; + p->u.rValue = bbox[2].f; + }else{ + /* Within query */ + p->op = 'D'; + p->iCoord = 0; + p->u.rValue = bbox[0].f; + p++; + p->op = 'B'; + p->iCoord = 1; + p->u.rValue = bbox[1].f; + p++; + p->op = 'D'; + p->iCoord = 2; + p->u.rValue = bbox[2].f; + p++; + p->op = 'B'; + p->iCoord = 3; + p->u.rValue = bbox[3].f; + } + } + } + if( rc==SQLITE_OK ){ + RtreeSearchPoint *pNew; + pNew = rtreeSearchPointNew(pCsr, RTREE_ZERO, (u8)(pRtree->iDepth+1)); + if( pNew==0 ){ + rc = SQLITE_NOMEM; + goto geopoly_filter_end; + } + pNew->id = 1; + pNew->iCell = 0; + pNew->eWithin = PARTLY_WITHIN; + assert( pCsr->bPoint==1 ); + pCsr->aNode[0] = pRoot; + pRoot = 0; + RTREE_QUEUE_TRACE(pCsr, "PUSH-Fm:"); + rc = rtreeStepToLeaf(pCsr); + } + } + +geopoly_filter_end: + nodeRelease(pRtree, pRoot); + rtreeRelease(pRtree); + return rc; +} + +/* +** Rtree virtual table module xBestIndex method. There are three +** table scan strategies to choose from (in order from most to +** least desirable): +** +** idxNum idxStr Strategy +** ------------------------------------------------ +** 1 "rowid" Direct lookup by rowid. +** 2 "rtree" R-tree overlap query using geopoly_overlap() +** 3 "rtree" R-tree within query using geopoly_within() +** 4 "fullscan" full-table scan. +** ------------------------------------------------ +*/ +static int geopolyBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ + int ii; + int iRowidTerm = -1; + int iFuncTerm = -1; + int idxNum = 0; + (void)tab; + + for(ii=0; iinConstraint; ii++){ + struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[ii]; + if( !p->usable ) continue; + if( p->iColumn<0 && p->op==SQLITE_INDEX_CONSTRAINT_EQ ){ + iRowidTerm = ii; + break; + } + if( p->iColumn==0 && p->op>=SQLITE_INDEX_CONSTRAINT_FUNCTION ){ + /* p->op==SQLITE_INDEX_CONSTRAINT_FUNCTION for geopoly_overlap() + ** p->op==(SQLITE_INDEX_CONTRAINT_FUNCTION+1) for geopoly_within(). + ** See geopolyFindFunction() */ + iFuncTerm = ii; + idxNum = p->op - SQLITE_INDEX_CONSTRAINT_FUNCTION + 2; + } + } + + if( iRowidTerm>=0 ){ + pIdxInfo->idxNum = 1; + pIdxInfo->idxStr = "rowid"; + pIdxInfo->aConstraintUsage[iRowidTerm].argvIndex = 1; + pIdxInfo->aConstraintUsage[iRowidTerm].omit = 1; + pIdxInfo->estimatedCost = 30.0; + pIdxInfo->estimatedRows = 1; + pIdxInfo->idxFlags = SQLITE_INDEX_SCAN_UNIQUE; + return SQLITE_OK; + } + if( iFuncTerm>=0 ){ + pIdxInfo->idxNum = idxNum; + pIdxInfo->idxStr = "rtree"; + pIdxInfo->aConstraintUsage[iFuncTerm].argvIndex = 1; + pIdxInfo->aConstraintUsage[iFuncTerm].omit = 0; + pIdxInfo->estimatedCost = 300.0; + pIdxInfo->estimatedRows = 10; + return SQLITE_OK; + } + pIdxInfo->idxNum = 4; + pIdxInfo->idxStr = "fullscan"; + pIdxInfo->estimatedCost = 3000000.0; + pIdxInfo->estimatedRows = 100000; + return SQLITE_OK; +} + + +/* +** GEOPOLY virtual table module xColumn method. +*/ +static int geopolyColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i){ + Rtree *pRtree = (Rtree *)cur->pVtab; + RtreeCursor *pCsr = (RtreeCursor *)cur; + RtreeSearchPoint *p = rtreeSearchPointFirst(pCsr); + int rc = SQLITE_OK; + RtreeNode *pNode = rtreeNodeOfFirstSearchPoint(pCsr, &rc); + + if( rc ) return rc; + if( p==0 ) return SQLITE_OK; + if( i==0 && sqlite3_vtab_nochange(ctx) ) return SQLITE_OK; + if( i<=pRtree->nAux ){ + if( !pCsr->bAuxValid ){ + if( pCsr->pReadAux==0 ){ + rc = sqlite3_prepare_v3(pRtree->db, pRtree->zReadAuxSql, -1, 0, + &pCsr->pReadAux, 0); + if( rc ) return rc; + } + sqlite3_bind_int64(pCsr->pReadAux, 1, + nodeGetRowid(pRtree, pNode, p->iCell)); + rc = sqlite3_step(pCsr->pReadAux); + if( rc==SQLITE_ROW ){ + pCsr->bAuxValid = 1; + }else{ + sqlite3_reset(pCsr->pReadAux); + if( rc==SQLITE_DONE ) rc = SQLITE_OK; + return rc; + } + } + sqlite3_result_value(ctx, sqlite3_column_value(pCsr->pReadAux, i+2)); + } + return SQLITE_OK; +} + + +/* +** The xUpdate method for GEOPOLY module virtual tables. +** +** For DELETE: +** +** argv[0] = the rowid to be deleted +** +** For INSERT: +** +** argv[0] = SQL NULL +** argv[1] = rowid to insert, or an SQL NULL to select automatically +** argv[2] = _shape column +** argv[3] = first application-defined column.... +** +** For UPDATE: +** +** argv[0] = rowid to modify. Never NULL +** argv[1] = rowid after the change. Never NULL +** argv[2] = new value for _shape +** argv[3] = new value for first application-defined column.... +*/ +static int geopolyUpdate( + sqlite3_vtab *pVtab, + int nData, + sqlite3_value **aData, + sqlite_int64 *pRowid +){ + Rtree *pRtree = (Rtree *)pVtab; + int rc = SQLITE_OK; + RtreeCell cell; /* New cell to insert if nData>1 */ + i64 oldRowid; /* The old rowid */ + int oldRowidValid; /* True if oldRowid is valid */ + i64 newRowid; /* The new rowid */ + int newRowidValid; /* True if newRowid is valid */ + int coordChange = 0; /* Change in coordinates */ + + if( pRtree->nNodeRef ){ + /* Unable to write to the btree while another cursor is reading from it, + ** since the write might do a rebalance which would disrupt the read + ** cursor. */ + return SQLITE_LOCKED_VTAB; + } + rtreeReference(pRtree); + assert(nData>=1); + + oldRowidValid = sqlite3_value_type(aData[0])!=SQLITE_NULL;; + oldRowid = oldRowidValid ? sqlite3_value_int64(aData[0]) : 0; + newRowidValid = nData>1 && sqlite3_value_type(aData[1])!=SQLITE_NULL; + newRowid = newRowidValid ? sqlite3_value_int64(aData[1]) : 0; + cell.iRowid = newRowid; + + if( nData>1 /* not a DELETE */ + && (!oldRowidValid /* INSERT */ + || !sqlite3_value_nochange(aData[2]) /* UPDATE _shape */ + || oldRowid!=newRowid) /* Rowid change */ + ){ + assert( aData[2]!=0 ); + geopolyBBox(0, aData[2], cell.aCoord, &rc); + if( rc ){ + if( rc==SQLITE_ERROR ){ + pVtab->zErrMsg = + sqlite3_mprintf("_shape does not contain a valid polygon"); + } + goto geopoly_update_end; + } + coordChange = 1; + + /* If a rowid value was supplied, check if it is already present in + ** the table. If so, the constraint has failed. */ + if( newRowidValid && (!oldRowidValid || oldRowid!=newRowid) ){ + int steprc; + sqlite3_bind_int64(pRtree->pReadRowid, 1, cell.iRowid); + steprc = sqlite3_step(pRtree->pReadRowid); + rc = sqlite3_reset(pRtree->pReadRowid); + if( SQLITE_ROW==steprc ){ + if( sqlite3_vtab_on_conflict(pRtree->db)==SQLITE_REPLACE ){ + rc = rtreeDeleteRowid(pRtree, cell.iRowid); + }else{ + rc = rtreeConstraintError(pRtree, 0); + } + } + } + } + + /* If aData[0] is not an SQL NULL value, it is the rowid of a + ** record to delete from the r-tree table. The following block does + ** just that. + */ + if( rc==SQLITE_OK && (nData==1 || (coordChange && oldRowidValid)) ){ + rc = rtreeDeleteRowid(pRtree, oldRowid); + } + + /* If the aData[] array contains more than one element, elements + ** (aData[2]..aData[argc-1]) contain a new record to insert into + ** the r-tree structure. + */ + if( rc==SQLITE_OK && nData>1 && coordChange ){ + /* Insert the new record into the r-tree */ + RtreeNode *pLeaf = 0; + if( !newRowidValid ){ + rc = rtreeNewRowid(pRtree, &cell.iRowid); + } + *pRowid = cell.iRowid; + if( rc==SQLITE_OK ){ + rc = ChooseLeaf(pRtree, &cell, 0, &pLeaf); + } + if( rc==SQLITE_OK ){ + int rc2; + rc = rtreeInsertCell(pRtree, pLeaf, &cell, 0); + rc2 = nodeRelease(pRtree, pLeaf); + if( rc==SQLITE_OK ){ + rc = rc2; + } + } + } + + /* Change the data */ + if( rc==SQLITE_OK && nData>1 ){ + sqlite3_stmt *pUp = pRtree->pWriteAux; + int jj; + int nChange = 0; + sqlite3_bind_int64(pUp, 1, cell.iRowid); + assert( pRtree->nAux>=1 ); + if( sqlite3_value_nochange(aData[2]) ){ + sqlite3_bind_null(pUp, 2); + }else{ + GeoPoly *p = 0; + if( sqlite3_value_type(aData[2])==SQLITE_TEXT + && (p = geopolyFuncParam(0, aData[2], &rc))!=0 + && rc==SQLITE_OK + ){ + sqlite3_bind_blob(pUp, 2, p->hdr, 4+8*p->nVertex, SQLITE_TRANSIENT); + }else{ + sqlite3_bind_value(pUp, 2, aData[2]); + } + sqlite3_free(p); + nChange = 1; + } + for(jj=1; jjxDestructor ) pInfo->xDestructor(pInfo->pContext); + sqlite3_free(p); +} + +/* +** This routine frees the BLOB that is returned by geomCallback(). +*/ +static void rtreeMatchArgFree(void *pArg){ + int i; + RtreeMatchArg *p = (RtreeMatchArg*)pArg; + for(i=0; inParam; i++){ + sqlite3_value_free(p->apSqlParam[i]); + } + sqlite3_free(p); +} + +/* +** Each call to sqlite3_rtree_geometry_callback() or +** sqlite3_rtree_query_callback() creates an ordinary SQLite +** scalar function that is implemented by this routine. +** +** All this function does is construct an RtreeMatchArg object that +** contains the geometry-checking callback routines and a list of +** parameters to this function, then return that RtreeMatchArg object +** as a BLOB. +** +** The R-Tree MATCH operator will read the returned BLOB, deserialize +** the RtreeMatchArg object, and use the RtreeMatchArg object to figure +** out which elements of the R-Tree should be returned by the query. +*/ +static void geomCallback(sqlite3_context *ctx, int nArg, sqlite3_value **aArg){ + RtreeGeomCallback *pGeomCtx = (RtreeGeomCallback *)sqlite3_user_data(ctx); + RtreeMatchArg *pBlob; + sqlite3_int64 nBlob; + int memErr = 0; + + nBlob = SZ_RTREEMATCHARG(nArg) + nArg*sizeof(sqlite3_value*); + pBlob = (RtreeMatchArg *)sqlite3_malloc64(nBlob); + if( !pBlob ){ + sqlite3_result_error_nomem(ctx); + }else{ + int i; + pBlob->iSize = nBlob; + pBlob->cb = pGeomCtx[0]; + pBlob->apSqlParam = (sqlite3_value**)&pBlob->aParam[nArg]; + pBlob->nParam = nArg; + for(i=0; iapSqlParam[i] = sqlite3_value_dup(aArg[i]); + if( pBlob->apSqlParam[i]==0 ) memErr = 1; +#ifdef SQLITE_RTREE_INT_ONLY + pBlob->aParam[i] = sqlite3_value_int64(aArg[i]); +#else + pBlob->aParam[i] = sqlite3_value_double(aArg[i]); +#endif + } + if( memErr ){ + sqlite3_result_error_nomem(ctx); + rtreeMatchArgFree(pBlob); + }else{ + sqlite3_result_pointer(ctx, pBlob, "RtreeMatchArg", rtreeMatchArgFree); + } + } +} + +/* +** Register a new geometry function for use with the r-tree MATCH operator. +*/ +SQLITE_API int sqlite3_rtree_geometry_callback( + sqlite3 *db, /* Register SQL function on this connection */ + const char *zGeom, /* Name of the new SQL function */ + int (*xGeom)(sqlite3_rtree_geometry*,int,RtreeDValue*,int*), /* Callback */ + void *pContext /* Extra data associated with the callback */ +){ + RtreeGeomCallback *pGeomCtx; /* Context object for new user-function */ + + /* Allocate and populate the context object. */ + pGeomCtx = (RtreeGeomCallback *)sqlite3_malloc(sizeof(RtreeGeomCallback)); + if( !pGeomCtx ) return SQLITE_NOMEM; + pGeomCtx->xGeom = xGeom; + pGeomCtx->xQueryFunc = 0; + pGeomCtx->xDestructor = 0; + pGeomCtx->pContext = pContext; + return sqlite3_create_function_v2(db, zGeom, -1, SQLITE_ANY, + (void *)pGeomCtx, geomCallback, 0, 0, rtreeFreeCallback + ); +} + +/* +** Register a new 2nd-generation geometry function for use with the +** r-tree MATCH operator. +*/ +SQLITE_API int sqlite3_rtree_query_callback( + sqlite3 *db, /* Register SQL function on this connection */ + const char *zQueryFunc, /* Name of new SQL function */ + int (*xQueryFunc)(sqlite3_rtree_query_info*), /* Callback */ + void *pContext, /* Extra data passed into the callback */ + void (*xDestructor)(void*) /* Destructor for the extra data */ +){ + RtreeGeomCallback *pGeomCtx; /* Context object for new user-function */ + + /* Allocate and populate the context object. */ + pGeomCtx = (RtreeGeomCallback *)sqlite3_malloc(sizeof(RtreeGeomCallback)); + if( !pGeomCtx ){ + if( xDestructor ) xDestructor(pContext); + return SQLITE_NOMEM; + } + pGeomCtx->xGeom = 0; + pGeomCtx->xQueryFunc = xQueryFunc; + pGeomCtx->xDestructor = xDestructor; + pGeomCtx->pContext = pContext; + return sqlite3_create_function_v2(db, zQueryFunc, -1, SQLITE_ANY, + (void *)pGeomCtx, geomCallback, 0, 0, rtreeFreeCallback + ); +} + +#ifndef SQLITE_CORE +#ifdef _WIN32 +__declspec(dllexport) +#endif +SQLITE_API int sqlite3_rtree_init( + sqlite3 *db, + char **pzErrMsg, + const sqlite3_api_routines *pApi +){ + SQLITE_EXTENSION_INIT2(pApi) + return sqlite3RtreeInit(db); +} +#endif + +#endif + +/************** End of rtree.c ***********************************************/ +/************** Begin file icu.c *********************************************/ +/* +** 2007 May 6 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** $Id: icu.c,v 1.7 2007/12/13 21:54:11 drh Exp $ +** +** This file implements an integration between the ICU library +** ("International Components for Unicode", an open-source library +** for handling unicode data) and SQLite. The integration uses +** ICU to provide the following to SQLite: +** +** * An implementation of the SQL regexp() function (and hence REGEXP +** operator) using the ICU uregex_XX() APIs. +** +** * Implementations of the SQL scalar upper() and lower() functions +** for case mapping. +** +** * Integration of ICU and SQLite collation sequences. +** +** * An implementation of the LIKE operator that uses ICU to +** provide case-independent matching. +*/ + +#if !defined(SQLITE_CORE) \ + || defined(SQLITE_ENABLE_ICU) \ + || defined(SQLITE_ENABLE_ICU_COLLATIONS) + +/* Include ICU headers */ +#include +#include +#include +#include + +/* #include */ + +#ifndef SQLITE_CORE +/* #include "sqlite3ext.h" */ + SQLITE_EXTENSION_INIT1 +#else +/* #include "sqlite3.h" */ +#endif + +/* +** This function is called when an ICU function called from within +** the implementation of an SQL scalar function returns an error. +** +** The scalar function context passed as the first argument is +** loaded with an error message based on the following two args. +*/ +static void icuFunctionError( + sqlite3_context *pCtx, /* SQLite scalar function context */ + const char *zName, /* Name of ICU function that failed */ + UErrorCode e /* Error code returned by ICU function */ +){ + char zBuf[128]; + sqlite3_snprintf(128, zBuf, "ICU error: %s(): %s", zName, u_errorName(e)); + zBuf[127] = '\0'; + sqlite3_result_error(pCtx, zBuf, -1); +} + +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU) + +/* +** Maximum length (in bytes) of the pattern in a LIKE or GLOB +** operator. +*/ +#ifndef SQLITE_MAX_LIKE_PATTERN_LENGTH +# define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000 +#endif + +/* +** Version of sqlite3_free() that is always a function, never a macro. +*/ +static void xFree(void *p){ + sqlite3_free(p); +} + +/* +** This lookup table is used to help decode the first byte of +** a multi-byte UTF8 character. It is copied here from SQLite source +** code file utf8.c. +*/ +static const unsigned char icuUtf8Trans1[] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x00, 0x00, +}; + +#define SQLITE_ICU_READ_UTF8(zIn, c) \ + c = *(zIn++); \ + if( c>=0xc0 ){ \ + c = icuUtf8Trans1[c-0xc0]; \ + while( (*zIn & 0xc0)==0x80 ){ \ + c = (c<<6) + (0x3f & *(zIn++)); \ + } \ + } + +#define SQLITE_ICU_SKIP_UTF8(zIn) \ + assert( *zIn ); \ + if( *(zIn++)>=0xc0 ){ \ + while( (*zIn & 0xc0)==0x80 ){zIn++;} \ + } + + +/* +** Compare two UTF-8 strings for equality where the first string is +** a "LIKE" expression. Return true (1) if they are the same and +** false (0) if they are different. +*/ +static int icuLikeCompare( + const uint8_t *zPattern, /* LIKE pattern */ + const uint8_t *zString, /* The UTF-8 string to compare against */ + const UChar32 uEsc /* The escape character */ +){ + static const uint32_t MATCH_ONE = (uint32_t)'_'; + static const uint32_t MATCH_ALL = (uint32_t)'%'; + + int prevEscape = 0; /* True if the previous character was uEsc */ + + while( 1 ){ + + /* Read (and consume) the next character from the input pattern. */ + uint32_t uPattern; + SQLITE_ICU_READ_UTF8(zPattern, uPattern); + if( uPattern==0 ) break; + + /* There are now 4 possibilities: + ** + ** 1. uPattern is an unescaped match-all character "%", + ** 2. uPattern is an unescaped match-one character "_", + ** 3. uPattern is an unescaped escape character, or + ** 4. uPattern is to be handled as an ordinary character + */ + if( uPattern==MATCH_ALL && !prevEscape && uPattern!=(uint32_t)uEsc ){ + /* Case 1. */ + uint8_t c; + + /* Skip any MATCH_ALL or MATCH_ONE characters that follow a + ** MATCH_ALL. For each MATCH_ONE, skip one character in the + ** test string. + */ + while( (c=*zPattern) == MATCH_ALL || c == MATCH_ONE ){ + if( c==MATCH_ONE ){ + if( *zString==0 ) return 0; + SQLITE_ICU_SKIP_UTF8(zString); + } + zPattern++; + } + + if( *zPattern==0 ) return 1; + + while( *zString ){ + if( icuLikeCompare(zPattern, zString, uEsc) ){ + return 1; + } + SQLITE_ICU_SKIP_UTF8(zString); + } + return 0; + + }else if( uPattern==MATCH_ONE && !prevEscape && uPattern!=(uint32_t)uEsc ){ + /* Case 2. */ + if( *zString==0 ) return 0; + SQLITE_ICU_SKIP_UTF8(zString); + + }else if( uPattern==(uint32_t)uEsc && !prevEscape ){ + /* Case 3. */ + prevEscape = 1; + + }else{ + /* Case 4. */ + uint32_t uString; + SQLITE_ICU_READ_UTF8(zString, uString); + uString = (uint32_t)u_foldCase((UChar32)uString, U_FOLD_CASE_DEFAULT); + uPattern = (uint32_t)u_foldCase((UChar32)uPattern, U_FOLD_CASE_DEFAULT); + if( uString!=uPattern ){ + return 0; + } + prevEscape = 0; + } + } + + return *zString==0; +} + +/* +** Implementation of the like() SQL function. This function implements +** the build-in LIKE operator. The first argument to the function is the +** pattern and the second argument is the string. So, the SQL statements: +** +** A LIKE B +** +** is implemented as like(B, A). If there is an escape character E, +** +** A LIKE B ESCAPE E +** +** is mapped to like(B, A, E). +*/ +static void icuLikeFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + const unsigned char *zA = sqlite3_value_text(argv[0]); + const unsigned char *zB = sqlite3_value_text(argv[1]); + UChar32 uEsc = 0; + + /* Limit the length of the LIKE or GLOB pattern to avoid problems + ** of deep recursion and N*N behavior in patternCompare(). + */ + if( sqlite3_value_bytes(argv[0])>SQLITE_MAX_LIKE_PATTERN_LENGTH ){ + sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1); + return; + } + + + if( argc==3 ){ + /* The escape character string must consist of a single UTF-8 character. + ** Otherwise, return an error. + */ + int nE= sqlite3_value_bytes(argv[2]); + const unsigned char *zE = sqlite3_value_text(argv[2]); + int i = 0; + if( zE==0 ) return; + U8_NEXT(zE, i, nE, uEsc); + if( i!=nE){ + sqlite3_result_error(context, + "ESCAPE expression must be a single character", -1); + return; + } + } + + if( zA && zB ){ + sqlite3_result_int(context, icuLikeCompare(zA, zB, uEsc)); + } +} + +/* +** Function to delete compiled regexp objects. Registered as +** a destructor function with sqlite3_set_auxdata(). +*/ +static void icuRegexpDelete(void *p){ + URegularExpression *pExpr = (URegularExpression *)p; + uregex_close(pExpr); +} + +/* +** Implementation of SQLite REGEXP operator. This scalar function takes +** two arguments. The first is a regular expression pattern to compile +** the second is a string to match against that pattern. If either +** argument is an SQL NULL, then NULL Is returned. Otherwise, the result +** is 1 if the string matches the pattern, or 0 otherwise. +** +** SQLite maps the regexp() function to the regexp() operator such +** that the following two are equivalent: +** +** zString REGEXP zPattern +** regexp(zPattern, zString) +** +** Uses the following ICU regexp APIs: +** +** uregex_open() +** uregex_matches() +** uregex_close() +*/ +static void icuRegexpFunc(sqlite3_context *p, int nArg, sqlite3_value **apArg){ + UErrorCode status = U_ZERO_ERROR; + URegularExpression *pExpr; + UBool res; + const UChar *zString = sqlite3_value_text16(apArg[1]); + + (void)nArg; /* Unused parameter */ + + /* If the left hand side of the regexp operator is NULL, + ** then the result is also NULL. + */ + if( !zString ){ + return; + } + + pExpr = sqlite3_get_auxdata(p, 0); + if( !pExpr ){ + const UChar *zPattern = sqlite3_value_text16(apArg[0]); + if( !zPattern ){ + return; + } + pExpr = uregex_open(zPattern, -1, 0, 0, &status); + + if( U_SUCCESS(status) ){ + sqlite3_set_auxdata(p, 0, pExpr, icuRegexpDelete); + pExpr = sqlite3_get_auxdata(p, 0); + } + if( !pExpr ){ + icuFunctionError(p, "uregex_open", status); + return; + } + } + + /* Configure the text that the regular expression operates on. */ + uregex_setText(pExpr, zString, -1, &status); + if( !U_SUCCESS(status) ){ + icuFunctionError(p, "uregex_setText", status); + return; + } + + /* Attempt the match */ + res = uregex_matches(pExpr, 0, &status); + if( !U_SUCCESS(status) ){ + icuFunctionError(p, "uregex_matches", status); + return; + } + + /* Set the text that the regular expression operates on to a NULL + ** pointer. This is not really necessary, but it is tidier than + ** leaving the regular expression object configured with an invalid + ** pointer after this function returns. + */ + uregex_setText(pExpr, 0, 0, &status); + + /* Return 1 or 0. */ + sqlite3_result_int(p, res ? 1 : 0); +} + +/* +** Implementations of scalar functions for case mapping - upper() and +** lower(). Function upper() converts its input to upper-case (ABC). +** Function lower() converts to lower-case (abc). +** +** ICU provides two types of case mapping, "general" case mapping and +** "language specific". Refer to ICU documentation for the differences +** between the two. +** +** To utilise "general" case mapping, the upper() or lower() scalar +** functions are invoked with one argument: +** +** upper('ABC') -> 'abc' +** lower('abc') -> 'ABC' +** +** To access ICU "language specific" case mapping, upper() or lower() +** should be invoked with two arguments. The second argument is the name +** of the locale to use. Passing an empty string ("") or SQL NULL value +** as the second argument is the same as invoking the 1 argument version +** of upper() or lower(). +** +** lower('I', 'en_us') -> 'i' +** lower('I', 'tr_tr') -> '\u131' (small dotless i) +** +** http://www.icu-project.org/userguide/posix.html#case_mappings +*/ +static void icuCaseFunc16(sqlite3_context *p, int nArg, sqlite3_value **apArg){ + const UChar *zInput; /* Pointer to input string */ + UChar *zOutput = 0; /* Pointer to output buffer */ + int nInput; /* Size of utf-16 input string in bytes */ + int nOut; /* Size of output buffer in bytes */ + int cnt; + int bToUpper; /* True for toupper(), false for tolower() */ + UErrorCode status; + const char *zLocale = 0; + + assert(nArg==1 || nArg==2); + bToUpper = (sqlite3_user_data(p)!=0); + if( nArg==2 ){ + zLocale = (const char *)sqlite3_value_text(apArg[1]); + } + + zInput = sqlite3_value_text16(apArg[0]); + if( !zInput ){ + return; + } + nOut = nInput = sqlite3_value_bytes16(apArg[0]); + if( nOut==0 ){ + sqlite3_result_text16(p, "", 0, SQLITE_STATIC); + return; + } + + for(cnt=0; cnt<2; cnt++){ + UChar *zNew = sqlite3_realloc(zOutput, nOut); + if( zNew==0 ){ + sqlite3_free(zOutput); + sqlite3_result_error_nomem(p); + return; + } + zOutput = zNew; + status = U_ZERO_ERROR; + if( bToUpper ){ + nOut = 2*u_strToUpper(zOutput,nOut/2,zInput,nInput/2,zLocale,&status); + }else{ + nOut = 2*u_strToLower(zOutput,nOut/2,zInput,nInput/2,zLocale,&status); + } + + if( U_SUCCESS(status) ){ + sqlite3_result_text16(p, zOutput, nOut, xFree); + }else if( status==U_BUFFER_OVERFLOW_ERROR ){ + assert( cnt==0 ); + continue; + }else{ + icuFunctionError(p, bToUpper ? "u_strToUpper" : "u_strToLower", status); + } + return; + } + assert( 0 ); /* Unreachable */ +} + +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU) */ + +/* +** Collation sequence destructor function. The pCtx argument points to +** a UCollator structure previously allocated using ucol_open(). +*/ +static void icuCollationDel(void *pCtx){ + UCollator *p = (UCollator *)pCtx; + ucol_close(p); +} + +/* +** Collation sequence comparison function. The pCtx argument points to +** a UCollator structure previously allocated using ucol_open(). +*/ +static int icuCollationColl( + void *pCtx, + int nLeft, + const void *zLeft, + int nRight, + const void *zRight +){ + UCollationResult res; + UCollator *p = (UCollator *)pCtx; + res = ucol_strcoll(p, (UChar *)zLeft, nLeft/2, (UChar *)zRight, nRight/2); + switch( res ){ + case UCOL_LESS: return -1; + case UCOL_GREATER: return +1; + case UCOL_EQUAL: return 0; + } + assert(!"Unexpected return value from ucol_strcoll()"); + return 0; +} + +/* +** Implementation of the scalar function icu_load_collation(). +** +** This scalar function is used to add ICU collation based collation +** types to an SQLite database connection. It is intended to be called +** as follows: +** +** SELECT icu_load_collation(, ); +** +** Where is a string containing an ICU locale identifier (i.e. +** "en_AU", "tr_TR" etc.) and is the name of the +** collation sequence to create. +*/ +static void icuLoadCollation( + sqlite3_context *p, + int nArg, + sqlite3_value **apArg +){ + sqlite3 *db = (sqlite3 *)sqlite3_user_data(p); + UErrorCode status = U_ZERO_ERROR; + const char *zLocale; /* Locale identifier - (eg. "jp_JP") */ + const char *zName; /* SQL Collation sequence name (eg. "japanese") */ + UCollator *pUCollator; /* ICU library collation object */ + int rc; /* Return code from sqlite3_create_collation_x() */ + + assert(nArg==2 || nArg==3); + (void)nArg; /* Unused parameter */ + zLocale = (const char *)sqlite3_value_text(apArg[0]); + zName = (const char *)sqlite3_value_text(apArg[1]); + + if( !zLocale || !zName ){ + return; + } + + pUCollator = ucol_open(zLocale, &status); + if( !U_SUCCESS(status) ){ + icuFunctionError(p, "ucol_open", status); + return; + } + assert(p); + if(nArg==3){ + const char *zOption = (const char*)sqlite3_value_text(apArg[2]); + static const struct { + const char *zName; + UColAttributeValue val; + } aStrength[] = { + { "PRIMARY", UCOL_PRIMARY }, + { "SECONDARY", UCOL_SECONDARY }, + { "TERTIARY", UCOL_TERTIARY }, + { "DEFAULT", UCOL_DEFAULT_STRENGTH }, + { "QUARTERNARY", UCOL_QUATERNARY }, + { "IDENTICAL", UCOL_IDENTICAL }, + }; + unsigned int i; + for(i=0; i=sizeof(aStrength)/sizeof(aStrength[0]) ){ + sqlite3_str *pStr = sqlite3_str_new(sqlite3_context_db_handle(p)); + sqlite3_str_appendf(pStr, + "unknown collation strength \"%s\" - should be one of:", + zOption); + for(i=0; izName, p->nArg, p->enc, + p->iContext ? (void*)db : (void*)0, + p->xFunc, 0, 0 + ); + } + + return rc; +} + +#ifndef SQLITE_CORE +#ifdef _WIN32 +__declspec(dllexport) +#endif +SQLITE_API int sqlite3_icu_init( + sqlite3 *db, + char **pzErrMsg, + const sqlite3_api_routines *pApi +){ + SQLITE_EXTENSION_INIT2(pApi) + return sqlite3IcuInit(db); +} +#endif + +#endif + +/************** End of icu.c *************************************************/ +/************** Begin file fts3_icu.c ****************************************/ +/* +** 2007 June 22 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file implements a tokenizer for fts3 based on the ICU library. +*/ +/* #include "fts3Int.h" */ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) +#ifdef SQLITE_ENABLE_ICU + +/* #include */ +/* #include */ +/* #include "fts3_tokenizer.h" */ + +#include +/* #include */ +/* #include */ +#include + +typedef struct IcuTokenizer IcuTokenizer; +typedef struct IcuCursor IcuCursor; + +struct IcuTokenizer { + sqlite3_tokenizer base; + char *zLocale; +}; + +struct IcuCursor { + sqlite3_tokenizer_cursor base; + + UBreakIterator *pIter; /* ICU break-iterator object */ + int nChar; /* Number of UChar elements in pInput */ + UChar *aChar; /* Copy of input using utf-16 encoding */ + int *aOffset; /* Offsets of each character in utf-8 input */ + + int nBuffer; + char *zBuffer; + + int iToken; +}; + +/* +** Create a new tokenizer instance. +*/ +static int icuCreate( + int argc, /* Number of entries in argv[] */ + const char * const *argv, /* Tokenizer creation arguments */ + sqlite3_tokenizer **ppTokenizer /* OUT: Created tokenizer */ +){ + IcuTokenizer *p; + int n = 0; + + if( argc>0 ){ + n = strlen(argv[0])+1; + } + p = (IcuTokenizer *)sqlite3_malloc64(sizeof(IcuTokenizer)+n); + if( !p ){ + return SQLITE_NOMEM; + } + memset(p, 0, sizeof(IcuTokenizer)); + + if( n ){ + p->zLocale = (char *)&p[1]; + memcpy(p->zLocale, argv[0], n); + } + + *ppTokenizer = (sqlite3_tokenizer *)p; + + return SQLITE_OK; +} + +/* +** Destroy a tokenizer +*/ +static int icuDestroy(sqlite3_tokenizer *pTokenizer){ + IcuTokenizer *p = (IcuTokenizer *)pTokenizer; + sqlite3_free(p); + return SQLITE_OK; +} + +/* +** Prepare to begin tokenizing a particular string. The input +** string to be tokenized is pInput[0..nBytes-1]. A cursor +** used to incrementally tokenize this string is returned in +** *ppCursor. +*/ +static int icuOpen( + sqlite3_tokenizer *pTokenizer, /* The tokenizer */ + const char *zInput, /* Input string */ + int nInput, /* Length of zInput in bytes */ + sqlite3_tokenizer_cursor **ppCursor /* OUT: Tokenization cursor */ +){ + IcuTokenizer *p = (IcuTokenizer *)pTokenizer; + IcuCursor *pCsr; + + const int32_t opt = U_FOLD_CASE_DEFAULT; + UErrorCode status = U_ZERO_ERROR; + int nChar; + + UChar32 c; + int iInput = 0; + int iOut = 0; + + *ppCursor = 0; + + if( zInput==0 ){ + nInput = 0; + zInput = ""; + }else if( nInput<0 ){ + nInput = strlen(zInput); + } + nChar = nInput+1; + pCsr = (IcuCursor *)sqlite3_malloc64( + sizeof(IcuCursor) + /* IcuCursor */ + ((nChar+3)&~3) * sizeof(UChar) + /* IcuCursor.aChar[] */ + (nChar+1) * sizeof(int) /* IcuCursor.aOffset[] */ + ); + if( !pCsr ){ + return SQLITE_NOMEM; + } + memset(pCsr, 0, sizeof(IcuCursor)); + pCsr->aChar = (UChar *)&pCsr[1]; + pCsr->aOffset = (int *)&pCsr->aChar[(nChar+3)&~3]; + + pCsr->aOffset[iOut] = iInput; + U8_NEXT(zInput, iInput, nInput, c); + while( c>0 ){ + int isError = 0; + c = u_foldCase(c, opt); + U16_APPEND(pCsr->aChar, iOut, nChar, c, isError); + if( isError ){ + sqlite3_free(pCsr); + return SQLITE_ERROR; + } + pCsr->aOffset[iOut] = iInput; + + if( iInputpIter = ubrk_open(UBRK_WORD, p->zLocale, pCsr->aChar, iOut, &status); + if( !U_SUCCESS(status) ){ + sqlite3_free(pCsr); + return SQLITE_ERROR; + } + pCsr->nChar = iOut; + + ubrk_first(pCsr->pIter); + *ppCursor = (sqlite3_tokenizer_cursor *)pCsr; + return SQLITE_OK; +} + +/* +** Close a tokenization cursor previously opened by a call to icuOpen(). +*/ +static int icuClose(sqlite3_tokenizer_cursor *pCursor){ + IcuCursor *pCsr = (IcuCursor *)pCursor; + ubrk_close(pCsr->pIter); + sqlite3_free(pCsr->zBuffer); + sqlite3_free(pCsr); + return SQLITE_OK; +} + +/* +** Extract the next token from a tokenization cursor. +*/ +static int icuNext( + sqlite3_tokenizer_cursor *pCursor, /* Cursor returned by simpleOpen */ + const char **ppToken, /* OUT: *ppToken is the token text */ + int *pnBytes, /* OUT: Number of bytes in token */ + int *piStartOffset, /* OUT: Starting offset of token */ + int *piEndOffset, /* OUT: Ending offset of token */ + int *piPosition /* OUT: Position integer of token */ +){ + IcuCursor *pCsr = (IcuCursor *)pCursor; + + int iStart = 0; + int iEnd = 0; + int nByte = 0; + + while( iStart==iEnd ){ + UChar32 c; + + iStart = ubrk_current(pCsr->pIter); + iEnd = ubrk_next(pCsr->pIter); + if( iEnd==UBRK_DONE ){ + return SQLITE_DONE; + } + + while( iStartaChar, iWhite, pCsr->nChar, c); + if( u_isspace(c) ){ + iStart = iWhite; + }else{ + break; + } + } + assert(iStart<=iEnd); + } + + do { + UErrorCode status = U_ZERO_ERROR; + if( nByte ){ + char *zNew = sqlite3_realloc(pCsr->zBuffer, nByte); + if( !zNew ){ + return SQLITE_NOMEM; + } + pCsr->zBuffer = zNew; + pCsr->nBuffer = nByte; + } + + u_strToUTF8( + pCsr->zBuffer, pCsr->nBuffer, &nByte, /* Output vars */ + &pCsr->aChar[iStart], iEnd-iStart, /* Input vars */ + &status /* Output success/failure */ + ); + } while( nByte>pCsr->nBuffer ); + + *ppToken = pCsr->zBuffer; + *pnBytes = nByte; + *piStartOffset = pCsr->aOffset[iStart]; + *piEndOffset = pCsr->aOffset[iEnd]; + *piPosition = pCsr->iToken++; + + return SQLITE_OK; +} + +/* +** The set of routines that implement the simple tokenizer +*/ +static const sqlite3_tokenizer_module icuTokenizerModule = { + 0, /* iVersion */ + icuCreate, /* xCreate */ + icuDestroy, /* xCreate */ + icuOpen, /* xOpen */ + icuClose, /* xClose */ + icuNext, /* xNext */ + 0, /* xLanguageid */ +}; + +/* +** Set *ppModule to point at the implementation of the ICU tokenizer. +*/ +SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule( + sqlite3_tokenizer_module const**ppModule +){ + *ppModule = &icuTokenizerModule; +} + +#endif /* defined(SQLITE_ENABLE_ICU) */ +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */ + +/************** End of fts3_icu.c ********************************************/ +/************** Begin file sqlite3rbu.c **************************************/ +/* +** 2014 August 30 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** +** OVERVIEW +** +** The RBU extension requires that the RBU update be packaged as an +** SQLite database. The tables it expects to find are described in +** sqlite3rbu.h. Essentially, for each table xyz in the target database +** that the user wishes to write to, a corresponding data_xyz table is +** created in the RBU database and populated with one row for each row to +** update, insert or delete from the target table. +** +** The update proceeds in three stages: +** +** 1) The database is updated. The modified database pages are written +** to a *-oal file. A *-oal file is just like a *-wal file, except +** that it is named "-oal" instead of "-wal". +** Because regular SQLite clients do not look for file named +** "-oal", they go on using the original database in +** rollback mode while the *-oal file is being generated. +** +** During this stage RBU does not update the database by writing +** directly to the target tables. Instead it creates "imposter" +** tables using the SQLITE_TESTCTRL_IMPOSTER interface that it uses +** to update each b-tree individually. All updates required by each +** b-tree are completed before moving on to the next, and all +** updates are done in sorted key order. +** +** 2) The "-oal" file is moved to the equivalent "-wal" +** location using a call to rename(2). Before doing this the RBU +** module takes an EXCLUSIVE lock on the database file, ensuring +** that there are no other active readers. +** +** Once the EXCLUSIVE lock is released, any other database readers +** detect the new *-wal file and read the database in wal mode. At +** this point they see the new version of the database - including +** the updates made as part of the RBU update. +** +** 3) The new *-wal file is checkpointed. This proceeds in the same way +** as a regular database checkpoint, except that a single frame is +** checkpointed each time sqlite3rbu_step() is called. If the RBU +** handle is closed before the entire *-wal file is checkpointed, +** the checkpoint progress is saved in the RBU database and the +** checkpoint can be resumed by another RBU client at some point in +** the future. +** +** POTENTIAL PROBLEMS +** +** The rename() call might not be portable. And RBU is not currently +** syncing the directory after renaming the file. +** +** When state is saved, any commit to the *-oal file and the commit to +** the RBU update database are not atomic. So if the power fails at the +** wrong moment they might get out of sync. As the main database will be +** committed before the RBU update database this will likely either just +** pass unnoticed, or result in SQLITE_CONSTRAINT errors (due to UNIQUE +** constraint violations). +** +** If some client does modify the target database mid RBU update, or some +** other error occurs, the RBU extension will keep throwing errors. It's +** not really clear how to get out of this state. The system could just +** by delete the RBU update database and *-oal file and have the device +** download the update again and start over. +** +** At present, for an UPDATE, both the new.* and old.* records are +** collected in the rbu_xyz table. And for both UPDATEs and DELETEs all +** fields are collected. This means we're probably writing a lot more +** data to disk when saving the state of an ongoing update to the RBU +** update database than is strictly necessary. +** +*/ + +/* #include */ +/* #include */ +/* #include */ + +/* #include "sqlite3.h" */ + +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_RBU) +/************** Include sqlite3rbu.h in the middle of sqlite3rbu.c ***********/ +/************** Begin file sqlite3rbu.h **************************************/ +/* +** 2014 August 30 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file contains the public interface for the RBU extension. +*/ + +/* +** SUMMARY +** +** Writing a transaction containing a large number of operations on +** b-tree indexes that are collectively larger than the available cache +** memory can be very inefficient. +** +** The problem is that in order to update a b-tree, the leaf page (at least) +** containing the entry being inserted or deleted must be modified. If the +** working set of leaves is larger than the available cache memory, then a +** single leaf that is modified more than once as part of the transaction +** may be loaded from or written to the persistent media multiple times. +** Additionally, because the index updates are likely to be applied in +** random order, access to pages within the database is also likely to be in +** random order, which is itself quite inefficient. +** +** One way to improve the situation is to sort the operations on each index +** by index key before applying them to the b-tree. This leads to an IO +** pattern that resembles a single linear scan through the index b-tree, +** and all but guarantees each modified leaf page is loaded and stored +** exactly once. SQLite uses this trick to improve the performance of +** CREATE INDEX commands. This extension allows it to be used to improve +** the performance of large transactions on existing databases. +** +** Additionally, this extension allows the work involved in writing the +** large transaction to be broken down into sub-transactions performed +** sequentially by separate processes. This is useful if the system cannot +** guarantee that a single update process will run for long enough to apply +** the entire update, for example because the update is being applied on a +** mobile device that is frequently rebooted. Even after the writer process +** has committed one or more sub-transactions, other database clients continue +** to read from the original database snapshot. In other words, partially +** applied transactions are not visible to other clients. +** +** "RBU" stands for "Resumable Bulk Update". As in a large database update +** transmitted via a wireless network to a mobile device. A transaction +** applied using this extension is hence referred to as an "RBU update". +** +** +** LIMITATIONS +** +** An "RBU update" transaction is subject to the following limitations: +** +** * The transaction must consist of INSERT, UPDATE and DELETE operations +** only. +** +** * INSERT statements may not use any default values. +** +** * UPDATE and DELETE statements must identify their target rows by +** non-NULL PRIMARY KEY values. Rows with NULL values stored in PRIMARY +** KEY fields may not be updated or deleted. If the table being written +** has no PRIMARY KEY, affected rows must be identified by rowid. +** +** * UPDATE statements may not modify PRIMARY KEY columns. +** +** * No triggers will be fired. +** +** * No foreign key violations are detected or reported. +** +** * CHECK constraints are not enforced. +** +** * No constraint handling mode except for "OR ROLLBACK" is supported. +** +** +** PREPARATION +** +** An "RBU update" is stored as a separate SQLite database. A database +** containing an RBU update is an "RBU database". For each table in the +** target database to be updated, the RBU database should contain a table +** named "data_" containing the same set of columns as the +** target table, and one more - "rbu_control". The data_% table should +** have no PRIMARY KEY or UNIQUE constraints, but each column should have +** the same type as the corresponding column in the target database. +** The "rbu_control" column should have no type at all. For example, if +** the target database contains: +** +** CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c UNIQUE); +** +** Then the RBU database should contain: +** +** CREATE TABLE data_t1(a INTEGER, b TEXT, c, rbu_control); +** +** The order of the columns in the data_% table does not matter. +** +** Instead of a regular table, the RBU database may also contain virtual +** tables or views named using the data_ naming scheme. +** +** Instead of the plain data_ naming scheme, RBU database tables +** may also be named data_, where is any sequence +** of zero or more numeric characters (0-9). This can be significant because +** tables within the RBU database are always processed in order sorted by +** name. By judicious selection of the portion of the names +** of the RBU tables the user can therefore control the order in which they +** are processed. This can be useful, for example, to ensure that "external +** content" FTS4 tables are updated before their underlying content tables. +** +** If the target database table is a virtual table or a table that has no +** PRIMARY KEY declaration, the data_% table must also contain a column +** named "rbu_rowid". This column is mapped to the table's implicit primary +** key column - "rowid". Virtual tables for which the "rowid" column does +** not function like a primary key value cannot be updated using RBU. For +** example, if the target db contains either of the following: +** +** CREATE VIRTUAL TABLE x1 USING fts3(a, b); +** CREATE TABLE x1(a, b) +** +** then the RBU database should contain: +** +** CREATE TABLE data_x1(a, b, rbu_rowid, rbu_control); +** +** All non-hidden columns (i.e. all columns matched by "SELECT *") of the +** target table must be present in the input table. For virtual tables, +** hidden columns are optional - they are updated by RBU if present in +** the input table, or not otherwise. For example, to write to an fts4 +** table with a hidden languageid column such as: +** +** CREATE VIRTUAL TABLE ft1 USING fts4(a, b, languageid='langid'); +** +** Either of the following input table schemas may be used: +** +** CREATE TABLE data_ft1(a, b, langid, rbu_rowid, rbu_control); +** CREATE TABLE data_ft1(a, b, rbu_rowid, rbu_control); +** +** For each row to INSERT into the target database as part of the RBU +** update, the corresponding data_% table should contain a single record +** with the "rbu_control" column set to contain integer value 0. The +** other columns should be set to the values that make up the new record +** to insert. +** +** If the target database table has an INTEGER PRIMARY KEY, it is not +** possible to insert a NULL value into the IPK column. Attempting to +** do so results in an SQLITE_MISMATCH error. +** +** For each row to DELETE from the target database as part of the RBU +** update, the corresponding data_% table should contain a single record +** with the "rbu_control" column set to contain integer value 1. The +** real primary key values of the row to delete should be stored in the +** corresponding columns of the data_% table. The values stored in the +** other columns are not used. +** +** For each row to UPDATE from the target database as part of the RBU +** update, the corresponding data_% table should contain a single record +** with the "rbu_control" column set to contain a value of type text. +** The real primary key values identifying the row to update should be +** stored in the corresponding columns of the data_% table row, as should +** the new values of all columns being update. The text value in the +** "rbu_control" column must contain the same number of characters as +** there are columns in the target database table, and must consist entirely +** of 'x' and '.' characters (or in some special cases 'd' - see below). For +** each column that is being updated, the corresponding character is set to +** 'x'. For those that remain as they are, the corresponding character of the +** rbu_control value should be set to '.'. For example, given the tables +** above, the update statement: +** +** UPDATE t1 SET c = 'usa' WHERE a = 4; +** +** is represented by the data_t1 row created by: +** +** INSERT INTO data_t1(a, b, c, rbu_control) VALUES(4, NULL, 'usa', '..x'); +** +** Instead of an 'x' character, characters of the rbu_control value specified +** for UPDATEs may also be set to 'd'. In this case, instead of updating the +** target table with the value stored in the corresponding data_% column, the +** user-defined SQL function "rbu_delta()" is invoked and the result stored in +** the target table column. rbu_delta() is invoked with two arguments - the +** original value currently stored in the target table column and the +** value specified in the data_xxx table. +** +** For example, this row: +** +** INSERT INTO data_t1(a, b, c, rbu_control) VALUES(4, NULL, 'usa', '..d'); +** +** is similar to an UPDATE statement such as: +** +** UPDATE t1 SET c = rbu_delta(c, 'usa') WHERE a = 4; +** +** Finally, if an 'f' character appears in place of a 'd' or 's' in an +** ota_control string, the contents of the data_xxx table column is assumed +** to be a "fossil delta" - a patch to be applied to a blob value in the +** format used by the fossil source-code management system. In this case +** the existing value within the target database table must be of type BLOB. +** It is replaced by the result of applying the specified fossil delta to +** itself. +** +** If the target database table is a virtual table or a table with no PRIMARY +** KEY, the rbu_control value should not include a character corresponding +** to the rbu_rowid value. For example, this: +** +** INSERT INTO data_ft1(a, b, rbu_rowid, rbu_control) +** VALUES(NULL, 'usa', 12, '.x'); +** +** causes a result similar to: +** +** UPDATE ft1 SET b = 'usa' WHERE rowid = 12; +** +** The data_xxx tables themselves should have no PRIMARY KEY declarations. +** However, RBU is more efficient if reading the rows in from each data_xxx +** table in "rowid" order is roughly the same as reading them sorted by +** the PRIMARY KEY of the corresponding target database table. In other +** words, rows should be sorted using the destination table PRIMARY KEY +** fields before they are inserted into the data_xxx tables. +** +** USAGE +** +** The API declared below allows an application to apply an RBU update +** stored on disk to an existing target database. Essentially, the +** application: +** +** 1) Opens an RBU handle using the sqlite3rbu_open() function. +** +** 2) Registers any required virtual table modules with the database +** handle returned by sqlite3rbu_db(). Also, if required, register +** the rbu_delta() implementation. +** +** 3) Calls the sqlite3rbu_step() function one or more times on +** the new handle. Each call to sqlite3rbu_step() performs a single +** b-tree operation, so thousands of calls may be required to apply +** a complete update. +** +** 4) Calls sqlite3rbu_close() to close the RBU update handle. If +** sqlite3rbu_step() has been called enough times to completely +** apply the update to the target database, then the RBU database +** is marked as fully applied. Otherwise, the state of the RBU +** update application is saved in the RBU database for later +** resumption. +** +** See comments below for more detail on APIs. +** +** If an update is only partially applied to the target database by the +** time sqlite3rbu_close() is called, various state information is saved +** within the RBU database. This allows subsequent processes to automatically +** resume the RBU update from where it left off. +** +** To remove all RBU extension state information, returning an RBU database +** to its original contents, it is sufficient to drop all tables that begin +** with the prefix "rbu_" +** +** DATABASE LOCKING +** +** An RBU update may not be applied to a database in WAL mode. Attempting +** to do so is an error (SQLITE_ERROR). +** +** While an RBU handle is open, a SHARED lock may be held on the target +** database file. This means it is possible for other clients to read the +** database, but not to write it. +** +** If an RBU update is started and then suspended before it is completed, +** then an external client writes to the database, then attempting to resume +** the suspended RBU update is also an error (SQLITE_BUSY). +*/ + +#ifndef _SQLITE3RBU_H +#define _SQLITE3RBU_H + +/* #include "sqlite3.h" ** Required for error code definitions ** */ + +#if 0 +extern "C" { +#endif + +typedef struct sqlite3rbu sqlite3rbu; + +/* +** Open an RBU handle. +** +** Argument zTarget is the path to the target database. Argument zRbu is +** the path to the RBU database. Each call to this function must be matched +** by a call to sqlite3rbu_close(). When opening the databases, RBU passes +** the SQLITE_CONFIG_URI flag to sqlite3_open_v2(). So if either zTarget +** or zRbu begin with "file:", it will be interpreted as an SQLite +** database URI, not a regular file name. +** +** If the zState argument is passed a NULL value, the RBU extension stores +** the current state of the update (how many rows have been updated, which +** indexes are yet to be updated etc.) within the RBU database itself. This +** can be convenient, as it means that the RBU application does not need to +** organize removing a separate state file after the update is concluded. +** Or, if zState is non-NULL, it must be a path to a database file in which +** the RBU extension can store the state of the update. +** +** When resuming an RBU update, the zState argument must be passed the same +** value as when the RBU update was started. +** +** Once the RBU update is finished, the RBU extension does not +** automatically remove any zState database file, even if it created it. +** +** By default, RBU uses the default VFS to access the files on disk. To +** use a VFS other than the default, an SQLite "file:" URI containing a +** "vfs=..." option may be passed as the zTarget option. +** +** IMPORTANT NOTE FOR ZIPVFS USERS: The RBU extension works with all of +** SQLite's built-in VFSs, including the multiplexor VFS. However it does +** not work out of the box with zipvfs. Refer to the comment describing +** the zipvfs_create_vfs() API below for details on using RBU with zipvfs. +*/ +SQLITE_API sqlite3rbu *sqlite3rbu_open( + const char *zTarget, + const char *zRbu, + const char *zState +); + +/* +** Open an RBU handle to perform an RBU vacuum on database file zTarget. +** An RBU vacuum is similar to SQLite's built-in VACUUM command, except +** that it can be suspended and resumed like an RBU update. +** +** The second argument to this function identifies a database in which +** to store the state of the RBU vacuum operation if it is suspended. The +** first time sqlite3rbu_vacuum() is called, to start an RBU vacuum +** operation, the state database should either not exist or be empty +** (contain no tables). If an RBU vacuum is suspended by calling +** sqlite3rbu_close() on the RBU handle before sqlite3rbu_step() has +** returned SQLITE_DONE, the vacuum state is stored in the state database. +** The vacuum can be resumed by calling this function to open a new RBU +** handle specifying the same target and state databases. +** +** If the second argument passed to this function is NULL, then the +** name of the state database is "-vacuum", where +** is the name of the target database file. In this case, on UNIX, if the +** state database is not already present in the file-system, it is created +** with the same permissions as the target db is made. +** +** With an RBU vacuum, it is an SQLITE_MISUSE error if the name of the +** state database ends with "-vactmp". This name is reserved for internal +** use. +** +** This function does not delete the state database after an RBU vacuum +** is completed, even if it created it. However, if the call to +** sqlite3rbu_close() returns any value other than SQLITE_OK, the contents +** of the state tables within the state database are zeroed. This way, +** the next call to sqlite3rbu_vacuum() opens a handle that starts a +** new RBU vacuum operation. +** +** As with sqlite3rbu_open(), Zipvfs users should refer to the comment +** describing the sqlite3rbu_create_vfs() API function below for +** a description of the complications associated with using RBU with +** zipvfs databases. +*/ +SQLITE_API sqlite3rbu *sqlite3rbu_vacuum( + const char *zTarget, + const char *zState +); + +/* +** Configure a limit for the amount of temp space that may be used by +** the RBU handle passed as the first argument. The new limit is specified +** in bytes by the second parameter. If it is positive, the limit is updated. +** If the second parameter to this function is passed zero, then the limit +** is removed entirely. If the second parameter is negative, the limit is +** not modified (this is useful for querying the current limit). +** +** In all cases the returned value is the current limit in bytes (zero +** indicates unlimited). +** +** If the temp space limit is exceeded during operation, an SQLITE_FULL +** error is returned. +*/ +SQLITE_API sqlite3_int64 sqlite3rbu_temp_size_limit(sqlite3rbu*, sqlite3_int64); + +/* +** Return the current amount of temp file space, in bytes, currently used by +** the RBU handle passed as the only argument. +*/ +SQLITE_API sqlite3_int64 sqlite3rbu_temp_size(sqlite3rbu*); + +/* +** Internally, each RBU connection uses a separate SQLite database +** connection to access the target and rbu update databases. This +** API allows the application direct access to these database handles. +** +** The first argument passed to this function must be a valid, open, RBU +** handle. The second argument should be passed zero to access the target +** database handle, or non-zero to access the rbu update database handle. +** Accessing the underlying database handles may be useful in the +** following scenarios: +** +** * If any target tables are virtual tables, it may be necessary to +** call sqlite3_create_module() on the target database handle to +** register the required virtual table implementations. +** +** * If the data_xxx tables in the RBU source database are virtual +** tables, the application may need to call sqlite3_create_module() on +** the rbu update db handle to any required virtual table +** implementations. +** +** * If the application uses the "rbu_delta()" feature described above, +** it must use sqlite3_create_function() or similar to register the +** rbu_delta() implementation with the target database handle. +** +** If an error has occurred, either while opening or stepping the RBU object, +** this function may return NULL. The error code and message may be collected +** when sqlite3rbu_close() is called. +** +** Database handles returned by this function remain valid until the next +** call to any sqlite3rbu_xxx() function other than sqlite3rbu_db(). +*/ +SQLITE_API sqlite3 *sqlite3rbu_db(sqlite3rbu*, int bRbu); + +/* +** Do some work towards applying the RBU update to the target db. +** +** Return SQLITE_DONE if the update has been completely applied, or +** SQLITE_OK if no error occurs but there remains work to do to apply +** the RBU update. If an error does occur, some other error code is +** returned. +** +** Once a call to sqlite3rbu_step() has returned a value other than +** SQLITE_OK, all subsequent calls on the same RBU handle are no-ops +** that immediately return the same value. +*/ +SQLITE_API int sqlite3rbu_step(sqlite3rbu *pRbu); + +/* +** Force RBU to save its state to disk. +** +** If a power failure or application crash occurs during an update, following +** system recovery RBU may resume the update from the point at which the state +** was last saved. In other words, from the most recent successful call to +** sqlite3rbu_close() or this function. +** +** SQLITE_OK is returned if successful, or an SQLite error code otherwise. +*/ +SQLITE_API int sqlite3rbu_savestate(sqlite3rbu *pRbu); + +/* +** Close an RBU handle. +** +** If the RBU update has been completely applied, mark the RBU database +** as fully applied. Otherwise, assuming no error has occurred, save the +** current state of the RBU update application to the RBU database. +** +** If an error has already occurred as part of an sqlite3rbu_step() +** or sqlite3rbu_open() call, or if one occurs within this function, an +** SQLite error code is returned. Additionally, if pzErrmsg is not NULL, +** *pzErrmsg may be set to point to a buffer containing a utf-8 formatted +** English language error message. It is the responsibility of the caller to +** eventually free any such buffer using sqlite3_free(). +** +** Otherwise, if no error occurs, this function returns SQLITE_OK if the +** update has been partially applied, or SQLITE_DONE if it has been +** completely applied. +*/ +SQLITE_API int sqlite3rbu_close(sqlite3rbu *pRbu, char **pzErrmsg); + +/* +** Return the total number of key-value operations (inserts, deletes or +** updates) that have been performed on the target database since the +** current RBU update was started. +*/ +SQLITE_API sqlite3_int64 sqlite3rbu_progress(sqlite3rbu *pRbu); + +/* +** Obtain permyriadage (permyriadage is to 10000 as percentage is to 100) +** progress indications for the two stages of an RBU update. This API may +** be useful for driving GUI progress indicators and similar. +** +** An RBU update is divided into two stages: +** +** * Stage 1, in which changes are accumulated in an oal/wal file, and +** * Stage 2, in which the contents of the wal file are copied into the +** main database. +** +** The update is visible to non-RBU clients during stage 2. During stage 1 +** non-RBU reader clients may see the original database. +** +** If this API is called during stage 2 of the update, output variable +** (*pnOne) is set to 10000 to indicate that stage 1 has finished and (*pnTwo) +** to a value between 0 and 10000 to indicate the permyriadage progress of +** stage 2. A value of 5000 indicates that stage 2 is half finished, +** 9000 indicates that it is 90% finished, and so on. +** +** If this API is called during stage 1 of the update, output variable +** (*pnTwo) is set to 0 to indicate that stage 2 has not yet started. The +** value to which (*pnOne) is set depends on whether or not the RBU +** database contains an "rbu_count" table. The rbu_count table, if it +** exists, must contain the same columns as the following: +** +** CREATE TABLE rbu_count(tbl TEXT PRIMARY KEY, cnt INTEGER) WITHOUT ROWID; +** +** There must be one row in the table for each source (data_xxx) table within +** the RBU database. The 'tbl' column should contain the name of the source +** table. The 'cnt' column should contain the number of rows within the +** source table. +** +** If the rbu_count table is present and populated correctly and this +** API is called during stage 1, the *pnOne output variable is set to the +** permyriadage progress of the same stage. If the rbu_count table does +** not exist, then (*pnOne) is set to -1 during stage 1. If the rbu_count +** table exists but is not correctly populated, the value of the *pnOne +** output variable during stage 1 is undefined. +*/ +SQLITE_API void sqlite3rbu_bp_progress(sqlite3rbu *pRbu, int *pnOne, int*pnTwo); + +/* +** Obtain an indication as to the current stage of an RBU update or vacuum. +** This function always returns one of the SQLITE_RBU_STATE_XXX constants +** defined in this file. Return values should be interpreted as follows: +** +** SQLITE_RBU_STATE_OAL: +** RBU is currently building a *-oal file. The next call to sqlite3rbu_step() +** may either add further data to the *-oal file, or compute data that will +** be added by a subsequent call. +** +** SQLITE_RBU_STATE_MOVE: +** RBU has finished building the *-oal file. The next call to sqlite3rbu_step() +** will move the *-oal file to the equivalent *-wal path. If the current +** operation is an RBU update, then the updated version of the database +** file will become visible to ordinary SQLite clients following the next +** call to sqlite3rbu_step(). +** +** SQLITE_RBU_STATE_CHECKPOINT: +** RBU is currently performing an incremental checkpoint. The next call to +** sqlite3rbu_step() will copy a page of data from the *-wal file into +** the target database file. +** +** SQLITE_RBU_STATE_DONE: +** The RBU operation has finished. Any subsequent calls to sqlite3rbu_step() +** will immediately return SQLITE_DONE. +** +** SQLITE_RBU_STATE_ERROR: +** An error has occurred. Any subsequent calls to sqlite3rbu_step() will +** immediately return the SQLite error code associated with the error. +*/ +#define SQLITE_RBU_STATE_OAL 1 +#define SQLITE_RBU_STATE_MOVE 2 +#define SQLITE_RBU_STATE_CHECKPOINT 3 +#define SQLITE_RBU_STATE_DONE 4 +#define SQLITE_RBU_STATE_ERROR 5 + +SQLITE_API int sqlite3rbu_state(sqlite3rbu *pRbu); + +/* +** As part of applying an RBU update or performing an RBU vacuum operation, +** the system must at one point move the *-oal file to the equivalent *-wal +** path. Normally, it does this by invoking POSIX function rename(2) directly. +** Except on WINCE platforms, where it uses win32 API MoveFileW(). This +** function may be used to register a callback that the RBU module will invoke +** instead of one of these APIs. +** +** If a callback is registered with an RBU handle, it invokes it instead +** of rename(2) when it needs to move a file within the file-system. The +** first argument passed to the xRename() callback is a copy of the second +** argument (pArg) passed to this function. The second is the full path +** to the file to move and the third the full path to which it should be +** moved. The callback function should return SQLITE_OK to indicate +** success. If an error occurs, it should return an SQLite error code. +** In this case the RBU operation will be abandoned and the error returned +** to the RBU user. +** +** Passing a NULL pointer in place of the xRename argument to this function +** restores the default behaviour. +*/ +SQLITE_API void sqlite3rbu_rename_handler( + sqlite3rbu *pRbu, + void *pArg, + int (*xRename)(void *pArg, const char *zOld, const char *zNew) +); + + +/* +** Create an RBU VFS named zName that accesses the underlying file-system +** via existing VFS zParent. Or, if the zParent parameter is passed NULL, +** then the new RBU VFS uses the default system VFS to access the file-system. +** The new object is registered as a non-default VFS with SQLite before +** returning. +** +** Part of the RBU implementation uses a custom VFS object. Usually, this +** object is created and deleted automatically by RBU. +** +** The exception is for applications that also use zipvfs. In this case, +** the custom VFS must be explicitly created by the user before the RBU +** handle is opened. The RBU VFS should be installed so that the zipvfs +** VFS uses the RBU VFS, which in turn uses any other VFS layers in use +** (for example multiplexor) to access the file-system. For example, +** to assemble an RBU enabled VFS stack that uses both zipvfs and +** multiplexor (error checking omitted): +** +** // Create a VFS named "multiplex" (not the default). +** sqlite3_multiplex_initialize(0, 0); +** +** // Create an rbu VFS named "rbu" that uses multiplexor. If the +** // second argument were replaced with NULL, the "rbu" VFS would +** // access the file-system via the system default VFS, bypassing the +** // multiplexor. +** sqlite3rbu_create_vfs("rbu", "multiplex"); +** +** // Create a zipvfs VFS named "zipvfs" that uses rbu. +** zipvfs_create_vfs_v3("zipvfs", "rbu", 0, xCompressorAlgorithmDetector); +** +** // Make zipvfs the default VFS. +** sqlite3_vfs_register(sqlite3_vfs_find("zipvfs"), 1); +** +** Because the default VFS created above includes a RBU functionality, it +** may be used by RBU clients. Attempting to use RBU with a zipvfs VFS stack +** that does not include the RBU layer results in an error. +** +** The overhead of adding the "rbu" VFS to the system is negligible for +** non-RBU users. There is no harm in an application accessing the +** file-system via "rbu" all the time, even if it only uses RBU functionality +** occasionally. +*/ +SQLITE_API int sqlite3rbu_create_vfs(const char *zName, const char *zParent); + +/* +** Deregister and destroy an RBU vfs created by an earlier call to +** sqlite3rbu_create_vfs(). +** +** VFS objects are not reference counted. If a VFS object is destroyed +** before all database handles that use it have been closed, the results +** are undefined. +*/ +SQLITE_API void sqlite3rbu_destroy_vfs(const char *zName); + +#if 0 +} /* end of the 'extern "C"' block */ +#endif + +#endif /* _SQLITE3RBU_H */ + +/************** End of sqlite3rbu.h ******************************************/ +/************** Continuing where we left off in sqlite3rbu.c *****************/ + +#if defined(_WIN32_WCE) +/* #include "windows.h" */ +#endif + +/* Maximum number of prepared UPDATE statements held by this module */ +#define SQLITE_RBU_UPDATE_CACHESIZE 16 + +/* Delta checksums disabled by default. Compile with -DRBU_ENABLE_DELTA_CKSUM +** to enable checksum verification. +*/ +#ifndef RBU_ENABLE_DELTA_CKSUM +# define RBU_ENABLE_DELTA_CKSUM 0 +#endif + +/* +** Swap two objects of type TYPE. +*/ +#if !defined(SQLITE_AMALGAMATION) +# define SWAP(TYPE,A,B) {TYPE t=A; A=B; B=t;} +#endif + +/* +** Name of the URI option that causes RBU to take an exclusive lock as +** part of the incremental checkpoint operation. +*/ +#define RBU_EXCLUSIVE_CHECKPOINT "rbu_exclusive_checkpoint" + + +/* +** The rbu_state table is used to save the state of a partially applied +** update so that it can be resumed later. The table consists of integer +** keys mapped to values as follows: +** +** RBU_STATE_STAGE: +** May be set to integer values 1, 2, 4 or 5. As follows: +** 1: the *-rbu file is currently under construction. +** 2: the *-rbu file has been constructed, but not yet moved +** to the *-wal path. +** 4: the checkpoint is underway. +** 5: the rbu update has been checkpointed. +** +** RBU_STATE_TBL: +** Only valid if STAGE==1. The target database name of the table +** currently being written. +** +** RBU_STATE_IDX: +** Only valid if STAGE==1. The target database name of the index +** currently being written, or NULL if the main table is currently being +** updated. +** +** RBU_STATE_ROW: +** Only valid if STAGE==1. Number of rows already processed for the current +** table/index. +** +** RBU_STATE_PROGRESS: +** Trbul number of sqlite3rbu_step() calls made so far as part of this +** rbu update. +** +** RBU_STATE_CKPT: +** Valid if STAGE==4. The 64-bit checksum associated with the wal-index +** header created by recovering the *-wal file. This is used to detect +** cases when another client appends frames to the *-wal file in the +** middle of an incremental checkpoint (an incremental checkpoint cannot +** be continued if this happens). +** +** RBU_STATE_COOKIE: +** Valid if STAGE==1. The current change-counter cookie value in the +** target db file. +** +** RBU_STATE_OALSZ: +** Valid if STAGE==1. The size in bytes of the *-oal file. +** +** RBU_STATE_DATATBL: +** Only valid if STAGE==1. The RBU database name of the table +** currently being read. +*/ +#define RBU_STATE_STAGE 1 +#define RBU_STATE_TBL 2 +#define RBU_STATE_IDX 3 +#define RBU_STATE_ROW 4 +#define RBU_STATE_PROGRESS 5 +#define RBU_STATE_CKPT 6 +#define RBU_STATE_COOKIE 7 +#define RBU_STATE_OALSZ 8 +#define RBU_STATE_PHASEONESTEP 9 +#define RBU_STATE_DATATBL 10 + +#define RBU_STAGE_OAL 1 +#define RBU_STAGE_MOVE 2 +#define RBU_STAGE_CAPTURE 3 +#define RBU_STAGE_CKPT 4 +#define RBU_STAGE_DONE 5 + + +#define RBU_CREATE_STATE \ + "CREATE TABLE IF NOT EXISTS %s.rbu_state(k INTEGER PRIMARY KEY, v)" + +typedef struct RbuFrame RbuFrame; +typedef struct RbuObjIter RbuObjIter; +typedef struct RbuState RbuState; +typedef struct RbuSpan RbuSpan; +typedef struct rbu_vfs rbu_vfs; +typedef struct rbu_file rbu_file; +typedef struct RbuUpdateStmt RbuUpdateStmt; + +#if !defined(SQLITE_AMALGAMATION) +typedef unsigned int u32; +typedef unsigned short u16; +typedef unsigned char u8; +typedef sqlite3_int64 i64; +typedef sqlite3_uint64 u64; +#endif + +/* +** These values must match the values defined in wal.c for the equivalent +** locks. These are not magic numbers as they are part of the SQLite file +** format. +*/ +#define WAL_LOCK_WRITE 0 +#define WAL_LOCK_CKPT 1 +#define WAL_LOCK_READ0 3 + +#define SQLITE_FCNTL_RBUCNT 5149216 + +/* +** A structure to store values read from the rbu_state table in memory. +*/ +struct RbuState { + int eStage; + char *zTbl; + char *zDataTbl; + char *zIdx; + i64 iWalCksum; + int nRow; + i64 nProgress; + u32 iCookie; + i64 iOalSz; + i64 nPhaseOneStep; +}; + +struct RbuUpdateStmt { + char *zMask; /* Copy of update mask used with pUpdate */ + sqlite3_stmt *pUpdate; /* Last update statement (or NULL) */ + RbuUpdateStmt *pNext; +}; + +struct RbuSpan { + const char *zSpan; + int nSpan; +}; + +/* +** An iterator of this type is used to iterate through all objects in +** the target database that require updating. For each such table, the +** iterator visits, in order: +** +** * the table itself, +** * each index of the table (zero or more points to visit), and +** * a special "cleanup table" state. +** +** abIndexed: +** If the table has no indexes on it, abIndexed is set to NULL. Otherwise, +** it points to an array of flags nTblCol elements in size. The flag is +** set for each column that is either a part of the PK or a part of an +** index. Or clear otherwise. +** +** If there are one or more partial indexes on the table, all fields of +** this array set set to 1. This is because in that case, the module has +** no way to tell which fields will be required to add and remove entries +** from the partial indexes. +** +*/ +struct RbuObjIter { + sqlite3_stmt *pTblIter; /* Iterate through tables */ + sqlite3_stmt *pIdxIter; /* Index iterator */ + int nTblCol; /* Size of azTblCol[] array */ + char **azTblCol; /* Array of unquoted target column names */ + char **azTblType; /* Array of target column types */ + int *aiSrcOrder; /* src table col -> target table col */ + u8 *abTblPk; /* Array of flags, set on target PK columns */ + u8 *abNotNull; /* Array of flags, set on NOT NULL columns */ + u8 *abIndexed; /* Array of flags, set on indexed & PK cols */ + int eType; /* Table type - an RBU_PK_XXX value */ + + /* Output variables. zTbl==0 implies EOF. */ + int bCleanup; /* True in "cleanup" state */ + const char *zTbl; /* Name of target db table */ + const char *zDataTbl; /* Name of rbu db table (or null) */ + const char *zIdx; /* Name of target db index (or null) */ + int iTnum; /* Root page of current object */ + int iPkTnum; /* If eType==EXTERNAL, root of PK index */ + int bUnique; /* Current index is unique */ + int nIndex; /* Number of aux. indexes on table zTbl */ + + /* Statements created by rbuObjIterPrepareAll() */ + int nCol; /* Number of columns in current object */ + sqlite3_stmt *pSelect; /* Source data */ + sqlite3_stmt *pInsert; /* Statement for INSERT operations */ + sqlite3_stmt *pDelete; /* Statement for DELETE ops */ + sqlite3_stmt *pTmpInsert; /* Insert into rbu_tmp_$zDataTbl */ + int nIdxCol; + RbuSpan *aIdxCol; + char *zIdxSql; + + /* Last UPDATE used (for PK b-tree updates only), or NULL. */ + RbuUpdateStmt *pRbuUpdate; +}; + +/* +** Values for RbuObjIter.eType +** +** 0: Table does not exist (error) +** 1: Table has an implicit rowid. +** 2: Table has an explicit IPK column. +** 3: Table has an external PK index. +** 4: Table is WITHOUT ROWID. +** 5: Table is a virtual table. +*/ +#define RBU_PK_NOTABLE 0 +#define RBU_PK_NONE 1 +#define RBU_PK_IPK 2 +#define RBU_PK_EXTERNAL 3 +#define RBU_PK_WITHOUT_ROWID 4 +#define RBU_PK_VTAB 5 + + +/* +** Within the RBU_STAGE_OAL stage, each call to sqlite3rbu_step() performs +** one of the following operations. +*/ +#define RBU_INSERT 1 /* Insert on a main table b-tree */ +#define RBU_DELETE 2 /* Delete a row from a main table b-tree */ +#define RBU_REPLACE 3 /* Delete and then insert a row */ +#define RBU_IDX_DELETE 4 /* Delete a row from an aux. index b-tree */ +#define RBU_IDX_INSERT 5 /* Insert on an aux. index b-tree */ + +#define RBU_UPDATE 6 /* Update a row in a main table b-tree */ + +/* +** A single step of an incremental checkpoint - frame iWalFrame of the wal +** file should be copied to page iDbPage of the database file. +*/ +struct RbuFrame { + u32 iDbPage; + u32 iWalFrame; +}; + +#ifndef UNUSED_PARAMETER +/* +** The following macros are used to suppress compiler warnings and to +** make it clear to human readers when a function parameter is deliberately +** left unused within the body of a function. This usually happens when +** a function is called via a function pointer. For example the +** implementation of an SQL aggregate step callback may not use the +** parameter indicating the number of arguments passed to the aggregate, +** if it knows that this is enforced elsewhere. +** +** When a function parameter is not used at all within the body of a function, +** it is generally named "NotUsed" or "NotUsed2" to make things even clearer. +** However, these macros may also be used to suppress warnings related to +** parameters that may or may not be used depending on compilation options. +** For example those parameters only used in assert() statements. In these +** cases the parameters are named as per the usual conventions. +*/ +#define UNUSED_PARAMETER(x) (void)(x) +#define UNUSED_PARAMETER2(x,y) UNUSED_PARAMETER(x),UNUSED_PARAMETER(y) +#endif + +/* +** RBU handle. +** +** nPhaseOneStep: +** If the RBU database contains an rbu_count table, this value is set to +** a running estimate of the number of b-tree operations required to +** finish populating the *-oal file. This allows the sqlite3_bp_progress() +** API to calculate the permyriadage progress of populating the *-oal file +** using the formula: +** +** permyriadage = (10000 * nProgress) / nPhaseOneStep +** +** nPhaseOneStep is initialized to the sum of: +** +** nRow * (nIndex + 1) +** +** for all source tables in the RBU database, where nRow is the number +** of rows in the source table and nIndex the number of indexes on the +** corresponding target database table. +** +** This estimate is accurate if the RBU update consists entirely of +** INSERT operations. However, it is inaccurate if: +** +** * the RBU update contains any UPDATE operations. If the PK specified +** for an UPDATE operation does not exist in the target table, then +** no b-tree operations are required on index b-trees. Or if the +** specified PK does exist, then (nIndex*2) such operations are +** required (one delete and one insert on each index b-tree). +** +** * the RBU update contains any DELETE operations for which the specified +** PK does not exist. In this case no operations are required on index +** b-trees. +** +** * the RBU update contains REPLACE operations. These are similar to +** UPDATE operations. +** +** nPhaseOneStep is updated to account for the conditions above during the +** first pass of each source table. The updated nPhaseOneStep value is +** stored in the rbu_state table if the RBU update is suspended. +*/ +struct sqlite3rbu { + int eStage; /* Value of RBU_STATE_STAGE field */ + sqlite3 *dbMain; /* target database handle */ + sqlite3 *dbRbu; /* rbu database handle */ + char *zTarget; /* Path to target db */ + char *zRbu; /* Path to rbu db */ + char *zState; /* Path to state db (or NULL if zRbu) */ + char zStateDb[5]; /* Db name for state ("stat" or "main") */ + int rc; /* Value returned by last rbu_step() call */ + char *zErrmsg; /* Error message if rc!=SQLITE_OK */ + int nStep; /* Rows processed for current object */ + sqlite3_int64 nProgress; /* Rows processed for all objects */ + RbuObjIter objiter; /* Iterator for skipping through tbl/idx */ + const char *zVfsName; /* Name of automatically created rbu vfs */ + rbu_file *pTargetFd; /* File handle open on target db */ + int nPagePerSector; /* Pages per sector for pTargetFd */ + i64 iOalSz; + i64 nPhaseOneStep; + void *pRenameArg; + int (*xRename)(void*, const char*, const char*); + + /* The following state variables are used as part of the incremental + ** checkpoint stage (eStage==RBU_STAGE_CKPT). See comments surrounding + ** function rbuSetupCheckpoint() for details. */ + u32 iMaxFrame; /* Largest iWalFrame value in aFrame[] */ + u32 mLock; + int nFrame; /* Entries in aFrame[] array */ + int nFrameAlloc; /* Allocated size of aFrame[] array */ + RbuFrame *aFrame; + int pgsz; + u8 *aBuf; + i64 iWalCksum; + i64 szTemp; /* Current size of all temp files in use */ + i64 szTempLimit; /* Total size limit for temp files */ + + /* Used in RBU vacuum mode only */ + int nRbu; /* Number of RBU VFS in the stack */ + rbu_file *pRbuFd; /* Fd for main db of dbRbu */ +}; + +/* +** An rbu VFS is implemented using an instance of this structure. +** +** Variable pRbu is only non-NULL for automatically created RBU VFS objects. +** It is NULL for RBU VFS objects created explicitly using +** sqlite3rbu_create_vfs(). It is used to track the total amount of temp +** space used by the RBU handle. +*/ +struct rbu_vfs { + sqlite3_vfs base; /* rbu VFS shim methods */ + sqlite3_vfs *pRealVfs; /* Underlying VFS */ + sqlite3_mutex *mutex; /* Mutex to protect pMain */ + sqlite3rbu *pRbu; /* Owner RBU object */ + rbu_file *pMain; /* List of main db files */ + rbu_file *pMainRbu; /* List of main db files with pRbu!=0 */ +}; + +/* +** Each file opened by an rbu VFS is represented by an instance of +** the following structure. +** +** If this is a temporary file (pRbu!=0 && flags&DELETE_ON_CLOSE), variable +** "sz" is set to the current size of the database file. +*/ +struct rbu_file { + sqlite3_file base; /* sqlite3_file methods */ + sqlite3_file *pReal; /* Underlying file handle */ + rbu_vfs *pRbuVfs; /* Pointer to the rbu_vfs object */ + sqlite3rbu *pRbu; /* Pointer to rbu object (rbu target only) */ + i64 sz; /* Size of file in bytes (temp only) */ + + int openFlags; /* Flags this file was opened with */ + u32 iCookie; /* Cookie value for main db files */ + u8 iWriteVer; /* "write-version" value for main db files */ + u8 bNolock; /* True to fail EXCLUSIVE locks */ + + int nShm; /* Number of entries in apShm[] array */ + char **apShm; /* Array of mmap'd *-shm regions */ + char *zDel; /* Delete this when closing file */ + + const char *zWal; /* Wal filename for this main db file */ + rbu_file *pWalFd; /* Wal file descriptor for this main db */ + rbu_file *pMainNext; /* Next MAIN_DB file */ + rbu_file *pMainRbuNext; /* Next MAIN_DB file with pRbu!=0 */ +}; + +/* +** True for an RBU vacuum handle, or false otherwise. +*/ +#define rbuIsVacuum(p) ((p)->zTarget==0) + + +/************************************************************************* +** The following three functions, found below: +** +** rbuDeltaGetInt() +** rbuDeltaChecksum() +** rbuDeltaApply() +** +** are lifted from the fossil source code (http://fossil-scm.org). They +** are used to implement the scalar SQL function rbu_fossil_delta(). +*/ + +/* +** Read bytes from *pz and convert them into a positive integer. When +** finished, leave *pz pointing to the first character past the end of +** the integer. The *pLen parameter holds the length of the string +** in *pz and is decremented once for each character in the integer. +*/ +static unsigned int rbuDeltaGetInt(const char **pz, int *pLen){ + static const signed char zValue[] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, 36, + -1, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, -1, -1, -1, 63, -1, + }; + unsigned int v = 0; + int c; + unsigned char *z = (unsigned char*)*pz; + unsigned char *zStart = z; + while( (c = zValue[0x7f&*(z++)])>=0 ){ + v = (v<<6) + c; + } + z--; + *pLen -= (int)(z - zStart); + *pz = (char*)z; + return v; +} + +#if RBU_ENABLE_DELTA_CKSUM +/* +** Compute a 32-bit checksum on the N-byte buffer. Return the result. +*/ +static unsigned int rbuDeltaChecksum(const char *zIn, size_t N){ + const unsigned char *z = (const unsigned char *)zIn; + unsigned sum0 = 0; + unsigned sum1 = 0; + unsigned sum2 = 0; + unsigned sum3 = 0; + while(N >= 16){ + sum0 += ((unsigned)z[0] + z[4] + z[8] + z[12]); + sum1 += ((unsigned)z[1] + z[5] + z[9] + z[13]); + sum2 += ((unsigned)z[2] + z[6] + z[10]+ z[14]); + sum3 += ((unsigned)z[3] + z[7] + z[11]+ z[15]); + z += 16; + N -= 16; + } + while(N >= 4){ + sum0 += z[0]; + sum1 += z[1]; + sum2 += z[2]; + sum3 += z[3]; + z += 4; + N -= 4; + } + sum3 += (sum2 << 8) + (sum1 << 16) + (sum0 << 24); + switch(N){ + case 3: sum3 += (z[2] << 8); + case 2: sum3 += (z[1] << 16); + case 1: sum3 += (z[0] << 24); + default: ; + } + return sum3; +} +#endif + +/* +** Apply a delta. +** +** The output buffer should be big enough to hold the whole output +** file and a NUL terminator at the end. The delta_output_size() +** routine will determine this size for you. +** +** The delta string should be null-terminated. But the delta string +** may contain embedded NUL characters (if the input and output are +** binary files) so we also have to pass in the length of the delta in +** the lenDelta parameter. +** +** This function returns the size of the output file in bytes (excluding +** the final NUL terminator character). Except, if the delta string is +** malformed or intended for use with a source file other than zSrc, +** then this routine returns -1. +** +** Refer to the delta_create() documentation above for a description +** of the delta file format. +*/ +static int rbuDeltaApply( + const char *zSrc, /* The source or pattern file */ + int lenSrc, /* Length of the source file */ + const char *zDelta, /* Delta to apply to the pattern */ + int lenDelta, /* Length of the delta */ + char *zOut /* Write the output into this preallocated buffer */ +){ + unsigned int limit; + unsigned int total = 0; +#if RBU_ENABLE_DELTA_CKSUM + char *zOrigOut = zOut; +#endif + + limit = rbuDeltaGetInt(&zDelta, &lenDelta); + if( *zDelta!='\n' ){ + /* ERROR: size integer not terminated by "\n" */ + return -1; + } + zDelta++; lenDelta--; + while( *zDelta && lenDelta>0 ){ + unsigned int cnt, ofst; + cnt = rbuDeltaGetInt(&zDelta, &lenDelta); + switch( zDelta[0] ){ + case '@': { + zDelta++; lenDelta--; + ofst = rbuDeltaGetInt(&zDelta, &lenDelta); + if( lenDelta>0 && zDelta[0]!=',' ){ + /* ERROR: copy command not terminated by ',' */ + return -1; + } + zDelta++; lenDelta--; + total += cnt; + if( total>limit ){ + /* ERROR: copy exceeds output file size */ + return -1; + } + if( (u64)ofst+(u64)cnt > (u64)lenSrc ){ + /* ERROR: copy extends past end of input */ + return -1; + } + memcpy(zOut, &zSrc[ofst], cnt); + zOut += cnt; + break; + } + case ':': { + zDelta++; lenDelta--; + total += cnt; + if( total>limit ){ + /* ERROR: insert command gives an output larger than predicted */ + return -1; + } + if( (int)cnt>lenDelta ){ + /* ERROR: insert count exceeds size of delta */ + return -1; + } + memcpy(zOut, zDelta, cnt); + zOut += cnt; + zDelta += cnt; + lenDelta -= cnt; + break; + } + case ';': { + zDelta++; lenDelta--; + zOut[0] = 0; +#if RBU_ENABLE_DELTA_CKSUM + if( cnt!=rbuDeltaChecksum(zOrigOut, total) ){ + /* ERROR: bad checksum */ + return -1; + } +#endif + if( total!=limit ){ + /* ERROR: generated size does not match predicted size */ + return -1; + } + return total; + } + default: { + /* ERROR: unknown delta operator */ + return -1; + } + } + } + /* ERROR: unterminated delta */ + return -1; +} + +static int rbuDeltaOutputSize(const char *zDelta, int lenDelta){ + int size; + size = rbuDeltaGetInt(&zDelta, &lenDelta); + if( *zDelta!='\n' ){ + /* ERROR: size integer not terminated by "\n" */ + return -1; + } + return size; +} + +/* +** End of code taken from fossil. +*************************************************************************/ + +/* +** Implementation of SQL scalar function rbu_fossil_delta(). +** +** This function applies a fossil delta patch to a blob. Exactly two +** arguments must be passed to this function. The first is the blob to +** patch and the second the patch to apply. If no error occurs, this +** function returns the patched blob. +*/ +static void rbuFossilDeltaFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + const char *aDelta; + int nDelta; + const char *aOrig; + int nOrig; + + int nOut; + int nOut2; + char *aOut; + + assert( argc==2 ); + UNUSED_PARAMETER(argc); + + nOrig = sqlite3_value_bytes(argv[0]); + aOrig = (const char*)sqlite3_value_blob(argv[0]); + nDelta = sqlite3_value_bytes(argv[1]); + aDelta = (const char*)sqlite3_value_blob(argv[1]); + + /* Figure out the size of the output */ + nOut = rbuDeltaOutputSize(aDelta, nDelta); + if( nOut<0 ){ + sqlite3_result_error(context, "corrupt fossil delta", -1); + return; + } + + aOut = sqlite3_malloc(nOut+1); + if( aOut==0 ){ + sqlite3_result_error_nomem(context); + }else{ + nOut2 = rbuDeltaApply(aOrig, nOrig, aDelta, nDelta, aOut); + if( nOut2!=nOut ){ + sqlite3_free(aOut); + sqlite3_result_error(context, "corrupt fossil delta", -1); + }else{ + sqlite3_result_blob(context, aOut, nOut, sqlite3_free); + } + } +} + + +/* +** Prepare the SQL statement in buffer zSql against database handle db. +** If successful, set *ppStmt to point to the new statement and return +** SQLITE_OK. +** +** Otherwise, if an error does occur, set *ppStmt to NULL and return +** an SQLite error code. Additionally, set output variable *pzErrmsg to +** point to a buffer containing an error message. It is the responsibility +** of the caller to (eventually) free this buffer using sqlite3_free(). +*/ +static int prepareAndCollectError( + sqlite3 *db, + sqlite3_stmt **ppStmt, + char **pzErrmsg, + const char *zSql +){ + int rc = sqlite3_prepare_v2(db, zSql, -1, ppStmt, 0); + if( rc!=SQLITE_OK ){ + *pzErrmsg = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + *ppStmt = 0; + } + return rc; +} + +/* +** Reset the SQL statement passed as the first argument. Return a copy +** of the value returned by sqlite3_reset(). +** +** If an error has occurred, then set *pzErrmsg to point to a buffer +** containing an error message. It is the responsibility of the caller +** to eventually free this buffer using sqlite3_free(). +*/ +static int resetAndCollectError(sqlite3_stmt *pStmt, char **pzErrmsg){ + int rc = sqlite3_reset(pStmt); + if( rc!=SQLITE_OK ){ + *pzErrmsg = sqlite3_mprintf("%s", sqlite3_errmsg(sqlite3_db_handle(pStmt))); + } + return rc; +} + +/* +** Unless it is NULL, argument zSql points to a buffer allocated using +** sqlite3_malloc containing an SQL statement. This function prepares the SQL +** statement against database db and frees the buffer. If statement +** compilation is successful, *ppStmt is set to point to the new statement +** handle and SQLITE_OK is returned. +** +** Otherwise, if an error occurs, *ppStmt is set to NULL and an error code +** returned. In this case, *pzErrmsg may also be set to point to an error +** message. It is the responsibility of the caller to free this error message +** buffer using sqlite3_free(). +** +** If argument zSql is NULL, this function assumes that an OOM has occurred. +** In this case SQLITE_NOMEM is returned and *ppStmt set to NULL. +*/ +static int prepareFreeAndCollectError( + sqlite3 *db, + sqlite3_stmt **ppStmt, + char **pzErrmsg, + char *zSql +){ + int rc; + assert( *pzErrmsg==0 ); + if( zSql==0 ){ + rc = SQLITE_NOMEM; + *ppStmt = 0; + }else{ + rc = prepareAndCollectError(db, ppStmt, pzErrmsg, zSql); + sqlite3_free(zSql); + } + return rc; +} + +/* +** Free the RbuObjIter.azTblCol[] and RbuObjIter.abTblPk[] arrays allocated +** by an earlier call to rbuObjIterCacheTableInfo(). +*/ +static void rbuObjIterFreeCols(RbuObjIter *pIter){ + int i; + for(i=0; inTblCol; i++){ + sqlite3_free(pIter->azTblCol[i]); + sqlite3_free(pIter->azTblType[i]); + } + sqlite3_free(pIter->azTblCol); + pIter->azTblCol = 0; + pIter->azTblType = 0; + pIter->aiSrcOrder = 0; + pIter->abTblPk = 0; + pIter->abNotNull = 0; + pIter->nTblCol = 0; + pIter->eType = 0; /* Invalid value */ +} + +/* +** Finalize all statements and free all allocations that are specific to +** the current object (table/index pair). +*/ +static void rbuObjIterClearStatements(RbuObjIter *pIter){ + RbuUpdateStmt *pUp; + + sqlite3_finalize(pIter->pSelect); + sqlite3_finalize(pIter->pInsert); + sqlite3_finalize(pIter->pDelete); + sqlite3_finalize(pIter->pTmpInsert); + pUp = pIter->pRbuUpdate; + while( pUp ){ + RbuUpdateStmt *pTmp = pUp->pNext; + sqlite3_finalize(pUp->pUpdate); + sqlite3_free(pUp); + pUp = pTmp; + } + sqlite3_free(pIter->aIdxCol); + sqlite3_free(pIter->zIdxSql); + + pIter->pSelect = 0; + pIter->pInsert = 0; + pIter->pDelete = 0; + pIter->pRbuUpdate = 0; + pIter->pTmpInsert = 0; + pIter->nCol = 0; + pIter->nIdxCol = 0; + pIter->aIdxCol = 0; + pIter->zIdxSql = 0; +} + +/* +** Clean up any resources allocated as part of the iterator object passed +** as the only argument. +*/ +static void rbuObjIterFinalize(RbuObjIter *pIter){ + rbuObjIterClearStatements(pIter); + sqlite3_finalize(pIter->pTblIter); + sqlite3_finalize(pIter->pIdxIter); + rbuObjIterFreeCols(pIter); + memset(pIter, 0, sizeof(RbuObjIter)); +} + +/* +** Advance the iterator to the next position. +** +** If no error occurs, SQLITE_OK is returned and the iterator is left +** pointing to the next entry. Otherwise, an error code and message is +** left in the RBU handle passed as the first argument. A copy of the +** error code is returned. +*/ +static int rbuObjIterNext(sqlite3rbu *p, RbuObjIter *pIter){ + int rc = p->rc; + if( rc==SQLITE_OK ){ + + /* Free any SQLite statements used while processing the previous object */ + rbuObjIterClearStatements(pIter); + if( pIter->zIdx==0 ){ + rc = sqlite3_exec(p->dbMain, + "DROP TRIGGER IF EXISTS temp.rbu_insert_tr;" + "DROP TRIGGER IF EXISTS temp.rbu_update1_tr;" + "DROP TRIGGER IF EXISTS temp.rbu_update2_tr;" + "DROP TRIGGER IF EXISTS temp.rbu_delete_tr;" + , 0, 0, &p->zErrmsg + ); + } + + if( rc==SQLITE_OK ){ + if( pIter->bCleanup ){ + rbuObjIterFreeCols(pIter); + pIter->bCleanup = 0; + rc = sqlite3_step(pIter->pTblIter); + if( rc!=SQLITE_ROW ){ + rc = resetAndCollectError(pIter->pTblIter, &p->zErrmsg); + pIter->zTbl = 0; + pIter->zDataTbl = 0; + }else{ + pIter->zTbl = (const char*)sqlite3_column_text(pIter->pTblIter, 0); + pIter->zDataTbl = (const char*)sqlite3_column_text(pIter->pTblIter,1); + rc = (pIter->zDataTbl && pIter->zTbl) ? SQLITE_OK : SQLITE_NOMEM; + } + }else{ + if( pIter->zIdx==0 ){ + sqlite3_stmt *pIdx = pIter->pIdxIter; + rc = sqlite3_bind_text(pIdx, 1, pIter->zTbl, -1, SQLITE_STATIC); + } + if( rc==SQLITE_OK ){ + rc = sqlite3_step(pIter->pIdxIter); + if( rc!=SQLITE_ROW ){ + rc = resetAndCollectError(pIter->pIdxIter, &p->zErrmsg); + pIter->bCleanup = 1; + pIter->zIdx = 0; + }else{ + pIter->zIdx = (const char*)sqlite3_column_text(pIter->pIdxIter, 0); + pIter->iTnum = sqlite3_column_int(pIter->pIdxIter, 1); + pIter->bUnique = sqlite3_column_int(pIter->pIdxIter, 2); + rc = pIter->zIdx ? SQLITE_OK : SQLITE_NOMEM; + } + } + } + } + } + + if( rc!=SQLITE_OK ){ + rbuObjIterFinalize(pIter); + p->rc = rc; + } + return rc; +} + + +/* +** The implementation of the rbu_target_name() SQL function. This function +** accepts one or two arguments. The first argument is the name of a table - +** the name of a table in the RBU database. The second, if it is present, is 1 +** for a view or 0 for a table. +** +** For a non-vacuum RBU handle, if the table name matches the pattern: +** +** data[0-9]_ +** +** where is any sequence of 1 or more characters, is returned. +** Otherwise, if the only argument does not match the above pattern, an SQL +** NULL is returned. +** +** "data_t1" -> "t1" +** "data0123_t2" -> "t2" +** "dataAB_t3" -> NULL +** +** For an rbu vacuum handle, a copy of the first argument is returned if +** the second argument is either missing or 0 (not a view). +*/ +static void rbuTargetNameFunc( + sqlite3_context *pCtx, + int argc, + sqlite3_value **argv +){ + sqlite3rbu *p = sqlite3_user_data(pCtx); + const char *zIn; + assert( argc==1 || argc==2 ); + + zIn = (const char*)sqlite3_value_text(argv[0]); + if( zIn ){ + if( rbuIsVacuum(p) ){ + assert( argc==2 || argc==1 ); + if( argc==1 || 0==sqlite3_value_int(argv[1]) ){ + sqlite3_result_text(pCtx, zIn, -1, SQLITE_STATIC); + } + }else{ + if( strlen(zIn)>4 && memcmp("data", zIn, 4)==0 ){ + int i; + for(i=4; zIn[i]>='0' && zIn[i]<='9'; i++); + if( zIn[i]=='_' && zIn[i+1] ){ + sqlite3_result_text(pCtx, &zIn[i+1], -1, SQLITE_STATIC); + } + } + } + } +} + +/* +** Initialize the iterator structure passed as the second argument. +** +** If no error occurs, SQLITE_OK is returned and the iterator is left +** pointing to the first entry. Otherwise, an error code and message is +** left in the RBU handle passed as the first argument. A copy of the +** error code is returned. +*/ +static int rbuObjIterFirst(sqlite3rbu *p, RbuObjIter *pIter){ + int rc; + memset(pIter, 0, sizeof(RbuObjIter)); + + rc = prepareFreeAndCollectError(p->dbRbu, &pIter->pTblIter, &p->zErrmsg, + sqlite3_mprintf( + "SELECT rbu_target_name(name, type='view') AS target, name " + "FROM sqlite_schema " + "WHERE type IN ('table', 'view') AND target IS NOT NULL " + " %s " + "ORDER BY name" + , rbuIsVacuum(p) ? "AND rootpage!=0 AND rootpage IS NOT NULL" : "")); + + if( rc==SQLITE_OK ){ + rc = prepareAndCollectError(p->dbMain, &pIter->pIdxIter, &p->zErrmsg, + "SELECT name, rootpage, sql IS NULL OR substr(8, 6)=='UNIQUE' " + " FROM main.sqlite_schema " + " WHERE type='index' AND tbl_name = ?" + ); + } + + pIter->bCleanup = 1; + p->rc = rc; + return rbuObjIterNext(p, pIter); +} + +/* +** This is a wrapper around "sqlite3_mprintf(zFmt, ...)". If an OOM occurs, +** an error code is stored in the RBU handle passed as the first argument. +** +** If an error has already occurred (p->rc is already set to something other +** than SQLITE_OK), then this function returns NULL without modifying the +** stored error code. In this case it still calls sqlite3_free() on any +** printf() parameters associated with %z conversions. +*/ +static char *rbuMPrintf(sqlite3rbu *p, const char *zFmt, ...){ + char *zSql = 0; + va_list ap; + va_start(ap, zFmt); + zSql = sqlite3_vmprintf(zFmt, ap); + if( p->rc==SQLITE_OK ){ + if( zSql==0 ) p->rc = SQLITE_NOMEM; + }else{ + sqlite3_free(zSql); + zSql = 0; + } + va_end(ap); + return zSql; +} + +/* +** Argument zFmt is a sqlite3_mprintf() style format string. The trailing +** arguments are the usual subsitution values. This function performs +** the printf() style substitutions and executes the result as an SQL +** statement on the RBU handles database. +** +** If an error occurs, an error code and error message is stored in the +** RBU handle. If an error has already occurred when this function is +** called, it is a no-op. +*/ +static int rbuMPrintfExec(sqlite3rbu *p, sqlite3 *db, const char *zFmt, ...){ + va_list ap; + char *zSql; + va_start(ap, zFmt); + zSql = sqlite3_vmprintf(zFmt, ap); + if( p->rc==SQLITE_OK ){ + if( zSql==0 ){ + p->rc = SQLITE_NOMEM; + }else{ + p->rc = sqlite3_exec(db, zSql, 0, 0, &p->zErrmsg); + } + } + sqlite3_free(zSql); + va_end(ap); + return p->rc; +} + +/* +** Attempt to allocate and return a pointer to a zeroed block of nByte +** bytes. +** +** If an error (i.e. an OOM condition) occurs, return NULL and leave an +** error code in the rbu handle passed as the first argument. Or, if an +** error has already occurred when this function is called, return NULL +** immediately without attempting the allocation or modifying the stored +** error code. +*/ +static void *rbuMalloc(sqlite3rbu *p, sqlite3_int64 nByte){ + void *pRet = 0; + if( p->rc==SQLITE_OK ){ + assert( nByte>0 ); + pRet = sqlite3_malloc64(nByte); + if( pRet==0 ){ + p->rc = SQLITE_NOMEM; + }else{ + memset(pRet, 0, nByte); + } + } + return pRet; +} + + +/* +** Allocate and zero the pIter->azTblCol[] and abTblPk[] arrays so that +** there is room for at least nCol elements. If an OOM occurs, store an +** error code in the RBU handle passed as the first argument. +*/ +static void rbuAllocateIterArrays(sqlite3rbu *p, RbuObjIter *pIter, int nCol){ + sqlite3_int64 nByte = (2*sizeof(char*) + sizeof(int) + 3*sizeof(u8)) * nCol; + char **azNew; + + azNew = (char**)rbuMalloc(p, nByte); + if( azNew ){ + pIter->azTblCol = azNew; + pIter->azTblType = &azNew[nCol]; + pIter->aiSrcOrder = (int*)&pIter->azTblType[nCol]; + pIter->abTblPk = (u8*)&pIter->aiSrcOrder[nCol]; + pIter->abNotNull = (u8*)&pIter->abTblPk[nCol]; + pIter->abIndexed = (u8*)&pIter->abNotNull[nCol]; + } +} + +/* +** The first argument must be a nul-terminated string. This function +** returns a copy of the string in memory obtained from sqlite3_malloc(). +** It is the responsibility of the caller to eventually free this memory +** using sqlite3_free(). +** +** If an OOM condition is encountered when attempting to allocate memory, +** output variable (*pRc) is set to SQLITE_NOMEM before returning. Otherwise, +** if the allocation succeeds, (*pRc) is left unchanged. +*/ +static char *rbuStrndup(const char *zStr, int *pRc){ + char *zRet = 0; + + if( *pRc==SQLITE_OK ){ + if( zStr ){ + size_t nCopy = strlen(zStr) + 1; + zRet = (char*)sqlite3_malloc64(nCopy); + if( zRet ){ + memcpy(zRet, zStr, nCopy); + }else{ + *pRc = SQLITE_NOMEM; + } + } + } + + return zRet; +} + +/* +** Finalize the statement passed as the second argument. +** +** If the sqlite3_finalize() call indicates that an error occurs, and the +** rbu handle error code is not already set, set the error code and error +** message accordingly. +*/ +static void rbuFinalize(sqlite3rbu *p, sqlite3_stmt *pStmt){ + sqlite3 *db = sqlite3_db_handle(pStmt); + int rc = sqlite3_finalize(pStmt); + if( p->rc==SQLITE_OK && rc!=SQLITE_OK ){ + p->rc = rc; + p->zErrmsg = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + } +} + +/* Determine the type of a table. +** +** peType is of type (int*), a pointer to an output parameter of type +** (int). This call sets the output parameter as follows, depending +** on the type of the table specified by parameters dbName and zTbl. +** +** RBU_PK_NOTABLE: No such table. +** RBU_PK_NONE: Table has an implicit rowid. +** RBU_PK_IPK: Table has an explicit IPK column. +** RBU_PK_EXTERNAL: Table has an external PK index. +** RBU_PK_WITHOUT_ROWID: Table is WITHOUT ROWID. +** RBU_PK_VTAB: Table is a virtual table. +** +** Argument *piPk is also of type (int*), and also points to an output +** parameter. Unless the table has an external primary key index +** (i.e. unless *peType is set to 3), then *piPk is set to zero. Or, +** if the table does have an external primary key index, then *piPk +** is set to the root page number of the primary key index before +** returning. +** +** ALGORITHM: +** +** if( no entry exists in sqlite_schema ){ +** return RBU_PK_NOTABLE +** }else if( sql for the entry starts with "CREATE VIRTUAL" ){ +** return RBU_PK_VTAB +** }else if( "PRAGMA index_list()" for the table contains a "pk" index ){ +** if( the index that is the pk exists in sqlite_schema ){ +** *piPK = rootpage of that index. +** return RBU_PK_EXTERNAL +** }else{ +** return RBU_PK_WITHOUT_ROWID +** } +** }else if( "PRAGMA table_info()" lists one or more "pk" columns ){ +** return RBU_PK_IPK +** }else{ +** return RBU_PK_NONE +** } +*/ +static void rbuTableType( + sqlite3rbu *p, + const char *zTab, + int *peType, + int *piTnum, + int *piPk +){ + /* + ** 0) SELECT count(*) FROM sqlite_schema where name=%Q AND IsVirtual(%Q) + ** 1) PRAGMA index_list = ? + ** 2) SELECT count(*) FROM sqlite_schema where name=%Q + ** 3) PRAGMA table_info = ? + */ + sqlite3_stmt *aStmt[4] = {0, 0, 0, 0}; + + *peType = RBU_PK_NOTABLE; + *piPk = 0; + + assert( p->rc==SQLITE_OK ); + p->rc = prepareFreeAndCollectError(p->dbMain, &aStmt[0], &p->zErrmsg, + sqlite3_mprintf( + "SELECT " + " (sql COLLATE nocase BETWEEN 'CREATE VIRTUAL' AND 'CREATE VIRTUAM')," + " rootpage" + " FROM sqlite_schema" + " WHERE name=%Q", zTab + )); + if( p->rc!=SQLITE_OK || sqlite3_step(aStmt[0])!=SQLITE_ROW ){ + /* Either an error, or no such table. */ + goto rbuTableType_end; + } + if( sqlite3_column_int(aStmt[0], 0) ){ + *peType = RBU_PK_VTAB; /* virtual table */ + goto rbuTableType_end; + } + *piTnum = sqlite3_column_int(aStmt[0], 1); + + p->rc = prepareFreeAndCollectError(p->dbMain, &aStmt[1], &p->zErrmsg, + sqlite3_mprintf("PRAGMA index_list=%Q",zTab) + ); + if( p->rc ) goto rbuTableType_end; + while( sqlite3_step(aStmt[1])==SQLITE_ROW ){ + const u8 *zOrig = sqlite3_column_text(aStmt[1], 3); + const u8 *zIdx = sqlite3_column_text(aStmt[1], 1); + if( zOrig && zIdx && zOrig[0]=='p' ){ + p->rc = prepareFreeAndCollectError(p->dbMain, &aStmt[2], &p->zErrmsg, + sqlite3_mprintf( + "SELECT rootpage FROM sqlite_schema WHERE name = %Q", zIdx + )); + if( p->rc==SQLITE_OK ){ + if( sqlite3_step(aStmt[2])==SQLITE_ROW ){ + *piPk = sqlite3_column_int(aStmt[2], 0); + *peType = RBU_PK_EXTERNAL; + }else{ + *peType = RBU_PK_WITHOUT_ROWID; + } + } + goto rbuTableType_end; + } + } + + p->rc = prepareFreeAndCollectError(p->dbMain, &aStmt[3], &p->zErrmsg, + sqlite3_mprintf("PRAGMA table_info=%Q",zTab) + ); + if( p->rc==SQLITE_OK ){ + while( sqlite3_step(aStmt[3])==SQLITE_ROW ){ + if( sqlite3_column_int(aStmt[3],5)>0 ){ + *peType = RBU_PK_IPK; /* explicit IPK column */ + goto rbuTableType_end; + } + } + *peType = RBU_PK_NONE; + } + +rbuTableType_end: { + unsigned int i; + for(i=0; iabIndexed[] array. +*/ +static void rbuObjIterCacheIndexedCols(sqlite3rbu *p, RbuObjIter *pIter){ + sqlite3_stmt *pList = 0; + int bIndex = 0; + + if( p->rc==SQLITE_OK ){ + memcpy(pIter->abIndexed, pIter->abTblPk, sizeof(u8)*pIter->nTblCol); + p->rc = prepareFreeAndCollectError(p->dbMain, &pList, &p->zErrmsg, + sqlite3_mprintf("PRAGMA main.index_list = %Q", pIter->zTbl) + ); + } + + pIter->nIndex = 0; + while( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pList) ){ + const char *zIdx = (const char*)sqlite3_column_text(pList, 1); + int bPartial = sqlite3_column_int(pList, 4); + sqlite3_stmt *pXInfo = 0; + if( zIdx==0 ) break; + if( bPartial ){ + memset(pIter->abIndexed, 0x01, sizeof(u8)*pIter->nTblCol); + } + p->rc = prepareFreeAndCollectError(p->dbMain, &pXInfo, &p->zErrmsg, + sqlite3_mprintf("PRAGMA main.index_xinfo = %Q", zIdx) + ); + while( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pXInfo) ){ + int iCid = sqlite3_column_int(pXInfo, 1); + if( iCid>=0 ) pIter->abIndexed[iCid] = 1; + if( iCid==-2 ){ + memset(pIter->abIndexed, 0x01, sizeof(u8)*pIter->nTblCol); + } + } + rbuFinalize(p, pXInfo); + bIndex = 1; + pIter->nIndex++; + } + + if( pIter->eType==RBU_PK_WITHOUT_ROWID ){ + /* "PRAGMA index_list" includes the main PK b-tree */ + pIter->nIndex--; + } + + rbuFinalize(p, pList); + if( bIndex==0 ) pIter->abIndexed = 0; +} + + +/* +** If they are not already populated, populate the pIter->azTblCol[], +** pIter->abTblPk[], pIter->nTblCol and pIter->bRowid variables according to +** the table (not index) that the iterator currently points to. +** +** Return SQLITE_OK if successful, or an SQLite error code otherwise. If +** an error does occur, an error code and error message are also left in +** the RBU handle. +*/ +static int rbuObjIterCacheTableInfo(sqlite3rbu *p, RbuObjIter *pIter){ + if( pIter->azTblCol==0 ){ + sqlite3_stmt *pStmt = 0; + int nCol = 0; + int i; /* for() loop iterator variable */ + int bRbuRowid = 0; /* If input table has column "rbu_rowid" */ + int iOrder = 0; + int iTnum = 0; + + /* Figure out the type of table this step will deal with. */ + assert( pIter->eType==0 ); + rbuTableType(p, pIter->zTbl, &pIter->eType, &iTnum, &pIter->iPkTnum); + if( p->rc==SQLITE_OK && pIter->eType==RBU_PK_NOTABLE ){ + p->rc = SQLITE_ERROR; + p->zErrmsg = sqlite3_mprintf("no such table: %s", pIter->zTbl); + } + if( p->rc ) return p->rc; + if( pIter->zIdx==0 ) pIter->iTnum = iTnum; + + assert( pIter->eType==RBU_PK_NONE || pIter->eType==RBU_PK_IPK + || pIter->eType==RBU_PK_EXTERNAL || pIter->eType==RBU_PK_WITHOUT_ROWID + || pIter->eType==RBU_PK_VTAB + ); + + /* Populate the azTblCol[] and nTblCol variables based on the columns + ** of the input table. Ignore any input table columns that begin with + ** "rbu_". */ + p->rc = prepareFreeAndCollectError(p->dbRbu, &pStmt, &p->zErrmsg, + sqlite3_mprintf("SELECT * FROM '%q'", pIter->zDataTbl) + ); + if( p->rc==SQLITE_OK ){ + nCol = sqlite3_column_count(pStmt); + rbuAllocateIterArrays(p, pIter, nCol); + } + for(i=0; p->rc==SQLITE_OK && irc); + pIter->aiSrcOrder[pIter->nTblCol] = pIter->nTblCol; + pIter->azTblCol[pIter->nTblCol++] = zCopy; + } + else if( 0==sqlite3_stricmp("rbu_rowid", zName) ){ + bRbuRowid = 1; + } + } + sqlite3_finalize(pStmt); + pStmt = 0; + + if( p->rc==SQLITE_OK + && rbuIsVacuum(p)==0 + && bRbuRowid!=(pIter->eType==RBU_PK_VTAB || pIter->eType==RBU_PK_NONE) + ){ + p->rc = SQLITE_ERROR; + p->zErrmsg = sqlite3_mprintf( + "table %q %s rbu_rowid column", pIter->zDataTbl, + (bRbuRowid ? "may not have" : "requires") + ); + } + + /* Check that all non-HIDDEN columns in the destination table are also + ** present in the input table. Populate the abTblPk[], azTblType[] and + ** aiTblOrder[] arrays at the same time. */ + if( p->rc==SQLITE_OK ){ + p->rc = prepareFreeAndCollectError(p->dbMain, &pStmt, &p->zErrmsg, + sqlite3_mprintf("PRAGMA table_info(%Q)", pIter->zTbl) + ); + } + while( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){ + const char *zName = (const char*)sqlite3_column_text(pStmt, 1); + if( zName==0 ) break; /* An OOM - finalize() below returns S_NOMEM */ + for(i=iOrder; inTblCol; i++){ + if( 0==strcmp(zName, pIter->azTblCol[i]) ) break; + } + if( i==pIter->nTblCol ){ + p->rc = SQLITE_ERROR; + p->zErrmsg = sqlite3_mprintf("column missing from %q: %s", + pIter->zDataTbl, zName + ); + }else{ + int iPk = sqlite3_column_int(pStmt, 5); + int bNotNull = sqlite3_column_int(pStmt, 3); + const char *zType = (const char*)sqlite3_column_text(pStmt, 2); + + if( i!=iOrder ){ + SWAP(int, pIter->aiSrcOrder[i], pIter->aiSrcOrder[iOrder]); + SWAP(char*, pIter->azTblCol[i], pIter->azTblCol[iOrder]); + } + + pIter->azTblType[iOrder] = rbuStrndup(zType, &p->rc); + assert( iPk>=0 ); + pIter->abTblPk[iOrder] = (u8)iPk; + pIter->abNotNull[iOrder] = (u8)bNotNull || (iPk!=0); + iOrder++; + } + } + + rbuFinalize(p, pStmt); + rbuObjIterCacheIndexedCols(p, pIter); + assert( pIter->eType!=RBU_PK_VTAB || pIter->abIndexed==0 ); + assert( pIter->eType!=RBU_PK_VTAB || pIter->nIndex==0 ); + } + + return p->rc; +} + +/* +** This function constructs and returns a pointer to a nul-terminated +** string containing some SQL clause or list based on one or more of the +** column names currently stored in the pIter->azTblCol[] array. +*/ +static char *rbuObjIterGetCollist( + sqlite3rbu *p, /* RBU object */ + RbuObjIter *pIter /* Object iterator for column names */ +){ + char *zList = 0; + const char *zSep = ""; + int i; + for(i=0; inTblCol; i++){ + const char *z = pIter->azTblCol[i]; + zList = rbuMPrintf(p, "%z%s\"%w\"", zList, zSep, z); + zSep = ", "; + } + return zList; +} + +/* +** Return a comma separated list of the quoted PRIMARY KEY column names, +** in order, for the current table. Before each column name, add the text +** zPre. After each column name, add the zPost text. Use zSeparator as +** the separator text (usually ", "). +*/ +static char *rbuObjIterGetPkList( + sqlite3rbu *p, /* RBU object */ + RbuObjIter *pIter, /* Object iterator for column names */ + const char *zPre, /* Before each quoted column name */ + const char *zSeparator, /* Separator to use between columns */ + const char *zPost /* After each quoted column name */ +){ + int iPk = 1; + char *zRet = 0; + const char *zSep = ""; + while( 1 ){ + int i; + for(i=0; inTblCol; i++){ + if( (int)pIter->abTblPk[i]==iPk ){ + const char *zCol = pIter->azTblCol[i]; + zRet = rbuMPrintf(p, "%z%s%s\"%w\"%s", zRet, zSep, zPre, zCol, zPost); + zSep = zSeparator; + break; + } + } + if( i==pIter->nTblCol ) break; + iPk++; + } + return zRet; +} + +/* +** This function is called as part of restarting an RBU vacuum within +** stage 1 of the process (while the *-oal file is being built) while +** updating a table (not an index). The table may be a rowid table or +** a WITHOUT ROWID table. It queries the target database to find the +** largest key that has already been written to the target table and +** constructs a WHERE clause that can be used to extract the remaining +** rows from the source table. For a rowid table, the WHERE clause +** is of the form: +** +** "WHERE _rowid_ > ?" +** +** and for WITHOUT ROWID tables: +** +** "WHERE (key1, key2) > (?, ?)" +** +** Instead of "?" placeholders, the actual WHERE clauses created by +** this function contain literal SQL values. +*/ +static char *rbuVacuumTableStart( + sqlite3rbu *p, /* RBU handle */ + RbuObjIter *pIter, /* RBU iterator object */ + int bRowid, /* True for a rowid table */ + const char *zWrite /* Target table name prefix */ +){ + sqlite3_stmt *pMax = 0; + char *zRet = 0; + if( bRowid ){ + p->rc = prepareFreeAndCollectError(p->dbMain, &pMax, &p->zErrmsg, + sqlite3_mprintf( + "SELECT max(_rowid_) FROM \"%s%w\"", zWrite, pIter->zTbl + ) + ); + if( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pMax) ){ + sqlite3_int64 iMax = sqlite3_column_int64(pMax, 0); + zRet = rbuMPrintf(p, " WHERE _rowid_ > %lld ", iMax); + } + rbuFinalize(p, pMax); + }else{ + char *zOrder = rbuObjIterGetPkList(p, pIter, "", ", ", " DESC"); + char *zSelect = rbuObjIterGetPkList(p, pIter, "quote(", "||','||", ")"); + char *zList = rbuObjIterGetPkList(p, pIter, "", ", ", ""); + + if( p->rc==SQLITE_OK ){ + p->rc = prepareFreeAndCollectError(p->dbMain, &pMax, &p->zErrmsg, + sqlite3_mprintf( + "SELECT %s FROM \"%s%w\" ORDER BY %s LIMIT 1", + zSelect, zWrite, pIter->zTbl, zOrder + ) + ); + if( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pMax) ){ + const char *zVal = (const char*)sqlite3_column_text(pMax, 0); + zRet = rbuMPrintf(p, " WHERE (%s) > (%s) ", zList, zVal); + } + rbuFinalize(p, pMax); + } + + sqlite3_free(zOrder); + sqlite3_free(zSelect); + sqlite3_free(zList); + } + return zRet; +} + +/* +** This function is called as part of restating an RBU vacuum when the +** current operation is writing content to an index. If possible, it +** queries the target index b-tree for the largest key already written to +** it, then composes and returns an expression that can be used in a WHERE +** clause to select the remaining required rows from the source table. +** It is only possible to return such an expression if: +** +** * The index contains no DESC columns, and +** * The last key written to the index before the operation was +** suspended does not contain any NULL values. +** +** The expression is of the form: +** +** (index-field1, index-field2, ...) > (?, ?, ...) +** +** except that the "?" placeholders are replaced with literal values. +** +** If the expression cannot be created, NULL is returned. In this case, +** the caller has to use an OFFSET clause to extract only the required +** rows from the sourct table, just as it does for an RBU update operation. +*/ +static char *rbuVacuumIndexStart( + sqlite3rbu *p, /* RBU handle */ + RbuObjIter *pIter /* RBU iterator object */ +){ + char *zOrder = 0; + char *zLhs = 0; + char *zSelect = 0; + char *zVector = 0; + char *zRet = 0; + int bFailed = 0; + const char *zSep = ""; + int iCol = 0; + sqlite3_stmt *pXInfo = 0; + + p->rc = prepareFreeAndCollectError(p->dbMain, &pXInfo, &p->zErrmsg, + sqlite3_mprintf("PRAGMA main.index_xinfo = %Q", pIter->zIdx) + ); + while( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pXInfo) ){ + int iCid = sqlite3_column_int(pXInfo, 1); + const char *zCollate = (const char*)sqlite3_column_text(pXInfo, 4); + const char *zCol; + if( sqlite3_column_int(pXInfo, 3) ){ + bFailed = 1; + break; + } + + if( iCid<0 ){ + if( pIter->eType==RBU_PK_IPK ){ + int i; + for(i=0; pIter->abTblPk[i]==0; i++); + assert( inTblCol ); + zCol = pIter->azTblCol[i]; + }else{ + zCol = "_rowid_"; + } + }else{ + zCol = pIter->azTblCol[iCid]; + } + + zLhs = rbuMPrintf(p, "%z%s \"%w\" COLLATE %Q", + zLhs, zSep, zCol, zCollate + ); + zOrder = rbuMPrintf(p, "%z%s \"rbu_imp_%d%w\" COLLATE %Q DESC", + zOrder, zSep, iCol, zCol, zCollate + ); + zSelect = rbuMPrintf(p, "%z%s quote(\"rbu_imp_%d%w\")", + zSelect, zSep, iCol, zCol + ); + zSep = ", "; + iCol++; + } + rbuFinalize(p, pXInfo); + if( bFailed ) goto index_start_out; + + if( p->rc==SQLITE_OK ){ + sqlite3_stmt *pSel = 0; + + p->rc = prepareFreeAndCollectError(p->dbMain, &pSel, &p->zErrmsg, + sqlite3_mprintf("SELECT %s FROM \"rbu_imp_%w\" ORDER BY %s LIMIT 1", + zSelect, pIter->zTbl, zOrder + ) + ); + if( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pSel) ){ + zSep = ""; + for(iCol=0; iColnCol; iCol++){ + const char *zQuoted = (const char*)sqlite3_column_text(pSel, iCol); + if( zQuoted==0 ){ + p->rc = SQLITE_NOMEM; + }else if( zQuoted[0]=='N' ){ + bFailed = 1; + break; + } + zVector = rbuMPrintf(p, "%z%s%s", zVector, zSep, zQuoted); + zSep = ", "; + } + + if( !bFailed ){ + zRet = rbuMPrintf(p, "(%s) > (%s)", zLhs, zVector); + } + } + rbuFinalize(p, pSel); + } + + index_start_out: + sqlite3_free(zOrder); + sqlite3_free(zSelect); + sqlite3_free(zVector); + sqlite3_free(zLhs); + return zRet; +} + +/* +** This function is used to create a SELECT list (the list of SQL +** expressions that follows a SELECT keyword) for a SELECT statement +** used to read from an data_xxx or rbu_tmp_xxx table while updating the +** index object currently indicated by the iterator object passed as the +** second argument. A "PRAGMA index_xinfo = " statement is used +** to obtain the required information. +** +** If the index is of the following form: +** +** CREATE INDEX i1 ON t1(c, b COLLATE nocase); +** +** and "t1" is a table with an explicit INTEGER PRIMARY KEY column +** "ipk", the returned string is: +** +** "`c` COLLATE 'BINARY', `b` COLLATE 'NOCASE', `ipk` COLLATE 'BINARY'" +** +** As well as the returned string, three other malloc'd strings are +** returned via output parameters. As follows: +** +** pzImposterCols: ... +** pzImposterPk: ... +** pzWhere: ... +*/ +static char *rbuObjIterGetIndexCols( + sqlite3rbu *p, /* RBU object */ + RbuObjIter *pIter, /* Object iterator for column names */ + char **pzImposterCols, /* OUT: Columns for imposter table */ + char **pzImposterPk, /* OUT: Imposter PK clause */ + char **pzWhere, /* OUT: WHERE clause */ + int *pnBind /* OUT: Trbul number of columns */ +){ + int rc = p->rc; /* Error code */ + int rc2; /* sqlite3_finalize() return code */ + char *zRet = 0; /* String to return */ + char *zImpCols = 0; /* String to return via *pzImposterCols */ + char *zImpPK = 0; /* String to return via *pzImposterPK */ + char *zWhere = 0; /* String to return via *pzWhere */ + int nBind = 0; /* Value to return via *pnBind */ + const char *zCom = ""; /* Set to ", " later on */ + const char *zAnd = ""; /* Set to " AND " later on */ + sqlite3_stmt *pXInfo = 0; /* PRAGMA index_xinfo = ? */ + + if( rc==SQLITE_OK ){ + assert( p->zErrmsg==0 ); + rc = prepareFreeAndCollectError(p->dbMain, &pXInfo, &p->zErrmsg, + sqlite3_mprintf("PRAGMA main.index_xinfo = %Q", pIter->zIdx) + ); + } + + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pXInfo) ){ + int iCid = sqlite3_column_int(pXInfo, 1); + int bDesc = sqlite3_column_int(pXInfo, 3); + const char *zCollate = (const char*)sqlite3_column_text(pXInfo, 4); + const char *zCol = 0; + const char *zType; + + if( iCid==-2 ){ + int iSeq = sqlite3_column_int(pXInfo, 0); + zRet = sqlite3_mprintf("%z%s(%.*s) COLLATE %Q", zRet, zCom, + pIter->aIdxCol[iSeq].nSpan, pIter->aIdxCol[iSeq].zSpan, zCollate + ); + zType = ""; + }else { + if( iCid<0 ){ + /* An integer primary key. If the table has an explicit IPK, use + ** its name. Otherwise, use "rbu_rowid". */ + if( pIter->eType==RBU_PK_IPK ){ + int i; + for(i=0; pIter->abTblPk[i]==0; i++); + assert( inTblCol ); + zCol = pIter->azTblCol[i]; + }else if( rbuIsVacuum(p) ){ + zCol = "_rowid_"; + }else{ + zCol = "rbu_rowid"; + } + zType = "INTEGER"; + }else{ + zCol = pIter->azTblCol[iCid]; + zType = pIter->azTblType[iCid]; + } + zRet = sqlite3_mprintf("%z%s\"%w\" COLLATE %Q", zRet, zCom,zCol,zCollate); + } + + if( pIter->bUnique==0 || sqlite3_column_int(pXInfo, 5) ){ + const char *zOrder = (bDesc ? " DESC" : ""); + zImpPK = sqlite3_mprintf("%z%s\"rbu_imp_%d%w\"%s", + zImpPK, zCom, nBind, zCol, zOrder + ); + } + zImpCols = sqlite3_mprintf("%z%s\"rbu_imp_%d%w\" %s COLLATE %Q", + zImpCols, zCom, nBind, zCol, zType, zCollate + ); + zWhere = sqlite3_mprintf( + "%z%s\"rbu_imp_%d%w\" IS ?", zWhere, zAnd, nBind, zCol + ); + if( zRet==0 || zImpPK==0 || zImpCols==0 || zWhere==0 ) rc = SQLITE_NOMEM; + zCom = ", "; + zAnd = " AND "; + nBind++; + } + + rc2 = sqlite3_finalize(pXInfo); + if( rc==SQLITE_OK ) rc = rc2; + + if( rc!=SQLITE_OK ){ + sqlite3_free(zRet); + sqlite3_free(zImpCols); + sqlite3_free(zImpPK); + sqlite3_free(zWhere); + zRet = 0; + zImpCols = 0; + zImpPK = 0; + zWhere = 0; + p->rc = rc; + } + + *pzImposterCols = zImpCols; + *pzImposterPk = zImpPK; + *pzWhere = zWhere; + *pnBind = nBind; + return zRet; +} + +/* +** Assuming the current table columns are "a", "b" and "c", and the zObj +** paramter is passed "old", return a string of the form: +** +** "old.a, old.b, old.b" +** +** With the column names escaped. +** +** For tables with implicit rowids - RBU_PK_EXTERNAL and RBU_PK_NONE, append +** the text ", old._rowid_" to the returned value. +*/ +static char *rbuObjIterGetOldlist( + sqlite3rbu *p, + RbuObjIter *pIter, + const char *zObj +){ + char *zList = 0; + if( p->rc==SQLITE_OK && pIter->abIndexed ){ + const char *zS = ""; + int i; + for(i=0; inTblCol; i++){ + if( pIter->abIndexed[i] ){ + const char *zCol = pIter->azTblCol[i]; + zList = sqlite3_mprintf("%z%s%s.\"%w\"", zList, zS, zObj, zCol); + }else{ + zList = sqlite3_mprintf("%z%sNULL", zList, zS); + } + zS = ", "; + if( zList==0 ){ + p->rc = SQLITE_NOMEM; + break; + } + } + + /* For a table with implicit rowids, append "old._rowid_" to the list. */ + if( pIter->eType==RBU_PK_EXTERNAL || pIter->eType==RBU_PK_NONE ){ + zList = rbuMPrintf(p, "%z, %s._rowid_", zList, zObj); + } + } + return zList; +} + +/* +** Return an expression that can be used in a WHERE clause to match the +** primary key of the current table. For example, if the table is: +** +** CREATE TABLE t1(a, b, c, PRIMARY KEY(b, c)); +** +** Return the string: +** +** "b = ?1 AND c = ?2" +*/ +static char *rbuObjIterGetWhere( + sqlite3rbu *p, + RbuObjIter *pIter +){ + char *zList = 0; + if( pIter->eType==RBU_PK_VTAB || pIter->eType==RBU_PK_NONE ){ + zList = rbuMPrintf(p, "_rowid_ = ?%d", pIter->nTblCol+1); + }else if( pIter->eType==RBU_PK_EXTERNAL ){ + const char *zSep = ""; + int i; + for(i=0; inTblCol; i++){ + if( pIter->abTblPk[i] ){ + zList = rbuMPrintf(p, "%z%sc%d=?%d", zList, zSep, i, i+1); + zSep = " AND "; + } + } + zList = rbuMPrintf(p, + "_rowid_ = (SELECT id FROM rbu_imposter2 WHERE %z)", zList + ); + + }else{ + const char *zSep = ""; + int i; + for(i=0; inTblCol; i++){ + if( pIter->abTblPk[i] ){ + const char *zCol = pIter->azTblCol[i]; + zList = rbuMPrintf(p, "%z%s\"%w\"=?%d", zList, zSep, zCol, i+1); + zSep = " AND "; + } + } + } + return zList; +} + +/* +** The SELECT statement iterating through the keys for the current object +** (p->objiter.pSelect) currently points to a valid row. However, there +** is something wrong with the rbu_control value in the rbu_control value +** stored in the (p->nCol+1)'th column. Set the error code and error message +** of the RBU handle to something reflecting this. +*/ +static void rbuBadControlError(sqlite3rbu *p){ + p->rc = SQLITE_ERROR; + p->zErrmsg = sqlite3_mprintf("invalid rbu_control value"); +} + + +/* +** Return a nul-terminated string containing the comma separated list of +** assignments that should be included following the "SET" keyword of +** an UPDATE statement used to update the table object that the iterator +** passed as the second argument currently points to if the rbu_control +** column of the data_xxx table entry is set to zMask. +** +** The memory for the returned string is obtained from sqlite3_malloc(). +** It is the responsibility of the caller to eventually free it using +** sqlite3_free(). +** +** If an OOM error is encountered when allocating space for the new +** string, an error code is left in the rbu handle passed as the first +** argument and NULL is returned. Or, if an error has already occurred +** when this function is called, NULL is returned immediately, without +** attempting the allocation or modifying the stored error code. +*/ +static char *rbuObjIterGetSetlist( + sqlite3rbu *p, + RbuObjIter *pIter, + const char *zMask +){ + char *zList = 0; + if( p->rc==SQLITE_OK ){ + int i; + + if( (int)strlen(zMask)!=pIter->nTblCol ){ + rbuBadControlError(p); + }else{ + const char *zSep = ""; + for(i=0; inTblCol; i++){ + char c = zMask[pIter->aiSrcOrder[i]]; + if( c=='x' ){ + zList = rbuMPrintf(p, "%z%s\"%w\"=?%d", + zList, zSep, pIter->azTblCol[i], i+1 + ); + zSep = ", "; + } + else if( c=='d' ){ + zList = rbuMPrintf(p, "%z%s\"%w\"=rbu_delta(\"%w\", ?%d)", + zList, zSep, pIter->azTblCol[i], pIter->azTblCol[i], i+1 + ); + zSep = ", "; + } + else if( c=='f' ){ + zList = rbuMPrintf(p, "%z%s\"%w\"=rbu_fossil_delta(\"%w\", ?%d)", + zList, zSep, pIter->azTblCol[i], pIter->azTblCol[i], i+1 + ); + zSep = ", "; + } + } + } + } + return zList; +} + +/* +** Return a nul-terminated string consisting of nByte comma separated +** "?" expressions. For example, if nByte is 3, return a pointer to +** a buffer containing the string "?,?,?". +** +** The memory for the returned string is obtained from sqlite3_malloc(). +** It is the responsibility of the caller to eventually free it using +** sqlite3_free(). +** +** If an OOM error is encountered when allocating space for the new +** string, an error code is left in the rbu handle passed as the first +** argument and NULL is returned. Or, if an error has already occurred +** when this function is called, NULL is returned immediately, without +** attempting the allocation or modifying the stored error code. +*/ +static char *rbuObjIterGetBindlist(sqlite3rbu *p, int nBind){ + char *zRet = 0; + sqlite3_int64 nByte = 2*(sqlite3_int64)nBind + 1; + + zRet = (char*)rbuMalloc(p, nByte); + if( zRet ){ + int i; + for(i=0; izIdx==0 ); + if( p->rc==SQLITE_OK ){ + const char *zSep = "PRIMARY KEY("; + sqlite3_stmt *pXList = 0; /* PRAGMA index_list = (pIter->zTbl) */ + sqlite3_stmt *pXInfo = 0; /* PRAGMA index_xinfo = */ + + p->rc = prepareFreeAndCollectError(p->dbMain, &pXList, &p->zErrmsg, + sqlite3_mprintf("PRAGMA main.index_list = %Q", pIter->zTbl) + ); + while( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pXList) ){ + const char *zOrig = (const char*)sqlite3_column_text(pXList,3); + if( zOrig && strcmp(zOrig, "pk")==0 ){ + const char *zIdx = (const char*)sqlite3_column_text(pXList,1); + if( zIdx ){ + p->rc = prepareFreeAndCollectError(p->dbMain, &pXInfo, &p->zErrmsg, + sqlite3_mprintf("PRAGMA main.index_xinfo = %Q", zIdx) + ); + } + break; + } + } + rbuFinalize(p, pXList); + + while( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pXInfo) ){ + if( sqlite3_column_int(pXInfo, 5) ){ + /* int iCid = sqlite3_column_int(pXInfo, 0); */ + const char *zCol = (const char*)sqlite3_column_text(pXInfo, 2); + const char *zDesc = sqlite3_column_int(pXInfo, 3) ? " DESC" : ""; + z = rbuMPrintf(p, "%z%s\"%w\"%s", z, zSep, zCol, zDesc); + zSep = ", "; + } + } + z = rbuMPrintf(p, "%z)", z); + rbuFinalize(p, pXInfo); + } + return z; +} + +/* +** This function creates the second imposter table used when writing to +** a table b-tree where the table has an external primary key. If the +** iterator passed as the second argument does not currently point to +** a table (not index) with an external primary key, this function is a +** no-op. +** +** Assuming the iterator does point to a table with an external PK, this +** function creates a WITHOUT ROWID imposter table named "rbu_imposter2" +** used to access that PK index. For example, if the target table is +** declared as follows: +** +** CREATE TABLE t1(a, b TEXT, c REAL, PRIMARY KEY(b, c)); +** +** then the imposter table schema is: +** +** CREATE TABLE rbu_imposter2(c1 TEXT, c2 REAL, id INTEGER) WITHOUT ROWID; +** +*/ +static void rbuCreateImposterTable2(sqlite3rbu *p, RbuObjIter *pIter){ + if( p->rc==SQLITE_OK && pIter->eType==RBU_PK_EXTERNAL ){ + int tnum = pIter->iPkTnum; /* Root page of PK index */ + sqlite3_stmt *pQuery = 0; /* SELECT name ... WHERE rootpage = $tnum */ + const char *zIdx = 0; /* Name of PK index */ + sqlite3_stmt *pXInfo = 0; /* PRAGMA main.index_xinfo = $zIdx */ + const char *zComma = ""; + char *zCols = 0; /* Used to build up list of table cols */ + char *zPk = 0; /* Used to build up table PK declaration */ + + /* Figure out the name of the primary key index for the current table. + ** This is needed for the argument to "PRAGMA index_xinfo". Set + ** zIdx to point to a nul-terminated string containing this name. */ + p->rc = prepareAndCollectError(p->dbMain, &pQuery, &p->zErrmsg, + "SELECT name FROM sqlite_schema WHERE rootpage = ?" + ); + if( p->rc==SQLITE_OK ){ + sqlite3_bind_int(pQuery, 1, tnum); + if( SQLITE_ROW==sqlite3_step(pQuery) ){ + zIdx = (const char*)sqlite3_column_text(pQuery, 0); + } + } + if( zIdx ){ + p->rc = prepareFreeAndCollectError(p->dbMain, &pXInfo, &p->zErrmsg, + sqlite3_mprintf("PRAGMA main.index_xinfo = %Q", zIdx) + ); + } + rbuFinalize(p, pQuery); + + while( p->rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pXInfo) ){ + int bKey = sqlite3_column_int(pXInfo, 5); + if( bKey ){ + int iCid = sqlite3_column_int(pXInfo, 1); + int bDesc = sqlite3_column_int(pXInfo, 3); + const char *zCollate = (const char*)sqlite3_column_text(pXInfo, 4); + zCols = rbuMPrintf(p, "%z%sc%d %s COLLATE %Q", zCols, zComma, + iCid, pIter->azTblType[iCid], zCollate + ); + zPk = rbuMPrintf(p, "%z%sc%d%s", zPk, zComma, iCid, bDesc?" DESC":""); + zComma = ", "; + } + } + zCols = rbuMPrintf(p, "%z, id INTEGER", zCols); + rbuFinalize(p, pXInfo); + + sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->dbMain, "main", 1, tnum); + rbuMPrintfExec(p, p->dbMain, + "CREATE TABLE rbu_imposter2(%z, PRIMARY KEY(%z)) WITHOUT ROWID", + zCols, zPk + ); + sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->dbMain, "main", 0, 0); + } +} + +/* +** If an error has already occurred when this function is called, it +** immediately returns zero (without doing any work). Or, if an error +** occurs during the execution of this function, it sets the error code +** in the sqlite3rbu object indicated by the first argument and returns +** zero. +** +** The iterator passed as the second argument is guaranteed to point to +** a table (not an index) when this function is called. This function +** attempts to create any imposter table required to write to the main +** table b-tree of the table before returning. Non-zero is returned if +** an imposter table are created, or zero otherwise. +** +** An imposter table is required in all cases except RBU_PK_VTAB. Only +** virtual tables are written to directly. The imposter table has the +** same schema as the actual target table (less any UNIQUE constraints). +** More precisely, the "same schema" means the same columns, types, +** collation sequences. For tables that do not have an external PRIMARY +** KEY, it also means the same PRIMARY KEY declaration. +*/ +static void rbuCreateImposterTable(sqlite3rbu *p, RbuObjIter *pIter){ + if( p->rc==SQLITE_OK && pIter->eType!=RBU_PK_VTAB ){ + int tnum = pIter->iTnum; + const char *zComma = ""; + char *zSql = 0; + int iCol; + sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->dbMain, "main", 0, 1); + + for(iCol=0; p->rc==SQLITE_OK && iColnTblCol; iCol++){ + const char *zPk = ""; + const char *zCol = pIter->azTblCol[iCol]; + const char *zColl = 0; + + p->rc = sqlite3_table_column_metadata( + p->dbMain, "main", pIter->zTbl, zCol, 0, &zColl, 0, 0, 0 + ); + + if( pIter->eType==RBU_PK_IPK && pIter->abTblPk[iCol] ){ + /* If the target table column is an "INTEGER PRIMARY KEY", add + ** "PRIMARY KEY" to the imposter table column declaration. */ + zPk = "PRIMARY KEY "; + } + zSql = rbuMPrintf(p, "%z%s\"%w\" %s %sCOLLATE %Q%s", + zSql, zComma, zCol, pIter->azTblType[iCol], zPk, zColl, + (pIter->abNotNull[iCol] ? " NOT NULL" : "") + ); + zComma = ", "; + } + + if( pIter->eType==RBU_PK_WITHOUT_ROWID ){ + char *zPk = rbuWithoutRowidPK(p, pIter); + if( zPk ){ + zSql = rbuMPrintf(p, "%z, %z", zSql, zPk); + } + } + + sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->dbMain, "main", 1, tnum); + rbuMPrintfExec(p, p->dbMain, "CREATE TABLE \"rbu_imp_%w\"(%z)%s", + pIter->zTbl, zSql, + (pIter->eType==RBU_PK_WITHOUT_ROWID ? " WITHOUT ROWID" : "") + ); + sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->dbMain, "main", 0, 0); + } +} + +/* +** Prepare a statement used to insert rows into the "rbu_tmp_xxx" table. +** Specifically a statement of the form: +** +** INSERT INTO rbu_tmp_xxx VALUES(?, ?, ? ...); +** +** The number of bound variables is equal to the number of columns in +** the target table, plus one (for the rbu_control column), plus one more +** (for the rbu_rowid column) if the target table is an implicit IPK or +** virtual table. +*/ +static void rbuObjIterPrepareTmpInsert( + sqlite3rbu *p, + RbuObjIter *pIter, + const char *zCollist, + const char *zRbuRowid +){ + int bRbuRowid = (pIter->eType==RBU_PK_EXTERNAL || pIter->eType==RBU_PK_NONE); + char *zBind = rbuObjIterGetBindlist(p, pIter->nTblCol + 1 + bRbuRowid); + if( zBind ){ + assert( pIter->pTmpInsert==0 ); + p->rc = prepareFreeAndCollectError( + p->dbRbu, &pIter->pTmpInsert, &p->zErrmsg, sqlite3_mprintf( + "INSERT INTO %s.'rbu_tmp_%q'(rbu_control,%s%s) VALUES(%z)", + p->zStateDb, pIter->zDataTbl, zCollist, zRbuRowid, zBind + )); + } +} + +static void rbuTmpInsertFunc( + sqlite3_context *pCtx, + int nVal, + sqlite3_value **apVal +){ + sqlite3rbu *p = sqlite3_user_data(pCtx); + int rc = SQLITE_OK; + int i; + + assert( sqlite3_value_int(apVal[0])!=0 + || p->objiter.eType==RBU_PK_EXTERNAL + || p->objiter.eType==RBU_PK_NONE + ); + if( sqlite3_value_int(apVal[0])!=0 ){ + p->nPhaseOneStep += p->objiter.nIndex; + } + + for(i=0; rc==SQLITE_OK && iobjiter.pTmpInsert, i+1, apVal[i]); + } + if( rc==SQLITE_OK ){ + sqlite3_step(p->objiter.pTmpInsert); + rc = sqlite3_reset(p->objiter.pTmpInsert); + } + + if( rc!=SQLITE_OK ){ + sqlite3_result_error_code(pCtx, rc); + } +} + +static char *rbuObjIterGetIndexWhere(sqlite3rbu *p, RbuObjIter *pIter){ + sqlite3_stmt *pStmt = 0; + int rc = p->rc; + char *zRet = 0; + + assert( pIter->zIdxSql==0 && pIter->nIdxCol==0 && pIter->aIdxCol==0 ); + + if( rc==SQLITE_OK ){ + rc = prepareAndCollectError(p->dbMain, &pStmt, &p->zErrmsg, + "SELECT trim(sql) FROM sqlite_schema WHERE type='index' AND name=?" + ); + } + if( rc==SQLITE_OK ){ + int rc2; + rc = sqlite3_bind_text(pStmt, 1, pIter->zIdx, -1, SQLITE_STATIC); + if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){ + char *zSql = (char*)sqlite3_column_text(pStmt, 0); + if( zSql ){ + pIter->zIdxSql = zSql = rbuStrndup(zSql, &rc); + } + if( zSql ){ + int nParen = 0; /* Number of open parenthesis */ + int i; + int iIdxCol = 0; + int nIdxAlloc = 0; + for(i=0; zSql[i]; i++){ + char c = zSql[i]; + + /* If necessary, grow the pIter->aIdxCol[] array */ + if( iIdxCol==nIdxAlloc ){ + RbuSpan *aIdxCol = (RbuSpan*)sqlite3_realloc( + pIter->aIdxCol, (nIdxAlloc+16)*sizeof(RbuSpan) + ); + if( aIdxCol==0 ){ + rc = SQLITE_NOMEM; + break; + } + pIter->aIdxCol = aIdxCol; + nIdxAlloc += 16; + } + + if( c=='(' ){ + if( nParen==0 ){ + assert( iIdxCol==0 ); + pIter->aIdxCol[0].zSpan = &zSql[i+1]; + } + nParen++; + } + else if( c==')' ){ + nParen--; + if( nParen==0 ){ + int nSpan = (int)(&zSql[i] - pIter->aIdxCol[iIdxCol].zSpan); + pIter->aIdxCol[iIdxCol++].nSpan = nSpan; + i++; + break; + } + }else if( c==',' && nParen==1 ){ + int nSpan = (int)(&zSql[i] - pIter->aIdxCol[iIdxCol].zSpan); + pIter->aIdxCol[iIdxCol++].nSpan = nSpan; + pIter->aIdxCol[iIdxCol].zSpan = &zSql[i+1]; + }else if( c=='"' || c=='\'' || c=='`' ){ + for(i++; 1; i++){ + if( zSql[i]==c ){ + if( zSql[i+1]!=c ) break; + i++; + } + } + }else if( c=='[' ){ + for(i++; 1; i++){ + if( zSql[i]==']' ) break; + } + }else if( c=='-' && zSql[i+1]=='-' ){ + for(i=i+2; zSql[i] && zSql[i]!='\n'; i++); + if( zSql[i]=='\0' ) break; + }else if( c=='/' && zSql[i+1]=='*' ){ + for(i=i+2; zSql[i] && (zSql[i]!='*' || zSql[i+1]!='/'); i++); + if( zSql[i]=='\0' ) break; + i++; + } + } + if( zSql[i] ){ + zRet = rbuStrndup(&zSql[i], &rc); + } + pIter->nIdxCol = iIdxCol; + } + } + + rc2 = sqlite3_finalize(pStmt); + if( rc==SQLITE_OK ) rc = rc2; + } + + p->rc = rc; + return zRet; +} + +/* +** Ensure that the SQLite statement handles required to update the +** target database object currently indicated by the iterator passed +** as the second argument are available. +*/ +static int rbuObjIterPrepareAll( + sqlite3rbu *p, + RbuObjIter *pIter, + int nOffset /* Add "LIMIT -1 OFFSET $nOffset" to SELECT */ +){ + assert( pIter->bCleanup==0 ); + if( pIter->pSelect==0 && rbuObjIterCacheTableInfo(p, pIter)==SQLITE_OK ){ + const int tnum = pIter->iTnum; + char *zCollist = 0; /* List of indexed columns */ + char **pz = &p->zErrmsg; + const char *zIdx = pIter->zIdx; + char *zLimit = 0; + + if( nOffset ){ + zLimit = sqlite3_mprintf(" LIMIT -1 OFFSET %d", nOffset); + if( !zLimit ) p->rc = SQLITE_NOMEM; + } + + if( zIdx ){ + const char *zTbl = pIter->zTbl; + char *zImposterCols = 0; /* Columns for imposter table */ + char *zImposterPK = 0; /* Primary key declaration for imposter */ + char *zWhere = 0; /* WHERE clause on PK columns */ + char *zBind = 0; + char *zPart = 0; + int nBind = 0; + + assert( pIter->eType!=RBU_PK_VTAB ); + zPart = rbuObjIterGetIndexWhere(p, pIter); + zCollist = rbuObjIterGetIndexCols( + p, pIter, &zImposterCols, &zImposterPK, &zWhere, &nBind + ); + zBind = rbuObjIterGetBindlist(p, nBind); + + /* Create the imposter table used to write to this index. */ + sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->dbMain, "main", 0, 1); + sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->dbMain, "main", 1,tnum); + rbuMPrintfExec(p, p->dbMain, + "CREATE TABLE \"rbu_imp_%w\"( %s, PRIMARY KEY( %s ) ) WITHOUT ROWID", + zTbl, zImposterCols, zImposterPK + ); + sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, p->dbMain, "main", 0, 0); + + /* Create the statement to insert index entries */ + pIter->nCol = nBind; + if( p->rc==SQLITE_OK ){ + p->rc = prepareFreeAndCollectError( + p->dbMain, &pIter->pInsert, &p->zErrmsg, + sqlite3_mprintf("INSERT INTO \"rbu_imp_%w\" VALUES(%s)", zTbl, zBind) + ); + } + + /* And to delete index entries */ + if( rbuIsVacuum(p)==0 && p->rc==SQLITE_OK ){ + p->rc = prepareFreeAndCollectError( + p->dbMain, &pIter->pDelete, &p->zErrmsg, + sqlite3_mprintf("DELETE FROM \"rbu_imp_%w\" WHERE %s", zTbl, zWhere) + ); + } + + /* Create the SELECT statement to read keys in sorted order */ + if( p->rc==SQLITE_OK ){ + char *zSql; + if( rbuIsVacuum(p) ){ + char *zStart = 0; + if( nOffset ){ + zStart = rbuVacuumIndexStart(p, pIter); + if( zStart ){ + sqlite3_free(zLimit); + zLimit = 0; + } + } + + zSql = sqlite3_mprintf( + "SELECT %s, 0 AS rbu_control FROM '%q' %s %s %s ORDER BY %s%s", + zCollist, + pIter->zDataTbl, + zPart, + (zStart ? (zPart ? "AND" : "WHERE") : ""), zStart, + zCollist, zLimit + ); + sqlite3_free(zStart); + }else + + if( pIter->eType==RBU_PK_EXTERNAL || pIter->eType==RBU_PK_NONE ){ + zSql = sqlite3_mprintf( + "SELECT %s, rbu_control FROM %s.'rbu_tmp_%q' %s ORDER BY %s%s", + zCollist, p->zStateDb, pIter->zDataTbl, + zPart, zCollist, zLimit + ); + }else{ + zSql = sqlite3_mprintf( + "SELECT %s, rbu_control FROM %s.'rbu_tmp_%q' %s " + "UNION ALL " + "SELECT %s, rbu_control FROM '%q' " + "%s %s typeof(rbu_control)='integer' AND rbu_control!=1 " + "ORDER BY %s%s", + zCollist, p->zStateDb, pIter->zDataTbl, zPart, + zCollist, pIter->zDataTbl, + zPart, + (zPart ? "AND" : "WHERE"), + zCollist, zLimit + ); + } + if( p->rc==SQLITE_OK ){ + p->rc = prepareFreeAndCollectError(p->dbRbu,&pIter->pSelect,pz,zSql); + }else{ + sqlite3_free(zSql); + } + } + + sqlite3_free(zImposterCols); + sqlite3_free(zImposterPK); + sqlite3_free(zWhere); + sqlite3_free(zBind); + sqlite3_free(zPart); + }else{ + int bRbuRowid = (pIter->eType==RBU_PK_VTAB) + ||(pIter->eType==RBU_PK_NONE) + ||(pIter->eType==RBU_PK_EXTERNAL && rbuIsVacuum(p)); + const char *zTbl = pIter->zTbl; /* Table this step applies to */ + const char *zWrite; /* Imposter table name */ + + char *zBindings = rbuObjIterGetBindlist(p, pIter->nTblCol + bRbuRowid); + char *zWhere = rbuObjIterGetWhere(p, pIter); + char *zOldlist = rbuObjIterGetOldlist(p, pIter, "old"); + char *zNewlist = rbuObjIterGetOldlist(p, pIter, "new"); + + zCollist = rbuObjIterGetCollist(p, pIter); + pIter->nCol = pIter->nTblCol; + + /* Create the imposter table or tables (if required). */ + rbuCreateImposterTable(p, pIter); + rbuCreateImposterTable2(p, pIter); + zWrite = (pIter->eType==RBU_PK_VTAB ? "" : "rbu_imp_"); + + /* Create the INSERT statement to write to the target PK b-tree */ + if( p->rc==SQLITE_OK ){ + p->rc = prepareFreeAndCollectError(p->dbMain, &pIter->pInsert, pz, + sqlite3_mprintf( + "INSERT INTO \"%s%w\"(%s%s) VALUES(%s)", + zWrite, zTbl, zCollist, (bRbuRowid ? ", _rowid_" : ""), zBindings + ) + ); + } + + /* Create the DELETE statement to write to the target PK b-tree. + ** Because it only performs INSERT operations, this is not required for + ** an rbu vacuum handle. */ + if( rbuIsVacuum(p)==0 && p->rc==SQLITE_OK ){ + p->rc = prepareFreeAndCollectError(p->dbMain, &pIter->pDelete, pz, + sqlite3_mprintf( + "DELETE FROM \"%s%w\" WHERE %s", zWrite, zTbl, zWhere + ) + ); + } + + if( rbuIsVacuum(p)==0 && pIter->abIndexed ){ + const char *zRbuRowid = ""; + if( pIter->eType==RBU_PK_EXTERNAL || pIter->eType==RBU_PK_NONE ){ + zRbuRowid = ", rbu_rowid"; + } + + /* Create the rbu_tmp_xxx table and the triggers to populate it. */ + rbuMPrintfExec(p, p->dbRbu, + "CREATE TABLE IF NOT EXISTS %s.'rbu_tmp_%q' AS " + "SELECT *%s FROM '%q' WHERE 0;" + , p->zStateDb, pIter->zDataTbl + , (pIter->eType==RBU_PK_EXTERNAL ? ", 0 AS rbu_rowid" : "") + , pIter->zDataTbl + ); + + rbuMPrintfExec(p, p->dbMain, + "CREATE TEMP TRIGGER rbu_delete_tr BEFORE DELETE ON \"%s%w\" " + "BEGIN " + " SELECT rbu_tmp_insert(3, %s);" + "END;" + + "CREATE TEMP TRIGGER rbu_update1_tr BEFORE UPDATE ON \"%s%w\" " + "BEGIN " + " SELECT rbu_tmp_insert(3, %s);" + "END;" + + "CREATE TEMP TRIGGER rbu_update2_tr AFTER UPDATE ON \"%s%w\" " + "BEGIN " + " SELECT rbu_tmp_insert(4, %s);" + "END;", + zWrite, zTbl, zOldlist, + zWrite, zTbl, zOldlist, + zWrite, zTbl, zNewlist + ); + + if( pIter->eType==RBU_PK_EXTERNAL || pIter->eType==RBU_PK_NONE ){ + rbuMPrintfExec(p, p->dbMain, + "CREATE TEMP TRIGGER rbu_insert_tr AFTER INSERT ON \"%s%w\" " + "BEGIN " + " SELECT rbu_tmp_insert(0, %s);" + "END;", + zWrite, zTbl, zNewlist + ); + } + + rbuObjIterPrepareTmpInsert(p, pIter, zCollist, zRbuRowid); + } + + /* Create the SELECT statement to read keys from data_xxx */ + if( p->rc==SQLITE_OK ){ + const char *zRbuRowid = ""; + char *zStart = 0; + char *zOrder = 0; + if( bRbuRowid ){ + zRbuRowid = rbuIsVacuum(p) ? ",_rowid_ " : ",rbu_rowid"; + } + + if( rbuIsVacuum(p) ){ + if( nOffset ){ + zStart = rbuVacuumTableStart(p, pIter, bRbuRowid, zWrite); + if( zStart ){ + sqlite3_free(zLimit); + zLimit = 0; + } + } + if( bRbuRowid ){ + zOrder = rbuMPrintf(p, "_rowid_"); + }else{ + zOrder = rbuObjIterGetPkList(p, pIter, "", ", ", ""); + } + } + + if( p->rc==SQLITE_OK ){ + p->rc = prepareFreeAndCollectError(p->dbRbu, &pIter->pSelect, pz, + sqlite3_mprintf( + "SELECT %s,%s rbu_control%s FROM '%q'%s %s %s %s", + zCollist, + (rbuIsVacuum(p) ? "0 AS " : ""), + zRbuRowid, + pIter->zDataTbl, (zStart ? zStart : ""), + (zOrder ? "ORDER BY" : ""), zOrder, + zLimit + ) + ); + } + sqlite3_free(zStart); + sqlite3_free(zOrder); + } + + sqlite3_free(zWhere); + sqlite3_free(zOldlist); + sqlite3_free(zNewlist); + sqlite3_free(zBindings); + } + sqlite3_free(zCollist); + sqlite3_free(zLimit); + } + + return p->rc; +} + +/* +** Set output variable *ppStmt to point to an UPDATE statement that may +** be used to update the imposter table for the main table b-tree of the +** table object that pIter currently points to, assuming that the +** rbu_control column of the data_xyz table contains zMask. +** +** If the zMask string does not specify any columns to update, then this +** is not an error. Output variable *ppStmt is set to NULL in this case. +*/ +static int rbuGetUpdateStmt( + sqlite3rbu *p, /* RBU handle */ + RbuObjIter *pIter, /* Object iterator */ + const char *zMask, /* rbu_control value ('x.x.') */ + sqlite3_stmt **ppStmt /* OUT: UPDATE statement handle */ +){ + RbuUpdateStmt **pp; + RbuUpdateStmt *pUp = 0; + int nUp = 0; + + /* In case an error occurs */ + *ppStmt = 0; + + /* Search for an existing statement. If one is found, shift it to the front + ** of the LRU queue and return immediately. Otherwise, leave nUp pointing + ** to the number of statements currently in the cache and pUp to the + ** last object in the list. */ + for(pp=&pIter->pRbuUpdate; *pp; pp=&((*pp)->pNext)){ + pUp = *pp; + if( strcmp(pUp->zMask, zMask)==0 ){ + *pp = pUp->pNext; + pUp->pNext = pIter->pRbuUpdate; + pIter->pRbuUpdate = pUp; + *ppStmt = pUp->pUpdate; + return SQLITE_OK; + } + nUp++; + } + assert( pUp==0 || pUp->pNext==0 ); + + if( nUp>=SQLITE_RBU_UPDATE_CACHESIZE ){ + for(pp=&pIter->pRbuUpdate; *pp!=pUp; pp=&((*pp)->pNext)); + *pp = 0; + sqlite3_finalize(pUp->pUpdate); + pUp->pUpdate = 0; + }else{ + pUp = (RbuUpdateStmt*)rbuMalloc(p, sizeof(RbuUpdateStmt)+pIter->nTblCol+1); + } + + if( pUp ){ + char *zWhere = rbuObjIterGetWhere(p, pIter); + char *zSet = rbuObjIterGetSetlist(p, pIter, zMask); + char *zUpdate = 0; + + pUp->zMask = (char*)&pUp[1]; + memcpy(pUp->zMask, zMask, pIter->nTblCol); + pUp->pNext = pIter->pRbuUpdate; + pIter->pRbuUpdate = pUp; + + if( zSet ){ + const char *zPrefix = ""; + + if( pIter->eType!=RBU_PK_VTAB ) zPrefix = "rbu_imp_"; + zUpdate = sqlite3_mprintf("UPDATE \"%s%w\" SET %s WHERE %s", + zPrefix, pIter->zTbl, zSet, zWhere + ); + p->rc = prepareFreeAndCollectError( + p->dbMain, &pUp->pUpdate, &p->zErrmsg, zUpdate + ); + *ppStmt = pUp->pUpdate; + } + sqlite3_free(zWhere); + sqlite3_free(zSet); + } + + return p->rc; +} + +static sqlite3 *rbuOpenDbhandle( + sqlite3rbu *p, + const char *zName, + int bUseVfs +){ + sqlite3 *db = 0; + if( p->rc==SQLITE_OK ){ + const int flags = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_URI; + p->rc = sqlite3_open_v2(zName, &db, flags, bUseVfs ? p->zVfsName : 0); + if( p->rc ){ + p->zErrmsg = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + sqlite3_close(db); + db = 0; + } + } + return db; +} + +/* +** Free an RbuState object allocated by rbuLoadState(). +*/ +static void rbuFreeState(RbuState *p){ + if( p ){ + sqlite3_free(p->zTbl); + sqlite3_free(p->zDataTbl); + sqlite3_free(p->zIdx); + sqlite3_free(p); + } +} + +/* +** Allocate an RbuState object and load the contents of the rbu_state +** table into it. Return a pointer to the new object. It is the +** responsibility of the caller to eventually free the object using +** sqlite3_free(). +** +** If an error occurs, leave an error code and message in the rbu handle +** and return NULL. +*/ +static RbuState *rbuLoadState(sqlite3rbu *p){ + RbuState *pRet = 0; + sqlite3_stmt *pStmt = 0; + int rc; + int rc2; + + pRet = (RbuState*)rbuMalloc(p, sizeof(RbuState)); + if( pRet==0 ) return 0; + + rc = prepareFreeAndCollectError(p->dbRbu, &pStmt, &p->zErrmsg, + sqlite3_mprintf("SELECT k, v FROM %s.rbu_state", p->zStateDb) + ); + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){ + switch( sqlite3_column_int(pStmt, 0) ){ + case RBU_STATE_STAGE: + pRet->eStage = sqlite3_column_int(pStmt, 1); + if( pRet->eStage!=RBU_STAGE_OAL + && pRet->eStage!=RBU_STAGE_MOVE + && pRet->eStage!=RBU_STAGE_CKPT + ){ + p->rc = SQLITE_CORRUPT; + } + break; + + case RBU_STATE_TBL: + pRet->zTbl = rbuStrndup((char*)sqlite3_column_text(pStmt, 1), &rc); + break; + + case RBU_STATE_IDX: + pRet->zIdx = rbuStrndup((char*)sqlite3_column_text(pStmt, 1), &rc); + break; + + case RBU_STATE_ROW: + pRet->nRow = sqlite3_column_int(pStmt, 1); + break; + + case RBU_STATE_PROGRESS: + pRet->nProgress = sqlite3_column_int64(pStmt, 1); + break; + + case RBU_STATE_CKPT: + pRet->iWalCksum = sqlite3_column_int64(pStmt, 1); + break; + + case RBU_STATE_COOKIE: + pRet->iCookie = (u32)sqlite3_column_int64(pStmt, 1); + break; + + case RBU_STATE_OALSZ: + pRet->iOalSz = sqlite3_column_int64(pStmt, 1); + break; + + case RBU_STATE_PHASEONESTEP: + pRet->nPhaseOneStep = sqlite3_column_int64(pStmt, 1); + break; + + case RBU_STATE_DATATBL: + pRet->zDataTbl = rbuStrndup((char*)sqlite3_column_text(pStmt, 1), &rc); + break; + + default: + rc = SQLITE_CORRUPT; + break; + } + } + rc2 = sqlite3_finalize(pStmt); + if( rc==SQLITE_OK ) rc = rc2; + + p->rc = rc; + return pRet; +} + + +/* +** Open the database handle and attach the RBU database as "rbu". If an +** error occurs, leave an error code and message in the RBU handle. +** +** If argument dbMain is not NULL, then it is a database handle already +** open on the target database. Use this handle instead of opening a new +** one. +*/ +static void rbuOpenDatabase(sqlite3rbu *p, sqlite3 *dbMain, int *pbRetry){ + assert( p->rc || (p->dbMain==0 && p->dbRbu==0) ); + assert( p->rc || rbuIsVacuum(p) || p->zTarget!=0 ); + assert( dbMain==0 || rbuIsVacuum(p)==0 ); + + /* Open the RBU database */ + p->dbRbu = rbuOpenDbhandle(p, p->zRbu, 1); + p->dbMain = dbMain; + + if( p->rc==SQLITE_OK && rbuIsVacuum(p) ){ + sqlite3_file_control(p->dbRbu, "main", SQLITE_FCNTL_RBUCNT, (void*)p); + if( p->zState==0 ){ + const char *zFile = sqlite3_db_filename(p->dbRbu, "main"); + p->zState = rbuMPrintf(p, "file:///%s-vacuum?modeof=%s", zFile, zFile); + } + } + + /* If using separate RBU and state databases, attach the state database to + ** the RBU db handle now. */ + if( p->zState ){ + rbuMPrintfExec(p, p->dbRbu, "ATTACH %Q AS stat", p->zState); + memcpy(p->zStateDb, "stat", 4); + }else{ + memcpy(p->zStateDb, "main", 4); + } + +#if 0 + if( p->rc==SQLITE_OK && rbuIsVacuum(p) ){ + p->rc = sqlite3_exec(p->dbRbu, "BEGIN", 0, 0, 0); + } +#endif + + /* If it has not already been created, create the rbu_state table */ + rbuMPrintfExec(p, p->dbRbu, RBU_CREATE_STATE, p->zStateDb); + +#if 0 + if( rbuIsVacuum(p) ){ + if( p->rc==SQLITE_OK ){ + int rc2; + int bOk = 0; + sqlite3_stmt *pCnt = 0; + p->rc = prepareAndCollectError(p->dbRbu, &pCnt, &p->zErrmsg, + "SELECT count(*) FROM stat.sqlite_schema" + ); + if( p->rc==SQLITE_OK + && sqlite3_step(pCnt)==SQLITE_ROW + && 1==sqlite3_column_int(pCnt, 0) + ){ + bOk = 1; + } + rc2 = sqlite3_finalize(pCnt); + if( p->rc==SQLITE_OK ) p->rc = rc2; + + if( p->rc==SQLITE_OK && bOk==0 ){ + p->rc = SQLITE_ERROR; + p->zErrmsg = sqlite3_mprintf("invalid state database"); + } + + if( p->rc==SQLITE_OK ){ + p->rc = sqlite3_exec(p->dbRbu, "COMMIT", 0, 0, 0); + } + } + } +#endif + + if( p->rc==SQLITE_OK && rbuIsVacuum(p) ){ + int bOpen = 0; + int rc; + p->nRbu = 0; + p->pRbuFd = 0; + rc = sqlite3_file_control(p->dbRbu, "main", SQLITE_FCNTL_RBUCNT, (void*)p); + if( rc!=SQLITE_NOTFOUND ) p->rc = rc; + if( p->eStage>=RBU_STAGE_MOVE ){ + bOpen = 1; + }else{ + RbuState *pState = rbuLoadState(p); + if( pState ){ + bOpen = (pState->eStage>=RBU_STAGE_MOVE); + rbuFreeState(pState); + } + } + if( bOpen ) p->dbMain = rbuOpenDbhandle(p, p->zRbu, p->nRbu<=1); + } + + p->eStage = 0; + if( p->rc==SQLITE_OK && p->dbMain==0 ){ + if( !rbuIsVacuum(p) ){ + p->dbMain = rbuOpenDbhandle(p, p->zTarget, 1); + }else if( p->pRbuFd->pWalFd ){ + if( pbRetry ){ + p->pRbuFd->bNolock = 0; + sqlite3_close(p->dbRbu); + sqlite3_close(p->dbMain); + p->dbMain = 0; + p->dbRbu = 0; + *pbRetry = 1; + return; + } + p->rc = SQLITE_ERROR; + p->zErrmsg = sqlite3_mprintf("cannot vacuum wal mode database"); + }else{ + char *zTarget; + char *zExtra = 0; + if( strlen(p->zRbu)>=5 && 0==memcmp("file:", p->zRbu, 5) ){ + zExtra = &p->zRbu[5]; + while( *zExtra ){ + if( *zExtra++=='?' ) break; + } + if( *zExtra=='\0' ) zExtra = 0; + } + + zTarget = sqlite3_mprintf("file:%s-vactmp?rbu_memory=1%s%s", + sqlite3_db_filename(p->dbRbu, "main"), + (zExtra==0 ? "" : "&"), (zExtra==0 ? "" : zExtra) + ); + + if( zTarget==0 ){ + p->rc = SQLITE_NOMEM; + return; + } + p->dbMain = rbuOpenDbhandle(p, zTarget, p->nRbu<=1); + sqlite3_free(zTarget); + } + } + + if( p->rc==SQLITE_OK ){ + p->rc = sqlite3_create_function(p->dbMain, + "rbu_tmp_insert", -1, SQLITE_UTF8, (void*)p, rbuTmpInsertFunc, 0, 0 + ); + } + + if( p->rc==SQLITE_OK ){ + p->rc = sqlite3_create_function(p->dbMain, + "rbu_fossil_delta", 2, SQLITE_UTF8, 0, rbuFossilDeltaFunc, 0, 0 + ); + } + + if( p->rc==SQLITE_OK ){ + p->rc = sqlite3_create_function(p->dbRbu, + "rbu_target_name", -1, SQLITE_UTF8, (void*)p, rbuTargetNameFunc, 0, 0 + ); + } + + if( p->rc==SQLITE_OK ){ + p->rc = sqlite3_file_control(p->dbMain, "main", SQLITE_FCNTL_RBU, (void*)p); + } + rbuMPrintfExec(p, p->dbMain, "SELECT * FROM sqlite_schema"); + + /* Mark the database file just opened as an RBU target database. If + ** this call returns SQLITE_NOTFOUND, then the RBU vfs is not in use. + ** This is an error. */ + if( p->rc==SQLITE_OK ){ + p->rc = sqlite3_file_control(p->dbMain, "main", SQLITE_FCNTL_RBU, (void*)p); + } + + if( p->rc==SQLITE_NOTFOUND ){ + p->rc = SQLITE_ERROR; + p->zErrmsg = sqlite3_mprintf("rbu vfs not found"); + } +} + +/* +** This routine is a copy of the sqlite3FileSuffix3() routine from the core. +** It is a no-op unless SQLITE_ENABLE_8_3_NAMES is defined. +** +** If SQLITE_ENABLE_8_3_NAMES is set at compile-time and if the database +** filename in zBaseFilename is a URI with the "8_3_names=1" parameter and +** if filename in z[] has a suffix (a.k.a. "extension") that is longer than +** three characters, then shorten the suffix on z[] to be the last three +** characters of the original suffix. +** +** If SQLITE_ENABLE_8_3_NAMES is set to 2 at compile-time, then always +** do the suffix shortening regardless of URI parameter. +** +** Examples: +** +** test.db-journal => test.nal +** test.db-wal => test.wal +** test.db-shm => test.shm +** test.db-mj7f3319fa => test.9fa +*/ +static void rbuFileSuffix3(const char *zBase, char *z){ +#ifdef SQLITE_ENABLE_8_3_NAMES +#if SQLITE_ENABLE_8_3_NAMES<2 + if( sqlite3_uri_boolean(zBase, "8_3_names", 0) ) +#endif + { + int i, sz; + sz = (int)strlen(z)&0xffffff; + for(i=sz-1; i>0 && z[i]!='/' && z[i]!='.'; i--){} + if( z[i]=='.' && sz>i+4 ) memmove(&z[i+1], &z[sz-3], 4); + } +#else + UNUSED_PARAMETER2(zBase,z); +#endif +} + +/* +** Return the current wal-index header checksum for the target database +** as a 64-bit integer. +** +** The checksum is store in the first page of xShmMap memory as an 8-byte +** blob starting at byte offset 40. +*/ +static i64 rbuShmChecksum(sqlite3rbu *p){ + i64 iRet = 0; + if( p->rc==SQLITE_OK ){ + sqlite3_file *pDb = p->pTargetFd->pReal; + u32 volatile *ptr; + p->rc = pDb->pMethods->xShmMap(pDb, 0, 32*1024, 0, (void volatile**)&ptr); + if( p->rc==SQLITE_OK ){ + iRet = (i64)(((u64)ptr[10] << 32) + ptr[11]); + } + } + return iRet; +} + +/* +** This function is called as part of initializing or reinitializing an +** incremental checkpoint. +** +** It populates the sqlite3rbu.aFrame[] array with the set of +** (wal frame -> db page) copy operations required to checkpoint the +** current wal file, and obtains the set of shm locks required to safely +** perform the copy operations directly on the file-system. +** +** If argument pState is not NULL, then the incremental checkpoint is +** being resumed. In this case, if the checksum of the wal-index-header +** following recovery is not the same as the checksum saved in the RbuState +** object, then the rbu handle is set to DONE state. This occurs if some +** other client appends a transaction to the wal file in the middle of +** an incremental checkpoint. +*/ +static void rbuSetupCheckpoint(sqlite3rbu *p, RbuState *pState){ + + /* If pState is NULL, then the wal file may not have been opened and + ** recovered. Running a read-statement here to ensure that doing so + ** does not interfere with the "capture" process below. */ + if( pState==0 ){ + p->eStage = 0; + if( p->rc==SQLITE_OK ){ + p->rc = sqlite3_exec(p->dbMain, "SELECT * FROM sqlite_schema", 0, 0, 0); + } + } + + /* Assuming no error has occurred, run a "restart" checkpoint with the + ** sqlite3rbu.eStage variable set to CAPTURE. This turns on the following + ** special behaviour in the rbu VFS: + ** + ** * If the exclusive shm WRITER or READ0 lock cannot be obtained, + ** the checkpoint fails with SQLITE_BUSY (normally SQLite would + ** proceed with running a passive checkpoint instead of failing). + ** + ** * Attempts to read from the *-wal file or write to the database file + ** do not perform any IO. Instead, the frame/page combinations that + ** would be read/written are recorded in the sqlite3rbu.aFrame[] + ** array. + ** + ** * Calls to xShmLock(UNLOCK) to release the exclusive shm WRITER, + ** READ0 and CHECKPOINT locks taken as part of the checkpoint are + ** no-ops. These locks will not be released until the connection + ** is closed. + ** + ** * Attempting to xSync() the database file causes an SQLITE_NOTICE + ** error. + ** + ** As a result, unless an error (i.e. OOM or SQLITE_BUSY) occurs, the + ** checkpoint below fails with SQLITE_NOTICE, and leaves the aFrame[] + ** array populated with a set of (frame -> page) mappings. Because the + ** WRITER, CHECKPOINT and READ0 locks are still held, it is safe to copy + ** data from the wal file into the database file according to the + ** contents of aFrame[]. + */ + if( p->rc==SQLITE_OK ){ + int rc2; + p->eStage = RBU_STAGE_CAPTURE; + rc2 = sqlite3_exec(p->dbMain, "PRAGMA main.wal_checkpoint=restart", 0, 0,0); + if( rc2!=SQLITE_NOTICE ) p->rc = rc2; + } + + if( p->rc==SQLITE_OK && p->nFrame>0 ){ + p->eStage = RBU_STAGE_CKPT; + p->nStep = (pState ? pState->nRow : 0); + p->aBuf = rbuMalloc(p, p->pgsz); + p->iWalCksum = rbuShmChecksum(p); + } + + if( p->rc==SQLITE_OK ){ + if( p->nFrame==0 || (pState && pState->iWalCksum!=p->iWalCksum) ){ + p->rc = SQLITE_DONE; + p->eStage = RBU_STAGE_DONE; + }else{ + int nSectorSize; + sqlite3_file *pDb = p->pTargetFd->pReal; + sqlite3_file *pWal = p->pTargetFd->pWalFd->pReal; + assert( p->nPagePerSector==0 ); + nSectorSize = pDb->pMethods->xSectorSize(pDb); + if( nSectorSize>p->pgsz ){ + p->nPagePerSector = nSectorSize / p->pgsz; + }else{ + p->nPagePerSector = 1; + } + + /* Call xSync() on the wal file. This causes SQLite to sync the + ** directory in which the target database and the wal file reside, in + ** case it has not been synced since the rename() call in + ** rbuMoveOalFile(). */ + p->rc = pWal->pMethods->xSync(pWal, SQLITE_SYNC_NORMAL); + } + } +} + +/* +** Called when iAmt bytes are read from offset iOff of the wal file while +** the rbu object is in capture mode. Record the frame number of the frame +** being read in the aFrame[] array. +*/ +static int rbuCaptureWalRead(sqlite3rbu *pRbu, i64 iOff, int iAmt){ + const u32 mReq = (1<mLock!=mReq ){ + pRbu->rc = SQLITE_BUSY; + return SQLITE_NOTICE_RBU; + } + + pRbu->pgsz = iAmt; + if( pRbu->nFrame==pRbu->nFrameAlloc ){ + int nNew = (pRbu->nFrameAlloc ? pRbu->nFrameAlloc : 64) * 2; + RbuFrame *aNew; + aNew = (RbuFrame*)sqlite3_realloc64(pRbu->aFrame, nNew * sizeof(RbuFrame)); + if( aNew==0 ) return SQLITE_NOMEM; + pRbu->aFrame = aNew; + pRbu->nFrameAlloc = nNew; + } + + iFrame = (u32)((iOff-32) / (i64)(iAmt+24)) + 1; + if( pRbu->iMaxFrame

    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 KXn#if!S-MG%C<-V literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/ebin/Elixir.Req.TooManyRedirectsError.beam b/phoenix/_build/prod/lib/req/ebin/Elixir.Req.TooManyRedirectsError.beam new file mode 100644 index 0000000000000000000000000000000000000000..e9a193dd8748f49b1164dedb376417051c4b01e3 GIT binary patch literal 3844 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Utils.CollectWithHash.beam b/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Utils.CollectWithHash.beam new file mode 100644 index 0000000000000000000000000000000000000000..338ecb349c4b6fd7f3b554ff0fd82a74680152c8 GIT binary patch literal 2688 zcmai03tUs@6~8x^KnMbtgjcH7SeU>jB)9@viv}=cSc-^%^Fi~txd|7N+~nRH6Gw*% zSf;YgiZ3iGTDw)S7T;8d;zTX9)lS@M@iFU)46TkipFc%*ZW8BX>-znE|L<|m`ObIF zx%Zs!%brn?j38onraI%z46bM*f}r^D@bEQ}Ty3G;6q8gyI+BVw%EBgP(H09yaI-0{ z^k;gubg@=T*-W%n+ob0>hB7!glC=}G)lON+CL?KQNJ7t%##Yj8rx}jbT8$|yO->uZ zQM8TKS@i@%vq~W9thCW-A$2UrI0;TiG8VnfJZL64t(W0BrAe#x^0nGlpJ8g7)2d@g zqmv+8pOF-WCq9)`Bqzd=iONKsL2tC`?fE3b(2OYhc@fHHp=_iP#9;H2#S`y9MHX!& zAuh29g5UtY?E<_65TSSjB9Od-qw>kvnkbQE!qUv81x^FW6jeD_E#0c#oq{S=8U&M~ zDwPEKe3b@=L8sElVX&(N&@WbDQefuE5p<k=0ZRi zPxFoZoNv625CBi-_40GR1p)Xoc)B3lY2$4e?__)ac5dc0`QGox%Ed%l#)?RN=upV2$+W1(ZHXIo_UulW0?H%X8Q`!}Ev3)?&A&%Qi%83wW zNl&&+H>WF7;&&o9q2xD_8F;1nr=#YXH+-JcJ@pn@H#o7jD&>rRTU+P*Rn?z6Hr#1W zKZ&)T`>4Fz(Jc-zj);D1hw!jGezvYhxOzw5!Q>kA8A0Bmmv6Qe@2}54(I<+ddRwN? ziZo1HUrE>OiXE*OdMEN^LvcuPh`IXYn2z|Bf2=+>p)xbK=KYrai(=!u4#d_81zOvd zhuPwp+2LWQ(w60|ZR&8J?h5GX7?&2t;f*2VqnfwdEpmDS9+0g$(y5+zWpqgUtVuJ~ zA0K&JI&$~C%Bhua1ulB1Y17FaBWfl&!LCqJ>^F_~BrG;Go9bm}4D#Z{*C=mk7gEuJ3On)xptM-tIjw zyIDJB?&fnN6GOkfZMs=kd-2S{d1IKyk0V;#*?o(*cWzW9v^5XZU8a85vccccT(0@7 z0qq(^kG+`N-+w5p_z{9KYgRyZOrr@F5-ptn_t10h#*Hg8@{TES^~Uhtg7`Sy3csK- zhkt6TuxNbZ$xUbT=1<-i=ZNjRqq-oDQ~x-q25))y>gmnHrnBQuZIdo>9uSWGx}ve_ zPwjW-WqvBzqB+=icx_Ve#G<*=Ti377nIGQd{(Z^ytccT@&4TCye-YN-&h0z4Kke|2 zD+BA!*$Yz^HeE-i?kMXg`|T>x_LQ`|!K2Cfm4z|4 z?EgI87xP{5_2h3($uPm@l;(=jXFn^yGlYE|s``QA!f!B%@uB%vVj+72tb@cuISz03@F)#a1)u7=>^h!XO6l_YE2f*V?}U)aG|{ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Utils.beam b/phoenix/_build/prod/lib/req/ebin/Elixir.Req.Utils.beam new file mode 100644 index 0000000000000000000000000000000000000000..91ec6f12733351d5fa6a416c5acf77fd4956cb84 GIT binary patch literal 41284 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

    L6! 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

  5. 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/finch/.mix/compile.elixir b/phoenix/_build/prod/lib/finch/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..c1e6772e3c3a2a86a1b52e3fb9aadbc5800335d2 GIT binary patch literal 7297 zcmV-{9Dd`2Pyhf=Xn366doM5P}*MIb;&w0Vz7q>T%-orn!>7zCu@(WrnjIH9diL`4Nt13yW@{e{axXy$G?2bKVN*_(2S8TC;JOl zWxo5tcx3nbd3%=U^SS&uv+rJ=eTnr$t7|Mg<%I+0>@{QgnpL0q%a<0Pvwy=H3meur zZtdDtv}aW=*T2#h^BG+jXT1Yz>-80jLv+ay9_t+_Jy%`)lB-{S*SaS*+_!%FH}606 z@>>pWSbVP*i!aL!4vw?xUd^j&jIXYC^2fhB^_0SYK6>OKr=5EHyDlAUSZ(iy)zU-C zLAl)cxTo!zgQee`d>GW(#jR^C5n?n67w ztsOXQOl~!}Exzoedos^N@4N8M50C!k{KD*p)!x!(wVpLaSsX7E$6s^%JFl31!}D{l zXIl>V))#L5-2n}29@xUXF{I}UC4gwA{< z$$X(&?p8{j&yCEe8Ue?hRk>9a0KQ zlo>Zevar0+)|!n_8i5ppDF~o@diY zE^kKWlz*?b>tWLTrjhAYUk$Z`zBapVhac_BXdC-gy|SrLv;*y|Q5m&VYg;IcOe_C9 z{>18f@7**g2Qs>5?rdtW$$cF@;HRx#zVy8-m-h^qzTMI+Kt9Y_lcvJco1XcU`rIvB zulnq@Zn3!jr$;<=%F{20cf2G2y*tTM`(^%NS?ABrx&6Y=pK*9}(%w&W&83%ot^c*| zIS=o4@b-T@RG-mhv*m>vd0w^+=W58v$ye1f@{_lXYeO#s_sosSC7)ilJ#*Mk zHz$4%Q>z|cmCqG(8t!OHxq64U%$+tV&?cu!NAGA21Y-lWKD)Eos^MA?+3a{^uEBP^cK#vzeEFo?3vurI_Oh={`qJMW^1^;cUUuaR4=-B!p8Gy@ z>)s3P>Gv!PZ@zlz#r#`$|IZCmFSsH5)Yl*P+u5zzWQ`{;Z+YL!n9N|YXKh{%B2M$A zh)ze$Y@1GF7)+Z48)t>;9O*rud#xQ%@9btMXaL#?WoFgoRll|4=dGPrE@chQTf9fj zc?W$*KDNg`@4D&AOZUF&`p^9S`J4JD{qT!38u2QOo=_-|ztsWjMW(I7@hhq@G0#d8tN?VNzSS!WV@gk-& z)iJ|^dQ3Jq1N07JXSeqCV|=QZortt-2(j+Z*Fx-?)BbwH0okv-binYl%YMK7s9XNe z{B55<>%#0&kK8cyw)>xY;-pvB-9BaUj}G4R2hSh$*QMXTVcX9Z-*xd($2>V>^Vb$$ zxT5&nu{#lB6T{V#b-Eh-FrJyG%3^N7$HN>{y#hRpt~$tvD41I=gBWjdSSm0&YE&b&(vuT?ft?h ze*F7*?z#E5-z)Mz*?Q95U0b$gR~D}*m5nw?yCS!K{n)%~1n2UY3SFooVGV-!-LV4L zkpz1kAl@SFTjP3rFlbQ*tJ7A`$67=Eo00spYC*Tg7GED0j9=?_P+-cz+=(J*My9W~ zgOFL$!$#+TEcQ*P@RZ!v3LVCX@T_HnlfQWHYll5>=KuZ3wujG|I{)E) zCjEbc4r~lM>{tyq*mU}t^;PXFRef@?7FP;DA-z_}n?8hEF_^ZFX%YApx z^VWU-yb~84e!-TJBmZT1>FR+GfB(Rn*F5mp<9%1n`0O+Mqu;$?Xv=+{^_%Q`V>WGN zyD9Y|&;vldDd*Lh(&i=VYNK`QM90{W+#%LvTlc&gEZ6b1n&oIBM z=s#=d*_Ai{V&k!LP4) z;D+g$Z$9|Z8-tI0V(qM(j=cH$?9ZO*{>zWgd?^0dHu7Z0_LFa$wd&;6H=Z8c|LQNd zpRvc>+cxiY-?c{AqWr*~=3uxMO|NlCosm zzY}QeX7tw_GULZLJ#z1_Zu`(DpE&)dTYtOnuRfGLZ}C%mExzUJUpe`%{U+}@%K!eL z6Mkz?PyYUNap}7JyC*$*%_K&1+y458#ta>jfX!fAi5R*57g2tyg^Ni3>+B{?SD@p0?^E@4N2c z6MY}J&+VPILeMimSy5Q08Or#x=Eg{#~jzDun)K#wz?7Qx)W5{fFoc9_H zhh1cAhyBGje)aYR+s?oJU!Q#K#&f>-()4x5b=~vu_qJX3(o1j8e`?R~T>b6E@A)53 z-}>M~ht6O1^B3>_?ab%*_{5cuFTDKTIhRdawcsnKTr=Urc8pA`Zm1z48Z~F#0o$}@A2QI?irIAH>+M<4Jq5lkjrBDEHPRID}%H1-WRG3=EWV5*4l|C}k znHh9B|9fhA`=w6lZX+|Zh1_5-jF6XgMdk#FtA6{+S2ue!6iBAnv#Mm3 zrKP(VI4f@ljm`I_UED&&Ia5o{scyg1TW@61czg8EpRne{_h-`}kehPD#d5s(E3<}% zRbg257E1hLVLKD98dhtD6&{$@pV?@8H)iZe)q{o1`a$oZg6vOE+@h` z)39T0dy)T@Gay1n@|mLT%?*}0*{F{~gu1b&cgO>8YAHLa`-hFKEYsypSTaPTS<_#X zMLh)n&@>6NBb~T?mLI&(A6unH?&}`u=(D4hpZ>Wiw1<+OAcYgcR1)z(i%5qF6_SwH zMpi|ZDJfzptrRY%QACnJhAuWq=%`akLPR2^rcvoI9Rr!sl4$DdKoAVc(R7`U9C0A+ zA(hZgw~^lTKJ+0xkUn8YhX#B~T$^R73s4>;0&y=~OgsoXg*x@LV-COREbe zgbfbN!G{xG;$cWK6l@Mg`hSVQpw$=z_ zt8)WGnSP{mIq;e;r`t!!_E4HG9P2m;3{eT9DwfLd9T>SJPElPtrq5eiAZ4s_G<+ zB{N7%D)F~O*??dt0hKC9gd!24hEYomE;z@XWRZ*C6$E@)tstcXm%uXF^idE(j*9I;)vl4E|UaN1e{^S;*P~A zFa{(Xp$MxuF-UczISFi&Bd5StW8rT1)SW>OEnAE=Rk|kFoG_WFMCLTinVzYMnxtVo z;cyw)G`gW0ea+>iba$fR(hW9WT%WfoYnqo%N0T<;QXMBVeP-BD( zghELGH1eiM?`(psxv8B*)fYPnUT7`?8Ecp^VFGJMQ&U&?yf=2^smlZ2Sd@ek zKu9i!K z8n6}xXpc>Zx-1M4JPDG>$;d;zFUyHyIyNk{3=|*+_th)`2P!p`I=y`w!@U*pFJW7Q z*PCU-M8j!p-6+uj`exLM))FG#NeSW0M$y0UN*e|xTQu{G^!|i!xH)FDLg;aAqnNtH zITC3n6B$QAEF8DWgp?sHJuk+;tbvAbS~BV^0W}4t`gTLwS*t`$=~o39X*pgL)!>^3 z+Qtz8q!z+3nSg)*nHf_SOw?*{?*s(cMc4qOkV|6!02m+9tvUt+nE_ivMbZWp(_s^b z#DUCUu~MD@wLPp_o}%Vy2a6M)cJ^TUDNt|eR$<5duIYh^hhX_R|7xzrN*klQe$0Q1 zMo4o^#*xv&QgHtyfLsc}3ZpQFOr?pDNrK{OLGKyVo`@ZjA=DXFF@d^`WdOaD_7r`` zsG=?^y`?Vfw1<}~wTQrSsWbt&FmOK9+J|@o$rsW%BoN;wfq=rlt*|kL6c;uUAut>A zMveo+Aj=BdM!TCDjC}MjOZptwP~Z2}SJ-!X$wLF(K-z-~mY(7tpOxmC~13z*2zHVqr;CU!4%e zeVHmHb$4BcmxVkib;&xhfubQiQmEi2AWT|Il_VSz(I9?+Elk9bg>p~gFj3YDn#3A$ z03AYEJdS&zogq(R%aa6i3c@(JL#QGFF9$f9FbS+~@lQYvGft2YLRd!;wK37!l(s)u ztlNGGa^T#kr_|q~l%pO)GC8gw!h%Rg3Dj7GzzjqH%?&jM-vvmYuuZ*<=&OC6J_?*1Y201xFQ$QW<;AsUPn{6*#%Bp_)-R-EiB*! z{KZ;Mz%VSO!Z_3#7bq3UP;ihRaC#7WsNKYHL>0)M?>jaDYSN_EPx!BNf0m{D3QcL z95ZJVJkDbjMqnHcssj@s=|d7YKdEpcBuHsbMC)n@1!@sVX&5J(B6Y0P zNy4Sp#7GR%F;`L(%7lRfNldv%z{<<7DiJOJE*~PU^oURr6z3sKXYqWTAQ3!Y1`!Qt zsEA=f82O9|U7|SjAOO%24)A3}DeamPWjcbn{+&mQu&ulynP6(XnGK@ZWgGOC-bA%y zuT8@yT;k_eo&((<>X${^Zr5W5PI!r#l_&jMv35I zrrIW(UIo;RndlzN&*V1^m1K9R#o8!N-2dKuco4^ zp)`idMU)G|6HEXlln7`btilx-k(Vb#P#jr;Y7&7$8wi3;*+k$-V{yB?4WL)WQb}u| zSmFefr*zbYUdSgJD<>gjm{nXDVoiv3aVunyBP8(BMyo>=Akw6n=B%mgMK-A#$(!ZI63`I17Km!|~To}Y|h=OH- zN5WS);u*D$lOUnvV1R%?P}&OTEGTWPkcN?<%mDzXj4YNC5$chop+!k@zDW(V(8zyE z!H_+yb>!`a$|3yU%Z<9Qhn9phA&D@?psE7E9Jn(yGgL>QDB_mrh(!#%nudl!ky>a| z0&7C8N0dPLnC5qNQ&U2n&lUSKHLk#$>QZ^YgekQ>yHITVsZ8nagy*VuD@!jIXww_H zQfu>X_%^tq6**8<>%Oy5d+$ScBHO2z6`?L{Y`4+6A#ac+kk`!;TH`c9E^36kSMR{! zDDiLpA>*Axl!hL!eK$Ge!XbmKgYtu1)r3hV0}iys5_JI5-3%$!mRc!ur4mS_2-?tp zJ`~2l<4~Y>D;|U5aTg{;1`!RJmL4vwjKfF@4bd7(5XJJ_yD53AWS)<$IW%H^BtyZW zh8z6h=_HE-qz;MzLDp&11(75s37HU(+_)5IW;}%WfnC4`q5rN=dULwCSt$RlKLN6lihLK)_wFJh z4Lqe{DFoxjw^=N<9S{oa6E*?V<3I!?Plp~<0hqoeJhx_|pA(q$RtS=1RRwpQBHxdA{K}efsl?xGQm|IGD@+=nC}j|TYryOO(b3p z^)P0>A5TD1xdPLHII=qMv4(O?k;oy^DiO#Zhg>ExL2Zt;@4rhf|6d22uz~h(E{QWJ zuQH6oBrt@BoQYi(aWRFbY7a7Yy;g^3gY z9g&49poU1E_?D(;C&(5k20~06D2J1B>bJrm$^o_ zr@KYF_S4-E(#^lkg$oVW6x`1FPeM83gb}D`2uQ9RQOHLVN1&XRM9fKPfhXXEadxD` bsP$gRHT-vY{$jTD|8R*1mYw@wNg*JP`0XbG literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/finch/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/finch/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP1.Conn.beam b/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP1.Conn.beam new file mode 100644 index 0000000000000000000000000000000000000000..3640d04178c548ada16b99afaa97b95c3aad5663 GIT binary patch literal 20368 zcmc(H2|QHo+psZ%Gn1oX#+qs@6r~EQL~v)JRB5q(w=k zg^Ko2Y2OqrTD9vTzWdCKJpKPY&-?tp_j}*Z?{_)(xz2rE_qE^mnfsn`nKyrygv7jD zM`s5w2fqIt2?<=|=;-KrNZC1#mC8yqbYZb0V+`H={AjZbsT?*tBP@)?j^c!cRnqzV zL{>x+pULA!a^ktHIA$e-$xUQN()mor0cI+flgQ_V#WTzcqmtN>d=`hz3y-HqCUSVj z02v<7VI;*d!+HF~q)5Ion-v$%OpK$mqX(jy{4mi&;YhT|I1Z1A#IxA^0j5x}xfh@i3LYLoXT;OFG-hHVClS3_%uE9!v)Rl@ zemE~Oh8fR9VmLfLf=Z0A>G4cR=@;$&m~o&FKQWEQW^+>5sP&lic!(TBXEWlMzz7LR zOdcN?2xyA%m~6(t&nG-CZ~zdO&gIeKnTgR%1h^`>kcHCmS@FzpHk}Xj>51pCf#7Ub zq!8O0M+f|XjUpGb*hGUav7)|dJU%lXk_Q4NGZXp3u3<@R79Ua-X(JNsr$7-LMw&5` z69tie_W&5D5LGn{H7ukcY{t`5!+y%v^~+tj(B*s@hs$K!)1v5cJSId0$}oZWU_`N^ z3=W&g1=@yzcp4Zp45}z6iH|Vod^$IVNoOz!}5_BdK`aD$+^r#HZzXP zV)MAdNCDx_jt-AtvFV9v#`L&2h%B~-Lt=DNJaCUQYW6~AY9y13hI?TW7mULMQJld~ zq=WoOoNWV10!U`gPiH$?(dC{2XVVJZbgNrjI@%mG;<5y9fhZeq*Z1F=M9 z3W12#Ysa2Ja99N*3Da7BGY}`j+CIZ{Ap{}`JP}Z2D8vewh@}unj#wfV(<4KqRKW7+ zec2ZriV_%amBNYnp^OHI#uC+7z+Mpt5sir$2n>rNj0wsFB2GXNA?4k$7)U{YNGcFi zC>V%T1}k98VFj^ZT6(ad))`qYrCynaBWs&EAtXNp%P5D*q7JG~wy+`wA|nJ6w6_yKnALgnwc%EjDeI8f*J{7UzI1Q z$00Z^TUY}FQN*eXyU!4J*TO&=2$_VKnF0#|Rms{i2-gyxgS7%cal}fX@u6)^g6AkB z1SNPnfdp$}AWg)Hg!pNJ{!V^E({#xgXOzQQVrBdgKVTOiGEi2ePmgfWX=5^CAm9)! z#EgV!`{mLoGRB31fvr+xtOW2Z5eLFc7-=M|0)>Quri}-hDnrl%0*#A-rk6_jX`$Vf zv{6}vY=n|PL?Fr-g%TMjWHDn5p-h;>5VVR|=!_%P7$TJJI7(HFnmLY|$`BNa`ss}$ z0Y5OOq9W;!Bh?s!a1qjA90`P{iI9e}G>`(uAO#STnJ}V^#0dbxz!(D=2@?R47aGlC z%xJDI}fk`=RD(XH7!~t*$NDEV89H0~= zA%*!E1qL!hb3jX&17w1_nJ@>m5myQ+7a<}9T|h#XF|Hh|1SA|<7$Ea;6(>0Xra(s; z2AVyNRRdTB5!PZHs|v94BJ3PNs|TnXmI6o-6b?O5IILtT6oiCBu;en>22>F1pQR19 z2DOc#FA5Foa@Z!2EG}=bEe5g?7C15xR7t3t7q1q_$PcOq4&`L>ihuAYHK_{1MnlqON2p}PR2-zhB)C#3Us5{$1l(PO!-d9I z^aW#h6OA#Drz}E4s5rz_Yz;@OF-a)GRIvy+Q&7c#2spAx1d31uFKtINR0NH!Qrcr8 zAVfzq3MzszfrKRq?c?=R0&S6fyakXZ>W_H>NDJ7>jEI3~2*I2rO@ZfQARjRn_;tRl zG00>h4k3|2dI}(I8HpZrHimt*%VFO@ZB%Uwkam6;$QL14fI@{8#-;ywT>34OA`S%N zjImgR4CaX(Xo~7&j|Hh|3x{B!MF_#3grHuZDb$Sqb6hN_KOq80Z_Fg2V7dzp zG(*V|V3IHl6p9cKF!caheIaf57%c`0Ln{$*8AK$g`4KE|1P3gEc!n^QOmNgDOmZTq zG8DK#?(lI7A!uxKF%W$mWe@UVrU)A$fDC|wRG@!k85{vhN`$zifTU-TKuK`|t1O6t zkbpFX-b6?N12F}V5ukC-z(7%R;Am_WHmd@T&Y}=p9J7d7dT=x~i%8251~bW&!~^8f z6W|z#L~!%XngPdTVPq*82u~OrsC|ruYphIEM`AdrFhsP%&_I^DBI0Q(W)7T!b--p} zE#XyJRsf70vm}bZU^^VMD2J?z;8kFC;tun`M4U+QfZ2q(Fbe~*^x#!HsBocit1uD| zp^=F2%#cVY#Mcj@G7wWfqLnR7sJVv((5$%>OE@0P@9{t9cO01C<3YjjgclRM;8+Y4 zi}0}sE*ml9=W;0m$V4c4mQZq#!6L~KkUnC$7ni|tz|^K7(Rt{cJeLdt4snV^{Cp7x z72%sA*;*j-r83~CLJSo5Guu#)0YrRmp@aZ3lOaOn1}O<*23EP1K$FOjl)&o~d?*=` zSi*epOc8XJz(8z~wiy=262?Rc3b7SAgiaGkq&DJfhESalQ$IutxRJj{0;^0sXZ_FgOEH6)SlNsWVHop%<5GkW z2;67`xG4*ZY$~WIsiKOqK+6_R!$7GBVS%Wk*a|DkN>p?Zuwa>+hG4*&6|8ZIejpB1 z5UigiyjrvjSdA_NmLl*H473DH^jJOc04xK-B^>>TSVuqMY=I^!iBDF@0BOGTXD6^4 zNC!fsi-d3kWo;P-N=FE8A|dRALS%@A029hG19&-Bq=r4J23q^E;57?GGZBqu;vS-w zG7Ca6s4TU!>$bM%@Gq8h#C0QaNURRYMtBMSqq1{5A(9?KO# zj-V|4p>_+aE)^I=P5csu5Y)Q~3mefp;p?6m1H6fWm9i*NyG4s1Ct#OJU}+T7 z4Of)GYud`;HGysD^a2cs1uN;b7-)@fJ=g}K##!i!@-bHk7t?FY;DW|-xFE0*r3w|z zY3ndh0YV5RA&r2_MM$-6oC?fo>&oEufNH&n$^%g0Y++Ew)*}QD5tXZus%)GJhk**q z;0=IkgNP~&M9M}Cv;iT6iAdapBwNQwFwjOE5#EOgmo ztQH2^1Xgm06Z$6T)Cd+5ftGNkC`T%l5emH77%ss;C8EV}C0HthVZqSg4HpzRKM;eF zNVO^Owl;&GU0jWzcAtym!p^pEDF)gsma|b02BaWC&{s%=AzsOPf(0AuV-Uu|HKdow zxlU*Z_(}kk7Gx9L_=q+YDb_+70g(q7i-fp_^U(3o;TpjQB?8DB2T}lWG8OWsB5mlR z(1{^{=HY0tn^2A|<7p7qD1baX1qKobUr9ls26FvWB}3aus7s?z85*h#1}bHB zEA)Wa-uf#iw=qs-<9H7+g6kN5+c-WH;9bV><>Po_8yc$U;;$mM8^H=wM5`MN4(b+o zmP) z2}pK`e3lIif{dla`0$I_bFGGRA zr%-#)2W4=b_$@2&FW<82el8@$Z&`Z~SFY%Nt^Q9IB@3VcQ0johdj-$}Abd0t1MRDT z_k(c^5P|`!)_wp71W*uoY6}e2fEHu~Ey%`uC?sVf`nmvw!q$?sYO!D`9qerkflpKp z3ZR96A{MYd^e5dLf$ojtx*x_sjX!l?B-H)rxbBC?b=S0nkAaLnCYqjsb&m-%`3T75 zCJfXxrY%Xdv^W9^t#~O0iY-~B_t8J=EmHaz>gi_m14u%g1O_^eeu_whK&qb*;eatt zj(@laodVi{uJOPMEfsJp38*bAVeCjEl4`X`wOB0y6aq3+e(deR6RRKrY}X3xE3}ap z3EZ6qYc0To4eWBpn*xCkg3f|j3}Cnb)3!{CGJp*P)g1I}7s`+TWH@IFw`0MFrM~<` zKXB0p+c)4dZzhAX)C&EiSD!+Uj9fwmZKLdb{ zxQ*gxirZ*^0{|$`vHmD6*z1xo5#v!AW&=R~&^Fln685(QS1SNx$rZ3X~T9+W>*+>QZP7JxB6i^X`fKkB0~T{tM-ITiJzM7{V~ocQ@k za7Ekb-*Eu30MKy`0T>%+7iiPP_#NPi$_oL=13(3UjuQ#M4gjhL`rHfv%4fc~jrO4d z&;x+tQ6Hc_N82O-W3e+qj6?fNx+JktnLPoZIniJmO zf9_lfJO1ew?TQ8aU34jwmv9G5#7n%FLx%t!|8wU?$PF6Xtr6Xg?ZMC`QBNpkp*j%# zS9i(;@}AtXpRq9Ll>U0u4$@hC@E`q?6H1Rsk&5B-xwB9zKjAZM3LF;pbGs@mECq+| z52X;o!oc1Q*p&qswXsbpbTict-Tgr~Nrf9-Dbir?k;h@D$cQ(v0AFRHH1bqVQXGQ< z_7N#!6M;uM;vr?k+itNb(xQzwU=LPY3N*GwhKi?=g<40ri-~HdKouDp?5R;$JPHHs z+j(*#QNO1HAOJ`Jfco_ufIs{C&++hQUytQ<1Lz+urrigw&HzwuU>{hxzn(a@)0TpdO60@? zbRsilBIt!Sz%wSgF`6O=5cDKICyW)3`YIOimF97h5+j+5CFUFX^T3!!3>KYDk77j` z`EsK8DS*m|7sKK3!DgO;aHH9X8^d9;S*b=~N1tZ|HV-3XjN(`k;+8Osj8NAaGE-wE zoFbw@jhSqp1+w?FM{3#Ckf61b?*_d){_WK9l3EuMdKsS z5-G?09xrX?YGv0A1u!zLrctrZ)QhPZ1}9I|Z&I^-N9WH1U5 zwLgYyI#!f4Cr6nW-FQ3FGFtYjVukI(q?se0Ti?ijE8TVSwb@kmP*L?_I};f%lb6Xe zN1Q(1KN}A=DdTQcnAvc`-^toO4PJioMdRv_r~4n}nTT)smm9J@Me6k?M?gfc5guIcg?iEdD3Rs>n1kWn}%z*+frQiM84tYJqv{ICtERh zFp7tpU&E^mI``j+x?M3l*;ZlgD%mR!&zH1xO~*t(ot@%#J~hVb?8>nF=FNs5YN}ec zl=t6ZTd1@;*4)z_>V4FD;9-b~@ulU{DxuN&aw8}2!ADh&WLCT~sIh)?*X1l>G~kt= zzxFfa!cDH*6QfN%oduOVc31tZRaMXT#%N>eu3Ow!-<_Qq5K+iJb3Fa2Ud*}L;3 z!ELT`JAdx1ZT1ycek|Vg*4g*Hk<^Y4(%u#sZ_J0VHO`A}E0_k~iW@l5bd>UnZt(L`XCh49x4f}dIe#YCx?`Pm-M#>i5f{~Kb zWis1!N+Vi5uhU%WH$u4g^G>_%x084oa5wbkh43C(N!l>>wn_(MirLqW<4@1YwfRyP z`V>H!7N$iy-A7DoeX>WLpPwWjB}9BK#eV!+cr=uEo@GBf^AxV+QS{Kr){M?M>{mAK zyPs^B;&D#O=XH0tOv8S89Sz*%%gC2hGX)m%K=+j;Sh1@|lE&u+`dT@~8c+Ev8Q-?1VGdq2oD#^DUi5LH<%UjujqgjIr+ZY8edA*%s8`9I z54l)8TiyBewK8nSXa`%tXw@`JR?f7ytNPhEy9O`c$9Wjl zX8MP8(wE|IM2iLfMd3x*ekGGHf_~NYr4BotOUv(SjT~jUKKs^7n_2XE;>Ns{=|)jc zbOXLG3Vgpf`O7I6u)j1kaigK*^7AoFGmUd4v^S>L7fqgjs+4!|+3VZ-)4u40EU{dZ zsO8>U5a+brWcJ3kZWUL*gn4`OZ7!zj)Vz+UOUhG1nl0DN`Wi>@55<0*;~8zoIa~N9 zb-Iu0O}U(~_xPJdLQLd3n@LD_M0qtisl3UN42J+)Mk%+H=)-L!H+jH0toQrVyZbN8;>(G`4;-sVniKATq*8dY-b@!A~nzWTQ7goRCQi`Fsn);YeW zytE;Dh7v*$i>>bT6RtKp;!~w>pTXtV`zSuM(W~CtxvFHziZ5=Ik?^KQ1=itJ$<)v8 zdFpYEL)e<&rZ(AIMF=e^@8K;!*IfG|e9Il2 z?>84YuEmF%C*ca?Ow+w9yVXE0ehdkQ>Z!M16+^SJBG^{S7xk*<4d zkGM2>&nnOq=of~KmOD5M^-VhbUgCPKXZO(3bG?(VJ1Ko>f0@=^I%1Y@wa0oo)U4eg z>Gmyi-#es>*Up!54D0sWHc#@(@*g+%1QnlF&>6bx)VPlDGQ{pXQM$A4wdJz8Yu8(c zU5%&--LhK!rFW_KgPaR*<$DeLJ}Bsv@zSo;q<#vJ<;t~pxbwgGuBEtKh@@l{v8Is7 zz7x%#;XiD4EuPVr5VBEaxlC_`@5&C@-1{8DajW%bUTA+ethU}L;Mf+HTkvmW+pXbl z8^o=<3$JiE{)6>sk>iu;In#}{NRf44f2fi7(&L#YG?=J6Hy2NNoR#U<@yF5+yZWBI z8=@7iySL1K{guxrb5H+}P>6Iq-H{|~U9bG%?w~^y;l?xKwu`IX4pdg_C{SK`ZeJj| zVWH~$&ePO4Yqb9Gy3p(06rHtmf;~>hLQycidfStdIX+$?j;HnNcHl4T#7&O5l((Cu6HBGHHL73`>6c6zGum9uHSa(cvv=1rP2xCKKAOkxf-mHbbd80z&1sT*#H%OU0N8^P{_7QC<3 z9FD|z?Tj3$ku3GF9_-9)GWOqD^wCJiW6>;MuOGL4%)dM?_w*f|e671}wMN5Jdx z7uD-L>kQXu^Vl_H7I36a$K)dSXuI~8SC)MTBZAJUBv)3g)i?PuLmArfmX`N@HZ3md z6xdFC*v#dadH3kg`b@mqL(ZS*v(@DGm$0(eb+xgz(uDGz@^7<`=JgdetdNi!S)Q8E z@Lu+WwfphmOVj%jtctok4+*Aix*D~M_{D)HJ*Vlh+a^~P`}1AW`xGq@sKvQ+!ojRT z&ZFAc&u><6XXvGD9<|}IZ2uc%P&fFn>MeMefX;OZ2tR(*Bi?1@AKl$^WqLEn#a4RwcU@OwxTXN`M5&@ zk(?cW`WzdI=Y~qcl4vX8CX6wUXnJ26dKnmjx0YU}m)KlJynEAgiK zybpQ^j@iYRNy0ZK53{bD|6$1LEnhyrE!^c@zefMr_3#bH~}o*E^{D8M;=_ zPo!PCl4cR?@_3S*W}ZLYh^k>8++jR0`N;>bYfGn}OYos?HuXJyQ?kFpAQ$K>^ECSvazh6e;uf?Y>`-Ylcru5zZ|c($pE8&1$Ez)NUl|Of zl|`k8I-d?!9aSS3Z2a*4g=NpejT#@UD0Vx%nX5zCrb?$gj6VM^e-P` z?0R@&!3(DW>c(f8g8tF zj&93jX*YJHZHnRrt(xwOY3|uM7muZ%w{T)hR!5j;Ca9eEDSLW#9WhmsL;OTr zTQeu`Y1@>1!Fykw1%2DMlsz{i`0GsSE$SRl*WUTv5(&|(MqUgiC$iH0dz3n{ee}Z% zv-?ZPvuGzp{8 z|4Fu1yUFp4R`ZLt^Umr@3zUPdT%c$THf?Q1_Ib!^r|rVuJfv+F+(o;R=vu>&Hrw%?ycfnO$Du%-@9uwGCke`hVt95v>r;(XOpp$k8((tX6 zUC}t0rc*|cmcUWh#r^(j`rR$JA zVb7@<`o1}RtX%}Q4W)LblfIIhzXsb~P}h-PIiPc}JhJ7gc5|siLTDS^@!fq8l8boL zpH6$Qi}k7b>{&gj5K7+xJoac*u;ho$D;+fUv=)9Y;VW*b@!K!C`m(vzp4~N0@IzX? zq}H}7BhzixGb+j!zGC*&m`iwRt-P>5nq+vQI;)eY=V9d*TwR?thwgsfbmB<;o_)j< zi`+tq$3iO!*++ZZ>yW`m2^(f|9onjCii3pBH~IrtPQ@*7R=mLfN}c0fJ7=m(f|~og zkP{9}{u0G@R=~>r+rtfhESsF8g!kqQsApe1y;VV~*gt5E=JcFB`h$j*p_>kCXX@4I zy9J-Pl=;%pUkO)Nr$6|-+#BE}_3G-K<-LzzDpgLP1q2NkEI2uHaS$%hKZwH$2;yAa zQ(x@$VdiUtIvp#2rJ=spB>y02PfZZB;muBeC2fDdpu$G(ruM8Pe}d*F{}Q*oEjbsb z6f>2y=UuLkjbWu0NL}pDtgy;=cyQw2xqCA*FFihquWj+SPsy%!PIS#BJzr<@X>iGW z{h)0LR5_Um)hmfdg7o3xCixq!itggz| zUTHAJGt5nQ!MP&IppfXcdbWRCH8(&e>|6KcSGSzF&H?A`GK0 z;~j8hx}@I0W`B8h<6+)c*v}dCe+~M7UDH!nzpqAc^Gjb)2&b=pU!eY;*S06?<>+6` z4q26)1Z=AF>*Y2ob-YSFu+PJxZ};LC13}lQud3xX*0_fx8_HgMHTWXr%R#H$g%UxN zmuI}mfSRiY7IJu&+dght=${=pg=bB1oVo58erf%(EAflkG*Ye@49>mUPa4|gDKi6BV2_O|R+ZUp+!;V4AKtQr-|zfYcUG=7W*FMPctFX|K-cI}?VHAG$jEf3 zWvXRK)he?mw%b(m<#yI;_`kX5VOcV>ZeXCx*7izWX%6d@;tI|5?YmSZ_v)V|J{(>( z*#1(!f+2nQd7|{D_x#)3lY>t;vvx%0Y~CREe4|OfftvKODPJr`Zz@$Evy`x^GziZ1 zkSuRe$tz*`81!03H3oEOxf;3*UpE>NTndxYmkL|i>(00H#ru3-Q(4OhkvSs?0Ye!m4W=Ng-p=hEyarx|3A)Qi^S=Q?_ z8LMVo`<~Id_)2wje|y(#=4s`s9zkM(tNWdTu40dmX|Vdtq0ds))IWxXd{yP2?YepX!93fDqLoiJBu`JX zDk`ye*VLVz)uc6{?%3JoCvXaiyRLDz-LY?-cpc}dV6NISgYkD~lJ8~jJS zdMjT#CRRM|ePBMrq}*v__=8G*^=p}#@NI8xRb!g~hEZBD2W{=ML zNyZuF)s$e0`VcN}~fMBVUtn;gG=_qxoO?Rys( z##VAK>UI+p9-M+IdlDvoQB%w+R<~uoyl(9GR(09!{a-GG8%cU#*hZ^c>M~@OU zhRqZ;O{$DOnCN}pTVOQn&}6;M9a?)7i_gl#GPBlcb{53+6`tpXC)shFR$Pd2YoiV7 zhPvsU0FAvm8`ml1UwWv%alhFun$i`e;xh*{-r?F39`&!6c-C~r+Tq@+M@t5Agn-bv z3MaZ=V$1BDOu7EjJ~M)Sz?J>Wj#Y+jb=Y9iBHeE`tfp=B{Pw9UugecoUu=={|Kn^r zdqQ64i(Xr>wVNht1kk#s!Pd1^7hW{xm#F2R47zacmCpL(?PsnS zVRv^N;Y`w*-(-gCFYybVtYEZwNs{`qrY>2>zEZQ45yjB(oMFqh&YdHRdaaYpi_ba~ z_{^sD)ygNqAMcb5e(E%Nwf*ypif3*4-+69_=RN5>PwP&XUlHmUq<($iMe64DubVX? zE7z@S-nAa~I>MB_7cRARw)DhG!aDD8?K{~>b7Q&g*#axZ-I2&G#lz>imWNxP+Vq6VHN_Gq2BETVthVc`#mO_+_^9j??{XhQ9=C2 zJrhY|Yr1Kzu)BRJsXF~f^B4b~Fz%~Rk4`LuRp9bWB5bG(cU3`KYH#IkHLulkPG<8z z++xO9-wm>0oO+^HHTT|OJExt>b2kQbZ&%3N+?(b3!N;n4>A<$@Qg7cm_$?_jh^0QX zgbL;zoHpZ2VaMKr?qlZlJo=|K`HW#PB%?vYRf_-sb*n%a3+yie#vN!sa_hWv4%y#U^O6jOU^T0&%2 z5gayU_jT0^y$5E>7Srw|6kd3d9-yc?Io;d;*&%N6m1qYm+lr+6j7~MGPtGzW+@ADX zQJ5pftEvcp=tKVB>wC45-p#pX3Hp@1FYAu>DX=|lk-xl3-R@i6H~bbt{w9O-4$WCJ z_p2O^%TukcsPNzg!;zT-pA>>xSDT;Se)x^f5$$DDouUms+>M+& z;uVC zb~D`~DOYngG$-xaLR!_eMs3>?dbPLh!Ykh$U#>|wdOJaim`n=W?6^MI_PpLA=^Iwg zQmSq(jcXxgyD;lZB_9;`eNue6{mWB4!*TsU?TH~pmz3*tt;lT79q$+VR#SRUF5Umf zgb(J0`wrdayDvr*lyeRVHsq48$H%_b8+y)hxWB5W_YbuR^cO21JbNYW)A?eLjGgbY zl@s>e(VSL2e{uk@y4I9{O#PSiY3Z93>^x6g3a*RoJ+RJ1usKL?^RCv-EBZ%t+0$Y2 zH0!Ffr_$9I=5gPX6<)vFcFX6pd;HSXI^R#}rrW2IYmy5{?T|NY;$wMOI={-hAPm>i zaV3^5=@-S@wqgC#YU<>iy%^t%?}A)AlPX=`uGs93?QQY**PhlUO;J4QePQWjx7Cl% z-6E3u8ssb@)=1nq`TjwS{pxiA?Ss54yR$FL--)>VLN!n@;#Cq}Osjvh_;f`yZo0>| zYx||BF<%ddJCkY}dvQ+jO82X>yKcCL_uPCtA){`(Y+_+-@bOP!;eO0&EvdqGlg0Ry6g6u=jv)aB>HXTm3U;OC6<7v9bmzd3s z?=qXdvGvqm$sL|KfvLuq+*Rqt&-UNb2|A}ZtG91MRgLlTt~oY=pZv`F-LuzkKe&w1 zXg_Na&+hU^=|`*YmKb|SZ57N+%_$VrZ#=ctePqM4fOAI+X2#xg91bO%JHG4kko$;N ze|V7q8Z|DrOO&Vf-W2q`sQ&0Rs&K2Jzw^nN`F|W*_4UQ0-EM_f%!6O{-8ho@=tj@# znUNniJh>L!u}b@TkxQbTb@SV{0{*aVg2VgUEsAUQy?0N|T~YgfOK5Am4s&Jd@M3rN zyeVg=9n^n*^Tz0*H+$yM>+UGsSwMVuev)-a;-`yPi`SdleoUFDHY@(d(nU6FXM{~$ zab};Qx9|6T#lF!ceBI(_N9Uf1I=cN6ANyoz6SeLT;n5kbS*h5w$yp664Dv7*hKHwK z+3IOr9@_Fcc!Yns|I1ZmdsRWpz^jE8OO{j~n=~9bNPZrB`@!9NaNzT%Dz6iJ4|F%X zO$i#ESaIy&MF}TPBoAz3zeV>^aaU8zHWk@&?i&+V8601?sAgL%`Q@&i854FZ9!$m` zl!gf1F}rZ*1U3S{>Kz{Qca4UO1nc@obuGwhzVLbO!=VS8o!&(3+j4ixzVKIu2Z~*5 z_grLreDw5Ml;X=7`_zw3(6DqpI1=@|#G1@4th=_0`+n^x^Qe?2(__WdJY6TE;=6+_ zwWsrIE_S}z>=18axRSCtt;y$DQspdDM_oPEsN%%(!kdm77bDL#%nmZl%d0OwKB8T} zcfZN5+*3~)b{e!Vy7EAilN(ff;c8H=>>s%DlLa}t^_j0%hrUU_kzIL4{@or-iXn`>dU7a|J9=l$$)!2xT9?cAd{7?<_^5Cs zAmF8Z3T6ZD*lIKF_>TjH=`#*|9GDnqC42mn@sXY_RNr9iHNAngU8mKbW(>c{IZT(- z^CWFw>s1uY8udGDKJw1y`MB+)VVZ&<+Z?#%o%(2cDpWkBq!_A`(C;rN9s*h z|N783OP`PK#2c4Pw|nzmsZo>qxOLx=x`u}f1gmr`L7m_ zP7PvJeA0cZgBidC<1y+BNqIL?qvSoar~{M;4BI=G5$XuOiUIFPCWqe$4}^pRrm`lN&crg zjScfF-QUP8#ZThKF~^K9Ej&cT5c)~P0{0t(OL7*A^~e5=!^T7bo)H=HKUU_iB@ny( z|3XVi5L*8;TK>uy``5yY&JX;1&1C@6St*B zzriy01pN_^u{Qd%EMx6|FgvBdzx+^$m{Ru7zhNT635z8+5S}Tcg_}1ia(E<{=L@FuPnr!|7Io<_4u7me>0E#I*3U8{|(%4gLk}& zVg5f%Ga|L6BUpT3WIE>Og#Is%_}{b9KlQ_ZVatD+5&mY%{?ArCW3m3Lt8gNze;0=T zcttSAS#%w{6E7aM8B0V;6dTx{1r9dj3p^RKJ*|K=nr;yRw={}Pvf zv!M9T;u7fdPZz(xMC6|{UsS5mL-E4jTcZCDtt?r5mp+r7NRL(4C+wtE-2P#>e8hcs@P}pMp=t^YBaY z8}Q5U%kf$Gb@*-g?f5GE4!kcu03V27fUm(H#UH~v;2rVJ63TyZV%{%}i|VQX0R4V} R)WlH<1bpd$f_{_f{{Z0muBZS2 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP1.Pool.State.beam b/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP1.Pool.State.beam new file mode 100644 index 0000000000000000000000000000000000000000..80918c65b8d72d81867f3eeb7329d96d9c62c06e GIT binary patch literal 3124 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 WO$LBGmo6pu9R;H(D18(fLj5lU55SxN literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP1.PoolMetrics.beam b/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP1.PoolMetrics.beam new file mode 100644 index 0000000000000000000000000000000000000000..8df34d451822f94af09adca2d76f2ba19c762f00 GIT binary patch literal 7348 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP2.Pool.beam b/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP2.Pool.beam new file mode 100644 index 0000000000000000000000000000000000000000..592579a49cdb70f33fb5f165da90a88d10c55cbf GIT binary patch literal 55556 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 GApalc1Sg&V literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP2.PoolMetrics.beam b/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP2.PoolMetrics.beam new file mode 100644 index 0000000000000000000000000000000000000000..37414608d6c02eda7752f2b983e5f8af4ac1a7ce GIT binary patch literal 6592 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP2.RequestStream.beam b/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.HTTP2.RequestStream.beam new file mode 100644 index 0000000000000000000000000000000000000000..8561ca0e283d87dca6acdc37f7065c319d4a55fb GIT binary patch literal 8040 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.Pool.beam b/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.Pool.beam new file mode 100644 index 0000000000000000000000000000000000000000..bb3a78fd899f7c8e39003111165dd4650ad18d5d GIT binary patch literal 4152 zcmcH+2~<i3Xa-z~SS^;h28vNZylXgyNz!>dF)G4%yb@S0mx=ib zIf6?CSdvsMK}v*(RE7v(IU=k^)KW|)$9YLY&s>oL70AUHipM6w0vU$817d6vCR9j} zSX?es2;}alSQ3lKBrqEHC=QYHUNbeGXog|F{t?Su#5hletW_Ym9Q2|RL=zYfL6y03 zj3**` zvk$OM+=Fb$Y%V*{zO(%RU4hDL6?=^c(=%02lzK10Vw+{-FT?2mlKJdlEMWy~!j# zB@c1cZ`iS#pkGzG(m~G9{pe;>oJ% zZ|)=*N&pPw%p}k<@67b{rEGJ}%<)cdK6_y)F)7>3c!~;gO(4|CDxKGxR7IC7q!NUO zi&GFnT{|<81QB6a{i!q+kswJ3Dknt$iv$P?mSahTgxR0kAp7{dMIAv73 z!t{hcp#uM8!DMt4O;+C;#qZgsPEGIa^6`JkD3Q?rr@en)5^uE&fvNu;*@ejoe=P&l zsYUm{!u?DCYHF>&)hHSMyRwjwKrHhWnq{U%tkcP=3G0A?K2cnypp5fyIV@M;Fc}aH z1u!Z=B%tmkqk^d-3*sZI7;loa2+N_EfH)S2dPHn^8vw+aL!3$0len2LxEcW5@wc5w zQR1j3A1IS#_JsovW6Vy}z3L%p+)}#&#Ooi7ihz8ZMxH_htwdxvsH=%2$^ut+g7CV| z;)D?`l^Kfha4D=pd6PE}8BZ$11PG3+bVV{O36N!oN*_oO2;d=77!ald0;~Yn1#uE_ zIY|I^b#PGB1xO+()GZ1JKHY?37==Y*ky|7tlBs-r}abJ#$ zekknd++IrcD&B;*jE3e8WIc%3(K|P|{F$Y{suOG1i>m5+p)kqMlbFvoZ#*@i=l!hQ zD&|69|6S9DqQ};L>h2x1^>SGBbm zG`0;}=oPll_>%=?4X3hC=dCFz|7j@Zl7n{phKiu*B=Y?hF=ximDI+Jd zHA^gtl27T+<9d*1-x~S4%fHZW7UNR>`_)3b{O*9n%GAd?k)e;8{eMuj%FR>uX$N$= z*)j|#ifu=&y2oOJ4a_{RoqxvEztb1l&Waht2T#A#d~VhzFQ!+Dm$V^g4#l2Sm$TFn zwagn1++`~q(jDHEYg$ptI~X;}aX55mw3Z)}t}N4r!a^-6P2aXwjA!4N_}OXqVOoZ|&qe z3O0+(GVjxVIX8P`G}34pzA3_~((zlng3sFMSh`LR1Kr66xrrCv#!ls@*?K!oqaDD(M_qvdzBFj9VUkT>5&7s>Yg=+-l_|z zT3wsUS+-E@S@=Me{%U4&){X}{lCOQUSlD!RMA-a-rsli8y$u_intKck^s;!=yp)og zd3ht3-#vUg)vnT|^+s{mPkP-cS6f8I8H)aZ=e;`9d9dX;o%=8oRa+gnKs z`unoW5L98kR59=S_ssN8ayN=@Kfgt5lUm#pT~SzXXC2jUp17b2!K9qIU-Y|}`?!kVwX56gMqa&qSzqJ%=UUEPIfdB)QD4Euv2|YwB?Bvh z;(4LTR_nEng^bQrZ@5=$IphxwsI#I2M~`Mm%ff=r&xq(8q6@ z{a-3%H}$(eqE*m^cl&9rWAhKqb&080&@t;HgJ*tT-sv##WG{b+VQpM)_i@7_sk5Z= z#dE*SdR$S*wyMgX$`920>oszH&h*?~>zvwxMo>dAF6O({>#xI!}~3L!ApbmJ#uo@eF^)aEyr zJ?Q9Je9pcwtb=RwkX*MlL{`1ry{GbYn!e|Ehi~|YjRrov(BE#NbS;~eRydx0pmR&u zXidi4v${o#=e0WAIr-I<&h@06TY-@yVHhI_6woj~9IK?_D5+z*ruyd#j-fUCrm+08_a)#0fD2xhDVs literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.PoolManager.beam b/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.PoolManager.beam new file mode 100644 index 0000000000000000000000000000000000000000..58f79a95383b40e9594bb068b793d67013c4b648 GIT binary patch literal 16884 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 Dw$Z2} literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.Request.beam b/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.Request.beam new file mode 100644 index 0000000000000000000000000000000000000000..bc8fc0896240d651c78d3fa22f9b4c2524841716 GIT binary patch literal 12128 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.Response.beam b/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.Response.beam new file mode 100644 index 0000000000000000000000000000000000000000..4cee483b7d86d5964205d258d72d82948eedb7ba GIT binary patch literal 2976 zcmZ`*2Uru?7M@801QZzv-PH|XS0ErLSm}r>MT&x}Bq5o=gk&afW`vcyA#0n`R@1qbMHOvo^xjAoEs1t?gBxh za(w)~gT3h}4+w(w1_uY9b1nQ8STaUB1z@-&!6_W2R0K|;sX`%!%Lt*cNKDft7N@2G zLqaH3m;x=5qAC)Vh-p-+MUzzoNmD|l)P09cjZ0_@Xp59$2}w`_Koltnsak=GD4JAD zXc0;(#CUv9JW30P7`ju6gu)@dP^caD#vfNJMI{5*;uBL69#YML|9$fF%OJj7k7o04|K=LM$_T z1m@3W@3!Kaxn}regsbCFGHRpx$BYC1Rqn9BD-dGyU@tE-@C@?`M8G8S3gm-H<;4Qe zR4+CUFhlqdyh9%`wt4#J1II=75W5twWG(K^>mCuauuJWpc__8b6yp0PR4hYdOSuo3n?Jsw+N z#diRQa?KF|{}9`XZ^Yw;AOe_cq0cwAg1MGD6BfXP)qG=1m}{-uTY`gZ<{MkHBWN;` zNl=hd#msI19DvaP#sDk;696WUY=99uJiImsGwh$N)Aa&tJpfaNHas(HW-vC!05EjM zF0*FFC;;XRhRzC5+jP8a!AU11TyK zs};0{jbjRpo(w}3QjI=Ei)l6WxrCB2F(Sc&Mm4vr+!i$)U;JDhkS!@8Q`|)a=-@i21y_-pn@bqY)>Zv zLm*VTilTdA8XKGtQYx_q7YjI!iGzE|y_3=LkYZYk-zBl|T?QhQ~XiNhnS`s}cwl z$C8~v?W3G!Os#ZQU~$7Ma=2(Vc>)1Bajo#vO?Ek1N5Gww>EP&NJkm(VLf$L8i=iEy~L_G?20Ee`x;cvO|IA^i!pAElYhxuQkC7 z({@F!94idNQ>N+_L|b2vI=e+%H`mcV=Zdrvi!UoHgo6aN>`tnT+vzPnU$7&R-DzeX zY}K5JEY{m~o#X0yuqyniuZIke{{CpOb%n+KmW{^~^_Skd%=5S2mzC4d<_-srC%1>b zk2W%Kbf59G~GX?)-UK#ee-Mml(iL8oo%kJebv*@J=H1# zDN*wWF_{3@;U zbmr;F&z&lNu9+ly)Aef!?y|DnHZ`WP#KZOCoOjhPw+9#3-w7Kps@!S$G8@Y^JzxKN ztf#?QGQ3OmHtRuLdFdDc?jxTKbnh7@8GPR0BGaFkZ{+rP zpf%)SfcDIv4}0oYw@3afW>>X>)iFQbWzWP3ZLQxIT8quPyCbLp`omB2B#6rEMrfLUo-odO53Rt)qKlje(rB*Q~naUTA7_r-^&O zvMaLubk7<0$Q|DqXZNiSi9K~ftCy8GkQMo~cli&y*W}!8v|ZW$a&dA%Y{7&}rupTf zJDoMQ<&7_XE`~QOgbN$i-Ss0R6etb?=09QalJjlH%T*91pTX&v49) zN0U_#GrjVrSE%=#%#Sdup6WB8v8^<;v*S#jTOs^o%Q*MG6Lr5ky&&xRBNVTSxD~FbiC$hA3=}zC=M#sFY#ojWmlP zDUO&Xl#B&64$AhhCTOJcPfz>*qF--P@}Vv@q^2K-(ZCfki0G5H3TsB_EX{|8^|=B| zE(ewVi@4!o7rzp>F4!Tqfpj%4R$>wjhek=|a6-NyGIf3lxLAV85nyB(f(6qfVY4*I X;;Rh;Fe6v17(F8Zrmw;#gAnvT(_jIS literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.SSL.beam b/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.SSL.beam new file mode 100644 index 0000000000000000000000000000000000000000..88e89fd1aff18fd650556c9d876d37510c24f612 GIT binary patch literal 2872 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 L-*1NH5Cr`TTEzH& literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.Telemetry.beam b/phoenix/_build/prod/lib/finch/ebin/Elixir.Finch.Telemetry.beam new file mode 100644 index 0000000000000000000000000000000000000000..2c80c44f6ecd76f476eb55bc120de92381786213 GIT binary patch literal 6828 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 SJ}+6#2$&Zz0x(!8F#iShsGL0j literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/finch/ebin/finch.app b/phoenix/_build/prod/lib/finch/ebin/finch.app new file mode 100644 index 0000000..eaab183 --- /dev/null +++ b/phoenix/_build/prod/lib/finch/ebin/finch.app @@ -0,0 +1,17 @@ +{application,finch, + [{modules,['Elixir.Finch','Elixir.Finch.Error', + 'Elixir.Finch.HTTP1.Conn','Elixir.Finch.HTTP1.Pool', + 'Elixir.Finch.HTTP1.Pool.State', + 'Elixir.Finch.HTTP1.PoolMetrics', + 'Elixir.Finch.HTTP2.Pool', + 'Elixir.Finch.HTTP2.PoolMetrics', + 'Elixir.Finch.HTTP2.RequestStream', + 'Elixir.Finch.Pool','Elixir.Finch.PoolManager', + 'Elixir.Finch.Request','Elixir.Finch.Response', + 'Elixir.Finch.SSL','Elixir.Finch.Telemetry']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir,logger,mint,nimble_pool, + nimble_options,telemetry,mime]}, + {description,"An HTTP client focused on performance."}, + {registered,[]}, + {vsn,"0.21.0"}]}. diff --git a/phoenix/_build/prod/lib/hpax/.mix/compile.elixir b/phoenix/_build/prod/lib/hpax/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..0be236fc151e6179394cc1b9ed811b954e384544 GIT binary patch literal 5385 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

    Oezo69MH{}BL}X7A5<(@CwZ)#D z&|)i!EGdeVmis?vN>h{hb$gzF&y(gm_w)I@?|ILA-gD;6%=b>8Ypo|Da$v}mY33aB zfQ1u9L>Ni}f#4leYMLi6n8(*<&of`F%?@;R_2PO*+S~KIU488B4{-wm_&mqJ02hB> zCm%0go~O$pXBS_-ixW4%#rcd&u&)n4z~A1>dE9o_KyRl2o{zV`gBRC{@8hovPda${ zI0t&VIQR$f1DyhNy?LGvE__d}x7&9&mjL^=4+%>S&MrRa{-U2O5fRZP@NYi`D^5gIQkBI}HWJ${%ak0ue#(05Kt~t;!nJ`r)*qR6 zb{s?3?7El~!^}(){yWcXh6w!QU^asV|M;4T!ha*p#H8SdbCg9G+xxOOiy4RFSfY}( zEXJ8*$zm+2<5FVES(vVr?DqbwNLGIdWzk5M+Hom;T`f%4MvVmoS+|JK=E2X*MCY;8 zv~Jm`DFeBIBFbh`VsXlSSm!guMOcwyvU&X_MIuE-B>GD!M~d2r>GmHYDI&$lJ0Ye2 zzx7`b`o4s|FVufwqhS(pT2%Ym@v zz*2*#d6%hQPYxq(%WIA;LYNN8~-!|&P zgw?~8%rQkPOo5BZ`(eY^V8ddup@%WK3`~~6l>N7fNUDkUWTPg-b}DY@zx57Lal`(N zJ43|{|2Hm=ij)60?gEAdeiwf)*;oUk&UIo+E!*FwKj1{KE z#YX#Kqt;-WvDnDNm_`PsehnM(6jOVLss6xJ7)%u!dlFQ8sx&}JDo~9EC`AR1paBk{ z0@Z1N(o~=Z4N!&(97zL|r2;i+fO1seC>r2UDsVIna2OS+MFSj81&*Ns%2RhFpa}1R9pH)32d{4=1FB@p2Q}giIS!!F;%G| z23c5}f-<3?OiUEM81$5ZjhDd2F_`0M{86Jyji&*QpaLflL7GU7^h6YCX&MoAs>nn_ zWJ=da6H%Tbdk8dO=AaQX1Aj167;$45aYF{vFbiwL>k@6%CE6N^O_4QI!Ho2qa!dkyN1ZUz=UyOV~8g!zMGBlWC+hsZumkBXblLXiB3vnhG?d0cuf!<}|=D zRNxe%SEhIET4KF39j=OGuxUURvjB3~R0eY@jV4ajw4ecMQ-RZHfI3v*bi&J7gqIy7 z2YRWD%|Z*LnGzUV1)ITO&Y%(0r3$iXfO=HmOd8-=DsUFzqV+!lX)Rj@hGJG=7&Z?K z$L0cgYz|PsI6x7b4U{lT2Gf$phCbECY#N{e7096hj-vwS&;Z9%fpckq6R5y>G{A{e zpcM_!kP5UWB0HamEL#36i=yQ}HXp73m(hq!qKeEXL>3Vu9d(|lK8s+DZ^9PBinD;h zT#$u9jBkGyG$bwR%M7K_H=^nADUFM~$Il&Z0W z&}ehAW6)}0&_QKDv$STKQAKQtmM*1+YbgpB-8$2pDzcOi;S(Yq83a4u4CBi(#{fIb z4=l%gfj#B}958Rd#k_zc<_VlI58#Zg04^90xMJ?W4RZtTm@D96E?@=b3_LI=;E6c` zFN_PkF$ds-*#lo}Iq<{m03Tb%VA5sh6sm)EG%=k@1umxnT2O)ZG{9+8paTtXIu*#J z0nVTT9ch4UD$t1rIFkx=rUA~P0$pf;mQksy8QQVa!h%qBP6w$HWj19Hg_M&p?SRWy_k4eJPI`{iI545l892A8T4 zMrednTNjR6N4II>NEHbuL?Wn;L_kOAt|OeN8WDs>B-N2fGxt1o%u2ju+G(a~h@IM-$I~BN| z@NxsSr5j*N>E>A;RbvC85k+WpUDZUvN)mu=0)f~@26H2gPb;W;n`nR@RA3Zgc?UFTHgYAsPb}*PbXk7BAs_mo!22g>!2(!DXzVAl9)9oJyQbl$XBJo|L2z@uh z;^FpD5Vju#V{sq^+Xq%*d%AS!Sl4KSDrjH3aDP=WhtfUBs$ zc+`G;2GRbGRSa>-htFuAh7NQD$E@uV`2b3>a2gA%sTK|p^Kt?q0@np_)d4r$w6Fvl zwMe>YAe5?+KxiB!G|+5o*0v{m5Op=(zF8Pmoe(+GHHcc+8PuJ0TL)XHB4-GZb6q__!wWkHhgTJL7JS1p7|aYBr?yh{ z&e8y5sK9fC;Y`ACrz(?)@`&bUF>@PLB$E(1PYuC&6auN>jccU&am=|btcTjaN(g1f-ftP52yQsj+ zG{D_d;1!}tSE)U874;C!ZF=S&s>oGBB)e-|w6JW{Lv%Ymd#NJXgh&q6lN{v9P@3lK zql)AZBG=P1#e5-gtsMbFqk)JG!IZUZ_)r0sK8q^z=KraZNkfY|A_HD z=%qV$7w)^}!+qB~4CWmg%|xnZJ`L~?6?m5hc$f;jM|k=0AF+H0GeH4+0B`HuXE5*6 z=pCWzJ)i+5QGpK$!;h$$@CaoB&GSgiqg0VcgvjHr-fLlx(O^)b@g$il@|X}Q_(w+- zzz}#~PvNHc69)4MjovY;-cuUjaVoHYFx>VWSjV~$=CLyN0^R+7E`dE`FrU$=ouH~c zrvau=fiDQNh18%GqM#|$h@7N~6cQpugh+?)T38YEUWG>E6jh^$&?xR2crC0L)kC@+ z+tXB$VnU>Z+L{v78ahu>sUjtW$m_125cTjiOaX7~6}%VnlEHjQ)3P+G-YXhlIu-bu zFkIHvd!m$;!6KoGl>#;FEf|5lVKCp&Xr7^JzNG=OSEwRi36X}b;e}CT zVGZyi=m+*2)MLNkLp8PVp_&?ad%KFktjfaL@VZ3Q|2|C9AZy0Os{OEU4CXf)>sP7P z=~lMcRA9|tn_YVv+GJoqB(U!cCf(GPLzVhL<6JHkSW9bD1^cOo)iIcLG*Wp~sh>2! zYgFK`zcyJgw#uR`mY5b+FUFvuU#HURX@EDVz~3~$n^a%}kspmjesr2{8sT)KN276z zs?mrvaMA8LhKs^lTZ=PbZnc7D><@$a=P#~HZXp~4Ymva3Rj?)ovx&y=ZK`3qn{s!k zz!n4IFq5tq;dK&RSnPppHPAQX@F0u zzyW{#>zW#aVTr;q349j6@q((s zA~Yy(G-%-xXucUmBT`5eA>L5Hhjev>$k8FPW`4NT8eEd0N%MLFvxurDMPs&@3LHZC z-u7aIFEMSQN561sG~xQwh?G!8qzMr@!gmKk1m16kzR$zu;6iFNE(^498HOg^2INbs z9^DSpD=JWqFs%5G5vB-7*iT#m{KDnIZ+sXWX+s&BL$h#*g(D1RqO_2P#mV2KbQ*qP1BgKRG=0$@M!EuqB}rb z9QVV=Ff{4zpH@+&a2lK6s6g$%HqoS_jGmo@HhrN@2L`Suf$OT^It)#^7agjpYPvLL zYp6iFrQLTbaO~eCZYwo(27XX^a6LGI7-(ih9W^7`<$zC+b>QOT{qS*Xa07;>0gb!0 zR5iL673!$K@idA*sX+Lm0(5Z_;o>~P#d(B_%J?K$>g91mpny+gXilWj`$g3=qyg4b zfs+WsMqOj0g~MKVh^5i^P1P_WG)(^Cya{w(5uXf{aASrh-6K*BRK3YGh8w9s6T+~0 zSLc!IxVfy^VcaYOH)Uv=(y0BRs+rLMo2Wo@!mI^h78OO}elsyPEo99k@Tn^J6o%#$ z8ntGs+Ef}~3l(TVm~ERcP#SlTV@8jV^jRc$&AP(TIFAnxBov&#Kt zM9gL=!&h!K+3;MPZm762%SLLunkH^(qjpFF{_(R>I}?b{f+yj-wRtQNnA7mx2SkiB z3lld}28!^s7(CKlVhUfIwh?F+WH=Ln zEN23cN2NXHFK#8LRlsVc!g@XfC&KRJ^(E=klqk%eS z6wu&kf{~n&K$D{ZMsd`^XwC?r#Zd!eIH~~Wr~qw_GSJ~D0bPzF(Bmk8u^f4z&lwI3 zIK#j=&QLI(BL^mMWWhv^3^3$KgGrnrz=$ISj5(5EGDiZKa9F^UGZ>h01_5&p2BvTZ zf~lMVz=G2sOydABox=n(IQ;;d(-+L-h=W<2KERSA24-_a0f)l?b2uVkE-nD`@K$&M z)B>#WW-uRb0t@gzU?JWJ7U2!R2LBBfEXThCd%OlX z;MIVOe*=zq6>!480%!aSaKS$VSNs!j!z+P1{t@u-4`2me0X*<>;EBHnUidrUjh6u* zycGE2Z-F2F2JrFMz#o4F0`Qk05HA5M@nR5!7lB~B5QN|_z$*MXSdBjep?CoZ!=Hk1 z{0WG_AA?Bz5m$xR{D+!o_1D+2y;&;F%{5FWfZ-LGDO%RRW09)|u zU@LwN#Nc^g8=ecc<2fJ}&jvg2t6(R71?<8vgWdQgum`^g_Tm@7K0FJ=;pf4AJQKv@ z=fDB{EJ(mJz(M>BNW{~@Av_Hn##6x&{4_|yPl2QONsx@EfMfUxa2!7lPTfpk0(oWT!*3_Jmx#SegUcs$6&_k;6z9LU1=feZLva1q}F zF5$buWqcR7g6{-Z@f{!=j|DmSc94s219^B1xQ1^9*YPdj1|AJ=;+w%OJPO>#H-S6& zMv#wh0C(~A;2!=TxR0*`5Ae0%A-)DY!Xv?BJOVty!@*NL3>4s@;2FLeJjYjo7kCIL z#DhT*9t4W$jgZqKExGyNheLxxR4c_5i;63gM%5e`+fv*4` za31)GyMs#H4Sd2~!DrkBe8HW;SKJ9y;f~-N&IQ%D1E|66!FPN)_<`HO&75WMihn7* zCb5OrBuhX&z8GGY*nkFn5op90!d3JFxQd<+SJBpR6>SAq(eoIZ^RhVBYO=chSt5~f z+u_Uoy6`%cDcN71#S*oV`rdyC@t(h?h+cmQ5tb-J&rD6MFRUsIO)HW|%Mxp2`H?JZ z;aOagHD7p^70Fs4JjNajRvH+1)$Xz$%lQ(K4-ER}9$ zd6f{Xc3Yh$#MQ#HI!%b7La^FB>{QFcgkZJzlO7rIa3NUji}0)ravIqx1gpKv zI;CQa@T^Yhu}uip-{AX^QQY1Ong$ug*j~`oN!pHH(0oZJclLrdg0!})7c@1Jw!0TJ zRg$(x2wHn$9X9XC;=Mw!{&t%W8IgUxpm~$DxL(jy$foV@1f} zI_qdRboa^jZ~7{dz9sj9ra;n;^@6s74B&AgXn!N2NJip>5VXH-q1X(xL@ zlP5!Rsu#53B<-{iwDyq1ns@Yes_-nJKn5~R2-@F34kLX`??&sEiMo0nzMbiYrq4t- zGVB?>pt+K?v%R1VC7X1v7c>{rT4pb3a-_BMLeT!^y}VUNB(sE|{p~Ji(#Z?GpgEDW zi@l&ZlC(>`pm9ms4dmyAgx*SewUjVvdPT<-Mzb)Hk7_JTHRQhmh!^p3%W1y0~X_5Q#478I6-2@UlmAtW`(cU-bxH zLxNxT2nJ(FKi>3=UP-p`ZO`aVw?|5QMEj9$m-Pq+oo=DL>lxkYw#56M(Vh08%6mo! zk|C++8QtkN+lL;}Trwmddjx|{8(Nh;qdRTfeCiq9X}{)kk7z5>?JqroL8r}`uRWs8 zN$IK{!JyLy&bJ=XdZcu9H*mK_OGo_;^XnLzHQi|4YFnqhq3_+$^hS)yLHeT?v`!27 z+Ma2e?b8=SucJkEJ+nFjF`SIw&u+BNfk0ox!2BxFVdU5UL=#hjKN;lu|A{8FD@g6% z{}WAUciKK~=o#H! zJ)_A@7`8~yXmS&U&FC3T?wznjdq$I&{A{tF(d3mryHC$(@=Bd8-ZPrKWM=p68BJa( zv-|aoCNGfL%%0KYbukRe8VB1Ud{vn9Ks=^GTgS-DsVS5OwuK zM_pwP`JZUQCGz^3E!{Jk+@xm9^o%CAjoGq2qsiT3wp`C>awC;Jv}ZKAf65-#Gn(AV zWDoBdO>Pph<$FY{kh!VQBUpk2EA|LxkYJ@A!GPRrWGnZKCbzoSDm|mg-4M3w|3nk% z`jJdmwQgwIF`=i|F~&!9V|5!6?@1f#-O$}_!1uGz*w9nyu%RJ5ONC^O6oS>hL7+mm zN3$ENTYD0-O$}z|98t`s8vVvwS=b~Ht%4K5rWkoYVsaB8yB9{ zsbp(+V|5N15e9Pqi>=cQ-7O57?fX5Q3cRlHtWHtT6P`uhuVIfBp0$RIxW4c#a;uGP zAUump+8QT3%Zg-;7oKHKvL*=6(j!?Dg=Ya1Zb#Z03QtoZjZG4sB|)-`gl92Gma!15 z_DAb~kgUnVv)+*`6X97;NtUVbtZO98On6oX$ubv$)jpU3xu43OA_T2Hh=)mIQ-x>6 zk}L}$Sbtq4Hxby=y3slpH8gu_nv(Oz^ls?xMXkL-Ye?5-2+#5(S#051T#_|Yc$O8( znk78ToMc%F&(b4VvxR4=kSvZcto8@^7yES-nmIkwI<{@($jNwa&os^U=N&t(MdqDQ zYrA?T-V{94_Fmz4_@1EhJR7k?Ys9oTR`8W`2K+uwDF)jr?hO1ud5w)&o)~(oP#L{d zD3+%dCa&B5R-xJxwYWUu4IT8Qo#bmh63XxeAGIEr7Mzc4m%RY-8q%GIG^;Sn3w|F>r2rmb6|H%G;6i`~9s=dOKw_w3#uf8bz3;?bl- zCyphbOgWXBo|bXu?77VI7qYHgzH~JwJNH`N&0Du0+<$oQZvLIekDeAjfA*rFsHFIH z>DxE2UcM`@`1qmn^QY=BU%yq=G`2Q3{b~4J|EuNa4?$h+_jPL{562xjef;{xCpX@g z2?VVIK?{7PQy^#-2$}?fKLWuof#9b=@LM3L69{Srf<}R$ULg1(5Htt`-vxpifuLF- z_$Clk2?SpSf-fQ>GrfFaEJYT>-+u5HgTI5|uW0+REd0x8KbGrserTuTVVy7voz5d2 z#l4`tSQ!GBry7v_p>a_cvHov|V4|FdE@JlB`_ z1RjWtTL)Qv+0{=JKM(z z`6Ca1k&jC77qtt;5w!)LW6U*&UqB3x_jdRxw$k4l`ONTUi8$PhyyvI3!~4~iEmu=3 zhbXRq)+Jnm16=stTu*zxi@#4G-^qnQqc+UbS?KS=_t$aealN^&JXf9hKCS^lT)vBr zzq^l50Q3lVS?S^(pyTWAw_$%<>agX1+3*`I~*+Y=~y;G4}c+vyFIPtFwQf`yR^9v`;KGDoA8k zS~uRj9he*!K0bSt9lK$DmDy_E^oD1*18?owv&S$wZh6LH_V1V>E$=+PM;ETiDrjvz zcEmnEq{QNy(xYudcC_+j#{r{bW`E$VM=O1VD1SY1tA2r^HS{{-2 zYTuwiRw?=)TsF28oW5sYa4W#X#_)iGn8G!N-MpXU8=~F?L}(|>8kxOJ?`gdDpw-`! zV;p`Qe){3%+T=-RuT9F{D=yf-=YiXdzW#52&i=J4VD@?TYF|gA39CvZa{tUYfb`7deks@_at^j8>F$_y`;MqRjK$XA6HFJ2%60+L3*8w}fByOC4TQqjoA) zKW@#_FmF5k`ke_9OZbaE>=ZZc=bgPQA|*TM;`TWH57$8!nM>ThJ)4~|!SeUZ_`(-E ztL_*4$uS5FNa9ph*FD{uwS2kJ<+#mPc;VV{HFeop)1Sm_$&5F=d?U5|(AK3#YvU%( znfUIel!uYQjr)C1_gi;ghaZ{rtv>yNhf!;T?Wt+zp0xwSbJO`MeSVBAN|aNq-I*Ly zcBF3P(z$1L*IV06f)QV*ulMe4wUQ$9T*>YG3Qi^qSzm7_9=)CTdDEYn`wQbAg{*(r zH!$UmrN&6ZqNgv6O$x>sFLe6-^F;o2J5CKR^TmNb2j}<}&azXxgk1_9RdlAYIeYH% z^01}W_MV&PDtTr4&Ssue-B)pXTD-~S%h_-D?AiT$+wu#ijxRGB&iGy(^i5tSIhBr;%oh@BY9C(~HRcI=nQ1A29IihcUhW+qToxK+Z6x&yAZiy?t z6YidSd|CM7yw?6URgbTm)N>x4PReUEWBjSQaljRwxCQ#(m?{!pay4{++ze;AX$v8tVCPn)v^K1&=v$CwK!Dp7N5Q-*r(ExdWQ*59AMa-^LJ?mtzJJo? zjSQuR!{SlPs{?Gxlm>;C6`f1aj+z~@N2?w+_91iIe_?LZgJVz!ghk!C^r+ahe^c>b zoIS8+;?621EVL}%*GM6CmC?2|=Hn1g%L3Hzi)9VOw95?^6d@8hmKDLokvdqc38N zdDcgek=HNWoqGwQ#1N{V`&vOTVQh+2b2(vY7U%o6e&{ndXn-%?DuvFjy%`$nc1%4{ zB(%)tLeZ;&vmdyOrZ;KD_S=xtgP!mDn8<`}Ul)GC;(GaPyK9OlSh;qp@BEIvzb=)r zt>tpdZpoU`N%QB|%|v|w?vN+N22}7Sn^#8s_$#$ZpRP%Ad>Hjnu<`N#d zd8`!#AP>uUYXt*|#-0MLGf^{CQb6lnbZ~gCRI?kRiQB^i)FJD4X*4`0;?T0cEKxMH zY@eY!TFP?uhVicjDI_iDyz=phZZ=cM~ zhb(?Ac00*DxCSOyRnTtue+x*g+}xrMhltc~^;MT1-E28`2E|JeH2E*fNQ6lQyJ!tdji4C5*%*z?*VxzD5eY2O^I(`{xCH%-)3&?XZw)9)nI! zoH9Sg6n67QnV9E&O#2ZB1$|73=v+3~`eh&y`J{2vn*E7Pn$Ag@Bu)fs%dt(SM0}2U z-1`wth;GnmP$Le`A6ww2M%d(idA)}qYH+?!AhaItFY_UKv2w-Q2yMa#*wu9q^re3K zDR>EXre?PEwY^SCO@U2zk}f;lE;$OMVSc>{--e<*YeTLiER?V8M{!Hz(l-~w@w~DA z%6*rp18$eJ>g{0(EP5Xv)TqH|syt9Joh#z6uIF`{Ay(~kZK~%2jakp9~K>swV?bAk8 z=Zd4!nf}CCkV;guWQ`^tqIR7!D2Xsa1e6FSh^WCnMb3iBP$(pAbyQ@S+rh6nvQWRV_5A+Ymfr|lS#o$(Wr!)!l0ev!eyDUt zoYH7gA|?blMF?2PYAGy}8{sJ3-?Ce^Zldf(M}ZoY9a@^ZATLM1yh-U6s{Q^+#|~6F z!Shi~k~Jrdq<)*iY8!u1$11uo?xFyoD!cc@ozGiZ=ECyoI_Jh5M$@AQyoMprKy6sm zF!e_jO^LT*No>fudF9KaEj1B+(Ii%*?IQ(y5vzR+SsInGCpaHwKdLh%)b>3q+tTtF zM$dK2{P(ME4h$`C7Det_Rx~{-7O29*+aV*qoHf*cRHse^=^Je0Uf46wigwGD1|3Up zk|uQWLk?sJ7Q({^l_ly9rE!hM_Au%kdz&LNsrq4W(oz3Z#zHS1)nO2|rH=i)G|2Tp zWjyL69jkS(hc=a>=`V+9YpCE=+xczJ;Q4EWkZQHjv!WJl=+XPuMI1lDYKZv!byjHQ zcBo&|rl0>i;ciGcOcxllAK6-PpevyXEXN`Y&ZGh+5e%8Q+?v@58^%0wi$*I(^VoOUR?BHYRT0g2cLlcRJP;D7nvsvFyAWOLSw4;mSK zFwTW7nA-HsB{t-MCCn-hA~O3Pmv3n)bx>;hcq#2>)8$9TMJ+g72AnHZ-%<0}|5j@a zOc?z~YCk4NKiX2)tO&EK+&E~(u*ya;)YP1tL31Zc{T6IO<7(-B)n6fdVCu|;=7*N= z+IOSsfm~%G8YlLSgU;#K3*hjBle7Q6gbaZVs$HcEWg4raT+)gK!-*z7R}Q+}S_%m} z>(~!UgET4|`?W1eq95>lKN@Xpje@cJ5f-)oKbSp&0ni!$k`W&bChG6~Rtg9G!`4}` zKf>I;=qAERDL#j2&(A;|Gz-fezi9+p;I|xl3SFofGs#JSRu&b;k~L`)ch)U~lRoSf zy=~9pE=HhuAM~2J#cxub=T~c#4}P;Aln1zOsT)hi?0#F81=|f@{fDK|pZ+WMk7 z%X0QrVB8+;1GTzTAvX2%$KN4rAc>N2NCe)GD9orD#2g zB6$1r?AN(saE0?N=q~KfkJ+h4P!rB zu|XxQ9>H(7h7pbV;dy^(({I?A+c`HIa`fw!(3IHp=0mL_jMDQXVQ9VRXYUwV3ab!N z%`CUn7&!^JL}vy2K=KvTEc^G_I9#zJOK9PV%7lL64An~B#6&lav--2&*TOUHe&19b zHeoSKLQgIB)5DKDhf7BNDO_5#?aiI@PJ`UMQZ6+*sHJ%37_3^jRq^G_IqU!|;k=su z<>YZvK0LobOGe3*!u!AWz8ui%;Ck=Y@nzp?vlkgnF8*clVF>5NvA{3u_veO#(`wsu3&>*jfSljS^3p2k0R3)8XL#?gYtl0eQxY|@oi!Fk}tDE zO1KfHuTPJ@Fu^Ru(^>Z83)7pYpDN59QU}u0eO|Xt@P0im>dq&Abp52X)KmKNwW~O# zcf?j#?VInER*-Gl;&dl^(4PIdPw&SxM1_vlE8)8PT-@`AtBGr_8s1#C?&2+bJ}?mY=YE%DUC_%Dp(ggHMWQXgr=9@a9h8qq!dx$G-@)16e$+Fx8B z^E7vXzjXTf=Wi>I-wv;ydMDveVRp^wtuiTY);p^fWWG6&Vtss}leg#ja?@Ya7j4yB zVtVE4$mLhSbA_n8=MvpdHO^Oem8yDnHlO#YZlp0b_jQxpg{*I3!w!zsw$7}+KTgrh zB(ERS6~vh$c%lgqH>AD+JWX^>zrW9ek>`!hS@#;~R@`u+T_ zYMIH;$YG~P7T>d&d?>?mt~@j8zJiN(%*o?XvUc2Ev;7Q`QWwQ3lw7&+Ggpmo*=Ws( zjo!7{bK23&eBv4{|HG_lStET=EY9_PvE?V&i<;Egc~}xDrXI2n+R9aL)GB%HZuZqb2`GH<`}VtF0BZK zWp`)*p#dNVl$>` zn?teRs$;YAlVMA1O)MaAAOy~O-tu%b-w?t=MIcNOimEDEID5uwv3TYcQ#WnF`Rc0c zr!7)^(0W1s_^1!T%JLuX$7NXtc({(14q-vwu1|&T(jmI4AEvEDXSJk5n5y^?mA#u{ zZKJm)qlH~`lOKNVpY^l2LK=Oi$cbhVw+~31WIlnio z50VRBkhHKOcGIpos_K`EZFlA;mAR`#?P6|6hZ3U{l-0+wQyH~#6KDA^%a?QZj5+mA z^P!)Fyp#Vju^GIW=y!7Q<+kucPl>YPlwIX&@Y4+G7-)W7lEIzv6K{WP&_vWJ)ex72 zsG}g&SSF@Ge(yEC@ptazS?w?9BiLdHGZukNlR@x9n>_U44fx?K_+hZTe6ry|mAnkg zQFqFrh?QebQXz1i8=2HR@HIYoz^1B2qig$E%<7jfHd6_DHh9K>-PR+#OKi204{Tx& z@R6SN`t13fg~jXG1J17=@izXc?Ul+X)a1dcQClAVnCZLgW3YzPc4&JjwEcLklV{A_ zHPHV)(AUt>$ToJTSU#~YY_K9aH3^=ozYaZggYG*?LZ=V*fuDu>LNRC9j-Mzh`p{85 zal{jcpS7URN}!>MBJdQUZh)i)K`GZV2v32ZU1T6BWM&C!H8L{@nW?-E%?v`Z84Ufa zLsE@Mst=U17lH6f6fRkWLJB!dh*E#sTx4tVE4~KG=z>R*sSm>8pz0WJj57EtCtoLB*0yyQ&N2$K+Xgj62sy z9)CV??uZYY@Eyb&@!LCwyo$lmcwH^j;&=DBInW#s1L4!_8upuiY z6`WvTU{&{7hN9Slu@{FP5j?tI+05uJ*HF&Km#n!c(K#uMe~9TwDuE!bZk zfHXEDKl(zAF)(K3E4(2r26bgr+H7bFeJF)KL>jKpwTl3y#d_#QJo45Ub&fU+#IzDM zWor++U3IKcI%h49>?#?PtZE;_9&qc|h!rzH%>=YP*zIKDLPaNc4+?n zC|GK8hQji*d`*6_YUx@ikd6d=ra=K4Bya&0yi*d;(kqEk+Gm&LEHtZdOja#j!ycel zJIoPcYb=mk!;xD-2>c3xuRyor9;%C~o;NucGFTO_h%MSNK%V%uag4eddQpneWwX|6T)k#I@RX7WJ^)?cEW%?gXM6GEbTgS{BU3+6wrmkYh zsB(npgR1@nJ}mFGNvP_=#4Z@7X1W1-W_?6*ccEOPADRlRe$P0SKUcZn`uv*-$e(G= zBalCmK6h3;R5M-A9#9UC!+8qZnhjL(1z%rjz@9sw^B5BBmL6FfS$L)1O@e2B^yYkv zR8>%uI~rSi zJpOnew$S>0TI#|I8y4@~rFv~ftZkx4gmkRTs_~M$Ph{46=0LxLyg;mN%}e_kN7v_M zS+uZI!@l{zo@Pg_2!mGOELY2pnzg{TF5d?RnjLl76rLSUNa!IWMkopwBw_b9Ypdcv zJx820@%UB}IvB-CGUO<1$!`f5^I6Y}Ukp==Kr@W`TR2bFZrqglUHiz*W_D_gYAc+z zpp~4gLgU&y$mt_r&Mk^HMYERV!o>5Nn@17Ku2n0(l{CYN%kikiR=ZTa+DZa@BxO-- zuG!J`SLzjBpNDR!t0qs&+Kc*b;pkc$A_kYTAOvQz+jz;E68A9Iy5T6tCGV=iGSj%! z!uFGgWvI=%!kqdV7VmI+*vK%L*%8}_K0T5G`?R0MtY}X>`f7T%MM}P@YQgnS+irRq zq$Zh0OhG=Ldz!hqSs%?``?eliSYgi^g`Yh&#`}s17atQPcZ9<11Wbc0^_`ku&cn4^N#Oe;=k@#dx?t2oZ;2T)FrD6>$q~o6)ti zENtakVuRCC1AkVIMj8GTb>fPSqhS`dC$?(9#}_=jGEsSmdkBj-9EX<%q3*i56ti`z zSY%-v?5c(w)Q|rv!8<&D|4rtl!k6w7lnbV8*|kq8W!&_)Fq2i)4|;e=hrnX-ymQ&q@i9V0AQk4-kRRSC)m7iZ z^j57ghxOuuTEX?Dm}Hn&s?WG8m@7ZnQCG4Gf8-|+V|Y4>lO2rB#$}Gx+X@XUg4#Tq zng%_JLLR}?lMaDPL)d?=NxW>2(yheVB%U-XG_c>NrY)?9C^8O4-kmtQH40oGTvNvI9M96`$u8Aui-bsl1 z2y@w0{UbHDo4S48K<>n0n`y zhgWreW~%A6lx;7h`$i3ovhW$7_(w>leck0+2&d!Y^UVazx7vIwK>39ry|7$q!oW%F%dWm7znR0fXkDg1M z@w<_>s?Teqlzk4rw(i{ga?beGtCFwr`t~6IQdMg4#-!nPckg}_8E3BcvNoA}-!^o`*ZW1! zGG2^~*=l>-#?<-4-sDFMSXC{vZU;jpH*OPsBr=ok2YXy&oj;@Gq zEPEWKto}fDR`jz=Td(bYu~$xRW^&)`W!E2z$CZ4to2>uA+h(!BUdH602XkJuYCV*n zd||ntv%#GKrWX5#Et)gOP2C^+eW*6q(dC9+SiJvRhe=CXMzMcwUiWsMZ@-k&Nv%Z= zg68WE6_1lV(nGI)EL`rD$ZNQN=ttSSl@sUhPk1nRQ1ZEO)r;;MJnpQpoiyQ3iihcV z*Q)dV`Z?sTP5ia_^VV=x>C?`-?z%eh)pka!&K7QPbKaVpvTCi-+Nnzij!kyWQL> zQrGmLIN@_t_3UrW-?HBy1S^lZ?MV0>=is*LcGc{Urf-<1^U?ijA18nK=M%g?4Idc@ zKCpG$!#Ou~2mbfUu2{A8pyOcQ$W0T9Wy}7XnEv|qwd$;uyN_~0R$E_|lzg9ew{XkP zhXWU;oPGIU`A^aK%o{Oo^+f+Q;4SA8FOYGy%9vF)yX30{}eVjUb6!rY&EKXpu!@o#u{<<8jh@E3|JWWFbE^SaEE zUgo+hVuGpJi`I`v4qR$dsy^A0c;)fy`Trc53+D0do!niV zJY4wpEA;~4M~t9;F2U#_0)O=E0DSZVJs|M+;g2?e7<`TZo)zbLySnh(pD-Z)wDX-q zyt!UHr?&s<3m-J_;`+jeMbLl4=N;NV4eA4*!|)0sKW?-1_tBDGS!&ZF3_$n07=X`U z%;tH!K+{v;@82H@crXzDG93&AZOtfD&SVXrorrpjA?si73+nIhMqU1R-^q>;_={Upa aex}`5(j)W$68cdfS#2joBFxZ(H~$CzFEsQ3 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/hpax/ebin/Elixir.HPAX.Table.beam b/phoenix/_build/prod/lib/hpax/ebin/Elixir.HPAX.Table.beam new file mode 100644 index 0000000000000000000000000000000000000000..240c0fc9a3b4978b7a60e1ca7441f21e1dd6e3c1 GIT binary patch literal 28192 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/jason/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 ucmZq9U`}MrV9I4+U|=)UGqlh%$!1_OvMA?s&B?6DEYkBxt&|B+-Nb0R%;GYf%eHKxL~Csw^Tx%2LGkGYrW91IbLBNeH;IC@8jy zRV*kXB1?U>f{42U)l%H01*tmEO!8|48(wD{iM-VXKze-)aF5-$FjPK^+7oCP8kJlwj>m~~ z4S{QM1+HS7|3O=}osl(&)-naI!?dv}uu2EiRU_&+gz$|8M(Gp?+xicpTtZM%D6*4D26DV`}G8KuX7FV0$d21fh!TO7lS(bXQzi|B zKocts6o5t}rGsa>lwk=bLmeSn9!tO*M=PO3J`~WZy&1P{q+G!Tu6ZM^LCU2BG)uXb zpt%8nV`$xl0=flPD4?+gMLcsxG0!}jA+T}eS}~@8p)}ADAlc^9Krz)?6gmR1wIhvf zS;P|pu<#{V2*5xK8e3=tTNR1{*hWlaTNm-H0NBb1c9Xg>Ld9T3n?fl-*n-}OBAzWk z*uE5J%MiGWA*ldz6hL1<3>&D7VI$_+(Wn({jVstuMsi0&H1;0Lbv8XZY2Ipjrx3XJj!!J2OiKp3FqLp51?NVHy}Q4UuB# zni}H-rUO2!FIZp(g)zhcOiKb1th3bMDVTP1b=Ts?ShJ%OEfm<*DQ5tWlLer3JQ)Uk zNJ0&m2tnY4{?8>E@DkrBLC=hbRV0X<5M1%+GAgPpHGvg9a5FSlgGH^`RrWRd@p1t69Gc*&O$B!8c;&YqkBcrS9sFK2m&~h=M^PQ^~t9mZ=<|nmC&VDoXd8=irx7X6^CMo2! zje59q#`yqUinZsh$+D_dKX|-b?|@snto*rq_=2#WD>ECTBSrk~sjUzGTcWHcYqw~= zKm1E**P8r0&z$AnxlPYEd)+Qx5;N<3TnxAK-nDxBuv0!?Upt)Rq3`Osyzhu2Hm!2w z{xkQ#y#0jCTwl6B|HWJ`Bl;U3^g>;-DaRdY@~?POoxy0#SkUP*?-|E5s_VSRuMZ+y zX8VQgkZyiTv~%k_%$g)c4R)vZhDRjNAOC&kttr?CG>L0fb9qB;f#1x|XE|?u@!=-B z<(_<^(f9N0kxh4hDEl$2{GF1h_TqafyGvQ{*NQEHZV}d_ybh+FDbFsOHub(_qv@44 zn^s+?<}AzO>}`4M7dzH79$%}@ynO0(jdzo_~NJNU4cvhju2klQF$`LYc#@ zeHO0jjtBVGylFlOqxs_9j}~-q_;o+Gxju@9iF|uScg@opvv(CP5uQHM@OI+(VOgi$ zm_;KFWq-ctGau5&<;uzH#gB1p@f_BnbdN{-L?8D&J^o|WYHsT%YmVc?RBfpibG9Cv z{&z^C2^X>X=bW3Z+6XBh@ z)#3M6Oe}Req(7i9gZ3ycPj0`RDT#E6y!`vL8T`G?`MX`yFZ!O_bns+I6w~g+_&dL! z%l2v%Zul<6rjhjZ_|#%lyMNcMmeSqJIkIZ=kq@`IpUd)#JJ=Tb`F|(3!Q&<#44BZf z97bpHKbSn$KcE&)%q#agz3vd_zFFn?cWT+d`ae(07^)i8F(BbM{r;+|M=NwPqCmqrEK-wt@qBi zt0JYIqv_?HaAN&?^>wXpe~=ry7JjlhC~MaorB%^yHh~-4f*}9Y8OadD@}}ybIbyh; z%N2=;A{im%DH1Knt~9-=@up2x1yIfba-clHv_1%fL=ym?2`=v7jty`CMK#80Q)LCN*))waL5)Icd6YP~_qGALw}(#G4%->{pZhBXGK zBr^0SxCWFtgL_$h-weh<9I6E{n4Z+H9aF2*sF42mSPB(RB1(gc-|Q`LCo=kyWt3+E zf6>RUi}=UBc4u0fME>jE{Kx0?-#isbPzd;Q0&Mvd pK>a`J`_Tjt&4Lrkd7l%_iG-{My}w7MX{dLH1ERif>1Mr<^nbuf^N#=k literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Codegen.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Codegen.beam new file mode 100644 index 0000000000000000000000000000000000000000..34d8ed1967086b93e36ebe2ccc0c02ce42ce7b90 GIT binary patch literal 9272 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Decoder.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Decoder.beam new file mode 100644 index 0000000000000000000000000000000000000000..c3579ff69126c4af443fd67cf10a9c70d47e01f7 GIT binary patch literal 125176 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

    qK#Ioonel_7 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encode.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encode.beam new file mode 100644 index 0000000000000000000000000000000000000000..4f58e75324064c210b9a4d3c726bee302fd255b7 GIT binary patch literal 67784 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.EncodeError.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.EncodeError.beam new file mode 100644 index 0000000000000000000000000000000000000000..a9a7c04963ac37c6798b98cefc2ed7f851065d9e GIT binary patch literal 5036 zcmdT|2~-qEx9*;18Ac{FGqMN>!=gY0W>7&f0ftRM5Q)kn3d1ndKo7Gy3j^W;K?ClC zB7z&ZfZ~!M$d4MIq9RE^5lO%W72<9Hqeg$tPZIvBVKBxQ&w1ya|GaZvpL4sbZr%Fs zQr&fL^~|~Ryb*-CKR7ICPLL{gI)b3z3=a=qqgscF$!t>LHJh)LNxj0P0-2BqQz&GL zJRXmfrpb7`O1?^^AXC*ULMa!>Byv(rR0;{Xf)Makgs_&#mdg|>B~K#s(Wa@T0u?Ef zDpMqUfkLL_0A`9rCRB@w6s1a`7N}APg_ti*f0js`Xz7NvW8W5<(yVrj2$+7Y9s6Lco$C2xTpTAUGg+)d6w^GzP`X5emZz zM_Hd>Tdk;!$*Y4`&r_!oirCN9n^*4*tMfrQ+*t_5M7dlBxW{m3;oy*8n!K8*uSVBz>-#Mue~qs($7nuDW# zP=aQTqtATkIEKgI`!OpPje&(>6wC;Jg;Mcp53o@!ER<@llV{*4m9dk~#CFq}@fZ$g zFu6>ikjga0aV}=S1q@>rr-D8fW6`XFF&tyyV00|bMSubh&6>tApyFHrV^Pim2H1d> zr61h_`!pV7(JidFEV?y^ZiQ08T!a~nv79H-EtoW0Q=G$fHh_5CSzKm0$CwpUV}Kds zDaQ;EJP)&?TGPfOc@*R-&7PGDqd9ChoD~D?O`)-9j&~WrPn}uT zP>D`~6EOdX6%I8R_|V50a1Ahjx(!Ml2O5xH&Nas6DAh)q;86ih(2v{e+u)(YveEOQK8C&xpXT~DwDBW-8`=%q z@EQXM+5vS^W~!yoM`#=DPlP-`EI=dIjhQ}CqzcHOfqIS+crGXqgF8h9ZyIAEk;Yex zRT=}h@n{UwNJ1>s(EqY0y(fuDN%5$lv3}na0k9|?u3-j6L;G_R;v?_%QP4MeyW#O+ zcN9d|!NAVRMekoJD|~+LmrGfd>7uXK@iAopg$55 z3V_A3lv1b&mEuTF(Xsx8uRT?kICI0n7B^cFj7chy!OtRPYK2ZpgO8@G(G(>Tg+xfx z0K!F`sTd4g7NJmr?3IaNeqJ2Nkm<6S5<(bg#(^xQl=C%Go<6-QcyfhI05YA%Buycc z0JehAm;ou+0AmEqX_}7!gRchpg_OVy42?5V0=oo6CKAq$RRW!CA<38W)5tXTd|8@G z17@+688Vp)q$5uvi;$|=@(dXvC9~Nep)1)USOc)dWGb7`)d5~3u?^N_cPvy%KYyUa#=*{B?K5o5X)0dx~y6I@S zHzpc7`+9@FZ_D+jy2zV{a{13sSM&}&yli{#lciG&$-0+rywE#8HP~~x*A`^6D7{yg z4@q7nCM6{;KV%&09&}(0Wn5oDX>a%M?r(%)`$8Y5YieG;k@^=TTrHY%o4zlHk@rWZ z*YC51&EII2Szi7zx+pwD6NFK(UT1H4%~-YblKYRsAge8!tHGpGiqr3I^GevfbF>rN zn^zd@{L)of^kCJvf-QN`u3DS%7ZT0nVNL7Z%BJ{7oj@l4^4(OVI_Z4Q{l0(lnwZu@B9^_coU;HR&ck!cGm+{dBi)*buFA=Vh?$)lRtfCtv ziOc>lt#UVhB02VxM>s3U?0XAQ)PbU`Wmewm=^3US=Ppj2vFyH4MxN^V*{2?~&Dt&Y zZQZv7PSvx4TgE?d?=H`y$911GtAE^=YId*08a;Wa;RQXiUTE5t$kzPVtJ#WO9+eLh zZ5!FcZw}u$Kc)1m!PMPd7eYnmGb5kwnAX^sW3-&nF~O{Oe3e~mX~m+pjndv*_Y--n zCqdM*-1&#Jrs3XmTR4+$`P}qgwmgx$bVI_O#rp=ImMENjFPj83#z^lS+%^=jf4Nhw_upcg|<` z8dPn$a(%o<=-8!`*Ek0Hj2W8Pa>wH?t^3gC^&9Ft_ivn3R_@wcY5Z6~pO6vp#yAlp zj~#M|>*?w-RI&$Feo{3M^8KS?t9#8CiJ5(;C--RWzw*s3Xmf8^5`6M>RP2$$hpmsj zHa4$ft1Ir>Z8JX+{j82(=l}V@uU8yO+e;!_lrt@ooJwC*cnQqftYd0y)@7e_Yx8XK zGn`Q$d|^6ccH)U8&T(Pk4SVXp@U6I=n_Ro;{vRE;RG(?*^xI@7mwx%E>&`(h#j4|h zN7g1K+;3jH#(#_b+4!m2PZo#gK4VO$Dm6z<&EqZG`77EUMjZTldag^ogdMndP+ZW1 z{gx+^+|T;SGvNo$%~F~?&!i`-VVBDCx8@`BzUAHCy|!{|<|$f3dvj{+6xw)`16Sk1 z@A@xlANP-h2OyijdqKi()K5YJ)je(>RFpP@lS{Vjdsn+(6Bw;#q#yn4%u8GTrcn4P+q&e zQSoZxi=fh2vjS1-lUdc@?~qM5sX5t_PhB{8p*7(*d1g=ll?xJrjcW#uXATN`XMDT{ zJ6JL$R@9Raacv%c(}QKRe>mJ-0F>EWYnS;O6yNKMeRMzFt>B z6df+C_1$vnfUo!c`5BQveivt<+OW#+`PPb+By-!c*cn}#iolDHlK(Z|xO44wUUa9U zz5D8>lE;ZlZ(h2RySqOE9a4$rnnUO^!#&9-&K0^9HQrU1ORDGmYfFhs z&w^%6v3LbyF#yI~(n@};hIp9J!Z9=3b?TaN}xQEvSBrkEGYCCt?yLu)h=a{{`QR!P^ zqSdb38BlX;Mn^b3zLmD{7Qe8wvvg9)-UFtKLLxb{I}-=oTcf;h@dGCZuQ(qs-Q^(k zt(Nyp^@($syra5rgW0mDU(d;B_#_CutiPBZ-k(TtW;C%691#rn@A#&;E^=b<-iFSv zWL0BMriiIiErz@6UK9;SB6U-nE^hPt@>I|2$Mh8|S^~eVpC*kuR$}LqVLJB2&Rn&s zWy(tT+zD6d>6Y!2t`*<~_K}yYqE?(~$M-4{t*&pg9Dl4Y=vkv@-kgPJFp0o$Q&@IL zCdjdZ0+1ce^~Xa&1|i5K6uc~NSe~F7WBm~pW@Atm0m*l26FxE`gel2%Fk%SK#Nc=d z=Veet`XO*=8{uFYBY{|^B!qAPdt1DWh#BxzG6{rGOF=E5p9-oP(YxwCEc(G3N%UTQ z^O316HWubc`4Un9DmX$R(R=?MQwRNS;rO3L{<8-C&*F}h zvmd|&uf*R(VMN$a1^xjL?=3&<>I!#M^LMLGe|rdm{|!X?aDsKw>;Ip2|SeB`}i!FMZ;vqn)Hf7Sw^&>Ok7C|N+PA1*UUQ%W8P^NLyMG@Bx#YR6j_Uu zq^s+;s%YV+QqgT+RkuwkMfsg~W^${$eE;|J`M;mfGv~a|dCs$)bDr}&?@SJw<%+{u zv3>j|&6p$)9f!ja()#-P&XCRgM8ZU&)Oji_L&eU1Vjjvzq|TGXNhutTP%J<>oB~)b zmkOg4azrNKq45%-2r1wr5-Gxicxr`IfADt~whg`A zkMb2Fge#Lv6+AghEEI7OsR$NFzm7)a9L=Cw64_|RB;Q#Dw*l|dbjE#y#Nq4pUrXfj6RLW-oZw3oskqqH#I6+QME&U`? zF(Q%(#WD%PlVd9ZoXd?8ieYII3;3qrnn}`VMLZ&wt2Jr?o<*eC8UxQs>71%>*UHlA zuZ!j4?gTb~6U&LrbP|e1m}y`!HJ)>E{Q;}qS^$f~;jmT2;fOCmmkt1XssW4uppU1k za0H{FbUfrqEHNb;jmq)KnUxl$kRmHWH|7-jRgcEA*!4sPp3OD_zrk#O9B8;~e>!L+ zY<~zeDQp7x&1MrBfF=;a;S2QWGzWZ@icT=D^a>oq6sKa5AUd09%l2n6RBRFi?Qtinf=P7N9$O-tz)*2X5SvY8vi;da zfMgSO*#5y-4vzNxdntLGxBIm;!YYf zj7SHfhB8<*CWD5P(AAP{fJXjRK->u;QI$=i2b1Ys9G=Ylo}fibP|#0ctf~U+?Erg| z0W4@Q@CTF4uvMKP(IuD@flH|)7^)T$lma{n6dnW=cA}Zq(@gPX&~;`25^R>O>aLo` z7SNchY0T^RQGf`PDN&t=v5l03<5e}B2;8!wH}s04`gKIcfn@;f(NU}=D^!y=yOC?J zETA=ZR_G`2Lq2_oC7Sb*VpfE_k~4o-!R4xMHN_BggDfJJn`Yq)x%2OzPV zKpT!H+pFI_!Mno*nmrMR3z17_gEJn+_0U8tE`-G=A&7f?2n%zNy#pkVf#nb^MIbRM zhqUn$5{j{|Ccb(=Tn{W9{&g}gAYOv;F91N(f&pj=0I)bSP}?^GEkoO9g4P%S9st%i z0f5ol0vHAW!(+ULYy0+~bT(AMff0vIHJ4eKyQs;9Z1U;;*Dk{S0ZOuoO{x{SbuQNwPf06A!bvkb~+JEknvy%607{j(f-x(wxDwZRO@_$ws(}UOVpZ`q{+(rU7BbGT~9tTc^@k-iv_ccHf zen7=yViGYUNK#~>LMTPPF4zB-7^@*AD)l)WkO;vtM8@HKovy3KD0S5dgqo6|)K#a1 zO41aNIv`S+TDBJ^`@b^KW=H=YT=b(qfQyKK<08VT{*}|`gS{pdsuL@)F$ufB%X6Wx z`5Y9lkbyWOQou>1wVk|KofOr-`0pd?fQp-M3bO$elkL5^x1 z55~e0$XpTiQ2#s_OX{?tEeRxEkTOQdi-9!h9VClE6(YV`raA-VLvj?F8WI%fL8U_A zVQX0~{!Vd62#a|h&^%}GL@rfR_J>3W;DDxbNGJm)$xujw%4EVQ5zq^TG^YySMOqCU zL0=A(h>ihjgBgD+q>zC?%mcw!pb!B^fXQ$ID&#{jk0;~-0PRmf$)FbEYuus8|Qq`O*Gf0$(doyv|- zARLbb31-J2;7$Wo&bP}G>7cggzcFy2VyDF>6^pfB_o(vw+DCh;09n{S?RK2kcWVB} z-HvI%(6Clg|14)Pv>z4*2!DnTN`I-K)Bz3vk=;fc%Dz(oD=XDyk5tA(r3heT(XaYn zSm1EeQ66@Ou>t4;@C1O}ZPG&sV~NVUo1>E zI37x>);qu-AguZZhy`GNL%)8c1Q2gQ(1^nk$2+sYBoe9)VCt(vM`0)Bu(TKV0Z#E3P{mc8UNB4GQK1f|rG^IMsQ)2lL-qq$x z7I7|Oc!k%u4mC zvGBwp!(Hx_OuPQ*xtqY>>T#HyZhfkUasQrq=9}9cr*J(d&kj#7q^L5jssqk$Snt35 zRQQyRcP0zC7FmxCPHnbaFY+>+yf1iM=h?)SjFRrHhWB#TJ29hvfAssnF4t;H_xDv7 zdeUdDdfC|py|WqlaKcotW2wWf_3EpFhEL1QKlo;4u;teA(^4s&gr?dDV{L6S8|EA2 zP3%7Ed4|~&o6B% z{db2a#n!eg3*Xhw6l%rlX5x;y4&-Z*3ZC45a?;Q7$& z0wFU2JsP=k>An;Drd5QzJ-<15UrEiy-L-oUw_GV4GlyP&K5{zw*0lOw)5LQs^zCit zYVm|WHb%8R8y7OuWol8ejo8P9Dp{E4!aP04BddWH`f|zr1`j6dr!w{zr`nlyx+NoG zUFOYeKJYm$q?ub{_ViiQ!=SV`on{;6k2dRx);+R)K>47DE?3t~CoW81n*XshJS=DV zrwHBO+u7~RN1OVtU#=Mt)wM5h_rY0{Zm^C#4=OU>{MysU@SQ`W$4g@v<(0wf8*NwK#2-yHZ#pon!Y3;j&Vi>5e~Jn~fHyx0y3CdXa^bGZuBKHt9WmB;FftQGW9|CGFRC>IaAS-Fmy~ z>pF+-ANu?1w2aTmFa7Q>JX3k_?UEOz13m2B3(mON>(km5?RvZJmreiZ-!M0zZ*fUs zM?lyk=e+cHBdV{AtB+e}9%OTCgmTZ}+|BRP4QGT%W4Db;GL0Vd`ASKii}4P0@4ltw z9Sg)i&wplokQ8yV{8`!gNHOR0?6#b1S6^Kik-KN)p{`eRFMI-MQKsHH`N)X;@nsb$ z7pY4Q?N8|opNSuB+Z%GQ<5@t(RR(ah}IDtzDm0jJ&8wni;Ybp8042 z=Riy7FR2XUEhDOza(A~4@wy(n;MBYJ@}zl}`)*ZltB~4NJPs{B20G1G=K~`Zdk#Md zZ9YCz{?b0cZoJ#2MLk1w-})5QT0EU|yZmtFBD5sBP!@U7Abt^@?`Jb*S5fw>Pt8NG zZke2O{=?24ab2^L9$ayKUh@9nqMN_YnP_37tM^D}tksI$1#3SJwb)9F&&pUl-rMUE z6JI;ScwyM=4YN;QAq#c?Km5tT#9=tv>OlV!-OtZ2|asJ`rOM`#LseKR-vdG)YSE5{Nd%uWU-}yZ3pq z|EXR0W!{0alOtHYC+OR6+B_)o?e6J57(QxRtDYBens2Jk-B~9x$LkYDy{`&(@?ZXB zLDWfnuffUmJwyTHYJoj2&e5K-=`3+5F4H8lO|RN9O26@Rh+$D<{hsmRYkVZz1Gjo_ znkXZMq(<%hG@@L;`efrqRQJ04STD2MWd4sY3gEa!U=IqEI_m5NZ!*>3BZe&o{!<@3{=8-``JHjm5dm^{j zR44Q}3WtqMZ?7EuEN1HcNVwn(ZlPu8XQR+hM(qQhp8k-$ui|#^j>*#|kKcWHqw|ED zuFd1V_$gxxt?uZ!M4#=PyYTeloZ)3sUWoC)4LLW%_iYU_&b`ytnv6UmYbE0f8=wg&c69Ev*hK*DpR6Nb2lzRbD&CO>aQeu{ThZ1zhtOu3%grgv<^d+)gyMp!t%$ow4f#&g2v8vzqZJ+@KSk4*`r_meVxGv1P?8wZArAD z;c%<{C38wWl7@V0Rm~e5Gb3&V6RoJ%&Ekf*=vwr$~~=s_(1gzAr(LPl%BXmgYEeQB(5 zJI;GqZeBh5%BwG?Rr6cZKvMe?%9DY#osH#!1mna!MfL@8J&W$gsIPE(kzvS=oVg~d z%OJ=G}o>Zs*8ND>K7yW!@w z{90Q=w5`;Z;oTg&!^7`J(D*PURAR7jtkv1&$2|)s6AjXac!coMOLa?Hj;@ZseL>zC z^yKQWaU(dLai6 zNHwL#CqJm5A=e1_O8w6))F0xegMZh6;4nDL7S literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Atom.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Atom.beam new file mode 100644 index 0000000000000000000000000000000000000000..99cf5db19151a4e126fd4128cd4faa49193b4409 GIT binary patch literal 2520 zcmb7G3se*76`o0ugz#`6NYJeoIV#qb1XRjPG{6EP&jliiXb8y!CL}X)G9gIS$|82D zyJ`_1xVS}DRIH_dXbX7OpetLg@>oQCaKvo|&gwxPwystedM5&N<)Q|G)SC z_c8zf-#d{BNxleT*AW&G8W+mQ0uTgUI59CX$e$abCGrSbyk23TNO1(Iq*OR94rM6a zZn>Nw)s$RbpSp46wMgqI+fo+wUJaZ1VtJ$ zbP6R+8GL}5p`%nrEuLXuXrq$xAqi~;PHPop)<_o4$R~vsPpm_oUMrXTs4054o~9T| zNoo16GeuZyWwL>0;FhTQ!Wk5$3Q(y1krTeFH$iF%5?6Uoxs&*Mzst2`4O|34!r^lO zc?Q4$>{ADr3*ezx8NzY##88i5?qLz%Wkpd~QIater)3`*ONuHZ>itk3=~b=}l}cUU zohXe$fMiIcFd%v<2j07-Tp779lk=rM~QE?DN~ z8c5bBN@7TL;-GhP-g!;)`+t6+Z5leO0l8f!o~_6wC?jprGR=5OS;gsqr!$y3*)y+U zeZ%=T+5hN-Yc%1}q#B}WosN%}i_-?UX*mctQ0xPXc$D69^H?`Frnw{~H|P~6Qf|Gm zv>eh8?@K~$Z)*^7*4=Y7#WJah;XUd_-zf4qY}?Sq9rl|_>`y! z1*uRIYDqGsW=yb3V#uZ_h9I-N@m!o_B>HR$Cy6`>)Chw_!`2mvmdKP$ZWS%Y^I)?+ z$jl;OJK_ry5yW<9UipcX81kVHc5(Uj{X<_xJU}8uAz|K6_*+z+H3HWy_6@7**Cn2k zCM|fAM$Ep~`SqpJ_1Pthvj#%iK9djpL&teYi?$tpnmw^Q=HOd%oK2*9jrc*&cuU-p zLw@2i!(J+ex1mIFJZ@WE(I-QVV#h~o?{9iR#RP zMNTi9$CB^gOs{J^yJM@{TZwA@P6v0{nfzBzK2O#hS%V)6y_0q)Xj!Sa{0CmYW99Sr zO0lwpbyQdT(*&=vnj3<(4h?nDDW4SfUD=o<`q$|7lBTomS<#`UkIVc!%Fg^&eD`Kc z%eT!N?jOj#`LMjOC+u>*WA<3{z7eQmmQ+0V(%2^Bqye22UW&>`a* zm9Q|<^VHK#1^#ty_Cc{9`t9IQj_U?qEvW3enD%`_eDl4(1jsix`4)J4w0(ZDYX0(n zk8Df{-IaE3@KT^`>B(nzYA@}(wj?e!Xn2?CQS0{aBEJqu+BqsBo?=(vTv18`Tv})L zT%nbD<+_BJ_-j5`+=Fk940E<2M?6BkojPY}ou6gTOVA9i6y7Jj1_h$8qLGCeZ^qlt ztEvLOzdvf1zbR7}{OtImXfZc8)bH`K+hO&qHsqYb${NduI?SD8Ew6(()xFxNzJXb* zyVNm(IZRdhtED%5xt=d&B`@jm;sz}C@ajMKA831DS5Q$~l;7{k4@i0B!;5(nwYoK_ zdtPMyiEr-Z%bXUUyA)iM+-cjaXuVZ_tnvIlZhy;)8$o~5cHP}%``riaPnZLHoH&|I zHYPLwk2!6Mj&S+@ti3N%<#&Vmy}d`*4xjlo^~18Q@y!{w!+pg)!e0)A^wRI`h~0t- z#}5TI#Wq|!w|p&P=T!U_szO9wcn*A(J%w4?l2ELy2B5rYG(RnW zr}F)uw)s=V^?x~-xmH85gFvS{%1lMRE@x|w*^Jl|E+Xky_H1islX l08ZSojrjd{{h@nT?qgH literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.BitString.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.BitString.beam new file mode 100644 index 0000000000000000000000000000000000000000..763df03dd9d4924d71557f7d3ab73d0be8e7a74a GIT binary patch literal 2916 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 LGcIR8f*}6^PiE)8 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Date.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Date.beam new file mode 100644 index 0000000000000000000000000000000000000000..85968dce929cd6fb1a71038a1c43ecfe4148d511 GIT binary patch literal 2596 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 X_s?@L2$$vAxISV4ch90eg9!3(6eo## literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Decimal.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Decimal.beam new file mode 100644 index 0000000000000000000000000000000000000000..3c4dfb88fd922cd8f42e2e33255587aa861dbcb9 GIT binary patch literal 2608 zcmb7G3se(V8lFjbgkWGuAb=tww!TRKQR_Q^L7*rqP_^wEhGYU0l9`;Di2*z!ir^!5 zcpIves8?QMxL=x>yy<{u2VNd+eUG_ndF;z5oB;``!QE z`~P=h5*LOchp|l)HQ*5dU z*D^F43c^$qt+N=3RF-2bS}v3#jj04<#HsYh=>(_gQ`(t$LX+93(S+)0CeO^!9Id5| zBJZ~?^0q_hSZgX_UwaWpYk-EN(yMLm*=tBA#lwl!nO6`t<6p4l{KoI0t z00!X8A%H)?6~)RCfixIHgQf|~d_~gmf~bOpmNbG%S#2pP_(FYnA{weXDU_iql@z}7 zRdW!iQdM&>sLUz>eDhR787SukA!v~cChqbF2ieuB#? zu?(u)U?@i)mtz8{*gFUnVS^B?JjfNpFcqd2&IuB#-GYTeDI!BfUi@rgIf9C$JPQWa zvOW=pioAd07Wvqvz95y)koce?UwhvV`hGJczCr{^;+SOK`8boAuSWwwibwz+00BS- z@ByHJemSbnvfHab<_wSnc)hoy4HY7F^!YjXJ@y3fHtqmk#f!2n@nyEX8x96oyP&8ecSF{5G}ZN#UV&W)Hmq^loWH z2EL4>EsWjD`qnGU8xAadz?1%K{`N6EHw1&#pFtA3~Wdy@Q=w%|p zDT+`S=t`UIp~zD?S^X&p4Kr?~G>#BvG(fE-Sk~&MXJ`|M8N%ubR(u0=gc%2c2MBNr zgcU?4L^llGlZ z)O&oRjOne=tdunD%5*!di{&==+@fl=Kabd5I<@`Uj@aDR#!Z{1KVCHEz@Em% zofl5spH{1Schbp*jFiA%vY&r=t0^Pmc(;4d;j|R5sizC$W+r94Yt}EF znKvOP`=G4!i;kja@5$A>f5=)pMY(@?sh>qE)iu1lf9Zupwji&h`CD=62jbWFhPNv& ztu3Fw__5~J4voit+d_13c(Hoc+?c@eF^b8BYjS%wWVU*j9g7T^v|z(uZMw>cg=s$c zr+$-j>l8LOY*(`;`C9NhQ}%hs4_kf3<+Gj(#rvgCSIN(5qGHaR{M_fCAH4J&qmSBQ z+ursUeO16qTf>N0zZ>LW=Jk>8%+z<=YgC6f3dKjq7qYP8YpuJ*j&}B7e(1;oopRI%j20-lmXm?&x1l zDc|bc5qP%ccEy37-Y@rizG^OB^U;_g$DYf?chI`+|Jt~|Y0Z$QkEVV$>$q1}d%?ki zjTQd)%4d%42`TS>b?PUV$r~QJj|!YPpJ-~LB-{7iy}CIOp;z3`e7dl-XZ#Jr=-JIR zQ9((qO=bEOyBD1yd!Gc>hOanyyd`qfxvqoFk)Pbza_YyTHJ;g|ZFoh1Ztt2MH=Mew zj+9ji;{u(LKHVZl?}a5V1aIGZ?jU)aq*?Y&=L+7fbf`y*O$YwP8*tv}AW zczTac|>uQd~K)T=sHWpC!@Y@(TzM@nc(qp*QypI z>O}YJ?Mu!?v0X>H-2NQic&__OTU^P<&JXhU)D4YrKYM-g{^BUzE~X}0SlMyq#aO}a z>r`URMfa>-7q>81I^&Q1yr4wuGW&sNT+U`&;?7m69%ql_JnQ^Nvs@(p=*vZl)p^k! z61MuQm8TS2_B4c+JS=Ny*vpJwPvY- zvh9cZp_A(x+x^47pY{2uiuJjR%Q{?jZnjSmbyjpH?8=^eh+J~A4Wm?<|~KVRhLcSCQ{pH?1Xc)iMO^; zkjNYpK>9Nn{#gItneqReUeup|{};#G(>dfqSnI&!^9TOI17&x+Pu=gY)rlh*)7xYY zSNjbejvGmqvu|65@b^Pq(n!vPo8jeyf*=X-j{|!<2GCzb(6GO$QnwDbyNJh|c^8z) R*=Bx>7{I@=sAn&N{0G6pdh-AP literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Float.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Float.beam new file mode 100644 index 0000000000000000000000000000000000000000..680bd08482e3ed3bf73e11730d127563ab3ee45d GIT binary patch literal 2524 zcmb7G3se(V8lFjzge-wTcv~wXFYAE>JZcMe8v+55XAvx2>n33`fyrYgolHm&Wi<$G z#aC-VL9Ns`SbLBn7NHcY)v6#U+VZfjJ;kDHZ9RaClvVcL5NJJz?m0W>eDmM?{r~;{ z`_H}izZ0L95rH61H>9$dlo%%KWduP3CnhEaxqdPoVIk=76-pyThRaBdQsH!XypB>b z8{~3=R8w+!wUS|IBFDtwMgvCa4TKJ_R^bL3$CM1Ns>3Y?ie`**y=w6ewTZ+Sf+CFy zy%M7-qZp71J*6_~aD|bfO&B9437rC`bxJb#Q7+ENCzZBHFreO`lgq_wir!$LDTcx* z9oJ)~DYn^3+e{U>ZQfkr43_C?m`mLs!f-vp2vSFoxGHQapeQ2jdDfOUU}M4OKoH~s zfB*nKCjoo`IH;f!VYvqgQ2%Ilxi{B6vP4>vVambjEUW2*k^{2(#i&^F68S;>G69YuBVOl0j$@n zd{30?ZR`7jzR#pi>)RHMt&~uzzcqK~% z)LzAU@D^nLz0+FP;oLp9(EmxmyX{gWnZlsI7oZ0KxOOm(j~%e>6$5rSkd?MLY~Y!l zZzN$%loTL0rQhavtb6Z7+8bj;!oT=uH9+r_gXbyp3CcvQ z6`>@RYC(@V=`%o46 zX0vDZ@!rOUJO|$+y*I*6?>_rcO-A!*nrY;x**-x_(;`3qS}UL?LPS?)|I9`gD)+ZbtWygI{5Oe1;X9kugTBtcRb}JbacExL$Cx(NBzqn+S1^Q_!UTi8{F2>zcnAbHGR`ESj>-t&prB$69H2asz*)@`9JJlQg zU7lo(C4L^ctL{#D=N0QeN|I}Ke%A28(Y0d(@^rGasN|BruH%99rR+mI?K5jZah)rF z%W!+hvD5blA2$ofx(4pv<}>vv<=YSbv$13%A!|*~MdR8SbLiRGU1LoL%E}uob-$$S zxjUM#>Azv!C2d*z39+NF_^IDV!z{PnJG}ST<2|X?u*H6bea%T7BURU~c2_NJt@`fU zfwF;t`1rfPh=(CRu=={!eRF}c zHE#KkuSW67kkuvSi#fNx*Lo;=Up(0T_|4I@<;};)g4X@aBGyX9-ZhU8&k6hOQFdlb z(cdm>`>h@;?)B|$toGstr>u_p_4tyOZ6nvWZF@Ve=oyE9ihUo6qc9^lv_iP2(1Vt} z`n06fb7DbC-}Q=L9bMY$mkY{b8FcmesHzJ)`^MVi8v8HZzkJi+C-JOXKauNI-}Tm$ zbra5)QkX%7i1Yu?gzwcQ@NIu^{TxpiWD>(8FcRyH27 zE}I=-MY9Spr_ic{mM-h zd~fl+AJXS^IuBByJU*`5=1uUoQ zmlB;cVH=5Dz|R8z2H+Y8qd-}P!mj413P`1%z$T3ylnkYZ)+Q1ZD!T(v-ZYv&*FRtR z{!i!Jsp|T_BFtQ@L8SvToxW23BwKLp*pi-9Pi1R%U~pPL6K7BKc|%)0PX@mr;JYmV kn0mONVY>(2oxXHxLtLJ(nLwFYV1Q$I0Ps#mT_+IaziA?16#xJL literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Integer.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Integer.beam new file mode 100644 index 0000000000000000000000000000000000000000..b176b467aee0dfc76a4181049997f49872acabfa GIT binary patch literal 2536 zcmb7G4OA0X7M@8UgkT^91hu9F6&9)xeio2lgODo!E`B?-wS3??%kdDTrGX#iiTY!s0>HRs1=^mTCnp`z8c--9z`BopZiEN31aY9@L*v$v%;0l4=7q+l&a50h>QY#dC>_;a}ew&?qWK@ zVlf}QH;Feuppl6;@Ia#zGr)VdnCS$B$wCM&WAV64;40eWKY4ItIP;#Xn8W*;ghJih|X>u5h zShJfiXXFC0OQ9CLdFfgG1&!AhedYGP@W&M;ee0n_TtVAgPFnz=_m1|n!~(kS5)IBd zXpfowFo9)e9*NODVT=d$4p|wR_DzWoIF;IbYtOCC1#;VLBuAcy;(EfYWmxd2(u(s7 zo{wPecrQGM_6?H2VE_6t&&`Em;xH9h(dGFy+TTI0~2jq-?Rj5johN~z8m?a`}aGXLhwGWbqV3bIggCiJf6oFzvigM{1BhsMR zqS@^td=Vqqu-I%h3brJva1#WvWX8(l=|k9%-=b2*DRdw>rWIy>^r|a+a^=*GNUqm2 zjaRTBq0A$uy!&o{`v=1hwvPTGxaHZeR`omXF!t{1NRXvrE9+AQPu|qomOnkexAV)s zzeuJBBinkF&0QYk_3@;!&iH`Dv);bJWle&cHDB}}&`(a;oXtGrmhq{RpEDtlM2M8m z`Xi6Ja!x6HHn`{4aqBbhe?l}`ue8d#7v}9T((1m&wK)2U$KA=BX+K^qXp(oCvb|Hf z)yKn>to6sxCvAiI#R4x^7Za=JxtvkNl}MJwU$CwA_$bo17ZIxL`FlcY0y;=xXt`}&tvQw>KO zmU>73l-w%j+e~kJ5!Vs0S>yZG?+;tga7?Ko_d6VGcTPL|pL)FJ)m6{J&WhRu_mMRN zMQ0miw}g)qm`*Fcw|#h~KXCf1eI0l}cM5Yj!gKZI3AdrqnbXZtfB7}uDhpqY)gttvH$p91eOJpVGSn|B%|$F?stB=>XE6xe%kH(G zJxC1Cn!H_ITk!H+`r(#P@88}S9?PqCDM>nddGc1nvWcj{w3wZj53))weizT#22Oq~ zt{_3;I@9M0t}#|>Q+kuT{dh@(1BZUFGWzr}vAvat zH$D(n9eP(6zW+w^?d7b<<#l&Vw_jds)m!fwDtT yP+wOBH9Zmhh=A|r4KVkxLC1U-@@>!CwnO%>*G(Wy-=U-DZ~*9g8FrX~pnm}~0$`N@ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Jason.Fragment.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Jason.Fragment.beam new file mode 100644 index 0000000000000000000000000000000000000000..752667c387c438af0193ef86fae423f08c237a21 GIT binary patch literal 2608 zcmb7G2~<;88h$T92&*Asa~o5zE)0;Mqg7KnVOIfB7Ewn`UXmAhA<2vHy^t^rWmh|h zL=ZJqKwMf%9SMvBqpf3w7ApsF;pk~ubkG^46}JkO0X@upAz{iKoO9-#^S}Gw@Bi<= z+~vPFDn20?f}ECyMTW+OQpu|!2%bMNG4TV-FH(gWFd}FJLgJdBNR14aqqbfYfuyNX z4V5PrV;Ti679U3_iom2g3MI8NT&=}a=y5r!B~Tecp>i{7(BcF|iq-O!MukozqcB`U zO4Nvqz)1lBC2Cx*Q=t-)B6KoJputoUlu#j>wC8CkC7u*oJkbu-T9sHVP~b$KmcS`o zhO1Z}GsVjCoQB$BmY|kY%)hY8@(9Essva^iyK z??BNDer{qjI8Gisn8iLe!mJ)iVY0n>P9A|8e z6`KvSxRVgzJpK~^%hQ5-0n{tR)e~lUTl(Ih?-Szc&4dyuB8i@W^=d8M&IiN*btiy42s2Nzl_}*DA9g==pk0# zD->*Qz@M=AVFJs{Oj1Mpgf(pFN%VK|{(mWU`F%J+jn1peRRX!A6ir7mFWsyMF8Li07OUO^l=17o6g0a z1o_I)3}`(+nFK!hatzTR3QWOI#1)htjN+5&I8I@jv_LcyR1dy39Y-~ofe$JL$yd^K zhOfe;{K;h_f=~ms4%Vo#DstP2;`&rppp@6Df#ljKemO%lF+nP^A_WFQ_=(^z7;5!4dt9gfq_~7s--5 z2=49xzQJeJk)vVj{rs+Gzq8Y~GADQ7b-m>1Nx?S7lJomw_P9`o-Tb9`_l@gaVh zU%J5|m+_@+P@W*6zd*_^|c)fS$SIsA6t~Ovy|A_Fml}c|Y$`WzDGo67D|plWXF{XGZsHcgA0j$LIESY_2Njw&o14hqhjm_)cRhvx=-~RHG#Wn2?@S2kSxgYqLQf{8+mBxKu^I`7wVgqt$ zOU0Yekp7mImnUuyH16G;;=a=@@^Nu(%)s6=@h!f%5;J!7V5iQVYVI0RFM3(fmAW;g zw=>9-5UBPbBs1mkp3W*~p|D?fVaMNs1REOK2dfvo`@ToA@$kX>J*(bbAiI$D=^g($ zi1wKD@g-c@Ap32613F~d@`_be|K1;<2wX;jgUzA$8(eERrjC!<*d}1d_1rqtQ1mst z)yq-3Yj2RGWNUP{AwgJU`ZiN|o?K(Mky*!Rem2n==Jm02&9j;T9;s5{sYe%G)qV9r zo!5>(ZCm%SU0LekyP~qhb?$e+ySwII1h4Xok(-Av7Nm9DNis*JT&*lCXOKLpc*zf; zL6?kf1)o)Tk37AZbvlrJusI3eVGr-=nD4 zp(3`^Wa?<@+w2}t5%99FIkn=EasO~cSIfFV-tj}*w8DKing$s5A@l1Wm7YthZh z@7?p`@P}hR-)Xr2ufIAke*U7uAe4UYb>T|((}J?v71GvR-?GKresf)Yd@B2ocOfX! z5S{^MTqd zFbb4zy0MBKC}LIvpad$FZE>*zvEX?F oOe_Or`&fXn+^ZbNA;%|>+w|HCgh^RidW;Jo`n|)LJpqaS4e$kofB*mh literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Jason.OrderedObject.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.Jason.OrderedObject.beam new file mode 100644 index 0000000000000000000000000000000000000000..b05f32c9cb271b932f60dd872fbe1352545acb3e GIT binary patch literal 2728 zcmb7G3se(V8lFi&LgW!bAb_>TiV77-z~b8Dqfv-F%1Z^^MKKJ?1O}3sI5T-rwNe7^ zii*@DR4Py^B6Vdw=;GVDu83XhTdYg50xCWb*4MTwOD+3Pcyu|(dd|){-`sou|G)qL z-+Sl(<}OHF6pA3i>iMd9@$=Y}nFxZ$4h#(369lOAgq5H}VljpyLsX=O(&EFTL>l_I zHZda`*RXkNH9_hqwYnN(S(?Z&u{dMYPzEER$E&rtk;XL`i)$NjtC6BvMs3iBm*`BS zh9xMHNjG2`nqm|nOgB(klO9iJSlXmv6(pfg$7wxAWV*oV_OTy~edf4I`N(3H zPUaRKV=!`U0Dup01-Jot0B?YFs6Q-6RaU#b66B5m9{>uF4E3Qw#6x4w2e-fO0M2GC zfRk~3UL3)4aiaj-!^tPw^jt5CXAuk^B8I|f%-}bH@v=efZ8N}Il)U0ne!~TqmIpo`T0m3rQ!U&#d!eu0k}9^e%!foeeZct3((ftV-^`F)Oq3KM3!l!IR?hB{ zb}Y=ZJ-ebjnGJg93_J@n6O@UzTUlQFIdg_136HE`xCCB5hl>q`VtGR)WM?B0F{BQ% zyD*ZklNqNODA62*|9*%9oH$WNd&zQP9W1^irDlwng;WofI<1B@G&sXpoOLv105OeQ z+`)?LfDSieAaDZ#W@0I>f`JXV^^9R)%^ExhNs^~95L2!tFcQ-dI{9Ks$68>PoXMgn zmLM~OaWhV`a$^>SlY~_c$yjP#Qs8?H>aaxNrT(RFFK#{=!3V9hP`}#bbZxYe94}^1F@`d-TdO)+oZJ{?*!lb>bhtKTAP9(!-xwCJMboYi|xOL>G&w*ScW z;yrhzzyE|@Se}!#dVFnCTlBT9pLT7CKGe96wBBzx3`d&~}9+ZMfF zCdO-4tb4IzcbZ6Xt+rn}<5A(7CyG-Z^z60UZeL31QY{mn=+5<+`O0zJ&NJ(=pL;4L ziPG!MX$O6OiAqbm_DxzEW?9gBxUS9;p0=aZcA#nLiQ~&Yh@9K=G*pwtM2tq zu0Pg2YP2YBTnRrQb9M{xD5h$4`xJw56(>ditGIqherxx^g1?*hKz$LlL5 zrG2<%*(Y`DLt@*CSH8+~tnw{6|J3XBjnclomdAbn%Kzrr05ACH<+75l&8ZJN0&X4) z?5URRxu&_XwJVNLJ$kqPJ8jLun#zB-yPfDQ>Q69l0CmSLKN3_wXCk-w39JNeERmJk8Twd9By>V8AoN$I!kJgndVNI>R6E1bN=G_ ziw{)G146!@J-2Df#eJb)uQZh5|3v#`sm24hqgU?Tv?zLFXp41Uglklj)BWuZT~En5 z4~wKv;+j8?UGhMG{8{(TNax7jo}iA?=Ms0?s(X4($1zNt3&# zek8v1BKm=>y6CT+ZriHyrpYcZ8un@GFxz%{w~%+p{rP=iUx)c``S)i&LOfePp4DE} zkTUk>ojI1jPi^rHz4bv^P4v|8p!!!xVQWz;)UC=Ikpnw)#0CuEf!nVlYE2fd$-!y0 zIg|wp)Z#RBr5GYYupHq=3>`G#GejoH9pQ!omkF2!l+QIoYA0*IRNU+&i-xvn^^V#3?&%m@i)bL{cizy6!ISVdHu%P;Rk2mf2i0Yv#<9v-#Q literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.List.beam b/phoenix/_build/prod/lib/jason/ebin/Elixir.Jason.Encoder.List.beam new file mode 100644 index 0000000000000000000000000000000000000000..7c105c11f2576a6cf43a218a3a7cfa95e3a6b9c0 GIT binary patch literal 2520 zcmb7G4OA0X7M@A?2~Z#;1jrUF@?)_p1Z=UO6@!u@f=~r2s5OLS0uz#%I5Qz}g%$*A zS62_~u2@_}L~sQx0u@WUu*XBi)v8oQ7b=SEK|pa)k5~lk%H9cq)^q5dvvbZj_r34l zckg}k-n(z!PgoyXQ$cGKG)V->2qme)sGvBU zX7c26oKTZ;dAWjNC_LT3V6

  6. #D~y{RPn7d7T-D>@vY;ZlhYyYSu1fs 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.DataType.beam b/phoenix/_build/prod/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.DataType.beam new file mode 100644 index 0000000000000000000000000000000000000000..cb31ee0056f8013b9f3ba1f85906343d49c72b20 GIT binary patch literal 7472 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.TypeExtension.beam b/phoenix/_build/prod/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.TypeExtension.beam new file mode 100644 index 0000000000000000000000000000000000000000..50bda7eb9c493f890897e8ab7c67b86bf02427ac GIT binary patch literal 2312 zcmZ8j3se)w8r~&<5e__&^lGBjHj(Vt`{U+7OZrS(5C=?B?N7e1Om@ zQV}YO7Zt%L6%_>q3ce5#e8bTSh@zl^h~T5OS1sJxh`sHdbH15>zW*_^d;WiB1Ti9C z2pS88@k%T0*Xp)XZ2#pk1Yfu$ZBttY>L@FT>*-6Bx!L=kIR?Ft($aR>M z1inO~S|ZirgbyGS)woQjLJ|p5tCNyG7^+G{v?>XfJd})(;?GLcN?l2aLZU};oz^tX zkxEpmB#Bf>&{?>KiYifw|Kd*m&5>^BjbbVkLuB4x_RRJ5raS$`{xdMph2b&;f}q;~ zOaQ8t12_O!!ps85jOE6Jrv}n8CeT^4b)h;Dk`%8+(vVzTG5^#Y*oSwC#)f%37U+e% z2nY;`JTuU1cr-R(mrRA=4VFv>8_uC(yL)9p-iJ21Cj#IU2qlG-@xV`<0!87{zwg%$*i-A+ z1F%PBb_mEqAbXgi!5|t=N=bpjA~8A8zA)L- zsMYmgHIPP1h!(){p@`3EMNmP^4UQNtCNvTQCLT?4tyrVQr3gV7#>%z08qiwAU<0fu z0q78o1Q6DMkmyKUjH;++3Iv5G zC8OY1yQd4m7xfwocjVP=YvnN;_FUflc2&UGJw+i~6f+>(ev;wMU*JRv6WD82q`GJmtvx5Wpl_o(&lqO-oZNF&p-S_?xGk?D%P#|-Q+g`^#3cU3e zL#=NvFE4Y>4~Vwf6UXZ7K4f1uue`PY#Mp`7pIH&SZe+T1(6RLk9Ur`$Tq;uV*LhBJ zcp1MbcyWHlX2{~`zv?6QEHKNG6rcl}+EcGM?HCt*XzAwET}3m)dVV{HnXI?Z(LvlQvG zQ!3n2oBQI^jtajKBwR0Ys5#Yh+6lcgcT@L_z0I|DffmP4eKXhZtzwqdSJkW7{g-@F z4`g?Dw-lRuq-?F(zV?I7)TR%S&stwrFsn+?@gmH1cn9OOtA!}+(sUoyWtzjsY)0P0 zi@5^y;O-AY$6O{}OUPdN>%Ze`5A{wnMxVX1CA7i@Fa6KKXN%U)y|K4lKYV>;T((z( z`OYSrp2bUR3WFC+Ddb#G?#wxBxv2SW03xz~=K1u6Mf2T9GnPfQeO0A8|I5Ts;N;$X zH#l|)x^YcOnR38JR{yZ%!Y@@Cy5n!*bv-j{1I+i1u~?RVbBNQD7TaEMYJ%g?uH)NW zH=J#3B>67&_u~amLfR)Sfit(o4rd7tcl0lrQ+n~t4x5O;pNRCvqM*jmJKkX%$2->8AMvx#NM*&?syD|q z<@J4fzvydy*V+sG%q6)$o-?c+G;kUv$5gML_jBi4;YV904ZOIRsJT+{xI%DNG`6&Y=GL!QC_5H(u^jE}+jDl>r1ejEwEv`a_{Ocj-ZLr+S1J$QnA}sAoRA(W zI5Nvq>vDUBP~CZT4QmpvJ=66zH|1UHH0xlirh4A_@q={>iQOf>_m;iZKBa#@e?_LD zBhRvW1>?oLds&K7f2UdG_TdVPG2~AlTE5NyxT0nE_`}g?Q*U(Xk=HYu{-_>_MGu`o z51u}rQ+z42HogOhd#8w*>ef7esBHr6F0&-rK1`nB$Tzn{}=+Ls@bc=ka9scJgRrxZgW}IO4$qwl3iQ z;?g4ySwi$yQ8a74*T9@v>wc?x-g*6JFCOf-k?>t!|8$(tmxApB+&JIBf zU4EoFbL-2?Gp!X{Uz6hQijVW~j+o)jb#4RK&Ig58k`Uh*rUdCFOb4f-En<3dh@}cd zszkJ6y)Ow=uwl&T!@+cfE2ta6`k(i-1paJDBhX}nIfi3MN))){firbKd})?n1nThu OWa^%x0l+pR5cFRu&uC}> literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.beam b/phoenix/_build/prod/lib/ecto_sqlite3/ebin/Elixir.Ecto.Adapters.SQLite3.beam new file mode 100644 index 0000000000000000000000000000000000000000..9df6bfad2c8bf3a53a45f83040af6622a96fabcd GIT binary patch literal 32952 zcmbSz2UJr{(=Z{FOCS(BNHO$Yq<2F{=~WOA0t5&xAqh=UsfwUTkrEUIR1~m)6tPlO z6e)@gumFN67Mcab^6w4sJU-w1eCNF1&pDGjcXnrXc6N4l?(QCJoZU7tF{RX7SerYV z(>x8BnAm21|Nb2fiCaez6Nwac>tGs5-8=+OrV%Jqb$3?>B8{M(5)eR)2_*#tRN!ee z3Na{-Mxc^|Nzr6t6rm!7K&B9a@ian6Jt2`yqR^-T(IL8dp>Z+6G$JX68W@carjV$b zfEXA}3W;-bj`!O1!y2QooB$BZzDiy0#xJgJbii8jOPb;lb zsW@0?mr(FVgZQIJ!I1%Aas>P}CR8$T88V&%&q>&kV2KrRWS9v?$Kqm$v2g@2!Dxgq z0tLblNw6XTV4PMx)Fl`XMn8o@ii!%t2S>J3;$i|4h_rCnan}9CJ&8&qM9+m1V?sc0 zVN2kHqW*ROx40O1EUaPQ$s;5N6UeZ$;9^KI1PDW=fv!>D_5cR_9S6byflQ901;h{% zG(jWnR2qqb4+Eo3N{9&zCD4MyrRvvQ%Lc?6EG0S+cnBdTWNf`A7$aI76$}w<(#<%S z5gSLYSTBwv=aGRw1yG4Q36Q|L&r`zUq6slHhL(`%8r6C=u>3K1K!{^Zqreyv1$bgb z2$8x@0gg?;M*}V3KnD8@?8kYG$wJ1{!q=5{0XQy#LZz5*-P!0J2nI0tG}d zsXrvZV+@H>^q8pNx%=01Osa1m5e z%s&I32XNm(MmP)sVTqv&uiDz=T;tPG`?~^M0tElF0%%Km-I)Kji~!SuNe%J;V`>s& zf&ukEWNm`={-<~?HAwJ(O#c6cSz8SfP$R}f5n~7;U=3MayEHbbF)_g!Ffs9bV`5^$ z0D%840cZ!HiNMgAnE9kJ2&^&kv@pb{Rb)}*mKg*_H_fx4sLJ}1E9mCAGfJL<9P#8eQAO`7J zWmN)@^oRtg?$%50-##tiSaVa>KV4Q#@&dME!lGetd6sb6*3{EEnoqGgaq0I(KFCVmSf2C0IUMj|kp*i%ShEJ~f9j|pfhz5cGT z`Yr?8RhC{48qfp{$Z=_6&Iw~#1aL@M9BLCky&W_J#zz5IQ41~KiIzt|@;FY|kdZ~{nEv@!xx0tkJK9aE2hlp9!?Fexm;?Whe* zDa=d{P?FdbW+X~i7p<~dT@?YTfa*Y$0DX?ZqT0Y3h)F@Nu?&u{vsfdUk=880Ub0Aj zSYuh(40H&yY6*2<3H3iMq4p0;XaY;9{b33CT^+WB1|8xBrqBac*W|)tSBHuY@v$(W zUEx6y;0I%(1xh#3A%3_b7+Wm^v<{L>Qxhj6fa8}nM*<&0>1)@>@Yf(^=#T(d6w%tq zPMm-YP8JL-Jg8cLOPddFR7VHB35mgKTFbyQ4br7UfpZ2&r9%jkrRu?*T4 z41oa}hcZO#BOrZ@z9y3ZwiP{wF; zz=lJapf{sT(Pk(!v?*#c+609|8>7t8h6u=z3&ZFu%7Xu|nF$H4PE9+;)U*Oq(+B|> zfr!9|0qq#Cb65fnFmd3y3<(1cSTPq^F-#o>D27}gCkB_vzj2BDlMDMFT&5T-)|%fo z5AL7Yzey1Nrv%Oakg)mRxHkNg3-=#fxYc$Ub~RtcD_|WgR`Gfmw_KO}M@)mnfMhTZ zTNswJ29~ozKvozmlQqkl^{g2$w(YC7v{{um2+Ol&!=izA*wG;&*dMphAu;&5l@Zyj zfnV6e0R}_}IP_|^BOnJxiH!>aa>QA>`fZg9ylpQN<33bzUn3G0X`! zhJak?kT~$SEldc=6^Gi&k7HgNNeL%SP~DBeXpcca?oOCF1mwYZcL496pnZNgAfgn2 z8W5m(G0GeR5zw|{Xde)Jeb!-IwS{%#S08u0v8jA{vZI# z+cPm%*+hn8Z382g1k9cYQX*Y+GRhmh3+02}iGX&lX=V!vf%F3stYLv4LI8w8DgZCn zEJ((p?YFAIu79mB^1s$k{@41V|7-o-40Zj1x_g|k&;|swmkud_zU=@MkORtqY$go> zrLGY{htn9#9Se>h&J*a6B9JTwI+_8js)bJPM5iO5bULI2R(mF}bVGcMU2q*)G3IP$0AOn`mEDV+oDFeDBj)f6%Kr#WT zK$_4-pj;*$QU!X3V-V0jE)2+AKxl!}BS;N|11!kq=#V;)FQtOsk3^}{A&oVS+EG!M z6lRunE%unhmFSS>zZa*OXJMG&8aR|Xk}WmL?O>MHJXXA2cQlVIVms1e6P>T#&(9^ZAVC4|k#uBcQ`7=sW>iXoE63 zkA-)Y8D6;!|6tAoErAj`WCV!vC(wmRkUfHE3`Qg#R5b?8E2y9gfI%6y$Or96K zzz)odLcj<=k1(7n(FFk&Ik`X}TP&tSCZLx|VBAW$G_j1qVmJ_vAM|V|=$R=ad1L_= zqcc=4?L?O%pi2F4XFt< zUQZ*T&7edM81U~BSpljv--Zjg=x^{xmwd0-W;|S>Zzjv(y0i9rU zt%8wSujRv#6+?!AF1k_{Si=-ug@7sn!bp>=8d!0Er^(Ph{JQRpH9!E)kud^)e<_>- ztH>#M6~XYUpilCHuY|RJ$ub7=Bt{cngI9x)#_Hgnf`i^^I%EwxnhJcZ8ca}lVL8JX z=QLo2vmg^tLqIhQLV6$qsy&9T1DQbGADI9n0f4_R{v!ieTm6AbAgHi_)f#-5S+FpH ztl1q-0YbFFsN*~=!Qzi|N3y#>>Z|!U7}zXKAj}LW0IMHtZ~~C7&G=>mIs1Qpv(>?i z|2g>k7?lBfavuJ=#XuSe=)x)u%)^Utj}I|-$aLOK|wYsX#Trk69Q_XLw2CxASk#D0<0DSYNbP40Oc^CTv?@Dr9)c* zB@a-p0g5&Px=x4e0i^&?Zmd#nGSn*sdbF9MZz7r8X%r9et$$D*Y@HCWs~c}vcWVc0 zOAo9v*2c}*5gSa3iweQUkZ4$VlMDOzCKom^5O84O{T)>-8SGI~3D~eWJlN!;5r8Zj zmPp0oKZ0QlB$Vek|I0RM>tkN|)L0Mj=DfdAn7SOADMTnaqlI&uKy0l;(x z0MY}(eH5}H>9{?;f06-uBSPmXQ z&>9ZQ(EzY+lh8FBt{?UXod|GPP6U8R0I(bwk6FWEd#>Ax3h@6aAFdCNXB>caJOSXa zOjyrE0AQtO+65pP08EGR-2m3x+Vcm#7vSr>X#j`yhwYgT0G0#y3-%e9Hw(Z40B{`` z&soC{foCoNSPqQm!?<-K?0X1UAJ~U70KhUXuHoRpbRGcQ4m{?y0M^?-3-D9`@Lx56 z6acX7asWwdcnNr}_q7P%u>fHCaQo3~IIL^<8om!a*T)d<|26=yOjw>50Ju-E9o+%I z^k4w403ZOce>ehw^@RCgAB5ZT1hDR#FrOU&SPtx$HUMDz!F<*LV3}}T{WV+Tx(Cb4zo>M46r}b5dg5> z*)R=2GXVGx!TjvDE_faW0MoC)G#J+C2iNGA*PiS2g0=S>;0f!sPS0DTUjt8g-mcSO zyTkGu0lh-HViuZ+OZ8o8t2*z zd}_mJisyfv&oH!Mfe&dI7~AU7fM)}(q5eLf!9#HCYuo9JR{rf6hS31~+F8u1`s-&Z zj5n_J(+T*rg3%oJI%V}ZgF!>B)8fdhDy^P5FuDWk|9SAhkopG=R**sa-;WdUOrR&6 zf1D|-4#4Wc0-g;Hc0%d!6vdo-rdyJn=jSMSW>;qZ@f6sNc^D-e8X<&ujhMJ7*e5s{ zBv!ENPNacXG~<j77L;ye80sA`>(fMR_mj< z$naQr!9~VXV;Ffy42G$7LM^=uvoPl7sQRk;wuo;8DCYHI6_@g1`Cxjbp>Vwc!pXLNxy0s&D+a>K=dJBl$NTv47)n zU%g53Z}tDR+u*}^^(I3^gyoi)P%sXo4Er5YdUqZGRIO(ut3aWihKj8U?ndTxmy8+r>4l0>eUgfA=JWdV2NI9ErMT%FFM5 zyZf!TL_<5^kngV%Omxy{c4)5Z)OXgl9Ij~FM!^uV*Trq(zh=L)e(TAXdB0~{oWJkr zg5RXbl5o!J>bC2dw`bz|7NYjP){?l9lr*;es5AHDnw$@lS;mGkdM6&VL_dD4>K^pL z)+A)M)|YK-?u~T)uQP!MK)LBNK zJR&GO9p1bBs#EnDMc;k8t<{RDH|}_xMJLQ<-IjY9P`0FTe%G(>LqFQ^7ismcxiPNW z=J>TwW*XY@4BZ+JJN3~;yK?g;n(#FCE|P3)YN^}Db;7SK=fMTHhrvBuSmS zKlHCGely}$`PT!VQKAkJ8YMJQUQ*&c^$Ja02 zJ|lvkrkB%>57^w)UASMnFzyy9q{IBFGwy8p?g!klt)mj8tzGA}#5bTYKdwEJIkysx z_xJ1k?IYs7PrqY}^3w;;T(5q*94nc|T=w3{W5k1tb9$qrS!JDD#xvItqIWmsIY7R} zRzo?=SXap2r()vItw?;jdMR;Tv`&SP#E|dJGLj`5^=p=>`yT--P}D7oP8;NmDHrT*-!*~XWn77fl-$yRKf_TVf&#HG+&=%A^*|4iJwiPK!N)Z@|KXQwZqbtm=6AG+P-KTqzm ze6r0#VB>9}cbDVrwZAyDuAug*K`Xd1wQ3?>|0 zM+$K0?oE6hxT|_1@{_ly!#=tuo-9A%&*j{HkHsZx;n!}cLOl5rLLlup2l6f7%OADA z%3rp&{akwOY{EP4?S+mWJ%$}}EW>s$*xko1PTYd#y!ynYMr|w!_S6RaglW!%!vpLt z^~3kOZ`2cI;-1M2jXZRC{Ic)SkjyxrNw9^%XSevKAsya}#GhEIGa46My7KClj9YO=C%t_L2Uui%0sxqyl%C?IOHd@Ue^Ayx_xa=5xhzaAEm_ zAU*kOHm#p_x+nWb^f17q%y!8cTb!An)9$VfJz6sGx8o2f1ut7-`w(RZR;1DbRVrM!QFWYOEok8YEq9WIpWiNwGlKvVBNf zW=wmDc3fO2Sulz=0NrjI8k9&$OLKAC3L?d}w&WDO{od3!hk4 z@^;EiX5tH(iqpa)D#@5YzoUey=mLz@o6b=KlipgB4KF)IO)Y7zEY}VAT{pGI$^TTa z{a{yqwmjYV!i;$L7PIQ%pR!k6{ioC(ai3On%71zN&SIK-^;LiQj$-xey|nPO{qo*# zKR3K*8ITen)#@#I7GC2s_w~>nKh!zOVuf=rF zsXP4+Zt|FguW4GT^$9j|M-wUI_zc1&cFr>(`r4G$&Ni_U2Snqm-aWceB)Rbncg>8$ zfnL87^>>R>QnN}f%y`u8PuzT%F!x4C`DWC+Db+^Ki7G?M$Lt@Y56gZl;n3SF`jKn! z$c?kim_oPP8&5RvH23~sJ@heO_KIz;Ra5@HeMfKbh-LjKd!o1NlgMwYgrXgDSI_HT z`tb6?)bNez!ABz>ehDsb5_zz9MSdi9=j4}d1ERjiH+?wt`2A8Cr$%;g-}6tRBf1%` z5l+t9yUKPojDF0lzmZeuZ(Z)R@vUj&$|UXTmb}d=zenC@+ArUd)Nf@EuDas)q5MoC@l#I&H5+Md%`_Tu3!jxz7BpR9-P zePN~F`;vKXCS0Yjn3lG{bE)V(CkzL(wdUs{J3RaJE>irpW5SBw8@lrembrr^-ay9N zW4V8)`p0uW#luXu8JtNQBysX2h~YUbD}L^mEg9H<3BXp36Fhyz1HV@Kc3`$m$lZD8 zXmSTFWYjF2QyF$>r?6J>G27BO>|hwp)b(roqHD^uRV~wtSii>v!G}T}8~dCnw>8-@ok6vI;Vr8|6PM23subl7&_@pUK2pEsBU-6bk%lMZ7A58Dk7O$WJZ3n@q;&q)&TFv?fQJZC&QoK6O*gUKa{~LWLm$u zU-^LK(`cpVBhi*DM;pzJ%|f4N>`pYW_!M|w>7nJAFXyKR*bn~CcSjyekn_srU)p>J z%H-gdzbC}4VyF8W`8!Q?m_zSb&zm|0k)JxJz98`=4mC?HF=MI1L*=ESUj05_4oJVB zd(|5ntl*|ns3~ULaaMt!XLDOkL`%}JcVFuv>65P{x8GFSN_YF(y@l?isZ{u?d*!T8 zyZ<3(^-3Ak<>(r6ub7;e3--f&=XguweljPX+NmbK-Qc;!Sk<^t=bMaCmcCov&$ZH( z#IN>qRy*$MbV6B3sEOE0edxOqt79I|kXSB;E{&Z37>61r3DODj4} zyZ9-iy=Lf+cHCsLGBHS>d`vI2SQ}N-b!Z0wQ6S; zOugyiyGzkgYzwzG%y;Vf<*((F`*vEsSKDT4jyyDQFZ5`k>eEBM{ijD+WM=c~nloQ- zPYSO(qcVWs)68*CtvNI0QqDGm>!#}8#?CBr$2Z8;_1;C8Ue!{&YZxAP}x^?nw3wToHX=6}Kzk)b#}p3Y(o*e_$iyKWmLJnoQ zA8sMi6*ml?K5n&Am}_|BL&fc~*rR>HvCEqlMEq$hCO4pZV?UF$;qlIsT%nE6GIZ_8 zC#_nWE?c(`U%S=q^59Uxt(s|N`GsLtVT)HnXE+NuAQoX z%yYZ0Lr*K;vFzq;bu<1#$;-cPsk*dsYLO4Ih{t7dM^A51)$E(w`LMXNJYBZI_tBVMGT&LkPmgQZgw zk8IopXA6%~-_|@I$*K9S_PByQ{zpy=HE%DuJgj2E^nK}3{@ZT^PQQJByaxZ396DYV z9YS?fY<)4U;izUyZGNwK$4%zZ9i5yeJvmN%DF-Eg)_K=f=?LCm5rXx?>F?Nnt{kzv zR&y^VrJKaGC@PJVD041)qg|M&c3;7pPd|K~pM)#g^4XJP|I^GokBV1lK8N{y8RP7% zi-n6gd2|w`CCtTYIu^}4_fEv%TC?AVPpQ|ZOPncR1+}cOe(Xp5wDWA0IEljhU9*j% z3=TFOrqDWbJ4?GZ=xzCK_r=IpAJg^m?&a&=Zr`*7{5AJT6?>dKv3r7}vg*Ce8LD_x z7TYfro%3Z1*WB;V;nKa;r}Lr)CYvs%WIUmjKj%79h-5Jl^gQ65I!k7`iLW)#Q3^pz z>2AG69mM4-cE=yim`kwd*n9cZ9BE5mUCM^|-dY6nOBJuKGlmi2{PI(0adZ59l)W`a zo(CvLezrdS)6Iw2CL8wo#JJsx{D8!fO-Whr4`#gG?7Q{z2{onfhq}+9&W<$_Jed#! z*`9L=;)3TaLZ{A}>m+Qk`#t6MaPO6fcWr)N-!*!-{HBV(yQpyTq_}C;Sp})z10@B& zr|s|U0d~M^OmK7ZT8DN8D(|9 zaTb{qBijrqW8rTik9o=-jNr4vepch_+;jR!eL&6DXBUqMepR7#{xY(CR?f@Kd_i0k z+FO^=+UC0T`71@GPo74F(hI+Ae3C5Njc+adlDB=CQ@U9#QA^$&3d*Zt-CcL2yUo*W z;{CW^cFzxA0)ZPbE7bdARGhBCE*EAkb}v88z^NZqlorPJ8?u=;(N3`>anP?B?!0DH zzF`E1KJF7Ev(5ZXTzvFCku+NowY^2pgR{*pyuWy-(6h&Z=qr~~{9;(H1B@n z=CE`zD4d>{;N@NVnHk1e`HJpcbFJ(h zc2rK7@aVLm-=pWfWd^?`|M6sNWk?teJ246OxLD90sG^nc?#xyTOto?I1G~}6;w^h?WyK{@X5Z0ki3_@xBqzTi zhp+Rq5B;K+!za&WV;xinGNaNry%B%mDeiTNX4_V6@Gx&v$mz%B&d`~Qn|vZv7AuPL zZzS{-ir<+{d~>ErN#CC2ac%7Fu-Oxe8BsIpoR_N3yKQ#(3*ANUgPO-LO;}gD?al6M zGAdx_?ND|;$Rd#`yLoaFy|nL@X_nQE9?9#qBK(>ABmDVmk8FB)?2wSC$LCS?>Hc?% za-Lrzc49e-cf|4~$;`H=8QJ)1>y|v7y6%f9(m(Zi^l1=m*aE$1Y4rz(D0)wk!HTnidOf?;VEW_FN&=#wH})d{q8g>RAwcN zhML8B{VLNr<4984oXOVt8Ic!gk#uiTwH(lmm-dg;zYTR!p*QaKQ&`dFj@zE@!FI|&w z9qZ4Vl)ebMWpT=|bMR=OjG*4J?;RpLX5{wnm^KN)+v=V?qfI#+icK4RNaB(k`;BbZ z=q_AAP3e&T=_1nT`zJTo; z=kbpD$3N_kmrWfd{VX{1hFSi*%5Xau`#tth$TM8-)QzhstEqrPr>hn&8a`BiK;f>s z!f8awl%DD#4(G3YXnMu(+DqMT z5dXWpSbO$fwQ6)1M(+-B??CK`Te-DV)xp_7l*!k<-^LmMIe2`KBFVYw{y^|=?8k<^ zfgfBa8$R^x{`zdMpzF2Gp!k`zYay!rW@pt(dOo;+K=Gp2YIYXiJo6Q%*>Hdu8>ABCfwFo;$bqXcD2YxOsvl zs^zub=(*Rq+G36J*le9pM<%U9K5}EmewLw;=mV(_oAx0Cc6mAO>4a%89HaIO#SS{@O>=T@rZ9=N+Walg&(dd2F%xM`-*9Jbr{9_84F(6z`b^8pK8!xZKj`2a%&~OxQYDJ} z2#+Tw;zA{g?;hkScFe`IzJt%owY4ai+33N&O$K8FkqU7p`Cp1AHdZMHZ zo?2h@n#z>lS|np!Yo%hFbt+NC7V^JZBx6(@$s zx#&k#d}hoet@QF9*weU7Nlu-{{dmT@Ux+jXRlfGh9aoc#Puh3VzJ-#Zn0=X&G05s` zcoV`cpBJAB66wx6&olMiak?TWJ9OI)#aHV! z#$Y~2K1yzhiX)@19ODvnLzfgTl`j;gBPil+&4>JU^DKq1@|ZuZdT%se5?VBND9L8Y z`Ppzy$XLYcPHJj{zv>3!%TxM!ub#R)-$>HWMf_Z9UQWyWcEM@pu6dfPp~-oBVGRP7 zz8KYI{Qmi_Ctx>qd$4?IkE5$?_0r1itH*Z7CWeT&m>mB8L+R~Ko1NeFcI=$FIC8vZ zsm$1mtq?Eopr0bew}Z=maooaF(W{(Ik@RxE_pJ^Eu{!MA2$8zteahU6%FW4Z8>S_Y zhvlfALJzIbyI;1xd;G&c_e;~oXxZA<$ar;e53A>qNBJYOcAB5bm8AQVkLJ2Q6^*y} zeoz=hf=kFD`ddYnM-M%XGW*WluKl>wJ6R#0bWM}>S)QMflj2!4a+-N(E~sXPC5$x(ucP*BfjdxQF{095|-a`kLg*UR1e zj?L6JWbE}a?TRZ9)-huvt7VHH(at{JTk}=V_pOmMvx(klH|4}L)N)z*&1{G5Js;j# z<>$5i&^0R_Nl~qRgPHYK4ZV?LlYOBcckic;Tc4|4!q%@ND9$3mpBWX0-}rT;1)os9 z_1t|El~wmQE$UR#gO>SNd5g=X(ag)%(G}nZRfsTj;g4vyWgMwpl2#NMEbh0 zZI}0jMxU8I!miDVrASnQIopN&l#`d<4nFiVwFsX4}^`aoX~h2SqrlX|x7^1(qycCS*IfUn>_Nbd@d zH}C#NpSJS{pV*#^y~?Djdbz7|YWqfWE-LY8Ga4eVY&`IW4dGnu%4IEc&|%)4mdG%vC-=*2lj-|&!OJ5le#noz8D$8qc2dik05mYKpcc_~Ak)t>KL z@8-+v@6^Mec{me#dd1&%RL^t4Z6J2j-NGo3TW#+Kef6a5kL)hlFf&1Z>Y*@#T?+7x zJI^8dkzR^V5VE+nmzxLAS;=Cq$1!nvzFVHPp`*RW@=W6u3kxh-{RYM>10(y}Bt%W} z*oWB+tJfzX$-DhK>^{+T$!WKOFZdMT=Gt=KJEp&P?HIm*H&itE!Ifg+!uOlcc4_g6 z1IMRO$36V_&r@&7wk(J5&JVrh$bI&;EJ<(k!JhK7?#(stS$(p~o=Yn7;CqMCClMJZ zkdtY8Lq`Y|N?q+ArmN276$`Q}gFN0Fmp*|qMild8{2wjaX2YRTxX{Br*3c6oCDt=ituVU78Z zrfNK!CtDM&#;3jC87iemRHAkZ23;1bw|Af)FWIE3AtBJaD?y^mZGY75S7zk|aqdg1m4LPT_DH~wbh3Gt0CT1n&@pM8op2Cdij3uasnVXd@MuQ%7YkgFE&rB+ruUO~^RS+=-Ut)JydbXg8F6ut&tgEX)twxXoXs z8#AhPP%Vxey<_FE=bh%LII(GLF{${Kb7o~)LT!luQ19JCW?y>^^0s@TKU8%2-`go$ z|0Uck@x<)T{+FTMCr3XYmAq@oToqy~@lfW@N4xSz4T%ksehG2} zampnvjlE1EJ@K@g`~4h=1UD5Z*wU4=^p?PnZ{VoXs5$DXlyyaj=Nr47wW2MS0UoXy zDonPgZBKQieXc$`8px*Lp8m3b*L0$5VytE2(nS#VXIy^U?V#?t{yQ!G_p^-=wKcg- zuD@$_DZ7u=fBs)i(-R427zgP;=Z?1yF;3E%f3lsUv|T%TOZm#Mr)~+}us%MyqpmCN zwc76UmtubO&7^(_j{eH}YNSDE)^Fy{_GCRb<0li{XX1~Yp6z>bsI5EI>SJq;bHdCW zpCfIL4mU1IB)>4Qe^b^ReAsmQoJ3B=aTnv41$Ty;gEc&rI7Zc6y?W$6#tS|_HrW%h z7|||FC{WsaYWVqC)}sf?wv^qv7SR#(#Ky31{FY7&XQN~FC0$RQ9GAb-05|}+R<`iv3V=)irvVfJXa?{FKp%jQ0A2tX=~&RM3p%s( z-5fCC0k{H)1>ggK03Z%PG=SXz+)bAwyxgve%cWdkAqX%Yt#lGB8ejt3+?xO#-ua{3> zRlHN9+8^W|CTDUb_b}-!*DvkwC(6CwoL07qm{4{N3Pr^(?N_+!!DDMqcFDe{tRlZ6 zyjgxO%3@Zgu-da)#%Jb(#}S(&RJkCZdo@j{_!n1Xj!&P~qodPg66GW~eW$J{ZB>!| zbrw~(6(8C(I=3@l_>JEkWuYNfGoD&iFY8M?sU2R~&A@7X`En%Sx#Kf2@i zfoFV*R_eXW+2%P&ZymlfARY4u@*18oHWIwIc~U|QpB865 z*--2#cr;@`PK~t#sj*lUAUeh9zL=!G~OzW6n}0sX8+Mp%rVTqN2hT(#7gIzH`;z=i0>k< z=AlW`X{GNIulbW|=gtNTZG6%pGY8G(TMg%*InWZ*|F~fkf0%b#s|M>3QfXxG(nELh z*hbbk1arr*EUUA(#7OK(4R!LWJ}(xRI<$~`N( z4xJZ{?APFCP1uHOOsg!OvZXu}TsVfzYd<+CNt$Fav;w&#ocMT;Nq zer?VF>Z)n8)G+H|Dcu$UtpWaf@A9nnxAq&_R=U+_n{f^)lgwR<=3_Gsn4OflIE~6s z>Ml&*`^wg=HLA`h{s1Y}-f;S!m*1$Z-og=2VkcG9(=+>eaWJ;){xcT7pD(+4ho1Vd z+&g=Y){*v3dYjL|PlQW1qaVoav)^Tb5Gv(v)@nFTvTV? zlR`+d%8_L&v}CutjT61VdE~rHzEY6AoXexy_O!Hv!Ozff-!9f_KCx%>F+A0HN><>F zO&CEV0CQK(aGRFUfz-kMw|tvQpQN><$oCI_uM)2Mri9Dqv*hP$I^Ac6uCzNFdsKMI z+hAu!_3+gBN%=jRHmP3pthE`64O2;!b@HTyb@uqpK{6JRRw<>uRpRkStvQQcZWOd< zhH4JJ`KcSS-S)~QL6$D*dTP0^QBVF7A_z(D9=u4mG-B=YR-N}K7TX$YUF6$!n9h8X zs+}4mR)nJ|pVT(E|LkEy`wqLYzzyv~@?UhdSr=XIaK&$Xa?e76Q{nT+8Vfm2mcF@9 zdOO*>qsQETPHipRw`q9WeN-XE-J(8b_*BXj{=#y$$u3rje22N~PZNf9zif4EOtSrZRdPftg*zLWkyWL;djndwI@k=Lg zSlSKZw*&`>=tx-o?^$cDNwL4yZs64=VoP@r~B(! z_o=_GWD>L^oPE_zV`_o0qtTp)*=Mdw#%Ut-Cs|O;Z<+{?r_&>EM!&2SlS+Pz2;PS==ke7TkGQYr@*`xU>!u|I1C+5r&sHt@ptzZ* z)yL&6^O8jeg(8fhPt9-9xjQ+gk=A2!kYW_>23VxP>1kxr!Xq+g8IOw5@zqtarB_YgS+9D>Z7hzQUNZBRo;Bo;`LiPpLKhCYW@j& zY=(%{Qr5=#1qA12>UhV_j0nu*dlnj-G9))rgP79NyUaTa&K$H=M4pKB)W&7@7eq+B zO>|heBDC+8k>RiJr&6yXUL|J5u_nIdPrbGnPEtc5Gf%NR=+N66g-*#Z%KC(-vJM4K z#}7_jQ{8*3BSM!W-9f?H!_GKtfa!qJ__ZLXE}!|})6b}R20M(&8-h-J+!XTq4pR%N zaqI`n54WT@Be%T@e2RFTxNEtnrpr=3`Q~|7Q@WIfKeZ_L^QydYkzqR5dn&(xh5aEi z>cQhohefL|Uy?TID-Q`zrePoZx6E_rzP%-t`09}#1X)BO3|^dTj^fYzRLq&n#W8mK zw!Z%&pF>_}&x`BBym=c8ZK8#~gg;$IPO-kzu&M?b!3= zXvKnyh95(?pA?mb%@sImk z&7SYNxp(PKn>3$ z95{*B9_5Cj?imP;${Oe_`|VF-nk7d@ybh)=U#%pow%m#jb&;87H~4Z|PvD2-$X+sW z<6NJb-cz<2Ox4uXFSFD_A@2u2KXF&YE%5Hk?)rQ{<+mf-fncW#y_0t>C`BT)Ya4pe zPCcbmg|ZQ>tz;>rTFtrrawdAi`6`jgf}@7|h)sj~_VQQc_#F~jFWgYPv)pyBsZ$Uc zc6luE+mzYWt_S_E6;|xgZ?1~&kZv5xn{?|gy^}P?EXlzu|0w?1A(~0hm8cpg<9_rgmN@+=zhT<2@?&`XL2r3_m@WTd zuX(cv&Zfq_n;sUu=eaJX_B7{7DK&RbY;EF`bbW6}wMh?6f0pyqrh8XKix+cP&ZeA6 zcz%RS>IK4bnFSmEE^RKe%FuZb_0)2sT&4Q=C%BCBvUql?e%`fMdvS^JE3D^JSe~kU z_6Ai|&WVOZj=OP5Bj(>Td*ss098~oG&)@TSdS=g_wcc-iYwd6C^*!Ia6qUQ0 zA~H@SYHXD&xm1@@{hKyFEXX7swzunTTDw{zAI=;eUDuL#aE$t)#h2dJjsCm)Lv%eplaDM# zEfO!d^G9fow+_jFH9a&8MVoqyZ!?dh&}>2f^9%0mb$qqOy}zaJkM^9Xwo2XLDA$?K z_blGt9HoLWjNbBGcG_G`D|xX0dg9ZLE_v5F^nfYV;RUr$P@PI; zWt3gOdrSgK;9rSex-NG*n`fSC5L4~GSZh3=_k`EMdB=_==k9c-lX_L~Ev-g9dAGZ5 zc&yOBMRsRzs>X#?Jr>&ca#oB9(#nuri8H!dW zORZBqQv*fi;~w5VleQ_XbepJ_P6+Pwb>cb;5PP`2OHjDMrD{(4 z7q#|>W5s%|yN%RO2E3##!5bgduvz}Y1)1Xd08NZ+vEll%DP4B?=*KjQ-t#8;rFw5g zvLm}Y38t7x+p}$Q*h|Gqe3AD}W~(2#hju&?=!G+tzBs*K=CMny+IrpjN`g^5a~w)m zY&aDj*?m}1fBBg;T|VKx#@&D0C>8;%pI(%2Rnpc)#XRo9MiTM6dor2>U)!5!>FM4i z{PdbPUTo#Z7m4p>n>5puQvw^a4tg$7>C3tr?6`6vCDZal?V_gz51*Ox`*?)o8Vfp0 z2nD`Ede)}sQnc%ho2wozyO3Y`P-Nk&DP10`YmGx+8QzRmUK3{haz)OClz81eKH}|? zo)(d==`*ovuRRYOeEAn__{tjL!!}-LdDLgl%J^d^Y$81C z&uAZbb%~TJ@SwGPap*ml!?HTf4k<-t0^a7@k8oGgYwqrFN;Ci4)BE6xjf8jUx(YUx zsm?Oku=Kn-snixRnW}WQv|p&BVwZz`@paiGA5o3DI zAxAE>RA6tvO@GNpKbll*SYuI}Un=gj2~JeC?^MsKg*}h?vslS|t^)L^rc4$j8=U8*HRs zs4Nn3c&pL;{Jl<&@u>zKOATy4@W#A_=I0XWHgiQXwbs6QQ$&_7P}Dse)O*dzqG66= z)tq|;l~W%#8cJ5I)vrpS>KDu)*UE}fQN5xD^W0?u>Dfu!`{83w-q%%w@uh1bgo!{z zU1-1U^XC#**P9)Jc@tLkV?6yp@rK;j^T?#aTRGkLwCoDy3wvDV*dFS;9wNSF7X2CC z+eWXYyu=~3HbXy9McHzN=k|U|5|w^Ocek5*`>$Dvr3c@*#gsW)8Oe1#xOzpBJfkN@ zz3<{?{Y@{l#q)sIjp^wTx-*@`G`w#b>^y&~11n6W(RoytSnPwzI6QS7;G>{37$;&S z?3mQ_c!WG+FMi)Ls64mP?GSS%w9$BGCa!sEeR zFdy>ua2cb$#s$D9>JaYg1xBmtOYY+Wa|o*mcc7@z0vMqT`I&&b2TV}KoXFjLB($xg zvzy&c#zzz~ldSn95LmPKiED*5J)GR)YtG)dkPb4xa4?@3;=d!zhuq9AxY0=LjIbhG ze`g6{aOMwKmKm+cby$!)+`hmX#jq*U)X4P#Pv;B)!|Hf2sTg4X2u8Ps$;2?^F*e+E z6FM9Gj1Cc_H3J+@|LhK=Pp&aW$KYp>po|s@?`WWm5rF7WrvAwU@_9Fp$wVVIybHl( zLSfepWuowKUSv2w>jap6UI?Gop9u=|@j&H+pXOf(6dBz>`1=h1IQE5tiRhbK44Ioz zs9{YaGr43-!iLD;luL|QqQ|9nkmHTJuE|dOhSSe+$NDvMtf5o%IpZC79IQ8lf&7If z3i-{5i%b__k>`C~p`Up8xQj)zgEbM?*gtET_83MR$Q{1mL_qx#9bASv$cD&ajN)TV zI=+W=cruq&c5f+@o(XV-KWj^1 z#48EQmDy|w@WJggM;{F1diK~ddU3LJa29|}4J$W?%eiANJ_--^2mK!z&|vS=?{q+{ zn)@InI0vU>1;q%b99J-oU>xVJa5OJ|3<+@YlTB!#oE-=x&JN2trVx^0)||1EJdA#r z@3U58K&4_XyHz&6i)Op{$$ z8A5u`*u%1B1+ z0h$3Fd;l*YEl3+$4XuInp!L8Fq=ICi16D(-kQ%fcQioOoejoraKnMr}DKHI416d#k z<^lzv3{(LYr~^Hq57q++7yv_n1DnAwKnt9Ogh31F1T>fpd^R^qW*9u91vUI1gUg)3 S70xeC=h4wYVHmw#c>V)2GC>yr literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto_sqlite3/ebin/ecto_sqlite3.app b/phoenix/_build/prod/lib/ecto_sqlite3/ebin/ecto_sqlite3.app new file mode 100644 index 0000000..eead494 --- /dev/null +++ b/phoenix/_build/prod/lib/ecto_sqlite3/ebin/ecto_sqlite3.app @@ -0,0 +1,12 @@ +{application,ecto_sqlite3, + [{modules,['Elixir.Ecto.Adapters.SQLite3', + 'Elixir.Ecto.Adapters.SQLite3.Codec', + 'Elixir.Ecto.Adapters.SQLite3.Connection', + 'Elixir.Ecto.Adapters.SQLite3.DataType', + 'Elixir.Ecto.Adapters.SQLite3.TypeExtension']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir,logger,decimal,ecto_sql, + ecto,exqlite]}, + {description,"An SQLite3 Ecto3 adapter."}, + {registered,[]}, + {vsn,"0.22.0"}]}. diff --git a/phoenix/_build/prod/lib/elixir_make/.mix/compile.elixir b/phoenix/_build/prod/lib/elixir_make/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..7cdf202c93f88e0acddb2fa905dd7342fbb8dae2 GIT binary patch literal 6091 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 R|34g8OznK*{{beSiTehL_)q`< literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/elixir_make/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/elixir_make/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/elixir_make/ebin/Elixir.ElixirMake.Precompiler.beam b/phoenix/_build/prod/lib/elixir_make/ebin/Elixir.ElixirMake.Precompiler.beam new file mode 100644 index 0000000000000000000000000000000000000000..218b80f434a45b685c5b6b8025290503094d57ad GIT binary patch literal 3984 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/elixir_make/ebin/Elixir.Mix.Tasks.Compile.ElixirMake.beam b/phoenix/_build/prod/lib/elixir_make/ebin/Elixir.Mix.Tasks.Compile.ElixirMake.beam new file mode 100644 index 0000000000000000000000000000000000000000..001f576a5fb39b3d9ba5474dcc57bd83fc1ed0e9 GIT binary patch literal 10420 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/elixir_make/ebin/Elixir.Mix.Tasks.ElixirMake.Checksum.beam b/phoenix/_build/prod/lib/elixir_make/ebin/Elixir.Mix.Tasks.ElixirMake.Checksum.beam new file mode 100644 index 0000000000000000000000000000000000000000..06ce2890ee42935b1dc87c284ede245043bf7fa1 GIT binary patch literal 10652 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/exqlite/ebin/Elixir.Enumerable.Exqlite.Stream.beam b/phoenix/_build/prod/lib/exqlite/ebin/Elixir.Enumerable.Exqlite.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..16f818f51c06c16db92500d59cd8ba7021519f08 GIT binary patch literal 5036 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 QxD0JTc)d>28zr#*3u}_n$^ZZW literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Basic.beam b/phoenix/_build/prod/lib/exqlite/ebin/Elixir.Exqlite.Basic.beam new file mode 100644 index 0000000000000000000000000000000000000000..b4fa3a71a3357fabb644c160d0287dad44dbed6d GIT binary patch literal 6188 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 bqo2RCz|(@T9Q<$r8z}(rHyzPnltB15=gFkT literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.ConnectionPool.beam b/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.ConnectionPool.beam new file mode 100644 index 0000000000000000000000000000000000000000..69715a92944d52bf29a7f1a6e32c401dbb3eba14 GIT binary patch literal 28544 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 JH`${){1+SY7`Ffb literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.EncodeError.beam b/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.EncodeError.beam new file mode 100644 index 0000000000000000000000000000000000000000..17b618fb818c96e53cf7cdff3cdabb417b71d38c GIT binary patch literal 3500 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 Xey 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 mND9S_A|)e&zj5hK+}gEC5^ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.LogEntry.beam b/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.LogEntry.beam new file mode 100644 index 0000000000000000000000000000000000000000..7d8f3a3c26a31e8d4f43433f6ac72f95cc1a5d42 GIT binary patch literal 5940 zcmb_AXIN87*EfWcgpEWJ1wmT&AzwrR$S^LS z8OwpgL}FnqLmUPRIdopcNCYgV$p}&_g*2LsPNP*$PRf}V%MBC4%vc6Y;lUCrgU;cM zFuu-{CT4R1fz7F8!VEqWmX0&nOpdGnHlGX1tHa|=`898-!ZM*T-Do5x}EU?xH#nSL33aXpZNAjk5B%z;)?2&jiSWI0vbbZ^v1u7WF-=nW?FSQV#=#u0HO+zbFS0jTNW)Ip;` z#LaS|TA>xmcr6r$kV65Inq(Aa`T{%wy$}G|5e?}%q6t=u^ziCxVYu1&nK&&x2{#9? zio&P@F5*JGI+5&1gwQ$E-xR21v=!QsNFe6piNrhwBATj3#?3$zDAW?P8rcfWA44Qi z$jAUkCaxqJdlK8mPJ74<2BI*c+EgG83+>ffFEY5QE_^B4IBxtfx>7|QF&N2k4GarSSCsi>YsF=S5KM#d5l8%jlA>$=@BQyl95)1v1KZ_ezfV4~i z7y!Qjzypv2paKB-PXTTzUK_Ls9^ugefST;&)U@Mg*ENC#k=iqgq~4&=dS_<@EB0LfV+ z07!lr1DFp0$vLF`J};5nMDSVwzUHL^xJQ7oq12~RpT&uING_sy1gL#<@gZU%tDjiJ z(a4XUQxz2jIl1vzfcodx7%0WTLJ_#5L__EWW)$FbCB6W;vxpES@)8XmpC%H}B|O^X zHAP4h2>A?HB$8lRLOvIug|I{ga3LK)gF%|Yl4$@zj}`N2Y%X$>i2`~RMf_MH1CEC1 z=KdmJ)11ks^XM!#%X}4|C6)jwb5SIpFJ|*1OyM|~CpH&E@?jo3-W*(v0CzaB@Z~~f z&S8iDjNwPnfRHf342}mGvn)J<4M9r66mQ@}oA~^`;Ano2EorAo*S5W-?2Z$jRVQ9- zHelzfb#v=m&632XwTBe`2p^2txSPFZhex97jD?-=AGiir7;j5Fvm%*(P<8LKkhOcB zt-WAvd-)@DaI;>|VJFtXrPGggiXu+%84on`inJ#dZfM+}m33mff799Fg3Ys)mc2FL z5E6rWlWdf<>eh`Ci%E-m;kSc$&AOuAi-eBWcO%QH?~IN?V-2JA&Ln)_qtRi`HHFus zF%;I0b7Jw<+ZIo*-nF>Yen3lQ#IMMUYgm)`^6ZhzsxLEx$f zpY@u?o$-Zs&i1+Tu^4To>SKy`4q86#>OJsqR;!CG*|W6<71s&bHGKT5emiwph?CQ< z!-|!|)6BPa?u+05xZeIUL;P2D>wf(Kg`lo1n-fAk@01>`HT}DS_7)SC)ylO`&yx4_ z=el;RE;#l3h20bHWZewKB~FxGSzlh)~WNRmczQMvp-OD zXa1I08nY(2KyvDeWl3L}Y2ZR;B>P};!CUTFJEJ9syLT%W*RMZ3D58dXYSqZKlpa=m zcZ~P=NcDO@?q?P=^eyuvRjhx)OC8Slxxej{->vh`PwVFYF>adNyL=EA5!j#TnGzMn z{+w&?*!${CdUQ;8lJli)xB-Vj(jp97()OI~hbiexuZyx`WSqXcc6CNvM%#`9Ll@TB z3~xW=eYLD0;N-6rto2%5u3C;mk12VF_EzKO`aGG@T3~Mklhj}&*ue=N3jy!mSBM2iZx>3GDOPk}Z={U(3g{8xpo zxtr*te4w|nWT(TmKH~w6{tW9)Yi{D0OK!5@-G}8wNdop52&JzpLn(9~{gFqM}Pkg=w=qAd+?DamUpMV-zjUi(;7*GcA9 z1amG%UanoNmbaqETHe&U!f|uf>7KRG8FATngIA^SgWd6uPx!mzi+DBrXO)DSFE{O5 z5q(%O=b%~%Yh~*W>qgC6_B`K8#q$sA`KJRZC3Cl{2e)neaC~J`Zr_8R-u#+4`L@4I z3I*4aTGu|xs9jZ;G8|dkaFMF=tHRQth+_Ed#Y-i)K{50?!0!a{X%B+hAz6!lg|AU9e?VSjndLl z6;)mqi%T+tSGu0Py6&Yyw%>>Qjhhl)zbr{xpV_zF-0#|kp6kpPIwFa3S>)p9Yxfuq zq}{rmUXIrp7u{7oiaH$>MSkHtmWgj$f6I28zWu^Hl5+cu(#2NK4y==lZ?5{!F@xoH z?*0XV{RHN5_;dDy!Va-^o9(LLbrr#T&+G7wqgQSi4Ub}XHO`^6b;zp@yfUk;UV01f zacQXiURzu90y-y9la{U!Y`p%J<(Rcyb~(@aB<4!bk=_ON^PA)9*=~uS+})qzq7LZ~ zdM3*6%4~P>&DfCfn&DQXs&;B*@kv5iN#@$Z)cfpsccb&hx4jzoA3hLz3qDzPm}|@R zKNs8`@buxQ?pw9R&xk!Pn+;NrEjt@f+O1)3;LCMn8(h2mee2w^C!uE^_2MSR)04-TIT?MvCH`KS=bt8Gj7U6A8 z?8bTfb`PzQjhk(bGx7&PuFQNNYnQ1s>wc*d+!44{-XxHL{pQbofRn?$Nin6 zBQlcB(L=#EmcF{LvpxNNO~5L=H92#+a&tn=!e<+FZ@hlEsc74aYxS4Le~(nYdi}a% z#F3-LA#pi>nm@nEG&;HQ%+t#2?U|P@m4=Lm{9U!>Owz7b1Dcs*@3ga*Ve3^tzqL|7 zW!f>qxv`FSbWIL(Z@3_Ko*87C>Rp!GoIB{M#4SF@KJ!-jiDq?g!G?5tzebvUP>%Mj zd;4zaD?XjJuOnL2U{DmAaHY#3&qr%@yYKThlj7mxl%Rs^P=w9jO^TVnq}?-gpPgRm zm3(JlLA;Ka(0r%HJHnFkk;epX=moWh{$#y5g$Hoj(^_9O|E;s&9rKv$U@2vKUC{YO zT}i<%>q5E?Tn)T)-~%ChcibIU?T)+w%KobNt-rO-uqyL8{#r2fs3>*XqUNgMEUhjl z6{zc&&hWB`X@1@jBk^|5`ru&$EJz||M!V?ftx!F z%&LMZ@Zp%<7gSW1e|*9VFJEYrVZ_c@VfKvNK6`m?6gq@eZgfX5_o|Pz&Ze@n7Nhq_ zA)g-2KXZFPUc<2A?XRy*lx%Z-b{U@-a#wqQI4;^9>t1$h#OO8ZeHE=!?bUTv&kKX} zbw|qDEc)kJ^sip*lT#Jsb4+x22Ql8w*wB3K(=>hB)g4)8Nm*y6=^tL}Y4U-ywCJhZ zAloC_Ykju%6Q#K9dzSe<^W4M~UAM|-M8*Hs7qqzfrf$w&BHl9K=ya&9)nc0Roz?$+ z|FZeW?Y~3%*Vs%9m93wc|1zdUqxj0ZQ019*<0IJVpP!}0*C`w{4^X>ZVxPer#Z>&& zTqoN2hLoz_P?1}H3zHQ@FLMoxcjJ{Uzu&m{`rW?QHU*@O!>ybw=9psAhtkfxriKSS zu1}{uT;jn$pEWnB~hAufpi}{z zKNKr6CbWnh0VoRKO%FW5A##y&QIjO_$|b{~C5j9VUj#D|0`^-Sh?2p+(7L{wcK5c*@91%mf~t%VtRA#jub&8S|fzQq{5&c50mp z|D^N(8~4w1jPd{vr64ce0etz0po6@Xpj0PFnz4$(F?O_fU@@8WP#%NDG+vy*q;t3t47TyYU}kVQos$+A z$Y6%C0t1VKc{~myB#uYtvO`%hY(_M_m_}!F=%K+pI<1Pnip}EixPdXWnYm$cOaV1+ zP)u+rhsC8rXHX1_78gwq;_^6gp*$*+5gkP5LHYT2`mnc3dkrgIEs#tL=Rl(OfNbop3Xr-VIV>dj^@yVX^DZM5%ka~IxP@r zjz%W)ElU6Jmv@n>>7O68c>qJ$Yi#0K0D z7()kJhjObTf|;~vx`0gXsAyb-6vq@uA4p%t;PM#Ea8O2|wFigJj!vYoqEIj>*g7JZ zL#H7m1~-t+VTIDUTu^}#Pe;KA^xjcR39-_!5rG_fSWrkXEhd=lLFaH-oFIX9xYTG? zI2AgBIP^#e6pDetsAO1dppJ`u7qOWv0rOT`$T&q>M}-b#v3XoX_22B~%8I7ZIlY3> zAOMX4A;m+3<9IBO*f@F|oehiwF~4K}K*;|>0wHne;a~|mComXP1?!{C;263`7@Zdy zL8bG!R3<$kh(?d5^XSD~UNDCj7|mctwF;GkU=IZSdjGk@Ou+{17&?=OO#T;!#y&ho zbQOciWrL`JYzA#iEHCgIGu+q#EYHp5u>v97;l5Qw!=27y(xcg;f!JJthe06>W-up_ z3NHQkz*;;yC!H{t`=kRFRrR>CN^1*~wGz`cQi+z3`&G!0V{ zrg2~(jU{XfW*!7sU>utUb66_~5thKzD~EVf`;3V0!t|002D0ilg)IY<}es6a>+f$U%|gg%o6 z4Gx{jg;0rM@#qkew75_@7PV3I#NKg)U=}0O{{MyXiep3WU~pNSf83l1p~DFM=Sh_? zU_v7p(KI%Y$EFcmWR+YYyD%1~STNn=gQMfVXPo_ zL@+nPEDh`e>4W>v#90!@#B!@3mQW^(Nza9O69Xa0qxXi;BZA`@tT>J!6X#;tDiwzHjQ7np4lbHez7Dl6U!!8u_ zV=tC=|Cs^*!zgp3|KWkD5em793n3W8il_e%NK_+4K_m<|r9|d2H$rI~kn>+2nf>bk zQ=>F24@RKi^k%d&F#!Qp$9n&cVeFa8e;8(T zJP=d+uP_<+Q2*}$`#Tu_!4ne`bAZVzCN?=1nj`@1uLj^1z-%0eFE&A5n}nlS<98|} z@@AR#nM>jzf_>J-0B`E9ggCwb_6_JFWLzKf) z?eSt{Ycf$z86~KEA*lA_dQpNZUS5oh8-yM~10fjzCP5k0!1@un`FI>6&u0T!H3|+P z%aAB2UR)>`8IK9cPXpmlf*Kjc>!9LzelAEt!XXO$Vi=3s4OmjFh_mr?eeoosrZP$)8lglj9HIr* zG&dk>nh)(EYU&gbHGOp`pyYIOnIQCtGF4nb7d5v)bsSN=w>_Q;rqTo5W&n8wu$R3z zMHjWuLGcQxE*aIq^ASaH%6)4EqK-gv?Pj7j4$(Fw>foD6Y*HB>2pizxLM0gD9p!^S zbRBzdk~iuNCRN4);D|EGf{!Q(yln{Ho-6dWJ)UG?kEe)(*XLqhCr%@%5_NHiF0j%U zu+nQL>fsPQ)Ddq(oQgyAQE>-U7bu!zv>kyiMZuAeD2sa#BXG#n@lUgZ#Q4Z$c;H7u zF%dyFf{`$4rUCgG0`k+FiPLe&bOCt-95Q1(fq%%W2+13ae<~oa`mf{-4M0DFG6@wE zu~in@#0YZMKmYR0if7Bknr|oG4dXw8Mw|& z=sIKbeMB>JK(jX|nNKI0;LS-WbyP7Ou(^p06-CM7nAdc`yWll7Nm3fbn~gwMQ-UcG zq6KEds9a{c@>CdSDvV`R7cW62t_KveO0rHRo;(rmaESRHq6G+HF)D-s(Zbx}KR8=h z5j8<_O)^D>Nzubbw|4b59 z7)us-gp>NwmTtR)2}334TC@#LO`_ z%o+DIh@k03uyi2IGMAwSVfj-aHR=V%ph%L6$C3o;FbOh*c%=e9n?&IwT9TA1>>1>E z3W;=>LRJPfv?VF$vGgnsI3zxzBS~o;Ga+7FkUOl$3??H+6*vJebb>CJfC<=RCJ@XA zk?wP0W@35N1_B1V&f_C`kXo!Eui07=U4*H{MH!_M?L3Gm4ncv6jsej{hcFlNEm#zi zBP4pr9s1%FVi2^lNn+62HtJ6sp^fdZaexkK3C7NYiI3k0bSD=P-F?Xv zFt>3iVY(N=)|sG5qu%)JATZ~2Nop^Nip>lP!A59J2Ll*PP`0)p zI>ShNq7$TbM;zja612yL%>X@@{>L~cl82CvgQF83!Vs9yAX9lL=vp|^_=o`(jv`ag z#z|oK-x4_QBf42&Gv0y(5o07RF^JbC?<2aBsRUJfGRP0%Ad=tszel@ZE1N(cGK8fo z5O9U78y_)owZI|s!AO|5-T4R=>tDb}Ou_3;Fz*&x5f^~v7T~EeC<#)mxB{&BAh9mY zC_Z8)NkT}NL@2=(ENw1HLFD!k7vU)cNN^-P6`H6E6`okY6M4u+HpIm^WD(k|fI}AB zTToz}CRw;3%mfTrm@P0pbg@N3mycLNAMn%NNA$o*qJ%|cv{_I@AhWQg9Qkj8{fT1Y0~|x{C*4z5-#EIKkKgG7rHL?lsAy z;R&k(3I^~1-mYK}Pd+jS3}Fn3a0x6-UIO2HgYUg@h?g|c6H$~SLkN4C6HEkmTE1kG zxhdS^5O1tj5N2SkKGMMpDiJpiohK6;UhM{PZ^p^t%yEg zcpp4Ph609%z{e|q-2rzV7+nc;pGowEm2epj@x>lPr!sWnkYx~)fMp9Ellcf*Eg?oq z!z&|G2)<%z6U3yn3Ck#H6T}J21^0;d1;R2kZ32Gu-k3oVq!c?C4igDWF$e`wg-BS= zN9;kil^!_6Zx3-fzKFQo7p#gBW`z>wd&vZ`Q7^&dG}lFSEKo95O<0E#{Q*IbxT2Z3 z0*Cmc@?bjK*<1^jVjD+RI)PF(Lw=r2{K1r*gBw-qa=!`J{Bi2*odB{plpA;4W6h(bjK6^b(mIR%FV03Sga6UawgK>twiP0$`ci;)=;&MGOPShT$Pyis`~MQLrM?b)iF-YOf1R zm`mC}s=0v-nk0%CL^0l8mqK>JlfA7SiNONdLz;;pI3yS|s-XJOh3aR%(6S*y%Ze<) z2Gzv9g@(<=3@a`)YzU;YPys1gGm(ZvLNV(J3RSVgX|M)a0ICJ3&qv&WEa*)ehmZ?e zc? zjE2o3p>mObg-!AJuqhrFHj(3mtpZ^!{tBAK;0dj9(Q^JjqQ&FyXo(WY6WvUV#vxJv z7A>A28x+FPqtOz>N0xxf5s*2UM0C`yRAB~%k_>NgxK$Vz(;+UrgmJ-vxZnul0xM1+ zE@GjQ;*hcBTgRSE61UbNazGFjA{!Pi77k%S;>Tl4owx<6pqovBa={zqz;+{}rGd}C zFT)FJA%OINaKdOw$|g+Lh0+hY zR`HQ#z%~||iABV<7@PA1&2)k#7po0sc@gG2z+Q%!#?Hk;8#Pxz9duDI3pCUb# zisxY^897}?kaQWaRB%A9xxqq`M9z=edB{8!`+ zLgdjLVZvewt7=^2C1Wc&Ar5%>!?>w?h^Y!#bq46LhZQf7P;dl8(V(JV<1OkJr%fo3 z@b-poJlR^8m?Ds4bu)1_4oMM38x4$v?4>PHL6k^x}MG#rvT)~CQn0)>5Pd?W~4?bh;wvqpkhr&|%X!sD%Yim*7x%42MQLKTPFK^~Nkf+;cs=xhai%uTs` zBpOI3gPXSPA?ASr^MnR8hl)IptiwlQ#x_|5ZK!oXqdb7^e1r+(Qh?MBQV_`rKS8ix z2O;r-N(tMQt(GUO!M1IDgtdr*z;<}2a8Md}D}S_>G{S1hUBU-zL5kfnREofFWUOeD zLJT2j(t!jUv@^0I7J+s}Sau`fEr@));5lC0hFE|@_=3u%0F@)7a-eA}3^2C##iPW% z$|#PwM~+yCLkdZ3VJW>{SFpp1#48B4tb4Fjhwbe+Sj971?#K(un}|hH>VkS_w7!Xm zl$s7`Ca6oR4ocX7WgV&*4%rJlF>e)tu-J8HSy z$RU_3Kzl22I}C5bVABHnn;|5`90niZBYyC3I~e}x*y|@g!UZjqV2{X0c$nJo%8if2 zVSTWZ#60TcGKj}Ji37MGB>1m@$ID|OeGC#ZklTUckmFXw8gNMs#3S~yKmj#}YDBn) z#$NNpgAf*=YBi{;N33clR^gB;EVIEo7ucI(7Ei#ol9)dQFW{=NWgmNqP&1K2e2GI& zz_J0X@+L`KC!t^vAXn z9_l9ODTSU3Le5YiG((LBo%^BlqA0hzAY{P?#sz_wh)4>Q0&@iJTrFTLoS@)EMIl>3 z4!s106;LS$DwlzoH4eD~1upa)0F7G4n^pcVvtAWq9fWb$tccgatk=P;6biPJBE$9q zv+NpyWpl?Yi-peL*2UuJI#~BP4!Hs4H?XZhamdZFRUJJH8YxqB%!R(ZCB&%&(QcF2 z!q-$PWXxmWDj;d5f22D<6$%LAr5(fRSekvfdnf{I*d{Svl+pFT{grgIHX&Ub86te$A;LALwW`GC*c064Y3!8JQK!5Ep$A$AwI() zeZsj{2Oa%3#6BGILYOm70;88U#20w@zyM#Iy~V`vw?c!NaL$2(eOaLhzI|b*I4GhI zmK69zNg>2>;d3(u`?^grCJ=lh=uC>RYYg9zlE{jq#KduV6gaa0=RYX_97^C)7)%O$ zFC?(SD7*+dkc{I{5`q)Ca|nbP6#GO9907@Dgfe(=0wEMTeStB9kFb>BaYX(LQ}DG4 z!wjZy*}?Fon>H%55S0_hWMYpoj@XxdObFqL1%V<$B%u~_gr_Yi!f%z71O_jHA|OAG zCczt%9Qz7M;U%y{s9Xw%9vcVe4k&auNRmi_(*mPHPM&wk8242ivq+rPzqei5%yBx%Q*$2gb>V4WQK~^V}1ln z{U?8ap*81V%vWM&0KRctFl7S7jnEMP=3q(~hZQsCEn^C%pvW(xSR@FKBY?RCXI92r zj>Y`TwjdxViA5wPH-;^Y1O}HPIP_phVL+VHgPB|b5`4QBXh)$zl#Y*7I2pnQgNDFI zT5tpi7YyD9xddT9=4tp|P6_3}M{_#Om;i^J=rL?K*o0}0eLts+9Wuy05F8gC!K2KzivwV`3I@Pr#^ebB!0<7?G*KJV7ryZd`Z4@4fKmKWnHkU*DZ+_?D^t|Q#W4wx>O zPcb@J8;d2(hM2y&0NB`V0C@mdKPJyk0IVO=cNYLQmJd)MYGe4Ly6=T{5x^*ZiKvay zDFeX9j?x*G^N0v%G;T-xtFV5jRapEBzM*6By#)Z1t5Vd4i`YScjR07GDL@VYMxz*D zt*E^lu4w=m|9k+5{7fQ?NDFb2Tzu{d)Az;G~JYXA%fn~&1~FdPcN z=={Lu*yub{hPFBYhOY>qCTe54$O4E1NQ?R~`V*Yvn4mAN589YLj*Fgk!WH|&O*l7X z1lOYg7|nZF9|ofS!=n4UaK)aBiTV#g6O*%5bj6GME8rfJ;il+1+J8WV*8*1wfC(b} za;yz-8DJv7DBt~}{)=#x#M&bKQc?c}xFP_f_{F0Bb8wX!*S`}W2^2L0N;nxBX0Y>q6KpWE+vnv++qxjpQjnTpEiuq-f?^bAI zbTGS;07mH)iuzB%6`QA{{a7qw_}2jB$Ms|JiqXFffcaj)cL9UvEi@za2gnc!8x*E96XgCcVH|S4;_>KKDa9A`yY;( z3JHuYXVK9DWa+UEIHZONFxr6~FB5c#V<$2NgT=9;QZPzt>>!v>%zuts3J|5n4x0r} zhy;a|(qrI1sp@E1d+YN1)s4sZ-MGJg3zooD1O~w+{MTVuY*>Kcp+o{6Dxm~v>hO;5o1^Wan_ody!axlru*8;cnl$AL40p@|9N*wI&bqC}&I!s$*9oQF+cW*3tG4Y zX*h5UwQ(?Zh%SNn*AZF3S}nlBCy0kZi4Y~GAI%6c`3uKnOb8QUS}T>MT40#vgj_H- zjZ*)Q{1^N$`4ffwMaKmNMoIfWiXi#F6k(EZ=8Vm9ENc)&juFQ~9P^8Xumd8PASi(a z2Q{&1!zD}<9>`1}i4K!Gjh++6#u*64VY8Ul-DCmB=DP!*JLw!83#O*o6P_q;-Py zxTDs=*s6yJ$WJiDhH4Ai>Xc{}RO#ac5o|=pn2QpPpgten6be}<{U7`syyk!DM3s|AB4&cs%7J2~KT80JxOMp56Ow)dVT2cEsTu+GFPvKf4YWKjkTGZ}>E4IdA zbgw@uX+W5Ml9L8WYF9YlswJ*Z8RMf`S{9;iX zTj$5G?c>+;@oVY$^?dvqz5~XOuG{0+>hbGyvWOQ}k0t_OdaVbD6}7QGY<0!@c>ocj zHWRMl01~3UP`F}x1p%xC!1}SJ2&?6={-pp~02mz=03`sdpJ)d^je+Zeu}OxH=Q1&l zI3`K#9)D!f7e2ZDsMVL(C!PNIM#3bN8at&bz#5ygW1Gy#NC!7&7*Kd2pouN$lJIVV z3+qRe7~aa5iggIL>|Bh5c!CO?j2FB?fyGSl>m1JLk3JHlu&Dsu9D0H*U||h-M#s+4 zCrpA4?6($yj2P?(JeY73x$s6H6c!?ei4XiBfNMfyz`LL@Mwp2gD~y)_qfB56&%%Cq zVgxTtm^>491dGmOtTKV0O#t@zAAp$rzpZ7Ea~wm$8De7QYUv(eHO{I%?^Z``qP4_z ze+~_>*}Avo?6sAa2@M~*_+5|mX0FK7ZcuRZY|@?{Lz}OA>B`>s*6sE6FT20K>uk4H zsJvQ5a$76mxIxb#$IuZMjXR0!3<}7A_ozctWuDn?3D#%J&$bKccbTAzs`tCBySMs5 zQAT9}XO->tAJa&h}f18>LP62HIp21v#jp1`e*ew# zPd8%1H~-wYYYjWm{7-M*>T`iw9zDnW*LFpGIhb^e<^SbC-Gh_iYEX4HPgtEO}2`^dowh*ipQT`uCJ~3 zp`lCv^+un8T~c;af0eub31Dt_evrNF+@e3BN8Z;Z7ap70mXm6%=DBk?^WcsQ+3<{V z^S~q*w>b~z$IZ2?jd+-nY?HBVL~0~}U~Mnns<--tGc9IrM~?Ud?elF+lxB!Zo4sNX zZhgD8QL0MsZQm@hj}dp>v`^LV%rNKoE|@c6+jCRf(C!X z@B8x3&a|ryyXDpyKBR6?qMg@4OZ7E>>+AG7ZZ7FxoacGs^{Fyk$j@@;n-1R{=w06| zqq+jt&tBUWcetyr{p*oI^KF3kPIY zop+W)|NZCdn=5sn>!aKsF5Sg+?56y2|9pqoc{EOEs#A*C(}vH5!L01#$iPqBvuhy+ z(+~dcW*y0VL0z;XGS0@gvaqggz)5ex3krImVXcBgQT9MF_@_!V;azDd%z5U)eI zCO_>qr}Rzvc)QYwzW+)=m@~y=UxBUy&5Uua|0+fKb;ZyeJ6~hziC@GfFWFxA*st?& z&*A&DfF}jGRNfe+){j1(wwz>C(weEDYIaIDd@%ZEP^x8HPfT*t zhabdebLPZMjkvb6ife_QtU%*%9@JBISUtR4QpI5nbF+tslqV}9gJxC_MY`n zd+!|P=E;m(X9Mf4*ACtI#Gko)lYaJTB#h+6O>NaJD7WA+8Q^e!Z!E$HW}B@w3xjaJx*m`ZY&6|s4dpn zQT5A*ctfruxBqyEVg22-5VNmS-WJI!@hudrW>k1Ao1CrNHaug>;~bSN+-L+{dxeU*Rz{UakQp5@ksXm9mR{hYVQPXGSIZ&9M@ z<)k^OZ=`|$j`N!KPd z{;odxvg>V}!mWUV`A1CkvK#q~sKrhOg~yJNOQo)KC*1qG`i|t_RoUC?rsX(ZdDVD* zxTknwif3l-w2&im3h|Cjebb6hZCBOIF;84N<@_Q_!_E5Gj~h(a2ktx_T`Y5d^yn0%$5%6cu-w-^i!m*W2b&cd*ox^ zi(A}78uNM^-1QyytPd#OzrrSaRqsr%Z|Cv0&R!mrn;~b(kAJB%?myyn*F;5Sm~?WU z$Jh+H>vg>EsE&HK>)lU{f=pl8b+z<2i!WR!Z_JxqvbmbPrlF^HrHW_7s&5j`Gv@02 zn0nm#uXX-gUos55wzotdk4Jg)^v9) zO3%2dsJhJW^osszr?U7ZmvXlp{!;jB&&-6DP9zE!7FEY=e_N+E)2uY_wHoU|(9O-} zXKezCce{C1ue)$+1HQ(!_G7@#qB(m49)Ha@nsavgS?M2N&UHWQn^EVxL3Ku*-$k#( z#i#3S(4~t{=P<5I-v~jkKaV}Wf5di1;jyW>UNPI14)1N1NlgWuC(QM~N*=`KzE(Xs zb5}LPBHTX0Z<*YCYg>=a`r1vNdexyjA2fMu)X#W(SAl$_s$jADsfb z)vNvLg8j@(OOsc&bX7Q)%*Lo8&@qVV;ky+^#rI)?;P@d}=D4&|ed2nR*hWf{M zUo<*}nhuZ;>|EOX%%dgc`@!jl+Zonz2GJ*MFIM$j|064VOgZhme&zEkLk;a_Pb%hA zWR*!j>9aojx?xf8k5Zx`RbOTQl@07S@%2#=GF4Kij&IEl_N)!~(#&$sdVt{brYvam z>8_pAwWhM&A!g>Ppx19WH!W{B`@a9t`UMu^+h#HPLTh?oJZ-s0 zn1{F?G?%!c)PKUP!nrAz*NryiuF+~g7VwOeu%yz@HL*Z{gA9*LnyIOCBfZrfHF>O# z$j&>`^>E%jZ{y(|%eO1snf{PkHJ4WN%DT+YS-n@~nr24KZsXxeeB)uWEw>(D@LinT z9n)3HI#)xSu)}7!EV}<9-@K+~ZiYo>lilo!7rQlZ@?Rg#dxmI*tU3QQ+2Yp9g2w4^ zBt5Eo-PIEoH=~_;EE&Djh_t1DO7!r#JZB#>F{w(u!g~@9eYlgf^A>XRbfP|ZZ&~sE z$dPR>KWr2jdO5Z8->F9|3MkiK!XKy{yt@81&+Tn!Up!Lsvd;YIj-JE3noH~Z6VbUF z-qmdR5x?KJ{_<0)Z9BaUhqtQVre~6@_9=1bO1qBU(_eY~L3K*!yRhYfwHtJ<&_9ym za-6+fjqytYJYJYl`nTV!yK?`6Ud*Gp#*U;56*73M2F7G;Z^^DAd??G=a$DWH_UK`)gGkLpK zxLKc!xt4)#!m?S%^XXSzI5OecO*>diGCio3s%|d{<}C!D9h$CUZxY!qQR&x=*Y4R-NU6zuif1}E4VT<>)%dvY}7Wd6Vj3+)RR z7q})9x2>vt9-A4ys%3t1&%qT+lRnP6+)nHpIW^fS{yc7J?cTL>jOLrICsBiUC>Y=9 z{nU8*ONC70?uiHVyOr%1FR57NH(}NxN!(nU^1fnw8)I+2BDL4esyi>u-e;B*>v+g>?!@&OyBPZ98w0Czp3eKd+-J~A zJN@8=t&J~EP}29cH!h$4+}-NVGCRXAL-obAWm8&6KX*Ki-E^I8^6EvYsmjpF(;(KQ!xNXx7_#{H!BvR^cv#ZqK*hZm0FK;`yP&*jBO}& zBwpuSwr=EH?s~PBwo}IEh_P?R4(I+H6Z2S>;Q>4Mz99cv$J^1Wnah?PKjrbxzbo=? zMpwnLYlnXaXoUC%I5mYREI2*mwOjd{hJvKacP3R!?sG~Gk`GK#dYx7p@bNb3jiSQ| zpL+(~*L;s(m3%a(J7L+e@2a^EcQD(QZ_~Ow!#Jz`VQ$LZQx@EB1;*T|@6OA$-_#Ia z={c;sZOOidLiMZr*0_Crq*icKqwLJhdsjFA__+$IT>sC? zL(4wzk*TbH^{{~gsl2oBq+0faJsy5{sc++G>{sob$KOtrGG7`fY2$8yi}>PdW}o|2 zI*O)1Pd{RMV|)@7W;E~k^(blCy(jzVU39i^MRi_^IK%5?+Z@O=~vMDVKpayFgwIK>z*?C*7f4g@--Garw7SitiB?WNtL`K~$3mS&Y{ zm(TO{m~u69wbR!}Zwpr7%2t{k8?u{o^4n^&nuXc>6ZTE}O4z-|@>1|Vir(5;;%W9a z=}8LNd+tr_4mEqVXN`}k@x>|khc`;8eBM#3;979Few!4PXrr%o@^gpTrL_!?C@Io6 zvFs4HW%u6471j*2%^7Zp?IfnOD6RfcCSxsy5C6<-n{zQ}SWibftu@`sNGxRWE0$!W zWkOWb8L7$q+jTc13JlE)4xO)SHqYx>`8)5m*?vaj&4@$cE@w672K0PlzRg$pxie<} zyZGC8a~09{l%_7vw+~g=Ow<7i>}D&XgVVwKAQKPzOG-~Ui&?a&b=8?&_f;rqVMsBkmsIafYK*FJX- z4%9GZa3#(fp1qeu@6inz^5G6z+;Lqa`_-pC``WC{yDeHmAe*#?-f23zarak)&Nr6^ zm?=w?EZHwMWzf&YhA2%sl-^OcbkaUIg)aR|Z8x-T>RV*n6dmoUdZfPO(4CfzJBIt( zZ=#XI1~qr)9desz_xO{u6}!x{2V=XPhFC*~Dn6f`c!IWYmlR3n zaB1U}EBZ^`Y>tViXr-?F`bckcb(~yidY|=io+4zWy^8V!XW8&<6GJjgAO-|X&o@Vb{rd->%BQ_uRi z`Pbc3dFPn&je))r>Cd6K)mYkM0UfH1;p&BT=`H7>j9K~WY~Uly`SFl+9q&K9wSDib zd&6f;gK9oGZ!t~4Z))hW^5^OJ)_j_15V(E2)vSqk&$0Fl?5MEg51cM>kALqht1D;V zT|FEvS7tHC|MO(AfzPw0qoviuO?NwL$rrWoH!f0A*<;|R5i)CO8*_4|+~K@6llK@j zT3wp*elL z*l=y>nu$6kJN8|0ExhiV__>zpX1w#7-Q_&>9~noQM;Od2O8Yms6{Y_=dnzhL<~f6D zX=;;Y*MG{zhRQqZ5xRAd(Wp`3CUc}He_tv3b_*r^_3xqHEQR0N(w2kOD>fQtr{pc< zx$U`dB5}_J$ilG`>o@JaV6@l#)XZG-Q{~)=n+lsGlEUICZ}ab7Vlr$lD2)90^?Vxj zt9bpy&*JsoMM1NYf-II5*W8n=i9b~KdZlOHFsjt6vY{%t=e}eOrToHLL)W4YsFLH0 zxw#T0iLx}iBk$1%+%(IcwT9U@6DiX6FYEf(=QhqiQ*)sf+14U)-0=6+yzcHFGxS*6~_B-M-ngSy8T!;?Kyda*=__tt7n+n%^7-Dw1l+Q-%F~v(En02YT&o>8 z+;~1)rt);^P*e7n>~k{ie=MU9;mKyd-Ji)D zjV~X_34ZX=yNk0S&gY>*D0{`-}zY!f#pH)9aJk4^|y5H~iBkE1TUU zwSc;c%5{Nk{Ls@$~wiN$d-vvU&n>s`Sukxz+nql5ZNF#x$0sLG z51Se>XN^w(oTp{(^M=X`V_i&quLZ51I)$8}F;sp`!_X(dZ}BkklHB~MRZVu^%-VWv z>^pS!KAxng_`7aCa`@7QrAOYM^j|zr^UXHboRL3j)fTKQ&5@9yu7F)BQ&&v&E+cF) zcJIVZ&r`s+RT@MG8EN!4DR z+60*m1rL_qYl=)?Hof*9Gbq8e=i%HTYfqon+I6o!YNRGRu$d6UrXO!UL(fM z@=Kq&4t~!8Q~5V9q^G?hIc+nYdQ6tB-|jw8{?T>VIWsA9&k~h7im}=B6`lQxo*utz z?n}?*ZEpJ6GexKI-SU{zwGW?dOuJ%Klfg(hqclH@s3D!dQR8KS!Mrct?(Rop;{56Y zOEZ=YEh|fVmbZd-*jDL|aYbq>EMvU6$=fn5A9-hIp5+!k4fprk$X_+%O0q_*Ay(=(4L zgJyew?f-E#cJKKaluvE$!#@xmx%%moYhEu{5n5J%=H#=T$V8WY2JTz#mN(h`vzYLoRZ`;?=d&v@I{yS#pw8dHX-f=QLpRV#V>?E$brQNN& z&XRGjwMY!b`3c9-dkTY?~=)|V~@9t|JS>*4fU(}uVrVw%ayuCIDIRB(vqv! zTBrAGHzzrr2ErN2P+_m87l;i3fh2`WL&uO)wi6 z7!2b#u-%lF?!KRVmeus-o#6=kRPe)#7pY4-6K_m%D?O6RX;!s;6QWh`ckpgsUX2VR zNjvje$R~%-3q7+UH7#@OeaJJDGu7t(Y2E8JG4W=GmAc=;mcTxo>Gbn&AHVn^r%;+< zvbm&Vdgf$Gm&1&MD_>8{*Sv?k3UKch@9KZh6qVgXGxOYB+By(p=(tYl{hR8Vudxbc zH5Au+N;O6IUV7DKLw)KS%Zvlxs_xL>P58Rr(Ja zuH>5W;?(@>+5^5dYc7|0D*w>)HfQ{i9r>=~-wilsANuh% zX;|{UmW%58=AUR-%@yyd>Xo5fr|5XYT1La>_=;a~cV=iumD-ATSm1mgYzy)oHl=MC zc|N13eEMCvS~(BPBg0EmhH9VebFJ&%bX$FWCDZ4sOkpvrBtOcyrfX~JcZOex(&nmz ziX|GCY-IHmA70 z_IqmD;HG$*!yDdfsU9uo&)=qI|LN;oiPWu)T3^9iU2x=rOz5^$yq{~&%cXN|=WU+A zSa{CS)*Qt9K2L4+(fmadIZ9i@HQM|pWURaz+(g>7@gM&q*{A_!~2^j*pha({6_aY_`P6%)r$A)3%;E*kF!lB zAa@vDvSpS$+ti#_i{GyyMdH8VJu81+yN>9pUD^?opPnlFxRmd(Hxs>A8tW+I*)p*( z{7-si>B#RK4t+Idqsl0l0TN-82+p{k{I?~#nr(SW6Tj9|{=sPE7@AQV4ce%2@ zZOsqz@zY;9UL3~+@yvO-Qfqr&rF;A69BOy=4zJt5pODkETSZUj`^O?R#@^q(sq_II zMeS4PmMvOTkE?#Z9cQj^Pi;EMi-~)Eg|q6@f?vB{?NdAH|JK>Z z+x_eBnRj;u#yGEk{p9>v&Fu1}RaYu%WtVTC;<9e4$K5Q>l*xv5m$s^QTwvQ?by^>N zlAdu`pSJ3|rG|NMaAQiff}E_E{j0s~@()+Z{=F}w$wT)~?Ve|t<^M7#{Nsb&e^Oi+ zbDnO!9oF*c`Q&vL(VLN%M<4A(`JW@s)T#9_zQ~sOgvakcFg-DZHW+ntXm(-6Y}F?R z*ww!uPuUQI^sL>89BAp8nR`7!FKc7|EJc;RLFcbUsk!IorO93UcK_n1pD9C)?X``! z6k~(doQq?XEt@vEVDNa$t!}mHo35Vyg@1oz|7S;Od*8b=x95{q=eyo}RNF?Licqi5 zDtqbcAmMiV_!7%r75nF*@zV?2Iw?y@9ff<(Gc(p7Xznd3c%5f`_p0fh%wQ?$-4vQ} zuViAD{_8@Y-VZCM`TYuRxo1$Z1${3^mN@ZaP|`u;MGbj3zVJ%s8$XkZ#sEdf{2K=M zlRDqTy?e!Ry?fc{pxi-gi+KC6;+nS&eD?}Ryy1*f5ziiqhlQ5zR%)mJUNcY4l_UGR z{)C&iRV z{Z>jVTTJ3>B&NF#Biojmu}mjyp0%HrzAJajgQLaWI}ZJdX?<*ZXeeaW$ZqoOhcv@w zEAJ>yR&^;{R(#ew|I2sPh0(}|*~>mytpA>k?=;-iX};{~vJbA7h7vjYNpJ6qfBOAP z?uvnaLTR~S#GAZsIraS05@pl~*3ZgD@fb}`A#-2rm$g@NPwklac6_+1>N265iqQj(MTzjeBS3=H}UkekPdgts0 z&1u=u?(j+d@u`pP;y2BFud%=PIDe2&Bfg$3eWB$9RbiK{#=6`RlP<-Qbu;k9rlycO zrwze6?(08pFxK)lzH#=W(?SR4zU>>zt`0|8Z=2*}aMI)ZM2`m%e$?#)-P(AiJlkR; zcgG6ukuzFJmi}RrkGpIAqHUq!FRi?$K4F*kup+wSK=xhrO_o~X7h1}tv|Q^J=uFho z5`TSO?`M{jR`%KAo$`O~M^W{3mUYZhR60QaP*_2XXh^TBy_@CxG?45w`H#|Gf3xW+ zYIgqfkDGgHNY5y~did^6i!#5RkEP3oPd5ipy0+g7$XK(r3?$>$_% zs4nJz_d3S;Yj>4Yt%^d%C>)~R~*_aZE`5*hEk-iYxlD|iyQ{l8or|Ds)|op z>h{i>Q+Z3jUiU$bXUR@V^t;;m>jv|lGET{FWWA>3;@f=pKeW}3Uv_%ct*U3e_EMP| z?fDD06wmgPu1JU_B}@q*H#a;F)GV;hGV15HkftZJe}Fnx?lL%uNFTh zXJ}k6p=T#k*XL`!m%Enn(;+j99`{UVTET$>deuvDnS1kY@6CM^n$tkOyR!Gi?Ua?L z@^v1pJJqtY`a#dOD}HaJ#8|qX1FGnn3grt=FQcLUcTnpl%~wV zSvc>Xe!fzfZRSs1E(FhPA!=$Kxg2LX#Jauvrv!rc=}3Cy&^z;f^svreshs_9TsGY* z_nP}nOxEE`TEh;l0a91Sv=>z!np*KKJ>S>fW}MTTq#)mLsley)FXZthx5`^1`4vkW zq6yOmLgp2Y#E9Jrh-V!*v~(Foe9P-)MkUmw%x5y@%lg!(JlLE&fspKIjo(sy${qjg z*x`u}KDbKeZ|KnSYsxh)sdA{HUHzc_33nIgswDe~Gt`>1t(dYWOFwUyA7R?2H(m*f zZ$IQbj=pwrvwV*Kwk);WH|9BP{9T)(Otk~PwL9A416n6e*+1>QvCLeVH_SDQC$9N+2Lx$C%Tt%OgoRGIsS)8?m+$TS~XK8u(2F}c)g!`}G`OR6IadnAcz z8#}Xq%0C~9Rd5Q;yv$2fRax6rA$71*YfHCpD9z&BovSUYPTO_p_1?*?Nlz$D->E_I zy>U8fV#kmAPm>3mP=)O;zQ}%ve5=_#vy&lvZeMC=@67$f>k~G=(KK@=`k^xjUr+A4 zKD_>SOU%-d-2RQc{7cH{X#)k6wq@hl?o%7{=QKF*e>LCPP(JC*zNW~^i!Uwf?%51? zv$NJ+D3kg9bA#dB#~ZhKJu105?;F>Qlhu7^rH0kTmr9$|bzlAXxo}Nartc%P@iT#Y zYjqOIY?nlfbF5Crl$+J0tW)druKKOnH>L6QH(8WC^^u(Z5ofKVY%e59K9z7e(uBZw z4t8nfZM@fU%IT7=xKZ16(`!jgrObtGbybr!&ecn{eN5i8LB*xz1HJmOJ!p9gXY_HSg-xls&AhBtvKzIY{d^L2 z?NpG9=`ZH5dp{!}PWsqYq;DBN)=gpIM8xL6_Fsks>+KFhq=ZK+hHRY`k8b<5HP+~@u59p~+TKCAut%xlu7?YjE8RVC zB06bhcIZCm;4Ve zzr6~yCk%0M2hs)n|1ZSy>FlRxwUidC&OCD`+%KPwA%K=TeyT^&~lQJ1EAMKNwcgMaWzGx*HocLmS_6^fJf5d%iori2M)E(JAH-quw zQEKzeH9S{#LNZ}^_#kKX1^<;_@M4zU{YPn&r7YKeIVXK~_U)=EoZSQQDzq0t*2T*f zJPbyxFY|VHe*6=zy|2$?aJqboW~_M3(~=cF9;C!YesU8k^UKxRa^IW`(NVp-^3EB# z&GmTZ?g#l==#ztw*2QWa7!EqWJ7?D|$=<@xG0UF}U7wb7wzRmXB6IejW6=f=t_ zQ~CVt_940b8&xT6`Pp?x*bEbaFq@Z2q)O(q>mp@~oX&*B@m` zX~<1EdBt_pl<#LVUyFCGOq%5JB6+pCHuucDNo(B#{=fFF1RSdG{bOvm1w{yLQo5*# z?8&~ACPXNrXzXhYgNj6!?4v<;LP|tsuM~ysNrV4FNgx}1x{Cxla-}8U| z^E{r%+5nqqxQ)VS(o#ZxIUE(<`x6iGtjQ&!xm5={OtL2jm=AO@T`=2uSNv>2hx9_!BBiko*<5IUz ztKHq0Z7dm*H5C1gD|Kp;`=4yLo7~>zo9-LFU#N7q=brL@x$}rT&!8-+o|~E5?7ns0 zWHS}=d6`j&0Jsx`MYs96d1mQf)mGjo#dXvUV^K!iZQ*gx@N0Wc*_)7Ck?h&5$DC@d z_=9u2B1Q+KKPI``-&CgV(64Ge>31S9{`28@CbOc+y=C9+h4uJwKR{B{ZTD2H_`xoa z@V3P3iC=CdrR3umlhG?XWMmLl977Xv@CGFTL8^=vR=A5%zpq4Z!@=(*p|$Et*Nny~ z<+*~nWfEIe(rU#pDOWoUJh17R9CB}~uQ!VMq&G%bU)Ocpb7iWJx#6|_U0Vr*dS96S z(WzANQzj)6uikhMY-`V4e$8Ke#f}eALi}fFHF~S76)INCqZ3BbBl6j9 zTkQ=LrqCC!$Xb=HNnu>wCGGu9Ms_Q6fnWen^bOB7EULQosli*zU(m3i7>@375bv*F zzxAC~thj-3Pf^(ck6lsTz4ndtD-3pj7NJfp-YKEJeOmo=da7e#whUl#XZq;~a_xye zn13Jg7{3qS{TJ7@?e?ndOIPRNKV(*xTYA6SRKb93alvCWsarG1K+?fQp<55Kf*vw3s9CIzdl zpg}jx0ek+2r)^u|W2BvGfAOXn-SMhpH@0@we@<^5PrAZ>`P0DT8MS!H>LZsA4sLUW zcR3WL7gqM6yaKO9`Hr9Iyu(Rp^pcOkYog(y!&6C1YctGF*57pYQ)Qr@~MhI^iJo9w&{brcrfW*2ueun#w9nxAKvVEK5%mG%o7?$s9 zz_>v-w;{c|_i_8ks*Gc;G@Kiab%k|`_I{d?>Fo-Xzuh=9CgowYuYTZVabw$8wcEw( zWd|M)pH-B9HT~rQ8Y3WopfQQhj*-j!DO>QhfT@HNMiGhm{%j??$6{}b`+*Vb5K3S) z>*ca+TCuL+QPf7&k|G(dFDH+$>N055GGB2pz~@-eMFlZsq1ETSnGq3(+Skp9ANSfh z5T|(s8P(YR^*)o<1`ne{VTZ0c`NoEBcr_eZ?Ag-l$B+cAnVDyo%wYBB^o3dD>St+^2MF}t9m>;pCDkKNDUtyc~|ViBXyH!5lu9vP@l zVdb>hyxrWgTs2L(H07*yhh$NWfy%1E9<@5;S^l!3zQH!<4Lb`r_+0-&8FbIAQ--T$ z#iz~@glQBq&slWuXC&G+mLa3k`({}B#&S1Mzz`iF)3U8O`<1;wiypc;a?tIg+}p38 zdu*Q%m)8E^A7woqQ5~0NR$MpT|k+gmCrr0eQ-2Tw%+ac}e6sJaY^KoBZ^);^|47kq?w!TO7O`_bGCH3|Rxc;8B6= zA&zG0SG!BbDAT6ytPc6{)&BUMwatj}(KNP~m&YxOxPr!#Lk&i>|`ta`ZVNbu3f;Y(C`XT?rGLxdC@E*tJSe0(6DbifaZ<s@ml2sSngE!Ch;v4my@MURi#6DX6{jQUX23G0) zMAM`G^Q}FGOy|NTL>pGfXq+?-(0bvT$fuW4Y4zcrqE_FxXi2*bn=om0gUIBfhXsk4 zCYl~6;S5=KizgubzPA5}jzmB9iS(`BfbPVRj=(}ogLkGi+8kOzk93 z?A;pnu7pIFBz`zU)`JS{2hNitQfiY4XGSU!$=^IE>#k=MQYhM;a)eTj%Ap(?3VMB) zSnQEQc5SjuGze9BOrHM@?~QGGmJDi&IgO`+!*1}kG{(n0+IY{ZCM&nNd;~qp=w$tn z$(ly|SbWG>Z*ASGkH|RL$+no+3jAlh1QQ%ZY=k-bX#2|JE<{rcF}HG-dr@565`uM7 zsXSS3as!3%F&+J(5+*k8Z|rC3!&g-&TzGComcG!>c&EAio+`D-chSuIg27LmHQ(R?g@}#hMttRZC|znshcAXcrQk6s>BL zUm<*PTrZWe!9TA+Qd+^Il;&yALbJaW(D|h4#ki?ZPg{4~o2Z_VpVb&b}+fSR}&7 z8ifO0&z0iu`+7J&wcp*pBK z`g>FB52OTs7iIIIR=79z-B9Q47@y*u9F;dLL0u2ho}3eCEorK_S#HJHRl)ZK%-!jC z{oKk-ou{J~Wt|A8{Q>EvgVk>yv^A}ZaSsYQspl&_@=bX(Ipy_}rbF#(eFAb)f^zxB z3s0Sx!oKv-&iQ<{V@!ET`cYSbnmoQ^Vn>%p??(_y2-J6vhrpO zK*=l_B&$D=C+CkcT6ElxT3pT7CgyGOYhO=`>Jj zk_FE5_Y4Gr5DD)}hB-(o%gh{_9@io6V8l7=gs`-1>;Sl3GXFQJU|4)0C3#YoTg|g`^|GlIw+0}CQV811j8Yu=8Z@pl>L)@Lu`oF*QJpT;d=e_)5VBs$>zV>SiC(#+cAxWG32j@qE z=b5MLA95P={Sy-yNxsQ1X$XD(QIG$iBnkG8r|Rb-0Z$&Wl?x0y@_N=ylfx~shI3&9 z!i+-7)ln{Xb^lGmgrOI#bI`LJmh<1*D{KF*4BE#0=a;*f~e$gG7X=$k! zSYp)kj%tqZ-%`>Nb0rhKp|gdm|Jhr+&dYeQq5n=xg4~G(C4a|832t=>K7S!l8vOl# z_xR9?R#9D7jlj-AVa{U*-}H~r6_0C~QkRSgr zX=@=W=RaJa;>RGSQQ})|LIe@lj2;a$K@mb>i(>e=u*w{53*!0nF+9>^;@1tU=Vq7_ zP;Je*0e((9_~r|jMhl3du(X_;kbd>t+&%zuX|qullCMb!Zz&1hX)%QHgZ%p1615O; zI_pmt7V9R^yv(!7!qFC09wtBBpTTkIUWXjVxS+X(tr5y(x#v$(K(>Txn-Owv% zT#ehg53Y8vH}prf7LWw?0#d*};2SUs@B#dQ0Kfxm1J(k}01Frjh5_<`0^kT_135q* zPzV$QCBP#93#0+pfGVICKmjg*FW?Vk0MCH|;04eEv;tkgYv2vg2fPP*fhOPppb8uU z)B!`_1YiUh1E&B%Ko}4Kqrhk|2D}31fBE~p0@ zg6lyJkPF-Z@`5{nX^;}61J{DlJ@jn{aDYRQiWVeWr;7(C-389^)F0SHcf^+u-cL|E`5}qwYi+_6dUo#Wi6Hswm qsHQGdO8tndJ)|EBZs-qJ+n0uM20F4pmV$EkX6W1eX9oIEQ2YxZfQbMA literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Ownership.Proxy.beam b/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Ownership.Proxy.beam new file mode 100644 index 0000000000000000000000000000000000000000..75fd74925f4feaba1dc1a1d2dcf5c47d30eb4601 GIT binary patch literal 24220 zcmeIa2UHVH8z@XjfK4D02vVdN3{s?p-eu`X69hz1N+1D3NgxF2igZL2P{D{I3igJm zh$t2mdjV{ypcJu!Vg*6r&L&`azt{Ks?sxus|8wrWIp@jl&OGzX6OATYQ5-6ZBB$h=>jG>1laM+1q914>W6GCUlP?-_K5p+&4zmmr(E-aEB7R_LW zgvBuEOim{6l9k8_iDbpl=xk`#-wEx^s~e7_GHEgN;OQow;nbJ}dK{C*rpLvkz%({1 z4kAu9_Xf%^BXsN{sqBOj4l5YQ1+EeCkV7bgNoA){s4+2Z@rm?AdN79(O9w*yy~%!B z&wu)IF3OJp~l70nKXznh3qh`5F`=KV#iWBz+BX@XbzhiMxSPcLESkajYk%=4{Xh~txlPDmfGI=O$dblUg z0VD=iF8kTY#b-$98W2p6&TE6-o;N7^Nm7dG3g~h8N^8(I-Eca z2bYMokT8HG;@F8yI_(z^LXu&LY&Pg?zm!ee2IK%le_*(9R^4=?&Yr47{72BN<74tPhr_4|9D;Ur7$5y&^&nvki@iA z65{|7Mgr(OVJsSALy#}%CBT5Opnr1cb-$zyNM8G26w}qy2B}D!qWz=S|C;F_#VIzw z7XD0sz^_b5TKiXX>*`O@>(NF6Xo|d^_HUPfn-r)H4 zPuNKS9713x0yxCMg5W7=Z*6G2A#20_lj503j0%bjQsS$P^U7+T!F%nSyAX0`D5K#cqUg zibQUv2#Laz3C%5mNH75fNphGwv6RYsjd~<4(&G6D>a{weU zm@*{-Of&?xl|qcxCPIjV(HJAVEZPb$hk|4g6krZehJxg5RRqwWK!t~-VuYWC1}3+{ z%cG!K{9?dXo@Y4~#BvlurXXh8Vh^w?IC%=sggmx@Sr6hNK-mzlz$Y{t1t|b2K)n=q zn8!rQ2(Jh@D4`%lq?9L#6be#;F$flh3lT&JnOsO>+FeRKrhY1*3mVp?F#M6{0Ws9buxe#&Mwq!IA-wLmSg2)I0 zPznX9Ol!aoIQ2Qy-vUluJsy_g$qI1i{t(0nFeC%&24;8-19JcrzGNDRWH3(B8%MAM zRd%4tj$&&-2(z^#*lB``F!1M1wlxqy+ZvF_7HGV^OvnekI?fochSS2Uq99e6j20&0 zgHVtfID?5~7-vEhrr;N$Aa$6C7A71=K^ni90mf+~p$$yu4J_eJ0(P<^+j{?vDM-K+ zz>)kgo5weWCJLJO!xWl-F@tGrTqm(l*1J+gbYA zQSjz6Fa>V}<8@Gw4qs^Vsq{hy7V*}^o0Gk#yQCeGYhVK+()pm7BBT;v9SV|T@VYH{ zT@<8Cpa}5u2fxQrY^4yDq^DKV1FqFaL3&gA@OqBEtrP`>vH{Y^tnh{?$Y46mAsL?g z4FQ2^wUu}&Mtw@{=?C#sb|3}1KGxt7l}O8 zfWkmr*=cc&fj}lG$oN-rO@K;3TvNWdW+=$?hq!V)am@gMzlb{(us_7j!dm<$u6i?e zUIB@~g=UEms*xOyn@JP`@dQ$)`7d!q!dU{DNn`^tf+uW;f$e~-@)#06g`Z^$2m)M4 z0bH|x$>IVai(7010SDtGw%~0*&xEJEi`K-$=$0zH6LOu2v+~Bxx5HVJaoT7zyc60S z00|#L0;!mUk%G}Gu(u&>U=I_0u%2iKv>*|Qd^<81QWT-onc*GzNx@MDCgH6;@s=pa z5=0*nNu8Q_Md*f{ z55{^TB7sgpGO$%4p!cGQKo}J+q$~oraiKYtLO#G2AviEJ*pZqCcv}=? zD@KB00}M=*f}N0@2!@jCY0rY#n2WHP?p_#40?^EE3*H%c)S1tMjK&ivo?wu+wIdOc zF_CBh6y!pxBBUNJq*f_};SKWSUk7=Fiai%ncR`~d2jCIp=m?yO9G$q3hBK&l=0fw3 z;{qVqnHVV*Lwg?@2S(=r+oEBdGl*d`z*|d%G7RHf z!I`!Q2_o3$2ml-!%pt-!cc7vUD3pNFJ}`|4o1yNWBZKq_;}!yRT@eZ-38U?i8mvCQ z+zXUbkn#*60z^bB8^SnmBFuP6hG~G79#TUvp&)ZM5`nN^fGi_`#4Qa_^Z_mP|58uj z)l2c}tw6m2pCcGI4MhaNEW@4%bI6DUWI)^qbSn<%R<=0=Vl7#Q#PLC98#xpiNC`~U zaFQ)JUlp8P3r?Givq0l4TX5Dy+%(t2{S-K+6?aj9O1#681iD< z4DU|dhWGFzQb@R^wnPFEU=RTY5k#sv5(5-4St65>8W0^Iya5AuO;C?p#)T|?BK(p= zkRb5@{E(nn$b~F{Sb<=u_55LM(teU1Fg9+c0qg{O!ym}PA$T7Y=JO2VHRQd#k`*4 z+k*E+LB51I5^tEXK~ME`A`o%0SV=XUfPu56;Pt$8WoHi?_`qZuOhf_`4g)r`1~!v1 z!!HFkTl&*xu!;c)1CZ%dXj}+(rI_IZ_*p3c$x2ILydMhko62W7n)rYpnJEBtHZ%p~ zAsTGxQ{V}Mgv5nxKv2sfS)8A*NWk#6^*AcYkNh)3NlnR(;bo{L{PY6of;>q88IMPo z1dDueG0|s)_ga!I^L&he{z1S^yYXvgH@=l>pQD|45BF zQ;a#1NO=HI7xC&+U>Rp{1R>yvboD?kDwtr?euM~NKZPhG0JH-Ja)C(DECCcmg$4Ps9?FGW z0T~;>F02Y4I+ZcObeu^x$A^+BVj*BUjtoOYdyp(_$pVJ9WRePO2xz(S=gCrrc+k&% zz<3>tf`BtXjr;T{P6wsoD2V>+C?3wUBA7};9$=CTqrr$C0nj2*Py|5xF_(@6l#t|809q6ZVj#u5DL0t0M1iS3xK`mpo;+$``X9}owa1{KXrzWWGl=0rUehxJ zOa5fsXL>TO{-TsO8UHay7{(g&<_OcXb7xiTJe+)7rl8@}bX}eJ9w%SIo2~QbJmV55 zC>FK{aR^3>MgKCBU}^$Wwt#u7CkkS5A#Y%C2Jl;)8J-1t0}IW&R}&yL4WH^q_5>jioFPPlNQQny-XsE< zJn$wT6p*|nxKK!?kQ5Q=d}IuW25{$;0@7Y8IF*EfnrU1p2^^Ktb8a8Uq0WcV{{LGQcz!nNaYT9-utX69H-xD9$&-7XsA_(IEc_AoG$! znQB}zz5quAkOCkIKq|ff1r>mM9fVCGNCL=lH5Up4MACo+MSvL@1+4)?DJV$?CB?wG zynF+=0^GG=5C%0FK#g?-n8L3il0i)gPrwyGl2R*t2^uW<`UnUJdj4E@C4uEO5_LJ1 z5kn1)p_9PsF^NqFi+2eeQW7P|2<$tcS>FSffDl91$ENcVe`~_LC*i7Or3IcJb82+LrvS>*og{F{jI1*TBj)NuglPKQRF?=kT?n z@l=>*k6`df|5)DUiHleUn2rP1@cuxHFXg{!8k;~;PoQ&1%NbN27xRBvkR^ddVW5Tv z4rj;PK_HPB38VzD!W~26Tc3*fY-+oM?_0jUzuN%kgP7+hB7=i0%k$#mS51LY7sSSa zxI!HR>v$>v@Bn525ClL3AO!#eKo)=;02BZv0J8y1O2Y@833kv#Y~kWd}9G1@=u>5I0!xyz_iS)sq+MIjQgb=@yoOf;>fu}GU7Xd4FJRd zEJw-!5grK6Ism+%VDjK7I7tV9v?&IFv=f*rPeV=t z6ipqc%MtkyynFx%JzlvRg9CV>5M1O30a%-jSRETFn1uVeNKZw9Ytdg;h`PUGbeC)!k?> zcBV`;ED!=^!r6#dke@LRhw@9u{ns3iWM3o=gS-ItPLR}(*jOt&KItDe7n5*5_gScj zT~+@L{*)d7Q;KIv#BykAXhISO*$6}QQT$OZ!Ukgw*hNVKD#wD2RIvFNCE&&iL;T+b zKoYL*yK>SoG968ysz>&cnbF0fbiwfKUJk zeh`3Q0KxzexsYolevmv62mrxB@`FDBq^%nOB({-qBo`rooFn~~*Z06t)CO!SgQFYI z5=fw+mnSfhxI-}s0!Q8T2h9g=4FvVj0x;VY7e;}4Y$!dFx|{)aI(b-0(_553cATQ3 z>=rPQobrrE6A4cduo0C2hJ!~qs^0_x~-R8TMj6i^ev)-eO|7zYtfn7;!XEfAsWn*ey~(il`GHJlNy z>&*)1B!O1C36U%o2LzuseL2{1(~XN{(V2{7U9gi5uz%ef)s10<{-xx{P^Zh=7}lXD zN7;u)fLx$rGk5bk^ zhn7gv8={+{ckOQvy!ZN0)#lPjC)xT7*UyJ0n>mYcdwoB!J(p1Pb#N9faibwlo#jK> zcIKTT{>zsv_B@}Rab)Z9=eMtIbNy^6?Qcn?e0+NQ#^lP0Z(lz~EUxKse{l2ogyX&X z2U}l1U+t&A^nUrhgPXgN3j4{&%i^6J9m7wT^)>}YAAGmDS^BHPq0$l6`#18AFwDLm zGD#v=2d#K=jK%GCKl=F7rAHpkPxYJo+qWGGZhqd`;Gdv8tBbrd-1j=0QKE*_%TVoSQC(drc3~Sz6r6T|d6)HFU}n-#;I2~AKXm5Zk*;jFTXvp=AJ?G)gImQr^`tP zGm7VwK4^?S?!NootdzsfkoiRLhi4g|cz4V++uiH|RLkB2{1*)%M2XsMY* zQH|G$J$2CfQKz-Vb!r<+-0!@zxjonXd9{$lr$w09v7XSIFS%WtG&9o;rPt|RrE9!e z<~-}_Ma>ckqn(*wuV6l1gi6zDY%UrY1t*1SKd-3jon<9n?RQ~*tF}yY9>W#2yWeIs z^{HWi{kv6GU#@5kq%M<+f4H?XEWY{8F|(dMP~#>6A=_C*@JK-JUDQd>9?Ol z_Aj${VV9H_+%VWs zGCS7j!-~_1MfUdhReL?-A8&P${iuDgD!4grqUH6qj`cFz0s;e`K04EQL~=5go-)w) zfoQX4=7j2K{Doutn@PjuBQswm^(K9jD1~kqomi$~jydAqt30^*@bLS2SZvx_?X6~d zN9Xt6pKJXZbINi1RTI})3j6!Ml$??oGO7%Ea#C@#*O3?IiXk?IL$f}f8@tq=DW#0v zl|qOpa=3hMSJ_E}#RdV|eW!Ehgv5!yPd|5GILySlGDQy~5j0OMtmNpJT~?jd0tI=< zFFKO2(o$~o;pzpUvVkXFkH6PxN})^?#yj*rT^%KPYpI@3JLz;FE&t`a@P^9vJ&U%S z&1LIw4m8;ZJhiQzi*;wK4`<#LJae;CR(=*-YTR1)D!h|;uqvbS9k)Js-L5f*zQX%W zwRY?B_WMOq!<}#CX59aPkFv74_3ri#HR!Zk&AE^iT<+8O0PWtOQLzZ0&Y(@Zac;Ml zTc(^t$BWhufyIwXrvWsH}z@V8!FAKYRe z9vV^Z_?D5UyyMU!<;6#W^J*jR1r_Jlo-j^r4xpMqLSYA;mRok8k$Yri?mau~qRzt$ zu&w!Qj_MrywMPTR25oQ8SGo{G8F0W3#gg+etUIrJ@MN3CGR_Sa?`Q8Q2*AGGT za(=FqZN8yeHQndlt46CMJ#sJgdL~L7k{vZIG5XBa?~guQyv*ZF$%DOOA95S-Jo=Ek z$Hn-o?MtDkb*s$YzBU?TcE69YwEZ4I+o`i}L4mB#V~VheZomz>eFl9Sw`{j4(drL7 zUQT~>C`#|v_Ly7eHzv;`a1K)MGndAM-y4;=rTYpi&=)z!_n`x1A$wU)V{3W@yfxj) zRjuSTS`wV>BE~q{oQtQ_2xi)=5Rz;+bWrz11|+JsY51T1mXSWxK$~TgE|ep^FNc6W zy;=LT!Nkmv-5WM5IK@^aKclxx> zV$I6_R>CwI=ae`i*Rd4#AsY`Bbx-JksRgTaDmqT}^P zb&qotUp^bj5_Vm2RwvMp_?4ue#>;}A8&6tOVI8* zk)@*>94*^jWzuVYFHX!|Y@^+U)$a_#<=DX&TeAF??H_OtXwX%vpV{!*U9YA_?zzxK zE8+C(&EAjK)A#$mE$uya?Yq*d@?w3fRNZmzOLp8uka3s(d#}97H?BK7JQBancq;F6 z`JGs8f0By%iu@CYR5+)P_!?MDK+RthcRw~>)-$>})L29kADxz;^!C(_+Z*RUp=@Vj z#p@4ira2x~IFJ$E>{fpE!=o>2)rQ3dy4On%OoWgICg2^*IzJ3-bql%j(j^Zo7C*a5 zH+8Gxha2gB3E^ifN##u8O>~^vAVt;LL zSL9{S5|zT%HU|gt=vwYXa?Rt!rYAXa`wwY6PtNnuqdSYn?}x3Ap1*&9`FYOl%MD+i z-Z1T_ELB#3R_mL-FFfFQTD+aKtyfnteOc@?%-&D(nMI}>*Lv;s5b0>lhBqY--4!uY z#%WrRUZvA?4N9BS54^d1Bj~o~SZh&wsDy1&bd~eY_;GUVP`EVhwT|KIeN`fZxAcXC zWc^xdFTO3ic$IPGYw5*pJ?!*VNpeqUgHl5)9&3IzGW9)7J?<8?fnc@1V9}`>Le-YS zl&^_rc8M*j+Hum^{(vRD{=}@qa*8LO;>~^CEM6RV@f`0}b9mLwB{2hodtN=f`hBpZ zQ|ri+R{aaE-$>)vuf}y0mKzQ%VxRGhwD?BTEQq^a|3S`qv{9#beN)cD_jg3rFJ_nP zJtxF|xv^`>E9*z;I6s}hQp(jx+1n05jdj#VkLER*1j12~N-_D;gl+Gu$2o+LVY;RV z$FgM}kQd3kak|)kemm_UmlPhk{JSe!Lc4!~P*ol}<&Kx%{LtmGNAInf(-Q6-P&G=O zZ(3m}w)gVGMr(CNG28Av!=mEyNsQcL%Z+i@DRWw0ZS$`!9k)4G=p#dp_)HYQ-+G;~ zpdg9EAl=M<;jv(8wcOA$2c;ofpY$`jTsP{v%J>SknB9-`oZ*LIBSnl`X`9{2vlZoX zDitq3&;BGSQ@f7wN~$m1;MK8|xzltr-V=GTss=vL3NiXZ(?uC*M%hC|O zy}#9a&F&6wk+hg?4vK`6+Z>1HQQ^)~jB(0iLkr&;dhF)g*P4wlTDu%4Jl@mjAt?B& z^b0dM!*_S(qxPaVL&}w+Tq{vag_Z88!oYQnHJS3MrAS+_SsJ8P0XxV*44(5>@pbi>NAAjfv82mQE z`>%ENVmfMBDBM#akDJh-TnB1az&oI^Q(gWKa15MPIxwSg9RC_Mkp8NiM|Ne2y zNMFyeW zEG?Z41>`Ju$lz}j4zI({on>l%F;d{eH3hsvEUj4hxqY0kp=bCp!hXGkD15!dCE@g? zax}s7P6J2IAApjiH-syHd?9O4ux28D@x@n>s*_NuTIGQXXOEq3X9LmNp8eBf1_eY>vTk=1XS z`&{QcTu(MsSg#vux~1yDPTg%b`!1BVRw`Q_>{SbmH)@TEERDVYzU?w3b%uudJlCbh z)$XXGwHb%Tv#h%V4TVoFR-p($r9?clbFA{sJetK2mvVw0*Z*A~8sL#3PG)FFK zK(v&su65yK$)%^LE^K4#rv>NI)-gvGTCofKaak@I@Q@#gZ&-O?sY?71o_ z87WGaMx9h!h=mf16z|KBbB3;~UYc`FUtn<~`)@ z4PKks$S}8R;)WR9op>lWUv*@k_qx7oot?*)%tGT-1({#B-I*Cx@CCcQY`la|a=vZ#|B> zvnFSH?Qt6|(b;M;n`Kd3;W1Wh3>A)?>)$%OsN_B-Q!Hf2CUunJ+h8p>k^Z4N+4oaO zyZSX-Rbgj8Y5yyE+=h~x8_tGWwVAeL@jS8ESe22Hm8)?gyKWg)iOSop(l3RZ-e_FE zvNd{M;YPQSSJzM8@Xu=4qHM@s@x-U@v`=7->t_AM*|5BXp4&+K8^1oa8<)Il-7Z~j zjAs<0TcnQ`qHSvw510^Fla*v17D}Bd!aXy6=On*+bBQFb{3@nH@ovS{c*omZn&9^K zGjjr0U8T<@=7k_LQ1ur&0Wqt=q@dy|c=; z2b+kzd9Xi*v!%gd$vMZTbGN)TwK{=2p_CjbjIQt}*IFE46%)QV8%NvE`?%;r%b>)L zLj^;nYOeLPmd9l)KKtD7fA=P`=z*jw!PwXc4l`-HR8`Swq?^}yX!5L!4W-Bf)v@57 z5>q(0*yT%qiH_K!@a(5;BVAWkI%S_Q=$|}KPCgr7ys)&bQ+U3I+)BE`h}@E<)C(1} zUl4W9uPf=pXz%#C|4o(Uaha-&gJ*IdzN;5_Ue3K z_wtKke9dq)E^QIR`0=OBp|6|Wtpj^?P2vswb)4FU`{Q?s=;_`%5~WKTJ|#FVx#DOH z=G{}ZRpJ-xFXTLxslMkNm6l~X<{7jrLxT2x{w7Ihi-Mv|!fBT*t4WKZELxFfZPCa; z{MELDLsiiY&2sf3iOcH64+_;pt(LRTZ;b!6d7XlJ^1IEg^K+Z#w_d5TJ$9&9S6Pe} zk~K0QpBKpDp07C9_D*0Ks*@sbRO+$hy-H^qO3YtYzc{t^jqcg8GHd1y@#1RF)OM0$ zi|s!BKO)@=2crh&5@f-}!8wXl;JKPF^XFJI=3cRt~=&}dIhMRB>3as=Vo(Q8N7 z39e34^60Gnk~`F8a6@X1(^ku1*)8_e+cLIYZjz1RD>VyW5KnJ3ls@D5fMB`l;*Q8~ zdLgeUi#EGvp>5jSd(=`8`9PL=C={)B@){0-Zy4KE@$@Lk-gTxSTMJ^ z;->a>qc{GByXb9%(TT=>jk902R0U_#M7<2f`!1X~*H&py!uN3d?eq_ajum9-ptW~pXw;@T^tmc`AEzzf`>wN3A;@R! zs+ZKryie=DWuW_`!m6(e7x*<^Td2gKo{Ks5QtjbNJ&VmFexmrkNP5lM?{>9gi-|_D z?J}ZftAzu?tuJv%Z`O_oZGB9L7kTEV9BE=?Iy{1X`$nDqV75}z8P!~;8>L6tvsOZ# z{mi-p8iTrtqUTrcUOFB$Z-eW#p+LJA{mG99Kd-^BknLBG+oJS&-t5vdRZ_w9;46o- zjn&TC2CcV#ccbOvcA47B3b)OpSJaojObnDvJzw5`p=_0{?v;YYh3fZxA#=U1HrMJS zx%IOz*xw%8Y*h2qK;&*v-kEbUbJZBZRrOu$l0$ndu3l?BZ8}*0PV%rtH~ab#6Xy-@ z%6vUK!y1&2G}|=EOQxODD{1boeqG_@TqjRDYKa*VRjFc))E9U($mEDGUK2uO5ycjVb0~b@n5fRQTgsMXMyWZH|5#K+stbEVH~Nuv&1NsQck%C4(AQ$HZPK)f{yk zYqw2@)@eSVoxZo*;Lz2>AKUk@?Ng4CDlQmSeOZ6FL(E=7x23muu392qHAUId>zfo& z=gsm@-swf=k~wu@JNA0tt2DP>h3UNW`S`p*>Z~0Wv&ib}v-{NL%W^k1IHdZin2vg{ zI3QnNy)9F7@sXOPr+Y2;`a;fr_e-Ahoh0X%t@nqPv}-iVIc;AkwoJ8NbYP^uL(O~W z{(Dc!ldl?Xy@IT3GCA+vO&-cQ=xbDl&i{B7d*qrlY4u6Vov&XX@v)U3ceZd9XP%rV zCfe6mf$RIKeyZXGDz199Wb@o(?arrq+V|)?q!%X%I@~#B`yqdsi~8m>GT!?FCLR)- zwA^=eu9w>X(M>5k5T!&s@NdKRIKgTfmP|k3+y|B_*Wnr#xZ5;cn587K z*C$3lRb0l|*V|mFcqi-ip&){zCZ6LXR=SYpqjzyW8C$|cn+MeEF2TLNLay-x5| zq^(9q^k?JUdJEK6tH)Reo=uNx_B*TQxj14y!7fliuZW#&-dp|oS`wCSyNy!1tedHq z>fB(mIu>QGp{e@9vy&>@&1SXW%B5;{B_E5(cRqn~>Te;RmrS2RZKUg<^2#F^-J zC&o(?|BY^!y46z`yk<$53=A6>-a*Tls=YpyxGVpHc<@0PXoq;AGI@}u&`Ya(b9nQL zi31wp$DPvV!#@5=$prh^#r;F$ceMJ-%q{ zWM;hpOZuaH$VI}KfW;{TyO##tZAO>^b1jn`A*oM$E)tAU-S&&^mcS3yXRp%SQP+P! zxmMC=8)`!t=3Yc;FU`Z#MzstxQ$?O)Bjo>5Z4YUlcNR{Nj@@U1+Nx#qSygR_WFy3k zW$dIpc{ZS3th)l&wk~QRxnOg8?cQ+NH+E`2F+)$8S`3+}=hmZ}w_PrAxjUKYJ+5_4;k}lOBCV>A*EL z)wSl**n6bzhugO#*{ywX_eFP@`Y`r&d5OoQVD*+K{^?l%n~}O}2#KCb!E0-(*{8K$ zZ(w@g{$7;X%IrDm%hV4%m7(T3^hJ>>`97iAVtlU6?H99NwFbR#s1H8T!bOp=eBP0k z)8D#JZKJ!H=-n`B^%41OP(WzN$E*4*HeRJqOBe6rqy1`37z&u_WKlAh zSlFM#kr82UDY@Xg_0b%t(dcu!Z;#u5rUT(Gp%H^Hun z$Z=he;W}Dl|GwlxJ!M0dkIaTALYJ?;K651Y^Wl$g4r*mDf>&J$)Y@K@TIn5&N{}dt zskrEH+Nz`|d1>FAkn08(@e(Bx-+KxlB|m*$oU|k;OJ+sSTn`nQRoWIAb2U!yKGvYk z8Pi&LK(vRy8 zl~;Bgd^B5st#NjK9!x)ve)42R6Q`~;X+K@6*SF*%lyP z7&2LqlyPOp7o(evj)-9~Ijp)zSmd@q#O}l7sxUtz6&D7QC70 zUUNqA{vF}`ulQqi&)yWD$GPTRo+oE@ow4Op7wCJOog!b0?!7hb9_}FOIgz)`w{yR$ zxpKheqtft$%__knsfD++d{!w6Tu{&r9xruTYF2g#ePk=ATYq8Ic<=_(6(68v#2$vQ;a40wQcvEapUg< ztIPytKf=!7jrS80-9xWfofwpBu0Q;GM&Url`@F-aHWnxPeKVJMx+gBIT=jchGRtvp zX?&XFDl_+wSyp3v)Z=E?o39>v^5GU{^LEi=4=d*Pe!6aS;fpu>&3(tS(dF`MWh^D7 z9>eQoR}Ea+d&+b2dsXmY5_ZLGO^W<-0gahr2k$)4ITE}hK#BFGuPp)5z6+16;ZBZ3oXp6sD>y=GSuj7TM78*=Xmib?ONMt0q(zJ(|&n{KuFDw+bCCsJ6*dXwGMvyPH0rucqek0nbd%7(Ly`X}YiKU#Q7E<*kQ4srAp>g&WI{ zOMmC@7h35n-gpc4qE~kJjZheaC5IOIOJXzjd{2$2DFVSvqDHF>6*7J&mpZbfGdjJ_tJ`&Xrvp_)h3S zIwh^CdQn;LXzDT7JH0cl#h>S^%lUpCYxB8!;NcC=9S^Ebe>Ls+^5W&Ldt_zdO}Ca+ z2PTti%AU%0Ea_XjCg~=8h-MNpc2e9rXr14iXMze%ETf5KCm9aTb>Gx$S6e4n$@soo zQ%xCupZe9rjud$|RBg@3FjRbDCk<&V2kbA9p!DLw|g4iD!X_IY_qd*^-rivdYH|8R@EP9UO_wY`t6J! zt)K@@FOp3*Mz+2)domDXdjoaSBH7wWqxr>X-RGHI30jX-9#MB+4mR$<5)bZ6f-1|p zbzQj;V=Ep8PORYerM3lA)>`(C@7gr)!eYg206+n-`KL z`<{sGm{)j3|I<6OFJ<1x`Yu0EztVvAAD(n+?g>+|om*U8XBLuHkT_{XQrt;?u?E+% zF~?D8@ACa?qA6f3`qxreemoY~yvw#TBotWiV5j7y7iL_}v-sobu!9y=N9-hHi3i`325GCKdjRk+9|Nxkv(woGwN zT;E%R47sLboe!QGes8#VuIyXi@ad*Uc}uFO(bg_(oZZC8v)YpzJF~5 zAO8MAz_;&)-D~e>tgP!fJ#hxl4YxPu=~rE6U?kSm}(fPnSof-U&QPZ@jgy^SMJp=9!G~=Ap_-IH3Ab^}M0zp_gLbq_R`xK-3xF2az~lm z=nUD7L%!d#o>&`R&dOO}Gt*?}$=zs`mEXn+cX`#43(|L9Y4y<1*Y6PCP$(v29^iW4 zN7m?~=hu#1%cG?N_NB<`5NaMf& zOb=DlxbZl6u*+lQ>&MgUs+Y}w)nAy9aYk`mEaObq3+{4Z;<}5meI6xSlw9*-M>|~F zu3>`{TUbiN&EHB?dPV#E7T(xje4yL*kj29!rNYN&O^d!QtueP58(WeZ>UmJ;B;7WS zS-U%sb%1cJ*1M`T|KvB3&*!&377%bqwgb-yN_S?1r`sgxywAn(KV?B@2QSw{9w9^} ziA;U_1$mkdJT3|_e|un*kAzNOM1UG0@Bk?I?hDc`Qjm9;qCrbxQezom;NeK{b%&_G zE##5@{n^uhrj7nPGXH7WUu57n6XGPs#nAcUqmzWgVps`u8gePfug6e1tXM?NL?(FN zkY6UqijJC6D=G>+B?zj2e_oc4_9p}VMTtN2`NKD5{-Ot85-E%;(ftpN^tZqVoe#GFWA(> zmVBmvWb+S>5#l{XImJdel)(XlL?_~d0LsXIw?>SX|gFkbgiXnb~2bxCxB~bs` zUNG{v4)+h?!L;#ran6LH$nU(7EnpT{0_ty_3wHD z8hj^J2|y^BMmse$oGH`r;4n zQNPpw2YdY=nQ#7ojj4Yy_J8ut!ryWgKYjjPEd3!2#eckJ!T=@)tV{F8o{1sTl$=SS#&=oI+h-W>W5 z^EN-6|89VScrUnu_jrHnNIy*ZUuE?_bDN&y{NBCz-2QK}6aUug|JmseivWDX{Oq!S z$+!P7pa0Qirz80Hk^Mhu$!GqDMDyz%GHUHobXZ&Gp1ND3S{MC^EQB3}A?Ef*Y{~# z4_h6beJpy8weBTzjHtL`Q7(<=04YRkBN=_P6$MN z*uYrdN}uWU2Lu9bT3uZofMbj)lTP*sViFkvo;3deGKHA!MGT-5Jqb*rS1B_OjRnG;!dPf2vqMmZz2=_=j7T-k)A$8Pd{1^6E6E(V#-zo zD#4pbPY$5dLPGH*8XYeFs|UyKl z$NLijKRp?9w4WgWwP?Y%Yj?Q7U+@}HGBsemg$w@E6yO7v=7(btDI{AWoemI0trOfw zq*I9$WhW+?!myI6>fUi!+4)jXTa12{ZvX4&WY%gQ0*)Yb*qsyb;MK3(aODIRrndLQ8p7RdLds zIFt|$CWAx4aMCC?mJ5s2Y=UX^z_3Ux(f|fQ8KXE*1~4QH$0^NLg{xv!q4nE)U=6?! zCxpVuz}UDou!D`YfI)}Zwj6@oC?s^w8mS6}BiZi2PzdM=SgYcoa6xteFcwBa;V5gQ zEfg-qjs(V=ff-?IoI4c0nVk%bMX^x0h&46<3KwN(17mSuEXIq(;!vFIQZ8&{79Sdh z<(2^WA(H=2@1_WnlU>iHiq+)9z;v8pNIr}R4$CKD%O?(ni-W#w=fj}5B|vZ39dKke zzylbp!YCWKV7DS?;a16U1a1XwPJqHkyQiZ}LtyMdqa4fhx z+|m#zTnY>^au^EV`X>ZDDg9UA;WBHe41mh&^2xv;4otcuxY6eR0bpAN2tOcvfNTPU z0}$|C5LoXE0xdWX0|dlTfI!##LO}Zy7ycVA0`xi8b;N-7r%lif*az1_0|H*4eNYFq zxdjl(^**SB0pzFst?T`tJfX%RYy9H?oCgqTKtLN{3krBitqW)av?~q>xIVa^=z1UI zx)~6VFX+QhKR`c!`Ul41r{ACtKjQ(e3)%zM<*+0(fp|he47|WKi=rvO9qz*s4F8#& z2ryv8{Z~>UK!Ne5f6OdvI{zlStm*Ur^?P4SE(A`%$iF5S0tW#9BDt*LoBpx^rV9eh z7ofU1+8?+hx7V34}nFd1<}{Ef<=Fov2AHIim$JsIh6!hdc9^Fj5ZewIFSH4eh`?Z zvMLDB*61-nQ=GwKR2q=p3Bgn#m#>{pbUbh}coG?mU<8Ry^9Nu$F_<6F0z1GQF@OL7 zn*e|i#H8WL{@?)ylHAAu_<0ijAOsaB2C$}z7a2HeNMw?V1C7KC2A)!3_|RxfGSzzr zkwv63RRVlyL@GH%1vn1@ZI8d5CMp!N$3G$eyJ5=25MZ;6JiN&e$i|*%TOhDkLoSWE zxX}iTgxZeWd+GIjPg)m;(|cL}$f(=7-8LD6 zn9Ag=y*|@V zqly0U!>}^`z=0~PRvaT~iVMA5T-#BqeycXgpNTs#e2RaI$&10+x|Kw`cq?ns=^qX0 zAL5#%$~Z(4k{sodHZ*0@&ZcxMKWs95FSd}m^wG6_Yh140`^C)LdLoY-b%#i&QCfY? zT7MjC34M$DMlYvNgTBc%{Oz{`H;sbLMAbcfTVBXI zi`?eqZQ(Mp>O99%JX^CpJg4r`*UI9WfpZymPNt?F@0R~obgJTMb6Q}B0aa<$O^q$V zt5`E`RJbpDOY_Zaaf@zw&G<7_czv=(H|sPVt!;Uy)9HNnsiId~-pw?RHNDrGRpZGS zm#7}kJM(NpY1r%uvt8GHIEODRyUplgA_88!D<>~jFlf8;{&!IUchg-Y(<^R2y;D;8 z=;9%ISD1L1@|la$9z96j96vI`-rIohP;6AdAB20Sx@m zg`tubpXaBvgE)GSA43h)-L*c9PIEQc?x`P4dTus}d?l&U+^=j}QFL`Q&4li!RvRLv z;MM1t>s+?kS7M&!3Z1kVJ}Fk}X%=4kprth4U-8yOF;?eX^?=g$Dr4E=8-3h#dwA)= ztX!UcI}yRj)4^qLt_oTZ_xoT#4*S16Zr?faB2!n*f8U+_i|^H$13dulSZ z@X077v9-YE!?1_Jm`&f6zG=PDhYQ9}3?Hh{3aHJmPHY{B@(2_#$Ui;OO^|Qhqh%I5 zQ!&DoBX03zQ?#FX20y=*4)+-AcAd|MgDU=)Pefhb9egxbZ|CKww;i)0KT@slIU06* zmwRWOeOZxfP*=A>HpchnxG%Ps$nlHtfsSRBA0J z*+iAT=FG^j=w5Lh!#~SAda2}7-Bp#T+fQImA3P@U-a`Ljh2P}SL+W?X=s#SM_x_Ew ztzpj=v(Zsk;YE@|prvrz2P-vk#T_H^#~U8mYue9T4}JA4(f@42Y}DM6Ou113I+ov7 z_@(VunvJfN{<%r4T`|G;kOf6^c8^rf56pA9V&Ye6%C@W&O!*h>&<|2HTfWO_HCOZ$ z74P)1t$32FKOH&C6WTJqdCutVQ9WqY&PG;`S4MMWLHYMuYHMb4g?c#jcv}7pPh8C= z)6bKUU$?71GhsG$qF)uY=e_&**z=^R$zIK}>*3V5-svqjal<`@F2@Us#F}gJH}DO+ z>_s0Nq4@1lhvQq%IAZ{4&JZL2eyv;|Gs~POy0ky0)lEZzR8!cnheUVQ+`!94J)~oW7(rV8h)cDM% zOqt$Oc+{|y$7}Iz(c@xLI%oCFN^iB+$fcH8=@Ad3SoYJu}3B( z`tJS(q_<&<@3+IVrj}W)q42Qb*SV615H|0zt-77u1xnYa%uS)*NL?c}95w#Dv#XA1 z^&h%jV|En9%T96g3g5H@j)@j@&)q~X8GPYhFjH;k2o@hu^jej7-SF~5{jP{-S)oS7 zCsTsFWU9x4FDQ9+qC8LFX=$kx6jGodYn*9Nhnuf zM2DJm?T#6^Z@xb}{zlgJ;s~?XwVUUX7)P%a3{9kcCKg>~=(wp&gjO_{pZdf<6Yb0e zoXkcvPX+|SH3^Idf|LxyFpMBWLT{4ArB6V78UgER`m zA<|dC0cBH{7fu7LJk~DzK~S)@K{R{f8P~;$!&_E zgqYNuPS;5l98c6%D^M8{%_aS=LJhZbN1CopD#2X7NgBwxi?TG_>PyQZSZQ+(*FM8_K_7GhJ72Q zDM*Fa#qwE z*eWlMane0?;pW?S5$s#L-w$#PoZU2ccW~zD>8|sU82K0($(PdiqlznHbA`}PSRU@i zjh)imjnCuDHWnK{C%6Z)F+98p1%4;s4-}rAvJn=&xu}}%qc^Gl;A=P!#zDLXQ7vfS z$Jc!4v&pURKb99SEY1w_+zN5cx#Z5HCC{5Ns9^Y}DRLK#c{Gyn?3Hz8YmVu04s$Un zuN=(=C#~Z?-bs1+yw9_TpWl>M5HHQeHAdS;Kav-i-6_8$+-of=8_%D|zx~>3#%z?! zjRlC;k3!dy>NZ~?`w33I2(Lgt9`t`p@=6bx}NCkOP|%d7-;uNO84W{5+l2%`V?nbmqOe05+B~)8bf2z82TcgBX+e^Oy4iTodQ5QG&J)gym~@PI;ljbtkG6 z9P@3sxYxX7WMHjmZ{N@gA{?$*UUb0S6y636uC*g9DO|KB!`;?}8R?*&(s- zp-C*?Hnqyj7f$n7aLaEsc88%b64>~iBR&A{d|fk?PjEf|-5nv!2he-LtKyB= zd|qOljfVcIecU=9zD)C<=ZS~OCXjcw&WV_Ds~i_#59f`3XC|{}5Epq0M~~fjRZ357 zuAkBfqoszn-%=Ehvbng3n zR+3Je2>&h7WTzDM9%8TDDG7Ox8@M37@XCP?d70-s;$$!D&*0A}M!Xdhm44Axxo3iz zuYP;F19H;6wa+Nx3^rNfx=Ly#23FeA71Gg?8lT=eKG?8){t?TKTb}oGY>vQ@vrE=x zgYWj6SH8K><>MpOZLmXBE#R8dSsm8%t#@m(!Xx27tb&STYKpsZa}KW*re$z($dAOK z2uX#eo{H9%G@a4je<54t_3i%vGwEoLJQUDmGA? zUf3|MG)X7B9!E5DZ+;RR0HU7l!rH98?3XL!8U17F+p2qV zRpVxRJAYIz&IU$&r%go^3u}Klw!3VVzn{=^2017A9m!|oEtw=yqH@sJes2&jG<|SK z(tiH$YMLYE^~2pA19lo*qr)1s$k7|Z{;bIh7AlR;qMGrO5v8XL;d}1sbWAg4Fg#BL zr}H+>m~xBn z`clm}QGDr-&nnK`?7bPIgoHaKrF%P`)jwrj4xy1k~| z%^pk}A+c1Q<|tZ|C85!)VYYyMs?Eu)6x7?*R^z$vx#EwUaD_P69!)`xCUhRPI`fK` zl|*Xi2GMuT6~*#)L21@Cn9Q%Sb8a8T$C5v36F+9Tu)mWhO!!Ra4k-y$d?FRZb%?7H@Sl_*Fv3JuZO!EJ* z8AuUuwq~B5dZ_=|MUOYld>D795_J9KL0nF4KYcl4rMKxA^l8W)X9&bN#Ly4;Cg+R>zNQ6;YvpD9 zTIGaD$Fp|+S#IE3uNbeFRshYv6<7XLficM50KNezKm)a6u&m(20XDF83tpjAfaR{ASf(mhb-i%l=Ds@b^pp7hXGGOW^+s;5Q2vAAeq8 zZ5FJ(LIn|a2z!JB!VzJPutK;ZG7xbHB7%hQMvxH{#4*U0-&fBdj-dgdZC*gYIxPqP HDjf1ZWaOZ; literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.OwnershipError.beam b/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.OwnershipError.beam new file mode 100644 index 0000000000000000000000000000000000000000..a7399a5f38dcc51c47be08908518209b27b8ff09 GIT binary patch literal 3676 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Pool.beam b/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Pool.beam new file mode 100644 index 0000000000000000000000000000000000000000..e0edbecae5bb2783eb85227859bd254c49cf0153 GIT binary patch literal 2308 zcmZ8j30MT1!(UgX(^?iTUtN*=v^{V<+RYxq1 z@rNMRP?%_b^n9)OZx95%9UdP3l{HqR#M5vMKRirG5(FmI;v~UeMv}@+2!a!G5<&7& ztyY64=(HH6mXazpuEg?Xm|BBLQ7tAjVQFeoqooj)EGSd1BPA;Fiy6Qfz#8V{K@6@N z2X+l+ZsW1I0lF|<43;3)U|X=gy2GN9AlNUois=Z4hH^o@EOY?`n)px#sMVoNN5C#| zh2Txr96LuillJw31Lp@bZ}CEHIkmQ<&%!2)?Um3495AE>*o}cZX**jk1ozX!IUJZ} ziNcl(q|yI(%Hmq=90BV%*NzLboGg7O&>u6`&WRbT)vTZw6RA?u?L+_ufE|GSUu0O6 zX0ZtbycGZ!00tQSK?V)v@BuV$3qbp#WkwXPrTr%Z(1qrm4JuG`+=HWX+q}<&yOrBb zXO5d(4>*xQ32LT-p?9Xgx%5+_Au0@{mXtzaptG0Z)CUy;K0Qj?v!n`4noR1nC^HF) zBBh_N$qD$RV;KYB_(67@4{{aA9+nwtugp}6pl62(4wT&0(KdwUxgOfEFlg||&8JC8 zkT8;v18v)<2uG%38VV#^GQ^z4_X7?_zE3`ic4DO;N011mM)d?(h2`qH zq+F{9qXd+KB(*q^=!>OdgjS$dkQjld3Bch4)(M~Oqd74JtUa^eil}sz(-Q|}~DU8m~4zaRT36a%d9kvf8vr8go zT=V?*o{V?T)=w)^rI#MFdYf>H8ZM{uYNpJq(w(*0Y80C`E{@CH@m&ktmzRHFSmQ5;7GYg=Zq*0o4zGH*_Aozg z4`gHB9_O+`$qFpK8tyf<>(R*e!-3zsE%&S?#-NqApSsS8Sc4^~B5kjmYbLEVpRMDt zBfQdcZn99uQ+BLo{-PXXJWIGQJ0h-N%7UH7gJH_d%>~ZSLyk7P8MoC0NTiI_1>Vv8 z)l<`Vhus_)`$FvX1vl!b`IODL7D<<=Zs+lWtD~$ZoT%zQe%hZo_1xHrW7AU1L&meM zHAg)b5D&hQPm#5auNstP8=s^aj{SFBSHnM1o9eszhVtSzUV|Tb#lxdm=IgTR1zvCw zDZn>Q+~*%uxqSGfE~TMu3o%XKb$iV19C7>QtnU3Q_Z;h;wQF3fiLJKR)h{%IYrWu5bv_54Odvx}c(PFnxnhm{6W;XbYTs&mPiiHrZ2 zF?;Et|NU19LknXk8`pg!>A`=@sm#ZUeOn$x26-pCdGub@O>14>o^@k+_0N%WVqSk? zD6j4GiSoM~m(xu>Mmnz#3;H%(*mxk=rO&55q;*cwsE4;I0==;JPd1ot8=Ke1i-W%v6eT_GH_C(1&2?{ldhXQQ^en0f zp15-V_H@$p$n>x&_O-;6)9~D<1>rpy3LDk9-_u+^Xg%{pnL*r9{}s=vx7|3l zn# z(sYJ@(5mAo@Qpp7Z*do8F!>>^{QpL1x4c z=0V}4lmeFxn?7p{ue1Z(GJhfrer%C&bLs@C!<=6Q=M)_Qy((_Nj(b*N#=Y653M6xO zVUPE7S<{`6*X}(WhrL_L#|}T&&K>`QVrD>H&!)wlQ!mVqDNQ+DnynDVym)i7V9To3 zwt1tX>zgbKG*kKrg{s0L8 BcN_o! literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.PrepareStream.beam b/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.PrepareStream.beam new file mode 100644 index 0000000000000000000000000000000000000000..246e759f3ff9098a3dce962f09bd787efdbc5942 GIT binary patch literal 3036 zcmai030M=?7M@7}0~(kltm^Ycz_pSDg$k%`WD!voMM1?S>p&8cnJ_aUK}tc?J_^rQ zLokbC-OqV5* zsIf#`A}N(o6rq+ID3sJIaGhSQMN5^aoKn!etyLfv#paO!R5L}6Z*m#2} z0zkKFfPnxk7%7GrTu%h%PhhTcV{ykW4_+Q?kfTIgwxM8oSy+ufEE0!9Odc#2b3s2t z9FBlNDh}s^K`&;2K1vozwmTF29<%8HMddA0azMy%w2Y*ngTL#h?PY9n!8jB zdK(IK3}ZhfnkX}9DI*h8YmK&vYE-K<+9<%a_ypfJ#efoNpAfJEH%X==KOtd*>nTzL zTo_^ThM{5@9p3%gGU%fTBLV1d>k2@B2M+)j06O+=0Kb2S$sl!rb>9hL za3W?ZiP5o#F$5An>3YR=KY_ey*b%lJUXN-tP)G!p2)M15h%kYCzf_bUL2gQhn1KQj zO#o2?Ytr%ojUE^-A@wpNCb4EFLZT;d1xk`e`$PiQ0WyIaoq!ZQ0X$2BGdco-%s}B1 zwT@0+8lcyX#0`W3O@`(O<49mrs8q`^S)w{oI15jtj36xvNfnM$YAneIO+_(Es8``A zrZx#dE(FqYVBu{d6>8P;4=DoFqzRQLsX^E{OJ{(ec#Ns!RQxHtMdXaH{k|o^ZeZJT zuYOqNxkow7D(3ZUzo@|hq1e-!i{yjOfQ(&Pz3cCIvtK7%h~_tJ+4nmA@biavTL1TN z_u;p64RK}1?hSJkKlKC7y_5PN76YJr<=buEVHz60Bs0GuGte)ed>b};V zzRNkZDB0hvI_`UO*@k5^r%x*Ss-|{awud82#h1IvmmG^-d3hwtvu7~37Dm@SC}dYl=FXZD zUodJ3xg#&!*SoUNHKTr557%+*@gplA2RzRB?7t_Ckoo4s6S)gVQ`o4Sn7Q&Li~-+_ zAeU^jx#f_nXN+1$EF5@r+&su}C-2cKpOW9&{ifChu#R2cEK&|JFWb>n>pu0mtm$3{ zCr}|v>?)6F9U*ck*H0C)9bKMOr;p#&%PkxrZ16tMG40PD(mq$ve`xGR@Bf?$KGEef zQY46S&%f3@`qAv}g@ZpIGpFKY70wrUA?edz9$xWm&Oh6HYR?g6PbC?>^SXNCy$*%f zPe`2;64%&%6iu&IGWIxEh| z*i-k&Ta|D&tCAcsxG{P9(Q~n17Sv{4{9Cu?od0lX{DhXpTRigy1#U}CTl65?$AkE? z``X={E%5&73n$navldjGzumleS;fYLn#${6Wb8MBHo?04UALzpKkQ*I(j;VwRgdwL6_4U^Df<*H~OVP+KD_0s-j|rwGT=T zsh+jXZ_AwWQs#d)WKFeMea(E(!QH-l5dCC|d_oJH&s@|$Pu&BOgx3Y^L^vWBgwKD)jr{rJVOp9D`Qy@(B}@vAv4 zk2L4sovz>{mb zIXTd6UwgYO@AIb#f#28O;NCC1ntNqlURvwvr_=D5Rp}4RjhljIg{*a5F=@M>n`dap z&6zA|hP2equWeJ96KB|pf^Q?%#tZ)OH8cKp*42&-!|PWsD6Oe$?uf>yZr021VnP&K zwnUa@yy-R1 z=NkXIhG~rNit(q+{a(^PA*9iOTJTY{VC&KTAX=6X^|AXY(=eG%tuWe9D50~4@gt%J riUbc)5J&pS`L@}E30*^Bu00oW{-eqPn6uOL^gagwy6(bGy%6+&)b|^R literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Query.beam b/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Query.beam new file mode 100644 index 0000000000000000000000000000000000000000..dd4a3583cc5c370dffd0dae558b9e487f7c251ae GIT binary patch literal 6912 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 H1V#N15W!zy literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Stream.beam b/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..98745b2a8ee756318389bacd1b4ad30402ad443d GIT binary patch literal 2988 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.TelemetryListener.beam b/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.TelemetryListener.beam new file mode 100644 index 0000000000000000000000000000000000000000..a769e4228da1f6f7bf4a396231ea5517be4a2def GIT binary patch literal 10616 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Util.beam b/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Util.beam new file mode 100644 index 0000000000000000000000000000000000000000..869a46284943aa252375e28dc1cb11722ced5142 GIT binary patch literal 3660 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Watcher.beam b/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.Watcher.beam new file mode 100644 index 0000000000000000000000000000000000000000..d5758f2c29dede626fc7c34bae61dea5fcab6a25 GIT binary patch literal 9120 zcmb_C3tUWF_w%Y|hRJCr4Lx+23Z|?nr2R#nr6n#^ir-!Lb!PwC8Q*h zBqYx~^GxEZJZ_01Qle5Gef!KzUG8^r@BjPH@3+q0XYIAuYp=b}+Ix@3^qE#T9BaFa zyYp0M*=&0pj*#Em+gnQ3a~JSq`4S5^7gv!`h;n6okc=vLI!nLQ-KEN5~VPL0pbN;2VP}K_1elU!0H= z$>+|B5~Gr6zEmVBl*%{~Sr9jjFW|wV2t>daMu^1{5f_z8#gQT*UnY|HN>H&NE;xk4 zi{yxXQHca}Q;EO~L)@nOPfO#WD(W^FDv9I^fk{fP2VfD%zXvR> z%|Ymxv(3rc=6oUW7s@m53qMOMb5~#&4o7Oo;cyTD>{kT927o3WlH&;U5fC08Pu#*J z)2)+Tl4nMRppx0kqc$dIxfj{t*~kSV1CJnd@bpDIai9oBJRwks5dwH7B18sgoCf3Y zY3dNo8oyf(5$Nq~eBrJfBAW_1@vtpUM^9|NHdCdv^FnC)T&X(L1uqOC;vVkkEp zBjY{;Lf~u`lWnU_+@Z!`u$eH4<>CghGA^?qHapvf3HyLA)dfLB%(Y`1NL>%#t~h#A@Huf3PR+&HQ->( z6}H5DCai5MFVuj=2#JLdZ4o2JDmH|$hyVixLzrD8%vzWV6X_5GPo`(kv>BN+ZGVPJ z0d1gwwhjDW3PAk|oL4D;P>1&^a7P19#1tSASHZBn4hYNBCL$!pDhT?XU|_k@D_~rd z-h~-JA8mP?7bphH$zo>hzNlpC+ldi3jq@)XMH)D3A#d{s{s~Y3=l0K@)4@JQoxXD?DKf?FgbZB zpt1z=4S}!Si3CMl0gXT?dioL}CPHP?sa8q>y3^o0crvW)W5dRihxhq`f%##CvcVRJ zWDR7)`Apz{1_*g0N*xiQjs+U(X~1m`w9!OI05BFtwlpIm)=DHf(TwqABT&JUjS(#d zq6M6wuK|;x@%}_MZ4?v1(?)91Oz>nANQ}iXOm#F;g!6c!Hk}QmkHkijjgylNG$69p z5j7l?NCe9Qbs{d2fTQSBC&7sXA{9}*ll3X10Tmtb3}zuzR|c6)X5jGTQ9$HmBAz@N zXo{7l*a|~+11)CQG69jb@#HZ|9B`QVpQ{Ji0(c*gx&zZK9cXM|AX{l*|I0ue1fmD{ zVL0%^Ff8^iCr*0DP^TXjViVZk9~q2i7@v@DWBM#o&Vr%S132EY5KM zmjs5v#~Bui;QkM&RAy-na|N6zDGJAMq%im>Me}(m4>0nM6a#*EP{R!dKm(u&fB--X z09{qb@Y(<{LaeR>0HeX`Ljm;R^;LMRuYsyQ43vhdIz~U@tNKV)eKaUX0RR@_%m9p0 z)iJzU}z6vamX4FWx;C^8;=( z05C6cZWs=LxvCBdgvXIi6pr}Tfv z6@+Sv+>JvB2g>LqMS>@!v*AMF`z;fEZnS8xII=#k65uoy%Hm_xLIqLMFpQRw1jG_V z5n%)wc*7|kpd6zl1Z^ZNZ;AO)&Wf>7PwMMw+uxI_$o>>rCf10LQCB7+F@0H?dtaIo z?jz#*0g}GB_Q1#iV6oUg4$dGU2Jb!!{+P3f(NZDid%O_BHETNMr3^9f)?ppKuHW@* zemH2SgrH%ZXuc>)qM+&*+dqZF!(F|Fp@7391y5{)#t;!g8&s)0d1(50}z@3!HJTIg7}eG+Kwrw zE(LmV(Fk0SnWNFDP-ZC(6QM$WtR>h5 z0O}ARp>OkGDd30v1*3=tRAPa~hP#C<A{c(_jq^LeTgY) z8K=80H9IBYkNYW7!+4V=ckUV8H3*>@GE@RU_ta?A{{AJd&h9k~f8@HxbdbzqX z^xT}cq7n4)EE9hG+3|+mZpUSt#_V1FTOOtG;PmyhBF8I?#}_hpG(X+}S6$?dj@@gM zxh$%5hf7NpwVJiM{JmZLn97tj-rJBV?+~@!h%+mAZQlCDTaTKFAA~!Qp1s&`IQ7O81xTwQJ(eOmPj}7ifE@ zBy;K6>UZw+#_oM{rybMHD_r$vliPi?!qeiG+WpI$vaZuCdO~#>*#{4}Rt+=QA3kFD z1j^LRqA&EsK+4YIQ!}PTk6X`NZ<1D^Vf*HY{oc6d7Y)>=CGyoZ)ta*>2p=5Raa*bz zU{0s3Qk%W&&5L2Tsf%|7HmK#S zsN0{FB$3BT8qlpxL|nX1`&u&}t2e{6v-S>sVV zqm8tR8y-tr!HBH7buxF0!2DdfpnFfoxQ39WJ`v|8)=vNAW?|g2)A6oMD%fm!+~nS| z8}nXYEM32{&T`{&XUDBAAy+5-{vq(nMW1+PbHUBDh7HH3ILTJ6lk^1goBVegLB$)I zjpvMjOLp<939~cr`8`i9-Jo6;bl>7I^qJl`d(YiS-1QvyEt>S0lGO*;r_PjTjkS5= zJ#X$W26v;(nqP!E^OiYMoo|Rw9c+$xIPb%;O9p3bFHoyBnd$1=3oVBy_zvEcv}v;| zdGd`t+e09;1+){Um!27T9yc}4kJh`iphDkM$G@Ou$Cd$i|2V++UUg{x`Qs|AvH@)u{a#cF2~<{ZD8yf5|PM%SW)m3clj@t;qf6FY`@1wKh~J#dOY z_Qd|>6AKClTw1bKb{eLt{T{o~d*`Zg6Q139Q=^fRQMcb|QHxx+Sfi3{6<|>vS)Jgw zsd|NMX|V( zK>y@$d26#;?(?Y$w%Mhhl1AGUnHw5*XE<2cAGmI~C(OCL;xzwc;CUBm>BcF&`Ht6F zmq!(ucK!NpOwF_7uX$gf>eCyh5rTM6*tdIq7MQ-?9rT2!eku2ahXlIm^>#kTzAS#K zg~xy|qxHQD^R8VQOPX^d?CpG1T)3_0=8^f6&K4lFBKnNa!%pe!>)!eB@qQ0RgKL{r zxiNEk)Ni%vzyC6J>hf7-kF3UVlUg|y+itr_Z9jQEO>g-qwSG9XZJGHZj|M|he!Hu8 zo%O42tzvw8aX`W}!3g5pS#Re@nV!AjaHJ)yyefK)_lMi|VP3cP1($p=o7cI!Qm}c^ zue%x^T_}h+<$k4gz$Udf*8Z%c2~%74SF{ZaTq}E9NgjW5Ir^%IwYuokM{5UR)P}t2 zhlU>i^!oOORnFN>72KzK#lbU<@GS;K{qb)8;~fVwlRWG9Z)TZ1GZyisj+|50$-aFpABeb?=;izBN>MgD~VbJsR0e(QZ)f}4hiu*%_iNFB)er8DpR%WVMRkzL<($HG&PBN{53*<$o$~6)fb;=R7^ig3 zoL5`Av+;PHusD-)usyM4Qy#ns@oSyyWKn85;*EC3JT0xXSf@qXcHf6%XSKaDpZMzW zB~C~g`N+9LXL?;_h93?>H)Cu}ep_7hg1YyKiH3ja=-O7<$+nNndpb*AcwT$C{6ub- zO}tfgRo;{1)5kXwwi#O-pY^u>Qtoq)!F7a6|K@S)A&VZX;MCM)Puo*<=5gs|y^p7VMfRnHC$_VG>ufr@&KM zby%}>TyBN&n^CW)-hJWKQ_|B#o|$G)5M=$nXU?;SA#HNWRR1OM;r^&_rFGW1b+za2 zlSv*BJT;Zkal&rrht7dA_I_GNUh=1tsZO259O2pRY)`dWHC|8Z3_WVHLsr`8WEG0K z2fn#@LGxDN^hRg*UC%$P?2YJ_UcI!)x7c%EOMS53rVCxv_LiXxR5-&XxuSa9)5?t= zzL$DF!fX`K0LGoAO_uMCaLDbVql@4(r9KX}ssW@i-D za$fczM%CbOwHWo>!e1p1(s~lpN7PqnT02gex0AW*?g8KA&zIm$!<&Y*J=IB_Bs*Yu z@QU}qInU!e@xMfQJ2X&tyvSU=;lJl!S<+@mg^0hXV0D#G1qO6@BUZ}@qX=$ z>iNw00=2K0{hW8rx0!7IdFq>httVd$pD%9Qz92U7Wj05xn%6sNHNE%VfK`EJkaJecJ6PoGFuQ6$+&c5nXzVM*FDo*Q?nUaEl0Wz zbluH7>N=rJ^Y)M$&Bk}HR;U%FPOjOMGtQ>-D?8y2acPDTjQIjlD};GVXKb?ORJnnEQ%mY?qEpXc0>8qKxqp8cX_?QX9^^t6i%WHYa!4R(V z!)giV>Et7GL*_AD9~b|ww{#+BbEan{!Rpt!`WtfN?yWg}`gQ38!!wd`*9Ko4(}b9< zC<|;^^2TT6v|&Zv^!-oGx?MD381G?sUEe7$$$wUlhKrEf~pJ#K0#{Tc0?{q+=9#s}PlH(c@k zoHHH16T-f6@Q(~r+;*wh{m&!xFI@me^k3?!^xnS~^IxHZoqQ>|d@poV&3%LW zwcu}YKN$-AKQ@tsUBUeiBSG%F%lmW2^atCwQ%8Bw_Z|De9Q$fg_SyOqm#Zn;|8DA# zu*=tPW{y&;e%+K^|DmA2&Z2+k{U59}8mf!mpANuZv{x)k|K4Fgn35#y!ucDA0U6&q zN#(n5k;=FK%N*{vy?;!U@uE5hRx7N@_)QAu0?4C+Ohd9-MXqh5h2h am@O~>?2d;tsF#exA#Ciu{|Eku)B7KpaXk0{ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.beam b/phoenix/_build/prod/lib/db_connection/ebin/Elixir.DBConnection.beam new file mode 100644 index 0000000000000000000000000000000000000000..df7c17475d05e0ce579349e4a5a59ad20d4c58da GIT binary patch literal 66552 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 GJW~i`{T#lZON^%chJH}{sdC&e|nA$1N|7m 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 z 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 I9#Zyy01{7s=Kufz literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/db_connection/ebin/Elixir.Enumerable.DBConnection.PrepareStream.beam b/phoenix/_build/prod/lib/db_connection/ebin/Elixir.Enumerable.DBConnection.PrepareStream.beam new file mode 100644 index 0000000000000000000000000000000000000000..46c8f420356ce979f2f6fd94b56c59a024c8edd0 GIT binary patch literal 3712 zcmd5N|AC>NQxPze{h=Nq@~{Oe4LO}5OS#mlVoDltPBbhDTElqY?SZfWMW*1HUG{J zhPf9`h;afFd5w6)p5pZ;tC<+UBEh5x1M@o`K@cVYd_D(&Z9|kxXi9hv;S~kH-S&~IAt44LN*O*_ywo*^9IG|$is6xV>z4t-R`q_GUmnJ9zF3wH!G z!?el~Fcyv|gQaE6syKkLsaJsDZzeiMBoll&~N2v?yE-eQN}O z5A-8ssTjOUz)1Ec998afY%#dX#zUbXjYa0%>^S^E|q{cbL#a^ z9{#-}!{nelOGsSyJps7sOQ95_D3VgW*ZxG1C{hUhwF7`L*aE;f901__z`9)^*t?+I zrilZ3MOVrQ7!yh`k>aAG)oS&;NAq~;$#xcAQQ_GC~;CjX;i8|Za=7cJsVI2 z180ov*HJ!zR>785{r_#7n;RTKWPu^iz4ljMiBU3;obnL5zc&XArB6y>vXVi|Iw~82 zp(C4ildqE19A-?Ri)7%#o<_yR#)ySim+bwL8~ySO zH>IhOJAocP#b>IIYs}C~dmT5Mn68jT?y=p!o_yYOyMLo_UTyI;E0x2|HIFQ1T-~sL zCKfn;B)<1k!M@5J?HSVDTSMFFHlNiI)F-u&(DK zc8*_L)gB*f>gMEVcqpXS+^$D&LB!-U#@ExzCv#6$c+$2=Vyb3NTtho&?Nau@Y>`b+ zi2sc%OPlMLH`_gp_*c+}vnmGby93+9{Oi&3P5T!dFufpX(am4ISeW?LZ2u~kn-@7s zWw4n0bZY&{wJVit*L@urIb-+17{~3Yt0ykg?b>g&Z&qJpPign;)^!%#oh9pQ>Kgn9 zCeiDAe(_-L`yzt*bX7@M{SPK#bJ`b%WtBXfdo*(WHy3WD-b(UZ|1sWzlw}>w>Syam zK7Ph@|9bp{j)%!Bea5)DH_YrL5BoHa+-Pdrk>{~4H*?|Pf3!SFlQcDLoOGQ#$=xW~xzugV`rakZ*I#1`(}97;69G{zuWRR$I{niz3A-^X_Ts6i%dhU zuKBUsQyR0=(m#E+;N^`DRrROY%){RoEZX*oL$0*8qOQ?adD~U({&+C4KGI@>&CX-N z*@Kmov~p|d-qTgS6-773$KP#D4Izaxka*JI`lszuZzwB2MI7RcExihF-GJA5(tBH9tawC@~7!{kpSiS8bhDJGgoLV-g zOi^;zf>yb4-A~R@ow@mCD&-w}_Y?D0atb>l0$ydVm}B)D)`tRs+<5~x-XATetP00}=g z_wD_E;w*Sii?2_hcbOgKGy}OG`mR0D-x5AJ^G69^r6b2Ei8e}Ixk4(&G^!lBN>3;z zWtd1ab#I@A;dB2T)AU|9f?W7$qWSGk^6q$O!`&l4=Wsluaeu)WUthJ}9U^_SaQ-Z( z4g1ac(JmP6?e5*y|7XAa6&Fk{5(WP2fW7?zz{q0=Dmnlt%fQ-ToPmRZ9b!J(od!wF Qm%?wM9^RKxlOY88FaN#T0RR91 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/db_connection/ebin/Elixir.Enumerable.DBConnection.Stream.beam b/phoenix/_build/prod/lib/db_connection/ebin/Elixir.Enumerable.DBConnection.Stream.beam new file mode 100644 index 0000000000000000000000000000000000000000..0b686f5f52411bcd286914a3d6542abde23c9e7e GIT binary patch literal 3644 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 J{~zzE$IGs|jYt3h literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/decimal/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/decimal/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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%0A*#?ba z%Lixr0`UTc;c8Q*dLuQA@5W699WM!Gd+sM|Dcf8-WHa2lJ^hg4Ud;~;UiVg=y?Y?_ zOQJ?*`uy9wG8_31&c3>ECOYtyL(;;z8TD~h)YNqd{t3NPS1z5As(KlESYlpiKW1_9 z`ckJxFWEg8t6TylL;rfMW9hDe&ki2>=yTS-`^~x)oUPS^!v?!Kg>x0Nah^W+AqB?? zxzXF&hi%CtUtT%gQMzGt@mTgHt6lEjzJ>X$aJ9!<$3(0@Xu(oHcfRdw(}mX;>(|Ab zmX^MG{t3AuAx7qNVB~9Ma&bwvZ}t6S#}mZEl#F_fUc_x|lbqo2TydKg>u)z03mk2Y zE7@yq{Ex`sJKY46#7O6o$#Y$XfeOqJ8JP{yFXesqZ@C zrZy&+Xhe~CcH?22uCm|AXARuC99WaJ!+r2c9d3=oHH+w^Vf-mvwbhwN=G^zP>8NY@ zz55?IJv`l@*~G9oKKZ!knblW%Mg_t?+BO0d%IsuNt;o?t?LRU#oJNhHami7}aCwLn zO3pO);OYoerhxOO+H{%;#iNG-ia6*Lg2o;!7cRz_A%P~^GzKM@*2Y;j<%Qs{+ z@n;tBJK0|q{ES~z{L}J(FO~s6|0|@(X|7*|ROH4qSu!MsMTw+Sg=jvF8#xo}|3HdV zPj?D_uk+tTMZJaJi~ho$8Rmb_`LxeJq&<6k|us zq~Y%#%73-y857eo-&64W1^i=frcLwj#>9T57xn)yz(2eB%b0x61;Q0H&%qgB3*h^M z2LrhGhm@Ccl?syzm*Plml!}##lUgg~FBK@Y0ipQoJ_y1mh6C$@`-gD<2sL{OL4v!S F{{xM7IBNg^ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/decimal/ebin/Elixir.Decimal.Error.beam b/phoenix/_build/prod/lib/decimal/ebin/Elixir.Decimal.Error.beam new file mode 100644 index 0000000000000000000000000000000000000000..37393d0ba2e6dc00902da4f3b1b20494b2187686 GIT binary patch literal 4276 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/decimal/ebin/Elixir.Decimal.beam b/phoenix/_build/prod/lib/decimal/ebin/Elixir.Decimal.beam new file mode 100644 index 0000000000000000000000000000000000000000..62cdc31ce7fb08c647c966ed44d7b7729b6a0d31 GIT binary patch literal 123264 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 E0j>{uW&i*H literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/decimal/ebin/Elixir.Inspect.Decimal.beam b/phoenix/_build/prod/lib/decimal/ebin/Elixir.Inspect.Decimal.beam new file mode 100644 index 0000000000000000000000000000000000000000..3eafb8ca24e8ed8103f5fe52f600632b93b1f7c3 GIT binary patch literal 2660 zcmb7G3se)?8Jg|NH;{ zojd=3Z}O*^6A?tPWJXfLoCIe6WCTG22L}fq^TkPO(oE_iQYpQbP%;rS2_>n))kShS zNvUYLybfm=9jP!dgkGzpHCj?l)a4Lb9ihY-BBzNkYiS*$muqrjEh+=0WJsFQXKQe! zj@Cy3nXRF73~C}<&*%(FCW<1}*@RAwQ@MS)1S203+B~riHCnY?9;KpnMOq!r&`Mf; z|HJ4ULwk@~awupEL(9PdN#(MB*hWE8xNb!hu2whw#0TFqoTStwMdXA#yhTn7|B$sU z8dwBD66qWQz7qyr7VL8n;0xfPSPjAv24iT@RPGjUzA(CMMp>poLFneMF>Ef|nbaJM zMoG_cMW|FNgtttZfRAy^R?0uhLjA`a3n@D3{C za0NcL;q}o%M1=A^So;EB1mz1^zZlFH4N(}%_xv#$zL$;l16Ca8>V@*XZDW5J`^33= zbF&!TJopCg_Fage2vcZqa2S%R(XxCffD3R1xB)l-5x@(80vtS=WVY!`fpY?|-<6en z+WXKTLi?Dt!R~=OfYosUupHaxq>~KmcNTzsSU$K!&Gzy*Cca~*aTG>8`yYdI@x z(ZCxU85LQvbJpIrnE2*E>zU=f>9mry7r)r^Q1CA@kZCjXFoe%Pn3L+0TlC(i*(=xez_-C^!!=Vnx?ns0G)Moub znhewSoygBe5>qJ^MDeHLxOhfFr-!60K)6#PqF^GA*4mPkbuz-_OF`;raT6uCC$~-x zPL+gSZyKr6(Hfw2gvlMW*bc}DEe?bm5V!%-4ssUqpN-yG4{K8r1xQ-td_DM#%pq|K zSCOj7ELz2wU{<6)kER(&&v3#>P)wvYk0vP690}zFw1?_Wq?%MX`VoXVf2Jargl%Xp zkwMZ~&DP(|zf5&UVO`^m4_ak)d5xNgR9V-Ih6GF2s?e2TvTrBII>rSjY~m!hD?iV7ET?@T%D$HmRJg5qm47uX-kp{jTL$=f;Oiw)wU% zYCm>Uw!F1Zcg@;n`O<02;b`xB-A~`SXKb3C3 z&qr4WJ&jJUZ+q%C=26VcGf$dgB!%-Vm}{71&taK#v$ZW?+sJiTw9)#oK(e=GpGZ@f zaC}NgjdPd4^Xh^tt!blw%h{I~ay=v2?9|(`x_{*UJbbh>*-un=r>XX3Z0Gc& z{ZZc8R0F0JW+im(6XjQRzCE`0*~{W9wO{wV+j#mY_sEVD*I#@UJ9bg>((dPt?{>WK zluLHtf30@qrs>vp)Dqt|Q1bdfx5+*Ot>q`b$ZhnGFZcA@dS}U^n$JITX?pPdW#8q` zr~+}G+v1Kh9_kmfxibqSX32i7p}fIs-if0JU6)S_JUpZO&*3{Me9yDlmNjGUh6ODW z&tbx~Csv+)(AR&&e<0+2(XGp|H%n8N#q4}ye0ys7>YlN(3#X?p_BxvCz3bzM#0gb@ zQ1njNlvIBD?hh`KCxXfC44OgrdMl?NF|Lj87(@-u0Wq51#UTe*mBk&H?f)eA@NIou zQgLQX-+<}%-x948j0D#uJ(sfU8##s0hKakJGRyFB;2 zbX5ACj?#thh3KS;5ldfr1Yjv`Q*?*s-Xaw#Cu^zr9dkN^OS@`gmDe_0%o*L8dE!Ce zkvW^+hfO$GU#zbE_|mD1f7~yAzAWv2Q_QZ|=E^J6derS_i+3GuD3|&z_{YVQS9vGh z(&THWdS4Q{WN#&(5Asjt;4C^<*yaPHR%qEd0swo~qwa$U@^2JPi{StO literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/decimal/ebin/Elixir.JSON.Encoder.Decimal.beam b/phoenix/_build/prod/lib/decimal/ebin/Elixir.JSON.Encoder.Decimal.beam new file mode 100644 index 0000000000000000000000000000000000000000..7454c5a34d2c85bb3ab5d24093cdc2080c094ce6 GIT binary patch literal 2624 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 IX97X~3&sanMgRZ+ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/decimal/ebin/decimal.app b/phoenix/_build/prod/lib/decimal/ebin/decimal.app new file mode 100644 index 0000000..aae043c --- /dev/null +++ b/phoenix/_build/prod/lib/decimal/ebin/decimal.app @@ -0,0 +1,11 @@ +{application,decimal, + [{modules,['Elixir.Decimal','Elixir.Decimal.Context', + 'Elixir.Decimal.Error','Elixir.Decimal.Macros', + 'Elixir.Inspect.Decimal', + 'Elixir.JSON.Encoder.Decimal', + 'Elixir.String.Chars.Decimal']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir]}, + {description,"Arbitrary precision decimal arithmetic."}, + {registered,[]}, + {vsn,"2.3.0"}]}. diff --git a/phoenix/_build/prod/lib/dns_cluster/.mix/compile.elixir b/phoenix/_build/prod/lib/dns_cluster/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..a02504e21eaff5141552b9aab72047b43262dfcc GIT binary patch literal 4907 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/dns_cluster/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/dns_cluster/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 ucmZq9U`}MrV9I4+U|=)UGqlh%$!1_OvMA?s&B?6DEYkBxtg%aaS&Ll>G5dji*eZ07GN~DMF!7L=_4A$`YKo zi2?AM3#!%6$vB~L?NH({AfP{5uu8>5^$GRh;>4h0{J#N zH?Pe9kUPX;pC-{EHk$_CJa!-fkXUvg42YZ^$N(ghO$6^8Hi-^&!WaaoL>ty;LbdrY zk@gaXnpj6jdIUJ1p##J0Ko(tx!SK9F;*jV}&#TOGCe!UIlT9bl2z01zAql#Z&mz)v zjbZ2otCti8vmgqb&ju1x7@`;fGdeJvO{8lv^yvhMLL2X5Koq(j%wW^WcrTgB4rJ5W zBv-bsIf=sNfq};3dcfFZJqC--B(v$p8dX=e@q{*4qs@y2woLMQz@a6uZ_3uS0zt?j zidlXvkTF2-6nA|y(mcAp8R)duH`le%H-{+Z`Y;3c?@uC<^5r^kCYwzE$rL8*FmmSV zTavs07``L|9gMRC<7Vnl)wR>NfG8HeB$&QS-;y4yYwkHwrnZ+#mQfdGDjD15Plq;i~Q1cW&Hei!9 zzO;aK?LYEo zkO|_&@y?NGyiyHDIb(?^ssww2Ba#Zrx-%%@h)kU34C+46mSKF+_@?G85eq+UJ0WRF ze!>JXh_`$#4}54vX@ysp_MqJ!aQ%Dfo+)+4{h3gIbFF@JPM72NrPJ8!rOS4i3|pTn zrhZxGINR;FV|Vp z!q6&Tzrmx3&YQ$Hr`^mqUVa8!ls~d{@pJ7ix?p$r%-64+CYyhFJ^G|@W*6*!%=XKd z(-+lwR~BA`GTcYG^vbhFEyVE0%2m_%v0Kv(2wzndOaD>v@#W{A#(lH1PV1?xk$PBa z;Pqlwy;X4WMJ+2lJE|>?#Gcft6W^FT=S1!0WltzgU45w>58gMX zuaNcUtCJuvGi2;Qr7I>etvV}=&sgdQQ_h_bYEAxnps}XPf|uhfLgPeJ(w*R>X+Is^U< zfen{dFJ&z>lIpk$XVeofQ@af^PB2FgV0nS*Ou|98NGxi-Y_PIED z1t*ezxP5LF3F90LoB2LzB`Orr1m{wJ?XA8PdE#`X`gyR)-ym!pfV=ab(ndZv0b zzfN^cSrVYmj)X}J zyE1%?JYN)@cUzYVFVFJ1^|E6S9gca`Ng6PgJSe=%F*qb0zB?mQbp1fyKL#>x*dtfh zrGJ<5@H>lnAH{obr!qula`a?-f`251ShOyk2Y1RmrS- z#n02~HX5!(HV(7~wC{*cX&4ASb=ltjUDm5~jz7A(w4NK9K-@_#u6=%gNu}-b+ZDnB z)grUXH6f{cH{BF%U*G1kp}=+ELHvdHY3nMt2S)cS?s&U)+vUvNhDUx`R3dM@Q!tnR zaMF2d?j%yP$ludL8PxV<=+3#m>)x*o@5i_r68umR1`6~MyjGEprxoT!gofW|!J!ca zyDJM9??3t4tU|`jf)|kc#hmtz;*PMMl-iN}b4YQ$V{ub^{f zhSqkU!0GBMl3d#c`BChu_Qitaa39lL%+}O_v|w3TW_8EOgVnpbULZ?JTk0G-BDZj; zrqv79>{Z@53R2>aXv6*hLk!EmSN?c}6UdT#7<1 z3xdz}icd7fY`xIJ(_7U(e5SDD!9S-jwY|Zps7))L+4Uyn*KHMZuMMg?-@0DOYL9%| zuupw&8op@;4{!P9I3fB!sj&-U(jLrZ3c6Z_B zdsd^^H=h3Q3|Giq+`z8rpT$h<&*wu_C?jE8ReDhW7OkAWiyJ#X2 zXnt}W8CM};;shYq0{1d-g~CTA5;bJPLL7dn5R24gaF3HFeO9P3{Fjr>|JV4R4oQD+ z`hSG?pJUbEkH)hmelEe!$v*E2Kl+7$a~B|U06sqW`Bn!2qEVfw&Qw?G7gTrZ9I7XQ Y_TOg+LKHZf0bTt3i=Sm7!!ZKk-^yrwlK=n! literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/dns_cluster/ebin/Elixir.DNSCluster.beam b/phoenix/_build/prod/lib/dns_cluster/ebin/Elixir.DNSCluster.beam new file mode 100644 index 0000000000000000000000000000000000000000..a0c9b2d003a97e37dac88826bacc435a7a327405 GIT binary patch literal 17828 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/dns_cluster/ebin/dns_cluster.app b/phoenix/_build/prod/lib/dns_cluster/ebin/dns_cluster.app new file mode 100644 index 0000000..125caba --- /dev/null +++ b/phoenix/_build/prod/lib/dns_cluster/ebin/dns_cluster.app @@ -0,0 +1,7 @@ +{application,dns_cluster, + [{modules,['Elixir.DNSCluster','Elixir.DNSCluster.Resolver']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir,logger]}, + {description,"Simple DNS clustering for distributed Elixir nodes"}, + {registered,[]}, + {vsn,"0.2.0"}]}. diff --git a/phoenix/_build/prod/lib/ecto/.mix/compile.elixir b/phoenix/_build/prod/lib/ecto/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..d756a2fa95f0aa7f9ce41b12c023926168630447 GIT binary patch literal 15285 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 bMEZX{%0nPd5p)jc1`wPc4A;gr2=>1Ki7^35 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Adapter.Schema.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Adapter.Schema.beam new file mode 100644 index 0000000000000000000000000000000000000000..9201f661acc0eadc4592bcf0dad2eddcb9184d57 GIT binary patch literal 3504 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 J*i;8We*$7AV3z;@ literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Adapter.Transaction.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Adapter.Transaction.beam new file mode 100644 index 0000000000000000000000000000000000000000..797ead60d34391a5243222858c46dbd563ceb993 GIT binary patch literal 2268 zcmZ8j30M=?7M@8!1G0n!R1{n&A}$a%mCYJ95sd6^h$fR{NCuLbFf$<(Q4ot1pJEW9 zp!h@!`dk31`n6cMkAi5`%2T8Yf?|tW1wKSY(I>n+0j=%*zW?5H|9j54cV^Bxca}!R zxI+-9B`_plMF73h8-ieXWMrg=Gd)CwrD3FNh>Rv&1LTN?MoHH=62U1%Mq>n?B^G0N zA|V!+BQ#B7QZ0>A8X2M1U@Ej+j%r9$hR~?|B$}onNSYF>Pu$7R3^~>=7_P!_RPOTe%mQ~8&XiB=-yMTB2!etLISPhm04@O2Y5^t!jDxwQ z5R2!)g=hG&b0%?k9@;={3@TkoqS@$f?V*tG7r<`9dNv;x3VEQ95{5!xkO*0z*9h5s zz(&k~;H+_6b3UwRd<}5nazFN+NkUU@qp8&y_@qJik}#ADOqzk74g8SNGvz^WKV#12 z!W_dXOnE@E`pYSYXVBvVmcQ7X2Xm|qb89fSS!{02j-|;s=3&Cr8fLTuU;&r|So}kV zL(&X7UVt|O-~qq@R%0?4Aj>f@yeRwyHqSR1!k5QF8)ko2?8epLlGhS{8_94#hk$g zfIlYl13-`hdA4CE7`S4mQaH0KjB}xD_seSUn?89L^)Ml_;e%>@QW6vth9`p6)=wuJ zpNf(ch_Yme?c?eO9E=~0I*M^(q_f2dF{MFtxOglFNU??_WGF@HOcF^#4QLY8SpqFa z0BfiQ0fYr05G_rJF*TDWNx<(o3WT@}O@`JAR#IS3fgD3{BoRv##1e_L4p<2&B|*>_ zu5dw9QJfZNlmv=nX#$XSlmG?!Do|n4Q2`lET)}5A%@s`pFD+QAz`$owY>k2-E zFIQ@gD;}SJvgjuE=+^xD@`U%IhFdj#SazAZWFY!QL*wW*XwEOZ=0j19O%(3%2-n``Q#i3m$c;dUTU6%#xw)yM~ zeCVIm?~}sIJv^JENf!PFrKj)vF2y_7wk~DPv$L{0xpf{XIcNLo&Mdi z8*}y?pZXz}@m`H9T#GtW7W72yGxJrHY->~B+<)=4UQD#RaktHCPf3^+kOhVOkR{8#9NbDf`_fNW-R;$1^^HBE z|6XM3i28EQ4(f9EoDdERql8eNUuVb53$r)({p#6xT}oN97hR4~z?yNk|Zeie^HtW7y zZwtFv6>*2nb`C+(Zzkw!uf<7*=B8I!5NVj?vyq4GDtUR_bs@49>$-6K3m$!yzV*Je52h#jyF@ya-Z}i!ZR35gU zcs}w$5xsH#pNE=QK_zy_wl|%M-}~>%uUyvk-`?ib;o<*d{P}2I^1ax;?$W(E#@*U5 zyUhdnQJ8x1o=S7E2wh@`S)Ta+77Mx#O6@Gl#yNlHubk+Gi zR8AlHW}~202|G-lggX{B=zMo{1x24@?Vc+-5Rw*@42ojZR#45XP{VJ8Sf)f}$tWpK zb*Gu4s~bP|UtlP~N~X43{QVk6;88_3g(-AKIDw-{B5;QTW2U};Y~wx(abIbeHRcXt K1HhIe5cGeJXi?<= literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Adapter.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Adapter.beam new file mode 100644 index 0000000000000000000000000000000000000000..ad42a4ce39750515b34788b7d23ae5db259f7881 GIT binary patch literal 4460 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Application.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Application.beam new file mode 100644 index 0000000000000000000000000000000000000000..2328d4b752cace74676e88dd6faf79b7fdf9a7f3 GIT binary patch literal 2500 zcmaJ@2~-qU7Om=LvsrAKO-C}e5JgbBn;t+ElheQ;Vq_I!h)Yv+S2xv5RZUg(0vQPh z28jk0*%U)q59%O^5FByCF@u8(Sx}4%f??vY7!w3hOk$Mz)ilvL$C-c5`~TH_%YVP> zz4vQPLUIrU%{dbp9T6A7q=rEd)IU8vec!<=T8Ei2N))YN2vGz{>M#YuU<95kmt(k! zkjrZkhM}+w1B23}g3yzg4y{$9B!vP!RM~=>NrGZ%xn3DktTNyV)|O7!BMOS3B>+s< z6H0>)O{W>kpkO38rb|aD9fGUJ)hHvM5n6Uiq#1-_99*sOY%q{0WyENLs?BU4Zz2*wG5e9grQ&uY@=PA3iJ$=azdp z2&4s(1<8gCluFGrloZrQe-;8uWdGp0!7`Zu%!#rX2rTKc7(Q4?83)X{GOimC#tR|1 z*pBb)2G>^dIf92mxJ4Etbd$wMxRt_qAs;?hDd7ls0zTX$h^}SfD1tz7%GK5M68}<*QI~}3ONIE0mK2sp3~LJ&*E^j z*`hB4xGf;|{4gL^kLB4h7mxrDi?ep@GwaXMy0SQDJ;t#6HUnaZ4IuA)9hfB2X6XRZ0;G{T%j8Jls9Z%* zaivS4? z`1s$V;2LS1JqwKUq0_Ll^!cMd&1<|G6p>{=$5#V_nUjHLB1VibP!=tdz`Ey4<)Q&G zMaAMO;N>feUoNn-H=+~`>Ol)}SBfMoK#-RDVBOf5=HrB%CJ_@Zx7HOUCn-XK(zI!g ziX!v?rcl#dpv5vkhLQ*XTmXO=7($Ne+0tVJw4*_63RDXviBoB?r&x(0IHJN-;thm~ zF##(vokl2-aO?~ z&u7X1DpJ~!-L;v=ktu0G5wB+gsmU)Q zosFBnPTY6I*xAi}96_X=t%pG_Q_lS?j0EU`Snf2SVh}Fzi!p(kM0E9UE7;&)^&20J$9Td68Jkc z$EoWMWZR7mO&|UK&*4RX`~27Na^L2XuB@xKWAWD1wTH-`HjlX07=|;hm+om64MT1I zQD?S=baaGpy`9}I9f>SXy4|s_!hE72LKiyZ7#^1QaoZ_>?YyM7p4nV~@RtsKdeO;0 zcwcZ7m0k!_Irp_c6JLld3>^LE*3sCK4b=hsgc75#ecaVP-qW-CUrb8}6tNRkdQH;% z0S=p1|7&Z6@U2OvJIAl7eBerTdVsEMsB3p)ZdhqRS9=sMId|KQiYJ3E!#g#9tqMJa zXE)>hmnWN&)Z%t0`xfW>_zu^H7pwiu&l2p~_b#0Ja(soN@9>_}ThDd5glyqu1lacJ zY{%a1cb@ReeUd}B-tdXr(w%fFqBk>xyE-v?W0ApbZadMog|w-6EMIqKf5wPS+XyeL`i{rj*-uxT%pR^em%~lU6B|Ju6ABs>xhI>)@F8=R zzBn$vQ|44K+1nF|z<%jzuaAD<+cF3_w0_!O)LR+++8$N^s{ZQOJSg>t<`MP#Ux(6_ z+NQh1kDLlNr>oyv;F4A`Aem}*;ZGenf2pAL-G;l@{D(9j+QnDwUSy2DI5cLc+Vpqx zx3_+GvqU?zYDv_t1?27}HU7fFGv!033*3*kO&xsGXZzt}w)VU9*TO@V^An?^&R_qr zdc3UX@`6b9dyQ9O3PMW1|G^kA=yj$mC)eYkv~l@?h9mZ=O&9s|c!#@|cJ63zIQCt_ zo;^?a#)-P}O5eiOzkf_T=MDdOYdB5$usES7Qe+yHKn)f13w@VhSFV&fU!E#F>)rLX zKS%N1^PeBg&#D3=LZ;4OE%4!qh>tvLI1Vm?(Ir;ac9Zh5hfgo03Jc@$jrM Jz;mY|=s!k?gD(I8 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Association.BelongsTo.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Association.BelongsTo.beam new file mode 100644 index 0000000000000000000000000000000000000000..0a0fe0c3f5e66f1099924602ea8a78355bd82160 GIT binary patch literal 17708 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Association.Has.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Association.Has.beam new file mode 100644 index 0000000000000000000000000000000000000000..d02a4b261abc2b2f4890244d589107f7e4680d6b GIT binary patch literal 24440 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Association.HasThrough.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Association.HasThrough.beam new file mode 100644 index 0000000000000000000000000000000000000000..0e7e47c6f791bbfc32224ddaa7484f29c67bd3ba GIT binary patch literal 9636 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Association.NotLoaded.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Association.NotLoaded.beam new file mode 100644 index 0000000000000000000000000000000000000000..089c2d9917d4012aaf53bf80056168fdcdbd1e86 GIT binary patch literal 3080 zcmai030M=?7M@91VgL;ZhJgAAq5>)*xUr~hKv_gYTo4y9gk&HSl9`y9knr4C6x)ha zsR#%PDgqW!1gTaxP zbC@WQ1(s-0ARjDh5e>{qB02{ML-`QA(Trtf2N&kDXzX?ft`G$ZfxOnRWxW%4LKb|R3W8}3!QGS{79VC9!eUypV21Ta>kPI*j}7D;Z>zy{9{_&7 zl?}&_4mtVJS@b+p4qa%=cLGisHY_2(h;GYgayX$ZA08}370Pp#5KWzh6*k5lrD+07B zfHlSIUn!azl#PJ^6rZw7(bTX2pnOn#T7VX#Vi?-LXHz@?4uD~plwt=$P!j0CQ{J<{ zx*}BxW;zKbn$BE?#7eYEQb)&7rOq@KMU*n#0I}FWh{a!4!gUy;`J&Pwu~;h6$WTn8 zM9D<4SOJ_m8~oGcG#&Hfk68kJwudQIZmJ5*tO!;XZJu*+<_5Hlw=m-JIlzlgr9v~& zeeS?`kB=AlubXTG=MndvQAw~4y^G%P5LqU2Tq=rEdQ>V|rwBQncMQDTP?VZ=U zQkX0Xiu6)Pmc6A14NagqIv%Wgw)NPA=R=Qb@{cd5?aSC!6txA5nw-qfzTR-+MNe;K z!Ih*?X+C#+efZ9n_V3bMUS$qR3n+%II$PS$C-`g|Z=X_~HrrzT&xNasJN$;%oDleS zbe-*dTr#EE+WbPb{pxGa*QfEMOpd^Vu=#zIr}x$sY$9x9x9mxj^OoA%BW73s6nROo zEctxsy*&YS*+1~^zcLxtGyMrVF{z$=xM)WzFTFNqtbD#pDr>he%f-cHH+dr!3b@)( z?mB$THtS?vao`z`QDH$dliM>h*cs!BVd>qZ1Go6In3qBuy`|PUIb$~7+{fdPv~RV+ z789l{8gN9tI8t)CIOk+a*GaGNjo!bOM*gSm)XgC`XP!D3IIVuP120uzI&fb3GndU7 z=1YHWT2_=*w|n;$AJ>8=m(3@gj-vWfKT%Dq|3oq@PX8z*C8IF=MPtX13y5I4z1N0E z`kD*TX@a1yJZyYUEvs5qQuN;@d6f5$XG?LRV7Se4g}JWY^hJ7W`Rl^F8KYlzcSM}) za=H~7l^fA;)HNfmXy2OZqD{M}hNg8d9ifH_ml)>#@v-lEr0? zQ!jSZaLe}{v}hUlkfSfiU(k!L+w~@V^qI%OzV%KKYWcXwg^jLpM1+cD|EYY`W){*= zp10k8vw&tH>oPx;7kFdUEiPJ-xT)4|gW9{fe%#Tm9Y^A|$%37;}nn=d>xchJH*(`k#kEJ7qXv$w8FL`5-TT<8 zucD&XS=HHQ2%zfG`?G&99>1t%IxZ!^AAJk;o2R|h=V#5GiE}(yZBzb`T6jPE?vBM= zU&Y>~%R6eV9Cw^-$-Q1x?U}bsHoJZLHx9Q}C)GFx>lsZ~(of{##}lt_FCjX#^YbS2 zO2$99`P*6~JbXXz(AaDix8Auu-I6(F`sjOqCZAed#W>p~lAm7T%n#T|bMx-q2d^?Ls%uLmJx5A+`4wr|UEy(SI5bXw)OeM@VJMPSU9<-Z6ghrMpz z#ICLzDYIR8C+tnl<>X>VUSOkl+pu%ah257Nu2v?``SHG7((%UU^rV{f7R7wg9cjcQ z**alL*`%nq>3fqN?tDG=M1bWSdvlWw@pn>jue&YC!M3VhXO`ULABbG^{hgnFy*)bk z>I3Bdz2*0dvRtwC*UuiW*hMz&onbrST5#Pvmtfy;c3MJ?z`+A&@MhWH=g0oBv**Zu zdb3LB)z#(cPwPM~o>VhWy#;8jPRlhYLaBJdb9a_BlUsS+m; z86`0J)QnNnL_*>!%8C{P<=)8q=YFL4tU<%Nzp_I$bc5z6UHVI!pLf!~kI-OQp#Tl! zv(&)GGk=vDLq3dRb6FxLQK3?u35jS_{W<%LsR#j&R**CB9{ex{0E+6nFnfRvWcxR5 TXMUoZI>!W{dNn+#4}$&&7t=de literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Association.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Association.beam new file mode 100644 index 0000000000000000000000000000000000000000..4dbbcba59cf8f9647e79b4620f5483b92211886d GIT binary patch literal 36680 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 J`hN1k{{ZKWVKM*! literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.CastError.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.CastError.beam new file mode 100644 index 0000000000000000000000000000000000000000..2f8d95732f7eb16297c1170bfadeed0b39d1881c GIT binary patch literal 4720 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 n`ON||Eeb3?wHnGh63E4o$@ z#VRPuYqdob6bdT+u)0(PU0;j3ZK-udwAxnjfe+NxmEIeIx^Dfi_xpY`_nvd^dEM`x zbEnOU3quh8$|yzTUn1G~aR`Eb+|$!@ohwop^%;6PM4@4+5V=lGrV$V64{0$a(S+8bA@Ya}4Pl0g z%_f3j)Tu zB>{u1dCLc`XYd;@Lc@YVFu~GbC~i`lx!(WF)RRU%Noaup*w(k`%NW><$SExWa$Jre z2o3;8Ex-T(9*P$t9Kk>wl}yC)MO;Dnny58#mSlpCUuF4x%`Qdl7*r~YMlc~NlL^3A zDT~IzFG&_H0Y9^h1HLO|m=G{yB?y}5g!3h6Ss~65Tu0CvS+o@J8*NJ*ZN)#7LKh@B zUWo*X5Wp1{BC%2&y#^(C9yt173?IjECH@5_lJEqW0^?v#_!E?ie|Qt?vm!yc9yWOa zj&cP>d?8lC7tY6UxI-ut0)t$k8;;8`2N@tZOQfZIPfWrSMPWE5zya42mm$D_l;_P8 zIB;UQUxD4g`IZ62aQLevDg+EZyKZ5U%aszDZ{=kqVf**h($Q+iQ z3lC|!$qfH708RjI0DJ%rfI9#@OCXI10XzX9{R03m`y9%P0Z@Rxy{IC?rZWN1oB@37 zd~f?4{A~LLb~^lf*yqq@Kl>c|0q1bI0zli)4riK$gg*P(*S?Sj0PWa@^R+EcWArSL zL80GpH~`GeHi9pQg&(W4mPk=sjI7lG+*88pn4%|)S}R|rdVTj)s&^zYQg7@Nbhcki z15hTn>2=U?th_fDN{zg;M#0+UwQ@CF_9;=LP>ol%34HNI%JoY}IER#mOgbHrvnR3& z&|D(}}@kq!Tm)N?sa*jSrDR0%a?K3{>G@6@${onAKKNWv|J!%1l!lP#&!=DKupQ zWSX$L11UHGJOUO%Yd=6xTUbh^H^H(EopWMoT>+DU68E= zXIYt1bTeV*rb|+s+-a;#U*Hh6YLxTFpA0>S=-|+hk97asyfelp(|=-Zal?pfKYTT1 z!{YwS2L=ChmqgYjUTz!JKIvH3iAyKyL>^}!DP)R~**Eixkv${!ag>v~I=^1JFtISP z`su~k&%)N9XRsYNqNa%3y8HySUxd%^{?0NW;%MTUJaLd?UDMoY5wqV%y-=@xxH(wVNNY0L&If&b^Ly`BJ zSaNm4r6tcXL(@{;h>4LdjswE*u*?!y$3Zctim9S;Z13+J;Xk^490Opeyl_YX!5cdOcPw1R#m z-in-`as1`L^U=e;9$3+IAi`Tc)u(iNwaeDP&ySa`eKutI_oJHx?zxZmSR&&ys@Q{R zk9-ebUMF@HYZE?=+LqtgI{)OEmfgQ-Qp~(jiTgyw<~Z@VvpN3B*)oTT}kM%WrrdDH-FkD!fh7W>~ms?{~uWndT#(1THQ6gHpWdy#r|9tCwZNZwUkEIB#}k>*Fj1^|^jt z5uV(iMs4YguBfiAdOk$g62B~e!tP&V^S1uA!Yzo%6!~uJ*t6R-tz>BO-{>7(w{s_4 z_AgJ*soa-Hx1aM|IPX@)_^~fbCtv%>@AT-V%~SFUFC;Yb_`VIR%U%UsyPLJV+tp=P z5-d$F~+;m*TX0bjGYB!YpSSi1= zU0F6@jyN-{aA?h`qR}lQil-#yT&|nu^RImxj_=95%%-42&;1^_-ub@mN!7YZTQoaT zKR%aPSfIcC&A;i=a{P&F;P_pNjXuE{o}*ocIO!9`{g!jOn>%j3a<8{eUs+W;=vO~s zTJG}9P+d?y-f=+Q6F{69cD3jDrnL{Nk2O`+9u4>`v8d#c`@`W!_AQ#cbyDSp@uwD# zdwOg8C&kZJ)aJOCRNnr(B14`AvgVr&Dxrt{{ix9qnlyq|rH8>jgIb;KZ(LjD)p3C2 zTTMod^a^2&J{52r!J`?xKjA(d$6#lH2V^e=vpQ*v6hmks1AEnEMZUFFI!Ex_F GWWNK@A$N=b literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Changeset.Relation.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Changeset.Relation.beam new file mode 100644 index 0000000000000000000000000000000000000000..a7bc29c34060ff62cf5f48b540a0a167e0a78f21 GIT binary patch literal 38940 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Changeset.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Changeset.beam new file mode 100644 index 0000000000000000000000000000000000000000..a4b2fc1c6527cc312485fe3bf6b9c2474ac0be0b GIT binary patch literal 169892 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�idZAq;;{n=wCdmYYn(eYlz-jcdQ*Wj2 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 L+GBquD@y(!*@9JB literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.ConstraintError.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.ConstraintError.beam new file mode 100644 index 0000000000000000000000000000000000000000..1ec67ee15cc7ea6f5501486e6f16c72c0833abb0 GIT binary patch literal 6164 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Embedded.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Embedded.beam new file mode 100644 index 0000000000000000000000000000000000000000..9f37fb47330d9605b2946596390fb62d4762035f GIT binary patch literal 22976 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%0Dd*{%rrh)aLu&(LQmi zV@@^mo1gzXOoN=Uoigh*AN@hczuW2`P0SVYKQip}(C1eB6IXuZ=cWF;B114Bj0G$} z%eh&?gt;7 zf$x7#qTqQR8PNaWwg0yi|Id36`oF7}{1;u$v)?}l)-OG0+Se)E8voLJ!1VVIL)Jh0 z;V*+ArlJr}QJh`B;dTE`NTe`1eNm zxsQKMj{hgPKPEulw2=F?|qcd+Y~wqB==k68lA61p8H;PaTc@uCAi4icQ3(W0zumvHn;ZHWV9% zjmE}cnb@rW$IinVVhym1uqIeDtS#0V>w@*b_F?<6AJsLm#n^4w66_9a zIkpOW09%V~z&^naVV_}7V4JWfu@|rxvFEY3uwB@@*luhO_9hmHLKMe7$G*mnU=L#( zu}84Gu@&lgbt(1P>ar-(pFST$$^F2B-#z&Gg&h@f3i!MXQ52NGMHB$?y&pz&5=Ei# H38DTMZ&!~e literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Enum.beam b/phoenix/_build/prod/lib/ecto/ebin/Elixir.Ecto.Enum.beam new file mode 100644 index 0000000000000000000000000000000000000000..1ff715a9610c0b84787a308ef32873788ac11dcd GIT binary patch literal 14732 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

    vl-{Kq=COIHTsE1{D9$bZ3Uw&) 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/websock/ebin/websock.app b/phoenix/_build/dev/lib/websock/ebin/websock.app new file mode 100644 index 0000000..cbc7dce --- /dev/null +++ b/phoenix/_build/dev/lib/websock/ebin/websock.app @@ -0,0 +1,7 @@ +{application,websock, + [{modules,['Elixir.WebSock']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir]}, + {description,"A specification for WebSocket connections"}, + {registered,[]}, + {vsn,"0.5.3"}]}. diff --git a/phoenix/_build/dev/lib/websock_adapter/.mix/compile.elixir b/phoenix/_build/dev/lib/websock_adapter/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..65324f839be34f82aeac5df3baa050b4ef6f82ef GIT binary patch literal 4778 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/prod/lib/bandit/.mix/compile.elixir_scm b/phoenix/_build/prod/lib/bandit/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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

    Ri< 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/.mix/compile.elixir b/phoenix/_build/dev/lib/shooting_event_phx/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..331182596ca1ebe8273502ff068bf9c046cd26a0 GIT binary patch literal 9704 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 qi+}nk7dV9UJO$J literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/.mix/compile.elixir_scm b/phoenix/_build/dev/lib/shooting_event_phx/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..0733d83a7592992bc63f5a64029da63b1dde83e0 GIT binary patch literal 44 zcmZq9U`}MrV9I4+U|=)UGqlh%$!1_OvM3jJ&B?6DEYkDMtk4T~_SFkWEXe=>-V+N> literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/.mix/compile.lock b/phoenix/_build/dev/lib/shooting_event_phx/.mix/compile.lock new file mode 100644 index 0000000..e69de29 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/.mix/compile.protocols b/phoenix/_build/dev/lib/shooting_event_phx/.mix/compile.protocols new file mode 100644 index 0000000000000000000000000000000000000000..47484c5e787ec8dc2d6b7bb68218da01201d698c GIT binary patch literal 27 dcmZq9VPIfjOk~brO3FMR8JNLT0^~D*2>@321yuk5 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Bandit.HTTP2.Frame.Serializable.beam b/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Bandit.HTTP2.Frame.Serializable.beam new file mode 100644 index 0000000000000000000000000000000000000000..cf14cfee33fef29d38a296483e56745c541fe6f6 GIT binary patch literal 5796 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 YWOfm$GO8{0Mx}T@Q@0oJd6-7~FICAK1^@s6 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Bandit.HTTPTransport.beam b/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Bandit.HTTPTransport.beam new file mode 100644 index 0000000000000000000000000000000000000000..130935deb29b70451d05bfc9caad911e4446385d GIT binary patch literal 8812 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Bandit.WebSocket.Frame.Serializable.beam b/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Bandit.WebSocket.Frame.Serializable.beam new file mode 100644 index 0000000000000000000000000000000000000000..ed1e81a938f91c521981a9de5e1d1e1424d60e59 GIT binary patch literal 5300 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Bandit.WebSocket.Socket.beam b/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Bandit.WebSocket.Socket.beam new file mode 100644 index 0000000000000000000000000000000000000000..f17bee48c044f01a6814fe607e94a0ab93185bf2 GIT binary patch literal 5012 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 E10hBT`v3p{ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Collectable.beam b/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Collectable.beam new file mode 100644 index 0000000000000000000000000000000000000000..d34cd357be010fe289c8c67ea4f9f9008ff5d6a3 GIT binary patch literal 6420 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.DBConnection.Query.beam b/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.DBConnection.Query.beam new file mode 100644 index 0000000000000000000000000000000000000000..4382f9d8ae7b75763945829855ad2bb5098483da GIT binary patch literal 5720 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Ecto.Queryable.beam b/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Ecto.Queryable.beam new file mode 100644 index 0000000000000000000000000000000000000000..146377381e788c1aaf5f75e0341f794c14bb0480 GIT binary patch literal 5916 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Enumerable.beam b/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Enumerable.beam new file mode 100644 index 0000000000000000000000000000000000000000..aea477a401709f0ae56b53b5f6eae2e73a0e71ba GIT binary patch literal 10460 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 Nn74p;N;C-c{{RqCWAgw2 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.IEx.Info.beam b/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.IEx.Info.beam new file mode 100644 index 0000000000000000000000000000000000000000..304807a6a8f33a8ab2342d68f0de90347a711a81 GIT binary patch literal 5704 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Inspect.beam b/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Inspect.beam new file mode 100644 index 0000000000000000000000000000000000000000..d44a74bf87f7a3a2907677b03efd2018ade3e7e8 GIT binary patch literal 17264 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 W5pX>?0Pwkd{<$;Yn*xXr@&5pVxQhk= literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.JSON.Encoder.beam b/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.JSON.Encoder.beam new file mode 100644 index 0000000000000000000000000000000000000000..81285498c6bed5f26b209147df79404494c07be8 GIT binary patch literal 10680 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Jason.Encoder.beam b/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Jason.Encoder.beam new file mode 100644 index 0000000000000000000000000000000000000000..92df3c5e51f114fe56146f6fe8f3ce39708fccaa GIT binary patch literal 5940 zcmaht2|U!>_cI2KFT)tJ7seiD>{_I;7LjbP{94AC`C^!v?=&+Er5>`jS*rIaB=427 zL>on=l00oskr&aXy+kSbwfWue7+&6A??0c$I?6Ic{nbOX2w|EN}QCyfO!s|>S2MB<#U{*jx49pZwdU6?q9S@^6qION#jN*9hDWj#n zrbxQT({@b}g*Ts;XWYW6rWpMT=j2>0re%^i?4RDC{+M-o-|9^}z*D+7v!?Hry6gvT zLOuF}E;kXv{Xv%>TPVV7O{>qJ!N<>@w#S_<3I^Mr7logG9zHw~90d#hu^T4V)0=}Z zex%clmw28|=L--K!bCW9dOH&w7=*(Hdk$tTT8?gdAq^ZB_(235&4_0saRSNt$YnA( zoCpRpR){Add~_o-IP^(c?RO^$uWrreao9YVWj%3-skYX5t?#IRt4DiuCVQr;1br9` z#sh={3`QmZphVEn-!agfKvTpL3o$YzG7)RA0JmEcPqIsQPY;TVfCZtcarxaxV!G@KDlR*m+~o~DjlXJCLmkLrbpL~Oe}@dNgOfCwsx)X83Q06*HVV~fkUk34X^;U5XVM@;6l%~QG72?mkP!;CXpk`qwQUGGI2vSv z;yTU*U4WaSxNZ?a58!4fu9rfX1#oi|pJh#$4R8w-pG_g?1AGpO>(d}h6dFk8Xay`Z zT!15(Y9>S01QP+l7@`o2$_QjEo-A=O-iWqXVxKW>u?;%Tga%PjXbPNbkHwow#Ml5a z=0J=ku-cX|2eKnrVDT1`^}x@O4zvUV9I<#S$pCu{7H^F%6L2}6GEM>*_3y>Q+eoMm zfNHytV1vcmNxmJyxBWtb9Tx8(`E~-|jtdD6I1D&nA?RlE;qp1{06ZO1O z&f2CH^XzM$+C0bq`U&V-xEU4weIP*f5yg-+Hi4KSR-C{=q!SaRACqBfvKx(&Vijrk zL<$lsPY}k#ulWDZjpBdHjbbIKJV~INlr9a5;^{M|_+K*Tr1@yDo}4xa&*F*VWJ(^K zWJePx>RL6)0!>+t7(axG?kjXJ;6Ov;6}rBT(uU&bK5_sJ#cka{odaO!3P%@GLfileiv~Jg6W*P~jnB zhJZ((sFhGU4qg5Kv$6hVGog~F449N2DNPb|5khBxT_cNTl9(6|A6_I-^hz=}RNaht zSRe#BBo>34N3lT(<2gl$N|F<6^ANg_&k*zI(vnYrW-KNw6p9rh1qc_A1z?*2E))TM zFrNVk%7DO#1FFH!2UQ^uD?grzChe0JauX*591L_W@{6S0o-q~*q|cEX*8c$%})9oK8#A94Q?t%Qu9Urpxill#y7 zu*b$hrH5>~Yww?%^&ztRU~t;?ItMyAueCAr&sjO;Lc3dwRj*z3q9t0TUM*iQV{x|3 z4pV4qw2*g?vajMoIKRrw)57Q3fmCu!N}ye5|2*Tz`CEcs?mX_h{?k@<-!yVd_t&ia z_n%a9N0Tn5o9540*XH3RhdAoVyWOk8%RDL!b-3DLpmA)yZaor^)!OxBJIP2y+UZcd zbLb;2J9#K}z%opRx!zeVurT%839Q%+x=5>w;JWhO1o#T+w;>1))V_blsV*)6Y*9oe3jVDmvs$K&PeZ&|HRxhZaUwak0b@$`vV#l44b zA8zG+idx;LZBK2wrSyK?0*vAHB^CP|2BY?qIyAiu-F=ljI-K3ll8jTA{M@aXsA-y; z_ab(=>_gR!cl^%z$psdV2zy`3HZ`7+lE5B(@a{4s#XH!pUOjn$nlS1kzPkF5G`V|^q z6I>J@Z~W%`?Wn(Hwf6C(7<(o;?4T?zJVyh2;ZAtG!;X=4eLlxCf4Se-Ie7W>)&paE zmwZjPE)FgK@45WkM`2$Ame^!|bIq^aYRocjVk*1V3zAR2aSh^Usb4!hr()^T9oeH- zd_Bbn`WDYOT{5E@IlaKNKX3Q8r`~6CLS7rqJbL=uU_n;qPvi>s=Ddst8m&aj>V~3~ zO&@A2hK^SJfou(b6f|>W>*?yS4!;I-I#v1R`TlD8ZOL2nPNoWDlbwetruXR0Ww#4& zzZ@~4(0CQQR4;zKYgnbws8#=0PxOdxWp}8p=4R)Rx6vOOb*qm2(NIvgNwM^1O||!m z-(4T8JN@*!ygl%=aP7-_O3^u?i}Q(d3hnWXy)A8}zm5#hRXz`X=J11Ge{6ba?XtSJ zB=aLxTjvzS>KZAu;_F(QRM^g%6RWmakN2kSkg4Epe@4vU=1|>5D=F`{@&c|F9P>#S zdvql1m1iB{?&3D*j-9ELxq%1L+#NL<_$|+7U13J&c%BRmJy3M^`JSEIGCtICnb+nQ zREg*QDxYx@i^Q$@>U6PY?~N96tL}cCHy^BDV(%xZ=<4ce+)ig_%s3UGt5tb+_9&yA zSN?cAWiaDJRCnwmg`PXTyd-Ar!1=HE<0I%=jjlxKMwB6*~rb|108Gc%n8|+M$W8F?f!TH3KCMQf4g+l z_2N0sfP9z!;RdR6_nVeaeS3}=2{vvd9J-=4N|O)Wyb<>xQRTtnN6jZGO}4M^Z@Fq> z!o7dandM(_E%4`>?E5|{er1%d-udkdDy{|Jd333yCj0l7du*RV?12@@-?p44S`gn< zHTd|hA`30VSJI(RHg)Z_tJj_K>bb}oY}Kk$_5Sk%cJ&kYiaDglyLZ#b+MGYSQsz}W zdpnkr=4T%L+vvQ+)%Tm17O7ZW=-A7P*mS+!-qJjPYp}k{@LkAYuZvMDHz<4zQyV_F z%@bh?K@nw&#$(0L2}ONBjmP7@DxVYaa&?Q&@7MoDX~*`BA2RDUDAdYs!1Zj@fnJbH z$UUUPdAnfoou(d@-eU9aY!Zi1OSKHYq@4J1sN~rW@impb9_%2^nx<5rVJ*dzfpvP@ zy#p5VzMPS5%s+Uu`c{&5t7SMqjFP;uIg5b5?eO}6ZN78{I z@73qN{kJ?!ec{iPa~_plEIltopdPA%^J3_jL92gDkCh)jvGHEUaJpKXW!t8LETs#7 zX&A}GRa8N{xgX8XB%8#jtkt&OrBM=qgVgjI3P$e)`Q8 zC)KDmy~~EiQV3sfq*dC47Lwg9dmF-@rRjQ~dEp(BHe9#ttidbyd}8(WS;^1$R_7MD ztr_jgUa?_Sls}$9d_C!Pf#-1Z$rA@0?m;G8EL7dMY`|fthp4?Wp)z4vxKD6ano?W_Y zz#~%8&EvyPKkdze{fAZ*Xdm;Bf8ORGv(Qfm4xJgU{Vx77uJLkby0PE7?R#P}@*B)r z4%T}VkaE}b9_VgMymc^f&LOMb7x!qrGKIUB7k|OuzSbP`Y~6~|4&{T*;fLk(kA{TE zEjap3EA2{pJ^l}5%vQHUNCbs$+4ke z?B$Z)(;=mX!QEd@wk3HmZmi)cl@D!u`rF9x9Opx~BPmA(!zPtB)Xv*3on^%jGgRhX zTXaR=aq(IH^__FynB*|Ej<*@_b7*ahh*3UdX=FWXrYU!K>f2+_&Bn@|`vT7IeJAR6 zxv_hfR>_Qd_7U&?w+6|rhOPx?{EXQP)I-s!8E0xP1TE{^-Vi)rC!{yKd(E%9EqbpNc2)j& z*Jtl&QqseQzb;Wud`@rF!;3FznwgenMh)z|_aTjX!NWejcf-%$hIZ~7NYWQL1SDH7 zS@Ahyzx(L&;J*4)#kp(i-m846yBPVJAxr(`dWw_I*oA=>Zapq?X$f_#Z`dS}GA6IN z>Z2D1^LJ%$c_@r@(>;@;hIuB|A1%mV)wTMAYTr=icVJZs9G7RC9FgqgUe=uiW?Sir=!J8 zOO%-NU8(;AWngNO8hWY>DKnSBA1|B)-YuL2<#wRD?ml02hlZ)eli^RB!>7Uua^)*I3V~T@7)ekKB{)Rj*09~i)yewVD ze+U^L^A93=AM^vSUjUe)6O{hYJ3e~P!;%zyG0Iaf3z(2ZKFW{2JD_((oXQx6hI0Q8 Dh-a3Q literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.List.Chars.beam b/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.List.Chars.beam new file mode 100644 index 0000000000000000000000000000000000000000..87556e178fe24d0fd10ffcac65ef29c3046091ba GIT binary patch literal 5040 zcmb_A2~?9uw+R9H2n0U1uwyhtQ6LGjh$0e}u&6*pk%HO~k}nv{W)=c22ntq;Ac|tC zihx_SE>x?nT2Wj;a6>er*t#!(f;%GWtGYbHBNBXXb7*x%bXQ#Kn8# zaMr(svO{7*R0#n%oWbb+{{9mdx3Q?+B zg(>BHnM5uUW0e9-uE6*_6(*>`GUYObO39T7{7QssDPJX$NtG!Q9$z6-G669~A`_^^ zSc+1mQ1ewxsYslHDa1T!+KV(y#T^*bNh%RZU@H_dMG2P4$K+5b2ZQ~SDjAm#^yi9!B{ljE#B&DOS8}-nx^TG& z`5Uw8Au5^V-{{aYh|{<8Lq)0?z(3M7#Npe)XsHTI!xV_!w?h$P8BcYR%a!Zx;&Pk$ zz;iOONC5pB%z^qUS-@-9-BfHIFGD0#D+V0J=ZVFsJpOzoVkOg=&J%M#(`tse6tVFV zNyX4tUW2>I@b*INhfu$Wha--kN4^#b#&BUW0S3;?NE{A_0)W2*0Kj>|nc>lLoPpIy z6i*2xY_~(K#;p%sAD^G9R$$8#)~>H+AMnF7S*HlrcoxeFd^s!w@J(Sw;y@#3MWUd| zVMS6vQ^F!xgE_Gj9KLcGO7g_lK+dmF{7EwuWf2U^QA3nu6PQRqAK9^psP>c=-;By} z+X!|PqNO355XmI4BUuE(N)%^|q6iB3+_gfj@h{3L23AB{6px_g%vh9(M=Z-(fI;Ucval2fSJ;0qHZtq2M0Jt;69q1%SfV)84ae#%BPK+xM;~YpJjj+oh4ku9* zq~Syg$+eo~f=66*UPD}2ksP>eI4d#*wiFg|1Z+nDN73=fNF5un2?!Oi83o)!CDDj( zBsV4Tc#QqB5r~J5ItoxdgGe5D#7oy7 z4f^yTk{2Ff==$!U&kQ0l2sj-0N6dr=Bw8YeEen7V01^Om00sc809XUS1AufJJr4V1 zJw7-e&(75GkpsF30GfV$tR4pq&K&?en{Yi9fU6#N2CbbQhcX6vL;1FPIy}!7dfW`O zP(R4WV46q;^v4$h9R7>}BrO+%uhBdMjoHvYFAonW$Y6}o^-KnPBXnJ}p^-^PF&z?~ zc=&X{mb_d7zUW3v%rAmDi;R_2_E_J14oJ9gome0Q3jUfCT;i6X#3)~aH+=|ahBrkd zRjM$a07`Hg5jj2A!!3e5B z^_|b*QDdg3=mMX{T;J12$j^(R4NwvLFM1BK1$t?kj1SKg+;4EwbS>N~CV^ zUDc+xD5 zkuF81Lr;Z8ONF3$tFsS^G|s>jN{|re;|LSzOh_2W5=zL;NaG-tag}nOM#|M^a|O&n zd`zj-mnfRD*;M*bW=WEuVGNXVt+|5B3V$GfWBc z79X3Bo57GPL>VBrF;o&c1Jl(TUgMbK{Fr{@yuJJbCXDkEW@ZJXc@K_x)4c=ez6`M_ zRZr2OFqbo6hF8+DOlW_2YMKbxrC!bfr#mNelQwC#?3TaHVe$J4-^Q>&GnW{so=>WJ_uA!)zmxu49xRK0hF&vzxZkACBf zmRWZ;K3_Jq`xQ=O>`JS9Y=QQE$XmcRR6h1r(jIx1${z+)-IF_~is(np2x*ttulz35 z)>6v2J6c11uQYBltXuWxaOXysQ~tXPO)YzCJH3wB8CPCfr9N>bDmFVAwH&i3mhfG5 zp2n`K(qrVkQ2Ob@H_cBrFc{nuihJ5^c>eYKg-UhM#hx9d9omOlHY-g?d+$)$ zZkkwFaWc7R5@PhHyVhq``hzQzV(!gLP8B`k)~>#L_WJIEs;ImeE{7aVsn}odZOxLW zk#qKoPuX*SFJKoZFxHOD*xt!>{DnGhLyjvUM}G;hF{b zB$p|qGp-M^&k#CA`?FVHAC=<2=9+eTQN5_SF!Zf7v50ilVl6|v>wWKK=lC}V3hKD*b%eIOODe7p6vcFR(%-Kq9(Cu&3VgX;@QT9RAO zHBgG1^ADbQd3k?&T=SGp$TbCd1+!vJ-_a>sCDsZ3i8jpFYKU7@*Jw8Qxakb;lndwbSHr)@- zyYMisXyn3+D_0qXFT9ZWv)w#o%*N%+W}5LeRaxgEr--s^F()QYwR)`0{o!QGqf>#w zb8FsynEo_H9^<>G<>XNhUx~q?zLvdtwVMl{)?YYxpan-S-Ej2ur6YT8y_re=)vND; zQTOfc$?@O&^I9Hk$D#=GO!uw6ZzFD1?eE^Ut^;X0b!4G&z5RsxwjVDg=aycac6qFI zoLA+E8ZC2+Rp|^r`Nb4}ho#*W&2MJ=+8_I;IwrP}qkil?l`7F3U!BxlmE>@lSbYnCal+6h}5SA>eRkct?czGsAf3%x5?ETsBC+fz`Kw{meeg~HQbd2dxM`nHjvzY=hTX{D zo^I0PL}W}msO&7;_hGupp0duS0J9VeUn9eUN(Dc3XF>G#=*%_z`Yc?YA6Y_dbzLg! zh;`Tydu3G+Q#_%#hto<)>fI1NcUjTP_)GcI4)}R&Ds$VLUPCJ{K0bREwXNTHfhw~P z#$Op<2}-3T7=Mj^$lSDdW}V_H6FqdbWt;SByghvm>f_wvaNpOVDUW*fo}sZY=iu?* z#;>X>gcFm@tFX9|gSIo+sNvk@9zO1@ zi%L=cg3(pM(kglIy{B7jqWg+O)_10JCepUAjS#N2-cb-bcS_aGJZkwATP)sly2Ge$ z6I60-q>pL-nW%T;mGbUaB^5S{V{WWtB`L~s3EYP14-5RqU(G*fR=UidxWdNNxSYac zH~z-rF*O&arwiiKoXuvWjydn%NJ}>ki#NGKKku*f$&NHIrJ6Ehjo zNeJ>!dC;xf>r&b$^?JM8&R$lRJEkc_TlHV29}WA|?Zp%4 z2=98MmokGK7(Mrbwl)Jmm?DXsF zx?0ZA+*n#Y`Hp$Y{aX)?_P?sT{ApuFi1x)nY^(Fs{PNaz{PS#)n?>BX$@Y@*d)p`v zSI7P1@#jx|d7HcH`dij_FZW1X)V{Z;o@jFW?}XVQ$0FMeT28Au$F~N5I<{NTmo_0+ ze7mH>?W6I}ZR?-NlaDCG*J*9dth*EMxMlX2zrLt=8FI8O_SoJxHx!uyci{36Ujgg2-DPahaI)-%-@sxSqZ_b>7WhII1{G=uDn z)KWb!yoLbYU(z*Sa{^Tw5IXd>G9VB7=_?ySo%_Gb1e@@cjsu+k$8`lVH_#BjJR$v` z?=PDFlty1)y#8a>g1ZTLYXRml;J)d9@V;vZ0B>b!VrxP+vBX)ziuS8A7B@3X4%flC P@J>Up=m+;077q8{X(aWg literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Phoenix.Param.beam b/phoenix/_build/dev/lib/shooting_event_phx/consolidated/Elixir.Phoenix.Param.beam new file mode 100644 index 0000000000000000000000000000000000000000..7a56c624f21e2a4bdd127dc336642b5ecedfcc1b GIT binary patch literal 4748 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

  7. XZb6 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Debug.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Debug.beam new file mode 100644 index 0000000000000000000000000000000000000000..ec8b8a1a461fe17bdc14fbd19417577457cb1232 GIT binary patch literal 7272 zcmcIJ2UJtpwrM~D1Of>}krKLeP`WKr1OX``ID!~L5+D$gn1rr?l(AD3)F4W?A)-_T z6+}^yYHuJYpaTj@lcEm)T)>%m@6CJbt@ZyuYwdgX-DjWObMMK%8{9UVz+j60Humc` ztrvJ%!eEHNxw*MEG{K(5jAHT(-Gey{HZ#i5ju8+Zlt7^{*?}AiC66i)@R$MN0tTN; zGsviuo57L^_JC5R!QEG*7zLgQ$`R5qKzqHuW}8iUVY*Zb41g?ln&Pad5) zuY$^p?$uaiq_C&~3>I4cC;OrswhQ9OKrw?G%7_kRvgwx>d0d!$K_?4bD2qz@31QSw z28G86MB|wJpC(YKEM^45J&?-cGst`fE3lUi#paJqfX1eiIH3*mqWBzIC_}(cUo?xs z|EbNM9UkV-W6;BC40ni=526>r;PF9J=C`1g{@!#$PX-V0kr`1;!IuTrpO&pNUSqTd zjsHg?1qu#Y?w^Et&g;1R*H9}N{LMxq69bSy17icUyun}nF*07HlbCd4E|ZQ{F!<+8 z{kfH3z+|(SYzE!nXZ?UR7|fPKXTV^{JQxgy0|1S30OkOs;5Z=+A*+UilU5#TBpxifl3?(3 zQ5@C`o+rd1WXEvu%aSl0*@1)?lEg?jizXylTox}hMv(^en~;rUaXel~UcAX|LK=$` zY>+s-aTDGKNy3{o;mP81NLd&j-XMa*u7trmh3*Jhad{HFR}x1e<56U|y3k+Dm}E7H zw4OwgY>+U#-Xwl23J0VhWpQ};7hpCtqj5qm*trA;N6Sc(aAYK*3?&9LE=3{9NEDfX z6eft_$g7Z8B9Sb<3@a}#hn0n+Wx)aphgH?X$|J?)aAX+99a)4Y8jCA|Z3N^+B90(T z7bE#!M#0f|B32HWizNUTlpq)MumoTS31^JEgaW=G<%*C*lDG;|mIRC;EWv`SoB|fV z6u(dY5{m3#ys$8jlNWHJFu@54M=ufP0mDI9(Mu&^FfkYxXJHJbkc7jPz|@H_G6FBW zEM}a5#-#%u1z`i=)&g!Wn|BixOu#A&J5jhQJ**;df{cR9MhSbxaCyMCMWfbWmEdSa zvV%L&r^F=8+o&8u(8H>1MdHMlLksgX6_z@%ng@Zu&Y90_NST-;^i2*SHUNCK)>0NpD=rGXy~+H~H? zm4ITl25XA+6!5k{KhBL|TxiY%fL#PBFe3m!zh9X}oCs!l07w83-%@I_n^ z%+P@7$^ala5UvUU8fpO40YGvz0B8b$_G$yrTEroKT>wA#LiWJzqvq|T0~`&&0HOha z_#hk_%K_*Bfas9EpYoOgoCE+GkljlFKs=Cd(u=qRm?3=-9kC&t4aEfV1-dtaXaEcW z%nww}#X~Mk0pNk77D-}YrX{h!RU{Y@`7bXxDjZO;|L_``CrSSG@k@mPCeelG_57;z zKR&zHQQ;v#fqYUJxZ;+!BYxT4lWL)|cjQL?qp1!+!_ON4j}-s&)d_9DCjq%43?7fe zixd+u!x)@!0U*o$g^Xcy1PiY~u%Pvq1%*ErC>$PT{^sX95paqoL4sf|92yia7l;C2 zB>*UHW&lwWCWiL#TU-T!P3_^ znSHXBhg~p~c$%6qc`PIZX1kFc2v*zY`H_HM40`W^BT6U?X=P{(5jfoWBMT%16}gnn zq42rXNH%5hsKfjD!i~fP@;G6D%wt4K11<;wYYZ+G5TpQs8ZO{am|@UqCb4p;m?ZdlBK zKk)gphan>hWX~=jhzUx5I>{XdGgXetY4ZKX>AEA|ekrn|tzvzpX{VZpqfVKIZW%%| zuOwDab@XbQIO=fnz-0T~m7}lpV$F{xkk=>l)|0+B_C(+NOzXHE@xp7|)BN|FeO5v3 zIrl#8r(HfQqtKq}^6BvI@qT4rd&9L&d-fxqo4jzE9qd>3^YM8_FOe^XE4MEf$M~L} zE)*VoQMK13`188dwAH(6r^*~j9}izSsFgF>^TWuNko--Z75!{U+LX!+?ZHLZ@ZQwV zo}ZM43-J99e=r++RPvc8;<=-^)xC*RojSe)>9Cjb_Uet#0(T_nzrOOTq1wfu=+mDC zrKwM;Evnc+bH=ZG{i@lAb>3y?!O}X=u_4KKU)bhb*`8=Y$H1B%gaE0u3Q(P@bnBY(T{eXUr;x-PHVJ2aXr z98V{$Hv19+KeTJZFILcbglK-u2 z%^Mkp%$5A{JIEt7%x6_6mt6>?sSdW$w_VxL)pqTu{fpj1cYF;#_0}cCxYZ=#qSlBd z644)z^25KOcXoJvefZ`3kn({qQn=7eF7ox%a_eH2dUvv$N3W_yOro~ux;$#*XP<8I zx7x(&Ke#Z#EthS_f3#N}>twCUrQ5ov&G@vhMz@@ovxNLb_DAO8UrwP(Sh9lFOQfo9@(th0TYS-}*qZh~DtJRk(QG$QlkUs9?T$9pey5UOODgC8) zOR`oyiA|WUYR@NewZ$Up=hkC=H(l(wv{gLaVdsTZgi)D0syJrzHj9-(bia+4N1UzB zzom-nr1r!rhoR$6XeUGPr*Q&Y*~8&$i^W2>`r$^r@vr#ZgAXTHPyE+w?> ziOd+dqRiPR6JPGsapr!d5?y8dcCLUc!j}I$K{Uz>egKtUq&f`4NX& z4Ke{UP@qT{d$*o!C-!cOrz}O|&8ohUWnU=8M52eL`%cz2-Rr@b;zr3^&K>ht+{Mi+ zFtRC~xM_QOFn9XhSpQSTZUQQ<;dGzJ!^-Wu5?$6A_elp1MHcOOu5li<_LAt?`w~BB z%*x;KQ6tXhnWxKw$2#Z+v1#rNrRnwx1@e`TzkVl=eKh{ObJnsUY(tA zhTyreASHS7;;xWNxoEW=X(M5+cf|9nG%!~qhmh>0N0M8vsAR4;l4!o79coWv6%Gza zYLo^mc<-z8Fkn6Y<$z6rR+#pyaH%KhtL*182b`PolP(g++Rv;Vw0YBgW+U;4a_~Xr zecv5+KU8lVu7(dYWqvTWboxAFU>Y<~z7y4tQwJJp+K}=6f(VcwpTyt%LbE!D}0daN5b7DExrt^ zIICKv^{p@1(}*RVFWcXTtMT41xmD|#$%>iSeW^!x>8N}6e`p`j9h=#Ip26tnm9Zjeu5Vb_|wqe|Y$oSUruW-(DK?NnJ^+x$9* z@7L_-ombuehW+GyjztK+T}0Z`Ib9$t;pP1L{p!)C{bB7+JA9v8R~D665$hC|cz&!d z?fjsvT21sGO1Zx*!)I5YE%Mq&`vLd1d${UT@_HwmCv1*24~@eJW7%5LV4bb zj9s&4E(xqV7UhS&Z)?rYyY5-dt&ELojRfyE@}b$TKhVE`!`y-3ig%E_7)b+4+} zjC&E`J#_L{@KDAE7TaC@uBG2-Fs8*a95Z6Ho~hWJ{&<(Sc)3D{(;86?NN)9steCFO znfOPvUFwwfmgVd-Kc@-r_vpHYX*-yZUe`kv(PSIFZuMQkj+Tj{Egh zoBcL^Eox*Bg#VH|>&cR+yqOuXs%))B=`_{sWb=n&DYF!vUC%FRSUJ5fwsT5~)^Ut+ zc(T#(N8!+Mn+r_sj3>;{-`vpLFR#Yo!a00U{8+604?;&xTZ;p_t>xZCw$|^|64kY1 z`qmQej(rDQeB8(Czef9aSl{U1ZE7ecTDYWt@nOx<^d4G=J!LAju!B*X8#H>fR{7u&c?p>hz;e zGlcf*pSpK9e!cX=X1n?EuTz=C;}6@6?i@YHjyn@28*bb9EG&LSlOd%mb1ZEcoM)h5 zVE#?zRA_m8h3cG`9%)mU9f!sThw2FE{3Goem2+e3M>gJp&~8tzOQ{|jaF{zKt7?^1 zAvKYB*~eW3t_n}&WdtXG8XdV3`EIf`B*^^ZzFE0h@vI9s?RqW+1xDQa`U=A=`Fgy9 z4~{=myFVQ1-yE%TEMrKC668Bz?=qA5;ppMRhxHWB)~=+^SRO0xtSo09t8wq_c=l~d zLWXIWl9=DBYLxsQk1`Y(di@$9abln9-Ss94J53N)$!GW5-8$P)u0J4CF?E|1mBAIk zFD2^O9BZK|7be<_XNIP>!-?&>FSk|KzUfa>5G2z1i8eKRLetgOsOow6Ea|hIn^p8Y zVY=l87S=(8Q>|wDCw7?k?OL^b$)RbJ17541hDA=nt-(;VfY!`8#~FWW(gg0^ z6U(~v?T*zgQy~Xh(n>DJdPPP4rql7rrz6)Q(syZEWST-u&-CNQB1uS8V+Z`KLlVL@HQOeKJ|;hDP@imi=*{>-^}nZJjP#8Gk}d-|70HYt3);9qi4UWmk@9=_eiecqd!I>FCKbPKQSAUUqdQ z#T|E<9F*oa8ZTEWKHPtxR{T10HOD>aM9YPgGNmjOg`$ptbG5gUg79oiVS=M{WHc-i|dtTl!nhvn`>-xNBIk zf)mLuHD8CH(~hOsKJgf1wBYJi)l}b2C6=w5sn)v}_Km1mtCA4PVb)2ka#MNpEpFZQ zIR4y*tMPSy89gZ@8U2X9YV~UpTOaqakGV`KceSvu_!`B>J)pQ0W>{Xe4$Tc5z1tS) zv*ig&OuycmZ~mq=k?-*A6(@dtICA($x3yg>Us#i`S2S`Z)6Q6;U00&wX*oAKL$vzV z+EK5!w;74q#r_}D#*ZhCo83*(zaa3k5@S!$6>btk)NOY>`8wPC+KW6aieB=~dcy1s zJ0+ti@{y8^-byvcJ(EeBlp@RWOx0+nVTAMVCz9>+d$eZ?J!_kB7g&aALsyDjo2z$! zA)WO=42tT|$kI-oz3<;i$ba{--QF2x_si*oJogQ)DF%LiH1)Bd_e9f&OWJ?v=pdXn z`?6V^X!v!St$xX0P*~;h?6$A^=ZDL}c-Nd>Oiq0y>zZ`BJ4T}1f;jCizlN4Hb05x}eLr2|mgLs$ z)8d8?ef92H#3_lEq?g$v6{{^?ysXNcc@e&`X9Z0$yY{WZj`}>0fbg{|5fh5lw-n1u zA4)e=$=vJ|tnrqgxGB78Rz4lC+f}XgZF$f~gR*11*ypry*Z9CvwXl4-hN^+=QFF=L zF9U{4FXfc9ex<*uP?-$vxKvkP>NH#!^B_CzQsnjbYeQL=PHnePiGDaBax*k;P1RWK zTzGr%$lL|=Tw(v*Dnf?|kG@pj+tCkEe(Mr;+U2Vt5Wg80GH91gE zK!!2@`2aKk7@+^nqePfMfB)f;VvC;!pnuk&{Q)@trUA0RisUncz`6+N@Pm&7(C%Qw z{In>E9?hnPF=>$~0fQG7^0&l!1^?Vj`QJ-lkRT!m=du`(MaW=eq$rKW;WOyaEn;CE zMHO(uAP2(PptrCOuYc zNdAX({L!`g_q+ewEH6m-GY^RWI;8(UdH4?t?ubsO8t3do~X@KIJ|4aqd9Qfb` zjBo*;VL*v`0r)wT03rtfE{pNT{DRqr@xkb03^2Pf379*N3o47FK(#30870RN4Apvuq49`HjS!xpc#@JpR4SZE7YI;H zh6@CxBDI=8#TqrDQc8duRUoBO1gIn;H6pD;v`U;%s{~0>|9qJSlc-S~Qwftq5&~Cw z15%iTOEn5as8SOeiP{@O6+(nih_LvfctkDu>eSEFFGl2|WE9sB`fk2Nq)>=Ol0+4i zfh)+>Hwevkfk2L7QhIm zAAk%PEIRBwkCJIeW%z1BG<-xHLm*p_-I~Lk27lO_-AZA?Y&HYbQEV;*8X?;N)Jism z30R&p1g9I(&6#jM8S4!lE}ci|wqw)imuOZ^aGhS;!sgP!kPe`;f%{1vjRC{!0LVh}wi!vFrn}CID7-hTF^tu0 zKAqw)w0BKI<6q#}Y(kn7Z0OAN-^7r*y1B#s2 z27ozkGlM}^0^3a=9R`6Y$tsMT3C8FUOMRQy=DbU`mC2&y2##7NBtW6zm<)LP^m+== z8z&OQ0eR z;6s!mKv)1mq*3DnG>P072_UYK3gol|NrVJmF)A>pmlPFYA{i?4T8_)qDPWYBN{-`d z6pQyjk`YYprTn@ry}&k8eeWnx@poG~zF)n*y*!-oM6?NE;&>FifbNVa2%_xO7G?4y zclLPG%}qKy6|3IaMTb1kjL9A0zw6tXRuR*Fd)fhEyyLtEH-``JHR*LN3Eh3N2iFh1 zk8@}8mRvtu6II!8c+-;!2~Ep+rCq*{&Mxl`;#+f^v~U>jsbg7f>VvxtU013eW|!S? zLOYM%f40Bpu$%f&$tl!vJ?^-4c169(WY#BL=f~=3VJSamL^@lnEKEf`W;Tv)T`=)l zkIU*_J%56vdb`Mg`EwevHn_;X z;^UO#>}l)O$9wL4KK9FEhqo-Q$@zx09Zr?I_8YTzHMo8dXq)`mYfmpIXTFZ`ud!$u zEuHbf=2S&grG4NrIqv6j4;fplYkf8QX!G;h0RP*P?>p zA27IQ#NsWj?VowYzt>b4@@{Bt+RBI8aPDyScIReI!^XC&f3{w=N~_SAm*7pFm+efa z;RSK)Ha$u`VRm{na?H3rkjc8hXHsRinkI4`U6K?fwWlr!>Y5{Nbo`*pD*plp%lw{$ ztPH~?DzKG0$?t1q2flAXC)VX{opl!Twl36Ww#|yv#WF4;6Bv_1b4<&_bE?p5eILr# z4cy)Ja?VS7?Js^rQ6+jNuXCGg{e~}N!>{&8KXos>lbbj2YQ=^1JNWKDT}?axU~^mM zHbRE|=S0DgU5-J0T+aUUL3V|-OxrbCO4R{0T5J`UGjmn8>*wm>*3zb)z7|8jxprsf zt5&gB;#AwnWA20jZjIF?ThUoCEP4#+4!$r~sZwQx4)HV#d>$)C=Xb4CunEwkb9 zng*8i7dG(ESj~|}trB-H_H^1jy54Q;q}r1sw7@mVhI?+pkJo6qu4ha0y`PSzIvN>Q zo)+ZJclIwat6fm)9au&aPcrNObxUfW^M`${{QXfr?f2ga9GH#mIgvY%1yeCJ$2@lWT<-Fk}_Q(kg2WSUT~3H7=HY0Rw3imBH$ zKSzf2W*fbA8D8|{)0^rUt-}*jyDVEY=PmlXj2`8FF*(>>-h1ZK!V<}to!xcB#d1)N zx8()26op@uI2FGMzQ{dY-Za&G#=ex}+0NGVW7a0aZj&nqce^k0-=v!F87p+LUwSN@ zHn)t$uWP&g?9PgZJ68EVS=aXFklE#`VcN3k2Oqya=qumG`4bu*q`EH2uD3~P{;l~1 zeWBt;P~Uszk1r<{*v^|EnUl2}i?^|yn^OE)cYRfKujYK9ncK6Wz`L<>opGckr^>W= zOU>nf?d*8gcdPcy>_60Z>`zSDfOE&>jk=~=P^-7u=Yhn3(|UF^Ha_25k+{WY`Qp{T z2jMGAUe*<_eAjT`_5F3d+m4jj=H;ChZmnSDZ5+H6b6qI)s~P?D)^?x(yY*t~Z!7MO zY>sQc5k{GkG{Oni>NbwJ_twNsi@0X81gpxZ;l*!A_N^Kzh+VNM%ZVE#GHy)st$pQa zudDAGGcDfT@xlwiX&XRpbF`s}poz)=e@rVxe?1XM1p#K4#-h_() literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Digester.Gzip.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Digester.Gzip.beam new file mode 100644 index 0000000000000000000000000000000000000000..eb0b73a42acb0b6e9ebc7dc2a5c1030cfd874ce8 GIT binary patch literal 2812 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 G82bz6TFUzX literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Cowboy2Adapter.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Cowboy2Adapter.beam new file mode 100644 index 0000000000000000000000000000000000000000..e4287b972eb539e08a60d44f2ff0d195138d9b39 GIT binary patch literal 11908 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Supervisor.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Supervisor.beam new file mode 100644 index 0000000000000000000000000000000000000000..54931f0c1d75400453bc44ca5a174f6f011e6c16 GIT binary patch literal 33392 zcmbrm2Ut_j(l|^=kV7CEnt+NNii*_GivpoHl`bM81QH;WBqX6JAfh04KoDaA>>zd& zJ0jS7?*)4W5qtk;PZH&K?|q;Dd*6@enPkuG?(FQeo!#ugFC^SXL7^no%hz+fr#Q-4 zL4oS{`}c1v%*Z!`o5vMeg{Ja3JZ_$qFOMzYb9rK`h-?8zn8OwEg~jplTwXFiKE8n^ z77MwF*q(4Nn(jP?CqR90beK<#b>e|Dw4B#Nn$RaCrZd0vlYI8_Yw1Smf|>7}>&%UJfC$cwjzW zz!Hftx_~7Fw&F8cg7{=ECxeaiMNDzNfWyoNk%s1Sd3Lr5Fenr*%1B4#i^QBvMp7ob zA~Bnr!Hx&I2}yijGB+hORV)^WnCO#<1S;?1nUus4i5S30f+#7KlgVMG@fG-xrgLVV}@ocVeyNs|OSeSs5 z#}$c19+;L4=_yRfM)ZA=0xLLqNgM&vP?xM)X2|VnB0euZgPSOXDTE3+EViM5%}D|a zGQ{+Og`{+_FK!B#hs-QVButJckQ}yQd;eNFC%(Mw%mg8aot?x9%|QHs)#q@8BF;sr z(x5jOG6&QCCl^-Ugi3q=Gy+wFsmQf3Ug{7~3s%PDu`)TuY)&#OJ3}mD=5RT=7oja1 ztdp=+5vIk-6o~VY_(41I+~jy6pD*r0RuC`d$4j-9AR;V_$>njyp_v?E3I`Oz&qTIc zA>%DDgo&)7LG;JNaejJ2k}zK&=40wWoe$K7EFL>PF&|uAE&?x>h*QkrArU&-Ule2~ zin0^qL9ZZ&1nJXu;Fbs;@mw};ZZ6kIFeg8kFJv>>LcZW4m>4)K(jQ0@Sr7||nR_Hi zzl%{M%3w{)@0C7-0m2Da%(L2`XUC$OJh~;|MY#VzN>=y;7oo#DR0!p~UPlby*Fpbs}(UFiTA5 zKPcY{Lfm#yl8`G9$0Il0E}Jh>6vz>+XUKZ~^!?Y>wD&Llcrb%Zh9FyfQ8u)c6gKQX zMn=#yxF9ekt(6DNcu_i65T7IBF*y)VF%uvKfs7abcQuZe2@w1~UYsq+;D{2Exfw7v zlf}#TV5Y$ukI{2kV(=%3e=-v)mLWu4$$ViFCtm)@fR$}~zXci_V)?IKt?ev9J(dhh z%s?i;f0cn%v~)Dg3OfJ4*|oMO2-;dEz@h+w<-hA@WBK2;2flR>TVQ&!#mU;17#|2} zfX_%X1NpiYA1d{O|J;RPDPI`Jvjmu)<-hpiA4x$lm4?gzv5k$TfN(^xN_9(F7_hdH z30ms^5ZI+eMA#_H{wvqNt!uIg0e8}7Xwk#8EV(?0035cZJjnz4*wB9yg}fERQb7TQ zWd(&{#}pJ4=m6-i72qR)HHj`!P}DG@lkhR*8XZi-w$!UMJUfvij4H{lDqZ8d(}Bcb zc91nmOr{2WhBEyX;46XYPlqo7QxQIknPg3S%+bwQwDrI$RUl1Kr_dNrEyifHB-?IwWi`U^JOph?tf@0k9-YMK*9__A~^AE*g-QSVK|d&fo5+aX;;P@ zpwg&cr6E%#6h=2fLiZP#xY0(EFc``LX_e@6QQBt&(Z{5NWtbo^5k%Kw zz>j27tu>kUWJ#B_&nTjgX$Q@egpC5WNth{<${GvL2aaV z3QWkBn2=2e&4z^8$SvL0g=PoFYDdO_3pbiQ3A1ycIgycTg54lNF{!>lWw3xwXVBM? zb#O9;gxMp@M%LOyM%F=*U^>d+mmp6GrmIZH)L}SBVmOBmnga=Q0J)dr3KC3DE+;aY z9g-8~pkhP_>W^TeRc1-BAwWd~JY9i=IZCjh$_kiflNLxB1AZo;u#iOub9VxwO#fcs zZ`j}V&Js)?WD)}PE^2flDo{hg9)^QG(480xbh-jgr#CAY>(I$e@G%OxoDQrRC^Il^ zjE)V4AzdXH4kV%=&Wur`GeCY4%n<5znkX=q5!j9dx@pis17jtaF*J>arf&Vi9@8JA z!=NT07hQTUAvx+~vM*VY3_@g@Xi?BNPMt`gP`Ja~CD;g{6bpQNAil{EKw-3zFdC1J zX-Y{zH7Y!pzP3KrsNPV<7!+D!ij zh~AhNfVTuQh1z(i^{J=%l5uK+ngShZ7UZd?1nvaV@P&qc5^OXyWI;oJ7n&cKj31ey zRty#w3c<$S2Mj_C-Pm4aJd(-QWQu`vGYU@gU`8Sfi3BkWVTz5JWK`QkHkM%KAkU#F zM6sc%1+hlZq6nJ_qH59tNLT=q%F<*S8bbr=8WAY1?Vtsbut1`lC72VFY)_14MU+iY zYlPGy8dyVFf-wl!1e0@=np`2cBDki#+!b$+jwO84M2`4iNOespR@9O`2RNwQr@9vZ zb>37>m0@5y5NToV63hl>Hw*<z05%fD88tG^P4+cnvJ`grDz+#=iO(5Wc2ahM@J+6Z`j)aY4QZtbv zVf}#k*ubPthK>zxvI@YehSihGOS+&-FgHS6p|C(k5+g-` zRfdtUFeX(*EJK)wl#g&}Z3iuagoR5mCWI;@5*C3b34TB|w@rJTU^gasI!TQI zSrROjM1snsY8peNWl{@Zgb5IpknP71TAkcMn@qxDWJw+}M5v1GS2Y=}qbPXC5*Anp z!-hyL(3~~}ERdQat)7AsT@;omD`{~ib+ou>lRufI3Cb*qyb_Y4sU$3p$Sb8O6v`_h z_nGQIi#GuhZnOjv7B5S$z=KDSumrhr%VI)(7Gc{Ic_@qU>=zP-%1s<&_A*EqOM-=h zNQxn-C)U%F{yq99f~=DqXvo&WCeSg+@7R_!7Fs+w5-c3LmVh*q)tK^}6Pz6hG7|(D zfuaNvMp6iQrFPI#Nm$AsM}-yPB3PdVEtN>5P$-aKQG|@_VS*BDqEuc`M!`mcMFT-V zNw7%yjLoD`aD$5OKf-xxo5~tu&T<))C#WnV;zo^*A}4%&1QmJjoW{T7x2 z($IstY5nS^{qeO_xe-kVBa&@8Fs@wikc&$re&c8rGr8mmRWwGZ7{UMse=UHnCBagO zh(8@^8M$sb{eS%YaeQ?rtV%Y5;>ai-eWPkig0;8nc2y z1TSMPrltujktpPmHI0eHZ?dMZrXqxJv@e%nnLyVZVop76Hp)SmCYnHzSciF_en_H$ z4(I{1K+6F1L3YoFHDi)=XD-16@Sq{VvS3ZK^rFx;iH!-Gb|o1Vjd7h~>S(PsCRAU0 zY89;LkWAZ`Gw2{%97qXacq@6HJe%;6QVAx4+10>A%FJnVk*)O)#SXMN$UfX?Ql^;vdpBw%7iw4z=9#lP#|V6lx7tA0eZ0nlze2;3AUwN(q(+Bx}Jqsy5JSHF4vO#+r;)+EQa30d-k1ohnf* z#;i9Q+W~Hgu}%enTh3H0rhA*ymPC6qRIG^#26dT2aig*3dSfyJPHr+t*pfzLJAw{T z1$!RE714si09hKLZIT4b2V=1YZ>%A_vATm+O~R_-Km!FsN(T`VS4p=WHPD{eR!x(8 zqdW{Y&QvjxD-Y%@+vF`J#?oXs&?=)fnV<+MTea}4`R8ew1e*@iuLFrnq`O@(TaaA= zXn9kr7HuWLWFb7EBc@Nrhy}AnbS5z zlS8R`kR>&Y(W0$_&bqV)YCWxigspO+)oZ!Z>a=h#Ed@;rT7xDPPIBs80s9vN?dqZ9 zYUsEcI<7$-VFfgHqpcxftHJR|*czG3F{yeW%o*Swu(i}8qM06K0I(jy!NPh7WzrlJ zq+j+EHlr1ie>;ERTpf6)-WTOx>Cc@f!;#dtGZf(dg zhR=->tQcgu0c6=oPoT>-rVNlS;o4+$Ah(fPM{Ok2aiSLbG)b_T(5DIdY*G`z-Y!nU9- z0UKJ*2JH+-8xq(Hz=@9pD+M=(zT1etTRUi5N!V5=R_L7cD+a>EgqL15pz)tUhQVUkt1` zGDz4yH3c|K!A1e9;;&=wmtd8^;BF=fJD}FU+^i#z>YUBA6EihuGs)FVJE`=lq_R3h zFmbShc94V}gte4}9qP9dhDujLComZawgiT82Gt%Wy0mrB+DKR%%BUN_*be{crO=#! zQX4p`LH1D%lh=lhga6din*~tc#73t%60AmEk4#X$tzJramybEEU6z!i5!#8JSuF%8 zWNx#i3Azch8U|TLAhqO33ei#mqmDqs_+zFp&~gZdE={QQ3TWL#^luWw<4U3(v6V&b zR-twhY^ls&u_Een1-c@ML`4kh3WLY~zIILxHF zHWVweWtsj-&m&aV_F~0q`SW;{rBv6hV#V3=tpFl`(Tf$uG6X>Z(;seO0P{pKl_||dQ1-VUW?V0|grkI7J3DBd zB&?IENO7YbBVk7&$dRyP7PJ#uR50KJ(!*k0%S3`TNV}aNx*hMJ9VcPO<;mEIKiXDk zhC@~bBGRu0%XI}dPD-#fz)>!pgq`|FEUS>mvIOcz4G3jaBWf~XBx@(&*ccLa8vO=B zJ)}Uw&Y&MM=-5~ic2S44Ix(F5r746`_mt1Jq z;b81KI{2p>*VC>WqvN#x5`t4QSo<%7B(9LK%P zpEq4-cYx13WL%mGp*#{e(*mx6yIZg--X>wU`V9<=5DB|YtmyD#4(w{AOlbUr2?kh~ zlm%b1mh@+oJJO-=O0X&zx)Wq~&xLj$hQ3dTh+K~f)C3f%fW!MJPQmvB2uaZVXebHm za-lth<`0RVQoys;?@)puCO|Hh`bHBb95xJ_j9F!_h{WT-V3R8VbPM6Ug*|z$qZ` z)P?o}czXfIprN5C6ZeL*EFX{|$PuTYof0}#*$7LD3tb@HE}r)BB~#Gx7$o7+eGrqP zW$z=w8Yzt35C@;@B*4#9&!~fG&pK$&NZ2z7(!??Ub7BpaJ-m=g^`(@RGa%Jhs!EuL zAsGqpHSGR?!E<2JZ&cHQ;c}ypU|Ye;W!c_a^mA5+%s_jk^La=3-6fb#pBwER341R!gUf*U;6{5-h952A zDng`!g0esSfbWXOqU$uSxRsSv94@`JlPx4}fZ=d8Bb$Tc@XI)kb49r9u0|5NK85r6 zVmz74W8=~v^Ktp_^l*Ixx5C4-dALy~HxC!2=2@}1De!~75zb16ALDW2@)z9Z!Sngq zLV0iap`IhcVH_bRlb^%E#i<_| zY;B7t!KJQ5R#LhJo}0=|N<|am@pGXa+-pigxB0B_$W%be+sS6kPv@|q2ZtveME={e zw3aL861OhcI7@`Xl{hiZPnOL~cGC#1Y2jiahhv2Y!ZjeclVySGap@g2oWq5Q3SFsG z8!LP~nm6!>v-9D;1vlwm<|*dO5Z1zM9=f$+#mN)lroenM+?C?6M_b{3AU{qXD-*6h z07)GFjQ>L)qJo==ZuH>Z#9b|ETW+$fF}gTqIvRI#!(9bJJ{xEAi7vRT8n=)=;yAjn z2lnF%f)+bk;E1Fv9zop3vP$N_MGHjA(9|e2Bs|h+bR5wS1W2XYTH&E^jgV0DKTQq^ zN5~Op!zDg8PUseyLV{F>34fIX@@BEwAb&oOm4Wk#`*0$uo``EM$iPs~zxt9XP<{pM zuVVU(4WDj-i};xwxJW4$vfz#+aih}}RG7^vr1IoCkUK~+A1>q&{=t`C=fiQhV1-NX zjo=^`bWuij^Ghbazg?wH_1FH0uBk9F7>1La47U}JQX4}y z__waWjWZ`T4wV^tYi)jS1E-oU`U7*DweW_h!MxkOxih zAdXn%DtAmdcOXx6!3=r8bXVz}C<|aQCq9QIEX1WZqyEJ7f7s7IXGzH7Z@qLi5Xl58 zRT>W7|0f#A3UO2_5z53wFeL(voHMu(C-V+|-EAlS6$LCoR_pW7YB2o?n z2)I0q!l*)ErU2GcG6j}aCIAg!Ab=tOx-X;-KmtH`t$t-~D5K>V;dT0z^`MN}4+GGb z;SJy$2S79p0gM39-$;N_00?ghU?nTtz_+ceYzN==va%z5JN3iEy?A0QgdYol=77fa z13)zW0RjLJKY;*2vT`tdj{`t|sLgl))Fuod9DqnO;2Y#Z;3vX&lng%!zGDCoeZ)VS zBkGIVBmy8jDklLTI&1(A0K&^@p=W`pBw*#QQNN%W%+8};*0U$go zxArUVfij|r@O%5=56a4j|6Exa$pP6jYLDn22SD^s0?6$RwK)r*=$nUpL7^N#72ps6 z>UU07hA)LP0Ejlip8}|pl_l_93xN2o0+7pZmaL5MGXW57R2BlT01zEygL3;C17%c? z@QQxfJjBlj04l%*0K|I_0Qw`5R{EeZ5r63K4FKw=Aj2bG(eo<+L{pAOd@BJw1wi!3 zvi3)1_%8THzC@AXJE4r|+yg-UqSg(#EZ{SkPe5)Tyg4huXDB%ZK5c8aA8BdbTN zFx1Pa5^FL%4kDVXWWe?747B$F)Bpkn1qB*WQjVSK8s|C%4JDq18jy1-Xk(GCV1!a5 z+2vSkd3I?n&!hN4$dPg>=zeJ;sAhRCIWw7+O3wXXymOSR^5?Y}7E=5$Vq8+LYQF?5 zS6MbP)DIx)p`hSQux#u4ANNatRx%bYy|a&YSuAN90DaYnz5}EyKRnwK=7E%~%t}J< znTU|NkdVG8sp8CxG^iPn!GbhhoU25vh@enX1<{K}^palt&mH+c-HG<*=O*&=Z9S#! zpv!-LK_-_BZ%aX~TK{D_mx2;;zydE~fs6roR3cRS_j!=?1q+mwp&V8uC#Ka8FMDxF zNKBBDt1iFroWafE#G_YHa+M*&5W_|wcL0ZY{VA6Ww2%M>i8x8HNr{K7Gd>aC5s{Ne zeu3;Bw$*YJ8Olh4NTL*EY)F!SO%GvFl83M)Yef5hy7vBea+v&%I%+-;GLe4Q*8l26 zL3b8ZtFbwW*(tKOX=If!lpd-BfA9Ay%HK+5!X!x6&@SWuX!|Vp|HklTQHJ1)ur^>$ z8QvdZLkjzk2@#e5CVdo9{?Cj~{J$}Z69$i>CI(wPI6X+o&sBxQG9J_cZzXULPx=2x z;i15B{l8&r;6GpJA)-g_|8a0u_J1?-Albf(SV`ceA7W@(cqLv|n+SdcqR=2rN-f-X zoUdnuZ~O$$@xFllKl9l3U-2kix&FNI!6L)ZQvH$t#M4|%9?GR_9@3vIG)i}B@Jy5H zoN(1Cs6p2MQN~EYDgVtB{w$s_sP-SrgILJTlt#pU>`LFBA=pKnDoYRFL{Ri0l;Hkn z?@KHff6wh;m&4^HWn{BC_$VonQN*rjl#IeCw8=(v)CoGO7PLP*KR_=2{~-(i|3()7 zs~3M*ka>;cCqeE*+6By+09*z@dD8~~lvANH%8UBvgXiEG{k;L`pZE38_4?;oN1+|c zxw-&40p$5z2b9qgj&izoSs9JlKX=;)&&U!{+uZ=bvBCj>9RR2=!ZiUPnwtPN$jXiI zy;N3S2;VgTh)x**dPe0!fcdgAN?uUDjOd_TC{9*Jc~hyZjN)nu02((LpcnwPPXs6c zKzOwOi3dP7Nrg|C+kJ5gznlUzUR-mw*UKt)Dzo<_TsPQkE!CQL8<3q7EmM0Ng--)qd>kh@XY z?%vv$b(t2NRoRaEIg_j}J04k^QO}uMWi`yuWkT!ImI)OZE>+H>AA6` zXk!#D`BBL0;9sqocb?5!{_=a_bWT_7)Hww<*Edn@%qO0ivge+s$Ia}~>!#*qUTpdH zy7l>|J4e_zG6%X&6gdCtzP2>o<i7fu!ufeIJjd*IoNOctz{W zWzC;nJxcG{WU#C-{ZjhAt^6_RDVwv;ywjN;#+^UD`T2SS*H1y;_Gm}9yjXwDV$z#4)-~`X@4@&f179mVNl~tKp$?)QKKS%d<^<^{`2W z)3ev=ze$_i+?tgCaq~~j=HwGCCEX9LTlohjn2uQMFyYBAJH}7H`C1oKZ>>sxAUvDK zm|!}+dYu<`e9SuM_t8(bohrMdC)OA3*H_6uSiUZ3f7-zbCi;bql!)2Ei?8x|-eJnO zSxZbeJ#=jzmZs+GRREVN%GD?1BD>iY6PNSC6P}*^ z`sB{u*^OIY1c$RO?i^NKa{B4u6G09qPDgg?JF}Nncxd|_{92l0w(ZQs2RmGu-=_RL zVqz1tp=I#6{e|<@cC{7__bz-IF#fS(LQe_sF=5%HhQ&r9W{e+HC#xws$>DhxHho zyqazseRxCT(4fwrZFABpslli44pZ8*?qMu=JoW5P@b{J#E4Ma<~~Wi zzH|1cl&SBoj7$;ToT2nMXZqbA-8MZ{b}t58+j=W~zD>*IGvxBS601RG&5QPyOurqd znxt~_WH@)6!`V8I7jx`>IX~g}9Zs5fiE6O8HnMt$b>Y5>9bKfb@rU*1X098z@pnh* zJN2F0b6;(ZxN!YRHox=z7T!JK_1C`|ZtNH<8Wv-*jn1u4*WOZ_wJGa%;*Gc0&P@$D zn3lXFC45U$Vsp2Rde6HOr9Bn5HtwYICl5_bsXrEXak4PtLw<4Fm=SkruBAfWws+)= zpvZCiDbM}ggQs~oei;?rJ@C@LR;{naM^8;ibvk@CCA~0pNztN)u?|Wz+mnV+6|*)b zDuwlGdZku2E0j~Or>cxvK9bY$h@oKh#NB&Q+-~8Qmw6vDmwp`-yELWAc&4dN$5o$O z<5Yh1_Pw4Pd+v+wo74iY7s*}K$Lfx+bALax@qDwSrSkTqnO+O4>RIEWM|_Mb)hKdo zZG5ugByDurK@C;Yo$oROoz8ELS#)jV74EqCd6$mi6HjThT;$FFyfu||p|$LGTgS$? zDfu2_Jqj1EIDg#k#}itXsOf(Cm?7Jj-J7=LR*M-xQ1F)7n&YqC4_$S(E()L~Bss(7 z%TdN{N1gG>u~pC6wr7^cAEO?(SY%9Pdz~JZ?KwB;iI0xX((i*`*3plx0B#$#2}_b2nZm;IzQ{0<9F_57Zha_!aUxy8{L9*-J&K5iax z_`}1}@YTES%yy?u|)b&GnQQk}Df&A_i->yDGE>VDlUZQjsWv9VNLWv}qdx(&>j z6|=Vuh_5*FLFxF(wl`b1#QaQXoBDZjPs5eXxp#NxHESFjf9Yr9 z`l_(g%soD`@yi{PwE8&#-6!Yo(~Ee;W?t5d8#PN=bzx4_>^o7dYgaCXU@5 zek8-gt@iZOq_?GavZCs@U7MP9!?KgFKBm6Du&H_YjNQ6#sj%*i?G!Kfd+;jz?10jk zM@{<%PZ;=>bMsNv4p+gDOCNYSt_Ei!-^F}vQmje~(H=Xga8vQkkh_s2iS;rwyy;Wq zky+O^%)8L){x0H}!^fsax3|Oh!Y0MO_bPQ}Tbo0)Z^W)V6}{XH?|GB#G?B&nefZft ziFoV9H{{a+A5*nhiEo! zeh+xFTT&R>dp6L1mm1C&tvlY+;O{qLb;dGn&x}X8#mtRK4v&&FZ8oJbR+WdkD;Lgr zYj-h-<#vke**I*8zLD*Pjmy=4j@WZ{`^r*wO5IYsYrAe>x7TW>{umWqRk3zH95l_J zKWX#4B~uTa@C%%*&Dwav)b_Uv|m)$Y2_W(fi;7|rye=pRPpWUx~7^*N*LR*XKAn9oL{r< zM%JdzUM^DF!F@JhO0MC{rb)T!J9^p@KkbaAd0pkYtyNe(=!`XET)7~GJ#X!+x6ChJ zf5e#_wf=4Rs`kRwYsZa!QWkw3_bU6O66Mky+iS;0?KiN|yhqVn-SuL{>Y?UlaOSdp z{b9$3wKES+|S8Rri5$meqFiRZf9zv+;s zrEK!w?Ri*}Z*($>)S+q>S!i=&#lBz+wpEmdE%7F zc@~F)y_)x#%{*psS=)eOV5(tY;y!HtwxufG*@l;+W6IesBk0PtkAtopDGWxKxbogY z6HDdXSN?aNttmaZ^odLGhX&rfhTHC=7Z;~Qwxni8`7NPD??1iGe^|xq#~a*F8~ORS z-aRz4_iWp_&1!EZ*mK(ME}S3YRm!I^P$nJEcyhoTb=? z%*=kUMfKAT!!*ZLuitSK8|=q7-hEcOdpKvpsj_|g3#vC>aib5n78=iOo?u0;ImN;4 zCNHt@SZ@5*03ogcqJGLvp}^Y>t)*6IEfuOPt}CCDk>hnP;);FDw3R!ZErL2DCc9Og zO4Q#o&+Q67YeA+C$*y_tjaQ$3Ed0{2m$&Wu_pPsk%`JB>e7*jb-=x<~8X3mnb&E1* z_j*GzB#hp@@U>ZMR-EIr~9=o-fqRPy>Rb##HIJcVa zocp@eamPf*6vY*jirh3-=oVM*Gw-hLp1PL*`N#gG9Lq(AW7OLcS}0Y+6EecJiZsXN z9a^;T4WuP*FIzX4JS}4yt19Wmj{9C8d3WK3G9TO9bW7W+Zt|izF6sxFJ{2FHPV)I) ziLEb9kB(1VTRmHeb7V_ZDUFh9oq;>Y-h9DxJQ9BSJ#`xyl)6-A< ztabLqwpz!vos;V=SbqMehpxGhFnUy(_GRx zMXl$2HNP)?5|f!Y*IdqUVKz6 z+VFVO&$y`}m+4pa->GoFEvMwTr~T5c#`DH28mm)Y@Vz~AN3C2xDMvx_dq73VhM<@o zD~_lU|8%LVc4|0t54v7&nwsH# zZT|RMQRd2@F>o;>>zv@e&D9SUgfUFqwZ|9KA9g&luy$nVSBotbkMd@A{d^e^HS8I^ z0J~k(m;In`2-%!#HduY{@%O8O%09bqGI|jiw)C9CSNf!+r4KjdM`=vaa-5hvvBm*k z(76{zU4vq*-eTL-AvcLW&4xLw0v(I zoMRPkX*cYK(+g*(0dB@aUX;DeU-~vsbl~Zk>ifTEtqW^=(b?>58 zfx`+lM(K^qw!C0>qauJ`9%5DhQg8kR1)Yk;0zdw~E$dfgb>6$V_F6FS&6bzbpFNwT zzK5FIR}#49?a}mrtux05H>nx~z0Gv90#mQa4bHqNfgEiwS>Yj38! z9Qr2Uy6R=8otI)`s(oJ$y<0J?^A^*qi}ij&Ku6!Z-M^PLHeL~g6y-kH<<`s_^V%o$ zoOo5;w zIprT4->SyBsufcRqY&Aw^gmWU!AUSNs`{s?m!tie5E*!Oxn1NWRo;KtKGpmdiX}uXskeO+*`9> zcO|T!F4(w1)@z*hKR!l&sgb^g|9xmjY|3v^wc&*BBN4~G<5|{y<@J5oey_gC8>aZ< zJqjO|L}sW^JodW8mS|~j7+^@t%Xs-lZ|=U6#_OLw+IVpJyf^Pc=G-HFd0ElnVca@! z^}MH6Kh}h_U(xs-8h9wr?B&OiZs&D?g9&bPPK>xp~bdVXs1#EvL}5 z=J9;5T2pNszfBoGzBY#5DjK_a=TGM-$C`n~!>*k^|9C{jvnO`1>qJ|dMu(qPN{Lv1 zl6;r4Uc+rba9&9kwQR1R_vt$n|KJg#>Ji%_hrXhJuecsM=VVJ(ec5fgM0EAW*W4A1 zAbN93HEwGY6zHXu-TXmw>eo5?{sCd76GtzuoV>nX5Iz__)zWK<)^KWYf3N0s$@GM< z>1DQ<$Endh&*m6}-yi90_L!;`Uf0K%b<=oqr?^o#^1hJcg|_oJg+0OZd(1ezv?{i)S4MzKC%}v z&NGI-3Cak~8B7tcx3ub-{q1GAs*2$(U$?buJ?LLHZ~Dc&7<~F0IV@V(ob9E4!XYiP zz&I|~q|}ELJ+A$x)|#*}Oq*M(ufKF2)igCLWKu7w2Gmj%FKis+JapzA{s7Im<_p7D zJ}b`6^3&ZItOY-zrag>FTzPSF_&F8*xS8#9qOz4r>Sj+|%Z$Z)jM~p#IZ3fw8M=3c z1FO;O@Sv#nhv!$`jL5XQIG}vLlSnx^`Wvq+=I8!9EqyV2&&G8!ls%`{NM@PRGus!< za@*ITxhVO-(wDSvgR>334qxtbsms&B$~h-we$?yUt7Fb51ZxglJ9!}M%~XBLo@3ju zeDNI%|9Eh6z-_mCy9-*l-+m;Y)S6elTkmrBqNHTAhZ#|0x!q64SbrP(b~Qs#PH=IThDHC^}BPnk6L2&*Ay1bFkZHk7qf8Yg`7V3 z2?wvGejC>@YG7A$jla!=`fhwePrm6C1OW*ST8 z8or>YbtKlGw?90<)OgPfMbUS|TZbe;I~}#E&aLZUC7KB%V<_L*SG}uP%2^^M_cxSz zw@1YeE3h2(^5oX1wwET*hJBy^QTy5U(Q~GUJ|cVV_un~soTmu49XM2_^~USU_JcRm zkDE`^8gISaIN$1C1j~4?`pysR>6=)e3KExVzOPuJ?GW;2+Zye*b+=>8#_@ z=3`-Vbn}8;BNQJzdtEF(V5%|N-(gAG??Tp(kbB*C(p$ZMMf3B1UNbd4nKoRbw!-~a zSZZ?##xOc5@z0Pok6~ME@kW`+PG5%ziE+!$287q@hqj6#?MQ?ExElRv6-Az zwuw~MpozawxyA`7sJ!&_bW=pP*Q=wRA(?a6#Le`b`6S=BP?dFo{8>5uj?>p)=We&= zZH)`q(m;FgWVhkM_VK3|^K-PTKa6~P^U{OM&pE~+C2Bc4Cs$9`_>t`VJh0a!sS0#Xv!|J*sn)O6ecoq!R}GJHd{6uKd8M_@($wT(ccYJulz1p^*FS3# zarS}1ySTEuo<|)=vrK%J8Ya!#tUImk*x`j!d}lU&47;Cy;m9ou>-~3nCb5FPDP#ps ziM=d75?W@cG$#AW$B3y@k9-n*nXMc(HFiqKb!(-^iX}Z)bam*tx_(cDY2WOa`D3?j zC`evXG3`Bfys+kc=EUfVj%qd~D}sC9@4?&Ml7|bA^(^;DVjolL8L4GyKSVtCMA?Qh zpJL4n4+Q?~%e%J#PCdUg-UxFHAH4R!wMo7!l`Y-c4xjbR`du;0D4)wM8Au(pe9%J% z(_~E8Cbp8^#GtL~7P>Ern(1h>Lb+#G(EjuErPU9{!H*Ihg~^u!sXoV_e|fl~INJJ9 z!OM>H+E>w52Ze#BHs2dA5D!3oS`Iv|;ynb#tc8MAdDZ zTfTKp(ZW59A4?9;%KSCua-m0xU)kyI*IGVNY;5@F&og=^Z z70vkBdbu>c^2h8wTat>OY|7p@WsjEE$+Pi-2@gWUwgkAadT)B`h_;Qf_E&W@W*q9h z?hrG4oA}WgJQKs$soU$)F{OIL8^+4b5yupesPOp!yC`dB3-8WgI*)j3` zuLbvlomP#MWZ!cPDqG|+>0wr@^PT1uZFe$tJg?S`y+G38JXfmdVG{ES%OBVM_K z=G$$tzj*1|Hl45)i@J9#!3JI8ygqW)-q_-&3xD(8NxQk5Nc!)yKQ(G3+NCsEZEa_+xtsh-lxE%32R1=JoMqk)2S9TQEo;4 z#=vI{y|1>6IygPrGBR2{%0cD5dai=%q2LV$)p=BUOZ3lp6?0W5=kmL^!!wRVd|FaI z^4Y+%=983`tQ<%+UuMdiV`}h?azl+1w)pwkER!@*><2+WUdp%qnMymR;k90+u6^69 z79~WkF<*Dbr+vCQ?Ud3vYn#?_;@t&-Z_L^gKWtlS%^4rDPpO46q_%X`plsCvqvz#x zhkpxNrx#~D$c-Dmz%%LTsoLRR4H5jreqEgR*#Z1>%*(Y;J4sbjFU8#K zO7J~Y(*Anq^k;d%A^QOolE@fBB&uN$hMAxC;0}Cu@Yb2M*nNuX^Y#dp zePj1M6>iy8qxv9Z0gp3|wtL&jTFq(9+!?JLy)%`hjn?r)Taz;OlHVQAY#a9OxMjhe zH>6X?!+z21X}8f$yQVYYnSk!-?Vpv9e!o*VnSg11dYY zU)E_pau0Yi=#%|I_KBKb-JdPfSAQxAHn81zr{x}Pe`O1HQfG7Q!}-sWTl5AWe3j$M zWA2^0^_p7W+u*rXZLX8@Gq($;U5WcSf|(n7`C7#yw~pFehsDDp#B{vxrs=oupWCK1 z$7RjBa-8~Z|Ks}VN#;3Cyz-LuV;pC@L=&I9@C60_#i-)ZEhE?8HCw6h@O70_ zS!`{i`IDjhc3&Q;tucCBn4zI?`ND6JS-`2PGT;mTCk@!QO{EWIB(+49hl z?A3cIY!%xMzo6(~P^!h#hLWD`=IfpI)`a(ccQ2Eq7DYsUJ**u0OX230pwG>Bi@pe^ zFZ*`vm1-`({w!@(qgT=Ar5o4KmM!RUzjDR#Ow6`zD++dfa10wgXJ$>Zq-Np;{yl17 ze1b)l{p>|bhnKCok>=EM&ElG2^a)#|p#7{sAAFmFqObD(j^)GIe$^JoOcoC<>9q5m z<5KZuZ0EhLVHN<>xBrph9XdBw^Dk33R5_+yRo z__q_o=6A9?nNBCUq~EkkbL+yopvNJ|D8d<-zZ94!^%{i<+{1 z*nzaCUHgurGp8TVVc+zo>R7-l&8L1Tk-DcA{z~6$YM(k!KWTAtavWdaPAllBr1_p7 zn>O#qVvm{LJ3crrPB2}1LG*Cu<&guZzkKe@>8txGDDNCmZvL@O!PNQ3)S|Yd;pW4x z&!+z@`cc}anyHu-6rcJ%^y}s(i%(IVJapP?l3cSlHlCsh@)fk6Yp&G>ePB zJhbw@YT(-|w^kfKGUP&|SMMd;3x+0%!=1))+b>tx7WtfOP2KqQXJ{LJw#CZe?$7i` ziy!1-4_sNify10U^P_o9smGUhDtt0((S0&VXLPp9jr*)a zfsPd>UBA}c*;SH%X7x+kxof$OTSmU07eCOw{`TFHp0bAT!UMaOEl?P^|J}PF%h(;- z7yZX1mD(m41l-vTNB!dSn>0Q57d}V}G7(tlj~=3tXX|oo(DOEG(Zy`%Z5oajZ$9h)8vh`PdEv^nr)n2|yGLet~3PIfJu zt6K2V?uhfkSsC*U@q3e4_WY;Rsoh9x%u;Rc7Kc&k%DxdV> z`oo(NLhu&}l4gUM_9u9{>@=gp)62LQ!w%$KPhGZZ;KEa`nH0+dm)5ZI?G*;iex_HS zS!u258k8{Rb z7`3g*9Nf9{WyR#J*Om@m5S{u(r|C{A&pG)9@2E}UsS(p3j4wI$@CdGtyPr?`w&O>y-g3^m?3{akQqRYG8!m}E zA1pK}&unqskG){eWY2e5f9X=#@TR;LUB$%=Z?`%}c^Eu8 z*}nDKc`My*%jL}H%DAnSl%wW!5PRUeXxT+B*>&8^?w^6zbR<=6& z&S0Ioy-RjyJPyioPz%o2nz|#RlB~A==D_y5``--13rwER-WcBetbF5(SVjQ|S$0d-QHJO|x?ni1$$o@am-@ACMJyygK-+>eb5IPfcfH$7i zfgKZ6AJmCitK2D0vDjVCEVcWwz*Tz|Z{^;kRS)TClD_t{#%8Ec;( zIAUeHGR}78clLto(T)Z4$3LVUQNH7}XJPj^F>90m4Ii<&ZJ~8zRc&z?>k z{aIl3ersRvXF)~B)eEM$bKs_Go!M2LSrV6`F6$>#Cb)Pju1psGNS$z1r`qbtl;p9T zA71An8 z@=#x8Vsbr6yvYz3nNA*QAMlyE`XW7zv)VJ`(~qXK0tFv~r2*Y$4b3wTkvD(H*BY_p z`n4%1{4Xb3FIeF8owv>Mc=xqyGcb1r4c$v7rG~#Y><){!>3lQ0+-EAe_f7VohpMh) zLK6mC&fI8Lx+`Y#A)_7MSBow-1#CaM`}&Cj&F@3HI5{m5)bM2`&bZmWQaAtWHS1FM z|9`z*bzBx(x0Yt;1_eQyp^*|01j&~M0VR~~c5%SFx}*_MkS-+!LA}Gl zFV4B=eD~Zx?w#LnzkBwcJ!`Kud(Atw_Vc_F+f3AHw+t%(z?)i9#oZgdo?xref6`pA z`t9i_K@}au6{X0^Sk)PLc$HR0W7s&=smLksn<4cX`b8J7l;JtZ57&2{PKM`p+~&~h z1YC@dzddz^SvzRld3dnCdy+dmXWytXpYdHm@1WX6|AZg&+&(wrY*1jQ-+D4E!2A#; z%mt5n5ma2ZYvR@t3c0VUkB0A0$>OA~amSqYMHllzo^=phm~0yQ)RY*Nec;u-lRh_} zcZ+R)zUA5c^tw}GnSxziDtY($J!6vmk0eVUTZ!KG<=VaA&yH0OxfmLEuzL|iNw#`u zW71*X>>#6$u}>jE|G0HybICH(Rfq?#J{pd_ptnwTzrfz5oKnH^d#+Z>CiYt=v2F=? zo>VBgCjUxoJ{g0SeY{%5el?;r#X9+2H0x25S#Pm^eG?%>mlU`yVN3&Z59Za~G|mx; zVePEG$#Jk#3cL?hn~%^NCncON`}tZ5>XB|_WN(*c&MTbtm&t9dk?i0)gU1S@oEK-N zXOuE&)4t$|)j+v)V~ClK%p%pXAc=$51}0krc}znbhI9|!S&W4vIZXlxA~=f-B!T{>;39mPAHpN zMSZuLwn2znqY|w>vVW<01Cjj|J&dq%;51ie&U=$N`y#Sy(J(MAp^+8`47OTMdF2@N zc2d_~=Z2jTv>%=?ceuLHo|b=Hr);H2~s9y z9var~adKd?Ta+L&shi{Phkuta_RsX&B1~4BY|hl54a)XNm3}z|t#%C$) zJo7Px1$;rI9B~x>o&{oAVb$5`^F&FAN^fpH%ddTqA#d+VT9uca!j{uDRDcIP7Nl<1 z?}gFTY<&u$3r%_i^s)GMEC>`+@(4V}O*E>Q+B+w=V@PUh)%x6A&Y_mrUXjOqU;V7_ z+pK|*r=&GG;yGH8JTke=dkL8{_jvYGx&+y@_lQ32+Z^~dz2P!Ma7|G?_Z{go`$e)a zxg`qBo%{`9SgQr=<%^7}uqQ>F9%%>DIOkanLo5NcXF)x?JC}o@FzZh{b;Nk=XS&?u z-#_R?Gc+l)B7_Jf9y8?R&B0e3@8nQM)nD424I1?>*rIti$*IHQbI^JvJY+~0_1-Mr z^PtY9jq$>+HmTV@ASkmGJS|>34;?dk`INjKUNJZK*0Vt~Hk4Vb*Yt&p#KQt5(}}FZ zxUN(G&*V1srY@y2&YwEV&vtW`s%FXriS5l+y9TA>HD;5tWe0L2jXuHRRyyx;pNFy6 zO^oDdFnFR=ed6m|fQgL5w=nGwHW{eCO23ooQT}Q(-}N{$5+-ST&iT+f4 zMRn0fPJaFx1D=xECztvMPgY@pZGC)1c|VdCaJ4gdnRV1xBK#lgRavU;GIT`WAcC;6 zzw?UVDiTW?S3S_V#UR6%Zj(WTj_1FgfP${lT#Ir>+crUug)y*lN$aCPp1B$$)VId5UU}EzSg^^fCXuB+uaXKmPLlQ|+))QC9SSeYF4}m`G26X5%iOt#{74Np&2hp}R z@w(9plRvx3NTNJn1G5t}^`GL?fG^$4tAR14Sr0j4p^2@DuAlVQBs-3&;Ux5MkyOVW zi0@R)DkQGFGQDL|EIM*&?)TLKd2+JLfBSe-wTAXHTLmrb6%P&SItQLe>{D3oYAiNo zgBx=f=yHLSU(3NK`n8iD?OeBY`Q-6SraL8W=(=M+jtm&n7;~&MIU|CxLq)%N+>+)GqMC{DC1MPlTJ z;GLeX+ucx6I2zI)#ZZpEN7D`$r2O_wmKbG5buC3Hr@=eo<(XI007@sLD%A~5Mo*!_ zAQd=+$K|6s>4@~+ay-|**)eP(v}%s$sYYq#aUU#x4C;)QVEX|?!t?^P&mCcP*(=f- z_LUbC3`KJ2E4YRhWnA<6n$@M1A0(}1*@}a-w9BJlM1$cqW9XjzGYbk@M0uQSb3XNN z(uwY%s9f%R)yjX8&fN7ozO%G$2t}w4xexK4@Apf_jC<+Q6P#WwoD=GHEE&n4&U9G<$z}qb z5l-PYl7#vpVMFYXlwmKELGKuat~p+mHe`3My@t= zK~u{>=~bAG3ZTG=3XPdK6c&<6drF~9gpK@JUKLY9$m24Jk}itm*wBAT!+T^Kr!tal z+(EeWF-hx}Li4j(I!`l$UPl(~u8~`BIAM(Q!!X>nt@$Bev=}o>;1r`4j)n zXZ@ytQ%IWkJ@qiH8&P;Ol?L+P%PY1*2^ z#Kd`hF;u!rI;60{&erDfI_P8UV%&XN@U#8yrR@0W4_O-zAKuq{3YhFm+c~Q~x8jtr zYC;LR8V|_#UsBivMn~N%hnLPPPK1=U$7=bUTgIM04AN$0-O_AK^v{dlwtD?hPhAKl zRw=wrOP0h3A{knl(z{b~d{BbadvBo@ezSGDEU2JWO7L5yemMbflLe_+e4_d-uCm0u zsG-PgvS#mLQ1aUa!_56i#D9Md^?l4y76)$KJZwi;F(tGu8hIl$A5SK?*6RqZ9Ccur@!8JO3P zNVg#*4+YL^D))Mq;RCVUL(fdBy9Ed>td4VE={-K8@;B&dPP?D@_7KItMsJGFOsgd( zxFMi})Ck9+(2n$?q%mJ=+aOqMRj2i#kr){b-C`jNDS8%**0fjRL}k^gNwZ$$0k7|k zsu7~@19f5q%z0ec*X=qgf79^!pS+6i4DI-k#E#niDy34>k3)uc5Bcc|BtQ0B6=DcS zr{E)OI4mzHM0LXvwN6}k!9xY_E_sDue}8e;v{4p!H4X_({xv4sqd9s_5KBr@^hSs&PCXt$&EFxitIs^@HkFO%sks{EnKrz*(9J6rHCP44p~wn&~8G zy)?SvDx85;q187D>H65)vs%Ja$y4BK^5)(V#7YKune}$mPs~=9n1_4BaAs)_^yMj3 zv)Y*UZ@%qn%{N$Hii^yEB~dB7IX5jP*=JM7{F=1TRkikU+5qaM+7@~_*VC0+5jON* zJ80dy*s2_Pz3kGRZhemm7}6$iO`Kz<5j=o(y%%5<+|r7T7h>`6Li@;7bLMPrfZrfSg)&pmT?Kt`>-bnkiog%1yJVZS5JdlwIZoBK(E1xl_-O*h7* z>k|90>yl04&Lf&N@TO8oGygE#miqwvnlHWa1{BiewDZ2W;Ha*6tA&j}(@LP> z<}E00Lw*B_dE?4FXC({U?FH@b(SEg)Uo5zV0#`{n!Zi12|0CrA5WmNeT5gCmup>L3nVR*yAk9Dr3*+e0;L}bJ2Xai`w3@kiEy1 zZAn+QQ9`!)vAnW2JS0}}!NINW_fB7`w zSQ~nSO2VC?p0)4aP_6qJ(Kz^nv_FCH$2Y3=fff3D!(zwHhiI~+t}r@g&wiF}8OkH( z% z9Y(t5KuPzsYvaCM3Joqvq4y#+qKKw*LT)w^gOO69^}~+QSD0t#!|3-0Ka`NwA$2~M zqFdcNmgId;Jz&MpD;X)Gn4}pwwm0GZkgbZ=|M8^gfvnpLy^Lr0-Nz*>Xj5;a?7PlM z*%~UNc?w9lUG}!+vNfn#w_~@)K4M=cy|4csc}LM-uyvk)rU*s84c#G&fr_E+Ugfu& zdmS|)1f@;=qz5Do+x^6=U?@|mL^xHg0?rfPSYkXAOZ94=O5X|1V`DNWf#!EENbfqJ zSOyCHk83~s1h!O05B-wwCrbI=hVC~}Uc&6dt2@vz;LDyo3kI-Cf#cX8h&!|$Hivk; z?&GkOF^Z&0e#(aahJmkzQW$ZSdWlmb(sw!1K0TUnIUg-9$&6NeEJS73O3j9*D-Z!) zG)pqs`nhLkZc2LP5+lCs>T}Ly(jbNftF7P{wY6`h_DoXL z8h+YESl0g0^qk31^5r0-ToxX6O$4#4_ZJv`C6oS}pDT~qX{sK+qeCuUaaUPVe|A5{ zlize-!Ug#Uzvy0Y8Z6_W!mqo-k>%B;BzI(eg+e>0mG@+EvA-k5@Bnx%Od$7a zjO2m4>C(CcR)KA=aZTI7>gM7A#nVfgC+<~oZ9mC}w4?YpwNJjZX0CI`Svcpnnb`Gy zSiewaTc(NN6T5#qqvlaWi!(lo#ug~p?IrH^iX!?N2@Ke_3jm7G@>h3f9l{T(S)f%>rHv7w=%U-Y8qegyu)IrB+O3c zC2!PH1~&*yQ3hvw4Uk~v?)Tq3%3jA$O%=IWnAOfUFFGWAL(D7AHvC?a$=QPkL@R0z z-CWIli_CT37Wuvzhx=5auvCTlskakOQ?wZtO$KgGNTl3mf=;QZoj1{562@IWRhP{Z zRYJX~_`T}o1Zdd9b|gNGbBppi)>@vX=x*VD>cqnSVSm4Ai=0aUmLy;IKH`BfE}PVg zjUhj1CdqUMyvZ;AHIt=gLIU?3BRX#=p}z6NccdjXGD%|E$(F`@2jWohAC9~HC+303 za1n*_S&=Olhfx{WwqKLURC_DgxFIxK7)ceHhj;_^*fk?a zO#x2MkC$jPQ(ezBmMd_A^fAZGNHj49ahN)IU2io;8$W+Dhh5|4TB*!lm`;q2ir9Of z@fRA|K851;t<`Ld!sfj2^@HIrc0IGvjqFx!9yo*l+JIdSVu=%(M6~ z&}|e^P&0~X=lEt$mR0ehJpXYtQ)N?UM$RK-UORWjnDhnFL0Ptths&QDi~q+2j(JC@ zMa-yAmDz5FoU-zOecM?6k)Ewh(6nOl$=8OL@f(q2MXTN;RaM_#XqA71tF?^B-L>X0 ze12hj{KS(+@zQOsxC>V1se!I}w7~bIgOe_zr%$(3B?lpR;f3G?P0)ztQ_&*d1BN<0 zhNENU`?0c36hq%EKG`he7k@e0XKR{f8uSg4*Bt2S$uODrvl{};=QNJ$q^6mp81g6+ zOy>||*>Gu}j#Rt$eec%@Snl3u$1Ia=9Kl4eh_tQF%`Hv#al*}9z_A`s^;JskEL);} zu)j6MJ9&Z;7WO(|2ZQyySdxr(ygO^;(pyd*Y?h{6={1+P=mZ?*eYk=G*hlmeo>L|5 z=&`Vjv!_ZTBN)0=kD~gmgm^0SkbfSR>NZV8+0qkZO}*%+J4D{~tILLbmyNX59523S{1d^87zv+|s=zvDlIOUY($yKPhgv(u)_0!mkhX5Z_j6n_ zNJ%J6#stgP+o^IW6IK&iE{`pC1NfeYJ`z(zYo(pc&M!gt z2IOh|%@ah$AuT#iP1_rZ??Li$rB3h~E!4UW=H{jF-!4bbHv_<-e|% zH=}AvFItt}Bi~QEEp!&4ah}w|iFKy%IcQYX^>EqcbR}|ri@7y3W@w&at1==ZO~b6A z;uv}aIfmlP2pZ0DnfdPd-?$;^DsBl)JvYCC@xZ?ZCxP${AckLv+0vQoYRWf)3)(do z^l$Jc5Zn*c@^^qg*Nu=I%uS&!C=drM#O-{wpBdtB*)JKtuqYvv0f@rW;!i7o6a7c* zp#Ll#>CXiH-Masv#V;U{|J*sk?>o9Kq5KAmcYOemTu=?I;10${S49Z-=gRbd|FwXY z|CJ2H>(U@|Uc?)Zo|NNDv|EAN0Etf$RcY(ahR7K$Nt< zlthJ?SIyx@ze@kYC%HBR`?rbd4rWe{MsOFK>qZt9|H!XwgQlxPTK)_0=~~mj@|0id zq5aNNu6Ox;-5-wGuO6=*^WX8L{(rms<%)l0-T#%R{t+STFN}r;;%dzQ#xcGYfNEgw z2>A(wvi18BxGw!qF7{^*iuQ}7_-}gYKNYy{@y{e);X3{1W>=2(H?8~SEdSl88`sYI zPk@x`7JoIGe>nAjC-u)%MKw2th?R{YZJ|MshcLaM|Hn;e^&iU>c1Sst5D9<;APGnY z=fU^j0{8)31H-^@FanGPW57f(2}}l4!89-(Yyn%rPVf!b3l4$RIzyLWw5l{kDfk%KkpaDDv zv;iGJ56}k;07Jk8Fa^v2bHDO60Vlv2@Bn;)K#&vU0+B!z z5EVoN-UAE33@{7S0gXTt&;qmqZ9qE^4n%a09{_j&K0pW%gH>QPSO+$OP2e4n9%KM@ zK|RnAGy+Y5YS0$61MNXa&Bk1#I$P>|FYp literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.SyncCodeReloadPlug.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.SyncCodeReloadPlug.beam new file mode 100644 index 0000000000000000000000000000000000000000..e55c82a3422e81d7f97294dd73c3d2e99439d841 GIT binary patch literal 3556 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 b(Opj>#b@aV+eF<+)P9iNdr(gyB+`EX)u8~^ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Watcher.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.Watcher.beam new file mode 100644 index 0000000000000000000000000000000000000000..94d892b6636082756fe601b325af6ec3fe3d1291 GIT binary patch literal 5560 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 BwKxC( literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Endpoint.beam new file mode 100644 index 0000000000000000000000000000000000000000..575ac40fe1f3da862763749d6032d067b6187d51 GIT binary patch literal 82472 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%0A9g??1zikGZbxCRI z%g$(#*A{y6E)fuY5{E4Bc^_7MA~0D`!Q-Et%txQ+3NT*~WWUw_96?xB zaPzxz6a%6E`r68W<f631^RY^-2L|gcFWoO)#L2;V54rdnE&T#Buh?L@SfrQ zIUrfVlQT93fqULGg{8r{7yfIc5q!)d2(9jp5Qc}O-lw8}| zx}>HQ(sKN+2OU$$SQi88mDy3uG7^D0h-r@Zz@}?)>(7_ez)r@+*W9-2-!BZZZ2^nr zT9d@oH=eUVxl3dOJ>FtqvNIgQT3l4M_MG=WdN9E!#+Hk0m6-~(x*$09LDR$4Rqji< zhT8(Uf)z9Xv2G5?TTX*a!74w+`I`Aih3KVMp&&9q5M2t|Q6|2T8GVl8I2@gvDTlspVSxVdzr%hsrUN(04DgVjrx(x-B+inlv#7JFbEpe` zat^EjV(M+`CIB!1L<%@eG)ydvI*cZa9smXa2S5R!0Wbhm05$+ps#|JCYF27nYDel^ x>O$&D>PhNZ>J@+nz>o@)ijax~!u&tbPJw__J?#IpH@F}B4|5g-@f%3!e*yf2M`Qp1 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Flash.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Flash.beam new file mode 100644 index 0000000000000000000000000000000000000000..36670f75d1d5002c5802ef6145ee0a0f1e551c33 GIT binary patch literal 3108 zcmb7Gd010d7Jn}J=k_fVhuZjvP5SB13ieVLG5f`MDjv>6fgg`c5UPyp~$kKu< zV(SbbiYP84Z9xUARa{0|Z9$eQ9T8@%6_tWp74a)n=RSz-%zX35%=^CIJLjHr?z!jQ z@7!}w)XLS~5M<>X78x2JN+ktA5FGL5&6~R{L8MA)Qj(sD=~_agGuts8KENyTuKqLM#7}il9XPemWj&c1`SRrwHke@T8fie zy$}df)moWBMWpH}(tuM!jZ&3LkSeK0@l-)jk}2inNbK2>k_v;G&`^;isU^z^ z6He&pP!kDyTx<3kFV#JLy9o)dk{a|xydAvOxFK>@0%5dGN#Z{KshfrkHbmQ6Bw0FVB#qosa~&CXfQoNVQJZuiXb^b;pvho zwN7PFU?3GKLMjX5a4_&KnYR@Cw~ONm^4M+4-C``r9h(=zfuI<*j*d+Rzyja`SOYKs zYyo%xFaRGwVCH86>R{$+dpe(J8z%r80DA6Q`CFd$2}hbH*YX2A6JQoC1F$#qfIu?< z-ujphczQly!2fSlcp-AobwBW&13lv5DZv&Mw?KgfhcRUFbIJt;4g%X006Ge%j z64#sdo=;BMdOJ$c;&Iz4(^#$I_uQ?I6j;Sv?Tg>QYnLnChhp7N6^CqXGPrg`RN4B@ z-5Gy%Q)hQuOO{8<-_~g{PhV#L$1&mQ#Y{1iiN`+dB5+ zwjN_CfAF)BD~n4-FLbuGpwaLvz3$cWxb^8EZ%uKw}1S_t(K;;;2`FM)0b~WxNkdm zP#kBi3Oz8R()+ZtkAE=3X6t*L} zPO9dK(44%HZG9F4yL$`++xmXG&`=uU7ITYe{x!a0Vqx3M@M+cU8SPaIM?T0KKUOv| zn0#|$u&MP}&#UYd*;m)syLKOA*2i|ViFo$s&pnLwy0_^}Y2dSUd#_L%mb@2m$G<4q zH9+xPecQ10_@~2mP6LadCk`Xl@U^duEdyyIEeR?&3~w2)>&ZA@O9_7! zTB(DZ4loM6#NCHu;tHeQ@Alsae->Wq``l3x^Zop!3en*3D^Z`us<=ELF#qMre{5~L zX!GZUM=6HsyPn{lnaV8~>$-FA4!czUxZFWUSJe-!BqvY%sN{+R^VSuFMwzVFq0wtj z`Ip^(xo>B(TWv*7rt1DmHGj+QFG&)vEGMRVgBpE z;dAh3L0^e(-5GZsfAs1{cFnwm)Rg)C59?w%Ze{m#$E}=QH!gA9^^xNipXE+pe>=Du z>wWg|wJp*9PAl3*bs@7lucj^V%N{9iVLTq=JnlQpcIZ6Pv25*gt&iiujte874O^b? z?y7N}80Xjvubx=xnp5{{q$xZToT*0a`56M1 zQxDOU76A`75Ltj`74(&00wbL(y)Iw3Z1Ah8&+g#HQ84@C0- literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Logger.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Logger.beam new file mode 100644 index 0000000000000000000000000000000000000000..f8b174a6372d3b9d996a2d859e2ec2ef4df4c83d GIT binary patch literal 24632 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.MissingParamError.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.MissingParamError.beam new file mode 100644 index 0000000000000000000000000000000000000000..11384e1bc29177a6b807a9168fcc9a83917d8c9d GIT binary patch literal 4604 zcmd5=d0Z3MzMm{WjEM}1ih$y<)a@cf5T!0OfRshRfS^*;Fi8fOkj+d&f+&KBRxX<& zD3(nG1(jZ8(Q6f#s`XMpfwo!&lqXf_<%y^js%_<-3Bg)Fx1amo=l%2Y`Fv;2`R(U- z&Ybf*`FKs(A_%hh$=lZ}*h>@P0YQ|)v9Yl(2I4Ej^|;zu5U0cxxZXJ!CkR{-D?rt# z+*hqus#AnQToI!b3d>N9MvaTK8jMhhm2wp>!^$L>N{xw84JN6@^eUxVLkQ&(_uLq* zLaf1+3L;vLiq%Sj2Z+&fr9>;kq6v*!E7n9~Y8k4C9gf8`!f}SdOPNqO&KC-6je+?p zwDM>*CeezqTud*UtQ zLOyVhspJ?zps`r3N~Vnk9#M^!7{&~V5Q4yjDwH4?utEtMYD_^0)tFqV!4PG9v)DDR3b~<=Dd%WH~M0lEHCJ_f8MfiZFG=PVN5ma^E_43Xksx(YO>o zp97u(z8?%;(R@Dyyi|NDc&6}aT)+%LAWE(&%$`jtD}hY+Qf@5clD%Z4sYX@{5c z$Pf@1J_$KkLV(LHghF^QrMD2Fa+nq{W!U2p&5Oo$D1F35n4HCr99R(I&4p=&JTn+M zZ34k5G!P_n8k9nXI+)Xu6e^8rY3R03+Hly!k57XwQ%QW!89 z0n-|$Ff5AL99jvRvmOW{OlvNm3j$;Q~b$S40fH0N^M}r{ z530^gg2kX(nMOw^zk8iY435bpI`$v7g!d$A3S2fJXlC3f{wN{>9&;x|Ccm?XNP$lu zgL`@$Rmc2&M?j(X`V`Qg^mbc9$?k+NltP-Bo+bxRIPMcV?vYvDQNAmoGm-5M#tPwS zWHj{m24NiFJ3e*)ach6;QfC0uENN zK}rWtZ2uEmzEtWHpojq$z8RliGGhstngFLkJVg7@nMV?ohSPx{P0)2#U;`&qs7@g? z9#?9iO05)wtzS1OMy-?svKrHw11Yirco@0e>!tt#s?{ikxSTxE$ly!~5SJK>ht|17 z5WuI41ViV$ zrO+x-EDmB8rU@X3qtO>V*$|x5wQ5Fo-?q3s=WnBSyMT4y=)AhZp#7U=jf2xSwKmV6ko9wm|XJ6R4JMHVf z`Oxtn^bLRe;-zySzpkh4R#5z$rBAEMpB0Dgt;@@u^l8Vy-%gHNAJ}Y?8E9Rndbyfo zy?WXy%>hT##?4ozS437;)ooTQEy3CqPHl3mIKAc{B^7@utTO3e6c@a- z-7?Z)>yF#@E#ZjCJwYC>DD7y6L{l=-N4q`!*mJz{rVrr$>89tMhHCAvuDBnt*vnhG zY0uJ2;FZn^(cj-v(!H}$w zSyyJdb?Srte%bBXP%+%!yx@rV;?o>I=dFa|pIc9{UbsHou`t^-A(`=AdXRsHiIXbn!kf4vlwY+tvb^A*p6X74^_$n5VoemWktz*UdD{CuzFg{tlqp7iY8 zM*m;UcP-wq?4yw$p;qH!J%8!#&uDvYmUT90J`Kz}t5hoE2Q9;EvocRNFHhb4tnRB# z%adOmJ2OV@pFYoo66uy!{8uN7;+;b3$^jzM^l;AM)!!d+nnE|f^1S`Itj#fE^hW*0 zb&SSPR!h^VjyNf?VQ4UHsO-?8)_UHr2aXX_u5W5Qxg>SL-Ly>GoWb=a0Tjyx$~Va zIN?$5CvcczmAC2fZ}XgTp6!umB}U!qPQIIWF;RJ_y~#wt%3=EpULAgLGBecoMqP5y zzDQZ@20`J2kSE-G3Y%`P`jutNW+YzU>V7*rtjn%9Gf;}V%pK(8Q@2n1+Re>*K(9@5 z{vv;4iOrI`(QVsVAs!E>$ch>LRW*l>nVsp*sl7gWZ-j*uKe%=MSt+YQTDc~lyE%Ev zv9^Kg}-8?*BWIkMe&Gxd@`ONkERQJ~;bQcu`NNNVQ z)m>|JDaw(s^ZOcRu2(F68hJmyN4iAtbp9A`-uWFD$I3@`ICgu!$n(Ic{`;-7rd75# zp;5@oQV*A$!@WBw4~}*YK&zBu0&LfAx=TkRw}!AaAWb}kOODtbv9nL<5SN2 zJ2i-RJE!hpne0ri`8sl0VS{7XqtIhnt-IEK)4IPPyU*PGerC}1;Hi`gX;EJIl`9NxYU^^dPCuAgBzrUF=)Hm;o7PQ8O@8cDA;@m;j%Na-8B5XuQ zK69nrD$4)XTAJ4T;Br>;qL(4^AMSP?^0OJizAR495F~C&U2^ThuGp`dKB#gea$B=L zw_TdVNpGHYF79LM!LX&fTX=z^(t9CWU3(gn{;QQ zkFI?4SiYqwApB6viZ|uN;I^LAE`lg!-{FFbHCvjjB8x)XdX65bAG+Umcy0qT&)ap3@kxvuPMbOowD48LZbUi5s5&w#yc3Gwf(+=+L^CZCyP#x82k9 zdp5*dfAZ$VoiB?Sg;>Mg|GpIOvUR)uOaC!}gUe|1QPGEeuK)ExTGn`};1XFMI>lxoWpVzIvZ{aQtsf11F+|@wOz6!^H8J zT9~kiEJ`RkGfZxUe`{W#l9lBhuCxER!Sm|AYk(0fFK>31v1|CQx&VY&<_ zG{&rtQ%p2kaOHS!BFHY)sPXUe53Vp$W2jPNuoFq3f+QFN`=3qlgd*kt@r3?fup5W= xf1gch5cp#Nq*Nuh_vE0u6> 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Param.Any.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Param.Any.beam new file mode 100644 index 0000000000000000000000000000000000000000..95633b92bf0f0f90b920271bf138f50cba16a47f GIT binary patch literal 7284 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Param.Atom.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Param.Atom.beam new file mode 100644 index 0000000000000000000000000000000000000000..b2296aae362d5949af88e30d7d40ce9b8efb461e GIT binary patch literal 2764 zcmb_e3s6)?7JZLFm>CcU9Qlf(7NR188^J|D2XFu*!l;mv_!%C<10T%1H+k>PhloZT z!GDS%s01MhV&VrK70o8HfQs3~4+f2kXbg(~C9WvCeoOZD@CjD2TeVf&RkuI4Z{K_R zcHi3_6~ACAhKU;^|&$CpDjwd;-iqU8(HCdiYYFSc6@MNl)G-?@^=aib%!2C2Ft>P($=8`pp zie4Js zp>!~W=3b@+D9zDdC5l&~g+q6s$3JOF`E z>POLPiY8P2`mp#<^?RRdaS3oSERsnj!H)tA!z4hc90qa+vc)CEn3dC53GNjlC~^@x z{V6vhcY!X2WE0ou3UVvtM*{Hx*(t$rTqbjZS|N+Zph=cROQ6xpte{>k6AXvRI4=y( zw~-8W!^@G%rxM&8BDm`!6HBg$9natmGBHx{vrIf3nwuc#f_D~6tenJB2`-fQ4s{fq zvd1u4w3ndR%T^*0N%|a4e=IGF&L_VZq`Ne*h3VTe$APbqO2l zj0;^YV-Fa+g$;ETU<-LR0XblfMvGb*&=8=ZKn_4wKqG*hfp8$icNx%k9neSexZL=j z9=G0kqyzO)84e@`Li&*ZhxPXDphfl&-zt{k5gr-{6?9hPOlqjDmRlKweTPioXw-L& z2s{G>oJ|_2B^lUaDP~{R?Z6Z7a=)wj6nJASGaf2}rWxK##n5_^<-Ooud-05ybrzPSV6nPf=2)d1bU7}*l=2cJqt6JG?%nGJJz-P7(}0Z zkpc6f6mmJCrx+b;kunS#8Az~yWBohri>ATXAlndg2D<@Km5~uShfV`DP5t<6VWS+x zQ6?q`o)Q3yY#B>jamb9d!Hs5=oR%=q%HAx&D#5IZQ_3{TPNexx1( z-Cx_2zWgCCas2}|mD1n0oXZr_2uC|RC7ps}S!Yr}poSTDRwZ6%OJw$eIad#JRLIut zamu%XEk0l6udChj)9#gN*21G9=5v!z9qF#KYBQTkf>uVJh)%Dnv@5>YB8qw*nlS#@ zt@bjX9s8@;G2e%FWz`;belg9}o;F&|j*|xxMdwZ?>3_H_{9w_9#UXVo)y;;B#q!E+ zhKo1LB|pkt_f?!ft?l6E&zKu@{M8(nS;s#2pT2!qs$F%~qN}@`zNr7#s~Rtd1x2bc zhicESN_?;{siHx)?^5gjc^gjNI&k)YH+iq^lbpP?yI-bmOHO*Ud5QeQ<0ItXyyLCg z18h#s?jkiKBX))tR^G!lAMR{Cy>W@>@HbI+vxiLF6|*j`%J+iODYoe3q+dI9Wf9B9 zD34FySQzM$Xo?zlgm@EV{M{~P|I&OrySMp=b_o}`*hGDL`}wHGOu^+DT~#%|EnQJ# znsq42IHAb)gZmucG~kh`(vBVVoQ;FbwwfY@`y+iV@hpo8&?W7jZ(VfN@-{#+NP4NDqb-rf$jfvsaXKn6$eJpsU$Ap?$juLT5vkRe%`f9 zYo9kpH{=*!3J+3lc}JtS6kSU?u=&wPud)jYrFrbuvS-e7e0ENlR2y0s(UhrT<^T3dcEJFWAnut*YR`fT6g7D?lN^{;dVI~Ei^p%4SHEl;<~!s= z^R{fyGr?`E#(7#VjegvIxw0$5&8+xxLAJupb)@*vhBb%ZxP&_FsR(%}&MloaeM@U; z2R-e)dGzhc&x)3@ACFQy+9$U<|T?Jll~%bP+U{sw`bnD!vFGe z?YiRE);ZVi|Ko*6`?;=n?zROB1J)B=mBE!q@0~3;^O@8qZ&`y)!M@j4O(QuPR1qmKcS*3ppUdKExg%*go9^Y3NM|53NFFDd^w1B2&yNRnu~ zf4o@#ukFGs)`w=GbFe|TX0YZ-R@3X9f#SHqCWYcPgchFC3@jEtRN!;?fA$v<^w3+3 dJBi{&3Q+lKOmwN zNdwx58m&fD8l+KE3hTvZ1 z7=p^(q*4)-mR6~%Fb;qmBZspFHBA}_Jzk~34GgZvI9yYQTMRVAu_{utxI$~B)Eq%m zY&MCh8JZ0SFq@<`Mm?U*a*R>U1yh7R8)x(wl{=h^bE+|+)f4ZKH0V{TU@gsTGB7kp zt7*MRI@vZw5*zw_yBw`D@DbGg$fQUbKu~&u!ZiWo#)Cov{u8yv2xu&=!4U-cCy)e) ze@*~-0|`;dKE%%L1qnJcQm|VlatkeuDNQxz;7s~v<&W@D0-s9`y_U5VyOfbNftib9r`V(fDV=P<}T4O)*pl3Z5k-yd^s1bty9S z;HV3SJu5xaPzYE8t^V=;WdQNMynsAyyr%+gG4Kbhz64-hU}7oWFG@*}gMyu_LdqAk zUoG`r*tDU|paZ#M4xWdZ2-?V4wak-VL|$=X(-TpQU*5^r@V?=Sn}2eLb$pbuN=ggE z-zN4cG~o;jNtKTXA_9Y9v5+=clZGrEl**Qzj0)VVah5eZY8jdYn8D4{ zK#ONUhC`a*W)}c3BOEZ~9ON$_hXV_-s_}dzB`BQ*pFtV|qcAO@4SJQFva#qQgJjPqF9r zW2qmg|G>J_GxEw->Pvt3<*^s4;^vSuo@zoL$HWhJl^=dMD4icz?zDDxM)UH$?X4q+ z+SWfv^SYkXRA}eq-;{a&#N7EFpGW`W*oPPPUq6zvqQWQMeBl16;h@UbKBzg|(yBQb z^CZMRsxWo0Q>p*J`nR4%Gz5NOpZC|e8K3O!bkEq9iEYd6R-IN1RqK4`eNo2<6=i+H z$J?c+Yy6us63(h$yxrL5IV)gh%G`POwa!tkHUIi3DSFDoHEIvPYvO^$O{ zY@xc)*9V@4eZB?@6*cZ6XGOn#_Sy|g`Mp}-mZ;d~+6+-(dR|@RW7ok;8%ORw^S@G3 zyX5A^rh+h^u>3!-`)i(>>E3b!r zyD0UCJ3|HO1KhBW^t(UqVUjOqzj#U6s7zdQzo0C!f6d1yk2G&}zA$q6jPDYkTe{Y7 z46%=swj4j#V7a!P`cwGOab4x+kK1S?tM%`7x<)6)ixVCWh3^m!j%N0#eUjexYiJqm zk)hSdGFr_-!n*Kx2z}2|NhV)TJtv<^q3FipzStgxsYn#mzq!}arEHqlRFk-*$?0}) zhbK1u!JeXvk9OTGT`*OqIJ9oou86kd?4Ol8H6ACn9z!<Wo>ZyUg0gYubF>C z`1_RRYVn?kCGDT~91Tk!TC>_)|Jli-S;e&-XALE{B)K{C-LyUZJIV+5YL1@FZ(p0g z;!1B>=eIkq#xC=#AKZR3w&fisuZOeVzfk?goTzn2^55)?TD`Qp;#u^)Q@_?kJCsO2 zT7CJ(l&pcb3NLzxe7$tD-`S*Wr>)1H*o~YnhpHWCiOq)-F_%CVyW-Ziu2SdW>U^A0 znL;?e$eD$uFmy~sz!JHDPl3J0F*VI?&sw{t$6>Z1JQV8{a;=tFVs-s_?Vx!l%I(i8qXv#o9#KAA#I_JAA}9m rAqnt{0p}C|H2w&I;d>D3<`|DiC##7dOe-+(>%>6NjS+O(D1!VOCRI~T literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Param.Float.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Param.Float.beam new file mode 100644 index 0000000000000000000000000000000000000000..f7acfd36d3bf39861e22180bad084bc828337c88 GIT binary patch literal 2516 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 Z3?iPcKEhy9o{5_$1mfOe)YFC_{|5DMW+(sv literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Param.Map.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Param.Map.beam new file mode 100644 index 0000000000000000000000000000000000000000..2d09b9c6833fa0f864298c797df9b722c4f9034f GIT binary patch literal 2840 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Presence.Tracker.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Presence.Tracker.beam new file mode 100644 index 0000000000000000000000000000000000000000..afddce501256ebb34bef4e1a45e7171353634f67 GIT binary patch literal 4656 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%0A|`rpU$rY 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.Helpers.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.Helpers.beam new file mode 100644 index 0000000000000000000000000000000000000000..2be31bf40aa495bbac67a72fc44037b76162a6f8 GIT binary patch literal 49604 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 D@z?6V literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.NoRouteError.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.NoRouteError.beam new file mode 100644 index 0000000000000000000000000000000000000000..35ac4d29ba8bbfbc1f3c96da31e482e251df739b GIT binary patch literal 5028 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.Resource.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.Resource.beam new file mode 100644 index 0000000000000000000000000000000000000000..f0b0541923c35410e75acfdd535acc29ef967724 GIT binary patch literal 8964 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.Route.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.Route.beam new file mode 100644 index 0000000000000000000000000000000000000000..f357d9cece33e09dfc9929e46170383a7f93a1bc GIT binary patch literal 17044 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 V!`6_9AkY6Gz@JV)AL!=n{{qZxMZf?6 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.Scope.beam b/phoenix/_build/dev/lib/phoenix/ebin/Elixir.Phoenix.Router.Scope.beam new file mode 100644 index 0000000000000000000000000000000000000000..9a2bbbbded2edcf276f373f2c3f0fc0e52804979 GIT binary patch literal 19512 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 E)8;6XxCPt8E(#J&+`RsqD7G8oI@V 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

  8. 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/finch/.mix/compile.elixir b/phoenix/_build/dev/lib/finch/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..b9d91b4619c4cb8a5d0c594fec60ff5e20c10afd GIT binary patch literal 7475 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/finch/.mix/compile.elixir_scm b/phoenix/_build/dev/lib/finch/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.HTTP1.Conn.beam b/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.HTTP1.Conn.beam new file mode 100644 index 0000000000000000000000000000000000000000..3640d04178c548ada16b99afaa97b95c3aad5663 GIT binary patch literal 20368 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 R)WlH<1bpd$f_{_f{{Z0muBZS2 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.HTTP1.Pool.State.beam b/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.HTTP1.Pool.State.beam new file mode 100644 index 0000000000000000000000000000000000000000..80918c65b8d72d81867f3eeb7329d96d9c62c06e GIT binary patch literal 3124 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 WO$LBGmo6pu9R;H(D18(fLj5lU55SxN literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.HTTP1.PoolMetrics.beam b/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.HTTP1.PoolMetrics.beam new file mode 100644 index 0000000000000000000000000000000000000000..8df34d451822f94af09adca2d76f2ba19c762f00 GIT binary patch literal 7348 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.HTTP2.Pool.beam b/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.HTTP2.Pool.beam new file mode 100644 index 0000000000000000000000000000000000000000..0703f242f042cdea2db74262d1eb17b2aedb21bc GIT binary patch literal 55552 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.HTTP2.RequestStream.beam b/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.HTTP2.RequestStream.beam new file mode 100644 index 0000000000000000000000000000000000000000..8561ca0e283d87dca6acdc37f7065c319d4a55fb GIT binary patch literal 8040 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.Pool.beam b/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.Pool.beam new file mode 100644 index 0000000000000000000000000000000000000000..bb3a78fd899f7c8e39003111165dd4650ad18d5d GIT binary patch literal 4152 zcmcH+2~<i3Xa-z~SS^;h28vNZylXgyNz!>dF)G4%yb@S0mx=ib zIf6?CSdvsMK}v*(RE7v(IU=k^)KW|)$9YLY&s>oL70AUHipM6w0vU$817d6vCR9j} zSX?es2;}alSQ3lKBrqEHC=QYHUNbeGXog|F{t?Su#5hletW_Ym9Q2|RL=zYfL6y03 zj3**` zvk$OM+=Fb$Y%V*{zO(%RU4hDL6?=^c(=%02lzK10Vw+{-FT?2mlKJdlEMWy~!j# zB@c1cZ`iS#pkGzG(m~G9{pe;>oJ% zZ|)=*N&pPw%p}k<@67b{rEGJ}%<)cdK6_y)F)7>3c!~;gO(4|CDxKGxR7IC7q!NUO zi&GFnT{|<81QB6a{i!q+kswJ3Dknt$iv$P?mSahTgxR0kAp7{dMIAv73 z!t{hcp#uM8!DMt4O;+C;#qZgsPEGIa^6`JkD3Q?rr@en)5^uE&fvNu;*@ejoe=P&l zsYUm{!u?DCYHF>&)hHSMyRwjwKrHhWnq{U%tkcP=3G0A?K2cnypp5fyIV@M;Fc}aH z1u!Z=B%tmkqk^d-3*sZI7;loa2+N_EfH)S2dPHn^8vw+aL!3$0len2LxEcW5@wc5w zQR1j3A1IS#_JsovW6Vy}z3L%p+)}#&#Ooi7ihz8ZMxH_htwdxvsH=%2$^ut+g7CV| z;)D?`l^Kfha4D=pd6PE}8BZ$11PG3+bVV{O36N!oN*_oO2;d=77!ald0;~Yn1#uE_ zIY|I^b#PGB1xO+()GZ1JKHY?37==Y*ky|7tlBs-r}abJ#$ zekknd++IrcD&B;*jE3e8WIc%3(K|P|{F$Y{suOG1i>m5+p)kqMlbFvoZ#*@i=l!hQ zD&|69|6S9DqQ};L>h2x1^>SGBbm zG`0;}=oPll_>%=?4X3hC=dCFz|7j@Zl7n{phKiu*B=Y?hF=ximDI+Jd zHA^gtl27T+<9d*1-x~S4%fHZW7UNR>`_)3b{O*9n%GAd?k)e;8{eMuj%FR>uX$N$= z*)j|#ifu=&y2oOJ4a_{RoqxvEztb1l&Waht2T#A#d~VhzFQ!+Dm$V^g4#l2Sm$TFn zwagn1++`~q(jDHEYg$ptI~X;}aX55mw3Z)}t}N4r!a^-6P2aXwjA!4N_}OXqVOoZ|&qe z3O0+(GVjxVIX8P`G}34pzA3_~((zlng3sFMSh`LR1Kr66xrrCv#!ls@*?K!oqaDD(M_qvdzBFj9VUkT>5&7s>Yg=+-l_|z zT3wsUS+-E@S@=Me{%U4&){X}{lCOQUSlD!RMA-a-rsli8y$u_intKck^s;!=yp)og zd3ht3-#vUg)vnT|^+s{mPkP-cS6f8I8H)aZ=e;`9d9dX;o%=8oRa+gnKs z`unoW5L98kR59=S_ssN8ayN=@Kfgt5lUm#pT~SzXXC2jUp17b2!K9qIU-Y|}`?!kVwX56gMqa&qSzqJ%=UUEPIfdB)QD4Euv2|YwB?Bvh z;(4LTR_nEng^bQrZ@5=$IphxwsI#I2M~`Mm%ff=r&xq(8q6@ z{a-3%H}$(eqE*m^cl&9rWAhKqb&080&@t;HgJ*tT-sv##WG{b+VQpM)_i@7_sk5Z= z#dE*SdR$S*wyMgX$`920>oszH&h*?~>zvwxMo>dAF6O({>#xI!}~3L!ApbmJ#uo@eF^)aEyr zJ?Q9Je9pcwtb=RwkX*MlL{`1ry{GbYn!e|Ehi~|YjRrov(BE#NbS;~eRydx0pmR&u zXidi4v${o#=e0WAIr-I<&h@06TY-@yVHhI_6woj~9IK?_D5+z*ruyd#j-fUCrm+08_a)#0fD2xhDVs literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.PoolManager.beam b/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.PoolManager.beam new file mode 100644 index 0000000000000000000000000000000000000000..58f79a95383b40e9594bb068b793d67013c4b648 GIT binary patch literal 16884 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 Dw$Z2} literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.Request.beam b/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.Request.beam new file mode 100644 index 0000000000000000000000000000000000000000..bc8fc0896240d651c78d3fa22f9b4c2524841716 GIT binary patch literal 12128 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.Response.beam b/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.Response.beam new file mode 100644 index 0000000000000000000000000000000000000000..4cee483b7d86d5964205d258d72d82948eedb7ba GIT binary patch literal 2976 zcmZ`*2Uru?7M@801QZzv-PH|XS0ErLSm}r>MT&x}Bq5o=gk&afW`vcyA#0n`R@1qbMHOvo^xjAoEs1t?gBxh za(w)~gT3h}4+w(w1_uY9b1nQ8STaUB1z@-&!6_W2R0K|;sX`%!%Lt*cNKDft7N@2G zLqaH3m;x=5qAC)Vh-p-+MUzzoNmD|l)P09cjZ0_@Xp59$2}w`_Koltnsak=GD4JAD zXc0;(#CUv9JW30P7`ju6gu)@dP^caD#vfNJMI{5*;uBL69#YML|9$fF%OJj7k7o04|K=LM$_T z1m@3W@3!Kaxn}regsbCFGHRpx$BYC1Rqn9BD-dGyU@tE-@C@?`M8G8S3gm-H<;4Qe zR4+CUFhlqdyh9%`wt4#J1II=75W5twWG(K^>mCuauuJWpc__8b6yp0PR4hYdOSuo3n?Jsw+N z#diRQa?KF|{}9`XZ^Yw;AOe_cq0cwAg1MGD6BfXP)qG=1m}{-uTY`gZ<{MkHBWN;` zNl=hd#msI19DvaP#sDk;696WUY=99uJiImsGwh$N)Aa&tJpfaNHas(HW-vC!05EjM zF0*FFC;;XRhRzC5+jP8a!AU11TyK zs};0{jbjRpo(w}3QjI=Ei)l6WxrCB2F(Sc&Mm4vr+!i$)U;JDhkS!@8Q`|)a=-@i21y_-pn@bqY)>Zv zLm*VTilTdA8XKGtQYx_q7YjI!iGzE|y_3=LkYZYk-zBl|T?QhQ~XiNhnS`s}cwl z$C8~v?W3G!Os#ZQU~$7Ma=2(Vc>)1Bajo#vO?Ek1N5Gww>EP&NJkm(VLf$L8i=iEy~L_G?20Ee`x;cvO|IA^i!pAElYhxuQkC7 z({@F!94idNQ>N+_L|b2vI=e+%H`mcV=Zdrvi!UoHgo6aN>`tnT+vzPnU$7&R-DzeX zY}K5JEY{m~o#X0yuqyniuZIke{{CpOb%n+KmW{^~^_Skd%=5S2mzC4d<_-srC%1>b zk2W%Kbf59G~GX?)-UK#ee-Mml(iL8oo%kJebv*@J=H1# zDN*wWF_{3@;U zbmr;F&z&lNu9+ly)Aef!?y|DnHZ`WP#KZOCoOjhPw+9#3-w7Kps@!S$G8@Y^JzxKN ztf#?QGQ3OmHtRuLdFdDc?jxTKbnh7@8GPR0BGaFkZ{+rP zpf%)SfcDIv4}0oYw@3afW>>X>)iFQbWzWP3ZLQxIT8quPyCbLp`omB2B#6rEMrfLUo-odO53Rt)qKlje(rB*Q~naUTA7_r-^&O zvMaLubk7<0$Q|DqXZNiSi9K~ftCy8GkQMo~cli&y*W}!8v|ZW$a&dA%Y{7&}rupTf zJDoMQ<&7_XE`~QOgbN$i-Ss0R6etb?=09QalJjlH%T*91pTX&v49) zN0U_#GrjVrSE%=#%#Sdup6WB8v8^<;v*S#jTOs^o%Q*MG6Lr5ky&&xRBNVTSxD~FbiC$hA3=}zC=M#sFY#ojWmlP zDUO&Xl#B&64$AhhCTOJcPfz>*qF--P@}Vv@q^2K-(ZCfki0G5H3TsB_EX{|8^|=B| zE(ewVi@4!o7rzp>F4!Tqfpj%4R$>wjhek=|a6-NyGIf3lxLAV85nyB(f(6qfVY4*I X;;Rh;Fe6v17(F8Zrmw;#gAnvT(_jIS literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.SSL.beam b/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.SSL.beam new file mode 100644 index 0000000000000000000000000000000000000000..88e89fd1aff18fd650556c9d876d37510c24f612 GIT binary patch literal 2872 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 L-*1NH5Cr`TTEzH& literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.Telemetry.beam b/phoenix/_build/dev/lib/finch/ebin/Elixir.Finch.Telemetry.beam new file mode 100644 index 0000000000000000000000000000000000000000..2c80c44f6ecd76f476eb55bc120de92381786213 GIT binary patch literal 6828 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 SJ}+6#2$&Zz0x(!8F#iShsGL0j literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/finch/ebin/finch.app b/phoenix/_build/dev/lib/finch/ebin/finch.app new file mode 100644 index 0000000..eaab183 --- /dev/null +++ b/phoenix/_build/dev/lib/finch/ebin/finch.app @@ -0,0 +1,17 @@ +{application,finch, + [{modules,['Elixir.Finch','Elixir.Finch.Error', + 'Elixir.Finch.HTTP1.Conn','Elixir.Finch.HTTP1.Pool', + 'Elixir.Finch.HTTP1.Pool.State', + 'Elixir.Finch.HTTP1.PoolMetrics', + 'Elixir.Finch.HTTP2.Pool', + 'Elixir.Finch.HTTP2.PoolMetrics', + 'Elixir.Finch.HTTP2.RequestStream', + 'Elixir.Finch.Pool','Elixir.Finch.PoolManager', + 'Elixir.Finch.Request','Elixir.Finch.Response', + 'Elixir.Finch.SSL','Elixir.Finch.Telemetry']}, + {optional_applications,[]}, + {applications,[kernel,stdlib,elixir,logger,mint,nimble_pool, + nimble_options,telemetry,mime]}, + {description,"An HTTP client focused on performance."}, + {registered,[]}, + {vsn,"0.21.0"}]}. diff --git a/phoenix/_build/dev/lib/hpax/.mix/compile.elixir b/phoenix/_build/dev/lib/hpax/.mix/compile.elixir new file mode 100644 index 0000000000000000000000000000000000000000..c9f45f0df5deb05d435a896d697bfda931f37b7e GIT binary patch literal 4882 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 EOXU`8R{#J2 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/hpax/.mix/compile.elixir_scm b/phoenix/_build/dev/lib/hpax/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 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 aex}`5(j)W$68cdfS#2joBFxZ(H~$CzFEsQ3 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/hpax/ebin/Elixir.HPAX.Table.beam b/phoenix/_build/dev/lib/hpax/ebin/Elixir.HPAX.Table.beam new file mode 100644 index 0000000000000000000000000000000000000000..240c0fc9a3b4978b7a60e1ca7441f21e1dd6e3c1 GIT binary patch literal 28192 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 R;@`OyVc*dg{U61Z!6Y06d;tIe literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/.mix/compile.elixir_scm b/phoenix/_build/dev/lib/jason/.mix/compile.elixir_scm new file mode 100644 index 0000000000000000000000000000000000000000..58597eb8f5bf2924b98b4558272f66872a8f9118 GIT binary patch literal 39 ucmZq9U`}MrV9I4+U|=)UGqlh%$!1_OvMA?s&B?6DEYkBxt&|B+-Nb0R%;GYf%eHKxL~Csw^Tx%2LGkGYrW91IbLBNeH;IC@8jy zRV*kXB1?U>f{42U)l%H01*tmEO!8|48(wD{iM-VXKze-)aF5-$FjPK^+7oCP8kJlwj>m~~ z4S{QM1+HS7|3O=}osl(&)-naI!?dv}uu2EiRU_&+gz$|8M(Gp?+xicpTtZM%D6*4D26DV`}G8KuX7FV0$d21fh!TO7lS(bXQzi|B zKocts6o5t}rGsa>lwk=bLmeSn9!tO*M=PO3J`~WZy&1P{q+G!Tu6ZM^LCU2BG)uXb zpt%8nV`$xl0=flPD4?+gMLcsxG0!}jA+T}eS}~@8p)}ADAlc^9Krz)?6gmR1wIhvf zS;P|pu<#{V2*5xK8e3=tTNR1{*hWlaTNm-H0NBb1c9Xg>Ld9T3n?fl-*n-}OBAzWk z*uE5J%MiGWA*ldz6hL1<3>&D7VI$_+(Wn({jVstuMsi0&H1;0Lbv8XZY2Ipjrx3XJj!!J2OiKp3FqLp51?NVHy}Q4UuB# zni}H-rUO2!FIZp(g)zhcOiKb1th3bMDVTP1b=Ts?ShJ%OEfm<*DQ5tWlLer3JQ)Uk zNJ0&m2tnY4{?8>E@DkrBLC=hbRV0X<5M1%+GAgPpHGvg9a5FSlgGH^`RrWRd@p1t69Gc*&O$B!8c;&YqkBcrS9sFK2m&~h=M^PQ^~t9mZ=<|nmC&VDoXd8=irx7X6^CMo2! zje59q#`yqUinZsh$+D_dKX|-b?|@snto*rq_=2#WD>ECTBSrk~sjUzGTcWHcYqw~= zKm1E**P8r0&z$AnxlPYEd)+Qx5;N<3TnxAK-nDxBuv0!?Upt)Rq3`Osyzhu2Hm!2w z{xkQ#y#0jCTwl6B|HWJ`Bl;U3^g>;-DaRdY@~?POoxy0#SkUP*?-|E5s_VSRuMZ+y zX8VQgkZyiTv~%k_%$g)c4R)vZhDRjNAOC&kttr?CG>L0fb9qB;f#1x|XE|?u@!=-B z<(_<^(f9N0kxh4hDEl$2{GF1h_TqafyGvQ{*NQEHZV}d_ybh+FDbFsOHub(_qv@44 zn^s+?<}AzO>}`4M7dzH79$%}@ynO0(jdzo_~NJNU4cvhju2klQF$`LYc#@ zeHO0jjtBVGylFlOqxs_9j}~-q_;o+Gxju@9iF|uScg@opvv(CP5uQHM@OI+(VOgi$ zm_;KFWq-ctGau5&<;uzH#gB1p@f_BnbdN{-L?8D&J^o|WYHsT%YmVc?RBfpibG9Cv z{&z^C2^X>X=bW3Z+6XBh@ z)#3M6Oe}Req(7i9gZ3ycPj0`RDT#E6y!`vL8T`G?`MX`yFZ!O_bns+I6w~g+_&dL! z%l2v%Zul<6rjhjZ_|#%lyMNcMmeSqJIkIZ=kq@`IpUd)#JJ=Tb`F|(3!Q&<#44BZf z97bpHKbSn$KcE&)%q#agz3vd_zFFn?cWT+d`ae(07^)i8F(BbM{r;+|M=NwPqCmqrEK-wt@qBi zt0JYIqv_?HaAN&?^>wXpe~=ry7JjlhC~MaorB%^yHh~-4f*}9Y8OadD@}}ybIbyh; z%N2=;A{im%DH1Knt~9-=@up2x1yIfba-clHv_1%fL=ym?2`=v7jty`CMK#80Q)LCN*))waL5)Icd6YP~_qGALw}(#G4%->{pZhBXGK zBr^0SxCWFtgL_$h-weh<9I6E{n4Z+H9aF2*sF42mSPB(RB1(gc-|Q`LCo=kyWt3+E zf6>RUi}=UBc4u0fME>jE{Kx0?-#isbPzd;Q0&Mvd pK>a`J`_Tjt&4Lrkd7l%_iG-{My}w7MX{dLH1ERif>1Mr<^nbuf^N#=k literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Codegen.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Codegen.beam new file mode 100644 index 0000000000000000000000000000000000000000..34d8ed1967086b93e36ebe2ccc0c02ce42ce7b90 GIT binary patch literal 9272 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Decoder.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Decoder.beam new file mode 100644 index 0000000000000000000000000000000000000000..c3579ff69126c4af443fd67cf10a9c70d47e01f7 GIT binary patch literal 125176 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

    qK#Ioonel_7 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encode.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encode.beam new file mode 100644 index 0000000000000000000000000000000000000000..4f58e75324064c210b9a4d3c726bee302fd255b7 GIT binary patch literal 67784 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.EncodeError.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.EncodeError.beam new file mode 100644 index 0000000000000000000000000000000000000000..a9a7c04963ac37c6798b98cefc2ed7f851065d9e GIT binary patch literal 5036 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 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Atom.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Atom.beam new file mode 100644 index 0000000000000000000000000000000000000000..99cf5db19151a4e126fd4128cd4faa49193b4409 GIT binary patch literal 2520 zcmb7G3se*76`o0ugz#`6NYJeoIV#qb1XRjPG{6EP&jliiXb8y!CL}X)G9gIS$|82D zyJ`_1xVS}DRIH_dXbX7OpetLg@>oQCaKvo|&gwxPwystedM5&N<)Q|G)SC z_c8zf-#d{BNxleT*AW&G8W+mQ0uTgUI59CX$e$abCGrSbyk23TNO1(Iq*OR94rM6a zZn>Nw)s$RbpSp46wMgqI+fo+wUJaZ1VtJ$ zbP6R+8GL}5p`%nrEuLXuXrq$xAqi~;PHPop)<_o4$R~vsPpm_oUMrXTs4054o~9T| zNoo16GeuZyWwL>0;FhTQ!Wk5$3Q(y1krTeFH$iF%5?6Uoxs&*Mzst2`4O|34!r^lO zc?Q4$>{ADr3*ezx8NzY##88i5?qLz%Wkpd~QIater)3`*ONuHZ>itk3=~b=}l}cUU zohXe$fMiIcFd%v<2j07-Tp779lk=rM~QE?DN~ z8c5bBN@7TL;-GhP-g!;)`+t6+Z5leO0l8f!o~_6wC?jprGR=5OS;gsqr!$y3*)y+U zeZ%=T+5hN-Yc%1}q#B}WosN%}i_-?UX*mctQ0xPXc$D69^H?`Frnw{~H|P~6Qf|Gm zv>eh8?@K~$Z)*^7*4=Y7#WJah;XUd_-zf4qY}?Sq9rl|_>`y! z1*uRIYDqGsW=yb3V#uZ_h9I-N@m!o_B>HR$Cy6`>)Chw_!`2mvmdKP$ZWS%Y^I)?+ z$jl;OJK_ry5yW<9UipcX81kVHc5(Uj{X<_xJU}8uAz|K6_*+z+H3HWy_6@7**Cn2k zCM|fAM$Ep~`SqpJ_1Pthvj#%iK9djpL&teYi?$tpnmw^Q=HOd%oK2*9jrc*&cuU-p zLw@2i!(J+ex1mIFJZ@WE(I-QVV#h~o?{9iR#RP zMNTi9$CB^gOs{J^yJM@{TZwA@P6v0{nfzBzK2O#hS%V)6y_0q)Xj!Sa{0CmYW99Sr zO0lwpbyQdT(*&=vnj3<(4h?nDDW4SfUD=o<`q$|7lBTomS<#`UkIVc!%Fg^&eD`Kc z%eT!N?jOj#`LMjOC+u>*WA<3{z7eQmmQ+0V(%2^Bqye22UW&>`a* zm9Q|<^VHK#1^#ty_Cc{9`t9IQj_U?qEvW3enD%`_eDl4(1jsix`4)J4w0(ZDYX0(n zk8Df{-IaE3@KT^`>B(nzYA@}(wj?e!Xn2?CQS0{aBEJqu+BqsBo?=(vTv18`Tv})L zT%nbD<+_BJ_-j5`+=Fk940E<2M?6BkojPY}ou6gTOVA9i6y7Jj1_h$8qLGCeZ^qlt ztEvLOzdvf1zbR7}{OtImXfZc8)bH`K+hO&qHsqYb${NduI?SD8Ew6(()xFxNzJXb* zyVNm(IZRdhtED%5xt=d&B`@jm;sz}C@ajMKA831DS5Q$~l;7{k4@i0B!;5(nwYoK_ zdtPMyiEr-Z%bXUUyA)iM+-cjaXuVZ_tnvIlZhy;)8$o~5cHP}%``riaPnZLHoH&|I zHYPLwk2!6Mj&S+@ti3N%<#&Vmy}d`*4xjlo^~18Q@y!{w!+pg)!e0)A^wRI`h~0t- z#}5TI#Wq|!w|p&P=T!U_szO9wcn*A(J%w4?l2ELy2B5rYG(RnW zr}F)uw)s=V^?x~-xmH85gFvS{%1lMRE@x|w*^Jl|E+Xky_H1islX l08ZSojrjd{{h@nT?qgH literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.BitString.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.BitString.beam new file mode 100644 index 0000000000000000000000000000000000000000..763df03dd9d4924d71557f7d3ab73d0be8e7a74a GIT binary patch literal 2916 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 LGcIR8f*}6^PiE)8 literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Date.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Date.beam new file mode 100644 index 0000000000000000000000000000000000000000..85968dce929cd6fb1a71038a1c43ecfe4148d511 GIT binary patch literal 2596 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 X_s?@L2$$vAxISV4ch90eg9!3(6eo## literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Decimal.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Decimal.beam new file mode 100644 index 0000000000000000000000000000000000000000..3c4dfb88fd922cd8f42e2e33255587aa861dbcb9 GIT binary patch literal 2608 zcmb7G3se(V8lFjbgkWGuAb=tww!TRKQR_Q^L7*rqP_^wEhGYU0l9`;Di2*z!ir^!5 zcpIves8?QMxL=x>yy<{u2VNd+eUG_ndF;z5oB;``!QE z`~P=h5*LOchp|l)HQ*5dU z*D^F43c^$qt+N=3RF-2bS}v3#jj04<#HsYh=>(_gQ`(t$LX+93(S+)0CeO^!9Id5| zBJZ~?^0q_hSZgX_UwaWpYk-EN(yMLm*=tBA#lwl!nO6`t<6p4l{KoI0t z00!X8A%H)?6~)RCfixIHgQf|~d_~gmf~bOpmNbG%S#2pP_(FYnA{weXDU_iql@z}7 zRdW!iQdM&>sLUz>eDhR787SukA!v~cChqbF2ieuB#? zu?(u)U?@i)mtz8{*gFUnVS^B?JjfNpFcqd2&IuB#-GYTeDI!BfUi@rgIf9C$JPQWa zvOW=pioAd07Wvqvz95y)koce?UwhvV`hGJczCr{^;+SOK`8boAuSWwwibwz+00BS- z@ByHJemSbnvfHab<_wSnc)hoy4HY7F^!YjXJ@y3fHtqmk#f!2n@nyEX8x96oyP&8ecSF{5G}ZN#UV&W)Hmq^loWH z2EL4>EsWjD`qnGU8xAadz?1%K{`N6EHw1&#pFtA3~Wdy@Q=w%|p zDT+`S=t`UIp~zD?S^X&p4Kr?~G>#BvG(fE-Sk~&MXJ`|M8N%ubR(u0=gc%2c2MBNr zgcU?4L^llGlZ z)O&oRjOne=tdunD%5*!di{&==+@fl=Kabd5I<@`Uj@aDR#!Z{1KVCHEz@Em% zofl5spH{1Schbp*jFiA%vY&r=t0^Pmc(;4d;j|R5sizC$W+r94Yt}EF znKvOP`=G4!i;kja@5$A>f5=)pMY(@?sh>qE)iu1lf9Zupwji&h`CD=62jbWFhPNv& ztu3Fw__5~J4voit+d_13c(Hoc+?c@eF^b8BYjS%wWVU*j9g7T^v|z(uZMw>cg=s$c zr+$-j>l8LOY*(`;`C9NhQ}%hs4_kf3<+Gj(#rvgCSIN(5qGHaR{M_fCAH4J&qmSBQ z+ursUeO16qTf>N0zZ>LW=Jk>8%+z<=YgC6f3dKjq7qYP8YpuJ*j&}B7e(1;oopRI%j20-lmXm?&x1l zDc|bc5qP%ccEy37-Y@rizG^OB^U;_g$DYf?chI`+|Jt~|Y0Z$QkEVV$>$q1}d%?ki zjTQd)%4d%42`TS>b?PUV$r~QJj|!YPpJ-~LB-{7iy}CIOp;z3`e7dl-XZ#Jr=-JIR zQ9((qO=bEOyBD1yd!Gc>hOanyyd`qfxvqoFk)Pbza_YyTHJ;g|ZFoh1Ztt2MH=Mew zj+9ji;{u(LKHVZl?}a5V1aIGZ?jU)aq*?Y&=L+7fbf`y*O$YwP8*tv}AW zczTac|>uQd~K)T=sHWpC!@Y@(TzM@nc(qp*QypI z>O}YJ?Mu!?v0X>H-2NQic&__OTU^P<&JXhU)D4YrKYM-g{^BUzE~X}0SlMyq#aO}a z>r`URMfa>-7q>81I^&Q1yr4wuGW&sNT+U`&;?7m69%ql_JnQ^Nvs@(p=*vZl)p^k! z61MuQm8TS2_B4c+JS=Ny*vpJwPvY- zvh9cZp_A(x+x^47pY{2uiuJjR%Q{?jZnjSmbyjpH?8=^eh+J~A4Wm?<|~KVRhLcSCQ{pH?1Xc)iMO^; zkjNYpK>9Nn{#gItneqReUeup|{};#G(>dfqSnI&!^9TOI17&x+Pu=gY)rlh*)7xYY zSNjbejvGmqvu|65@b^Pq(n!vPo8jeyf*=X-j{|!<2GCzb(6GO$QnwDbyNJh|c^8z) R*=Bx>7{I@=sAn&N{0G6pdh-AP literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Float.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Float.beam new file mode 100644 index 0000000000000000000000000000000000000000..680bd08482e3ed3bf73e11730d127563ab3ee45d GIT binary patch literal 2524 zcmb7G3se(V8lFjzge-wTcv~wXFYAE>JZcMe8v+55XAvx2>n33`fyrYgolHm&Wi<$G z#aC-VL9Ns`SbLBn7NHcY)v6#U+VZfjJ;kDHZ9RaClvVcL5NJJz?m0W>eDmM?{r~;{ z`_H}izZ0L95rH61H>9$dlo%%KWduP3CnhEaxqdPoVIk=76-pyThRaBdQsH!XypB>b z8{~3=R8w+!wUS|IBFDtwMgvCa4TKJ_R^bL3$CM1Ns>3Y?ie`**y=w6ewTZ+Sf+CFy zy%M7-qZp71J*6_~aD|bfO&B9437rC`bxJb#Q7+ENCzZBHFreO`lgq_wir!$LDTcx* z9oJ)~DYn^3+e{U>ZQfkr43_C?m`mLs!f-vp2vSFoxGHQapeQ2jdDfOUU}M4OKoH~s zfB*nKCjoo`IH;f!VYvqgQ2%Ilxi{B6vP4>vVambjEUW2*k^{2(#i&^F68S;>G69YuBVOl0j$@n zd{30?ZR`7jzR#pi>)RHMt&~uzzcqK~% z)LzAU@D^nLz0+FP;oLp9(EmxmyX{gWnZlsI7oZ0KxOOm(j~%e>6$5rSkd?MLY~Y!l zZzN$%loTL0rQhavtb6Z7+8bj;!oT=uH9+r_gXbyp3CcvQ z6`>@RYC(@V=`%o46 zX0vDZ@!rOUJO|$+y*I*6?>_rcO-A!*nrY;x**-x_(;`3qS}UL?LPS?)|I9`gD)+ZbtWygI{5Oe1;X9kugTBtcRb}JbacExL$Cx(NBzqn+S1^Q_!UTi8{F2>zcnAbHGR`ESj>-t&prB$69H2asz*)@`9JJlQg zU7lo(C4L^ctL{#D=N0QeN|I}Ke%A28(Y0d(@^rGasN|BruH%99rR+mI?K5jZah)rF z%W!+hvD5blA2$ofx(4pv<}>vv<=YSbv$13%A!|*~MdR8SbLiRGU1LoL%E}uob-$$S zxjUM#>Azv!C2d*z39+NF_^IDV!z{PnJG}ST<2|X?u*H6bea%T7BURU~c2_NJt@`fU zfwF;t`1rfPh=(CRu=={!eRF}c zHE#KkuSW67kkuvSi#fNx*Lo;=Up(0T_|4I@<;};)g4X@aBGyX9-ZhU8&k6hOQFdlb z(cdm>`>h@;?)B|$toGstr>u_p_4tyOZ6nvWZF@Ve=oyE9ihUo6qc9^lv_iP2(1Vt} z`n06fb7DbC-}Q=L9bMY$mkY{b8FcmesHzJ)`^MVi8v8HZzkJi+C-JOXKauNI-}Tm$ zbra5)QkX%7i1Yu?gzwcQ@NIu^{TxpiWD>(8FcRyH27 zE}I=-MY9Spr_ic{mM-h zd~fl+AJXS^IuBByJU*`5=1uUoQ zmlB;cVH=5Dz|R8z2H+Y8qd-}P!mj413P`1%z$T3ylnkYZ)+Q1ZD!T(v-ZYv&*FRtR z{!i!Jsp|T_BFtQ@L8SvToxW23BwKLp*pi-9Pi1R%U~pPL6K7BKc|%)0PX@mr;JYmV kn0mONVY>(2oxXHxLtLJ(nLwFYV1Q$I0Ps#mT_+IaziA?16#xJL literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Integer.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Integer.beam new file mode 100644 index 0000000000000000000000000000000000000000..b176b467aee0dfc76a4181049997f49872acabfa GIT binary patch literal 2536 zcmb7G4OA0X7M@8UgkT^91hu9F6&9)xeio2lgODo!E`B?-wS3??%kdDTrGX#iiTY!s0>HRs1=^mTCnp`z8c--9z`BopZiEN31aY9@L*v$v%;0l4=7q+l&a50h>QY#dC>_;a}ew&?qWK@ zVlf}QH;Feuppl6;@Ia#zGr)VdnCS$B$wCM&WAV64;40eWKY4ItIP;#Xn8W*;ghJih|X>u5h zShJfiXXFC0OQ9CLdFfgG1&!AhedYGP@W&M;ee0n_TtVAgPFnz=_m1|n!~(kS5)IBd zXpfowFo9)e9*NODVT=d$4p|wR_DzWoIF;IbYtOCC1#;VLBuAcy;(EfYWmxd2(u(s7 zo{wPecrQGM_6?H2VE_6t&&`Em;xH9h(dGFy+TTI0~2jq-?Rj5johN~z8m?a`}aGXLhwGWbqV3bIggCiJf6oFzvigM{1BhsMR zqS@^td=Vqqu-I%h3brJva1#WvWX8(l=|k9%-=b2*DRdw>rWIy>^r|a+a^=*GNUqm2 zjaRTBq0A$uy!&o{`v=1hwvPTGxaHZeR`omXF!t{1NRXvrE9+AQPu|qomOnkexAV)s zzeuJBBinkF&0QYk_3@;!&iH`Dv);bJWle&cHDB}}&`(a;oXtGrmhq{RpEDtlM2M8m z`Xi6Ja!x6HHn`{4aqBbhe?l}`ue8d#7v}9T((1m&wK)2U$KA=BX+K^qXp(oCvb|Hf z)yKn>to6sxCvAiI#R4x^7Za=JxtvkNl}MJwU$CwA_$bo17ZIxL`FlcY0y;=xXt`}&tvQw>KO zmU>73l-w%j+e~kJ5!Vs0S>yZG?+;tga7?Ko_d6VGcTPL|pL)FJ)m6{J&WhRu_mMRN zMQ0miw}g)qm`*Fcw|#h~KXCf1eI0l}cM5Yj!gKZI3AdrqnbXZtfB7}uDhpqY)gttvH$p91eOJpVGSn|B%|$F?stB=>XE6xe%kH(G zJxC1Cn!H_ITk!H+`r(#P@88}S9?PqCDM>nddGc1nvWcj{w3wZj53))weizT#22Oq~ zt{_3;I@9M0t}#|>Q+kuT{dh@(1BZUFGWzr}vAvat zH$D(n9eP(6zW+w^?d7b<<#l&Vw_jds)m!fwDtT yP+wOBH9Zmhh=A|r4KVkxLC1U-@@>!CwnO%>*G(Wy-=U-DZ~*9g8FrX~pnm}~0$`N@ literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Jason.Fragment.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Jason.Fragment.beam new file mode 100644 index 0000000000000000000000000000000000000000..752667c387c438af0193ef86fae423f08c237a21 GIT binary patch literal 2608 zcmb7G2~<;88h$T92&*Asa~o5zE)0;Mqg7KnVOIfB7Ewn`UXmAhA<2vHy^t^rWmh|h zL=ZJqKwMf%9SMvBqpf3w7ApsF;pk~ubkG^46}JkO0X@upAz{iKoO9-#^S}Gw@Bi<= z+~vPFDn20?f}ECyMTW+OQpu|!2%bMNG4TV-FH(gWFd}FJLgJdBNR14aqqbfYfuyNX z4V5PrV;Ti679U3_iom2g3MI8NT&=}a=y5r!B~Tecp>i{7(BcF|iq-O!MukozqcB`U zO4Nvqz)1lBC2Cx*Q=t-)B6KoJputoUlu#j>wC8CkC7u*oJkbu-T9sHVP~b$KmcS`o zhO1Z}GsVjCoQB$BmY|kY%)hY8@(9Essva^iyK z??BNDer{qjI8Gisn8iLe!mJ)iVY0n>P9A|8e z6`KvSxRVgzJpK~^%hQ5-0n{tR)e~lUTl(Ih?-Szc&4dyuB8i@W^=d8M&IiN*btiy42s2Nzl_}*DA9g==pk0# zD->*Qz@M=AVFJs{Oj1Mpgf(pFN%VK|{(mWU`F%J+jn1peRRX!A6ir7mFWsyMF8Li07OUO^l=17o6g0a z1o_I)3}`(+nFK!hatzTR3QWOI#1)htjN+5&I8I@jv_LcyR1dy39Y-~ofe$JL$yd^K zhOfe;{K;h_f=~ms4%Vo#DstP2;`&rppp@6Df#ljKemO%lF+nP^A_WFQ_=(^z7;5!4dt9gfq_~7s--5 z2=49xzQJeJk)vVj{rs+Gzq8Y~GADQ7b-m>1Nx?S7lJomw_P9`o-Tb9`_l@gaVh zU%J5|m+_@+P@W*6zd*_^|c)fS$SIsA6t~Ovy|A_Fml}c|Y$`WzDGo67D|plWXF{XGZsHcgA0j$LIESY_2Njw&o14hqhjm_)cRhvx=-~RHG#Wn2?@S2kSxgYqLQf{8+mBxKu^I`7wVgqt$ zOU0Yekp7mImnUuyH16G;;=a=@@^Nu(%)s6=@h!f%5;J!7V5iQVYVI0RFM3(fmAW;g zw=>9-5UBPbBs1mkp3W*~p|D?fVaMNs1REOK2dfvo`@ToA@$kX>J*(bbAiI$D=^g($ zi1wKD@g-c@Ap32613F~d@`_be|K1;<2wX;jgUzA$8(eERrjC!<*d}1d_1rqtQ1mst z)yq-3Yj2RGWNUP{AwgJU`ZiN|o?K(Mky*!Rem2n==Jm02&9j;T9;s5{sYe%G)qV9r zo!5>(ZCm%SU0LekyP~qhb?$e+ySwII1h4Xok(-Av7Nm9DNis*JT&*lCXOKLpc*zf; zL6?kf1)o)Tk37AZbvlrJusI3eVGr-=nD4 zp(3`^Wa?<@+w2}t5%99FIkn=EasO~cSIfFV-tj}*w8DKing$s5A@l1Wm7YthZh z@7?p`@P}hR-)Xr2ufIAke*U7uAe4UYb>T|((}J?v71GvR-?GKresf)Yd@B2ocOfX! z5S{^MTqd zFbb4zy0MBKC}LIvpad$FZE>*zvEX?F oOe_Or`&fXn+^ZbNA;%|>+w|HCgh^RidW;Jo`n|)LJpqaS4e$kofB*mh literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Jason.OrderedObject.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.Jason.OrderedObject.beam new file mode 100644 index 0000000000000000000000000000000000000000..b05f32c9cb271b932f60dd872fbe1352545acb3e GIT binary patch literal 2728 zcmb7G3se(V8lFi&LgW!bAb_>TiV77-z~b8Dqfv-F%1Z^^MKKJ?1O}3sI5T-rwNe7^ zii*@DR4Py^B6Vdw=;GVDu83XhTdYg50xCWb*4MTwOD+3Pcyu|(dd|){-`sou|G)qL z-+Sl(<}OHF6pA3i>iMd9@$=Y}nFxZ$4h#(369lOAgq5H}VljpyLsX=O(&EFTL>l_I zHZda`*RXkNH9_hqwYnN(S(?Z&u{dMYPzEER$E&rtk;XL`i)$NjtC6BvMs3iBm*`BS zh9xMHNjG2`nqm|nOgB(klO9iJSlXmv6(pfg$7wxAWV*oV_OTy~edf4I`N(3H zPUaRKV=!`U0Dup01-Jot0B?YFs6Q-6RaU#b66B5m9{>uF4E3Qw#6x4w2e-fO0M2GC zfRk~3UL3)4aiaj-!^tPw^jt5CXAuk^B8I|f%-}bH@v=efZ8N}Il)U0ne!~TqmIpo`T0m3rQ!U&#d!eu0k}9^e%!foeeZct3((ftV-^`F)Oq3KM3!l!IR?hB{ zb}Y=ZJ-ebjnGJg93_J@n6O@UzTUlQFIdg_136HE`xCCB5hl>q`VtGR)WM?B0F{BQ% zyD*ZklNqNODA62*|9*%9oH$WNd&zQP9W1^irDlwng;WofI<1B@G&sXpoOLv105OeQ z+`)?LfDSieAaDZ#W@0I>f`JXV^^9R)%^ExhNs^~95L2!tFcQ-dI{9Ks$68>PoXMgn zmLM~OaWhV`a$^>SlY~_c$yjP#Qs8?H>aaxNrT(RFFK#{=!3V9hP`}#bbZxYe94}^1F@`d-TdO)+oZJ{?*!lb>bhtKTAP9(!-xwCJMboYi|xOL>G&w*ScW z;yrhzzyE|@Se}!#dVFnCTlBT9pLT7CKGe96wBBzx3`d&~}9+ZMfF zCdO-4tb4IzcbZ6Xt+rn}<5A(7CyG-Z^z60UZeL31QY{mn=+5<+`O0zJ&NJ(=pL;4L ziPG!MX$O6OiAqbm_DxzEW?9gBxUS9;p0=aZcA#nLiQ~&Yh@9K=G*pwtM2tq zu0Pg2YP2YBTnRrQb9M{xD5h$4`xJw56(>ditGIqherxx^g1?*hKz$LlL5 zrG2<%*(Y`DLt@*CSH8+~tnw{6|J3XBjnclomdAbn%Kzrr05ACH<+75l&8ZJN0&X4) z?5URRxu&_XwJVNLJ$kqPJ8jLun#zB-yPfDQ>Q69l0CmSLKN3_wXCk-w39JNeERmJk8Twd9By>V8AoN$I!kJgndVNI>R6E1bN=G_ ziw{)G146!@J-2Df#eJb)uQZh5|3v#`sm24hqgU?Tv?zLFXp41Uglklj)BWuZT~En5 z4~wKv;+j8?UGhMG{8{(TNax7jo}iA?=Ms0?s(X4($1zNt3&# zek8v1BKm=>y6CT+ZriHyrpYcZ8un@GFxz%{w~%+p{rP=iUx)c``S)i&LOfePp4DE} zkTUk>ojI1jPi^rHz4bv^P4v|8p!!!xVQWz;)UC=Ikpnw)#0CuEf!nVlYE2fd$-!y0 zIg|wp)Z#RBr5GYYupHq=3>`G#GejoH9pQ!omkF2!l+QIoYA0*IRNU+&i-xvn^^V#3?&%m@i)bL{cizy6!ISVdHu%P;Rk2mf2i0Yv#<9v-#Q literal 0 HcmV?d00001 diff --git a/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.List.beam b/phoenix/_build/dev/lib/jason/ebin/Elixir.Jason.Encoder.List.beam new file mode 100644 index 0000000000000000000000000000000000000000..7c105c11f2576a6cf43a218a3a7cfa95e3a6b9c0 GIT binary patch literal 2520 zcmb7G4OA0X7M@A?2~Z#;1jrUF@?)_p1Z=UO6@!u@f=~r2s5OLS0uz#%I5Qz}g%$*A zS62_~u2@_}L~sQx0u@WUu*XBi)v8oQ7b=SEK|pa)k5~lk%H9cq)^q5dvvbZj_r34l zckg}k-n(z!PgoyXQ$cGKG)V->2qme)sGvBU zX7c26oKTZ;dAWjNC_LT3V6

  9. H%rdq6sF_kyc!y#b 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