]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Upon .import column renaming, issue message saying so. Test this.
authorlarrybr <larrybr@noemail.net>
Fri, 11 Feb 2022 13:40:25 +0000 (13:40 +0000)
committerlarrybr <larrybr@noemail.net>
Fri, 11 Feb 2022 13:40:25 +0000 (13:40 +0000)
FossilOrigin-Name: 8b6ca9304bff9a5b2897a6517ce77e4cd32f337b6c849b73ead5f757228d8ac8

manifest
manifest.uuid
src/shell.c.in
test/shell5.test

index fbf77b3de8d660443c8db0058cf97d992fec7b17..855f924c602d8c40407facb989458ed84bd314b6 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C CLI\sauto-column\srename\srevamped\safter\sforum\sdiscussion.
-D 2022-02-11T01:21:09.366
+C Upon\s.import\scolumn\srenaming,\sissue\smessage\ssaying\sso.\sTest\sthis.
+D 2022-02-11T13:40:25.959
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -553,7 +553,7 @@ F src/random.c 097dc8b31b8fba5a9aca1697aeb9fd82078ec91be734c16bffda620ced7ab83c
 F src/resolve.c ea935b87d6fb36c78b70cdc7b28561dc8f33f2ef37048389549c7b5ef9b0ba5e
 F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92
 F src/select.c 3baa9dd8cf240654773c7974e2bcce398ac9dd24419c36684156963defe43b35
-F src/shell.c.in 14c6c05a25042873ebb011e78158d98ee360ca1564490e28c7295367c4b6dfac
+F src/shell.c.in 4368f3d2a0e7866ed86c2877a4d839b8eb9b855142677b26356bb0003b656ef8
 F src/sqlite.h.in 7047c4b60fa550264d6363bb1d983540e7828fb19d2d1e5aa43b52ca13144807
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
 F src/sqlite3ext.h a95cb9ed106e3d39e2118e4dcc15a14faec3fa50d0093425083d340d9dfd96e6
@@ -1392,7 +1392,7 @@ F test/shell1.test b224e0793c5f48aa3749e65d8c64b93a30731bd206f2e41e6c5f1bee1bdb1
 F test/shell2.test 89e4b2db062d52baed75022227b462d085cff495809de1699652779d8e0257d6
 F test/shell3.test a50628ab1d78d90889d9d3f32fb2c084ee15674771e96afe954aaa0accd1de3c
 F test/shell4.test 8f6c0fce4abed19a8a7f7262517149812a04caa905d01bdc8f5e92573504b759
-F test/shell5.test b85069bfcf3159b225228629ab2c3e69aa923d098fea8ea074b5dcd743522e2c
+F test/shell5.test c164da8b5e397b1ad2fae6ac8daee0697f064f7c0ea0882086a28860b88af182
 F test/shell6.test 1ceb51b2678c472ba6cf1e5da96679ce8347889fe2c3bf93a0e0fa73f00b00d3
 F test/shell7.test 115132f66d0463417f408562cc2cf534f6bbc6d83a6d50f0072a9eb171bae97f
 F test/shell8.test 388471d16e4de767333107e30653983f186232c0e863f4490bb230419e830aae
@@ -1944,8 +1944,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 7e3be36dfcb65c87a87344cf91c0c8f8d1aff0f2e4bcc23444a8f6b8ddcdae69
-R ea4a830aa3e422eb65f0e056f130ef8f
+P 2da1f8e45eb0cb1ead6049df6a31a903bfad5a7abd27e92cd3dac25fe355aec3
+R 3c587522ab1009a0f304c6f4fc9291c2
 U larrybr
-Z 218fbe1e74345194717208c07bd21226
+Z 6eda7b7abac4cc7637f7063a4d303de3
 # Remove this line to create a well-formed Fossil manifest.
index 36412660e53f89f0f878637b942001e3cf8bd402..3b9c4fbbf2c06f23461c1b7f3cadceb2d42d399a 100644 (file)
@@ -1 +1 @@
-2da1f8e45eb0cb1ead6049df6a31a903bfad5a7abd27e92cd3dac25fe355aec3
\ No newline at end of file
+8b6ca9304bff9a5b2897a6517ce77e4cd32f337b6c849b73ead5f757228d8ac8
\ No newline at end of file
index 3fb0b6dc376eaee2930c6e41d3218478e3442067..6bd271c20663eed6b7153dcdb5cab796cd60c2c0 100644 (file)
@@ -7225,13 +7225,16 @@ static char *shellMPrintf(int *pRc, const char *zFmt, ...){
 
 
 /* 
- * zAutoColumn(zCol, &db) => Maybe init db, add column zCol to it.
- * zAutoColumn(0, &db) => (db!=0) Form columns spec for CREATE TABLE,
+ * zAutoColumn(zCol, &db, ?) => Maybe init db, add column zCol to it.
+ * zAutoColumn(0, &db, ?) => (db!=0) Form columns spec for CREATE TABLE,
  *   close db and set it to 0, and return the columns spec, to later
  *   be sqlite3_free()'ed by the caller.
  * The return is 0 when either:
  *   (a) The db was not initialized and zCol==0 (There are no columns.)
  *   (b) zCol!=0  (Column was added, db initialized as needed.)
+ * The 3rd argument, pRenamed, references an out parameter. If the
+ * pointer is non-zero, its referent will be set to 1 if renaming was
+ * necessary, or set to 0 if none was done.
  */
 #ifdef SHELL_DEBUG
 #define rc_err_oom_die(rc) \
@@ -7251,7 +7254,7 @@ static char zCOL_DB[] = SHELL_COLFIX_DB;
 static const char *zCOL_DB = ":memory:";
 #endif
 
-static char *zAutoColumn(const char *zColNew, sqlite3 **pDb){
+static char *zAutoColumn(const char *zColNew, sqlite3 **pDb, int *pRenamed){
   /* Queries and D{D,M}L used here */
   static const char const *zTabMake = "\
 CREATE TABLE ColNames(\
@@ -7373,6 +7376,7 @@ FROM (\
     }else{
       zColsSpec = 0;
     }
+    if( pRenamed!=0 ) *pRenamed = hasDupes;
     sqlite3_finalize(pStmt);
     sqlite3_close(*pDb);
     *pDb = 0;
@@ -8926,12 +8930,18 @@ static int do_meta_command(char *zLine, ShellState *p){
       char *zCreate = sqlite3_mprintf("CREATE TABLE \"%w\".\"%w\"",
                                       zSchema, zTable);
       sqlite3 *dbCols = 0;
+      int renamed = 0;
       char *zColDefs;
       while( xRead(&sCtx) ){
-        zAutoColumn(sCtx.z, &dbCols);
+        zAutoColumn(sCtx.z, &dbCols, 0);
         if( sCtx.cTerm!=sCtx.cColSep ) break;
       }
-      zColDefs = zAutoColumn(0, &dbCols);
+      zColDefs = zAutoColumn(0, &dbCols, &renamed);
+      if( renamed!=0 ){
+        utf8_printf((stdin_is_interactive && p->in==stdin)? p->out : stderr,
+                    "Columns renamed during .import %s due to duplicates.\n",
+                    sCtx.zFile);
+      }
       assert(dbCols==0);
       if( zColDefs==0 ){
         sqlite3_free(zCreate);
index 1e0038d9d5642fc673a40ed879b568520f4d56e6..a0a10eeb4d2f8a8fcfadf789ac27b47896b6c004 100644 (file)
@@ -476,4 +476,27 @@ CREATE TABLE t8(a, b, c);
   db eval { SELECT * FROM t8 }
 } {1 2 3}
 
+#----------------------------------------------------------------------------
+# Tests for the shell automatic column rename.
+#
+
+# Import columns containing duplicates
+do_test shell5-5.1 {
+  set out [open shell5.csv w]
+  fconfigure $out -translation lf
+  puts $out {"","x","x","y","z","z_0"}
+  puts $out {0,"ex2","ex3","wye4","zee5","zee6"}
+  close $out
+  forcedelete test.db
+  catchcmd test.db {.import -csv shell5.csv t1
+.mode line
+SELECT * FROM t1;}
+} {1 {    ? = 0
+  x_2 = ex2
+  x_3 = ex3
+    y = wye4
+  z_5 = zee5
+  z_6 = zee6
+Columns renamed during .import shell5.csv due to duplicates.}}
+
 finish_test