Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | no message |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | sourceforge |
Files: | files | file ages | folders |
SHA1: |
aef54e6441dba601b4cc9b1a48b79432 |
User & Date: | rmsimpson 2006-02-24 02:58:24.000 |
Context
2006-02-24
| ||
06:07 | work in progress check-in: 1283114bab user: rmsimpson tags: sourceforge | |
02:58 | no message check-in: aef54e6441 user: rmsimpson tags: sourceforge | |
2006-02-22
| ||
15:08 | no message check-in: 6edf1bc2c2 user: rmsimpson tags: sourceforge | |
Changes
Added SQLite.Designer/SQLiteDataAdapterToolboxItem.cs.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 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 36 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 63 64 | namespace SQLite.Designer { using System; using System.ComponentModel; using System.ComponentModel.Design; using System.Drawing.Design; using System.Data.SQLite; using System.Data.Common; using System.Reflection; using System.Collections.Generic; internal sealed class SQLiteDataAdapterToolboxItem : ToolboxItem { public SQLiteDataAdapterToolboxItem() { } protected override IComponent[] CreateComponentsCore(IDesignerHost host) { SQLiteDataAdapter adp = new SQLiteDataAdapter(); if (adp == null) return null; List<IComponent> list = new List<IComponent>(); IContainer container = host.Container; adp.SelectCommand = new SQLiteCommand(); adp.SelectCommand.DesignTimeVisible = false; container.Add(adp.SelectCommand, GenerateName(container, "SelectCommand")); adp.InsertCommand = new SQLiteCommand(); adp.InsertCommand.DesignTimeVisible = false; container.Add(adp.InsertCommand, GenerateName(container, "InsertCommand")); adp.UpdateCommand = new SQLiteCommand(); adp.UpdateCommand.DesignTimeVisible = false; container.Add(adp.UpdateCommand, GenerateName(container, "UpdateCommand")); adp.DeleteCommand = new SQLiteCommand(); adp.DeleteCommand.DesignTimeVisible = false; container.Add(adp.DeleteCommand, GenerateName(container, "DeleteCommand")); ITypeResolutionService res = (ITypeResolutionService)host.GetService(typeof(ITypeResolutionService)); if (res != null) { res.ReferenceAssembly(typeof(SQLiteDataAdapter).Assembly.GetName()); } container.Add(adp); } private static string GenerateName(IContainer container, string baseName) { ComponentCollection coll = container.Components; string uniqueName; int n = 1; do { uniqueName = String.Format("sqlite{0}{1}", baseName, n++); } while (coll[uniqueName] != null); return uniqueName; } } } |
Changes to System.Data.SQLite/SQLiteCommand.cs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | /******************************************************** * ADO.NET 2.0 Data Provider for SQLite Version 3.X * Written by Robert Simpson (robert@blackcastlesoft.com) * * Released to the public domain, use at your own risk! ********************************************************/ namespace System.Data.SQLite { using System; using System.Data; using System.Data.Common; using System.Collections.Generic; /// <summary> /// SQLite implementation of DbCommand. /// </summary> public sealed class SQLiteCommand : DbCommand, ICloneable { /// <summary> /// The command text this command is based on /// </summary> private string _commandText; /// <summary> | > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | /******************************************************** * ADO.NET 2.0 Data Provider for SQLite Version 3.X * Written by Robert Simpson (robert@blackcastlesoft.com) * * Released to the public domain, use at your own risk! ********************************************************/ namespace System.Data.SQLite { using System; using System.Data; using System.Data.Common; using System.Collections.Generic; using System.ComponentModel; /// <summary> /// SQLite implementation of DbCommand. /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [Designer("Microsoft.VSDesigner.Data.VS.DataCommandDesigner, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), ToolboxItem(true)] #endif public sealed class SQLiteCommand : DbCommand, ICloneable { /// <summary> /// The command text this command is based on /// </summary> private string _commandText; /// <summary> |
︙ | ︙ | |||
215 216 217 218 219 220 221 222 223 224 225 226 227 228 | public override void Cancel() { } /// <summary> /// The SQL command text associated with the command /// </summary> public override string CommandText { get { return _commandText; } set | > > > | 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 | public override void Cancel() { } /// <summary> /// The SQL command text associated with the command /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [DefaultValue(""), RefreshProperties(RefreshProperties.All), Editor("Microsoft.VSDesigner.Data.SQL.Design.SqlCommandTextEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] #endif public override string CommandText { get { return _commandText; } set |
︙ | ︙ | |||
255 256 257 258 259 260 261 262 263 264 265 266 267 268 | _commandTimeout = value; } } /// <summary> /// The type of the command. SQLite only supports CommandType.Text /// </summary> public override CommandType CommandType { get { return CommandType.Text; } set | > > > | 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 | _commandTimeout = value; } } /// <summary> /// The type of the command. SQLite only supports CommandType.Text /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [RefreshProperties(RefreshProperties.All), DefaultValue(CommandType.Text)] #endif public override CommandType CommandType { get { return CommandType.Text; } set |
︙ | ︙ | |||
291 292 293 294 295 296 297 298 299 300 301 302 303 304 | { return new SQLiteParameter(); } /// <summary> /// The connection associated with this command /// </summary> public new SQLiteConnection Connection { get { return _cnn; } set { if (_activeReader != null) throw new InvalidOperationException("Cannot set Connection while a DataReader is active"); | > > > | 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 | { return new SQLiteParameter(); } /// <summary> /// The connection associated with this command /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [DefaultValue((string)null), Editor("Microsoft.VSDesigner.Data.Design.DbConnectionEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] #endif public new SQLiteConnection Connection { get { return _cnn; } set { if (_activeReader != null) throw new InvalidOperationException("Cannot set Connection while a DataReader is active"); |
︙ | ︙ | |||
330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 | Connection = (SQLiteConnection)value; } } /// <summary> /// Returns the SQLiteParameterCollection for the given command /// </summary> public new SQLiteParameterCollection Parameters { get { return _parameterCollection; } } /// <summary> /// Forwards to the local Parameters property /// </summary> protected override DbParameterCollection DbParameterCollection { get { return Parameters; } } /// <summary> /// The transaction associated with this command. SQLite only supports one transaction per connection, so this property forwards to the /// command's underlying connection. /// </summary> public new SQLiteTransaction Transaction { get { return _transaction; } set { if (_cnn != null) { | > > > > > > | 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 | Connection = (SQLiteConnection)value; } } /// <summary> /// Returns the SQLiteParameterCollection for the given command /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] #endif public new SQLiteParameterCollection Parameters { get { return _parameterCollection; } } /// <summary> /// Forwards to the local Parameters property /// </summary> protected override DbParameterCollection DbParameterCollection { get { return Parameters; } } /// <summary> /// The transaction associated with this command. SQLite only supports one transaction per connection, so this property forwards to the /// command's underlying connection. /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] #endif public new SQLiteTransaction Transaction { get { return _transaction; } set { if (_cnn != null) { |
︙ | ︙ | |||
522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 | public override void Prepare() { } /// <summary> /// Sets the method the SQLiteCommandBuilder uses to determine how to update inserted or updated rows in a DataTable. /// </summary> public override UpdateRowSource UpdatedRowSource { get { return _updateRowSource; } set { _updateRowSource = value; } } /// <summary> /// Determines if the command is visible at design time. Defaults to True. /// </summary> public override bool DesignTimeVisible { get { return _designTimeVisible; } set | > > > > | 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 | public override void Prepare() { } /// <summary> /// Sets the method the SQLiteCommandBuilder uses to determine how to update inserted or updated rows in a DataTable. /// </summary> [DefaultValue(UpdateRowSource.FirstReturnedRecord)] public override UpdateRowSource UpdatedRowSource { get { return _updateRowSource; } set { _updateRowSource = value; } } /// <summary> /// Determines if the command is visible at design time. Defaults to True. /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [DesignOnly(true), Browsable(false), DefaultValue(true), EditorBrowsable(EditorBrowsableState.Never)] #endif public override bool DesignTimeVisible { get { return _designTimeVisible; } set |
︙ | ︙ |
Changes to System.Data.SQLite/SQLiteConnection.cs.
︙ | ︙ | |||
8 9 10 11 12 13 14 15 16 17 18 19 20 21 | namespace System.Data.SQLite { using System; using System.Data; using System.Data.Common; using System.Collections.Generic; using System.Globalization; /// <summary> /// The I/O file cache flushing behavior for the connection /// </summary> public enum SynchronizationModes { /// <summary> | > | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | namespace System.Data.SQLite { using System; using System.Data; using System.Data.Common; using System.Collections.Generic; using System.Globalization; using System.ComponentModel; /// <summary> /// The I/O file cache flushing behavior for the connection /// </summary> public enum SynchronizationModes { /// <summary> |
︙ | ︙ | |||
479 480 481 482 483 484 485 486 487 488 489 490 491 492 | /// <description>Enlist</description> /// <description><B>Y</B> - Automatically enlist in distributed transactions<br/><b>N</b> - No automatic enlistment</description> /// <description>N</description> /// <description>Y</description> /// </item> /// </list> /// </remarks> public override string ConnectionString { get { return _connectionString; } set | > > > | 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 | /// <description>Enlist</description> /// <description><B>Y</B> - Automatically enlist in distributed transactions<br/><b>N</b> - No automatic enlistment</description> /// <description>N</description> /// <description>Y</description> /// </item> /// </list> /// </remarks> #if !PLATFORM_COMPACTFRAMEWORK [RefreshProperties(RefreshProperties.All), DefaultValue("")] #endif public override string ConnectionString { get { return _connectionString; } set |
︙ | ︙ | |||
518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 | { return CreateCommand(); } /// <summary> /// Returns the filename without extension or path /// </summary> public override string DataSource { get { return _dataSource; } } /// <summary> /// Returns an empty string /// </summary> public override string Database { get { return "main"; } } | > > > > > > | 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 | { return CreateCommand(); } /// <summary> /// Returns the filename without extension or path /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] #endif public override string DataSource { get { return _dataSource; } } /// <summary> /// Returns an empty string /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] #endif public override string Database { get { return "main"; } } |
︙ | ︙ | |||
683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 | } OnStateChange(ConnectionState.Open); } /// <summary> /// Returns the version of the underlying SQLite database engine /// </summary> public override string ServerVersion { get { if (_connectionState != ConnectionState.Open) throw new InvalidOperationException(); return _sql.Version; } } /// <summary> /// Returns the state of the connection. /// </summary> public override ConnectionState State { get { return _connectionState; } } | > > > > > > | 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 | } OnStateChange(ConnectionState.Open); } /// <summary> /// Returns the version of the underlying SQLite database engine /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] #endif public override string ServerVersion { get { if (_connectionState != ConnectionState.Open) throw new InvalidOperationException(); return _sql.Version; } } /// <summary> /// Returns the state of the connection. /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] #endif public override ConnectionState State { get { return _connectionState; } } |
︙ | ︙ |
Changes to System.Data.SQLite/SQLiteDataAdapter.cs.
︙ | ︙ | |||
13 14 15 16 17 18 19 20 21 22 23 24 25 26 | using System.ComponentModel; /// <summary> /// SQLite implementation of DbDataAdapter. /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [DefaultEvent("RowUpdated")] #endif public sealed class SQLiteDataAdapter : DbDataAdapter { private static object _updatingEventPH = new object(); private static object _updatedEventPH = new object(); /// <overloads> | > > | 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | using System.ComponentModel; /// <summary> /// SQLite implementation of DbDataAdapter. /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [DefaultEvent("RowUpdated")] [ToolboxItem("Microsoft.VSDesigner.Data.VS.SqlDataAdapterToolboxItem, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] [Designer("Microsoft.VSDesigner.Data.VS.SqlDataAdapterDesigner, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] #endif public sealed class SQLiteDataAdapter : DbDataAdapter { private static object _updatingEventPH = new object(); private static object _updatedEventPH = new object(); /// <overloads> |
︙ | ︙ | |||
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | if (handler != null) handler(this, value); } /// <summary> /// Gets/sets the select command for this DataAdapter /// </summary> public new SQLiteCommand SelectCommand { get { return (SQLiteCommand)base.SelectCommand; } set { base.SelectCommand = value; } } /// <summary> /// Gets/sets the insert command for this DataAdapter /// </summary> public new SQLiteCommand InsertCommand { get { return (SQLiteCommand)base.InsertCommand; } set { base.InsertCommand = value; } } /// <summary> /// Gets/sets the update command for this DataAdapter /// </summary> public new SQLiteCommand UpdateCommand { get { return (SQLiteCommand)base.UpdateCommand; } set { base.UpdateCommand = value; } } /// <summary> /// Gets/sets the delete command for this DataAdapter /// </summary> public new SQLiteCommand DeleteCommand { get { return (SQLiteCommand)base.DeleteCommand; } set { base.DeleteCommand = value; } } } } | > > > > > > > > > > > > | 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | if (handler != null) handler(this, value); } /// <summary> /// Gets/sets the select command for this DataAdapter /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [DefaultValue((string)null), Editor("Microsoft.VSDesigner.Data.Design.DBCommandEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] #endif public new SQLiteCommand SelectCommand { get { return (SQLiteCommand)base.SelectCommand; } set { base.SelectCommand = value; } } /// <summary> /// Gets/sets the insert command for this DataAdapter /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [DefaultValue((string)null), Editor("Microsoft.VSDesigner.Data.Design.DBCommandEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] #endif public new SQLiteCommand InsertCommand { get { return (SQLiteCommand)base.InsertCommand; } set { base.InsertCommand = value; } } /// <summary> /// Gets/sets the update command for this DataAdapter /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [DefaultValue((string)null), Editor("Microsoft.VSDesigner.Data.Design.DBCommandEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] #endif public new SQLiteCommand UpdateCommand { get { return (SQLiteCommand)base.UpdateCommand; } set { base.UpdateCommand = value; } } /// <summary> /// Gets/sets the delete command for this DataAdapter /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [DefaultValue((string)null), Editor("Microsoft.VSDesigner.Data.Design.DBCommandEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] #endif public new SQLiteCommand DeleteCommand { get { return (SQLiteCommand)base.DeleteCommand; } set { base.DeleteCommand = value; } } } } |
Changes to System.Data.SQLite/SQLiteParameterCollection.cs.
︙ | ︙ | |||
15 16 17 18 19 20 21 | using System.ComponentModel; using System.Reflection; /// <summary> /// SQLite implementation of DbParameterCollection. /// </summary> #if !PLATFORM_COMPACTFRAMEWORK | | < | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | using System.ComponentModel; using System.Reflection; /// <summary> /// SQLite implementation of DbParameterCollection. /// </summary> #if !PLATFORM_COMPACTFRAMEWORK [Editor("Microsoft.VSDesigner.Data.Design.DBParametersEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), ListBindable(false)] #endif public sealed class SQLiteParameterCollection : DbParameterCollection { /// <summary> /// The underlying command to which this collection belongs /// </summary> private SQLiteCommand _command; /// <summary> |
︙ | ︙ | |||
248 249 250 251 252 253 254 255 256 257 258 259 260 261 | /// Returns a count of parameters in the collection /// </summary> public override int Count { get { return _parameterList.Count; } } /// <summary> /// Retrieve a parameter by name from the collection /// </summary> /// <param name="parameterName">The name of the parameter to fetch</param> /// <returns>A DbParameter object</returns> protected override DbParameter GetParameter(string parameterName) { | > > > > > > > > > > > > > > > > > > > > > > > | 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 | /// Returns a count of parameters in the collection /// </summary> public override int Count { get { return _parameterList.Count; } } public new SQLiteParameter this[string parameterName] { get { return (SQLiteParameter)GetParameter(parameterName); } set { SetParameter(parameterName, value); } } public new SQLiteParameter this[int index] { get { return (SQLiteParameter)GetParameter(index); } set { SetParameter(index, value); } } /// <summary> /// Retrieve a parameter by name from the collection /// </summary> /// <param name="parameterName">The name of the parameter to fetch</param> /// <returns>A DbParameter object</returns> protected override DbParameter GetParameter(string parameterName) { |
︙ | ︙ |
Changes to tools/install/InstallDesigner.cs.
︙ | ︙ | |||
150 151 152 153 154 155 156 157 158 159 | try { using (subkey = parent.OpenSubKey(String.Format("{0}\\{1}", subkeyname, _regRoot))) { ListViewItem item = new ListViewItem(itemName); item.Tag = subkeyname; using (RegistryKey subsubkey = subkey.OpenSubKey(String.Format("DataProviders\\{0}", (isChecked == null) ? lookFor.ToString("B") : ((Guid)isChecked).ToString("B")))) { | > > > > > > | < > > | | | > | 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | try { using (subkey = parent.OpenSubKey(String.Format("{0}\\{1}", subkeyname, _regRoot))) { ListViewItem item = new ListViewItem(itemName); item.Tag = subkeyname; using (RegistryKey subsubkey = subkey.OpenSubKey("DataProviders")) { if (subsubkey == null) throw new ArgumentException("Edition not installed"); } using (RegistryKey subsubkey = subkey.OpenSubKey(String.Format("DataProviders\\{0}", (isChecked == null) ? lookFor.ToString("B") : ((Guid)isChecked).ToString("B")))) { if (subsubkey == null) { DoInstallUninstall(item); } else { bool itemChecked = (subsubkey.GetValue(null) != null); DoInstallUninstall(item); item.Checked = itemChecked; } } installList.Items.Add(item); if (item.Checked) { DoInstallUninstall(item); } |
︙ | ︙ |