<cfsilent>
<!--- 20181209 v0.3 добавлено поле cfSqlType--->
<!--- 20201029 v0.5  все атрибуты необязательные--->
<!--- 20201114 v0.6 добавлен атрибут "container" for json--->
<!--- 20201201 v0.7 исправлен listOut--->
<!--- 20210326 v0.8 formatter --->
<!--- 20210326 v0.9 listOutKeepContent --->
<!--- Используется в селекте для структурирования списка полей. Выводит вместо себя список через запятую, экспортирует Map со структурами выражение+заголовок, с ключом, соответствующим имени колонки в селекте (ключ вычисляется регулярным выражением)  --->

	<cfif thisTag.executionMode is "end">	
	
		<cfparam name="ATTRIBUTES.titleMapOut" default=""/>	
		<cfparam name="ATTRIBUTES.lengthOut" default=""/>
		<cfparam name="ATTRIBUTES.listOut" default=""/><!---возвращаемый	список полей через запятую для селекта. Если не задан (чаще всего так), этот список возвращается в виде контента тега --->
		<cfparam name="ATTRIBUTES.listOutKeepContent" default=false/><!--- указывает listOut не очищать контент --->
		<cfparam name="ATTRIBUTES.fieldsToInclude" default=""/><!--- список нужных полей, если не пустой - выбрасывать все поля, кроме тех, что в списке --->

		<cfparam name="thisTag.fieldsArray" type="array"/><!--- Вложенные теги field отдают сюда свои данные --->
		
		<cfset titleMap=structNew("linked")/><!---railo syntax--->
		<cfset list=""/>
		<cfset i=0/>
		<cfloop array=#thisTag.fieldsArray# index="field">
			<cfif len(#field.name#) EQ 0 
				OR listLen(ATTRIBUTES.fieldsToInclude) EQ 0 
				OR listFind(ATTRIBUTES.fieldsToInclude,field.name)> 
				<!--- пытаемся сохранить прежнюю логику - поля без имени не выбрасываются, но не попадают в titleMap --->				
				<cfset i=i+1/>			
				<cfset list=listAppend(#list#, #field.expression#)/>
			
				<cfif len(#field.name#)>					
					<cfset structInsert(#titleMap#, #field.name#, structNew())/>
					<cfset "titleMap.#field.name#.ordinal"=#i#/>
					<cfset "titleMap.#field.name#.title"=#field.title#/>
					<cfset "titleMap.#field.name#.type"=#field.type#/>
					<cfset "titleMap.#field.name#.cfSqlType"=#field.cfSqlType#/>
					<cfset "titleMap.#field.name#.container"=#field.container#/>
					<cfset "titleMap.#field.name#.formatter"=#field.formatter#/>
				</cfif>
			</cfif>
		</cfloop>

		<cfif len(ATTRIBUTES.lengthOut)>
			<cfset "CALLER.#ATTRIBUTES.lengthOut#"= i/>
		</cfif>
		
		<cfif len(ATTRIBUTES.titleMapOut)>
			<cfset "CALLER.#ATTRIBUTES.titleMapOut#"=#titleMap#/>
		</cfif>
		
		<!--- <cfif len(ATTRIBUTES.listOut)>
			<cfset "CALLER.#ATTRIBUTES.listOut#"=preserveSingleQuotes(list)/>
			<cfset thisTag.generatedContent=""/>
		</cfif> --->
		
		<cfif len(ATTRIBUTES.listOut)><!--- *** некрасиво --->
			<cfset "CALLER.#ATTRIBUTES.listOut#"=list/>
			<cfif ATTRIBUTES.listOutKeepContent>
				<cfset thisTag.generatedContent=preserveSingleQuotes(list)/>
			<cfelse>
				<cfset thisTag.generatedContent=""/>
			</cfif>
		<cfelse>
			<cfset thisTag.generatedContent=preserveSingleQuotes(list)/>
		</cfif>
		
	</cfif>
</cfsilent>